diff --git a/CHANGELOG.md b/CHANGELOG.md
index 57e6dbc71c..add7f53ae9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,6 @@
# Changelog
-## [3.6.0-nightly.4](https://github.com/pypeclub/OpenPype/tree/HEAD)
+## [3.6.0-nightly.5](https://github.com/pypeclub/OpenPype/tree/HEAD)
[Full Changelog](https://github.com/pypeclub/OpenPype/compare/3.5.0...HEAD)
@@ -9,10 +9,17 @@
- Maya : Colorspace configuration [\#2170](https://github.com/pypeclub/OpenPype/pull/2170)
- Blender: Added support for audio [\#2168](https://github.com/pypeclub/OpenPype/pull/2168)
- Flame: a host basic integration [\#2165](https://github.com/pypeclub/OpenPype/pull/2165)
+- Houdini: simple HDA workflow [\#2072](https://github.com/pypeclub/OpenPype/pull/2072)
**🚀 Enhancements**
+- Add both side availability on Site Sync sites to Loader [\#2220](https://github.com/pypeclub/OpenPype/pull/2220)
+- Tools: Center loader and library loader on show [\#2219](https://github.com/pypeclub/OpenPype/pull/2219)
+- Maya : Validate shape zero [\#2212](https://github.com/pypeclub/OpenPype/pull/2212)
+- Maya : validate unique names [\#2211](https://github.com/pypeclub/OpenPype/pull/2211)
+- Tools: OpenPype stylesheet in workfiles tool [\#2208](https://github.com/pypeclub/OpenPype/pull/2208)
- Ftrack: Replace Queue with deque in event handlers logic [\#2204](https://github.com/pypeclub/OpenPype/pull/2204)
+- Tools: New select context dialog [\#2200](https://github.com/pypeclub/OpenPype/pull/2200)
- Maya : Validate mesh ngons [\#2199](https://github.com/pypeclub/OpenPype/pull/2199)
- Delivery: Check 'frame' key in template for sequence delivery [\#2196](https://github.com/pypeclub/OpenPype/pull/2196)
- Usage of tools code [\#2185](https://github.com/pypeclub/OpenPype/pull/2185)
@@ -21,11 +28,11 @@
- Tools: Experimental tools [\#2167](https://github.com/pypeclub/OpenPype/pull/2167)
- Loader: Refactor and use OpenPype stylesheets [\#2166](https://github.com/pypeclub/OpenPype/pull/2166)
- Add loader for linked smart objects in photoshop [\#2149](https://github.com/pypeclub/OpenPype/pull/2149)
-- Burnins: DNxHD profiles handling [\#2142](https://github.com/pypeclub/OpenPype/pull/2142)
-- Tools: Single access point for host tools [\#2139](https://github.com/pypeclub/OpenPype/pull/2139)
**🐛 Bug fixes**
+- Maya : multiple subsets review broken [\#2210](https://github.com/pypeclub/OpenPype/pull/2210)
+- Fix - different command used for Linux and Mac OS [\#2207](https://github.com/pypeclub/OpenPype/pull/2207)
- Tools: Workfiles tool don't use avalon widgets [\#2205](https://github.com/pypeclub/OpenPype/pull/2205)
- Ftrack: Fill missing ftrack id on mongo project [\#2203](https://github.com/pypeclub/OpenPype/pull/2203)
- Project Manager: Fix copying of tasks [\#2191](https://github.com/pypeclub/OpenPype/pull/2191)
@@ -34,10 +41,7 @@
- MacOS: Launching of applications may cause Permissions error [\#2175](https://github.com/pypeclub/OpenPype/pull/2175)
- Maya: Aspect ratio [\#2174](https://github.com/pypeclub/OpenPype/pull/2174)
- Blender: Fix 'Deselect All' with object not in 'Object Mode' [\#2163](https://github.com/pypeclub/OpenPype/pull/2163)
-- Tools: Stylesheets are applied after tool show [\#2161](https://github.com/pypeclub/OpenPype/pull/2161)
-- Maya: Collect render - fix UNC path support 🐛 [\#2158](https://github.com/pypeclub/OpenPype/pull/2158)
- Maya: Fix hotbox broken by scriptsmenu [\#2151](https://github.com/pypeclub/OpenPype/pull/2151)
-- Ftrack: Ignore save warnings exception in Prepare project action [\#2150](https://github.com/pypeclub/OpenPype/pull/2150)
- Added validator for source files for Standalone Publisher [\#2138](https://github.com/pypeclub/OpenPype/pull/2138)
**Merged pull requests:**
@@ -45,7 +49,6 @@
- Settings: Site sync project settings improvement [\#2193](https://github.com/pypeclub/OpenPype/pull/2193)
- Add validate active site button to sync queue on a project [\#2176](https://github.com/pypeclub/OpenPype/pull/2176)
- Bump pillow from 8.2.0 to 8.3.2 [\#2162](https://github.com/pypeclub/OpenPype/pull/2162)
-- Bump axios from 0.21.1 to 0.21.4 in /website [\#2059](https://github.com/pypeclub/OpenPype/pull/2059)
## [3.5.0](https://github.com/pypeclub/OpenPype/tree/3.5.0) (2021-10-17)
@@ -62,8 +65,6 @@
- PYPE-1218 - changed namespace to contain subset name in Maya [\#2114](https://github.com/pypeclub/OpenPype/pull/2114)
- Added running configurable disk mapping command before start of OP [\#2091](https://github.com/pypeclub/OpenPype/pull/2091)
- SFTP provider [\#2073](https://github.com/pypeclub/OpenPype/pull/2073)
-- Houdini: simple HDA workflow [\#2072](https://github.com/pypeclub/OpenPype/pull/2072)
-- Maya: Validate setdress top group [\#2068](https://github.com/pypeclub/OpenPype/pull/2068)
**🚀 Enhancements**
@@ -79,8 +80,6 @@
- Global: add global validators to settings [\#2078](https://github.com/pypeclub/OpenPype/pull/2078)
- Use CRF for burnin when available [\#2070](https://github.com/pypeclub/OpenPype/pull/2070)
- Project manager: Filter first item after selection of project [\#2069](https://github.com/pypeclub/OpenPype/pull/2069)
-- Nuke: Adding `still` image family workflow [\#2064](https://github.com/pypeclub/OpenPype/pull/2064)
-- Maya: validate authorized loaded plugins [\#2062](https://github.com/pypeclub/OpenPype/pull/2062)
**🐛 Bug fixes**
@@ -102,8 +101,6 @@
- Deadline: Collect deadline server does not check existence of deadline key [\#2082](https://github.com/pypeclub/OpenPype/pull/2082)
- Blender: fixed Curves with modifiers in Rigs [\#2081](https://github.com/pypeclub/OpenPype/pull/2081)
- Nuke UI scaling [\#2077](https://github.com/pypeclub/OpenPype/pull/2077)
-- Maya: Fix multi-camera renders [\#2065](https://github.com/pypeclub/OpenPype/pull/2065)
-- Fix Sync Queue when project disabled [\#2063](https://github.com/pypeclub/OpenPype/pull/2063)
**Merged pull requests:**
@@ -113,11 +110,6 @@
[Full Changelog](https://github.com/pypeclub/OpenPype/compare/CI/3.4.1-nightly.1...3.4.1)
-**🐛 Bug fixes**
-
-- Timers manger: Typo fix [\#2058](https://github.com/pypeclub/OpenPype/pull/2058)
-- Hiero: Editorial fixes [\#2057](https://github.com/pypeclub/OpenPype/pull/2057)
-
## [3.4.0](https://github.com/pypeclub/OpenPype/tree/3.4.0) (2021-09-17)
[Full Changelog](https://github.com/pypeclub/OpenPype/compare/CI/3.4.0-nightly.6...3.4.0)
diff --git a/openpype/cli.py b/openpype/cli.py
index b4b1b4481e..62a060b498 100644
--- a/openpype/cli.py
+++ b/openpype/cli.py
@@ -168,7 +168,7 @@ def publish(debug, paths, targets, gui):
@click.option("-p", "--project", help="Project")
@click.option("-t", "--targets", help="Targets", default=None,
multiple=True)
-def remotepublishfromapp(debug, project, path, host, targets=None, user=None):
+def remotepublishfromapp(debug, project, path, host, user=None, targets=None):
"""Start CLI publishing.
Publish collects json from paths provided as an argument.
@@ -176,18 +176,19 @@ def remotepublishfromapp(debug, project, path, host, targets=None, user=None):
"""
if debug:
os.environ['OPENPYPE_DEBUG'] = '3'
- PypeCommands.remotepublishfromapp(project, path, host, user,
- targets=targets)
+ PypeCommands.remotepublishfromapp(
+ project, path, host, user, targets=targets
+ )
+
@main.command()
@click.argument("path")
@click.option("-d", "--debug", is_flag=True, help="Print debug messages")
-@click.option("-h", "--host", help="Host")
@click.option("-u", "--user", help="User email address")
@click.option("-p", "--project", help="Project")
@click.option("-t", "--targets", help="Targets", default=None,
multiple=True)
-def remotepublish(debug, project, path, host, targets=None, user=None):
+def remotepublish(debug, project, path, user=None, targets=None):
"""Start CLI publishing.
Publish collects json from paths provided as an argument.
@@ -195,7 +196,7 @@ def remotepublish(debug, project, path, host, targets=None, user=None):
"""
if debug:
os.environ['OPENPYPE_DEBUG'] = '3'
- PypeCommands.remotepublish(project, path, host, user, targets=targets)
+ PypeCommands.remotepublish(project, path, user, targets=targets)
@main.command()
diff --git a/openpype/hosts/maya/api/__init__.py b/openpype/hosts/maya/api/__init__.py
index 0a8370eafc..e330904abf 100644
--- a/openpype/hosts/maya/api/__init__.py
+++ b/openpype/hosts/maya/api/__init__.py
@@ -13,6 +13,7 @@ from pyblish import api as pyblish
from openpype.lib import any_outdated
import openpype.hosts.maya
from openpype.hosts.maya.lib import copy_workspace_mel
+from openpype.lib.path_tools import HostDirmap
from . import menu, lib
log = logging.getLogger("openpype.hosts.maya")
@@ -30,7 +31,8 @@ def install():
project_settings = get_project_settings(os.getenv("AVALON_PROJECT"))
# process path mapping
- process_dirmap(project_settings)
+ dirmap_processor = MayaDirmap("maya", project_settings)
+ dirmap_processor.process_dirmap()
pyblish.register_plugin_path(PUBLISH_PATH)
avalon.register_plugin_path(avalon.Loader, LOAD_PATH)
@@ -60,110 +62,6 @@ def install():
avalon.data["familiesStateToggled"] = ["imagesequence"]
-def process_dirmap(project_settings):
- # type: (dict) -> None
- """Go through all paths in Settings and set them using `dirmap`.
-
- If artists has Site Sync enabled, take dirmap mapping directly from
- Local Settings when artist is syncing workfile locally.
-
- Args:
- project_settings (dict): Settings for current project.
-
- """
- local_mapping = _get_local_sync_dirmap(project_settings)
- if not project_settings["maya"].get("maya-dirmap") and not local_mapping:
- return
-
- mapping = local_mapping or \
- project_settings["maya"]["maya-dirmap"]["paths"] \
- or {}
- mapping_enabled = project_settings["maya"]["maya-dirmap"]["enabled"] \
- or bool(local_mapping)
-
- if not mapping or not mapping_enabled:
- return
- if mapping.get("source-path") and mapping_enabled is True:
- log.info("Processing directory mapping ...")
- cmds.dirmap(en=True)
- for k, sp in enumerate(mapping["source-path"]):
- try:
- print("{} -> {}".format(sp, mapping["destination-path"][k]))
- cmds.dirmap(m=(sp, mapping["destination-path"][k]))
- cmds.dirmap(m=(mapping["destination-path"][k], sp))
- except IndexError:
- # missing corresponding destination path
- log.error(("invalid dirmap mapping, missing corresponding"
- " destination directory."))
- break
- except RuntimeError:
- log.error("invalid path {} -> {}, mapping not registered".format(
- sp, mapping["destination-path"][k]
- ))
- continue
-
-
-def _get_local_sync_dirmap(project_settings):
- """
- Returns dirmap if synch to local project is enabled.
-
- Only valid mapping is from roots of remote site to local site set in
- Local Settings.
-
- Args:
- project_settings (dict)
- Returns:
- dict : { "source-path": [XXX], "destination-path": [YYYY]}
- """
- import json
- mapping = {}
-
- if not project_settings["global"]["sync_server"]["enabled"]:
- log.debug("Site Sync not enabled")
- return mapping
-
- from openpype.settings.lib import get_site_local_overrides
- from openpype.modules import ModulesManager
-
- manager = ModulesManager()
- sync_module = manager.modules_by_name["sync_server"]
-
- project_name = os.getenv("AVALON_PROJECT")
- sync_settings = sync_module.get_sync_project_setting(
- os.getenv("AVALON_PROJECT"), exclude_locals=False, cached=False)
- log.debug(json.dumps(sync_settings, indent=4))
-
- active_site = sync_module.get_local_normalized_site(
- sync_module.get_active_site(project_name))
- remote_site = sync_module.get_local_normalized_site(
- sync_module.get_remote_site(project_name))
- log.debug("active {} - remote {}".format(active_site, remote_site))
-
- if active_site == "local" \
- and project_name in sync_module.get_enabled_projects()\
- and active_site != remote_site:
- overrides = get_site_local_overrides(os.getenv("AVALON_PROJECT"),
- active_site)
- for root_name, value in overrides.items():
- if os.path.isdir(value):
- try:
- mapping["destination-path"] = [value]
- mapping["source-path"] = [sync_settings["sites"]\
- [remote_site]\
- ["root"]\
- [root_name]]
- except IndexError:
- # missing corresponding destination path
- log.debug("overrides".format(overrides))
- log.error(
- ("invalid dirmap mapping, missing corresponding"
- " destination directory."))
- break
-
- log.debug("local sync mapping:: {}".format(mapping))
- return mapping
-
-
def uninstall():
pyblish.deregister_plugin_path(PUBLISH_PATH)
avalon.deregister_plugin_path(avalon.Loader, LOAD_PATH)
@@ -326,3 +224,12 @@ def before_workfile_save(workfile_path):
workdir = os.path.dirname(workfile_path)
copy_workspace_mel(workdir)
+
+
+class MayaDirmap(HostDirmap):
+ def on_enable_dirmap(self):
+ cmds.dirmap(en=True)
+
+ def dirmap_routine(self, source_path, destination_path):
+ cmds.dirmap(m=(source_path, destination_path))
+ cmds.dirmap(m=(destination_path, source_path))
diff --git a/openpype/hosts/maya/api/lib.py b/openpype/hosts/maya/api/lib.py
index 88c0525f3b..4074aa7fa8 100644
--- a/openpype/hosts/maya/api/lib.py
+++ b/openpype/hosts/maya/api/lib.py
@@ -2183,10 +2183,11 @@ def load_capture_preset(data=None):
for key in preset['Display Options']:
if key.startswith('background'):
disp_options[key] = preset['Display Options'][key]
- disp_options[key][0] = (float(disp_options[key][0])/255)
- disp_options[key][1] = (float(disp_options[key][1])/255)
- disp_options[key][2] = (float(disp_options[key][2])/255)
- disp_options[key].pop()
+ if len(disp_options[key]) == 4:
+ disp_options[key][0] = (float(disp_options[key][0])/255)
+ disp_options[key][1] = (float(disp_options[key][1])/255)
+ disp_options[key][2] = (float(disp_options[key][2])/255)
+ disp_options[key].pop()
else:
disp_options['displayGradient'] = True
diff --git a/openpype/hosts/maya/plugins/publish/extract_playblast.py b/openpype/hosts/maya/plugins/publish/extract_playblast.py
index 57e3f478f1..b233a57453 100644
--- a/openpype/hosts/maya/plugins/publish/extract_playblast.py
+++ b/openpype/hosts/maya/plugins/publish/extract_playblast.py
@@ -45,9 +45,12 @@ class ExtractPlayblast(openpype.api.Extractor):
# get cameras
camera = instance.data['review_camera']
+ override_viewport_options = (
+ self.capture_preset['Viewport Options']
+ ['override_viewport_options']
+ )
preset = lib.load_capture_preset(data=self.capture_preset)
-
preset['camera'] = camera
preset['start_frame'] = start
preset['end_frame'] = end
@@ -92,6 +95,12 @@ class ExtractPlayblast(openpype.api.Extractor):
self.log.info('using viewport preset: {}'.format(preset))
+ # Update preset with current panel setting
+ # if override_viewport_options is turned off
+ if not override_viewport_options:
+ panel_preset = capture.parse_active_view()
+ preset.update(panel_preset)
+
path = capture.capture(**preset)
self.log.debug("playblast path {}".format(path))
diff --git a/openpype/hosts/maya/plugins/publish/extract_thumbnail.py b/openpype/hosts/maya/plugins/publish/extract_thumbnail.py
index aa8adc3986..c2cefc56f1 100644
--- a/openpype/hosts/maya/plugins/publish/extract_thumbnail.py
+++ b/openpype/hosts/maya/plugins/publish/extract_thumbnail.py
@@ -32,6 +32,9 @@ class ExtractThumbnail(openpype.api.Extractor):
capture_preset = (
instance.context.data["project_settings"]['maya']['publish']['ExtractPlayblast']['capture_preset']
)
+ override_viewport_options = (
+ capture_preset['Viewport Options']['override_viewport_options']
+ )
try:
preset = lib.load_capture_preset(data=capture_preset)
@@ -86,6 +89,12 @@ class ExtractThumbnail(openpype.api.Extractor):
# playblast and viewer
preset['viewer'] = False
+ # Update preset with current panel setting
+ # if override_viewport_options is turned off
+ if not override_viewport_options:
+ panel_preset = capture.parse_active_view()
+ preset.update(panel_preset)
+
path = capture.capture(**preset)
playblast = self._fix_playblast_output_path(path)
diff --git a/openpype/hosts/maya/plugins/publish/validate_shape_zero.py b/openpype/hosts/maya/plugins/publish/validate_shape_zero.py
new file mode 100644
index 0000000000..2c594ef5f3
--- /dev/null
+++ b/openpype/hosts/maya/plugins/publish/validate_shape_zero.py
@@ -0,0 +1,59 @@
+from maya import cmds
+
+import pyblish.api
+import openpype.api
+import openpype.hosts.maya.api.action
+
+
+class ValidateShapeZero(pyblish.api.Validator):
+ """shape can't have any values
+
+ To solve this issue, try freezing the shapes. So long
+ as the translation, rotation and scaling values are zero,
+ you're all good.
+
+ """
+
+ order = openpype.api.ValidateContentsOrder
+ hosts = ["maya"]
+ families = ["model"]
+ label = "Shape Zero (Freeze)"
+ actions = [
+ openpype.hosts.maya.api.action.SelectInvalidAction,
+ openpype.api.RepairAction
+ ]
+
+ @staticmethod
+ def get_invalid(instance):
+ """Returns the invalid shapes in the instance.
+
+ This is the same as checking:
+ - all(pnt == [0,0,0] for pnt in shape.pnts[:])
+
+ Returns:
+ list: Shape with non freezed vertex
+
+ """
+
+ shapes = cmds.ls(instance, type="shape")
+
+ invalid = []
+ for shape in shapes:
+ if cmds.polyCollapseTweaks(shape, q=True, hasVertexTweaks=True):
+ invalid.append(shape)
+
+ return invalid
+
+ @classmethod
+ def repair(cls, instance):
+ invalid_shapes = cls.get_invalid(instance)
+ for shape in invalid_shapes:
+ cmds.polyCollapseTweaks(shape)
+
+ def process(self, instance):
+ """Process all the nodes in the instance "objectSet"""
+
+ invalid = self.get_invalid(instance)
+ if invalid:
+ raise ValueError("Nodes found with shape or vertices not freezed"
+ "values: {0}".format(invalid))
diff --git a/openpype/hosts/nuke/api/lib.py b/openpype/hosts/nuke/api/lib.py
index 9ee3a4464b..6d593ca588 100644
--- a/openpype/hosts/nuke/api/lib.py
+++ b/openpype/hosts/nuke/api/lib.py
@@ -24,6 +24,10 @@ from openpype.api import (
ApplicationManager
)
from openpype.tools.utils import host_tools
+from openpype.lib.path_tools import HostDirmap
+from openpype.settings import get_project_settings
+from openpype.modules import ModulesManager
+
import nuke
from .utils import set_context_favorites
@@ -1795,3 +1799,69 @@ def recreate_instance(origin_node, avalon_data=None):
dn.setInput(0, new_node)
return new_node
+
+
+class NukeDirmap(HostDirmap):
+ def __init__(self, host_name, project_settings, sync_module, file_name):
+ """
+ Args:
+ host_name (str): Nuke
+ project_settings (dict): settings of current project
+ sync_module (SyncServerModule): to limit reinitialization
+ file_name (str): full path of referenced file from workfiles
+ """
+ self.host_name = host_name
+ self.project_settings = project_settings
+ self.file_name = file_name
+ self.sync_module = sync_module
+
+ self._mapping = None # cache mapping
+
+ def on_enable_dirmap(self):
+ pass
+
+ def dirmap_routine(self, source_path, destination_path):
+ log.debug("{}: {}->{}".format(self.file_name,
+ source_path, destination_path))
+ source_path = source_path.lower().replace(os.sep, '/')
+ destination_path = destination_path.lower().replace(os.sep, '/')
+ if platform.system().lower() == "windows":
+ self.file_name = self.file_name.lower().replace(
+ source_path, destination_path)
+ else:
+ self.file_name = self.file_name.replace(
+ source_path, destination_path)
+
+
+class DirmapCache:
+ """Caching class to get settings and sync_module easily and only once."""
+ _project_settings = None
+ _sync_module = None
+
+ @classmethod
+ def project_settings(cls):
+ if cls._project_settings is None:
+ cls._project_settings = get_project_settings(
+ os.getenv("AVALON_PROJECT"))
+ return cls._project_settings
+
+ @classmethod
+ def sync_module(cls):
+ if cls._sync_module is None:
+ cls._sync_module = ModulesManager().modules_by_name["sync_server"]
+ return cls._sync_module
+
+
+def dirmap_file_name_filter(file_name):
+ """Nuke callback function with single full path argument.
+
+ Checks project settings for potential mapping from source to dest.
+ """
+ dirmap_processor = NukeDirmap("nuke",
+ DirmapCache.project_settings(),
+ DirmapCache.sync_module(),
+ file_name)
+ dirmap_processor.process_dirmap()
+ if os.path.exists(dirmap_processor.file_name):
+ return dirmap_processor.file_name
+ return file_name
diff --git a/openpype/hosts/nuke/startup/menu.py b/openpype/hosts/nuke/startup/menu.py
index c452acb709..b7ed35b3b4 100644
--- a/openpype/hosts/nuke/startup/menu.py
+++ b/openpype/hosts/nuke/startup/menu.py
@@ -6,10 +6,10 @@ from openpype.hosts.nuke.api.lib import (
import nuke
from openpype.api import Logger
+from openpype.hosts.nuke.api.lib import dirmap_file_name_filter
log = Logger().get_logger(__name__)
-
# fix ffmpeg settings on script
nuke.addOnScriptLoad(on_script_load)
@@ -20,4 +20,6 @@ nuke.addOnScriptSave(check_inventory_versions)
# # set apply all workfile settings on script load and save
nuke.addOnScriptLoad(WorkfileSettings().set_context_settings)
+nuke.addFilenameFilter(dirmap_file_name_filter)
+
log.info('Automatic syncing of write file knob to script version')
diff --git a/openpype/hosts/webpublisher/plugins/publish/collect_batch_data.py b/openpype/hosts/webpublisher/plugins/publish/collect_batch_data.py
new file mode 100644
index 0000000000..a710fcb3e8
--- /dev/null
+++ b/openpype/hosts/webpublisher/plugins/publish/collect_batch_data.py
@@ -0,0 +1,84 @@
+"""Loads batch context from json and continues in publish process.
+
+Provides:
+ context -> Loaded batch file.
+"""
+
+import os
+
+import pyblish.api
+from avalon import io
+from openpype.lib.plugin_tools import (
+ parse_json,
+ get_batch_asset_task_info
+)
+from openpype.lib.remote_publish import get_webpublish_conn
+
+
+class CollectBatchData(pyblish.api.ContextPlugin):
+ """Collect batch data from json stored in 'OPENPYPE_PUBLISH_DATA' env dir.
+
+ The directory must contain 'manifest.json' file where batch data should be
+ stored.
+ """
+ # must be really early, context values are only in json file
+ order = pyblish.api.CollectorOrder - 0.495
+ label = "Collect batch data"
+ host = ["webpublisher"]
+
+ def process(self, context):
+ batch_dir = os.environ.get("OPENPYPE_PUBLISH_DATA")
+
+ assert batch_dir, (
+ "Missing `OPENPYPE_PUBLISH_DATA`")
+
+ assert os.path.exists(batch_dir), \
+ "Folder {} doesn't exist".format(batch_dir)
+
+ project_name = os.environ.get("AVALON_PROJECT")
+ if project_name is None:
+ raise AssertionError(
+ "Environment `AVALON_PROJECT` was not found."
+ "Could not set project `root` which may cause issues."
+ )
+
+ batch_data = parse_json(os.path.join(batch_dir, "manifest.json"))
+
+ context.data["batchDir"] = batch_dir
+ context.data["batchData"] = batch_data
+
+ asset_name, task_name, task_type = get_batch_asset_task_info(
+ batch_data["context"]
+ )
+
+ os.environ["AVALON_ASSET"] = asset_name
+ io.Session["AVALON_ASSET"] = asset_name
+ os.environ["AVALON_TASK"] = task_name
+ io.Session["AVALON_TASK"] = task_name
+
+ context.data["asset"] = asset_name
+ context.data["task"] = task_name
+ context.data["taskType"] = task_type
+
+ self._set_ctx_path(batch_data)
+
+ def _set_ctx_path(self, batch_data):
+ dbcon = get_webpublish_conn()
+
+ batch_id = batch_data["batch"]
+ ctx_path = batch_data["context"]["path"]
+ self.log.info("ctx_path: {}".format(ctx_path))
+ self.log.info("batch_id: {}".format(batch_id))
+ if ctx_path and batch_id:
+ self.log.info("Updating log record")
+ dbcon.update_one(
+ {
+ "batch_id": batch_id,
+ "status": "in_progress"
+ },
+ {
+ "$set": {
+ "path": ctx_path
+ }
+ }
+ )
diff --git a/openpype/hosts/webpublisher/plugins/publish/collect_fps.py b/openpype/hosts/webpublisher/plugins/publish/collect_fps.py
index 79fe53176a..b5e665c761 100644
--- a/openpype/hosts/webpublisher/plugins/publish/collect_fps.py
+++ b/openpype/hosts/webpublisher/plugins/publish/collect_fps.py
@@ -20,9 +20,8 @@ class CollectFPS(pyblish.api.InstancePlugin):
hosts = ["webpublisher"]
def process(self, instance):
- fps = instance.context.data["fps"]
+ instance_fps = instance.data.get("fps")
+ if instance_fps is None:
+ instance.data["fps"] = instance.context.data["fps"]
- instance.data.update({
- "fps": fps
- })
self.log.debug(f"instance.data: {pformat(instance.data)}")
diff --git a/openpype/hosts/webpublisher/plugins/publish/collect_published_files.py b/openpype/hosts/webpublisher/plugins/publish/collect_published_files.py
index ecd65ebae4..d2754b3df3 100644
--- a/openpype/hosts/webpublisher/plugins/publish/collect_published_files.py
+++ b/openpype/hosts/webpublisher/plugins/publish/collect_published_files.py
@@ -1,21 +1,19 @@
-"""Loads publishing context from json and continues in publish process.
+"""Create instances from batch data and continues in publish process.
Requires:
- anatomy -> context["anatomy"] *(pyblish.api.CollectorOrder - 0.11)
+ CollectBatchData
Provides:
context, instances -> All data from previous publishing process.
"""
import os
-import json
import clique
import tempfile
-
-import pyblish.api
from avalon import io
+import pyblish.api
from openpype.lib import prepare_template_data
-from openpype.lib.plugin_tools import parse_json, get_batch_asset_task_info
+from openpype.lib.plugin_tools import parse_json
class CollectPublishedFiles(pyblish.api.ContextPlugin):
@@ -28,28 +26,28 @@ class CollectPublishedFiles(pyblish.api.ContextPlugin):
order = pyblish.api.CollectorOrder - 0.490
label = "Collect rendered frames"
host = ["webpublisher"]
-
- _context = None
+ targets = ["filespublish"]
# from Settings
task_type_to_family = {}
- def _process_batch(self, dir_url):
- task_subfolders = [
- os.path.join(dir_url, o)
- for o in os.listdir(dir_url)
- if os.path.isdir(os.path.join(dir_url, o))]
+ def process(self, context):
+ batch_dir = context.data["batchDir"]
+ task_subfolders = []
+ for folder_name in os.listdir(batch_dir):
+ full_path = os.path.join(batch_dir, folder_name)
+ if os.path.isdir(full_path):
+ task_subfolders.append(full_path)
+
self.log.info("task_sub:: {}".format(task_subfolders))
+
+ asset_name = context.data["asset"]
+ task_name = context.data["task"]
+ task_type = context.data["taskType"]
for task_dir in task_subfolders:
task_data = parse_json(os.path.join(task_dir,
"manifest.json"))
self.log.info("task_data:: {}".format(task_data))
- ctx = task_data["context"]
-
- asset, task_name, task_type = get_batch_asset_task_info(ctx)
-
- if task_name:
- os.environ["AVALON_TASK"] = task_name
is_sequence = len(task_data["files"]) > 1
@@ -60,26 +58,20 @@ class CollectPublishedFiles(pyblish.api.ContextPlugin):
is_sequence,
extension.replace(".", ''))
- subset = self._get_subset_name(family, subset_template, task_name,
- task_data["variant"])
+ subset = self._get_subset_name(
+ family, subset_template, task_name, task_data["variant"]
+ )
+ version = self._get_last_version(asset_name, subset) + 1
- os.environ["AVALON_ASSET"] = asset
- io.Session["AVALON_ASSET"] = asset
-
- instance = self._context.create_instance(subset)
- instance.data["asset"] = asset
+ instance = context.create_instance(subset)
+ instance.data["asset"] = asset_name
instance.data["subset"] = subset
instance.data["family"] = family
instance.data["families"] = families
- instance.data["version"] = \
- self._get_last_version(asset, subset) + 1
+ instance.data["version"] = version
instance.data["stagingDir"] = tempfile.mkdtemp()
instance.data["source"] = "webpublisher"
- # to store logging info into DB openpype.webpublishes
- instance.data["ctx_path"] = ctx["path"]
- instance.data["batch_id"] = task_data["batch"]
-
# to convert from email provided into Ftrack username
instance.data["user_email"] = task_data["user"]
@@ -230,23 +222,3 @@ class CollectPublishedFiles(pyblish.api.ContextPlugin):
return version[0].get("version") or 0
else:
return 0
-
- def process(self, context):
- self._context = context
-
- batch_dir = os.environ.get("OPENPYPE_PUBLISH_DATA")
-
- assert batch_dir, (
- "Missing `OPENPYPE_PUBLISH_DATA`")
-
- assert os.path.exists(batch_dir), \
- "Folder {} doesn't exist".format(batch_dir)
-
- project_name = os.environ.get("AVALON_PROJECT")
- if project_name is None:
- raise AssertionError(
- "Environment `AVALON_PROJECT` was not found."
- "Could not set project `root` which may cause issues."
- )
-
- self._process_batch(batch_dir)
diff --git a/openpype/hosts/webpublisher/plugins/publish/integrate_context_to_log.py b/openpype/hosts/webpublisher/plugins/publish/integrate_context_to_log.py
deleted file mode 100644
index 419c065e16..0000000000
--- a/openpype/hosts/webpublisher/plugins/publish/integrate_context_to_log.py
+++ /dev/null
@@ -1,38 +0,0 @@
-import os
-
-import pyblish.api
-from openpype.lib import OpenPypeMongoConnection
-
-
-class IntegrateContextToLog(pyblish.api.ContextPlugin):
- """ Adds context information to log document for displaying in front end"""
-
- label = "Integrate Context to Log"
- order = pyblish.api.IntegratorOrder - 0.1
- hosts = ["webpublisher"]
-
- def process(self, context):
- self.log.info("Integrate Context to Log")
-
- mongo_client = OpenPypeMongoConnection.get_mongo_client()
- database_name = os.environ["OPENPYPE_DATABASE_NAME"]
- dbcon = mongo_client[database_name]["webpublishes"]
-
- for instance in context:
- self.log.info("ctx_path: {}".format(instance.data.get("ctx_path")))
- self.log.info("batch_id: {}".format(instance.data.get("batch_id")))
- if instance.data.get("ctx_path") and instance.data.get("batch_id"):
- self.log.info("Updating log record")
- dbcon.update_one(
- {
- "batch_id": instance.data.get("batch_id"),
- "status": "in_progress"
- },
- {"$set":
- {
- "path": instance.data.get("ctx_path")
-
- }}
- )
-
- return
diff --git a/openpype/hosts/webpublisher/webserver_service/webpublish_routes.py b/openpype/hosts/webpublisher/webserver_service/webpublish_routes.py
index 920ed042dc..73e5113f38 100644
--- a/openpype/hosts/webpublisher/webserver_service/webpublish_routes.py
+++ b/openpype/hosts/webpublisher/webserver_service/webpublish_routes.py
@@ -176,23 +176,48 @@ class TaskNode(Node):
class WebpublisherBatchPublishEndpoint(_RestApiEndpoint):
"""Triggers headless publishing of batch."""
async def post(self, request) -> Response:
- # for postprocessing in host, currently only PS
- host_map = {"photoshop": [".psd", ".psb"]}
+ # Validate existence of openpype executable
+ openpype_app = self.resource.executable
+ if not openpype_app or not os.path.exists(openpype_app):
+ msg = "Non existent OpenPype executable {}".format(openpype_app)
+ raise RuntimeError(msg)
+ # for postprocessing in host, currently only PS
output = {}
log.info("WebpublisherBatchPublishEndpoint called")
content = await request.json()
- batch_path = os.path.join(self.resource.upload_dir,
- content["batch"])
+ # Each filter have extensions which are checked on first task item
+ # - first filter with extensions that are on first task is used
+ # - filter defines command and can extend arguments dictionary
+ # This is used only if 'studio_processing' is enabled on batch
+ studio_processing_filters = [
+ # Photoshop filter
+ {
+ "extensions": [".psd", ".psb"],
+ "command": "remotepublishfromapp",
+ "arguments": {
+ # Command 'remotepublishfromapp' requires --host argument
+ "host": "photoshop",
+ # Make sure targets are set to None for cases that default
+ # would change
+ # - targets argument is not used in 'remotepublishfromapp'
+ "targets": None
+ }
+ }
+ ]
- add_args = {
- "host": "webpublisher",
- "project": content["project_name"],
- "user": content["user"]
- }
+ batch_path = os.path.join(self.resource.upload_dir, content["batch"])
+ # Default command and arguments
command = "remotepublish"
+ add_args = {
+ # All commands need 'project' and 'user'
+ "project": content["project_name"],
+ "user": content["user"],
+
+ "targets": ["filespublish"]
+ }
if content.get("studio_processing"):
log.info("Post processing called")
@@ -208,32 +233,34 @@ class WebpublisherBatchPublishEndpoint(_RestApiEndpoint):
raise ValueError(
"Cannot parse batch meta in {} folder".format(task_data))
- command = "remotepublishfromapp"
- for host, extensions in host_map.items():
- for ext in extensions:
- for file_name in task_data["files"]:
- if ext in file_name:
- add_args["host"] = host
- break
+ for process_filter in studio_processing_filters:
+ filter_extensions = process_filter.get("extensions") or []
+ for file_name in task_data["files"]:
+ file_ext = os.path.splitext(file_name)[-1].lower()
+ if file_ext in filter_extensions:
+ # Change command
+ command = process_filter["command"]
+ # Update arguments
+ add_args.update(
+ process_filter.get("arguments") or {}
+ )
+ break
- if not add_args.get("host"):
- raise ValueError(
- "Couldn't discern host from {}".format(task_data["files"]))
-
- openpype_app = self.resource.executable
args = [
openpype_app,
command,
batch_path
]
- if not openpype_app or not os.path.exists(openpype_app):
- msg = "Non existent OpenPype executable {}".format(openpype_app)
- raise RuntimeError(msg)
-
for key, value in add_args.items():
- args.append("--{}".format(key))
- args.append(value)
+ # Skip key values where value is None
+ if value is not None:
+ args.append("--{}".format(key))
+ # Extend list into arguments (targets can be a list)
+ if isinstance(value, (tuple, list)):
+ args.extend(value)
+ else:
+ args.append(value)
log.info("args:: {}".format(args))
diff --git a/openpype/lib/path_tools.py b/openpype/lib/path_tools.py
index 048bf0eda0..6fd0ad0dfe 100644
--- a/openpype/lib/path_tools.py
+++ b/openpype/lib/path_tools.py
@@ -2,6 +2,8 @@ import json
import logging
import os
import re
+import abc
+import six
from .anatomy import Anatomy
@@ -196,3 +198,159 @@ def get_project_basic_paths(project_name):
if isinstance(folder_structure, str):
folder_structure = json.loads(folder_structure)
return _list_path_items(folder_structure)
+
+
+@six.add_metaclass(abc.ABCMeta)
+class HostDirmap:
+ """
+ Abstract class for running dirmap on a workfile in a host.
+
+ Dirmap is used to translate paths inside of host workfile from one
+ OS to another. (Eg. arstist created workfile on Win, different artists
+ opens same file on Linux.)
+
+ Expects methods to be implemented inside of host:
+ on_dirmap_enabled: run host code for enabling dirmap
+ do_dirmap: run host code to do actual remapping
+ """
+ def __init__(self, host_name, project_settings, sync_module=None):
+ self.host_name = host_name
+ self.project_settings = project_settings
+ self.sync_module = sync_module # to limit reinit of Modules
+
+ self._mapping = None # cache mapping
+
+ @abc.abstractmethod
+ def on_enable_dirmap(self):
+ """
+ Run host dependent operation for enabling dirmap if necessary.
+ """
+
+ @abc.abstractmethod
+ def dirmap_routine(self, source_path, destination_path):
+ """
+ Run host dependent remapping from source_path to destination_path
+ """
+
+ def process_dirmap(self):
+ # type: (dict) -> None
+ """Go through all paths in Settings and set them using `dirmap`.
+
+ If artists has Site Sync enabled, take dirmap mapping directly from
+ Local Settings when artist is syncing workfile locally.
+
+ Args:
+ project_settings (dict): Settings for current project.
+
+ """
+ if not self._mapping:
+ self._mapping = self.get_mappings(self.project_settings)
+ if not self._mapping:
+ return
+
+ log.info("Processing directory mapping ...")
+ self.on_enable_dirmap()
+ log.info("mapping:: {}".format(self._mapping))
+
+ for k, sp in enumerate(self._mapping["source-path"]):
+ try:
+ print("{} -> {}".format(sp,
+ self._mapping["destination-path"][k]))
+ self.dirmap_routine(sp,
+ self._mapping["destination-path"][k])
+ except IndexError:
+ # missing corresponding destination path
+ log.error(("invalid dirmap mapping, missing corresponding"
+ " destination directory."))
+ break
+ except RuntimeError:
+ log.error("invalid path {} -> {}, mapping not registered".format( # noqa: E501
+ sp, self._mapping["destination-path"][k]
+ ))
+ continue
+
+ def get_mappings(self, project_settings):
+ """Get translation from source-path to destination-path.
+
+ It checks if Site Sync is enabled and user chose to use local
+ site, in that case configuration in Local Settings takes precedence
+ """
+ local_mapping = self._get_local_sync_dirmap(project_settings)
+ dirmap_label = "{}-dirmap".format(self.host_name)
+ if not self.project_settings[self.host_name].get(dirmap_label) and \
+ not local_mapping:
+ return []
+ mapping = local_mapping or \
+ self.project_settings[self.host_name][dirmap_label]["paths"] or {}
+ enbled = self.project_settings[self.host_name][dirmap_label]["enabled"]
+ mapping_enabled = enbled or bool(local_mapping)
+
+ if not mapping or not mapping_enabled or \
+ not mapping.get("destination-path") or \
+ not mapping.get("source-path"):
+ return []
+ return mapping
+
+ def _get_local_sync_dirmap(self, project_settings):
+ """
+ Returns dirmap if synch to local project is enabled.
+
+ Only valid mapping is from roots of remote site to local site set
+ in Local Settings.
+
+ Args:
+ project_settings (dict)
+ Returns:
+ dict : { "source-path": [XXX], "destination-path": [YYYY]}
+ """
+ import json
+ mapping = {}
+
+ if not project_settings["global"]["sync_server"]["enabled"]:
+ log.debug("Site Sync not enabled")
+ return mapping
+
+ from openpype.settings.lib import get_site_local_overrides
+
+ if not self.sync_module:
+ from openpype.modules import ModulesManager
+ manager = ModulesManager()
+ self.sync_module = manager.modules_by_name["sync_server"]
+
+ project_name = os.getenv("AVALON_PROJECT")
+
+ active_site = self.sync_module.get_local_normalized_site(
+ self.sync_module.get_active_site(project_name))
+ remote_site = self.sync_module.get_local_normalized_site(
+ self.sync_module.get_remote_site(project_name))
+ log.debug("active {} - remote {}".format(active_site, remote_site))
+
+ if active_site == "local" \
+ and project_name in self.sync_module.get_enabled_projects()\
+ and active_site != remote_site:
+
+ sync_settings = self.sync_module.get_sync_project_setting(
+ os.getenv("AVALON_PROJECT"), exclude_locals=False,
+ cached=False)
+
+ active_overrides = get_site_local_overrides(
+ os.getenv("AVALON_PROJECT"), active_site)
+ remote_overrides = get_site_local_overrides(
+ os.getenv("AVALON_PROJECT"), remote_site)
+
+ log.debug("local overrides".format(active_overrides))
+ log.debug("remote overrides".format(remote_overrides))
+ for root_name, active_site_dir in active_overrides.items():
+ remote_site_dir = remote_overrides.get(root_name) or\
+ sync_settings["sites"][remote_site]["root"][root_name]
+ if os.path.isdir(active_site_dir):
+ if not mapping.get("destination-path"):
+ mapping["destination-path"] = []
+ mapping["destination-path"].append(active_site_dir)
+
+ if not mapping.get("source-path"):
+ mapping["source-path"] = []
+ mapping["source-path"].append(remote_site_dir)
+
+ log.debug("local sync mapping:: {}".format(mapping))
+ return mapping
diff --git a/openpype/modules/default_modules/sync_server/tray/delegates.py b/openpype/modules/default_modules/sync_server/tray/delegates.py
index 461b9fffb3..5ab809a816 100644
--- a/openpype/modules/default_modules/sync_server/tray/delegates.py
+++ b/openpype/modules/default_modules/sync_server/tray/delegates.py
@@ -4,6 +4,18 @@ from Qt import QtCore, QtWidgets, QtGui
from openpype.lib import PypeLogger
from . import lib
+from openpype.tools.utils.constants import (
+ LOCAL_PROVIDER_ROLE,
+ REMOTE_PROVIDER_ROLE,
+ LOCAL_PROGRESS_ROLE,
+ REMOTE_PROGRESS_ROLE,
+ LOCAL_DATE_ROLE,
+ REMOTE_DATE_ROLE,
+ LOCAL_FAILED_ROLE,
+ REMOTE_FAILED_ROLE,
+ EDIT_ICON_ROLE
+)
+
log = PypeLogger().get_logger("SyncServer")
@@ -14,7 +26,7 @@ class PriorityDelegate(QtWidgets.QStyledItemDelegate):
if option.widget.selectionModel().isSelected(index) or \
option.state & QtWidgets.QStyle.State_MouseOver:
- edit_icon = index.data(lib.EditIconRole)
+ edit_icon = index.data(EDIT_ICON_ROLE)
if not edit_icon:
return
@@ -38,7 +50,7 @@ class PriorityDelegate(QtWidgets.QStyledItemDelegate):
editor = PriorityLineEdit(
parent,
option.widget.selectionModel().selectedRows())
- editor.setFocus(True)
+ editor.setFocus()
return editor
def setModelData(self, editor, model, index):
@@ -71,19 +83,30 @@ class ImageDelegate(QtWidgets.QStyledItemDelegate):
Prints icon of site and progress of synchronization
"""
- def __init__(self, parent=None):
+ def __init__(self, parent=None, side=None):
super(ImageDelegate, self).__init__(parent)
self.icons = {}
+ self.side = side
def paint(self, painter, option, index):
super(ImageDelegate, self).paint(painter, option, index)
option = QtWidgets.QStyleOptionViewItem(option)
option.showDecorationSelected = True
- provider = index.data(lib.ProviderRole)
- value = index.data(lib.ProgressRole)
- date_value = index.data(lib.DateRole)
- is_failed = index.data(lib.FailedRole)
+ if not self.side:
+ log.warning("No side provided, delegate won't work")
+ return
+
+ if self.side == 'local':
+ provider = index.data(LOCAL_PROVIDER_ROLE)
+ value = index.data(LOCAL_PROGRESS_ROLE)
+ date_value = index.data(LOCAL_DATE_ROLE)
+ is_failed = index.data(LOCAL_FAILED_ROLE)
+ else:
+ provider = index.data(REMOTE_PROVIDER_ROLE)
+ value = index.data(REMOTE_PROGRESS_ROLE)
+ date_value = index.data(REMOTE_DATE_ROLE)
+ is_failed = index.data(REMOTE_FAILED_ROLE)
if not self.icons.get(provider):
resource_path = os.path.dirname(__file__)
diff --git a/openpype/modules/default_modules/sync_server/tray/lib.py b/openpype/modules/default_modules/sync_server/tray/lib.py
index 25c600abd2..87344be634 100644
--- a/openpype/modules/default_modules/sync_server/tray/lib.py
+++ b/openpype/modules/default_modules/sync_server/tray/lib.py
@@ -1,4 +1,3 @@
-from Qt import QtCore
import attr
import abc
import six
@@ -19,14 +18,6 @@ STATUS = {
DUMMY_PROJECT = "No project configured"
-ProviderRole = QtCore.Qt.UserRole + 2
-ProgressRole = QtCore.Qt.UserRole + 4
-DateRole = QtCore.Qt.UserRole + 6
-FailedRole = QtCore.Qt.UserRole + 8
-HeaderNameRole = QtCore.Qt.UserRole + 10
-FullItemRole = QtCore.Qt.UserRole + 12
-EditIconRole = QtCore.Qt.UserRole + 14
-
@six.add_metaclass(abc.ABCMeta)
class AbstractColumnFilter:
@@ -161,7 +152,7 @@ def translate_provider_for_icon(sync_server, project, site):
return sync_server.get_provider_for_site(site=site)
-def get_item_by_id(model, object_id):
+def get_value_from_id_by_role(model, object_id, role):
+ """Return value from item with 'object_id' with 'role'."""
index = model.get_index(object_id)
- item = model.data(index, FullItemRole)
- return item
+ return model.data(index, role)
diff --git a/openpype/modules/default_modules/sync_server/tray/models.py b/openpype/modules/default_modules/sync_server/tray/models.py
index 713e167a6a..80f41992cb 100644
--- a/openpype/modules/default_modules/sync_server/tray/models.py
+++ b/openpype/modules/default_modules/sync_server/tray/models.py
@@ -13,6 +13,23 @@ from openpype.api import get_local_site_id
from . import lib
+from openpype.tools.utils.constants import (
+ LOCAL_PROVIDER_ROLE,
+ REMOTE_PROVIDER_ROLE,
+ LOCAL_PROGRESS_ROLE,
+ REMOTE_PROGRESS_ROLE,
+ HEADER_NAME_ROLE,
+ EDIT_ICON_ROLE,
+ LOCAL_DATE_ROLE,
+ REMOTE_DATE_ROLE,
+ LOCAL_FAILED_ROLE,
+ REMOTE_FAILED_ROLE,
+ STATUS_ROLE,
+ PATH_ROLE,
+ ERROR_ROLE,
+ TRIES_ROLE
+)
+
log = PypeLogger().get_logger("SyncServer")
@@ -68,10 +85,68 @@ class _SyncRepresentationModel(QtCore.QAbstractTableModel):
if orientation == Qt.Horizontal:
return self.COLUMN_LABELS[section][1]
- if role == lib.HeaderNameRole:
+ if role == HEADER_NAME_ROLE:
if orientation == Qt.Horizontal:
return self.COLUMN_LABELS[section][0] # return name
+ def data(self, index, role):
+ item = self._data[index.row()]
+
+ header_value = self._header[index.column()]
+ if role == LOCAL_PROVIDER_ROLE:
+ return item.local_provider
+
+ if role == REMOTE_PROVIDER_ROLE:
+ return item.remote_provider
+
+ if role == LOCAL_PROGRESS_ROLE:
+ return item.local_progress
+
+ if role == REMOTE_PROGRESS_ROLE:
+ return item.remote_progress
+
+ if role == LOCAL_DATE_ROLE:
+ if item.created_dt:
+ return pretty_timestamp(item.created_dt)
+
+ if role == REMOTE_DATE_ROLE:
+ if item.sync_dt:
+ return pretty_timestamp(item.sync_dt)
+
+ if role == LOCAL_FAILED_ROLE:
+ return item.status == lib.STATUS[2] and \
+ item.local_progress < 1
+
+ if role == REMOTE_FAILED_ROLE:
+ return item.status == lib.STATUS[2] and \
+ item.remote_progress < 1
+
+ if role in (Qt.DisplayRole, Qt.EditRole):
+ # because of ImageDelegate
+ if header_value in ['remote_site', 'local_site']:
+ return ""
+
+ return attr.asdict(item)[self._header[index.column()]]
+
+ if role == EDIT_ICON_ROLE:
+ if self.can_edit and header_value in self.EDITABLE_COLUMNS:
+ return self.edit_icon
+
+ if role == PATH_ROLE:
+ return item.path
+
+ if role == ERROR_ROLE:
+ return item.error
+
+ if role == TRIES_ROLE:
+ return item.tries
+
+ if role == STATUS_ROLE:
+ return item.status
+
+ if role == Qt.UserRole:
+ return item._id
+
@property
def can_edit(self):
"""Returns true if some site is user local site, eg. could edit"""
@@ -456,55 +531,6 @@ class SyncRepresentationSummaryModel(_SyncRepresentationModel):
self.timer.timeout.connect(self.tick)
self.timer.start(self.REFRESH_SEC)
- def data(self, index, role):
- item = self._data[index.row()]
-
- if role == lib.FullItemRole:
- return item
-
- header_value = self._header[index.column()]
- if role == lib.ProviderRole:
- if header_value == 'local_site':
- return item.local_provider
- if header_value == 'remote_site':
- return item.remote_provider
-
- if role == lib.ProgressRole:
- if header_value == 'local_site':
- return item.local_progress
- if header_value == 'remote_site':
- return item.remote_progress
-
- if role == lib.DateRole:
- if header_value == 'local_site':
- if item.created_dt:
- return pretty_timestamp(item.created_dt)
- if header_value == 'remote_site':
- if item.sync_dt:
- return pretty_timestamp(item.sync_dt)
-
- if role == lib.FailedRole:
- if header_value == 'local_site':
- return item.status == lib.STATUS[2] and \
- item.local_progress < 1
- if header_value == 'remote_site':
- return item.status == lib.STATUS[2] and \
- item.remote_progress < 1
-
- if role in (Qt.DisplayRole, Qt.EditRole):
- # because of ImageDelegate
- if header_value in ['remote_site', 'local_site']:
- return ""
-
- return attr.asdict(item)[self._header[index.column()]]
-
- if role == lib.EditIconRole:
- if self.can_edit and header_value in self.EDITABLE_COLUMNS:
- return self.edit_icon
-
- if role == Qt.UserRole:
- return item._id
-
def add_page_records(self, local_site, remote_site, representations):
"""
Process all records from 'representation' and add them to storage.
@@ -985,55 +1011,6 @@ class SyncRepresentationDetailModel(_SyncRepresentationModel):
self.timer.timeout.connect(self.tick)
self.timer.start(SyncRepresentationSummaryModel.REFRESH_SEC)
- def data(self, index, role):
- item = self._data[index.row()]
-
- if role == lib.FullItemRole:
- return item
-
- header_value = self._header[index.column()]
- if role == lib.ProviderRole:
- if header_value == 'local_site':
- return item.local_provider
- if header_value == 'remote_site':
- return item.remote_provider
-
- if role == lib.ProgressRole:
- if header_value == 'local_site':
- return item.local_progress
- if header_value == 'remote_site':
- return item.remote_progress
-
- if role == lib.DateRole:
- if header_value == 'local_site':
- if item.created_dt:
- return pretty_timestamp(item.created_dt)
- if header_value == 'remote_site':
- if item.sync_dt:
- return pretty_timestamp(item.sync_dt)
-
- if role == lib.FailedRole:
- if header_value == 'local_site':
- return item.status == lib.STATUS[2] and \
- item.local_progress < 1
- if header_value == 'remote_site':
- return item.status == lib.STATUS[2] and \
- item.remote_progress < 1
-
- if role in (Qt.DisplayRole, Qt.EditRole):
- # because of ImageDelegate
- if header_value in ['remote_site', 'local_site']:
- return ""
-
- return attr.asdict(item)[self._header[index.column()]]
-
- if role == lib.EditIconRole:
- if self.can_edit and header_value in self.EDITABLE_COLUMNS:
- return self.edit_icon
-
- if role == Qt.UserRole:
- return item._id
-
def add_page_records(self, local_site, remote_site, representations):
"""
Process all records from 'representation' and add them to storage.
diff --git a/openpype/modules/default_modules/sync_server/tray/widgets.py b/openpype/modules/default_modules/sync_server/tray/widgets.py
index 5e368f9e0b..87044889b7 100644
--- a/openpype/modules/default_modules/sync_server/tray/widgets.py
+++ b/openpype/modules/default_modules/sync_server/tray/widgets.py
@@ -22,6 +22,20 @@ from .models import (
from . import lib
from . import delegates
+from openpype.tools.utils.constants import (
+ LOCAL_PROGRESS_ROLE,
+ REMOTE_PROGRESS_ROLE,
+ HEADER_NAME_ROLE,
+ STATUS_ROLE,
+ PATH_ROLE,
+ LOCAL_SITE_NAME_ROLE,
+ REMOTE_SITE_NAME_ROLE,
+ LOCAL_DATE_ROLE,
+ REMOTE_DATE_ROLE,
+ ERROR_ROLE,
+ TRIES_ROLE
+)
+
log = PypeLogger().get_logger("SyncServer")
@@ -289,14 +303,19 @@ class _SyncRepresentationWidget(QtWidgets.QWidget):
if is_multi:
index = self.model.get_index(list(self._selected_ids)[0])
- item = self.model.data(index, lib.FullItemRole)
+ local_progress = self.model.data(index, LOCAL_PROGRESS_ROLE)
+ remote_progress = self.model.data(index, REMOTE_PROGRESS_ROLE)
+ status = self.model.data(index, STATUS_ROLE)
else:
- item = self.model.data(point_index, lib.FullItemRole)
+ local_progress = self.model.data(point_index, LOCAL_PROGRESS_ROLE)
+ remote_progress = self.model.data(point_index,
+ REMOTE_PROGRESS_ROLE)
+ status = self.model.data(point_index, STATUS_ROLE)
+
can_edit = self.model.can_edit
- action_kwarg_map, actions_mapping, menu = self._prepare_menu(item,
- is_multi,
- can_edit)
+ action_kwarg_map, actions_mapping, menu = self._prepare_menu(
+ local_progress, remote_progress, is_multi, can_edit, status)
result = menu.exec_(QtGui.QCursor.pos())
if result:
@@ -307,7 +326,8 @@ class _SyncRepresentationWidget(QtWidgets.QWidget):
self.model.refresh()
- def _prepare_menu(self, item, is_multi, can_edit):
+ def _prepare_menu(self, local_progress, remote_progress,
+ is_multi, can_edit, status=None):
menu = QtWidgets.QMenu(self)
actions_mapping = {}
@@ -316,11 +336,6 @@ class _SyncRepresentationWidget(QtWidgets.QWidget):
active_site = self.model.active_site
remote_site = self.model.remote_site
- local_progress = item.local_progress
- remote_progress = item.remote_progress
-
- project = self.model.project
-
for site, progress in {active_site: local_progress,
remote_site: remote_progress}.items():
provider = self.sync_server.get_provider_for_site(site=site)
@@ -360,12 +375,6 @@ class _SyncRepresentationWidget(QtWidgets.QWidget):
actions_mapping[action] = self._change_priority
menu.addAction(action)
- # # temp for testing only !!!
- # action = QtWidgets.QAction("Download")
- # action_kwarg_map[action] = self._get_action_kwargs(active_site)
- # actions_mapping[action] = self._add_site
- # menu.addAction(action)
-
if not actions_mapping:
action = QtWidgets.QAction("< No action >")
actions_mapping[action] = None
@@ -376,11 +385,15 @@ class _SyncRepresentationWidget(QtWidgets.QWidget):
def _pause(self, selected_ids=None):
log.debug("Pause {}".format(selected_ids))
for representation_id in selected_ids:
- item = lib.get_item_by_id(self.model, representation_id)
- if item.status not in [lib.STATUS[0], lib.STATUS[1]]:
+ status = lib.get_value_from_id_by_role(self.model,
+ representation_id,
+ STATUS_ROLE)
+ if status not in [lib.STATUS[0], lib.STATUS[1]]:
continue
for site_name in [self.model.active_site, self.model.remote_site]:
- check_progress = self._get_progress(item, site_name)
+ check_progress = self._get_progress(self.model,
+ representation_id,
+ site_name)
if check_progress < 1:
self.sync_server.pause_representation(self.model.project,
representation_id,
@@ -391,11 +404,15 @@ class _SyncRepresentationWidget(QtWidgets.QWidget):
def _unpause(self, selected_ids=None):
log.debug("UnPause {}".format(selected_ids))
for representation_id in selected_ids:
- item = lib.get_item_by_id(self.model, representation_id)
- if item.status not in lib.STATUS[3]:
+ status = lib.get_value_from_id_by_role(self.model,
+ representation_id,
+ STATUS_ROLE)
+ if status not in lib.STATUS[3]:
continue
for site_name in [self.model.active_site, self.model.remote_site]:
- check_progress = self._get_progress(item, site_name)
+ check_progress = self._get_progress(self.model,
+ representation_id,
+ site_name)
if check_progress < 1:
self.sync_server.unpause_representation(
self.model.project,
@@ -408,8 +425,11 @@ class _SyncRepresentationWidget(QtWidgets.QWidget):
def _add_site(self, selected_ids=None, site_name=None):
log.debug("Add site {}:{}".format(selected_ids, site_name))
for representation_id in selected_ids:
- item = lib.get_item_by_id(self.model, representation_id)
- if item.local_site == site_name or item.remote_site == site_name:
+ item_local_site = lib.get_value_from_id_by_role(
+ self.model, representation_id, LOCAL_SITE_NAME_ROLE)
+ item_remote_site = lib.get_value_from_id_by_role(
+ self.model, representation_id, REMOTE_SITE_NAME_ROLE)
+ if site_name in [item_local_site, item_remote_site]:
# site already exists skip
continue
@@ -460,8 +480,8 @@ class _SyncRepresentationWidget(QtWidgets.QWidget):
"""
log.debug("Reset site {}:{}".format(selected_ids, site_name))
for representation_id in selected_ids:
- item = lib.get_item_by_id(self.model, representation_id)
- check_progress = self._get_progress(item, site_name, True)
+ check_progress = self._get_progress(self.model, representation_id,
+ site_name, True)
# do not reset if opposite side is not fully there
if check_progress != 1:
@@ -482,11 +502,8 @@ class _SyncRepresentationWidget(QtWidgets.QWidget):
def _open_in_explorer(self, selected_ids=None, site_name=None):
log.debug("Open in Explorer {}:{}".format(selected_ids, site_name))
for selected_id in selected_ids:
- item = lib.get_item_by_id(self.model, selected_id)
- if not item:
- return
-
- fpath = item.path
+ fpath = lib.get_value_from_id_by_role(self.model, selected_id,
+ PATH_ROLE)
project = self.model.project
fpath = self.sync_server.get_local_file_path(project,
site_name,
@@ -514,10 +531,17 @@ class _SyncRepresentationWidget(QtWidgets.QWidget):
self.model.is_editing = True
self.table_view.openPersistentEditor(real_index)
- def _get_progress(self, item, site_name, opposite=False):
+ def _get_progress(self, model, representation_id,
+ site_name, opposite=False):
"""Returns progress value according to site (side)"""
- progress = {'local': item.local_progress,
- 'remote': item.remote_progress}
+ local_progress = lib.get_value_from_id_by_role(model,
+ representation_id,
+ LOCAL_PROGRESS_ROLE)
+ remote_progress = lib.get_value_from_id_by_role(model,
+ representation_id,
+ REMOTE_PROGRESS_ROLE)
+ progress = {'local': local_progress,
+ 'remote': remote_progress}
side = 'remote'
if site_name == self.model.active_site:
side = 'local'
@@ -591,11 +615,11 @@ class SyncRepresentationSummaryWidget(_SyncRepresentationWidget):
table_view.viewport().setAttribute(QtCore.Qt.WA_Hover, True)
column = table_view.model().get_header_index("local_site")
- delegate = delegates.ImageDelegate(self)
+ delegate = delegates.ImageDelegate(self, side="local")
table_view.setItemDelegateForColumn(column, delegate)
column = table_view.model().get_header_index("remote_site")
- delegate = delegates.ImageDelegate(self)
+ delegate = delegates.ImageDelegate(self, side="remote")
table_view.setItemDelegateForColumn(column, delegate)
column = table_view.model().get_header_index("priority")
@@ -631,19 +655,21 @@ class SyncRepresentationSummaryWidget(_SyncRepresentationWidget):
self.selection_model = self.table_view.selectionModel()
self.selection_model.selectionChanged.connect(self._selection_changed)
- def _prepare_menu(self, item, is_multi, can_edit):
+ def _prepare_menu(self, local_progress, remote_progress,
+ is_multi, can_edit, status=None):
action_kwarg_map, actions_mapping, menu = \
- super()._prepare_menu(item, is_multi, can_edit)
+ super()._prepare_menu(local_progress, remote_progress,
+ is_multi, can_edit)
if can_edit and (
- item.status in [lib.STATUS[0], lib.STATUS[1]] or is_multi):
+ status in [lib.STATUS[0], lib.STATUS[1]] or is_multi):
action = QtWidgets.QAction("Pause in queue")
actions_mapping[action] = self._pause
# pause handles which site_name it will pause itself
action_kwarg_map[action] = {"selected_ids": self._selected_ids}
menu.addAction(action)
- if can_edit and (item.status == lib.STATUS[3] or is_multi):
+ if can_edit and (status == lib.STATUS[3] or is_multi):
action = QtWidgets.QAction("Unpause in queue")
actions_mapping[action] = self._unpause
action_kwarg_map[action] = {"selected_ids": self._selected_ids}
@@ -753,11 +779,11 @@ class SyncRepresentationDetailWidget(_SyncRepresentationWidget):
table_view.verticalHeader().hide()
column = model.get_header_index("local_site")
- delegate = delegates.ImageDelegate(self)
+ delegate = delegates.ImageDelegate(self, side="local")
table_view.setItemDelegateForColumn(column, delegate)
column = model.get_header_index("remote_site")
- delegate = delegates.ImageDelegate(self)
+ delegate = delegates.ImageDelegate(self, side="remote")
table_view.setItemDelegateForColumn(column, delegate)
if model.can_edit:
@@ -815,12 +841,14 @@ class SyncRepresentationDetailWidget(_SyncRepresentationWidget):
detail_window.exec()
- def _prepare_menu(self, item, is_multi, can_edit):
+ def _prepare_menu(self, local_progress, remote_progress,
+ is_multi, can_edit, status=None):
"""Adds view (and model) dependent actions to default ones"""
action_kwarg_map, actions_mapping, menu = \
- super()._prepare_menu(item, is_multi, can_edit)
+ super()._prepare_menu(local_progress, remote_progress,
+ is_multi, can_edit, status)
- if item.status == lib.STATUS[2] or is_multi:
+ if status == lib.STATUS[2] or is_multi:
action = QtWidgets.QAction("Open error detail")
actions_mapping[action] = self._show_detail
action_kwarg_map[action] = {"selected_ids": self._selected_ids}
@@ -835,8 +863,8 @@ class SyncRepresentationDetailWidget(_SyncRepresentationWidget):
redo of upload/download
"""
for file_id in selected_ids:
- item = lib.get_item_by_id(self.model, file_id)
- check_progress = self._get_progress(item, site_name, True)
+ check_progress = self._get_progress(self.model, file_id,
+ site_name, True)
# do not reset if opposite side is not fully there
if check_progress != 1:
@@ -895,20 +923,28 @@ class SyncRepresentationErrorWidget(QtWidgets.QWidget):
no_errors = True
for file_id in selected_ids:
- item = lib.get_item_by_id(model, file_id)
- if not item.created_dt or not item.sync_dt or not item.error:
+ created_dt = lib.get_value_from_id_by_role(model, file_id,
+ LOCAL_DATE_ROLE)
+ sync_dt = lib.get_value_from_id_by_role(model, file_id,
+ REMOTE_DATE_ROLE)
+ errors = lib.get_value_from_id_by_role(model, file_id,
+ ERROR_ROLE)
+ if not created_dt or not sync_dt or not errors:
continue
+ tries = lib.get_value_from_id_by_role(model, file_id,
+ TRIES_ROLE)
+
no_errors = False
- dt = max(item.created_dt, item.sync_dt)
+ dt = max(created_dt, sync_dt)
txts = []
txts.append("{}: {}
".format("Last update date",
pretty_timestamp(dt)))
txts.append("{}: {}
".format("Retries",
- str(item.tries)))
+ str(tries)))
txts.append("{}: {}
".format("Error message",
- item.error))
+ errors))
text_area = QtWidgets.QTextEdit("\n\n".join(txts))
text_area.setReadOnly(True)
@@ -1162,7 +1198,7 @@ class HorizontalHeader(QtWidgets.QHeaderView):
column_name = self.model.headerData(column_idx,
QtCore.Qt.Horizontal,
- lib.HeaderNameRole)
+ HEADER_NAME_ROLE)
button = self.filter_buttons.get(column_name)
if not button:
continue
diff --git a/openpype/plugins/publish/extract_review.py b/openpype/plugins/publish/extract_review.py
index 7284483f5f..264b362558 100644
--- a/openpype/plugins/publish/extract_review.py
+++ b/openpype/plugins/publish/extract_review.py
@@ -649,6 +649,8 @@ class ExtractReview(pyblish.api.InstancePlugin):
AssertionError: if more then one collection is obtained.
"""
+ start_frame = int(start_frame)
+ end_frame = int(end_frame)
collections = clique.assemble(files)[0]
assert len(collections) == 1, "Multiple collections found."
col = collections[0]
diff --git a/openpype/plugins/publish/validate_unique_names.py b/openpype/plugins/publish/validate_unique_names.py
new file mode 100644
index 0000000000..459c90e6c1
--- /dev/null
+++ b/openpype/plugins/publish/validate_unique_names.py
@@ -0,0 +1,39 @@
+from maya import cmds
+
+import pyblish.api
+import openpype.api
+import openpype.hosts.maya.api.action
+
+
+class ValidateUniqueNames(pyblish.api.Validator):
+ """transform names should be unique
+
+ ie: using cmds.ls(someNodeName) should always return shortname
+
+ """
+
+ order = openpype.api.ValidateContentsOrder
+ hosts = ["maya"]
+ families = ["model"]
+ label = "Unique transform name"
+ actions = [openpype.hosts.maya.api.action.SelectInvalidAction]
+
+ @staticmethod
+ def get_invalid(instance):
+ """Returns the invalid transforms in the instance.
+
+ Returns:
+ list: Non unique name transforms
+
+ """
+
+ return [tr for tr in cmds.ls(instance, type="transform")
+ if '|' in tr]
+
+ def process(self, instance):
+ """Process all the nodes in the instance "objectSet"""
+
+ invalid = self.get_invalid(instance)
+ if invalid:
+ raise ValueError("Nodes found with none unique names. "
+ "values: {0}".format(invalid))
diff --git a/openpype/pype_commands.py b/openpype/pype_commands.py
index bad01396db..53c842b7c4 100644
--- a/openpype/pype_commands.py
+++ b/openpype/pype_commands.py
@@ -160,16 +160,13 @@ class PypeCommands:
SLEEP = 5 # seconds for another loop check for concurrently runs
WAIT_FOR = 300 # seconds to wait for conc. runs
- from openpype import install, uninstall
from openpype.api import Logger
+ from openpype.lib import ApplicationManager
log = Logger.get_logger()
log.info("remotepublishphotoshop command")
- install()
-
- from openpype.lib import ApplicationManager
application_manager = ApplicationManager()
found_variant_key = find_variant_key(application_manager, host)
@@ -243,10 +240,8 @@ class PypeCommands:
while launched_app.poll() is None:
time.sleep(0.5)
- uninstall()
-
@staticmethod
- def remotepublish(project, batch_path, host, user, targets=None):
+ def remotepublish(project, batch_path, user, targets=None):
"""Start headless publishing.
Used to publish rendered assets, workfiles etc.
@@ -258,10 +253,9 @@ class PypeCommands:
per call of remotepublish
batch_path (str): Path batch folder. Contains subfolders with
resources (workfile, another subfolder 'renders' etc.)
- targets (string): What module should be targeted
- (to choose validator for example)
- host (string)
user (string): email address for webpublisher
+ targets (list): Pyblish targets
+ (to choose validator for example)
Raises:
RuntimeError: When there is no path to process.
@@ -269,21 +263,22 @@ class PypeCommands:
if not batch_path:
raise RuntimeError("No publish paths specified")
- from openpype import install, uninstall
- from openpype.api import Logger
-
# Register target and host
import pyblish.api
import pyblish.util
+ import avalon.api
+ from openpype.hosts.webpublisher import api as webpublisher
- log = Logger.get_logger()
+ log = PypeLogger.get_logger()
log.info("remotepublish command")
- install()
+ host_name = "webpublisher"
+ os.environ["OPENPYPE_PUBLISH_DATA"] = batch_path
+ os.environ["AVALON_PROJECT"] = project
+ os.environ["AVALON_APP"] = host_name
- if host:
- pyblish.api.register_host(host)
+ pyblish.api.register_host(host_name)
if targets:
if isinstance(targets, str):
@@ -291,13 +286,6 @@ class PypeCommands:
for target in targets:
pyblish.api.register_target(target)
- os.environ["OPENPYPE_PUBLISH_DATA"] = batch_path
- os.environ["AVALON_PROJECT"] = project
- os.environ["AVALON_APP"] = host
-
- import avalon.api
- from openpype.hosts.webpublisher import api as webpublisher
-
avalon.api.install(webpublisher)
log.info("Running publish ...")
@@ -309,7 +297,6 @@ class PypeCommands:
publish_and_log(dbcon, _id, log)
log.info("Publish finished.")
- uninstall()
@staticmethod
def extractenvironments(output_json_path, project, asset, task, app):
diff --git a/openpype/settings/defaults/project_settings/maya.json b/openpype/settings/defaults/project_settings/maya.json
index 705917a9f4..689d6418ba 100644
--- a/openpype/settings/defaults/project_settings/maya.json
+++ b/openpype/settings/defaults/project_settings/maya.json
@@ -8,16 +8,10 @@
"yetiRig": "ma"
},
"maya-dirmap": {
- "enabled": true,
+ "enabled": false,
"paths": {
- "source-path": [
- "foo1",
- "foo2"
- ],
- "destination-path": [
- "bar1",
- "bar2"
- ]
+ "source-path": [],
+ "destination-path": []
}
},
"scriptsmenu": {
@@ -315,11 +309,21 @@
"optional": true,
"active": true
},
+ "ValidateShapeZero": {
+ "enabled": false,
+ "optional": true,
+ "active": true
+ },
"ValidateTransformZero": {
"enabled": false,
"optional": true,
"active": true
},
+ "ValidateUniqueNames": {
+ "enabled": false,
+ "optional": true,
+ "active": true
+ },
"ValidateRigContents": {
"enabled": false,
"optional": true,
diff --git a/openpype/settings/defaults/project_settings/nuke.json b/openpype/settings/defaults/project_settings/nuke.json
index e3c7834e4a..069994d0e8 100644
--- a/openpype/settings/defaults/project_settings/nuke.json
+++ b/openpype/settings/defaults/project_settings/nuke.json
@@ -8,6 +8,13 @@
"build_workfile": "ctrl+alt+b"
}
},
+ "nuke-dirmap": {
+ "enabled": false,
+ "paths": {
+ "source-path": [],
+ "destination-path": []
+ }
+ },
"create": {
"CreateWriteRender": {
"fpath_template": "{work}/renders/nuke/{subset}/{subset}.{frame}.{ext}",
@@ -130,8 +137,7 @@
},
"LoadClip": {
"enabled": true,
- "_representations": [
- ],
+ "_representations": [],
"node_name_template": "{class_name}_{ext}"
}
},
diff --git a/openpype/settings/entities/schemas/projects_schema/schema_project_nuke.json b/openpype/settings/entities/schemas/projects_schema/schema_project_nuke.json
index e0b21f4037..22cb8a4ea3 100644
--- a/openpype/settings/entities/schemas/projects_schema/schema_project_nuke.json
+++ b/openpype/settings/entities/schemas/projects_schema/schema_project_nuke.json
@@ -46,6 +46,39 @@
}
]
},
+ {
+ "type": "dict",
+ "collapsible": true,
+ "checkbox_key": "enabled",
+ "key": "nuke-dirmap",
+ "label": "Nuke Directory Mapping",
+ "is_group": true,
+ "children": [
+ {
+ "type": "boolean",
+ "key": "enabled",
+ "label": "Enabled"
+ },
+ {
+ "type": "dict",
+ "key": "paths",
+ "children": [
+ {
+ "type": "list",
+ "object_type": "text",
+ "key": "source-path",
+ "label": "Source Path"
+ },
+ {
+ "type": "list",
+ "object_type": "text",
+ "key": "destination-path",
+ "label": "Destination Path"
+ }
+ ]
+ }
+ ]
+ },
{
"type": "dict",
"collapsible": true,
diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_publish.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_publish.json
index 58fe4cc4b1..9fd19d7be2 100644
--- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_publish.json
+++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_publish.json
@@ -324,9 +324,17 @@
"key": "ValidateShapeRenderStats",
"label": "ValidateShapeRenderStats"
},
+ {
+ "key": "ValidateShapeZero",
+ "label": "ValidateShapeZero"
+ },
{
"key": "ValidateTransformZero",
"label": "ValidateTransformZero"
+ },
+ {
+ "key": "ValidateUniqueNames",
+ "label": "ValidateUniqueNames"
}
]
}
diff --git a/openpype/style/data.json b/openpype/style/data.json
index 26f6743d72..b92ee61764 100644
--- a/openpype/style/data.json
+++ b/openpype/style/data.json
@@ -43,7 +43,7 @@
"bg-view-header": "#373D48",
"bg-view-hover": "rgba(168, 175, 189, .3)",
"bg-view-alternate": "rgb(36, 42, 50)",
- "bg-view-disabled": "#434a56",
+ "bg-view-disabled": "#2C313A",
"bg-view-alternate-disabled": "#2C313A",
"bg-view-selection": "rgba(92, 173, 214, .4)",
"bg-view-selection-hover": "rgba(92, 173, 214, .8)",
diff --git a/openpype/style/images/checkbox_checked.png b/openpype/style/images/checkbox_checked.png
new file mode 100644
index 0000000000..8875dcaad6
Binary files /dev/null and b/openpype/style/images/checkbox_checked.png differ
diff --git a/openpype/style/images/checkbox_checked_disabled.png b/openpype/style/images/checkbox_checked_disabled.png
new file mode 100644
index 0000000000..5e136e30f1
Binary files /dev/null and b/openpype/style/images/checkbox_checked_disabled.png differ
diff --git a/openpype/style/images/checkbox_checked_focus.png b/openpype/style/images/checkbox_checked_focus.png
new file mode 100644
index 0000000000..356d46de12
Binary files /dev/null and b/openpype/style/images/checkbox_checked_focus.png differ
diff --git a/openpype/style/images/checkbox_checked_hover.png b/openpype/style/images/checkbox_checked_hover.png
new file mode 100644
index 0000000000..f0a2a783a4
Binary files /dev/null and b/openpype/style/images/checkbox_checked_hover.png differ
diff --git a/openpype/style/images/checkbox_indeterminate.png b/openpype/style/images/checkbox_indeterminate.png
new file mode 100644
index 0000000000..bd82661dc6
Binary files /dev/null and b/openpype/style/images/checkbox_indeterminate.png differ
diff --git a/openpype/style/images/checkbox_indeterminate_disabled.png b/openpype/style/images/checkbox_indeterminate_disabled.png
new file mode 100644
index 0000000000..c4de5ed270
Binary files /dev/null and b/openpype/style/images/checkbox_indeterminate_disabled.png differ
diff --git a/openpype/style/images/checkbox_indeterminate_focus.png b/openpype/style/images/checkbox_indeterminate_focus.png
new file mode 100644
index 0000000000..546862289a
Binary files /dev/null and b/openpype/style/images/checkbox_indeterminate_focus.png differ
diff --git a/openpype/style/images/checkbox_indeterminate_hover.png b/openpype/style/images/checkbox_indeterminate_hover.png
new file mode 100644
index 0000000000..430a98098d
Binary files /dev/null and b/openpype/style/images/checkbox_indeterminate_hover.png differ
diff --git a/openpype/style/images/checkbox_unchecked.png b/openpype/style/images/checkbox_unchecked.png
new file mode 100644
index 0000000000..eb5890f034
Binary files /dev/null and b/openpype/style/images/checkbox_unchecked.png differ
diff --git a/openpype/style/images/checkbox_unchecked_disabled.png b/openpype/style/images/checkbox_unchecked_disabled.png
new file mode 100644
index 0000000000..4b1d78874d
Binary files /dev/null and b/openpype/style/images/checkbox_unchecked_disabled.png differ
diff --git a/openpype/style/images/checkbox_unchecked_focus.png b/openpype/style/images/checkbox_unchecked_focus.png
new file mode 100644
index 0000000000..76e32385e2
Binary files /dev/null and b/openpype/style/images/checkbox_unchecked_focus.png differ
diff --git a/openpype/style/images/checkbox_unchecked_hover.png b/openpype/style/images/checkbox_unchecked_hover.png
new file mode 100644
index 0000000000..6053315b2b
Binary files /dev/null and b/openpype/style/images/checkbox_unchecked_hover.png differ
diff --git a/openpype/style/images/transparent.png b/openpype/style/images/transparent.png
index 0f2e143b39..bf9514e88e 100644
Binary files a/openpype/style/images/transparent.png and b/openpype/style/images/transparent.png differ
diff --git a/openpype/style/pyqt5_resources.py b/openpype/style/pyqt5_resources.py
index 5a3f901840..55d4e3efcc 100644
--- a/openpype/style/pyqt5_resources.py
+++ b/openpype/style/pyqt5_resources.py
@@ -10,146 +10,6 @@ from PyQt5 import QtCore
qt_resource_data = b"\
-\x00\x00\x07\x06\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x0a\x00\x00\x00\x07\x08\x06\x00\x00\x00\x31\xac\xdc\x63\
-\x00\x00\x04\xb0\x69\x54\x58\x74\x58\x4d\x4c\x3a\x63\x6f\x6d\x2e\
-\x61\x64\x6f\x62\x65\x2e\x78\x6d\x70\x00\x00\x00\x00\x00\x3c\x3f\
-\x78\x70\x61\x63\x6b\x65\x74\x20\x62\x65\x67\x69\x6e\x3d\x22\xef\
-\xbb\xbf\x22\x20\x69\x64\x3d\x22\x57\x35\x4d\x30\x4d\x70\x43\x65\
-\x68\x69\x48\x7a\x72\x65\x53\x7a\x4e\x54\x63\x7a\x6b\x63\x39\x64\
-\x22\x3f\x3e\x0a\x3c\x78\x3a\x78\x6d\x70\x6d\x65\x74\x61\x20\x78\
-\x6d\x6c\x6e\x73\x3a\x78\x3d\x22\x61\x64\x6f\x62\x65\x3a\x6e\x73\
-\x3a\x6d\x65\x74\x61\x2f\x22\x20\x78\x3a\x78\x6d\x70\x74\x6b\x3d\
-\x22\x58\x4d\x50\x20\x43\x6f\x72\x65\x20\x35\x2e\x35\x2e\x30\x22\
-\x3e\x0a\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\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\x3e\x0a\x20\x20\x3c\x72\x64\x66\x3a\x44\x65\x73\x63\
-\x72\x69\x70\x74\x69\x6f\x6e\x20\x72\x64\x66\x3a\x61\x62\x6f\x75\
-\x74\x3d\x22\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x65\
-\x78\x69\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\
-\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x65\x78\x69\x66\x2f\x31\x2e\
-\x30\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x74\x69\
-\x66\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\
-\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x74\x69\x66\x66\x2f\x31\x2e\x30\
-\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x70\x68\x6f\
-\x74\x6f\x73\x68\x6f\x70\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\
-\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x70\x68\x6f\x74\
-\x6f\x73\x68\x6f\x70\x2f\x31\x2e\x30\x2f\x22\x0a\x20\x20\x20\x20\
-\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\
-\x61\x70\x2f\x31\x2e\x30\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\
-\x6e\x73\x3a\x78\x6d\x70\x4d\x4d\x3d\x22\x68\x74\x74\x70\x3a\x2f\
-\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\x61\
-\x70\x2f\x31\x2e\x30\x2f\x6d\x6d\x2f\x22\x0a\x20\x20\x20\x20\x78\
-\x6d\x6c\x6e\x73\x3a\x73\x74\x45\x76\x74\x3d\x22\x68\x74\x74\x70\
-\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\
-\x78\x61\x70\x2f\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\
-\x73\x6f\x75\x72\x63\x65\x45\x76\x65\x6e\x74\x23\x22\x0a\x20\x20\
-\x20\x65\x78\x69\x66\x3a\x50\x69\x78\x65\x6c\x58\x44\x69\x6d\x65\
-\x6e\x73\x69\x6f\x6e\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x65\x78\
-\x69\x66\x3a\x50\x69\x78\x65\x6c\x59\x44\x69\x6d\x65\x6e\x73\x69\
-\x6f\x6e\x3d\x22\x37\x22\x0a\x20\x20\x20\x65\x78\x69\x66\x3a\x43\
-\x6f\x6c\x6f\x72\x53\x70\x61\x63\x65\x3d\x22\x31\x22\x0a\x20\x20\
-\x20\x74\x69\x66\x66\x3a\x49\x6d\x61\x67\x65\x57\x69\x64\x74\x68\
-\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x74\x69\x66\x66\x3a\x49\x6d\
-\x61\x67\x65\x4c\x65\x6e\x67\x74\x68\x3d\x22\x37\x22\x0a\x20\x20\
-\x20\x74\x69\x66\x66\x3a\x52\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\
-\x55\x6e\x69\x74\x3d\x22\x32\x22\x0a\x20\x20\x20\x74\x69\x66\x66\
-\x3a\x58\x52\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\x3d\x22\x37\x32\
-\x2e\x30\x22\x0a\x20\x20\x20\x74\x69\x66\x66\x3a\x59\x52\x65\x73\
-\x6f\x6c\x75\x74\x69\x6f\x6e\x3d\x22\x37\x32\x2e\x30\x22\x0a\x20\
-\x20\x20\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\x43\x6f\x6c\x6f\
-\x72\x4d\x6f\x64\x65\x3d\x22\x33\x22\x0a\x20\x20\x20\x70\x68\x6f\
-\x74\x6f\x73\x68\x6f\x70\x3a\x49\x43\x43\x50\x72\x6f\x66\x69\x6c\
-\x65\x3d\x22\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\x39\x36\x36\
-\x2d\x32\x2e\x31\x22\x0a\x20\x20\x20\x78\x6d\x70\x3a\x4d\x6f\x64\
-\x69\x66\x79\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\x30\x35\
-\x2d\x33\x31\x54\x31\x32\x3a\x33\x30\x3a\x31\x31\x2b\x30\x32\x3a\
-\x30\x30\x22\x0a\x20\x20\x20\x78\x6d\x70\x3a\x4d\x65\x74\x61\x64\
-\x61\x74\x61\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\x30\x35\
-\x2d\x33\x31\x54\x31\x32\x3a\x33\x30\x3a\x31\x31\x2b\x30\x32\x3a\
-\x30\x30\x22\x3e\x0a\x20\x20\x20\x3c\x78\x6d\x70\x4d\x4d\x3a\x48\
-\x69\x73\x74\x6f\x72\x79\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\
-\x3a\x53\x65\x71\x3e\x0a\x20\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\
-\x6c\x69\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\x76\x74\x3a\x61\
-\x63\x74\x69\x6f\x6e\x3d\x22\x70\x72\x6f\x64\x75\x63\x65\x64\x22\
-\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\x76\x74\x3a\x73\x6f\x66\
-\x74\x77\x61\x72\x65\x41\x67\x65\x6e\x74\x3d\x22\x41\x66\x66\x69\
-\x6e\x69\x74\x79\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x20\x31\x2e\
-\x39\x2e\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\x76\x74\
-\x3a\x77\x68\x65\x6e\x3d\x22\x32\x30\x32\x31\x2d\x30\x35\x2d\x33\
-\x31\x54\x31\x32\x3a\x33\x30\x3a\x31\x31\x2b\x30\x32\x3a\x30\x30\
-\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\x53\x65\
-\x71\x3e\x0a\x20\x20\x20\x3c\x2f\x78\x6d\x70\x4d\x4d\x3a\x48\x69\
-\x73\x74\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x2f\x72\x64\x66\x3a\x44\
-\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x3e\x0a\x20\x3c\x2f\x72\
-\x64\x66\x3a\x52\x44\x46\x3e\x0a\x3c\x2f\x78\x3a\x78\x6d\x70\x6d\
-\x65\x74\x61\x3e\x0a\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\x20\x65\
-\x6e\x64\x3d\x22\x72\x22\x3f\x3e\x85\x9d\x9f\x08\x00\x00\x01\x83\
-\x69\x43\x43\x50\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\x39\x36\
-\x36\x2d\x32\x2e\x31\x00\x00\x28\x91\x75\x91\xcf\x2b\x44\x51\x14\
-\xc7\x3f\x66\x68\xfc\x18\x8d\x62\x61\x31\x65\x12\x16\x42\x83\x12\
-\x1b\x8b\x99\x18\x0a\x8b\x99\x51\x7e\x6d\x66\x9e\x79\x33\x6a\xde\
-\x78\xbd\x37\xd2\x64\xab\x6c\xa7\x28\xb1\xf1\x6b\xc1\x5f\xc0\x56\
-\x59\x2b\x45\xa4\x64\xa7\xac\x89\x0d\x7a\xce\x9b\x51\x23\x99\x73\
-\x3b\xf7\x7c\xee\xf7\xde\x73\xba\xf7\x5c\x70\x44\xd3\x8a\x66\x56\
-\xfa\x41\xcb\x64\x8d\x70\x28\xe0\x9b\x99\x9d\xf3\xb9\x9e\xa8\xa2\
-\x85\x1a\x3a\xf1\xc6\x14\x53\x9f\x8c\x8c\x46\x29\x6b\xef\xb7\x54\
-\xd8\xf1\xba\xdb\xae\x55\xfe\xdc\xbf\x56\xb7\x98\x30\x15\xa8\xa8\
-\x16\x1e\x56\x74\x23\x2b\x3c\x26\x3c\xb1\x9a\xd5\x6d\xde\x12\x6e\
-\x52\x52\xb1\x45\xe1\x13\xe1\x2e\x43\x2e\x28\x7c\x63\xeb\xf1\x22\
-\x3f\xdb\x9c\x2c\xf2\xa7\xcd\x46\x34\x1c\x04\x47\x83\xb0\x2f\xf9\
-\x8b\xe3\xbf\x58\x49\x19\x9a\xb0\xbc\x9c\x36\x2d\xbd\xa2\xfc\xdc\
-\xc7\x7e\x89\x3b\x91\x99\x8e\x48\x6c\x15\xf7\x62\x12\x26\x44\x00\
-\x1f\xe3\x8c\x10\x64\x80\x5e\x86\x64\x1e\xa0\x9b\x3e\x7a\x64\x45\
-\x99\x7c\x7f\x21\x7f\x8a\x65\xc9\x55\x64\xd6\xc9\x61\xb0\x44\x92\
-\x14\x59\xba\x44\x5d\x91\xea\x09\x89\xaa\xe8\x09\x19\x69\x72\x76\
-\xff\xff\xf6\xd5\x54\xfb\xfb\x8a\xd5\xdd\x01\xa8\x7a\xb4\xac\xd7\
-\x76\x70\x6d\xc2\x57\xde\xb2\x3e\x0e\x2c\xeb\xeb\x10\x9c\x0f\x70\
-\x9e\x29\xe5\x2f\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\x9e\x75\
-\x38\xbd\x28\x69\xf1\x6d\x38\xdb\x80\xe6\x7b\x3d\x66\xc4\x0a\x92\
-\x53\xdc\xa1\xaa\xf0\x72\x0c\xf5\xb3\xd0\x78\x05\xb5\xf3\xc5\x9e\
-\xfd\xec\x73\x74\x07\xd1\x35\xf9\xaa\x4b\xd8\xd9\x85\x0e\x39\xef\
-\x59\xf8\x06\x8e\xfd\x67\xf8\xfd\x8a\x18\x97\x00\x00\x00\x09\x70\
-\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x6d\x49\x44\x41\x54\x18\x95\x75\xcf\xc1\x09\xc2\x50\
-\x10\x84\xe1\xd7\x85\x07\x9b\xd0\x43\x40\xd2\x82\x78\x14\x7b\x30\
-\x57\x21\x8d\x84\x60\x3f\x62\x4b\x7a\x48\xcc\x97\x83\xfb\x30\x04\
-\xdf\x9c\x86\x7f\x67\x99\xdd\x84\x0d\xaa\x54\x10\x6a\x6c\x13\x1e\
-\xbe\xba\xfe\x09\x35\x31\x7b\xe6\x8d\x0f\x26\x1c\x17\xa1\x53\xb0\
-\x11\x87\x0c\x2f\x01\x07\xec\xb0\x0f\x3f\xe1\xbc\xae\x69\xa3\xe6\
-\x85\x77\xf8\x5b\xe9\xf0\xbb\x9f\xfa\xd2\x83\x39\xdc\xa3\x5b\xf3\
-\x19\x2e\xa8\x89\xb5\x30\xf7\x43\xa0\x00\x00\x00\x00\x49\x45\x4e\
-\x44\xae\x42\x60\x82\
-\x00\x00\x00\xa0\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
-\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
-\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x14\x1f\x0d\xfc\
-\x52\x2b\x9c\x00\x00\x00\x24\x49\x44\x41\x54\x08\xd7\x63\x60\x40\
-\x05\x73\x3e\xc0\x58\x4c\xc8\x5c\x26\x64\x59\x26\x64\xc5\x70\x4e\
-\x8a\x00\x9c\x93\x22\x80\x61\x1a\x0a\x00\x00\x29\x95\x08\xaf\x88\
-\xac\xba\x34\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x00\xa6\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
-\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
-\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x08\x15\x3b\xdc\
-\x3b\x0c\x9b\x00\x00\x00\x2a\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
-\x00\x8c\x0c\x0c\x73\x3e\x20\x0b\xa4\x08\x30\x32\x30\x20\x0b\xa6\
-\x08\x30\x30\x30\x42\x98\x10\xc1\x14\x01\x14\x13\x50\xb5\xa3\x01\
-\x00\xc6\xb9\x07\x90\x5d\x66\x1f\x83\x00\x00\x00\x00\x49\x45\x4e\
-\x44\xae\x42\x60\x82\
\x00\x00\x07\xad\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -275,45 +135,199 @@ qt_resource_data = b"\
\x5e\x78\xa2\x9e\x0e\xa7\x20\x74\x47\x39\x1d\xf6\xe1\x95\x2b\xd6\
\xb1\x44\x8e\x0e\xcb\x58\xf0\x0f\x52\x8a\x79\x18\xdc\xe2\x02\x70\
\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x00\xa6\
+\x00\x00\x07\x06\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x0a\x00\x00\x00\x07\x08\x06\x00\x00\x00\x31\xac\xdc\x63\
+\x00\x00\x04\xb0\x69\x54\x58\x74\x58\x4d\x4c\x3a\x63\x6f\x6d\x2e\
+\x61\x64\x6f\x62\x65\x2e\x78\x6d\x70\x00\x00\x00\x00\x00\x3c\x3f\
+\x78\x70\x61\x63\x6b\x65\x74\x20\x62\x65\x67\x69\x6e\x3d\x22\xef\
+\xbb\xbf\x22\x20\x69\x64\x3d\x22\x57\x35\x4d\x30\x4d\x70\x43\x65\
+\x68\x69\x48\x7a\x72\x65\x53\x7a\x4e\x54\x63\x7a\x6b\x63\x39\x64\
+\x22\x3f\x3e\x0a\x3c\x78\x3a\x78\x6d\x70\x6d\x65\x74\x61\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x3d\x22\x61\x64\x6f\x62\x65\x3a\x6e\x73\
+\x3a\x6d\x65\x74\x61\x2f\x22\x20\x78\x3a\x78\x6d\x70\x74\x6b\x3d\
+\x22\x58\x4d\x50\x20\x43\x6f\x72\x65\x20\x35\x2e\x35\x2e\x30\x22\
+\x3e\x0a\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\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\x3e\x0a\x20\x20\x3c\x72\x64\x66\x3a\x44\x65\x73\x63\
+\x72\x69\x70\x74\x69\x6f\x6e\x20\x72\x64\x66\x3a\x61\x62\x6f\x75\
+\x74\x3d\x22\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x65\
+\x78\x69\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\
+\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x65\x78\x69\x66\x2f\x31\x2e\
+\x30\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x74\x69\
+\x66\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\
+\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x74\x69\x66\x66\x2f\x31\x2e\x30\
+\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x70\x68\x6f\
+\x74\x6f\x73\x68\x6f\x70\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\
+\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x70\x68\x6f\x74\
+\x6f\x73\x68\x6f\x70\x2f\x31\x2e\x30\x2f\x22\x0a\x20\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\x70\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\
+\x61\x70\x2f\x31\x2e\x30\x2f\x22\x0a\x20\x20\x20\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6d\x70\x4d\x4d\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\x61\
+\x70\x2f\x31\x2e\x30\x2f\x6d\x6d\x2f\x22\x0a\x20\x20\x20\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x73\x74\x45\x76\x74\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\
+\x78\x61\x70\x2f\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\
+\x73\x6f\x75\x72\x63\x65\x45\x76\x65\x6e\x74\x23\x22\x0a\x20\x20\
+\x20\x65\x78\x69\x66\x3a\x50\x69\x78\x65\x6c\x58\x44\x69\x6d\x65\
+\x6e\x73\x69\x6f\x6e\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x65\x78\
+\x69\x66\x3a\x50\x69\x78\x65\x6c\x59\x44\x69\x6d\x65\x6e\x73\x69\
+\x6f\x6e\x3d\x22\x37\x22\x0a\x20\x20\x20\x65\x78\x69\x66\x3a\x43\
+\x6f\x6c\x6f\x72\x53\x70\x61\x63\x65\x3d\x22\x31\x22\x0a\x20\x20\
+\x20\x74\x69\x66\x66\x3a\x49\x6d\x61\x67\x65\x57\x69\x64\x74\x68\
+\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x74\x69\x66\x66\x3a\x49\x6d\
+\x61\x67\x65\x4c\x65\x6e\x67\x74\x68\x3d\x22\x37\x22\x0a\x20\x20\
+\x20\x74\x69\x66\x66\x3a\x52\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\
+\x55\x6e\x69\x74\x3d\x22\x32\x22\x0a\x20\x20\x20\x74\x69\x66\x66\
+\x3a\x58\x52\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\x3d\x22\x37\x32\
+\x2e\x30\x22\x0a\x20\x20\x20\x74\x69\x66\x66\x3a\x59\x52\x65\x73\
+\x6f\x6c\x75\x74\x69\x6f\x6e\x3d\x22\x37\x32\x2e\x30\x22\x0a\x20\
+\x20\x20\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\x43\x6f\x6c\x6f\
+\x72\x4d\x6f\x64\x65\x3d\x22\x33\x22\x0a\x20\x20\x20\x70\x68\x6f\
+\x74\x6f\x73\x68\x6f\x70\x3a\x49\x43\x43\x50\x72\x6f\x66\x69\x6c\
+\x65\x3d\x22\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\x39\x36\x36\
+\x2d\x32\x2e\x31\x22\x0a\x20\x20\x20\x78\x6d\x70\x3a\x4d\x6f\x64\
+\x69\x66\x79\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\x30\x35\
+\x2d\x33\x31\x54\x31\x32\x3a\x33\x30\x3a\x31\x31\x2b\x30\x32\x3a\
+\x30\x30\x22\x0a\x20\x20\x20\x78\x6d\x70\x3a\x4d\x65\x74\x61\x64\
+\x61\x74\x61\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\x30\x35\
+\x2d\x33\x31\x54\x31\x32\x3a\x33\x30\x3a\x31\x31\x2b\x30\x32\x3a\
+\x30\x30\x22\x3e\x0a\x20\x20\x20\x3c\x78\x6d\x70\x4d\x4d\x3a\x48\
+\x69\x73\x74\x6f\x72\x79\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\
+\x3a\x53\x65\x71\x3e\x0a\x20\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\
+\x6c\x69\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\x76\x74\x3a\x61\
+\x63\x74\x69\x6f\x6e\x3d\x22\x70\x72\x6f\x64\x75\x63\x65\x64\x22\
+\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\x76\x74\x3a\x73\x6f\x66\
+\x74\x77\x61\x72\x65\x41\x67\x65\x6e\x74\x3d\x22\x41\x66\x66\x69\
+\x6e\x69\x74\x79\x20\x44\x65\x73\x69\x67\x6e\x65\x72\x20\x31\x2e\
+\x39\x2e\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x73\x74\x45\x76\x74\
+\x3a\x77\x68\x65\x6e\x3d\x22\x32\x30\x32\x31\x2d\x30\x35\x2d\x33\
+\x31\x54\x31\x32\x3a\x33\x30\x3a\x31\x31\x2b\x30\x32\x3a\x30\x30\
+\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\x53\x65\
+\x71\x3e\x0a\x20\x20\x20\x3c\x2f\x78\x6d\x70\x4d\x4d\x3a\x48\x69\
+\x73\x74\x6f\x72\x79\x3e\x0a\x20\x20\x3c\x2f\x72\x64\x66\x3a\x44\
+\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x3e\x0a\x20\x3c\x2f\x72\
+\x64\x66\x3a\x52\x44\x46\x3e\x0a\x3c\x2f\x78\x3a\x78\x6d\x70\x6d\
+\x65\x74\x61\x3e\x0a\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\x20\x65\
+\x6e\x64\x3d\x22\x72\x22\x3f\x3e\x85\x9d\x9f\x08\x00\x00\x01\x83\
+\x69\x43\x43\x50\x73\x52\x47\x42\x20\x49\x45\x43\x36\x31\x39\x36\
+\x36\x2d\x32\x2e\x31\x00\x00\x28\x91\x75\x91\xcf\x2b\x44\x51\x14\
+\xc7\x3f\x66\x68\xfc\x18\x8d\x62\x61\x31\x65\x12\x16\x42\x83\x12\
+\x1b\x8b\x99\x18\x0a\x8b\x99\x51\x7e\x6d\x66\x9e\x79\x33\x6a\xde\
+\x78\xbd\x37\xd2\x64\xab\x6c\xa7\x28\xb1\xf1\x6b\xc1\x5f\xc0\x56\
+\x59\x2b\x45\xa4\x64\xa7\xac\x89\x0d\x7a\xce\x9b\x51\x23\x99\x73\
+\x3b\xf7\x7c\xee\xf7\xde\x73\xba\xf7\x5c\x70\x44\xd3\x8a\x66\x56\
+\xfa\x41\xcb\x64\x8d\x70\x28\xe0\x9b\x99\x9d\xf3\xb9\x9e\xa8\xa2\
+\x85\x1a\x3a\xf1\xc6\x14\x53\x9f\x8c\x8c\x46\x29\x6b\xef\xb7\x54\
+\xd8\xf1\xba\xdb\xae\x55\xfe\xdc\xbf\x56\xb7\x98\x30\x15\xa8\xa8\
+\x16\x1e\x56\x74\x23\x2b\x3c\x26\x3c\xb1\x9a\xd5\x6d\xde\x12\x6e\
+\x52\x52\xb1\x45\xe1\x13\xe1\x2e\x43\x2e\x28\x7c\x63\xeb\xf1\x22\
+\x3f\xdb\x9c\x2c\xf2\xa7\xcd\x46\x34\x1c\x04\x47\x83\xb0\x2f\xf9\
+\x8b\xe3\xbf\x58\x49\x19\x9a\xb0\xbc\x9c\x36\x2d\xbd\xa2\xfc\xdc\
+\xc7\x7e\x89\x3b\x91\x99\x8e\x48\x6c\x15\xf7\x62\x12\x26\x44\x00\
+\x1f\xe3\x8c\x10\x64\x80\x5e\x86\x64\x1e\xa0\x9b\x3e\x7a\x64\x45\
+\x99\x7c\x7f\x21\x7f\x8a\x65\xc9\x55\x64\xd6\xc9\x61\xb0\x44\x92\
+\x14\x59\xba\x44\x5d\x91\xea\x09\x89\xaa\xe8\x09\x19\x69\x72\x76\
+\xff\xff\xf6\xd5\x54\xfb\xfb\x8a\xd5\xdd\x01\xa8\x7a\xb4\xac\xd7\
+\x76\x70\x6d\xc2\x57\xde\xb2\x3e\x0e\x2c\xeb\xeb\x10\x9c\x0f\x70\
+\x9e\x29\xe5\x2f\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\x9e\x75\
+\x38\xbd\x28\x69\xf1\x6d\x38\xdb\x80\xe6\x7b\x3d\x66\xc4\x0a\x92\
+\x53\xdc\xa1\xaa\xf0\x72\x0c\xf5\xb3\xd0\x78\x05\xb5\xf3\xc5\x9e\
+\xfd\xec\x73\x74\x07\xd1\x35\xf9\xaa\x4b\xd8\xd9\x85\x0e\x39\xef\
+\x59\xf8\x06\x8e\xfd\x67\xf8\xfd\x8a\x18\x97\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x6d\x49\x44\x41\x54\x18\x95\x75\xcf\xc1\x09\xc2\x50\
+\x10\x84\xe1\xd7\x85\x07\x9b\xd0\x43\x40\xd2\x82\x78\x14\x7b\x30\
+\x57\x21\x8d\x84\x60\x3f\x62\x4b\x7a\x48\xcc\x97\x83\xfb\x30\x04\
+\xdf\x9c\x86\x7f\x67\x99\xdd\x84\x0d\xaa\x54\x10\x6a\x6c\x13\x1e\
+\xbe\xba\xfe\x09\x35\x31\x7b\xe6\x8d\x0f\x26\x1c\x17\xa1\x53\xb0\
+\x11\x87\x0c\x2f\x01\x07\xec\xb0\x0f\x3f\xe1\xbc\xae\x69\xa3\xe6\
+\x85\x77\xf8\x5b\xe9\xf0\xbb\x9f\xfa\xd2\x83\x39\xdc\xa3\x5b\xf3\
+\x19\x2e\xa8\x89\xb5\x30\xf7\x43\xa0\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x01\xdc\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x8e\x49\x44\x41\x54\x68\x81\xed\
+\x9a\xaf\x4e\xc3\x50\x14\x87\xbf\x6e\x1d\x0a\x1c\x41\x1e\x83\x04\
+\xc4\x0c\x6a\x41\x10\x04\x82\x80\x9e\xe7\x05\x78\x80\x21\x78\x01\
+\x5e\x00\x8f\xc2\x00\x72\x41\x90\x3d\xc2\x40\x31\x73\xe4\x32\x14\
+\xc1\xec\x4f\x82\x68\x1b\xb6\x65\xed\x28\xeb\x76\xda\xe5\x7e\xae\
+\xf7\x5c\xf1\xfb\xda\x7b\x6f\x9a\xdc\xe3\x11\xa2\xaa\xdb\xc0\x35\
+\x50\x03\xf6\x81\x0a\xf9\x62\x00\xb4\x81\x16\x70\x23\x22\x3d\x00\
+\x0f\x40\x55\x8f\x81\x7b\x60\xc7\x2c\x5e\x3a\xba\x40\x5d\x44\x5e\
+\xbc\xf0\xcd\xbf\x51\x9c\xf0\x11\x5d\x60\xaf\x44\xb0\x6c\x8a\x16\
+\x1e\x82\xcc\x0d\x9f\x60\xcd\x4f\x33\x5a\x71\x98\xbf\x52\x9e\x7a\
+\xae\xf9\x04\x1b\x76\x9c\x91\x88\xf8\x2b\x0a\x94\x0a\x55\x1d\x32\
+\x29\x71\x50\x22\x7f\xa7\x4d\x1a\x2a\x25\xeb\x04\x8b\xe2\x04\xac\
+\x71\x02\xd6\x38\x01\x6b\x9c\x80\x35\x4e\xc0\x1a\x27\x60\xcd\xdc\
+\xdf\x66\x55\x3d\x01\x0e\x81\xcd\xe5\xc7\x99\x60\x08\xbc\x03\x4f\
+\x22\xf2\x1d\x37\x29\x56\x40\x55\x7d\xe0\x01\x38\xcf\x3e\x5b\x2a\
+\x3a\xaa\x7a\x2a\x22\x1f\xb3\x8a\x49\x4b\xe8\x0a\xfb\xf0\x00\xbb\
+\xc0\x5d\x5c\x31\x49\xe0\x2c\xfb\x2c\xff\xe6\x48\x55\xb7\x66\x15\
+\x0a\xbf\x89\x93\x04\x9e\x57\x96\x62\x3e\xaf\x22\xf2\x35\xab\x90\
+\x24\x70\x0b\x3c\x2e\x27\x4f\x2a\x3a\xc0\x65\x5c\x31\xf6\x14\x12\
+\x91\x21\x70\x51\xd8\x63\x34\x42\x44\x9a\x40\x33\xc3\x60\x99\xb2\
+\xd6\x9b\xb8\x10\x38\x01\x6b\x9c\x80\x35\x4e\xc0\x1a\x27\x60\x8d\
+\x13\xb0\x66\x2d\x04\x06\xd6\x21\x16\xa0\xef\x13\x5c\xdf\x57\xc7\
+\x06\xcb\xe1\x6d\x60\x1e\x99\xbe\x66\x6d\xfb\x04\xbd\x07\xd5\x39\
+\x13\xf3\x4a\xab\xf8\xad\x06\x61\xd7\x47\x3d\x1c\x28\x0a\x51\xb3\
+\x47\xcf\x8b\x46\xc2\x2f\xd1\xe0\xb7\xdd\x66\xc3\x28\x5c\x1c\x7d\
+\x26\xdb\x6d\x3e\x01\x7e\x00\x25\xf8\x5a\x43\x55\x4e\x3a\x7f\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\xef\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\xa1\x49\x44\x41\x54\x68\x81\xed\
+\x9a\xbf\x4e\xc2\x50\x14\x87\xbf\x96\xe2\xa4\x9b\x71\xbc\x8b\x1b\
+\xea\xc0\xe2\x44\x1c\x8c\x83\x83\xd1\x81\x89\x84\xd1\x17\xf0\x01\
+\x70\xc0\x07\xf0\x05\x1c\x49\x9c\xba\xa8\x23\x71\x30\x3c\x02\x76\
+\x92\xe5\x8e\x04\x27\xe3\xc2\x9f\xc4\xa1\x6d\x04\x42\x8b\x95\xc2\
+\xa1\xe4\x7e\x5b\x7b\xee\xf0\xfb\x9a\x7b\x6f\x9a\x9c\x63\x11\x50\
+\x75\xbd\x5d\xe0\x16\x28\x01\x87\x40\x9e\xf5\x62\x00\xb4\x81\x16\
+\x50\x6f\x94\x0b\x3d\x00\x0b\xa0\xea\x7a\xa7\xc0\x23\xb0\x27\x16\
+\x2f\x19\x5d\xa0\xd2\x28\x17\x5e\xad\xe0\xcb\xbf\x93\x9d\xf0\x21\
+\x5d\xe0\xc0\xc6\xdf\x36\x59\x0b\x0f\x7e\xe6\x9a\x83\xbf\xe7\xa7\
+\x19\xad\x38\xcc\x5f\xc9\x4d\x3d\x97\x1c\xfc\x03\x3b\xce\xa8\x51\
+\x2e\x38\x2b\x0a\x94\x88\xaa\xeb\x0d\x99\x94\x38\xb2\x59\xbf\xdb\
+\x26\x09\x79\x5b\x3a\xc1\xa2\x18\x01\x69\x8c\x80\x34\x46\x40\x1a\
+\x23\x20\x8d\x11\x90\xc6\x08\x48\x33\xf7\xb7\x59\x6b\x7d\x06\x1c\
+\x03\xdb\xcb\x8f\x33\xc1\x10\xf0\x80\x67\xa5\xd4\x77\xd4\xa2\x48\
+\x01\xad\xb5\x03\xb8\xc0\x65\xfa\xd9\x12\xd1\xd1\x5a\x9f\x2b\xa5\
+\x3e\x66\x15\xe3\xb6\xd0\x0d\xf2\xe1\x01\xf6\x81\x87\xa8\x62\x9c\
+\xc0\x45\xfa\x59\xfe\xcd\x89\xd6\x7a\x67\x56\x21\xf3\x87\x38\x4e\
+\xe0\x65\x65\x29\xe6\xf3\xa6\x94\xfa\x9a\x55\x88\x13\xb8\x07\x9e\
+\x96\x93\x27\x11\x1d\xe0\x3a\xaa\x18\x79\x0b\x29\xa5\x86\xc0\x55\
+\x66\xaf\xd1\x10\xa5\x54\x13\x68\xa6\x18\x2c\x55\x36\xfa\x10\x67\
+\x02\x23\x20\x8d\x11\x90\xc6\x08\x48\x63\x04\xa4\x31\x02\xd2\x6c\
+\x84\xc0\x40\x3a\xc4\x02\xf4\x1d\xfc\xf6\x7d\x71\xec\x65\x2e\xe8\
+\x06\xae\x23\xd3\x6d\xd6\xb6\x83\x3f\x7b\x50\x9c\xb3\x70\x5d\x69\
+\xd9\x40\x1d\xbf\x6d\x9f\x35\xba\xc0\x9d\x1d\x4c\x7d\x54\xc8\x96\
+\x44\x38\xec\xd1\xb3\xc2\x37\xc1\xd0\x47\x8d\xdf\x71\x9b\x2d\xa1\
+\x70\x51\xf4\x99\x1c\xb7\xf9\x04\xf8\x01\x6f\xed\x58\x63\x2d\xfd\
+\xb2\x59\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa5\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x02\x62\x4b\x47\x44\x00\x9c\x53\x34\xfc\x5d\x00\x00\x00\x09\x70\
\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x08\x15\x3b\xdc\
-\x3b\x0c\x9b\x00\x00\x00\x2a\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
-\x00\x8c\x0c\x0c\x73\x3e\x20\x0b\xa4\x08\x30\x32\x30\x20\x0b\xa6\
-\x08\x30\x30\x30\x42\x98\x10\xc1\x14\x01\x14\x13\x50\xb5\xa3\x01\
-\x00\xc6\xb9\x07\x90\x5d\x66\x1f\x83\x00\x00\x00\x00\x49\x45\x4e\
-\x44\xae\x42\x60\x82\
-\x00\x00\x00\xa6\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
-\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
-\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x14\x1d\x00\xb0\
-\xd5\x35\xa3\x00\x00\x00\x2a\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
-\x06\xfe\x9f\x67\x60\x60\x42\x30\xa1\x1c\x08\x93\x81\x81\x09\xc1\
-\x64\x60\x60\x62\x60\x60\x34\x44\xe2\x20\x73\x19\x90\x8d\x40\x02\
-\x00\x64\x40\x09\x75\x86\xb3\xad\x9c\x00\x00\x00\x00\x49\x45\x4e\
-\x44\xae\x42\x60\x82\
-\x00\x00\x00\xa6\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
-\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
-\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x08\x15\x3b\xdc\
-\x3b\x0c\x9b\x00\x00\x00\x2a\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
-\x00\x8c\x0c\x0c\x73\x3e\x20\x0b\xa4\x08\x30\x32\x30\x20\x0b\xa6\
-\x08\x30\x30\x30\x42\x98\x10\xc1\x14\x01\x14\x13\x50\xb5\xa3\x01\
-\x00\xc6\xb9\x07\x90\x5d\x66\x1f\x83\x00\x00\x00\x00\x49\x45\x4e\
-\x44\xae\x42\x60\x82\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x0b\x02\x04\x6d\
+\x98\x1b\x69\x00\x00\x00\x29\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18\x32\x32\x30\x20\x0b\x32\x1a\
+\x32\x30\x30\x42\x98\x10\x41\x46\x43\x14\x13\x50\xb5\xa3\x01\x00\
+\xd6\x10\x07\xd2\x2f\x48\xdf\x4a\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
\x00\x00\x00\xa0\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -326,51 +340,174 @@ qt_resource_data = b"\
\x05\xff\xcf\xc3\x58\x4c\xc8\x5c\x26\x64\x59\x26\x64\xc5\x70\x0e\
\xa3\x21\x9c\xc3\x68\x88\x61\x1a\x0a\x00\x00\x6d\x84\x09\x75\x37\
\x9e\xd9\x23\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x00\x9f\
+\x00\x00\x00\xa5\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\x9c\x53\x34\xfc\x5d\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x0b\x02\x04\x6d\
+\x98\x1b\x69\x00\x00\x00\x29\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18\x32\x32\x30\x20\x0b\x32\x1a\
+\x32\x30\x30\x42\x98\x10\x41\x46\x43\x14\x13\x50\xb5\xa3\x01\x00\
+\xd6\x10\x07\xd2\x2f\x48\xdf\x4a\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
+\x00\x00\x01\x69\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x1b\x49\x44\x41\x54\x68\x81\xed\
+\xda\xb1\x6d\xc2\x40\x14\x87\xf1\xcf\xc7\x91\x09\x50\x86\x70\x42\
+\x41\x4f\xc5\x0a\xae\x90\xbc\x0a\x29\xc8\x2a\x96\x52\x79\x05\x2a\
+\x46\x20\x1e\xc2\x82\x05\x48\x90\x52\xdc\x59\x01\x4b\x51\x62\x45\
+\xe2\xef\x93\xde\xaf\xb3\x45\xf1\x3e\xcb\xa6\xb9\x97\x11\x95\x75\
+\x33\x03\x5e\x80\x25\xf0\x0c\x4c\x19\x97\x0f\xe0\x00\xec\x81\x6d\
+\x55\xe4\x47\x80\x0c\xa0\xac\x9b\x15\xf0\x06\x3c\xca\xc6\x1b\xa6\
+\x05\xd6\x55\x91\xef\xb2\xf8\xe4\xdf\x49\x67\xf8\x4e\x0b\x3c\x39\
+\xc2\x6b\x93\xda\xf0\x10\x66\xde\x78\xc2\x3b\xdf\x77\xb9\xf3\x30\
+\x7f\x35\xe9\x5d\x2f\x3d\xe1\x83\xbd\x76\xa9\x8a\xdc\xdf\x69\xa0\
+\x41\xca\xba\xf9\xe4\x36\x62\xee\x18\xdf\xbf\xcd\x10\x53\xa7\x9e\
+\xe0\xbf\x2c\x40\xcd\x02\xd4\x2c\x40\xcd\x02\xd4\x2c\x40\xcd\x02\
+\xd4\x2c\x40\xcd\x02\xd4\x2c\x40\xcd\x02\xd4\x2c\x40\xcd\x02\xd4\
+\x2c\x40\xcd\x02\xd4\x2c\x40\xcd\x02\xd4\x2c\x40\xcd\x11\x4e\xc0\
+\x53\x75\xf6\x84\xe3\xfb\xc5\xd5\xcd\x49\x3c\x0d\x1c\xa3\xfe\x31\
+\xeb\xc1\x13\x76\x0f\x16\xbf\xfc\x70\xac\xf6\x0e\xd8\x12\x8e\xed\
+\x53\xd3\x02\xaf\x2e\x6e\x7d\xac\x49\x2b\xa2\x5b\xf6\x38\x66\xdd\
+\x9d\xb8\xf4\xb1\xe1\x7b\xdd\xe6\x41\x34\xdc\x4f\xce\xdc\xae\xdb\
+\x9c\x00\xbe\x00\x9f\xf6\x34\x3e\x36\x4f\x37\x81\x00\x00\x00\x00\
+\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa6\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x08\x14\x1f\xf9\
-\x23\xd9\x0b\x00\x00\x00\x23\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
-\x0d\xe6\x7c\x80\xb1\x18\x91\x05\x52\x04\xe0\x42\x08\x15\x29\x02\
-\x0c\x0c\x8c\xc8\x02\x08\x95\x68\x00\x00\xac\xac\x07\x90\x4e\x65\
-\x34\xac\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x00\x45\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x01\x00\x00\x00\x01\x08\x02\x00\x00\x00\x90\x77\x53\xde\
-\x00\x00\x00\x0c\x49\x44\x41\x54\x08\x99\x63\x60\x60\x60\x00\x00\
-\x00\x04\x00\x01\xa3\x0a\x15\xe3\x00\x00\x00\x00\x49\x45\x4e\x44\
-\xae\x42\x60\x82\
-\x00\x00\x00\xa5\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x08\x15\x3b\xdc\
+\x3b\x0c\x9b\x00\x00\x00\x2a\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x00\x8c\x0c\x0c\x73\x3e\x20\x0b\xa4\x08\x30\x32\x30\x20\x0b\xa6\
+\x08\x30\x30\x30\x42\x98\x10\xc1\x14\x01\x14\x13\x50\xb5\xa3\x01\
+\x00\xc6\xb9\x07\x90\x5d\x66\x1f\x83\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa6\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02\x62\x4b\x47\x44\x00\x9c\x53\x34\xfc\x5d\x00\x00\x00\x09\x70\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x0b\x02\x04\x6d\
-\x98\x1b\x69\x00\x00\x00\x29\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
-\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18\x32\x32\x30\x20\x0b\x32\x1a\
-\x32\x30\x30\x42\x98\x10\x41\x46\x43\x14\x13\x50\xb5\xa3\x01\x00\
-\xd6\x10\x07\xd2\x2f\x48\xdf\x4a\x00\x00\x00\x00\x49\x45\x4e\x44\
-\xae\x42\x60\x82\
-\x00\x00\x00\xa5\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x08\x15\x3b\xdc\
+\x3b\x0c\x9b\x00\x00\x00\x2a\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x00\x8c\x0c\x0c\x73\x3e\x20\x0b\xa4\x08\x30\x32\x30\x20\x0b\xa6\
+\x08\x30\x30\x30\x42\x98\x10\xc1\x14\x01\x14\x13\x50\xb5\xa3\x01\
+\x00\xc6\xb9\x07\x90\x5d\x66\x1f\x83\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x04\x33\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
-\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02\x62\x4b\x47\x44\x00\x9c\x53\x34\xfc\x5d\x00\x00\x00\x09\x70\
-\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x0b\x02\x04\x6d\
-\x98\x1b\x69\x00\x00\x00\x29\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
-\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18\x32\x32\x30\x20\x0b\x32\x1a\
-\x32\x30\x30\x42\x98\x10\x41\x46\x43\x14\x13\x50\xb5\xa3\x01\x00\
-\xd6\x10\x07\xd2\x2f\x48\xdf\x4a\x00\x00\x00\x00\x49\x45\x4e\x44\
-\xae\x42\x60\x82\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xe5\x49\x44\x41\x54\x68\x81\xed\
+\x9a\x4d\x88\x1c\x45\x14\xc7\x7f\x33\x3b\x89\x2e\x18\xf1\x33\x1e\
+\x92\x8b\x8b\xa2\x26\x06\x14\x2f\xa2\x39\x88\x15\x89\xa9\x18\x15\
+\xd1\xca\x06\x0f\x91\x05\x3d\x88\x62\x6e\x42\xc0\x1c\x12\xc4\x83\
+\x07\x15\x0d\x42\x14\x89\x04\xa2\x96\x44\x59\x22\x2f\x46\x7d\x8a\
+\xb0\x22\x08\x1e\x34\xbb\x22\x46\x8c\x2c\x88\xba\xc4\x88\x82\x5f\
+\xc9\x46\x3d\x54\x0f\x8c\xbd\xdd\x5d\xdd\xd3\x61\xa7\x07\xfc\xdd\
+\xa6\xfa\xd5\xab\xf7\xea\xf3\xdf\xd5\xd3\x22\xc1\x58\x77\x11\xb0\
+\x03\x58\x0b\x5c\x0d\x2c\xa1\x59\x9c\x02\xa6\x81\x29\x60\xa7\x8a\
+\x3f\x0e\xd0\x02\x30\xd6\xdd\x0c\xbc\x02\x2c\x1f\x58\x78\xd5\x98\
+\x03\xb6\xa8\xf8\xf7\x5b\x49\xcf\xcf\x30\x3c\xc1\x77\x99\x03\x56\
+\xb7\x09\xd3\x66\xd8\x82\x87\x10\xf3\x63\x1d\xc2\x9c\x4f\x73\x7a\
+\x91\x83\x29\xcb\x48\xea\xf7\xda\x0e\x61\xc1\xf6\x72\x5a\xc5\x77\
+\x16\x29\xa0\x4a\x18\xeb\xe6\xf9\x6f\x12\x6b\xda\x34\x6f\xb7\xa9\
+\xc2\x92\xf6\xa0\x23\xa8\xcb\xff\x09\x0c\x9a\xa1\x4f\xa0\xa9\xbb\
+\xcd\x3d\xc0\x5d\xc0\x4b\x2a\xfe\xdd\x22\xdb\xc6\x8d\x80\xb1\xee\
+\x11\xc0\x03\xe3\xc0\x61\x63\xdd\x6e\x63\x5d\xee\x4e\xd9\xa8\x04\
+\x8c\x75\xe3\xc0\x53\x3d\x45\x2d\xe0\x41\xe0\x85\xbc\x3a\x8d\x99\
+\x42\xc6\xba\x75\xc0\xcb\x24\x02\x33\xc5\x56\x63\xdd\x91\xac\x7a\
+\x8d\x18\x01\x63\xdd\x75\xc0\x1b\xc0\xd2\x02\xb3\x0d\x59\x85\x03\
+\x4f\xc0\x58\x77\x19\x20\xc0\xb2\x88\xe9\x8b\x59\x85\x03\x4d\xc0\
+\x58\x77\x09\x70\x98\xb8\x1a\x7e\x52\xc5\xbf\x9a\xf5\x60\x60\x09\
+\x18\xeb\x96\x01\x87\x80\xb1\x88\xe9\x3e\xe0\xd1\xbc\x87\x03\x49\
+\xc0\x58\xb7\x14\x78\x13\xb8\x36\x62\xfa\x36\x30\xa1\xe2\xff\xc9\
+\x33\x58\xf4\x04\x8c\x75\x6d\x42\xaf\x9a\x88\xe9\x27\xc0\xdd\x2a\
+\x7e\xbe\xc8\x68\x10\x23\xf0\x34\xe0\x22\x36\x5f\x01\x1b\x55\xfc\
+\x6f\x31\x67\xa5\x12\x30\xd6\xb5\x92\x9e\xab\x85\xb1\x6e\x3b\xf0\
+\x70\xc4\xec\x7b\x60\x7d\xf7\xd6\x21\x46\x61\x50\x49\xe0\xdb\x80\
+\x3f\x80\x69\x63\xdd\x9a\x52\x91\x66\xfb\x9a\x00\x1e\x8f\x98\xfd\
+\x02\xdc\xaa\xe2\xbf\x2d\xeb\x37\x37\x81\x44\x7f\x4c\x12\x8e\xf6\
+\xb3\x80\xab\x80\xf7\x8c\x75\x57\x94\x75\xde\xe3\x6b\x13\xb0\x27\
+\x62\xf6\x17\x70\x87\x8a\xff\xbc\x8a\xef\xa2\x11\x78\x0e\xd8\x94\
+\x2a\x5b\x0e\xa8\xb1\xee\xd2\xb2\x0d\x18\xeb\x6e\x00\x5e\x63\xe1\
+\x0b\x79\x2f\x7f\x03\xf7\xaa\xf8\x0f\xcb\xfa\xed\x92\x99\x40\xd2\
+\x63\x0f\xe4\xd4\x59\x41\x18\x89\x15\x31\xe7\xc6\xba\x55\xc0\x41\
+\x60\x34\x62\xfa\x90\x8a\x3f\x10\xf3\x97\x45\xde\x08\x5c\x10\xa9\
+\x37\x46\x48\xe2\xe2\x3c\x03\x63\xdd\x4a\xc2\x29\x1b\xf3\xb5\x4b\
+\xc5\x3f\x1f\xb1\xc9\x25\x2f\x81\xfd\x84\x7d\xb8\x88\x2b\x81\x77\
+\x8c\x75\xe7\xa5\x1f\x18\xeb\xce\x27\x04\xbf\x32\xe2\x63\x8f\x8a\
+\xdf\x11\x8d\xb2\x80\xcc\x04\x54\xfc\x29\x82\xfa\xcb\x94\xb0\x3d\
+\x5c\x03\x1c\x32\xd6\x9d\xd3\x2d\x30\xd6\x8d\x12\xa6\xcd\xaa\x48\
+\xdd\x49\x82\xd6\xaf\x45\xee\x22\x56\xf1\x27\x80\x5b\x80\xa3\x11\
+\x1f\xd7\x03\x07\x8d\x75\xa3\xc6\xba\x11\xc2\x82\xbd\x31\x52\x67\
+\x0a\x18\x57\xf1\xb5\x6f\x00\x0b\xcf\x01\x15\xff\x23\xb0\x0e\x98\
+\x8d\xf8\xb9\x09\x38\x40\xd8\x2a\xd3\x3b\x57\x9a\x69\xe0\x76\x15\
+\xff\x67\xc9\x18\x0b\x89\x9e\xae\x2a\x7e\x96\xa0\x5b\x7e\x88\x98\
+\x6e\x00\x26\x22\x36\xb3\x84\x83\xea\xe7\x72\xe1\xc5\x29\x25\x0f\
+\x54\xfc\xd7\x84\x91\xf8\xa9\x46\x5b\x27\x08\x12\xe1\xbb\x1a\x3e\
+\x16\x50\x5a\xdf\xa8\xf8\x19\x60\x3d\xf0\x6b\x1f\xed\xfc\x0e\xdc\
+\xa6\xe2\xbf\xec\xa3\x6e\x21\x95\x04\x9a\x8a\xff\x14\xd8\x98\x04\
+\x54\x96\x79\x60\xb3\x8a\xff\xb8\x4a\x5b\x65\xa9\xac\x30\x55\xfc\
+\x14\x70\x27\x41\xbb\x94\xe1\x7e\x15\xff\x56\xd5\x76\xca\xd2\x97\
+\x44\x4e\x6e\xcb\x36\x13\x7a\xb7\x88\xed\x2a\x7e\x6f\x3f\x6d\x94\
+\xa5\x6f\x8d\xaf\xe2\x27\x81\xad\x04\x21\x96\xc5\xb3\x2a\xfe\x89\
+\x7e\xfd\x97\xa5\xd6\x4b\x8a\x8a\xdf\x0f\xdc\xc7\xc2\x35\xb1\x1b\
+\xd8\x56\xc7\x77\x59\x6a\xdf\xcc\xa9\xf8\x7d\xc6\xba\x8f\x08\x07\
+\xd8\xb9\xc0\x07\xc9\x3a\x59\x14\xce\xc8\xd5\xa2\x8a\xff\x06\x78\
+\xe6\x4c\xf8\xaa\x4a\x9b\xf0\x05\x7c\x58\x39\xd9\x21\x68\x93\xde\
+\xfb\x99\x91\xe4\x6b\x60\x13\x49\xbf\xd5\x4d\x77\x08\xca\x30\x7d\
+\xc1\x54\xf4\xfa\xd7\x24\xa6\xda\xc0\x4e\xc2\x67\xfb\x61\x63\x0e\
+\xd8\xd5\x4e\xee\x5f\xb6\x30\x5c\x49\x74\xff\xec\x71\x7c\x04\xe0\
+\xd8\xd1\x99\x63\x63\x97\xaf\xde\x0b\x9c\x4d\xf8\xf0\x7d\x21\xcd\
+\x9b\x46\x27\x81\xcf\x80\xd7\x01\xa7\xe2\xbf\x00\xf8\x17\x5d\x81\
+\x0b\x38\xb3\xfa\x20\x9c\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\
+\x60\x82\
+\x00\x00\x01\xfc\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\xae\x49\x44\x41\x54\x68\x81\xed\
+\x9a\xbd\x4a\x03\x41\x14\x46\x4f\x36\x1b\xb0\xd0\x4a\xf1\x01\x14\
+\xab\x68\x91\xc6\x2a\x58\xb8\x16\xb2\x88\x76\x0b\xe9\x7d\x01\x1f\
+\x40\x8b\xf8\x00\xbe\x80\x85\x9d\x30\x62\xa3\x32\x55\xc6\x42\xf2\
+\x02\x42\x92\x46\x83\x7d\x48\x27\x36\xf9\x01\x8b\xdd\x40\x12\xb2\
+\x89\x6b\x7e\x66\x37\xcc\xe9\x76\xef\x14\xdf\x59\xee\x0c\x0b\x77\
+\x52\x04\x38\xae\xb7\x01\x5c\x01\x79\x60\x17\xc8\x10\x2f\xda\x40\
+\x05\x28\x03\x45\x25\x45\x13\x20\x05\xe0\xb8\xde\x21\x70\x0f\x6c\
+\x6a\x8b\x17\x8d\x06\x50\x50\x52\xbc\xa6\x82\x2f\x5f\x25\x39\xe1\
+\x7b\x34\x80\xac\x85\xdf\x36\x49\x0b\x0f\x7e\xe6\x4b\x1b\xbf\xe7\
+\x87\xe9\x2e\x38\xcc\x5f\x49\x0f\x3d\xe7\x6d\xfc\x0d\xdb\x4f\x57\
+\x49\x61\x2f\x28\x50\x24\x1c\xd7\xeb\x30\x28\xb1\x67\x11\xbf\xd3\
+\x26\x0a\x19\x4b\x77\x82\x69\x31\x02\xba\x31\x02\xba\x31\x02\xba\
+\x31\x02\xba\x31\x02\xba\x31\x02\xba\x99\xf8\xdb\xec\xb8\xde\x11\
+\xb0\x0f\xac\xce\x3f\xce\x00\x1d\xa0\x06\x3c\x2b\x29\x7e\xc2\x16\
+\x85\x0a\x38\xae\x67\x03\x8f\xc0\xe9\xec\xb3\x45\xa2\xee\xb8\xde\
+\xb1\x92\xe2\x73\x54\x71\x5c\x0b\x5d\xa0\x3f\x3c\xc0\x36\x70\x1b\
+\x56\x1c\x27\x70\x32\xfb\x2c\xff\xe6\xc0\x71\xbd\xb5\x51\x85\xc4\
+\x6f\xe2\x71\x02\x2f\x0b\x4b\x31\x99\x37\x25\xc5\xf7\xa8\xc2\x38\
+\x81\x1b\xe0\x69\x3e\x79\x22\x51\x07\xce\xc3\x8a\xa1\xa7\x90\x92\
+\xa2\x03\x9c\x25\xf6\x18\xed\xa1\xa4\x28\x01\xa5\x19\x06\x9b\x29\
+\x4b\xbd\x89\x13\x81\x11\xd0\x8d\x11\xd0\x8d\x11\xd0\x8d\x11\xd0\
+\x8d\x11\xd0\xcd\x52\x08\xb4\x75\x87\x98\x82\x96\x8d\x3f\xbe\xcf\
+\xf5\xbd\x4c\x07\xd3\xc0\x38\x32\x3c\x66\xad\xd8\xf8\x77\x0f\x72\
+\x13\x16\xc6\x95\xb2\x05\x14\xf1\xc7\xf6\x49\xa3\x01\x5c\x5b\xc1\
+\xad\x8f\x02\xc9\x92\xe8\x5d\xf6\x68\xa6\x01\xbe\x3e\xaa\x5f\x5b\
+\x3b\xd9\x3b\x60\x05\x7f\xf0\xbd\x4e\xfc\xda\xa8\x05\xbc\x03\x0f\
+\x80\xa7\xa4\xa8\x01\xfc\x02\x51\xab\x5c\x8a\x3f\xde\xe3\x59\x00\
+\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x00\xa6\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -384,19 +521,6 @@ qt_resource_data = b"\
\x64\x60\x60\x62\x60\x48\x11\x40\xe2\x20\x73\x19\x90\x8d\x40\x02\
\x00\x23\xed\x08\xaf\x64\x9f\x0f\x15\x00\x00\x00\x00\x49\x45\x4e\
\x44\xae\x42\x60\x82\
-\x00\x00\x00\xa5\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
-\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02\x62\x4b\x47\x44\x00\x9c\x53\x34\xfc\x5d\x00\x00\x00\x09\x70\
-\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x0b\x02\x04\x6d\
-\x98\x1b\x69\x00\x00\x00\x29\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
-\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18\x32\x32\x30\x20\x0b\x32\x1a\
-\x32\x30\x30\x42\x98\x10\x41\x46\x43\x14\x13\x50\xb5\xa3\x01\x00\
-\xd6\x10\x07\xd2\x2f\x48\xdf\x4a\x00\x00\x00\x00\x49\x45\x4e\x44\
-\xae\x42\x60\x82\
\x00\x00\x07\x30\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -514,31 +638,96 @@ qt_resource_data = b"\
\x23\xe0\x23\x37\xe1\xa8\x4f\x0e\x7f\xda\x60\xd7\xaf\x9f\xb9\x09\
\xdf\x63\x05\xff\xe5\x75\x4c\x65\xf5\xcc\x1f\x0d\x33\x2c\x83\xb6\
\x06\x44\x83\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x00\xa0\
+\x00\x00\x03\xfb\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
-\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
-\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x14\x1c\x1f\x24\
-\xc6\x09\x17\x00\x00\x00\x24\x49\x44\x41\x54\x08\xd7\x63\x60\x40\
-\x05\xff\xcf\xc3\x58\x4c\xc8\x5c\x26\x64\x59\x26\x64\xc5\x70\x0e\
-\xa3\x21\x9c\xc3\x68\x88\x61\x1a\x0a\x00\x00\x6d\x84\x09\x75\x37\
-\x9e\xd9\x23\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\x00\xa6\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xad\x49\x44\x41\x54\x68\x81\xed\
+\x9a\x4f\xa8\x15\x55\x1c\xc7\x3f\xf7\xbe\xab\xf2\x20\xa3\x22\x6d\
+\xa1\x7c\x21\x09\x2a\x4b\x28\xda\x44\xb9\x88\x52\x4c\xcc\x6a\x51\
+\xf9\xa4\x85\xf1\xa0\x16\x51\xe4\x2e\x10\x74\x51\x44\x8b\x16\x15\
+\x25\x81\xb5\x28\x04\xad\xc0\xe2\x61\x64\xf6\x97\xe0\x45\x10\xb4\
+\xa9\x27\x44\x45\xc4\x17\xa2\x12\x35\x0a\x2a\xff\x3c\xab\xc5\x99\
+\x5b\xd7\x79\x33\x73\xce\xdc\x6b\x6f\xee\x05\x3f\xbb\x39\xf3\x3b\
+\xbf\xf3\xfb\x9d\x33\xe7\x9c\xef\x9c\x99\x16\x19\xb6\x2f\x06\x76\
+\x00\xab\x81\xab\x81\x05\x0c\x17\xa7\x80\x19\x60\x1a\x78\x4c\xd2\
+\x11\x80\x16\x80\xed\x9b\x81\xbd\xc0\xd2\xc6\xc2\xab\xc7\x61\x60\
+\xb3\xa4\x0f\x5b\x59\xcf\x1f\x62\x74\x82\xef\x72\x18\xb8\xaa\x4d\
+\x78\x6c\x46\x2d\x78\x08\x31\x6f\xef\x10\x9e\xf9\x3c\xa7\xe7\x39\
+\x98\x54\xc6\x72\xd7\xab\x3b\x84\x09\xdb\xcb\x69\x49\x9d\x79\x0a\
+\xa8\x16\xb6\x67\x39\x33\x89\x55\x6d\x86\x6f\xb5\xa9\xc3\x82\x76\
+\xd3\x11\x0c\xca\xb9\x04\x9a\xe6\x5c\x02\xff\x07\xb6\xef\xb6\xbd\
+\xd7\xf6\xda\x98\xed\xd0\x25\x60\xfb\x11\xe0\x75\x60\x02\x38\x68\
+\x7b\xa7\xed\xd2\x95\x72\xa8\x12\xb0\x3d\x01\x3c\xdd\x53\xd4\x02\
+\x1e\x04\x5e\x2c\xab\x33\x34\x1b\x96\xed\x35\xc0\x2b\x64\x02\x33\
+\xc7\x16\xdb\x5f\x16\xd5\x1b\x8a\x11\xb0\x7d\x1d\xf0\x06\xb0\xb0\
+\xc2\x6c\x7d\x51\x61\xe3\x09\xd8\xbe\x0c\x78\x1b\x58\x1c\x31\x7d\
+\xa9\xa8\xb0\xd1\x04\x6c\x5f\x02\x1c\x24\xae\x86\x9f\x92\xf4\x6a\
+\xd1\x8d\xc6\x12\xb0\xbd\x18\x38\x00\xac\x88\x98\xee\x06\x1e\x2d\
+\xbb\xd9\x48\x02\xb6\x17\x02\x6f\x02\xd7\x46\x4c\xdf\x01\x26\x25\
+\xfd\x5d\x66\x30\xef\x09\xd8\x6e\x13\x7a\xf5\x96\x88\xe9\x67\xc0\
+\x5d\x92\x66\xab\x8c\x9a\x18\x81\x67\x80\x7b\x22\x36\x5f\x03\x1b\
+\x24\xfd\x1e\x73\x96\x94\x80\xed\x56\xd6\x73\x03\x61\x7b\x1b\xf0\
+\x70\xc4\xec\x47\x60\x5d\xf7\xd4\x21\x46\x65\x50\x59\xe0\x5b\x81\
+\x3f\x81\x19\xdb\xab\x92\x22\x2d\xf6\x35\x09\x3c\x11\x31\xfb\x15\
+\xb8\x55\xd2\xf7\xa9\x7e\x4b\x13\xc8\xf4\xc7\x14\x61\x6b\x5f\x04\
+\x5c\x09\xbc\x6f\xfb\xf2\x54\xe7\x3d\xbe\x36\x02\xbb\x22\x66\x27\
+\x80\x3b\x24\x7d\x51\xc7\x77\xd5\x08\x3c\x0f\x6c\xcc\x95\x2d\x05\
+\x3e\xb0\x7d\x69\x6a\x03\xb6\x6f\x00\x5e\x63\xee\x0b\x79\x2f\x7f\
+\x01\xf7\x4a\xfa\x38\xd5\x6f\x97\xc2\x04\xb2\x1e\x7b\xa0\xa4\xce\
+\x32\xc2\x48\x2c\x8b\x39\xb7\xbd\x12\xd8\x0f\x8c\x47\x4c\x1f\x92\
+\xb4\x2f\xe6\xaf\x88\xb2\x11\xb8\x28\x52\x6f\x05\x21\x89\x25\x65\
+\x06\xb6\x97\x13\x76\xd9\x98\xaf\xc7\x25\xbd\x10\xb1\x29\xa5\x2c\
+\x81\x3d\x84\x75\xb8\x8a\x2b\x80\x77\x6d\x5f\x90\xbf\x61\xfb\x42\
+\x42\xf0\xcb\x23\x3e\x76\x49\xda\x11\x8d\xb2\x82\xc2\x04\x24\x9d\
+\x22\xa8\xbf\x42\x09\xdb\xc3\x35\xc0\x01\xdb\xe7\x75\x0b\x6c\x8f\
+\x13\x1e\x9b\x95\x91\xba\x53\x04\xad\x3f\x10\xa5\x93\x58\xd2\x31\
+\x60\x2d\xf0\x4d\xc4\xc7\xf5\xc0\x7e\xdb\xe3\xb6\xc7\x08\x13\xf6\
+\xc6\x48\x9d\x69\x60\x42\xd2\xc0\x27\x80\x95\xfb\x80\xa4\x9f\x81\
+\x35\x80\x23\x7e\x6e\x02\xf6\x11\x96\xca\xfc\xca\x95\x67\x06\xb8\
+\x5d\xd2\xf1\xc4\x18\x2b\x89\xee\xae\x92\x4c\xd0\x2d\x3f\x45\x4c\
+\xd7\x03\x93\x11\x1b\x13\x36\xaa\x5f\xd2\xc2\x8b\x93\x24\x0f\x24\
+\x7d\x4b\x18\x89\xa3\x03\xb4\x75\x8c\x20\x11\x7e\x18\xc0\xc7\x1c\
+\x92\xf5\x8d\xa4\x43\xc0\x3a\xe0\xb7\x3e\xda\xf9\x03\xb8\x4d\xd2\
+\x57\x7d\xd4\xad\xa4\x96\x40\x93\xf4\x39\xb0\x21\x0b\x28\x95\x59\
+\x60\x93\xa4\x4f\xeb\xb4\x95\x4a\x6d\x85\x29\x69\x1a\xb8\x93\xa0\
+\x5d\x52\xb8\x5f\xd2\x5b\x75\xdb\x49\xa5\x2f\x89\x2c\xe9\x3d\x60\
+\x13\xa1\x77\xab\xd8\x26\xe9\xe5\x7e\xda\x48\xa5\x6f\x8d\x2f\x69\
+\x0a\xd8\x42\x10\x62\x45\x3c\x27\xe9\xc9\x7e\xfd\xa7\x32\xd0\x4b\
+\x8a\xa4\x3d\xc0\x7d\xcc\x9d\x13\x3b\x81\xad\x83\xf8\x4e\x65\xe0\
+\x93\x39\x49\xbb\x6d\x7f\x42\xd8\xc0\xce\x07\x3e\xca\xe6\xc9\xbc\
+\x70\x56\x8e\x16\x25\x7d\x07\x3c\x7b\x36\x7c\xd5\xa5\x4d\xf8\x02\
+\x3e\xaa\x9c\xec\x10\xb4\x49\xef\xf9\xcc\x58\xf6\x35\x70\x18\xc9\
+\xbf\xd5\xcd\x74\x08\xca\x30\x7f\xc0\x54\xf5\xfa\x37\x4c\x4c\x8f\
+\xfe\xaf\x06\xd9\xf9\xcb\xe6\xac\x60\x54\xe8\xfe\xec\x71\xe4\xdf\
+\x8f\x09\xd9\x48\x6c\xe7\xbf\xdf\x6d\xaa\xce\xea\x9b\xe0\x24\x67\
+\xfe\x6e\x73\x14\xe0\x1f\x0a\x43\x12\x6b\x4f\xfd\x3f\x13\x00\x00\
+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x5b\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
-\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
-\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x14\x1d\x00\xb0\
-\xd5\x35\xa3\x00\x00\x00\x2a\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
-\x06\xfe\x9f\x67\x60\x60\x42\x30\xa1\x1c\x08\x93\x81\x81\x09\xc1\
-\x64\x60\x60\x62\x60\x60\x34\x44\xe2\x20\x73\x19\x90\x8d\x40\x02\
-\x00\x64\x40\x09\x75\x86\xb3\xad\x9c\x00\x00\x00\x00\x49\x45\x4e\
-\x44\xae\x42\x60\x82\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x0d\x49\x44\x41\x54\x68\x81\xed\
+\xda\xb1\x6d\x02\x41\x10\x46\xe1\x77\xc7\xe2\x0a\x2c\x87\xd3\x00\
+\x38\x20\x27\x72\x17\x14\x83\x03\x37\xe3\x2e\x1c\x51\x02\x34\x30\
+\x21\xc2\x0d\x60\x90\x1c\xec\x9e\x0c\x27\x59\xf6\x09\x89\xff\x56\
+\x9a\x2f\x63\x45\x30\x0f\x0e\x92\x9d\x86\xc2\xdd\x1f\x81\x57\x60\
+\x09\xcc\x81\x29\xe3\xf2\x05\x6c\x81\x0d\xf0\x66\x66\x07\x80\x06\
+\xc0\xdd\x5f\x80\x77\xe0\x49\x36\xde\x30\x7b\x60\x65\x66\x1f\x4d\
+\xf9\xe4\x77\xd4\x33\x7c\x67\x0f\xcc\x5a\xf2\x63\x53\xdb\xf0\x90\
+\x67\x5e\x27\xf2\x33\xdf\x77\xbe\xf3\x30\xff\x35\xe9\xbd\x5e\x26\
+\xf2\x0f\xf6\xd2\xd9\xcc\xd2\x9d\x06\x1a\xc4\xdd\x4f\x5c\x47\x3c\
+\xb7\x8c\xef\xdf\x66\x88\x69\xab\x9e\xe0\x56\x11\xa0\x16\x01\x6a\
+\x11\xa0\x16\x01\x6a\x11\xa0\x16\x01\x6a\x11\xa0\x16\x01\x6a\x11\
+\xa0\x16\x01\x6a\x11\xa0\x16\x01\x6a\x11\xa0\x16\x01\x6a\x11\xa0\
+\x16\x01\x6a\x11\xa0\xd6\x92\x6f\xc0\x6b\x75\x4c\xe4\xeb\xfb\xc5\
+\xc5\xe1\xa4\xdc\x06\x8e\x51\xff\x9a\x75\x9b\xc8\xbb\x07\x8b\x3f\
+\xde\x38\x56\x9b\xfa\x57\x0d\xca\xd6\xc7\xaa\x1c\xd4\xa2\x5b\xf6\
+\x38\x34\xdd\x49\xf9\x26\xd6\xfc\xac\xdb\x3c\x88\x86\xfb\xcd\x91\
+\xeb\x75\x9b\x4f\x80\x6f\x56\x01\x36\x1e\x77\x0d\xa5\x42\x00\x00\
+\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x07\xdd\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -679,6 +868,32 @@ qt_resource_data = b"\
\x0d\xfe\x9f\x87\xb1\x18\x91\x05\x18\x0d\xe1\x42\x48\x2a\x0c\x19\
\x18\x18\x91\x05\x10\x2a\xd1\x00\x00\xca\xb5\x07\xd2\x76\xbb\xb2\
\xc5\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa6\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x14\x1d\x00\xb0\
+\xd5\x35\xa3\x00\x00\x00\x2a\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x06\xfe\x9f\x67\x60\x60\x42\x30\xa1\x1c\x08\x93\x81\x81\x09\xc1\
+\x64\x60\x60\x62\x60\x60\x34\x44\xe2\x20\x73\x19\x90\x8d\x40\x02\
+\x00\x64\x40\x09\x75\x86\xb3\xad\x9c\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa5\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\x9c\x53\x34\xfc\x5d\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x0b\x02\x04\x6d\
+\x98\x1b\x69\x00\x00\x00\x29\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18\x32\x32\x30\x20\x0b\x32\x1a\
+\x32\x30\x30\x42\x98\x10\x41\x46\x43\x14\x13\x50\xb5\xa3\x01\x00\
+\xd6\x10\x07\xd2\x2f\x48\xdf\x4a\x00\x00\x00\x00\x49\x45\x4e\x44\
+\xae\x42\x60\x82\
\x00\x00\x00\x9e\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
@@ -691,6 +906,375 @@ qt_resource_data = b"\
\x0d\xfe\x9f\x87\xb1\x18\x91\x05\x18\x0d\xe1\x42\x48\x2a\x0c\x19\
\x18\x18\x91\x05\x10\x2a\xd1\x00\x00\xca\xb5\x07\xd2\x76\xbb\xb2\
\xc5\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x01\x57\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x09\x49\x44\x41\x54\x68\x81\xed\
+\xda\xcd\x6d\xc2\x40\x14\x45\xe1\xf3\x8c\x49\x05\x51\x9a\x48\x36\
+\xec\x59\xd1\x05\xc5\x90\x45\x6a\xa3\x04\x52\x04\x88\x34\x60\x82\
+\x6e\x16\x33\xf9\xb1\xa5\x28\x44\x48\x5c\x5b\x7a\xdf\x8e\xc1\x8b\
+\x77\x8c\xcd\x66\x26\xa8\x24\xdd\x03\xcf\xc0\x12\x78\x02\xe6\x8c\
+\xcb\x09\xd8\x01\x5b\xe0\x25\x22\x8e\x5f\xdf\x48\x5a\x49\xda\x6b\
+\x3a\xf6\x92\x56\x00\xa1\x72\xe7\x5f\x81\x07\xc7\x6d\xbd\xc2\x01\
+\x78\x6c\x28\x8f\xcd\xd4\x86\x87\x32\xf3\xa6\xa5\x3c\xf3\x43\xe7\
+\x1b\x0f\x73\xa9\xd9\xe0\xf3\x32\x24\x75\xf4\x5f\xd8\x73\x44\xb4\
+\x37\x1c\xea\x62\x92\xde\xe9\x47\x9c\x1a\xc6\xf7\x6f\xf3\x1f\xf3\
+\xc6\x3d\xc1\xb5\x32\xc0\x2d\x03\xdc\x32\xc0\x2d\x03\xdc\x32\xc0\
+\x2d\x03\xdc\x32\xc0\x2d\x03\xdc\x32\xc0\x2d\x03\xdc\x32\xc0\x2d\
+\x03\xdc\x32\xc0\x2d\x03\xdc\x32\xc0\x2d\x03\xdc\x32\xc0\xad\xa1\
+\xec\x80\x4f\x55\xd7\x52\xb6\xef\x17\x3f\x16\x67\x75\x37\x70\x8c\
+\x86\xdb\xac\xbb\x96\x72\xf6\x60\xf1\xc7\x85\x63\xb5\x9d\xfe\x51\
+\x83\x7a\xea\x63\x5d\x17\xa6\xe2\x00\xac\x23\xe2\x18\x9f\x2b\xf5\
+\x97\xd8\xf0\x7d\xdc\xe6\xce\x34\xdc\x6f\x3a\xfa\xc7\x6d\xde\x00\
+\x3e\x00\x47\xd7\xea\xb1\xad\x69\xe1\xd6\x00\x00\x00\x00\x49\x45\
+\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x04\x12\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xc4\x49\x44\x41\x54\x68\x81\xed\
+\x9a\x5f\x88\x94\x55\x18\xc6\x7f\x33\x3b\x1a\x0b\x19\x15\x66\x17\
+\xca\x03\x49\x50\x4d\x09\x4a\x37\x51\x5e\x44\x29\x26\x66\x05\x5b\
+\xb9\xd2\x82\xb1\x50\x17\x91\x24\x74\x11\x08\x7a\xa1\x44\x17\x5d\
+\x54\x94\x04\xd6\x45\xe1\xa2\x15\x4c\xb1\x18\x99\xfd\x25\xd8\x08\
+\x82\x6e\x6a\x5d\xa4\x22\xe2\x81\xa8\x96\xd5\x28\xe8\x9f\xae\xd5\
+\xc5\xf9\xb6\xc6\xd9\xf9\xbe\x73\x66\xc6\x76\x66\xc0\xdf\xdd\x9c\
+\xef\x3d\xef\x79\x9f\x73\xe6\x9c\xf3\x7e\xdf\x39\x25\x32\x46\x6a\
+\x53\x4b\x81\xdd\xc0\x5a\xe0\x3a\x60\x11\xbd\xc5\x69\x60\x12\x98\
+\x00\xf6\x8c\x0d\x55\x67\x00\x4a\x00\x23\xb5\xa9\x5b\x80\x43\xc0\
+\xb2\xae\x85\xd7\x1a\xd3\xc0\xd6\xb1\xa1\xea\x07\xa5\xac\xe7\x8f\
+\xd1\x3f\xc1\xcf\x31\x0d\x5c\x5b\x26\xfc\x6d\xfa\x2d\x78\x08\x31\
+\xef\xaa\x10\xfe\xf3\x8d\x9c\x59\xe0\x60\x52\x19\x68\xf8\xbd\xb6\
+\x42\x98\xb0\xf5\x9c\x19\x1b\xaa\x56\x16\x28\xa0\x96\x18\xa9\x4d\
+\xcd\x72\xb6\x88\x55\x65\x7a\x6f\xb5\x69\x85\x45\xe5\x6e\x47\xd0\
+\x29\xe7\x05\x74\x9b\xf3\x02\xfe\x0f\x6c\xdf\x63\xfb\x90\xed\xf5\
+\x31\xdb\x9e\x13\x60\xfb\x11\xe0\x35\x60\x18\x38\x6a\x7b\x9f\xed\
+\xdc\x95\xb2\xa7\x04\xd8\x1e\x06\x9e\xaa\x2b\x2a\x01\x0f\x01\x2f\
+\xe4\xd5\xe9\x19\x01\xb6\xd7\x01\x2f\x93\x25\x98\x0d\x6c\xb3\xfd\
+\x68\xb3\x7a\x3d\x21\xc0\xf6\xf5\xc0\xeb\xc0\xe2\x02\xb3\x8d\xcd\
+\x0a\xbb\x2e\xc0\xf6\x95\xc0\x5b\xc0\x92\x88\xe9\x8b\xcd\x0a\xbb\
+\x2a\xc0\xf6\xe5\xc0\x51\xe2\xd9\xf0\x93\x92\x5e\x69\xf6\xa0\x6b\
+\x02\x6c\x2f\x01\x8e\x00\x2b\x23\xa6\x07\x80\xc7\xf2\x1e\x76\x45\
+\x80\xed\xc5\xc0\x1b\xc0\x9a\x88\xe9\xdb\xc0\xa8\xa4\xbf\xf3\x0c\
+\x16\x5c\x80\xed\x32\xa1\x57\x6f\x8d\x98\x7e\x0a\xdc\x2d\x69\xb6\
+\xc8\xa8\x1b\x23\xf0\x34\x70\x6f\xc4\xe6\x4b\x60\x93\xa4\x5f\x63\
+\xce\x92\x04\xd8\x2e\x65\x3d\xd7\x11\xb6\x77\x02\xdb\x23\x66\xdf\
+\x03\x1b\x24\xcd\xa4\xf8\x2c\x0c\x2a\x0b\x7c\x07\xf0\x3b\x30\x69\
+\x7b\x55\x52\xa4\xcd\x7d\x8d\x02\x8f\x47\xcc\x7e\x06\x6e\x93\xf4\
+\x6d\xaa\xdf\x5c\x01\x59\xfe\x31\x4e\xd8\xda\x2f\x00\xae\x01\xde\
+\xb3\x7d\x55\xaa\xf3\x3a\x5f\x9b\x81\xfd\x11\xb3\x3f\x81\x3b\x25\
+\x7d\xde\x8a\xef\xa2\x11\x78\x0e\xd8\xdc\x50\xb6\x0c\x78\xdf\xf6\
+\x15\xa9\x0d\xd8\xbe\x11\x78\x95\xf9\x2f\xe4\xf5\xfc\x05\xdc\x27\
+\xe9\xa3\x54\xbf\x73\x34\x15\x90\xf5\xd8\x83\x39\x75\x96\x13\x46\
+\x62\x79\xcc\xb9\xed\x2a\x70\x18\x18\x8c\x98\x3e\x2c\xa9\x16\xf3\
+\xd7\x8c\xbc\x11\xb8\x34\x52\x6f\x25\x41\xc4\x65\x79\x06\xb6\x57\
+\x10\x76\xd9\x98\xaf\xbd\x92\x9e\x8f\xd8\xe4\x92\x27\xe0\x20\x61\
+\x1d\x2e\xe2\x6a\xe0\x1d\xdb\x17\x37\x3e\xb0\x7d\x09\x21\xf8\x15\
+\x11\x1f\xfb\x25\xed\x8e\x46\x59\x40\x53\x01\x92\x4e\x13\xb2\xbf\
+\x2f\x22\xf5\x57\x03\x47\x6c\x5f\x38\x57\x60\x7b\x90\xf0\xb7\xa9\
+\x46\xea\x8e\x13\x72\xfd\x8e\xc8\x9d\xc4\x92\x4e\x02\xeb\x81\xaf\
+\x22\x3e\x6e\x00\x0e\xdb\x1e\xb4\x3d\x40\x98\xb0\x37\x45\xea\x4c\
+\x00\xc3\x92\x3a\xfe\x02\x58\xb8\x0f\x48\xfa\x11\x58\x07\x38\xe2\
+\xe7\x66\xa0\x46\x58\x2a\x1b\x57\xae\x46\x26\x81\x3b\x24\xfd\x91\
+\x18\x63\x21\xd1\xdd\x55\x92\x09\x79\xcb\x0f\x11\xd3\x8d\xc0\x68\
+\xc4\xc6\x84\x8d\xea\xa7\xb4\xf0\xe2\x24\xa5\x07\x92\xbe\x26\x8c\
+\xc4\x89\x0e\xda\x3a\x49\x48\x11\xbe\xeb\xc0\xc7\x3c\x92\xf3\x1b\
+\x49\xc7\x80\x0d\xc0\x2f\x6d\xb4\xf3\x1b\x70\xbb\xa4\xe3\x6d\xd4\
+\x2d\xa4\xa5\x04\x4d\xd2\x67\xc0\xa6\x2c\xa0\x54\x66\x81\x2d\x92\
+\x3e\x69\xa5\xad\x54\x5a\xce\x30\x25\x4d\x00\x77\x11\x72\x97\x14\
+\x1e\x90\xf4\x66\xab\xed\xa4\xd2\x56\x8a\x2c\xe9\x5d\x60\x0b\xa1\
+\x77\x8b\xd8\x29\xe9\xa5\x76\xda\x48\xa5\xed\x1c\x5f\xd2\x38\xb0\
+\x8d\x90\x88\x35\xe3\x59\x49\x4f\xb4\xeb\x3f\x95\x8e\x5e\x52\x24\
+\x1d\x04\xee\x67\xfe\x9c\xd8\x07\xec\xe8\xc4\x77\x2a\x1d\x1f\x25\
+\x49\x3a\x60\xfb\x63\xc2\x06\x76\x11\xf0\x61\x36\x4f\x16\x84\x73\
+\x72\x16\x26\xe9\x1b\xe0\x99\x73\xe1\xab\x55\xca\x84\x13\xf0\x7e\
+\xe5\x54\x85\x90\x9b\xd4\x7f\x9f\x19\xc8\x4e\x03\x7b\x91\xc6\xb7\
+\xba\xc9\x0a\x21\x33\x6c\xfc\xc0\x54\xf4\xfa\xd7\x4b\x4c\x94\x81\
+\x3d\x84\x63\xfb\x7e\x63\x1a\xd8\x5b\xce\x6e\x7d\x6c\xa5\xbf\x44\
+\xcc\x5d\xf6\x98\xf9\xf7\x30\x21\xbb\xf4\xb1\x8b\xff\xae\xdb\x14\
+\x7d\xab\xef\x06\xa7\x38\xfb\xba\xcd\x09\x80\x7f\x00\xc4\x1e\x10\
+\x29\x33\x5b\x85\xf7\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\
+\x82\
+\x00\x00\x01\xe1\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x93\x49\x44\x41\x54\x68\x81\xed\
+\x9a\x3b\x4e\xc3\x40\x10\x86\xbf\x71\x1c\x2a\xe8\x10\xe5\x36\x94\
+\xd0\xa4\xa1\x8a\x28\x22\x0a\x0a\x44\x9f\x9e\x0b\x70\x80\x50\x70\
+\x01\x2e\xc0\x15\x68\x80\x13\xa0\x1c\x21\x50\x91\x66\xbb\x44\xa1\
+\x42\x34\x79\x68\x28\x6c\x1e\xb1\xfc\x48\x08\xc9\xda\xd2\x7e\x9d\
+\x77\x5c\xfc\x9f\xb3\x1e\x39\xda\x11\x62\x54\x75\x17\xb8\x02\x9a\
+\xc0\x21\x50\xa7\x5c\x4c\x80\x1e\xd0\x05\xae\x45\x64\xf4\x5d\x51\
+\xd5\x96\xaa\x0e\xb4\x3a\x0c\x54\xb5\x05\x20\x1a\x3d\xf9\x67\x60\
+\xcf\xc5\x63\x5d\x81\x21\x70\x10\x10\x6d\x9b\xaa\x85\x87\x28\x73\
+\x27\x24\xda\xf3\x49\x66\x1b\x0e\xb3\x28\xb5\xc4\x75\x53\x54\x75\
+\xcc\xfc\x0b\x3b\x13\x91\x70\x83\xa1\x16\x46\x55\xa7\xcc\x4b\x4c\
+\x02\xca\xd7\x6d\x96\xa1\x1e\xb8\x4e\xb0\x2a\x5e\xc0\x35\x5e\xc0\
+\x35\x5e\xc0\x35\x5e\xc0\x35\x5e\xc0\x35\x5e\xc0\x35\x85\x9f\xcd\
+\xd6\xda\x13\xe0\x08\xd8\x5e\x7f\x9c\x39\xa6\xc0\x0b\xf0\x60\x8c\
+\xf9\xc8\xba\x49\x54\x55\x13\x6b\x33\x11\x09\xad\xb5\x21\x70\x07\
+\x9c\xaf\x31\xe4\x22\xf4\x81\x53\x63\xcc\x6b\xca\xff\x81\xdc\x2d\
+\x74\x89\xfb\xf0\x00\xfb\xc0\x6d\x56\x31\x4f\xe0\xec\xff\xb3\xfc\
+\x99\x63\x6b\xed\x4e\x5a\xa1\xf2\x2f\x71\x9e\xc0\xe3\xc6\x52\x14\
+\xf3\x64\x8c\x79\x4f\x2b\xe4\x09\xdc\x00\xf7\xeb\xc9\xb3\x14\x7d\
+\xe0\x22\xab\x98\xd9\x85\xbe\x2e\xca\xd4\x46\xd3\xba\x50\xa1\x40\
+\x99\x58\xb6\x8d\x56\x02\x2f\xe0\x1a\x2f\xe0\x1a\x2f\xe0\x1a\x2f\
+\xe0\x1a\x2f\xe0\x1a\x2f\xe0\x9a\x80\xe8\x04\xbc\xaa\x8c\x43\xa2\
+\xe3\xfb\xc6\xaf\xc5\x5a\xfc\xd9\x5a\x46\x92\xc7\xac\xbd\x90\x68\
+\xf6\xa0\x51\x70\x63\x59\xe9\x56\x7f\xd4\x20\x9e\xfa\x68\xc7\x0b\
+\x55\x61\x08\xb4\x45\x64\x24\x5f\x2b\xf1\x2f\xd1\xe1\x67\xdc\x66\
+\xcb\x51\xb8\x2c\xc6\xcc\x8f\xdb\xbc\x01\x7c\x02\x6d\x77\x23\xb3\
+\xd4\x95\x53\x76\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\
+\x00\x00\x01\x76\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x28\x49\x44\x41\x54\x68\x81\xed\
+\xda\xb1\x4a\xc3\x50\x14\x87\xf1\x2f\x37\xb7\xe0\xae\xf8\x00\x82\
+\x53\x75\xe8\xde\xc9\x6c\x79\x80\x40\x1f\x46\x87\xfa\x22\x6e\x42\
+\xdc\xb3\xc5\xa9\x2f\x20\xb4\x5d\x3a\x74\x0f\x7d\x82\x6a\xc1\xe1\
+\xa6\x50\xb3\x68\x10\xfa\xcf\x85\xf3\xdb\x52\x3a\x9c\xaf\xdc\x66\
+\x39\x37\xa1\x95\xe5\xc5\x15\xf0\x04\x4c\x81\x3b\x60\xc4\xb0\x7c\
+\x02\x4b\x60\x01\xcc\xeb\xaa\xdc\x01\x24\x00\x59\x5e\x3c\x00\xaf\
+\xc0\xb5\x6c\xbc\x7e\x1a\x60\x56\x57\xe5\x7b\xd2\xfe\xf2\x2b\xe2\
+\x19\xfe\xa8\x01\xc6\x8e\x70\x6c\x62\x1b\x1e\xc2\xcc\x8f\x9e\x70\
+\xe6\xbb\x0e\x67\x1e\xe6\xaf\xd2\xce\xf3\xd4\x13\xfe\xb0\xa7\x0e\
+\x75\x55\xfa\x33\x0d\xd4\x4b\x96\x17\x5f\xfc\x8c\xb8\x77\x0c\xef\
+\x6d\xd3\xc7\xc8\xa9\x27\xf8\x2f\x0b\x50\xb3\x00\x35\x0b\x50\xb3\
+\x00\x35\x0b\x50\xb3\x00\x35\x0b\x50\xb3\x00\x35\x0b\x50\xb3\x00\
+\x35\x0b\x50\xb3\x00\x35\x0b\x50\xb3\x00\x35\x0b\x50\xb3\x00\x35\
+\x0b\x50\x73\x84\x0d\x78\xac\xf6\x9e\xb0\xbe\x9f\x9c\x7c\x98\xb6\
+\xdb\xc0\x21\xea\xae\x59\x97\x9e\x70\xf7\x60\xf2\xcb\x17\x87\x6a\
+\xe1\x80\x39\x61\x6d\x1f\x9b\x06\x78\x76\xed\xad\x8f\x19\x71\x45\
+\x1c\x2f\x7b\xec\x52\x80\xed\x66\xb5\xbd\xb9\x1d\xbf\x00\x17\x84\
+\xc5\xf7\x25\xc3\x3b\x46\x7b\xe0\x03\x78\x03\x8a\xba\x2a\xd7\x00\
+\xdf\xa4\xb5\x36\xa2\xca\x99\x74\x47\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa0\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x14\x1f\x0d\xfc\
+\x52\x2b\x9c\x00\x00\x00\x24\x49\x44\x41\x54\x08\xd7\x63\x60\x40\
+\x05\x73\x3e\xc0\x58\x4c\xc8\x5c\x26\x64\x59\x26\x64\xc5\x70\x4e\
+\x8a\x00\x9c\x93\x22\x80\x61\x1a\x0a\x00\x00\x29\x95\x08\xaf\x88\
+\xac\xba\x34\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x05\x7e\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x01\x00\x00\x00\x01\x08\x06\x00\x00\x00\x1f\x15\xc4\x89\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x05\x17\x69\x54\x58\x74\x58\x4d\x4c\
+\x3a\x63\x6f\x6d\x2e\x61\x64\x6f\x62\x65\x2e\x78\x6d\x70\x00\x00\
+\x00\x00\x00\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\x20\x62\x65\x67\
+\x69\x6e\x3d\x22\xef\xbb\xbf\x22\x20\x69\x64\x3d\x22\x57\x35\x4d\
+\x30\x4d\x70\x43\x65\x68\x69\x48\x7a\x72\x65\x53\x7a\x4e\x54\x63\
+\x7a\x6b\x63\x39\x64\x22\x3f\x3e\x20\x3c\x78\x3a\x78\x6d\x70\x6d\
+\x65\x74\x61\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x3d\x22\x61\x64\x6f\
+\x62\x65\x3a\x6e\x73\x3a\x6d\x65\x74\x61\x2f\x22\x20\x78\x3a\x78\
+\x6d\x70\x74\x6b\x3d\x22\x41\x64\x6f\x62\x65\x20\x58\x4d\x50\x20\
+\x43\x6f\x72\x65\x20\x37\x2e\x31\x2d\x63\x30\x30\x30\x20\x37\x39\
+\x2e\x37\x61\x37\x61\x32\x33\x36\x2c\x20\x32\x30\x32\x31\x2f\x30\
+\x38\x2f\x31\x32\x2d\x30\x30\x3a\x32\x35\x3a\x32\x30\x20\x20\x20\
+\x20\x20\x20\x20\x20\x22\x3e\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\
+\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\x3e\x20\x3c\x72\x64\x66\x3a\x44\
+\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x20\x72\x64\x66\x3a\x61\
+\x62\x6f\x75\x74\x3d\x22\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6d\
+\x70\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\
+\x62\x65\x2e\x63\x6f\x6d\x2f\x78\x61\x70\x2f\x31\x2e\x30\x2f\x22\
+\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\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6d\x70\x4d\x4d\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\x61\
+\x70\x2f\x31\x2e\x30\x2f\x6d\x6d\x2f\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x73\x74\x45\x76\x74\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\
+\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x78\x61\x70\x2f\
+\x31\x2e\x30\x2f\x73\x54\x79\x70\x65\x2f\x52\x65\x73\x6f\x75\x72\
+\x63\x65\x45\x76\x65\x6e\x74\x23\x22\x20\x78\x6d\x6c\x6e\x73\x3a\
+\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\x65\x2e\x63\x6f\x6d\x2f\x70\
+\x68\x6f\x74\x6f\x73\x68\x6f\x70\x2f\x31\x2e\x30\x2f\x22\x20\x78\
+\x6d\x70\x3a\x43\x72\x65\x61\x74\x6f\x72\x54\x6f\x6f\x6c\x3d\x22\
+\x41\x64\x6f\x62\x65\x20\x50\x68\x6f\x74\x6f\x73\x68\x6f\x70\x20\
+\x32\x32\x2e\x35\x20\x28\x57\x69\x6e\x64\x6f\x77\x73\x29\x22\x20\
+\x78\x6d\x70\x3a\x43\x72\x65\x61\x74\x65\x44\x61\x74\x65\x3d\x22\
+\x32\x30\x32\x31\x2d\x31\x31\x2d\x31\x30\x54\x31\x37\x3a\x33\x39\
+\x3a\x30\x32\x2b\x30\x31\x3a\x30\x30\x22\x20\x78\x6d\x70\x3a\x4d\
+\x65\x74\x61\x64\x61\x74\x61\x44\x61\x74\x65\x3d\x22\x32\x30\x32\
+\x31\x2d\x31\x31\x2d\x31\x30\x54\x31\x37\x3a\x33\x39\x3a\x30\x32\
+\x2b\x30\x31\x3a\x30\x30\x22\x20\x78\x6d\x70\x3a\x4d\x6f\x64\x69\
+\x66\x79\x44\x61\x74\x65\x3d\x22\x32\x30\x32\x31\x2d\x31\x31\x2d\
+\x31\x30\x54\x31\x37\x3a\x33\x39\x3a\x30\x32\x2b\x30\x31\x3a\x30\
+\x30\x22\x20\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3d\x22\x69\x6d\
+\x61\x67\x65\x2f\x70\x6e\x67\x22\x20\x78\x6d\x70\x4d\x4d\x3a\x49\
+\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\x70\x2e\x69\
+\x69\x64\x3a\x66\x31\x37\x65\x62\x62\x32\x33\x2d\x65\x36\x32\x61\
+\x2d\x33\x39\x34\x36\x2d\x61\x39\x37\x35\x2d\x64\x34\x66\x36\x61\
+\x62\x34\x34\x64\x34\x30\x39\x22\x20\x78\x6d\x70\x4d\x4d\x3a\x44\
+\x6f\x63\x75\x6d\x65\x6e\x74\x49\x44\x3d\x22\x78\x6d\x70\x2e\x64\
+\x69\x64\x3a\x66\x31\x37\x65\x62\x62\x32\x33\x2d\x65\x36\x32\x61\
+\x2d\x33\x39\x34\x36\x2d\x61\x39\x37\x35\x2d\x64\x34\x66\x36\x61\
+\x62\x34\x34\x64\x34\x30\x39\x22\x20\x78\x6d\x70\x4d\x4d\x3a\x4f\
+\x72\x69\x67\x69\x6e\x61\x6c\x44\x6f\x63\x75\x6d\x65\x6e\x74\x49\
+\x44\x3d\x22\x78\x6d\x70\x2e\x64\x69\x64\x3a\x66\x31\x37\x65\x62\
+\x62\x32\x33\x2d\x65\x36\x32\x61\x2d\x33\x39\x34\x36\x2d\x61\x39\
+\x37\x35\x2d\x64\x34\x66\x36\x61\x62\x34\x34\x64\x34\x30\x39\x22\
+\x20\x70\x68\x6f\x74\x6f\x73\x68\x6f\x70\x3a\x43\x6f\x6c\x6f\x72\
+\x4d\x6f\x64\x65\x3d\x22\x33\x22\x20\x70\x68\x6f\x74\x6f\x73\x68\
+\x6f\x70\x3a\x49\x43\x43\x50\x72\x6f\x66\x69\x6c\x65\x3d\x22\x73\
+\x52\x47\x42\x20\x49\x45\x43\x36\x31\x39\x36\x36\x2d\x32\x2e\x31\
+\x22\x3e\x20\x3c\x78\x6d\x70\x4d\x4d\x3a\x48\x69\x73\x74\x6f\x72\
+\x79\x3e\x20\x3c\x72\x64\x66\x3a\x53\x65\x71\x3e\x20\x3c\x72\x64\
+\x66\x3a\x6c\x69\x20\x73\x74\x45\x76\x74\x3a\x61\x63\x74\x69\x6f\
+\x6e\x3d\x22\x63\x72\x65\x61\x74\x65\x64\x22\x20\x73\x74\x45\x76\
+\x74\x3a\x69\x6e\x73\x74\x61\x6e\x63\x65\x49\x44\x3d\x22\x78\x6d\
+\x70\x2e\x69\x69\x64\x3a\x66\x31\x37\x65\x62\x62\x32\x33\x2d\x65\
+\x36\x32\x61\x2d\x33\x39\x34\x36\x2d\x61\x39\x37\x35\x2d\x64\x34\
+\x66\x36\x61\x62\x34\x34\x64\x34\x30\x39\x22\x20\x73\x74\x45\x76\
+\x74\x3a\x77\x68\x65\x6e\x3d\x22\x32\x30\x32\x31\x2d\x31\x31\x2d\
+\x31\x30\x54\x31\x37\x3a\x33\x39\x3a\x30\x32\x2b\x30\x31\x3a\x30\
+\x30\x22\x20\x73\x74\x45\x76\x74\x3a\x73\x6f\x66\x74\x77\x61\x72\
+\x65\x41\x67\x65\x6e\x74\x3d\x22\x41\x64\x6f\x62\x65\x20\x50\x68\
+\x6f\x74\x6f\x73\x68\x6f\x70\x20\x32\x32\x2e\x35\x20\x28\x57\x69\
+\x6e\x64\x6f\x77\x73\x29\x22\x2f\x3e\x20\x3c\x2f\x72\x64\x66\x3a\
+\x53\x65\x71\x3e\x20\x3c\x2f\x78\x6d\x70\x4d\x4d\x3a\x48\x69\x73\
+\x74\x6f\x72\x79\x3e\x20\x3c\x2f\x72\x64\x66\x3a\x44\x65\x73\x63\
+\x72\x69\x70\x74\x69\x6f\x6e\x3e\x20\x3c\x2f\x72\x64\x66\x3a\x52\
+\x44\x46\x3e\x20\x3c\x2f\x78\x3a\x78\x6d\x70\x6d\x65\x74\x61\x3e\
+\x20\x3c\x3f\x78\x70\x61\x63\x6b\x65\x74\x20\x65\x6e\x64\x3d\x22\
+\x72\x22\x3f\x3e\x07\x62\x0c\x81\x00\x00\x00\x0d\x49\x44\x41\x54\
+\x08\x1d\x63\xf8\xff\xff\x3f\x03\x00\x08\xfc\x02\xfe\xe6\x0c\xff\
+\xab\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\x9f\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x08\x14\x1f\xf9\
+\x23\xd9\x0b\x00\x00\x00\x23\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x0d\xe6\x7c\x80\xb1\x18\x91\x05\x52\x04\xe0\x42\x08\x15\x29\x02\
+\x0c\x0c\x8c\xc8\x02\x08\x95\x68\x00\x00\xac\xac\x07\x90\x4e\x65\
+\x34\xac\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa0\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x14\x1c\x1f\x24\
+\xc6\x09\x17\x00\x00\x00\x24\x49\x44\x41\x54\x08\xd7\x63\x60\x40\
+\x05\xff\xcf\xc3\x58\x4c\xc8\x5c\x26\x64\x59\x26\x64\xc5\x70\x0e\
+\xa3\x21\x9c\xc3\x68\x88\x61\x1a\x0a\x00\x00\x6d\x84\x09\x75\x37\
+\x9e\xd9\x23\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa6\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x14\x1d\x00\xb0\
+\xd5\x35\xa3\x00\x00\x00\x2a\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x06\xfe\x9f\x67\x60\x60\x42\x30\xa1\x1c\x08\x93\x81\x81\x09\xc1\
+\x64\x60\x60\x62\x60\x60\x34\x44\xe2\x20\x73\x19\x90\x8d\x40\x02\
+\x00\x64\x40\x09\x75\x86\xb3\xad\x9c\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x00\xa6\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce\x7c\x4e\
+\x00\x00\x00\x01\x73\x52\x47\x42\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02\x62\x4b\x47\x44\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09\x70\
+\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xdc\x08\x17\x08\x15\x3b\xdc\
+\x3b\x0c\x9b\x00\x00\x00\x2a\x49\x44\x41\x54\x08\xd7\x63\x60\xc0\
+\x00\x8c\x0c\x0c\x73\x3e\x20\x0b\xa4\x08\x30\x32\x30\x20\x0b\xa6\
+\x08\x30\x30\x30\x42\x98\x10\xc1\x14\x01\x14\x13\x50\xb5\xa3\x01\
+\x00\xc6\xb9\x07\x90\x5d\x66\x1f\x83\x00\x00\x00\x00\x49\x45\x4e\
+\x44\xae\x42\x60\x82\
+\x00\x00\x03\xff\
+\x89\
+\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
+\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
+\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xb1\x49\x44\x41\x54\x68\x81\xed\
+\x9a\x4f\x68\x1e\x45\x18\xc6\x7f\x9b\x26\x85\x82\x15\x15\xab\x42\
+\xcb\x03\x06\x05\xa9\x0a\x8a\xb7\x52\x3c\xd4\x96\xaa\xb5\xe0\x41\
+\xad\xc5\x43\x25\xa0\x07\x51\xcc\x4d\x28\xb4\x07\x45\x3c\x78\xb0\
+\xa0\x52\x50\x0f\x8a\x50\xf5\x50\xa5\x28\xc6\xbf\xa8\x34\x20\x08\
+\x9e\x4c\x41\xc5\x83\x3c\x20\xd2\x90\x2a\x0a\xfe\x69\x92\x3a\x1e\
+\x66\x8d\x5f\xd6\xdd\x9d\xfd\xf6\x8b\xd9\x2f\xd0\xdf\xed\x9b\x79\
+\xe7\x9d\xe7\x9d\xd9\x99\x79\x67\xbf\xcd\xc8\x09\x21\x5c\x0a\x1c\
+\x06\xb6\x03\xd7\x01\x63\x0c\x17\x0b\xc0\x0c\x30\x0d\x3c\x9e\x65\
+\xd9\xdc\x52\x4d\x08\x61\x47\x08\xe1\x74\x58\x3b\x9c\x0e\x21\xec\
+\x00\xc8\x42\x1c\xf9\x53\xc0\x65\x5d\x0c\xeb\x00\xcc\x02\xd7\x8e\
+\x10\x1f\x9b\xb5\x26\x1e\xa2\xe6\x43\xa3\xc4\x67\xbe\xc8\xb9\x55\
+\x16\xd3\x94\x75\x85\xdf\xdb\xb3\x10\xc2\x3c\xcb\x17\xec\xb9\x2c\
+\xcb\x46\x57\x51\x54\x63\x42\x08\x8b\x2c\x0f\x62\x61\x84\xe1\xdb\
+\x6d\xfa\x61\x6c\xa4\x6b\x05\x83\x72\x3e\x80\xae\x39\x1f\xc0\xff\
+\x81\xed\xbb\x6d\xbf\x66\x7b\x57\xca\x36\x0b\x21\x84\x42\x59\xa7\
+\xdb\xa8\xed\x47\x81\x23\xf9\xcf\x00\x1c\x05\x26\x25\x2d\x94\x6c\
+\xa3\xc3\x35\x03\xb6\xef\x05\x9e\xe9\x29\xca\x80\x87\x80\x17\xab\
+\xda\x0c\xcd\x81\x65\x7b\x27\xf0\x0a\x51\x74\x91\x03\xb6\xbf\x2a\
+\x6b\x37\x14\x33\x60\xfb\x26\xe0\x4d\x60\x7d\x8d\xd9\x6d\x65\x85\
+\x9d\x07\x60\xfb\x2a\xe0\x5d\x60\x63\xc2\xf4\xa5\xb2\xc2\x4e\x03\
+\xb0\x7d\x39\xf0\x3e\xe9\x6c\xf8\x69\x49\xaf\x97\x55\x74\x16\x80\
+\xed\x8d\xc0\x14\x30\x9e\x30\x7d\x15\x78\xac\xaa\xb2\x93\x00\x6c\
+\xaf\x07\xde\x02\x6e\x4c\x98\xbe\x07\x4c\x48\x2a\x6e\xf5\x4b\xac\
+\x7a\x00\xb6\x47\x88\xa3\x7a\x4b\xc2\xf4\x0b\xe0\x2e\x49\x8b\x75\
+\x46\x5d\xcc\xc0\x11\xe0\x9e\x84\xcd\xb7\xc0\x1e\x49\xbf\xa5\x9c\
+\x35\x0a\xc0\x76\x96\x8f\xdc\x40\xd8\x3e\x08\x3c\x92\x30\xfb\x11\
+\xd8\x2d\x69\x2e\x61\x07\x24\x02\xc8\x85\x4f\x02\x7f\x00\x33\xb6\
+\xaf\x6f\xa4\xb4\xdc\xd7\x04\xf0\x64\xc2\xec\x17\xe0\x56\x49\xdf\
+\x37\xf5\x5b\x99\x0b\xd9\x1e\x03\x8e\x03\x7b\x7b\xea\x66\x81\x9b\
+\x25\x7d\xd3\xb4\x03\x00\xdb\x7b\x89\x8b\xb6\x78\xa7\xed\xe5\x2c\
+\x71\xe4\x3f\xab\x32\xe8\x37\x17\x7a\x8e\xe5\xe2\x21\xee\xd7\x1f\
+\xdb\xbe\xb2\x56\x71\x0f\xb6\xb7\x01\x6f\x14\x3b\x2e\xf0\x17\x70\
+\x5f\x9d\xf8\x2a\x4a\x03\xc8\x47\xec\xc1\x8a\x36\x9b\x81\x8f\x6c\
+\x6f\x4e\x39\xb7\xbd\x15\x78\x1b\xd8\x90\x30\x7d\x58\xd2\xf1\x94\
+\xbf\x32\xaa\x66\xe0\x92\x44\xbb\x71\x62\x10\x9b\xaa\x0c\x6c\x6f\
+\x21\x9e\xb2\x29\x5f\x4f\x48\x3a\x9a\xb0\xa9\xa4\x2a\x80\x63\xc4\
+\x7d\xb8\x8e\x6b\x80\x0f\x6c\x5f\x54\xac\xb0\x7d\x31\x51\xfc\x96\
+\x84\x8f\x17\x24\x1d\x4e\xaa\xac\xa1\x34\x00\x49\x0b\xc4\xec\xaf\
+\x34\x85\xed\xe1\x06\x60\xca\xf6\x05\xff\x14\xd8\xde\x40\x7c\x6c\
+\xb6\x26\xda\x9e\x20\xe6\xfa\x03\x51\x7b\x23\xcb\x93\xad\x93\xc0\
+\xd5\x09\x3f\x9f\x02\xb7\x03\xf3\xc4\xdd\xa6\xb8\xf8\x8b\x4c\x03\
+\xbb\x24\xfd\xd9\x8f\xd8\xb2\x5d\x28\x79\xa5\xb4\x2d\x62\x10\x4a\
+\xf8\x9f\x22\x1e\x42\x13\x09\xbb\x19\xe2\x56\xfc\x73\x23\xd5\x3d\
+\xb4\x0a\x00\x96\x72\xf6\x93\xc0\x15\xfd\x76\x5a\xc0\xc0\x36\x49\
+\x3f\xb4\x69\xdc\xfa\x4e\x2c\xe9\x3b\x60\x27\x70\xa6\x4d\xc7\x39\
+\x3f\x11\x0f\xaa\x56\xe2\xab\x68\x9c\xdf\x48\x3a\x05\xec\x06\x7e\
+\x6d\xd1\xcf\xef\xc0\x1d\x92\xbe\x6e\xd1\xb6\x96\xbe\x12\x34\x49\
+\x5f\x02\x7b\x72\x41\x4d\x59\x04\xf6\x49\xfa\xbc\x9f\xbe\x9a\xd2\
+\x77\x86\x29\x69\x1a\xb8\x93\x98\xbb\x34\xe1\x01\x49\xef\xf4\xdb\
+\x4f\x53\x5a\xa5\xc8\x92\x3e\x04\xf6\x11\x47\xb7\x8e\x83\x92\x5e\
+\x6e\xd3\x47\x53\x5a\xe7\xf8\x92\x4e\x00\x07\x88\x89\x58\x19\xcf\
+\x4a\x7a\xaa\xad\xff\xa6\x0c\x74\x49\x91\x74\x0c\xb8\x9f\xff\xae\
+\x89\xe7\x81\xc9\x41\x7c\x37\x65\x45\xde\x8d\xda\x1e\x27\x9e\xbe\
+\x17\x02\x9f\xe4\xeb\x64\xc5\x69\x7d\x90\x0d\x0b\x55\x07\xd9\x42\
+\x37\x72\x56\x84\xf9\x51\x62\x6e\xd2\xfb\x7e\x66\x5d\x1e\xe9\x30\
+\x52\xbc\xd5\xcd\x8c\x12\x33\xc3\xe2\x0b\xa6\xba\xeb\xdf\x30\x31\
+\xbd\xf6\x3f\x35\xc8\xbf\xfa\xd8\x9f\x17\xac\x15\x66\x81\xfd\x59\
+\x96\xcd\x2d\xfd\x99\x90\xcf\xc4\x21\xfe\xfd\xdc\xa6\xee\x5d\x7d\
+\x17\xcc\xb3\xfc\x73\x9b\x33\x00\x7f\x03\xd9\x1a\xfb\xdb\xbb\xa7\
+\x8f\x07\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
"
qt_resource_name = b"\
@@ -702,77 +1286,141 @@ qt_resource_name = b"\
\x07\x03\x7d\xc3\
\x00\x69\
\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
-\x00\x0f\
-\x06\x53\x25\xa7\
-\x00\x62\
-\x00\x72\x00\x61\x00\x6e\x00\x63\x00\x68\x00\x5f\x00\x6f\x00\x70\x00\x65\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x18\
-\x03\x8e\xde\x67\
-\x00\x72\
-\x00\x69\x00\x67\x00\x68\x00\x74\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\
-\x00\x6c\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x15\
-\x03\x27\x72\x67\
-\x00\x63\
-\x00\x6f\x00\x6d\x00\x62\x00\x6f\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x6f\x00\x6e\
-\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x11\
\x0b\xda\x30\xa7\
\x00\x62\
\x00\x72\x00\x61\x00\x6e\x00\x63\x00\x68\x00\x5f\x00\x63\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
\
-\x00\x17\
-\x0c\xab\x51\x07\
-\x00\x64\
-\x00\x6f\x00\x77\x00\x6e\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\x00\x6c\
-\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x11\
-\x00\xb8\x8c\x07\
-\x00\x6c\
-\x00\x65\x00\x66\x00\x74\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\
-\x00\x12\
-\x01\x2e\x03\x27\
+\x00\x0f\
+\x06\x53\x25\xa7\
+\x00\x62\
+\x00\x72\x00\x61\x00\x6e\x00\x63\x00\x68\x00\x5f\x00\x6f\x00\x70\x00\x65\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1a\
+\x01\x87\xae\x67\
\x00\x63\
-\x00\x6f\x00\x6d\x00\x62\x00\x6f\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\
-\x00\x67\
-\x00\x0f\
-\x02\x9f\x05\x87\
-\x00\x72\
-\x00\x69\x00\x67\x00\x68\x00\x74\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x15\
-\x0f\xf3\xc0\x07\
-\x00\x75\
-\x00\x70\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x64\
-\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x0f\
-\x0c\xe2\x68\x67\
-\x00\x74\
-\x00\x72\x00\x61\x00\x6e\x00\x73\x00\x70\x00\x61\x00\x72\x00\x65\x00\x6e\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x0e\
-\x04\xa2\xfc\xa7\
-\x00\x64\
-\x00\x6f\x00\x77\x00\x6e\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x69\x00\x6e\x00\x64\x00\x65\x00\x74\x00\x65\x00\x72\x00\x6d\
+\x00\x69\x00\x6e\x00\x61\x00\x74\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x20\
+\x0f\xd4\x1b\xc7\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x69\x00\x6e\x00\x64\x00\x65\x00\x74\x00\x65\x00\x72\x00\x6d\
+\x00\x69\x00\x6e\x00\x61\x00\x74\x00\x65\x00\x5f\x00\x68\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x1b\
\x03\x5a\x32\x27\
\x00\x63\
\x00\x6f\x00\x6d\x00\x62\x00\x6f\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x64\x00\x69\
\x00\x73\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
+\x02\x9f\x05\x87\
+\x00\x72\
+\x00\x69\x00\x67\x00\x68\x00\x74\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0e\
+\x04\xa2\xfc\xa7\
+\x00\x64\
+\x00\x6f\x00\x77\x00\x6e\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1c\
+\x0e\x3c\xde\x07\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\
+\x00\x64\x00\x5f\x00\x68\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x12\
+\x01\x2e\x03\x27\
+\x00\x63\
+\x00\x6f\x00\x6d\x00\x62\x00\x6f\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\
+\x00\x67\
+\x00\x15\
+\x03\x27\x72\x67\
+\x00\x63\
+\x00\x6f\x00\x6d\x00\x62\x00\x6f\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x6f\x00\x6e\
+\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1d\
+\x09\x07\x81\x07\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x5f\
+\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x23\
+\x06\xf2\x1a\x47\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x69\x00\x6e\x00\x64\x00\x65\x00\x74\x00\x65\x00\x72\x00\x6d\
+\x00\x69\x00\x6e\x00\x61\x00\x74\x00\x65\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x64\x00\x2e\x00\x70\
+\x00\x6e\x00\x67\
\x00\x17\
\x0c\x65\xce\x07\
\x00\x6c\
\x00\x65\x00\x66\x00\x74\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\x00\x6c\
\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x11\
-\x01\x1f\xc3\x87\
-\x00\x64\
-\x00\x6f\x00\x77\x00\x6e\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\
\x00\x12\
\x05\x8f\x9d\x07\
\x00\x62\
\x00\x72\x00\x61\x00\x6e\x00\x63\x00\x68\x00\x5f\x00\x6f\x00\x70\x00\x65\x00\x6e\x00\x5f\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\
\x00\x67\
+\x00\x14\
+\x07\xec\xd1\xc7\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x2e\
+\x00\x70\x00\x6e\x00\x67\
+\x00\x16\
+\x01\x75\xcc\x87\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\
+\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x14\
+\x04\x5e\x2d\xa7\
+\x00\x62\
+\x00\x72\x00\x61\x00\x6e\x00\x63\x00\x68\x00\x5f\x00\x63\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x5f\x00\x6f\x00\x6e\x00\x2e\
+\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
+\x01\x73\x8b\x07\
+\x00\x75\
+\x00\x70\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x11\
+\x00\xb8\x8c\x07\
+\x00\x6c\
+\x00\x65\x00\x66\x00\x74\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\
+\x00\x11\
+\x01\x1f\xc3\x87\
+\x00\x64\
+\x00\x6f\x00\x77\x00\x6e\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\
+\x00\x0c\
+\x06\xe6\xe6\x67\
+\x00\x75\
+\x00\x70\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1c\
+\x08\x3f\xda\x67\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\
+\x00\x64\x00\x5f\x00\x66\x00\x6f\x00\x63\x00\x75\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1a\
+\x03\x0e\xe4\x87\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x5f\
+\x00\x68\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x20\
+\x09\xd7\x1f\xa7\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x69\x00\x6e\x00\x64\x00\x65\x00\x74\x00\x65\x00\x72\x00\x6d\
+\x00\x69\x00\x6e\x00\x61\x00\x74\x00\x65\x00\x5f\x00\x66\x00\x6f\x00\x63\x00\x75\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1f\
+\x0a\xae\x27\x47\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x75\x00\x6e\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\
+\x00\x64\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x18\
+\x03\x8e\xde\x67\
+\x00\x72\
+\x00\x69\x00\x67\x00\x68\x00\x74\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\
+\x00\x6c\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x0f\
+\x0c\xe2\x68\x67\
+\x00\x74\
+\x00\x72\x00\x61\x00\x6e\x00\x73\x00\x70\x00\x61\x00\x72\x00\x65\x00\x6e\x00\x74\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x15\
+\x0f\xf3\xc0\x07\
+\x00\x75\
+\x00\x70\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x64\
+\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x12\
\x03\x8d\x04\x47\
\x00\x72\
@@ -782,45 +1430,54 @@ qt_resource_name = b"\
\x0e\xde\xfa\xc7\
\x00\x6c\
\x00\x65\x00\x66\x00\x74\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x14\
-\x04\x5e\x2d\xa7\
-\x00\x62\
-\x00\x72\x00\x61\x00\x6e\x00\x63\x00\x68\x00\x5f\x00\x63\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x5f\x00\x6f\x00\x6e\x00\x2e\
-\x00\x70\x00\x6e\x00\x67\
-\x00\x0c\
-\x06\xe6\xe6\x67\
-\x00\x75\
-\x00\x70\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\x00\x0f\
-\x01\x73\x8b\x07\
-\x00\x75\
-\x00\x70\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x17\
+\x0c\xab\x51\x07\
+\x00\x64\
+\x00\x6f\x00\x77\x00\x6e\x00\x5f\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x5f\x00\x64\x00\x69\x00\x73\x00\x61\x00\x62\x00\x6c\
+\x00\x65\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\
+\x00\x1a\
+\x05\x11\xe0\xe7\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x62\x00\x6f\x00\x78\x00\x5f\x00\x63\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x65\x00\x64\x00\x5f\
+\x00\x66\x00\x6f\x00\x63\x00\x75\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
"
qt_resource_struct_v1 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
-\x00\x00\x00\x16\x00\x02\x00\x00\x00\x14\x00\x00\x00\x03\
-\x00\x00\x01\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x10\xb3\
-\x00\x00\x02\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x15\x93\
-\x00\x00\x01\x36\x00\x00\x00\x00\x00\x01\x00\x00\x11\x5d\
-\x00\x00\x03\x54\x00\x00\x00\x00\x00\x01\x00\x00\x27\x41\
-\x00\x00\x01\x60\x00\x00\x00\x00\x00\x01\x00\x00\x12\x07\
-\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x00\x07\xae\
-\x00\x00\x01\xfa\x00\x00\x00\x00\x00\x01\x00\x00\x14\x40\
-\x00\x00\x02\xbc\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x70\
-\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x07\x0a\
-\x00\x00\x03\x08\x00\x00\x00\x00\x00\x01\x00\x00\x1e\xbe\
-\x00\x00\x01\xd8\x00\x00\x00\x00\x00\x01\x00\x00\x13\x97\
-\x00\x00\x02\x92\x00\x00\x00\x00\x00\x01\x00\x00\x16\x3c\
+\x00\x00\x00\x16\x00\x02\x00\x00\x00\x20\x00\x00\x00\x03\
+\x00\x00\x03\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x33\x3b\
+\x00\x00\x03\xd2\x00\x00\x00\x00\x00\x01\x00\x00\x33\xe5\
+\x00\x00\x01\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x15\xf1\
+\x00\x00\x03\x86\x00\x00\x00\x00\x00\x01\x00\x00\x32\x99\
+\x00\x00\x03\x26\x00\x00\x00\x00\x00\x01\x00\x00\x29\x59\
+\x00\x00\x00\x74\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xbb\
+\x00\x00\x01\x30\x00\x00\x00\x00\x00\x01\x00\x00\x13\x37\
+\x00\x00\x04\x56\x00\x00\x00\x00\x00\x01\x00\x00\x36\x8b\
+\x00\x00\x01\xde\x00\x00\x00\x00\x00\x01\x00\x00\x16\x9b\
+\x00\x00\x00\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x12\x8e\
+\x00\x00\x05\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x44\xc9\
+\x00\x00\x05\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x3e\x00\
+\x00\x00\x03\x58\x00\x00\x00\x00\x00\x01\x00\x00\x2a\xb8\
+\x00\x00\x01\x54\x00\x00\x00\x00\x00\x01\x00\x00\x13\xdb\
+\x00\x00\x06\x24\x00\x00\x00\x00\x00\x01\x00\x00\x46\xc1\
+\x00\x00\x02\xce\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x26\
+\x00\x00\x00\x50\x00\x00\x00\x00\x00\x01\x00\x00\x07\xb1\
+\x00\x00\x03\xfa\x00\x00\x00\x00\x00\x01\x00\x00\x34\x8e\
+\x00\x00\x02\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x7c\
+\x00\x00\x02\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x25\x5a\
+\x00\x00\x04\x18\x00\x00\x00\x00\x00\x01\x00\x00\x35\x30\
+\x00\x00\x02\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x17\x45\
+\x00\x00\x04\x90\x00\x00\x00\x00\x00\x01\x00\x00\x3a\xa1\
+\x00\x00\x04\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x3c\x86\
\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x03\x36\x00\x00\x00\x00\x00\x01\x00\x00\x26\x9f\
-\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x08\x58\
-\x00\x00\x02\x36\x00\x00\x00\x00\x00\x01\x00\x00\x14\xe9\
-\x00\x00\x00\xda\x00\x00\x00\x00\x00\x01\x00\x00\x10\x09\
-\x00\x00\x01\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x13\x4e\
-\x00\x00\x02\xe6\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x14\
-\x00\x00\x01\x84\x00\x00\x00\x00\x00\x01\x00\x00\x12\xab\
+\x00\x00\x02\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x7c\
+\x00\x00\x05\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x46\x17\
+\x00\x00\x05\x50\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xa4\
+\x00\x00\x01\x76\x00\x00\x00\x00\x00\x01\x00\x00\x14\x84\
+\x00\x00\x05\xce\x00\x00\x00\x00\x00\x01\x00\x00\x45\x6d\
+\x00\x00\x00\xae\x00\x00\x00\x00\x00\x01\x00\x00\x10\x9b\
+\x00\x00\x05\x74\x00\x00\x00\x00\x00\x01\x00\x00\x44\x26\
"
qt_resource_struct_v2 = b"\
@@ -828,50 +1485,75 @@ qt_resource_struct_v2 = b"\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x16\x00\x02\x00\x00\x00\x14\x00\x00\x00\x03\
+\x00\x00\x00\x16\x00\x02\x00\x00\x00\x20\x00\x00\x00\x03\
\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x01\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x10\xb3\
-\x00\x00\x01\x79\xec\x37\x3f\xbc\
-\x00\x00\x02\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x15\x93\
-\x00\x00\x01\x79\xec\x37\x3f\xba\
-\x00\x00\x01\x36\x00\x00\x00\x00\x00\x01\x00\x00\x11\x5d\
-\x00\x00\x01\x79\xec\x37\x3f\xb6\
-\x00\x00\x03\x54\x00\x00\x00\x00\x00\x01\x00\x00\x27\x41\
-\x00\x00\x01\x79\xec\x37\x3f\xc0\
-\x00\x00\x01\x60\x00\x00\x00\x00\x00\x01\x00\x00\x12\x07\
-\x00\x00\x01\x79\xec\x37\x3f\xbc\
-\x00\x00\x00\x82\x00\x00\x00\x00\x00\x01\x00\x00\x07\xae\
-\x00\x00\x01\x79\xec\x37\x3f\xb7\
-\x00\x00\x01\xfa\x00\x00\x00\x00\x00\x01\x00\x00\x14\x40\
-\x00\x00\x01\x79\xec\x37\x3f\xb7\
-\x00\x00\x02\xbc\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x70\
-\x00\x00\x01\x79\xec\x37\x3f\xbe\
-\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x07\x0a\
-\x00\x00\x01\x79\xec\x37\x3f\xbd\
-\x00\x00\x03\x08\x00\x00\x00\x00\x00\x01\x00\x00\x1e\xbe\
-\x00\x00\x01\x79\xec\x37\x3f\xb4\
-\x00\x00\x01\xd8\x00\x00\x00\x00\x00\x01\x00\x00\x13\x97\
-\x00\x00\x01\x79\xec\x37\x3f\xb8\
-\x00\x00\x02\x92\x00\x00\x00\x00\x00\x01\x00\x00\x16\x3c\
-\x00\x00\x01\x79\xec\x37\x3f\xb5\
+\x00\x00\x03\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x33\x3b\
+\x00\x00\x01\x7b\xe9\x78\x46\xdd\
+\x00\x00\x03\xd2\x00\x00\x00\x00\x00\x01\x00\x00\x33\xe5\
+\x00\x00\x01\x7b\xe9\x78\x46\xdb\
+\x00\x00\x01\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x15\xf1\
+\x00\x00\x01\x7b\xe9\x78\x46\xd9\
+\x00\x00\x03\x86\x00\x00\x00\x00\x00\x01\x00\x00\x32\x99\
+\x00\x00\x01\x7b\xe9\x78\x46\xe0\
+\x00\x00\x03\x26\x00\x00\x00\x00\x00\x01\x00\x00\x29\x59\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc7\
+\x00\x00\x00\x74\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xbb\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc5\
+\x00\x00\x01\x30\x00\x00\x00\x00\x00\x01\x00\x00\x13\x37\
+\x00\x00\x01\x7b\xe9\x78\x46\xdd\
+\x00\x00\x04\x56\x00\x00\x00\x00\x00\x01\x00\x00\x36\x8b\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc4\
+\x00\x00\x01\xde\x00\x00\x00\x00\x00\x01\x00\x00\x16\x9b\
+\x00\x00\x01\x7b\xe9\x78\x46\xda\
+\x00\x00\x00\xf4\x00\x00\x00\x00\x00\x01\x00\x00\x12\x8e\
+\x00\x00\x01\x7b\xe9\x78\x46\xd9\
+\x00\x00\x05\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x44\xc9\
+\x00\x00\x01\x7b\xe9\x78\x46\xde\
+\x00\x00\x05\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x3e\x00\
+\x00\x00\x01\x7b\xe9\x78\x46\xde\
+\x00\x00\x03\x58\x00\x00\x00\x00\x00\x01\x00\x00\x2a\xb8\
+\x00\x00\x01\x7b\xe9\x78\x46\xd7\
+\x00\x00\x01\x54\x00\x00\x00\x00\x00\x01\x00\x00\x13\xdb\
+\x00\x00\x01\x7b\xe9\x78\x46\xda\
+\x00\x00\x06\x24\x00\x00\x00\x00\x00\x01\x00\x00\x46\xc1\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc4\
+\x00\x00\x02\xce\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x26\
+\x00\x00\x01\x7b\xe9\x78\x46\xd8\
+\x00\x00\x00\x50\x00\x00\x00\x00\x00\x01\x00\x00\x07\xb1\
+\x00\x00\x01\x7b\xe9\x78\x46\xd8\
+\x00\x00\x03\xfa\x00\x00\x00\x00\x00\x01\x00\x00\x34\x8e\
+\x00\x00\x01\x7b\xe9\x78\x46\xdf\
+\x00\x00\x02\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x1b\x7c\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc5\
+\x00\x00\x02\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x25\x5a\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc2\
+\x00\x00\x04\x18\x00\x00\x00\x00\x00\x01\x00\x00\x35\x30\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc8\
+\x00\x00\x02\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x17\x45\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc3\
+\x00\x00\x04\x90\x00\x00\x00\x00\x00\x01\x00\x00\x3a\xa1\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc6\
+\x00\x00\x04\xd6\x00\x00\x00\x00\x00\x01\x00\x00\x3c\x86\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc7\
\x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x01\x79\xec\x37\x3f\xb5\
-\x00\x00\x03\x36\x00\x00\x00\x00\x00\x01\x00\x00\x26\x9f\
-\x00\x00\x01\x79\xec\x37\x3f\xbe\
-\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x08\x58\
-\x00\x00\x01\x79\xec\x37\x3f\xb3\
-\x00\x00\x02\x36\x00\x00\x00\x00\x00\x01\x00\x00\x14\xe9\
-\x00\x00\x01\x79\xec\x37\x3f\xbb\
-\x00\x00\x00\xda\x00\x00\x00\x00\x00\x01\x00\x00\x10\x09\
-\x00\x00\x01\x79\xec\x37\x3f\xb9\
-\x00\x00\x01\xb4\x00\x00\x00\x00\x00\x01\x00\x00\x13\x4e\
-\x00\x00\x01\x7c\xa7\x41\xfc\x00\
-\x00\x00\x02\xe6\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x14\
-\x00\x00\x01\x79\xec\x37\x3f\xbb\
-\x00\x00\x01\x84\x00\x00\x00\x00\x00\x01\x00\x00\x12\xab\
-\x00\x00\x01\x79\xec\x37\x3f\xbf\
+\x00\x00\x01\x7b\xe9\x78\x46\xd7\
+\x00\x00\x02\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x7c\
+\x00\x00\x01\x7b\xe9\x78\x46\xdc\
+\x00\x00\x05\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x46\x17\
+\x00\x00\x01\x7b\xe9\x78\x46\xdb\
+\x00\x00\x05\x50\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xa4\
+\x00\x00\x01\x7d\x0a\xb7\x38\x27\
+\x00\x00\x01\x76\x00\x00\x00\x00\x00\x01\x00\x00\x14\x84\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc9\
+\x00\x00\x05\xce\x00\x00\x00\x00\x00\x01\x00\x00\x45\x6d\
+\x00\x00\x01\x7b\xe9\x78\x46\xdc\
+\x00\x00\x00\xae\x00\x00\x00\x00\x00\x01\x00\x00\x10\x9b\
+\x00\x00\x01\x7d\x0a\x8c\xfa\xc6\
+\x00\x00\x05\x74\x00\x00\x00\x00\x00\x01\x00\x00\x44\x26\
+\x00\x00\x01\x7b\xe9\x78\x46\xdf\
"
+
qt_version = [int(v) for v in QtCore.qVersion().split('.')]
if qt_version < [5, 8, 0]:
rcc_version = 1
diff --git a/openpype/style/pyside2_resources.py b/openpype/style/pyside2_resources.py
index dff01eec49..2aa84d04f1 100644
--- a/openpype/style/pyside2_resources.py
+++ b/openpype/style/pyside2_resources.py
@@ -2,27 +2,15 @@
# Resource object code
#
-# Created: Fri Oct 22 11:42:52 2021
-# by: The Resource Compiler for PySide2 (Qt v5.6.1)
+# Created: Wed Nov 10 17:40:15 2021
+# by: The Resource Compiler for PySide2 (Qt v5.12.5)
#
# WARNING! All changes made in this file will be lost!
from PySide2 import QtCore
+
qt_resource_data = b"\
-\x00\x00\x00\xa6\
-\x89\
-PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
-\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
-\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
-HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1d\x00\xb0\
-\xd55\xa3\x00\x00\x00*IDAT\x08\xd7c`\xc0\
-\x06\xfe\x9fg``B0\xa1\x1c\x08\x93\x81\x81\x09\xc1\
-d``b``4D\xe2 s\x19\x90\x8d@\x02\
-\x00d@\x09u\x86\xb3\xad\x9c\x00\x00\x00\x00IEN\
-D\xaeB`\x82\
\x00\x00\x00\xa5\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
@@ -36,24 +24,11 @@ HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
200B\x98\x10AFC\x14\x13P\xb5\xa3\x01\x00\
\xd6\x10\x07\xd2/H\xdfJ\x00\x00\x00\x00IEND\
\xaeB`\x82\
-\x00\x00\x00\xa6\
+\x00\x00\x07\xad\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
-\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
-\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
-HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15;\xdc\
-;\x0c\x9b\x00\x00\x00*IDAT\x08\xd7c`\xc0\
-\x00\x8c\x0c\x0cs> \x0b\xa4\x08020 \x0b\xa6\
-\x08000B\x98\x10\xc1\x14\x01\x14\x13P\xb5\xa3\x01\
-\x00\xc6\xb9\x07\x90]f\x1f\x83\x00\x00\x00\x00IEN\
-D\xaeB`\x82\
-\x00\x00\x070\
-\x89\
-PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
-\x00\x00\x0a\x00\x00\x00\x07\x08\x06\x00\x00\x001\xac\xdcc\
-\x00\x00\x04\xb0iTXtXML:com.\
+\x00\x00\x07\x00\x00\x00\x0a\x08\x06\x00\x00\x00x\xccD\x0d\
+\x00\x00\x05RiTXtXML:com.\
adobe.xmp\x00\x00\x00\x00\x00\
xpacket begin=\x22\xef\
\xbb\xbf\x22 id=\x22W5M0MpCe\
@@ -68,7 +43,10 @@ w.w3.org/1999/02\
/22-rdf-syntax-n\
s#\x22>\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a\x0aH\x8b[^\x00\x00\x01\x83\
-iCCPsRGB IEC6196\
-6-2.1\x00\x00(\x91u\x91\xcf+DQ\x14\
-\xc7?fh\xfc\x18\x8dba1e\x12\x16B\x83\x12\
-\x1b\x8b\x99\x18\x0a\x8b\x99Q~mf\x9ey3j\xde\
-x\xbd7\xd2d\xabl\xa7(\xb1\xf1k\xc1_\xc0V\
-Y+E\xa4d\xa7\xac\x89\x0dz\xce\x9bQ#\x99s\
-;\xf7|\xee\xf7\xdes\xba\xf7\x5cpD\xd3\x8afV\
-\xfaA\xcbd\x8dp(\xe0\x9b\x99\x9d\xf3\xb9\x9e\xa8\xa2\
-\x85\x1a:\xf1\xc6\x14S\x9f\x8c\x8cF)k\xef\xb7T\
-\xd8\xf1\xba\xdb\xaeU\xfe\xdc\xbfV\xb7\x980\x15\xa8\xa8\
-\x16\x1eVt#+<&<\xb1\x9a\xd5m\xde\x12n\
-RR\xb1E\xe1\x13\xe1.C.(|c\xeb\xf1\x22\
-?\xdb\x9c,\xf2\xa7\xcdF4\x1c\x04G\x83\xb0/\xf9\
-\x8b\xe3\xbfXI\x19\x9a\xb0\xbc\x9c6-\xbd\xa2\xfc\xdc\
-\xc7~\x89;\x91\x99\x8eHl\x15\xf7b\x12&D\x00\
-\x1f\xe3\x8c\x10d\x80^\x86d\x1e\xa0\x9b>zdE\
-\x99|\x7f!\x7f\x8ae\xc9Ud\xd6\xc9a\xb0D\x92\
-\x14Y\xbaD]\x91\xea\x09\x89\xaa\xe8\x09\x19irv\
-\xff\xff\xf6\xd5T\xfb\xfb\x8a\xd5\xdd\x01\xa8z\xb4\xac\xd7\
-vpm\xc2W\xde\xb2>\x0e,\xeb\xeb\x10\x9c\x0fp\
-\x9e)\xe5/\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\x9eu\
-8\xbd(i\xf1m8\xdb\x80\xe6{=f\xc4\x0a\x92\
-S\xdc\xa1\xaa\xf0r\x0c\xf5\xb3\xd0x\x05\xb5\xf3\xc5\x9e\
-\xfd\xecst\x07\xd15\xf9\xaaK\xd8\xd9\x85\x0e9\xef\
-Y\xf8\x06\x8e\xfdg\xf8\xfd\x8a\x18\x97\x00\x00\x00\x09p\
+-31T12:43:35+02:\
+00\x22>\x0a \x0a \
+\x0a branch_close<\
+/rdf:li>\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a <\
+/rdf:RDF>\x0a\x0a$\xe15\x97\x00\x00\
+\x01\x83iCCPsRGB IEC61\
+966-2.1\x00\x00(\x91u\x91\xcf+D\
+Q\x14\xc7?fh\xfc\x18\x8dba1e\x12\x16B\
+\x83\x12\x1b\x8b\x99\x18\x0a\x8b\x99Q~mf\x9ey3\
+j\xdex\xbd7\xd2d\xabl\xa7(\xb1\xf1k\xc1_\
+\xc0VY+E\xa4d\xa7\xac\x89\x0dz\xce\x9bQ#\
+\x99s;\xf7|\xee\xf7\xdes\xba\xf7\x5cpD\xd3\x8a\
+fV\xfaA\xcbd\x8dp(\xe0\x9b\x99\x9d\xf3\xb9\x9e\
+\xa8\xa2\x85\x1a:\xf1\xc6\x14S\x9f\x8c\x8cF)k\xef\
+\xb7T\xd8\xf1\xba\xdb\xaeU\xfe\xdc\xbfV\xb7\x980\x15\
+\xa8\xa8\x16\x1eVt#+<&<\xb1\x9a\xd5m\xde\
+\x12nRR\xb1E\xe1\x13\xe1.C.(|c\xeb\
+\xf1\x22?\xdb\x9c,\xf2\xa7\xcdF4\x1c\x04G\x83\xb0\
+/\xf9\x8b\xe3\xbfXI\x19\x9a\xb0\xbc\x9c6-\xbd\xa2\
+\xfc\xdc\xc7~\x89;\x91\x99\x8eHl\x15\xf7b\x12&\
+D\x00\x1f\xe3\x8c\x10d\x80^\x86d\x1e\xa0\x9b>z\
+dE\x99|\x7f!\x7f\x8ae\xc9Ud\xd6\xc9a\xb0\
+D\x92\x14Y\xbaD]\x91\xea\x09\x89\xaa\xe8\x09\x19i\
+rv\xff\xff\xf6\xd5T\xfb\xfb\x8a\xd5\xdd\x01\xa8z\xb4\
+\xac\xd7vpm\xc2W\xde\xb2>\x0e,\xeb\xeb\x10\x9c\
+\x0fp\x9e)\xe5/\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\
+\x9eu8\xbd(i\xf1m8\xdb\x80\xe6{=f\xc4\
+\x0a\x92S\xdc\xa1\xaa\xf0r\x0c\xf5\xb3\xd0x\x05\xb5\xf3\
+\xc5\x9e\xfd\xecst\x07\xd15\xf9\xaaK\xd8\xd9\x85\x0e\
+9\xefY\xf8\x06\x8e\xfdg\xf8\xfd\x8a\x18\x97\x00\x00\x00\
+\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\
+\x9c\x18\x00\x00\x00rIDAT\x18\x95m\xcf1\x0a\
+\xc2P\x14D\xd1\xe8\x02\xb4W\x08\xd6Ia\x99JC\
+t\x15\x82\xabI6(\xee@\x04\xdb\xa8\x95Xx,\
+\xf2\x09\xe1\xf3\x07\xa6\x9a\xfb\xe0\xbe\x0c\x1b\xb4Xdq\
+p0\xe4\x82U\x0a8\xe3\x8b\x1b\x8a\x14p\xc4\x1b=\
+v)`\x8b\x07>\xa8\xe6\xd1\xfe\x0b\x9d\x85\x8eW\x0d\
+^x\xa2\x9e\x0e\xa7 tG9\x1d\xf6\xe1\x95+\xd6\
+\xb1D\x8e\x0e\xcbX\xf0\x0fR\x8ay\x18\xdc\xe2\x02p\
+\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x043\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xe5IDATh\x81\xed\
+\x9aM\x88\x1cE\x14\xc7\x7f3;\x89.\x18\xf13\x1e\
+\x92\x8b\x8b\xa2&\x06\x14/\xa29\x88\x15\x89\xa9\x18\x15\
+\xd1\xca\x06\x0f\x91\x05=\x88bnB\xc0\x1c\x12\xc4\x83\
+\x07\x15\x0dB\x14\x89\x04\xa2\x96DY\x22/F}\x8a\
+\xb0\x22\x08\x1e4\xbb\x22F\x8c,\x88\xba\xc4\x88\x82_\
+\xc9F=T\x0f\x8c\xbd\xdd]\xdd\xd3a\xa7\x07\xfc\xdd\
+\xa6\xfa\xd5\xab\xf7\xea\xf3\xdf\xd5\xd3\x22\xc1Xw\x11\xb0\
+\x03X\x0b\x5c\x0d,\xa1Y\x9c\x02\xa6\x81)`\xa7\x8a\
+?\x0e\xd0\x020\xd6\xdd\x0c\xbc\x02,\x1fXx\xd5\x98\
+\x03\xb6\xa8\xf8\xf7[I\xcf\xcf0<\xc1w\x99\x03V\
+\xb7\x09\xd3f\xd8\x82\x87\x10\xf3c\x1d\xc2\x9cOsz\
+\x91\x83)\xcbH\xea\xf7\xda\x0ea\xc1\xf6rZ\xc5w\
+\x16)\xa0J\x18\xeb\xe6\xf9o\x12k\xda4o\xb7\xa9\
+\xc2\x92\xf6\xa0#\xa8\xcb\xff\x09\x0c\x9a\xa1O\xa0\xa9\xbb\
+\xcd=\xc0]\xc0K*\xfe\xdd\x22\xdb\xc6\x8d\x80\xb1\xee\
+\x11\xc0\x03\xe3\xc0ac\xddnc]\xeeN\xd9\xa8\x04\
+\x8cu\xe3\xc0S=E-\xe0A\xe0\x85\xbc:\x8d\x99\
+B\xc6\xbau\xc0\xcb$\x023\xc5Vc\xdd\x91\xacz\
+\x8d\x18\x01c\xddu\xc0\x1b\xc0\xd2\x02\xb3\x0dY\x85\x03\
+O\xc0Xw\x19 \xc0\xb2\x88\xe9\x8bY\x85\x03M\xc0\
+Xw\x09p\x98\xb8\x1a~R\xc5\xbf\x9a\xf5``\x09\
+\x18\xeb\x96\x01\x87\x80\xb1\x88\xe9>\xe0\xd1\xbc\x87\x03I\
+\xc0X\xb7\x14x\x13\xb86b\xfa60\xa1\xe2\xff\xc9\
+3X\xf4\x04\x8cumB\xaf\x9a\x88\xe9'\xc0\xdd*\
+~\xbe\xc8h\x10#\xf04\xe0\x226_\x01\x1bU\xfc\
+o1g\xa5\x120\xd6\xb5\x92\x9e\xab\x85\xb1n;\xf0\
+p\xc4\xec{`}\xf7\xd6!FaPI\xe0\xdb\x80\
+?\x80ic\xdd\x9aR\x91f\xfb\x9a\x00\x1e\x8f\x98\xfd\
+\x02\xdc\xaa\xe2\xbf-\xeb77\x81D\x7fL\x12\x8e\xf6\
+\xb3\x80\xab\x80\xf7\x8cuW\x94u\xde\xe3k\x13\xb0'\
+b\xf6\x17p\x87\x8a\xff\xbc\x8a\xef\xa2\x11x\x0e\xd8\x94\
+*[\x0e\xa8\xb1\xee\xd2\xb2\x0d\x18\xebn\x00^c\xe1\
+\x0by/\x7f\x03\xf7\xaa\xf8\x0f\xcb\xfa\xed\x92\x99@\xd2\
+c\x0f\xe4\xd4YA\x18\x89\x151\xe7\xc6\xbaU\xc0A\
+`4b\xfa\x90\x8a?\x10\xf3\x97E\xde\x08\x5c\x10\xa9\
+7FH\xe2\xe2<\x03c\xddJ\xc2)\x1b\xf3\xb5K\
+\xc5?\x1f\xb1\xc9%/\x81\xfd\x84}\xb8\x88+\x81w\
+\x8cu\xe7\xa5\x1f\x18\xeb\xce'\x04\xbf2\xe2c\x8f\x8a\
+\xdf\x11\x8d\xb2\x80\xcc\x04T\xfc)\x82\xfa\xcb\x94\xb0=\
+\x5c\x03\x1c2\xd6\x9d\xd3-0\xd6\x8d\x12\xa6\xcd\xaaH\
+\xddI\x82\xd6\xafE\xee\x22V\xf1'\x80[\x80\xa3\x11\
+\x1f\xd7\x03\x07\x8du\xa3\xc6\xba\x11\xc2\x82\xbd1Rg\
+\x0a\x18W\xf1\xb5o\x00\x0b\xcf\x01\x15\xff#\xb0\x0e\x98\
+\x8d\xf8\xb9\x098@\xd8*\xd3;W\x9ai\xe0v\x15\
+\xffg\xc9\x18\x0b\x89\x9e\xae*~\x96\xa0[~\x88\x98\
+n\x00&\x226\xb3\x84\x83\xea\xe7r\xe1\xc5)%\x0f\
+T\xfc\xd7\x84\x91\xf8\xa9F['\x08\x12\xe1\xbb\x1a>\
+\x16PZ\xdf\xa8\xf8\x19`=\xf0k\x1f\xed\xfc\x0e\xdc\
+\xa6\xe2\xbf\xec\xa3n!\x95\x04\x9a\x8a\xff\x14\xd8\x98\x04\
+T\x96y`\xb3\x8a\xff\xb8J[e\xa9\xac0U\xfc\
+\x14p'A\xbb\x94\xe1~\x15\xffV\xd5v\xca\xd2\x97\
+DNn\xcb6\x13z\xb7\x88\xed*~o?m\x94\
+\xa5o\x8d\xaf\xe2'\x81\xad\x04!\x96\xc5\xb3*\xfe\x89\
+~\xfd\x97\xa5\xd6K\x8a\x8a\xdf\x0f\xdc\xc7\xc25\xb1\x1b\
+\xd8V\xc7wYj\xdf\xcc\xa9\xf8}\xc6\xba\x8f\x08\x07\
+\xd8\xb9\xc0\x07\xc9:Y\x14\xce\xc8\xd5\xa2\x8a\xff\x06x\
+\xe6L\xf8\xaaJ\x9b\xf0\x05|X9\xd9!h\x93\xde\
+\xfb\x99\x91\xe4k`\x13I\xbf\xd5Mw\x08\xca0}\
+\xc1T\xf4\xfa\xd7$\xa6\xda\xc0N\xc2g\xfbac\x0e\
+\xd8\xd5N\xee_\xb60\x5cIt\xff\xecq|\x04\xe0\
+\xd8\xd1\x99cc\x97\xaf\xde\x0b\x9cM\xf8\xf0}!\xcd\
+\x9bF'\x81\xcf\x80\xd7\x01\xa7\xe2\xbf\x00\xf8\x17]\x81\
+\x0b8\xb3\xfa \x9c\x00\x00\x00\x00IEND\xaeB\
+`\x82\
+\x00\x00\x01W\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x09IDATh\x81\xed\
+\xda\xcdm\xc2@\x14E\xe1\xf3\x8cI\x05Q\x9aH6\
+\xecY\xd1\x05\xc5\x90Ej\xa3\x04R\x04\x884`\x82\
+n\x163\xf9\xb1\xa5(DH\x5c[z\xdf\x8e\xc1\x8b\
+w\x8c\xcdf&\xa8$\xdd\x03\xcf\xc0\x12x\x02\xe6\x8c\
+\xcb\x09\xd8\x01[\xe0%\x22\x8e_\xdfHZI\xdak\
+:\xf6\x92V\x00\xa1r\xe7_\x81\x07\xc7m\xbd\xc2\x01\
+xl(\x8f\xcd\xd4\x86\x872\xf3\xa6\xa5<\xf3C\xe7\
+\x1b\x0fs\xa9\xd9\xe0\xf32$u\xf4_\xd8sD\xb4\
+7\x1c\xeab\x92\xde\xe9G\x9c\x1a\xc6\xf7o\xf3\x1f\xf3\
+\xc6=\xc1\xb52\xc0-\x03\xdc2\xc0-\x03\xdc2\xc0\
+-\x03\xdc2\xc0-\x03\xdc2\xc0-\x03\xdc2\xc0-\
+\x03\xdc2\xc0-\x03\xdc2\xc0-\x03\xdc2\xc0\xad\xa1\
+\xec\x80OU\xd7R\xb6\xef\x17?\x16gu7p\x8c\
+\x86\xdb\xac\xbb\x96r\xf6`\xf1\xc7\x85c\xb5\x9d\xfeQ\
+\x83z\xeac]\x17\xa6\xe2\x00\xac#\xe2\x18\x9f+\xf5\
+\x97\xd8\xf0}\xdc\xe6\xce4\xdco:\xfa\xc7m\xde\x00\
+>\x00G\xd7\xea\xb1\xadi\xe1\xd6\x00\x00\x00\x00IE\
+ND\xaeB`\x82\
+\x00\x00\x01\xfc\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\xaeIDATh\x81\xed\
+\x9a\xbdJ\x03A\x14FO6\x1b\xb0\xd0J\xf1\x01\x14\
+\xabh\x91\xc6*X\xb8\x16\xb2\x88v\x0b\xe9}\x01\x1f\
+@\x8b\xf8\x00\xbe\x80\x85\x9d0b\xa32U\xc6B\xf2\
+\x02B\x92F\x83}H'6\xf9\x01\x8b\xdd@\x12\xb2\
+\x89k~f7\xcc\xe9v\xef\x14\xdfY\xee\x0c\x0bw\
+R\x048\xae\xb7\x01\x5c\x01y`\x17\xc8\x10/\xda@\
+\x05(\x03E%E\x13 \x05\xe0\xb8\xde!p\x0fl\
+j\x8b\x17\x8d\x06PPR\xbc\xa6\x82/_%9\xe1\
+{4\x80\xac\x85\xdf6I\x0b\x0f~\xe6K\x1b\xbf\xe7\
+\x87\xe9.8\xcc_I\x0f=\xe7m\xfc\x0d\xdbOW\
+Ia/(P$\x1c\xd7\xeb0(\xb1g\x11\xbf\xd3\
+&\x0a\x19Kw\x82i1\x02\xba1\x02\xba1\x02\xba\
+1\x02\xba1\x02\xba1\x02\xba\x99\xf8\xdb\xec\xb8\xde\x11\
+\xb0\x0f\xac\xce?\xce\x00\x1d\xa0\x06<+)~\xc2\x16\
+\x85\x0a8\xaeg\x03\x8f\xc0\xe9\xec\xb3E\xa2\xee\xb8\xde\
+\xb1\x92\xe2sTq\x5c\x0b]\xa0?<\xc06p\x1b\
+V\x1c'p2\xfb,\xff\xe6\xc0q\xbd\xb5Q\x85\xc4\
+o\xe2q\x02/\x0bK1\x997%\xc5\xf7\xa8\xc28\
+\x81\x1b\xe0i>y\x22Q\x07\xce\xc3\x8a\xa1\xa7\x90\x92\
+\xa2\x03\x9c%\xf6\x18\xed\xa1\xa4(\x01\xa5\x19\x06\x9b)\
+K\xbd\x89\x13\x81\x11\xd0\x8d\x11\xd0\x8d\x11\xd0\x8d\x11\xd0\
+\x8d\x11\xd0\xcdR\x08\xb4u\x87\x98\x82\x96\x8d?\xbe\xcf\
+\xf5\xbdL\x07\xd3\xc082\xaa_[\
+;\xd9;`\x05\x7f\xf0\xbdN\xfc\xda\xa8\x05\xbc\x03\x0f\
+\x80\xa7\xa4\xa8\x01\xfc\x02Q\xab\x5c\x8a?\xde\xe3Y\x00\
+\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\xa6\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x97IDAT\x18\x95m\xcf\xb1j\x02A\
-\x14\x85\xe1o\xb7\xb6\xd0'H=Vi\x03\xb1\xb4H\
-;l\xa5\xf19\xf6Y\x02VB\xbaa\x0a\x0b;\x1b\
-\x1bkA\x18\x02)m\xe3\xbe\x82\xcd\x06\x16\xd9\xdb\xdd\
-\x9f\xff\x5c\xee\xa9b*\x13Ls\x13nF&\xa6\xf2\
-\x82\xaeF\x8b\xdf\x98\xca\xfb\x88\xb4\xc0\x0f\xda\x1a[t\
-\xd8\xc7T\xc2@\x9ac\x8f?|U=|\xc5\x09w\
-\xbc\xa1\xc2\x193,r\x13.\xd5\xe0\xc2\x12\x07\x5cQ\
-#\xe0#7\xe1\xa8O\x0e\x7f\xda`\xd7\xaf\x9f\xb9\x09\
-\xdfc\x05\xff\xe5uLe\xf5\xcc\x1f\x0d3,\x83\xb6\
-\x06D\x83\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15;\xdc\
+;\x0c\x9b\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0cs> \x0b\xa4\x08020 \x0b\xa6\
+\x08000B\x98\x10\xc1\x14\x01\x14\x13P\xb5\xa3\x01\
+\x00\xc6\xb9\x07\x90]f\x1f\x83\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x01i\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x1bIDATh\x81\xed\
+\xda\xb1m\xc2@\x14\x87\xf1\xcf\xc7\x91\x09P\x86pB\
+AO\xc5\x0a\xae\x90\xbc\x0a)\xc8*\x96Ry\x05*\
+F \x1e\xc2\x82\x05H\x90R\xdcY\x01KQbE\
+\xe2\xef\x93\xde\xaf\xb3E\xf1>\xcb\xa6\xb9\x97\x11\x95u\
+3\x03^\x80%\xf0\x0cL\x19\x97\x0f\xe0\x00\xec\x81m\
+U\xe4G\x80\x0c\xa0\xac\x9b\x15\xf0\x06<\xca\xc6\x1b\xa6\
+\x05\xd6U\x91\xef\xb2\xf8\xe4\xdfIg\xf8N\x0b<9\
+\xc2k\x93\xda\xf0\x10f\xdex\xc2;\xdfw\xb9\xf30\
+\x7f5\xe9]/=\xe1\x83\xbdv\xa9\x8a\xdc\xdfi\xa0\
+A\xca\xba\xf9\xe46b\xee\x18\xdf\xbf\xcd\x10S\xa7\x9e\
+\xe0\xbf,@\xcd\x02\xd4,@\xcd\x02\xd4,@\xcd\x02\
+\xd4,@\xcd\x02\xd4,@\xcd\x02\xd4,@\xcd\x02\xd4\
+,@\xcd\x02\xd4,@\xcd\x02\xd4,@\xcd\x11N\xc0\
+Su\xf6\x84\xe3\xfb\xc5\xd5\xcdI<\x0d\x1c\xa3\xfe1\
+\xeb\xc1\x13v\x0f\x16\xbf\xfcp\xac\xf6\x0e\xd8\x12\x8e\xed\
+S\xd3\x02\xaf.n}\xacI+\xa2[\xf68f\xdd\
+\x9d\xb8\xf4\xb1\xe1{\xdd\xe6A4\xdcO\xce\xdc\xae\xdb\
+\x9c\x00\xbe\x00\x9f\xf64>6O7\x81\x00\x00\x00\x00\
+IEND\xaeB`\x82\
+\x00\x00\x03\xfb\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xadIDATh\x81\xed\
+\x9aO\xa8\x15U\x1c\xc7?\xf7\xbe\xab\xf2 \xa3\x22m\
+\xa1|!\x09*K(\xdaD\xb9\x88RL\xccjQ\
+\xf9\xa4\x85\xf1\xa0\x16Q\xe4.\x10tQD\x8b\x16\x15\
+%\x81\xb5(\x04\xad\xc0\xe2ad\xf6\x97\xe0E\x10\xb4\
+\xa9'DE\xc4\x17\xa2\x125\x0a*\xff<\xab\xc5\x99\
+[\xd7y3s\xce\xdcko\xee\x05?\xbb9\xf3;\
+\xbf\xf3\xfb\x9d3\xe7\x9c\xef\x9c\x99\x16\x19\xb6/\x06v\
+\x00\xab\x81\xab\x81\x05\x0c\x17\xa7\x80\x19`\x1axL\xd2\
+\x11\x80\x16\x80\xed\x9b\x81\xbd\xc0\xd2\xc6\xc2\xab\xc7a`\
+\xb3\xa4\x0f[Y\xcf\x1fbt\x82\xefr\x18\xb8\xaaM\
+xlF-x\x081o\xef\x10\x9e\xf9<\xa7\xe79\
+\x98T\xc6r\xd7\xab;\x84\x09\xdb\xcbiI\x9dy\x0a\
+\xa8\x16\xb6g93\x89Um\x86o\xb5\xa9\xc3\x82v\
+\xd3\x11\x0c\xca\xb9\x04\x9a\xe6\x5c\x02\xff\x07\xb6\xef\xb6\xbd\
+\xd7\xf6\xda\x98\xed\xd0%`\xfb\x11\xe0u`\x028h\
+{\xa7\xed\xd2\x95r\xa8\x12\xb0=\x01<\xddS\xd4\x02\
+\x1e\x04^,\xab34\x1b\x96\xed5\xc0+d\x023\
+\xc7\x16\xdb_\x16\xd5\x1b\x8a\x11\xb0}\x1d\xf0\x06\xb0\xb0\
+\xc2l}Qa\xe3\x09\xd8\xbe\x0cx\x1bX\x1c1}\
+\xa9\xa8\xb0\xd1\x04l_\x02\x1c$\xae\x86\x9f\x92\xf4j\
+\xd1\x8d\xc6\x12\xb0\xbd\x188\x00\xac\x88\x98\xee\x06\x1e-\
+\xbb\xd9H\x02\xb6\x17\x02o\x02\xd7FL\xdf\x01&%\
+\xfd]f0\xef\x09\xd8n\x13z\xf5\x96\x88\xe9g\xc0\
+]\x92f\xab\x8c\x9a\x18\x81g\x80{\x226_\x03\x1b\
+$\xfd\x1es\x96\x94\x80\xedV\xd6s\x03a{\x1b\xf0\
+p\xc4\xecG`]\xf7\xd4!FePY\xe0[\x81\
+?\x81\x19\xdb\xab\x92\x22-\xf65\x09<\x111\xfb\x15\
+\xb8U\xd2\xf7\xa9~K\x13\xc8\xf4\xc7\x14ak_\x04\
+\x5c\x09\xbco\xfb\xf2T\xe7=\xbe6\x02\xbb\x22f'\
+\x80;$}Q\xc7w\xd5\x08<\x0fl\xcc\x95-\x05\
+>\xb0}ij\x03\xb6o\x00^c\xee\x0by/\x7f\
+\x01\xf7J\xfa8\xd5o\x97\xc2\x04\xb2\x1e{\xa0\xa4\xce\
+2\xc2H,\x8b9\xb7\xbd\x12\xd8\x0f\x8cGL\x1f\x92\
+\xb4/\xe6\xaf\x88\xb2\x11\xb8(Ro\x05!\x89%e\
+\x06\xb6\x97\x13v\xd9\x98\xaf\xc7%\xbd\x10\xb1)\xa5,\
+\x81=\x84u\xb8\x8a+\x80wm_\x90\xbfa\xfbB\
+B\xf0\xcb#>vI\xda\x11\x8d\xb2\x82\xc2\x04$\x9d\
+\x22\xa8\xbfB\x09\xdb\xc35\xc0\x01\xdb\xe7u\x0bl\x8f\
+\x13\x1e\x9b\x95\x91\xbaS\x04\xad?\x10\xa5\x93X\xd21\
+`-\xf0M\xc4\xc7\xf5\xc0~\xdb\xe3\xb6\xc7\x08\x13\xf6\
+\xc6H\x9di`B\xd2\xc0'\x80\x95\xfb\x80\xa4\x9f\x81\
+5\x80#~n\x02\xf6\x11\x96\xca\xfc\xca\x95g\x06\xb8\
+]\xd2\xf1\xc4\x18+\x89\xee\xae\x92L\xd0-?EL\
+\xd7\x03\x93\x11\x1b\x136\xaa_\xd2\xc2\x8b\x93$\x0f$\
+}K\x18\x89\xa3\x03\xb4u\x8c \x11~\x18\xc0\xc7\x1c\
+\x92\xf5\x8d\xa4C\xc0:\xe0\xb7>\xda\xf9\x03\xb8M\xd2\
+W}\xd4\xad\xa4\x96@\x93\xf49\xb0!\x0b(\x95Y\
+`\x93\xa4O\xeb\xb4\x95Jm\x85)i\x1a\xb8\x93\xa0\
+]R\xb8_\xd2[u\xdbI\xa5/\x89,\xe9=`\
+\x13\xa1w\xab\xd8&\xe9\xe5~\xdaH\xa5o\x8d/i\
+\x0a\xd8B\x10bE<'\xe9\xc9~\xfd\xa72\xd0K\
+\x8a\xa4=\xc0}\xcc\x9d\x13;\x81\xad\x83\xf8Ne\xe0\
+\x939I\xbbm\x7fB\xd8\xc0\xce\x07>\xca\xe6\xc9\xbc\
+pV\x8e\x16%}\x07<{6|\xd5\xa5M\xf8\x02\
+>\xaa\x9c\xec\x10\xb4I\xef\xf9\xccX\xf65p\x18\xc9\
+\xbf\xd5\xcdt\x08\xca0\x7f\xc0T\xf5\xfa7LL\x8f\
+\xfe\xaf\x06\xd9\xf9\xcb\xe6\xac`T\xe8\xfe\xecq\xe4\xdf\
+\x8f\x09\xd9Hl\xe7\xbf\xdfm\xaa\xce\xea\x9b\xe0$g\
+\xfens\x14\xe0\x1f\x0aC\x12kO\xfd?\x13\x00\x00\
+\x00\x00IEND\xaeB`\x82\
+\x00\x00\x03\xff\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xb1IDATh\x81\xed\
+\x9aOh\x1eE\x18\xc6\x7f\x9b&\x85\x82\x15\x15\xabB\
+\xcb\x03\x06\x05\xa9\x0a\x8a\xb7R<\xd4\x96\xaa\xb5\xe0A\
+\xad\xc5C%\xa0\x07Q\xccM(\xb4\x07E\x80\xae9\x1f\xc0\xff\
+\x81\xed\xbbm\xbff{W\xca6\x0b!\x84BY\xa7\
+\xdb\xa8\xedG\x81#\xf9\xcf\x00\x1c\x05&%-\x94l\
+\xa3\xc35\x03\xb6\xef\x05\x9e\xe9)\xca\x80\x87\x80\x17\xab\
+\xda\x0c\xcd\x81e{'\xf0\x0aQt\x91\x03\xb6\xbf*\
+k7\x143`\xfb&\xe0M`}\x8d\xd9me\x85\
+\x9d\x07`\xfb*\xe0]`c\xc2\xf4\xa5\xb2\xc2N\x03\
+\xb0}9\xf0>\xe9l\xf8iI\xaf\x97Ut\x16\x80\
+\xed\x8d\xc0\x140\x9e0}\x15x\xac\xaa\xb2\x93\x00l\
+\xaf\x07\xde\x02nL\x98\xbe\x07LH*n\xf5K\xac\
+z\x00\xb6G\x88\xa3zK\xc2\xf4\x0b\xe0.I\x8bu\
+F]\xcc\xc0\x11\xe0\x9e\x84\xcd\xb7\xc0\x1eI\xbf\xa5\x9c\
+5\x0a\xc0v\x96\x8f\xdc@\xd8>\x08<\x920\xfb\x11\
+\xd8-i.a\x07$\x02\xc8\x85O\x02\x7f\x003\xb6\
+\xafo\xa4\xb4\xdc\xd7\x04\xf0d\xc2\xec\x17\xe0VI\xdf\
+7\xf5[\x99\x0b\xd9\x1e\x03\x8e\x03{{\xeaf\x81\x9b\
+%}\xd3\xb4\x03\x00\xdb{\x89\x8b\xb6x\xa7\xed\xe5,\
+q\xe4?\xab2\xe87\x17z\x8e\xe5\xe2!\xee\xd7\x1f\
+\xdb\xbe\xb2Vq\x0f\xb6\xb7\x01o\x14;.\xf0\x17p\
+_\x9d\xf8*J\x03\xc8G\xec\xc1\x8a6\x9b\x81\x8fl\
+oN9\xb7\xbd\x15x\x1b\xd8\x900}X\xd2\xf1\x94\
+\xbf2\xaaf\xe0\x92D\xbbqb\x10\x9b\xaa\x0clo\
+!\x9e\xb2)_OH:\x9a\xb0\xa9\xa4*\x80c\xc4\
+}\xb8\x8ek\x80\x0fl_T\xac\xb0}1Q\xfc\x96\
+\x84\x8f\x17$\x1dN\xaa\xac\xa14\x00I\x0b\xc4\xec\xaf\
+4\x85\xed\xe1\x06`\xca\xf6\x05\xff\x14\xd8\xde@|l\
+\xb6&\xda\x9e \xe6\xfa\x03Q{#\xcb\x93\xad\x93\xc0\
+\xd5\x09?\x9f\x02\xb7\x03\xf3\xc4\xdd\xa6\xb8\xf8\x8bL\x03\
+\xbb$\xfd\xd9\x8f\xd8\xb2](y\xa5\xb4-b\x10J\
+\xf8\x9f\x22\x1eB\x13\x09\xbb\x19\xe2V\xfcs#\xd5=\
+\xb4\x0a\x00\x96r\xf6\x93\xc0\x15\xfdvZ\xc0\xc06I\
+?\xb4i\xdc\xfaN,\xe9;`'p\xa6M\xc79\
+?\x11\x0f\xaaV\xe2\xabh\x9c\xdfH:\x05\xec\x06~\
+m\xd1\xcf\xef\xc0\x1d\x92\xben\xd1\xb6\x96\xbe\x124I\
+_\x02{rAMY\x04\xf6I\xfa\xbc\x9f\xbe\x9a\xd2\
+w\x86)i\x1a\xb8\x93\x98\xbb4\xe1\x01I\xef\xf4\xdb\
+OSZ\xa5\xc8\x92>\x04\xf6\x11G\xb7\x8e\x83\x92^\
+n\xd3GSZ\xe7\xf8\x92N\x00\x07\x88\x89X\x19\xcf\
+Jz\xaa\xad\xff\xa6\x0ctI\x91t\x0c\xb8\x9f\xff\xae\
+\x89\xe7\x81\xc9A|7eE\xde\x8d\xda\x1e'\x9e\xbe\
+\x17\x02\x9f\xe4\xebd\xc5i}\x90\x0d\x0bU\x07\xd9B\
+7rV\x84\xf9Qbn\xd2\xfb~f]\x1e\xe90\
+R\xbc\xd5\xcd\x8c\x123\xc3\xe2\x0b\xa6\xba\xeb\xdf01\
+\xbd\xf6?5\xc8\xbf\xfa\xd8\x9f\x17\xac\x15f\x81\xfdY\
+\x96\xcd-\xfd\x99\x90\xcf\xc4!\xfe\xfd\xdc\xa6\xee]}\
+\x17\xcc\xb3\xfcs\x9b3\x00\x7f\x03\xd9\x1a\xfb\xdb\xbb\xa7\
+\x8f\x07\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\xa0\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1f\x0d\xfc\
+R+\x9c\x00\x00\x00$IDAT\x08\xd7c`@\
+\x05s>\xc0XL\xc8\x5c&dY&d\xc5pN\
+\x8a\x00\x9c\x93\x22\x80a\x1a\x0a\x00\x00)\x95\x08\xaf\x88\
+\xac\xba4\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\xa6\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15;\xdc\
+;\x0c\x9b\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0cs> \x0b\xa4\x08020 \x0b\xa6\
+\x08000B\x98\x10\xc1\x14\x01\x14\x13P\xb5\xa3\x01\
+\x00\xc6\xb9\x07\x90]f\x1f\x83\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
\x00\x00\x00\xa0\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
@@ -178,31 +484,55 @@ HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
\x05\xff\xcf\xc3XL\xc8\x5c&dY&d\xc5p\x0e\
\xa3!\x9c\xc3h\x88a\x1a\x0a\x00\x00m\x84\x09u7\
\x9e\xd9#\x00\x00\x00\x00IEND\xaeB`\x82\
-\x00\x00\x00\x9e\
+\x00\x00\x01[\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x0dIDATh\x81\xed\
+\xda\xb1m\x02A\x10F\xe1w\xc7\xe2\x0a,\x87\xd3\x00\
+8 'r\x17\x14\x83\x037\xe3.\x1cQ\x0240\
+!\xc2\x0d`\x90\x1c\xec\x9e\x0c'Y\xf6\x09\x89\xffV\
+\x9a/cE0\x0f\x0e\x92\x9d\x86\xc2\xdd\x1f\x81W`\
+\x09\xcc\x81)\xe3\xf2\x05l\x81\x0d\xf0ff\x07\x80\x06\
+\xc0\xdd_\x80w\xe0I6\xde0{`ef\x1fM\
+\xf9\xe4w\xd43|g\x0f\xccZ\xf2cS\xdb\xf0\x90\
+g^'\xf23\xdfw\xbe\xf30\xff5\xe9\xbd^&\
+\xf2\x0f\xf6\xd2\xd9\xcc\xd2\x9d\x06\x1a\xc4\xddO\x5cG<\
+\xb7\x8c\xef\xdff\x88i\xab\x9e\xe0V\x11\xa0\x16\x01j\
+\x11\xa0\x16\x01j\x11\xa0\x16\x01j\x11\xa0\x16\x01j\x11\
+\xa0\x16\x01j\x11\xa0\x16\x01j\x11\xa0\x16\x01j\x11\xa0\
+\x16\x01j\x11\xa0\xd6\x92o\xc0kuL\xe4\xeb\xfb\xc5\
+\xc5\xe1\xa4\xdc\x06\x8eQ\xff\x9au\x9b\xc8\xbb\x07\x8b?\
+\xde8V\x9b\xfaW\x0d\xca\xd6\xc7\xaa\x1c\xd4\xa2[\xf6\
+84\xddI\xf9&\xd6\xfc\xac\xdb<\x88\x86\xfb\xcd\x91\
+\xebu\x9bO\x80oV\x016\x1ew\x0d\xa5B\x00\x00\
+\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\xa6\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15\x0f\xfd\
-\x8f\xf8.\x00\x00\x00\x22IDAT\x08\xd7c`\xc0\
-\x0d\xfe\x9f\x87\xb1\x18\x91\x05\x18\x0d\xe1BH*\x0c\x19\
-\x18\x18\x91\x05\x10*\xd1\x00\x00\xca\xb5\x07\xd2v\xbb\xb2\
-\xc5\x00\x00\x00\x00IEND\xaeB`\x82\
-\x00\x00\x00\xa5\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15;\xdc\
+;\x0c\x9b\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0cs> \x0b\xa4\x08020 \x0b\xa6\
+\x08000B\x98\x10\xc1\x14\x01\x14\x13P\xb5\xa3\x01\
+\x00\xc6\xb9\x07\x90]f\x1f\x83\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x00\x9f\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02bKGD\x00\x9cS4\xfc]\x00\x00\x00\x09p\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x0b\x02\x04m\
-\x98\x1bi\x00\x00\x00)IDAT\x08\xd7c`\xc0\
-\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18220 \x0b2\x1a\
-200B\x98\x10AFC\x14\x13P\xb5\xa3\x01\x00\
-\xd6\x10\x07\xd2/H\xdfJ\x00\x00\x00\x00IEND\
-\xaeB`\x82\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x14\x1f\xf9\
+#\xd9\x0b\x00\x00\x00#IDAT\x08\xd7c`\xc0\
+\x0d\xe6|\x80\xb1\x18\x91\x05R\x04\xe0B\x08\x15)\x02\
+\x0c\x0c\x8c\xc8\x02\x08\x95h\x00\x00\xac\xac\x07\x90Ne\
+4\xac\x00\x00\x00\x00IEND\xaeB`\x82\
\x00\x00\x07\xdd\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
@@ -331,81 +661,6 @@ zpp\xf0\xe3\x0e.\xa4\xd2\xae\xf0\x8a\xf7\x9a\xe3V\
q[s\x5c@H\xa5\xdda\x81\x0d\x9ek\x8e\xff\xfd\
\xcf?\xcc1\xe9\x01\x1c\x00sR-q\xe4J\x1bi\
\x00\x00\x00\x00IEND\xaeB`\x82\
-\x00\x00\x00\x9e\
-\x89\
-PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
-\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
-\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
-HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15\x0f\xfd\
-\x8f\xf8.\x00\x00\x00\x22IDAT\x08\xd7c`\xc0\
-\x0d\xfe\x9f\x87\xb1\x18\x91\x05\x18\x0d\xe1BH*\x0c\x19\
-\x18\x18\x91\x05\x10*\xd1\x00\x00\xca\xb5\x07\xd2v\xbb\xb2\
-\xc5\x00\x00\x00\x00IEND\xaeB`\x82\
-\x00\x00\x00\xa6\
-\x89\
-PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
-\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
-\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
-HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15;\xdc\
-;\x0c\x9b\x00\x00\x00*IDAT\x08\xd7c`\xc0\
-\x00\x8c\x0c\x0cs> \x0b\xa4\x08020 \x0b\xa6\
-\x08000B\x98\x10\xc1\x14\x01\x14\x13P\xb5\xa3\x01\
-\x00\xc6\xb9\x07\x90]f\x1f\x83\x00\x00\x00\x00IEN\
-D\xaeB`\x82\
-\x00\x00\x00\xa6\
-\x89\
-PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
-\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
-\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
-HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15;\xdc\
-;\x0c\x9b\x00\x00\x00*IDAT\x08\xd7c`\xc0\
-\x00\x8c\x0c\x0cs> \x0b\xa4\x08020 \x0b\xa6\
-\x08000B\x98\x10\xc1\x14\x01\x14\x13P\xb5\xa3\x01\
-\x00\xc6\xb9\x07\x90]f\x1f\x83\x00\x00\x00\x00IEN\
-D\xaeB`\x82\
-\x00\x00\x00\xa5\
-\x89\
-PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
-\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
-\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02bKGD\x00\x9cS4\xfc]\x00\x00\x00\x09p\
-HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x0b\x02\x04m\
-\x98\x1bi\x00\x00\x00)IDAT\x08\xd7c`\xc0\
-\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18220 \x0b2\x1a\
-200B\x98\x10AFC\x14\x13P\xb5\xa3\x01\x00\
-\xd6\x10\x07\xd2/H\xdfJ\x00\x00\x00\x00IEND\
-\xaeB`\x82\
-\x00\x00\x00\xa0\
-\x89\
-PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
-\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
-\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
-HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1f\x0d\xfc\
-R+\x9c\x00\x00\x00$IDAT\x08\xd7c`@\
-\x05s>\xc0XL\xc8\x5c&dY&d\xc5pN\
-\x8a\x00\x9c\x93\x22\x80a\x1a\x0a\x00\x00)\x95\x08\xaf\x88\
-\xac\xba4\x00\x00\x00\x00IEND\xaeB`\x82\
-\x00\x00\x00\x9f\
-\x89\
-PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
-\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
-\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
-\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
-HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x14\x1f\xf9\
-#\xd9\x0b\x00\x00\x00#IDAT\x08\xd7c`\xc0\
-\x0d\xe6|\x80\xb1\x18\x91\x05R\x04\xe0B\x08\x15)\x02\
-\x0c\x0c\x8c\xc8\x02\x08\x95h\x00\x00\xac\xac\x07\x90Ne\
-4\xac\x00\x00\x00\x00IEND\xaeB`\x82\
\x00\x00\x07\x06\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
@@ -534,6 +789,58 @@ HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
d``b`H\x11@\xe2 s\x19\x90\x8d@\x02\
\x00#\xed\x08\xafd\x9f\x0f\x15\x00\x00\x00\x00IEN\
D\xaeB`\x82\
+\x00\x00\x00\xa6\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1d\x00\xb0\
+\xd55\xa3\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x06\xfe\x9fg``B0\xa1\x1c\x08\x93\x81\x81\x09\xc1\
+d``b``4D\xe2 s\x19\x90\x8d@\x02\
+\x00d@\x09u\x86\xb3\xad\x9c\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x01v\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01(IDATh\x81\xed\
+\xda\xb1J\xc3P\x14\x87\xf1/7\xb7\xe0\xae\xf8\x00\x82\
+Su\xe8\xde\xc9ly\x80@\x1fF\x87\xfa\x22nB\
+\xdc\xb3\xc5\xa9/ \xb4]:t\x0f}\x82j\xc1\xe1\
+\xa6P\xb3h\x10\xfa\xcf\x85\xf3\xdbR:\x9c\xaf\xdcf\
+97\xa1\x95\xe5\xc5\x15\xf0\x04L\x81;`\xc4\xb0|\
+\x02K`\x01\xcc\xeb\xaa\xdc\x01$\x00Y^<\x00\xaf\
+\xc0\xb5l\xbc~\x1a`VW\xe5{\xd2\xfe\xf2+\xe2\
+\x19\xfe\xa8\x01\xc6\x8eplb\x1b\x1e\xc2\xcc\x8f\x9ep\
+\xe6\xbb\x0eg\x1e\xe6\xaf\xd2\xce\xf3\xd4\x13\xfe\xb0\xa7\x0e\
+uU\xfa3\x0d\xd4K\x96\x17_\xfc\x8c\xb8w\x0c\xef\
+m\xd3\xc7\xc8\xa9'\xf8/\x0bP\xb3\x005\x0bP\xb3\
+\x005\x0bP\xb3\x005\x0bP\xb3\x005\x0bP\xb3\x00\
+5\x0bP\xb3\x005\x0bP\xb3\x005\x0bP\xb3\x005\
+\x0bPs\x84\x0dx\xac\xf6\x9e\xb0\xbe\x9f\x9c|\x98\xb6\
+\xdb\xc0!\xea\xaeY\x97\x9ep\xf7`\xf2\xcb\x17\x87j\
+\xe1\x809am\x1f\x9b\x06xv\xed\xad\x8f\x19qE\
+\x1c/{\xecR\x80\xedf\xb5\xbd\xb9\x1d\xbf\x00\x17\x84\
+\xc5\xf7%\xc3;F{\xe0\x03x\x03\x8a\xba*\xd7\x00\
+\xdf\xa4\xb56\xa2\xca\x99tG\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
+\x00\x00\x00\xa6\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1d\x00\xb0\
+\xd55\xa3\x00\x00\x00*IDAT\x08\xd7c`\xc0\
+\x06\xfe\x9fg``B0\xa1\x1c\x08\x93\x81\x81\x09\xc1\
+d``b``4D\xe2 s\x19\x90\x8d@\x02\
+\x00d@\x09u\x86\xb3\xad\x9c\x00\x00\x00\x00IEN\
+D\xaeB`\x82\
\x00\x00\x00\xa0\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
@@ -546,11 +853,69 @@ HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
\x05\xff\xcf\xc3XL\xc8\x5c&dY&d\xc5p\x0e\
\xa3!\x9c\xc3h\x88a\x1a\x0a\x00\x00m\x84\x09u7\
\x9e\xd9#\x00\x00\x00\x00IEND\xaeB`\x82\
-\x00\x00\x07\xad\
+\x00\x00\x00\xa5\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
-\x00\x00\x07\x00\x00\x00\x0a\x08\x06\x00\x00\x00x\xccD\x0d\
-\x00\x00\x05RiTXtXML:com.\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\x9cS4\xfc]\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x0b\x02\x04m\
+\x98\x1bi\x00\x00\x00)IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18220 \x0b2\x1a\
+200B\x98\x10AFC\x14\x13P\xb5\xa3\x01\x00\
+\xd6\x10\x07\xd2/H\xdfJ\x00\x00\x00\x00IEND\
+\xaeB`\x82\
+\x00\x00\x00\x9e\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15\x0f\xfd\
+\x8f\xf8.\x00\x00\x00\x22IDAT\x08\xd7c`\xc0\
+\x0d\xfe\x9f\x87\xb1\x18\x91\x05\x18\x0d\xe1BH*\x0c\x19\
+\x18\x18\x91\x05\x10*\xd1\x00\x00\xca\xb5\x07\xd2v\xbb\xb2\
+\xc5\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x01\xef\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\xa1IDATh\x81\xed\
+\x9a\xbfN\xc2P\x14\x87\xbf\x96\xe2\xa4\x9bq\xbc\x8b\x1b\
+\xea\xc0\xe2D\x1c\x8c\x83\x83\xd1\x81\x89\x84\xd1\x17\xf0\x01\
+p\xc0\x07\xf0\x05\x1cI\x9c\xba\xa8#q0<\x02v\
+\x92\xe5\x8e\x04'\xe3\xc2\x9f\xc4\xa1m\x04B\x8b\x95\xc2\
+\xa1\xe4~[{\xee\xf0\xfb\x9a{o\x9a\x9cc\x11P\
+u\xbd]\xe0\x16(\x01\x87@\x9e\xf5b\x00\xb4\x81\x16\
+Po\x94\x0b=\x00\x0b\xa0\xeaz\xa7\xc0#\xb0'\x16\
+/\x19]\xa0\xd2(\x17^\xad\xe0\xcb\xbf\x93\x9d\xf0!\
+]\xe0\xc0\xc6\xdf6Y\x0b\x0f~\xe6\x9a\x83\xbf\xe7\xa7\
+\x19\xad8\xcc_\xc9M=\x97\x1c\xfc\x03;\xce\xa8Q\
+.8+\x0a\x94\x88\xaa\xeb\x0d\x99\x948\xb2Y\xbf\xdb\
+&\x09y[:\xc1\xa2\x18\x01i\x8c\x804F@\x1a\
+# \x8d\x11\x90\xc6\x08H3\xf7\xb7Yk}\x06\x1c\
+\x03\xdb\xcb\x8f3\xc1\x10\xf0\x80g\xa5\xd4w\xd4\xa2H\
+\x01\xad\xb5\x03\xb8\xc0e\xfa\xd9\x12\xd1\xd1Z\x9f+\xa5\
+>f\x15\xe3\xb6\xd0\x0d\xf2\xe1\x01\xf6\x81\x87\xa8b\x9c\
+\xc0E\xfaY\xfe\xcd\x89\xd6zgV!\xf3\x878N\
+\xe0ee)\xe6\xf3\xa6\x94\xfa\x9aU\x88\x13\xb8\x07\x9e\
+\x96\x93'\x11\x1d\xe0:\xaa\x18y\x0b)\xa5\x86\xc0U\
+f\xaf\xd1\x10\xa5T\x13h\xa6\x18,U6\xfa\x10g\
+\x02# \x8d\x11\x90\xc6\x08Hc\x04\xa41\x02\xd2l\
+\x84\xc0@:\xc4\x02\xf4\x1d\xfc\xf6}q\xece.\xe8\
+\x06\xae#\xd3m\xd6\xb6\x83?{P\x9c\xb3p]i\
+\xd9@\x1d\xbfm\x9f5\xba\xc0\x9d\x1dL}T\xc8\x96\
+D8\xec\xd1\xb3\xc27\xc1\xd0G\x8d\xdfq\x9b-\xa1\
+pQ\xf4\x99\x1c\xb7\xf9\x04\xf8\x01o\xedXc-\xfd\
+\xb2Y\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x070\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x0a\x00\x00\x00\x07\x08\x06\x00\x00\x001\xac\xdcc\
+\x00\x00\x04\xb0iTXtXML:com.\
adobe.xmp\x00\x00\x00\x00\x00\
xpacket begin=\x22\xef\
\xbb\xbf\x22 id=\x22W5M0MpCe\
@@ -565,10 +930,7 @@ w.w3.org/1999/02\
/22-rdf-syntax-n\
s#\x22>\x0a \x0a \x0a \
-\x0a branch_close<\
-/rdf:li>\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a <\
-/rdf:RDF>\x0a\x0a$\xe15\x97\x00\x00\
-\x01\x83iCCPsRGB IEC61\
-966-2.1\x00\x00(\x91u\x91\xcf+D\
-Q\x14\xc7?fh\xfc\x18\x8dba1e\x12\x16B\
-\x83\x12\x1b\x8b\x99\x18\x0a\x8b\x99Q~mf\x9ey3\
-j\xdex\xbd7\xd2d\xabl\xa7(\xb1\xf1k\xc1_\
-\xc0VY+E\xa4d\xa7\xac\x89\x0dz\xce\x9bQ#\
-\x99s;\xf7|\xee\xf7\xdes\xba\xf7\x5cpD\xd3\x8a\
-fV\xfaA\xcbd\x8dp(\xe0\x9b\x99\x9d\xf3\xb9\x9e\
-\xa8\xa2\x85\x1a:\xf1\xc6\x14S\x9f\x8c\x8cF)k\xef\
-\xb7T\xd8\xf1\xba\xdb\xaeU\xfe\xdc\xbfV\xb7\x980\x15\
-\xa8\xa8\x16\x1eVt#+<&<\xb1\x9a\xd5m\xde\
-\x12nRR\xb1E\xe1\x13\xe1.C.(|c\xeb\
-\xf1\x22?\xdb\x9c,\xf2\xa7\xcdF4\x1c\x04G\x83\xb0\
-/\xf9\x8b\xe3\xbfXI\x19\x9a\xb0\xbc\x9c6-\xbd\xa2\
-\xfc\xdc\xc7~\x89;\x91\x99\x8eHl\x15\xf7b\x12&\
-D\x00\x1f\xe3\x8c\x10d\x80^\x86d\x1e\xa0\x9b>z\
-dE\x99|\x7f!\x7f\x8ae\xc9Ud\xd6\xc9a\xb0\
-D\x92\x14Y\xbaD]\x91\xea\x09\x89\xaa\xe8\x09\x19i\
-rv\xff\xff\xf6\xd5T\xfb\xfb\x8a\xd5\xdd\x01\xa8z\xb4\
-\xac\xd7vpm\xc2W\xde\xb2>\x0e,\xeb\xeb\x10\x9c\
-\x0fp\x9e)\xe5/\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\
-\x9eu8\xbd(i\xf1m8\xdb\x80\xe6{=f\xc4\
-\x0a\x92S\xdc\xa1\xaa\xf0r\x0c\xf5\xb3\xd0x\x05\xb5\xf3\
-\xc5\x9e\xfd\xecst\x07\xd15\xf9\xaaK\xd8\xd9\x85\x0e\
-9\xefY\xf8\x06\x8e\xfdg\xf8\xfd\x8a\x18\x97\x00\x00\x00\
-\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\
-\x9c\x18\x00\x00\x00rIDAT\x18\x95m\xcf1\x0a\
-\xc2P\x14D\xd1\xe8\x02\xb4W\x08\xd6Ia\x99JC\
-t\x15\x82\xabI6(\xee@\x04\xdb\xa8\x95Xx,\
-\xf2\x09\xe1\xf3\x07\xa6\x9a\xfb\xe0\xbe\x0c\x1b\xb4Xdq\
-p0\xe4\x82U\x0a8\xe3\x8b\x1b\x8a\x14p\xc4\x1b=\
-v)`\x8b\x07>\xa8\xe6\xd1\xfe\x0b\x9d\x85\x8eW\x0d\
-^x\xa2\x9e\x0e\xa7 tG9\x1d\xf6\xe1\x95+\xd6\
-\xb1D\x8e\x0e\xcbX\xf0\x0fR\x8ay\x18\xdc\xe2\x02p\
-\x00\x00\x00\x00IEND\xaeB`\x82\
-\x00\x00\x00\xa6\
+-31T12:33:14+02:\
+00\x22>\x0a \x0a \x0a \x0a \x0a \x0a \x0a \x0a\x0aH\x8b[^\x00\x00\x01\x83\
+iCCPsRGB IEC6196\
+6-2.1\x00\x00(\x91u\x91\xcf+DQ\x14\
+\xc7?fh\xfc\x18\x8dba1e\x12\x16B\x83\x12\
+\x1b\x8b\x99\x18\x0a\x8b\x99Q~mf\x9ey3j\xde\
+x\xbd7\xd2d\xabl\xa7(\xb1\xf1k\xc1_\xc0V\
+Y+E\xa4d\xa7\xac\x89\x0dz\xce\x9bQ#\x99s\
+;\xf7|\xee\xf7\xdes\xba\xf7\x5cpD\xd3\x8afV\
+\xfaA\xcbd\x8dp(\xe0\x9b\x99\x9d\xf3\xb9\x9e\xa8\xa2\
+\x85\x1a:\xf1\xc6\x14S\x9f\x8c\x8cF)k\xef\xb7T\
+\xd8\xf1\xba\xdb\xaeU\xfe\xdc\xbfV\xb7\x980\x15\xa8\xa8\
+\x16\x1eVt#+<&<\xb1\x9a\xd5m\xde\x12n\
+RR\xb1E\xe1\x13\xe1.C.(|c\xeb\xf1\x22\
+?\xdb\x9c,\xf2\xa7\xcdF4\x1c\x04G\x83\xb0/\xf9\
+\x8b\xe3\xbfXI\x19\x9a\xb0\xbc\x9c6-\xbd\xa2\xfc\xdc\
+\xc7~\x89;\x91\x99\x8eHl\x15\xf7b\x12&D\x00\
+\x1f\xe3\x8c\x10d\x80^\x86d\x1e\xa0\x9b>zdE\
+\x99|\x7f!\x7f\x8ae\xc9Ud\xd6\xc9a\xb0D\x92\
+\x14Y\xbaD]\x91\xea\x09\x89\xaa\xe8\x09\x19irv\
+\xff\xff\xf6\xd5T\xfb\xfb\x8a\xd5\xdd\x01\xa8z\xb4\xac\xd7\
+vpm\xc2W\xde\xb2>\x0e,\xeb\xeb\x10\x9c\x0fp\
+\x9e)\xe5/\xef\xc3\xe0\x9b\xe8\xf9\x92\xd6\xb6\x07\x9eu\
+8\xbd(i\xf1m8\xdb\x80\xe6{=f\xc4\x0a\x92\
+S\xdc\xa1\xaa\xf0r\x0c\xf5\xb3\xd0x\x05\xb5\xf3\xc5\x9e\
+\xfd\xecst\x07\xd15\xf9\xaaK\xd8\xd9\x85\x0e9\xef\
+Y\xf8\x06\x8e\xfdg\xf8\xfd\x8a\x18\x97\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x97IDAT\x18\x95m\xcf\xb1j\x02A\
+\x14\x85\xe1o\xb7\xb6\xd0'H=Vi\x03\xb1\xb4H\
+;l\xa5\xf19\xf6Y\x02VB\xbaa\x0a\x0b;\x1b\
+\x1bkA\x18\x02)m\xe3\xbe\x82\xcd\x06\x16\xd9\xdb\xdd\
+\x9f\xff\x5c\xee\xa9b*\x13Ls\x13nF&\xa6\xf2\
+\x82\xaeF\x8b\xdf\x98\xca\xfb\x88\xb4\xc0\x0f\xda\x1a[t\
+\xd8\xc7T\xc2@\x9ac\x8f?|U=|\xc5\x09w\
+\xbc\xa1\xc2\x193,r\x13.\xd5\xe0\xc2\x12\x07\x5cQ\
+#\xe0#7\xe1\xa8O\x0e\x7f\xda`\xd7\xaf\x9f\xb9\x09\
+\xdfc\x05\xff\xe5uLe\xf5\xcc\x1f\x0d3,\x83\xb6\
+\x06D\x83\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x01\xdc\
\x89\
PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
-\x00\x00\x06\x00\x00\x00\x09\x08\x04\x00\x00\x00\xbb\x93\x95\x16\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x8eIDATh\x81\xed\
+\x9a\xafN\xc3P\x14\x87\xbfn\x1d\x0a\x1cA\x1e\x83\x04\
+\xc4\x0cjA\x10\x04\x82\x80\x9e\xe7\x05x\x80!x\x01\
+^\x00\x8f\xc2\x00rA\x90=\xc2@1s\xe42\x14\
+\xc1\xecO\x82h\x1b\xb6e\xed(\xebv\xda\xe5~\xae\
+\xf7\x5c\xf1\xfb\xda{o\x9a\xdc\xe3\x11\xa2\xaa\xdb\xc05\
+P\x03\xf6\x81\x0a\xf9b\x00\xb4\x81\x16p#\x22=\x00\
+\x0f@U\x8f\x81{`\xc7,^:\xba@]D^\
+\xbc\xf0\xcd\xbfQ\x9c\xf0\x11]`\xafD\xb0l\x8a\x16\
+\x1e\x82\xcc\x0d\x9f`\xcdO3Zq\x98\xbfR\x9ez\
+\xae\xf9\x04\x1bv\x9c\x91\x88\xf8+\x0a\x94\x0aU\x1d2\
+)qP\x22\x7f\xa7M\x1a*%\xeb\x04\x8b\xe2\x04\xac\
+q\x02\xd68\x01k\x9c\x805N\xc0\x1a'`\xcd\xdc\
+\xdffU=\x01\x0e\x81\xcd\xe5\xc7\x99`\x08\xbc\x03O\
+\x22\xf2\x1d7)V@U}\xe0\x018\xcf>[*\
+:\xaaz*\x22\x1f\xb3\x8aIK\xe8\x0a\xfb\xf0\x00\xbb\
+\xc0]\x5c1I\xe0,\xfb,\xff\xe6HU\xb7f\x15\
+\x0a\xbf\x89\x93\x04\x9eW\x96b>\xaf\x22\xf25\xab\x90\
+$p\x0b<.'O*:\xc0e\x5c1\xf6\x14\x12\
+\x91!pQ\xd8c4BD\x9a@3\xc3`\x99\xb2\
+\xd6\x9b\xb8\x108\x01k\x9c\x805N\xc0\x1a'`\x8d\
+\x13\xb0f-\x04\x06\xd6!\x16\xa0\xef\x13\x5c\xdfW\xc7\
+\x06\xcb\xe1m`\x1e\x99\xbefm\xfb\x04\xbd\x07\xd59\
+\x13\xf3J\xab\xf8\xad\x06a\xd7G=\x1c(\x0aQ\xb3\
+G\xcf\x8bF\xc2/\xd1\xe0\xb7\xddf\xc3(\x5c\x1c}\
+&\xdbm>\x01~\x00%\xf8ZCUN:\x7f\x00\
+\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x05~\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x01\x00\x00\x00\x01\x08\x06\x00\x00\x00\x1f\x15\xc4\x89\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x05\x17iTXtXML\
+:com.adobe.xmp\x00\x00\
+\x00\x00\x00 \
+ \x07b\x0c\x81\x00\x00\x00\x0dIDAT\
+\x08\x1dc\xf8\xff\xff?\x03\x00\x08\xfc\x02\xfe\xe6\x0c\xff\
+\xab\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x00\x9e\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x09p\
HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
-\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x14\x1d\x00\xb0\
-\xd55\xa3\x00\x00\x00*IDAT\x08\xd7c`\xc0\
-\x06\xfe\x9fg``B0\xa1\x1c\x08\x93\x81\x81\x09\xc1\
-d``b``4D\xe2 s\x19\x90\x8d@\x02\
-\x00d@\x09u\x86\xb3\xad\x9c\x00\x00\x00\x00IEN\
-D\xaeB`\x82\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x08\x15\x0f\xfd\
+\x8f\xf8.\x00\x00\x00\x22IDAT\x08\xd7c`\xc0\
+\x0d\xfe\x9f\x87\xb1\x18\x91\x05\x18\x0d\xe1BH*\x0c\x19\
+\x18\x18\x91\x05\x10*\xd1\x00\x00\xca\xb5\x07\xd2v\xbb\xb2\
+\xc5\x00\x00\x00\x00IEND\xaeB`\x82\
+\x00\x00\x01\xe1\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x01\x93IDATh\x81\xed\
+\x9a;N\xc3@\x10\x86\xbfq\x1c*\xe8\x10\xe56\x94\
+\xd0\xa4\xa1\x8a(\x22\x0a\x0aD\x9f\x9e\x0bp\x80Pp\
+\x01.\xc0\x15h\x80\x13\xa0\x1c!P\x91f\xbbD\xa1\
+B4yh(l\x1e\xb1\xfcH\x08\xc9\xda\xd2~\x9d\
+w\x5c\xfc\x9f\xb3\x1e9\xda\x11bTu\x17\xb8\x02\x9a\
+\xc0!P\xa7\x5cL\x80\x1e\xd0\x05\xaeEd\xf4]Q\
+\xd5\x96\xaa\x0e\xb4:\x0cT\xb5\x05 \x1a=\xf9g`\
+\xcf\xc5c]\x81!p\x10\x10m\x9b\xaa\x85\x87(s\
+'$\xda\xf3If\x1b\x0e\xb3(\xb5\xc4uSTu\
+\xcc\xfc\x0b;\x13\x91p\x83\xa1\x16FU\xa7\xccKL\
+\x02\xca\xd7m\x96\xa1\x1e\xb8N\xb0*^\xc05^\xc0\
+5^\xc05^\xc05^\xc05^\xc05\x85\x9f\xcd\
+\xd6\xda\x13\xe0\x08\xd8^\x7f\x9c9\xa6\xc0\x0b\xf0`\x8c\
+\xf9\xc8\xbaITU\x13k3\x11\x09\xad\xb5!p\x07\
+\x9c\xaf1\xe4\x22\xf4\x81Sc\xcck\xca\xff\x81\xdc-\
+t\x89\xfb\xf0\x00\xfb\xc0mV1O\xe0\xec\xff\xb3\xfc\
+\x99ck\xedNZ\xa1\xf2/q\x9e\xc0\xe3\xc6R\x14\
+\xf3d\x8cyO+\xe4\x09\xdc\x00\xf7\xeb\xc9\xb3\x14}\
+\xe0\x22\xab\x98\xd9\x85\xbe.\xca\xd4F\xd3\xbaP\xa1@\
+\x99X\xb6\x8dV\x02/\xe0\x1a/\xe0\x1a/\xe0\x1a/\
+\xe0\x1a/\xe0\x1a/\xe0\x9a\x80\xe8\x04\xbc\xaa\x8cC\xa2\
+\xe3\xfb\xc6\xaf\xc5Z\xfc\xd9ZF\x92\xc7\xac\xbd\x90h\
+\xf6\xa0QpcY\xe9V\x7f\xd4 \x9e\xfah\xc7\x0b\
+Ua\x08\xb4Ed$_+\xf1/\xd1\xe1g\xdcf\
+\xcbQ\xb8,\xc6\xcc\x8f\xdb\xbc\x01|\x02mw#\xb3\
+\xd4\x95Sv\x00\x00\x00\x00IEND\xaeB`\x82\
+\
+\x00\x00\x00\xa5\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x00\x09\x00\x00\x00\x06\x08\x04\x00\x00\x00\xbb\xce|N\
+\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\
+\x02bKGD\x00\x9cS4\xfc]\x00\x00\x00\x09p\
+HYs\x00\x00\x0b\x13\x00\x00\x0b\x13\x01\x00\x9a\x9c\x18\
+\x00\x00\x00\x07tIME\x07\xdc\x08\x17\x0b\x02\x04m\
+\x98\x1bi\x00\x00\x00)IDAT\x08\xd7c`\xc0\
+\x00\x8c\x0c\x0c\xff\xcf\xa3\x08\x18220 \x0b2\x1a\
+200B\x98\x10AFC\x14\x13P\xb5\xa3\x01\x00\
+\xd6\x10\x07\xd2/H\xdfJ\x00\x00\x00\x00IEND\
+\xaeB`\x82\
+\x00\x00\x04\x12\
+\x89\
+PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\
+\x00\x000\x00\x00\x000\x08\x06\x00\x00\x00W\x02\xf9\x87\
+\x00\x00\x00\x09pHYs\x00\x00\x0b\x13\x00\x00\x0b\x13\
+\x01\x00\x9a\x9c\x18\x00\x00\x03\xc4IDATh\x81\xed\
+\x9a_\x88\x94U\x18\xc6\x7f3;\x1a\x0b\x19\x15f\x17\
+\xca\x03IPM\x09J7Q^D)&f\x05[\
+\xb9\xd2\x82\xb1P\x17\x91$t\x11\x08z\xa1D\x17]\
+T\x94\x04\xd6E\xe1\xa2\x15L\xb1\x18\x99\xfd%\xd8\x08\
+\x82nj]\xa4\x22\xe2\x81\xa8\x96\xd5(\xe8\x9f\xae\xd5\
+\xc5\xf9\xb6\xc6\xd9\xf9\xbesf\xc6vf\xc0\xdf\xdd\x9c\
+\xef=\xefy\x9fs\xe6\x9c\xf3~\xdf9%2Fj\
+SK\x81\xdd\xc0Z\xe0:`\x11\xbd\xc5i`\x12\x98\
+\x00\xf6\x8c\x0dUg\x00J\x00#\xb5\xa9[\x80C\xc0\
+\xb2\xae\x85\xd7\x1a\xd3\xc0\xd6\xb1\xa1\xea\x07\xa5\xac\xe7\x8f\
+\xd1?\xc1\xcf1\x0d\x5c[&\xfcm\xfa-x\x081\
+\xef\xaa\x10\xfe\xf3\x8d\x9cY\xe0`R\x19h\xf8\xbd\xb6\
+B\x98\xb0\xf5\x9c\x19\x1b\xaaV\x16(\xa0\x96\x18\xa9M\
+\xcdr\xb6\x88Uezo\xb5i\x85E\xe5nG\xd0\
+)\xe7\x05t\x9b\xf3\x02\xfe\x0fl\xdfc\xfb\x90\xed\xf5\
+1\xdb\x9e\x13`\xfb\x11\xe05`\x188j{\x9f\xed\
+\xdc\x95\xb2\xa7\x04\xd8\x1e\x06\x9e\xaa+*\x01\x0f\x01/\
+\xe4\xd5\xe9\x19\x01\xb6\xd7\x01/\x93%\x98\x0dl\xb3\xfd\
+h\xb3z=!\xc0\xf6\xf5\xc0\xeb\xc0\xe2\x02\xb3\x8d\xcd\
+\x0a\xbb.\xc0\xf6\x95\xc0[\xc0\x92\x88\xe9\x8b\xcd\x0a\xbb\
+*\xc0\xf6\xe5\xc0Q\xe2\xd9\xf0\x93\x92^i\xf6\xa0k\
+\x02l/\x01\x8e\x00+#\xa6\x07\x80\xc7\xf2\x1evE\
+\x80\xed\xc5\xc0\x1b\xc0\x9a\x88\xe9\xdb\xc0\xa8\xa4\xbf\xf3\x0c\
+\x16\x5c\x80\xed2\xa1Wo\x8d\x98~\x0a\xdc-i\xb6\
+\xc8\xa8\x1b#\xf04po\xc4\xe6K`\x93\xa4_c\
+\xce\x92\x04\xd8.e=\xd7\x11\xb6w\x02\xdb#f\xdf\
+\x03\x1b$\xcd\xa4\xf8,\x0c*\x0b|\x07\xf0;0i\
+{UR\xa4\xcd}\x8d\x02\x8fG\xcc~\x06n\x93\xf4\
+m\xaa\xdf\x5c\x01Y\xfe1N\xd8\xda/\x00\xae\x01\xde\
+\xb3}U\xaa\xf3:_\x9b\x81\xfd\x11\xb3?\x81;%\
+}\xde\x8a\xef\xa2\x11x\x0e\xd8\xdcP\xb6\x0cx\xdf\xf6\
+\x15\xa9\x0d\xd8\xbe\x11x\x95\xf9/\xe4\xf5\xfc\x05\xdc'\
+\xe9\xa3T\xbfs4\x15\x90\xf5\xd8\x839u\x96\x13F\
+by\xcc\xb9\xed*p\x18\x18\x8c\x98>,\xa9\x16\xf3\
+\xd7\x8c\xbc\x11\xb84Ro%A\xc4ey\x06\xb6W\
+\x10v\xd9\x98\xaf\xbd\x92\x9e\x8f\xd8\xe4\x92'\xe0 a\
+\x1d.\xe2j\xe0\x1d\xdb\x177>\xb0}\x09!\xf8\x15\
+\x11\x1f\xfb%\xed\x8eFY@S\x01\x92N\x13\xb2\xbf\
+/\x22\xf5W\x03Gl_8W`{\x90\xf0\xb7\xa9\
+F\xea\x8e\x13r\xfd\x8e\xc8\x9d\xc4\x92N\x02\xeb\x81\xaf\
+\x22>n\x00\x0e\xdb\x1e\xb4=@\x98\xb07E\xeaL\
+\x00\xc3\x92:\xfe\x02X\xb8\x0fH\xfa\x11X\x078\xe2\
+\xe7f\xa0FX*\x1bW\xaeF&\x81;$\xfd\x91\
+\x18c!\xd1\xddU\x92\x09y\xcb\x0f\x11\xd3\x8d\xc0h\
+\xc4\xc6\x84\x8d\xea\xa7\xb4\xf0\xe2$\xa5\x07\x92\xbe&\x8c\
+\xc4\x89\x0e\xda:IH\x11\xbe\xeb\xc0\xc7<\x92\xf3\x1b\
+I\xc7\x80\x0d\xc0/m\xb4\xf3\x1bp\xbb\xa4\xe3m\xd4\
+-\xa4\xa5\x04M\xd2g\xc0\xa6,\xa0Tf\x81-\x92\
+>i\xa5\xadTZ\xce0%M\x00w\x11r\x97\x14\
+\x1e\x90\xf4f\xab\xed\xa4\xd2V\x8a,\xe9]`\x0b\xa1\
+w\x8b\xd8)\xe9\xa5v\xdaH\xa5\xed\x1c_\xd28\xb0\
+\x8d\x90\x885\xe3YIO\xb4\xeb?\x95\x8e^R$\
+\x1d\x04\xeeg\xfe\x9c\xd8\x07\xec\xe8\xc4w*\x1d\x1f%\
+I:`\xfbc\xc2\x06v\x11\xf0a6O\x16\x84s\
+r\x16&\xe9\x1b\xe0\x99s\xe1\xabU\xca\x84\x13\xf0~\
+\xe5T\x85\x90\x9b\xd4\x7f\x9f\x19\xc8N\x03{\x91\xc6\xb7\
+\xba\xc9\x0a!3l\xfc\xc0T\xf4\xfa\xd7KL\x94\x81\
+=\x84c\xfb~c\x1a\xd8[\xcen}l\xa5\xbfD\
+\xcc]\xf6\x98\xf9\xf70!\xbb\xf4\xb1\x8b\xff\xae\xdb\x14\
+}\xab\xef\x06\xa78\xfb\xba\xcd\x09\x80\x7f\x00\xc4\x1e\x10\
+)3[\x85\xf7\x00\x00\x00\x00IEND\xaeB`\
+\x82\
"
qt_resource_name = b"\
@@ -696,71 +1288,85 @@ qt_resource_name = b"\
\x00i\
\x00m\x00a\x00g\x00e\x00s\
\x00\x0e\
-\x0e\xde\xfa\xc7\
-\x00l\
-\x00e\x00f\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\x00g\
-\x00\x11\
-\x01\x1f\xc3\x87\
+\x04\xa2\xfc\xa7\
\x00d\
-\x00o\x00w\x00n\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\x00.\x00p\x00n\x00g\
+\x00o\x00w\x00n\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\x00g\
+\x00\x11\
+\x0b\xda0\xa7\
+\x00b\
+\x00r\x00a\x00n\x00c\x00h\x00_\x00c\x00l\x00o\x00s\x00e\x00d\x00.\x00p\x00n\x00g\
\
+\x00\x1d\
+\x09\x07\x81\x07\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00c\x00h\x00e\x00c\x00k\x00e\x00d\x00_\
+\x00d\x00i\x00s\x00a\x00b\x00l\x00e\x00d\x00.\x00p\x00n\x00g\
+\x00\x1c\
+\x08?\xdag\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00u\x00n\x00c\x00h\x00e\x00c\x00k\x00e\
+\x00d\x00_\x00f\x00o\x00c\x00u\x00s\x00.\x00p\x00n\x00g\
+\x00#\
+\x06\xf2\x1aG\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00i\x00n\x00d\x00e\x00t\x00e\x00r\x00m\
+\x00i\x00n\x00a\x00t\x00e\x00_\x00d\x00i\x00s\x00a\x00b\x00l\x00e\x00d\x00.\x00p\
+\x00n\x00g\
\x00\x12\
\x01.\x03'\
\x00c\
\x00o\x00m\x00b\x00o\x00b\x00o\x00x\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\
\x00g\
-\x00\x12\
-\x05\x8f\x9d\x07\
-\x00b\
-\x00r\x00a\x00n\x00c\x00h\x00_\x00o\x00p\x00e\x00n\x00_\x00o\x00n\x00.\x00p\x00n\
-\x00g\
-\x00\x12\
-\x03\x8d\x04G\
-\x00r\
-\x00i\x00g\x00h\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\x00.\x00p\x00n\
-\x00g\
-\x00\x0f\
-\x01s\x8b\x07\
-\x00u\
-\x00p\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\x00.\x00p\x00n\x00g\
-\x00\x1b\
-\x03Z2'\
+\x00\x1c\
+\x0e<\xde\x07\
\x00c\
-\x00o\x00m\x00b\x00o\x00b\x00o\x00x\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\
-\x00s\x00a\x00b\x00l\x00e\x00d\x00.\x00p\x00n\x00g\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00u\x00n\x00c\x00h\x00e\x00c\x00k\x00e\
+\x00d\x00_\x00h\x00o\x00v\x00e\x00r\x00.\x00p\x00n\x00g\
\x00\x14\
-\x04^-\xa7\
-\x00b\
-\x00r\x00a\x00n\x00c\x00h\x00_\x00c\x00l\x00o\x00s\x00e\x00d\x00_\x00o\x00n\x00.\
-\x00p\x00n\x00g\
-\x00\x0c\
-\x06\xe6\xe6g\
-\x00u\
-\x00p\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\x00g\
-\x00\x17\
-\x0c\xabQ\x07\
-\x00d\
-\x00o\x00w\x00n\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\x00l\
-\x00e\x00d\x00.\x00p\x00n\x00g\
-\x00\x15\
-\x03'rg\
+\x07\xec\xd1\xc7\
\x00c\
-\x00o\x00m\x00b\x00o\x00b\x00o\x00x\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\
-\x00.\x00p\x00n\x00g\
-\x00\x0e\
-\x04\xa2\xfc\xa7\
-\x00d\
-\x00o\x00w\x00n\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\x00g\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00c\x00h\x00e\x00c\x00k\x00e\x00d\x00.\
+\x00p\x00n\x00g\
+\x00\x1a\
+\x05\x11\xe0\xe7\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00c\x00h\x00e\x00c\x00k\x00e\x00d\x00_\
+\x00f\x00o\x00c\x00u\x00s\x00.\x00p\x00n\x00g\
\x00\x18\
\x03\x8e\xdeg\
\x00r\
\x00i\x00g\x00h\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\
\x00l\x00e\x00d\x00.\x00p\x00n\x00g\
\x00\x15\
+\x03'rg\
+\x00c\
+\x00o\x00m\x00b\x00o\x00b\x00o\x00x\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\
+\x00.\x00p\x00n\x00g\
+\x00\x12\
+\x03\x8d\x04G\
+\x00r\
+\x00i\x00g\x00h\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\x00.\x00p\x00n\
+\x00g\
+\x00\x16\
+\x01u\xcc\x87\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00u\x00n\x00c\x00h\x00e\x00c\x00k\x00e\
+\x00d\x00.\x00p\x00n\x00g\
+\x00\x17\
+\x0c\xabQ\x07\
+\x00d\
+\x00o\x00w\x00n\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\x00l\
+\x00e\x00d\x00.\x00p\x00n\x00g\
+\x00\x15\
\x0f\xf3\xc0\x07\
\x00u\
\x00p\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\x00l\x00e\x00d\
\x00.\x00p\x00n\x00g\
+\x00\x14\
+\x04^-\xa7\
+\x00b\
+\x00r\x00a\x00n\x00c\x00h\x00_\x00c\x00l\x00o\x00s\x00e\x00d\x00_\x00o\x00n\x00.\
+\x00p\x00n\x00g\
\x00\x0f\
\x06S%\xa7\
\x00b\
@@ -770,45 +1376,109 @@ qt_resource_name = b"\
\x00l\
\x00e\x00f\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\x00s\x00a\x00b\x00l\
\x00e\x00d\x00.\x00p\x00n\x00g\
-\x00\x0f\
-\x02\x9f\x05\x87\
-\x00r\
-\x00i\x00g\x00h\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\x00g\
-\x00\x11\
-\x0b\xda0\xa7\
-\x00b\
-\x00r\x00a\x00n\x00c\x00h\x00_\x00c\x00l\x00o\x00s\x00e\x00d\x00.\x00p\x00n\x00g\
-\
+\x00\x0e\
+\x0e\xde\xfa\xc7\
+\x00l\
+\x00e\x00f\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\x00g\
+\x00\x1f\
+\x0a\xae'G\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00u\x00n\x00c\x00h\x00e\x00c\x00k\x00e\
+\x00d\x00_\x00d\x00i\x00s\x00a\x00b\x00l\x00e\x00d\x00.\x00p\x00n\x00g\
\x00\x11\
\x00\xb8\x8c\x07\
\x00l\
\x00e\x00f\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\x00.\x00p\x00n\x00g\
\
+\x00\x0f\
+\x02\x9f\x05\x87\
+\x00r\
+\x00i\x00g\x00h\x00t\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\x00g\
+\x00\x1b\
+\x03Z2'\
+\x00c\
+\x00o\x00m\x00b\x00o\x00b\x00o\x00x\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00d\x00i\
+\x00s\x00a\x00b\x00l\x00e\x00d\x00.\x00p\x00n\x00g\
+\x00\x0f\
+\x01s\x8b\x07\
+\x00u\
+\x00p\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\x00.\x00p\x00n\x00g\
+\x00 \
+\x0f\xd4\x1b\xc7\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00i\x00n\x00d\x00e\x00t\x00e\x00r\x00m\
+\x00i\x00n\x00a\x00t\x00e\x00_\x00h\x00o\x00v\x00e\x00r\x00.\x00p\x00n\x00g\
+\x00\x12\
+\x05\x8f\x9d\x07\
+\x00b\
+\x00r\x00a\x00n\x00c\x00h\x00_\x00o\x00p\x00e\x00n\x00_\x00o\x00n\x00.\x00p\x00n\
+\x00g\
+\x00\x1a\
+\x01\x87\xaeg\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00i\x00n\x00d\x00e\x00t\x00e\x00r\x00m\
+\x00i\x00n\x00a\x00t\x00e\x00.\x00p\x00n\x00g\
+\x00\x0f\
+\x0c\xe2hg\
+\x00t\
+\x00r\x00a\x00n\x00s\x00p\x00a\x00r\x00e\x00n\x00t\x00.\x00p\x00n\x00g\
+\x00\x0c\
+\x06\xe6\xe6g\
+\x00u\
+\x00p\x00_\x00a\x00r\x00r\x00o\x00w\x00.\x00p\x00n\x00g\
+\x00 \
+\x09\xd7\x1f\xa7\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00i\x00n\x00d\x00e\x00t\x00e\x00r\x00m\
+\x00i\x00n\x00a\x00t\x00e\x00_\x00f\x00o\x00c\x00u\x00s\x00.\x00p\x00n\x00g\
+\x00\x11\
+\x01\x1f\xc3\x87\
+\x00d\
+\x00o\x00w\x00n\x00_\x00a\x00r\x00r\x00o\x00w\x00_\x00o\x00n\x00.\x00p\x00n\x00g\
+\
+\x00\x1a\
+\x03\x0e\xe4\x87\
+\x00c\
+\x00h\x00e\x00c\x00k\x00b\x00o\x00x\x00_\x00c\x00h\x00e\x00c\x00k\x00e\x00d\x00_\
+\x00h\x00o\x00v\x00e\x00r\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\x02\x00\x00\x00\x01\x00\x00\x00\x02\
-\x00\x00\x00\x16\x00\x02\x00\x00\x00\x13\x00\x00\x00\x03\
-\x00\x00\x03,\x00\x00\x00\x00\x00\x01\x00\x00&\xf0\
-\x00\x00\x00J\x00\x00\x00\x00\x00\x01\x00\x00\x00\xaa\
-\x00\x00\x00r\x00\x00\x00\x00\x00\x01\x00\x00\x01S\
-\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x09\xd5\
-\x00\x00\x02\xe0\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x9b\
-\x00\x00\x01\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x14M\
-\x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x00\x0aw\
-\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x01\x00\x00\x091\
-\x00\x00\x02\x22\x00\x00\x00\x00\x00\x01\x00\x00\x15\xa0\
-\x00\x00\x01P\x00\x00\x00\x00\x00\x01\x00\x00\x0b \
-\x00\x00\x02\x00\x00\x00\x00\x00\x00\x01\x00\x00\x14\xf7\
-\x00\x00\x00\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x01\xfd\
-\x00\x00\x02\x88\x00\x00\x00\x00\x00\x01\x00\x00\x16\xe7\
-\x00\x00\x01~\x00\x00\x00\x00\x00\x01\x00\x00\x13\x01\
-\x00\x00\x03\x04\x00\x00\x00\x00\x00\x01\x00\x00\x1f?\
-\x00\x00\x02\xac\x00\x00\x00\x00\x00\x01\x00\x00\x1d\xf1\
-\x00\x00\x01\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x13\xa3\
+\x00\x00\x00\x16\x00\x02\x00\x00\x00 \x00\x00\x00\x03\
+\x00\x00\x04\x1e\x00\x00\x00\x00\x00\x01\x00\x000\x5c\
+\x00\x00\x05\xfc\x00\x00\x00\x00\x00\x01\x00\x00F\x05\
+\x00\x00\x01<\x00\x00\x00\x00\x00\x01\x00\x00\x0f\xec\
+\x00\x00\x04\xa6\x00\x00\x00\x00\x00\x01\x00\x002S\
+\x00\x00\x02\x9c\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xf7\
+\x00\x00\x05:\x00\x00\x00\x00\x00\x01\x00\x00<\x1c\
+\x00\x00\x04F\x00\x00\x00\x00\x00\x01\x00\x001\x06\
+\x00\x00\x06$\x00\x00\x00\x00\x00\x01\x00\x00F\xae\
+\x00\x00\x02B\x00\x00\x00\x00\x00\x01\x00\x00\x1a\xa9\
+\x00\x00\x04j\x00\x00\x00\x00\x00\x01\x00\x001\xaa\
+\x00\x00\x02r\x00\x00\x00\x00\x00\x01\x00\x00\x1bS\
+\x00\x00\x02\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x1a\x05\
+\x00\x00\x032\x00\x00\x00\x00\x00\x01\x00\x00\x1e\xa3\
\x00\x00\x00(\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x02X\x00\x00\x00\x00\x00\x01\x00\x00\x16D\
+\x00\x00\x01\xd2\x00\x00\x00\x00\x00\x01\x00\x00\x16\x02\
+\x00\x00\x05\x10\x00\x00\x00\x00\x00\x01\x00\x004\xe8\
+\x00\x00\x03`\x00\x00\x00\x00\x00\x01\x00\x00&\x84\
+\x00\x00\x05\x98\x00\x00\x00\x00\x00\x01\x00\x00C~\
+\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x0d\xec\
+\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x12\x03\
+\x00\x00\x00\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x91\
+\x00\x00\x00r\x00\x00\x00\x00\x00\x01\x00\x00\x08Z\
+\x00\x00\x05\xb6\x00\x00\x00\x00\x00\x01\x00\x00D \
+\x00\x00\x03\xda\x00\x00\x00\x00\x00\x01\x00\x00.\xe2\
+\x00\x00\x00J\x00\x00\x00\x00\x00\x01\x00\x00\x00\xa9\
+\x00\x00\x03\x84\x00\x00\x00\x00\x00\x01\x00\x00-\x8e\
+\x00\x00\x02\xce\x00\x00\x00\x00\x00\x01\x00\x00\x1dV\
+\x00\x00\x05t\x00\x00\x00\x00\x00\x01\x00\x00=\xfc\
+\x00\x00\x01f\x00\x00\x00\x00\x00\x01\x00\x00\x10\x96\
+\x00\x00\x03\xb8\x00\x00\x00\x00\x00\x01\x00\x00.8\
+\x00\x00\x04\xca\x00\x00\x00\x00\x00\x01\x00\x002\xf5\
+\x00\x00\x03\x02\x00\x00\x00\x00\x00\x01\x00\x00\x1e\x00\
"
diff --git a/openpype/style/resources.qrc b/openpype/style/resources.qrc
index e2e69711f4..077f074edb 100644
--- a/openpype/style/resources.qrc
+++ b/openpype/style/resources.qrc
@@ -19,6 +19,18 @@
images/up_arrow.png
images/up_arrow_disabled.png
images/up_arrow_on.png
+ images/checkbox_checked.png
+ images/checkbox_checked_hover.png
+ images/checkbox_checked_focus.png
+ images/checkbox_checked_disabled.png
+ images/checkbox_unchecked.png
+ images/checkbox_unchecked_hover.png
+ images/checkbox_unchecked_focus.png
+ images/checkbox_unchecked_disabled.png
+ images/checkbox_indeterminate.png
+ images/checkbox_indeterminate_hover.png
+ images/checkbox_indeterminate_focus.png
+ images/checkbox_indeterminate_disabled.png
images/transparent.png
diff --git a/openpype/style/style.css b/openpype/style/style.css
index 0dd7b27fe4..1e457f97f6 100644
--- a/openpype/style/style.css
+++ b/openpype/style/style.css
@@ -57,9 +57,67 @@ QAbstractSpinBox:focus, QLineEdit:focus, QPlainTextEdit:focus, QTextEdit:focus{
border-color: {color:border-focus};
}
-/* Checkbox */
-QCheckBox {
- background: transparent;
+QAbstractSpinBox:up-button {
+ margin: 0px;
+ background-color: transparent;
+ subcontrol-origin: border;
+ subcontrol-position: top right;
+ border-top-right-radius: 0.3em;
+ border-top: 0px solid transparent;
+ border-right: 0px solid transparent;
+ border-left: 1px solid {color:border};
+ border-bottom: 1px solid {color:border};
+}
+
+QAbstractSpinBox:down-button {
+ margin: 0px;
+ background-color: transparent;
+ subcontrol-origin: border;
+ subcontrol-position: bottom right;
+ border-bottom-right-radius: 0.3em;
+ border-bottom: 0px solid transparent;
+ border-right: 0px solid transparent;
+ border-left: 1px solid {color:border};
+ border-top: 1px solid {color:border};
+}
+
+QAbstractSpinBox:up-button:focus, QAbstractSpinBox:down-button:focus {
+ border-color: {color:border-focus};
+}
+QAbstractSpinBox::up-arrow, QAbstractSpinBox::up-arrow:off {
+ image: url(:/openpype/images/up_arrow.png);
+ width: 0.5em;
+ height: 1em;
+ border-width: 1px;
+}
+QAbstractSpinBox::up-arrow:hover {
+ image: url(:/openpype/images/up_arrow_on.png);
+ bottom: 1;
+}
+QAbstractSpinBox::up-arrow:disabled {
+ image: url(:/openpype/images/up_arrow_disabled.png);
+}
+QAbstractSpinBox::up-arrow:pressed {
+ image: url(:/openpype/images/up_arrow_on.png);
+ bottom: 0;
+}
+
+QAbstractSpinBox::down-arrow, QAbstractSpinBox::down-arrow:off {
+ image: url(:/openpype/images/down_arrow.png);
+ width: 0.5em;
+ height: 1em;
+ border-width: 1px;
+}
+QAbstractSpinBox::down-arrow:hover {
+ image: url(:/openpype/images/down_arrow_on.png);
+ bottom: 1;
+}
+QAbstractSpinBox::down-arrow:disabled {
+ image: url(:/openpype/images/down_arrow_disabled.png);
+}
+QAbstractSpinBox::down-arrow:hover:pressed {
+ image: url(:/openpype/images/down_arrow_on.png);
+ bottom: 0;
}
/* Buttons */
@@ -210,24 +268,9 @@ QSplitter::handle {
border: 3px solid transparent;
}
-QSplitter::handle:horizontal {
+QSplitter::handle:horizontal, QSplitter::handle:vertical, QSplitter::handle:horizontal:hover, QSplitter::handle:vertical:hover {
/* must be single like because of Nuke*/
- background: qlineargradient(x1:0, y1:0, x2:1, y2:0,stop:0.3 rgba(0, 0, 0, 0),stop:0.5 {color:bg-splitter},stop:0.7 rgba(0, 0, 0, 0));
-}
-
-QSplitter::handle:vertical {
- /* must be single like because of Nuke*/
- background: qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0.3 rgba(0, 0, 0, 0),stop:0.5 {color:bg-splitter},stop:0.7 rgba(0, 0, 0, 0));
-}
-
-QSplitter::handle:horizontal:hover {
- /* must be single like because of Nuke*/
- background: qlineargradient(x1:0, y1:0, x2:1, y2:0,stop:0.3 rgba(0, 0, 0, 0),stop:0.5 {color:bg-splitter-hover},stop:0.7 rgba(0, 0, 0, 0));
-}
-
-QSplitter::handle:vertical:hover {
- /* must be single like because of Nuke*/
- background: qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0.3 rgba(0, 0, 0, 0),stop:0.5 {color:bg-splitter-hover},stop:0.7 rgba(0, 0, 0, 0));
+ background: transparent;
}
/* SLider */
@@ -325,8 +368,8 @@ QTabBar::tab:only-one {
}
QHeaderView {
- border: none;
- border-radius: 2px;
+ border: 0px solid {color:border};
+ border-radius: 0px;
margin: 0px;
padding: 0px;
}
@@ -346,6 +389,10 @@ QHeaderView::section:first {
QHeaderView::section:last {
border-right: none;
}
+QHeaderView::section:only-one {
+ border-left: none;
+ border-right: none;
+}
QHeaderView::down-arrow {
image: url(:/openpype/images/down_arrow.png);
@@ -355,10 +402,59 @@ QHeaderView::up-arrow {
image: url(:/openpype/images/up_arrow.png);
}
+/* Checkboxes */
+QCheckBox {
+ background: transparent;
+}
+
+QCheckBox::indicator {
+ width: 16px;
+ height: 16px;
+}
+
+QAbstractItemView::indicator:checked, QCheckBox::indicator:checked {
+ image: url(:/openpype/images/checkbox_checked.png);
+}
+QAbstractItemView::indicator:checked:focus, QCheckBox::indicator:checked:focus {
+ image: url(:/openpype/images/checkbox_checked_focus.png);
+}
+QAbstractItemView::indicator:checked:hover, QAbstractItemView::indicator:checked:pressed, QCheckBox::indicator:checked:hover, QCheckBox::indicator:checked:pressed {
+ image: url(:/openpype/images/checkbox_checked_hover.png);
+}
+QAbstractItemView::indicator:checked:disabled, QCheckBox::indicator:checked:disabled {
+ image: url(:/openpype/images/checkbox_checked_disabled.png);
+}
+
+QAbstractItemView::indicator:unchecked, QCheckBox::indicator:unchecked {
+ image: url(:/openpype/images/checkbox_unchecked.png);
+}
+QAbstractItemView::indicator:unchecked:focus, QCheckBox::indicator:unchecked:focus {
+ image: url(:/openpype/images/checkbox_unchecked_focus.png);
+}
+QAbstractItemView::indicator:unchecked:hover, QAbstractItemView::indicator:unchecked:pressed, QCheckBox::indicator:unchecked:hover, QCheckBox::indicator:unchecked:pressed {
+ image: url(:/openpype/images/checkbox_unchecked_hover.png);
+}
+QAbstractItemView::indicator:unchecked:disabled, QCheckBox::indicator:unchecked:disabled {
+ image: url(:/openpype/images/checkbox_unchecked_disabled.png);
+}
+
+QAbstractItemView::indicator:indeterminate, QCheckBox::indicator:indeterminate {
+ image: url(:/openpype/images/checkbox_indeterminate.png);
+}
+QAbstractItemView::indicator:indeterminate:focus, QCheckBox::indicator:indeterminate:focus {
+ image: url(:/openpype/images/checkbox_indeterminate_focus.png);
+}
+QAbstractItemView::indicator:indeterminate:hover, QAbstractItemView::indicator:indeterminate:pressed, QCheckBox::indicator:indeterminate:hover, QCheckBox::indicator:indeterminate:pressed {
+ image: url(:/openpype/images/checkbox_indeterminate_hover.png);
+}
+QAbstractItemView::indicator:indeterminate:disabled, QCheckBox::indicator:indeterminate:disabled {
+ image: url(:/openpype/images/checkbox_indeterminate_disabled.png);
+}
+
/* Views QListView QTreeView QTableView */
QAbstractItemView {
border: 0px solid {color:border};
- border-radius: 0.2em;
+ border-radius: 0px;
background: {color:bg-view};
alternate-background-color: {color:bg-view-alternate};
/* Mac shows selection color on branches. */
@@ -373,6 +469,7 @@ QAbstractItemView::item {
QAbstractItemView:disabled{
background: {color:bg-view-disabled};
alternate-background-color: {color:bg-view-alternate-disabled};
+ border: 1px solid {color:border};
}
QAbstractItemView::item:hover {
diff --git a/openpype/tools/libraryloader/app.py b/openpype/tools/libraryloader/app.py
index d7c6c162e6..710e25bd76 100644
--- a/openpype/tools/libraryloader/app.py
+++ b/openpype/tools/libraryloader/app.py
@@ -198,6 +198,8 @@ class LibraryLoaderWindow(QtWidgets.QDialog):
else:
self.resize(1300, 700)
+ tools_lib.center_window(self)
+
if not self._initial_refresh:
self._initial_refresh = True
self.refresh()
@@ -405,7 +407,8 @@ class LibraryLoaderWindow(QtWidgets.QDialog):
self.data["state"]["assetIds"] = asset_ids
# reset repre list
- self._repres_widget.set_version_ids([])
+ if self._repres_widget:
+ self._repres_widget.set_version_ids([])
def _subsetschanged(self):
asset_ids = self.data["state"]["assetIds"]
@@ -495,7 +498,8 @@ class LibraryLoaderWindow(QtWidgets.QDialog):
self._thumbnail_widget.set_thumbnail(thumbnail_docs)
version_ids = [doc["_id"] for doc in version_docs or []]
- self._repres_widget.set_version_ids(version_ids)
+ if self._repres_widget:
+ self._repres_widget.set_version_ids(version_ids)
def _set_context(self, context, refresh=True):
"""Set the selection in the interface using a context.
diff --git a/openpype/tools/loader/app.py b/openpype/tools/loader/app.py
index 04da08326f..9a4f2f1984 100644
--- a/openpype/tools/loader/app.py
+++ b/openpype/tools/loader/app.py
@@ -210,6 +210,7 @@ class LoaderWindow(QtWidgets.QDialog):
self.resize(1800, 900)
else:
self.resize(1300, 700)
+ lib.center_window(self)
# -------------------------------
# Delay calling blocking methods
diff --git a/openpype/tools/loader/model.py b/openpype/tools/loader/model.py
index 6e9c7bf220..d81fc11cf2 100644
--- a/openpype/tools/loader/model.py
+++ b/openpype/tools/loader/model.py
@@ -15,6 +15,12 @@ from openpype.tools.utils.models import TreeModel, Item
from openpype.tools.utils import lib
from openpype.modules import ModulesManager
+from openpype.tools.utils.constants import (
+ LOCAL_PROVIDER_ROLE,
+ REMOTE_PROVIDER_ROLE,
+ LOCAL_AVAILABILITY_ROLE,
+ REMOTE_AVAILABILITY_ROLE
+)
def is_filtering_recursible():
@@ -333,7 +339,6 @@ class SubsetsModel(TreeModel, BaseRepresentationModel):
repre_info = version_data.get("repre_info")
if repre_info:
item["repre_info"] = repre_info
- item["repre_icon"] = version_data.get("repre_icon")
def _fetch(self):
asset_docs = self.dbcon.find(
@@ -445,14 +450,16 @@ class SubsetsModel(TreeModel, BaseRepresentationModel):
for _subset_id, doc in last_versions_by_subset_id.items():
version_ids.add(doc["_id"])
- site = self.active_site
- query = self._repre_per_version_pipeline(list(version_ids), site)
+ query = self._repre_per_version_pipeline(list(version_ids),
+ self.active_site,
+ self.remote_site)
repre_info = {}
for doc in self.dbcon.aggregate(query):
if self._doc_fetching_stop:
return
- doc["provider"] = self.active_provider
+ doc["active_provider"] = self.active_provider
+ doc["remote_provider"] = self.remote_provider
repre_info[doc["_id"]] = doc
self._doc_payload["repre_info_by_version_id"] = repre_info
@@ -666,8 +673,8 @@ class SubsetsModel(TreeModel, BaseRepresentationModel):
if not index.isValid():
return
+ item = index.internalPointer()
if role == self.SortDescendingRole:
- item = index.internalPointer()
if item.get("isGroup"):
# Ensure groups be on top when sorting by descending order
prefix = "2"
@@ -683,7 +690,6 @@ class SubsetsModel(TreeModel, BaseRepresentationModel):
return prefix + order
if role == self.SortAscendingRole:
- item = index.internalPointer()
if item.get("isGroup"):
# Ensure groups be on top when sorting by ascending order
prefix = "0"
@@ -701,14 +707,12 @@ class SubsetsModel(TreeModel, BaseRepresentationModel):
if role == QtCore.Qt.DisplayRole:
if index.column() == self.columns_index["family"]:
# Show familyLabel instead of family
- item = index.internalPointer()
return item.get("familyLabel", None)
elif role == QtCore.Qt.DecorationRole:
# Add icon to subset column
if index.column() == self.columns_index["subset"]:
- item = index.internalPointer()
if item.get("isGroup") or item.get("isMerged"):
return item["icon"]
else:
@@ -716,20 +720,32 @@ class SubsetsModel(TreeModel, BaseRepresentationModel):
# Add icon to family column
if index.column() == self.columns_index["family"]:
- item = index.internalPointer()
return item.get("familyIcon", None)
- if index.column() == self.columns_index.get("repre_info"):
- item = index.internalPointer()
- return item.get("repre_icon", None)
-
elif role == QtCore.Qt.ForegroundRole:
- item = index.internalPointer()
version_doc = item.get("version_document")
if version_doc and version_doc.get("type") == "hero_version":
if not version_doc["is_from_latest"]:
return self.not_last_hero_brush
+ elif role == LOCAL_AVAILABILITY_ROLE:
+ if not item.get("isGroup"):
+ return item.get("repre_info_local")
+ else:
+ return None
+
+ elif role == REMOTE_AVAILABILITY_ROLE:
+ if not item.get("isGroup"):
+ return item.get("repre_info_remote")
+ else:
+ return None
+
+ elif role == LOCAL_PROVIDER_ROLE:
+ return self.active_provider
+
+ elif role == REMOTE_PROVIDER_ROLE:
+ return self.remote_provider
+
return super(SubsetsModel, self).data(index, role)
def flags(self, index):
@@ -759,19 +775,25 @@ class SubsetsModel(TreeModel, BaseRepresentationModel):
return data
def _get_repre_dict(self, repre_info):
- """Returns icon and str representation of availability"""
+ """Returns str representation of availability"""
data = {}
if repre_info:
repres_str = "{}/{}".format(
- int(math.floor(float(repre_info['avail_repre']))),
+ int(math.floor(float(repre_info['avail_repre_local']))),
int(math.floor(float(repre_info['repre_count']))))
- data["repre_info"] = repres_str
- data["repre_icon"] = self.repre_icons.get(self.active_provider)
+ data["repre_info_local"] = repres_str
+
+ repres_str = "{}/{}".format(
+ int(math.floor(float(repre_info['avail_repre_remote']))),
+ int(math.floor(float(repre_info['repre_count']))))
+
+ data["repre_info_remote"] = repres_str
return data
- def _repre_per_version_pipeline(self, version_ids, site):
+ def _repre_per_version_pipeline(self, version_ids,
+ active_site, remote_site):
query = [
{"$match": {"parent": {"$in": version_ids},
"type": "representation",
@@ -780,7 +802,13 @@ class SubsetsModel(TreeModel, BaseRepresentationModel):
{'$addFields': {
'order_local': {
'$filter': {'input': '$files.sites', 'as': 'p',
- 'cond': {'$eq': ['$$p.name', site]}
+ 'cond': {'$eq': ['$$p.name', active_site]}
+ }}
+ }},
+ {'$addFields': {
+ 'order_remote': {
+ '$filter': {'input': '$files.sites', 'as': 'p',
+ 'cond': {'$eq': ['$$p.name', remote_site]}
}}
}},
{'$addFields': {
@@ -795,19 +823,32 @@ class SubsetsModel(TreeModel, BaseRepresentationModel):
]}
]}, 0]}
}},
+ {'$addFields': {
+ 'progress_remote': {"$arrayElemAt": [{
+ '$cond': [{'$size': "$order_remote.progress"},
+ "$order_remote.progress",
+ # if exists created_dt count is as available
+ {'$cond': [
+ {'$size': "$order_remote.created_dt"},
+ [1],
+ [0]
+ ]}
+ ]}, 0]}
+ }},
{'$group': { # first group by repre
'_id': '$_id',
'parent': {'$first': '$parent'},
- 'files_count': {'$sum': 1},
- 'files_avail': {'$sum': "$progress_local"},
- 'avail_ratio': {'$first': {
- '$divide': [{'$sum': "$progress_local"}, {'$sum': 1}]}}
+ 'avail_ratio_local': {'$first': {
+ '$divide': [{'$sum': "$progress_local"}, {'$sum': 1}]}},
+ 'avail_ratio_remote': {'$first': {
+ '$divide': [{'$sum': "$progress_remote"}, {'$sum': 1}]}}
}},
{'$group': { # second group by parent, eg version_id
'_id': '$parent',
'repre_count': {'$sum': 1}, # total representations
# fully available representation for site
- 'avail_repre': {'$sum': "$avail_ratio"}
+ 'avail_repre_local': {'$sum': "$avail_ratio_local"},
+ 'avail_repre_remote': {'$sum': "$avail_ratio_remote"},
}},
]
return query
diff --git a/openpype/tools/loader/widgets.py b/openpype/tools/loader/widgets.py
index 4c075382ac..08b58eebbe 100644
--- a/openpype/tools/loader/widgets.py
+++ b/openpype/tools/loader/widgets.py
@@ -31,6 +31,13 @@ from .model import (
)
from . import lib
+from openpype.tools.utils.constants import (
+ LOCAL_PROVIDER_ROLE,
+ REMOTE_PROVIDER_ROLE,
+ LOCAL_AVAILABILITY_ROLE,
+ REMOTE_AVAILABILITY_ROLE
+)
+
class OverlayFrame(QtWidgets.QFrame):
def __init__(self, label, parent):
@@ -197,6 +204,10 @@ class SubsetWidget(QtWidgets.QWidget):
column = model.Columns.index("time")
view.setItemDelegateForColumn(column, time_delegate)
+ avail_delegate = AvailabilityDelegate(self.dbcon, view)
+ column = model.Columns.index("repre_info")
+ view.setItemDelegateForColumn(column, avail_delegate)
+
layout = QtWidgets.QVBoxLayout(self)
layout.setContentsMargins(0, 0, 0, 0)
layout.addLayout(top_bar_layout)
@@ -1578,3 +1589,54 @@ def _load_subsets_by_loader(loader, subset_contexts, options,
))
return error_info
+
+
+class AvailabilityDelegate(QtWidgets.QStyledItemDelegate):
+ """
+ Prints icons and downloaded representation ration for both sides.
+ """
+
+ def __init__(self, dbcon, parent=None):
+ super(AvailabilityDelegate, self).__init__(parent)
+ self.icons = tools_lib.get_repre_icons()
+
+ def paint(self, painter, option, index):
+ super(AvailabilityDelegate, self).paint(painter, option, index)
+ option = QtWidgets.QStyleOptionViewItem(option)
+ option.showDecorationSelected = True
+
+ provider_active = index.data(LOCAL_PROVIDER_ROLE)
+ provider_remote = index.data(REMOTE_PROVIDER_ROLE)
+
+ availability_active = index.data(LOCAL_AVAILABILITY_ROLE)
+ availability_remote = index.data(REMOTE_AVAILABILITY_ROLE)
+
+ if not availability_active or not availability_remote: # group lines
+ return
+
+ idx = 0
+ height = width = 24
+ for value, provider in [(availability_active, provider_active),
+ (availability_remote, provider_remote)]:
+ icon = self.icons.get(provider)
+ if not icon:
+ continue
+
+ pixmap = icon.pixmap(icon.actualSize(QtCore.QSize(height, width)))
+ padding = 10 + (70 * idx)
+ point = QtCore.QPoint(option.rect.x() + padding,
+ option.rect.y() +
+ (option.rect.height() - pixmap.height()) / 2)
+ painter.drawPixmap(point, pixmap)
+
+ text_rect = option.rect.translated(padding + width + 10, 0)
+ painter.drawText(
+ text_rect,
+ option.displayAlignment,
+ value
+ )
+
+ idx += 1
+
+ def displayText(self, value, locale):
+ pass
diff --git a/openpype/tools/pyblish_pype/control.py b/openpype/tools/pyblish_pype/control.py
index 1fa3ee657b..2a9e67097e 100644
--- a/openpype/tools/pyblish_pype/control.py
+++ b/openpype/tools/pyblish_pype/control.py
@@ -190,7 +190,9 @@ class Controller(QtCore.QObject):
plugins = pyblish.api.discover()
- targets = pyblish.logic.registered_targets() or ["default"]
+ targets = set(pyblish.logic.registered_targets())
+ targets.add("default")
+ targets = list(targets)
plugins_by_targets = pyblish.logic.plugins_by_targets(plugins, targets)
_plugins = []
diff --git a/openpype/tools/utils/constants.py b/openpype/tools/utils/constants.py
index 0e940a5595..5b6f4126c9 100644
--- a/openpype/tools/utils/constants.py
+++ b/openpype/tools/utils/constants.py
@@ -8,3 +8,22 @@ PROJECT_IS_ACTIVE_ROLE = QtCore.Qt.UserRole + 102
TASK_NAME_ROLE = QtCore.Qt.UserRole + 301
TASK_TYPE_ROLE = QtCore.Qt.UserRole + 302
TASK_ORDER_ROLE = QtCore.Qt.UserRole + 403
+
+LOCAL_PROVIDER_ROLE = QtCore.Qt.UserRole + 500 # provider of active site
+REMOTE_PROVIDER_ROLE = QtCore.Qt.UserRole + 501 # provider of remote site
+LOCAL_PROGRESS_ROLE = QtCore.Qt.UserRole + 502 # percentage downld on active
+REMOTE_PROGRESS_ROLE = QtCore.Qt.UserRole + 503 # percentage upload on remote
+LOCAL_AVAILABILITY_ROLE = QtCore.Qt.UserRole + 504 # ratio of presence active
+REMOTE_AVAILABILITY_ROLE = QtCore.Qt.UserRole + 505
+LOCAL_DATE_ROLE = QtCore.Qt.UserRole + 506 # created_dt on active site
+REMOTE_DATE_ROLE = QtCore.Qt.UserRole + 507
+LOCAL_FAILED_ROLE = QtCore.Qt.UserRole + 508
+REMOTE_FAILED_ROLE = QtCore.Qt.UserRole + 509
+HEADER_NAME_ROLE = QtCore.Qt.UserRole + 510
+EDIT_ICON_ROLE = QtCore.Qt.UserRole + 511
+STATUS_ROLE = QtCore.Qt.UserRole + 512
+PATH_ROLE = QtCore.Qt.UserRole + 513
+LOCAL_SITE_NAME_ROLE = QtCore.Qt.UserRole + 514
+REMOTE_SITE_NAME_ROLE = QtCore.Qt.UserRole + 515
+ERROR_ROLE = QtCore.Qt.UserRole + 516
+TRIES_ROLE = QtCore.Qt.UserRole + 517
diff --git a/openpype/tools/utils/host_tools.py b/openpype/tools/utils/host_tools.py
index d5202c8435..a15d12b386 100644
--- a/openpype/tools/utils/host_tools.py
+++ b/openpype/tools/utils/host_tools.py
@@ -55,8 +55,6 @@ class HostToolsHelper:
def show_workfiles(self, parent=None, use_context=None, save=None):
"""Workfiles tool for changing context and saving workfiles."""
- from avalon import style
-
if use_context is None:
use_context = True
@@ -80,7 +78,6 @@ class HostToolsHelper:
# Pull window to the front.
workfiles_tool.raise_()
workfiles_tool.activateWindow()
- workfiles_tool.setStyleSheet(style.load_stylesheet())
def get_loader_tool(self, parent):
"""Create, cache and return loader tool window."""
diff --git a/openpype/tools/utils/lib.py b/openpype/tools/utils/lib.py
index 6f8718a678..e2815f26e4 100644
--- a/openpype/tools/utils/lib.py
+++ b/openpype/tools/utils/lib.py
@@ -20,6 +20,8 @@ def center_window(window):
screen_geo = desktop.screenGeometry(screen_idx)
geo = window.frameGeometry()
geo.moveCenter(screen_geo.center())
+ if geo.y() < screen_geo.y():
+ geo.setY(screen_geo.y())
window.move(geo.topLeft())
diff --git a/openpype/tools/workfiles/app.py b/openpype/tools/workfiles/app.py
index 8832b82a0d..4135eeccc9 100644
--- a/openpype/tools/workfiles/app.py
+++ b/openpype/tools/workfiles/app.py
@@ -8,8 +8,9 @@ import datetime
import Qt
from Qt import QtWidgets, QtCore
-from avalon import style, io, api, pipeline
+from avalon import io, api, pipeline
+from openpype import style
from openpype.tools.utils.lib import (
schedule, qt_app_context
)
@@ -131,6 +132,9 @@ class NameWindow(QtWidgets.QDialog):
# Extensions combobox
ext_combo = QtWidgets.QComboBox(inputs_widget)
+ # Add styled delegate to use stylesheets
+ ext_delegate = QtWidgets.QStyledItemDelegate()
+ ext_combo.setItemDelegate(ext_delegate)
ext_combo.addItems(self.host.file_extensions())
# Build inputs
@@ -186,6 +190,7 @@ class NameWindow(QtWidgets.QDialog):
self.preview_label = preview_label
self.subversion_input = subversion_input
self.ext_combo = ext_combo
+ self._ext_delegate = ext_delegate
self.refresh()
@@ -426,6 +431,7 @@ class FilesWidget(QtWidgets.QWidget):
"""A widget displaying files that allows to save and open files."""
file_selected = QtCore.Signal(str)
workfile_created = QtCore.Signal(str)
+ file_opened = QtCore.Signal()
def __init__(self, parent=None):
super(FilesWidget, self).__init__(parent=parent)
@@ -616,7 +622,7 @@ class FilesWidget(QtWidgets.QWidget):
self._enter_session()
host.open_file(filepath)
- self.window().close()
+ self.file_opened.emit()
def save_changes_prompt(self):
self._messagebox = messagebox = QtWidgets.QMessageBox()
@@ -634,7 +640,7 @@ class FilesWidget(QtWidgets.QWidget):
# Parenting the QMessageBox to the Widget seems to crash
# so we skip parenting and explicitly apply the stylesheet.
- messagebox.setStyleSheet(style.load_stylesheet())
+ messagebox.setStyle(self.style())
result = messagebox.exec_()
if result == messagebox.Yes:
@@ -994,6 +1000,7 @@ class Window(QtWidgets.QMainWindow):
tasks_widget.task_changed.connect(self.on_task_changed)
files_widget.file_selected.connect(self.on_file_select)
files_widget.workfile_created.connect(self.on_workfile_create)
+ files_widget.file_opened.connect(self._on_file_opened)
side_panel.save_clicked.connect(self.on_side_panel_save)
self.home_page_widget = home_page_widget
@@ -1006,13 +1013,19 @@ class Window(QtWidgets.QMainWindow):
self.files_widget = files_widget
self.side_panel = side_panel
- self.refresh()
-
# Force focus on the open button by default, required for Houdini.
files_widget.btn_open.setFocus()
self.resize(1200, 600)
+ self._first_show = True
+
+ def showEvent(self, event):
+ super(Window, self).showEvent(event)
+ if self._first_show:
+ self._first_show = False
+ self.setStyleSheet(style.load_stylesheet())
+
def keyPressEvent(self, event):
"""Custom keyPressEvent.
@@ -1054,6 +1067,9 @@ class Window(QtWidgets.QMainWindow):
def on_workfile_create(self, filepath):
self._create_workfile_doc(filepath)
+ def _on_file_opened(self):
+ self.close()
+
def on_side_panel_save(self):
workfile_doc, data = self.side_panel.get_workfile_data()
if not workfile_doc:
@@ -1201,7 +1217,6 @@ def show(root=None, debug=False, parent=None, use_context=True, save=True):
window.set_save_enabled(save)
window.show()
- window.setStyleSheet(style.load_stylesheet())
module.window = window
diff --git a/openpype/vendor/python/common/capture.py b/openpype/vendor/python/common/capture.py
index 02d86952df..6b4c40a6e8 100644
--- a/openpype/vendor/python/common/capture.py
+++ b/openpype/vendor/python/common/capture.py
@@ -116,6 +116,8 @@ def capture(camera=None,
if not cmds.objExists(camera):
raise RuntimeError("Camera does not exist: {0}".format(camera))
+ if width and height :
+ maintain_aspect_ratio = False
width = width or cmds.getAttr("defaultResolution.width")
height = height or cmds.getAttr("defaultResolution.height")
if maintain_aspect_ratio:
diff --git a/openpype/version.py b/openpype/version.py
index 2f8cb42dc3..7f85931698 100644
--- a/openpype/version.py
+++ b/openpype/version.py
@@ -1,3 +1,3 @@
# -*- coding: utf-8 -*-
"""Package declaring Pype version."""
-__version__ = "3.6.0-nightly.4"
+__version__ = "3.6.0-nightly.5"
diff --git a/pyproject.toml b/pyproject.toml
index 8eafb92cf6..8dd8664eae 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "OpenPype"
-version = "3.6.0-nightly.4" # OpenPype
+version = "3.6.0-nightly.5" # OpenPype
description = "Open VFX and Animation pipeline with support."
authors = ["OpenPype Team "]
license = "MIT License"
diff --git a/start.py b/start.py
index 29b4921d19..61d8d6a64a 100644
--- a/start.py
+++ b/start.py
@@ -293,20 +293,32 @@ def run_disk_mapping_commands(mongo_url):
mappings = disk_mapping.get(low_platform) or []
for source, destination in mappings:
- args = ["subst", destination.rstrip('/'), source.rstrip('/')]
+ destination = destination.rstrip('/')
+ source = source.rstrip('/')
+
+ if low_platform == "windows":
+ args = ["subst", destination, source]
+ elif low_platform == "darwin":
+ scr = "do shell script \"ln -s {} {}\" with administrator privileges".format(source, destination) # noqa: E501
+ args = ["osascript", "-e", scr]
+ else:
+ args = ["sudo", "ln", "-s", source, destination]
+
_print("disk mapping args:: {}".format(args))
try:
- output = subprocess.Popen(args)
- if output.returncode and output.returncode != 0:
- exc_msg = "Executing args was not successful: \"{}\"".format(
- args)
+ if not os.path.exists(destination):
+ output = subprocess.Popen(args)
+ if output.returncode and output.returncode != 0:
+ exc_msg = "Executing was not successful: \"{}\"".format(
+ args)
- raise RuntimeError(exc_msg)
- except TypeError:
- _print("Error in mapping drive")
+ raise RuntimeError(exc_msg)
+ except TypeError as exc:
+ _print("Error {} in mapping drive {}, {}".format(str(exc),
+ source,
+ destination))
raise
-
def set_avalon_environments():
"""Set avalon specific environments.