From be20a9f69626240bbb941e7661d5866a97b736cc Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Fri, 29 Nov 2024 10:14:47 +0100 Subject: [PATCH 001/595] Add ShapeFX Loki support --- client/ayon_core/hooks/pre_add_last_workfile_arg.py | 3 ++- client/ayon_core/hooks/pre_ocio_hook.py | 3 ++- client/ayon_core/plugins/publish/validate_file_saved.py | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/hooks/pre_add_last_workfile_arg.py b/client/ayon_core/hooks/pre_add_last_workfile_arg.py index d5914c2352..0652e7c5aa 100644 --- a/client/ayon_core/hooks/pre_add_last_workfile_arg.py +++ b/client/ayon_core/hooks/pre_add_last_workfile_arg.py @@ -29,7 +29,8 @@ class AddLastWorkfileToLaunchArgs(PreLaunchHook): "aftereffects", "wrap", "openrv", - "cinema4d" + "cinema4d", + "loki" } launch_types = {LaunchTypes.local} diff --git a/client/ayon_core/hooks/pre_ocio_hook.py b/client/ayon_core/hooks/pre_ocio_hook.py index 7406aa42cf..6462d1a3ae 100644 --- a/client/ayon_core/hooks/pre_ocio_hook.py +++ b/client/ayon_core/hooks/pre_ocio_hook.py @@ -20,7 +20,8 @@ class OCIOEnvHook(PreLaunchHook): "hiero", "resolve", "openrv", - "cinema4d" + "cinema4d", + "loki" } launch_types = set() diff --git a/client/ayon_core/plugins/publish/validate_file_saved.py b/client/ayon_core/plugins/publish/validate_file_saved.py index f52998cef3..78c243d5aa 100644 --- a/client/ayon_core/plugins/publish/validate_file_saved.py +++ b/client/ayon_core/plugins/publish/validate_file_saved.py @@ -37,7 +37,7 @@ class ValidateCurrentSaveFile(pyblish.api.ContextPlugin): label = "Validate File Saved" order = pyblish.api.ValidatorOrder - 0.1 hosts = ["fusion", "houdini", "max", "maya", "nuke", "substancepainter", - "cinema4d"] + "cinema4d", "loki"] actions = [SaveByVersionUpAction, ShowWorkfilesAction] def process(self, context): From 3ddd64bbc3b12b4bbd2ac6c4d6280a91b6aed81c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 26 Mar 2025 14:22:51 +0100 Subject: [PATCH 002/595] handle project argument --- client/ayon_core/cli.py | 75 +++++++++++++++++++++++++++++++++++------ 1 file changed, 64 insertions(+), 11 deletions(-) diff --git a/client/ayon_core/cli.py b/client/ayon_core/cli.py index 6f89a6d17d..dc8ca44082 100644 --- a/client/ayon_core/cli.py +++ b/client/ayon_core/cli.py @@ -24,22 +24,35 @@ from ayon_core.lib.env_tools import ( ) - @click.group(invoke_without_command=True) @click.pass_context -@click.option("--use-staging", is_flag=True, - expose_value=False, help="use staging variants") -@click.option("--debug", is_flag=True, expose_value=False, - help="Enable debug") -@click.option("--verbose", expose_value=False, - help=("Change AYON log level (debug - critical or 0-50)")) -@click.option("--force", is_flag=True, hidden=True) -def main_cli(ctx, force): +@click.option( + "--use-staging", + is_flag=True, + expose_value=False, + help="use staging variants") +@click.option( + "--debug", + is_flag=True, + expose_value=False, + help="Enable debug") +@click.option( + "--project", + help="Project name") +@click.option( + "--verbose", + expose_value=False, + help="Change AYON log level (debug - critical or 0-50)") +@click.option( + "--use-dev", + is_flag=True, + expose_value=False, + help="use dev bundle") +def main_cli(ctx, *_args, **_kwargs): """AYON is main command serving as entry point to pipeline system. It wraps different commands together. """ - if ctx.invoked_subcommand is None: # Print help if headless mode is used if os.getenv("AYON_HEADLESS_MODE") == "1": @@ -60,7 +73,6 @@ def tray(force): Default action of AYON command is to launch tray widget to control basic aspects of AYON. See documentation for more information. """ - from ayon_core.tools.tray import main main(force) @@ -283,6 +295,43 @@ def _add_addons(addons_manager): ) +def _cleanup_project_args(): + rem_args = list(sys.argv[1:]) + if "--project" not in rem_args: + return + + cmd = None + current_ctx = None + parent_name = "ayon" + parent_cmd = main_cli + while hasattr(parent_cmd, "resolve_command"): + if current_ctx is None: + current_ctx = main_cli.make_context(parent_name, rem_args) + else: + current_ctx = parent_cmd.make_context( + parent_name, + rem_args, + parent=current_ctx + ) + if not rem_args: + break + cmd_name, cmd, rem_args = parent_cmd.resolve_command( + current_ctx, rem_args + ) + parent_name = cmd_name + parent_cmd = cmd + + if cmd is None: + return + + param_names = {param.name for param in cmd.params} + if "project" in param_names: + return + idx = sys.argv.index("--project") + sys.argv.pop(idx) + sys.argv.pop(idx) + + def main(*args, **kwargs): initialize_ayon_connection() python_path = os.getenv("PYTHONPATH", "") @@ -307,10 +356,14 @@ def main(*args, **kwargs): addons_manager = AddonsManager() _set_addons_environments(addons_manager) _add_addons(addons_manager) + + _cleanup_project_args() + try: main_cli( prog_name="ayon", obj={"addons_manager": addons_manager}, + args=(sys.argv[1:]), ) except Exception: # noqa exc_info = sys.exc_info() From 09fe05025c85aecbe3f7635fe8c5c53b559906d2 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 26 Mar 2025 14:23:07 +0100 Subject: [PATCH 003/595] modified settings fetching --- client/ayon_core/settings/lib.py | 68 +++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 19 deletions(-) diff --git a/client/ayon_core/settings/lib.py b/client/ayon_core/settings/lib.py index aa56fa8326..d251439221 100644 --- a/client/ayon_core/settings/lib.py +++ b/client/ayon_core/settings/lib.py @@ -4,6 +4,7 @@ import logging import collections import copy import time +from urllib.parse import urlencode import ayon_api @@ -35,6 +36,35 @@ class CacheItem: return time.time() > self._outdate_time +def _get_addons_settings( + studio_bundle_name, + project_bundle_name, + variant, + project_name=None, +): + """Modified version of `ayon_api.get_addons_settings` function.""" + query_values = { + key: value + for key, value in ( + ("bundle_name", studio_bundle_name), + ("project_bundle_name ", project_bundle_name), + ("variant", variant), + ("project_name", project_name), + ) + if value + } + site_id = ayon_api.get_site_id() + if site_id: + query_values["site_id"] = site_id + + response = ayon_api.get(f"settings?{urlencode(query_values)}") + response.raise_for_status() + return { + addon["name"]: addon["settings"] + for addon in response.data["addons"] + } + + class _AyonSettingsCache: use_bundles = None variant = None @@ -60,7 +90,7 @@ class _AyonSettingsCache: variant = "production" if is_dev_mode_enabled(): - variant = cls._get_bundle_name() + variant = cls._get_studio_bundle_name() elif is_staging_enabled(): variant = "staging" @@ -72,27 +102,33 @@ class _AyonSettingsCache: return _AyonSettingsCache.variant @classmethod - def _get_bundle_name(cls): + def _get_studio_bundle_name(cls): + bundle_name = os.environ.get("AYON_STUDIO_BUNDLE_NAME") + if bundle_name: + return bundle_name + return os.environ["AYON_BUNDLE_NAME"] + + @classmethod + def _get_project_bundle_name(cls): return os.environ["AYON_BUNDLE_NAME"] @classmethod def get_value_by_project(cls, project_name): cache_item = _AyonSettingsCache.cache_by_project_name[project_name] if cache_item.is_outdated: - if cls._use_bundles(): - value = ayon_api.get_addons_settings( - bundle_name=cls._get_bundle_name(), + cache_item.update_value( + _get_addons_settings( + studio_bundle_name=cls._get_studio_bundle_name(), + project_bundle_name=cls._get_project_bundle_name(), project_name=project_name, - variant=cls._get_variant() + variant=cls._get_variant(), ) - else: - value = ayon_api.get_addons_settings(project_name) - cache_item.update_value(value) + ) return cache_item.get_value() @classmethod def _get_addon_versions_from_bundle(cls): - expected_bundle = cls._get_bundle_name() + expected_bundle = cls._get_project_bundle_name() bundles = ayon_api.get_bundles()["bundles"] bundle = next( ( @@ -110,15 +146,9 @@ class _AyonSettingsCache: def get_addon_versions(cls): cache_item = _AyonSettingsCache.addon_versions if cache_item.is_outdated: - if cls._use_bundles(): - addons = cls._get_addon_versions_from_bundle() - else: - settings_data = ayon_api.get_addons_settings( - only_values=False, - variant=cls._get_variant() - ) - addons = settings_data["versions"] - cache_item.update_value(addons) + cache_item.update_value( + cls._get_addon_versions_from_bundle() + ) return cache_item.get_value() From 0a54f569ceb80e491e21ff1f8b80131191f0c48f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 26 Mar 2025 16:55:26 +0100 Subject: [PATCH 004/595] fix addons discovery --- client/ayon_core/addon/base.py | 25 ++++++++++++++++++++----- client/ayon_core/cli.py | 1 + client/ayon_core/settings/lib.py | 27 ++++++++++++++++++++++----- 3 files changed, 43 insertions(+), 10 deletions(-) diff --git a/client/ayon_core/addon/base.py b/client/ayon_core/addon/base.py index 72270fa585..7d02acf548 100644 --- a/client/ayon_core/addon/base.py +++ b/client/ayon_core/addon/base.py @@ -155,18 +155,33 @@ def load_addons(force=False): def _get_ayon_bundle_data(): + studio_bundle_name = os.environ.get("AYON_STUDIO_BUNDLE_NAME") + project_bundle_name = os.getenv("AYON_BUNDLE_NAME") bundles = ayon_api.get_bundles()["bundles"] - - bundle_name = os.getenv("AYON_BUNDLE_NAME") - - return next( + project_bundle = next( ( bundle for bundle in bundles - if bundle["name"] == bundle_name + if bundle["name"] == project_bundle_name ), None ) + studio_bundle = None + if studio_bundle_name and project_bundle_name != studio_bundle_name: + studio_bundle = next( + ( + bundle + for bundle in bundles + if bundle["name"] == studio_bundle_name + ), + None + ) + + if project_bundle and studio_bundle: + addons = copy.deepcopy(studio_bundle["addons"]) + addons.update(project_bundle["addons"]) + project_bundle["addons"] = addons + return project_bundle def _get_ayon_addons_information(bundle_info): diff --git a/client/ayon_core/cli.py b/client/ayon_core/cli.py index dc8ca44082..8f2abbaeab 100644 --- a/client/ayon_core/cli.py +++ b/client/ayon_core/cli.py @@ -59,6 +59,7 @@ def main_cli(ctx, *_args, **_kwargs): print(ctx.get_help()) sys.exit(0) else: + ctx.params.pop("project") ctx.forward(tray) diff --git a/client/ayon_core/settings/lib.py b/client/ayon_core/settings/lib.py index d251439221..7b4c08bc04 100644 --- a/client/ayon_core/settings/lib.py +++ b/client/ayon_core/settings/lib.py @@ -128,18 +128,35 @@ class _AyonSettingsCache: @classmethod def _get_addon_versions_from_bundle(cls): - expected_bundle = cls._get_project_bundle_name() + studio_bundle_name = cls._get_studio_bundle_name() + project_bundle_name = cls._get_project_bundle_name() bundles = ayon_api.get_bundles()["bundles"] - bundle = next( + project_bundle = next( ( bundle for bundle in bundles - if bundle["name"] == expected_bundle + if bundle["name"] == project_bundle_name ), None ) - if bundle is not None: - return bundle["addons"] + studio_bundle = None + if studio_bundle_name and project_bundle_name != studio_bundle_name: + studio_bundle = next( + ( + bundle + for bundle in bundles + if bundle["name"] == studio_bundle_name + ), + None + ) + + if studio_bundle and project_bundle: + addons = copy.deepcopy(studio_bundle["addons"]) + addons.update(project_bundle["addons"]) + project_bundle["addons"] = addons + + if project_bundle is not None: + return project_bundle["addons"] return {} @classmethod From a8baf72a7fd583fb8fb8f7701b295e00d428b907 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 26 Mar 2025 17:01:54 +0100 Subject: [PATCH 005/595] automatically restart tray if is running in project bundle mode --- client/ayon_core/tools/tray/ui/tray.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/client/ayon_core/tools/tray/ui/tray.py b/client/ayon_core/tools/tray/ui/tray.py index aad89b6081..f090be063e 100644 --- a/client/ayon_core/tools/tray/ui/tray.py +++ b/client/ayon_core/tools/tray/ui/tray.py @@ -240,6 +240,11 @@ class TrayManager: self.log.warning("Other tray started meanwhile. Exiting.") self.exit() + project_bundle = os.getenv("AYON_BUNDLE_NAME") + studio_bundle = os.getenv("AYON_STUDIO_BUNDLE_NAME") + if studio_bundle and project_bundle != studio_bundle: + self.restart() + def get_services_submenu(self): return self._services_submenu @@ -270,11 +275,18 @@ class TrayManager: elif is_staging_enabled(): additional_args.append("--use-staging") + if "--project" in additional_args: + idx = additional_args.index("--project") + additional_args.pop(idx) + additional_args.pop(idx) + args.extend(additional_args) envs = dict(os.environ.items()) for key in { "AYON_BUNDLE_NAME", + "AYON_STUDIO_BUNDLE_NAME", + "AYON_PROJECT_NAME", }: envs.pop(key, None) @@ -329,6 +341,7 @@ class TrayManager: return json_response({ "username": self._cached_username, "bundle": os.getenv("AYON_BUNDLE_NAME"), + "studio_bundle": os.getenv("AYON_STUDIO_BUNDLE_NAME"), "dev_mode": is_dev_mode_enabled(), "staging_mode": is_staging_enabled(), "addons": { @@ -516,6 +529,8 @@ class TrayManager: "AYON_SERVER_URL", "AYON_API_KEY", "AYON_BUNDLE_NAME", + "AYON_STUDIO_BUNDLE_NAME", + "AYON_PROJECT_NAME", }: os.environ.pop(key, None) self.restart() @@ -549,6 +564,8 @@ class TrayManager: envs = dict(os.environ.items()) for key in { "AYON_BUNDLE_NAME", + "AYON_STUDIO_BUNDLE_NAME", + "AYON_PROJECT_NAME", }: envs.pop(key, None) From c194fe2dd2c1016827dce3fcf2f162c5888a6c1b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 27 Mar 2025 07:44:10 +0100 Subject: [PATCH 006/595] set project bundle name only if is different from studio bundle name --- client/ayon_core/settings/lib.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/settings/lib.py b/client/ayon_core/settings/lib.py index 7b4c08bc04..cd219a153b 100644 --- a/client/ayon_core/settings/lib.py +++ b/client/ayon_core/settings/lib.py @@ -47,12 +47,14 @@ def _get_addons_settings( key: value for key, value in ( ("bundle_name", studio_bundle_name), - ("project_bundle_name ", project_bundle_name), ("variant", variant), ("project_name", project_name), ) if value } + if project_bundle_name != studio_bundle_name: + query_values["project_bundle_name"] = project_bundle_name + site_id = ayon_api.get_site_id() if site_id: query_values["site_id"] = site_id From edc451c916c4776dcea216e6362d56b1e1bde330 Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Tue, 15 Apr 2025 18:24:19 +0200 Subject: [PATCH 007/595] add optional `aov` key to render template profile name --- server/settings/tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/settings/tools.py b/server/settings/tools.py index 32c72e7a98..ed23cee69c 100644 --- a/server/settings/tools.py +++ b/server/settings/tools.py @@ -414,7 +414,7 @@ DEFAULT_TOOLS_VALUES = { "hosts": [], "task_types": [], "tasks": [], - "template": "{product[type]}{Task[name]}{Variant}" + "template": "{product[type]}{Task[name]}{Variant}<_{Aov}>" }, { "product_types": [ From 3bfb11d09b02c113d63c6294a286d5531cc674eb Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 25 Apr 2025 17:12:18 +0200 Subject: [PATCH 008/595] moved interfaces to subfolder --- client/ayon_core/host/interfaces/__init__.py | 16 ++++++++++++++++ .../host/{ => interfaces}/interfaces.py | 0 2 files changed, 16 insertions(+) create mode 100644 client/ayon_core/host/interfaces/__init__.py rename client/ayon_core/host/{ => interfaces}/interfaces.py (100%) diff --git a/client/ayon_core/host/interfaces/__init__.py b/client/ayon_core/host/interfaces/__init__.py new file mode 100644 index 0000000000..fb6bdc661a --- /dev/null +++ b/client/ayon_core/host/interfaces/__init__.py @@ -0,0 +1,16 @@ +from .interfaces import ( + MissingMethodsError, + IPublishHost, + INewPublisher, + ILoadHost, + IWorkfileHost, +) + + +__all__ = ( + "MissingMethodsError", + "IWorkfileHost", + "IPublishHost", + "INewPublisher", + "ILoadHost", +) diff --git a/client/ayon_core/host/interfaces.py b/client/ayon_core/host/interfaces/interfaces.py similarity index 100% rename from client/ayon_core/host/interfaces.py rename to client/ayon_core/host/interfaces/interfaces.py From 28eaf12d9d17dc832d6f0affadd8f671c6c2588a Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 25 Apr 2025 17:13:09 +0200 Subject: [PATCH 009/595] move exception into separate file --- client/ayon_core/host/interfaces/__init__.py | 2 +- .../ayon_core/host/interfaces/exceptions.py | 15 ++++++++++++ .../ayon_core/host/interfaces/interfaces.py | 24 +------------------ 3 files changed, 17 insertions(+), 24 deletions(-) create mode 100644 client/ayon_core/host/interfaces/exceptions.py diff --git a/client/ayon_core/host/interfaces/__init__.py b/client/ayon_core/host/interfaces/__init__.py index fb6bdc661a..efe1ea6c5c 100644 --- a/client/ayon_core/host/interfaces/__init__.py +++ b/client/ayon_core/host/interfaces/__init__.py @@ -1,5 +1,5 @@ +from .exceptions import MissingMethodsError from .interfaces import ( - MissingMethodsError, IPublishHost, INewPublisher, ILoadHost, diff --git a/client/ayon_core/host/interfaces/exceptions.py b/client/ayon_core/host/interfaces/exceptions.py new file mode 100644 index 0000000000..c6b4cef4b4 --- /dev/null +++ b/client/ayon_core/host/interfaces/exceptions.py @@ -0,0 +1,15 @@ +class MissingMethodsError(ValueError): + """Exception when host miss some required methods for specific workflow. + + Args: + host (HostBase): Host implementation where are missing methods. + missing_methods (list[str]): List of missing methods. + """ + + def __init__(self, host, missing_methods): + joined_missing = ", ".join( + ['"{}"'.format(item) for item in missing_methods] + ) + super().__init__( + f"Host \"{host.name}\" miss methods {joined_missing}" + ) diff --git a/client/ayon_core/host/interfaces/interfaces.py b/client/ayon_core/host/interfaces/interfaces.py index c077dfeae9..5fc40134f8 100644 --- a/client/ayon_core/host/interfaces/interfaces.py +++ b/client/ayon_core/host/interfaces/interfaces.py @@ -1,28 +1,6 @@ from abc import ABC, abstractmethod - -class MissingMethodsError(ValueError): - """Exception when host miss some required methods for specific workflow. - - Args: - host (HostBase): Host implementation where are missing methods. - missing_methods (list[str]): List of missing methods. - """ - - def __init__(self, host, missing_methods): - joined_missing = ", ".join( - ['"{}"'.format(item) for item in missing_methods] - ) - host_name = getattr(host, "name", None) - if not host_name: - try: - host_name = host.__file__.replace("\\", "/").split("/")[-3] - except Exception: - host_name = str(host) - message = ( - "Host \"{}\" miss methods {}".format(host_name, joined_missing) - ) - super(MissingMethodsError, self).__init__(message) +from .exceptions import MissingMethodsError class ILoadHost: From 9d0d8309d0f818d9a6747c374f3265f55cb7a776 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 25 Apr 2025 17:14:16 +0200 Subject: [PATCH 010/595] move workfiles interface to separate file --- client/ayon_core/host/interfaces/__init__.py | 2 +- .../ayon_core/host/interfaces/interfaces.py | 177 +---------------- client/ayon_core/host/interfaces/workfiles.py | 178 ++++++++++++++++++ 3 files changed, 180 insertions(+), 177 deletions(-) create mode 100644 client/ayon_core/host/interfaces/workfiles.py diff --git a/client/ayon_core/host/interfaces/__init__.py b/client/ayon_core/host/interfaces/__init__.py index efe1ea6c5c..560cd3c0b4 100644 --- a/client/ayon_core/host/interfaces/__init__.py +++ b/client/ayon_core/host/interfaces/__init__.py @@ -1,9 +1,9 @@ from .exceptions import MissingMethodsError +from .workfiles import IWorkfileHost from .interfaces import ( IPublishHost, INewPublisher, ILoadHost, - IWorkfileHost, ) diff --git a/client/ayon_core/host/interfaces/interfaces.py b/client/ayon_core/host/interfaces/interfaces.py index 5fc40134f8..a41dffe92a 100644 --- a/client/ayon_core/host/interfaces/interfaces.py +++ b/client/ayon_core/host/interfaces/interfaces.py @@ -1,4 +1,4 @@ -from abc import ABC, abstractmethod +from abc import abstractmethod from .exceptions import MissingMethodsError @@ -83,181 +83,6 @@ class ILoadHost: return self.get_containers() -class IWorkfileHost(ABC): - """Implementation requirements to be able use workfile utils and tool.""" - - @staticmethod - def get_missing_workfile_methods(host): - """Look for missing methods on "old type" host implementation. - - Method is used for validation of implemented functions related to - workfiles. Checks only existence of methods. - - Args: - Union[ModuleType, HostBase]: Object of host where to look for - required methods. - - Returns: - list[str]: Missing method implementations for workfiles workflow. - """ - - if isinstance(host, IWorkfileHost): - return [] - - required = [ - "open_file", - "save_file", - "current_file", - "has_unsaved_changes", - "file_extensions", - "work_root", - ] - missing = [] - for name in required: - if not hasattr(host, name): - missing.append(name) - return missing - - @staticmethod - def validate_workfile_methods(host): - """Validate methods of "old type" host for workfiles workflow. - - Args: - Union[ModuleType, HostBase]: Object of host to validate. - - Raises: - MissingMethodsError: If there are missing methods on host - implementation. - """ - - missing = IWorkfileHost.get_missing_workfile_methods(host) - if missing: - raise MissingMethodsError(host, missing) - - @abstractmethod - def get_workfile_extensions(self): - """Extensions that can be used as save. - - Questions: - This could potentially use 'HostDefinition'. - """ - - return [] - - @abstractmethod - def save_workfile(self, dst_path=None): - """Save currently opened scene. - - Args: - dst_path (str): Where the current scene should be saved. Or use - current path if 'None' is passed. - """ - - pass - - @abstractmethod - def open_workfile(self, filepath): - """Open passed filepath in the host. - - Args: - filepath (str): Path to workfile. - """ - - pass - - @abstractmethod - def get_current_workfile(self): - """Retrieve path to current opened file. - - Returns: - str: Path to file which is currently opened. - None: If nothing is opened. - """ - - return None - - def workfile_has_unsaved_changes(self): - """Currently opened scene is saved. - - Not all hosts can know if current scene is saved because the API of - DCC does not support it. - - Returns: - bool: True if scene is saved and False if has unsaved - modifications. - None: Can't tell if workfiles has modifications. - """ - - return None - - def work_root(self, session): - """Modify workdir per host. - - Default implementation keeps workdir untouched. - - Warnings: - We must handle this modification with more sophisticated way - because this can't be called out of DCC so opening of last workfile - (calculated before DCC is launched) is complicated. Also breaking - defined work template is not a good idea. - Only place where it's really used and can make sense is Maya. There - workspace.mel can modify subfolders where to look for maya files. - - Args: - session (dict): Session context data. - - Returns: - str: Path to new workdir. - """ - - return session["AYON_WORKDIR"] - - # --- Deprecated method names --- - def file_extensions(self): - """Deprecated variant of 'get_workfile_extensions'. - - Todo: - Remove when all usages are replaced. - """ - return self.get_workfile_extensions() - - def save_file(self, dst_path=None): - """Deprecated variant of 'save_workfile'. - - Todo: - Remove when all usages are replaced. - """ - - self.save_workfile(dst_path) - - def open_file(self, filepath): - """Deprecated variant of 'open_workfile'. - - Todo: - Remove when all usages are replaced. - """ - - return self.open_workfile(filepath) - - def current_file(self): - """Deprecated variant of 'get_current_workfile'. - - Todo: - Remove when all usages are replaced. - """ - - return self.get_current_workfile() - - def has_unsaved_changes(self): - """Deprecated variant of 'workfile_has_unsaved_changes'. - - Todo: - Remove when all usages are replaced. - """ - - return self.workfile_has_unsaved_changes() - - class IPublishHost: """Functions related to new creation system in new publisher. diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py new file mode 100644 index 0000000000..433c66277e --- /dev/null +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -0,0 +1,178 @@ +from abc import ABC, abstractmethod + +from .exceptions import MissingMethodsError + + +class IWorkfileHost(ABC): + """Implementation requirements to be able use workfile utils and tool.""" + + @staticmethod + def get_missing_workfile_methods(host): + """Look for missing methods on "old type" host implementation. + + Method is used for validation of implemented functions related to + workfiles. Checks only existence of methods. + + Args: + Union[ModuleType, HostBase]: Object of host where to look for + required methods. + + Returns: + list[str]: Missing method implementations for workfiles workflow. + """ + + if isinstance(host, IWorkfileHost): + return [] + + required = [ + "open_file", + "save_file", + "current_file", + "has_unsaved_changes", + "file_extensions", + "work_root", + ] + missing = [] + for name in required: + if not hasattr(host, name): + missing.append(name) + return missing + + @staticmethod + def validate_workfile_methods(host): + """Validate methods of "old type" host for workfiles workflow. + + Args: + Union[ModuleType, HostBase]: Object of host to validate. + + Raises: + MissingMethodsError: If there are missing methods on host + implementation. + """ + + missing = IWorkfileHost.get_missing_workfile_methods(host) + if missing: + raise MissingMethodsError(host, missing) + + @abstractmethod + def get_workfile_extensions(self): + """Extensions that can be used as save. + + Questions: + This could potentially use 'HostDefinition'. + """ + + return [] + + @abstractmethod + def save_workfile(self, dst_path=None): + """Save currently opened scene. + + Args: + dst_path (str): Where the current scene should be saved. Or use + current path if 'None' is passed. + """ + + pass + + @abstractmethod + def open_workfile(self, filepath): + """Open passed filepath in the host. + + Args: + filepath (str): Path to workfile. + """ + + pass + + @abstractmethod + def get_current_workfile(self): + """Retrieve path to current opened file. + + Returns: + str: Path to file which is currently opened. + None: If nothing is opened. + """ + + return None + + def workfile_has_unsaved_changes(self): + """Currently opened scene is saved. + + Not all hosts can know if current scene is saved because the API of + DCC does not support it. + + Returns: + bool: True if scene is saved and False if has unsaved + modifications. + None: Can't tell if workfiles has modifications. + """ + + return None + + def work_root(self, session): + """Modify workdir per host. + + Default implementation keeps workdir untouched. + + Warnings: + We must handle this modification with more sophisticated way + because this can't be called out of DCC so opening of last workfile + (calculated before DCC is launched) is complicated. Also breaking + defined work template is not a good idea. + Only place where it's really used and can make sense is Maya. There + workspace.mel can modify subfolders where to look for maya files. + + Args: + session (dict): Session context data. + + Returns: + str: Path to new workdir. + """ + + return session["AYON_WORKDIR"] + + # --- Deprecated method names --- + def file_extensions(self): + """Deprecated variant of 'get_workfile_extensions'. + + Todo: + Remove when all usages are replaced. + """ + return self.get_workfile_extensions() + + def save_file(self, dst_path=None): + """Deprecated variant of 'save_workfile'. + + Todo: + Remove when all usages are replaced. + """ + + self.save_workfile(dst_path) + + def open_file(self, filepath): + """Deprecated variant of 'open_workfile'. + + Todo: + Remove when all usages are replaced. + """ + + return self.open_workfile(filepath) + + def current_file(self): + """Deprecated variant of 'get_current_workfile'. + + Todo: + Remove when all usages are replaced. + """ + + return self.get_current_workfile() + + def has_unsaved_changes(self): + """Deprecated variant of 'workfile_has_unsaved_changes'. + + Todo: + Remove when all usages are replaced. + """ + + return self.workfile_has_unsaved_changes() \ No newline at end of file From 9e1e36c412ce1a6e753bf7bba621b08d59492f23 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 25 Apr 2025 17:15:22 +0200 Subject: [PATCH 011/595] remove ABC form 'IWorkfileHost' --- client/ayon_core/host/interfaces/workfiles.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 433c66277e..6245b2e144 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -3,7 +3,7 @@ from abc import ABC, abstractmethod from .exceptions import MissingMethodsError -class IWorkfileHost(ABC): +class IWorkfileHost: """Implementation requirements to be able use workfile utils and tool.""" @staticmethod From 7e5d8612a7817bbd8a3cedcdb100a05f37a21291 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 25 Apr 2025 17:18:13 +0200 Subject: [PATCH 012/595] remove validation of methods --- client/ayon_core/host/interfaces/workfiles.py | 50 +------------------ client/ayon_core/tools/workfiles/control.py | 7 +-- 2 files changed, 2 insertions(+), 55 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 6245b2e144..496ee06e4b 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -1,58 +1,10 @@ -from abc import ABC, abstractmethod +from abc import abstractmethod -from .exceptions import MissingMethodsError class IWorkfileHost: """Implementation requirements to be able use workfile utils and tool.""" - @staticmethod - def get_missing_workfile_methods(host): - """Look for missing methods on "old type" host implementation. - - Method is used for validation of implemented functions related to - workfiles. Checks only existence of methods. - - Args: - Union[ModuleType, HostBase]: Object of host where to look for - required methods. - - Returns: - list[str]: Missing method implementations for workfiles workflow. - """ - - if isinstance(host, IWorkfileHost): - return [] - - required = [ - "open_file", - "save_file", - "current_file", - "has_unsaved_changes", - "file_extensions", - "work_root", - ] - missing = [] - for name in required: - if not hasattr(host, name): - missing.append(name) - return missing - - @staticmethod - def validate_workfile_methods(host): - """Validate methods of "old type" host for workfiles workflow. - - Args: - Union[ModuleType, HostBase]: Object of host to validate. - - Raises: - MissingMethodsError: If there are missing methods on host - implementation. - """ - - missing = IWorkfileHost.get_missing_workfile_methods(host) - if missing: - raise MissingMethodsError(host, missing) @abstractmethod def get_workfile_extensions(self): diff --git a/client/ayon_core/tools/workfiles/control.py b/client/ayon_core/tools/workfiles/control.py index 3a7459da0c..9cd3c0f76a 100644 --- a/client/ayon_core/tools/workfiles/control.py +++ b/client/ayon_core/tools/workfiles/control.py @@ -140,12 +140,7 @@ class BaseWorkfileController( if host is None: host = registered_host() - host_is_valid = False - if host is not None: - missing_methods = ( - IWorkfileHost.get_missing_workfile_methods(host) - ) - host_is_valid = len(missing_methods) == 0 + host_is_valid = isinstance(host, IWorkfileHost) self._host = host self._host_is_valid = host_is_valid From 9140d1124d38fdaa825f4d47ea47bf672d81e3f5 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 25 Apr 2025 17:22:12 +0200 Subject: [PATCH 013/595] added helper data structure for colleting workfiles --- client/ayon_core/host/interfaces/workfiles.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 496ee06e4b..077ececeb6 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -1,6 +1,73 @@ +import os from abc import abstractmethod +from dataclasses import dataclass, asdict +from typing import Optional +@dataclass +class WorkfileInfo: + filepath: str + rootless_path: str + file_size: Optional[float] + file_created: Optional[float] + file_modified: Optional[float] + workfile_entity_id: Optional[str] + description: str + created_by: Optional[str] + updated_by: Optional[str] + available: bool + + @classmethod + def new(cls, filepath, rootless_path, available, workfile_entity): + file_size = file_modified = file_created = None + if filepath and os.path.exists(filepath): + filestat = os.stat(filepath) + file_size = filestat.st_size + file_created = filestat.st_ctime + file_modified = filestat.st_mtime + + if workfile_entity is None: + workfile_entity = {} + + attrib = {} + if workfile_entity: + attrib = workfile_entity["attrib"] + + return cls( + filepath=filepath, + rootless_path=rootless_path, + file_size=file_size, + file_created=file_created, + file_modified=file_modified, + workfile_entity_id=workfile_entity.get("id"), + description=attrib.get("description") or "", + created_by=workfile_entity.get("createdBy"), + updated_by=workfile_entity.get("updatedBy"), + available=available, + ) + + def to_data(self): + """Converts file item to data. + + Returns: + dict[str, Any]: Workfile item data. + + """ + return asdict(self) + + @classmethod + def from_data(self, data): + """Converts data to workfile item. + + Args: + data (dict[str, Any]): Workfile item data. + + Returns: + WorkfileInfo: File item. + + """ + return WorkfileInfo(**data) + class IWorkfileHost: """Implementation requirements to be able use workfile utils and tool.""" From 156eb14bf645ff341463ba2bff3ed9e06174fcb9 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 25 Apr 2025 17:23:22 +0200 Subject: [PATCH 014/595] remove unnecessary 'work_root' --- client/ayon_core/host/interfaces/workfiles.py | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 077ececeb6..263651a422 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -129,28 +129,6 @@ class IWorkfileHost: return None - def work_root(self, session): - """Modify workdir per host. - - Default implementation keeps workdir untouched. - - Warnings: - We must handle this modification with more sophisticated way - because this can't be called out of DCC so opening of last workfile - (calculated before DCC is launched) is complicated. Also breaking - defined work template is not a good idea. - Only place where it's really used and can make sense is Maya. There - workspace.mel can modify subfolders where to look for maya files. - - Args: - session (dict): Session context data. - - Returns: - str: Path to new workdir. - """ - - return session["AYON_WORKDIR"] - # --- Deprecated method names --- def file_extensions(self): """Deprecated variant of 'get_workfile_extensions'. From fe28391ce8cfab29f37ee5f2fecb59258d490a8d Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 25 Apr 2025 17:24:11 +0200 Subject: [PATCH 015/595] add new line char at the end --- client/ayon_core/host/interfaces/workfiles.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 263651a422..7b69404f60 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -172,4 +172,4 @@ class IWorkfileHost: Remove when all usages are replaced. """ - return self.workfile_has_unsaved_changes() \ No newline at end of file + return self.workfile_has_unsaved_changes() From 515cd79a1ad81ebcc656c19dc06302e51b6897e4 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 25 Apr 2025 17:28:38 +0200 Subject: [PATCH 016/595] first implementation of list workfiles --- client/ayon_core/host/interfaces/workfiles.py | 132 +++++++++++++++++- 1 file changed, 131 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 7b69404f60..a2a9ee511a 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -1,7 +1,11 @@ +from __future__ import annotations import os +import platform from abc import abstractmethod from dataclasses import dataclass, asdict -from typing import Optional +from typing import Optional, Any + +import ayon_api @dataclass @@ -129,6 +133,132 @@ class IWorkfileHost: return None + def list_workfiles( + self, + project_name: str, + folder_id: str, + task_id: str, + project_entity: Optional[dict[str, Any]] = None, + folder_entity: Optional[dict[str, Any]] = None, + task_entity: Optional[dict[str, Any]] = None, + workfile_entities: Optional[list[dict[str, Any]]] = None, + template_key: Optional[str] = None, + project_settings: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, + ) -> list[WorkfileInfo]: + """List workfiles in the given folder. + + NOTES: + - Better method name? + - This method is pre-implemented as the logic can be shared across + 95% of host integrations. Ad-hoc implementation to give host + integration workfile api functionality. + - Should this method also handle workfiles based on workfile entities? + + Args: + project_name (str): Name of project. + folder_id (str): ID of folder. + task_id (str): ID of task. + project_entity (Optional[dict[str, Any]]): Project entity. + folder_entity (Optional[dict[str, Any]]): Folder entity. + task_entity (Optional[dict[str, Any]]): Task entity. + workfile_entities (Optional[list[dict[str, Any]]]): Workfile + entities. + template_key (Optional[str]): Template key. + project_settings (Optional[dict[str, Any]]): Project settings. + anatomy (Anatomy): Project anatomy. + + Returns: + list[WorkfileInfo]: List of workfiles. + + """ + from ayon_core.pipeline import Anatomy + from ayon_core.pipeline.template_data import get_template_data + from ayon_core.pipeline.workfile import get_workdir_with_workdir_data + + extensions = self.get_workfile_extensions() + if not extensions: + return [] + + if project_entity is None: + project_entity = ayon_api.get_project(project_name) + + if folder_entity is None: + folder_entity = ayon_api.get_folder_by_id(project_name, folder_id) + + if task_entity is None: + task_entity = ayon_api.get_task_by_id(project_name, task_id) + + if workfile_entities is None: + workfile_entities = list(ayon_api.get_workfiles_info( + project_name, task_ids=[task_id] + )) + + if anatomy is None: + anatomy = Anatomy(project_name, project_entity=project_entity) + + workfile_entities_by_path = { + workfile_entity["path"]: workfile_entity + for workfile_entity in workfile_entities + } + + workdir_data = get_template_data( + project_entity, + folder_entity, + task_entity, + host_name=self.name, + ) + workdir = get_workdir_with_workdir_data( + workdir_data, + project_name, + anatomy=anatomy, + template_key=template_key, + project_settings=project_settings, + ) + + if platform.system().lower() == "windows": + rootless_workdir = workdir.replace("\\", "/") + else: + rootless_workdir = workdir + + used_roots = workdir.used_values.get("root") + if used_roots: + used_root_name = next(iter(used_roots)) + root_value = used_roots[used_root_name] + workdir_end = rootless_workdir[len(root_value):].lstrip("/") + rootless_workdir = f"{{root[{used_root_name}]}}/{workdir_end}" + + filenames = [] + if os.path.exists(workdir): + filenames = list(os.listdir(workdir)) + + items = [] + for filename in filenames: + filepath = os.path.join(workdir, filename) + # TODO add 'default' support for folders + ext = os.path.splitext(filepath)[1].lower() + if ext not in extensions: + continue + + rootless_path = f"{rootless_workdir}/{filename}" + workfile_entity = workfile_entities_by_path.pop( + rootless_path, None + ) + items.append(WorkfileInfo.new( + filepath, rootless_path, True, workfile_entity + )) + + for workfile_entity in workfile_entities_by_path.values(): + # Workfile entity is not in the filesystem + # but it is in the database + rootless_path = workfile_entity["path"] + filepath = anatomy.fill_root(rootless_path) + items.append(WorkfileInfo.new( + filepath, rootless_path, False, workfile_entity + )) + + return items + # --- Deprecated method names --- def file_extensions(self): """Deprecated variant of 'get_workfile_extensions'. From 152211a047a5543fa9ae66b2bbb8e0e393b99c79 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 09:16:50 +0200 Subject: [PATCH 017/595] 'get_workfile_extensions' is not abstract anymore --- client/ayon_core/host/interfaces/workfiles.py | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index a2a9ee511a..34d7dddef6 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -77,16 +77,6 @@ class IWorkfileHost: """Implementation requirements to be able use workfile utils and tool.""" - @abstractmethod - def get_workfile_extensions(self): - """Extensions that can be used as save. - - Questions: - This could potentially use 'HostDefinition'. - """ - - return [] - @abstractmethod def save_workfile(self, dst_path=None): """Save currently opened scene. @@ -133,6 +123,18 @@ class IWorkfileHost: return None + def get_workfile_extensions(self) -> list[str]: + """Extensions that can be used as save. + + Questions: + This could potentially use 'HostDefinition'. + + Returns: + list[str]: List of extensions that can be used for saving. + + """ + return [] + def list_workfiles( self, project_name: str, From d78e25c7ecac46768c06efb407f7de513242c31e Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 10:09:32 +0200 Subject: [PATCH 018/595] added helper function to collect comments from existing workfiles --- .../pipeline/workfile/path_resolving.py | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index 9b2fe25199..bd4a7f0035 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -1,3 +1,4 @@ +from __future__ import annotations import os import re import copy @@ -12,6 +13,7 @@ from ayon_core.lib import ( Logger, StringTemplate, ) +from ayon_core.lib.path_templates import TemplateResult from ayon_core.pipeline import version_start, Anatomy from ayon_core.pipeline.template_data import get_template_data @@ -562,3 +564,99 @@ def create_workdir_extra_folders( fullpath = os.path.join(workdir, subfolder) if not os.path.exists(fullpath): os.makedirs(fullpath) + + +class CommentMatcher: + """Use anatomy and work file data to parse comments from filenames. + + Args: + extensions (set[str]): Set of extensions. + file_template (StringTemplate): Workfile file template. + data (dict[str, Any]): Data to fill the template with. + + """ + def __init__( + self, + extensions: set[str], + file_template: StringTemplate, + data: dict[str, Any] + ): + self._fname_regex = None + + if "{comment}" not in file_template: + # Don't look for comment if template doesn't allow it + return + + # Create a regex group for extensions + any_extension = "(?:{})".format( + "|".join(re.escape(ext.lstrip(".")) for ext in extensions) + ) + + # Use placeholders that will never be in the filename + temp_data = copy.deepcopy(data) + temp_data["comment"] = "<>" + temp_data["version"] = "<>" + temp_data["ext"] = "<>" + + fname_pattern = re.escape( + file_template.format_strict(temp_data) + ) + + # Replace comment and version with something we can match with regex + replacements = ( + ("<>", r"(?P.+)"), + ("<>", r"[0-9]+"), + ("<>", any_extension), + ) + for src, dest in replacements: + fname_pattern = fname_pattern.replace(re.escape(src), dest) + + # Match from beginning to end of string to be safe + self._fname_regex = re.compile(f"^{fname_pattern}$") + + def parse_comment(self, filename: str) -> Optional[str]: + """Parse the {comment} part from a filename""" + if self._fname_regex: + match = self._fname_regex.match(filename) + if match: + return match.group("comment") + return None + + +def get_comments_from_work_filenames( + filenames: list[str], + extensions: set[str], + file_template: StringTemplate, + template_data: dict[str, Any], + current_filename: Optional[str] = None, +) -> tuple[list[str], str]: + """Collect comments from workfile filenames. + + Based on 'current_filename' is also returned "current comment". + + Args: + filenames (list[str]): List of filenames to parse. + extensions (set[str]): Set of file extensions. + file_template (StringTemplate): Workfile file template. + template_data (dict[str, Any]): Data to fill the template with. + current_filename (str): Filename to check for current comment. + + Returns: + tuple[list[str], str]: List of comments and the current comment. + + """ + current_comment = "" + if not filenames: + return [], current_comment + + matcher = CommentMatcher(extensions, file_template, template_data) + + comment_hints = set() + for filename in filenames: + comment = matcher.parse_comment(filename) + if comment: + comment_hints.add(comment) + if filename == current_filename: + current_comment = comment + + return list(comment_hints), current_comment From 615529fa85a3348dd2c407d771656d31814f6603 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:31:56 +0200 Subject: [PATCH 019/595] added 'WorkfileInfo' to host public api --- client/ayon_core/host/__init__.py | 2 ++ client/ayon_core/host/interfaces/__init__.py | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/host/__init__.py b/client/ayon_core/host/__init__.py index da1237c739..80ff0f2e38 100644 --- a/client/ayon_core/host/__init__.py +++ b/client/ayon_core/host/__init__.py @@ -4,6 +4,7 @@ from .host import ( from .interfaces import ( IWorkfileHost, + WorkfileInfo, ILoadHost, IPublishHost, INewPublisher, @@ -16,6 +17,7 @@ __all__ = ( "HostBase", "IWorkfileHost", + "WorkfileInfo", "ILoadHost", "IPublishHost", "INewPublisher", diff --git a/client/ayon_core/host/interfaces/__init__.py b/client/ayon_core/host/interfaces/__init__.py index 560cd3c0b4..4ee6375012 100644 --- a/client/ayon_core/host/interfaces/__init__.py +++ b/client/ayon_core/host/interfaces/__init__.py @@ -1,5 +1,5 @@ from .exceptions import MissingMethodsError -from .workfiles import IWorkfileHost +from .workfiles import IWorkfileHost, WorkfileInfo from .interfaces import ( IPublishHost, INewPublisher, @@ -10,6 +10,7 @@ from .interfaces import ( __all__ = ( "MissingMethodsError", "IWorkfileHost", + "WorkfileInfo", "IPublishHost", "INewPublisher", "ILoadHost", From a61a94d1a9b5b9e62a376e7c77522c68c311d83b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:32:19 +0200 Subject: [PATCH 020/595] added more helper functions to workfile path mapping --- .../ayon_core/pipeline/workfile/__init__.py | 8 + .../pipeline/workfile/path_resolving.py | 279 ++++++++++++------ 2 files changed, 197 insertions(+), 90 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/__init__.py b/client/ayon_core/pipeline/workfile/__init__.py index aa7e150bca..5b8a10c288 100644 --- a/client/ayon_core/pipeline/workfile/__init__.py +++ b/client/ayon_core/pipeline/workfile/__init__.py @@ -4,6 +4,8 @@ from .path_resolving import ( get_workdir_with_workdir_data, get_workdir, + get_last_workfile_with_version_from_paths, + get_last_workfile_from_paths, get_last_workfile_with_version, get_last_workfile, @@ -11,6 +13,8 @@ from .path_resolving import ( get_custom_workfile_template_by_string_context, create_workdir_extra_folders, + + get_comments_from_workfile_paths, ) from .utils import ( @@ -37,6 +41,8 @@ __all__ = ( "get_workdir_with_workdir_data", "get_workdir", + "get_last_workfile_with_version_from_paths", + "get_last_workfile_from_paths", "get_last_workfile_with_version", "get_last_workfile", @@ -45,6 +51,8 @@ __all__ = ( "create_workdir_extra_folders", + "get_comments_from_workfile_paths", + "should_use_last_workfile_on_launch", "should_open_workfiles_tool_on_launch", "MissingWorkdirError", diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index bd4a7f0035..ac915060eb 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -113,7 +113,7 @@ def get_workdir_with_workdir_data( anatomy=None, template_key=None, project_settings=None -): +) -> TemplateResult: """Fill workdir path from entered data and project's anatomy. It is possible to pass only project's name instead of project's anatomy but @@ -133,8 +133,8 @@ def get_workdir_with_workdir_data( Returns: TemplateResult: Workdir path. - """ + """ if not anatomy: anatomy = Anatomy(project_name) @@ -176,8 +176,8 @@ def get_workdir( is stored under `AYON_HOST_NAME` key. anatomy (Anatomy): Optional argument. Anatomy object is created using project name from `project_entity`. It is preferred to pass this - argument as initialization of a new Anatomy object may be time - consuming. + argument as initialization of a new Anatomy object may be + time-consuming. template_key (str): Key of work templates in anatomy templates. Default value is defined in `get_workdir_with_workdir_data`. project_settings(Dict[str, Any]): Prepared project settings for @@ -209,6 +209,159 @@ def get_workdir( ) +def get_last_workfile_with_version_from_paths( + filepaths, file_template, template_data, extensions +): + """Return last workfile version. + + Using workfile template and it's filling data find most possible last + version of workfile which was created for the context. + + Functionality is fully based on knowing which keys are optional or what + values are expected as value. + + The last modified file is used if more files can be considered as + last workfile. + + Args: + filepaths (list[str]): Workfile paths. + file_template (str): Template of file name. + template_data (Dict[str, Any]): Data for filling template. + extensions (Iterable[str]): All allowed file extensions of workfile. + + Returns: + tuple[Union[str, None], Union[int, None]]: Last workfile with version + if there is any workfile otherwise None for both. + + """ + if not filepaths: + return None, None + + dotted_extensions = set() + for ext in extensions: + if not ext.startswith("."): + ext = f".{ext}" + dotted_extensions.add(re.escape(ext)) + + # Build template without optionals, version to digits only regex + # and comment to any definable value. + # Escape extensions dot for regex + ext_expression = "(?:" + "|".join(dotted_extensions) + ")" + + for pattern, replacement in ( + # Replace `.{ext}` with `{ext}` so we are sure dot is not at the end + (r"\.?{ext}", ext_expression), + # Replace optional keys with optional content regex + (r"<.*?>", r".*?"), + # Replace `{version}` with group regex + (r"{version.*?}", r"([0-9]+)"), + (r"{comment.*?}", r".+?"), + ): + file_template = re.sub(pattern, replacement, file_template) + + file_template = StringTemplate.format_strict_template( + file_template, template_data + ) + + # Match with ignore case on Windows due to the Windows + # OS not being case-sensitive. This avoids later running + # into the error that the file did exist if it existed + # with a different upper/lower-case. + kwargs = {} + if platform.system().lower() == "windows": + kwargs["flags"] = re.IGNORECASE + + # Get highest version among existing matching files + version = None + output_filepaths = [] + for filepath in sorted(filepaths): + filename = os.path.basename(filepath) + match = re.match(file_template, filename, **kwargs) + if not match: + continue + + if not match.groups(): + output_filepaths.append(filename) + continue + + file_version = int(match.group(1)) + if version is None or file_version > version: + output_filepaths.clear() + version = file_version + + if file_version == version: + output_filepaths.append(filepath) + + output_filepath = None + last_time = None + for _output_filepath in output_filepaths: + mod_time = None + if os.path.exists(_output_filepath): + mod_time = os.path.getmtime(_output_filepath) + if ( + last_time is None + or (mod_time is not None and last_time < mod_time) + ): + output_filepath = _output_filepath + last_time = mod_time + + return output_filepath, version + + +def get_last_workfile_from_paths( + filepaths: list[str], + file_template: str, + template_data: dict[str, Any], + extensions: set[str], +): + """Return last workfile filename. + + Returns file with version 1 if there is not workfile yet. + + Args: + filepaths (list[str]): Paths to workfiles. + file_template (str): Template of file name. + template_data (dict[str, Any]): Data for filling template. + extensions (set[str]): All allowed file extensions of workfile. + + Returns: + Optional[str]: Last or first workfile as filename of full path + to filename. + + """ + filepath, _version = get_last_workfile_with_version_from_paths( + filepaths, file_template, template_data, extensions + ) + return filepath + + +def _filter_dir_files_by_ext( + dirpath: str, + extensions: set[str], +): + """Filter files by extensions. + + Args: + dirpath (str): List of file paths. + extensions (set[str]): Set of file extensions. + + Returns: + tuple[list[str], set[str]]: Filtered list of file paths. + + """ + dotted_extensions = set() + for ext in extensions: + if not ext.startswith("."): + ext = f".{ext}" + dotted_extensions.add(ext) + filtered_paths = [ + os.path.join(dirpath, filename) + for filename in os.listdir(dirpath) + if os.path.splitext(filename)[-1] in dotted_extensions + ] + return filtered_paths, dotted_extensions + + def get_last_workfile_with_version( workdir, file_template, fill_data, extensions ): @@ -237,85 +390,24 @@ def get_last_workfile_with_version( if not os.path.exists(workdir): return None, None - dotted_extensions = set() - for ext in extensions: - if not ext.startswith("."): - ext = ".{}".format(ext) - dotted_extensions.add(ext) - - # Fast match on extension - filenames = [ - filename - for filename in os.listdir(workdir) - if os.path.splitext(filename)[-1] in dotted_extensions - ] - - # Build template without optionals, version to digits only regex - # and comment to any definable value. - # Escape extensions dot for regex - regex_exts = [ - "\\" + ext - for ext in dotted_extensions - ] - ext_expression = "(?:" + "|".join(regex_exts) + ")" - - # Replace `.{ext}` with `{ext}` so we are sure there is not dot at the end - file_template = re.sub(r"\.?{ext}", ext_expression, file_template) - # Replace optional keys with optional content regex - file_template = re.sub(r"<.*?>", r".*?", file_template) - # Replace `{version}` with group regex - file_template = re.sub(r"{version.*?}", r"([0-9]+)", file_template) - file_template = re.sub(r"{comment.*?}", r".+?", file_template) - file_template = StringTemplate.format_strict_template( - file_template, fill_data + filepaths, dotted_extensions = _filter_dir_files_by_ext( + workdir, extensions ) - # Match with ignore case on Windows due to the Windows - # OS not being case-sensitive. This avoids later running - # into the error that the file did exist if it existed - # with a different upper/lower-case. - kwargs = {} - if platform.system().lower() == "windows": - kwargs["flags"] = re.IGNORECASE - - # Get highest version among existing matching files - version = None - output_filenames = [] - for filename in sorted(filenames): - match = re.match(file_template, filename, **kwargs) - if not match: - continue - - if not match.groups(): - output_filenames.append(filename) - continue - - file_version = int(match.group(1)) - if version is None or file_version > version: - output_filenames[:] = [] - version = file_version - - if file_version == version: - output_filenames.append(filename) - - output_filename = None - if output_filenames: - if len(output_filenames) == 1: - output_filename = output_filenames[0] - else: - last_time = None - for _output_filename in output_filenames: - full_path = os.path.join(workdir, _output_filename) - mod_time = os.path.getmtime(full_path) - if last_time is None or last_time < mod_time: - output_filename = _output_filename - last_time = mod_time - - return output_filename, version + return get_last_workfile_with_version_from_paths( + filepaths, + file_template, + fill_data, + dotted_extensions, + ) def get_last_workfile( - workdir, file_template, fill_data, extensions, full_path=False + workdir: str, + file_template: str, + fill_data: dict[str, Any], + extensions: set[str], + full_path: bool = False ): """Return last workfile filename. @@ -326,17 +418,23 @@ def get_last_workfile( file_template (str): Template of file name. fill_data (Dict[str, Any]): Data for filling template. extensions (Iterable[str]): All allowed file extensions of workfile. - full_path (Optional[bool]): Full path to file is returned if + full_path (bool): Full path to file is returned if set to True. Returns: str: Last or first workfile as filename of full path to filename. """ - filename, _version = get_last_workfile_with_version( - workdir, file_template, fill_data, extensions + filepaths, dotted_extensions = _filter_dir_files_by_ext( + workdir, extensions ) - if filename is None: + filepath = get_last_workfile_from_paths( + filepaths, + file_template, + fill_data, + dotted_extensions + ) + if filepath is None: data = copy.deepcopy(fill_data) data["version"] = version_start.get_versioning_start( data["project"]["name"], @@ -350,11 +448,11 @@ def get_last_workfile( data["ext"] = extensions[0] data["ext"] = data["ext"].lstrip(".") filename = StringTemplate.format_strict_template(file_template, data) + filepath = os.path.join(workdir, filename) if full_path: - return os.path.normpath(os.path.join(workdir, filename)) - - return filename + return os.path.normpath(filepath) + return os.path.basename(filepath) def get_custom_workfile_template( @@ -623,8 +721,8 @@ class CommentMatcher: return None -def get_comments_from_work_filenames( - filenames: list[str], +def get_comments_from_workfile_paths( + filepaths: list[str], extensions: set[str], file_template: StringTemplate, template_data: dict[str, Any], @@ -635,7 +733,7 @@ def get_comments_from_work_filenames( Based on 'current_filename' is also returned "current comment". Args: - filenames (list[str]): List of filenames to parse. + filepaths (list[str]): List of filepaths to parse. extensions (set[str]): Set of file extensions. file_template (StringTemplate): Workfile file template. template_data (dict[str, Any]): Data to fill the template with. @@ -646,13 +744,14 @@ def get_comments_from_work_filenames( """ current_comment = "" - if not filenames: + if not filepaths: return [], current_comment matcher = CommentMatcher(extensions, file_template, template_data) comment_hints = set() - for filename in filenames: + for filepath in filepaths: + filename = os.path.basename(filepath) comment = matcher.parse_comment(filename) if comment: comment_hints.add(comment) From b5f8997248601ea96c021f61f478e08522b93440 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:32:30 +0200 Subject: [PATCH 021/595] selection cares about more information --- client/ayon_core/tools/workfiles/models/selection.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/tools/workfiles/models/selection.py b/client/ayon_core/tools/workfiles/models/selection.py index 2f0896842d..9a6440b2a1 100644 --- a/client/ayon_core/tools/workfiles/models/selection.py +++ b/client/ayon_core/tools/workfiles/models/selection.py @@ -62,7 +62,9 @@ class SelectionModel(object): def get_selected_workfile_path(self): return self._workfile_path - def set_selected_workfile_path(self, path): + def set_selected_workfile_path( + self, rootless_path, path, workfile_entity_id + ): if path == self._workfile_path: return @@ -72,9 +74,11 @@ class SelectionModel(object): { "project_name": self._controller.get_current_project_name(), "path": path, + "rootless_path": rootless_path, "folder_id": self._folder_id, "task_name": self._task_name, "task_id": self._task_id, + "workfile_entity_id": workfile_entity_id, }, self.event_source ) From 1037776e93f71599a9200e7fd60c952875770056 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:34:23 +0200 Subject: [PATCH 022/595] pass project settings to template key getter --- client/ayon_core/tools/workfiles/models/workfiles.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index cc034571f3..da4e455cb4 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -213,6 +213,7 @@ class WorkareaModel: self.project_name, task_type, self._controller.get_host_name(), + project_settings=self._controller.project_settings, ) def _get_last_workfile_version( From 4220f9200081db683136941907c0901e235e1717 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:34:52 +0200 Subject: [PATCH 023/595] pass host name to template data getter --- client/ayon_core/tools/workfiles/models/workfiles.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index da4e455cb4..7d56f02a2f 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -114,9 +114,9 @@ class WorkareaModel: def _get_base_data(self): if self._base_data is None: base_data = get_template_data( - ayon_api.get_project(self.project_name) + ayon_api.get_project(self._project_name), + host_name=self._controller.get_host_name(), ) - base_data["app"] = self._controller.get_host_name() self._base_data = base_data return copy.deepcopy(self._base_data) From 67f478d8b54be64f719dea395269d925c0c52ca6 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:38:08 +0200 Subject: [PATCH 024/595] modified controller base --- client/ayon_core/tools/workfiles/abstract.py | 269 +++++++++---------- 1 file changed, 120 insertions(+), 149 deletions(-) diff --git a/client/ayon_core/tools/workfiles/abstract.py b/client/ayon_core/tools/workfiles/abstract.py index 152ca33d99..78e31f9abd 100644 --- a/client/ayon_core/tools/workfiles/abstract.py +++ b/client/ayon_core/tools/workfiles/abstract.py @@ -3,75 +3,7 @@ from abc import ABC, abstractmethod from ayon_core.style import get_default_entity_icon_color - -class WorkfileInfo: - """Information about workarea file with possible additional from database. - - Args: - folder_id (str): Folder id. - task_id (str): Task id. - filepath (str): Filepath. - filesize (int): File size. - creation_time (float): Creation time (timestamp). - modification_time (float): Modification time (timestamp). - created_by (Union[str, none]): User who created the file. - updated_by (Union[str, none]): User who last updated the file. - note (str): Note. - """ - - def __init__( - self, - folder_id, - task_id, - filepath, - filesize, - creation_time, - modification_time, - created_by, - updated_by, - note, - ): - self.folder_id = folder_id - self.task_id = task_id - self.filepath = filepath - self.filesize = filesize - self.creation_time = creation_time - self.modification_time = modification_time - self.created_by = created_by - self.updated_by = updated_by - self.note = note - - def to_data(self): - """Converts WorkfileInfo item to data. - - Returns: - dict[str, Any]: Folder item data. - """ - - return { - "folder_id": self.folder_id, - "task_id": self.task_id, - "filepath": self.filepath, - "filesize": self.filesize, - "creation_time": self.creation_time, - "modification_time": self.modification_time, - "created_by": self.created_by, - "updated_by": self.updated_by, - "note": self.note, - } - - @classmethod - def from_data(cls, data): - """Re-creates WorkfileInfo item from data. - - Args: - data (dict[str, Any]): Workfile info item data. - - Returns: - WorkfileInfo: Workfile info item. - """ - - return cls(**data) +from ayon_core.host import WorkfileInfo class FolderItem: @@ -87,8 +19,8 @@ class FolderItem: label (str): Folder label. icon_name (str): Name of icon from font awesome. icon_color (str): Hex color string that will be used for icon. - """ + """ def __init__( self, entity_id, parent_id, name, label, icon_name, icon_color ): @@ -104,8 +36,8 @@ class FolderItem: Returns: dict[str, Any]: Folder item data. - """ + """ return { "entity_id": self.entity_id, "parent_id": self.parent_id, @@ -124,8 +56,8 @@ class FolderItem: Returns: FolderItem: Folder item. - """ + """ return cls(**data) @@ -144,8 +76,8 @@ class TaskItem: parent_id (str): Parent folder id. icon_name (str): Name of icon from font awesome. icon_color (str): Hex color string that will be used for icon. - """ + """ def __init__( self, task_id, name, task_type, parent_id, icon_name, icon_color ): @@ -163,8 +95,8 @@ class TaskItem: Returns: str: Task id. - """ + """ return self.task_id @property @@ -173,8 +105,8 @@ class TaskItem: Returns: str: Label of task item. - """ + """ if self._label is None: self._label = "{} ({})".format(self.name, self.task_type) return self._label @@ -184,8 +116,8 @@ class TaskItem: Returns: dict[str, Any]: Task item data. - """ + """ return { "task_id": self.task_id, "name": self.name, @@ -204,8 +136,8 @@ class TaskItem: Returns: TaskItem: Task item. - """ + """ return cls(**data) @@ -224,8 +156,8 @@ class FileItem: workfile. filepath (Optional[str]): Prepared filepath. exists (Optional[bool]): If file exists on disk. - """ + """ def __init__( self, dirpath, @@ -252,8 +184,8 @@ class FileItem: Returns: str: Full path to a file. - """ + """ if self._filepath is None: self._filepath = os.path.join(self.dirpath, self.filename) return self._filepath @@ -264,8 +196,8 @@ class FileItem: Returns: bool: If file exists on disk. - """ + """ if self._exists is None: self._exists = os.path.exists(self.filepath) return self._exists @@ -275,8 +207,8 @@ class FileItem: Returns: dict[str, Any]: File item data. - """ + """ return { "filename": self.filename, "dirpath": self.dirpath, @@ -296,8 +228,8 @@ class FileItem: Returns: FileItem: File item. - """ + """ required_keys = { "filename", "dirpath", @@ -323,8 +255,8 @@ class WorkareaFilepathResult: exists (bool): True if file exists. filepath (str): Filepath. If not provided it will be constructed from root and filename. - """ + """ def __init__(self, root, filename, exists, filepath=None): if not filepath and root and filename: filepath = os.path.join(root, filename) @@ -341,8 +273,8 @@ class AbstractWorkfilesCommon(ABC): Returns: bool: True if host is valid. - """ + """ pass @abstractmethod @@ -353,8 +285,8 @@ class AbstractWorkfilesCommon(ABC): Returns: Iterable[str]: List of extensions. - """ + """ pass @abstractmethod @@ -363,8 +295,8 @@ class AbstractWorkfilesCommon(ABC): Returns: bool: True if save is enabled. - """ + """ pass @abstractmethod @@ -373,8 +305,8 @@ class AbstractWorkfilesCommon(ABC): Args: enabled (bool): Enable save workfile when True. - """ + """ pass @@ -386,6 +318,7 @@ class AbstractWorkfilesBackend(AbstractWorkfilesCommon): Returns: str: Name of host. + """ pass @@ -395,8 +328,8 @@ class AbstractWorkfilesBackend(AbstractWorkfilesCommon): Returns: str: Name of project. - """ + """ pass @abstractmethod @@ -406,8 +339,8 @@ class AbstractWorkfilesBackend(AbstractWorkfilesCommon): Returns: Union[str, None]: Folder id or None if host does not have any context. - """ + """ pass @abstractmethod @@ -417,8 +350,8 @@ class AbstractWorkfilesBackend(AbstractWorkfilesCommon): Returns: Union[str, None]: Task name or None if host does not have any context. - """ + """ pass @abstractmethod @@ -428,8 +361,8 @@ class AbstractWorkfilesBackend(AbstractWorkfilesCommon): Returns: Union[str, None]: Path to workfile or None if host does not have opened specific file. - """ + """ pass @property @@ -439,8 +372,8 @@ class AbstractWorkfilesBackend(AbstractWorkfilesCommon): Returns: Anatomy: Project anatomy. - """ + """ pass @property @@ -450,8 +383,8 @@ class AbstractWorkfilesBackend(AbstractWorkfilesCommon): Returns: dict[str, Any]: Project settings. - """ + """ pass @abstractmethod @@ -463,8 +396,8 @@ class AbstractWorkfilesBackend(AbstractWorkfilesCommon): Returns: dict[str, Any]: Project entity data. - """ + """ pass @abstractmethod @@ -477,8 +410,8 @@ class AbstractWorkfilesBackend(AbstractWorkfilesCommon): Returns: dict[str, Any]: Folder entity data. - """ + """ pass @abstractmethod @@ -491,10 +424,24 @@ class AbstractWorkfilesBackend(AbstractWorkfilesCommon): Returns: dict[str, Any]: Task entity data. - """ + """ pass + @abstractmethod + def get_workfile_entities(self, task_id: str): + """Workfile entities for given task. + + Args: + task_id (str): Task id. + + Returns: + list[dict[str, Any]]: List of workfile entities. + + """ + pass + + @abstractmethod def emit_event(self, topic, data=None, source=None): """Emit event. @@ -502,8 +449,8 @@ class AbstractWorkfilesBackend(AbstractWorkfilesCommon): topic (str): Event topic used for callbacks filtering. data (Optional[dict[str, Any]]): Event data. source (Optional[str]): Event source. - """ + """ pass @@ -530,8 +477,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): topic (str): Name of topic. callback (Callable): Callback that will be called when event is triggered. - """ + """ pass @abstractmethod @@ -592,8 +539,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Returns: List[str]: File extensions that can be used as workfile for current host. - """ + """ pass # Selection information @@ -603,8 +550,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Returns: Union[str, None]: Folder id or None if no folder is selected. - """ + """ pass @abstractmethod @@ -616,8 +563,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Args: folder_id (Union[str, None]): Folder id or None if no folder is selected. - """ + """ pass @abstractmethod @@ -626,8 +573,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Returns: Union[str, None]: Task id or None if no folder is selected. - """ + """ pass @abstractmethod @@ -649,8 +596,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): is selected. task_name (Union[str, None]): Task name or None if no task is selected. - """ + """ pass @abstractmethod @@ -659,18 +606,22 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Returns: Union[str, None]: Selected workfile path. - """ + """ pass @abstractmethod - def set_selected_workfile_path(self, path): + def set_selected_workfile_path( + self, rootless_path, path, workfile_entity_id + ): """Change selected workfile path. Args: + rootless_path (Union[str, None]): Selected workfile rootless path. path (Union[str, None]): Selected workfile path. - """ + workfile_entity_id (Union[str, None]): Workfile entity id. + """ pass @abstractmethod @@ -680,8 +631,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Returns: Union[str, None]: Representation id or None if no representation is selected. - """ + """ pass @abstractmethod @@ -691,8 +642,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Args: representation_id (Union[str, None]): Selected workfile representation id. - """ + """ pass def get_selected_context(self): @@ -700,8 +651,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Returns: dict[str, Union[str, None]]: Selected context. - """ + """ return { "folder_id": self.get_selected_folder_id(), "task_id": self.get_selected_task_id(), @@ -737,8 +688,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): files UI element. representation_id (Optional[str]): Representation id. Used for published filed UI element. - """ + """ pass @abstractmethod @@ -750,8 +701,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Returns: dict[str, Any]: Expected selection data. - """ + """ pass @abstractmethod @@ -760,8 +711,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Args: folder_id (str): Folder id which was selected. - """ + """ pass @abstractmethod @@ -771,8 +722,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Args: folder_id (str): Folder id under which task is. task_name (str): Task name which was selected. - """ + """ pass @abstractmethod @@ -785,8 +736,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): folder_id (str): Folder id under which representation is. task_name (str): Task name under which representation is. representation_id (str): Representation id which was selected. - """ + """ pass @abstractmethod @@ -797,8 +748,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): folder_id (str): Folder id under which workfile is. task_name (str): Task name under which workfile is. workfile_name (str): Workfile filename which was selected. - """ + """ pass @abstractmethod @@ -823,8 +774,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Returns: list[FolderItem]: Minimum possible information needed for visualisation of folder hierarchy. - """ + """ pass @abstractmethod @@ -843,8 +794,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Returns: list[TaskItem]: Minimum possible information needed for visualisation of tasks. - """ + """ pass @abstractmethod @@ -853,8 +804,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Returns: bool: Has unsaved changes. - """ + """ pass @abstractmethod @@ -867,8 +818,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Returns: str: Workarea directory. - """ + """ pass @abstractmethod @@ -881,9 +832,9 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): sender (Optional[str]): Who requested workarea file items. Returns: - list[FileItem]: List of workarea file items. - """ + list[WorkfileInfo]: List of workarea file items. + """ pass @abstractmethod @@ -899,8 +850,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Returns: dict[str, Any]: Data for Save As operation. - """ + """ pass @abstractmethod @@ -925,8 +876,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Returns: WorkareaFilepathResult: Result of the operation. - """ + """ pass @abstractmethod @@ -939,43 +890,51 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Returns: list[FileItem]: List of published file items. - """ + """ pass @abstractmethod - def get_workfile_info(self, folder_id, task_name, filepath): + def get_workfile_info(self, folder_id, task_id, rootless_path): """Workfile info from database. Args: folder_id (str): Folder id. - task_name (str): Task id. - filepath (str): Workfile path. + task_id (str): Task id. + rootless_path (str): Workfile path. Returns: Union[WorkfileInfo, None]: Workfile info or None if was passed invalid context. - """ + """ pass @abstractmethod - def save_workfile_info(self, folder_id, task_name, filepath, note): + def save_workfile_info( + self, + task_id, + rootless_path, + version=None, + comment=None, + description=None, + ): """Save workfile info to database. At this moment the only information which can be saved about - workfile is 'note'. + workfile is 'description'. - When 'note' is 'None' it is only validated if workfile info exists, - and if not then creates one with empty note. + If value of 'version', 'comment' or 'description' is 'None' it is not + added/updated to entity. Args: - folder_id (str): Folder id. - task_name (str): Task id. - filepath (str): Workfile path. - note (Union[str, None]): Note. - """ + task_id (str): Task id. + rootless_path (str): Rootless workfile path. + version (Optional[int]): Version of workfile. + comment (Optional[str]): User's comment (subversion). + description (Optional[str]): Workfile description. + """ pass # General commands @@ -985,8 +944,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): Triggers 'controller.reset.started' event at the beginning and 'controller.reset.finished' at the end. - """ + """ pass # Controller actions @@ -998,8 +957,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): folder_id (str): Folder id. task_id (str): Task id. filepath (str): Workfile path. - """ + """ pass @abstractmethod @@ -1013,22 +972,27 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): self, folder_id, task_id, - workdir, + rootless_workdir, filename, template_key, - artist_note, + version, + comment, + description, ): """Save current state of workfile to workarea. Args: folder_id (str): Folder id. task_id (str): Task id. - workdir (str): Workarea directory. + rootless_workdir (str): Workarea directory. filename (str): Workarea filename. template_key (str): Template key used to get the workdir and filename. - """ + version (Optional[int]): Version of workfile. + comment (Optional[str]): User's comment (subversion). + description (Optional[str]): Workfile description. + """ pass @abstractmethod @@ -1041,7 +1005,9 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): workdir, filename, template_key, - artist_note, + version, + comment, + description, ): """Action to copy published workfile representation to workarea. @@ -1056,13 +1022,17 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): workdir (str): Workarea directory. filename (str): Workarea filename. template_key (str): Template key. - artist_note (str): Artist note. - """ + version (int): Workfile version. + comment (str): User's comment (subversion). + description (str): Description note. + """ pass @abstractmethod - def duplicate_workfile(self, src_filepath, workdir, filename, artist_note): + def duplicate_workfile( + self, src_filepath, workdir, filename, description, version, comment + ): """Duplicate workfile. Workfiles is not opened when done. @@ -1071,7 +1041,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): src_filepath (str): Source workfile path. workdir (str): Destination workdir. filename (str): Destination filename. - artist_note (str): Artist note. + version (int): Workfile version. + comment (str): User's comment (subversion). + description (str): Workfile description. """ - pass From ea12998f5b3ebac3163d2875d61f48fcb2cef18e Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:40:29 +0200 Subject: [PATCH 025/595] use only IWorkfileHost methods --- client/ayon_core/tools/workfiles/control.py | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/client/ayon_core/tools/workfiles/control.py b/client/ayon_core/tools/workfiles/control.py index 9cd3c0f76a..0bbec856ca 100644 --- a/client/ayon_core/tools/workfiles/control.py +++ b/client/ayon_core/tools/workfiles/control.py @@ -10,7 +10,6 @@ from ayon_core.settings import get_project_settings from ayon_core.pipeline import Anatomy, registered_host from ayon_core.pipeline.context_tools import ( change_current_context, - get_current_host_name, get_global_context, ) from ayon_core.pipeline.workfile import create_workdir_extra_folders @@ -288,23 +287,14 @@ class BaseWorkfileController( # Host information def get_workfile_extensions(self): - host = self._host - if isinstance(host, IWorkfileHost): - return host.get_workfile_extensions() - return host.file_extensions() + return self._host.get_workfile_extensions() def has_unsaved_changes(self): - host = self._host - if isinstance(host, IWorkfileHost): - return host.workfile_has_unsaved_changes() - return host.has_unsaved_changes() + return self._host.workfile_has_unsaved_changes() # Current context def get_host_name(self): - host = self._host - if isinstance(host, IWorkfileHost): - return host.name - return get_current_host_name() + return self._host.name def _get_host_current_context(self): if hasattr(self._host, "get_current_context"): @@ -321,10 +311,7 @@ class BaseWorkfileController( return self._current_task_name def get_current_workfile(self): - host = self._host - if isinstance(host, IWorkfileHost): - return host.get_current_workfile() - return host.current_file() + return self._host.get_current_workfile() # Selection information def get_selected_folder_id(self): From f5c8f01da520d64e3d56728c8c9fcc148b848bcb Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:41:06 +0200 Subject: [PATCH 026/595] pass host to workfiles model --- client/ayon_core/tools/workfiles/control.py | 2 +- client/ayon_core/tools/workfiles/models/workfiles.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/tools/workfiles/control.py b/client/ayon_core/tools/workfiles/control.py index 0bbec856ca..76a113097d 100644 --- a/client/ayon_core/tools/workfiles/control.py +++ b/client/ayon_core/tools/workfiles/control.py @@ -176,7 +176,7 @@ class BaseWorkfileController( return UsersModel(self) def _create_workfiles_model(self): - return WorkfilesModel(self) + return WorkfilesModel(self._host, self) def _create_expected_selection_obj(self): return WorkfilesToolExpectedSelection(self) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 7d56f02a2f..0be559fef4 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -91,7 +91,8 @@ class WorkareaModel: by host integration. """ - def __init__(self, controller): + def __init__(self, host, controller): + self._host = host self._controller = controller extensions = None if controller.is_host_valid(): @@ -741,11 +742,11 @@ class PublishWorkfilesModel: class WorkfilesModel: """Workfiles model.""" - def __init__(self, controller): + def __init__(self, host, controller): self._controller = controller self._entities_model = WorkfileEntitiesModel(controller) - self._workarea_model = WorkareaModel(controller) + self._workarea_model = WorkareaModel(host, controller) self._published_model = PublishWorkfilesModel(controller) def get_workfile_info(self, folder_id, task_id, filepath): From 326a182aa23fe4d8bd17197e02e64957d6e2a6fa Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:41:47 +0200 Subject: [PATCH 027/595] updated 'set_selected_workfile_path' --- client/ayon_core/tools/workfiles/control.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/workfiles/control.py b/client/ayon_core/tools/workfiles/control.py index 76a113097d..4c30a93d78 100644 --- a/client/ayon_core/tools/workfiles/control.py +++ b/client/ayon_core/tools/workfiles/control.py @@ -332,8 +332,12 @@ class BaseWorkfileController( def get_selected_workfile_path(self): return self._selection_model.get_selected_workfile_path() - def set_selected_workfile_path(self, path): - self._selection_model.set_selected_workfile_path(path) + def set_selected_workfile_path( + self, rootless_path, path, workfile_entity_id + ): + self._selection_model.set_selected_workfile_path( + rootless_path, path, workfile_entity_id + ) def get_selected_representation_id(self): return self._selection_model.get_selected_representation_id() From ad7b2c4790f29fae272bd0ebf2f9708e58a16744 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:42:36 +0200 Subject: [PATCH 028/595] more methods requiring 'IWorkfileHost' --- client/ayon_core/tools/workfiles/control.py | 36 ++++++++------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/client/ayon_core/tools/workfiles/control.py b/client/ayon_core/tools/workfiles/control.py index 4c30a93d78..bde300ad2c 100644 --- a/client/ayon_core/tools/workfiles/control.py +++ b/client/ayon_core/tools/workfiles/control.py @@ -531,7 +531,7 @@ class BaseWorkfileController( def save_current_workfile(self): current_file = self.get_current_workfile() - self._host_save_workfile(current_file) + self._host.save_workfile(current_file) def save_as_workfile( self, @@ -614,21 +614,6 @@ class BaseWorkfileController( {"failed": failed}, ) - # Helper host methods that resolve 'IWorkfileHost' interface - def _host_open_workfile(self, filepath): - host = self._host - if isinstance(host, IWorkfileHost): - host.open_workfile(filepath) - else: - host.open_file(filepath) - - def _host_save_workfile(self, filepath): - host = self._host - if isinstance(host, IWorkfileHost): - host.save_workfile(filepath) - else: - host.save_file(filepath) - def _emit_event(self, topic, data=None): self.emit_event(topic, data, "controller") @@ -685,7 +670,7 @@ class BaseWorkfileController( ): self._change_current_context(project_name, folder_id, task_id) - self._host_open_workfile(filepath) + self._host.open_workfile(filepath) emit_event("workfile.open.after", event_data, source="workfiles.tool") @@ -734,16 +719,23 @@ class BaseWorkfileController( dst_filepath = os.path.join(workdir, filename) if src_filepath: shutil.copyfile(src_filepath, dst_filepath) - self._host_open_workfile(dst_filepath) + self._host.open_workfile(dst_filepath) else: - self._host_save_workfile(dst_filepath) + self._host.save_workfile(dst_filepath) # Make sure workfile info exists - if not artist_note: - artist_note = None + if not description: + description = None + if not comment: + comment = None self.save_workfile_info( - folder_id, task_name, dst_filepath, note=artist_note + task_id, + f"{rootless_workdir}/{filename}", + version, + comment, + description, ) + self._workfiles_model.reset_workarea_file_items(task_id) # Create extra folders create_workdir_extra_folders( From ec579ca93a93c2adb8c5a0339fcac69dbd6dcd65 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:43:54 +0200 Subject: [PATCH 029/595] updated controller arguments to match needs --- client/ayon_core/tools/workfiles/control.py | 56 +++++++++++++++------ 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/client/ayon_core/tools/workfiles/control.py b/client/ayon_core/tools/workfiles/control.py index bde300ad2c..649db71981 100644 --- a/client/ayon_core/tools/workfiles/control.py +++ b/client/ayon_core/tools/workfiles/control.py @@ -1,5 +1,6 @@ import os import shutil +from typing import Optional import ayon_api @@ -410,7 +411,7 @@ class BaseWorkfileController( def get_workarea_file_items(self, folder_id, task_name, sender=None): task_id = self._get_task_id(folder_id, task_name) return self._workfiles_model.get_workarea_file_items( - folder_id, task_id, task_name + folder_id, task_id ) def get_workarea_save_as_data(self, folder_id, task_id): @@ -446,16 +447,25 @@ class BaseWorkfileController( return self._workfiles_model.get_published_file_items( folder_id, task_name) - def get_workfile_info(self, folder_id, task_name, filepath): - task_id = self._get_task_id(folder_id, task_name) + def get_workfile_info(self, folder_id, task_id, rootless_path): return self._workfiles_model.get_workfile_info( - folder_id, task_id, filepath + folder_id, task_id, rootless_path ) - def save_workfile_info(self, folder_id, task_name, filepath, note): - task_id = self._get_task_id(folder_id, task_name) + def save_workfile_info( + self, + task_id, + rootless_path, + version=None, + comment=None, + description=None, + ): self._workfiles_model.save_workfile_info( - folder_id, task_id, filepath, note + task_id, + rootless_path, + version, + comment, + description, ) def reset(self): @@ -537,10 +547,12 @@ class BaseWorkfileController( self, folder_id, task_id, - workdir, + rootless_workdir, filename, template_key, - artist_note, + version, + comment, + description, ): self._emit_event("save_as.started") @@ -549,10 +561,12 @@ class BaseWorkfileController( self._save_as_workfile( folder_id, task_id, - workdir, + rootless_workdir, filename, template_key, - artist_note=artist_note, + version, + comment, + description, ) except Exception: failed = True @@ -572,7 +586,9 @@ class BaseWorkfileController( workdir, filename, template_key, - artist_note, + version, + comment, + description, ): self._emit_event("copy_representation.started") @@ -584,7 +600,9 @@ class BaseWorkfileController( workdir, filename, template_key, - artist_note, + version, + comment, + description, src_filepath=representation_filepath ) except Exception: @@ -598,7 +616,9 @@ class BaseWorkfileController( {"failed": failed}, ) - def duplicate_workfile(self, src_filepath, workdir, filename, artist_note): + def duplicate_workfile( + self, src_filepath, workdir, filename, version, comment, description + ): self._emit_event("workfile_duplicate.started") failed = False @@ -678,10 +698,12 @@ class BaseWorkfileController( self, folder_id: str, task_id: str, - workdir: str, + rootless_workdir: str, filename: str, template_key: str, - artist_note: str, + version: Optional[int], + comment: Optional[str], + description: Optional[str], src_filepath=None, ): # Trigger before save event @@ -690,6 +712,8 @@ class BaseWorkfileController( task = self.get_task_entity(project_name, task_id) task_name = task["name"] + workdir = self.project_anatomy.fill_root(rootless_workdir) + # QUESTION should the data be different for 'before' and 'after'? event_data = self._get_event_context_data( project_name, folder_id, task_id, folder, task From 16b29a6b0a102925e4af8c25975b69be2601269f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:49:55 +0200 Subject: [PATCH 030/595] added reset to workfile model --- client/ayon_core/tools/workfiles/control.py | 1 + client/ayon_core/tools/workfiles/models/workfiles.py | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/client/ayon_core/tools/workfiles/control.py b/client/ayon_core/tools/workfiles/control.py index 649db71981..cce6bfca10 100644 --- a/client/ayon_core/tools/workfiles/control.py +++ b/client/ayon_core/tools/workfiles/control.py @@ -505,6 +505,7 @@ class BaseWorkfileController( self._projects_model.reset() self._hierarchy_model.reset() + self._workfiles_model.reset() if not expected_folder_id: expected_folder_id = folder_id diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 0be559fef4..5392402063 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -455,6 +455,10 @@ class WorkfileEntitiesModel: self._items = {} self._current_username = _NOT_SET + def reset(self): + self._cache = {} + self._items = {} + def _get_workfile_info_identifier( self, folder_id, task_id, rootless_path ): @@ -749,6 +753,10 @@ class WorkfilesModel: self._workarea_model = WorkareaModel(host, controller) self._published_model = PublishWorkfilesModel(controller) + def reset(self): + self._entities_model.reset() + self._workarea_model.reset() + def get_workfile_info(self, folder_id, task_id, filepath): return self._entities_model.get_workfile_info( folder_id, task_id, filepath From 085f4cbbd7e5572f388992f5b3345c511330ab7d Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:51:28 +0200 Subject: [PATCH 031/595] added more cache items --- .../ayon_core/tools/workfiles/models/workfiles.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 5392402063..7b928cf57e 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -7,7 +7,11 @@ import arrow import ayon_api from ayon_api.operations import OperationsSession -from ayon_core.lib import get_ayon_username +from ayon_core.lib import ( + get_ayon_username, + NestedCacheItem, + CacheItem, +) from ayon_core.pipeline.template_data import ( get_template_data, get_task_template_data, @@ -102,6 +106,10 @@ class WorkareaModel: self._fill_data_by_folder_id = {} self._task_data_by_folder_id = {} self._workdir_by_context = {} + self._file_items_mapping = {} + self._file_items_cache = NestedCacheItem( + levels=1, default_factory=list + ) @property def project_name(self): @@ -111,6 +119,9 @@ class WorkareaModel: self._base_data = None self._fill_data_by_folder_id = {} self._task_data_by_folder_id = {} + self._workdir_by_context = {} + self._file_items_mapping = {} + self._file_items_cache.reset() def _get_base_data(self): if self._base_data is None: From 1211a714362da13687740946958ab0203776bc6c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:52:45 +0200 Subject: [PATCH 032/595] move private methods below public ones --- .../tools/workfiles/models/workfiles.py | 294 +++++++++--------- 1 file changed, 147 insertions(+), 147 deletions(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 7b928cf57e..9cb174b840 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -123,51 +123,6 @@ class WorkareaModel: self._file_items_mapping = {} self._file_items_cache.reset() - def _get_base_data(self): - if self._base_data is None: - base_data = get_template_data( - ayon_api.get_project(self._project_name), - host_name=self._controller.get_host_name(), - ) - self._base_data = base_data - return copy.deepcopy(self._base_data) - - def _get_folder_data(self, folder_id): - fill_data = self._fill_data_by_folder_id.get(folder_id) - if fill_data is None: - folder = self._controller.get_folder_entity( - self.project_name, folder_id - ) - fill_data = get_folder_template_data(folder, self.project_name) - self._fill_data_by_folder_id[folder_id] = fill_data - return copy.deepcopy(fill_data) - - def _get_task_data(self, project_entity, folder_id, task_id): - task_data = self._task_data_by_folder_id.setdefault(folder_id, {}) - if task_id not in task_data: - task = self._controller.get_task_entity( - self.project_name, task_id - ) - if task: - task_data[task_id] = get_task_template_data( - project_entity, task) - return copy.deepcopy(task_data[task_id]) - - def _prepare_fill_data(self, folder_id, task_id): - if not folder_id or not task_id: - return {} - - base_data = self._get_base_data() - project_name = base_data["project"]["name"] - folder_data = self._get_folder_data(folder_id) - project_entity = self._controller.get_project_entity(project_name) - task_data = self._get_task_data(project_entity, folder_id, task_id) - - base_data.update(folder_data) - base_data.update(task_data) - - return base_data - def get_workarea_dir_by_context(self, folder_id, task_id): if not folder_id or not task_id: return None @@ -218,108 +173,6 @@ class WorkareaModel: )) return items - def _get_template_key(self, fill_data): - task_type = fill_data.get("task", {}).get("type") - # TODO cache - return get_workfile_template_key( - self.project_name, - task_type, - self._controller.get_host_name(), - project_settings=self._controller.project_settings, - ) - - def _get_last_workfile_version( - self, workdir, file_template, fill_data, extensions - ): - """ - - Todos: - Validate if logic of this function is correct. It does return - last version + 1 which might be wrong. - - Args: - workdir (str): Workdir path. - file_template (str): File template. - fill_data (dict[str, Any]): Fill data. - extensions (set[str]): Extensions. - - Returns: - int: Next workfile version. - - """ - version = get_last_workfile_with_version( - workdir, file_template, fill_data, extensions - )[1] - - if version is None: - task_info = fill_data.get("task", {}) - version = get_versioning_start( - self.project_name, - self._controller.get_host_name(), - task_name=task_info.get("name"), - task_type=task_info.get("type"), - product_type="workfile", - project_settings=self._controller.project_settings, - ) - else: - version += 1 - return version - - def _get_comments_from_root( - self, - file_template, - extensions, - fill_data, - root, - current_filename, - ): - """Get comments from root directory. - - Args: - file_template (AnatomyStringTemplate): File template. - extensions (set[str]): Extensions. - fill_data (dict[str, Any]): Fill data. - root (str): Root directory. - current_filename (str): Current filename. - - Returns: - Tuple[list[str], Union[str, None]]: Comment hints and current - comment. - - """ - current_comment = None - filenames = [] - if root and os.path.exists(root): - for filename in os.listdir(root): - path = os.path.join(root, filename) - if not os.path.isfile(path): - continue - - ext = os.path.splitext(filename)[-1].lower() - if ext in extensions: - filenames.append(filename) - - if not filenames: - return [], current_comment - - matcher = CommentMatcher(extensions, file_template, fill_data) - - comment_hints = set() - for filename in filenames: - comment = matcher.parse_comment(filename) - if comment: - comment_hints.add(comment) - if filename == current_filename: - current_comment = comment - - return list(comment_hints), current_comment - - def _get_workdir(self, anatomy, template_key, fill_data): - directory_template = anatomy.get_template_item( - "work", template_key, "directory" - ) - return directory_template.format_strict(fill_data).normalized() - def get_workarea_save_as_data(self, folder_id, task_id): folder_entity = None task_entity = None @@ -452,6 +305,153 @@ class WorkareaModel: exists ) + def _get_base_data(self): + if self._base_data is None: + base_data = get_template_data( + ayon_api.get_project(self._project_name), + host_name=self._controller.get_host_name(), + ) + self._base_data = base_data + return copy.deepcopy(self._base_data) + + def _get_folder_data(self, folder_id): + fill_data = self._fill_data_by_folder_id.get(folder_id) + if fill_data is None: + folder = self._controller.get_folder_entity( + self.project_name, folder_id + ) + fill_data = get_folder_template_data(folder, self.project_name) + self._fill_data_by_folder_id[folder_id] = fill_data + return copy.deepcopy(fill_data) + + def _get_task_data(self, project_entity, folder_id, task_id): + task_data = self._task_data_by_folder_id.setdefault(folder_id, {}) + if task_id not in task_data: + task = self._controller.get_task_entity( + self.project_name, task_id + ) + if task: + task_data[task_id] = get_task_template_data( + project_entity, task) + return copy.deepcopy(task_data[task_id]) + + def _prepare_fill_data(self, folder_id, task_id): + if not folder_id or not task_id: + return {} + + base_data = self._get_base_data() + project_name = base_data["project"]["name"] + folder_data = self._get_folder_data(folder_id) + project_entity = self._controller.get_project_entity(project_name) + task_data = self._get_task_data(project_entity, folder_id, task_id) + + base_data.update(folder_data) + base_data.update(task_data) + + return base_data + + def _get_template_key(self, fill_data): + task_type = fill_data.get("task", {}).get("type") + # TODO cache + return get_workfile_template_key( + self.project_name, + task_type, + self._controller.get_host_name(), + project_settings=self._controller.project_settings, + ) + + def _get_last_workfile_version( + self, workdir, file_template, fill_data, extensions + ): + """ + + Todos: + Validate if logic of this function is correct. It does return + last version + 1 which might be wrong. + + Args: + workdir (str): Workdir path. + file_template (str): File template. + fill_data (dict[str, Any]): Fill data. + extensions (set[str]): Extensions. + + Returns: + int: Next workfile version. + + """ + version = get_last_workfile_with_version( + workdir, file_template, fill_data, extensions + )[1] + + if version is None: + task_info = fill_data.get("task", {}) + version = get_versioning_start( + self.project_name, + self._controller.get_host_name(), + task_name=task_info.get("name"), + task_type=task_info.get("type"), + product_type="workfile", + project_settings=self._controller.project_settings, + ) + else: + version += 1 + return version + + def _get_comments_from_root( + self, + file_template, + extensions, + fill_data, + root, + current_filename, + ): + """Get comments from root directory. + + Args: + file_template (AnatomyStringTemplate): File template. + extensions (set[str]): Extensions. + fill_data (dict[str, Any]): Fill data. + root (str): Root directory. + current_filename (str): Current filename. + + Returns: + Tuple[list[str], Union[str, None]]: Comment hints and current + comment. + + """ + current_comment = None + filenames = [] + if root and os.path.exists(root): + for filename in os.listdir(root): + path = os.path.join(root, filename) + if not os.path.isfile(path): + continue + + ext = os.path.splitext(filename)[-1].lower() + if ext in extensions: + filenames.append(filename) + + if not filenames: + return [], current_comment + + matcher = CommentMatcher(extensions, file_template, fill_data) + + comment_hints = set() + for filename in filenames: + comment = matcher.parse_comment(filename) + if comment: + comment_hints.add(comment) + if filename == current_filename: + current_comment = comment + + return list(comment_hints), current_comment + + def _get_workdir(self, anatomy, template_key, fill_data): + directory_template = anatomy.get_template_item( + "work", template_key, "directory" + ) + return directory_template.format_strict(fill_data).normalized() + class WorkfileEntitiesModel: """Workfile entities model. From a2dad64fb57d76988630d87a14415d94e238f97f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:53:28 +0200 Subject: [PATCH 033/595] move public methods above private --- .../tools/workfiles/models/workfiles.py | 110 +++++++++--------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 9cb174b840..14eee7b895 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -470,61 +470,6 @@ class WorkfileEntitiesModel: self._cache = {} self._items = {} - def _get_workfile_info_identifier( - self, folder_id, task_id, rootless_path - ): - return "_".join([folder_id, task_id, rootless_path]) - - def _get_rootless_path(self, filepath): - anatomy = self._controller.project_anatomy - - workdir, filename = os.path.split(filepath) - _, rootless_dir = anatomy.find_root_template_from_path(workdir) - return "/".join([ - os.path.normpath(rootless_dir).replace("\\", "/"), - filename - ]) - - def _prepare_workfile_info_item( - self, folder_id, task_id, workfile_info, filepath - ): - note = "" - created_by = None - updated_by = None - if workfile_info: - note = workfile_info["attrib"].get("description") or "" - created_by = workfile_info.get("createdBy") - updated_by = workfile_info.get("updatedBy") - - filestat = os.stat(filepath) - return WorkfileInfo( - folder_id, - task_id, - filepath, - filesize=filestat.st_size, - creation_time=filestat.st_ctime, - modification_time=filestat.st_mtime, - created_by=created_by, - updated_by=updated_by, - note=note - ) - - def _get_workfile_info(self, folder_id, task_id, identifier): - workfile_info = self._cache.get(identifier) - if workfile_info is not None: - return workfile_info - - for workfile_info in ayon_api.get_workfiles_info( - self._controller.get_current_project_name(), - task_ids=[task_id], - fields=["id", "path", "attrib", "createdBy", "updatedBy"], - ): - workfile_identifier = self._get_workfile_info_identifier( - folder_id, task_id, workfile_info["path"] - ) - self._cache[workfile_identifier] = workfile_info - return self._cache.get(identifier) - def get_workfile_info( self, folder_id, task_id, filepath, rootless_path=None ): @@ -599,6 +544,61 @@ class WorkfileEntitiesModel: ) session.commit() + def _get_workfile_info_identifier( + self, folder_id, task_id, rootless_path + ): + return "_".join([folder_id, task_id, rootless_path]) + + def _get_rootless_path(self, filepath): + anatomy = self._controller.project_anatomy + + workdir, filename = os.path.split(filepath) + _, rootless_dir = anatomy.find_root_template_from_path(workdir) + return "/".join([ + os.path.normpath(rootless_dir).replace("\\", "/"), + filename + ]) + + def _prepare_workfile_info_item( + self, folder_id, task_id, workfile_info, filepath + ): + note = "" + created_by = None + updated_by = None + if workfile_info: + note = workfile_info["attrib"].get("description") or "" + created_by = workfile_info.get("createdBy") + updated_by = workfile_info.get("updatedBy") + + filestat = os.stat(filepath) + return WorkfileInfo( + folder_id, + task_id, + filepath, + filesize=filestat.st_size, + creation_time=filestat.st_ctime, + modification_time=filestat.st_mtime, + created_by=created_by, + updated_by=updated_by, + note=note + ) + + def _get_workfile_info(self, folder_id, task_id, identifier): + workfile_info = self._cache.get(identifier) + if workfile_info is not None: + return workfile_info + + for workfile_info in ayon_api.get_workfiles_info( + self._controller.get_current_project_name(), + task_ids=[task_id], + fields=["id", "path", "attrib", "createdBy", "updatedBy"], + ): + workfile_identifier = self._get_workfile_info_identifier( + folder_id, task_id, workfile_info["path"] + ) + self._cache[workfile_identifier] = workfile_info + return self._cache.get(identifier) + def _create_workfile_info_entity(self, task_id, rootless_path, note): extension = os.path.splitext(rootless_path)[1] From 0f64ab1ab64022644a80a1d57abb9c103214e488 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:54:43 +0200 Subject: [PATCH 034/595] remove unused method --- .../tools/workfiles/models/workfiles.py | 49 ------------------- 1 file changed, 49 deletions(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 14eee7b895..0f44a960a1 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -397,55 +397,6 @@ class WorkareaModel: version += 1 return version - def _get_comments_from_root( - self, - file_template, - extensions, - fill_data, - root, - current_filename, - ): - """Get comments from root directory. - - Args: - file_template (AnatomyStringTemplate): File template. - extensions (set[str]): Extensions. - fill_data (dict[str, Any]): Fill data. - root (str): Root directory. - current_filename (str): Current filename. - - Returns: - Tuple[list[str], Union[str, None]]: Comment hints and current - comment. - - """ - current_comment = None - filenames = [] - if root and os.path.exists(root): - for filename in os.listdir(root): - path = os.path.join(root, filename) - if not os.path.isfile(path): - continue - - ext = os.path.splitext(filename)[-1].lower() - if ext in extensions: - filenames.append(filename) - - if not filenames: - return [], current_comment - - matcher = CommentMatcher(extensions, file_template, fill_data) - - comment_hints = set() - for filename in filenames: - comment = matcher.parse_comment(filename) - if comment: - comment_hints.add(comment) - if filename == current_filename: - current_comment = comment - - return list(comment_hints), current_comment - def _get_workdir(self, anatomy, template_key, fill_data): directory_template = anatomy.get_template_item( "work", template_key, "directory" From 5fe625a8bd140e1d8804a2b757f3d9f6a45ebb86 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 16:55:32 +0200 Subject: [PATCH 035/595] remove more unnecessary methods --- .../tools/workfiles/models/workfiles.py | 55 ------------------- 1 file changed, 55 deletions(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 0f44a960a1..4e2bce3e31 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -495,61 +495,6 @@ class WorkfileEntitiesModel: ) session.commit() - def _get_workfile_info_identifier( - self, folder_id, task_id, rootless_path - ): - return "_".join([folder_id, task_id, rootless_path]) - - def _get_rootless_path(self, filepath): - anatomy = self._controller.project_anatomy - - workdir, filename = os.path.split(filepath) - _, rootless_dir = anatomy.find_root_template_from_path(workdir) - return "/".join([ - os.path.normpath(rootless_dir).replace("\\", "/"), - filename - ]) - - def _prepare_workfile_info_item( - self, folder_id, task_id, workfile_info, filepath - ): - note = "" - created_by = None - updated_by = None - if workfile_info: - note = workfile_info["attrib"].get("description") or "" - created_by = workfile_info.get("createdBy") - updated_by = workfile_info.get("updatedBy") - - filestat = os.stat(filepath) - return WorkfileInfo( - folder_id, - task_id, - filepath, - filesize=filestat.st_size, - creation_time=filestat.st_ctime, - modification_time=filestat.st_mtime, - created_by=created_by, - updated_by=updated_by, - note=note - ) - - def _get_workfile_info(self, folder_id, task_id, identifier): - workfile_info = self._cache.get(identifier) - if workfile_info is not None: - return workfile_info - - for workfile_info in ayon_api.get_workfiles_info( - self._controller.get_current_project_name(), - task_ids=[task_id], - fields=["id", "path", "attrib", "createdBy", "updatedBy"], - ): - workfile_identifier = self._get_workfile_info_identifier( - folder_id, task_id, workfile_info["path"] - ) - self._cache[workfile_identifier] = workfile_info - return self._cache.get(identifier) - def _create_workfile_info_entity(self, task_id, rootless_path, note): extension = os.path.splitext(rootless_path)[1] From f4961bc1f9c3a1b571406c6752ac7740e79b5bcf Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 17:02:15 +0200 Subject: [PATCH 036/595] updated workarea model --- .../tools/workfiles/models/workfiles.py | 316 ++++++++++-------- 1 file changed, 182 insertions(+), 134 deletions(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 4e2bce3e31..6fc76ac458 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -1,7 +1,10 @@ +from __future__ import annotations import os -import re import copy import uuid +import platform +import typing +from typing import Optional, Any import arrow import ayon_api @@ -12,6 +15,7 @@ from ayon_core.lib import ( NestedCacheItem, CacheItem, ) +from ayon_core.host import WorkfileInfo from ayon_core.pipeline.template_data import ( get_template_data, get_task_template_data, @@ -20,73 +24,22 @@ from ayon_core.pipeline.template_data import ( from ayon_core.pipeline.workfile import ( get_workdir_with_workdir_data, get_workfile_template_key, - get_last_workfile_with_version, + get_last_workfile_with_version_from_paths, + get_comments_from_workfile_paths, ) from ayon_core.pipeline.version_start import get_versioning_start from ayon_core.tools.workfiles.abstract import ( WorkareaFilepathResult, FileItem, - WorkfileInfo, ) +if typing.TYPE_CHECKING: + from typing import Union + from ayon_core.pipeline import Anatomy + _NOT_SET = object() -class CommentMatcher(object): - """Use anatomy and work file data to parse comments from filenames. - - Args: - extensions (set[str]): Set of extensions. - file_template (AnatomyStringTemplate): File template. - data (dict[str, Any]): Data to fill the template with. - - """ - def __init__(self, extensions, file_template, data): - self.fname_regex = None - - if "{comment}" not in file_template: - # Don't look for comment if template doesn't allow it - return - - # Create a regex group for extensions - any_extension = "(?:{})".format( - "|".join(re.escape(ext.lstrip(".")) for ext in extensions) - ) - - # Use placeholders that will never be in the filename - temp_data = copy.deepcopy(data) - temp_data["comment"] = "<>" - temp_data["version"] = "<>" - temp_data["ext"] = "<>" - - fname_pattern = file_template.format_strict(temp_data) - fname_pattern = re.escape(fname_pattern) - - # Replace comment and version with something we can match with regex - replacements = { - "<>": "(.+)", - "<>": "[0-9]+", - "<>": any_extension, - } - for src, dest in replacements.items(): - fname_pattern = fname_pattern.replace(re.escape(src), dest) - - # Match from beginning to end of string to be safe - fname_pattern = "^{}$".format(fname_pattern) - - self.fname_regex = re.compile(fname_pattern) - - def parse_comment(self, filepath): - """Parse the {comment} part from a filename""" - if not self.fname_regex: - return - - fname = os.path.basename(filepath) - match = self.fname_regex.match(fname) - if match: - return match.group(1) - - class WorkareaModel: """Workfiles model looking for workfiles in workare folder. @@ -111,10 +64,6 @@ class WorkareaModel: levels=1, default_factory=list ) - @property - def project_name(self): - return self._controller.get_current_project_name() - def reset(self): self._base_data = None self._fill_data_by_folder_id = {} @@ -123,7 +72,14 @@ class WorkareaModel: self._file_items_mapping = {} self._file_items_cache.reset() - def get_workarea_dir_by_context(self, folder_id, task_id): + def reset_file_items(self, task_id: str): + cache: CacheItem = self._file_items_cache[task_id] + cache.set_invalid() + self._file_items_mapping.pop(task_id, None) + + def get_workarea_dir_by_context( + self, folder_id: str, task_id: str + ) -> Optional[str]: if not folder_id or not task_id: return None folder_mapping = self._workdir_by_context.setdefault(folder_id, {}) @@ -135,54 +91,56 @@ class WorkareaModel: workdir = get_workdir_with_workdir_data( workdir_data, - self.project_name, + self._project_name, anatomy=self._controller.project_anatomy, ) folder_mapping[task_id] = workdir return workdir - def get_file_items(self, folder_id, task_id, task_name): - items = [] - if not folder_id or not task_id: - return items + def get_file_items( + self, + folder_id: Optional[str], + task_id: Optional[str], + ) -> list[WorkfileInfo]: + return self._cache_file_items(folder_id, task_id) - workdir = self.get_workarea_dir_by_context(folder_id, task_id) - if not os.path.exists(workdir): - return items + def get_workfile_info( + self, + folder_id: Optional[str], + task_id: Optional[str], + rootless_path: Optional[str] + ): + if not folder_id or not task_id or not rootless_path: + return None - for filename in os.listdir(workdir): - # We want to support both files and folders. e.g. Silhoutte uses - # folders as its project files. So we do not check whether it is - # a file or not. - filepath = os.path.join(workdir, filename) + mapping = self._file_items_mapping.get(task_id) + if mapping is None: + self._cache_file_items(folder_id, task_id) + mapping = self._file_items_mapping[task_id] + return mapping.get(rootless_path) - ext = os.path.splitext(filename)[1].lower() - if ext not in self._extensions: - continue + def update_file_description( + self, task_id: str, rootless_path: str, description: str + ): + mapping = self._file_items_mapping.get(task_id) + if not mapping: + return + item = mapping.get(rootless_path) + if item is not None: + item.description = description - workfile_info = self._controller.get_workfile_info( - folder_id, task_name, filepath - ) - modified = os.path.getmtime(filepath) - items.append(FileItem( - workdir, - filename, - modified, - workfile_info.created_by, - workfile_info.updated_by, - )) - return items - - def get_workarea_save_as_data(self, folder_id, task_id): + def get_workarea_save_as_data( + self, folder_id: Optional[str], task_id: Optional[str] + ) -> dict[str, Any]: folder_entity = None task_entity = None if folder_id: folder_entity = self._controller.get_folder_entity( - self.project_name, folder_id + self._project_name, folder_id ) if folder_entity and task_id: task_entity = self._controller.get_task_entity( - self.project_name, task_id + self._project_name, task_id ) if not folder_entity or not task_entity: @@ -192,6 +150,7 @@ class WorkareaModel: "template_has_comment": None, "ext": None, "workdir": None, + "rootless_workdir": None, "comment": None, "comment_hints": None, "last_version": None, @@ -215,6 +174,17 @@ class WorkareaModel: workdir = self._get_workdir(anatomy, template_key, fill_data) + rootless_workdir = workdir + if platform.system().lower() == "windows": + rootless_workdir = rootless_workdir.replace("\\", "/") + + used_roots = workdir.used_values.get("root") + if used_roots: + used_root_name = next(iter(used_roots)) + root_value = used_roots[used_root_name] + workdir_end = rootless_workdir[len(root_value):].lstrip("/") + rootless_workdir = f"{{root[{used_root_name}]}}/{workdir_end}" + file_template = anatomy.get_template_item( "work", template_key, "file" ) @@ -223,15 +193,20 @@ class WorkareaModel: template_has_version = "{version" in file_template_str template_has_comment = "{comment" in file_template_str - comment_hints, comment = self._get_comments_from_root( + file_items = self.get_file_items(folder_id, task_id) + filepaths = [ + item.filepath + for item in file_items + ] + comment_hints, comment = get_comments_from_workfile_paths( + filepaths, file_template, extensions, fill_data, - workdir, current_filename, ) last_version = self._get_last_workfile_version( - workdir, file_template_str, fill_data, extensions + filepaths, file_template_str, fill_data, extensions ) return { @@ -240,6 +215,7 @@ class WorkareaModel: "template_has_comment": template_has_comment, "ext": current_ext, "workdir": workdir, + "rootless_workdir": rootless_workdir, "comment": comment, "comment_hints": comment_hints, "last_version": last_version, @@ -248,13 +224,13 @@ class WorkareaModel: def fill_workarea_filepath( self, - folder_id, - task_id, - extension, - use_last_version, - version, - comment, - ): + folder_id: str, + task_id: str, + extension: str, + use_last_version: bool, + version: int, + comment: str, + ) -> WorkareaFilepathResult: """Fill workarea filepath based on context. Args: @@ -281,8 +257,16 @@ class WorkareaModel: ) if use_last_version: + file_items = self.get_file_items(folder_id, task_id) + filepaths = [ + item.filepath + for item in file_items + ] version = self._get_last_workfile_version( - workdir, file_template.template, fill_data, self._extensions + filepaths, + file_template.template, + fill_data, + self._extensions ) fill_data["version"] = version fill_data["ext"] = extension.lstrip(".") @@ -305,7 +289,11 @@ class WorkareaModel: exists ) - def _get_base_data(self): + @property + def _project_name(self) -> str: + return self._controller.get_current_project_name() + + def _get_base_data(self) -> dict[str, Any]: if self._base_data is None: base_data = get_template_data( ayon_api.get_project(self._project_name), @@ -314,28 +302,35 @@ class WorkareaModel: self._base_data = base_data return copy.deepcopy(self._base_data) - def _get_folder_data(self, folder_id): + def _get_folder_data(self, folder_id: str) -> dict[str, Any]: fill_data = self._fill_data_by_folder_id.get(folder_id) if fill_data is None: folder = self._controller.get_folder_entity( - self.project_name, folder_id + self._project_name, folder_id ) - fill_data = get_folder_template_data(folder, self.project_name) + fill_data = get_folder_template_data(folder, self._project_name) self._fill_data_by_folder_id[folder_id] = fill_data return copy.deepcopy(fill_data) - def _get_task_data(self, project_entity, folder_id, task_id): + def _get_task_data( + self, + project_entity: dict[str, Any], + folder_id: str, + task_id: str + ) -> dict[str, Any]: task_data = self._task_data_by_folder_id.setdefault(folder_id, {}) if task_id not in task_data: task = self._controller.get_task_entity( - self.project_name, task_id + self._project_name, task_id ) if task: task_data[task_id] = get_task_template_data( project_entity, task) return copy.deepcopy(task_data[task_id]) - def _prepare_fill_data(self, folder_id, task_id): + def _prepare_fill_data( + self, folder_id: str, task_id: str + ) -> dict[str, Any]: if not folder_id or not task_id: return {} @@ -350,19 +345,71 @@ class WorkareaModel: return base_data - def _get_template_key(self, fill_data): + def _cache_file_items( + self, folder_id: Optional[str], task_id: Optional[str] + ) -> list[WorkfileInfo]: + if not folder_id or not task_id: + return [] + + cache: CacheItem = self._file_items_cache[task_id] + if cache.is_valid: + return cache.get_data() + + project_entity = self._controller.get_project_entity( + self._project_name + ) + folder_entity = self._controller.get_folder_entity( + self._project_name, folder_id + ) + task_entity = self._controller.get_task_entity( + self._project_name, task_id + ) + anatomy = self._controller.project_anatomy + project_settings = self._controller.project_settings + workfile_entities = self._controller.get_workfile_entities(task_id) + + fill_data = self._prepare_fill_data(folder_id, task_id) + template_key = self._get_template_key(fill_data) + + items = self._host.list_workfiles( + self._project_name, + folder_id, + task_id, + project_entity=project_entity, + folder_entity=folder_entity, + task_entity=task_entity, + anatomy=anatomy, + template_key=template_key, + project_settings=project_settings, + workfile_entities=workfile_entities, + ) + cache.update_data(items) + + # Cache items by entity ids and rootless path + self._file_items_mapping[task_id] = { + item.rootless_path: item + for item in items + } + + return items + + def _get_template_key(self, fill_data: dict[str, Any]) -> str: task_type = fill_data.get("task", {}).get("type") # TODO cache return get_workfile_template_key( - self.project_name, + self._project_name, task_type, self._controller.get_host_name(), project_settings=self._controller.project_settings, ) def _get_last_workfile_version( - self, workdir, file_template, fill_data, extensions - ): + self, + filepaths: list[str], + file_template: str, + fill_data: dict[str, Any], + extensions: set[str] + ) -> int: """ Todos: @@ -370,7 +417,7 @@ class WorkareaModel: last version + 1 which might be wrong. Args: - workdir (str): Workdir path. + filepaths (list[str]): Workfile paths. file_template (str): File template. fill_data (dict[str, Any]): Fill data. extensions (set[str]): Extensions. @@ -379,25 +426,26 @@ class WorkareaModel: int: Next workfile version. """ - version = get_last_workfile_with_version( - workdir, file_template, fill_data, extensions + version = get_last_workfile_with_version_from_paths( + filepaths, file_template, fill_data, extensions )[1] + if version is not None: + return version + 1 - if version is None: - task_info = fill_data.get("task", {}) - version = get_versioning_start( - self.project_name, - self._controller.get_host_name(), - task_name=task_info.get("name"), - task_type=task_info.get("type"), - product_type="workfile", - project_settings=self._controller.project_settings, - ) - else: - version += 1 - return version - def _get_workdir(self, anatomy, template_key, fill_data): + task_info = fill_data.get("task", {}) + return get_versioning_start( + self._project_name, + self._controller.get_host_name(), + task_name=task_info.get("name"), + task_type=task_info.get("type"), + product_type="workfile", + project_settings=self._controller.project_settings, + ) + + def _get_workdir( + self, anatomy: "Anatomy", template_key: str, fill_data: dict[str, Any] + ): directory_template = anatomy.get_template_item( "work", template_key, "directory" ) From 98acfd8dfcbbe7d5d4fe4eee0ec74d0539d3be92 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 17:03:21 +0200 Subject: [PATCH 037/595] updated entities model --- .../tools/workfiles/models/workfiles.py | 194 ++++++++++++------ 1 file changed, 126 insertions(+), 68 deletions(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 6fc76ac458..e4d555261e 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -456,107 +456,145 @@ class WorkfileEntitiesModel: """Workfile entities model. Args: - control (AbstractWorkfileController): Controller object. - """ + controller (AbstractWorkfileController): Controller object. + """ def __init__(self, controller): self._controller = controller - self._cache = {} - self._items = {} + self._workfile_entities_by_task_id = {} self._current_username = _NOT_SET def reset(self): - self._cache = {} - self._items = {} + self._workfile_entities_by_task_id = {} - def get_workfile_info( - self, folder_id, task_id, filepath, rootless_path=None + def get_workfile_entities(self, task_id: str): + if not task_id: + return [] + workfile_entities = self._workfile_entities_by_task_id.get(task_id) + if workfile_entities is None: + workfile_entities = list(ayon_api.get_workfiles_info( + self._controller.get_current_project_name(), + task_ids=[task_id], + )) + self._workfile_entities_by_task_id[task_id] = workfile_entities + return workfile_entities + + def save_workfile_info( + self, + task_id: str, + rootless_path: str, + version: Optional[int], + comment: Optional[str], + description: Optional[str], ): - if not folder_id or not task_id or not filepath: - return None - - if rootless_path is None: - rootless_path = self._get_rootless_path(filepath) - - identifier = self._get_workfile_info_identifier( - folder_id, task_id, rootless_path) - item = self._items.get(identifier) - if item is None: - workfile_info = self._get_workfile_info( - folder_id, task_id, identifier - ) - item = self._prepare_workfile_info_item( - folder_id, task_id, workfile_info, filepath - ) - self._items[identifier] = item - return item - - def save_workfile_info(self, folder_id, task_id, filepath, note): - rootless_path = self._get_rootless_path(filepath) - identifier = self._get_workfile_info_identifier( - folder_id, task_id, rootless_path + # TODO create pipeline function for this + workfile_entities = self.get_workfile_entities(task_id) + workfile_entity = next( + ( + _ent + for _ent in workfile_entities + if _ent["path"] == rootless_path + ), + None ) - workfile_info = self._get_workfile_info( - folder_id, task_id, identifier - ) - if not workfile_info: - self._cache[identifier] = self._create_workfile_info_entity( - task_id, rootless_path, note or "") - self._items.pop(identifier, None) + if not workfile_entity: + workfile_entity = self._create_workfile_info_entity( + task_id, + rootless_path, + version, + comment, + description, + ) + workfile_entities.append(workfile_entity) return - old_note = workfile_info.get("attrib", {}).get("note") + data = {} + for key, value in ( + ("host_name", self._controller.get_host_name()), + ("version", version), + ("comment", comment), + ): + if value is not None: + data[key] = value + + old_data = workfile_entity["data"] + + changed_data = {} + for key, value in data.items(): + if key not in old_data or old_data[key] != value: + changed_data[key] = value - new_workfile_info = copy.deepcopy(workfile_info) update_data = {} - if note is not None and old_note != note: - update_data["attrib"] = {"description": note} - attrib = new_workfile_info.setdefault("attrib", {}) - attrib["description"] = note + if changed_data: + update_data["data"] = changed_data + + old_description = workfile_entity["attrib"].get("description") + if description is not None and old_description != description: + update_data["attrib"] = {"description": description} + workfile_entity["attrib"]["description"] = description username = self._get_current_username() # Automatically fix 'createdBy' and 'updatedBy' fields # NOTE both fields were not automatically filled by server # until 1.1.3 release. - if workfile_info.get("createdBy") is None: + if workfile_entity.get("createdBy") is None: update_data["createdBy"] = username - new_workfile_info["createdBy"] = username + workfile_entity["createdBy"] = username - if workfile_info.get("updatedBy") != username: + if workfile_entity.get("updatedBy") != username: update_data["updatedBy"] = username - new_workfile_info["updatedBy"] = username + workfile_entity["updatedBy"] = username if not update_data: return - self._cache[identifier] = new_workfile_info - self._items.pop(identifier, None) - project_name = self._controller.get_current_project_name() session = OperationsSession() session.update_entity( project_name, "workfile", - workfile_info["id"], + workfile_entity["id"], update_data, ) session.commit() - def _create_workfile_info_entity(self, task_id, rootless_path, note): + def _create_workfile_info_entity( + self, + task_id: str, + rootless_path: str, + version: Optional[int], + comment: Optional[str], + description: str, + ) -> dict[str, Any]: extension = os.path.splitext(rootless_path)[1] project_name = self._controller.get_current_project_name() + attrib = {} + for key, value in ( + ("extension", extension), + ("description", description), + ): + if value is not None: + attrib[key] = value + + data = {} + for key, value in ( + ("host_name", self._controller.get_host_name()), + ("version", version), + ("comment", comment), + ): + if value is not None: + data[key] = value + username = self._get_current_username() workfile_info = { "id": uuid.uuid4().hex, "path": rootless_path, "taskId": task_id, - "attrib": { - "extension": extension, - "description": note - }, + "attrib": attrib, + "data": data, # TODO remove 'createdBy' and 'updatedBy' fields when server is # or above 1.1.3 . "createdBy": username, @@ -568,7 +606,7 @@ class WorkfileEntitiesModel: session.commit() return workfile_info - def _get_current_username(self): + def _get_current_username(self) -> str: if self._current_username is _NOT_SET: self._current_username = get_ayon_username() return self._current_username @@ -709,18 +747,38 @@ class WorkfilesModel: self._published_model = PublishWorkfilesModel(controller) def reset(self): - self._entities_model.reset() self._workarea_model.reset() + self._entities_model.reset() - def get_workfile_info(self, folder_id, task_id, filepath): - return self._entities_model.get_workfile_info( - folder_id, task_id, filepath + def reset_workarea_file_items(self, task_id): + self._workarea_model.reset_file_items(task_id) + + def get_workfile_info(self, folder_id, task_id, rootless_path): + return self._workarea_model.get_workfile_info( + folder_id, task_id, rootless_path ) - def save_workfile_info(self, folder_id, task_id, filepath, note): + def save_workfile_info( + self, + task_id, + rootless_path, + version, + comment, + description, + ): self._entities_model.save_workfile_info( - folder_id, task_id, filepath, note + task_id, + rootless_path, + version, + comment, + description, ) + self._workarea_model.update_file_description( + task_id, rootless_path, description + ) + + def get_workfile_entities(self, task_id): + return self._entities_model.get_workfile_entities(task_id) def get_workarea_dir_by_context(self, folder_id, task_id): """Workarea dir for passed context. @@ -738,20 +796,20 @@ class WorkfilesModel: return self._workarea_model.get_workarea_dir_by_context( folder_id, task_id) - def get_workarea_file_items(self, folder_id, task_id, task_name): + def get_workarea_file_items(self, folder_id, task_id): """Workfile items for passed context from workarea. Args: folder_id (Union[str, None]): Folder id. task_id (Union[str, None]): Task id. - task_name (Union[str, None]): Task name. Returns: - list[FileItem]: List of file items matching workarea of passed + list[WorkfileInfo]: List of file items matching workarea of passed context. + """ return self._workarea_model.get_file_items( - folder_id, task_id, task_name + folder_id, task_id ) def get_workarea_save_as_data(self, folder_id, task_id): From 60c2c4e01848450ffe73948a80355993e592f7bd Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 17:04:18 +0200 Subject: [PATCH 038/595] move public method above private --- .../tools/workfiles/models/workfiles.py | 118 +++++++++--------- 1 file changed, 61 insertions(+), 57 deletions(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index e4d555261e..283b707865 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -626,63 +626,7 @@ class PublishWorkfilesModel: self._cached_extensions = None self._cached_repre_extensions = None - @property - def _extensions(self): - if self._cached_extensions is None: - exts = self._controller.get_workfile_extensions() or [] - self._cached_extensions = exts - return self._cached_extensions - - @property - def _repre_extensions(self): - if self._cached_repre_extensions is None: - self._cached_repre_extensions = { - ext.lstrip(".") for ext in self._extensions - } - return self._cached_repre_extensions - - def _file_item_from_representation( - self, repre_entity, project_anatomy, author, task_name=None - ): - if task_name is not None: - task_info = repre_entity["context"].get("task") - if not task_info or task_info["name"] != task_name: - return None - - # Filter by extension - extensions = self._repre_extensions - workfile_path = None - for repre_file in repre_entity["files"]: - ext = ( - os.path.splitext(repre_file["name"])[1] - .lower() - .lstrip(".") - ) - if ext in extensions: - workfile_path = repre_file["path"] - break - - if not workfile_path: - return None - - try: - workfile_path = workfile_path.format( - root=project_anatomy.roots) - except Exception as exc: - print("Failed to format workfile path: {}".format(exc)) - - dirpath, filename = os.path.split(workfile_path) - created_at = arrow.get(repre_entity["createdAt"]).to("local") - return FileItem( - dirpath, - filename, - created_at.float_timestamp, - author, - None, - repre_entity["id"] - ) - - def get_file_items(self, folder_id, task_name): + def get_file_items(self, folder_id: str, task_name: str) -> list[FileItem]: # TODO refactor to use less server API calls project_name = self._controller.get_current_project_name() # Get subset docs of folder @@ -735,6 +679,66 @@ class PublishWorkfilesModel: return file_items + @property + def _extensions(self): + if self._cached_extensions is None: + exts = self._controller.get_workfile_extensions() or [] + self._cached_extensions = exts + return self._cached_extensions + + @property + def _repre_extensions(self): + if self._cached_repre_extensions is None: + self._cached_repre_extensions = { + ext.lstrip(".") for ext in self._extensions + } + return self._cached_repre_extensions + + def _file_item_from_representation( + self, + repre_entity: dict[str, Any], + project_anatomy: "Anatomy", + author: str, + task_name: Optional[str] = None + ): + if task_name is not None: + task_info = repre_entity["context"].get("task") + if not task_info or task_info["name"] != task_name: + return None + + # Filter by extension + extensions = self._repre_extensions + workfile_path = None + for repre_file in repre_entity["files"]: + ext = ( + os.path.splitext(repre_file["name"])[1] + .lower() + .lstrip(".") + ) + if ext in extensions: + workfile_path = repre_file["path"] + break + + if not workfile_path: + return None + + try: + workfile_path = workfile_path.format( + root=project_anatomy.roots) + except Exception as exc: + print("Failed to format workfile path: {}".format(exc)) + + dirpath, filename = os.path.split(workfile_path) + created_at = arrow.get(repre_entity["createdAt"]).to("local") + return FileItem( + dirpath, + filename, + created_at.float_timestamp, + author, + None, + repre_entity["id"] + ) + class WorkfilesModel: """Workfiles model.""" From e4f6342b3f6436627fd5092d12ed5e6778b1dd67 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 17:04:50 +0200 Subject: [PATCH 039/595] implement 'get_workfile_entities' on controller --- client/ayon_core/tools/workfiles/control.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/ayon_core/tools/workfiles/control.py b/client/ayon_core/tools/workfiles/control.py index cce6bfca10..cddfb90256 100644 --- a/client/ayon_core/tools/workfiles/control.py +++ b/client/ayon_core/tools/workfiles/control.py @@ -468,6 +468,9 @@ class BaseWorkfileController( description, ) + def get_workfile_entities(self, task_id): + return self._workfiles_model.get_workfile_entities(task_id) + def reset(self): if not self._host_is_valid: self._emit_event("controller.reset.started") From b8b012df26b1ab52e07ead08632aa8b225454209 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 17:05:12 +0200 Subject: [PATCH 040/595] updated UI to work with new methods and structures --- .../tools/workfiles/widgets/files_widget.py | 16 ++- .../widgets/files_widget_workarea.py | 69 ++++++--- .../tools/workfiles/widgets/save_as_dialog.py | 21 +-- .../tools/workfiles/widgets/side_panel.py | 135 ++++++++++-------- 4 files changed, 144 insertions(+), 97 deletions(-) diff --git a/client/ayon_core/tools/workfiles/widgets/files_widget.py b/client/ayon_core/tools/workfiles/widgets/files_widget.py index f0b74f4289..b57192b27a 100644 --- a/client/ayon_core/tools/workfiles/widgets/files_widget.py +++ b/client/ayon_core/tools/workfiles/widgets/files_widget.py @@ -212,9 +212,11 @@ class FilesWidget(QtWidgets.QWidget): return self._controller.duplicate_workfile( filepath, - result["workdir"], + result["rootless_workdir"], result["filename"], - artist_note=result["artist_note"] + version=result["version"], + comment=result["comment"], + description=result["description"] ) def _on_workarea_browse_clicked(self): @@ -259,10 +261,12 @@ class FilesWidget(QtWidgets.QWidget): self._controller.save_as_workfile( result["folder_id"], result["task_id"], - result["workdir"], + result["rootless_workdir"], result["filename"], result["template_key"], - artist_note=result["artist_note"] + version=result["version"], + comment=result["comment"], + description=result["description"] ) def _on_workarea_path_changed(self, event): @@ -315,7 +319,9 @@ class FilesWidget(QtWidgets.QWidget): result["workdir"], result["filename"], result["template_key"], - artist_note=result["artist_note"] + version=result["version"], + comment=result["comment"], + description=result["description"], ) def _on_save_as_request(self): diff --git a/client/ayon_core/tools/workfiles/widgets/files_widget_workarea.py b/client/ayon_core/tools/workfiles/widgets/files_widget_workarea.py index 7f76b6a8ab..47d4902812 100644 --- a/client/ayon_core/tools/workfiles/widgets/files_widget_workarea.py +++ b/client/ayon_core/tools/workfiles/widgets/files_widget_workarea.py @@ -1,3 +1,5 @@ +import os + import qtawesome from qtpy import QtWidgets, QtCore, QtGui @@ -10,8 +12,10 @@ from ayon_core.tools.utils.delegates import PrettyTimeDelegate FILENAME_ROLE = QtCore.Qt.UserRole + 1 FILEPATH_ROLE = QtCore.Qt.UserRole + 2 -AUTHOR_ROLE = QtCore.Qt.UserRole + 3 -DATE_MODIFIED_ROLE = QtCore.Qt.UserRole + 4 +ROOTLESS_PATH_ROLE = QtCore.Qt.UserRole + 3 +AUTHOR_ROLE = QtCore.Qt.UserRole + 4 +DATE_MODIFIED_ROLE = QtCore.Qt.UserRole + 5 +WORKFILE_ENTITY_ID_ROLE = QtCore.Qt.UserRole + 6 class WorkAreaFilesModel(QtGui.QStandardItemModel): @@ -198,7 +202,7 @@ class WorkAreaFilesModel(QtGui.QStandardItemModel): items_to_remove = set(self._items_by_filename.keys()) new_items = [] for file_item in file_items: - filename = file_item.filename + filename = os.path.basename(file_item.filepath) if filename in self._items_by_filename: items_to_remove.discard(filename) item = self._items_by_filename[filename] @@ -206,23 +210,28 @@ class WorkAreaFilesModel(QtGui.QStandardItemModel): item = QtGui.QStandardItem() new_items.append(item) item.setColumnCount(self.columnCount()) - item.setFlags( - QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable - ) item.setData(self._file_icon, QtCore.Qt.DecorationRole) - item.setData(file_item.filename, QtCore.Qt.DisplayRole) - item.setData(file_item.filename, FILENAME_ROLE) + item.setData(filename, QtCore.Qt.DisplayRole) + item.setData(filename, FILENAME_ROLE) + flags = QtCore.Qt.ItemIsSelectable + if file_item.available: + flags |= QtCore.Qt.ItemIsEnabled + item.setFlags(flags) updated_by = file_item.updated_by user_item = user_items_by_name.get(updated_by) if user_item is not None and user_item.full_name: updated_by = user_item.full_name + item.setData( + file_item.workfile_entity_id, WORKFILE_ENTITY_ID_ROLE + ) item.setData(file_item.filepath, FILEPATH_ROLE) + item.setData(file_item.rootless_path, ROOTLESS_PATH_ROLE) + item.setData(file_item.file_modified, DATE_MODIFIED_ROLE) item.setData(updated_by, AUTHOR_ROLE) - item.setData(file_item.modified, DATE_MODIFIED_ROLE) - self._items_by_filename[file_item.filename] = item + self._items_by_filename[filename] = item if new_items: root_item.appendRows(new_items) @@ -354,14 +363,18 @@ class WorkAreaFilesWidget(QtWidgets.QWidget): def _get_selected_info(self): selection_model = self._view.selectionModel() - filepath = None - filename = None + workfile_entity_id = filename = rootless_path = filepath = None for index in selection_model.selectedIndexes(): filepath = index.data(FILEPATH_ROLE) + rootless_path = index.data(ROOTLESS_PATH_ROLE) filename = index.data(FILENAME_ROLE) + workfile_entity_id = index.data(WORKFILE_ENTITY_ID_ROLE) + return { "filepath": filepath, + "rootless_path": rootless_path, "filename": filename, + "workfile_entity_id": workfile_entity_id, } def get_selected_path(self): @@ -374,8 +387,12 @@ class WorkAreaFilesWidget(QtWidgets.QWidget): return self._get_selected_info()["filepath"] def _on_selection_change(self): - filepath = self.get_selected_path() - self._controller.set_selected_workfile_path(filepath) + info = self._get_selected_info() + self._controller.set_selected_workfile_path( + info["rootless_path"], + info["filepath"], + info["workfile_entity_id"], + ) def _on_mouse_double_click(self, event): if event.button() == QtCore.Qt.LeftButton: @@ -430,19 +447,25 @@ class WorkAreaFilesWidget(QtWidgets.QWidget): ) def _on_model_refresh(self): - if ( - not self._change_selection_on_refresh - or self._proxy_model.rowCount() < 1 - ): + if not self._change_selection_on_refresh: return # Find the row with latest date modified + indexes = [ + self._proxy_model.index(idx, 0) + for idx in range(self._proxy_model.rowCount()) + ] + filtered_indexes = [ + index + for index in indexes + if self._proxy_model.flags(index) & QtCore.Qt.ItemIsEnabled + ] + if not filtered_indexes: + return + latest_index = max( - ( - self._proxy_model.index(idx, 0) - for idx in range(self._proxy_model.rowCount()) - ), - key=lambda model_index: model_index.data(DATE_MODIFIED_ROLE) + filtered_indexes, + key=lambda model_index: model_index.data(DATE_MODIFIED_ROLE) or 0 ) # Select row of latest modified diff --git a/client/ayon_core/tools/workfiles/widgets/save_as_dialog.py b/client/ayon_core/tools/workfiles/widgets/save_as_dialog.py index bddff816fe..24d64319ca 100644 --- a/client/ayon_core/tools/workfiles/widgets/save_as_dialog.py +++ b/client/ayon_core/tools/workfiles/widgets/save_as_dialog.py @@ -108,6 +108,7 @@ class SaveAsDialog(QtWidgets.QDialog): self._ext_value = None self._filename = None self._workdir = None + self._rootless_workdir = None self._result = None @@ -144,8 +145,8 @@ class SaveAsDialog(QtWidgets.QDialog): version_layout.addWidget(last_version_check) # Artist note widget - artist_note_input = PlaceholderPlainTextEdit(inputs_widget) - artist_note_input.setPlaceholderText( + description_input = PlaceholderPlainTextEdit(inputs_widget) + description_input.setPlaceholderText( "Provide a note about this workfile.") # Preview widget @@ -166,7 +167,7 @@ class SaveAsDialog(QtWidgets.QDialog): subversion_label = QtWidgets.QLabel("Subversion:", inputs_widget) extension_label = QtWidgets.QLabel("Extension:", inputs_widget) preview_label = QtWidgets.QLabel("Preview:", inputs_widget) - artist_note_label = QtWidgets.QLabel("Artist Note:", inputs_widget) + description_label = QtWidgets.QLabel("Artist Note:", inputs_widget) # Build inputs inputs_layout = QtWidgets.QGridLayout(inputs_widget) @@ -178,8 +179,8 @@ class SaveAsDialog(QtWidgets.QDialog): inputs_layout.addWidget(extension_combobox, 2, 1) inputs_layout.addWidget(preview_label, 3, 0) inputs_layout.addWidget(preview_widget, 3, 1) - inputs_layout.addWidget(artist_note_label, 4, 0, 1, 2) - inputs_layout.addWidget(artist_note_input, 5, 0, 1, 2) + inputs_layout.addWidget(description_label, 4, 0, 1, 2) + inputs_layout.addWidget(description_input, 5, 0, 1, 2) # Build layout main_layout = QtWidgets.QVBoxLayout(self) @@ -214,13 +215,13 @@ class SaveAsDialog(QtWidgets.QDialog): self._extension_combobox = extension_combobox self._subversion_input = subversion_input self._preview_widget = preview_widget - self._artist_note_input = artist_note_input + self._description_input = description_input self._version_label = version_label self._subversion_label = subversion_label self._extension_label = extension_label self._preview_label = preview_label - self._artist_note_label = artist_note_label + self._description_label = description_label # Post init setup @@ -255,6 +256,7 @@ class SaveAsDialog(QtWidgets.QDialog): self._folder_id = folder_id self._task_id = task_id self._workdir = data["workdir"] + self._rootless_workdir = data["rootless_workdir"] self._comment_value = data["comment"] self._ext_value = data["ext"] self._template_key = data["template_key"] @@ -329,10 +331,13 @@ class SaveAsDialog(QtWidgets.QDialog): self._result = { "filename": self._filename, "workdir": self._workdir, + "rootless_workdir": self._rootless_workdir, "folder_id": self._folder_id, "task_id": self._task_id, "template_key": self._template_key, - "artist_note": self._artist_note_input.toPlainText(), + "version": self._version_value, + "comment": self._comment_value, + "description": self._description_input.toPlainText(), } self.close() diff --git a/client/ayon_core/tools/workfiles/widgets/side_panel.py b/client/ayon_core/tools/workfiles/widgets/side_panel.py index 7ba60b5544..2e146fddbe 100644 --- a/client/ayon_core/tools/workfiles/widgets/side_panel.py +++ b/client/ayon_core/tools/workfiles/widgets/side_panel.py @@ -4,6 +4,8 @@ from qtpy import QtWidgets, QtCore def file_size_to_string(file_size): + if not file_size: + return "N/A" size = 0 size_ending_mapping = { "KB": 1024 ** 1, @@ -43,44 +45,45 @@ class SidePanelWidget(QtWidgets.QWidget): details_input = QtWidgets.QPlainTextEdit(self) details_input.setReadOnly(True) - artist_note_widget = QtWidgets.QWidget(self) - note_label = QtWidgets.QLabel("Artist note", artist_note_widget) - note_input = QtWidgets.QPlainTextEdit(artist_note_widget) - btn_note_save = QtWidgets.QPushButton("Save note", artist_note_widget) + description_widget = QtWidgets.QWidget(self) + description_label = QtWidgets.QLabel("Artist note", description_widget) + description_input = QtWidgets.QPlainTextEdit(description_widget) + btn_description_save = QtWidgets.QPushButton("Save note", description_widget) - artist_note_layout = QtWidgets.QVBoxLayout(artist_note_widget) - artist_note_layout.setContentsMargins(0, 0, 0, 0) - artist_note_layout.addWidget(note_label, 0) - artist_note_layout.addWidget(note_input, 1) - artist_note_layout.addWidget( - btn_note_save, 0, alignment=QtCore.Qt.AlignRight + description_layout = QtWidgets.QVBoxLayout(description_widget) + description_layout.setContentsMargins(0, 0, 0, 0) + description_layout.addWidget(description_label, 0) + description_layout.addWidget(description_input, 1) + description_layout.addWidget( + btn_description_save, 0, alignment=QtCore.Qt.AlignRight ) main_layout = QtWidgets.QVBoxLayout(self) main_layout.setContentsMargins(0, 0, 0, 0) main_layout.addWidget(details_label, 0) main_layout.addWidget(details_input, 1) - main_layout.addWidget(artist_note_widget, 1) + main_layout.addWidget(description_widget, 1) - note_input.textChanged.connect(self._on_note_change) - btn_note_save.clicked.connect(self._on_save_click) + description_input.textChanged.connect(self._on_description_change) + btn_description_save.clicked.connect(self._on_save_click) controller.register_event_callback( "selection.workarea.changed", self._on_selection_change ) self._details_input = details_input - self._artist_note_widget = artist_note_widget - self._note_input = note_input - self._btn_note_save = btn_note_save + self._description_widget = description_widget + self._description_input = description_input + self._btn_description_save = btn_description_save self._folder_id = None - self._task_name = None + self._task_id = None self._filepath = None - self._orig_note = "" + self._rootless_path = None + self._orig_description = "" self._controller = controller - self._set_context(None, None, None) + self._set_context(None, None, None, None) def set_published_mode(self, published_mode): """Change published mode. @@ -89,64 +92,69 @@ class SidePanelWidget(QtWidgets.QWidget): published_mode (bool): Published mode enabled. """ - self._artist_note_widget.setVisible(not published_mode) + self._description_widget.setVisible(not published_mode) def _on_selection_change(self, event): folder_id = event["folder_id"] - task_name = event["task_name"] + task_id = event["task_id"] filepath = event["path"] + rootless_path = event["rootless_path"] - self._set_context(folder_id, task_name, filepath) + self._set_context(folder_id, task_id, rootless_path, filepath) - def _on_note_change(self): - text = self._note_input.toPlainText() - self._btn_note_save.setEnabled(self._orig_note != text) + def _on_description_change(self): + text = self._description_input.toPlainText() + self._btn_description_save.setEnabled(self._orig_description != text) def _on_save_click(self): - note = self._note_input.toPlainText() + description = self._description_input.toPlainText() self._controller.save_workfile_info( - self._folder_id, - self._task_name, - self._filepath, - note + self._task_id, + self._rootless_path, + description=description, ) - self._orig_note = note - self._btn_note_save.setEnabled(False) + self._orig_description = description + self._btn_description_save.setEnabled(False) - def _set_context(self, folder_id, task_name, filepath): + def _set_context(self, folder_id, task_id, rootless_path, filepath): workfile_info = None # Check if folder, task and file are selected - if bool(folder_id) and bool(task_name) and bool(filepath): + if folder_id and task_id and rootless_path: workfile_info = self._controller.get_workfile_info( - folder_id, task_name, filepath + folder_id, task_id, rootless_path ) enabled = workfile_info is not None self._details_input.setEnabled(enabled) - self._note_input.setEnabled(enabled) - self._btn_note_save.setEnabled(enabled) + self._description_input.setEnabled(enabled) + self._btn_description_save.setEnabled(enabled) self._folder_id = folder_id - self._task_name = task_name + self._task_id = task_id self._filepath = filepath + self._rootless_path = rootless_path # Disable inputs and remove texts if any required arguments are # missing if not enabled: - self._orig_note = "" + self._orig_description = "" self._details_input.setPlainText("") - self._note_input.setPlainText("") + self._description_input.setPlainText("") return - note = workfile_info.note - size_value = file_size_to_string(workfile_info.filesize) + description = workfile_info.description + size_value = file_size_to_string(workfile_info.file_size) # Append html string datetime_format = "%b %d %Y %H:%M:%S" - creation_time = datetime.datetime.fromtimestamp( - workfile_info.creation_time) - modification_time = datetime.datetime.fromtimestamp( - workfile_info.modification_time) + file_created = workfile_info.file_created + modification_time = workfile_info.file_modified + if file_created: + file_created = datetime.datetime.fromtimestamp(file_created) + + if modification_time: + modification_time = datetime.datetime.fromtimestamp( + modification_time) user_items_by_name = self._controller.get_user_items_by_name() @@ -156,33 +164,38 @@ class SidePanelWidget(QtWidgets.QWidget): return user_item.full_name return username - created_lines = [ - creation_time.strftime(datetime_format) - ] + created_lines = [] if workfile_info.created_by: - created_lines.insert( - 0, convert_username(workfile_info.created_by) + created_lines.append( + convert_username(workfile_info.created_by) ) + if file_created: + created_lines.append(file_created.strftime(datetime_format)) - modified_lines = [ - modification_time.strftime(datetime_format) - ] + if created_lines: + created_lines.insert(0, "Created:") + + modified_lines = [] if workfile_info.updated_by: - modified_lines.insert( - 0, convert_username(workfile_info.updated_by) + modified_lines.append( + convert_username(workfile_info.updated_by) ) + if modification_time: + modified_lines.append( + modification_time.strftime(datetime_format) + ) + if modified_lines: + modified_lines.insert(0, "Modified:") lines = ( "Size:", size_value, - "Created:", "
".join(created_lines), - "Modified:", "
".join(modified_lines), ) - self._orig_note = note - self._note_input.setPlainText(note) + self._orig_description = description + self._description_input.setPlainText(description) # Set as empty string self._details_input.setPlainText("") - self._details_input.appendHtml("
".join(lines)) + self._details_input.appendHtml("
".join(lines)) From e70535831973126adcffbe56f423a899e5a25b88 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 17:05:23 +0200 Subject: [PATCH 041/595] fix abstract property --- client/ayon_core/host/host.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index 5a29de6cd7..3333cf3778 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -1,7 +1,7 @@ import os import logging import contextlib -from abc import ABC, abstractproperty +from abc import ABC, abstractmethod # NOTE can't import 'typing' because of issues in Maya 2020 # - shiboken crashes on 'typing' module import @@ -92,7 +92,8 @@ class HostBase(ABC): self._log = logging.getLogger(self.__class__.__name__) return self._log - @abstractproperty + @property + @abstractmethod def name(self): """Host name.""" From 95b1820c8318c075e27d1dd94a405ebf6bdff5ad Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 17:05:47 +0200 Subject: [PATCH 042/595] added some typehints into IWorkfileHost --- client/ayon_core/host/interfaces/workfiles.py | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 34d7dddef6..97985b754a 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -3,10 +3,14 @@ import os import platform from abc import abstractmethod from dataclasses import dataclass, asdict +import typing from typing import Optional, Any import ayon_api +if typing.TYPE_CHECKING: + from ayon_core.pipeline import Anatomy + @dataclass class WorkfileInfo: @@ -76,51 +80,50 @@ class WorkfileInfo: class IWorkfileHost: """Implementation requirements to be able use workfile utils and tool.""" - @abstractmethod - def save_workfile(self, dst_path=None): + def save_workfile(self, dst_path: Optional[str] = None): """Save currently opened scene. Args: dst_path (str): Where the current scene should be saved. Or use current path if 'None' is passed. - """ + """ pass @abstractmethod - def open_workfile(self, filepath): + def open_workfile(self, filepath: str): """Open passed filepath in the host. Args: filepath (str): Path to workfile. - """ + """ pass @abstractmethod - def get_current_workfile(self): + def get_current_workfile(self) -> Optional[str]: """Retrieve path to current opened file. Returns: - str: Path to file which is currently opened. - None: If nothing is opened. - """ + Optional[str]: Path to file which is currently opened. None if + nothing is opened. + """ return None - def workfile_has_unsaved_changes(self): + def workfile_has_unsaved_changes(self) -> Optional[bool]: """Currently opened scene is saved. Not all hosts can know if current scene is saved because the API of DCC does not support it. Returns: - bool: True if scene is saved and False if has unsaved + Optional[bool]: True if scene is saved and False if has unsaved + modifications. None if can't tell if workfiles has modifications. - None: Can't tell if workfiles has modifications. - """ + """ return None def get_workfile_extensions(self) -> list[str]: From bef56a526fb19035b6b6809d4af33d7237ebe762 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 17:05:58 +0200 Subject: [PATCH 043/595] added todos into controller --- client/ayon_core/tools/workfiles/control.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/client/ayon_core/tools/workfiles/control.py b/client/ayon_core/tools/workfiles/control.py index cddfb90256..b0d4cb16b2 100644 --- a/client/ayon_core/tools/workfiles/control.py +++ b/client/ayon_core/tools/workfiles/control.py @@ -528,6 +528,7 @@ class BaseWorkfileController( # Controller actions def open_workfile(self, folder_id, task_id, filepath): + # TODO move to workfiles model self._emit_event("open_workfile.started") failed = False @@ -544,6 +545,7 @@ class BaseWorkfileController( ) def save_current_workfile(self): + # TODO move to workfiles model current_file = self.get_current_workfile() self._host.save_workfile(current_file) @@ -594,6 +596,7 @@ class BaseWorkfileController( comment, description, ): + # TODO move to workfiles model self._emit_event("copy_representation.started") failed = False @@ -623,6 +626,8 @@ class BaseWorkfileController( def duplicate_workfile( self, src_filepath, workdir, filename, version, comment, description ): + # TODO move to workfiles model + # TODO save workfile information self._emit_event("workfile_duplicate.started") failed = False @@ -678,6 +683,7 @@ class BaseWorkfileController( } def _open_workfile(self, folder_id, task_id, filepath): + # TODO move to workfiles model project_name = self.get_current_project_name() event_data = self._get_event_context_data( project_name, folder_id, task_id @@ -710,6 +716,7 @@ class BaseWorkfileController( description: Optional[str], src_filepath=None, ): + # TODO move to workfiles model # Trigger before save event project_name = self.get_current_project_name() folder = self.get_folder_entity(project_name, folder_id) From 552bc03aa613216a61ed4e6c2ef7de0e21d72ee2 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Apr 2025 17:50:14 +0200 Subject: [PATCH 044/595] added comment --- client/ayon_core/tools/workfiles/widgets/files_widget.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/ayon_core/tools/workfiles/widgets/files_widget.py b/client/ayon_core/tools/workfiles/widgets/files_widget.py index b57192b27a..d45e057192 100644 --- a/client/ayon_core/tools/workfiles/widgets/files_widget.py +++ b/client/ayon_core/tools/workfiles/widgets/files_widget.py @@ -200,6 +200,9 @@ class FilesWidget(QtWidgets.QWidget): self._open_workfile(folder_id, task_id, path) def _on_current_open_requests(self): + # TODO validate if item under mouse is enabled + # - thi uses selected item, but that does not have to be the one + # under mouse self._on_workarea_open_clicked() def _on_duplicate_request(self): From 80397a3cc69bcf8b67c17a49fba287b88d4128fc Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 29 Apr 2025 17:31:53 +0200 Subject: [PATCH 045/595] implemented base of published workfile collection --- client/ayon_core/host/interfaces/workfiles.py | 219 ++++++++++++++++++ 1 file changed, 219 insertions(+) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 97985b754a..456ba0b9d4 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -7,6 +7,7 @@ import typing from typing import Optional, Any import ayon_api +import arrow if typing.TYPE_CHECKING: from ayon_core.pipeline import Anatomy @@ -77,6 +78,70 @@ class WorkfileInfo: return WorkfileInfo(**data) +@dataclass +class PublishedWorkfileInfo: + folder_id: str + task_id: Optional[str] + representation_id: str + filepath: str + created_at: float + author: str + available: bool + file_size: Optional[float] + file_created: Optional[float] + file_modified: Optional[float] + + @classmethod + def new( + cls, + folder_id: str, + task_id: Optional[str], + repre_entity: dict[str, Any], + filepath: str, + author: str, + available: bool, + file_size: Optional[float], + file_modified: Optional[float], + file_created: Optional[float], + ): + created_at = arrow.get(repre_entity["createdAt"]).to("local") + + return cls( + folder_id=folder_id, + task_id=task_id, + representation_id=repre_entity["id"], + filepath=filepath, + created_at=created_at.float_timestamp, + author=author, + available=available, + file_size=file_size, + file_created=file_created, + file_modified=file_modified, + ) + + def to_data(self): + """Converts file item to data. + + Returns: + dict[str, Any]: Workfile item data. + + """ + return asdict(self) + + @classmethod + def from_data(self, data): + """Converts data to workfile item. + + Args: + data (dict[str, Any]): Workfile item data. + + Returns: + WorkfileInfo: File item. + + """ + return WorkfileInfo(**data) + + class IWorkfileHost: """Implementation requirements to be able use workfile utils and tool.""" @@ -264,6 +329,110 @@ class IWorkfileHost: return items + def list_published_workfiles( + self, + project_name: str, + folder_id: str, + anatomy: Optional["Anatomy"] = None, + version_entities: Optional[list[dict[str, Any]]] = None, + repre_entities: Optional[list[dict[str, Any]]] = None, + ) -> list[PublishedWorkfileInfo]: + """List published workfiles for given folder. + + Default implementation looks for products with 'workfile' + product type. + + Pre-fetched entities have mandatory fields to be fetched. + - Version: 'id', 'author', 'taskId' + - Representation: 'id', 'versionId', 'files' + + Args: + project_name (str): Project name. + folder_id (str): Folder id. + anatomy (Anatomy): Project anatomy. + version_entities (Optional[list[dict[str, Any]]]): Pre-fetched + version entities. + repre_entities (Optional[list[dict[str, Any]]]): Pre-fetched + representation entities. + + Returns: + list[PublishedWorkfileInfo]: Published workfile information for + given context. + + """ + from ayon_core.pipeline import Anatomy + + # Get all representations of the folder + ( + version_entities, + repre_entities + ) = self._fetch_workfile_entities( + project_name, + folder_id, + version_entities, + repre_entities, + ) + if not repre_entities: + return [] + + if anatomy is None: + anatomy = Anatomy(project_name) + + versions_by_id = { + version_entity["id"]: version_entity + for version_entity in version_entities + } + extensions = self.get_workfile_extensions() + items = [] + for repre_entity in repre_entities: + version_id = repre_entity["versionId"] + version_entity = versions_by_id[version_id] + task_id = version_entity["taskId"] + + # Filter by extension + workfile_path = None + for repre_file in repre_entity["files"]: + ext = ( + os.path.splitext(repre_file["name"])[1] + .lower() + .lstrip(".") + ) + if ext in extensions: + workfile_path = repre_file["path"] + break + + if not workfile_path: + continue + + try: + workfile_path = workfile_path.format(root=anatomy.roots) + except Exception as exc: + print(f"Failed to format workfile path: {exc}") + + is_available = False + file_size = file_modified = file_created = None + if workfile_path and os.path.exists(workfile_path): + filestat = os.stat(workfile_path) + is_available = True + file_size = filestat.st_size + file_created = filestat.st_ctime + file_modified = filestat.st_mtime + + workfile_item = PublishedWorkfileInfo.new( + folder_id, + task_id, + repre_entity, + workfile_path, + version_entity["author"], + is_available, + file_size, + file_created, + file_modified, + ) + items.append(workfile_item) + + return items + # --- Deprecated method names --- def file_extensions(self): """Deprecated variant of 'get_workfile_extensions'. @@ -308,3 +477,53 @@ class IWorkfileHost: """ return self.workfile_has_unsaved_changes() + + def _fetch_workfile_entities( + self, + project_name: str, + folder_id: str, + version_entities: Optional[list[dict[str, Any]]], + repre_entities: Optional[list[dict[str, Any]]], + ) -> tuple[ + list[dict[str, Any]], + list[dict[str, Any]] + ]: + if repre_entities is not None and version_entities is None: + # Get versions of representations + version_ids = {r["versionId"] for r in repre_entities} + version_entities = list(ayon_api.get_versions( + project_name, + version_ids=version_ids, + fields={"id", "author", "taskId"}, + )) + + if version_entities is None: + # Get product entities of folder + product_entities = ayon_api.get_products( + project_name, + folder_ids={folder_id}, + product_types={"workfile"}, + fields={"id", "name"} + ) + + version_entities = [] + product_ids = {product["id"] for product in product_entities} + if product_ids: + # Get version docs of products with their families + version_entities = list(ayon_api.get_versions( + project_name, + product_ids=product_ids, + fields={"id", "author", "taskId"}, + )) + + # Fetch representations of filtered versions and add filter for + # extension + if repre_entities is None: + repre_entities = [] + if version_entities: + repre_entities = list(ayon_api.get_representations( + project_name, + version_ids={v["id"] for v in version_entities} + )) + + return version_entities, repre_entities From dde5c6a46ffa2223a42c17a19a6b4a4f01a6e8ed Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 30 Apr 2025 17:34:09 +0200 Subject: [PATCH 046/595] use collect published files from host --- client/ayon_core/host/__init__.py | 2 ++ client/ayon_core/host/interfaces/__init__.py | 5 ++- client/ayon_core/host/interfaces/workfiles.py | 5 ++- .../tools/workfiles/models/workfiles.py | 34 +++++++++++++------ .../widgets/files_widget_published.py | 13 ++++--- 5 files changed, 41 insertions(+), 18 deletions(-) diff --git a/client/ayon_core/host/__init__.py b/client/ayon_core/host/__init__.py index 80ff0f2e38..b252b03d76 100644 --- a/client/ayon_core/host/__init__.py +++ b/client/ayon_core/host/__init__.py @@ -5,6 +5,7 @@ from .host import ( from .interfaces import ( IWorkfileHost, WorkfileInfo, + PublishedWorkfileInfo, ILoadHost, IPublishHost, INewPublisher, @@ -18,6 +19,7 @@ __all__ = ( "IWorkfileHost", "WorkfileInfo", + "PublishedWorkfileInfo", "ILoadHost", "IPublishHost", "INewPublisher", diff --git a/client/ayon_core/host/interfaces/__init__.py b/client/ayon_core/host/interfaces/__init__.py index 4ee6375012..379d8555fb 100644 --- a/client/ayon_core/host/interfaces/__init__.py +++ b/client/ayon_core/host/interfaces/__init__.py @@ -1,5 +1,5 @@ from .exceptions import MissingMethodsError -from .workfiles import IWorkfileHost, WorkfileInfo +from .workfiles import IWorkfileHost, WorkfileInfo, PublishedWorkfileInfo from .interfaces import ( IPublishHost, INewPublisher, @@ -9,8 +9,11 @@ from .interfaces import ( __all__ = ( "MissingMethodsError", + "IWorkfileHost", "WorkfileInfo", + "PublishedWorkfileInfo", + "IPublishHost", "INewPublisher", "ILoadHost", diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 456ba0b9d4..21085abaa8 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -382,7 +382,10 @@ class IWorkfileHost: version_entity["id"]: version_entity for version_entity in version_entities } - extensions = self.get_workfile_extensions() + extensions = { + ext.lstrip(".") + for ext in self.get_workfile_extensions() + } items = [] for repre_entity in repre_entities: version_id = repre_entity["versionId"] diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 283b707865..74b8f1aeb3 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -15,7 +15,7 @@ from ayon_core.lib import ( NestedCacheItem, CacheItem, ) -from ayon_core.host import WorkfileInfo +from ayon_core.host import WorkfileInfo, PublishedWorkfileInfo from ayon_core.pipeline.template_data import ( get_template_data, get_task_template_data, @@ -28,10 +28,7 @@ from ayon_core.pipeline.workfile import ( get_comments_from_workfile_paths, ) from ayon_core.pipeline.version_start import get_versioning_start -from ayon_core.tools.workfiles.abstract import ( - WorkareaFilepathResult, - FileItem, -) +from ayon_core.tools.workfiles.abstract import WorkareaFilepathResult if typing.TYPE_CHECKING: from typing import Union @@ -432,7 +429,6 @@ class WorkareaModel: if version is not None: return version + 1 - task_info = fill_data.get("task", {}) return get_versioning_start( self._project_name, @@ -744,11 +740,11 @@ class WorkfilesModel: """Workfiles model.""" def __init__(self, host, controller): + self._host = host self._controller = controller self._entities_model = WorkfileEntitiesModel(controller) self._workarea_model = WorkareaModel(host, controller) - self._published_model = PublishWorkfilesModel(controller) def reset(self): self._workarea_model.reset() @@ -825,7 +821,9 @@ class WorkfilesModel: *args, **kwargs ) - def get_published_file_items(self, folder_id, task_name): + def get_published_file_items( + self, folder_id, task_id + ) -> PublishedWorkfileInfo: """Published workfiles for passed context. Args: @@ -833,7 +831,21 @@ class WorkfilesModel: task_name (str): Task name. Returns: - list[FileItem]: List of files for published workfiles. - """ + list[PublishedWorkfileInfo]: List of files for published workfiles. + + """ + project_name = self._project_name + anatomy = self._controller.project_anatomy + items = self._host.list_published_workfiles( + project_name, + folder_id, + anatomy, + ) + if task_id: + items = [ + item + for item in items + if item.task_id == task_id + ] + return items - return self._published_model.get_file_items(folder_id, task_name) diff --git a/client/ayon_core/tools/workfiles/widgets/files_widget_published.py b/client/ayon_core/tools/workfiles/widgets/files_widget_published.py index 07122046be..250204a7d7 100644 --- a/client/ayon_core/tools/workfiles/widgets/files_widget_published.py +++ b/client/ayon_core/tools/workfiles/widgets/files_widget_published.py @@ -1,3 +1,5 @@ +import os + import qtawesome from qtpy import QtWidgets, QtCore, QtGui @@ -205,24 +207,25 @@ class PublishedFilesModel(QtGui.QStandardItemModel): new_items.append(item) item.setColumnCount(self.columnCount()) item.setData(self._file_icon, QtCore.Qt.DecorationRole) - item.setData(file_item.filename, QtCore.Qt.DisplayRole) item.setData(repre_id, REPRE_ID_ROLE) - if file_item.exists: + if file_item.available: flags = QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable else: flags = QtCore.Qt.NoItemFlags - author = file_item.created_by + author = file_item.author user_item = user_items_by_name.get(author) if user_item is not None and user_item.full_name: author = user_item.full_name - item.setFlags(flags) + filename = os.path.basename(file_item.filepath) + item.setFlags(flags) + item.setData(filename, QtCore.Qt.DisplayRole) item.setData(file_item.filepath, FILEPATH_ROLE) item.setData(author, AUTHOR_ROLE) - item.setData(file_item.modified, DATE_MODIFIED_ROLE) + item.setData(file_item.file_modified, DATE_MODIFIED_ROLE) self._items_by_id[repre_id] = item From b76ae8ffd37ff78472ede1fe2292729e788100ab Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 30 Apr 2025 17:35:43 +0200 Subject: [PATCH 047/595] update controller --- client/ayon_core/tools/workfiles/abstract.py | 113 +------------------ client/ayon_core/tools/workfiles/control.py | 10 +- 2 files changed, 5 insertions(+), 118 deletions(-) diff --git a/client/ayon_core/tools/workfiles/abstract.py b/client/ayon_core/tools/workfiles/abstract.py index 78e31f9abd..6d7d0b4c0e 100644 --- a/client/ayon_core/tools/workfiles/abstract.py +++ b/client/ayon_core/tools/workfiles/abstract.py @@ -3,8 +3,6 @@ from abc import ABC, abstractmethod from ayon_core.style import get_default_entity_icon_color -from ayon_core.host import WorkfileInfo - class FolderItem: """Item representing folder entity on a server. @@ -141,111 +139,6 @@ class TaskItem: return cls(**data) -class FileItem: - """File item that represents a file. - - Can be used for both Workarea and Published workfile. Workarea file - will always exist on disk which is not the case for Published workfile. - - Args: - dirpath (str): Directory path of file. - filename (str): Filename. - modified (float): Modified timestamp. - created_by (Optional[str]): Username. - representation_id (Optional[str]): Representation id of published - workfile. - filepath (Optional[str]): Prepared filepath. - exists (Optional[bool]): If file exists on disk. - - """ - def __init__( - self, - dirpath, - filename, - modified, - created_by=None, - updated_by=None, - representation_id=None, - filepath=None, - exists=None - ): - self.filename = filename - self.dirpath = dirpath - self.modified = modified - self.created_by = created_by - self.updated_by = updated_by - self.representation_id = representation_id - self._filepath = filepath - self._exists = exists - - @property - def filepath(self): - """Filepath of file. - - Returns: - str: Full path to a file. - - """ - if self._filepath is None: - self._filepath = os.path.join(self.dirpath, self.filename) - return self._filepath - - @property - def exists(self): - """File is available. - - Returns: - bool: If file exists on disk. - - """ - if self._exists is None: - self._exists = os.path.exists(self.filepath) - return self._exists - - def to_data(self): - """Converts file item to data. - - Returns: - dict[str, Any]: File item data. - - """ - return { - "filename": self.filename, - "dirpath": self.dirpath, - "modified": self.modified, - "created_by": self.created_by, - "representation_id": self.representation_id, - "filepath": self.filepath, - "exists": self.exists, - } - - @classmethod - def from_data(cls, data): - """Re-creates file item from data. - - Args: - data (dict[str, Any]): File item data. - - Returns: - FileItem: File item. - - """ - required_keys = { - "filename", - "dirpath", - "modified", - "representation_id" - } - missing_keys = required_keys - set(data.keys()) - if missing_keys: - raise KeyError("Missing keys: {}".format(missing_keys)) - - return cls(**{ - key: data[key] - for key in required_keys - }) - - class WorkareaFilepathResult: """Result of workarea file formatting. @@ -881,7 +774,7 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): pass @abstractmethod - def get_published_file_items(self, folder_id, task_id): + def get_published_file_items(self, folder_id: str, task_id: str): """Get published file items. Args: @@ -889,7 +782,7 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): task_id (Union[str, None]): Task id. Returns: - list[FileItem]: List of published file items. + list[PublishedWorkfileInfo]: List of published file items. """ pass @@ -904,7 +797,7 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): rootless_path (str): Workfile path. Returns: - Union[WorkfileInfo, None]: Workfile info or None if was passed + Optional[WorkfileInfo]: Workfile info or None if was passed invalid context. """ diff --git a/client/ayon_core/tools/workfiles/control.py b/client/ayon_core/tools/workfiles/control.py index b0d4cb16b2..37a3f4115b 100644 --- a/client/ayon_core/tools/workfiles/control.py +++ b/client/ayon_core/tools/workfiles/control.py @@ -437,15 +437,9 @@ class BaseWorkfileController( ) def get_published_file_items(self, folder_id, task_id): - task_name = None - if task_id: - task = self.get_task_entity( - self.get_current_project_name(), task_id - ) - task_name = task.get("name") - return self._workfiles_model.get_published_file_items( - folder_id, task_name) + folder_id, task_id + ) def get_workfile_info(self, folder_id, task_id, rootless_path): return self._workfiles_model.get_workfile_info( From 1b7474bb99660c56101deb49c3d2289f82313972 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 30 Apr 2025 17:51:56 +0200 Subject: [PATCH 048/595] Merge workfile entities model into workfiles model --- .../tools/workfiles/models/workfiles.py | 358 +++++++++--------- 1 file changed, 173 insertions(+), 185 deletions(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 74b8f1aeb3..892ca66d94 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -6,7 +6,6 @@ import platform import typing from typing import Optional, Any -import arrow import ayon_api from ayon_api.operations import OperationsSession @@ -448,166 +447,6 @@ class WorkareaModel: return directory_template.format_strict(fill_data).normalized() -class WorkfileEntitiesModel: - """Workfile entities model. - - Args: - controller (AbstractWorkfileController): Controller object. - - """ - def __init__(self, controller): - self._controller = controller - self._workfile_entities_by_task_id = {} - self._current_username = _NOT_SET - - def reset(self): - self._workfile_entities_by_task_id = {} - - def get_workfile_entities(self, task_id: str): - if not task_id: - return [] - workfile_entities = self._workfile_entities_by_task_id.get(task_id) - if workfile_entities is None: - workfile_entities = list(ayon_api.get_workfiles_info( - self._controller.get_current_project_name(), - task_ids=[task_id], - )) - self._workfile_entities_by_task_id[task_id] = workfile_entities - return workfile_entities - - def save_workfile_info( - self, - task_id: str, - rootless_path: str, - version: Optional[int], - comment: Optional[str], - description: Optional[str], - ): - # TODO create pipeline function for this - workfile_entities = self.get_workfile_entities(task_id) - workfile_entity = next( - ( - _ent - for _ent in workfile_entities - if _ent["path"] == rootless_path - ), - None - ) - if not workfile_entity: - workfile_entity = self._create_workfile_info_entity( - task_id, - rootless_path, - version, - comment, - description, - ) - workfile_entities.append(workfile_entity) - return - - data = {} - for key, value in ( - ("host_name", self._controller.get_host_name()), - ("version", version), - ("comment", comment), - ): - if value is not None: - data[key] = value - - old_data = workfile_entity["data"] - - changed_data = {} - for key, value in data.items(): - if key not in old_data or old_data[key] != value: - changed_data[key] = value - - update_data = {} - if changed_data: - update_data["data"] = changed_data - - old_description = workfile_entity["attrib"].get("description") - if description is not None and old_description != description: - update_data["attrib"] = {"description": description} - workfile_entity["attrib"]["description"] = description - - username = self._get_current_username() - # Automatically fix 'createdBy' and 'updatedBy' fields - # NOTE both fields were not automatically filled by server - # until 1.1.3 release. - if workfile_entity.get("createdBy") is None: - update_data["createdBy"] = username - workfile_entity["createdBy"] = username - - if workfile_entity.get("updatedBy") != username: - update_data["updatedBy"] = username - workfile_entity["updatedBy"] = username - - if not update_data: - return - - project_name = self._controller.get_current_project_name() - - session = OperationsSession() - session.update_entity( - project_name, - "workfile", - workfile_entity["id"], - update_data, - ) - session.commit() - - def _create_workfile_info_entity( - self, - task_id: str, - rootless_path: str, - version: Optional[int], - comment: Optional[str], - description: str, - ) -> dict[str, Any]: - extension = os.path.splitext(rootless_path)[1] - - project_name = self._controller.get_current_project_name() - - attrib = {} - for key, value in ( - ("extension", extension), - ("description", description), - ): - if value is not None: - attrib[key] = value - - data = {} - for key, value in ( - ("host_name", self._controller.get_host_name()), - ("version", version), - ("comment", comment), - ): - if value is not None: - data[key] = value - - username = self._get_current_username() - workfile_info = { - "id": uuid.uuid4().hex, - "path": rootless_path, - "taskId": task_id, - "attrib": attrib, - "data": data, - # TODO remove 'createdBy' and 'updatedBy' fields when server is - # or above 1.1.3 . - "createdBy": username, - "updatedBy": username, - } - - session = OperationsSession() - session.create_entity(project_name, "workfile", workfile_info) - session.commit() - return workfile_info - - def _get_current_username(self) -> str: - if self._current_username is _NOT_SET: - self._current_username = get_ayon_username() - return self._current_username - - class PublishWorkfilesModel: """Model for handling of published workfiles. @@ -743,12 +582,48 @@ class WorkfilesModel: self._host = host self._controller = controller - self._entities_model = WorkfileEntitiesModel(controller) self._workarea_model = WorkareaModel(host, controller) + # self._published_model = PublishWorkfilesModel(controller) + + self._workfile_entities_by_task_id = {} + self._current_username = _NOT_SET def reset(self): self._workarea_model.reset() - self._entities_model.reset() + + self._workfile_entities_by_task_id = {} + + def get_workfile_entities(self, task_id: str): + if not task_id: + return [] + workfile_entities = self._workfile_entities_by_task_id.get(task_id) + if workfile_entities is None: + workfile_entities = list(ayon_api.get_workfiles_info( + self._controller.get_current_project_name(), + task_ids=[task_id], + )) + self._workfile_entities_by_task_id[task_id] = workfile_entities + return workfile_entities + + def save_workfile_info( + self, + task_id: str, + rootless_path: str, + version: Optional[int], + comment: Optional[str], + description: Optional[str], + ): + self._save_workfile_info( + task_id, + rootless_path, + version, + comment, + description, + ) + + self._workarea_model.update_file_description( + task_id, rootless_path, description + ) def reset_workarea_file_items(self, task_id): self._workarea_model.reset_file_items(task_id) @@ -758,28 +633,6 @@ class WorkfilesModel: folder_id, task_id, rootless_path ) - def save_workfile_info( - self, - task_id, - rootless_path, - version, - comment, - description, - ): - self._entities_model.save_workfile_info( - task_id, - rootless_path, - version, - comment, - description, - ) - self._workarea_model.update_file_description( - task_id, rootless_path, description - ) - - def get_workfile_entities(self, task_id): - return self._entities_model.get_workfile_entities(task_id) - def get_workarea_dir_by_context(self, folder_id, task_id): """Workarea dir for passed context. @@ -848,4 +701,139 @@ class WorkfilesModel: if item.task_id == task_id ] return items + # return self._published_model.get_file_items(folder_id, task_name) + @property + def _project_name(self) -> str: + return self._controller.get_current_project_name() + + def _get_current_username(self) -> str: + if self._current_username is _NOT_SET: + self._current_username = get_ayon_username() + return self._current_username + + # --- Workfile entities --- + def _save_workfile_info( + self, + task_id: str, + rootless_path: str, + version: Optional[int], + comment: Optional[str], + description: Optional[str], + ): + # TODO create pipeline function for this + workfile_entities = self.get_workfile_entities(task_id) + workfile_entity = next( + ( + _ent + for _ent in workfile_entities + if _ent["path"] == rootless_path + ), + None + ) + if not workfile_entity: + workfile_entity = self._create_workfile_info_entity( + task_id, + rootless_path, + version, + comment, + description, + ) + workfile_entities.append(workfile_entity) + return + + data = {} + for key, value in ( + ("host_name", self._controller.get_host_name()), + ("version", version), + ("comment", comment), + ): + if value is not None: + data[key] = value + + old_data = workfile_entity["data"] + + changed_data = {} + for key, value in data.items(): + if key not in old_data or old_data[key] != value: + changed_data[key] = value + + update_data = {} + if changed_data: + update_data["data"] = changed_data + + old_description = workfile_entity["attrib"].get("description") + if description is not None and old_description != description: + update_data["attrib"] = {"description": description} + workfile_entity["attrib"]["description"] = description + + username = self._get_current_username() + # Automatically fix 'createdBy' and 'updatedBy' fields + # NOTE both fields were not automatically filled by server + # until 1.1.3 release. + if workfile_entity.get("createdBy") is None: + update_data["createdBy"] = username + workfile_entity["createdBy"] = username + + if workfile_entity.get("updatedBy") != username: + update_data["updatedBy"] = username + workfile_entity["updatedBy"] = username + + if not update_data: + return + + session = OperationsSession() + session.update_entity( + self._project_name, + "workfile", + workfile_entity["id"], + update_data, + ) + session.commit() + + def _create_workfile_info_entity( + self, + task_id: str, + rootless_path: str, + version: Optional[int], + comment: Optional[str], + description: str, + ) -> dict[str, Any]: + extension = os.path.splitext(rootless_path)[1] + + attrib = {} + for key, value in ( + ("extension", extension), + ("description", description), + ): + if value is not None: + attrib[key] = value + + data = {} + for key, value in ( + ("host_name", self._controller.get_host_name()), + ("version", version), + ("comment", comment), + ): + if value is not None: + data[key] = value + + username = self._get_current_username() + workfile_info = { + "id": uuid.uuid4().hex, + "path": rootless_path, + "taskId": task_id, + "attrib": attrib, + "data": data, + # TODO remove 'createdBy' and 'updatedBy' fields when server is + # or above 1.1.3 . + "createdBy": username, + "updatedBy": username, + } + + session = OperationsSession() + session.create_entity( + self._project_name, "workfile", workfile_info + ) + session.commit() + return workfile_info From 2f6ed068e722ac2d434b0fd8d910870bcd006099 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 30 Apr 2025 17:52:28 +0200 Subject: [PATCH 049/595] Remove publish workfiles model --- .../tools/workfiles/models/workfiles.py | 130 ------------------ 1 file changed, 130 deletions(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 892ca66d94..181d963ec7 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -447,134 +447,6 @@ class WorkareaModel: return directory_template.format_strict(fill_data).normalized() -class PublishWorkfilesModel: - """Model for handling of published workfiles. - - Todos: - Cache workfiles products and representations for some time. - Note Representations won't change. Only what can change are - versions. - """ - - def __init__(self, controller): - self._controller = controller - self._cached_extensions = None - self._cached_repre_extensions = None - - def get_file_items(self, folder_id: str, task_name: str) -> list[FileItem]: - # TODO refactor to use less server API calls - project_name = self._controller.get_current_project_name() - # Get subset docs of folder - product_entities = ayon_api.get_products( - project_name, - folder_ids={folder_id}, - product_types={"workfile"}, - fields={"id", "name"} - ) - - output = [] - product_ids = {product["id"] for product in product_entities} - if not product_ids: - return output - - # Get version docs of products with their families - version_entities = ayon_api.get_versions( - project_name, - product_ids=product_ids, - fields={"id", "author"} - ) - versions_by_id = { - version["id"]: version - for version in version_entities - } - if not versions_by_id: - return output - - # Query representations of filtered versions and add filter for - # extension - repre_entities = ayon_api.get_representations( - project_name, - version_ids=set(versions_by_id) - ) - project_anatomy = self._controller.project_anatomy - - # Filter queried representations by task name if task is set - file_items = [] - for repre_entity in repre_entities: - version_id = repre_entity["versionId"] - version_entity = versions_by_id[version_id] - file_item = self._file_item_from_representation( - repre_entity, - project_anatomy, - version_entity["author"], - task_name, - ) - if file_item is not None: - file_items.append(file_item) - - return file_items - - @property - def _extensions(self): - if self._cached_extensions is None: - exts = self._controller.get_workfile_extensions() or [] - self._cached_extensions = exts - return self._cached_extensions - - @property - def _repre_extensions(self): - if self._cached_repre_extensions is None: - self._cached_repre_extensions = { - ext.lstrip(".") for ext in self._extensions - } - return self._cached_repre_extensions - - def _file_item_from_representation( - self, - repre_entity: dict[str, Any], - project_anatomy: "Anatomy", - author: str, - task_name: Optional[str] = None - ): - if task_name is not None: - task_info = repre_entity["context"].get("task") - if not task_info or task_info["name"] != task_name: - return None - - # Filter by extension - extensions = self._repre_extensions - workfile_path = None - for repre_file in repre_entity["files"]: - ext = ( - os.path.splitext(repre_file["name"])[1] - .lower() - .lstrip(".") - ) - if ext in extensions: - workfile_path = repre_file["path"] - break - - if not workfile_path: - return None - - try: - workfile_path = workfile_path.format( - root=project_anatomy.roots) - except Exception as exc: - print("Failed to format workfile path: {}".format(exc)) - - dirpath, filename = os.path.split(workfile_path) - created_at = arrow.get(repre_entity["createdAt"]).to("local") - return FileItem( - dirpath, - filename, - created_at.float_timestamp, - author, - None, - repre_entity["id"] - ) - - class WorkfilesModel: """Workfiles model.""" @@ -583,7 +455,6 @@ class WorkfilesModel: self._controller = controller self._workarea_model = WorkareaModel(host, controller) - # self._published_model = PublishWorkfilesModel(controller) self._workfile_entities_by_task_id = {} self._current_username = _NOT_SET @@ -701,7 +572,6 @@ class WorkfilesModel: if item.task_id == task_id ] return items - # return self._published_model.get_file_items(folder_id, task_name) @property def _project_name(self) -> str: From eb3328157172e90e0d6603796b20329ac6819e72 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 30 Apr 2025 18:12:56 +0200 Subject: [PATCH 050/595] merge workfile models into one --- .../tools/workfiles/models/workfiles.py | 365 ++++++++---------- 1 file changed, 171 insertions(+), 194 deletions(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 181d963ec7..d04975bafb 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -14,7 +14,12 @@ from ayon_core.lib import ( NestedCacheItem, CacheItem, ) -from ayon_core.host import WorkfileInfo, PublishedWorkfileInfo +from ayon_core.host import ( + HostBase, + IWorkfileHost, + WorkfileInfo, + PublishedWorkfileInfo, +) from ayon_core.pipeline.template_data import ( get_template_data, get_task_template_data, @@ -27,30 +32,40 @@ from ayon_core.pipeline.workfile import ( get_comments_from_workfile_paths, ) from ayon_core.pipeline.version_start import get_versioning_start -from ayon_core.tools.workfiles.abstract import WorkareaFilepathResult +from ayon_core.tools.workfiles.abstract import ( + WorkareaFilepathResult, + AbstractWorkfilesBackend, +) if typing.TYPE_CHECKING: - from typing import Union from ayon_core.pipeline import Anatomy _NOT_SET = object() -class WorkareaModel: - """Workfiles model looking for workfiles in workare folder. +class HostType(HostBase, IWorkfileHost): + pass - Workarea folder is usually task and host specific, defined by - anatomy templates. Is looking for files with extensions defined - by host integration. - """ - def __init__(self, host, controller): - self._host = host - self._controller = controller +class WorkfilesModel: + """Workfiles model.""" + + def __init__( + self, + host: HostType, + controller: AbstractWorkfilesBackend + ): + self._host: HostType = host + self._controller: AbstractWorkfilesBackend = controller + extensions = None if controller.is_host_valid(): extensions = controller.get_workfile_extensions() - self._extensions = extensions + self._extensions: Optional[set[str]] = extensions + + self._current_username = _NOT_SET + + # Workarea self._base_data = None self._fill_data_by_folder_id = {} self._task_data_by_folder_id = {} @@ -60,6 +75,9 @@ class WorkareaModel: levels=1, default_factory=list ) + # Entities + self._workfile_entities_by_task_id = {} + def reset(self): self._base_data = None self._fill_data_by_folder_id = {} @@ -68,14 +86,73 @@ class WorkareaModel: self._file_items_mapping = {} self._file_items_cache.reset() - def reset_file_items(self, task_id: str): - cache: CacheItem = self._file_items_cache[task_id] - cache.set_invalid() - self._file_items_mapping.pop(task_id, None) + self._workfile_entities_by_task_id = {} + + def get_workfile_entities(self, task_id: str): + if not task_id: + return [] + workfile_entities = self._workfile_entities_by_task_id.get(task_id) + if workfile_entities is None: + workfile_entities = list(ayon_api.get_workfiles_info( + self._controller.get_current_project_name(), + task_ids=[task_id], + )) + self._workfile_entities_by_task_id[task_id] = workfile_entities + return workfile_entities + + def get_workfile_info( + self, + folder_id: Optional[str], + task_id: Optional[str], + rootless_path: Optional[str] + ): + if not folder_id or not task_id or not rootless_path: + return None + + mapping = self._file_items_mapping.get(task_id) + if mapping is None: + self._cache_file_items(folder_id, task_id) + mapping = self._file_items_mapping[task_id] + return mapping.get(rootless_path) + + def save_workfile_info( + self, + task_id: str, + rootless_path: str, + version: Optional[int], + comment: Optional[str], + description: Optional[str], + ): + self._save_workfile_info( + task_id, + rootless_path, + version, + comment, + description, + ) + + self._update_file_description( + task_id, rootless_path, description + ) + + def reset_workarea_file_items(self, task_id): + self._reset_file_items(task_id) def get_workarea_dir_by_context( - self, folder_id: str, task_id: str + self, folder_id: str, task_id: str ) -> Optional[str]: + """Workarea dir for passed context. + + The directory path is based on project anatomy templates. + + Args: + folder_id (str): Folder id. + task_id (str): Task id. + + Returns: + Optional[str]: Workarea dir path or None for invalid context. + + """ if not folder_id or not task_id: return None folder_mapping = self._workdir_by_context.setdefault(folder_id, {}) @@ -93,38 +170,20 @@ class WorkareaModel: folder_mapping[task_id] = workdir return workdir - def get_file_items( - self, - folder_id: Optional[str], - task_id: Optional[str], - ) -> list[WorkfileInfo]: + def get_workarea_file_items(self, folder_id, task_id): + """Workfile items for passed context from workarea. + + Args: + folder_id (Optional[str]): Folder id. + task_id (Optional[str]): Task id. + + Returns: + list[WorkfileInfo]: List of file items matching workarea of passed + context. + + """ return self._cache_file_items(folder_id, task_id) - def get_workfile_info( - self, - folder_id: Optional[str], - task_id: Optional[str], - rootless_path: Optional[str] - ): - if not folder_id or not task_id or not rootless_path: - return None - - mapping = self._file_items_mapping.get(task_id) - if mapping is None: - self._cache_file_items(folder_id, task_id) - mapping = self._file_items_mapping[task_id] - return mapping.get(rootless_path) - - def update_file_description( - self, task_id: str, rootless_path: str, description: str - ): - mapping = self._file_items_mapping.get(task_id) - if not mapping: - return - item = mapping.get(rootless_path) - if item is not None: - item.description = description - def get_workarea_save_as_data( self, folder_id: Optional[str], task_id: Optional[str] ) -> dict[str, Any]: @@ -139,7 +198,7 @@ class WorkareaModel: self._project_name, task_id ) - if not folder_entity or not task_entity: + if not folder_entity or not task_entity or self._extensions is None: return { "template_key": None, "template_has_version": None, @@ -189,15 +248,15 @@ class WorkareaModel: template_has_version = "{version" in file_template_str template_has_comment = "{comment" in file_template_str - file_items = self.get_file_items(folder_id, task_id) + file_items = self.get_workarea_file_items(folder_id, task_id) filepaths = [ item.filepath for item in file_items ] comment_hints, comment = get_comments_from_workfile_paths( filepaths, - file_template, extensions, + file_template, fill_data, current_filename, ) @@ -253,7 +312,7 @@ class WorkareaModel: ) if use_last_version: - file_items = self.get_file_items(folder_id, task_id) + file_items = self.get_workarea_file_items(folder_id, task_id) filepaths = [ item.filepath for item in file_items @@ -285,15 +344,58 @@ class WorkareaModel: exists ) + def get_published_file_items( + self, folder_id: str, task_id: str + ) -> PublishedWorkfileInfo: + """Published workfiles for passed context. + + Args: + folder_id (str): Folder id. + task_id (str): Task id. + + Returns: + list[PublishedWorkfileInfo]: List of files for published workfiles. + + """ + project_name = self._project_name + anatomy = self._controller.project_anatomy + items = self._host.list_published_workfiles( + project_name, + folder_id, + anatomy, + ) + if task_id: + items = [ + item + for item in items + if item.task_id == task_id + ] + return items + @property def _project_name(self) -> str: return self._controller.get_current_project_name() + @property + def _host_name(self) -> str: + return self._host.name + + def _get_current_username(self) -> str: + if self._current_username is _NOT_SET: + self._current_username = get_ayon_username() + return self._current_username + + # --- Workarea --- + def _reset_file_items(self, task_id: str): + cache: CacheItem = self._file_items_cache[task_id] + cache.set_invalid() + self._file_items_mapping.pop(task_id, None) + def _get_base_data(self) -> dict[str, Any]: if self._base_data is None: base_data = get_template_data( ayon_api.get_project(self._project_name), - host_name=self._controller.get_host_name(), + host_name=self._host_name, ) self._base_data = base_data return copy.deepcopy(self._base_data) @@ -316,12 +418,13 @@ class WorkareaModel: ) -> dict[str, Any]: task_data = self._task_data_by_folder_id.setdefault(folder_id, {}) if task_id not in task_data: - task = self._controller.get_task_entity( + task_entity = self._controller.get_task_entity( self._project_name, task_id ) - if task: + if task_entity: task_data[task_id] = get_task_template_data( - project_entity, task) + project_entity, task_entity + ) return copy.deepcopy(task_data[task_id]) def _prepare_fill_data( @@ -395,7 +498,7 @@ class WorkareaModel: return get_workfile_template_key( self._project_name, task_type, - self._controller.get_host_name(), + self._host_name, project_settings=self._controller.project_settings, ) @@ -431,7 +534,7 @@ class WorkareaModel: task_info = fill_data.get("task", {}) return get_versioning_start( self._project_name, - self._controller.get_host_name(), + self._host_name, task_name=task_info.get("name"), task_type=task_info.get("type"), product_type="workfile", @@ -446,141 +549,15 @@ class WorkareaModel: ) return directory_template.format_strict(fill_data).normalized() - -class WorkfilesModel: - """Workfiles model.""" - - def __init__(self, host, controller): - self._host = host - self._controller = controller - - self._workarea_model = WorkareaModel(host, controller) - - self._workfile_entities_by_task_id = {} - self._current_username = _NOT_SET - - def reset(self): - self._workarea_model.reset() - - self._workfile_entities_by_task_id = {} - - def get_workfile_entities(self, task_id: str): - if not task_id: - return [] - workfile_entities = self._workfile_entities_by_task_id.get(task_id) - if workfile_entities is None: - workfile_entities = list(ayon_api.get_workfiles_info( - self._controller.get_current_project_name(), - task_ids=[task_id], - )) - self._workfile_entities_by_task_id[task_id] = workfile_entities - return workfile_entities - - def save_workfile_info( - self, - task_id: str, - rootless_path: str, - version: Optional[int], - comment: Optional[str], - description: Optional[str], + def _update_file_description( + self, task_id: str, rootless_path: str, description: str ): - self._save_workfile_info( - task_id, - rootless_path, - version, - comment, - description, - ) - - self._workarea_model.update_file_description( - task_id, rootless_path, description - ) - - def reset_workarea_file_items(self, task_id): - self._workarea_model.reset_file_items(task_id) - - def get_workfile_info(self, folder_id, task_id, rootless_path): - return self._workarea_model.get_workfile_info( - folder_id, task_id, rootless_path - ) - - def get_workarea_dir_by_context(self, folder_id, task_id): - """Workarea dir for passed context. - - The directory path is based on project anatomy templates. - - Args: - folder_id (str): Folder id. - task_id (str): Task id. - - Returns: - Union[str, None]: Workarea dir path or None for invalid context. - """ - - return self._workarea_model.get_workarea_dir_by_context( - folder_id, task_id) - - def get_workarea_file_items(self, folder_id, task_id): - """Workfile items for passed context from workarea. - - Args: - folder_id (Union[str, None]): Folder id. - task_id (Union[str, None]): Task id. - - Returns: - list[WorkfileInfo]: List of file items matching workarea of passed - context. - - """ - return self._workarea_model.get_file_items( - folder_id, task_id - ) - - def get_workarea_save_as_data(self, folder_id, task_id): - return self._workarea_model.get_workarea_save_as_data( - folder_id, task_id) - - def fill_workarea_filepath(self, *args, **kwargs): - return self._workarea_model.fill_workarea_filepath( - *args, **kwargs - ) - - def get_published_file_items( - self, folder_id, task_id - ) -> PublishedWorkfileInfo: - """Published workfiles for passed context. - - Args: - folder_id (str): Folder id. - task_name (str): Task name. - - Returns: - list[PublishedWorkfileInfo]: List of files for published workfiles. - - """ - project_name = self._project_name - anatomy = self._controller.project_anatomy - items = self._host.list_published_workfiles( - project_name, - folder_id, - anatomy, - ) - if task_id: - items = [ - item - for item in items - if item.task_id == task_id - ] - return items - - @property - def _project_name(self) -> str: - return self._controller.get_current_project_name() - - def _get_current_username(self) -> str: - if self._current_username is _NOT_SET: - self._current_username = get_ayon_username() - return self._current_username + mapping = self._file_items_mapping.get(task_id) + if not mapping: + return + item = mapping.get(rootless_path) + if item is not None: + item.description = description # --- Workfile entities --- def _save_workfile_info( @@ -614,7 +591,7 @@ class WorkfilesModel: data = {} for key, value in ( - ("host_name", self._controller.get_host_name()), + ("host_name", self._host_name), ("version", version), ("comment", comment), ): @@ -681,7 +658,7 @@ class WorkfilesModel: data = {} for key, value in ( - ("host_name", self._controller.get_host_name()), + ("host_name", self._host_name), ("version", version), ("comment", comment), ): From 6a7f41f80a172a928b9e3a5fe745256590d744d4 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 30 Apr 2025 19:06:10 +0200 Subject: [PATCH 051/595] move workfiles related logic to workfiles model --- client/ayon_core/tools/workfiles/control.py | 261 +++------------ .../tools/workfiles/models/workfiles.py | 305 +++++++++++++++++- 2 files changed, 325 insertions(+), 241 deletions(-) diff --git a/client/ayon_core/tools/workfiles/control.py b/client/ayon_core/tools/workfiles/control.py index 37a3f4115b..f5df9f83ce 100644 --- a/client/ayon_core/tools/workfiles/control.py +++ b/client/ayon_core/tools/workfiles/control.py @@ -5,15 +5,11 @@ from typing import Optional import ayon_api from ayon_core.host import IWorkfileHost -from ayon_core.lib import Logger, emit_event +from ayon_core.lib import Logger from ayon_core.lib.events import QueuedEventSystem from ayon_core.settings import get_project_settings from ayon_core.pipeline import Anatomy, registered_host -from ayon_core.pipeline.context_tools import ( - change_current_context, - get_global_context, -) -from ayon_core.pipeline.workfile import create_workdir_extra_folders +from ayon_core.pipeline.context_tools import get_global_context from ayon_core.tools.common_models import ( HierarchyModel, @@ -297,11 +293,6 @@ class BaseWorkfileController( def get_host_name(self): return self._host.name - def _get_host_current_context(self): - if hasattr(self._host, "get_current_context"): - return self._host.get_current_context() - return get_global_context() - def get_current_project_name(self): return self._current_project_name @@ -312,7 +303,7 @@ class BaseWorkfileController( return self._current_task_name def get_current_workfile(self): - return self._host.get_current_workfile() + return self._workfiles_model.get_current_workfile() # Selection information def get_selected_folder_id(self): @@ -522,26 +513,10 @@ class BaseWorkfileController( # Controller actions def open_workfile(self, folder_id, task_id, filepath): - # TODO move to workfiles model - self._emit_event("open_workfile.started") - - failed = False - try: - self._open_workfile(folder_id, task_id, filepath) - - except Exception: - failed = True - self.log.warning("Open of workfile failed", exc_info=True) - - self._emit_event( - "open_workfile.finished", - {"failed": failed}, - ) + self._workfiles_model.open_workfile(folder_id, task_id, filepath) def save_current_workfile(self): - # TODO move to workfiles model - current_file = self.get_current_workfile() - self._host.save_workfile(current_file) + self._workfiles_model.save_current_workfile() def save_as_workfile( self, @@ -554,27 +529,15 @@ class BaseWorkfileController( comment, description, ): - self._emit_event("save_as.started") - - failed = False - try: - self._save_as_workfile( - folder_id, - task_id, - rootless_workdir, - filename, - template_key, - version, - comment, - description, - ) - except Exception: - failed = True - self.log.warning("Save as failed", exc_info=True) - - self._emit_event( - "save_as.finished", - {"failed": failed}, + self._workfiles_model.save_as_workfile( + folder_id, + task_id, + rootless_workdir, + filename, + template_key, + version, + comment, + description, ) def copy_workfile_representation( @@ -590,51 +553,29 @@ class BaseWorkfileController( comment, description, ): - # TODO move to workfiles model - self._emit_event("copy_representation.started") - - failed = False - try: - self._save_as_workfile( - folder_id, - task_id, - workdir, - filename, - template_key, - version, - comment, - description, - src_filepath=representation_filepath - ) - except Exception: - failed = True - self.log.warning( - "Copy of workfile representation failed", exc_info=True - ) - - self._emit_event( - "copy_representation.finished", - {"failed": failed}, + self._workfiles_model.copy_workfile_representation( + representation_id, + representation_filepath, + folder_id, + task_id, + workdir, + filename, + template_key, + version, + comment, + description, ) def duplicate_workfile( self, src_filepath, workdir, filename, version, comment, description ): - # TODO move to workfiles model - # TODO save workfile information - self._emit_event("workfile_duplicate.started") - - failed = False - try: - dst_filepath = os.path.join(workdir, filename) - shutil.copy(src_filepath, dst_filepath) - except Exception: - failed = True - self.log.warning("Duplication of workfile failed", exc_info=True) - - self._emit_event( - "workfile_duplicate.finished", - {"failed": failed}, + self._workfiles_model.duplicate_workfile( + src_filepath, + workdir, + filename, + version, + comment, + description, ) def _emit_event(self, topic, data=None): @@ -651,6 +592,11 @@ class BaseWorkfileController( return None return task_item.id + def _get_host_current_context(self): + if hasattr(self._host, "get_current_context"): + return self._host.get_current_context() + return get_global_context() + # Expected selection # - expected selection is used to restore selection after refresh # or when current context should be used @@ -659,136 +605,3 @@ class BaseWorkfileController( "expected_selection_changed", self._expected_selection.get_expected_selection_data(), ) - - def _get_event_context_data( - self, project_name, folder_id, task_id, folder=None, task=None - ): - if folder is None: - folder = self.get_folder_entity(project_name, folder_id) - if task is None: - task = self.get_task_entity(project_name, task_id) - return { - "project_name": project_name, - "folder_id": folder_id, - "folder_path": folder["path"], - "task_id": task_id, - "task_name": task["name"], - "host_name": self.get_host_name(), - } - - def _open_workfile(self, folder_id, task_id, filepath): - # TODO move to workfiles model - project_name = self.get_current_project_name() - event_data = self._get_event_context_data( - project_name, folder_id, task_id - ) - event_data["filepath"] = filepath - - emit_event("workfile.open.before", event_data, source="workfiles.tool") - - # Change context - task_name = event_data["task_name"] - if ( - folder_id != self.get_current_folder_id() - or task_name != self.get_current_task_name() - ): - self._change_current_context(project_name, folder_id, task_id) - - self._host.open_workfile(filepath) - - emit_event("workfile.open.after", event_data, source="workfiles.tool") - - def _save_as_workfile( - self, - folder_id: str, - task_id: str, - rootless_workdir: str, - filename: str, - template_key: str, - version: Optional[int], - comment: Optional[str], - description: Optional[str], - src_filepath=None, - ): - # TODO move to workfiles model - # Trigger before save event - project_name = self.get_current_project_name() - folder = self.get_folder_entity(project_name, folder_id) - task = self.get_task_entity(project_name, task_id) - task_name = task["name"] - - workdir = self.project_anatomy.fill_root(rootless_workdir) - - # QUESTION should the data be different for 'before' and 'after'? - event_data = self._get_event_context_data( - project_name, folder_id, task_id, folder, task - ) - event_data.update({ - "filename": filename, - "workdir_path": workdir, - }) - - emit_event("workfile.save.before", event_data, source="workfiles.tool") - - # Create workfiles root folder - if not os.path.exists(workdir): - self.log.debug("Initializing work directory: %s", workdir) - os.makedirs(workdir) - - # Change context - if ( - folder_id != self.get_current_folder_id() - or task_name != self.get_current_task_name() - ): - self._change_current_context( - project_name, folder_id, task_id, template_key - ) - - # Save workfile - dst_filepath = os.path.join(workdir, filename) - if src_filepath: - shutil.copyfile(src_filepath, dst_filepath) - self._host.open_workfile(dst_filepath) - else: - self._host.save_workfile(dst_filepath) - - # Make sure workfile info exists - if not description: - description = None - if not comment: - comment = None - self.save_workfile_info( - task_id, - f"{rootless_workdir}/{filename}", - version, - comment, - description, - ) - self._workfiles_model.reset_workarea_file_items(task_id) - - # Create extra folders - create_workdir_extra_folders( - workdir, - self.get_host_name(), - task["taskType"], - task_name, - project_name - ) - - # Trigger after save events - emit_event("workfile.save.after", event_data, source="workfiles.tool") - - def _change_current_context( - self, project_name, folder_id, task_id, template_key=None - ): - # Change current context - folder_entity = self.get_folder_entity(project_name, folder_id) - task_entity = self.get_task_entity(project_name, task_id) - change_current_context( - folder_entity, - task_entity, - template_key=template_key - ) - self._current_folder_id = folder_entity["id"] - self._current_folder_path = folder_entity["path"] - self._current_task_name = task_entity["name"] diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index d04975bafb..6508f693dd 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -4,6 +4,7 @@ import copy import uuid import platform import typing +import shutil from typing import Optional, Any import ayon_api @@ -13,6 +14,8 @@ from ayon_core.lib import ( get_ayon_username, NestedCacheItem, CacheItem, + emit_event, + Logger, ) from ayon_core.host import ( HostBase, @@ -30,8 +33,10 @@ from ayon_core.pipeline.workfile import ( get_workfile_template_key, get_last_workfile_with_version_from_paths, get_comments_from_workfile_paths, + create_workdir_extra_folders, ) from ayon_core.pipeline.version_start import get_versioning_start +from ayon_core.pipeline.context_tools import change_current_context from ayon_core.tools.workfiles.abstract import ( WorkareaFilepathResult, AbstractWorkfilesBackend, @@ -58,6 +63,7 @@ class WorkfilesModel: self._host: HostType = host self._controller: AbstractWorkfilesBackend = controller + self._log = Logger.get_logger("WorkfilesModel") extensions = None if controller.is_host_valid(): extensions = controller.get_workfile_extensions() @@ -70,8 +76,8 @@ class WorkfilesModel: self._fill_data_by_folder_id = {} self._task_data_by_folder_id = {} self._workdir_by_context = {} - self._file_items_mapping = {} - self._file_items_cache = NestedCacheItem( + self._workarea_file_items_mapping = {} + self._workarea_file_items_cache = NestedCacheItem( levels=1, default_factory=list ) @@ -83,18 +89,135 @@ class WorkfilesModel: self._fill_data_by_folder_id = {} self._task_data_by_folder_id = {} self._workdir_by_context = {} - self._file_items_mapping = {} - self._file_items_cache.reset() + self._workarea_file_items_mapping = {} + self._workarea_file_items_cache.reset() self._workfile_entities_by_task_id = {} + # Host functionality + def get_current_workfile(self): + return self._host.get_current_workfile() + + def open_workfile(self, folder_id, task_id, filepath): + self._emit_event("open_workfile.started") + + failed = False + try: + self._open_workfile(folder_id, task_id, filepath) + + except Exception: + failed = True + self._log.warning("Open of workfile failed", exc_info=True) + + self._emit_event( + "open_workfile.finished", + {"failed": failed}, + ) + + def save_current_workfile(self): + current_file = self.get_current_workfile() + self._host.save_workfile(current_file) + + def save_as_workfile( + self, + folder_id, + task_id, + rootless_workdir, + filename, + template_key, + version, + comment, + description, + ): + self._emit_event("save_as.started") + + failed = False + try: + self._save_as_workfile( + folder_id, + task_id, + rootless_workdir, + filename, + template_key, + version, + comment, + description, + ) + except Exception: + failed = True + self._log.warning("Save as failed", exc_info=True) + + self._emit_event( + "save_as.finished", + {"failed": failed}, + ) + + def copy_workfile_representation( + self, + representation_id, + representation_filepath, + folder_id, + task_id, + workdir, + filename, + template_key, + version, + comment, + description, + ): + # TODO move to workfiles pipeline + self._emit_event("copy_representation.started") + + failed = False + try: + self._save_as_workfile( + folder_id, + task_id, + workdir, + filename, + template_key, + version, + comment, + description, + src_filepath=representation_filepath + ) + except Exception: + failed = True + self._log.warning( + "Copy of workfile representation failed", exc_info=True + ) + + self._emit_event( + "copy_representation.finished", + {"failed": failed}, + ) + + def duplicate_workfile( + self, src_filepath, workdir, filename, version, comment, description + ): + # TODO save workfile information + self._emit_event("workfile_duplicate.started") + + failed = False + try: + dst_filepath = os.path.join(workdir, filename) + shutil.copy(src_filepath, dst_filepath) + except Exception: + failed = True + self._log.warning("Duplication of workfile failed", exc_info=True) + + self._emit_event( + "workfile_duplicate.finished", + {"failed": failed}, + ) + def get_workfile_entities(self, task_id: str): if not task_id: return [] workfile_entities = self._workfile_entities_by_task_id.get(task_id) if workfile_entities is None: workfile_entities = list(ayon_api.get_workfiles_info( - self._controller.get_current_project_name(), + self._project_name, task_ids=[task_id], )) self._workfile_entities_by_task_id[task_id] = workfile_entities @@ -109,10 +232,10 @@ class WorkfilesModel: if not folder_id or not task_id or not rootless_path: return None - mapping = self._file_items_mapping.get(task_id) + mapping = self._workarea_file_items_mapping.get(task_id) if mapping is None: self._cache_file_items(folder_id, task_id) - mapping = self._file_items_mapping[task_id] + mapping = self._workarea_file_items_mapping[task_id] return mapping.get(rootless_path) def save_workfile_info( @@ -135,11 +258,11 @@ class WorkfilesModel: task_id, rootless_path, description ) - def reset_workarea_file_items(self, task_id): - self._reset_file_items(task_id) + def reset_workarea_file_items(self, task_id: str): + self._reset_workarea_file_items(task_id) def get_workarea_dir_by_context( - self, folder_id: str, task_id: str + self, folder_id: str, task_id: str ) -> Optional[str]: """Workarea dir for passed context. @@ -346,7 +469,7 @@ class WorkfilesModel: def get_published_file_items( self, folder_id: str, task_id: str - ) -> PublishedWorkfileInfo: + ) -> list[PublishedWorkfileInfo]: """Published workfiles for passed context. Args: @@ -380,16 +503,164 @@ class WorkfilesModel: def _host_name(self) -> str: return self._host.name + def _emit_event(self, topic, data=None): + self._controller.emit_event(topic, data, "workfiles") + def _get_current_username(self) -> str: if self._current_username is _NOT_SET: self._current_username = get_ayon_username() return self._current_username + # --- Host --- + def _get_event_context_data( + self, + project_name: str, + folder_id: str, + task_id: str, + folder_entity: Optional[dict[str, Any]] = None, + task_entity: Optional[dict[str, Any]] = None, + ): + if folder_entity is None: + folder_entity = self._controller.get_folder_entity( + project_name, folder_id + ) + if task_entity is None: + task_entity = self._controller.get_task_entity( + project_name, task_id + ) + return { + "project_name": project_name, + "folder_id": folder_id, + "folder_path": folder_entity["path"], + "task_id": task_id, + "task_name": task_entity["name"], + "host_name": self._host_name, + } + + def _open_workfile(self, folder_id: str, task_id: str, filepath: str): + # TODO move to workfiles pipeline + project_name = self._project_name + event_data = self._get_event_context_data( + project_name, folder_id, task_id + ) + event_data["filepath"] = filepath + + emit_event("workfile.open.before", event_data, source="workfiles.tool") + + # Change context + task_name = event_data["task_name"] + if ( + folder_id != self._controller.get_current_folder_id() + or task_name != self._controller.get_current_task_name() + ): + self._change_current_context(project_name, folder_id, task_id) + + self._host.open_workfile(filepath) + + emit_event("workfile.open.after", event_data, source="workfiles.tool") + + def _save_as_workfile( + self, + folder_id: str, + task_id: str, + rootless_workdir: str, + filename: str, + template_key: str, + version: Optional[int], + comment: Optional[str], + description: Optional[str], + src_filepath=None, + ): + # TODO move to workfiles pipeline + # Trigger before save event + project_name = self._project_name + folder = self._controller.get_folder_entity(project_name, folder_id) + task = self._controller.get_task_entity(project_name, task_id) + task_name = task["name"] + + workdir = self._controller.project_anatomy.fill_root(rootless_workdir) + + # QUESTION should the data be different for 'before' and 'after'? + event_data = self._get_event_context_data( + project_name, folder_id, task_id, folder, task + ) + event_data.update({ + "filename": filename, + "workdir_path": workdir, + }) + + emit_event("workfile.save.before", event_data, source="workfiles.tool") + + # Create workfiles root folder + if not os.path.exists(workdir): + self._log.debug("Initializing work directory: %s", workdir) + os.makedirs(workdir) + + # Change context + if ( + folder_id != self._controller.get_current_folder_id() + or task_name != self._controller.get_current_task_name() + ): + self._change_current_context( + project_name, folder_id, task_id, template_key + ) + + # Save workfile + dst_filepath = os.path.join(workdir, filename) + if src_filepath: + shutil.copyfile(src_filepath, dst_filepath) + self._host.open_workfile(dst_filepath) + else: + self._host.save_workfile(dst_filepath) + + # Make sure workfile info exists + if not description: + description = None + if not comment: + comment = None + self.save_workfile_info( + task_id, + f"{rootless_workdir}/{filename}", + version, + comment, + description, + ) + self.reset_workarea_file_items(task_id) + + # Create extra folders + create_workdir_extra_folders( + workdir, + self._host_name, + task["taskType"], + task_name, + project_name + ) + + # Trigger after save events + emit_event("workfile.save.after", event_data, source="workfiles.tool") + + def _change_current_context( + self, project_name, folder_id, task_id, template_key=None + ): + # Change current context + folder_entity = self._controller.get_folder_entity( + project_name, folder_id + ) + task_entity = self._controller.get_task_entity(project_name, task_id) + change_current_context( + folder_entity, + task_entity, + template_key=template_key + ) + self._current_folder_id = folder_entity["id"] + self._current_folder_path = folder_entity["path"] + self._current_task_name = task_entity["name"] + # --- Workarea --- - def _reset_file_items(self, task_id: str): - cache: CacheItem = self._file_items_cache[task_id] + def _reset_workarea_file_items(self, task_id: str): + cache: CacheItem = self._workarea_file_items_cache[task_id] cache.set_invalid() - self._file_items_mapping.pop(task_id, None) + self._workarea_file_items_mapping.pop(task_id, None) def _get_base_data(self) -> dict[str, Any]: if self._base_data is None: @@ -450,7 +721,7 @@ class WorkfilesModel: if not folder_id or not task_id: return [] - cache: CacheItem = self._file_items_cache[task_id] + cache: CacheItem = self._workarea_file_items_cache[task_id] if cache.is_valid: return cache.get_data() @@ -485,7 +756,7 @@ class WorkfilesModel: cache.update_data(items) # Cache items by entity ids and rootless path - self._file_items_mapping[task_id] = { + self._workarea_file_items_mapping[task_id] = { item.rootless_path: item for item in items } @@ -552,7 +823,7 @@ class WorkfilesModel: def _update_file_description( self, task_id: str, rootless_path: str, description: str ): - mapping = self._file_items_mapping.get(task_id) + mapping = self._workarea_file_items_mapping.get(task_id) if not mapping: return item = mapping.get(rootless_path) From 3483a7bd0ed9a4c3d9e1f99832ddb9524db3a8b6 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Mon, 5 May 2025 12:02:22 +0200 Subject: [PATCH 052/595] Updates plugin families Removes "circuit" from plugin families and adds "batchdelivery" to align with current project needs. This change ensures that the collect, extract, and review processes are correctly associated with the appropriate families, streamlining publishing workflows. --- client/ayon_core/plugins/publish/collect_audio.py | 2 +- client/ayon_core/plugins/publish/extract_burnin.py | 2 +- client/ayon_core/plugins/publish/extract_review.py | 2 +- client/ayon_core/plugins/publish/extract_thumbnail.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/plugins/publish/collect_audio.py b/client/ayon_core/plugins/publish/collect_audio.py index 57c69ef2b2..069082af37 100644 --- a/client/ayon_core/plugins/publish/collect_audio.py +++ b/client/ayon_core/plugins/publish/collect_audio.py @@ -39,7 +39,7 @@ class CollectAudio(pyblish.api.ContextPlugin): "blender", "houdini", "max", - "circuit", + "batchdelivery", ] audio_product_name = "audioMain" diff --git a/client/ayon_core/plugins/publish/extract_burnin.py b/client/ayon_core/plugins/publish/extract_burnin.py index 3f7c2f4cba..4b285d9990 100644 --- a/client/ayon_core/plugins/publish/extract_burnin.py +++ b/client/ayon_core/plugins/publish/extract_burnin.py @@ -55,7 +55,7 @@ class ExtractBurnin(publish.Extractor): "max", "blender", "unreal", - "circuit", + "batchdelivery", ] optional = True diff --git a/client/ayon_core/plugins/publish/extract_review.py b/client/ayon_core/plugins/publish/extract_review.py index a15886451b..7a0627d05c 100644 --- a/client/ayon_core/plugins/publish/extract_review.py +++ b/client/ayon_core/plugins/publish/extract_review.py @@ -92,7 +92,7 @@ class ExtractReview(pyblish.api.InstancePlugin): "aftereffects", "flame", "unreal", - "circuit", + "batchdelivery", ] # Supported extensions diff --git a/client/ayon_core/plugins/publish/extract_thumbnail.py b/client/ayon_core/plugins/publish/extract_thumbnail.py index 3a428c46a7..b4309a6038 100644 --- a/client/ayon_core/plugins/publish/extract_thumbnail.py +++ b/client/ayon_core/plugins/publish/extract_thumbnail.py @@ -40,7 +40,7 @@ class ExtractThumbnail(pyblish.api.InstancePlugin): "aftereffects", "unreal", "houdini", - "circuit", + "batchdelivery", ] enabled = False From 10c66f496e911b105c7ce34818d10bd471059a14 Mon Sep 17 00:00:00 2001 From: Philippe Leprince Date: Fri, 9 May 2025 14:39:26 +0200 Subject: [PATCH 053/595] first version Signed-off-by: Philippe Leprince --- .github/workflows/deploy_mkdocs.yml | 78 +++++++++++++++++++++++++++++ docs/mkdocs_requirements.txt | 9 ++++ 2 files changed, 87 insertions(+) create mode 100644 .github/workflows/deploy_mkdocs.yml create mode 100644 docs/mkdocs_requirements.txt diff --git a/.github/workflows/deploy_mkdocs.yml b/.github/workflows/deploy_mkdocs.yml new file mode 100644 index 0000000000..9fd97c1e82 --- /dev/null +++ b/.github/workflows/deploy_mkdocs.yml @@ -0,0 +1,78 @@ +name: Deploy MkDocs + +on: + workflow_dispatch: + workflow_call: + inputs: + repo: + type: string + required: true + branch_name: + type: string + required: true + default: "main" + tag: + type: string + required: true + secrets: + token: + required: true + user: + required: true + email: + required: true + +env: + GH_TOKEN: ${{ secrets.token || secrets.YNPUT_BOT_TOKEN }} + GH_USER: ${{ secrets.user || secrets.CI_USER }} + GH_EMAIL: ${{ secrets.email || secrets.CI_EMAIL }} + +jobs: + + verify-latest-release: + uses: ynput/ops-repo-automation/.github/workflows/verify_latest_release.yml@main + with: + repo: ${{ github.repository }} + expect_release: true + secrets: + gh_token: ${{ secrets.token }} + + verify-repo-secrets: + uses: ynput/ops-repo-automation/.github/workflows/verify_secrets.yml@main + with: + repo: ${{ github.repository }} + secrets: + gh_token: ${{ secrets.token }} + gh_user: ${{ secrets.user }} + gh_email: ${{ secrets.email }} + + verify-repo-vars: + uses: ynput/ops-repo-automation/.github/workflows/verify_variables.yml@main + with: + variables: "MAIN_BRANCH,MINOR_BUMP_LABEL,PATCH_BUMP_LABEL,PROJECT_NAME" + repo: ${{ github.repository }} + secrets: + gh_token: ${{ secrets.token }} + + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout ${{ inputs.branch_name }} + uses: actions/checkout@v4 + with: + ref: ${{ inputs.branch_name }} + fetch-depth: 0 + submodules: true + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.x" + + - name: Install dependencies + run: | + python3 -m pip install -r ./docs/mkdocs_requirements.txt + + - name: Mike deploy + run: mike deploy --update-aliases ${{ inputs.tag }} latest diff --git a/docs/mkdocs_requirements.txt b/docs/mkdocs_requirements.txt new file mode 100644 index 0000000000..829d02951a --- /dev/null +++ b/docs/mkdocs_requirements.txt @@ -0,0 +1,9 @@ +mkdocs-material >= 9.6.7 +mkdocs-autoapi >= 0.4.0 +mkdocstrings-python >= 1.16.2 +mkdocs-minify-plugin >= 0.8.0 +markdown-checklist >= 0.4.4 +mdx-gh-links >= 0.4 +pymdown-extensions >= 10.14.3 +mike >= 2.1.3 +mkdocstrings-shell >= 1.0.2 From bd1dd87d242ee3d637133bea0e84ee64c2b76172 Mon Sep 17 00:00:00 2001 From: Philippe Leprince Date: Fri, 9 May 2025 16:41:16 +0200 Subject: [PATCH 054/595] can I test this ? Signed-off-by: Philippe Leprince --- .github/workflows/deploy_mkdocs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy_mkdocs.yml b/.github/workflows/deploy_mkdocs.yml index 9fd97c1e82..fcee1dd3c2 100644 --- a/.github/workflows/deploy_mkdocs.yml +++ b/.github/workflows/deploy_mkdocs.yml @@ -1,6 +1,7 @@ name: Deploy MkDocs on: + pull_request: workflow_dispatch: workflow_call: inputs: From 4977e771224ed202d76d11c6bfd6187d37812240 Mon Sep 17 00:00:00 2001 From: Philippe Leprince Date: Fri, 9 May 2025 16:44:05 +0200 Subject: [PATCH 055/595] remove some tests Signed-off-by: Philippe Leprince --- .github/workflows/deploy_mkdocs.yml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/deploy_mkdocs.yml b/.github/workflows/deploy_mkdocs.yml index fcee1dd3c2..80e69b8fa1 100644 --- a/.github/workflows/deploy_mkdocs.yml +++ b/.github/workflows/deploy_mkdocs.yml @@ -30,13 +30,13 @@ env: jobs: - verify-latest-release: - uses: ynput/ops-repo-automation/.github/workflows/verify_latest_release.yml@main - with: - repo: ${{ github.repository }} - expect_release: true - secrets: - gh_token: ${{ secrets.token }} +# verify-latest-release: +# uses: ynput/ops-repo-automation/.github/workflows/verify_latest_release.yml@main +# with: +# repo: ${{ github.repository }} +# expect_release: true +# secrets: +# gh_token: ${{ secrets.token }} verify-repo-secrets: uses: ynput/ops-repo-automation/.github/workflows/verify_secrets.yml@main @@ -47,13 +47,13 @@ jobs: gh_user: ${{ secrets.user }} gh_email: ${{ secrets.email }} - verify-repo-vars: - uses: ynput/ops-repo-automation/.github/workflows/verify_variables.yml@main - with: - variables: "MAIN_BRANCH,MINOR_BUMP_LABEL,PATCH_BUMP_LABEL,PROJECT_NAME" - repo: ${{ github.repository }} - secrets: - gh_token: ${{ secrets.token }} +# verify-repo-vars: +# uses: ynput/ops-repo-automation/.github/workflows/verify_variables.yml@main +# with: +# variables: "MAIN_BRANCH,MINOR_BUMP_LABEL,PATCH_BUMP_LABEL,PROJECT_NAME" +# repo: ${{ github.repository }} +# secrets: +# gh_token: ${{ secrets.token }} deploy: runs-on: ubuntu-latest From dc9d65d9b85d6a4afe5eda2e3638facf2d7d2c6a Mon Sep 17 00:00:00 2001 From: Philippe Leprince Date: Fri, 9 May 2025 17:01:09 +0200 Subject: [PATCH 056/595] fix authentification error Signed-off-by: Philippe Leprince --- .github/workflows/deploy_mkdocs.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/deploy_mkdocs.yml b/.github/workflows/deploy_mkdocs.yml index 80e69b8fa1..98866eb43e 100644 --- a/.github/workflows/deploy_mkdocs.yml +++ b/.github/workflows/deploy_mkdocs.yml @@ -66,6 +66,11 @@ jobs: fetch-depth: 0 submodules: true + - name: 🔑 Set Authentication + run: | + git config --global user.name "${{ secrets.user }}" + git config --global user.email "${{ secrets.email }}" + - name: Set up Python uses: actions/setup-python@v4 with: From 5899f484a5d242904b5ee21808b2c53249deadc7 Mon Sep 17 00:00:00 2001 From: Philippe Leprince Date: Fri, 9 May 2025 17:10:26 +0200 Subject: [PATCH 057/595] better authentification fix Signed-off-by: Philippe Leprince --- .github/workflows/deploy_mkdocs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy_mkdocs.yml b/.github/workflows/deploy_mkdocs.yml index 98866eb43e..8c05985613 100644 --- a/.github/workflows/deploy_mkdocs.yml +++ b/.github/workflows/deploy_mkdocs.yml @@ -68,8 +68,8 @@ jobs: - name: 🔑 Set Authentication run: | - git config --global user.name "${{ secrets.user }}" - git config --global user.email "${{ secrets.email }}" + git config --global user.name "${{ secrets.user || secrets.CI_USER }}" + git config --global user.email "${{ secrets.email || secrets.CI_EMAIL }}" - name: Set up Python uses: actions/setup-python@v4 From b5006abc8b51bf18f7ba4fa083925df364877692 Mon Sep 17 00:00:00 2001 From: Philippe Leprince Date: Fri, 9 May 2025 17:15:09 +0200 Subject: [PATCH 058/595] display tag Signed-off-by: Philippe Leprince --- .github/workflows/deploy_mkdocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy_mkdocs.yml b/.github/workflows/deploy_mkdocs.yml index 8c05985613..49f6cfafba 100644 --- a/.github/workflows/deploy_mkdocs.yml +++ b/.github/workflows/deploy_mkdocs.yml @@ -80,5 +80,5 @@ jobs: run: | python3 -m pip install -r ./docs/mkdocs_requirements.txt - - name: Mike deploy + - name: Mike deploy ${{ inputs.tag }} run: mike deploy --update-aliases ${{ inputs.tag }} latest From 71a5a4603020905dbd2a33751b4f24030bbabadb Mon Sep 17 00:00:00 2001 From: Philippe Leprince Date: Fri, 9 May 2025 17:38:41 +0200 Subject: [PATCH 059/595] Get the current tag with fallback to 1.0.0 Signed-off-by: Philippe Leprince --- .github/workflows/deploy_mkdocs.yml | 30 ++++++++--------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/.github/workflows/deploy_mkdocs.yml b/.github/workflows/deploy_mkdocs.yml index 49f6cfafba..2e6329f924 100644 --- a/.github/workflows/deploy_mkdocs.yml +++ b/.github/workflows/deploy_mkdocs.yml @@ -12,9 +12,6 @@ on: type: string required: true default: "main" - tag: - type: string - required: true secrets: token: required: true @@ -29,15 +26,6 @@ env: GH_EMAIL: ${{ secrets.email || secrets.CI_EMAIL }} jobs: - -# verify-latest-release: -# uses: ynput/ops-repo-automation/.github/workflows/verify_latest_release.yml@main -# with: -# repo: ${{ github.repository }} -# expect_release: true -# secrets: -# gh_token: ${{ secrets.token }} - verify-repo-secrets: uses: ynput/ops-repo-automation/.github/workflows/verify_secrets.yml@main with: @@ -47,14 +35,6 @@ jobs: gh_user: ${{ secrets.user }} gh_email: ${{ secrets.email }} -# verify-repo-vars: -# uses: ynput/ops-repo-automation/.github/workflows/verify_variables.yml@main -# with: -# variables: "MAIN_BRANCH,MINOR_BUMP_LABEL,PATCH_BUMP_LABEL,PROJECT_NAME" -# repo: ${{ github.repository }} -# secrets: -# gh_token: ${{ secrets.token }} - deploy: runs-on: ubuntu-latest @@ -71,6 +51,12 @@ jobs: git config --global user.name "${{ secrets.user || secrets.CI_USER }}" git config --global user.email "${{ secrets.email || secrets.CI_EMAIL }}" + - name: Get current tag + id: git_tag + uses: "devops-actions/action-get-tag@v1.0.3" + with: + default: 1.0.0 + - name: Set up Python uses: actions/setup-python@v4 with: @@ -80,5 +66,5 @@ jobs: run: | python3 -m pip install -r ./docs/mkdocs_requirements.txt - - name: Mike deploy ${{ inputs.tag }} - run: mike deploy --update-aliases ${{ inputs.tag }} latest + - name: Mike deploy ${{ steps.git_tag.outputs.tag }} + run: mike deploy --update-aliases ${{ steps.git_tag.outputs.tag }} latest From 17fbd5228cad7a867137751f2a0ceb125f10f0a0 Mon Sep 17 00:00:00 2001 From: Philippe Leprince Date: Fri, 9 May 2025 17:43:42 +0200 Subject: [PATCH 060/595] remove quotes Signed-off-by: Philippe Leprince --- .github/workflows/deploy_mkdocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy_mkdocs.yml b/.github/workflows/deploy_mkdocs.yml index 2e6329f924..a8281a1de0 100644 --- a/.github/workflows/deploy_mkdocs.yml +++ b/.github/workflows/deploy_mkdocs.yml @@ -53,7 +53,7 @@ jobs: - name: Get current tag id: git_tag - uses: "devops-actions/action-get-tag@v1.0.3" + uses: devops-actions/action-get-tag@v1.0.3 with: default: 1.0.0 From 18c0299bfb9a1812a485d8c454f68f5d165f5271 Mon Sep 17 00:00:00 2001 From: Philippe Leprince Date: Fri, 9 May 2025 17:47:57 +0200 Subject: [PATCH 061/595] fix missing branch name Signed-off-by: Philippe Leprince --- .github/workflows/deploy_mkdocs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy_mkdocs.yml b/.github/workflows/deploy_mkdocs.yml index a8281a1de0..4d6fd9104e 100644 --- a/.github/workflows/deploy_mkdocs.yml +++ b/.github/workflows/deploy_mkdocs.yml @@ -39,10 +39,10 @@ jobs: runs-on: ubuntu-latest steps: - - name: Checkout ${{ inputs.branch_name }} + - name: Checkout ${{ inputs.branch_name || 'main' }} uses: actions/checkout@v4 with: - ref: ${{ inputs.branch_name }} + ref: ${{ inputs.branch_name || 'main' }} fetch-depth: 0 submodules: true From 539be6c5270dbdfe739df9d2ccda8b59cc7b7340 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Fri, 9 May 2025 17:51:51 +0200 Subject: [PATCH 062/595] Handles OCIO shared view token The OCIO config can return a special token "" as the colorspace name for a display view. This commit implements handling for this token, replacing it with the display name if found. --- client/ayon_core/pipeline/colorspace.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/colorspace.py b/client/ayon_core/pipeline/colorspace.py index 8c4f97ab1c..79aea391eb 100644 --- a/client/ayon_core/pipeline/colorspace.py +++ b/client/ayon_core/pipeline/colorspace.py @@ -1403,7 +1403,12 @@ def _get_display_view_colorspace_name(config_path, display, view): """ config = _get_ocio_config(config_path) - return config.getDisplayViewColorSpaceName(display, view) + colorspace = config.getDisplayViewColorSpaceName(display, view) + # Special token. See https://opencolorio.readthedocs.io/en/latest/guides/authoring/authoring.html#shared-views # noqa + if colorspace == "": + colorspace = display + + return colorspace def _get_ocio_config_colorspaces(config_path): From af9fd17ee8108f4a13b9777fa9daf68e3a09fa74 Mon Sep 17 00:00:00 2001 From: Philippe Leprince Date: Fri, 9 May 2025 17:55:49 +0200 Subject: [PATCH 063/595] format Signed-off-by: Philippe Leprince --- .github/workflows/deploy_mkdocs.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/deploy_mkdocs.yml b/.github/workflows/deploy_mkdocs.yml index 4d6fd9104e..2f46bdc6ad 100644 --- a/.github/workflows/deploy_mkdocs.yml +++ b/.github/workflows/deploy_mkdocs.yml @@ -21,28 +21,28 @@ on: required: true env: - GH_TOKEN: ${{ secrets.token || secrets.YNPUT_BOT_TOKEN }} - GH_USER: ${{ secrets.user || secrets.CI_USER }} - GH_EMAIL: ${{ secrets.email || secrets.CI_EMAIL }} + GH_TOKEN: ${{ secrets.token || secrets.YNPUT_BOT_TOKEN }} + GH_USER: ${{ secrets.user || secrets.CI_USER }} + GH_EMAIL: ${{ secrets.email || secrets.CI_EMAIL }} jobs: verify-repo-secrets: - uses: ynput/ops-repo-automation/.github/workflows/verify_secrets.yml@main - with: - repo: ${{ github.repository }} - secrets: - gh_token: ${{ secrets.token }} - gh_user: ${{ secrets.user }} - gh_email: ${{ secrets.email }} + uses: ynput/ops-repo-automation/.github/workflows/verify_secrets.yml@main + with: + repo: ${{ github.repository }} + secrets: + gh_token: ${{ secrets.token }} + gh_user: ${{ secrets.user }} + gh_email: ${{ secrets.email }} deploy: runs-on: ubuntu-latest steps: - - name: Checkout ${{ inputs.branch_name || 'main' }} + - name: Checkout ${{ inputs.branch_name}} uses: actions/checkout@v4 with: - ref: ${{ inputs.branch_name || 'main' }} + ref: ${{ inputs.branch_name}} fetch-depth: 0 submodules: true From 21c1a8bda2b219894c51a9a52b36195de227ab3d Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 16 May 2025 10:23:07 +0200 Subject: [PATCH 064/595] added base implementation to workfiles interface --- client/ayon_core/host/interfaces/workfiles.py | 161 +++++++++++++++++- 1 file changed, 156 insertions(+), 5 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 21085abaa8..970e31bc88 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -1,6 +1,7 @@ from __future__ import annotations import os import platform +import shutil from abc import abstractmethod from dataclasses import dataclass, asdict import typing @@ -65,7 +66,7 @@ class WorkfileInfo: return asdict(self) @classmethod - def from_data(self, data): + def from_data(cls, data): """Converts data to workfile item. Args: @@ -80,6 +81,7 @@ class WorkfileInfo: @dataclass class PublishedWorkfileInfo: + project_name: str folder_id: str task_id: Optional[str] representation_id: str @@ -94,6 +96,7 @@ class PublishedWorkfileInfo: @classmethod def new( cls, + project_name: str, folder_id: str, task_id: Optional[str], repre_entity: dict[str, Any], @@ -107,6 +110,7 @@ class PublishedWorkfileInfo: created_at = arrow.get(repre_entity["createdAt"]).to("local") return cls( + project_name=project_name, folder_id=folder_id, task_id=task_id, representation_id=repre_entity["id"], @@ -129,7 +133,7 @@ class PublishedWorkfileInfo: return asdict(self) @classmethod - def from_data(self, data): + def from_data(cls, data): """Converts data to workfile item. Args: @@ -192,10 +196,12 @@ class IWorkfileHost: return None def get_workfile_extensions(self) -> list[str]: - """Extensions that can be used as save. + """Extensions that can be used as save workfile. - Questions: - This could potentially use 'HostDefinition'. + Notes: + Method may not be used if 'list_workfiles' and + 'list_published_workfiles' are re-implemented with different + logic. Returns: list[str]: List of extensions that can be used for saving. @@ -203,6 +209,51 @@ class IWorkfileHost: """ return [] + def save_workfile_with_context( + self, + filepath: str, + folder_id: str, + task_id: str, + folder_entity: Optional[dict[str, Any]] = None, + task_entity: Optional[dict[str, Any]] = None, + ): + """Save current workfile with context. + + Notes: + Should this method care about context change? + + Args: + filepath (str): Where the current scene should be saved. + folder_id (str): Folder id. + task_id (str): Task id. + + """ + self.save_workfile(filepath) + + def open_workfile_with_context( + self, + filepath: str, + folder_id: str, + task_id: str, + folder_entity: Optional[dict[str, Any]] = None, + task_entity: Optional[dict[str, Any]] = None, + ): + """Open passed filepath in the host with context. + + This function should be used to open workfile in different context. + + Notes: + Should this method care about context change? + + Args: + filepath (str): Path to workfile. + folder_id (str): Folder id. + task_id (str): Task id. + + """ + self.open_workfile(filepath) + + def list_workfiles( self, project_name: str, @@ -422,6 +473,7 @@ class IWorkfileHost: file_modified = filestat.st_mtime workfile_item = PublishedWorkfileInfo.new( + project_name, folder_id, task_id, repre_entity, @@ -436,6 +488,105 @@ class IWorkfileHost: return items + def copy_workfile( + self, + src_path: str, + dst_path: str, + folder_id: str, + task_id: str, + open_workfile: bool = False, + folder_entity: Optional[dict[str, Any]] = None, + task_entity: Optional[dict[str, Any]] = None, + ): + """Save workfile path with target folder and task context. + + It is expected that workfile is saved to current project, but can be + copied from other project. + + Args: + src_path (str): Path to the source scene. + dst_path (str): Where the scene should be saved. + folder_id (str): Folder id. + task_id (str): Task id. + open_workfile (bool): Open workfile when copied. + + """ + # TODO We might need option to open file once copied as some DCC might + # actually need to open the workfile to copy it. + dst_dir = os.path.dirname(dst_path) + if not os.path.exists(dst_dir): + os.makedirs(dst_dir, exist_ok=True) + shutil.copy(src_path, dst_path) + if open_workfile: + self.open_workfile_with_context( + dst_path, + folder_id, + task_id, + folder_entity=folder_entity, + task_entity=task_entity, + ) + + def copy_workfile_representation( + self, + src_project_name: str, + src_representation_id: str, + dst_path: str, + folder_id: str, + task_id: str, + open_workfile: bool = False, + anatomy: Optional[Anatomy] = None, + src_representation_entity: Optional[dict[str, Any]] = None, + src_representation_path: Optional[str] = None, + folder_entity: Optional[dict[str, Any]] = None, + task_entity: Optional[dict[str, Any]] = None, + ): + """Copy workfile representation. + + Use representation as source for the workfile. + + Args: + src_project_name (str): Project name. + src_representation_id (str): Representation id. + dst_path (str): Where the scene should be saved. + folder_id (str): Folder id. + task_id (str): Task id. + open_workfile (bool): Open workfile when copied. + anatomy (Optional[Anatomy]): Project anatomy. + src_representation_entity (Optional[dict[str, Any]]): Representation + entity. + src_representation_path (Optional[str]): Representation path. + + """ + # TODO We might need option to open file once copied as some DCC might + # actually need to open the workfile to copy it. + from ayon_core.pipeline import Anatomy + from ayon_core.pipeline.load import ( + get_representation_path_with_anatomy + ) + + if src_representation_path is None: + if src_representation_entity is None: + src_representation_entity = ayon_api.get_representation_by_id( + src_project_name, src_representation_id + ) + + if anatomy is None: + anatomy = Anatomy(src_project_name) + src_representation_path = get_representation_path_with_anatomy( + src_representation_entity, + anatomy, + ) + + self.copy_workfile( + src_representation_path, + dst_path, + folder_id, + task_id, + open_workfile=open_workfile, + folder_entity=folder_entity, + task_entity=task_entity, + ) + # --- Deprecated method names --- def file_extensions(self): """Deprecated variant of 'get_workfile_extensions'. From 29d824decfca2a5ee295dbc47c76203de7b8bebd Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 16 May 2025 10:25:18 +0200 Subject: [PATCH 065/595] modified change current context function --- client/ayon_core/pipeline/context_tools.py | 47 +++++++++++++++++----- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/client/ayon_core/pipeline/context_tools.py b/client/ayon_core/pipeline/context_tools.py index 66556bbb35..0c6e86ef4b 100644 --- a/client/ayon_core/pipeline/context_tools.py +++ b/client/ayon_core/pipeline/context_tools.py @@ -10,7 +10,7 @@ import pyblish.api from pyblish.lib import MessageHandler from ayon_core import AYON_CORE_ROOT -from ayon_core.host import HostBase +from ayon_core.host import HostBase, IWorkfileHost from ayon_core.lib import ( is_in_tests, initialize_ayon_connection, @@ -505,37 +505,64 @@ def get_current_context_custom_workfile_template(project_settings=None): ) -def change_current_context(folder_entity, task_entity, template_key=None): +def change_current_context( + folder_entity, + task_entity, + template_key=None, + workdir=None, + anatomy=None, + project_entity=None, + project_settings=None, +): """Update active Session to a new task work area. This updates the live Session to a different task under folder. + Notes: + This function does a lot of things related to workfiles which + extends arguments options a lot. + We might want to implement 'set_current_context' on host integration + instead. But `AYON_WORKDIR`, which is related to 'IWorkfileHost', + would not be available in that case which might be break some + logic. + Args: folder_entity (Dict[str, Any]): Folder entity to set. task_entity (Dict[str, Any]): Task entity to set. - template_key (Union[str, None]): Prepared template key to be used for + template_key (Optional[str]): Prepared template key to be used for workfile template in Anatomy. + workdir (Optional[str]): Workdir to set. + anatomy (Optional[Anatomy]): Anatomy object used for workdir + calculation. + project_entity (Optional[dict[str, Any]]): Project entity used for + workdir calculation. + project_settings (Optional[dict[str, Any]]): Project settings used for + workdir calculation. Returns: Dict[str, str]: The changed key, values in the current Session. - """ - project_name = get_current_project_name() - workdir = None + """ + host = registered_host() + project_name = host.get_current_project_name() folder_path = None task_name = None if folder_entity: folder_path = folder_entity["path"] if task_entity: task_name = task_entity["name"] - project_entity = ayon_api.get_project(project_name) - host_name = get_current_host_name() + + if isinstance(host, IWorkfileHost) and workdir is None and folder_entity: + if project_entity is None: + project_entity = ayon_api.get_project(project_name) workdir = get_workdir( project_entity, folder_entity, task_entity, - host_name, - template_key=template_key + host.name, + anatomy=anatomy, + template_key=template_key, + project_settings=project_settings, ) envs = { From f4638b92cd9bea6ef3c9a243adda202b9741196d Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 16 May 2025 10:25:31 +0200 Subject: [PATCH 066/595] implemented utils functions for workfiles --- .../ayon_core/pipeline/workfile/__init__.py | 10 + client/ayon_core/pipeline/workfile/utils.py | 646 +++++++++++++++++- 2 files changed, 655 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/__init__.py b/client/ayon_core/pipeline/workfile/__init__.py index 5b8a10c288..cc081d676b 100644 --- a/client/ayon_core/pipeline/workfile/__init__.py +++ b/client/ayon_core/pipeline/workfile/__init__.py @@ -21,6 +21,11 @@ from .utils import ( should_use_last_workfile_on_launch, should_open_workfiles_tool_on_launch, MissingWorkdirError, + + open_workfile, + save_current_workfile_to, + copy_and_open_workfile, + copy_and_open_workfile_representation, ) from .build_workfile import BuildWorkfile @@ -57,6 +62,11 @@ __all__ = ( "should_open_workfiles_tool_on_launch", "MissingWorkdirError", + "open_workfile", + "save_current_workfile_to", + "copy_and_open_workfile", + "copy_and_open_workfile_representation", + "BuildWorkfile", "discover_workfile_build_plugins", diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 25be061dec..44c811d5e2 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -1,6 +1,24 @@ -from ayon_core.lib import filter_profiles +from __future__ import annotations +import os +import platform +import uuid +import typing +from typing import Optional, Any + +import ayon_api +from ayon_api.operations import OperationsSession + +from ayon_core.lib import filter_profiles, emit_event, get_ayon_username from ayon_core.settings import get_project_settings +from .path_resolving import ( + create_workdir_extra_folders, + get_workfile_template_key, +) + +if typing.TYPE_CHECKING: + from ayon_core.pipeline import Anatomy + class MissingWorkdirError(Exception): """Raised when accessing a work directory not found on disk.""" @@ -124,3 +142,629 @@ def should_open_workfiles_tool_on_launch( if output is None: return default_output return output + + +def _get_event_context_data( + project_name: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + host_name: str, +): + return { + "project_name": project_name, + "folder_id": folder_entity["id"], + "folder_path": folder_entity["path"], + "task_id": task_entity["id"], + "task_name": task_entity["name"], + "host_name": host_name, + } + + +def save_workfile_info( + project_name: str, + task_id: str, + rootless_path: str, + host_name: str, + version: Optional[int], + comment: Optional[str], + description: Optional[str], + username: Optional[str] = None, + workfile_entities: Optional[list[dict[str, Any]]] = None, +): + # TODO create pipeline function for this + if workfile_entities is None: + workfile_entities = list(ayon_api.get_workfiles_info( + project_name, + task_ids=[task_id], + )) + + workfile_entity = next( + ( + _ent + for _ent in workfile_entities + if _ent["path"] == rootless_path + ), + None + ) + + if username is None: + username = get_ayon_username() + + if not workfile_entity: + return _create_workfile_info_entity( + project_name, + task_id, + host_name, + rootless_path, + username, + version, + comment, + description, + ) + + data = {} + for key, value in ( + ("host_name", host_name), + ("version", version), + ("comment", comment), + ): + if value is not None: + data[key] = value + + old_data = workfile_entity["data"] + + changed_data = {} + for key, value in data.items(): + if key not in old_data or old_data[key] != value: + changed_data[key] = value + + update_data = {} + if changed_data: + update_data["data"] = changed_data + + old_description = workfile_entity["attrib"].get("description") + if description is not None and old_description != description: + update_data["attrib"] = {"description": description} + workfile_entity["attrib"]["description"] = description + + # Automatically fix 'createdBy' and 'updatedBy' fields + # NOTE both fields were not automatically filled by server + # until 1.1.3 release. + if workfile_entity.get("createdBy") is None: + update_data["createdBy"] = username + workfile_entity["createdBy"] = username + + if workfile_entity.get("updatedBy") != username: + update_data["updatedBy"] = username + workfile_entity["updatedBy"] = username + + if not update_data: + return + + session = OperationsSession() + session.update_entity( + project_name, + "workfile", + workfile_entity["id"], + update_data, + ) + session.commit() + return workfile_entity + + +def open_workfile( + filepath: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], +): + from ayon_core.pipeline.context_tools import ( + registered_host, change_current_context + ) + + # Trigger before save event + host = registered_host() + context = host.get_current_context() + project_name = context["project_name"] + current_folder_path = context["folder_path"] + current_task_name = context["task_name"] + host_name = host.name + + # TODO move to workfiles pipeline + event_data = _get_event_context_data( + project_name, folder_entity, task_entity, host_name + ) + event_data["filepath"] = filepath + + emit_event("workfile.open.before", event_data, source="workfiles.tool") + + # Change context + if ( + folder_entity["path"] != current_folder_path + or task_entity["name"] != current_task_name + ): + change_current_context( + project_name, + folder_entity, + task_entity, + workdir=os.path.dirname(filepath) + ) + + host.open_workfile(filepath) + + emit_event("workfile.open.after", event_data, source="workfiles.tool") + + +def save_current_workfile_to( + workfile_path: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + version: Optional[int], + comment: Optional[str] = None, + description: Optional[str] = None, + source: Optional[str] = None, + rootless_path: Optional[str] = None, + workfile_entities: Optional[list[dict[str, Any]]] = None, + username: Optional[str] = None, + project_entity: Optional[dict[str, Any]] = None, + project_settings: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, +) -> dict[str, Any]: + """Save current workfile to new location or context. + + Args: + workfile_path (str): Destination workfile path. + folder_entity (dict[str, Any]): Target folder entity. + task_entity (dict[str, Any]): Target task entity. + version (Optional[int]): Workfile version. + comment (optional[str]): Workfile comment. + description (Optional[str]): Workfile description. + source (Optional[str]): Source of the save action. + rootless_path (Optional[str]): Rootless path of the workfile. Is + calculated if not passed in. + workfile_entities (Optional[list[dict[str, Any]]]): List of workfile + username (Optional[str]): Username of the user saving the workfile. + Current user is used if not passed. + project_entity (Optional[dict[str, Any]]): Project entity used for + rootless path calculation. + project_settings (Optional[dict[str, Any]]): Project settings used for + rootless path calculation. + anatomy (Optional[Anatomy]): Project anatomy used for rootless + path calculation. + + Returns: + dict[str, Any]: Workfile info entity. + + """ + print("save_current_workfile_to") + return _save_workfile( + None, + None, + None, + None, + workfile_path, + folder_entity, + task_entity, + version, + comment, + description, + source, + rootless_path, + workfile_entities, + username, + project_entity, + project_settings, + anatomy, + ) + + +def copy_and_open_workfile( + src_workfile_path: str, + workfile_path: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + version: Optional[int], + comment: Optional[str] = None, + description: Optional[str] = None, + source: Optional[str] = None, + rootless_path: Optional[str] = None, + workfile_entities: Optional[list[dict[str, Any]]] = None, + username: Optional[str] = None, + project_entity: Optional[dict[str, Any]] = None, + project_settings: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, +) -> dict[str, Any]: + """Copy workfile to new location and open it. + + Args: + src_workfile_path (str): Source workfile path. + workfile_path (str): Destination workfile path. + folder_entity (dict[str, Any]): Target folder entity. + task_entity (dict[str, Any]): Target task entity. + version (Optional[int]): Workfile version. + comment (optional[str]): Workfile comment. + description (Optional[str]): Workfile description. + source (Optional[str]): Source of the save action. + rootless_path (Optional[str]): Rootless path of the workfile. Is + calculated if not passed in. + workfile_entities (Optional[list[dict[str, Any]]]): List of workfile + username (Optional[str]): Username of the user saving the workfile. + Current user is used if not passed. + project_entity (Optional[dict[str, Any]]): Project entity used for + rootless path calculation. + project_settings (Optional[dict[str, Any]]): Project settings used for + rootless path calculation. + anatomy (Optional[Anatomy]): Project anatomy used for rootless + path calculation. + + Returns: + dict[str, Any]: Workfile info entity. + + """ + print("copy_and_open_workfile") + return _save_workfile( + src_workfile_path, + None, + None, + None, + workfile_path, + folder_entity, + task_entity, + version, + comment, + description, + source, + rootless_path, + workfile_entities, + username, + project_entity, + project_settings, + anatomy, + ) + + +def copy_and_open_workfile_representation( + project_name: str, + representation_id: str, + workfile_path: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + version: Optional[int], + comment: Optional[str] = None, + description: Optional[str] = None, + source: Optional[str] = None, + rootless_path: Optional[str] = None, + representation_entity: Optional[dict[str, Any]] = None, + representation_path: Optional[str] = None, + workfile_entities: Optional[list[dict[str, Any]]] = None, + username: Optional[str] = None, + project_entity: Optional[dict[str, Any]] = None, + project_settings: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, +) -> dict[str, Any]: + """Copy workfile to new location and open it. + + Args: + project_name (str): Project name where representation is stored. + representation_id (str): Source representation id. + workfile_path (str): Destination workfile path. + folder_entity (dict[str, Any]): Target folder entity. + task_entity (dict[str, Any]): Target task entity. + version (Optional[int]): Workfile version. + comment (optional[str]): Workfile comment. + description (Optional[str]): Workfile description. + source (Optional[str]): Source of the save action. + rootless_path (Optional[str]): Rootless path of the workfile. Is + calculated if not passed in. + workfile_entities (Optional[list[dict[str, Any]]]): List of workfile + username (Optional[str]): Username of the user saving the workfile. + Current user is used if not passed. + project_entity (Optional[dict[str, Any]]): Project entity used for + rootless path calculation. + project_settings (Optional[dict[str, Any]]): Project settings used for + rootless path calculation. + anatomy (Optional[Anatomy]): Project anatomy used for rootless + path calculation. + + Returns: + dict[str, Any]: Workfile info entity. + + """ + print("copy_and_open_workfile_representation") + if representation_entity is None: + representation_entity = ayon_api.get_representation_by_id( + project_name, + representation_id, + ) + + return _save_workfile( + None, + project_name, + representation_entity, + representation_path, + workfile_path, + folder_entity, + task_entity, + version, + comment, + description, + source, + rootless_path, + workfile_entities, + username, + project_entity, + project_settings, + anatomy, + ) + + +def _save_workfile( + src_workfile_path: Optional[str], + representation_project_name: Optional[str], + representation_entity: Optional[dict[str, Any]], + representation_path: Optional[str], + workfile_path: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + version: Optional[int], + comment: Optional[str], + description: Optional[str], + source: Optional[str], + rootless_path: Optional[str], + workfile_entities: Optional[list[dict[str, Any]]], + username: Optional[str], + project_entity: Optional[dict[str, Any]], + project_settings: Optional[dict[str, Any]], + anatomy: Optional["Anatomy"], +) -> dict[str, Any]: + """Function used to save workfile to new location and context. + + Because the functionality for 'save_current_workfile_to' and + 'copy_and_open_workfile' is currently the same, except for used + function on host it is easier to create this wrapper function. + + Args: + src_workfile_path (Optional[str]): Source workfile path. + representation_entity (Optional[dict[str, Any]]): Representation used + as source for workfile. + workfile_path (str): Destination workfile path. + folder_entity (dict[str, Any]): Target folder entity. + task_entity (dict[str, Any]): Target task entity. + version (Optional[int]): Workfile version. + comment (optional[str]): Workfile comment. + description (Optional[str]): Workfile description. + source (Optional[str]): Source of the save action. + rootless_path (Optional[str]): Rootless path of the workfile. Is + calculated if not passed in. + workfile_entities (Optional[list[dict[str, Any]]]): List of workfile + username (Optional[str]): Username of the user saving the workfile. + Current user is used if not passed. + project_entity (Optional[dict[str, Any]]): Project entity used for + rootless path calculation. + project_settings (Optional[dict[str, Any]]): Project settings used for + rootless path calculation. + anatomy (Optional[Anatomy]): Project anatomy used for rootless + path calculation. + + Returns: + dict[str, Any]: Workfile info entity. + + """ + from ayon_core.pipeline.context_tools import ( + registered_host, change_current_context + ) + + # Trigger before save event + host = registered_host() + context = host.get_current_context() + project_name = context["project_name"] + current_folder_path = context["folder_path"] + current_task_name = context["task_name"] + + folder_id = folder_entity["id"] + task_name = task_entity["name"] + task_type = task_entity["taskType"] + task_id = task_entity["id"] + host_name = host.name + + workdir, filename = os.path.split(workfile_path) + + # QUESTION should the data be different for 'before' and 'after'? + event_data = _get_event_context_data( + project_name, folder_entity, task_entity, host_name + ) + event_data.update({ + "filename": filename, + "workdir_path": workdir, + }) + + emit_event("workfile.save.before", event_data, source=source) + + # Change context + if ( + folder_entity["path"] != current_folder_path + or task_entity["name"] != current_task_name + ): + change_current_context( + folder_entity, + task_entity, + workdir=workdir, + anatomy=anatomy, + project_entity=project_entity, + project_settings=project_settings, + ) + + if src_workfile_path: + host.copy_workfile( + src_workfile_path, + workfile_path, + folder_id, + task_id, + open_workfile=True, + dst_folder_entity=folder_entity, + dst_task_entity=task_entity, + ) + elif representation_entity: + host.copy_workfile_representation( + representation_project_name, + representation_entity["id"], + workfile_path, + folder_id, + task_id, + open_workfile=True, + folder_entity=folder_entity, + task_entity=task_entity, + src_representation_entity=representation_entity, + src_representation_path=representation_path, + anatomy=anatomy, + ) + else: + host.save_workfile_with_context( + workfile_path, + folder_id, + task_id, + open_workfile=True, + folder_entity=folder_entity, + task_entity=task_entity, + ) + + if not description: + description = None + + if not comment: + comment = None + + if rootless_path is None: + rootless_path = _find_rootless_path( + workfile_path, + project_name, + task_type, + host_name, + project_entity, + project_settings, + anatomy, + ) + + # It is not possible to create workfile infor without rootless path + workfile_info = None + if rootless_path: + if platform.system().lower() == "windows": + rootless_path = rootless_path.replace("\\", "/") + + workfile_info = save_workfile_info( + project_name, + task_id, + rootless_path, + host_name, + version, + comment, + description, + username=username, + workfile_entities=workfile_entities, + ) + + # Create extra folders + create_workdir_extra_folders( + workdir, + host.name, + task_entity["taskType"], + task_name, + project_name + ) + + # Trigger after save events + emit_event("workfile.save.after", event_data, source=source) + return workfile_info + + +def _find_rootless_path( + workfile_path: str, + project_name: str, + task_type: str, + host_name: str, + project_entity: Optional[dict[str, Any]] = None, + project_settings: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, +) -> str: + """Find rootless workfile path.""" + if anatomy is None: + from ayon_core.pipeline import Anatomy + + anatomy = Anatomy(project_name, project_entity=project_entity) + template_key = get_workfile_template_key( + project_name, + task_type, + host_name, + project_settings=project_settings + ) + dir_template = anatomy.get_template_item( + "work", template_key, "directory" + ) + result = dir_template.format({"root": anatomy.roots}) + used_root = result.used_values.get("root") + rootless_path = str(workfile_path) + if platform.system().lower() == "windows": + rootless_path = rootless_path.replace("\\", "/") + + root_key = root_value = None + if used_root is not None: + root_key, root_value = next(iter(used_root.items())) + if platform.system().lower() == "windows": + root_value = root_value.replace("\\", "/") + + if root_value and rootless_path.startswith(root_value): + rootless_path = rootless_path[len(root_value):].lstrip("/") + rootless_path = f"{{root[{root_key}]}}/{rootless_path}" + else: + success, result = anatomy.find_root_template_from_path(rootless_path) + if success: + rootless_path = result + return rootless_path + + +def _create_workfile_info_entity( + project_name: str, + task_id: str, + host_name: str, + rootless_path: str, + username: str, + version: Optional[int], + comment: Optional[str], + description: Optional[str], +) -> dict[str, Any]: + extension = os.path.splitext(rootless_path)[1] + + attrib = {} + for key, value in ( + ("extension", extension), + ("description", description), + ): + if value is not None: + attrib[key] = value + + data = {} + for key, value in ( + ("host_name", host_name), + ("version", version), + ("comment", comment), + ): + if value is not None: + data[key] = value + + workfile_info = { + "id": uuid.uuid4().hex, + "path": rootless_path, + "taskId": task_id, + "attrib": attrib, + "data": data, + # TODO remove 'createdBy' and 'updatedBy' fields when server is + # or above 1.1.3 . + "createdBy": username, + "updatedBy": username, + } + + session = OperationsSession() + session.create_entity( + project_name, "workfile", workfile_info + ) + session.commit() + return workfile_info \ No newline at end of file From 639087937f025edc3cf47205df22abdc47bbfd53 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 16 May 2025 10:26:01 +0200 Subject: [PATCH 067/595] modified workfiles tool accordingly --- client/ayon_core/tools/workfiles/abstract.py | 20 +- client/ayon_core/tools/workfiles/control.py | 21 +- .../tools/workfiles/models/workfiles.py | 343 ++++++++++-------- .../tools/workfiles/widgets/files_widget.py | 9 +- 4 files changed, 235 insertions(+), 158 deletions(-) diff --git a/client/ayon_core/tools/workfiles/abstract.py b/client/ayon_core/tools/workfiles/abstract.py index 6d7d0b4c0e..863d6bb9bc 100644 --- a/client/ayon_core/tools/workfiles/abstract.py +++ b/client/ayon_core/tools/workfiles/abstract.py @@ -866,8 +866,8 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): folder_id, task_id, rootless_workdir, + workdir, filename, - template_key, version, comment, description, @@ -897,7 +897,7 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): task_id, workdir, filename, - template_key, + rootless_workdir, version, comment, description, @@ -914,7 +914,7 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): task_id (str): Task id. workdir (str): Workarea directory. filename (str): Workarea filename. - template_key (str): Template key. + rootless_workdir (str): Rootless workdir. version (int): Workfile version. comment (str): User's comment (subversion). description (str): Description note. @@ -924,14 +924,26 @@ class AbstractWorkfilesFrontend(AbstractWorkfilesCommon): @abstractmethod def duplicate_workfile( - self, src_filepath, workdir, filename, description, version, comment + self, + folder_id, + task_id, + src_filepath, + rootless_workdir, + workdir, + filename, + description, + version, + comment ): """Duplicate workfile. Workfiles is not opened when done. Args: + folder_id (str): Folder id. + task_id (str): Task id. src_filepath (str): Source workfile path. + rootless_workdir (str): Rootless workdir. workdir (str): Destination workdir. filename (str): Destination filename. version (int): Workfile version. diff --git a/client/ayon_core/tools/workfiles/control.py b/client/ayon_core/tools/workfiles/control.py index f5df9f83ce..faab199c9f 100644 --- a/client/ayon_core/tools/workfiles/control.py +++ b/client/ayon_core/tools/workfiles/control.py @@ -523,8 +523,8 @@ class BaseWorkfileController( folder_id, task_id, rootless_workdir, + workdir, filename, - template_key, version, comment, description, @@ -534,7 +534,6 @@ class BaseWorkfileController( task_id, rootless_workdir, filename, - template_key, version, comment, description, @@ -548,7 +547,7 @@ class BaseWorkfileController( task_id, workdir, filename, - template_key, + rootless_workdir, version, comment, description, @@ -560,17 +559,29 @@ class BaseWorkfileController( task_id, workdir, filename, - template_key, + rootless_workdir, version, comment, description, ) def duplicate_workfile( - self, src_filepath, workdir, filename, version, comment, description + self, + folder_id, + task_id, + src_filepath, + rootless_workdir, + workdir, + filename, + version, + comment, + description ): self._workfiles_model.duplicate_workfile( + folder_id, + task_id, src_filepath, + rootless_workdir, workdir, filename, version, diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 6508f693dd..d9a217653e 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -14,7 +14,6 @@ from ayon_core.lib import ( get_ayon_username, NestedCacheItem, CacheItem, - emit_event, Logger, ) from ayon_core.host import ( @@ -33,10 +32,12 @@ from ayon_core.pipeline.workfile import ( get_workfile_template_key, get_last_workfile_with_version_from_paths, get_comments_from_workfile_paths, - create_workdir_extra_folders, + open_workfile, + save_current_workfile_to, + copy_and_open_workfile, + copy_and_open_workfile_representation, ) from ayon_core.pipeline.version_start import get_versioning_start -from ayon_core.pipeline.context_tools import change_current_context from ayon_core.tools.workfiles.abstract import ( WorkareaFilepathResult, AbstractWorkfilesBackend, @@ -81,6 +82,12 @@ class WorkfilesModel: levels=1, default_factory=list ) + # Published workfiles + self._repre_by_id = {} + self._published_workfile_items_cache = NestedCacheItem( + levels=1, default_factory=list + ) + # Entities self._workfile_entities_by_task_id = {} @@ -92,6 +99,9 @@ class WorkfilesModel: self._workarea_file_items_mapping = {} self._workarea_file_items_cache.reset() + self._repre_by_id = {} + self._published_workfile_items_cache.reset() + self._workfile_entities_by_task_id = {} # Host functionality @@ -123,26 +133,50 @@ class WorkfilesModel: folder_id, task_id, rootless_workdir, + workdir, filename, - template_key, version, comment, description, ): self._emit_event("save_as.started") + filepath = os.path.join(workdir, filename) + rootless_path = f"{rootless_workdir}/{filename}" + project_name = self._controller.get_current_project_name() + folder_entity = self._controller.get_folder_entity( + project_name, folder_id + ) + task_entity = self._controller.get_task_entity( + project_name, task_id + ) + workfile_entities = self.get_workfile_entities(task_id) failed = False try: - self._save_as_workfile( - folder_id, - task_id, - rootless_workdir, - filename, - template_key, + workfile_info = save_current_workfile_to( + filepath, + folder_entity, + task_entity, version, comment, description, + source="workfiles.tool", + rootless_path=rootless_path, + workfile_entities=workfile_entities, + username=self._get_current_username(), + project_entity=self._controller.get_project_entity( + project_name + ), + project_settings=self._controller.project_settings, + anatomy=self._controller.project_anatomy, ) + self._update_workfile_info( + task_id, rootless_path, description, workfile_info + ) + self._update_current_context( + folder_id, folder_entity["path"], task_entity["name"] + ) + except Exception: failed = True self._log.warning("Save as failed", exc_info=True) @@ -160,27 +194,53 @@ class WorkfilesModel: task_id, workdir, filename, - template_key, + rootless_workdir, version, comment, description, ): - # TODO move to workfiles pipeline self._emit_event("copy_representation.started") + project_name = self._project_name + folder_entity = self._controller.get_folder_entity( + self._project_name, folder_id + ) + task_entity = self._controller.get_task_entity( + self._project_name, task_id + ) + repre_entity = self._repre_by_id.get(representation_id) + dst_filepath = os.path.join(workdir, filename) + rootless_path = f"{rootless_workdir}/{filename}" + failed = False try: - self._save_as_workfile( - folder_id, - task_id, - workdir, - filename, - template_key, - version, - comment, - description, - src_filepath=representation_filepath + workfile_info = copy_and_open_workfile_representation( + project_name, + representation_id, + dst_filepath, + folder_entity, + task_entity, + version=version, + comment=comment, + description=description, + rootless_path=rootless_path, + representation_entity=repre_entity, + representation_path=representation_filepath, + workfile_entities=self.get_workfile_entities(task_id), + username=self._get_current_username(), + project_entity=self._controller.get_project_entity( + project_name + ), + project_settings=self._controller.project_settings, + anatomy=self._controller.project_anatomy, ) + self._update_workfile_info( + task_id, rootless_path, description, workfile_info + ) + self._update_current_context( + folder_id, folder_entity["path"], task_entity["name"] + ) + except Exception: failed = True self._log.warning( @@ -193,15 +253,47 @@ class WorkfilesModel: ) def duplicate_workfile( - self, src_filepath, workdir, filename, version, comment, description + self, + folder_id, + task_id, + src_filepath, + rootless_workdir, + workdir, + filename, + version, + comment, + description ): - # TODO save workfile information self._emit_event("workfile_duplicate.started") + project_name = self._controller.get_current_project_name() + project_entity = self._controller.get_project_entity(project_name) + folder_entity = self._controller.get_folder_entity( + project_name, folder_id + ) + task_entity = self._controller.get_task_entity(project_name, task_id) + workfile_entities = self.get_workfile_entities(task_id) + rootless_path = f"{rootless_workdir}/{filename}" + workfile_path = os.path.join(workdir, filename) failed = False try: - dst_filepath = os.path.join(workdir, filename) - shutil.copy(src_filepath, dst_filepath) + copy_and_open_workfile( + src_filepath, + workfile_path, + folder_entity, + task_entity, + version, + comment, + description, + source="workfiles.tool", + rootless_path=rootless_path, + workfile_entities=workfile_entities, + username=self._get_current_username(), + project_entity=project_entity, + project_settings=self._controller.project_settings, + anatomy=self._controller.project_anatomy, + ) + except Exception: failed = True self._log.warning("Duplication of workfile failed", exc_info=True) @@ -258,9 +350,6 @@ class WorkfilesModel: task_id, rootless_path, description ) - def reset_workarea_file_items(self, task_id: str): - self._reset_workarea_file_items(task_id) - def get_workarea_dir_by_context( self, folder_id: str, task_id: str ) -> Optional[str]: @@ -480,13 +569,51 @@ class WorkfilesModel: list[PublishedWorkfileInfo]: List of files for published workfiles. """ - project_name = self._project_name - anatomy = self._controller.project_anatomy - items = self._host.list_published_workfiles( - project_name, - folder_id, - anatomy, - ) + if not folder_id: + return [] + + cache = self._published_workfile_items_cache[folder_id] + if not cache.is_valid: + project_name = self._project_name + anatomy = self._controller.project_anatomy + + product_entities = ayon_api.get_products( + project_name, + folder_ids={folder_id}, + product_types={"workfile"}, + fields={"id", "name"} + ) + + version_entities = [] + product_ids = {product["id"] for product in product_entities} + if product_ids: + # Get version docs of products with their families + version_entities = list(ayon_api.get_versions( + project_name, + product_ids=product_ids, + fields={"id", "author", "taskId"}, + )) + + repre_entities = [] + if version_entities: + repre_entities = list(ayon_api.get_representations( + project_name, + version_ids={v["id"] for v in version_entities} + )) + + self._repre_by_id.update({ + repre_entity["id"]: repre_entity + for repre_entity in repre_entities + }) + + cache.update_data(self._host.list_published_workfiles( + project_name, + folder_id, + anatomy, + )) + + items = cache.get_data() + if task_id: items = [ item @@ -540,121 +667,21 @@ class WorkfilesModel: def _open_workfile(self, folder_id: str, task_id: str, filepath: str): # TODO move to workfiles pipeline project_name = self._project_name - event_data = self._get_event_context_data( - project_name, folder_id, task_id - ) - event_data["filepath"] = filepath - - emit_event("workfile.open.before", event_data, source="workfiles.tool") - - # Change context - task_name = event_data["task_name"] - if ( - folder_id != self._controller.get_current_folder_id() - or task_name != self._controller.get_current_task_name() - ): - self._change_current_context(project_name, folder_id, task_id) - - self._host.open_workfile(filepath) - - emit_event("workfile.open.after", event_data, source="workfiles.tool") - - def _save_as_workfile( - self, - folder_id: str, - task_id: str, - rootless_workdir: str, - filename: str, - template_key: str, - version: Optional[int], - comment: Optional[str], - description: Optional[str], - src_filepath=None, - ): - # TODO move to workfiles pipeline - # Trigger before save event - project_name = self._project_name - folder = self._controller.get_folder_entity(project_name, folder_id) - task = self._controller.get_task_entity(project_name, task_id) - task_name = task["name"] - - workdir = self._controller.project_anatomy.fill_root(rootless_workdir) - - # QUESTION should the data be different for 'before' and 'after'? - event_data = self._get_event_context_data( - project_name, folder_id, task_id, folder, task - ) - event_data.update({ - "filename": filename, - "workdir_path": workdir, - }) - - emit_event("workfile.save.before", event_data, source="workfiles.tool") - - # Create workfiles root folder - if not os.path.exists(workdir): - self._log.debug("Initializing work directory: %s", workdir) - os.makedirs(workdir) - - # Change context - if ( - folder_id != self._controller.get_current_folder_id() - or task_name != self._controller.get_current_task_name() - ): - self._change_current_context( - project_name, folder_id, task_id, template_key - ) - - # Save workfile - dst_filepath = os.path.join(workdir, filename) - if src_filepath: - shutil.copyfile(src_filepath, dst_filepath) - self._host.open_workfile(dst_filepath) - else: - self._host.save_workfile(dst_filepath) - - # Make sure workfile info exists - if not description: - description = None - if not comment: - comment = None - self.save_workfile_info( - task_id, - f"{rootless_workdir}/{filename}", - version, - comment, - description, - ) - self.reset_workarea_file_items(task_id) - - # Create extra folders - create_workdir_extra_folders( - workdir, - self._host_name, - task["taskType"], - task_name, - project_name - ) - - # Trigger after save events - emit_event("workfile.save.after", event_data, source="workfiles.tool") - - def _change_current_context( - self, project_name, folder_id, task_id, template_key=None - ): - # Change current context folder_entity = self._controller.get_folder_entity( project_name, folder_id ) - task_entity = self._controller.get_task_entity(project_name, task_id) - change_current_context( - folder_entity, - task_entity, - template_key=template_key + task_entity = self._controller.get_task_entity( + project_name, task_id ) - self._current_folder_id = folder_entity["id"] - self._current_folder_path = folder_entity["path"] - self._current_task_name = task_entity["name"] + open_workfile(filepath, folder_entity, task_entity) + self._update_current_context( + folder_id, folder_entity["path"], task_entity["name"] + ) + + def _update_current_context(self, folder_id, folder_path, task_name): + self._current_folder_id = folder_id + self._current_folder_path = folder_path + self._current_task_name = task_name # --- Workarea --- def _reset_workarea_file_items(self, task_id: str): @@ -820,6 +847,28 @@ class WorkfilesModel: ) return directory_template.format_strict(fill_data).normalized() + def _update_workfile_info( + self, + task_id: str, + rootless_path: str, + description: str, + workfile_entity: dict[str, Any], + ): + self._update_file_description(task_id, rootless_path, description) + workfile_entities = self.get_workfile_entities(task_id) + target_idx = None + for idx, workfile_entity in enumerate(workfile_entities): + if workfile_entity["path"] == rootless_path: + target_idx = idx + break + + if target_idx is None: + workfile_entities.append(workfile_entity) + else: + workfile_entities[target_idx] = workfile_entity + + self._reset_workarea_file_items(task_id) + def _update_file_description( self, task_id: str, rootless_path: str, description: str ): diff --git a/client/ayon_core/tools/workfiles/widgets/files_widget.py b/client/ayon_core/tools/workfiles/widgets/files_widget.py index d45e057192..012a12ab17 100644 --- a/client/ayon_core/tools/workfiles/widgets/files_widget.py +++ b/client/ayon_core/tools/workfiles/widgets/files_widget.py @@ -213,9 +213,14 @@ class FilesWidget(QtWidgets.QWidget): result = self._exec_save_as_dialog() if result is None: return + folder_id = self._selected_folder_id + task_id = self._selected_task_id self._controller.duplicate_workfile( + folder_id, + task_id, filepath, result["rootless_workdir"], + result["workdir"], result["filename"], version=result["version"], comment=result["comment"], @@ -265,8 +270,8 @@ class FilesWidget(QtWidgets.QWidget): result["folder_id"], result["task_id"], result["rootless_workdir"], + result["workdir"], result["filename"], - result["template_key"], version=result["version"], comment=result["comment"], description=result["description"] @@ -321,7 +326,7 @@ class FilesWidget(QtWidgets.QWidget): result["task_id"], result["workdir"], result["filename"], - result["template_key"], + result["rootless_workdir"], version=result["version"], comment=result["comment"], description=result["description"], From 723463d44ee578945aa35e6ba4ac17bb440dd590 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 16 May 2025 10:43:02 +0200 Subject: [PATCH 068/595] use correct function --- client/ayon_core/pipeline/workfile/utils.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 44c811d5e2..94f4528205 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -289,7 +289,13 @@ def open_workfile( workdir=os.path.dirname(filepath) ) - host.open_workfile(filepath) + host.open_workfile_with_context( + filepath, + folder_entity["id"], + task_entity["id"], + folder_entity, + task_entity, + ) emit_event("workfile.open.after", event_data, source="workfiles.tool") From a37c074771b5dea0937496023629ad87a7da8be5 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 19 May 2025 10:35:59 +0200 Subject: [PATCH 069/595] expect entities instead of ids --- client/ayon_core/host/interfaces/workfiles.py | 80 ++++++------------- client/ayon_core/pipeline/workfile/utils.py | 23 ++---- .../tools/workfiles/models/workfiles.py | 6 +- 3 files changed, 35 insertions(+), 74 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 970e31bc88..de4c096237 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -212,10 +212,8 @@ class IWorkfileHost: def save_workfile_with_context( self, filepath: str, - folder_id: str, - task_id: str, - folder_entity: Optional[dict[str, Any]] = None, - task_entity: Optional[dict[str, Any]] = None, + folder_entity: dict[str, Any] = None, + task_entity: dict[str, Any] = None, ): """Save current workfile with context. @@ -224,8 +222,8 @@ class IWorkfileHost: Args: filepath (str): Where the current scene should be saved. - folder_id (str): Folder id. - task_id (str): Task id. + folder_entity (dict[str, Any]): Folder entity. + task_entity (dict[str, Any]): Task entity. """ self.save_workfile(filepath) @@ -233,10 +231,8 @@ class IWorkfileHost: def open_workfile_with_context( self, filepath: str, - folder_id: str, - task_id: str, - folder_entity: Optional[dict[str, Any]] = None, - task_entity: Optional[dict[str, Any]] = None, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], ): """Open passed filepath in the host with context. @@ -257,11 +253,9 @@ class IWorkfileHost: def list_workfiles( self, project_name: str, - folder_id: str, - task_id: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], project_entity: Optional[dict[str, Any]] = None, - folder_entity: Optional[dict[str, Any]] = None, - task_entity: Optional[dict[str, Any]] = None, workfile_entities: Optional[list[dict[str, Any]]] = None, template_key: Optional[str] = None, project_settings: Optional[dict[str, Any]] = None, @@ -278,11 +272,9 @@ class IWorkfileHost: Args: project_name (str): Name of project. - folder_id (str): ID of folder. - task_id (str): ID of task. + folder_entity (dict[str, Any]): Folder entity. + task_entity (dict[str, Any]): Task entity. project_entity (Optional[dict[str, Any]]): Project entity. - folder_entity (Optional[dict[str, Any]]): Folder entity. - task_entity (Optional[dict[str, Any]]): Task entity. workfile_entities (Optional[list[dict[str, Any]]]): Workfile entities. template_key (Optional[str]): Template key. @@ -304,13 +296,8 @@ class IWorkfileHost: if project_entity is None: project_entity = ayon_api.get_project(project_name) - if folder_entity is None: - folder_entity = ayon_api.get_folder_by_id(project_name, folder_id) - - if task_entity is None: - task_entity = ayon_api.get_task_by_id(project_name, task_id) - if workfile_entities is None: + task_id = task_entity["id"] workfile_entities = list(ayon_api.get_workfiles_info( project_name, task_ids=[task_id] )) @@ -492,11 +479,9 @@ class IWorkfileHost: self, src_path: str, dst_path: str, - folder_id: str, - task_id: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], open_workfile: bool = False, - folder_entity: Optional[dict[str, Any]] = None, - task_entity: Optional[dict[str, Any]] = None, ): """Save workfile path with target folder and task context. @@ -506,8 +491,8 @@ class IWorkfileHost: Args: src_path (str): Path to the source scene. dst_path (str): Where the scene should be saved. - folder_id (str): Folder id. - task_id (str): Task id. + folder_entity (dict[str, Any]): Folder entity. + task_entity (dict[str, Any]): Task entity. open_workfile (bool): Open workfile when copied. """ @@ -520,25 +505,20 @@ class IWorkfileHost: if open_workfile: self.open_workfile_with_context( dst_path, - folder_id, - task_id, - folder_entity=folder_entity, - task_entity=task_entity, + folder_entity, + task_entity, ) def copy_workfile_representation( self, src_project_name: str, - src_representation_id: str, + src_representation_entity: dict[str, Any], dst_path: str, - folder_id: str, - task_id: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], open_workfile: bool = False, anatomy: Optional[Anatomy] = None, - src_representation_entity: Optional[dict[str, Any]] = None, src_representation_path: Optional[str] = None, - folder_entity: Optional[dict[str, Any]] = None, - task_entity: Optional[dict[str, Any]] = None, ): """Copy workfile representation. @@ -546,14 +526,13 @@ class IWorkfileHost: Args: src_project_name (str): Project name. - src_representation_id (str): Representation id. + src_representation_entity (dict[str, Any]): Representation + entity. dst_path (str): Where the scene should be saved. - folder_id (str): Folder id. - task_id (str): Task id. + folder_entity (dict[str, Any): Folder entity. + task_entity (dict[str, Any]): Task entity. open_workfile (bool): Open workfile when copied. anatomy (Optional[Anatomy]): Project anatomy. - src_representation_entity (Optional[dict[str, Any]]): Representation - entity. src_representation_path (Optional[str]): Representation path. """ @@ -565,11 +544,6 @@ class IWorkfileHost: ) if src_representation_path is None: - if src_representation_entity is None: - src_representation_entity = ayon_api.get_representation_by_id( - src_project_name, src_representation_id - ) - if anatomy is None: anatomy = Anatomy(src_project_name) src_representation_path = get_representation_path_with_anatomy( @@ -580,11 +554,9 @@ class IWorkfileHost: self.copy_workfile( src_representation_path, dst_path, - folder_id, - task_id, + folder_entity, + task_entity, open_workfile=open_workfile, - folder_entity=folder_entity, - task_entity=task_entity, ) # --- Deprecated method names --- diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 94f4528205..c5b6b16e2a 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -291,8 +291,6 @@ def open_workfile( host.open_workfile_with_context( filepath, - folder_entity["id"], - task_entity["id"], folder_entity, task_entity, ) @@ -603,34 +601,27 @@ def _save_workfile( host.copy_workfile( src_workfile_path, workfile_path, - folder_id, - task_id, + folder_entity, + task_entity, open_workfile=True, - dst_folder_entity=folder_entity, - dst_task_entity=task_entity, ) elif representation_entity: host.copy_workfile_representation( representation_project_name, - representation_entity["id"], + representation_entity, workfile_path, - folder_id, - task_id, + folder_entity, + task_entity, open_workfile=True, - folder_entity=folder_entity, - task_entity=task_entity, - src_representation_entity=representation_entity, src_representation_path=representation_path, anatomy=anatomy, ) else: host.save_workfile_with_context( workfile_path, - folder_id, - task_id, + folder_entity, + task_entity, open_workfile=True, - folder_entity=folder_entity, - task_entity=task_entity, ) if not description: diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index d9a217653e..d13bfa248f 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -770,11 +770,9 @@ class WorkfilesModel: items = self._host.list_workfiles( self._project_name, - folder_id, - task_id, + folder_entity, + task_entity, project_entity=project_entity, - folder_entity=folder_entity, - task_entity=task_entity, anatomy=anatomy, template_key=template_key, project_settings=project_settings, From 70f3c05d0793f9f04f8a5890cecbe8ea31a0b4e1 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 19 May 2025 10:45:49 +0200 Subject: [PATCH 070/595] linting fixes --- client/ayon_core/host/interfaces/workfiles.py | 5 ++--- client/ayon_core/pipeline/workfile/utils.py | 3 +-- client/ayon_core/tools/workfiles/control.py | 2 -- client/ayon_core/tools/workfiles/models/workfiles.py | 1 - client/ayon_core/tools/workfiles/widgets/side_panel.py | 4 +++- 5 files changed, 6 insertions(+), 9 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index de4c096237..f416d19aa0 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -243,13 +243,12 @@ class IWorkfileHost: Args: filepath (str): Path to workfile. - folder_id (str): Folder id. - task_id (str): Task id. + folder_entity (dict[str, Any]): Folder id. + task_entity (dict[str, Any]): Task id. """ self.open_workfile(filepath) - def list_workfiles( self, project_name: str, diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index c5b6b16e2a..a7a1436522 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -564,7 +564,6 @@ def _save_workfile( current_folder_path = context["folder_path"] current_task_name = context["task_name"] - folder_id = folder_entity["id"] task_name = task_entity["name"] task_type = task_entity["taskType"] task_id = task_entity["id"] @@ -764,4 +763,4 @@ def _create_workfile_info_entity( project_name, "workfile", workfile_info ) session.commit() - return workfile_info \ No newline at end of file + return workfile_info diff --git a/client/ayon_core/tools/workfiles/control.py b/client/ayon_core/tools/workfiles/control.py index faab199c9f..ab6b12e4f4 100644 --- a/client/ayon_core/tools/workfiles/control.py +++ b/client/ayon_core/tools/workfiles/control.py @@ -1,6 +1,4 @@ import os -import shutil -from typing import Optional import ayon_api diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index d13bfa248f..4f5fb9890d 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -4,7 +4,6 @@ import copy import uuid import platform import typing -import shutil from typing import Optional, Any import ayon_api diff --git a/client/ayon_core/tools/workfiles/widgets/side_panel.py b/client/ayon_core/tools/workfiles/widgets/side_panel.py index 2e146fddbe..b1b91d9721 100644 --- a/client/ayon_core/tools/workfiles/widgets/side_panel.py +++ b/client/ayon_core/tools/workfiles/widgets/side_panel.py @@ -48,7 +48,9 @@ class SidePanelWidget(QtWidgets.QWidget): description_widget = QtWidgets.QWidget(self) description_label = QtWidgets.QLabel("Artist note", description_widget) description_input = QtWidgets.QPlainTextEdit(description_widget) - btn_description_save = QtWidgets.QPushButton("Save note", description_widget) + btn_description_save = QtWidgets.QPushButton( + "Save note", description_widget + ) description_layout = QtWidgets.QVBoxLayout(description_widget) description_layout.setContentsMargins(0, 0, 0, 0) From dba8d78a2abc79583d64016c46b6aa5df13916bb Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Tue, 20 May 2025 10:53:37 +0200 Subject: [PATCH 071/595] Refactors color space conversion with oiiotool Consolidates color space conversion logic into a dedicated `oiiotool_transcode` function for better flexibility and clarity. This change introduces support for display/view transformations, enhancing the tool's ability to handle complex color management workflows. It also fixes issues with conflicting color space parameters and improves handling of source and target display/view configurations. --- client/ayon_core/lib/transcoding.py | 170 ++++++++++++++++-- .../publish/extract_color_transcode.py | 42 +++-- .../plugins/publish/extract_thumbnail.py | 10 +- 3 files changed, 184 insertions(+), 38 deletions(-) diff --git a/client/ayon_core/lib/transcoding.py b/client/ayon_core/lib/transcoding.py index 8c84e1c4dc..6648f5219e 100644 --- a/client/ayon_core/lib/transcoding.py +++ b/client/ayon_core/lib/transcoding.py @@ -977,7 +977,60 @@ def convert_colorspace( additional_command_args=None, logger=None, ): - """Convert source file from one color space to another. + """Backward compatibility function for convert_colorspace. + + Args: + input_path (str): Path to input file that should be converted. + output_path (str): Path to output file where result will be stored. + config_path (str): Path to OCIO config file. + source_colorspace (str): OCIO valid color space of source files. + target_colorspace (str, optional): OCIO valid target color space. + If filled, 'view' and 'display' must be empty. + view (str, optional): Name for target viewer space (OCIO valid). + Both 'view' and 'display' must be filled (if not 'target_colorspace'). + display (str, optional): Name for target display-referred reference space. + Both 'view' and 'display' must be filled (if not 'target_colorspace'). + additional_command_args (list, optional): Additional arguments for oiiotool + (like binary depth for .dpx). + logger (logging.Logger, optional): Logger used for logging. + + Returns: + None: Function returns None. + + Raises: + ValueError: If parameters are misconfigured. + """ + return oiiotool_transcode( + input_path, + output_path, + config_path, + source_colorspace, + target_colorspace=target_colorspace, + target_display=display, + target_view=view, + additional_command_args=additional_command_args, + logger=logger, + ) + + +def oiiotool_transcode( + input_path, + output_path, + config_path, + source_colorspace, + source_display=None, + source_view=None, + target_colorspace=None, + target_display=None, + target_view=None, + additional_command_args=None, + logger=None, +): + """Transcode source file to other with colormanagement. + + Oiiotool also support additional arguments for transcoding. + For more information, see the official documentation: + https://openimageio.readthedocs.io/en/latest/oiiotool.html Args: input_path (str): Path that should be converted. It is expected that @@ -989,17 +1042,26 @@ def convert_colorspace( sequence in 'file.FRAMESTART-FRAMEEND#.ext', `output.1-3#.tif`) config_path (str): path to OCIO config file source_colorspace (str): ocio valid color space of source files + source_display (str, optional): name for source display-referred + reference space (ocio valid). If provided, source_view must also be + provided, and source_colorspace will be ignored + source_view (str, optional): name for source viewer space (ocio valid) + If provided, source_display must also be provided, and + source_colorspace will be ignored target_colorspace (str): ocio valid target color space if filled, 'view' and 'display' must be empty - view (str): name for viewer space (ocio valid) - both 'view' and 'display' must be filled (if 'target_colorspace') - display (str): name for display-referred reference space (ocio valid) + target_display (str): name for target display-referred reference space + (ocio valid) both 'view' and 'display' must be filled (if + 'target_colorspace') + target_view (str): name for target viewer space (ocio valid) both 'view' and 'display' must be filled (if 'target_colorspace') additional_command_args (list): arguments for oiiotool (like binary depth for .dpx) logger (logging.Logger): Logger used for logging. + Raises: ValueError: if misconfigured + """ if logger is None: logger = logging.getLogger(__name__) @@ -1024,23 +1086,99 @@ def convert_colorspace( "--ch", channels_arg ]) - if all([target_colorspace, view, display]): - raise ValueError("Colorspace and both screen and display" - " cannot be set together." - "Choose colorspace or screen and display") - if not target_colorspace and not all([view, display]): - raise ValueError("Both screen and display must be set.") + # Validate input parameters + if all([target_colorspace, target_view, target_display]): + raise ValueError( + "Colorspace and both screen and display cannot be set together." + "Choose colorspace or screen and display" + ) + + if all([source_view, source_display]) and source_colorspace: + logger.warning( + "Both source display/view and source_colorspace provided. " + "Using source display/view pair and ignoring source_colorspace." + ) + + if not target_colorspace and not all([target_view, target_display]): + raise ValueError( + "Both screen and display must be set if target_colorspace is not " + "provided." + ) + + if ((source_view and not source_display) or + (source_display and not source_view)): + raise ValueError( + "Both source_view and source_display must be provided if using " + "display/view inputs." + ) if additional_command_args: oiio_cmd.extend(additional_command_args) + # Handle the different conversion cases if target_colorspace: - oiio_cmd.extend(["--colorconvert:subimages=0", - source_colorspace, - target_colorspace]) - if view and display: - oiio_cmd.extend(["--iscolorspace", source_colorspace]) - oiio_cmd.extend(["--ociodisplay:subimages=0", display, view]) + # Case 1: Converting to a named colorspace + if all([source_view, source_display]): + # First convert from source display/view to a role/reference space + # that can be used with colorconvert + # For example, converting to "scene_linear" or an appropriate + # intermediate space + # This is a two-step conversion process since there's no direct + # display/view to colorspace command + # This could be a config parameter or determined from OCIO config + tmp_role_space = "scene_linear" + oiio_cmd.extend([ + "--ociodisplay:inverse=1:subimages=0", source_display, + source_view, "--colorconvert:subimages=0", tmp_role_space, + target_colorspace, + ]) + else: + # Standard color space to color space conversion + oiio_cmd.extend([ + "--colorconvert:subimages=0", source_colorspace, + target_colorspace, + ]) + else: # Using display/view target + if all([source_view, source_display]): + if source_display == target_display and source_view == target_view: + # No conversion needed if source and target display/view are + # the same + logger.debug( + "Source and target display/view pairs are identical. " + "No color conversion needed." + ) + elif source_display == target_display: + # When only the view changes but display stays the same + # First convert from source view to a reference space, then to + # target view + # This could be configured + tmp_role_space = "scene_linear" + oiio_cmd.extend([ + "--ociodisplay:inverse=1:subimages=0", + source_display, + source_view, + "--ociodisplay:subimages=0", + target_display, + target_view, + ]) + else: + # Complete display/view pair conversion + # Similar approach: go through a reference space + # This could be configured + tmp_role_space = "scene_linear" + oiio_cmd.extend([ + "--ociodisplay:inverse=1:subimages=0", + source_display, + source_view, "--ociodisplay:subimages=0", + target_display, + target_view, + ]) + else: + # Standard conversion from colorspace to display/view + oiio_cmd.extend([ + "--iscolorspace", source_colorspace, + "--ociodisplay:subimages=0", target_display, target_view, + ]) oiio_cmd.extend(["-o", output_path]) diff --git a/client/ayon_core/plugins/publish/extract_color_transcode.py b/client/ayon_core/plugins/publish/extract_color_transcode.py index 6cf30857a4..f61379189c 100644 --- a/client/ayon_core/plugins/publish/extract_color_transcode.py +++ b/client/ayon_core/plugins/publish/extract_color_transcode.py @@ -11,7 +11,7 @@ from ayon_core.lib import ( is_oiio_supported, ) from ayon_core.lib.transcoding import ( - convert_colorspace, + oiiotool_transcode, ) from ayon_core.lib.profiles_filtering import filter_profiles @@ -94,6 +94,8 @@ class ExtractOIIOTranscode(publish.Extractor): colorspace_data = repre["colorspaceData"] source_colorspace = colorspace_data["colorspace"] + source_display = colorspace_data.get("display") + source_view = colorspace_data.get("view") config_path = colorspace_data.get("config", {}).get("path") if not config_path or not os.path.exists(config_path): self.log.warning("Config file doesn't exist, skipping") @@ -124,7 +126,7 @@ class ExtractOIIOTranscode(publish.Extractor): transcoding_type = output_def["transcoding_type"] - target_colorspace = view = display = None + target_colorspace = target_view = target_display = None # NOTE: we use colorspace_data as the fallback values for # the target colorspace. if transcoding_type == "colorspace": @@ -136,18 +138,20 @@ class ExtractOIIOTranscode(publish.Extractor): colorspace_data.get("colorspace")) elif transcoding_type == "display_view": display_view = output_def["display_view"] - view = display_view["view"] or colorspace_data.get("view") - display = ( + target_view = ( + display_view["view"] + or colorspace_data.get("view")) + target_display = ( display_view["display"] or colorspace_data.get("display") ) # both could be already collected by DCC, # but could be overwritten when transcoding - if view: - new_repre["colorspaceData"]["view"] = view - if display: - new_repre["colorspaceData"]["display"] = display + if target_view: + new_repre["colorspaceData"]["view"] = target_view + if target_display: + new_repre["colorspaceData"]["display"] = target_display if target_colorspace: new_repre["colorspaceData"]["colorspace"] = \ target_colorspace @@ -166,16 +170,18 @@ class ExtractOIIOTranscode(publish.Extractor): new_staging_dir, output_extension) - convert_colorspace( - input_path, - output_path, - config_path, - source_colorspace, - target_colorspace, - view, - display, - additional_command_args, - self.log + oiiotool_transcode( + input_path=input_path, + output_path=output_path, + config_path=config_path, + source_colorspace=source_colorspace, + target_colorspace=target_colorspace, + target_display=target_display, + target_view=target_view, + source_display=source_display, + source_view=source_view, + additional_command_args=additional_command_args, + logger=self.log ) # cleanup temporary transcoded files diff --git a/client/ayon_core/plugins/publish/extract_thumbnail.py b/client/ayon_core/plugins/publish/extract_thumbnail.py index 3a428c46a7..f65308121b 100644 --- a/client/ayon_core/plugins/publish/extract_thumbnail.py +++ b/client/ayon_core/plugins/publish/extract_thumbnail.py @@ -15,7 +15,7 @@ from ayon_core.lib import ( path_to_subprocess_arg, run_subprocess, ) -from ayon_core.lib.transcoding import convert_colorspace +from ayon_core.lib.transcoding import oiiotool_transcode from ayon_core.lib.transcoding import VIDEO_EXTENSIONS, IMAGE_EXTENSIONS @@ -431,13 +431,15 @@ class ExtractThumbnail(pyblish.api.InstancePlugin): oiio_default_view = display_and_view["view"] try: - convert_colorspace( + oiiotool_transcode( src_path, dst_path, colorspace_data["config"]["path"], colorspace_data["colorspace"], - display=repre_display or oiio_default_display, - view=repre_view or oiio_default_view, + source_display=colorspace_data.get("display"), + source_view=colorspace_data.get("view"), + target_display=repre_display or oiio_default_display, + target_view=repre_view or oiio_default_view, target_colorspace=oiio_default_colorspace, additional_command_args=resolution_arg, logger=self.log, From 08f6b61a3e5f4d91d8a4d7247024a14fe9067d27 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Tue, 20 May 2025 11:19:14 +0200 Subject: [PATCH 072/595] Adds deprecation decorator and marks function Introduces a `deprecated` decorator to mark functions as deprecated, issuing a warning when they are called. The `convert_colorspace` function is marked as deprecated, advising users to switch to `oiiotool_transcode`. --- client/ayon_core/lib/transcoding.py | 90 +++++++++++++++++++++-------- 1 file changed, 66 insertions(+), 24 deletions(-) diff --git a/client/ayon_core/lib/transcoding.py b/client/ayon_core/lib/transcoding.py index 6648f5219e..e62873184d 100644 --- a/client/ayon_core/lib/transcoding.py +++ b/client/ayon_core/lib/transcoding.py @@ -6,6 +6,8 @@ import collections import tempfile import subprocess import platform +import warnings +import functools from typing import Optional import xml.etree.ElementTree @@ -67,6 +69,48 @@ VIDEO_EXTENSIONS = { } + +def deprecated(new_destination): + """Mark functions as deprecated. + + It will result in a warning being emitted when the function is used. + """ + + func = None + if callable(new_destination): + func = new_destination + new_destination = None + + def _decorator(decorated_func): + if new_destination is None: + warning_message = ( + " Please check content of deprecated function to figure out" + " possible replacement." + ) + else: + warning_message = " Please replace your usage with '{}'.".format( + new_destination + ) + + @functools.wraps(decorated_func) + def wrapper(*args, **kwargs): + warnings.simplefilter("always", DeprecationWarning) + warnings.warn( + ( + "Call to deprecated function '{}'" + "\nFunction was moved or removed.{}" + ).format(decorated_func.__name__, warning_message), + category=DeprecationWarning, + stacklevel=4 + ) + return decorated_func(*args, **kwargs) + return wrapper + + if func is None: + return _decorator + return _decorator(func) + + def get_transcode_temp_directory(): """Creates temporary folder for transcoding. @@ -966,6 +1010,8 @@ def convert_ffprobe_fps_to_float(value): return dividend / divisor +# --- Deprecated functions --- +@deprecated("oiiotool_transcode") def convert_colorspace( input_path, output_path, @@ -977,7 +1023,7 @@ def convert_colorspace( additional_command_args=None, logger=None, ): - """Backward compatibility function for convert_colorspace. + """DEPRECATED function use `oiiotool_transcode` instead Args: input_path (str): Path to input file that should be converted. @@ -1105,8 +1151,10 @@ def oiiotool_transcode( "provided." ) - if ((source_view and not source_display) or - (source_display and not source_view)): + if ( + (source_view and not source_display) + or (source_display and not source_view) + ): raise ValueError( "Both source_view and source_display must be provided if using " "display/view inputs." @@ -1128,14 +1176,18 @@ def oiiotool_transcode( # This could be a config parameter or determined from OCIO config tmp_role_space = "scene_linear" oiio_cmd.extend([ - "--ociodisplay:inverse=1:subimages=0", source_display, - source_view, "--colorconvert:subimages=0", tmp_role_space, + "--ociodisplay:inverse=1:subimages=0", + source_display, + source_view, + "--colorconvert:subimages=0", + tmp_role_space, target_colorspace, ]) else: # Standard color space to color space conversion oiio_cmd.extend([ - "--colorconvert:subimages=0", source_colorspace, + "--colorconvert:subimages=0", + source_colorspace, target_colorspace, ]) else: # Using display/view target @@ -1147,10 +1199,9 @@ def oiiotool_transcode( "Source and target display/view pairs are identical. " "No color conversion needed." ) - elif source_display == target_display: - # When only the view changes but display stays the same - # First convert from source view to a reference space, then to - # target view + else: + # Complete display/view pair conversion + # Similar approach: go through a reference space # This could be configured tmp_role_space = "scene_linear" oiio_cmd.extend([ @@ -1161,23 +1212,14 @@ def oiiotool_transcode( target_display, target_view, ]) - else: - # Complete display/view pair conversion - # Similar approach: go through a reference space - # This could be configured - tmp_role_space = "scene_linear" - oiio_cmd.extend([ - "--ociodisplay:inverse=1:subimages=0", - source_display, - source_view, "--ociodisplay:subimages=0", - target_display, - target_view, - ]) else: # Standard conversion from colorspace to display/view oiio_cmd.extend([ - "--iscolorspace", source_colorspace, - "--ociodisplay:subimages=0", target_display, target_view, + "--iscolorspace", + source_colorspace, + "--ociodisplay:subimages=0", + target_display, + target_view, ]) oiio_cmd.extend(["-o", output_path]) From 4ebf35dd8b68ef10a66551ef47276516a291e360 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Tue, 20 May 2025 11:26:28 +0200 Subject: [PATCH 073/595] Refactors docstring formatting in transcoding Improves readability by adjusting docstring formatting in the `convert_colorspace` function. This change ensures consistent documentation style and enhances clarity. --- client/ayon_core/lib/transcoding.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/lib/transcoding.py b/client/ayon_core/lib/transcoding.py index e62873184d..4f985d5128 100644 --- a/client/ayon_core/lib/transcoding.py +++ b/client/ayon_core/lib/transcoding.py @@ -69,7 +69,6 @@ VIDEO_EXTENSIONS = { } - def deprecated(new_destination): """Mark functions as deprecated. @@ -1033,11 +1032,13 @@ def convert_colorspace( target_colorspace (str, optional): OCIO valid target color space. If filled, 'view' and 'display' must be empty. view (str, optional): Name for target viewer space (OCIO valid). - Both 'view' and 'display' must be filled (if not 'target_colorspace'). - display (str, optional): Name for target display-referred reference space. - Both 'view' and 'display' must be filled (if not 'target_colorspace'). - additional_command_args (list, optional): Additional arguments for oiiotool - (like binary depth for .dpx). + Both 'view' and 'display' must be filled + (if not 'target_colorspace'). + display (str, optional): Name for target display-referred + reference space. Both 'view' and 'display' must be filled + (if not 'target_colorspace'). + additional_command_args (list, optional): Additional arguments + for oiiotool (like binary depth for .dpx). logger (logging.Logger, optional): Logger used for logging. Returns: From a159e02f873a9176fbe1ac351035a152615dd3a0 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 21 May 2025 16:51:22 +0200 Subject: [PATCH 074/595] fix arguments --- client/ayon_core/pipeline/workfile/utils.py | 1 - client/ayon_core/tools/workfiles/control.py | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index a7a1436522..f36e349841 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -620,7 +620,6 @@ def _save_workfile( workfile_path, folder_entity, task_entity, - open_workfile=True, ) if not description: diff --git a/client/ayon_core/tools/workfiles/control.py b/client/ayon_core/tools/workfiles/control.py index ab6b12e4f4..4391e6b5fd 100644 --- a/client/ayon_core/tools/workfiles/control.py +++ b/client/ayon_core/tools/workfiles/control.py @@ -531,6 +531,7 @@ class BaseWorkfileController( folder_id, task_id, rootless_workdir, + workdir, filename, version, comment, From edb371fb38b6c0d7e57f3450608db833080cb4f7 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 22 May 2025 12:35:38 +0200 Subject: [PATCH 075/595] Remove outdated todo --- client/ayon_core/pipeline/workfile/utils.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index f36e349841..d37287b330 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -171,7 +171,6 @@ def save_workfile_info( username: Optional[str] = None, workfile_entities: Optional[list[dict[str, Any]]] = None, ): - # TODO create pipeline function for this if workfile_entities is None: workfile_entities = list(ayon_api.get_workfiles_info( project_name, From e97f7f1d20e07727411308b9b7cb73e4a328e10f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 26 May 2025 15:11:34 +0200 Subject: [PATCH 076/595] added docstring to dataclasses --- client/ayon_core/host/interfaces/workfiles.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index f416d19aa0..7d924dff3a 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -16,6 +16,29 @@ if typing.TYPE_CHECKING: @dataclass class WorkfileInfo: + """Information about workfile. + + Host can open, copy and use the workfile using this information object. + + Attributes: + filepath (str): Path to the workfile. + rootless_path (str): Path to the workfile without root. And without + backslashes on Windows. + file_size (Optional[float]): Size of the workfile in bytes. + file_created (Optional[float]): Timestamp when the workfile was + created on the filesystem. + file_modified (Optional[float]): Timestamp when the workfile was + modified on the filesystem. + workfile_entity_id (Optional[str]): Workfile entity id. If None then + the workfile is not in the database. + description (str): Description of the workfile. + created_by (Optional[str]): User id of the user who created the + workfile entity. + updated_by (Optional[str]): User id of the user who updated the + workfile entity. + available (bool): True if workfile is available on the machine. + + """ filepath: str rootless_path: str file_size: Optional[float] @@ -81,6 +104,27 @@ class WorkfileInfo: @dataclass class PublishedWorkfileInfo: + """Information about published workfile. + + Host can copy and use the workfile using this information object. + + Attributes: + project_name (str): Name of the project where workfile lives. + folder_id (str): Folder id under which is workfile stored. + task_id (Optional[str]): Task id under which is workfile stored. + representation_id (str): Representation id of the workfile. + filepath (str): Path to the workfile. + created_at (float): Timestamp when the workfile representation + was created. + author (str): Author of the workfile representation. + available (bool): True if workfile is available on the machine. + file_size (Optional[float]): Size of the workfile in bytes. + file_created (Optional[float]): Timestamp when the workfile was + created on the filesystem. + file_modified (Optional[float]): Timestamp when the workfile was + modified on the filesystem. + + """ project_name: str folder_id: str task_id: Optional[str] From c83bae2605f60bc6aa555d542b5783171cb0c01a Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:03:13 +0200 Subject: [PATCH 077/595] move context change responsibility to host --- client/ayon_core/host/host.py | 224 ++++++++++++++++++++- client/ayon_core/pipeline/context_tools.py | 106 +++++----- 2 files changed, 262 insertions(+), 68 deletions(-) diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index 3333cf3778..d451b768c1 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -1,10 +1,20 @@ +from __future__ import annotations + import os import logging import contextlib from abc import ABC, abstractmethod +import typing +from typing import Optional, Any -# NOTE can't import 'typing' because of issues in Maya 2020 -# - shiboken crashes on 'typing' module import +import ayon_api + +from ayon_core.lib import emit_event + +from .interfaces import IWorkfileHost + +if typing.TYPE_CHECKING: + from ayon_core.pipeline import Anatomy class HostBase(ABC): @@ -94,12 +104,12 @@ class HostBase(ABC): @property @abstractmethod - def name(self): + def name(self) -> str: """Host name.""" pass - def get_current_project_name(self): + def get_current_project_name(self) -> str: """ Returns: Union[str, None]: Current project name. @@ -107,7 +117,7 @@ class HostBase(ABC): return os.environ.get("AYON_PROJECT_NAME") - def get_current_folder_path(self): + def get_current_folder_path(self) -> Optional[str]: """ Returns: Union[str, None]: Current asset name. @@ -115,7 +125,7 @@ class HostBase(ABC): return os.environ.get("AYON_FOLDER_PATH") - def get_current_task_name(self): + def get_current_task_name(self) -> Optional[str]: """ Returns: Union[str, None]: Current task name. @@ -123,7 +133,7 @@ class HostBase(ABC): return os.environ.get("AYON_TASK_NAME") - def get_current_context(self): + def get_current_context(self) -> dict[str, Optional[str]]: """Get current context information. This method should be used to get current context of host. Usage of @@ -142,6 +152,88 @@ class HostBase(ABC): "task_name": self.get_current_task_name() } + def set_current_context( + self, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + *, + reason: Optional[str] = None, + workdir: Optional[str] = None, + project_entity: Optional[dict[str, Any]] = None, + project_settings: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, + ): + """Set current context information. + + This method should be used to set current context of host. Usage of + this method can be crucial for host implementations in DCCs where + can be opened multiple workfiles at one moment and change of context + can't be caught properly. + + Notes: + This method should not care about change of workdir and expect any + of the arguments. + + Args: + folder_entity (Optional[dict[str, Any]]): Folder entity. + task_entity (Optional[dict[str, Any]]): Task entity. + reason (Optional[str]): Reason for context change. + workdir (Optional[str]): Work directory path. + project_entity (Optional[dict[str, Any]]): Project entity data. + project_settings (Optional[dict[str, Any]]): Project settings data. + anatomy (Optional[Anatomy]): Anatomy instance for the project. + + """ + from ayon_core.pipeline import Anatomy + + folder_path = folder_entity["path"] + task_name = task_entity["name"] + + context = self.get_current_context() + # Don't do anything if context did not change + if ( + context["folder_path"] == folder_path + and context["task_name"] == task_name + ): + return context + + project_name = self.get_current_project_name() + if project_entity is None: + project_entity = ayon_api.get_project(project_name) + + if anatomy is None: + anatomy = Anatomy(project_name, project_entity=project_entity) + + self._before_context_change( + project_entity, + folder_entity, + task_entity, + anatomy, + reason, + ) + self._set_current_context( + project_entity, + folder_entity, + task_entity, + reason, + workdir, + anatomy, + project_settings, + ) + self._after_context_change( + project_entity, + folder_entity, + task_entity, + anatomy, + reason, + ) + + return self._emit_context_change_event( + project_name, + folder_path, + task_name, + ) + def get_context_title(self): """Context title shown for UI purposes. @@ -188,3 +280,121 @@ class HostBase(ABC): yield finally: pass + + def _emit_context_change_event( + self, + project_name: str, + folder_path: Optional[str], + task_name: Optional[str], + ): + """Emit context change event. + + Args: + project_name (str): Name of the project. + folder_path (Optional[str]): Path of the folder. + task_name (Optional[str]): Name of the task. + + """ + data = { + "project_name": project_name, + "folder_path": folder_path, + "task_name": task_name, + } + emit_event("taskChanged", data) + return data + + def _set_current_context( + self, + project_entity: dict[str, Any], + folder_entity: Optional[dict[str, Any]], + task_entity: Optional[dict[str, Any]], + reason: Optional[str], + workdir: Optional[str], + anatomy: Optional["Anatomy"], + project_settings: Optional[dict[str, Any]], + ): + from ayon_core.pipeline.workfile import get_workdir + + project_name = self.get_current_project_name() + folder_path = None + task_name = None + if folder_entity: + folder_path = folder_entity["path"] + if task_entity: + task_name = task_entity["name"] + + if ( + workdir is None + and isinstance(self, IWorkfileHost) + and folder_entity + ): + if project_entity is None: + project_entity = ayon_api.get_project(project_name) + + workdir = get_workdir( + project_entity, + folder_entity, + task_entity, + self.name, + anatomy=anatomy, + project_settings=project_settings, + ) + + envs = { + "AYON_PROJECT_NAME": project_name, + "AYON_FOLDER_PATH": folder_path, + "AYON_TASK_NAME": task_name, + "AYON_WORKDIR": workdir, + } + + # Update the Session and environments. Pop from environments all keys with + # value set to None. + for key, value in envs.items(): + if value is None: + os.environ.pop(key, None) + else: + os.environ[key] = value + + def _before_context_change( + self, + project_entity: dict[str, Any], + folder_entity: Optional[dict[str, Any]], + task_entity: Optional[dict[str, Any]], + anatomy: "Anatomy", + reason: Optional[str], + ): + """Before context is changed. + + This method is called before the context is changed in the host. + + Can be overriden to implement host specific logic. + + Args: + folder_entity (dict[str, Any]): Folder entity. + task_entity (dict[str, Any]): Task entity. + reason (Optional[str]): Reason for context change. + + """ + pass + + def _after_context_change( + self, + project_entity: dict[str, Any], + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + anatomy: "Anatomy", + reason: Optional[str], + ): + """After context is changed. + + This method is called after the context is changed in the host. + + Can be overriden to implement host specific logic. + + Args: + folder_entity (dict[str, Any]): Folder entity. + task_entity (dict[str, Any]): Task entity. + reason (Optional[str]): Reason for context change. + + """ + pass diff --git a/client/ayon_core/pipeline/context_tools.py b/client/ayon_core/pipeline/context_tools.py index 0c6e86ef4b..c51f0ad0d9 100644 --- a/client/ayon_core/pipeline/context_tools.py +++ b/client/ayon_core/pipeline/context_tools.py @@ -1,20 +1,21 @@ """Core pipeline functionality""" - +from __future__ import annotations import os import logging import platform import uuid +import warnings +from typing import Optional, Any import ayon_api import pyblish.api from pyblish.lib import MessageHandler from ayon_core import AYON_CORE_ROOT -from ayon_core.host import HostBase, IWorkfileHost +from ayon_core.host import HostBase from ayon_core.lib import ( is_in_tests, initialize_ayon_connection, - emit_event, version_up ) from ayon_core.addon import load_addons, AddonsManager @@ -24,7 +25,6 @@ from .publish.lib import filter_pyblish_plugins from .anatomy import Anatomy from .template_data import get_template_data_with_names from .workfile import ( - get_workdir, get_custom_workfile_template_by_string_context, get_workfile_template_key_from_context, get_last_workfile, @@ -505,14 +505,19 @@ def get_current_context_custom_workfile_template(project_settings=None): ) +_PLACEHOLDER = object() + + def change_current_context( - folder_entity, - task_entity, - template_key=None, - workdir=None, - anatomy=None, - project_entity=None, - project_settings=None, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + *, + template_key: Optional[str] = _PLACEHOLDER, + workdir: Optional[str] = _PLACEHOLDER, + reason: Optional[str] = None, + project_entity: Optional[dict[str, Any]] = None, + project_settings: Optional[dict[str, Any]] = None, + anatomy: Optional[Anatomy] = None, ): """Update active Session to a new task work area. @@ -529,9 +534,10 @@ def change_current_context( Args: folder_entity (Dict[str, Any]): Folder entity to set. task_entity (Dict[str, Any]): Task entity to set. - template_key (Optional[str]): Prepared template key to be used for - workfile template in Anatomy. - workdir (Optional[str]): Workdir to set. + template_key (Optional[str]): DEPRECATED: Prepared template key to + be used for workfile template in Anatomy. + workdir (Optional[str]): DEPRECATED: Workdir to set. + reason (Optional[str]): Reason for changing context. anatomy (Optional[Anatomy]): Anatomy object used for workdir calculation. project_entity (Optional[dict[str, Any]]): Project entity used for @@ -540,58 +546,36 @@ def change_current_context( workdir calculation. Returns: - Dict[str, str]: The changed key, values in the current Session. + Dict[str, str]: New context data. """ - host = registered_host() - project_name = host.get_current_project_name() - folder_path = None - task_name = None - if folder_entity: - folder_path = folder_entity["path"] - if task_entity: - task_name = task_entity["name"] + depr_args = [] + if template_key is not _PLACEHOLDER: + depr_args.append("'template_key'") - if isinstance(host, IWorkfileHost) and workdir is None and folder_entity: - if project_entity is None: - project_entity = ayon_api.get_project(project_name) - workdir = get_workdir( - project_entity, - folder_entity, - task_entity, - host.name, - anatomy=anatomy, - template_key=template_key, - project_settings=project_settings, + if workdir is not _PLACEHOLDER: + depr_args.append("'workdir'") + + if depr_args: + ending = "s" if len(depr_args) > 1 else "" + depr_args = ", ".join(depr_args) + warnings.warn( + ( + f"Used deprecated argument{ending} {depr_args}." + " To change " + ), + DeprecationWarning, ) - envs = { - "AYON_PROJECT_NAME": project_name, - "AYON_FOLDER_PATH": folder_path, - "AYON_TASK_NAME": task_name, - "AYON_WORKDIR": workdir, - } - - # Update the Session and environments. Pop from environments all keys with - # value set to None. - for key, value in envs.items(): - if value is None: - os.environ.pop(key, None) - else: - os.environ[key] = value - - data = envs.copy() - - # Convert env keys to human readable keys - data["project_name"] = project_name - data["folder_path"] = folder_path - data["task_name"] = task_name - data["workdir_path"] = workdir - - # Emit session change - emit_event("taskChanged", data) - - return data + host = registered_host() + return host.set_current_context( + folder_entity, + task_entity, + reason=reason, + anatomy=anatomy, + project_entity=project_entity, + project_settings=project_settings, + ) def get_process_id(): From a879d11ac6c76199e3fbc76bf4aad017735c9971 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:03:34 +0200 Subject: [PATCH 078/595] get_ayon_username is using cached values --- client/ayon_core/lib/local_settings.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index d994145d4b..91b881cf57 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -15,6 +15,10 @@ import ayon_api _PLACEHOLDER = object() +class _Cache: + username = None + + def _get_ayon_appdirs(*args): return os.path.join( platformdirs.user_data_dir("AYON", "Ynput"), @@ -591,10 +595,26 @@ def get_local_site_id(): def get_ayon_username(): """AYON username used for templates and publishing. - Uses curet ayon api username. + Uses current ayon api username. Returns: str: Username. """ - return ayon_api.get_user()["name"] + # Look for username in the connection stack + # - this is used when service is working as other user + # (e.g. in background sync) + # TODO @iLLiCiTiT - do not use private attribute of 'ServerAPI', rather + # use public method to get username from connection stack. + con = ayon_api.get_server_api_connection() + user_stack = getattr(con, "_as_user_stack", None) + if user_stack is not None: + username = user_stack.username + if username is not None: + return username + + # Cache the username to avoid multiple API calls + # - it is not expected that user would change + if _Cache.username is None: + _Cache.username = ayon_api.get_user()["name"] + return _Cache.username From 8bda7dd93b3a63eb02e3b3db9844533ae61ae04d Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:05:15 +0200 Subject: [PATCH 079/595] move all the responsibility about workfiles to IWorkfileHost --- client/ayon_core/host/interfaces/workfiles.py | 499 +++++++++++++++++- 1 file changed, 482 insertions(+), 17 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 7d924dff3a..0c8ceb872b 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -10,10 +10,16 @@ from typing import Optional, Any import ayon_api import arrow +from ayon_core.lib import emit_event + if typing.TYPE_CHECKING: from ayon_core.pipeline import Anatomy +WORKFILE_OPEN_REASON = "workfile.opened" +WORKFILE_SAVE_REASON = "workfile.saved" + + @dataclass class WorkfileInfo: """Information about workfile. @@ -256,8 +262,17 @@ class IWorkfileHost: def save_workfile_with_context( self, filepath: str, - folder_entity: dict[str, Any] = None, - task_entity: dict[str, Any] = None, + folder_entity: Optional[dict[str, Any]], + task_entity: Optional[dict[str, Any]], + *, + version: Optional[int], + comment: Optional[str] = None, + description: Optional[str] = None, + rootless_path: Optional[str] = None, + workfile_entities: Optional[list[dict[str, Any]]] = None, + project_settings: Optional[dict[str, Any]] = None, + project_entity: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, ): """Save current workfile with context. @@ -268,15 +283,72 @@ class IWorkfileHost: filepath (str): Where the current scene should be saved. folder_entity (dict[str, Any]): Folder entity. task_entity (dict[str, Any]): Task entity. + version (Optional[int]): Version of the workfile. + comment (Optional[str]): Comment for the workfile. + description (Optional[str]): Description for the workfile. + rootless_path (Optional[str]): Rootless path of the workfile. + workfile_entities (Optional[list[dict[str, Any]]]): Workfile + project_settings (Optional[dict[str, Any]]): Project settings. + project_entity (Optional[dict[str, Any]]): Project entity. + anatomy (Optional[Anatomy]): Project anatomy. """ + self._before_workfile_save( + filepath, + folder_entity, + task_entity, + ) + event_data = self._get_workfile_event_data( + self.get_current_project_name(), + folder_entity, + task_entity, + filepath, + ) + self._emit_workfile_save_event(event_data, after_open=False) + + workdir = os.path.dirname(filepath) + + self.set_current_context( + folder_entity, + task_entity, + reason=WORKFILE_SAVE_REASON, + workdir=workdir, + project_entity=project_entity, + project_settings=project_settings, + anatomy=anatomy, + ) + self.save_workfile(filepath) + self._save_workfile_entity( + filepath, + folder_entity, + task_entity, + version, + comment, + description, + rootless_path, + workfile_entities, + project_settings, + project_entity, + anatomy, + ) + self._after_workfile_save( + filepath, + folder_entity, + task_entity, + ) + self._emit_workfile_save_event(event_data) + def open_workfile_with_context( self, filepath: str, folder_entity: dict[str, Any], task_entity: dict[str, Any], + *, + project_entity: Optional[dict[str, Any]] = None, + project_settings: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, ): """Open passed filepath in the host with context. @@ -289,10 +361,42 @@ class IWorkfileHost: filepath (str): Path to workfile. folder_entity (dict[str, Any]): Folder id. task_entity (dict[str, Any]): Task id. + project_entity (Optional[dict[str, Any]]): Project entity. + project_settings (Optional[dict[str, Any]]): Project settings. + anatomy (Optional[Anatomy]): Project anatomy. """ + context = self.get_current_context() + project_name = context["project_name"] + current_folder_path = context["folder_path"] + current_task_name = context["task_name"] + + workdir = os.path.dirname(filepath) + # Set 'AYON_WORKDIR' environment variable + os.environ["AYON_WORKDIR"] = workdir + + event_data = self._get_workfile_event_data( + project_name, folder_entity, task_entity, filepath + ) + + self._before_workfile_open(folder_entity, task_entity, filepath) + self._emit_workfile_open_event(event_data, after_open=False) + + self.set_current_context( + folder_entity, + task_entity, + reason=WORKFILE_OPEN_REASON, + workdir=workdir, + project_entity=project_entity, + project_settings=project_settings, + anatomy=anatomy, + ) + self.open_workfile(filepath) + self._after_workfile_open(folder_entity, task_entity, filepath) + self._emit_workfile_open_event(event_data) + def list_workfiles( self, project_name: str, @@ -414,6 +518,7 @@ class IWorkfileHost: self, project_name: str, folder_id: str, + *, anatomy: Optional["Anatomy"] = None, version_entities: Optional[list[dict[str, Any]]] = None, repre_entities: Optional[list[dict[str, Any]]] = None, @@ -524,7 +629,16 @@ class IWorkfileHost: dst_path: str, folder_entity: dict[str, Any], task_entity: dict[str, Any], - open_workfile: bool = False, + *, + version: Optional[int], + comment: Optional[str] = None, + description: Optional[str] = None, + rootless_path: Optional[str] = None, + workfile_entities: Optional[list[dict[str, Any]]] = None, + project_settings: Optional[dict[str, Any]] = None, + project_entity: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, + open_workfile: bool = True, ): """Save workfile path with target folder and task context. @@ -536,21 +650,68 @@ class IWorkfileHost: dst_path (str): Where the scene should be saved. folder_entity (dict[str, Any]): Folder entity. task_entity (dict[str, Any]): Task entity. + version (Optional[int]): Version of the workfile. + comment (Optional[str]): Comment for the workfile. + description (Optional[str]): Description for the workfile. + rootless_path (Optional[str]): Rootless path of the workfile. + workfile_entities (Optional[list[dict[str, Any]]]): Workfile + entities to be saved with the workfile. + project_settings (Optional[dict[str, Any]]): Project settings. + project_entity (Optional[dict[str, Any]]): Project entity. + anatomy (Optional[Anatomy]): Project anatomy. open_workfile (bool): Open workfile when copied. """ - # TODO We might need option to open file once copied as some DCC might - # actually need to open the workfile to copy it. + self._before_workfile_copy( + src_path, + dst_path, + folder_entity, + task_entity, + open_workfile, + ) + event_data = self._get_workfile_event_data( + self.get_current_project_name(), + folder_entity, + task_entity, + dst_path, + ) + self._emit_workfile_save_event(event_data, after_open=False) + dst_dir = os.path.dirname(dst_path) if not os.path.exists(dst_dir): os.makedirs(dst_dir, exist_ok=True) shutil.copy(src_path, dst_path) - if open_workfile: - self.open_workfile_with_context( - dst_path, - folder_entity, - task_entity, - ) + + self._save_workfile_entity( + dst_path, + folder_entity, + task_entity, + version, + comment, + description, + rootless_path, + workfile_entities, + project_settings, + project_entity, + anatomy, + ) + self._after_workfile_copy( + src_path, + dst_path, + folder_entity, + task_entity, + open_workfile, + ) + self._emit_workfile_save_event(event_data) + + if not open_workfile: + return + + self.open_workfile_with_context( + dst_path, + folder_entity, + task_entity, + ) def copy_workfile_representation( self, @@ -559,8 +720,17 @@ class IWorkfileHost: dst_path: str, folder_entity: dict[str, Any], task_entity: dict[str, Any], - open_workfile: bool = False, - anatomy: Optional[Anatomy] = None, + *, + version: Optional[int], + comment: Optional[str] = None, + description: Optional[str] = None, + rootless_path: Optional[str] = None, + workfile_entities: Optional[list[dict[str, Any]]] = None, + project_settings: Optional[dict[str, Any]] = None, + project_entity: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, + open_workfile: bool = True, + src_anatomy: Optional["Anatomy"] = None, src_representation_path: Optional[str] = None, ): """Copy workfile representation. @@ -574,8 +744,17 @@ class IWorkfileHost: dst_path (str): Where the scene should be saved. folder_entity (dict[str, Any): Folder entity. task_entity (dict[str, Any]): Task entity. - open_workfile (bool): Open workfile when copied. + version (Optional[int]): Version of the workfile. + comment (Optional[str]): Comment for the workfile. + description (Optional[str]): Description for the workfile. + rootless_path (Optional[str]): Rootless path of the workfile. + workfile_entities (Optional[list[dict[str, Any]]]): Workfile + entities to be saved with the workfile. + project_settings (Optional[dict[str, Any]]): Project settings. + project_entity (Optional[dict[str, Any]]): Project entity. anatomy (Optional[Anatomy]): Project anatomy. + open_workfile (bool): Open workfile when copied. + src_anatomy (Optional[Anatomy]): Anatomy of the source src_representation_path (Optional[str]): Representation path. """ @@ -586,12 +765,27 @@ class IWorkfileHost: get_representation_path_with_anatomy ) - if src_representation_path is None: + project_name = self.get_current_project_name() + # Re-use Anatomy or project entity if source context is same + if project_name == src_project_name: + if src_anatomy is None and anatomy is not None: + src_anatomy = anatomy + elif anatomy is None and src_anatomy is not None: + anatomy = src_anatomy + elif not project_entity: + project_entity = ayon_api.get_project(project_name) + if anatomy is None: - anatomy = Anatomy(src_project_name) + anatomy = src_anatomy = Anatomy( + project_name, project_entity=project_entity + ) + + if src_representation_path is None: + if src_anatomy is None: + src_anatomy = Anatomy(src_project_name) src_representation_path = get_representation_path_with_anatomy( src_representation_entity, - anatomy, + src_anatomy, ) self.copy_workfile( @@ -599,6 +793,14 @@ class IWorkfileHost: dst_path, folder_entity, task_entity, + version=version, + comment=comment, + description=description, + rootless_path=rootless_path, + workfile_entities=workfile_entities, + project_settings=project_settings, + project_entity=project_entity, + anatomy=anatomy, open_workfile=open_workfile, ) @@ -696,3 +898,266 @@ class IWorkfileHost: )) return version_entities, repre_entities + + def _save_workfile_entity( + self, + workfile_path: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + version: Optional[int], + comment: Optional[str], + description: Optional[str], + rootless_path: Optional[str], + workfile_entities: Optional[list[dict[str, Any]]] = None, + project_settings: Optional[dict[str, Any]] = None, + project_entity: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, + ): + from ayon_core.pipeline.workfile.utils import ( + save_workfile_info, + find_workfile_rootless_path, + ) + + project_name = self.get_current_project_name() + if not description: + description = None + + if not comment: + comment = None + + if rootless_path is None: + rootless_path = find_workfile_rootless_path( + workfile_path, + project_name, + folder_entity, + task_entity, + self.name, + project_entity=project_entity, + project_settings=project_settings, + anatomy=anatomy, + ) + + # It is not possible to create workfile infor without rootless path + workfile_info = None + if not rootless_path: + return workfile_info + + if platform.system().lower() == "windows": + rootless_path = rootless_path.replace("\\", "/") + + workfile_info = save_workfile_info( + project_name, + task_entity["id"], + rootless_path, + self.name, + version, + comment, + description, + workfile_entities=workfile_entities, + ) + return workfile_info + + def _create_extra_folders(self, folder_entity, task_entity, workdir): + from ayon_core.pipeline.workfile.path_resolving import ( + create_workdir_extra_folders + ) + + project_name = self.get_current_project_name() + + # Create extra folders + create_workdir_extra_folders( + workdir, + self.name, + task_entity["taskType"], + task_entity["name"], + project_name + ) + + def _get_workfile_event_data( + self, + project_name: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + filepath: str, + ): + workdir, filename = os.path.split(filepath) + return { + "project_name": project_name, + "folder_id": folder_entity["id"], + "folder_path": folder_entity["path"], + "task_id": task_entity["id"], + "task_name": task_entity["name"], + "host_name": self.name, + "filepath": filepath, + "filename": filename, + "workdir_path": workdir, + } + + def _before_workfile_open( + self, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + filepath: str, + ): + """Before workfile is opened. + + This method is called before the workfile is opened in the host. + + Can be overriden to implement host specific logic. + + Args: + folder_entity (dict[str, Any]): Folder entity. + task_entity (dict[str, Any]): Task entity. + filepath (str): Path to the workfile. + + """ + pass + + def _after_workfile_open( + self, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + filepath: str, + ): + """After workfile is opened. + + This method is called after the workfile is opened in the host. + + Can be overriden to implement host specific logic. + + Args: + folder_entity (dict[str, Any]): Folder entity. + task_entity (dict[str, Any]): Task entity. + filepath (str): Path to the workfile. + + """ + pass + + + def _before_workfile_save( + self, + filepath: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + ): + """Before workfile is saved. + + This method is called before the workfile is saved in the host. + + Can be overriden to implement host specific logic. + + Args: + filepath (str): Path to the workfile. + folder_entity (dict[str, Any]): Folder entity. + task_entity (dict[str, Any]): Task entity. + + """ + pass + + def _after_workfile_save( + self, + filepath: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + ): + """After workfile is saved. + + This method is called after the workfile is saved in the host. + + Can be overriden to implement host specific logic. + + Args: + folder_entity (dict[str, Any]): Folder entity. + task_entity (dict[str, Any]): Task entity. + filepath (str): Path to the workfile. + + """ + workdir = os.path.dirname(filepath) + self._create_extra_folders(folder_entity, task_entity, workdir) + + def _before_workfile_copy( + self, + src_path: str, + dst_path: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + open_workfile: bool = True, + ): + """Before workfile is copied. + + This method is called before the workfile is copied by host + integration. + + Can be overriden to implement host specific logic. + + Args: + src_path (str): Path to the source workfile. + dst_path (str): Path to the destination workfile. + folder_entity (dict[str, Any]): Folder entity. + task_entity (dict[str, Any]): Task entity. + open_workfile (bool): Should be the path opened once copy is + finished. + + """ + pass + + def _after_workfile_copy( + self, + src_path: str, + dst_path: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + open_workfile: bool = True, + ): + """After workfile is copied. + + This method is called after the workfile is copied by host + integration. + + Can be overriden to implement host specific logic. + + Args: + src_path (str): Path to the source workfile. + dst_path (str): Path to the destination workfile. + folder_entity (dict[str, Any]): Folder entity. + task_entity (dict[str, Any]): Task entity. + open_workfile (bool): Should be the path opened once copy is + finished. + + """ + workdir = os.path.dirname(dst_path) + self._create_extra_folders(folder_entity, task_entity, workdir) + + def _emit_workfile_open_event( + self, + event_data: dict[str, Optional[str]], + after_open: bool = True, + ): + topics = [] + topic_end = "before" + if after_open: + topics.append("workfile.opened") + topic_end = "after" + + # Keep backwards compatible event topic + topics.append(f"workfile.open.{topic_end}") + + for topic in topics: + emit_event(topic, event_data) + + def _emit_workfile_save_event( + self, + event_data: dict[str, Optional[str]], + after_open: bool = True, + ): + topics = [] + topic_end = "before" + if after_open: + topics.append("workfile.saved") + topic_end = "after" + + # Keep backwards compatible event topic + topics.append(f"workfile.save.{topic_end}") + + for topic in topics: + emit_event(topic, event_data) From c52f300b878b8f23d418872b2ff02048ddba0960 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:05:39 +0200 Subject: [PATCH 080/595] use host methods to work with workfiles and add helper functions --- .../ayon_core/pipeline/workfile/__init__.py | 4 + client/ayon_core/pipeline/workfile/utils.py | 426 ++++++------------ 2 files changed, 131 insertions(+), 299 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/__init__.py b/client/ayon_core/pipeline/workfile/__init__.py index cc081d676b..52acb035b1 100644 --- a/client/ayon_core/pipeline/workfile/__init__.py +++ b/client/ayon_core/pipeline/workfile/__init__.py @@ -26,6 +26,8 @@ from .utils import ( save_current_workfile_to, copy_and_open_workfile, copy_and_open_workfile_representation, + save_workfile_info, + find_workfile_rootless_path, ) from .build_workfile import BuildWorkfile @@ -50,6 +52,7 @@ __all__ = ( "get_last_workfile_from_paths", "get_last_workfile_with_version", "get_last_workfile", + "find_workfile_rootless_path", "get_custom_workfile_template", "get_custom_workfile_template_by_string_context", @@ -66,6 +69,7 @@ __all__ = ( "save_current_workfile_to", "copy_and_open_workfile", "copy_and_open_workfile_representation", + "save_workfile_info", "BuildWorkfile", diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index d37287b330..7ed2ee4739 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -11,10 +11,7 @@ from ayon_api.operations import OperationsSession from ayon_core.lib import filter_profiles, emit_event, get_ayon_username from ayon_core.settings import get_project_settings -from .path_resolving import ( - create_workdir_extra_folders, - get_workfile_template_key, -) +from .path_resolving import get_workfile_template_key if typing.TYPE_CHECKING: from ayon_core.pipeline import Anatomy @@ -25,13 +22,60 @@ class MissingWorkdirError(Exception): pass +def get_workfiles_info( + workfile_path: str, + project_name: str, + task_id: str, + *, + anatomy: Optional["Anatomy"] = None, + workfile_entities: Optional[list[dict[str, Any]]] = None, +) -> Optional[dict[str, Any]]: + """Find workfile info entity for a workfile path. + + Args: + workfile_path (str): Workfile path. + project_name (str): The name of the project. + task_id (str): Task id under which is workfile created. + anatomy (Optional[Anatomy]): Project anatomy used to get roots. + workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched + workfile entities related to task. + + Returns: + Optional[dict[str, Any]]: Workfile info entity if found, otherwise + `None`. + + """ + if anatomy is None: + anatomy = Anatomy(project_name) + + if workfile_entities is None: + workfile_entities = list(ayon_api.get_workfiles_info( + project_name, + task_ids=[task_id], + )) + + if platform.system().lower() == "windows": + workfile_path = workfile_path.replace("\\", "/") + workfile_path = workfile_path.lower() + + for workfile_entity in workfile_entities: + path = workfile_entity["path"] + filled_path = anatomy.fill_root(path) + if platform.system().lower() == "windows": + filled_path = filled_path.replace("\\", "/") + filled_path = filled_path.lower() + if filled_path == workfile_path: + return workfile_entity + return None + + def should_use_last_workfile_on_launch( - project_name, - host_name, - task_name, - task_type, - default_output=False, - project_settings=None, + project_name: str, + host_name: str, + task_name: str, + task_type: str, + default_output: bool = False, + project_settings: Optional[dict[str, Any]] = None, ): """Define if host should start last version workfile if possible. @@ -144,30 +188,14 @@ def should_open_workfiles_tool_on_launch( return output -def _get_event_context_data( - project_name: str, - folder_entity: dict[str, Any], - task_entity: dict[str, Any], - host_name: str, -): - return { - "project_name": project_name, - "folder_id": folder_entity["id"], - "folder_path": folder_entity["path"], - "task_id": task_entity["id"], - "task_name": task_entity["name"], - "host_name": host_name, - } - - def save_workfile_info( project_name: str, task_id: str, rootless_path: str, host_name: str, - version: Optional[int], - comment: Optional[str], - description: Optional[str], + version: Optional[int] = None, + comment: Optional[str] = None, + description: Optional[str] = None, username: Optional[str] = None, workfile_entities: Optional[list[dict[str, Any]]] = None, ): @@ -255,63 +283,38 @@ def open_workfile( filepath: str, folder_entity: dict[str, Any], task_entity: dict[str, Any], + project_entity: Optional[dict[str, Any]] = None, + project_settings: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, ): - from ayon_core.pipeline.context_tools import ( - registered_host, change_current_context - ) + from ayon_core.pipeline.context_tools import registered_host # Trigger before save event host = registered_host() - context = host.get_current_context() - project_name = context["project_name"] - current_folder_path = context["folder_path"] - current_task_name = context["task_name"] - host_name = host.name - - # TODO move to workfiles pipeline - event_data = _get_event_context_data( - project_name, folder_entity, task_entity, host_name - ) - event_data["filepath"] = filepath - - emit_event("workfile.open.before", event_data, source="workfiles.tool") - - # Change context - if ( - folder_entity["path"] != current_folder_path - or task_entity["name"] != current_task_name - ): - change_current_context( - project_name, - folder_entity, - task_entity, - workdir=os.path.dirname(filepath) - ) - host.open_workfile_with_context( filepath, folder_entity, task_entity, + project_entity=project_entity, + project_settings=project_settings, + anatomy=anatomy, ) - emit_event("workfile.open.after", event_data, source="workfiles.tool") - def save_current_workfile_to( workfile_path: str, folder_entity: dict[str, Any], task_entity: dict[str, Any], - version: Optional[int], + *, + version: Optional[int] = None, comment: Optional[str] = None, description: Optional[str] = None, - source: Optional[str] = None, rootless_path: Optional[str] = None, workfile_entities: Optional[list[dict[str, Any]]] = None, - username: Optional[str] = None, project_entity: Optional[dict[str, Any]] = None, project_settings: Optional[dict[str, Any]] = None, anatomy: Optional["Anatomy"] = None, -) -> dict[str, Any]: +): """Save current workfile to new location or context. Args: @@ -321,12 +324,10 @@ def save_current_workfile_to( version (Optional[int]): Workfile version. comment (optional[str]): Workfile comment. description (Optional[str]): Workfile description. - source (Optional[str]): Source of the save action. rootless_path (Optional[str]): Rootless path of the workfile. Is calculated if not passed in. workfile_entities (Optional[list[dict[str, Any]]]): List of workfile - username (Optional[str]): Username of the user saving the workfile. - Current user is used if not passed. + entities related to task. project_entity (Optional[dict[str, Any]]): Project entity used for rootless path calculation. project_settings (Optional[dict[str, Any]]): Project settings used for @@ -338,25 +339,22 @@ def save_current_workfile_to( dict[str, Any]: Workfile info entity. """ - print("save_current_workfile_to") - return _save_workfile( - None, - None, - None, - None, + from ayon_core.pipeline.context_tools import registered_host + + # Trigger before save event + host = registered_host() + host.save_workfile_with_context( workfile_path, folder_entity, task_entity, version, comment, description, - source, - rootless_path, - workfile_entities, - username, - project_entity, - project_settings, - anatomy, + rootless_path=rootless_path, + workfile_entities=workfile_entities, + project_entity=project_entity, + project_settings=project_settings, + anatomy=anatomy, ) @@ -365,17 +363,16 @@ def copy_and_open_workfile( workfile_path: str, folder_entity: dict[str, Any], task_entity: dict[str, Any], - version: Optional[int], + *, + version: Optional[int] = None, comment: Optional[str] = None, description: Optional[str] = None, - source: Optional[str] = None, rootless_path: Optional[str] = None, workfile_entities: Optional[list[dict[str, Any]]] = None, - username: Optional[str] = None, project_entity: Optional[dict[str, Any]] = None, project_settings: Optional[dict[str, Any]] = None, anatomy: Optional["Anatomy"] = None, -) -> dict[str, Any]: +): """Copy workfile to new location and open it. Args: @@ -386,12 +383,9 @@ def copy_and_open_workfile( version (Optional[int]): Workfile version. comment (optional[str]): Workfile comment. description (Optional[str]): Workfile description. - source (Optional[str]): Source of the save action. rootless_path (Optional[str]): Rootless path of the workfile. Is calculated if not passed in. workfile_entities (Optional[list[dict[str, Any]]]): List of workfile - username (Optional[str]): Username of the user saving the workfile. - Current user is used if not passed. project_entity (Optional[dict[str, Any]]): Project entity used for rootless path calculation. project_settings (Optional[dict[str, Any]]): Project settings used for @@ -403,51 +397,49 @@ def copy_and_open_workfile( dict[str, Any]: Workfile info entity. """ - print("copy_and_open_workfile") - return _save_workfile( + from ayon_core.pipeline.context_tools import registered_host + + host = registered_host() + host.copy_workfile( src_workfile_path, - None, - None, - None, workfile_path, folder_entity, task_entity, - version, - comment, - description, - source, - rootless_path, - workfile_entities, - username, - project_entity, - project_settings, - anatomy, + version=version, + comment=comment, + description=description, + rootless_path=rootless_path, + workfile_entities=workfile_entities, + project_entity=project_entity, + project_settings=project_settings, + anatomy=anatomy, + open_workfile=True, ) def copy_and_open_workfile_representation( - project_name: str, + src_project_name: str, representation_id: str, workfile_path: str, folder_entity: dict[str, Any], task_entity: dict[str, Any], - version: Optional[int], + *, + version: Optional[int] = None, comment: Optional[str] = None, description: Optional[str] = None, - source: Optional[str] = None, rootless_path: Optional[str] = None, representation_entity: Optional[dict[str, Any]] = None, representation_path: Optional[str] = None, workfile_entities: Optional[list[dict[str, Any]]] = None, - username: Optional[str] = None, project_entity: Optional[dict[str, Any]] = None, project_settings: Optional[dict[str, Any]] = None, anatomy: Optional["Anatomy"] = None, -) -> dict[str, Any]: + src_anatomy: Optional["Anatomy"] = None, +): """Copy workfile to new location and open it. Args: - project_name (str): Project name where representation is stored. + src_project_name (str): Project name where representation is stored. representation_id (str): Source representation id. workfile_path (str): Destination workfile path. folder_entity (dict[str, Any]): Target folder entity. @@ -455,12 +447,13 @@ def copy_and_open_workfile_representation( version (Optional[int]): Workfile version. comment (optional[str]): Workfile comment. description (Optional[str]): Workfile description. - source (Optional[str]): Source of the save action. rootless_path (Optional[str]): Rootless path of the workfile. Is calculated if not passed in. + representation_entity (Optional[dict[str, Any]]): Representation + entity. If not provided, it will be fetched from the server. + representation_path (Optional[str]): Path to the representation. + Calculated if not provided. workfile_entities (Optional[list[dict[str, Any]]]): List of workfile - username (Optional[str]): Username of the user saving the workfile. - Current user is used if not passed. project_entity (Optional[dict[str, Any]]): Project entity used for rootless path calculation. project_settings (Optional[dict[str, Any]]): Project settings used for @@ -472,209 +465,42 @@ def copy_and_open_workfile_representation( dict[str, Any]: Workfile info entity. """ - print("copy_and_open_workfile_representation") + from ayon_core.pipeline.context_tools import registered_host + if representation_entity is None: representation_entity = ayon_api.get_representation_by_id( - project_name, + src_project_name, representation_id, ) - return _save_workfile( - None, - project_name, + host = registered_host() + host.copy_workfile_representation( + src_project_name, representation_entity, - representation_path, workfile_path, folder_entity, task_entity, - version, - comment, - description, - source, - rootless_path, - workfile_entities, - username, - project_entity, - project_settings, - anatomy, + version=version, + comment=comment, + description=description, + rootless_path=rootless_path, + workfile_entities=workfile_entities, + project_settings=project_settings, + project_entity=project_entity, + anatomy=anatomy, + src_anatomy=src_anatomy, + src_representation_path=representation_path, + open_workfile=open_workfile, ) -def _save_workfile( - src_workfile_path: Optional[str], - representation_project_name: Optional[str], - representation_entity: Optional[dict[str, Any]], - representation_path: Optional[str], - workfile_path: str, - folder_entity: dict[str, Any], - task_entity: dict[str, Any], - version: Optional[int], - comment: Optional[str], - description: Optional[str], - source: Optional[str], - rootless_path: Optional[str], - workfile_entities: Optional[list[dict[str, Any]]], - username: Optional[str], - project_entity: Optional[dict[str, Any]], - project_settings: Optional[dict[str, Any]], - anatomy: Optional["Anatomy"], -) -> dict[str, Any]: - """Function used to save workfile to new location and context. - - Because the functionality for 'save_current_workfile_to' and - 'copy_and_open_workfile' is currently the same, except for used - function on host it is easier to create this wrapper function. - - Args: - src_workfile_path (Optional[str]): Source workfile path. - representation_entity (Optional[dict[str, Any]]): Representation used - as source for workfile. - workfile_path (str): Destination workfile path. - folder_entity (dict[str, Any]): Target folder entity. - task_entity (dict[str, Any]): Target task entity. - version (Optional[int]): Workfile version. - comment (optional[str]): Workfile comment. - description (Optional[str]): Workfile description. - source (Optional[str]): Source of the save action. - rootless_path (Optional[str]): Rootless path of the workfile. Is - calculated if not passed in. - workfile_entities (Optional[list[dict[str, Any]]]): List of workfile - username (Optional[str]): Username of the user saving the workfile. - Current user is used if not passed. - project_entity (Optional[dict[str, Any]]): Project entity used for - rootless path calculation. - project_settings (Optional[dict[str, Any]]): Project settings used for - rootless path calculation. - anatomy (Optional[Anatomy]): Project anatomy used for rootless - path calculation. - - Returns: - dict[str, Any]: Workfile info entity. - - """ - from ayon_core.pipeline.context_tools import ( - registered_host, change_current_context - ) - - # Trigger before save event - host = registered_host() - context = host.get_current_context() - project_name = context["project_name"] - current_folder_path = context["folder_path"] - current_task_name = context["task_name"] - - task_name = task_entity["name"] - task_type = task_entity["taskType"] - task_id = task_entity["id"] - host_name = host.name - - workdir, filename = os.path.split(workfile_path) - - # QUESTION should the data be different for 'before' and 'after'? - event_data = _get_event_context_data( - project_name, folder_entity, task_entity, host_name - ) - event_data.update({ - "filename": filename, - "workdir_path": workdir, - }) - - emit_event("workfile.save.before", event_data, source=source) - - # Change context - if ( - folder_entity["path"] != current_folder_path - or task_entity["name"] != current_task_name - ): - change_current_context( - folder_entity, - task_entity, - workdir=workdir, - anatomy=anatomy, - project_entity=project_entity, - project_settings=project_settings, - ) - - if src_workfile_path: - host.copy_workfile( - src_workfile_path, - workfile_path, - folder_entity, - task_entity, - open_workfile=True, - ) - elif representation_entity: - host.copy_workfile_representation( - representation_project_name, - representation_entity, - workfile_path, - folder_entity, - task_entity, - open_workfile=True, - src_representation_path=representation_path, - anatomy=anatomy, - ) - else: - host.save_workfile_with_context( - workfile_path, - folder_entity, - task_entity, - ) - - if not description: - description = None - - if not comment: - comment = None - - if rootless_path is None: - rootless_path = _find_rootless_path( - workfile_path, - project_name, - task_type, - host_name, - project_entity, - project_settings, - anatomy, - ) - - # It is not possible to create workfile infor without rootless path - workfile_info = None - if rootless_path: - if platform.system().lower() == "windows": - rootless_path = rootless_path.replace("\\", "/") - - workfile_info = save_workfile_info( - project_name, - task_id, - rootless_path, - host_name, - version, - comment, - description, - username=username, - workfile_entities=workfile_entities, - ) - - # Create extra folders - create_workdir_extra_folders( - workdir, - host.name, - task_entity["taskType"], - task_name, - project_name - ) - - # Trigger after save events - emit_event("workfile.save.after", event_data, source=source) - return workfile_info - - -def _find_rootless_path( +def find_workfile_rootless_path( workfile_path: str, project_name: str, - task_type: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], host_name: str, + *, project_entity: Optional[dict[str, Any]] = None, project_settings: Optional[dict[str, Any]] = None, anatomy: Optional["Anatomy"] = None, @@ -684,6 +510,8 @@ def _find_rootless_path( from ayon_core.pipeline import Anatomy anatomy = Anatomy(project_name, project_entity=project_entity) + + task_type = task_entity["taskType"] template_key = get_workfile_template_key( project_name, task_type, From e08c5f243b7b1e171ff66b717639c5a1d07f6480 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:06:04 +0200 Subject: [PATCH 081/595] modified workfiles model to use api functions --- .../tools/workfiles/models/workfiles.py | 226 +++++------------- 1 file changed, 55 insertions(+), 171 deletions(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 4f5fb9890d..f2977be973 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -35,6 +35,7 @@ from ayon_core.pipeline.workfile import ( save_current_workfile_to, copy_and_open_workfile, copy_and_open_workfile_representation, + save_workfile_info, ) from ayon_core.pipeline.version_start import get_versioning_start from ayon_core.tools.workfiles.abstract import ( @@ -149,20 +150,18 @@ class WorkfilesModel: task_entity = self._controller.get_task_entity( project_name, task_id ) - workfile_entities = self.get_workfile_entities(task_id) + failed = False try: - workfile_info = save_current_workfile_to( + save_current_workfile_to( filepath, folder_entity, task_entity, - version, - comment, - description, - source="workfiles.tool", + version=version, + comment=comment, + description=description, rootless_path=rootless_path, - workfile_entities=workfile_entities, - username=self._get_current_username(), + workfile_entities=self.get_workfile_entities(task_id), project_entity=self._controller.get_project_entity( project_name ), @@ -170,7 +169,7 @@ class WorkfilesModel: anatomy=self._controller.project_anatomy, ) self._update_workfile_info( - task_id, rootless_path, description, workfile_info + task_id, rootless_path, description ) self._update_current_context( folder_id, folder_entity["path"], task_entity["name"] @@ -212,8 +211,9 @@ class WorkfilesModel: rootless_path = f"{rootless_workdir}/{filename}" failed = False + workfile_entities = self.get_workfile_entities(task_id) try: - workfile_info = copy_and_open_workfile_representation( + copy_and_open_workfile_representation( project_name, representation_id, dst_filepath, @@ -225,8 +225,7 @@ class WorkfilesModel: rootless_path=rootless_path, representation_entity=repre_entity, representation_path=representation_filepath, - workfile_entities=self.get_workfile_entities(task_id), - username=self._get_current_username(), + workfile_entities=workfile_entities, project_entity=self._controller.get_project_entity( project_name ), @@ -234,7 +233,7 @@ class WorkfilesModel: anatomy=self._controller.project_anatomy, ) self._update_workfile_info( - task_id, rootless_path, description, workfile_info + task_id, rootless_path, description ) self._update_current_context( folder_id, folder_entity["path"], task_entity["name"] @@ -281,13 +280,11 @@ class WorkfilesModel: workfile_path, folder_entity, task_entity, - version, - comment, - description, - source="workfiles.tool", + version=version, + comment=comment, + description=description, rootless_path=rootless_path, workfile_entities=workfile_entities, - username=self._get_current_username(), project_entity=project_entity, project_settings=self._controller.project_settings, anatomy=self._controller.project_anatomy, @@ -608,7 +605,9 @@ class WorkfilesModel: cache.update_data(self._host.list_published_workfiles( project_name, folder_id, - anatomy, + anatomy=anatomy, + version_entities=version_entities, + repre_entities=repre_entities, )) items = cache.get_data() @@ -638,31 +637,6 @@ class WorkfilesModel: return self._current_username # --- Host --- - def _get_event_context_data( - self, - project_name: str, - folder_id: str, - task_id: str, - folder_entity: Optional[dict[str, Any]] = None, - task_entity: Optional[dict[str, Any]] = None, - ): - if folder_entity is None: - folder_entity = self._controller.get_folder_entity( - project_name, folder_id - ) - if task_entity is None: - task_entity = self._controller.get_task_entity( - project_name, task_id - ) - return { - "project_name": project_name, - "folder_id": folder_id, - "folder_path": folder_entity["path"], - "task_id": task_id, - "task_name": task_entity["name"], - "host_name": self._host_name, - } - def _open_workfile(self, folder_id: str, task_id: str, filepath: str): # TODO move to workfiles pipeline project_name = self._project_name @@ -849,23 +823,26 @@ class WorkfilesModel: task_id: str, rootless_path: str, description: str, - workfile_entity: dict[str, Any], ): self._update_file_description(task_id, rootless_path, description) - workfile_entities = self.get_workfile_entities(task_id) - target_idx = None - for idx, workfile_entity in enumerate(workfile_entities): - if workfile_entity["path"] == rootless_path: - target_idx = idx - break - - if target_idx is None: - workfile_entities.append(workfile_entity) - else: - workfile_entities[target_idx] = workfile_entity - self._reset_workarea_file_items(task_id) + # Update workfile entity cache if are cached + if task_id in self._workfile_entities_by_task_id: + workfile_entities = self.get_workfile_entities(task_id) + + target_workfile_entity = None + for workfile_entity in workfile_entities: + if rootless_path == workfile_entity["path"]: + target_workfile_entity = workfile_entity + break + + if target_workfile_entity is None: + self._workfile_entities_by_task_id.pop(task_id, None) + self.get_workfile_entities(task_id) + else: + target_workfile_entity["attrib"]["description"] = description + def _update_file_description( self, task_id: str, rootless_path: str, description: str ): @@ -885,119 +862,26 @@ class WorkfilesModel: comment: Optional[str], description: Optional[str], ): - # TODO create pipeline function for this + workfile_entity = save_workfile_info( + self._controller.get_current_project_name(), + task_id, + rootless_path, + self._controller.get_host_name(), + version=version, + comment=comment, + description=description, + workfile_entities=self.get_workfile_entities(task_id), + ) + # Update cache workfile_entities = self.get_workfile_entities(task_id) - workfile_entity = next( - ( - _ent - for _ent in workfile_entities - if _ent["path"] == rootless_path - ), - None - ) - if not workfile_entity: - workfile_entity = self._create_workfile_info_entity( - task_id, - rootless_path, - version, - comment, - description, - ) + match_idx = None + for idx, entity in enumerate(workfile_entities): + if entity["id"] == workfile_entity["id"]: + # Update existing entity + match_idx = idx + break + + if match_idx is None: workfile_entities.append(workfile_entity) - return - - data = {} - for key, value in ( - ("host_name", self._host_name), - ("version", version), - ("comment", comment), - ): - if value is not None: - data[key] = value - - old_data = workfile_entity["data"] - - changed_data = {} - for key, value in data.items(): - if key not in old_data or old_data[key] != value: - changed_data[key] = value - - update_data = {} - if changed_data: - update_data["data"] = changed_data - - old_description = workfile_entity["attrib"].get("description") - if description is not None and old_description != description: - update_data["attrib"] = {"description": description} - workfile_entity["attrib"]["description"] = description - - username = self._get_current_username() - # Automatically fix 'createdBy' and 'updatedBy' fields - # NOTE both fields were not automatically filled by server - # until 1.1.3 release. - if workfile_entity.get("createdBy") is None: - update_data["createdBy"] = username - workfile_entity["createdBy"] = username - - if workfile_entity.get("updatedBy") != username: - update_data["updatedBy"] = username - workfile_entity["updatedBy"] = username - - if not update_data: - return - - session = OperationsSession() - session.update_entity( - self._project_name, - "workfile", - workfile_entity["id"], - update_data, - ) - session.commit() - - def _create_workfile_info_entity( - self, - task_id: str, - rootless_path: str, - version: Optional[int], - comment: Optional[str], - description: str, - ) -> dict[str, Any]: - extension = os.path.splitext(rootless_path)[1] - - attrib = {} - for key, value in ( - ("extension", extension), - ("description", description), - ): - if value is not None: - attrib[key] = value - - data = {} - for key, value in ( - ("host_name", self._host_name), - ("version", version), - ("comment", comment), - ): - if value is not None: - data[key] = value - - username = self._get_current_username() - workfile_info = { - "id": uuid.uuid4().hex, - "path": rootless_path, - "taskId": task_id, - "attrib": attrib, - "data": data, - # TODO remove 'createdBy' and 'updatedBy' fields when server is - # or above 1.1.3 . - "createdBy": username, - "updatedBy": username, - } - - session = OperationsSession() - session.create_entity( - self._project_name, "workfile", workfile_info - ) - session.commit() - return workfile_info + else: + workfile_entities[match_idx] = workfile_entity From 406f43a13f2ac075c45605beebb4c1f3708fd335 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:10:26 +0200 Subject: [PATCH 082/595] formatting cleanup --- client/ayon_core/host/host.py | 4 ++-- client/ayon_core/host/interfaces/workfiles.py | 3 --- client/ayon_core/pipeline/workfile/utils.py | 6 +++--- client/ayon_core/tools/workfiles/models/workfiles.py | 2 -- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index d451b768c1..5e5e8ac79f 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -347,8 +347,8 @@ class HostBase(ABC): "AYON_WORKDIR": workdir, } - # Update the Session and environments. Pop from environments all keys with - # value set to None. + # Update the Session and environments. Pop from environments all + # keys with value set to None. for key, value in envs.items(): if value is None: os.environ.pop(key, None) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 0c8ceb872b..47a0cb0277 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -368,8 +368,6 @@ class IWorkfileHost: """ context = self.get_current_context() project_name = context["project_name"] - current_folder_path = context["folder_path"] - current_task_name = context["task_name"] workdir = os.path.dirname(filepath) # Set 'AYON_WORKDIR' environment variable @@ -1033,7 +1031,6 @@ class IWorkfileHost: """ pass - def _before_workfile_save( self, filepath: str, diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 7ed2ee4739..c45163e7a1 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -8,7 +8,7 @@ from typing import Optional, Any import ayon_api from ayon_api.operations import OperationsSession -from ayon_core.lib import filter_profiles, emit_event, get_ayon_username +from ayon_core.lib import filter_profiles, get_ayon_username from ayon_core.settings import get_project_settings from .path_resolving import get_workfile_template_key @@ -54,7 +54,7 @@ def get_workfiles_info( task_ids=[task_id], )) - if platform.system().lower() == "windows": + if platform.system().lower() == "windows": workfile_path = workfile_path.replace("\\", "/") workfile_path = workfile_path.lower() @@ -398,7 +398,7 @@ def copy_and_open_workfile( """ from ayon_core.pipeline.context_tools import registered_host - + host = registered_host() host.copy_workfile( src_workfile_path, diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index f2977be973..23521dc3f6 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -1,13 +1,11 @@ from __future__ import annotations import os import copy -import uuid import platform import typing from typing import Optional, Any import ayon_api -from ayon_api.operations import OperationsSession from ayon_core.lib import ( get_ayon_username, From 7cb22fbe1fed55b3f2edb178ba0fbd1ab1b54265 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 13:27:35 +0200 Subject: [PATCH 083/595] add arrow to dependencies --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index f919a9589b..1ca75cd6b0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,6 +19,7 @@ python = ">=3.9.1,<3.10" pytest = "^8.0" pytest-print = "^1.0" ayon-python-api = "^1.0" +arrow = "0.17.0" # linting dependencies ruff = "0.11.7" pre-commit = "^3.6.2" From df55a32b95995ccbf9c5292b4a4991f1939d010f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 13:32:26 +0200 Subject: [PATCH 084/595] fix 'PublishedWorkfileInfo' --- client/ayon_core/host/interfaces/workfiles.py | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 47a0cb0277..8cf904e5d3 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -1,10 +1,11 @@ from __future__ import annotations + import os import platform import shutil +import typing from abc import abstractmethod from dataclasses import dataclass, asdict -import typing from typing import Optional, Any import ayon_api @@ -57,7 +58,13 @@ class WorkfileInfo: available: bool @classmethod - def new(cls, filepath, rootless_path, available, workfile_entity): + def new( + cls, + filepath: str, + rootless_path: str, + available: bool, + workfile_entity: dict[str, Any], + ): file_size = file_modified = file_created = None if filepath and os.path.exists(filepath): filestat = os.stat(filepath) @@ -85,7 +92,7 @@ class WorkfileInfo: available=available, ) - def to_data(self): + def to_data(self) -> dict[str, Any]: """Converts file item to data. Returns: @@ -95,7 +102,7 @@ class WorkfileInfo: return asdict(self) @classmethod - def from_data(cls, data): + def from_data(cls, data: dict[str, Any]) -> "WorkfileInfo": """Converts data to workfile item. Args: @@ -173,7 +180,7 @@ class PublishedWorkfileInfo: file_modified=file_modified, ) - def to_data(self): + def to_data(self) -> dict[str, Any]: """Converts file item to data. Returns: @@ -183,7 +190,7 @@ class PublishedWorkfileInfo: return asdict(self) @classmethod - def from_data(cls, data): + def from_data(cls, data: dict[str, Any]) -> "PublishedWorkfileInfo": """Converts data to workfile item. Args: @@ -193,7 +200,7 @@ class PublishedWorkfileInfo: WorkfileInfo: File item. """ - return WorkfileInfo(**data) + return PublishedWorkfileInfo(**data) class IWorkfileHost: From f4545a6f9798651e6a6fafe6d65d9cd7e5556797 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 13:48:51 +0200 Subject: [PATCH 085/595] some formatting changes --- .../ayon_core/host/interfaces/exceptions.py | 2 +- client/ayon_core/host/interfaces/workfiles.py | 61 +++++++++++-------- .../pipeline/workfile/path_resolving.py | 2 +- 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/client/ayon_core/host/interfaces/exceptions.py b/client/ayon_core/host/interfaces/exceptions.py index c6b4cef4b4..eec4564142 100644 --- a/client/ayon_core/host/interfaces/exceptions.py +++ b/client/ayon_core/host/interfaces/exceptions.py @@ -1,5 +1,5 @@ class MissingMethodsError(ValueError): - """Exception when host miss some required methods for specific workflow. + """Exception when host miss some required methods for a specific workflow. Args: host (HostBase): Host implementation where are missing methods. diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 8cf904e5d3..a081999823 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -197,22 +197,26 @@ class PublishedWorkfileInfo: data (dict[str, Any]): Workfile item data. Returns: - WorkfileInfo: File item. + PublishedWorkfileInfo: File item. """ return PublishedWorkfileInfo(**data) class IWorkfileHost: - """Implementation requirements to be able use workfile utils and tool.""" + """Implementation requirements to be able to use workfiles utils and tool. + Some of the methods are pre-implemented as they generally do the same in + all host integrations. + + """ @abstractmethod def save_workfile(self, dst_path: Optional[str] = None): - """Save currently opened scene. + """Save the currently opened scene. Args: dst_path (str): Where the current scene should be saved. Or use - current path if 'None' is passed. + the current path if 'None' is passed. """ pass @@ -229,10 +233,10 @@ class IWorkfileHost: @abstractmethod def get_current_workfile(self) -> Optional[str]: - """Retrieve path to current opened file. + """Retrieve a path to current opened file. Returns: - Optional[str]: Path to file which is currently opened. None if + Optional[str]: Path to the file which is currently opened. None if nothing is opened. """ @@ -241,8 +245,8 @@ class IWorkfileHost: def workfile_has_unsaved_changes(self) -> Optional[bool]: """Currently opened scene is saved. - Not all hosts can know if current scene is saved because the API of - DCC does not support it. + Not all hosts can know if the current scene is saved because the API + of DCC does not support it. Returns: Optional[bool]: True if scene is saved and False if has unsaved @@ -253,7 +257,7 @@ class IWorkfileHost: return None def get_workfile_extensions(self) -> list[str]: - """Extensions that can be used as save workfile. + """Extensions that can be used to save the workfile to. Notes: Method may not be used if 'list_workfiles' and @@ -269,8 +273,8 @@ class IWorkfileHost: def save_workfile_with_context( self, filepath: str, - folder_entity: Optional[dict[str, Any]], - task_entity: Optional[dict[str, Any]], + folder_entity: dict[str, Any], + task_entity: dict[str, Any], *, version: Optional[int], comment: Optional[str] = None, @@ -281,7 +285,7 @@ class IWorkfileHost: project_entity: Optional[dict[str, Any]] = None, anatomy: Optional["Anatomy"] = None, ): - """Save current workfile with context. + """Save the current workfile with context. Notes: Should this method care about context change? @@ -415,7 +419,7 @@ class IWorkfileHost: ) -> list[WorkfileInfo]: """List workfiles in the given folder. - NOTES: + Notes: - Better method name? - This method is pre-implemented as the logic can be shared across 95% of host integrations. Ad-hoc implementation to give host @@ -423,7 +427,7 @@ class IWorkfileHost: - Should this method also handle workfiles based on workfile entities? Args: - project_name (str): Name of project. + project_name (str): Project name. folder_entity (dict[str, Any]): Folder entity. task_entity (dict[str, Any]): Task entity. project_entity (Optional[dict[str, Any]]): Project entity. @@ -505,7 +509,10 @@ class IWorkfileHost: rootless_path, None ) items.append(WorkfileInfo.new( - filepath, rootless_path, True, workfile_entity + filepath, + rootless_path, + available=True, + workfile_entity=workfile_entity, )) for workfile_entity in workfile_entities_by_path.values(): @@ -514,7 +521,10 @@ class IWorkfileHost: rootless_path = workfile_entity["path"] filepath = anatomy.fill_root(rootless_path) items.append(WorkfileInfo.new( - filepath, rootless_path, False, workfile_entity + filepath, + rootless_path, + available=False, + workfile_entity=workfile_entity, )) return items @@ -528,9 +538,9 @@ class IWorkfileHost: version_entities: Optional[list[dict[str, Any]]] = None, repre_entities: Optional[list[dict[str, Any]]] = None, ) -> list[PublishedWorkfileInfo]: - """List published workfiles for given folder. + """List published workfiles for the given folder. - Default implementation looks for products with 'workfile' + The default implementation looks for products with the 'workfile' product type. Pre-fetched entities have mandatory fields to be fetched. @@ -548,7 +558,7 @@ class IWorkfileHost: Returns: list[PublishedWorkfileInfo]: Published workfile information for - given context. + the given context. """ from ayon_core.pipeline import Anatomy @@ -601,7 +611,9 @@ class IWorkfileHost: try: workfile_path = workfile_path.format(root=anatomy.roots) except Exception as exc: - print(f"Failed to format workfile path: {exc}") + self.log.warning( + f"Failed to format workfile path.", exc_info=True + ) is_available = False file_size = file_modified = file_created = None @@ -647,8 +659,8 @@ class IWorkfileHost: ): """Save workfile path with target folder and task context. - It is expected that workfile is saved to current project, but can be - copied from other project. + It is expected that workfile is saved to the current project, but + can be copied from the other project. Args: src_path (str): Path to the source scene. @@ -763,8 +775,6 @@ class IWorkfileHost: src_representation_path (Optional[str]): Representation path. """ - # TODO We might need option to open file once copied as some DCC might - # actually need to open the workfile to copy it. from ayon_core.pipeline import Anatomy from ayon_core.pipeline.load import ( get_representation_path_with_anatomy @@ -815,6 +825,7 @@ class IWorkfileHost: Todo: Remove when all usages are replaced. + """ return self.get_workfile_extensions() @@ -823,8 +834,8 @@ class IWorkfileHost: Todo: Remove when all usages are replaced. - """ + """ self.save_workfile(dst_path) def open_file(self, filepath): diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index ac915060eb..2bb94d5c06 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -737,7 +737,7 @@ def get_comments_from_workfile_paths( extensions (set[str]): Set of file extensions. file_template (StringTemplate): Workfile file template. template_data (dict[str, Any]): Data to fill the template with. - current_filename (str): Filename to check for current comment. + current_filename (str): Filename to check for the current comment. Returns: tuple[list[str], str]: List of comments and the current comment. From e6bb395d67e6bff6f2e912d893a5d630791a25b5 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 13:56:37 +0200 Subject: [PATCH 086/595] set AYON_WORKDIR when workfile is opened --- client/ayon_core/host/interfaces/workfiles.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index a081999823..ab61e608f8 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -319,6 +319,9 @@ class IWorkfileHost: workdir = os.path.dirname(filepath) + # Set 'AYON_WORKDIR' environment variable + os.environ["AYON_WORKDIR"] = workdir + self.set_current_context( folder_entity, task_entity, From 524ed034238f86e3625ea7047a8af78db5c297ba Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 13:58:22 +0200 Subject: [PATCH 087/595] removed unnecessary workdir handling from set current context --- client/ayon_core/host/host.py | 50 +++++++------------ client/ayon_core/host/interfaces/workfiles.py | 4 -- client/ayon_core/pipeline/context_tools.py | 9 ++-- 3 files changed, 23 insertions(+), 40 deletions(-) diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index 5e5e8ac79f..45123d74a8 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -158,9 +158,7 @@ class HostBase(ABC): task_entity: dict[str, Any], *, reason: Optional[str] = None, - workdir: Optional[str] = None, project_entity: Optional[dict[str, Any]] = None, - project_settings: Optional[dict[str, Any]] = None, anatomy: Optional["Anatomy"] = None, ): """Set current context information. @@ -178,9 +176,7 @@ class HostBase(ABC): folder_entity (Optional[dict[str, Any]]): Folder entity. task_entity (Optional[dict[str, Any]]): Task entity. reason (Optional[str]): Reason for context change. - workdir (Optional[str]): Work directory path. project_entity (Optional[dict[str, Any]]): Project entity data. - project_settings (Optional[dict[str, Any]]): Project settings data. anatomy (Optional[Anatomy]): Anatomy instance for the project. """ @@ -208,24 +204,22 @@ class HostBase(ABC): project_entity, folder_entity, task_entity, - anatomy, reason, + anatomy, ) self._set_current_context( project_entity, folder_entity, task_entity, reason, - workdir, anatomy, - project_settings, ) self._after_context_change( project_entity, folder_entity, task_entity, - anatomy, reason, + anatomy, ) return self._emit_context_change_event( @@ -309,10 +303,22 @@ class HostBase(ABC): folder_entity: Optional[dict[str, Any]], task_entity: Optional[dict[str, Any]], reason: Optional[str], - workdir: Optional[str], - anatomy: Optional["Anatomy"], - project_settings: Optional[dict[str, Any]], + anatomy: "Anatomy", ): + """Method that changes the context in host. + + Can be overriden for hosts that do need different handling of context + than using environment variables. + + Args: + project_entity (dict[str, Any]): Project entity. + folder_entity (dict[str, Any]): Folder entity of new context. + task_entity (dict[str, Any]): Task entity of new context. + reason (Optional[str]): Reason why change happened. Currently + known reasons are that workfile is being opened or saved. + anatomy (Anatomy): Project anatomy. + + """ from ayon_core.pipeline.workfile import get_workdir project_name = self.get_current_project_name() @@ -323,28 +329,10 @@ class HostBase(ABC): if task_entity: task_name = task_entity["name"] - if ( - workdir is None - and isinstance(self, IWorkfileHost) - and folder_entity - ): - if project_entity is None: - project_entity = ayon_api.get_project(project_name) - - workdir = get_workdir( - project_entity, - folder_entity, - task_entity, - self.name, - anatomy=anatomy, - project_settings=project_settings, - ) - envs = { "AYON_PROJECT_NAME": project_name, "AYON_FOLDER_PATH": folder_path, "AYON_TASK_NAME": task_name, - "AYON_WORKDIR": workdir, } # Update the Session and environments. Pop from environments all @@ -360,8 +348,8 @@ class HostBase(ABC): project_entity: dict[str, Any], folder_entity: Optional[dict[str, Any]], task_entity: Optional[dict[str, Any]], - anatomy: "Anatomy", reason: Optional[str], + anatomy: "Anatomy", ): """Before context is changed. @@ -382,8 +370,8 @@ class HostBase(ABC): project_entity: dict[str, Any], folder_entity: dict[str, Any], task_entity: dict[str, Any], - anatomy: "Anatomy", reason: Optional[str], + anatomy: "Anatomy", ): """After context is changed. diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index ab61e608f8..97f71690f5 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -326,9 +326,7 @@ class IWorkfileHost: folder_entity, task_entity, reason=WORKFILE_SAVE_REASON, - workdir=workdir, project_entity=project_entity, - project_settings=project_settings, anatomy=anatomy, ) @@ -398,9 +396,7 @@ class IWorkfileHost: folder_entity, task_entity, reason=WORKFILE_OPEN_REASON, - workdir=workdir, project_entity=project_entity, - project_settings=project_settings, anatomy=anatomy, ) diff --git a/client/ayon_core/pipeline/context_tools.py b/client/ayon_core/pipeline/context_tools.py index c51f0ad0d9..5043902b67 100644 --- a/client/ayon_core/pipeline/context_tools.py +++ b/client/ayon_core/pipeline/context_tools.py @@ -524,11 +524,11 @@ def change_current_context( This updates the live Session to a different task under folder. Notes: - This function does a lot of things related to workfiles which + * This function does a lot of things related to workfiles which extends arguments options a lot. - We might want to implement 'set_current_context' on host integration + * We might want to implement 'set_current_context' on host integration instead. But `AYON_WORKDIR`, which is related to 'IWorkfileHost', - would not be available in that case which might be break some + would not be available in that case which might break some logic. Args: @@ -572,9 +572,8 @@ def change_current_context( folder_entity, task_entity, reason=reason, - anatomy=anatomy, project_entity=project_entity, - project_settings=project_settings, + anatomy=anatomy, ) From 63b69a915436370a0e831846a5265a7154605b61 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 14:02:13 +0200 Subject: [PATCH 088/595] added 'TemplateResult' typint --- .../pipeline/workfile/path_resolving.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index 2bb94d5c06..91867cd162 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -3,6 +3,7 @@ import os import re import copy import platform +import typing from typing import Optional, Dict, Any import ayon_api @@ -13,10 +14,12 @@ from ayon_core.lib import ( Logger, StringTemplate, ) -from ayon_core.lib.path_templates import TemplateResult from ayon_core.pipeline import version_start, Anatomy from ayon_core.pipeline.template_data import get_template_data +if typing.TYPE_CHECKING: + from ayon_core.lib.path_templates import TemplateResult + def get_workfile_template_key_from_context( project_name: str, @@ -113,7 +116,7 @@ def get_workdir_with_workdir_data( anatomy=None, template_key=None, project_settings=None -) -> TemplateResult: +) -> "TemplateResult": """Fill workdir path from entered data and project's anatomy. It is possible to pass only project's name instead of project's anatomy but @@ -157,14 +160,14 @@ def get_workdir_with_workdir_data( def get_workdir( - project_entity, - folder_entity, - task_entity, - host_name, + project_entity: dict[str, Any], + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + host_name: str, anatomy=None, template_key=None, project_settings=None -): +) -> "TemplateResult": """Fill workdir path from entered data and project's anatomy. Args: @@ -186,8 +189,8 @@ def get_workdir( Returns: TemplateResult: Workdir path. - """ + """ if not anatomy: anatomy = Anatomy( project_entity["name"], project_entity=project_entity From 0f7921741daa458083bddeed667a9d4d480dc280 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 14:07:29 +0200 Subject: [PATCH 089/595] remove unused imports --- client/ayon_core/host/host.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index 45123d74a8..e997443aa2 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -11,8 +11,6 @@ import ayon_api from ayon_core.lib import emit_event -from .interfaces import IWorkfileHost - if typing.TYPE_CHECKING: from ayon_core.pipeline import Anatomy @@ -319,8 +317,6 @@ class HostBase(ABC): anatomy (Anatomy): Project anatomy. """ - from ayon_core.pipeline.workfile import get_workdir - project_name = self.get_current_project_name() folder_path = None task_name = None From 87832f109d6739c4788a03b67065db0acb386dfc Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 14:27:47 +0200 Subject: [PATCH 090/595] modified change context function --- client/ayon_core/pipeline/context_tools.py | 25 ++++++---------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/client/ayon_core/pipeline/context_tools.py b/client/ayon_core/pipeline/context_tools.py index 5043902b67..b27d2f3920 100644 --- a/client/ayon_core/pipeline/context_tools.py +++ b/client/ayon_core/pipeline/context_tools.py @@ -513,15 +513,13 @@ def change_current_context( task_entity: dict[str, Any], *, template_key: Optional[str] = _PLACEHOLDER, - workdir: Optional[str] = _PLACEHOLDER, reason: Optional[str] = None, project_entity: Optional[dict[str, Any]] = None, - project_settings: Optional[dict[str, Any]] = None, anatomy: Optional[Anatomy] = None, -): +) -> dict[str, str]: """Update active Session to a new task work area. - This updates the live Session to a different task under folder. + This updates the live Session to a different task under a folder. Notes: * This function does a lot of things related to workfiles which @@ -536,33 +534,22 @@ def change_current_context( task_entity (Dict[str, Any]): Task entity to set. template_key (Optional[str]): DEPRECATED: Prepared template key to be used for workfile template in Anatomy. - workdir (Optional[str]): DEPRECATED: Workdir to set. reason (Optional[str]): Reason for changing context. anatomy (Optional[Anatomy]): Anatomy object used for workdir calculation. project_entity (Optional[dict[str, Any]]): Project entity used for workdir calculation. - project_settings (Optional[dict[str, Any]]): Project settings used for - workdir calculation. Returns: - Dict[str, str]: New context data. + dict[str, str]: New context data. """ - depr_args = [] if template_key is not _PLACEHOLDER: - depr_args.append("'template_key'") - - if workdir is not _PLACEHOLDER: - depr_args.append("'workdir'") - - if depr_args: - ending = "s" if len(depr_args) > 1 else "" - depr_args = ", ".join(depr_args) warnings.warn( ( - f"Used deprecated argument{ending} {depr_args}." - " To change " + f"Used deprecated argument 'template_key' in" + f" 'change_current_context'." + " It is not necessary to pass it in anymore." ), DeprecationWarning, ) From 77dbf2946bca4809a2b15b386c61e78a2cff91c7 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 14:30:08 +0200 Subject: [PATCH 091/595] added typehints and modify docstrings --- .../pipeline/workfile/path_resolving.py | 65 ++++++++++--------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index 91867cd162..21f0571888 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -213,8 +213,11 @@ def get_workdir( def get_last_workfile_with_version_from_paths( - filepaths, file_template, template_data, extensions -): + filepaths: list[str], + file_template: str, + template_data: dict[str, Any], + extensions: set[str], +) -> tuple[Optional[str], Optional[int]]: """Return last workfile version. Using workfile template and it's filling data find most possible last @@ -230,10 +233,10 @@ def get_last_workfile_with_version_from_paths( filepaths (list[str]): Workfile paths. file_template (str): Template of file name. template_data (Dict[str, Any]): Data for filling template. - extensions (Iterable[str]): All allowed file extensions of workfile. + extensions (set[str]): All allowed file extensions of workfile. Returns: - tuple[Union[str, None], Union[int, None]]: Last workfile with version + tuple[Optional[str], Optional[int]]: Last workfile with version if there is any workfile otherwise None for both. """ @@ -295,6 +298,8 @@ def get_last_workfile_with_version_from_paths( if file_version == version: output_filepaths.append(filepath) + # Use file modification time to use most recent file if there are + # multiple workfiles with the same version output_filepath = None last_time = None for _output_filepath in output_filepaths: @@ -316,10 +321,10 @@ def get_last_workfile_from_paths( file_template: str, template_data: dict[str, Any], extensions: set[str], -): - """Return last workfile filename. +) -> Optional[str]: + """Return the last workfile filename. - Returns file with version 1 if there is not workfile yet. + Returns the file with version 1 if there is not workfile yet. Args: filepaths (list[str]): Paths to workfiles. @@ -328,8 +333,7 @@ def get_last_workfile_from_paths( extensions (set[str]): All allowed file extensions of workfile. Returns: - Optional[str]: Last or first workfile as filename of full path - to filename. + Optional[str]: Last workfile path. """ filepath, _version = get_last_workfile_with_version_from_paths( @@ -341,7 +345,7 @@ def get_last_workfile_from_paths( def _filter_dir_files_by_ext( dirpath: str, extensions: set[str], -): +) -> tuple[list[str], set[str]]: """Filter files by extensions. Args: @@ -366,12 +370,15 @@ def _filter_dir_files_by_ext( def get_last_workfile_with_version( - workdir, file_template, fill_data, extensions -): + workdir: str, + file_template: str, + template_data: dict[str, Any], + extensions: set[str], +) -> tuple[Optional[str], Optional[int]]: """Return last workfile version. - Usign workfile template and it's filling data find most possible last - version of workfile which was created for the context. + Using the workfile template and its filling data to find the most possible + last version of workfile which was created for the context. Functionality is fully based on knowing which keys are optional or what values are expected as value. @@ -382,14 +389,14 @@ def get_last_workfile_with_version( Args: workdir (str): Path to dir where workfiles are stored. file_template (str): Template of file name. - fill_data (Dict[str, Any]): Data for filling template. - extensions (Iterable[str]): All allowed file extensions of workfile. + template_data (dict[str, Any]): Data for filling template. + extensions (set[str]): All allowed file extensions of workfile. Returns: - Tuple[Union[str, None], Union[int, None]]: Last workfile with version + tuple[Optional[str], Optional[int]]: Last workfile with version if there is any workfile otherwise None for both. - """ + """ if not os.path.exists(workdir): return None, None @@ -400,7 +407,7 @@ def get_last_workfile_with_version( return get_last_workfile_with_version_from_paths( filepaths, file_template, - fill_data, + template_data, dotted_extensions, ) @@ -408,10 +415,10 @@ def get_last_workfile_with_version( def get_last_workfile( workdir: str, file_template: str, - fill_data: dict[str, Any], + template_data: dict[str, Any], extensions: set[str], - full_path: bool = False -): + full_path: bool = False, +) -> str: """Return last workfile filename. Returns file with version 1 if there is not workfile yet. @@ -419,10 +426,9 @@ def get_last_workfile( Args: workdir (str): Path to dir where workfiles are stored. file_template (str): Template of file name. - fill_data (Dict[str, Any]): Data for filling template. + template_data (Dict[str, Any]): Data for filling template. extensions (Iterable[str]): All allowed file extensions of workfile. - full_path (bool): Full path to file is returned if - set to True. + full_path (bool): Return full path to the file or only filename. Returns: str: Last or first workfile as filename of full path to filename. @@ -434,11 +440,11 @@ def get_last_workfile( filepath = get_last_workfile_from_paths( filepaths, file_template, - fill_data, + template_data, dotted_extensions ) if filepath is None: - data = copy.deepcopy(fill_data) + data = copy.deepcopy(template_data) data["version"] = version_start.get_versioning_start( data["project"]["name"], data["app"], @@ -492,11 +498,10 @@ def get_custom_workfile_template( project_settings(Dict[str, Any]): Preloaded project settings. Returns: - str: Path to template or None if none of profiles match current + Optional[str]: Path to template or None if none of profiles match current context. Existence of formatted path is not validated. - None: If no profile is matching context. - """ + """ log = Logger.get_logger("CustomWorkfileResolve") project_name = project_entity["name"] From 63911161dd33cf612b23272a7b02cb83d192e28f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 14:30:24 +0200 Subject: [PATCH 092/595] add deprecation warning for 'full_path' argument --- client/ayon_core/pipeline/workfile/path_resolving.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index 21f0571888..970b351586 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -434,6 +434,18 @@ def get_last_workfile( str: Last or first workfile as filename of full path to filename. """ + # TODO (iLLiCiTiT): Remove the argument 'full_path' and return only full + # path. As far as I can tell it is always called with 'full_path' set + # to 'True'. + # - it has to be 2 step operation, first warn about having it 'False', and + # then warn about having it filled. + if full_path is False: + warnings.warn( + "Argument 'full_path' will be removed and will return" + " only full path in future.", + DeprecationWarning, + ) + filepaths, dotted_extensions = _filter_dir_files_by_ext( workdir, extensions ) From c8a7e355b4cce797e3f5396dd720a284bcdb9206 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 14:30:52 +0200 Subject: [PATCH 093/595] iterate over extensions fix --- client/ayon_core/pipeline/workfile/path_resolving.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index 970b351586..4dcd4d47f0 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -465,8 +465,8 @@ def get_last_workfile( product_type="workfile" ) data.pop("comment", None) - if not data.get("ext"): - data["ext"] = extensions[0] + if data.get("ext") is None: + data["ext"] = next(iter(extensions), "") data["ext"] = data["ext"].lstrip(".") filename = StringTemplate.format_strict_template(file_template, data) filepath = os.path.join(workdir, filename) From f130f543b8aed6f872ca92455a51d8c52a44e82a Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 14:33:15 +0200 Subject: [PATCH 094/595] add missing import --- client/ayon_core/pipeline/workfile/path_resolving.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index 4dcd4d47f0..b95d731809 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -3,6 +3,7 @@ import os import re import copy import platform +import warnings import typing from typing import Optional, Dict, Any From 79922d99b28c1093c729a3d76601861cf069929c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 14:33:23 +0200 Subject: [PATCH 095/595] update docstrings --- client/ayon_core/pipeline/workfile/path_resolving.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index b95d731809..a177caf7a4 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -221,7 +221,7 @@ def get_last_workfile_with_version_from_paths( ) -> tuple[Optional[str], Optional[int]]: """Return last workfile version. - Using workfile template and it's filling data find most possible last + Using the workfile template and its template data find most possible last version of workfile which was created for the context. Functionality is fully based on knowing which keys are optional or what @@ -511,8 +511,8 @@ def get_custom_workfile_template( project_settings(Dict[str, Any]): Preloaded project settings. Returns: - Optional[str]: Path to template or None if none of profiles match current - context. Existence of formatted path is not validated. + Optional[str]: Path to template or None if none of profiles match + current context. Existence of formatted path is not validated. """ log = Logger.get_logger("CustomWorkfileResolve") @@ -734,7 +734,7 @@ class CommentMatcher: self._fname_regex = re.compile(f"^{fname_pattern}$") def parse_comment(self, filename: str) -> Optional[str]: - """Parse the {comment} part from a filename""" + """Parse the {comment} part from a filename.""" if self._fname_regex: match = self._fname_regex.match(filename) if match: From dd637bb25d4a29eb8919a219fc92e716dcf79481 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 3 Jun 2025 14:33:31 +0200 Subject: [PATCH 096/595] use comprehention --- client/ayon_core/pipeline/workfile/utils.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index c45163e7a1..c61614205a 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -563,14 +563,15 @@ def _create_workfile_info_entity( if value is not None: attrib[key] = value - data = {} - for key, value in ( - ("host_name", host_name), - ("version", version), - ("comment", comment), - ): - if value is not None: - data[key] = value + data = { + key: value + for key, value in ( + ("host_name", host_name), + ("version", version), + ("comment", comment), + ) + if value is not None + } workfile_info = { "id": uuid.uuid4().hex, From 808712e1148bde74f3ff0005ad8e80245c15e998 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 4 Jun 2025 16:13:01 +0200 Subject: [PATCH 097/595] Apply suggestions from code review Co-authored-by: Roy Nieterau --- client/ayon_core/host/interfaces/workfiles.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 97f71690f5..e435d5dc7f 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -296,6 +296,7 @@ class IWorkfileHost: task_entity (dict[str, Any]): Task entity. version (Optional[int]): Version of the workfile. comment (Optional[str]): Comment for the workfile. + Usually used in the filename template. description (Optional[str]): Description for the workfile. rootless_path (Optional[str]): Rootless path of the workfile. workfile_entities (Optional[list[dict[str, Any]]]): Workfile From 5baf13c96cfcfb99c610a19d6ed8276e72eda2d8 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 4 Jun 2025 16:16:05 +0200 Subject: [PATCH 098/595] fix formatting --- client/ayon_core/host/interfaces/workfiles.py | 4 ++-- client/ayon_core/pipeline/context_tools.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index e435d5dc7f..f2c5dc89cf 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -610,9 +610,9 @@ class IWorkfileHost: try: workfile_path = workfile_path.format(root=anatomy.roots) - except Exception as exc: + except Exception: self.log.warning( - f"Failed to format workfile path.", exc_info=True + "Failed to format workfile path.", exc_info=True ) is_available = False diff --git a/client/ayon_core/pipeline/context_tools.py b/client/ayon_core/pipeline/context_tools.py index b27d2f3920..cccdafe6f1 100644 --- a/client/ayon_core/pipeline/context_tools.py +++ b/client/ayon_core/pipeline/context_tools.py @@ -547,8 +547,8 @@ def change_current_context( if template_key is not _PLACEHOLDER: warnings.warn( ( - f"Used deprecated argument 'template_key' in" - f" 'change_current_context'." + "Used deprecated argument 'template_key' in" + " 'change_current_context'." " It is not necessary to pass it in anymore." ), DeprecationWarning, From 509543e3690677f8dacd3dce63d5a7f5c87f151a Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 4 Jun 2025 16:21:03 +0200 Subject: [PATCH 099/595] better description of workfile_entities --- client/ayon_core/host/interfaces/workfiles.py | 15 ++++---- client/ayon_core/pipeline/workfile/utils.py | 34 +++++++++++++++---- 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index f2c5dc89cf..cbf8a8e8e4 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -299,7 +299,8 @@ class IWorkfileHost: Usually used in the filename template. description (Optional[str]): Description for the workfile. rootless_path (Optional[str]): Rootless path of the workfile. - workfile_entities (Optional[list[dict[str, Any]]]): Workfile + workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched + workfile entities for the task. project_settings (Optional[dict[str, Any]]): Project settings. project_entity (Optional[dict[str, Any]]): Project entity. anatomy (Optional[Anatomy]): Project anatomy. @@ -431,8 +432,8 @@ class IWorkfileHost: folder_entity (dict[str, Any]): Folder entity. task_entity (dict[str, Any]): Task entity. project_entity (Optional[dict[str, Any]]): Project entity. - workfile_entities (Optional[list[dict[str, Any]]]): Workfile - entities. + workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched + workfile entities for the task. template_key (Optional[str]): Template key. project_settings (Optional[dict[str, Any]]): Project settings. anatomy (Anatomy): Project anatomy. @@ -671,8 +672,8 @@ class IWorkfileHost: comment (Optional[str]): Comment for the workfile. description (Optional[str]): Description for the workfile. rootless_path (Optional[str]): Rootless path of the workfile. - workfile_entities (Optional[list[dict[str, Any]]]): Workfile - entities to be saved with the workfile. + workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched + workfile entities for the task. project_settings (Optional[dict[str, Any]]): Project settings. project_entity (Optional[dict[str, Any]]): Project entity. anatomy (Optional[Anatomy]): Project anatomy. @@ -765,8 +766,8 @@ class IWorkfileHost: comment (Optional[str]): Comment for the workfile. description (Optional[str]): Description for the workfile. rootless_path (Optional[str]): Rootless path of the workfile. - workfile_entities (Optional[list[dict[str, Any]]]): Workfile - entities to be saved with the workfile. + workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched + workfile entities for the task. project_settings (Optional[dict[str, Any]]): Project settings. project_entity (Optional[dict[str, Any]]): Project entity. anatomy (Optional[Anatomy]): Project anatomy. diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index c61614205a..1a862d7d92 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -38,7 +38,7 @@ def get_workfiles_info( task_id (str): Task id under which is workfile created. anatomy (Optional[Anatomy]): Project anatomy used to get roots. workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched - workfile entities related to task. + workfile entities related to the task. Returns: Optional[dict[str, Any]]: Workfile info entity if found, otherwise @@ -198,7 +198,25 @@ def save_workfile_info( description: Optional[str] = None, username: Optional[str] = None, workfile_entities: Optional[list[dict[str, Any]]] = None, -): +) -> dict[str, Any]: + """Save workfile info entity for a workfile path. + Args: + project_name (str): The name of the project. + task_id (str): Task id under which is workfile created. + rootless_path (str): Rootless path of the workfile. + host_name (str): Name of host which is saving the workfile. + version (Optional[int]): Workfile version. + comment (Optional[str]): Workfile comment. + description (Optional[str]): Workfile description. + username (Optional[str]): Username of user who saves the workfile. + If not provided, current user is used. + workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched + workfile entities related to task. + + Returns: + dict[str, Any]: Workfile info entity. + + """ if workfile_entities is None: workfile_entities = list(ayon_api.get_workfiles_info( project_name, @@ -266,7 +284,7 @@ def save_workfile_info( workfile_entity["updatedBy"] = username if not update_data: - return + return workfile_entity session = OperationsSession() session.update_entity( @@ -326,8 +344,8 @@ def save_current_workfile_to( description (Optional[str]): Workfile description. rootless_path (Optional[str]): Rootless path of the workfile. Is calculated if not passed in. - workfile_entities (Optional[list[dict[str, Any]]]): List of workfile - entities related to task. + workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched + workfile entities related to the task. project_entity (Optional[dict[str, Any]]): Project entity used for rootless path calculation. project_settings (Optional[dict[str, Any]]): Project settings used for @@ -385,7 +403,8 @@ def copy_and_open_workfile( description (Optional[str]): Workfile description. rootless_path (Optional[str]): Rootless path of the workfile. Is calculated if not passed in. - workfile_entities (Optional[list[dict[str, Any]]]): List of workfile + workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched + workfile entities related to the task. project_entity (Optional[dict[str, Any]]): Project entity used for rootless path calculation. project_settings (Optional[dict[str, Any]]): Project settings used for @@ -453,7 +472,8 @@ def copy_and_open_workfile_representation( entity. If not provided, it will be fetched from the server. representation_path (Optional[str]): Path to the representation. Calculated if not provided. - workfile_entities (Optional[list[dict[str, Any]]]): List of workfile + workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched + workfile entities related to the task. project_entity (Optional[dict[str, Any]]): Project entity used for rootless path calculation. project_settings (Optional[dict[str, Any]]): Project settings used for From e53962dd6e929a7a87f4262c9b41495cf673f0c1 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 6 Jun 2025 10:07:07 +0200 Subject: [PATCH 100/595] let 'version' argument optional --- client/ayon_core/host/interfaces/workfiles.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index cbf8a8e8e4..5d5cb8d740 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -276,7 +276,7 @@ class IWorkfileHost: folder_entity: dict[str, Any], task_entity: dict[str, Any], *, - version: Optional[int], + version: Optional[int] = None, comment: Optional[str] = None, description: Optional[str] = None, rootless_path: Optional[str] = None, @@ -648,7 +648,7 @@ class IWorkfileHost: folder_entity: dict[str, Any], task_entity: dict[str, Any], *, - version: Optional[int], + version: Optional[int] = None, comment: Optional[str] = None, description: Optional[str] = None, rootless_path: Optional[str] = None, @@ -739,7 +739,7 @@ class IWorkfileHost: folder_entity: dict[str, Any], task_entity: dict[str, Any], *, - version: Optional[int], + version: Optional[int] = None, comment: Optional[str] = None, description: Optional[str] = None, rootless_path: Optional[str] = None, From d97829a180ea6fc9390cf36593d28e80949be4d5 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 6 Jun 2025 10:07:18 +0200 Subject: [PATCH 101/595] filter published workfiles by extension --- client/ayon_core/host/interfaces/workfiles.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 5d5cb8d740..5c958ac846 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -520,6 +520,9 @@ class IWorkfileHost: # Workfile entity is not in the filesystem # but it is in the database rootless_path = workfile_entity["path"] + ext = os.path.splitext(rootless_path)[1].lower() + if ext not in extensions: + continue filepath = anatomy.fill_root(rootless_path) items.append(WorkfileInfo.new( filepath, From 26a35a8cb5caf266f5236501802e3400c5636c29 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 6 Jun 2025 10:07:36 +0200 Subject: [PATCH 102/595] pre-fetch project entity --- client/ayon_core/host/interfaces/workfiles.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 5c958ac846..95ef3f3318 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -311,8 +311,9 @@ class IWorkfileHost: folder_entity, task_entity, ) + project_name = self.get_current_project_name() event_data = self._get_workfile_event_data( - self.get_current_project_name(), + project_name, folder_entity, task_entity, filepath, @@ -324,6 +325,9 @@ class IWorkfileHost: # Set 'AYON_WORKDIR' environment variable os.environ["AYON_WORKDIR"] = workdir + if project_entity is None: + project_entity = ayon_api.get_project(project_name) + self.set_current_context( folder_entity, task_entity, From d3699c348fb1600b82c2589474976af5b7e3a614 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 6 Jun 2025 10:08:02 +0200 Subject: [PATCH 103/595] modified docstrings --- client/ayon_core/host/interfaces/workfiles.py | 45 +++++++++++++++---- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 95ef3f3318..f84322de90 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -287,6 +287,13 @@ class IWorkfileHost: ): """Save the current workfile with context. + Arguments 'rootless_path', 'workfile_entities', 'project_entity' + and 'anatomy' can be filled to enhance efficiency if you already + have access to the values. + + Argument 'project_settings' is used to calculate 'rootless_path' + if it is not provided. + Notes: Should this method care about context change? @@ -294,11 +301,13 @@ class IWorkfileHost: filepath (str): Where the current scene should be saved. folder_entity (dict[str, Any]): Folder entity. task_entity (dict[str, Any]): Task entity. - version (Optional[int]): Version of the workfile. + version (Optional[int]): Version of the workfile. Information + for workfile entity. Recommended to fill. comment (Optional[str]): Comment for the workfile. Usually used in the filename template. - description (Optional[str]): Description for the workfile. - rootless_path (Optional[str]): Rootless path of the workfile. + description (Optional[str]): Artist note for the workfile entity. + rootless_path (Optional[str]): Prepared rootless path of + the workfile. workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched workfile entities for the task. project_settings (Optional[dict[str, Any]]): Project settings. @@ -422,14 +431,16 @@ class IWorkfileHost: project_settings: Optional[dict[str, Any]] = None, anatomy: Optional["Anatomy"] = None, ) -> list[WorkfileInfo]: - """List workfiles in the given folder. + """List workfiles in the given task. + + The method should also return workfiles that are not available on + disk, but are in the AYON database. Notes: - Better method name? - This method is pre-implemented as the logic can be shared across 95% of host integrations. Ad-hoc implementation to give host integration workfile api functionality. - - Should this method also handle workfiles based on workfile entities? Args: project_name (str): Project name. @@ -670,14 +681,22 @@ class IWorkfileHost: It is expected that workfile is saved to the current project, but can be copied from the other project. + Arguments 'rootless_path', 'workfile_entities', 'project_entity' + and 'anatomy' can be filled to enhance efficiency if you already + have access to the values. + + Argument 'project_settings' is used to calculate 'rootless_path' + if it is not provided. + Args: src_path (str): Path to the source scene. dst_path (str): Where the scene should be saved. folder_entity (dict[str, Any]): Folder entity. task_entity (dict[str, Any]): Task entity. - version (Optional[int]): Version of the workfile. + version (Optional[int]): Version of the workfile. Information + for workfile entity. Recommended to fill. comment (Optional[str]): Comment for the workfile. - description (Optional[str]): Description for the workfile. + description (Optional[str]): Artist note for the workfile entity. rootless_path (Optional[str]): Rootless path of the workfile. workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched workfile entities for the task. @@ -762,6 +781,13 @@ class IWorkfileHost: Use representation as source for the workfile. + Arguments 'rootless_path', 'workfile_entities', 'project_entity' + and 'anatomy' can be filled to enhance efficiency if you already + have access to the values. + + Argument 'project_settings' is used to calculate 'rootless_path' + if it is not provided. + Args: src_project_name (str): Project name. src_representation_entity (dict[str, Any]): Representation @@ -769,9 +795,10 @@ class IWorkfileHost: dst_path (str): Where the scene should be saved. folder_entity (dict[str, Any): Folder entity. task_entity (dict[str, Any]): Task entity. - version (Optional[int]): Version of the workfile. + version (Optional[int]): Version of the workfile. Information + for workfile entity. Recommended to fill. comment (Optional[str]): Comment for the workfile. - description (Optional[str]): Description for the workfile. + description (Optional[str]): Artist note for the workfile entity. rootless_path (Optional[str]): Rootless path of the workfile. workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched workfile entities for the task. From 76ceefb6f38fbd67a9403605b13e75e2e6d0173b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 6 Jun 2025 10:08:29 +0200 Subject: [PATCH 104/595] require kwargs for 'list_workfiles' --- client/ayon_core/host/interfaces/workfiles.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index f84322de90..5a3b9f117f 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -425,6 +425,7 @@ class IWorkfileHost: project_name: str, folder_entity: dict[str, Any], task_entity: dict[str, Any], + *, project_entity: Optional[dict[str, Any]] = None, workfile_entities: Optional[list[dict[str, Any]]] = None, template_key: Optional[str] = None, From 3e6aafae556fae48ded5d32e38e5844f0ee2e556 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 6 Jun 2025 10:08:59 +0200 Subject: [PATCH 105/595] apply suggestion Co-authored-by: Roy Nieterau --- client/ayon_core/host/interfaces/workfiles.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 5a3b9f117f..86b751ba66 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -237,7 +237,7 @@ class IWorkfileHost: Returns: Optional[str]: Path to the file which is currently opened. None if - nothing is opened. + nothing is opened or the current workfile is unsaved. """ return None From 351ab7d56bc2b9add8f193489a0ce4e3ef30098e Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 6 Jun 2025 11:24:32 +0200 Subject: [PATCH 106/595] use 'open_workfile' to open workfile --- client/ayon_core/pipeline/workfile/workfile_template_builder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/workfile_template_builder.py b/client/ayon_core/pipeline/workfile/workfile_template_builder.py index 27da278c5e..45edf01172 100644 --- a/client/ayon_core/pipeline/workfile/workfile_template_builder.py +++ b/client/ayon_core/pipeline/workfile/workfile_template_builder.py @@ -604,7 +604,7 @@ class AbstractTemplateBuilder(ABC): """Open template file with registered host.""" template_preset = self.get_template_preset() template_path = template_preset["path"] - self.host.open_file(template_path) + self.host.open_workfile(template_path) @abstractmethod def import_template(self, template_path): From 0b20e49eda6eb85b3b3c32039ee24a3880fc12e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Je=C5=BEek?= Date: Fri, 6 Jun 2025 16:07:06 +0200 Subject: [PATCH 107/595] Update client/ayon_core/pipeline/colorspace.py Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/pipeline/colorspace.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/colorspace.py b/client/ayon_core/pipeline/colorspace.py index a7d1d80b0a..41241e17ca 100644 --- a/client/ayon_core/pipeline/colorspace.py +++ b/client/ayon_core/pipeline/colorspace.py @@ -1404,7 +1404,7 @@ def _get_display_view_colorspace_name(config_path, display, view): """ config = _get_ocio_config(config_path) colorspace = config.getDisplayViewColorSpaceName(display, view) - # Special token. See https://opencolorio.readthedocs.io/en/latest/guides/authoring/authoring.html#shared-views # noqa + # Special token. See https://opencolorio.readthedocs.io/en/latest/guides/authoring/authoring.html#shared-views # noqa if colorspace == "": colorspace = display From 762f98620baca0220b463eb8b9d2769063b5dbf5 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 6 Jun 2025 16:33:17 +0200 Subject: [PATCH 108/595] use dataclasses to pass information form method to method --- client/ayon_core/host/host.py | 50 ++--- client/ayon_core/host/interfaces/workfiles.py | 172 +++++++++--------- 2 files changed, 103 insertions(+), 119 deletions(-) diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index e997443aa2..f9f74e8069 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -4,6 +4,7 @@ import os import logging import contextlib from abc import ABC, abstractmethod +from dataclasses import dataclass import typing from typing import Optional, Any @@ -15,6 +16,16 @@ if typing.TYPE_CHECKING: from ayon_core.pipeline import Anatomy +@dataclass +class ContextChangeData: + project_entity: dict[str, Any] + folder_entity: dict[str, Any] + task_entity: dict[str, Any] + reason: Optional[str] + anatomy: "Anatomy" + + + class HostBase(ABC): """Base of host implementation class. @@ -198,13 +209,14 @@ class HostBase(ABC): if anatomy is None: anatomy = Anatomy(project_name, project_entity=project_entity) - self._before_context_change( + context_change_data = ContextChangeData( project_entity, folder_entity, task_entity, reason, anatomy, ) + self._before_context_change(context_change_data) self._set_current_context( project_entity, folder_entity, @@ -212,13 +224,7 @@ class HostBase(ABC): reason, anatomy, ) - self._after_context_change( - project_entity, - folder_entity, - task_entity, - reason, - anatomy, - ) + self._after_context_change(context_change_data) return self._emit_context_change_event( project_name, @@ -339,14 +345,7 @@ class HostBase(ABC): else: os.environ[key] = value - def _before_context_change( - self, - project_entity: dict[str, Any], - folder_entity: Optional[dict[str, Any]], - task_entity: Optional[dict[str, Any]], - reason: Optional[str], - anatomy: "Anatomy", - ): + def _before_context_change(self, context_change_data: ContextChangeData): """Before context is changed. This method is called before the context is changed in the host. @@ -354,21 +353,13 @@ class HostBase(ABC): Can be overriden to implement host specific logic. Args: - folder_entity (dict[str, Any]): Folder entity. - task_entity (dict[str, Any]): Task entity. - reason (Optional[str]): Reason for context change. + context_change_data (ContextChangeData): Object with information + about context change. """ pass - def _after_context_change( - self, - project_entity: dict[str, Any], - folder_entity: dict[str, Any], - task_entity: dict[str, Any], - reason: Optional[str], - anatomy: "Anatomy", - ): + def _after_context_change(self, context_change_data: ContextChangeData): """After context is changed. This method is called after the context is changed in the host. @@ -376,9 +367,8 @@ class HostBase(ABC): Can be overriden to implement host specific logic. Args: - folder_entity (dict[str, Any]): Folder entity. - task_entity (dict[str, Any]): Task entity. - reason (Optional[str]): Reason for context change. + context_change_data (ContextChangeData): Object with information + about context change. """ pass diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 86b751ba66..53776f1ce8 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -21,6 +21,29 @@ WORKFILE_OPEN_REASON = "workfile.opened" WORKFILE_SAVE_REASON = "workfile.saved" +@dataclass +class WorkfileOpenData: + filepath: str + folder_entity: dict[str, Any] + task_entity: dict[str, Any] + + +@dataclass +class WorkfileSaveData(WorkfileOpenData): + filepath: str + folder_entity: dict[str, Any] + task_entity: dict[str, Any] + + +@dataclass +class WorkfileCopyData: + source_path: str + destination_path: str + folder_entity: dict[str, Any] + task_entity: dict[str, Any] + open_workfile: bool + + @dataclass class WorkfileInfo: """Information about workfile. @@ -315,11 +338,12 @@ class IWorkfileHost: anatomy (Optional[Anatomy]): Project anatomy. """ - self._before_workfile_save( - filepath, - folder_entity, - task_entity, + save_workfile_data = WorkfileSaveData( + folder_entity=folder_entity, + task_entity=task_entity, + filepath=filepath, ) + self._before_workfile_save(save_workfile_data) project_name = self.get_current_project_name() event_data = self._get_workfile_event_data( project_name, @@ -360,11 +384,7 @@ class IWorkfileHost: project_entity, anatomy, ) - self._after_workfile_save( - filepath, - folder_entity, - task_entity, - ) + self._after_workfile_save(save_workfile_data) self._emit_workfile_save_event(event_data) def open_workfile_with_context( @@ -403,8 +423,12 @@ class IWorkfileHost: event_data = self._get_workfile_event_data( project_name, folder_entity, task_entity, filepath ) - - self._before_workfile_open(folder_entity, task_entity, filepath) + open_workfile_data = WorkfileOpenData( + folder_entity=folder_entity, + task_entity=task_entity, + filepath=filepath, + ) + self._before_workfile_open(open_workfile_data) self._emit_workfile_open_event(event_data, after_open=False) self.set_current_context( @@ -417,7 +441,7 @@ class IWorkfileHost: self.open_workfile(filepath) - self._after_workfile_open(folder_entity, task_entity, filepath) + self._after_workfile_open(open_workfile_data) self._emit_workfile_open_event(event_data) def list_workfiles( @@ -707,13 +731,15 @@ class IWorkfileHost: open_workfile (bool): Open workfile when copied. """ - self._before_workfile_copy( - src_path, - dst_path, - folder_entity, - task_entity, - open_workfile, + copy_workfile_data = WorkfileCopyData( + source_path=src_path, + destination_path=dst_path, + folder_entity=folder_entity, + task_entity=task_entity, + open_workfile=open_workfile, + ) + self._before_workfile_copy(copy_workfile_data) event_data = self._get_workfile_event_data( self.get_current_project_name(), folder_entity, @@ -740,13 +766,7 @@ class IWorkfileHost: project_entity, anatomy, ) - self._after_workfile_copy( - src_path, - dst_path, - folder_entity, - task_entity, - open_workfile, - ) + self._after_workfile_copy(copy_workfile_data) self._emit_workfile_save_event(event_data) if not open_workfile: @@ -1046,11 +1066,8 @@ class IWorkfileHost: } def _before_workfile_open( - self, - folder_entity: dict[str, Any], - task_entity: dict[str, Any], - filepath: str, - ): + self, open_workfile_data: WorkfileOpenData + ) -> None: """Before workfile is opened. This method is called before the workfile is opened in the host. @@ -1058,19 +1075,15 @@ class IWorkfileHost: Can be overriden to implement host specific logic. Args: - folder_entity (dict[str, Any]): Folder entity. - task_entity (dict[str, Any]): Task entity. - filepath (str): Path to the workfile. + open_workfile_data (WorkfileOpenData): Context and path of + workfile to open. """ pass def _after_workfile_open( - self, - folder_entity: dict[str, Any], - task_entity: dict[str, Any], - filepath: str, - ): + self, open_workfile_data: WorkfileOpenData + ) -> None: """After workfile is opened. This method is called after the workfile is opened in the host. @@ -1078,19 +1091,15 @@ class IWorkfileHost: Can be overriden to implement host specific logic. Args: - folder_entity (dict[str, Any]): Folder entity. - task_entity (dict[str, Any]): Task entity. - filepath (str): Path to the workfile. + open_workfile_data (WorkfileOpenData): Context and path of + opened workfile. """ pass def _before_workfile_save( - self, - filepath: str, - folder_entity: dict[str, Any], - task_entity: dict[str, Any], - ): + self, save_workfile_data: WorkfileSaveData + ) -> None: """Before workfile is saved. This method is called before the workfile is saved in the host. @@ -1098,19 +1107,15 @@ class IWorkfileHost: Can be overriden to implement host specific logic. Args: - filepath (str): Path to the workfile. - folder_entity (dict[str, Any]): Folder entity. - task_entity (dict[str, Any]): Task entity. + save_workfile_data (WorkfileSaveData): Workfile path with target + folder and task context. """ pass def _after_workfile_save( - self, - filepath: str, - folder_entity: dict[str, Any], - task_entity: dict[str, Any], - ): + self, save_workfile_data: WorkfileSaveData + ) -> None: """After workfile is saved. This method is called after the workfile is saved in the host. @@ -1118,22 +1123,20 @@ class IWorkfileHost: Can be overriden to implement host specific logic. Args: - folder_entity (dict[str, Any]): Folder entity. - task_entity (dict[str, Any]): Task entity. - filepath (str): Path to the workfile. + save_workfile_data (WorkfileSaveData): Workfile path with target + folder and task context. """ - workdir = os.path.dirname(filepath) - self._create_extra_folders(folder_entity, task_entity, workdir) + workdir = os.path.dirname(save_workfile_data.filepath) + self._create_extra_folders( + save_workfile_data.folder_entity, + save_workfile_data.task_entity, + workdir + ) def _before_workfile_copy( - self, - src_path: str, - dst_path: str, - folder_entity: dict[str, Any], - task_entity: dict[str, Any], - open_workfile: bool = True, - ): + self, copy_workfile_data: WorkfileCopyData + ) -> None: """Before workfile is copied. This method is called before the workfile is copied by host @@ -1142,24 +1145,15 @@ class IWorkfileHost: Can be overriden to implement host specific logic. Args: - src_path (str): Path to the source workfile. - dst_path (str): Path to the destination workfile. - folder_entity (dict[str, Any]): Folder entity. - task_entity (dict[str, Any]): Task entity. - open_workfile (bool): Should be the path opened once copy is - finished. + copy_workfile_data (WorkfileCopyData): Source and destination + path with context before workfile is copied. """ pass def _after_workfile_copy( - self, - src_path: str, - dst_path: str, - folder_entity: dict[str, Any], - task_entity: dict[str, Any], - open_workfile: bool = True, - ): + self, copy_workfile_data: WorkfileCopyData + ) -> None: """After workfile is copied. This method is called after the workfile is copied by host @@ -1168,22 +1162,22 @@ class IWorkfileHost: Can be overriden to implement host specific logic. Args: - src_path (str): Path to the source workfile. - dst_path (str): Path to the destination workfile. - folder_entity (dict[str, Any]): Folder entity. - task_entity (dict[str, Any]): Task entity. - open_workfile (bool): Should be the path opened once copy is - finished. + copy_workfile_data (WorkfileCopyData): Source and destination + path with context after workfile is copied. """ - workdir = os.path.dirname(dst_path) - self._create_extra_folders(folder_entity, task_entity, workdir) + workdir = os.path.dirname(copy_workfile_data.destination_path) + self._create_extra_folders( + copy_workfile_data.folder_entity, + copy_workfile_data.task_entity, + workdir, + ) def _emit_workfile_open_event( self, event_data: dict[str, Optional[str]], after_open: bool = True, - ): + ) -> None: topics = [] topic_end = "before" if after_open: @@ -1200,7 +1194,7 @@ class IWorkfileHost: self, event_data: dict[str, Optional[str]], after_open: bool = True, - ): + ) -> None: topics = [] topic_end = "before" if after_open: From 688e5f2104b3563a09724d4b264bb4c4f144973c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 6 Jun 2025 16:55:07 +0200 Subject: [PATCH 109/595] remove unnecessary line --- client/ayon_core/host/interfaces/workfiles.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 53776f1ce8..d5aec5b651 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -737,7 +737,6 @@ class IWorkfileHost: folder_entity=folder_entity, task_entity=task_entity, open_workfile=open_workfile, - ) self._before_workfile_copy(copy_workfile_data) event_data = self._get_workfile_event_data( From da1a39ed6ad15437b946617630f45efedf312e86 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 6 Jun 2025 17:03:25 +0200 Subject: [PATCH 110/595] validate extension earlier Co-authored-by: Roy Nieterau --- client/ayon_core/host/interfaces/workfiles.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index d5aec5b651..f6f6b91f2d 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -539,12 +539,13 @@ class IWorkfileHost: items = [] for filename in filenames: - filepath = os.path.join(workdir, filename) # TODO add 'default' support for folders - ext = os.path.splitext(filepath)[1].lower() + ext = os.path.splitext(filename)[1].lower() if ext not in extensions: continue + filepath = os.path.join(workdir, filename) + rootless_path = f"{rootless_workdir}/{filename}" workfile_entity = workfile_entities_by_path.pop( rootless_path, None From 411c433d50ed8bf4b0ea84d9872e7b07d17d342c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 6 Jun 2025 17:06:58 +0200 Subject: [PATCH 111/595] added typehints --- client/ayon_core/host/host.py | 7 +++++-- client/ayon_core/host/interfaces/workfiles.py | 21 ++++++++++++------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index f9f74e8069..1c2885b7e6 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -25,7 +25,6 @@ class ContextChangeData: anatomy: "Anatomy" - class HostBase(ABC): """Base of host implementation class. @@ -169,7 +168,7 @@ class HostBase(ABC): reason: Optional[str] = None, project_entity: Optional[dict[str, Any]] = None, anatomy: Optional["Anatomy"] = None, - ): + ) -> dict[str, Optional[str]]: """Set current context information. This method should be used to set current context of host. Usage of @@ -188,6 +187,10 @@ class HostBase(ABC): project_entity (Optional[dict[str, Any]]): Project entity data. anatomy (Optional[Anatomy]): Anatomy instance for the project. + Returns: + dict[str, Optional[str]]: Context information with project name, + folder path and task name. + """ from ayon_core.pipeline import Anatomy diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index f6f6b91f2d..76e91dcd93 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -186,7 +186,7 @@ class PublishedWorkfileInfo: file_size: Optional[float], file_modified: Optional[float], file_created: Optional[float], - ): + ) -> "PublishedWorkfileInfo": created_at = arrow.get(repre_entity["createdAt"]).to("local") return cls( @@ -307,7 +307,7 @@ class IWorkfileHost: project_settings: Optional[dict[str, Any]] = None, project_entity: Optional[dict[str, Any]] = None, anatomy: Optional["Anatomy"] = None, - ): + ) -> None: """Save the current workfile with context. Arguments 'rootless_path', 'workfile_entities', 'project_entity' @@ -396,7 +396,7 @@ class IWorkfileHost: project_entity: Optional[dict[str, Any]] = None, project_settings: Optional[dict[str, Any]] = None, anatomy: Optional["Anatomy"] = None, - ): + ) -> None: """Open passed filepath in the host with context. This function should be used to open workfile in different context. @@ -701,7 +701,7 @@ class IWorkfileHost: project_entity: Optional[dict[str, Any]] = None, anatomy: Optional["Anatomy"] = None, open_workfile: bool = True, - ): + ) -> None: """Save workfile path with target folder and task context. It is expected that workfile is saved to the current project, but @@ -797,7 +797,7 @@ class IWorkfileHost: open_workfile: bool = True, src_anatomy: Optional["Anatomy"] = None, src_representation_path: Optional[str] = None, - ): + ) -> None: """Copy workfile representation. Use representation as source for the workfile. @@ -984,7 +984,7 @@ class IWorkfileHost: project_settings: Optional[dict[str, Any]] = None, project_entity: Optional[dict[str, Any]] = None, anatomy: Optional["Anatomy"] = None, - ): + ) -> Optional[dict[str, Any]]: from ayon_core.pipeline.workfile.utils import ( save_workfile_info, find_workfile_rootless_path, @@ -1029,7 +1029,12 @@ class IWorkfileHost: ) return workfile_info - def _create_extra_folders(self, folder_entity, task_entity, workdir): + def _create_extra_folders( + self, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + workdir: str, + ) -> None: from ayon_core.pipeline.workfile.path_resolving import ( create_workdir_extra_folders ) @@ -1051,7 +1056,7 @@ class IWorkfileHost: folder_entity: dict[str, Any], task_entity: dict[str, Any], filepath: str, - ): + ) -> dict[str, Optional[str]]: workdir, filename = os.path.split(filepath) return { "project_name": project_name, From 0c25defb9d5f3a82597fdfcbc0af6befc20207b6 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 6 Jun 2025 17:17:10 +0200 Subject: [PATCH 112/595] added more docstrings --- client/ayon_core/host/interfaces/workfiles.py | 92 +++++++++++++++++-- 1 file changed, 86 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 76e91dcd93..d5f17b9acb 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -351,7 +351,7 @@ class IWorkfileHost: task_entity, filepath, ) - self._emit_workfile_save_event(event_data, after_open=False) + self._emit_workfile_save_event(event_data, after_save=False) workdir = os.path.dirname(filepath) @@ -612,7 +612,7 @@ class IWorkfileHost: ( version_entities, repre_entities - ) = self._fetch_workfile_entities( + ) = self._fetch_published_workfile_entities( project_name, folder_id, version_entities, @@ -746,7 +746,7 @@ class IWorkfileHost: task_entity, dst_path, ) - self._emit_workfile_save_event(event_data, after_open=False) + self._emit_workfile_save_event(event_data, after_save=False) dst_dir = os.path.dirname(dst_path) if not os.path.exists(dst_dir): @@ -921,7 +921,7 @@ class IWorkfileHost: return self.workfile_has_unsaved_changes() - def _fetch_workfile_entities( + def _fetch_published_workfile_entities( self, project_name: str, folder_id: str, @@ -931,6 +931,21 @@ class IWorkfileHost: list[dict[str, Any]], list[dict[str, Any]] ]: + """Fetch integrated workfile entities for the given folder. + + Args: + project_name (str): Project name. + folder_id (str): Folder id. + version_entities (Optional[list[dict[str, Any]]]): Pre-fetched + version entities. + repre_entities (Optional[list[dict[str, Any]]]): Pre-fetched + representation entities. + + Returns: + tuple[list[dict[str, Any]], list[dict[str, Any]]]: + Tuple of version entities and representation entities. + + """ if repre_entities is not None and version_entities is None: # Get versions of representations version_ids = {r["versionId"] for r in repre_entities} @@ -985,6 +1000,27 @@ class IWorkfileHost: project_entity: Optional[dict[str, Any]] = None, anatomy: Optional["Anatomy"] = None, ) -> Optional[dict[str, Any]]: + """Create of update workfile entity to AYON based on provided data. + + Args: + workfile_path (str): Path to the workfile. + folder_entity (dict[str, Any]): Folder entity. + task_entity (dict[str, Any]): Task entity. + version (Optional[int]): Version of the workfile. + comment (Optional[str]): Comment for the workfile. + description (Optional[str]): Artist note for the workfile entity. + rootless_path (Optional[str]): Prepared rootless path of + the workfile. + workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched + workfile entities. + project_settings (Optional[dict[str, Any]]): Project settings. + project_entity (Optional[dict[str, Any]]): Project entity. + anatomy (Optional[Anatomy]): Project anatomy. + + Returns: + Optional[dict[str, Any]]: Workfile entity. + + """ from ayon_core.pipeline.workfile.utils import ( save_workfile_info, find_workfile_rootless_path, @@ -1035,6 +1071,16 @@ class IWorkfileHost: task_entity: dict[str, Any], workdir: str, ) -> None: + """Create extra folders in the workdir. + + This method should be called when workfile is saved or copied. + + Args: + folder_entity (dict[str, Any]): Folder entity. + task_entity (dict[str, Any]): Task entity. + workdir (str): Workdir where workfile/s will be stored. + + """ from ayon_core.pipeline.workfile.path_resolving import ( create_workdir_extra_folders ) @@ -1057,6 +1103,18 @@ class IWorkfileHost: task_entity: dict[str, Any], filepath: str, ) -> dict[str, Optional[str]]: + """Prepare workfile event data. + + Args: + project_name (str): Name of the project where workfile lives. + folder_entity (dict[str, Any]): Folder entity. + task_entity (dict[str, Any]): Task entity. + filepath (str): Path to the workfile. + + Returns: + dict[str, Optional[str]]: Data for workfile event. + + """ workdir, filename = os.path.split(filepath) return { "project_name": project_name, @@ -1183,6 +1241,17 @@ class IWorkfileHost: event_data: dict[str, Optional[str]], after_open: bool = True, ) -> None: + """Emit workfile save event. + + Emit event before and after workfile is opened. + + Other addons can listen to this event and do additional steps. + + Args: + event_data (dict[str, Optional[str]]): Prepare event data. + after_open (bool): Emit event after workfile is opened. + + """ topics = [] topic_end = "before" if after_open: @@ -1198,11 +1267,22 @@ class IWorkfileHost: def _emit_workfile_save_event( self, event_data: dict[str, Optional[str]], - after_open: bool = True, + after_save: bool = True, ) -> None: + """Emit workfile save event. + + Emit event before and after workfile is saved or copied. + + Other addons can listen to this event and do additional steps. + + Args: + event_data (dict[str, Optional[str]]): Prepare event data. + after_save (bool): Emit event after workfile is saved. + + """ topics = [] topic_end = "before" - if after_open: + if after_save: topics.append("workfile.saved") topic_end = "after" From 397bfd23ebc865d74016b1e63bb27f1cebaf6fde Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 6 Jun 2025 18:04:00 +0200 Subject: [PATCH 113/595] added deprecation warnings --- client/ayon_core/host/interfaces/workfiles.py | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index d5f17b9acb..b300adc308 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -4,6 +4,8 @@ import os import platform import shutil import typing +import warnings +import functools from abc import abstractmethod from dataclasses import dataclass, asdict from typing import Optional, Any @@ -21,6 +23,26 @@ WORKFILE_OPEN_REASON = "workfile.opened" WORKFILE_SAVE_REASON = "workfile.saved" +def deprecated(reason): + def decorator(func): + message = f"Call to deprecated function {func.__name__} ({reason})." + + @functools.wraps(func) + def new_func(*args, **kwargs): + warnings.simplefilter("always", DeprecationWarning) + warnings.warn( + message, + category=DeprecationWarning, + stacklevel=2 + ) + warnings.simplefilter("default", DeprecationWarning) + return func(*args, **kwargs) + + return new_func + + return decorator + + @dataclass class WorkfileOpenData: filepath: str @@ -876,6 +898,7 @@ class IWorkfileHost: ) # --- Deprecated method names --- + @deprecated("Use 'get_workfile_extensions' instead") def file_extensions(self): """Deprecated variant of 'get_workfile_extensions'. @@ -885,40 +908,44 @@ class IWorkfileHost: """ return self.get_workfile_extensions() + @deprecated("Use 'save_workfile' instead") def save_file(self, dst_path=None): """Deprecated variant of 'save_workfile'. Todo: - Remove when all usages are replaced. + Remove when all usages are replaced """ self.save_workfile(dst_path) + @deprecated("Use 'open_workfile' instead") def open_file(self, filepath): """Deprecated variant of 'open_workfile'. Todo: Remove when all usages are replaced. - """ + """ return self.open_workfile(filepath) + @deprecated("Use 'get_current_workfile' instead") def current_file(self): """Deprecated variant of 'get_current_workfile'. Todo: Remove when all usages are replaced. - """ + """ return self.get_current_workfile() + @deprecated("Use 'workfile_has_unsaved_changes' instead") def has_unsaved_changes(self): """Deprecated variant of 'workfile_has_unsaved_changes'. Todo: Remove when all usages are replaced. - """ + """ return self.workfile_has_unsaved_changes() def _fetch_published_workfile_entities( From 7eb067a99d917e761093180387805529d754d842 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 6 Jun 2025 18:05:33 +0200 Subject: [PATCH 114/595] remove safe type hint --- client/ayon_core/host/host.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index 1c2885b7e6..ad6a805575 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -22,7 +22,7 @@ class ContextChangeData: folder_entity: dict[str, Any] task_entity: dict[str, Any] reason: Optional[str] - anatomy: "Anatomy" + anatomy: Anatomy class HostBase(ABC): @@ -167,7 +167,7 @@ class HostBase(ABC): *, reason: Optional[str] = None, project_entity: Optional[dict[str, Any]] = None, - anatomy: Optional["Anatomy"] = None, + anatomy: Optional[Anatomy] = None, ) -> dict[str, Optional[str]]: """Set current context information. @@ -310,7 +310,7 @@ class HostBase(ABC): folder_entity: Optional[dict[str, Any]], task_entity: Optional[dict[str, Any]], reason: Optional[str], - anatomy: "Anatomy", + anatomy: Anatomy, ): """Method that changes the context in host. From a23678beb1c526b5185dca74dcb30137638d6901 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 6 Jun 2025 18:07:36 +0200 Subject: [PATCH 115/595] use 'ContextChangeData' for '_set_current_context' --- client/ayon_core/host/host.py | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index ad6a805575..c7c2b30323 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -220,13 +220,7 @@ class HostBase(ABC): anatomy, ) self._before_context_change(context_change_data) - self._set_current_context( - project_entity, - folder_entity, - task_entity, - reason, - anatomy, - ) + self._set_current_context(context_change_data) self._after_context_change(context_change_data) return self._emit_context_change_event( @@ -305,13 +299,8 @@ class HostBase(ABC): return data def _set_current_context( - self, - project_entity: dict[str, Any], - folder_entity: Optional[dict[str, Any]], - task_entity: Optional[dict[str, Any]], - reason: Optional[str], - anatomy: Anatomy, - ): + self, context_change_data: ContextChangeData + ) -> None: """Method that changes the context in host. Can be overriden for hosts that do need different handling of context @@ -329,10 +318,10 @@ class HostBase(ABC): project_name = self.get_current_project_name() folder_path = None task_name = None - if folder_entity: - folder_path = folder_entity["path"] - if task_entity: - task_name = task_entity["name"] + if context_change_data.folder_entity: + folder_path = context_change_data.folder_entity["path"] + if context_change_data.task_entity: + task_name = context_change_data.task_entity["name"] envs = { "AYON_PROJECT_NAME": project_name, From 873db37794114f84a32250fe78431c446fe46038 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 6 Jun 2025 18:08:55 +0200 Subject: [PATCH 116/595] don't use safe typehint --- client/ayon_core/host/interfaces/workfiles.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index b300adc308..ce0c680f16 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -147,7 +147,7 @@ class WorkfileInfo: return asdict(self) @classmethod - def from_data(cls, data: dict[str, Any]) -> "WorkfileInfo": + def from_data(cls, data: dict[str, Any]) -> WorkfileInfo: """Converts data to workfile item. Args: @@ -328,7 +328,7 @@ class IWorkfileHost: workfile_entities: Optional[list[dict[str, Any]]] = None, project_settings: Optional[dict[str, Any]] = None, project_entity: Optional[dict[str, Any]] = None, - anatomy: Optional["Anatomy"] = None, + anatomy: Optional[Anatomy] = None, ) -> None: """Save the current workfile with context. @@ -417,7 +417,7 @@ class IWorkfileHost: *, project_entity: Optional[dict[str, Any]] = None, project_settings: Optional[dict[str, Any]] = None, - anatomy: Optional["Anatomy"] = None, + anatomy: Optional[Anatomy] = None, ) -> None: """Open passed filepath in the host with context. @@ -476,7 +476,7 @@ class IWorkfileHost: workfile_entities: Optional[list[dict[str, Any]]] = None, template_key: Optional[str] = None, project_settings: Optional[dict[str, Any]] = None, - anatomy: Optional["Anatomy"] = None, + anatomy: Optional[Anatomy] = None, ) -> list[WorkfileInfo]: """List workfiles in the given task. @@ -601,7 +601,7 @@ class IWorkfileHost: project_name: str, folder_id: str, *, - anatomy: Optional["Anatomy"] = None, + anatomy: Optional[Anatomy] = None, version_entities: Optional[list[dict[str, Any]]] = None, repre_entities: Optional[list[dict[str, Any]]] = None, ) -> list[PublishedWorkfileInfo]: @@ -721,7 +721,7 @@ class IWorkfileHost: workfile_entities: Optional[list[dict[str, Any]]] = None, project_settings: Optional[dict[str, Any]] = None, project_entity: Optional[dict[str, Any]] = None, - anatomy: Optional["Anatomy"] = None, + anatomy: Optional[Anatomy] = None, open_workfile: bool = True, ) -> None: """Save workfile path with target folder and task context. @@ -815,9 +815,9 @@ class IWorkfileHost: workfile_entities: Optional[list[dict[str, Any]]] = None, project_settings: Optional[dict[str, Any]] = None, project_entity: Optional[dict[str, Any]] = None, - anatomy: Optional["Anatomy"] = None, + anatomy: Optional[Anatomy] = None, open_workfile: bool = True, - src_anatomy: Optional["Anatomy"] = None, + src_anatomy: Optional[Anatomy] = None, src_representation_path: Optional[str] = None, ) -> None: """Copy workfile representation. @@ -1025,7 +1025,7 @@ class IWorkfileHost: workfile_entities: Optional[list[dict[str, Any]]] = None, project_settings: Optional[dict[str, Any]] = None, project_entity: Optional[dict[str, Any]] = None, - anatomy: Optional["Anatomy"] = None, + anatomy: Optional[Anatomy] = None, ) -> Optional[dict[str, Any]]: """Create of update workfile entity to AYON based on provided data. From 0bf1e9a9349e352af4bf22982159a6d4fd2b4d51 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 12 Jun 2025 11:42:21 +0200 Subject: [PATCH 117/595] add indentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ondřej Samohel <33513211+antirotor@users.noreply.github.com> --- client/ayon_core/host/interfaces/workfiles.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index ce0c680f16..73f5c2ba37 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -610,9 +610,9 @@ class IWorkfileHost: The default implementation looks for products with the 'workfile' product type. - Pre-fetched entities have mandatory fields to be fetched. - - Version: 'id', 'author', 'taskId' - - Representation: 'id', 'versionId', 'files' + Pre-fetched entities have mandatory fields to be fetched: + - Version: 'id', 'author', 'taskId' + - Representation: 'id', 'versionId', 'files' Args: project_name (str): Project name. From e3114d85b8372d8b03e31920a1fa1aea2d77f8f9 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 12 Jun 2025 11:46:05 +0200 Subject: [PATCH 118/595] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ondřej Samohel <33513211+antirotor@users.noreply.github.com> --- client/ayon_core/host/interfaces/workfiles.py | 6 +++--- client/ayon_core/pipeline/workfile/utils.py | 17 +++++++++-------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 73f5c2ba37..096f39a9f3 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -74,7 +74,7 @@ class WorkfileInfo: Attributes: filepath (str): Path to the workfile. - rootless_path (str): Path to the workfile without root. And without + rootless_path (str): Path to the workfile without the root. And without backslashes on Windows. file_size (Optional[float]): Size of the workfile in bytes. file_created (Optional[float]): Timestamp when the workfile was @@ -256,7 +256,7 @@ class IWorkfileHost: """ @abstractmethod - def save_workfile(self, dst_path: Optional[str] = None): + def save_workfile(self, dst_path: Optional[str] = None) -> None: """Save the currently opened scene. Args: @@ -267,7 +267,7 @@ class IWorkfileHost: pass @abstractmethod - def open_workfile(self, filepath: str): + def open_workfile(self, filepath: str) -> None: """Open passed filepath in the host. Args: diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 1a862d7d92..570d1a1259 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -247,14 +247,15 @@ def save_workfile_info( description, ) - data = {} - for key, value in ( - ("host_name", host_name), - ("version", version), - ("comment", comment), - ): - if value is not None: - data[key] = value + data = { + key: value + for key, value in ( + ("host_name", host_name), + ("version", version), + ("comment", comment), + ) + if value is not None + } old_data = workfile_entity["data"] From 21737339d37432cc62f83d88839711f6dc5e32fd Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 12 Jun 2025 15:46:23 +0200 Subject: [PATCH 119/595] rename 'oiiotool_transcode' to 'oiio_color_convert' --- client/ayon_core/lib/transcoding.py | 8 ++++---- .../ayon_core/plugins/publish/extract_color_transcode.py | 4 ++-- client/ayon_core/plugins/publish/extract_thumbnail.py | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/client/ayon_core/lib/transcoding.py b/client/ayon_core/lib/transcoding.py index 4f985d5128..97e9f417f0 100644 --- a/client/ayon_core/lib/transcoding.py +++ b/client/ayon_core/lib/transcoding.py @@ -1010,7 +1010,7 @@ def convert_ffprobe_fps_to_float(value): # --- Deprecated functions --- -@deprecated("oiiotool_transcode") +@deprecated("oiio_color_convert") def convert_colorspace( input_path, output_path, @@ -1022,7 +1022,7 @@ def convert_colorspace( additional_command_args=None, logger=None, ): - """DEPRECATED function use `oiiotool_transcode` instead + """DEPRECATED function use `oiio_color_convert` instead Args: input_path (str): Path to input file that should be converted. @@ -1047,7 +1047,7 @@ def convert_colorspace( Raises: ValueError: If parameters are misconfigured. """ - return oiiotool_transcode( + return oiio_color_convert( input_path, output_path, config_path, @@ -1060,7 +1060,7 @@ def convert_colorspace( ) -def oiiotool_transcode( +def oiio_color_convert( input_path, output_path, config_path, diff --git a/client/ayon_core/plugins/publish/extract_color_transcode.py b/client/ayon_core/plugins/publish/extract_color_transcode.py index 9759b340c7..152e0a27ea 100644 --- a/client/ayon_core/plugins/publish/extract_color_transcode.py +++ b/client/ayon_core/plugins/publish/extract_color_transcode.py @@ -11,7 +11,7 @@ from ayon_core.lib import ( is_oiio_supported, ) from ayon_core.lib.transcoding import ( - oiiotool_transcode, + oiio_color_convert, ) from ayon_core.lib.profiles_filtering import filter_profiles @@ -170,7 +170,7 @@ class ExtractOIIOTranscode(publish.Extractor): new_staging_dir, output_extension) - oiiotool_transcode( + oiio_color_convert( input_path=input_path, output_path=output_path, config_path=config_path, diff --git a/client/ayon_core/plugins/publish/extract_thumbnail.py b/client/ayon_core/plugins/publish/extract_thumbnail.py index 4d51405f01..541082352b 100644 --- a/client/ayon_core/plugins/publish/extract_thumbnail.py +++ b/client/ayon_core/plugins/publish/extract_thumbnail.py @@ -15,7 +15,7 @@ from ayon_core.lib import ( path_to_subprocess_arg, run_subprocess, ) -from ayon_core.lib.transcoding import oiiotool_transcode +from ayon_core.lib.transcoding import oiio_color_convert from ayon_core.lib.transcoding import VIDEO_EXTENSIONS, IMAGE_EXTENSIONS @@ -431,7 +431,7 @@ class ExtractThumbnail(pyblish.api.InstancePlugin): oiio_default_view = display_and_view["view"] try: - oiiotool_transcode( + oiio_color_convert( src_path, dst_path, colorspace_data["config"]["path"], From 28978f07c654446c3af3b64e54cc93bff879bd56 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 12 Jun 2025 15:50:21 +0200 Subject: [PATCH 120/595] use standard conditions --- client/ayon_core/lib/transcoding.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/client/ayon_core/lib/transcoding.py b/client/ayon_core/lib/transcoding.py index 97e9f417f0..01a21615b5 100644 --- a/client/ayon_core/lib/transcoding.py +++ b/client/ayon_core/lib/transcoding.py @@ -1134,19 +1134,13 @@ def oiio_color_convert( ]) # Validate input parameters - if all([target_colorspace, target_view, target_display]): + if target_colorspace and target_view and target_display: raise ValueError( "Colorspace and both screen and display cannot be set together." "Choose colorspace or screen and display" ) - if all([source_view, source_display]) and source_colorspace: - logger.warning( - "Both source display/view and source_colorspace provided. " - "Using source display/view pair and ignoring source_colorspace." - ) - - if not target_colorspace and not all([target_view, target_display]): + if not target_colorspace and not target_view and not target_display: raise ValueError( "Both screen and display must be set if target_colorspace is not " "provided." @@ -1161,6 +1155,12 @@ def oiio_color_convert( "display/view inputs." ) + if source_view and source_display and source_colorspace: + logger.warning( + "Both source display/view and source_colorspace provided. " + "Using source display/view pair and ignoring source_colorspace." + ) + if additional_command_args: oiio_cmd.extend(additional_command_args) From 3eb88ae8506eac6dbbd8fd8f94abf88703c7bc72 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 12 Jun 2025 15:50:34 +0200 Subject: [PATCH 121/595] use 'view' instead of 'screen' --- client/ayon_core/lib/transcoding.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/lib/transcoding.py b/client/ayon_core/lib/transcoding.py index 01a21615b5..7a4fd65e7c 100644 --- a/client/ayon_core/lib/transcoding.py +++ b/client/ayon_core/lib/transcoding.py @@ -1136,7 +1136,7 @@ def oiio_color_convert( # Validate input parameters if target_colorspace and target_view and target_display: raise ValueError( - "Colorspace and both screen and display cannot be set together." + "Colorspace and both view and display cannot be set together." "Choose colorspace or screen and display" ) From 2b209044ed4861668b908ee08f2115805eb0fa77 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 12 Jun 2025 15:50:44 +0200 Subject: [PATCH 122/595] better conditions order --- client/ayon_core/lib/transcoding.py | 83 ++++++++++++----------------- 1 file changed, 35 insertions(+), 48 deletions(-) diff --git a/client/ayon_core/lib/transcoding.py b/client/ayon_core/lib/transcoding.py index 7a4fd65e7c..bf88e187ae 100644 --- a/client/ayon_core/lib/transcoding.py +++ b/client/ayon_core/lib/transcoding.py @@ -1165,64 +1165,51 @@ def oiio_color_convert( oiio_cmd.extend(additional_command_args) # Handle the different conversion cases - if target_colorspace: - # Case 1: Converting to a named colorspace - if all([source_view, source_display]): - # First convert from source display/view to a role/reference space - # that can be used with colorconvert - # For example, converting to "scene_linear" or an appropriate - # intermediate space + # Source view and display are known + if source_view and source_display: + if target_colorspace: # This is a two-step conversion process since there's no direct # display/view to colorspace command # This could be a config parameter or determined from OCIO config - tmp_role_space = "scene_linear" + # Use temporarty role space 'scene_linear' + color_convert_args = ("scene_linear", target_colorspace) + elif source_display != target_display or source_view != target_view: + # Complete display/view pair conversion + # - go through a reference space + color_convert_args = (target_display, target_view) + else: + color_convert_args = None + logger.debug( + "Source and target display/view pairs are identical." + " No color conversion needed." + ) + + if color_convert_args: oiio_cmd.extend([ "--ociodisplay:inverse=1:subimages=0", source_display, source_view, "--colorconvert:subimages=0", - tmp_role_space, - target_colorspace, - ]) - else: - # Standard color space to color space conversion - oiio_cmd.extend([ - "--colorconvert:subimages=0", - source_colorspace, - target_colorspace, - ]) - else: # Using display/view target - if all([source_view, source_display]): - if source_display == target_display and source_view == target_view: - # No conversion needed if source and target display/view are - # the same - logger.debug( - "Source and target display/view pairs are identical. " - "No color conversion needed." - ) - else: - # Complete display/view pair conversion - # Similar approach: go through a reference space - # This could be configured - tmp_role_space = "scene_linear" - oiio_cmd.extend([ - "--ociodisplay:inverse=1:subimages=0", - source_display, - source_view, - "--ociodisplay:subimages=0", - target_display, - target_view, - ]) - else: - # Standard conversion from colorspace to display/view - oiio_cmd.extend([ - "--iscolorspace", - source_colorspace, - "--ociodisplay:subimages=0", - target_display, - target_view, + *color_convert_args ]) + elif target_colorspace: + # Standard color space to color space conversion + oiio_cmd.extend([ + "--colorconvert:subimages=0", + source_colorspace, + target_colorspace, + ]) + else: + # Standard conversion from colorspace to display/view + oiio_cmd.extend([ + "--iscolorspace", + source_colorspace, + "--ociodisplay:subimages=0", + target_display, + target_view, + ]) + oiio_cmd.extend(["-o", output_path]) logger.debug("Conversion command: {}".format(" ".join(oiio_cmd))) From 2e798f9ee2610dcfcbd8d7e5999f3ff969f4f2ce Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 16 Jun 2025 10:25:22 +0200 Subject: [PATCH 123/595] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ondřej Samohel <33513211+antirotor@users.noreply.github.com> --- client/ayon_core/host/host.py | 4 ++-- client/ayon_core/host/interfaces/workfiles.py | 14 +++++++------- client/ayon_core/pipeline/workfile/utils.py | 1 + 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index c7c2b30323..191f6d4f4b 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -342,7 +342,7 @@ class HostBase(ABC): This method is called before the context is changed in the host. - Can be overriden to implement host specific logic. + Can be overridden to implement host specific logic. Args: context_change_data (ContextChangeData): Object with information @@ -356,7 +356,7 @@ class HostBase(ABC): This method is called after the context is changed in the host. - Can be overriden to implement host specific logic. + Can be overridden to implement host specific logic. Args: context_change_data (ContextChangeData): Object with information diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 096f39a9f3..36a35f297a 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -822,7 +822,7 @@ class IWorkfileHost: ) -> None: """Copy workfile representation. - Use representation as source for the workfile. + Use representation as a source for the workfile. Arguments 'rootless_path', 'workfile_entities', 'project_entity' and 'anatomy' can be filled to enhance efficiency if you already @@ -1162,7 +1162,7 @@ class IWorkfileHost: This method is called before the workfile is opened in the host. - Can be overriden to implement host specific logic. + Can be overridden to implement host specific logic. Args: open_workfile_data (WorkfileOpenData): Context and path of @@ -1178,7 +1178,7 @@ class IWorkfileHost: This method is called after the workfile is opened in the host. - Can be overriden to implement host specific logic. + Can be overridden to implement host specific logic. Args: open_workfile_data (WorkfileOpenData): Context and path of @@ -1194,7 +1194,7 @@ class IWorkfileHost: This method is called before the workfile is saved in the host. - Can be overriden to implement host specific logic. + Can be overridden to implement host specific logic. Args: save_workfile_data (WorkfileSaveData): Workfile path with target @@ -1210,7 +1210,7 @@ class IWorkfileHost: This method is called after the workfile is saved in the host. - Can be overriden to implement host specific logic. + Can be overridden to implement host specific logic. Args: save_workfile_data (WorkfileSaveData): Workfile path with target @@ -1232,7 +1232,7 @@ class IWorkfileHost: This method is called before the workfile is copied by host integration. - Can be overriden to implement host specific logic. + Can be overridden to implement host specific logic. Args: copy_workfile_data (WorkfileCopyData): Source and destination @@ -1249,7 +1249,7 @@ class IWorkfileHost: This method is called after the workfile is copied by host integration. - Can be overriden to implement host specific logic. + Can be overridden to implement host specific logic. Args: copy_workfile_data (WorkfileCopyData): Source and destination diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 570d1a1259..d3c30d932a 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -200,6 +200,7 @@ def save_workfile_info( workfile_entities: Optional[list[dict[str, Any]]] = None, ) -> dict[str, Any]: """Save workfile info entity for a workfile path. + Args: project_name (str): The name of the project. task_id (str): Task id under which is workfile created. From 34d9289f3c88861242fe79cbbec1239d55787ebb Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 16 Jun 2025 14:42:04 +0200 Subject: [PATCH 124/595] remove invalid returns typehints --- client/ayon_core/pipeline/workfile/utils.py | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index d3c30d932a..87aa06fb87 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -334,7 +334,7 @@ def save_current_workfile_to( project_entity: Optional[dict[str, Any]] = None, project_settings: Optional[dict[str, Any]] = None, anatomy: Optional["Anatomy"] = None, -): +) -> None: """Save current workfile to new location or context. Args: @@ -355,9 +355,6 @@ def save_current_workfile_to( anatomy (Optional[Anatomy]): Project anatomy used for rootless path calculation. - Returns: - dict[str, Any]: Workfile info entity. - """ from ayon_core.pipeline.context_tools import registered_host @@ -392,7 +389,7 @@ def copy_and_open_workfile( project_entity: Optional[dict[str, Any]] = None, project_settings: Optional[dict[str, Any]] = None, anatomy: Optional["Anatomy"] = None, -): +) -> None: """Copy workfile to new location and open it. Args: @@ -414,9 +411,6 @@ def copy_and_open_workfile( anatomy (Optional[Anatomy]): Project anatomy used for rootless path calculation. - Returns: - dict[str, Any]: Workfile info entity. - """ from ayon_core.pipeline.context_tools import registered_host @@ -456,7 +450,7 @@ def copy_and_open_workfile_representation( project_settings: Optional[dict[str, Any]] = None, anatomy: Optional["Anatomy"] = None, src_anatomy: Optional["Anatomy"] = None, -): +) -> None: """Copy workfile to new location and open it. Args: @@ -483,9 +477,6 @@ def copy_and_open_workfile_representation( anatomy (Optional[Anatomy]): Project anatomy used for rootless path calculation. - Returns: - dict[str, Any]: Workfile info entity. - """ from ayon_core.pipeline.context_tools import registered_host From 09858f61e1ceedbf90b400434f211b37d2233517 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 16 Jun 2025 14:48:37 +0200 Subject: [PATCH 125/595] added typeddict for context data --- client/ayon_core/host/host.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index 191f6d4f4b..c957f4ee22 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -15,6 +15,13 @@ from ayon_core.lib import emit_event if typing.TYPE_CHECKING: from ayon_core.pipeline import Anatomy + from typing import TypedDict + + class HostContextData(TypedDict): + project_name: str + folder_path: Optional[str] + task_name: Optional[str] + @dataclass class ContextChangeData: @@ -141,7 +148,7 @@ class HostBase(ABC): return os.environ.get("AYON_TASK_NAME") - def get_current_context(self) -> dict[str, Optional[str]]: + def get_current_context(self) -> "HostContextData": """Get current context information. This method should be used to get current context of host. Usage of @@ -168,7 +175,7 @@ class HostBase(ABC): reason: Optional[str] = None, project_entity: Optional[dict[str, Any]] = None, anatomy: Optional[Anatomy] = None, - ) -> dict[str, Optional[str]]: + ) -> "HostContextData": """Set current context information. This method should be used to set current context of host. Usage of @@ -281,7 +288,7 @@ class HostBase(ABC): project_name: str, folder_path: Optional[str], task_name: Optional[str], - ): + ) -> "HostContextData": """Emit context change event. Args: @@ -289,6 +296,9 @@ class HostBase(ABC): folder_path (Optional[str]): Path of the folder. task_name (Optional[str]): Name of the task. + Returns: + HostContextData: Data send to context change event. + """ data = { "project_name": project_name, From a237a2441abb0e121215b77e599ee5f7910214ed Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 17 Jun 2025 09:25:09 +0200 Subject: [PATCH 126/595] change core support for per project bundles --- package.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package.py b/package.py index 908d34ffa8..9b4a15d24e 100644 --- a/package.py +++ b/package.py @@ -6,6 +6,8 @@ client_dir = "ayon_core" plugin_for = ["ayon_server"] +project_can_override_addon_version = True + ayon_server_version = ">=1.8.4,<2.0.0" ayon_launcher_version = ">=1.0.2" ayon_required_addons = {} From 76665860174d97715ef352b6111229f62d24e101 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 17 Jun 2025 13:45:30 +0200 Subject: [PATCH 127/595] use kwargs --- client/ayon_core/host/interfaces/workfiles.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 36a35f297a..6b11c2fce6 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -107,6 +107,7 @@ class WorkfileInfo: cls, filepath: str, rootless_path: str, + *, available: bool, workfile_entity: dict[str, Any], ): @@ -202,6 +203,7 @@ class PublishedWorkfileInfo: folder_id: str, task_id: Optional[str], repre_entity: dict[str, Any], + *, filepath: str, author: str, available: bool, @@ -696,12 +698,12 @@ class IWorkfileHost: folder_id, task_id, repre_entity, - workfile_path, - version_entity["author"], - is_available, - file_size, - file_created, - file_modified, + filepath=workfile_path, + author=version_entity["author"], + available=is_available, + file_size=file_size, + file_created=file_created, + file_modified=file_modified, ) items.append(workfile_item) From 0ae72c8e46a2a0aeedb171cdac1abed96f35bcea Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 17 Jun 2025 13:52:28 +0200 Subject: [PATCH 128/595] small enhancmement of docstring --- client/ayon_core/pipeline/workfile/path_resolving.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index a177caf7a4..4f100a219e 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -432,7 +432,8 @@ def get_last_workfile( full_path (bool): Return full path to the file or only filename. Returns: - str: Last or first workfile as filename of full path to filename. + str: Last or first workfile file name or path based on + 'full_path' value. """ # TODO (iLLiCiTiT): Remove the argument 'full_path' and return only full From 48bc7a0769fb6fb19b5696652387653b55279056 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 17 Jun 2025 13:53:28 +0200 Subject: [PATCH 129/595] small clarity enhancement --- client/ayon_core/pipeline/workfile/path_resolving.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index 4f100a219e..4e4c70a27c 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -420,9 +420,9 @@ def get_last_workfile( extensions: set[str], full_path: bool = False, ) -> str: - """Return last workfile filename. + """Return last the workfile filename. - Returns file with version 1 if there is not workfile yet. + Returns first file name/path if there are not workfiles yet. Args: workdir (str): Path to dir where workfiles are stored. From 8b35eb38492d21bb00d969164c828f7b8f8c8a0c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 18 Jun 2025 16:29:59 +0200 Subject: [PATCH 130/595] fix kwargs --- client/ayon_core/pipeline/workfile/utils.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 87aa06fb87..3a04424ee4 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -364,9 +364,9 @@ def save_current_workfile_to( workfile_path, folder_entity, task_entity, - version, - comment, - description, + version=version, + comment=comment, + description=description, rootless_path=rootless_path, workfile_entities=workfile_entities, project_entity=project_entity, From 3e5e873ad07afba9ebe9955e552be1936d04ef75 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 18 Jun 2025 16:49:16 +0200 Subject: [PATCH 131/595] added helper function to save current file with current context --- client/ayon_core/pipeline/workfile/utils.py | 65 ++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 3a04424ee4..f64f68850b 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -358,7 +358,6 @@ def save_current_workfile_to( """ from ayon_core.pipeline.context_tools import registered_host - # Trigger before save event host = registered_host() host.save_workfile_with_context( workfile_path, @@ -375,6 +374,70 @@ def save_current_workfile_to( ) +def save_workfile_with_current_context( + workfile_path: str, + *, + version: Optional[int] = None, + comment: Optional[str] = None, + description: Optional[str] = None, + rootless_path: Optional[str] = None, + workfile_entities: Optional[list[dict[str, Any]]] = None, + project_entity: Optional[dict[str, Any]] = None, + project_settings: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, +) -> None: + """Save current workfile to new location using current context. + + Helper function to save workfile using current context. Calls + 'save_current_workfile_to' at the end. + + Args: + workfile_path (str): Destination workfile path. + version (Optional[int]): Workfile version. + comment (optional[str]): Workfile comment. + description (Optional[str]): Workfile description. + rootless_path (Optional[str]): Rootless path of the workfile. Is + calculated if not passed in. + workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched + workfile entities related to the task. + project_entity (Optional[dict[str, Any]]): Project entity used for + rootless path calculation. + project_settings (Optional[dict[str, Any]]): Project settings used for + rootless path calculation. + anatomy (Optional[Anatomy]): Project anatomy used for rootless + path calculation. + + """ + from ayon_core.pipeline.context_tools import registered_host + + host = registered_host() + context = host.get_current_context() + project_name = context["project_name"] + folder_path = context["folder_path"] + task_name = context["task_name"] + folder_entity = task_entity = None + if folder_path: + folder_entity = ayon_api.get_folder_by_path(project_name, folder_path) + if folder_entity and task_name: + task_entity = ayon_api.get_task_by_name( + project_name, folder_entity["id"], task_name + ) + + save_current_workfile_to( + workfile_path, + folder_entity, + task_entity, + version=version, + comment=comment, + description=description, + rootless_path=rootless_path, + workfile_entities=workfile_entities, + project_entity=project_entity, + project_settings=project_settings, + anatomy=anatomy, + ) + + def copy_and_open_workfile( src_workfile_path: str, workfile_path: str, From f673abebc8393c9fdce5faf18291d2015fa0b039 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 19 Jun 2025 10:29:45 +0200 Subject: [PATCH 132/595] use 'view' instead of 'screen' Co-authored-by: Roy Nieterau --- client/ayon_core/lib/transcoding.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/lib/transcoding.py b/client/ayon_core/lib/transcoding.py index bf88e187ae..a4edf0aa1c 100644 --- a/client/ayon_core/lib/transcoding.py +++ b/client/ayon_core/lib/transcoding.py @@ -1142,7 +1142,7 @@ def oiio_color_convert( if not target_colorspace and not target_view and not target_display: raise ValueError( - "Both screen and display must be set if target_colorspace is not " + "Both view and display must be set if target_colorspace is not " "provided." ) From ab363bf77eab85fee7593a719c3853c94d63c3d9 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 23 Jun 2025 17:10:23 +0200 Subject: [PATCH 133/595] remove typehint --- client/ayon_core/host/host.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index c957f4ee22..d562fcbe65 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -124,7 +124,7 @@ class HostBase(ABC): pass - def get_current_project_name(self) -> str: + def get_current_project_name(self): """ Returns: Union[str, None]: Current project name. From 1e7c9db988434bb2b27e7a73b1a4af102497b576 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 26 Jun 2025 09:25:20 +0200 Subject: [PATCH 134/595] define context change reason enum --- client/ayon_core/host/__init__.py | 3 +++ client/ayon_core/host/constants.py | 15 +++++++++++++++ client/ayon_core/host/host.py | 8 +++++--- client/ayon_core/host/interfaces/workfiles.py | 9 +++------ 4 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 client/ayon_core/host/constants.py diff --git a/client/ayon_core/host/__init__.py b/client/ayon_core/host/__init__.py index b252b03d76..ef5c324028 100644 --- a/client/ayon_core/host/__init__.py +++ b/client/ayon_core/host/__init__.py @@ -1,3 +1,4 @@ +from .constants import ContextChangeReason from .host import ( HostBase, ) @@ -15,6 +16,8 @@ from .dirmap import HostDirmap __all__ = ( + "ContextChangeReason", + "HostBase", "IWorkfileHost", diff --git a/client/ayon_core/host/constants.py b/client/ayon_core/host/constants.py new file mode 100644 index 0000000000..2564c5d54d --- /dev/null +++ b/client/ayon_core/host/constants.py @@ -0,0 +1,15 @@ +from enum import Enum + + +class StrEnum(str, Enum): + """A string-based Enum class that allows for string comparison.""" + + def __str__(self) -> str: + return self.value + + +class ContextChangeReason(StrEnum): + """Reasons for context change in the host.""" + undefined = "undefined" + workfile_open = "workfile.opened" + workfile_save = "workfile.saved" diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index d562fcbe65..554b694240 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -12,6 +12,8 @@ import ayon_api from ayon_core.lib import emit_event +from .constants import ContextChangeReason + if typing.TYPE_CHECKING: from ayon_core.pipeline import Anatomy @@ -28,7 +30,7 @@ class ContextChangeData: project_entity: dict[str, Any] folder_entity: dict[str, Any] task_entity: dict[str, Any] - reason: Optional[str] + reason: ContextChangeReason anatomy: Anatomy @@ -172,7 +174,7 @@ class HostBase(ABC): folder_entity: dict[str, Any], task_entity: dict[str, Any], *, - reason: Optional[str] = None, + reason: ContextChangeReason = ContextChangeReason.undefined, project_entity: Optional[dict[str, Any]] = None, anatomy: Optional[Anatomy] = None, ) -> "HostContextData": @@ -190,7 +192,7 @@ class HostBase(ABC): Args: folder_entity (Optional[dict[str, Any]]): Folder entity. task_entity (Optional[dict[str, Any]]): Task entity. - reason (Optional[str]): Reason for context change. + reason (ContextChangeReason): Reason for context change. project_entity (Optional[dict[str, Any]]): Project entity data. anatomy (Optional[Anatomy]): Anatomy instance for the project. diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 6b11c2fce6..559660a6e9 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -14,15 +14,12 @@ import ayon_api import arrow from ayon_core.lib import emit_event +from ayon_core.host.constants import ContextChangeReason if typing.TYPE_CHECKING: from ayon_core.pipeline import Anatomy -WORKFILE_OPEN_REASON = "workfile.opened" -WORKFILE_SAVE_REASON = "workfile.saved" - - def deprecated(reason): def decorator(func): message = f"Call to deprecated function {func.__name__} ({reason})." @@ -388,9 +385,9 @@ class IWorkfileHost: self.set_current_context( folder_entity, task_entity, - reason=WORKFILE_SAVE_REASON, project_entity=project_entity, anatomy=anatomy, + reason=ContextChangeReason.workfile_save, ) self.save_workfile(filepath) @@ -458,9 +455,9 @@ class IWorkfileHost: self.set_current_context( folder_entity, task_entity, - reason=WORKFILE_OPEN_REASON, project_entity=project_entity, anatomy=anatomy, + reason=ContextChangeReason.workfile_open, ) self.open_workfile(filepath) From 1d40243df5325cf639bbdc12b5a0f3d0adfd33ba Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 26 Jun 2025 09:25:26 +0200 Subject: [PATCH 135/595] fix typehint --- client/ayon_core/host/host.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index 554b694240..7fc4b19bdd 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -319,12 +319,8 @@ class HostBase(ABC): than using environment variables. Args: - project_entity (dict[str, Any]): Project entity. - folder_entity (dict[str, Any]): Folder entity of new context. - task_entity (dict[str, Any]): Task entity of new context. - reason (Optional[str]): Reason why change happened. Currently - known reasons are that workfile is being opened or saved. - anatomy (Anatomy): Project anatomy. + context_change_data (ContextChangeData): Context change related + data. """ project_name = self.get_current_project_name() From 646f3bedd4a786caf6e2fda7d812dce270966fb1 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 26 Jun 2025 10:18:38 +0200 Subject: [PATCH 136/595] wrap optional arguments into wrappers --- client/ayon_core/host/interfaces/__init__.py | 48 +- client/ayon_core/host/interfaces/workfiles.py | 1060 ++++++++++++----- client/ayon_core/pipeline/workfile/utils.py | 130 +- .../tools/workfiles/models/workfiles.py | 106 +- 4 files changed, 877 insertions(+), 467 deletions(-) diff --git a/client/ayon_core/host/interfaces/__init__.py b/client/ayon_core/host/interfaces/__init__.py index 379d8555fb..8f11ad4e2f 100644 --- a/client/ayon_core/host/interfaces/__init__.py +++ b/client/ayon_core/host/interfaces/__init__.py @@ -1,5 +1,30 @@ from .exceptions import MissingMethodsError -from .workfiles import IWorkfileHost, WorkfileInfo, PublishedWorkfileInfo +from .workfiles import ( + IWorkfileHost, + WorkfileInfo, + PublishedWorkfileInfo, + + OpenWorkfileOptionalData, + ListWorkfilesOptionalData, + ListPublishedWorkfilesOptionalData, + SaveWorkfileOptionalData, + CopyWorkfileOptionalData, + CopyPublishedWorkfileOptionalData, + + get_open_workfile_context, + get_list_workfiles_context, + get_list_published_workfiles_context, + get_save_workfile_context, + get_copy_workfile_context, + get_copy_repre_workfile_context, + + OpenWorkfileContext, + ListWorkfilesContext, + ListPublishedWorkfilesContext, + SaveWorkfileContext, + CopyWorkfileContext, + CopyPublishedWorkfileContext, +) from .interfaces import ( IPublishHost, INewPublisher, @@ -14,6 +39,27 @@ __all__ = ( "WorkfileInfo", "PublishedWorkfileInfo", + "OpenWorkfileOptionalData", + "ListWorkfilesOptionalData", + "ListPublishedWorkfilesOptionalData", + "SaveWorkfileOptionalData", + "CopyWorkfileOptionalData", + "CopyPublishedWorkfileOptionalData", + + "get_open_workfile_context", + "get_list_workfiles_context", + "get_list_published_workfiles_context", + "get_save_workfile_context", + "get_copy_workfile_context", + "get_copy_repre_workfile_context", + + "OpenWorkfileContext", + "ListWorkfilesContext", + "ListPublishedWorkfilesContext", + "SaveWorkfileContext", + "CopyWorkfileContext", + "CopyPublishedWorkfileContext", + "IPublishHost", "INewPublisher", "ILoadHost", diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 559660a6e9..8bc0b1cf85 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -14,6 +14,7 @@ import ayon_api import arrow from ayon_core.lib import emit_event +from ayon_core.settings import get_project_settings from ayon_core.host.constants import ContextChangeReason if typing.TYPE_CHECKING: @@ -40,29 +41,560 @@ def deprecated(reason): return decorator +# Wrappers for optional arguments that might change in future +class _WorkfileOptionalData: + """Base class for optional data used in workfile operations.""" + def __init__( + self, + *, + project_entity: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, + project_settings: Optional[dict[str, Any]] = None, + **kwargs + ): + if kwargs: + cls_name = self.__class__.__name__ + keys = ", ".join(['"{}"'.format(k) for k in kwargs.keys()]) + warnings.warn( + f"Unknown keywords passed to {cls_name}: {keys}", + ) + + self.project_entity = project_entity + self.anatomy = anatomy + self.project_settings = project_settings + + def get_project_data( + self, project_name: str + ) -> tuple[dict[str, Any], "Anatomy", dict[str, Any]]: + from ayon_core.pipeline import Anatomy + + project_entity = self.project_entity + anatomy = self.anatomy + project_settings = self.project_settings + + if project_entity is None: + project_entity = ayon_api.get_project(project_name) + + if anatomy is None: + anatomy = Anatomy( + project_name, + project_entity=project_entity + ) + + if project_settings is None: + project_settings = get_project_settings(project_name) + return ( + project_entity, + anatomy, + project_settings, + ) + + +class OpenWorkfileOptionalData(_WorkfileOptionalData): + """Optional data for opening workfile.""" + data_version = 1 + + +class ListWorkfilesOptionalData(_WorkfileOptionalData): + """Optional data to list workfiles.""" + data_version = 1 + + def __init__( + self, + *, + template_key: Optional[str] = None, + workfile_entities: Optional[list[dict[str, Any]]] = None, + **kwargs + ): + super().__init__(**kwargs) + self.template_key = template_key + self.workfile_entities = workfile_entities + + def get_template_key( + self, + project_name: str, + task_type: str, + host_name: str, + project_settings: dict[str, Any], + ) -> str: + from ayon_core.pipeline.workfile import get_workfile_template_key + + if self.template_key is not None: + return self.template_key + + return get_workfile_template_key( + project_name=project_name, + task_type=task_type, + host_name=host_name, + project_settings=project_settings, + ) + + def get_workfile_entities( + self, project_name: str, task_id: str + ) -> list[dict[str, Any]]: + """Fill workfile entities if not provided.""" + if self.workfile_entities is not None: + return self.workfile_entities + return list(ayon_api.get_workfiles_info( + project_name, task_ids=[task_id] + )) + + +class ListPublishedWorkfilesOptionalData(_WorkfileOptionalData): + """Optional data to list published workfiles.""" + data_version = 1 + + def __init__( + self, + *, + product_entities: Optional[list[dict[str, Any]]] = None, + version_entities: Optional[list[dict[str, Any]]] = None, + repre_entities: Optional[list[dict[str, Any]]] = None, + **kwargs + ): + super().__init__(**kwargs) + + self.product_entities = product_entities + self.version_entities = version_entities + self.repre_entities = repre_entities + + def get_entities( + self, + project_name: str, + folder_id: str, + ) -> tuple[ + list[dict[str, Any]], + list[dict[str, Any]], + list[dict[str, Any]] + ]: + product_entities = self.product_entities + if product_entities is None: + product_entities = list(ayon_api.get_products( + project_name, + folder_ids={folder_id}, + product_types={"workfile"}, + fields={"id", "name"}, + )) + + version_entities = self.version_entities + if version_entities is None: + product_ids = {p["id"] for p in product_entities} + version_entities = list(ayon_api.get_versions( + project_name, + product_ids=product_ids, + task_ids=task_filters, + fields={"id", "author", "taskId"}, + )) + + repre_entities = self.repre_entities + if repre_entities is None: + version_ids = {v["id"] for v in version_entities} + repre_entities = list(ayon_api.get_representations( + project_name, + version_ids=version_ids, + )) + return product_entities, version_entities, repre_entities + + +class SaveWorkfileOptionalData(_WorkfileOptionalData): + """Optional data to save workfile.""" + data_version = 1 + + def __init__( + self, + *, + rootless_path: Optional[str] = None, + workfile_entities: Optional[list[dict[str, Any]]] = None, + **kwargs + ): + super().__init__(**kwargs) + + self.rootless_path = rootless_path + self.workfile_entities = workfile_entities + + def get_workfile_entities(self, project_name: str, task_id: str): + """Fill workfile entities if not provided.""" + if self.workfile_entities is not None: + return self.workfile_entities + return list(ayon_api.get_workfiles_info( + project_name, task_ids=[task_id] + )) + + def get_rootless_path( + self, + workfile_path: str, + project_name: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + host_name: str, + project_entity: dict[str, Any], + project_settings: dict[str, Any], + anatomy: "Anatomy", + ): + from ayon_core.pipeline.workfile.utils import ( + find_workfile_rootless_path + ) + + if self.rootless_path is not None: + return self.rootless_path + + return find_workfile_rootless_path( + workfile_path, + project_name, + folder_entity, + task_entity, + host_name, + project_entity=project_entity, + project_settings=project_settings, + anatomy=anatomy, + ) + + +class CopyWorkfileOptionalData(SaveWorkfileOptionalData): + """Optional data to copy workfile.""" + data_version = 1 + + +class CopyPublishedWorkfileOptionalData(SaveWorkfileOptionalData): + """Optional data to copy published workfile.""" + data_version = 1 + + def __init__( + self, + src_anatomy: Optional["Anatomy"] = None, + src_representation_path: Optional[str] = None, + **kwargs + ): + super().__init__(**kwargs) + self.src_anatomy = src_anatomy + self.src_representation_path = src_representation_path + + def get_source_data( + self, + current_anatomy: Optional["Anatomy"], + project_name: str, + representation_entity: dict[str, Any], + ) -> tuple["Anatomy", str]: + from ayon_core.pipeline import Anatomy + from ayon_core.pipeline.load import ( + get_representation_path_with_anatomy + ) + + src_anatomy = self.src_anatomy + + if ( + src_anatomy is None + and current_anatomy is not None + and current_anatomy.project_name == project_name + ): + src_anatomy = current_anatomy + else: + src_anatomy = Anatomy(project_name) + + repre_path = self.src_representation_path + if repre_path is None: + repre_path = get_representation_path_with_anatomy( + representation_entity, + src_anatomy, + ) + return src_anatomy, repre_path + + +# Dataclasses used during workfile operations @dataclass -class WorkfileOpenData: +class OpenWorkfileContext: + data_version: int + project_name: str filepath: str + project_entity: dict[str, Any] folder_entity: dict[str, Any] task_entity: dict[str, Any] + anatomy: "Anatomy" + project_settings: dict[str, Any] @dataclass -class WorkfileSaveData(WorkfileOpenData): - filepath: str +class ListWorkfilesContext: + data_version: int + project_name: str + project_entity: dict[str, Any] folder_entity: dict[str, Any] task_entity: dict[str, Any] + anatomy: "Anatomy" + project_settings: dict[str, Any] + template_key: str + workfile_entities: list[dict[str, Any]] @dataclass -class WorkfileCopyData: - source_path: str - destination_path: str +class ListPublishedWorkfilesContext: + data_version: int + project_name: str + project_entity: dict[str, Any] + folder_id: str + anatomy: "Anatomy" + project_settings: dict[str, Any] + product_entities: list[dict[str, Any]] + version_entities: list[dict[str, Any]] + repre_entities: list[dict[str, Any]] + + +@dataclass +class SaveWorkfileContext: + data_version: int + project_name: str + project_entity: dict[str, Any] folder_entity: dict[str, Any] task_entity: dict[str, Any] + anatomy: "Anatomy" + project_settings: dict[str, Any] + dst_path: str + rootless_path: str + workfile_entities: list[dict[str, Any]] + + +@dataclass +class CopyWorkfileContext(SaveWorkfileContext): + src_path: str + version: Optional[int] + comment: Optional[str] + description: Optional[str] open_workfile: bool +@dataclass +class CopyPublishedWorkfileContext(CopyWorkfileContext): + src_project_name: str + src_representation_entity: dict[str, Any] + src_anatomy: "Anatomy" + + +def get_open_workfile_context( + project_name: str, + filepath: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + prepared_data: Optional[OpenWorkfileOptionalData], +) -> OpenWorkfileContext: + if prepared_data is None: + prepared_data = OpenWorkfileOptionalData() + ( + project_entity, anatomy, project_settings + ) = prepared_data.get_project_data(project_name) + return OpenWorkfileContext( + data_version=prepared_data.data_version, + filepath=filepath, + folder_entity=folder_entity, + task_entity=task_entity, + project_name=project_name, + project_entity=project_entity, + anatomy=anatomy, + project_settings=project_settings, + ) + + +def get_list_workfiles_context( + project_name: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + host_name: str, + prepared_data: Optional[ListWorkfilesOptionalData], +) -> ListWorkfilesContext: + if prepared_data is None: + prepared_data = ListWorkfilesOptionalData() + ( + project_entity, anatomy, project_settings + ) = prepared_data.get_project_data(project_name) + + template_key = prepared_data.get_template_key( + project_name, + task_entity["taskType"], + host_name, + project_settings, + ) + workfile_entities = prepared_data.get_workfile_entities( + project_name, task_entity["id"] + ) + return ListWorkfilesContext( + data_version=prepared_data.data_version, + project_entity=project_entity, + folder_entity=folder_entity, + task_entity=task_entity, + project_name=project_name, + anatomy=anatomy, + project_settings=project_settings, + template_key=template_key, + workfile_entities=workfile_entities, + ) + + +def get_list_published_workfiles_context( + project_name: str, + folder_id: str, + prepared_data: Optional[ListPublishedWorkfilesOptionalData], +) -> ListPublishedWorkfilesContext: + if prepared_data is None: + prepared_data = ListPublishedWorkfilesOptionalData() + ( + project_entity, anatomy, project_settings + ) = prepared_data.get_project_data(project_name) + ( + product_entities, + version_entities, + repre_entities, + ) = prepared_data.get_entities(project_name, folder_id) + + + return ListPublishedWorkfilesContext( + data_version=prepared_data.data_version, + project_name=project_name, + project_entity=project_entity, + folder_id=folder_id, + anatomy=anatomy, + project_settings=project_settings, + product_entities=product_entities, + version_entities=version_entities, + repre_entities=repre_entities, + ) + + +def get_save_workfile_context( + project_name: str, + filepath: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + host_name: str, + prepared_data: Optional[SaveWorkfileOptionalData], +) -> SaveWorkfileContext: + if prepared_data is None: + prepared_data = SaveWorkfileOptionalData() + + ( + project_entity, anatomy, project_settings + ) = prepared_data.get_project_data(project_name) + + rootless_path = prepared_data.get_rootless_path( + filepath, + project_name, + folder_entity, + task_entity, + host_name, + project_entity, + project_settings, + anatomy, + ) + workfile_entities = prepared_data.get_workfile_entities( + project_name, task_entity["id"] + ) + return SaveWorkfileContext( + data_version=prepared_data.data_version, + project_name=project_name, + project_entity=project_entity, + folder_entity=folder_entity, + task_entity=task_entity, + anatomy=anatomy, + project_settings=project_settings, + dst_path=filepath, + rootless_path=rootless_path, + workfile_entities=workfile_entities, + ) + + +def get_copy_workfile_context( + project_name: str, + src_path: str, + dst_path: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + *, + version: Optional[int], + comment: Optional[str], + description: Optional[str], + open_workfile: bool, + host_name: str, + prepared_data: Optional[CopyWorkfileOptionalData], +) -> CopyWorkfileContext: + if prepared_data is None: + prepared_data = CopyWorkfileOptionalData() + context: SaveWorkfileContext = get_save_workfile_context( + project_name, + dst_path, + folder_entity, + task_entity, + host_name, + prepared_data, + ) + return CopyWorkfileContext( + data_version=prepared_data.data_version, + src_path=src_path, + project_name=context.project_name, + project_entity=context.project_entity, + folder_entity=context.folder_entity, + task_entity=context.task_entity, + version=version, + comment=comment, + description=description, + open_workfile=open_workfile, + anatomy=context.anatomy, + project_settings=context.project_settings, + dst_path=context.dst_path, + rootless_path=context.rootless_path, + workfile_entities=context.workfile_entities, + ) + + +def get_copy_repre_workfile_context( + project_name: str, + src_project_name: str, + src_representation_entity: dict[str, Any], + dst_path: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + version: Optional[int], + comment: Optional[str], + description: Optional[str], + open_workfile: bool, + host_name: str, + prepared_data: Optional[CopyPublishedWorkfileOptionalData], +) -> CopyPublishedWorkfileContext: + if prepared_data is None: + prepared_data = CopyPublishedWorkfileOptionalData() + + context: SaveWorkfileContext = get_save_workfile_context( + project_name, + dst_path, + folder_entity, + task_entity, + host_name, + prepared_data, + ) + src_anatomy, repre_path = prepared_data.get_source_data( + context.anatomy, + src_project_name, + src_representation_entity, + ) + return CopyPublishedWorkfileContext( + data_version=prepared_data.data_version, + src_project_name=src_project_name, + src_representation_entity=src_representation_entity, + src_path=repre_path, + dst_path=context.dst_path, + project_name=context.project_name, + project_entity=context.project_entity, + folder_entity=context.folder_entity, + task_entity=context.task_entity, + version=version, + comment=comment, + description=description, + open_workfile=open_workfile, + anatomy=context.anatomy, + project_settings=context.project_settings, + rootless_path=context.rootless_path, + workfile_entities=context.workfile_entities, + src_anatomy=src_anatomy, + ) + + @dataclass class WorkfileInfo: """Information about workfile. @@ -323,11 +855,7 @@ class IWorkfileHost: version: Optional[int] = None, comment: Optional[str] = None, description: Optional[str] = None, - rootless_path: Optional[str] = None, - workfile_entities: Optional[list[dict[str, Any]]] = None, - project_settings: Optional[dict[str, Any]] = None, - project_entity: Optional[dict[str, Any]] = None, - anatomy: Optional[Anatomy] = None, + prepared_data: Optional[SaveWorkfileOptionalData] = None, ) -> None: """Save the current workfile with context. @@ -350,22 +878,21 @@ class IWorkfileHost: comment (Optional[str]): Comment for the workfile. Usually used in the filename template. description (Optional[str]): Artist note for the workfile entity. - rootless_path (Optional[str]): Prepared rootless path of - the workfile. - workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched - workfile entities for the task. - project_settings (Optional[dict[str, Any]]): Project settings. - project_entity (Optional[dict[str, Any]]): Project entity. - anatomy (Optional[Anatomy]): Project anatomy. + prepared_data (Optional[SaveWorkfileOptionalData]): Prepared data + for speed enhancements. """ - save_workfile_data = WorkfileSaveData( - folder_entity=folder_entity, - task_entity=task_entity, - filepath=filepath, - ) - self._before_workfile_save(save_workfile_data) project_name = self.get_current_project_name() + save_workfile_context = get_save_workfile_context( + project_name, + filepath, + folder_entity, + task_entity, + host_name=self.name, + prepared_data=prepared_data, + ) + + self._before_workfile_save(save_workfile_context) event_data = self._get_workfile_event_data( project_name, folder_entity, @@ -379,33 +906,23 @@ class IWorkfileHost: # Set 'AYON_WORKDIR' environment variable os.environ["AYON_WORKDIR"] = workdir - if project_entity is None: - project_entity = ayon_api.get_project(project_name) - self.set_current_context( folder_entity, task_entity, - project_entity=project_entity, - anatomy=anatomy, reason=ContextChangeReason.workfile_save, + project_entity=save_workfile_context.project_entity, + anatomy=save_workfile_context.anatomy, ) self.save_workfile(filepath) self._save_workfile_entity( - filepath, - folder_entity, - task_entity, + save_workfile_context, version, comment, description, - rootless_path, - workfile_entities, - project_settings, - project_entity, - anatomy, ) - self._after_workfile_save(save_workfile_data) + self._after_workfile_save(save_workfile_context) self._emit_workfile_save_event(event_data) def open_workfile_with_context( @@ -414,9 +931,7 @@ class IWorkfileHost: folder_entity: dict[str, Any], task_entity: dict[str, Any], *, - project_entity: Optional[dict[str, Any]] = None, - project_settings: Optional[dict[str, Any]] = None, - anatomy: Optional[Anatomy] = None, + prepared_data: Optional[OpenWorkfileOptionalData] = None, ) -> None: """Open passed filepath in the host with context. @@ -429,14 +944,21 @@ class IWorkfileHost: filepath (str): Path to workfile. folder_entity (dict[str, Any]): Folder id. task_entity (dict[str, Any]): Task id. - project_entity (Optional[dict[str, Any]]): Project entity. - project_settings (Optional[dict[str, Any]]): Project settings. - anatomy (Optional[Anatomy]): Project anatomy. + prepared_data (Optional[WorkfileOptionalData]): Prepared data + for speed enhancements. """ context = self.get_current_context() project_name = context["project_name"] + open_workfile_context = get_open_workfile_context( + project_name, + filepath, + folder_entity, + task_entity, + prepared_data=prepared_data, + ) + workdir = os.path.dirname(filepath) # Set 'AYON_WORKDIR' environment variable os.environ["AYON_WORKDIR"] = workdir @@ -444,25 +966,20 @@ class IWorkfileHost: event_data = self._get_workfile_event_data( project_name, folder_entity, task_entity, filepath ) - open_workfile_data = WorkfileOpenData( - folder_entity=folder_entity, - task_entity=task_entity, - filepath=filepath, - ) - self._before_workfile_open(open_workfile_data) + self._before_workfile_open(open_workfile_context) self._emit_workfile_open_event(event_data, after_open=False) self.set_current_context( folder_entity, task_entity, - project_entity=project_entity, - anatomy=anatomy, reason=ContextChangeReason.workfile_open, + project_entity=open_workfile_context.project_entity, + anatomy=open_workfile_context.anatomy, ) self.open_workfile(filepath) - self._after_workfile_open(open_workfile_data) + self._after_workfile_open(open_workfile_context) self._emit_workfile_open_event(event_data) def list_workfiles( @@ -471,11 +988,7 @@ class IWorkfileHost: folder_entity: dict[str, Any], task_entity: dict[str, Any], *, - project_entity: Optional[dict[str, Any]] = None, - workfile_entities: Optional[list[dict[str, Any]]] = None, - template_key: Optional[str] = None, - project_settings: Optional[dict[str, Any]] = None, - anatomy: Optional[Anatomy] = None, + prepared_data: Optional[ListWorkfilesOptionalData] = None, ) -> list[WorkfileInfo]: """List workfiles in the given task. @@ -492,18 +1005,13 @@ class IWorkfileHost: project_name (str): Project name. folder_entity (dict[str, Any]): Folder entity. task_entity (dict[str, Any]): Task entity. - project_entity (Optional[dict[str, Any]]): Project entity. - workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched - workfile entities for the task. - template_key (Optional[str]): Template key. - project_settings (Optional[dict[str, Any]]): Project settings. - anatomy (Anatomy): Project anatomy. + prepared_data (Optional[ListWorkfilesOptionalData]): Prepared + data for speed enhancements. Returns: list[WorkfileInfo]: List of workfiles. """ - from ayon_core.pipeline import Anatomy from ayon_core.pipeline.template_data import get_template_data from ayon_core.pipeline.workfile import get_workdir_with_workdir_data @@ -511,25 +1019,21 @@ class IWorkfileHost: if not extensions: return [] - if project_entity is None: - project_entity = ayon_api.get_project(project_name) - - if workfile_entities is None: - task_id = task_entity["id"] - workfile_entities = list(ayon_api.get_workfiles_info( - project_name, task_ids=[task_id] - )) - - if anatomy is None: - anatomy = Anatomy(project_name, project_entity=project_entity) + list_workfiles_context = get_list_workfiles_context( + project_name, + folder_entity, + task_entity, + host_name=self.name, + prepared_data=prepared_data, + ) workfile_entities_by_path = { workfile_entity["path"]: workfile_entity - for workfile_entity in workfile_entities + for workfile_entity in list_workfiles_context.workfile_entities } workdir_data = get_template_data( - project_entity, + list_workfiles_context.project_entity, folder_entity, task_entity, host_name=self.name, @@ -537,9 +1041,9 @@ class IWorkfileHost: workdir = get_workdir_with_workdir_data( workdir_data, project_name, - anatomy=anatomy, - template_key=template_key, - project_settings=project_settings, + anatomy=list_workfiles_context.anatomy, + template_key=list_workfiles_context.template_key, + project_settings=list_workfiles_context.project_settings, ) if platform.system().lower() == "windows": @@ -585,7 +1089,7 @@ class IWorkfileHost: ext = os.path.splitext(rootless_path)[1].lower() if ext not in extensions: continue - filepath = anatomy.fill_root(rootless_path) + filepath = prepared_data.anatomy.fill_root(rootless_path) items.append(WorkfileInfo.new( filepath, rootless_path, @@ -600,9 +1104,7 @@ class IWorkfileHost: project_name: str, folder_id: str, *, - anatomy: Optional[Anatomy] = None, - version_entities: Optional[list[dict[str, Any]]] = None, - repre_entities: Optional[list[dict[str, Any]]] = None, + prepared_data: Optional[ListPublishedWorkfilesOptionalData] = None, ) -> list[PublishedWorkfileInfo]: """List published workfiles for the given folder. @@ -616,45 +1118,32 @@ class IWorkfileHost: Args: project_name (str): Project name. folder_id (str): Folder id. - anatomy (Anatomy): Project anatomy. - version_entities (Optional[list[dict[str, Any]]]): Pre-fetched - version entities. - repre_entities (Optional[list[dict[str, Any]]]): Pre-fetched - representation entities. + prepared_data (Optional[ListPublishedWorkfilesOptionalData]): + Prepared data for speed enhancements. Returns: list[PublishedWorkfileInfo]: Published workfile information for the given context. """ - from ayon_core.pipeline import Anatomy - - # Get all representations of the folder - ( - version_entities, - repre_entities - ) = self._fetch_published_workfile_entities( + list_workfiles_context = get_list_published_workfiles_context( project_name, folder_id, - version_entities, - repre_entities, + prepared_data=prepared_data, ) - if not repre_entities: + if not list_workfiles_context.repre_entities: return [] - if anatomy is None: - anatomy = Anatomy(project_name) - versions_by_id = { version_entity["id"]: version_entity - for version_entity in version_entities + for version_entity in prepared_data.version_entities } extensions = { ext.lstrip(".") for ext in self.get_workfile_extensions() } items = [] - for repre_entity in repre_entities: + for repre_entity in prepared_data.repre_entities: version_id = repre_entity["versionId"] version_entity = versions_by_id[version_id] task_id = version_entity["taskId"] @@ -675,7 +1164,9 @@ class IWorkfileHost: continue try: - workfile_path = workfile_path.format(root=anatomy.roots) + workfile_path = workfile_path.format( + root=prepared_data.anatomy.roots + ) except Exception: self.log.warning( "Failed to format workfile path.", exc_info=True @@ -716,12 +1207,8 @@ class IWorkfileHost: version: Optional[int] = None, comment: Optional[str] = None, description: Optional[str] = None, - rootless_path: Optional[str] = None, - workfile_entities: Optional[list[dict[str, Any]]] = None, - project_settings: Optional[dict[str, Any]] = None, - project_entity: Optional[dict[str, Any]] = None, - anatomy: Optional[Anatomy] = None, open_workfile: bool = True, + prepared_data: Optional[CopyWorkfileOptionalData] = None, ) -> None: """Save workfile path with target folder and task context. @@ -744,59 +1231,31 @@ class IWorkfileHost: for workfile entity. Recommended to fill. comment (Optional[str]): Comment for the workfile. description (Optional[str]): Artist note for the workfile entity. - rootless_path (Optional[str]): Rootless path of the workfile. - workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched - workfile entities for the task. - project_settings (Optional[dict[str, Any]]): Project settings. - project_entity (Optional[dict[str, Any]]): Project entity. - anatomy (Optional[Anatomy]): Project anatomy. open_workfile (bool): Open workfile when copied. + prepared_data (Optional[CopyWorkfileOptionalData]): Prepared data + for speed enhancements. """ - copy_workfile_data = WorkfileCopyData( - source_path=src_path, - destination_path=dst_path, - folder_entity=folder_entity, - task_entity=task_entity, + project_name = self.get_current_project_name() + copy_workfile_context: CopyWorkfileContext = get_copy_workfile_context( + project_name, + src_path, + dst_path, + folder_entity, + task_entity, + version=version, + comment=comment, + description=description, open_workfile=open_workfile, + host_name=self.name, + prepared_data=prepared_data, ) - self._before_workfile_copy(copy_workfile_data) - event_data = self._get_workfile_event_data( - self.get_current_project_name(), - folder_entity, - task_entity, - dst_path, - ) - self._emit_workfile_save_event(event_data, after_save=False) - - dst_dir = os.path.dirname(dst_path) - if not os.path.exists(dst_dir): - os.makedirs(dst_dir, exist_ok=True) - shutil.copy(src_path, dst_path) - - self._save_workfile_entity( - dst_path, - folder_entity, - task_entity, - version, - comment, - description, - rootless_path, - workfile_entities, - project_settings, - project_entity, - anatomy, - ) - self._after_workfile_copy(copy_workfile_data) - self._emit_workfile_save_event(event_data) - - if not open_workfile: - return - - self.open_workfile_with_context( - dst_path, - folder_entity, - task_entity, + self._copy_workfile( + copy_workfile_context, + version=version, + comment=comment, + description=description, + open_workfile=open_workfile, ) def copy_workfile_representation( @@ -810,14 +1269,8 @@ class IWorkfileHost: version: Optional[int] = None, comment: Optional[str] = None, description: Optional[str] = None, - rootless_path: Optional[str] = None, - workfile_entities: Optional[list[dict[str, Any]]] = None, - project_settings: Optional[dict[str, Any]] = None, - project_entity: Optional[dict[str, Any]] = None, - anatomy: Optional[Anatomy] = None, open_workfile: bool = True, - src_anatomy: Optional[Anatomy] = None, - src_representation_path: Optional[str] = None, + prepared_data: Optional[CopyPublishedWorkfileOptionalData] = None, ) -> None: """Copy workfile representation. @@ -841,58 +1294,33 @@ class IWorkfileHost: for workfile entity. Recommended to fill. comment (Optional[str]): Comment for the workfile. description (Optional[str]): Artist note for the workfile entity. - rootless_path (Optional[str]): Rootless path of the workfile. - workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched - workfile entities for the task. - project_settings (Optional[dict[str, Any]]): Project settings. - project_entity (Optional[dict[str, Any]]): Project entity. - anatomy (Optional[Anatomy]): Project anatomy. open_workfile (bool): Open workfile when copied. - src_anatomy (Optional[Anatomy]): Anatomy of the source - src_representation_path (Optional[str]): Representation path. + prepared_data (Optional[CopyPublishedWorkfileOptionalData]): + Prepared data for speed enhancements. """ - from ayon_core.pipeline import Anatomy - from ayon_core.pipeline.load import ( - get_representation_path_with_anatomy - ) - project_name = self.get_current_project_name() - # Re-use Anatomy or project entity if source context is same - if project_name == src_project_name: - if src_anatomy is None and anatomy is not None: - src_anatomy = anatomy - elif anatomy is None and src_anatomy is not None: - anatomy = src_anatomy - elif not project_entity: - project_entity = ayon_api.get_project(project_name) - - if anatomy is None: - anatomy = src_anatomy = Anatomy( - project_name, project_entity=project_entity - ) - - if src_representation_path is None: - if src_anatomy is None: - src_anatomy = Anatomy(src_project_name) - src_representation_path = get_representation_path_with_anatomy( + copy_repre_workfile_context: CopyPublishedWorkfileContext = ( + get_copy_repre_workfile_context( + project_name, + src_project_name, src_representation_entity, - src_anatomy, + dst_path, + folder_entity, + task_entity, + version=version, + comment=comment, + description=description, + open_workfile=open_workfile, + host_name=self.name, + prepared_data=prepared_data, ) - - self.copy_workfile( - src_representation_path, - dst_path, - folder_entity, - task_entity, + ) + self._copy_workfile( + copy_repre_workfile_context, version=version, comment=comment, description=description, - rootless_path=rootless_path, - workfile_entities=workfile_entities, - project_settings=project_settings, - project_entity=project_entity, - anatomy=anatomy, open_workfile=open_workfile, ) @@ -947,109 +1375,94 @@ class IWorkfileHost: """ return self.workfile_has_unsaved_changes() - def _fetch_published_workfile_entities( + def _copy_workfile( self, - project_name: str, - folder_id: str, - version_entities: Optional[list[dict[str, Any]]], - repre_entities: Optional[list[dict[str, Any]]], - ) -> tuple[ - list[dict[str, Any]], - list[dict[str, Any]] - ]: - """Fetch integrated workfile entities for the given folder. - - Args: - project_name (str): Project name. - folder_id (str): Folder id. - version_entities (Optional[list[dict[str, Any]]]): Pre-fetched - version entities. - repre_entities (Optional[list[dict[str, Any]]]): Pre-fetched - representation entities. - - Returns: - tuple[list[dict[str, Any]], list[dict[str, Any]]]: - Tuple of version entities and representation entities. - - """ - if repre_entities is not None and version_entities is None: - # Get versions of representations - version_ids = {r["versionId"] for r in repre_entities} - version_entities = list(ayon_api.get_versions( - project_name, - version_ids=version_ids, - fields={"id", "author", "taskId"}, - )) - - if version_entities is None: - # Get product entities of folder - product_entities = ayon_api.get_products( - project_name, - folder_ids={folder_id}, - product_types={"workfile"}, - fields={"id", "name"} - ) - - version_entities = [] - product_ids = {product["id"] for product in product_entities} - if product_ids: - # Get version docs of products with their families - version_entities = list(ayon_api.get_versions( - project_name, - product_ids=product_ids, - fields={"id", "author", "taskId"}, - )) - - # Fetch representations of filtered versions and add filter for - # extension - if repre_entities is None: - repre_entities = [] - if version_entities: - repre_entities = list(ayon_api.get_representations( - project_name, - version_ids={v["id"] for v in version_entities} - )) - - return version_entities, repre_entities - - def _save_workfile_entity( - self, - workfile_path: str, - folder_entity: dict[str, Any], - task_entity: dict[str, Any], + copy_workfile_context: CopyWorkfileContext, + *, + version: Optional[int], + comment: Optional[str], + description: Optional[str], + open_workfile: bool, + ) -> None: + """Save workfile path with target folder and task context. + + It is expected that workfile is saved to the current project, but + can be copied from the other project. + + Arguments 'rootless_path', 'workfile_entities', 'project_entity' + and 'anatomy' can be filled to enhance efficiency if you already + have access to the values. + + Argument 'project_settings' is used to calculate 'rootless_path' + if it is not provided. + + Args: + copy_workfile_context (CopyWorkfileContext): Prepared data + for speed enhancements. + version (Optional[int]): Version of the workfile. Information + for workfile entity. Recommended to fill. + comment (Optional[str]): Comment for the workfile. + description (Optional[str]): Artist note for the workfile entity. + open_workfile (bool): Open workfile when copied. + + """ + self._before_workfile_copy(copy_workfile_context) + event_data = self._get_workfile_event_data( + copy_workfile_context.project_name, + copy_workfile_context.folder_entity, + copy_workfile_context.task_entity, + copy_workfile_context.dst_path, + ) + self._emit_workfile_save_event(event_data, after_save=False) + + dst_dir = os.path.dirname(copy_workfile_context.dst_path) + if not os.path.exists(dst_dir): + os.makedirs(dst_dir, exist_ok=True) + shutil.copy( + copy_workfile_context.src_path, + copy_workfile_context.dst_path + ) + + self._save_workfile_entity( + copy_workfile_context, + version, + comment, + description, + ) + self._after_workfile_copy(copy_workfile_context) + self._emit_workfile_save_event(event_data) + + if not open_workfile: + return + + self.open_workfile_with_context( + copy_workfile_context.dst_path, + copy_workfile_context.folder_entity, + copy_workfile_context.task_entity, + ) + + def _save_workfile_entity( + self, + save_workfile_context: SaveWorkfileContext, version: Optional[int], comment: Optional[str], description: Optional[str], - rootless_path: Optional[str], - workfile_entities: Optional[list[dict[str, Any]]] = None, - project_settings: Optional[dict[str, Any]] = None, - project_entity: Optional[dict[str, Any]] = None, - anatomy: Optional[Anatomy] = None, ) -> Optional[dict[str, Any]]: """Create of update workfile entity to AYON based on provided data. Args: - workfile_path (str): Path to the workfile. - folder_entity (dict[str, Any]): Folder entity. - task_entity (dict[str, Any]): Task entity. + save_workfile_context (SaveWorkfileContext): Save workfile + context with all prepared data. version (Optional[int]): Version of the workfile. comment (Optional[str]): Comment for the workfile. description (Optional[str]): Artist note for the workfile entity. - rootless_path (Optional[str]): Prepared rootless path of - the workfile. - workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched - workfile entities. - project_settings (Optional[dict[str, Any]]): Project settings. - project_entity (Optional[dict[str, Any]]): Project entity. - anatomy (Optional[Anatomy]): Project anatomy. Returns: Optional[dict[str, Any]]: Workfile entity. """ from ayon_core.pipeline.workfile.utils import ( - save_workfile_info, - find_workfile_rootless_path, + save_workfile_info ) project_name = self.get_current_project_name() @@ -1059,18 +1472,7 @@ class IWorkfileHost: if not comment: comment = None - if rootless_path is None: - rootless_path = find_workfile_rootless_path( - workfile_path, - project_name, - folder_entity, - task_entity, - self.name, - project_entity=project_entity, - project_settings=project_settings, - anatomy=anatomy, - ) - + rootless_path = save_workfile_context.rootless_path # It is not possible to create workfile infor without rootless path workfile_info = None if not rootless_path: @@ -1081,13 +1483,13 @@ class IWorkfileHost: workfile_info = save_workfile_info( project_name, - task_entity["id"], + save_workfile_context.task_entity["id"], rootless_path, self.name, version, comment, description, - workfile_entities=workfile_entities, + workfile_entities=save_workfile_context.workfile_entities, ) return workfile_info @@ -1155,7 +1557,7 @@ class IWorkfileHost: } def _before_workfile_open( - self, open_workfile_data: WorkfileOpenData + self, open_workfile_context: OpenWorkfileContext ) -> None: """Before workfile is opened. @@ -1164,14 +1566,14 @@ class IWorkfileHost: Can be overridden to implement host specific logic. Args: - open_workfile_data (WorkfileOpenData): Context and path of + open_workfile_context (OpenWorkfileContext): Context and path of workfile to open. """ pass def _after_workfile_open( - self, open_workfile_data: WorkfileOpenData + self, open_workfile_context: OpenWorkfileContext ) -> None: """After workfile is opened. @@ -1180,14 +1582,14 @@ class IWorkfileHost: Can be overridden to implement host specific logic. Args: - open_workfile_data (WorkfileOpenData): Context and path of + open_workfile_context (OpenWorkfileContext): Context and path of opened workfile. """ pass def _before_workfile_save( - self, save_workfile_data: WorkfileSaveData + self, save_workfile_context: SaveWorkfileContext ) -> None: """Before workfile is saved. @@ -1196,14 +1598,14 @@ class IWorkfileHost: Can be overridden to implement host specific logic. Args: - save_workfile_data (WorkfileSaveData): Workfile path with target + save_workfile_context (SaveWorkfileContext): Workfile path with target folder and task context. """ pass def _after_workfile_save( - self, save_workfile_data: WorkfileSaveData + self, save_workfile_context: SaveWorkfileContext ) -> None: """After workfile is saved. @@ -1212,19 +1614,19 @@ class IWorkfileHost: Can be overridden to implement host specific logic. Args: - save_workfile_data (WorkfileSaveData): Workfile path with target + save_workfile_context (SaveWorkfileContext): Workfile path with target folder and task context. """ - workdir = os.path.dirname(save_workfile_data.filepath) + workdir = os.path.dirname(save_workfile_context.dst_path) self._create_extra_folders( - save_workfile_data.folder_entity, - save_workfile_data.task_entity, + save_workfile_context.folder_entity, + save_workfile_context.task_entity, workdir ) def _before_workfile_copy( - self, copy_workfile_data: WorkfileCopyData + self, copy_workfile_context: CopyWorkfileContext ) -> None: """Before workfile is copied. @@ -1234,14 +1636,14 @@ class IWorkfileHost: Can be overridden to implement host specific logic. Args: - copy_workfile_data (WorkfileCopyData): Source and destination + copy_workfile_context (CopyWorkfileContext): Source and destination path with context before workfile is copied. """ pass def _after_workfile_copy( - self, copy_workfile_data: WorkfileCopyData + self, copy_workfile_context: CopyWorkfileContext ) -> None: """After workfile is copied. @@ -1251,14 +1653,14 @@ class IWorkfileHost: Can be overridden to implement host specific logic. Args: - copy_workfile_data (WorkfileCopyData): Source and destination + copy_workfile_context (CopyWorkfileContext): Source and destination path with context after workfile is copied. """ - workdir = os.path.dirname(copy_workfile_data.destination_path) + workdir = os.path.dirname(copy_workfile_context.dst_path) self._create_extra_folders( - copy_workfile_data.folder_entity, - copy_workfile_data.task_entity, + copy_workfile_context.folder_entity, + copy_workfile_context.task_entity, workdir, ) @@ -1271,6 +1673,8 @@ class IWorkfileHost: Emit event before and after workfile is opened. + This method is not meant to be overridden. + Other addons can listen to this event and do additional steps. Args: @@ -1299,6 +1703,8 @@ class IWorkfileHost: Emit event before and after workfile is saved or copied. + This method is not meant to be overridden. + Other addons can listen to this event and do additional steps. Args: diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index f64f68850b..f19c9933a0 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -10,6 +10,12 @@ from ayon_api.operations import OperationsSession from ayon_core.lib import filter_profiles, get_ayon_username from ayon_core.settings import get_project_settings +from ayon_core.host.interfaces import ( + SaveWorkfileOptionalData, + OpenWorkfileOptionalData, + CopyWorkfileOptionalData, + CopyPublishedWorkfileOptionalData, +) from .path_resolving import get_workfile_template_key @@ -303,9 +309,8 @@ def open_workfile( filepath: str, folder_entity: dict[str, Any], task_entity: dict[str, Any], - project_entity: Optional[dict[str, Any]] = None, - project_settings: Optional[dict[str, Any]] = None, - anatomy: Optional["Anatomy"] = None, + *, + prepared_data: Optional[OpenWorkfileOptionalData] = None, ): from ayon_core.pipeline.context_tools import registered_host @@ -315,9 +320,7 @@ def open_workfile( filepath, folder_entity, task_entity, - project_entity=project_entity, - project_settings=project_settings, - anatomy=anatomy, + prepared_data=prepared_data, ) @@ -329,11 +332,7 @@ def save_current_workfile_to( version: Optional[int] = None, comment: Optional[str] = None, description: Optional[str] = None, - rootless_path: Optional[str] = None, - workfile_entities: Optional[list[dict[str, Any]]] = None, - project_entity: Optional[dict[str, Any]] = None, - project_settings: Optional[dict[str, Any]] = None, - anatomy: Optional["Anatomy"] = None, + prepared_data: Optional[SaveWorkfileOptionalData] = None, ) -> None: """Save current workfile to new location or context. @@ -344,16 +343,8 @@ def save_current_workfile_to( version (Optional[int]): Workfile version. comment (optional[str]): Workfile comment. description (Optional[str]): Workfile description. - rootless_path (Optional[str]): Rootless path of the workfile. Is - calculated if not passed in. - workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched - workfile entities related to the task. - project_entity (Optional[dict[str, Any]]): Project entity used for - rootless path calculation. - project_settings (Optional[dict[str, Any]]): Project settings used for - rootless path calculation. - anatomy (Optional[Anatomy]): Project anatomy used for rootless - path calculation. + prepared_data (Optional[SaveWorkfileOptionalData]): Prepared data + for speed enhancements. """ from ayon_core.pipeline.context_tools import registered_host @@ -366,11 +357,7 @@ def save_current_workfile_to( version=version, comment=comment, description=description, - rootless_path=rootless_path, - workfile_entities=workfile_entities, - project_entity=project_entity, - project_settings=project_settings, - anatomy=anatomy, + prepared_data=prepared_data, ) @@ -380,11 +367,7 @@ def save_workfile_with_current_context( version: Optional[int] = None, comment: Optional[str] = None, description: Optional[str] = None, - rootless_path: Optional[str] = None, - workfile_entities: Optional[list[dict[str, Any]]] = None, - project_entity: Optional[dict[str, Any]] = None, - project_settings: Optional[dict[str, Any]] = None, - anatomy: Optional["Anatomy"] = None, + prepared_data: Optional[SaveWorkfileOptionalData] = None, ) -> None: """Save current workfile to new location using current context. @@ -396,16 +379,8 @@ def save_workfile_with_current_context( version (Optional[int]): Workfile version. comment (optional[str]): Workfile comment. description (Optional[str]): Workfile description. - rootless_path (Optional[str]): Rootless path of the workfile. Is - calculated if not passed in. - workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched - workfile entities related to the task. - project_entity (Optional[dict[str, Any]]): Project entity used for - rootless path calculation. - project_settings (Optional[dict[str, Any]]): Project settings used for - rootless path calculation. - anatomy (Optional[Anatomy]): Project anatomy used for rootless - path calculation. + prepared_data (Optional[SaveWorkfileOptionalData]): Prepared data + for speed enhancements. """ from ayon_core.pipeline.context_tools import registered_host @@ -430,11 +405,7 @@ def save_workfile_with_current_context( version=version, comment=comment, description=description, - rootless_path=rootless_path, - workfile_entities=workfile_entities, - project_entity=project_entity, - project_settings=project_settings, - anatomy=anatomy, + prepared_data=prepared_data, ) @@ -447,11 +418,7 @@ def copy_and_open_workfile( version: Optional[int] = None, comment: Optional[str] = None, description: Optional[str] = None, - rootless_path: Optional[str] = None, - workfile_entities: Optional[list[dict[str, Any]]] = None, - project_entity: Optional[dict[str, Any]] = None, - project_settings: Optional[dict[str, Any]] = None, - anatomy: Optional["Anatomy"] = None, + prepared_data: Optional[CopyWorkfileOptionalData] = None, ) -> None: """Copy workfile to new location and open it. @@ -463,16 +430,8 @@ def copy_and_open_workfile( version (Optional[int]): Workfile version. comment (optional[str]): Workfile comment. description (Optional[str]): Workfile description. - rootless_path (Optional[str]): Rootless path of the workfile. Is - calculated if not passed in. - workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched - workfile entities related to the task. - project_entity (Optional[dict[str, Any]]): Project entity used for - rootless path calculation. - project_settings (Optional[dict[str, Any]]): Project settings used for - rootless path calculation. - anatomy (Optional[Anatomy]): Project anatomy used for rootless - path calculation. + prepared_data (Optional[CopyWorkfileOptionalData]): Prepared data + for speed enhancements. """ from ayon_core.pipeline.context_tools import registered_host @@ -486,18 +445,14 @@ def copy_and_open_workfile( version=version, comment=comment, description=description, - rootless_path=rootless_path, - workfile_entities=workfile_entities, - project_entity=project_entity, - project_settings=project_settings, - anatomy=anatomy, open_workfile=True, + prepared_data=prepared_data, ) def copy_and_open_workfile_representation( src_project_name: str, - representation_id: str, + representation_entity: dict[str, Any], workfile_path: str, folder_entity: dict[str, Any], task_entity: dict[str, Any], @@ -505,50 +460,25 @@ def copy_and_open_workfile_representation( version: Optional[int] = None, comment: Optional[str] = None, description: Optional[str] = None, - rootless_path: Optional[str] = None, - representation_entity: Optional[dict[str, Any]] = None, - representation_path: Optional[str] = None, - workfile_entities: Optional[list[dict[str, Any]]] = None, - project_entity: Optional[dict[str, Any]] = None, - project_settings: Optional[dict[str, Any]] = None, - anatomy: Optional["Anatomy"] = None, - src_anatomy: Optional["Anatomy"] = None, + prepared_data: Optional[CopyPublishedWorkfileOptionalData] = None, ) -> None: """Copy workfile to new location and open it. Args: src_project_name (str): Project name where representation is stored. - representation_id (str): Source representation id. + representation_entity (dict[str, Any]): Representation entity. workfile_path (str): Destination workfile path. folder_entity (dict[str, Any]): Target folder entity. task_entity (dict[str, Any]): Target task entity. version (Optional[int]): Workfile version. comment (optional[str]): Workfile comment. description (Optional[str]): Workfile description. - rootless_path (Optional[str]): Rootless path of the workfile. Is - calculated if not passed in. - representation_entity (Optional[dict[str, Any]]): Representation - entity. If not provided, it will be fetched from the server. - representation_path (Optional[str]): Path to the representation. - Calculated if not provided. - workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched - workfile entities related to the task. - project_entity (Optional[dict[str, Any]]): Project entity used for - rootless path calculation. - project_settings (Optional[dict[str, Any]]): Project settings used for - rootless path calculation. - anatomy (Optional[Anatomy]): Project anatomy used for rootless - path calculation. + prepared_data (Optional[CopyPublishedWorkfileOptionalData]): Prepared data + for speed enhancements. """ from ayon_core.pipeline.context_tools import registered_host - if representation_entity is None: - representation_entity = ayon_api.get_representation_by_id( - src_project_name, - representation_id, - ) - host = registered_host() host.copy_workfile_representation( src_project_name, @@ -559,14 +489,8 @@ def copy_and_open_workfile_representation( version=version, comment=comment, description=description, - rootless_path=rootless_path, - workfile_entities=workfile_entities, - project_settings=project_settings, - project_entity=project_entity, - anatomy=anatomy, - src_anatomy=src_anatomy, - src_representation_path=representation_path, open_workfile=open_workfile, + prepared_data=prepared_data, ) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 23521dc3f6..5e4e5db808 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -19,6 +19,14 @@ from ayon_core.host import ( WorkfileInfo, PublishedWorkfileInfo, ) +from ayon_core.host.interfaces import ( + OpenWorkfileOptionalData, + ListWorkfilesOptionalData, + ListPublishedWorkfilesOptionalData, + SaveWorkfileOptionalData, + CopyWorkfileOptionalData, + CopyPublishedWorkfileOptionalData, +) from ayon_core.pipeline.template_data import ( get_template_data, get_task_template_data, @@ -142,6 +150,7 @@ class WorkfilesModel: filepath = os.path.join(workdir, filename) rootless_path = f"{rootless_workdir}/{filename}" project_name = self._controller.get_current_project_name() + project_entity = self._controller.get_project_entity(project_name) folder_entity = self._controller.get_folder_entity( project_name, folder_id ) @@ -149,6 +158,13 @@ class WorkfilesModel: project_name, task_id ) + prepared_data = SaveWorkfileOptionalData( + project_entity=project_entity, + anatomy=self._controller.project_anatomy, + project_settings=self._controller.project_settings, + rootless_path=rootless_path, + workfile_entities=self.get_workfile_entities(task_id), + ) failed = False try: save_current_workfile_to( @@ -158,13 +174,7 @@ class WorkfilesModel: version=version, comment=comment, description=description, - rootless_path=rootless_path, - workfile_entities=self.get_workfile_entities(task_id), - project_entity=self._controller.get_project_entity( - project_name - ), - project_settings=self._controller.project_settings, - anatomy=self._controller.project_anatomy, + prepared_data=prepared_data, ) self._update_workfile_info( task_id, rootless_path, description @@ -198,37 +208,38 @@ class WorkfilesModel: self._emit_event("copy_representation.started") project_name = self._project_name + project_entity = self._controller.get_project_entity(project_name) folder_entity = self._controller.get_folder_entity( - self._project_name, folder_id + project_name, folder_id ) task_entity = self._controller.get_task_entity( - self._project_name, task_id + project_name, task_id ) repre_entity = self._repre_by_id.get(representation_id) dst_filepath = os.path.join(workdir, filename) rootless_path = f"{rootless_workdir}/{filename}" + prepared_data = CopyPublishedWorkfileOptionalData( + project_entity=project_entity, + anatomy=self._controller.project_anatomy, + project_settings=self._controller.project_settings, + rootless_path=rootless_path, + representation_path=representation_filepath, + workfile_entities=self.get_workfile_entities(task_id), + src_anatomy=self._controller.project_anatomy, + ) failed = False - workfile_entities = self.get_workfile_entities(task_id) try: copy_and_open_workfile_representation( project_name, - representation_id, + repre_entity, dst_filepath, folder_entity, task_entity, version=version, comment=comment, description=description, - rootless_path=rootless_path, - representation_entity=repre_entity, - representation_path=representation_filepath, - workfile_entities=workfile_entities, - project_entity=self._controller.get_project_entity( - project_name - ), - project_settings=self._controller.project_settings, - anatomy=self._controller.project_anatomy, + prepared_data=prepared_data, ) self._update_workfile_info( task_id, rootless_path, description @@ -271,6 +282,14 @@ class WorkfilesModel: workfile_entities = self.get_workfile_entities(task_id) rootless_path = f"{rootless_workdir}/{filename}" workfile_path = os.path.join(workdir, filename) + + prepared_data = CopyWorkfileOptionalData( + project_entity=project_entity, + project_settings=self._controller.project_settings, + anatomy=self._controller.project_anatomy, + rootless_path=rootless_path, + workfile_entities=workfile_entities, + ) failed = False try: copy_and_open_workfile( @@ -281,11 +300,7 @@ class WorkfilesModel: version=version, comment=comment, description=description, - rootless_path=rootless_path, - workfile_entities=workfile_entities, - project_entity=project_entity, - project_settings=self._controller.project_settings, - anatomy=self._controller.project_anatomy, + prepared_data=prepared_data, ) except Exception: @@ -571,12 +586,12 @@ class WorkfilesModel: project_name = self._project_name anatomy = self._controller.project_anatomy - product_entities = ayon_api.get_products( + product_entities = list(ayon_api.get_products( project_name, folder_ids={folder_id}, product_types={"workfile"}, fields={"id", "name"} - ) + )) version_entities = [] product_ids = {product["id"] for product in product_entities} @@ -599,13 +614,20 @@ class WorkfilesModel: repre_entity["id"]: repre_entity for repre_entity in repre_entities }) + project_entity = self._controller.get_project_entity(project_name) + prepared_data = ListPublishedWorkfilesOptionalData( + project_entity=project_entity, + anatomy=anatomy, + project_settings=self._controller.project_settings, + product_entities=product_entities, + version_entities=version_entities, + repre_entities=repre_entities, + ) cache.update_data(self._host.list_published_workfiles( project_name, folder_id, - anatomy=anatomy, - version_entities=version_entities, - repre_entities=repre_entities, + prepared_data=prepared_data, )) items = cache.get_data() @@ -638,13 +660,21 @@ class WorkfilesModel: def _open_workfile(self, folder_id: str, task_id: str, filepath: str): # TODO move to workfiles pipeline project_name = self._project_name + project_entity = self._controller.get_project_entity(project_name) folder_entity = self._controller.get_folder_entity( project_name, folder_id ) task_entity = self._controller.get_task_entity( project_name, task_id ) - open_workfile(filepath, folder_entity, task_entity) + prepared_data = OpenWorkfileOptionalData( + project_entity=project_entity, + anatomy=self._controller.project_anatomy, + project_settings=self._controller.project_settings, + ) + open_workfile( + filepath, folder_entity, task_entity, prepared_data=prepared_data + ) self._update_current_context( folder_id, folder_entity["path"], task_entity["name"] ) @@ -739,15 +769,19 @@ class WorkfilesModel: fill_data = self._prepare_fill_data(folder_id, task_id) template_key = self._get_template_key(fill_data) + prepared_data = ListWorkfilesOptionalData( + project_entity=project_entity, + anatomy=anatomy, + project_settings=project_settings, + template_key=template_key, + workfile_entities=workfile_entities, + ) + items = self._host.list_workfiles( self._project_name, folder_entity, task_entity, - project_entity=project_entity, - anatomy=anatomy, - template_key=template_key, - project_settings=project_settings, - workfile_entities=workfile_entities, + prepared_data=prepared_data, ) cache.update_data(items) From 91377aa40011a22593b6cb41694c96747f7fcf33 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 26 Jun 2025 10:20:56 +0200 Subject: [PATCH 137/595] formatting fixes --- client/ayon_core/host/interfaces/workfiles.py | 10 ++++------ client/ayon_core/pipeline/workfile/utils.py | 4 ++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 8bc0b1cf85..4eb8b08719 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -182,7 +182,6 @@ class ListPublishedWorkfilesOptionalData(_WorkfileOptionalData): version_entities = list(ayon_api.get_versions( project_name, product_ids=product_ids, - task_ids=task_filters, fields={"id", "author", "taskId"}, )) @@ -444,7 +443,6 @@ def get_list_published_workfiles_context( repre_entities, ) = prepared_data.get_entities(project_name, folder_id) - return ListPublishedWorkfilesContext( data_version=prepared_data.data_version, project_name=project_name, @@ -1598,8 +1596,8 @@ class IWorkfileHost: Can be overridden to implement host specific logic. Args: - save_workfile_context (SaveWorkfileContext): Workfile path with target - folder and task context. + save_workfile_context (SaveWorkfileContext): Workfile path with + target folder and task context. """ pass @@ -1614,8 +1612,8 @@ class IWorkfileHost: Can be overridden to implement host specific logic. Args: - save_workfile_context (SaveWorkfileContext): Workfile path with target - folder and task context. + save_workfile_context (SaveWorkfileContext): Workfile path with + target folder and task context. """ workdir = os.path.dirname(save_workfile_context.dst_path) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index f19c9933a0..0ac294c82a 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -473,8 +473,8 @@ def copy_and_open_workfile_representation( version (Optional[int]): Workfile version. comment (optional[str]): Workfile comment. description (Optional[str]): Workfile description. - prepared_data (Optional[CopyPublishedWorkfileOptionalData]): Prepared data - for speed enhancements. + prepared_data (Optional[CopyPublishedWorkfileOptionalData]): Prepared + data for speed enhancements. """ from ayon_core.pipeline.context_tools import registered_host From dc476dea9234e2e430ccd5795bd29e1d05b65c6f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 26 Jun 2025 10:57:27 +0200 Subject: [PATCH 138/595] fix missing argument --- client/ayon_core/pipeline/workfile/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 0ac294c82a..177eb69694 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -489,7 +489,7 @@ def copy_and_open_workfile_representation( version=version, comment=comment, description=description, - open_workfile=open_workfile, + open_workfile=True, prepared_data=prepared_data, ) From 449549b72bb76142fd669f3da9dd197e87d4bad8 Mon Sep 17 00:00:00 2001 From: "Sveinbjorn J. Tryggvason" Date: Tue, 1 Jul 2025 11:11:18 +0000 Subject: [PATCH 139/595] allow merging of file sequence entries --- .../tools/attribute_defs/files_widget.py | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/client/ayon_core/tools/attribute_defs/files_widget.py b/client/ayon_core/tools/attribute_defs/files_widget.py index 8a40b3ff38..edac8059f0 100644 --- a/client/ayon_core/tools/attribute_defs/files_widget.py +++ b/client/ayon_core/tools/attribute_defs/files_widget.py @@ -892,6 +892,28 @@ class FilesWidget(QtWidgets.QFrame): self._add_filepaths(new_items) self._remove_item_by_ids(item_ids) + def _on_merge_request(self): + if self._multivalue: + return + + item_ids = self._files_view.get_selected_item_ids() + if not item_ids: + return + + all_paths = [] + for item_id in item_ids: + file_item = self._files_model.get_file_item_by_id(item_id) + if not file_item: + return + + new_items = file_item.split_sequence() + for nitem in new_items: + all_paths.append(os.path.join(nitem.directory, nitem.filenames[0])) + unique_all_pahts = list(set(all_paths)) + self._remove_item_by_ids(item_ids) + new_items = FileDefItem.from_value(unique_all_pahts, True) + self._add_filepaths(new_items) + def _on_remove_requested(self): if self._multivalue: return @@ -911,6 +933,9 @@ class FilesWidget(QtWidgets.QFrame): split_action.triggered.connect(self._on_split_request) menu.addAction(split_action) + merge_action = QtWidgets.QAction("Merge sequence", menu) + merge_action.triggered.connect(self._on_merge_request) + menu.addAction(merge_action) remove_action = QtWidgets.QAction("Remove", menu) remove_action.triggered.connect(self._on_remove_requested) menu.addAction(remove_action) From b142bc4d457dd7665d19ba5f09247bb6619fc2a9 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 2 Jul 2025 09:49:44 +0200 Subject: [PATCH 140/595] expect folder path and task name in 'save_current_workfile_to' --- client/ayon_core/pipeline/workfile/utils.py | 18 +++++++++++++----- .../tools/workfiles/models/workfiles.py | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 177eb69694..a1371a4956 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -326,8 +326,8 @@ def open_workfile( def save_current_workfile_to( workfile_path: str, - folder_entity: dict[str, Any], - task_entity: dict[str, Any], + folder_path: str, + task_name: str, *, version: Optional[int] = None, comment: Optional[str] = None, @@ -338,8 +338,8 @@ def save_current_workfile_to( Args: workfile_path (str): Destination workfile path. - folder_entity (dict[str, Any]): Target folder entity. - task_entity (dict[str, Any]): Target task entity. + folder_path (str): Target folder path. + task_name (str): Target task name. version (Optional[int]): Workfile version. comment (optional[str]): Workfile comment. description (Optional[str]): Workfile description. @@ -350,6 +350,14 @@ def save_current_workfile_to( from ayon_core.pipeline.context_tools import registered_host host = registered_host() + context = host.get_current_context() + project_name = context["project_name"] + folder_entity = ayon_api.get_folder_by_path( + project_name, folder_path + ) + task_entity = ayon_api.get_task_by_name( + project_name, folder_entity["id"], task_name + ) host.save_workfile_with_context( workfile_path, folder_entity, @@ -398,7 +406,7 @@ def save_workfile_with_current_context( project_name, folder_entity["id"], task_name ) - save_current_workfile_to( + host.save_workfile_with_context( workfile_path, folder_entity, task_entity, diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 5e4e5db808..0a581d6498 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -167,7 +167,7 @@ class WorkfilesModel: ) failed = False try: - save_current_workfile_to( + self._host.save_workfile_with_context( filepath, folder_entity, task_entity, From bc9a1b6526fc939239719738adfab6c2ea172ddd Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 2 Jul 2025 09:53:46 +0200 Subject: [PATCH 141/595] remove unused import --- client/ayon_core/tools/workfiles/models/workfiles.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 0a581d6498..a1cca07178 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -38,7 +38,6 @@ from ayon_core.pipeline.workfile import ( get_last_workfile_with_version_from_paths, get_comments_from_workfile_paths, open_workfile, - save_current_workfile_to, copy_and_open_workfile, copy_and_open_workfile_representation, save_workfile_info, From 1b2d3606191fc7f294c113c35b90c3ebdf852f3f Mon Sep 17 00:00:00 2001 From: sjt-rvx <72554834+sjt-rvx@users.noreply.github.com> Date: Wed, 2 Jul 2025 10:22:35 +0000 Subject: [PATCH 142/595] Update client/ayon_core/tools/attribute_defs/files_widget.py Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- .../tools/attribute_defs/files_widget.py | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/client/ayon_core/tools/attribute_defs/files_widget.py b/client/ayon_core/tools/attribute_defs/files_widget.py index edac8059f0..f1b0f06dbc 100644 --- a/client/ayon_core/tools/attribute_defs/files_widget.py +++ b/client/ayon_core/tools/attribute_defs/files_widget.py @@ -900,18 +900,20 @@ class FilesWidget(QtWidgets.QFrame): if not item_ids: return - all_paths = [] + all_paths = set() + merged_item_ids = set() for item_id in item_ids: file_item = self._files_model.get_file_item_by_id(item_id) - if not file_item: - return - - new_items = file_item.split_sequence() - for nitem in new_items: - all_paths.append(os.path.join(nitem.directory, nitem.filenames[0])) - unique_all_pahts = list(set(all_paths)) - self._remove_item_by_ids(item_ids) - new_items = FileDefItem.from_value(unique_all_pahts, True) + if file_item is None: + continue + merged_item_ids.add(item_id) + all_paths |= { + os.path.join(file_item.directory, filename) + for filename in file_item.filenames + } + + self._remove_item_by_ids(merged_item_ids) + new_items = FileDefItem.from_value(list(all_paths), True) self._add_filepaths(new_items) def _on_remove_requested(self): From 63c81970316e66153cb2e2d05f1899c62fac89fd Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 2 Jul 2025 14:47:05 +0200 Subject: [PATCH 143/595] try to fix flickering issue in publisher --- client/ayon_core/tools/utils/widgets.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/tools/utils/widgets.py b/client/ayon_core/tools/utils/widgets.py index de2c42c91f..941aa692f9 100644 --- a/client/ayon_core/tools/utils/widgets.py +++ b/client/ayon_core/tools/utils/widgets.py @@ -441,14 +441,18 @@ class ExpandingTextEdit(QtWidgets.QTextEdit): margins = self.contentsMargins() document_width = 0 - if width >= margins.left() + margins.right(): - document_width = width - margins.left() - margins.right() + margins_size = margins.left() + margins.right() + if width >= margins_size: + document_width = width - margins_size document = self.document().clone() document.setTextWidth(document_width) return math.ceil( - margins.top() + document.size().height() + margins.bottom() + margins.top() + + document.size().height() + + margins.bottom() + + 2 ) def sizeHint(self): From 2228037656b8eeaa400fcaab1329c6416dbc050f Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Thu, 3 Jul 2025 09:57:20 +0200 Subject: [PATCH 144/595] Adds target color space data extraction to OIIO transcode processor. - Introduces extraction of `targetOCIOColorspace`, `targetOCIODisplay`, and `targetOCIOView` from instance data. - Removes redundant assignment of `target_colorspace`, `target_display`, and `target_view`. --- client/ayon_core/plugins/publish/extract_color_transcode.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/publish/extract_color_transcode.py b/client/ayon_core/plugins/publish/extract_color_transcode.py index ef718b8d02..7083d5094c 100644 --- a/client/ayon_core/plugins/publish/extract_color_transcode.py +++ b/client/ayon_core/plugins/publish/extract_color_transcode.py @@ -85,6 +85,11 @@ class ExtractOIIOTranscode(publish.Extractor): new_representations = [] repres = instance.data["representations"] for idx, repre in enumerate(list(repres)): + # target space, display and view might be defined upstream + target_colorspace = instance.data.get("targetOCIOColorspace") + target_display = instance.data.get("targetOCIODisplay") + target_view = instance.data.get("targetOCIOView") + self.log.debug("repre ({}): `{}`".format(idx + 1, repre["name"])) if not self._repre_is_valid(repre): continue @@ -126,7 +131,6 @@ class ExtractOIIOTranscode(publish.Extractor): transcoding_type = output_def["transcoding_type"] - target_colorspace = target_view = target_display = None # NOTE: we use colorspace_data as the fallback values for # the target colorspace. if transcoding_type == "colorspace": From 7006ed8940e62eacfae2d247f4d08b0988bb7201 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 7 Jul 2025 10:17:55 +0200 Subject: [PATCH 145/595] fix not existing dirs --- client/ayon_core/pipeline/workfile/path_resolving.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index 4e4c70a27c..b318137a5d 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -362,6 +362,10 @@ def _filter_dir_files_by_ext( if not ext.startswith("."): ext = f".{ext}" dotted_extensions.add(ext) + + if not os.path.exists(dirpath): + return [], dotted_extensions + filtered_paths = [ os.path.join(dirpath, filename) for filename in os.listdir(dirpath) From 206eb45cf49fc5dec1ae56200c1c18294f800914 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 7 Jul 2025 10:24:12 +0200 Subject: [PATCH 146/595] added 'save_workfile_with_current_context' to workfile init --- client/ayon_core/pipeline/workfile/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/ayon_core/pipeline/workfile/__init__.py b/client/ayon_core/pipeline/workfile/__init__.py index 52acb035b1..51327b8c09 100644 --- a/client/ayon_core/pipeline/workfile/__init__.py +++ b/client/ayon_core/pipeline/workfile/__init__.py @@ -24,6 +24,7 @@ from .utils import ( open_workfile, save_current_workfile_to, + save_workfile_with_current_context, copy_and_open_workfile, copy_and_open_workfile_representation, save_workfile_info, @@ -67,6 +68,7 @@ __all__ = ( "open_workfile", "save_current_workfile_to", + "save_workfile_with_current_context", "copy_and_open_workfile", "copy_and_open_workfile_representation", "save_workfile_info", From 5ff56aeda59cb89c1e4e8e4029a01888a7398ced Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 7 Jul 2025 10:24:25 +0200 Subject: [PATCH 147/595] use host methods in workfiles tool --- client/ayon_core/tools/workfiles/models/workfiles.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index a1cca07178..35ffc3102c 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -37,9 +37,6 @@ from ayon_core.pipeline.workfile import ( get_workfile_template_key, get_last_workfile_with_version_from_paths, get_comments_from_workfile_paths, - open_workfile, - copy_and_open_workfile, - copy_and_open_workfile_representation, save_workfile_info, ) from ayon_core.pipeline.version_start import get_versioning_start @@ -229,7 +226,7 @@ class WorkfilesModel: ) failed = False try: - copy_and_open_workfile_representation( + self._host.copy_workfile_representation( project_name, repre_entity, dst_filepath, @@ -291,7 +288,7 @@ class WorkfilesModel: ) failed = False try: - copy_and_open_workfile( + self._host.copy_workfile( src_filepath, workfile_path, folder_entity, @@ -671,7 +668,7 @@ class WorkfilesModel: anatomy=self._controller.project_anatomy, project_settings=self._controller.project_settings, ) - open_workfile( + self._host.open_workfile_with_context( filepath, folder_entity, task_entity, prepared_data=prepared_data ) self._update_current_context( From 43d9324e1028971dfb5b7b6a098422535cca89eb Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 7 Jul 2025 10:26:27 +0200 Subject: [PATCH 148/595] remove unnecessary functions --- .../ayon_core/pipeline/workfile/__init__.py | 6 - client/ayon_core/pipeline/workfile/utils.py | 104 ------------------ 2 files changed, 110 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/__init__.py b/client/ayon_core/pipeline/workfile/__init__.py index 51327b8c09..c6a0e0d80b 100644 --- a/client/ayon_core/pipeline/workfile/__init__.py +++ b/client/ayon_core/pipeline/workfile/__init__.py @@ -22,11 +22,8 @@ from .utils import ( should_open_workfiles_tool_on_launch, MissingWorkdirError, - open_workfile, save_current_workfile_to, save_workfile_with_current_context, - copy_and_open_workfile, - copy_and_open_workfile_representation, save_workfile_info, find_workfile_rootless_path, ) @@ -66,11 +63,8 @@ __all__ = ( "should_open_workfiles_tool_on_launch", "MissingWorkdirError", - "open_workfile", "save_current_workfile_to", "save_workfile_with_current_context", - "copy_and_open_workfile", - "copy_and_open_workfile_representation", "save_workfile_info", "BuildWorkfile", diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index a1371a4956..fd5cc4538e 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -305,25 +305,6 @@ def save_workfile_info( return workfile_entity -def open_workfile( - filepath: str, - folder_entity: dict[str, Any], - task_entity: dict[str, Any], - *, - prepared_data: Optional[OpenWorkfileOptionalData] = None, -): - from ayon_core.pipeline.context_tools import registered_host - - # Trigger before save event - host = registered_host() - host.open_workfile_with_context( - filepath, - folder_entity, - task_entity, - prepared_data=prepared_data, - ) - - def save_current_workfile_to( workfile_path: str, folder_path: str, @@ -417,91 +398,6 @@ def save_workfile_with_current_context( ) -def copy_and_open_workfile( - src_workfile_path: str, - workfile_path: str, - folder_entity: dict[str, Any], - task_entity: dict[str, Any], - *, - version: Optional[int] = None, - comment: Optional[str] = None, - description: Optional[str] = None, - prepared_data: Optional[CopyWorkfileOptionalData] = None, -) -> None: - """Copy workfile to new location and open it. - - Args: - src_workfile_path (str): Source workfile path. - workfile_path (str): Destination workfile path. - folder_entity (dict[str, Any]): Target folder entity. - task_entity (dict[str, Any]): Target task entity. - version (Optional[int]): Workfile version. - comment (optional[str]): Workfile comment. - description (Optional[str]): Workfile description. - prepared_data (Optional[CopyWorkfileOptionalData]): Prepared data - for speed enhancements. - - """ - from ayon_core.pipeline.context_tools import registered_host - - host = registered_host() - host.copy_workfile( - src_workfile_path, - workfile_path, - folder_entity, - task_entity, - version=version, - comment=comment, - description=description, - open_workfile=True, - prepared_data=prepared_data, - ) - - -def copy_and_open_workfile_representation( - src_project_name: str, - representation_entity: dict[str, Any], - workfile_path: str, - folder_entity: dict[str, Any], - task_entity: dict[str, Any], - *, - version: Optional[int] = None, - comment: Optional[str] = None, - description: Optional[str] = None, - prepared_data: Optional[CopyPublishedWorkfileOptionalData] = None, -) -> None: - """Copy workfile to new location and open it. - - Args: - src_project_name (str): Project name where representation is stored. - representation_entity (dict[str, Any]): Representation entity. - workfile_path (str): Destination workfile path. - folder_entity (dict[str, Any]): Target folder entity. - task_entity (dict[str, Any]): Target task entity. - version (Optional[int]): Workfile version. - comment (optional[str]): Workfile comment. - description (Optional[str]): Workfile description. - prepared_data (Optional[CopyPublishedWorkfileOptionalData]): Prepared - data for speed enhancements. - - """ - from ayon_core.pipeline.context_tools import registered_host - - host = registered_host() - host.copy_workfile_representation( - src_project_name, - representation_entity, - workfile_path, - folder_entity, - task_entity, - version=version, - comment=comment, - description=description, - open_workfile=True, - prepared_data=prepared_data, - ) - - def find_workfile_rootless_path( workfile_path: str, project_name: str, From 9c1aa9bfeffcd6af9569b6e3304113f84ed59dc9 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 7 Jul 2025 11:02:41 +0200 Subject: [PATCH 149/595] remove unused import --- client/ayon_core/pipeline/workfile/utils.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index fd5cc4538e..9e4194ccf6 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -12,9 +12,6 @@ from ayon_core.lib import filter_profiles, get_ayon_username from ayon_core.settings import get_project_settings from ayon_core.host.interfaces import ( SaveWorkfileOptionalData, - OpenWorkfileOptionalData, - CopyWorkfileOptionalData, - CopyPublishedWorkfileOptionalData, ) from .path_resolving import get_workfile_template_key From c54b7c25178e0c8910f16d7a94a7f78d17c33059 Mon Sep 17 00:00:00 2001 From: sjt-rvx <72554834+sjt-rvx@users.noreply.github.com> Date: Mon, 7 Jul 2025 10:58:18 +0000 Subject: [PATCH 150/595] Update client/ayon_core/tools/attribute_defs/files_widget.py Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/attribute_defs/files_widget.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/tools/attribute_defs/files_widget.py b/client/ayon_core/tools/attribute_defs/files_widget.py index f1b0f06dbc..4c55ae5620 100644 --- a/client/ayon_core/tools/attribute_defs/files_widget.py +++ b/client/ayon_core/tools/attribute_defs/files_widget.py @@ -911,7 +911,6 @@ class FilesWidget(QtWidgets.QFrame): os.path.join(file_item.directory, filename) for filename in file_item.filenames } - self._remove_item_by_ids(merged_item_ids) new_items = FileDefItem.from_value(list(all_paths), True) self._add_filepaths(new_items) From cd6136ba00667adfe1c810e9e3986604066e229b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 7 Jul 2025 14:32:02 +0200 Subject: [PATCH 151/595] show all arguments in IDE --- client/ayon_core/host/interfaces/workfiles.py | 44 +++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 4eb8b08719..3c86d9caa3 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -102,11 +102,19 @@ class ListWorkfilesOptionalData(_WorkfileOptionalData): def __init__( self, *, + project_entity: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, + project_settings: Optional[dict[str, Any]] = None, template_key: Optional[str] = None, workfile_entities: Optional[list[dict[str, Any]]] = None, **kwargs ): - super().__init__(**kwargs) + super().__init__( + project_entity=project_entity, + anatomy=anatomy, + project_settings=project_settings, + **kwargs + ) self.template_key = template_key self.workfile_entities = workfile_entities @@ -147,12 +155,20 @@ class ListPublishedWorkfilesOptionalData(_WorkfileOptionalData): def __init__( self, *, + project_entity: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, + project_settings: Optional[dict[str, Any]] = None, product_entities: Optional[list[dict[str, Any]]] = None, version_entities: Optional[list[dict[str, Any]]] = None, repre_entities: Optional[list[dict[str, Any]]] = None, **kwargs ): - super().__init__(**kwargs) + super().__init__( + project_entity=project_entity, + anatomy=anatomy, + project_settings=project_settings, + **kwargs + ) self.product_entities = product_entities self.version_entities = version_entities @@ -202,11 +218,19 @@ class SaveWorkfileOptionalData(_WorkfileOptionalData): def __init__( self, *, + project_entity: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, + project_settings: Optional[dict[str, Any]] = None, rootless_path: Optional[str] = None, workfile_entities: Optional[list[dict[str, Any]]] = None, **kwargs ): - super().__init__(**kwargs) + super().__init__( + project_entity=project_entity, + anatomy=anatomy, + project_settings=project_settings, + **kwargs + ) self.rootless_path = rootless_path self.workfile_entities = workfile_entities @@ -260,11 +284,23 @@ class CopyPublishedWorkfileOptionalData(SaveWorkfileOptionalData): def __init__( self, + project_entity: Optional[dict[str, Any]] = None, + anatomy: Optional["Anatomy"] = None, + project_settings: Optional[dict[str, Any]] = None, + rootless_path: Optional[str] = None, + workfile_entities: Optional[list[dict[str, Any]]] = None, src_anatomy: Optional["Anatomy"] = None, src_representation_path: Optional[str] = None, **kwargs ): - super().__init__(**kwargs) + super().__init__( + rootless_path=rootless_path, + workfile_entities=workfile_entities, + project_entity=project_entity, + anatomy=anatomy, + project_settings=project_settings, + **kwargs + ) self.src_anatomy = src_anatomy self.src_representation_path = src_representation_path From c8b2ad1ce23ed3de9958317a3b309bbcc57d5e15 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 7 Jul 2025 14:42:28 +0200 Subject: [PATCH 152/595] use 'AnatomyTemplateResult' for workdir output typehint --- client/ayon_core/pipeline/anatomy/__init__.py | 4 ++++ .../ayon_core/pipeline/workfile/path_resolving.py | 14 +++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/client/ayon_core/pipeline/anatomy/__init__.py b/client/ayon_core/pipeline/anatomy/__init__.py index 7000f51495..36bc2a138d 100644 --- a/client/ayon_core/pipeline/anatomy/__init__.py +++ b/client/ayon_core/pipeline/anatomy/__init__.py @@ -6,6 +6,7 @@ from .exceptions import ( AnatomyTemplateUnsolved, ) from .anatomy import Anatomy +from .templates import AnatomyTemplateResult, AnatomyStringTemplate __all__ = ( @@ -16,4 +17,7 @@ __all__ = ( "AnatomyTemplateUnsolved", "Anatomy", + + "AnatomyTemplateResult", + "AnatomyStringTemplate", ) diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index b318137a5d..0e364ebc01 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -19,7 +19,7 @@ from ayon_core.pipeline import version_start, Anatomy from ayon_core.pipeline.template_data import get_template_data if typing.TYPE_CHECKING: - from ayon_core.lib.path_templates import TemplateResult + from ayon_core.pipeline.anatomy import AnatomyTemplateResult def get_workfile_template_key_from_context( @@ -117,7 +117,7 @@ def get_workdir_with_workdir_data( anatomy=None, template_key=None, project_settings=None -) -> "TemplateResult": +) -> "AnatomyTemplateResult": """Fill workdir path from entered data and project's anatomy. It is possible to pass only project's name instead of project's anatomy but @@ -136,7 +136,7 @@ def get_workdir_with_workdir_data( if 'template_key' is not passed. Returns: - TemplateResult: Workdir path. + AnatomyTemplateResult: Workdir path. """ if not anatomy: @@ -153,7 +153,7 @@ def get_workdir_with_workdir_data( template_obj = anatomy.get_template_item( "work", template_key, "directory" ) - # Output is TemplateResult object which contain useful data + # Output is AnatomyTemplateResult object which contain useful data output = template_obj.format_strict(workdir_data) if output: return output.normalized() @@ -168,7 +168,7 @@ def get_workdir( anatomy=None, template_key=None, project_settings=None -) -> "TemplateResult": +) -> "AnatomyTemplateResult": """Fill workdir path from entered data and project's anatomy. Args: @@ -189,7 +189,7 @@ def get_workdir( if 'template_key' is not passed. Returns: - TemplateResult: Workdir path. + AnatomyTemplateResult: Workdir path. """ if not anatomy: @@ -203,7 +203,7 @@ def get_workdir( task_entity, host_name, ) - # Output is TemplateResult object which contain useful data + # Output is AnatomyTemplateResult object which contain useful data return get_workdir_with_workdir_data( workdir_data, anatomy.project_name, From b70385ab3ab3a871e7c528b5c3ee55a2faf977ef Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 7 Jul 2025 14:42:40 +0200 Subject: [PATCH 153/595] implemented save next version helper --- client/ayon_core/pipeline/workfile/utils.py | 134 +++++++++++++++++++- 1 file changed, 133 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 9e4194ccf6..0e24b33555 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -12,9 +12,16 @@ from ayon_core.lib import filter_profiles, get_ayon_username from ayon_core.settings import get_project_settings from ayon_core.host.interfaces import ( SaveWorkfileOptionalData, + ListWorkfilesOptionalData, ) +from ayon_core.pipeline.version_start import get_versioning_start +from ayon_core.pipeline.template_data import get_template_data -from .path_resolving import get_workfile_template_key +from .path_resolving import ( + get_workdir, + get_workfile_template_key, + get_last_workfile_with_version_from_paths, +) if typing.TYPE_CHECKING: from ayon_core.pipeline import Anatomy @@ -395,6 +402,131 @@ def save_workfile_with_current_context( ) +def save_next_version( + version: Optional[int] = None, + comment: Optional[str] = None, + description: Optional[str] = None, +) -> None: + """Save workfile using current context, version and comment. + + Helper function to save workfile using current context. Last workfile + version + 1 is used if is not passed in. + + Args: + version (Optional[int]): Workfile version that will be used. Last + version + 1 is used if is not passed in. + comment (optional[str]): Workfile comment. + description (Optional[str]): Workfile description. + + """ + from ayon_core.pipeline import Anatomy + from ayon_core.pipeline.context_tools import registered_host + + host = registered_host() + + context = host.get_current_context() + project_name = context["project_name"] + folder_path = context["folder_path"] + task_name = context["task_name"] + project_entity = ayon_api.get_project(project_name) + project_settings = get_project_settings(project_name) + anatomy = Anatomy(project_name, project_entity=project_entity) + folder_entity = ayon_api.get_folder_by_path(project_name, folder_path) + task_entity = ayon_api.get_task_by_name( + project_name, folder_entity["id"], task_name + ) + + template_key = get_workfile_template_key( + project_name, + task_entity["taskType"], + host.name, + project_settings=project_settings + ) + file_template = anatomy.get_template_item("work", template_key, "file") + template_data = get_template_data( + project_entity, + folder_entity, + task_entity, + host.name, + project_settings, + ) + workdir = get_workdir( + project_entity, + folder_entity, + task_entity, + host.name, + anatomy=anatomy, + template_key=template_key, + project_settings=project_settings, + ) + rootless_dir = workdir.rootless + if version is None: + workfile_extensions = host.get_workfile_extensions() + if not workfile_extensions: + raise ValueError("Host does not have defined file extensions") + workfiles = host.list_workfiles( + project_name, folder_entity, task_entity, + prepared_data=ListWorkfilesOptionalData( + project_entity=project_entity, + anatomy=anatomy, + project_settings=project_settings, + template_key=template_key, + ) + ) + filepaths = [ + workfile.filepath + for workfile in workfiles + ] + + dotted_extensions = set() + for ext in workfile_extensions: + if not ext.startswith("."): + ext = f".{ext}" + dotted_extensions.add(ext) + + last_path, last_version = get_last_workfile_with_version_from_paths( + filepaths, + file_template, + template_data, + dotted_extensions, + ) + if last_path is None: + version = get_versioning_start( + project_name, + host.name, + task_name=task_entity["name"], + task_type=task_entity["taskType"], + product_type="workfile" + ) + else: + version = last_version + 1 + + template_data["version"] = version + template_data["comment"] = comment + + filename = file_template.format_strict(template_data) + workfile_path = os.path.join(workdir, filename) + rootless_path = f"{rootless_dir}/{filename}" + if platform.system().lower() == "windows": + rootless_path = rootless_path.replace("\\", "/") + + prepared_data = SaveWorkfileOptionalData( + project_entity=project_entity, + anatomy=anatomy, + project_settings=project_settings, + rootless_path=rootless_path, + ) + host.save_workfile_with_context( + workfile_path, + folder_entity, + task_entity, + version=version, + comment=comment, + description=description, + prepared_data=prepared_data, + ) + + def find_workfile_rootless_path( workfile_path: str, project_name: str, From 4517d55c456f28565ab7f8340b4c754d2bb839ee Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:16:23 +0200 Subject: [PATCH 154/595] implemented helper function to parse data from filename using template --- .../pipeline/workfile/path_resolving.py | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index 0e364ebc01..ed7ac03e81 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -6,6 +6,7 @@ import platform import warnings import typing from typing import Optional, Dict, Any +from dataclasses import dataclass import ayon_api @@ -213,6 +214,85 @@ def get_workdir( ) +@dataclass +class WorkfileParsedData: + version: Optional[int] = None + comment: Optional[str] = None + ext: Optional[str] = None + + +class WorkfileDataParser: + """Parse dynamic data from existing filenames based on template. + + Args: + file_template (str): Workfile file template. + data (dict[str, Any]): Data to fill the template with. + + """ + def __init__( + self, + file_template: str, + data: dict[str, Any], + ): + data = copy.deepcopy(data) + file_template = str(file_template) + # Use placeholders that will never be in the filename + ext_replacement = "CIextID" + version_replacement = "CIversionID" + comment_replacement = "CIcommentID" + data["version"] = version_replacement + data["comment"] = comment_replacement + for pattern, replacement in ( + # Replace `.{ext}` with `{ext}` so we are sure dot is not at the end + (r"\.?{ext}", ext_replacement), + ): + file_template = re.sub(pattern, replacement, file_template) + + file_template = StringTemplate(file_template) + comment_template = re.escape(str(file_template.format_strict(data))) + data.pop("comment") + file_template = re.escape(str(file_template.format_strict(data))) + for src, replacement in ( + (ext_replacement, r"(?P\..*)"), + (version_replacement, r"(?P[0-9]+)"), + (comment_replacement, r"(?P.+?)"), + ): + comment_template = comment_template.replace(src, replacement) + file_template = file_template.replace(src, replacement) + + kwargs = {} + if platform.system().lower() == "windows": + kwargs["flags"] = re.IGNORECASE + + # Match from beginning to end of string to be safe + self._comment_template = re.compile(f"^{comment_template}$", **kwargs) + self._file_template = re.compile(f"^{file_template}$", **kwargs) + + def parse_data(self, filename: str) -> WorkfileParsedData: + """Parse the dynamic data from a filename.""" + match = self._comment_template.match(filename) + if not match: + match = self._file_template.match(filename) + + if not match: + return WorkfileParsedData() + + kwargs = match.groupdict() + version = kwargs.get("version") + if version is not None: + kwargs["version"] = int(version) + return WorkfileParsedData(**kwargs) + + +def parse_data_from_workfile( + filename: str, + file_template: str, + template_data: dict[str, Any], +) -> WorkfileParsedData: + parser = WorkfileDataParser(file_template, template_data) + return parser.parse_data(filename) + + def get_last_workfile_with_version_from_paths( filepaths: list[str], file_template: str, From e09f87262d06696ea1e4c4b74268240fecd6d682 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:16:43 +0200 Subject: [PATCH 155/595] store version and comment from filename to WorkfileInfo --- client/ayon_core/host/interfaces/workfiles.py | 59 +++++++++++++++---- 1 file changed, 46 insertions(+), 13 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 3c86d9caa3..53ec02ac57 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -639,6 +639,8 @@ class WorkfileInfo: filepath (str): Path to the workfile. rootless_path (str): Path to the workfile without the root. And without backslashes on Windows. + version (Optional[int]): Version of the workfile. + comment (Optional[str]): Comment of the workfile. file_size (Optional[float]): Size of the workfile in bytes. file_created (Optional[float]): Timestamp when the workfile was created on the filesystem. @@ -656,6 +658,8 @@ class WorkfileInfo: """ filepath: str rootless_path: str + version: Optional[int] + comment: Optional[str] file_size: Optional[float] file_created: Optional[float] file_modified: Optional[float] @@ -671,6 +675,8 @@ class WorkfileInfo: filepath: str, rootless_path: str, *, + version: Optional[int], + comment: Optional[str], available: bool, workfile_entity: dict[str, Any], ): @@ -691,6 +697,8 @@ class WorkfileInfo: return cls( filepath=filepath, rootless_path=rootless_path, + version=version, + comment=comment, file_size=file_size, file_created=file_created, file_modified=file_modified, @@ -1047,7 +1055,10 @@ class IWorkfileHost: """ from ayon_core.pipeline.template_data import get_template_data - from ayon_core.pipeline.workfile import get_workdir_with_workdir_data + from ayon_core.pipeline.workfile.path_resolving import ( + get_workdir_with_workdir_data, + WorkfileDataParser, + ) extensions = self.get_workfile_extensions() if not extensions: @@ -1080,22 +1091,18 @@ class IWorkfileHost: project_settings=list_workfiles_context.project_settings, ) + file_template = list_workfiles_context.anatomy.get_template_item( + "work", list_workfiles_context.template_key, "file" + ) + rootless_workdir = workdir.rootless if platform.system().lower() == "windows": - rootless_workdir = workdir.replace("\\", "/") - else: - rootless_workdir = workdir - - used_roots = workdir.used_values.get("root") - if used_roots: - used_root_name = next(iter(used_roots)) - root_value = used_roots[used_root_name] - workdir_end = rootless_workdir[len(root_value):].lstrip("/") - rootless_workdir = f"{{root[{used_root_name}]}}/{workdir_end}" + rootless_workdir = rootless_workdir.replace("\\", "/") filenames = [] if os.path.exists(workdir): filenames = list(os.listdir(workdir)) + data_parser = WorkfileDataParser(file_template, workdir_data) items = [] for filename in filenames: # TODO add 'default' support for folders @@ -1109,12 +1116,26 @@ class IWorkfileHost: workfile_entity = workfile_entities_by_path.pop( rootless_path, None ) - items.append(WorkfileInfo.new( + version = comment = None + if workfile_entity: + _data = workfile_entity["data"] + version = _data.get("version") + comment = _data.get("comment") + + if version is None: + parsed_data = data_parser.parse_data(filename) + version = parsed_data.version + comment = parsed_data.comment + + item = WorkfileInfo.new( filepath, rootless_path, + version=version, + comment=comment, available=True, workfile_entity=workfile_entity, - )) + ) + items.append(item) for workfile_entity in workfile_entities_by_path.values(): # Workfile entity is not in the filesystem @@ -1123,10 +1144,22 @@ class IWorkfileHost: ext = os.path.splitext(rootless_path)[1].lower() if ext not in extensions: continue + + _data = workfile_entity["data"] + version = _data.get("version") + comment = _data.get("comment") + if version is None: + filename = os.path.basename(rootless_path) + parsed_data = data_parser.parse_data(filename) + version = parsed_data.version + comment = parsed_data.comment + filepath = prepared_data.anatomy.fill_root(rootless_path) items.append(WorkfileInfo.new( filepath, rootless_path, + version=version, + comment=comment, available=False, workfile_entity=workfile_entity, )) From eeb839a65c0fa159bdf71b0fdf6771b38c8e8682 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:17:17 +0200 Subject: [PATCH 156/595] use version on workfile info to find last version --- client/ayon_core/pipeline/workfile/utils.py | 27 ++++++--------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 0e24b33555..82326754b8 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -20,7 +20,6 @@ from ayon_core.pipeline.template_data import get_template_data from .path_resolving import ( get_workdir, get_workfile_template_key, - get_last_workfile_with_version_from_paths, ) if typing.TYPE_CHECKING: @@ -473,24 +472,16 @@ def save_next_version( template_key=template_key, ) ) - filepaths = [ - workfile.filepath + versions = { + workfile.version for workfile in workfiles - ] + if workfile.version is not None + } + version = None + if versions: + version = max(versions) + 1 - dotted_extensions = set() - for ext in workfile_extensions: - if not ext.startswith("."): - ext = f".{ext}" - dotted_extensions.add(ext) - - last_path, last_version = get_last_workfile_with_version_from_paths( - filepaths, - file_template, - template_data, - dotted_extensions, - ) - if last_path is None: + if version is None: version = get_versioning_start( project_name, host.name, @@ -498,8 +489,6 @@ def save_next_version( task_type=task_entity["taskType"], product_type="workfile" ) - else: - version = last_version + 1 template_data["version"] = version template_data["comment"] = comment From bc433532f02d192902663d556faf97bca955b413 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:17:28 +0200 Subject: [PATCH 157/595] always store all data even if are set to None --- client/ayon_core/pipeline/workfile/utils.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 82326754b8..0c3a50446d 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -586,13 +586,9 @@ def _create_workfile_info_entity( attrib[key] = value data = { - key: value - for key, value in ( - ("host_name", host_name), - ("version", version), - ("comment", comment), - ) - if value is not None + "host_name": host_name, + "version": version, + "comment": comment, } workfile_info = { From b9cad42dc28b7e1367a0dea119dc37f4849851e2 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 7 Jul 2025 18:17:47 +0200 Subject: [PATCH 158/595] use data from WorkfileInfo in workfiles tool --- .../tools/workfiles/models/workfiles.py | 66 ++++++++----------- 1 file changed, 29 insertions(+), 37 deletions(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index 35ffc3102c..b08a138cc2 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -466,19 +466,20 @@ class WorkfilesModel: template_has_comment = "{comment" in file_template_str file_items = self.get_workarea_file_items(folder_id, task_id) - filepaths = [ - item.filepath - for item in file_items - ] - comment_hints, comment = get_comments_from_workfile_paths( - filepaths, - extensions, - file_template, - fill_data, - current_filename, - ) + comment_hints = set() + comment = None + for item in file_items: + filepath = item.filepath + filename = os.path.basename(filepath) + if filename == current_filename: + comment = item.comment + + if item.comment: + comment_hints.add(item.comment) + comment_hints = list(comment_hints) + last_version = self._get_last_workfile_version( - filepaths, file_template_str, fill_data, extensions + file_items, task_entity ) return { @@ -530,15 +531,11 @@ class WorkfilesModel: if use_last_version: file_items = self.get_workarea_file_items(folder_id, task_id) - filepaths = [ - item.filepath - for item in file_items - ] + task_entity = self._controller.get_task_entity( + self._project_name, task_id + ) version = self._get_last_workfile_version( - filepaths, - file_template.template, - fill_data, - self._extensions + file_items, task_entity ) fill_data["version"] = version fill_data["ext"] = extension.lstrip(".") @@ -800,11 +797,7 @@ class WorkfilesModel: ) def _get_last_workfile_version( - self, - filepaths: list[str], - file_template: str, - fill_data: dict[str, Any], - extensions: set[str] + self, file_items: list[WorkfileInfo], task_entity: dict[str, Any] ) -> int: """ @@ -813,27 +806,26 @@ class WorkfilesModel: last version + 1 which might be wrong. Args: - filepaths (list[str]): Workfile paths. - file_template (str): File template. - fill_data (dict[str, Any]): Fill data. - extensions (set[str]): Extensions. + file_items (list[WorkfileInfo]): Workfile items. + task_entity (dict[str, Any]): Task entity. Returns: int: Next workfile version. """ - version = get_last_workfile_with_version_from_paths( - filepaths, file_template, fill_data, extensions - )[1] - if version is not None: - return version + 1 + versions = { + item.version + for item in file_items + if item.version is not None + } + if versions: + return max(versions) + 1 - task_info = fill_data.get("task", {}) return get_versioning_start( self._project_name, self._host_name, - task_name=task_info.get("name"), - task_type=task_info.get("type"), + task_name=task_entity["name"], + task_type=task_entity["taskType"], product_type="workfile", project_settings=self._controller.project_settings, ) From 72bde0349b0112f558d3b742128d864de13d055f Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Tue, 8 Jul 2025 17:04:35 +0200 Subject: [PATCH 159/595] Allow to push to other projects not only Library --- .../tools/push_to_project/control.py | 10 +++++++ .../tools/push_to_project/ui/window.py | 26 ++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index fb080d158b..f24d11d0b7 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -40,6 +40,8 @@ class PushToContextController: self.set_source(project_name, version_id) + self._library_only = True + # Events system def emit_event(self, topic, data=None, source=None): """Use implemented event system to trigger event.""" @@ -128,6 +130,14 @@ class PushToContextController: self._src_label = self._prepare_source_label() return self._src_label + def get_library_only(self): + """Returns state of library filter""" + return self._library_only + + def set_library_only(self, state: bool): + """Change state of library filter""" + self._library_only = state + def get_project_items(self, sender=None): return self._projects_model.get_project_items(sender) diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index a69c512fcd..566a0fc605 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -85,6 +85,14 @@ class PushToContextSelectWindow(QtWidgets.QWidget): header_widget = QtWidgets.QWidget(main_context_widget) + library_only = self._controller.get_library_only() + library_only_label = QtWidgets.QLabel( + "Show only libraries", + header_widget + ) + library_only_checkbox = NiceCheckbox( + library_only, parent=header_widget) + header_label = QtWidgets.QLabel( controller.get_source_label(), header_widget @@ -93,6 +101,14 @@ class PushToContextSelectWindow(QtWidgets.QWidget): header_layout = QtWidgets.QHBoxLayout(header_widget) header_layout.setContentsMargins(0, 0, 0, 0) header_layout.addWidget(header_label) + header_layout.addStretch() + + library_only_layout = QtWidgets.QHBoxLayout() + library_only_layout.addWidget(library_only_label) + library_only_layout.addWidget(library_only_checkbox) + library_only_layout.setSpacing(5) # or whatever spacing you prefer + + header_layout.addLayout(library_only_layout) main_splitter = QtWidgets.QSplitter( QtCore.Qt.Horizontal, main_context_widget @@ -102,7 +118,7 @@ class PushToContextSelectWindow(QtWidgets.QWidget): projects_combobox = ProjectsCombobox(controller, context_widget) projects_combobox.set_select_item_visible(True) - projects_combobox.set_standard_filter_enabled(True) + projects_combobox.set_standard_filter_enabled(library_only) context_splitter = QtWidgets.QSplitter( QtCore.Qt.Vertical, context_widget @@ -240,6 +256,7 @@ class PushToContextSelectWindow(QtWidgets.QWidget): folder_name_input.textChanged.connect(self._on_new_folder_change) variant_input.textChanged.connect(self._on_variant_change) comment_input.textChanged.connect(self._on_comment_change) + library_only_checkbox.stateChanged.connect(self._on_library_only_change) publish_btn.clicked.connect(self._on_select_click) cancel_btn.clicked.connect(self._on_close_click) @@ -394,6 +411,13 @@ class PushToContextSelectWindow(QtWidgets.QWidget): self._comment_input_text = text self._user_input_changed_timer.start() + def _on_library_only_change(self, state: int) -> None: + """Change toggle state, reset filter, recalculate dropdown""" + state = bool(state) + self._controller.set_library_only(state) + self._projects_combobox.set_standard_filter_enabled(state) + self._projects_combobox.refresh() + def _on_user_input_timer(self): folder_name_enabled = self._new_folder_name_enabled folder_name = self._new_folder_name_input_text From e880b2983896cb79493266c61f08089e16d109a4 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Tue, 8 Jul 2025 17:06:11 +0200 Subject: [PATCH 160/595] Changed label of action Push to --- client/ayon_core/plugins/load/push_to_library.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/load/push_to_library.py b/client/ayon_core/plugins/load/push_to_library.py index 981028d734..825192c15e 100644 --- a/client/ayon_core/plugins/load/push_to_library.py +++ b/client/ayon_core/plugins/load/push_to_library.py @@ -14,7 +14,7 @@ class PushToLibraryProject(load.ProductLoaderPlugin): representations = {"*"} product_types = {"*"} - label = "Push to Library project" + label = "Push to (Library) project" order = 35 icon = "send" color = "#d8d8d8" From 6fd5ee7ed0e5ff274cd814f41c8ff31ccdf4a926 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 9 Jul 2025 15:06:18 +0200 Subject: [PATCH 161/595] use context instead of prepared data --- client/ayon_core/host/interfaces/workfiles.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 53ec02ac57..b6c33337e9 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -1154,7 +1154,7 @@ class IWorkfileHost: version = parsed_data.version comment = parsed_data.comment - filepath = prepared_data.anatomy.fill_root(rootless_path) + filepath = list_workfiles_context.anatomy.fill_root(rootless_path) items.append(WorkfileInfo.new( filepath, rootless_path, @@ -1203,14 +1203,14 @@ class IWorkfileHost: versions_by_id = { version_entity["id"]: version_entity - for version_entity in prepared_data.version_entities + for version_entity in list_workfiles_context.version_entities } extensions = { ext.lstrip(".") for ext in self.get_workfile_extensions() } items = [] - for repre_entity in prepared_data.repre_entities: + for repre_entity in list_workfiles_context.repre_entities: version_id = repre_entity["versionId"] version_entity = versions_by_id[version_id] task_id = version_entity["taskId"] @@ -1232,7 +1232,7 @@ class IWorkfileHost: try: workfile_path = workfile_path.format( - root=prepared_data.anatomy.roots + root=list_workfiles_context.anatomy.roots ) except Exception: self.log.warning( From 77a31cb5e95003fd6e97e7d01e5aa036bc3b07e2 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 9 Jul 2025 15:14:58 +0200 Subject: [PATCH 162/595] added helper functions to parse dynamic data from workfile --- .../pipeline/workfile/path_resolving.py | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index ed7ac03e81..b750e3bf47 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -284,15 +284,54 @@ class WorkfileDataParser: return WorkfileParsedData(**kwargs) -def parse_data_from_workfile( +def parse_dynamic_data_from_workfile( filename: str, file_template: str, template_data: dict[str, Any], ) -> WorkfileParsedData: + """Parse dynamic data from a workfile filename. + + Dynamic data are 'version', 'comment' and 'ext'. + + Args: + filename (str): Workfile filename. + file_template (str): Workfile file template. + template_data (dict[str, Any]): Data to fill the template with. + + Returns: + WorkfileParsedData: Dynamic data parsed from the filename. + + """ parser = WorkfileDataParser(file_template, template_data) return parser.parse_data(filename) +def parse_dynamic_data_from_workfiles( + filenames: list[str], + file_template: str, + template_data: dict[str, Any], +) -> dict[str, WorkfileParsedData]: + """Parse dynamic data from a workfiles filenames. + + Dynamic data are 'version', 'comment' and 'ext'. + + Args: + filenames (list[str]): Workfiles filenames. + file_template (str): Workfile file template. + template_data (dict[str, Any]): Data to fill the template with. + + Returns: + dict[str, WorkfileParsedData]: Dynamic data parsed from the filenames + by filename. + + """ + parser = WorkfileDataParser(file_template, template_data) + return { + filename: parser.parse_data(filename) + for filename in filenames + } + + def get_last_workfile_with_version_from_paths( filepaths: list[str], file_template: str, From 567c8ed650bf523c724a6ddc6d9e34cc830f238c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 9 Jul 2025 15:15:12 +0200 Subject: [PATCH 163/595] added warnings to comment matcher function and class --- .../ayon_core/pipeline/workfile/path_resolving.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index b750e3bf47..3f7d23f07f 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -824,6 +824,12 @@ class CommentMatcher: file_template: StringTemplate, data: dict[str, Any] ): + warnings.warn( + "Class 'CommentMatcher' is deprecated. Please" + " use 'parse_dynamic_data_from_workfiles' instead.", + DeprecationWarning, + stacklevel=2, + ) self._fname_regex = None if "{comment}" not in file_template: @@ -873,7 +879,7 @@ def get_comments_from_workfile_paths( template_data: dict[str, Any], current_filename: Optional[str] = None, ) -> tuple[list[str], str]: - """Collect comments from workfile filenames. + """DEPRECATED Collect comments from workfile filenames. Based on 'current_filename' is also returned "current comment". @@ -888,6 +894,12 @@ def get_comments_from_workfile_paths( tuple[list[str], str]: List of comments and the current comment. """ + warnings.warn( + "Function 'get_comments_from_workfile_paths' is deprecated. Please" + " use 'parse_dynamic_data_from_workfiles' instead.", + DeprecationWarning, + stacklevel=2, + ) current_comment = "" if not filepaths: return [], current_comment From bb4b975bf59692bf752bbedcd88c850e13988e6b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 9 Jul 2025 15:17:56 +0200 Subject: [PATCH 164/595] added explaining comment --- client/ayon_core/pipeline/workfile/path_resolving.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index 3f7d23f07f..a13fe6b5cc 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -249,7 +249,14 @@ class WorkfileDataParser: file_template = re.sub(pattern, replacement, file_template) file_template = StringTemplate(file_template) + # Prepare template that does contain 'comment' comment_template = re.escape(str(file_template.format_strict(data))) + # Prepare template that does not contain 'comment' + # - comment is usually marked as optional and in that case the regex + # to find the comment is different based on the filename + # - if filename contains comment then 'comment_template' will match + # - if filename does not contain comment then 'file_template' will + # match data.pop("comment") file_template = re.escape(str(file_template.format_strict(data))) for src, replacement in ( From 86ce8d799bb12326c226a88032ec9d7f48ab39e4 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 9 Jul 2025 15:22:02 +0200 Subject: [PATCH 165/595] remove unused imports --- client/ayon_core/tools/workfiles/models/workfiles.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index b08a138cc2..d33a532222 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -35,8 +35,6 @@ from ayon_core.pipeline.template_data import ( from ayon_core.pipeline.workfile import ( get_workdir_with_workdir_data, get_workfile_template_key, - get_last_workfile_with_version_from_paths, - get_comments_from_workfile_paths, save_workfile_info, ) from ayon_core.pipeline.version_start import get_versioning_start From e9e6c68523dd2da20c031381006375427630f24c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 9 Jul 2025 15:22:11 +0200 Subject: [PATCH 166/595] fix line length --- client/ayon_core/pipeline/workfile/path_resolving.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/path_resolving.py b/client/ayon_core/pipeline/workfile/path_resolving.py index a13fe6b5cc..b806f1ebf0 100644 --- a/client/ayon_core/pipeline/workfile/path_resolving.py +++ b/client/ayon_core/pipeline/workfile/path_resolving.py @@ -243,7 +243,8 @@ class WorkfileDataParser: data["version"] = version_replacement data["comment"] = comment_replacement for pattern, replacement in ( - # Replace `.{ext}` with `{ext}` so we are sure dot is not at the end + # Replace `.{ext}` with `{ext}` so we are sure dot is not + # at the end (r"\.?{ext}", ext_replacement), ): file_template = re.sub(pattern, replacement, file_template) From 02ed6cb9e080a1f3f0e751dd046fe14470edb1f7 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 9 Jul 2025 16:34:33 +0200 Subject: [PATCH 167/595] remove double slashes --- client/ayon_core/host/interfaces/workfiles.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index b6c33337e9..193d59322b 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -1113,6 +1113,11 @@ class IWorkfileHost: filepath = os.path.join(workdir, filename) rootless_path = f"{rootless_workdir}/{filename}" + # Double slashes can happen when root leads to root of disk or + # when task exists on root folder + # - '/{hierarchy}/{folder[name]}' -> '//some_folder' + while "//" in rootless_path: + rootless_path = rootless_path.replace("//", "/") workfile_entity = workfile_entities_by_path.pop( rootless_path, None ) From 6b452e49291db234a0bc8d37105baf4c5571139e Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 9 Jul 2025 17:50:35 +0200 Subject: [PATCH 168/595] fix the slashes issue at the root --- client/ayon_core/host/interfaces/workfiles.py | 5 ----- client/ayon_core/lib/path_templates.py | 7 ++++++- client/ayon_core/pipeline/anatomy/templates.py | 10 ++++++++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 193d59322b..b6c33337e9 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -1113,11 +1113,6 @@ class IWorkfileHost: filepath = os.path.join(workdir, filename) rootless_path = f"{rootless_workdir}/{filename}" - # Double slashes can happen when root leads to root of disk or - # when task exists on root folder - # - '/{hierarchy}/{folder[name]}' -> '//some_folder' - while "//" in rootless_path: - rootless_path = rootless_path.replace("//", "/") workfile_entity = workfile_entities_by_path.pop( rootless_path, None ) diff --git a/client/ayon_core/lib/path_templates.py b/client/ayon_core/lib/path_templates.py index 9e3e455a6c..c6e9e14eac 100644 --- a/client/ayon_core/lib/path_templates.py +++ b/client/ayon_core/lib/path_templates.py @@ -3,6 +3,7 @@ import re import copy import numbers import warnings +import platform from string import Formatter import typing from typing import List, Dict, Any, Set @@ -12,6 +13,7 @@ if typing.TYPE_CHECKING: SUB_DICT_PATTERN = re.compile(r"([^\[\]]+)") OPTIONAL_PATTERN = re.compile(r"(<.*?[^{0]*>)[^0-9]*?") +_IS_WINDOWS = platform.system().lower() == "windows" class TemplateUnsolved(Exception): @@ -277,8 +279,11 @@ class TemplateResult(str): """Convert to normalized path.""" cls = self.__class__ + path = str(self) + if _IS_WINDOWS: + path = path.replace("\\", "/") return cls( - os.path.normpath(self.replace("\\", "/")), + os.path.normpath(path), self.template, self.solved, self.used_values, diff --git a/client/ayon_core/pipeline/anatomy/templates.py b/client/ayon_core/pipeline/anatomy/templates.py index d89b70719e..e3ec005089 100644 --- a/client/ayon_core/pipeline/anatomy/templates.py +++ b/client/ayon_core/pipeline/anatomy/templates.py @@ -1,6 +1,7 @@ import os import re import copy +import platform import collections import numbers @@ -15,6 +16,7 @@ from .exceptions import ( AnatomyTemplateUnsolved, ) +_IS_WINDOWS = platform.system().lower() == "windows" _PLACEHOLDER = object() @@ -526,6 +528,14 @@ class AnatomyTemplates: root_key = "{" + root_key + "}" output = output.replace(str(used_value), root_key) + # Make sure rootless path is with forward slashes + if _IS_WINDOWS: + output.replace("\\", "/") + + # Make sure there are no double slashes + while "//" in output: + output = output.replace("//", "/") + return output def format(self, data, strict=True): From 11c7119aa550cbd6ed9758d5f1793ec1af0cdd9a Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 9 Jul 2025 18:53:06 +0200 Subject: [PATCH 169/595] Add photoshop review to be handled by global extract_review --- client/ayon_core/plugins/publish/extract_review.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/plugins/publish/extract_review.py b/client/ayon_core/plugins/publish/extract_review.py index a5f541225c..7aa40a17a4 100644 --- a/client/ayon_core/plugins/publish/extract_review.py +++ b/client/ayon_core/plugins/publish/extract_review.py @@ -162,6 +162,7 @@ class ExtractReview(pyblish.api.InstancePlugin): "flame", "unreal", "circuit", + "photoshop" ] # Supported extensions From de0e069a419c78af7916a1d45283ee19df95ea49 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 9 Jul 2025 18:53:28 +0200 Subject: [PATCH 170/595] Add photoshop thumbnails to be handled by global extract_thumbnail --- client/ayon_core/plugins/publish/extract_thumbnail.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/plugins/publish/extract_thumbnail.py b/client/ayon_core/plugins/publish/extract_thumbnail.py index 69bb9007f9..66acb15312 100644 --- a/client/ayon_core/plugins/publish/extract_thumbnail.py +++ b/client/ayon_core/plugins/publish/extract_thumbnail.py @@ -38,6 +38,7 @@ class ExtractThumbnail(pyblish.api.InstancePlugin): "substancedesigner", "nuke", "aftereffects", + "photoshop", "unreal", "houdini", "circuit", From 50ae9ee4189bd9482d9ed1c9d10a34bd21d3af81 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 9 Jul 2025 18:54:25 +0200 Subject: [PATCH 171/595] Added photoshop specific defaults to ExtractReview More closely follow what PS was doing internally. --- server/settings/publish_plugins.py | 97 ++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/server/settings/publish_plugins.py b/server/settings/publish_plugins.py index d690d79607..b14f43e48a 100644 --- a/server/settings/publish_plugins.py +++ b/server/settings/publish_plugins.py @@ -1442,6 +1442,103 @@ DEFAULT_PUBLISH_VALUES = { "fill_missing_frames": "closest_existing" } ] + }, + { + "product_types": [], + "hosts": ["photoshop"], + "outputs": [ + { + "name": "jpg", + "ext": "jpg", + "tags": [ + "ftrackreview", + "kitsureview", + "webreview" + ], + "burnins": [], + "ffmpeg_args": { + "video_filters": [], + "audio_filters": [], + "input": [], + "output": [] + }, + "filter": { + "families": [ + "render", + "review", + "ftrack" + ], + "product_names": [], + "custom_tags": [], + "single_frame_filter": "single_frame" + }, + "overscan_crop": "", + # "overscan_color": [0, 0, 0], + "overscan_color": [0, 0, 0, 0.0], + "width": 1920, + "height": 1080, + "scale_pixel_aspect": True, + "bg_color": [0, 0, 0, 0.0], + "letter_box": { + "enabled": False, + "ratio": 0.0, + "fill_color": [0, 0, 0, 1.0], + "line_thickness": 0, + "line_color": [255, 0, 0, 1.0] + }, + "fill_missing_frames": "closest_existing" + }, + { + "name": "mov", + "ext": "mov", + "tags": [ + "ftrackreview", + "kitsureview", + "webreview" + ], + "burnins": [], + "ffmpeg_args": { + "video_filters": [], + "audio_filters": [], + "input": [ + "-apply_trc gamma22" + ], + "output": [ + "-pix_fmt yuv420p", + "-crf 18", + "-c:a aac", + "-b:a 192k", + "-g 1", + "-movflags faststart" + ] + }, + "filter": { + "families": [ + "render", + "review", + "ftrack" + ], + "product_names": [], + "custom_tags": [], + "single_frame_filter": "multi_frame" + }, + "overscan_crop": "", + # "overscan_color": [0, 0, 0], + "overscan_color": [0, 0, 0, 0.0], + "width": 0, + "height": 0, + "scale_pixel_aspect": True, + "bg_color": [0, 0, 0, 0.0], + "letter_box": { + "enabled": False, + "ratio": 0.0, + "fill_color": [0, 0, 0, 1.0], + "line_thickness": 0, + "line_color": [255, 0, 0, 1.0] + }, + "fill_missing_frames": "closest_existing" + } + ] } ] }, From c35c86440bedd9d15475cd7db9d9685965c1777c Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 10 Jul 2025 11:39:01 +0200 Subject: [PATCH 172/595] Used different layout Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/ui/window.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index 566a0fc605..49093b8a00 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -101,14 +101,9 @@ class PushToContextSelectWindow(QtWidgets.QWidget): header_layout = QtWidgets.QHBoxLayout(header_widget) header_layout.setContentsMargins(0, 0, 0, 0) header_layout.addWidget(header_label) - header_layout.addStretch() - - library_only_layout = QtWidgets.QHBoxLayout() - library_only_layout.addWidget(library_only_label) - library_only_layout.addWidget(library_only_checkbox) - library_only_layout.setSpacing(5) # or whatever spacing you prefer - - header_layout.addLayout(library_only_layout) + header_layout.addStretch(1) + header_layout.addWidget(library_only_label, 0) + header_layout.addWidget(library_only_checkbox, 0) main_splitter = QtWidgets.QSplitter( QtCore.Qt.Horizontal, main_context_widget From 63da40c2025739bdfc864ae38e5031fe20dcc0a9 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 11 Jul 2025 13:59:34 +0200 Subject: [PATCH 173/595] Added thumbnail copy from source to target --- .../tools/push_to_project/models/integrate.py | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 6bd4279219..fd20a7faba 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -3,6 +3,7 @@ import re import copy import itertools import sys +import tempfile import traceback import uuid @@ -484,6 +485,7 @@ class ProjectPushItemProcess: self._make_sure_version_exists() self._log_info("Prerequirements were prepared") self._integrate_representations() + self._copy_version_thumbnail() self._log_info("Integration finished") except PushToProjectError as exc: @@ -1145,8 +1147,39 @@ class ProjectPushItemProcess: "representation", repre_entity["id"], {"active": False} + + def _copy_version_thumbnail(self): + version_thumbnail = ayon_api.get_version_thumbnail( + self._item.src_project_name, self._src_version_entity["id"]) + if not version_thumbnail or not version_thumbnail.id: + return + + temp_file_name = None + try: + with tempfile.NamedTemporaryFile(mode='w+b', delete=False) as fp: + fp.write(version_thumbnail.content) + temp_file_name = fp.name + + new_thumbnail_id = ayon_api.create_thumbnail( + self._item.dst_project_name, + temp_file_name ) + task_id = None + if self._task_info: + task_id = self._task_info["id"] + + self._operations.update_version( + project_name=self._item.dst_project_name, + version_id=self._version_entity["id"], + task_id=task_id, + thumbnail_id=new_thumbnail_id + ) + self._operations.commit() + finally: + if temp_file_name and os.path.exists(temp_file_name): + os.remove(temp_file_name) + class IntegrateModel: def __init__(self, controller): From dce81ba92d66adb9aafe67ad4c3df38f17708727 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Mon, 14 Jul 2025 12:03:38 +0200 Subject: [PATCH 174/595] If an instance is not set to `integrate` then skip the validation check against it. This should fix the issue described [here](https://community.ynput.io/t/houdini-local-render-and-publish-existing-frames-error/2647/7?u=bigroy) where a matching "render instance" is generated for the local rendering spawning off from an initial instance - where the initial instance becomes set to not integrate (integrate=False) but remain available for further validations (publish=True). --- client/ayon_core/plugins/publish/validate_unique_subsets.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/publish/validate_unique_subsets.py b/client/ayon_core/plugins/publish/validate_unique_subsets.py index 4067dd75a5..e91cd16374 100644 --- a/client/ayon_core/plugins/publish/validate_unique_subsets.py +++ b/client/ayon_core/plugins/publish/validate_unique_subsets.py @@ -34,7 +34,11 @@ class ValidateProductUniqueness(pyblish.api.ContextPlugin): for instance in context: # Ignore disabled instances - if not instance.data.get('publish', True): + if not instance.data.get("publish", True): + continue + + # Ignore disabled instances + if not instance.data.get("integrate", True): continue # Ignore instance without folder data From 1e98481a10a58c433ef8d4dd0ac68a8099f28cca Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Mon, 14 Jul 2025 12:06:07 +0200 Subject: [PATCH 175/595] Tweak comment --- client/ayon_core/plugins/publish/validate_unique_subsets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/publish/validate_unique_subsets.py b/client/ayon_core/plugins/publish/validate_unique_subsets.py index e91cd16374..26c9ada116 100644 --- a/client/ayon_core/plugins/publish/validate_unique_subsets.py +++ b/client/ayon_core/plugins/publish/validate_unique_subsets.py @@ -37,7 +37,7 @@ class ValidateProductUniqueness(pyblish.api.ContextPlugin): if not instance.data.get("publish", True): continue - # Ignore disabled instances + # Ignore instances not marked to integrate if not instance.data.get("integrate", True): continue From 00cfb962e4f748aaec7e68b25d6d9c89833ee39f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Je=C5=BEek?= Date: Mon, 14 Jul 2025 14:38:41 +0200 Subject: [PATCH 176/595] Update client/ayon_core/lib/transcoding.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ondřej Samohel <33513211+antirotor@users.noreply.github.com> --- client/ayon_core/lib/transcoding.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/lib/transcoding.py b/client/ayon_core/lib/transcoding.py index a4edf0aa1c..b3958863fe 100644 --- a/client/ayon_core/lib/transcoding.py +++ b/client/ayon_core/lib/transcoding.py @@ -1136,7 +1136,7 @@ def oiio_color_convert( # Validate input parameters if target_colorspace and target_view and target_display: raise ValueError( - "Colorspace and both view and display cannot be set together." + "Colorspace and both view and display cannot be set together." "Choose colorspace or screen and display" ) From 37980d2299909b3b108f41f5998e231b43e25dab Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Mon, 14 Jul 2025 14:54:58 +0200 Subject: [PATCH 177/595] Fix all characters of report being printed to new lines --- client/ayon_core/pipeline/publish/lib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/publish/lib.py b/client/ayon_core/pipeline/publish/lib.py index 49143c4426..fb84417730 100644 --- a/client/ayon_core/pipeline/publish/lib.py +++ b/client/ayon_core/pipeline/publish/lib.py @@ -1048,7 +1048,7 @@ def main_cli_publish( discover_result = publish_plugins_discover() publish_plugins = discover_result.plugins - print("\n".join(discover_result.get_report(only_errors=False))) + print(discover_result.get_report(only_errors=False)) # Error exit as soon as any error occurs. error_format = ("Failed {plugin.__name__}: " From 7161de78fabaddd55d5d9e1c1d6f01e167da7910 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 14 Jul 2025 16:33:44 +0200 Subject: [PATCH 178/595] Fix typo --- client/ayon_core/tools/push_to_project/models/integrate.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index fd20a7faba..341858148b 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1147,6 +1147,7 @@ class ProjectPushItemProcess: "representation", repre_entity["id"], {"active": False} + ) def _copy_version_thumbnail(self): version_thumbnail = ayon_api.get_version_thumbnail( From 6064f095c8db0ef8a7d7137c0947275cd8603e6b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 14 Jul 2025 17:11:19 +0200 Subject: [PATCH 179/595] added base of instance parenting --- client/ayon_core/pipeline/create/structures.py | 4 ++++ client/ayon_core/tools/publisher/models/create.py | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/client/ayon_core/pipeline/create/structures.py b/client/ayon_core/pipeline/create/structures.py index a4c68d2502..3048ae2829 100644 --- a/client/ayon_core/pipeline/create/structures.py +++ b/client/ayon_core/pipeline/create/structures.py @@ -653,6 +653,10 @@ class CreatedInstance: def product_name(self): return self._data["productName"] + @property + def parent_instance_id(self) -> Optional[str]: + return self._data.get("parentInstanceId") + @property def label(self): label = self._data.get("label") diff --git a/client/ayon_core/tools/publisher/models/create.py b/client/ayon_core/tools/publisher/models/create.py index 75ed2c73fe..058077aadd 100644 --- a/client/ayon_core/tools/publisher/models/create.py +++ b/client/ayon_core/tools/publisher/models/create.py @@ -219,6 +219,7 @@ class InstanceItem: is_active: bool, is_mandatory: bool, has_promised_context: bool, + parent_instance_id: Optional[str], ): self._instance_id: str = instance_id self._creator_identifier: str = creator_identifier @@ -232,6 +233,7 @@ class InstanceItem: self._is_active: bool = is_active self._is_mandatory: bool = is_mandatory self._has_promised_context: bool = has_promised_context + self._parent_instance_id: Optional[str] = parent_instance_id @property def id(self): @@ -261,6 +263,10 @@ class InstanceItem: def has_promised_context(self): return self._has_promised_context + @property + def parent_instance_id(self): + return self._parent_instance_id + def get_variant(self): return self._variant @@ -312,6 +318,7 @@ class InstanceItem: instance["active"], instance.is_mandatory, instance.has_promised_context, + instance.parent_instance_id, ) From 9792be3c849c840f5fca8ade4f54bb3942af81fa Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 14 Jul 2025 17:14:16 +0200 Subject: [PATCH 180/595] modified instances view to show parenting hierarchy --- .../publisher/widgets/list_view_widgets.py | 488 +++++++++--------- 1 file changed, 249 insertions(+), 239 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index 969bec11e5..9fb0402810 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -22,12 +22,15 @@ selection can be enabled disabled using checkbox or keyboard key presses: ... ``` """ +from __future__ import annotations + import collections +import typing from qtpy import QtWidgets, QtCore, QtGui from ayon_core.style import get_objected_colors -from ayon_core.tools.utils import NiceCheckbox +from ayon_core.tools.utils import NiceCheckbox, BaseClickableFrame from ayon_core.tools.utils.lib import html_escape, checkstate_int_to_enum from ayon_core.tools.publisher.abstract import AbstractPublisherFrontend @@ -44,6 +47,9 @@ from ayon_core.tools.publisher.constants import ( from .widgets import AbstractInstanceView +if typing.TYPE_CHECKING: + from ayon_core.tools.publisher.abstract import InstanceItem + class ListItemDelegate(QtWidgets.QStyledItemDelegate): """Generic delegate for instance group. @@ -135,8 +141,7 @@ class InstanceListItemWidget(QtWidgets.QWidget): active_checkbox.setVisible(not instance.is_mandatory) layout = QtWidgets.QHBoxLayout(self) - content_margins = layout.contentsMargins() - layout.setContentsMargins(content_margins.left() + 2, 0, 2, 0) + layout.setContentsMargins(2, 0, 2, 0) layout.addWidget(product_name_label) layout.addStretch(1) layout.addWidget(active_checkbox) @@ -194,6 +199,7 @@ class InstanceListItemWidget(QtWidgets.QWidget): def update_instance(self, instance, context_info): """Update instance object.""" # Check product name + self._instance_id = instance.id label = instance.label if label != self._instance_label_widget.text(): self._instance_label_widget.setText(html_escape(label)) @@ -241,43 +247,33 @@ class ListContextWidget(QtWidgets.QFrame): self.double_clicked.emit() -class InstanceListGroupWidget(QtWidgets.QFrame): +class InstanceListGroupWidget(BaseClickableFrame): """Widget representing group of instances. - Has collapse/expand indicator, label of group and checkbox modifying all - of its children. + Has label of group and checkbox modifying all of its children. """ - expand_changed = QtCore.Signal(str, bool) toggle_requested = QtCore.Signal(str, int) + expand_change_requested = QtCore.Signal(str) def __init__(self, group_name, parent): super().__init__(parent) self.setObjectName("InstanceListGroupWidget") self.group_name = group_name - self._expanded = False - - expand_btn = QtWidgets.QToolButton(self) - expand_btn.setObjectName("ArrowBtn") - expand_btn.setArrowType(QtCore.Qt.RightArrow) - expand_btn.setMaximumWidth(14) name_label = QtWidgets.QLabel(group_name, self) toggle_checkbox = NiceCheckbox(parent=self) layout = QtWidgets.QHBoxLayout(self) - layout.setContentsMargins(5, 0, 2, 0) - layout.addWidget(expand_btn) + layout.setContentsMargins(2, 0, 2, 0) layout.addWidget( name_label, 1, QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter ) layout.addWidget(toggle_checkbox, 0) name_label.setAttribute(QtCore.Qt.WA_TranslucentBackground) - expand_btn.setAttribute(QtCore.Qt.WA_TranslucentBackground) - expand_btn.clicked.connect(self._on_expand_clicked) toggle_checkbox.stateChanged.connect(self._on_checkbox_change) self._ignore_state_change = False @@ -285,7 +281,6 @@ class InstanceListGroupWidget(QtWidgets.QFrame): self._expected_checkstate = None self.name_label = name_label - self.expand_btn = expand_btn self.toggle_checkbox = toggle_checkbox def set_checkstate(self, state): @@ -307,26 +302,15 @@ class InstanceListGroupWidget(QtWidgets.QFrame): return self.toggle_checkbox.checkState() + def set_active_toggle_enabled(self, enabled): + self.toggle_checkbox.setEnabled(enabled) + def _on_checkbox_change(self, state): if not self._ignore_state_change: self.toggle_requested.emit(self.group_name, state) - def _on_expand_clicked(self): - self.expand_changed.emit(self.group_name, not self._expanded) - - def set_expanded(self, expanded): - """Change icon of collapse/expand identifier.""" - if self._expanded == expanded: - return - - self._expanded = expanded - if expanded: - self.expand_btn.setArrowType(QtCore.Qt.DownArrow) - else: - self.expand_btn.setArrowType(QtCore.Qt.RightArrow) - - def set_active_toggle_enabled(self, enabled): - self.toggle_checkbox.setEnabled(enabled) + def _mouse_release_callback(self): + self.expand_change_requested.emit(self.group_name) class InstanceTreeView(QtWidgets.QTreeView): @@ -339,24 +323,11 @@ class InstanceTreeView(QtWidgets.QTreeView): self.setObjectName("InstanceListView") self.setHeaderHidden(True) - self.setIndentation(0) self.setExpandsOnDoubleClick(False) self.setSelectionMode( QtWidgets.QAbstractItemView.ExtendedSelection ) self.viewport().setMouseTracking(True) - self._pressed_group_index = None - - def _expand_item(self, index, expand=None): - is_expanded = self.isExpanded(index) - if expand is None: - expand = not is_expanded - - if expand != is_expanded: - if expand: - self.expand(index) - else: - self.collapse(index) def get_selected_instance_ids(self): """Ids of selected instances.""" @@ -388,53 +359,6 @@ class InstanceTreeView(QtWidgets.QTreeView): return super().event(event) - def _mouse_press(self, event): - """Store index of pressed group. - - This is to be able to change state of group and process mouse - "double click" as 2x "single click". - """ - if event.button() != QtCore.Qt.LeftButton: - return - - pressed_group_index = None - pos_index = self.indexAt(event.pos()) - if pos_index.data(IS_GROUP_ROLE): - pressed_group_index = pos_index - - self._pressed_group_index = pressed_group_index - - def mousePressEvent(self, event): - self._mouse_press(event) - super().mousePressEvent(event) - - def mouseDoubleClickEvent(self, event): - self._mouse_press(event) - super().mouseDoubleClickEvent(event) - - def _mouse_release(self, event, pressed_index): - if event.button() != QtCore.Qt.LeftButton: - return False - - pos_index = self.indexAt(event.pos()) - if not pos_index.data(IS_GROUP_ROLE) or pressed_index != pos_index: - return False - - if self.state() == QtWidgets.QTreeView.State.DragSelectingState: - indexes = self.selectionModel().selectedIndexes() - if len(indexes) != 1 or indexes[0] != pos_index: - return False - - self._expand_item(pos_index) - return True - - def mouseReleaseEvent(self, event): - pressed_index = self._pressed_group_index - self._pressed_group_index = None - result = self._mouse_release(event, pressed_index) - if not result: - super().mouseReleaseEvent(event) - class InstanceListView(AbstractInstanceView): """Widget providing abstract methods of AbstractInstanceView for list view. @@ -472,18 +396,19 @@ class InstanceListView(AbstractInstanceView): instance_view.selectionModel().selectionChanged.connect( self._on_selection_change ) - instance_view.collapsed.connect(self._on_collapse) - instance_view.expanded.connect(self._on_expand) instance_view.toggle_requested.connect(self._on_toggle_request) instance_view.double_clicked.connect(self.double_clicked) self._group_items = {} self._group_widgets = {} - self._widgets_by_id = {} + self._widgets_by_id: dict[str, InstanceListItemWidget] = {} + self._items_by_id = {} + self._parent_id_by_id = {} # Group by instance id for handling of active state self._group_by_instance_id = {} self._context_item = None self._context_widget = None + self._missing_parent_item = None self._convertor_group_item = None self._convertor_group_widget = None @@ -496,22 +421,6 @@ class InstanceListView(AbstractInstanceView): self._active_toggle_enabled = True - def _on_expand(self, index): - self._update_widget_expand_state(index, True) - - def _on_collapse(self, index): - self._update_widget_expand_state(index, False) - - def _update_widget_expand_state(self, index, expanded): - group_name = index.data(GROUP_ROLE) - if group_name == CONVERTOR_ITEM_GROUP: - group_widget = self._convertor_group_widget - else: - group_widget = self._group_widgets.get(group_name) - - if group_widget: - group_widget.set_expanded(expanded) - def _on_toggle_request(self, toggle): if not self._active_toggle_enabled: return @@ -583,85 +492,94 @@ class InstanceListView(AbstractInstanceView): self._update_convertor_items_group() context_info_by_id = self._controller.get_instances_context_info() - + instance_items = self._controller.get_instance_items() # Prepare instances by their groups instances_by_group_name = collections.defaultdict(list) + instances_by_parent_id = collections.defaultdict(list) group_names = set() - for instance in self._controller.get_instance_items(): + instance_ids = set() + for instance in instance_items: + instance_ids.add(instance.id) + if instance.parent_instance_id: + instances_by_parent_id[instance.parent_instance_id].append( + instance + ) + continue + group_label = instance.group_label group_names.add(group_label) instances_by_group_name[group_label].append(instance) + missing_parent_ids = set(instances_by_parent_id) - instance_ids + for instance_id in missing_parent_ids: + for instance in instances_by_parent_id[instance_id]: + group_label = instance.group_label + group_names.add(group_label) + instances_by_group_name[group_label].append(instance) + # Create new groups based on prepared `instances_by_group_name` if self._make_sure_groups_exists(group_names): sort_at_the_end = True # Remove groups that are not available anymore self._remove_groups_except(group_names) + self._remove_instances_except(instance_items) - # Store which groups should be expanded at the end expand_groups = set() + expand_to_items = [] + widgets_by_id = {} + # Process changes in each group item # - create new instance, update existing and remove not existing for group_name, group_item in self._group_items.items(): - # Instance items to remove - # - will contain all existing instance ids at the start - # - instance ids may be removed when existing instances are checked - to_remove = set() - # Mapping of existing instances under group item - existing_mapping = {} - - # Get group index to be able to get children indexes - group_index = self._instance_model.index( - group_item.row(), group_item.column() - ) - - # Iterate over children indexes of group item - for idx in range(group_item.rowCount()): - index = self._instance_model.index(idx, 0, group_index) - instance_id = index.data(INSTANCE_ID_ROLE) - # Add all instance into `to_remove` set - to_remove.add(instance_id) - existing_mapping[instance_id] = idx - # Collect all new instances that are not existing under group # New items - new_items = [] - # Tuples of new instance and instance itself - new_items_with_instance = [] + new_items = collections.defaultdict(list) + # Tuples of model item and instance itself + items_with_instance = [] # Group activity (should be {-1;0;1} at the end) # - 0 when all instances are disabled # - 1 when all instances are enabled # - -1 when it's mixed activity = None for instance in instances_by_group_name[group_name]: - instance_id = instance.id - # Handle group activity - if activity is None: - activity = int(instance.is_active) - elif activity == -1: - pass - elif activity != instance.is_active: - activity = -1 + _queue = collections.deque() + _queue.append((instance, group_item, None)) + while _queue: + instance, parent_item, parent_id = _queue.popleft() + instance_id = instance.id + # Handle group activity + if activity is None: + activity = int(instance.is_active) + elif activity == -1: + pass + elif activity != instance.is_active: + activity = -1 - context_info = context_info_by_id[instance_id] + self._group_by_instance_id[instance_id] = group_name - self._group_by_instance_id[instance_id] = group_name - # Remove instance id from `to_remove` if already exists and - # trigger update of widget - if instance_id in to_remove: - to_remove.remove(instance_id) - widget = self._widgets_by_id[instance_id] - widget.update_instance(instance, context_info) - continue + # Create new item and store it as new + item = self._items_by_id.get(instance_id) + if item is None: + item = QtGui.QStandardItem() + item.setData(instance_id, INSTANCE_ID_ROLE) + self._items_by_id[instance_id] = item + new_items[parent_id].append(item) + elif parent_id != self._parent_id_by_id.get(instance_id): + new_items[parent_id].append(item) - # Create new item and store it as new - item = QtGui.QStandardItem() - item.setData(instance.product_name, SORT_VALUE_ROLE) - item.setData(instance.product_name, GROUP_ROLE) - item.setData(instance_id, INSTANCE_ID_ROLE) - new_items.append(item) - new_items_with_instance.append((item, instance)) + self._parent_id_by_id[instance_id] = parent_id + + children = instances_by_parent_id.pop(instance_id, []) + items_with_instance.append( + (item, instance, bool(children)) + ) + + item.setData(instance.product_name, SORT_VALUE_ROLE) + item.setData(instance.product_name, GROUP_ROLE) + + for child in children: + _queue.append((child, item, instance_id)) # Set checkstate of group checkbox state = QtCore.Qt.PartiallyChecked @@ -670,23 +588,9 @@ class InstanceListView(AbstractInstanceView): elif activity == 1: state = QtCore.Qt.Checked - widget = self._group_widgets[group_name] - widget.set_checkstate(state) - - # Remove items that were not found - idx_to_remove = [] - for instance_id in to_remove: - idx_to_remove.append(existing_mapping[instance_id]) - - # Remove them in reverse order to prevent row index changes - for idx in reversed(sorted(idx_to_remove)): - group_item.removeRows(idx, 1) - - # Cleanup instance related widgets - for instance_id in to_remove: - self._group_by_instance_id.pop(instance_id) - widget = self._widgets_by_id.pop(instance_id) - widget.deleteLater() + if group_name is not None: + widget = self._group_widgets[group_name] + widget.set_checkstate(state) # Process new instance items and add them to model and create # their widgets @@ -695,40 +599,76 @@ class InstanceListView(AbstractInstanceView): sort_at_the_end = True # Add items under group item - group_item.appendRows(new_items) + for parent_id, items in new_items.items(): + if parent_id is None: + parent_item = group_item + else: + parent_item = self._items_by_id[parent_id] - for item, instance in new_items_with_instance: - context_info = context_info_by_id[instance.id] - if not context_info.is_valid: - expand_groups.add(group_name) - item_index = self._instance_model.index( - item.row(), - item.column(), - group_index - ) - proxy_index = self._proxy_model.mapFromSource(item_index) + parent_item.appendRows(items) + + for item, instance, has_children in items_with_instance: + context_info = context_info_by_id[instance.id] + # TODO expand all parents + if not context_info.is_valid: + expand_groups.add(group_name) + expand_to_items.append(item) + item_index = self._instance_model.indexFromItem(item) + proxy_index = self._proxy_model.mapFromSource(item_index) + widget = self._instance_view.indexWidget(proxy_index) + if isinstance(widget, InstanceListItemWidget): + widget.update_instance(instance, context_info) + else: widget = InstanceListItemWidget( instance, context_info, self._instance_view ) - widget.set_active_toggle_enabled( - self._active_toggle_enabled - ) widget.active_changed.connect(self._on_active_changed) widget.double_clicked.connect(self.double_clicked) self._instance_view.setIndexWidget(proxy_index, widget) - self._widgets_by_id[instance.id] = widget + widget.set_active_toggle_enabled( + self._active_toggle_enabled + ) - # Trigger sort at the end of refresh - if sort_at_the_end: - self._proxy_model.sort(0) + widgets_by_id[instance.id] = widget + self._widgets_by_id.pop(instance.id, None) - # Expand groups marked for expanding - for group_name in expand_groups: - group_item = self._group_items[group_name] - proxy_index = self._proxy_model.mapFromSource(group_item.index()) + for widget in self._widgets_by_id.values(): + widget.setVisible(False) + widget.deleteLater() + self._widgets_by_id = widgets_by_id + + # Expand items marked for expanding + items_to_expand = [ + self._group_items[group_name] + for group_name in expand_groups + ] + _marked_ids = set() + for item in expand_to_items: + parent = item.parent() + _items = [] + while True: + # Parent is not set or is group (groups are separate) + if parent is None or parent.data(IS_GROUP_ROLE): + break + instance_id = parent.data(INSTANCE_ID_ROLE) + # Parent was already marked for expanding + if instance_id in _marked_ids: + break + _marked_ids.add(instance_id) + _items.append(parent) + parent = parent.parent() + + items_to_expand.extend(reversed(_items)) + + for item in items_to_expand: + proxy_index = self._proxy_model.mapFromSource(item.index()) self._instance_view.expand(proxy_index) + # Trigger sort at the end of refresh + if sort_at_the_end: + self._proxy_model.sort(0) + def _make_sure_context_item_exists(self): if self._context_item is not None: return False @@ -761,7 +701,7 @@ class InstanceListView(AbstractInstanceView): root_item = self._instance_model.invisibleRootItem() if not convertor_items_by_id: - root_item.removeRow(group_item.row()) + root_item.takeRow(group_item.row()) self._convertor_group_widget.deleteLater() self._convertor_group_widget = None self._convertor_items_by_id = {} @@ -785,9 +725,7 @@ class InstanceListView(AbstractInstanceView): CONVERTOR_ITEM_GROUP, self._instance_view ) widget.toggle_checkbox.setVisible(False) - widget.expand_changed.connect( - self._on_convertor_group_expand_request - ) + self._instance_view.setIndexWidget(proxy_index, widget) self._convertor_group_item = group_item @@ -798,7 +736,7 @@ class InstanceListView(AbstractInstanceView): child_identifier = child_item.data(CONVERTER_IDENTIFIER_ROLE) if child_identifier not in convertor_items_by_id: self._convertor_items_by_id.pop(child_identifier, None) - group_item.removeRows(row, 1) + group_item.takeRow(row) new_items = [] for identifier, convertor_item in convertor_items_by_id.items(): @@ -853,8 +791,10 @@ class InstanceListView(AbstractInstanceView): widget.set_active_toggle_enabled( self._active_toggle_enabled ) - widget.expand_changed.connect(self._on_group_expand_request) widget.toggle_requested.connect(self._on_group_toggle_request) + widget.expand_change_requested.connect( + self._on_expand_toggle_request + ) self._group_widgets[group_name] = widget self._instance_view.setIndexWidget(proxy_index, widget) @@ -868,10 +808,84 @@ class InstanceListView(AbstractInstanceView): continue group_item = self._group_items.pop(group_name) - root_item.removeRow(group_item.row()) + root_item.takeRow(group_item.row()) widget = self._group_widgets.pop(group_name) + widget.setVisible(False) widget.deleteLater() + def _remove_instances_except(self, instance_items: list[InstanceItem]): + parent_id_by_id = { + item.id: item.parent_instance_id + for item in instance_items + } + instance_ids = set(parent_id_by_id) + all_removed_ids = set(self._items_by_id) - instance_ids + queue = collections.deque() + for group_item in self._group_items.values(): + queue.append((group_item, None)) + while queue: + parent_item, parent_id = queue.popleft() + children = [ + parent_item.child(row) + for row in range(parent_item.rowCount()) + ] + for child in children: + instance_id = child.data(INSTANCE_ID_ROLE) + if instance_id not in parent_id_by_id: + parent_item.takeRow(child.row()) + elif parent_id != parent_id_by_id[instance_id]: + parent_item.takeRow(child.row()) + + queue.append((child, instance_id)) + + for instance_id in all_removed_ids: + self._items_by_id.pop(instance_id) + self._group_by_instance_id.pop(instance_id) + self._parent_id_by_id.pop(instance_id) + widget = self._widgets_by_id.pop(instance_id, None) + if widget is not None: + widget.setVisible(False) + widget.deleteLater() + + def _add_missing_parent_item(self): + label = "! Orphaned instances !" + if self._missing_parent_item is None: + item = QtGui.QStandardItem() + item.setData(label, GROUP_ROLE) + item.setData("_", SORT_VALUE_ROLE) + item.setData(True, IS_GROUP_ROLE) + item.setFlags(QtCore.Qt.ItemIsEnabled) + self._missing_parent_item = item + + if self._missing_parent_item.parent() is None: + root_item = self._instance_model.invisibleRootItem() + root_item.appendRow(self._missing_parent_item) + index = self._missing_parent_item.index() + proxy_index = self._proxy_model.mapFromSource(index) + widget = InstanceListGroupWidget(label, self._instance_view) + widget.toggle_checkbox.setVisible(False) + self._instance_view.setIndexWidget(proxy_index, widget) + return self._missing_parent_item + + def _remove_missing_parent_item(self): + if self._missing_parent_item is None: + return + + row = self._missing_parent_item.row() + if row < 0: + return + + parent = self._missing_parent_item.parent() + if parent is None: + parent = self._instance_model.invisibleRootItem() + index = self._missing_parent_item.index() + proxy_index = self._proxy_model.mapFromSource(index) + widget = self._instance_view.indexWidget(proxy_index) + if widget is not None: + widget.setVisible(False) + widget.deleteLater() + parent.takeRow(self._missing_parent_item.row()) + def refresh_instance_states(self, instance_ids=None): """Trigger update of all instances.""" if instance_ids is not None: @@ -925,26 +939,13 @@ class InstanceListView(AbstractInstanceView): def _on_selection_change(self, *_args): self.selection_changed.emit() - def _on_group_expand_request(self, group_name, expanded): + def _on_expand_toggle_request(self, group_name): group_item = self._group_items.get(group_name) if not group_item: return - - group_index = self._instance_model.index( - group_item.row(), group_item.column() - ) - proxy_index = self._proxy_model.mapFromSource(group_index) - self._instance_view.setExpanded(proxy_index, expanded) - - def _on_convertor_group_expand_request(self, _, expanded): - group_item = self._convertor_group_item - if not group_item: - return - group_index = self._instance_model.index( - group_item.row(), group_item.column() - ) - proxy_index = self._proxy_model.mapFromSource(group_index) - self._instance_view.setExpanded(proxy_index, expanded) + proxy_index = self._proxy_model.mapFromSource(group_item.index()) + new_state = not self._instance_view.isExpanded(proxy_index) + self._instance_view.setExpanded(proxy_index, new_state) def _on_group_toggle_request(self, group_name, state): state = checkstate_int_to_enum(state) @@ -962,24 +963,33 @@ class InstanceListView(AbstractInstanceView): active_by_id = {} all_changed = True - for row in range(group_item.rowCount()): - item = group_item.child(row) - instance_id = item.data(INSTANCE_ID_ROLE) - widget = self._widgets_by_id.get(instance_id) - if widget is None: - continue - if widget.is_checkbox_enabled(): - active_by_id[instance_id] = active - else: - all_changed = False + items_to_expand = [group_item] + _queue = collections.deque() + _queue.append(group_item) + while _queue: + item = _queue.popleft() + for row in range(item.rowCount()): + child = item.child(row) + instance_id = child.data(INSTANCE_ID_ROLE) + if child.hasChildren(): + items_to_expand.append(child) + _queue.append(child) + widget = self._widgets_by_id.get(instance_id) + if widget is None: + continue + if widget.is_checkbox_enabled(): + active_by_id[instance_id] = active + else: + all_changed = False self._controller.set_instances_active_state(active_by_id) self._change_active_instances(active_by_id, active) - proxy_index = self._proxy_model.mapFromSource(group_item.index()) - if not self._instance_view.isExpanded(proxy_index): - self._instance_view.expand(proxy_index) + for item in items_to_expand: + proxy_index = self._proxy_model.mapFromSource(item.index()) + if not self._instance_view.isExpanded(proxy_index): + self._instance_view.expand(proxy_index) if not all_changed: # If not all instances were changed, update group checkstate From 0a75ab09c509fecfb180fd38513920a3be564c6a Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Mon, 14 Jul 2025 21:59:28 +0200 Subject: [PATCH 181/595] Report the actual class name --- client/ayon_core/pipeline/plugin_discover.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/plugin_discover.py b/client/ayon_core/pipeline/plugin_discover.py index f531600276..03da7fce79 100644 --- a/client/ayon_core/pipeline/plugin_discover.py +++ b/client/ayon_core/pipeline/plugin_discover.py @@ -51,7 +51,7 @@ class DiscoverResult: "*** Discovered {} plugins".format(len(self.plugins)) ) for cls in self.plugins: - lines.append("- {}".format(cls.__class__.__name__)) + lines.append("- {}".format(cls.__name__)) # Plugin that were defined to be ignored if self.ignored_plugins or full_report: From baba4e4d7d6dcb85c8df9cd970914a08fd34996f Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 16 Jul 2025 12:43:54 +0200 Subject: [PATCH 182/595] Revert "Added photoshop specific defaults to ExtractReview" This reverts commit 50ae9ee4189bd9482d9ed1c9d10a34bd21d3af81. --- server/settings/publish_plugins.py | 97 ------------------------------ 1 file changed, 97 deletions(-) diff --git a/server/settings/publish_plugins.py b/server/settings/publish_plugins.py index b14f43e48a..d690d79607 100644 --- a/server/settings/publish_plugins.py +++ b/server/settings/publish_plugins.py @@ -1442,103 +1442,6 @@ DEFAULT_PUBLISH_VALUES = { "fill_missing_frames": "closest_existing" } ] - }, - { - "product_types": [], - "hosts": ["photoshop"], - "outputs": [ - { - "name": "jpg", - "ext": "jpg", - "tags": [ - "ftrackreview", - "kitsureview", - "webreview" - ], - "burnins": [], - "ffmpeg_args": { - "video_filters": [], - "audio_filters": [], - "input": [], - "output": [] - }, - "filter": { - "families": [ - "render", - "review", - "ftrack" - ], - "product_names": [], - "custom_tags": [], - "single_frame_filter": "single_frame" - }, - "overscan_crop": "", - # "overscan_color": [0, 0, 0], - "overscan_color": [0, 0, 0, 0.0], - "width": 1920, - "height": 1080, - "scale_pixel_aspect": True, - "bg_color": [0, 0, 0, 0.0], - "letter_box": { - "enabled": False, - "ratio": 0.0, - "fill_color": [0, 0, 0, 1.0], - "line_thickness": 0, - "line_color": [255, 0, 0, 1.0] - }, - "fill_missing_frames": "closest_existing" - }, - { - "name": "mov", - "ext": "mov", - "tags": [ - "ftrackreview", - "kitsureview", - "webreview" - ], - "burnins": [], - "ffmpeg_args": { - "video_filters": [], - "audio_filters": [], - "input": [ - "-apply_trc gamma22" - ], - "output": [ - "-pix_fmt yuv420p", - "-crf 18", - "-c:a aac", - "-b:a 192k", - "-g 1", - "-movflags faststart" - ] - }, - "filter": { - "families": [ - "render", - "review", - "ftrack" - ], - "product_names": [], - "custom_tags": [], - "single_frame_filter": "multi_frame" - }, - "overscan_crop": "", - # "overscan_color": [0, 0, 0], - "overscan_color": [0, 0, 0, 0.0], - "width": 0, - "height": 0, - "scale_pixel_aspect": True, - "bg_color": [0, 0, 0, 0.0], - "letter_box": { - "enabled": False, - "ratio": 0.0, - "fill_color": [0, 0, 0, 1.0], - "line_thickness": 0, - "line_color": [255, 0, 0, 1.0] - }, - "fill_missing_frames": "closest_existing" - } - ] } ] }, From b87dbabd142764e27890283201819b77d00747f0 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 16 Jul 2025 16:01:11 +0200 Subject: [PATCH 183/595] Added task_types to ExtractReview profile in Settings --- server/settings/publish_plugins.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/server/settings/publish_plugins.py b/server/settings/publish_plugins.py index d690d79607..ee422a0acf 100644 --- a/server/settings/publish_plugins.py +++ b/server/settings/publish_plugins.py @@ -747,6 +747,11 @@ class ExtractReviewProfileModel(BaseSettingsModel): hosts: list[str] = SettingsField( default_factory=list, title="Host names" ) + task_types: list[str] = SettingsField( + default_factory=list, + title="Task Types", + enum_resolver=task_types_enum, + ) outputs: list[ExtractReviewOutputDefModel] = SettingsField( default_factory=list, title="Output Definitions" ) @@ -1348,6 +1353,7 @@ DEFAULT_PUBLISH_VALUES = { { "product_types": [], "hosts": [], + "task_types": [], "outputs": [ { "name": "png", From ff92960be6a8b16919321d4b598be980db1ba2ac Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 16 Jul 2025 16:01:31 +0200 Subject: [PATCH 184/595] Added task_types to ExtractReview profile --- client/ayon_core/plugins/publish/extract_review.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/client/ayon_core/plugins/publish/extract_review.py b/client/ayon_core/plugins/publish/extract_review.py index 7aa40a17a4..1e4997cfb4 100644 --- a/client/ayon_core/plugins/publish/extract_review.py +++ b/client/ayon_core/plugins/publish/extract_review.py @@ -203,15 +203,21 @@ class ExtractReview(pyblish.api.InstancePlugin): def _get_outputs_for_instance(self, instance): host_name = instance.context.data["hostName"] product_type = instance.data["productType"] + task_type = None + task_entity = instance.data.get("taskEntity") + if task_entity: + task_type = task_entity["taskType"] self.log.debug("Host: \"{}\"".format(host_name)) self.log.debug("Product type: \"{}\"".format(product_type)) + self.log.debug("Task type: \"{}\"".format(task_type)) profile = filter_profiles( self.profiles, { "hosts": host_name, "product_types": product_type, + "task_types": task_type }, logger=self.log) if not profile: From bcea66c9314eb9f2796cefeb6176c2f9fc485fdc Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 17 Jul 2025 14:31:23 +0200 Subject: [PATCH 185/595] Label update Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/plugins/load/push_to_library.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/load/push_to_library.py b/client/ayon_core/plugins/load/push_to_library.py index 825192c15e..22c10bbad7 100644 --- a/client/ayon_core/plugins/load/push_to_library.py +++ b/client/ayon_core/plugins/load/push_to_library.py @@ -14,7 +14,7 @@ class PushToLibraryProject(load.ProductLoaderPlugin): representations = {"*"} product_types = {"*"} - label = "Push to (Library) project" + label = "Push to project" order = 35 icon = "send" color = "#d8d8d8" From 1c4f466181a892ecb954f523de061e791d435e7e Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 17 Jul 2025 14:31:34 +0200 Subject: [PATCH 186/595] Formatting change Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/models/integrate.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 341858148b..20fa5c98e5 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1148,6 +1148,7 @@ class ProjectPushItemProcess: repre_entity["id"], {"active": False} ) + ) def _copy_version_thumbnail(self): version_thumbnail = ayon_api.get_version_thumbnail( From 260aad8c1fb19db519f8f64814b6e20030b36b1b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 21 Jul 2025 15:30:58 +0200 Subject: [PATCH 187/595] implemented 'copy_workfile_to_context' --- client/ayon_core/pipeline/workfile/utils.py | 119 ++++++++++++++++++++ 1 file changed, 119 insertions(+) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 0c3a50446d..29d636fd7d 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -13,6 +13,7 @@ from ayon_core.settings import get_project_settings from ayon_core.host.interfaces import ( SaveWorkfileOptionalData, ListWorkfilesOptionalData, + CopyWorkfileOptionalData, ) from ayon_core.pipeline.version_start import get_versioning_start from ayon_core.pipeline.template_data import get_template_data @@ -516,6 +517,124 @@ def save_next_version( ) +def copy_workfile_to_context( + src_workfile_path: str, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + *, + version: Optional[int] = None, + comment: Optional[str] = None, + description: Optional[str] = None, + open_workfile: bool = True, + prepared_data: Optional[CopyWorkfileOptionalData] = None, +) -> None: + """Copy workfile to a context. + + Copy workfile to a specified folder and task. Destination path is + calculated based on passed information. + + Args: + src_workfile_path (str): Source workfile path. + folder_entity (dict[str, Any]): Target folder entity. + task_entity (dict[str, Any]): Target task entity. + version (Optional[int]): Workfile version. Use next version if not + passed. + comment (optional[str]): Workfile comment. + description (Optional[str]): Workfile description. + prepared_data (Optional[CopyWorkfileOptionalData]): Prepared data + for speed enhancements. Rootless path is calculated in this + function. + + """ + from ayon_core.pipeline import Anatomy + from ayon_core.pipeline.context_tools import registered_host + + host = registered_host() + project_name = host.get_current_project_name() + + anatomy = prepared_data.anatomy + if anatomy is None: + if prepared_data.project_entity is None: + prepared_data.project_entity = ayon_api.get_project( + project_name + ) + anatomy = Anatomy( + project_name, project_entity=prepared_data.project_entity + ) + prepared_data.anatomy = anatomy + + project_settings = prepared_data.project_settings + if project_settings is None: + project_settings = get_project_settings(project_name) + prepared_data.project_settings = project_settings + + if version is None: + list_prepared_data = None + if prepared_data is not None: + list_prepared_data = ListWorkfilesOptionalData( + project_entity=prepared_data.project_entity, + anatomy=prepared_data.anatomy, + project_settings=prepared_data.project_settings, + workfile_entities=prepared_data.workfile_entities, + ) + + workfiles = host.list_workfiles( + project_name, + folder_entity, + task_entity, + prepared_data=list_prepared_data + ) + if workfiles: + version = max( + workfile.version + for workfile in workfiles + ) + 1 + else: + version = get_versioning_start( + project_name, + host.name, + task_name=task_entity["name"], + task_type=task_entity["taskType"], + product_type="workfile" + ) + + task_type = task_entity["taskType"] + template_key = get_workfile_template_key( + project_name, + task_type, + host.name, + project_settings=prepared_data.project_settings + ) + + template_data = get_template_data( + prepared_data.project_entity, + folder_entity, + task_entity, + host.name, + prepared_data.project_settings, + ) + template_data["version"] = version + if comment: + template_data["comment"] = comment + + workfile_template = anatomy.get_template_item( + "work", template_key, "path" + ) + workfile_path = workfile_template.format_strict(template_data) + prepared_data.rootless_path = workfile_path.rootless + host.copy_workfile( + src_workfile_path, + workfile_path, + folder_entity, + task_entity, + version=version, + comment=comment, + description=description, + open_workfile=open_workfile, + prepared_data=prepared_data, + ) + + def find_workfile_rootless_path( workfile_path: str, project_name: str, From 4462e218cd317765cfea7c635b0fd60de0c048bf Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 21 Jul 2025 16:10:58 +0200 Subject: [PATCH 188/595] make sure the save is enabled --- client/ayon_core/tools/workfiles/widgets/files_widget.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/tools/workfiles/widgets/files_widget.py b/client/ayon_core/tools/workfiles/widgets/files_widget.py index 012a12ab17..a1993c078b 100644 --- a/client/ayon_core/tools/workfiles/widgets/files_widget.py +++ b/client/ayon_core/tools/workfiles/widgets/files_widget.py @@ -333,7 +333,9 @@ class FilesWidget(QtWidgets.QWidget): ) def _on_save_as_request(self): - self._on_published_save_clicked() + # Make sure the save is enabled + if self._is_save_enabled and self._valid_selected_context: + self._on_published_save_clicked() def _set_select_contex_mode(self, enabled): if self._select_context_mode is enabled: From a1a4066bc60faf1ba017b9130dc4402d105891ab Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 21 Jul 2025 16:11:06 +0200 Subject: [PATCH 189/595] fix typo --- client/ayon_core/tools/workfiles/widgets/files_widget.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/workfiles/widgets/files_widget.py b/client/ayon_core/tools/workfiles/widgets/files_widget.py index a1993c078b..0c8ad392e2 100644 --- a/client/ayon_core/tools/workfiles/widgets/files_widget.py +++ b/client/ayon_core/tools/workfiles/widgets/files_widget.py @@ -201,7 +201,7 @@ class FilesWidget(QtWidgets.QWidget): def _on_current_open_requests(self): # TODO validate if item under mouse is enabled - # - thi uses selected item, but that does not have to be the one + # - this uses selected item, but that does not have to be the one # under mouse self._on_workarea_open_clicked() From 55dedaef8012f0d4787f3548a76c18bdf15a3a09 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 21 Jul 2025 16:25:59 +0200 Subject: [PATCH 190/595] allow to pass prepared data --- client/ayon_core/pipeline/workfile/utils.py | 33 +++++++++++++++------ 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 29d636fd7d..28614bbb37 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -406,6 +406,8 @@ def save_next_version( version: Optional[int] = None, comment: Optional[str] = None, description: Optional[str] = None, + *, + prepared_data: Optional[SaveWorkfileOptionalData] = None, ) -> None: """Save workfile using current context, version and comment. @@ -417,6 +419,8 @@ def save_next_version( version + 1 is used if is not passed in. comment (optional[str]): Workfile comment. description (Optional[str]): Workfile description. + prepared_data (Optional[SaveWorkfileOptionalData]): Prepared data + for speed enhancements. """ from ayon_core.pipeline import Anatomy @@ -428,9 +432,25 @@ def save_next_version( project_name = context["project_name"] folder_path = context["folder_path"] task_name = context["task_name"] - project_entity = ayon_api.get_project(project_name) - project_settings = get_project_settings(project_name) - anatomy = Anatomy(project_name, project_entity=project_entity) + if prepared_data is None: + prepared_data = SaveWorkfileOptionalData() + + project_entity = prepared_data.project_entity + anatomy = prepared_data.anatomy + project_settings = prepared_data.project_settings + + if project_entity is None: + project_entity = ayon_api.get_project(project_name) + prepared_data.project_entity = project_entity + + if project_settings is None: + project_settings = get_project_settings(project_name) + prepared_data.project_settings = project_settings + + if anatomy is None: + anatomy = Anatomy(project_name, project_entity=project_entity) + prepared_data.anatomy = anatomy + folder_entity = ayon_api.get_folder_by_path(project_name, folder_path) task_entity = ayon_api.get_task_by_name( project_name, folder_entity["id"], task_name @@ -499,13 +519,8 @@ def save_next_version( rootless_path = f"{rootless_dir}/{filename}" if platform.system().lower() == "windows": rootless_path = rootless_path.replace("\\", "/") + prepared_data.rootless_path = rootless_path - prepared_data = SaveWorkfileOptionalData( - project_entity=project_entity, - anatomy=anatomy, - project_settings=project_settings, - rootless_path=rootless_path, - ) host.save_workfile_with_context( workfile_path, folder_entity, From 84e88f0cf3c328883c2267df3e0a0e8448ec6093 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 21 Jul 2025 16:51:43 +0200 Subject: [PATCH 191/595] add docstring --- client/ayon_core/pipeline/workfile/utils.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 28614bbb37..aee304d1d3 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -709,6 +709,22 @@ def _create_workfile_info_entity( comment: Optional[str], description: Optional[str], ) -> dict[str, Any]: + """Create workfile entity data. + + Args: + project_name (str): Project name. + task_id (str): Task id. + host_name (str): Host name. + rootless_path (str): Rootless workfile path. + username (str): Username. + version (Optional[int]): Workfile version. + comment (Optional[str]): Workfile comment. + description (Optional[str]): Workfile description. + + Returns: + dict[str, Any]: Created workfile entity data. + + """ extension = os.path.splitext(rootless_path)[1] attrib = {} From 71dc4ca70670173eec8bb2bbd738a3a1a2371a17 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 21 Jul 2025 16:51:53 +0200 Subject: [PATCH 192/595] added return type hint --- client/ayon_core/pipeline/workfile/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index aee304d1d3..77c1953e4d 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -86,7 +86,7 @@ def should_use_last_workfile_on_launch( task_type: str, default_output: bool = False, project_settings: Optional[dict[str, Any]] = None, -): +) -> bool: """Define if host should start last version workfile if possible. Default output is `False`. Can be overridden with environment variable From 60f1fa8961154e81c47c31c2db04719f5ea28fd7 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 21 Jul 2025 19:21:30 +0200 Subject: [PATCH 193/595] remove bundle names from environment variables --- client/ayon_core/tools/launcher/models/actions.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/tools/launcher/models/actions.py b/client/ayon_core/tools/launcher/models/actions.py index adb8d371ed..1945019fef 100644 --- a/client/ayon_core/tools/launcher/models/actions.py +++ b/client/ayon_core/tools/launcher/models/actions.py @@ -513,7 +513,12 @@ class ActionsModel: uri = payload["uri"] else: uri = data["uri"] - run_detached_ayon_launcher_process(uri) + + # Remove bundles from environment variables + env = os.environ.copy() + env.pop("AYON_BUNDLE_NAME", None) + env.pop("AYON_STUDIO_BUNDLE_NAME", None) + run_detached_ayon_launcher_process(uri, env=env) elif response_type in ("query", "navigate"): response.error_message = ( From ec3eaeb75180595fddd494cbf9b3cce97486d94e Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 21 Jul 2025 19:26:47 +0200 Subject: [PATCH 194/595] added log --- client/ayon_core/tools/tray/ui/tray.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/client/ayon_core/tools/tray/ui/tray.py b/client/ayon_core/tools/tray/ui/tray.py index f090be063e..cea8d4f747 100644 --- a/client/ayon_core/tools/tray/ui/tray.py +++ b/client/ayon_core/tools/tray/ui/tray.py @@ -243,6 +243,11 @@ class TrayManager: project_bundle = os.getenv("AYON_BUNDLE_NAME") studio_bundle = os.getenv("AYON_STUDIO_BUNDLE_NAME") if studio_bundle and project_bundle != studio_bundle: + self.log.info( + f"Project bundle '{project_bundle}' is defined, but tray" + " cannot be running in project scope. Restarting tray to use" + " studio bundle." + ) self.restart() def get_services_submenu(self): From 3c8f3224bce64895c97f26a250e952f828b1da16 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 22 Jul 2025 11:58:20 +0200 Subject: [PATCH 195/595] filter instances without active parents --- .../publish/collect_from_create_context.py | 46 +++++++++++++++---- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/client/ayon_core/plugins/publish/collect_from_create_context.py b/client/ayon_core/plugins/publish/collect_from_create_context.py index b99866fed9..8383dfaa96 100644 --- a/client/ayon_core/plugins/publish/collect_from_create_context.py +++ b/client/ayon_core/plugins/publish/collect_from_create_context.py @@ -2,6 +2,8 @@ """ import os +import collections + import pyblish.api from ayon_core.host import IPublishHost @@ -36,18 +38,42 @@ class CollectFromCreateContext(pyblish.api.ContextPlugin): if project_name: context.data["projectName"] = project_name + # Filter active instances and skip instances which have disabled + # parent instance + instances_by_parent_id = collections.defaultdict(list) + filtered_instances = [] for created_instance in create_context.instances: + if not created_instance["active"]: + continue + parent_id = created_instance.parent_instance_id + if parent_id is None: + filtered_instances.append(created_instance) + else: + instances_by_parent_id[parent_id].append(created_instance) + + parent_ids_queue = collections.deque() + parent_ids_queue.extend( + instance.id for instance in filtered_instances + ) + while parent_ids_queue: + parent_id = parent_ids_queue.popleft() + children = instances_by_parent_id[parent_id] + if not children: + continue + filtered_instances.extend(children) + parent_ids_queue.extend(instance.id for instance in children) + + for created_instance in filtered_instances: instance_data = created_instance.data_to_store() - if instance_data["active"]: - thumbnail_path = thumbnail_paths_by_instance_id.get( - created_instance.id - ) - self.create_instance( - context, - instance_data, - created_instance.transient_data, - thumbnail_path - ) + thumbnail_path = thumbnail_paths_by_instance_id.get( + created_instance.id + ) + self.create_instance( + context, + instance_data, + created_instance.transient_data, + thumbnail_path + ) # Update global data to context context.data.update(create_context.context_data_to_store()) From 25aac472ab10c9575cbde22870dd5878233709f1 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 22 Jul 2025 11:58:40 +0200 Subject: [PATCH 196/595] added disable state to list view widget --- client/ayon_core/style/data.json | 1 + client/ayon_core/style/style.css | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/client/ayon_core/style/data.json b/client/ayon_core/style/data.json index 24629ec085..56d2190e09 100644 --- a/client/ayon_core/style/data.json +++ b/client/ayon_core/style/data.json @@ -97,6 +97,7 @@ }, "publisher": { "error": "#AA5050", + "disabled": "#5b6779", "crash": "#FF6432", "success": "#458056", "warning": "#ffc671", diff --git a/client/ayon_core/style/style.css b/client/ayon_core/style/style.css index b26d36fb7e..0d057beb7b 100644 --- a/client/ayon_core/style/style.css +++ b/client/ayon_core/style/style.css @@ -1153,6 +1153,10 @@ PixmapButton:disabled { color: {color:publisher:error}; } +#ListViewProductName[state="disabled"] { + color: {color:publisher:disabled}; +} + #PublishInfoFrame { background: {color:bg}; border-radius: 0.3em; From b50070937965c4a46482947262480f55f992bd08 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 22 Jul 2025 11:58:56 +0200 Subject: [PATCH 197/595] added 'InstanceContextInfo' to create imports --- client/ayon_core/pipeline/create/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/ayon_core/pipeline/create/__init__.py b/client/ayon_core/pipeline/create/__init__.py index ced43528eb..cbe009d95e 100644 --- a/client/ayon_core/pipeline/create/__init__.py +++ b/client/ayon_core/pipeline/create/__init__.py @@ -27,6 +27,7 @@ from .structures import ( CreatorAttributeValues, PublishAttributeValues, PublishAttributes, + InstanceContextInfo, ) from .utils import ( get_last_versions_for_instances, @@ -91,6 +92,7 @@ __all__ = ( "CreatorAttributeValues", "PublishAttributeValues", "PublishAttributes", + "InstanceContextInfo", "get_last_versions_for_instances", "get_next_versions_for_instances", From c8eb0faf3cf300605fbf2854ffbc5f0ef8de4cb1 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 22 Jul 2025 15:31:57 +0200 Subject: [PATCH 198/595] visualize instance parenting in list view --- .../publisher/widgets/list_view_widgets.py | 501 ++++++++++++------ 1 file changed, 331 insertions(+), 170 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index 9fb0402810..65bc531d27 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -25,7 +25,7 @@ selection can be enabled disabled using checkbox or keyboard key presses: from __future__ import annotations import collections -import typing +from typing import Optional from qtpy import QtWidgets, QtCore, QtGui @@ -33,7 +33,14 @@ from ayon_core.style import get_objected_colors from ayon_core.tools.utils import NiceCheckbox, BaseClickableFrame from ayon_core.tools.utils.lib import html_escape, checkstate_int_to_enum +from ayon_core.pipeline.create import ( + InstanceContextInfo, +) + from ayon_core.tools.publisher.abstract import AbstractPublisherFrontend +from ayon_core.tools.publisher.models.create import ( + InstanceItem, +) from ayon_core.tools.publisher.constants import ( INSTANCE_ID_ROLE, SORT_VALUE_ROLE, @@ -47,9 +54,6 @@ from ayon_core.tools.publisher.constants import ( from .widgets import AbstractInstanceView -if typing.TYPE_CHECKING: - from ayon_core.tools.publisher.abstract import InstanceItem - class ListItemDelegate(QtWidgets.QStyledItemDelegate): """Generic delegate for instance group. @@ -121,7 +125,13 @@ class InstanceListItemWidget(QtWidgets.QWidget): active_changed = QtCore.Signal(str, bool) double_clicked = QtCore.Signal() - def __init__(self, instance, context_info, parent): + def __init__( + self, + instance: InstanceItem, + context_info: InstanceContextInfo, + parent_is_active: bool, + parent: QtWidgets.QWidget, + ): super().__init__(parent) self._instance_id = instance.id @@ -137,8 +147,6 @@ class InstanceListItemWidget(QtWidgets.QWidget): product_name_label.setObjectName("ListViewProductName") active_checkbox = NiceCheckbox(parent=self) - active_checkbox.setChecked(instance.is_active) - active_checkbox.setVisible(not instance.is_mandatory) layout = QtWidgets.QHBoxLayout(self) layout.setContentsMargins(2, 0, 2, 0) @@ -146,20 +154,32 @@ class InstanceListItemWidget(QtWidgets.QWidget): layout.addStretch(1) layout.addWidget(active_checkbox) - self.setAttribute(QtCore.Qt.WA_TranslucentBackground) - product_name_label.setAttribute(QtCore.Qt.WA_TranslucentBackground) - active_checkbox.setAttribute(QtCore.Qt.WA_TranslucentBackground) + for widget in ( + self, + product_name_label, + active_checkbox, + ): + widget.setAttribute(QtCore.Qt.WA_TranslucentBackground) active_checkbox.stateChanged.connect(self._on_active_change) self._instance_label_widget = product_name_label self._active_checkbox = active_checkbox - self._has_valid_context = None + # Instance info + self._has_valid_context = context_info.is_valid + self._is_mandatory = instance.is_mandatory + self._instance_is_active = instance.is_active - self._checkbox_enabled = not instance.is_mandatory + # Parent active state is fluent and can change + self._parent_is_active = parent_is_active - self._set_valid_property(context_info.is_valid) + # Widget logic info + self._state = None + self._toggle_is_enabled = True + + self._update_style_state() + self._update_checkbox_state() def mouseDoubleClickEvent(self, event): widget = self.childAt(event.pos()) @@ -167,60 +187,108 @@ class InstanceListItemWidget(QtWidgets.QWidget): if widget is not self._active_checkbox: self.double_clicked.emit() - def _set_valid_property(self, valid): - if self._has_valid_context == valid: - return - self._has_valid_context = valid - state = "" - if not valid: - state = "invalid" - self._instance_label_widget.setProperty("state", state) - self._instance_label_widget.style().polish(self._instance_label_widget) - - def is_active(self): + def is_active(self) -> bool: """Instance is activated.""" return self._active_checkbox.isChecked() - def set_active(self, new_value): - """Change active state of instance and checkbox.""" - old_value = self.is_active() - if new_value is None: - new_value = not old_value - - if new_value != old_value: - self._active_checkbox.blockSignals(True) - self._active_checkbox.setChecked(new_value) - self._active_checkbox.blockSignals(False) - def is_checkbox_enabled(self) -> bool: """Checkbox can be changed by user.""" - return self._checkbox_enabled + return ( + self._parent_is_active + and not self._is_mandatory + ) - def update_instance(self, instance, context_info): + def set_active_toggle_enabled(self, enabled: bool) -> None: + """Toggle can be available for user.""" + self._toggle_is_enabled = enabled + self._update_checkbox_state() + + def set_active(self, new_value: Optional[bool]) -> None: + """Change active state of instance and checkbox by user interaction. + + Args: + new_value (Optional[bool]): New active state of instance. Toggle + if is 'None'. + + """ + # Do not allow to change state if is mandatory or parent is not active + if not self.is_checkbox_enabled(): + return + + if new_value is None: + new_value = not self._active_checkbox.isChecked() + # Update instance active state + self._instance_is_active = new_value + self._set_checked(new_value) + + def update_instance( + self, + instance: InstanceItem, + context_info: InstanceContextInfo, + parent_is_active: bool, + ) -> None: """Update instance object.""" # Check product name self._instance_id = instance.id label = instance.label if label != self._instance_label_widget.text(): self._instance_label_widget.setText(html_escape(label)) - # Check active state - self.set_active(instance.is_active) - self._set_is_mandatory(instance.is_mandatory) - # Check valid states - self._set_valid_property(context_info.is_valid) + + self._is_mandatory = instance.is_mandatory + self._instance_is_active = instance.is_active + self._has_valid_context = context_info.is_valid + self._parent_is_active = parent_is_active + + self._update_checkbox_state() + self._update_style_state() + + def set_parent_is_active(self, active: bool) -> None: + if self._parent_is_active is active: + return + self._parent_is_active = active + self._update_style_state() + self._update_checkbox_state() + + def _set_checked(self, checked: bool) -> None: + """Change checked state in UI without triggering checkstate change.""" + old_value = self._active_checkbox.isChecked() + if checked is not old_value: + self._active_checkbox.blockSignals(True) + self._active_checkbox.setChecked(checked) + self._active_checkbox.blockSignals(False) + + def _update_style_state(self) -> None: + state = "" + if not self._parent_is_active: + state = "disabled" + elif not self._has_valid_context: + state = "invalid" + + if state == self._state: + return + self._state = state + self._instance_label_widget.setProperty("state", state) + self._instance_label_widget.style().polish(self._instance_label_widget) + + def _update_checkbox_state(self) -> None: + self._active_checkbox.setEnabled( + self._toggle_is_enabled + and not self._is_mandatory + and self._parent_is_active + ) + # Hide checkbox for mandatory instances + self._active_checkbox.setVisible(not self._is_mandatory) + + # Visually disable instance if parent is disabled + checked = self._parent_is_active and self._instance_is_active + if checked is not self._active_checkbox.isChecked(): + self._active_checkbox.setChecked(checked) def _on_active_change(self): self.active_changed.emit( self._instance_id, self._active_checkbox.isChecked() ) - def set_active_toggle_enabled(self, enabled): - self._active_checkbox.setEnabled(enabled) - - def _set_is_mandatory(self, is_mandatory: bool) -> None: - self._checkbox_enabled = not is_mandatory - self._active_checkbox.setVisible(not is_mandatory) - class ListContextWidget(QtWidgets.QFrame): """Context (or global attributes) widget.""" @@ -421,7 +489,7 @@ class InstanceListView(AbstractInstanceView): self._active_toggle_enabled = True - def _on_toggle_request(self, toggle): + def _on_toggle_request(self, toggle: int) -> None: if not self._active_toggle_enabled: return @@ -432,20 +500,7 @@ class InstanceListView(AbstractInstanceView): active = True else: active = False - - group_names = set() - for instance_id in selected_instance_ids: - widget = self._widgets_by_id.get(instance_id) - if widget is None: - continue - - widget.set_active(active) - group_name = self._group_by_instance_id.get(instance_id) - if group_name is not None: - group_names.add(group_name) - - for group_name in group_names: - self._update_group_checkstate(group_name) + self._toggle_active_state(selected_instance_ids, active) def _update_group_checkstate(self, group_name): """Update checkstate of one group.""" @@ -454,8 +509,10 @@ class InstanceListView(AbstractInstanceView): return activity = None - for instance_id, _group_name in self._group_by_instance_id.items(): - if _group_name != group_name: + for ( + instance_id, instance_group_name + ) in self._group_by_instance_id.items(): + if instance_group_name != group_name: continue instance_widget = self._widgets_by_id.get(instance_id) @@ -509,13 +566,7 @@ class InstanceListView(AbstractInstanceView): group_label = instance.group_label group_names.add(group_label) instances_by_group_name[group_label].append(instance) - - missing_parent_ids = set(instances_by_parent_id) - instance_ids - for instance_id in missing_parent_ids: - for instance in instances_by_parent_id[instance_id]: - group_label = instance.group_label - group_names.add(group_label) - instances_by_group_name[group_label].append(instance) + self._group_by_instance_id[instance.id] = group_label # Create new groups based on prepared `instances_by_group_name` if self._make_sure_groups_exists(group_names): @@ -525,15 +576,42 @@ class InstanceListView(AbstractInstanceView): self._remove_groups_except(group_names) self._remove_instances_except(instance_items) - expand_groups = set() expand_to_items = [] widgets_by_id = {} + group_items = [ + ( + self._group_widgets[group_name], + instances_by_group_name[group_name], + group_item, + ) + for group_name, group_item in self._group_items.items() + ] + + # Handle orphaned instances + missing_parent_ids = set(instances_by_parent_id) - instance_ids + if not missing_parent_ids: + # Make sure the item is not in view if there are no orhpaned items + self._remove_missing_parent_item() + else: + # Add orphaned group item and append them to 'group_items' + orphans_item = self._add_missing_parent_item() + for instance_id in missing_parent_ids: + group_items.append(( + None, + instances_by_parent_id[instance_id], + orphans_item, + )) # Process changes in each group item # - create new instance, update existing and remove not existing - for group_name, group_item in self._group_items.items(): - # Collect all new instances that are not existing under group - # New items + for group_widget, group_instances, group_item in group_items: + # Group widget is not set if is orphaned + # - This might need to be changed in future if widget could + # be 'None' + is_orpaned_item = group_widget is None + + # Collect all new instances by parent id + # - 'None' is used if parent is group item new_items = collections.defaultdict(list) # Tuples of model item and instance itself items_with_instance = [] @@ -542,7 +620,7 @@ class InstanceListView(AbstractInstanceView): # - 1 when all instances are enabled # - -1 when it's mixed activity = None - for instance in instances_by_group_name[group_name]: + for instance in group_instances: _queue = collections.deque() _queue.append((instance, group_item, None)) while _queue: @@ -556,7 +634,9 @@ class InstanceListView(AbstractInstanceView): elif activity != instance.is_active: activity = -1 - self._group_by_instance_id[instance_id] = group_name + # Remove group name from groups mapping + if parent_id is not None: + self._group_by_instance_id.pop(instance_id, None) # Create new item and store it as new item = self._items_by_id.get(instance_id) @@ -572,7 +652,13 @@ class InstanceListView(AbstractInstanceView): children = instances_by_parent_id.pop(instance_id, []) items_with_instance.append( - (item, instance, bool(children)) + ( + item, + instance, + parent_id, + is_orpaned_item, + bool(children) + ) ) item.setData(instance.product_name, SORT_VALUE_ROLE) @@ -582,15 +668,13 @@ class InstanceListView(AbstractInstanceView): _queue.append((child, item, instance_id)) # Set checkstate of group checkbox - state = QtCore.Qt.PartiallyChecked - if activity == 0: - state = QtCore.Qt.Unchecked - elif activity == 1: - state = QtCore.Qt.Checked - - if group_name is not None: - widget = self._group_widgets[group_name] - widget.set_checkstate(state) + if group_widget is not None: + state = QtCore.Qt.PartiallyChecked + if activity == 0: + state = QtCore.Qt.Unchecked + elif activity == 1: + state = QtCore.Qt.Checked + group_widget.set_checkstate(state) # Process new instance items and add them to model and create # their widgets @@ -607,20 +691,38 @@ class InstanceListView(AbstractInstanceView): parent_item.appendRows(items) - for item, instance, has_children in items_with_instance: + for ( + item, instance, parent_id, is_orpaned_item, has_children + ) in items_with_instance: context_info = context_info_by_id[instance.id] # TODO expand all parents if not context_info.is_valid: - expand_groups.add(group_name) expand_to_items.append(item) + + parent_active = True + if is_orpaned_item: + parent_active = False + + if parent_id: + parent_widget = widgets_by_id.get(parent_id) + parent_active = False + if parent_widget is not None: + parent_active = parent_widget.is_active() item_index = self._instance_model.indexFromItem(item) proxy_index = self._proxy_model.mapFromSource(item_index) widget = self._instance_view.indexWidget(proxy_index) if isinstance(widget, InstanceListItemWidget): - widget.update_instance(instance, context_info) + widget.update_instance( + instance, + context_info, + parent_active, + ) else: widget = InstanceListItemWidget( - instance, context_info, self._instance_view + instance, + context_info, + parent_active, + self._instance_view ) widget.active_changed.connect(self._on_active_changed) widget.double_clicked.connect(self.double_clicked) @@ -639,10 +741,7 @@ class InstanceListView(AbstractInstanceView): self._widgets_by_id = widgets_by_id # Expand items marked for expanding - items_to_expand = [ - self._group_items[group_name] - for group_name in expand_groups - ] + items_to_expand = [] _marked_ids = set() for item in expand_to_items: parent = item.parent() @@ -669,7 +768,7 @@ class InstanceListView(AbstractInstanceView): if sort_at_the_end: self._proxy_model.sort(0) - def _make_sure_context_item_exists(self): + def _make_sure_context_item_exists(self) -> bool: if self._context_item is not None: return False @@ -692,7 +791,7 @@ class InstanceListView(AbstractInstanceView): self._context_item = context_item return True - def _update_convertor_items_group(self): + def _update_convertor_items_group(self) -> bool: created_new_items = False convertor_items_by_id = self._controller.get_convertor_items() group_item = self._convertor_group_item @@ -758,7 +857,7 @@ class InstanceListView(AbstractInstanceView): return created_new_items - def _make_sure_groups_exists(self, group_names): + def _make_sure_groups_exists(self, group_names: set[str]) -> bool: new_group_items = [] for group_name in group_names: if group_name in self._group_items: @@ -800,7 +899,7 @@ class InstanceListView(AbstractInstanceView): return True - def _remove_groups_except(self, group_names): + def _remove_groups_except(self, group_names: set[str]) -> None: # Remove groups that are not available anymore root_item = self._instance_model.invisibleRootItem() for group_name in tuple(self._group_items.keys()): @@ -840,14 +939,14 @@ class InstanceListView(AbstractInstanceView): for instance_id in all_removed_ids: self._items_by_id.pop(instance_id) - self._group_by_instance_id.pop(instance_id) self._parent_id_by_id.pop(instance_id) + self._group_by_instance_id.pop(instance_id, None) widget = self._widgets_by_id.pop(instance_id, None) if widget is not None: widget.setVisible(False) widget.deleteLater() - def _add_missing_parent_item(self): + def _add_missing_parent_item(self) -> QtGui.QStandardItem: label = "! Orphaned instances !" if self._missing_parent_item is None: item = QtGui.QStandardItem() @@ -857,7 +956,7 @@ class InstanceListView(AbstractInstanceView): item.setFlags(QtCore.Qt.ItemIsEnabled) self._missing_parent_item = item - if self._missing_parent_item.parent() is None: + if self._missing_parent_item.row() < 0: root_item = self._instance_model.invisibleRootItem() root_item.appendRow(self._missing_parent_item) index = self._missing_parent_item.index() @@ -867,7 +966,7 @@ class InstanceListView(AbstractInstanceView): self._instance_view.setIndexWidget(proxy_index, widget) return self._missing_parent_item - def _remove_missing_parent_item(self): + def _remove_missing_parent_item(self) -> None: if self._missing_parent_item is None: return @@ -890,34 +989,130 @@ class InstanceListView(AbstractInstanceView): """Trigger update of all instances.""" if instance_ids is not None: instance_ids = set(instance_ids) - context_info_by_id = self._controller.get_instances_context_info() + + context_info_by_id = self._controller.get_instances_context_info( + instance_ids + ) instance_items_by_id = self._controller.get_instance_items_by_id( instance_ids ) - for instance_id, widget in self._widgets_by_id.items(): - if instance_ids is not None and instance_id not in instance_ids: + instance_ids = set(instance_items_by_id) + + group_items = list(self._group_items.values()) + if self._missing_parent_item is not None: + group_items.append(self._missing_parent_item) + + _queue = collections.deque() + for group_item in group_items: + if not group_item.hasChildren(): continue - widget.update_instance( - instance_items_by_id[instance_id], - context_info_by_id[instance_id], - ) + + children = [ + group_item.child(row) + for row in range(group_item.rowCount()) + ] + _queue.append((children, True)) + + while _queue: + if not instance_ids: + break + + children, parent_active = _queue.popleft() + for child in children: + instance_id = child.data(INSTANCE_ID_ROLE) + widget = self._widgets_by_id[instance_id] + if instance_id in instance_ids: + instance_ids.discard(instance_id) + widget.update_instance( + instance_items_by_id[instance_id], + context_info_by_id[instance_id], + parent_active, + ) + if not instance_ids: + break + + if not child.hasChildren(): + continue + + children = [ + child.child(row) + for row in range(child.rowCount()) + ] + _queue.append((children, widget.is_active())) def _on_active_changed(self, changed_instance_id, new_value): selected_instance_ids, _, _ = self.get_selected_items() + if changed_instance_id not in selected_instance_ids: + selected_instance_ids = {changed_instance_id} + self._toggle_active_state( + set(selected_instance_ids), + new_value, + changed_instance_id + ) + + def _toggle_active_state( + self, + instance_ids: set[str], + new_value: Optional[bool], + active_id: Optional[str] = None, + ) -> None: + active_widget = None + if active_id: + active_widget = self._widgets_by_id[active_id] active_by_id = {} - found = False - for instance_id in selected_instance_ids: - active_by_id[instance_id] = new_value - if not found and instance_id == changed_instance_id: - found = True + if active_id and active_id not in instance_ids: + if not active_widget.is_checkbox_enabled(): + return + if new_value is None: + new_value = not active_widget.is_active() + active_by_id[active_id] = new_value + active_widget.set_active(new_value) + else: + # First make sure that the item under mouse is changed if possible + if active_widget and active_widget.is_checkbox_enabled(): + value = new_value + if value is None: + value = not active_widget.is_active() - if not found: - active_by_id = {changed_instance_id: new_value} + active_by_id[active_id] = value + active_widget.set_active(new_value) + instance_ids.discard(active_id) + + # Change the states from top to bottom + group_items = list(self._group_items.values()) + if self._missing_parent_item is not None: + group_items.append(self._missing_parent_item) + + _queue = collections.deque() + for group_item in group_items: + children = [ + group_item.child(row) + for row in range(group_item.rowCount()) + ] + _queue.append((children, True)) + + while _queue: + children, parent_active = _queue.popleft() + for child in children: + instance_id = child.data(INSTANCE_ID_ROLE) + widget = self._widgets_by_id[instance_id] + widget.set_parent_is_active(parent_active) + if parent_active and instance_id in instance_ids: + value = new_value + if value is None: + value = not widget.is_active() + widget.set_active(value) + active_by_id[instance_id] = value + + children = [ + child.child(row) + for row in range(child.rowCount()) + ] + _queue.append((children, widget.is_active())) self._controller.set_instances_active_state(active_by_id) - self._change_active_instances(active_by_id, new_value) group_names = set() for instance_id in active_by_id: group_name = self._group_by_instance_id.get(instance_id) @@ -927,15 +1122,6 @@ class InstanceListView(AbstractInstanceView): for group_name in group_names: self._update_group_checkstate(group_name) - def _change_active_instances(self, instance_ids, new_value): - if not instance_ids: - return - - for instance_id in instance_ids: - widget = self._widgets_by_id.get(instance_id) - if widget: - widget.set_active(new_value) - def _on_selection_change(self, *_args): self.selection_changed.emit() @@ -952,64 +1138,39 @@ class InstanceListView(AbstractInstanceView): if state == QtCore.Qt.PartiallyChecked: return - if state == QtCore.Qt.Checked: - active = True - else: - active = False - group_item = self._group_items.get(group_name) if not group_item: return - active_by_id = {} - all_changed = True - items_to_expand = [group_item] - _queue = collections.deque() - _queue.append(group_item) - while _queue: - item = _queue.popleft() - for row in range(item.rowCount()): - child = item.child(row) - instance_id = child.data(INSTANCE_ID_ROLE) - if child.hasChildren(): - items_to_expand.append(child) - _queue.append(child) - widget = self._widgets_by_id.get(instance_id) - if widget is None: - continue - if widget.is_checkbox_enabled(): - active_by_id[instance_id] = active - else: - all_changed = False + active = state == QtCore.Qt.Checked - self._controller.set_instances_active_state(active_by_id) + instance_ids = set() + for row in range(group_item.rowCount()): + child = group_item.child(row) + instance_id = child.data(INSTANCE_ID_ROLE) + instance_ids.add(instance_id) - self._change_active_instances(active_by_id, active) + self._toggle_active_state(instance_ids, active) - for item in items_to_expand: - proxy_index = self._proxy_model.mapFromSource(item.index()) - if not self._instance_view.isExpanded(proxy_index): - self._instance_view.expand(proxy_index) + proxy_index = self._proxy_model.mapFromSource(group_item.index()) + if not self._instance_view.isExpanded(proxy_index): + self._instance_view.expand(proxy_index) - if not all_changed: - # If not all instances were changed, update group checkstate - self._update_group_checkstate(group_name) - - def has_items(self): + def has_items(self) -> bool: if self._convertor_group_widget is not None: return True if self._group_items: return True return False - def get_selected_items(self): + def get_selected_items(self) -> tuple[list[str], bool, list[str]]: """Get selected instance ids and context selection. Returns: - tuple: Selected instance ids and boolean if context - is selected. - """ + tuple[list[str], bool, list[str]]: Selected instance ids, + boolean if context is selected and selected convertor ids. + """ instance_ids = [] convertor_identifiers = [] context_selected = False @@ -1133,7 +1294,7 @@ class InstanceListView(AbstractInstanceView): | QtCore.QItemSelectionModel.Rows ) - def set_active_toggle_enabled(self, enabled): + def set_active_toggle_enabled(self, enabled: bool) -> bool: if self._active_toggle_enabled is enabled: return From 293e5fe2e9d759e970d17781cde9c24c1b585c6f Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Wed, 23 Jul 2025 01:14:11 +0200 Subject: [PATCH 199/595] Use `save_next_version` from Workfiles API https://github.com/ynput/ayon-core/pull/1275 in `version_up_current_workfile` --- client/ayon_core/pipeline/context_tools.py | 53 ++-------------------- 1 file changed, 3 insertions(+), 50 deletions(-) diff --git a/client/ayon_core/pipeline/context_tools.py b/client/ayon_core/pipeline/context_tools.py index cccdafe6f1..308dd1bf44 100644 --- a/client/ayon_core/pipeline/context_tools.py +++ b/client/ayon_core/pipeline/context_tools.py @@ -580,53 +580,6 @@ def get_process_id(): def version_up_current_workfile(): - """Function to increment and save workfile - """ - host = registered_host() - - project_name = get_current_project_name() - folder_path = get_current_folder_path() - task_name = get_current_task_name() - host_name = get_current_host_name() - - template_key = get_workfile_template_key_from_context( - project_name, - folder_path, - task_name, - host_name, - ) - anatomy = Anatomy(project_name) - - data = get_template_data_with_names( - project_name, folder_path, task_name, host_name - ) - data["root"] = anatomy.roots - - work_template = anatomy.get_template_item("work", template_key) - - # Define saving file extension - extensions = host.get_workfile_extensions() - current_file = host.get_current_workfile() - if current_file: - extensions = [os.path.splitext(current_file)[-1]] - - work_root = work_template["directory"].format_strict(data) - file_template = work_template["file"].template - last_workfile_path = get_last_workfile( - work_root, file_template, data, extensions, True - ) - # `get_last_workfile` will return the first expected file version - # if no files exist yet. In that case, if they do not exist we will - # want to save v001 - new_workfile_path = last_workfile_path - if os.path.exists(new_workfile_path): - new_workfile_path = version_up(new_workfile_path) - - # Raise an error if the parent folder doesn't exist as `host.save_workfile` - # is not supposed/able to create missing folders. - parent_folder = os.path.dirname(new_workfile_path) - if not os.path.exists(parent_folder): - raise MissingWorkdirError( - f"Work area directory '{parent_folder}' does not exist.") - - host.save_workfile(new_workfile_path) + """Function to increment and save workfile""" + from ayon_core.pipeline.workfile.utils import save_next_version + save_next_version() From 4d142ab6289f7fafc3e6ca8d43110998eb00dab6 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 23 Jul 2025 09:48:49 +0200 Subject: [PATCH 200/595] fill extension in template data --- client/ayon_core/pipeline/workfile/utils.py | 51 ++++++++++++++++----- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 77c1953e4d..d5c717bd6d 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -411,8 +411,8 @@ def save_next_version( ) -> None: """Save workfile using current context, version and comment. - Helper function to save workfile using current context. Last workfile - version + 1 is used if is not passed in. + Helper function to save a workfile using the current context. Last + workfile version + 1 is used if is not passed in. Args: version (Optional[int]): Workfile version that will be used. Last @@ -480,10 +480,8 @@ def save_next_version( project_settings=project_settings, ) rootless_dir = workdir.rootless + last_workfile = None if version is None: - workfile_extensions = host.get_workfile_extensions() - if not workfile_extensions: - raise ValueError("Host does not have defined file extensions") workfiles = host.list_workfiles( project_name, folder_entity, task_entity, prepared_data=ListWorkfilesOptionalData( @@ -493,14 +491,18 @@ def save_next_version( template_key=template_key, ) ) - versions = { - workfile.version - for workfile in workfiles - if workfile.version is not None - } + for workfile in workfiles: + if workfile.version is None: + continue + if ( + last_workfile is None + or last_workfile.version < workfile.version + ): + last_workfile = workfile + version = None - if versions: - version = max(versions) + 1 + if last_workfile is not None: + version = last_workfile.version + 1 if version is None: version = get_versioning_start( @@ -514,6 +516,26 @@ def save_next_version( template_data["version"] = version template_data["comment"] = comment + # Resolve extension + # - Don't fill any if the host does not have defined any -> e.g. if host + # uses directory instead of a file. + # 1. Use the current file extension. + # 2. Use the last known workfile extension. + # 3. Use the first extensions from 'get_workfile_extensions'. + ext = None + workfile_extensions = host.get_workfile_extensions() + if workfile_extensions: + current_path = host.get_current_workfile() + if current_path: + ext = os.path.splitext(current_path)[1].lstrip(".") + elif last_workfile is not None: + ext = os.path.splitext(last_workfile.filepath)[1].lstrip(".") + else: + ext = next(iter(workfile_extensions), None) + + if ext: + template_data["ext"] = ext + filename = file_template.format_strict(template_data) workfile_path = os.path.join(workdir, filename) rootless_path = f"{rootless_dir}/{filename}" @@ -632,6 +654,11 @@ def copy_workfile_to_context( if comment: template_data["comment"] = comment + workfile_extensions = host.get_workfile_extensions() + if workfile_extensions: + ext = os.path.splitext(src_workfile_path)[1].lstrip(".") + template_data["ext"] = ext + workfile_template = anatomy.get_template_item( "work", template_key, "path" ) From 94b96345552beaccf6a16530d7a8b89f9035235d Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Wed, 23 Jul 2025 11:25:55 +0200 Subject: [PATCH 201/595] Fix logged warnings --- .../plugins/publish/collect_scene_loaded_versions.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py b/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py index 1abb8e29d2..c8d9747091 100644 --- a/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py +++ b/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py @@ -27,12 +27,13 @@ class CollectSceneLoadedVersions(pyblish.api.ContextPlugin): def process(self, context): host = registered_host() if host is None: - self.log.warn("No registered host.") + self.log.warning("No registered host.") return if not hasattr(host, "ls"): host_name = host.__name__ - self.log.warn("Host %r doesn't have ls() implemented." % host_name) + self.log.warning( + f"Host {host_name} doesn't have ls() implemented.") return loaded_versions = [] From f0ea841ebf339a14940792d268e46918c2c60a3c Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Wed, 23 Jul 2025 11:29:23 +0200 Subject: [PATCH 202/595] Use `ILoadHost.get_containers()` when available --- .../publish/collect_scene_loaded_versions.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py b/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py index c8d9747091..34d3e5b136 100644 --- a/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py +++ b/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py @@ -1,7 +1,9 @@ import ayon_api import ayon_api.utils +from ayon_core.host import ILoadHost from ayon_core.pipeline import registered_host + import pyblish.api @@ -30,14 +32,19 @@ class CollectSceneLoadedVersions(pyblish.api.ContextPlugin): self.log.warning("No registered host.") return - if not hasattr(host, "ls"): + if isinstance(host, ILoadHost): + containers = list(host.get_containers()) + elif hasattr(host, "ls"): + # Backwards compatibility for legacy host implementations + containers = list(host.ls()) + else: host_name = host.__name__ self.log.warning( - f"Host {host_name} doesn't have ls() implemented.") + f"Host {host_name} does not implement ILoadHost " + f"nor does it have ls() implemented. Skipping querying of " + f"loaded versions in scene.") return - loaded_versions = [] - containers = list(host.ls()) repre_ids = { container["representation"] for container in containers @@ -62,6 +69,7 @@ class CollectSceneLoadedVersions(pyblish.api.ContextPlugin): # QUESTION should we add same representation id when loaded multiple # times? + loaded_versions = [] for con in containers: repre_id = con["representation"] repre_entity = repre_entities_by_id.get(repre_id) From 5a44efd2ad60cbd380c706217f896106958afb1c Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Wed, 23 Jul 2025 11:31:29 +0200 Subject: [PATCH 203/595] Opt-out early if there are no containers in the scene file --- .../plugins/publish/collect_scene_loaded_versions.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py b/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py index 34d3e5b136..e3e938b65b 100644 --- a/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py +++ b/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py @@ -45,6 +45,11 @@ class CollectSceneLoadedVersions(pyblish.api.ContextPlugin): f"loaded versions in scene.") return + if not containers: + # Opt out early if there are no containers + self.log.debug("No loaded containers found in scene.") + return + repre_ids = { container["representation"] for container in containers From 8b8cff8ea5036e7a49e3b61e036f7beec35642fb Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Wed, 23 Jul 2025 11:32:48 +0200 Subject: [PATCH 204/595] Add debug log --- .../ayon_core/plugins/publish/collect_scene_loaded_versions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py b/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py index e3e938b65b..ea949eb087 100644 --- a/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py +++ b/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py @@ -94,4 +94,5 @@ class CollectSceneLoadedVersions(pyblish.api.ContextPlugin): } loaded_versions.append(version) + self.log.debug(f"Collected {len(loaded_versions)} loaded versions.") context.data["loadedVersions"] = loaded_versions From 6def9655f07f8c1dcb80d38a1cb52ff617f03e2e Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Wed, 23 Jul 2025 11:39:08 +0200 Subject: [PATCH 205/595] Do not use deprecated `Logger.warn`, use `Logger.warning` instead --- client/ayon_core/plugins/publish/integrate_inputlinks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/publish/integrate_inputlinks.py b/client/ayon_core/plugins/publish/integrate_inputlinks.py index a3b6a228d6..be399a95fc 100644 --- a/client/ayon_core/plugins/publish/integrate_inputlinks.py +++ b/client/ayon_core/plugins/publish/integrate_inputlinks.py @@ -105,7 +105,7 @@ class IntegrateInputLinksAYON(pyblish.api.ContextPlugin): created links by its type """ if workfile_instance is None: - self.log.warn("No workfile in this publish session.") + self.log.warning("No workfile in this publish session.") return workfile_version_id = workfile_instance.data["versionEntity"]["id"] From ecd3538dfd481d7fe3c4a4388d3affe7f7d4b615 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Wed, 23 Jul 2025 11:46:52 +0200 Subject: [PATCH 206/595] Update client/ayon_core/plugins/publish/collect_scene_loaded_versions.py Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- .../ayon_core/plugins/publish/collect_scene_loaded_versions.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py b/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py index ea949eb087..9574c8c211 100644 --- a/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py +++ b/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py @@ -34,9 +34,6 @@ class CollectSceneLoadedVersions(pyblish.api.ContextPlugin): if isinstance(host, ILoadHost): containers = list(host.get_containers()) - elif hasattr(host, "ls"): - # Backwards compatibility for legacy host implementations - containers = list(host.ls()) else: host_name = host.__name__ self.log.warning( From 737f3acde17b3d5fb344b7bdeb67cd7deb22c210 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 23 Jul 2025 11:47:19 +0200 Subject: [PATCH 207/595] parent instance id is handled with special attributes --- client/ayon_core/pipeline/create/context.py | 44 +++++++++++++++ .../ayon_core/pipeline/create/structures.py | 54 +++++++++++++++++-- 2 files changed, 93 insertions(+), 5 deletions(-) diff --git a/client/ayon_core/pipeline/create/context.py b/client/ayon_core/pipeline/create/context.py index 929cc59d2a..f2bca97cfe 100644 --- a/client/ayon_core/pipeline/create/context.py +++ b/client/ayon_core/pipeline/create/context.py @@ -80,6 +80,7 @@ INSTANCE_ADDED_TOPIC = "instances.added" INSTANCE_REMOVED_TOPIC = "instances.removed" VALUE_CHANGED_TOPIC = "values.changed" INSTANCE_REQUIREMENT_CHANGED_TOPIC = "instance.requirement.changed" +INSTANCE_PARENT_CHANGED_TOPIC = "instance.parent.changed" PRE_CREATE_ATTR_DEFS_CHANGED_TOPIC = "pre.create.attr.defs.changed" CREATE_ATTR_DEFS_CHANGED_TOPIC = "create.attr.defs.changed" PUBLISH_ATTR_DEFS_CHANGED_TOPIC = "publish.attr.defs.changed" @@ -262,6 +263,8 @@ class CreateContext: # - right now used only for 'mandatory' but can be extended # in future "requirement_change": BulkInfo(), + # Instance parent changed + "parent_change": BulkInfo(), } self._bulk_order = [] @@ -1364,6 +1367,13 @@ class CreateContext: ) as bulk_info: yield bulk_info + @contextmanager + def bulk_instance_parent_change(self, sender: Optional[str] = None): + with self._bulk_context( + "parent_change", sender + ) as bulk_info: + yield bulk_info + @contextmanager def bulk_publish_attr_defs_change(self, sender: Optional[str] = None): with self._bulk_context("publish_attrs_change", sender) as bulk_info: @@ -1444,6 +1454,19 @@ class CreateContext: with self.bulk_instance_requirement_change() as bulk_item: bulk_item.append(instance_id) + def instance_parent_changed(self, instance_id: str) -> None: + """Instance parent changed. + + Triggered by `CreatedInstance`. + + Args: + instance_id (Optional[str]): Instance id. + + """ + if self._is_instance_events_ready(instance_id): + with self.bulk_instance_parent_change() as bulk_item: + bulk_item.append(instance_id) + # --- context change callbacks --- def publish_attribute_value_changed( self, plugin_name: str, value: dict[str, Any] @@ -2305,6 +2328,8 @@ class CreateContext: self._bulk_publish_attrs_change_finished(data, sender) elif key == "requirement_change": self._bulk_instance_requirement_change_finished(data, sender) + elif key == "parent_change": + self._bulk_instance_parent_change_finished(data, sender) def _bulk_add_instances_finished( self, @@ -2518,3 +2543,22 @@ class CreateContext: {"instances": instances}, sender, ) + + def _bulk_instance_parent_change_finished( + self, + instance_ids: list[str], + sender: Optional[str], + ): + if not instance_ids: + return + + instances = [ + self.get_instance_by_id(instance_id) + for instance_id in set(instance_ids) + ] + + self._emit_event( + INSTANCE_PARENT_CHANGED_TOPIC, + {"instances": instances}, + sender, + ) \ No newline at end of file diff --git a/client/ayon_core/pipeline/create/structures.py b/client/ayon_core/pipeline/create/structures.py index 3048ae2829..562a3a581d 100644 --- a/client/ayon_core/pipeline/create/structures.py +++ b/client/ayon_core/pipeline/create/structures.py @@ -1,6 +1,7 @@ import copy import collections from uuid import uuid4 +from enum import Enum import typing from typing import Optional, Dict, List, Any @@ -22,6 +23,18 @@ if typing.TYPE_CHECKING: from .creator_plugins import BaseCreator +class IntEnum(int, Enum): + """An int-based Enum class that allows for int comparison.""" + + def __int__(self) -> int: + return self.value + + +class ParentFlags(IntEnum): + # Delete instance if parent is deleted + parent_lifetime = 1 + + class ConvertorItem: """Item representing convertor plugin. @@ -507,7 +520,9 @@ class CreatedInstance: if transient_data is None: transient_data = {} self._transient_data = transient_data - self._is_mandatory = False + self._is_mandatory: bool = False + self._parent_instance_id: Optional[str] = None + self._parent_flags: int = 0 # Create a copy of passed data to avoid changing them on the fly data = copy.deepcopy(data or {}) @@ -653,10 +668,6 @@ class CreatedInstance: def product_name(self): return self._data["productName"] - @property - def parent_instance_id(self) -> Optional[str]: - return self._data.get("parentInstanceId") - @property def label(self): label = self._data.get("label") @@ -756,6 +767,39 @@ class CreatedInstance: self["active"] = True self._create_context.instance_requirement_changed(self.id) + @property + def parent_instance_id(self) -> Optional[str]: + return self._parent_instance_id + + @property + def parent_flags(self) -> int: + return self._parent_flags + + def set_parent( + self, instance_id: Optional[str], flags: int + ) -> None: + """Set parent instance id and parenting flags. + + Args: + instance_id (Optional[str]): Parent instance id. + flags (int): Parenting flags. + + """ + changed = False + if instance_id != self._parent_instance_id: + changed = True + self._parent_instance_id = instance_id + + if flags is None: + flags = 0 + + if self._parent_flags != flags: + self._parent_flags = flags + changed = True + + if changed: + self._create_context.instance_parent_changed(self.id) + def changes(self): """Calculate and return changes.""" From 654833054901c0e53b9e2683328fad46610446cb Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Wed, 23 Jul 2025 11:47:38 +0200 Subject: [PATCH 208/595] Reformat code --- .../plugins/publish/collect_scene_loaded_versions.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py b/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py index 9574c8c211..ee448e7911 100644 --- a/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py +++ b/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py @@ -32,16 +32,15 @@ class CollectSceneLoadedVersions(pyblish.api.ContextPlugin): self.log.warning("No registered host.") return - if isinstance(host, ILoadHost): - containers = list(host.get_containers()) - else: + if not isinstance(host, ILoadHost): host_name = host.__name__ self.log.warning( - f"Host {host_name} does not implement ILoadHost " - f"nor does it have ls() implemented. Skipping querying of " - f"loaded versions in scene.") + f"Host {host_name} does not implement ILoadHost. " + "Skipping querying of loaded versions in scene." + ) return + containers = list(host.get_containers()) if not containers: # Opt out early if there are no containers self.log.debug("No loaded containers found in scene.") From ff7a63099be3a8437cce18e310b89d1476a7ba7b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 23 Jul 2025 11:47:57 +0200 Subject: [PATCH 209/595] handle parent lifetime flag --- client/ayon_core/pipeline/create/__init__.py | 2 + client/ayon_core/pipeline/create/context.py | 130 ++++++++++++------- 2 files changed, 86 insertions(+), 46 deletions(-) diff --git a/client/ayon_core/pipeline/create/__init__.py b/client/ayon_core/pipeline/create/__init__.py index cbe009d95e..c8c780504f 100644 --- a/client/ayon_core/pipeline/create/__init__.py +++ b/client/ayon_core/pipeline/create/__init__.py @@ -21,6 +21,7 @@ from .exceptions import ( TemplateFillError, ) from .structures import ( + ParentFlags, CreatedInstance, ConvertorItem, AttributeValues, @@ -86,6 +87,7 @@ __all__ = ( "TaskNotSetError", "TemplateFillError", + "ParentFlags", "CreatedInstance", "ConvertorItem", "AttributeValues", diff --git a/client/ayon_core/pipeline/create/context.py b/client/ayon_core/pipeline/create/context.py index f2bca97cfe..1cf8f08eff 100644 --- a/client/ayon_core/pipeline/create/context.py +++ b/client/ayon_core/pipeline/create/context.py @@ -41,7 +41,12 @@ from .exceptions import ( HostMissRequiredMethod, ) from .changes import TrackChangesItem -from .structures import PublishAttributes, ConvertorItem, InstanceContextInfo +from .structures import ( + PublishAttributes, + ConvertorItem, + InstanceContextInfo, + ParentFlags, +) from .creator_plugins import ( Creator, AutoCreator, @@ -2069,63 +2074,96 @@ class CreateContext: sender (Optional[str]): Sender of the event. """ + instance_ids_by_parent_id = collections.defaultdict(set) + for instance in self.instances: + instance_ids_by_parent_id[instance.parent_instance_id].add( + instance.id + ) + + instances_to_remove = list(instances) + ids_to_remove = { + instance.id + for instance in instances_to_remove + } + _queue = collections.deque() + _queue.extend(instances_to_remove) + while _queue: + instance = _queue.popleft() + ids_to_remove.add(instance.id) + children_ids = instance_ids_by_parent_id[instance.id] + for children_id in children_ids: + if children_id in ids_to_remove: + continue + instance = self._instances_by_id[children_id] + if instance.parent_flags & ParentFlags.parent_lifetime: + instances_to_remove.append(instance) + ids_to_remove.add(instance.id) + _queue.append(instance) + instances_by_identifier = collections.defaultdict(list) - for instance in instances: + for instance in instances_to_remove: identifier = instance.creator_identifier instances_by_identifier[identifier].append(instance) # Just remove instances from context if creator is not available missing_creators = set(instances_by_identifier) - set(self.creators) - instances = [] + miss_creator_instances = [] for identifier in missing_creators: - instances.extend( - instance - for instance in instances_by_identifier[identifier] - ) + miss_creator_instances.extend(instances_by_identifier[identifier]) - self._remove_instances(instances, sender) + with self.bulk_remove_instances(sender): + self._remove_instances(miss_creator_instances, sender) - error_message = "Instances removement of creator \"{}\" failed. {}" - failed_info = [] - # Remove instances by creator plugin order - for creator in self.get_sorted_creators( - instances_by_identifier.keys() - ): - identifier = creator.identifier - creator_instances = instances_by_identifier[identifier] + error_message = "Instances removement of creator \"{}\" failed. {}" + failed_info = [] + # Remove instances by creator plugin order + for creator in self.get_sorted_creators( + instances_by_identifier.keys() + ): + identifier = creator.identifier + # Filter instances by current state of 'CreateContext' + # - in case instances were already removed as subroutine of + # previous create plugin. + creator_instances = [ + instance + for instance in instances_by_identifier[identifier] + if instance.id in self._instances_by_id + ] + if not creator_instances: + continue - label = creator.label - failed = False - add_traceback = False - exc_info = None - try: - creator.remove_instances(creator_instances) + label = creator.label + failed = False + add_traceback = False + exc_info = None + try: + creator.remove_instances(creator_instances) - except CreatorError: - failed = True - exc_info = sys.exc_info() - self.log.warning( - error_message.format(identifier, exc_info[1]) - ) - - except (KeyboardInterrupt, SystemExit): - raise - - except: # noqa: E722 - failed = True - add_traceback = True - exc_info = sys.exc_info() - self.log.warning( - error_message.format(identifier, ""), - exc_info=True - ) - - if failed: - failed_info.append( - prepare_failed_creator_operation_info( - identifier, label, exc_info, add_traceback + except CreatorError: + failed = True + exc_info = sys.exc_info() + self.log.warning( + error_message.format(identifier, exc_info[1]) + ) + + except (KeyboardInterrupt, SystemExit): + raise + + except: # noqa: E722 + failed = True + add_traceback = True + exc_info = sys.exc_info() + self.log.warning( + error_message.format(identifier, ""), + exc_info=True + ) + + if failed: + failed_info.append( + prepare_failed_creator_operation_info( + identifier, label, exc_info, add_traceback + ) ) - ) if failed_info: raise CreatorsRemoveFailed(failed_info) From 3941040d23e14aebfaa7b8c1d561ea011d8b34eb Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Wed, 23 Jul 2025 12:22:28 +0200 Subject: [PATCH 210/595] Update client/ayon_core/plugins/publish/collect_scene_loaded_versions.py Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- .../ayon_core/plugins/publish/collect_scene_loaded_versions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py b/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py index ee448e7911..524381f656 100644 --- a/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py +++ b/client/ayon_core/plugins/publish/collect_scene_loaded_versions.py @@ -33,7 +33,7 @@ class CollectSceneLoadedVersions(pyblish.api.ContextPlugin): return if not isinstance(host, ILoadHost): - host_name = host.__name__ + host_name = host.name self.log.warning( f"Host {host_name} does not implement ILoadHost. " "Skipping querying of loaded versions in scene." From 55a7db79899be57494591e434b447bc3319245c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Wed, 23 Jul 2025 16:59:20 +0200 Subject: [PATCH 211/595] :recycle: revive linked assets/folders in template builder Adding back linked assets/folder feature that was there in template builder in OpenPype. This is now working with template type links of AYON. --- .../workfile/workfile_template_builder.py | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/workfile_template_builder.py b/client/ayon_core/pipeline/workfile/workfile_template_builder.py index b0fad8d2a1..276f90af80 100644 --- a/client/ayon_core/pipeline/workfile/workfile_template_builder.py +++ b/client/ayon_core/pipeline/workfile/workfile_template_builder.py @@ -313,7 +313,8 @@ class AbstractTemplateBuilder(ABC): if not folder_entity: return [] links = get_folder_links( - project_name, folder_entity["id"], link_direction="in" + project_name, + folder_entity["id"], link_types=["template"], link_direction="in" ) linked_folder_ids = { link["entityId"] @@ -1429,8 +1430,7 @@ class PlaceholderLoadMixin(object): builder_type_enum_items = [ {"label": "Current folder", "value": "context_folder"}, - # TODO implement linked folders - # {"label": "Linked folders", "value": "linked_folders"}, + {"label": "Linked folders", "value": "linked_folders"}, {"label": "All folders", "value": "all_folders"}, ] build_type_label = "Folder Builder Type" @@ -1607,10 +1607,7 @@ class PlaceholderLoadMixin(object): builder_type = placeholder.data["builder_type"] folder_ids = [] - if builder_type == "context_folder": - folder_ids = [current_folder_entity["id"]] - - elif builder_type == "all_folders": + if builder_type == "all_folders": folder_ids = { folder_entity["id"] for folder_entity in get_folders( @@ -1620,6 +1617,19 @@ class PlaceholderLoadMixin(object): ) } + elif builder_type == "context_folder": + folder_ids = [current_folder_entity["id"]] + + elif builder_type == "linked_folders": + # Get all linked folders for the current folder + if hasattr(self, "builder") and isinstance( + self.builder, AbstractTemplateBuilder): + # self.builder: AbstractTemplateBuilder + folder_ids = [ + linked_folder_entity["id"] + for linked_folder_entity in self.builder.linked_folder_entities # noqa: E501 + ] + if not folder_ids: return [] From cc9be12d22e7f5eb524d5f6eabfdb1ee9a049f46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Wed, 23 Jul 2025 17:16:11 +0200 Subject: [PATCH 212/595] :recycle: break the long line --- .../ayon_core/pipeline/workfile/workfile_template_builder.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/workfile_template_builder.py b/client/ayon_core/pipeline/workfile/workfile_template_builder.py index 276f90af80..bfa192d834 100644 --- a/client/ayon_core/pipeline/workfile/workfile_template_builder.py +++ b/client/ayon_core/pipeline/workfile/workfile_template_builder.py @@ -1627,7 +1627,8 @@ class PlaceholderLoadMixin(object): # self.builder: AbstractTemplateBuilder folder_ids = [ linked_folder_entity["id"] - for linked_folder_entity in self.builder.linked_folder_entities # noqa: E501 + for linked_folder_entity in ( + self.builder.linked_folder_entities) ] if not folder_ids: From 50e6c541f982a52ede822f70eb72074888f038c6 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 24 Jul 2025 10:59:34 +0200 Subject: [PATCH 213/595] reuse comment from last workfile --- client/ayon_core/pipeline/workfile/utils.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index d5c717bd6d..36e72bb55a 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -417,7 +417,9 @@ def save_next_version( Args: version (Optional[int]): Workfile version that will be used. Last version + 1 is used if is not passed in. - comment (optional[str]): Workfile comment. + comment (optional[str]): Workfile comment. Pass '""' to clear comment. + The last workfile comment is used if it is not passed in and + passed 'version' is 'None'. description (Optional[str]): Workfile description. prepared_data (Optional[SaveWorkfileOptionalData]): Prepared data for speed enhancements. @@ -513,6 +515,9 @@ def save_next_version( product_type="workfile" ) + if comment is None and last_workfile is not None: + comment = last_workfile.comment + template_data["version"] = version template_data["comment"] = comment From eea1f4cb6a9057a1cf5c4a00e5ba26ecd07985d8 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 24 Jul 2025 11:05:41 +0200 Subject: [PATCH 214/595] re-use comment from current file --- client/ayon_core/pipeline/workfile/utils.py | 24 +++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 36e72bb55a..a6e4dad2b4 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -429,6 +429,11 @@ def save_next_version( from ayon_core.pipeline.context_tools import registered_host host = registered_host() + current_path = host.get_current_workfile() + if not current_path: + current_path = None + else: + current_path = os.path.normpath(current_path) context = host.get_current_context() project_name = context["project_name"] @@ -483,6 +488,7 @@ def save_next_version( ) rootless_dir = workdir.rootless last_workfile = None + current_workfile = None if version is None: workfiles = host.list_workfiles( project_name, folder_entity, task_entity, @@ -496,6 +502,10 @@ def save_next_version( for workfile in workfiles: if workfile.version is None: continue + + if current_workfile is None and workfile.filepath == current_path: + current_workfile = workfile + if ( last_workfile is None or last_workfile.version < workfile.version @@ -515,11 +525,18 @@ def save_next_version( product_type="workfile" ) - if comment is None and last_workfile is not None: - comment = last_workfile.comment + # Re-use comment if is not set + if comment is None: + if current_workfile is not None: + # Use 'comment' from the current workfile if is set + comment = current_workfile.comment + elif last_workfile is not None: + # Use 'comment' from the last workfile + comment = last_workfile.comment template_data["version"] = version - template_data["comment"] = comment + if comment: + template_data["comment"] = comment # Resolve extension # - Don't fill any if the host does not have defined any -> e.g. if host @@ -530,7 +547,6 @@ def save_next_version( ext = None workfile_extensions = host.get_workfile_extensions() if workfile_extensions: - current_path = host.get_current_workfile() if current_path: ext = os.path.splitext(current_path)[1].lstrip(".") elif last_workfile is not None: From 4b5431f26718169a93cda20706b37f343f441e8b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 24 Jul 2025 11:07:09 +0200 Subject: [PATCH 215/595] added helper functions to workfile __init__.py --- client/ayon_core/pipeline/workfile/__init__.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/__init__.py b/client/ayon_core/pipeline/workfile/__init__.py index c6a0e0d80b..7acaf69a7c 100644 --- a/client/ayon_core/pipeline/workfile/__init__.py +++ b/client/ayon_core/pipeline/workfile/__init__.py @@ -22,9 +22,11 @@ from .utils import ( should_open_workfiles_tool_on_launch, MissingWorkdirError, + save_workfile_info, save_current_workfile_to, save_workfile_with_current_context, - save_workfile_info, + save_next_version, + copy_workfile_to_context, find_workfile_rootless_path, ) @@ -63,9 +65,11 @@ __all__ = ( "should_open_workfiles_tool_on_launch", "MissingWorkdirError", + "save_workfile_info", "save_current_workfile_to", "save_workfile_with_current_context", - "save_workfile_info", + "save_next_version", + "copy_workfile_to_context", "BuildWorkfile", From 15854f07060838d9e3c5008feeb4551d5da898c5 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 24 Jul 2025 11:49:00 +0200 Subject: [PATCH 216/595] revert some of the logic --- client/ayon_core/pipeline/workfile/utils.py | 43 +++++++++------------ 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index a6e4dad2b4..3812fb6471 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -418,8 +418,7 @@ def save_next_version( version (Optional[int]): Workfile version that will be used. Last version + 1 is used if is not passed in. comment (optional[str]): Workfile comment. Pass '""' to clear comment. - The last workfile comment is used if it is not passed in and - passed 'version' is 'None'. + The current workfile comment is used if it is not passed. description (Optional[str]): Workfile description. prepared_data (Optional[SaveWorkfileOptionalData]): Prepared data for speed enhancements. @@ -489,7 +488,7 @@ def save_next_version( rootless_dir = workdir.rootless last_workfile = None current_workfile = None - if version is None: + if version is None or comment is None: workfiles = host.list_workfiles( project_name, folder_entity, task_entity, prepared_data=ListWorkfilesOptionalData( @@ -500,39 +499,33 @@ def save_next_version( ) ) for workfile in workfiles: - if workfile.version is None: - continue - if current_workfile is None and workfile.filepath == current_path: current_workfile = workfile + if workfile.version is None: + continue + if ( last_workfile is None or last_workfile.version < workfile.version ): last_workfile = workfile - version = None - if last_workfile is not None: - version = last_workfile.version + 1 + if version is None and last_workfile is not None: + version = last_workfile.version + 1 - if version is None: - version = get_versioning_start( - project_name, - host.name, - task_name=task_entity["name"], - task_type=task_entity["taskType"], - product_type="workfile" - ) + if version is None: + version = get_versioning_start( + project_name, + host.name, + task_name=task_entity["name"], + task_type=task_entity["taskType"], + product_type="workfile" + ) - # Re-use comment if is not set - if comment is None: - if current_workfile is not None: - # Use 'comment' from the current workfile if is set - comment = current_workfile.comment - elif last_workfile is not None: - # Use 'comment' from the last workfile - comment = last_workfile.comment + # Re-use comment from the current workfile if is not passed in + if comment is None and current_workfile is not None: + comment = current_workfile.comment template_data["version"] = version if comment: From 583dae949dabe0abd75fb1bb311dbe6547a1730d Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 24 Jul 2025 11:57:25 +0200 Subject: [PATCH 217/595] strip dot of extension --- client/ayon_core/pipeline/workfile/utils.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 3812fb6471..354449bd3e 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -541,11 +541,12 @@ def save_next_version( workfile_extensions = host.get_workfile_extensions() if workfile_extensions: if current_path: - ext = os.path.splitext(current_path)[1].lstrip(".") + ext = os.path.splitext(current_path)[1] elif last_workfile is not None: - ext = os.path.splitext(last_workfile.filepath)[1].lstrip(".") + ext = os.path.splitext(last_workfile.filepath)[1] else: ext = next(iter(workfile_extensions), None) + ext = ext.lstrip(".") if ext: template_data["ext"] = ext From 4204de3ab2482903f1c84b597e29487dfbadf6a4 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 24 Jul 2025 12:34:53 +0200 Subject: [PATCH 218/595] pass variant to actions list --- client/ayon_core/tools/launcher/models/actions.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/tools/launcher/models/actions.py b/client/ayon_core/tools/launcher/models/actions.py index adb8d371ed..1a8e423751 100644 --- a/client/ayon_core/tools/launcher/models/actions.py +++ b/client/ayon_core/tools/launcher/models/actions.py @@ -399,7 +399,11 @@ class ActionsModel: return cache.get_data() try: - response = ayon_api.post("actions/list", **request_data) + # 'variant' query is supported since AYON backend 1.10.4 + query = urlencode({"variant": self._variant}) + response = ayon_api.post( + f"actions/list?{query}", **request_data + ) response.raise_for_status() except Exception: self.log.warning("Failed to collect webactions.", exc_info=True) From a4ec6c4a774008dd66af401957f05d1e55569e8c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 24 Jul 2025 12:40:59 +0200 Subject: [PATCH 219/595] Remove redundant default value Co-authored-by: Roy Nieterau --- client/ayon_core/pipeline/workfile/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 354449bd3e..6666853998 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -545,7 +545,7 @@ def save_next_version( elif last_workfile is not None: ext = os.path.splitext(last_workfile.filepath)[1] else: - ext = next(iter(workfile_extensions), None) + ext = next(iter(workfile_extensions)) ext = ext.lstrip(".") if ext: From 351167a8d62fc59ddd693b9ab45ecad65eecc177 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Thu, 24 Jul 2025 13:33:35 +0200 Subject: [PATCH 220/595] Remove unused imports --- client/ayon_core/pipeline/context_tools.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/client/ayon_core/pipeline/context_tools.py b/client/ayon_core/pipeline/context_tools.py index 308dd1bf44..b06d34b26f 100644 --- a/client/ayon_core/pipeline/context_tools.py +++ b/client/ayon_core/pipeline/context_tools.py @@ -16,7 +16,6 @@ from ayon_core.host import HostBase from ayon_core.lib import ( is_in_tests, initialize_ayon_connection, - version_up ) from ayon_core.addon import load_addons, AddonsManager from ayon_core.settings import get_project_settings @@ -24,12 +23,7 @@ from ayon_core.settings import get_project_settings from .publish.lib import filter_pyblish_plugins from .anatomy import Anatomy from .template_data import get_template_data_with_names -from .workfile import ( - get_custom_workfile_template_by_string_context, - get_workfile_template_key_from_context, - get_last_workfile, - MissingWorkdirError, -) +from .workfile import get_custom_workfile_template_by_string_context from . import ( register_loader_plugin_path, register_inventory_action_path, From 2d3259aac6170d82106a8f469376cd076b22baea Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Thu, 24 Jul 2025 13:36:14 +0200 Subject: [PATCH 221/595] Import from a level up --- client/ayon_core/pipeline/context_tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/context_tools.py b/client/ayon_core/pipeline/context_tools.py index b06d34b26f..9b29fa0b3a 100644 --- a/client/ayon_core/pipeline/context_tools.py +++ b/client/ayon_core/pipeline/context_tools.py @@ -575,5 +575,5 @@ def get_process_id(): def version_up_current_workfile(): """Function to increment and save workfile""" - from ayon_core.pipeline.workfile.utils import save_next_version + from ayon_core.pipeline.workfile import save_next_version save_next_version() From 39c72809b9c13d773fc1abb217658c3d495bff9f Mon Sep 17 00:00:00 2001 From: Ynbot Date: Thu, 24 Jul 2025 12:05:37 +0000 Subject: [PATCH 222/595] [Automated] Add generated package files from main --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index 509c4a8d14..5e5ea1ca3a 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.4.1+dev" +__version__ = "1.5.0" diff --git a/package.py b/package.py index 039bf0379c..f10bbe29cb 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.4.1+dev" +version = "1.5.0" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index 68e1ed39a3..9e1046dc43 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.4.1+dev" +version = "1.5.0" description = "" authors = ["Ynput Team "] readme = "README.md" From 34d2c6e6e1f21c452e0c50524b33eefcb6087fd3 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Thu, 24 Jul 2025 12:06:16 +0000 Subject: [PATCH 223/595] [Automated] Update version in package.py for develop --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index 5e5ea1ca3a..7f55a17a01 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.5.0" +__version__ = "1.5.0+dev" diff --git a/package.py b/package.py index f10bbe29cb..807e4e4b35 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.5.0" +version = "1.5.0+dev" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index 9e1046dc43..e7977a5579 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.5.0" +version = "1.5.0+dev" description = "" authors = ["Ynput Team "] readme = "README.md" From 7382eb338c82618a7ab2161630a8be176c66fa3a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 24 Jul 2025 12:07:11 +0000 Subject: [PATCH 224/595] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 9fb6ee645d..9202190f8b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to AYON Tray options: + - 1.5.0 - 1.4.1 - 1.4.0 - 1.3.2 From 3cba26a85f4ca068a1229a146a36d981a388a31b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 24 Jul 2025 15:21:19 +0200 Subject: [PATCH 225/595] moved 'get_current_project_settings' to pipeline context tools --- client/ayon_core/pipeline/context_tools.py | 18 +++++++++++++ client/ayon_core/settings/lib.py | 30 +++++++++++++--------- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/client/ayon_core/pipeline/context_tools.py b/client/ayon_core/pipeline/context_tools.py index 9b29fa0b3a..0877f2f049 100644 --- a/client/ayon_core/pipeline/context_tools.py +++ b/client/ayon_core/pipeline/context_tools.py @@ -360,6 +360,24 @@ def get_current_task_name(): return get_global_context()["task_name"] +def get_current_project_settings() -> dict[str, Any]: + """Project settings for the current context project. + + Returns: + dict[str, Any]: Project settings for the current context project. + + Raises: + ValueError: If current project is not set. + + """ + project_name = get_current_project_name() + if not project_name: + raise ValueError( + "Current project is not set. Can't get project settings." + ) + return get_project_settings(project_name) + + def get_current_project_entity(fields=None): """Helper function to get project document based on global Session. diff --git a/client/ayon_core/settings/lib.py b/client/ayon_core/settings/lib.py index 72af07799f..fbbd860397 100644 --- a/client/ayon_core/settings/lib.py +++ b/client/ayon_core/settings/lib.py @@ -4,6 +4,7 @@ import logging import collections import copy import time +import warnings import ayon_api @@ -175,17 +176,22 @@ def get_project_environments(project_name, project_settings=None): def get_current_project_settings(): - """Project settings for current context project. + """DEPRECATE Project settings for current context project. + + Function requires access to pipeline context which is in + 'ayon_core.pipeline'. + + Returns: + dict[str, Any]: Project settings for current context project. - Project name should be stored in environment variable `AYON_PROJECT_NAME`. - This function should be used only in host context where environment - variable must be set and should not happen that any part of process will - change the value of the environment variable. """ - project_name = os.environ.get("AYON_PROJECT_NAME") - if not project_name: - raise ValueError( - "Missing context project in environment" - " variable `AYON_PROJECT_NAME`." - ) - return get_project_settings(project_name) + warnings.warn( + "Used deprecated function 'get_current_project_settings' in" + " 'ayon_core.settings'. The function was moved to" + " 'ayon_core.pipeline.context_tools'.", + DeprecationWarning, + stacklevel=2 + ) + from ayon_core.pipeline.context_tools import get_current_project_settings + + return get_current_project_settings() From 7f4f7be8b36b5a24ad63a58ba9a05036ef40e443 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 24 Jul 2025 15:22:51 +0200 Subject: [PATCH 226/595] use anatomy if roots are not filled --- client/ayon_core/pipeline/load/utils.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/client/ayon_core/pipeline/load/utils.py b/client/ayon_core/pipeline/load/utils.py index 3c50d76fb5..836fc5e096 100644 --- a/client/ayon_core/pipeline/load/utils.py +++ b/client/ayon_core/pipeline/load/utils.py @@ -720,11 +720,13 @@ def get_representation_path(representation, root=None): str: fullpath of the representation """ - if root is None: - from ayon_core.pipeline import registered_root + from ayon_core.pipeline import get_current_project_name, Anatomy - root = registered_root() + anatomy = Anatomy(get_current_project_name()) + return get_representation_path_with_anatomy( + representation, anatomy + ) def path_from_representation(): try: @@ -772,7 +774,7 @@ def get_representation_path(representation, root=None): dir_path, file_name = os.path.split(path) if not os.path.exists(dir_path): - return + return None base_name, ext = os.path.splitext(file_name) file_name_items = None @@ -782,7 +784,7 @@ def get_representation_path(representation, root=None): file_name_items = base_name.split("%") if not file_name_items: - return + return None filename_start = file_name_items[0] From 97cd8a2ec960bbca158dad49c2522a2828011fc3 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 24 Jul 2025 15:23:07 +0200 Subject: [PATCH 227/595] mark registered root as deprecated --- client/ayon_core/pipeline/context_tools.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/pipeline/context_tools.py b/client/ayon_core/pipeline/context_tools.py index 0877f2f049..89963a6205 100644 --- a/client/ayon_core/pipeline/context_tools.py +++ b/client/ayon_core/pipeline/context_tools.py @@ -69,7 +69,7 @@ def _get_addons_manager(): def register_root(path): - """Register currently active root""" + """DEPRECATED Register currently active root.""" log.info("Registering root: %s" % path) _registered_root["_"] = path @@ -88,8 +88,14 @@ def registered_root(): Returns: dict[str, str]: Root paths. - """ + """ + warnings.warn( + "Used deprecated function 'registered_root'. Please use 'Anatomy'" + " to get roots.", + DeprecationWarning, + stacklevel=2, + ) return _registered_root["_"] From 2d341f6e552c76604a31df60ac875a7dbd7ce1b1 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 24 Jul 2025 15:23:26 +0200 Subject: [PATCH 228/595] use 'get_current_host_name' to get host name --- client/ayon_core/pipeline/context_tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/context_tools.py b/client/ayon_core/pipeline/context_tools.py index 89963a6205..2b4f9d45b8 100644 --- a/client/ayon_core/pipeline/context_tools.py +++ b/client/ayon_core/pipeline/context_tools.py @@ -183,7 +183,7 @@ def install_ayon_plugins(project_name=None, host_name=None): register_inventory_action_path(INVENTORY_PATH) if host_name is None: - host_name = os.environ.get("AYON_HOST_NAME") + host_name = get_current_host_name() addons_manager = _get_addons_manager() publish_plugin_dirs = addons_manager.collect_publish_plugin_paths( From 28eac4b18bc69ca4117d0cd6bdf6a9e2363d7e38 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 24 Jul 2025 15:24:16 +0200 Subject: [PATCH 229/595] added HostBase validation --- client/ayon_core/pipeline/context_tools.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/context_tools.py b/client/ayon_core/pipeline/context_tools.py index 2b4f9d45b8..e8a770ec54 100644 --- a/client/ayon_core/pipeline/context_tools.py +++ b/client/ayon_core/pipeline/context_tools.py @@ -99,13 +99,18 @@ def registered_root(): return _registered_root["_"] -def install_host(host): +def install_host(host: HostBase) -> None: """Install `host` into the running Python session. Args: host (HostBase): A host interface object. """ + if not isinstance(host, HostBase): + log.error( + f"Host must be a subclass of 'HostBase', got '{type(host)}'." + ) + global _is_installed _is_installed = True From ab60d611105a58901bdf8467a9d59ff34598ed13 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 24 Jul 2025 15:24:31 +0200 Subject: [PATCH 230/595] mark 'version_up_current_workfile' as deprecated --- client/ayon_core/pipeline/context_tools.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/context_tools.py b/client/ayon_core/pipeline/context_tools.py index e8a770ec54..423e8f7216 100644 --- a/client/ayon_core/pipeline/context_tools.py +++ b/client/ayon_core/pipeline/context_tools.py @@ -1,5 +1,6 @@ """Core pipeline functionality""" from __future__ import annotations + import os import logging import platform @@ -575,6 +576,7 @@ def change_current_context( " It is not necessary to pass it in anymore." ), DeprecationWarning, + stacklevel=2, ) host = registered_host() @@ -603,6 +605,16 @@ def get_process_id(): def version_up_current_workfile(): - """Function to increment and save workfile""" + """DEPRECATED Function to increment and save workfile. + + Please use 'save_next_version' from 'ayon_core.pipeline.workfile' instead. + + """ + warnings.warn( + "Used deprecated 'version_up_current_workfile' please use" + " 'save_next_version' from 'ayon_core.pipeline.workfile' instead.", + DeprecationWarning, + stacklevel=2, + ) from ayon_core.pipeline.workfile import save_next_version save_next_version() From 32ea97af45bef30951c65e235f541cc2f2827e46 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 25 Jul 2025 16:04:03 +0200 Subject: [PATCH 231/595] define settings category on core plugins --- client/ayon_core/plugins/publish/cleanup.py | 2 ++ client/ayon_core/plugins/publish/cleanup_farm.py | 2 ++ client/ayon_core/plugins/publish/collect_audio.py | 1 + client/ayon_core/plugins/publish/collect_frames_fix.py | 1 + client/ayon_core/plugins/publish/collect_scene_version.py | 3 ++- client/ayon_core/plugins/publish/extract_burnin.py | 1 + client/ayon_core/plugins/publish/extract_color_transcode.py | 2 ++ client/ayon_core/plugins/publish/extract_review.py | 1 + client/ayon_core/plugins/publish/extract_thumbnail.py | 1 + .../plugins/publish/extract_usd_layer_contributions.py | 6 +++++- client/ayon_core/plugins/publish/integrate_hero_version.py | 2 ++ client/ayon_core/plugins/publish/integrate_product_group.py | 2 ++ .../publish/preintegrate_thumbnail_representation.py | 2 ++ client/ayon_core/plugins/publish/validate_containers.py | 1 + client/ayon_core/plugins/publish/validate_intent.py | 2 ++ client/ayon_core/plugins/publish/validate_version.py | 1 + 16 files changed, 28 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/plugins/publish/cleanup.py b/client/ayon_core/plugins/publish/cleanup.py index 681fe700a3..03eaaf9c6e 100644 --- a/client/ayon_core/plugins/publish/cleanup.py +++ b/client/ayon_core/plugins/publish/cleanup.py @@ -38,6 +38,8 @@ class CleanUp(pyblish.api.InstancePlugin): "webpublisher", "shell" ] + settings_category = "core" + exclude_families = ["clip"] optional = True active = True diff --git a/client/ayon_core/plugins/publish/cleanup_farm.py b/client/ayon_core/plugins/publish/cleanup_farm.py index e655437ced..8d1c8de425 100644 --- a/client/ayon_core/plugins/publish/cleanup_farm.py +++ b/client/ayon_core/plugins/publish/cleanup_farm.py @@ -13,6 +13,8 @@ class CleanUpFarm(pyblish.api.ContextPlugin): order = pyblish.api.IntegratorOrder + 11 label = "Clean Up Farm" + + settings_category = "core" enabled = True # Keep "filesequence" for backwards compatibility of older jobs diff --git a/client/ayon_core/plugins/publish/collect_audio.py b/client/ayon_core/plugins/publish/collect_audio.py index 57c69ef2b2..c0b263fa6f 100644 --- a/client/ayon_core/plugins/publish/collect_audio.py +++ b/client/ayon_core/plugins/publish/collect_audio.py @@ -41,6 +41,7 @@ class CollectAudio(pyblish.api.ContextPlugin): "max", "circuit", ] + settings_category = "core" audio_product_name = "audioMain" diff --git a/client/ayon_core/plugins/publish/collect_frames_fix.py b/client/ayon_core/plugins/publish/collect_frames_fix.py index 0f7d5b692a..4270af5541 100644 --- a/client/ayon_core/plugins/publish/collect_frames_fix.py +++ b/client/ayon_core/plugins/publish/collect_frames_fix.py @@ -23,6 +23,7 @@ class CollectFramesFixDef( targets = ["local"] hosts = ["nuke"] families = ["render", "prerender"] + settings_category = "core" rewrite_version_enable = False diff --git a/client/ayon_core/plugins/publish/collect_scene_version.py b/client/ayon_core/plugins/publish/collect_scene_version.py index 7979b66abe..e6e81ea074 100644 --- a/client/ayon_core/plugins/publish/collect_scene_version.py +++ b/client/ayon_core/plugins/publish/collect_scene_version.py @@ -12,9 +12,10 @@ class CollectSceneVersion(pyblish.api.ContextPlugin): """ order = pyblish.api.CollectorOrder - label = 'Collect Scene Version' + label = "Collect Scene Version" # configurable in Settings hosts = ["*"] + settings_category = "core" # in some cases of headless publishing (for example webpublisher using PS) # you want to ignore version from name and let integrate use next version diff --git a/client/ayon_core/plugins/publish/extract_burnin.py b/client/ayon_core/plugins/publish/extract_burnin.py index fa7fd4e504..f962032680 100644 --- a/client/ayon_core/plugins/publish/extract_burnin.py +++ b/client/ayon_core/plugins/publish/extract_burnin.py @@ -57,6 +57,7 @@ class ExtractBurnin(publish.Extractor): "unreal", "circuit", ] + settings_category = "core" optional = True diff --git a/client/ayon_core/plugins/publish/extract_color_transcode.py b/client/ayon_core/plugins/publish/extract_color_transcode.py index 8a276cf608..bbb6f9585b 100644 --- a/client/ayon_core/plugins/publish/extract_color_transcode.py +++ b/client/ayon_core/plugins/publish/extract_color_transcode.py @@ -55,6 +55,8 @@ class ExtractOIIOTranscode(publish.Extractor): label = "Transcode color spaces" order = pyblish.api.ExtractorOrder + 0.019 + settings_category = "core" + optional = True # Supported extensions diff --git a/client/ayon_core/plugins/publish/extract_review.py b/client/ayon_core/plugins/publish/extract_review.py index 1e4997cfb4..377010d9e0 100644 --- a/client/ayon_core/plugins/publish/extract_review.py +++ b/client/ayon_core/plugins/publish/extract_review.py @@ -165,6 +165,7 @@ class ExtractReview(pyblish.api.InstancePlugin): "photoshop" ] + settings_category = "core" # Supported extensions image_exts = {"exr", "jpg", "jpeg", "png", "dpx", "tga", "tiff", "tif"} video_exts = {"mov", "mp4"} diff --git a/client/ayon_core/plugins/publish/extract_thumbnail.py b/client/ayon_core/plugins/publish/extract_thumbnail.py index 66acb15312..5d9f83fb42 100644 --- a/client/ayon_core/plugins/publish/extract_thumbnail.py +++ b/client/ayon_core/plugins/publish/extract_thumbnail.py @@ -43,6 +43,7 @@ class ExtractThumbnail(pyblish.api.InstancePlugin): "houdini", "circuit", ] + settings_category = "core" enabled = False integrate_thumbnail = False diff --git a/client/ayon_core/plugins/publish/extract_usd_layer_contributions.py b/client/ayon_core/plugins/publish/extract_usd_layer_contributions.py index ec1fddc6b1..c2fa61e1fe 100644 --- a/client/ayon_core/plugins/publish/extract_usd_layer_contributions.py +++ b/client/ayon_core/plugins/publish/extract_usd_layer_contributions.py @@ -255,7 +255,7 @@ class CollectUSDLayerContributions(pyblish.api.InstancePlugin, order = pyblish.api.CollectorOrder + 0.35 label = "Collect USD Layer Contributions (Asset/Shot)" families = ["usd"] - enabled = True + settings_category = "core" # A contribution defines a contribution into a (department) layer which # will get layered into the target product, usually the asset or shot. @@ -633,6 +633,8 @@ class ExtractUSDLayerContribution(publish.Extractor): label = "Extract USD Layer Contributions (Asset/Shot)" order = pyblish.api.ExtractorOrder + 0.45 + settings_category = "core" + use_ayon_entity_uri = False def process(self, instance): @@ -795,6 +797,8 @@ class ExtractUSDAssetContribution(publish.Extractor): label = "Extract USD Asset/Shot Contributions" order = ExtractUSDLayerContribution.order + 0.01 + settings_category = "core" + use_ayon_entity_uri = False def process(self, instance): diff --git a/client/ayon_core/plugins/publish/integrate_hero_version.py b/client/ayon_core/plugins/publish/integrate_hero_version.py index 43f93da293..90e6f15568 100644 --- a/client/ayon_core/plugins/publish/integrate_hero_version.py +++ b/client/ayon_core/plugins/publish/integrate_hero_version.py @@ -61,6 +61,8 @@ class IntegrateHeroVersion( # Must happen after IntegrateNew order = pyblish.api.IntegratorOrder + 0.1 + settings_category = "core" + optional = True active = True diff --git a/client/ayon_core/plugins/publish/integrate_product_group.py b/client/ayon_core/plugins/publish/integrate_product_group.py index 90887a359d..8904d21d69 100644 --- a/client/ayon_core/plugins/publish/integrate_product_group.py +++ b/client/ayon_core/plugins/publish/integrate_product_group.py @@ -24,6 +24,8 @@ class IntegrateProductGroup(pyblish.api.InstancePlugin): order = pyblish.api.IntegratorOrder - 0.1 label = "Product Group" + settings_category = "core" + # Attributes set by settings product_grouping_profiles = None diff --git a/client/ayon_core/plugins/publish/preintegrate_thumbnail_representation.py b/client/ayon_core/plugins/publish/preintegrate_thumbnail_representation.py index 8bd67c0183..900febc236 100644 --- a/client/ayon_core/plugins/publish/preintegrate_thumbnail_representation.py +++ b/client/ayon_core/plugins/publish/preintegrate_thumbnail_representation.py @@ -22,6 +22,8 @@ class PreIntegrateThumbnails(pyblish.api.InstancePlugin): label = "Override Integrate Thumbnail Representations" order = pyblish.api.IntegratorOrder - 0.1 + settings_category = "core" + integrate_profiles = [] def process(self, instance): diff --git a/client/ayon_core/plugins/publish/validate_containers.py b/client/ayon_core/plugins/publish/validate_containers.py index 520e7a7ce9..fda3d93627 100644 --- a/client/ayon_core/plugins/publish/validate_containers.py +++ b/client/ayon_core/plugins/publish/validate_containers.py @@ -31,6 +31,7 @@ class ValidateOutdatedContainers( label = "Validate Outdated Containers" order = pyblish.api.ValidatorOrder + settings_category = "core" optional = True actions = [ShowInventory] diff --git a/client/ayon_core/plugins/publish/validate_intent.py b/client/ayon_core/plugins/publish/validate_intent.py index 71df652e92..fa5e5af093 100644 --- a/client/ayon_core/plugins/publish/validate_intent.py +++ b/client/ayon_core/plugins/publish/validate_intent.py @@ -14,6 +14,8 @@ class ValidateIntent(pyblish.api.ContextPlugin): order = pyblish.api.ValidatorOrder label = "Validate Intent" + settings_category = "core" + enabled = False # Can be modified by settings diff --git a/client/ayon_core/plugins/publish/validate_version.py b/client/ayon_core/plugins/publish/validate_version.py index 0359f8fb53..d63c4e1f03 100644 --- a/client/ayon_core/plugins/publish/validate_version.py +++ b/client/ayon_core/plugins/publish/validate_version.py @@ -17,6 +17,7 @@ class ValidateVersion(pyblish.api.InstancePlugin, OptionalPyblishPluginMixin): order = pyblish.api.ValidatorOrder label = "Validate Version" + settings_category = "core" optional = False active = True From 2e345fb297604b9bff86c8c124e50eb723b1b04e Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 25 Jul 2025 16:35:59 +0200 Subject: [PATCH 232/595] warn if 'settings_category' is not filled but settings are received --- client/ayon_core/pipeline/publish/lib.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/pipeline/publish/lib.py b/client/ayon_core/pipeline/publish/lib.py index fb84417730..cd6a7bca75 100644 --- a/client/ayon_core/pipeline/publish/lib.py +++ b/client/ayon_core/pipeline/publish/lib.py @@ -354,12 +354,17 @@ def get_plugin_settings(plugin, project_settings, log, category=None): # Use project settings based on a category name if category: try: - return ( + output = ( project_settings [category] ["publish"] [plugin.__name__] ) + warnings.warn( + f"Please fill 'settings_category' for plugin '{plugin.__name__}'.", + DeprecationWarning + ) + return output except KeyError: pass @@ -384,12 +389,17 @@ def get_plugin_settings(plugin, project_settings, log, category=None): category_from_file = "core" try: - return ( + output = ( project_settings [category_from_file] [plugin_kind] [plugin.__name__] ) + warnings.warn( + f"Please fill 'settings_category' for plugin '{plugin.__name__}'.", + DeprecationWarning + ) + return output except KeyError: pass return {} From 1bdd64ae3de81473796ed52ac3f59dde47fca55b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 25 Jul 2025 17:03:17 +0200 Subject: [PATCH 233/595] allow path to python file --- client/ayon_core/pipeline/publish/lib.py | 37 +++++++++++++----------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/client/ayon_core/pipeline/publish/lib.py b/client/ayon_core/pipeline/publish/lib.py index fb84417730..ddb1c46def 100644 --- a/client/ayon_core/pipeline/publish/lib.py +++ b/client/ayon_core/pipeline/publish/lib.py @@ -243,32 +243,35 @@ def publish_plugins_discover( for path in paths: path = os.path.normpath(path) - if not os.path.isdir(path): - continue + filenames = [] + if os.path.isdir(path): + filenames.extend( + name + for name in os.listdir(path) + if ( + os.path.isfile(os.path.join(path, name)) + and not name.startswith("_") + ) + ) + else: + filenames.append(os.path.basename(path)) + path = os.path.dirname(path) - for fname in os.listdir(path): - if fname.startswith("_"): - continue - - abspath = os.path.join(path, fname) - - if not os.path.isfile(abspath): - continue - - mod_name, mod_ext = os.path.splitext(fname) - - if mod_ext != ".py": + for filename in filenames: + mod_name, mod_ext = os.path.splitext(filename) + if mod_ext.lower() != ".py": continue + filepath = os.path.join(path, filename) try: module = import_filepath( - abspath, mod_name, sys_module_name=mod_name) + filepath, mod_name, sys_module_name=mod_name except Exception as err: # noqa: BLE001 # we need broad exception to catch all possible errors. - result.crashed_file_paths[abspath] = sys.exc_info() + result.crashed_file_paths[filepath] = sys.exc_info() - log.debug('Skipped: "%s" (%s)', mod_name, err) + log.debug('Skipped: "%s" (%s)', filepath, err) continue for plugin in pyblish.plugin.plugins_from_module(module): From c398e1fca35c5c379acb53b1c47bce8a493affb9 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 25 Jul 2025 17:03:37 +0200 Subject: [PATCH 234/595] hash dirpath for sys modules --- client/ayon_core/pipeline/publish/lib.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/publish/lib.py b/client/ayon_core/pipeline/publish/lib.py index ddb1c46def..c0b138c7f2 100644 --- a/client/ayon_core/pipeline/publish/lib.py +++ b/client/ayon_core/pipeline/publish/lib.py @@ -5,6 +5,7 @@ import sys import inspect import copy import warnings +import hashlib import xml.etree.ElementTree from typing import TYPE_CHECKING, Optional, Union, List @@ -257,15 +258,18 @@ def publish_plugins_discover( filenames.append(os.path.basename(path)) path = os.path.dirname(path) + dirpath_hash = hashlib.md5(path.encode("utf-8")).hexdigest() for filename in filenames: mod_name, mod_ext = os.path.splitext(filename) if mod_ext.lower() != ".py": continue filepath = os.path.join(path, filename) + sys_module_name = f"{dirpath_hash}.{mod_name}" try: module = import_filepath( - filepath, mod_name, sys_module_name=mod_name + filepath, mod_name, sys_module_name=sys_module_name + ) except Exception as err: # noqa: BLE001 # we need broad exception to catch all possible errors. From cdb719494ef86728f22440e137320e2aa91c6216 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 25 Jul 2025 17:19:26 +0200 Subject: [PATCH 235/595] use same name for both sys module and module --- client/ayon_core/pipeline/publish/lib.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/pipeline/publish/lib.py b/client/ayon_core/pipeline/publish/lib.py index c0b138c7f2..d360526024 100644 --- a/client/ayon_core/pipeline/publish/lib.py +++ b/client/ayon_core/pipeline/publish/lib.py @@ -260,15 +260,15 @@ def publish_plugins_discover( dirpath_hash = hashlib.md5(path.encode("utf-8")).hexdigest() for filename in filenames: - mod_name, mod_ext = os.path.splitext(filename) - if mod_ext.lower() != ".py": + basename, ext = os.path.splitext(filename) + if ext.lower() != ".py": continue filepath = os.path.join(path, filename) - sys_module_name = f"{dirpath_hash}.{mod_name}" + module_name = f"{dirpath_hash}.{basename}" try: module = import_filepath( - filepath, mod_name, sys_module_name=sys_module_name + filepath, module_name, sys_module_name=module_name ) except Exception as err: # noqa: BLE001 From feece4a7c30f32603c58d11d201aa73d494ed040 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 25 Jul 2025 17:29:12 +0200 Subject: [PATCH 236/595] fix line length --- client/ayon_core/pipeline/publish/lib.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/pipeline/publish/lib.py b/client/ayon_core/pipeline/publish/lib.py index cd6a7bca75..dfaba0e7a9 100644 --- a/client/ayon_core/pipeline/publish/lib.py +++ b/client/ayon_core/pipeline/publish/lib.py @@ -361,7 +361,8 @@ def get_plugin_settings(plugin, project_settings, log, category=None): [plugin.__name__] ) warnings.warn( - f"Please fill 'settings_category' for plugin '{plugin.__name__}'.", + "Please fill 'settings_category'" + f" for plugin '{plugin.__name__}'.", DeprecationWarning ) return output @@ -396,7 +397,8 @@ def get_plugin_settings(plugin, project_settings, log, category=None): [plugin.__name__] ) warnings.warn( - f"Please fill 'settings_category' for plugin '{plugin.__name__}'.", + "Please fill 'settings_category'" + f" for plugin '{plugin.__name__}'.", DeprecationWarning ) return output From 4e39e86037d878eed6e5359f1891587b5d909ec5 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Jul 2025 10:28:29 +0200 Subject: [PATCH 237/595] Add 'enabled' attribute back --- .../ayon_core/plugins/publish/extract_usd_layer_contributions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/plugins/publish/extract_usd_layer_contributions.py b/client/ayon_core/plugins/publish/extract_usd_layer_contributions.py index c2fa61e1fe..0dc9a5e34d 100644 --- a/client/ayon_core/plugins/publish/extract_usd_layer_contributions.py +++ b/client/ayon_core/plugins/publish/extract_usd_layer_contributions.py @@ -255,6 +255,7 @@ class CollectUSDLayerContributions(pyblish.api.InstancePlugin, order = pyblish.api.CollectorOrder + 0.35 label = "Collect USD Layer Contributions (Asset/Shot)" families = ["usd"] + enabled = True settings_category = "core" # A contribution defines a contribution into a (department) layer which From 8553e44e13f83a4f1ba61d5f9d3c56c9463fb355 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Jul 2025 11:48:22 +0200 Subject: [PATCH 238/595] added share active flag --- client/ayon_core/pipeline/create/context.py | 1 + .../ayon_core/pipeline/create/structures.py | 5 +++ .../publish/collect_from_create_context.py | 45 +++++++++++-------- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/client/ayon_core/pipeline/create/context.py b/client/ayon_core/pipeline/create/context.py index 1cf8f08eff..383247ecb4 100644 --- a/client/ayon_core/pipeline/create/context.py +++ b/client/ayon_core/pipeline/create/context.py @@ -2087,6 +2087,7 @@ class CreateContext: } _queue = collections.deque() _queue.extend(instances_to_remove) + # Add children with parent lifetime flag while _queue: instance = _queue.popleft() ids_to_remove.add(instance.id) diff --git a/client/ayon_core/pipeline/create/structures.py b/client/ayon_core/pipeline/create/structures.py index 562a3a581d..b2be377b42 100644 --- a/client/ayon_core/pipeline/create/structures.py +++ b/client/ayon_core/pipeline/create/structures.py @@ -33,6 +33,11 @@ class IntEnum(int, Enum): class ParentFlags(IntEnum): # Delete instance if parent is deleted parent_lifetime = 1 + # Active state is propagated from parent to children + # - the active state is propagated in collection phase + # NOTE It might be helpful to have a function that would return "real" + # active state for instances + share_active = 1 << 1 class ConvertorItem: diff --git a/client/ayon_core/plugins/publish/collect_from_create_context.py b/client/ayon_core/plugins/publish/collect_from_create_context.py index 8383dfaa96..7b8aeee457 100644 --- a/client/ayon_core/plugins/publish/collect_from_create_context.py +++ b/client/ayon_core/plugins/publish/collect_from_create_context.py @@ -8,7 +8,7 @@ import pyblish.api from ayon_core.host import IPublishHost from ayon_core.pipeline import registered_host -from ayon_core.pipeline.create import CreateContext +from ayon_core.pipeline.create import CreateContext, ParentFlags class CollectFromCreateContext(pyblish.api.ContextPlugin): @@ -38,30 +38,39 @@ class CollectFromCreateContext(pyblish.api.ContextPlugin): if project_name: context.data["projectName"] = project_name - # Filter active instances and skip instances which have disabled - # parent instance + # Separate root instances and parented instances instances_by_parent_id = collections.defaultdict(list) - filtered_instances = [] + root_instances = [] for created_instance in create_context.instances: - if not created_instance["active"]: - continue parent_id = created_instance.parent_instance_id if parent_id is None: - filtered_instances.append(created_instance) + root_instances.append(created_instance) else: instances_by_parent_id[parent_id].append(created_instance) - parent_ids_queue = collections.deque() - parent_ids_queue.extend( - instance.id for instance in filtered_instances - ) - while parent_ids_queue: - parent_id = parent_ids_queue.popleft() - children = instances_by_parent_id[parent_id] - if not children: - continue - filtered_instances.extend(children) - parent_ids_queue.extend(instance.id for instance in children) + # Traverse instances from top to bottom + # - All instances without an existing parent are automatically + # eliminated + filtered_instances = [] + _queue = collections.deque() + _queue.append((root_instances, True)) + while _queue: + created_instances, parent_is_active = _queue.popleft() + for created_instance in created_instances: + is_active = created_instance["active"] + # Use a parent's active state if parent flags defines that + if ( + is_active + and created_instance.parent_flags & ParentFlags.share_active + ): + is_active = parent_is_active + + if is_active: + filtered_instances.append(created_instance) + + children = instances_by_parent_id[created_instance.id] + if children: + _queue.append((children, is_active)) for created_instance in filtered_instances: instance_data = created_instance.data_to_store() From fd26c2039495b3f83bf8c3c08de2edc5b449c257 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 28 Jul 2025 15:00:44 +0200 Subject: [PATCH 239/595] Fix typo --- client/ayon_core/tools/push_to_project/models/integrate.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 20fa5c98e5..341858148b 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1148,7 +1148,6 @@ class ProjectPushItemProcess: repre_entity["id"], {"active": False} ) - ) def _copy_version_thumbnail(self): version_thumbnail = ayon_api.get_version_thumbnail( From bcf87dec1060d1dfef2e8d4249f4ebee698829ba Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 28 Jul 2025 15:01:12 +0200 Subject: [PATCH 240/595] Removed unnecessary _library_only --- client/ayon_core/tools/push_to_project/control.py | 8 -------- client/ayon_core/tools/push_to_project/ui/window.py | 6 ++---- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index f24d11d0b7..eb985a3f8c 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -130,14 +130,6 @@ class PushToContextController: self._src_label = self._prepare_source_label() return self._src_label - def get_library_only(self): - """Returns state of library filter""" - return self._library_only - - def set_library_only(self, state: bool): - """Change state of library filter""" - self._library_only = state - def get_project_items(self, sender=None): return self._projects_model.get_project_items(sender) diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index 49093b8a00..6b0363adee 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -85,13 +85,12 @@ class PushToContextSelectWindow(QtWidgets.QWidget): header_widget = QtWidgets.QWidget(main_context_widget) - library_only = self._controller.get_library_only() library_only_label = QtWidgets.QLabel( "Show only libraries", header_widget ) library_only_checkbox = NiceCheckbox( - library_only, parent=header_widget) + True, parent=header_widget) header_label = QtWidgets.QLabel( controller.get_source_label(), @@ -113,7 +112,7 @@ class PushToContextSelectWindow(QtWidgets.QWidget): projects_combobox = ProjectsCombobox(controller, context_widget) projects_combobox.set_select_item_visible(True) - projects_combobox.set_standard_filter_enabled(library_only) + projects_combobox.set_standard_filter_enabled(True) context_splitter = QtWidgets.QSplitter( QtCore.Qt.Vertical, context_widget @@ -409,7 +408,6 @@ class PushToContextSelectWindow(QtWidgets.QWidget): def _on_library_only_change(self, state: int) -> None: """Change toggle state, reset filter, recalculate dropdown""" state = bool(state) - self._controller.set_library_only(state) self._projects_combobox.set_standard_filter_enabled(state) self._projects_combobox.refresh() From e80ba294fb5b184ccb4bf349b23bbb0f551cbd34 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Jul 2025 16:21:35 +0200 Subject: [PATCH 241/595] added parent changes callback --- client/ayon_core/pipeline/create/context.py | 29 +++++++++++++++++++ .../tools/publisher/models/create.py | 13 +++++++++ 2 files changed, 42 insertions(+) diff --git a/client/ayon_core/pipeline/create/context.py b/client/ayon_core/pipeline/create/context.py index 383247ecb4..5e069cd62e 100644 --- a/client/ayon_core/pipeline/create/context.py +++ b/client/ayon_core/pipeline/create/context.py @@ -1091,6 +1091,35 @@ class CreateContext: INSTANCE_REQUIREMENT_CHANGED_TOPIC, callback ) + def add_instance_parent_change_callback( + self, callback: Callable + ) -> "EventCallback": + """Register callback to listen to instance parent changes. + + Instance changed parent or parent flags. + + Data structure of event: + + ```python + { + "instances": [CreatedInstance, ...], + "create_context": CreateContext + } + ``` + + Args: + callback (Callable): Callback function that will be called when + instance requirement changed. + + Returns: + EventCallback: Created callback object which can be used to + stop listening. + + """ + return self._event_hub.add_callback( + INSTANCE_PARENT_CHANGED_TOPIC, callback + ) + def context_data_to_store(self) -> dict[str, Any]: """Data that should be stored by host function. diff --git a/client/ayon_core/tools/publisher/models/create.py b/client/ayon_core/tools/publisher/models/create.py index 058077aadd..15addd06b8 100644 --- a/client/ayon_core/tools/publisher/models/create.py +++ b/client/ayon_core/tools/publisher/models/create.py @@ -493,6 +493,9 @@ class CreateModel: self._create_context.add_instance_requirement_change_callback( self._cc_instance_requirement_changed ) + self._create_context.add_instance_parent_change_callback( + self._cc_instance_parent_changed + ) self._create_context.reset_finalization() @@ -1198,6 +1201,16 @@ class CreateModel: {"instance_ids": instance_ids}, ) + def _cc_instance_parent_changed(self, event): + instance_ids = { + instance.id + for instance in event.data["instances"] + } + self._emit_event( + "create.model.instance.parent.changed", + {"instance_ids": instance_ids}, + ) + def _get_allowed_creators_pattern(self) -> Union[Pattern, None]: """Provide regex pattern for configured creator labels in this context From 9ad1a5e830993401f1653adb38866e4ab318b014 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Jul 2025 16:21:52 +0200 Subject: [PATCH 242/595] added parent flags to UI --- client/ayon_core/tools/publisher/models/create.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/client/ayon_core/tools/publisher/models/create.py b/client/ayon_core/tools/publisher/models/create.py index 15addd06b8..0b0d287448 100644 --- a/client/ayon_core/tools/publisher/models/create.py +++ b/client/ayon_core/tools/publisher/models/create.py @@ -220,6 +220,7 @@ class InstanceItem: is_mandatory: bool, has_promised_context: bool, parent_instance_id: Optional[str], + parent_flags: int, ): self._instance_id: str = instance_id self._creator_identifier: str = creator_identifier @@ -234,6 +235,7 @@ class InstanceItem: self._is_mandatory: bool = is_mandatory self._has_promised_context: bool = has_promised_context self._parent_instance_id: Optional[str] = parent_instance_id + self._parent_flags: int = parent_flags @property def id(self): @@ -267,6 +269,10 @@ class InstanceItem: def parent_instance_id(self): return self._parent_instance_id + @property + def parent_flags(self) -> int: + return self._parent_flags + def get_variant(self): return self._variant @@ -319,6 +325,7 @@ class InstanceItem: instance.is_mandatory, instance.has_promised_context, instance.parent_instance_id, + instance.parent_flags, ) From 3e0705aad8b831ccbc62ee484cacf2de3a4fb8f4 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Jul 2025 16:31:20 +0200 Subject: [PATCH 243/595] handle add parent flags handling --- .../publisher/widgets/list_view_widgets.py | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index 65bc531d27..21762eed64 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -35,6 +35,7 @@ from ayon_core.tools.utils.lib import html_escape, checkstate_int_to_enum from ayon_core.pipeline.create import ( InstanceContextInfo, + ParentFlags, ) from ayon_core.tools.publisher.abstract import AbstractPublisherFrontend @@ -170,6 +171,7 @@ class InstanceListItemWidget(QtWidgets.QWidget): self._has_valid_context = context_info.is_valid self._is_mandatory = instance.is_mandatory self._instance_is_active = instance.is_active + self._parent_flags = instance.parent_flags # Parent active state is fluent and can change self._parent_is_active = parent_is_active @@ -238,10 +240,20 @@ class InstanceListItemWidget(QtWidgets.QWidget): self._instance_is_active = instance.is_active self._has_valid_context = context_info.is_valid self._parent_is_active = parent_is_active + self._parent_flags = instance.parent_flags self._update_checkbox_state() self._update_style_state() + def is_parent_active(self) -> bool: + return self._parent_is_active + + def _used_parent_active(self): + parent_enabled = True + if self._parent_flags & ParentFlags.share_active: + parent_enabled = self._parent_is_active + return parent_enabled + def set_parent_is_active(self, active: bool) -> None: if self._parent_is_active is active: return @@ -259,7 +271,7 @@ class InstanceListItemWidget(QtWidgets.QWidget): def _update_style_state(self) -> None: state = "" - if not self._parent_is_active: + if not self._used_parent_active(): state = "disabled" elif not self._has_valid_context: state = "invalid" @@ -271,16 +283,18 @@ class InstanceListItemWidget(QtWidgets.QWidget): self._instance_label_widget.style().polish(self._instance_label_widget) def _update_checkbox_state(self) -> None: + parent_enabled = self._used_parent_active() + self._active_checkbox.setEnabled( self._toggle_is_enabled and not self._is_mandatory - and self._parent_is_active + and parent_enabled ) # Hide checkbox for mandatory instances self._active_checkbox.setVisible(not self._is_mandatory) # Visually disable instance if parent is disabled - checked = self._parent_is_active and self._instance_is_active + checked = parent_enabled and self._instance_is_active if checked is not self._active_checkbox.isChecked(): self._active_checkbox.setChecked(checked) From 205277f05242d390e885c2a6603010cdac7582df Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Jul 2025 16:31:33 +0200 Subject: [PATCH 244/595] listen to parent changes --- .../ayon_core/tools/publisher/widgets/overview_widget.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/client/ayon_core/tools/publisher/widgets/overview_widget.py b/client/ayon_core/tools/publisher/widgets/overview_widget.py index 46395328e0..d78b143ce6 100644 --- a/client/ayon_core/tools/publisher/widgets/overview_widget.py +++ b/client/ayon_core/tools/publisher/widgets/overview_widget.py @@ -159,6 +159,10 @@ class OverviewWidget(QtWidgets.QFrame): "create.model.instance.requirement.changed", self._on_instance_requirement_changed ) + controller.register_event_callback( + "create.model.instance.parent.changed", + self._on_instance_parent_changed + ) self._product_content_widget = product_content_widget self._product_content_layout = product_content_layout @@ -361,6 +365,9 @@ class OverviewWidget(QtWidgets.QFrame): def _on_instance_requirement_changed(self, event): self._refresh_instance_states(event["instance_ids"]) + def _on_instance_parent_changed(self, event): + self._refresh_instance_states(event["instance_ids"]) + def _refresh_instance_states(self, instance_ids): current_idx = self._product_views_layout.currentIndex() for idx in range(self._product_views_layout.count()): From 6c12e1973d352a309599a89d070a6ffadd8e7f59 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Jul 2025 16:37:14 +0200 Subject: [PATCH 245/595] take all children from missing parent item --- .../tools/publisher/widgets/list_view_widgets.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index 21762eed64..c7203351de 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -998,6 +998,16 @@ class InstanceListView(AbstractInstanceView): widget.setVisible(False) widget.deleteLater() parent.takeRow(self._missing_parent_item.row()) + _queue = collections.deque() + _queue.append(self._missing_parent_item) + while _queue: + item = _queue.popleft() + for _ in range(item.rowCount()): + child = item.child(0) + _queue.append(child) + item.takeRow(0) + + self._missing_parent_item = None def refresh_instance_states(self, instance_ids=None): """Trigger update of all instances.""" From 42a2c2da5992c94cd576b41003f5f06af3b6dc0b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Jul 2025 16:37:30 +0200 Subject: [PATCH 246/595] fix parenting changes propagation --- .../publisher/widgets/list_view_widgets.py | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index c7203351de..798e382fcf 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -659,7 +659,8 @@ class InstanceListView(AbstractInstanceView): item.setData(instance_id, INSTANCE_ID_ROLE) self._items_by_id[instance_id] = item new_items[parent_id].append(item) - elif parent_id != self._parent_id_by_id.get(instance_id): + + elif item.parent() is not parent_item: new_items[parent_id].append(item) self._parent_id_by_id[instance_id] = parent_id @@ -1037,6 +1038,7 @@ class InstanceListView(AbstractInstanceView): ] _queue.append((children, True)) + discarted_ids = set() while _queue: if not instance_ids: break @@ -1045,15 +1047,20 @@ class InstanceListView(AbstractInstanceView): for child in children: instance_id = child.data(INSTANCE_ID_ROLE) widget = self._widgets_by_id[instance_id] + # Add children ids to 'instance_ids' to traverse them too + add_children = False if instance_id in instance_ids: instance_ids.discard(instance_id) + discarted_ids.add(instance_id) + # Parent active state changed -> traverse children too + add_children = ( + parent_active is not widget.is_parent_active() + ) widget.update_instance( instance_items_by_id[instance_id], context_info_by_id[instance_id], parent_active, ) - if not instance_ids: - break if not child.hasChildren(): continue @@ -1062,6 +1069,15 @@ class InstanceListView(AbstractInstanceView): child.child(row) for row in range(child.rowCount()) ] + if add_children: + for new_child in children: + instance_id = new_child.data(INSTANCE_ID_ROLE) + if instance_id not in discarted_ids: + instance_ids.add(instance_id) + + if not instance_ids: + break + _queue.append((children, widget.is_active())) def _on_active_changed(self, changed_instance_id, new_value): From ed6fd25a0409ab255ccbb1819b2b08f070be7339 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 28 Jul 2025 16:45:56 +0200 Subject: [PATCH 247/595] re-order imports --- client/ayon_core/tools/publisher/widgets/list_view_widgets.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index 798e382fcf..4dc7bf1322 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -30,14 +30,14 @@ from typing import Optional from qtpy import QtWidgets, QtCore, QtGui from ayon_core.style import get_objected_colors -from ayon_core.tools.utils import NiceCheckbox, BaseClickableFrame -from ayon_core.tools.utils.lib import html_escape, checkstate_int_to_enum from ayon_core.pipeline.create import ( InstanceContextInfo, ParentFlags, ) +from ayon_core.tools.utils import NiceCheckbox, BaseClickableFrame +from ayon_core.tools.utils.lib import html_escape, checkstate_int_to_enum from ayon_core.tools.publisher.abstract import AbstractPublisherFrontend from ayon_core.tools.publisher.models.create import ( InstanceItem, From bfc82a07fd58914933f7d1757dc48f3a6e1601c8 Mon Sep 17 00:00:00 2001 From: "robin@ynput.io" Date: Mon, 28 Jul 2025 11:30:57 -0400 Subject: [PATCH 248/595] Detect rounding issues in media available_range when extracting (OTIO). --- client/ayon_core/pipeline/editorial.py | 4 ++ .../publish/extract_otio_audio_tracks.py | 9 +++++ .../plugins/publish/extract_otio_review.py | 39 +++++++++++++++---- 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/client/ayon_core/pipeline/editorial.py b/client/ayon_core/pipeline/editorial.py index 8b6cfc52f1..b553fae3fb 100644 --- a/client/ayon_core/pipeline/editorial.py +++ b/client/ayon_core/pipeline/editorial.py @@ -7,6 +7,10 @@ import opentimelineio as otio from opentimelineio import opentime as _ot +# https://github.com/AcademySoftwareFoundation/OpenTimelineIO/issues/1822 +OTIO_EPSILON = 1e-9 + + def otio_range_to_frame_range(otio_range): start = _ot.to_frames( otio_range.start_time, otio_range.start_time.rate) diff --git a/client/ayon_core/plugins/publish/extract_otio_audio_tracks.py b/client/ayon_core/plugins/publish/extract_otio_audio_tracks.py index 472694d334..2aec4a5415 100644 --- a/client/ayon_core/plugins/publish/extract_otio_audio_tracks.py +++ b/client/ayon_core/plugins/publish/extract_otio_audio_tracks.py @@ -7,6 +7,7 @@ from ayon_core.lib import ( get_ffmpeg_tool_args, run_subprocess ) +from ayon_core.pipeline import editorial class ExtractOtioAudioTracks(pyblish.api.ContextPlugin): @@ -172,6 +173,14 @@ class ExtractOtioAudioTracks(pyblish.api.ContextPlugin): clip_start = otio_clip.source_range.start_time fps = clip_start.rate conformed_av_start = media_av_start.rescaled_to(fps) + + # Avoid rounding issue on media available range. + if clip_start.almost_equal( + conformed_av_start, + editorial.OTIO_EPSILON + ): + conformed_av_start = clip_start + # ffmpeg ignores embedded tc start = clip_start - conformed_av_start duration = otio_clip.source_range.duration diff --git a/client/ayon_core/plugins/publish/extract_otio_review.py b/client/ayon_core/plugins/publish/extract_otio_review.py index f217be551c..74cf45e474 100644 --- a/client/ayon_core/plugins/publish/extract_otio_review.py +++ b/client/ayon_core/plugins/publish/extract_otio_review.py @@ -23,7 +23,11 @@ from ayon_core.lib import ( get_ffmpeg_tool_args, run_subprocess, ) -from ayon_core.pipeline import publish +from ayon_core.pipeline import ( + KnownPublishError, + editorial, + publish, +) class ExtractOTIOReview( @@ -97,8 +101,11 @@ class ExtractOTIOReview( # skip instance if no reviewable data available if ( - not isinstance(otio_review_clips[0], otio.schema.Clip) - and len(otio_review_clips) == 1 + len(otio_review_clips) == 1 + and ( + not isinstance(otio_review_clips[0], otio.schema.Clip) + or otio_review_clips[0].media_reference.is_missing_reference + ) ): self.log.warning( "Instance `{}` has nothing to process".format(instance)) @@ -248,7 +255,7 @@ class ExtractOTIOReview( # Single video way. # Extraction via FFmpeg. - else: + elif hasattr(media_ref, "target_url"): path = media_ref.target_url # Set extract range from 0 (FFmpeg ignores # embedded timecode). @@ -370,6 +377,13 @@ class ExtractOTIOReview( avl_start = avl_range.start_time + # Avoid rounding issue on media available range. + if start.almost_equal( + avl_start, + editorial.OTIO_EPSILON + ): + avl_start = start + # An additional gap is required before the available # range to conform source start point and head handles. if start < avl_start: @@ -388,6 +402,14 @@ class ExtractOTIOReview( # (media duration is shorter then clip requirement). end_point = start + duration avl_end_point = avl_range.end_time_exclusive() + + # Avoid rounding issue on media available range. + if end_point.almost_equal( + avl_end_point, + editorial.OTIO_EPSILON + ): + avl_end_point = end_point + if end_point > avl_end_point: gap_duration = end_point - avl_end_point duration -= gap_duration @@ -444,7 +466,7 @@ class ExtractOTIOReview( command = get_ffmpeg_tool_args("ffmpeg") input_extension = None - if sequence: + if sequence is not None: input_dir, collection, sequence_fps = sequence in_frame_start = min(collection.indexes) @@ -478,7 +500,7 @@ class ExtractOTIOReview( "-i", input_path ]) - elif video: + elif video is not None: video_path, otio_range = video frame_start = otio_range.start_time.value input_fps = otio_range.start_time.rate @@ -496,7 +518,7 @@ class ExtractOTIOReview( "-i", video_path ]) - elif gap: + elif gap is not None: sec_duration = frames_to_seconds(gap, self.actual_fps) # form command for rendering gap files @@ -510,6 +532,9 @@ class ExtractOTIOReview( "-tune", "stillimage" ]) + else: + raise KnownPublishError("Sequence, video or gap is required.") + if video or sequence: command.extend([ "-vf", f"scale={self.to_width}:{self.to_height}:flags=lanczos", From 1ef49e4d08f157860f1b673b5f16683cdf1f7e5b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 29 Jul 2025 15:37:37 +0200 Subject: [PATCH 249/595] fix 'is_checkbox_enabled' --- client/ayon_core/tools/publisher/widgets/list_view_widgets.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index 4dc7bf1322..f0fb5dcf82 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -196,7 +196,7 @@ class InstanceListItemWidget(QtWidgets.QWidget): def is_checkbox_enabled(self) -> bool: """Checkbox can be changed by user.""" return ( - self._parent_is_active + self._used_parent_active() and not self._is_mandatory ) @@ -248,7 +248,7 @@ class InstanceListItemWidget(QtWidgets.QWidget): def is_parent_active(self) -> bool: return self._parent_is_active - def _used_parent_active(self): + def _used_parent_active(self) -> bool: parent_enabled = True if self._parent_flags & ParentFlags.share_active: parent_enabled = self._parent_is_active From 7df97e5503c66d766961e841092a820d032c667f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 29 Jul 2025 15:39:55 +0200 Subject: [PATCH 250/595] base of card widget implementation --- .../publisher/widgets/card_view_widgets.py | 180 ++++++++++++++---- 1 file changed, 148 insertions(+), 32 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py index 8a4eddf058..1a2855888a 100644 --- a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py @@ -19,6 +19,7 @@ Only one item can be selected at a time. └──────────────────────┘ ``` """ +from __future__ import annotations import re import collections @@ -26,11 +27,13 @@ from typing import Dict from qtpy import QtWidgets, QtCore -from ayon_core.tools.utils import NiceCheckbox +from ayon_core.pipeline.create import ( + InstanceContextInfo, + ParentFlags, +) -from ayon_core.tools.utils import BaseClickableFrame +from ayon_core.tools.utils import BaseClickableFrame, NiceCheckbox from ayon_core.tools.utils.lib import html_escape - from ayon_core.tools.publisher.abstract import AbstractPublisherFrontend from ayon_core.tools.publisher.constants import ( CONTEXT_ID, @@ -38,7 +41,9 @@ from ayon_core.tools.publisher.constants import ( CONTEXT_GROUP, CONVERTOR_ITEM_GROUP, ) - +from ayon_core.tools.publisher.models.create import ( + InstanceItem, +) from .widgets import ( AbstractInstanceView, ContextWarningLabel, @@ -219,7 +224,11 @@ class InstanceGroupWidget(BaseGroupWidget): self._group_icons = group_icons def update_instance_values( - self, context_info_by_id, instance_items_by_id, instance_ids + self, + context_info_by_id, + instance_items_by_id, + instance_ids, + parent_is_active_by_id, ): """Trigger update on instance widgets.""" @@ -228,17 +237,24 @@ class InstanceGroupWidget(BaseGroupWidget): continue widget.update_instance( instance_items_by_id[instance_id], - context_info_by_id[instance_id] + context_info_by_id[instance_id], + parent_is_active_by_id[instance_id], ) - def update_instances(self, instances, context_info_by_id): + def update_instances( + self, + instances: list[InstanceItem], + context_info_by_id: dict[str, InstanceContextInfo], + parent_active_by_id: dict[str, bool] + ): """Update instances for the group. Args: instances (list[InstanceItem]): List of instances in CreateContext. - context_info_by_id (Dict[str, InstanceContextInfo]): Instance + context_info_by_id (dict[str, InstanceContextInfo]): Instance context info by instance id. + parent_active_by_id (dict[str, bool]): Instance has active parent. """ # Store instances by id and by product name @@ -260,13 +276,20 @@ class InstanceGroupWidget(BaseGroupWidget): for product_names in sorted_product_names: for instance in instances_by_product_name[product_names]: context_info = context_info_by_id[instance.id] + parent_is_active = parent_active_by_id[instance.id] if instance.id in self._widgets_by_id: widget = self._widgets_by_id[instance.id] - widget.update_instance(instance, context_info) + widget.update_instance( + instance, context_info, parent_is_active + ) else: group_icon = self._group_icons[instance.creator_identifier] widget = InstanceCardWidget( - instance, context_info, group_icon, self + instance, + context_info, + parent_is_active, + group_icon, + self ) widget.selected.connect(self._on_widget_selection) widget.active_changed.connect(self._on_active_changed) @@ -406,14 +429,23 @@ class InstanceCardWidget(CardWidget): active_changed = QtCore.Signal(str, bool) - def __init__(self, instance, context_info, group_icon, parent): + def __init__( + self, + instance, + context_info, + parent_is_active: bool, + group_icon, + parent: BaseGroupWidget, + ): super().__init__(parent) + self.instance = instance + self._id = instance.id self._group_identifier = instance.group_label self._group_icon = group_icon - - self.instance = instance + self._parent_is_active = parent_is_active + self._toggle_is_enabled = True self._last_product_name = None self._last_variant = None @@ -467,28 +499,29 @@ class InstanceCardWidget(CardWidget): self._active_checkbox = active_checkbox self._expand_btn = expand_btn - self._update_instance_values(context_info) + self._update_instance_values(context_info, parent_is_active) def set_active_toggle_enabled(self, enabled): - self._active_checkbox.setEnabled(enabled) + if self._toggle_is_enabled is enabled: + return + self._toggle_is_enabled = enabled + self._update_checkbox_state() @property def is_active(self): return self._active_checkbox.isChecked() - def _set_active(self, new_value): - """Set instance as active.""" - checkbox_value = self._active_checkbox.isChecked() - if checkbox_value != new_value: - self._active_checkbox.setChecked(new_value) + def is_checkbox_enabled(self) -> bool: + """Checkbox can be changed by user.""" + return ( + self._used_parent_active() + and not self.instance.is_mandatory + ) - def _set_is_mandatory(self, is_mandatory: bool) -> None: - self._active_checkbox.setVisible(not is_mandatory) - - def update_instance(self, instance, context_info): + def update_instance(self, instance, context_info, parent_is_active): """Update instance object and update UI.""" self.instance = instance - self._update_instance_values(context_info) + self._update_instance_values(context_info, parent_is_active) def _validate_context(self, context_info): valid = context_info.is_valid @@ -499,6 +532,9 @@ class InstanceCardWidget(CardWidget): variant = self.instance.variant product_name = self.instance.product_name label = self.instance.label + + parent_is_enabled = self._used_parent_active() + self._label_widget.setEnabled(parent_is_enabled) if ( variant == self._last_variant and product_name == self._last_product_name @@ -524,13 +560,36 @@ class InstanceCardWidget(CardWidget): QtCore.Qt.NoTextInteraction ) - def _update_instance_values(self, context_info): + def _update_instance_values(self, context_info, parent_is_active): """Update instance data""" + self._parent_is_active = parent_is_active self._update_product_name() - self._set_active(self.instance.is_active) - self._set_is_mandatory(self.instance.is_mandatory) + self._update_checkbox_state() self._validate_context(context_info) + def _update_checkbox_state(self): + parent_is_enabled = self._used_parent_active() + self._active_checkbox.setEnabled( + self._toggle_is_enabled + and not self.instance.is_mandatory + and parent_is_enabled + ) + # Hide checkbox for mandatory instances + self._active_checkbox.setVisible(not self.instance.is_mandatory) + + # Visually disable instance if parent is disabled + checked = parent_is_enabled and self.instance.is_active + if checked is not self._active_checkbox.isChecked(): + self._active_checkbox.blockSignals(True) + self._active_checkbox.setChecked(checked) + self._active_checkbox.blockSignals(False) + + def _used_parent_active(self) -> bool: + parent_enabled = True + if self.instance.parent_flags & ParentFlags.share_active: + parent_enabled = self._parent_is_active + return parent_enabled + def _set_expanded(self, expanded=None): if expanded is None: expanded = not self.detail_widget.isVisible() @@ -601,6 +660,8 @@ class InstanceCardView(AbstractInstanceView): self._widgets_by_group: Dict[str, InstanceGroupWidget] = {} self._ordered_groups = [] + self._instance_ids_by_parent_id = collections.defaultdict(set) + self._explicitly_selected_instance_ids = [] self._explicitly_selected_groups = [] @@ -705,12 +766,43 @@ class InstanceCardView(AbstractInstanceView): # Prepare instances by group and identifiers by group instances_by_group = collections.defaultdict(list) identifiers_by_group = collections.defaultdict(set) - for instance in self._controller.get_instance_items(): + instances_by_id = {} + instance_ids_by_parent_id = collections.defaultdict(set) + instance_items = self._controller.get_instance_items() + for instance in instance_items: group_name = instance.group_label instances_by_group[group_name].append(instance) identifiers_by_group[group_name].add( instance.creator_identifier ) + instances_by_id[instance.id] = instance + instance_ids_by_parent_id[instance.parent_instance_id].add( + instance.id + ) + + parent_active_by_id = { + instance_id: False + for instance_id in instances_by_id + } + _queue = collections.deque() + _queue.append((None, True)) + while _queue: + parent_id, parent_is_active = _queue.popleft() + for instance_id in instance_ids_by_parent_id[parent_id]: + instance_item = instances_by_id[instance_id] + is_active = instance_item.is_active + if ( + not parent_is_active + and instance_item.parent_flags & ParentFlags.share_active + ): + is_active = False + + parent_active_by_id[instance_id] = parent_is_active + _queue.append( + (instance_id, is_active) + ) + + self._instance_ids_by_parent_id = instance_ids_by_parent_id # Remove groups that were not found in apassed instances for group_name in tuple(self._widgets_by_group.keys()): @@ -755,7 +847,9 @@ class InstanceCardView(AbstractInstanceView): widget_idx += 1 group_widget.update_instances( - instances_by_group[group_name], context_info_by_id + instances_by_group[group_name], + context_info_by_id, + parent_active_by_id ) group_widget.set_active_toggle_enabled( self._active_toggle_enabled @@ -763,7 +857,7 @@ class InstanceCardView(AbstractInstanceView): self._update_ordered_group_names() - def has_items(self): + def has_items(self) -> bool: if self._convertor_items_group is not None: return True if self._widgets_by_group: @@ -828,9 +922,31 @@ class InstanceCardView(AbstractInstanceView): instance_items_by_id = self._controller.get_instance_items_by_id( instance_ids ) + instance_ids = set(instance_items_by_id) + + parent_is_active_by_id = { + instance_id: False + for instance_id in instance_ids + } + + discarted_ids = set() + _queue = collections.deque() + _queue.append((None, True)) + while _queue: + parent_id, parent_is_active = _queue.pop() + for instance_id in self._instance_ids_by_parent_id[parent_id]: + if instance_id in instance_ids: + instance_ids.discard(instance_id) + discarted_ids.add(instance_id) + # TODO there is no way how to get current state + parent_is_active_by_id[instance_id] = parent_is_active + for widget in self._widgets_by_group.values(): widget.update_instance_values( - context_info_by_id, instance_items_by_id, instance_ids + context_info_by_id, + instance_items_by_id, + instance_ids, + parent_is_active_by_id, ) def _on_active_changed(self, group_name, instance_id, value): From 74ad2e2c7ed451807934f9e640e1f2be2aab350c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 29 Jul 2025 17:39:54 +0200 Subject: [PATCH 251/595] add settings category to CollectAnatomyInstanceData --- .../ayon_core/plugins/publish/collect_anatomy_instance_data.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/ayon_core/plugins/publish/collect_anatomy_instance_data.py b/client/ayon_core/plugins/publish/collect_anatomy_instance_data.py index 2fcf562dd0..2cb2297bf7 100644 --- a/client/ayon_core/plugins/publish/collect_anatomy_instance_data.py +++ b/client/ayon_core/plugins/publish/collect_anatomy_instance_data.py @@ -46,6 +46,8 @@ class CollectAnatomyInstanceData(pyblish.api.ContextPlugin): order = pyblish.api.CollectorOrder + 0.49 label = "Collect Anatomy Instance data" + settings_category = "core" + follow_workfile_version = False def process(self, context): From 06dbaf2d635d42ad9ba82701593b37a453a5f6e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Tue, 29 Jul 2025 18:01:34 +0200 Subject: [PATCH 252/595] :recycle: add link types --- .../workfile/workfile_template_builder.py | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/workfile_template_builder.py b/client/ayon_core/pipeline/workfile/workfile_template_builder.py index bfa192d834..6b82e3b04d 100644 --- a/client/ayon_core/pipeline/workfile/workfile_template_builder.py +++ b/client/ayon_core/pipeline/workfile/workfile_template_builder.py @@ -204,7 +204,9 @@ class AbstractTemplateBuilder(ABC): @property def linked_folder_entities(self): if self._linked_folder_entities is _NOT_SET: - self._linked_folder_entities = self._get_linked_folder_entities() + self._linked_folder_entities = self._get_linked_folder_entities( + link_type="template" + ) return self._linked_folder_entities @property @@ -307,14 +309,14 @@ class AbstractTemplateBuilder(ABC): self._loaders_by_name = get_loaders_by_name() return self._loaders_by_name - def _get_linked_folder_entities(self): + def _get_linked_folder_entities(self, link_type: str = "template"): project_name = self.project_name folder_entity = self.current_folder_entity if not folder_entity: return [] links = get_folder_links( project_name, - folder_entity["id"], link_types=["template"], link_direction="in" + folder_entity["id"], link_types=[link_type], link_direction="in" ) linked_folder_ids = { link["entityId"] @@ -1433,6 +1435,14 @@ class PlaceholderLoadMixin(object): {"label": "Linked folders", "value": "linked_folders"}, {"label": "All folders", "value": "all_folders"}, ] + + link_types = ayon_api.get_link_types(self.builder.project_name) + + link_types_enum_item = [ + {"label": link_type["name"], "value": link_type["linkType"]} + for link_type in link_types + + ] build_type_label = "Folder Builder Type" build_type_help = ( "Folder Builder Type\n" @@ -1461,6 +1471,17 @@ class PlaceholderLoadMixin(object): items=builder_type_enum_items, tooltip=build_type_help ), + attribute_definitions.EnumDef( + "link_type", + label="Link Type", + default="template", + items=link_types_enum_item, + tooltip=( + "Link Type\n" + "\nDefines what type of link will be used to" + " link the asset to the current folder." + ) + ), attribute_definitions.EnumDef( "product_type", label="Product type", From d8392a2133d4196c3985357feb6fd4344084f954 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 29 Jul 2025 18:07:17 +0200 Subject: [PATCH 253/595] fix possible issue with missing instance data --- .../publisher/widgets/list_view_widgets.py | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index f0fb5dcf82..9e3113001b 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -1022,6 +1022,7 @@ class InstanceListView(AbstractInstanceView): instance_ids ) instance_ids = set(instance_items_by_id) + available_ids = set(instance_ids) group_items = list(self._group_items.values()) if self._missing_parent_item is not None: @@ -1050,17 +1051,22 @@ class InstanceListView(AbstractInstanceView): # Add children ids to 'instance_ids' to traverse them too add_children = False if instance_id in instance_ids: - instance_ids.discard(instance_id) - discarted_ids.add(instance_id) # Parent active state changed -> traverse children too add_children = ( parent_active is not widget.is_parent_active() ) - widget.update_instance( - instance_items_by_id[instance_id], - context_info_by_id[instance_id], - parent_active, - ) + if instance_id in available_ids: + available_ids.discard(instance_id) + widget.update_instance( + instance_items_by_id[instance_id], + context_info_by_id[instance_id], + parent_active, + ) + else: + widget.set_active(parent_active) + + instance_ids.discard(instance_id) + discarted_ids.add(instance_id) if not child.hasChildren(): continue From 6bc3e5130e0ded5fbc0986770ce9f8e72a5afdf2 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 29 Jul 2025 18:19:41 +0200 Subject: [PATCH 254/595] reworked card view for easier maintanance of widget updates --- .../publisher/widgets/card_view_widgets.py | 644 +++++++++--------- 1 file changed, 326 insertions(+), 318 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py index 1a2855888a..238f270f1f 100644 --- a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py @@ -23,7 +23,7 @@ from __future__ import annotations import re import collections -from typing import Dict +from typing import Optional from qtpy import QtWidgets, QtCore @@ -87,7 +87,6 @@ class BaseGroupWidget(QtWidgets.QWidget): self._group = group_name self._widgets_by_id = {} - self._ordered_item_ids = [] self._label_widget = label_widget self._content_layout = layout @@ -102,48 +101,25 @@ class BaseGroupWidget(QtWidgets.QWidget): return self._group - def get_widget_by_item_id(self, item_id): - """Get instance widget by its id.""" + def set_widgets( + self, + widgets_by_id: dict[str, QtWidgets.QWidget], + ordered_ids: list[str], + ) -> None: + self._remove_all_except(set(self._widgets_by_id)) + idx = 1 + for item_id in ordered_ids: + widget = widgets_by_id[item_id] + self._content_layout.insertWidget(idx, widget) + self._widgets_by_id[item_id] = widget + idx += 1 - return self._widgets_by_id.get(item_id) - - def get_selected_item_ids(self): - """Selected instance ids. - - Returns: - Set[str]: Instance ids that are selected. - """ - - return { - instance_id - for instance_id, widget in self._widgets_by_id.items() - if widget.is_selected - } - - def get_selected_widgets(self): - """Access to widgets marked as selected. - - Returns: - List[InstanceCardWidget]: Instance widgets that are selected. - """ - - return [ - widget - for instance_id, widget in self._widgets_by_id.items() - if widget.is_selected - ] - - def get_ordered_widgets(self): - """Get instance ids in order as are shown in ui. - - Returns: - List[str]: Instance ids. - """ - - return [ - self._widgets_by_id[instance_id] - for instance_id in self._ordered_item_ids - ] + def take_widgets(self, widget_ids: set[str]): + for widget_id in widget_ids: + widget = self._widgets_by_id.pop(widget_id) + index = self._content_layout.indexOf(widget) + if index >= 0: + self._content_layout.takeAt(index) def _remove_all_except(self, item_ids): item_ids = set(item_ids) @@ -160,149 +136,6 @@ class BaseGroupWidget(QtWidgets.QWidget): self._content_layout.removeWidget(widget) widget.deleteLater() - def _update_ordered_item_ids(self): - ordered_item_ids = [] - for idx in range(self._content_layout.count()): - if idx > 0: - item = self._content_layout.itemAt(idx) - widget = item.widget() - if widget is not None: - ordered_item_ids.append(widget.id) - - self._ordered_item_ids = ordered_item_ids - - def _on_widget_selection(self, instance_id, group_id, selection_type): - self.selected.emit(instance_id, group_id, selection_type) - - def set_active_toggle_enabled(self, enabled): - for widget in self._widgets_by_id.values(): - if isinstance(widget, InstanceCardWidget): - widget.set_active_toggle_enabled(enabled) - - -class ConvertorItemsGroupWidget(BaseGroupWidget): - def update_items(self, items_by_id): - items_by_label = collections.defaultdict(list) - for item in items_by_id.values(): - items_by_label[item.label].append(item) - - # Remove instance widgets that are not in passed instances - self._remove_all_except(items_by_id.keys()) - - # Sort instances by product name - sorted_labels = list(sorted(items_by_label.keys())) - - # Add new instances to widget - widget_idx = 1 - for label in sorted_labels: - for item in items_by_label[label]: - if item.id in self._widgets_by_id: - widget = self._widgets_by_id[item.id] - widget.update_item(item) - else: - widget = ConvertorItemCardWidget(item, self) - widget.selected.connect(self._on_widget_selection) - widget.double_clicked.connect(self.double_clicked) - self._widgets_by_id[item.id] = widget - self._content_layout.insertWidget(widget_idx, widget) - widget_idx += 1 - - self._update_ordered_item_ids() - - -class InstanceGroupWidget(BaseGroupWidget): - """Widget wrapping instances under group.""" - - active_changed = QtCore.Signal(str, str, bool) - - def __init__(self, group_icons, *args, **kwargs): - super().__init__(*args, **kwargs) - - self._group_icons = group_icons - - def update_icons(self, group_icons): - self._group_icons = group_icons - - def update_instance_values( - self, - context_info_by_id, - instance_items_by_id, - instance_ids, - parent_is_active_by_id, - ): - """Trigger update on instance widgets.""" - - for instance_id, widget in self._widgets_by_id.items(): - if instance_ids is not None and instance_id not in instance_ids: - continue - widget.update_instance( - instance_items_by_id[instance_id], - context_info_by_id[instance_id], - parent_is_active_by_id[instance_id], - ) - - def update_instances( - self, - instances: list[InstanceItem], - context_info_by_id: dict[str, InstanceContextInfo], - parent_active_by_id: dict[str, bool] - ): - """Update instances for the group. - - Args: - instances (list[InstanceItem]): List of instances in - CreateContext. - context_info_by_id (dict[str, InstanceContextInfo]): Instance - context info by instance id. - parent_active_by_id (dict[str, bool]): Instance has active parent. - - """ - # Store instances by id and by product name - instances_by_id = {} - instances_by_product_name = collections.defaultdict(list) - for instance in instances: - instances_by_id[instance.id] = instance - product_name = instance.product_name - instances_by_product_name[product_name].append(instance) - - # Remove instance widgets that are not in passed instances - self._remove_all_except(instances_by_id.keys()) - - # Sort instances by product name - sorted_product_names = list(sorted(instances_by_product_name.keys())) - - # Add new instances to widget - widget_idx = 1 - for product_names in sorted_product_names: - for instance in instances_by_product_name[product_names]: - context_info = context_info_by_id[instance.id] - parent_is_active = parent_active_by_id[instance.id] - if instance.id in self._widgets_by_id: - widget = self._widgets_by_id[instance.id] - widget.update_instance( - instance, context_info, parent_is_active - ) - else: - group_icon = self._group_icons[instance.creator_identifier] - widget = InstanceCardWidget( - instance, - context_info, - parent_is_active, - group_icon, - self - ) - widget.selected.connect(self._on_widget_selection) - widget.active_changed.connect(self._on_active_changed) - widget.double_clicked.connect(self.double_clicked) - self._widgets_by_id[instance.id] = widget - self._content_layout.insertWidget(widget_idx, widget) - widget_idx += 1 - - self._update_ordered_item_ids() - - def _on_active_changed(self, instance_id, value): - self.active_changed.emit(self.group_name, instance_id, value) - class CardWidget(BaseClickableFrame): """Clickable card used as bigger button.""" @@ -423,6 +256,10 @@ class ConvertorItemCardWidget(CardWidget): self._icon_widget = icon_widget self._label_widget = label_widget + def update_item(self, item): + self._id = item.id + self.identifier = item.identifier + class InstanceCardWidget(CardWidget): """Card widget representing instance.""" @@ -433,7 +270,7 @@ class InstanceCardWidget(CardWidget): self, instance, context_info, - parent_is_active: bool, + is_parent_active: bool, group_icon, parent: BaseGroupWidget, ): @@ -444,7 +281,7 @@ class InstanceCardWidget(CardWidget): self._id = instance.id self._group_identifier = instance.group_label self._group_icon = group_icon - self._parent_is_active = parent_is_active + self._is_parent_active = is_parent_active self._toggle_is_enabled = True self._last_product_name = None @@ -499,18 +336,26 @@ class InstanceCardWidget(CardWidget): self._active_checkbox = active_checkbox self._expand_btn = expand_btn - self._update_instance_values(context_info, parent_is_active) + self._update_instance_values(context_info, is_parent_active) - def set_active_toggle_enabled(self, enabled): + def set_active_toggle_enabled(self, enabled: bool) -> None: if self._toggle_is_enabled is enabled: return self._toggle_is_enabled = enabled self._update_checkbox_state() - @property - def is_active(self): + def is_active(self) -> bool: return self._active_checkbox.isChecked() + def is_parent_active(self) -> bool: + return self._is_parent_active + + def set_parent_active(self, is_active: bool) -> None: + if self._is_parent_active is is_active: + return + self._is_parent_active = is_active + self._update_checkbox_state() + def is_checkbox_enabled(self) -> bool: """Checkbox can be changed by user.""" return ( @@ -518,10 +363,10 @@ class InstanceCardWidget(CardWidget): and not self.instance.is_mandatory ) - def update_instance(self, instance, context_info, parent_is_active): + def update_instance(self, instance, context_info, is_parent_active): """Update instance object and update UI.""" self.instance = instance - self._update_instance_values(context_info, parent_is_active) + self._update_instance_values(context_info, is_parent_active) def _validate_context(self, context_info): valid = context_info.is_valid @@ -560,9 +405,9 @@ class InstanceCardWidget(CardWidget): QtCore.Qt.NoTextInteraction ) - def _update_instance_values(self, context_info, parent_is_active): + def _update_instance_values(self, context_info, is_parent_active): """Update instance data""" - self._parent_is_active = parent_is_active + self._is_parent_active = is_parent_active self._update_product_name() self._update_checkbox_state() self._validate_context(context_info) @@ -587,7 +432,7 @@ class InstanceCardWidget(CardWidget): def _used_parent_active(self) -> bool: parent_enabled = True if self.instance.parent_flags & ParentFlags.share_active: - parent_enabled = self._parent_is_active + parent_enabled = self._is_parent_active return parent_enabled def _set_expanded(self, expanded=None): @@ -654,11 +499,20 @@ class InstanceCardView(AbstractInstanceView): self._content_layout = content_layout self._content_widget = content_widget - self._context_widget = None - self._convertor_items_group = None - self._active_toggle_enabled = True - self._widgets_by_group: Dict[str, InstanceGroupWidget] = {} + self._active_toggle_enabled: bool = True + self._convertors_group: Optional[BaseGroupWidget] = None + self._convertor_widgets_by_id: dict[str, ConvertorItemCardWidget] = {} + self._convertor_ids: list[str] = [] + + self._group_name_by_instance_id: dict[str, str] = {} + self._instance_ids_by_group_name: dict[str, list[str]] = ( + collections.defaultdict(list) + ) self._ordered_groups = [] + self._group_icons = {} + self._context_widget: Optional[ContextCardWidget] = None + self._widgets_by_id: dict[str, InstanceCardWidget] = {} + self._widgets_by_group: dict[str, BaseGroupWidget] = {} self._instance_ids_by_parent_id = collections.defaultdict(set) @@ -694,7 +548,7 @@ class InstanceCardView(AbstractInstanceView): continue instance_id = widget.id - is_active = widget.is_active + is_active = widget.is_active() if value == -1: active_state_by_id[instance_id] = not is_active continue @@ -731,12 +585,17 @@ class InstanceCardView(AbstractInstanceView): ): output.append(self._context_widget) - if self._convertor_items_group is not None: - output.extend(self._convertor_items_group.get_selected_widgets()) + output.extend( + widget + for widget in self._convertor_widgets_by_id.values() + if widget.is_selected + ) - for group_widget in self._widgets_by_group.values(): - for widget in group_widget.get_selected_widgets(): - output.append(widget) + output.extend( + widget + for widget in self._widgets_by_id.values() + if widget.is_selected + ) return output def _get_selected_instance_ids(self): @@ -747,11 +606,17 @@ class InstanceCardView(AbstractInstanceView): ): output.append(CONTEXT_ID) - if self._convertor_items_group is not None: - output.extend(self._convertor_items_group.get_selected_item_ids()) + output.extend( + conv_id + for conv_id, widget in self._widgets_by_id.items() + if widget.is_selected + ) - for group_widget in self._widgets_by_group.values(): - output.extend(group_widget.get_selected_item_ids()) + output.extend( + widget.id + for instance_id, widget in self._widgets_by_id.items() + if widget.is_selected + ) return output def refresh(self): @@ -759,13 +624,14 @@ class InstanceCardView(AbstractInstanceView): self._make_sure_context_widget_exists() - self._update_convertor_items_group() + self._update_convertors_group() context_info_by_id = self._controller.get_instances_context_info() # Prepare instances by group and identifiers by group instances_by_group = collections.defaultdict(list) identifiers_by_group = collections.defaultdict(set) + identifiers: set[str] = set() instances_by_id = {} instance_ids_by_parent_id = collections.defaultdict(set) instance_items = self._controller.get_instance_items() @@ -775,6 +641,7 @@ class InstanceCardView(AbstractInstanceView): identifiers_by_group[group_name].add( instance.creator_identifier ) + identifiers.add(instance.creator_identifier) instances_by_id[instance.id] = instance instance_ids_by_parent_id[instance.parent_instance_id].add( instance.id @@ -787,28 +654,67 @@ class InstanceCardView(AbstractInstanceView): _queue = collections.deque() _queue.append((None, True)) while _queue: - parent_id, parent_is_active = _queue.popleft() + parent_id, is_parent_active = _queue.popleft() for instance_id in instance_ids_by_parent_id[parent_id]: instance_item = instances_by_id[instance_id] is_active = instance_item.is_active if ( - not parent_is_active + not is_parent_active and instance_item.parent_flags & ParentFlags.share_active ): is_active = False - parent_active_by_id[instance_id] = parent_is_active + parent_active_by_id[instance_id] = is_parent_active _queue.append( (instance_id, is_active) ) - self._instance_ids_by_parent_id = instance_ids_by_parent_id + # Remove groups that were not found in passed instances + groups_to_remove = ( + set(self._widgets_by_group) - set(instances_by_group) + ) - # Remove groups that were not found in apassed instances - for group_name in tuple(self._widgets_by_group.keys()): - if group_name in instances_by_group: - continue + # Sort groups + sorted_group_names = list(sorted(instances_by_group.keys())) + # Keep track of widget indexes + # - we start with 1 because Context item as at the top + widget_idx = 1 + if self._convertors_group is not None: + widget_idx += 1 + + group_by_instance_id = {} + instance_ids_by_group_name = collections.defaultdict(list) + group_icons = { + identifier: self._controller.get_creator_icon(identifier) + for identifier in identifiers + } + for group_name in sorted_group_names: + if group_name not in self._widgets_by_group: + group_widget = BaseGroupWidget( + group_name, self._content_widget + ) + group_widget.double_clicked.connect(self.double_clicked) + self._content_layout.insertWidget(widget_idx, group_widget) + self._widgets_by_group[group_name] = group_widget + + widget_idx += 1 + + instances = instances_by_group[group_name] + for instance in instances: + group_by_instance_id[instance.id] = group_name + instance_ids_by_group_name[group_name].append(instance.id) + + self._update_instances( + group_name, + instances, + context_info_by_id, + parent_active_by_id, + group_icons, + ) + + # Remove empty groups + for group_name in groups_to_remove: widget = self._widgets_by_group.pop(group_name) widget.setVisible(False) self._content_layout.removeWidget(widget) @@ -817,63 +723,85 @@ class InstanceCardView(AbstractInstanceView): if group_name in self._explicitly_selected_groups: self._explicitly_selected_groups.remove(group_name) - # Sort groups - sorted_group_names = list(sorted(instances_by_group.keys())) - - # Keep track of widget indexes - # - we start with 1 because Context item as at the top - widget_idx = 1 - if self._convertor_items_group is not None: - widget_idx += 1 - - for group_name in sorted_group_names: - group_icons = { - identifier: self._controller.get_creator_icon(identifier) - for identifier in identifiers_by_group[group_name] - } - if group_name in self._widgets_by_group: - group_widget = self._widgets_by_group[group_name] - group_widget.update_icons(group_icons) - - else: - group_widget = InstanceGroupWidget( - group_icons, group_name, self._content_widget - ) - group_widget.active_changed.connect(self._on_active_changed) - group_widget.selected.connect(self._on_widget_selection) - group_widget.double_clicked.connect(self.double_clicked) - self._content_layout.insertWidget(widget_idx, group_widget) - self._widgets_by_group[group_name] = group_widget - - widget_idx += 1 - group_widget.update_instances( - instances_by_group[group_name], - context_info_by_id, - parent_active_by_id - ) - group_widget.set_active_toggle_enabled( - self._active_toggle_enabled - ) - - self._update_ordered_group_names() + self._instance_ids_by_parent_id = instance_ids_by_parent_id + self._group_name_by_instance_id = group_by_instance_id + self._instance_ids_by_group_name = instance_ids_by_group_name + self._ordered_groups = sorted_group_names def has_items(self) -> bool: - if self._convertor_items_group is not None: + if self._convertors_group is not None: return True - if self._widgets_by_group: + if self._widgets_by_id: return True return False - def _update_ordered_group_names(self): - ordered_group_names = [CONTEXT_GROUP] - for idx in range(self._content_layout.count()): - if idx > 0: - item = self._content_layout.itemAt(idx) - group_widget = item.widget() - if group_widget is not None: - ordered_group_names.append(group_widget.group_name) + def _update_instances( + self, + group_name: str, + instances: list[InstanceItem], + context_info_by_id: dict[str, InstanceContextInfo], + parent_active_by_id: dict[str, bool], + group_icons: dict[str, str], + ): + """Update instances for the group. - self._ordered_groups = ordered_group_names + Args: + instances (list[InstanceItem]): List of instances in + CreateContext. + context_info_by_id (dict[str, InstanceContextInfo]): Instance + context info by instance id. + parent_active_by_id (dict[str, bool]): Instance has active parent. + + """ + # Store instances by id and by product name + group_widget: BaseGroupWidget = self._widgets_by_group[group_name] + instances_by_id = {} + instances_by_product_name = collections.defaultdict(list) + for instance in instances: + instances_by_id[instance.id] = instance + product_name = instance.product_name + instances_by_product_name[product_name].append(instance) + + to_remove_ids = set( + self._instance_ids_by_group_name[group_name] + ) - set(instances_by_id) + group_widget.take_widgets(to_remove_ids) + + # Sort instances by product name + sorted_product_names = list(sorted(instances_by_product_name.keys())) + + # Add new instances to widget + ordered_ids = [] + widgets_by_id = {} + for product_names in sorted_product_names: + for instance in instances_by_product_name[product_names]: + context_info = context_info_by_id[instance.id] + is_parent_active = parent_active_by_id[instance.id] + if instance.id in self._widgets_by_id: + widget = self._widgets_by_id[instance.id] + widget.update_instance( + instance, context_info, is_parent_active + ) + else: + group_icon = group_icons[instance.creator_identifier] + widget = InstanceCardWidget( + instance, + context_info, + is_parent_active, + group_icon, + group_widget + ) + widget.selected.connect(self._on_widget_selection) + widget.active_changed.connect(self._on_active_changed) + widget.double_clicked.connect(self.double_clicked) + self._widgets_by_id[instance.id] = widget + + ordered_ids.append(instance.id) + widgets_by_id[instance.id] = widget + + group_widget.set_widgets(widgets_by_id, ordered_ids) + + return ordered_ids def _make_sure_context_widget_exists(self): # Create context item if is not already existing @@ -891,28 +819,65 @@ class InstanceCardView(AbstractInstanceView): self.selection_changed.emit() self._content_layout.insertWidget(0, widget) - def _update_convertor_items_group(self): + def _update_convertors_group(self): convertor_items = self._controller.get_convertor_items() - if not convertor_items and self._convertor_items_group is None: + if not convertor_items and self._convertors_group is None: return + ids_to_remove = set(self._convertor_widgets_by_id) - set( + convertor_items + ) + if ids_to_remove: + self._convertors_group.take_widgets(ids_to_remove) + + for conv_id in ids_to_remove: + widget = self._convertor_widgets_by_id.pop(conv_id) + widget.setVisible(False) + widget.deleteLater() + if not convertor_items: - self._convertor_items_group.setVisible(False) - self._content_layout.removeWidget(self._convertor_items_group) - self._convertor_items_group.deleteLater() - self._convertor_items_group = None + self._convertors_group.setVisible(False) + self._content_layout.removeWidget(self._convertors_group) + self._convertors_group.deleteLater() + self._convertors_group = None + self._convertor_ids = [] + self._convertor_widgets_by_id = {} return - if self._convertor_items_group is None: - group_widget = ConvertorItemsGroupWidget( + if self._convertors_group is None: + group_widget = BaseGroupWidget( CONVERTOR_ITEM_GROUP, self._content_widget ) - group_widget.selected.connect(self._on_widget_selection) - group_widget.double_clicked.connect(self.double_clicked) self._content_layout.insertWidget(1, group_widget) - self._convertor_items_group = group_widget + self._convertors_group = group_widget - self._convertor_items_group.update_items(convertor_items) + # TODO create convertor widgets + items_by_label = collections.defaultdict(list) + for item in convertor_items.values(): + items_by_label[item.label].append(item) + + # Sort instances by product name + sorted_labels = list(sorted(items_by_label.keys())) + + # Add new instances to widget + convertor_ids: list[str] = [] + widgets_by_id: dict[str, ConvertorItemCardWidget] = {} + for label in sorted_labels: + for item in items_by_label[label]: + convertor_ids.append(item.id) + if item.id in self._convertor_widgets_by_id: + widget = self._convertor_widgets_by_id[item.id] + widget.update_item(item) + else: + widget = ConvertorItemCardWidget(item, self) + widget.selected.connect(self._on_widget_selection) + widget.double_clicked.connect(self.double_clicked) + self._convertor_widgets_by_id[item.id] = widget + widgets_by_id[item.id] = widget + + self._convertors_group.set_widgets(widgets_by_id, convertor_ids) + self._convertor_ids = convertor_ids + self._convertor_widgets_by_id = widgets_by_id def refresh_instance_states(self, instance_ids=None): """Trigger update of instances on group widgets.""" @@ -922,36 +887,57 @@ class InstanceCardView(AbstractInstanceView): instance_items_by_id = self._controller.get_instance_items_by_id( instance_ids ) - instance_ids = set(instance_items_by_id) + instance_ids: set[str] = set(instance_items_by_id) + available_ids: set[str] = set(instance_items_by_id) + discarted_ids: set[str] = set() - parent_is_active_by_id = { - instance_id: False - for instance_id in instance_ids - } - - discarted_ids = set() _queue = collections.deque() - _queue.append((None, True)) + _queue.append((set(self._instance_ids_by_parent_id[None]), True)) while _queue: - parent_id, parent_is_active = _queue.pop() - for instance_id in self._instance_ids_by_parent_id[parent_id]: + if not instance_ids: + break + + chilren_ids, is_parent_active = _queue.pop() + for instance_id in chilren_ids: + widget = self._widgets_by_id[instance_id] + add_children = False if instance_id in instance_ids: + add_children = ( + is_parent_active is not widget.is_parent_active() + ) + + if instance_id in available_ids: + available_ids.discard(instance_id) + widget.update_instance( + instance_items_by_id[instance_id], + context_info_by_id[instance_id], + is_parent_active, + ) + else: + # TODO implement 'set_parent_active' + widget.set_parent_active(is_parent_active) + instance_ids.discard(instance_id) discarted_ids.add(instance_id) - # TODO there is no way how to get current state - parent_is_active_by_id[instance_id] = parent_is_active - for widget in self._widgets_by_group.values(): - widget.update_instance_values( - context_info_by_id, - instance_items_by_id, - instance_ids, - parent_is_active_by_id, - ) + if not instance_ids: + break - def _on_active_changed(self, group_name, instance_id, value): - group_widget = self._widgets_by_group[group_name] - instance_widget = group_widget.get_widget_by_item_id(instance_id) + if not add_children: + continue + + children_ids = self._instance_ids_by_parent_id[instance_id] + children = { + child_id + for child_id in children_ids + if child_id not in discarted_ids + } + + if children: + _queue.append((children, widget.is_active())) + + def _on_active_changed(self, instance_id, value): + instance_widget = self._widgets_by_id[instance_id] active_state_by_id = {} if not instance_widget.is_selected: active_state_by_id[instance_id] = value @@ -973,10 +959,9 @@ class InstanceCardView(AbstractInstanceView): else: if group_name == CONVERTOR_ITEM_GROUP: - group_widget = self._convertor_items_group + new_widget = self._convertor_widgets_by_id[instance_id] else: - group_widget = self._widgets_by_group[group_name] - new_widget = group_widget.get_widget_by_item_id(instance_id) + new_widget = self._widgets_by_id[instance_id] if selection_type == SelectionTypes.clear: self._select_item_clear(instance_id, group_name, new_widget) @@ -1021,11 +1006,21 @@ class InstanceCardView(AbstractInstanceView): if instance_id == CONTEXT_ID: remove_group = True else: + has_selected_items = False if group_name == CONVERTOR_ITEM_GROUP: - group_widget = self._convertor_items_group + for widget in self._convertor_widgets_by_id.values(): + if widget.is_selected: + has_selected_items = True + break else: - group_widget = self._widgets_by_group[group_name] - if not group_widget.get_selected_widgets(): + group_ids = self._instance_ids_by_group_name[group_name] + for instance_id in group_ids: + widget = self._widgets_by_id[instance_id] + if widget.is_selected: + has_selected_items = True + break + + if not has_selected_items: remove_group = True if remove_group: @@ -1137,10 +1132,16 @@ class InstanceCardView(AbstractInstanceView): sorted_widgets = [self._context_widget] else: if name == CONVERTOR_ITEM_GROUP: - group_widget = self._convertor_items_group + sorted_widgets = [ + self._convertor_widgets_by_id[conv_id] + for conv_id in self._convertor_ids + ] else: - group_widget = self._widgets_by_group[name] - sorted_widgets = group_widget.get_ordered_widgets() + instance_ids = self._instance_ids_by_group_name[name] + sorted_widgets = [ + self._widgets_by_id[instance_id] + for instance_id in instance_ids + ] # Change selection based on explicit selection if start group # was not passed yet @@ -1298,12 +1299,19 @@ class InstanceCardView(AbstractInstanceView): is_convertor_group = group_name == CONVERTOR_ITEM_GROUP if is_convertor_group: - group_widget = self._convertor_items_group + sorted_widgets = [ + self._convertor_widgets_by_id[conv_id] + for conv_id in self._convertor_ids + ] else: - group_widget = self._widgets_by_group[group_name] + instance_ids = self._instance_ids_by_group_name[group_name] + sorted_widgets = [ + self._widgets_by_id[instance_id] + for instance_id in instance_ids + ] group_selected = False - for widget in group_widget.get_ordered_widgets(): + for widget in sorted_widgets: select = False if is_convertor_group: is_in = widget.identifier in s_convertor_identifiers @@ -1325,5 +1333,5 @@ class InstanceCardView(AbstractInstanceView): if self._active_toggle_enabled is enabled: return self._active_toggle_enabled = enabled - for group_widget in self._widgets_by_group.values(): - group_widget.set_active_toggle_enabled(enabled) + for widget in self._widgets_by_id.values(): + widget.set_active_toggle_enabled(enabled) From 067f218752aa605d1433a75dd54266fb07e8171a Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 29 Jul 2025 18:58:09 +0200 Subject: [PATCH 255/595] few enhancements --- .../tools/publisher/widgets/card_view_widgets.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py index 238f270f1f..e3e8a98ad5 100644 --- a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py @@ -705,7 +705,7 @@ class InstanceCardView(AbstractInstanceView): group_by_instance_id[instance.id] = group_name instance_ids_by_group_name[group_name].append(instance.id) - self._update_instances( + self._update_instance_widgets( group_name, instances, context_info_by_id, @@ -735,7 +735,7 @@ class InstanceCardView(AbstractInstanceView): return True return False - def _update_instances( + def _update_instance_widgets( self, group_name: str, instances: list[InstanceItem], @@ -905,7 +905,6 @@ class InstanceCardView(AbstractInstanceView): add_children = ( is_parent_active is not widget.is_parent_active() ) - if instance_id in available_ids: available_ids.discard(instance_id) widget.update_instance( @@ -914,15 +913,11 @@ class InstanceCardView(AbstractInstanceView): is_parent_active, ) else: - # TODO implement 'set_parent_active' widget.set_parent_active(is_parent_active) instance_ids.discard(instance_id) discarted_ids.add(instance_id) - if not instance_ids: - break - if not add_children: continue @@ -934,8 +929,12 @@ class InstanceCardView(AbstractInstanceView): } if children: + instance_ids |= children _queue.append((children, widget.is_active())) + if not instance_ids: + break + def _on_active_changed(self, instance_id, value): instance_widget = self._widgets_by_id[instance_id] active_state_by_id = {} From 744d36042c5d5ef570c98a474309d894b5f28f7b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 29 Jul 2025 18:59:45 +0200 Subject: [PATCH 256/595] remove parent active validation --- client/ayon_core/tools/publisher/widgets/list_view_widgets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index 9e3113001b..3440a91b6f 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -1144,7 +1144,7 @@ class InstanceListView(AbstractInstanceView): instance_id = child.data(INSTANCE_ID_ROLE) widget = self._widgets_by_id[instance_id] widget.set_parent_is_active(parent_active) - if parent_active and instance_id in instance_ids: + if instance_id in instance_ids: value = new_value if value is None: value = not widget.is_active() From d74435525bfcb17aebcba0dd5ce1834bdf327b91 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 29 Jul 2025 19:19:05 +0200 Subject: [PATCH 257/595] fix signal handling on update --- client/ayon_core/tools/publisher/widgets/list_view_widgets.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index 3440a91b6f..7d11746254 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -295,8 +295,7 @@ class InstanceListItemWidget(QtWidgets.QWidget): # Visually disable instance if parent is disabled checked = parent_enabled and self._instance_is_active - if checked is not self._active_checkbox.isChecked(): - self._active_checkbox.setChecked(checked) + self._set_checked(checked) def _on_active_change(self): self.active_changed.emit( From e6ae3fb84736b549b7a0e34097574385f513170e Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 29 Jul 2025 19:22:04 +0200 Subject: [PATCH 258/595] few minor fixes --- .../publisher/widgets/card_view_widgets.py | 43 +++++++++++++++---- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py index e3e8a98ad5..4f1327baaf 100644 --- a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py @@ -277,6 +277,7 @@ class InstanceCardWidget(CardWidget): super().__init__(parent) self.instance = instance + self._is_active = instance.is_active self._id = instance.id self._group_identifier = instance.group_label @@ -366,6 +367,7 @@ class InstanceCardWidget(CardWidget): def update_instance(self, instance, context_info, is_parent_active): """Update instance object and update UI.""" self.instance = instance + self._is_active = instance.is_active self._update_instance_values(context_info, is_parent_active) def _validate_context(self, context_info): @@ -378,8 +380,6 @@ class InstanceCardWidget(CardWidget): product_name = self.instance.product_name label = self.instance.label - parent_is_enabled = self._used_parent_active() - self._label_widget.setEnabled(parent_is_enabled) if ( variant == self._last_variant and product_name == self._last_product_name @@ -414,6 +414,7 @@ class InstanceCardWidget(CardWidget): def _update_checkbox_state(self): parent_is_enabled = self._used_parent_active() + self._label_widget.setEnabled(parent_is_enabled) self._active_checkbox.setEnabled( self._toggle_is_enabled and not self.instance.is_mandatory @@ -423,7 +424,7 @@ class InstanceCardWidget(CardWidget): self._active_checkbox.setVisible(not self.instance.is_mandatory) # Visually disable instance if parent is disabled - checked = parent_is_enabled and self.instance.is_active + checked = parent_is_enabled and self._is_active if checked is not self._active_checkbox.isChecked(): self._active_checkbox.blockSignals(True) self._active_checkbox.setChecked(checked) @@ -442,10 +443,10 @@ class InstanceCardWidget(CardWidget): def _on_active_change(self): new_value = self._active_checkbox.isChecked() - old_value = self.instance.is_active - if new_value == old_value: + old_value = self._is_active + if new_value is old_value: return - + self._is_active = new_value self.active_changed.emit(self._id, new_value) def _on_expend_clicked(self): @@ -742,7 +743,7 @@ class InstanceCardView(AbstractInstanceView): context_info_by_id: dict[str, InstanceContextInfo], parent_active_by_id: dict[str, bool], group_icons: dict[str, str], - ): + ) -> None: """Update instances for the group. Args: @@ -801,8 +802,6 @@ class InstanceCardView(AbstractInstanceView): group_widget.set_widgets(widgets_by_id, ordered_ids) - return ordered_ids - def _make_sure_context_widget_exists(self): # Create context item if is not already existing # - this must be as first thing to do as context item should be at the @@ -945,6 +944,32 @@ class InstanceCardView(AbstractInstanceView): if isinstance(widget, InstanceCardWidget): active_state_by_id[widget.id] = value + if not active_state_by_id: + return + + _queue = collections.deque() + _queue.append((set(self._instance_ids_by_parent_id[None]), True)) + instance_ids = set(active_state_by_id) + discarted_ids = set() + while _queue: + children, parent_active = _queue.popleft() + for instance_id in children: + widget = self._widgets_by_id[instance_id] + old_active = widget.is_active() + widget.set_parent_active(parent_active) + is_active = widget.is_active() + if old_active is not is_active: + active_state_by_id[instance_id] = is_active + + if instance_id in instance_ids: + instance_ids.discard(instance_id) + discarted_ids.add(instance_id) + + _queue.append(( + set(self._instance_ids_by_parent_id[instance_id]), + is_active + )) + self._controller.set_instances_active_state(active_state_by_id) def _on_widget_selection(self, instance_id, group_name, selection_type): From 1758576955a8af9b03a13e78baa0f15f2c29946a Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 30 Jul 2025 14:31:04 +0200 Subject: [PATCH 259/595] fix state change in cards view --- .../publisher/widgets/card_view_widgets.py | 149 ++++++++++-------- 1 file changed, 85 insertions(+), 64 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py index 4f1327baaf..1d2ef9b0d2 100644 --- a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py @@ -348,6 +348,13 @@ class InstanceCardWidget(CardWidget): def is_active(self) -> bool: return self._active_checkbox.isChecked() + def set_active(self, active: Optional[bool]) -> None: + if not self.is_checkbox_enabled(): + return + if active is None: + active = not self.is_active() + self._set_checked(active) + def is_parent_active(self) -> bool: return self._is_parent_active @@ -425,6 +432,9 @@ class InstanceCardWidget(CardWidget): # Visually disable instance if parent is disabled checked = parent_is_enabled and self._is_active + self._set_checked(checked) + + def _set_checked(self, checked: bool) -> None: if checked is not self._active_checkbox.isChecked(): self._active_checkbox.blockSignals(True) self._active_checkbox.setChecked(checked) @@ -538,42 +548,85 @@ class InstanceCardView(AbstractInstanceView): result.setWidth(width) return result - def _toggle_instances(self, value): - if not self._active_toggle_enabled: - return + def _toggle_instances( + self, + new_value: Optional[bool], + active_id: Optional[str] = None, + ) -> None: + instance_ids = { + widget.id + for widget in self._get_selected_instance_widgets() + if widget.is_selected + } + active_by_id = {} + if active_id and active_id not in instance_ids: + instance_ids = {active_id} - widgets = self._get_selected_widgets() - active_state_by_id = {} - for widget in widgets: - if not isinstance(widget, InstanceCardWidget): - continue + affected_ids = set(instance_ids) + _queue = collections.deque() + _queue.append((set(self._instance_ids_by_parent_id[None]), True)) + discarted_ids = set() + while _queue: + if not instance_ids: + break - instance_id = widget.id - is_active = widget.is_active() - if value == -1: - active_state_by_id[instance_id] = not is_active - continue + chilren_ids, is_parent_active = _queue.pop() + for instance_id in chilren_ids: + widget = self._widgets_by_id[instance_id] + add_children = False + if instance_id in affected_ids: + affected_ids.discard(instance_id) + instance_ids.discard(instance_id) + discarted_ids.add(instance_id) + add_children = True + value = new_value + if value is None: + value = not widget.is_active() + old_value = widget.is_active() + widget.set_active(value) + if old_value is not widget.is_active(): + active_by_id[instance_id] = value - _value = bool(value) - if is_active is not _value: - active_state_by_id[instance_id] = _value + if ( + instance_id in instance_ids + and is_parent_active is not widget.is_parent_active() + ): + add_children = True + widget.set_parent_active(is_parent_active) - if not active_state_by_id: - return + instance_ids.discard(instance_id) + discarted_ids.add(instance_id) - self._controller.set_instances_active_state(active_state_by_id) + if not add_children: + continue + + children_ids = self._instance_ids_by_parent_id[instance_id] + children = { + child_id + for child_id in children_ids + if child_id not in discarted_ids + } + + if children: + instance_ids |= children + _queue.append((children, widget.is_active())) + + if not instance_ids: + break + + self._controller.set_instances_active_state(active_by_id) def keyPressEvent(self, event): if event.key() == QtCore.Qt.Key_Space: - self._toggle_instances(-1) + self._toggle_instances(None) return True elif event.key() == QtCore.Qt.Key_Backspace: - self._toggle_instances(0) + self._toggle_instances(False) return True elif event.key() == QtCore.Qt.Key_Return: - self._toggle_instances(1) + self._toggle_instances(True) return True return super().keyPressEvent(event) @@ -592,14 +645,17 @@ class InstanceCardView(AbstractInstanceView): if widget.is_selected ) - output.extend( + output.extend(self._get_selected_instance_widgets()) + return output + + def _get_selected_instance_widgets(self) -> list[InstanceCardWidget]: + return [ widget for widget in self._widgets_by_id.values() if widget.is_selected - ) - return output + ] - def _get_selected_instance_ids(self): + def _get_selected_item_ids(self): output = [] if ( self._context_widget is not None @@ -934,43 +990,8 @@ class InstanceCardView(AbstractInstanceView): if not instance_ids: break - def _on_active_changed(self, instance_id, value): - instance_widget = self._widgets_by_id[instance_id] - active_state_by_id = {} - if not instance_widget.is_selected: - active_state_by_id[instance_id] = value - else: - for widget in self._get_selected_widgets(): - if isinstance(widget, InstanceCardWidget): - active_state_by_id[widget.id] = value - - if not active_state_by_id: - return - - _queue = collections.deque() - _queue.append((set(self._instance_ids_by_parent_id[None]), True)) - instance_ids = set(active_state_by_id) - discarted_ids = set() - while _queue: - children, parent_active = _queue.popleft() - for instance_id in children: - widget = self._widgets_by_id[instance_id] - old_active = widget.is_active() - widget.set_parent_active(parent_active) - is_active = widget.is_active() - if old_active is not is_active: - active_state_by_id[instance_id] = is_active - - if instance_id in instance_ids: - instance_ids.discard(instance_id) - discarted_ids.add(instance_id) - - _queue.append(( - set(self._instance_ids_by_parent_id[instance_id]), - is_active - )) - - self._controller.set_instances_active_state(active_state_by_id) + def _on_active_changed(self, instance_id: str, value: bool) -> None: + self._toggle_instances(value, instance_id) def _on_widget_selection(self, instance_id, group_name, selection_type): """Select specific item by instance id. @@ -1021,7 +1042,7 @@ class InstanceCardView(AbstractInstanceView): """ self._explicitly_selected_instance_ids = ( - self._get_selected_instance_ids() + self._get_selected_item_ids() ) if new_widget.is_selected: self._explicitly_selected_instance_ids.remove(instance_id) From 5324c6122dacbd94f9a230fa3358384ca56484d9 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 30 Jul 2025 14:31:20 +0200 Subject: [PATCH 260/595] fix state changes in list view --- .../publisher/widgets/list_view_widgets.py | 95 +++++++------------ 1 file changed, 34 insertions(+), 61 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index 7d11746254..a2aadd9cfa 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -506,14 +506,13 @@ class InstanceListView(AbstractInstanceView): if not self._active_toggle_enabled: return - selected_instance_ids = self._instance_view.get_selected_instance_ids() if toggle == -1: active = None elif toggle == 1: active = True else: active = False - self._toggle_active_state(selected_instance_ids, active) + self._toggle_active_state(active) def _update_group_checkstate(self, group_name): """Update checkstate of one group.""" @@ -1086,75 +1085,49 @@ class InstanceListView(AbstractInstanceView): _queue.append((children, widget.is_active())) def _on_active_changed(self, changed_instance_id, new_value): - selected_instance_ids, _, _ = self.get_selected_items() - if changed_instance_id not in selected_instance_ids: - selected_instance_ids = {changed_instance_id} - - self._toggle_active_state( - set(selected_instance_ids), - new_value, - changed_instance_id - ) + self._toggle_active_state(new_value, changed_instance_id) def _toggle_active_state( self, - instance_ids: set[str], new_value: Optional[bool], active_id: Optional[str] = None, ) -> None: - active_widget = None - if active_id: - active_widget = self._widgets_by_id[active_id] - active_by_id = {} + instance_ids, _, _ = self.get_selected_items() if active_id and active_id not in instance_ids: - if not active_widget.is_checkbox_enabled(): - return - if new_value is None: - new_value = not active_widget.is_active() - active_by_id[active_id] = new_value - active_widget.set_active(new_value) - else: - # First make sure that the item under mouse is changed if possible - if active_widget and active_widget.is_checkbox_enabled(): - value = new_value - if value is None: - value = not active_widget.is_active() + instance_ids = {active_id} - active_by_id[active_id] = value - active_widget.set_active(new_value) - instance_ids.discard(active_id) + active_by_id = {} + # Change the states from top to bottom + group_items = list(self._group_items.values()) + if self._missing_parent_item is not None: + group_items.append(self._missing_parent_item) - # Change the states from top to bottom - group_items = list(self._group_items.values()) - if self._missing_parent_item is not None: - group_items.append(self._missing_parent_item) + _queue = collections.deque() + for group_item in group_items: + children = [ + group_item.child(row) + for row in range(group_item.rowCount()) + ] + _queue.append((children, True)) + + while _queue: + children, parent_active = _queue.popleft() + for child in children: + instance_id = child.data(INSTANCE_ID_ROLE) + widget = self._widgets_by_id[instance_id] + widget.set_parent_is_active(parent_active) + if instance_id in instance_ids: + value = new_value + if value is None: + value = not widget.is_active() + widget.set_active(value) + active_by_id[instance_id] = value - _queue = collections.deque() - for group_item in group_items: children = [ - group_item.child(row) - for row in range(group_item.rowCount()) + child.child(row) + for row in range(child.rowCount()) ] - _queue.append((children, True)) - - while _queue: - children, parent_active = _queue.popleft() - for child in children: - instance_id = child.data(INSTANCE_ID_ROLE) - widget = self._widgets_by_id[instance_id] - widget.set_parent_is_active(parent_active) - if instance_id in instance_ids: - value = new_value - if value is None: - value = not widget.is_active() - widget.set_active(value) - active_by_id[instance_id] = value - - children = [ - child.child(row) - for row in range(child.rowCount()) - ] - _queue.append((children, widget.is_active())) + _queue.append((children, widget.is_active())) self._controller.set_instances_active_state(active_by_id) @@ -1195,7 +1168,7 @@ class InstanceListView(AbstractInstanceView): instance_id = child.data(INSTANCE_ID_ROLE) instance_ids.add(instance_id) - self._toggle_active_state(instance_ids, active) + self._toggle_active_state(active) proxy_index = self._proxy_model.mapFromSource(group_item.index()) if not self._instance_view.isExpanded(proxy_index): @@ -1339,7 +1312,7 @@ class InstanceListView(AbstractInstanceView): | QtCore.QItemSelectionModel.Rows ) - def set_active_toggle_enabled(self, enabled: bool) -> bool: + def set_active_toggle_enabled(self, enabled: bool) -> None: if self._active_toggle_enabled is enabled: return From 19bafc10d31d35de691c47d8a83b65fbbd5544c9 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 30 Jul 2025 15:00:43 +0200 Subject: [PATCH 261/595] fix cleanup of removed instances --- .../publisher/widgets/card_view_widgets.py | 49 +++++++++++-------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py index 1d2ef9b0d2..b8185fbb3f 100644 --- a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py @@ -639,12 +639,7 @@ class InstanceCardView(AbstractInstanceView): ): output.append(self._context_widget) - output.extend( - widget - for widget in self._convertor_widgets_by_id.values() - if widget.is_selected - ) - + output.extend(self._get_selected_convertor_widgets()) output.extend(self._get_selected_instance_widgets()) return output @@ -655,6 +650,13 @@ class InstanceCardView(AbstractInstanceView): if widget.is_selected ] + def _get_selected_convertor_widgets(self) -> list[ConvertorItemCardWidget]: + return [ + widget + for widget in self._convertor_widgets_by_id.values() + if widget.is_selected + ] + def _get_selected_item_ids(self): output = [] if ( @@ -730,6 +732,9 @@ class InstanceCardView(AbstractInstanceView): groups_to_remove = ( set(self._widgets_by_group) - set(instances_by_group) ) + ids_to_remove = ( + set(self._widgets_by_id) - set(instances_by_id) + ) # Sort groups sorted_group_names = list(sorted(instances_by_group.keys())) @@ -780,6 +785,11 @@ class InstanceCardView(AbstractInstanceView): if group_name in self._explicitly_selected_groups: self._explicitly_selected_groups.remove(group_name) + for instance_id in ids_to_remove: + widget = self._widgets_by_id.pop(instance_id) + widget.setVisible(False) + widget.deleteLater() + self._instance_ids_by_parent_id = instance_ids_by_parent_id self._group_name_by_instance_id = group_by_instance_id self._instance_ids_by_group_name = instance_ids_by_group_name @@ -1298,21 +1308,18 @@ class InstanceCardView(AbstractInstanceView): def get_selected_items(self): """Get selected instance ids and context.""" - convertor_identifiers = [] - instances = [] - selected_widgets = self._get_selected_widgets() - - context_selected = False - for widget in selected_widgets: - if widget is self._context_widget: - context_selected = True - - elif isinstance(widget, InstanceCardWidget): - instances.append(widget.id) - - elif isinstance(widget, ConvertorItemCardWidget): - convertor_identifiers.append(widget.identifier) - + context_selected = ( + self._context_widget is not None + and self._context_widget.is_selected + ) + instances = [ + widget.id + for widget in self._get_selected_instance_widgets() + ] + convertor_identifiers = [ + widget.identifier + for widget in self._get_selected_convertor_widgets() + ] return instances, context_selected, convertor_identifiers def set_selected_items( From c4d6723c51e64f14947b095757e4e15750cf0e48 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 30 Jul 2025 16:04:00 +0200 Subject: [PATCH 262/595] formatting fixes --- client/ayon_core/pipeline/create/context.py | 2 +- .../ayon_core/plugins/publish/collect_from_create_context.py | 4 ++-- client/ayon_core/tools/publisher/widgets/card_view_widgets.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/pipeline/create/context.py b/client/ayon_core/pipeline/create/context.py index 5e069cd62e..b006924750 100644 --- a/client/ayon_core/pipeline/create/context.py +++ b/client/ayon_core/pipeline/create/context.py @@ -2629,4 +2629,4 @@ class CreateContext: INSTANCE_PARENT_CHANGED_TOPIC, {"instances": instances}, sender, - ) \ No newline at end of file + ) diff --git a/client/ayon_core/plugins/publish/collect_from_create_context.py b/client/ayon_core/plugins/publish/collect_from_create_context.py index 7b8aeee457..5e0ecbdff4 100644 --- a/client/ayon_core/plugins/publish/collect_from_create_context.py +++ b/client/ayon_core/plugins/publish/collect_from_create_context.py @@ -60,8 +60,8 @@ class CollectFromCreateContext(pyblish.api.ContextPlugin): is_active = created_instance["active"] # Use a parent's active state if parent flags defines that if ( - is_active - and created_instance.parent_flags & ParentFlags.share_active + created_instance.parent_flags & ParentFlags.share_active + and is_active ): is_active = parent_is_active diff --git a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py index b8185fbb3f..6d95906364 100644 --- a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py @@ -792,7 +792,7 @@ class InstanceCardView(AbstractInstanceView): self._instance_ids_by_parent_id = instance_ids_by_parent_id self._group_name_by_instance_id = group_by_instance_id - self._instance_ids_by_group_name = instance_ids_by_group_name + self._instance_ids_by_group_name = instance_ids_by_group_name self._ordered_groups = sorted_group_names def has_items(self) -> bool: From eaf47d8731a9dab98ff38d637984ea2d0837dc8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Wed, 30 Jul 2025 18:32:09 +0200 Subject: [PATCH 263/595] :recycle: don't allow duplicate loaders --- client/ayon_core/pipeline/load/plugins.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/load/plugins.py b/client/ayon_core/pipeline/load/plugins.py index dc5bb0f66f..48e860e834 100644 --- a/client/ayon_core/pipeline/load/plugins.py +++ b/client/ayon_core/pipeline/load/plugins.py @@ -373,7 +373,7 @@ def discover_loader_plugins(project_name=None): if not project_name: project_name = get_current_project_name() project_settings = get_project_settings(project_name) - plugins = discover(LoaderPlugin) + plugins = discover(LoaderPlugin, allow_duplicates=False) hooks = discover(LoaderHookPlugin) sorted_hooks = sorted(hooks, key=lambda hook: hook.order) for plugin in plugins: From ea3b4524d405f63a698d34bac7d15fafff42831b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 10:31:46 +0200 Subject: [PATCH 264/595] capture 'ItemNotFoundException' error if possible --- client/ayon_core/lib/local_settings.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 91b881cf57..a582a6c1b9 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -124,6 +124,10 @@ def get_addons_resources_dir(addon_name: str, *args) -> str: return os.path.join(addons_resources_dir, addon_name, *args) +class _FakeException(Exception): + """Placeholder exception used if real exception is not available.""" + + class AYONSecureRegistry: """Store information using keyring. @@ -195,7 +199,17 @@ class AYONSecureRegistry: """ import keyring - value = keyring.get_password(self._name, name) + # Capture 'ItemNotFoundException' exception (on linux) + try: + from secretstorage.exceptions import ItemNotFoundException + except ImportError: + ItemNotFoundException = _FakeException + + try: + value = keyring.get_password(self._name, name) + except ItemNotFoundException: + value = None + if value is not None: return value From 97a3ab142c291ced73aef586bad8e6c3b62d5ab4 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 10:46:37 +0200 Subject: [PATCH 265/595] raise dedicated exception if item is not available --- client/ayon_core/lib/local_settings.py | 41 +++++++++++++++----------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 91b881cf57..7c6459fad6 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -15,6 +15,11 @@ import ayon_api _PLACEHOLDER = object() +# TODO should use 'KeyError' or 'Exception' as base +class RegistryItemNotFound(ValueError): + """Raised when the item is not found in keyring.""" + + class _Cache: username = None @@ -187,7 +192,7 @@ class AYONSecureRegistry: value (str): Value of the item. Raises: - ValueError: If item doesn't exist and default is not defined. + RegistryItemNotFound: If item doesn't exist and default is not defined. .. _Keyring module: https://github.com/jaraco/keyring @@ -202,9 +207,8 @@ class AYONSecureRegistry: if default is not _PLACEHOLDER: return default - # NOTE Should raise `KeyError` - raise ValueError( - "Item {}:{} does not exist in keyring.".format(self._name, name) + raise RegistryItemNotFound( + f"Item {self._name}:{name} not found in keyring." ) def delete_item(self, name): @@ -277,7 +281,7 @@ class ASettingRegistry(ABC): value (str): Value of the item. Raises: - ValueError: If item doesn't exist. + RegistryItemNotFound: If the item doesn't exist. """ return self._get_item(name) @@ -388,7 +392,7 @@ class IniSettingRegistry(ASettingRegistry): str: Value of item. Raises: - ValueError: If value doesn't exist. + RegistryItemNotFound: If value doesn't exist. """ return super(IniSettingRegistry, self).get_item(name) @@ -399,8 +403,8 @@ class IniSettingRegistry(ASettingRegistry): """Get item from section of ini file. This will read ini file and try to get item value from specified - section. If that section or item doesn't exist, :exc:`ValueError` - is risen. + section. If that section or item doesn't exist, + :exc:`RegistryItemNotFound` is risen. Args: section (str): Name of ini section. @@ -410,7 +414,7 @@ class IniSettingRegistry(ASettingRegistry): str: Item value. Raises: - ValueError: If value doesn't exist. + RegistryItemNotFound: If value doesn't exist. """ config = configparser.ConfigParser() @@ -418,8 +422,9 @@ class IniSettingRegistry(ASettingRegistry): try: value = config[section][name] except KeyError: - raise ValueError( - "Registry doesn't contain value {}:{}".format(section, name)) + raise RegistryItemNotFound( + f"Registry doesn't contain value {section}:{name}" + ) return value def _get_item(self, name): @@ -435,7 +440,7 @@ class IniSettingRegistry(ASettingRegistry): name (str): Name of the item. Raises: - ValueError: If item doesn't exist. + RegistryItemNotFound: If the item doesn't exist. """ self.get_item_from_section.cache_clear() @@ -444,8 +449,9 @@ class IniSettingRegistry(ASettingRegistry): try: _ = config[section][name] except KeyError: - raise ValueError( - "Registry doesn't contain value {}:{}".format(section, name)) + raise RegistryItemNotFound( + f"Registry doesn't contain value {section}:{name}" + ) config.remove_option(section, name) # if section is empty, delete it @@ -494,8 +500,9 @@ class JSONSettingRegistry(ASettingRegistry): try: value = data["registry"][name] except KeyError: - raise ValueError( - "Registry doesn't contain value {}".format(name)) + raise RegistryItemNotFound( + f"Registry doesn't contain value {name}" + ) return value def get_item(self, name): @@ -509,7 +516,7 @@ class JSONSettingRegistry(ASettingRegistry): value of the item Raises: - ValueError: If item is not found in registry file. + RegistryItemNotFound: If the item is not found in registry file. """ return self._get_item(name) From 88b01a2797c39e9b19d5808f475c3ecb49ce885f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 10:54:26 +0200 Subject: [PATCH 266/595] added type-hints --- client/ayon_core/lib/local_settings.py | 101 ++++++++++--------------- 1 file changed, 38 insertions(+), 63 deletions(-) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 7c6459fad6..19ffffd63f 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -8,6 +8,7 @@ import warnings from datetime import datetime from abc import ABC, abstractmethod from functools import lru_cache +from typing import Optional, Any import platformdirs import ayon_api @@ -24,14 +25,14 @@ class _Cache: username = None -def _get_ayon_appdirs(*args): +def _get_ayon_appdirs(*args: str) -> str: return os.path.join( platformdirs.user_data_dir("AYON", "Ynput"), *args ) -def get_ayon_appdirs(*args): +def get_ayon_appdirs(*args: str) -> str: """Local app data directory of AYON client. Deprecated: @@ -141,7 +142,7 @@ class AYONSecureRegistry: Args: name(str): Name of registry used as identifier for data. """ - def __init__(self, name): + def __init__(self, name: str) -> None: try: import keyring @@ -159,8 +160,7 @@ class AYONSecureRegistry: # Force "AYON" prefix self._name = "/".join(("AYON", name)) - def set_item(self, name, value): - # type: (str, str) -> None + def set_item(self, name: str, value: str) -> None: """Set sensitive item into system's keyring. This uses `Keyring module`_ to save sensitive stuff into system's @@ -179,7 +179,9 @@ class AYONSecureRegistry: keyring.set_password(self._name, name, value) @lru_cache(maxsize=32) - def get_item(self, name, default=_PLACEHOLDER): + def get_item( + self, name: str, default: Any = _PLACEHOLDER + ) -> Optional[str]: """Get value of sensitive item from system's keyring. See also `Keyring module`_ @@ -211,8 +213,7 @@ class AYONSecureRegistry: f"Item {self._name}:{name} not found in keyring." ) - def delete_item(self, name): - # type: (str) -> None + def delete_item(self, name: str) -> None: """Delete value stored in system's keyring. See also `Keyring module`_ @@ -241,16 +242,13 @@ class ASettingRegistry(ABC): _name (str): Registry names. """ - - def __init__(self, name): - # type: (str) -> ASettingRegistry + def __init__(self, name: str) -> None: super(ASettingRegistry, self).__init__() self._name = name self._items = {} - def set_item(self, name, value): - # type: (str, str) -> None + def set_item(self, name: str, value: str) -> None: """Set item to settings registry. Args: @@ -261,17 +259,14 @@ class ASettingRegistry(ABC): self._set_item(name, value) @abstractmethod - def _set_item(self, name, value): - # type: (str, str) -> None - # Implement it - pass + def _set_item(self, name: str, value: str) -> None: + """Set item value to registry.""" - def __setitem__(self, name, value): + def __setitem__(self, name: str, value: str) -> None: self._items[name] = value self._set_item(name, value) - def get_item(self, name): - # type: (str) -> str + def get_item(self, name: str) -> str: """Get item from settings registry. Args: @@ -287,16 +282,13 @@ class ASettingRegistry(ABC): return self._get_item(name) @abstractmethod - def _get_item(self, name): - # type: (str) -> str - # Implement it - pass + def _get_item(self, name: str) -> str: + """Get item value from registry.""" - def __getitem__(self, name): + def __getitem__(self, name: str) -> Any: return self._get_item(name) - def delete_item(self, name): - # type: (str) -> None + def delete_item(self, name: str) -> None: """Delete item from settings registry. Args: @@ -306,12 +298,10 @@ class ASettingRegistry(ABC): self._delete_item(name) @abstractmethod - def _delete_item(self, name): - # type: (str) -> None - """Delete item from settings.""" - pass + def _delete_item(self, name: str) -> None: + """Delete item from registry.""" - def __delitem__(self, name): + def __delitem__(self, name: str) -> None: del self._items[name] self._delete_item(name) @@ -322,9 +312,7 @@ class IniSettingRegistry(ASettingRegistry): This class is using :mod:`configparser` (ini) files to store items. """ - - def __init__(self, name, path): - # type: (str, str) -> IniSettingRegistry + def __init__(self, name: str, path: str) -> None: super(IniSettingRegistry, self).__init__(name) # get registry file self._registry_file = os.path.join(path, "{}.ini".format(name)) @@ -334,8 +322,7 @@ class IniSettingRegistry(ASettingRegistry): now = datetime.now().strftime("%d/%m/%Y %H:%M:%S") print("# {}".format(now), cfg) - def set_item_section(self, section, name, value): - # type: (str, str, str) -> None + def set_item_section(self, section: str, name: str, value: str) -> None: """Set item to specific section of ini registry. If section doesn't exists, it is created. @@ -358,12 +345,10 @@ class IniSettingRegistry(ASettingRegistry): with open(self._registry_file, mode="w") as cfg: config.write(cfg) - def _set_item(self, name, value): - # type: (str, str) -> None + def _set_item(self, name: str, value: str) -> None: self.set_item_section("MAIN", name, value) - def set_item(self, name, value): - # type: (str, str) -> None + def set_item(self, name: str, value: str) -> None: """Set item to settings ini file. This saves item to ``DEFAULT`` section of ini as each item there @@ -378,8 +363,7 @@ class IniSettingRegistry(ASettingRegistry): # we cast value to str as ini options values must be strings. super(IniSettingRegistry, self).set_item(name, str(value)) - def get_item(self, name): - # type: (str) -> str + def get_item(self, name: str) -> str: """Gets item from settings ini file. This gets settings from ``DEFAULT`` section of ini file as each item @@ -398,8 +382,7 @@ class IniSettingRegistry(ASettingRegistry): return super(IniSettingRegistry, self).get_item(name) @lru_cache(maxsize=32) - def get_item_from_section(self, section, name): - # type: (str, str) -> str + def get_item_from_section(self, section: str, name: str) -> str: """Get item from section of ini file. This will read ini file and try to get item value from specified @@ -427,12 +410,10 @@ class IniSettingRegistry(ASettingRegistry): ) return value - def _get_item(self, name): - # type: (str) -> str + def _get_item(self, name: str) -> str: return self.get_item_from_section("MAIN", name) - def delete_item_from_section(self, section, name): - # type: (str, str) -> None + def delete_item_from_section(self, section: str, name: str) -> None: """Delete item from section in ini file. Args: @@ -469,8 +450,7 @@ class IniSettingRegistry(ASettingRegistry): class JSONSettingRegistry(ASettingRegistry): """Class using json file as storage.""" - def __init__(self, name, path): - # type: (str, str) -> JSONSettingRegistry + def __init__(self, name: str, path: str) -> None: super(JSONSettingRegistry, self).__init__(name) #: str: name of registry file self._registry_file = os.path.join(path, "{}.json".format(name)) @@ -487,8 +467,7 @@ class JSONSettingRegistry(ASettingRegistry): json.dump(header, cfg, indent=4) @lru_cache(maxsize=32) - def _get_item(self, name): - # type: (str) -> object + def _get_item(self, name: str) -> Any: """Get item value from registry json. Note: @@ -505,8 +484,7 @@ class JSONSettingRegistry(ASettingRegistry): ) return value - def get_item(self, name): - # type: (str) -> object + def get_item(self, name: str) -> Any: """Get item value from registry json. Args: @@ -521,8 +499,7 @@ class JSONSettingRegistry(ASettingRegistry): """ return self._get_item(name) - def _set_item(self, name, value): - # type: (str, object) -> None + def _set_item(self, name: str, value: Any) -> None: """Set item value to registry json. Note: @@ -536,8 +513,7 @@ class JSONSettingRegistry(ASettingRegistry): cfg.seek(0) json.dump(data, cfg, indent=4) - def set_item(self, name, value): - # type: (str, object) -> None + def set_item(self, name: str, value: Any) -> None: """Set item and its value into json registry file. Args: @@ -547,8 +523,7 @@ class JSONSettingRegistry(ASettingRegistry): """ self._set_item(name, value) - def _delete_item(self, name): - # type: (str) -> None + def _delete_item(self, name: str) -> None: self._get_item.cache_clear() with open(self._registry_file, "r+") as cfg: data = json.load(cfg) @@ -563,9 +538,9 @@ class AYONSettingsRegistry(JSONSettingRegistry): Args: name (Optional[str]): Name of the registry. - """ - def __init__(self, name=None): + """ + def __init__(self, name: Optional[str] = None) -> None: if not name: name = "AYON_settings" path = get_launcher_storage_dir() From d431956963c55bb60405142649efd636011b89ca Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 10:55:34 +0200 Subject: [PATCH 267/595] simplified super calls --- client/ayon_core/lib/local_settings.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 19ffffd63f..26db587835 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -243,7 +243,7 @@ class ASettingRegistry(ABC): """ def __init__(self, name: str) -> None: - super(ASettingRegistry, self).__init__() + super().__init__() self._name = name self._items = {} @@ -313,7 +313,7 @@ class IniSettingRegistry(ASettingRegistry): """ def __init__(self, name: str, path: str) -> None: - super(IniSettingRegistry, self).__init__(name) + super().__init__(name) # get registry file self._registry_file = os.path.join(path, "{}.ini".format(name)) if not os.path.exists(self._registry_file): @@ -361,7 +361,7 @@ class IniSettingRegistry(ASettingRegistry): """ # this does the some, overridden just for different docstring. # we cast value to str as ini options values must be strings. - super(IniSettingRegistry, self).set_item(name, str(value)) + super().set_item(name, str(value)) def get_item(self, name: str) -> str: """Gets item from settings ini file. @@ -379,7 +379,7 @@ class IniSettingRegistry(ASettingRegistry): RegistryItemNotFound: If value doesn't exist. """ - return super(IniSettingRegistry, self).get_item(name) + return super().get_item(name) @lru_cache(maxsize=32) def get_item_from_section(self, section: str, name: str) -> str: @@ -451,7 +451,7 @@ class JSONSettingRegistry(ASettingRegistry): """Class using json file as storage.""" def __init__(self, name: str, path: str) -> None: - super(JSONSettingRegistry, self).__init__(name) + super().__init__(name) #: str: name of registry file self._registry_file = os.path.join(path, "{}.json".format(name)) now = datetime.now().strftime("%d/%m/%Y %H:%M:%S") @@ -544,7 +544,7 @@ class AYONSettingsRegistry(JSONSettingRegistry): if not name: name = "AYON_settings" path = get_launcher_storage_dir() - super(AYONSettingsRegistry, self).__init__(name, path) + super().__init__(name, path) def get_local_site_id(): From 08c242edefe4b11046a589fca10a7e8e7f969177 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 10:55:59 +0200 Subject: [PATCH 268/595] use f-strings --- client/ayon_core/lib/local_settings.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 26db587835..36abeb4283 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -158,7 +158,7 @@ class AYONSecureRegistry: keyring.set_keyring(Windows.WinVaultKeyring()) # Force "AYON" prefix - self._name = "/".join(("AYON", name)) + self._name = f"AYON/{name}" def set_item(self, name: str, value: str) -> None: """Set sensitive item into system's keyring. @@ -315,12 +315,12 @@ class IniSettingRegistry(ASettingRegistry): def __init__(self, name: str, path: str) -> None: super().__init__(name) # get registry file - self._registry_file = os.path.join(path, "{}.ini".format(name)) + self._registry_file = os.path.join(path, f"{name}.ini") if not os.path.exists(self._registry_file): with open(self._registry_file, mode="w") as cfg: print("# Settings registry", cfg) now = datetime.now().strftime("%d/%m/%Y %H:%M:%S") - print("# {}".format(now), cfg) + print(f"# {now}", cfg) def set_item_section(self, section: str, name: str, value: str) -> None: """Set item to specific section of ini registry. @@ -452,8 +452,7 @@ class JSONSettingRegistry(ASettingRegistry): def __init__(self, name: str, path: str) -> None: super().__init__(name) - #: str: name of registry file - self._registry_file = os.path.join(path, "{}.json".format(name)) + self._registry_file = os.path.join(path, f"{name}.json") now = datetime.now().strftime("%d/%m/%Y %H:%M:%S") header = { "__metadata__": {"generated": now}, From d1fce584fa577d209feff5c91867eda12399acec Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 10:56:25 +0200 Subject: [PATCH 269/595] remove unncessary variable --- client/ayon_core/lib/local_settings.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 36abeb4283..a52539a4dd 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -238,15 +238,11 @@ class ASettingRegistry(ABC): mechanism for storing common items must be implemented in abstract methods. - Attributes: - _name (str): Registry names. - """ def __init__(self, name: str) -> None: super().__init__() self._name = name - self._items = {} def set_item(self, name: str, value: str) -> None: """Set item to settings registry. @@ -263,7 +259,6 @@ class ASettingRegistry(ABC): """Set item value to registry.""" def __setitem__(self, name: str, value: str) -> None: - self._items[name] = value self._set_item(name, value) def get_item(self, name: str) -> str: @@ -302,7 +297,6 @@ class ASettingRegistry(ABC): """Delete item from registry.""" def __delitem__(self, name: str) -> None: - del self._items[name] self._delete_item(name) From d88a8678729fc2e51c9e49e7f798499e5e74cdcd Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 10:56:39 +0200 Subject: [PATCH 270/595] reset cache on set item --- client/ayon_core/lib/local_settings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index a52539a4dd..162e17fd94 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -177,6 +177,7 @@ class AYONSecureRegistry: import keyring keyring.set_password(self._name, name, value) + self.get_item.cache_clear() @lru_cache(maxsize=32) def get_item( From 41228915eca2c0b29fdc7d7c5eb208ecda0fd568 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 10:58:08 +0200 Subject: [PATCH 271/595] more explicit dir creation --- client/ayon_core/lib/local_settings.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 162e17fd94..98eec3af4f 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -454,8 +454,10 @@ class JSONSettingRegistry(ASettingRegistry): "registry": {} } - if not os.path.exists(os.path.dirname(self._registry_file)): - os.makedirs(os.path.dirname(self._registry_file), exist_ok=True) + # Use 'os.path.dirname' in case someone uses slashes in 'name' + dirpath = os.path.dirname(self._registry_file) + if not os.path.exists(dirpath): + os.makedirs(dirpath, exist_ok=True) if not os.path.exists(self._registry_file): with open(self._registry_file, mode="w") as cfg: json.dump(header, cfg, indent=4) From 2013eea5c4cc52942f79c371032f7c9b6126870a Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 10:58:21 +0200 Subject: [PATCH 272/595] formatting change --- client/ayon_core/lib/local_settings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 98eec3af4f..b06b890992 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -141,6 +141,7 @@ class AYONSecureRegistry: Args: name(str): Name of registry used as identifier for data. + """ def __init__(self, name: str) -> None: try: From 1a46f2c027b60e03ac35a25d231bf034042bcb1c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 11:00:51 +0200 Subject: [PATCH 273/595] remove unnecessary super call --- client/ayon_core/lib/local_settings.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index b06b890992..79e0e24307 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -242,8 +242,6 @@ class ASettingRegistry(ABC): """ def __init__(self, name: str) -> None: - super().__init__() - self._name = name def set_item(self, name: str, value: str) -> None: From b403db76e6626b450dad91d489e20bc997284746 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 11:01:52 +0200 Subject: [PATCH 274/595] better order of methods --- client/ayon_core/lib/local_settings.py | 46 ++++++++++++++------------ 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 79e0e24307..4b85a76b2d 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -244,23 +244,31 @@ class ASettingRegistry(ABC): def __init__(self, name: str) -> None: self._name = name - def set_item(self, name: str, value: str) -> None: - """Set item to settings registry. - - Args: - name (str): Name of the item. - value (str): Value of the item. - - """ - self._set_item(name, value) + @abstractmethod + def _get_item(self, name: str) -> Any: + """Get item value from registry.""" @abstractmethod def _set_item(self, name: str, value: str) -> None: """Set item value to registry.""" + @abstractmethod + def _delete_item(self, name: str) -> None: + """Delete item from registry.""" + + def __getitem__(self, name: str) -> Any: + return self._get_item(name) + def __setitem__(self, name: str, value: str) -> None: self._set_item(name, value) + def __delitem__(self, name: str) -> None: + self._delete_item(name) + + @property + def name(self) -> str: + return self._name + def get_item(self, name: str) -> str: """Get item from settings registry. @@ -276,12 +284,15 @@ class ASettingRegistry(ABC): """ return self._get_item(name) - @abstractmethod - def _get_item(self, name: str) -> str: - """Get item value from registry.""" + def set_item(self, name: str, value: str) -> None: + """Set item to settings registry. - def __getitem__(self, name: str) -> Any: - return self._get_item(name) + Args: + name (str): Name of the item. + value (str): Value of the item. + + """ + self._set_item(name, value) def delete_item(self, name: str) -> None: """Delete item from settings registry. @@ -292,13 +303,6 @@ class ASettingRegistry(ABC): """ self._delete_item(name) - @abstractmethod - def _delete_item(self, name: str) -> None: - """Delete item from registry.""" - - def __delitem__(self, name: str) -> None: - self._delete_item(name) - class IniSettingRegistry(ASettingRegistry): """Class using :mod:`configparser`. From d4092c8e314eb5e02cf004e07ac8a5f69f39a36c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 11:02:12 +0200 Subject: [PATCH 275/595] deprecated not passed name in 'AYONSettingsRegistry' --- client/ayon_core/lib/local_settings.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 4b85a76b2d..8511c8d15e 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -536,12 +536,21 @@ class AYONSettingsRegistry(JSONSettingRegistry): """Class handling AYON general settings registry. Args: - name (Optional[str]): Name of the registry. + name (Optional[str]): Name of the registry. Using 'None' or not + passing name is deprecated. """ def __init__(self, name: Optional[str] = None) -> None: if not name: name = "AYON_settings" + warnings.warn( + ( + "Used 'AYONSettingsRegistry' without 'name' argument." + " The argument will be required in future versions." + ), + DeprecationWarning, + stacklevel=2, + ) path = get_launcher_storage_dir() super().__init__(name, path) From 473cf8b0c13f19d4763d2d9bea4f0b376ca85f77 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 11:19:39 +0200 Subject: [PATCH 276/595] grammar fixes --- client/ayon_core/lib/local_settings.py | 37 +++++++++++++------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 8511c8d15e..19381b18e0 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -18,7 +18,7 @@ _PLACEHOLDER = object() # TODO should use 'KeyError' or 'Exception' as base class RegistryItemNotFound(ValueError): - """Raised when the item is not found in keyring.""" + """Raised when the item is not found in the keyring.""" class _Cache: @@ -37,10 +37,10 @@ def get_ayon_appdirs(*args: str) -> str: Deprecated: Use 'get_launcher_local_dir' or 'get_launcher_storage_dir' based on - use-case. Deprecation added 24/08/09 (0.4.4-dev.1). + a use-case. Deprecation added 24/08/09 (0.4.4-dev.1). Args: - *args (Iterable[str]): Subdirectories/files in local app data dir. + *args (Iterable[str]): Subdirectories/files in the local app data dir. Returns: str: Path to directory/file in local app data dir. @@ -58,7 +58,7 @@ def get_ayon_appdirs(*args: str) -> str: def get_launcher_storage_dir(*subdirs: str) -> str: - """Get storage directory for launcher. + """Get a storage directory for launcher. Storage directory is used for storing shims, addons, dependencies, etc. @@ -83,14 +83,14 @@ def get_launcher_storage_dir(*subdirs: str) -> str: def get_launcher_local_dir(*subdirs: str) -> str: - """Get local directory for launcher. + """Get a local directory for launcher. - Local directory is used for storing machine or user specific data. + Local directory is used for storing machine or user-specific data. - The location is user specific. + The location is user-specific. Note: - This function should be called at least once on bootstrap. + This function should be called at least once on the bootstrap. Args: *subdirs (str): Subdirectories relative to local dir. @@ -107,7 +107,7 @@ def get_launcher_local_dir(*subdirs: str) -> str: def get_addons_resources_dir(addon_name: str, *args) -> str: - """Get directory for storing resources for addons. + """Get a directory for storing resources for addons. Some addons might need to store ad-hoc resources that are not part of addon client package (e.g. because of size). Studio might define @@ -117,7 +117,7 @@ def get_addons_resources_dir(addon_name: str, *args) -> str: Args: addon_name (str): Addon name. - *args (str): Subfolders in resources directory. + *args (str): Subfolders in the resources directory. Returns: str: Path to resources directory. @@ -140,7 +140,7 @@ class AYONSecureRegistry: identify which data were created by AYON. Args: - name(str): Name of registry used as identifier for data. + name(str): Name of registry used as the identifier for data. """ def __init__(self, name: str) -> None: @@ -162,9 +162,9 @@ class AYONSecureRegistry: self._name = f"AYON/{name}" def set_item(self, name: str, value: str) -> None: - """Set sensitive item into system's keyring. + """Set sensitive item into the system's keyring. - This uses `Keyring module`_ to save sensitive stuff into system's + This uses `Keyring module`_ to save sensitive stuff into the system's keyring. Args: @@ -184,19 +184,20 @@ class AYONSecureRegistry: def get_item( self, name: str, default: Any = _PLACEHOLDER ) -> Optional[str]: - """Get value of sensitive item from system's keyring. + """Get value of sensitive item from the system's keyring. See also `Keyring module`_ Args: name (str): Name of the item. - default (Any): Default value if item is not available. + default (Any): Default value if the item is not available. Returns: value (str): Value of the item. Raises: - RegistryItemNotFound: If item doesn't exist and default is not defined. + RegistryItemNotFound: If the item doesn't exist and default + is not defined. .. _Keyring module: https://github.com/jaraco/keyring @@ -216,7 +217,7 @@ class AYONSecureRegistry: ) def delete_item(self, name: str) -> None: - """Delete value stored in system's keyring. + """Delete value stored in the system's keyring. See also `Keyring module`_ @@ -446,7 +447,7 @@ class IniSettingRegistry(ASettingRegistry): class JSONSettingRegistry(ASettingRegistry): - """Class using json file as storage.""" + """Class using a json file as storage.""" def __init__(self, name: str, path: str) -> None: super().__init__(name) From 3c867c517c4773b75aae84d049a1edf5e8323512 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 11:20:08 +0200 Subject: [PATCH 277/595] change value of json registry to 'str' --- client/ayon_core/lib/local_settings.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 19381b18e0..09855c6075 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -467,8 +467,8 @@ class JSONSettingRegistry(ASettingRegistry): json.dump(header, cfg, indent=4) @lru_cache(maxsize=32) - def _get_item(self, name: str) -> Any: - """Get item value from registry json. + def _get_item(self, name: str) -> str: + """Get item value from the registry. Note: See :meth:`ayon_core.lib.JSONSettingRegistry.get_item` @@ -499,8 +499,8 @@ class JSONSettingRegistry(ASettingRegistry): """ return self._get_item(name) - def _set_item(self, name: str, value: Any) -> None: - """Set item value to registry json. + def _set_item(self, name: str, value: str) -> None: + """Set item value to the registry. Note: See :meth:`ayon_core.lib.JSONSettingRegistry.set_item` From 6433ada42c78a586899c9329b91838a5ade936e7 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 11:20:50 +0200 Subject: [PATCH 278/595] remove unnecessary overriden methods --- client/ayon_core/lib/local_settings.py | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 09855c6075..7982a2797e 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -484,21 +484,6 @@ class JSONSettingRegistry(ASettingRegistry): ) return value - def get_item(self, name: str) -> Any: - """Get item value from registry json. - - Args: - name (str): Name of the item. - - Returns: - value of the item - - Raises: - RegistryItemNotFound: If the item is not found in registry file. - - """ - return self._get_item(name) - def _set_item(self, name: str, value: str) -> None: """Set item value to the registry. @@ -513,18 +498,7 @@ class JSONSettingRegistry(ASettingRegistry): cfg.seek(0) json.dump(data, cfg, indent=4) - def set_item(self, name: str, value: Any) -> None: - """Set item and its value into json registry file. - - Args: - name (str): name of the item. - value (Any): value of the item. - - """ - self._set_item(name, value) - def _delete_item(self, name: str) -> None: - self._get_item.cache_clear() with open(self._registry_file, "r+") as cfg: data = json.load(cfg) del data["registry"][name] From 83b109be28602958e1fa0b666fc3e10188ad7cae Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 11:21:11 +0200 Subject: [PATCH 279/595] fix cache again --- client/ayon_core/lib/local_settings.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 7982a2797e..4cfe059e2a 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -497,6 +497,7 @@ class JSONSettingRegistry(ASettingRegistry): cfg.truncate(0) cfg.seek(0) json.dump(data, cfg, indent=4) + self._get_item.cache_clear() def _delete_item(self, name: str) -> None: with open(self._registry_file, "r+") as cfg: @@ -505,6 +506,7 @@ class JSONSettingRegistry(ASettingRegistry): cfg.truncate(0) cfg.seek(0) json.dump(data, cfg, indent=4) + self._get_item.cache_clear() class AYONSettingsRegistry(JSONSettingRegistry): From 1017becebd118f5cdd3bd021ed7fbe5891bf954e Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 11:21:26 +0200 Subject: [PATCH 280/595] changed abstract class docstring --- client/ayon_core/lib/local_settings.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 4cfe059e2a..85ece54d6f 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -235,11 +235,7 @@ class AYONSecureRegistry: class ASettingRegistry(ABC): - """Abstract class defining structure of **SettingRegistry** class. - - It is implementing methods to store secure items into keyring, otherwise - mechanism for storing common items must be implemented in abstract - methods. + """Abstract class to defining structure of registry class. """ def __init__(self, name: str) -> None: From 47af183d04f82ccc5d27af20143ee03ddf8eeb49 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 12:12:00 +0200 Subject: [PATCH 281/595] check for availability that don't live in workdir --- client/ayon_core/host/interfaces/workfiles.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index b6c33337e9..693aac5fe5 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -1155,12 +1155,15 @@ class IWorkfileHost: comment = parsed_data.comment filepath = list_workfiles_context.anatomy.fill_root(rootless_path) + available = False + if filepath != rootless_path: + available = os.path.exists(filepath) items.append(WorkfileInfo.new( filepath, rootless_path, version=version, comment=comment, - available=False, + available=available, workfile_entity=workfile_entity, )) From 4f296e0ed78138cef63791605c40e1a6b82e7ebf Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 12:41:33 +0200 Subject: [PATCH 282/595] simplified --- client/ayon_core/host/interfaces/workfiles.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 693aac5fe5..14e60bda20 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -1155,9 +1155,7 @@ class IWorkfileHost: comment = parsed_data.comment filepath = list_workfiles_context.anatomy.fill_root(rootless_path) - available = False - if filepath != rootless_path: - available = os.path.exists(filepath) + available = os.path.exists(filepath) items.append(WorkfileInfo.new( filepath, rootless_path, From a85cf5d2e907c13dc19d1818231fc28ba0829000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Thu, 31 Jul 2025 15:41:47 +0200 Subject: [PATCH 283/595] :recycle: handle more link types --- .../workfile/workfile_template_builder.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/workfile_template_builder.py b/client/ayon_core/pipeline/workfile/workfile_template_builder.py index 6b82e3b04d..7920abb23f 100644 --- a/client/ayon_core/pipeline/workfile/workfile_template_builder.py +++ b/client/ayon_core/pipeline/workfile/workfile_template_builder.py @@ -201,14 +201,6 @@ class AbstractTemplateBuilder(ABC): ) return self._current_folder_entity - @property - def linked_folder_entities(self): - if self._linked_folder_entities is _NOT_SET: - self._linked_folder_entities = self._get_linked_folder_entities( - link_type="template" - ) - return self._linked_folder_entities - @property def current_task_entity(self): if self._current_task_entity is _NOT_SET: @@ -309,7 +301,7 @@ class AbstractTemplateBuilder(ABC): self._loaders_by_name = get_loaders_by_name() return self._loaders_by_name - def _get_linked_folder_entities(self, link_type: str = "template"): + def get_linked_folder_entities(self, link_type: str = "template"): project_name = self.project_name folder_entity = self.current_folder_entity if not folder_entity: @@ -1642,6 +1634,8 @@ class PlaceholderLoadMixin(object): folder_ids = [current_folder_entity["id"]] elif builder_type == "linked_folders": + # link type from placeholder data or default to "template" + link_type = placeholder.data.get("link_type", "template") # Get all linked folders for the current folder if hasattr(self, "builder") and isinstance( self.builder, AbstractTemplateBuilder): @@ -1649,7 +1643,8 @@ class PlaceholderLoadMixin(object): folder_ids = [ linked_folder_entity["id"] for linked_folder_entity in ( - self.builder.linked_folder_entities) + self.builder.get_linked_folder_entities( + link_type=link_type)) ] if not folder_ids: From b247762806f3e9f4dfa38afdb812d3da461d34d8 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 16:44:02 +0200 Subject: [PATCH 284/595] make 'get_plugin_paths' optional --- client/ayon_core/addon/interfaces.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/addon/interfaces.py b/client/ayon_core/addon/interfaces.py index 232c056fb4..b0f2d25c08 100644 --- a/client/ayon_core/addon/interfaces.py +++ b/client/ayon_core/addon/interfaces.py @@ -48,14 +48,23 @@ class IPluginPaths(AYONInterface): } """ - @abstractmethod def get_plugin_paths(self) -> dict[str, list[str]]: """Return plugin paths for addon. + This method was abstract (required) in the past, so raise the required + 'core' addon version when 'get_plugin_paths' is removed from + addon. + + Deprecated: + Please implement specific methods 'get_create_plugin_paths', + 'get_load_plugin_paths', 'get_inventory_action_paths' and + 'get_publish_plugin_paths' to return plugin paths. + Returns: dict[str, list[str]]: Plugin paths for addon. """ + return {} def _get_plugin_paths_by_type( self, plugin_type: str) -> list[str]: From 67f039bf5dc102b3da3c97e1010efe0639745a84 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 16:44:36 +0200 Subject: [PATCH 285/595] warn about using deprecated method --- client/ayon_core/addon/interfaces.py | 29 ++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/client/ayon_core/addon/interfaces.py b/client/ayon_core/addon/interfaces.py index b0f2d25c08..010a5aaca1 100644 --- a/client/ayon_core/addon/interfaces.py +++ b/client/ayon_core/addon/interfaces.py @@ -1,6 +1,7 @@ """Addon interfaces for AYON.""" from __future__ import annotations +import warnings from abc import ABCMeta, abstractmethod from typing import TYPE_CHECKING, Callable, Optional, Type @@ -39,14 +40,7 @@ class AYONInterface(metaclass=_AYONInterfaceMeta): class IPluginPaths(AYONInterface): - """Addon has plugin paths to return. - - Expected result is dictionary with keys "publish", "create", "load", - "actions" or "inventory" and values as list or string. - { - "publish": ["path/to/publish_plugins"] - } - """ + """Addon wants to register plugin paths.""" def get_plugin_paths(self) -> dict[str, list[str]]: """Return plugin paths for addon. @@ -87,6 +81,25 @@ class IPluginPaths(AYONInterface): if not isinstance(paths, (list, tuple, set)): paths = [paths] + + new_function_name = "get_launcher_action_paths" + if plugin_type == "create": + new_function_name = "get_create_plugin_paths" + elif plugin_type == "load": + new_function_name = "get_load_plugin_paths" + elif plugin_type == "publish": + new_function_name = "get_publish_plugin_paths" + elif plugin_type == "inventory": + new_function_name = "get_inventory_action_paths" + + warnings.warn( + f"Addon '{self.name}' returns '{plugin_type}' paths using" + " 'get_plugin_paths' method. Please implement" + f" '{new_function_name}' instead.", + DeprecationWarning, + stacklevel=2 + + ) return paths def get_launcher_action_paths(self) -> list[str]: From 487b5dda98a3ff19084d0c6143de7da0708209b5 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 16:44:45 +0200 Subject: [PATCH 286/595] small formatting change --- client/ayon_core/addon/interfaces.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/addon/interfaces.py b/client/ayon_core/addon/interfaces.py index 010a5aaca1..9f2a14a264 100644 --- a/client/ayon_core/addon/interfaces.py +++ b/client/ayon_core/addon/interfaces.py @@ -61,7 +61,8 @@ class IPluginPaths(AYONInterface): return {} def _get_plugin_paths_by_type( - self, plugin_type: str) -> list[str]: + self, plugin_type: str + ) -> list[str]: """Get plugin paths by type. Args: From ba4412577bafaf5e759e39d942133d03a7a0392b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 16:45:12 +0200 Subject: [PATCH 287/595] mark 'collect_plugin_paths' as deprecated --- client/ayon_core/addon/base.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/client/ayon_core/addon/base.py b/client/ayon_core/addon/base.py index 72270fa585..80e1ceaa1e 100644 --- a/client/ayon_core/addon/base.py +++ b/client/ayon_core/addon/base.py @@ -8,6 +8,7 @@ import inspect import logging import threading import collections +import warnings from uuid import uuid4 from abc import ABC, abstractmethod from typing import Optional @@ -815,10 +816,26 @@ class AddonsManager: Unknown keys are logged out. + Deprecated: + Use targeted methods 'collect_launcher_action_paths', + 'collect_create_plugin_paths', 'collect_load_plugin_paths', + 'collect_publish_plugin_paths' and + 'collect_inventory_action_paths' to collect plugin paths. + Returns: dict: Output is dictionary with keys "publish", "create", "load", "actions" and "inventory" each containing list of paths. + """ + warnings.warn( + "Used deprecated method 'collect_plugin_paths'. Please use" + " targeted methods 'collect_launcher_action_paths'," + " 'collect_create_plugin_paths', 'collect_load_plugin_paths'" + " 'collect_publish_plugin_paths' and" + " 'collect_inventory_action_paths'", + DeprecationWarning, + stacklevel=2 + ) # Output structure output = { "publish": [], From 5e8dece22e2fbae722f83f45d74d30cad04708cf Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 31 Jul 2025 16:46:03 +0200 Subject: [PATCH 288/595] warn about having string as output from plugin getter method --- client/ayon_core/addon/base.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/client/ayon_core/addon/base.py b/client/ayon_core/addon/base.py index 80e1ceaa1e..57968b0e09 100644 --- a/client/ayon_core/addon/base.py +++ b/client/ayon_core/addon/base.py @@ -891,24 +891,28 @@ class AddonsManager: if not isinstance(addon, IPluginPaths): continue + paths = None method = getattr(addon, method_name) try: paths = method(*args, **kwargs) except Exception: self.log.warning( - ( - "Failed to get plugin paths from addon" - " '{}' using '{}'." - ).format(addon.__class__.__name__, method_name), + "Failed to get plugin paths from addon" + f" '{addon.name}' using '{method_name}'.", exc_info=True ) + + if not paths: continue - if paths: - # Convert to list if value is not list - if not isinstance(paths, (list, tuple, set)): - paths = [paths] - output.extend(paths) + if isinstance(paths, str): + paths = [paths] + self.log.warning( + f"Addon '{addon.name}' returned invalid output type" + f" from '{method_name}'." + f" Got 'str' expected 'list[str]'." + ) + output.extend(paths) return output def collect_launcher_action_paths(self): From 2ee875b90b98cc501f9887867ab090b053b03038 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Thu, 31 Jul 2025 17:17:44 +0200 Subject: [PATCH 289/595] :recycle: remove defaults --- .../ayon_core/pipeline/workfile/workfile_template_builder.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/workfile_template_builder.py b/client/ayon_core/pipeline/workfile/workfile_template_builder.py index 7920abb23f..7b20747768 100644 --- a/client/ayon_core/pipeline/workfile/workfile_template_builder.py +++ b/client/ayon_core/pipeline/workfile/workfile_template_builder.py @@ -301,7 +301,7 @@ class AbstractTemplateBuilder(ABC): self._loaders_by_name = get_loaders_by_name() return self._loaders_by_name - def get_linked_folder_entities(self, link_type: str = "template"): + def get_linked_folder_entities(self, link_type: str): project_name = self.project_name folder_entity = self.current_folder_entity if not folder_entity: @@ -1466,7 +1466,6 @@ class PlaceholderLoadMixin(object): attribute_definitions.EnumDef( "link_type", label="Link Type", - default="template", items=link_types_enum_item, tooltip=( "Link Type\n" From 5fa11b24e4bb0b165b67cd779d0e8c25ed8a2984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Thu, 31 Jul 2025 17:21:21 +0200 Subject: [PATCH 290/595] :recycle: limit link types to folder <-> folder --- .../workfile/workfile_template_builder.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/workfile_template_builder.py b/client/ayon_core/pipeline/workfile/workfile_template_builder.py index 7b20747768..6a36fd12e4 100644 --- a/client/ayon_core/pipeline/workfile/workfile_template_builder.py +++ b/client/ayon_core/pipeline/workfile/workfile_template_builder.py @@ -1430,11 +1430,21 @@ class PlaceholderLoadMixin(object): link_types = ayon_api.get_link_types(self.builder.project_name) - link_types_enum_item = [ + # Filter link types for folder to folder links + link_types_enum_items = [ {"label": link_type["name"], "value": link_type["linkType"]} for link_type in link_types - + if ( + link_type["inputType"] == "folder" + and link_type["outputType"] == "folder" + ) ] + + if not link_types_enum_items: + link_types_enum_items.append( + {"label": "", "value": None} + ) + build_type_label = "Folder Builder Type" build_type_help = ( "Folder Builder Type\n" @@ -1466,7 +1476,7 @@ class PlaceholderLoadMixin(object): attribute_definitions.EnumDef( "link_type", label="Link Type", - items=link_types_enum_item, + items=link_types_enum_items, tooltip=( "Link Type\n" "\nDefines what type of link will be used to" From 8e2f33d483791c606cdbc4230e04be2ad88f6889 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 1 Aug 2025 11:23:44 +0200 Subject: [PATCH 291/595] use filepath instead of rootless path for workfile entity mapping --- client/ayon_core/host/interfaces/workfiles.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 14e60bda20..b519751ba2 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -1072,10 +1072,13 @@ class IWorkfileHost: prepared_data=prepared_data, ) - workfile_entities_by_path = { - workfile_entity["path"]: workfile_entity - for workfile_entity in list_workfiles_context.workfile_entities - } + workfile_entities_by_path = {} + for workfile_entity in list_workfiles_context.workfile_entities: + rootless_path = workfile_entity["path"] + path = os.path.normpath( + list_workfiles_context.anatomy.fill_root(rootless_path) + ) + workfile_entities_by_path[path] = workfile_entity workdir_data = get_template_data( list_workfiles_context.project_entity, @@ -1114,10 +1117,10 @@ class IWorkfileHost: rootless_path = f"{rootless_workdir}/{filename}" workfile_entity = workfile_entities_by_path.pop( - rootless_path, None + filepath, None ) version = comment = None - if workfile_entity: + if workfile_entity is not None: _data = workfile_entity["data"] version = _data.get("version") comment = _data.get("comment") @@ -1137,7 +1140,7 @@ class IWorkfileHost: ) items.append(item) - for workfile_entity in workfile_entities_by_path.values(): + for filepath, workfile_entity in workfile_entities_by_path.items(): # Workfile entity is not in the filesystem # but it is in the database rootless_path = workfile_entity["path"] @@ -1154,7 +1157,6 @@ class IWorkfileHost: version = parsed_data.version comment = parsed_data.comment - filepath = list_workfiles_context.anatomy.fill_root(rootless_path) available = os.path.exists(filepath) items.append(WorkfileInfo.new( filepath, From e7ea930d557d5e8264beb09a94b39044178fee33 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Fri, 1 Aug 2025 10:23:24 +0000 Subject: [PATCH 292/595] [Automated] Add generated package files from main --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index 7f55a17a01..c16b31f2fc 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.5.0+dev" +__version__ = "1.5.1" diff --git a/package.py b/package.py index 807e4e4b35..9c131794d7 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.5.0+dev" +version = "1.5.1" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index e7977a5579..686cc1e3f8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.5.0+dev" +version = "1.5.1" description = "" authors = ["Ynput Team "] readme = "README.md" From 302619176bbc651642dbe847d98eda76f543bd29 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Fri, 1 Aug 2025 10:24:02 +0000 Subject: [PATCH 293/595] [Automated] Update version in package.py for develop --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index c16b31f2fc..784105572b 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.5.1" +__version__ = "1.5.1+dev" diff --git a/package.py b/package.py index 9c131794d7..a0d7b26703 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.5.1" +version = "1.5.1+dev" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index 686cc1e3f8..b544afa346 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.5.1" +version = "1.5.1+dev" description = "" authors = ["Ynput Team "] readme = "README.md" From 745a394cdddd688a054870c2ae08559683850d82 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 1 Aug 2025 10:24:54 +0000 Subject: [PATCH 294/595] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 9202190f8b..364d1709e0 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to AYON Tray options: + - 1.5.1 - 1.5.0 - 1.4.1 - 1.4.0 From 9f456f7cb8b3afa3c32ba605ca7ed22276b47c6d Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 1 Aug 2025 14:37:21 +0200 Subject: [PATCH 295/595] added safe importing of otio --- .../publish/collect_otio_frame_ranges.py | 17 +++++++++++------ .../publish/extract_otio_audio_tracks.py | 2 +- .../plugins/publish/extract_otio_review.py | 4 ++-- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/client/ayon_core/plugins/publish/collect_otio_frame_ranges.py b/client/ayon_core/plugins/publish/collect_otio_frame_ranges.py index 0a4efc2172..d68970d428 100644 --- a/client/ayon_core/plugins/publish/collect_otio_frame_ranges.py +++ b/client/ayon_core/plugins/publish/collect_otio_frame_ranges.py @@ -8,13 +8,7 @@ This module contains a unified plugin that handles: from pprint import pformat -import opentimelineio as otio import pyblish.api -from ayon_core.pipeline.editorial import ( - get_media_range_with_retimes, - otio_range_to_frame_range, - otio_range_with_handles, -) def validate_otio_clip(instance, logger): @@ -74,6 +68,8 @@ class CollectOtioRanges(pyblish.api.InstancePlugin): if not validate_otio_clip(instance, self.log): return + import opentimelineio as otio + otio_clip = instance.data["otioClip"] # Collect timeline ranges if workfile start frame is available @@ -100,6 +96,11 @@ class CollectOtioRanges(pyblish.api.InstancePlugin): def _collect_timeline_ranges(self, instance, otio_clip): """Collect basic timeline frame ranges.""" + from ayon_core.pipeline.editorial import ( + otio_range_to_frame_range, + otio_range_with_handles, + ) + workfile_start = instance.data["workfileFrameStart"] # Get timeline ranges @@ -129,6 +130,8 @@ class CollectOtioRanges(pyblish.api.InstancePlugin): def _collect_source_ranges(self, instance, otio_clip): """Collect source media frame ranges.""" + import opentimelineio as otio + # Get source ranges otio_src_range = otio_clip.source_range otio_available_range = otio_clip.available_range() @@ -178,6 +181,8 @@ class CollectOtioRanges(pyblish.api.InstancePlugin): def _collect_retimed_ranges(self, instance, otio_clip): """Handle retimed clip frame ranges.""" + from ayon_core.pipeline.editorial import get_media_range_with_retimes + retimed_attributes = get_media_range_with_retimes(otio_clip, 0, 0) self.log.debug(f"Retimed attributes: {retimed_attributes}") diff --git a/client/ayon_core/plugins/publish/extract_otio_audio_tracks.py b/client/ayon_core/plugins/publish/extract_otio_audio_tracks.py index 2aec4a5415..86d18ed147 100644 --- a/client/ayon_core/plugins/publish/extract_otio_audio_tracks.py +++ b/client/ayon_core/plugins/publish/extract_otio_audio_tracks.py @@ -7,7 +7,6 @@ from ayon_core.lib import ( get_ffmpeg_tool_args, run_subprocess ) -from ayon_core.pipeline import editorial class ExtractOtioAudioTracks(pyblish.api.ContextPlugin): @@ -159,6 +158,7 @@ class ExtractOtioAudioTracks(pyblish.api.ContextPlugin): """ # Not all hosts can import this module. import opentimelineio as otio + from ayon_core.pipeline.editorial import OTIO_EPSILON output = [] # go trough all audio tracks diff --git a/client/ayon_core/plugins/publish/extract_otio_review.py b/client/ayon_core/plugins/publish/extract_otio_review.py index 74cf45e474..28452bc0e9 100644 --- a/client/ayon_core/plugins/publish/extract_otio_review.py +++ b/client/ayon_core/plugins/publish/extract_otio_review.py @@ -25,7 +25,6 @@ from ayon_core.lib import ( ) from ayon_core.pipeline import ( KnownPublishError, - editorial, publish, ) @@ -359,6 +358,7 @@ class ExtractOTIOReview( import opentimelineio as otio from ayon_core.pipeline.editorial import ( trim_media_range, + OTIO_EPSILON, ) def _round_to_frame(rational_time): @@ -380,7 +380,7 @@ class ExtractOTIOReview( # Avoid rounding issue on media available range. if start.almost_equal( avl_start, - editorial.OTIO_EPSILON + OTIO_EPSILON ): avl_start = start From 798b281e6731947cd4700591632f4e4c4134b73b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 1 Aug 2025 14:42:16 +0200 Subject: [PATCH 296/595] fix OTIO_EPSILON usage --- client/ayon_core/plugins/publish/extract_otio_audio_tracks.py | 2 +- client/ayon_core/plugins/publish/extract_otio_review.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/plugins/publish/extract_otio_audio_tracks.py b/client/ayon_core/plugins/publish/extract_otio_audio_tracks.py index 86d18ed147..3a450a4f33 100644 --- a/client/ayon_core/plugins/publish/extract_otio_audio_tracks.py +++ b/client/ayon_core/plugins/publish/extract_otio_audio_tracks.py @@ -177,7 +177,7 @@ class ExtractOtioAudioTracks(pyblish.api.ContextPlugin): # Avoid rounding issue on media available range. if clip_start.almost_equal( conformed_av_start, - editorial.OTIO_EPSILON + OTIO_EPSILON ): conformed_av_start = clip_start diff --git a/client/ayon_core/plugins/publish/extract_otio_review.py b/client/ayon_core/plugins/publish/extract_otio_review.py index 28452bc0e9..90215bd2c9 100644 --- a/client/ayon_core/plugins/publish/extract_otio_review.py +++ b/client/ayon_core/plugins/publish/extract_otio_review.py @@ -406,7 +406,7 @@ class ExtractOTIOReview( # Avoid rounding issue on media available range. if end_point.almost_equal( avl_end_point, - editorial.OTIO_EPSILON + OTIO_EPSILON ): avl_end_point = end_point From 8bcc4a3939d4e52cce731a0e712b87b283fee37d Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 1 Aug 2025 18:23:15 +0200 Subject: [PATCH 297/595] Make sure workdir exists when workfile is being saved --- client/ayon_core/host/interfaces/workfiles.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index b519751ba2..82d71d152a 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -944,6 +944,8 @@ class IWorkfileHost: self._emit_workfile_save_event(event_data, after_save=False) workdir = os.path.dirname(filepath) + if not os.path.exists(workdir): + os.makedirs(workdir, exist_ok=True) # Set 'AYON_WORKDIR' environment variable os.environ["AYON_WORKDIR"] = workdir From 955d8166a5fc4d216368db6ee0a7bf80710f7b32 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Fri, 1 Aug 2025 16:36:08 +0000 Subject: [PATCH 298/595] [Automated] Add generated package files from main --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index 784105572b..b6958f1be5 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.5.1+dev" +__version__ = "1.5.2" diff --git a/package.py b/package.py index a0d7b26703..79fe4f83b1 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.5.1+dev" +version = "1.5.2" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index b544afa346..73fa4336f1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.5.1+dev" +version = "1.5.2" description = "" authors = ["Ynput Team "] readme = "README.md" From 8cd7037c6f0910ff4ae789dd2b1213b5b5307e85 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Fri, 1 Aug 2025 16:36:43 +0000 Subject: [PATCH 299/595] [Automated] Update version in package.py for develop --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index b6958f1be5..9f1bac6805 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.5.2" +__version__ = "1.5.2+dev" diff --git a/package.py b/package.py index 79fe4f83b1..7bd806159f 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.5.2" +version = "1.5.2+dev" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index 73fa4336f1..e67fcc2138 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.5.2" +version = "1.5.2+dev" description = "" authors = ["Ynput Team "] readme = "README.md" From 55f5551b31b1ad2aef3ca801207ad458a19d153e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 1 Aug 2025 16:37:35 +0000 Subject: [PATCH 300/595] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 364d1709e0..933448a6a9 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to AYON Tray options: + - 1.5.2 - 1.5.1 - 1.5.0 - 1.4.1 From 4f0e18b42ed081370bc7d5279a2a91159a7b139f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 4 Aug 2025 10:17:50 +0200 Subject: [PATCH 301/595] Remove unnecessary line --- client/ayon_core/addon/interfaces.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/addon/interfaces.py b/client/ayon_core/addon/interfaces.py index 9f2a14a264..bf08ccd48c 100644 --- a/client/ayon_core/addon/interfaces.py +++ b/client/ayon_core/addon/interfaces.py @@ -99,7 +99,6 @@ class IPluginPaths(AYONInterface): f" '{new_function_name}' instead.", DeprecationWarning, stacklevel=2 - ) return paths From c219403b13c1f9436b17758e095b2f7fdd6788d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= <33513211+antirotor@users.noreply.github.com> Date: Mon, 4 Aug 2025 18:18:10 +0200 Subject: [PATCH 302/595] Update client/ayon_core/pipeline/workfile/workfile_template_builder.py Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- .../ayon_core/pipeline/workfile/workfile_template_builder.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/workfile/workfile_template_builder.py b/client/ayon_core/pipeline/workfile/workfile_template_builder.py index 6a36fd12e4..9994bcfd4e 100644 --- a/client/ayon_core/pipeline/workfile/workfile_template_builder.py +++ b/client/ayon_core/pipeline/workfile/workfile_template_builder.py @@ -301,7 +301,9 @@ class AbstractTemplateBuilder(ABC): self._loaders_by_name = get_loaders_by_name() return self._loaders_by_name - def get_linked_folder_entities(self, link_type: str): + def get_linked_folder_entities(self, link_type: Optional[str]): + if not link_type: + return [] project_name = self.project_name folder_entity = self.current_folder_entity if not folder_entity: From 9929c80425cdf1caa5986ce8bacbfda442d009ae Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 7 Aug 2025 14:58:33 +0200 Subject: [PATCH 303/595] better detail widget varaible --- .../tools/publisher/widgets/card_view_widgets.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py index 6d95906364..1cce09e97a 100644 --- a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py @@ -309,10 +309,6 @@ class InstanceCardWidget(CardWidget): expand_btn.setMaximumWidth(14) expand_btn.setEnabled(False) - detail_widget = QtWidgets.QWidget(self) - detail_widget.setVisible(False) - self.detail_widget = detail_widget - top_layout = QtWidgets.QHBoxLayout() top_layout.addLayout(icon_layout, 0) top_layout.addWidget(label_widget, 1) @@ -320,6 +316,9 @@ class InstanceCardWidget(CardWidget): top_layout.addWidget(active_checkbox, 0) top_layout.addWidget(expand_btn, 0) + detail_widget = QtWidgets.QWidget(self) + detail_widget.setVisible(False) + layout = QtWidgets.QHBoxLayout(self) layout.setContentsMargins(0, 2, 10, 2) layout.addLayout(top_layout) @@ -337,6 +336,8 @@ class InstanceCardWidget(CardWidget): self._active_checkbox = active_checkbox self._expand_btn = expand_btn + self._detail_widget = detail_widget + self._update_instance_values(context_info, is_parent_active) def set_active_toggle_enabled(self, enabled: bool) -> None: @@ -448,8 +449,8 @@ class InstanceCardWidget(CardWidget): def _set_expanded(self, expanded=None): if expanded is None: - expanded = not self.detail_widget.isVisible() - self.detail_widget.setVisible(expanded) + expanded = not self._detail_widget.isVisible() + self._detail_widget.setVisible(expanded) def _on_active_change(self): new_value = self._active_checkbox.isChecked() From 5ab31a0bd9ee03e66c5908068bdbabce29de7098 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 7 Aug 2025 14:58:42 +0200 Subject: [PATCH 304/595] remove unused variable --- client/ayon_core/tools/publisher/widgets/card_view_widgets.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py index 1cce09e97a..5b9b104c16 100644 --- a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py @@ -521,7 +521,6 @@ class InstanceCardView(AbstractInstanceView): collections.defaultdict(list) ) self._ordered_groups = [] - self._group_icons = {} self._context_widget: Optional[ContextCardWidget] = None self._widgets_by_id: dict[str, InstanceCardWidget] = {} self._widgets_by_group: dict[str, BaseGroupWidget] = {} From dba9ea95a2cc9aace75b3f84e88ffe6aa42ba323 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 7 Aug 2025 14:59:11 +0200 Subject: [PATCH 305/595] add missing abstract method --- .../ayon_core/tools/publisher/widgets/widgets.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/client/ayon_core/tools/publisher/widgets/widgets.py b/client/ayon_core/tools/publisher/widgets/widgets.py index a9d34c4c66..9de1f753b2 100644 --- a/client/ayon_core/tools/publisher/widgets/widgets.py +++ b/client/ayon_core/tools/publisher/widgets/widgets.py @@ -370,6 +370,21 @@ class AbstractInstanceView(QtWidgets.QWidget): "{} Method 'set_active_toggle_enabled' is not implemented." ).format(self.__class__.__name__)) + def refresh_instance_states(self, instance_ids=None): + """Refresh instance states. + + Args: + instance_ids: Optional[Iterable[str]]: Instance ids to refresh. + If not passed then all instances are refreshed. + + """ + + raise NotImplementedError( + f"{self.__class__.__name__} Method 'refresh_instance_states'" + " is not implemented." + ) + + class ClickableLineEdit(QtWidgets.QLineEdit): """QLineEdit capturing left mouse click. From a4bd8523f2203b9e588f22d75bef78e0f152dc01 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 7 Aug 2025 15:00:43 +0200 Subject: [PATCH 306/595] better view handling --- .../publisher/widgets/overview_widget.py | 75 ++++++++++++------- 1 file changed, 49 insertions(+), 26 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/overview_widget.py b/client/ayon_core/tools/publisher/widgets/overview_widget.py index d78b143ce6..10bd2bb354 100644 --- a/client/ayon_core/tools/publisher/widgets/overview_widget.py +++ b/client/ayon_core/tools/publisher/widgets/overview_widget.py @@ -1,3 +1,7 @@ +from __future__ import annotations + +from typing import Generator + from qtpy import QtWidgets, QtCore from ayon_core.tools.publisher.abstract import AbstractPublisherFrontend @@ -250,7 +254,7 @@ class OverviewWidget(QtWidgets.QFrame): ) def has_items(self): - view = self._product_views_layout.currentWidget() + view = self._get_current_view() return view.has_items() def _on_create_clicked(self): @@ -369,16 +373,14 @@ class OverviewWidget(QtWidgets.QFrame): self._refresh_instance_states(event["instance_ids"]) def _refresh_instance_states(self, instance_ids): - current_idx = self._product_views_layout.currentIndex() - for idx in range(self._product_views_layout.count()): - if idx == current_idx: - continue - widget = self._product_views_layout.widget(idx) - if widget.refreshed: - widget.set_refreshed(False) + current_view = self._get_current_view() + for view in self._iter_views(): + if view is current_view: + current_view = view + elif view.refreshed: + view.set_refreshed(False) - current_widget = self._product_views_layout.widget(current_idx) - current_widget.refresh_instance_states(instance_ids) + current_view.refresh_instance_states(instance_ids) def _on_convert_requested(self): self.convert_requested.emit() @@ -392,7 +394,7 @@ class OverviewWidget(QtWidgets.QFrame): convertor plugins. """ - view = self._product_views_layout.currentWidget() + view = self._get_current_view() return view.get_selected_items() def get_selected_legacy_convertors(self): @@ -410,8 +412,8 @@ class OverviewWidget(QtWidgets.QFrame): idx = self._product_views_layout.currentIndex() new_idx = (idx + 1) % self._product_views_layout.count() - old_view = self._product_views_layout.currentWidget() - new_view = self._product_views_layout.widget(new_idx) + old_view = self._get_current_view() + new_view = self._get_view_by_idx(new_idx) if not new_view.refreshed: new_view.refresh() @@ -430,17 +432,41 @@ class OverviewWidget(QtWidgets.QFrame): self._on_product_change() + def _iter_views(self) -> Generator[AbstractInstanceView, None, None]: + for idx in range(self._product_views_layout.count()): + widget = self._product_views_layout.widget(idx) + if not isinstance(widget, AbstractInstanceView): + raise TypeError( + "Current widget is not instance of 'AbstractInstanceView'" + ) + yield widget + + def _get_current_view(self) -> AbstractInstanceView: + widget = self._product_views_layout.currentWidget() + if isinstance(widget, AbstractInstanceView): + return widget + raise TypeError( + "Current widget is not instance of 'AbstractInstanceView'" + ) + + def _get_view_by_idx(self, idx: int) -> AbstractInstanceView: + widget = self._product_views_layout.widget(idx) + if isinstance(widget, AbstractInstanceView): + return widget + raise TypeError( + "Current widget is not instance of 'AbstractInstanceView'" + ) + def _refresh_instances(self): if self._refreshing_instances: return self._refreshing_instances = True - for idx in range(self._product_views_layout.count()): - widget = self._product_views_layout.widget(idx) - widget.set_refreshed(False) + for view in self._iter_views(): + view.set_refreshed(False) - view = self._product_views_layout.currentWidget() + view = self._get_current_view() view.refresh() view.set_refreshed(True) @@ -451,25 +477,22 @@ class OverviewWidget(QtWidgets.QFrame): # Give a change to process Resize Request QtWidgets.QApplication.processEvents() - # Trigger update geometry of - widget = self._product_views_layout.currentWidget() - widget.updateGeometry() + # Trigger update geometry + view.updateGeometry() def _on_publish_start(self): """Publish started.""" self._create_btn.setEnabled(False) self._product_attributes_wrap.setEnabled(False) - for idx in range(self._product_views_layout.count()): - widget = self._product_views_layout.widget(idx) - widget.set_active_toggle_enabled(False) + for view in self._iter_views(): + view.set_active_toggle_enabled(False) def _on_controller_reset_start(self): """Controller reset started.""" - for idx in range(self._product_views_layout.count()): - widget = self._product_views_layout.widget(idx) - widget.set_active_toggle_enabled(True) + for view in self._iter_views(): + view.set_active_toggle_enabled(True) def _on_publish_reset(self): """Context in controller has been reseted.""" From bc6bd4be29614630f875cc6ecfc809c6fa7d3859 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 7 Aug 2025 15:00:57 +0200 Subject: [PATCH 307/595] added missing import --- client/ayon_core/tools/publisher/widgets/overview_widget.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/tools/publisher/widgets/overview_widget.py b/client/ayon_core/tools/publisher/widgets/overview_widget.py index 10bd2bb354..44581feac8 100644 --- a/client/ayon_core/tools/publisher/widgets/overview_widget.py +++ b/client/ayon_core/tools/publisher/widgets/overview_widget.py @@ -10,6 +10,7 @@ from .border_label_widget import BorderedLabelWidget from .card_view_widgets import InstanceCardView from .list_view_widgets import InstanceListView from .widgets import ( + AbstractInstanceView, CreateInstanceBtn, RemoveInstanceBtn, ChangeViewBtn, From c800e35f3fc4ad44df28a39f34040f46334cce89 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 7 Aug 2025 15:01:34 +0200 Subject: [PATCH 308/595] change change view button --- .../publisher/widgets/overview_widget.py | 5 ++++ .../tools/publisher/widgets/widgets.py | 24 +++++++++++++++---- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/overview_widget.py b/client/ayon_core/tools/publisher/widgets/overview_widget.py index 44581feac8..4ff38c26cd 100644 --- a/client/ayon_core/tools/publisher/widgets/overview_widget.py +++ b/client/ayon_core/tools/publisher/widgets/overview_widget.py @@ -178,6 +178,7 @@ class OverviewWidget(QtWidgets.QFrame): self._create_btn = create_btn self._delete_btn = delete_btn + self._change_view_btn = change_view_btn self._product_attributes_widget = product_attributes_widget self._create_widget = create_widget @@ -415,6 +416,7 @@ class OverviewWidget(QtWidgets.QFrame): old_view = self._get_current_view() new_view = self._get_view_by_idx(new_idx) + is_list_view = isinstance(new_view, InstanceListView) if not new_view.refreshed: new_view.refresh() @@ -429,6 +431,9 @@ class OverviewWidget(QtWidgets.QFrame): instance_ids, context_selected, convertor_identifiers ) + self._change_view_btn.set_view_type( + "card" if is_list_view else "list" + ) self._product_views_layout.setCurrentIndex(new_idx) self._on_product_change() diff --git a/client/ayon_core/tools/publisher/widgets/widgets.py b/client/ayon_core/tools/publisher/widgets/widgets.py index 9de1f753b2..b1c4a3afcc 100644 --- a/client/ayon_core/tools/publisher/widgets/widgets.py +++ b/client/ayon_core/tools/publisher/widgets/widgets.py @@ -10,6 +10,7 @@ from ayon_core.tools.flickcharm import FlickCharm from ayon_core.tools.utils import ( IconButton, PixmapLabel, + get_qt_icon, ) from ayon_core.tools.publisher.constants import ResetKeySequence @@ -287,12 +288,27 @@ class RemoveInstanceBtn(PublishIconBtn): self.setToolTip("Remove selected instances") -class ChangeViewBtn(PublishIconBtn): +class ChangeViewBtn(IconButton): """Create toggle view button.""" def __init__(self, parent=None): - icon_path = get_icon_path("change_view") - super().__init__(icon_path, parent) - self.setToolTip("Swap between views") + super().__init__(parent) + self.set_view_type("list") + + def set_view_type(self, view_type): + if view_type == "list": + # icon_name = "data_table" + icon_name = "view_agenda" + tooltip = "Change to list view" + else: + icon_name = "dehaze" + tooltip = "Change to card view" + + icon = get_qt_icon({ + "type": "material-symbols", + "name": icon_name, + }) + self.setIcon(icon) + self.setToolTip(tooltip) class AbstractInstanceView(QtWidgets.QWidget): From a7a3834fdcc168188d8c944144f8514e24f8bd56 Mon Sep 17 00:00:00 2001 From: Sasbom Date: Fri, 8 Aug 2025 08:31:22 +0200 Subject: [PATCH 309/595] force in UI element from laucher to workfiles --- .../tools/workfiles/widgets/window.py | 50 +++++++++++++++---- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/client/ayon_core/tools/workfiles/widgets/window.py b/client/ayon_core/tools/workfiles/widgets/window.py index 1649a059cb..81f1d76c71 100644 --- a/client/ayon_core/tools/workfiles/widgets/window.py +++ b/client/ayon_core/tools/workfiles/widgets/window.py @@ -1,21 +1,20 @@ -from qtpy import QtCore, QtWidgets, QtGui +from qtpy import QtCore, QtGui, QtWidgets -from ayon_core import style, resources +from ayon_core import resources, style from ayon_core.tools.utils import ( - PlaceholderLineEdit, - MessageOverlayObject, -) - -from ayon_core.tools.workfiles.control import BaseWorkfileController -from ayon_core.tools.utils import ( - GoToCurrentButton, - RefreshButton, FoldersWidget, + GoToCurrentButton, + MessageOverlayObject, + NiceCheckbox, + PlaceholderLineEdit, + RefreshButton, TasksWidget, ) +from ayon_core.tools.utils.lib import checkstate_int_to_enum +from ayon_core.tools.workfiles.control import BaseWorkfileController -from .side_panel import SidePanelWidget from .files_widget import FilesWidget +from .side_panel import SidePanelWidget from .utils import BaseOverlayFrame @@ -186,11 +185,24 @@ class WorkfilesToolWindow(QtWidgets.QWidget): controller, col_widget, handle_expected_selection=True ) + my_tasks_tooltip = ( + "Filter folders and task to only those you are assigned to." + ) + + my_tasks_label = QtWidgets.QLabel("My tasks") + my_tasks_label.setToolTip(my_tasks_tooltip) + + my_tasks_checkbox = NiceCheckbox(folder_widget) + my_tasks_checkbox.setChecked(False) + my_tasks_checkbox.setToolTip(my_tasks_tooltip) + header_layout = QtWidgets.QHBoxLayout(header_widget) header_layout.setContentsMargins(0, 0, 0, 0) header_layout.addWidget(folder_filter_input, 1) header_layout.addWidget(go_to_current_btn, 0) header_layout.addWidget(refresh_btn, 0) + header_layout.addWidget(my_tasks_label, 0) + header_layout.addWidget(my_tasks_checkbox, 0) col_layout = QtWidgets.QVBoxLayout(col_widget) col_layout.setContentsMargins(0, 0, 0, 0) @@ -200,6 +212,9 @@ class WorkfilesToolWindow(QtWidgets.QWidget): folder_filter_input.textChanged.connect(self._on_folder_filter_change) go_to_current_btn.clicked.connect(self._on_go_to_current_clicked) refresh_btn.clicked.connect(self._on_refresh_clicked) + my_tasks_checkbox.stateChanged.connect( + self._on_my_tasks_checkbox_state_changed + ) self._folder_filter_input = folder_filter_input self._folders_widget = folder_widget @@ -385,3 +400,16 @@ class WorkfilesToolWindow(QtWidgets.QWidget): ) else: self.close() + + def _on_my_tasks_checkbox_state_changed(self, state): + folder_ids = None + task_ids = None + state = checkstate_int_to_enum(state) + if state == QtCore.Qt.Checked: + entity_ids = self._controller.get_my_tasks_entity_ids( + self._project_name + ) + folder_ids = entity_ids["folder_ids"] + task_ids = entity_ids["task_ids"] + self._folders_widget.set_folder_ids_filter(folder_ids) + self._tasks_widget.set_task_ids_filter(task_ids) From 20614562cd5a8818191d8daa1822cf354ffa6a86 Mon Sep 17 00:00:00 2001 From: Sasbom Date: Fri, 8 Aug 2025 09:13:31 +0200 Subject: [PATCH 310/595] implement interface for "my task" functionality in workfiles control / window --- client/ayon_core/tools/workfiles/control.py | 26 +++++++++++++++---- .../tools/workfiles/widgets/window.py | 4 +++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/client/ayon_core/tools/workfiles/control.py b/client/ayon_core/tools/workfiles/control.py index 4391e6b5fd..f0e0f0e416 100644 --- a/client/ayon_core/tools/workfiles/control.py +++ b/client/ayon_core/tools/workfiles/control.py @@ -3,25 +3,26 @@ import os import ayon_api from ayon_core.host import IWorkfileHost -from ayon_core.lib import Logger +from ayon_core.lib import Logger, get_ayon_username from ayon_core.lib.events import QueuedEventSystem -from ayon_core.settings import get_project_settings from ayon_core.pipeline import Anatomy, registered_host from ayon_core.pipeline.context_tools import get_global_context - +from ayon_core.settings import get_project_settings from ayon_core.tools.common_models import ( - HierarchyModel, HierarchyExpectedSelection, + HierarchyModel, ProjectsModel, UsersModel, ) from .abstract import ( - AbstractWorkfilesFrontend, AbstractWorkfilesBackend, + AbstractWorkfilesFrontend, ) from .models import SelectionModel, WorkfilesModel +NOT_SET = object() + class WorkfilesToolExpectedSelection(HierarchyExpectedSelection): def __init__(self, controller): @@ -143,6 +144,7 @@ class BaseWorkfileController( self._project_settings = None self._event_system = None self._log = None + self._username = NOT_SET self._current_project_name = None self._current_folder_path = None @@ -588,6 +590,20 @@ class BaseWorkfileController( description, ) + def get_my_tasks_entity_ids(self, project_name: str): + username = self._get_my_username() + assignees = [] + if username: + assignees.append(username) + return self._hierarchy_model.get_entity_ids_for_assignees( + project_name, assignees + ) + + def _get_my_username(self): + if self._username is NOT_SET: + self._username = get_ayon_username() + return self._username + def _emit_event(self, topic, data=None): self.emit_event(topic, data, "controller") diff --git a/client/ayon_core/tools/workfiles/widgets/window.py b/client/ayon_core/tools/workfiles/widgets/window.py index 81f1d76c71..1e78b89851 100644 --- a/client/ayon_core/tools/workfiles/widgets/window.py +++ b/client/ayon_core/tools/workfiles/widgets/window.py @@ -1,3 +1,4 @@ + from qtpy import QtCore, QtGui, QtWidgets from ayon_core import resources, style @@ -156,6 +157,9 @@ class WorkfilesToolWindow(QtWidgets.QWidget): self._home_body_widget = home_body_widget self._split_widget = split_widget + host = self._controller._host + self._project_name = host.get_current_project_name() + self._tasks_widget = tasks_widget self._side_panel = side_panel From f4578e93a9f5a8a4f86cad0a4e9510d375b0d707 Mon Sep 17 00:00:00 2001 From: Sasbom Date: Fri, 8 Aug 2025 09:16:32 +0200 Subject: [PATCH 311/595] embiggen first panel to accommodate added ui element --- client/ayon_core/tools/workfiles/widgets/window.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/workfiles/widgets/window.py b/client/ayon_core/tools/workfiles/widgets/window.py index 1e78b89851..7c00499b2d 100644 --- a/client/ayon_core/tools/workfiles/widgets/window.py +++ b/client/ayon_core/tools/workfiles/widgets/window.py @@ -107,7 +107,7 @@ class WorkfilesToolWindow(QtWidgets.QWidget): split_widget.addWidget(tasks_widget) split_widget.addWidget(col_3_widget) split_widget.addWidget(side_panel) - split_widget.setSizes([255, 175, 550, 190]) + split_widget.setSizes([350, 175, 550, 190]) body_layout.addWidget(split_widget) From 0d945c90ecf37c794f84ff7048c0e0474de30bf1 Mon Sep 17 00:00:00 2001 From: Sasbom Date: Fri, 8 Aug 2025 10:17:13 +0200 Subject: [PATCH 312/595] neaten up project name retrieval through canonical means --- client/ayon_core/tools/workfiles/widgets/window.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/ayon_core/tools/workfiles/widgets/window.py b/client/ayon_core/tools/workfiles/widgets/window.py index 7c00499b2d..3f96f0bb15 100644 --- a/client/ayon_core/tools/workfiles/widgets/window.py +++ b/client/ayon_core/tools/workfiles/widgets/window.py @@ -157,8 +157,7 @@ class WorkfilesToolWindow(QtWidgets.QWidget): self._home_body_widget = home_body_widget self._split_widget = split_widget - host = self._controller._host - self._project_name = host.get_current_project_name() + self._project_name = self._controller.get_current_project_name() self._tasks_widget = tasks_widget self._side_panel = side_panel From 80cd3a3ea811dc70dd2e0c44b22eb42ebb8d4d40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Fri, 8 Aug 2025 12:23:43 +0200 Subject: [PATCH 313/595] :bug: fix import --- client/ayon_core/pipeline/workfile/workfile_template_builder.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/pipeline/workfile/workfile_template_builder.py b/client/ayon_core/pipeline/workfile/workfile_template_builder.py index 9994bcfd4e..e2add99752 100644 --- a/client/ayon_core/pipeline/workfile/workfile_template_builder.py +++ b/client/ayon_core/pipeline/workfile/workfile_template_builder.py @@ -16,6 +16,7 @@ import re import collections import copy from abc import ABC, abstractmethod +from typing import Optional import ayon_api from ayon_api import ( From e07b11b7fabd89e1d9bd95697acff8a4a843d6f7 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 8 Aug 2025 13:56:30 +0200 Subject: [PATCH 314/595] change view on too much instances --- .../tools/publisher/widgets/card_view_widgets.py | 4 ++++ .../tools/publisher/widgets/overview_widget.py | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py index 5b9b104c16..3c8a99b2c9 100644 --- a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py @@ -548,6 +548,10 @@ class InstanceCardView(AbstractInstanceView): result.setWidth(width) return result + def get_current_instance_count(self) -> int: + """How many instances are currently in the view.""" + return len(self._widgets_by_id) + def _toggle_instances( self, new_value: Optional[bool], diff --git a/client/ayon_core/tools/publisher/widgets/overview_widget.py b/client/ayon_core/tools/publisher/widgets/overview_widget.py index 4ff38c26cd..27b1a2e185 100644 --- a/client/ayon_core/tools/publisher/widgets/overview_widget.py +++ b/client/ayon_core/tools/publisher/widgets/overview_widget.py @@ -513,7 +513,19 @@ class OverviewWidget(QtWidgets.QFrame): self._refresh_instances() def _on_instances_added(self): + view = self._get_current_view() + is_card_view = False + count = 0 + if isinstance(view, InstanceCardView): + is_card_view = True + count = view.get_current_instance_count() + self._refresh_instances() + if is_card_view and count < 10: + new_count = view.get_current_instance_count() + if new_count > count and new_count >= 10: + self._change_view_type() + def _on_instances_removed(self): self._refresh_instances() From de68250995e727f2804f31ad1184585576fc3ef0 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 8 Aug 2025 16:00:11 +0200 Subject: [PATCH 315/595] use parent ids structure instead of UI model to traverse hierarchy --- .../publisher/widgets/list_view_widgets.py | 80 +++++++------------ 1 file changed, 31 insertions(+), 49 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index a2aadd9cfa..62c5b6aa4c 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -485,6 +485,7 @@ class InstanceListView(AbstractInstanceView): self._widgets_by_id: dict[str, InstanceListItemWidget] = {} self._items_by_id = {} self._parent_id_by_id = {} + self._instance_ids_by_parent_id = collections.defaultdict(set) # Group by instance id for handling of active state self._group_by_instance_id = {} self._context_item = None @@ -565,10 +566,14 @@ class InstanceListView(AbstractInstanceView): # Prepare instances by their groups instances_by_group_name = collections.defaultdict(list) instances_by_parent_id = collections.defaultdict(list) + instance_ids_by_parent_id = collections.defaultdict(set) group_names = set() instance_ids = set() for instance in instance_items: instance_ids.add(instance.id) + instance_ids_by_parent_id[instance.parent_instance_id].add( + instance.id + ) if instance.parent_instance_id: instances_by_parent_id[instance.parent_instance_id].append( instance @@ -663,20 +668,19 @@ class InstanceListView(AbstractInstanceView): self._parent_id_by_id[instance_id] = parent_id - children = instances_by_parent_id.pop(instance_id, []) items_with_instance.append( ( item, instance, parent_id, is_orpaned_item, - bool(children) ) ) item.setData(instance.product_name, SORT_VALUE_ROLE) item.setData(instance.product_name, GROUP_ROLE) + children = instances_by_parent_id.pop(instance_id, []) for child in children: _queue.append((child, item, instance_id)) @@ -705,7 +709,7 @@ class InstanceListView(AbstractInstanceView): parent_item.appendRows(items) for ( - item, instance, parent_id, is_orpaned_item, has_children + item, instance, parent_id, is_orpaned_item ) in items_with_instance: context_info = context_info_by_id[instance.id] # TODO expand all parents @@ -752,6 +756,7 @@ class InstanceListView(AbstractInstanceView): widget.deleteLater() self._widgets_by_id = widgets_by_id + self._instance_ids_by_parent_id = instance_ids_by_parent_id # Expand items marked for expanding items_to_expand = [] @@ -1022,29 +1027,16 @@ class InstanceListView(AbstractInstanceView): instance_ids = set(instance_items_by_id) available_ids = set(instance_ids) - group_items = list(self._group_items.values()) - if self._missing_parent_item is not None: - group_items.append(self._missing_parent_item) - _queue = collections.deque() - for group_item in group_items: - if not group_item.hasChildren(): - continue - - children = [ - group_item.child(row) - for row in range(group_item.rowCount()) - ] - _queue.append((children, True)) + _queue.append((set(self._instance_ids_by_parent_id[None]), True)) discarted_ids = set() while _queue: if not instance_ids: break - children, parent_active = _queue.popleft() - for child in children: - instance_id = child.data(INSTANCE_ID_ROLE) + children_ids, parent_active = _queue.popleft() + for instance_id in children_ids: widget = self._widgets_by_id[instance_id] # Add children ids to 'instance_ids' to traverse them too add_children = False @@ -1066,23 +1058,24 @@ class InstanceListView(AbstractInstanceView): instance_ids.discard(instance_id) discarted_ids.add(instance_id) - if not child.hasChildren(): + if not add_children: continue - children = [ - child.child(row) - for row in range(child.rowCount()) - ] - if add_children: - for new_child in children: - instance_id = new_child.data(INSTANCE_ID_ROLE) - if instance_id not in discarted_ids: - instance_ids.add(instance_id) + _children = { + child_id + for child_id in ( + self._instance_ids_by_parent_id[instance_id] + ) + if child_id not in discarted_ids + } + + if _children: + instance_ids |= _children + _queue.append((_children, widget.is_active())) if not instance_ids: break - _queue.append((children, widget.is_active())) def _on_active_changed(self, changed_instance_id, new_value): self._toggle_active_state(new_value, changed_instance_id) @@ -1097,23 +1090,12 @@ class InstanceListView(AbstractInstanceView): instance_ids = {active_id} active_by_id = {} - # Change the states from top to bottom - group_items = list(self._group_items.values()) - if self._missing_parent_item is not None: - group_items.append(self._missing_parent_item) - _queue = collections.deque() - for group_item in group_items: - children = [ - group_item.child(row) - for row in range(group_item.rowCount()) - ] - _queue.append((children, True)) + _queue.append((set(self._instance_ids_by_parent_id[None]), True)) while _queue: - children, parent_active = _queue.popleft() - for child in children: - instance_id = child.data(INSTANCE_ID_ROLE) + children_ids, parent_active = _queue.popleft() + for instance_id in children_ids: widget = self._widgets_by_id[instance_id] widget.set_parent_is_active(parent_active) if instance_id in instance_ids: @@ -1123,11 +1105,11 @@ class InstanceListView(AbstractInstanceView): widget.set_active(value) active_by_id[instance_id] = value - children = [ - child.child(row) - for row in range(child.rowCount()) - ] - _queue.append((children, widget.is_active())) + children = set( + self._instance_ids_by_parent_id[instance_id] + ) + if children: + _queue.append((children, widget.is_active())) self._controller.set_instances_active_state(active_by_id) From 4fda90d135430087fde7631b2acd36d1123fd634 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 8 Aug 2025 16:00:25 +0200 Subject: [PATCH 316/595] added 3rd view --- .../publisher/widgets/list_view_widgets.py | 17 ++++++++++++-- .../publisher/widgets/overview_widget.py | 23 +++++++++++++++---- .../tools/publisher/widgets/widgets.py | 13 +++++++---- 3 files changed, 43 insertions(+), 10 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index 62c5b6aa4c..89ed60a076 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -491,6 +491,7 @@ class InstanceListView(AbstractInstanceView): self._context_item = None self._context_widget = None self._missing_parent_item = None + self._parent_grouping = True self._convertor_group_item = None self._convertor_group_widget = None @@ -578,7 +579,8 @@ class InstanceListView(AbstractInstanceView): instances_by_parent_id[instance.parent_instance_id].append( instance ) - continue + if self._parent_grouping: + continue group_label = instance.group_label group_names.add(group_label) @@ -664,6 +666,9 @@ class InstanceListView(AbstractInstanceView): new_items[parent_id].append(item) elif item.parent() is not parent_item: + current_parent = item.parent() + if current_parent is not None: + current_parent.takeRow(item.row()) new_items[parent_id].append(item) self._parent_id_by_id[instance_id] = parent_id @@ -680,6 +685,9 @@ class InstanceListView(AbstractInstanceView): item.setData(instance.product_name, SORT_VALUE_ROLE) item.setData(instance.product_name, GROUP_ROLE) + if not self._parent_grouping: + continue + children = instances_by_parent_id.pop(instance_id, []) for child in children: _queue.append((child, item, instance_id)) @@ -701,7 +709,7 @@ class InstanceListView(AbstractInstanceView): # Add items under group item for parent_id, items in new_items.items(): - if parent_id is None: + if parent_id is None or not self._parent_grouping: parent_item = group_item else: parent_item = self._items_by_id[parent_id] @@ -1076,6 +1084,11 @@ class InstanceListView(AbstractInstanceView): if not instance_ids: break + def parent_grouping_enabled(self) -> bool: + return self._parent_grouping + + def set_parent_grouping(self, parent_grouping: bool) -> None: + self._parent_grouping = parent_grouping def _on_active_changed(self, changed_instance_id, new_value): self._toggle_active_state(new_value, changed_instance_id) diff --git a/client/ayon_core/tools/publisher/widgets/overview_widget.py b/client/ayon_core/tools/publisher/widgets/overview_widget.py index 27b1a2e185..cb7e2b39cf 100644 --- a/client/ayon_core/tools/publisher/widgets/overview_widget.py +++ b/client/ayon_core/tools/publisher/widgets/overview_widget.py @@ -411,14 +411,27 @@ class OverviewWidget(QtWidgets.QFrame): return convertor_identifiers def _change_view_type(self): + old_view = self._get_current_view() + if ( + isinstance(old_view, InstanceListView) + and not old_view.parent_grouping_enabled() + ): + self._change_view_btn.set_view_type("card") + old_view.set_parent_grouping(True) + old_view.refresh() + old_view.set_refreshed(True) + return + idx = self._product_views_layout.currentIndex() new_idx = (idx + 1) % self._product_views_layout.count() - old_view = self._get_current_view() new_view = self._get_view_by_idx(new_idx) - is_list_view = isinstance(new_view, InstanceListView) + if isinstance(new_view, InstanceListView): + new_view.set_parent_grouping(False) + new_view.refresh() + new_view.set_refreshed(True) - if not new_view.refreshed: + elif not new_view.refreshed: new_view.refresh() new_view.set_refreshed(True) else: @@ -432,7 +445,9 @@ class OverviewWidget(QtWidgets.QFrame): ) self._change_view_btn.set_view_type( - "card" if is_list_view else "list" + "list" + if isinstance(new_view, InstanceCardView) + else "list-parent-grouping" ) self._product_views_layout.setCurrentIndex(new_idx) diff --git a/client/ayon_core/tools/publisher/widgets/widgets.py b/client/ayon_core/tools/publisher/widgets/widgets.py index b1c4a3afcc..921a13ba77 100644 --- a/client/ayon_core/tools/publisher/widgets/widgets.py +++ b/client/ayon_core/tools/publisher/widgets/widgets.py @@ -289,7 +289,7 @@ class RemoveInstanceBtn(PublishIconBtn): class ChangeViewBtn(IconButton): - """Create toggle view button.""" + """Toggle views button.""" def __init__(self, parent=None): super().__init__(parent) self.set_view_type("list") @@ -297,12 +297,17 @@ class ChangeViewBtn(IconButton): def set_view_type(self, view_type): if view_type == "list": # icon_name = "data_table" - icon_name = "view_agenda" - tooltip = "Change to list view" - else: icon_name = "dehaze" + tooltip = "Change to list view" + elif view_type == "card": + icon_name = "view_agenda" tooltip = "Change to card view" + else: + icon_name = "segment" + tooltip = "Change to parent grouping view" + # "format_align_right" + # "segment" icon = get_qt_icon({ "type": "material-symbols", "name": icon_name, From 78faa1c36f95ba30fe25cf1e2abf02289f234216 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 8 Aug 2025 16:06:03 +0200 Subject: [PATCH 317/595] formatting fix --- client/ayon_core/tools/publisher/widgets/widgets.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/tools/publisher/widgets/widgets.py b/client/ayon_core/tools/publisher/widgets/widgets.py index 921a13ba77..793b0f501b 100644 --- a/client/ayon_core/tools/publisher/widgets/widgets.py +++ b/client/ayon_core/tools/publisher/widgets/widgets.py @@ -406,7 +406,6 @@ class AbstractInstanceView(QtWidgets.QWidget): ) - class ClickableLineEdit(QtWidgets.QLineEdit): """QLineEdit capturing left mouse click. From f11fe9c089b775d431d458c15d1022b24d9a7c2a Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 12 Aug 2025 17:52:10 +0200 Subject: [PATCH 318/595] allow copy of published workfile without task --- client/ayon_core/tools/workfiles/widgets/files_widget.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/workfiles/widgets/files_widget.py b/client/ayon_core/tools/workfiles/widgets/files_widget.py index 0c8ad392e2..9c12fa575c 100644 --- a/client/ayon_core/tools/workfiles/widgets/files_widget.py +++ b/client/ayon_core/tools/workfiles/widgets/files_widget.py @@ -287,10 +287,11 @@ class FilesWidget(QtWidgets.QWidget): def _update_published_btns_state(self): enabled = ( self._valid_representation_id - and self._valid_selected_context and self._is_save_enabled ) - self._published_btn_copy_n_open.setEnabled(enabled) + self._published_btn_copy_n_open.setEnabled( + enabled and self._valid_selected_context + ) self._published_btn_change_context.setEnabled(enabled) def _update_workarea_btns_state(self): From 2757c6efbb7e68c6c0ff1ac43e6d4b0bef2c2971 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Tue, 12 Aug 2025 18:42:49 +0200 Subject: [PATCH 319/595] :sparkles: very raw WIP version --- .../plugins/load/create_hero_version.py | 415 ++++++++++++++++++ 1 file changed, 415 insertions(+) create mode 100644 client/ayon_core/plugins/load/create_hero_version.py diff --git a/client/ayon_core/plugins/load/create_hero_version.py b/client/ayon_core/plugins/load/create_hero_version.py new file mode 100644 index 0000000000..7e1a0d8a3d --- /dev/null +++ b/client/ayon_core/plugins/load/create_hero_version.py @@ -0,0 +1,415 @@ + +import os +import copy +import shutil +import errno +import itertools +from concurrent.futures import ThreadPoolExecutor + +from speedcopy import copyfile +import clique +import ayon_api +from ayon_api.operations import OperationsSession, new_version_entity +from ayon_api.utils import create_entity_id +from qtpy import QtWidgets, QtCore +from ayon_core import style +from ayon_core.pipeline import load, Anatomy +from ayon_core.lib import create_hard_link, source_hash +from ayon_core.lib.file_transaction import wait_for_future_errors +from ayon_core.pipeline.publish import get_publish_template_name +from ayon_core.pipeline.template_data import get_template_data + + +def prepare_changes(old_entity, new_entity): + changes = {} + for key in set(new_entity.keys()): + if key == "attrib": + continue + if key in new_entity and new_entity[key] != old_entity.get(key): + changes[key] = new_entity[key] + attrib_changes = {} + if "attrib" in new_entity: + for key, value in new_entity["attrib"].items(): + if value != old_entity["attrib"].get(key): + attrib_changes[key] = value + if attrib_changes: + changes["attrib"] = attrib_changes + return changes + + +class CreateHeroVersion(load.ProductLoaderPlugin): + """Create hero version from selected context.""" + + is_multiple_contexts_compatible = False + representations = {"*"} + product_types = {"*"} + label = "Create Hero Version" + order = 36 + icon = "star" + color = "#ffd700" + + ignored_representation_names = [] + db_representation_context_keys = [ + "project", "folder", "asset", "hierarchy", "task", "product", + "subset", "family", "representation", "username", "user", "output" + ] + use_hardlinks = False + + def message(self, text): + msgBox = QtWidgets.QMessageBox() + msgBox.setText(text) + msgBox.setStyleSheet(style.load_stylesheet()) + msgBox.setWindowFlags( + msgBox.windowFlags() | QtCore.Qt.FramelessWindowHint + ) + msgBox.exec_() + + + def load(self, context, name=None, namespace=None, options=None) -> None: + """Load hero version from context (dict as in context.py).""" + success = True + errors = [] + + # Extract project, product, version, folder from context + project = context.get("project") + product = context.get("product") + version = context.get("version") + folder = context.get("folder") + task_entity = ayon_api.get_task_by_id( + task_id=version.get("taskId"), project_name=project["name"]) + + anatomy = Anatomy(project["name"]) + + version_id = version["id"] + project_name = project["name"] + repres = list( + ayon_api.get_representations(project_name, version_ids={version_id})) + anatomy_data = get_template_data( + project_entity=project, + folder_entity=folder, + task_entity=task_entity, + ) + anatomy_data["product"] = { + "name": product["name"], + "type": product["productType"], + } + published_representations = {} + for repre in repres: + repre_anatomy = anatomy_data + repre_anatomy["ext"] = repre.get("ext", "") + published_representations[repre["id"]] = { + "representation": repre, + "published_files": [f["path"] for f in repre.get("files", [])], + "anatomy_data": repre_anatomy + } + + instance_data = { + "productName": product["name"], + "productType": product["productType"], + "anatomyData": anatomy_data, + "publishDir": "", # TODO: Set to actual publish directory + "published_representations": published_representations, + "versionEntity": version, + } + + try: + self.create_hero_version(instance_data, anatomy, context) + except Exception as exc: + success = False + errors.append(str(exc)) + if success: + self.message("Hero version created successfully.") + else: + self.message( + f"Failed to create hero version:\n{chr(10).join(errors)}") + + def create_hero_version(self, instance_data, anatomy, context): + """Create hero version from instance data.""" + published_repres = instance_data.get("published_representations") + if not published_repres: + raise RuntimeError("No published representations found.") + + project_name = anatomy.project_name + template_key = get_publish_template_name( + project_name, + context.get("hostName"), + instance_data.get("productType"), + instance_data.get("anatomyData", {}).get("task", {}).get("name"), + instance_data.get("anatomyData", {}).get("task", {}).get("type"), + project_settings=context.get("project_settings", {}), + hero=True, + logger=None + ) + hero_template = anatomy.get_template_item("hero", template_key, "path", default=None) + if hero_template is None: + raise RuntimeError(f"Project anatomy does not have hero template key: {template_key}") + + print(f"Hero template: {hero_template.template}") + + hero_publish_dir = self.get_publish_dir(instance_data, anatomy, template_key) + + print(f"Hero publish dir: {hero_publish_dir}") + + src_version_entity = instance_data.get("versionEntity") + filtered_repre_ids = [] + for repre_id, repre_info in published_repres.items(): + repre = repre_info["representation"] + if repre["name"].lower() in self.ignored_representation_names: + filtered_repre_ids.append(repre_id) + for repre_id in filtered_repre_ids: + published_repres.pop(repre_id, None) + if not published_repres: + raise RuntimeError("All published representations were filtered by name.") + + if src_version_entity is None: + src_version_entity = self.version_from_representations(project_name, published_repres) + if not src_version_entity: + raise RuntimeError("Can't find origin version in database.") + if src_version_entity["version"] == 0: + raise RuntimeError("Version 0 cannot have hero version.") + + all_copied_files = [] + transfers = instance_data.get("transfers", list()) + for _src, dst in transfers: + dst = os.path.normpath(dst) + if dst not in all_copied_files: + all_copied_files.append(dst) + hardlinks = instance_data.get("hardlinks", list()) + for _src, dst in hardlinks: + dst = os.path.normpath(dst) + if dst not in all_copied_files: + all_copied_files.append(dst) + + all_repre_file_paths = [] + for repre_info in published_repres.values(): + published_files = repre_info.get("published_files") or [] + for file_path in published_files: + file_path = os.path.normpath(file_path) + if file_path not in all_repre_file_paths: + all_repre_file_paths.append(file_path) + + instance_publish_dir = os.path.normpath(instance_data["publishDir"]) + other_file_paths_mapping = [] + for file_path in all_copied_files: + if not file_path.startswith(instance_publish_dir): + continue + if file_path in all_repre_file_paths: + continue + dst_filepath = file_path.replace(instance_publish_dir, hero_publish_dir) + other_file_paths_mapping.append((file_path, dst_filepath)) + + old_version, old_repres = self.current_hero_ents(project_name, src_version_entity) + inactive_old_repres_by_name = {} + old_repres_by_name = {} + for repre in old_repres: + low_name = repre["name"].lower() + if repre["active"]: + old_repres_by_name[low_name] = repre + else: + inactive_old_repres_by_name[low_name] = repre + + op_session = OperationsSession() + entity_id = old_version["id"] if old_version else None + new_hero_version = new_version_entity( + -src_version_entity["version"], + src_version_entity["productId"], + task_id=src_version_entity.get("taskId"), + data=copy.deepcopy(src_version_entity["data"]), + attribs=copy.deepcopy(src_version_entity["attrib"]), + entity_id=entity_id, + ) + if old_version: + update_data = prepare_changes(old_version, new_hero_version) + op_session.update_entity(project_name, "version", old_version["id"], update_data) + else: + op_session.create_entity(project_name, "version", new_hero_version) + + # Store hero entity to instance_data + instance_data["heroVersionEntity"] = new_hero_version + + old_repres_to_replace = {} + old_repres_to_delete = {} + for repre_info in published_repres.values(): + repre = repre_info["representation"] + repre_name_low = repre["name"].lower() + if repre_name_low in old_repres_by_name: + old_repres_to_replace[repre_name_low] = old_repres_by_name.pop(repre_name_low) + if old_repres_by_name: + old_repres_to_delete = old_repres_by_name + + backup_hero_publish_dir = None + if os.path.exists(hero_publish_dir): + backup_hero_publish_dir = hero_publish_dir + ".BACKUP" + max_idx = 10 + idx = 0 + _backup_hero_publish_dir = backup_hero_publish_dir + while os.path.exists(_backup_hero_publish_dir): + try: + shutil.rmtree(_backup_hero_publish_dir) + backup_hero_publish_dir = _backup_hero_publish_dir + break + except Exception: + _backup_hero_publish_dir = backup_hero_publish_dir + str(idx) + if not os.path.exists(_backup_hero_publish_dir): + backup_hero_publish_dir = _backup_hero_publish_dir + break + if idx > max_idx: + raise AssertionError(f"Backup folders are fully occupied to max index {max_idx}") + idx += 1 + try: + os.rename(hero_publish_dir, backup_hero_publish_dir) + except PermissionError: + raise AssertionError( + "Could not create hero version because it is " + "not possible to replace current hero files.") + + try: + src_to_dst_file_paths = [] + repre_integrate_data = [] + path_template_obj = anatomy.get_template_item( + "hero", template_key, "path") + for repre_info in published_repres.values(): + published_files = repre_info["published_files"] + if len(published_files) == 0: + continue + anatomy_data = copy.deepcopy(repre_info["anatomy_data"]) + anatomy_data.pop("version", None) + template_filled = path_template_obj.format_strict(anatomy_data) + repre_context = template_filled.used_values + for key in self.db_representation_context_keys: + value = anatomy_data.get(key) + if value is not None: + repre_context[key] = value + repre_entity = copy.deepcopy(repre_info["representation"]) + repre_entity.pop("id", None) + repre_entity["versionId"] = new_hero_version["id"] + repre_entity["context"] = repre_context + repre_entity["attrib"] = { + "path": str(template_filled), + "template": hero_template.template + } + dst_paths = [] + if len(published_files) == 1: + dst_paths.append(str(template_filled)) + src_to_dst_file_paths.append((published_files[0], template_filled)) + print(f"Single published file: {published_files[0]} -> {template_filled}") + else: + collections, remainders = clique.assemble(published_files) + if remainders or not collections or len(collections) > 1: + raise Exception( + "Integrity error. Files of published representation is " + "combination of frame collections and single files.") + src_col = collections[0] + frame_splitter = "_-_FRAME_SPLIT_-_" + anatomy_data["frame"] = frame_splitter + _template_filled = path_template_obj.format_strict(anatomy_data) + head, tail = _template_filled.split(frame_splitter) + padding = anatomy.templates_obj.frame_padding + dst_col = clique.Collection(head=head, padding=padding, tail=tail) + dst_col.indexes.clear() + dst_col.indexes.update(src_col.indexes) + for src_file, dst_file in zip(src_col, dst_col): + src_to_dst_file_paths.append((src_file, dst_file)) + dst_paths.append(dst_file) + print(f"Collection published file: {src_file} -> {dst_file}") + repre_integrate_data.append((repre_entity, dst_paths)) + + # Copy files + with ThreadPoolExecutor(max_workers=8) as executor: + futures = [ + executor.submit(self.copy_file, src_path, dst_path) + for src_path, dst_path in itertools.chain(src_to_dst_file_paths, other_file_paths_mapping) + ] + wait_for_future_errors(executor, futures) + + # Update/create representations + for repre_entity, dst_paths in repre_integrate_data: + repre_files = self.get_files_info(dst_paths, anatomy) + repre_entity["files"] = repre_files + repre_name_low = repre_entity["name"].lower() + if repre_name_low in old_repres_to_replace: + old_repre = old_repres_to_replace.pop(repre_name_low) + repre_entity["id"] = old_repre["id"] + update_data = prepare_changes(old_repre, repre_entity) + op_session.update_entity(project_name, "representation", old_repre["id"], update_data) + elif repre_name_low in inactive_old_repres_by_name: + inactive_repre = inactive_old_repres_by_name.pop(repre_name_low) + repre_entity["id"] = inactive_repre["id"] + update_data = prepare_changes(inactive_repre, repre_entity) + op_session.update_entity(project_name, "representation", inactive_repre["id"], update_data) + else: + op_session.create_entity(project_name, "representation", repre_entity) + + for repre in old_repres_to_delete.values(): + op_session.update_entity(project_name, "representation", repre["id"], {"active": False}) + + op_session.commit() + + if backup_hero_publish_dir is not None and os.path.exists(backup_hero_publish_dir): + shutil.rmtree(backup_hero_publish_dir) + + except Exception: + if backup_hero_publish_dir is not None and os.path.exists(backup_hero_publish_dir): + if os.path.exists(hero_publish_dir): + shutil.rmtree(hero_publish_dir) + os.rename(backup_hero_publish_dir, hero_publish_dir) + raise + + def get_files_info(self, filepaths, anatomy): + file_infos = [] + for filepath in filepaths: + file_info = self.prepare_file_info(filepath, anatomy) + file_infos.append(file_info) + return file_infos + + def prepare_file_info(self, path, anatomy): + return { + "id": create_entity_id(), + "name": os.path.basename(path), + "path": self.get_rootless_path(anatomy, path), + "size": os.path.getsize(path), + "hash": source_hash(path), + "hash_type": "op3", + } + + def get_publish_dir(self, instance_data, anatomy, template_key): + template_data = copy.deepcopy(instance_data.get("anatomyData", {})) + if "originalBasename" in instance_data: + template_data["originalBasename"] = instance_data["originalBasename"] + template_obj = anatomy.get_template_item("hero", template_key, "directory") + return os.path.normpath(template_obj.format_strict(template_data)) + + def get_rootless_path(self, anatomy, path): + success, rootless_path = anatomy.find_root_template_from_path(path) + if success: + path = rootless_path + return path + + def copy_file(self, src_path, dst_path): + dirname = os.path.dirname(dst_path) + try: + os.makedirs(dirname) + except OSError as exc: + if exc.errno != errno.EEXIST: + raise + if self.use_hardlinks: + try: + create_hard_link(src_path, dst_path) + return + except OSError as exc: + if exc.errno not in [errno.EXDEV, errno.EINVAL]: + raise + copyfile(src_path, dst_path) + + def version_from_representations(self, project_name, repres): + for repre_info in repres.values(): + version = ayon_api.get_version_by_id(project_name, repre_info["representation"]["versionId"]) + if version: + return version + + def current_hero_ents(self, project_name, version): + hero_version = ayon_api.get_hero_version_by_product_id(project_name, version["productId"]) + if not hero_version: + return (None, []) + hero_repres = list(ayon_api.get_representations(project_name, version_ids={hero_version["id"]})) + return (hero_version, hero_repres) From 8faac875a491a113471464e0957941245a883134 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 13 Aug 2025 10:15:20 +0200 Subject: [PATCH 320/595] fix group checkbox functionality --- .../ayon_core/tools/publisher/widgets/list_view_widgets.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index 89ed60a076..c54f9b94b0 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -1097,8 +1097,10 @@ class InstanceListView(AbstractInstanceView): self, new_value: Optional[bool], active_id: Optional[str] = None, + instance_ids: Optional[set[str]] = None, ) -> None: - instance_ids, _, _ = self.get_selected_items() + if instance_ids is None: + instance_ids, _, _ = self.get_selected_items() if active_id and active_id not in instance_ids: instance_ids = {active_id} @@ -1163,7 +1165,7 @@ class InstanceListView(AbstractInstanceView): instance_id = child.data(INSTANCE_ID_ROLE) instance_ids.add(instance_id) - self._toggle_active_state(active) + self._toggle_active_state(active, instance_ids=instance_ids) proxy_index = self._proxy_model.mapFromSource(group_item.index()) if not self._instance_view.isExpanded(proxy_index): From b66f4fe325f5d1fee9df4ce75fab176cab7fa4a8 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 13 Aug 2025 11:47:12 +0200 Subject: [PATCH 321/595] emit event only if active actually changed --- client/ayon_core/tools/publisher/models/create.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/publisher/models/create.py b/client/ayon_core/tools/publisher/models/create.py index 0b0d287448..5098826b8b 100644 --- a/client/ayon_core/tools/publisher/models/create.py +++ b/client/ayon_core/tools/publisher/models/create.py @@ -583,15 +583,21 @@ class CreateModel: def set_instances_active_state( self, active_state_by_id: Dict[str, bool] ): + changed_ids = set() with self._create_context.bulk_value_changes(CREATE_EVENT_SOURCE): for instance_id, active in active_state_by_id.items(): instance = self._create_context.get_instance_by_id(instance_id) - instance["active"] = active + if instance["active"] is not active: + instance["active"] = active + changed_ids.add(instance_id) + + if not changed_ids: + return self._emit_event( "create.model.instances.context.changed", { - "instance_ids": set(active_state_by_id.keys()) + "instance_ids": changed_ids } ) From 822182f21a434465302961d8a20d41078d1668db Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 13 Aug 2025 11:47:32 +0200 Subject: [PATCH 322/595] fix parent active issue --- .../tools/publisher/widgets/card_view_widgets.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py index 3c8a99b2c9..1491cdf7ec 100644 --- a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py @@ -583,13 +583,16 @@ class InstanceCardView(AbstractInstanceView): instance_ids.discard(instance_id) discarted_ids.add(instance_id) add_children = True + if is_parent_active is not widget.is_parent_active(): + add_children = True + widget.set_parent_active(is_parent_active) + + old_value = widget.is_active() value = new_value if value is None: - value = not widget.is_active() - old_value = widget.is_active() + value = not old_value widget.set_active(value) - if old_value is not widget.is_active(): - active_by_id[instance_id] = value + active_by_id[instance_id] = widget.is_active() if ( instance_id in instance_ids From 2d97cc9a29b5d28fdf6efadc0108690192693c63 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 13 Aug 2025 11:48:28 +0200 Subject: [PATCH 323/595] don't re-using the same view --- .../publisher/widgets/overview_widget.py | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/overview_widget.py b/client/ayon_core/tools/publisher/widgets/overview_widget.py index cb7e2b39cf..01799ac908 100644 --- a/client/ayon_core/tools/publisher/widgets/overview_widget.py +++ b/client/ayon_core/tools/publisher/widgets/overview_widget.py @@ -48,10 +48,16 @@ class OverviewWidget(QtWidgets.QFrame): product_view_cards = InstanceCardView(controller, product_views_widget) product_list_view = InstanceListView(controller, product_views_widget) + product_list_view.set_parent_grouping(False) + product_list_view_grouped = InstanceListView( + controller, product_views_widget + ) + product_list_view_grouped.set_parent_grouping(True) product_views_layout = QtWidgets.QStackedLayout() product_views_layout.addWidget(product_view_cards) product_views_layout.addWidget(product_list_view) + product_views_layout.addWidget(product_list_view_grouped) product_views_layout.setCurrentWidget(product_view_cards) # Buttons at the bottom of product view @@ -123,6 +129,12 @@ class OverviewWidget(QtWidgets.QFrame): product_list_view.double_clicked.connect( self.publish_tab_requested ) + product_list_view_grouped.selection_changed.connect( + self._on_product_change + ) + product_list_view_grouped.double_clicked.connect( + self.publish_tab_requested + ) product_view_cards.selection_changed.connect( self._on_product_change ) @@ -174,6 +186,7 @@ class OverviewWidget(QtWidgets.QFrame): self._product_view_cards = product_view_cards self._product_list_view = product_list_view + self._product_list_view_grouped = product_list_view_grouped self._product_views_layout = product_views_layout self._create_btn = create_btn @@ -412,26 +425,12 @@ class OverviewWidget(QtWidgets.QFrame): def _change_view_type(self): old_view = self._get_current_view() - if ( - isinstance(old_view, InstanceListView) - and not old_view.parent_grouping_enabled() - ): - self._change_view_btn.set_view_type("card") - old_view.set_parent_grouping(True) - old_view.refresh() - old_view.set_refreshed(True) - return idx = self._product_views_layout.currentIndex() new_idx = (idx + 1) % self._product_views_layout.count() new_view = self._get_view_by_idx(new_idx) - if isinstance(new_view, InstanceListView): - new_view.set_parent_grouping(False) - new_view.refresh() - new_view.set_refreshed(True) - - elif not new_view.refreshed: + if not new_view.refreshed: new_view.refresh() new_view.set_refreshed(True) else: @@ -443,12 +442,13 @@ class OverviewWidget(QtWidgets.QFrame): new_view.set_selected_items( instance_ids, context_selected, convertor_identifiers ) + view_type = "list" + if new_view is self._product_list_view_grouped: + view_type = "card" + elif new_view is self._product_list_view: + view_type = "list-parent-grouping" - self._change_view_btn.set_view_type( - "list" - if isinstance(new_view, InstanceCardView) - else "list-parent-grouping" - ) + self._change_view_btn.set_view_type(view_type) self._product_views_layout.setCurrentIndex(new_idx) self._on_product_change() From e6522e4d4e80c7d00fca0994451dbf4414d45b2f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 13 Aug 2025 11:49:17 +0200 Subject: [PATCH 324/595] make sure parent is active is always checked --- .../ayon_core/tools/publisher/widgets/list_view_widgets.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index c54f9b94b0..9ea0f85bcb 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -1060,12 +1060,14 @@ class InstanceListView(AbstractInstanceView): context_info_by_id[instance_id], parent_active, ) - else: - widget.set_active(parent_active) instance_ids.discard(instance_id) discarted_ids.add(instance_id) + if parent_active is not widget.is_parent_active(): + widget.set_parent_is_active(parent_active) + add_children = True + if not add_children: continue From 10ebfa6d8e3865b6ca0a4b3ece5c3674a9317a9d Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 13 Aug 2025 11:49:28 +0200 Subject: [PATCH 325/595] few enhancements --- .../tools/publisher/widgets/list_view_widgets.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index 9ea0f85bcb..86df4223a4 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -1046,10 +1046,9 @@ class InstanceListView(AbstractInstanceView): children_ids, parent_active = _queue.popleft() for instance_id in children_ids: widget = self._widgets_by_id[instance_id] - # Add children ids to 'instance_ids' to traverse them too - add_children = False + # Parent active state changed -> traverse children too + add_children = False if instance_id in instance_ids: - # Parent active state changed -> traverse children too add_children = ( parent_active is not widget.is_parent_active() ) @@ -1069,16 +1068,11 @@ class InstanceListView(AbstractInstanceView): add_children = True if not add_children: + if not instance_ids: + break continue - _children = { - child_id - for child_id in ( - self._instance_ids_by_parent_id[instance_id] - ) - if child_id not in discarted_ids - } - + _children = set(self._instance_ids_by_parent_id[instance_id]) if _children: instance_ids |= _children _queue.append((_children, widget.is_active())) From 277489b4252464230ff2574f8287f334149fa03b Mon Sep 17 00:00:00 2001 From: Ynbot Date: Wed, 13 Aug 2025 12:19:27 +0000 Subject: [PATCH 326/595] [Automated] Add generated package files from main --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index 9f1bac6805..11cbfa61b5 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.5.2+dev" +__version__ = "1.5.3" diff --git a/package.py b/package.py index 7bd806159f..012bbd081c 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.5.2+dev" +version = "1.5.3" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index e67fcc2138..91748f801b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.5.2+dev" +version = "1.5.3" description = "" authors = ["Ynput Team "] readme = "README.md" From c8f802b210026bb0b47c85efea4fe1d23c516835 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Wed, 13 Aug 2025 12:20:11 +0000 Subject: [PATCH 327/595] [Automated] Update version in package.py for develop --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index 11cbfa61b5..f2aa94020f 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.5.3" +__version__ = "1.5.3+dev" diff --git a/package.py b/package.py index 012bbd081c..07a1246c9f 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.5.3" +version = "1.5.3+dev" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index 91748f801b..ee6c35b50b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.5.3" +version = "1.5.3+dev" description = "" authors = ["Ynput Team "] readme = "README.md" From 3ef40e203bafbd229cd21417b604a939fc1cd9fb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 13 Aug 2025 12:21:07 +0000 Subject: [PATCH 328/595] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 933448a6a9..ce5982969c 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to AYON Tray options: + - 1.5.3 - 1.5.2 - 1.5.1 - 1.5.0 From 56ebe87bcb298be9507ca027248c882a6bb0ffe8 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 13 Aug 2025 14:46:09 +0200 Subject: [PATCH 329/595] fix card view changes --- .../publisher/widgets/card_view_widgets.py | 102 ++++++++++-------- 1 file changed, 55 insertions(+), 47 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py index 1491cdf7ec..24daae151a 100644 --- a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py @@ -353,7 +353,7 @@ class InstanceCardWidget(CardWidget): if not self.is_checkbox_enabled(): return if active is None: - active = not self.is_active() + active = not self._is_active self._set_checked(active) def is_parent_active(self) -> bool: @@ -453,6 +453,8 @@ class InstanceCardWidget(CardWidget): self._detail_widget.setVisible(expanded) def _on_active_change(self): + if not self.is_checkbox_enabled(): + return new_value = self._active_checkbox.isChecked() old_value = self._is_active if new_value is old_value: @@ -525,6 +527,7 @@ class InstanceCardView(AbstractInstanceView): self._widgets_by_id: dict[str, InstanceCardWidget] = {} self._widgets_by_group: dict[str, BaseGroupWidget] = {} + self._parent_id_by_id = {} self._instance_ids_by_parent_id = collections.defaultdict(set) self._explicitly_selected_instance_ids = [] @@ -552,6 +555,26 @@ class InstanceCardView(AbstractInstanceView): """How many instances are currently in the view.""" return len(self._widgets_by_id) + def _get_affected_ids(self, instance_ids: set[str]) -> set[str]: + affected_ids = set() + affected_queue = collections.deque() + affected_queue.extend(instance_ids) + while affected_queue: + instance_id = affected_queue.popleft() + if instance_id in affected_ids: + continue + affected_ids.add(instance_id) + parent_id = instance_id + while True: + parent_id = self._parent_id_by_id[parent_id] + if parent_id is None: + break + affected_ids.add(parent_id) + + child_ids = set(self._instance_ids_by_parent_id[instance_id]) + affected_queue.extend(child_ids - affected_ids) + return affected_ids + def _toggle_instances( self, new_value: Optional[bool], @@ -566,7 +589,10 @@ class InstanceCardView(AbstractInstanceView): if active_id and active_id not in instance_ids: instance_ids = {active_id} - affected_ids = set(instance_ids) + ids_to_toggle = set(instance_ids) + + affected_ids = self._get_affected_ids(instance_ids) + _queue = collections.deque() _queue.append((set(self._instance_ids_by_parent_id[None]), True)) discarted_ids = set() @@ -576,36 +602,24 @@ class InstanceCardView(AbstractInstanceView): chilren_ids, is_parent_active = _queue.pop() for instance_id in chilren_ids: - widget = self._widgets_by_id[instance_id] - add_children = False - if instance_id in affected_ids: - affected_ids.discard(instance_id) - instance_ids.discard(instance_id) - discarted_ids.add(instance_id) - add_children = True - if is_parent_active is not widget.is_parent_active(): - add_children = True - widget.set_parent_active(is_parent_active) + if instance_id not in affected_ids: + continue + widget = self._widgets_by_id[instance_id] + if is_parent_active is not widget.is_parent_active(): + widget.set_parent_active(is_parent_active) + + instance_ids.discard(instance_id) + if instance_id in ids_to_toggle: + discarted_ids.add(instance_id) old_value = widget.is_active() value = new_value if value is None: value = not old_value + widget.set_active(value) - active_by_id[instance_id] = widget.is_active() - - if ( - instance_id in instance_ids - and is_parent_active is not widget.is_parent_active() - ): - add_children = True - widget.set_parent_active(is_parent_active) - - instance_ids.discard(instance_id) - discarted_ids.add(instance_id) - - if not add_children: - continue + if widget.is_parent_active(): + active_by_id[instance_id] = widget.is_active() children_ids = self._instance_ids_by_parent_id[instance_id] children = { @@ -621,7 +635,8 @@ class InstanceCardView(AbstractInstanceView): if not instance_ids: break - self._controller.set_instances_active_state(active_by_id) + if active_by_id: + self._controller.set_instances_active_state(active_by_id) def keyPressEvent(self, event): if event.key() == QtCore.Qt.Key_Space: @@ -699,6 +714,7 @@ class InstanceCardView(AbstractInstanceView): identifiers_by_group = collections.defaultdict(set) identifiers: set[str] = set() instances_by_id = {} + parent_id_by_id = {} instance_ids_by_parent_id = collections.defaultdict(set) instance_items = self._controller.get_instance_items() for instance in instance_items: @@ -712,6 +728,7 @@ class InstanceCardView(AbstractInstanceView): instance_ids_by_parent_id[instance.parent_instance_id].add( instance.id ) + parent_id_by_id[instance.id] = instance.parent_instance_id parent_active_by_id = { instance_id: False @@ -797,6 +814,7 @@ class InstanceCardView(AbstractInstanceView): widget.setVisible(False) widget.deleteLater() + self._parent_id_by_id = parent_id_by_id self._instance_ids_by_parent_id = instance_ids_by_parent_id self._group_name_by_instance_id = group_by_instance_id self._instance_ids_by_group_name = instance_ids_by_group_name @@ -961,22 +979,23 @@ class InstanceCardView(AbstractInstanceView): ) instance_ids: set[str] = set(instance_items_by_id) available_ids: set[str] = set(instance_items_by_id) - discarted_ids: set[str] = set() + + affected_ids = self._get_affected_ids(instance_ids) _queue = collections.deque() _queue.append((set(self._instance_ids_by_parent_id[None]), True)) while _queue: - if not instance_ids: + if not affected_ids: break chilren_ids, is_parent_active = _queue.pop() for instance_id in chilren_ids: + if instance_id not in affected_ids: + continue + affected_ids.discard(instance_id) widget = self._widgets_by_id[instance_id] - add_children = False if instance_id in instance_ids: - add_children = ( - is_parent_active is not widget.is_parent_active() - ) + instance_ids.discard(instance_id) if instance_id in available_ids: available_ids.discard(instance_id) widget.update_instance( @@ -987,25 +1006,14 @@ class InstanceCardView(AbstractInstanceView): else: widget.set_parent_active(is_parent_active) - instance_ids.discard(instance_id) - discarted_ids.add(instance_id) - - if not add_children: - continue - - children_ids = self._instance_ids_by_parent_id[instance_id] - children = { - child_id - for child_id in children_ids - if child_id not in discarted_ids - } + if not affected_ids: + break + children = set(self._instance_ids_by_parent_id[instance_id]) if children: instance_ids |= children _queue.append((children, widget.is_active())) - if not instance_ids: - break def _on_active_changed(self, instance_id: str, value: bool) -> None: self._toggle_instances(value, instance_id) From ef3cf62a41779ecaac5d132c02d491e1fad2dab6 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 13 Aug 2025 15:15:18 +0200 Subject: [PATCH 330/595] fix list view refresh --- .../publisher/widgets/list_view_widgets.py | 124 ++++++++---------- 1 file changed, 56 insertions(+), 68 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index 86df4223a4..cd1a1dbb9a 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -621,6 +621,7 @@ class InstanceListView(AbstractInstanceView): orphans_item, )) + items_with_instance = {} # Process changes in each group item # - create new instance, update existing and remove not existing for group_widget, group_instances, group_item in group_items: @@ -633,26 +634,12 @@ class InstanceListView(AbstractInstanceView): # - 'None' is used if parent is group item new_items = collections.defaultdict(list) # Tuples of model item and instance itself - items_with_instance = [] - # Group activity (should be {-1;0;1} at the end) - # - 0 when all instances are disabled - # - 1 when all instances are enabled - # - -1 when it's mixed - activity = None for instance in group_instances: _queue = collections.deque() _queue.append((instance, group_item, None)) while _queue: instance, parent_item, parent_id = _queue.popleft() instance_id = instance.id - # Handle group activity - if activity is None: - activity = int(instance.is_active) - elif activity == -1: - pass - elif activity != instance.is_active: - activity = -1 - # Remove group name from groups mapping if parent_id is not None: self._group_by_instance_id.pop(instance_id, None) @@ -673,13 +660,10 @@ class InstanceListView(AbstractInstanceView): self._parent_id_by_id[instance_id] = parent_id - items_with_instance.append( - ( - item, - instance, - parent_id, - is_orpaned_item, - ) + items_with_instance[instance.id] = ( + item, + instance, + is_orpaned_item, ) item.setData(instance.product_name, SORT_VALUE_ROLE) @@ -692,15 +676,6 @@ class InstanceListView(AbstractInstanceView): for child in children: _queue.append((child, item, instance_id)) - # Set checkstate of group checkbox - if group_widget is not None: - state = QtCore.Qt.PartiallyChecked - if activity == 0: - state = QtCore.Qt.Unchecked - elif activity == 1: - state = QtCore.Qt.Checked - group_widget.set_checkstate(state) - # Process new instance items and add them to model and create # their widgets if new_items: @@ -716,48 +691,57 @@ class InstanceListView(AbstractInstanceView): parent_item.appendRows(items) - for ( - item, instance, parent_id, is_orpaned_item - ) in items_with_instance: - context_info = context_info_by_id[instance.id] - # TODO expand all parents - if not context_info.is_valid: - expand_to_items.append(item) + ids_order = [] + ids_queue = collections.deque() + ids_queue.extend(instance_ids_by_parent_id[None]) + while ids_queue: + parent_id = ids_queue.popleft() + ids_order.append(parent_id) + ids_queue.extend(instance_ids_by_parent_id[parent_id]) + ids_order.extend(set(items_with_instance) - set(ids_order)) - parent_active = True - if is_orpaned_item: - parent_active = False + for instance_id in ids_order: + item, instance, is_orpaned_item = items_with_instance[instance_id] + context_info = context_info_by_id[instance.id] + # TODO expand all parents + if not context_info.is_valid: + expand_to_items.append(item) - if parent_id: - parent_widget = widgets_by_id.get(parent_id) - parent_active = False - if parent_widget is not None: - parent_active = parent_widget.is_active() - item_index = self._instance_model.indexFromItem(item) - proxy_index = self._proxy_model.mapFromSource(item_index) - widget = self._instance_view.indexWidget(proxy_index) - if isinstance(widget, InstanceListItemWidget): - widget.update_instance( - instance, - context_info, - parent_active, - ) - else: - widget = InstanceListItemWidget( - instance, - context_info, - parent_active, - self._instance_view - ) - widget.active_changed.connect(self._on_active_changed) - widget.double_clicked.connect(self.double_clicked) - self._instance_view.setIndexWidget(proxy_index, widget) - widget.set_active_toggle_enabled( - self._active_toggle_enabled + parent_active = True + if is_orpaned_item: + parent_active = False + + parent_id = instance.parent_instance_id + if parent_id: + parent_widget = widgets_by_id.get(parent_id) + parent_active = False + if parent_widget is not None: + parent_active = parent_widget.is_active() + item_index = self._instance_model.indexFromItem(item) + proxy_index = self._proxy_model.mapFromSource(item_index) + widget = self._instance_view.indexWidget(proxy_index) + if isinstance(widget, InstanceListItemWidget): + widget.update_instance( + instance, + context_info, + parent_active, ) + else: + widget = InstanceListItemWidget( + instance, + context_info, + parent_active, + self._instance_view + ) + widget.active_changed.connect(self._on_active_changed) + widget.double_clicked.connect(self.double_clicked) + self._instance_view.setIndexWidget(proxy_index, widget) + widget.set_active_toggle_enabled( + self._active_toggle_enabled + ) - widgets_by_id[instance.id] = widget - self._widgets_by_id.pop(instance.id, None) + widgets_by_id[instance.id] = widget + self._widgets_by_id.pop(instance.id, None) for widget in self._widgets_by_id.values(): widget.setVisible(False) @@ -766,6 +750,10 @@ class InstanceListView(AbstractInstanceView): self._widgets_by_id = widgets_by_id self._instance_ids_by_parent_id = instance_ids_by_parent_id + # Set checkstate of group checkbox + for group_name in self._group_items: + self._update_group_checkstate(group_name) + # Expand items marked for expanding items_to_expand = [] _marked_ids = set() From 65d03327b8af6e630b41f17bd629115e6fd1a83d Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 13 Aug 2025 15:18:46 +0200 Subject: [PATCH 331/595] Fix typo --- client/ayon_core/tools/push_to_project/ui/window.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index 6b0363adee..344295f177 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -551,7 +551,7 @@ class PushToContextSelectWindow(QtWidgets.QWidget): self._main_thread_timer_can_stop = False self._main_thread_timer.start() self._main_layout.setCurrentWidget(self._overlay_widget) - self._overlay_label.setText("Submittion started") + self._overlay_label.setText("Submission started") def _on_controller_submit_end(self): self._main_thread_timer_can_stop = True From 152e32ac323f376a5fe04b8eaed2a3f1b132506f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 13 Aug 2025 15:20:32 +0200 Subject: [PATCH 332/595] formatting fixes --- client/ayon_core/tools/publisher/widgets/card_view_widgets.py | 1 - client/ayon_core/tools/publisher/widgets/list_view_widgets.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py index 24daae151a..84786a671e 100644 --- a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py @@ -1014,7 +1014,6 @@ class InstanceCardView(AbstractInstanceView): instance_ids |= children _queue.append((children, widget.is_active())) - def _on_active_changed(self, instance_id: str, value: bool) -> None: self._toggle_instances(value, instance_id) diff --git a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py index cd1a1dbb9a..c524b96d5f 100644 --- a/client/ayon_core/tools/publisher/widgets/list_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/list_view_widgets.py @@ -1035,7 +1035,7 @@ class InstanceListView(AbstractInstanceView): for instance_id in children_ids: widget = self._widgets_by_id[instance_id] # Parent active state changed -> traverse children too - add_children = False + add_children = False if instance_id in instance_ids: add_children = ( parent_active is not widget.is_parent_active() From 4951c9442a86bc23bd8ffa40618fc9c9676a8c49 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 14 Aug 2025 16:45:22 +0200 Subject: [PATCH 333/595] small enhancements in nice checkbox --- client/ayon_core/tools/utils/nice_checkbox.py | 200 +++++++++--------- 1 file changed, 100 insertions(+), 100 deletions(-) diff --git a/client/ayon_core/tools/utils/nice_checkbox.py b/client/ayon_core/tools/utils/nice_checkbox.py index 3d9d63b6bc..d1cc8d16f5 100644 --- a/client/ayon_core/tools/utils/nice_checkbox.py +++ b/client/ayon_core/tools/utils/nice_checkbox.py @@ -1,7 +1,8 @@ -from math import floor, sqrt, ceil +from math import floor, ceil + from qtpy import QtWidgets, QtCore, QtGui -from ayon_core.style import get_objected_colors +from ayon_core.style import load_stylesheet, get_objected_colors class NiceCheckbox(QtWidgets.QFrame): @@ -9,12 +10,15 @@ class NiceCheckbox(QtWidgets.QFrame): clicked = QtCore.Signal() _checked_bg_color = None + _checked_bg_color_disabled = None _unchecked_bg_color = None + _unchecked_bg_color_disabled = None _checker_color = None + _checker_color_disabled = None _checker_hover_color = None def __init__(self, checked=False, draw_icons=False, parent=None): - super(NiceCheckbox, self).__init__(parent) + super().__init__(parent) self.setObjectName("NiceCheckbox") self.setAttribute(QtCore.Qt.WA_TranslucentBackground) @@ -48,8 +52,6 @@ class NiceCheckbox(QtWidgets.QFrame): self._pressed = False self._under_mouse = False - self.icon_scale_factor = sqrt(2) / 2 - icon_path_stroker = QtGui.QPainterPathStroker() icon_path_stroker.setCapStyle(QtCore.Qt.RoundCap) icon_path_stroker.setJoinStyle(QtCore.Qt.RoundJoin) @@ -61,35 +63,6 @@ class NiceCheckbox(QtWidgets.QFrame): self._base_size = QtCore.QSize(90, 50) self._load_colors() - @classmethod - def _load_colors(cls): - if cls._checked_bg_color is not None: - return - - colors_info = get_objected_colors("nice-checkbox") - - cls._checked_bg_color = colors_info["bg-checked"].get_qcolor() - cls._unchecked_bg_color = colors_info["bg-unchecked"].get_qcolor() - - cls._checker_color = colors_info["bg-checker"].get_qcolor() - cls._checker_hover_color = colors_info["bg-checker-hover"].get_qcolor() - - @property - def checked_bg_color(self): - return self._checked_bg_color - - @property - def unchecked_bg_color(self): - return self._unchecked_bg_color - - @property - def checker_color(self): - return self._checker_color - - @property - def checker_hover_color(self): - return self._checker_hover_color - def setTristate(self, tristate=True): if self._is_tristate != tristate: self._is_tristate = tristate @@ -121,14 +94,14 @@ class NiceCheckbox(QtWidgets.QFrame): def setFixedHeight(self, *args, **kwargs): self._fixed_height_set = True - super(NiceCheckbox, self).setFixedHeight(*args, **kwargs) + super().setFixedHeight(*args, **kwargs) if not self._fixed_width_set: width = self.get_width_hint_by_height(self.height()) self.setFixedWidth(width) def setFixedWidth(self, *args, **kwargs): self._fixed_width_set = True - super(NiceCheckbox, self).setFixedWidth(*args, **kwargs) + super().setFixedWidth(*args, **kwargs) if not self._fixed_height_set: height = self.get_height_hint_by_width(self.width()) self.setFixedHeight(height) @@ -136,7 +109,7 @@ class NiceCheckbox(QtWidgets.QFrame): def setFixedSize(self, *args, **kwargs): self._fixed_height_set = True self._fixed_width_set = True - super(NiceCheckbox, self).setFixedSize(*args, **kwargs) + super().setFixedSize(*args, **kwargs) def steps(self): return self._steps @@ -242,7 +215,7 @@ class NiceCheckbox(QtWidgets.QFrame): if event.buttons() & QtCore.Qt.LeftButton: self._pressed = True self.repaint() - super(NiceCheckbox, self).mousePressEvent(event) + super().mousePressEvent(event) def mouseReleaseEvent(self, event): if self._pressed and not event.buttons() & QtCore.Qt.LeftButton: @@ -252,7 +225,7 @@ class NiceCheckbox(QtWidgets.QFrame): self.clicked.emit() event.accept() return - super(NiceCheckbox, self).mouseReleaseEvent(event) + super().mouseReleaseEvent(event) def mouseMoveEvent(self, event): if self._pressed: @@ -261,19 +234,19 @@ class NiceCheckbox(QtWidgets.QFrame): self._under_mouse = under_mouse self.repaint() - super(NiceCheckbox, self).mouseMoveEvent(event) + super().mouseMoveEvent(event) def enterEvent(self, event): self._under_mouse = True if self.isEnabled(): self.repaint() - super(NiceCheckbox, self).enterEvent(event) + super().enterEvent(event) def leaveEvent(self, event): self._under_mouse = False if self.isEnabled(): self.repaint() - super(NiceCheckbox, self).leaveEvent(event) + super().leaveEvent(event) def _on_animation_timeout(self): if self._checkstate == QtCore.Qt.Checked: @@ -302,24 +275,13 @@ class NiceCheckbox(QtWidgets.QFrame): @staticmethod def steped_color(color1, color2, offset_ratio): - red_dif = ( - color1.red() - color2.red() - ) - green_dif = ( - color1.green() - color2.green() - ) - blue_dif = ( - color1.blue() - color2.blue() - ) - red = int(color2.red() + ( - red_dif * offset_ratio - )) - green = int(color2.green() + ( - green_dif * offset_ratio - )) - blue = int(color2.blue() + ( - blue_dif * offset_ratio - )) + red_dif = color1.red() - color2.red() + green_dif = color1.green() - color2.green() + blue_dif = color1.blue() - color2.blue() + + red = int(color2.red() + (red_dif * offset_ratio)) + green = int(color2.green() + (green_dif * offset_ratio)) + blue = int(color2.blue() + (blue_dif * offset_ratio)) return QtGui.QColor(red, green, blue) @@ -334,20 +296,28 @@ class NiceCheckbox(QtWidgets.QFrame): painter = QtGui.QPainter(self) painter.setRenderHint(QtGui.QPainter.Antialiasing) + painter.setPen(QtCore.Qt.NoPen) # Draw inner background - if self._current_step == self._steps: - bg_color = self.checked_bg_color + if not self.isEnabled(): + bg_color = ( + self._checked_bg_color_disabled + if self._current_step == self._steps + else self._unchecked_bg_color_disabled + ) + + elif self._current_step == self._steps: + bg_color = self._checked_bg_color elif self._current_step == 0: - bg_color = self.unchecked_bg_color + bg_color = self._unchecked_bg_color else: offset_ratio = float(self._current_step) / self._steps # Animation bg bg_color = self.steped_color( - self.checked_bg_color, - self.unchecked_bg_color, + self._checked_bg_color, + self._unchecked_bg_color, offset_ratio ) @@ -378,14 +348,20 @@ class NiceCheckbox(QtWidgets.QFrame): -margin_size_c, -margin_size_c ) - if checkbox_rect.width() > checkbox_rect.height(): - radius = floor(checkbox_rect.height() * 0.5) - else: - radius = floor(checkbox_rect.width() * 0.5) + slider_rect = QtCore.QRect(checkbox_rect) + slider_offset = int( + ceil(min(slider_rect.width(), slider_rect.height())) * 0.08 + ) + if slider_offset < 1: + slider_offset = 1 + slider_rect.adjust( + slider_offset, slider_offset, + -slider_offset, -slider_offset + ) + radius = floor(min(slider_rect.width(), slider_rect.height()) * 0.5) - painter.setPen(QtCore.Qt.NoPen) painter.setBrush(bg_color) - painter.drawRoundedRect(checkbox_rect, radius, radius) + painter.drawRoundedRect(slider_rect, radius, radius) # Draw checker checker_size = size_without_margins - (margin_size_c * 2) @@ -394,9 +370,8 @@ class NiceCheckbox(QtWidgets.QFrame): - (margin_size_c * 2) - checker_size ) - if self._current_step == 0: - x_offset = 0 - else: + x_offset = 0 + if self._current_step != 0: x_offset = (float(area_width) / self._steps) * self._current_step pos_x = checkbox_rect.x() + x_offset + margin_size_c @@ -404,55 +379,80 @@ class NiceCheckbox(QtWidgets.QFrame): checker_rect = QtCore.QRect(pos_x, pos_y, checker_size, checker_size) - under_mouse = self.isEnabled() and self._under_mouse - if under_mouse: - checker_color = self.checker_hover_color - else: - checker_color = self.checker_color + checker_color = self._checker_color + if not self.isEnabled(): + checker_color = self._checker_color_disabled + elif self._under_mouse: + checker_color = self._checker_hover_color painter.setBrush(checker_color) painter.drawEllipse(checker_rect) if self._draw_icons: painter.setBrush(bg_color) - icon_path = self._get_icon_path(painter, checker_rect) + icon_path = self._get_icon_path(checker_rect) painter.drawPath(icon_path) - # Draw shadow overlay - if not self.isEnabled(): - level = 33 - alpha = 127 - painter.setPen(QtCore.Qt.transparent) - painter.setBrush(QtGui.QColor(level, level, level, alpha)) - painter.drawRoundedRect(checkbox_rect, radius, radius) - painter.end() - def _get_icon_path(self, painter, checker_rect): + @classmethod + def _load_colors(cls): + if cls._checked_bg_color is not None: + return + + colors_info = get_objected_colors("nice-checkbox") + + disabled_color = QtGui.QColor(33, 33, 33, 127) + + cls._checked_bg_color = colors_info["bg-checked"].get_qcolor() + cls._checked_bg_color_disabled = cls._merge_colors( + cls._checked_bg_color, disabled_color + ) + cls._unchecked_bg_color = colors_info["bg-unchecked"].get_qcolor() + cls._unchecked_bg_color_disabled = cls._merge_colors( + cls._unchecked_bg_color, disabled_color + ) + + cls._checker_color = colors_info["bg-checker"].get_qcolor() + cls._checker_color_disabled = cls._merge_colors( + cls._checker_color, disabled_color + ) + cls._checker_hover_color = colors_info["bg-checker-hover"].get_qcolor() + + @staticmethod + def _merge_colors(color_1, color_2): + a = color_2.alphaF() + return QtGui.QColor( + floor((color_1.red() + (color_2.red() * a)) * 0.5), + floor((color_1.green() + (color_2.green() * a)) * 0.5), + floor((color_1.blue() + (color_2.blue() * a)) * 0.5), + color_1.alpha() + ) + + def _get_icon_path(self, checker_rect): self.icon_path_stroker.setWidth(checker_rect.height() / 5) if self._current_step == self._steps: - return self._get_enabled_icon_path(painter, checker_rect) + return self._get_enabled_icon_path(checker_rect) if self._current_step == 0: - return self._get_disabled_icon_path(painter, checker_rect) + return self._get_disabled_icon_path(checker_rect) if self._current_step == self._middle_step: - return self._get_middle_circle_path(painter, checker_rect) + return self._get_middle_circle_path(checker_rect) disabled_step = self._steps - self._current_step enabled_step = self._steps - disabled_step half_steps = self._steps + 1 - ((self._steps + 1) % 2) if enabled_step > disabled_step: return self._get_enabled_icon_path( - painter, checker_rect, enabled_step, half_steps - ) - else: - return self._get_disabled_icon_path( - painter, checker_rect, disabled_step, half_steps + checker_rect, enabled_step, half_steps ) + return self._get_disabled_icon_path( + checker_rect, disabled_step, half_steps + ) - def _get_middle_circle_path(self, painter, checker_rect): + def _get_middle_circle_path(self, checker_rect): width = self.icon_path_stroker.width() path = QtGui.QPainterPath() path.addEllipse(checker_rect.center(), width, width) @@ -460,7 +460,7 @@ class NiceCheckbox(QtWidgets.QFrame): return path def _get_enabled_icon_path( - self, painter, checker_rect, step=None, half_steps=None + self, checker_rect, step=None, half_steps=None ): fifteenth = float(checker_rect.height()) / 15 # Left point @@ -509,7 +509,7 @@ class NiceCheckbox(QtWidgets.QFrame): return self.icon_path_stroker.createStroke(path) def _get_disabled_icon_path( - self, painter, checker_rect, step=None, half_steps=None + self, checker_rect, step=None, half_steps=None ): center_point = QtCore.QPointF( float(checker_rect.width()) / 2, From f4855402cf82e44554df9d471d82366c2637a2eb Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 14 Aug 2025 16:50:38 +0200 Subject: [PATCH 334/595] remove unused import --- client/ayon_core/tools/utils/nice_checkbox.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/utils/nice_checkbox.py b/client/ayon_core/tools/utils/nice_checkbox.py index d1cc8d16f5..f16b62eb9c 100644 --- a/client/ayon_core/tools/utils/nice_checkbox.py +++ b/client/ayon_core/tools/utils/nice_checkbox.py @@ -2,7 +2,7 @@ from math import floor, ceil from qtpy import QtWidgets, QtCore, QtGui -from ayon_core.style import load_stylesheet, get_objected_colors +from ayon_core.style import get_objected_colors class NiceCheckbox(QtWidgets.QFrame): From 40e8384b1cb33c0771e62eba7b0dedaac9e28e94 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 14 Aug 2025 16:50:44 +0200 Subject: [PATCH 335/595] formatting fix --- client/ayon_core/tools/utils/nice_checkbox.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/utils/nice_checkbox.py b/client/ayon_core/tools/utils/nice_checkbox.py index f16b62eb9c..c33533b0e4 100644 --- a/client/ayon_core/tools/utils/nice_checkbox.py +++ b/client/ayon_core/tools/utils/nice_checkbox.py @@ -358,7 +358,7 @@ class NiceCheckbox(QtWidgets.QFrame): slider_offset, slider_offset, -slider_offset, -slider_offset ) - radius = floor(min(slider_rect.width(), slider_rect.height()) * 0.5) + radius = floor(min(slider_rect.width(), slider_rect.height()) * 0.5) painter.setBrush(bg_color) painter.drawRoundedRect(slider_rect, radius, radius) From 65672ccafdd362be171bd48c01c01a8349ac2089 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 14 Aug 2025 17:15:07 +0200 Subject: [PATCH 336/595] removed legacy create tool --- client/ayon_core/tools/creator/model.py | 2 - client/ayon_core/tools/creator/window.py | 1 - client/ayon_core/tools/utils/host_tools.py | 60 +++++----------------- 3 files changed, 14 insertions(+), 49 deletions(-) diff --git a/client/ayon_core/tools/creator/model.py b/client/ayon_core/tools/creator/model.py index bf6c7380a1..16d24cc8bc 100644 --- a/client/ayon_core/tools/creator/model.py +++ b/client/ayon_core/tools/creator/model.py @@ -1,8 +1,6 @@ import uuid from qtpy import QtGui, QtCore -from ayon_core.pipeline import discover_legacy_creator_plugins - from . constants import ( PRODUCT_TYPE_ROLE, ITEM_ID_ROLE diff --git a/client/ayon_core/tools/creator/window.py b/client/ayon_core/tools/creator/window.py index 5d1c0a272a..fe8ee86dcf 100644 --- a/client/ayon_core/tools/creator/window.py +++ b/client/ayon_core/tools/creator/window.py @@ -15,7 +15,6 @@ from ayon_core.pipeline import ( ) from ayon_core.pipeline.create import ( PRODUCT_NAME_ALLOWED_SYMBOLS, - legacy_create, CreatorError, ) diff --git a/client/ayon_core/tools/utils/host_tools.py b/client/ayon_core/tools/utils/host_tools.py index 3d356555f3..bfd008925b 100644 --- a/client/ayon_core/tools/utils/host_tools.py +++ b/client/ayon_core/tools/utils/host_tools.py @@ -31,7 +31,6 @@ class HostToolsHelper: # Prepare attributes for all tools self._workfiles_tool = None self._loader_tool = None - self._creator_tool = None self._publisher_tool = None self._subset_manager_tool = None self._scene_inventory_tool = None @@ -96,27 +95,6 @@ class HostToolsHelper: loader_tool.refresh() - def get_creator_tool(self, parent): - """Create, cache and return creator tool window.""" - if self._creator_tool is None: - from ayon_core.tools.creator import CreatorWindow - - creator_window = CreatorWindow(parent=parent or self._parent) - self._creator_tool = creator_window - - return self._creator_tool - - def show_creator(self, parent=None): - """Show tool to create new instantes for publishing.""" - with qt_app_context(): - creator_tool = self.get_creator_tool(parent) - creator_tool.refresh() - creator_tool.show() - - # Pull window to the front. - creator_tool.raise_() - creator_tool.activateWindow() - def get_subset_manager_tool(self, parent): """Create, cache and return subset manager tool window.""" if self._subset_manager_tool is None: @@ -261,35 +239,32 @@ class HostToolsHelper: if tool_name == "workfiles": return self.get_workfiles_tool(parent, *args, **kwargs) - elif tool_name == "loader": + if tool_name == "loader": return self.get_loader_tool(parent, *args, **kwargs) - elif tool_name == "libraryloader": + if tool_name == "libraryloader": return self.get_library_loader_tool(parent, *args, **kwargs) - elif tool_name == "creator": - return self.get_creator_tool(parent, *args, **kwargs) - - elif tool_name == "subsetmanager": + if tool_name == "subsetmanager": return self.get_subset_manager_tool(parent, *args, **kwargs) - elif tool_name == "sceneinventory": + if tool_name == "sceneinventory": return self.get_scene_inventory_tool(parent, *args, **kwargs) - elif tool_name == "publish": - self.log.info("Can't return publish tool window.") - - # "new" publisher - elif tool_name == "publisher": + if tool_name == "publisher": return self.get_publisher_tool(parent, *args, **kwargs) - elif tool_name == "experimental_tools": + if tool_name == "experimental_tools": return self.get_experimental_tools_dialog(parent, *args, **kwargs) - else: - self.log.warning( - "Can't show unknown tool name: \"{}\"".format(tool_name) - ) + if tool_name == "publish": + self.log.info("Can't return publish tool window.") + return None + + self.log.warning( + "Can't show unknown tool name: \"{}\"".format(tool_name) + ) + return None def show_tool_by_name(self, tool_name, parent=None, *args, **kwargs): """Show tool by it's name. @@ -305,9 +280,6 @@ class HostToolsHelper: elif tool_name == "libraryloader": self.show_library_loader(parent, *args, **kwargs) - elif tool_name == "creator": - self.show_creator(parent, *args, **kwargs) - elif tool_name == "subsetmanager": self.show_subset_manager(parent, *args, **kwargs) @@ -379,10 +351,6 @@ def show_library_loader(parent=None): _SingletonPoint.show_tool_by_name("libraryloader", parent) -def show_creator(parent=None): - _SingletonPoint.show_tool_by_name("creator", parent) - - def show_subset_manager(parent=None): _SingletonPoint.show_tool_by_name("subsetmanager", parent) From 81d30462e26d4ae05f853c06fe23c00f7ba5946f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 14 Aug 2025 17:15:31 +0200 Subject: [PATCH 337/595] removed legacy create and related functions --- client/ayon_core/pipeline/__init__.py | 8 - client/ayon_core/pipeline/create/__init__.py | 14 -- .../pipeline/create/creator_plugins.py | 58 ----- .../pipeline/create/legacy_create.py | 216 ------------------ 4 files changed, 296 deletions(-) delete mode 100644 client/ayon_core/pipeline/create/legacy_create.py diff --git a/client/ayon_core/pipeline/__init__.py b/client/ayon_core/pipeline/__init__.py index 137736c302..65ad55d06e 100644 --- a/client/ayon_core/pipeline/__init__.py +++ b/client/ayon_core/pipeline/__init__.py @@ -19,9 +19,6 @@ from .create import ( CreatedInstance, CreatorError, - LegacyCreator, - legacy_create, - discover_creator_plugins, discover_legacy_creator_plugins, register_creator_plugin, @@ -141,12 +138,7 @@ __all__ = ( "CreatorError", - # - legacy creation - "LegacyCreator", - "legacy_create", - "discover_creator_plugins", - "discover_legacy_creator_plugins", "register_creator_plugin", "deregister_creator_plugin", "register_creator_plugin_path", diff --git a/client/ayon_core/pipeline/create/__init__.py b/client/ayon_core/pipeline/create/__init__.py index ced43528eb..2f076b63f6 100644 --- a/client/ayon_core/pipeline/create/__init__.py +++ b/client/ayon_core/pipeline/create/__init__.py @@ -44,9 +44,6 @@ from .creator_plugins import ( AutoCreator, HiddenCreator, - discover_legacy_creator_plugins, - get_legacy_creator_by_name, - discover_creator_plugins, register_creator_plugin, deregister_creator_plugin, @@ -58,11 +55,6 @@ from .creator_plugins import ( from .context import CreateContext -from .legacy_create import ( - LegacyCreator, - legacy_create, -) - __all__ = ( "PRODUCT_NAME_ALLOWED_SYMBOLS", @@ -105,9 +97,6 @@ __all__ = ( "AutoCreator", "HiddenCreator", - "discover_legacy_creator_plugins", - "get_legacy_creator_by_name", - "discover_creator_plugins", "register_creator_plugin", "deregister_creator_plugin", @@ -117,7 +106,4 @@ __all__ = ( "cache_and_get_instances", "CreateContext", - - "LegacyCreator", - "legacy_create", ) diff --git a/client/ayon_core/pipeline/create/creator_plugins.py b/client/ayon_core/pipeline/create/creator_plugins.py index cbc06145fb..b890704649 100644 --- a/client/ayon_core/pipeline/create/creator_plugins.py +++ b/client/ayon_core/pipeline/create/creator_plugins.py @@ -20,7 +20,6 @@ from ayon_core.pipeline.staging_dir import get_staging_dir_info, StagingDir from .constants import DEFAULT_VARIANT_VALUE from .product_name import get_product_name from .utils import get_next_versions_for_instances -from .legacy_create import LegacyCreator from .structures import CreatedInstance if TYPE_CHECKING: @@ -975,62 +974,10 @@ def discover_convertor_plugins(*args, **kwargs): return discover(ProductConvertorPlugin, *args, **kwargs) -def discover_legacy_creator_plugins(): - from ayon_core.pipeline import get_current_project_name - - log = Logger.get_logger("CreatorDiscover") - - plugins = discover(LegacyCreator) - project_name = get_current_project_name() - project_settings = get_project_settings(project_name) - for plugin in plugins: - try: - plugin.apply_settings(project_settings) - except Exception: - log.warning( - "Failed to apply settings to creator {}".format( - plugin.__name__ - ), - exc_info=True - ) - return plugins - - -def get_legacy_creator_by_name(creator_name, case_sensitive=False): - """Find creator plugin by name. - - Args: - creator_name (str): Name of creator class that should be returned. - case_sensitive (bool): Match of creator plugin name is case sensitive. - Set to `False` by default. - - Returns: - Creator: Return first matching plugin or `None`. - """ - - # Lower input creator name if is not case sensitive - if not case_sensitive: - creator_name = creator_name.lower() - - for creator_plugin in discover_legacy_creator_plugins(): - _creator_name = creator_plugin.__name__ - - # Lower creator plugin name if is not case sensitive - if not case_sensitive: - _creator_name = _creator_name.lower() - - if _creator_name == creator_name: - return creator_plugin - return None - - def register_creator_plugin(plugin): if issubclass(plugin, BaseCreator): register_plugin(BaseCreator, plugin) - elif issubclass(plugin, LegacyCreator): - register_plugin(LegacyCreator, plugin) - elif issubclass(plugin, ProductConvertorPlugin): register_plugin(ProductConvertorPlugin, plugin) @@ -1039,22 +986,17 @@ def deregister_creator_plugin(plugin): if issubclass(plugin, BaseCreator): deregister_plugin(BaseCreator, plugin) - elif issubclass(plugin, LegacyCreator): - deregister_plugin(LegacyCreator, plugin) - elif issubclass(plugin, ProductConvertorPlugin): deregister_plugin(ProductConvertorPlugin, plugin) def register_creator_plugin_path(path): register_plugin_path(BaseCreator, path) - register_plugin_path(LegacyCreator, path) register_plugin_path(ProductConvertorPlugin, path) def deregister_creator_plugin_path(path): deregister_plugin_path(BaseCreator, path) - deregister_plugin_path(LegacyCreator, path) deregister_plugin_path(ProductConvertorPlugin, path) diff --git a/client/ayon_core/pipeline/create/legacy_create.py b/client/ayon_core/pipeline/create/legacy_create.py deleted file mode 100644 index f6427d9bd1..0000000000 --- a/client/ayon_core/pipeline/create/legacy_create.py +++ /dev/null @@ -1,216 +0,0 @@ -"""Create workflow moved from avalon-core repository. - -Renamed classes and functions -- 'Creator' -> 'LegacyCreator' -- 'create' -> 'legacy_create' -""" - -import os -import logging -import collections - -from ayon_core.pipeline.constants import AYON_INSTANCE_ID - -from .product_name import get_product_name - - -class LegacyCreator: - """Determine how assets are created""" - label = None - product_type = None - defaults = None - maintain_selection = True - enabled = True - - dynamic_product_name_keys = [] - - log = logging.getLogger("LegacyCreator") - log.propagate = True - - def __init__(self, name, folder_path, options=None, data=None): - self.name = name # For backwards compatibility - self.options = options - - # Default data - self.data = collections.OrderedDict() - # TODO use 'AYON_INSTANCE_ID' when all hosts support it - self.data["id"] = AYON_INSTANCE_ID - self.data["productType"] = self.product_type - self.data["folderPath"] = folder_path - self.data["productName"] = name - self.data["active"] = True - - self.data.update(data or {}) - - @classmethod - def apply_settings(cls, project_settings): - """Apply AYON settings to a plugin class.""" - - host_name = os.environ.get("AYON_HOST_NAME") - plugin_type = "create" - plugin_type_settings = ( - project_settings - .get(host_name, {}) - .get(plugin_type, {}) - ) - global_type_settings = ( - project_settings - .get("core", {}) - .get(plugin_type, {}) - ) - if not global_type_settings and not plugin_type_settings: - return - - plugin_name = cls.__name__ - - plugin_settings = None - # Look for plugin settings in host specific settings - if plugin_name in plugin_type_settings: - plugin_settings = plugin_type_settings[plugin_name] - - # Look for plugin settings in global settings - elif plugin_name in global_type_settings: - plugin_settings = global_type_settings[plugin_name] - - if not plugin_settings: - return - - cls.log.debug(">>> We have preset for {}".format(plugin_name)) - for option, value in plugin_settings.items(): - if option == "enabled" and value is False: - cls.log.debug(" - is disabled by preset") - else: - cls.log.debug(" - setting `{}`: `{}`".format(option, value)) - setattr(cls, option, value) - - def process(self): - pass - - @classmethod - def get_dynamic_data( - cls, project_name, folder_entity, task_entity, variant, host_name - ): - """Return dynamic data for current Creator plugin. - - By default return keys from `dynamic_product_name_keys` attribute - as mapping to keep formatted template unchanged. - - ``` - dynamic_product_name_keys = ["my_key"] - --- - output = { - "my_key": "{my_key}" - } - ``` - - Dynamic keys may override default Creator keys (productType, task, - folderPath, ...) but do it wisely if you need. - - All of keys will be converted into 3 variants unchanged, capitalized - and all upper letters. Because of that are all keys lowered. - - This method can be modified to prefill some values just keep in mind it - is class method. - - Args: - project_name (str): Context's project name. - folder_entity (dict[str, Any]): Folder entity. - task_entity (dict[str, Any]): Task entity. - variant (str): What is entered by user in creator tool. - host_name (str): Name of host. - - Returns: - dict: Fill data for product name template. - """ - dynamic_data = {} - for key in cls.dynamic_product_name_keys: - key = key.lower() - dynamic_data[key] = "{" + key + "}" - return dynamic_data - - @classmethod - def get_product_name( - cls, project_name, folder_entity, task_entity, variant, host_name=None - ): - """Return product name created with entered arguments. - - Logic extracted from Creator tool. This method should give ability - to get product name without the tool. - - TODO: Maybe change `variant` variable. - - By default is output concatenated product type with variant. - - Args: - project_name (str): Context's project name. - folder_entity (dict[str, Any]): Folder entity. - task_entity (dict[str, Any]): Task entity. - variant (str): What is entered by user in creator tool. - host_name (str): Name of host. - - Returns: - str: Formatted product name with entered arguments. Should match - config's logic. - """ - - dynamic_data = cls.get_dynamic_data( - project_name, folder_entity, task_entity, variant, host_name - ) - task_name = task_type = None - if task_entity: - task_name = task_entity["name"] - task_type = task_entity["taskType"] - return get_product_name( - project_name, - task_name, - task_type, - host_name, - cls.product_type, - variant, - dynamic_data=dynamic_data - ) - - -def legacy_create( - Creator, product_name, folder_path, options=None, data=None -): - """Create a new instance - - Associate nodes with a product name and type. These nodes are later - validated, according to their `product type`, and integrated into the - shared environment, relative their `productName`. - - Data relative each product type, along with default data, are imprinted - into the resulting objectSet. This data is later used by extractors - and finally asset browsers to help identify the origin of the asset. - - Arguments: - Creator (Creator): Class of creator. - product_name (str): Name of product. - folder_path (str): Folder path. - options (dict, optional): Additional options from GUI. - data (dict, optional): Additional data from GUI. - - Raises: - NameError on `productName` already exists - KeyError on invalid dynamic property - RuntimeError on host error - - Returns: - Name of instance - - """ - from ayon_core.pipeline import registered_host - - host = registered_host() - plugin = Creator(product_name, folder_path, options, data) - - if plugin.maintain_selection is True: - with host.maintained_selection(): - print("Running %s with maintained selection" % plugin) - instance = plugin.process() - return instance - - print("Running %s" % plugin) - instance = plugin.process() - return instance From 027f148b102d464e8097173f4ff365cb0fa25125 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 14 Aug 2025 17:16:11 +0200 Subject: [PATCH 338/595] remove legacy creators logic from template builder --- .../workfile/workfile_template_builder.py | 44 ++++--------------- 1 file changed, 9 insertions(+), 35 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/workfile_template_builder.py b/client/ayon_core/pipeline/workfile/workfile_template_builder.py index e2add99752..37f76a2268 100644 --- a/client/ayon_core/pipeline/workfile/workfile_template_builder.py +++ b/client/ayon_core/pipeline/workfile/workfile_template_builder.py @@ -54,7 +54,6 @@ from ayon_core.pipeline.plugin_discover import ( ) from ayon_core.pipeline.create import ( - discover_legacy_creator_plugins, CreateContext, HiddenCreator, ) @@ -131,7 +130,6 @@ class AbstractTemplateBuilder(ABC): """ _log = None - use_legacy_creators = False def __init__(self, host): # Get host name @@ -321,19 +319,6 @@ class AbstractTemplateBuilder(ABC): return list(get_folders(project_name, folder_ids=linked_folder_ids)) - def _collect_legacy_creators(self): - creators_by_name = {} - for creator in discover_legacy_creator_plugins(): - if not creator.enabled: - continue - creator_name = creator.__name__ - if creator_name in creators_by_name: - raise KeyError( - "Duplicated creator name {} !".format(creator_name) - ) - creators_by_name[creator_name] = creator - self._creators_by_name = creators_by_name - def _collect_creators(self): self._creators_by_name = { identifier: creator @@ -345,10 +330,7 @@ class AbstractTemplateBuilder(ABC): def get_creators_by_name(self): if self._creators_by_name is None: - if self.use_legacy_creators: - self._collect_legacy_creators() - else: - self._collect_creators() + self._collect_creators() return self._creators_by_name @@ -1938,8 +1920,6 @@ class PlaceholderCreateMixin(object): pre_create_data (dict): dictionary of configuration from Creator configuration in UI """ - - legacy_create = self.builder.use_legacy_creators creator_name = placeholder.data["creator"] create_variant = placeholder.data["create_variant"] active = placeholder.data.get("active") @@ -1979,20 +1959,14 @@ class PlaceholderCreateMixin(object): # compile product name from variant try: - if legacy_create: - creator_instance = creator_plugin( - product_name, - folder_path - ).process() - else: - creator_instance = self.builder.create_context.create( - creator_plugin.identifier, - create_variant, - folder_entity, - task_entity, - pre_create_data=pre_create_data, - active=active - ) + creator_instance = self.builder.create_context.create( + creator_plugin.identifier, + create_variant, + folder_entity, + task_entity, + pre_create_data=pre_create_data, + active=active + ) except: # noqa: E722 failed = True From 94a55d588bc94d9f6f17564bdd5d1e798d29f5be Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 14 Aug 2025 17:21:53 +0200 Subject: [PATCH 339/595] removed subset manager tool --- .../ayon_core/tools/subsetmanager/README.md | 19 -- .../ayon_core/tools/subsetmanager/__init__.py | 9 - client/ayon_core/tools/subsetmanager/model.py | 56 ----- .../ayon_core/tools/subsetmanager/widgets.py | 110 --------- .../ayon_core/tools/subsetmanager/window.py | 218 ------------------ client/ayon_core/tools/utils/host_tools.py | 33 --- 6 files changed, 445 deletions(-) delete mode 100644 client/ayon_core/tools/subsetmanager/README.md delete mode 100644 client/ayon_core/tools/subsetmanager/__init__.py delete mode 100644 client/ayon_core/tools/subsetmanager/model.py delete mode 100644 client/ayon_core/tools/subsetmanager/widgets.py delete mode 100644 client/ayon_core/tools/subsetmanager/window.py diff --git a/client/ayon_core/tools/subsetmanager/README.md b/client/ayon_core/tools/subsetmanager/README.md deleted file mode 100644 index 35b80ea114..0000000000 --- a/client/ayon_core/tools/subsetmanager/README.md +++ /dev/null @@ -1,19 +0,0 @@ -Subset manager --------------- - -Simple UI showing list of created subset that will be published via Pyblish. -Useful for applications (Photoshop, AfterEffects, TVPaint, Harmony) which are -storing metadata about instance hidden from user. - -This UI allows listing all created subset and removal of them if needed ( -in case use doesn't want to publish anymore, its using workfile as a starting -file for different task and instances should be completely different etc. -) - -Host is expected to implemented: -- `list_instances` - returning list of dictionaries (instances), must contain - unique uuid field - example: - ```[{"uuid":"15","active":true,"subset":"imageBG","family":"image","id":"ayon.create.instance","asset":"Town"}]``` -- `remove_instance(instance)` - removes instance from file's metadata - instance is a dictionary, with uuid field \ No newline at end of file diff --git a/client/ayon_core/tools/subsetmanager/__init__.py b/client/ayon_core/tools/subsetmanager/__init__.py deleted file mode 100644 index 6cfca7db66..0000000000 --- a/client/ayon_core/tools/subsetmanager/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -from .window import ( - show, - SubsetManagerWindow -) - -__all__ = ( - "show", - "SubsetManagerWindow" -) diff --git a/client/ayon_core/tools/subsetmanager/model.py b/client/ayon_core/tools/subsetmanager/model.py deleted file mode 100644 index 4964abd86d..0000000000 --- a/client/ayon_core/tools/subsetmanager/model.py +++ /dev/null @@ -1,56 +0,0 @@ -import uuid - -from qtpy import QtCore, QtGui - -from ayon_core.pipeline import registered_host - -ITEM_ID_ROLE = QtCore.Qt.UserRole + 1 - - -class InstanceModel(QtGui.QStandardItemModel): - def __init__(self, *args, **kwargs): - super(InstanceModel, self).__init__(*args, **kwargs) - self._instances_by_item_id = {} - - def get_instance_by_id(self, item_id): - return self._instances_by_item_id.get(item_id) - - def refresh(self): - self.clear() - - self._instances_by_item_id = {} - - instances = None - host = registered_host() - list_instances = getattr(host, "list_instances", None) - if list_instances: - instances = list_instances() - - if not instances: - return - - items = [] - for instance_data in instances: - item_id = str(uuid.uuid4()) - product_name = ( - instance_data.get("productName") - or instance_data.get("subset") - ) - label = instance_data.get("label") or product_name - item = QtGui.QStandardItem(label) - item.setEnabled(True) - item.setEditable(False) - item.setData(item_id, ITEM_ID_ROLE) - items.append(item) - self._instances_by_item_id[item_id] = instance_data - - if items: - self.invisibleRootItem().appendRows(items) - - def headerData(self, section, orientation, role): - if role == QtCore.Qt.DisplayRole and section == 0: - return "Instance" - - return super(InstanceModel, self).headerData( - section, orientation, role - ) diff --git a/client/ayon_core/tools/subsetmanager/widgets.py b/client/ayon_core/tools/subsetmanager/widgets.py deleted file mode 100644 index 1067474c44..0000000000 --- a/client/ayon_core/tools/subsetmanager/widgets.py +++ /dev/null @@ -1,110 +0,0 @@ -import json -from qtpy import QtWidgets, QtCore - - -class InstanceDetail(QtWidgets.QWidget): - save_triggered = QtCore.Signal() - - def __init__(self, parent=None): - super(InstanceDetail, self).__init__(parent) - - details_widget = QtWidgets.QPlainTextEdit(self) - details_widget.setObjectName("SubsetManagerDetailsText") - - save_btn = QtWidgets.QPushButton("Save", self) - - self._block_changes = False - self._editable = False - self._item_id = None - - layout = QtWidgets.QVBoxLayout(self) - layout.setContentsMargins(0, 0, 0, 0) - layout.addWidget(details_widget, 1) - layout.addWidget(save_btn, 0, QtCore.Qt.AlignRight) - - save_btn.clicked.connect(self._on_save_clicked) - details_widget.textChanged.connect(self._on_text_change) - - self._details_widget = details_widget - self._save_btn = save_btn - - self.set_editable(False) - - def _on_save_clicked(self): - if self.is_valid(): - self.save_triggered.emit() - - def set_editable(self, enabled=True): - self._editable = enabled - self.update_state() - - def update_state(self, valid=None): - editable = self._editable - if not self._item_id: - editable = False - - self._save_btn.setVisible(editable) - self._details_widget.setReadOnly(not editable) - if valid is None: - valid = self.is_valid() - - self._save_btn.setEnabled(valid) - self._set_invalid_detail(valid) - - def _set_invalid_detail(self, valid): - state = "" - if not valid: - state = "invalid" - - current_state = self._details_widget.property("state") - if current_state != state: - self._details_widget.setProperty("state", state) - self._details_widget.style().polish(self._details_widget) - - def set_details(self, container, item_id): - self._item_id = item_id - - text = "Nothing selected" - if item_id: - try: - text = json.dumps(container, indent=4) - except Exception: - text = str(container) - - self._block_changes = True - self._details_widget.setPlainText(text) - self._block_changes = False - - self.update_state() - - def instance_data_from_text(self): - try: - jsoned = json.loads(self._details_widget.toPlainText()) - except Exception: - jsoned = None - return jsoned - - def item_id(self): - return self._item_id - - def is_valid(self): - if not self._item_id: - return True - - value = self._details_widget.toPlainText() - valid = False - try: - jsoned = json.loads(value) - if jsoned and isinstance(jsoned, dict): - valid = True - - except Exception: - pass - return valid - - def _on_text_change(self): - if self._block_changes or not self._item_id: - return - - valid = self.is_valid() - self.update_state(valid) diff --git a/client/ayon_core/tools/subsetmanager/window.py b/client/ayon_core/tools/subsetmanager/window.py deleted file mode 100644 index 164ffa95a7..0000000000 --- a/client/ayon_core/tools/subsetmanager/window.py +++ /dev/null @@ -1,218 +0,0 @@ -import os -import sys - -from qtpy import QtWidgets, QtCore -import qtawesome - -from ayon_core import style -from ayon_core.pipeline import registered_host -from ayon_core.tools.utils import PlaceholderLineEdit -from ayon_core.tools.utils.lib import ( - iter_model_rows, - qt_app_context -) -from ayon_core.tools.utils.models import RecursiveSortFilterProxyModel -from .model import ( - InstanceModel, - ITEM_ID_ROLE -) -from .widgets import InstanceDetail - - -module = sys.modules[__name__] -module.window = None - - -class SubsetManagerWindow(QtWidgets.QDialog): - def __init__(self, parent=None): - super(SubsetManagerWindow, self).__init__(parent=parent) - self.setWindowTitle("Subset Manager 0.1") - self.setObjectName("SubsetManager") - if not parent: - self.setWindowFlags( - self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint - ) - - self.resize(780, 430) - - # Trigger refresh on first called show - self._first_show = True - - left_side_widget = QtWidgets.QWidget(self) - - # Header part - header_widget = QtWidgets.QWidget(left_side_widget) - - # Filter input - filter_input = PlaceholderLineEdit(header_widget) - filter_input.setPlaceholderText("Filter products..") - - # Refresh button - icon = qtawesome.icon("fa.refresh", color="white") - refresh_btn = QtWidgets.QPushButton(header_widget) - refresh_btn.setIcon(icon) - - header_layout = QtWidgets.QHBoxLayout(header_widget) - header_layout.setContentsMargins(0, 0, 0, 0) - header_layout.addWidget(filter_input) - header_layout.addWidget(refresh_btn) - - # Instances view - view = QtWidgets.QTreeView(left_side_widget) - view.setIndentation(0) - view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) - - model = InstanceModel(view) - proxy = RecursiveSortFilterProxyModel() - proxy.setSourceModel(model) - proxy.setFilterCaseSensitivity(QtCore.Qt.CaseInsensitive) - - view.setModel(proxy) - - left_side_layout = QtWidgets.QVBoxLayout(left_side_widget) - left_side_layout.setContentsMargins(0, 0, 0, 0) - left_side_layout.addWidget(header_widget) - left_side_layout.addWidget(view) - - details_widget = InstanceDetail(self) - - layout = QtWidgets.QHBoxLayout(self) - layout.addWidget(left_side_widget, 0) - layout.addWidget(details_widget, 1) - - filter_input.textChanged.connect(proxy.setFilterFixedString) - refresh_btn.clicked.connect(self._on_refresh_clicked) - view.clicked.connect(self._on_activated) - view.customContextMenuRequested.connect(self.on_context_menu) - details_widget.save_triggered.connect(self._on_save) - - self._model = model - self._proxy = proxy - self._view = view - self._details_widget = details_widget - self._refresh_btn = refresh_btn - - def _on_refresh_clicked(self): - self.refresh() - - def _on_activated(self, index): - container = None - item_id = None - if index.isValid(): - item_id = index.data(ITEM_ID_ROLE) - container = self._model.get_instance_by_id(item_id) - - self._details_widget.set_details(container, item_id) - - def _on_save(self): - host = registered_host() - if not hasattr(host, "save_instances"): - print("BUG: Host does not have \"save_instances\" method") - return - - current_index = self._view.selectionModel().currentIndex() - if not current_index.isValid(): - return - - item_id = current_index.data(ITEM_ID_ROLE) - if item_id != self._details_widget.item_id(): - return - - item_data = self._details_widget.instance_data_from_text() - new_instances = [] - for index in iter_model_rows(self._model, 0): - _item_id = index.data(ITEM_ID_ROLE) - if _item_id == item_id: - instance_data = item_data - else: - instance_data = self._model.get_instance_by_id(item_id) - new_instances.append(instance_data) - - host.save_instances(new_instances) - - def on_context_menu(self, point): - point_index = self._view.indexAt(point) - item_id = point_index.data(ITEM_ID_ROLE) - instance_data = self._model.get_instance_by_id(item_id) - if instance_data is None: - return - - # Prepare menu - menu = QtWidgets.QMenu(self) - actions = [] - host = registered_host() - if hasattr(host, "remove_instance"): - action = QtWidgets.QAction("Remove instance", menu) - action.setData(host.remove_instance) - actions.append(action) - - if hasattr(host, "select_instance"): - action = QtWidgets.QAction("Select instance", menu) - action.setData(host.select_instance) - actions.append(action) - - if not actions: - actions.append(QtWidgets.QAction("* Nothing to do", menu)) - - for action in actions: - menu.addAction(action) - - # Show menu under mouse - global_point = self._view.mapToGlobal(point) - action = menu.exec_(global_point) - if not action or not action.data(): - return - - # Process action - # TODO catch exceptions - function = action.data() - function(instance_data) - - # Reset modified data - self.refresh() - - def refresh(self): - self._details_widget.set_details(None, None) - self._model.refresh() - - host = registered_host() - dev_mode = os.environ.get("AVALON_DEVELOP_MODE") or "" - editable = False - if dev_mode.lower() in ("1", "yes", "true", "on"): - editable = hasattr(host, "save_instances") - self._details_widget.set_editable(editable) - - def showEvent(self, *args, **kwargs): - super(SubsetManagerWindow, self).showEvent(*args, **kwargs) - if self._first_show: - self._first_show = False - self.setStyleSheet(style.load_stylesheet()) - self.refresh() - - -def show(root=None, debug=False, parent=None): - """Display Scene Inventory GUI - - Arguments: - debug (bool, optional): Run in debug-mode, - defaults to False - parent (QtCore.QObject, optional): When provided parent the interface - to this QObject. - - """ - - try: - module.window.close() - del module.window - except (RuntimeError, AttributeError): - pass - - with qt_app_context(): - window = SubsetManagerWindow(parent) - window.show() - - module.window = window - - # Pull window to the front. - module.window.raise_() - module.window.activateWindow() diff --git a/client/ayon_core/tools/utils/host_tools.py b/client/ayon_core/tools/utils/host_tools.py index 3d356555f3..94e3c946c5 100644 --- a/client/ayon_core/tools/utils/host_tools.py +++ b/client/ayon_core/tools/utils/host_tools.py @@ -33,7 +33,6 @@ class HostToolsHelper: self._loader_tool = None self._creator_tool = None self._publisher_tool = None - self._subset_manager_tool = None self._scene_inventory_tool = None self._experimental_tools_dialog = None @@ -117,28 +116,6 @@ class HostToolsHelper: creator_tool.raise_() creator_tool.activateWindow() - def get_subset_manager_tool(self, parent): - """Create, cache and return subset manager tool window.""" - if self._subset_manager_tool is None: - from ayon_core.tools.subsetmanager import SubsetManagerWindow - - subset_manager_window = SubsetManagerWindow( - parent=parent or self._parent - ) - self._subset_manager_tool = subset_manager_window - - return self._subset_manager_tool - - def show_subset_manager(self, parent=None): - """Show tool display/remove existing created instances.""" - with qt_app_context(): - subset_manager_tool = self.get_subset_manager_tool(parent) - subset_manager_tool.show() - - # Pull window to the front. - subset_manager_tool.raise_() - subset_manager_tool.activateWindow() - def get_scene_inventory_tool(self, parent): """Create, cache and return scene inventory tool window.""" if self._scene_inventory_tool is None: @@ -270,9 +247,6 @@ class HostToolsHelper: elif tool_name == "creator": return self.get_creator_tool(parent, *args, **kwargs) - elif tool_name == "subsetmanager": - return self.get_subset_manager_tool(parent, *args, **kwargs) - elif tool_name == "sceneinventory": return self.get_scene_inventory_tool(parent, *args, **kwargs) @@ -308,9 +282,6 @@ class HostToolsHelper: elif tool_name == "creator": self.show_creator(parent, *args, **kwargs) - elif tool_name == "subsetmanager": - self.show_subset_manager(parent, *args, **kwargs) - elif tool_name == "sceneinventory": self.show_scene_inventory(parent, *args, **kwargs) @@ -383,10 +354,6 @@ def show_creator(parent=None): _SingletonPoint.show_tool_by_name("creator", parent) -def show_subset_manager(parent=None): - _SingletonPoint.show_tool_by_name("subsetmanager", parent) - - def show_scene_inventory(parent=None): _SingletonPoint.show_tool_by_name("sceneinventory", parent) From 7b0d54e7a8a9842fd905e77fe7d8026a78a35b4c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 14 Aug 2025 17:25:15 +0200 Subject: [PATCH 340/595] remove creator tool Now really remove it... --- client/ayon_core/tools/creator/__init__.py | 9 - client/ayon_core/tools/creator/constants.py | 8 - client/ayon_core/tools/creator/model.py | 59 --- client/ayon_core/tools/creator/widgets.py | 275 ----------- client/ayon_core/tools/creator/window.py | 507 -------------------- 5 files changed, 858 deletions(-) delete mode 100644 client/ayon_core/tools/creator/__init__.py delete mode 100644 client/ayon_core/tools/creator/constants.py delete mode 100644 client/ayon_core/tools/creator/model.py delete mode 100644 client/ayon_core/tools/creator/widgets.py delete mode 100644 client/ayon_core/tools/creator/window.py diff --git a/client/ayon_core/tools/creator/__init__.py b/client/ayon_core/tools/creator/__init__.py deleted file mode 100644 index 585b8bdf80..0000000000 --- a/client/ayon_core/tools/creator/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -from .window import ( - show, - CreatorWindow -) - -__all__ = ( - "show", - "CreatorWindow" -) diff --git a/client/ayon_core/tools/creator/constants.py b/client/ayon_core/tools/creator/constants.py deleted file mode 100644 index ec555fbe9c..0000000000 --- a/client/ayon_core/tools/creator/constants.py +++ /dev/null @@ -1,8 +0,0 @@ -from qtpy import QtCore - - -PRODUCT_TYPE_ROLE = QtCore.Qt.UserRole + 1 -ITEM_ID_ROLE = QtCore.Qt.UserRole + 2 - -SEPARATOR = "---" -SEPARATORS = {"---", "---separator---"} diff --git a/client/ayon_core/tools/creator/model.py b/client/ayon_core/tools/creator/model.py deleted file mode 100644 index 16d24cc8bc..0000000000 --- a/client/ayon_core/tools/creator/model.py +++ /dev/null @@ -1,59 +0,0 @@ -import uuid -from qtpy import QtGui, QtCore - -from . constants import ( - PRODUCT_TYPE_ROLE, - ITEM_ID_ROLE -) - - -class CreatorsModel(QtGui.QStandardItemModel): - def __init__(self, *args, **kwargs): - super(CreatorsModel, self).__init__(*args, **kwargs) - - self._creators_by_id = {} - - def reset(self): - # TODO change to refresh when clearing is not needed - self.clear() - self._creators_by_id = {} - - items = [] - creators = discover_legacy_creator_plugins() - for creator in creators: - if not creator.enabled: - continue - item_id = str(uuid.uuid4()) - self._creators_by_id[item_id] = creator - - label = creator.label or creator.product_type - item = QtGui.QStandardItem(label) - item.setEditable(False) - item.setData(item_id, ITEM_ID_ROLE) - item.setData(creator.product_type, PRODUCT_TYPE_ROLE) - items.append(item) - - if not items: - item = QtGui.QStandardItem("No registered create plugins") - item.setEnabled(False) - item.setData(False, QtCore.Qt.ItemIsEnabled) - items.append(item) - - items.sort(key=lambda item: item.text()) - self.invisibleRootItem().appendRows(items) - - def get_creator_by_id(self, item_id): - return self._creators_by_id.get(item_id) - - def get_indexes_by_product_type(self, product_type): - indexes = [] - for row in range(self.rowCount()): - index = self.index(row, 0) - item_id = index.data(ITEM_ID_ROLE) - creator_plugin = self._creators_by_id.get(item_id) - if creator_plugin and ( - creator_plugin.label.lower() == product_type.lower() - or creator_plugin.product_type.lower() == product_type.lower() - ): - indexes.append(index) - return indexes diff --git a/client/ayon_core/tools/creator/widgets.py b/client/ayon_core/tools/creator/widgets.py deleted file mode 100644 index bbc6848e6c..0000000000 --- a/client/ayon_core/tools/creator/widgets.py +++ /dev/null @@ -1,275 +0,0 @@ -import re -import inspect - -from qtpy import QtWidgets, QtCore, QtGui - -import qtawesome - -from ayon_core.pipeline.create import PRODUCT_NAME_ALLOWED_SYMBOLS -from ayon_core.tools.utils import ErrorMessageBox - -if hasattr(QtGui, "QRegularExpressionValidator"): - RegularExpressionValidatorClass = QtGui.QRegularExpressionValidator - RegularExpressionClass = QtCore.QRegularExpression -else: - RegularExpressionValidatorClass = QtGui.QRegExpValidator - RegularExpressionClass = QtCore.QRegExp - - -class CreateErrorMessageBox(ErrorMessageBox): - def __init__( - self, - product_type, - product_name, - folder_path, - exc_msg, - formatted_traceback, - parent - ): - self._product_type = product_type - self._product_name = product_name - self._folder_path = folder_path - self._exc_msg = exc_msg - self._formatted_traceback = formatted_traceback - super(CreateErrorMessageBox, self).__init__("Creation failed", parent) - - def _create_top_widget(self, parent_widget): - label_widget = QtWidgets.QLabel(parent_widget) - label_widget.setText( - "Failed to create" - ) - return label_widget - - def _get_report_data(self): - report_message = ( - "Failed to create Product: \"{product_name}\"" - " Type: \"{product_type}\"" - " in Folder: \"{folder_path}\"" - "\n\nError: {message}" - ).format( - product_name=self._product_name, - product_type=self._product_type, - folder_path=self._folder_path, - message=self._exc_msg - ) - if self._formatted_traceback: - report_message += "\n\n{}".format(self._formatted_traceback) - return [report_message] - - def _create_content(self, content_layout): - item_name_template = ( - "{}: {{}}
" - "{}: {{}}
" - "{}: {{}}
" - ).format( - "Product type", - "Product name", - "Folder" - ) - exc_msg_template = "{}" - - line = self._create_line() - content_layout.addWidget(line) - - item_name_widget = QtWidgets.QLabel(self) - item_name_widget.setText( - item_name_template.format( - self._product_type, self._product_name, self._folder_path - ) - ) - content_layout.addWidget(item_name_widget) - - message_label_widget = QtWidgets.QLabel(self) - message_label_widget.setText( - exc_msg_template.format(self.convert_text_for_html(self._exc_msg)) - ) - content_layout.addWidget(message_label_widget) - - if self._formatted_traceback: - line_widget = self._create_line() - tb_widget = self._create_traceback_widget( - self._formatted_traceback - ) - content_layout.addWidget(line_widget) - content_layout.addWidget(tb_widget) - - -class ProductNameValidator(RegularExpressionValidatorClass): - invalid = QtCore.Signal(set) - pattern = "^[{}]*$".format(PRODUCT_NAME_ALLOWED_SYMBOLS) - - def __init__(self): - reg = RegularExpressionClass(self.pattern) - super(ProductNameValidator, self).__init__(reg) - - def validate(self, text, pos): - results = super(ProductNameValidator, self).validate(text, pos) - if results[0] == RegularExpressionValidatorClass.Invalid: - self.invalid.emit(self.invalid_chars(text)) - return results - - def invalid_chars(self, text): - invalid = set() - re_valid = re.compile(self.pattern) - for char in text: - if char == " ": - invalid.add("' '") - continue - if not re_valid.match(char): - invalid.add(char) - return invalid - - -class VariantLineEdit(QtWidgets.QLineEdit): - report = QtCore.Signal(str) - colors = { - "empty": (QtGui.QColor("#78879b"), ""), - "exists": (QtGui.QColor("#4E76BB"), "border-color: #4E76BB;"), - "new": (QtGui.QColor("#7AAB8F"), "border-color: #7AAB8F;"), - } - - def __init__(self, *args, **kwargs): - super(VariantLineEdit, self).__init__(*args, **kwargs) - - validator = ProductNameValidator() - self.setValidator(validator) - self.setToolTip("Only alphanumeric characters (A-Z a-z 0-9), " - "'_' and '.' are allowed.") - - self._status_color = self.colors["empty"][0] - - anim = QtCore.QPropertyAnimation() - anim.setTargetObject(self) - anim.setPropertyName(b"status_color") - anim.setEasingCurve(QtCore.QEasingCurve.InCubic) - anim.setDuration(300) - anim.setStartValue(QtGui.QColor("#C84747")) # `Invalid` status color - self.animation = anim - - validator.invalid.connect(self.on_invalid) - - def on_invalid(self, invalid): - message = "Invalid character: %s" % ", ".join(invalid) - self.report.emit(message) - self.animation.stop() - self.animation.start() - - def as_empty(self): - self._set_border("empty") - self.report.emit("Empty product name ..") - - def as_exists(self): - self._set_border("exists") - self.report.emit("Existing product, appending next version.") - - def as_new(self): - self._set_border("new") - self.report.emit("New product, creating first version.") - - def _set_border(self, status): - qcolor, style = self.colors[status] - self.animation.setEndValue(qcolor) - self.setStyleSheet(style) - - def _get_status_color(self): - return self._status_color - - def _set_status_color(self, color): - self._status_color = color - self.setStyleSheet("border-color: %s;" % color.name()) - - status_color = QtCore.Property( - QtGui.QColor, _get_status_color, _set_status_color - ) - - -class ProductTypeDescriptionWidget(QtWidgets.QWidget): - """A product type description widget. - - Shows a product type icon, name and a help description. - Used in creator header. - - _______________________ - | ____ | - | |icon| PRODUCT TYPE | - | |____| help | - |_______________________| - - """ - - SIZE = 35 - - def __init__(self, parent=None): - super(ProductTypeDescriptionWidget, self).__init__(parent=parent) - - icon_label = QtWidgets.QLabel(self) - icon_label.setSizePolicy( - QtWidgets.QSizePolicy.Maximum, - QtWidgets.QSizePolicy.Maximum - ) - - # Add 4 pixel padding to avoid icon being cut off - icon_label.setFixedWidth(self.SIZE + 4) - icon_label.setFixedHeight(self.SIZE + 4) - - label_layout = QtWidgets.QVBoxLayout() - label_layout.setSpacing(0) - - product_type_label = QtWidgets.QLabel(self) - product_type_label.setObjectName("CreatorProductTypeLabel") - product_type_label.setAlignment( - QtCore.Qt.AlignBottom | QtCore.Qt.AlignLeft - ) - - help_label = QtWidgets.QLabel(self) - help_label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignLeft) - - label_layout.addWidget(product_type_label) - label_layout.addWidget(help_label) - - layout = QtWidgets.QHBoxLayout(self) - layout.setContentsMargins(0, 0, 0, 0) - layout.setSpacing(5) - layout.addWidget(icon_label) - layout.addLayout(label_layout) - - self._help_label = help_label - self._product_type_label = product_type_label - self._icon_label = icon_label - - def set_item(self, creator_plugin): - """Update elements to display information of a product type item. - - Args: - creator_plugin (dict): A product type item as registered with - name, help and icon. - - Returns: - None - - """ - if not creator_plugin: - self._icon_label.setPixmap(None) - self._product_type_label.setText("") - self._help_label.setText("") - return - - # Support a font-awesome icon - icon_name = getattr(creator_plugin, "icon", None) or "info-circle" - try: - icon = qtawesome.icon("fa.{}".format(icon_name), color="white") - pixmap = icon.pixmap(self.SIZE, self.SIZE) - except Exception: - print("BUG: Couldn't load icon \"fa.{}\"".format(str(icon_name))) - # Create transparent pixmap - pixmap = QtGui.QPixmap() - pixmap.fill(QtCore.Qt.transparent) - pixmap = pixmap.scaled(self.SIZE, self.SIZE) - - # Parse a clean line from the Creator's docstring - docstring = inspect.getdoc(creator_plugin) - creator_help = docstring.splitlines()[0] if docstring else "" - - self._icon_label.setPixmap(pixmap) - self._product_type_label.setText(creator_plugin.product_type) - self._help_label.setText(creator_help) diff --git a/client/ayon_core/tools/creator/window.py b/client/ayon_core/tools/creator/window.py deleted file mode 100644 index fe8ee86dcf..0000000000 --- a/client/ayon_core/tools/creator/window.py +++ /dev/null @@ -1,507 +0,0 @@ -import sys -import traceback -import re - -import ayon_api -from qtpy import QtWidgets, QtCore - -from ayon_core import style -from ayon_core.settings import get_current_project_settings -from ayon_core.tools.utils.lib import qt_app_context -from ayon_core.pipeline import ( - get_current_project_name, - get_current_folder_path, - get_current_task_name, -) -from ayon_core.pipeline.create import ( - PRODUCT_NAME_ALLOWED_SYMBOLS, - CreatorError, -) - -from .model import CreatorsModel -from .widgets import ( - CreateErrorMessageBox, - VariantLineEdit, - ProductTypeDescriptionWidget -) -from .constants import ( - ITEM_ID_ROLE, - SEPARATOR, - SEPARATORS -) - -module = sys.modules[__name__] -module.window = None - - -class CreatorWindow(QtWidgets.QDialog): - def __init__(self, parent=None): - super(CreatorWindow, self).__init__(parent) - self.setWindowTitle("Instance Creator") - self.setFocusPolicy(QtCore.Qt.StrongFocus) - if not parent: - self.setWindowFlags( - self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint - ) - - creator_info = ProductTypeDescriptionWidget(self) - - creators_model = CreatorsModel() - - creators_proxy = QtCore.QSortFilterProxyModel() - creators_proxy.setSourceModel(creators_model) - - creators_view = QtWidgets.QListView(self) - creators_view.setObjectName("CreatorsView") - creators_view.setModel(creators_proxy) - - folder_path_input = QtWidgets.QLineEdit(self) - variant_input = VariantLineEdit(self) - product_name_input = QtWidgets.QLineEdit(self) - product_name_input.setEnabled(False) - - variants_btn = QtWidgets.QPushButton() - variants_btn.setFixedWidth(18) - variants_menu = QtWidgets.QMenu(variants_btn) - variants_btn.setMenu(variants_menu) - - name_layout = QtWidgets.QHBoxLayout() - name_layout.addWidget(variant_input) - name_layout.addWidget(variants_btn) - name_layout.setSpacing(3) - name_layout.setContentsMargins(0, 0, 0, 0) - - body_layout = QtWidgets.QVBoxLayout() - body_layout.setContentsMargins(0, 0, 0, 0) - - body_layout.addWidget(creator_info, 0) - body_layout.addWidget(QtWidgets.QLabel("Product type", self), 0) - body_layout.addWidget(creators_view, 1) - body_layout.addWidget(QtWidgets.QLabel("Folder path", self), 0) - body_layout.addWidget(folder_path_input, 0) - body_layout.addWidget(QtWidgets.QLabel("Product name", self), 0) - body_layout.addLayout(name_layout, 0) - body_layout.addWidget(product_name_input, 0) - - useselection_chk = QtWidgets.QCheckBox("Use selection", self) - useselection_chk.setCheckState(QtCore.Qt.Checked) - - create_btn = QtWidgets.QPushButton("Create", self) - # Need to store error_msg to prevent garbage collection - msg_label = QtWidgets.QLabel(self) - - footer_layout = QtWidgets.QVBoxLayout() - footer_layout.addWidget(create_btn, 0) - footer_layout.addWidget(msg_label, 0) - footer_layout.setContentsMargins(0, 0, 0, 0) - - layout = QtWidgets.QVBoxLayout(self) - layout.addLayout(body_layout, 1) - layout.addWidget(useselection_chk, 0, QtCore.Qt.AlignLeft) - layout.addLayout(footer_layout, 0) - - msg_timer = QtCore.QTimer() - msg_timer.setSingleShot(True) - msg_timer.setInterval(5000) - - validation_timer = QtCore.QTimer() - validation_timer.setSingleShot(True) - validation_timer.setInterval(300) - - msg_timer.timeout.connect(self._on_msg_timer) - validation_timer.timeout.connect(self._on_validation_timer) - - create_btn.clicked.connect(self._on_create) - variant_input.returnPressed.connect(self._on_create) - variant_input.textChanged.connect(self._on_data_changed) - variant_input.report.connect(self.echo) - folder_path_input.textChanged.connect(self._on_data_changed) - creators_view.selectionModel().currentChanged.connect( - self._on_selection_changed - ) - - # Store valid states and - self._is_valid = False - create_btn.setEnabled(self._is_valid) - - self._first_show = True - - # Message dialog when something goes wrong during creation - self._message_dialog = None - - self._creator_info = creator_info - self._create_btn = create_btn - self._useselection_chk = useselection_chk - self._variant_input = variant_input - self._product_name_input = product_name_input - self._folder_path_input = folder_path_input - - self._creators_model = creators_model - self._creators_proxy = creators_proxy - self._creators_view = creators_view - - self._variants_btn = variants_btn - self._variants_menu = variants_menu - - self._msg_label = msg_label - - self._validation_timer = validation_timer - self._msg_timer = msg_timer - - # Defaults - self.resize(300, 500) - variant_input.setFocus() - - def _set_valid_state(self, valid): - if self._is_valid == valid: - return - self._is_valid = valid - self._create_btn.setEnabled(valid) - - def _build_menu(self, default_names=None): - """Create optional predefined variants. - - Args: - default_names(list): all predefined names - - Returns: - None - """ - if not default_names: - default_names = [] - - menu = self._variants_menu - button = self._variants_btn - - # Get and destroy the action group - group = button.findChild(QtWidgets.QActionGroup) - if group: - group.deleteLater() - - state = any(default_names) - button.setEnabled(state) - if state is False: - return - - # Build new action group - group = QtWidgets.QActionGroup(button) - for name in default_names: - if name in SEPARATORS: - menu.addSeparator() - continue - action = group.addAction(name) - menu.addAction(action) - - group.triggered.connect(self._on_action_clicked) - - def _on_action_clicked(self, action): - self._variant_input.setText(action.text()) - - def _on_data_changed(self, *args): - # Set invalid state until it's reconfirmed to be valid by the - # scheduled callback so any form of creation is held back until - # valid again - self._set_valid_state(False) - - self._validation_timer.start() - - def _on_validation_timer(self): - index = self._creators_view.currentIndex() - item_id = index.data(ITEM_ID_ROLE) - creator_plugin = self._creators_model.get_creator_by_id(item_id) - user_input_text = self._variant_input.text() - folder_path = self._folder_path_input.text() - - # Early exit if no folder path - if not folder_path: - self._build_menu() - self.echo("Folder is required ..") - self._set_valid_state(False) - return - - project_name = get_current_project_name() - folder_entity = None - if creator_plugin: - # Get the folder from the database which match with the name - folder_entity = ayon_api.get_folder_by_path( - project_name, folder_path, fields={"id"} - ) - - # Get plugin - if not folder_entity or not creator_plugin: - self._build_menu() - - if not creator_plugin: - self.echo("No registered product types ..") - else: - self.echo("Folder '{}' not found ..".format(folder_path)) - self._set_valid_state(False) - return - - folder_id = folder_entity["id"] - - task_name = get_current_task_name() - task_entity = ayon_api.get_task_by_name( - project_name, folder_id, task_name - ) - - # Calculate product name with Creator plugin - product_name = creator_plugin.get_product_name( - project_name, folder_entity, task_entity, user_input_text - ) - # Force replacement of prohibited symbols - # QUESTION should Creator care about this and here should be only - # validated with schema regex? - - # Allow curly brackets in product name for dynamic keys - curly_left = "__cbl__" - curly_right = "__cbr__" - tmp_product_name = ( - product_name - .replace("{", curly_left) - .replace("}", curly_right) - ) - # Replace prohibited symbols - tmp_product_name = re.sub( - "[^{}]+".format(PRODUCT_NAME_ALLOWED_SYMBOLS), - "", - tmp_product_name - ) - product_name = ( - tmp_product_name - .replace(curly_left, "{") - .replace(curly_right, "}") - ) - self._product_name_input.setText(product_name) - - # Get all products of the current folder - product_entities = ayon_api.get_products( - project_name, folder_ids={folder_id}, fields={"name"} - ) - existing_product_names = { - product_entity["name"] - for product_entity in product_entities - } - existing_product_names_low = set( - _name.lower() - for _name in existing_product_names - ) - - # Defaults to dropdown - defaults = [] - # Check if Creator plugin has set defaults - if ( - creator_plugin.defaults - and isinstance(creator_plugin.defaults, (list, tuple, set)) - ): - defaults = list(creator_plugin.defaults) - - # Replace - compare_regex = re.compile(re.sub( - user_input_text, "(.+)", product_name, flags=re.IGNORECASE - )) - variant_hints = set() - if user_input_text: - for _name in existing_product_names: - _result = compare_regex.search(_name) - if _result: - variant_hints |= set(_result.groups()) - - if variant_hints: - if defaults: - defaults.append(SEPARATOR) - defaults.extend(variant_hints) - self._build_menu(defaults) - - # Indicate product existence - if not user_input_text: - self._variant_input.as_empty() - elif product_name.lower() in existing_product_names_low: - # validate existence of product name with lowered text - # - "renderMain" vs. "rensermain" mean same path item for - # windows - self._variant_input.as_exists() - else: - self._variant_input.as_new() - - # Update the valid state - valid = product_name.strip() != "" - - self._set_valid_state(valid) - - def _on_selection_changed(self, old_idx, new_idx): - index = self._creators_view.currentIndex() - item_id = index.data(ITEM_ID_ROLE) - - creator_plugin = self._creators_model.get_creator_by_id(item_id) - - self._creator_info.set_item(creator_plugin) - - if creator_plugin is None: - return - - default = None - if hasattr(creator_plugin, "get_default_variant"): - default = creator_plugin.get_default_variant() - - if not default: - if ( - creator_plugin.defaults - and isinstance(creator_plugin.defaults, list) - ): - default = creator_plugin.defaults[0] - else: - default = "Default" - - self._variant_input.setText(default) - - self._on_data_changed() - - def keyPressEvent(self, event): - """Custom keyPressEvent. - - Override keyPressEvent to do nothing so that Maya's panels won't - take focus when pressing "SHIFT" whilst mouse is over viewport or - outliner. This way users don't accidentally perform Maya commands - whilst trying to name an instance. - - """ - pass - - def showEvent(self, event): - super(CreatorWindow, self).showEvent(event) - if self._first_show: - self._first_show = False - self.setStyleSheet(style.load_stylesheet()) - - def refresh(self): - self._folder_path_input.setText(get_current_folder_path()) - - self._creators_model.reset() - - product_types_smart_select = ( - get_current_project_settings() - ["core"] - ["tools"] - ["creator"] - ["product_types_smart_select"] - ) - current_index = None - product_type = None - task_name = get_current_task_name() or None - lowered_task_name = task_name.lower() - if task_name: - for smart_item in product_types_smart_select: - _low_task_names = { - name.lower() for name in smart_item["task_names"] - } - for _task_name in _low_task_names: - if _task_name in lowered_task_name: - product_type = smart_item["name"] - break - if product_type: - break - - if product_type: - indexes = self._creators_model.get_indexes_by_product_type( - product_type - ) - if indexes: - index = indexes[0] - current_index = self._creators_proxy.mapFromSource(index) - - if current_index is None or not current_index.isValid(): - current_index = self._creators_proxy.index(0, 0) - - self._creators_view.setCurrentIndex(current_index) - - def _on_create(self): - # Do not allow creation in an invalid state - if not self._is_valid: - return - - index = self._creators_view.currentIndex() - item_id = index.data(ITEM_ID_ROLE) - creator_plugin = self._creators_model.get_creator_by_id(item_id) - if creator_plugin is None: - return - - product_name = self._product_name_input.text() - folder_path = self._folder_path_input.text() - use_selection = self._useselection_chk.isChecked() - - variant = self._variant_input.text() - - error_info = None - try: - legacy_create( - creator_plugin, - product_name, - folder_path, - options={"useSelection": use_selection}, - data={"variant": variant} - ) - - except CreatorError as exc: - self.echo("Creator error: {}".format(str(exc))) - error_info = (str(exc), None) - - except Exception as exc: - self.echo("Program error: %s" % str(exc)) - - exc_type, exc_value, exc_traceback = sys.exc_info() - formatted_traceback = "".join(traceback.format_exception( - exc_type, exc_value, exc_traceback - )) - error_info = (str(exc), formatted_traceback) - - if error_info: - box = CreateErrorMessageBox( - creator_plugin.product_type, - product_name, - folder_path, - *error_info, - parent=self - ) - box.show() - # Store dialog so is not garbage collected before is shown - self._message_dialog = box - - else: - self.echo("Created %s .." % product_name) - - def _on_msg_timer(self): - self._msg_label.setText("") - - def echo(self, message): - self._msg_label.setText(str(message)) - self._msg_timer.start() - - -def show(parent=None): - """Display product creator GUI - - Arguments: - debug (bool, optional): Run loader in debug-mode, - defaults to False - parent (QtCore.QObject, optional): When provided parent the interface - to this QObject. - - """ - - try: - module.window.close() - del module.window - except (AttributeError, RuntimeError): - pass - - with qt_app_context(): - window = CreatorWindow(parent) - window.refresh() - window.show() - - module.window = window - - # Pull window to the front. - module.window.raise_() - module.window.activateWindow() From 7856ee98fef309a4404d37275631f7903864140c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 14 Aug 2025 17:25:22 +0200 Subject: [PATCH 341/595] remove import --- client/ayon_core/pipeline/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/pipeline/__init__.py b/client/ayon_core/pipeline/__init__.py index 65ad55d06e..f2ec952cd6 100644 --- a/client/ayon_core/pipeline/__init__.py +++ b/client/ayon_core/pipeline/__init__.py @@ -20,7 +20,6 @@ from .create import ( CreatorError, discover_creator_plugins, - discover_legacy_creator_plugins, register_creator_plugin, deregister_creator_plugin, register_creator_plugin_path, From 8314d83a0d52adbef475e63dffdc85cc51f47e45 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 14 Aug 2025 17:26:00 +0200 Subject: [PATCH 342/595] remove unused import --- client/ayon_core/pipeline/create/creator_plugins.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/pipeline/create/creator_plugins.py b/client/ayon_core/pipeline/create/creator_plugins.py index b890704649..7573589b82 100644 --- a/client/ayon_core/pipeline/create/creator_plugins.py +++ b/client/ayon_core/pipeline/create/creator_plugins.py @@ -6,7 +6,6 @@ from typing import TYPE_CHECKING, Optional, Dict, Any from abc import ABC, abstractmethod -from ayon_core.settings import get_project_settings from ayon_core.lib import Logger, get_version_from_path from ayon_core.pipeline.plugin_discover import ( discover, From 6b6c93376e18e16ebe3ef589345c121e0e2c2b06 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 15 Aug 2025 11:08:27 +0200 Subject: [PATCH 343/595] implemented abstract host class --- client/ayon_core/host/abstract.py | 96 +++++++++++++++++++++++++++++++ client/ayon_core/host/typing.py | 7 +++ 2 files changed, 103 insertions(+) create mode 100644 client/ayon_core/host/abstract.py create mode 100644 client/ayon_core/host/typing.py diff --git a/client/ayon_core/host/abstract.py b/client/ayon_core/host/abstract.py new file mode 100644 index 0000000000..26771aaffa --- /dev/null +++ b/client/ayon_core/host/abstract.py @@ -0,0 +1,96 @@ +from __future__ import annotations + +import logging +from abc import ABC, abstractmethod +import typing +from typing import Optional, Any + +from .constants import ContextChangeReason + +if typing.TYPE_CHECKING: + from ayon_core.pipeline import Anatomy + + from .typing import HostContextData + + +class AbstractHost(ABC): + """Abstract definition of host implementation.""" + @property + @abstractmethod + def log(self) -> logging.Logger: + pass + + @property + @abstractmethod + def name(self) -> str: + """Host name.""" + pass + + @abstractmethod + def get_current_context(self) -> HostContextData: + """Get the current context of the host. + + Current context is defined by project name, folder path and task name. + + Returns: + HostContextData: The current context of the host. + + """ + pass + + @abstractmethod + def set_current_context( + self, + folder_entity: dict[str, Any], + task_entity: dict[str, Any], + *, + reason: ContextChangeReason = ContextChangeReason.undefined, + project_entity: Optional[dict[str, Any]] = None, + anatomy: Optional[Anatomy] = None, + ) -> HostContextData: + """Change context of the host. + + Args: + folder_entity (dict[str, Any]): Folder entity. + task_entity (dict[str, Any]): Task entity. + reason (ContextChangeReason): Reason for change. + project_entity (dict[str, Any]): Project entity. + anatomy (Anatomy): Anatomy entity. + + """ + pass + + @abstractmethod + def get_current_project_name(self) -> str: + """Get the current project name. + + Returns: + Optional[str]: The current project name. + + """ + pass + + @abstractmethod + def get_current_folder_path(self) -> Optional[str]: + """Get the current folder path. + + Returns: + Optional[str]: The current folder path. + + """ + pass + + @abstractmethod + def get_current_task_name(self) -> Optional[str]: + """Get the current task name. + + Returns: + Optional[str]: The current task name. + + """ + pass + + @abstractmethod + def get_context_title(self) -> str: + """Get the context title used in UIs.""" + pass diff --git a/client/ayon_core/host/typing.py b/client/ayon_core/host/typing.py new file mode 100644 index 0000000000..a51460713b --- /dev/null +++ b/client/ayon_core/host/typing.py @@ -0,0 +1,7 @@ +from typing import Optional, TypedDict + + +class HostContextData(TypedDict): + project_name: str + folder_path: Optional[str] + task_name: Optional[str] From 044e41471810b06e28ab4051775169896916a455 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 15 Aug 2025 11:09:01 +0200 Subject: [PATCH 344/595] use AbstractHost for interfaces and HotBase --- client/ayon_core/host/host.py | 13 ++++--------- client/ayon_core/host/interfaces/interfaces.py | 6 ++++-- client/ayon_core/host/interfaces/workfiles.py | 3 ++- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index 7fc4b19bdd..7fd63a5864 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -3,26 +3,21 @@ from __future__ import annotations import os import logging import contextlib -from abc import ABC, abstractmethod -from dataclasses import dataclass import typing from typing import Optional, Any +from dataclasses import dataclass import ayon_api from ayon_core.lib import emit_event from .constants import ContextChangeReason +from .abstract import AbstractHost if typing.TYPE_CHECKING: from ayon_core.pipeline import Anatomy - from typing import TypedDict - - class HostContextData(TypedDict): - project_name: str - folder_path: Optional[str] - task_name: Optional[str] + from .typing import HostContextData @dataclass @@ -34,7 +29,7 @@ class ContextChangeData: anatomy: Anatomy -class HostBase(ABC): +class HostBase(AbstractHost): """Base of host implementation class. Host is pipeline implementation of DCC application. This class should help diff --git a/client/ayon_core/host/interfaces/interfaces.py b/client/ayon_core/host/interfaces/interfaces.py index a41dffe92a..8b7005085e 100644 --- a/client/ayon_core/host/interfaces/interfaces.py +++ b/client/ayon_core/host/interfaces/interfaces.py @@ -1,9 +1,11 @@ from abc import abstractmethod +from ayon_core.host.abstract import AbstractHost + from .exceptions import MissingMethodsError -class ILoadHost: +class ILoadHost(AbstractHost): """Implementation requirements to be able use reference of representations. The load plugins can do referencing even without implementation of methods @@ -83,7 +85,7 @@ class ILoadHost: return self.get_containers() -class IPublishHost: +class IPublishHost(AbstractHost): """Functions related to new creation system in new publisher. New publisher is not storing information only about each created instance diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 82d71d152a..93aad4c117 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -15,6 +15,7 @@ import arrow from ayon_core.lib import emit_event from ayon_core.settings import get_project_settings +from ayon_core.host.abstract import AbstractHost from ayon_core.host.constants import ContextChangeReason if typing.TYPE_CHECKING: @@ -821,7 +822,7 @@ class PublishedWorkfileInfo: return PublishedWorkfileInfo(**data) -class IWorkfileHost: +class IWorkfileHost(AbstractHost): """Implementation requirements to be able to use workfiles utils and tool. Some of the methods are pre-implemented as they generally do the same in From 89e92f555684382bce822165213e0b8cadee2f40 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 15 Aug 2025 11:09:33 +0200 Subject: [PATCH 345/595] remove name abstraction --- client/ayon_core/host/host.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index 7fd63a5864..9b7d43be94 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -114,13 +114,6 @@ class HostBase(AbstractHost): self._log = logging.getLogger(self.__class__.__name__) return self._log - @property - @abstractmethod - def name(self) -> str: - """Host name.""" - - pass - def get_current_project_name(self): """ Returns: From 77383fea1e3e23354e182e8637e94f51e4d11765 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 15 Aug 2025 11:09:54 +0200 Subject: [PATCH 346/595] updated docstrings and type hints --- client/ayon_core/host/host.py | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index 9b7d43be94..28cb6b0a09 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -104,41 +104,41 @@ class HostBase(AbstractHost): It is called automatically when 'ayon_core.pipeline.install_host' is triggered. - """ + """ pass @property - def log(self): + def log(self) -> logging.Logger: if self._log is None: self._log = logging.getLogger(self.__class__.__name__) return self._log - def get_current_project_name(self): + def get_current_project_name(self) -> str: """ Returns: - Union[str, None]: Current project name. - """ + str: Current project name. - return os.environ.get("AYON_PROJECT_NAME") + """ + return os.environ["AYON_PROJECT_NAME"] def get_current_folder_path(self) -> Optional[str]: """ Returns: - Union[str, None]: Current asset name. - """ + Optional[str]: Current asset name. + """ return os.environ.get("AYON_FOLDER_PATH") def get_current_task_name(self) -> Optional[str]: """ Returns: - Union[str, None]: Current task name. - """ + Optional[str]: Current task name. + """ return os.environ.get("AYON_TASK_NAME") - def get_current_context(self) -> "HostContextData": + def get_current_context(self) -> HostContextData: """Get current context information. This method should be used to get current context of host. Usage of @@ -147,10 +147,10 @@ class HostBase(AbstractHost): can't be caught properly. Returns: - Dict[str, Union[str, None]]: Context with 3 keys 'project_name', - 'folder_path' and 'task_name'. All of them can be 'None'. - """ + HostContextData: Current context with 'project_name', + 'folder_path' and 'task_name'. + """ return { "project_name": self.get_current_project_name(), "folder_path": self.get_current_folder_path(), @@ -165,7 +165,7 @@ class HostBase(AbstractHost): reason: ContextChangeReason = ContextChangeReason.undefined, project_entity: Optional[dict[str, Any]] = None, anatomy: Optional[Anatomy] = None, - ) -> "HostContextData": + ) -> HostContextData: """Set current context information. This method should be used to set current context of host. Usage of @@ -278,7 +278,7 @@ class HostBase(AbstractHost): project_name: str, folder_path: Optional[str], task_name: Optional[str], - ) -> "HostContextData": + ) -> HostContextData: """Emit context change event. Args: @@ -290,7 +290,7 @@ class HostBase(AbstractHost): HostContextData: Data send to context change event. """ - data = { + data: HostContextData = { "project_name": project_name, "folder_path": folder_path, "task_name": task_name, From 2bd18c4d9614e502d2a774093a2b4e8aa1b42397 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:39:32 +0200 Subject: [PATCH 347/595] added some of the classes to host init --- client/ayon_core/host/__init__.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/client/ayon_core/host/__init__.py b/client/ayon_core/host/__init__.py index ef5c324028..a20165bce2 100644 --- a/client/ayon_core/host/__init__.py +++ b/client/ayon_core/host/__init__.py @@ -1,6 +1,8 @@ from .constants import ContextChangeReason +from .abstract import AbstractHost from .host import ( HostBase, + HostContextData, ) from .interfaces import ( @@ -18,7 +20,10 @@ from .dirmap import HostDirmap __all__ = ( "ContextChangeReason", + "AbstractHost", + "HostBase", + "HostContextData", "IWorkfileHost", "WorkfileInfo", From 53d0d4985a1d1d1dfbcc8d9ec63006afca5bf10e Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:47:45 +0200 Subject: [PATCH 348/595] use 'AbstractHost' for type checking --- .../ayon_core/host/interfaces/interfaces.py | 8 ++++---- client/ayon_core/pipeline/context_tools.py | 20 +++++++++---------- .../workfile/workfile_template_builder.py | 16 +++++++-------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/client/ayon_core/host/interfaces/interfaces.py b/client/ayon_core/host/interfaces/interfaces.py index 8b7005085e..6f9a3d8c87 100644 --- a/client/ayon_core/host/interfaces/interfaces.py +++ b/client/ayon_core/host/interfaces/interfaces.py @@ -26,7 +26,7 @@ class ILoadHost(AbstractHost): loading. Checks only existence of methods. Args: - Union[ModuleType, HostBase]: Object of host where to look for + Union[ModuleType, AbstractHost]: Object of host where to look for required methods. Returns: @@ -48,7 +48,7 @@ class ILoadHost(AbstractHost): """Validate implemented methods of "old type" host for load workflow. Args: - Union[ModuleType, HostBase]: Object of host to validate. + Union[ModuleType, AbstractHost]: Object of host to validate. Raises: MissingMethodsError: If there are missing methods on host @@ -101,7 +101,7 @@ class IPublishHost(AbstractHost): new publish creation. Checks only existence of methods. Args: - Union[ModuleType, HostBase]: Host module where to look for + Union[ModuleType, AbstractHost]: Host module where to look for required methods. Returns: @@ -129,7 +129,7 @@ class IPublishHost(AbstractHost): """Validate implemented methods of "old type" host. Args: - Union[ModuleType, HostBase]: Host module to validate. + Union[ModuleType, AbstractHost]: Host module to validate. Raises: MissingMethodsError: If there are missing methods on host diff --git a/client/ayon_core/pipeline/context_tools.py b/client/ayon_core/pipeline/context_tools.py index 423e8f7216..0589eeb49f 100644 --- a/client/ayon_core/pipeline/context_tools.py +++ b/client/ayon_core/pipeline/context_tools.py @@ -13,7 +13,7 @@ import pyblish.api from pyblish.lib import MessageHandler from ayon_core import AYON_CORE_ROOT -from ayon_core.host import HostBase +from ayon_core.host import AbstractHost from ayon_core.lib import ( is_in_tests, initialize_ayon_connection, @@ -100,16 +100,16 @@ def registered_root(): return _registered_root["_"] -def install_host(host: HostBase) -> None: +def install_host(host: AbstractHost) -> None: """Install `host` into the running Python session. Args: - host (HostBase): A host interface object. + host (AbstractHost): A host interface object. """ - if not isinstance(host, HostBase): + if not isinstance(host, AbstractHost): log.error( - f"Host must be a subclass of 'HostBase', got '{type(host)}'." + f"Host must be a subclass of 'AbstractHost', got '{type(host)}'." ) global _is_installed @@ -310,7 +310,7 @@ def get_current_host_name(): """ host = registered_host() - if isinstance(host, HostBase): + if isinstance(host, AbstractHost): return host.name return os.environ.get("AYON_HOST_NAME") @@ -346,28 +346,28 @@ def get_global_context(): def get_current_context(): host = registered_host() - if isinstance(host, HostBase): + if isinstance(host, AbstractHost): return host.get_current_context() return get_global_context() def get_current_project_name(): host = registered_host() - if isinstance(host, HostBase): + if isinstance(host, AbstractHost): return host.get_current_project_name() return get_global_context()["project_name"] def get_current_folder_path(): host = registered_host() - if isinstance(host, HostBase): + if isinstance(host, AbstractHost): return host.get_current_folder_path() return get_global_context()["folder_path"] def get_current_task_name(): host = registered_host() - if isinstance(host, HostBase): + if isinstance(host, AbstractHost): return host.get_current_task_name() return get_global_context()["task_name"] diff --git a/client/ayon_core/pipeline/workfile/workfile_template_builder.py b/client/ayon_core/pipeline/workfile/workfile_template_builder.py index e2add99752..4349585b82 100644 --- a/client/ayon_core/pipeline/workfile/workfile_template_builder.py +++ b/client/ayon_core/pipeline/workfile/workfile_template_builder.py @@ -30,7 +30,7 @@ from ayon_api import ( ) from ayon_core.settings import get_project_settings -from ayon_core.host import IWorkfileHost, HostBase +from ayon_core.host import IWorkfileHost, AbstractHost from ayon_core.lib import ( Logger, StringTemplate, @@ -127,7 +127,7 @@ class AbstractTemplateBuilder(ABC): placeholder population. Args: - host (Union[HostBase, ModuleType]): Implementation of host. + host (Union[AbstractHost, ModuleType]): Implementation of host. """ _log = None @@ -135,7 +135,7 @@ class AbstractTemplateBuilder(ABC): def __init__(self, host): # Get host name - if isinstance(host, HostBase): + if isinstance(host, AbstractHost): host_name = host.name else: host_name = os.environ.get("AYON_HOST_NAME") @@ -163,24 +163,24 @@ class AbstractTemplateBuilder(ABC): @property def project_name(self): - if isinstance(self._host, HostBase): + if isinstance(self._host, AbstractHost): return self._host.get_current_project_name() return os.getenv("AYON_PROJECT_NAME") @property def current_folder_path(self): - if isinstance(self._host, HostBase): + if isinstance(self._host, AbstractHost): return self._host.get_current_folder_path() return os.getenv("AYON_FOLDER_PATH") @property def current_task_name(self): - if isinstance(self._host, HostBase): + if isinstance(self._host, AbstractHost): return self._host.get_current_task_name() return os.getenv("AYON_TASK_NAME") def get_current_context(self): - if isinstance(self._host, HostBase): + if isinstance(self._host, AbstractHost): return self._host.get_current_context() return { "project_name": self.project_name, @@ -256,7 +256,7 @@ class AbstractTemplateBuilder(ABC): """Access to host implementation. Returns: - Union[HostBase, ModuleType]: Implementation of host. + Union[AbstractHost, ModuleType]: Implementation of host. """ return self._host From ec92be4cae509a5baa31b71725da4bd5c1d68c54 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:48:10 +0200 Subject: [PATCH 349/595] simplified few type hints --- client/ayon_core/pipeline/create/context.py | 7 ++----- client/ayon_core/tools/publisher/abstract.py | 4 ++-- client/ayon_core/tools/sceneinventory/control.py | 4 ++-- client/ayon_core/tools/workfiles/models/workfiles.py | 9 ++------- 4 files changed, 8 insertions(+), 16 deletions(-) diff --git a/client/ayon_core/pipeline/create/context.py b/client/ayon_core/pipeline/create/context.py index 929cc59d2a..bd7dd4414f 100644 --- a/client/ayon_core/pipeline/create/context.py +++ b/client/ayon_core/pipeline/create/context.py @@ -49,15 +49,12 @@ from .creator_plugins import ( discover_convertor_plugins, ) if typing.TYPE_CHECKING: - from ayon_core.host import HostBase from ayon_core.lib import AbstractAttrDef from ayon_core.lib.events import EventCallback, Event from .structures import CreatedInstance from .creator_plugins import BaseCreator - class PublishHost(HostBase, IPublishHost): - pass # Import of functions and classes that were moved to different file # TODO Should be removed in future release - Added 24/08/28, 0.4.3-dev.1 @@ -163,7 +160,7 @@ class CreateContext: context which should be handled by host. Args: - host (PublishHost): Host implementation which handles implementation + host (IPublishHost): Host implementation which handles implementation and global metadata. headless (bool): Context is created out of UI (Current not used). reset (bool): Reset context on initialization. @@ -173,7 +170,7 @@ class CreateContext: def __init__( self, - host: "PublishHost", + host: IPublishHost, headless: bool = False, reset: bool = True, discover_publish_plugins: bool = True, diff --git a/client/ayon_core/tools/publisher/abstract.py b/client/ayon_core/tools/publisher/abstract.py index 6d0027d35d..14da15793d 100644 --- a/client/ayon_core/tools/publisher/abstract.py +++ b/client/ayon_core/tools/publisher/abstract.py @@ -13,7 +13,7 @@ from typing import ( ) from ayon_core.lib import AbstractAttrDef -from ayon_core.host import HostBase +from ayon_core.host import AbstractHost from ayon_core.pipeline.create import ( CreateContext, ConvertorItem, @@ -176,7 +176,7 @@ class AbstractPublisherBackend(AbstractPublisherCommon): pass @abstractmethod - def get_host(self) -> HostBase: + def get_host(self) -> AbstractHost: pass @abstractmethod diff --git a/client/ayon_core/tools/sceneinventory/control.py b/client/ayon_core/tools/sceneinventory/control.py index 60d9bc77a9..45f76a54ac 100644 --- a/client/ayon_core/tools/sceneinventory/control.py +++ b/client/ayon_core/tools/sceneinventory/control.py @@ -1,7 +1,7 @@ import ayon_api from ayon_core.lib.events import QueuedEventSystem -from ayon_core.host import HostBase +from ayon_core.host import ILoadHost from ayon_core.pipeline import ( registered_host, get_current_context, @@ -35,7 +35,7 @@ class SceneInventoryController: self._projects_model = ProjectsModel(self) self._event_system = self._create_event_system() - def get_host(self) -> HostBase: + def get_host(self) -> ILoadHost: return self._host def emit_event(self, topic, data=None, source=None): diff --git a/client/ayon_core/tools/workfiles/models/workfiles.py b/client/ayon_core/tools/workfiles/models/workfiles.py index d33a532222..5b5591fe43 100644 --- a/client/ayon_core/tools/workfiles/models/workfiles.py +++ b/client/ayon_core/tools/workfiles/models/workfiles.py @@ -14,7 +14,6 @@ from ayon_core.lib import ( Logger, ) from ayon_core.host import ( - HostBase, IWorkfileHost, WorkfileInfo, PublishedWorkfileInfo, @@ -49,19 +48,15 @@ if typing.TYPE_CHECKING: _NOT_SET = object() -class HostType(HostBase, IWorkfileHost): - pass - - class WorkfilesModel: """Workfiles model.""" def __init__( self, - host: HostType, + host: IWorkfileHost, controller: AbstractWorkfilesBackend ): - self._host: HostType = host + self._host: IWorkfileHost = host self._controller: AbstractWorkfilesBackend = controller self._log = Logger.get_logger("WorkfilesModel") From 644130ad7a4a09e9b51652773ec9cb83c12424a9 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 15 Aug 2025 12:51:33 +0200 Subject: [PATCH 350/595] fix imported class --- client/ayon_core/host/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/host/__init__.py b/client/ayon_core/host/__init__.py index a20165bce2..950c14564e 100644 --- a/client/ayon_core/host/__init__.py +++ b/client/ayon_core/host/__init__.py @@ -2,7 +2,7 @@ from .constants import ContextChangeReason from .abstract import AbstractHost from .host import ( HostBase, - HostContextData, + ContextChangeData, ) from .interfaces import ( @@ -23,7 +23,7 @@ __all__ = ( "AbstractHost", "HostBase", - "HostContextData", + "ContextChangeData", "IWorkfileHost", "WorkfileInfo", From 9ffaa15dfb4ec0484a5303ed1a8a04bd2805c7e9 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Fri, 15 Aug 2025 22:09:15 +0800 Subject: [PATCH 351/595] make sure the hero version can be created successfully by ensuring to copy the path into the right path --- .../plugins/load/create_hero_version.py | 141 ++++++++++++++---- 1 file changed, 110 insertions(+), 31 deletions(-) diff --git a/client/ayon_core/plugins/load/create_hero_version.py b/client/ayon_core/plugins/load/create_hero_version.py index 7e1a0d8a3d..b18e874644 100644 --- a/client/ayon_core/plugins/load/create_hero_version.py +++ b/client/ayon_core/plugins/load/create_hero_version.py @@ -14,7 +14,7 @@ from ayon_api.utils import create_entity_id from qtpy import QtWidgets, QtCore from ayon_core import style from ayon_core.pipeline import load, Anatomy -from ayon_core.lib import create_hard_link, source_hash +from ayon_core.lib import create_hard_link, source_hash, StringTemplate from ayon_core.lib.file_transaction import wait_for_future_errors from ayon_core.pipeline.publish import get_publish_template_name from ayon_core.pipeline.template_data import get_template_data @@ -83,7 +83,10 @@ class CreateHeroVersion(load.ProductLoaderPlugin): version_id = version["id"] project_name = project["name"] repres = list( - ayon_api.get_representations(project_name, version_ids={version_id})) + ayon_api.get_representations( + project_name, version_ids={version_id} + ) + ) anatomy_data = get_template_data( project_entity=project, folder_entity=folder, @@ -95,8 +98,9 @@ class CreateHeroVersion(load.ProductLoaderPlugin): } published_representations = {} for repre in repres: - repre_anatomy = anatomy_data - repre_anatomy["ext"] = repre.get("ext", "") + repre_anatomy = copy.deepcopy(anatomy_data) + if "ext" not in repre_anatomy: + repre_anatomy["ext"] = repre.get("context", {}).get("ext", "") published_representations[repre["id"]] = { "representation": repre, "published_files": [f["path"] for f in repre.get("files", [])], @@ -140,13 +144,18 @@ class CreateHeroVersion(load.ProductLoaderPlugin): hero=True, logger=None ) - hero_template = anatomy.get_template_item("hero", template_key, "path", default=None) + hero_template = anatomy.get_template_item( + "hero", template_key, "path", default=None + ) if hero_template is None: - raise RuntimeError(f"Project anatomy does not have hero template key: {template_key}") + raise RuntimeError("Project anatomy does not have hero " + f"template key: {template_key}") print(f"Hero template: {hero_template.template}") - hero_publish_dir = self.get_publish_dir(instance_data, anatomy, template_key) + hero_publish_dir = self.get_publish_dir( + instance_data, anatomy, template_key + ) print(f"Hero publish dir: {hero_publish_dir}") @@ -162,7 +171,8 @@ class CreateHeroVersion(load.ProductLoaderPlugin): raise RuntimeError("All published representations were filtered by name.") if src_version_entity is None: - src_version_entity = self.version_from_representations(project_name, published_repres) + src_version_entity = self.version_from_representations( + project_name, published_repres) if not src_version_entity: raise RuntimeError("Can't find origin version in database.") if src_version_entity["version"] == 0: @@ -195,10 +205,14 @@ class CreateHeroVersion(load.ProductLoaderPlugin): continue if file_path in all_repre_file_paths: continue - dst_filepath = file_path.replace(instance_publish_dir, hero_publish_dir) + dst_filepath = file_path.replace( + instance_publish_dir, hero_publish_dir + ) other_file_paths_mapping.append((file_path, dst_filepath)) - old_version, old_repres = self.current_hero_ents(project_name, src_version_entity) + old_version, old_repres = self.current_hero_ents( + project_name, src_version_entity + ) inactive_old_repres_by_name = {} old_repres_by_name = {} for repre in old_repres: @@ -220,7 +234,9 @@ class CreateHeroVersion(load.ProductLoaderPlugin): ) if old_version: update_data = prepare_changes(old_version, new_hero_version) - op_session.update_entity(project_name, "version", old_version["id"], update_data) + op_session.update_entity( + project_name, "version", old_version["id"], update_data + ) else: op_session.create_entity(project_name, "version", new_hero_version) @@ -233,7 +249,9 @@ class CreateHeroVersion(load.ProductLoaderPlugin): repre = repre_info["representation"] repre_name_low = repre["name"].lower() if repre_name_low in old_repres_by_name: - old_repres_to_replace[repre_name_low] = old_repres_by_name.pop(repre_name_low) + old_repres_to_replace[repre_name_low] = ( + old_repres_by_name.pop(repre_name_low) + ) if old_repres_by_name: old_repres_to_delete = old_repres_by_name @@ -254,7 +272,9 @@ class CreateHeroVersion(load.ProductLoaderPlugin): backup_hero_publish_dir = _backup_hero_publish_dir break if idx > max_idx: - raise AssertionError(f"Backup folders are fully occupied to max index {max_idx}") + raise AssertionError( + f"Backup folders are fully occupied to max index {max_idx}" + ) idx += 1 try: os.rename(hero_publish_dir, backup_hero_publish_dir) @@ -268,6 +288,7 @@ class CreateHeroVersion(load.ProductLoaderPlugin): repre_integrate_data = [] path_template_obj = anatomy.get_template_item( "hero", template_key, "path") + anatomy_root = {"root": anatomy.roots} for repre_info in published_repres.values(): published_files = repre_info["published_files"] if len(published_files) == 0: @@ -289,10 +310,21 @@ class CreateHeroVersion(load.ProductLoaderPlugin): "template": hero_template.template } dst_paths = [] + if len(published_files) == 1: dst_paths.append(str(template_filled)) - src_to_dst_file_paths.append((published_files[0], template_filled)) - print(f"Single published file: {published_files[0]} -> {template_filled}") + mapped_published_file = StringTemplate( + published_files[0]).format_strict( + anatomy_root + ) + src_to_dst_file_paths.append( + (mapped_published_file, template_filled) + ) + print( + f"Single published file: {mapped_published_file} -> " + f"{template_filled}" + ) + # src_to_dst_file_paths being wrong else: collections, remainders = clique.assemble(published_files) if remainders or not collections or len(collections) > 1: @@ -302,23 +334,34 @@ class CreateHeroVersion(load.ProductLoaderPlugin): src_col = collections[0] frame_splitter = "_-_FRAME_SPLIT_-_" anatomy_data["frame"] = frame_splitter - _template_filled = path_template_obj.format_strict(anatomy_data) + _template_filled = path_template_obj.format_strict( + anatomy_data + ) head, tail = _template_filled.split(frame_splitter) padding = anatomy.templates_obj.frame_padding - dst_col = clique.Collection(head=head, padding=padding, tail=tail) + dst_col = clique.Collection( + head=head, padding=padding, tail=tail + ) dst_col.indexes.clear() dst_col.indexes.update(src_col.indexes) for src_file, dst_file in zip(src_col, dst_col): + src_file = StringTemplate(src_file).format_strict( + anatomy_root + ) src_to_dst_file_paths.append((src_file, dst_file)) dst_paths.append(dst_file) - print(f"Collection published file: {src_file} -> {dst_file}") + print( + f"Collection published file: {src_file} " + f"-> {dst_file}" + ) repre_integrate_data.append((repre_entity, dst_paths)) # Copy files with ThreadPoolExecutor(max_workers=8) as executor: futures = [ executor.submit(self.copy_file, src_path, dst_path) - for src_path, dst_path in itertools.chain(src_to_dst_file_paths, other_file_paths_mapping) + for src_path, dst_path in itertools.chain( + src_to_dst_file_paths, other_file_paths_mapping) ] wait_for_future_errors(executor, futures) @@ -331,25 +374,49 @@ class CreateHeroVersion(load.ProductLoaderPlugin): old_repre = old_repres_to_replace.pop(repre_name_low) repre_entity["id"] = old_repre["id"] update_data = prepare_changes(old_repre, repre_entity) - op_session.update_entity(project_name, "representation", old_repre["id"], update_data) + op_session.update_entity( + project_name, + "representation", + old_repre["id"], + update_data + ) elif repre_name_low in inactive_old_repres_by_name: - inactive_repre = inactive_old_repres_by_name.pop(repre_name_low) + inactive_repre = inactive_old_repres_by_name.pop( + repre_name_low + ) repre_entity["id"] = inactive_repre["id"] update_data = prepare_changes(inactive_repre, repre_entity) - op_session.update_entity(project_name, "representation", inactive_repre["id"], update_data) + op_session.update_entity( + project_name, + "representation", + inactive_repre["id"], + update_data + ) else: - op_session.create_entity(project_name, "representation", repre_entity) + op_session.create_entity( + project_name, + "representation", + repre_entity + ) for repre in old_repres_to_delete.values(): - op_session.update_entity(project_name, "representation", repre["id"], {"active": False}) + op_session.update_entity( + project_name, + "representation", + repre["id"], + {"active": False} + ) op_session.commit() - if backup_hero_publish_dir is not None and os.path.exists(backup_hero_publish_dir): + if backup_hero_publish_dir is not None and os.path.exists( + backup_hero_publish_dir + ): shutil.rmtree(backup_hero_publish_dir) except Exception: - if backup_hero_publish_dir is not None and os.path.exists(backup_hero_publish_dir): + if backup_hero_publish_dir is not None and os.path.exists( + backup_hero_publish_dir): if os.path.exists(hero_publish_dir): shutil.rmtree(hero_publish_dir) os.rename(backup_hero_publish_dir, hero_publish_dir) @@ -375,8 +442,12 @@ class CreateHeroVersion(load.ProductLoaderPlugin): def get_publish_dir(self, instance_data, anatomy, template_key): template_data = copy.deepcopy(instance_data.get("anatomyData", {})) if "originalBasename" in instance_data: - template_data["originalBasename"] = instance_data["originalBasename"] - template_obj = anatomy.get_template_item("hero", template_key, "directory") + template_data["originalBasename"] = ( + instance_data["originalBasename"] + ) + template_obj = anatomy.get_template_item( + "hero", template_key, "directory" + ) return os.path.normpath(template_obj.format_strict(template_data)) def get_rootless_path(self, anatomy, path): @@ -403,13 +474,21 @@ class CreateHeroVersion(load.ProductLoaderPlugin): def version_from_representations(self, project_name, repres): for repre_info in repres.values(): - version = ayon_api.get_version_by_id(project_name, repre_info["representation"]["versionId"]) + version = ayon_api.get_version_by_id( + project_name, repre_info["representation"]["versionId"] + ) if version: return version def current_hero_ents(self, project_name, version): - hero_version = ayon_api.get_hero_version_by_product_id(project_name, version["productId"]) + hero_version = ayon_api.get_hero_version_by_product_id( + project_name, version["productId"] + ) if not hero_version: return (None, []) - hero_repres = list(ayon_api.get_representations(project_name, version_ids={hero_version["id"]})) + hero_repres = list( + ayon_api.get_representations( + project_name, version_ids={hero_version["id"]} + ) + ) return (hero_version, hero_repres) From 7e9493736d1abbddda6b2efa37302ac03a864fe3 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Fri, 15 Aug 2025 22:27:22 +0800 Subject: [PATCH 352/595] ruff fix --- .../plugins/load/create_hero_version.py | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/client/ayon_core/plugins/load/create_hero_version.py b/client/ayon_core/plugins/load/create_hero_version.py index b18e874644..d741dafcce 100644 --- a/client/ayon_core/plugins/load/create_hero_version.py +++ b/client/ayon_core/plugins/load/create_hero_version.py @@ -64,7 +64,6 @@ class CreateHeroVersion(load.ProductLoaderPlugin): ) msgBox.exec_() - def load(self, context, name=None, namespace=None, options=None) -> None: """Load hero version from context (dict as in context.py).""" success = True @@ -168,7 +167,9 @@ class CreateHeroVersion(load.ProductLoaderPlugin): for repre_id in filtered_repre_ids: published_repres.pop(repre_id, None) if not published_repres: - raise RuntimeError("All published representations were filtered by name.") + raise RuntimeError( + "All published representations were filtered by name." + ) if src_version_entity is None: src_version_entity = self.version_from_representations( @@ -266,15 +267,18 @@ class CreateHeroVersion(load.ProductLoaderPlugin): shutil.rmtree(_backup_hero_publish_dir) backup_hero_publish_dir = _backup_hero_publish_dir break - except Exception: - _backup_hero_publish_dir = backup_hero_publish_dir + str(idx) + except Exception as exc: + _backup_hero_publish_dir = ( + backup_hero_publish_dir + str(idx) + ) if not os.path.exists(_backup_hero_publish_dir): backup_hero_publish_dir = _backup_hero_publish_dir break if idx > max_idx: raise AssertionError( - f"Backup folders are fully occupied to max index {max_idx}" - ) + "Backup folders are fully occupied to max index " + f"{max_idx}" + ) from exc idx += 1 try: os.rename(hero_publish_dir, backup_hero_publish_dir) @@ -324,13 +328,16 @@ class CreateHeroVersion(load.ProductLoaderPlugin): f"Single published file: {mapped_published_file} -> " f"{template_filled}" ) - # src_to_dst_file_paths being wrong else: collections, remainders = clique.assemble(published_files) if remainders or not collections or len(collections) > 1: raise Exception( - "Integrity error. Files of published representation is " - "combination of frame collections and single files.") + ( + "Integrity error. Files of published " + "representation is combination of frame " + "collections and single files." + ) + ) src_col = collections[0] frame_splitter = "_-_FRAME_SPLIT_-_" anatomy_data["frame"] = frame_splitter From 60558e440c93a167c1c58e8614178ff15e9af23f Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 13:16:17 +0200 Subject: [PATCH 353/595] Removed unnecessary field --- client/ayon_core/tools/push_to_project/control.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index eb985a3f8c..b52eeb5fad 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -40,7 +40,6 @@ class PushToContextController: self.set_source(project_name, version_id) - self._library_only = True # Events system def emit_event(self, topic, data=None, source=None): From 86130207186b40667ff436d077712958cecab31f Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 13:17:10 +0200 Subject: [PATCH 354/595] Change formatting --- client/ayon_core/tools/push_to_project/ui/window.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index 344295f177..b2f3983557 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -99,8 +99,7 @@ class PushToContextSelectWindow(QtWidgets.QWidget): header_layout = QtWidgets.QHBoxLayout(header_widget) header_layout.setContentsMargins(0, 0, 0, 0) - header_layout.addWidget(header_label) - header_layout.addStretch(1) + header_layout.addWidget(header_label, 1) header_layout.addWidget(library_only_label, 0) header_layout.addWidget(library_only_checkbox, 0) From e7c0c8dab4fb91b010e587ac5f43694ac2beed50 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 13:19:04 +0200 Subject: [PATCH 355/595] Removed unnecessary refresh --- client/ayon_core/tools/push_to_project/ui/window.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index b2f3983557..38c343b023 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -410,6 +410,7 @@ class PushToContextSelectWindow(QtWidgets.QWidget): self._projects_combobox.set_standard_filter_enabled(state) self._projects_combobox.refresh() + def _on_user_input_timer(self): folder_name_enabled = self._new_folder_name_enabled folder_name = self._new_folder_name_input_text From 92ecc854c9396e6bef33d9b68619320cc4ecf08e Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 13:23:51 +0200 Subject: [PATCH 356/595] Simplified _copy_version_thumbnail logic Used cached get_thumbnail_path --- .../tools/push_to_project/models/integrate.py | 50 ++++++++----------- 1 file changed, 21 insertions(+), 29 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 341858148b..b180892d62 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -22,6 +22,7 @@ from ayon_core.lib import ( source_hash, ) from ayon_core.lib.file_transaction import FileTransaction +from ayon_core.pipeline.thumbnails import get_thumbnail_path from ayon_core.settings import get_project_settings from ayon_core.pipeline import Anatomy from ayon_core.pipeline.version_start import get_versioning_start @@ -1150,36 +1151,27 @@ class ProjectPushItemProcess: ) def _copy_version_thumbnail(self): - version_thumbnail = ayon_api.get_version_thumbnail( - self._item.src_project_name, self._src_version_entity["id"]) - if not version_thumbnail or not version_thumbnail.id: + thumbnail_id = self._src_version_entity["thumbnailId"] + if not thumbnail_id: return - - temp_file_name = None - try: - with tempfile.NamedTemporaryFile(mode='w+b', delete=False) as fp: - fp.write(version_thumbnail.content) - temp_file_name = fp.name - - new_thumbnail_id = ayon_api.create_thumbnail( - self._item.dst_project_name, - temp_file_name - ) - - task_id = None - if self._task_info: - task_id = self._task_info["id"] - - self._operations.update_version( - project_name=self._item.dst_project_name, - version_id=self._version_entity["id"], - task_id=task_id, - thumbnail_id=new_thumbnail_id - ) - self._operations.commit() - finally: - if temp_file_name and os.path.exists(temp_file_name): - os.remove(temp_file_name) + path = get_thumbnail_path( + self._item.src_project_name, + "version", + self._src_version_entity["id"], + thumbnail_id + ) + if not path: + return + new_thumbnail_id = ayon_api.create_thumbnail( + self._item.dst_project_name, + path + ) + self._operations.update_version( + project_name=self._item.dst_project_name, + version_id=self._version_entity["id"], + thumbnail_id=new_thumbnail_id + ) + self._operations.commit() class IntegrateModel: From 3faee05cf6c05e089d8be8d42708493e7114933b Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 13:28:24 +0200 Subject: [PATCH 357/595] Added toggle for keeping original names of publishes --- .../ayon_core/tools/push_to_project/control.py | 10 ++++++---- .../tools/push_to_project/ui/window.py | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index b52eeb5fad..5e1f758d79 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -40,6 +40,8 @@ class PushToContextController: self.set_source(project_name, version_id) + self._use_original_name = False + # Events system def emit_event(self, topic, data=None, source=None): @@ -315,6 +317,8 @@ class PushToContextController: return product_name def _check_submit_validations(self): + if self._use_original_name: + return True if not self._user_values.is_valid: return False @@ -339,10 +343,8 @@ class PushToContextController: ) def _submit_callback(self): - process_item_id = self._process_item_id - if process_item_id is None: - return - self._integrate_model.integrate_item(process_item_id) + for process_item_id in self._process_item_ids: + self._integrate_model.integrate_item(process_item_id) self._emit_event("submit.finished", {}) if process_item_id == self._process_item_id: self._process_item_id = None diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index 38c343b023..1f40958a66 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -133,6 +133,7 @@ class PushToContextSelectWindow(QtWidgets.QWidget): inputs_widget = QtWidgets.QWidget(main_splitter) new_folder_checkbox = NiceCheckbox(True, parent=inputs_widget) + original_names_checkbox = NiceCheckbox(False, parent=inputs_widget) folder_name_input = PlaceholderLineEdit(inputs_widget) folder_name_input.setPlaceholderText("< Name of new folder >") @@ -151,6 +152,8 @@ class PushToContextSelectWindow(QtWidgets.QWidget): inputs_layout.addRow("Create new folder", new_folder_checkbox) inputs_layout.addRow("New folder name", folder_name_input) inputs_layout.addRow("Variant", variant_input) + inputs_layout.addRow( + "Use original product names", original_names_checkbox) inputs_layout.addRow("Comment", comment_input) main_splitter.addWidget(context_widget) @@ -250,6 +253,8 @@ class PushToContextSelectWindow(QtWidgets.QWidget): variant_input.textChanged.connect(self._on_variant_change) comment_input.textChanged.connect(self._on_comment_change) library_only_checkbox.stateChanged.connect(self._on_library_only_change) + original_names_checkbox.stateChanged.connect( + self._on_original_names_change) publish_btn.clicked.connect(self._on_select_click) cancel_btn.clicked.connect(self._on_close_click) @@ -408,8 +413,15 @@ class PushToContextSelectWindow(QtWidgets.QWidget): """Change toggle state, reset filter, recalculate dropdown""" state = bool(state) self._projects_combobox.set_standard_filter_enabled(state) - self._projects_combobox.refresh() + def _on_original_names_change(self, state: int) -> None: + use_original_name = bool(state) + self._new_folder_name_enabled = not use_original_name + self._new_folder_checkbox.setEnabled(not use_original_name) + self._folder_name_input.setEnabled(not use_original_name) + self._variant_input.setEnabled(not use_original_name) + self._controller._use_original_name = use_original_name + self.refresh() def _on_user_input_timer(self): folder_name_enabled = self._new_folder_name_enabled @@ -466,6 +478,8 @@ class PushToContextSelectWindow(QtWidgets.QWidget): self._header_label.setText(self._controller.get_source_label()) def _invalidate_new_folder_name(self, folder_name, is_valid): + if self._controller._use_original_name: + is_valid = True self._tasks_widget.setVisible(folder_name is None) if self._folder_is_valid is is_valid: return @@ -478,6 +492,8 @@ class PushToContextSelectWindow(QtWidgets.QWidget): ) def _invalidate_variant(self, is_valid): + if self._controller._use_original_name: + is_valid = True if self._variant_is_valid is is_valid: return self._variant_is_valid = is_valid From ef9ab3bcdc106854472608a5a0772888ed128089 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 13:31:31 +0200 Subject: [PATCH 358/595] Changed main input to accept multiple version ids --- client/ayon_core/tools/push_to_project/main.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/main.py b/client/ayon_core/tools/push_to_project/main.py index a6ff38c16f..3a80dc2bb2 100644 --- a/client/ayon_core/tools/push_to_project/main.py +++ b/client/ayon_core/tools/push_to_project/main.py @@ -4,28 +4,28 @@ from ayon_core.tools.utils import get_ayon_qt_app from ayon_core.tools.push_to_project.ui import PushToContextSelectWindow -def main_show(project_name, version_id): +def main_show(project_name, version_ids): app = get_ayon_qt_app() window = PushToContextSelectWindow() window.show() - window.set_source(project_name, version_id) + window.set_source(project_name, version_ids) app.exec_() @click.command() @click.option("--project", help="Source project name") -@click.option("--version", help="Source version id") -def main(project, version): +@click.option("--versions", help="Source version ids") +def main(project, versions): """Run PushToProject tool to integrate version in different project. Args: project (str): Source project name. - version (str): Version id. + versions (str): comma separated versions for same context """ - main_show(project, version) + main_show(project, versions) if __name__ == "__main__": From 965f937e28022e6154e4f2f5ace34e429580a764 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 13:32:15 +0200 Subject: [PATCH 359/595] Implemented loader action to push multiple versions --- client/ayon_core/plugins/load/push_to_library.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/client/ayon_core/plugins/load/push_to_library.py b/client/ayon_core/plugins/load/push_to_library.py index 22c10bbad7..42a63a8625 100644 --- a/client/ayon_core/plugins/load/push_to_library.py +++ b/client/ayon_core/plugins/load/push_to_library.py @@ -28,25 +28,22 @@ class PushToLibraryProject(load.ProductLoaderPlugin): if not filtered_contexts: raise LoadError("Nothing to push for your selection") - if len(filtered_contexts) > 1: - raise LoadError("Please select only one item") - - context = tuple(filtered_contexts)[0] - push_tool_script_path = os.path.join( AYON_CORE_ROOT, "tools", "push_to_project", "main.py" ) + project_name = tuple(filtered_contexts)[0]["project"]["name"] - project_name = context["project"]["name"] - version_id = context["version"]["id"] + version_ids = [] + for context in filtered_contexts: + version_ids.append(context["version"]["id"]) args = get_ayon_launcher_args( "run", push_tool_script_path, "--project", project_name, - "--version", version_id + "--versions", ",".join(version_ids) ) run_detached_process(args) From 073f8bfec58f4ab97d04ee74e4f88b20857e87ec Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 13:35:05 +0200 Subject: [PATCH 360/595] Implemented processing of multiple items --- .../tools/push_to_project/control.py | 121 ++++++++++-------- .../tools/push_to_project/ui/window.py | 46 ++++--- 2 files changed, 100 insertions(+), 67 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index 5e1f758d79..88031d2a8a 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -27,11 +27,11 @@ class PushToContextController: self._user_values = UserPublishValuesModel(self) self._src_project_name = None - self._src_version_id = None + self._src_version_ids = [] self._src_folder_entity = None self._src_folder_task_entities = {} - self._src_product_entity = None - self._src_version_entity = None + self._src_product_entities = [] + self._src_version_entities = [] self._src_label = None self._submission_enabled = False @@ -54,38 +54,43 @@ class PushToContextController: def register_event_callback(self, topic, callback): self._event_system.add_callback(topic, callback) - def set_source(self, project_name, version_id): + def set_source(self, project_name, version_ids): """Set source project and version. Args: project_name (Union[str, None]): Source project name. - version_id (Union[str, None]): Source version id. + version_id (Union[str, None]): Comma separated source version ids. """ if ( project_name == self._src_project_name - and version_id == self._src_version_id + and version_ids == self._src_version_ids ): return self._src_project_name = project_name - self._src_version_id = version_id + self._src_version_ids = version_ids.split(",") self._src_label = None folder_entity = None task_entities = {} - product_entity = None - version_entity = None - if project_name and version_id: - version_entity = ayon_api.get_version_by_id( - project_name, version_id + product_entities = None + version_entities = None + if project_name and self._src_version_ids: + version_entities = list(ayon_api.get_versions( + project_name, version_ids=self._src_version_ids)) + + if version_entities: + product_ids = [ + version_entity["productId"] + for version_entity in version_entities + ] + product_entities = list(ayon_api.get_products( + project_name, product_ids=product_ids) ) - if version_entity: - product_entity = ayon_api.get_product_by_id( - project_name, version_entity["productId"] - ) - - if product_entity: + if product_entities: + # all products for same folder + product_entity = product_entities[0] folder_entity = ayon_api.get_folder_by_id( project_name, product_entity["folderId"] ) @@ -100,15 +105,15 @@ class PushToContextController: self._src_folder_entity = folder_entity self._src_folder_task_entities = task_entities - self._src_product_entity = product_entity - self._src_version_entity = version_entity - if folder_entity: + self._src_product_entities = product_entities + self._src_version_entities = version_entities + if folder_entity and len(list(version_entities)) == 1: self._user_values.set_new_folder_name(folder_entity["name"]) variant = self._get_src_variant() if variant: self._user_values.set_variant(variant) - comment = version_entity["attrib"].get("comment") + comment = version_entities[0]["attrib"].get("comment") if comment: self._user_values.set_comment(comment) @@ -116,7 +121,7 @@ class PushToContextController: "source.changed", { "project_name": project_name, - "version_id": version_id + "version_ids": self._src_version_ids } ) @@ -179,29 +184,32 @@ class PushToContextController: if self._process_thread is not None: return - item_id = self._integrate_model.create_process_item( - self._src_project_name, - self._src_version_id, - self._selection_model.get_selected_project_name(), - self._selection_model.get_selected_folder_id(), - self._selection_model.get_selected_task_name(), - self._user_values.variant, - comment=self._user_values.comment, - new_folder_name=self._user_values.new_folder_name, - dst_version=1 - ) + item_ids = [] + for src_version_entity in self._src_version_entities: + item_id = self._integrate_model.create_process_item( + self._src_project_name, + src_version_entity["id"], + self._selection_model.get_selected_project_name(), + self._selection_model.get_selected_folder_id(), + self._selection_model.get_selected_task_name(), + self._user_values.variant, + comment=self._user_values.comment, + new_folder_name=self._user_values.new_folder_name, + dst_version=1, + ) + item_ids.append(item_id) - self._process_item_id = item_id + self._process_item_ids = item_ids self._emit_event("submit.started") if wait: self._submit_callback() - self._process_item_id = None + self._process_item_ids = [] return item_id thread = threading.Thread(target=self._submit_callback) self._process_thread = thread thread.start() - return item_id + return item_ids def wait_for_process_thread(self): if self._process_thread is None: @@ -210,22 +218,34 @@ class PushToContextController: self._process_thread = None def _prepare_source_label(self): - if not self._src_project_name or not self._src_version_id: + if not self._src_project_name or not self._src_version_ids: return "Source is not defined" folder_entity = self._src_folder_entity if not folder_entity: return "Source is invalid" + no_of_products = len(self._src_product_entities) + no_of_versions = len(self._src_version_entities) + if no_of_products != no_of_versions: + return (f"Not matching number of products {no_of_products} and " + f"versions {no_of_versions}") + folder_path = folder_entity["path"] - product_entity = self._src_product_entity - version_entity = self._src_version_entity - return "Source: {}{}/{}/v{:0>3}".format( - self._src_project_name, - folder_path, - product_entity["name"], - version_entity["version"] - ) + src_labels = [] + for idx in range(0, no_of_versions): + product_entity = self._src_product_entities[idx] + version_entity = self._src_version_entities[idx] + src_labels.append( + "Source: {}{}/{}/v{:0>3}".format( + self._src_project_name, + folder_path, + product_entity["name"], + version_entity["version"], + ) + ) + + return "\n".join(src_labels) def _get_task_info_from_repre_entities( self, task_entities, repre_entities @@ -258,8 +278,9 @@ class PushToContextController: return None, None def _get_src_variant(self): + """Could be triggered only if single version is moved.""" project_name = self._src_project_name - version_entity = self._src_version_entity + version_entity = self._src_version_entities[0] task_entities = self._src_folder_task_entities repre_entities = ayon_api.get_representations( project_name, version_ids={version_entity["id"]} @@ -269,7 +290,7 @@ class PushToContextController: ) project_settings = get_project_settings(project_name) - product_type = self._src_product_entity["productType"] + product_type = self._src_product_entities[0]["productType"] template = get_product_name_template( self._src_project_name, product_type, @@ -303,7 +324,7 @@ class PushToContextController: print("Failed format", exc) return "" - product_name = self._src_product_entity["name"] + product_name = self._src_product_entities[0]["name"] if ( (product_s and not product_name.startswith(product_s)) or (product_e and not product_name.endswith(product_e)) @@ -346,8 +367,6 @@ class PushToContextController: for process_item_id in self._process_item_ids: self._integrate_model.integrate_item(process_item_id) self._emit_event("submit.finished", {}) - if process_item_id == self._process_item_id: - self._process_item_id = None def _emit_event(self, topic, data=None): if data is None: diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index 1f40958a66..147191e659 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -331,7 +331,7 @@ class PushToContextSelectWindow(QtWidgets.QWidget): self._main_thread_timer = main_thread_timer self._main_thread_timer_can_stop = True self._last_submit_message = None - self._process_item_id = None + self._process_item_ids = [] self._variant_is_valid = None self._folder_is_valid = None @@ -342,17 +342,17 @@ class PushToContextSelectWindow(QtWidgets.QWidget): overlay_try_btn.setVisible(False) # Support of public api function of controller - def set_source(self, project_name, version_id): + def set_source(self, project_name, version_ids): """Set source project and version. Call the method on controller. Args: project_name (Union[str, None]): Name of project. - version_id (Union[str, None]): Version id. + version_id (Union[str, None]): Version ids. """ - self._controller.set_source(project_name, version_id) + self._controller.set_source(project_name, version_ids) def showEvent(self, event): super(PushToContextSelectWindow, self).showEvent(event) @@ -528,31 +528,45 @@ class PushToContextSelectWindow(QtWidgets.QWidget): self._overlay_label.setText(self._last_submit_message) self._last_submit_message = None - process_status = self._controller.get_process_item_status( - self._process_item_id - ) - push_failed = process_status["failed"] - fail_traceback = process_status["full_traceback"] + failed_pushes = [] + fail_tracebacks = [] + for process_item_id in self._process_item_ids: + process_status = self._controller.get_process_item_status( + process_item_id + ) + if process_status["failed"]: + failed_pushes.append(process_status) + # push_failed = process_status["failed"] + # fail_traceback = process_status["full_traceback"] if self._main_thread_timer_can_stop: self._main_thread_timer.stop() self._overlay_close_btn.setVisible(True) - if push_failed: + if failed_pushes: self._overlay_try_btn.setVisible(True) - if fail_traceback: + fail_tracebacks = [ + process_status["full_traceback"] + for process_status in failed_pushes + if process_status["full_traceback"] + ] + if fail_tracebacks: self._show_detail_btn.setVisible(True) - if push_failed: - reason = process_status["fail_reason"] - if fail_traceback: + if failed_pushes: + reasons = [ + process_status["fail_reason"] + for process_status in failed_pushes + ] + if fail_tracebacks: + reason = "\n".join(reasons) message = ( "Unhandled error happened." " Check error detail for more information." ) self._error_detail_dialog.set_detail( - reason, fail_traceback + reason, "\n".join(fail_tracebacks) ) else: - message = f"Push Failed:\n{reason}" + message = f"Push Failed:\n{reasons}" self._overlay_label.setText(message) set_style_property(self._overlay_close_btn, "state", "error") From c7c28e1153777d12f4c69b3f76095fcd2bb667df Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 13:37:03 +0200 Subject: [PATCH 361/595] Pushed use_original_name to ProjectPushItem --- .../tools/push_to_project/control.py | 1 + .../tools/push_to_project/models/integrate.py | 66 +++++++++++-------- 2 files changed, 39 insertions(+), 28 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index 88031d2a8a..483efdd22d 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -196,6 +196,7 @@ class PushToContextController: comment=self._user_values.comment, new_folder_name=self._user_values.new_folder_name, dst_version=1, + use_original_name=self._use_original_name, ) item_ids.append(item_id) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index b180892d62..c66c74219c 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -90,6 +90,7 @@ class ProjectPushItem: new_folder_name, dst_version, item_id=None, + use_original_name=False ): if not item_id: item_id = uuid.uuid4().hex @@ -104,6 +105,7 @@ class ProjectPushItem: self.comment = comment or "" self.item_id = item_id self._repr_value = None + self.use_original_name = use_original_name @property def _repr(self): @@ -115,7 +117,8 @@ class ProjectPushItem: str(self.dst_folder_id), str(self.new_folder_name), str(self.dst_task_name), - str(self.dst_version) + str(self.dst_version), + self.use_original_name ]) return self._repr_value @@ -134,6 +137,7 @@ class ProjectPushItem: "comment": self.comment, "new_folder_name": self.new_folder_name, "item_id": self.item_id, + "use_original_name": self.use_original_name } @classmethod @@ -373,7 +377,7 @@ class ProjectPushRepreItem: resource_files.append(ResourceFile(filepath, relative_path)) continue - filepath = os.path.join(src_dirpath, basename) + # filepath = os.path.join(src_dirpath, basename) frame = None udim = None for item in src_basename_regex.finditer(basename): @@ -819,31 +823,34 @@ class ProjectPushItemProcess: self._template_name = template_name def _determine_product_name(self): - product_type = self._product_type - task_info = self._task_info - task_name = task_type = None - if task_info: - task_name = task_info["name"] - task_type = task_info["taskType"] + if self._item.use_original_name: + product_name = self._src_product_entity["name"] + else: + product_type = self._product_type + task_info = self._task_info + task_name = task_type = None + if task_info: + task_name = task_info["name"] + task_type = task_info["taskType"] - try: - product_name = get_product_name( - self._item.dst_project_name, - task_name, - task_type, - self.host_name, - product_type, - self._item.variant, - project_settings=self._project_settings - ) - except TaskNotSetError: - self._status.set_failed( - "Target product name template requires task name. To continue" - " you have to select target task or change settings" - " ayon+settings://core/tools/creator/product_name_profiles" - f"?project={self._item.dst_project_name}." - ) - raise PushToProjectError(self._status.fail_reason) + try: + product_name = get_product_name( + self._item.dst_project_name, + task_name, + task_type, + self.host_name, + product_type, + self._item.variant, + project_settings=self._project_settings + ) + except TaskNotSetError: + self._status.set_failed( + "Target product name template requires task name. To " + "continue you have to select target task or change settings " + " ayon+settings://core/tools/creator/product_name_profiles" + f"?project={self._item.dst_project_name}." + ) + raise PushToProjectError(self._status.fail_reason) self._log_info( f"Push will be integrating to product with name '{product_name}'" @@ -1137,7 +1144,7 @@ class ProjectPushItemProcess: self._item.dst_project_name, "representation", entity_id, - changes + changes, ) existing_repre_names = set(existing_repres_by_low_name.keys()) @@ -1196,6 +1203,7 @@ class IntegrateModel: comment, new_folder_name, dst_version, + use_original_name ): """Create new item for integration. @@ -1209,6 +1217,7 @@ class IntegrateModel: comment (Union[str, None]): Comment. new_folder_name (Union[str, None]): New folder name. dst_version (int): Destination version number. + use_original_name (bool): If original product names should be used Returns: str: Item id. The id can be used to trigger integration or get @@ -1224,7 +1233,8 @@ class IntegrateModel: variant, comment=comment, new_folder_name=new_folder_name, - dst_version=dst_version + dst_version=dst_version, + use_original_name=use_original_name ) process_item = ProjectPushItemProcess(self, item) self._process_items[item.item_id] = process_item From 4a44570799f6d5a020a72b6cef60446163782600 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 13:37:36 +0200 Subject: [PATCH 362/595] Invalidate all input fields after refresh --- client/ayon_core/tools/push_to_project/ui/window.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index 147191e659..d07488e719 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -370,7 +370,7 @@ class PushToContextSelectWindow(QtWidgets.QWidget): self._invalidate_new_folder_name( new_folder_name, user_values["is_new_folder_name_valid"] ) - + self._controller._invalidate() self._projects_combobox.refresh() def _on_first_show(self): From 6c6be3508f5292324123fad320d78d98644b7de9 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 13:53:14 +0200 Subject: [PATCH 363/595] Propagate taskId to limit json parse issue --- client/ayon_core/tools/push_to_project/models/integrate.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index b180892d62..0c654a5495 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1169,6 +1169,7 @@ class ProjectPushItemProcess: self._operations.update_version( project_name=self._item.dst_project_name, version_id=self._version_entity["id"], + task_id=self._version_entity.get("taskId"), thumbnail_id=new_thumbnail_id ) self._operations.commit() From 7860c7d875c539f52bfdd78c590ebc77a80c5af6 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 13:55:49 +0200 Subject: [PATCH 364/595] Removed unnecessary refresh --- client/ayon_core/tools/push_to_project/ui/window.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index 38c343b023..495ef83ce6 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -408,8 +408,6 @@ class PushToContextSelectWindow(QtWidgets.QWidget): """Change toggle state, reset filter, recalculate dropdown""" state = bool(state) self._projects_combobox.set_standard_filter_enabled(state) - self._projects_combobox.refresh() - def _on_user_input_timer(self): folder_name_enabled = self._new_folder_name_enabled From d79bd055bcf771553076016b5cfd02e9ad4c5468 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 14:03:08 +0200 Subject: [PATCH 365/595] Removed unnecessary import --- client/ayon_core/tools/push_to_project/models/integrate.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 0c654a5495..ac2f506112 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -3,7 +3,6 @@ import re import copy import itertools import sys -import tempfile import traceback import uuid From 930439ba12990611d8b01a7114fc4cdd5a77dab2 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 14:26:28 +0200 Subject: [PATCH 366/595] Fix copy of frames based representations --- client/ayon_core/tools/push_to_project/models/integrate.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index ac2f506112..40c418e513 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -372,7 +372,6 @@ class ProjectPushRepreItem: resource_files.append(ResourceFile(filepath, relative_path)) continue - filepath = os.path.join(src_dirpath, basename) frame = None udim = None for item in src_basename_regex.finditer(basename): From 18ad64e2260124407cef7d01d37e5ceba0527f20 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 14:43:29 +0200 Subject: [PATCH 367/595] Updated _copy_version_thumbnail logic --- .../tools/push_to_project/models/integrate.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 40c418e513..08fafcbf2d 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -484,7 +484,6 @@ class ProjectPushItemProcess: self._make_sure_version_exists() self._log_info("Prerequirements were prepared") self._integrate_representations() - self._copy_version_thumbnail() self._log_info("Integration finished") except PushToProjectError as exc: @@ -918,14 +917,19 @@ class ProjectPushItemProcess: task_name=self._task_info["name"], task_type=self._task_info["taskType"], product_type=product_type, - product_name=product_entity["name"] + product_name=product_entity["name"], ) existing_version_entity = ayon_api.get_version_by_name( project_name, version, product_id ) + thumbnail_id = self._copy_version_thumbnail() + # Update existing version if existing_version_entity: + updata_data = {"attrib": dst_attrib} + if thumbnail_id: + updata_data["thumbnailId"] = thumbnail_id self._operations.update_entity( project_name, "version", @@ -940,6 +944,7 @@ class ProjectPushItemProcess: version, product_id, attribs=dst_attrib, + thumbnail_id=thumbnail_id, ) self._operations.create_entity( project_name, "version", version_entity @@ -1160,17 +1165,10 @@ class ProjectPushItemProcess: ) if not path: return - new_thumbnail_id = ayon_api.create_thumbnail( + return ayon_api.create_thumbnail( self._item.dst_project_name, path ) - self._operations.update_version( - project_name=self._item.dst_project_name, - version_id=self._version_entity["id"], - task_id=self._version_entity.get("taskId"), - thumbnail_id=new_thumbnail_id - ) - self._operations.commit() class IntegrateModel: From c2b6204c0a1c10b463e9810009015b3e326df8ba Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 15:09:17 +0200 Subject: [PATCH 368/595] Formatting change --- client/ayon_core/tools/push_to_project/control.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index b52eeb5fad..fb080d158b 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -40,7 +40,6 @@ class PushToContextController: self.set_source(project_name, version_id) - # Events system def emit_event(self, topic, data=None, source=None): """Use implemented event system to trigger event.""" From 8586431f17ac6503f604e7c1cf9be440f6483e6b Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 15:34:54 +0200 Subject: [PATCH 369/595] Fix version id argument --- client/ayon_core/tools/push_to_project/control.py | 9 +++++---- client/ayon_core/tools/push_to_project/ui/window.py | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index 1ccda9440d..b90e938cf3 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -16,7 +16,7 @@ from .models import ( class PushToContextController: - def __init__(self, project_name=None, version_id=None): + def __init__(self, project_name=None, version_ids=None): self._event_system = self._create_event_system() self._projects_model = ProjectsModel(self) @@ -38,7 +38,7 @@ class PushToContextController: self._process_thread = None self._process_item_id = None - self.set_source(project_name, version_id) + self.set_source(project_name, version_ids) self._use_original_name = False @@ -58,9 +58,10 @@ class PushToContextController: Args: project_name (Union[str, None]): Source project name. - version_id (Union[str, None]): Comma separated source version ids. + version_ids (Union[str, None]): Comma separated source version ids. """ - + if not project_name or not version_ids: + return if ( project_name == self._src_project_name and version_ids == self._src_version_ids diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index d07488e719..3fb1822d92 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -349,7 +349,7 @@ class PushToContextSelectWindow(QtWidgets.QWidget): Args: project_name (Union[str, None]): Name of project. - version_id (Union[str, None]): Version ids. + version_ids (Union[str, None]): comma separated Version ids. """ self._controller.set_source(project_name, version_ids) From cb09825b8b36802b443d1ad5a06ac250361ca004 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 16:33:57 +0200 Subject: [PATCH 370/595] Removed set_source in init --- client/ayon_core/tools/push_to_project/control.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index b90e938cf3..d02cd4dfc0 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -38,8 +38,6 @@ class PushToContextController: self._process_thread = None self._process_item_id = None - self.set_source(project_name, version_ids) - self._use_original_name = False # Events system From 629794f6d64d4569fa03f48b13e5d2013697ff4e Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 16:41:08 +0200 Subject: [PATCH 371/595] Return formatting change Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/models/integrate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 08fafcbf2d..73a00a5cd9 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1156,7 +1156,7 @@ class ProjectPushItemProcess: def _copy_version_thumbnail(self): thumbnail_id = self._src_version_entity["thumbnailId"] if not thumbnail_id: - return + return None path = get_thumbnail_path( self._item.src_project_name, "version", From 78cd71138337f54fef8544a34625cf5d06b9e53b Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 16:41:18 +0200 Subject: [PATCH 372/595] Return formatting change Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/models/integrate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 73a00a5cd9..197cefe819 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1164,7 +1164,7 @@ class ProjectPushItemProcess: thumbnail_id ) if not path: - return + return None return ayon_api.create_thumbnail( self._item.dst_project_name, path From 8d4bcd1310c5c71e74785fbb11a421f8a8c45e72 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 16:41:31 +0200 Subject: [PATCH 373/595] Typing Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/models/integrate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 197cefe819..c512d3ef68 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1153,7 +1153,7 @@ class ProjectPushItemProcess: {"active": False} ) - def _copy_version_thumbnail(self): + def _copy_version_thumbnail(self) -> Optional[str]: thumbnail_id = self._src_version_entity["thumbnailId"] if not thumbnail_id: return None From 3b9b5e8063d3c44615ffa8cda43cd2fcd279cc98 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 16:50:55 +0200 Subject: [PATCH 374/595] Removed run argument to not filter out project argument Current develop filters out 'project' cli argument as it is now used as key world for bundle per project implementation. --- client/ayon_core/plugins/load/push_to_library.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/plugins/load/push_to_library.py b/client/ayon_core/plugins/load/push_to_library.py index 22c10bbad7..3c7c7e503d 100644 --- a/client/ayon_core/plugins/load/push_to_library.py +++ b/client/ayon_core/plugins/load/push_to_library.py @@ -44,7 +44,6 @@ class PushToLibraryProject(load.ProductLoaderPlugin): version_id = context["version"]["id"] args = get_ayon_launcher_args( - "run", push_tool_script_path, "--project", project_name, "--version", version_id From ef34e9f79eebe12f3f1fdf845e1963a8dd83cd0b Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 16:53:33 +0200 Subject: [PATCH 375/595] Renamed loader --- .../plugins/load/{push_to_library.py => push_to_project.py} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename client/ayon_core/plugins/load/{push_to_library.py => push_to_project.py} (91%) diff --git a/client/ayon_core/plugins/load/push_to_library.py b/client/ayon_core/plugins/load/push_to_project.py similarity index 91% rename from client/ayon_core/plugins/load/push_to_library.py rename to client/ayon_core/plugins/load/push_to_project.py index 3c7c7e503d..dccac42444 100644 --- a/client/ayon_core/plugins/load/push_to_library.py +++ b/client/ayon_core/plugins/load/push_to_project.py @@ -6,8 +6,8 @@ from ayon_core.pipeline import load from ayon_core.pipeline.load import LoadError -class PushToLibraryProject(load.ProductLoaderPlugin): - """Export selected versions to folder structure from Template""" +class PushToProject(load.ProductLoaderPlugin): + """Export selected versions to different project""" is_multiple_contexts_compatible = True From bae1f64a91d8b4ec74bdb059048d42b96b4e346e Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 16:55:28 +0200 Subject: [PATCH 376/595] Fix typing --- client/ayon_core/tools/push_to_project/models/integrate.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index c512d3ef68..89cd78cb0e 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -5,6 +5,7 @@ import itertools import sys import traceback import uuid +from typing import Optional import ayon_api from ayon_api.utils import create_entity_id From 12f415a639781b16c299e4b16edf128e9381e1a7 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 18 Aug 2025 17:01:42 +0200 Subject: [PATCH 377/595] Added tooltip --- client/ayon_core/tools/push_to_project/ui/window.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index 3fb1822d92..b58904a31a 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -208,6 +208,10 @@ class PushToContextSelectWindow(QtWidgets.QWidget): show_detail_btn.setToolTip( "Show error detail dialog to copy full error." ) + original_names_checkbox.setToolTip( + "Required for multi copy, doesn't allow changes in folder or " + "variant values." + ) overlay_close_btn = QtWidgets.QPushButton( "Close", overlay_btns_widget From e5bf5d3070ea27d8b4f7755cf64f5d0967a500b3 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 20 Aug 2025 10:13:21 +0200 Subject: [PATCH 378/595] Split versions directly in main Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/main.py b/client/ayon_core/tools/push_to_project/main.py index 3a80dc2bb2..d3c9d3a537 100644 --- a/client/ayon_core/tools/push_to_project/main.py +++ b/client/ayon_core/tools/push_to_project/main.py @@ -25,7 +25,7 @@ def main(project, versions): versions (str): comma separated versions for same context """ - main_show(project, versions) + main_show(project, versions.split(",")) if __name__ == "__main__": From 26ab3671039ea6ea68198288a384d514058c6426 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 20 Aug 2025 10:13:43 +0200 Subject: [PATCH 379/595] Keep set_source Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/control.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index d02cd4dfc0..42f45ae500 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -39,6 +39,8 @@ class PushToContextController: self._process_item_id = None self._use_original_name = False + + self.set_source(project_name, version_ids) # Events system def emit_event(self, topic, data=None, source=None): From cd7b6212ccbf2fc48f2bfdbbeafd160d34e1d288 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 20 Aug 2025 10:13:59 +0200 Subject: [PATCH 380/595] Update docstrign Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/control.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index 42f45ae500..c1c5a1bd37 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -58,7 +58,7 @@ class PushToContextController: Args: project_name (Union[str, None]): Source project name. - version_ids (Union[str, None]): Comma separated source version ids. + version_ids (Optional[list[str]]): Version ids. """ if not project_name or not version_ids: return From 015e7c11a500957392c0bb4e0c0adce9421a48fe Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 20 Aug 2025 10:14:17 +0200 Subject: [PATCH 381/595] Split done before Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/control.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index c1c5a1bd37..cbcfb75157 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -69,7 +69,7 @@ class PushToContextController: return self._src_project_name = project_name - self._src_version_ids = version_ids.split(",") + self._src_version_ids = version_ids self._src_label = None folder_entity = None task_entities = {} From 2bea321e9b34c2a48ce94e9912c1a4ecb38eeaad Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 20 Aug 2025 10:14:39 +0200 Subject: [PATCH 382/595] Update initializations Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/control.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index cbcfb75157..d28cb17c98 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -73,8 +73,8 @@ class PushToContextController: self._src_label = None folder_entity = None task_entities = {} - product_entities = None - version_entities = None + product_entities = [] + version_entities = [] if project_name and self._src_version_ids: version_entities = list(ayon_api.get_versions( project_name, version_ids=self._src_version_ids)) From 0574fa46b8f37d3f04823125e8c503617ad50695 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 20 Aug 2025 10:27:18 +0200 Subject: [PATCH 383/595] Fix formatting --- client/ayon_core/tools/push_to_project/control.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index d28cb17c98..9d5a1cb90c 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -39,7 +39,7 @@ class PushToContextController: self._process_item_id = None self._use_original_name = False - + self.set_source(project_name, version_ids) # Events system From e4305cc37a095511f89b87c791136b9c212a5168 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 20 Aug 2025 10:30:23 +0200 Subject: [PATCH 384/595] Removed product_entities Used only on 2 places --- .../tools/push_to_project/control.py | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index 9d5a1cb90c..666a9a94a2 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -30,7 +30,6 @@ class PushToContextController: self._src_version_ids = [] self._src_folder_entity = None self._src_folder_task_entities = {} - self._src_product_entities = [] self._src_version_entities = [] self._src_label = None @@ -105,7 +104,6 @@ class PushToContextController: self._src_folder_entity = folder_entity self._src_folder_task_entities = task_entities - self._src_product_entities = product_entities self._src_version_entities = version_entities if folder_entity and len(list(version_entities)) == 1: self._user_values.set_new_folder_name(folder_entity["name"]) @@ -226,17 +224,13 @@ class PushToContextController: if not folder_entity: return "Source is invalid" - no_of_products = len(self._src_product_entities) - no_of_versions = len(self._src_version_entities) - if no_of_products != no_of_versions: - return (f"Not matching number of products {no_of_products} and " - f"versions {no_of_versions}") - folder_path = folder_entity["path"] src_labels = [] - for idx in range(0, no_of_versions): - product_entity = self._src_product_entities[idx] - version_entity = self._src_version_entities[idx] + for version_entity in self._src_version_entities: + product_entity = ayon_api.get_product_by_id( + self._src_project_name, + version_entity["productId"] + ) src_labels.append( "Source: {}{}/{}/v{:0>3}".format( self._src_project_name, @@ -289,9 +283,13 @@ class PushToContextController: task_name, task_type = self._get_task_info_from_repre_entities( task_entities, repre_entities ) + product_entity = ayon_api.get_product_by_id( + project_name, + version_entity["productId"] + ) project_settings = get_project_settings(project_name) - product_type = self._src_product_entities[0]["productType"] + product_type = product_entity["productType"] template = get_product_name_template( self._src_project_name, product_type, @@ -325,7 +323,7 @@ class PushToContextController: print("Failed format", exc) return "" - product_name = self._src_product_entities[0]["name"] + product_name = product_entity["name"] if ( (product_s and not product_name.startswith(product_s)) or (product_e and not product_name.endswith(product_e)) From cbc227ae2df9920339fc8a423c33f4eb69910ccc Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 20 Aug 2025 10:42:51 +0200 Subject: [PATCH 385/595] Parse variant and folder name even for multi push --- client/ayon_core/tools/push_to_project/control.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index 666a9a94a2..c661c05d5d 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -105,7 +105,7 @@ class PushToContextController: self._src_folder_entity = folder_entity self._src_folder_task_entities = task_entities self._src_version_entities = version_entities - if folder_entity and len(list(version_entities)) == 1: + if folder_entity: self._user_values.set_new_folder_name(folder_entity["name"]) variant = self._get_src_variant() if variant: @@ -273,8 +273,8 @@ class PushToContextController: return None, None def _get_src_variant(self): - """Could be triggered only if single version is moved.""" project_name = self._src_project_name + # parse variant only from first version version_entity = self._src_version_entities[0] task_entities = self._src_folder_task_entities repre_entities = ayon_api.get_representations( From 1e9d6997731e7bf0ec72b9a855d93f316c763a04 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 20 Aug 2025 10:50:26 +0200 Subject: [PATCH 386/595] Allow folder create even if Use original name --- client/ayon_core/tools/push_to_project/ui/window.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index b58904a31a..d63b2582e4 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -209,7 +209,7 @@ class PushToContextSelectWindow(QtWidgets.QWidget): "Show error detail dialog to copy full error." ) original_names_checkbox.setToolTip( - "Required for multi copy, doesn't allow changes in folder or " + "Required for multi copy, doesn't allow changes " "variant values." ) @@ -420,9 +420,6 @@ class PushToContextSelectWindow(QtWidgets.QWidget): def _on_original_names_change(self, state: int) -> None: use_original_name = bool(state) - self._new_folder_name_enabled = not use_original_name - self._new_folder_checkbox.setEnabled(not use_original_name) - self._folder_name_input.setEnabled(not use_original_name) self._variant_input.setEnabled(not use_original_name) self._controller._use_original_name = use_original_name self.refresh() @@ -482,8 +479,6 @@ class PushToContextSelectWindow(QtWidgets.QWidget): self._header_label.setText(self._controller.get_source_label()) def _invalidate_new_folder_name(self, folder_name, is_valid): - if self._controller._use_original_name: - is_valid = True self._tasks_widget.setVisible(folder_name is None) if self._folder_is_valid is is_valid: return From 13e1cc71030323e6afb1040adcb172e6aae70ede Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 21 Aug 2025 11:33:51 +0200 Subject: [PATCH 387/595] Fix project_name Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/plugins/load/push_to_project.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/load/push_to_project.py b/client/ayon_core/plugins/load/push_to_project.py index aff3efd6f6..6d641f2a57 100644 --- a/client/ayon_core/plugins/load/push_to_project.py +++ b/client/ayon_core/plugins/load/push_to_project.py @@ -34,7 +34,7 @@ class PushToProject(load.ProductLoaderPlugin): "push_to_project", "main.py" ) - project_name = tuple(filtered_contexts)[0]["project"]["name"] + project_name = filtered_contexts[0]["project"]["name"] version_ids = [] for context in filtered_contexts: From 60e6d4df2f3ba0d819cb867f05ed23efdecdd77c Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 21 Aug 2025 11:34:19 +0200 Subject: [PATCH 388/595] Update logic for versions Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/plugins/load/push_to_project.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/plugins/load/push_to_project.py b/client/ayon_core/plugins/load/push_to_project.py index 6d641f2a57..d5dd8960a3 100644 --- a/client/ayon_core/plugins/load/push_to_project.py +++ b/client/ayon_core/plugins/load/push_to_project.py @@ -36,9 +36,10 @@ class PushToProject(load.ProductLoaderPlugin): ) project_name = filtered_contexts[0]["project"]["name"] - version_ids = [] - for context in filtered_contexts: - version_ids.append(context["version"]["id"]) + version_ids = { + context["version"]["id"] + for context in filtered_contexts + } args = get_ayon_launcher_args( push_tool_script_path, From bab05592bc242d7ca1f4a1913e19342b8af646f9 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 21 Aug 2025 11:35:13 +0200 Subject: [PATCH 389/595] Update when even is emitted Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/control.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index c661c05d5d..6247fe14ce 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -363,10 +363,15 @@ class PushToContextController: ) def _submit_callback(self): - for process_item_id in self._process_item_ids: + process_item_ids = self._process_item_ids + for process_item_id in process_item_ids: self._integrate_model.integrate_item(process_item_id) + self._emit_event("submit.finished", {}) + if process_item_ids is self._process_item_ids: + self._process_item_ids = [] + def _emit_event(self, topic, data=None): if data is None: data = {} From 641d7879820c4b07f4be49ba5303582b19188d99 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 21 Aug 2025 11:36:40 +0200 Subject: [PATCH 390/595] Reordered input fields validations --- client/ayon_core/tools/push_to_project/control.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index 6247fe14ce..ea01165859 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -337,11 +337,6 @@ class PushToContextController: return product_name def _check_submit_validations(self): - if self._use_original_name: - return True - if not self._user_values.is_valid: - return False - if not self._selection_model.get_selected_project_name(): return False @@ -350,6 +345,13 @@ class PushToContextController: and not self._selection_model.get_selected_folder_id() ): return False + + if self._use_original_name: + return True + + if not self._user_values.is_valid: + return False + return True def _invalidate(self): From 0933e882e200f09cb194dc847df8e55247056c1c Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 21 Aug 2025 13:45:21 +0200 Subject: [PATCH 391/595] Fix wrong repre["context"] content Contained only values used in resolving template. Missed project["name"] etc. --- .../tools/push_to_project/models/integrate.py | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index f9d524ba3a..c888adf733 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1019,10 +1019,18 @@ class ProjectPushItemProcess: self, anatomy, template_name, formatting_data, file_template ): processed_repre_items = [] + repre_context = None for repre_item in self._src_repre_items: repre_entity = repre_item.repre_entity repre_name = repre_entity["name"] repre_format_data = copy.deepcopy(formatting_data) + + if not repre_context: + repre_context = self._update_repre_context( + repre_entity, + formatting_data + ) + repre_format_data["representation"] = repre_name for src_file in repre_item.src_files: ext = os.path.splitext(src_file.path)[-1] @@ -1038,7 +1046,6 @@ class ProjectPushItemProcess: "publish", template_name, "directory" ) folder_path = template_obj.format_strict(formatting_data) - repre_context = folder_path.used_values folder_path_rootless = folder_path.rootless repre_filepaths = [] published_path = None @@ -1061,7 +1068,6 @@ class ProjectPushItemProcess: ) if published_path is None or frame == repre_item.frame: published_path = dst_filepath - repre_context.update(filename.used_values) repre_filepaths.append((dst_filepath, dst_rootless_path)) self._file_transaction.add(src_file.path, dst_filepath) @@ -1178,6 +1184,28 @@ class ProjectPushItemProcess: path ) + def _update_repre_context(self, repre_entity, formatting_data): + """Replace old context value with new ones. + + Folder might change, project definitely changes etc. + """ + repre_context = repre_entity["context"] + for context_key, context_value in repre_context.items(): + if context_value and isinstance(context_value, dict): + for context_sub_key in context_value.keys(): + value_to_update = formatting_data.get(context_key, {}).get( + context_sub_key) + if value_to_update: + repre_context[context_key][ + context_sub_key] = value_to_update + else: + value_to_update = formatting_data.get(context_key) + if value_to_update: + repre_context[context_key] = value_to_update + if "task" not in formatting_data: + repre_context.pop("task") + return repre_context + class IntegrateModel: def __init__(self, controller): From b032d26ec6d417c0d31bfe74c6cb65bc60b50f21 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 21 Aug 2025 13:57:16 +0200 Subject: [PATCH 392/595] Formatting change --- client/ayon_core/tools/push_to_project/control.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index ea01165859..58d06dd19d 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -368,7 +368,7 @@ class PushToContextController: process_item_ids = self._process_item_ids for process_item_id in process_item_ids: self._integrate_model.integrate_item(process_item_id) - + self._emit_event("submit.finished", {}) if process_item_ids is self._process_item_ids: From 3f941a1dff82cce941a7c1f4ef6523441daf43d1 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 21 Aug 2025 15:08:09 +0200 Subject: [PATCH 393/595] Fix where to pull process_item_ids --- client/ayon_core/tools/push_to_project/ui/window.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index d63b2582e4..4d947103be 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -529,7 +529,7 @@ class PushToContextSelectWindow(QtWidgets.QWidget): failed_pushes = [] fail_tracebacks = [] - for process_item_id in self._process_item_ids: + for process_item_id in self._controller._process_item_ids: process_status = self._controller.get_process_item_status( process_item_id ) From c7d0f2b9871c59f334ce062d57c0d73af0256675 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 21 Aug 2025 15:08:44 +0200 Subject: [PATCH 394/595] Add more logging to exception handling --- client/ayon_core/tools/push_to_project/models/integrate.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index c888adf733..054a5f1b18 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -497,8 +497,11 @@ class ProjectPushItemProcess: except Exception as exc: _exc, _value, _tb = sys.exc_info() + product_name = self._src_product_entity["name"] self._status.set_failed( - "Unhandled error happened: {}".format(str(exc)), + "Unhandled error happened for `{}`: {}".format( + product_name, str(exc) + ), (_exc, _value, _tb) ) From de281f34c39e93cb1a5c0948470c17f6e92ffb79 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 21 Aug 2025 15:09:01 +0200 Subject: [PATCH 395/595] Remove unnecessary _process_item_ids --- client/ayon_core/tools/push_to_project/ui/window.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index 4d947103be..f5ee5f247c 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -335,7 +335,6 @@ class PushToContextSelectWindow(QtWidgets.QWidget): self._main_thread_timer = main_thread_timer self._main_thread_timer_can_stop = True self._last_submit_message = None - self._process_item_ids = [] self._variant_is_valid = None self._folder_is_valid = None From cb4df370670edfe7e6a56ed39c4d24afac134867 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 21 Aug 2025 16:15:07 +0200 Subject: [PATCH 396/595] Use property instead private variable --- .../tools/push_to_project/models/integrate.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 054a5f1b18..dadae7e1f9 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -317,7 +317,7 @@ class ProjectPushRepreItem: if self._src_files is not None: return self._src_files, self._resource_files - repre_context = self._repre_entity["context"] + repre_context = self.repre_entity["context"] if "frame" in repre_context or "udim" in repre_context: src_files, resource_files = self._get_source_files_with_frames() else: @@ -334,7 +334,7 @@ class ProjectPushRepreItem: udim_placeholder = "__udim__" src_files = [] resource_files = [] - template = self._repre_entity["attrib"]["template"] + template = self.repre_entity["attrib"]["template"] # Remove padding from 'udim' and 'frame' formatting keys # - "{frame:0>4}" -> "{frame}" for key in ("udim", "frame"): @@ -342,7 +342,7 @@ class ProjectPushRepreItem: replacement = "{{{}}}".format(key) template = re.sub(sub_part, replacement, template) - repre_context = self._repre_entity["context"] + repre_context = self.repre_entity["context"] fill_repre_context = copy.deepcopy(repre_context) if "frame" in fill_repre_context: fill_repre_context["frame"] = frame_placeholder @@ -363,7 +363,7 @@ class ProjectPushRepreItem: .replace(udim_placeholder, "(?P[0-9]+)") ) src_basename_regex = re.compile("^{}$".format(src_basename)) - for file_info in self._repre_entity["files"]: + for file_info in self.repre_entity["files"]: filepath_template = self._clean_path(file_info["path"]) filepath = self._clean_path( filepath_template.format(root=self._roots) @@ -394,8 +394,8 @@ class ProjectPushRepreItem: def _get_source_files(self): src_files = [] resource_files = [] - template = self._repre_entity["attrib"]["template"] - repre_context = self._repre_entity["context"] + template = self.repre_entity["attrib"]["template"] + repre_context = self.repre_entity["context"] fill_repre_context = copy.deepcopy(repre_context) fill_roots = fill_repre_context["root"] for root_name in tuple(fill_roots.keys()): @@ -404,7 +404,7 @@ class ProjectPushRepreItem: fill_repre_context) repre_path = self._clean_path(repre_path) src_dirpath = os.path.dirname(repre_path) - for file_info in self._repre_entity["files"]: + for file_info in self.repre_entity["files"]: filepath_template = self._clean_path(file_info["path"]) filepath = self._clean_path( filepath_template.format(root=self._roots)) From 4229950f361718ffc81748290f96037377e98c75 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 21 Aug 2025 17:16:30 +0200 Subject: [PATCH 397/595] Do not overwrite source entity context --- client/ayon_core/tools/push_to_project/models/integrate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index dadae7e1f9..f9de351632 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1030,7 +1030,7 @@ class ProjectPushItemProcess: if not repre_context: repre_context = self._update_repre_context( - repre_entity, + copy.deepcopy(repre_entity), formatting_data ) From 2bd5418caeb7a753f155b588891b4a9f16d9c883 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 21 Aug 2025 17:56:13 +0200 Subject: [PATCH 398/595] Simplified querying status of ProjectPushItemProcess Makes error logging more stable, limits hard fails in debugger. --- .../tools/push_to_project/control.py | 7 +++++-- .../tools/push_to_project/models/integrate.py | 19 ++++--------------- .../tools/push_to_project/ui/window.py | 6 ++---- 3 files changed, 11 insertions(+), 21 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index 58d06dd19d..466dfcc994 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -1,4 +1,5 @@ import threading +from typing import Dict import ayon_api @@ -13,6 +14,7 @@ from .models import ( UserPublishValuesModel, IntegrateModel, ) +from .models.integrate import ProjectPushItemProcess class PushToContextController: @@ -171,8 +173,9 @@ class PushToContextController: def set_selected_task(self, task_id, task_name): self._selection_model.set_selected_task(task_id, task_name) - def get_process_item_status(self, item_id): - return self._integrate_model.get_item_status(item_id) + def get_process_items(self) -> Dict[str, ProjectPushItemProcess]: + """Returns dict of all ProjectPushItemProcess items """ + return self._integrate_model.get_items() # Processing methods def submit(self, wait=True): diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index f9de351632..ed5c5b31ab 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -5,7 +5,7 @@ import itertools import sys import traceback import uuid -from typing import Optional +from typing import Optional, Dict import ayon_api from ayon_api.utils import create_entity_id @@ -1281,17 +1281,6 @@ class IntegrateModel: return item.integrate() - def get_item_status(self, item_id): - """Status of an item. - - Args: - item_id (str): Item id for which status should be returned. - - Returns: - dict[str, Any]: Status data. - """ - - item = self._process_items.get(item_id) - if item is not None: - return item.get_status_data() - return None + def get_items(self) -> Dict[str, ProjectPushItemProcess]: + """Returns dict of all ProjectPushItemProcess items """ + return self._process_items diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index f5ee5f247c..d01da4cb3f 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -528,10 +528,8 @@ class PushToContextSelectWindow(QtWidgets.QWidget): failed_pushes = [] fail_tracebacks = [] - for process_item_id in self._controller._process_item_ids: - process_status = self._controller.get_process_item_status( - process_item_id - ) + for process_item in self._controller.get_process_items().values(): + process_status = process_item.get_status_data() if process_status["failed"]: failed_pushes.append(process_status) # push_failed = process_status["failed"] From dc987ed64f5cdbc0edb1d0985661905cbfdb6bb1 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 21 Aug 2025 18:00:42 +0200 Subject: [PATCH 399/595] Ruff --- client/ayon_core/tools/push_to_project/models/integrate.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index ed5c5b31ab..ef49838152 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -847,8 +847,8 @@ class ProjectPushItemProcess: except TaskNotSetError: self._status.set_failed( "Target product name template requires task name. To " - "continue you have to select target task or change settings " - " ayon+settings://core/tools/creator/product_name_profiles" + "continue you have to select target task or change settings " # noqa: E501 + " ayon+settings://core/tools/creator/product_name_profiles" # noqa: E501 f"?project={self._item.dst_project_name}." ) raise PushToProjectError(self._status.fail_reason) From 651fc3f068a5ce0dfc9a976c47ae36a2120286fa Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 21 Aug 2025 18:07:19 +0200 Subject: [PATCH 400/595] Add validation for only single folder products selection --- client/ayon_core/plugins/load/push_to_project.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/ayon_core/plugins/load/push_to_project.py b/client/ayon_core/plugins/load/push_to_project.py index d5dd8960a3..33f9a68b23 100644 --- a/client/ayon_core/plugins/load/push_to_project.py +++ b/client/ayon_core/plugins/load/push_to_project.py @@ -28,6 +28,10 @@ class PushToProject(load.ProductLoaderPlugin): if not filtered_contexts: raise LoadError("Nothing to push for your selection") + folder_ids = [context["folder"]["id"] for context in filtered_contexts] + if len(folder_ids) > 1: + raise LoadError("Please select products from single folder") + push_tool_script_path = os.path.join( AYON_CORE_ROOT, "tools", From 5740b9f495f3c81f7eb405e83d81e804493a19c5 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Fri, 22 Aug 2025 16:04:27 +0800 Subject: [PATCH 401/595] update publishDir as being part of the instance_data --- .../plugins/load/create_hero_version.py | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/client/ayon_core/plugins/load/create_hero_version.py b/client/ayon_core/plugins/load/create_hero_version.py index d741dafcce..2d55069abf 100644 --- a/client/ayon_core/plugins/load/create_hero_version.py +++ b/client/ayon_core/plugins/load/create_hero_version.py @@ -75,7 +75,8 @@ class CreateHeroVersion(load.ProductLoaderPlugin): version = context.get("version") folder = context.get("folder") task_entity = ayon_api.get_task_by_id( - task_id=version.get("taskId"), project_name=project["name"]) + task_id=version.get("taskId"), project_name=project["name"] + ) anatomy = Anatomy(project["name"]) @@ -95,6 +96,7 @@ class CreateHeroVersion(load.ProductLoaderPlugin): "name": product["name"], "type": product["productType"], } + anatomy_data["version"] = version["version"] published_representations = {} for repre in repres: repre_anatomy = copy.deepcopy(anatomy_data) @@ -105,12 +107,26 @@ class CreateHeroVersion(load.ProductLoaderPlugin): "published_files": [f["path"] for f in repre.get("files", [])], "anatomy_data": repre_anatomy } - + publish_template_key = get_publish_template_name( + project_name, + context.get("hostName"), + product["productType"], + task_name=anatomy_data.get("task", {}).get("name"), + task_type=anatomy_data.get("task", {}).get("type"), + project_settings=context.get("project_settings", {}), + logger=self.log + ) + published_template_obj = anatomy.get_template_item( + "publish", publish_template_key, "directory" + ) + published_dir = os.path.normpath( + published_template_obj.format_strict(anatomy_data) + ) instance_data = { "productName": product["name"], "productType": product["productType"], "anatomyData": anatomy_data, - "publishDir": "", # TODO: Set to actual publish directory + "publishDir": published_dir, "published_representations": published_representations, "versionEntity": version, } @@ -199,7 +215,12 @@ class CreateHeroVersion(load.ProductLoaderPlugin): if file_path not in all_repre_file_paths: all_repre_file_paths.append(file_path) - instance_publish_dir = os.path.normpath(instance_data["publishDir"]) + publish_dir = instance_data.get("publishDir", "") + if not publish_dir: + raise RuntimeError( + "publishDir is empty in instance_data, cannot continue." + ) + instance_publish_dir = os.path.normpath(publish_dir) other_file_paths_mapping = [] for file_path in all_copied_files: if not file_path.startswith(instance_publish_dir): @@ -331,7 +352,7 @@ class CreateHeroVersion(load.ProductLoaderPlugin): else: collections, remainders = clique.assemble(published_files) if remainders or not collections or len(collections) > 1: - raise Exception( + raise RuntimeError( ( "Integrity error. Files of published " "representation is combination of frame " From 22e18cdfa253c7c4c53751bff2928e11206101fa Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Fri, 22 Aug 2025 16:07:02 +0800 Subject: [PATCH 402/595] add comment --- client/ayon_core/plugins/load/create_hero_version.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/plugins/load/create_hero_version.py b/client/ayon_core/plugins/load/create_hero_version.py index 2d55069abf..e9dbbfa652 100644 --- a/client/ayon_core/plugins/load/create_hero_version.py +++ b/client/ayon_core/plugins/load/create_hero_version.py @@ -107,6 +107,7 @@ class CreateHeroVersion(load.ProductLoaderPlugin): "published_files": [f["path"] for f in repre.get("files", [])], "anatomy_data": repre_anatomy } + # get the publish directory publish_template_key = get_publish_template_name( project_name, context.get("hostName"), From 89d0777bafcda1da9a7355a00da619cf8c326870 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Fri, 22 Aug 2025 16:21:37 +0800 Subject: [PATCH 403/595] copilot's feedback on - backup directory loop --- .../plugins/load/create_hero_version.py | 42 ++++++++----------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/client/ayon_core/plugins/load/create_hero_version.py b/client/ayon_core/plugins/load/create_hero_version.py index e9dbbfa652..adf9d5f669 100644 --- a/client/ayon_core/plugins/load/create_hero_version.py +++ b/client/ayon_core/plugins/load/create_hero_version.py @@ -167,13 +167,13 @@ class CreateHeroVersion(load.ProductLoaderPlugin): raise RuntimeError("Project anatomy does not have hero " f"template key: {template_key}") - print(f"Hero template: {hero_template.template}") + self.log.info(f"Hero template: {hero_template.template}") hero_publish_dir = self.get_publish_dir( instance_data, anatomy, template_key ) - print(f"Hero publish dir: {hero_publish_dir}") + self.log.info(f"Hero publish dir: {hero_publish_dir}") src_version_entity = instance_data.get("versionEntity") filtered_repre_ids = [] @@ -280,28 +280,22 @@ class CreateHeroVersion(load.ProductLoaderPlugin): backup_hero_publish_dir = None if os.path.exists(hero_publish_dir): - backup_hero_publish_dir = hero_publish_dir + ".BACKUP" + base_backup_dir = hero_publish_dir + ".BACKUP" max_idx = 10 - idx = 0 - _backup_hero_publish_dir = backup_hero_publish_dir - while os.path.exists(_backup_hero_publish_dir): - try: - shutil.rmtree(_backup_hero_publish_dir) - backup_hero_publish_dir = _backup_hero_publish_dir + # Find the first available backup directory name + for idx in range(max_idx + 1): + if idx == 0: + candidate_backup_dir = base_backup_dir + else: + candidate_backup_dir = f"{base_backup_dir}{idx}" + if not os.path.exists(candidate_backup_dir): + backup_hero_publish_dir = candidate_backup_dir break - except Exception as exc: - _backup_hero_publish_dir = ( - backup_hero_publish_dir + str(idx) - ) - if not os.path.exists(_backup_hero_publish_dir): - backup_hero_publish_dir = _backup_hero_publish_dir - break - if idx > max_idx: - raise AssertionError( - "Backup folders are fully occupied to max index " - f"{max_idx}" - ) from exc - idx += 1 + else: + raise AssertionError( + f"Backup folders are fully occupied to max index {max_idx}" + ) + try: os.rename(hero_publish_dir, backup_hero_publish_dir) except PermissionError: @@ -346,7 +340,7 @@ class CreateHeroVersion(load.ProductLoaderPlugin): src_to_dst_file_paths.append( (mapped_published_file, template_filled) ) - print( + self.log.info( f"Single published file: {mapped_published_file} -> " f"{template_filled}" ) @@ -379,7 +373,7 @@ class CreateHeroVersion(load.ProductLoaderPlugin): ) src_to_dst_file_paths.append((src_file, dst_file)) dst_paths.append(dst_file) - print( + self.log.info( f"Collection published file: {src_file} " f"-> {dst_file}" ) From 8d6f83ffa704fbc4d6bb4a73e6e065a631d3802d Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 22 Aug 2025 11:30:48 +0200 Subject: [PATCH 404/595] restore saved painter --- client/ayon_core/tools/sceneinventory/select_version_dialog.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/ayon_core/tools/sceneinventory/select_version_dialog.py b/client/ayon_core/tools/sceneinventory/select_version_dialog.py index 68284ad1fe..18a39e495c 100644 --- a/client/ayon_core/tools/sceneinventory/select_version_dialog.py +++ b/client/ayon_core/tools/sceneinventory/select_version_dialog.py @@ -127,6 +127,7 @@ class SelectVersionComboBox(QtWidgets.QComboBox): status_text_rect.setLeft(icon_rect.right() + 2) if status_text_rect.width() <= 0: + painter.restore() return if status_text_rect.width() < metrics.width(status_name): @@ -144,6 +145,7 @@ class SelectVersionComboBox(QtWidgets.QComboBox): QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter, status_name ) + painter.restore() def set_current_index(self, index): model = self._combo_view.model() From 16828011d22c633f0a2c9473c1f9ca2029397829 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 22 Aug 2025 13:40:26 +0200 Subject: [PATCH 405/595] Fix wrong check on folders --- client/ayon_core/plugins/load/push_to_project.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/load/push_to_project.py b/client/ayon_core/plugins/load/push_to_project.py index 33f9a68b23..0b218d6ea1 100644 --- a/client/ayon_core/plugins/load/push_to_project.py +++ b/client/ayon_core/plugins/load/push_to_project.py @@ -28,7 +28,10 @@ class PushToProject(load.ProductLoaderPlugin): if not filtered_contexts: raise LoadError("Nothing to push for your selection") - folder_ids = [context["folder"]["id"] for context in filtered_contexts] + folder_ids = set( + context["folder"]["id"] + for context in filtered_contexts + ) if len(folder_ids) > 1: raise LoadError("Please select products from single folder") From 941d4aee9ea66b758bd337560fb48b6e38a1b1c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Tue, 26 Aug 2025 15:13:52 +0200 Subject: [PATCH 406/595] :recycle: add docstrings and hints --- .../plugins/load/create_hero_version.py | 165 +++++++++++++++--- 1 file changed, 139 insertions(+), 26 deletions(-) diff --git a/client/ayon_core/plugins/load/create_hero_version.py b/client/ayon_core/plugins/load/create_hero_version.py index adf9d5f669..aef0cf8863 100644 --- a/client/ayon_core/plugins/load/create_hero_version.py +++ b/client/ayon_core/plugins/load/create_hero_version.py @@ -1,10 +1,12 @@ - +"""Plugin to create hero version from selected context.""" +from __future__ import annotations import os import copy import shutil import errno import itertools from concurrent.futures import ThreadPoolExecutor +from typing import Any, Optional from speedcopy import copyfile import clique @@ -20,7 +22,17 @@ from ayon_core.pipeline.publish import get_publish_template_name from ayon_core.pipeline.template_data import get_template_data -def prepare_changes(old_entity, new_entity): +def prepare_changes(old_entity: dict, new_entity: dict) -> dict: + """Prepare changes dict for update entity operation. + + Args: + old_entity (dict): Existing entity data from database. + new_entity (dict): New entity data to compare against old. + + Returns: + dict: Changes to apply to old entity to make it like new entity. + + """ changes = {} for key in set(new_entity.keys()): if key == "attrib": @@ -48,19 +60,21 @@ class CreateHeroVersion(load.ProductLoaderPlugin): icon = "star" color = "#ffd700" - ignored_representation_names = [] + ignored_representation_names: list[str] = [] db_representation_context_keys = [ "project", "folder", "asset", "hierarchy", "task", "product", "subset", "family", "representation", "username", "user", "output" ] use_hardlinks = False - def message(self, text): + @staticmethod + def message(text: str) -> None: + """Show message box with text.""" msgBox = QtWidgets.QMessageBox() msgBox.setText(text) msgBox.setStyleSheet(style.load_stylesheet()) msgBox.setWindowFlags( - msgBox.windowFlags() | QtCore.Qt.FramelessWindowHint + msgBox.windowFlags() | QtCore.Qt.WindowType.FramelessWindowHint ) msgBox.exec_() @@ -143,8 +157,31 @@ class CreateHeroVersion(load.ProductLoaderPlugin): self.message( f"Failed to create hero version:\n{chr(10).join(errors)}") - def create_hero_version(self, instance_data, anatomy, context): - """Create hero version from instance data.""" + def create_hero_version( + self, + instance_data: dict[str, Any], + anatomy: Anatomy, + context: dict[str, Any]) -> None: + """Create hero version from instance data. + + Args: + instance_data (dict): Instance data with keys: + - productName (str): Name of the product. + - productType (str): Type of the product. + - anatomyData (dict): Anatomy data for templates. + - publishDir (str): Directory where the product is published. + - published_representations (dict): Published representations. + - versionEntity (dict, optional): Source version entity. + anatomy (Anatomy): Anatomy object for the project. + context (dict): Context data with keys: + - hostName (str): Name of the host application. + - project_settings (dict): Project settings. + + Raises: + RuntimeError: If any required data is missing or an error occurs + during the hero version creation process. + + """ published_repres = instance_data.get("published_representations") if not published_repres: raise RuntimeError("No published representations found.") @@ -158,7 +195,6 @@ class CreateHeroVersion(load.ProductLoaderPlugin): instance_data.get("anatomyData", {}).get("task", {}).get("type"), project_settings=context.get("project_settings", {}), hero=True, - logger=None ) hero_template = anatomy.get_template_item( "hero", template_key, "path", default=None @@ -197,12 +233,12 @@ class CreateHeroVersion(load.ProductLoaderPlugin): raise RuntimeError("Version 0 cannot have hero version.") all_copied_files = [] - transfers = instance_data.get("transfers", list()) + transfers = instance_data.get("transfers", []) for _src, dst in transfers: dst = os.path.normpath(dst) if dst not in all_copied_files: all_copied_files.append(dst) - hardlinks = instance_data.get("hardlinks", list()) + hardlinks = instance_data.get("hardlinks", []) for _src, dst in hardlinks: dst = os.path.normpath(dst) if dst not in all_copied_files: @@ -267,7 +303,6 @@ class CreateHeroVersion(load.ProductLoaderPlugin): instance_data["heroVersionEntity"] = new_hero_version old_repres_to_replace = {} - old_repres_to_delete = {} for repre_info in published_repres.values(): repre = repre_info["representation"] repre_name_low = repre["name"].lower() @@ -275,12 +310,10 @@ class CreateHeroVersion(load.ProductLoaderPlugin): old_repres_to_replace[repre_name_low] = ( old_repres_by_name.pop(repre_name_low) ) - if old_repres_by_name: - old_repres_to_delete = old_repres_by_name - + old_repres_to_delete = old_repres_by_name or {} backup_hero_publish_dir = None if os.path.exists(hero_publish_dir): - base_backup_dir = hero_publish_dir + ".BACKUP" + base_backup_dir = f"{hero_publish_dir}.BACKUP" max_idx = 10 # Find the first available backup directory name for idx in range(max_idx + 1): @@ -298,10 +331,11 @@ class CreateHeroVersion(load.ProductLoaderPlugin): try: os.rename(hero_publish_dir, backup_hero_publish_dir) - except PermissionError: + except PermissionError as e: raise AssertionError( "Could not create hero version because it is " - "not possible to replace current hero files.") + "not possible to replace current hero files." + ) from e try: src_to_dst_file_paths = [] @@ -445,14 +479,41 @@ class CreateHeroVersion(load.ProductLoaderPlugin): os.rename(backup_hero_publish_dir, hero_publish_dir) raise - def get_files_info(self, filepaths, anatomy): + def get_files_info( + self, filepaths: list[str], anatomy: Anatomy) -> list[dict]: + """Get list of file info dictionaries for given file paths. + + Args: + filepaths (list[str]): List of absolute file paths. + anatomy (Anatomy): Anatomy object for the project. + + Returns: + list[dict]: List of file info dictionaries. + + """ file_infos = [] for filepath in filepaths: file_info = self.prepare_file_info(filepath, anatomy) file_infos.append(file_info) return file_infos - def prepare_file_info(self, path, anatomy): + def prepare_file_info(self, path: str, anatomy: Anatomy) -> dict: + """Prepare file info dictionary for given path. + + Args: + path (str): Absolute file path. + anatomy (Anatomy): Anatomy object for the project. + + Returns: + dict: File info dictionary with keys: + - id (str): Unique identifier for the file. + - name (str): Base name of the file. + - path (str): Rootless file path. + - size (int): Size of the file in bytes. + - hash (str): Hash of the file content. + - hash_type (str): Type of the hash used. + + """ return { "id": create_entity_id(), "name": os.path.basename(path), @@ -462,7 +523,22 @@ class CreateHeroVersion(load.ProductLoaderPlugin): "hash_type": "op3", } - def get_publish_dir(self, instance_data, anatomy, template_key): + @staticmethod + def get_publish_dir( + instance_data: dict, + anatomy: Anatomy, + template_key: str) -> str: + """Get publish directory from instance data and anatomy. + + Args: + instance_data (dict): Instance data with "anatomyData" key. + anatomy (Anatomy): Anatomy object for the project. + template_key (str): Template key for the hero template. + + Returns: + str: Normalized publish directory path. + + """ template_data = copy.deepcopy(instance_data.get("anatomyData", {})) if "originalBasename" in instance_data: template_data["originalBasename"] = ( @@ -473,13 +549,34 @@ class CreateHeroVersion(load.ProductLoaderPlugin): ) return os.path.normpath(template_obj.format_strict(template_data)) - def get_rootless_path(self, anatomy, path): + @staticmethod + def get_rootless_path(anatomy: Anatomy, path: str) -> str: + """Get rootless path from absolute path. + + Args: + anatomy (Anatomy): Anatomy object for the project. + path (str): Absolute file path. + + Returns: + str: Rootless file path if root found, else original path. + + """ success, rootless_path = anatomy.find_root_template_from_path(path) if success: path = rootless_path return path - def copy_file(self, src_path, dst_path): + def copy_file(self, src_path: str, dst_path: str) -> None: + """Copy file from src to dst with creating directories. + + Args: + src_path (str): Source file path. + dst_path (str): Destination file path. + + Raises: + OSError: If copying or linking fails. + + """ dirname = os.path.dirname(dst_path) try: os.makedirs(dirname) @@ -495,23 +592,39 @@ class CreateHeroVersion(load.ProductLoaderPlugin): raise copyfile(src_path, dst_path) - def version_from_representations(self, project_name, repres): + @staticmethod + def version_from_representations( + project_name: str, repres: dict) -> Optional[dict[str, Any]]: + """Find version from representations. + + Args: + project_name (str): Name of the project. + repres (dict): Dictionary of representations info. + + Returns: + Optional[dict]: Version entity if found, else None. + + """ for repre_info in repres.values(): version = ayon_api.get_version_by_id( project_name, repre_info["representation"]["versionId"] ) if version: return version + return None - def current_hero_ents(self, project_name, version): + @staticmethod + def current_hero_ents( + project_name: str, + version: dict[str, Any]) -> tuple[Any, list[dict[str, Any]]]: hero_version = ayon_api.get_hero_version_by_product_id( project_name, version["productId"] ) if not hero_version: - return (None, []) + return None, [] hero_repres = list( ayon_api.get_representations( project_name, version_ids={hero_version["id"]} ) ) - return (hero_version, hero_repres) + return hero_version, hero_repres From 22d6819a322ed126ccde1a3f410bd080ba47e718 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 28 Aug 2025 10:51:39 +0200 Subject: [PATCH 407/595] Updated docstring --- client/ayon_core/tools/push_to_project/control.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index 466dfcc994..ad7cc58c5c 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -57,6 +57,9 @@ class PushToContextController: def set_source(self, project_name, version_ids): """Set source project and version. + There is currently assumption that tool is working on products of same + folder. + Args: project_name (Union[str, None]): Source project name. version_ids (Optional[list[str]]): Version ids. From 763c650a9f133623a6e4d1d768ecad9bb99896b3 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 28 Aug 2025 11:03:13 +0200 Subject: [PATCH 408/595] Cache product entities --- client/ayon_core/tools/push_to_project/control.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index ad7cc58c5c..2f712337a4 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -33,6 +33,7 @@ class PushToContextController: self._src_folder_entity = None self._src_folder_task_entities = {} self._src_version_entities = [] + self._src_product_entities = {} self._src_label = None self._submission_enabled = False @@ -110,6 +111,10 @@ class PushToContextController: self._src_folder_entity = folder_entity self._src_folder_task_entities = task_entities self._src_version_entities = version_entities + self._src_product_entities = { + product["id"]: product + for product in product_entities + } if folder_entity: self._user_values.set_new_folder_name(folder_entity["name"]) variant = self._get_src_variant() @@ -233,8 +238,7 @@ class PushToContextController: folder_path = folder_entity["path"] src_labels = [] for version_entity in self._src_version_entities: - product_entity = ayon_api.get_product_by_id( - self._src_project_name, + product_entity = self._src_product_entities.get( version_entity["productId"] ) src_labels.append( @@ -289,8 +293,7 @@ class PushToContextController: task_name, task_type = self._get_task_info_from_repre_entities( task_entities, repre_entities ) - product_entity = ayon_api.get_product_by_id( - project_name, + product_entity = self._src_product_entities.get( version_entity["productId"] ) From f6efb6c80dcf86bd2c61f3d3137404099d49b6a1 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 29 Aug 2025 14:08:16 +0200 Subject: [PATCH 409/595] Expose check for original names requirement --- client/ayon_core/tools/push_to_project/control.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/client/ayon_core/tools/push_to_project/control.py b/client/ayon_core/tools/push_to_project/control.py index 2f712337a4..b4e0d56dfd 100644 --- a/client/ayon_core/tools/push_to_project/control.py +++ b/client/ayon_core/tools/push_to_project/control.py @@ -158,6 +158,14 @@ class PushToContextController: def get_user_values(self): return self._user_values.get_data() + def original_names_required(self): + """Checks if original product names must be used. + + Currently simple check if multiple versions, but if multiple products + with different product_type were used, it wouldn't be necessary. + """ + return len(self._src_version_entities) > 1 + def set_user_value_folder_name(self, folder_name): self._user_values.set_new_folder_name(folder_name) self._invalidate() From 47be2d41c5cd06bd6c2d0e077a1334d08559f165 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 29 Aug 2025 14:09:44 +0200 Subject: [PATCH 410/595] Exposed _use_original_names_checkbox --- client/ayon_core/tools/push_to_project/ui/window.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index d01da4cb3f..99b4d6ecb3 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -307,6 +307,7 @@ class PushToContextSelectWindow(QtWidgets.QWidget): self._new_folder_checkbox = new_folder_checkbox self._folder_name_input = folder_name_input self._comment_input = comment_input + self._use_original_names_checkbox = original_names_checkbox self._publish_btn = publish_btn From 779fa33be21f65966d708421a9b41f5c9cb77a1c Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 29 Aug 2025 14:10:44 +0200 Subject: [PATCH 411/595] Added function to decide state of _use_original_names_checkbox --- .../ayon_core/tools/push_to_project/ui/window.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index 99b4d6ecb3..3867e98b3b 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -368,6 +368,8 @@ class PushToContextSelectWindow(QtWidgets.QWidget): user_values = self._controller.get_user_values() new_folder_name = user_values["new_folder_name"] variant = user_values["variant"] + self._invalidate_use_original_names( + self._use_original_names_checkbox.isChecked()) self._folder_name_input.setText(new_folder_name or "") self._variant_input.setText(variant or "") self._invalidate_variant(user_values["is_variant_valid"]) @@ -420,9 +422,7 @@ class PushToContextSelectWindow(QtWidgets.QWidget): def _on_original_names_change(self, state: int) -> None: use_original_name = bool(state) - self._variant_input.setEnabled(not use_original_name) - self._controller._use_original_name = use_original_name - self.refresh() + self._invalidate_use_original_names(use_original_name) def _on_user_input_timer(self): folder_name_enabled = self._new_folder_name_enabled @@ -499,6 +499,16 @@ class PushToContextSelectWindow(QtWidgets.QWidget): state = "valid" if is_valid else "invalid" set_style_property(self._variant_input, "state", state) + def _invalidate_use_original_names(self, use_original_names): + variant_used = True + if self._controller.original_names_required(): + variant_used = False + use_original_names = True + + self._controller._use_original_name = use_original_names + self._use_original_names_checkbox.setChecked(use_original_names) + self._variant_input.setEnabled(variant_used) + def _on_submission_change(self, event): self._publish_btn.setEnabled(event["enabled"]) From f4f94e75e8c90b2dc72562d491b507f102080528 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 29 Aug 2025 14:21:32 +0200 Subject: [PATCH 412/595] Simplified variant invalidation --- .../tools/push_to_project/ui/window.py | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index 3867e98b3b..ed38f24469 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -368,11 +368,11 @@ class PushToContextSelectWindow(QtWidgets.QWidget): user_values = self._controller.get_user_values() new_folder_name = user_values["new_folder_name"] variant = user_values["variant"] - self._invalidate_use_original_names( - self._use_original_names_checkbox.isChecked()) self._folder_name_input.setText(new_folder_name or "") self._variant_input.setText(variant or "") self._invalidate_variant(user_values["is_variant_valid"]) + self._invalidate_use_original_names( + self._use_original_names_checkbox.isChecked()) self._invalidate_new_folder_name( new_folder_name, user_values["is_new_folder_name_valid"] ) @@ -486,28 +486,27 @@ class PushToContextSelectWindow(QtWidgets.QWidget): state = "" if folder_name is not None: state = "valid" if is_valid else "invalid" - set_style_property( - self._folder_name_input, "state", state - ) + set_style_property(self._folder_name_input, "state", state) def _invalidate_variant(self, is_valid): - if self._controller._use_original_name: - is_valid = True - if self._variant_is_valid is is_valid: - return self._variant_is_valid = is_valid state = "valid" if is_valid else "invalid" set_style_property(self._variant_input, "state", state) def _invalidate_use_original_names(self, use_original_names): - variant_used = True + """Checks if original names must be used. + + Invalidates Variant if necessary + """ if self._controller.original_names_required(): - variant_used = False use_original_names = True + if use_original_names: + self._variant_input.setEnabled(not use_original_names) + self._invalidate_variant(not use_original_names) + self._controller._use_original_name = use_original_names self._use_original_names_checkbox.setChecked(use_original_names) - self._variant_input.setEnabled(variant_used) def _on_submission_change(self, event): self._publish_btn.setEnabled(event["enabled"]) From 12618488055958ff0e04c267d02dc16b42eda42e Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 29 Aug 2025 14:56:25 +0200 Subject: [PATCH 413/595] Fix resetting invalid variant --- client/ayon_core/tools/push_to_project/ui/window.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/ui/window.py b/client/ayon_core/tools/push_to_project/ui/window.py index ed38f24469..f382ccce64 100644 --- a/client/ayon_core/tools/push_to_project/ui/window.py +++ b/client/ayon_core/tools/push_to_project/ui/window.py @@ -501,9 +501,8 @@ class PushToContextSelectWindow(QtWidgets.QWidget): if self._controller.original_names_required(): use_original_names = True - if use_original_names: - self._variant_input.setEnabled(not use_original_names) - self._invalidate_variant(not use_original_names) + self._variant_input.setEnabled(not use_original_names) + self._invalidate_variant(not use_original_names) self._controller._use_original_name = use_original_names self._use_original_names_checkbox.setChecked(use_original_names) From a6a32b49fc176cb5039d47980c0252073f800350 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Tue, 2 Sep 2025 11:36:36 +0200 Subject: [PATCH 414/595] update opentimelineio to 0.17.0 --- client/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/pyproject.toml b/client/pyproject.toml index 6416d9b8e1..bccc0b9872 100644 --- a/client/pyproject.toml +++ b/client/pyproject.toml @@ -15,7 +15,7 @@ qtawesome = "0.7.3" [ayon.runtimeDependencies] aiohttp-middlewares = "^2.0.0" Click = "^8" -OpenTimelineIO = "0.16.0" +OpenTimelineIO = "0.17.0" opencolorio = "^2.3.2,<2.4.0" Pillow = "9.5.0" websocket-client = ">=0.40.0,<2" From c3b8f76501f5327343f98f5a5f106e264d34b06b Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Wed, 3 Sep 2025 20:18:44 +0800 Subject: [PATCH 415/595] max hosts for pre ocio hook so that the environment variable for ocio would be collected accuratly --- client/ayon_core/hooks/pre_ocio_hook.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/hooks/pre_ocio_hook.py b/client/ayon_core/hooks/pre_ocio_hook.py index 85fcef47f2..be086dae65 100644 --- a/client/ayon_core/hooks/pre_ocio_hook.py +++ b/client/ayon_core/hooks/pre_ocio_hook.py @@ -14,7 +14,7 @@ class OCIOEnvHook(PreLaunchHook): "fusion", "blender", "aftereffects", - "3dsmax", + "max", "houdini", "maya", "nuke", From 14ab55e7ee75f25a34ccf1aa54865ef4f5cbe37e Mon Sep 17 00:00:00 2001 From: Ynbot Date: Fri, 5 Sep 2025 13:40:16 +0000 Subject: [PATCH 416/595] [Automated] Add generated package files from main --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index f2aa94020f..8eb2aa68f8 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.5.3+dev" +__version__ = "1.6.0" diff --git a/package.py b/package.py index 4393b7be40..37c3133eb0 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.5.3+dev" +version = "1.6.0" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index ee6c35b50b..302d249cca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.5.3+dev" +version = "1.6.0" description = "" authors = ["Ynput Team "] readme = "README.md" From 95a143ea4602b0fb12cefa9d0a1bd8911c799084 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Fri, 5 Sep 2025 13:40:54 +0000 Subject: [PATCH 417/595] [Automated] Update version in package.py for develop --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index 8eb2aa68f8..9ca5e1bc30 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.6.0" +__version__ = "1.6.0+dev" diff --git a/package.py b/package.py index 37c3133eb0..e430524dd5 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.6.0" +version = "1.6.0+dev" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index 302d249cca..9a62a408ba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.6.0" +version = "1.6.0+dev" description = "" authors = ["Ynput Team "] readme = "README.md" From a269244e78c56b049cfc381bd0a927f2373f7f1d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 5 Sep 2025 13:41:47 +0000 Subject: [PATCH 418/595] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index ce5982969c..24c2b568b3 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to AYON Tray options: + - 1.6.0 - 1.5.3 - 1.5.2 - 1.5.1 From 257dfe204a62dedf4a88d598bbba54cd133cf5eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Mon, 8 Sep 2025 14:35:57 +0200 Subject: [PATCH 419/595] :sparkles: resolve environments in dev bundle paths --- client/ayon_core/addon/base.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/ayon_core/addon/base.py b/client/ayon_core/addon/base.py index f7fee13dc7..9f1d60fe88 100644 --- a/client/ayon_core/addon/base.py +++ b/client/ayon_core/addon/base.py @@ -302,6 +302,9 @@ def _load_ayon_addons(log): milestone_version = MOVED_ADDON_MILESTONE_VERSIONS.get(addon_name) if use_dev_path: addon_dir = dev_addon_info["path"] + if addon_dir: + addon_dir.format(os.environ) + if not addon_dir or not os.path.exists(addon_dir): log.warning(( "Dev addon {} {} path does not exists. Path \"{}\"" From 8ac8352dcd14c7d720c8439961e014cff34fc884 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 8 Sep 2025 14:47:00 +0200 Subject: [PATCH 420/595] added burnins adapter --- client/pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/client/pyproject.toml b/client/pyproject.toml index bccc0b9872..5acfdf439d 100644 --- a/client/pyproject.toml +++ b/client/pyproject.toml @@ -16,6 +16,7 @@ qtawesome = "0.7.3" aiohttp-middlewares = "^2.0.0" Click = "^8" OpenTimelineIO = "0.17.0" +otio-burnins-adapter = "1.0.0" opencolorio = "^2.3.2,<2.4.0" Pillow = "9.5.0" websocket-client = ">=0.40.0,<2" From 2e881902037299ed09553984553640c2320e1d33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Mon, 8 Sep 2025 15:48:30 +0200 Subject: [PATCH 421/595] :bug: fix handling of `os.environ` --- client/ayon_core/addon/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/addon/base.py b/client/ayon_core/addon/base.py index 9f1d60fe88..3ec09f32a3 100644 --- a/client/ayon_core/addon/base.py +++ b/client/ayon_core/addon/base.py @@ -303,7 +303,7 @@ def _load_ayon_addons(log): if use_dev_path: addon_dir = dev_addon_info["path"] if addon_dir: - addon_dir.format(os.environ) + addon_dir = addon_dir.format(**os.environ) if not addon_dir or not os.path.exists(addon_dir): log.warning(( From db2c1858d5a0014d27a16ecf138075f437b096a6 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Mon, 8 Sep 2025 16:10:49 +0200 Subject: [PATCH 422/595] Updates color space handling in OIIO transcode. Temporarily disables upstream OCIO color space logic. Uses 'colorspaceDisplay' and 'colorspaceView' instead. This is a temporary workaround. --- .../ayon_core/plugins/publish/extract_color_transcode.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/plugins/publish/extract_color_transcode.py b/client/ayon_core/plugins/publish/extract_color_transcode.py index 24820f7022..8b351c7f31 100644 --- a/client/ayon_core/plugins/publish/extract_color_transcode.py +++ b/client/ayon_core/plugins/publish/extract_color_transcode.py @@ -88,9 +88,12 @@ class ExtractOIIOTranscode(publish.Extractor): repres = instance.data["representations"] for idx, repre in enumerate(list(repres)): # target space, display and view might be defined upstream - target_colorspace = instance.data.get("targetOCIOColorspace") - target_display = instance.data.get("targetOCIODisplay") - target_view = instance.data.get("targetOCIOView") + # TODO: address https://github.com/ynput/ayon-core/pull/1268#discussion_r2156555474 + # Implement upstream logic to handle target_colorspace, + # target_display, target_view in other DCCs + target_colorspace = False + target_display = instance.data.get("colorspaceDisplay") + target_view = instance.data.get("colorspaceView") self.log.debug("repre ({}): `{}`".format(idx + 1, repre["name"])) if not self._repre_is_valid(repre): From 8e0585c50d06c13e17cfbc0f78ddc0efcae71932 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= <33513211+antirotor@users.noreply.github.com> Date: Mon, 8 Sep 2025 17:52:56 +0200 Subject: [PATCH 423/595] Update client/ayon_core/addon/base.py Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/addon/base.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/addon/base.py b/client/ayon_core/addon/base.py index 3ec09f32a3..70bb9dca40 100644 --- a/client/ayon_core/addon/base.py +++ b/client/ayon_core/addon/base.py @@ -303,7 +303,9 @@ def _load_ayon_addons(log): if use_dev_path: addon_dir = dev_addon_info["path"] if addon_dir: - addon_dir = addon_dir.format(**os.environ) + addon_dir = os.path.expandvars( + addon_dir.format_map(os.environ) + ) if not addon_dir or not os.path.exists(addon_dir): log.warning(( From 6419e3ed749fe33c80100a5fe5716166d4f404e2 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 11 Sep 2025 13:35:19 +0200 Subject: [PATCH 424/595] use python 3 super --- client/ayon_core/tools/utils/widgets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/utils/widgets.py b/client/ayon_core/tools/utils/widgets.py index 941aa692f9..4b787ff830 100644 --- a/client/ayon_core/tools/utils/widgets.py +++ b/client/ayon_core/tools/utils/widgets.py @@ -418,7 +418,7 @@ class ExpandingTextEdit(QtWidgets.QTextEdit): """QTextEdit which does not have sroll area but expands height.""" def __init__(self, parent=None): - super(ExpandingTextEdit, self).__init__(parent) + super().__init__(parent) size_policy = self.sizePolicy() size_policy.setHeightForWidth(True) From 6b058fccf092717111444b89e168e4f678d9ca51 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 11 Sep 2025 13:35:50 +0200 Subject: [PATCH 425/595] disable scroll bards on message input --- client/ayon_core/tools/publisher/widgets/report_page.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/ayon_core/tools/publisher/widgets/report_page.py b/client/ayon_core/tools/publisher/widgets/report_page.py index 1e46e7e52c..033ddab0ef 100644 --- a/client/ayon_core/tools/publisher/widgets/report_page.py +++ b/client/ayon_core/tools/publisher/widgets/report_page.py @@ -1147,6 +1147,8 @@ class LogItemMessage(QtWidgets.QTextEdit): QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum ) + self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) document = self.document() document.documentLayout().documentSizeChanged.connect( self._adjust_minimum_size From 23a905b837938da661e30d3cafca3f4e917f32b7 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 11 Sep 2025 15:10:45 +0200 Subject: [PATCH 426/595] move addons manager to controller --- client/ayon_core/tools/launcher/abstract.py | 5 +++++ client/ayon_core/tools/launcher/control.py | 8 ++++++++ client/ayon_core/tools/launcher/models/actions.py | 10 +--------- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/client/ayon_core/tools/launcher/abstract.py b/client/ayon_core/tools/launcher/abstract.py index 1d7dafd62f..c0fc115f31 100644 --- a/client/ayon_core/tools/launcher/abstract.py +++ b/client/ayon_core/tools/launcher/abstract.py @@ -4,6 +4,7 @@ from abc import ABC, abstractmethod from dataclasses import dataclass from typing import Optional, Any +from ayon_core.addon import AddonsManager from ayon_core.tools.common_models import ( ProjectItem, FolderItem, @@ -85,6 +86,10 @@ class AbstractLauncherBackend(AbstractLauncherCommon): pass + @abstractmethod + def get_addons_manager(self) -> AddonsManager: + pass + @abstractmethod def get_project_settings(self, project_name): """Project settings for current project. diff --git a/client/ayon_core/tools/launcher/control.py b/client/ayon_core/tools/launcher/control.py index 58d22453be..ce23b0323f 100644 --- a/client/ayon_core/tools/launcher/control.py +++ b/client/ayon_core/tools/launcher/control.py @@ -1,5 +1,6 @@ from ayon_core.lib import Logger, get_ayon_username from ayon_core.lib.events import QueuedEventSystem +from ayon_core.addon import AddonsManager from ayon_core.settings import get_project_settings, get_studio_settings from ayon_core.tools.common_models import ProjectsModel, HierarchyModel @@ -17,6 +18,8 @@ class BaseLauncherController( self._event_system = None self._log = None + self._addons_manager = None + self._username = NOT_SET self._selection_model = LauncherSelectionModel(self) @@ -59,6 +62,11 @@ class BaseLauncherController( def register_event_callback(self, topic, callback): self.event_system.add_callback(topic, callback) + def get_addons_manager(self) -> AddonsManager: + if self._addons_manager is None: + self._addons_manager = AddonsManager() + return self._addons_manager + # Entity items for UI def get_project_items(self, sender=None): return self._projects_model.get_project_items(sender) diff --git a/client/ayon_core/tools/launcher/models/actions.py b/client/ayon_core/tools/launcher/models/actions.py index 51fbe72143..5f888effb5 100644 --- a/client/ayon_core/tools/launcher/models/actions.py +++ b/client/ayon_core/tools/launcher/models/actions.py @@ -15,7 +15,6 @@ from ayon_core.lib import ( get_settings_variant, run_detached_ayon_launcher_process, ) -from ayon_core.addon import AddonsManager from ayon_core.pipeline.actions import ( discover_launcher_actions, LauncherActionSelection, @@ -104,8 +103,6 @@ class ActionsModel: levels=2, default_factory=list, lifetime=20, ) - self._addons_manager = None - self._variant = get_settings_variant() @staticmethod @@ -333,11 +330,6 @@ class ActionsModel: exc_info=True ) - def _get_addons_manager(self): - if self._addons_manager is None: - self._addons_manager = AddonsManager() - return self._addons_manager - def _prepare_selection(self, project_name, folder_id, task_id): project_entity = None if project_name: @@ -542,7 +534,7 @@ class ActionsModel: # NOTE We don't need to register the paths, but that would # require to change discovery logic and deprecate all functions # related to registering and discovering launcher actions. - addons_manager = self._get_addons_manager() + addons_manager = self._controller.get_addons_manager() actions_paths = addons_manager.collect_launcher_action_paths() for path in actions_paths: if path and os.path.exists(path): From d960694f453bee2a50847649bfbc79f1eea97656 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 12 Sep 2025 12:58:15 +0200 Subject: [PATCH 427/595] added workfile items to launcher controller --- client/ayon_core/tools/launcher/abstract.py | 26 +++++ client/ayon_core/tools/launcher/control.py | 28 ++++- .../tools/launcher/models/__init__.py | 2 + .../tools/launcher/models/workfiles.py | 101 ++++++++++++++++++ 4 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 client/ayon_core/tools/launcher/models/workfiles.py diff --git a/client/ayon_core/tools/launcher/abstract.py b/client/ayon_core/tools/launcher/abstract.py index c0fc115f31..b0a7a8b213 100644 --- a/client/ayon_core/tools/launcher/abstract.py +++ b/client/ayon_core/tools/launcher/abstract.py @@ -57,6 +57,14 @@ class ActionItem: addon_version: Optional[str] = None +@dataclass +class WorkfileItem: + filename : str + exists: bool + icon: Optional[str] + version: Optional[int] + + class AbstractLauncherCommon(ABC): @abstractmethod def register_event_callback(self, topic, callback): @@ -470,3 +478,21 @@ class AbstractLauncherFrontEnd(AbstractLauncherCommon): """ pass + + @abstractmethod + def get_workfile_items( + self, + project_name: Optional[str], + task_id: Optional[str], + ) -> list[WorkfileItem]: + """Get workfile items for a given context. + + Args: + project_name (Optional[str]): Project name. + task_id (Optional[str]): Task id. + + Returns: + list[WorkfileItem]: List of workfile items. + + """ + pass diff --git a/client/ayon_core/tools/launcher/control.py b/client/ayon_core/tools/launcher/control.py index ce23b0323f..66afebc247 100644 --- a/client/ayon_core/tools/launcher/control.py +++ b/client/ayon_core/tools/launcher/control.py @@ -1,11 +1,21 @@ +from typing import Optional + from ayon_core.lib import Logger, get_ayon_username from ayon_core.lib.events import QueuedEventSystem from ayon_core.addon import AddonsManager from ayon_core.settings import get_project_settings, get_studio_settings from ayon_core.tools.common_models import ProjectsModel, HierarchyModel -from .abstract import AbstractLauncherFrontEnd, AbstractLauncherBackend -from .models import LauncherSelectionModel, ActionsModel +from .abstract import ( + AbstractLauncherFrontEnd, + AbstractLauncherBackend, + WorkfileItem, +) +from .models import ( + LauncherSelectionModel, + ActionsModel, + WorkfilesModel, +) NOT_SET = object() @@ -26,6 +36,7 @@ class BaseLauncherController( self._projects_model = ProjectsModel(self) self._hierarchy_model = HierarchyModel(self) self._actions_model = ActionsModel(self) + self._workfiles_model = WorkfilesModel(self) @property def log(self): @@ -141,6 +152,17 @@ class BaseLauncherController( "task_name": self.get_selected_task_name(), } + # Workfiles + def get_workfile_items( + self, + project_name: Optional[str], + task_id: Optional[str], + ) -> list[WorkfileItem]: + return self._workfiles_model.get_workfile_items( + project_name, + task_id, + ) + # Actions def get_action_items(self, project_name, folder_id, task_id): return self._actions_model.get_action_items( @@ -194,6 +216,8 @@ class BaseLauncherController( self._projects_model.reset() # Refresh actions self._actions_model.refresh() + # Reset workfiles model + self._workfiles_model.reset() self._emit_event("controller.refresh.actions.finished") diff --git a/client/ayon_core/tools/launcher/models/__init__.py b/client/ayon_core/tools/launcher/models/__init__.py index 1bc60c85f0..efc0de96ca 100644 --- a/client/ayon_core/tools/launcher/models/__init__.py +++ b/client/ayon_core/tools/launcher/models/__init__.py @@ -1,8 +1,10 @@ from .actions import ActionsModel from .selection import LauncherSelectionModel +from .workfiles import WorkfilesModel __all__ = ( "ActionsModel", "LauncherSelectionModel", + "WorkfilesModel", ) diff --git a/client/ayon_core/tools/launcher/models/workfiles.py b/client/ayon_core/tools/launcher/models/workfiles.py new file mode 100644 index 0000000000..2ba15c1800 --- /dev/null +++ b/client/ayon_core/tools/launcher/models/workfiles.py @@ -0,0 +1,101 @@ +import os +from typing import Optional, Any + +import ayon_api + +from ayon_core.lib import ( + Logger, + NestedCacheItem, +) +from ayon_core.pipeline import Anatomy +from ayon_core.tools.launcher.abstract import ( + WorkfileItem, + AbstractLauncherBackend, +) + + +class WorkfilesModel: + def __init__(self, controller: AbstractLauncherBackend): + self._controller = controller + + self._log = Logger.get_logger(self.__class__.__name__) + + self._host_icons = None + self._workfile_items = NestedCacheItem( + levels=2, default_factory=list, lifetime=60, + ) + + def reset(self) -> None: + self._workfile_items.reset() + + def get_workfile_items( + self, + project_name: Optional[str], + task_id: Optional[str], + ) -> list[WorkfileItem]: + if not project_name or not task_id: + return [] + + cache = self._workfile_items[project_name][task_id] + if cache.is_valid: + return cache.get_data() + + project_entity = self._controller.get_project_entity(project_name) + anatomy = Anatomy(project_name, project_entity=project_entity) + items = [] + for workfile_entity in ayon_api.get_workfiles_info( + project_name, task_ids={task_id}, fields={"path", "data"} + ): + rootless_path = workfile_entity["path"] + exists = False + try: + path = anatomy.fill_root(rootless_path) + exists = os.path.exists(path) + except Exception: + self._log.warning( + "Failed to fill root for workfile path", + exc_info=True, + ) + workfile_data = workfile_entity["data"] + host_name = workfile_data.get("host_name") + version = workfile_data.get("version") + + items.append(WorkfileItem( + os.path.basename(rootless_path), + exists=exists, + icon=self._get_host_icon(host_name), + version=version, + )) + cache.update_data(items) + return items + + def _get_host_icon( + self, host_name: Optional[str] + ) -> Optional[dict[str, Any]]: + if self._host_icons is None: + host_icons = {} + try: + host_icons = self._get_host_icons() + except Exception: + self._log.warning( + "Failed to get host icons", + exc_info=True, + ) + self._host_icons = host_icons + return self._host_icons.get(host_name) + + def _get_host_icons(self) -> dict[str, Any]: + addons_manager = self._controller.get_addons_manager() + applications_addon = addons_manager["applications"] + apps_manager = applications_addon.get_applications_manager() + output = {} + for app_group in apps_manager.app_groups.values(): + host_name = app_group.host_name + icon_filename = app_group.icon + if not host_name or not icon_filename: + continue + icon_url = applications_addon.get_app_icon_url( + icon_filename, server=True + ) + output[host_name] = icon_url + return output From 0794db9ac2d6fc6165c12a90aba2084433fab4eb Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 12 Sep 2025 12:58:37 +0200 Subject: [PATCH 428/595] added workfiles page to launcher window --- .../tools/launcher/ui/hierarchy_page.py | 13 +- client/ayon_core/tools/launcher/ui/window.py | 2 +- .../tools/launcher/ui/workfiles_page.py | 178 ++++++++++++++++++ 3 files changed, 190 insertions(+), 3 deletions(-) create mode 100644 client/ayon_core/tools/launcher/ui/workfiles_page.py diff --git a/client/ayon_core/tools/launcher/ui/hierarchy_page.py b/client/ayon_core/tools/launcher/ui/hierarchy_page.py index 65efdc27ac..47388d9685 100644 --- a/client/ayon_core/tools/launcher/ui/hierarchy_page.py +++ b/client/ayon_core/tools/launcher/ui/hierarchy_page.py @@ -12,6 +12,8 @@ from ayon_core.tools.utils import ( ) from ayon_core.tools.utils.lib import checkstate_int_to_enum +from .workfiles_page import WorkfilesPage + class HierarchyPage(QtWidgets.QWidget): def __init__(self, controller, parent): @@ -73,10 +75,15 @@ class HierarchyPage(QtWidgets.QWidget): # - Tasks widget tasks_widget = TasksWidget(controller, content_body) + # - Third page - Workfiles + workfiles_page = WorkfilesPage(controller, content_body) + content_body.addWidget(folders_widget) content_body.addWidget(tasks_widget) - content_body.setStretchFactor(0, 100) - content_body.setStretchFactor(1, 65) + content_body.addWidget(workfiles_page) + content_body.setStretchFactor(0, 120) + content_body.setStretchFactor(1, 85) + content_body.setStretchFactor(2, 220) main_layout = QtWidgets.QVBoxLayout(self) main_layout.setContentsMargins(0, 0, 0, 0) @@ -99,6 +106,7 @@ class HierarchyPage(QtWidgets.QWidget): self._my_tasks_checkbox = my_tasks_checkbox self._folders_widget = folders_widget self._tasks_widget = tasks_widget + self._workfiles_page = workfiles_page self._project_name = None @@ -117,6 +125,7 @@ class HierarchyPage(QtWidgets.QWidget): def refresh(self): self._folders_widget.refresh() self._tasks_widget.refresh() + self._workfiles_page.refresh() self._on_my_tasks_checkbox_state_changed( self._my_tasks_checkbox.checkState() ) diff --git a/client/ayon_core/tools/launcher/ui/window.py b/client/ayon_core/tools/launcher/ui/window.py index 819e141d59..ad2fd2d3c2 100644 --- a/client/ayon_core/tools/launcher/ui/window.py +++ b/client/ayon_core/tools/launcher/ui/window.py @@ -177,7 +177,7 @@ class LauncherWindow(QtWidgets.QWidget): self._page_slide_anim = page_slide_anim hierarchy_page.setVisible(not self._is_on_projects_page) - self.resize(520, 740) + self.resize(920, 740) def showEvent(self, event): super().showEvent(event) diff --git a/client/ayon_core/tools/launcher/ui/workfiles_page.py b/client/ayon_core/tools/launcher/ui/workfiles_page.py new file mode 100644 index 0000000000..2f390f1bee --- /dev/null +++ b/client/ayon_core/tools/launcher/ui/workfiles_page.py @@ -0,0 +1,178 @@ +from typing import Optional + +import ayon_api +from qtpy import QtCore, QtWidgets, QtGui + +from ayon_core.tools.utils import get_qt_icon +from ayon_core.tools.launcher.abstract import AbstractLauncherFrontEnd + +VERSION_ROLE = QtCore.Qt.UserRole + 1 + + +class WorkfilesModel(QtGui.QStandardItemModel): + refreshed = QtCore.Signal() + + def __init__(self, controller: AbstractLauncherFrontEnd) -> None: + super().__init__() + + self.setColumnCount(1) + self.setHeaderData(0, QtCore.Qt.Horizontal, "Workfiles") + + controller.register_event_callback( + "selection.project.changed", + self._on_selection_project_changed, + ) + controller.register_event_callback( + "selection.folder.changed", + self._on_selection_folder_changed, + ) + controller.register_event_callback( + "selection.task.changed", + self._on_selection_task_changed, + ) + + self._controller = controller + self._selected_project_name = None + self._selected_folder_id = None + self._selected_task_id = None + + self._transparent_icon = None + + self._cached_icons = {} + + def refresh(self) -> None: + root_item = self.invisibleRootItem() + root_item.removeRows(0, root_item.rowCount()) + + workfile_items = self._controller.get_workfile_items( + self._selected_project_name, self._selected_task_id + ) + new_items = [] + for workfile_item in workfile_items: + icon = self._get_icon(workfile_item.icon) + item = QtGui.QStandardItem(workfile_item.filename) + item.setData(icon, QtCore.Qt.DecorationRole) + item.setData(workfile_item.version, VERSION_ROLE) + flags = QtCore.Qt.NoItemFlags + if workfile_item.exists: + flags = QtCore.Qt.ItemIsEnabled + item.setFlags(flags) + new_items.append(item) + + if not new_items: + title = "< No workfiles >" + if not self._selected_project_name: + title = "< Select a project >" + elif not self._selected_folder_id: + title = "< Select a folder >" + elif not self._selected_task_id: + title = "< Select a task >" + item = QtGui.QStandardItem(title) + item.setFlags(QtCore.Qt.NoItemFlags) + new_items.append(item) + root_item.appendRows(new_items) + + self.refreshed.emit() + + def _on_selection_project_changed(self, event) -> None: + self._selected_project_name = event["project_name"] + self._selected_folder_id = None + self._selected_task_id = None + self.refresh() + + def _on_selection_folder_changed(self, event) -> None: + self._selected_project_name = event["project_name"] + self._selected_folder_id = event["folder_id"] + self._selected_task_id = None + self.refresh() + + def _on_selection_task_changed(self, event) -> None: + self._selected_project_name = event["project_name"] + self._selected_folder_id = event["folder_id"] + self._selected_task_id = event["task_id"] + self.refresh() + + def _get_transparent_icon(self) -> QtGui.QIcon: + if self._transparent_icon is None: + self._transparent_icon = get_qt_icon({ + "type": "transparent", "size": 256 + }) + return self._transparent_icon + + def _get_icon(self, icon_url: Optional[str]) -> QtGui.QIcon: + if icon_url is None: + return self._get_transparent_icon() + icon = self._cached_icons.get(icon_url) + if icon is not None: + return icon + + base_url = ayon_api.get_base_url() + if icon_url.startswith(base_url): + icon_def = { + "type": "ayon_url", + "url": icon_url[len(base_url) + 1:], + } + else: + icon_def = { + "type": "url", + "url": icon_url, + } + + icon = get_qt_icon(icon_def) + if icon is None: + icon = self._get_transparent_icon() + self._cached_icons[icon_url] = icon + return icon + + +class WorkfilesProxyModel(QtCore.QSortFilterProxyModel): + def lessThan(self, left, right) -> bool: + # left_version = left.data(VERSION_ROLE) + # right_version = right.data(VERSION_ROLE) + # if left_version != right_version: + # if left_version is None: + # return False + # if right_version is None: + # return True + # + # return left_version > right_version + return not super().lessThan(left, right) + + +class WorkfilesView(QtWidgets.QTreeView): + def drawBranches(self, painter, rect, index): + return + + +class WorkfilesPage(QtWidgets.QWidget): + def __init__( + self, + controller: AbstractLauncherFrontEnd, + parent: QtWidgets.QWidget, + ) -> None: + super().__init__(parent) + + workfiles_view = WorkfilesView(self) + workfiles_view.setIndentation(0) + workfiles_model = WorkfilesModel(controller) + workfiles_proxy = WorkfilesProxyModel() + workfiles_proxy.setSourceModel(workfiles_model) + + workfiles_view.setModel(workfiles_proxy) + + layout = QtWidgets.QVBoxLayout(self) + layout.setContentsMargins(0, 0, 0, 0) + layout.addWidget(workfiles_view, 1) + + workfiles_model.refreshed.connect(self._on_refresh) + + self._controller = controller + self._workfiles_view = workfiles_view + self._workfiles_model = workfiles_model + self._workfiles_proxy = workfiles_proxy + + def refresh(self) -> None: + self._workfiles_model.refresh() + + def _on_refresh(self) -> None: + self._workfiles_proxy.sort(0) From f19c6d0ad8f75fda4854e2343665de8405396bb3 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 12 Sep 2025 15:30:53 +0200 Subject: [PATCH 429/595] use standard proxy model --- .../tools/launcher/ui/workfiles_page.py | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/client/ayon_core/tools/launcher/ui/workfiles_page.py b/client/ayon_core/tools/launcher/ui/workfiles_page.py index 2f390f1bee..9bfd474764 100644 --- a/client/ayon_core/tools/launcher/ui/workfiles_page.py +++ b/client/ayon_core/tools/launcher/ui/workfiles_page.py @@ -125,20 +125,6 @@ class WorkfilesModel(QtGui.QStandardItemModel): return icon -class WorkfilesProxyModel(QtCore.QSortFilterProxyModel): - def lessThan(self, left, right) -> bool: - # left_version = left.data(VERSION_ROLE) - # right_version = right.data(VERSION_ROLE) - # if left_version != right_version: - # if left_version is None: - # return False - # if right_version is None: - # return True - # - # return left_version > right_version - return not super().lessThan(left, right) - - class WorkfilesView(QtWidgets.QTreeView): def drawBranches(self, painter, rect, index): return @@ -155,7 +141,7 @@ class WorkfilesPage(QtWidgets.QWidget): workfiles_view = WorkfilesView(self) workfiles_view.setIndentation(0) workfiles_model = WorkfilesModel(controller) - workfiles_proxy = WorkfilesProxyModel() + workfiles_proxy = QtCore.QSortFilterProxyModel() workfiles_proxy.setSourceModel(workfiles_model) workfiles_view.setModel(workfiles_proxy) @@ -175,4 +161,4 @@ class WorkfilesPage(QtWidgets.QWidget): self._workfiles_model.refresh() def _on_refresh(self) -> None: - self._workfiles_proxy.sort(0) + self._workfiles_proxy.sort(0, QtCore.Qt.DescendingOrder ) From afe70c0f55d3d567ddf578a13a03f7172093522f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 12 Sep 2025 15:37:50 +0200 Subject: [PATCH 430/595] formatting fixes --- client/ayon_core/tools/launcher/abstract.py | 2 +- client/ayon_core/tools/launcher/ui/workfiles_page.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/launcher/abstract.py b/client/ayon_core/tools/launcher/abstract.py index b0a7a8b213..f312504d31 100644 --- a/client/ayon_core/tools/launcher/abstract.py +++ b/client/ayon_core/tools/launcher/abstract.py @@ -59,7 +59,7 @@ class ActionItem: @dataclass class WorkfileItem: - filename : str + filename: str exists: bool icon: Optional[str] version: Optional[int] diff --git a/client/ayon_core/tools/launcher/ui/workfiles_page.py b/client/ayon_core/tools/launcher/ui/workfiles_page.py index 9bfd474764..0401183080 100644 --- a/client/ayon_core/tools/launcher/ui/workfiles_page.py +++ b/client/ayon_core/tools/launcher/ui/workfiles_page.py @@ -161,4 +161,4 @@ class WorkfilesPage(QtWidgets.QWidget): self._workfiles_model.refresh() def _on_refresh(self) -> None: - self._workfiles_proxy.sort(0, QtCore.Qt.DescendingOrder ) + self._workfiles_proxy.sort(0, QtCore.Qt.DescendingOrder) From 8f2f10bce1efca04f6f0a22f663d98a99cce95c6 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 12 Sep 2025 18:20:43 +0200 Subject: [PATCH 431/595] added 'get_project_entity' to controller --- client/ayon_core/tools/loader/abstract.py | 6 ++++++ client/ayon_core/tools/loader/control.py | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/client/ayon_core/tools/loader/abstract.py b/client/ayon_core/tools/loader/abstract.py index 5ab7e78212..42e88c15d7 100644 --- a/client/ayon_core/tools/loader/abstract.py +++ b/client/ayon_core/tools/loader/abstract.py @@ -513,6 +513,12 @@ class BackendLoaderController(_BaseLoaderController): pass + @abstractmethod + def get_project_entity( + self, project_name: Optional[str] + ) -> Optional[dict[str, Any]]: + pass + class FrontendLoaderController(_BaseLoaderController): @abstractmethod diff --git a/client/ayon_core/tools/loader/control.py b/client/ayon_core/tools/loader/control.py index 7ba42a0981..492a05e82f 100644 --- a/client/ayon_core/tools/loader/control.py +++ b/client/ayon_core/tools/loader/control.py @@ -2,6 +2,7 @@ from __future__ import annotations import logging import uuid +from typing import Optional, Any import ayon_api @@ -188,6 +189,11 @@ class LoaderController(BackendLoaderController, FrontendLoaderController): def get_project_items(self, sender=None): return self._projects_model.get_project_items(sender) + def get_project_entity( + self, project_name: Optional[str] + ) -> Optional[dict[str, Any]]: + return self._projects_model.get_project_entity(project_name) + def get_folder_type_items(self, project_name, sender=None): return self._projects_model.get_folder_type_items( project_name, sender From 7f8e62e8efc2efa016fe66cabc305d1a215fd5bf Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 12 Sep 2025 18:29:55 +0200 Subject: [PATCH 432/595] add icons mapping to products --- client/ayon_core/tools/loader/abstract.py | 7 - .../ayon_core/tools/loader/models/products.py | 205 +++++++++--------- .../tools/loader/ui/products_model.py | 8 +- 3 files changed, 103 insertions(+), 117 deletions(-) diff --git a/client/ayon_core/tools/loader/abstract.py b/client/ayon_core/tools/loader/abstract.py index 42e88c15d7..87cfb1f3f2 100644 --- a/client/ayon_core/tools/loader/abstract.py +++ b/client/ayon_core/tools/loader/abstract.py @@ -78,7 +78,6 @@ class ProductItem: product_type (str): Product type. product_name (str): Product name. product_icon (dict[str, Any]): Product icon definition. - product_type_icon (dict[str, Any]): Product type icon definition. product_in_scene (bool): Is product in scene (only when used in DCC). group_name (str): Group name. folder_id (str): Folder id. @@ -93,8 +92,6 @@ class ProductItem: product_base_type: str, product_name: str, product_icon: dict[str, Any], - product_type_icon: dict[str, Any], - product_base_type_icon: dict[str, Any], group_name: str, folder_id: str, folder_label: str, @@ -106,8 +103,6 @@ class ProductItem: self.product_base_type = product_base_type self.product_name = product_name self.product_icon = product_icon - self.product_type_icon = product_type_icon - self.product_base_type_icon = product_base_type_icon self.product_in_scene = product_in_scene self.group_name = group_name self.folder_id = folder_id @@ -121,8 +116,6 @@ class ProductItem: "product_base_type": self.product_base_type, "product_name": self.product_name, "product_icon": self.product_icon, - "product_type_icon": self.product_type_icon, - "product_base_type_icon": self.product_base_type_icon, "product_in_scene": self.product_in_scene, "group_name": self.group_name, "folder_id": self.folder_id, diff --git a/client/ayon_core/tools/loader/models/products.py b/client/ayon_core/tools/loader/models/products.py index 87e2406c81..f5e0b2fa80 100644 --- a/client/ayon_core/tools/loader/models/products.py +++ b/client/ayon_core/tools/loader/models/products.py @@ -9,7 +9,6 @@ import arrow import ayon_api from ayon_api.operations import OperationsSession - from ayon_core.lib import NestedCacheItem from ayon_core.style import get_default_entity_icon_color from ayon_core.tools.loader.abstract import ( @@ -21,12 +20,63 @@ from ayon_core.tools.loader.abstract import ( ) if TYPE_CHECKING: - from ayon_api.typing import ProductBaseTypeDict, ProductDict, VersionDict - + from ayon_api.typing import ( + ProductBaseTypeDict, + ProductDict, + VersionDict, + ) PRODUCTS_MODEL_SENDER = "products.model" +class ProductBaseTypeIconMapping: + def __init__( + self, + default: Optional[dict[str, str]] = None, + definitions: Optional[list[dict[str, str]]] = None, + ): + self._default = default or {} + self._definitions = definitions or [] + + self._default_def = None + self._definitions_by_name = None + + def get_icon( + self, + product_base_type: Optional[str] = None, + product_type: Optional[str] = None, + ) -> dict[str, str]: + defs = self._get_defs_by_name() + icon = defs.get(product_type) + if icon is None: + icon = defs.get(product_base_type) + if icon is None: + icon = self._get_default_def() + return icon.copy() + + def _get_default_def(self) -> dict[str, str]: + if self._default_def is None: + self._default_def = { + "type": "material-symbols", + "name": self._default.get("icon", "inventory_2"), + "color": self._default.get("color", "#cccccc"), + } + + return self._default_def + + def _get_defs_by_name(self) -> dict[str, dict[str, str]]: + if self._definitions_by_name is None: + self._definitions_by_name = { + product_base_type_def["name"]: { + "type": "material-symbols", + "name": product_base_type_def.get("icon", "inventory_2"), + "color": product_base_type_def.get("color", "#cccccc"), + } + for product_base_type_def in self._definitions + } + return self._definitions_by_name + + def version_item_from_entity(version): version_attribs = version["attrib"] tags = version["tags"] @@ -84,42 +134,18 @@ def version_item_from_entity(version): def product_item_from_entity( product_entity: ProductDict, version_entities, - product_type_items_by_name: dict[str, ProductTypeItem], - product_base_type_items_by_name: dict[str, ProductBaseTypeItem], folder_label, + icons_mapping, product_in_scene, ): product_attribs = product_entity["attrib"] group = product_attribs.get("productGroup") product_type = product_entity["productType"] - product_type_item = product_type_items_by_name.get(product_type) - # NOTE This is needed for cases when products were not created on server - # using api functions. In that case product type item may not be - # available and we need to create a default. - if product_type_item is None: - product_type_item = create_default_product_type_item(product_type) - # Cache the item for future use - product_type_items_by_name[product_type] = product_type_item - product_base_type = product_entity.get("productBaseType") - product_base_type_item = product_base_type_items_by_name.get( - product_base_type) - # Same as for product type item above. Not sure if this is still needed - # though. - if product_base_type_item is None: - product_base_type_item = create_default_product_base_type_item( - product_base_type) - # Cache the item for future use - product_base_type_items_by_name[product_base_type] = ( - product_base_type_item) - product_type_icon = product_type_item.icon - product_base_type_icon = product_base_type_item.icon - product_icon = { - "type": "awesome-font", - "name": "fa.file-o", - "color": get_default_entity_icon_color(), - } + product_icon = icons_mapping.get_icon( + product_base_type, product_type + ) version_items = { version_entity["id"]: version_item_from_entity(version_entity) for version_entity in version_entities @@ -131,8 +157,6 @@ def product_item_from_entity( product_base_type=product_base_type, product_name=product_entity["name"], product_icon=product_icon, - product_type_icon=product_type_icon, - product_base_type_icon=product_base_type_icon, product_in_scene=product_in_scene, group_name=group, folder_id=product_entity["folderId"], @@ -141,22 +165,8 @@ def product_item_from_entity( ) -def product_type_item_from_data( - product_type_data: ProductDict) -> ProductTypeItem: - # TODO implement icon implementation - # icon = product_type_data["icon"] - # color = product_type_data["color"] - icon = { - "type": "awesome-font", - "name": "fa.folder", - "color": "#0091B2", - } - # TODO implement checked logic - return ProductTypeItem(product_type_data["name"], icon) - - def product_base_type_item_from_data( - product_base_type_data: ProductBaseTypeDict + product_base_type_data: ProductBaseTypeDict ) -> ProductBaseTypeItem: """Create product base type item from data. @@ -174,34 +184,8 @@ def product_base_type_item_from_data( } return ProductBaseTypeItem( name=product_base_type_data["name"], - icon=icon) - - -def create_default_product_type_item(product_type: str) -> ProductTypeItem: - icon = { - "type": "awesome-font", - "name": "fa.folder", - "color": "#0091B2", - } - return ProductTypeItem(product_type, icon) - - -def create_default_product_base_type_item( - product_base_type: str) -> ProductBaseTypeItem: - """Create default product base type item. - - Args: - product_base_type (str): Product base type name. - - Returns: - ProductBaseTypeItem: Default product base type item. - """ - icon = { - "type": "awesome-font", - "name": "fa.folder", - "color": "#0091B2", - } - return ProductBaseTypeItem(product_base_type, icon) + icon=icon + ) class ProductsModel: @@ -227,6 +211,8 @@ class ProductsModel: self._product_folder_ids_mapping = collections.defaultdict(dict) # Cache helpers + self._product_type_icons_mapping = NestedCacheItem( + levels=1, default_factory=list, lifetime=self.lifetime) self._product_type_items_cache = NestedCacheItem( levels=1, default_factory=list, lifetime=self.lifetime) self._product_base_type_items_cache = NestedCacheItem( @@ -243,11 +229,14 @@ class ProductsModel: self._version_item_by_id.clear() self._product_folder_ids_mapping.clear() + self._product_type_icons_mapping.reset() self._product_type_items_cache.reset() self._product_items_cache.reset() self._repre_items_cache.reset() - def get_product_type_items(self, project_name): + def get_product_type_items( + self, project_name: Optional[str] + ) -> list[ProductTypeItem]: """Product type items for project. Args: @@ -255,23 +244,27 @@ class ProductsModel: Returns: list[ProductTypeItem]: Product type items. - """ + """ if not project_name: return [] cache = self._product_type_items_cache[project_name] if not cache.is_valid: + icons_mapping = self._get_product_type_icons(project_name) product_types = ayon_api.get_project_product_types(project_name) cache.update_data([ - product_type_item_from_data(product_type) + ProductTypeItem( + product_type["name"], + icons_mapping.get_icon(product_type=product_type["name"]), + ) for product_type in product_types ]) return cache.get_data() def get_product_base_type_items( - self, - project_name: Optional[str]) -> list[ProductBaseTypeItem]: + self, project_name: Optional[str] + ) -> list[ProductBaseTypeItem]: """Product base type items for the project. Args: @@ -286,6 +279,7 @@ class ProductsModel: cache = self._product_base_type_items_cache[project_name] if not cache.is_valid: + icons_mapping = self._get_product_type_icons(project_name) product_base_types = [] # TODO add temp implementation here when it is actually # implemented and available on server. @@ -294,7 +288,10 @@ class ProductsModel: project_name ) cache.update_data([ - product_base_type_item_from_data(product_base_type) + ProductBaseTypeItem( + product_base_type["name"], + icons_mapping.get_icon(product_base_type["name"]), + ) for product_base_type in product_base_types ]) return cache.get_data() @@ -511,6 +508,27 @@ class ProductsModel: PRODUCTS_MODEL_SENDER ) + def _get_product_type_icons( + self, project_name: Optional[str] + ) -> ProductBaseTypeIconMapping: + cache = self._product_type_icons_mapping[project_name] + if cache.is_valid: + return cache.get_data() + + project_entity = self._controller.get_project_entity(project_name) + icons_mapping = ProductBaseTypeIconMapping() + if project_entity: + product_base_types = ( + project_entity["config"].get("productBaseTypes", {}) + ) + icons_mapping = ProductBaseTypeIconMapping( + product_base_types.get("default"), + product_base_types.get("definitions") + ) + + cache.update_data(icons_mapping) + return icons_mapping + def _get_product_items_by_id(self, project_name, product_ids): product_item_by_id = self._product_item_by_id[project_name] missing_product_ids = set() @@ -553,36 +571,18 @@ class ProductsModel: products: Iterable[ProductDict], versions: Iterable[VersionDict], folder_items=None, - product_type_items=None, - product_base_type_items: Optional[Iterable[ProductBaseTypeItem]] = None ): if folder_items is None: folder_items = self._controller.get_folder_items(project_name) - if product_type_items is None: - product_type_items = self.get_product_type_items(project_name) - - if product_base_type_items is None: - product_base_type_items = self.get_product_base_type_items( - project_name - ) - loaded_product_ids = self._controller.get_loaded_product_ids() versions_by_product_id = collections.defaultdict(list) for version in versions: versions_by_product_id[version["productId"]].append(version) - product_type_items_by_name = { - product_type_item.name: product_type_item - for product_type_item in product_type_items - } - - product_base_type_items_by_name: dict[str, ProductBaseTypeItem] = { - product_base_type_item.name: product_base_type_item - for product_base_type_item in product_base_type_items - } output: dict[str, ProductItem] = {} + icons_mapping = self._get_product_type_icons(project_name) for product in products: product_id = product["id"] folder_id = product["folderId"] @@ -595,9 +595,8 @@ class ProductsModel: product_item = product_item_from_entity( product, versions, - product_type_items_by_name, - product_base_type_items_by_name, folder_item.label, + icons_mapping, product_id in loaded_product_ids, ) output[product_id] = product_item diff --git a/client/ayon_core/tools/loader/ui/products_model.py b/client/ayon_core/tools/loader/ui/products_model.py index f3e5271f51..79ed197d83 100644 --- a/client/ayon_core/tools/loader/ui/products_model.py +++ b/client/ayon_core/tools/loader/ui/products_model.py @@ -17,7 +17,6 @@ PRODUCT_ID_ROLE = QtCore.Qt.UserRole + 6 PRODUCT_NAME_ROLE = QtCore.Qt.UserRole + 7 PRODUCT_TYPE_ROLE = QtCore.Qt.UserRole + 8 PRODUCT_BASE_TYPE_ROLE = QtCore.Qt.UserRole + 9 -PRODUCT_TYPE_ICON_ROLE = QtCore.Qt.UserRole + 10 PRODUCT_IN_SCENE_ROLE = QtCore.Qt.UserRole + 11 VERSION_ID_ROLE = QtCore.Qt.UserRole + 12 VERSION_HERO_ROLE = QtCore.Qt.UserRole + 13 @@ -228,10 +227,7 @@ class ProductsModel(QtGui.QStandardItemModel): return super().data(index, role) if role == QtCore.Qt.DecorationRole: - if col == 1: - role = PRODUCT_TYPE_ICON_ROLE - else: - return None + return None if ( role == VERSION_NAME_EDIT_ROLE @@ -455,7 +451,6 @@ class ProductsModel(QtGui.QStandardItemModel): model_item = QtGui.QStandardItem(product_item.product_name) model_item.setEditable(False) icon = get_qt_icon(product_item.product_icon) - product_type_icon = get_qt_icon(product_item.product_type_icon) model_item.setColumnCount(self.columnCount()) model_item.setData(icon, QtCore.Qt.DecorationRole) model_item.setData(product_id, PRODUCT_ID_ROLE) @@ -464,7 +459,6 @@ class ProductsModel(QtGui.QStandardItemModel): product_item.product_base_type, PRODUCT_BASE_TYPE_ROLE ) model_item.setData(product_item.product_type, PRODUCT_TYPE_ROLE) - model_item.setData(product_type_icon, PRODUCT_TYPE_ICON_ROLE) model_item.setData(product_item.folder_id, FOLDER_ID_ROLE) self._product_items_by_id[product_id] = product_item From d8045df9a7f6d82941f280d4ae9783b58557a7f7 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 12 Sep 2025 18:33:03 +0200 Subject: [PATCH 433/595] use same deafult as backend has --- client/ayon_core/tools/loader/models/products.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/loader/models/products.py b/client/ayon_core/tools/loader/models/products.py index f5e0b2fa80..11468e4db0 100644 --- a/client/ayon_core/tools/loader/models/products.py +++ b/client/ayon_core/tools/loader/models/products.py @@ -58,7 +58,7 @@ class ProductBaseTypeIconMapping: if self._default_def is None: self._default_def = { "type": "material-symbols", - "name": self._default.get("icon", "inventory_2"), + "name": self._default.get("icon", "deployed_code"), "color": self._default.get("color", "#cccccc"), } @@ -69,7 +69,7 @@ class ProductBaseTypeIconMapping: self._definitions_by_name = { product_base_type_def["name"]: { "type": "material-symbols", - "name": product_base_type_def.get("icon", "inventory_2"), + "name": product_base_type_def.get("icon", "deployed_code"), "color": product_base_type_def.get("color", "#cccccc"), } for product_base_type_def in self._definitions From 7b92047a6bea0e10e3e3e8cb34d97129a75d72c7 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 15 Sep 2025 11:38:58 +0200 Subject: [PATCH 434/595] move 'ProductTypeIconMapping' to common project model --- .../ayon_core/tools/common_models/__init__.py | 2 + .../ayon_core/tools/common_models/projects.py | 77 +++++++++++++++++- client/ayon_core/tools/loader/abstract.py | 20 +++-- client/ayon_core/tools/loader/control.py | 13 ++-- .../ayon_core/tools/loader/models/products.py | 78 ++----------------- 5 files changed, 108 insertions(+), 82 deletions(-) diff --git a/client/ayon_core/tools/common_models/__init__.py b/client/ayon_core/tools/common_models/__init__.py index ec69e20b64..77cc2dfb0f 100644 --- a/client/ayon_core/tools/common_models/__init__.py +++ b/client/ayon_core/tools/common_models/__init__.py @@ -10,6 +10,7 @@ from .projects import ( PROJECTS_MODEL_SENDER, FolderTypeItem, TaskTypeItem, + ProductTypeIconMapping, ) from .hierarchy import ( FolderItem, @@ -34,6 +35,7 @@ __all__ = ( "PROJECTS_MODEL_SENDER", "FolderTypeItem", "TaskTypeItem", + "ProductTypeIconMapping", "FolderItem", "TaskItem", diff --git a/client/ayon_core/tools/common_models/projects.py b/client/ayon_core/tools/common_models/projects.py index 034947de3a..710482a871 100644 --- a/client/ayon_core/tools/common_models/projects.py +++ b/client/ayon_core/tools/common_models/projects.py @@ -2,7 +2,7 @@ from __future__ import annotations import contextlib from abc import ABC, abstractmethod -from typing import Dict, Any +from typing import Any, Optional from dataclasses import dataclass import ayon_api @@ -51,7 +51,7 @@ class StatusItem: self.icon: str = icon self.state: str = state - def to_data(self) -> Dict[str, Any]: + def to_data(self) -> dict[str, Any]: return { "name": self.name, "color": self.color, @@ -218,6 +218,54 @@ class ProjectItem: return cls(**data) +class ProductTypeIconMapping: + def __init__( + self, + default: Optional[dict[str, str]] = None, + definitions: Optional[list[dict[str, str]]] = None, + ): + self._default = default or {} + self._definitions = definitions or [] + + self._default_def = None + self._definitions_by_name = None + + def get_icon( + self, + product_base_type: Optional[str] = None, + product_type: Optional[str] = None, + ) -> dict[str, str]: + defs = self._get_defs_by_name() + icon = defs.get(product_type) + if icon is None: + icon = defs.get(product_base_type) + if icon is None: + icon = self._get_default_def() + return icon.copy() + + def _get_default_def(self) -> dict[str, str]: + if self._default_def is None: + self._default_def = { + "type": "material-symbols", + "name": self._default.get("icon", "deployed_code"), + "color": self._default.get("color", "#cccccc"), + } + + return self._default_def + + def _get_defs_by_name(self) -> dict[str, dict[str, str]]: + if self._definitions_by_name is None: + self._definitions_by_name = { + product_base_type_def["name"]: { + "type": "material-symbols", + "name": product_base_type_def.get("icon", "deployed_code"), + "color": product_base_type_def.get("color", "#cccccc"), + } + for product_base_type_def in self._definitions + } + return self._definitions_by_name + + def _get_project_items_from_entitiy( projects: list[dict[str, Any]] ) -> list[ProjectItem]: @@ -242,6 +290,9 @@ class ProjectsModel(object): self._projects_by_name = NestedCacheItem( levels=1, default_factory=list ) + self._product_type_icons_mapping = NestedCacheItem( + levels=1, default_factory=ProductTypeIconMapping + ) self._project_statuses_cache = {} self._folder_types_cache = {} self._task_types_cache = {} @@ -255,6 +306,7 @@ class ProjectsModel(object): self._task_types_cache = {} self._projects_cache.reset() self._projects_by_name.reset() + self._product_type_icons_mapping.reset() def refresh(self): """Refresh project items. @@ -390,6 +442,27 @@ class ProjectsModel(object): self._task_type_items_getter, ) + def get_product_type_icons_mapping( + self, project_name: Optional[str] + ) -> ProductTypeIconMapping: + cache = self._product_type_icons_mapping[project_name] + if cache.is_valid: + return cache.get_data() + + project_entity = self.get_project_entity(project_name) + icons_mapping = ProductTypeIconMapping() + if project_entity: + product_base_types = ( + project_entity["config"].get("productBaseTypes", {}) + ) + icons_mapping = ProductTypeIconMapping( + product_base_types.get("default"), + product_base_types.get("definitions") + ) + + cache.update_data(icons_mapping) + return icons_mapping + def _get_project_items( self, project_name, sender, item_type, cache_obj, getter ): diff --git a/client/ayon_core/tools/loader/abstract.py b/client/ayon_core/tools/loader/abstract.py index 87cfb1f3f2..9c7934d2db 100644 --- a/client/ayon_core/tools/loader/abstract.py +++ b/client/ayon_core/tools/loader/abstract.py @@ -9,7 +9,11 @@ from ayon_core.lib.attribute_definitions import ( deserialize_attr_defs, serialize_attr_defs, ) -from ayon_core.tools.common_models import TaskItem, TagItem +from ayon_core.tools.common_models import ( + TaskItem, + TagItem, + ProductTypeIconMapping, +) class ProductTypeItem: @@ -492,8 +496,8 @@ class BackendLoaderController(_BaseLoaderController): topic (str): Event topic name. data (Optional[dict[str, Any]]): Event data. source (Optional[str]): Event source. - """ + """ pass @abstractmethod @@ -502,14 +506,20 @@ class BackendLoaderController(_BaseLoaderController): Returns: set[str]: Set of loaded product ids. - """ + """ pass @abstractmethod - def get_project_entity( + def get_product_type_icons_mapping( self, project_name: Optional[str] - ) -> Optional[dict[str, Any]]: + ) -> ProductTypeIconMapping: + """Product type icons mapping. + + Returns: + ProductTypeIconMapping: Product type icons mapping. + + """ pass diff --git a/client/ayon_core/tools/loader/control.py b/client/ayon_core/tools/loader/control.py index 492a05e82f..c7c182b192 100644 --- a/client/ayon_core/tools/loader/control.py +++ b/client/ayon_core/tools/loader/control.py @@ -17,6 +17,7 @@ from ayon_core.tools.common_models import ( HierarchyModel, ThumbnailsModel, TagItem, + ProductTypeIconMapping, ) from .abstract import ( @@ -189,11 +190,6 @@ class LoaderController(BackendLoaderController, FrontendLoaderController): def get_project_items(self, sender=None): return self._projects_model.get_project_items(sender) - def get_project_entity( - self, project_name: Optional[str] - ) -> Optional[dict[str, Any]]: - return self._projects_model.get_project_entity(project_name) - def get_folder_type_items(self, project_name, sender=None): return self._projects_model.get_folder_type_items( project_name, sender @@ -204,6 +200,13 @@ class LoaderController(BackendLoaderController, FrontendLoaderController): project_name, sender ) + def get_product_type_icons_mapping( + self, project_name: Optional[str] + ) -> ProductTypeIconMapping: + return self._projects_model.get_product_type_icons_mapping( + project_name + ) + def get_folder_items(self, project_name, sender=None): return self._hierarchy_model.get_folder_items(project_name, sender) diff --git a/client/ayon_core/tools/loader/models/products.py b/client/ayon_core/tools/loader/models/products.py index 11468e4db0..7915a75bcf 100644 --- a/client/ayon_core/tools/loader/models/products.py +++ b/client/ayon_core/tools/loader/models/products.py @@ -11,6 +11,7 @@ from ayon_api.operations import OperationsSession from ayon_core.lib import NestedCacheItem from ayon_core.style import get_default_entity_icon_color +from ayon_core.tools.common_models import ProductTypeIconMapping from ayon_core.tools.loader.abstract import ( ProductTypeItem, ProductBaseTypeItem, @@ -29,54 +30,6 @@ if TYPE_CHECKING: PRODUCTS_MODEL_SENDER = "products.model" -class ProductBaseTypeIconMapping: - def __init__( - self, - default: Optional[dict[str, str]] = None, - definitions: Optional[list[dict[str, str]]] = None, - ): - self._default = default or {} - self._definitions = definitions or [] - - self._default_def = None - self._definitions_by_name = None - - def get_icon( - self, - product_base_type: Optional[str] = None, - product_type: Optional[str] = None, - ) -> dict[str, str]: - defs = self._get_defs_by_name() - icon = defs.get(product_type) - if icon is None: - icon = defs.get(product_base_type) - if icon is None: - icon = self._get_default_def() - return icon.copy() - - def _get_default_def(self) -> dict[str, str]: - if self._default_def is None: - self._default_def = { - "type": "material-symbols", - "name": self._default.get("icon", "deployed_code"), - "color": self._default.get("color", "#cccccc"), - } - - return self._default_def - - def _get_defs_by_name(self) -> dict[str, dict[str, str]]: - if self._definitions_by_name is None: - self._definitions_by_name = { - product_base_type_def["name"]: { - "type": "material-symbols", - "name": product_base_type_def.get("icon", "deployed_code"), - "color": product_base_type_def.get("color", "#cccccc"), - } - for product_base_type_def in self._definitions - } - return self._definitions_by_name - - def version_item_from_entity(version): version_attribs = version["attrib"] tags = version["tags"] @@ -211,8 +164,6 @@ class ProductsModel: self._product_folder_ids_mapping = collections.defaultdict(dict) # Cache helpers - self._product_type_icons_mapping = NestedCacheItem( - levels=1, default_factory=list, lifetime=self.lifetime) self._product_type_items_cache = NestedCacheItem( levels=1, default_factory=list, lifetime=self.lifetime) self._product_base_type_items_cache = NestedCacheItem( @@ -229,7 +180,6 @@ class ProductsModel: self._version_item_by_id.clear() self._product_folder_ids_mapping.clear() - self._product_type_icons_mapping.reset() self._product_type_items_cache.reset() self._product_items_cache.reset() self._repre_items_cache.reset() @@ -267,6 +217,10 @@ class ProductsModel: ) -> list[ProductBaseTypeItem]: """Product base type items for the project. + Notes: + This will be used for filtering product types in UI when + product base types are fully implemented. + Args: project_name (optional, str): Project name. @@ -510,24 +464,8 @@ class ProductsModel: def _get_product_type_icons( self, project_name: Optional[str] - ) -> ProductBaseTypeIconMapping: - cache = self._product_type_icons_mapping[project_name] - if cache.is_valid: - return cache.get_data() - - project_entity = self._controller.get_project_entity(project_name) - icons_mapping = ProductBaseTypeIconMapping() - if project_entity: - product_base_types = ( - project_entity["config"].get("productBaseTypes", {}) - ) - icons_mapping = ProductBaseTypeIconMapping( - product_base_types.get("default"), - product_base_types.get("definitions") - ) - - cache.update_data(icons_mapping) - return icons_mapping + ) -> ProductTypeIconMapping: + return self._controller.get_product_type_icons_mapping(project_name) def _get_product_items_by_id(self, project_name, product_ids): product_item_by_id = self._product_item_by_id[project_name] @@ -542,7 +480,7 @@ class ProductsModel: output.update( self._query_product_items_by_ids( - project_name, missing_product_ids + project_name, product_ids=missing_product_ids ) ) return output From cf874e8f0a274b8a38ff8221d7f3d1a567095286 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 15 Sep 2025 11:46:28 +0200 Subject: [PATCH 435/595] use product type icon in scene inventory --- .../ayon_core/tools/sceneinventory/control.py | 15 ++++++++++- .../ayon_core/tools/sceneinventory/model.py | 5 +--- .../tools/sceneinventory/models/containers.py | 25 ++++++++++++++++++- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/tools/sceneinventory/control.py b/client/ayon_core/tools/sceneinventory/control.py index 45f76a54ac..606c9e7298 100644 --- a/client/ayon_core/tools/sceneinventory/control.py +++ b/client/ayon_core/tools/sceneinventory/control.py @@ -1,3 +1,5 @@ +from typing import Optional + import ayon_api from ayon_core.lib.events import QueuedEventSystem @@ -6,7 +8,11 @@ from ayon_core.pipeline import ( registered_host, get_current_context, ) -from ayon_core.tools.common_models import HierarchyModel, ProjectsModel +from ayon_core.tools.common_models import ( + HierarchyModel, + ProjectsModel, + ProductTypeIconMapping, +) from .models import SiteSyncModel, ContainersModel @@ -93,6 +99,13 @@ class SceneInventoryController: project_name, None ) + def get_product_type_icons_mapping( + self, project_name: Optional[str] + ) -> ProductTypeIconMapping: + return self._projects_model.get_product_type_icons_mapping( + project_name + ) + # Containers methods def get_containers(self): return self._containers_model.get_containers() diff --git a/client/ayon_core/tools/sceneinventory/model.py b/client/ayon_core/tools/sceneinventory/model.py index 885553acaf..9977acea21 100644 --- a/client/ayon_core/tools/sceneinventory/model.py +++ b/client/ayon_core/tools/sceneinventory/model.py @@ -214,9 +214,6 @@ class InventoryModel(QtGui.QStandardItemModel): group_icon = qtawesome.icon( "fa.object-group", color=self._default_icon_color ) - product_type_icon = qtawesome.icon( - "fa.folder", color="#0091B2" - ) group_item_font = QtGui.QFont() group_item_font.setBold(True) @@ -303,7 +300,7 @@ class InventoryModel(QtGui.QStandardItemModel): remote_site_progress = "{}%".format( max(progress["remote_site"], 0) * 100 ) - + product_type_icon = get_qt_icon(repre_info.product_type_icon) group_item = QtGui.QStandardItem() group_item.setColumnCount(root_item.columnCount()) group_item.setData(group_name, QtCore.Qt.DisplayRole) diff --git a/client/ayon_core/tools/sceneinventory/models/containers.py b/client/ayon_core/tools/sceneinventory/models/containers.py index f841f87c8e..47f74476de 100644 --- a/client/ayon_core/tools/sceneinventory/models/containers.py +++ b/client/ayon_core/tools/sceneinventory/models/containers.py @@ -126,6 +126,7 @@ class RepresentationInfo: product_id, product_name, product_type, + product_type_icon, product_group, version_id, representation_name, @@ -135,6 +136,7 @@ class RepresentationInfo: self.product_id = product_id self.product_name = product_name self.product_type = product_type + self.product_type_icon = product_type_icon self.product_group = product_group self.version_id = version_id self.representation_name = representation_name @@ -153,7 +155,17 @@ class RepresentationInfo: @classmethod def new_invalid(cls): - return cls(None, None, None, None, None, None, None, None) + return cls( + None, + None, + None, + None, + None, + None, + None, + None, + None, + ) class VersionItem: @@ -229,6 +241,9 @@ class ContainersModel: def get_representation_info_items(self, project_name, representation_ids): output = {} missing_repre_ids = set() + icons_mapping = self._controller.get_product_type_icons_mapping( + project_name + ) for repre_id in representation_ids: try: uuid.UUID(repre_id) @@ -253,6 +268,7 @@ class ContainersModel: "product_id": None, "product_name": None, "product_type": None, + "product_type_icon": None, "product_group": None, "version_id": None, "representation_name": None, @@ -265,10 +281,17 @@ class ContainersModel: kwargs["folder_id"] = folder["id"] kwargs["folder_path"] = folder["path"] if product: + product_type = product["productType"] + product_base_type = product.get("productBaseType") + icon = icons_mapping.get_icon( + product_base_type=product_base_type, + product_type=product_type, + ) group = product["attrib"]["productGroup"] kwargs["product_id"] = product["id"] kwargs["product_name"] = product["name"] kwargs["product_type"] = product["productType"] + kwargs["product_type_icon"] = icon kwargs["product_group"] = group if version: kwargs["version_id"] = version["id"] From 31469bfd9a0b7d29b88ce9162cfb297fc1c4aef5 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 15 Sep 2025 11:52:37 +0200 Subject: [PATCH 436/595] remove unused import --- client/ayon_core/tools/loader/control.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/loader/control.py b/client/ayon_core/tools/loader/control.py index c7c182b192..9f159bfb21 100644 --- a/client/ayon_core/tools/loader/control.py +++ b/client/ayon_core/tools/loader/control.py @@ -2,7 +2,7 @@ from __future__ import annotations import logging import uuid -from typing import Optional, Any +from typing import Optional import ayon_api From 7082905e5e25524c16d0bd5a7376eb010d025975 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 15 Sep 2025 12:04:45 +0200 Subject: [PATCH 437/595] use icon color from project anatomy for tasks --- client/ayon_core/tools/common_models/projects.py | 15 ++++++++++++--- client/ayon_core/tools/utils/tasks_widget.py | 3 ++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/tools/common_models/projects.py b/client/ayon_core/tools/common_models/projects.py index 034947de3a..7a5620b033 100644 --- a/client/ayon_core/tools/common_models/projects.py +++ b/client/ayon_core/tools/common_models/projects.py @@ -2,7 +2,7 @@ from __future__ import annotations import contextlib from abc import ABC, abstractmethod -from typing import Dict, Any +from typing import Any, Optional from dataclasses import dataclass import ayon_api @@ -51,7 +51,7 @@ class StatusItem: self.icon: str = icon self.state: str = state - def to_data(self) -> Dict[str, Any]: + def to_data(self) -> dict[str, Any]: return { "name": self.name, "color": self.color, @@ -125,16 +125,24 @@ class TaskTypeItem: icon (str): Icon name in MaterialIcons ("fiber_new"). """ - def __init__(self, name, short, icon): + def __init__( + self, + name: str, + short: str, + icon: str, + color: Optional[str], + ): self.name = name self.short = short self.icon = icon + self.color = color def to_data(self): return { "name": self.name, "short": self.short, "icon": self.icon, + "color": self.color, } @classmethod @@ -147,6 +155,7 @@ class TaskTypeItem: name=task_type_data["name"], short=task_type_data["shortName"], icon=task_type_data["icon"], + color=task_type_data.get("color"), ) diff --git a/client/ayon_core/tools/utils/tasks_widget.py b/client/ayon_core/tools/utils/tasks_widget.py index 744eb6060a..d77ce1e1f4 100644 --- a/client/ayon_core/tools/utils/tasks_widget.py +++ b/client/ayon_core/tools/utils/tasks_widget.py @@ -234,10 +234,11 @@ class TasksQtModel(QtGui.QStandardItemModel): ) icon = None if task_type_item is not None: + color = task_type_item.color or get_default_entity_icon_color() icon = get_qt_icon({ "type": "material-symbols", "name": task_type_item.icon, - "color": get_default_entity_icon_color() + "color": color, }) if icon is None: From 8979fc7608b81db11740738c17c6f581ae1dca1e Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 15 Sep 2025 13:54:22 +0200 Subject: [PATCH 438/595] elite status name --- client/ayon_core/tools/utils/delegates.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/utils/delegates.py b/client/ayon_core/tools/utils/delegates.py index 1cc18b5722..059fc1da0e 100644 --- a/client/ayon_core/tools/utils/delegates.py +++ b/client/ayon_core/tools/utils/delegates.py @@ -186,8 +186,15 @@ class StatusDelegate(QtWidgets.QStyledItemDelegate): ) fm = QtGui.QFontMetrics(option.font) if text_rect.width() < fm.width(text): - text = self._get_status_short_name(index) - if text_rect.width() < fm.width(text): + short_text = self._get_status_short_name(index) + if short_text: + text = short_text + + text = fm.elidedText( + text, QtCore.Qt.ElideRight, text_rect.width() + ) + # Allow at least one character + if len(text) < 2: text = "" fg_color = self._get_status_color(index) From 00603d05a4014c1871e742d8dee5c12dae1f7166 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 15 Sep 2025 15:17:27 +0200 Subject: [PATCH 439/595] fill task type color in publisher's tasks enum --- .../tools/publisher/widgets/tasks_model.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/tasks_model.py b/client/ayon_core/tools/publisher/widgets/tasks_model.py index 8bfa81116a..1803e46c5f 100644 --- a/client/ayon_core/tools/publisher/widgets/tasks_model.py +++ b/client/ayon_core/tools/publisher/widgets/tasks_model.py @@ -146,19 +146,19 @@ class TasksModel(QtGui.QStandardItemModel): self._controller.get_current_project_name() ) } - icon_name_by_task_name = {} + type_item_by_task_name = {} for task_items in task_items_by_folder_path.values(): for task_item in task_items: task_name = task_item.name if ( task_name not in new_task_names - or task_name in icon_name_by_task_name + or task_name in type_item_by_task_name ): continue task_type_name = task_item.task_type task_type_item = task_type_items.get(task_type_name) if task_type_item: - icon_name_by_task_name[task_name] = task_type_item.icon + type_item_by_task_name[task_name] = task_type_item for task_name in new_task_names: item = self._items_by_name.get(task_name) @@ -171,13 +171,18 @@ class TasksModel(QtGui.QStandardItemModel): if not task_name: continue - icon_name = icon_name_by_task_name.get(task_name) - icon = None + icon = icon_name = icon_color = None + task_type_item = type_item_by_task_name.get(task_name) + if task_type_item is not None: + icon_name = task_type_item.icon + icon_color = task_type_item.color if icon_name: + if not icon_color: + icon_color = get_default_entity_icon_color() icon = get_qt_icon({ "type": "material-symbols", "name": icon_name, - "color": get_default_entity_icon_color(), + "color": icon_color, }) if icon is None: icon = default_icon From 216c06437fe2ea50d58a56f5d917f6d962818f28 Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Mon, 15 Sep 2025 19:20:10 +0300 Subject: [PATCH 440/595] MK Docs: Update light/dark modes icons --- mkdocs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 8e4c2663bc..a3b89b5455 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -11,12 +11,12 @@ theme: - media: "(prefers-color-scheme: dark)" scheme: slate toggle: - icon: material/toggle-switch-off-outline + icon: material/weather-sunny name: Switch to light mode - media: "(prefers-color-scheme: light)" scheme: default toggle: - icon: material/toggle-switch + icon: material/weather-night name: Switch to dark mode logo: img/ay-symbol-blackw-full.png favicon: img/favicon.ico From 99c50c3a14a96a5b227a1f27c17191ce8ade0d73 Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Tue, 16 Sep 2025 11:54:01 +0300 Subject: [PATCH 441/595] move mkdocs_requirements to root location. --- docs/mkdocs_requirements.txt => mkdocs_requirements.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/mkdocs_requirements.txt => mkdocs_requirements.txt (100%) diff --git a/docs/mkdocs_requirements.txt b/mkdocs_requirements.txt similarity index 100% rename from docs/mkdocs_requirements.txt rename to mkdocs_requirements.txt From eaa6727a9d0ae5289961b5b46d9fdf9245e6c93a Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Tue, 16 Sep 2025 11:56:00 +0300 Subject: [PATCH 442/595] CI: Re-use `deploy_mkdocs` from ynput/ops-repo-automation --- .github/workflows/deploy_mkdocs.yml | 69 ++++------------------------- 1 file changed, 8 insertions(+), 61 deletions(-) diff --git a/.github/workflows/deploy_mkdocs.yml b/.github/workflows/deploy_mkdocs.yml index 2f46bdc6ad..1e02643a3d 100644 --- a/.github/workflows/deploy_mkdocs.yml +++ b/.github/workflows/deploy_mkdocs.yml @@ -1,70 +1,17 @@ name: Deploy MkDocs on: - pull_request: + push: + tags: + - "*" workflow_dispatch: - workflow_call: - inputs: - repo: - type: string - required: true - branch_name: - type: string - required: true - default: "main" - secrets: - token: - required: true - user: - required: true - email: - required: true - -env: - GH_TOKEN: ${{ secrets.token || secrets.YNPUT_BOT_TOKEN }} - GH_USER: ${{ secrets.user || secrets.CI_USER }} - GH_EMAIL: ${{ secrets.email || secrets.CI_EMAIL }} jobs: - verify-repo-secrets: - uses: ynput/ops-repo-automation/.github/workflows/verify_secrets.yml@main + build-mk-docs: + uses: ynput/ops-repo-automation/.github/workflows/deploy_mkdocs.yml@feature/34-add-mk-docs-reusable-workflow with: repo: ${{ github.repository }} secrets: - gh_token: ${{ secrets.token }} - gh_user: ${{ secrets.user }} - gh_email: ${{ secrets.email }} - - deploy: - runs-on: ubuntu-latest - - steps: - - name: Checkout ${{ inputs.branch_name}} - uses: actions/checkout@v4 - with: - ref: ${{ inputs.branch_name}} - fetch-depth: 0 - submodules: true - - - name: 🔑 Set Authentication - run: | - git config --global user.name "${{ secrets.user || secrets.CI_USER }}" - git config --global user.email "${{ secrets.email || secrets.CI_EMAIL }}" - - - name: Get current tag - id: git_tag - uses: devops-actions/action-get-tag@v1.0.3 - with: - default: 1.0.0 - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: "3.x" - - - name: Install dependencies - run: | - python3 -m pip install -r ./docs/mkdocs_requirements.txt - - - name: Mike deploy ${{ steps.git_tag.outputs.tag }} - run: mike deploy --update-aliases ${{ steps.git_tag.outputs.tag }} latest + YNPUT_BOT_TOKEN: ${{ secrets.YNPUT_BOT_TOKEN }} + CI_USER: ${{ secrets.CI_USER }} + CI_EMAIL: ${{ secrets.CI_EMAIL }} From a46a9e3143998c93d04824d3aa795e8f53b580d8 Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Tue, 16 Sep 2025 13:04:54 +0300 Subject: [PATCH 443/595] CI: Update Deploy MkDocs to use action from develop branch from ynput/ops-repo-automation --- .github/workflows/deploy_mkdocs.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy_mkdocs.yml b/.github/workflows/deploy_mkdocs.yml index 1e02643a3d..deafc7b850 100644 --- a/.github/workflows/deploy_mkdocs.yml +++ b/.github/workflows/deploy_mkdocs.yml @@ -8,7 +8,8 @@ on: jobs: build-mk-docs: - uses: ynput/ops-repo-automation/.github/workflows/deploy_mkdocs.yml@feature/34-add-mk-docs-reusable-workflow + # FIXME: Update @develop to @main after `ops-repo-automation` release. + uses: ynput/ops-repo-automation/.github/workflows/deploy_mkdocs.yml@develop with: repo: ${{ github.repository }} secrets: From e9e9461415e21c4e87729df3a45d011c408179f2 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 16 Sep 2025 12:36:51 +0200 Subject: [PATCH 444/595] allow explicit workfile path to be defined --- .../hooks/pre_add_last_workfile_arg.py | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/client/ayon_core/hooks/pre_add_last_workfile_arg.py b/client/ayon_core/hooks/pre_add_last_workfile_arg.py index c6afaaa083..752302bb20 100644 --- a/client/ayon_core/hooks/pre_add_last_workfile_arg.py +++ b/client/ayon_core/hooks/pre_add_last_workfile_arg.py @@ -38,18 +38,20 @@ class AddLastWorkfileToLaunchArgs(PreLaunchHook): launch_types = {LaunchTypes.local} def execute(self): - if not self.data.get("start_last_workfile"): - self.log.info("It is set to not start last workfile on start.") - return + workfile_path = self.data.get("workfile_path") + if not workfile_path: + if not self.data.get("start_last_workfile"): + self.log.info("It is set to not start last workfile on start.") + return - last_workfile = self.data.get("last_workfile_path") - if not last_workfile: - self.log.warning("Last workfile was not collected.") - return + workfile_path = self.data.get("last_workfile_path") + if not workfile_path: + self.log.warning("Last workfile was not collected.") + return - if not os.path.exists(last_workfile): + if not os.path.exists(workfile_path): self.log.info("Current context does not have any workfile yet.") return # Add path to workfile to arguments - self.launch_context.launch_args.append(last_workfile) + self.launch_context.launch_args.append(workfile_path) From 12bf78b3cb20fb35eb4d1c61441896d13dd994d0 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 16 Sep 2025 13:45:35 +0200 Subject: [PATCH 445/595] added workfile selection and actions --- client/ayon_core/pipeline/actions.py | 43 +++++++++++++++ client/ayon_core/tools/launcher/abstract.py | 50 +++++++++++------ client/ayon_core/tools/launcher/control.py | 12 +++- .../tools/launcher/models/actions.py | 55 +++++++++++++++---- .../tools/launcher/models/selection.py | 51 ++++++++++++++--- .../tools/launcher/models/workfiles.py | 5 +- .../tools/launcher/ui/actions_widget.py | 43 +++++++++++---- .../tools/launcher/ui/workfiles_page.py | 13 ++++- 8 files changed, 218 insertions(+), 54 deletions(-) diff --git a/client/ayon_core/pipeline/actions.py b/client/ayon_core/pipeline/actions.py index 860fed5e8b..6892af4252 100644 --- a/client/ayon_core/pipeline/actions.py +++ b/client/ayon_core/pipeline/actions.py @@ -37,16 +37,19 @@ class LauncherActionSelection: project_name, folder_id, task_id, + workfile_id, folder_path=None, task_name=None, project_entity=None, folder_entity=None, task_entity=None, + workfile_entity=None, project_settings=None, ): self._project_name = project_name self._folder_id = folder_id self._task_id = task_id + self._workfile_id = workfile_id self._folder_path = folder_path self._task_name = task_name @@ -54,6 +57,7 @@ class LauncherActionSelection: self._project_entity = project_entity self._folder_entity = folder_entity self._task_entity = task_entity + self._workfile_entity = workfile_entity self._project_settings = project_settings @@ -213,6 +217,15 @@ class LauncherActionSelection: self._task_name = self.task_entity["name"] return self._task_name + def get_workfile_id(self): + """Selected workfile id. + + Returns: + Union[str, None]: Selected workfile id. + + """ + return self._workfile_id + def get_project_entity(self): """Project entity for the selection. @@ -259,6 +272,24 @@ class LauncherActionSelection: ) return self._task_entity + def get_workfile_entity(self): + """Workfile entity for the selection. + + Returns: + Union[dict[str, Any], None]: Workfile entity. + + """ + if ( + self._project_name is None + or self._workfile_id is None + ): + return None + if self._workfile_entity is None: + self._workfile_entity = ayon_api.get_workfile_info_by_id( + self._project_name, self._workfile_id + ) + return self._workfile_entity + def get_project_settings(self): """Project settings for the selection. @@ -305,15 +336,27 @@ class LauncherActionSelection: """ return self._task_id is not None + @property + def is_workfile_selected(self): + """Return whether a task is selected. + + Returns: + bool: Whether a task is selected. + + """ + return self._workfile_id is not None + project_name = property(get_project_name) folder_id = property(get_folder_id) task_id = property(get_task_id) + workfile_id = property(get_workfile_id) folder_path = property(get_folder_path) task_name = property(get_task_name) project_entity = property(get_project_entity) folder_entity = property(get_folder_entity) task_entity = property(get_task_entity) + workfile_entity = property(get_workfile_entity) class LauncherAction(object): diff --git a/client/ayon_core/tools/launcher/abstract.py b/client/ayon_core/tools/launcher/abstract.py index f312504d31..a94500116b 100644 --- a/client/ayon_core/tools/launcher/abstract.py +++ b/client/ayon_core/tools/launcher/abstract.py @@ -21,6 +21,7 @@ class WebactionContext: project_name: str folder_id: str task_id: str + workfile_id: str addon_name: str addon_version: str @@ -34,7 +35,7 @@ class ActionItem: identifier (str): Unique identifier of action item. order (int): Action ordering. label (str): Action label. - variant_label (Union[str, None]): Variant label, full label is + variant_label (Optional[str]): Variant label, full label is concatenated with space. Actions are grouped under single action if it has same 'label' and have set 'variant_label'. full_label (str): Full label, if not set it is generated @@ -59,6 +60,7 @@ class ActionItem: @dataclass class WorkfileItem: + workfile_id: str filename: str exists: bool icon: Optional[str] @@ -103,7 +105,7 @@ class AbstractLauncherBackend(AbstractLauncherCommon): """Project settings for current project. Args: - project_name (Union[str, None]): Project name. + project_name (Optional[str]): Project name. Returns: dict[str, Any]: Project settings. @@ -267,7 +269,7 @@ class AbstractLauncherFrontEnd(AbstractLauncherCommon): """Selected project name. Returns: - Union[str, None]: Selected project name. + Optional[str]: Selected project name. """ pass @@ -277,7 +279,7 @@ class AbstractLauncherFrontEnd(AbstractLauncherCommon): """Selected folder id. Returns: - Union[str, None]: Selected folder id. + Optional[str]: Selected folder id. """ pass @@ -287,7 +289,7 @@ class AbstractLauncherFrontEnd(AbstractLauncherCommon): """Selected task id. Returns: - Union[str, None]: Selected task id. + Optional[str]: Selected task id. """ pass @@ -297,7 +299,7 @@ class AbstractLauncherFrontEnd(AbstractLauncherCommon): """Selected task name. Returns: - Union[str, None]: Selected task name. + Optional[str]: Selected task name. """ pass @@ -315,7 +317,7 @@ class AbstractLauncherFrontEnd(AbstractLauncherCommon): } Returns: - dict[str, Union[str, None]]: Selected context. + dict[str, Optional[str]]: Selected context. """ pass @@ -325,7 +327,7 @@ class AbstractLauncherFrontEnd(AbstractLauncherCommon): """Change selected folder. Args: - project_name (Union[str, None]): Project nameor None if no project + project_name (Optional[str]): Project nameor None if no project is selected. """ @@ -336,7 +338,7 @@ class AbstractLauncherFrontEnd(AbstractLauncherCommon): """Change selected folder. Args: - folder_id (Union[str, None]): Folder id or None if no folder + folder_id (Optional[str]): Folder id or None if no folder is selected. """ @@ -349,14 +351,24 @@ class AbstractLauncherFrontEnd(AbstractLauncherCommon): """Change selected task. Args: - task_id (Union[str, None]): Task id or None if no task + task_id (Optional[str]): Task id or None if no task is selected. - task_name (Union[str, None]): Task name or None if no task + task_name (Optional[str]): Task name or None if no task is selected. """ pass + @abstractmethod + def set_selected_workfile(self, workfile_id: Optional[str]): + """Change selected workfile. + + Args: + workfile_id (Optional[str]): Workfile id or None. + + """ + pass + # Actions @abstractmethod def get_action_items( @@ -364,13 +376,15 @@ class AbstractLauncherFrontEnd(AbstractLauncherCommon): project_name: Optional[str], folder_id: Optional[str], task_id: Optional[str], + workfile_id: Optional[str], ) -> list[ActionItem]: """Get action items for given context. Args: - project_name (Union[str, None]): Project name. - folder_id (Union[str, None]): Folder id. - task_id (Union[str, None]): Task id. + project_name (Optional[str]): Project name. + folder_id (Optional[str]): Folder id. + task_id (Optional[str]): Task id. + workfile_id (Optional[str]): Workfile id. Returns: list[ActionItem]: List of action items that should be shown @@ -386,14 +400,16 @@ class AbstractLauncherFrontEnd(AbstractLauncherCommon): project_name: Optional[str], folder_id: Optional[str], task_id: Optional[str], + workfile_id: Optional[str], ): """Trigger action on given context. Args: action_id (str): Action identifier. - project_name (Union[str, None]): Project name. - folder_id (Union[str, None]): Folder id. - task_id (Union[str, None]): Task id. + project_name (Optional[str]): Project name. + folder_id (Optional[str]): Folder id. + task_id (Optional[str]): Task id. + workfile_id (Optional[str]): Task id. """ pass diff --git a/client/ayon_core/tools/launcher/control.py b/client/ayon_core/tools/launcher/control.py index 66afebc247..85b362f9d7 100644 --- a/client/ayon_core/tools/launcher/control.py +++ b/client/ayon_core/tools/launcher/control.py @@ -144,6 +144,9 @@ class BaseLauncherController( def set_selected_task(self, task_id, task_name): self._selection_model.set_selected_task(task_id, task_name) + def set_selected_workfile(self, workfile_id): + self._selection_model.set_selected_workfile(workfile_id) + def get_selected_context(self): return { "project_name": self.get_selected_project_name(), @@ -164,9 +167,12 @@ class BaseLauncherController( ) # Actions - def get_action_items(self, project_name, folder_id, task_id): + def get_action_items( + self, project_name, folder_id, task_id, workfile_id + ): return self._actions_model.get_action_items( - project_name, folder_id, task_id) + project_name, folder_id, task_id, workfile_id + ) def trigger_action( self, @@ -174,12 +180,14 @@ class BaseLauncherController( project_name, folder_id, task_id, + workfile_id, ): self._actions_model.trigger_action( identifier, project_name, folder_id, task_id, + workfile_id, ) def trigger_webaction(self, context, action_label, form_data=None): diff --git a/client/ayon_core/tools/launcher/models/actions.py b/client/ayon_core/tools/launcher/models/actions.py index 5f888effb5..709ae2e9a8 100644 --- a/client/ayon_core/tools/launcher/models/actions.py +++ b/client/ayon_core/tools/launcher/models/actions.py @@ -128,19 +128,28 @@ class ActionsModel: self._get_action_objects() self._controller.emit_event("actions.refresh.finished") - def get_action_items(self, project_name, folder_id, task_id): + def get_action_items( + self, + project_name: Optional[str], + folder_id: Optional[str], + task_id: Optional[str], + workfile_id: Optional[str], + ) -> list[ActionItem]: """Get actions for project. Args: - project_name (Union[str, None]): Project name. - folder_id (Union[str, None]): Folder id. - task_id (Union[str, None]): Task id. + project_name (Optional[str]): Project name. + folder_id (Optional[str]): Folder id. + task_id (Optional[str]): Task id. + workfile_id (Optional[str]): Workfile id. Returns: list[ActionItem]: List of actions. """ - selection = self._prepare_selection(project_name, folder_id, task_id) + selection = self._prepare_selection( + project_name, folder_id, task_id, workfile_id + ) output = [] action_items = self._get_action_items(project_name) for identifier, action in self._get_action_objects().items(): @@ -156,8 +165,11 @@ class ActionsModel: project_name, folder_id, task_id, + workfile_id, ): - selection = self._prepare_selection(project_name, folder_id, task_id) + selection = self._prepare_selection( + project_name, folder_id, task_id, workfile_id + ) failed = False error_message = None action_label = identifier @@ -199,11 +211,15 @@ class ActionsModel: identifier = context.identifier folder_id = context.folder_id task_id = context.task_id + workfile_id = context.workfile_id project_name = context.project_name addon_name = context.addon_name addon_version = context.addon_version - if task_id: + if workfile_id: + entity_type = "workfile" + entity_ids.append(workfile_id) + elif task_id: entity_type = "task" entity_ids.append(task_id) elif folder_id: @@ -269,6 +285,7 @@ class ActionsModel: "project_name": project_name, "folder_id": folder_id, "task_id": task_id, + "workfile_id": workfile_id, "addon_name": addon_name, "addon_version": addon_version, }) @@ -279,7 +296,10 @@ class ActionsModel: def get_action_config_values(self, context: WebactionContext): selection = self._prepare_selection( - context.project_name, context.folder_id, context.task_id + context.project_name, + context.folder_id, + context.task_id, + context.workfile_id, ) if not selection.is_project_selected: return {} @@ -306,7 +326,10 @@ class ActionsModel: def set_action_config_values(self, context, values): selection = self._prepare_selection( - context.project_name, context.folder_id, context.task_id + context.project_name, + context.folder_id, + context.task_id, + context.workfile_id, ) if not selection.is_project_selected: return {} @@ -330,7 +353,9 @@ class ActionsModel: exc_info=True ) - def _prepare_selection(self, project_name, folder_id, task_id): + def _prepare_selection( + self, project_name, folder_id, task_id, workfile_id + ): project_entity = None if project_name: project_entity = self._controller.get_project_entity(project_name) @@ -339,6 +364,7 @@ class ActionsModel: project_name, folder_id, task_id, + workfile_id, project_entity=project_entity, project_settings=project_settings, ) @@ -347,7 +373,12 @@ class ActionsModel: entity_type = None entity_id = None entity_subtypes = [] - if selection.is_task_selected: + if selection.is_workfile_selected: + entity_type = "workfile" + entity_id = selection.workfile_id + entity_subtypes = [] + + elif selection.is_task_selected: entity_type = "task" entity_id = selection.task_entity["id"] entity_subtypes = [selection.task_entity["taskType"]] @@ -392,7 +423,7 @@ class ActionsModel: try: # 'variant' query is supported since AYON backend 1.10.4 - query = urlencode({"variant": self._variant}) + query = urlencode({"variant": self._variant, "mode": "all"}) response = ayon_api.post( f"actions/list?{query}", **request_data ) diff --git a/client/ayon_core/tools/launcher/models/selection.py b/client/ayon_core/tools/launcher/models/selection.py index b156d2084c..9d5ad47d89 100644 --- a/client/ayon_core/tools/launcher/models/selection.py +++ b/client/ayon_core/tools/launcher/models/selection.py @@ -1,26 +1,37 @@ -class LauncherSelectionModel(object): +from __future__ import annotations + +import typing +from typing import Optional + +if typing.TYPE_CHECKING: + from ayon_core.tools.launcher.abstract import AbstractLauncherBackend + + +class LauncherSelectionModel: """Model handling selection changes. Triggering events: - "selection.project.changed" - "selection.folder.changed" - "selection.task.changed" + - "selection.workfile.changed" """ event_source = "launcher.selection.model" - def __init__(self, controller): + def __init__(self, controller: AbstractLauncherBackend) -> None: self._controller = controller self._project_name = None self._folder_id = None self._task_name = None self._task_id = None + self._workfile_id = None - def get_selected_project_name(self): + def get_selected_project_name(self) -> Optional[str]: return self._project_name - def set_selected_project(self, project_name): + def set_selected_project(self, project_name: Optional[str]) -> None: if project_name == self._project_name: return @@ -31,10 +42,10 @@ class LauncherSelectionModel(object): self.event_source ) - def get_selected_folder_id(self): + def get_selected_folder_id(self) -> Optional[str]: return self._folder_id - def set_selected_folder(self, folder_id): + def set_selected_folder(self, folder_id: Optional[str]) -> None: if folder_id == self._folder_id: return @@ -48,13 +59,15 @@ class LauncherSelectionModel(object): self.event_source ) - def get_selected_task_name(self): + def get_selected_task_name(self) -> Optional[str]: return self._task_name - def get_selected_task_id(self): + def get_selected_task_id(self) -> Optional[str]: return self._task_id - def set_selected_task(self, task_id, task_name): + def set_selected_task( + self, task_id: Optional[str], task_name: Optional[str] + ) -> None: if task_id == self._task_id: return @@ -70,3 +83,23 @@ class LauncherSelectionModel(object): }, self.event_source ) + + def get_selected_workfile(self) -> Optional[str]: + return self._workfile_id + + def set_selected_workfile(self, workfile_id: Optional[str]) -> None: + if workfile_id == self._workfile_id: + return + + self._workfile_id = workfile_id + self._controller.emit_event( + "selection.workfile.changed", + { + "project_name": self._project_name, + "folder_id": self._folder_id, + "task_name": self._task_name, + "task_id": self._task_id, + "workfile_id": workfile_id, + }, + self.event_source + ) diff --git a/client/ayon_core/tools/launcher/models/workfiles.py b/client/ayon_core/tools/launcher/models/workfiles.py index 2ba15c1800..649a87353c 100644 --- a/client/ayon_core/tools/launcher/models/workfiles.py +++ b/client/ayon_core/tools/launcher/models/workfiles.py @@ -44,7 +44,7 @@ class WorkfilesModel: anatomy = Anatomy(project_name, project_entity=project_entity) items = [] for workfile_entity in ayon_api.get_workfiles_info( - project_name, task_ids={task_id}, fields={"path", "data"} + project_name, task_ids={task_id}, fields={"id", "path", "data"} ): rootless_path = workfile_entity["path"] exists = False @@ -61,7 +61,8 @@ class WorkfilesModel: version = workfile_data.get("version") items.append(WorkfileItem( - os.path.basename(rootless_path), + workfile_id=workfile_entity["id"], + filename=os.path.basename(rootless_path), exists=exists, icon=self._get_host_icon(host_name), version=version, diff --git a/client/ayon_core/tools/launcher/ui/actions_widget.py b/client/ayon_core/tools/launcher/ui/actions_widget.py index 51cb8e73bc..67a8bca787 100644 --- a/client/ayon_core/tools/launcher/ui/actions_widget.py +++ b/client/ayon_core/tools/launcher/ui/actions_widget.py @@ -136,6 +136,10 @@ class ActionsQtModel(QtGui.QStandardItemModel): "selection.task.changed", self._on_selection_task_changed, ) + controller.register_event_callback( + "selection.workfile.changed", + self._on_selection_workfile_changed, + ) self._controller = controller @@ -146,6 +150,7 @@ class ActionsQtModel(QtGui.QStandardItemModel): self._selected_project_name = None self._selected_folder_id = None self._selected_task_id = None + self._selected_workfile_id = None def get_selected_project_name(self): return self._selected_project_name @@ -156,6 +161,9 @@ class ActionsQtModel(QtGui.QStandardItemModel): def get_selected_task_id(self): return self._selected_task_id + def get_selected_workfile_id(self): + return self._selected_workfile_id + def get_group_items(self, action_id): return self._groups_by_id[action_id] @@ -194,6 +202,7 @@ class ActionsQtModel(QtGui.QStandardItemModel): self._selected_project_name, self._selected_folder_id, self._selected_task_id, + self._selected_workfile_id, ) if not items: self._clear_items() @@ -286,18 +295,28 @@ class ActionsQtModel(QtGui.QStandardItemModel): self._selected_project_name = event["project_name"] self._selected_folder_id = None self._selected_task_id = None + self._selected_workfile_id = None self.refresh() def _on_selection_folder_changed(self, event): self._selected_project_name = event["project_name"] self._selected_folder_id = event["folder_id"] self._selected_task_id = None + self._selected_workfile_id = None self.refresh() def _on_selection_task_changed(self, event): self._selected_project_name = event["project_name"] self._selected_folder_id = event["folder_id"] self._selected_task_id = event["task_id"] + self._selected_workfile_id = None + self.refresh() + + def _on_selection_workfile_changed(self, event): + self._selected_project_name = event["project_name"] + self._selected_folder_id = event["folder_id"] + self._selected_task_id = event["task_id"] + self._selected_workfile_id = event["workfile_id"] self.refresh() @@ -578,9 +597,6 @@ class ActionMenuPopup(QtWidgets.QWidget): if not index or not index.isValid(): return - if not index.data(ACTION_HAS_CONFIGS_ROLE): - return - action_id = index.data(ACTION_ID_ROLE) self.action_triggered.emit(action_id) @@ -970,6 +986,7 @@ class ActionsWidget(QtWidgets.QWidget): event["project_name"], event["folder_id"], event["task_id"], + event["workfile_id"], event["addon_name"], event["addon_version"], ), @@ -1050,24 +1067,26 @@ class ActionsWidget(QtWidgets.QWidget): project_name = self._model.get_selected_project_name() folder_id = self._model.get_selected_folder_id() task_id = self._model.get_selected_task_id() + workfile_id = self._model.get_selected_workfile_id() action_item = self._model.get_action_item_by_id(action_id) if action_item.action_type == "webaction": action_item = self._model.get_action_item_by_id(action_id) context = WebactionContext( - action_id, - project_name, - folder_id, - task_id, - action_item.addon_name, - action_item.addon_version + identifier=action_id, + project_name=project_name, + folder_id=folder_id, + task_id=task_id, + workfile_id=workfile_id, + addon_name=action_item.addon_name, + addon_version=action_item.addon_version, ) self._controller.trigger_webaction( context, action_item.full_label ) else: self._controller.trigger_action( - action_id, project_name, folder_id, task_id + action_id, project_name, folder_id, task_id, workfile_id ) if index is None: @@ -1087,11 +1106,13 @@ class ActionsWidget(QtWidgets.QWidget): project_name = self._model.get_selected_project_name() folder_id = self._model.get_selected_folder_id() task_id = self._model.get_selected_task_id() + workfile_id = self._model.get_selected_workfile_id() context = WebactionContext( - action_id, + identifier=action_id, project_name=project_name, folder_id=folder_id, task_id=task_id, + workfile_id=workfile_id, addon_name=action_item.addon_name, addon_version=action_item.addon_version, ) diff --git a/client/ayon_core/tools/launcher/ui/workfiles_page.py b/client/ayon_core/tools/launcher/ui/workfiles_page.py index 0401183080..1ea223031e 100644 --- a/client/ayon_core/tools/launcher/ui/workfiles_page.py +++ b/client/ayon_core/tools/launcher/ui/workfiles_page.py @@ -7,6 +7,7 @@ from ayon_core.tools.utils import get_qt_icon from ayon_core.tools.launcher.abstract import AbstractLauncherFrontEnd VERSION_ROLE = QtCore.Qt.UserRole + 1 +WORKFILE_ID_ROLE = QtCore.Qt.UserRole + 2 class WorkfilesModel(QtGui.QStandardItemModel): @@ -53,9 +54,10 @@ class WorkfilesModel(QtGui.QStandardItemModel): item = QtGui.QStandardItem(workfile_item.filename) item.setData(icon, QtCore.Qt.DecorationRole) item.setData(workfile_item.version, VERSION_ROLE) + item.setData(workfile_item.workfile_id, WORKFILE_ID_ROLE) flags = QtCore.Qt.NoItemFlags if workfile_item.exists: - flags = QtCore.Qt.ItemIsEnabled + flags = QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable item.setFlags(flags) new_items.append(item) @@ -150,6 +152,9 @@ class WorkfilesPage(QtWidgets.QWidget): layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(workfiles_view, 1) + workfiles_view.selectionModel().selectionChanged.connect( + self._on_selection_changed + ) workfiles_model.refreshed.connect(self._on_refresh) self._controller = controller @@ -162,3 +167,9 @@ class WorkfilesPage(QtWidgets.QWidget): def _on_refresh(self) -> None: self._workfiles_proxy.sort(0, QtCore.Qt.DescendingOrder) + + def _on_selection_changed(self, selected, _deselected) -> None: + workfile_id = None + for index in selected.indexes(): + workfile_id = index.data(WORKFILE_ID_ROLE) + self._controller.set_selected_workfile(workfile_id) From 5f68e8107e729eafabf111b5d04873b21af869d0 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 17 Sep 2025 17:26:06 +0200 Subject: [PATCH 446/595] allow to implement 'get_app_information' by host --- client/ayon_core/host/__init__.py | 3 ++- client/ayon_core/host/abstract.py | 24 ++++++++++++++++++++++++ client/ayon_core/host/host.py | 14 +++++++++++++- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/host/__init__.py b/client/ayon_core/host/__init__.py index 950c14564e..7d5918b0ac 100644 --- a/client/ayon_core/host/__init__.py +++ b/client/ayon_core/host/__init__.py @@ -1,5 +1,5 @@ from .constants import ContextChangeReason -from .abstract import AbstractHost +from .abstract import AbstractHost, ApplicationInformation from .host import ( HostBase, ContextChangeData, @@ -21,6 +21,7 @@ __all__ = ( "ContextChangeReason", "AbstractHost", + "ApplicationInformation", "HostBase", "ContextChangeData", diff --git a/client/ayon_core/host/abstract.py b/client/ayon_core/host/abstract.py index 26771aaffa..7b4bb5b791 100644 --- a/client/ayon_core/host/abstract.py +++ b/client/ayon_core/host/abstract.py @@ -2,6 +2,7 @@ from __future__ import annotations import logging from abc import ABC, abstractmethod +from dataclasses import dataclass import typing from typing import Optional, Any @@ -13,6 +14,19 @@ if typing.TYPE_CHECKING: from .typing import HostContextData +@dataclass +class ApplicationInformation: + """Application information. + + Attributes: + app_name (Optional[str]): Application name. e.g. Maya, NukeX, Nuke + app_version (Optional[str]): Application version. e.g. 15.2.1 + + """ + app_name: Optional[str] = None + app_version: Optional[str] = None + + class AbstractHost(ABC): """Abstract definition of host implementation.""" @property @@ -26,6 +40,16 @@ class AbstractHost(ABC): """Host name.""" pass + @abstractmethod + def get_app_information(self) -> ApplicationInformation: + """Information about the application where host is running. + + Returns: + ApplicationInformation: Application information. + + """ + pass + @abstractmethod def get_current_context(self) -> HostContextData: """Get the current context of the host. diff --git a/client/ayon_core/host/host.py b/client/ayon_core/host/host.py index 28cb6b0a09..7d6d3ddbe4 100644 --- a/client/ayon_core/host/host.py +++ b/client/ayon_core/host/host.py @@ -12,7 +12,7 @@ import ayon_api from ayon_core.lib import emit_event from .constants import ContextChangeReason -from .abstract import AbstractHost +from .abstract import AbstractHost, ApplicationInformation if typing.TYPE_CHECKING: from ayon_core.pipeline import Anatomy @@ -96,6 +96,18 @@ class HostBase(AbstractHost): pass + def get_app_information(self) -> ApplicationInformation: + """Running application information. + + Host integration should override this method and return correct + information. + + Returns: + ApplicationInformation: Application information. + + """ + return ApplicationInformation() + def install(self): """Install host specific functionality. From 154d8fd0876e1e0e6669c3a3a761ca966ef563a1 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 17 Sep 2025 17:30:17 +0200 Subject: [PATCH 447/595] allow to pass 'data' to save workfile info --- client/ayon_core/pipeline/workfile/utils.py | 72 ++++++++++++--------- 1 file changed, 42 insertions(+), 30 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index 6666853998..d22b7a1635 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -10,6 +10,7 @@ from ayon_api.operations import OperationsSession from ayon_core.lib import filter_profiles, get_ayon_username from ayon_core.settings import get_project_settings +from ayon_core.host import ApplicationInformation from ayon_core.host.interfaces import ( SaveWorkfileOptionalData, ListWorkfilesOptionalData, @@ -207,6 +208,7 @@ def save_workfile_info( comment: Optional[str] = None, description: Optional[str] = None, username: Optional[str] = None, + data: Optional[dict[str, Any]] = None, workfile_entities: Optional[list[dict[str, Any]]] = None, ) -> dict[str, Any]: """Save workfile info entity for a workfile path. @@ -221,6 +223,8 @@ def save_workfile_info( description (Optional[str]): Workfile description. username (Optional[str]): Username of user who saves the workfile. If not provided, current user is used. + app_info (Optional[ApplicationInformation]): Application information. + data (Optional[dict[str, Any]]): Additional workfile entity data. workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched workfile entities related to task. @@ -246,6 +250,18 @@ def save_workfile_info( if username is None: username = get_ayon_username() + attrib = {} + extension = os.path.splitext(rootless_path)[1] + for key, value in ( + ("extension", extension), + ("description", description), + ): + if value is not None: + attrib[key] = value + + if data is None: + data = {} + if not workfile_entity: return _create_workfile_info_entity( project_name, @@ -255,34 +271,38 @@ def save_workfile_info( username, version, comment, - description, + attrib, + data, ) - data = { - key: value - for key, value in ( - ("host_name", host_name), - ("version", version), - ("comment", comment), - ) - if value is not None - } - - old_data = workfile_entity["data"] + for key, value in ( + ("host_name", host_name), + ("version", version), + ("comment", comment), + ): + if value is not None: + data[key] = value changed_data = {} + old_data = workfile_entity["data"] for key, value in data.items(): if key not in old_data or old_data[key] != value: changed_data[key] = value + workfile_entity["data"][key] = value + + changed_attrib = {} + old_attrib = workfile_entity["attrib"] + for key, value in attrib.items(): + if key not in old_attrib or old_attrib[key] != value: + changed_attrib[key] = value + workfile_entity["attrib"][key] = value update_data = {} if changed_data: update_data["data"] = changed_data - old_description = workfile_entity["attrib"].get("description") - if description is not None and old_description != description: - update_data["attrib"] = {"description": description} - workfile_entity["attrib"]["description"] = description + if changed_attrib: + update_data["attrib"] = changed_attrib # Automatically fix 'createdBy' and 'updatedBy' fields # NOTE both fields were not automatically filled by server @@ -749,7 +769,8 @@ def _create_workfile_info_entity( username: str, version: Optional[int], comment: Optional[str], - description: Optional[str], + attrib: dict[str, Any], + data: dict[str, Any], ) -> dict[str, Any]: """Create workfile entity data. @@ -761,27 +782,18 @@ def _create_workfile_info_entity( username (str): Username. version (Optional[int]): Workfile version. comment (Optional[str]): Workfile comment. - description (Optional[str]): Workfile description. + attrib (dict[str, Any]): Workfile entity attributes. + data (dict[str, Any]): Workfile entity data. Returns: dict[str, Any]: Created workfile entity data. """ - extension = os.path.splitext(rootless_path)[1] - - attrib = {} - for key, value in ( - ("extension", extension), - ("description", description), - ): - if value is not None: - attrib[key] = value - - data = { + data.update({ "host_name": host_name, "version": version, "comment": comment, - } + }) workfile_info = { "id": uuid.uuid4().hex, From 27c1c30f2e94830e68b8f044fb23a1ff8fe4e424 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 17 Sep 2025 17:30:35 +0200 Subject: [PATCH 448/595] add app information to workfile data --- client/ayon_core/host/interfaces/workfiles.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 93aad4c117..69b902c9e2 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -1554,6 +1554,22 @@ class IWorkfileHost(AbstractHost): if platform.system().lower() == "windows": rootless_path = rootless_path.replace("\\", "/") + # Get application information + app_info = self.get_app_information() + data = {} + if app_info.app_name: + data["app_name"] = app_info.app_name + if app_info.app_version: + data["app_version"] = app_info.app_version + + # Use app group and app variant from applications addon (if available) + app_addon_name = os.environ.get("AYON_APP_NAME") or "" + app_addon_name_parts = app_addon_name.split("/") + if len(app_addon_name_parts) == 2: + app_group, app_variant = app_addon_name_parts + data["app_group"] = app_group + data["app_variant"] = app_variant + workfile_info = save_workfile_info( project_name, save_workfile_context.task_entity["id"], @@ -1562,6 +1578,7 @@ class IWorkfileHost(AbstractHost): version, comment, description, + data=data, workfile_entities=save_workfile_context.workfile_entities, ) return workfile_info From eb3428e37169c20f8af8d9ae53cb75ab40f6a918 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 17 Sep 2025 18:27:49 +0200 Subject: [PATCH 449/595] remove unused import --- client/ayon_core/pipeline/workfile/utils.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/client/ayon_core/pipeline/workfile/utils.py b/client/ayon_core/pipeline/workfile/utils.py index d22b7a1635..c2b6fad660 100644 --- a/client/ayon_core/pipeline/workfile/utils.py +++ b/client/ayon_core/pipeline/workfile/utils.py @@ -10,7 +10,6 @@ from ayon_api.operations import OperationsSession from ayon_core.lib import filter_profiles, get_ayon_username from ayon_core.settings import get_project_settings -from ayon_core.host import ApplicationInformation from ayon_core.host.interfaces import ( SaveWorkfileOptionalData, ListWorkfilesOptionalData, @@ -223,7 +222,6 @@ def save_workfile_info( description (Optional[str]): Workfile description. username (Optional[str]): Username of user who saves the workfile. If not provided, current user is used. - app_info (Optional[ApplicationInformation]): Application information. data (Optional[dict[str, Any]]): Additional workfile entity data. workfile_entities (Optional[list[dict[str, Any]]]): Pre-fetched workfile entities related to task. From e416e3218968ea876202bb8ddd196d24f465aa50 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 18 Sep 2025 10:13:43 +0200 Subject: [PATCH 450/595] use f-string --- client/ayon_core/host/interfaces/workfiles.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 69b902c9e2..b908e7167e 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -55,7 +55,7 @@ class _WorkfileOptionalData: ): if kwargs: cls_name = self.__class__.__name__ - keys = ", ".join(['"{}"'.format(k) for k in kwargs.keys()]) + keys = ", ".join([f'"{k}"' for k in kwargs.keys()]) warnings.warn( f"Unknown keywords passed to {cls_name}: {keys}", ) From 9d55c1e9021e36ff32f8305dc4a196fb37d2a906 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 18 Sep 2025 11:44:18 +0200 Subject: [PATCH 451/595] keep ayon application full name as is --- client/ayon_core/host/interfaces/workfiles.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index b908e7167e..4f7926e239 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -1563,12 +1563,13 @@ class IWorkfileHost(AbstractHost): data["app_version"] = app_info.app_version # Use app group and app variant from applications addon (if available) - app_addon_name = os.environ.get("AYON_APP_NAME") or "" - app_addon_name_parts = app_addon_name.split("/") - if len(app_addon_name_parts) == 2: - app_group, app_variant = app_addon_name_parts - data["app_group"] = app_group - data["app_variant"] = app_variant + app_addon_name = os.environ.get("AYON_APP_NAME") + if app_addon_name: + data["app_addon_name"] = app_addon_name + + app_addon_tools = os.environ.get("AYON_APP_TOOLS") + if app_addon_tools: + data["app_addon_tools"] = app_addon_tools.split(";") workfile_info = save_workfile_info( project_name, From a1b863e6a67f222948108ed54383b4872a76946d Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 22 Sep 2025 11:58:05 +0200 Subject: [PATCH 452/595] use ayon prefix for ayon app name and tools --- client/ayon_core/host/interfaces/workfiles.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 4f7926e239..587962351d 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -1565,11 +1565,11 @@ class IWorkfileHost(AbstractHost): # Use app group and app variant from applications addon (if available) app_addon_name = os.environ.get("AYON_APP_NAME") if app_addon_name: - data["app_addon_name"] = app_addon_name + data["ayon_app_name"] = app_addon_name app_addon_tools = os.environ.get("AYON_APP_TOOLS") if app_addon_tools: - data["app_addon_tools"] = app_addon_tools.split(";") + data["ayon_app_tools"] = app_addon_tools.split(";") workfile_info = save_workfile_info( project_name, From ff269b7bd056de13b42db6d2b2b279244244dd0a Mon Sep 17 00:00:00 2001 From: Ynbot Date: Mon, 22 Sep 2025 12:23:41 +0000 Subject: [PATCH 453/595] [Automated] Add generated package files from main --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index 9ca5e1bc30..9224326169 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.6.0+dev" +__version__ = "1.6.1" diff --git a/package.py b/package.py index e430524dd5..91e56f0838 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.6.0+dev" +version = "1.6.1" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index 9a62a408ba..6ba1dcb8f3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.6.0+dev" +version = "1.6.1" description = "" authors = ["Ynput Team "] readme = "README.md" From c0e6772097040224e79e01c88f126c3f6a0a5f7d Mon Sep 17 00:00:00 2001 From: Ynbot Date: Mon, 22 Sep 2025 12:24:14 +0000 Subject: [PATCH 454/595] [Automated] Update version in package.py for develop --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index 9224326169..c7a72e0b43 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.6.1" +__version__ = "1.6.1+dev" diff --git a/package.py b/package.py index 91e56f0838..f6853d8816 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.6.1" +version = "1.6.1+dev" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index 6ba1dcb8f3..18f2047a92 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.6.1" +version = "1.6.1+dev" description = "" authors = ["Ynput Team "] readme = "README.md" From c5037123481fa9949f543cb6f6a14a5e8c456656 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 22 Sep 2025 12:25:06 +0000 Subject: [PATCH 455/595] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 24c2b568b3..6b75179e7b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to AYON Tray options: + - 1.6.1 - 1.6.0 - 1.5.3 - 1.5.2 From eabd6b601f3ce8e980a053714548d9f9d3466bc5 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 22 Sep 2025 19:11:02 +0200 Subject: [PATCH 456/595] small changes or logic order --- client/ayon_core/pipeline/load/utils.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/client/ayon_core/pipeline/load/utils.py b/client/ayon_core/pipeline/load/utils.py index 836fc5e096..de79ad4d52 100644 --- a/client/ayon_core/pipeline/load/utils.py +++ b/client/ayon_core/pipeline/load/utils.py @@ -1042,13 +1042,13 @@ def filter_containers(containers, project_name): hero=True, fields={"id", "productId", "version"} ) - verisons_by_id = {} + versions_by_id = {} versions_by_product_id = collections.defaultdict(list) hero_version_ids = set() for version_entity in version_entities: version_id = version_entity["id"] # Store versions by their ids - verisons_by_id[version_id] = version_entity + versions_by_id[version_id] = version_entity # There's no need to query products for hero versions # - they are considered as latest? if version_entity["version"] < 0: @@ -1083,24 +1083,23 @@ def filter_containers(containers, project_name): repre_entity = repre_entities_by_id.get(repre_id) if not repre_entity: - log.debug(( - "Container '{}' has an invalid representation." + log.debug( + f"Container '{container_name}' has an invalid representation." " It is missing in the database." - ).format(container_name)) + ) not_found_containers.append(container) continue version_id = repre_entity["versionId"] - if version_id in outdated_version_ids: - outdated_containers.append(container) - - elif version_id not in verisons_by_id: - log.debug(( - "Representation on container '{}' has an invalid version." - " It is missing in the database." - ).format(container_name)) + if version_id not in versions_by_id: + log.debug( + f"Representation on container '{container_name}' has an" + " invalid version. It is missing in the database." + ) not_found_containers.append(container) + elif version_id in outdated_version_ids: + outdated_containers.append(container) else: uptodate_containers.append(container) From 0748d659d71291f5ec326086201891640c4ec265 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 22 Sep 2025 19:11:33 +0200 Subject: [PATCH 457/595] do not consider locked containers in 'get_outdated_containers' as outdated --- client/ayon_core/pipeline/load/utils.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/load/utils.py b/client/ayon_core/pipeline/load/utils.py index de79ad4d52..7dab889ec5 100644 --- a/client/ayon_core/pipeline/load/utils.py +++ b/client/ayon_core/pipeline/load/utils.py @@ -964,7 +964,12 @@ def get_outdated_containers(host=None, project_name=None): containers = host.get_containers() else: containers = host.ls() - return filter_containers(containers, project_name).outdated + outdated_containers = [] + for container in filter_containers(containers, project_name).outdated: + if container.get("locked_version") is True: + continue + outdated_containers.append(container) + return outdated_containers def _is_valid_representation_id(repre_id: Any) -> bool: From ace6a84f5e9759f83a7f915fafb0f5ee1830b4a1 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 22 Sep 2025 19:12:03 +0200 Subject: [PATCH 458/595] look for locked version in container --- client/ayon_core/tools/sceneinventory/models/containers.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/sceneinventory/models/containers.py b/client/ayon_core/tools/sceneinventory/models/containers.py index 47f74476de..0e19f381cd 100644 --- a/client/ayon_core/tools/sceneinventory/models/containers.py +++ b/client/ayon_core/tools/sceneinventory/models/containers.py @@ -95,7 +95,8 @@ class ContainerItem: namespace, object_name, item_id, - project_name + project_name, + version_locked, ): self.representation_id = representation_id self.loader_name = loader_name @@ -103,6 +104,7 @@ class ContainerItem: self.namespace = namespace self.item_id = item_id self.project_name = project_name + self.version_locked = version_locked @classmethod def from_container_data(cls, current_project_name, container): @@ -114,7 +116,8 @@ class ContainerItem: item_id=uuid.uuid4().hex, project_name=container.get( "project_name", current_project_name - ) + ), + version_locked=container.get("version_locked", False), ) From 1f41e03fe00c57fcb341d6c82677184e8e80a1a4 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 22 Sep 2025 19:12:26 +0200 Subject: [PATCH 459/595] store the information to the model item --- client/ayon_core/tools/sceneinventory/model.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/client/ayon_core/tools/sceneinventory/model.py b/client/ayon_core/tools/sceneinventory/model.py index 9977acea21..27211165bf 100644 --- a/client/ayon_core/tools/sceneinventory/model.py +++ b/client/ayon_core/tools/sceneinventory/model.py @@ -37,6 +37,7 @@ REMOTE_SITE_ICON_ROLE = QtCore.Qt.UserRole + 23 # containers inbetween refresh. ITEM_UNIQUE_NAME_ROLE = QtCore.Qt.UserRole + 24 PROJECT_NAME_ROLE = QtCore.Qt.UserRole + 25 +CONTAINER_VERSION_LOCKED_ROLE = QtCore.Qt.UserRole + 26 class InventoryModel(QtGui.QStandardItemModel): @@ -291,6 +292,10 @@ class InventoryModel(QtGui.QStandardItemModel): item.setData(container_item.object_name, OBJECT_NAME_ROLE) item.setData(True, IS_CONTAINER_ITEM_ROLE) item.setData(unique_name, ITEM_UNIQUE_NAME_ROLE) + item.setData( + container_item.version_locked, + CONTAINER_VERSION_LOCKED_ROLE + ) container_model_items.append(item) progress = progress_by_id[repre_id] From 2fbb6c279be98a6d7c8c110db53d0c53a8f51b04 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 22 Sep 2025 19:13:11 +0200 Subject: [PATCH 460/595] allow more options for icons --- client/ayon_core/tools/sceneinventory/view.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/tools/sceneinventory/view.py b/client/ayon_core/tools/sceneinventory/view.py index fdd1bdbe75..ead10f9e62 100644 --- a/client/ayon_core/tools/sceneinventory/view.py +++ b/client/ayon_core/tools/sceneinventory/view.py @@ -524,7 +524,15 @@ class SceneInventoryView(QtWidgets.QTreeView): submenu = QtWidgets.QMenu("Actions", self) for action in custom_actions: color = action.color or DEFAULT_COLOR - icon = qtawesome.icon("fa.%s" % action.icon, color=color) + icon_def = action.icon + if not isinstance(action.icon, dict): + icon_def = { + "type": "awesome-font", + "name": icon_def, + "color": color, + } + icon = get_qt_icon(icon_def) + # icon = qtawesome.icon("fa.%s" % action.icon, color=color) action_item = QtWidgets.QAction(icon, action.label, submenu) action_item.triggered.connect( partial( From d96e8087ec63676be751b8618d79c3ea7a5c2a03 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 22 Sep 2025 19:13:22 +0200 Subject: [PATCH 461/595] draw a lock next to version if is locked --- .../tools/sceneinventory/delegates.py | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/sceneinventory/delegates.py b/client/ayon_core/tools/sceneinventory/delegates.py index 6f91587613..9bc4294fda 100644 --- a/client/ayon_core/tools/sceneinventory/delegates.py +++ b/client/ayon_core/tools/sceneinventory/delegates.py @@ -1,10 +1,14 @@ from qtpy import QtWidgets, QtCore, QtGui -from .model import VERSION_LABEL_ROLE +from ayon_core.tools.utils import get_qt_icon + +from .model import VERSION_LABEL_ROLE, CONTAINER_VERSION_LOCKED_ROLE class VersionDelegate(QtWidgets.QStyledItemDelegate): """A delegate that display version integer formatted as version string.""" + _locked_icon = None + def paint(self, painter, option, index): fg_color = index.data(QtCore.Qt.ForegroundRole) if fg_color: @@ -45,10 +49,35 @@ class VersionDelegate(QtWidgets.QStyledItemDelegate): QtWidgets.QStyle.PM_FocusFrameHMargin, option, option.widget ) + 1 + text_rect_f = text_rect.adjusted( + text_margin, 0, - text_margin, 0 + ) + painter.drawText( - text_rect.adjusted(text_margin, 0, - text_margin, 0), + text_rect_f, option.displayAlignment, text ) + if index.data(CONTAINER_VERSION_LOCKED_ROLE) is True: + icon = self._get_locked_icon() + size = max(text_rect_f.height() // 2, 16) + margin = (text_rect_f.height() - size) // 2 + + icon_rect = QtCore.QRect( + text_rect_f.right() - size, + text_rect_f.top() + margin, + size, + size + ) + icon.paint(painter, icon_rect) painter.restore() + + def _get_locked_icon(cls): + if cls._locked_icon is None: + cls._locked_icon = get_qt_icon({ + "type": "material-symbols", + "name": "lock", + "color": "white", + }) + return cls._locked_icon From bb64f3c2a5e9e2f36111d722b4e677334c388e26 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 22 Sep 2025 19:13:41 +0200 Subject: [PATCH 462/595] make sure 'data_changed' is triggered --- client/ayon_core/tools/sceneinventory/view.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/tools/sceneinventory/view.py b/client/ayon_core/tools/sceneinventory/view.py index ead10f9e62..b1e378f343 100644 --- a/client/ayon_core/tools/sceneinventory/view.py +++ b/client/ayon_core/tools/sceneinventory/view.py @@ -17,6 +17,7 @@ from ayon_core.tools.utils.lib import ( format_version, preserve_expanded_rows, preserve_selection, + get_qt_icon, ) from ayon_core.tools.utils.delegates import StatusDelegate @@ -46,7 +47,7 @@ class SceneInventoryView(QtWidgets.QTreeView): hierarchy_view_changed = QtCore.Signal(bool) def __init__(self, controller, parent): - super(SceneInventoryView, self).__init__(parent=parent) + super().__init__(parent=parent) # view settings self.setIndentation(12) @@ -623,17 +624,20 @@ class SceneInventoryView(QtWidgets.QTreeView): containers_by_id = self._controller.get_containers_by_item_ids( item_ids ) - result = action.process(list(containers_by_id.values())) - if result: - self.data_changed.emit() + try: + result = action.process(list(containers_by_id.values())) + if not result: + pass - if isinstance(result, (list, set)): + elif isinstance(result, (list, set)): self._select_items_by_action(result) - if isinstance(result, dict): + elif isinstance(result, dict): self._select_items_by_action( result["objectNames"], result["options"] ) + finally: + self.data_changed.emit() def _select_items_by_action(self, object_names, options=None): """Select view items by the result of action From b6feefa19a7ebc50963d09637f57adf79d8fedbe Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 23 Sep 2025 11:54:29 +0200 Subject: [PATCH 463/595] use Logger as log attribute for loader plugin --- client/ayon_core/pipeline/load/plugins.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/pipeline/load/plugins.py b/client/ayon_core/pipeline/load/plugins.py index 48e860e834..ed963110c6 100644 --- a/client/ayon_core/pipeline/load/plugins.py +++ b/client/ayon_core/pipeline/load/plugins.py @@ -2,10 +2,10 @@ from __future__ import annotations from abc import abstractmethod -import logging import os from typing import Any, Optional, Type +from ayon_core.lib import Logger from ayon_core.pipeline.plugin_discover import ( deregister_plugin, deregister_plugin_path, @@ -31,8 +31,7 @@ class LoaderPlugin(list): options = [] - log = logging.getLogger("ProductLoader") - log.propagate = True + log = Logger.get_logger("ProductLoader") @classmethod def apply_settings(cls, project_settings): From 2656e0c7d860a1468900c5bf2a528e39a11fbe90 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 23 Sep 2025 12:11:41 +0200 Subject: [PATCH 464/595] remove commented line Co-authored-by: Roy Nieterau --- client/ayon_core/tools/sceneinventory/view.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/tools/sceneinventory/view.py b/client/ayon_core/tools/sceneinventory/view.py index b1e378f343..6a825a2ca4 100644 --- a/client/ayon_core/tools/sceneinventory/view.py +++ b/client/ayon_core/tools/sceneinventory/view.py @@ -533,7 +533,6 @@ class SceneInventoryView(QtWidgets.QTreeView): "color": color, } icon = get_qt_icon(icon_def) - # icon = qtawesome.icon("fa.%s" % action.icon, color=color) action_item = QtWidgets.QAction(icon, action.label, submenu) action_item.triggered.connect( partial( From 0122686522aad4dfa8baf144bb8e06bc83fcf7be Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 23 Sep 2025 12:39:32 +0200 Subject: [PATCH 465/595] allow to ignore locked versions --- client/ayon_core/pipeline/load/utils.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/pipeline/load/utils.py b/client/ayon_core/pipeline/load/utils.py index 7dab889ec5..6b751dec30 100644 --- a/client/ayon_core/pipeline/load/utils.py +++ b/client/ayon_core/pipeline/load/utils.py @@ -942,7 +942,11 @@ def any_outdated_containers(host=None, project_name=None): return False -def get_outdated_containers(host=None, project_name=None): +def get_outdated_containers( + host=None, + project_name=None, + ignore_locked_versions: bool = False, +): """Collect outdated containers from host scene. Currently registered host and project in global session are used if @@ -951,6 +955,8 @@ def get_outdated_containers(host=None, project_name=None): Args: host (ModuleType): Host implementation with 'ls' function available. project_name (str): Name of project in which context we are. + ignore_locked_versions (bool): Locked versions are ignored. + """ from ayon_core.pipeline import registered_host, get_current_project_name @@ -964,9 +970,13 @@ def get_outdated_containers(host=None, project_name=None): containers = host.get_containers() else: containers = host.ls() + outdated_containers = [] for container in filter_containers(containers, project_name).outdated: - if container.get("locked_version") is True: + if ( + not ignore_locked_versions + and container.get("locked_version") is True + ): continue outdated_containers.append(container) return outdated_containers From 88db0b46e83bbddb1a112af2947715172986d45a Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 23 Sep 2025 12:39:48 +0200 Subject: [PATCH 466/595] added typehints --- client/ayon_core/pipeline/load/utils.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/pipeline/load/utils.py b/client/ayon_core/pipeline/load/utils.py index 6b751dec30..0cfe004572 100644 --- a/client/ayon_core/pipeline/load/utils.py +++ b/client/ayon_core/pipeline/load/utils.py @@ -9,7 +9,7 @@ from typing import Optional, Union, Any import ayon_api -from ayon_core.host import ILoadHost +from ayon_core.host import ILoadHost, AbstractHost from ayon_core.lib import ( StringTemplate, TemplateUnsolved, @@ -943,8 +943,8 @@ def any_outdated_containers(host=None, project_name=None): def get_outdated_containers( - host=None, - project_name=None, + host: Optional[AbstractHost] = None, + project_name: Optional[str] = None, ignore_locked_versions: bool = False, ): """Collect outdated containers from host scene. @@ -953,8 +953,8 @@ def get_outdated_containers( arguments are not passed. Args: - host (ModuleType): Host implementation with 'ls' function available. - project_name (str): Name of project in which context we are. + host (Optional[AbstractHost]): Host implementation. + project_name (Optional[str]): Name of project in which context we are. ignore_locked_versions (bool): Locked versions are ignored. """ @@ -1008,8 +1008,8 @@ def filter_containers(containers, project_name): Returns: ContainersFilterResult: Named tuple with 'latest', 'outdated', 'invalid' and 'not_found' containers. - """ + """ # Make sure containers is list that won't change containers = list(containers) From 740f0276e25b3ec9130ad3346c04d3cb4bda54c9 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 23 Sep 2025 12:39:59 +0200 Subject: [PATCH 467/595] add a todo to 'filter_containers' --- client/ayon_core/pipeline/load/utils.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/ayon_core/pipeline/load/utils.py b/client/ayon_core/pipeline/load/utils.py index 0cfe004572..a111444d48 100644 --- a/client/ayon_core/pipeline/load/utils.py +++ b/client/ayon_core/pipeline/load/utils.py @@ -1000,6 +1000,9 @@ def filter_containers(containers, project_name): 'invalid' are invalid containers (invalid content) and 'not_found' has some missing entity in database. + Todos: + Respect 'project_name' on containers if is available. + Args: containers (Iterable[dict]): List of containers referenced into scene. project_name (str): Name of project in which context shoud look for From 3a524844609d375656e5eed3e2fe71a9ce565203 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 23 Sep 2025 12:42:06 +0200 Subject: [PATCH 468/595] revert back output handling --- client/ayon_core/tools/sceneinventory/view.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/client/ayon_core/tools/sceneinventory/view.py b/client/ayon_core/tools/sceneinventory/view.py index 6a825a2ca4..22bc170230 100644 --- a/client/ayon_core/tools/sceneinventory/view.py +++ b/client/ayon_core/tools/sceneinventory/view.py @@ -623,20 +623,17 @@ class SceneInventoryView(QtWidgets.QTreeView): containers_by_id = self._controller.get_containers_by_item_ids( item_ids ) - try: - result = action.process(list(containers_by_id.values())) - if not result: - pass + result = action.process(list(containers_by_id.values())) + if result: + self.data_changed.emit() - elif isinstance(result, (list, set)): + if isinstance(result, (list, set)): self._select_items_by_action(result) elif isinstance(result, dict): self._select_items_by_action( result["objectNames"], result["options"] ) - finally: - self.data_changed.emit() def _select_items_by_action(self, object_names, options=None): """Select view items by the result of action From 0b6e171558ee3846b72f2e182de93a94d41aeaa8 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Tue, 23 Sep 2025 13:27:21 +0200 Subject: [PATCH 469/595] Fix wrong key --- client/ayon_core/pipeline/load/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/load/utils.py b/client/ayon_core/pipeline/load/utils.py index a111444d48..d1731d4cf9 100644 --- a/client/ayon_core/pipeline/load/utils.py +++ b/client/ayon_core/pipeline/load/utils.py @@ -975,7 +975,7 @@ def get_outdated_containers( for container in filter_containers(containers, project_name).outdated: if ( not ignore_locked_versions - and container.get("locked_version") is True + and container.get("version_locked") is True ): continue outdated_containers.append(container) From 73641b5055e0e5b692f7691c82ca0fdf182dc625 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 23 Sep 2025 14:09:38 +0200 Subject: [PATCH 470/595] always fill ayon app name and tools --- client/ayon_core/host/interfaces/workfiles.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/client/ayon_core/host/interfaces/workfiles.py b/client/ayon_core/host/interfaces/workfiles.py index 587962351d..5dbf29bd7b 100644 --- a/client/ayon_core/host/interfaces/workfiles.py +++ b/client/ayon_core/host/interfaces/workfiles.py @@ -1564,12 +1564,16 @@ class IWorkfileHost(AbstractHost): # Use app group and app variant from applications addon (if available) app_addon_name = os.environ.get("AYON_APP_NAME") - if app_addon_name: - data["ayon_app_name"] = app_addon_name + if not app_addon_name: + app_addon_name = None - app_addon_tools = os.environ.get("AYON_APP_TOOLS") - if app_addon_tools: - data["ayon_app_tools"] = app_addon_tools.split(";") + app_addon_tools_s = os.environ.get("AYON_APP_TOOLS") + app_addon_tools = [] + if app_addon_tools_s: + app_addon_tools = app_addon_tools_s.split(";") + + data["ayon_app_name"] = app_addon_name + data["ayon_app_tools"] = app_addon_tools workfile_info = save_workfile_info( project_name, From a0d97701c9ddab0ab9977976cb8b0363f41d0798 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 24 Sep 2025 12:25:36 +0200 Subject: [PATCH 471/595] use correct key to get action label --- client/ayon_core/tools/launcher/ui/actions_widget.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/launcher/ui/actions_widget.py b/client/ayon_core/tools/launcher/ui/actions_widget.py index 67a8bca787..31b303ca2b 100644 --- a/client/ayon_core/tools/launcher/ui/actions_widget.py +++ b/client/ayon_core/tools/launcher/ui/actions_widget.py @@ -990,7 +990,7 @@ class ActionsWidget(QtWidgets.QWidget): event["addon_name"], event["addon_version"], ), - event["action_label"], + event["full_label"], form_data, ) From e5fd51f6935d25ec4d8383d12adcc5d5d37f56bc Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 26 Sep 2025 15:00:00 +0200 Subject: [PATCH 472/595] remove milestone versions --- client/ayon_core/addon/base.py | 84 ++-------------------------------- 1 file changed, 4 insertions(+), 80 deletions(-) diff --git a/client/ayon_core/addon/base.py b/client/ayon_core/addon/base.py index 70bb9dca40..55b157832c 100644 --- a/client/ayon_core/addon/base.py +++ b/client/ayon_core/addon/base.py @@ -39,33 +39,6 @@ IGNORED_DEFAULT_FILENAMES = { "__init__.py", } -# When addon was moved from ayon-core codebase -# - this is used to log the missing addon -MOVED_ADDON_MILESTONE_VERSIONS = { - "aftereffects": VersionInfo(0, 2, 0), - "applications": VersionInfo(0, 2, 0), - "blender": VersionInfo(0, 2, 0), - "celaction": VersionInfo(0, 2, 0), - "clockify": VersionInfo(0, 2, 0), - "deadline": VersionInfo(0, 2, 0), - "flame": VersionInfo(0, 2, 0), - "fusion": VersionInfo(0, 2, 0), - "harmony": VersionInfo(0, 2, 0), - "hiero": VersionInfo(0, 2, 0), - "max": VersionInfo(0, 2, 0), - "photoshop": VersionInfo(0, 2, 0), - "timers_manager": VersionInfo(0, 2, 0), - "traypublisher": VersionInfo(0, 2, 0), - "tvpaint": VersionInfo(0, 2, 0), - "maya": VersionInfo(0, 2, 0), - "nuke": VersionInfo(0, 2, 0), - "resolve": VersionInfo(0, 2, 0), - "royalrender": VersionInfo(0, 2, 0), - "substancepainter": VersionInfo(0, 2, 0), - "houdini": VersionInfo(0, 3, 0), - "unreal": VersionInfo(0, 2, 0), -} - class ProcessPreparationError(Exception): """Exception that can be used when process preparation failed. @@ -215,45 +188,6 @@ def _get_ayon_addons_information(bundle_info): return output -def _handle_moved_addons(addon_name, milestone_version, log): - """Log message that addon version is not compatible with current core. - - The function can return path to addon client code, but that can happen - only if ayon-core is used from code (for development), but still - logs a warning. - - Args: - addon_name (str): Addon name. - milestone_version (str): Milestone addon version. - log (logging.Logger): Logger object. - - Returns: - Union[str, None]: Addon dir or None. - """ - # Handle addons which were moved out of ayon-core - # - Try to fix it by loading it directly from server addons dir in - # ayon-core repository. But that will work only if ayon-core is - # used from code. - addon_dir = os.path.join( - os.path.dirname(os.path.dirname(AYON_CORE_ROOT)), - "server_addon", - addon_name, - "client", - ) - if not os.path.exists(addon_dir): - log.error( - f"Addon '{addon_name}' is not available. Please update " - f"{addon_name} addon to '{milestone_version}' or higher." - ) - return None - - log.warning(( - "Please update '{}' addon to '{}' or higher." - " Using client code from ayon-core repository." - ).format(addon_name, milestone_version)) - return addon_dir - - def _load_ayon_addons(log): """Load AYON addons based on information from server. @@ -299,7 +233,6 @@ def _load_ayon_addons(log): use_dev_path = dev_addon_info.get("enabled", False) addon_dir = None - milestone_version = MOVED_ADDON_MILESTONE_VERSIONS.get(addon_name) if use_dev_path: addon_dir = dev_addon_info["path"] if addon_dir: @@ -308,19 +241,10 @@ def _load_ayon_addons(log): ) if not addon_dir or not os.path.exists(addon_dir): - log.warning(( - "Dev addon {} {} path does not exists. Path \"{}\"" - ).format(addon_name, addon_version, addon_dir)) - continue - - elif ( - milestone_version is not None - and VersionInfo.parse(addon_version) < milestone_version - ): - addon_dir = _handle_moved_addons( - addon_name, milestone_version, log - ) - if not addon_dir: + log.warning( + f"Dev addon {addon_name} {addon_version} path" + f" does not exists. Path \"{addon_dir}\"" + ) continue elif addons_dir_exists: From 7368ddfdfb7d9cd11188bc40e779b4fbf6066cec Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 26 Sep 2025 15:00:59 +0200 Subject: [PATCH 473/595] use f-string --- client/ayon_core/addon/base.py | 46 +++++++++++++++++----------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/client/ayon_core/addon/base.py b/client/ayon_core/addon/base.py index 55b157832c..e57593c779 100644 --- a/client/ayon_core/addon/base.py +++ b/client/ayon_core/addon/base.py @@ -217,9 +217,8 @@ def _load_ayon_addons(log): addons_dir_exists = os.path.exists(addons_dir) if not addons_dir_exists: - log.warning("Addons directory does not exists. Path \"{}\"".format( - addons_dir - )) + log.warning( + f"Addons directory does not exists. Path \"{addons_dir}\"") for addon_info in addons_info: addon_name = addon_info["name"] @@ -248,12 +247,13 @@ def _load_ayon_addons(log): continue elif addons_dir_exists: - folder_name = "{}_{}".format(addon_name, addon_version) + folder_name = f"{addon_name}_{addon_version}" addon_dir = os.path.join(addons_dir, folder_name) if not os.path.exists(addon_dir): - log.debug(( - "No localized client code found for addon {} {}." - ).format(addon_name, addon_version)) + log.debug( + "No localized client code found" + f" for addon {addon_name} {addon_version}." + ) continue if not addon_dir: @@ -292,24 +292,22 @@ def _load_ayon_addons(log): except BaseException: log.warning( - "Failed to import \"{}\"".format(basename), + f"Failed to import \"{basename}\"", exc_info=True ) if not addon_modules: - log.warning("Addon {} {} has no content to import".format( - addon_name, addon_version - )) + log.warning( + f"Addon {addon_name} {addon_version} has no content to import" + ) continue if len(addon_modules) > 1: - log.warning(( - "Multiple modules ({}) were found in addon '{}' in dir {}." - ).format( - ", ".join([m.__name__ for m in addon_modules]), - addon_name, - addon_dir, - )) + joined_modules = ", ".join([m.__name__ for m in addon_modules]) + log.warning( + f"Multiple modules ({joined_modules}) were found in" + f" addon '{addon_name}' in dir {addon_dir}." + ) all_addon_modules.extend(addon_modules) return all_addon_modules @@ -713,7 +711,7 @@ class AddonsManager: time_start = time.time() prev_start_time = time_start enabled_addons = self.get_enabled_addons() - self.log.debug("Has {} enabled addons.".format(len(enabled_addons))) + self.log.debug(f"Has {len(enabled_addons)} enabled addons.") for addon in enabled_addons: try: addon.connect_with_addons(enabled_addons) @@ -814,7 +812,7 @@ class AddonsManager: # Report unknown keys (Developing purposes) if unknown_keys_by_addon: expected_keys = ", ".join([ - "\"{}\"".format(key) for key in output.keys() + f'"{key}"' for key in output.keys() ]) msg_template = "Addon: \"{}\" - got key {}" msg_items = [] @@ -823,9 +821,11 @@ class AddonsManager: "\"{}\"".format(key) for key in keys ]) msg_items.append(msg_template.format(addon_name, joined_keys)) - self.log.warning(( - "Expected keys from `get_plugin_paths` are {}. {}" - ).format(expected_keys, " | ".join(msg_items))) + joined_items = " | ".join(msg_items) + self.log.warning( + f"Expected keys from `get_plugin_paths` are {expected_keys}." + f" {joined_items}" + ) return output def _collect_plugin_paths(self, method_name, *args, **kwargs): From 1caedb841f6786607d71ece1c4fd94544616ff35 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 26 Sep 2025 15:03:57 +0200 Subject: [PATCH 474/595] add type hints --- client/ayon_core/addon/base.py | 171 ++++++++++++++++++--------------- 1 file changed, 96 insertions(+), 75 deletions(-) diff --git a/client/ayon_core/addon/base.py b/client/ayon_core/addon/base.py index e57593c779..1d1562f543 100644 --- a/client/ayon_core/addon/base.py +++ b/client/ayon_core/addon/base.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- """Base class for AYON addons.""" +from __future__ import annotations + import copy import os import sys @@ -11,10 +13,11 @@ import collections import warnings from uuid import uuid4 from abc import ABC, abstractmethod -from typing import Optional +from types import ModuleType +import typing +from typing import Optional, Any, Union import ayon_api -from semver import VersionInfo from ayon_core import AYON_CORE_ROOT from ayon_core.lib import ( @@ -30,6 +33,11 @@ from .interfaces import ( IHostAddon, ) +if typing.TYPE_CHECKING: + import click + + from ayon_core.host import HostBase + # Files that will be always ignored on addons import IGNORED_FILENAMES = { "__pycache__", @@ -101,7 +109,7 @@ class _LoadCache: addon_modules = [] -def load_addons(force=False): +def load_addons(force: bool = False) -> None: """Load AYON addons as python modules. Modules does not load only classes (like in Interfaces) because there must @@ -128,7 +136,7 @@ def load_addons(force=False): time.sleep(0.1) -def _get_ayon_bundle_data(): +def _get_ayon_bundle_data() -> Optional[dict[str, Any]]: studio_bundle_name = os.environ.get("AYON_STUDIO_BUNDLE_NAME") project_bundle_name = os.getenv("AYON_BUNDLE_NAME") bundles = ayon_api.get_bundles()["bundles"] @@ -158,18 +166,21 @@ def _get_ayon_bundle_data(): return project_bundle -def _get_ayon_addons_information(bundle_info): +def _get_ayon_addons_information( + bundle_info: dict[str, Any] +) -> list[dict[str, Any]]: """Receive information about addons to use from server. Todos: Actually ask server for the information. Allow project name as optional argument to be able to query information about used addons for specific project. + Wrap versions into an object. Returns: - List[Dict[str, Any]]: List of addon information to use. - """ + list[dict[str, Any]]: List of addon information to use. + """ output = [] bundle_addons = bundle_info["addons"] addons = ayon_api.get_addons_info()["addons"] @@ -188,7 +199,7 @@ def _get_ayon_addons_information(bundle_info): return output -def _load_ayon_addons(log): +def _load_ayon_addons(log: logging.Logger) -> list[ModuleType]: """Load AYON addons based on information from server. This function should not trigger downloading of any addons but only use @@ -198,6 +209,9 @@ def _load_ayon_addons(log): Args: log (logging.Logger): Logger object. + Returns: + list[ModuleType]: Loaded addon modules. + """ all_addon_modules = [] bundle_info = _get_ayon_bundle_data() @@ -325,20 +339,21 @@ class AYONAddon(ABC): Attributes: enabled (bool): Is addon enabled. - name (str): Addon name. Args: manager (AddonsManager): Manager object who discovered addon. settings (dict[str, Any]): AYON settings. """ - enabled = True + enabled: bool = True _id = None # Temporary variable for 'version' property _missing_version_warned = False - def __init__(self, manager, settings): + def __init__( + self, manager: AddonsManager, settings: dict[str, Any] + ) -> None: self.manager = manager self.log = Logger.get_logger(self.name) @@ -346,7 +361,7 @@ class AYONAddon(ABC): self.initialize(settings) @property - def id(self): + def id(self) -> str: """Random id of addon object. Returns: @@ -359,7 +374,7 @@ class AYONAddon(ABC): @property @abstractmethod - def name(self): + def name(self) -> str: """Addon name. Returns: @@ -369,7 +384,7 @@ class AYONAddon(ABC): pass @property - def version(self): + def version(self) -> str: """Addon version. Todo: @@ -388,7 +403,7 @@ class AYONAddon(ABC): ) return "0.0.0" - def initialize(self, settings): + def initialize(self, settings: dict[str, Any]) -> None: """Initialization of addon attributes. It is not recommended to override __init__ that's why specific method @@ -400,7 +415,7 @@ class AYONAddon(ABC): """ pass - def connect_with_addons(self, enabled_addons): + def connect_with_addons(self, enabled_addons: list[AYONAddon]) -> None: """Connect with other enabled addons. Args: @@ -411,7 +426,7 @@ class AYONAddon(ABC): def ensure_is_process_ready( self, process_context: ProcessContext - ): + ) -> None: """Make sure addon is prepared for a process. This method is called when some action makes sure that addon has set @@ -432,7 +447,7 @@ class AYONAddon(ABC): """ pass - def get_global_environments(self): + def get_global_environments(self) -> dict[str, str]: """Get global environments values of addon. Environment variables that can be get only from system settings. @@ -443,20 +458,12 @@ class AYONAddon(ABC): """ return {} - def modify_application_launch_arguments(self, application, env): - """Give option to modify launch environments before application launch. - - Implementation is optional. To change environments modify passed - dictionary of environments. - - Args: - application (Application): Application that is launched. - env (dict[str, str]): Current environment variables. - - """ - pass - - def on_host_install(self, host, host_name, project_name): + def on_host_install( + self, + host: HostBase, + host_name: str, + project_name: str, + ) -> None: """Host was installed which gives option to handle in-host logic. It is a good option to register in-host event callbacks which are @@ -467,7 +474,7 @@ class AYONAddon(ABC): to receive from 'host' object. Args: - host (Union[ModuleType, HostBase]): Access to installed/registered + host (HostBase): Access to installed/registered host object. host_name (str): Name of host. project_name (str): Project name which is main part of host @@ -476,7 +483,7 @@ class AYONAddon(ABC): """ pass - def cli(self, addon_click_group): + def cli(self, addon_click_group: click.Group) -> None: """Add commands to click group. The best practise is to create click group for whole addon which is @@ -507,15 +514,21 @@ class AYONAddon(ABC): class _AddonReportInfo: def __init__( - self, class_name, name, version, report_value_by_label - ): + self, + class_name: str, + name: str, + version: str, + report_value_by_label: dict[str, Optional[str]], + ) -> None: self.class_name = class_name self.name = name self.version = version self.report_value_by_label = report_value_by_label @classmethod - def from_addon(cls, addon, report): + def from_addon( + cls, addon: AYONAddon, report: dict[str, dict[str, int]] + ) -> "_AddonReportInfo": class_name = addon.__class__.__name__ report_value_by_label = { label: reported.get(class_name) @@ -542,29 +555,35 @@ class AddonsManager: _report_total_key = "Total" _log = None - def __init__(self, settings=None, initialize=True): + def __init__( + self, + settings: Optional[dict[str, Any]] = None, + initialize: bool = True, + ) -> None: self._settings = settings - self._addons = [] - self._addons_by_id = {} - self._addons_by_name = {} + self._addons: list[AYONAddon] = [] + self._addons_by_id: dict[str, AYONAddon] = {} + self._addons_by_name: dict[str, AYONAddon] = {} # For report of time consumption - self._report = {} + self._report: dict[str, dict[str, int]] = {} if initialize: self.initialize_addons() self.connect_addons() - def __getitem__(self, addon_name): + def __getitem__(self, addon_name: str) -> AYONAddon: return self._addons_by_name[addon_name] @property - def log(self): + def log(self) -> logging.Logger: if self._log is None: - self._log = logging.getLogger(self.__class__.__name__) + self._log = Logger.get_logger(self.__class__.__name__) return self._log - def get(self, addon_name, default=None): + def get( + self, addon_name: str, default: Optional[Any] = None + ) -> Union[AYONAddon, Any]: """Access addon by name. Args: @@ -578,18 +597,20 @@ class AddonsManager: return self._addons_by_name.get(addon_name, default) @property - def addons(self): + def addons(self) -> list[AYONAddon]: return list(self._addons) @property - def addons_by_id(self): + def addons_by_id(self) -> dict[str, AYONAddon]: return dict(self._addons_by_id) @property - def addons_by_name(self): + def addons_by_name(self) -> dict[str, AYONAddon]: return dict(self._addons_by_name) - def get_enabled_addon(self, addon_name, default=None): + def get_enabled_addon( + self, addon_name: str, default: Optional[Any] = None + ) -> Union[AYONAddon, Any]: """Fast access to enabled addon. If addon is available but is not enabled default value is returned. @@ -600,7 +621,7 @@ class AddonsManager: not enabled. Returns: - Union[AYONAddon, None]: Enabled addon found by name or None. + Union[AYONAddon, Any]: Enabled addon found by name or None. """ addon = self.get(addon_name) @@ -608,7 +629,7 @@ class AddonsManager: return addon return default - def get_enabled_addons(self): + def get_enabled_addons(self) -> list[AYONAddon]: """Enabled addons initialized by the manager. Returns: @@ -621,7 +642,7 @@ class AddonsManager: if addon.enabled ] - def initialize_addons(self): + def initialize_addons(self) -> None: """Import and initialize addons.""" # Make sure modules are loaded load_addons() @@ -702,7 +723,7 @@ class AddonsManager: report[self._report_total_key] = time.time() - time_start self._report["Initialization"] = report - def connect_addons(self): + def connect_addons(self) -> None: """Trigger connection with other enabled addons. Addons should handle their interfaces in `connect_with_addons`. @@ -730,7 +751,7 @@ class AddonsManager: report[self._report_total_key] = time.time() - time_start self._report["Connect modules"] = report - def collect_global_environments(self): + def collect_global_environments(self) -> dict[str, str]: """Helper to collect global environment variabled from modules. Returns: @@ -753,7 +774,7 @@ class AddonsManager: module_envs[key] = value return module_envs - def collect_plugin_paths(self): + def collect_plugin_paths(self) -> dict[str, list[str]]: """Helper to collect all plugins from modules inherited IPluginPaths. Unknown keys are logged out. @@ -828,7 +849,7 @@ class AddonsManager: ) return output - def _collect_plugin_paths(self, method_name, *args, **kwargs): + def _collect_plugin_paths(self, method_name: str, *args, **kwargs): output = [] for addon in self.get_enabled_addons(): # Skip addon that do not inherit from `IPluginPaths` @@ -859,7 +880,7 @@ class AddonsManager: output.extend(paths) return output - def collect_launcher_action_paths(self): + def collect_launcher_action_paths(self) -> list[str]: """Helper to collect launcher action paths from addons. Returns: @@ -874,16 +895,16 @@ class AddonsManager: output.insert(0, actions_dir) return output - def collect_create_plugin_paths(self, host_name): + def collect_create_plugin_paths(self, host_name: str) -> list[str]: """Helper to collect creator plugin paths from addons. Args: host_name (str): For which host are creators meant. Returns: - list: List of creator plugin paths. - """ + list[str]: List of creator plugin paths. + """ return self._collect_plugin_paths( "get_create_plugin_paths", host_name @@ -891,37 +912,37 @@ class AddonsManager: collect_creator_plugin_paths = collect_create_plugin_paths - def collect_load_plugin_paths(self, host_name): + def collect_load_plugin_paths(self, host_name: str) -> list[str]: """Helper to collect load plugin paths from addons. Args: host_name (str): For which host are load plugins meant. Returns: - list: List of load plugin paths. - """ + list[str]: List of load plugin paths. + """ return self._collect_plugin_paths( "get_load_plugin_paths", host_name ) - def collect_publish_plugin_paths(self, host_name): + def collect_publish_plugin_paths(self, host_name: str) -> list[str]: """Helper to collect load plugin paths from addons. Args: host_name (str): For which host are load plugins meant. Returns: - list: List of pyblish plugin paths. - """ + list[str]: List of pyblish plugin paths. + """ return self._collect_plugin_paths( "get_publish_plugin_paths", host_name ) - def collect_inventory_action_paths(self, host_name): + def collect_inventory_action_paths(self, host_name: str) -> list[str]: """Helper to collect load plugin paths from addons. Args: @@ -929,21 +950,21 @@ class AddonsManager: Returns: list: List of pyblish plugin paths. - """ + """ return self._collect_plugin_paths( "get_inventory_action_paths", host_name ) - def get_host_addon(self, host_name): + def get_host_addon(self, host_name: str) -> Optional[AYONAddon]: """Find host addon by host name. Args: host_name (str): Host name for which is found host addon. Returns: - Union[AYONAddon, None]: Found host addon by name or `None`. + Optional[AYONAddon]: Found host addon by name or `None`. """ for addon in self.get_enabled_addons(): @@ -954,21 +975,21 @@ class AddonsManager: return addon return None - def get_host_names(self): + def get_host_names(self) -> set[str]: """List of available host names based on host addons. Returns: - Iterable[str]: All available host names based on enabled addons + set[str]: All available host names based on enabled addons inheriting 'IHostAddon'. - """ + """ return { addon.host_name for addon in self.get_enabled_addons() if isinstance(addon, IHostAddon) } - def print_report(self): + def print_report(self) -> None: """Print out report of time spent on addons initialization parts. Reporting is not automated must be implemented for each initialization From 61011ecea0eb86f50813d39a9172e86d417c1c0d Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 2 Oct 2025 09:53:51 +0200 Subject: [PATCH 475/595] use ayon api implementation of mime type --- client/ayon_core/lib/transcoding.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/client/ayon_core/lib/transcoding.py b/client/ayon_core/lib/transcoding.py index b3958863fe..dd44d4a673 100644 --- a/client/ayon_core/lib/transcoding.py +++ b/client/ayon_core/lib/transcoding.py @@ -1519,12 +1519,24 @@ def get_media_mime_type(filepath: str) -> Optional[str]: Optional[str]: Mime type or None if is unknown mime type. """ + try: + from ayon_api.utils import ( + get_media_mime_type_for_content as _ayon_api_func + ) + except ImportError: + _ayon_api_func = None + if not filepath or not os.path.exists(filepath): return None with open(filepath, "rb") as stream: content = stream.read() + if _ayon_api_func is not None: + mime_type = _ayon_api_func(content) + if mime_type is not None: + return mime_type + content_len = len(content) # Pre-validation (largest definition check) # - hopefully there cannot be media defined in less than 12 bytes From ab058d15c524bd9ddaf9659f855be384408552b7 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 2 Oct 2025 09:59:40 +0200 Subject: [PATCH 476/595] copy implementation from ayon api --- client/ayon_core/lib/transcoding.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/client/ayon_core/lib/transcoding.py b/client/ayon_core/lib/transcoding.py index dd44d4a673..36a0caef27 100644 --- a/client/ayon_core/lib/transcoding.py +++ b/client/ayon_core/lib/transcoding.py @@ -1563,11 +1563,13 @@ def get_media_mime_type(filepath: str) -> Optional[str]: if b'xmlns="http://www.w3.org/2000/svg"' in content: return "image/svg+xml" - # JPEG, JFIF or Exif - if ( - content[0:4] == b"\xff\xd8\xff\xdb" - or content[6:10] in (b"JFIF", b"Exif") - ): + # JPEG + # - [0:2] is constant b"\xff\xd8" + # (ref. https://www.file-recovery.com/jpg-signature-format.htm) + # - [2:4] Marker identifier b"\xff{?}" + # (ref. https://www.disktuna.com/list-of-jpeg-markers/) + # NOTE: File ends with b"\xff\xd9" + if content[0:3] == b"\xff\xd8\xff": return "image/jpeg" # Webp From 71da4a02ecc923c93474b1dfdf7df4dfbacd9dc1 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 2 Oct 2025 10:11:50 +0200 Subject: [PATCH 477/595] added comments to safe import --- client/ayon_core/lib/transcoding.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/ayon_core/lib/transcoding.py b/client/ayon_core/lib/transcoding.py index 36a0caef27..75f0c8bc4d 100644 --- a/client/ayon_core/lib/transcoding.py +++ b/client/ayon_core/lib/transcoding.py @@ -1519,6 +1519,9 @@ def get_media_mime_type(filepath: str) -> Optional[str]: Optional[str]: Mime type or None if is unknown mime type. """ + # The implementation is identical or better with ayon_api >=1.1.0, + # which is used in AYON launcher >=1.3.0. + # NOTE Remove safe import when AYON launcher >=1.2.0. try: from ayon_api.utils import ( get_media_mime_type_for_content as _ayon_api_func From 0bdfc434579be121b207f61eb4c75408e54fbd3b Mon Sep 17 00:00:00 2001 From: Philippe Leprince Date: Thu, 2 Oct 2025 19:42:22 +0200 Subject: [PATCH 478/595] chore(deps): update Material Symbols to version 4.0.0 Updated Material Symbols font resources to version 4.0.0, including renaming font files, updating codepoints and JSON mappings, and modifying the initialization script to reference the new font name. BREAKING CHANGE: Font name changed from "MaterialSymbolsOutlined-Regular" to "MaterialSymbolsOutlined", which may affect code relying on the previous naming convention. Signed-off-by: Philippe Leprince --- .../MaterialSymbolsOutlined-Regular.ttf | Bin 854520 -> 0 bytes ...nts => MaterialSymbolsOutlined.codepoints} | 299 +++++++++++++++--- ...ular.json => MaterialSymbolsOutlined.json} | 299 +++++++++++++++--- .../resources/MaterialSymbolsOutlined.ttf | Bin 0 -> 5809884 bytes .../qtmaterialsymbols/resources/__init__.py | 24 +- 5 files changed, 502 insertions(+), 120 deletions(-) delete mode 100644 client/ayon_core/vendor/python/qtmaterialsymbols/resources/MaterialSymbolsOutlined-Regular.ttf rename client/ayon_core/vendor/python/qtmaterialsymbols/resources/{MaterialSymbolsOutlined-Regular.codepoints => MaterialSymbolsOutlined.codepoints} (93%) rename client/ayon_core/vendor/python/qtmaterialsymbols/resources/{MaterialSymbolsOutlined-Regular.json => MaterialSymbolsOutlined.json} (93%) create mode 100644 client/ayon_core/vendor/python/qtmaterialsymbols/resources/MaterialSymbolsOutlined.ttf diff --git a/client/ayon_core/vendor/python/qtmaterialsymbols/resources/MaterialSymbolsOutlined-Regular.ttf b/client/ayon_core/vendor/python/qtmaterialsymbols/resources/MaterialSymbolsOutlined-Regular.ttf deleted file mode 100644 index 26f767e075341d120b8df8fee226d6ba10f13f1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 854520 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

#ThaLj;JW6c8M%K2S#(-29Ram-FY@CW7`E5= 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 z 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 pJ@5m|BbUt#IM2l1R6 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

bVxP?U<`Y8x853}DZNABr9=>H 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 E`oE=YN{hJ+&*|TX=53j_c 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 z%0A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

1kAXLcE_xkhSji8 zWZv}1Bl{!OSN2cr-aXNOWp(7qaA(6+4V~d9!}ya=|Nha-pL*)@N5k5@ifdRnhbd9m zbpSiC-ID0U73#ygV}^C=8RI9B6eO~~D(7B9#3&kT)) zx+`v+)Q(NwSkWCC8;Y&1y~)hoRJ%5KSThdmHQ{Q#r?jWdyuS?(dUaUWa%30WF0&rZ zf1lj84S&zgZ6DHlCa=DF(tKrTdu{DaH`Uf&fB3LoS{>Flwx&|8=GVg2=)Na^X4k6B z@VAp~(B<Fkel&2n$kSIrtVwO#4m|1PZ{PD*`T5=WZDBJ`5!~iRHWt>fWJ}BPG9E z@@Hc1Qeb^&`cz;uBbynx&UwVi7K#H@g$DGh6z8RS*PP-Aj^C;@?D9k5L~PUz1$hHXf<(Y|-kq zYnnScn$1s_Rkd_ERmowrmm}H?X1_D(9ZU{ekCo@lAh~Tj%o1;1-t7Il=VocTYr_{q z*G0+7LVNO}Hl>zHJ1kY1STv2(P7;Zwmy7*uxJ+aKP~xzMAz52P0f(}VJ{cX#*w-B)LK^>r8t^8*LA{7267rrx8r(FX9?}k$x4VQp%Q6P$r zihVL&l0%!nb1>P-Sf_g=Nw^0}e}mi{vHqd3uuKPn|57xQs86j^Lzhf{z{jkaFMNui zCO1#6Rr^mZT>A~JXUl=9!SUJg@wbc(P94~iu5PNDsuH*AbUIXB);ikOHr7&B9fCW! zCARU<$jHoatflVnn5})&gNa7bdp~SPPgz)rv4mX%`*gmZyye z;^TpYxF6>9N0D>OAd`3~iq0sp0Q1^|2qaB1x1Lp`lIUmlf_dtNOl~rhIsf|n`Ah~+ zG6)U1a928g7ab^R^RBzn`tcWD_?OK2^X4m=OfHwnm>2NP^ZKUrU3Z!6D2Fe@E4EgXeu)(Wg#s2ybQQ?wWzf7APR?#pJjBK+1%Nx>leG9cP-mNVwGcVMq^?TT;n78t(Dr7EJRi)F~ z{2ZE}H$Dv^lA~mxh%irr?OzE+tABxQvm9#|u33l^IDzEv4e?`Kz{rX)cu4^%NSJsr z4a<8;v80tJakOaasy3t)Ed7arRsF}nX$ z(`q27%@jh*nOM4^*)T07RP1YMab`OJ_(^M&iTtdHw3D$puf59H7j;i%fvGMR;=8EPgcptEJADcmX=1N&Ux zKMS*>OwZCwV%SMBEcluBPHRg?-jBvhp5qoNH_9}+CS1VvY|j?2$S5BhjdqBX6icp- z4(Dq(i1meg#=^pSR0kA=N!B%5lNoGIi$J5P42L|!&sbuE(GRQ?a$Xd|BNiOD=$QU% z=3PwilDv#8c+rPL{S87Mx)e*xM$$nUkaWGDa6Q*95^e32rMW#~J$~1EwCy5hYhlW0 zUsIY~u}AayBE+K&-H){=FYZ^t_#!a67*uS|n--kcM=n4;IUg&t9*G9V^DtiooiGLl za&zVdhqC5{Idq^vY#Zv(g5zcc$DM>WiqHVoP2tUEIu2QMxV-D;UC{?R77gNohOxH2 zs}P|3%Mfz0L~v7&8j7|%IOO0vl_+rDajwClndPF%F$!FyA8EGK0S3iJ^n%Jy` zm{TA&U_(TtnP@wZ2bE?Cz4zSaA9LXaF<@Zx>}`2N>AU4XLcx~8log$~BI^5g>_e7d z7(n@AT5ktrUZZsib)0J0rl3t|4v`!Qyqvk8(Mr1~CcDe8-nj0HNdJ~?gOnVD>snja zZKKL$zEX%cv=f(fcTWsm(bK7K?T2bf*-_cLZe8mj^(02md#BoA9Vauo0sib_NJfib zqxqq&^g`!@iBfZ#BeM!q1`S4rw!hzEa5Q8-peY>lf5VYHZ%NYEoJ(2v4eaDr3u z90Fl+!oNOwUM$Lf-k+Zoz2|V=e0`o(p7HCcl}!OiCm9=Y_~z^!7N0|i1dd8re8o6! zydqF+K3oXrA@p3PFa|!zvj}YV&5{kPYh^Gndla!yNDWk)2E$Zn!x3i!AA~VaxB&Vs zVJ!sMqdb`kCF8Pmqnr`p3Dln@+sn`dc!*D0Yz5jQ3YB#U%XqJMw(OUXj*6*Lh~1Iu6+**W08S;I}xmj-phfWB{+Vb4NODnVz1F?NeSFf zkwgUB9JYxRQl`=E#R#-x-m+-V#W?e+ESga*Jj=!{=tv2f?!JWQ=jwO%55zKIHMVJN zw^8AAz?O}0Tpy8^+G0_!f1%vjV`Ujw?1zp5YLD^(sH_!=hYF(c>defT`YVdkr1}QF3R1dZ!@gP&uHxgG zdtF!a4|&Y>Sph0c78%Vat_6=PUdJPtOV$M|NCFtUr$q4(KQKt^kyASP47&=9Px)|1 z)02X@7a0wLsqi?*)a9LN55jh|8fzNmzG(kSg+v(n3i($1(;tjKciq@8OA7I?cKrMN z(A-~?kDZB@&@2K;k&%jxfsI^gW_4JWJxKUx;y9At^AtoJ8j;x|bb3rAD`8NVryz4q z!M5rMZVv?}9Zhk~{slvSW13Bx*n!b}3W-~9`-|Vdd;IR7+nQqP2T1M0`upMtRJj1eHhl}(nGA>C{WJprMS!$&?vZi5X+RC&WoW+LY(PgYRE;s07 za7m}Eh39HvV6QxV^PRn!&lg{LYYjd4jCNo7Uugevr;#yVEWG@*yLy>X`3%<}WUZ1B zt6+r z(o!k9qWNe@D;rw%L1)!jH5?m@PQ^kqLqSXZ|%b~5RbOPe;puvbwRnE&OM63E59`y z4gRk##FmYNkYAyk)!e5-PZ5V0C$cbouVRN!Q;nLbCpYHoGmDmRu(vJ$+m7y$dz{O zn6GHLE;yv`lE|+0UhMzNpgU%_R_ING^cwihZbNZc-PB2NfCV^l&JI}>Mr18@TW-6J zZPRH~$l+w@Pr}L;Z-Ko{yZrCmrnWRrVI*be+K`Zw>GBrspA7R0)h=a;$t=p$=7mI4 z%93ShbH@9E-_Yg^wD704q0O;Av5$ji?uFx#N}(f!lkpgWyyM6?9F1EH!Go+2u9W9T<}^JfX(Kl`cBi)8{Ifg9TwG$E9no3ZCzz7UFweSIkuuJLi1T7uwnN@$ zS%OHEA#!*dC*wk+;WX?lmaOn)IM;zRRXZlTBX4AyjI6@%m|OEKvwpuMhD-+LucYoU?!d10rR?_6s> znQ*ZMo5CUw&N8)X$`tDiAGmJeceyuXFky#P<9tWITa6*Du=W79=SG?nm=7=g*;J-P z`0@}`b_6@&6>78Kc~l|mva&8EpAejke+S7sb9@Fr0G=A|d62WJ&145BCkF>72k)CS zbr7cD6f3`r8|D?ky9{_1g9J>X#P4DCR_==A>A-e;e)k8~tEq4VAQ`+grpKC*mt_F8MNz1G@muZM@9 zn&9XGMFFBHI)4_tO{8$4#4MImAp+Q|n8q(Sws1YE&t~~gRglr(67J;1>N`3-XM+oh zMjEF^)d9_E-FEC)_W8N7AplC4``|49;mqZ+B@{a%{EZZxP>V&pih_-T6kJ8A%&{Pv^E&v5o9Uc$fSNJ}z}NQ!{IR-OnZTnIQL%}FaZ zniBT2Zx*7XEfj22&I*lrg30Cwpt8LDATMvQ1<}gIDLJ*zijc=e15mTo;{j443+y}viPcA)C$a$DYLPkv=jG8lXR#=ZY zD<$8pf+VqbmP^K2L;*6`hPMEfWT^b2)t%$xV%rGHJHTL*#Q{)Az-Pr;oY@j4YuOj@4&ij~3BuIU#trvkm63dB~A9>a!A8gJO>qvVJ&KFa@~*m2Zh zx|JeaU=qT5(o5v%=$cVr>{vMe`Ds1>$v98t3tB$011|EH@YMQrI1e9 zoE+qSK(Uj^nP9jd@-6+`Ghy(kINTNcS$<%I(sL9K&K6+h%|feEuQsr0bU)vig>m8NWfXbl}OX15F< zJvzLFwQ@xQc`qdeaur(B;*ao+5tuW|AtsJ)ocpVAln3a>x%Ug4WpA{M8FPp!iWaw? zZ$6uztVqTnwjk?KBO0BF+`NTCLc&XEE-&FP#0n;qy<$nxRRGh$OXJgIAHXOOACMoy zI|z^8>?EC8u~+y7O_T_KGBQr$eq8Z8Fy?>6ks9uFY-j69e>w?3XYs(BQ$Y-@(13LG zm^z?M2N7847)hQ6wDKb?a=df*nay|R(Laj5n8mUsKj1nxSaBuRFTn5Tu z42abv?DlcbI4{oEPKqM;)HipV$x)B8>w42PfYWbXM+Xh7BoSTF^PE~xeaNw78otV z2NCl}8jU*74UuYRKp6kjmsJlCHFg|8^!14@f3*5KkZb{o97hU|h>zqdpa(TsfVkiv zHYtv>aR-hbh?Qy*wG`PzUm$);@-uCek^}a{pafVL=QyS-o$FdFqMl?A3I{7AbB<-# zR98<=xD9JAh{n~e6VpDQ@sr#!y@&=M_UIlR>OG9u@J>qASAAh9c|-0FI!^|zMd(*t zc1a+DdB%0K+ilNSHWTe08`fsCspPJx@lWh8^p;zHrSmqo*|9O8Up+RQZ9S4oE@O?T z!pzvMKw1Leg-pP@6s|92ST5$qv!9{{x9Sk=ylv54ztVPt)XKBBp_ww(Rd7lf%<);t znV@o(qRIwU=1iN#5{k$kHYw{On3F6dAO+*Qz=i2mb3xQ`1y6zg{wO-yf?7+-qM^@&_T3>znvOiWLV zPi$DdG=6ysRGi}I4Kyttq=@U()R4NCRV5YY=SVsW*)q9%|}ebiG($`o3aP=V@ds0 zay0-4d+b6usLvhek90gSg@=`p$4=*ouhhSSa&A^q!8f@o`-`-b=kiWjh^#+O0$b%u zPDRQBvsI3mAGXb0E5^Scz5w26fj_mJx6}{KS3)ivR(C=6AfG&P*-3!uV6(FTuq2F~ zz&U{tlj?vY2MU^F6#y>3s4mP2Xego;c{k@xsbD^JxCBY2QhdLq+DpqolT$QTP)kG; zN@KCCCN^_Hc7QKeQcMz_2vn0hEFc8Nc8(?F6^6+fgiyxwO-cP2INJxe!6@P_c5xwv zY*E;@rf8xvcQJFqNfi%9cqlmD@qdmQH(o?KkbhoA0Qn;7BN>hGxx64*FE%mwl5hc0;__Lo#U3H24z$xF2Zx7@pF?EZ`%U$T8m z_9T^JD)s$HH%_m*6stjwv;dY+J8aYQU=Q_!3-atoaM7{X6;zfFT0SThIZ)&Qq4g-^ zW0A>`s~{lzc;(PDr-)iwGdvWCbE$%i1LH*Q{0&N~CBd$#0`vec38KNFa)SIl4$gu4 zD8M-~s!oDXbnqPZ$s5wgt0=tbkxi-l5ifc%<>*l;w-kyLp5yjjL_U~&1A00NM&M(T zx00ozVY40?ZAthR0Z)W$N>pUSxz8i!8IZgNh~H#^h)38A{h63hlGchWl1D=F%6ISV zxct=^*Lp7XGzQiL8a>7f^liRB$Ks*-5jN(Ooj5P7RV+Ks6ss?rSTZ(me6%AHm82UU z3n6}mhqDeg`)atzE<>f$CrUnF@>PgrWd_1jA~qE2?Ij->xx@y0d(fwJ0PP#_i<~Rk z$GXk6$^)cmO+jxypNn-~xi1pKYXf2wyjmazs0nDDHkJ(H7 z@fbpvZ(xbo6VT544PJ)qsaq61&I21oz%f^dDhFA*0MbOIF@3HS5aYGUcv=q;UrvyE zEX9EaC6Mc~sSjc&X;R>-974X!z6E!~gKPeMt$9DpI=(=nf?!DeZ<44Qr(H?L=_^TQ z*ReV#zXp3DjqI{k2pJKHw;r+BJH%qMgqb28=Gs!KSd-0x2wJmPFEJZZAL|GhIt!?& zt*wE~Ko~D_yQqgHy}DMFmfr7=T!2>v-owEuoS*xBEkQll;xle0RSzd9Z-pklvu^k3 zs;-KN|Nhd_m3Yy6C>0y47$VFO?;)9z)3v?^HQ{k&G3 zIRE!WxKRq(g1GX$=@H^3P+uRwYtd*$OHJMS?q#bgR(hKn8yiEFu`1WOvt&$)e-U3k z&|240(^c2s-y5q9EN()>`N|gB%t$(tTY>t!7T_J#2{?c7(`O8LrZ~Lzs;h=(6yY9} zO3-UIq^8uHvu8_vd)M&v^l;a9#FVgG?{`S2BJ!9~t$x=5e^GcWwoHs+%PFx` zuaMgeH#s=xQtd~=2mA_gRIY@Qfa@b3!`h^D%+gQ<$GfOgFEnj2n;@l^mQ|FlNF+2Z z(Y36!qO6pEu&j$dNUXpID@?aTaVnK{%C|VC9FtR^dm}rp3y#Pwv z?}P%U_yD0=TNY{Vj!H;TBf12qe3TgpzQU7u>3rD0F3ki+q7KoTr+dg(Mz;D6Z(A~RG5Qy84FaRn0;zk z#iN+vj8#piTxv;xT&ctdFF+xCRK=-8LsG;N1iUx|$BJ{|CJ#QwI<&Z_pqq@+cn{3s z62nG!jMdQ*jKWUt?yu8-!RuVuE--4U=7@|g=-Q%$*;#W@=DV>72GQ4n)}))qiVy9@ zF<}B8dh$C8LLoVu6gD^lH;y&0sAEI%1 zbX`-|#6(xqcJyt*qQnWN4wn&~dAa!7j5{`oyCVU}V;g}O=?fM3pp?eMW2&>$1vtJC zRmY|)P@dK~;IXZ4VO?!>GP?@U+_sfCpCkgJ^1bVJKgq$SA9?D`;XkpwvZMN=9$?!(&>!op&r+|QbSrMXG4n|siXp?Zs>BSq3DqRC1g;Iw_IpU z7n>;+ijzUxX-$&71LLW{s&rQA;LvF~6Ht^6w(DGR6nJ5wQauQ81R5Pevk z3f|_Y5b@`t!VoQ3a+5gPTtILPnQm${-*h9+ZBILTDUK3T6la{Yd!xsMLc9q4@2Koj z2p4wdu)a25Fj-w8@NCgc6~#95o=OTJbUaMO7DT3r*kXig-L^-hP3D>owx3H#bYtY? zjCN08QEqjc05*pHRk(>3ZG!t!Agu9$ajGc0DuSHQf!oBM|1(2nKA@f%ka<$Sh_`Gm zLJq;LP{`T+sTYSI9v&{vtr>ogLahiEc0tZ0Pj~)kzbQNp8xzmZ^{Q}-vk?E!iL;{V zc=RIXtnG^fHb$%5BX;Fse$=4TiZ!&q(c($|yo#2)d&FmN|(7*O%%c zb{A{d{_+)tRaKlnj=hR#d!aBL#Azf$yby8F474Z=h>R&ZI$NNOYRe@-owv1EVuQYZ zcZwjIk5>aI#wZy~mTC+XSt-$b~J97|;o9=r=lO%-B8A@l#J*q@O2o*m+JsxQ&B-xWhRm;1*GqdONfpwqh8 za=OoH0w3cQ^y61n2J3X2ptjJR?4 z?qT__I3fO4-iG@fv?#JuV#UV)$?mI0cJCg!YWMI}SGf+&+OE24Sl(pX5L0kXBye7S z0a~NGu7fa|E2};VM4k5bMy(i4em24FA-Mk|4yUK;#-Jzge@@mxp9MrLuyc0$>nhH< zWMSFW!&g_e)vUU7f%kH&;?i?@xGZCn*`AK2JH4JuR@JmsT|Kh9Y~dy6RMh!*YTKl) z5&2!F#vvsA2p3-Gbp5#5p46I#`vdxW`wJmCE7V!U;h>N7HD2+74_xslE~wakqI@U) z2LGZDTyez*TyQZ(75R>+_U(F<^}8DIhbgQ{C2g3O5VH=KoRx2JuZTfX_m)9X8!(Q; zBM9<{<2QSLaN@vS;?fX#VO7PVMHQxg8ZD}MB z_K;`X-jW)Bw#wgJjn-135ED9v{vw=jqKBOT0rL;|7`Q8d8)C6J+!*CqSTy( z+O9iB8pmShB=lcpyu_Qkdp1zwXS5qSRXiZ~tm7%=oJJtN6lJ^C&I9ROEXABs2rMT@ z5v+30MUEOjT)3p3Fr5!dt|um11?!D~HyZd+NeV|Lt&k4&utzDd_%iged5=?0czK6b z3ciBP6Tu;@8Hz=}MNFp(ZEk7bY86B@!vH&q@Bb#>ui)8;nAe`GT3&&SFZE-V|Xs;Rk#|8*_y%YIk8xu!xq;|~oZt*s*s zeO0YBHLX>LmR&bIeBH9X=mlL}7eATPo#D$Yho$br(VNB*QmcNN^Se_?sfQn+7%Mj{us6H9?0^D#mW8N;zqCp?XBA)RelvAJ4(`lG`q9RMi3<%~c+$onIz)>(_ z7^(DlCW*teF|Qr9t$+Rgt&iTkHYFn`(Jn|F3tLCRKThB{c-?M&dgA`C z>uYa*bgQRT9J)6+_aEm%a4+tTtFD{E%wot`x{HwA(UT-tcLi?hF*iHSVS-8wPFa_0c~9Y7=0-F% z{smQayLD_9aW& zBPnsw&4eRxc;@boiQ(m!Xe(`UOa4Zip`L}+W!+acT)2Gsg$-BA>$H-5M7%{vh9TuC z_TOphQb-LK=KVzhSLe#+{O`3cS-z~R;!;=0zhbIlYY}ifhTqv)7+S4KqNq#`1x0Lu z+_@2u=NW*IJ0Wx^4fQ&vh%ep3^F*?T_UW{<$2yO2?<_5LWt#1o`Y||*N`P9E#bzcb zgD{ampHF&|r2ZdxWiVIC#D!~9t1e};5)st-psxzg2%1avq+|7|`d9+leYkAmU&NP{ zEr|#M*_1a=EL1HMKO`E-wT?(jRE zl*>d=U?Jy1?rxhGbZ|J{FhjJWxZuLoW;rRfDBc@!xi_3Y^j9XI8UNh^TwUfo1~W4~ zv3Z9zCF2zKZ7Kl~vQ7zZ&UK-PAmrU4r{BRFlA}rFE^ESj5zJ1}1)K<90A`2% z(Ai1hf2Fk%$68mg(ms+4x^cb4u3@0@&|hoXy0uZ0UH;m{Dv=K^dSZ+9`bybCLimb( zBlZHw9#N1H0RmG{AaU$cFDC1V7XYQn;8WNepi3`OZctEl|%` zi0D5z6%M|>qGn;mD)vr%>BPF-#HI)6CTe+yJ|WhWo?OvJ+S0h`rXxNdmWj;vCM5gK zCr2eozQU+_L*eXeEHq!}lyDvg>;z12xOP7g)jGW4yHf z-$mg)AlUsQ6P3j;6K$6+tS(J`W_?RVuz{VAGDJ!AQKydSPpqm~ShM2wU>E^oyx$VT7m)5mx>!i#fvq9T95kK+S zs;Ix}8Gp3qCvp~kD*+}H2re{d9P8U;9Nb#w^;i9m$|@U9Y!gHb;1panwTP0T1DG8p zSJBScB5qs~7bTLY@O(@VpO*+_>cpsammPe!{> z>L($iT1|;{)hD_J^abAC7egFrb)Ptv+~oB_YGt1u*4CqB3`9oNeZy9iD#U^$KqXX6 z2j)hWN}v{Y3@XGI30nS_m_sc(DHHL+?-7ISI*4f*F>VXAR<3(#%=j2)jmxrWleO3f zQxIdHk}{38#QbZQ5M0#jp4lyQ&5Iw%G- zS+bN@{Ha24VJ{|+H*$7rm2fY$PO!F1K8Fnu0TM`Ejtq+Z2igo{*5l$gRVJs2`3Vm! zq<_>uJTX1}YHa!P*rr{(HccKnWZY~b2lerd`*@xOR~9$v-+;DArKXMX>DHfDtck~0 ze_5~EGd{kjQm=gCh8v#H_DJ-&fEKt=$T)@24dvx;b{p<7ucC;qUlYpPdE&%-zYJ1pnD*OC2V6Jk2`j~(pYdKZ2i5F9;0Pplr0!}aj zDMa#%gqROoIwH0g6oq<-qf@5&SEM_c&aV#oghUs83GH87B8{MKMWlICq9sEm%DJd% zWhK{Wt=D8{w=7K5Ypv1l>)_GL&Mxh)zD-9_O9tz7A7f>bWhj%Idhw=GT8~+|1>yiPnwaVmkfcO42;u`G z6Z%tziFDu}%oeyu0UJywy8iy_ zdT>fnhc2w7#OYk^~G%XED2R}uWj_Fw^{#HaXDpXgypn5Q$w zVXcg~NA90qTGNdG)_`4Xv@75YTux3M6Rh!yq*x(3|IVvNBZE0}6}u1aBHV zY!MiTcqZW$IQO#!**9}Q)XFSH&3F5fj|4$;KvbB-g(DC~q|(nE-+0Rg>#cpa+u$gX z{!=+X?b`=f5+!M9oK`D!+b&OoNuyblLM}IHf_I=LMkn^gRizlb1~wzHkI-)--&$(= zv<*3>Hz<3^F~RCmG@;Zu4A&99GK-MPI4olPh`_Kc;2=#W==&5i zX(PmACJQ0c0ppLycb*Bb#`xS|g5d#AA|Es=s32&a(>Gk*uMkvn6Hw^AbP(k7!(8)& zP!!H$UoLRXeytGu+J1Yf)5**m9ht0R##*=wdT90u!l|n@>vpyO0G;}bD z5ggQ_T5$sP!r+2UpzjeK>DVAqHxo-zSfH2yC_`9}PpFSZgBz4Pwo#<)l@7F%?1x=Q zxtt1DO7649AUrs_9dn{;CD<5m5mGkN0$aj*T5{He3Ll~FiZ}tfxHy35XB#atu={{? zAcuWP0*9caCB&4+`Bp!V%FHSO(~qH$KnH@5f{4)@n(SD#mu{iATmqU?x)a`XI&9T? z_=Fxvphk(bnPC9-h$cUb%wii3H2TS7IE<=3_Xs`I@hl7j_W%28H`GsN3&=%*GP3l}hS!)hvk~#7e{Lx*=R>T#h`{iOX0-Y;zEs z7*t#$g2mhcZ^j7xnI#N~U}(M<&gJtnBFY#Nvrb_P#JOB7;CzC-fkOAAqpud2bTUx{ z9R!G|u2BdyT6nz5M9z?c7B0gOKgjw%t?*$MMl`*&KPhw;mIJBLIzQ-i zcaX}lu@$9)JSd;n3ORBv+G<{mVAOX~NhR7Z#j)kFHcY;-Gn7cgTA%}`ZxALG;!xno zvV0-5(<2rLSdtheNg!(=l)2R(Cckiiqz?~SKyej47$#FI987kht)jmx6bcznheG?d z?%K8LQosMb#I{lrkub4db&162Vt+@NZU}ey7uPHebcRBmfu#+jt*xUC__=jopRV^^ zx(Xi}-*AXE(;o zaECH^q&Wk4LFmxMQYG-fn0L_@nxHa39N)xx!mvaz>!D} zsIYh(MG-9fqM; z%K&Xl1Gs0N%YflP2oqT#@Pyox>VV)ju8-j=<*gvxmWMGD3WmeMP*Pk*8`|3I>e}1b zE*L6Pwon95j=|NcvZ=jhjF&eBRx~!Q2yBwq39741rBbFbwQ@O8y5?Gxy+Fx0)xe>M zWLi{VD@sLhq{Xf=Dv4VJYsFSiNqj3?s?)13{ccO7p&?SnZnC6;(OLjqlNl^qt(fbC5Lam<)fV)OPibbZri$Vag(tb%5Z128zJ!6?5sDwP>g{NrpvKn6fxRR*Jm7GUainI4wtVdxrs{A2#LCpC5V$+rLWAkdfMQsL+E1^@!>8Yb8%QP&3mJD;v^P{+~Tn zQB_s()X)4?RsOa%e-*2n_`Te4%WL_>G`d<75mCW+Jeio7;0_!?g#d(>D94IWO&jPa zSO+%iS&|@Of@}PsV{OHn8_xh=lus9s0>9_=`QZmuWtW_JI~8+av{U1&4qX3BD(0L* znL=_8Qyp-AJD^m&?fohAT4NbCB1pk6@S1yFGRUgh`dVdA2^6 zdfvPSX#L1_gsXN0e3$*7#C*aUWMj}(*|o&gDeVC4DQu~UTcE??6vNLHn-w;zPE}6C zi=UgRuwe&S94_~9=NPf16pU1Ye1a2jLM_Gd(1i#AxdDb6Gxals0b~IaXVQqjfj}4n zzVsp;L*1N$Z7a0F{!ojCYG62cX9x+7qmvGO6LHT`B9HP?&(T=M_>RA#!v6(-Q&m-y zpN-hREIn#`?`YEKO}1OI)&-(2b7jLK#=&S;d3pzU-o^^n~I z>hMQ>fq0B_NM*CX2#44_;dRig53SvH&5K@6zEPPWScGW`(BqVoeI!r(NkK9dqQvRr zPCnACeX{XjK^nn*tCw5?8{*w?3q(mg^wa96gJdXsUuhe8e}-1}MHmk#Ko1A@OXEwo z;g}mWEYp$o#-;Q#!Y;WDr?8Wg4BNOgDqyA~>^b@wF`mJ#REalJ(xRR8e99aJC)Ko* z1ePlMsBV01^T^R#b#@*uN9i-} z;1GQwN!)eAkf++is59r-zEIe$d~wGVaD`+SCQVNd+N;Ot<--e=W@3)S8r&zgEO24y z{67eJ6s@BEb!o&{WcW|x1fu!G*@3u8$KCuUv=K|EjVWXZ;7eRXNq83{6ekX-i^G}& zTOKUv5NU&v4+J`Qi1B&#uO>|SEl@=b*uuBLzue2owH*uKYGMMJ8z^aos|X&9#QQ0n z2|YymDIiU*{UQE_M^;4S_L#KjV5FBq@Mx|FR}i+y8lw@$0ma-n;~*=PJAED9odg?MtP;^JE&O2S-ky(*A>D+UUQ{?4x&g zC!;%(cWu{iH-3d6l_i_ACzt3Uco4Oo`nd7=)DkxH*Gq2)5RHwjy`DhXaeL1LXQR%)L5r^9t)EEbi%q;xl`C1R+;^9?U0C zb_hm;Jw58tp{GBNPq-iG9~!&LuJ=YlFFfO|DKD?_K64@z@m^on)tG%tE8CeJ-^msb zx$x3|ek)5x8`y2ZR#sY8US4MWzBOn(+z=Hm7=91#V`E2*Nlc{;Wjhu;E%yQtDsB?M zRS+J7hn5LAT)_ah2}l6}s3clM9Y$DiC-~nX9#MLm0VEF&Hs*i<-sKeb*A!e<2OsBp$}yGN zq`z0tt2d8eeCdHq5GsORgQh?X;yXN_pBqgI-7=hP)KGwvjZQSUsl-e9AhMI@P!f$I z-7TW=z#U!uq?1}fbWS)G^eCLPN}50(=u84eUH}5SHYVTXf_8!fgZL^v@-zBjlF)`q z?0wQG2VwySz9ToqUXYQ5Spem9QK%ShQRMJMeclmm2xW1HC?jK#m<@}tm%NK`mJJQr zZ?Ng;r*gGe!<1FS7cu}}Nfh-ZLa&CVLu^5a-4tpr&;9@h)aRYE$FDU60zqxzll)Cc zTlm<5WvzPIj`PPZW7oI$ct;m3Z!u0i$-1MlB?~g>Q;ww7ROaIBe+Pg5>@s{)s}G#N zEfCW1oGoqL=U;a9xol;-(b^IxESGlh(_n#E3&c(*lnU|3P%n<{hN9$cu_2bC$HW@E zARzx`>(T|EPUxe?-}@J=Xt~%4Ty}%ROE;m^ds``?%7aJLF|nb@ zAN#aDXwH}^IT+BF?Evd}cnBo`*(;WBg1Cw=Amd>15%1xZE7&@q^+}ac>B1DPGAsjJ z`CGBCC;N}p@h0)+nh->>)+((}q?^#qQjDP|YG}OH* z2#PV4N}>KCm1PnlR)v9*j>gTA>DY{n&nbj3P#g^+3oOC*Hpo<%G{i;lg<0^7<2|*q zMu>Ixh}qNH21yMo%mc?JMecBfzRN(`PCB!aPxo?f5S0Wh;qAeF)=6gGNV!Roh53UW zN8I$}=C+#@f1hqzTAJKhb>0eU%GZ5f zwgwmI zX$FquU{HBpH({{iysDkpf=C`DG1!Z0CF?1orSQVD0jI*GfZ3da4zNO0OqcnIcVq$H zVKPR{%ILWhL1?gXv=IK;%0c+nmj zJR=%SIu;NJ8w=Z<0)SW@BqZeFVaOpxf+7?Nj0`|XlSR9shjkckQc|R$+v-GTTFKI+ z)+noOp0x9s=2tJpzXj|FA@4|;NwbCG>P9nCturXDK;^96X_Yd@i8saTRfSv&p@S(5 z6YgDUBia*+Fn5buy#aH7+}|J2sER&lgz16^2Sg%DOUEL|r;wV&WIOSL?gG0Bd6FgD zUNV;-y9_FX1J$RVa7m|kzHT`KF*i%Y;${4t-nc8lZF0*&v17$$zAfx%MF{I@ZUqS2 zRM^p>TDK|Vqyc#D(`5`u@IW$3OCu#1K}y<6k#f@^TB(!2)OKWGzdt10A68@r*UVUm zU>)KwVKw=zGva|Ovtsw5r`RvEe>&``Tc8_{-o~et&uS|5<8L-yX;KJ!@MgqU?9tht z+g1=|G51)cpYMQ)AYrV;9t2y)4l9x(2Lc3Jn63asYr#J;MS*D;${dY7B_VnlzH;mDAaw`&r$kk^f#iiPVT$;W8#jMv)4_NFw6o>2KN=W6@&MM2*| zV?3M)lEf(EcjFr;rw(jy;zCN`;)Q3a5wf%d>B|_^7EmfYG9oMwA5&?1YMQnrjF%O- zvhR1uhuEb{_dd0#^3kR(QwP{71spO{6%q00^$kz$UA(%9OEV|2DUV+eH;3eJo7mX@ z0Q0zSKJ?z2Y#L9DH>E@6|~L9V7{I2A_>b5 zE4?n-O&&fNGN)+!SEr-TmvI-rhwj6R&j{Ih<0a*=Hbt5Tdbvm(0;b~;pO|}iOX&rC zz?p3e5m=!#2Zt?45PZUfN~Aq-W3%G~0hwzw_6l}f03(1y{5@g?D@^7ehrwPAPpRnc zyBD67drBTE`B2Hnh()*oVq2CNo1}T5AGz%OV2kVrAHVBF#)MH#YdRM0>kDF-%ooU;l{4XQ!==J!MWqBF%30 zmiZ4H@Rxa!&2P_EBwClKsjHbV^~Y8UwV_v}qpZ~vtgH&49or(W$J1U>R$1L?bd8SE zl-93EEG|dTF20%YBit0UyAfu)Ue{Wul^LgSQD^sHX=!r5$6NYfT525%2@)e^8Y7hz zH5jm}j5@zzlyZNdtfDs59AkAnOq1jek)D!T;yg%scgciBa>OE$TcoqoGG`IvA}LMO zMOKp}7&!)W>8Zv!MHH3W!6y*(qgY7JH_fY!F3#Pff~C&8qLOJKOGQnhiBl`IXi?Cl zR*fX1N!ILgcJqRYGVLV7Lw@o7?&!g?($^)62@d@G#yig6MyUH60*xIY3Pl2#L|Nq9 zCCSBo>D-^LqbQuUI;L=*N<}WZ;KVOku6fAtQG}H zrui5c0EJ38orFfc3N0y(xHzATXjC%gz|8>cg;O|lqS zxRo#`MPyzJ6*nfR=7h*5hRf(ghXUgY6395^0L+tKI8tz;z@+nIWC2fjSGa?eMF)4G zkXIr$$o;wSP>|P)*omL~;|(c2a$!SY^75vD45#}D-okFImAvezD10D|il;O92b%E} z0u?fqP9&1aL?VqB-a(7d8c9KswIaSa3h!Dv zQVPxpf+>3v!(z}37+Hb>4TjNWw#PU;5JaEVFbb|KxfM`YUI)lgUb=!*5h+m;n>eyK zN5i2v2N1N0N2&aTAQ{NUn-}`wWLh{lQXU>DCvQ$B+TBzaU%1=jAsK>Fl%CxS<8?P9 zC{WMn*K9C`H(ZlMJth2-)=qMDoM;TcQdV7doM?9(Z(a#ECX7>r2&NoPO{(H&({CJR z0J(dF(@FJG#uz_gaUvu=dvx$j%bUgpVCQaKn4l`V1Z^a-aO-pU9D$2i<1}6Zce1e) zwG9HkhT0SKVTO``(j~g~CiZ+wEc*((K6hJ?q;9X!>rm9<4L{K00t<|V>kv-ugLuJ0 zG`Wq=VS1I9sH+Fo$At1ZrI;z663>Gy`C$)cI061tcTOat%qZIccdRG4yqZj+V>E=7 zjfQZYodF8@AQuJ^fN}oQi$Ir@fMH=!NXE^eZipY-Ux-|p%fP5tBmABMGl)V?e~S-c z8aC-j?e&sM0O#7i8hi^uCpmL56o`a}5P9OIz!pw#pQO6>rvBUWCAm5DNRW?q*GD!Z zas=}r=#RE5SpG|SD2MT_-RvBE=`wTmC*H3wPomN|RS00m>z0&lCjY6Nj}+@cuT*{P zWgghUzI;FAx5Qh-{ZM~V$#E|+}-c0Ah$uBLc|UbIbjQpNT{dHSzIB_xYuqTOGh zD4WxKRx(&z5>1E?z3Dpd0?9E1x8~8lfY_Rke@_2TpI(uA|MHZ?kINIuK_pKGV3u8h z>Yw`oww!_f9BE4vzy&VM52|@4YF1%#&|{3^@Z({;Cs)WIjJ7bzT@iah@fRZ+&AqZJ z!s;*ly~%@-0AhssGNA>nCkC%uVN9*KZc&%s$!0qBE{GDbPI#4Ca3!r1tZfKS<3wZQ zjW;$nCcC_$z#DG_Lf)=qJH)m`lss=Mx!8^&qfAg-l{H~lo2ar({0EF6%vY`)3RqZE zhF{`>2XR!7lY9Z=x(AJaK`Eg-&ehMoV;G-ju<0{Stc|b2;VMl8pj#DRiyE4MxV^2X ztgEZ6r_F$k26(|U60TZIKo498)a%z|egccEVo`|5>{caQq>wqZYbS3#j`cl!cM&n& zr(_QH_Vo4l^;smn{5;w|op(8@G&VzqCsju_PGlmF_-p+5N4%Bd1}UH%yX^jG6YZy( zqW51$HKC!Z$O6W(Fwmie>bZUm4bB zjg#+a^Gu!JUkl=XR^PsLUs-9-3PjOF0t-x{X6x8aeLN5g;cPfba zvMDn0B{!4*VhKOM)4>i%HZf0Qt)eXMJZ(mFxifMHDn1Rx;=Wjfr=6d`_%_o>zE0)v zv+Na7yqR=7sUeS&79U&e)K) z%>|?Olm(h`P(mj9Fp=ka5ezA6-f=M^!|ww#SX@nxT)vBhDz&9aq_fQj&jtQQ%uc0j zJ*et36!l`62>ZtAz<_Elw)c)>5pYQ(7Kr@Gj@t;r5WD=mjs5)_*KYIIEUT&9vt{eP zr%S{Bqem;d>;F)~W^()%KH;Zm$#q}6ti53of(qg)Qla_Qam}-FH%Y0`(f}I^FRM!A z`zbE4+!DDCix;>o7T!^+m^%#dfwT%IEorA}dGm`?MfFH{^8`9g0Td*}H$)DOt1$;E zy(qSh1AkosLP*bqfo_BWlZ&_ESVl_u3UbdwM*`uTgXg zS%Ric;nBve7~lB$W{&*y`t?8h@ay^?hW!<6mOgKVxvK5XMu)YZF5C6+^y9=HUjcKZt;D1sYh< zl-b=MNBO>KJ{xRg{k;dK>P_2>1U(cSHX74s9#CXxzc>vm53|||+^#u&i zS}8L-QfBh|d^i#xs5{^X1MZ%gQD z_7i*qSe;H^(ABp*Ml|==Ec_VEn4N4>!gzFoe*@o|sH|UjQPP-YUpIdJKDNpD`tOn# zEv&Dkr7bNT9)#Huhg^{wiX0teuz}2|jV+7EkbUF9V&|0c)IC;KE+(`hShg|I=UH&m zD9i={_M1N-Y=%EvR=Y^dlFzpZn1TLm*QjwLfma{~o3e8!t7bUzfF`*EfOnijb`Xg4a zi-nU5JQd74Pd#em@ccXyvLZTYiG-(uCV?4Mf4_r4x71W+5R=&03n=G+OcMT|_;!L3D24(+6gsPO?>QJ25FvXavR-VxJfU&w;6 zYy#x&U`~zc=0~q;J*QcaA$w9f=nLZu)gUpXLw1sERKbb1Z9L)@mBKMmBm(Bg3D{2X zgd6&XGQHZdhg+tGTYgt$lK(ZKKgMrrpL-^8aKy!&IZF!^90F!E6Nlb$c2aPrOyF)S zFbM*xZ%Zz6r!+Vvf#~rIxr~bdhE+J`bZ`pkNy#-VLOunG6zD)U4-XQLQYI^OIs&tY zJlMPi`L@k$U;!P#-c5=CFJt*NtZq;C4eg>xo&RBfN3HR9%P3rT`HJw$8U3E8abPK9 zhvZd5%8$Mz{D+cIt*&1je+PU$JmOh}7`rZ#{Srb4w1r?4?hOZUz5-z7!*tRK5Uel) zX9Ag_qO>Ez4%i?FL1sxf#_fJr;6N%OW{?MrJE(}1eTra)MB#+6D44za-lMGU6IVQ= z5U;y-<&3tI2RtXKj=K3B^GZGt7;nb6h=3O*KtKyzs_08?fM7H-S=g2pB4iO*XNT8* z?sH=!DLVU^C%8RS19=#6s`CI>u&1Cd#nQxiV@Cx}%9f+O)tSAm!vds9Vb8-)=^&p=!K~Bejd7 zG*C?`-cO4hl`F(5R{{1?Bpf=4lbsrm(dzGjLmo%uR2fRng7)4^HtsR*)3rsB`ih7B zZN`TrclfLS5s}AW+VDuf8V1)@=`5i^EA( zsVy+Y)`*hF6Y%e@<{3I5m$148(X3>I+rG0#f@xIC+j_Xl0F5?+EBOSlt^wag)f?XdE^!) zr>t6Gnf7vWXxHlmc#$SEU>3r-EK`15EHDE_p6k)#%}jD=aKv&R;<= ztR-R+i|P}QoLR~U9S2&4NM4eJ|{Xs^Z7egt-zD-rGxoTAXK z9POv)yDD+;;=U4bHo?_*njpztkx8)<(_CR^6d+C7@bw6{gX=ORkg*Ks1ul;N1$c$P zIm{s`2ne#N2nI-4D%41GRmKmxc}|7(@SwfRQWhlQhwMT|SaqUHm!%t!j0Re>o+ix^ z+t`ac;l`ijaNYBJm3lSth|&6TS@j#Hr5m7t*a34@kRrC`8e|+OElptm6k9C~-y3;c z?D*{;IICyaNkP^$)IfI!O%Bh+7&ebuO{knQ3MwDvl9BVnvC3Opb&c= zSjAm6Edzl_UqeG5+*Zc3^O%_I-(;lYCfQV9xoA;keG>voI5*EVOj6Lo?z=lI{ zxwSPNome>H9ePClK>zHdNg(Vkk>ZZ6 z7hIL5oGA)C$~?e9)DNyjFV#m)2q(`qAzTm06|9Es;q=T0u3-rWj%}@I zt|nx-l+ry{LQ2&@`<(|D-L+sDk|?Ui9|+k(+fB?1c5*ZqqPWw3E)|A`s1r@7R9%J{ zQ=F@^${+H>T?GSSgSV#g$*xtE6g7wK9sTf0k`z>UqMn3^9sr+*+4YAPibJKwY((y?Ue=o5=^4>shJAfZL^eLt!b+ z4!DA-s$Q%ZV6=B@bWH=qnvNC-Q`(ydIcmmEXdRX{%3oshPA!ncSs6CW$V^uR-4J*N zu~TT`CD}~2l~6^sl+9$~$$xD2#wRM@_rA&}Zj@JZg?kV$5DBbk;}Im+QeY@vgS4wl zq#t;f{;mi34{jEcv>xRx9ol2PvfIQa{snyL9?^DU0&`+xM)g|Px?*)knB+nK^@30< zK%<;JVjYUWiUpiBWQssHvTM=d8Mq(I)oEiA5dkgD<31Eu8b_N(_VC_ z)QO&L4UbJHr#Yeml1eD~Ruf(U3dP3cLm*J0vG;x2F(yYY^O=3lkrZ6Zz|TB$(@Hn- z&V@9y(AAEJ91|p|6~H_DHz_l_1fhQJxU+V5yeZS0=BXgw@QEWg#}#!m87B{WCErF) zwjTthIAZu-BhXb;@gU+m6B=B*X;aI_O)dDjX%h^)f`s_0a$nz>5W^29=*)qyFkv(& zJe ztdL5KsV0Si2AbOT?OG|;p8Z7iY1S9*FMu=Uy`_+~jQ^%6WvG&{g~`K1IQ)1p0M3r_*LyfymoMg3SkBb|!Et{NjbjvXPdwSzu)@UU`<+ zH`$*@rWsz{#JD4e7B*|sK>35PoaeE;=P0m7V5d=6Qi@_hP_?jR%+MbmbTTKW&-Skk z1S$sF!|{rW&f4|?e;}~tAM8HX3Xn2vk)C2HJzIwY95_Zx_Ujz?u(8h*2vt zI-6ruAqzcJG$+iDYlZac$LT5G#y}b($12dlt2WU(;PNn{oS;C&Wl;Pt(iWk*3JHV{ z;6E%E>eX=7?T(q6Hj*L7! zlHEm<Ma30Dv?8zhp3q5B{!Q};o3*Wcp$(@4w2I+0(9p?=S5O+wLTs|7+ z0e`Cfz=ZiI;4jlusQPCg9%b%3@qkFsDwa1C2h*G0S~_>(YrwP*QUoMB9&Gc!@`}GL zNJAlmZ2VOkeHMF|Dr44|MOYY;Sz0qN6YK%=2g`X@&LbePlGve*V~6I$LB$g4JHhCn z2fDZeVRABJN)$O)K<1$H&SwNT88>ugpXuAPrw=doqc8dqL_5V1nF+=G7d$LNeb^ZP zdtYDQ@2YErG^?rp9qgYpj>$0zDl~;5DLjtr^ZA@m4s0uCgrW;eXzM|O$C`yOHY~I~ zu_lQQTf{%Q;KeOB^^}**CTUi%ZC5Aj9^-ZH3Qi%jnih^dUErC+;?Nd&ifrRnzMn7Y zuoQ%;(gdG)6`{pWR98<=EWb3Wjs+1&4@@<#Zk?EJZDwA3Fl0>8-%KYIbrxBK;wdp$ zTjarkwFRVjdCo}C8>MyRC0~=`d!qG(_z3!;{dPn@_B)+zB8Eio#uLVv_K_#cn*zo< z3g}rwhkDdD3BuXHS1^vQ7{ykZOOIda zcgHNF>@I3giGK;X3`vSWSbXFd)hT$DjmaBu+be-8hS<9*Z~}R?P)v%=X80_Ngf)U| z4w#AzS!^hfQX)^{W;uM@8!6I{Tr9L2GBEwY)?uWWip6hsm<9nP`bf(dY zh24&2y%G$@MHI~!{xS10usP#gZby9mFg&p=Xs53DVo+E98VRVkac$d20pqcBY3aW` z)OBsVYmezcgBm>{;r7);7JM(0K_Qg#2fMD0FZ~PYjwvDCCx8;o&@E(a%Qwdf17Iv9 zy|IhB_I(;TKo#boQyc^fZ(pSD(|bcpLPbb(tu>x22s}HD*D6}7s#+?HC&@+47FW0U*)7ZdzTNyfYhmv&UNcaDRUQ+hxO9+EcNBwI^*$E{D4R0j zC=AALI(&9Su^^Y1Td495C4c7bQ@np1I%;Lp{zW})!H$NOwwkt{MSk|`nGklt zw7(_L)>GTi6zXXUwD`-;+3ujc+_$NkX*Mdi%)EZ4j z`j!q}ZmDP{_6JWdf^PeHbu-;sp|f{@{r~J+lA(y3FX3KbT7%%`!oaF(hy6t%Sbk%| zP#6TQM-C3D^Ee#bafreI_8w@9i_r%MsZKSBFs651Cdiz;RdazAzTGD zlz7qD`yvwSGAt2Vwk%}4l0kmm!0FR4sqH7aJT3P*Igj|i5g-xFP00bZm?5$N%|Nd> zk%x}-2Sp;UrjI;gd_!lytgo$NzeLetqy!$J+_~?tpN~ANFAHUN{&ELt)Bj{UDdFHK zrd~eW3vnXMI-ke!TunFrGVh7(=WK26<3Kt(tPqXbTVb!3FtaTc@jGg`@Yy7AqcVW8 zV+gHde(7Bh31~fm$O5l`naxm);@aVq(TYiC$635|QE7EuT{SMok1@}YfQU%E`81@V z%wi$cPVt7Q$Vfbdb60-;Cr+ner^0uKka6l~UC1DEcmEC_&n0L=j((jCG{h z|JP6pUHY*45Xmo+xY{~3{S4^hPQ&aHJ_SFHc0cgk>RdYf(Wu1Mi#dV9eEfOS)|#@c z({)r@w?oj37z;j8I3tiECOmxVs^dHv9ORkkB&CrOFLL}SaE$~Jn|$w|k-*VO+Dz?C zB&O@y+w1gWqx$G5rSD%_`RqMH>Y(2!{t2;j?fsRk&v;*^y)IGLPPb(yCZ@&aONWz$ zGM`8c!tI7av=F;oL*$L^Q&FHKLv}o8^l1ScFHM#+*jH4*czzGrXp~S(OLi5u@E0M& zX97vJCERS!AritEut3RLcPv~FsWCWlB+x{nh(y7MtdKY-p@kAJ+(u_Hu?UF+{*KL< z=t-mEeNR03$%7w{Y^}ZRiaYLn_vLLc&g>a5PVWgsS`go{ zi7r~@b05I+m`d+l`;n~>pV$0JX+lCz*Yqxor19DF3xuG;(M-J6|00dEOW$pt} zdAxB)Ke|exwUP+K=aX!P(g_BKP*$vD5m-PYn_dxqfJSXdx1x;CO(l1f+*|TU$;V4RSMuK=8x;zw)I;Q> z<U;Gb62NXovx5)0{K0CykXEen`eXh6>D>8elX9G-e1i%m zV&p&iC&sBlOtokpv-*GajI#f?X72ykgh5h0S+dR30L8TkM~{v0sCU9aR)W(5Zj18G zgU^e+V)S711^eNTi3j^(3B}R7tyAtKp00oVo_ijz-xis=eCMqZtzqHvSZqhnHMbeh zN0x@x-}Y8jqkrh`J&1A}W2bif)t)_nwPVdAmt6A5nn!zg#A3_J*aqWyFI;5tw<=o# z&+lm*x*7WPGbUK2DBwsT?29d+Q02fK8WW6Cm*Kl^+f(L|gBKWf7-d_f7^12iqUaq} z>AsdXdcUt^T4+YNmC5(sk0@-u{7IFEN<{>1@%LhnE$*SCCzv|?yYT|=)n}^rm}hmg zE7lK9P9D;qGp;rT%csrjb2+~o_2vicCiBe?&Fen%D!(Cr4`73R(+59z)AaLfMoN!D z*FCv^KtPUo?1X$Huhs`f5_Y#Fcqy-DP0s9f+!DSXneKN9a!3Eq(U}OW9r&*xE@=B- zMOQfUQY8~;Id&!1wDhW&dwMo|-#2=fzxLYl-fv7CKe+Zi%YORPW$#&g@VNDzQEu}H ztpgAGetoxl0a32ain!szfkx~Ja1Hf8V$50^79Z7-ReKaB<&TUQ4 zm?U8oTUSCu!NGWl%?czOIIvL@1qb|)Wb%nB{ER?Wqsc;KFEGj(cgIVXyZWg_`!2;C2qL&+=Iti-T3tlM~*aH&*7Gj4BK!EmWT&z zLYq&#?`SMGo&4Ip>!#>gQ|s>inyw8WiEiz=_8~a@gxi$1+x1X1aGVaJeVcfeSy+UO zDXJ+l80XFbgeLvN<-;F(t!G7b+5WC~cHj4n)>iJDok@p-(`*HceQC$=BR}hT_nOX) z#=q@f-2B{q{kxYQp{gIBOShieHgO1=M2;GO4xymGQH%`7D)Las2@w|{@I!gQ_B1|{ zIB?DY?LKka&tv3`H^;;-E+VGPx<@z$}ncRcvgUQk-XNgiv^#+5K0&A5mL z1v!*aSr7XPJ^tMGb;hsM5rBOPop}#<4#L3^M;^r$CHpXoV!KHL@C~QACL_XVwa!!{ zB2x!L`l2xRv-k@;e*33L^0arCUE+&290jAi=d#X~bqyoUk>z2yP*lE+Ee{UqXiMuc*vr;@oPkBoa>|kp`M)AN2?`aW4qA% zMseL!gQ8}^QG*>`SV6R^2ID@8`9)9wI!dwGhrUYZ=wE$k@=zvoXi|^8b@+{B@{Pl9 z^+sR3^P9VNee=#2StHj!I+tAw)yG-iw!g-CTHH$Y2B_-~3|7Q`$JC8k5IkN8BC4xt z+B^X#aA+?D=a2YX_Dy$4?Q;t;e37Af1<#z33JjrOC1|>Yy2}xN6u=^^?0Dn-0|QXj z_HlNED;7FFf~{N{vZ!dzL7=`qfLFz+w>0Dr)NfpoSnFR|8V%P*!;32Fd_J4l>Kvu{ zm+-{{{@U`&V0oace)-6X&e~8@LnzQ(;g3{RE_Sd6wZl+RI4g+f59?><1E1~a2%*{) zFR=)p!Vq*L_B5THcmtAwdn1J@&wksvxzSfv-nk(h@>MQaTvm+!2+!q4;m&iclYv zFP^W41Qwg!>22GF<-h5i`Q0Y}fIEzD&o#$1v?J=z9+tU{!U{ZI;Z&-7#XG)=6bSo) z`HJS**G4|SZREKe3@+uL8n?~`I}HTbVGjE2L74NIEbn0oSCZpYDkF!aL+$FqTq+#< z;5SqUPvn3;CRI@?oju|XzpaeK@D6txod(%MyN$%$hrj`i+?SIhgu(+>!ykJI2t;gb zCiuWOR@@eRxw-zu1|fgWW_YwV{rF2$Pk!0@Bx-)L)=3tvOxC}^;uE)I@;)(6xzo#z ze6SIFn@FKc6NSmn4~H`aURep$ypKAW09>M@j985nBkxnmNGL+YiG(_wRAiGMDDOm# zdK9PcEH~cePAywC(cpy#M$enPaS9CpkE7h^EX1ZH1~J*k1DGXFK4!8>e25InU>qh4 ztsg4IB;rhmsK7g_9}mTQV?zkLsnz1%1>Mo|U>O@4t*FdAx(2Bak*a$-uj+s3tCJMU zvwOrB8*99ML-`AbG=EvJJleg$YkX%->&DnOcMYw%DEUVJgz^1*;)9i-!_$*g`?~L_ zvD2SuynWRRSKj#|1iOTpY(AtqGGBi$B5W+k;?|U4J4s-(FP3j$JvIotzfU0gYs&td zU}K+JWt>#U`@u^nx=&F3IS0m^b~>64^8jbcw&RE6d@D*Pg5qCqK#G=-ucu2xb92-B z=10X%8g7FSK=6*J)0V?JQUS91#r2GlbuQXU8&BKwi8$CPlRFmHl$X~m6efGLp|wFo z+_O4`leoh`o~ct%kurExf=X0F3cR@kr+5e0TRyWoacL=%h3U!0DZ#N!t635nzB-C* zK*7n8E2{$ak%~HWsHPiD;411XN`0(5ajnhPA81$|jc;!CmYGtT$k~i^fKi0VfS^IL ztchrRztW;bdQq)~=nB7f@34or!{t;)K?NcrFP-BEBv!FDR^1jt$CVG~f+?upaBlP7r@Gr2(+&_M zC|K*ODx+4iPB;be|8Y^}Q+wA;bg&#k50s3dEdKlnjph`w`4bpn)X8}f_g9Hmi_(?W zbQ`t7qD`baz6|F`%8tEU>JowndinG=#) zUE?2Kl9Jdf3-66BLP1nC=pcrm9RmuG@Y9+w9oay_Qv)8Mge6%SLy;Gh4-uji*#g1D z7b-)c%2JxzQhIk6_b%A9eWN^7PDSR+gML%2`a+9#msfd1l?N+BVu!)siXDbYV3K1& zSOSjSwSb;Fiku<9TlW!=!Q8 z6z)0BBHJzzI}X>eV3ar>o&QWoE2-AW8jQjnz;nd}2h44LFfu(}ceglpT+s%L!+7)% zTT{%;82J-pFU$faZAzmf`YniD+cx-1!l`bTpC|m zUjPr%Sk1KI2MLfj(yWj|W7Wz7HA}+lcJE%dZnxh*8bS``p~;5s$Z+(+F4JOIB3I&N zPmCV$`{~Zz>uQ$-N0;pCHpNC+ePFmT!3L$(aG`045#SUD?EqV{0O)9X_C*+rAf5y) zy7+cER(MIx2fA)pV}c{0S$oII+k;DLCFlowH!;)?5;vINBX{`yigppndnkV(`2%(0UFfV>jB4xvA#K5a zy+ZZ_D|T-%$<7|I5HV*UZM=ECIstv_nJ_T{t#Lwbj)8!}3{*naf-ywy`k`0=?)p#! zZF-~-zV;sfZ!+3%(cFwME`YZj)ilE9O*b7OFL!}-cj1ZuLhkED;0R7Si zuq5mU&jz>jr~0=9kum#k|Hka+vy)$3`>xn0J`sD@T6X`gZ+a`dU;jFOe3Jvd2gd^M z7D?)iB2i$7!&l2lHu^fev>e$iYiqt`JT-nxGizgG3p~bmjPES)XzPA{@!cJ7z14B| z#ad#yU-f0)ckYl8xRqgdL)!cy5#nJHU;Vc$vXmk358h)&08&BG`p%z<`i zC!0Ozl1t8^m)WJDK~go-($IBfU*DBo4K11W4U3yMbarlNUc7-F7q_2ti7tB-7~_`S zW1Q|QuV4PZ*?SlGxUTA6c=j2OM$$;KMl+)s$&#({SelV6S#N7b@k23*t;8W5Ka$9a zV?v@3B>|#593}x0@kmI)32LCk0e*By(&EeI3x%eMn!v?SN(Y*PpwQA=0}7>JF0^+_ zX|LO6PVay1efBx~%tO-n(U0%@VQc1`Igh>9Yp=cb+H0>JibO(vZ`}F?xaf3{XOXK_ZkJIPzXKBpx?Bf?*w{i3J0|VD@-gq5b5Vywn z8^=5U^+}qidGcTT1N(+43SfAj!`mgcR>lroYMsb>IUEYp3YId{7Hr8h*?;Hi#N|gM zX~fi!$aG4k`fXRw&0cPN&Z5GgI#p!*yhxZS(7>)vL0^Dk%brrNEqK2t2L`-Gvpthw z(6m+@7NgQ(nq#Q-nk^61#DxWJ&33(U+|FQ9yK(1e0g4lc_jcO3OE&K?mP#XOn>c)e z&F;2KK*5&ERLYjAP4V%G*xE5n5AQ{=ljLWJM<&snFJxOCMX1wk>iM!{*?a4)dns>Z zG}Sl~IXG=*q>GuyJ?8O1A+>JZyZ6>@lzw+(dwcKD<1#DVL3uJJPxAj)CHWP1oCLb+T^-$dNEDa_cP zS>tHaYhkvKzpJiye-NIE{v%gSMmomBOg0zxanoaAsvzp?jeq$w6^jui zToQTHXd}x4Dy$0oB@2VEE)Tu}tueU*ps>ayTs7d-C{i{ZaNWpvTZfNvbZEVXMU!;W ze8E|yoq77`-gmztg%sfjj^4XGibd*|EggMYPrc#Yu=UWj7{^yYyI333a(KZXK?fH* z8~iK5p+b;N?R~HNG9Jbnhs}H~Ht$Tk-s{xfG$TlTBFqlhKF(hvi15Pon%aj<&3&|| z{jx;jvi6?faC`gkOi$m@iHW0qJ)N%~89Bn*D&(zJBh~ngJ?$GdpwQ;#T|Iq+gD5bb z$bYb6UQ;TzwEJH7q(wY&o2m?5{^xlRhy1^-K#%1bydcmrBCs05oE>tdxSap@6>xzYN$M&eCc9`m^}|@N z=s;jKAfJn^W}$oES#!_0V+A~md1iN_gm}dWuNG*VD=V5lziDSH4Rh>{_5XA2Oql+^ z>2ZJ4FM}38o9LrN2LPS1Nhu z@To&heXZ;Iny!6crRuuv2VIHo_-#`)H8s_T^8f2BRW?zDBJNh_=P;?YlE33)CUPtJ zJ=ilG2h06IOO6}iXdlDm;8mC$yc-On1z}hcHaZ-}gdWoJj*i7IICD-MZkwHLI~=_0 z>Z|VxcH!TZ6*7k{9T!C$zvtl9cU{rdb;G8v{M8k+NSMQu@T5w*oHaePN^v?X6ifq% ze81HQN0AMUa;+ic5Ny2Ao+@o|eBvA5*pbZauaILJ?asPm{Hgq>D&~@~eF*0mPZ+cc zhl$&w#|qxe8%%UoY)K0Oe9P*YMR;!1bt$46Z^F9icM6k?#+O+8z+)mpgM~p$7ra@` z(HN8_&gq!uflrls6SRTS%N_Dl6|+s6Kax`1XgzldX_aGn)<~JnZOT1W(A+TPI)?b! z3-1}K*0ag%Ojo6itvWY@_Yi(jG1o+6BaBzw*l6ovPK}kiE#rF}n-$yIynxvBcmNOxqnm6=3ctzQ15N!Y(VxOju zF?shF{^gxbk*0=Y4dI#_Cm-0tXG7efhLW=(vYiMlVJXz+7HDRLEA4hq41~ zC8+$ut1%voUa3i-Rg2*CvzB?(dJaeIKc58OoT)P+EY0g!I&Ewf# zzi9b>r$`|%Oyr3wbMnN>jb@#kxXMHw$c9p~FFe76Z*ZjSp9;fp>=jTO@VwZe9CpBbZdOCk}huB$^9 zl{&prsbhu5cbwybENB%4bidS8>*`i6xU26 zIckyYGyW#eRFiRvLfqJ+#z)c^E!KzDv}rXpN18`BbX?kbV|8=mvHC!yiF1)H#dUxrbj;6Um62`^pO6A+S2kai7KtgDUG7L7^gB|{(d2RWx!&Q0*D~I9W3U~XmfC@$gatSO#mo~5XG!C z2ff}Z#H>*Ct_Yu{wHDs0t}!gX013nR5S96Mc=89Wn#MKx!3JyirCfOAa9!QhPwu_< z?+?}09rm@?-BVrNrT6scUDeh1)U{vVzO_9u$(AM)?OP2u6wbi4bscrD$3Gmd^=UOz zRgJZG)ipHK-BsIIHC3a1Yi&G|NN(Gf>}u_5)F8MvN{H`X1_z);c(SE3koY*9+FaS1 zeF8FwZinmL?u`4j3Kg+E00i=a(lH(n@j+&IEL<5$fB98CH}mL^Qu8ZN_PY+sKK0d^ zoQ}63zBamBR);2AEvRhoDq&+sB{Wy4Gtwr7J@{0{0^_v4 zkbEqe|J-BA$0}n3)3e#T#vdDh41b6g7px%M;~2~%24giiuO4pJxq3LYm;*AII3|b% zG@B?h+t}zZHY6J}4bl)|!u?q6W+qegql-Zv-FVb5mQrW*X`MpPaWGCIQ+)rI*aWS) z%j(#z{++=#3Sn;xzViSG$$E{$G`)~zP}fIxDQnz)fLrJqWCnG4NWQW zq3z$hu|Al#(^A$Odn&<>^1;zRKwlb7a~Iy+%GlbApa@%J@>&jGw*qhx?w1Le%8`IY z_PJ_JVwp z4!(233i1(C5hx-LWJJPPjznxm0TGlEhWlL@wkVXMJ&Ca1H$$#S^A_3RO~W}|~EV`<3W$*o>IlacJo^HQt73!0Uyje|px} zu;u{mq)ys`z@>B!=m}|M9JsR*bhNg38K5@C@48y&E7HpW5}g{p_MrwqAkw%|L`fBr zCk$gz!6cHaBL#{H33fYjHoveAqWh*i-Sc_F2y^$%zi>}eiOjkfv|5RoGJ^VB9S3Js&AQb! z1Tr79;F0`QfI_%C&^jDJ5*ko{$@qG3bMMhzyYA`T9DDuNtw)A7ubb@Yxoq9$zz~)L z=qX>j-{0md#trFbssnXy&I#CAy*<4{L%lt*?(X#FbsILU+Z+rv-<$N+*ZWMXKw!Ea zGB$$r{mbIXFxzBeC659h=dWU{uKca7Z0Oi+Cd?moU^3&tvLrsu2e%o2p=UVMn=LGM zS(urakVw^H0nQevUL^Z4nUQjvDr}hsBk+P|<{ewGD$KJ#m_NMiUqX&1(mohUg+|)J zq}%SDPuAjJGKBS#?HwKMsqW32yQQviG!O5(rj$QO%|rj&RBc;RQ#;-o-?(vnqJ4i~ z-~RSw_nUX@cyqU-b*w{A0z<8==y@@c0Y7ZGoxckB0I=Ws%c_(F^HB@(VwwZkd!PGd zI;ny-?tt0>XNd3oAmMbAgZkzz5utt2HNK`)82YbT@jykFr!;sq`oIZ3V38<4POE|fY#q9V@aG+1fTtN3WM5@mn z$C_t!%kWEJ#EQO|X9t7-zzatY&zs^cNE2qt>dpIVeOj!SO#~A`JyTZ~@{K39Xxf&< zxG#iRfWiwrUlp>Iu%8*XP=`%O9eh`yd7vdU*=L---|fC1SGIY4)lHWq>Ram*mo!!T zJll#c@S&H|;}hOhe2Se?VvA1H!jyW;=H_!m(^ogr*LU|s1vpv)4+LAs+b@1I++Q`7 zqDNM8nokW=>ez1hG4@hFF&2dc(fVjQ!Y_;^^APS)tZ1hU{hZ(CF&-7BAa4NlP*IXH zvkM;_%xH7@xeUPGbtIEz^E4lmrpz*lr;i?ensd%LnZ-7JxClEDDke+wKE`B!RL2;PV`vp%+9)>TvoxGlC-r#bUh476yre8!e| zA^~mlY|&z10AssyPzVpENvIIgOnOba4n|@AIVLzEMtpq8{xb5m0+69Yd;zrE14mz~ zsdF2D&(^u?YVzjX*hgm*nZvUfy=RJ1+N>do;%0gCHj`M-h}P+8te88Q3*o;SpMDrUr6-q-W`_-2I>KG*=8d4fHqXTit| zAbARj?a6?_w+O@v5)m139j#9zegbc&z(6M}%cPeOAJmZa;>ShImD-wm3u+9Id zbkntjWEI$5yNm>_f!#nGjei>E%OGM`4*_kV8mqcSX&5NR8h&wra)oV0<2^szv;4U+ z|Crx{beUMrOp`!=30t?CD=fO zx2Ri+6Xqt~AU9For20bl;r>l~h@Sn24mvn+`OG$-ulG=Y0S^wRjS<$&-WQ30miNG* zd%u$j8)H?C^~RA9%suvsr%vU=*Rcz#F?o?i`B`%uem2My5Wg(21>|25I;hQ7S1T9# zFzl->@PW`2a|zLhWem?%RTYvdL79P^mUsu^Xb0d0p1^V>zxZi24Vw*Qu;CBR5S#E- zzN(9o?zZI1U69Xk%Z)%AWfno-ddkoS); zaQuopet9tSTiC)pb~^%pL=nhP=b#16dW*+YjfZr9O6wAhOdE(^+SNJ~i43mm+TBs+ z+<314P_Jx@EFsz*bY1`9?u0EJreeHfd}Mlyr4`R;BbPKZR98*Z)CB%Po;4koXMra| zA-lQu@P>J;p&=46T+Wue9{(Z{MQ<{SS}r8;O_dPWd)9V1MEy3QqYZuc#di(9WEzNL#wMCzzj#VDqaklh7d+kvvUCSww zlKOU)ge_cS!LO;S~qTNHR{+=bmd;-{rI)9q1_Kx=Hb?jZys#9vt{tMA%C~K z+xUsT?;@>wd_VRMYH8i5>v*bheFL4p0u@>Vyd-kx%iF@w(3-+hRMNorscDoVF zN!w&DM+d}AX?ku4^bY8@D{%Zkfz$~Rn=$J*(l%_SBVG`%m6Oj*hUf$Y#2WUa4-W-E zGu}}XjRpe+KvAMw_A3e-$uBmnZwv-oVi`7JoXl)f!P-AA35C!T<}=Cj9=2dy#Qrot zr$A@NT{I&5G2CC|k90x?unI|ILt!8sHdwyu2wQMeCwY=VW#;xjW`$#&ek4PN*g$56 z{heceubXejN|q{jpL4lk4Sg5)cd_>y57pE))v+(@#$-0Duk|%}e4dcLy-(ZHwXOQf z{M;4V+8W5vu?{OG4j0 zqzw%1&d<^M4#F*mDX|V(9bjDSUW4-%pe3t!iye+oOR4H93MNrd6|yHUk742N>{$(jN1&Y&? zle~TZE&HNB3~Xsplq7Z=;+aZ=rMB@R5WcF^TvRbTXjW(vfg15TOg|k!Tps!j9#4$e zMLs)EN79Axxxm8^>m;8ni7fZciZyh!>Murd(fAux|Km4ZqsQSJhd&BVTfRRJj&PBN zhe^SPh7nkR^?vw=?QSqb-5(|98y(`>v2Cpz6YKGRW9zAHL%X-ZO-k$U(mEWY{n7j! z+~C@rdBr^B=h7MP=5h;j0W;jAx{rntS_kzHw=7?XCL_L{fg31hzAMSM&Zvk{1zmWE+&=n}tIudS-3v*=LseCN9#P%_>-j zM7hO0)2f$c*BUhUHusw#ENkI)NbpQEn4{u|VB{UAJ=|!v8DbM39E=NTWKr_Dggk?T z?%|RACxBE(U&BvQ?uhY^+xkY0lYP2&y}rXhw)*e)ZDsRqBOI?_a^p`@ubyTPT@=s< z(tUl9*@?Fpzu*7;fIgUp?V52Vc_P8sjoNK-@oo zMgm6q(tbYxg{Je^4FHs=M5 zFJMiK)yVYpz*MxhtBod~)6Iz{wqR2EcqWrEPRm&W?F_fk1YWe^L@!)!CEK^~$CD~V zXJ$FJ0XprlWjA|-f4#P?Z9{9z-0{tZsPIrm2C=`(u_XIt{p78jHAe?F5(| zK$<0K5@5;-GxAcaqt|8=)HP!b5FL!u=$_G0BW;F`W1f!M!1*dFtyQ0|qB3mhd=-^t z3+Jn-9GhQFQEU}tCna*;%9?>FtU?^90j(qsY#uYrD@)d@idtHgkgldEZ9vCLvOp+ptaC`Ji~~?b9M4bm$9v5Joep7<3BzF<)!8u@+wWY(+rm%q>E%5 zTaAp|p)o(HDQ%v4Yd84ZYg+yOR!?v3P)FxjRh4gjO;v=p9%~2$jL-2PUfvWj4V^nu z9d3LcVUGSt>R(mess&|RoI za;{3OL_QJYc(Lr58*rA958jCR$j*nAeU5sU;lEkitb@sBMK&do+D0%^2q9Ugw0|@0 zK7rNFp<#qViw?eshe~_-(DbosW3m)lvcYaXb}`Lyh6lT#oeuD+lnRd?+vsU$Pjj@McRWT#$O$Qs%#=p81@p zM`a07P4K^vb|%}o!z8Q~u!VHtW9`w7b{zzA@CJ-GPIm0;C!KMgDmvozmZ@kK;X#EJ z(e_%)VnjN#1Uh<|Iy$HV(G}ea5vW0I72gZDtR@KA4Q4oAVHn|zvu$1CYis%_rkHET z6MdT2ml&@#g9sfLWDsFS5#nrB)u(x%yjt^+CYAhMQj87ByPjPI=ix}^JmUiS>&@jZ)NdZXJ>;WG-(07 zGMQqim_jXADY`q#D0pA#f~mPt7rctz34md2YVO)y(2&S(dp}>SqBauSG!x5HOob)7 z{*^jlv~p877InbYjnz|WQYU=3ZAZ_=>K;Daw?ArPIE$u6!J33&q5g$M3&V-b)VM?* zt7j37j38u0AS?YChQGNFc>?u+%o53i2kGy?f#gA@;TSJh1?t&Qei2XVy7>$}W+F^r z__!xUslZbVkT5ruI*h|sNBz3#=4Q3%0}9$Nhu(RhYxf2d=}S+vxGR-< zG-YgZDoEn%op&aak0zf`@wH8E(FKVr$@~x%7NTbJQdEk+51Y*l6;X+7ZBX-~f4!Qp5CwC?@nbgE56^zn)eo;^R z!&yX}PSD+*Y0)Qfi+BSDM`Li=xH>7d1G&HunMUgq;$8|zU{rMf(8 z)_A%a{r<+TWTyxJI_dmQix$Eeku#EA9$%H$hes35;qJz+RHp|MK>T+YzyH#vl5M|p zB3aO$6{Kuc5LN~pk7UTXk86uChBsiCiTQo*j5fOnVp?aE+*ufL(&P%-00QYT=%hQI zff3xm#KS-kzk`Drn(xrs=sW*ot&Iqm|1rL`zXfG)jK0kmj;x%2w*EU#CVD2{i z3VNG_OM*oXQ!tK1hkXB3F+9}fnNnqjSE5vLOq2_Uv|1QUzQW>c46$ycxL^dly-c7Q zBifq^>kw!dub!`}-oxI`t9p;tcA=~K4(sJreTTh#u2sdcD=-%kj510P@YE@)=oEYV z1+M4VF{pg$<1WMtvZ5!3I?bHg@Tp%H)Z7FH_zHAd-vt15Hy`8c_`UgXvvDnzK zci1ah$k2q*KtQv#lEoK7S%xeOV6veo!tKHAl>VWe4i z6m2Yhqxq1dMB{i`6k<2Mdbszo3MwEW3=QIcSmF?}a0nqgfMv&|#SAK@;5h6{+@MIa z2@Yu@NAtCoDuEB0-&O#pJ=$%+F_DEtze?$xGHi+4MR-*ZBb}ouJ-TM<##!h_O4-?o zX#tmG1qJ#v(B9NcHU`j;gAz;3A-N|Bc6?I$JM*9A8WILJUDF2q`6pPf^!psk<+2Js z;ckJZane*^1V|l^v#@dUV>CyC0Nn_^g}7_LBp5#6Z#ZOCEKq}ssk;$cR$NAPie?PJ z{ux$?WeZh^g}8o~II+S$T+}zF8!c2YG6LDPgaM0AWB#IH`?u(R>&)*TS5mb)8<() z=z$f1DRx{1MR9^rtdNycA2To-0+Ju{C&Kw(X>Zb}yQhYSr@E1xW2iRV-=bm*m#1h_ zQ_sAq{d0GE60umqbLZ!_g|AIjhu12!C#E{Et^!lbgRthZ*WXa4-r4WJCQ+g)iYm{! zALW8f%Y|O2w8M7IW63aVZiOUj4#4>E2&E_zb`{0Jir8039CtlerL`mZuXEY139hd- zhKWd8wbpXIkhQQc<*5qP`okCZc5SO2uG$a`Z3x!+!U&r&8}l{sFY8?R8xt6MLOxo$ zw@697-xsW@Z>j~!d&YVpUd`7w;3><6+z0vT@@$z#G}rqf(5 zLUDS{!>ZR@2o|BxdX?4^*usFQuP(SD6x>iXT)VBS_u{a>Hc;i&+D*I!zX3DgZ|QD$ z9)Z~nA)jxZKNx8ZhBoz%^*{=0o9Y`{@0ZvpA}LHR%6KDzHjNM4ASp7rtOj1*%o@-I zSgJBn?5rRfzK{sp>^uK3WPS}`$X#d{qNcK4h8Jw&*8zz6Uk4zTehq-o+ExU@wpjuQ zPH-q@OFLR7Q0Hj0*us*=P(I7P?XA>lAqP*Er|eCegb6p+OG zAk!Mk&#{@@rNc#bP{L~FwgrPEf`t|g`8oK|%B~kS1=Xe)F8P51yQLxjS)}DJZ@M(5 z3vd*Py<}Z>Hv=3CTmp#xhz?S}UuajD-8{Jl5aPhTcls_QO}>i zQXX5)+VxZaP~6pe0Yk7^^!Y#fh_S%w{X0$F%|{A5-mLK+HW5_;X-TXt(Febho0JA6 zbyl>A^J}oK$Og&T_l7I!d?~4`-E*0pZ|$14;I0*W-~7keUkKpsez(Cg5%2Sb%5}W2 z<-m9fS{tC*7m7X0YSkzXg`%V^Ce3FN_#z-`hgV23 z`Qf_=A-#c8o_2!U|Kwi+C~Q8Bg1GrlB_l(IPIuMIATd zu;ASa3CGqbC3QeO@K$j9YM3Sukn#f=C=iVnrLB|Q9b~1xy3`*{gA{4VHxD9AC(y)a zDdbq2qKov9o~Cd&oX}4_LpOCq)MVgEECvj#pDG7x8DN$LLr`2h!+ofNG_HU`2+A`7 zGH~QoxWEI8K*$pykYo`$g7E!O@P*LMpWqmqAmmSQBA`y)l{L9+)~S}g8b*}E7eZyz z{J2eXMMk9vh{kK;2069x5kn*)2vLO>Szv^*HD`2xG?UQ=GFW|&38)NWyXX{iq4Wqn zkwJwCh%#l$u`2AeMJXB{rNCDqVZ6d3$~OWmeakoO|eRgSI$4j++#G1yGkC5u->2DU`K34KicWc(Xp zT|^i*BeSVM#fwLclVylSG1OugXh|&igSlB<0e`43lq2cVyfTiPpqF79bg6g%@r1$|c>Xc4b{*?pP4AMIw>0JhDI-<07>cnMhrycn) z&lctrVil8aYJNU>%{AY{Cpn*AEKN0iem-^0H7WYcuYz3b5vsElslpHh2XNw;7bKUn z2!lhH3-u#o;kZFtL8E6&m%X`RNBw03wB)9JC@`Mcwr;W;Eywts(vU~4yRCsT&sswSlW$+8dr#Set{>b2w;deH%9xvLcb2b zi*2Do@C=MP>h|#(y^lO{g!YpKXzxK5h#A+L&JJ<%T@u1$3X;@-u*pDxx0rCCnS6M$ zf+Qxfl_~L*AVDu-V4U>%t31q;sY24DCLEZjs>zozcmJqMBvwbCv`LpVr$>I#S5p(J zWs#aXU#)Svrn#oZXYB=|XZV``*Fj32LC>%ja}<=dc9aM1?}4OTgA7o&psA54z~#rp zVJv`*sH)f&+KpqBot{PS?S<$d8afK)6AqSC{I1DYo>xDPNmE|4;gZh_KW1hlNO7oD8;C z>E3R3SF%Ij(mt}!6diY5M<$1DzO_cSWlLxq>M*9=5iDa^BL$9A*5B?M|6Pn>kgZT# zM5&+9``;>P$u3VKZQvH&_>1I*Zm(X|&i+UUrzveG-6y%;myL{Ul-FZZP)Aq4+GbWt z+SE*Y=O$!nY0lVUCG_q}&8|SK<}7PRZY%>~s)Myn>m-hY8Wc@gxarn!LG39DMPMRS zH@>kx$_)*JJcG(JV?#qANNnRq+*Q5I>hK^ys^2u8v9<(4CoFnZDVf_MaAS|w`e9Ad z(!(#l_%MB@k9j<6*RS1qS6|zWJKXPopm$4i*Z7-EyEHHKQsPO?4#%_?xG+T!*L#3+h{|>osUWuAC7eAX`_vZgjoHb-(LjP{Euy7k++Zk3z?aMK|EGY24$0A#@y<;ikej zCNuC2Swr``b%>&&pnzZjAu4WmJkP6RLs6_ZTovbLwL@94*&$NiC9=VDq$u7*Sud4p3OTly^9A{x#TN=ll;$W0k{BZ>*gx^0jG>nTw zLu!ZZ=!?o|OtwUxa>c{&!%)+fo40Pgc}r6$*L`J-jl{0(#?g2=cBSz%>Y;Po=3A2H z99t5v4_~Ud9L6{}f`yuVuO;FmgBpU#We(58d@IAAp(-0yyUXt20#fa{L$SDfXygGH zE{}(rHoPYGs=gKGl<{<;Pmi&tkU!-JMfGTz=E!UtNG*uK7PO>Lmo z7pz?q3`Y`;m?I;FptR^j{!IC1Va)ERzPOJDeSH^K?>N?uJgg`kU$ALpv!?i>PNYVp z#RAt-x>=gcf>JZ-soF5-nO<2C>#l8@*3%`aWIVq*;_y~3NHcJt-6D!Hdp4x7O&i;F zBnA+)sZyDK2xhcU2_O^1i<`(~K&w+;q$8!yE7xz?T4P{{q~_>}l24-b7PxeGo9pH0ztH-}|icK`O=WB1CI0>;@B3Qok)gWFT*<}zcgd>l&FA6W+ zu`w??3$x=#&p#Z3G(hKCLy~z;QP9@-v~Z^OZ_gwq^^eD*4WUiGMC+l{uDj#T$su8r zh`F+9>4P;s{c_tQpTA^nO>@&k&sKe`&uq6@KEe}z&P$Ol@Onz#Rt_acC#9lMfJN8~ z!-X79rAgD8#P(3Hr2yD2Ldrm0!Y!l|jlZc&~K$dt{C-a&-I!i~1 zYVf&-jqf)S`))A)TslK&suO6ux>R4A(yHH@s%WQ?UJ6>hGn_6$zcq)ah30)&Q!)iRj!Gd&r~4!Od-&e%eWQG3VD+t@*g z+BD}qZyot5>A}cka?*!^=2|>qbCnbAD9koATkc}Oow7`_{wcVla0H)@z(ZOARKKGzFuJ^ z&ryd(qs{*OU-Nz&efN_aH?50pUcdE{k%4us(G9J^SfG6?d^1uJg<*@z9``EKFFH%Z zj81qoDUJn8KZdX^245zC{U1`I z2!#UKKo36V2_}Uyl=r@b5}W-v{w4H3y4$y@`6tbre0TfsCr@u#xc-k1AO7R(f2cHT zbA%Bzt6WfD5n$}^KXArvRA|$`N6x!%@ z80g>Nn&ukO}a6Ffn!ReO#dluY!E5`2jgMRL${EF&QY&- zEY4{762itZeAqIEkqLuYu2M=>{2F!{tvBvCEI3|ee3kQk)5|YE6X=;Z@aXotj^6$8 z1Ts6_wEec*SkK7S4f#_Ie6Zrt^Jl8`t2rHn($i{tKFWT3lw<&O@&%uiqzk_M^6P!< z9Y;2e{`lx6*BN^u80{ZRo!WkzF+HMJYny^s)9~d_uGXtaPpTm!X=S7)Nhp;$ZTUew z4ZHCjCnk3;Lpx7pRJrt~p1a#86UVpoWY}mK@~~T$B?tS5RA1zhb|V-53bub~`N zDkO!q8=D+)Z&sa9+vJeTV)aW8<}p6({t%zbNAMdgQ)oLlj6nn8Du%5Sa$vsjjz4Tb zw$DF&hb~VNCb9{~Ret;95=|i0S+t5v5DgNy||UYBgT91EL%Um{*q1iJmdF|huS=X z{XKh)pK@CE?2V;qU&S=t`nccE-p-$ebV*B$M@DyI$0+_Eu4np>5H$Lah1)Sd*8Ilc zI!2%wec<;NC)g*5{uN#^pPSJkRk8}&rr2EBE0%3Rjz{T(#wOe+r~I3Z-pJ_X(~}Fcesu*4b#S%Z$5}( za-iXRpU|Up9(}O?3GkO@7w-Hfs=gB@b>xZu2g&FAU{rr1mG6L?UTUDVu4WirQB*3n z3{8?xlbR$?p^9FTXV(NGFr1M#3N$3!8HtPpIfOb}3i>&tcX#Y$3pTG1H^U<%D=p2{KU;WYB)AaMDmvE-P zNdI&?eTgn2vY?G;D0~yFa35?`KgidDUNj1zXnW^jteK`{ffQ#p4zr1^i=uBUKf z5F1%+54$7DS5LzZkeD=sq#Y1|1YZ#cwL=blzV*6#ghwBMK_WZj!z7W`5mHKSTU>Sz zAHH0F@k#wM{iToUdk+Ji{9zDM3+>tS#HN>wf7!kJ!<$~zLB{;g_v~rIvmbd$$JdMW z?5n3Y5s~lNqi_1~i}&o-H$A}_aL*o)Sd{_Vx|MRzk_=G(!V&JQpy>I%JRFE*LQ1M7 ztu!+TWRx&iZ8;+)z9U8YYqk?wyo4cjH1O~508(0n@J zpQ$gc19p7lT2tP~Z#Y^JCya^RG$OX~?L0v_;+oQ!DH&@E+DtdbcjIU+2!!p7n&A^( zxPWQs9uJJ+3e7~oB#)Cv*z^s<@cqw`>2G!rP8{a_ARk5UL|T}S6)Rg=AA6IgGi*%CcDfG?slx_T$@s|I!%fR?LXnVF~f z$(=lU@)p#j#~abq;?cz<#@EJin7^ChajZ_k>?E0)7$in z7jJl!d+KumXju72D-`6PU!LHKdObU|yDt{&+dUNDUeB(q+m0Ln)^Fo;_1oj-s8_q# zJTdmOD{H!1Tf1tE&+#Keb|pTr&c7l@$ix8zxAP)Vge)?#y^a?tert1bI4+My2TD~- zzfIneM{NqMwawzVOy|8C%8nIKa3#zyS0MquDlL9E{$uD7|~>-wPU zcgYNmkBz~VCcOB+e!_vZBX4=j5I)B9l85J8OxOgkU}(sA>VgT3+ZyC}p~7H)S4#In z(OErR3WcZwbc@7EI_95(5fj9qqJu~13y0eS*lY5`WEGqH1(8!8T{okh;IUx<{E@U1 zJhp;Ib_bzAEccuub`)hk25U@u?$p@{)r+Sp9HuCia!LkaO3-0Y(i0V=*i{g*bdK6RPZG1~I-DU-qw zSRp;=)y$4__mJJgS&?i~gtXE^MV*<=i1R{tb~c1LCuF&)m_|JJB$f=R3h61=v#u9i zU$x91ic6BSzFrKWoIfEL&MVMEF}P7JeFVpp_^J9aRmF5J3QLue8}DJ!I7N3+%1YB8x1%x`~WH7czhL}J@^gzFSsKqEJy4CZx=Qwii@Kd`cKQ; zX&_0d`e*`QMA_1GKca2SjV!UWWr4dVU>Kvr%2)UIT-Lnt?$^BL?v2ft_4IGqc}GY1 zbzAyg7w))YCzjgh7cnYAYA1X!+o9`Oy=PPE;)_$8dh{Jz<9&Vctvjq~>f>0NBRzLf zv@|GXZwS_-0u7fPt9=WSaaEWPGz3 zEC!!Kt<8w#;p(5eaL`zJW;$|vz_u0}FQGl~;X$@wc`GGL__-!j7Sw5C)@W8eTB7A12BG!7{{;DReV^4LOFUj z(T`2N*#xx%TIke#NE!hgKbgfB)GP(lm;;Uybw93D?W~foWZ*UOvAsyTNV}=h28wdY zi-|o?O9Wz48kC?jUJqk9`V$8hp}9^rPv7K)p!phOmcC7_|2-$?GIcpUlaTllLuKYU zp1{qVu#+%2h^*FQmTeVnnNgJ@rkV-y)gi{dZPxx_tNMyD8!dxbdAu-+U=uvQvxq~r zWrL)V7L3TAEvDk+Fn!kSz4g|;dv9%QIM&ceC%5i3CVR%md+=dDk|z`5&N_tF46PF{ z==>3S%={?MKFVw5Tt8Jjzd&}AA0PARCpyz_^QZ<^k*8mpZR)xDOiX!3J$KAYa4lwb zcb_ddntfB4@6CXF^5~qe5M~&eV!YkRUQ0cey`fA`ujTEFd@_5nPO*qMs?DGxte#hh zyx8szc%2pA#r?FzcsXp*i$ORC(BCq)oK!UJIyR0>z=~S)m%sHotWPBtzGNG z=aqurKP>ny?^C8iace7o5ASZReM+a(7t#a6mb%K&GA}DF`RWHw%t7-6XZ-5m~P1U0C34rOJ_g zh`?H@#}OXCBpFn2L|CM_k}EpFe3qP-wP`P+&rO3-$WpXSo$7TpC`7%k!l+)CbYUAz zc)w&Gtqb}8EWA?mh=rR(?JO?1s#pZ%K4Fnt=v@cVRfejFuI4(MG0~6`VEpfuE)-#5 zu}Gp%<6eLyefT0GFGB1j}|-S1$iucqlgS;v0w29d?Q32HT@JN zT_unzvFf=>2=!dmNns^0pDYM3`RcruuWnEh$83@k?tV!Nd9-B2`~8|` zUtM!eXLU_=&8g3J{(0AZO@aF#4Rl(>u|&Z-u}Up!_-{LfQffL;q%T}^ig`P8_XnEp zyQQhq)C8sIbKz(+2EW=l669ECXV-b4#8SMo3!N;9$VsUD zGi~Fb6=jc10TFAyz6OyAlvFr{U}aiKa;xj8>z%GgT~E4x&-Gc?7hGR+eb@Dh>mOYI z#yrf=kcy5PD&J7XuQtIFlwP*8T!BkP?^gP}3Qwi)R{FeJ7q`{3x@q`GgS^~v=L*lQ zbYGUc(sL`_m*toP1>0wDna0bUV2>j6{d0ZDdjA3xiP;@eE*%9%2Cb^OovW7*xIXIo zr0Wk|Uv#ROVMU#kJ6}!5t-gDqpFd?T4*ZaL{GEc|`5zWsIR6i1`07Mjp;+eg|CGBS zuRkkK${klM!R4`7F0(D%Ycm&lC%VY5h{K5OV;DfpP8HS$#j%W7_#DLnrUdyN#q?&ufo{de%1js_t)U4g~@sdbPPJ5Nd8}YF0ZCXW`Zz zZm=cLU?`i6I`|b0#$lZ^rIC2coU6~M=PJQeLaIX*^}5*996(zZn$p{H@~|(OC|OTP zLdhqs8}b5HmYOtMlxG$ptP{2*@7X=Eykb36bODB)3V{qpG|IkHu>z8PG0ukocx0%ZarITUblz5KgQ+1!kzqS39vRN z&z>58HktnhZhl%`!N6O(GleWTAXgn7s!f$Gh;i2#xjOL?+oLb@{5);?-(p zRqW$t71L(jN>#E3%c%(om(ffjxQHBCb|eXTBI7hE>zpf-9?7t!7*tnRK(Q26DOZ7Y zJOleu{*miY{*{|H)6S$0HvETgd(X%vM88W$=$OQ%hJz`foPUfs-7zr0V>xlu^a3VG ziO>I&HlR&iGSai%XTH0ON^Urql%-+^?+#gxHXubIKPSE2dhtyIt{HMHa`(3gu_MZ^ znv$x#uYf5}YYE&|!XdvX;e{I8#?xcH2NOGXB14f<;vFtZjwOOQt=_;JR(oodg%0<# z(uh^1Rn}cCc?@Q&EGI9r{Bz&%He~7+tgG|AEq_S?7unyKE!w!%yu)-|V{2whj19*eD+WBGX5MMqNL;e5Gxxg3&p$L!1AT328H;=>0Xf78xDpr*#k`;d`26OPGS&KI7OCYNy-8^YUhUPLWyDXR8B z-XbcgcbBJ3Ijn!M60&9R%dLPGgmyP(o$q%~VsWmO;)7MubTWl$TkW3M?ZpN*h~8#f z>EIPH+k&yg>anf#lGme1gxU+Jymg!>dam2Jv88=)OS@=ZHBHs8^;Or`Z}PKedJb>g z7*THdtFIKdj4Nb|{;X^Tzm3?hhFDcw+jRqPZ{D#4O-AqhJx6weMBh-MmNIxH|XO;m?ys(MA$H`rx@&(pGJ%@gAX=1E4* z-^wGKmuK+q%7}$xYq)H+YTH-447bu{s9Hr`JXkK|I42eU$IX-c4@{}hn0fL|^NzK+ zFlTgFYY5Bgb;VSYLW0P9-uy+VhH3h#4ZJLk3xPDgVO}YMgUw5bc=#MuWoL`G+v!`K zdPl9e9F^5kgX3IjwJOEkigs2zhE;%B6x65{+{JHC|U4Q5L->(0_ zim(9N;2i0wyii9w>h*Hx<(^kt)N0NzbUBs6pEfO;WuO1NELB^SXGX_azncG$tip0R z7M~d3ku_N;{iX$o>1efum1{}AX#sWre{2CEzU-U&05?KFDa1~O0Esb_+6&0JBP8S! z3Cm?D*RawxsUs=%x_VwtmXJJ%;zHq^RZDT$1|m)0a!)9*INnsQ$4l0u)~P~^1;ia# z%5F@UI`X)A6nk(%k;=F%dHiha#*MA`yl5&}_GcT`v^4p{ZTXLxuWDIY#xHhz)`wd+ zwiy}u@Hfqq{1ZhFFPXO%I@}SIw~p~mEpgHKjQOmD4e%mYLY>rj@;EK^Wa04`2N*yH zrhrilNXN3N8}NU*vS@| zT*empgzJRU?(ixcRW+C@U8-@bKEukqyP7i9a>8bW($;P>HJJ_**8M zq&XmevqtlVv=^#n0cHC6osbV;J&gNyy zF^|%+os&(^Jj&lEFZneVaWb?8cT3TLW z5qV~{I7=(qk6WgyF`~jiu;?-i*R(9i((Y-r#+CW}YtQ2g&P#Uz5C5xKXvv4gIW*9; zW79a>9#a<|eiW)yX`pIjP|w}S(@?G*~2@&_9?hFo0w{ z$`7^0{G54@3?zq)!P{NHGc8S|We)8`4$K;QUJh7g$+Ou_n)k$b#PEI*j7m(fj!PRl89JN)dsvJ@|uRgOX z?qILaa@_gAN}Q40kjL^|(H58EOHguRIhIUFHmrsp83@(@X67YF>{V!CjA^h!iEpxs z)n_tE7o`r8A4WOC{Ct@kts)cu@&hERd|4S?$jCoTi7q1522x~|u8VT=QxXs)FrvkC zvJQC+;F=pBI;yZBM+mJ5<4KIHN=;DA11%Cea1=K!Sa3o~KPdeNPyS)TiEw>{4k}AK zoYZiQMg37X$2`$`kLch!1Q_?{>i7VN!qFw@JsAUkl6gm=B zI!g5EXrbufjg1(cl|c^s^4f@Toj8FUJnF?t(TUP3P6v49z%F+^O#QCostibF;Bv3S(tP7xCFLIE<%377L85voFjXuU0vAmCSpKmjiu z;wIrQI+`3T*Fu~~NOlRnRftXr@ErVE1-j?RA0e#eP(538>{cYvp(9bBxTcC(;dPGA z3N5IFz{!pRTp(Or3P3@LEOix17x4&y_=W4P;;dYafFKZH54XpEjh=m&qA;uu?-(}_tWJ?@VhC)4TM zzngAt&VSEBk4|W3QSG&nc7wN9i+DrFD_i3^G_pMoL z!cgSO9K@376n1;LxD0kQHeNMCP8_~l0{&v~VG1t`IHo(ZW|T${`4WeCLKt$)nyEdJ z8K3f31gnVj1T9U~hVh|5i%~onj}w_0(OLOuCyZGlG&|9fsJWrBe{-V$nj4I%8`yxc zh%3!(4S_lk?OzwpC3YiP7YXPfUAcAPG2@d6c+wQ8HiCAgAR=gN2ujo#6?GNVq>D?xkvKGJvW_;eA^}C7&M|B`vR$(!Y%~Vfx~dhV9_L4FRurQgm{K0&qY!1R zR1lKZA9Y9^W~aq(Y+^6Y(XQwZ2`~rj)-SaHKSCEPmDy4# z+ZqxF!lL$fVqJ~9BD81|CL1L}4`{InHjF=+%K_Y#(BqHJQj)>d;yI@mBI>uY;8vlr zt>tJIC;FUlT|$9Vo$;uj_81$Ed*aCL8)XIPmStce@7&=f_$ zJDrTQe?|L~OKigua_F9U@CcrUNyNDtdL(grJ= zDJ5BmnJpCgInWBI1rAeU5UKirS}A7DfK9aX1^^NNY~eE-iJo7?s=-(1aodEkkOlV0 ziZZ5CS`q=B7*~;D&9f9DF$u_M_mw0$)a|H5r{7Ydv@@9;1fG%<7yZ+wG7y`NTt@bb z9DcQP6io*EnAtgti@Qc-117uJ(N+}*BqV^FCxWDuntY=}Cp^?DbKICOWFnxl{s0^@ zq=1^bGSI6*&#fjoq28AFxtrlc$!)qrC%9fOT0$Q$Uez`t~mAu z9Rj2QXq<^khzsgR(m@_QDGkY7j1E*gs~7!4_MHeHlmf~*`>sU@oMe~fN?btWDS$$i z4G9U)DPz}Ro{9QVkNl_BtyC>^JSj$7V<3qh?Tv~!f6Udz+={8HvVy3@28Rc=6Um+b z=l{^Yl!yKw*J!Tv(rl z5=y_7%GD+kIA#dPH zFqI-x%!CQLonR6qBAAE{oJ2YEo6T4>`UAZbl}x%3OoB%L=~@;hT3?Nx(J8Z3wYT7- zvXQs3oC%sB8s+)Il~N$7icc~SaU-@DkSs&+ibl3btcB!S=%k||xC)F}C@yf?n8k*1 z=tW4$QA0wTp$!KLN(j)r1>OhXPy=QO$GM;+kz{g_U_%-*p)9F);>JuG#>^xP2HTJk zY1w%SBF9DoG{hj2#yomU*ln`I63HgmJRj5{ZS)!a=EP^qJc^3v7f1uD9qX%Ki zq>&f1!%Y#mBHtP%BpQajxgA5I{q}g8IwR^FD0E>tsEIl>Y8gh)7ObMJ(?YaIj50c=^Q64 zaUUS7l#{ygI%%BA@o^C+FV)O9`lVkmn_xca#+f9m zHXxq==)12q9%h}KYrA6MO;W-*Npq;|0F&j0sy*8{|eg{Z$P1zubky7#4^yTb-SOAknias2J zI|zg&2Lw5J-DDyd8m-AG5V1e^Zs-FjDVR>Ao2=1ToEGPZu_ae_et;-Glv7U(?d*La zxwj)DVUZ%tCTLR!A~&u;XIX8W7&Y|77?F&HJ>^kz*8wlRH;L4~rBDM_?59SgH@R(fn3br}#;jyr z9JA8Z2*fCBfgoQK`o%5W(&WoL$3h|p6hvWcRBX(H&1%rS@Eo|b&@~;GWUH(*ac970E>@mONPIAUI$%P; z?p5Q*J+e+Ua0ltRkeXXvqQ(xs<1?Rm2R^u%-g9_|P2x~KVV zJfbJx@WJPTkSP_E)^cF*s*9_eMKz^rd5#K4vlC^{!i;X^yL4`GjVm>fb;n5@mFQAy zR5xd#O|ED%NB#*2Mhw=c`mIMzVl?MZ(pk-?}-jh{GUXdJnWRoZ@hpb7ozm)~iY9p(V zLs_Rs3F%u-4lfcw{n+egbwIR2%!x{u@E{c7cxi&<8k*Sdaq3wcbif_W-fX+HvkyM z7G-h2NL1|iB1N9nPA3i=?dhV`&|N)8|2)?c?x5(&j&O_CCKOTn=z)O)?R;%@t{taG zv+YCv2#Zhvrg1vrANqpbDtW(l7Qk2pDGSUcLK;^F#u6FmtZA!b_ahK*1pXBaLMRLt z$``wm4x5RaVdsEYlqbO4pbNA8P-Y=mDHfHmXE#=K_)YaS$PV_5XUFk}{L;s^ZR+UQ zw2du^V@B$4t$Ms?db(%aIE}CIp6B%Gp2^nM$)0K5KC?+jgGbCoOORV!&|jEiTM4k~ zl9gxd8tgN>uJb|~i)X7RO;)Ou)sV(wBzvYJ%1F2hC}Y-Lk}_6R$d=%8>FlpD1oEIE zF&1Ww25xMA4|ck|3>G^-GhV=hG*{;Sl-GpO!wfH(+yAnTB|N;y0mH*69gp%YE+POSnZuZaANeb0RLG=u zMxeoq4$;mK(NLBO$0yAejN^KifAi>4(s~|R8)P!eN1OygqCET?;U!4K zW1OaMY;rP#Oaa&qg7O7uu;;Vd8K`sdg<>0uCW3iyEc8AvwW3f*b9}8wans za3pgWdx|pQi2rpP8RPhnT+8;#8gm3;aQUZB>&>| zoXtCx!sZ5Sx5BG)Cx^{%Hc5_A3A6-qw<^e)C{i&8P|P)IF+>&a*)2v@Abf!1swv;D zHLTmkwBznCnFWOfL?TDtSXia^D=#D;e2^%HZ{zE!g%?r}JjlP<3rU>$`S&BKg@x3E zm+|j%g?k02qa4h*0QN?+U@9I3Jdk>Ue`~m$dhl}oeG*q5Of~Xv&M)B|vlUw$Q9mSZ zLNK_n=|noTTU+u9Uc%#e3EF!pmqJy>wd1+m`13mdff)t7{k%(Ky~vyXA^0SU>zYnJ z_gwPr_2j~?P;3Lj+{TE|8i9>@0rIr}m>=y>_G-2aXGQXj^R#Aq%saV|9; zP6fBw=C4XU_E_rcSCJc^{fr;J&M$pQIlqcuVfXM$07km|Y#N18D2fI3bC45OjV}V9i>cV4n0l9jP$cpEmPv-J-#PR1F&Gk%j<+wa@F(MSuH_gj+O@&8p zc8e{X)&aBu;04n*jzrf;T{eb4PGlrHgW(UCI(9`B7qFRe7(eJawy?1+RoComXkXj4 zL))36DO&AdPe;PYt#KpP0(&6sT%%P7I~!hG+qzcICbzbxd@T)u_J-KuyTugl2kz@? zAKRYQx`P9){K}3{XXBrQlHGxIU2CDGGwARZ(RZyQ@Weh(ToAk>9ji38wd$tpw)&cV zqR^V4uXidYri{~>iS2GpoNL;;4a_q^aPG{1jrsr#f;!C7Wl^GFE@$Ru%^@};-j7Z7 z`hqp04pg@Fx~8-?Mn6*%#(!*Br^#yE+b1&IvO;H#(whLgS$ZhAUJH9cKFkJ+GDr9B zUq7BY95qWy?!0E=_5<7e{; z?b{a{_isCJ`@}T@NJ0`eq9~%;1_Q5}uL$@}a->-=T;U&rPm?-tSO}nk_W9Jo{3o>6 zA4vTn>rEci45nG1i*yuexM#E-pZe}rKd@q^HuxhwtzmZ`*I5*DB! z#aWmln@9=7A4#%AW)bF*fgrmi>&bjW&&}W*ufP?loq+X)xPVSSyg*UGe46F)Yg2}a z1)IcNm}C+r8jl0(2!?T!@=f@22p0%2pR?z)?vsK7#sc1q_M1QOCh8O-7a`oJPB?^Q zJOcfs877$Rm=6;#(L_=jQ$%OP&okIZ9Ho$GQ9uDo;iGD*Se8QDZsBJLFEMi?Fdp-r zi}uSxFwevb$!Jqh=n{Rtp*>=aFwpdC)mi;V*M7}cmth0hYk#DF&DY*&d<&S*fM$#G zB??y;boQb~KbxuZeGLz1GpxU{-S;(=kTn)j6UiCLY5+*b(fTcnskx)yaV5VLjtB%J z;V&hZ(#bD}$2(pYV)k;!c=*f7CFn^x4Mm%y(=KVEYU&<9{o&AOQwv~oMt=dvbm|4L z`FpvU1)LPUD&K${iZasr+mmmfVL^Q5^mJ|pzpy$JU%45s)pedJ%&eDT&uq-j!=Mgf zG&UT9gjJ(^g#({Yzc1+cts5s79$^y;{0aadiQ&7BxG_Bq&PQRn3yp`xeV7BBNoKRj z8B73V*q&SH{1)Sn6=}gfZJnm8gm8tlnZ6Xi#&e_!+ELcoG+Uy)U?;?t6O^JBV^v#X zP|_GhZjhYGlDcBppv=#A;u5b>YA_T;FUx|cP+pKsO_v}vAOPH@jRK&^V=>WyD5hT~ zs3gG%X;WS8<9msT3my5XhWAcQADf*@|Ej&$Q+w#5T}Sqgw|5Bure=># zPrbL{p8>d|J`^T%Cz9uuVi!RS!~-KkA|U~JA~y+(m<4=F=+FPI){y>Zvtm(|3fZqX zv*kP#7{v!oQdxn&OR0IIh5hsc=)!3-C^@gsC#fk($*kwEgiHy6Y@~GziD`44#yiOcU3>2fI5keE7V`HMJPm!wCrkjsX*{`* z#72C{7qs{0?^{T5ie;f_&+vjx*qJs(<%lw~{2k+T!J}|3h@iO{8grTD@lhB(kB4bw zd&Vpm;VC>$MLTKCfh@)eHkV^_I4tSL90xapy^{nC*0ZOL0r)ErrLve|i#W{d#sHqp zplO)pLUYs5G3NhX(tIL=6U-K}YF=oTC)EeVh%snhh_L0-Y0OpvU?T3K_H6Z9oveqlyv7Ouw3?Hain6RHmdaPtsdWf<1qE#Lem z-p-$(f^Z5cn9=Ed(oMS1gd&=P7Xei+dT}ySh3HH`Zy^E}g`_z!!10z$>K6T$R5p># z(g|;2&O*eyR%s?4^eUUO%FBq?Ul4`CT}bnYl#R2RPjYo*sSzzRB1i}sHMfpx;>Kmj zvqw(EV0DlB0E>{p^~q1}l=+OL*_+~55&kTba>yH4Q9x0m6NM(Q8Li2;s8sKPhfoDD zALbBPQ^Z5Qv**V}&u84YQv~e_O*NsITX>Ujm3;^X7)yY{d@h-$2v=SRY{wgSCPDO! z8Q>?FFW(DL88r9GCcq*vNKiQiHxDt9x}jH$<0MwZ4k{<w?gNh%2On+>g#+W%WdZ5kthN(1#HymsphSQ$bnSg?5 z;KYFGV?5over%cxL=t)Csn?u7_BBY1OCU2_RYRrqY){W!O)bQWUh3S~6Ok zPcuL4U>5hHi;z#dJB$_^wSvbvHh4jMFLhXEsTdM3C5@BD$t0d8rzj!Cu{YH&EHP7y z!&II_;0&7*<*r6S6PRv zQ*)fkj<>CsJ$PF?zBH5i8VRT|^?#Xr7x=iU>t1-y8I3f0Ycv|oNS5T0M$(LB$$CpO z@?gs^SvCd^wg3UfJR*!RFF|lJ5CTeggb)QpN{K_$W(Wivm!ve+$LCOz_$Gu52{&~U zdYiOvs?vl@lV6)j`hAJZwNCE;zxUZQXY{a4o9}l&TQld(dF;LR+H0@9*4k^W9lbA> zoYy+!Z}Z<%vFJ2Wo6rg{sE(p?j1wQHrw}|K$a!HaI6kj|^A~7={~MDr&X>F}s6iCO z%+rq-jzqPtdCuB+VKQc(#GH15#zj~qROg+2{^4+w{ahquUXK#3Js5D7VsbnM;c|ZW z&@^RM2-!Hyn=fjKp?js!nNtFsj;;3!;0_~6PQ5fdIgNMFwW2_@_Fk3=e5w-Mi22Cq zi110FzC!UYB=ir;XWDT&OPELK5C|7FI52A?lS8T0(4_e?jJR~Tm3s&06v_!mvJYx8 zy*`vBG?88~)sQwXW{s!`{Rtuh9O1NKl&6iDFHa7!ChkVu*ojqg+CRusR0twQqfm=v zfwT;Ccf%gS9VxYrrT) z8w7GTZ#J}Y)sTfBqZM5ST$h2R{l;eVV<{tH{#LX_4WlLxD-^P*ZJ_ z4ziC-Lq5XXv+0cF^El9lUvQ8FWZfXgrkJ8dthFC{&#$7h+HHopWj2xiRSZj6X7DjF z&}cbPkBf&idyApnHXHp_BK8;t>eOuPSK@IFwo#Ujr3V2c@`$9gZ_LJ6f%$k+ zn|}2I~e5m?K>*e0lg6xQ zqD?>Kp7bC%DLOcVP*j#x5VMA1q5cmd0!JX5F-qiFFb+o_g9ls9Y#LM@WUZnu*e3;H z%eOG*ICuoZ6@yRmSHveIai$$HA?pLcoR>tjiehqn>4+pG89}32zf8*Z5zA*I;OLg4 zl+y!4Z6!OgEC!s)IfGEg#|_XdV{pk5+QAEEz+Ld!982LxXX6Z*{>06%4Q&vV8~r|WBK z>RC}|UG5tMpC z4$qM5fyWfXw@&dr!K5^4!$!PaV?Xvxr|CzVSKAvrUN(34u6x?yX?-+!%eL`{%2H}q z11<2ur#JTA3i)JU>m8R0iRw z8321YW^RbtN}_VJ)BLJXZj^2snW5<=^D+4h0i(s+nKC=n@^oib&?>YFV?O>e47L`wfUN~ zF}UUF4|={Bz5Sn~hs61jleoOsz3rw)F1+%oK_h)j`$zVC=r772JcdVNW@Gx6j%ohB zxcsd@=6%eoYV!};gKDYgfEI}MP`^v*(&!C2wX*rb?Dtu*e503e+2)>wIL(A>+;>uWH46mrmT1{I9 z9p=dlFj>cpOebW-F`mdA2m<%`l@;6OkHvNwqeJG@u`k9(pZmft?NhN`I1C*#M|Z`J z@g_dJ5a$DUQapalcuwAZPVgH!=GR(tn^Jw$)TH>OkU3G>e@E#k>-(|<{=&uYj}EaW z9BlXaOTGYPM;vmGLfO7n#=~cup&AD2l1;VrOd)S^z=>|rj?<4f+HSrXUH|;^>!UN; zJ&fnUsrjl(#ZG7O_GpB6c?*l`{5^wzJPD{>Oy=Z!R2K{YHsw4bb}5vzyAZy~Rpe|b zR>r|yAXNyBK;!|176+CK$vTyi{1yww!%-vyXzYxDw_Xb2+ql%?vxj&F9~{Iv3N=F_ zf)f+hX2{1`nH5AFLM}F%k)R)Q8Cqo0LdqUg2kyzm@CXbq5Sp2WBuP^)ibZ-g$-76P z)mMvXkS2t^P!^Yw1vagbN;XAw#(r2IWL6P#z!t7c#)h?Ta9+UHk|!6YAAIm{9(?eB zJoq3gB&|v(6izMXiF8_WQ7{lHFjJVaRMkYIwN43+C6^^(!1DVU62`bWI@kxIn-6{R znZt?1zQg->ZiMNIvG4f2lS(C`TT4E7)8S{3DRuPLvW>B1f(wCIzQQ-+F=bfEl&!5w zzF{TkG`Z_MLRh`_3WpCr^T|VEVPWIW{fGBqWinG?@|nXoeXe9HeN8r&-8#DOFz&H3 z03@qqAma?$*avHI0PXF@V#~$Y$?$eLXyovu&PL6Ux;fAs7CIYsNGgb3U0y}y{#71? zS9>=pty{h)^4{5hBLy=QN-WVV2!1EjJLoNjxP~^cGu6dpat04W(Q1Zyi#PCPBobPl zP`;8gIakdixHFj`hV9L5R0{F3&4hjj@@4NXYSwaKO1SMXE(K2;TLPP4Qs-Q1k-S@$KT*uH<6T%uq zZODLgnu>kGs|9@_j=dr+Vc1&XP7$S~5n)m^XQJAjvyfa6r7e;%ES%)M#?Ci!9U{yu zhN-gkmP1*t#~^KEdssMH#DUM8Weg!7WM(~Y7+HXcUmE7U!tA?c;n$6wTVN?&NN8XG z*5>HuZ{1=1=91{QSS|hyZb8*$TVO367dOqV46XcM(QmPOv(0#J#b%P-gaqpW6yoRu zQ-Zk`oJlk@(;{P5G*q<`{0HmhB9{BksQJmqu&_=eOazvjBamE}Ack#YcV+UGDU^b8 zSTC895^V+Lf)3|t9B0{*zhc*Dcx1scKMIp7E{`H$KA?R=vMh5;rdcP>y-H53!k8qQ zmrTO)AjXdQjuujc-N*Gg=XGRIgWfZN1VC?Y^h70_Io{*QZ zDfWCHu{_E!_M9PTyTY_}?DfI?Wz8q4G)>j$%xQk7QVY{5aIBz2hB*(h8qiG&3>^WC z4SD>-VfAYo)MOgAPhsHjf0jSnA0IcW+M z7$xlk&cTDU6C4~&Wk-dP96D$m9HOB>jX6;!rbC4iIsbt$&`YvR4UJ}jvd!62r8%G3 zIlz70>^d*v(|q!2^G0btu@n=xs8yBhqE^CPYq@C#d<>Pt z5S0nFMzrwrV3XQIqA563T}>dWtKrmXm0s07wNY(yv2m(6^2`5afOijKn@v_z&Z3EvSf>AWJm)QLPCN>q{fT+ zLUf;bqxR{2(K*y=<0hzcW@xXmcWBOrw@eGqxk9uHWCxxn89kW83(h2gaM_cOXac3DoB%yXRUu zh`#{qe9P7)raG$|ea=>T8;JEXtWISZtz^Am^}>7Y8D+G!9vP7>-=pd?W(GdnZYmie#Apfu5$WVkH0j*Ug)R7-=95c1oBq zxbuP#)cdvU8a%xf!4#!XWg&wAIq@O0&^+cZK?}o;o%F`%B%A{Xl`1@=;SPx7!>(YZ zQ5kfZe~IOl3`pqBBrv1KUN#enaH8YlD$zk2;fGl_LHeQ_;HfOOn&?s%BSa`HEk)C@XS2i`LqDU|0S<*nNKe2AWSO= z^f2G&YA=aZbG*p^D1PB6z(IXUGHO<8lUCR&D#3gftzwHfhUxXB8e(f3TDm-lgLt2< zLL-ui1sLo>iU{UlWteejR#RSJDiy0x_zNVr8f^579H0VV6ogcbP=+t$*oPO{S2n+h zPGPq|IFy3Zur@A=X7Oy#610iMN5Dh$2?WDqsShif;GbQFF{iy@_JL#Mc8|=d3v^(4 zNi;_$Xd&&e!}0Q&c}ROHGl*X17dwt03e1Uw`3}FWkv9c`QRJQ}QI%|!G@CG|5}88i zL@FDjXW%LjQ8|*O5+)x~aRLrVihu;)cqc^=Qsz|ZJyeXy$l!7n3oIfkLxC>nRRIlh zokT>Xd@l;R?dD z6CZJs=ETeowJ>%%=4L78$mWUVQVnmT2NY>cQ?L-vao7e$4@wu5%yVKG@u@6hU|_EZ zI|ckcm|2cz*ny#qCA2Z~g@pM+rqn4+poq1i@f_17Cr2E?aRXTMr2i|r6tT`oEd;Rw z(;`V5E}L0;5^%fl4nKf>;ix1W;M#yoFaDOJ1T`KMsw}dzzf2sFl1az!3EHFJEg178 z$p1psx*Js=$+AFw+8RKj0|@t`2BRn79wr)090lNbepJ1}<|?jf!x3GAFh)fS>CPlw zSrl`|JFJH9W#$F_WGbE3hQ+La#w8#pk6MI5FDOYI)=P_Cnfv|%;Al~)U2hThpd2W1^9SS31?=`YW$62Qz^;Z$@Qzv&mDkTx8e2!%rCiO|F^aE6~D9PsmO@BOU4 zUYo2RtFNy&kJOL-3}^URj{|<H~J-ggQM zb$4N)u&{99bYb8-IK$6E9PktGZFFpOKInWfON`yKChUf{ey6cM(Hu<)y0`&LPb_IycW@jsW8n3tC{-uG4sN_)Pf zghyP!>wn_-6KA6{wCw8xp9BEUmoydQ$k&g3QdD13@+fN;ufObg+39lTFZ+7!n5?~o z;N$hz#;n>e$-JI&ye^z>LEqSVSki_9z9eeBjw4(DX4HC}NAq&FT~QWA3t=n-afzrO zNSo+ynh{XOY)O52V<(U{RZ@?oq4IiOD#1wuFWI|qrE&&(Mk+npn5Vcmwe&`mwYHEiP0Ox;LpN?2qYTO z&@O}^X*1V7(iD0=blC>$n0(~A4VU3UlRBadCBv>%#-~2;Y^3dv+in=Jj)`YKFmMAd zMAQ*w7}`DHb=&Fa>=pP041UZ!`T2A7w_Dp&tY5Q`Ebh_nVM3OsTBEip_bn`=g&X@D z74Xgyyt0tguPN?XivqNJ#4CK4uUWG@S4^zVM6{KvmQBxeu70{_BtIXWS6e36?17V6 z`2%b9Wwq$w{Cw%#fgk3S{2?Z|JT&MPoC%)lMS^?{A0PgQV>;Hcp?^)%`bbmTDQyfF zklA6*h=^v%cMGWe%6D|PdREKhW30h)Hgv*K6KK<5D)hodUsj+^K97IY@nD!U-$`pR z>nASAI;^+zfdly#08x*pU<<`_qLMV4aT1NFr4=e?he?Gn*-x}Ot3Pd+Yd-ui=Ix3H z%d~Cg*UBEeLK9vEyaTWPiJ3btH7>m)EjmQjLO1u^Qnlfn5=2m)c+G|YZr{NuK)9)+ z@dciOUL^0!;LG^o53S}L&`KT>m8H<6(-4)_E7^xt!!5sw%u@`DsFw+Ph)$+tswl>;3nRGs=HKO=& zc5*t?ZB{3zA!pg6(b!P=jy|p)PRWNzMQ7_^`;fACus*Fi7@cc=P1}afWk=aMSo9Km zd1(jROVy`yN=Rp3vo&6Iu)vb$8VvioyA`U;Bj{hzn1}FhQTNIh)T36LbNf~p2{i5a z$IWu>S09JstFWgyBPHR!4LVkZU~tt>jvsmB&IkVG%hxCGeB;Qtas8M7$tNMB+RL)! zbWx7&ZTo90){adm@ZSaJSp2tYKLP6sBD~+Za}VklrA(4Q-+q$c%hoMRVcqiG>`Ov& zlvad%NF&S(O)@zUiK^$_{nR3X=sqp7wTfJyiix@H132{*y{`t>AC)xMa zyXuY1qbPfgqt1D=P#()+ed8VlElNNR3Fm@dL?nd6Xf7ivu)L+k^nzGk5(o>X=3?7# zOB(sc;ctw_KB7(f&b$*tFxTO0h{V)C#Kuw=8yBaHpO44>7=TSU1F?ws`tDis|s_6<@$ns&1 zVkFow#h2BK>hXkpPS7Cbh*432SF9W4kOFvf2rF5rXc7WGUQZeaAAR&7I2V50^f!O= zH&~O$C_r9VSpRsIPE%i#W00kizsnK}b(Exv!K5e)u-?Zn@iGi_No&cFO=i|tIG^Q` zr-TVHV<^wNB4jry2qQ}%1X&YMVLr;%Rw5kHY_Q52mO!iuw#rqITZN*@O005Wddo2| zF}15yrl_5%kN)`W(b#=a?BoNe_)*qI{p4NZ4)jEfoXj6kq-s#c2MBP&%4RE-rP~xo zX}^^FI{c^0qPg!RRXlm5GHLsJk8lZV2<)ozcur+ektPQ1AGDE{6}C?u>C>MBShh>D z2t%C5awvm4BTE#vFKNmUn8T{WA_y@dFxT|bo>-}1kAJy>yOx#o3KzOH&ak5MK6+CK)Ln%!>vfOflMj<0doyAZ7d6bn`=b3 z?=N!|76!|%3g?$qR5awbHn`SQR8+b)<@w66@URSQ2?hdgDOy{G7l#j(H{|2RL$_3T zTzK)FvWmoFn7Ig~uv0FAHnWty2uos3Nnna+5?kU77?VeZwWEgd4AJ%q$fSsf19rgP zKnvP@26=`A#jp@4PzWT-RjEe=5?iqX+huKDxs}OPE&c55$UFx)yH-W+_*t5;DvnoZ z8t1&E^N%2?taWf_$5F>6t2W8mm|5+X;W?RQXmkL*E<#=?Way7jfpB!97VN94(zmYM zLXT@?fgVU$ku0hz!XM_GHM*wh{~jUd!HQe*EJS3!tB-Si@_T&ad*+lZ0^A@CZDRI& zJ=coiE}JQ>vE0Hpw-GsT!*(Lv-&PnPPOQ{hpiazWVbt2r+CU^jvVfeK0E7ZO^T=77 z1-O;dMn>Sly0R@TgWqBfWD*QguvX5HvBg?wLWVj7%xZhA%m{OvqF{lN!-{FvZmaf- zMScvi?6hHFLfF6TDcOasvN`1f7->v0w+8zb z^*S~?b~w%lQGz#uLt^F9*GpGOI5-HX#B^Z$ZHLT$j!7=R3NFTth$quuiA+r3uS&Ql z9zJaDI1A+W?Q=T!!QpYDHNkfxa||irN6dR?X^lB*R7I-N#`+duTJ@uvFGz=&oN}3! zVp?F`de<4aK&bB||D`iuqUWTl89*3CFT5V*Zbcp8nj zli4!BqOoGe0}$s7EIV6~r+)No&@PPsXThZ}GJRpWof>fyAIvg1FMu66G;vV^dRQ%N#O)!zkn5W+!Rm1^NF%6v%KY8fDSV&_(2vnt|*E5 z$6hzlvlt#;vq3?XC<_9A*=k=@H-2JNPB@-)?svA?M&%&3ZoVipRRAAIRU)0?gDh#M2Fi z@$PaLu~s_?++|x)E-V*n?iSE5hL~DR2AYLG%0ltHHk_&XR$GNQ7XqtYtd#4|D2b)p z1Xdm52$$`^62&`d5lC(ma{2tCcknEjDE?M?Ln?k$AkOlJDxXKizjI&VI;aB6W_027 zQ$Weo0?$2*EIzZdARE)GOtdbav;^gP5qBrvmP(cuUbNESx9=Jv zrZJ?4(t}S0V)c^kdOS~=C#-lui4c67Q%`w3k}=oE0#D7V=+dRQB9B$zV{!y(%tL^- z;VM7lL!QH{k#h?fLhx=F7!zg4ZGD{ng&^F;|JHck{3ipx%cCgrIrFVc2X*dIt&Ivi za62Li>r#O1npy(u(BQIma2QnnfR&Ab`;bVN8tG*lf}ACY7YP;EE?C-q`kp7Ai1u8= z;j{2>dL@U>H9ck>-9;aG;)$UijunH0q^Ad5<~YcSLI#)$l$lI`i5F6w3ignpzwjAq z%D1!M(la{E@x)Yc|-WmeAP-Wnd zR@(?>`6zt7;n7%?uLc;8`ZNbCQqQImBMYwy`VfLdl4I2A!U!>s^o+>b*w-wdl>ivud3{*l-k?HmpC0 z3t1r5McjQ@br1|AN%jY1X4zmS2x_G-s2xsczg)(~&R%jU+uI%P#)?EZTre2!_IJzm zSBZ*$D6B3nsV;1B7rF~i{dvpxTJNg#-u+2$3tV_DqF6Zjp;Ne7*n%gE{e`Erf|m5% z-padfsBD47VJSFg2W1cowJX*?)6&wqa>euEmR6|e%uP-HRR%3~J**rOeOfNEQE+>-#V#zJODsQTR%%gDZRe}oEs|U6|b?DGjTL)5!aC67a zqoX%>G>5CK0UR?ThIRU{qW9Q?frVGn7Y1+Ie8a~-e#7RQf)^U?e&0wN(=W8`sP^Bf z2DV|SvxvYpNpb>xoNZ#Q2&L>m&{+S{=GjEBv$Q4y{i(A;oC9xK!L=NO!bBp8kPGAV z72hbV340va-Pg_uk^Tq9ChBgaL|;pHBO)2m8G|;+?a2Z>0_QQE1B2YP08?ImzT_$3 zE9OtCDm$)^Mz8OvtTI2K^@T26x9-9ZTCMVsBXENMtoe#IS?19)VnKS3ueEp${uQ_S z_83)FRi{+zB3Kc`ya=o(4NpYa&$8`m5LUFawr6!P7u@FpRN4jv&EeG3X$GZ1j3b<3 zU#QDI>p=oQT60%_Bffpye9VqhXm1fq+gc4;kEK#R3NPxhk<%8k849$osU9o_O^$idv*f|X{f=)5n zB7OK>=FhY>cSZj$PcA}1yvvW?ZQLFGJ4l1pY=bFA=A;M#r*d)-nJJizjuSN5I7|G= zqtQ!_MgK{B?~=u(_#<{ee486&iOUto$RSl6i{eLr%vK)Uo5dp8iUo2Ega94$wIK_U zed>~8M5b8#6s^ecM%b~I`}ek^8wN!xeqn0DJyxDz~uIk{E;YrHKq7QA)u zPh)?o-4;vB!?`_@)}Y6tUr-8$80($|86hL9)+LXC^N+w7S|I+ABdMoILclBsZ1AZCJGC@hDo-4}nn*lCK^eIN%{$~vH>Qm=*s=U!{)d>B@oF0i zc~Ue`IJ9w$bz?1sg}C@#@>c9v^owsrk7-j;b3FE1ERFMM6j!yW*lW?(qM(=cj&bMH z@TMrt$b`rajj;+{QH?NB#Hu+|rYBSMShs;#;(&)J6zT>SST=|os zh2R0+I~IL)U<`MF<)n5TD^+elEX1&+J}tC9I1^}-xG|0!@T*h8B5rfZifPC&9{{_{ zKP9yN%u{5DlMrrYS<=4`IOH0m3rARPeQ;#fPm7=mt7w#t@|lASb`iLf0z6J=(0^%i z0@zIGD5g9GHrJnV1FkY~T+Orxj`X5ECxS}G#R4MY$_b5#fZ^s`>{&d; z6BMmh4)Nd$&i;_}!MC9l!O0=(1k2}b!aNeS%+IU8lsdr`rn-X4_q_f*SSd-BeJwVL z*9_Q9qO*_j`!VEhu+DHvbU{EQiOO^onXT%mz)C?y#HQlPmV3O2*}*h1hIj4(GM$)t z413rC!!sDB;bJHRT=|g5fC)npy2K90iszYmz@uD~)=QfxqJR6j*{EOS*~k&MsSRQ? zmhhmjs!X@~QRIj5)5BY*3oO zGnzQaQmr9`U=Ejd6tZjVlqhVO{ZdCzi8R5d#p=D?Tc|&{m4#ngA9@?Aa zSI*CxP#h^#w7+H^m3YYfSLBU|i)1O`O(?Pai>e%h@8L0i@CN*atoP(aF)oe@ zhi<_tnfMuGNOFtLgF90ViT#&2EWbM7_|>4mt6~qzrD7NTw-Q8Z^Ej zvW99p^kMKmrZsG$zN+;vdfAB!BI9Vkn&>fP8ikmpO>#n{1Z5aBn2Akw#=m6$o}*ws7E77J4qN5!)^?AtI|>)U0f4 zj>;80J<9NHv@54ENqG|-OEzlN#$@YUriSIq7V;y+J*d;=aA90aFXzGj++O931P;MW zNm3k>im?z8ze2&F$+Sh2V6%h$ zEmR(nqldFgo_Piq)_?rlzttKMgq$`Q#wpM!7ea+61~#1;>=mD0m`Ly`2#HT-C9n#7F?<5{N&RBuCpckzUZsg=D*=<3$utp)3 zkJQq*6ex@{A+6#cw%od*s^+|p#%`YM!p5}MU)9*qwB~Be_QuZM!II*5{PLYs-NnV- zH#hkL4c1(I5><#E@AZnnJ0~`DL)5f3JCm46O+e_KFpo^2Gg8)mK~74@oF^%!gP^S> zfXqRIip+PepSmGBFc7@~5u8Ty-brn@`C@crB&r$aOOyAa9Hzo;bnbUtU`;XHC5COF zZ38XI*g2Lt7xr{|+Nix{7M+Xi1vwCDE#-|R?ux=lL>`MO+$D|WJTEVj=VeW}UsP1i z>yZerHI zL+&;qqcxdO9p!tq0(=HFz2d67w71`xH|LD|KL|NnpVynNx+}48T-);sCe|qSm_QM# zav8>JLCAbUgjDZJ>28D(C$Pk7!K)3U_7f|;h}d7*!~kE!1}%%)0R&9zY|SY%t{P#fE0R1>jT#PJF`nXtz{cwRfWaP={X7aj0%$?^PA1tMtjzKf@2%X|?9ta|>qf{|8) zNC2cE3swvQ1I!oZ83iVqjs;<)saqXHfdULeA>6b3G9acAM=QK5vgL}!c+q^&dltV< zG)3h=iK#*$StQ%a6dh)M50#P5s%Ms1NXv@QcbO&#Ojx)^AA`v$o#lKIH&$gr&PA)@ zC>(keX0={9sjxL-cBiczPNE`poJ<{B;0O9dya|jLn{K>u>#%#Mqa)f>TZ4cQSAo9i zj*s{X&TDJ8uE3b?`C72AFPOr!n^HW3RFp7}cJy{dg5jos%k9z%-P%6mj@GWea6`DM z23K^q`+dg7jf}Jw+XrOYFhy5ZENR=-Kq?LPMHgQpHFnKwk3Ra^HDky%apA$~{rjg6 zUYJO9B(Hw-wbvfKI@ytUqwH>D|Mc{J4HcJp(4Pruu1$={Sqnq{egd~}qvuqnK3bD{Ei#deqcP_fJshkhC@7WG zFSEb&lgMSyEcR#Sv1zT)CiiL^tP}G&#U1BG&cmM}56_BwF+BC1 z*ryERQ?Xdb;o;%K9TiGkP3>$R3572~ab97qBope|PJGP5GPBBKMu*;U@HbKj)ZQ`&D)mX>(C#Sd8HLMSx*VW&u z1=OwV8OBC1EKaQ*fOl_ACDmyKE z)a>z^5?fk?ZzU!;_VR#OEft1oYs#x;QbA#)#;%`&h^2%pp3dGY@NqE@;xnqGYejo= zb2}Ue6FnoCW--r7OT0Sgylg#@#B!(6x~a6RbWv!W~X94Z(tbzF)`6iN2Sf=$VVfDgN(|q4F;V~8Vi3Li~ZGK#bTfNm(P4goGtuG zI*H6;=>%@#iNA`*j9BzD_{WnUr$OK_6EeC{qMX}ih}9oqHp|!zP&)|)82@~%C3s1WkIm8g&UNbt zyLFq?r&N*uqoI+eBkijo}C??-5WEm$$&NwZFa3H%+BX(y?BqsRTD*vTEch_B?<7aQ;LQHM=pr?_HL~M!1uviDvxOthC6K$TQ zgTUMSH#|Fx-p2V$TSq=1lGLa-iWx-bwfU~NR|7H##K?JFSo@d@6_N#H zhb7pexX=Pnw4bIL*K~9=cNQ9DhoYHRjt1T8a}1W4Y=u=DD>99cVn3f5A@2J`g_zARC1i z6f`cmVh_@{thsix6$db;3T*}{Fveqtu)aRZ zu+k|8;>aMpFfCC;xyH0eYyc_NnfQ&};y-oce&EDY{xB5csUJx^nPvGUu8VXX)*=fv z<}=y{qS~!50lYO`RS&}z@}GW$G%XgYs&xG#S4qA?V@+tC7wEAAzZ%dh0J3tG4p&BM zqwRYQOvHc6qYJo*C2A)#V|9;3$@9anu}R?I+sDUK(o{$r~{f z3w@ND^^?ZJzZ?2hjh(-9++CGdIN%?1gn-k-u%P z>jN6D?ng}b`FtT{=%vsJ&1de81qR~gkM1!4$DiE4M!PtA`N-YqD+Rg-XIADUdf-AW zvVjecTmUJ+ML*JfgKi9ad&6O8ulbb=HE&U?UxAtTJIBE>|0zPaFgwr&5qB1faVG#z~W&;Q)~`0B_Yfae6 z)*qHf#oypSAFRau6SpuO;~X|K>!LKCL7^8X5HbpIF8;utS%OrQs;gzO;NbEio_Vi? zr|qpM)4`H;m($~HhhT)m-y(GV)sG_;7xWeVk(>=`|Psseu;$Hlf zudJx5q`1}tdxX=e2U-y~R9vhV71a5P{Uv4oVhs)Q6cv}dTu!|*REc70TaW>)va-0w zlb=^oR@q!x+gq!n-g0+AiOc2EN_<7WhN7avfAp{Sx3o7kRc)x!*f{gUtI>$;wf`UV z*#DUx`9Ibd(4^EFFsDE16AgUjocp==3-$oro}iE&XwpXFsZ-) z)>S)I+cnu&5y^|RapmIt`&#o5tTfa;JD}$V&{^TIu`QyCj?;*6(`-0*ioEVBvpW1Y z6gq$xk5n^-7_C+9iM$xu^Q=)joHx8xWl>kh2mkUfAH+usOif`u{`5;PnGdT>?CJ>h z=Y)6&585U&3D#LbI&0Nut5Q_s5GDjGAz3fhT{JJ&Q9uijB|g+cm2h?1Nj(v~Gt*?#e0UIiWOW3Nl}mdKXIL zc)ZX_=U&De3$q~n&ukFseaE8kLtAM3=7DeS-|&MCyFa@p&k&c|7(epB11Eokmxo~> znTFgcQPb@>4}=vCLpbsmxFm+Lz#a~{XdK0Yht1ZFy+6hB5oSj(NX(iAtM#t-Yp!X> z$Nc>Mua9qdW5amz$Zq6)+dZ}?&$F>PcK*d%0x@4#>zW=T`m7 ztP>9Qw#IXY6tgee5J)780ZSR3+wz< zwdfzEA<;0?#omVOUZD9&v)+QpdPh-Jv4V2Fe`Cvz?Ps*T-^C(lRBN~bgLmz1_0vUxQg>m8?zCVGuc_U#+_vs zk@ogTq@&|Iuz{wYZmRP4wzu^cxXacAD?PzAbsM8EK2+ncs_6*2-4AJx-yU(T+aHf# z*<94}ZyTFihK5>N)V_UmRU$|7!6}9d+;+O?=N2-6-3Rwr#0VNsUi#$Trl*3@$*z2@ z`n%uMYE$3E8ZiEejTmXNh&i?gM_ z#a95^aeo2!BsSWjkIW3UrRd&7qDkr%xbjG}&764Fcy>?gS0bAp7|ug+6BvYhP#l4# zhq@hLSPH?apsdXC9dK{HW8NWm_d@0+iy#-?or$*TWedMobc1AX@%8qi*dn(yu()3NIb_O6*3PW@!y(7ina-;7Qj__B^7 zKjzr)+yx7}YBKlz;p&ykIp~6)w4Wtw4`O$p;gn$--;8Q6@O=X>@8_03so^J3!>g?7 zC~6Unrt@E>K!7G2I@mwhAMSVgTsWkGK47t0O-KnKPp?==w?!+7K5HUFVM)h9;mvJ9 z2S*WFSi^%YHdHQ;{uFx&#lplZhc-$RUZ?=gns0>LiLD@dMbz1P5T??k?QLZ!CV>Ki-dZVnrKj!w&ldt3M%Iv+zWQ;cm%G<9#kg zon`}Xzx~f&f@x_Ut2FZ{tbogt%8$f_X4*`u!uyB2*l6PktuLWfwf77RY~8)vS6S#S zEDF4<-8wvMeyXUqj75UKSaMT2QO1er7e(8K0N&J zrr@W7JvaB|v9mK!!%n_`|Ll`O$bciBAQ>fOP{6>)PJtq$(ZWkljy}1g`SZ=O#1ND1 zNfT6pUb_bmCZ7{PW>bAgfn{k~-E#YcpP;Ofrq4G=6GO`umCUSvoCPeo?2vzUu(B)P z-Gb`4jd3eXlYLygkx^n&69#X!lFMK{UpiMo71qZ;aJ+TqZe727ruFy-c6_L7By?HV z`5y|t{X2(_f12a%;D^rdy1a3u>qCi$4jILj&>)MALl1SekJL9_uvuN$d_iOVNPAai z4SN)_u<&sqG~DlWDJaavy95rWmH{Nza#jB&4>c{AzsLg|zJ;cTF6qCjB_`nrtSbi) z-Rq;l=F4{)Yu1$*J1=hzM%Q->cPF^RgKJazB5lfSx6p{d7JUp(22mfO*A+6Sp|{*n zfgru%Md3$}7cn?(&@-Lwmbwp8tfdg=$`nw7Ex$uN+DkRpIj@hzm9vcMa^HzHrmpNblaE zuHi1Du&TJnXlQE;4RYTxlilmeb(S1|BU~p#_k`<|(aNE*4tEa2kEeG{9Wf&6I%T>8Y>%jPL&JYbip2#WlWo z1dB&toumc6N4IJ?N=QP&`=AGYq}L@p_9}W5iyP|X?}Wmp z-56mgFYdt$&N@kpI|x&00R=HD7#Sf%^YCEC+fO=dpfZe*EDMn1-=}@G|ANZhsY(dv!#4@NqcMihWPFsJI6L9E-l%`2p@ya+JmPnb?JXQ^U-r@_DZaIK@!~KwRut^U_5lB#YzU3kwSA`2$2K~DG`0=!XZF!^vSj12#3FG)w8vBR9 zbsP)mST_RxtrN6cjol()RPb2gk2V$u9fE;@iD?>Dr!iZIoYHdGfoCYdksub10pK`@ z!obpmC-M2$UVS$4wS!;78wsZ%{86N!@YwfX+)~P6GfDO(5DFj z5x8U$h8L!AEVqUeLGs{3Co&v;=wB`eazJtaEa{aA_ZCr>_(GDa6w~3tJ#3^$8)h9$ zO(W69(JJM_W=CA;!zfn}j=k}@O{VWkW?paXC;Izf{SaPDG_GUj3Ea1IgISp5!A8@ z=m_bsAxcAHadwLMT8t-z@-6B&Fu(pm^X8eYT(Gen1{j8zb9Xi7k)foI^Uzxy*8Zc1ibV%DV7; z?e)W79R{s}w2?e;?;QuWZr?w3FXRe%&(in#%~x){^_4e~*FNk0+f3r|X4`K+%N<=U zf>SB{;2szF1=A+(Lj4JdVcb%aE*n@ha${duwh&*~HG6`>H~w`tiom-#w!jnOP@0dV z>DQF;8ZJdnKF-cIZ|2pi22F_4wfV)B0;>Q@O&*!rVEF}2oB&PGj~bqoc5AQe>~)jD z*_!PPimDgJ2?Dkpga9W6JvI@NrMOGMd09ZR&GvHv!QK&eKD-(NfP0iLohX(;eA;rC zUW9WE%qE~u3oI~)Gg+qikO`3!(CJ#hkJ%z%Jqk6#K71Atf!MB7?))n|-hlf?ma?I! zL#~yD9aZ%Tu^Ixp(9i&?s8)K_OF{>qV@F}0vb&NCX#(;LL561`-iDb&9VnB6eQRxsQ`OlH{pm)OY1fv0D0btK2I@rg4!ay=u=%^f8MlvGw zH@b$A4Tuh~r~&SLMDCd0K*i;ux)x}UF^%N0`gQt+97+;!BGFi1 zUuk|<^i06{0tzP5nELb_&?co4dqdMiUVLVT$cxXIeJ~@!WjO=IVhjqls-Ve%f%#pm zu0tpM?=9Dr>6_IRk%gm zVivb1RhBPkn+JHjDn{v~F-a36HzQr-j2#q-Xjj{C$$^u@glJ|ln4rXfT%qBOXYB+` zLc^JA%u!o6kf5@4+PeX@s%~cet*g|ZrKuEnOt!KkHgd{Vl%b_O2eREdAILOvv&7d* zyyoo9ltURA7glO5Jokaqm0B!Fg(55<;&j7iH;VnD(Pt|{Bxy3+e3Wl%Kk}m|F`g}+ zWv^M(X2S!CQYLCC1Xsj*xQ#4D9rWlx;gB(4eH6RZx75XY} zfmUFN-zvywu~VjU9aBemQ-kc`@qzSb2-gmW{8FYkN&X}Doakb7_8gqZj9YIN-_X7F zE^!+VA?31Mou_rnJaONBsT4jyW)?Od2lEoR&RXxuvsK9$zids5v2c;&&Sh#_VVU-1h65~v zNOZH2CVIseIE<2?NlrP4?L@AQC5UzYo|^(G=A7F=*>Ppim-f_EOTk}_URUoas^R@| z!{*+lU2=3LZf_2g3iIE&^#wK;M(FE1i#h=og2mLmdMB&^W#nAITZCo>)l&RI@m&nr ze;vPS2(Sh3mH0UorO%o04T=fr#WcTjX`@z0_o_fIN9M~xy9oD|7yuyiZ5&T>`no;BfFdL^JG;g_NNb{PUei_t5cm@JC?mr8 z!r%l34!Y1qeyX1Y3wC4XJY~dF@i}A!iW|vy<2^n2gEs+#R)r-pAu%o9fevCvUz*Rx zDfL@Ol-eZ{*D-hE^8H5LS%pdX1ZTorL#Y<6f>fCUjXA0S6&3YB1;DNxw*KR85OU6V zSHS%)6fC-hCag4iq&$RaEa_4^LVflsi&@%6$1wb?7xe)Cx>wooC~I8oo?&c>bsOAx(kXOkPQEG8@= zfE2_Q2!Uy7=UN^uqyyZ~&i^^&fSdqJpcEq2IY9v%!-@dF*krGCDZy-Ars_oqQc|Eg z3LZ={!AE1JkZ@=T^EJ}&CqO!gdyEP4k>!yhNCZ|`II*O2ga(lYb}2@(%zl|_r_WL& zP=J3{MT<$~Kf@0iGoVPDt{VB2_F*JTW1$J`az&0Hz{#P29mB3MNx$y-V;L^2Lt|#`N?za&x#B_2hxk~wgiOnl0+hzirrO#jObwHQ zD&?0FWYZK-@DFMOgXD!7DNRO)FC(3%DM|i=pO^w&E#B-zZ2LtF64f$ron;Xx^US%y zZb1uK1<-tkiFydt65u7E0N>z{r!9GT=oR8eK?iDQRk6Pda{2h};mj&3VlghYml&MD zm0^6|76A)~dd#l~E=MhU*jG#jG4$>8pB{>0+$kj=6C{TIMq;@B`w>` zNi-C*hzfr7L&g!F-VkcMf_3~C8|nr1t3PdCh8N4tz|mWPa<%p*wRst5Z0!`zuEZ3& zT8p)Nz*OvQZiPEn9GUSAwDN|(_ASD~=^xRs(XnBi3Rd&0Lh-)5mT;n)I z>xjK2c7GuXO6WYXWtcsj$G%kdpC?__+6k*SYeAOy7tug^t956#`G)FNxpWd)IJs)4 zg45-qBTL4)sIWEv_uJ$d*;M9`J@=N%X=&l~>g|K?qt)GBnA#YZM1tM#IOv#i+~fF! z;|~#F`KONm%kd4z>*#zq1!aRq$YKyQ3GX1XbL58*(e5H>67t#a1q)bQ{jW2=EI(kT zH2J3=-=yaq*b0xx;o831iJ6k2t^PqCOSVR}SC7BybmFF8!?r!EBK`ka{h1%%t_L<1 zR~2tP;B*d`6wOT3_Pw#Sq-18IzR$lkYQ{%jb^CeKyk*r6n_Kk>ZElKAj8?A}Vjqdj=#JHKuAM`_=mBl(GTnih9KC+l z>239Hzyzoq8p%jGwuaz6F^*V~DPZ14*tFJjcF&!-NvlGhgKr^q>&&e0&CKYFg9h#V zI7{@1o!lPhKl6x~*XJ-lHwR7`7dExWXKF&2^|`m7-7S-`f>tQugIb<=H-0K@o8D(4 z5wN9ns3uZbUpNLouZ34se4#oTD##G7o!l)+dZy-L!eQ5Gx#uL%Aj}AUWim&YzYuUB z&?4jt%*R@4>+kid>)ng7V6`@GzA2g;PmA^@CLqXcYA*MMYG&f?uf~&$8f>*Q2?+)* z6GDvn0Gc^gSYH{b38k5!J7M;z=BXpJh&n6r17k&+u^~?SEJ-eg`%d_PbEU!Z1{WT^ z10qswzGH9mQ0LSpHnb@?`XKmdikN) zb#2k!kL==WT@z7fAnFWO`-XyzZ1Se5&Y|YL9S^N5$c5UpTmqWp5dnaGr^^r%SXWof|7!<+^v2@jh)xsX6bVCrE@RSo2@64d1 z07QYsCDrkm3&PTAd4TCD{P05!i+r|{EW)6kEUHNd=*xJ#y-D?ZJjGURis?PQkN*z9 zI0KtbZQy7~MB+~?ROxkW(VSseT^|{XFU+$AV~_VOd_T6S4=6eF&Wpe#5b#{&-mOnt zxVa4qrb_k2sNpgoqr@B=alC+~r!c zn0hhohT&Q6T5OU4ad<51;SowFl-s8wqVWr{77D9NvWr*qOz*0y1L9$Sr92$Z^8p;VVYh#^DK{vvs3Aw z=GwW4URCF=Y_6&gHv}q5%PUHXy(};i30Bs*kps}PCRFdMC@Cv1E~|)Cl$CnRy%qIq zu}h5H=ag%yh;(59jzZlsR-fN1+J2vC`Mn_oS|O6EJ4>*=gA4vH*m+3I#bAu|=i#Jb z>2)-IVQ`3PBzyH#Ji+{Ji5Z!U6~C-=Z4&#$PQd*f8^^|Zh({tkhetZiBG!%)e%PkD zl{H#(6IoV9idP%nBCdcMCw6DGJb1;^giSw6IFNyk)2ZKM?ibGSyasLz zt@DJs3C}kH3$oT#C906bE-g~VimxXd5)D_R_);n!Ptbslr?Kij4pu^*3%7YOoBF65 zFNPo&CbmNR+!g67%){B5=lz~JKp2Tfh@|*jwkqp%Zf0gq*iIQEHxByrqR!z(2m)e= z2NC9G2ZFO2?nyWn^`Ca!LXW_Q`DPBXv{_q6X3zr!#uIb7xJuaj6$GSuvk|FcuC%}u zQ!AwO90Vy^5=kh}`UF={a$l9r(w=4CqJ9gV;ta&Mht$_$XS=L^d314p^q8XXEWrUFS%&*cGM81_%!{ zn35T0xRmSxT$9d%D#@zArHzv%(9iM6jL@)g+RzY>2m(efOt42mrW6Jt62_}=KRq`G zwzP;G2}>Wyk%^@*D*MNY%P zed@Z14K3V_xHB*#8@)=@SaSzBcm`b>y0xVro#oeGH#!#&<%OFCZ2J2a8l(C@np@(5 zIDC|s3|tAKc~bvJH-~QLedkp=wk|#s2I@R1AFdMLIqgPvSG7 zOrZ99SvSW|pcz(AtW%`HkdC6>Qf9BFdCY1ixc=&WueD=~nK*WvA!A>ReQgpNR%C9j zCbVqVOOC-QNm}Z-c{-bH^)iv0?Pr{4u5)W0WNr>6Wb;yz{^XB^pF&Tn6HHOI(IP+9 z;E33#5vXRpWsq`dIG3oF1vHMd!H6i2%NkHxBJ z1BWQ3sIUx*O$S^tw_(GIY^PYr>9-9|4g#xZ6uZjlDlk!@6lD z9c0JEoOxvFf*}I6@Ju`*wt~g@F~Fm-FFIBkg|w!c;uR|_OPldtz_x*Do>(5j9QY6o zu>>@*3OGDsr)rbYv`)m3#F8+If4b(c2W**Fjg7f&5J^zs1u=ut#+ z^&pat%a>$xGRGv?4j3uQtIBs`)O&5~E8qx7X98v$_KPh{aVqy-;Yq&e7to;Q>fOG* z7oX4d#@0r{!L`_{GAx0 zBkMF>07)Xu?A$<>NGRQ#GkGFgS%z(afI;R6P{oNDm}-_?5(CC1;S`o4#d>7t?f8)s z#l@}0;hh7|2-_+pUa{Q5!~txLKr#S=))E9jcr*1n75#*)SoQQrKWhAd)&1^c#?@CF zAH$?&o?wI#%7>u&bFCWtS;zwEDqarO4T&Xdc9AX1XfWCKWU|yNMx}3`nK55rRdaK5 zLeLcv5U4N>@KGH+#4QT#8iF#aV_R^RohhwrIe6tD5sqCMncHHQtS4dB zC;hIlB8>14!bLfoF^Bx{H^P2pH)PIiQ1v?KOD<>b_XL5agnc-D>*JZqvtV#XaY+5} z`y@b1fv^_bNsF00A7MbV6Km<{8SqPK-hw@dmLkDJF{fj^;uo@~6i~OMeT<1Sa96w4|=0#s6q~+j%9s49It2 zxW=Vr7yr*472%TI<&p1u+N(w@*C9+f0e`C!_lFBgT^Ht+xgTbv%{7IUg+`Ir{XKun z*17|I42Oc#V0!2M+N%v~hU?eVZ>_3{`T)1F8MY|m^~@8B)Gd`R>ve4#ZG~WbNRH~w z=!ZxxBP%I@Xp*y#kHI1|MN9+j4ZFwAU&m-qsU>nW8^I1IfI_Paz_HFa59_aDGVqGP z>JDgXm!TFL`v>a>PLb`)Hbns6$Z~=Vdbl3)!O}R`4>FPIPQ_!eNe;@r!d0$!^iO{N zk7`?5YVmph9ewYg>D;!hvuoS7yZSZvC}spLzplU9ANC-vc|mOJ)?NO=pdM+f?TrK* zFW<0p_qP1HZQAR8zdsPb*QeW~(e`h3u5aJ4p}l>>(=*q!->6;vWcwfcYXgUzZdX}b zU2VhmEz!QMRry7Eo$I}UXwBO3G4ppFHTCH0^O3^guzms=fS6_(90l$K=hy;@zGy15 z%*b3b_{N~YCE`N=`l@X(+rIda+w;-~i#+b@Z*>*Ap3t87E_Bx~jcXUK4tv|v>x}WP zh_SAxcA&Pa3tvC%LND&pbkUw#Se3TJ7sPN}<+vNYsD?a}FwnlwE<(b&R&<1DErzvh zg^ewsKQYqrByRdZRoFq#*V|$-09U4$QJgcLz3!|GB4QO;hdqYW)&P z3=MU_c-^+vWoSav*B959zrX#nHMP34I8dVNwRN7g?T6~ytFUoe`G)$BG_33DTGudL z-(K$a6ni??-1yJEy}jeL>&ojrZPjmONTv1?5XLg(0^II)m;$#>jE_OVS;vq#7~BC# zq$O`fk}(?sk?M;)m79lHJXJ8H0(tDp=S6uDxDDpp8R9zM+t1i+GtV)vFn|sZlbQHL*_q2PjXxqQP z?Sj&_iVs)T=Lh|x>pL!9*S;_Eg)j77uC)~fx@szreAwS!<*91-o4;9|V!^>i9KXwq zw$b-8)?66^g)E1BNZc7DL!3w`wfbON_-t{7d(Zx=FTa$R*W+}3`!8y*+u|-S-h5p{ z;OcW3Z^dPmuExnLIvcjPwr*S7dGY&e-IWz}@87%cW{6We9q*!DuZev{LP99*1%+&P zTnm*)K;93|fJ9i-Z^E)E*nQ0!Tc8B;jecbF0WU4UIeF^fIrE|03o47kty;JFAMV!P zAO3LCRpvhLP#x_gH8+36{B9ILL?Uf1^9XWH6ktL+M+W`b;y?v9UToi4zrJiu z+1E;HO7q;VeJGmIvmPq+7S#N3|L8iYd8!pJ}?j_(r|$XaRx<4{191vsQV!4kC=(cma%r6Uw!WL zvo_LTT(Pdvzq!>}fB}=I*KVi|MvTpxuGej9)@tLOx=W82YkSU4O09 zsl}WH&ffEGF#pBVT!l%d$MX@O-`^R~UD~%+MRB^zJu=wPQyjaZu_RDZ4oWO5ZwvKL zHh5dSn$w8{lgKKL5Jiu(q^Qqb>?~_2bLZMUt#98WgR~2=+y9z6vg)YrkR$IF6O<$<2&)o#s__p{bMn^vp zzb$QyJbUS-&yE=1?dt0KaYK6u|JoZG8q80Y_zSTE$ol=^@c#AnP0pg~5?4oSq(%F7 z^|~v%`l{M|m6c7Nj)vxurosv&pVte!T<+Szx-#G3jlXCbZLJRP3c@q+a>oT&qWw6g zRYuHjK`hPd+ zRZCe}9jZjVZRO<~`5U!1SG8^YbsI*ey98Ntzh1)X%S!pXRD0r~hi)vbD=Re`H`Y}6 z+!quFYXXhM7r1>DH5(g^(wY+U(x~}*R12ytZnVwbrtP=K#+KG`6fXS1V~YQlOQQdqG^euW!YZIlq}1#{19z3ep0q&Bd%>RcH%fO zm;{oqc|@$|F%IBH&s*r^XOF*#Z7zFM_M#ZQZ-lD-rt$oSu8++ zqGYG{e&3Y{>|(LlnRDjMne!eoe3bNxjT0Q03@9bb2N@b0O6E-@ema6JT=g>)RgTxI z#__d|_3Jy_{&KQluGhDAtgo!>^Z;KS9qTJ9fk6JRvohlJV04^>wJO^hTUSGu4Tlye zvu7yETi-(u-@~7br>EozJAwyou-P7lW$;+XdVP9Bhc7}6gag!WAWTh+Q5zT|=JD9d z_@2Brr|oqNPeUj45a$|52V@j|*!D0aA(1mcweyMFh@Dc%=8xKMc9aT*ZpZ)IATZd0 z0ZQv4Gkbhg!5=nv85mWRkG}clo9E6UGmA~2D%b=P2iRX9Jb19%*cbF0*cSdcZh3|b z7w`=lCJYn+I*GgV9#Z@+(f^WL)N;GEtQ+}F6?(2gGqi7w0;{AC?zC1oYbXj}1c3Sd zUP%rZ@(7^A0%bAFQPNs8*w+Wx>`kHm~tAzF#c0Hr$7umfs7>C`g8zN&AlZLl$6vfCQASfSVIhL z15qM*j=OG~;3nY29B&>)h(q8B4hQ(Y;0f0XjGxJ85y)sb{D*w z7bemi=i2BM-GNO#^*vQpc-s`{zG8H`x3Xf5-_zIU@vo_FL3SDiu}zzIFN&d}Oj1 z@?mP^VPpU(uq_AQ0>!JSF|n-Q*)9rL`Ak2utWP}CMtCxWlaEp~w<6Ex2F`bQ)k#`q zt?WE!j8N5^DpRg>5BX%|pY>ds7@3=sfBJmhm~55b;1+fy?@Rr6Xb>!S%q<%V9VOe% zr{n9%{nuY=9VzU_XmGh{8|{urVa$Tr76b^J&KA607>JiGZJV7h++ls*aSZoup z*os^-FONeadnOiHibaZt5Ti-5WsvMm(Y{b$2s?cxDReFtQ}Dv718jC7 zk!g(FG0Mh<@idK$&ID(D)&`0^eAz?u9|f0DtR%)a^rq@%Vup8+jBH50=qa5q?{fsu z*wJt0Bn-VMoZpMS@8NwvlS;KKrJ3(4d+;i)(Ys<|SBnIP0Pa~pK(^TgMliqe^E7Nj zqXiq((Dt%csNMyZWf@*9N@R=WIZ7-vf_ltYv}lu0$B=`JJ`TKSQI25gVtoVn9|Au| z`Asax$^v!@g{>7r1^lLXG_J>J!vK7%v7bB$+cr|=*u+ll$|3!iWEsZljo*P7vOOTl zi*K)Eww~9jXpIU~$yTbq)cTlu0BOx4xbS3d_BW0U zaKbUgO%WP40X>rG1vT-1R6UH=BGgY%P9~A~V*G=H;t0BdKSR$K~F&JNOq(TkTK`^ zfu<);%mtISZOI)I+KhvC{3|jx%X)&b;#w#~Y*|Z?`I5YhSQuDa|d!0f)Zdf7c@i~0ZIAdl}}Omz27&5Zq!|K1!JM9y z^TCmaQjD0UycN8mFBB0C>5`@kA?*Dh{_tKCL%5Qiu(%h0m<+O>gq8cnV6dYRMmZ=x zRWW3=TauWja=Jos!L-G)i7>+;oM6G2(o0aLCDr5k=+FxzYY!h@JF-aJ1S6Q~#UxE) zXC>alH15z}8R^oxMi!xu;U8acL~W_8!qk%O4XH;oAD8t4t*20u4gYf6{*1LheBuz-L+7o=7r8NdAYzb`6 zh6R#8hndfy_=ghfuUSp@$Dq=Vk~Z7((0pBxEH8!1b3@5tqEbhcVV@@$wu5$9ZQI-9 z*p^~=SRJlbtE(N{<`-3~xxFtMAEp~f!6|bf9R-#xx+xAffT<+&JzY)lx=$6ShW?X# z=u1xburIRX05zRtU7feIwUswEmbbOt(rG>K_H|ZOl~%O0RFqa#b^5yVKL;BdgLr-O zRFXXy-^6z4pPyh|$Mxs68G-^w$-G>s8rr zQwp62ku*SypzMZGo78#wm>BbD1cMF(mJ0U7EtM2uK^83pP>D1gt2r5b`ouJ-3*$A7 zH7!+E_S58OUGsHYx<-Qjacx~3@B9MO^-p6YKzjP;Hx2*di~92cM6-|APj^h;?b%py zS#M*%f9&~?Fdc4t=I*FA23q7wgLG zpE)HcafUeyHWmzXeAGr^7Er8`K%d|3jg8 zD4LoVG&qknTVxaH^HZ$!u>||@Za$t9yY<@P%66;7{ zpcg`NuwDI7G^J@~6SOj8g-=6^NNO+2=f6nTaFt#E(BJ*tLl*vC1(dg72t?-vXOCJX z5{%{mF9Ts4f~lD#5DpHp`*|UV&|WRQEiJvMOAMZPH#Nz*KL!A+K^o(-wA6qIMEz5w z=2+H)Di{owx9b(nWm`d@4LyF@quFocp^)*VY$X*ADn%oShn82qvls@0bmd6yXvFw> zN^9zb{(J21FXoI04HXt%vACw50@6hK8!cocHC1CW;gPf{CB1A6wRuUJ^M-{cC!P(p zDnYVZf<$KVEafQdswc?khs4`#?KCIopRBu9mJRZx$>0rP&j$+fmF@tFS}$~NauSFJ zr-6FBc=$1*bbp(|kS)hVmYeAB)7b16!S#~-4!SGvWg&N(J(S0gMY7fUN*_|geM5}Y1_2^M-#*PyV=9T6D>oDOD;(ab&UnR-r$)2 zHRPQkz?l=Tn43yX;CyN5hX*k;+3fSsr%*OKCNvD+s*@j8)!pdKPb{Z)sg7%s+{zpT!;Vdmu zX4ARN^5LQ(W2eXTXU9JM{FSuKOUM_@Zh$RnT3c7w!|O92B4W=%Zs`xrYT>?cV;OIR zmI!`}P{$$0g0y2ngamRRUX4RNqf%jAA88NA#@4sBk9LOJVxu_0SEI4EaOd?kUEcUeysXmMKh(pzSXa+bzq7Iom%K2b zJ`E7CLSWlbY^p&2j6>3g9}Sn4y*D~>>eMCCC(6o(@dF?3{^LD+{usQL?~7spH}!Ub z_BH_YBMKc~9Vi$g+J1B%N)YWpwgCZKSUZToK~aW+Pn&6}G}95?hH}m1V29HH+g4#z z@CWNC#49`J0Af(YoL9cm)G*dI*3i`3Yn;ULFWlIr&v%W`fav@9An-TES@Z|y6MoqB z<*(2$^*4}9^JV;jdb5C#`|$#RpnHj7a?xcK-Ol_}bb6#KsaZSQI2JAluD)dSb+qft zsT3HEOqHQcY8$~$c~S#RzK}3zS_HvQ`w&h%)Hh^@*#+hoY-l=K3ITa&R7ogKY#V@r zq6-*hsNOJZ>nDJ0z>Y6pS^B z%~7sMs0Z7(PAg7i%!r*e^rcja9(+b8;X)963yf>z?gbN$Q}045x$&Y7JNP7(#b{KWFh3@X0I*U&%cH+d1KnZ}AEs)%meLBGkoQAW{Ox)a=n$N_HXAu~_fJiXj7&_i{rbFqA_1vW-~0Nla71da zu^;U3z5Mdt{d(**gN=wDSVH$`RRzcdf6&6u$sKQmy9~mj5j>u@KjZ^_xZ3ifU zjs6kwDb908XuE_oXovhvuvLQLBgzVT0RAhzBV$)0qyh>Y6)MCHtmf&bu})$XErPu0 zR)7mwvNJf^WjD|t^h&myS)dkEv^nq@#VOkoZ9uX+{w=hKNtMKWXffskBsV^#2o!FG zBhkh`>PTaGN~hsHg6Mumi$Q?mVjuRT#y~+pWc#t9T=qd24Q^Wtd%+mU_l;5+bR#Fa zQu9VX29C=WjASKD{K1ElOE{6dHlLLHY)9O}Oi# zh%(^A0ai}R39OdAy`yEQV&pVBNI+!H5(FSjGDAb4N4sV_ykQM_v&2RBTOjao0Srh9 zh6I8JptKceUBCk6pYn+GGnQt>qj@ffmdI@tTt{L`I)>yJ0t}D@H+tJZ@ci-UI>>6j(9@Wq=U3ib-+ucKfrRJJAxcwq*DiC$U~1|k4y?Y zGx-l!4$ z2t^v|4&u6Vk^Pg&>uc152i2MzD&4NpQI|Uh+pKHfWXovvJ@-_PwoL9zR@S*jMqG83 z`WrbtCzM-TU$JFYq{Z_z#rcP5q#21bH$XUl2kKezWGf!u32iTG%uWRR3PwTh4;lY? zk>BTFOKA_Zd!n7uvMQ&us;u499(bES>rYzNlg{tqGWH-WjF1x)%JxmA~oHA5jNtYk?DtI%4ap=i<=Ni5l@5DlXUbSGNB zpJj=!7;7V`9NL2qKB#@b!ZH;!Bz*ZL{)nCN6#=#x5=U_^p1J_zNGh{{4XfsqJtT)g z#3nm>@5BQS06fb zHC~xV2o`v3(&=y8+~pN1`Z9Kme~0fiBCUO8Wn9Jy#{7_S1QV9Mh@8Ie#B-XPtZG>H+yZ@@`8Eka#I;J6tWO6?c_ zM#X;9*&hWV5uE@|JPm`jzneZ?UhA0%cP!m`*K_TWwT+GU&s=?|xuK!DmZA(*b*-n8 zf@`Zhv2s^aAlO*$;_jx?=|5*{);t8UusY_eYQJINuIHY+Yv2YvU^+T;|NS%3%NiTh zv6f4(zy8wZF}0K8^%1umX!E?Bat2+r?7ONRr2b04J>dI8l&MYIc3b*N!wles^RPIC z#lKPBFFT%jzX9~#d)vaR0XbpqYYcQkFo%=3jo!TOLO|y9M83TxgtMt6n2|mbY;6^^ z8wdm;5JE&mNhqvwsv}AC3bKJ1%1TEbes~106j5n1L2@|0fok2!FOQ6r(84PoP9@wB z%Of5F&4N!4gEW6?JSX#RdU$1XtZb^ZhzBl+xMM%Qodx96%gpLq`~GsGWSu~E8O}F3x}bE_ki#}k``=@56JD> zan!Un#A@9tU_u8qrD*JNU|m?U(wAt3>)Fd%pnXYlpIqpXJd{#|l~iHOyWw}Hz=%Bn zJsYu2Qyeby2xYL*{01$M2t8~_0FZa!2{V$%t*V7JEZGQyz;mwA|BFq0zqTvzC=5

&uz3I*+yar@PKP*1#FWI`<*K3NTI@)+Z|6><$CuA~s{#>UTc@cH zC9J)m4wfI>-W;z%;&Slv&h4f)1RM*`{xoFHS}@M_5Uwt#tbJJP`9^YtU#uOHm)eL# z`p~C7!Zuc=K46>{7v@Da6gQ*LLP%9LWN*oqBG;c3?BeXSFl2ZdJwJx7h{8Y%-k2(k zj9ScCb8Zt$5X>booy>vCU`fFbKKV2@WKLm`fyL#deuuBo#aytoq~V<~mm|J9f!-xx zM2WNyB=$BUdN0;BFhE!;97C|U5R68&1%XEPm%M(Riq4I?{ANEeM^xADoeMi98U02`Z^RBCF?C}LV>J(h<&78E^mAZ~#d9bF= zQ&FP^oW7oV9E0TnG=lHS^lxxG$Hw4f^vSx`Q2mq934cUgd^XtJ9DEkFuj&FHeIn4^ z9eCoSfjZ2#I>i_81p+>L1-**?4;c34Xnh+{deI2EFpwa<$nKLVpDdMPIwnd!$%QCx zwh6*vLX(WoyMg%s2k3=e0wX&9U@9PYSNi`I>Pg393H-r0ocOc1Oh?)2nL7|9P5)*F z;q5`;#UcTe7c;`A0^pXdut)X6d$$cs0j1d^r4>RY;?Ckw6e!^m2NnXyFDoPCU086X z?7>eZP59RkJXK1Rl^^Wc4_rH^-)fD1B|325zwO@rZ}$yE6@O#qVRq)qM>;wlVQXr` ziSXylx8^&_*VxK^PNYpLYd-&mv)op<*6UqYV=HHkcevLmkdK|da+~X&^b2j<$FHiK zTBo%?zkB!d?b^Dj%Bw!UO>uTz9}ZuCTqdg05yjab7`MBem45r^J@NS6BMQYrC?j{r zhO~WhKF5JX^3@Qi%OFl19l{KpL9)qO}o$Q6fNu5^uz6h+BBp zD_LMwyd0xWuwvrIF|v{x|MVsDoMEM-L?n3J=22gVd{i+gjxa8YyWqUiTTt8yCNM2V z8BZ~YyNFCmBq3bLNFkAsaQ+Tb7&P@~c`tAUEf;B+G+Rom5gx83n02W->vqCOe8^hJ zL=CEiu@NPsnZp`aqmGsvD4`vQ=^yzV$!ZIPkR*jDDav#)(wu97kge~Ur7}_4`0Ts3 z!gonBYf{@euyyOe&J)v5?A-ap^kzBSu zEib>^((ZCKwP^CXK2Iajb+o0+SM}(lRlcrYa9J`Z z4sR?N+gyF`z15p>;&pV_YM-^Tkwq|IabGzDWOG3Wsf zd3CfbmJp}19Fd`wFvs8#7qEGQnMWmP0GS=Lg34#1@~Ai4e{bg31t2U06V1ycm#zi3 zs7LtLI&ch1cY%%`r+qZJi-~8plZ)PD77$Ve&0&ofC-Ak>Myhgn;mc#VV$HIQ@rl8w zhZrGn2^uIk_31!!nC>7y$!%$!Wo+({uKfQ~W#4(|!#_Y(Ad zg5B}TEBc2}l+8lhlGOV#~-(#cuwN zh+fXcls$LozeEIum<@0@3+67MQlQ3D5-Jk@B^*!#1Q2{q5M=U778?rMt?>R4Uocd&Yaz4b+P6=5!DXqGYEcAF!ij3n3T_q2E{yDdGgJBS$NQ z{3ql!FGLWIA8J<;x24{AF|e1s0Tk2!08P;;~f#*b7Qo4)C(8l;YEuo$qXcHvGi z27MY-3=4vmIhumAQJckjC;LE!?GRwWpuM66ByTY42^@%KACOtfMtaa*Zw9~Rvtdd5 zd<|QuQI39$T1aM&($i%tmc_ISpph_yl`U#KpV}bSo%V54YG+$;1~FGNLijiRLrVM_>u0B1-hw?BT<2yKW$o2iW4^!RoycGCws zmlhV5IzOPMwOf7h7Y`hGG48uHr5pvifVL!UrW|bPRM}kZ+K}HLT3ZYGqO&EaAbe4+ zv_~TLN>%^FM?dOpcC*Ury1Hup-`&k0;gr71C{G}PS{Wd6K1qONf764rSM|yM_FXkQ zm`<4ewe)bv9%yXO?O}Uk!2Z9|vV)K+;7=fgLIhh%EiF-?i!^eHENCi1O@<}X zpfI@bXM|BrP^CbBxHt?EGzzr>h8Sa0Aq?1z`>xAjAH4i7_Y5ZIN%&C`iEpq$&+g&j z-6%Gl)bP#g$u8VQ^8vDTBx7c&%RqXpjHpm(+6Butd>gl*}yK9zB7>p zLpXtrT~&BrZX&oIG(NB$z=HK#!c^;|yjPPzvaTFBo|K;gE*Goj09)<|ceKUKJ1|WX z5JIRdSQ(u20kFbOE+CNtl4 zy`n#Awg)VyYqWJK+MhJr)PH8_ifB1yZBKC;-GF65#=7JeD}tcNB?S;Xt=(LGjkH4D)bTUM-z7BXa1HS5||YYJ#E~(`o#HYbLpKz6C5y<}6e1xVfE#Xr7>o z^)ZR4Y=qY?0m3BT2#dc12l(SluwZ|+a4=Aw`Z~}ZDgyXn#ewRf24Rr_pAlAXoS=xL zA57WiAAre*my05t`v+9q=eL1P`?Uk#y!F;^9)SA{b?#~RBkaAgIOgm2jmNZrZ=LTJ zj%@f%*7;_~ad}K(SJwmrHCNl6rH>tPIvvj6dAzh-zn9&h*qHt?<>Z6RreuCUsXfTv z@dztrnU~lttW?oIZQSlywq$F7zcx*{JUw_uF+k)Mt04_ckjabiCGCh0;;i~t`-d){?uJF zxP#xci?=9CresTDz+pra1JW%hh?J}R){VL)m83K&(h=;rJS zVsw5314G#`8?sQ+SI)%H+Blw9+EkDH^k@Q1;-#c&fMfmJ3)Jeks`8!CJ;EMNZ zF%oHCMR!g|Bkg=lM3k+l1w>mcUW*mXvhG;dAnUn<>uUV154tf~0s4gA$(2ufL(D0B zH$!v}Lgd0;Zy)NN8)fRKWS#Z(>cEx+{&>~z#Fhc^$3G2hL0E5E-h6D?NxIuJGeR$7 z)FU&VZsS!(pUZGPNgf+x2MftGCAhx{44$S~IkMf!Ra+r10bBgwoJ zMJ*4o6R4=%sYZLCsIU-_rA~T|TPbOUM^%t8$Hfu+gl?3ZB4CFX%+V149UoKNgdH)U z0YlR<<&&tiz6lFlAH+ALVn5jXlHKb$*UNTyec}^!vGU;%IY!9{!x)QhZx2*Y={x(U zl3%avZm8|{-9x2LkbI@l*lANQe{lM8Y;?!P6qQZvozf6w0u8&d=7Z!W<+h+Z>fhn* zt?QrCmtbeBtPKRngOlR>67)|&(-d|jdIW6;W<}I?EM&Al{6(W_6P@6E2cxw?+>;TEEr zfh}7G6eUJPvqk?ln@ee%Zw>rf3)kzf!fU{Zfg1;yEE3g{=0Swf?;E^HmN@H#V=Wcm2%XOMLx zLQJyYLWnZsUy6YlvVdmi;1ut+Qf_ot{}J`GU>^m2!efK}a4!+%_{j2kn{$^->jbhc zqvrKuoi?>yWcKm~GoLUp$}hBUtoUnz^M)>g^Pf~~OiNN!5(AmWoN&|lmo~7^m;1%jr%@rzBM*=~uckNc~7*7l2Hu&$ozw^e}+RXdp z@32?sBij=jHzu|}f^j8vW!lybsl5Wm5SVx9RrbUk(D94+*A z$K8{jyV)5zRh9M)74!2I8`^Q1@m>W&5aY_#FlW3$OeH_kmh^TfWX%H}FD zx%}S1lL^hfZ<8@4+14XR9{YjuLI3gXj~z+C!9TjkRf8=CHSNyL2?SA#8CE|~UGw_X zrfbYnvFYJq1l5S&YRTc-EyF;-ZFwtzk%vgabOGQfpE5vMH4qX2E_Wv(celV6HVT*M z4!$?Jb$z07!Kf^km@qz3%nA&QbtXh;-408Bnw6%qt1Cu-`oz9)p3B!zuBI@ciE=6)Dq1iK;)=e%89-S`NZ ziJ5ZJZ)B9d%H^o9D1)r#!p92v*Wl!HoS6t!kqRpgBFY7#)&Lv?#Bwi`r%LIS>m zS8oSnd*V$J3~AX!HVfRXQdl$v+XRdnz`GTScGv=e_Z1;Hf9IF=8l5cI>HO~Ut`+Gm zL_`h71d?y9_`V#wfbe*gw~BFNs$3}Eg%Ytu$Y(Vdf_;PVX$;D8AQNK%>78h!C{*Vk z1p}ab3Mw`h9FS!otTZAV0+=;LkqJ@DD$Hw6O~T)FMac}Am67)kl+r{#4=BadK5|=P zCisW?f?lvMIHuvNL|#|k#Nc4De=j&IlF9<&7-E@|dE>)@GsUo+c|n1;`UyEZKy$RC zm@zvDC{jKy5+L*+!9F>&x^U;I*EDT&W^|E0%M}k|V@#HXi5RjLtmN3B0t-G9!f&4p z#R=nD6ikU{_(w^V=RG0x5;5TXS3{)@v5n>}AYT5e`YxH|2FWv3Hgr4e8 zAJRU)U;j=z)N}WD*>-k$ebXO&LjRnbU6br@3bebo4<}>SHEQ~QdP9|KFGa@zwI+(b zA52zwUwkl9}{(fODa@_>|5oMIA0zV?+;@rN7LHC*&0~8ic z7#?CsM|AWB`>aN2tIS7bR?>*}@~Sgs&3<;=-&{7sKk79s-Ko!Rn>E6(*t?7q{R*-Q zr+9c6fb&&X`{48^Z6^l9VJd~pZR1Yk7$cjJwc~4f5y|s(+G-`Wc6g=E*5&uLSTFUZ z{7yo(mu^v^w{JKRo$j$8SGAY@@4w%Slk+Xe3DsxIAFWQ2+V zOQT~){n-~JU{T}bC&p2K$vAnhas1sC#&Q{Y#884|*(+)MD(#v)$v?*Ag>;c|UyjjO zY8L#rI8ymS{y&Y--xMZ)BN#NpC6+AneLHtmaE+k=F(H_wEbPaer;tUfzG|I9sG$+c z;S}-w3y2#=J;hy)CLf#gH92+(jxeu!Ti7Q<`U{g3YiTluK7;grd6~Y?XZeYi_c?PG zY?e)Y+ZzaYzin^~P!mFuP#Fi69gN2qM~&_I{95zYM9!xGIH8R0Bu+>SWtv=Yq(`lU zm16Vk{1{mY9j!*s*=jLS6b~mZ1Pd@}Cm?iA!!DU!4rnK|690L4>q-lPA(>t9vTz?) zv|zAC8tYsUCQ)E<(5FdnnV@hnD=;*o8_o|%vGEi@T+mX%`(L!@%h?<6IA?HT2*j!( zHZ-6;aSjL>8J0Y&Rga&GRYF{6Z(*otbzrA!!;Q_&jbW?^{Ky_OPV}A?mV#o-x^gyL z8|-av?hO)6FF(VsF|<;wcHPfXXcj$JVNvDk!&^m7vBAGclq_2vFB%uiiG|Zi38v}^ z$m$f<6XiUMHov$W$biM%PA@~}z8DThv=D?Eg3^5>3FaJ0j37QrUs^8KwGb00$!;0E zLK;v`-~l7}n?Pv2bJc9B3?;IYFGOmS2cuLuq+ zO8AiyywYH;#An6iJvcJ@^hoB{D-2W7nfi_SQT+BCj3{}tQ4CQ5UJF5-xU3i;0Z<=t z+0_A4e7c<xqd6Zvb{BLx4~)9<@VRVx@9LHmR&vY_`K4WVhArxUgDckln z%+ELM3*5VV_q~C3{L7$}PyP%^83RRu7AcGPb7V>Udg=a|-S?htYyVYy`w1%RDWPrT zRCg(Asa|Fka5zkP@Dx+>C=Q&$(X4PHLWFC40w8n_WTOKZQ>>GqKbH@jq&NVQ1tYZ# z+~r_N{S_7qv1jD~&xp#?UwK#?MckNU#V$yPolVbPgc7T1t5;)<{*#8ds=gPSIa&Fn zK%bXQ8H+BP*VzJ-MOX^v5O};6j<4$=kI?40S^0QCRD=mTkSaIOM^ghn6cgcMa!}ST z=%#&;NC#gd))L{BC|p`yO?&tuCevYck-`=+tLI#S9XUI2~`<@2yzEgR}hbOR+?(HA{>Yaq#abIDyy*)L+_)s#N26EY)a7&SBBh}bSP_0 zU?M}(9Q_0r55B@*%>n==1h{kZVbKt1xW*6B?m8p4sMIZ0!}yWNBX7rvHWHK62@A z7;ka;`PwcLfz` zxcMVIvMSD9m_#6h!(?vy@5E@rm>si^*VMnbo&^exKM$fsBo9BLH0D1))p=92^KOb+ z!OPZ?Opf9~rjn$!?pT+^*e8FB#{QRb>@n>q2b+foC6gb1f9DO+wSUE*fTwT`gW~&z zVo2N6kU0z9DH9bYbi&t!q#zEH)x2!#A-U*UP8Je)%>WG*9MH`>bKuH6V$i*T8BjyZ z`bLu)Ot4R8;bI;R)z>9dRI!08B^)K37EE+-IbKkI87~+y1t+Np#1wo1TbaQ-T^3MR z7;+lQi{T&0C&Y~YqRm!($}0`4nJ9uEq~QHPqDjFCzs#UnXrdHk1*pGuF{~g<1QK`4 z$A5KPAoBx30S2D(*um;p0I3q31PDL5+<-gF6MP4B7c7@y9!q%#@+LpH3~KrRZn#c+LDa|8Vl)WmX0nniWM;V5gRhtrD(X5&a~ zCL6AZ55z+7vS@>W7JHzrvUZIttX~o1Q-bJek+Fr&|JL;1QF^O8y!^7;Rs74IbMFFB|EMw6i<~O6=t6>Lw$VXySrDQ3imkuEt!8 zXEDa*eyhL{DS$RBTERWC2zUZ$sRf2yC{AghAxEM7Y#uJI62PcZ&fow)!I4qpC%IGt z4xE_k<@@s>XB;7f6fR?uE%sFqm>U_8Dvs*T~Z%HD=aG$6=2dCmCJ25vDcV@bpL*dpXb~ovD}&fI?HA zrR_<_o<{M4q)f??$8-W;JU!Nx)k6(h5bje68SP4Si5041Qp5QmvOuE`ULYVQ94BS( z<*^79e9jB5UuigOu7-Q{HmIdS1ct;1%%d0pcI2U0JuhCyktAIy5Dr+*BS?@%U@lLY zHqN}D*DxyTqX=|JjnMq1=NLx{jX-Vmo{+LY@0kV4J4+cv_+#U!-{A99d3@{$KTO(H zkABpn+G7o@twHzE?q=EFBbJ&T0X5$Ev2na#KkM=NJiWd2&YUOcu%KzDs6~ArY9`6D z8S}h2VH7D8vCm_OBZwdQ2ke*Zg^}XXPJBB>Ep#_#Lb*vw##VKI{TjRF#r4izpZz zl)5t1woo3}5@C)kIz=j4Kc~_nP(Gvop#-yTL&(I;q(GUiv|ib)X{&+AUn3B3!a$3s zscPL0V}cVMco1ea$*JIG*hr94m!$-nkbPb&IAQA;($>2)pCRcEg(y>i&t(GBpNAzs z5fD-&DIC~=G7{EB%Yo<9%prb4!hks;kPMqzz~n~8*l7#=dvdV$yMQ^DkQ^xu#?SL zCvFwtHy{fl4IY3jEyPw6WMlyHjA=+fgueh=)-ph-pO-LbV#DDGdu_y~%)dT10bwJZ zKH2%=F=0hsl%|8n|D;W^Y3tW(Hl=Ia=XU$X2iw~R*PvKcV$fFl$o~D0l-dRpF-S8p zqdK6ft$cqgqDL>0Jx`$Lqq@}uxlASY-R-@jBzA(-~z7; z!@_YX52h+XO$R>5NnwXWf(I*Fmp$5DG-@(+Vi>)>B&*UG$rmk+=c5H>&p0pAw>Yky z%1&M$Y=9CqQzB3 zASyn%#h@X(Tx$7vt_THHBr7Tr;82082EDqULD zaNHRf?+FE9b_?~42gXt4t>>WXg_=Y%O2Lsxq+{Sg8u$vz!NE8Ui)?~R#Iekt^9(>1 z0&>?0+8<-B*KOE+ zu!bFc4G#QrZ?*exTQ8fR*1pv^?v2$9j80x2t(nngraw<}2(PT}nu^7CjCXyE&=JK5FUP0ICz_2e`{c4jiYKX zEpP|Zrt{4_7@Mnds3H$t6M^`a`Fl}Ae4J{-pm5to3@N4~0_$FoBPWl=N02HHFj_yM9qgMPMmJb&aeUyAilJ@E9i^E~KP zejB8sJg@yU>8h-BC4Wlqt*v-xjoM-&AcsyK7h^FL0-2Z`9^4#@r9mC?ix^Eqxs9ic zi``CpW}FWV#mr*%^PzxA@cs4z;JYP!k`)z%z98Joj4DN;#&RhNfX-WnU&LWjl0JeB z&jD`#A&Y3qrt#PZiXPE0Cud9M zOWuWU3n76->%OAPg%l*f!Xhwpac3t2x?trLz7Sj+;C2(}NH!Qo!f?Zhgr zM2Bdb85HEj@6`dq5I!Oao!71+rx}$whBj~O6Lwz8D(+L^tHTjy-%s{$LF@@?$wVt$ zSNs8Lb;kn1seZ_hG`RxGqn0{cYNKyrhYxF@aDBe5%T{_gm56nXq>0=XLDJ$DK*0IIASg}!AqahqZ zF8UuZrpeD26uW)zq3-sLH+}WNFJB#58|m&ov^O!;U)SUPT3X-YX{a3Axi*5qf;Z)) z2EVF!f}9u{1@viMGpr_=YF`&2_lYP>oP`!a%ohu(fNj;ld;%b>zUv4Eqg@#V*J?qr zRm#%E2IO!>MWL$?*uB_A9Z9Y<8;wJ;wU{c$#n|*&Eyj+gQnSQXPtjXKy6*nLINA1t zCw8LQKe<2sb5;idL1rC~OBbCyvKgxFrj^XvmUu>KE6fh#TT!!s0O2H=rg>`$qSIKCQyoM;T!Y{1>w$U2R=mZJ7B9Sb_BU&M{PjN9}w`ASkiX z)t18aP9duz7mf>sVO9M+UwR=%c@Z8c8@U&)tC3e^ny+3 z*m2re0c@ClWHQVIrSC!jHF26s1S|wgVDwN4P?}xm10iS4K&Oj#l>NJ$1W zjl^p+y!vZ7X5rZBLZu6qS7XY<=-Q6ih{ZSg!@I*6vbK zh*{r3Z+Bf?xA&zP{i9y?rO2U#D36z%Vgr9%y6uK_Gm3ui?BcA^dG;ye1Q2NcV9*bb zkBMMb6FdMTv*R+(alpt{qCMucQQ9ryBECHe9e%?hJfC9(%hx4JaQj4|kQG#+2 z{c`qC`91&jinZ%Ur#ka{TSuU<VlsJp)bZ4y)35(?Sw3w4P!JR`V4p=_e>v5E%`>SQD?lGF1Og2j z)u<<5^EARmqL{-J5ws0Vl4{i7Q}O^;JfbvD4BrdcjDuNm5d5EZg#y#@qXumddT(SP z%8Jb%UfPBQv4fzPi$ivtUju)YtJX8--V`P4W_TS8@3eO>_RP9pe_oEbJo1tum>J=9Hd{A6 zrz{rZl2su*lH&IE;_t0u=B+@@$wll{M9gRsgmNA9s)NuV-dXbAl4p#$4swA#keosM zjjI#niUjFcq?lriDnjC<vWDO3dA$i-7=R&lP6?;vQ;qnd$eY8vK3Cf!0?YUXJavT1P;G9 zrlua7n)>cN#WNEXhBGbci6|rH57TH zI&YeO&J@~(p1E9Pq8R7GMbd?k{c#*1nXtXm2<1QA4@=}zn=l` zqyzM}l8Lm~xX~7psGj7fvE;f#+N=7iKl-f!J~pi-ak9bo0;glDIF z^s88*;uHGk*on#mci(ZKi(*#vmY#&_-5Ka>BnRcT-TJ#5`vN;@A))Lfa;azqa+p!r zRISy$*i#Xv97w@gJhUOSZQL*ttOP$*-6#fbA?RWSVOgQ;Se^=G`#Hg{h4Hrxj;JfS z`|)-x@{eJe$B1AO*!Y0p9AgsZ{(1upgiqm*hua5{3kX*wbT~dD)%{dgC~tsGpC-P_ zPtGYO9{eA{dv3LrDxbmdCDfq?(&W5qAn?22L1^5q_XK}pv;7AP^ZX03Xd_}g0H+5A ziU@$6E|9WgCNRm08`ux}3}qec3=Y(>hp*l0iv^W{--yk}X!eAzw%Km08wi?2z>XBi z-OE(u*%BrUz&=Z&o+_NIgMHrYUHr#5k zgk2{nYJ(f&gJvc}$vbz&SKQ89jIAf2F`n%J86s=2hM0 z8v+4ZTRinaInwE#kLYKxbY$TtSKQcn;Euwo7Agv5VW_Ur{}s?Amjh9x>wnICiDZHP zVqVL2&R0^6HNOiAzy=C9MCohLW_GQ|_Jx!}VK*0dheaPm-h{D=`w@PRfpZ8^AU(c* z2QBG4)>Eh>ZPEFHzEs!BPPcx?!28G8TwSZ)()yj<2UT{$ckqTA4*K*7^&qzM-mzXT z-|KfkM2FGB%&LmD)-5j9wJHca3IwPywH1igqMf%c&da)%HhNU3N&QP)FjCmEE%uaRg>G3g(M3v-aa-X z7pSW=#Ea9GU!k5^je>9SdbqSSU0SLid*xZ=E?{<*R;kYaO%f~@pdd~kH3aBGhJ5@5 zc3d(mY?J|omPc4_y;eWRpND5I!kiL|k%8s-w%s?DIh2lsH>QH|X<(^YsX9Tz@((fM z6gD&uUhe|8CrnYzTMK7U4b(tI6S%V42SDX;#={FQf=IKnbrxMgfhZFVf5E}$s5oXI z;ZC67G_dfBR3HpoG&KPY*@(q7#gcBlRzRJU;3f!EfJ|YrS&c!!4fiT}DGYLGL6o1( z!Xvjr)GmorrV*STIh-=A@=~Q-tFfjgL}_c-C}3xf>4&rX*+^+{*>wXD1OinVL6fOk|&P%LKYyPkXQUHUl? za3Wm0h!opb8CB~pip9%BOIia z=gTL_m+x-+8awh>(}SOaY{KKIAgZum4{D)Z_>hGA3mv+5|Mh9etZ%jN1iihWcdg&y4jgi)k!>B;MI!kjqMf zG>3}$bnIEoiv=zj-+SNqB;bZ_??C;Hz=d2yaw zhHhpv?BStJA(tz(X~;4JilY`qZPN*);^<4#kf^vF*0<%{<6n+Nl0f`f}{loSUZ zyP1ax@?x+S0u9x^P+@mDAVvDkR5Bwj>#=3DgqSW&Qd8VCS5Q>Hm;ov-y626G$r+3j z{fBZ?RwKn1GQQ;r^dwe@aUpO;;6za{R~V5TA>SB@{LUAW_h}5|T#-kMEqU zowN;9oMx~vKND{vJ(i}bl_AqC5EY4NA85qYW@R0+qxPxrPD3^jYZ;a?FPTq85Cz`* zv_0DJLn9*(4QqQc=l)^*?uRLAl(Mi4#=#Ji#{67@IZ4ohN!i2ccEQO7@lH9p zf09^RB0(B4c8;5e>YGSlRe`rOLGA^3HEa07l7)!&rCk9M2l|e3Fw1+#P8VzwEdf!y zj5|<9n>mLeH4b5UhI5>6M~kRvIL2v1cZ8O~AczTI4QAq^KJAvk18{Rr?7$kUNycLD zsb@#(-xG@^v9~X&}voDUyGM6dbNS1!~Rq zyct?bAGgU+4q;xety1C&J7nRtP9II7V0jNA2n&Bbp|%zlLQ!p$Qa_37 zA@&AcC9(r@!@+paj!RgR!T4wkiV*R7VuA>|M0KrT41tabL zYQs%x^+2NvZ*Oh5MU88BJ-&Yuk*Gi&cGLrEp^ZXc&^W@#gHFHN;&8FFKA9kkdla9EJDLNEtd5_ZI{H>UC-35OV}RhXv3(%-atdnNx^T7FYMhE7fZ35 z!8qyEQFCNfn6mQ8!Y^6Fd2C{tqoIM;ODpO;>#px3Vz{2h8P;5VK6Mx#?M6Aeob)@o+|lmfeJEenv`Q!GXQC20S@Pqk%RLGV6gz? z$z>&YI!7iRjMCcHQD8D@OYZM24OunM#zCB29$M6WP8)UaIWEP z@is>-WR-Nf{lOdO?%WsjyPYwoJBf@ke|IeC@de=5`K14o(mDb`Ph65!V0}=!~J6$Ebxsr6(wlAEsEE zES@PgV;XK4?9WXEXT`GmR&Zp4$icZcl(O7mSw0#p7oV9`Vk&7t`<{Kwifty81K2) z146SD$~eh!QX@1A@*<~(RqtgK6)*(Xj(p)G#iyykXi&a-d*L$^Ap#Vf9o78}}rOfWgoTWH=dZzv*TPdQrNvBMWsyA<>M6ZoEtD`))i(iKOgB_%O1OT&8H6B zGUN4s^XK36duML>vzEs3rj{#W_l+O;LT~RE4vgPt?x6ki2V0uP8>NZ>MqQf$8AnvsXRxx1*zf`^c3a+{|iZ0;;~We)@r#M)V2m(9V+W zws+YcHhXd@F9cuWrxk^QL{&N&9*(xtjHfE^!~Ikkv#iy|i(&$ath&s>k%&s~Jqqqs zReT&CW;nxFxC1BrT|DQ_D?LrVk+FL_Z|t19%0B(dROjTURaM=Lm%6!h##J}i!1nrg z%>_!`o})9L{nM8`(ZGSZpJtARZ-KrRu03>{r)}q&KxzHZ8n@zhw<o`XZ{qA!$WJ^ zJhvTcUNcl*>R;n-b-Nkp>Y9>mwufwYnP{PGEDjm~QHKd525f!=zzq*Z+glxF0h<`2 zGDn2I29gN$n~!?h1B1gG8^_eEM)tgUvv>EN_+!%vvxD}DZSR;^16VU}glEGrMi6{T zE%nhgF}JN@dSPVGHQt-w+!NoSvY-G8km=43Hf|gq3`9MX1OR!U0Xud^M; znHM(t8%o}R1@G~a50reI>@Qf}2Lc`?Do$vFx@eTMX>2@?af?SWz%;`0j7Q88(SaB- z=20XQV@R!MWke)MGA0V(6oC^5?Wt^jz&Zb%cMq?qCHXmyO7Ef1XrnhhemU}v4(Zob zHo2d6x!tbAAdLP7^k@_q<0psRO_i06?x)=@m;11B5j)bGXNO&lRh>_F{vBRyYUJq= zHe-A`-lBcx(B+TcG@3+s@70Ii>vlbjM`0)Q!`RWD9zBUh_{pW}VK@FgjVGZWhvmf) zak5!G>~dd)hmPXai55nTbNw|;sO9*-uLSzR|19qFaQ&OWt>QM&`kTON+Q2C0Ukut7 z8JNnTF_1lxtjIl-$`8{GY&m^)R00bT7mr|7qsZDgnTd(lLoACAch&M-hB?$4sshgg>I#@vn|O=ZYyqj3*g+z9 z&k_gf1cy>6tf6U{le}ykmf$b5*Lr*PDOlF|#y!eHB7vb4YjX@%afM1B87%}XPq&(* z@}DUmM#(GUNnCaykJmIN1Jx3`3KPLw)($QX%ceuf;9%HR12r?Rl2ytJ)e>x9+#iH3 ziFhy#uX(1NoO*J7$5kDk`ijbW&&CJ)yKnqz=h#>$Uiv?^Zf@(lxx43*uCSJ-`kIIMZ}2<)8_JiR6^-=`jb(~ntCTg=*EiUd zpRi8>E5d;{jkusFK(XkbD|MTlK5vKEADyRl*l$uLNfhO3!6c*I)&zeMu@aQdDvG1P zJ%ZgOpyQFAN9JW--vviMUPzw_Vp;^rlR-vzs{aCuPcVuXDi{Wl7LB4kBoAW}Lb;$9 z?YIV0F#fR#TtI~ua^287UB*X#1>f;YEy{xU%DBLg3u8L z$%f)lzR_DS&7SboI3Io(1+(>Uu`V?72IfMA>+_#?Re(DnA0?dzbu!E2h(BZ>mGc10 zPdR5If}RFzc43;*&-iqq*+HAk1yj^_Z1gB5hJsvfIAmZzHChz&fqpK3YWx6|(&$!* zVQExNJBdk2m9tdPdk+>;F9pasyf%wKPi)^F3aThq5O<7vfGQYZl7<8KOH_`LUO+5y zc4{7uqf+UwWiP}MRSA88EhLU}w2CGvZbpUFhsLa8xXoxjjrGH5;JwtEau#;see#+5 zIkXdtp&bA*QZi!GI1p6Gz8OwL#5V^+;GGC%9*U|_^4yTMrH@1A7**nD~4^YjVI#S%FnwK`fI;Jp{R0N3@}A#dWtM> zO8cYK5xBFh!9xR<(XgIJNUy;pAPp-L;<~>zeARlZ^_ zgliO$rdJ>05r?=%el3q*NJ~F%{xPZD{=8>q#`FB`nudi!-;#fW{LJggSfnV zgAt_LJ2wngZk<2Y`R1??jA}V&176Sv zSy*kR{g!c3g#1F6gIqr+t8AarYaqa+0^_rshwsb#oOv!yLDVq8>LfyQ0N z(FEN*Ny}TzD-cj7NLwP=m)0s+b}9IPg!IB#LJ>pj=)WZl<>TeT(Xcg(gNuZJiIRr_ z`x5)bVyNd7R(B2c8pwS{+?k3NiZO+VdI2ZkHWaXA6}G{<<7V6hS$kmTQ5I;#_}))N z-?^<_Z<*Y`f0ACk8y!`fcP-A&F7Db~<=7ab5iRc0cQ60~VVN!&*AglaR!c2$rY07nM=u=1*-rKu$SPp_^cvDfNQI(!}{)2z2ETsiTNLxenDE-b)fVSxg8~6fQ&zptsi{kjvQu`E4k6 z2Gc7V7m*DjlF=b!5y66re1jFN$TzfElktBr02OpFh{6G=vIW^Wm5veVgL<%3u`_l3 zHMN1L*IiRl(_39Tq}HlYkGrudxVE}(P_3p6c5EI{Hvi@Aa)y>jr9StJ|ya zjXD^prQ0GEo<@&%o&IkLWe+)NGDlHLBne)H5E|~l(f`Wh+Fp)L`n>K6*LJ77+~sjS zk4vsKj&gpf+~ssvxb+mSt#LWZt1A8<>fQw~j2)0Qa$99~=HgQlw;+UJnB*BD`(BMKLDo~PApg>ayl(uPs zUO}M*nm>j9Q!stz-b*hcrI1_j^#0B_GrKEWa^yV9|1a%hW_BLmIp6utcix}u-sF;8 zlE=GRLqUH{!5?IP3(G-7ZkJF6hZeB0FpOvr&E7B14n282R$LadEZ>YUXnB*tbe4P-bPX_~{Ur_fvM?PW#|{;61+BD~WZ z+lEkaY-C99HI!;N?@sK{7Mh3SLvoX%?KlC(3&qjkY-4-*)9IKpSYJP=ASUz0p|ggA}l_`*3w2q_!LJ$rY zxdU917Fx_;>|%NhT5~MH3Mxy7gAt-N8w}7irxe?hKVXWep~B^VkZdnf;NSwnPWR+E zdBGBI7W9{Ldo-?v^XNbG!17Xk)@7cv7A$LeMnHFz6Skp%!& z%!WOHW`39mxSpO;ndf(cmTRGa*!Aqsxig~|769LK`VYt;F}9iezV@wqv~CNc3(x&r zzjJg??pIthY!ck&$1n#PW(W<&se0r2i=Q2=Jec3PQ2W4VYahjZf1&!2(aIArn5sxi zfN=oC%XJZE{mXU}*%2N%{k`S-YIbhk>MefJgJ0pHOZJ)ZtR;GGb`HY7k>_@-?uokJ ztNVQ2m+QV&_y5-YOWnWK{U;|?guNa_R^*&L%nJ+m9bB@AmM5ooy2mhxn<^qzQ7Ywn z91hE?hbwwi9E0P8sgZ_Gn(l$>sUp(=H-ewdxNQ%zr_^GPp=%PgLVGztLy=;tLyN?d%eEAt!dwm3UgC z=~D2TnhdIHuo3WQ7ws>1ykDcXjR=jgns!xhUul@gU8ZHmrR@x`_NEQ2VaAmkng|O9 zNKscutVvi+&%=tMM!T6HZVg%buBh;}2bcUogT}QSX<9nS|1Ze0mYkL&vz46l>mWa? zq~vnswcPPv3)NL-JBzkfPHdPwh}OvID^SWY3eBo0DGLrnA!V59$;X0tGBeH$JLG_2 zagC88|G9_D+dn?2-*@!fjuQ~g@+7_?*L3#8j>8*gA0FKP@v{E&b4OMA{@qwPD39=d z#QtMrVfX#Ay7932Y!cH%=55GPxH1|**0z;A{<*<5Pd>S3a8Cckk_{Lf)kX*B<}cF# zQt=Hrv8I0J3Z4wUN@rQtK??E=*6>;i$FN>}!%}VAc$kVTQU%0w$4rK%Xv;VB@Wye^ z2nr^mF5`%2{OCFE5v!;3kZGzgF!u23+W(5}yn^OY$8yiuj`0QfcOj7&dIi&XF>_hQ z1Y;g!IYG?3!%}wGR<$02<>LXAR=rvHiC~Dy84C&+YB41^?wZR>*qMd%Uyfn1=$bd!y_PVDkmVZdbVAx%r!D;;oR@X7;{o~BmNiD zaZ#!DzmYeV(n_dMDE-fC56lf7f{Rt_TSr43iz`5nWA1YO3(UnzZq)^B9eReH`8^oZ z4&5zpE7Qm?Z={mXuE7-IR%{1g4TSv*B@I81bs%74!rlS9-|bbjHJ#~I-oul+ z%B^|g&>+^&E6+|8pX6ex+}f_59&bQ$=|4M1Tt(B06B9+)Nw9s6gMB67?dj=Sn@j2c z@?>#>)4FdQoaGAobF+htix_z5S_Hou#*!A)K2#JlDVd~C20SfyK|5y4<6XXk?PyKg zL0?y#wXk=#cfwa1^iTF$4U9*Q9c(k6*>><)ByKhZjl5@Y@E$Z5;Ky0(NG712 $weXf3cOVI#^%*QU8pSF@`R$!N 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

)iL24u<|%jFbE>_3 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

E-q+q$ep+N_5 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 z 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

}BF!5hG9gvAp)9#kUuC${@~5z4{0TT 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�O*T7{sUuUo)ahcQ)S1Z+p)m4LSy9LQZ9=bt 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

@oeY*5QD zP~%>VfC=VAdB2@*kCN%c;e5AGgmx^keVN>B`DQP%z7xw08iPinhzNlYkxXn?@POk@ z;99nl@lGfs_sOSP&Ofj7Dqta|y%;!%%+XI6@YtwXF9!4>b99?%F&taesqrF76I_T| zq(;gyG#loG+~Q(jTqjcPXoNV75syGe+XepPs4(g=Oq_^5f>%D?bU0t21~Er}%hahm zQ}kkZ%Q0K4Yk(BEh}N+{Ss_odU_Wy;7%T6O_RGoGAvMRmeK~)5yBS;0HFg?1?i|Ep zn_R6J+a91j^6DsSyu4=)J)BqEi^hNkO1B0vRotk}AG-BoJa*JeAdS12n2+$XAEC8= zgw`tG=g;yi0cy`jsJG8jZy({=g~hI{uof1-=L;`RFg}sSIe(GU3($@Li*`i z`L$PD?zi>o<|5z}nk{x95Q3^`%`2t-EaL;Ce!JOjG87U{W!-N!wQ^KcNVw*4SaWzB zPq}&J=K9@!BRa^%7GsNpTqD}Q>wfR{SJrmtLvBuWG8W~dF3whpCBRP+_6PPUHes~m1hTLx`xzdl08g7pDH1}fJkelD* zUBl&mwi&C9YNKYXpDl;oZ@9d%C`xC}v^3+09&+gjqqLGIRK%l)>BR0fDRnj-_v z0}N1Zwk>$J)u@$xh<<3rcH6ULVz*ZSrpqQs`rF)Z?gO0`E@gvXUiql)X299(48W+J zSJu~WHUI+c=hk!UseY_|vl0BRkSew0W^@NTAMCn$g-$w?2#>la^^-a;7%pal-<8!{ zx0-J5B;1@?bu$V2&VBN5cw;dE%|^PWYZw}gnMClrv8a8_(#kX^jGOVFYWId?qzJIF z!qMTl4LQ5t6+~}Xx@OnXX#0LMUpYD|CPuMAq<7Ri8bn61Vj}oW5zE+i^NWd8&ds*> z`B25#aUP=xz88)vJ5IThM%Kuh%axRQ04^pw&SP+~2e9Kjplm0zTuchT`O+uGpBsO! z`U%``zU)1(Z*5=y@+U|gPX|mm-*e-l$3j;AWa8XgmQk!gA5%v@lORK1mrY-)l}R^G`uUxmOB?e$0*bqY z?W2}{tz3J$^;-IA^Dn*mwL@A00B{uZ0T_CzL6q(ZjeD%X>ri6cEsg7i6D_1`Ivy(B2=ZvDKCEXO zg>Yd!44e9p-?}Mq*OirO==Ne!>qJn$iJ(psK|LmdT1o_!<5!4DZ^ZpdNCc&j2;Mvq zyloOcd`esq}15ot?Q1t_UE~@^r+{2bPo*V6XEE|!}f8M<0nU|_x3Vr_b z)zC{Xd6Ac1`uyjwm!kAgxG4^lH@-z{9YlKs>X&O#yC?&3wAboIqrFnAlCEsGw$q6R z-^8YO)P3;H!cnQUU1@14B)V^Q-$cfE^UXqOxh_k4aj$dZs?ZpcH?9KF8?8uc*&a0a zh%5!{5WK`@nDX)Rkg2eqBtf*&uRYB!3Fg_>PPryxhNLg;m@lIcLbb6tE>b2cm(?#p zQ`JyBE_xmeu5-pa@0bf-?1Bx$L9*ivRL0PS3tr^Hg-%CjDEz{UZR5FYmOZn~8O

FP87)hC% zH_f_d)_E?VFGHo07b%tQ-P3b{OVsdU4Rh<3S@X;qXB-{|6n=Pk-S$uKPtQSZCxRMI zOlmc#$wW|liJ-=8Eg`x9yY5t`Rw5_`23y^mCxW+41aD~Rc>#KU8d>vcxU}N0pN5_b z&~pKLERA?RYbpNi3Zz5ShCj=a+hQ;4h)8& zaj(-GYha55Juv!PFZMWLdShN!vBnFA4RxHxd(n}=d%c{84UQ(;JveI4>HP}_qhC4Y z)Nw_Z0UDYOS6rE1suk;{ToGkj)NC*1ip919A+~GGNwSLY$;8z!(+V#8vWi+kAglPT z;8Y?A2+ztYzcwSKcvg0itb*9G@!a@xZU@rJ=QixVt&)^UnFb2U&Qa&6kUToVZ4yFG9PR(E@(4cMih4{cYx>^6Jiz1<%0=DVxF3`EAQDN2n8W5ifEVNGRWloUKK9&>#K+(2zLLjp!2?Zw*1cMNTuL%M@*fX3E z$SfYbofDpZ+PtP!*u0?`m1F>sA%w9T5dFG?WU|{WNvGDr9)y-bmwm}FE#AxX(ty1* zhK*cA*e|l-U;rSnoPCj8B*(r6HzkH3vb|lQOe+;`s(3)HdJ(#%Z9P@L??uR>6!VC{ z?+>+#8+;8rJ)`f zXxq{|Th$UKnzJ)QDy6e~+*YYURh*frnbO%kZVNwH>`YS&Qhu^j*MQ{If-S0(&BTZ? z(yS&*5VSut+?Wa0^@~u7Cnrmlcnrm4RKH9p2Ew8&H~KX#39bOZu~b95yB-VY&F1Qex;Rc#6VO#E6>c@JA*1u1QneKDi$-Po3YioIpP1JXZkOg2woJdvzd7#Yo0OJ zjEh+Phn0|N!L$Dqnts3_g&TBBlOUQkYQ9}Tw>0RMgi;kYFl)s4fartAS2Xg;@!!_G z;s1J{G+)%b5&V9i+qUOCKmObP(dYQbC$x`1j9@6W_#P_^t1zM{UrW3L{T1-YT3*}^ z=(CcvD>mkb{S5NUdB%?t_s;Cm1+bc?Nl@(Hk$im`I@0{^t31M!2l9AAoFa&MYBfIB zZsR0X0o8bF^?Mf_`( z*IbEL&)HRvMwKQiiaUzNxaw^CyBJD7-6!?-+RS-mBmwI4%nb4YwpF#%4}FR z@_cEZwsk1ZU^Nc-BhQ!iX94$!E zD|EdY!?r77b-@e>D9k11F$5*&H|utWzebZ5^^w{wI-%KWRed zI{ft~;jf=WdAnW-zkmA4sN;A6=ac!1DiLo}XaT<)DYr=|XW9cy2Xq>H*lvT5QC^=g zET8>MSe4I%)_u;^_W9cO?6$dfKmRz(PwwX&(EJo9slqU(c}O-p!z`BH?|9XMeoldG zRo{DE`M=MMYQOjC*30yI)U^p3fTeo;RXj*Z&A`JYnct0++f)>om*X^?M0MD1hqZm} zKAN4OVG@Wi4Nr4U%xqVo-m^!~v;eO5e#f2n-$x-nd2~KUuPzkDzYNs{+2lx=%lc_9 z$V>F>Hk;gsYzHVW3R-7m<9V5fHPfYkSuFLKZVP0w>|on^4sfgzwJ5;4RqUm zZ=-#HjvTVLlnhEgV<5uH=5MO+6#V;PLE*f%WYtZ zM3j!>Vq;ixDB3u2XzP+eaYkZBc*gFj(iu#>F{b^v(-Wsri65^>o{nOD5Gt_9$NcnY3-k-wf`8c{Xe7>9xzzbr{wt0BFF#av>cB^1?^X@ zorN#8;7OB5n*ZE%lizsGpqZi$vr$(yb*0;Uv?6mcz!OdV}`+7aQcCikO@jh*z?Nt`-3ckal1YD7oYnqRg$)}R!xXsXBAt(Dz;R~vZPoNw)C)T zvz}pzQ#!O8H-)0+7sx(MvRanvFC@@w&}pvTsAkIJP%V{iwHeuMXTs$$snyfj8kwE2 z-zF=!yNQ+UO1-#|re?dhySFPmB}sG!duqeWd->yx6;mt43Q!`;r?=$R(T#XBXOgut z=GI;!gALr&Vl})~Acg-1cMXq)M;V9Yx&iz*PpDLaTG;KcrLuXrwjLnmJt07H7|5mi<6lJ#74*klZ`vyq0Vqq%6VE?4ni zz!|Ma;u5S#tSUthi|*iVOI!%6%GS(6eTZ@c|0`u`Ekn8Y`Cn1270O-F~?il-vH&d};8m0#BugRHQ7s#rF`NuvTSz7w>V8UPqm{9#Jo z3sdR|OPRd(M%;~M8D7zPn3DF((x*?M;#bOw81O4$fM;g-)fFi8&&#g@4r7U#KHoMo zQDnNkfnv_9i5S!A%=So4PW;Q~UKJz$<#VrP%fH}W{;NWGDA<-^62obmhhBa&CIalm zGorklr9B)6Cd}(gu!w-*U=abay(i0Z1jgAD!pfxW%ZRjyw{T4#s_LT(+cJir`u$8X zG^QzufBD?2Zp6QQ?&au5+{>pO$Gt=;;qd=g?zIuM1sZcjIm5kN!JTq16_zU{pL=aM z58#-4@PK>C8mlv1~g+!xDrY9+fQ3gp66J{MN z%~wLNzWQQBU7Z(ECxJt`#pZ>@dcWLtCQL~|vhSr}-*iymFMa;5i%W^J$;zY<5@n=Tl;uAw6!^EC0Z z4x(pAJ_D!UKvS@R_qqMqDE+^@y?c-(cXj8RnN^jQ^?r19b@xp7Om+9nXkHo#J#8VF z5wJoQU<)op5H@DLHePle3+r9)daoT0yQ;G_BSwZ{k-5g!1xAKNifbZ}BQCq)8+)&C zEX%{TcnAbD0!clidGx#M{jSRUIlrvxuIh(u{KsZ>Raa$YW&ZN_JLh}O@BGdK&c(Sv z-3*#54>7lSMbN4csjLT)iCUsw56Y|NEr-SVsxALk!{t=(Ro~z)V2luO zU-imEKJYQsPBC2V_BmELn6E2p&C&Wtc`{t&ILGTso>~Xr1AKSqnMLJzevzLYIB<^T zAn_4ny}2OkLyz+0X9sioLHCLCiwDQZ_&jcAIiB*f#l>?T1n(ks#qb)+>Eq*%^5kcW zIlfa*ZPE6KN6|cA$N^tGS;b|Rm5_ng2E}PbQ;>fxhXn-pRoJ95w<8TYnv?kciH8Tb8_Q9?Ry{QeLlHLapVy@u3kB(=_4RX} zWO9979NhxA!X=ZB^5kc0IUV;md1`C6ry2-U=f$;%=NDbg=m?yB1kOH!UUCG^maOGR zG_scOq|?M8x4G{VI~gl6$T#l$#7-6=Il>lwyYI6ya~Y=VAxictN>1z~*TmpJyYCY_ z$22iGWbXUK&e6#V;++8T9;9C$q+i|v;{9u+;Rz7$1c-M6#CwoFdJx1r0pgv=m^0JE zeYJ&lTdb}7&*l zWNmlI+Jq`=Y-j-U3Y*l6Qkk}fQ80-}Eh{(NOZ3>LOxWtB!SS9O>4VlFVoeVYze=#7 zz-bVs=<1yiMOW{Hr_XcfPFUj5oscAl?t~%^-3ddVpB|#eU>|x0ac6p%KKpnx2sYD0 z^qTL3%pk%{57TcSSq5Q+X77X)n!OWFNbYqBmm@3M{1=qM186K0!aQ{b!`#Lh* zuL={ykLwZc_z~_{?1_(nm3M*(cY+Cbf(egs_m6-HcY+CbW=xgNd5f@l*GC04A=&x{ zkBFW6kEl4G|NJiCAo|b6BSSrk7SxA`A-$(oIx^hV13J$jP?V}ihQSA^&~pYMRIH%kPHyy@F>Mbs}GKEZel>I z8PaJ|?IVLjFQ?noX9i&cT}Hf!x9c*Z&(QTd!9sMIi^|7kyB;ID3_sZk8luO@Pj&)_ zs44tpCwPbsbMeR!v7*WJA!JB*@%fJoQ}KY_G6*Do-;p8mMtkXl$&kL%SwAvN_XE1h zAf%wDNNm7%Jw`hmRh4JpxfxJKswztr7Di%Dvpg0JQNkNH{!>V>$EwOap?Sn`x2ov~8H{lDbtj3pYcx{qmp z|3T3Rg-*=XdjH{HxDZ!hv{r<9ow|O}(ZP z4KavVU61>}(e+pfDfuD~@*?yeiLm2u8Wn%j{U3IWO2XTF5GB!jsD9~38y}=!;`B=| zx_HyOmlg!J`hf_l{v)t;-^3R6AHl#@1Xu4q#c)T^u{>;wnQ}ss-K17MazlZw+rTrj z{|Ia~JFw+a=2Ec8$x|6uPG)GY$jK8@Pr~hAciBYOrGNwv?C#xixlxRWlWw7&40)Xm z#~admK7n(g8#g4-xZO^t1N&_dBtbaCIHjz+-Nj~@Vl5NlrX68LhRD|MU;g2X&p-d& zZ%1ke7c6aYYBU~Qh{i{?bND8b8+MWfJCcCTpYtpCn&P#Wa>h&7indgO;K3pZ4tidH zL>yl&Z;dqR0g|Oh!dvZTRXmKDi3c%kMx|ZKhQd@%*25l3zc)Ru_4BuooEiEc0~bq8 z4NR)q!${7Dk(>`={d^ednW0ZINY6JSJs*|=s9O?*IUBZ5iiNMvi?8o0YsReQXb%yN z`{nMJaSW)-e<_nD#)325Ho+~cs}DHublzz{pmr1V^27t$x3q8Z`JwJZIrsHU_cOfv zOz-uf9I-KHx)0gWWSI4eGQQ*%6V7fqT3)A!XxZvo-ENt`=+zq;EXsyN&eKZ>Qe7Xs#dU=JloV%KI$oz3iDYAv;ZdbIvyqsVQjAM_^_bX` zbBqmPrK>()fj{nB*QJE3rsrb3=vs_~Eu?LU#l-6`Mot-4Gbj|yQkeaO@~dzE6R%9yX%n;f^74Y5i5itG*%K@llO<>^H92|o=;S0>LWq^e5xY&HO&gc&N1sqZ zIIhn#AvYrRcoI9tUrz6K=P@B@-CRsonKWy1G8UVhl(OPE(|Y-3I=gH$4W6B)Ju!+U z<6$CC?PgBmzx11}oH0AwvZJ*o>o#OJCcwjN>Sojouz+l~b^6BSFB*&FJ6h4vB1Dx% zoMN$YcYjX<0yWZ8pwo18o~WzE2% zv5_-YRyO1&3}c?L){IEVufLKprzZautH`FTa}Pdx zAM~vDr8CYuv*VAk{qJl8|K;Nym$JmC`NjAr>s)W&a-@+w>fJ@_)4d;QcipKCo}c%) z$|>(u=^shwryjgzCE8uurnd8);xU#EhtqY#sEaFDnstwQoun7#2DQO@Uy{K&nxYOy zFfoyi*W!0lfsv(8`Br`cGLz6$D!x!_A(kvJ%g*Jpsdw8fBAQF3AB;diB*J)r1j0rxuz& zCGVR!XqXwvKuF{rnY2ikQ>(^hPrT~*LUGG?l!DePTIlY(pky`>WZSE$I!^NEZ?>4X zy=L7t&Z@A~7iJ^91{(#1*%oCDY;p0%wdGZgknhKjA3b&Z_~az}$M52^?9F6kC0zhd zyoq>EJRq1io{Xo-0VDeel-0}?PD_Z$FFdsAP^22U^Ti!wuc7j=Zu?q1HQ)}nHzf}` z8DGLGUyLVQC;TWJ*6U=1jD}KSgdDXl+my5Bu(7SfINI=s!>b$lFty@xp~|YNnNfDE zP5)Ts43~?qTAX8*G)dK#Wp&D&msMq16-ougQ#86!DpE1blilAeiZ7D5DFHyTVCqn~ zRDBG<47J?2yH5w9CAmv5*pNdxgx>-pvKBADmwAh`y5%WW-Q`y_xI6g?_;@?MIwyLIpy5SOF|rN z6Kv#L%9CPxlR#Y3?hS|ZI{n@!chMHrXLl&>5{JP`vsv*vj#oSaDS1rhDsr<@Ex_>f zza^L#dN+gWt+;P(s?`R7>g`GEvs5W=Qsi%ubh!Y28lPAM&*| zYZnTVhRIWH{RZRn)ZexFU)tPjxA5a>KZ);gD)UFhk43klW%*Zbl<1MwQiJsyMxj!y z)S9*JM@m>*lo~5he>_gsrXVh&0Z%fl#wMwpn0oF?Zuu-iKuOpY5CMe?r6fC(0m3`C zi#JddPU6_7s6^Bob?~_$Y_E`tBUE+1G&JCcrHji=)TE-HayTUURi9X~(>u<=;rTR-}_AAReG zEJam$uG>~Tqb=k)|MkZr<5u1pA5X{9b;-A9Yt=c*oZ(IUST@W$w-&xpzHz(6tk~xb zYB=%gt$KOowD#kgHGkgVEPVDa`FZ7cycX{-+E$~gg)F_Jc^`{Z>alvI&dg1Ljcvt7 zwUq+*?mQNm9KA-Ob+S?VBqgPsM{DuwS@rN5(+aZZC7gbgML_iC7{80rXVISC9HWnX zZco@gw+C#my7PITd)KyC-R->3y;HeEEjX{%!L_jMbK7bA+(z17)wp?|+c4LoJj!^D zfp*iN-85(?vwN~F^9=J0@bvS&m+uVTQ=wTiJqGRrZ^1DAi_ZQ0bMDuE5g%7;JiSbg zbn`JQZE4NrwAt)FrbXK8FT8Ln?lqLhqSuc6sMt;3@gu5wh_YbXT1008zqs1WXG9n9 z+mZ38zPdP`$>SR(pEYVg&tZ6(epQr&mYp?1p>EFq$~3X1@|lD?rqLumo|N@j9nXWM z(uA=zQ8JEL*Nh{t;q>Qkmn$JSwDXu%X_J1QESNeCGXi5{OZBe9tc}f%kb=H;bF@o5 zxooyk>RLuA&^0#NNneeT`bKKCYVpL=t* z+>_RI@8!{~S2d79QmwN|B_%DheQt}~QJSRR&p;t(ppZ91A!oR{WT;CsN@+$Z%_yCL ztIp7xG^3P;t3GXf=c9L=aZY;v?89%)+n@H`@zL+R`NMz44lQqICuwndES@JJUy)4q z`f^u~;vh{qX4&j1xsztSkl-jC1*f=dM)mH%_i~5rdhnh@Q}H87<9Pa%H^58}k8e>| z!}gTidFIeP!MgLKeW%Ry@jJY!h-J>q%!v9HwS}v_)^%Y*g#^pW^Y>FuQg8)Bf_x zRo)uyPG+?2@$tmZK>}!&B_{YQ@5>F%;xvjxGDo#sgUH4C<)T$X(3%} z;1N%yXW8s28DI}8Ek|igTKu6-gW=rzUIyOqwyv)i>uWVb{OQo}^XPr4ZRw_sQF?&p700QF&|lx>3zJ zge67MbKjx`+hfu5f!nSHD;pl54t*K)9iWCHp9e=jeahwP{%9Y+!&Xe)AKlKP%hdhh zTwE0T&oOrH_^r)nLj%KAo6m*^`cVtnk->iR^LenJDoZZw_WNb!X7Aom`I*)0+IzUU z_k(Ft@!$g)V`5xpY9gj()+Mj%pHwo=j**z9DfOiiiJ0H)HXDVF4a)gy);M2ivR4c= z#ll9RD2K7;qfzIZ)2TD|Us1(eyK)h4u?F}~B( z{%E*eDfvCQfX82|XwjQ|OVV{Y6&Ndhs@$mgETigRhY&fOk&7Lr;s=+aFTU=#!$v@Bkhs$ChdsSE>FVseg#oLp>uXC(RO@K~7Za(` zG=_$;QHwf!8aYO)`6QNk%L@D2deBS%)Z5IqZ@J}`Lzz^#vi{-^ z7k+yA^5s{qvNLZ$5(R=9}}H@eNFQI21eqsC^t z-ziDpQ1B<+TkZQ>OL8h|RqQhg7TUGr@go^xPMVsy1g3Q3Vbh~ED&fg!(U5>=PwfTc z7L3})E0NoEYHmp{`s`_4YQsRJzEC6_67N&Y(%o*Y27uS7#Z(V;?63n(I-(C4l!~)4 z#oCh`h$SEpM8=TC z$nSHAtDw5z$_A!|T3e7Lp1|)R5g$#3^Gc0`qm4k2vvss?+rB@HshgCxY@K4B%FJu) z`D()#NT(^BLX|1<1CeF1hIIndu*^n-LBsL+_zAzp$z5Un+o1dpf`|VGJp3*2@WUA| zGh73;4^sx48X$oKey^BU?U0vD{>JM1;tj7A9G}>~e_}l7HQLy9!sIM!cj+3hm1$b( zcr-PZO5&VJxy<$D<@I#|PA!>C394!brUot}*OHPws@Gi%nu^>q8k?H!ls2xs{L;%; zHvFV2CNUq`iW8m{&;F@s`_hfoS1$i_VZBJz*O}up$J|kRz!cNOiV^X7QO4V?N6A$Y3_dF9foWIW&K^-gCJdx7WtdWiTgR59fM>C^?qUM< z&DfHhj^EACOmio$%upCAHzSbOyBm3j1ZiPtwT#@j5sCtQdMBn=i?g%ZO>K6z)YiVQ z-8S96-l&OusWtRYG=zUAL+<-w6|4>3+VOA%8u!+f)R+ipZ+4ryP{xV~eu(c>w^c5| zhmON&cAHo|42raM+Zj*0QW3+O5H^(T350N1XGGd)QWe4BL$h*H_m1Q;u4GWB@71&XNe=Ul6746yR*c{&Nv^*p3$DL&z*6? zyeZF%`}G=h7NCK;jhi{CYqj=cS#tqZ1`s=^-cWCiU2w>e9mw_Mhi7v8d?w^w@f4fN<+GsFsV&PU*J$zd}^8>i^oeasN1m?6A1<3$fL z=fGNY5n@7rH^pnIOwz<*Wm?=yb0{#R$ZO)9jArAN_*5QS`F zkW6)31_^#(7bykdqc}mJM)0hU-Q@V~G%L-H=1V15ZZZZQ7oa&H&e66E}$b{2BpWtDr&FyGJ{<2hC z4+Z&jeVuhet-bz5sf9q90x5vevcC{=Z?d9p)Ba+RmBuC%!L2!b3F-G+-?qP~dFI5t zFb7qA0atqD{v3r~d=@{W;5Ai$q}ox4pUJhPAVYxb_4-|PxqEkl()7FTp(ri#j68lV zQnh1iM!==I?Cy|SnIhMQ)~VK*GCMU&CaJ#asl00J+<}zA%Xv}I@N*7e^oa+=j9W{~ z@WI*ErR|dH0gaa5wP|}ejN-+-go+mtcUAB( zl$n7tW$j%29S%c@8O>mge0Tr}OmKGySrI}7S-Hd%l-Be}DC%V}Tyjy=5@np)J;D&W zVEI~3B6p|mFrr9dlLE3~2w-c}$>qz@9vN(p4068-s)uQg)Vfst8kBzR^=8y<+Gb}( zrFjFL8(O2 zG%`L#2*K3&NN7(s&W<RMWFz-)I%JB9ZtVULiF+(mGFiFg+ z%%5Q2U9e!1MAq_KXID(<1@5{egS!Vr#IgOe%VopeMjapy_zkV;@$Z5X2brFATA+>9 zDzDdefs1E>i?0mB#j`_j@s(k?aJAJlJxTTsxJD$|o8S_uXhm8<*`$fR;S-=3876TT zF-C?6drSK4LCyox$DZAbga@UMot@c>YzK(d-i26WLagxt0=2_P|E)331_y{SG)ROa zNxAzzEihg}0m(rM=wVfIaNK*Cg&#bdf<^g-JIv~JY-p6VEg3L2G`c(R?N0FRaYpJB z;M)_7)NeCV2hlkWqH|25b4X0+$2Bjh!3=E_o#P-n$8+<00NitUHtnu;5RD~+Ev;7@ zcg=sE{CDp{b%}f@)NoR8j;a`?%zCgD;Wk1I(rDE5Gd(crsP5cd=oN%Wv6+S!RYJ0cDxK-|;g#9MKQLA@ zkh8BlL_L*j_Vq@luZlf4KZM86*~5U$*Mr&^Uk|Bc5aX6U_MANg$^q+bLS*vD`q9nm zXl5ac>!Otf+UwcVa-+-(7y^gs77WElc4oeNdqWdEe)+v^AV#J z^j#R`81k9)&&1DUxI8(T{3Dpv*>kMu(rLLdv{ljSdTO0xm`GXEaB3H_$B8ya0hG%a zez#tZ$OK7c@3+ukFtqvoP%B!1KWE7o>Y}-z;&n|ad>4-T{n-0@zY?neq)j3~wTohe z7=ZjJlr#xn3qs>GR71oLXX*iiQV%cCr_RUe=phY}aTrt)`Ff|0_z{pq*4+OcNFo;7 z{{V9Q2ascS<{uy_VfvZZr6^Y-%)A~!^#sHw{lY$s0GmP>>3?@qA7@1ag(rmf72hki zuL{pAIil3k*^=(3E;-I2b)8x?!qqS}X?|J*x~j{-Asuo-Hc=hxtKJSa<*yuzwa72vyNB`ebis@A(`g7XWZ2MTooo&At`u(K=&HkA^1mDwp$-P^U zVt_83jXo^1JSDu`d9lokWO67)V`~>~5!ZP+pnve-j1+C4GDd~;5|`Zs$ff|0P(zpfmQ2z|9lOz)6{lT(Ahak1(IDf^Jl>6r-xzsnIV*Z zdKjc#&0KPT+zU$I57mno{Jm)A_d?|=bq8&d2b*AWyyb%)JCLrYH;a!G#~`)}_Vw^q zezpZj>ZfrClni16NU9Zc5$b;pz~=rPL^lYI`*qxuar?&vim;-Z%Mb#_wv*I_J{ft0 zj4lk{3HZpJc*rjA5pAn)42Tmp(c9Nkuhq}g=*a!McjAu9fI`h^L>P@7nzUF7PJ<_B zz>|mR*`ot^(zo8722ai)5Brva&+UOHpWO>jvRY$q93K?0cQ+83B1<`Wa`uFdDID+k z+Y>OTi7s_E_5=#QwOX_yBYVKZF?0D^v(h)ry}pu}rKo{cBfG}{6eMDSR;e8v0)fvB zfxu^nLEv*kAn@5?5cu4HUijG|weWL8T>sf&uFq=Txp81nfwf?Ixf;NRs1hm*w_4*tf{n=rT{@f5pe|9&Hz6H8F3f&!r?!;sN7U=9KbSC5y z_7BP#JK>VZphU3~J+c^_Kqp*M7@968dc!}+s0nw_huAagRfBuM=MLxv>C)OfNNGE1hJNU@rDQh-s^*v?X5vtKzu{vQ$c+7_b!99guyj>~Q+v2^lS`g3N zJ*3|qEJH)85U(aC9OoaU8}AFYizIEs)>Oe(Qz*kBe%KJ2FY|?%PIl zL(+BMb~+mrv-`GD*O0u8Zlj_Ltltk&&V`}D+a`+p1D0?HY)B;U+cro;vU%UOff*9g zn{(_B(Z9b=|9+JIm8#6!SG0cv#Qf(281gf(o@EZ=yXFcG=2bnT_>jQP9?+ZO;?rnr z{&2{|e1k?exXyhr6!PGl)5P_&LglF*GYu|zTg)BA=wj%$g@F&N8Cx#B=L%ZAiRBu? zX1c+F@=6F17VSMzCL6Ty^^hsJ80Rd^g)kaHN+hw`buOO0&umk@veiW4uk&a$#8lp9 ziv5qV@mhXjzm#<>D~YjXdEDO@{Qt|B$J79-)+lk+A56u5t`?A+5(~Y-8W;f3Q_lOk zxyZF(i`9DFL*{PNlS_6PxNS@4S!$a*m~tKGQG%AZ45qTVy^N^0NjRc9L>)>yGIJp(>{kkzk$&g$0( zSpE7S9ycFnWWJm+_#9%tsXb%1f2y{3IgfO&b+0*h^&i^Tw;rB-+JWw~p0)q}Uq0~` z=eOly{Ec?{E!rpL;raK!^0pECnfEz&Iv?WkFP(qmeAKz7J+6Hof1WRDe?Rery_1<0;AJ4tj%YXhB=MUI_%szE1ohqCygAUQEWe3Umla?K5 zC*sf~558n+%(xW{K)n_lY^Rd~aO7=!wbtt3Ln{7Js$@mET&Q(OKBwKw5mx<`Pp zp1T81tt1A{(5pmbimQTnErcy!=FWR(-+1qx_ueyg?>&z^a?hC~cb37L`i4R*S2HFPCZ6OADuJ>CBPLJ)ygQ>6h-F_T!iwoS43SdcyDTG#Z`< z&bWQ%zPiRQX>7l}#%5bpD+gaVOxXudw;HlsSQ5WnigLyyA#rZ#GzezeSX*Aow_9Ya zXh`-2NvDU4O}<{IhIqNU(GD2Z4XCVjIvERvfzzT2{z1f+SP)21z|1vf|;} zZ<(B)tY7Z`d~)*8AzaN^9*oSYO0&}M&h=_jvVTfh41PpE=( z`Rd}$8!x?d_e64Wp+B4%`5m(LT*ohP3`xp>h zc2Jnh)o0_fc*TJ|V=L%oKQjhdTER$XIlrx1S^U&f~imA0`&v zn>Ys~=x>URLrI`lH-Gc`#%tGaUcX)}Ucde-6#44)g|(YkUVHgwVFd@?c9>ZiWRCLI z##>w^6FCHN`2F!EUnRemzuvmB0NpIy$U|SP8le+Z93fz+`^>mb*N%>+*T4ULMSR3J zv9+~y;@LQ7l%i#>Cm~({9s3!LdIue`)>`C%c3$Qp+O{=8^vH@S~$S^00A$k z?Lxw#K>!eDuUD!>L($tXKa$0Tg42lv^o}jxh1H zo6CL=NL^fZnfsCfd)sCl_QQV%BOgaHAyW+Pj{^t2mCSC(w_a*tTQY>BHx@Sv)lNq- zx^Q}h=JnQte*<0ccixoZm$kJcBOyK6Jse zzTknQM-K+id%6UVd~(zJ<$F>aebXb4JSf?o@MvG}yJcTE=V{fet@FOnLHXGyHqBxW z_KsNAUehjW7kx*MPWhC-_60`9Me5A~>G2AqqLhy`d}J8eStbO;T#1{Xa^RLJZl%0} z#HooxKw+)Wa$1Mf{9t7XYm)MG7Au-3HaZ$(U0FN>LMTKXKe*7phFoNG!xA-k#TnPK z;jvVF7u~OGwT|!L!Lg9IRvbBcgpv@meGA9IgFv-%|2C@Y8#gx=uZhR+%_RzzFU?Gg z>zr(ZSA*R8w`h!;S@;U?QNtt{3wKiS>Cc4;M#3Fjxdzv@Y1ayx->Au6F?Y*M7~fLd z!ZqB5@ykAd2fcftKH%^PTK9N*ojB=Fj*pL+G96ZyxRIoThqyOL*6Xl0oZH`N#}dqz z+v_q{HaV865mi#a%lBu!;)L6N93ReZ_mcr}jPNoIMbh~2CSwKZ!a1^5X!?0V{W#9~ z1d%r4SYN4>sX;+I2}bu_cwE!ZhAg5XXcmnNSbv;wy`Si2LY4v&bnQS!aENoxYbH`r zZ;qM*shI!qWZy5!>sea5d2_9WN#nv4G@}E zGr>?8##dfc%=OWW8b(e0V_O7z8J#1CHwl<)^)Kg+JlEU0TG;iSVn8IWH#bV87ZaI6 zzEG$%g=^MU*T}kkxIc3&@U7(I#*r$B8X3mQth~k}VdQT3tj`;W#ljxCiHm-ca1%d4 zoors?iE}JsbvoyL-Y`cPpGao$dxrQPn8 z*aNNA+#pl~GK1Juz($|i!Vy9>6lFzRYsK#%q5c2~HHU=CGLpZ>NWK>d^~*@8UqeE@ z3kmhRjO?RGsCNN+zpNybfBe9KG0T-uTaLR(sN~%bKKQWqB^Gf0hd!p?qu;Ns5Q^0c zAbRo~3Vfq|UJ1AZ!MO*z&p6}yche7RwjNav3xIw!f& zDMe2S4(xTE+`Hm({wwcg)fp}qW{(6?8Y0V;SWS^wN?>UXf-4Ifm0CmGC!xe!gyNQo z(G-)cz-CWol}W6~q;EaH&NNUcljJ_?{BlLXPj_=kX~)$gBEVJ+fK@3VxpDIK`7+2a zEfP!2PR}M{5lpH=y~lb~N@fiu#7Hu^wsCW5gauCTLGBpCEJYB!cytU};HL*(!Q z_1x%`xpXoSmP}K6r@n4@lkpkywM7Hr#FGe^^`)ha29hsG6V+5CVCAUQgITwYPiChT ziA~MOeA#q3t6`X)b6$Tk74zlx`(mlMKfki6;sASEhlyA z$T5lDto!OOUV7oX&y#hL43M5D&k=M5PM??VeKh0>Ml&%wN{{*5+UO|aF~nIB?a2Lh zVRg08o=aDqNMaumHHW5yiNwK!hd68`5pkXru_ZHaA=*LO*+DjksAuX5NHN|i0g0~R zCBu&;1`FXg2IjB`%ATvSMmD8tm2^rqk~k7r+dEQl>%{RM%g80=KHSayzvI#&k(fc` zEQ@@e+d zdgbq5dg+x#c0o?&$izg#Iy+NmzS1H7Uj(TpmC;P;VNbhTDqMeMRmoBzQmxrJH`7>O zEfZkuDX-=mqv^0;a^2NxE5)+Yv8Jc@h5h05ldd%V0Mb;d(EJMX>4(rVKcKmlXNFw3 zdrmjjNRK5%5f?b?Lz{iV=R=c)ro_|*z9|RK#jDjifD$p0t6RuM0D1QKK-7W~rmMsS zx{R@3M5;hlAGYihefKaiOY~LnnVIpl*Q^thU0d10EU(GANtr@er5mv28uqKNx{M)7 zxD*VbkICX#$IczY2!Iw+sZ$)S7XeeQyzt_8|Nd_;Z6J6Bj{f%fzXOh5`mvn_JU82N z7B4>G3?0juLA1ggiBOA=B1T=~i8!>K)4PqFHyRxYSaX_tz??4WV2+C{@44!$S#nEj z*UH@vG2#;3t%$x)*7gasqfL+e{(5F8#vHX{;N1ODkP%Vz&4`eiuGuJ3 z&M;pUg6aJ(I?l^TU8*!;OIC1b;Ce)iJ&iimLfr>vBTP)P;i&t)}E-kO!TxoP_7;t(7 zy!6^SnL;*ajm$sDzXmbyxY=D6N)C2b*$XT(^-`iW{rz1sPP2eR`8`*U5b62EfSL zuI44TL>C@LU~JzitBnBZ&KtE-e)*E{z<7*T%W%mOc8 ze({x(*8P)`wy6WbqTl z6+X+2UU%86UN2l(yiw~kR&HWSUA3pTcMPWTGRiLA>yO?qieMYBehG34vkU z53pj!B;10+LN;~+H_jv!re=UkP#sUu+wnm)K@5@PuA^Vo91PllL|l5I_;pDu!e-4{ zVSRPOp57uBD8QwUKx4HXXs<5axVfA!)fznu;(Ne($vXO=ZbE5}dyk zoIeH5&oMvy6Xs{9!1+_){8t~)zMx$&e*K~EJm|b%J$~8wfb%}*KNx?r_MW$CFRRDb zwZF8#`ZniRowqyt@C*GNcLUyU~MA>X*kGATyRvUd6 zlU1p>Of*U-OrQw!F)K7OLJk{ADO24DTQx~PEm!DWsCO~3R&M^DJClYK_(W*;|95h{scgHYKSM$5HU1euW|{mx|6N#(yfA`W$q$OvW) z;>yO>w7)vy#nDf!_H~>9FlMSk@AiL9k|J2eG$Jnu%>^LIvH4$oERkxa^qeN)2q*a6-lNy3fHe+Us~TNc_O0> z=0u!xtlhl){g)P3Yr$k<9}6WD@n9oAK;HenlJmGj+b1qQ%3?F6U70iMJHT?u;hL8!|B=^xIqZHFAU!d9c-F}-~ zt-mSzkW1TYmwX=hTJ{nAlnZnnE?N|6lZ$jZMB+-oX2FMxS1yio0PYF`MRDwh6<_Bz z(MX#FeVW)mBt)}S1e|CK1m(p5iGd;>Q@GS=IaP`be08MN@kwg>R-+%ec)tu>k*jz$ubc1@Cgl&b7zh87I!ZOp?}$-%_vSwVLVaZob7 z3H`M%nWjMrnl3OQII&*CB~7}v-6Erv3T<1nrv)BFI=KMhmHbU|gZ0|7zzCkNhCMyZ z9t_23j8ON7&ws$>O2`>J;FzJ(q*J|7*6Gp$*&a~C{-n! zDW;yA6cL58U6;JOYVrbQA;1&?2JLB~C=pQ{3|V0TX3ooDKFPZwF~KA-A}P-xT@;0E zTisl+O9@EBB_KP#jTD@2j?5-(WI5!Pgl61Xh{PvJ{?Yd%oz5VgWEA_pm{Uk6$u4vT z>GVOQQwr%M*@d3bKKmBu=j35LqrLwvYB}p$+HcszJHF@~HvYQ#-rhdry-nsEhwW@y z?pkJY$PkU}*(tR^yjp$SL#db53uE0j$-A{0Bl ziKv`ouuze8EN8Nc;ye+*x$H3|XM4o-u4qoc^v;2L0q2jY7xT&OfsBKFU_TQSB^^ru z%k^IS=}^q?^m1Zre!g_)br`GS0TbH&?hf@fKBq`0u? z_Mr5h9_5Bn$t9_z3TmR?gH${p(G4V(Piy0h-NFKb=Rm8(qgga-AfUEPYlnCV1nmFH8TOd)ga| z*6PhU4|o&fb^^ez=v~cbjoTqeszz#Ckk|3L7<3fsy&vuPDAaox>Xi&c_ltH6r=*A@+-3(%59*qS}eWB4}juL3eQ6F$usjy`i8k_~r;?_o<%MRM&1s1p_7Vcs_4af?9Q~>RBX; z^sS_ykScTWo<90fIR1~&M?VY4{|SBe`{<*OppU*Aee|7h{JY`!$LPa9h2tNF;~#;QA?k_}HyQXGKK=?~bM-xX(q*$WZo}E&^y} zrQ3B)8df-lL(iRe?6|z!0F|Rf=@gVn?6t7Z4x^(+)v6k!x2UX2Zc-(j;d1-b)Jmeb zrbUf)BfHQEJpt2m$AVN>DSC@;UL}=QY5efGuQ$~)WZhm=Sqb_woO*Tf>Xn7tZ`;{8 zfh{8`eI>1;&`rPd6r)bwSh-fcwsPYKq;+q5K%)^tJ*mQi+hJUf=Hd>{8bO};tXLMS z-u~OhM_8Th)Gap|lgh=!FPwfnQLWm~u*T|{X$50yX-5r}Tv)VMceqHFEKL!)$A4+e z$Xd(ys;{;7sy2`a#}1I7KN45&<~fg!hM65Hwig$R*NTHFayq$q;~LwF%G8Eln6K2H z0_gjOLLB+IjD8-UZZdV?FVBiAie*mI&t6R6A3!2ayt72rbXbrLek>sV`pUE3InQuP zIQQA7;#)~YJftI_|K)tGCLYibwi!*tEWOM5I^>USa!0HOS4-tK8Cl%(wQ9wUa{FVZ zH=2k9{NA%q^`dI#y)4}{I&v~;q=DU^PHeQDa~Bho>4AE2eU#N(ES+tGbIC%lfk&S zYI!JW=+eDZb+{t&lM~fujcJ5f*%d{oG*!AGArxIRkhT^8@L4&YOlGdz+$yzHLXmif|reJ_De! zlqBM+?R?B+07-gaTpv_t6*|Hs&90RI8Hb>=kEhwYTe>k%+a75=$~U)S^v= z)+?B%K+XQxiTcu&8*3YdGB!LGjQ|IPIBDkk7$qt&Ay_WB*)!8J199j1GDwO8<-g#0 zf1Jei1(3t%noZv8^P}tfBFd}Y20RBjuFr*vCiu00agUw(pa?@4t$(eVKKqoL z;<+}&TYZL`-QpO>2bT=7Q=i9N&xE@(7M=$l{O5Eu3QhY(G!3b3Fr5kWKfu$ECgSBg zO4DJOpU$uV`4-hmTB<#l({(}^+=<5jqdnN4Xne?ij@pPnbdDJRt@&&HnZ~a*pFQJD z*+&j5kdT{mZ%^)$rA?*e%RcD=diO9hs)>^`V*sXKTYTlk8|X+9{3VkU{K9Zvl~r%; zFlFhY(TOzK!_W`MBh>HkGxXh5q+P=?qh>_RdQod1KGf?>VLa6UxsEK^igL(!vYQWw ze)^TKeeb82zWcY|8M){7ncL62``who>NdJk)g-Y$C)p3F>+wp*Zt(J~3*@6N@8saT+0Eijv-zDu>RR+~F&sHp&mgfurb5%Q4$ zc!Yr(R2tQ!RYplOwF52E%d81^pR?5f=y4ip&}d74hX%=^NE- zgT(I_wE1}AV8kdat>Mf$G8S(aujc2~w8+vL${MBHn*PPyY>Rc~ZYA*A+=m6_cgbF$cAr;92fFmP`tQh?e=nCUwxgnvuo%N%= zNL`>d;?iIuM7bxG*sFo03|cqWnw&pqY*6rs!BCrUn!ELODDlD|5tSn3ag_3o%NrF( zF`FJvq_Ha+Dpe2DB$*{Oae1fa0y*f&ci$*i+ARC$Cfk*AlV+k9UD)M?;j6T7q2g_Z7hoGx}3Qyey|Lx z-$O2Iv;PVNO%o#^uxlj5f$(Q#&|ph_|M8u+|V$ z?ZHx%Q+*vavhUuTjrL|8uVwGXIGQlaXL6WJc4d}}2M_E{!kd(PU{}K3qSrxkP4>xk zfJ$d)q-$LWQ{AjyWB><$r_D*0xa+AZIkHV1;~rIPsj?K& zu{KBlf*Nsy5x=n2HdvRoQ3+fIK&g^G`9xo<$(U11ZT9R?6n|>7H~R~nk|Nx-8J|P1 z`x?FS4Wz)!=ygBJ__TX^7NmFdEJ)v^m#!fd-i8I~-B^$&_y04c-)@46M?dUhi@d(I z`!#tuzwZ6ZXP?bK@^!i` zkk&H(lk=GeoPX>5k^UE7eXA2!k2iRp2p#>s2ej{K-|_t3(a;m8-z;jw*49%5T*1X| z_l;{}5(5+8kDUt=G%BH;2O$GqZ;d9UM!l%Iz$$VVuIo<1xeQ>m`IO%pRWHmr91y=`dp0 zGj3{T@Ic&ZTJZy;!3W3_CNp!jlI7lpXbZ9#)a>QEeycf3eIfd&dspsZdKP81vsTbj zeuvX^D!n=wbf>MyM)!3} zOjV0DPtb23IdU*Aiw|MVJC@NX0v|qd#B{uYiGX)@Uy{@aR&rk^YMNzCD4BHPp|=l@ zf)X!oE2XJ!bERVQV9RkjRM~v79Q5vle;9cq2E|2)-tl;IKTj_E#O?PVJw#p%kA_Jp zl^WFzOG0bwYStJh84G3Zbn1cxnApc7qfAw6PTTaKZnqN$51+d8XjJRa6$OfIU%hmF zxmwA$sVuBD*B2KrS#fvn8MZF{@O$6;UV%y&EWNSQKNcqcD*jI4vABQx&Gqh~H%e0U zTaDA!J@9T!Q5rg?1V3(W+39c!!wM#sP$Hn=2;FcZN8WIJ3eZFpjx`#qDRa&fOi>}z zsI2O_UR_@+#aCFo&I(qO8N5-FlNG+gyWf4_s3I9c~3h^*!z~e7ya|%^} zm~Y&q6&*2@%Jx(!8PK~m!Xb#{2*`oVR8aTz(fyNY*284oqfRYh>!}drjDg0@!XXEa z-IT3X>qhn;IdOF6AQmy%{)=eax_*`;n4he!HX37N7(6w?Wn^Q|Uj)TD6?r970XfqK zv#5A{Y;5wDJMMea0}nrfb}ZXdA#`tQ{!jpj_(~hz+#EUv-6d*w&n6`gBMV0>u5TnRY z8E)M>7(^Mh$E8zwg)v0{x_jN-?gw6TCmaL6o1h;nJwVr`T7iTLD>5J}3rVu!O;wSU z39OkLM`n639+qB@&tXf`ue@?)wUN`D|BIrR43>1dh%}C{@in4drp1fI8TLCZ_2UEn&d!57QT?!7rVd)x1y?8|3wfl{5To)h_bB6aWMhP zA~`h5>&r{mUwKJtma;t+TB*=I5FLIJ73Q&8Mtf3oJ%ye`+xSz|3CXtp=V-rwhQ^US zty-e_(^F%XNFcwL61Hq4_HkuTdO{ZKJ%m-t4N;s<%HIxXya6AA2pC5c&ELn3s4#fl z2~Hi(VDmCqI1M){P&T5d%iOo?Gm%S5WF0;{J(di|amPwUg63Sr3`SB&CB%}*B^&1+ z>W1J&u7FI2UlD?!nfr!4t~`?O*s`~#G|yUIYQVjHi@jQPM_=tC?h{MF5W?a$I4vC1Y|d2zzs<6SuS8B+>!HwU`Z+08oNq>d=1f z%%dScFh4r3@3M#-FiOfsxxxWAH>87oU%5YtLSx%+I0OFyJd|0AB zRRt(W96T^JITlfpLP{lh=OXyk$B_^{0bys864TPuB1i8yN}zZs6c2#Eqae68G73OV z_Ygh;_)BQuT$*Y~WeU*2;(Q(6#P<0Fc-|4Ch~5exzxUShh*8R!Jsi)a34w?>b&})@ zCm{oV{=PT95v0#~@4NlLSY$2|89Q+M7Q)+S89f6tYUjC}o4eY=cz|^f@5TQwE4B-$ zzC(3!YWoPVw3GlK+`flQ<*MKy1Hz)fehFC%;>{u&f6tvAgo2a7sQLSZip48P)0>6$ zydV|J#7!2)Ws}tq4L3zcR(utfvCh-PI|vEVYR^U5t!5Rl0<8qD?5r1SQMHph$kK^l zkjA1CmJBp-;^GV@BXC@wV=*YVpI~2E98k;2_B4?u75-v zy0yE>lic5|Ad!UbhP95ZEY1K|Uw-9PwpU($>7~m=jI(Eh)XE1;1s<{B$bka~Mo11= zt-3}1M9j0@cI$hO zl!}OnN`bK{mll5TgC8uId~cSrCl(gSMo~^N++SzH0WF-_0yBh>=(XLa$$l`B^m@+()a-bfK&esnSw zo*Q=~bVYV-+w4)IbynA--lmsipm@mzc^6$@mEf~_5eqX}EU^&>d=lp$#ud$j=o_*y zC>ySq^^umvIvGAH_|j<4{qc}#;km~{eMfZhK)3zoJC!En$)ZtFU$J9a9tnqb?YP?t zG`x|#d@hx^Y$CiO@A{jo->FY(XYU&kce;Lz{3q^)I98j4kBJ>323aRa#(@buhNrOA zArws9CmO9PY7yG>eOOcBdU&77v|;eRN}kAeoiYmeMIJeO>Z}W}pcbj{PdJcZnoi!G%AwICMQe0nIUVd>c51^5r1d;DYB^`@*IHKdX zkK+T_t~nmu^l&f3rLXSPmZNc%(NvZ-Hv&j8%~(;#LLRqW}^KZqomJPg0*|ccUEc63=CD6~jHp;zJj5Ubh1c7{BeD39iOZ$=ebD?} z(EP6;wND_mk0PaiF@qO8(`)q@;byYIL@KNiZSNuRS;&2>C74SF;xV~-aVvqJd3w!k zbOH5VCirL&EM7S=`7Dl|;c$poE2!#$DM`pL(4<{p0JH=i3_a!zM&gkm;eB}JN?C>+ zvpIT|{LVS8yY&@^d3B=c_}(DE6J1Vhl_^iL)Kw+{+P?aY<(QZSqsLm8JDl^!Wu%M;p?pJmu5=GdS}J!5IL%-7Hp^q%sLc zdlBL(Y^<#676P9V#1cd5)A5nPRi|9k>Qo1=Xd$XJTWZPBBjyU$4~b(V0kTE14k{S~ z*JemUkeMYqsU(Fb*1=l*5CcJ^HLJTD#miR;9Y5Zr{!ZZv;*9Sw*Wq(lwdbf2lumfl zxW^M3z7HFXH;v`2TR_dq(^#(7#>k4M>`SJJCw}$Sq87!0oqC`&m2=b#u4RW7@VaP| zh=&AbPVV0N8vRF}0k6JrwWLMx7{jp>LkNuKpPrr^fBw>j6PcNri8vdVSi^9X7pT*& zN)9h2QPhk3R$fIaVlq?XqP`LjS{eUasXmNLQK?pIG&Twn&{|mEz(yTlow>~n0G9{J z@PK85G~3|AQBn6>^;$i@u~D@AF;vo+zufB9!X74#QA%?e zv3P29E-;#k#|(q~9o;$BRlA~*R=W{VT3OFjBZDRmPoq=I+**Rgx{jS4UtL|xOGET|uX#`asi1V&09>MVje@CC!|gv5ue z>r3`g@$-ggBqJOdLxds-Bk~h{ZitU&+wjLFgh1;`LS3es(2nC&YTb(DQOg%foD3Um zA+P&^P-t1yP*R%8@^-gY(R}R1l7QMt2dWtsPFMho9gGY6IRT zD<_^BQe*aan5WV0poV#_BnERx@KoGuPM9|%u4u;Q7f6W>g(%bpwns_ z8{8uNXN|f$E&f^PFQuiDC(a?`m@YvP9-Ku|_Hq`8)$|)geJ(UjtOD2vH6v%Ct`JEM zc8s~ZoBV6yj^?oTgXx3ArY8G3qQH{0O0+-t!9C$*JOw(W;(3rlOg35`ff2{o%ITt< zPi}t2Vex!?l<4oWC(1;Rf9(0eMY{CoK(fm(28NX#yf7Na>P z>jYRifqr?1!(msevl3yAfdKt+1p&l*BsHO0IFrb^q@M(qT^5!M7V==jl$erLgmqH2 ztP3(^HQpMR-R0Ahdt=YQF8oyy0!I6NonG-bd~i_ zKQ!CF18Hz?lPjpJ$yKGRyt3ZV$BHC)u(~SYtm3qa(+LvR03C)1h()bc)J78Qd9>AH zI2A5ti6-fzg~AQcVsihsvDmsQBeI{R>V9|u@1O)B2xhOChPx5^txsw6Sx&|fZo;9# zXLP4CyWbT<&F!es&HxwNDU&_ub$FS|tr;0q(pXGfwwNXqNIzoXFoBlJVye%JsY&y? zuqTLdAGG)$Xz`uU;ya+k2cf*rO|#r20e^ z9i*sXa+(;VrC~xsa1BtAupS>335^ZX&mi%P4N}e^*=#||1dyV{bT9XzoXV}lT_1uJ zd(?x&GW39{cD3ku#k3RlIz@X+DsSDSh{4hR&<~Hhzdz{1BfbmDKq_-Ak2t`bs1d4t zhK<=|ct{n{h%N`v_*g3!#}8ubygi-c4v^-fjP4&Wx*ukA{{={M0KPnc&T#;p;{aGB zRRD5~_5pMbi9CBQt9|t??()C!|7vgT`2=Y1u%CN?Ac=>K=bI$cz9bodyc-ds`9G54}X6D z|9hG5WoC7^jv>NWue+);U%q_D|9AX<|KIWbVMTF_g&{KHIGS6tJg~wVybHCBI(gK9R9q-rsRz|f%zB3mOHiD`B`iO%LI2hc> zP!jkHVl<7tJtLS*2IckMHmga|wsIvkp%Yb9@6<2uDHJGfF58_OEu$+J<*Foe_76a~ zFv3K8$Xpy5Tg~j&RuTzJEfM=@bIB%cr>%m8t}`dqyxWpSGwSl@jRXWx~qwtNU~;MosxNWeehzWn}3}}0LL2Hb=QH$|VR)#5X$CEQeomWxm>KbKPz%i8Ks(0rY z9}77}jfmo9e3sJ$TX`)MC*L#5f``GDXXitjs^}OvnpxM{y~YS)5twLX1C1QUBNF0$ z;K;gs$1`e-)>O9Ahlv!cvO^_FTiLgep{-j=&-Sh5M$HF@NDK|^4-=JQ;ZPYVtdcG) z!=WU?D;uka3B~GR(y&(0`S}ajQSb#9^WmWkXcV`O)jKXbwfD-sH2ht6$-Yh@b%CDDRa5i5CK#ZHJ`Y?-;-7Z$>i0x$?vey zy1s68LC=Dx8#gZf$IC{4nOA+h8Zr4?E~mHh8BzU>T8-LbNBPsAxE8W`7c#CZD0{*c z`}G$uw~Sya7wumDkI%n!LnMJzZfm{KSjIKW!N8^gVvl}sHZ`7Vu+%u}p>u~+ztdBj zIz}E&UZh@yXSms*e2v_lj$oVO*f?m!E?j9d$s`kreP*0s?4@fmIEd3h>-bTl5XYy4 z;zskKJxl9!O28l7zp=bpVBWEtqa(>a5#^0-7MwQ4bW8cGFDBl#X%nFDUcW2|IWn72 zhSjZg%jHPm*_U^nYn4GHnlGeDJb5bG{L0@D#yo%ZMqS?h zpMUnJ|MzqM?zjJsU;C`Q%lDgtiZHfv<>!9UUR#L;hSe*3{W1li9{yL4=8%jmLD)|} zEUy%?6#rA35Gb7vG9JvUluQ_~I|e$QY1I3uZ-<%LNNegh+fXMseg*z&R$OWZ!iSrAR(QLoLaKCQZOVK$vXhGiny2?YX1|ICGk1D>PlutNPMAf;lv5r3FZ- z+wKRGtCo>};5n)j(1Mj3Lje(;z z$l=m@LoS?{Xbf~lr8zo&^k0#>$U;Zd#tudp+4Cz(ZxEZ;nnS4$r8AhEvt%QHGmYNx zZRJ}lkuY9+Q62ekthOITdq}aLmUE>3);c57y{a|EvgB{$`B2KjQ9dY(GKIH?%B;w% zE3Lee`AW$vO)2K&)sfU8)j5M^8_^rxbGWQdq!iIqf_j^BI+e~uy5CD8pvq)bGK8oG zZdWWl!WhP46?t@oJS1XkX=(altc4#(ngm7jeMr-Lkf#3}X`<69V9iRIVVd(o6dU6t z8ZH&jcPiIktWhFQs`c31u>`if$&9p?3{;xUzSXCGlZp+N8R8@cC^VBV-g5=#(G4TD zw!MDO(jdt~MLk%}XubILzmtz@Z7ukR;Q zuYqxhJQC74iybc`>kP9qcM!ag!44ENNI@tTrvhGqLa`byfy*cr&Vlt7-XWmV@ByQ; zAgf$ky0MV1NftA=j=!y0ZQN)FdP7;@qI_9?rk9rFBMNpS0-jD~M)}?hYn}ju(W)H` z?co6}ra<W0#h@6+z0%$8ePZ4N6uc^Sl)-1!)j5E}vp)8oZjIZBV1q&8N&kkny~6UE%Xb zh~rV$9nB;%mDSqz_V@rE*%yb#^}V+0x5vwVKN+{nr>eNNuJ%UBmCSbZ z;|}w#EW?C`sH$QEgbsmi!kHwt!7Z60?f2~t#$yL5cI-F*A2yj(Q+)capGG0!~?ImVWL=lX89D<94C5YiP7zZ{Pe(xfsMu0#5DvJfyM8j z)9aL%24QPG8>VtTJgAz$>fw|&OKIAqs1#J9e!(E=eGD=7MIspJ9(1aMOgySwgw>kD zV`Py{tjr_^pVZlPc~%$Fr}H6b{}8kn4EqeLiwvua3?8HnRu`{Ee@GYm46BO_tBX&B zcYg2p-uccCmOp9S|A_fd&3|g#e>R(umA|MH@tlZKF*D7oRP&JJnP@igO>%-!C`AEo zDm3cR4L#5cgjP20zB`HIrt!Cb`_fA<9uY5pl19I+(b-Rg zarom3=RH-z0p2&|HWG|UzGUQi|HA%$HhZl65fweg+sDO9!RRYr89hs+#&Z)gT4{2% zFzF;mDME3>*ho{YTd&r;*n)Hx#`N`%uMD!8so%g~Zvly&uGIq=l|}|@C|Ag_c&cBj zw_5ds)+fSA%OVF8X`lzUO6*I!g6Mgcpie0GNA}oE~aNmRW^_@p+&6BAJXj087QGh z0WFr7O>=pcP|7`uv@2p7c zwYNTk&02o;t>eeWA29xafB!o0W8YtY^Z0*Y$79dpgdrP52qqqOUWr!>SE_hZ-GAGx zkVQ;VOM&eXL(UR*K>h?t0)w$_k6DZzER9{c34~S)sf`hMDs(WVpJ^ZwB(&WPCcp-E zuB7=|{dO;*<&s@oeEXUq^7cY=_oWv`gTKADiU{(FM6)oP72IGc@RG4{M*;am{9g0G z2@yO475$C%^$oW5^};IIl54Al(fVuFPaI!xVN*`2R!;KRrg=PFASQfzORlh$$S$oG z^7(45Dfvd^i8MNm>h9I!RRkBgy?Sj|gtpcjcK8EYGW`h})lT)s)k~G_E%##bXfn|< zumTg{UJU(l5@}v(w^wzRxVKiEF_FMH3%22_%Z!#FS)JR2Kk z$t4#*U@-V>5fuR1AHKqW_oXi_(e^KT|6AYsZ0t(4P*}~S&3@|2vtZIY^YG#Rr zV!$@Xxbj^dQB={_p=4k9Q$|u=1PTeQRzT`91IzIPB#HGW!L9L*Ma#JqU2FO$nvSBm zhMFO_6Vbwh(g1b7(QF);jlD~knr7@(_uktg(R^^>%U^z$WOk`N=>|eg>)B8m^ObHx z)C@cu%ffJPZ$%^hG}8EAB8}3EI$nZtGrfl>NK@V5v`(B3xUcg70)av!nPr6jN?aNyq+I4HzM{pQn*?r z7pAhmt2FP`7dN)WN{NK_BPlV6Q>-AY(>TPjVsqo#D3xlpE*!sJVGTYcvHE(s2x7)x z{a^X~g+FODN(E{iUc49yx37^&*?RHCBb6_+9bqf~ip2s$mQ8V92I&4w$1C*DAIP-)lFAGuT2~u7bBFqz@yez{$KjhAe zXL-v;rh|9}P0)%B;|+{ob}PnDf}bcq7WsuC@>m1BjvMK%h``pmwh!~K#WX+Ncx`+x z{99lB>gm((E&s0ZBabLN;~zPTe9eA|ge^6FN1~M7X7eK&`eH-3bYfc^?_#t7AQ$xw z4GK=9X-eD`3IvsN##mzHzI)&fBvVca?RxFSix;22D4!39E7rxmE;((H!R0Icer^5Y z?n`EH*V+x5FYWfM96rcM?;=acuXje#5JU`RNbc@$0zQZisP;qPjdWFtvewc`1g(viKrUNPAUwg;&mNr=H# zg_1FytQy|mr_I|w1BO3=yDk4NPUn$%mL2p5AcV$_-Z#F{lO4d8P#?^W^PSFl*+Hwe zL}Hm8xy{YoS;@jwMwk2+lDMNA7QoAvSt8+f9M%}PQj9lPX#tHHuz>jLQUtGR;EC)Q zrsVqiMwU0uCgy0wCIvE+8JCu*>pmD}LT=J(fGEAak-;N2jtwb_N`X8k8Lw?sk8XyR zh+lm!oTQ^gx4})L2U=&1-=*#}6gvC6!Qt}q@T{&Cc^Gbd3*7jiBh9ae`(A0#NAa-x z5*X&0JLcghTovn3HJW))iVm7F$xNFv0TdKomBpaw1mf(vbmN4VrdlB^MV7Xrs0ce^M^>!# z#@5yeFNw8g;Fu+)E3&bRlqy6sJ<0x_yB@AqS5#Pr$mU^;QbFsHtM!bnT8!4HI@Umf zaj$AAt%y3Qih_CRMs@GnRsqi+n zd0MF_eFR6MvMde^1ta|#+KZZ!aZx@DBw4{rdoH#t_$b_U{#PDDU0ARI! z!YdX^X>kmVN2KbbpAi^Gl5ugRDmBK#iW>XuCzTfCk7%*aYAyEt*d#xW^!x&C#M`jbq~0TEnEV(-VWi$8#t*q)*l7=9r%6@i1{(Q6 z?6e2B=;BT7m`+A18lQ8aUq5HO+eLYOx8UfLwX$QF=N?fFD10A&?&0x6k}8Sw6Mx^w zGU=p&|st_ zx2_)YV|>9W`4X?G^Hk~!g0!Iu#mK1le8Hx`TtBXrB#pOm@nXZ$f0A29GSDT0*bT&4 zKvKoJL;lVXEWdN{$xaR^sl9Z52!4z(n-WNU!nicNkjOis-BFy^{Lyc1OC86tRwUi4 zNrcYgFQvPrXe3EkCE!83UddU(XUcu=7=d%~$xaTSM3ucP7DpfB3zGX09t(C(*ZYOZ zP7d&XLHS(i6a^odtndw^0H4K-5I^E5lt+-R3_*SX>Y9wt!3!@O#E%_|Tl&wz3&HH^ z{jUc3$pWpb?`8*-pOV~`y6v-I84%EtM+fPxR}0ERD%;~YwujUyJjxx2x8e2NL5}O^ z@HTA1={al<>7nv^I6a5$ku%_QmxGMYDMmIw=P>!Z;bGpWRfzd+;b`5lI)GDEG#RRZ zN6N;c7<9~b_(38X@@?^x2ZPJ?ix=y$jSUP< zS+a#PTN#5sUCS>t6UUAvnlI20iHJhzSn~xD04jauYp75?gKLeXb`=nuezhMIxPcDS z5pAyaM^exch;ld7)ES9Lpp*dS2?sg(5K{DGd=gvq3IED=o+N6VGUylOouOl}GypEE*BGP3G&Qfvt_GuaINrOtpLeP{rTGQ7{z zko7(GQ%8?)*2?tjlnXLTk63=uWlnKSgzyo?i=$d3Ey6)95OrTX0E-{}92RJ30=Cz) z^q)vdakn5)z82nkE!@3r=&HGU;3ZHVg}pUpX;UsdF=2^>u)~BKvb6rwf-GF17$M^_ z!Gs4gF8wFuFG66cI-y*=$`3?#s9fDIOGU6MOa-Yc1DSW|_zs!Jrd=lIaY|v3(Vj~B zsYc8QWY;(IQME?(}~>)bzOQy{2lDLwRb0=fV7FMa9j554Z8hhG2CL$7(@ zf!91#J^z<=bY)7oAhos5-BmAFJ0sK17=_l=nDLaEvUY4Ml^T&gGD`ho%tA~dIPba; zG$8#c6Qja5Nktc~J{4!L;T}=8B#te}FO~}cvp`Tk6{jOphIUM z=!J6@7wU3C%hG?k6;VSf^9%NMhunGM!jNWwg4NOjJySx^SkPo4k&_y4hoXaacSO&I zV1Rn1p`nZG#shRCRu96Xdhna#{Ai*cz5!I%(ZOlcug99>;Fu~djE-bz0FE7 zy|R)fM=xd@Ry-BAI<;Lo&kq1qC9NxDoKVfk!nsIqufwEb=hAU-9rtPnv@ADdJ`rUn z@abw}3Q>H(Vo?2K>ekoVOs}L5_73*X?@KGb-hk@XfqncqMX8cFMn=(QrIE}h8|Rb9 zwcd9tpAB7jKI$#!HHGA<vn?XUx^S%&O>IS zUY#6;U6VR3+uXJEwAvY1?r2yt&CC32x%X~Spl?aCh&BDgX*s=ZRXU<6Iu!*EuSZel zaqh`OF&^|NYjk|EB$ts|F1VNAScGhP4>N`lV-%%TM>seVB+XKGKo2r#6}74U>nIJ2 z#&FK9{zyq$ShO|0M7xn_#LjY-P+*)M?~^=l1ky39*XmhWV_)X53|U{qD2Ar-dHJ?h z8K2{XQIsLDYF(CZ7v}e^5^ZMi$ygbrDSPbSVIGkeyHTYeuDM zfQ&&RipUYgq1MIghP6bxp?#6qim8K(v~R8BGINAodzX zjyr3ZAKl?Ei^V7T^Mv{`vcN;}I}S&;I$cU7NJ)*;TnaunV#4S8A{-|N2I9deMqY|0 zvGr;zo=Jf&0U`;RXes@if|0bwbG{nROz@o2dGA3lMw0O61S82N$9sa2)FFwa6$i^)qSC|Tt$NfWfmEasd%=N%ln)5-AUyu)ML4A20$s$~X~St-Q`g({4Yk;0nL zcM8G|*G;-3L@GQk?W8+I{ed)eLlWf#?tcoL(_SfI5sL@SMf&0sIyjhGPAEp7j8g{A z5u_K!NkC5Aagy_z#iTP#ee&=aC2Fn&P>oTdB62cF5g7t!kOIuqlR*NAW5FP)gMEX< znq6!R{~(cQ&Ga7%=26SV05v4R3L_+Z;oPHoZZkC*B8&&dC^Z=)ir3}`2?vXRknj@t z2gw+kikBpJ`F?omVR%W#=(UUyJ|cm(n2ZtBSHlF%l^PhZ8`_$moEuJOd|l zraN$o0;G9QhYkb?8NAGN@PcSzhEL{vm%(@eQwD-rAD0ORS1{}2GpW6Y(BtMhX*^M8b&l3JC!pRgu%aN{ivA0Gyl-Eo6k+8aLXEwIGJc-L08 z`qQmUW-Dl=9x$cs34sX&x`5K>lrkv*4P-w!8d|+eawXj1JYz;oi1_rLBB9v*eepMRTr zU(?3~9{W?mJMS=G_x?wXf2+=rmM@LE#vhae?f$5=9g0g^seFDlQw63WkW5hT8r*F* z2|nQV9E>Bu()#eAN|>a=BG=h)xI0_frVfTJ6AzWPNBvGM8;d29oCt^%O3*QDIZ?Ao z`>9H$dN3^IgYG$i(3)%xteJx+&q^1wO18->EKf|26Uk&eeDV3`pKok}vQLkV-f&ZJ zu<6chH4ggNq?^(92|m9Vjwh3w4ccsUag+2Kl>d^dV8=H%u~qvA(e}1fFL6?J8FdxT zFM3UE81*Z*bZs!gYmqr|^hFZW@u^nn>Osh5914iBR2@gRPSQ96q>CGujz!}Mz8xV& zLZJ`W=vOof_CnT5E^AXBIojEZ#3BGfCXR0R1<$3~QZQbGGhV!~x8E_if`5iD7D13Jq-D#8OD_JR2eura#>P_o@4+)Ez1Nh!QdTQPQzXbnJ< z^LD3C-E%K&?JXFYR7AfByVsx*szzdb!TSO}W8+rPnWk z*ijsf;2yzg2aNFu92P(zDc={2HCn)wXvYmx54MG=yL}d4A-mHTTptj0RQW!OOsSx^ zBPE(!$Wa)u41z)UlpK(XQkmbY zQS``BfRITO5>^U>KD{#PZSwHKpI@SEz7G~UO(Mw5p>e+7 z2=PPQPt-utqXu>n`G_O(Uhz&U@s3PHnLxOt#gghL!=yG5)9h48HyxqOPDQfeh@eWS zbp_BF?(9_Js*aFlry>?1gGQukDpLt1Q!Q71jGmU2#8g)HkPFEJMJ~#8cQH#mgKqQ& zqr`@zQUq7ARQQ)|;SJ#q#zOH2{m$9wzzhUl`3M{(Q0j`9!vPWxMC&C z=JVnjLxBx3f_^V9_)viSbc&Kbv=fn8m^;{6;g=CD5W*L`*H)R5M(fJua%pnN5jjMT z2llDGUWj7bUcS;&rft%uzo4G91+Z98*UZX036m6D%sdG>h0PK*l;wh&zo*9tIvrg_ z0lM3vnv(40u*z`=my37ksT`}!nZ#wT<~eDjf(^%9FE$+ZS@}+9S{GAJP3ZDPQ0XXa z!L+0u1rT@~-0x`wAMxG4XG`~;cn?%Rjo)_GcQ2W<@A3NX?}AwJ?+09;z3aoD^W6*Q z5SpY`kDfe(rZjNeZw@eOH0y*FJM>GKQ|H!Z4l?A6ig!k(U^u1_(ADARDC<%~2n}Yo z;>tw=ci64;0wmm$h{7JM>mrd=+25l}APhw$MmS2MGSP&=$jX`thcY88t0aQ>jO=(w z;t5`Vx~mYQV!04J$H@8*k}ujEM#d#E8aiK4>H!j7=Nx&UimmarvtBF4@~fRjh0wdP zdo5n6cUG5-Ys9(0)^Xz((|CYn+(@KonsuX-lWaQUIWY%G=#fQLhpZd@68?AMKK$Xz zYAq04azj6cFdnvgm^AREN%W@=e4n5hvtI@wss;h}8mRiB20c{>3djl}D1Ch#zEOkV zJ4n7r#Q^Lj`NG15vf>)_&KbWo&6h9#_M|4@tR>n15|4!as4)Ru1SBBw+=4UNcyXK>1!G(zJvFnvq1WxW0hkLsAw= z@3h4-UO;4;*O1mYEJwn`yZIMh$y(Q1-Eg;c&C0Gwj8;cD+&fIWL$5lU5_L;YhkZDf z)<@jM{D=nueHo5J5p@@HqZ|nVyE!mHvYYrDCFfn@myaU3uUa6v63=|2S8`9O+edO; ziFGA-PI6UH(23i)F{5mYBHu|AlyGM(oQ(|JSdJUhk^nbor7)pZ#7X=#u1+WZmTc08 zYZ`%5IbAwf2{e1RyTeB>V=zu7DovwJ zGV^5U)i8}YNkA?$40s|>5|SgWK#Qt3D3|L@BT;TxE*I%eVp5a9+^=~8bH9GGz?{wn zSYeuzERy@-6RFOSERs`O^o52}4vnKz+D1Jzl_MNlMyGU)PH8CAhV5}g>HkST-I9KK zP3ZKrk2Ft6)`)W!@o6P|1DNm)o+R6Fs1Dr4JOdW<43v@(S;77h`p9~xiBotdGyf`33? z|IwS(jvows>WlAqyFT2I(u)oaW91Zo82Bd-ec|Czr~JwX#XG|-vk7m@|HYg00Xan3 zN~>kZ`ZTmPl((~xZPIEyAg<0>umYB*blk;l5J8D6d#r1%Mo8rukohh)7=F;!z8sy9 zZY(%9Y0Q!l!X9!qBu!2>Dg)3!8S z;u&W#rbjfdtm6-TAkqbCHklC=12Mn><{q~&jKaW@;*AVi9IB1#KB$ZBz##lbOCi;P zbC15YNqf|1u1_X2j9x!vw8%TJ)mmWH0}gF7!?8OFdVCGE+hBBvxFk3@8DV!L2}Wm| zPwMPQAaBD+lG$HYYLB7OrB|GE<@rG)%=-{Oj&F3?;~R}dmtwoSeORu^v-XBBIfu_SEqhclt2Sduj4&cPz-!k^8_3rY$0y~ zt5Y8;DTcu2bR19W>Io6y(ct<^M?qK(gV?E!^T5=f8q+a~^a-Q&m6CO1)~}iuq0=!4 zF$DJH*Q|e)=b!jj`-65LnzxBkdztsq4jap4=%RGKp zo=7&eic@}9_^LyVShqXxf0dQlqs(670smpB{DuYgopc0zyVt(EQ;qEH*mv|M(xNeA z<1Gi8WFrIQ;#GYF=G}wo$<7Icum9NGOZ0lS@{LS~KvnYqy?G1mQ>wk?ZE|A?n%MtWjneg<9qQO540 zNa?2;JJ-g1(6KR}U@U(X-R#CsNZHhiOmSA zjuR|9==Yj}#-%sG=F(gFh_WM--rJb5Jk{OYH)nVrgzr2a?#-E>S9Z^T?O<@FirD`Z=v@T6-%R+CzYXiybZelR#tsD?*^A3--iMg2xj2gS) z?IYBvV0B*7e#(Scp3<8a%d>f{6Lim2tGVY&Cd+;)*dTpou|fKW;14gh zNuOD4lRmT9CVghHO?uDWn7dPR)JJOG$b0u=Gj_MnBpu_0VdXGqm*V7#gobzf%u*U_ z06j5pn@as_Xt=b<&Mdtab2mC~ZB7h@8lb%gWH~q+28pwk&n&V+K?@wv25rt36`Mkb zbXoUEBSW^N{Blnh4nyFDmMR2ZWT`&0*iwDwW|r#XXvfD5lX!ye4e&UY>f>m`Qy!JI zoJVC<4)D%;lv5x`BjH5((bXr)~AgTw#m_BTU#tjEgFqbYaOxA zp85+=n;qLktv2_seC_yqT%+?lps*>xijTo*|}zOc*1kdwL4uGGbN19MkJj5vd{eWv zW|&bHT;-Fqyhk;Bt5ctH8I7BU0}$DyCg6iuuRnuLAvnzcl6momuwLIs#@PGF82d@) z#rKghCcYPX*U?QhZu}Qyj1}Liy^>M@P>d|U>0R%9{PD-%Zu|)a!CU5i=J%PemkI%? z5%}ehppB2uF)SbEM>XdwzggE26yL6WnjHChzH^_sX|5W7V!e~?U2j@89+7MOlBK>+ z640mA*Kt~xPn}%DR#T2#r5^mh7;(Lw6o@5d9k-iws8S^}QWDaw?eEf~8sCDXvYZsC zC1ot{(%v0~p`4`#uW0F%jq#^G=ou%D7sNh9Q^>iQ`Sh|#T}aTb)OK8OmoS}emiUMO zu>oQP;YhM@Y;((8&(o!1R5>o-OBdJ+ceLCPWoYfN=S)W zUX??k5LG+vM!g9pNgFr<==Mua7SMS7DRnR_hjMX+0j3!a3q8g$lFX$5(vT5dd}=vV z;z*HjGLuj7mq39ugNDt5>Bf4Zw_~_1GT=p@@eibL=Sq+lS8M>L(E0h^sEMENU|qjiu5#Uf7GD zKn|7qlw3L;kENED0I1K<3#GE?3GTc@17cwi%&q0w3mLTH7d;t1`Z5D~d_1n(-RrUlzS09oj^%1WKSd z(f?;fBe)C?BqCd_T;HwIeux;@FNNjcG3O1)c{v;_qP!|-FNDazXs=wqas#VupFTX4 z7dKSY$LJ#)wd>*S zJHzLn-`|If)kYh=bX4?>L@1%_*rX%zodPY?>jS@(WYAVunCLV|s#7ZlWpWJeEUj;! zK7H3+BVfTcW4%`2MC}-*yxFH@JGZ*q7za+AKDoVah|;0el_U{3PtBci0`5-nALssKW<8hOPBpR-!+~jQd_@ z+8@Q{`Y~*-_fdWK!!py_lYEZS<_PDxBtH{b(7Dfz>o>Gje{rEI@lFMi+H^mi_i>jRNV)QM)hY>Ul3yt z-7NE399-;Xx2&^13Sw==3P_$0@tg?FKYTVru0Mg1H9g$<}$L`ol7_}E(c%f#bfrB}+O1Z7dbihH}Ut2EU zqYuKs5fmTu6s=}ZK*E+`&EvrG!_;{F^kcdX0FhO5jm2)0+I!U ze}@CH9@QcxCI+rh(39fgy5jX0NC)qu$K`bN3+>eV<)f-+2HYj>HBcUk%@lI0dbJV8 zACifO>&<~-=LCCiZ-1{+Z3gLpxmVeckDAp=P1<_dIh)>?-8SE#eRF8PRz#zZb_%kx zBWkm@Y|}lBo^HT6C&()4kDdsROtLiK40#bv_su0R^SbR((7ktCXpt%*2xUTP$@ zFm4=iRJXoInOb<|-efVR6}J}Cq)nJC7Oh^@qItwM6SY(Z?L?+PPggC8hL*(BbCMWN zf%t9;?+LQCY;)q6@`>YKZHH>=gr@k6Om121$1FuIIgMgC#z6m{jKopJ@u{d{cj0!lYp~n1PzS=~M-_`> z&w)xss7Y#X!3RiNJe3_PKt5}SZeeHRklA~S9M(14q%V05n=N^B-G`t60KRuryIc#R+Wz^%|QBTi~ zxC&BuM!RUVOVQ~lC;g*4$+dbjC^8d+!-|oex0FSj4yv`_ ztz|LH9rOPw)~+n09K=GkAUzkRQP<#L@TB_a34jqg4qRcUa&DRksU0Q#mPMwB0tBXO zwYC>6*1-yh!P0*Q^a@v)V}d;f^qBl1$}GcxVI#j~NYxAM4Z3K8AcU8o-2=P`yWNhk zh8gu&DQiL=r#nZzHjp{t(d1OxxZpf)53ka);FBfAAa7y5)Z9d^)hL`}uv>Pvuu~@4 zTEC&;Y-MR#{!KBu1YJ0wGa&_3&8qg~51_HiO7KeN23GuQxkHd!1Z`Apj?yj$80nG= zsUVWcfI8SM?xC(^2H=H~i?AS)Y3#Yd*kVCgAhC!C%4>@33i!vH9V_foE{25CT}|q< zVMW}SrtXJnm`qRkoQ$Q6I7W~vT4K!0YihuW9Qk(RGikR3zfd-)rwlsAyqIFF4bNbw zWsIYqL7vE`ceeE6|GEeyk0PIsEtJn$ahywz1hr3XGqa`4i}M0n#A070p!yUZ0hPJY zFQLV>>~aYs_$0cev93`ce*66zUtEs&n!E`lP18k`REL_!~927TCB{hV1agG$e!$GsAI zk3-Tqft<@$F03j|FZVSgq^lh}z_Nk1+-kSRE`Lp>__Lmbm*2Tr!i$#T z<3^BKRo6P5gd5)o_kmEQ0N3T9<)HK|=Xk#3a7=oZThg{ar-=K8UpcJmdQz z?B$$Lm} z{Mq9lc-Z*!4}Iay#=qzNs{>E|{%arAM}rgb244Mn-~*5U*<19{<5M5H>$JLm*55of zn|>UAv*?xA`iH2cX`Z%CIwqqc@~fHZu2fdj%Z@?~knnaD!bI2z^dqBTt5dooMwMH_ z5a5Ui-XV!BHFpX98DY@tB^;ROM_LEHfphgq){A>R{wl|^_v%&qIQgK4M6M|}mz3&& z5wRL=V{5B>Kq=G65br@SpF16kRV99HkWjkWXnZHE5oBP8B#g*=k0k75di=n)+l1o$7 zFQ5}GGG2_!7xrqU#9+JMtQhM&ess7WCbK6Jqi0%LU?ui0T*fIu3QZ|d>*KkvG<(*K zUa0kjrI6~eY=lW0waC#8kz+jg&=;1vyd)GzF0nNjkWkFq$cO$Q4r1_l-0$}JHQd3; z82W`TfV-{tj05;U*+rWUP7oyRTJ?<&4pjEWxId8d_Q;8?KfOc;*LRSr@GUldK^eUK0a983VL z-wh6_5DeUNx4H}j(*N~4O)z(t&`;gP-S%K#T02YVf(?iPa@Pe%g0YY~It3gN9O9~M zweRltSw*l(Rg(f7U>TsnBqTnk4-E~2D0bruOHotWMc}&+x5whkjK)HJMvgQDXaBg} z53!es1-p|JH8h*UP$UMz1n3c=QNPXZ7Ku=yA)g$?n*c`8c|Mi+kXm289nB%Oq6m~rxiVJ(u3F%dNLeVVpXz< zNVGz|8?C{UX1`X(IW^@=5nVQ6%4L@W2cvE*gi6!wx9l=opE-rD8-&D!)5wojzI)9p zFpF)b?3$3ARq$Sd{-6bIc-( zQaq&JrbW5FhG)s$cwYJEE-}_@qtmOywyDUhRk@akB=C#0eQZ)aP{u@pzcHmNG{LE z4W8whKjH`cixAT85)#^xkNEMUtbNx|E%QsFbY!-Y|LQNAbSV^M;WX<-?TzVhGiOh_ zhUe|ccsL#y)CYm@*q)SHOl41^RZgH)#GfjNr;`+UVJ3%>fLNMk zpzJ*3DCedO$%J9jv&@p7WfXx~x(SbzCw!4#$QR{VR(N`6miqWyXX%ulrBQm8K2AjhRj^c%O4w7i_dS^jMn4Z>u#NDwPM)(#E+Vw^~mQ0d5gYT&wO(m1DSenxy_JN#D9S9|qvBB|jZcf@hAb4MI6wmZjn&KrOXsz6lt*xyi zIhrE351N=JQKC(WxFB{%qtP&$vE3eI(y8=XVXaWTdiB~>&SM-W5LxH-wOYNg#)p~J zLZNxk?$S+R5D(DY#CS_ea# z3QK#76KxXnY$9Ovi9!=orvla*x1p}MMxPM5sdDkm0$n79Xi=nB8ZfmnnkN09h~1NZ z1$Jz`9!*IDBP(hgXQc3drc%+U#pFhZqk7dAyNwgHB}hCNbjxQJxwhPIaTawpH#30j z1UeoQR+GDMPIZC?5XwlSfQM7+8{K+bk2O8(LH>ot}%2iLLoqNJ(}S5`97c7K?rqXp)`{NDkJ&4JHhe+9-?$hof016#;`Ee6`S-c zk(=_^CqIGadN20L`>{`clr`{d%;=vnM@X0KNd)(GqM-P9Ymb-okW_0amE0xYapo4+ zNI6DJvksXq9cj!a^Zktf>zFL*Xb>+sh!Rn8HJa-kBHAwsRMe&DQu*yMTaM6TF4as> z;AaO$2yDk|z8t~o93^6{rnHx$_@L@FVL?8ikGPJGa<1NM^7Q+F9G zljYwXlzHZt(bze@t&9~J2rlGoy!4tr+n|oHcr{t50xlxlKkx=NC499lJ4YmtQobsi zw6U8pi=;`aZ@m4kwheRKjr6EM9GjLkXC7_XHs~MW$hgxPoAV~pAA4MG&)m%AHd%MM zHLGu89{(}s@wdSJdbxydm}TXaLs)p_5Y|-%tHN4yEW3IbyRII_s&X#huua(1%bq?| zaxYu@5Xx`GjZg2~gaMzpN3j7J?;r+=&tk$0$|X<7HLsh#e2?Y`IEuBsk1hNMYJa}u zf%u+MGe>?QQ{)#i!*n(F3uwDvK->LmwA}|6XuF?B+kF&zuakwSy8XSw5%^ncyL;~u zWyC`XZ6(o5ScN~bM_&2YXRD(1$#G?)Hy`<_c8?^V9;v%@I+)di_t;i&*i~AR?svlM ziRiEmW&r{*rxYjmp|9)wmK%{9Q+MQ1lEu3vifvrIUa4Ha3fK^tV|%rFZ7-3_C73PR zO|R0thkQX2&dKs0c3YKdKMZmfT?$*3UPQm}DpBK%ZNUnbt*ZFJ(?lX{JD!sg^>i*N zPo7BTrHF4Szj&<(vrbBE(*)Vc%Iu1>K}wv%J2Al&kT*2m+@TZ`y@{JIw8#eYFD37- zH^{JW)`B+XYa}Qo0nF9R%S_bqK9ev%NdQ69X(=o{%fR^;o1_{tleZ7XPpsH-Q{A>) z*c{VlMBQT0+@Y=Kj(m@wmuV%6>lSjV>Byz3Lus98s2Gl4Y%3&i3r-|H5{j^fBk&n8 zPlDr8n*F}apVRmYh@uf5k>qtil6sPDhM7C3v30Q|kEa=G!uN{3#D?PTysO*dy<%_~ ztQz78f%EJSqZq_JkfvlJiRbxsQ0X{Buv; zOwH@{n)C$xm*{~HvR?bg==q;P?gbh81t}we@hN~Z7@%I4ntOsxsJU|-ApTp$< zlJh#wPsDicGq+vl{oH46x6byX$w8V)*in*<)3!h}u} zP{Q#DCr7I}Q$QY>0V6s&S3AD&y8p@B5n-XTqP2SIymMq)EIqh^|E|AX9qJyb|EjfT z>`bD`!gnbpbMWq!1n59|Vir)MU=GN4rseZy#aDUmt2vLN+8vOiGnLjbu{^9*S{-BS zuF$Bq*XjpPrmBLD1*#@!nh`O-3s&=yCfKy8N@RT-V zq0wG@5V46d^{bUmz>>Nu=~i_8n^!u6R=;$2Z~vu(Zu9zF)jNr9vzSW{^`*ERE1(w_ zn;@CSIH(6B*b3wqN^M@FOAI!t427P3qd%P1&1$fvb&BH;EsM|7A=uqKMeIuwnyKSW zu&K;4KrF|Z6@OxFd?1mh*!BN#zD;)a(CF>|9aR?3OZ_|&F+poma82`-^9sBk%%;ia zx!`l3SzI>H{)IqJ>|coF#Qud)PV8TZ<;4DlU{35`h~~upg>X)9eq_p#aH6{@-g9^p zlUx2zq>xv_ys}4q5<3$lv>1YE2594eDK-+OQdq*0L4xVTA#VW!1)9Ve+?nET!TCjA zK7dwuk7xu7GgBQX&Lh$bZwe5l&OxhyU>hYB#rtK^tFqS@Qz?eAq@XHCZ7J}?T4Ku@ zu>>8%eb7*^J_H+TTCFcDF1>L}&Q?AX3kQ0w06Kvl1tK}Ln~#Qxby09gqXLwU+2H1- zoYOR}bcdbFOnLRI4?&ocNSLnbcdzOz=!d2YEBe{Lu%w^;3(=?8zYu;(t>k~5x$rl* z?_bBl`!sXmrA$kWv-It8B?1e!wx(c z0Od1@IL#UZmQ4;CVSN(P5MyedWyJ>S7OOnZM1$>{&ntugJd(18qk=A7r%aooem0F! z!YNa^rT(DXjKq?OE4wrwsO>3WI=xb3spf$axOg%Aia2<8M`?_m%cT>C@>{EILx&Oa*IOEdx8z z=e9;6JJ6?JCq*wnp88gP9xwxv2r?PLGq}FrD=lMgcCLK$rR&YE;OFU>axhdrjV4zb zohtE8TBeqG+`j;vV4G}4V*3YKK|WB)8LR@Sg0rn*|Avc#KsSVSaoN^Mo?$U-(Lh2L zev<{ELN?h{nwh{sEC!U`9ycco*I@hnfB3uSyQ2YbV z)m%zt$@)$mqV?8kloPRMR-8b5NjQ#Ad6ZBlGrHCXqOL9) zO4f7?l9H8}2crRf0|KBbLAA`05SOMYSh$Ritn>(*Q=;wxu!Fc@*jXk*46jlH)c~S4 zXnWxtJbr914%wnO`y3A0HiIhvZtdA2yi;Eo$L=pH|zDGkdbHa#i;dF=A$+u)taCC*7vY1(&c7iy3S`~P%=Xx6}bC3 z#?8GSTxL1ngxY)b!4|uS&yt&zFR#a zRnEFRl!QISQ;}AKlArNPSOKdu?Br*B#w5Rm#`t9!8o#SSkITxOPXXf{wp^KW9*`b5 zi1rOnAIWpSI&mO;Y?4-Id>oH6Nn ztT}?C9gdJF4*ZmGxIuFQomh3ouI2*Jj=fx4&_OC$6&?9GaNcEc##09!xl3Qf~BX9)I0U!J(Bc z=f#FT0;ep(hMrP4>Y*zBI5#91ol-J7rQ#emw4ZWGKgF#QGe0t{Px|N*`(G( zW>@AW=egV|Zk6WetUV+H!S8!t?c-^e2uXNG&;;pYdM^K5x7Lk}NMht!=fqAD02|;2 z)DPyR@Ao{?_xqE%?y#Q8?p!B5&Q8I9lCek!awRz)-bwm-23TA#uS|}1cqHlPkEEYB zNJyLGi|jlS4~HcW?9C?w=rT11+qMPyM7KOwIsNp_wTl9Dq+ zg2ht3$X*rP1z$&#Z%L{}ro{W9{!OG>yGKbqPt?(Dc`Q&G@aI731(buU4`REtb^lRl{~Mq2ej zH}dj`wSY9}#}M{WD$A8?!8?%_JtLpqm;8qUkPU2z>FgAGWZicN`A?^z#mh++LoU9PLWCpHGs0 z9zlHO_#->d7uk7!px?TO59}%Zr({RGWnHm=Ou)@9AW?oHd9ZH0r_iLyEg(s50VyUH zuAmG4_gJ`sy8AyZn7QB2SpOU|_axik2b_!EdQE!jB;H91*3Gc36vF$(!&4>43W?nx@hLjz`kum6Z>J&Xo|I+bX(c#Gx4oispbh4?J9u;vyNS}y- zsb#eH_ULUYIdOD5@|n>mu6IV#Eg_OG6v&a1lo3lZJi}h&8V85DbA}mI5=ywt_<*^t zkB(po6S7A=gpK6f`1Pqxv#h`dgb??iB6BI3mdJ*J8y4=}aWtNrnJzis!LGHoLs1NhVyPqF>O@uix&FJmy}XY+m}kM)77z2?tTG+2sSBAWSaFPiO}Y)#AowXq9aoC>TgSG$~O~~^_vJv`CF5Xr@uvUc!F|e zHDN4f+*zjeL8~0O8N+TKy9Kizy9JZZFlTy}IVUs0zk=633a|a|%mg1=FcW+L-h0YB z6a1swo(W!YKcOl(YRXfNX)9-t{j-ZZD@1m52ahn_dB#Sk-6xTo3@PwO2tC@-IXIVC zA{Gq=$=W1VPdoBKtJ#uNG?r#er)1^K8jj=!iL}d=<*wAGZbV)wtB^mQ8RNcIEJItD zL{d`Y$(+jM(!gU$6a$GT|ERiG_bwyvt2Y6|!j%`GB{fhCqX6HH^9~%?QN$t^eBhf! z&In8zntESA1Ve#-dpH0Bo^Tz2AGV!Z4l=0-&RjTZVQ`3HIx`onfs`-7@3g;Q_(Mar=q8CHWexV*3Y3GcF+!I znTh^6GtqyGHuxE|0X>UuPqYse>7-wzeWJW}xG3L!*X@h&UAHg3ciq0|e#cU)Dk;7r zK`nnfqWScmqPi9Wsj=ZpVxE)zJOhytu898}dvN4$n-wUrxhW*=^ z34eIOO!yvnU+PUJYofO?GV<@%Ya(qXAed^Ko%TrDjV4CDV5HL=mQph-pd+C61l^z6 z2@P+ads6;-r>@mNthE!!k*v(Q6J*?r<~h#InT#&E(qF^%VqM{<+PdaJI2w{BJNspxk~=JoJAzj z$5n(ayxdgsm3nCRi#w#6d*--imRXp7iM6_4lD|{pt{g(x6_=p$*F#kNGyW54g60kebe5UU`}PtMMwKj z8J~w2%-wV7Xm`uF@$c4ix2}s5%bmr7`iCvA{uNic%|5W!bL-MoI%u1UPVk(+TzdE=&>QJ!Olr|0Mo zIGXz;9!eFn^Hj<$ppXlG?V(OFJxdj!k-h9AGQcxTlJ696Fddx7_7M%oSfH z>w`rTFw_-sX&7lI^K#T%AnhR|NO8f;bgZP^J<*)B19)p?7D{^? zU^r_*^Uv?5wEI{IY4@`b((Y#+CG9?zLE8Q7qF`>ltWrF3GcG~eZ^juS?S5tuY4_7# zOS?P3VjYNHM%w47gtX65$VIQw-&eJlNc#*`koFmBESC01UWU0{CYwcbyOQa7X{VgO z(Q9{V3=S0Ndm`dmW;9 zqgly6nxNv`@~#JKHOSOHMjDyGIMGwd_pJZoLpY7VA{^eBe%N*9Y~4ksIv= zRzi}k=*ieO9?ZlGwq1y4PFKHLJpf$p>cK5l!-HE#s9g^oRP9XX;w7TAgWItG19tyX z$-dOL<7E1TkCZ}3!V8r}wsT`VzHwt*KcEy!(#w&SucT_zbDY|2WIJP++ zv_nw|wwf~kF< z7qjc~Vm6&Si^HDFi&=AdFJ* ziMoP4ycW&c3!07gI!eX)wb(=tX}tt%+**s_tJJDbl%CRlxAtP>Lk8vOsnjrLH=7Y2 z?trrX1)xa5RBUji6u8p2OOdrmr``&!{e5UL&!~F%RcSG;pOmhGNoTcKTeCFjMWW?q ztRbbv{HLDLVp=;zMN`4H^I9yenLHX&dhTV_VxIe)XtBlYy1bZ8l@{}!#nobqS#xd(Q$}O!6Ook{N1Zi;>HDo3@ym*EyD3RF6HQ#5NM-h#Me@z-8s|{Q)d-hhPleU%jh2z9|G(_L36vz~UEmoJ z8Ikv$b$4}lRbOgZS4%!xvN3Jh9@`kRW<0}b4twz!8I}hFv%EF%9+{Qh_F%bbVdDed zfW-p_V{F;OcxGV+k6;!scz3{HSbQP1r0!N9)m2$}-?_j47ZF(znNf$_7W3XdM^+w{ z8SzEL_dmb?nO>PCs&43GVX>Jc+5d@Dk_wq8sCE*MW#;zeVfR%klH7me>eULBhM&Gf z$Jq6~nOHHpzSSOt4jxaXN;Jl$ID#Imi{-;%G`p-`t%fN#`P3FMkH#8z`#dh;4lKb> z1;D@z#o51%GrFTeX?8H8^}5lXU|~xngP@)ngi}m;W>!~ZP}y97DXj2TWHVy@Vd;P# zPgyO3JGF3Piixd|^G~S|j0&BK^eGM~uK6E5%GjrOQ^stMjr2bgZR|~GV-KK>x&A`c z>T?=#X95v+CJ<3wRm{C#7eQx(k#jZ}F}*msvYd*W+s?U$yeYg; zIFXyi393E^;)7$i55fh71BD~!(q+tPn}B=U0dJG zQA}l%a9ZhoL&-o%F1bMbEVjZvsUQR5nCVVTB{1oT8>Uj3iae&E2zx|mf65jrts1&& zgDvAZ!^t_M61h7ptzFNg_3D*Pjq)#cQ4CJlY&ULRs}dSbUyw+=FpsH!ls-@xb!b6D zClIaU)K=$Qh2@p(%E~eg`AB|HwJ^Hf!G$y8BTnYh5hA5%!|rIYkSw=0wH$&j=05zAqQlzKD$?iR6iQIbaprOqTnr5E<4ipa33qoq=4 zDMU|6GrTvy{(X>jy6)zu`Sy8a#6S|v=}N4z=#TVKW24&1pwovjvl*0-Gj)uyVO@UW zM=Uo)D{q&#rQ(aUp_5YFr1*lT!wWIxt6@wE2a%ygBGXz#AV4L~A(b_#f$o}s7;sct zWkroLI@#2Yk;bD6$^mG4G0~hx5eM@vP>d%TnQ!`oUbDd-dWXg>E^!EVmxg!P{+iWF zmT+}y14%g-DNw|{T~JQ4E;Xp6rYfzw`=v9~Sw-2=$P5#tq3V$$jtEtbq++|KZ;xjW zC+Co9a)-U3J^ntAfO!17+c@uUxz`Y30}@N;*AfkeXAyF7eRb<-z=hM7Z+2)YjI$ivuT5 z&b>%mDRy4%)zINow6JjVYK>INP}Cdi>SmK4Zp*LEGpJI8td^)0q0XT+Z+{$h?o|(d z)2m;;5oxl_HJ<1=Ysw6Rw(b*C{RuO*U@i0P>n!E#JOba|#tEk143czplC)b@J7ji!DBST6B| z<7nz23@rpiJB@7^ckNsAUq0ZjT+#NR_zCVLx_uk9 z-b_Z5Q{0K~#=lQ6^RZ>zq5!|Ks1h+)2BGnsp>_qgzL<=$L&}c}E(Uq=AU6&FoIu$RcdFp1NwVP`-G*~9 z?1C4~LDlt>{cJpwVAAXqD6&&vpq`@|oWpDoq$j4HLhZgOA8Q3--F+#%RJ6IEOf0Dz zCcgKvRC*)3$Q&=hBEd5><-WL~VTW60!9zK#YGrU_ z;3e3Fc{#T;jSkV;AfqoKKJ29(uWh2VesGrX_B^la&RE!hd%`Bg}rJb>Vtb`65g3fI8VU$`~*m8OgcIF z#q`9)%Sn8bF1cN@0X2srCng$-^i8m$$k(hy(QNEo>o+oE4=`hs{XirdMslt1aQcB{ zGsiiL_rc1RSfG+Nn#$lR>La~m=p*g5!#^JVjP@@575Xc*ca45#_{X;HqpXUqh-Hyo zNOtSt*j($ntF}ubav>S6cli##3vKM{T29iFRVtV=xw@&7($YvC^CoQ)qBHHWnr`9? zqPSFl-t6|ne7{|Wj+!R&lk5DDb-q{LazP8pe%;ipWRF6X+r{X_oUo8I>wS{>>Xwg$ z`N?jSE4Stt3n+mU57DAo_cvpO|UQrT#zTB*7jWXm)U9oWAOn%R{6)})szB}Ak;-fwBfniSYvL-$uN z`kJP5Uud}F@AWmNeRy`fYZCt_*6}bk*(vet?3`f`lKPx4*`cgf3`gKXl6CefXzEUA zN;FYc3{H?am|?G2jZkJ1;WLxS?m5O`NSR3l&rBk=t7T6h^h_W!&jcc}%>}oS*oVMg z+(n5H!5aYgnLwEHZ2-LOD|R6*qDR4cCJ@Fmfv~mL1#hCm(TACRsg&|gX8)I2uiZ@q z_T7lnA6<#@9-+6N$yC!`|n;e`qt5L9vQlY^DsXBz}p_w z{*(5VM?U%>-+rs{?>_s6*Vucb7JP-re=^?oz^7kr?>)+ljz416Tm4pVSehpX43e3d zna@^kQmY7T)hL-34wY^jG%AqPI%Ml?5Tvu=#W85!N0VYOyPT-^TMKFsas?@E)@yI& z!XsLHNavw?{icjUM~KpD$Q`NMbw{G`;-YJGi}{h_Kg1ivteV zY7r8TXqb^Wd>AKVuMwkCQKMrvI&{A6Qmsaf&*|J#ab6Kx>Sg-^vJ`N-)*nixrK1O* zsWckxQej9#-+?rN7{ri}==?l|f6`g)_62<29#z4?0i zqXj9V*e9J9Zy;_o+F5i5-A6uJuxP0e;ujz)E?s^xExx8uBJK8CZRsEb6QOmLW$-m9 zK_?b`a@41a(klTeHhhF)G3fG4ERLLrGu3?K-Jn@Y_n$)m&CnMWryv$p0R)AnI7z2n z;x-BhEQJp88jHr_5iUjq)W}fX9@s_yXrZupKi&yVs?FFQ-wDZ6wh3g|LNyr`wTq0&BFRaY`^DE)9K9 z%7(%25Dv-_(eQM`>5Z1bb0IQHe@XktHdU0R>~S~@Aw_Xuhos|izdHa)Mm^^`9K_>- z3*-D~VbH17YIF&~K^vo?WIjVTG(iH37EktwIo5T$goqZ^K}9ur+;yk`e3!rFv2g1#3NcUqOEAJgCD*Q<>7Uj zhV9BCCLqRVlP7LyVN(SUn}S)~Y}Na)sIbGL%F%81Be(|pp#f;W-WszWEmU3=R^h}f zD24&SACB}BunQHxu(EQvyed4x4neRv1^lCy=ttlac639pQC__!?QrZATSfU$Z-vBc z>CvW0zp`0gJw_+rb9%HG zLc{rO8iv3(Dt#KI*_~I~o8@0Z71Q)zyrAi4wb3sM8p47UA}Uk_k>Ui(;i3;4f{JA6 zMg{u>|Cm!71H1i!5f)`mFwiJz!}6*$w$vO%qH+8dh_E#<=v~eo3My49Wxars zY>icPCpU{k8_{+=%jryFsd2@-n9f|`8}CwjrVv#7D6p(aVAE{7bdBFp7e>*>$mpr; zZaKR5^HA8GG#+l+<{@Z$$X2$zRF0a^ee+UIYC`Mvl#do3>9ubybZgRDm)72s7On+p z*C)T-vW?5FZgLV_lJ&DxH#sfUO%xm*y*1&5f5HoQXFmtt2`{V@UN|QcUKsnzn)u2P z#ba__8SoQ z6c<({@Dyb&Fx0$^f`<{v*=Y^sbUL)LEZwcf98EZ(D{%Gh11eTSwHRscK5RW{uW^OO~6iU`mb0q7+-9kwSi(j04#-cAXHM?{n`;MBi?RWF9b4^n&Q{Hn^td%8go`}5~$)4 zbG>0A%u^{}&VH&k?r|o5oE^JqRkB_atsCJro2>-V9(pNc;`M}@O#%iy`e7*Ee10Of zf?8=&&A}fSksXF6kRZ5~R(Cr7Dj(@i)8)QfY1xv=+e>R1JPGQhwGG>t2d3U$THA1p zZNpIcKRpDQ^206VhnE(nh=N-`;XIb!X456Isb*TfNlf}C(BDkUGihG)f-7{{;)$ha?DIMv? zl_I@3knqAj;f1;F!FOSu@WMIag|UqjUieBsM;}}>lkl8^<9Qc!REdXI)UIekT2@=}-bbbBY?RY>Q|dSHys9A^y@NwoQFl3)~&(_+N6G1n_4 zye_w|8)YeFe&wVPsZC3!LQ1Pm)6{QzXzI82q^SjT z%j4*l_d-)k;LY9O$;lNXA^gaNdE5i*xCh4eP7ZA29=OImFjWZPg=cyKj_C>bdEs{6 z3#xOhZWu%aW{6PfT%V8T0bwuF8=^YC_Ty8lYkcv^fmc{j9EX&g>s zY@C_Nro|{}SXhQ>X@R|%Zp(B>2$R{{!Ai`!pn3iJ^=A20GEP4PdO-|(&AL>EC;3$! zN)zREX=~(Qd7=!ie;(+K~Umuk6!$GyW z#K|OC%`h@pcQa+<`i*Ysju9=U!?SZH*+LheynMAomxRc|fz_38IC5o4b5qe)4s*j# zl~1KI*<2({`|xyzb{S#P&?2-TF)f3PG{I2QtoM4-OuE(U)oGkmFVi$evhqSWPdeDm z2mNe@&KQI~U>e`5;M3qoL?X0?OGg_t8Z>TM!RAaBUMMuEi2bZ#M|SY_VmPbk0sulShGlFiXTAt{AU5wI@OK$?tQOWB;FtSV81wU7*h+2?dGsg zFSDtR5{q#yI&4}F-3t~*dWxt>TT8#4ZlS03bt@8%T9c)5>2l*8&QIw}Oj~n= zYN=1BE-giSF}krewt@=ee!{a@dTh7Fl1=d^SS3ib{cFJ37l5%MPw3k#Sp{R&#+dVgNODfhJ?=d^=M!)u{Q^Ka z69`5zH+hDzL6{E!T|NM0W3J&=7ZezL+YVgAm+|midU%Tm%bc<&&gvA?h_)v!inB?+ zCj{CJqjq96fDHGk9zM(BEa9%1|)`>Bh@$1>tid<<3ynPWw$>a z*W8uZGo4=FQ}SQMEXZv6xx$>d5F?!_t$R*9h(Y;FUqcsf;RbhuiT63&fZPZqx(|y| ze(b@#=fxU0z!bLRrZFWqjV0-nA45`p%t-k$Vkb;EU)llqP<$YmiiIE$%}^S58az%o z$u?-x6Cg=XfMQJL-{{>coRST@gL?C*9N*~O`ic842I$-8zo+{6_CqSS20{ z`5VWD{QseMt8|T!+^6qG%XnRYzAIIUql%Jb z0{bVt=#SPn1YqChb>Re87xwbu?W%S+tv;4uT)rnI1 zBi-xa@RjhPW6}z-M6%YXY%Rsj{6cv7YIdbOAO|skVkYr0H z8%bA#v+R=IYN-DVR`7|m9Hb`Mip64Nb`5*-%^;aj|58>BH*T4`Nha@Rx9u&95A)Qi zle00s(P-$grMph8rT%eHd*+#EHd`Y+s2l%iPj)D*?o-G_ZSK3kQo&%(q+G1Xl}@{F zh$|N{BChOmY-Gj5RwNRO7{?@wV5Do!t`Unf!BX-#BxN+)t!h2gZ?rp|WBrnMPL;L(kf!_nE=7*Lc=8|Y=L)*H6!gG0%7#T=5+WpuYTYONN9W~n?M zp2@egd?K0|lB-8L(!10vsY#0eb4wRemo8nc_Q-$Zxpn=zOy7~srd0dnX<73}%16Yy zs-E^7$gBO0yvjzXBZ(32f6k{1sf~>qlafp(jeh;+RT~@n+091WLJThhl{^TQ}#FWoomsyx$R6KPCAT`IX{|6ovA%rJSO=FMd@~ppaW$lZA{9MsePyEj;Ls;1;@S zR~8%*-RaNd#xw>kWu@Sgq9Z_RGXgad1uzCyI&o|z-l^#kMK`%YIkR;IQW5gegj%{a zDi(0s?dd?*QwV4n^A751BL@|2th3_t4!%|E4*uDQ7V0bKo{eO_S&5Eus}xtbCWxig zX2(c1lUGP4_|($2{g7{im;W%l{HK864+ZFKZv~=1<<;3hmyD`)x*0(DL^}^!yTr;vVncATd!8uX%rNnv|z4|E14^9$~i>0_8Bt^ zVX|fk9%t*dX9~G=oP^R++!HssLQG7vO)LvM)HFxLcJ!KtPyIW7Om0Q)z&;J1g7m;+ z3s3z0U;p*zKmQj|2vEE4#rNMIq!1oEb?Pq6f0cIo@4xVcFW%f}OAfPSIQsHywBmty zWH4;QU??ydzIyZK=2pi}DGzShy|}crG@CcgbUGa3kY1-zTPOcD6@K2^jM@D#)SNIY zY-AoQ+H)1hLv(mIiC!V9CZuQzpmAmF#6 z9vet0V%b6_1>)MB9;J_`Y^uk|BR0vdGo?(kKJ0ZnhBcb@u>Kd1!uel!Q#fsZi)5|5 z89I71bR=sZrvj@KD+#87`JHfoekYu_t76y_Afjag*Mspq?BMzGt~f43?}FdUyW;io zuK2tUJU+h<)IDc6Lf8SxmUcm~rCpFq-M5-inNa(K2eFoSMJQTg?1D(jKKy{AE&l|V z@zY?&Pl6fCXv@oJ%g3onu}n>hpLRIx9V-c98^fvOGN3Sya;Nf0#1Dl+N1T6*Z-4Sr zQ+)Tq(GQRAFHXgqqd6EDZno<@83ds`6)(d1-1*~Fwyx=%)3ee(YDUAb*}1v7Y&1%}h6-_rganR!aqLIe zx9at+^{f4UE+6NSGq^r96kk5piQ^Pg;*2g&=AIP0u{n>t+7nnjCh=}Hb%Ruth+@VM zV#>#(+2}&5xp{N_=4Las5Vf?xK(FJ+?1@yjD)Z`)A>729QnJ|RYJ_pKiMxueTJ41W z)%Iq4onAlH5k)#4ic>5!&dNHUFZq*ClAK~Bnzr)U6%+WP4g0edPf7%%6dD+Cl29>0 zd?Bgn@_En|#2I5zT&f_mijZYOJcNVQ39Lz?9&~F&@OOwBjTRG~XP@oZpF8U(jyw0J z?p3B!ArWcGe&#+y-#!)*=$q&`Qe%U>bsZ#{;PJ<${zA7)yMhqK=);uz2iGW}GsWud z(+Tht;&N6Lc{#T?A^O;`KM0voW(2IIl6vWUX!;(JK0Yx!vWTe!O6tfzVbi8as+}$~i2FQs+;s&ESP^XxRCUUt% z)c!A=Rn`d6lD`8E@Eve~H^2dY0E+(((UQ3-S#*pk)KQP-CWzA2ismNh&{c*AI8dA7 z;A7HrsBS5M;#{ZhQUIa3RxkLipT4+E2lBL?Ui1@{m!g&?D9NkbXvKp=s-A=-)Xv$c zv1Stpb_?73b^ZWtJy2l!v^un@1J`gU;!wyMw<-&ubF6P=>VzKI9Q<@HQgHNO0A6}< z@?ZcydT`O1({1qBXR@(yX&U>+xVJQob7SRV>@)m7(7H=t#IJ)9KLAEdX5;-h81f#p z?j>YGUJFMfZ&awcAFcbg6B-1;eDEUItY!ozDStlYyHx10ASI-liYNp@^oKBY-I`+l zCoD^Ps&xAni&C+jfmfC_oXX{s0z(1{W?r#m8xPg_ZJ>ChKxrw(MnRcTkKpN=#-doK zL`%J{^=dtzYJNMl4Jcof!h_5K`24kQz1FKy*S%KjrF`juT9Fg4C8cXgih}#98qC=j z4`gl8XO%$+GtADEpG{-WqReMh37%Gi0P`V>U|lRMQm}{MdCGc(VqpmjkA+N(7Ts38 zE*dRSS;K&HLHiI@C)U^7T783P>PT)TYnN0jF=c0Y`m?D%I48SG zepM{ROESz0;&Od`O?Kt^JSBr1J4*SSF!RV_SGb7~Ja0AtZTSi*miV%CkP=8pE_#At z%HXqyv<%QAr+y|7J*183Tq1v^%w%TcU3WtAYH<4uvOrXe2lqQa(=S=91UtP!=?F#u z8jNEa>tagMj0h#JCVBsz6e$9;yW|;ky1kL~E08YPVixQMq)9&hiynRd@e8{t{EDZ) z1q%M(q2P0xroB?LSUa0&cLtWAJ;-kdvI{#p*P%Vg4YfyRY)>-Voy6Q#!SVf(R}f|0 zzJJOp-!e7nscd-<0y@7Z&72d1#O~OwFne)l%nripgcqx2rMeG{9%J&-E|`35Ul=@= zDPomZ7>P{z6^~3g%{t>SR{5U=Lx0w5$&oNodAxS?j^T%gA0E9!`;h*S{*d;e*Lwev zACDb{6QJdUFu{R&JOl-uP56X*L@0xn?5%J1O8WKdrP;YTtff-yiXL215{#6s-HPS3 z-sXBQIWsq>cB8BkT4A?7j2dRt)oVd=8B)!p{W?A`97%1+m{6#gzWK}(Pdsx|3l|O^ zIdZTNF6j#kr3~HwhF2=aj8VBl9HZ9Gd3Vt` z@4si2Jg+DJ<}d!@FaGAq`op)kda=}>{pDZ&St{0Roq5^I&QO19esODS{i*e>tyoOE z@%hhx{)RSt>eQ*(a$(|NO$L1U_Lo2Kz{~0J9Q%_$`?EiZS)IoG<`#0LQR#&#xHiv$ z<3Y+=+_n}l+lEoHttq7!JNK;K2E&lKvAMZHSH8jG!onic5bEDH7aN+n$6C z=-#|}vs<>9K+iBQb%x#^O^zR6EV+8^+Ep1ZrioG(?OHKpYm6br!bNOg3loQFGStH%IjU@ru-F$&LW9@)NGUX(!FT`)ZRO2a27qT`NO~;Qn?P=O zA%rcZUOtFkKyymkU!|g><|vv%i$b}jJR_=?sh0~Ahf(+|lY2NMN0sdn79(^I>vTp< z{AR3EIA}aTnevt6@}!^mz*rnT776F`;m*cJCt|;a^S1p-dTzW$)3t|?M-L&7-lCa2 z4Q=^=OS(4U`bpPMvME2wPLgWEORB|uM`#bq>e$pLeB_rP$F!22-_2<+qQ4?P6mQr|c9KI@p)=VV|l-;NG2E%po6uarppjv#Xp3VcPso7&gBX zX6=ko=XXY;bE;*od-)Ek3%CW;xoJ?_V9rc}*(nk*Mj9K$g&@!tf=4Rcy_SZv- zH=PGj0c#O-GAZ%WiAk1_{NOiF2kC{5Jv!o=q9d;9nH+vQP$lA;oFlHad4A5l7!Rt+ ztj*a>Ws0rvy*7z#!c&OgvFFQv6$Ez*x!uky`Lh^`LCVy;T?6GLu-w7k=z=d-ymv<%qCC5JnY(u!&3`nM`+1T$!cM z24j%Ioa_|lq*Lyd+Zf}+6fc6Hg%|Sfz8-+)1AxhQQ-E|T_PBs_fjAQgyqQ3tjn~CL z4c~YtQ22SE@S_3x$~)m3B`@DN<51V$`idB1L?o)t1bkAPtc@o$m*WY3p}H|1=h`qH zWnFKEtZ2fu>$^J4@lmbT!YtkCG<1oK8dBEV9E~Qm8L{xPahjSb9qCxhBrzgGq=L9vxF~Y~f$wHw(((lnjOSz~aQAI6Z6vXW()rr;gfI;~5 z)de{4^{GK8`&X`By@J8B#iG(m=cs0Z?Dx6}+_dkLOD1bNT0d`YQV_8fnkmdIEx3U= z{)mW``9w0AAh-`7ldSogZRPF9wiv=dil;rml6tUl<=Ly(+C6+tT&y+2asW1URnFXP_^kTWjvF&G{)LxQ z^ID3N^r$*dK-!?Yxm9cRC0z^;Ko~vBf2a({VdEh#X#dTlf<3;Q3TE@lAAm|9Lb3W` zsPv8S;DC^N#$Nb?VO^N`rV-AU`c_N0{k5y<&{(!{wKNNHoGUcwnHcqy&i#hNdu8Q2Ig zt4DAJD@g;23XYbd3P}~3Vvd>aUS8fASLb)a)$+a19X~y5*dGDg{v|TuN5HnX2gn48 z$@n2;!r1@zDn+*Y@xL8e#mFo`R?z_>!T4`N9whn}frEJ8LZ~&Rf`LbLQWmWC`;8&9 z)x_yTgNAl<*qD?95)mU!aa62DL{94A{n2$?Mk;W3jn)&sg#V={o_M0)4=;tUUJb)V zpYSelQu3R_Tt6QU;MkjyZF_M z7h^%oTp0lEa7q+Bk$K~V44H4Qznahg=(@47v-Y2|c$N3pI z8-_}W)TM2?s%@oDR#;OG3uZ={+Xcd$&9BZzF%hsa!dijo>nVlyFvd&6=+p+uZ9HTJ7tgoi{-{lGXkr(8{;27-AjR3Ge;*p77%P;?8(3R+~Wl z_TYBhgWGdE;I&-YPB^`|GcGUgjKk74YzN%k31@deRq#Vd4yv-Z9Z+j^Z?sz78>Pgi zAhbP=P98K$c+m(eVKDlPwd*&-NxunfSOy!u9c(zX62}Udo2 zPKJW|O?wxXXNldW<&D$Dq}m$1H;%?nV1RNOmNjXAQYuXBqdK8HobalR+^`l}Gq~S1 zO>S2O=rS!mmQEKUv1~Ths#IDL`z>ZiSKSXkItB)2!N3=xIZEHh`_LR0!H*sy!R~NF z2Q3>(1WU?`i5}=-3F>&hR=bv|<>kSRv#zT=;l%~o_sARy{6hl!9l^dcq|ZuwH$NOQ zlhdD>ob|xD-fen4I?s98rOvnoYtE=UFH)sv-6C!!H~NsOZkKaIvu25CZBGp5xmmCcJ^ zytsMk($g0&U3~h|rGv|`C+Q5PW|8hDa*upYi>4&sp$Da0+gzvGNMs@<+N99yW+qxh z2U^(HfrRJOwRm%Vpv`E5ubWDA^avLu6XfbX8FjJJd5{lWt6cE%gyN%Hy-|oZO(;kJ zuY~$L94$?(U57L=!;QdBp%GD-L}HFY$B)T~K1-gO5jhp-7to_U8poy-pkb#Q33nsI zL6NKcJza9|MlgQw=L%?mwx+Ke&x6S!{0tJ#lvUb{)7Mc*%M#<^-Go9@@*%V zpZMF~|M$Q8tN(t=BTG~#8ikz2d675!Y34n64HfFQkGia8Nc1uKv?)XvkYEbbqTaOk zU2Vu(r0^G^8!9Mnavft;R+r6>0S>f?gKMaSi+8O7FVU zlt3Ew7~i~nVVdMk3j=ii>|O4xW20oVXzhsk$AQ9%Q)!C@^Kt-J8$0 zFo*Z7Sf@!V#4bU?L>UdM}$L(rT6hY6KiH4@B;mlF=|6C6d`(KA-zYVtj;jRQ})*E0vGLVoYtvl&+Mf zhDzUWRBMfv77`0jWBuBraTN#UG+X|_QL@O*4lv`ee9BTaAh6|zv{s{5ZCqRDc00|F z_{zeUQCn=r0D(9pW8)<}gZf>9tFF9G8i-%9=5eP)6fcIT5^f9;rz}MLwGL0h99hY5 zf9y?g45<+8YO&*F?ZbP?b+Gj@!AyHom*IR=7vY!VDZR(+Mq;39I5ZlR57DiWY6U}4 z3W=27=CO9Bg%OJCJ$>zV;@0GdSR_hQMT^xA$JCo-+>Y6=Fmwi^K*} zHGH58fo2Q&Y|7N5RydZNUGzwMumVyU#3DU8XtPe8NA}kTE!|9I^M&lfY#QJuwsnHD zA3PFDWl3Y_I=WOUCn%2GruG2VWJOY0qR1Pyo9mCpRgn*;i}VMMN-}wu+vKopiX{(6 zkOY)X(GD_Xt#2Tky6ums`VXq_w3OhsHH}xJY5WKhX2_(e7Sus$IeY`sE zvIeAU(&EP4d-*;L!Dx%S5uA7>sxq&AKAx~@8+>=izSOp21gSn$eW#uJRVl!I^; z-5y+VxvW~v`yLLwJQkJ8JA2#rWV<>See4vnRaCovO*rX-kAXs-LY=jac*@}p$Bs@= zq-d{pwrx{1i638!s2v}9O`SaZR+}k)mWHl%ArR0Q8FO9L7pGaD)S>~GrtUO zegxcnSHLRsL*VL1yq5KE1Df)f(om*!5$#Nb)T~X6AI%%r*4MAyXkrQ3?6un@7Uu}- zPt1`zJ3p5o#6K5~Xl62p#U+=7ZPz!^ETQ9sCdGCr11jR_!Wqxr`xx0bk{aD7vM!vu zNAWmC3GylUgG(W@cD*MSGqSNkD7Tni%!LNAtPyK82Ahpgf8$E^%0@rb*c>!mdXccS zd&b}Ha-^%>OT3zPCQSOnCQ@?i+3Q!YUVnCrkDE9J2{+B*4$LghEiB9}X81_Eg`ljM zgodipCWK3{B zMS^^R1Uk#S`lH}Vx6=rk;|buyMGyjgO>@v3jhX|~LhAB`!?s)zd}?5ZVx*2Hl5v`J=q4FOn9bT$8*VfkjUIe#vJcBC_j~Sd`cV5w zxJ5V?r|B&H!>u7WK$@snAV%$ar&GsvNHP=cIPeC?!r_q-OGP57m@y&(zz7F%hQ!#d zi)_De#G9bNE3WMPp#ujFES68t%*@S-*v^vG=RLuM_*O#KyG(rVLWT5$hGuj} z5o~waLOQB-%%oV8%i3wkN6*G$eFOOlEgJn;EUQC{K~WtlI0hYD){_q}hJ+W8}_QcuA!lYS%jKr zmC9DNg+On&PcO_ZWC`S<9>aJ9uRiSB93pZ?7JRB@DQj)QBjNhUTx#VYv{S7iwhi?~ zpn!gOF)SUBn#eOnc`AQLkHpZxqU92)N+P^XCA=l#jQ&Fi?=|LPT2Mc{Sif{-v(X%~ z@Jqy#$>pVd(nPm`r0aqCNld?Z^0vKWC^0Gkb(c6)?X=4S!U$y;3N{Cup#(7xCsj!F z?cu|V?V*a>(h%}e!v=c`3%@Ol7xnUKnE{6j`A#swjnqk;-cBSj4SVlhh{i%_a^%s1 zf7IaU^hYLj@>tG;;y^;1l+6s2MRbQ(mNcvWrE97l6JgYNJQy2CT*4*w%ScX$Tf;TiAh{l^`-w4c@c zLLy6sUo5JFP|@7MdFqwTA3A>I$dMJZC8c2+^_wI#)dw*NR1L**?3}DTbM?xVD^Feg z60tpZUA)%VWRK0Ji0O9F0^h50TqvFipjw+~gXlTnmpgqb#a`OT1?@~CH=D_13aJ>c z;aG_EEKNtGG)`Jaov^G}XvAxO)S-J}Z>xzJxo2XH5Kh>5bC(NE}Shy*FY@eJc&FRnfN^1jpD_` zTGu6gv2hoU0%VT61+gT*$svfZ*lfl73$}Ez=wYW4hU5L^E|(eEKLxQauce+_jCeGb zPS2yU#P;_~)_+i--Qvv7y3GE5N%<9^V3q0X)+JUuQ}0P7LRc4&qn-+7TWa;Kn`A^+ zhS;m6DN7t}Ic)SLYJAvhv2!!)sXWLlJk4@Gi)u7d2KD9+|$~o@p-6}6%-J6$}Z=HXy?8(2&x6HCv_h#AUTV~U%d$Z~CEpz78 zy*V?63bh>cYkAW=cV}+Ax;HoGB+m;2KL332+;g|g99Q>dj*!ExGQ^cV8DjaCdEn~a zJg|Jrd~bDczGrtUe%ne^PodNP=?d8^BpejbX&)h|;cY8P?U#tJ`MH&dZmpR50d(5; z5MT2MEA5%WDO_sq-zi7IEoyImrS@L!t=fBy*J{80t)qW4`UuZI92c>-E7reDd+RIg zJzi<=Vf>-?=GSTORdw#2UF4AO{w|5cmXJkxm3Q|Q+W~eTG4{x|`$rK#cGxAK)G>xW zr@|3XpsBS>N}1&8u=V?;Z$?V-A4+Dwt6uv=*ojd=!WU3VsnjE{vV2E;lTI-at$9Wb zgDhZo|L}W_hJcha&&#Q)2Vl64WH)2_6=%@dR6OPMs{|7g+A{gdjeC<_ir+laP)IPf zsMZu(B9+Rds9>RM9U?j7*?1~4>JS>xs5L9iT1Ss)1c7=TYiFF@r-lhQR1HbZI$vRk z@A^)u`Xb<>!m)CL^McpifuX$1Zw^@1f6BV2KrI$Mfu-Xda?F0V!LOvcnxjbTYf?o^ zH0+U1-~gJ4{M#P%rCtr~B#E_Bpk!BDMVAUVqy`$>*1%Y;>6!yW95!RRL=w*{x~6!giPh;ysw1llX_HQ3qrrkpx}`|5+9t(@@SFC?kBLW< zDULN+QB#@S9|3j7bMWpbnHJ~d5G>KnIbZSjzoQalvIvRfHc z4?9HU`N<|OH{t)2r$-durjvrid`Z-os=QCkGWC_HcO?0N>aMxfKI=BM7L;58%lf!4 z((03^qm{)GJ9j zJ5P9tRBHh=GDzw4)ZmkYjYpHg#^)qjn}IV!Ph_n)p}+t8*h}$4#q79IN9M^Vb=&fy zJ~+M(nE>aD@x1Us-IYWi`C`HE5)(GO0j5Ay8aa0wVo$>PK#7qiv zAnjv_V6iyLvZD5zu454oh&Vec12K-A1P>Kwk&}$Hft-ZUJqBjXm&llKeeZ}|C~-IT z`Pqwvo#|pVpL$7{MWjSoz_e_x#hb)j7?$uZY;>$CVPJ4D`%U6>sKxbh&sy%2rv*Rv zcN_@oIo~I?7lEJB`@>S6Ng=QfgKr!&9q*VMO9ux;fG~?xg2mg1DY=OOj`v=lSk;jE zabINHCy6~6AGxyoks4==j?egeLD6onXALU#(|;VBJE88m0(VbKqueKuRo7PX{n+4A2Y9qxXQ!0d`T6i>$qdRFEUajIdl_Uc+ ziX}Ojqai>kx<@~l7jDRtC{3@_uQexyeI8<%6yaL&Zuo*NUu^-aBrHS@?{H+SEo7CH zWo|!|5-AH_fSIOa<2rwjNK$tXVL5w^_(7x-5n9ejYtXzn{?6U;0w~|mm#jI>j2q#MUS)9w>vXe*Hd@JGQTZGc?!m}1R^_UNx+>QVEc*@D$c!`fc z*s-492lh+t@VA2fk79w5e9G^`0#kfJKwcZ3xPFqXaW?XxjZobXwh^~}=Z>IEHxwz- z;LuT()x1e^HNn8d#{CW{E90PgmkZmhnb+c?8%E!KDx8AS@lJ*hcWZEj!O}SPtWK~t zUP$RbLhN=I$ND%~Lm{ut^A#$Swl3?5@S$x*wbtZL!bJ9Ip)LiRPn!9S=%utzPDAAMqyD22MgYuOMnG@EG&@vpa%j>r(KHPm>m!hErxKkgDuRIa+cq@Lu`Y{ zr&bj=ANiRo_fjf(05z0Fu}b!6O3$tg@jJ>N^dfRo&a-y@C9v<;z&`Q99%k))h}@JF z*3O5?O?eO4_$X`VL#&-wSUbmKuXTjB;LF<{)c#TXN8^XIUwh@~D34!zP(P(-^@l$E z%3)>r`C&!>@I$ZAvv=RcuChVNY+#0v6)*PxipJF{SN+VtB6LfKReJ?Y(bNV{Clcv& zs@Z`pK?;?OZWtpK$t#@EHq7Ry#%U^ox#*L@He1$mwNGzF7#8@e= z#9O4)CUe%^(Rf53wR+~$U-;{-8X5`cX-L0@QN1(J2X&HBy6mnUCLYj=%xN#Y&poYN z5G%;Zi{WeGgX+({<~z_yI)vGv0*MtK7N8Uef@6qD0N!3o8bA^~y*=o%$EX`MH11*wYU(emfw#W=Eon*_e z>vM$5SK7Vz=QrjH(NO&g2sz%$cU%uA@^eOSvuETF)V6NkxLMaWzH*K2DtXWg^K8cp zSBF+^zE|0JfB5NSCO?y_U3mQ6amsji0XLk(C_nzLM3dl}K{OT{4n`gRXRg)^)D`-s z$*;2XVu_3;KNgbzM{2D*B;?yvN4Gm8-9WcPP3Gu#$1OY-kwFvph73lr_nh9kd81Mf zC1%R1YPq1Of`~xH1&V?Ky0?0`z&JKyC5yj9UPY*}0+J|fS{s;Q*h))v`UtO2#zMo81qC!VxVKJT}E3qyTjZucu}rQ*F8FLJ~IntUV+v&OJdCB?P* z?B%CjIpGL`ZOokOzxYL3PV(QKyb^UC;}^d6Y~vXNPiFddQ_%r|K12b6VImAliBY#9 zi&zmDqf$nM!8U$pD=!)eGPi2vj6~wXu#`9;lp&qTI3mLp2Vc&V10)3&#$dy~nbw zZiR0TsX#<^dNNk!u=dvaF#K34-9wmI(V4}0+F2En7Dvq=o*QzMGC?7Iu;d}K!_lxD z#ivyGu`C7(L!+IFjag*TaoDiksc=}qAWfw?Naj-s63KeQm^zHg1>wiymoB$bvxg2H zjP)rC-r2muQG;fSqZH)`=|KASX48!N&;80vIm@PI%bZx$tgnj@(n&*XI8tg&RX7-P zA1i*F!*8@3m#?p16EQUCHERt=PC1fD@g_2ojmsCwg2*ARlyv0ub(6c=o-3k2F~B@e|s9Bk2LV5d)i)7?u; zGahC|jXXyo9mAV(xA{_$jQa-_HJ2QY;-IiiU6~mIYvK7LGt% z{HPCeRpbkDHX4Q#)&I{u^7(fi`TPL#`84wR0p#=j9{GGf^7#Se^TYcU&>wqvUlRIb z_uQ?At>+@64>T#};GlD$jHY{?M@HZM;OXZiqgfbnJ6Bkizl6iguR&6iw8$(zCrLenq&~TCNo`QKqkMATlKSCY1og)r z-dR$A?BQKR^~cWdB&s=VXIagUI|^%l+gVzF?BN~7wM$0(7ubg^?4!F0Y}y-!wilJR zU%b3;fep(v?mZ<4@SFs8@t)dq6xgSXhW6Y9_QN~NYk}EL0-N7 zhEl`lC*iWvsZnJ1|0cB!nIw04G9k1VDYw0Y&|ZA-^iD#X$}$obtgJ|5p}nmR7cs$3 z$?UORX}Lc)C90-X7ZLgbM$(}&6kJZnF(b%?+lxDngyx(=KB1!{%CmP^)gH1n&2KcWv ziz?(MH5&|#s?ZKHDbTwsHl-e`3*u|F?mUrQJ+_=3p?9XuftC(Q-_*3cVE<;T*~$4wD0|f4JO= z7v>B7hLqwN;3n%;yDSp7+THpA*R+q}3`K=2G(+e*N+AOg^8_Bq{IGZV;p2 zXpd;}U8}ReZnWB+eq)QZVs{;zKwP}hQUE1Rt&A29glSb#^v%+7aqW|+%)#w8{gzt8 zN~PX6@H&cXRHrovkui~I`DIT(^UTw-IdAIo;EB&w8@<*Oe_3y~>Q8*G)oNb<+@MqW za;tXr>973NU;WkJKV41EeCiLrFs?FHx=os`bXg?2uf6bGvpLFKkBB;l<#c0xeGrci z*2}k@P;|uX0XUm>AwX#vEcKK;IAY%*DqEt`mNR;|uh*zXt>kdZM z+6j-ZoWf`HOymV;Mo5yp$iots0&O* zWQG;XF&%qDh>cQZj z(@e0~&|a1)99TJe^ytcgLM9PX>2Fv@Q=!m-c>cg*itMrZxrN0<%rs_Z7nb8xy(!Et z9maD`o5SVu%Yrf~l1XX-*6V{1=t5tdaH!Gh_EL$kRd4nN397?jU>~BbQ}t_%#B$|q zL}IIHS9f9{v;|JMlHn!SZm^a8Q!8=Ncpur&*m2m`*NJcTjBr8bHDDfw(CG_G; zCl@>%lnrfFN4L#%v3iihg8naY1L;gQ&-t}fI$MAYdZ|pl{Ibb~j|`Sh4>rG|M>e*g zh*q__MK$%UDi@`LA2lvJe3PFL2f^6_OJi; zAO5jf+qnKe{^pBcZ8oc$pZ$OS!Gq0De4dd-cSVr}nG zEH#{%J5Z~vmtWQaOC^fG+U#IX2mAD4x7itvYQ0vqPUB3S#Em-mH^Tc{g@}jLve|+O z4BE|V`DH{LkV7ct2Jo*?Cq$x2sO}V^e1ks1D`K`ggAt*KA$(Hwh(=MtC=w+Nm;s<9 zA3`&e4mWb}T41ZT6Wd5l4380|#11hLxT`3Sf}xSjVL}=}0h%4Sh%Ew88;taUUP{v0 z4pO2|DR>>CnxJj>oWi{O`lRG2X4c^FjR{{hQ0wh!)D>F=h;KSakyqW-8S|FCKG3D={g> zqrHJ{FwZ?gKAQGRw{GCyvyQt=-L7aGO{7ARn1ovhf7f(s^4A*ergmgi7XMPAOjrRA z`Ey>>b?{wr1$}`N#!P2uXmti+4_lZq#66x~_T`X=kozS#JrG9!7oGFl0l zsf|qS38Y2JEb{TL?S7SighrHVS4UTAFQpt|DJe!gmG-t942RA%ht?dvx!@mdh!JvvCZb< ztTm$WF3xX}ENtcXpS&?Um(Us%`=Ois#fw+TE531~ibot{L0SrT#TQmqlF7{c?0Y^V zRp_kH**`)q5faOa}^q6aitB@VCIx#RUXZ1oNFghL=;zi!Gf5fcDe4ZCkBr^(BOfI+xfX@r3pzu#Xo$ z@f8KDT;~r*7{ii993KL=1VQnFq*x<9jArP}5fjZE3G#t6XPHJoEz_7$wcM)MFC>@u zZBW^FL1j`I^Yu{K4?|Vb+kx`t&Vw8DrIie zi%bxYA`uHKJJCc`k;Ei5peI5Nt1I>_GmaXH;TYFP1}k1F2*iJ1mCQiIfB)*<2w#5x z>fR_`=7JsU%RNzL6ixvlHeq;uF94q)QsZTN<`q`&8Chft-~?u z>+!hWTYoklr{e3)c>L!2dNm$@_C}8%*XxFgUxEj}|K#kA>+sguUG%b}bh;v0M9wTE3!hrV%ac@qd$Wz{VI@}wGc%1SO&7g<=i8gPd*N4Z%zo+AXO0VRI8J!bOy{@m6SjG8B0QUp|a0NWsG*8>8Pp-X&Kx9{z_H= zF7FmE#@mH=uNd2`+oq0bA{n#poycR%x_2TBn{}hu1(Jkf-8&J30WFk5Q)B=S(ffYZ zEtfxq|320oi1G%J7O97X+{vSK&`MFZI zs{)yragbI1)H_pDvO*M9HwL9FDF`eRotl=CbPyqQk{Aj4_+$xw@RzU4Wr>@_G$+t= zK$o4W2`kZ!8o6Dev|IF5`#(L=@qe%#<33$(#@10^4=yf)i{Fc_ZkDTg9k_Q`a8I@K z6rympF(Q>_gAvG!IB^f+L?bT36y2T@5f@Qj@EmZYJb@PncEgLZiwfsG&_6dnw*#EU zFiQGhv<;u64?eNz7&g%{Orm30*p&WK;z*_6mQeaTnBDJWc3%snA7!0=67S_}@m|V` zKq&n|*4eLxXe3SxaEFKjSC4a36kn7zh^|c)35AQvHU^jaZ-Vq!(G;k|-0Os_LC1&~ zok3)h`d3x87NRgZ!^lwWGn{4sGy7ryFC-+HLW_hewuVL%lV3a(PVGtjC1cR+mS51N zo6Vr3g|yCKPqLq5W!p>3`nGDtdsQoKReNa`ZquBAR#5{2?NCemwLz*^HPcqDzs6Jr z@P>jYs{|~fZ49I@0uvJI_$z!DFr7sRSm_O9G7YtlF;UR_)4p2WB~3r8jXvhD#rIo*4_Z3{Ew z-`FRuRjcs2=c8%iop*Rgc$mg8odv{FlW*<&w37rl6D%{Z{ zq6N}3LOnUB4JAKQJQBy#CaF@Dn>2gS<64jU#%X2HZ;HoEhCd<+Qtq?ct6sg?9FyNz z@q7F|9?kFZhj&x`ly&kANY|f+R;91}YoXPjgEqfo#lRTgAkQSNIXGr7Cyq_hmHWSs zzK-pSuE6G>h$xUP>iI!g-w2hwE8yAdp~4(t(Sw`Uz3f`MgPziLoZh;b z44ZrEz;|Fy9khG6#mL$UlJ@>p@0wmU%6ghi&LEvPK}OH8il=kaNaxnrB|z8xdUcCc zb7gW44_>Od(#%qha;qLiLzcg@RH?wqL_c$1;r7J^7ka$=nPpLL8KpuDXW%4@Tu6*s zM2^O{^^!4T^yZ6uvc7j(5x)q$ydS)LH9FsI=zK2)4`q#(&A6B4npDQf z2|3;zE;dFScQu@wMw-KW;Y<1OUO0kN+>aLL12N&8y2J^X6@gdE53k%bta4d*LdI}X z@JV>#lbwQ#R!q{ba+THbTbb!^akRx3!vW$vGAl{#AYSP2cBr3Dr+gPSL*K+aYM;`+ zQqsPB?iHh-(%x0l-d+Bb_9gfKcbBwxNsPn%PY%;4!N^ojck}C zK_Ma1N<`)Hz5(E)9$x}EN?<06pu%6vXlSb zNf2d7)DJ#LI>AX#v%bnqAHBiKqH2E^KHuI=kgJE487P%H#%ZN(|8KEgD)(^{#z&?bf--}Xu>>3>24^QkL8p2!z2cm5-fywwXnky zPoyC2_6mL{kbVeAONTMBR~$X!$Q1>N?HBv3a+Pvor_t~F&6`pTM5&b&2|#W*ORcVm3 zMMk{!{=WCO-QUuz@6cDW?LbS`cdAW#ZAzRD{SP-cH|d;6U%h0qTP{(#MjRAqYr+#` zb3`})*7WA0i-yTu?-xk5@ZlPbTEDryz8wg)+Qg}9-x|wi)JQ|- z>Akppv|DpP$OVCYHeTNeXL`HBh61ne0I%Uuq@G2A^86BeapI5?rEZ>zae z>uwVyOH@X;yUXxxg+jH`$yA)0BAc{u@30(2jgM?Psv{dCOz@;Gn^doFY*LmamZ+@+ z*Pf<*Po;q0P?r>Hm)8d?F=ILtn$;x|%|bY}L|30mWubI(ZL6jDPtE~vJb(VF%N!)z z<)_ZC2@fP%cWEg_objcFmFr27V;z;E%EFVPX!$V#FLSlt=#d!+xCo)46?%EcvbgOi zbqm@%WdSU+C6h^~I8HVKRDlsWo6TmKa^hx~+ctXrVuY-ht}v_ZVt%j#m$ni_+ZfiA zfRMgh{UYH!;Z7+jqlLbi&qvju-7M@QR1q1TkOv=b+pWa37pm&(ajhgcPiPKk!;ON0#dr8%n)kiB;ckoE?F+Kwh~QNSG4E$4~PhrShe>#NO~_w`Ym+v-(sceH(9CrEjXm; z8w`tax?R} zcy!b3*>j_-@cb8|CO-QC_JO9$ule3Qwi=c7F*wbN3h zN+57BPfBHuvCU@acS7MAT4mP>7~Wy*Z5? z3YTp+8#M`P-f1vRw3p$b-#tMQi~5elIoEg>TL$EDKvXtXNrKV1q;#^u&L8^3vE=mr zn_qg%iR+HvaLe&*r~~9%D!zE&&|;dDe(HmVq&^7PD>_9Qbpfl=?;Z`y`{c74p;UVD z(1FFcUVF#(IDX3w$FDna%S&%LFdZ+k@E}8NSG}U!?edJwi6Bsn6JMUDuw}g_QBWN) zLzaGv#}NCg-tMnNVYs9b(EK!1uz1u~@8SJ&C?b?LIOr)MPQa)HAQgNLHc_C-8xd;c zX>_8m~kxTIKb#f@TA{9W$YUc#IBK>f8k(v?4(a~(6)>+cxbS1^_RFZD1N$T~)A{Lhx z3Lsq}ATJ2KC6Z0#W+4e1Xtn7cBV}6Jz0(t#8yH*|%uVM{Oi&Q7A1a`gF&t4-A} zWWt#=Du+Sh0hM{;6hc@@g;G;d@DirwQzkzZg?x4&-9Dj)qC_)~q^ec9RUn<8Gu2pamhKkgmd=gSzTjrt3@UjL5nT^OD!B& zLQ9!*iw`a>?O&M9P_9sf@xW+pJ$TqwkW*k!`b1GQ*qN^N8mV54q$s`*9Pz8d75ZA& znG7;9i5V4j5HzPU1n%0b&gOkMYLjRzQzx!FcI@~OnTrKtB@Jf%2X)n2mqQkLh%?g? zV1Oy8=iCuw;fa$uhj%985hV6OAD35r_n!Mmn_dj8 zrk71InZf*T8VfQ_ZHJETk^y&Cur?_@7Fv*5>R9glPbQSnq7FB#s@+`9`{pAHyKgv#=fOkNveEboCuI$Ah_F|UEaC>Xrk1-dXWG-A< zQtA~;du!dd;k}$?@nv~ z9HM$=;lSc7HQZ)$x$MQuuOwzgI;tzKEXxFxDVuUfu*@zNUB@y7Zk*WKnd z*L%b38B{j8bNR)cdQW8VNPNrkuluq5)thAI^8B(de`H7a)*P=C?eZ`ML{pQYhuujf z(!xzLU_v!U9U%u<#c3_Ae}sRFXB1;vryrH8jV590cMh;qgmxk`DP2oc_@E0@5>rI( z5~4{Wl&BzN*1{^KtS5c}=ozxY=!16kqgc}7Z0hWvaMw%%Sk7Q2iTxp!Ac>9;4e_C~ z|JC`x(uRrMXV~50c|}>O2aL7$Lq_YFvwz}5LrGhBxNG1F>e~Y(u{EDQ`^P#SN`HXD zQwnqO7FP*}?LV!JdtavkuBpL*YF_0LMU#dMJce5T(&QqAG6XO+4V>S4bPSTWQ8u9^ zC(*8Hm_+eb<`K_N8Y>^7VKMk3#RLGj8VD=4T?uqf!tNt|Ro2Ak0WlX4Ilv3P0+ItL zJ(~uF>p34J(iQEQp1i_K!l&4TvLq&_;grJt#Pj~kbHB*4*+CHR3a=qW`PLwO4Q zkuX39Wv~lp4?dLF?7?UJx|14Cs@ZSC)x;SlDx#GA!g7hB;)a0)_&|}Np(CAvsAs2n zh!iQ30-W&a1j^HnR4gTTHW0Y8UqN9c;kmY36Lq*zZ>C8KfhmEw5Y~n`x$tyh???h8 z;vt?+#^ilD7pF?>)H$*E0p*11?AZtW@eF4le71lF+Z*zJ6;S^Jj{GAyveeA`Ivn^r zOXka8#^dr}`tf;o21;H&KW_Rj;-bl6F8Z>61^2w`l-x9gdf{Bt=9ZZk&MwtH%_jdf zd{S)*_t!E@V8;gXgaEuHR1m($b3QKyInRDDgG;-6%&~DEWmCB0$$trVbU5Rs8X4C% zXKXgk_x}Z~G3>I&VYY}{rZmC|PYWG2`t+oGK`dz^E23uH^JYcQ#)6JMFBbHgSKCwQ zU&(s@)htK_NR&1x*oYCKKuZD?|`4lS#E|C>*fo5HFQO-`&DSq1PSQ4R@;`Fie1 zlzoe%3(|y9+Fz8^UtSnljgDY=nUofzXoBf{q_S=#N-S0gv+UAAt5d`4(7N6drBx(swEy+ciCsZy5SNiSnz z?>CfgFTqa8%IcL_@5#?v3~@h5`r2c{*O(yLoF#|F_QEV zF*?BktgJZ*%6^@8Q29cpKf4zl{kid=7rpLvg8O?VGvGdEz)vy*?gjD00_JlrdTrt9 zKy1o^rXQ_d+_N90xhXeV0`pbFUJ#mfR zLHpV_IzW@v&qPhpS2q<@LHVO<3Br#nm3E){D3yw;amiZEL!rd#;NI!Sn%!dDiqu&} z$z;rW#45(R%~-!&Pt+@w7&YX40CnfIjDoYtSU8(K8WUM*Gg35j`|?HjY0=z#db1cL zDT>UwtFcw9)liX8!Jr3#6^^P#i;C|On{@2jQ7&s=-9;yNV&8>kwM#Cm-AQ9eVgz+M z=^cU@q;+qa9=vJIZx8SB+iLZkEQuMN!>QEa4n~oA?r`I9Jbv!QV!GEHF4ixiUmuEx1 zju8pA@pyIojQeb1k8__bjUkNw`wVmZH<;s+b0Ilp)Na|+JTw4C=cTK8Oq!2* zZ$3_#hu5F<=Ak=26aPAM@Pso5pU?bDc~amx=iX>h7H^`B&AB0AakaTNDmbn-#||EF z<;b(mt+{8NQwuo$uQrzsEisnv9ME(d!~c>G|C6zw@?(D@?)B)|xZgwh-YXy8k9l~1 z4xFbwoIeM?J=yeTWYcTG?c2bucj)WE?3->DbU9{in@=b33dKpN!y_6ecsiqt7iHLq0au7goT%{2W3+HKZq>U9^; zB2bu+azpZM)7bfKtAb{;JSfaWRK%~_5Wb-Eb69sUC@@#ZP13ZfkGI{CY9bPHmgd1% zxYgkd=y<QLGDrhRanBZ3c3{Ujr)FG~d<>B8_bFnS7%UJpj^0h7dnXDQ@7g0IXNt~@-2T|7-? z$8nS$$53`0KPcjQJcqHPF_Rj>jEj}HA1f0v^5KcFI6W}Bhud5idf|LG49W1k^kC@YLROLB|L7Ci+rSDBR09&pLGejXOXK=7d5qD zgh-h8{_Ll zSbMSb!^uXuGajQxxk$zVl2p3J&iIfiJsIIOJ<$XUm>62=9A+z?2Iw1zqhl<_5r-J& z^j_7bd8mDKjNNEiC<Es@5DAg#a!^)=ER_n*yheSEW5V3 zAGdn~Ew+bOj(0_wXxQHIp1!t+)0`{D{1}~Jo;&9l(YW?7IV`?>SR6CYeM7G?n7bPG zFwZApZrnU~?#*wW`!O7n23WRP3Rsd{0^kd zTPJ8j_aSxO^}@KFghYt?v!?)QD;*mtygWOi0NL&wG^4o*e9mgCx}}f}E@)gPr%#ph zS=tqw!&PcS8OuPYlBj1YF+HN95Dck5-d#;(Y|8dFs>r@);cAvzTo|>0ZAOOZq(Fo4 zvb<~c20dQZ32IB1{^71?(Fdp(k9&F3#Z`t`h>Uj6`8A} zx{$}Tb$KMtsbFC?;vxXt#sSVGH#4_xRH%uV#OWj&wWdy$AG4 z9KI8^>5WdU)oOhr%_R~pmk^hj<_^%?;|_slAn{`9G()&yECSS+r<|`3H=?h| z^1@&UH}Wn)X?-7VTmx4>#vX254$um9?Z*wvZk1fxLxxHH2wxbqV}%!*xIwJmX2xUAR__6(P7&Ur^7^Lj)REmH$)*3)%76PxuvqAtX< zGw)M-))EP$X*0X#i>Lt&0oB%kT*~-?s?{KEu;b9_dg+)jL+#PgYBa(BeZ7D(?9Ul} z>?KcPd%BTlyoYt1#gZq)JvFH#u@|yl7bH%S`eDBCivPUF*FJqUzDDC4?MHqs*nSPz z7C$m;8#shrU3w2e8CPxcaOk{2B#?(cj`S2Lcf6J}t`_CtF6-jXw!Q^(T4mhBoOj)n zA8UIU8(xL>uqBmVbV$!6Or<*$u#`pV8o`ifwAuQX`y6?nh@;4$7Hvj1@7KgUdTaQ& z>ew*6_o_j(M(Dd&4I(m1SC1RL5^i)0+~{5?_R(TJtdtboS-! zi2c+KSyP@YbG5U&N~c`H%VfcJT2A^o4r0tDxotPqJy)2caM{`xSDeUP5>|d@B3GfM zA?05DQCwnZh)+c-iRhrMW;7v8BjIBjffp?#Ybp!J64<(G5tdTc2NYotfnGoBM~SwQ zl(w-(S%R4x=K|pneN;vxtC~ZhR3F@%>mRz>T*u?4t^ql>fSdy$=SGlne94T*JgP&q zs6%b29P_ALSM20XYj$$ybEOt@sanp|()ux!~P>Ph6 zUSM{p93=Kt(l@G%sJ|d2p@+VLkn9`xMiIZ#Ug@O>qvp+|pJXQe9OEH%zTPxpCW(&s z-WN8LsG2e|le8ZZoJi=={K$;5UE(_EXpf`1Gb>gw>h%?0k0ovLIP%i@!-B~2e&1|! zVjA3FB8ei}>#>CWphJk<;2{Yciq$Eh=*&Y6W@rBU?s}rxgT$9;OOwE$VSen&d_HeB zSEO*3e}?)_t7qzzJ5wb-L85&K^pP2x-SCP;kGIlf*j9|v9XhG(w!eA+ac_hC(D ztL>84K|B*eDS5b+qenQ~@ND*cpL=9F;^ESj@tz29S8F<*BjdAO{Ge`Bj)dd@c%P*I z%--z(FISuW;tiFGL9cP-#@(R%ZA<1J&)42T2ca&{_aW0CM=6N(6$Wx1&;284oOjST z0f}^Yu?tU4K;f`V@ZHgn`Qk&}Xnc&I&6Nj2T=`HB6jCr+rB9 zpBpeJr&0^o~mJn=QeQ?e!g!+2e(p0*jXj+^`Yix7b zS|Lgr)J9E;i}VWgoJYFQaE+}rOS3ArOq`-Bv@PGJ;6f~sqOx%zMfD4sp|F+7wiA-iuc1X7lO2nIe+28T4$D0CTc(J@yO?+&}?qs(!%8n7tX6lJTTpA*J~Se zl?#xepV?3GHMRH;Qk6p#T-omY@oz{rsM;n&ogA}53=fJ^@Tgom{wlqX6t|&5*f+m^ zhqU)j(1ntxX*R3$Y1e7L|3d}GN_ZL77WG0G?0^YtY&40y(*MHFoRBSt9OA4 z@n^mpRJNQP#{MuoSh#uNKF zM@U<;LAOmx8WW)1X70QCk-))0v^`Axv+Pz>EEw^4A-20K6&ivJ!EQmty?WcbyZYmJ zo4P*1Zkt9sakYG-4UVCjMmPW~%}PgwQjruD9f-y11jC_TglE_)-6ZqVt)(S(vg8Ep z7*uTzYAeEU0?b*w^pUA>-{=HN%Tm6o2rc&)IDRk)`Lr1t1iO7w*^;1s@U$%UwdzPHDzQ zkqs&K-H*bKa&=o93uNqFFD9LFqM`}iYT@d z0GF1fY5rI3zSXsAeU+KY*bA+mtt=F?HxAa@ej&QM@}O&9wK~)sQB6*fnad3OXQbjs zuR}tzm9e_z)p9qPn3hTI-VUoyQ|U@H*f!f%&q{1q@l<7(Jlmet3nQ={E-wSYk2?-C zF2kor2uZ>Hfn>TP< zh5+=qG!)fGYz_aVjPD;qz2Am<4@14r!3z#k72*(8Ar6y2b(s9APeIMkEt$NI^Al2M zPrr7MQeRh3s4cal&Z;xk|8>(>{<3sxa7*dz>3h`I2FbzogI}{g@n@YAFS$p3h7v#( z_5D(OgVG9=>c9bHS%vFRH>em=S-;#|-?*|a;c;jml1wWNriSGbrAI{K!~znhBTjv9 zE4`BTP$UX7!D#PUt*l>J+uW`-cQ>R+!QL4;`y>fQ-r-arCMOlYxVM#Vyg^6M*(-7` zW`xpAC!wDc-6D9BAM1ww6a^*URt3VdpRRSvN5RO=*ir zI=DffgfQi!>$O_@a=H8s5u~;pea)R;L5d=1V2gB|q687GdMISGyR%CT7)pmUc~`w! z#Az}n!u0EZ^D1}~)4$ujsbjPjy%V*A1>=5#n7hgJ!Ciwe#Mt({i8Q7cPgwF?oE#z%*x@u9_-s%?y) z^X%zFkh&7mcT{qigWxmKA}czM@C-^_9o~pbqPg6&)D>7^2NWMED2wPc`i2}q8xd+R z3=G=E#zXoP(vz6{YD+q&$s3o#>G_43L@E|dSzGc(_|oPePHJ>!Zhk&n`mtLzpj6F~ZTB$lN62}&xXv8Paw(k}7CgI++|#@^T` z`}b5vu=N>+?;o9_qKG*k-jDOosqxROGOir z2}|LiUYI5#wBn@pLYaag(pPRwbFoYN1ZlQHowl1vzUK%j!?LprH|mSRYE05%$XR8w z1pAC?#1b(sMTyG00Zo~(+1%b?;_uQ{R^CXoU;}l!*+H(TywOZVr7j2+W2leh=ss_E zG~zd-`@9W)_tWS;Zx`L?Iv;XJxzNTi!z!Kd_|*jN5*lViXvGph%^179!#|b_O#Jp9 zquB4~Aq&G?q3UNCCq$QZH$Aak4VkIEJv8mhr3Vh^nXHu_doEkPc@85eEmLjIdnRw* z=0r7Cwc#0FN{!CPxxM+gJv?(u1%X!au;e?-5NK@$Wk)pO*f6SfmrT9)!GRRyv-KP# zC#rF87|bPTh1#O00iB;m&{px#2pr4h(g`M*fK=~4im|YV!8WR$1xAwU4)y!U#V;)d z)PF-R{vC4huffUtk&Ev^E>fCTeF(Yu73AWVkc%bcViCFcn!z>d`xMX%$(MQG*MI-i z;Pu8Gzwlc1CH4KmHG?#@8u&85p#I_R!FvX;9lXc<2lZojtBs#OY=O27T4L+p?AAb4ER18Z~PjkotvyqoF*8JF}3V%`7P)z*T z7hq1p=Vz(1Ht`47)N=o(AD_+h`Yeh}&a}qDI z?^Vn%QHAV{zk1|e9;x?QJ^BaDS(KiLCYtEQ@i{gcLvTYZs)yZ%e z%_g_Rk9+H$N$7r{KW2oTTett{y@I=4f&$FK9WYg*G7_+8v6LzKqOD#j0OlFJBG0o~ ztm1#5UI$_+fCg1-+}Z0QEvUFcL9;8*Jo9w9QrWz+y886xE0kUoUAMj~#;}+^0b9Uh zEWe7;r(1UjZ8WY@calfwY$96iO@*fCb69hmm)F}HZM&Y}?lTvqOsCAST1^|!5mkTY z+_q8aoKfvF`A`BLlIn=y->FgdE|Qz43eCjR(^9qBg*@G6WuvjS(G8~<_@q(o=yEqk zb6d=A{Gb#Ut8r?hQ#qZZpFLK2a%mx|I_32%B!q5UI&(6J2uEyF4yT25q`m~pi()_{ zPN;K2jXsnjdR0;BIXw8F8k}aLi2tiVwKM4*MoK$}cd4pFh3IyxA1IK+!_iWGho(1l zX{s@NwdRMEaatLl3{b^KUaXuz3d0P=1w`>TkjEhrJQ-ogNA*JL4u+$QWFj6h2Y;vr zACzmJrbbmM7mx~&@E}@q;b$=s_7STPp`IO}B1xtYZFMQOinbasC~fsoWl;D1!vsZ6 z^JHP_NRpaEHEF6UQA>~lHN^~NIZ(&i%d)Zak*(A@~97KF-4yDTVJ9L>r4l33kB?ie4@ki=DOvU(sg}X351-h~FCIB^WHueFRlCXj z=B0Dz&aJEV`sGbrWx4t3kZP=-KY#wpPB)R}U}|%Hf{RmQQLZ13p2_7mYr*s^r&v69 z?$TyH)vd0dD@5A0@}*0c%C&X@CsBR<>Fa~wK=VkMS7N@BR1^yhXpsk&kZKL# z^Y~r4pJ1zLGihN5`j#AS?QjoWG)O+P`NiJzP=Q4r<7HiHA%VAEzXpORC)a6n2(gY7-6T5D2t~1RD81Vr7~$-~!UCmh>pOy2 z0Qf1yTfaz{(V1MwQVovX*{M^j)9Umi$wU&&)2%rgkz4>%Swv`0Fv`oNx< zTHyH#;zJ8k_;n?htO}cI8y3y_>NN@#C6iPeryy6+#0)A##a)4V$?W@p#;(jAN-T=z ziXbxvrCb$fkkOXsklU~AwtE5YL#T$DExC4}hKA5oEDI~+A)rs~y;2x{!W~$_Gq%nU zLT7k4I>WC3lwU@-l#Y=hbcPT*LlB)IfzI$QbcSC+*G!-@B>3b*hSmN2qtcd`Vb{V! z#IQ?U`O6RQEFUm)IH%D4JCudD1?@)NmZTk#z6WCosX7MW#C)=)X~+@N4H2=+x4@L1 zdS>;?Mx|OKNgw}~)U~Aqt_Z*Vo`h?PR18loE+H99w^Gx#1}&nYAW_Pfbxm7J+EVOK zgkIH?sdJ*3E-g-lk%*<`TbSB$&W~kfs(;YRnYKB#l-h={!h~^93V(8{*_U8Z@z~0B zSZR?x7cRa-q>^=I?ef!?R##WAY*GlJY_nG}C=U_Xo!l1R-Xh$18t{-XZ~Us%j57OCUTxi~4h|a3{X*Qh%ua zZuxbCJM1FUga2Tcg;r+*|Hu4CUozGk@c1$Do69f?^7#(y-;68((qFbO#-yEiyS!U# zn1fIZzXZmuB&7Cn6pm&CA0ym}r3vbJf{kE8hFMBgD8pUpadQAqT*tMckfxzflvnmm zh(*r*I1BpFJ8)g3#`Pj$Gy&DF(Stdj$;4slX1_)=+qOT6c&^zDrKJWwif|^`w-V@) z%tmAt)n4OXh_tLMk&&-2uWv!$0rLViLo^NN*7Ob9Lwhp+^b=29+S;PFayT(}{CIvT z5}~->xu^ZUOgGkyV$&=MHFlnU`ss_8FO|EIM!6===ZNR^4BlY?R5;#`xMrbD{wNRrev4 z3dJb|yg~&>+~y4Rgf!-hSQkMt7sU-29x#q zlWltDNMTlLei}4SmBOhM+_3+;WnOj7LiWDtMriD47c#K2*-vQC47s_Xa!5CJLnu!a zN943bWlIHT?g+;e#Z6gG@m6--HT^jt(QDz6f-N@NINQ)Z5RHh`LT=D*dyBnp6yGB= z7H%wDm7<|V;ygyX%RTklzBT^RBPq;LW;>e%cw1(XgQ$JDxAwmxl+r}fPsCFkb&-PF z!9Aho)5HY)3R)<++?rv%tJ|0A@Yr2ab6LL|$}G#;$BoLaJ|;2GrF}v?fk1UX>0Pd;maQx$t+R#TItJe)nGk#8 ziEYI`>f#Tda4G+9RJ(#G9Y)fDwaXxjX*eA#h;1}5n+x)e4>b~iOv6cecs(S;JZ%=&3jmJxs>`7U)|IH=eet%&cHt;8|zk(bpmAF0FsDUNyPoAC`LRq z6eAuAl8GVeCx$4W7@~S6JxcLHa+uPEONQTD@=h z>h$Okr$>iYdt`qPt@O3bLdh?YT-BS=O5cZd^*-#V_hDVV59`Y9Ir=`d()WS$W7h&n z0fYv(LtvNC@>kCq_E?U;>5Yesi+}l-7Z1Hj{laUEtnpFfhkSj+$QVEWsn_(&{rB{* z;p;v9a{N=}@BGb|{^mRB>rdTxS0Q@nO>cVBq4Qt-;(6n4K7Vh2$M{b_{~C_^h(7+K zoaq-nb+>(djHA@`cingD`t)~n92NJbA;<4oq&tPMjA>TG@jkK87D1lZtwcUc!<+4C zTu_7`HhQ$wLEiIbZ9@g(IxE?CmKnMy=zopbP#~OSDFpj18Db>PZ-sJV((Ri~QbfBQ z!s9e(t5#LG!Xo~>=BAG3mV+4+HcDADE|!&VvKD4ZTMU%Lrp+13y*&CDwIf?JTn&dU zme8?A6vZ#5=L7V&SLlDL9+;c1{{ikM>gbsJrq`$EW2%06{h59&_J8AM!-hV+oN8$I zv5A3+L!sU%T-)AWMOj@f6Sk3^+qZAuTsDM}Ek&*++=Y%0vH;ZSmkKYXr%<$^`=4xdj9rt5 zZsqV>4kh&A_CdkaGzZP5Fo<{7p5da8e(3^OJn;J0zy5%__@ze+*KU6Ei+}isfB40} z-&DEV-uRApyyK0xuefQmWK%M)-7nHH1_xQ?pDn^z) zIO_VW?^Wg7U(pxc;iByR#xH!~oLYM08{fDz7`)*Pcd~2cJI)TigPc=-yJAe;aOWFJ z9MIP~D_v+#*zyX`gET?Y11%1redi?Rnw^Z(yn+w+_ zuf5~$yYIgJ8VU)1@9)l@J^OdxtKhT#{y+WGKYd?3%nR4vc;k)NE<_oL>054o{N|hT zYV+~OzqMr;XV3nR@9(I@HMev49oHuH;r2mM=b(tHaUy7*N(Z?pKJgl+c_LNV*Qsr< zudi>`=rfbZ&dkiP?vGPg*18()UICP2i_pfSRJhs7q^k6=A%v+~!+SV0lS>efRNLh6 zZJYpdxIRdFgm4hWG6TTeUE!2`6<8lXik~1q7C-dB?a&ix(~4on#jH+eb8EMh>1=NA zc5-wDYHe@kEGw2RWs=F<;=#%qzM(bzVFwp;ymfFPm%MPPu3`%ZFR+yGOexdt{_xNL zGL=W6?#~lZv_4+sd zzl*%}jmIw3@3?J7t^NHs?ubSY+*-;IP85yxX@Sz{&}I;C2yY>+1NH=uH8AlTrHm}k z?1VA8GjZBR?NsG0ez!A8YU);ZGGScn&ib9`Z1*B9P9ZHMi~e;JbT+BWL3ZMv&UULU zC!R-LUwG&yVzghAn`d>4tNXQi_g3a282l6Kk(uSy(Bxud&T}!<5Jvu3^!Q+4 zq*8IS-^I6Aq|LUSGZJgI_eaGI*@C6xjCZr_U##GB5pbxs_9JPD)*UDS{9cck0eP5PeYqxPwO|XQ{VmI zslhK9AN+3V?B|XD{-a{#NB{l)PyYFz|M@5HfA!#2zS8}z!J_$*fBc!djVbvuf94-Q zat~3zTP*G0T8L~s@l|&I>Ju9)x7^HF26QU{(eD@yCOq$8H12Jn*%_*UnVOmk(uy^dG7?6*23Sht*5_Rw!1k z?6z^5M>5?y$I9Od!q{x~Vo5U?I&7km=7c#QNUk*7W7I76j4dPV9ShLd@s{OPKo=IEVYmHvJ1~9Ctxn66xf)bU;%Sy9R z@D6q*y4+ZJ@>u&6Q zGNsQ`pbF- z^zekv4L&b@7T-a?h(s_smabI(-w$v${EEeeK8rGfBQ-UZNyS4Z&d>J1*&A<}QOdw^C0tXvEsB`Q2LBgc4XCX6;BKnf@G(#q!cEKvUt1S>qWdHaA4TQvXoYX^j_*V%^=6fUslsuMIN-;0amhs zzVV?c;wJEgv}1T*XkjTurn^OXrea#ks}l@|!i#|$4Qh0fV6Z@61j)K7S6Pg(0`z}k z@dGYR1ENrYZh~SW(BB6z9NZ>I$VyD<6-IpCRy->?Ae0mbFDUih0_+4)JfIJfOsr6# zNT^|MihZVXL}Vr4m$Ee2p$%AqisTW-5%)TSdK%|p+mGMGKcVMJo#7@*Lt#NRM==)gA_s*;g!GT<}r!m zA(9uG{5GE?oPs+5qsupqh?uL26Xsb82Sw%PQK@oO2~sIn5Hlg`+H15J@!yJO&YDHb zUFjP$1IvdI0wNvchaTSabVouoJ8)Jj0U7Q-+(j3)(7*izuC9G~DWBb@pw|u8%ay!u|3JBj_2|TI*ZVoeWVS&6F96@dcO1Un&mbmq194wPh@q4feXW(g z1YhQDXr-@acD4_o@d6zdpLoV0`l3V@nO0^ps3pnYhkrmgx|#O;UG}VXxSzlUmI}mJo;tOAhhb zsF4k#i!cMj;X=%}*bszwZRGQ%xZg@8zD1t{VsjS#(xZpGXBr1H7MeN@v8_Nn;U9l@ z0b=<8x{_*=D8X8)f5`V%B8*Pwetrss1b~tiX#OE7ZlLR9OPjk7O7e(^r%q8m<7Z?Y zA`<>FeKV#pZojGz8?Dx-2{3ZCi$Liw;@)e#IHhDfX9at@;J4g#60fP%?Yg&DP^c~) zckMUHO>i&nl5aXC<`UncY6?74BS!5|X&$cJ`suT zN@;>U1O1`(QL1H7L%|?|M5$SDehs+3Wyy?$V;YF?#gGF*uh2Hxy87u{mq^lqngg?> z4KWvB)KbxV?@e&Sz{nLi`GK^I+yg*<=%{7j@&RxlSo!dS4k%8?C3@GTM$AVEe~oMw zJ>09>egve4jJh}C68gbNd*f_p$`zUQzs6|1S1I*+6(q*SQY(1o2t#p(LuP~C^dAwi z&j0qi{9Zop446ev>PR%0N@DngBa&~_WznF5N37B$(Tc>G>s)_R1j~vLKMX7Rge87i zUqyT+Qgm~bW180-)wrRCM|<+%}a`N(;-)URw@c(UDj^4xj_1*L7px^+S&LreRo zQ-{grOC3DQPO5$WnT<-noti#)I7A>4dDbi;boH?*;&PX!mz@s1Lz$Qa8nXNmH@Q8t zO~3I6(iS<|IQ{8uT_?GZRH31ky>9ZRbUl;e%2bB7iM5UTZh31a9kL!sU)ieDI5j!7 z8;niO(15vg;yQ*#e+?0bx5mkJotxuFkSO+c2OSVSlKAcc;a{w*VBdsA0mZ(#&Q1BI zQk&?SL~F3TLilKaa4x)E9FJ3lW5U+*tE{NRhDofK9ScTmml2L-vfM&88)HR|2yu#K zYyFZuB8ko>udB5!v2m^4ozk5n2V=`5GZG6P=Go}1z1<@ehy%To$fL;xXeleF+NCKn znG)h@Jq@aVQ&7zu|6iEnqpRbmLAlia^7<6L*5R|yy*hsKghr%0DYUCofN8($%o&&S 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 z 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ÿRmv`<3`Zd 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ⅈQ}ZZTo23@x-{4XxHJb7 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
    c2|7XaraacIx+`@TsANhqbt{_6$IK=xQdbll?u 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�QKu+cp46727DE zJ$(jYZjU~Aa&C@S`Yq1P&L5wjh3h4YyfvlSd@iTuXN$J=UO8B?v{AoVDJIgzQf6`0 zF3uzW25pKvhZRgt&W4GbL`pAPuVxiXOJoX#f}OOImQrQukA5WDy-*k8HJ;+aU_8)W z@gs3yAudYZCIYB@y>!2h>2F8cURXlZz?8U|MsB#Axpy7u5@%;q=~M~-v&9V1pG?(M zJjr0PN4Y90!K|uttE$nE234wybv~^Y14}Ub%vz1@?Y$k;sKCT-zt`T|-fp;8p8Jll zmcD-lV&hp$-+vCg`2HUn<#GxMo)rF(XE1$Vj#=UclY!tzante^IX~qa@Y5SoV((&D zk9k&;Zj#Z2;c7a!aNL6Zh7F6NXbf zF|quMEO{6S-J95OOdP1a|0p$hlqpqxU%L&-rpP1kg0=!-7RD4wyn^M880@BKFku&< zMUoVW&JWaxvz`$}tn`d1FLT!CnTmMV1p5PM*WZP9{Wi4eA6FC@QM`8o6Xm475Xm^E zDfmxFF2a)@lqQll7^T&|w^fi2hD;_m0J5|Ot+35*QmMhX4{|=v4p%G>hZW16Dw9;|;jk|0-J$;I9k8SI z2Xwg96NjmZ^5J^o_>p=7*3vuI2Rzy?3*Xgm!?OBg$o{{D>^}?HPs6gx!j3AyvdY4D zMI)*|g=Lk+CmHfx{hwF9B%N2!JotcT-2&kV4Wy0ijgZ11KG9e@WNAIn?e4dmt({xD zw;Fo~dpBeH0{W7iS5f2YfszcH8YT?pda1Z3omF9b>cXQE=Uo2qq+;EdY~bz8s7K*h zSX^0JSzJDT^4z(VV|c8@6o}{0nqoygy7|f*J2ZGkoc* zM)7rUi|C1z%1m#<;<&GA4l#y+;irYg^9+ZxXYxFA!m)$v`b8{X8h4#Ns7r)gFX>sIfDRaK3kF1?-BuheApVj-O&a35PHu2VoHxZ8S|-w|G8MK}nxb zkq{hn3RNxNlBsbXc*Y4Qxo4gHx`=Q2B&?Gsp`o6FhWa8j6vh93wW828v=r>=y2mqC z&K|9AeEa0=(K^OANf4nyf|^Ie&Y-5!fLxe?&99XQHxfk*_BL zE99O#Pz{0UanBuSgTUUvQXWAJL6yT5fM;VIA@ljTVR5LKW8xe>Wg7DY1_h$OkCIVo zMVvlTE~U``Sv+yLEJ_=Jy<-8C#(|De1gwMF2j8inktGn4C*HSb(6|34`u5+4^1p~=l!moYdh-ICAzq-3q}HTIM%V>f2-4lySTnxfAg)K zTX)i}-=9T(Jxbn$jC)xx2IJ^X{r&F~pqI@O8kib$8@I^&7BJpSknVZKtU0xI?FvSV-@M7ioiOO=RWakSuvZ%;3 zxwq-PA1=aegmeN*BALn-^LN^F+s52NDPJsN%5UKGQ+}Gz^@rnr(j#VtC;>WmQ(Pa` za+qE*+wg_8+el@SD|lV<2e_=>@%#^uq9(URt5v)58&}q3XAOM%eRU1=d*=C|tHx)t zr}i{s6uXD_()Xm0kO#>J(iu40Qn%}&?{SB49Dun<0^;^=+dFqKDFs)?^VH4?*QI0N;^>>=0=5v|SoPR+o?+aAjc4kJ*)2M1#Yg_>V{Z9Bd zo{#pyv?k{XmcTzlrYRlSr!?#G5ZU7go=mu5gBN zkEB(5#FNg5czQXOxg(N)yV*pMkVHB+TUHd;b3^88hl=P*TtqP#zXMUkqMM1SSn5D& z;esb}C%oLkQptv_T-k$G4wV_%dsYsW6WMb<@^)lHc9vdWdEeU+foc6C#jt%2sHPaU z&!K;;!m^}U1zKrFIU;GL*)Id-|GW}fY4+9cBYyTDee#o^{6|kb@l+7u3hx;FzuYV) zeGhAtj;Q)^uMb2d$v)D`3^3V3LTlw%)3H*CedoAvd+|jK*(@?t_p#^|>s_7Q5qv<{ zg6K8!!0|2v&-B0$1WU514^i|`^xE<~>(#GOZVEu(b+6{n8t%1v&ssKu=(T3^=Cx}# zn?pT6KcCl!sm1rEpjP?jr7gteNssW~qMQYtW1srQaW~3Z`w)L zYaW+kX{FDHV2+F(Q-;q`K5V3XZI)_Bz{dzPa7$?Y{n3fA#vVSg6yu^3^LE z-H!6*D`051yLaQpjlFL7sppN|J(n3d`{^qhr4=0T&*$ftPMkQgG(Z0o&&v9aN&9R?L27?a z4RUab2Zw%1qCSH6l7xB$?Lj$8 zIX+nvQ$xYZ8HveIDDE+Y;sRS;O2i0wHGnVHdgBcqwL(*QGMYsN68EdiyNGR}EBCrI)QXB(e<}bzh9%i_hQJn=r zJ`3IV%i!r}z|;Q$Jf+M8VXqRA2MhWsUa z2$O`ew(b2+6B$SY_$ce?gaUI7x`je&$)rx`yHfie)@qMNUj!@6F3sXQPWLj74b;RJpVMjSyEA-}K3t$M zxs|1b%K-*4*NCVtjdBF}7)0SZkPkjIP4h8`)J@Pxe2J7Xw`I1rKAn7^-qH97O~EMR#RJ0{)R+ga8x6 z2_&}}u)Ywmo>ax8TFLvI_f$zOsP#cy^h<0I`}`6c#JA&97(rL8pidwk za4vX52C=s2?^G=0xk1ig(D^>l`55T@@k$Eu$Qjh(NMcQeiDSqi4E^x&N*c$FP?a5Y ztcr;w>&Og9_6cbObnaq%Jn=~4S4RJ7^tJS}&p!Lw30P9tPE?iGo_+Rl@j>DdJH_z! zHCUvKpKyZtC3|!P9U}fvauOa@z3=eSPx1%&EA&4#AzqlQ?HY)Gn2nbuYa=&rHgW?A z9ma!9FGZDpnn9@_5_Z2vtx-xfO5IXW>^IeDq`IYGJv7}osV>r5*wV6UCb}1`s_}e- z)r6KZW$nyrhEf=&L@Gk$BFx7NWmeU#t*y>_GJ~YaYzt4Bs?yoos@d_vnOo}yj?>AP zbUJx4vw;dEUVlx^ituGdIw#TPN_?bn7^;>1+s% z2Ckq^RRU4t4F428&g)jCQw&0ljtSDErmUjg-*NbYyj0P`tU|F*SYq=WE4r`>jYa}&9wcQ!Y(5=q%w$}U^1-sD_G;zYx+%Om1Hs)$kgp(?6(qGgR# zs)3w0;2B&ZBQ>e4^+9Nui?Bdsy{arUOe&;dyzFx!4TDt3m{FQm2OMSu{(J?2Tu`GCaw0?YDqZ^(}F_bD8%%(3WeXeAzf(yW%2r^W9{x9iq}sY?xT;s zBfO$k9g2n=hLfKPUNf0Hz-taXNxo~m{&0x8mOpj8zBv`IpC-fLj`51zegQGx1zvM+ z6R$t~;oHD#=63oOdGb-FQdL$HvJ|p!fN`g0pkJ-sH=Q>fU%&Dy-hqB~AN{oPX(Os% z#kC{))#iTFh<>##*6cJV@hZL@kQn+^)b@_(SDkFIZi)S#sP0|+4)#RdT-8CJ07C7>xSrb&$+yxhW=yXvTzk#fS$+_Jj$dUi;zjheP}t4Ri;*HDp3; zV(-rME7EiLV;LtYjbCfm*RQVO>sR;DC|)t=71pnIGooKX=YW_;;}tp=1_2bWuV0ag z#`kF@-=2P@!3fDPh9rSKAXjgbm+2!RdqCoqa+iJrBM#3V2v&6yJK%x>V(;-0>#y)8 z#15CRj?JgrqU{(1+woU;6Kair=eqt1Z}+cm8aMTuM$EJ1{fa1?C>;U7ZoO_(c5-}fmNP;sVJ@AeubEIDbuajzl<@Mln?-nZ%KAbAnX>0x?=+Him1 z;hEYc@ccc2XUd_x2z%in@bMAwkupO+7O7aN8$rcN%NZ^O6)P8wfnTu_eED~N#Y*r* z7X{L#Qt}m-oQWG-&<1B_rciGr5MRL<`z$DhC>CDZ@^6DuvlwH~VvIct4PArRvXE&jNQ>=N;|2HC7wCDi<|&-?G}Jb+01FRPvD9lUGdRw8bfClo$yU`$9p=5_Zy}C~!tj_{I7ZKCbE9F~8%f?*@F(78+kWY#Xq$zs!2^#x^Os-WGod^o}@&OV$kr&*} zSFv^%#bG%^IV%GW)}ZF{h%V=Bl$^GBZP-i5iY}H#eW9xFH?mnc$dz6xT|)}YUJYSy zD33)1MCxm2a9|{pLnb5!+=`4GxyT$lM$%M}qsBt0myj|;>*N1UsFz4VW~eSW$;`(g zGhSVAZhg>LgTnPFjdIMgSz}0^=`hs6APUjo(JG)`o`aH!DN5NtNVVLSyT)!+vqgrP zW|TYTgGjeO*Oi!-PLJk5RM6z{T-xlRZpSURL4O68XK>#p+IU@V<;{GZVB)ghNy9Z z1gL#-04aUw9+ls!7{Ud2O0-==3hp8@nUd%WX8<2_s&grJaKKV|q?_#SVnc}`<;LK~ z!2f+Le;uqbWH6QuO0dmMI>2ot=__~yTz?<9PTt24cr{f++$C-%18!!coFpzL11@Hx z9ApcUOMEr9$0uTxWz`mZPElPG$txt3hNp*do>-_TBd03Y#iHpNs<5?MJu8>1=0jW| zE2>c=Iwu1HeiO9rTw%c}USgkGkqGrMOJ9 zc|CO~n#HZfE&AKCQAvU;9;N75JEJ7qkJeNdHwlK7I507l1dVMwA8eNd+!iF zR;{7x3=u&es2E>hv@eN>Pc4V_6EhxtA+(Mc&nU|6~Iz|yCvuXl)wQL5TUp`3(v#Ql{= zW)Yh?QhKPix6@Mu^B|Pv@KHJo6VYa4kYQcBi9GS}vBRoqa(AF@d+#?Bjy^!*X{JZ5 zU#cK-3UWu*?;@kRC?V{mcZxfxZA+ueoR;qFsKa8WK`{-bbY-)$xmjtn=#jR{j#YPN zvg)vX3$s8WiAaB}PLEH1j2;PxB*^N}OkPI(5*GP$$-AV_tMo{Bm}{_1Q|qP%b~<^G zJUB>F`GnpmZ6r}y$W0-=T)&$Z_m?v1ksfrkK}JK4Sp|j5xZf6TPgtZX`!KB5PvH*# z7VasEO znaU^pO6|&5U{_IRjdQ#gc){sR6aiKjsQhn!fmZ?6^LRmDjkq03vrDFTVI=RJy8WU)_oH#rH|<@WSh{hQ-lkiQ6Ai3&3?11bdl-9vK9vD?dzRN#?mU~ z3|QOmmouGur(Vv8w2I-o1TCO$Q5LyT)f%N$8WPe=4Y4ZJXUuosD8VED25THkv14$~ zvxeSB{L3-+eB#)#%Shf2+F}3YmoMXA>|55C`LPQZE+;Nrz%kT-1Yr;CrJUl7wq0DuJLDj0h2gVo}cE5v5;KdpM;B=~nwyEJh!xy){czafSs| zE&97C7<7JynI&`}^{ za9sGPC=enz9(*(iSB7jmp#TWrvjnJwQ-eaZIOmD)z%y}uiL-{t-;;Y(Lu@ochuyCx z`u!^F*Oob_c=i#_sXkamXVKR0({*cWCnSeVulP0?MH`q!bfSOUyI|NBgoF6Co>*M0 zrniV+$PMJ6Q}gVOQ_v1n1D@has0RE;pcEIN9TuP+jzc>vKs)>*w8JOBuLWp_g^J+? zkP;BX8!G=nJ77Z;81-+d8(~rz?5DzkD7ad@S$-f21v=2|l0l&k zVgT*BejrL=CSS-KGwya{d#ADEZoh;#J4n(<4fHG(AckL@Ug(EZWhLy}pjlXq3{WRZ zZYyD{rMvZNb7bGxOC)V4Il9#xB?IeZE?wH~>o(aZC0pn?j1erSX{e^>ZDnat zD7uQ7u<>BjABf#oowYJJ{zI&MH9ACc1=9;j*L=}9HkbQy1w zXfyvk+vYDD)ZFh=!{xoc^pbb4NF)FKM6)S!r6Z>hy8u1)e#pUtkb?`*Qx|~yC0@so zU`WN25gCdB`3|8GCP}8YMCBP-N(21pJbuck<8}uvD#pCTGr|zoFu_}ZAxvqu2ytk@ zZf%K@yI75#?Z!)V9zSKjke?~si}PwQ@G%PJdWlBE*umm0EH0p7Cp!Il9Y$jbmSZWg zw}<06xYg}8>%h^vO88mV$WxYHR|!Mw7=Bih`;CrXFpDP}`x|g$8r_@wH?E?{@)ECh zNZi5-bnpc!h%opE+c0WzYfDtbko8C46rIOUf$J6%x;U>U3_ju(5J$0%2Y4l(0rvQm z7&b_u_G+0J%ug|#-hs1?^Pq#MrWvY)B0fmeG$T*)C(uVwWG_Xy>G<^h&_5VCVjuPt zYEmorDCQb3WVoKsA$Pxlo}E9CWGd&l&=N8Wu4UycrN><cRRMF(;RsnoJe1ae*7Y^`k@2*; zx?Zq(Oe<_?p8__?8w5^f%^nPF)PhHth7>)Roa{34K7fy@%;i|!!GE=ZYhgpl<|ijA z5dO=x#9)9QZZy_~<-7{6QDoP9!L>)goAcn*`ynx*@FykYIPN)$;yaEN#c{&{U9>bw z;kBxgh?7CN9#+4(V28rl(6FEtI(40u0lXSOC&YwW3qFkhb1TC~7 z<`IET(fMd(zT>rEN~Hpld>OTDCQxq}CS@c&Rc$;TXCy6As8~z*)rw>(qQn>U4CQjr zY7r6|=(vftmr!tWq>Ac=a;AQcF;G#=)C23mOuZh=Bst64R}JW_Ow)3fy+i?EHDq zAs|6`&TRM&=FAEO5W=GY`NYBzdR{~x?!}W|;rR&7-Hw!z;>X4ylnz$$)Hzm+1SW## zgy&@0)@!E<(#$Ky!!*iJ8jF;WArvQpJRe}XYg7b>7swMwY-2y?re z3Qfi)urx53j75E9b#!QZ<2}Cc6iiOWDqU5z*C+<*9C`}!lFF0`?Eg-`^}-8pEnK*;P*~l) zn*SX8Iumc-df_UL1a1=4y5nhD^7yjv7PA}$C4OO|pirovzLgHrQ4>e84kWDWY2R~e z5n`!Vr|X@HM?AX5pf!Mtp^xR@I!Z5N4NCWvA0mc$G5Uf#Xj6H!c2;NoHbUR2#;X{C z^KL+=*hTsU8X!VTBI%>-qMFuhdDgjEzd1w!nzUM-3HV&fXoJo`!?3rCq(&M|JqD;m zQ^mz{*zwQ+1GS`}>KH;L$L^R4&~sd%DiCmi;|f}a22yeP(#$!!0vA^jS@D=bb#n}+ z5eG=sOi=rpit^5Ys4%AKkm}dwW#29nF>p1IrSDgLrm)NLI+92x)>)$VujkuD45Zj0 zvWU9SA~3V6B)s!BQpt0iD0CmN7gf-q*EH?qfE?xn8~eqAI77CQFjK${;x-ZKNfDp} zy4M1JgjOB!1NZ>P!Ylw}zyRDRwmb?Cg{FF`P{wJ1Ws^&Y9Bph`Sk&wehr65xo5u?B! zpDEsL#u}oS-Ec$NSky5FZhMhE2X;dU}4X)CJdd_(QNk5HXMHq`v(~we690{T& zI_^9Cxn@K8E4s#vv~UQ8RBxEU=R6aJCXS7;*osYAIKe?Fa@Yy{oS0PZgi2BuR2rF( zbs}s@(CGq}ghyF6Ss>#7fX06kZ=%%U5onDHnf?t=c$qZD>Bt&ZJZ zvwgF(zu#^pZX&Vtb{lX!xpJ*gMP0?_F1{nxs*>0Q;mDb*n}ne zN3WMMmk=C{ie-KHDywsN!KP|@`)1Q+nVD=)vsi!s3&l=@zK>3?(YP1ief`hRpI=X8 zN;Q-sS2MXtAAYCK44SqzTuf(`~0 zND-q$$H#z0e}Hw`OhZyQWD8F9FkUu>u<|eV$A)Prqju+@hsB^sZqwd(+UU+kgH~hY z?(JeELVOn@VcW&zES(`&Ih*jq7Z=aWuCeQv@A^ zW@d^Rh$xJiISb3mfpDvsGc%ZxVf zUSrgNib5V}uz?=pcQ{LCX+-R)JK$xI7?;P1L30*%y0ht9>e?8|&i5J)+3V|R!iX4= zV8kg#!WbU2T)C>2vCOYlE$lb$zMG$gr}O7`cH}%5R)J^c<}hpAf)#|Kp~%OJ=x%LcQ0fPYYXym zQOU;z0?V#=8)-!EH?in&0RZ?-0H5Q&StLv+RRXgKAanYOSu64hQN5DSfoinY`=7xQ zAfJ#4OP~BgGqCh2qXDh;o)La&Re8+!3x$f6kPBF91#YC!+&Go5_KTHhNPTG0?f<8D;+E;2OFmSQo=8qG-B{KJO4j- zZyqPfRUdf1h|G-4j6ACjs}F(YPHnWhq|k~v#YYQvhqIm z`+E_QS5;RP_WrdmkBE%SjCk?h?|Q#8R0tK!v{@__@daz$29xa+O)4R`6rz=iNeFGl zZbWOL%44<1zisu0c)Qn;d$P#Urtf98SMwZ}@}R0%eE#C|=}K?}HFGlA7vgP3RX((w zR?8~Aoc1SCqU7^#RZ>pg)3&-FMy{(=p`>C}LWiuzxyHE{iZ4_f)xv6_dI>ROKwUkt zy4*;elYmjwAXXr0B^p*M7b%0^TBl{GyF}nv5Y?6yc(qUBMHW;bgO-a;cJEwA^5K@Z zoX+lRsCqL8grgB13_1){a{(tb~Xc~F*6%x8%_1*pl(KE zt5GmE1$C4Bi?GQ?un}w*+g89LgPd`(seFfeDTuIufaPljYkq&52uXk4toa)L8Q=75 zvwPRnyB5!yRyJrc5Eg33g+NQyE?%t3Rz`3^G%9xsRZ#}E8^tSt{l>3;ea^&O=n9Dg z!{kluj7Rbtra*ii?Q{#U$G`%gPxxCip4^N<)NHZbF&m0%c}>}dfchDa5rirN$%PPr zEZ}Sj=en(>W;{Q{3b2fIn=-w%Xv2QIRxBa9JoarYG}0B|S5(>>IdMqT%OyEJ)eFl- z1r!%6>3qJy(2WFJQ@utMz*hsYp`sGO<&O*BaEc^kNhxPF8kRuiIiRwzx{6~D#S5yb zl&S)q)qeHYj0~%QrZgOJ6U1000|3zS>bbSGRyo_P&^0iun!OoDr$U$67Qn+40)Hbw z&S-JXmeHxu)duhcgxe^z(F(I^0DJ1DL4jG^7zLDq4GS9x5uujk)J6WlByiC61i$rEC++FPsh6_lq*=H zS1YePlPWy(O66*3)Vi8thixIJzUU*uv6V4emE&<(v3yW19ru`j=#htG(ZgE0MiQ3k zWii6Ha4PapMWcVnpO==tpU)Wi$B)PLisk!=wU6t)hrZ~$`S1k#``Y-2EOu0F{N{)G z!{Nhov5XO$Iv&@i#krV@P3b+Zw%;S>5M|YDAhEd?#NN$*kDimAqf$40%JR1@{A6qO z3btM4W7}?Q&Rw$IxE>uuLj*ybSa4L+f?ogI(LvH4@de}2YOP*u28;DtmF!g2COd4A z?!V}3;7AK;uN{x;yQnl2bw{Le!+HSo@^#)Fz&u~$!$gy>HO2ShEnW-e-VEl79QoSb zYIz=7c48?6wFI|1u@o-$n4MS(3xugv8dfKk!o`Y$a@_Akk?!U_%AZmQ7SHFij{lu| zR4`%Bo}z!qIC7(QEOrSn2F6qrN?Q#{Nbv@iNXJJl6LdkZknJeNWR7K$JMj|4ID`t!Th7Z=nUcsJhr$$Q$P?a{#3esNJPs(+^b zPxTFBuKjDB$Glqd9>yE~r+Z{S%isTQ!TF_-D4Kj?S@IyV!&QrLj7rmRrA(Iy>!Rn~Epm5s{k zh8ebsGgo7>px9WqCC3lucfPHzn$<$FQV6u{^_?$pc{<{Q|36=;U2ftwap{sQ|Ezd} zT2X~d75~i475oTlzUcCm+Qkc(;|;#OWE85Av=v!vEc;wh*6sTi_Yj@kclvxmQ`f^P zSv&o_u26Ls!F#c!ZvOtZ?qxXHw6G z!lOC$=d(Ul_0=em<8QT51Jp`Yy?UsNgRS3y)n@;E)>OfyRV_<7VTE93Xm1^)N}AC| z!p(9TTMgTh4Uo_tQLNnpYx*>lo~Ko89Dx6PHl|iCZA7Li?T&x5Y7pQ~6P+BPX`#|; zE35v50ef&ZWzL>5EOpRQ?cV@np1$}49o6;5R-Yy5^_;D`?TkS^EnvT?D z-Dm~twMM;SnEFe}KkE;+jCyciv`}wrVm#{ip@i`HVlj>E6g)Rcgd2?cTl>}`Def+e zCMz28QT(iG!nMjxlHvHF!F60R+RVU)if>reaJbz{s${)tP`iURA#N1Q>&EgjH%pa; zvo&kHx=KcXp?bp_mln7rEf#C9q-EHcfK{Wkx)BKmn-srl)LH20GmT%7)}Sy0XWCG> zq7>JH%@8!L?v`>2kgn?T<*GjsA9FPVw^A$nd zjjA}CK)@SeJla8Bd`&jiug0oXvslosCP+Y$RwFwBR^maj^!(-Nxi|vsC2=%?tT!*! zvJ>LjvkFemT)BiAE~4E`kasRN;@Jrg*Y=%WemvV2;knB3V>jQH3U)-JD0`Mf*0~gLgi1MD?Ib;A`zb~q=VtB*$LnQ z2a zdJh8DA~8Q)R|9~gg*2-UA2BY61aBdz#q zKAAM;lGE8N8nJduJl9i(%JDIE>e>o6+1z|0*~kXC?658FhS+3F8D(>X&XqV)#36D+ zAK|h~7cXY~leouD;^LAGaA0ndBhxspPiNFC*?>3}_1#f`1Irce5tU$QMeZ?+Hx&-A z;zEx`h>sW={Fmw1W%(EoC!t0o1EB=#GpdnIaG>nR#73&Mh5-s^qv8yNDUlC|SQ+KZ zCOD8pJy%{w)(YC;XjYFcSMcjwCjSCQxJle%{Nr4CTpy9KO(rvhT=M^nN@fExwt0@o zxY64oM>9GF46yLzrPL@GH^rP!G3P#+z>G0GoH6i5%s`cgNqCcJX7a<{$k>%x=;;r<7hax!dJ zk`5H_Lm&1Qq?vcl8ElohXD$G%fVU_o_u(*5{1&8{pP$387AVFr5DFf0sq9)_qO+{rS@L5wgFdD?!rB+ndDkw5hlbs60kF28xzR}CX#Ys zbktQ!1_CVJu!o40Q3_!H?CSlx=aD^Y!qHHQg0gzCW~`#6jEE6rE>xOu^pv8eBrD2j z6J4b>C%Vc|iGHCWr7sRTf{#wWM)TMzrp7PVLw++7bL|yn-zeIF+m;`c)KN=Tqo9*P@G2N86cFF%+JpR!QZfa3qF9z>@VktO(1r zluuRdh`eQy7M$uXq z14F(MAPCCSv<7RGY7EtzdEu3fKrlrL`WWeGf;nWRSga5WCf3&0qQz)5m`_k-iaovh zxDEKb0}PTV;Typq@yojd48j-M0UqgsG@l1HHelmh0c22PYug$A0F_D`V3`~=ja{s+ z8nrnM5!uN>o7eh!b2PT5VIs@b9FTCX#nlonF!)2Uh`Eg6D&c|wZfs>EhHyyAVH&ol z0JE+9(M40tP9KbPY)YwAEThh9dlFukF0gbiV0+V3Z`CtC5Ypwd7bQbYL6Hw00S-@3qSu}3+6-9L1^uh%Msl$B5f7K`n6C4|%%%=oM5 z0lUiaP@+d|Q^9{&91m0wUNJf7-7;n6UwR47xEeuTuxiidp^*Mzg}Ua3O+GFcdXzX8 z>=TRAuv&p%_9&#b=)b;el+^n@+xoZid#9$*wYE;5K656Yyl?O5WZb%Xk))x?g$$KF(LnKG`!!y?cVwh(Cg#zHEb@s}lT z;f6t-h)+Ciyw-%}hb62uEcz4yN_5JNp1X7O9Pfcw{}Pz+D@v(%L22Ftul^+x!KEwjQ*`tzZA}t}P zuDayRxAOTjqjBrvRVzN3+`Cr*@AT;wircBF?9tv|%0H7yz7Lu9 zx9ovqHl;;$L~-o|4rem(1;f9}zeqiwOhjPBvf6FxAGWebMP&DWC;vm$4cLg0+<`3$ z>~7aTV|nPw@QV$G~&5S^OXi5tt#mHhC}ijjO@76 zF^Gx+LJiD+SW*1YV9_IJaj8p2z)X_%2ZMe(;PXEiaAKP>ZZ^O_+N&v|fS+>m11jwd zsEunzf9G|(W}eLSC{iAmmbaM zAI+b9;?cZ@vPb!N;)xqrLM|^YpIkb*Nb8i0IO+8|`4Qj-?lTuU7G| z2+Xr&go@w}YL*-F8$1JA@<5aA51QESFvhfYH#JTWRwjVRiVx2p?bWa-P^+9H%7I!r z3|SP)==3%eQjj}<3U7Y3xDZx{F?{;a<~sJ6--7Q?0j+ldt&*#AYA%9p#_BabxloE_ zo%jo$xQv+79zdEcoATAITHLM`;&!W00z9cY>_H+xSphhCkO5qP5;#@Y6Fik63mai_IM2!c$CG#hM zt^CPHpIFKRT>@Z-(i5XsFD)-$x;i?MP6K2BraVsS7%F_>Bsd8b;PU1Kx4oAKzA55O zu9zMR^>`%JGz%0cGqHW(vRp7zaZ|k9`&81Sz@Z;_5{d4bMwKLcoGs;+y4Yo(6h{(zM2*fe6ocxhL$oQ~38d+wo-S+GW zdw{$>@Y&ZvFYf^I4j^ITmqP4=d)t;t{GRRk2$7RJ2S(&~69UU{yUp}j!#Yb+56AJT<}k#sFI1gH zpCg-i*-Q>1n@9#AH{(w?(~rp8PU~dyA;8#Fl@jCC$>f9M6)NM9tty>NKG-cQH9Kls z#ZD%lnpMIyS}Hc8L!LOB%;U`j(M_g@I>Ku{$pSQ)e)b7g;NFdS+fHw~CPN(p5x3(0 zsJ~R~!-H@x)gXIHqc|Muabm#$4)2J(PdG;>kZ95m-luw6sv)@;* z)tlDlaFHg?Zn#;JPeHFW2S@ofAd|dGJB)H^^Ed(VxCkJ^EdX5@^XIp^s}e8yXk>ZjvZ2^LP_}tN4b=<<2H2Ii6hp4 z%ecY8d>xxu!(T6#l+}|H40VC3`R(m4zr~mb)-X%@B3q3)Nf4^djoL=nx_BFWNY?jn z1hU1tNM4>~LK8vgJ3;hXq@W}L;O$k3*{~#E#uonx3DAesP^glxhz$rODa?Qb3opKSNuz-Bjg3JW zMmBQd?Z+D~fYP)lAo-25jxF**du3%rC7kaTby|!E6LldG#1hmg$u5eOgr*aAsZl57 z2R&t3MTplz_7qAGi)BoC^XrhNOwhACX7|c6(xnuILL8s`WZS9cqgVIxe`kfCMuR7j z*6(73#kc)87~wb?JR5st96hvDFL@VG{$99#Tt#@{@NqXtCTKxZ(zTSGz(K{lkOx*a%x&gPZaYdwRGdp^LiS@ zWYW{iF?Whth$ZzDGt;!tm^;&C@sNoZ=TW|1Qv3ILWCm#L_Ru{jF0KNn0uymy!W?Vs zM@}3=Ly^=qjQ;fu~M#LTp?IMp>sA!CJeJL9ypLtCEE~SU_GF&zNHL!sQE> z4pqdefz3xd6%r-5T<#3ZfI5(uN%TOR211f%YdX>cZVm*FyP(wzR(idU_ku%3x^RVL19Z*J_5fE$ zyW;?ro>fyrmL-rS5QWXyg(wYXZZb6om?91^IUqLf0zmJ?YhW06XJ6ABXVx7!*tsj= z?!0G42IgCX0hI$>!c-7<9yb@Ho@@sOy3yBfgD&0S(xqQzW_zQr-v&*(3!2o4zP`D$ zASSMbQIdfI7iIEM)d!_s#aOF|S1&%boltD#McP=*Fk%>Z%7*9Hg&4#Gw(bpg=S-n< zjce4rUs=aqa`9ruWD#O7w_0MHBKi46H#Qr>;{LPqN4ERREjCphH=3zB2W zir{Z3U+IyaSdQSB(CtD844fV3j0<*d@8J{~KFJ2=38PN7aMrX7Bw7&5+Y6Z6dVO62 ztYjrB2fOm3i5+Rtl;x@(IDNUnUK>_Jd#`rlw;jJHRm+UjBqBh0E>DPHJXAPgn#35X za4?VwCftM|-m3HqR8uhw^!LR|vB=2BEbp6)$@=xru)ESBy$%(B($~9CAo&k&W4=Yd ze;0yl&+?EyOSet35;`;3ndqc9qunX)7`#sa368&M{35L3F9vpquUi4LBQ5jcG#);d&yD{`tW9X~K&;W?U zJI?5jp#d0^Orju}Zq8OHqx$GQ#*(p=)$bYozR|vY+6=ASm z^R0-@IGn54im;0ui>Ql}A03*!Sgh5GxLdmKMN)S;*L8aVn=q5O-wHbNbQ^|Z5-a92 zA$cdWHW|zl@=M{#(sU2-GC6tpWVa<&Upl?=!^6(|$`4mhtB;Bil$RKFspKIx(c@p_ z=!p|qUK#(16N(MH`sf1>WW_S?C!q`*cDKCmvRIzQGuCb7HbZwEw*7T-caV%q8L{<` z4pCKv%E~wry6^0MR6Im@W&F#_iVeH^vL{bwjgu!c{*xya8+MO>aY3*s4wsBDr*XJs zk~xjTB_m4woAnT2!4{H-Y2F>|Y(NIPSPRHlE~gnn88;^xm`_H^Cu0(j{`(t&Fj)k3 zU$X(}tL4*Py>}p6z5pyeIY&l>Ic40$b?1;RZ$q}c4S3p*Z25KIsRSLLqc^u9e#c+m z1$@D=pKZ@O56|t)IOzXATJ5*rtv>R0`Nli0_velOVti9QrWTF)`M18My9N{#LaXVX z8p7#IqL`PX5?1LbhBTV7Kls@=wyzZ+|DZiQJd%jS<8}yFkXk91E0rW}qEsx3@Y<-b zL#b>^MCI2D>vB-4R8?_CYhWCr3S6l)7mp96Mn_VKNV{0vXfzW+sN8#xdt>yN=fHjGQc6OgNLJ|FBJZA2NRH@0-D97% zVjI`Wxff5pP*_wBxFaZ5F3ph z%jYk@a^b>-hCi`)&I-2j_VA524%=+(c*|y_VzGF{Wj2|QpB%RX)fZrL#aD*&7%7z6e~k9KaO)d z!--^sh;*XDHX3!p6EZ>Xq?tQVrJ~IAhf29-sFf>)uwaV@l5B#ivQgRCDCF~0C4Y*id?8IDc7ic|MJ(nqv1}i+;UIzK(}*9-*o3wXXko{S;^n6zM8)O9sk`gtyP1e zW-HffT`oR%MqI_tJcsaj4ENaQp4;HQMn>c78>Q1fd45G3;4n%B$&5)tt57%~)T+9M zf&SY0vuBsiymIlCGw05py&wntYlW3cW0Yls6>78!R}Re%j~qO(+&#Tq?77r)8_TDc zu9nNorybgBOgtcjSDO_ISQfR(>SaN%P+@KD+LevAugaoU zFA7>?Cb1Fdm7P!Io+}jd6~8~3=#Ub3SQ650(P#dpjorgPd6)z8vBCNhxNjEOz}d57ciy$q8XLRwjXfAk z;m)lHk<7Qx;u~pjMQ2B{c)f8ID?+PT$3v}Ntv7J&@JY=|@EFRAV+ zK%vY=EmE&n$^@FCkRxcfR^_eAJBUZFUf5&>}C-C5Bk!1fA-ggpN>h5EV zvtaBlm=Th*_gmR>Ioh#Za3Plob@&)zUh$O2$`-JAHx_T-1^4mTS1leN9vk;K*qiQ@ z-smacmhZTdTr5*bWzfG@8?37_X2& z&Sf_p&X5IEks5?4Xs%$B&q*@|QpqWpeWj#%gD{7Z<_>M~n-Ke zyaz+ihH|a$eH;j|&mQZg-((h`Z6@FwTT}404Mc){D}@cvu~Bi@L=isGdgUkgKkzHR z-oq?Jm3gd>j9-tAZzkjp9j9wEZJ1KKQQdI3#mMl;a~DO|6AHULgUSkW&FpQjana=Z zq%taB$>No*3tF$)kwm(b)n|}8*`=)u;!wAEEtS>M;nHP%Z-PHK`Jc z<d(QQ=^ag5nu25qcuaOO@+ihJO7%D{+Z@ z9+c%JZsq;Gviu$H9BAV9Pm$&O<1_T>2Ds>Kpd8p%PM^g|V_W%KXXw;~NnmJ`Ts<|s zoya^jww*A1=wL^S!v%!WUx%4yb|JJHjljY%%7txYP*7dVpo4M4&Rywy?7nF(ZrUsM z_JX113Wn(sb?rLB9a-Eu!rji&SqC`WuIxrS+w`CRFQhX!VnlaCrhZUBn>7>z4ex z`@uXdROr=l+;rp$$sbJEZ%KP{6-wFtpq~~U$lA0~GwG#B4?Vx&Z~m-KrzCUW!h{|+ zO+?0rufzPu$F9TI7n3`)8CW4$bD6ad?T35^0+ zTkx6vQ0|>M#C~Mg-O~1-fwup9X!{44-H$`t{}|eS7(LCK(bL?Gp5`s+{eFkpeh}LJ zCiH%9p0n^+K$N?ypS~}ccdEy>Q`q=^=Hcj|zJ`rf`U98XvaT)zl4BC=9Q! zEV<=o8BOO_yYKEzcMs@2O|EgZXoMP>;YOvhvz7yfv1i3+ZkIZDT?)MT)DD4R9otEUne ziB}83LA8MAGBk)I(b-ug8iPTdL27lp_Jv2Y$9OLm^w?NMZUMa@*#EQ-@obRq(lV5r( zb|*UPo$$POC@NII^Zq$JPjb$`1DvIon#(CN%$a=(uLvynmbQppZ) z&j49{I)o!Txg8IrI+ug`*|F=fLHxT!Jao`KE3SqblzTa$gJtP0n4tsQ=`Hx71JDO| zWQq8~6Xuvbup?ItDq!@uUiJJb*08U_8NUH%d=k!h3eNZ;tYP0$QS}7gF<-@k@eN?& z8*s+|8w*mt5eJq}!Ahqj(rAUTJUcm@mGi9<=|*e|5u;KJkek znO4Z3xz90r7)OHN|303wxBuq;d(`pv2ZBHP#Le%E&8(lhw^fiw?CGap&iw;_y7_&y z54=r%R()9>t%5pie2vF9)#rWh!?KkL^2Z;Y(rS)nZyGNmbnq)<6Aogf_VmNNcqcbWLEw1HrD=X`T)qJsD+9+1n z^OeSWxmI47E1~)*l&%#Eh4pLL0OBQOjzroBgP1|=SjrA(QkWOQcnQPOL7sX$M1mwE zfa+AbOT&K%R;;^5e`U*IgaYYjT;60)cNm2mQG@-<)5S3&^_k$mHY7G50_5vxFL?0O+; z#}cgz@zXCZuQw*rt#;|cOQ&Bf&D=RNbKt-YH{3?r^;Tt1+=xf;MU6)8y+?ZFHgQ(+ zw5O)-y8goJJRiiWp=U$-F0&(#W6wx%`!mnH`11LS&wT&;Pd)L(KYaVqM<0FS2d7>> zd+yBAizm;VdHz)TdnbN)>g<^_FD;#YdFgxKd+MpDe(?RLp8o!Kzx(~Ce`NgV>0{za z{{;W~_G3?c_sJ7ae)r;qGcTSvaq_t{XHK6y!70CY;+d06XV0HMdG@83&Mqx2y>#-& zCw_eL+2>FGwxIC=VK-`Xn;a5MB&4>%on?uJj^&Bzy;eK?S#C&axU)0qFt z*S}5s`d6;5ZIr+A)kjZV&0Rc=&Gmflsi%H&_WY^S-+S)4e>ics%I=-N<+c-I|B}a} zfB6?{E2o}%<{9qo2Twir^{+qn-1+m*-5}@5o#)@DFXle=g>QcI&pxHxAKmDz*eC1nDSJ9ypBUdH0!C7(z#%{jp20asQ2W6jNN?=WL zx$19XeHf5Qv>SEq4>0wi21Hq&A+CIMSPLNbuu&s1W5Z{)YACeY!-Oivlca7k$r_Bl zWusUuKImUxFQ%d-ovCHQl=(2Lg!-z+XH@&)h$E#0BeB#2|Nb5#`~TC(Z{7K~A3Xk@ z_2N2#k82`v(2k>c{HXfRS!(9A$bwaxy8YqV>QxGSO^yc1FWk*FOl~F;iwZoM*)KSm zb6RLD_r2>~NB`!*d)mL){vU=v@f{LwG*JWThFX-HQSFbZm25~9PN7@zSp2Xgi_cEr zFxQjCm~$!;NZ~bZ`m&!*#tQU6JOZsfP_{m!R9`E)fjd&B(n9#_PY z&i@f_!Ez`TKT8H`S^K>DUd9r`Yt}gWkT7IXu&ECRH7d?E0tz;qDiuU z?-FDKm2AWAg|c6WXfw|2m}S~;eZS1W=SJRl_ka7?N1m)iZhXV5Zo0t{+s^*+-Rf_$ zA=XzL{L``?4#xJ*&lAPBuKn{CY2nD^p`ZKR_uc)-$M0$X z%l2<1Kk+Exi%RrQn`n0tvNil+9COyPzO|)RYf+GDG1}r}$~$q^ zrHn2imtRN|(kS~Fbo5qexkFq;D=I|Mq5dk6xjhiXo=^0!I6np~?7cYtRZGQnY$mle zQs30jBiX?qaE^5eAF7ar10hukd<**nn2~}38zUVd@wTWK1FGGzGSzGBHZm!Rxk8Z& z?sLQKXH+*To2zv_l*0fb?`{A03vhNRr(weuKFKWvVT#j+Ez zF|xTrum~bDn)O5?NV1y(%!=F&pHarcwj=hg6bhIA@V@rXw@2FJ?e`d806qU7^|kmf z4h8Xes}KyT+i?c`qbi)$4mh0g>_0p_D+zY7$&mw?5tk(A(r2oVl7LH;#lGwp!mpLq zYLp7!xTpQw?cX)N_TKx{-=KS3RewJ8-*2q9rfxbgA@ddIXF47F$K)C>NPGNzIQ(G& z$1DZWy5|qX$$E(cIEmJkNl92Ohuw>Y;&Twn&m)U}9$EZ9AdBCNhT>l2uzQii?nMs! zobszbK{kIga@f7dVM3Xq8~UAnb{(U}bC=S#KhYilJCgn@74@}VsxrAk=?2G(n!1}TSzd_+W^BMucr9?B+1 zM&erFDb9>?zSu}Av%kg<URZBkU78GCj;g6qu@&`Y7`h_Ke`yPGdJC8r}_~So#@(16Ke*YPfYF>VMNd%kh zu`@59I(gzrZwPgU;PT+IU=6Od-mAL7oHZG zV`Y`oJttC!oGW*Mznoofl&@W01ENLxD3yGX8+3+G1<$;8bF|MCAHXNcCT;!#x=tSGHz zU>^Zr_O&n}Svv`P!{-4t2=40mrRV@^_!lgR20tU@Qh1kO3+yYKESCs@6Gp#Q;(Xvm zWG|ZHDk|ir24E z|0mXEN}w;Yqx1})AFP^4epLeTSP2Q2BCSk~pu8xxkgBCM6yfxRw9Uh~Lzqp(!)tX; zIW#oV;ZryyU0V}pgkq)ISR8J`LmC+RT)riXqQ$5gTsucH(3O=ncoqQE+D!JKb`Po6 z^(Y@zjgIrJ`~cBQD4#wF3BH6ldbG3EPdg=*Ob_kUe|Ko7K10`PD4ONpWBvRg*3bWr z_4A|M9WxugloAYr%{(YninWbNE2lq$7W zeS2Lpagw;x6iQ|6rrWskZH@<(tMVMU?txZxa%|sl)GC?V>5&gqjcRCQbpPlGxjC+{ zMZWQ<+#1c@xO+VUmi`tYNBkehsAmE=m3O5-PLough*4u#%46={cCX}g;W|A~8@p2z zk8SKiH@vgGu>)3a-*#hf-1Hw2>|_<@seb=4-eCLpX|QA+;x=|RX>|9IDwMEc!?%q- zS0sI^v<3Xzm>&-x(r0(BrI)n561Up{4G@RcH&$zbUFdNSp*mkJ??Qe#cMa@M9P;T6aniz;{zYTpk^u*_R~ ze9!Nc{l&n^0|y>|P`$O|kp7sX!myOJZp0l7S^q50XpcFl@B?l*?! zYK5h1L{0M8iyuGN(c|G#4_Ehxe`!z`51V5F*Tx;QqK1YO5wbp1Yd-49(m2$pfKxzVc|g|+-@0V8gu`YZ)HLZrD$sbWYnzHWUP)*nVNWo69utEt7YoH8o;ane6o zQ=`~#l3`*zawXfyjV!9vVk8l)R@$vlGM5{P-QB(^w07mt!)!9-NFuDQ6}cwODL1R$N_OdX~!0>+4bxhwsZxlJ;nBfI)CE zhJw!sO5!34oy+H-N*p>wxDNy^M4gb>3un%hgSyCJg(aUPoA2D8o;OD}kedT4rl`~$ zLB$d#&XIhi#Oaj?3EtR1Ne)E54OVg9kQwz^TL zVB~bGUC#T0NgK5}kHuJPhJa<2kW_88M1o-r1g^cLWPL2kj>TB*)S0tqDP<&5d=n4* zxxIVm59>T6ZF=MQ$x7VcuRz_Ug1|e$)Sm-0e+BA3J|=al`fy2Wh>RiZ5dCOG)oZW_ zEa}G}ayAMA9hGR!&T9ZYu7V$xS`$>Efg;(XHHi`TUISRN4>TFI!JDgR5OXMxJ3S@g z@~FKBk%SrG=#;?!W(08^Ij02nw?GbR4uKqdCguJ&pV*Nk2=UW6k?i8cwT4CsU&(gx z0Tq#l54n`!LVCRKj1C}*uFV){;s#)lwGtqhtd|DBZ_!6S0Q)G3`0VUBKHADnknLY8{Z!@OJ_kzrk8UAmcq-&~T9hsLH0-68$uM)FoM)XgDUg zI~|hUN5dW3-G0pZN^%?Y!JUUoX3*Gzf?F;HpXi6aUiv-Y(WrrgsqH!M>`ruhb|;G6 zM`VNoNCQd%LyL}2Z3e?0Iz6=o7=kFq&hs z$8;z#R~JWYhXTJ$fOBet)J)LuXg1@6K4Q=JKV~XcD1?8gpcP3jp(_ z_4VwiJ(57LVkbpzNyRtTt|GeRi;~1L6M*){Vs>`lAZQQLTq_>W?i&Q}K~jsYC%X@Q z3&O?*+La1Q>5jnRImVN{A&MnM24b$|AyeL)k?i0!37k*JVaLs1^FD zDQF65+RTkavQpY@wAe#N{i!tp+)5>vO*<4*v`QqU4GEcZc2WS zUxaE-9yCE+ z5l%ZNv&MR|JDpp~Cn-baUj`1y<>4lInwv?d^F#=etSFg}_PPVRXY8Jhu9QuWaJcc7FV|A@uPUVb|HrZ=a<+WAyC9}~&nO1yA608yfNQ`LqOQK9@ zwm!|5s541n{ZL5iDMkT`5MR>TkoNEh5_Q{b-QZw_Yv zBI;2V5RyDCUG-AVXmJtotyT>MgB1|-cYMi@>b2hdwDvZpS`<0Zof!1j1G5r$P7bh6eP}Ti zGuNG()Edkx-I~+_Vg8s4L~#v2R!mZI06I$=YFc;`dJrS`$v!fPmkCTmNq%XW0DmtP zn7~Im&HAS^|M52Rx#Tai!>OSd>9gI4{vqa{bB~O)+an`6?rMEi5(J9`0c<)wCqUJU z=+|>X7dmA|^n{>_ReSnIy&5Evq>6&MO~_EYo!!$n@`Ub6-fQ9l^<7~(ll+q*9-l#K z`U|9{zXbn(#8^6cG@Occ0am^rXKeo)Qd58cbMx0FBkuwkc^4M(0(H79`7^*xCeyD2 zq~$(%vg#KDt-NS>L1I&_i7*YM2?~R^vd+)rr+2i{ru|nuj}oWb8Qi}WoY>%-E!WXG`x~#fJWzD z=Yj*#qT~l9eS2y&l`;v(x(YuNVFA?Oa(=o?QJfaLP3=$cItOkfZII;0EjFmO7oC}j zQiZJ1$lJ43D%Dav<(sQ{5-P6~@sK_ow zka8$Q*7!V;uQu+>pxWH*)YMdf-e1E?cXkOPFfut=vM*k|rn4v5&fh|8NQ|FMjSQtT z`_oW}Bvo3IDZhRsNx+drg^)-Wi)l6~e%u=^FP(6-#Lgb?Zr9w;0tt+&JiJBAlr!xr(CWI&4872L)=7&^$xV!- zwcH60AX=0=On|tG2~G<0;Y}l`bHCip&Gk}A(hVVqQU?}GkS+mU6~~4qz`~7j6870* z&#TvOc7DwoDL^O}1=0{O2=kUbLU?&W2C+8@VQ;ti&0TLA6bv=0>7McCHW^zkr8`K% z20jS6GU?x&`Ur%`2>eXkf~27-qyo5Zl6;FEwp!IH4jGubq?ozS_oiM7BBvr39yT$l zbX?O$?J@<%v1ZvOhBl&t14Jrl9B#Czne8)|$o%X`j1NL%J_C*UEHviNpd|kXH08@k zjCd2fBQ6@l9SFz~k9zEabR6;M#x96PmykIFDkI24gYR|7#jPH#*fpWJ)uR%-CK0cG zRcCAj1f5Rl4c)vBad?$S8Fo(=f*wuq2*TWs1fh$>7+<$Xu@0bh#8CC_UmaMkfi?F;3y4GmbUz{9crH&Jr;xpdc;M#ccR2?n8p!lu8}%5ER*m02g?N-`pEC?^7Rc|DgSQj(A}H zzWV*epSxdv^3y#WymQ{&DTL^epNkj@vi#DrdQTX#vo~-oENeN^*difh$TZTGI2f*D zG2}3Zt@Llh*zyAbIo7`ov{{=q#2cgDZi^6tQ?nLE*cH05b#r)!+<3?I;oQT*EkvF$ zK{c|Nl2N<6kHbKuy0X$D$%98)5JPCUzH)8jn)kZ8USIcKYlb~KYQw4mhDTZuDtO*< zvv7kgnR zNonD3U@I#vJVj{z+oUYW{5Xx%dh>KqPYR(Xl?#XTJsV&JX--6LMBJd9nAFH!3|j95 zF!+j`)9nT#h+=K$Ukv7Q<#3AJQO5FGMy)LZ!e*<8T%xQG-v73L1R`m15g>Fp2UG6i zk&qY%dt^^;JR98Nn7Ao6HKohM4Ua}5=+KUlxrj!}p@D6qE+>*0_x^25bc)gu`Xod& zYzMRugpBis+Yu%?zST=p0gXj{AfTmBD8lUmw4_Y;QDYUt*4@WkStI!wv~w^^vNkRF ze7DCVR>XTnLcWmq3Msi$aWbZ^QFr0$3O@)n>XDD3PcT&5Z~o0AAA=DuvgY}lpp@9Q zk#~$LWucm`)bqb6Cu;I{ps3%5qW)JX=%?n)yWwy@9X80&xx=S1cekW4;gUkrqk{if z`d9bFDa=P(QWjsQ5EE0W9}5S2$lDgA&h+TqA&c_jHlg^F-ifOr>!U@v0+=uvJx1@;++ra*a_eD}uBuLT#L3;4mUH=GR6UyNY=T@X) zt7CEc54mW2l;W;I+TeX2qz&F@her538SB-+<}=)zg{0v#T=!gryMV64THQu)&IILZ)H_c$wZ`M6@cBGY?Z<1bcc~@u9Q5?`!S@keDeI2_=dWF(Q zhQ>xEg!%}*2kKdX&m5i{Cn3LsypF6AI7~fHznKB~+_w;FqhRFl+#V~FwD!z-n2wyn z^L4NFI^$?CbZ_W|es-dobdTLPXTtX4iwei9RmzC#cr?_i63$bj0vl=lS@lFV%N(;+ z0~?D7=&PMKX3(e-O@|A&8Q4m$*h*`$cTTzzBr-{2lVlm~gC+G1+MFg__@_#PRHH`I ze9l!}z|rSwkTsp#%b?VwPMzQOFcBur)6L<;rJUjD*~s-dDAUDeusI_%Bq|YUK$G+a zE|NW{r!t`H4mBV+XiVJ9<(|S=907d3J1IZerZ6c6kmg3;hQkK2ha#qsrfd*hVb`7- zLTinsvhs(}8cPlN1#njE!4IK@n4QsmzCKpY2sUnmk25=9;#kQ;Cn*`N5vnD*d=?Mk z11$W7RiWS%>Eb90%WXDvT~z9yY8QLl^0UV%W#(d+pqIw4-W`o%f@6N<#we=!MqTQs zdjGGj8cR#r!-w>Z?gH5k>8aTTnr(|OiwSJD|UCg;2?_5k$&GwP3eGSpT z4-dyE!ARoGoG9E|9huQ#IEma!&amUt`)Jc~+h}K!tzl~ah#5z#<6$xT_PTc_XBRTX zcJNw8w3wML7sVJ6Mb{C%GFD74_w$jxp$4v1HPS|?ns`|)FWb3}l<4pd7_B>m8p#IU zxaL4}26eVbooKYZr0yrVuS`Mn*w8?ufl|5S- zqrSddu7S@1(5Snl-_aXwnuEQyCSyf2#p$h%O54{mJ^9XA3C2mqh?N${2h2-AX(rkB zcSJacaU4D3j7#TYBIRChIF2~#>2j6Yq$2N%GTPWAxH)Vg!7>tNwI+dYYl5Viv{5GY zRlm&E!vq{%^qs8Aei9L`yp|R=dgl!R-%29r;PW18%-0P1WuFNFIhsMW4MwL2a z!FJ`!m6iPE{5f7LSFTjrIL#1VOkDDCay%Ii)(R?kxYDy4!K)+mjt89KW|XCA=H=|j zhn}O}_xczEpyxpUr~Br@$s4h0!ef94L~0`PTTO~IJD&kIvu&W@!94+AFX*lusOIy* zWU>jH=^%PXaeBw)<*PaLeJvKC?M9O_Ae@tQ#ELT-*fRM*8ewt`hzh+)mgd$GUBl^jhaOSpca zfFL8PIfi5bCrda!n3-Xufx$)GO*aBdayi}fh21^9z;a57b+3M-Eh-S!x(y@|@o^C~ zN3Dj0PmU-qXqs4JQW|czOWj`dk-&#g4ni8|=ct z+nzjm@~Q8B_vw@B@N4h5<28qGyDeIL@+~#%o4u?%6gr4pOj-w)dVW@W6d4XBmzR^d z;^2DkjdwVbrM~Sg-WVNOJPm&1@P>m_6~(j)Zbk|2#%rNbUN3?^v}$dYcH?eUi0jlH5vl=!~5MHM*mS;B-lM zTXR)!>7PLv%%{xuqyIA)DG`C61S9`782F(%6LsrO2-iim(XCN!DwA)}n9z+KTq=^Q?(Kd*Nw2KtNr0#H*o7k$)w7k3w4giAO_`{>7^CUrHa zhosCnImJR^z2Q_&UbH?39o)mIWJ$Uuym>JdWX4G^gd>6&qxzMIVjgswruptJ8{Hw7 zGxhc17Q=!CQYW=#h4Og#;?o|)wAMC5am&|k)(VwYKNqrCuHb7Q#W^Fhzfvo%sHh!9 z8j416xUUnu5Q+A$KD)Lo-3jTF-f=!jpEPf#R}K@nsj+r#`O0d(vfN6iLKJHl8cUDF z{h_hx+411zv*)k$Gp3u;Ba!r;nQ4lSRvP)@g{hf6>BvZWer|Gh|AGCplQTW5M;4EF zyg@o3t!IRs&-$R=-Sp=4?0_|r8XAd4{H)D`CdC&TrHyN=xod5;eg*dkBVdok0-KkE z`>(F%SMvN!iYUhH#CZE!jsvR%`4rGX!1fDQuk2#orylu`I{c8OV-*e`&XT+7L(2cR zQeIL-9hXzVs{+A(Fq@UcWZrG|1^S;J6ZLG?n;nAo91{nV}|5xBXVG*T2pi zk*x+z6sDc2^?v9s_Fmg;iWiZ@>QjCd*li(FBW+{hAyt)+o^EN|l6ojo*nylXnIjYd z4=X^c#+1QirA|+ywzWc2J@UEFsn&;7>u+VSmL9Ss_JhV?IY+g{>o>vff5#pFo>J<4 zDnNv!U;VB!)xN#%jckLtdw0g!L2Mn`jI9f=_t4IdXMY#*1oOz?1?n*$4)U!^|GOru zEGcyy1jNP0pSi)sz=%dc2L~B9jfFk`62n<`;q@A`uC0oXd;Rr97$E&-1NY@3>v>se^)&N?J4VvRUi1SUQ$w88dOF8kn68RM}Kl!z(4i*;FCAk>KOD zXY8TxzKFVTMOhIa4`kDCEw`ljEdb3t?T0zn>?%C!qq z+AC;eimKMMU65Pzc6IyWHiOtB7-wyiF$U0Oqovb_?cFw=~WTnY88$*u%1cc~=w znqZ3lp`6taGt3?c(zvT}%s4GYAfMCt4^3klQ z%A!dX%SBD+qzWvF$$2R?2lPl4SgOF2rQMxQkDAL|Qn=SW>TpJZl_3vMx=<4IK*WWQ z5pVu`Cx677`QB+C@#eL6Qb)WQ?VV1Q7@V|E_s-X6w(P1m9o@MIdK2N!g4#QXqEZvp z8DZIzS9b5vP`EqDVLpW$-XIf7W?4j%I&xxcE<{aTA1?<#f0q%q@eY?N@HSDRHge)! z%89KPInkc8W~LqLB;ugc`Z=}Fyt9kH)38-vm4{J^59x7AQ3 zZ(=}Lp3^=G?^V~bIY#2?JPy}b$$f@yD7Lv}o7a-|k zKmMf?mS2L-@OJ0n&8cJan!sLxG#MiHO!XFJ20srT*mUbXxGK9K1ZO|6Ork^LnhNL3 zVJw+pdk_>H{7slm4B+ccGwN$zj#kEfy#V4Z?)7l$6~414aZS!1{>1K{AUXNkCM6Jw zq@@z9Lo$(&;8v_J$I1}H^bZb z^?+;qdSEqvJ%Ad&9w?ciI>~>SLbMSn6BU&_^ z*H$<_9jtket?;|cz8$Qd0wzeu$V(yV1=JKU@bx$9z~;QjQ0L2wc zz?%?<|Bi;3fY7Zx`uuiB!JQ{$D!hqtFsBQZ11!}uxf-clCY@5L!MSs=CdfBAyQFe` zv*yO^=-YL9C^xQSgPmgz50ztrM~kYSjd>I4=p{!<%++rBYVCd;a-4HyXhkCMnukGq zO1`FD@|Ar36Ycmm?eV6yf3jhXnmbBg9PTK4UG6A(5y&6OOR0O9`59*V&2wflF*w6A zogMs13{GTXa0(NHlb0Brw#49sDMdz?lq|VY86%a-Bsa}TRt^Ux3S7`8WAsOMKPcne zvDqgEM_A4J$dzn2o3?EAYj9OM8$^uleGLk{P8FZmL3@reX0L}I9c9dpL3@rW)2q-# z_H^A$G1jn9NJ4(_wiX4ad&p$vvuKMYf)$WFl7V^=&(@;;pbzb!VqasZuVr0K^B0Koj6kWmpyIJJNTCz~tN*mSpTtixIBel0v8Q7{Q;zCvgB4 zU+N>g`z0+-a4`y2vl?T3<&g>o@x()V!4c0r#9>X5WOe^*z~!$o#<#g+Y>}PaQc+%E zUO}WeKQBaT72##6FW)2iV~+pzO~b=+@+C;6he}bGq9+S4H5o$DcrT?T>Q7sovNxsj z)CuoAQp4RxGD##32}s1f(w3BL7$37YEiEmRlD(n)c083P1!5|0`xOc6bIU8qZFd5{dT^Eh{oLg58*nVXubQ8?M}uhk^2hq%!O(ek-1kxn<3m;EPhl?T!Q zCGYd?eA1Xp`y0zk52eEhFvh6AD}<;^>dX^!A^t;nKasHy{}l3r${M1t&Kh#KJKO0$XTo11^ zF#m^{|5`1|{ALgAZeFtob~m5=u4fjH9kkrkbJ^E^yhw5u* zsa_PDot;etsDZa(Y#5>{@K$)TtzTv3d+5}uE5)&y^i1)}sZ&KYX6Gv}d#k;dFQP@x zUwpYp4Uh(IR5A|E%&>I^O2$QV1jql;C(|b1EtvjvI&+}7OhNG?N!~?4x1pBRa&9%h zdc}Q*2;kL4%Bf_sUP(f{{J7*`^db|LKcu-l!_dk^5wZ76VU?`7Q<4zHEen#!%LrAm~m7&Ak~ zu^~uNaA+(RB0ESc6wBFsv9e}A@-RrAedOb8Nuu`1$NxkbUu195`7}I~=IY|G7mbV6 zMA}djt+WLG;13{4_Eq_pPfI=!eLs?=NCuR1I4-bqV{$%c%WZS` z2vL{8%Kz+2}Hs?NXUa_g&a9;6Q@P|kMR0~D{y+% zB8w`n4f~OxxERnyFX)2wKo72@e~}>-$l6C*(}X0^!{w=EwuEV+_HdTR@-BRI-^hry zu~uBOMl4HhSoM&9$XOx}F}tB5iwQI*(s)ekk-}p!fcBb=J6>s$iHVygNiDpG&g^vY zV#cUUWMF_^n>cPxOsMqus0^5Pmegkw4|d(g4aZ5$I}gYx!B~YtCRUkH-dRc|=RBHX zABSQ~B*||s+{TuNGyGLjv7KY;do#>tWsW8P`%ZlU=Uc}yPrLlO2tB@ zKBSLf0|v3h#TN{x6q9LDk)9b56BOB2r3#bZkeO^5ek&^zB#^Kz{_oob>hIeH*5jk5 zFXs5A2ypS@O*Vjni|`JjPxm5vbrYiRfZ#qsaN;s{MC_P@&?BkTI{Dq=*~IYp_;ASQ z3whgxIS-BJ9|K#Dj7^1(9N059w&%c+y;H-n*znZe1M|DWwE11(*!-@rOH$`CYS+c9 z>FrT!dV6eI@ba0x1>ScXkSiL(yF0uu4F3yKtGFv?hCtcB`l4_A@Bxr~bz9Tc08U^fdEkAm z1xaC2I%AQrX%ayMMp*Gm$vG@P1nu$g**+WTGF-~bTG-btU6wT+?XUjAICoC^)Fuzx zaYt7)4`n*c{Jx6$J;eNqtp{0B^7ZNSciBdA)9m4LG%#^Ucs+9#>7B1g?_4F~1M{>H z>z|_d!0g1LeG}82kcCL^JoI;4k26xhzz~x}cwlt3bl5kriNQfdT3~Jl((#y&CiT-bSzoZU&Bw_!;9;_K{DjW7MQV7;(5k zdZ-xkQ<^IjTES%A%N_h_e;zQ;5tP!)1=vq?*n?iXk=G|V0%FmGJ*d(uzBidS5DRMI z40N$0A+B6O#pbbyUbfK7E+kDt1{DV>dW2C3!FJv>2Zsd7M_vMteGk8RYakg9IK1O> zeY}#d&jyA?f_$zyXBk#{v-nuQ_0s86G~~yyZ?uY(xE@otAWDv{=Iy*)u|4_GlP8Of zn{Mpumh?p=3z77_egXVi)DYATu2w5WC6Z)#YV5M|ttXfBfy`KOxn5bXFJG%IujG4V z$^BE}IVYlIWMz3Q1eJ&d@*9Yi$q|SK**7J1PsS2v6RMTG7Lbac!d3l&4Lb~WgUm$@}!{r)*Fv(z1y?M5@>%a_luXAu?;zeOez zR~4p9cgqEGM7Ash??fDKEGyO#fsIcHo|_>krj(AIHeufBqt(V+$sgQ z8dxO4H6%eosbgAV4AjYh+LWwjj+E$0jfjeRHK2z{I!2Qo^6UbbMBC_oa>1jmN|lOh z$c<6o2KC~6=31*PLgc8KZ>nZd8KG9)l_GsdW5c9ILx60wOZdMb0R?O7GScKmI8+bS z{dI&$lEI55jX0E6`{LOwOYia$Hd|S7e;6wHA#nWn!13P!$7RJwl;b9}-95g#=xP)x zXEuPSKQ)FDc$4+UP7jzKyWVl@M@!Q<+J}}q;N;OhjNAbob)^jEthXOqAz~K`17M+G z;K)`OINOJQTcMto^F;pQiVg|am&Tb*Z;>FnD7Uu<->!#hDxmQ!?BJP3v5~D%jKx(4 zhn$<;27!)rv1dorInu?O9g#-gcMrx~2U+HOQRTW=GT)0M*F_J__YNWdy&t|O^#KGY z#L6^@_%e%DaxUycdK7s{B+8W{`Cus=NjcS(Yu9qQYpZK( z8|cv@T9(AFC1MKhR^*xs*|7-0_K`$_GDL}yk;I5&K9uVrxd_aljgXWd(&T{OniYXl z)GkP$|1WWG9wfFKGiuCBYXF8{vw@~q10>7nh|?4z=)tFm6c_xq0bo#;?KxBz>8cxrB8VR>a`AqTFq zEY!~(XgKX|r>ug(mww%G*wh`@3y;0E{O!B0XA-db6j8L5p~JR;r?zr3EfrewtICWkVFm5z7&W^ zfj)wz#0--4o6hJ{VUwiV0L4HST5J||(E{1h$|KNe3o=3ngIt+~B8!q~uyNPm;eld% z^<@_S*Hmwf^{{HB;P(E+{PSfN`#KwbgM|t#^vWx&_5wE8&*JCz#4|6m**|9O0_!}B zIspZy;q9asxBiHA3al-j3>IHzEC1_nqdo5Crv4Y^a-fbi%?mAwv-pq&2yo0VVc8jC zE=aGVrpE9Up!y|+p+Qg4bZwa{%$U7;~X%(Q!_H zW64R6Ci@3htx*U>x(EMK7p+E7OuP=m{Ibxgp&39cq}s`SsMs*WAippYPhuo5vzz~# z0xg+Z{3^6=>-=SQ>+4KHhuH#ay+U(YDurIa2%g2y?}=xH#6jIxy1d|RNdPlKAi zup%Q)k*}jo4IDlgGbSpZ15LPSz@ZJ6Axdx|Ur>YsiqJ$lJxo9}4|ExR*tD>~!SBF* zA(L6K2|-&Ra{=7iHSb-$c2?iF^PcF0QCk(5vx8H zAO1jiIm$KKZl_amYyfa*%AmuYgRxQx`Rq8N=qaHEiXT!C#nMH&X#AFG*APZ^&PJ_r zL_YXv8i*khLn~bvm-r8Vv-zti1hAMA{I=l(Eu0fF;R<}`tRx|K2rtNHvJ$~)K92f- zjeGmXJ3o4dkoJzTf9K}e@BKT(F4w9x{Qh@<(@_oeZLFK3up5}$D*jN6$#OE41o|*v@^S0AG}(SjrIpo{ zB{0vU%9%5(OV3BnfW?+dON;ZfGmFItLbN)adk6RMJ6Mof$HlWjG6; z)ms%9!&lDD>$nQ>*b7_lJsZY?VO^|u5l^9WdH}JC6{D3?QOSX7Od)GpHuup;XG6JR zq{m6zUV#Eq-N9Mdp|v0q+LR$D7Zm9W1-dO_ys!_`7agXuVtuMjIbMvY1t}CNEWw3F zDcvw^R6Bi`IU-Rdl}-_jrIctad3JUV%S-EtN3dYntYPSAlRaEZTJ{d*+W)NGym{k| zAH35NQ&=kPzw`E9M|i5A0j)j5P`L!O_9@WXGfZVa%RpN$D(Z7m(XiX%99 zpGMskLVqHnhZD(S#07Erc?l?wnkZjFS^UMNV#Wn%-NLO0*&seNCBU_Ll_ua==&JkOUs_bZUWv*5;y;KqyK$&28|UxrLZ1yY=&mkYRYIP@_X);S?bpJX-O zv}Ik+$h!2q3{fwTN>2`B!^AK-OiIrU3S!H~Hz?dri8qR!62Amdryv!bZ)GmD?zRvi ztJh1SxeKZb>zPDExbO8;B96bXqJm9bm<8`^E`{akY#UkQNbG2blXJ_$e;*B_)~+^e zA@l)8i+FhJGTBcs1llOM4&e}Ro)DuUDR%i#J=6@g%NBs%vcdZu0>H-2ci#Bk>)hXO zpv%aSv3svi&I`l1{P(wOM)q%ROSg9vl>9)o52Z$(?Tw+P$GOuVF1@~deB4u{h@mKZ zVjJn68yUlaYR-pajU*_YldJM;TZ-Oq=Xh+>K_wZBXe_%mom*VqT1eh`?KLcX@*Kht z_IL0q1yNA@m3H&E0($`B1Xh;ka;jRteXp0Ufcb9lnZV_RErhJc_)uQ1`UQ3P#$PijuQUG@hYy257Y=cU9K!^h~VLClJ=mPohPo^`*mvApHlT zEht?M55g#%g+3uD3{%Bgnu!k8zLH2GcUulem3S-~QsNPrM|)kKiU*bELM9$$!FVP) zY~yWJRESa85VZ|^9mH0kYlsB#E)ToPFdVzaUcXA+%8($179(%I`R401O{?hPc_xZE zY?%}M?%jJ8)IM#}KhK<5TbogzDSsQRkyocJ(G;<Vkc9L?`rR9)YD1!W;~?7M7Q{rZeb`Mg+PvLXk( zJ9^Et&hiNC;l&}-<`4xLIt?O#M*&|%lq-x7j3PzABJ#Fu5F1oNJ01;%@SBb-038U1 zaqEO)2&n}E@^&0ZUT{IVFa?+(>32AcQWRVe31xtFGU~{#SAfcY2H8c`Ilm0qMb?=m z$gU;Gt|iE>uK=Y~0b>cWYl+LQCm%$1UAjn9H!^uANUw_qU?!bfeqEeNhC<0xOE8r9 z5~Fzl8J1`9!o}(XNwJ4PEVbJYB*%nA@y?UKB-@bML#CfXmThQ?(Hx#ant{V3*yR4Q zjKxkR$)b(Z$+2x8LH0XbkZt=&vai~bY}-eaebp9a+di`FtClPqpXEu?Y(oK6QJT^H zw7=C6yv2a;+JgC7Lr4<^^PeFWQAZNawfBiX*{k!)0# zoARBhX2&mshfuv!%6GOlaxV7oa85_IogJrnAL({>jMV+)8>n^rebpaF!hMj47F7FV z2)WgjF(x-E=2ph2c2v-z%EJh`j*2=2sf^O8B}#31I!2>OC6Qnx1eqxV*$91xNb(7} zSAdO)i#>eOIM*H#d8?xoGA{I1$7o|r>;d81??eBt2N!&C0y>cX|3daz{jsR}({K97 zK8n8jrbqVuivsvMJT;}khA+(xO_wIwelj0rWy!i5in5#h^z9KnWuwko2I5a09QqD|!c2H_$4Q|M$b0k8i8c>TA) z>uA33tHAHKA=~WA9{(s9{5T@#^ZD%$Jr3#bIRw5OkdZ(kks{p1^r(M$st4<0oPdytjSKNGZZk+E#OF|rM9#%$Ww<)M0nydg#Z<^MAZ{2 z^NKyMR3PmD#bo>}wB#THCbKX`;uqo|dzrMd)*~}$3 zv#7kafF|3Tp-0IuiSk_q^pzsBA2K`I2Jcam&FSs^{kEQq*0U;tpxdQhG*>UoM=9Q5 ze|Kl+I=*&x_j3y?(cFH0KbPCjJ^92b7uP*h^V}ZnMja^tolXnM708D#S8DB}bUGPJ zrK2I}WWi8W4^plZN>v3LNPa{5Tcj9{WCPuB7cJPEO%y9v3IP-eM$Lml4$kmyAcTZB zO6%;i7OF^fk*Lr|EE=pek>^E&N<=3DBKXymk=?j0Kk^8ERVw(E&9d#s9~-|dK5E;B z#uExGRCuuPScC@!pcIB_J`KgF0A91syJ)srjn+^e@(TQvT1Y>v->V%Gk`HS^?6%0+ z5nCp06b)~?Fufvbx~~M_lThfdF6u`218|mv>CN=UxA8@9rVEB+wPq~_QUOU|_W#Yl zVWJw${|Jsl*-uo{?wjB%{{uM8A7K~x{zr)%XslxPtvj(E=^x?{C-h1>9(D7GzG5>J zlfh)t7Dvg=PR-A~8~K_7KjJ(6V_7#ccNr+OUuM+kIs_BvD8r!Zk`wSO!K0 zDM(m_hDw7MH$cPMaC3-QjWZEqCJONoc*Vg)qJ2s$-EcF9J=86-cnG*h7&YLVC1$|D znVsV{GCl)zeN%nFoJ<;l?y!V4lO-Vcn|KF!h`K6lCG_=Yt_=k3JoEzk#sIO|W zj$Wy~U&mXJYV?Q#V@ZHAL^C#McnX0J;K}kBf%lqmPU(kcA%$ zI~Iz#znEr{jz_p-&?H-VXp^`}@# zeYlNKP-+en2nVj%#5Ns5Gt_%7f-}&$jq3eVKAs?2Jb|m2v>HUWItAHhJZTyY*pbjF z5~zz;Ec)Af8}vs%CJn}7)c)F{UqQggwBz;QyPT%Ei%ylntqLSY`vuN;Yc*l{B@JO4 z^!i4}f~jDTy5Tp>Qy*%hi=@m4*$&O6s|2PAmufbzpm z_lSy{S8n$7wIzJ5>Ajo1>?QpY+B=;73UC$<4A4Jem*Z7X|H(6Y5gH=Am|L6IUxSkp zZpvh(0u=$BdeG_~`E-ahcb{K`@&IL^f-mR-;2rwT_5JJn2wtZEcK+jTD~o7Ald@<) zHj(i)Cf)#v9%zQU;0x$S0A~t(mxV;5w7Cp1jIV5Vd9&0&MU-%Jv$>h4+{8RGrSWTL z2fsEqeZd1=*Y`M&;$uB3??ApnVz9j)wPy1BIp0JOH$PAwxeK)lO}+eI$+#(&-`V&r zPJ;2nJYWF+n2cr|_FDwf7Q_vC5+&3z_4|1^kBzR>-Mx3bcbV1g6=n~mW$#WB4C3)%b zqaOiCALz@iZb^ZUoQ|p->hsd)M;?r@28Ne3-*bNAoQ+Z6c{lyI&&Mh6yhTIw=%%A_ zs+*qrgfC@zsfr|J)`y~`QW%b!3Cm6(SxPB(s3D2~^^x2l}M*)HsOB)>^bdadgx_$cudn zjyW&>VZFe4^x~XE(Aui!{>Jc4pS()4g0M~UVjR~bQC6vHn)Ne|XObd|3+UVy^@TNk zh+0)*{xXAtG<{Hhg51DIVbN6H{skv)z|%)9AS0aGy?{f(^*$;!7EtUT4RVl*%@8d% zDk!}C)F0OL8Rt-904)WF2x{zi{ozak;T--;ui!uaFeV}3Fnb;!LXq5G2A+Qbc>XEi z`7^-pFY`$5iCCSTjMG^QpY-U(DDL)D_&j$yY@RzEE=Oo?43mo|<8jf#Aw7;`aW*#* zhhrGz9CiZ!z-4i%NjS?*#8_@3zD8)#msD2okE>M+PxR=IDISj)MLgmTnq;;&taOq4ry#0McACAe&EnHuMS*kq4t>bwe^SDQ|ab0#D>kF7j?-jqKF zni^ke;yVAI>Zt5hm9)7^@y~I_EkOK?2g~s@9vN5s^VB$3!9H=6m7FxR*~u(p)_+Nf zO<+_MbJp{WigOIAJBIiw_PD7XQr)qqR%9wl<>rnt@A}2OYZvoMnwWRZD3Jn?C2)}H zM~owo8egl__&PZSllgm1+#@j4BM(l{c4FT7j(O*L(&eZ8=XlD0euXx%iQO>OY$xm0 z*D;sB51QFP9MmS_pq@fT#U|pQu7Vp=4DSZwpeRf2+AHBZ-~RTu@37eqfB3_*|Mc3+ z3HuLr=i5&|eKGvJ9KQH;acvdGPBDXsC=rKS;fPB?HNOH4fayxVjV|c@HYx4yC1dh{ zts?m%6h(0k7=#g>O5118GQu>=DRF zG7xc`?4kUx8wkuO@8<#=l}Zx|LPHCN!$D22t64S94BZV8flX@hL?2BDeYSa{B6Odg zbKpZGkfck4HX2=q5IP=d995FkH$H&s?a3@{ZL_YuE!x>dQJXq{aWK$P7cCJ)=yGEJ z`i-5pUVC@{@5wMuhHhtb`^fG{lnMH51!#NojubQp|lzPWpSb8{tBs`ONZ z=^`;p8lpv4FxjbiV2cX!1vRv?d3`sZYafnwb3&6`r46?dZWSL zK?l%74eCf;0bLP#>_4ERkX0ASUUCsHQ?asC8x8pq^fLPo)J{WJDfxM{ET|V}rupcl zkMr9yf6;PGD_z)i2Wa((vUuQa0Xcy^Yh_SOORR~`@bP$1Mmhv?C{SqwpXTaKMxW+1 zD(h6TFaka=OVMl*aSeoNOeZfZVot0%!EO~djs&d2CbImnYscQ5W|Ge+>}fPcH+`db z8ha12sn9?IRd@P|`O2Pzchjpq#1Atej}PWxS4G^wiHjRUT1x)Xphb{__J$;IgeN09 zR>su$@e8Iz>x0YarG%T(`rSUN;*c&RYaOQa{5T2azQ~wAYSA2^ChyIzSS|Ap7Qku^ z0xw9Ndhy!Vpt=vX=^g(KBDc-cZS+}2O3m}2by?({z@dd|>JqZ~82eAbk*JFV@?@v7 zWO?Ki=BDhd%|6_$BWrUEH@BFXhKYyBlvspYlb&{Q1UEOBb};}q@k1pS7oy8}$cp}u z7hKdmPT31CS{|okwg4JrAVNBbWY8oM)QH9&KoMvWCh7o8n#d0!QxtV{m?IJ-8Z-~X zXf;8M)dr%=3!1P{iK3XuiQ!f%baNmA1iSJ9@2nTJZm`aJG3v%9LWNy`B$U%ZYc0+s zY1s`xKkzNP0p|xcuIC|Eh-X&+V<3cf!2dZAGV0@{7=?m+2mBvUW!bGfezvIzpra(f zamy1@gb{&8j33k+KH~-xthd;v0>=X#Pe)ZlR}D=NbN`!LZ( z-rgtg@6>)rnqp;HErcBjvd2w9cb5!1Bo7;$E7@bm3Ar68w zT!HeE8?-Q=VgkT*xjj`wsjuD=FPw`M64+K-B*?qGS+Go%+J>;U!ptvjX!P!ICHfq5 z?f872_k%JFq+tGrIt;0(P7|u4aXlDCHWovGd;Re62w#VXbu?y;#fs`l5RxIHh@jyy!;pID{A7_#Fo?*&Q58 z!PQ;2jz5s)?06Bz0K4EuD;vcswco}JTT_WMiW;&|IzI|gH$LY_!RbaO0nW=H0Xn$Z z`Y)5KYFl{JCh$Zye2F17KOBCRHp1>3cY!PCMwSOwIX9*}fO?;e5ESM!j6>Usj*^|^ z9Yb}SA&>~904gZzO4VF@#Tg4MherSl{g{9$051}G(Wt`}`Qar^F9e3e2>P&?9W-b! zOm)eg0*|Ep_{WJut{|U##p$3yQuU+2kkdh9RFs({Abc{4{9$`vj4cSsJ=YwG*G#El z)uX@*uh&#umvy%o79K9t0jEzKzlu?pbvL#|Iozp|!K!WG6Hs+{V3@b<)n(UO}YfBy& zXSAH}JPr&!4h)e!<-NcV)w6p)qZ$h|=RPb_3Xn~O4u^iQZyv`*Y8(?tUZ$&h-#Lzj z)Hn`IB#mJJB}n|%f69OD$Jd?j(I>4r3}*OT-*uewU&AT?^_!i%cC(Y$&9-^{d!X|? z%5M312d3cklOKT2>*bz2PUrb7s(L*jolmyp=X0n&Hi6F5*<^eIotO6a4*q|pa|Gg` zp{*kO(0LE}{4z2zedt_6n8su}&o6YE{eORSo==Y9A~lW)UpgPhLOwZ$gNbzRzyA5G z@7f2()?Lu~gf%~j&i&VL%76W4C$C*TH*wu;I=4CzJp*3+i!0;u{Jl(6lQQKwb^73k zho1@y_xo*0K7)`fM0dK?L?N?h5$CsZjA&q%@oNi}IEEUhl4K$({r~JiaSflMHobk!%xHMlJl*%QT>QE^I_3~Xi zK%u2C?zN3xJR0vA?Y;eRUcmF~EE*-{Nsuj>Lg+6}wX2b2AQ@qeO1IKLr8mEbuT^ze zzq@<1d$&GRJO12(S8s4W$vhk95wVUIhjlXu))r*`+CaqqKVCbTUzob{eYO9^LAT$< z45AjA?4#u`woy6=0Sd!@w{48`j?>=PISDQPU^PVT7gU`$d)17GaGi^x`CZ58pp0}Z z`eSGg}1@{PR1P70Cyc@cw0OfYl|o2 zjE#clBp&2N(fv8m>|~hCPKF4(=)3NddDBHd0Gx(HUBb#!*Dta!JmbTmE&&Nt!QbRi zWHWH@35hFF{(#%xJ~hsbkV9cijdLORC8AT~+y|!2_|!PpNj9TZAaZQ=tuf5{a~U-I zOwRgq7gWe0NPv<{1tc?9O6vpAVIv;ziGdHATf1;H9A*EZY{85G-NMqpqM zfX{Th%wQ#;we}()MeFQc{S>XScjZ&GzTQ>GPJymJw&GK?rsJzUMe8}f(u5h?%rT;0 zZp-A1abkk`9zw?YZI3T5wh$>=8t;OoXj#0A1;Yvr+ZR@|v<&`>G)qh1zd%mZ;HOud zj@SPgR$|m=LiIB}9j`xV?-IDiM&lZz;QTcF;?!Kggw9CQXJ>@WO6#4*!+`Mp*!;#2wQ4s?c~7eb`s z&$M9xmIhuRQ4qLUyvH84IY;7eu4(0$0+=3ON3aO+UXIGWQcw1WmQN%f?JdaWO!mUh z17p-@?HO}#F@~Rf+6OxsKioJWFJ1)Zv%Ywl^2Z9UBJeSSlYG_}BUAqPV0qWVpCs=c z1l(WNqi==Jvggx2OP=vtZob8K7{>^!%Fms!%=0HLvEUw;upjv)aE~uyWvOBW?Hc2V z5}JWG;T)obs2?|ZT&crXoJH_FN?krAsf&Ob`Rqaff2cR zRY9|oSg5XbAv@yK2qQJHxp_5@Oj9arz0K%1`Q^s0%nsS9#Oqw;h*7>8E_cD@ zMrR@5s$jh~Dof3z7IzWrwK2}ul!@)3+ZU2{!?6TB$axvLhp1w`&FHr?6}*5o=72wP zU5G4r&wz#~uH{M4kSTG&^KD5;XmkKS3EHD+Yq3u|x9>Uj^Q zU3hLIt&zKeM*z){EUv#W24f4tRJeL!47?U_sdhCR^Vx2r(-AkxWV0`#OfLeVUhukX z(Z7qrScJ)@RQhk-Gf03kXAoeTapWaF$%UdB4}@IsacpyzyyRxblPj|+36Bj zl-@2EB>Y=Srwf^~1E6Is+q+3@ky|UcXv3(*!4YH4Ee6gx7|1`u=_ zK%TC}7Z2|cV>~9tcrJ=Kj$q~9?vJj&bNxrV_bPWiY_ZxEe39}{CLFF07BiMlRUx!G z!FUj}(W!R4MxgB=N|r7V8uN+jZWXUEUxYUlroAll|NOthB}PnBEP~j;(Q;50p!po% z!13p>fy;wqD5yrQ7N+`ruO&zha;}Gpp!k0Q(K&^T>L3=rQ^EG^=`{gi-t_oQf=?@` z;~gr@w_4-YpuU18Smd)!hj?visnsgXhDK3*+;7SW;(q46@Xa2-7u=P|+It*$Mhy)_ z?J@Qr1J92GzrVO53-ttp^Tn-$)6_Ul-55=bVl;2#Gc}G+H#QTa*kqRpa9+gOfqGk; zo7bkrn)~<zcMb3>r*{oI!Ijb&y&%6 zRMs*aTehADHBZ-Lg`}#Z*|aoZNj0Ejo0?3n^Keizs(WXDe<#TTx{e@bR0e6)Sp^+W zx}^B=I9C2aG~slD8(qT(jcIr}o~G=t-1%)leW%?mL!lM065Xg(r- z-`1G8EEZE@O+Tt8%i4R!Whj~t=m=&(g8`#lLJ1GF;lvNP(tAc3k(3Fj{|>{C-R%#JQ2c{D^G-Q<;oKwOu2*X{P47RGL{xk#*wM3 zo{S-X{6szYSvv)GGHIVR@?u8LmU4xpSF)ADC09<0+8YF1IVrUMCLwSf+IaL^`}I?< z`}!%@oNH24(}DJ<)N6@WnksRQavI8s-F9=DxXo!+R}c@b@yr^}u{O1|G!>EMNDTdKk}ISyIVzMdM%POWKcA4LPzrKM$JIu4vx)>fCZy~drJC^OHxLzWwySu;O_ zu5EG#I-`%Fkatj`EUgiz@ha^5s0xpUAUp}Dj#$;+8gUt~+TLkZcc|?FW#MR1dEfdl zx&s{c$6?~EyFv{a^qj%rGL&w|s0#e03+E%#sNRi1k;XK-`@H`8>*3OIuMlV)G~g=r zV^nB1Gcuj-+f){aOF4WCrObMVhvlONs@0;+(E>3nN1sAkgiMV%noKnid8pU^9mc+t&c&qn90H0D zu}7Fd9%=NWJJd%YQQ_~!^AY@LvpMuffUZT02PI5^1k(X}QshT%mYX|5!h~HLhXtd7 zC^n+RWOL!(9VfvS8^JDW$TMQDxim@x*i~y-`Q6&PWd?_~VdQ#f#$?x`DKpgQVrj0R zA@!Qf0W=&_3BicO>hLiwlEuv|C zfBaRO_~Y^tzq$*n{OUx9;+Ewb*;2uA5yc`|7SDxq@R$%+OqRmm8z~+Wfmsy`U*+3K z_NQk2(O=?B#2?Wab{RW6MLHAlM}L{4BnCV52tCXPP@QvN(PhY2}LY#Np2dW6<$J!qA*yC5ud~GhynNbK&>HjD;Q;W zp&u>x8-E6fdI&>8PWDvR7dcs9q@YHU4@$DW2+8`Q1D>{t$e5jsirLACVET<4;Fn~& z+V<@6r~n|XJ70M0jYuHEboD*H_};v%LJ$Dp2)LT{UDd4bin8?~EntK(`Jy=1$gja0~)z4$KsITikf#mt`eCYq@v3gW1%cTE@ zE^txcA~z4|Ir}nhlvd=Qv01_eN=c;JiLm~_$ih1Ab4T?;H*%o)0$wZAtIgLk_qij< zg!La?gamW9S-?qSx**l1cpYD9mOgv*qa!K4`Bpt6WzNyLBi)QLah?l!t+W}hzlGPP z@&6-wCq3fz8As9y7s2^WhOTJ$8w59pZ6>F~XulUyx{K$QXIOi4ML|~3%DKfEn_cZE zw@8o6ZxC49m4n(;ESR9GcTI)55-f+|^?8z

    *78iv`1=kZe4xZOh26 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͙!`a#>`uAM&}%o_k2W& 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

    Myy$*NXAM;5`Q@dg=`d3 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

  1. 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%0A@XN@pHd>rk7;>MeD-Zcj8~4 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�DH&P8w0_g@Oo|cj)!B-@ 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

    ?wn?5+XjXCemnQWYH(K}-QSvH!jfH%ygNf4 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

    cm7Mjz@H3 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

    @%Qef1Z1Q9kD)^1u#+Ai0C%;)@X+x*h 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

    pKYivizx9Xz@xT1V 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%0A{gc_`2uUnez*w_(hfwDN(#)Ti;XnM{DYP z_iu!#?3K$!o6T+8T2-(5dTRC64HDZ1TKuRQ!-9eBgj0X-La3dk<~$x1JGM2Wu6KfJ z<~meYASlMuCwaQq$YMM_#?#3trOuf>f6qRLR%qGI<5%Kl+z#>h@7+%uYqmU}hnH$4 zJH+!>U*%5n3ycE1l53Y&XbP`{eb`PDcG`os9ij;{*Hs4tfYSy~-xRq*+A!2NCnlm% z!?iN_H?Dz7$?sLUnp= zS#8n;+XsyZ6#=y%1T0S@Z0f(OTv6qu36GN-tVZEj+(esUJXj(Tn?k{NdJjE)7`Wk4C2!PThO&y{8ry=H_P4oU!w7wpy8GGe&`rQog69B{lOT{ zo!k<7&LV73EJn^F$Y2o0ZJ93`_%{;{WQ79Z zMsw{%t-Mz@jV4ROMDnQ!Ru)2df|le%*4Z2D4PE0!n(xN^=+WbxCk;Q7ej3KQj%J%mT}Zrv(Ljh9=uxTH?NSgl^K)vQPqFX)L0u88nE z?h(PcuO_~o+}e4h%ov+{kRwya9HQIG=f1$51Q|(9F$$>QSLVob`Z7ifs|-$NK?HHh zg@d<)5C6XbF4)|K^>nzsc1+RYpEy_Qq%g#G>8(cqx3E{am~4L%zv_Syj+nZ@!MvXZ zP-Y4T7Vb`hycUtRl=tH4vcNyDZz#UoloKN^ip(K=BQ6#4JimroS-Jf@Q2SM&R#tBR z0H~$9t*qR>3)D*I^~SyKdRGWWw1R9Cdq;xnyP_c}EknkfcCR4-54P26O$nPJJ{EY7 zy4U)+7!Mn1$~!@}?hdUu{caGBKiQ&sQQdR;-5}k)PJQ4(4e@l-4TsU7a1;uiVGsew z`I^NOjRb&nVEqifPt>&n_%$Ao>1MWYq5zzO3DDb6GK6yre@x$lg$cffT;>b&CnVz0 zVu7Yr?(i*EmOT6FnN>D!$FD-$H@2_ycY}luhp^(D2CBG_jb#i+4Yy0w@xQg`NhIrWGj1z6#t1@-7$MTg0fe<7Vg z2@xa=P&6iZ3X~Xnq0xlnghm1CPIUPt4q9XzS9s{!r-?oy^NYp_WM$z-gfT6Z{> z!4zT=e8&16&aEUekq~F^z7n4$IHGSlaBj*vnk>fa`Fk5w<2#vM(_DFHoI^C;rv|aQ zvGUHyCznwv^@hVcJiaXU&kv0AHZybW+Mn*e_13P0 zq1Z+=WoN2&>T$r{@FfQHS{B)y>}Wd15O$qp9;^=nhgkOfgcw&8!Sm1@zqN!YPq_g( zm5=PTNCodT@nCE5O(d6F!m&;K2rN5q01E=KR9_@v7P+$Y#PgAzCvH|IlHK{HEddbl zo<5>MDrh#U)rK!P7m1Y1kw~>kw2H4$wewj;03(I#stxggi^mtk1T%(Xv9QaTz4h4~ zqf68_Yq8FHtQE=l`}JKGUagp)8tF|^4p{ALFB_GzpX<`0 zuG+1$;H4_-D#0QsDcL~I1Z(3Ye+qxGfSN z;$_f!nHEWfgJoK@j2yO>2(_!Ft!i7jN1NEQM(>~%wY(#_^h*9~1f$*Gxm=8ikkp`NPX&?hC}Yr{PZUEt`>M5v27=~Dd{od+rakP~iD)7k3i|A{^k0Zl00|C!gpF|> zBM_8v=r;E%do4WV?6izQ%iwjlRBN<^f4igc2%~{Z8|xj4V}PTdBY~ljjM-nGGy~y? zB-a}dpTAqdpB+S(RqgpiuqiSbtM+EM#Zpqe3AmV`7VH85o@-uH{%Vuu>~?$m7I8y6ha%6sKzxxHUOnrgIKv4|b1sIHMun(bD#QcOv_ zYB;GR&D`W9LVwqe8I|2_Gm4l#k@fr6KI3DGB2I z1gpaeHGLo0^R1p6J}0@4=J{*-)P+^tMZL2Ke(ca z+T!~cwcF_8Jsgd6et1+KvCDSrUEgpA)`Agpkj1}~0`ksI(6T=qgwQWE`-y&Y|H^)2 zkfbKmX4yNMF*RuK4>lJ4wcYJkw|8stUVZn{ZoTIn=d+=3AR$CZw5x}ilZWZiN5Pi+ z!Ip=alZU~UNzWh*G(H}kbSb6i0 z{s>2bxyOF~ryqOl1FK7qJyxnc_E zT<)ngqq~il-u8CU*zOkPO$4}@$8@FUW@lNJba9mZ!bG8zMfKC$bDr10|HlMc!7&-#^aA;u0i>QUH5cPKJ+Z7wsE23Na87|Hkp>xIP z;QF;|H*WNLBs?_M)wEqS8jYe4hff#C3IP;O;Qr-pJ~GWq1V677 zuMhcp&FZZtIS>vAEz)imxv+1)UaFM#1APRe9I9%BqSa?gKP*)UOPx}k)X$r$6w%58p8}6`sHardH9(Un}(%=}XvdRb&yOUD@B; zt=KwP%4-|)GK5t7bJKA%RLq7#l;92Z;4*#OXS$(Axw1XAU)tK-DmQ!n#?GFkIZ6fj zylX^HmQ}0o3#A5@*=hKsyi~-8XLPj}N43XH0SWb)IGJ?@_Dq~g@olVg(+k-=Rq{IG ztYUO(B~sb1M|)a3Xm^_RT7{&Pqrs!0-tZabWV_zQ#1SM3<)8;N!Ga|`A~M;f$ zLVcsB2q+gP=?;SMnaD&0d3jKyrk&N&96{$fm2@toxPfl>S~UVKNTq3?=^X65b>r%- zgIZUz?oi%cTuBMkL1|;-K3HLVFrKjG&ixWNATrxDbDv@Em%ss$*~pmWt-@%cL)Ha{ z7KMqCtHWCCgDmK4<`PsD) zCN5bg$&>tODxbH*N02}1(E3ah)f(un0U)P8i z0^T}?w|)`GNf>u2AnQ$~TwwENCoowE{I|_5niyD3H8;QgjX*-R+&UiRxrf(p9TxW=U+o~7cPVFV-ZcK(rm>nb3f$4azK82-2ZvZA z6*Y+by=`=4)yG}s8IBGk)1j^I=mZM~@y&L?$Jk752FjbEW+4?=Wo&3Os~kmQQ|fj7 zsAni7+o$o~0QJgNJH^Z~JT)hR`)@ce?SnYpm+q4bgolU3|C3h=lZMJu;RyJ6$BAe;WJiQNDo}6SYFO%e; z`ugiuK^3}%|C_uwkCNoB4?H6>^1d@Gue!6U`lxR8rA7jQgt`S75XQEA?P7b)U>-Yo zckMMk-pqK{`?j*8v6%JP*iXibVaMPd4{I%k(JmNR1VZ+JIgAcVLTdGyU0q#WM^;td z_pzVvFEXmCtJ`3n-`jsSvMMq%GBS?u?|c2eXEU2$a2Gt4P%EK%s#*inJWa*w-3~4( zr{CkKyXu~LpicV{Kdc9+bfV2@6{x7ukZL9OK!5jeZ=wO*1O43t{iO%B8X;(dK)|E7 z3e6^7C9jt~H8btO9PFa7z(8*eu3y~PNc4J%%P*B-ITIrzk}tElxm3Cfe_b|D_fqzZ znCZ(T?J`Tq_nl+qr7DEz_vbhIke&2J6AOUwQn6tWkmrE+!PXo(mv~95)rb+whPv4< zJSYK8IGbVQpGY_i&*aD^5{uw2J6fjhi|2G_Iv4Tb+xYqyknz>3_U$LJw>yyHxd_72 zYL7_72dxMtNWx6_m`?Xe4Wn+39vKM)NRz3@k?m%>++dE=>(RN?yHV`*aDN#Fdm1KF zB1!~MvqJAzJP|kkh)xF#C$Ck(^ls#tR7R7$>O;U(;;e|or%;$MBY9NeNo+W%d~WR% z5U|tf4ht$Y3)?se3F|N23=2l+8+|QNc12+tiqyOpQc*VZt%-w`APev_+jG*+dfaVJg2`rYQAlex^+V^6;MI zWMV<1D4b2Vm#^fnEG=KTw0tQhaLzWpc}(Q~>{w<>OITPU11pwr(JTxH0rZN#=`a@@ z38UI1GzIsLHaEylP0dJi^?B4K>;Cx}f9n1@ha+LJ0wsqj5h#VM5h95pUy#X+RPN}| zNw!lbnRy2U+&EWr(~AmC$r$b z$n#mvu^S&@gC$}Qj{P3#;q5NFHe8{E^@`X~x8EcFTCA3-Woxy(^@4fWryIUUY#7_` z5pUO9^sajI*{Jo}fu+qeBh_MqHtB;R-gNbf*u2wzC&I!-)3$*4zSJvXL&ScMblgpM z)m^0Vr}a{>kPb3}uRjaEJ`BE|1z)MBV2_iGvCzG!CsZVd!3GBMuc#m6ed#7VAR$l@ zcqkqa5*AQ4TsEpIG*PEuMdbk9p-^>~A*4o<@B{clIxWCcU=zMjt8K%PTbWX+MkT2o zAS$ep)o?M!1dj4=@d(-$3^@dudt(Ax0jgpY(P(;d$R<`x-aRxa1R($1phq_rJfO0s z*hm02awt0j6M>zlWE2GcikC3MGTIbq+Z1v`0S;X>BSF=3&(jqLk4QrNu-tp< zNsB&gD%sDYCM~M5DCTxf#Z1N??VTGJreiqL77f{yw9B>97EM|7w3m170$WbSo$hk5 zfZ|{>@aQRf_*mMaK8y19ax-d??YXagJZ;P(O>4c6vyEBQYEdeN#=ZPaRdC%ot$>n0 zi_2v!TDB>A53kEu#BCAw?Hn%!K1dA4EclRsoG3#2sgf~P?`k>M*`1C{{ ziC#eu_nj}??9~0P(ZsyZnfK@8O3%Yqk4$#;)G?x~x@i<6-Vv ztj5y)7pw7(01)I=R14W!ItO<(+(*5YsP#nK=&TjYnuF5KsP$m@ybBeFGm=jDcO;oQ zmz<1KS@Y8ge&Yz;&z98P8D=dN82D;bg{Bp4w{O zW*HWnu<%6e9|$squ(3Yo4NV-CQtFtfkbWmUL|>)iSS+L9_N1q?J1j%79PUh5hFX&i zDQIq~I~L1`P`1(NIn@B>qDtwR(?kL4VAE&jP1S8#1bpfwR!D*D;4eKK(H#{?@eL>@ zMS((O^Eh-8g4?Pk0r$B8Wy9Fb6HnmBV!>!iynck0(FeGr~_KXW?!phEL5;m zBbw4Ft9Y&J4qEdr+w%H)=BA~A1{=NnAEE?>>( zH)$*6bmnCacC(hrT;9NNs4C_Nehi;Z9KSi*=mZ@yf-;=93%Y2o z%)&gKP9(xaJZM>9`5+Usa|?tt!MkEP-5@BjRLXgokbUdRozB<4@ImZ`)C?x94YVQJ zOMI?5`QRb)hDu8H0bk18j6O)5m-(4qkI`5yGD0BMxXZ*eM<7a6( z8Xftl;N_`z?gTP*nv^x5)>;@9MwS{9i@YouT}!!f7Li=c5UaM-`cX#sUopb(V}#$& z2>&W0OwGfC2ln2pJ-}Q?KtTA2^>Q4zb-ag?3+pp*_pi;C9f- zv_)uxnVvfki|(;G*qvJM0!t6W%Xhl9iewN!f_M(VtU@DAK>LV5HkW%OSy@AKPQ=CTNiTr^7A>E86oG0HwjNBoG*u_Zj))o3b~_fk-C{fHDX~}bIZFL#pP&X0McAY5lI>%$ z?avY;9Roh!$NsD*>Yk0R*q=KEPcz}ndYt)qDLcsKJsGQT*Q%$RUG3(p`Rsyw%To=t z$$TfK!%NcJj?sC+U3c{Y4%_Hl?-xD&Xv167ZBNAyw!|m=_yMYk0k&`#Ba^@qpUiu( zgS)agaEf^so4odWNW}c_a-+)y@Q|QZV2Q6sdlsc3N`l#;HbrWN^{*uYb!w>e98|=`9v3i}31SkJ(H;b%Mie)KI1+lr0OhuNdbFy$ zqb;|xD;6IjQ;WnVso?y_TF-os4T#9SmV$s!S-le{SWt_LV3ou~~8MJ)Ldx^BpG zSx;s?n>!oZ%zHMooWJ2H&zw<1-5cm29TD`gDqvnFwdihqy^6i3Kd@a7#)hwMK{9u8zH&L0@_JJ^+H%Ci5wYj=nxj%i z%}cOeH$xIN8Jup?61=p02}aG)W^-bKS?8%!%gbKxsz3PJ2OfCud*A+ca#hVyCuN}G ziA?6cax|J+5Bl%9=f{71etvd!eci;B(QJ|@S1e{SxnRb9p5~bnt@x57V2*A)|NO@F z!%sgQDdqF8u3xN4q~q9FwsURWq$6oQzujzJxZrfItZ3EFjL(0(;o?%d2p zza7Hbs8!daQCu$WDI<7}m`h!!H>ihL@@|*#@_vpi0{CgaYmTFjGny}(| zb&z}0Znc{{g0oyE;bE0b&~7)_Y2R2{dhWSPmnauxj`qPBI+0YDJ_{d z&qs^reNpPqkdUIS;v6r8DhYCT2+_0Lpr)_nuLkQ8Ni-c^fQV(y7g|Xa#wuDRq=Clr zdiv?7HFwwBb~l~cL)!Vl`~t2pd1X$KZM&V=iWg#9%cGH#BQFz&SdLgK^==C~pF$Xmep-^?0xS<%tjHSL$+i;|OzJCC{# zKK`u^EWeO-upQvvok>3|%HSPd-tF_}w`243v2Q#y_^rWj>EF0tm3{W!fAxtcuFgF2 z$c)GOdi(s@-EZ~#zriPub->jpm^Td1tm7lR<4ec$JBhPaZsSZtFvo^EB zekhR$d2&=Y>vr+nMO?XQS0v%Lj&TGD&Q!+*T?1-dxq=RVSIqJ|mlS1M7JCPmB9^W1 z3dG|9G6qJo$<#>v1`Q6jtJUpwZ(@BSe{-{1-MpD!=gUZ(ud6LIexp_GuP3BUnRPyE zJv^%lQR3Oy$=%O{=*WN@KIozA5R-b9!+cxm5%S3$NHtz zgMOM+DThRoBRf>L7l974qepu#*-gjYVG|f@x8Y5bVbzuFs&=VFbF+xse#bl~ySw#U zcehJFU<8v0hyh_tE@FBiAA(fnxw|=Mx8tB%WWCwXrNz(8mxBRclbhfqw75O!I0k!8 z9UKB!5{Kj^csSA1NfV&F9zmHh{iru61|61&{Xn-Kn1}}bG~p!cPQJv@P?wHRfWnP? zN>7u@>A*N8JxU0p;L-va+CikP-O_zYb`vgUb&2rq{6c|&Ixn~V0_aE~Z@>KuOQ-!& zC|oRAcSGUQV@WJoXC`a%`#@u_;Cf#wHem9Bk-Xzzqvk2t^DjAuJ>y z=s!ez%<;n?*m&->ky{2<26!P1MhiCEm>jk7K+wQK0j;ZspGeudjJ`ecyO5Eq*aJRd z54Mc8Jf4f1hS1T;ppAEc2Fa~1jwi1ts!`88rhacw#{UfUe0!af4A)q z+11c>r}hbtT^QT^#G422(LSkta_}DG>kmBebrVHFiouIp*NG=bl#6;HQt~92PRM@_ z9evZ2ApWdTXvDHHf)m{_g4`tR#%;Zah=Pn!owC}jYQ>;etX5I2NzQ9D7c4ftt4QnB zBAR=_j#m)wB@6G)MS{=JTjz#kKtVo+j0J@R5`};@1l9lqETCKKfCY97=mKyzpcZgj#VKqgkk};! z;stJ4rbcQ#yo@|P^TN76U_G_<%mM2;t+mAieqOU8Xq6>ab77ISB503F@m(&UGI)u) zl{8MFHk)m4=ZWfK7Lea=_j+EU0uGTg9Pl@T*)T!FQU9SaGh=XI%x%aqhLJba4~=}) zTVD*f>lapc{CXNhe^+(CPmac^;z)PCZWG9&{Aoz4KtI8zAR zDqdrJb+wqGkK?MfkEE;SDj~vE^1GY?sr^9pz(Va&y;jI2>H4;Haey5zItaS85NGHQ zE^blyEC90C7!c;^fpdv=mB{5{Q=f~w2Cn!VHbo`L$|AnNYA7Q;^0NQkitji`3^Vg(Xya2#!L zZ-!I`JV`MBNoYa-ef)d)-ip3Wpbg?();>g+kF(lWjJ)TGC(I9NfAdg(wZCfo(RUMP z%?Lg7bOap!bA$rrx!FT%8q`I8nnbDl`x2r{bJ9>qiv4ydkQHLjSbT)oy^)deN@a6v zg)rU>Id{!f88nPplBP-FG6drPERxzB{hDwU4>#OXthUcf3XW3j%zo)uZd?pT2o; zdT`I+-od@@+{=N}kK8|UZUGwfEJ{m?+$dPNNis~A7RXGZWZ7EVz^hJ=A+;C#>4SvQ;cmP`r2K$YDCy%d&p$ zMpa63m1u`3vW(OVnGhX@tvft_>FF9b-TlN&S3Q58_wK&?AY;R ze0TZM#fxiAii))5cinO!_WE}|@{>RLu3zN4$N%cHpM7TA5lV!e=OkC?R=^5m;pzGU zr5|%~rlar!VF->EQ)U;1U$h=^>`pR0>pl|Wy(D7dAR=+sxaC~-IB_nAp6-yw-oZQy ztXsVv`DSicsn@Po(v&!GGtV|6H@K`a2EgUx;PTz*43aUh2N?q( zBLx$RU=?TuUXgnaW=%vW2}&gx;_JaG&`SE;KmU9_ zyRpTnuPqUo~nUYnznB(m`;bGbA{P7)Jk=7;N z3s+EJD`dPvQXu7`RDj6^7!_i_1Yg^IQ?vFiqRiC&w4r7?&sTL*;11w{e3>W{D%Q6o zeFi9-0(c+~=+SYa#eh_>4@#MP%O0J9FZ{CT?eGPO!h5fhF;<0EyFaqTmcALjFzk=4 zJ$_byo2eamNPC|5zj_FUaN6^K=Wsmg%@uzN{~`>32j2X=%zXcu?HBo-ekSZq_7O zP0owD50gbT5aBQHDPg|7=b!r4x1M_b8&ALRt#7^X^{;>DyS*m+HS*P??zk6At~c&x z9fW1fkQJm(#O=vqZOc8%BF#dK9PKckqlAD|V$jg5r1u%cuF3ctv^&owa*pQd!eY$h z?GJcpsdvEJpzp=(NN1zM>BqI;qEXjELG!PiTU(o5xB0ks)pRtLud)NXNw3O|7Z;6B ze&MAT*+c&H*eUirxM-{mPCUq-zx%tF-4mwt@0FXAMT{Igtonq!(e*KWfi4F<)ks2? zVF`r-xH0@bu_^JLTSB4;*=NGV3cow$K-wKDa!A6YdSY56s}nlaxFk@jdL^FUp?6wT zT59!5y-tO_t_UTtB)?ENY}9K|7U6O2dy7U&yYxNo^yJBTy}-RY7LB0K`mX+!HLVx?mRs+sMQ54}`1@2d)(M zqy^<}#W*mLVi)P#u?;M&m$zt?cPplGMkBrt%c8}PJ|EwQVW8c8@jbZHk;@ADPyn|h z_B=+Uv*_$G*9n=q#1M-FjT9bPh=c`kxJN3WH67k_R@lxhcwjwa>NXsJDN!Umb=&xZ z7Vch?#&Wx34|I&MoM$-d;zthe8E+84XN~1+gr_r>^NgkN^w+@C=NU^W-3DLDMVK*> zKBF3|Z4qKuFjI-bv(KV92=|C6EeNf% zRf*~K`AFovDjWyBMU}`%GgbGGjxu!>M%ZG!Iug7h;fnTsSP?2*n%n>y z$4SBqA6odLCF-PQDEyxQX3|Au8ko()yYB-3r?ZYwkY};YmNW>Vp6G6@6Q7>7gPP83 zK>)K06+T7m(4$D(=athac%VHEfx*^!3liEQ#+-d{&?AxCfS~S1Kr1{OhXe+u-B2Dr zjVeY$?hh6KxgvQem>jsy@Uhuy4WC(b*$HHpME#xOxld`Db`o5%eWe zYegf=pi=7DO!f?|)QP%|9@qed{IH8AMfgZ~E>7yA5dd{q*&FQj zj)k^{duuDsNHJm^OX9VCEM1Zv1NN?FGGAKF4EJW7=Z6*z4WE$G(lv80n>Kzop zC#ni^)lj*7G+gGYoYhr+IS?*~%|CR~xntlS?j#mPYDikPBNyYIVceM_@Nd~EWHv7q zC#7CDDdg;T@(<5o+$A^o_kUL#e9&i)Zo6Rm>=Es3nm&6JjjZXjM^3iw(draUpFKis zJFQXCD(5t7AoLrRb6i3H;J%g5hMVCx>F{O2O15qI3^=h36Smb|s+IMmvpne^XASL7 zc+x-SNgv}`r0(b_PkMkS&G4ju0Hyy4Pb#yuQJ(Y1f|+eUAxmr21d)48eB)=wrjw>Q>dZy{oSsLdEeWApkQ1Y5StWGCRifPt4u66rdq zX~Vql3@Z01M@`?ne(}OI=;C&VGSe)6w?7i6CONLXsv{oZ%v(|`FN|HG5tc=}79`|9^z zeEylgzkK=cpLzbp?|t=iUwZl*PyUDh_?Msl%*UU4>Z@PzJo)7>fBDI;eDx{wjZsu+ znJOj|(TFuwM73d|D<;*a5-61TqzH?TP|Mu#Vb%~|g%rplFx~4~bi1gq!?eRZ6D>k4 zHJoUEWS-)rQeTq=V>W$KyFGwUCCHw5WxF&AhVjvN&o7-TIY>N9$Yu(2dd2TN6$rFVoFvI^1h|Lo%8nF9liB(QbVZNkS{ZpjUGxqqt$+5oR|Lw^ITrD7SfL zb>+s&-Aqb5T7klzci)|*?PQ^#*Xp|0-Q23VLk9M06*=R=ByWV=wXLSxtJiD#>T0d; zNg(h%{o1Pe2Q)15$0o*@oPF;1y*HMZmzOrHjo#<~!0U>o`met5!ZY9c+`sdQR_W+m z{Le3xKL4nKz#>_^gq}`N`s8ytRbBc~@AlT_=0=4n4nOYJN`d>|`OZgvhLisF7rykR zZ#UyXa5)XsQi_Jsn3XHw9z~`BFL2qz zsSK$hIgrBxpm3wZ_vo~!%=9)iz)|V%hv;S!M#pGI3>TfQGq6S4WcEs-@W@C>P@~tX z%B+WKQO(8x6${OM&}i~;tFTonuU}u^*kDygd)bl#l^$|25E_ULP8AM?!Wi60%Rm)o z36k?+7_T{c*Rc~P=cZ=n4$r32qod>T_&5azQ?rNXW~Sy&o;Y^b(bvq(%*=Y`WSO0r zF+c3-_1C`n^wVGaDxf0*=Ik5jFFZ!^( z?C^n}%?RKG4aErtLsk%kbrcY3wSK^#Fz-*NDUgELlM;*n6kY%ynVg;oFaj$V%=@2u z>MLLQ3e?Q{DVzNN=8OBu|BHWPlRvEEI?JC4m?_nNO?S><}hE;Tou5(npO?ozYSsOdScOwEC~ z-aWUV4HglVC*eL8rC7AWM`3M>SS)hkBicWeE$IMUtGCTtuw;jDc1UN3c5LctLugFt zg9Jfz>gN45rPC`~sF4z^Xopw|p`EtS4oUNnO`)J@XS=Wku*=1A8|D}qG4BWaXJ-ZZ zXJ=<@a+y9T4hETeBk)=J;+H)n}}%vzSwnLUp=4i;2BYt(d)04M&AAw?a#F`F9HO`GJ4P8wS(6UUgusMT1HhTbc=rATQCyY zjwh&lOv*_&Ob$h-+rU6ti|<%OM-r|MQ){Zp?c_qK6Yy)Yl4ALpnTfE+GktS;>3TIh zP5u?TUcR_=ou)1rJ->Oay>w%HZ^a^hEUZMXoQP8In5?i~c6xj)m~l3Ht*x7D>@99? ztXbC1Xt#)SzE!TOPTw$F7JUEe#uq4D;Yuc-yZi2A3GKOL`Gs#Tc=VTFd{L~MQn%%F zWP2IIrN@`b&W_8346~gWH7UZTjG7R+!V`ZAToXO zHOFX;F~^T@K$2T+dTJ}nX1`gRe#bAq`xk!UU%Z#^{``Oci@*5hrsnp0^mF7e$;pO` z4Q2^jx2&0M5E>^I1x;NeV##!iC6m~UzCqlx%h{K?B8yB;_%Zdi^@t!D_K9%B-759E zojN;`Baw*Vj!t5=jD&q3^AEb+3txHSi(mWNSHH^r{K${If)M;Ynpe{+R#7@ngrvect3u#%ozHMUy=U&Pl$&EI23iIhgGR{5nyB+>StqkZG`` zM3wIV(fA#(q#{kL=@)Jt#Naw~e>DtRj0W`5`gQ*|ujOZ6xw5?cQa;bDONQP)S5Sr= z6sUP;W~Ro1GSm$H#!bx~fUECbl+xqC!0@AHk>jiBFMsdldb>k84Ru?bO)Vjc+$h5& ziVFiIAAKl<=rwdCtrM;=JX+*+z}*6%)eZ@Kfk#><-XN5A0OvqiY|2Q@=^uK99b=ZGQM6wH=L~?Ke$7Ve|Fw z7!K)ji|rMsKT+gGIU6wsNU!be2-^wl00~~3el_X8@6>!YLr^n5Ft76SyK+>?f9~|@ zsVP6ngU_BSC>=YjeHg`}Ct{cPt5=CK`LL6MFt5JKj!@!+UL z1mW^S4^gc2!(#Yln#DWyTAf3?nBCPOicFV?*F9YwVBjD+A-mmj)Xn>ffW)287J!JG z_k@4~U)g=x%&B?tnMtTa&Ut#ue|jqCd{(9xcnmA_tn2X}lH27dKX=>Xy)L(D=@q{O zSA8#f#e2Djf5APx7ro+_;G)x04Bn1)0(25wR}4X|bYp6?(5y?y5mR3+5D)9y^`_I8 zp3byZudQu$;!}y6{sGQe8jd(cTimLlI=8pimM$%=ZLi%}JMlEZ_b6`pi!ZJaJ076tyrh=wtD)@G<7Mo7au!z>_Bz`?l_S>aBMu2Cq&_h!Qlc5(e3x1ps>-ufso58d#N(LZC~g-H2TU1d z!8FBLg=fg7wNiq`F_kU$`XkBYNGK2pO&-j~v<^WzW5@43KIW+ws=ldco-VK^pM0qQ$NlTl z0rMe!QvVh6lW*03MgL2EMZNx#9Sc)qDZ)Y4$t9>^1MvmPZJ>ZZ<{Yasm1)HJLn^PwN_=TqS`!E*lJ0|ZMTQ5VZ}YR>NKTxdi`uErO)qU zYq>xl(8L5=69?|O=bi%-s!X6l74>+sWxe!;WToShvML1mw25Tmab-%OrD_hJPa3|c zxER18f0l-50<9!b%KZC%58>29fjVgg3AL~_t7wFbtZ&jolMDH7l_K1rk_ z{V)hG`J{UwZmRBptz?v9s>KbqHf~Ub=Ela5&)x%%6F=l(aPMw#@9v?dsFVuW+3vF} zgvU~#R2RPqF(haT5y2rDFT$okn%+Pmga$^?d9|v64j~{F+vVT=kqA`ViejV!gznJ|qsPgF`I3 za1ZH1LB+RA2VAF8g8~8y6XA`7Th(xp`|w9893(i4pi$IF3jmGAK5;m?=V06b$?qxkZ1)tZq2bl4lj@23m+K2k3jfuD4UsT7(`&VvT%-mroJgEyfyPDpv zp(&PXR0W`xF43o}B-AyPVWHaWE^6J6oXMo6*?T5EkwwiIO(n7?PM$g?ny&24&K;T` zpPxrJ;Y)Ord0L$ATPSSofFBJsid<;bo8^0N}HRjYjh>YsuVQL&r)5PhpSY! zmMKtvv)Dq!K1#~fIj#Qh9lmBO7c|DP2Y9%{Oo|ugf z`kcR4L+1m48(YPujAtyxPKs@z@P&NEDx%y7p`x*~bbYzXY$~+AS=WLLS|-h%gs7!= zU~;luC+fl(9XoW$oWb$GBca)n1z$RnX;-3AY#O6Zh=Q~lZdzl2!I!R{B6LKlqFQ9O zX5ivR?IYe3*4`w#lLOFomEOfM&Dj|)W9iEBD|;ErOuk}S@T3y0&Gl-dpK}?`hMO3l zFsh%65RpoS)*DdcOj2u=fUKedB9J9YLLJbNY)(nIk9{T(V&mV%<<#L)86)t8^F0Rkv`M&M zMdzn`X(sdiiP&5i8ItTS&U`g2ndX7~B;)gM`B$ag7wS z9T0YVtEUMjI(mY#K{Z>U(T2iWDGWYX6iPXFP;j>d_By+KM^BAde2Bm5;Eqa2ri_RB zg{BX+wS#DDcV%@v##V%Z*j&U*tjq}z6zvLh$AWLnyT0NW)HP>-delrVC8nX-6EC)< zee+xn=R)A63tH&VG1#xy(F(rofSHFK^=h5aq1;HHxf8r)07M*8|5n2YW+sWik|h(3 zvyMlTlzh&l(LbR4T%@mUqx`!)9FU{sR$$$E)mB;?6=37!_HAr_?H zGxxg?WMbqB0ZW(D(dmSgVj}Tl9N};*BvK>r=goCyCvyAJtcRO7lcJWC(0)~i9yhhy z5lP|}S2~&PUAN(M5{eW!0h*-J$$&r(=~Txx<@5#2WU5<3bk=BB1J9!SX$J`^T{99d zU7%UQp<`YUWYB5JTffsXlL}gZt5SmRmn!J6=xPqrh8xK(Fvs?7a2ww2ez>h{f}SH| z``|{}q2I4d5f=rw1ut+C9d6KH^rE#&-y!1JleQwKQ~}UZqV911FZhOl17bO^!+9Iv zgg$BGWCKpYO=`nRRDumRI|^aJYs1Zf!TwHQgJa(TYyyBmyKx)XsHeNRxn0^1wp5&< z-dev6Y&A72t?dWfo&Mq zAuu$Ovk-0v-%i|tE*BCq2WYIXh!CR52YHm5Vd0xhziafi6+&?0H((Op8`6eIMp48O zfqXr7(oI<5>k5DQ8bd5Qx0-B+yv?*MUPJ8fC%0}!^sc6;@pjp2MjFZ^S zU&vZEwpldmSv2ce#QH3n^}FG4KZRyJJM>(9;_Tp8jDP!|^KX7TQ`~nFT<|OSJ`;ln z20y9&C-W0;A=2QZ+Mmfwf6sxp4t`}2!7KQ0iU0mjgP$~yZ`H&eg5?`Cw=$17qSSO~ zbhI%lU!@7s87@qWSj^+jp0bWK8;q5jw*_EJom4DEqmxFX7*QgD6%@y!;yQts%$kL@ zvB>*y+dH12A)e+a6xDpMvbNb`di>J&UVeUQ+PO8pg|W%$9Gg&fldV=;f9c}OE?+Qy zV8v0LBtUB4*(~Kro!T4Rs>;-G?fUwr%oCkdB5t=xzUjn+)k0^&tqB4o;{nn!nKK5H z$r$~&lF?Qr;ERRJ)KtZmvUFi%yDg>__oSy^SdNEsBhK)Mze{kYwO|=zp@q(pvaLk@ zt=^){F#8Ee&Bx)$`xr*9;WC8aC(yOs9`L2xfIoOz<|jfpGeB7$7Eeyg!w%I$3v)+2 z;2CsW?2s9QRN``n0&Z8E9gSWvk(rqCN)4iplO0&<@M|(~0(O!RLxrj*K6&UwV(Wzq zg<60ei7}Miu)FX|rQ;6NOx3J#XDIfJih`@|og_R}XHFzS26N4T{u(Yrt5DpF3PR5A zWM4RyAroe?+H?p4t2Jrc1IzQajQ-fDj1LAIaWvYC5U{R$MZAhMmL!w-p+=KM|thJk=1l+Hv69*Lfm}AyOl>>mkXVmJ{qC zI-*nESgAIGM75Hj8LASoyp5GCf)lbH97@8yeXXRblik-Uwl$=IUF@f0yBh0ycNfFy z>@G3rSSSQpEo?PoTY{%BB5)Kdf*`5s+gjgjfqojO=c0)nxM#-Pf^#69Lb#YKh_61gu2U09bxo zDJ#_gc+#s$AZqF9cCR(5;1mHCBk&gL>Yy?VEj6acHjDCup=HMO*cKVv5_69BFO~tu zHoTk@9;)@|^{$Lg3x=4QoXWto;2sJ!(_?EajEr!JH7yG&JqDKl1u`JRFD+P2`0Q5%z<@8y7+# z9H%=kj&@nuU=8?O#?avG#mpZ4$k8K;wJBQJ!_#yhw6jA@>I*|Z5{bcrVq&D9#9w|; zoaS=}$27|dogI&dlp$Jc1+^pj{ME}6m0*X+SEXWSacGyWwH?&ZMkKeZ*9Y_T50bg4 z)T0{)%nRY}Tzq#cnlF;&O)-g8k}Ppnl&iUfSgtktw-5^<#%s;%L9!gqc(bA;qbz5= zyiqO4vSx=vUc$XZ7zY!{(Xlv<9dU}wl|6F3;Wh7Y>4;d$Nq$9NV?o!-C7c7jtHqO3 zGw^Rr;aVa_ueXJ;gmA-RNy3o1cn`$PVIGZ!@PS|xcT#e!p*!1;8*T3S(WJx@XhTyt z85f#lSQq_G@iDkHBx0k%*WFHo zuX`NSp#UWcwPaScn#J`(u`FK`V)1B_=g|qrRkrmuofXA=PfYRShP1$ZG^zJ#`!;Nr z3EM-+zuG>-cPOS<<8THxGJTPZnQLd^kDR^xO2KhX^;9RTG;IAR4H*8D11bJoD}iNu}72StgK0sUGW0Yk=m$U zW2U?We5R(xN9F6aHGE_UQ(gQdShp(M>o@s&div0zN0VLht+k=Qz~|!PNJGM7A2%ka zvj-XYzS|S09~uggG_)FOxX07jNkPg^U-1o#aiqs~ScmWqdof>Q zGx<`r*=%gDT|Z9%0xU#)Lkt8_)v{5x*obV(V$O;k%O+bHVwU~PBsZ;iM73rixyQJT zi_8qU1KA1o5@zWbO!=MVq zghKpEwFlpzMDsqfn6yxyI6hx6oJj2_2y5p5!K|VEAsG1k$oNGta1jjrJuvVtio1wr zPRy{Pe|lS6i@FEJ1K3gzPe$Ppv7p>suZRgHLWfxb)X_+{>viN~8Rd<`hG+o>UIPULJelGHxh^|Iq3HQ;k?_| z`Oa6Kt&lM(<$#*X6Fg|5#{~#0jAml+A20I=B)ywPDnav%Z4`p2<-6f5-RP4^;WM0} zKqQR^FXGLPat`JlRBaV2(rDHz34PH_N_bEzW6B8GiwYo8AM9b;kL_Y{I?$(kWq|2F z#wL9EF^NVxl~=-><(Pvk^KZb~xg|P|_>Z3)IdkE$( zY&^`mOC_3y8`6)ip^eXGoE;Ik&HeOqOevr(;w@PS@Ff`}N-Ul~OsZ@sw4a<5KYus; z{EyI2&%w{lAvJv{>yS|9A=^`~0l7n=Edkvf>FL;5N~|C^*DCcU@#cZB7awHrA0w&b zitpFDLR1(=Skb_jI&LF(rYa4x!i$QPZhCSrSy8@&d8Xn0VaSTO1?Dxkk`*WAO zA#6e=4AO~FqI&K`O}*T~uA(L^MUL)vlgN=8-Ebp!CMWgK(2;!;>hm4RNz6-3YQ zDr!RE#72R2Y0$j`G2N9MG_h+bT7sAqHDTgHW%dW}OiO<-luZ8%wDhRv(msS_`k#?Z zDlb58$CgaPdzCkJhx>(7aF1}pjWKBu%l?ncCx{6<<4``KU;s73PJdVtC87ZfCebwi zJQ1Y~znhykSO2LZ%HoJNNMz)M$qZLEg!WL=(Oroq0!?ex(J9tfs40Ui+ec5wZk1dJ zu5=PpbE{L+L}uBOxFJR5MC3duBF8BMJ+wND4SMA62Tu=0597cBkewu4$b8LOs5H$D zuv_^=CX_THvrb7QM3ORDd+Oj3Qpu#(0!t76jKx@Oo46{}d~VP)6;7+?S3(L9SQu<= zfJe7XZx)X36;tHa>IB5g%b=NI|N{qV$2^zbzs5(NobYW*ZE4efu??hP9{bH(< z!=ru&s+zw|M4>tPLw68QmbUjZ$fpk?pZ*mz^*clP^xIj-k$G!Yt!~CL%iTgrLy*bM z&u?#+#k4_W)6K2YZ4!wZK4P^OnKh4LLm4vaU0gf22_r1|mL0#{gZJ*(FI4>U4v+*m zL!enWY#2vv1IF}Z(x$EbHV)hVe{{!!QLC@7TCzwqxnUguH9N7L1JwFgmIVtt6rWTu zuxMp?7f2>1tNtMIlT0G(EpH+g-b*ET7R0fDR61yxF=!N&p~-w=?$BQH5Jv-k1_aXl zVNk;2`HD=ftJ~sc=h^v=Tr;>)4xhv%;adaO*jQ>;b;Ctrc_1+SWXK^_vjJMZ$a2vTOZU@+eBeO-KEcANQ5M{O3ev!5qc=z#aneZ+tqPICigPC zclv-Gv`uH=eZt0egJ91gTU=>D^7LHaqK2K#;a>d^b9_$=QA3ZV+Y~i?D9VMx&>Ui# zUn+@|3EVDL#HXTMD%|^yMe!X_g!oh5&HU$GNSXZ>#dly%c-J0_;$uIAMe(s8#-g}e z$Ye1!ocu2>udLdZ!|BPf%tz)@$P+juYocR@5vh$@Y1_6D9zJsH#7C@h8GF%6U~3QV zIMuH`p3zay&<;43408e$ zZFv%Cr;K?YxmT6nF*qbW5w;D#wjpoFl7~(5)@4t<6muB6c=5{3^20RB z$Bgam!n%ANi`~KW_83_fF6X1kAmQ_OFugry5VS5|hmxr~nBFW|_yClD7A5Trlz$(T z{{WPJR>StDe9*|ZB4JZv;0^jTSf46*^})R+Hp(AkV%tlS=EB5n#x%$cdV}CbJsxxN zcC#522gyNm5S^JDx2WpM6@@1UK^?1}m7+Ow(x#_+dHu$#{u8I}zI!jV5l&%6{q7pI zG$LzMb*c}F%O!b>IctZQKDdw=B8eBZRTYKoY7FF}ghqVOXX8e1uo&&O8s*Yn#Nm;L z4x37q;2>p)0x7@>)l9x;Dl3!(o=85aWr+eWr0_B8WYV&O{wBKqZ!s3X$yodbWAOoW z{oiCPFhPTE3fV*=@4nzl)+~`-1ij3SCcVuKDh@T>M4f=sjcS$o4b_pGO>E8$65(pq z1BnhnD>d3P6$jXkf_~=m!H9u|r}daq60C%4-nH=BmoDJ%KXhzjG~l6@Y}Xz0&&* zFLw!@8uY37)xyxwb#MqN1Q^46T{CyDggf-KZ~pyKv4^dvN0bbsgQkMjn61r?>v))? z)LNxhE0R~dzP`FfRVDLv;+Pf#(bX5J!T(}@%jHwQ!4oCFT;Ez*diB!PrEAx&U0+_N zl2snF_Oeoz_jS}9v(*~)XVEd7GNF`U4>t{*U2drW>5!5^nDpoB;#+2Z z;PUE#llXe(Yb`=~$T{U~TpK^}!ptzBr(C7hAz0F5*3FwFZBRK=?oeNhaUk`A$up4% zrly3In6Hzmssv$RxFtn^)Hr6T0iPR`bz_Plh6KRTkcow=+8jbqyqKwoA(HrZ>23Z~ zXcW?^^{3FWe+pctQ!DNKIDw$DLT9CM4Obbbzgzdj2@EI^$>4BL&d*e@p1;0IG~*~a zj1dPB7@9K@4uo4^oPKmb{qJsmrQsXPk|6N6pZenU$%lXb z!Fv*g?~XqC)Yrc9%+1XPX{gUU_ndq7?zg?|)Ql@KJx!$W@QmuNlqFBysl!3N^?tVq z_Tm@|R*T~I@3W;<)0ucQHJ?g=fCR%F7Hdl)bNDbW!i7V-fx_+efuE4Tx=z&-&FE}k zSl0RjEva@=^cYwqY2F{>L(JrP#S~;cC-=1%eo|G3 zR7{d+`wjvF2EB4&+Z{_p0^QnZ6_;BZvjo4SU{a^$^by-iQmEfevt(GgTtR9ejP|xyFJE3Q_Cc4X8he$Q z1Rr}Rd`vQv-ib_kCwy#9MpskAD-OVk`5B;h_5AW0A**T48Rolk*PNTC@^>&88JV6M zC&Am-Q!#cuA6+qePReVLcI@(-b274;3@w(4e(%E5&uucJK07z=)9OoFJx}O)mZOfm z#n;Lk-55Mib5Ps5`pmhQ1|aa-HVom z*Yb!%hc<;PlbbcCv3J=F;K;;$_53mv?umzuURja7aDl$dB~jqS2_SL6Y8Yq^)IHwX zys{}|A0hXvJ1~S72y1ZlIjAS~`LR3Dfmj$J|0hrEuv+`V+?3poy1sRTdoW%<@i(9P z!u82_{QMc=5#9U^|F|#?VI#GM@I@NmHmPairI<0*;R4zT_lz)(tYRF`tZp_oSK%hY zTkr40*B=^KNLHVS+ovAP_iB&L^CPsxbYo zH%HDoP9v(90UPJx!)akRf`y0YtxeET7?S2KG9Bq^MIu*;_SdxaoS=2?R7!E2^#KWv zy~dCmVcWA48g`}*5;mobK972>>S}y89sX*4(O(}TYoIn*9I?@OF9)-&QDQTazyg-N z)+jO037!ZP6w{W8wo+{v4qLskP>8P`ljVXt5e5{!1{Nq`Z5FGeWHkNo`t(V43?%7W zLnYA$$DIBcMI!xfY~zlBaJwpm(5m-!If#nc!r(a+6$bvPyf=GBL*awSHMeM1!U}B+ zA(SM0{GfKxVu8c}cFKw|63!wzo&1X!RMUR#NUykR^TaV+v_8ctVVh33Rs0=aCk!@Uc2#kFIBYYn||KB_tod0|L!w4mp6-%u;I>59z7O2PUr?BJ(u_rV^}_nV=}S?BenWG{lA*=vJ;)#IUirpyxvq;?F24BuCedmA!MRvy zay%5MwsaTI?yodSl*vutY8gswhi4F;oF-YtB8$vOy}hW{E9Oz05wvn@kmg#g&Eox49+`;ObArQ*qtKyNu9T~7YAIY> zs*vIwo=kbP=G7NL6-k#2h5g=Et52Q=DO6kjxw%#)qu&V_>^Ce38&lNwtpmakvE zeEIVAk|hbA0&kxJZ=V8hp9F8e1l~TCb!caLu8G4eGsy7CsYxV1waU^Hvqz831d#nG zcSv4Q?}%Z~++I`1?Hz}pZYjJY{J>stA5W8mG&z~}5H;9pD&??SUfb-TJ>gCf4e^TT zh!qu+c3aV%pnH5+p=+ly51`#y%rn&CkwmZ*>dnODWH*1ap+)X`?eVG65t7q;fBUKb z=cYFLwx56SH2Jm9zU@cf_NFsG@ryt4V?V~~%$xXl{K)w6)At@sA3S`R)xD>WA36Sp zH$3pb18;c48}7UBzBia>{;wzg>T#COe(9@Udg9Zce&*&Dy7>i?K$bl=#_{Jr;|#=>%VZnB8f(Z=5X zbMO7-fBEC%Xdws`*d!7~C9TEciLucnC8c4z@X`pC&e1H8QtFDk$W5|rs+Xn$4T4SSd^Lzm1D_B`A zXyKG-*rIN~4s|=khtTb%gKjS`WR)GVN)VZ69Q`r~w@LhCg~>J=9Q{zLWopBrIt{2& zZRv0krDlq}yS2bjuNy&DO1-X~Dn!)rqdt*&hVq|Gh0C=rJlN?}iab+sKcY~M6?Hx) z3O%7`e$VZ-huXdIVP&tK0!20@$-DXB8{xQ?Bo^t*Vu?YKiz27hvj1HjC}P_%-bf;M zjb0{>s8d_Nv0kczanr}=w97AE^Ig7p`RcV-UwHKb|JSZwzPMgkyScK3v5^0jwZiqK z>&tJPKYHxQ?BTn{2$u85;#7th&GfccF5fKnOVs{S#f)}p84at0O{?Ny<8!k!vue)q zR%|CfEprYuQkiecoI^4IQb|i}S+ZO`7gjy0{JWE`&W0GxU0TQoBhMM4dAfD@bXlja zfbMBiz^6^EA-5Jz_g5vaE|p=>kWtP}q>v{*(j6=YF^&>}$45rMV;8xsud9`lHft2|!LE}{Mky1%qgd{qk@1nUjkV-x8(p({@P6-Y7=&zM($9*ze+W#7nkmu2>V^e6`6}#*uk`ZFG3v811|?WU`r+q@%dVQ zZGE|u7~4gX&MjyWni!v)JAD6rr;Z;#b?<%n=^ghR&;IxuPewICiM%s?@GNB!cdD(C zZ9=;jTC5P~54L8fCbC__y|i@`o(iU{T)cWU4?iE;$HuefarX$uWNrzx@Hicfj)#U~ zk3aqFHksGpNMBoj>K5o6574i!=^`dy!p`*4HXYo&&6^eU357W1UDF_?q2z3X7A*@C zkWG!jqWMpyTx&Qfv#%wkPJu$ET!IxJ_QU(YEQw$GV|d9Q!Al;?QW-GoxcijN31w1ZZ8K2-k2%dP z+>;L$%RD7z-sp=e;eT5QKXgFx94k&E{HNAHG%F6I6*smv*0!|SVL^D%7Z?Pk7Q8>` z4+;}ftO@Gsd47EU(!V>j_%GMCoZH%n{piL;5!ggCwB^*vr(tk1as%NfzGu zlS$x^=gJ*%KkBBeyJ9USRRZn?{Z?)cRlM7gF&nZ{%&bj}P{K`@FXgXXx=tYV3EemF zctZ4982EILFXR(0I^?fNhG@`Yv2C5~l@KI!>LgbbOCIat3XsT4-HZhvOA5p*!i9D)ljl1IK1el^cMh zZpWfFHCzrOQ@Xh;$7O_&<=XZ}sjGPtep{4>bfF#*=VWjP{514bRobj41F%DS89trE zF_kzzqz8tk-xK;!0zW+#r+BZXPvu)f{1+il-xb4>^Nwb1Ex&y8`b<_0tDJu*jrZKM z1=6h5nr>In3&tbtwQ8wGZCqqYR{8}7y}J@$P+TE3ZABo)X8)Gw0Fx|y9&#QTwW-rn zdt|@jIbf{E6JzQW0A;6&m-Z+Cg0G?kY_8teC`oRjm*=<@P=bX+C|Pe*GY$>0kC3tv zChrzTDt*B#@`chnoguzyB!LbD2SebXLObw}Urf<*){gT7U_zgJ5D)85eSMFTAn2wP zg=z(JA6X2OQRf~-L6FQ+7MzroMP0D0E5DjG$eOY+>%RrF#JVDtSLS9FX~|DUL zNPWgEnM~WX@>shAvh@jbVj`|Z?aK20gpGEQ9ki>}y9Px2T9R%kfi`o9B&tJ+#EBEP zDwTWH28D0InL}v`t2uHc^1uE|6m9;_3opFz9qKv1aO1`cx9XXDRR~Mx>}{7^Q0NT0eZj}VdkZk6y{@Nsr#=Q0*{?8iwU zJag>yfjgsRY$SE~=rmZl;Gnr^Zu}0Ixq5YJb-M*(j!JqMaq>ZQYbi&qaM02(7SqK1 z?&_$P;tGe;1|O1g`#T*6&@wDOXsNF*vR_5Z7!ifl(qyp{!u3U$HD_nA!7K0FkRR@1 z>5v>8j+y%A+Gc(24w$NKZ&pcu(*`r+>G1>M^qsI(_j$sxh>fk%QBw4ekHH7u1GfHe z@WD@J9mnnxSs_e?gbyX}6~^wv+93mQa4=epRALbI0PTm+z}tCcfjJgt;nDw>wl{%p z>^ko}AMgM?>6!FQr=#RJC$W{Zuc&D5kI!ErN03r&4tvo@n?Lw`{{a_Ch z+YU!9%96W{&5KunsF;~g5_D@78aFl=^ik6JDd}tMg0Z`QmGvwt23hd=E)K z;6{Ofk?VL!doep31*WvPA`qXfMFiy2zJENOvig)(tmY-C7>tM~uv)4LGF1Tov6ob( zO%)xC>{@KPK|or%i?tvl?FoPmz)E6-1WqZ%Nnzqr!5de>Te{N@tvTm1Lt{A*SBfZj zka47IE2Rr8@hw-s0P(ux;bSA6jIwEEi{bPqKRm zleJZ9g_c2FaUdmuwWG?tYJa9kjrk_!1QZ% zTC9f2{Xo~Z;4lgk%n5ErE;a-CtP`hau}K&3{!9M!WBUkQ&irmL~rEV?!c%)LyLw#7z&H0 z1e%7bNu;SaE2Vr6o+fpuIZVmEF;=k|hvKaw{RE(RqhrgGA{ujNPr2W9G698;r>Eu) zkERlF25CGD?$MA7#T$@xFHQX}vjO=2c&NHbgn*jX+tuUPBk*hf%j6?&Ss;8XcTE$oVFdMp^~rD_m%_Ay(58o>;P^=}q5l(fn~i zvUEft{zbVS~-+lfJTXOfYeZEeGBD5@T!Yf19#lR`}=)FJ7~Sp zLy9ZCA?4kso0<>w3Nxg$5l%m}#|b3TPOB>QD0*1ks`Ja#L8X~_rW|4U|mr#)?u!Nq-y2R;`G@{HI$Eibzye zty0Kum2#&a+TT&++_AC~2KUR&5B~tSdvYJ2ktj0ezL-7WGSFk*z9$rh+qvb4(sr87vHlmf)0x6KK7xMbZJZ>j|8C@a>)?7bdU}jbq;IjJ3LD zhg^nTNa!>7bHfg;m8q;zw zrIpI`(tTPKG!Wu)4ZgwXJ-FBDq*bLTQJ3i@FILp3_+-(dqGORDDr2H`KW$8RoKLJ+ zcBb1+R*X!)o`3y@e&KQ5hv?k)M1eYheic288m=|KmX8FDVxfYzCJ_p44a^L_ewXLI zVYd`PC)`s?3)efQTdQDNCvZL*SadbQ+8?lj%18C%NRQt}dOU;l5Z|z5K7BUhR!ye# z@Nt`3WH|TBlk7RK)Gy(c@2(+}QG^820KoAIO$U$$jtxoncTSqYB9x0a4h`9lA{K=I zN#!&Za*AV6_WDZ}Ir06zHx)d2&rncEO9OQeyT(y&*|{@L@!jL_d@|lD48(vidn}3k zCU*}-zJV#4o|&5pW0`jwsXOj*SX~e`R~+tFJYFhntZkyd#SSHd7!h0}9#AhXH`QP{ zUyH9=`(foioN-cjsCh}KmhCQwv$0SEDiS94E9s_0Kn;|-7jyM0Rs+d_I0VFVmT=e^ z+jLAkXJWWcf?k5o38ZMlNWW4>$AY=FpG|Vb_#QPH5VI_4hc{lTBl;GZV4n-dy-nMx z!p4eU{i%tWBS&X~M&B`A>yyXszUNrn)jv7of?sdbx>>kav1v8Gx{eJ6qdJCci-hO0 zn6rfok|O1puzV?lF}MY1XE2MJkA1gq+p?NbVM>fZrbxvrm3b@eOclfWBa8C`qgJ!0 za3VaZSh1z;Ttc9}o^WZcEn}m9KVK@&;lWtw5z@28z9N6_$9Jd0g7u!;GBr~Q^RcXD zbqU-PY>8!DQJth*p4$4I4)f8l)u0Wku%j}O>7*74!+2s7bAu!r(^uI~j9GEw@570| zk2L>HIPrJj#NUMze+Qr50*pn*rdo|5uZIm^c#M2V5=ICb^%);wGlR9-4UE}hM-nYf zE4LLP%Y~jy(z>@;ym3PeV~`sL)^2y$4puzK;?(62h@YZyPC8LWL1E<1A0JY zr%NY&eN$p34=?bBjbgPBv{I8Ps@B2Y7k*QVzxX&T2kac9*qECZY~dk4qL|DQbsntz zhAm{hLagNT8zhxF+$gI;0aV}G+APW1@X!A|vfH_6-*fk1%9++}4%Pf2gs7NdF#Ynr z>ArhE7A2At^ba_6eckPccuXUry^Z_uXm+~S?ZTuEkE#Z_&}}%Oy^r^v{EoO3`cyY4 z_XX#`sdw(-)Zj#B?&xi#9}hTn%Q$x89e0hm`r1J$+}&anf9Dz~EtZF}S>zLsOh-p;tNyGpvi$X1LCfV3a)6v(4pKQ7NO{CjdA z{*@*bEZ`je6~V-CoTIk&5BO!r|uxj!p+YGsfp2Atfe z77MbJ@Ms_C$(yh-d&zvcC7r>NrSML7DuqFcWLNB^&I^nZq<|32ehctoZX zg{%e6jBTGQ}5mUvYh zDDOBWl`+E8_+>04k#C=DE(?2ua(yHT1JR= z6cjXUak2kEa=VB1JqTlXZCRdcFYdN0OKW|t=<)8Nzmzd9JtGhxAfpUB1qAO}Ibfxx zK)YoHiBmkYyIo#GtN6L@!2h*X11{97*8DijJosg(Im18T!6^_7$t&6hh45;S0Hi&( zOB2ieX#e?Af$c+0@v2b;$+*9m;^i%bbS2c3+L_aa$-3CZ&BkSy;; zvWSU$AU~+Ej`TvvXl+g&{2{nKO=5kXxd>5=k~X`Najm!UW)91e^GOv9piu$jWD1b zkY{;vnPJk5XjKdNu+VW9FRV~A?>{t)GTkpMYBbHPreUs1-CaXh`W0eIIfYZzERjmY;ltFoK(91dj|t-=Ye$-$xG7 zBAWrAS`aPRZko*_5Gpq-jB^vR4VW&g+ErLHk{_zRS$@3!uU>CcuH+!8f9^Y=SiJJ$ zySO<4gQ(vD62()F+##gwH2t|L9bez9b~@F~>k(5hiu4pXx1(ocFE#6-NNSp<+`1Q` zmytuysXg?p+uh&hQ1!X5zwp8<}d41Vcum zV9)YqX2ZSp^-XDY-s?#PtyNVoL6Hba0q00>DbOgFU8$7tz|t5zpjaRP0~k8_V5@lP zlB~oaWlfRln~_`2tPJQ?Q>vm*(|s5>E#6)Hz2YOK#usvvQFC^1{>lNj?V;Gc?+HR3 z!b?(D19LznK!zqYb13c*h7uJ)z_HiyxfRL|oZ?6?24Ej1(UMi}=XT95&46)pP9er3 zVzzI!Zr3~`>~T|eA%u(5C=hA&72o_eeDm9=j9)hl_np9wl=~7%4vllL3+h`IrMiGz~)9r4Ml}!Dh%INF$ zBC}=JsKBlB$!3?-7`_M}Ba=2o3kqqtRSVQnu4oXUh`?Gz`T{Rvch!yfR{8clgR7m|gWsR+~(PoW4graC_S1#m>?K4K(wtR;U(D{9-@W9o@(M43@yR*1K+3bK+I$hT0W?Pghm4JcPLR1Ui7%uP^}ls=GlJ?y3F(xgDh68DD{C96?rI|In^%ee;U|n7h-j5%0D9iM*IReQ|s)4q>k^p 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 z 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�eK_#GV@`_lyEqb0}HHMYk|3?Tg(PP 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%0ANce6Vv>ck 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

    T#CAYRCm~XLE(P#Ae20BJ&cc0Dl93mLWE3V%7 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 T|LQkCdG41!{X75c@bmu%TOfKC literal 0 HcmV?d00001 diff --git a/client/ayon_core/vendor/python/qtmaterialsymbols/resources/__init__.py b/client/ayon_core/vendor/python/qtmaterialsymbols/resources/__init__.py index 581b37c213..6da4c6986b 100644 --- a/client/ayon_core/vendor/python/qtmaterialsymbols/resources/__init__.py +++ b/client/ayon_core/vendor/python/qtmaterialsymbols/resources/__init__.py @@ -5,32 +5,12 @@ CURRENT_DIR = os.path.dirname(os.path.abspath(__file__)) def get_font_filepath( - font_name: Optional[str] = "MaterialSymbolsOutlined-Regular" + font_name: Optional[str] = "MaterialSymbolsOutlined" ) -> str: return os.path.join(CURRENT_DIR, f"{font_name}.ttf") def get_mapping_filepath( - font_name: Optional[str] = "MaterialSymbolsOutlined-Regular" + font_name: Optional[str] = "MaterialSymbolsOutlined" ) -> str: return os.path.join(CURRENT_DIR, f"{font_name}.json") - - -def regenerate_mapping(): - """Regenerate the MaterialSymbolsOutlined.json file, assuming - MaterialSymbolsOutlined.codepoints and the TrueType font file have been - updated to support the new symbols. - """ - import json - jfile = get_mapping_filepath() - cpfile = jfile.replace(".json", ".codepoints") - with open(cpfile, "r") as cpf: - codepoints = cpf.read() - - mapping = {} - for cp in codepoints.splitlines(): - name, code = cp.split() - mapping[name] = int(f"0x{code}", 16) - - with open(jfile, "w") as jf: - json.dump(mapping, jf, indent=4) From d23269b654b86443f482d33ce52b315b2fb0c2ff Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 3 Oct 2025 17:06:26 +0200 Subject: [PATCH 479/595] override '_drawtext' in ffmpeg burnins --- client/ayon_core/scripts/otio_burnin.py | 35 +++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/client/ayon_core/scripts/otio_burnin.py b/client/ayon_core/scripts/otio_burnin.py index 77eeecaff6..47bc5dd444 100644 --- a/client/ayon_core/scripts/otio_burnin.py +++ b/client/ayon_core/scripts/otio_burnin.py @@ -7,6 +7,8 @@ import tempfile from string import Formatter import opentimelineio_contrib.adapters.ffmpeg_burnins as ffmpeg_burnins +from PIL import ImageFont + from ayon_core.lib import ( get_ffmpeg_tool_args, get_ffmpeg_codec_args, @@ -36,6 +38,39 @@ TIMECODE_KEY = "{timecode}" SOURCE_TIMECODE_KEY = "{source_timecode}" +def _drawtext(align, resolution, text, options): + """ + :rtype: {'x': int, 'y': int} + """ + x_pos = "0" + if align in (ffmpeg_burnins.TOP_CENTERED, ffmpeg_burnins.BOTTOM_CENTERED): + x_pos = "w/2-tw/2" + + elif align in (ffmpeg_burnins.TOP_RIGHT, ffmpeg_burnins.BOTTOM_RIGHT): + ifont = ImageFont.truetype(options["font"], options["font_size"]) + if hasattr(ifont, "getbox"): + left, top, right, bottom = ifont.getbbox(text) + box_size = right - left, bottom - top + else: + box_size = ifont.getsize(text) + x_pos = resolution[0] - (box_size[0] + options["x_offset"]) + elif align in (ffmpeg_burnins.TOP_LEFT, ffmpeg_burnins.BOTTOM_LEFT): + x_pos = options["x_offset"] + + if align in ( + ffmpeg_burnins.TOP_CENTERED, + ffmpeg_burnins.TOP_RIGHT, + ffmpeg_burnins.TOP_LEFT + ): + y_pos = "%d" % options["y_offset"] + else: + y_pos = "h-text_h-%d" % (options["y_offset"]) + return {"x": x_pos, "y": y_pos} + + +ffmpeg_burnins._drawtext = _drawtext + + def _get_ffprobe_data(source): """Reimplemented from otio burnins to be able use full path to ffprobe :param str source: source media file From 7c0aef98dceebf5e66dd9e8babc2c6f07b3ec68c Mon Sep 17 00:00:00 2001 From: Ynbot Date: Mon, 6 Oct 2025 12:01:06 +0000 Subject: [PATCH 480/595] [Automated] Add generated package files from main --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index c7a72e0b43..6643698ce6 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.6.1+dev" +__version__ = "1.6.2" diff --git a/package.py b/package.py index f6853d8816..d45d387dd1 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.6.1+dev" +version = "1.6.2" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index 18f2047a92..e2ee09e66c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.6.1+dev" +version = "1.6.2" description = "" authors = ["Ynput Team "] readme = "README.md" From 67539297ae287f7f3b569cfe692582e4c7799dda Mon Sep 17 00:00:00 2001 From: Ynbot Date: Mon, 6 Oct 2025 12:01:45 +0000 Subject: [PATCH 481/595] [Automated] Update version in package.py for develop --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index 6643698ce6..0cea28a13d 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.6.2" +__version__ = "1.6.2+dev" diff --git a/package.py b/package.py index d45d387dd1..115c0dadd8 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.6.2" +version = "1.6.2+dev" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index e2ee09e66c..e32d3d2d85 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.6.2" +version = "1.6.2+dev" description = "" authors = ["Ynput Team "] readme = "README.md" From 2a32d56bc44d33b6130c0d1cacc88ae5514016ff Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 6 Oct 2025 12:02:42 +0000 Subject: [PATCH 482/595] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 6b75179e7b..e1e5e053c0 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to AYON Tray options: + - 1.6.2 - 1.6.1 - 1.6.0 - 1.5.3 From 6643fdca07b3333e5d25241a46ba434cd28c71cb Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 6 Oct 2025 17:12:43 +0200 Subject: [PATCH 483/595] fix import of otio burnins --- client/ayon_core/scripts/otio_burnin.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/scripts/otio_burnin.py b/client/ayon_core/scripts/otio_burnin.py index 77eeecaff6..a4e8848e10 100644 --- a/client/ayon_core/scripts/otio_burnin.py +++ b/client/ayon_core/scripts/otio_burnin.py @@ -6,7 +6,10 @@ import json import tempfile from string import Formatter -import opentimelineio_contrib.adapters.ffmpeg_burnins as ffmpeg_burnins +try: + from otio_burnins_adapter import ffmpeg_burnins +except ImportError: + import opentimelineio_contrib.adapters.ffmpeg_burnins as ffmpeg_burnins from ayon_core.lib import ( get_ffmpeg_tool_args, get_ffmpeg_codec_args, From 434b7bd7b2fce428d20b1788d94369e3a1662e84 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Mon, 6 Oct 2025 16:24:54 +0000 Subject: [PATCH 484/595] [Automated] Add generated package files from main --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index 0cea28a13d..61df8e2e7d 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.6.2+dev" +__version__ = "1.6.3" diff --git a/package.py b/package.py index 115c0dadd8..c201fa3541 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.6.2+dev" +version = "1.6.3" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index e32d3d2d85..14d44c4048 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.6.2+dev" +version = "1.6.3" description = "" authors = ["Ynput Team "] readme = "README.md" From faccabc64cfd25385a8b4c8025ebc5860fb0fd6f Mon Sep 17 00:00:00 2001 From: Ynbot Date: Mon, 6 Oct 2025 16:25:31 +0000 Subject: [PATCH 485/595] [Automated] Update version in package.py for develop --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index 61df8e2e7d..cb43cd72c3 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.6.3" +__version__ = "1.6.3+dev" diff --git a/package.py b/package.py index c201fa3541..5101503403 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.6.3" +version = "1.6.3+dev" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index 14d44c4048..cde88e0941 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.6.3" +version = "1.6.3+dev" description = "" authors = ["Ynput Team "] readme = "README.md" From 201da3b5d1c0ceea369ec3c6484ee20ea9db3571 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 6 Oct 2025 16:26:24 +0000 Subject: [PATCH 486/595] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index e1e5e053c0..e84522395d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to AYON Tray options: + - 1.6.3 - 1.6.2 - 1.6.1 - 1.6.0 From 243436918c8816f1a4e537f5a572f70494ecf39e Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 7 Oct 2025 17:14:34 +0200 Subject: [PATCH 487/595] revert otio to use older version --- client/pyproject.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/pyproject.toml b/client/pyproject.toml index 5acfdf439d..6416d9b8e1 100644 --- a/client/pyproject.toml +++ b/client/pyproject.toml @@ -15,8 +15,7 @@ qtawesome = "0.7.3" [ayon.runtimeDependencies] aiohttp-middlewares = "^2.0.0" Click = "^8" -OpenTimelineIO = "0.17.0" -otio-burnins-adapter = "1.0.0" +OpenTimelineIO = "0.16.0" opencolorio = "^2.3.2,<2.4.0" Pillow = "9.5.0" websocket-client = ">=0.40.0,<2" From 6069471eff8703bee8e87c39dc13c8a5a8a4c160 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 8 Oct 2025 11:38:20 +0200 Subject: [PATCH 488/595] use better method name --- client/ayon_core/plugins/publish/extract_thumbnail.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/plugins/publish/extract_thumbnail.py b/client/ayon_core/plugins/publish/extract_thumbnail.py index 943f169b1c..b5d2d8a82e 100644 --- a/client/ayon_core/plugins/publish/extract_thumbnail.py +++ b/client/ayon_core/plugins/publish/extract_thumbnail.py @@ -219,7 +219,7 @@ class ExtractThumbnail(pyblish.api.InstancePlugin): ) # If the input can read by OIIO then use OIIO method for # conversion otherwise use ffmpeg - repre_thumb_created = self._create_thumbnail_oiio( + repre_thumb_created = self._create_colorspace_thumbnail( full_input_path, full_output_path, colorspace_data @@ -382,7 +382,7 @@ class ExtractThumbnail(pyblish.api.InstancePlugin): return ext in IMAGE_EXTENSIONS or ext in VIDEO_EXTENSIONS - def _create_thumbnail_oiio( + def _create_colorspace_thumbnail( self, src_path, dst_path, From 0232e4641a69cd69f004a3dbb968c5008aebd927 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 8 Oct 2025 11:38:37 +0200 Subject: [PATCH 489/595] remove irrelevant log --- client/ayon_core/plugins/publish/extract_thumbnail.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/client/ayon_core/plugins/publish/extract_thumbnail.py b/client/ayon_core/plugins/publish/extract_thumbnail.py index b5d2d8a82e..e796e35ae2 100644 --- a/client/ayon_core/plugins/publish/extract_thumbnail.py +++ b/client/ayon_core/plugins/publish/extract_thumbnail.py @@ -229,12 +229,6 @@ class ExtractThumbnail(pyblish.api.InstancePlugin): # oiiotool isn't available or representation is not having # colorspace data if not repre_thumb_created: - if oiio_supported: - self.log.debug( - "Converting with FFMPEG because input" - " can't be read by OIIO." - ) - repre_thumb_created = self._create_thumbnail_ffmpeg( full_input_path, full_output_path ) From c0ac022cf78c54f646e2f51d4b194653f7747158 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 8 Oct 2025 11:38:48 +0200 Subject: [PATCH 490/595] fallback to oiio if ffmpeg conversion fails --- .../plugins/publish/extract_thumbnail.py | 45 ++++++++++++++++++- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/plugins/publish/extract_thumbnail.py b/client/ayon_core/plugins/publish/extract_thumbnail.py index e796e35ae2..316d7a4ed9 100644 --- a/client/ayon_core/plugins/publish/extract_thumbnail.py +++ b/client/ayon_core/plugins/publish/extract_thumbnail.py @@ -6,6 +6,7 @@ import re import pyblish.api from ayon_core.lib import ( + get_oiio_tool_args, get_ffmpeg_tool_args, get_ffprobe_data, @@ -210,6 +211,12 @@ class ExtractThumbnail(pyblish.api.InstancePlugin): full_output_path = os.path.join(dst_staging, jpeg_file) colorspace_data = repre.get("colorspaceData") + # NOTE We should find out what is happening here. Why don't we + # use oiiotool all the time if it is available? Only possible + # reason might be that video files should be converted using + # ffmpeg, but other then that, we should use oiio all the time. + # - We should also probably get rid of the ffmpeg settings... + # only use OIIO if it is supported and representation has # colorspace data if oiio_supported and colorspace_data: @@ -234,6 +241,11 @@ class ExtractThumbnail(pyblish.api.InstancePlugin): ) # Skip representation and try next one if wasn't created + if not repre_thumb_created and oiio_supported: + repre_thumb_created = self._create_thumbnail_oiio( + full_input_path, full_output_path + ) + if not repre_thumb_created: continue @@ -449,9 +461,38 @@ class ExtractThumbnail(pyblish.api.InstancePlugin): return True + def _create_thumbnail_oiio(self, src_path, dst_path): + self.log.debug(f"Extracting thumbnail with OIIO: {dst_path}") + + try: + resolution_arg = self._get_resolution_arg("oiiotool", src_path) + except RuntimeError: + return False + + oiio_cmd = get_oiio_tool_args( + "oiiotool", + "-a", src_path, + "--ch", "R,G,B", + ) + oiio_cmd.extend(resolution_arg) + oiio_cmd.extend(("-o", dst_path)) + self.log.debug("Running: {}".format(" ".join(oiio_cmd))) + try: + run_subprocess(oiio_cmd, logger=self.log) + return True + except Exception: + self.log.warning( + "Failed to create thumbnail using oiiotool", + exc_info=True + ) + return False + def _create_thumbnail_ffmpeg(self, src_path, dst_path): - self.log.debug("Extracting thumbnail with FFMPEG: {}".format(dst_path)) - resolution_arg = self._get_resolution_arg("ffmpeg", src_path) + try: + resolution_arg = self._get_resolution_arg("ffmpeg", src_path) + except RuntimeError: + return False + ffmpeg_path_args = get_ffmpeg_tool_args("ffmpeg") ffmpeg_args = self.ffmpeg_args or {} From bb850e9bdcdf5c4a4fa3b2909d043b0533f3a1ed Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 8 Oct 2025 11:59:14 +0200 Subject: [PATCH 491/595] use review channels to create the thumbnail --- .../plugins/publish/extract_thumbnail.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/plugins/publish/extract_thumbnail.py b/client/ayon_core/plugins/publish/extract_thumbnail.py index 316d7a4ed9..4553c1de86 100644 --- a/client/ayon_core/plugins/publish/extract_thumbnail.py +++ b/client/ayon_core/plugins/publish/extract_thumbnail.py @@ -16,7 +16,11 @@ from ayon_core.lib import ( path_to_subprocess_arg, run_subprocess, ) -from ayon_core.lib.transcoding import oiio_color_convert +from ayon_core.lib.transcoding import ( + oiio_color_convert, + get_oiio_input_and_channel_args, + get_oiio_info_for_input, +) from ayon_core.lib.transcoding import VIDEO_EXTENSIONS, IMAGE_EXTENSIONS @@ -469,10 +473,16 @@ class ExtractThumbnail(pyblish.api.InstancePlugin): except RuntimeError: return False + input_info = get_oiio_info_for_input(src_path, logger=self.log) + input_arg, channels_arg = get_oiio_input_and_channel_args(input_info) oiio_cmd = get_oiio_tool_args( "oiiotool", - "-a", src_path, - "--ch", "R,G,B", + input_arg, src_path, + # Tell oiiotool which channels should be put to top stack + # (and output) + "--ch", channels_arg, + # Use first subimage + "--subimage", "0" ) oiio_cmd.extend(resolution_arg) oiio_cmd.extend(("-o", dst_path)) From 455db40985044760b38014b442d5643ee4a58138 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 8 Oct 2025 11:59:29 +0200 Subject: [PATCH 492/595] allow 'rgba' layer name to be used if is available --- client/ayon_core/lib/transcoding.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/lib/transcoding.py b/client/ayon_core/lib/transcoding.py index 75f0c8bc4d..77f383f7a8 100644 --- a/client/ayon_core/lib/transcoding.py +++ b/client/ayon_core/lib/transcoding.py @@ -420,12 +420,16 @@ def get_review_info_by_layer_name(channel_names): channel = last_part[0].upper() rgba_by_layer_name[layer_name][channel] = channel_name - # Put empty layer to the beginning of the list + # Put empty layer or 'rgba' to the beginning of the list # - if input has R, G, B, A channels they should be used for review if "" in layer_names_order: layer_names_order.remove("") layer_names_order.insert(0, "") + elif "rgba" in layer_names_order: + layer_names_order.remove("rgba") + layer_names_order.insert(0, "rgba") + output = [] for layer_name in layer_names_order: rgba_layer_info = rgba_by_layer_name[layer_name] From 0f7176c2d20d7a5460d5da9bb62eecd287945acb Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 8 Oct 2025 12:03:56 +0200 Subject: [PATCH 493/595] avoid duplicated code --- client/ayon_core/lib/transcoding.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/client/ayon_core/lib/transcoding.py b/client/ayon_core/lib/transcoding.py index 77f383f7a8..127bd3bac4 100644 --- a/client/ayon_core/lib/transcoding.py +++ b/client/ayon_core/lib/transcoding.py @@ -422,13 +422,12 @@ def get_review_info_by_layer_name(channel_names): # Put empty layer or 'rgba' to the beginning of the list # - if input has R, G, B, A channels they should be used for review - if "" in layer_names_order: - layer_names_order.remove("") - layer_names_order.insert(0, "") - - elif "rgba" in layer_names_order: - layer_names_order.remove("rgba") - layer_names_order.insert(0, "rgba") + # NOTE They are iterated in reversed order because they're inserted to + # the beginning of 'layer_names_order' -> last added will be first. + for name in reversed(["", "rgba"]): + if name in layer_names_order: + layer_names_order.remove(name) + layer_names_order.insert(0, name) output = [] for layer_name in layer_names_order: From 257a20c263886f8d4b16b48ae0f826c851ecf4a0 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 8 Oct 2025 12:29:53 +0200 Subject: [PATCH 494/595] grammar fix Co-authored-by: Roy Nieterau --- client/ayon_core/plugins/publish/extract_thumbnail.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/publish/extract_thumbnail.py b/client/ayon_core/plugins/publish/extract_thumbnail.py index 4553c1de86..79876f7974 100644 --- a/client/ayon_core/plugins/publish/extract_thumbnail.py +++ b/client/ayon_core/plugins/publish/extract_thumbnail.py @@ -244,7 +244,7 @@ class ExtractThumbnail(pyblish.api.InstancePlugin): full_input_path, full_output_path ) - # Skip representation and try next one if wasn't created + # Skip representation and try next one if wasn't created if not repre_thumb_created and oiio_supported: repre_thumb_created = self._create_thumbnail_oiio( full_input_path, full_output_path From b508c3ffbb8364009c058cfcaa24e0c235bed928 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 8 Oct 2025 14:09:20 +0200 Subject: [PATCH 495/595] add warning logs if thumbnail creation fails --- client/ayon_core/plugins/publish/extract_thumbnail.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/client/ayon_core/plugins/publish/extract_thumbnail.py b/client/ayon_core/plugins/publish/extract_thumbnail.py index 79876f7974..b5885178d0 100644 --- a/client/ayon_core/plugins/publish/extract_thumbnail.py +++ b/client/ayon_core/plugins/publish/extract_thumbnail.py @@ -471,6 +471,9 @@ class ExtractThumbnail(pyblish.api.InstancePlugin): try: resolution_arg = self._get_resolution_arg("oiiotool", src_path) except RuntimeError: + self.log.warning( + "Failed to create thumbnail using oiio", exc_info=True + ) return False input_info = get_oiio_info_for_input(src_path, logger=self.log) @@ -501,6 +504,9 @@ class ExtractThumbnail(pyblish.api.InstancePlugin): try: resolution_arg = self._get_resolution_arg("ffmpeg", src_path) except RuntimeError: + self.log.warning( + "Failed to create thumbnail using ffmpeg", exc_info=True + ) return False ffmpeg_path_args = get_ffmpeg_tool_args("ffmpeg") From e6db46d0e43ffa95d1485d6559eb81f71c2487dd Mon Sep 17 00:00:00 2001 From: Ynbot Date: Wed, 8 Oct 2025 13:32:34 +0000 Subject: [PATCH 496/595] [Automated] Add generated package files from main --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index cb43cd72c3..89f69f50e1 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.6.3+dev" +__version__ = "1.6.4" diff --git a/package.py b/package.py index 5101503403..f001460889 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.6.3+dev" +version = "1.6.4" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index cde88e0941..2473ecc9fd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.6.3+dev" +version = "1.6.4" description = "" authors = ["Ynput Team "] readme = "README.md" From 6c44eca710288ec481b1a30540b699cd65ba15d3 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Wed, 8 Oct 2025 13:33:10 +0000 Subject: [PATCH 497/595] [Automated] Update version in package.py for develop --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index 89f69f50e1..bbced6b641 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.6.4" +__version__ = "1.6.4+dev" diff --git a/package.py b/package.py index f001460889..114f7d12ef 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.6.4" +version = "1.6.4+dev" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index 2473ecc9fd..44c6a9d73c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.6.4" +version = "1.6.4+dev" description = "" authors = ["Ynput Team "] readme = "README.md" From 5631e07174d06f0e63668955fbd08f4acd8342ea Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 8 Oct 2025 13:34:09 +0000 Subject: [PATCH 498/595] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index e84522395d..27ed2217dd 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to AYON Tray options: + - 1.6.4 - 1.6.3 - 1.6.2 - 1.6.1 From e98e3a1d99c7d67f2b88e2b981bb9b5d5df70696 Mon Sep 17 00:00:00 2001 From: Vahan Sosoyan Date: Thu, 9 Oct 2025 18:16:17 +0400 Subject: [PATCH 499/595] Fix typo --- client/ayon_core/scripts/otio_burnin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/scripts/otio_burnin.py b/client/ayon_core/scripts/otio_burnin.py index 737faa7fe4..bd94225979 100644 --- a/client/ayon_core/scripts/otio_burnin.py +++ b/client/ayon_core/scripts/otio_burnin.py @@ -51,7 +51,7 @@ def _drawtext(align, resolution, text, options): elif align in (ffmpeg_burnins.TOP_RIGHT, ffmpeg_burnins.BOTTOM_RIGHT): ifont = ImageFont.truetype(options["font"], options["font_size"]) - if hasattr(ifont, "getbox"): + if hasattr(ifont, "getbbox"): left, top, right, bottom = ifont.getbbox(text) box_size = right - left, bottom - top else: From afb0b082fd847c2e160f13798a00c0dfb0a608b9 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 10 Oct 2025 13:29:35 +0200 Subject: [PATCH 500/595] just set minimum size --- client/ayon_core/tools/utils/dialogs.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/client/ayon_core/tools/utils/dialogs.py b/client/ayon_core/tools/utils/dialogs.py index 5dd0ddd54e..e6df68c168 100644 --- a/client/ayon_core/tools/utils/dialogs.py +++ b/client/ayon_core/tools/utils/dialogs.py @@ -49,8 +49,6 @@ class ScrollMessageBox(QtWidgets.QDialog): self.setWindowFlags(QtCore.Qt.WindowTitleHint) - layout = QtWidgets.QVBoxLayout(self) - scroll_widget = QtWidgets.QScrollArea(self) scroll_widget.setWidgetResizable(True) content_widget = QtWidgets.QWidget(self) @@ -63,14 +61,8 @@ class ScrollMessageBox(QtWidgets.QDialog): content_layout.addWidget(label_widget) message_len = max(message_len, len(message)) - # guess size of scrollable area - # WARNING: 'desktop' method probably won't work in PySide6 - desktop = QtWidgets.QApplication.desktop() - max_width = desktop.availableGeometry().width() - scroll_widget.setMinimumWidth( - min(max_width, message_len * 6) - ) - layout.addWidget(scroll_widget) + # Set minimum width + scroll_widget.setMinimumWidth(360) buttons = QtWidgets.QDialogButtonBox.Ok if cancelable: @@ -86,7 +78,9 @@ class ScrollMessageBox(QtWidgets.QDialog): btn.clicked.connect(self._on_copy_click) btn_box.addButton(btn, QtWidgets.QDialogButtonBox.NoRole) - layout.addWidget(btn_box) + main_layout = QtWidgets.QVBoxLayout(self) + main_layout.addWidget(scroll_widget, 1) + main_layout.addWidget(btn_box, 0) def _on_copy_click(self): clipboard = QtWidgets.QApplication.clipboard() From abcb4fe3e42270bc30082f3ce138948f1852922a Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Fri, 10 Oct 2025 13:29:42 +0200 Subject: [PATCH 501/595] use py3 super --- client/ayon_core/tools/utils/dialogs.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/tools/utils/dialogs.py b/client/ayon_core/tools/utils/dialogs.py index e6df68c168..6dc3cf1d8b 100644 --- a/client/ayon_core/tools/utils/dialogs.py +++ b/client/ayon_core/tools/utils/dialogs.py @@ -41,7 +41,7 @@ class ScrollMessageBox(QtWidgets.QDialog): """ def __init__(self, icon, title, messages, cancelable=False): - super(ScrollMessageBox, self).__init__() + super().__init__() self.setWindowTitle(title) self.icon = icon @@ -98,7 +98,7 @@ class SimplePopup(QtWidgets.QDialog): on_clicked = QtCore.Signal() def __init__(self, parent=None, *args, **kwargs): - super(SimplePopup, self).__init__(parent=parent, *args, **kwargs) + super().__init__(parent=parent, *args, **kwargs) # Set default title self.setWindowTitle("Popup") @@ -155,7 +155,7 @@ class SimplePopup(QtWidgets.QDialog): geo = self._calculate_window_geometry() self.setGeometry(geo) - return super(SimplePopup, self).showEvent(event) + return super().showEvent(event) def _on_clicked(self): """Callback for when the 'show' button is clicked. @@ -222,9 +222,7 @@ class PopupUpdateKeys(SimplePopup): on_clicked_state = QtCore.Signal(bool) def __init__(self, parent=None, *args, **kwargs): - super(PopupUpdateKeys, self).__init__( - parent=parent, *args, **kwargs - ) + super().__init__(parent=parent, *args, **kwargs) layout = self.layout() From b7822123289e789776c91b19a0a69b4fa3757a5c Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 10 Oct 2025 16:04:20 +0200 Subject: [PATCH 502/595] Extracted gap filling from last version --- client/ayon_core/lib/plugin_tools.py | 97 +++++++++++++++++++ .../plugins/publish/extract_review.py | 91 +---------------- 2 files changed, 99 insertions(+), 89 deletions(-) diff --git a/client/ayon_core/lib/plugin_tools.py b/client/ayon_core/lib/plugin_tools.py index 654bc7ac4a..1bc5824b86 100644 --- a/client/ayon_core/lib/plugin_tools.py +++ b/client/ayon_core/lib/plugin_tools.py @@ -4,6 +4,15 @@ import os import logging import re import collections +from typing import Optional, Any, Tuple +import clique +import speedcopy + +import ayon_api +import pyblish.api + +from ayon_api import get_last_version_by_product_name, get_representations + log = logging.getLogger(__name__) @@ -151,3 +160,91 @@ def source_hash(filepath, *args): time = str(os.path.getmtime(filepath)) size = str(os.path.getsize(filepath)) return "|".join([file_name, time, size] + list(args)).replace(".", ",") + + +def fill_sequence_gaps_with_previous( + collection: str, + staging_dir: str, + instance: pyblish.plugin.Instance, + current_repre_name: str, + start_frame: int, + end_frame: int +) -> Tuple[dict[str, Any], Optional[dict[int, str]]]: + """Tries to replace missing frames from ones from last version""" + used_version_entity, repre_file_paths = _get_last_version_files( + instance, current_repre_name + ) + if repre_file_paths is None: + # issues in getting last version files + return (None, None) + + prev_collection = clique.assemble( + repre_file_paths, + patterns=[clique.PATTERNS["frames"]], + minimum_items=1 + )[0][0] + prev_col_format = prev_collection.format("{head}{padding}{tail}") + + added_files = {} + anatomy = instance.context.data["anatomy"] + col_format = collection.format("{head}{padding}{tail}") + for frame in range(start_frame, end_frame + 1): + if frame in collection.indexes: + continue + hole_fpath = os.path.join(staging_dir, col_format % frame) + + previous_version_path = prev_col_format % frame + previous_version_path = anatomy.fill_root(previous_version_path) + if not os.path.exists(previous_version_path): + log.warning( + "Missing frame should be replaced from " + f"'{previous_version_path}' but that doesn't exist. " + "Falling back to filling from currently last rendered." + ) + return (None, None) + + log.warning( + f"Replacing missing '{hole_fpath}' with " + f"'{previous_version_path}'" + ) + speedcopy.copyfile(previous_version_path, hole_fpath) + added_files[frame] = hole_fpath + + return (used_version_entity, added_files) + + +def _get_last_version_files( + instance: pyblish.plugin.Instance, + current_repre_name: str, +): + product_name = instance.data["productName"] + project_name = instance.data["projectEntity"]["name"] + folder_entity = instance.data["folderEntity"] + + version_entity = get_last_version_by_product_name( + project_name, + product_name, + folder_entity["id"], + fields={"id"} + ) + + if not version_entity: + return (None, None) + + matching_repres = get_representations( + project_name, + version_ids=[version_entity["id"]], + representation_names=[current_repre_name], + fields={"files"} + ) + + if not matching_repres: + return None + matching_repre = list(matching_repres)[0] + + repre_file_paths = [ + file_info["path"] + for file_info in matching_repre["files"] + ] + + return (version_entity, repre_file_paths) diff --git a/client/ayon_core/plugins/publish/extract_review.py b/client/ayon_core/plugins/publish/extract_review.py index 04e534054e..535f8ab6cf 100644 --- a/client/ayon_core/plugins/publish/extract_review.py +++ b/client/ayon_core/plugins/publish/extract_review.py @@ -13,14 +13,13 @@ import clique import speedcopy import pyblish.api -from ayon_api import get_last_version_by_product_name, get_representations - from ayon_core.lib import ( get_ffmpeg_tool_args, filter_profiles, path_to_subprocess_arg, run_subprocess, ) +from ayon_core.lib.plugin_tools import fill_sequence_gaps_with_previous from ayon_core.lib.transcoding import ( IMAGE_EXTENSIONS, get_ffprobe_streams, @@ -511,7 +510,7 @@ class ExtractReview(pyblish.api.InstancePlugin): temp_data=temp_data ) elif fill_missing_frames == "previous_version": - new_frame_files = self.fill_sequence_gaps_with_previous( + _, new_frame_files = fill_sequence_gaps_with_previous( collection=collection, staging_dir=new_repre["stagingDir"], instance=instance, @@ -1050,92 +1049,6 @@ class ExtractReview(pyblish.api.InstancePlugin): return all_args - def fill_sequence_gaps_with_previous( - self, - collection: str, - staging_dir: str, - instance: pyblish.plugin.Instance, - current_repre_name: str, - start_frame: int, - end_frame: int - ) -> Optional[dict[int, str]]: - """Tries to replace missing frames from ones from last version""" - repre_file_paths = self._get_last_version_files( - instance, current_repre_name) - if repre_file_paths is None: - # issues in getting last version files, falling back - return None - - prev_collection = clique.assemble( - repre_file_paths, - patterns=[clique.PATTERNS["frames"]], - minimum_items=1 - )[0][0] - prev_col_format = prev_collection.format("{head}{padding}{tail}") - - added_files = {} - anatomy = instance.context.data["anatomy"] - col_format = collection.format("{head}{padding}{tail}") - for frame in range(start_frame, end_frame + 1): - if frame in collection.indexes: - continue - hole_fpath = os.path.join(staging_dir, col_format % frame) - - previous_version_path = prev_col_format % frame - previous_version_path = anatomy.fill_root(previous_version_path) - if not os.path.exists(previous_version_path): - self.log.warning( - "Missing frame should be replaced from " - f"'{previous_version_path}' but that doesn't exist. " - "Falling back to filling from currently last rendered." - ) - return None - - self.log.warning( - f"Replacing missing '{hole_fpath}' with " - f"'{previous_version_path}'" - ) - speedcopy.copyfile(previous_version_path, hole_fpath) - added_files[frame] = hole_fpath - - return added_files - - def _get_last_version_files( - self, - instance: pyblish.plugin.Instance, - current_repre_name: str, - ): - product_name = instance.data["productName"] - project_name = instance.data["projectEntity"]["name"] - folder_entity = instance.data["folderEntity"] - - version_entity = get_last_version_by_product_name( - project_name, - product_name, - folder_entity["id"], - fields={"id"} - ) - if not version_entity: - return None - - matching_repres = get_representations( - project_name, - version_ids=[version_entity["id"]], - representation_names=[current_repre_name], - fields={"files"} - ) - - if not matching_repres: - return None - matching_repre = list(matching_repres)[0] - - repre_file_paths = [ - file_info["path"] - for file_info in matching_repre["files"] - ] - - return repre_file_paths - def fill_sequence_gaps_with_blanks( self, collection: str, From a7209e68f0b0142d138f18e88656470354f8ad0b Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 10 Oct 2025 16:05:04 +0200 Subject: [PATCH 503/595] Push through reuseLastVersion value to deadline metadata --- client/ayon_core/pipeline/farm/pyblish_functions.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/farm/pyblish_functions.py b/client/ayon_core/pipeline/farm/pyblish_functions.py index 0d8e70f9d2..4e9f9ed601 100644 --- a/client/ayon_core/pipeline/farm/pyblish_functions.py +++ b/client/ayon_core/pipeline/farm/pyblish_functions.py @@ -249,7 +249,8 @@ def create_skeleton_instance( # map inputVersions `ObjectId` -> `str` so json supports it "inputVersions": list(map(str, data.get("inputVersions", []))), "colorspace": data.get("colorspace"), - "hasExplicitFrames": data.get("hasExplicitFrames") + "hasExplicitFrames": data.get("hasExplicitFrames") or False, + "reuseLastVersion": data.get("reuseLastVersion") or False } if data.get("renderlayer"): From 3a0ba21117d53fc8120f29a6c5a90f7da3df6e9c Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 10 Oct 2025 16:17:31 +0200 Subject: [PATCH 504/595] Return attrib for frameStart query --- client/ayon_core/lib/plugin_tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/lib/plugin_tools.py b/client/ayon_core/lib/plugin_tools.py index 1bc5824b86..1ee8f673e0 100644 --- a/client/ayon_core/lib/plugin_tools.py +++ b/client/ayon_core/lib/plugin_tools.py @@ -225,7 +225,7 @@ def _get_last_version_files( project_name, product_name, folder_entity["id"], - fields={"id"} + fields={"id", "attrib"} ) if not version_entity: From 98d8417c737ba5faaecab2dd5adfb78c4300af35 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 10 Oct 2025 16:36:44 +0200 Subject: [PATCH 505/595] Removed confusing message --- client/ayon_core/lib/plugin_tools.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/lib/plugin_tools.py b/client/ayon_core/lib/plugin_tools.py index 1ee8f673e0..ec7668bdbf 100644 --- a/client/ayon_core/lib/plugin_tools.py +++ b/client/ayon_core/lib/plugin_tools.py @@ -199,7 +199,6 @@ def fill_sequence_gaps_with_previous( log.warning( "Missing frame should be replaced from " f"'{previous_version_path}' but that doesn't exist. " - "Falling back to filling from currently last rendered." ) return (None, None) From 29baac0d306969973226f7e20a20682a6e86b8b4 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 10 Oct 2025 16:38:43 +0200 Subject: [PATCH 506/595] Moved message where it makes sense --- client/ayon_core/plugins/publish/extract_review.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/ayon_core/plugins/publish/extract_review.py b/client/ayon_core/plugins/publish/extract_review.py index 535f8ab6cf..fac68a511a 100644 --- a/client/ayon_core/plugins/publish/extract_review.py +++ b/client/ayon_core/plugins/publish/extract_review.py @@ -520,6 +520,10 @@ class ExtractReview(pyblish.api.InstancePlugin): ) # fallback to original workflow if new_frame_files is None: + self.log.warning( + "Falling back to filling from currently " + "last rendered." + ) new_frame_files = ( self.fill_sequence_gaps_from_existing( collection=collection, From c046588ea8e6a1caf9d610ae6569bda3e3cd4e6d Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 10 Oct 2025 16:40:38 +0200 Subject: [PATCH 507/595] Ruff --- client/ayon_core/lib/plugin_tools.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/lib/plugin_tools.py b/client/ayon_core/lib/plugin_tools.py index ec7668bdbf..117083a9c9 100644 --- a/client/ayon_core/lib/plugin_tools.py +++ b/client/ayon_core/lib/plugin_tools.py @@ -8,7 +8,6 @@ from typing import Optional, Any, Tuple import clique import speedcopy -import ayon_api import pyblish.api from ayon_api import get_last_version_by_product_name, get_representations From ef0af72632b74170f1bf7b381dac093b234f4f9b Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Oct 2025 13:33:12 +0200 Subject: [PATCH 508/595] Updated typin Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/lib/plugin_tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/lib/plugin_tools.py b/client/ayon_core/lib/plugin_tools.py index 117083a9c9..122d61c726 100644 --- a/client/ayon_core/lib/plugin_tools.py +++ b/client/ayon_core/lib/plugin_tools.py @@ -168,7 +168,7 @@ def fill_sequence_gaps_with_previous( current_repre_name: str, start_frame: int, end_frame: int -) -> Tuple[dict[str, Any], Optional[dict[int, str]]]: +) -> tuple[Optional[dict[str, Any]], Optional[dict[int, str]]]: """Tries to replace missing frames from ones from last version""" used_version_entity, repre_file_paths = _get_last_version_files( instance, current_repre_name From 951ea6286b1babfef3ab46e28fa88d8a574e1273 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Oct 2025 13:33:32 +0200 Subject: [PATCH 509/595] Removed unneeded import Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/lib/plugin_tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/lib/plugin_tools.py b/client/ayon_core/lib/plugin_tools.py index 122d61c726..3931e98777 100644 --- a/client/ayon_core/lib/plugin_tools.py +++ b/client/ayon_core/lib/plugin_tools.py @@ -4,7 +4,7 @@ import os import logging import re import collections -from typing import Optional, Any, Tuple +from typing import Optional, Any import clique import speedcopy From afe863e36b0d86b60676b226badc7e23e88cac73 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Oct 2025 13:34:07 +0200 Subject: [PATCH 510/595] Removed unnecessary parentheses Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/lib/plugin_tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/lib/plugin_tools.py b/client/ayon_core/lib/plugin_tools.py index 3931e98777..eff66fecfe 100644 --- a/client/ayon_core/lib/plugin_tools.py +++ b/client/ayon_core/lib/plugin_tools.py @@ -227,7 +227,7 @@ def _get_last_version_files( ) if not version_entity: - return (None, None) + return None, None matching_repres = get_representations( project_name, From 9a0f4b72e3e7fe2220202c4236fa848314bd89cb Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Oct 2025 13:34:53 +0200 Subject: [PATCH 511/595] Formatting change Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/pipeline/farm/pyblish_functions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/pipeline/farm/pyblish_functions.py b/client/ayon_core/pipeline/farm/pyblish_functions.py index 4e9f9ed601..a5053844b9 100644 --- a/client/ayon_core/pipeline/farm/pyblish_functions.py +++ b/client/ayon_core/pipeline/farm/pyblish_functions.py @@ -249,8 +249,8 @@ def create_skeleton_instance( # map inputVersions `ObjectId` -> `str` so json supports it "inputVersions": list(map(str, data.get("inputVersions", []))), "colorspace": data.get("colorspace"), - "hasExplicitFrames": data.get("hasExplicitFrames") or False, - "reuseLastVersion": data.get("reuseLastVersion") or False + "hasExplicitFrames": data.get("hasExplicitFrames", False), + "reuseLastVersion": data.get("reuseLastVersion", False), } if data.get("renderlayer"): From c3de53ae5e85a367487dc7a9d0cda3ab699589e7 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Oct 2025 13:35:09 +0200 Subject: [PATCH 512/595] Removed import Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/lib/plugin_tools.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/client/ayon_core/lib/plugin_tools.py b/client/ayon_core/lib/plugin_tools.py index eff66fecfe..3b39567207 100644 --- a/client/ayon_core/lib/plugin_tools.py +++ b/client/ayon_core/lib/plugin_tools.py @@ -8,8 +8,6 @@ from typing import Optional, Any import clique import speedcopy -import pyblish.api - from ayon_api import get_last_version_by_product_name, get_representations From 1f88b90cbabbcaaaa53392a9c1ad40a3e9ceddd0 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Oct 2025 13:35:28 +0200 Subject: [PATCH 513/595] Added return type Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/lib/plugin_tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/lib/plugin_tools.py b/client/ayon_core/lib/plugin_tools.py index 3b39567207..dc371a9ed1 100644 --- a/client/ayon_core/lib/plugin_tools.py +++ b/client/ayon_core/lib/plugin_tools.py @@ -212,7 +212,7 @@ def fill_sequence_gaps_with_previous( def _get_last_version_files( instance: pyblish.plugin.Instance, current_repre_name: str, -): +) -> tuple[Optional[dict[str, Any], Optional[list[str]]]: product_name = instance.data["productName"] project_name = instance.data["projectEntity"]["name"] folder_entity = instance.data["folderEntity"] From 1da4abc9bd87aefed1fadd2cb5a219c9c86a56fc Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Oct 2025 13:35:46 +0200 Subject: [PATCH 514/595] Fixed return Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/lib/plugin_tools.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/lib/plugin_tools.py b/client/ayon_core/lib/plugin_tools.py index dc371a9ed1..676d3e43b5 100644 --- a/client/ayon_core/lib/plugin_tools.py +++ b/client/ayon_core/lib/plugin_tools.py @@ -234,9 +234,10 @@ def _get_last_version_files( fields={"files"} ) - if not matching_repres: - return None - matching_repre = list(matching_repres)[0] + matching_repre = next(matching_repres, None) + if not matching_repre: + return None, None + repre_file_paths = [ file_info["path"] From bd4381fe9b22ede0b70bbb4b0343c9e19caa3d73 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Oct 2025 13:45:24 +0200 Subject: [PATCH 515/595] Moved fill_sequence_gaps_with_previous --- client/ayon_core/lib/plugin_tools.py | 96 ------------------------ client/ayon_core/pipeline/publish/lib.py | 95 ++++++++++++++++++++++- 2 files changed, 94 insertions(+), 97 deletions(-) diff --git a/client/ayon_core/lib/plugin_tools.py b/client/ayon_core/lib/plugin_tools.py index 676d3e43b5..b19fe1e200 100644 --- a/client/ayon_core/lib/plugin_tools.py +++ b/client/ayon_core/lib/plugin_tools.py @@ -1,17 +1,9 @@ # -*- coding: utf-8 -*- """AYON plugin tools.""" import os -import logging import re import collections -from typing import Optional, Any -import clique -import speedcopy -from ayon_api import get_last_version_by_product_name, get_representations - - -log = logging.getLogger(__name__) CAPITALIZE_REGEX = re.compile(r"[a-zA-Z0-9]") @@ -157,91 +149,3 @@ def source_hash(filepath, *args): time = str(os.path.getmtime(filepath)) size = str(os.path.getsize(filepath)) return "|".join([file_name, time, size] + list(args)).replace(".", ",") - - -def fill_sequence_gaps_with_previous( - collection: str, - staging_dir: str, - instance: pyblish.plugin.Instance, - current_repre_name: str, - start_frame: int, - end_frame: int -) -> tuple[Optional[dict[str, Any]], Optional[dict[int, str]]]: - """Tries to replace missing frames from ones from last version""" - used_version_entity, repre_file_paths = _get_last_version_files( - instance, current_repre_name - ) - if repre_file_paths is None: - # issues in getting last version files - return (None, None) - - prev_collection = clique.assemble( - repre_file_paths, - patterns=[clique.PATTERNS["frames"]], - minimum_items=1 - )[0][0] - prev_col_format = prev_collection.format("{head}{padding}{tail}") - - added_files = {} - anatomy = instance.context.data["anatomy"] - col_format = collection.format("{head}{padding}{tail}") - for frame in range(start_frame, end_frame + 1): - if frame in collection.indexes: - continue - hole_fpath = os.path.join(staging_dir, col_format % frame) - - previous_version_path = prev_col_format % frame - previous_version_path = anatomy.fill_root(previous_version_path) - if not os.path.exists(previous_version_path): - log.warning( - "Missing frame should be replaced from " - f"'{previous_version_path}' but that doesn't exist. " - ) - return (None, None) - - log.warning( - f"Replacing missing '{hole_fpath}' with " - f"'{previous_version_path}'" - ) - speedcopy.copyfile(previous_version_path, hole_fpath) - added_files[frame] = hole_fpath - - return (used_version_entity, added_files) - - -def _get_last_version_files( - instance: pyblish.plugin.Instance, - current_repre_name: str, -) -> tuple[Optional[dict[str, Any], Optional[list[str]]]: - product_name = instance.data["productName"] - project_name = instance.data["projectEntity"]["name"] - folder_entity = instance.data["folderEntity"] - - version_entity = get_last_version_by_product_name( - project_name, - product_name, - folder_entity["id"], - fields={"id", "attrib"} - ) - - if not version_entity: - return None, None - - matching_repres = get_representations( - project_name, - version_ids=[version_entity["id"]], - representation_names=[current_repre_name], - fields={"files"} - ) - - matching_repre = next(matching_repres, None) - if not matching_repre: - return None, None - - - repre_file_paths = [ - file_info["path"] - for file_info in matching_repre["files"] - ] - - return (version_entity, repre_file_paths) diff --git a/client/ayon_core/pipeline/publish/lib.py b/client/ayon_core/pipeline/publish/lib.py index 3b82d961f8..4d555ae48b 100644 --- a/client/ayon_core/pipeline/publish/lib.py +++ b/client/ayon_core/pipeline/publish/lib.py @@ -7,7 +7,10 @@ import copy import warnings import hashlib import xml.etree.ElementTree -from typing import TYPE_CHECKING, Optional, Union, List +from typing import TYPE_CHECKING, Optional, Union, List, Any +import clique +import speedcopy +import logging import ayon_api import pyblish.util @@ -27,6 +30,7 @@ from .constants import ( DEFAULT_PUBLISH_TEMPLATE, DEFAULT_HERO_PUBLISH_TEMPLATE, ) +from ayon_api import get_last_version_by_product_name, get_representations if TYPE_CHECKING: from ayon_core.pipeline.traits import Representation @@ -34,6 +38,8 @@ if TYPE_CHECKING: TRAIT_INSTANCE_KEY: str = "representations_with_traits" +log = logging.getLogger(__name__) + def get_template_name_profiles( project_name, project_settings=None, logger=None @@ -1143,3 +1149,90 @@ def get_trait_representations( """ return instance.data.get(TRAIT_INSTANCE_KEY, []) + + +def fill_sequence_gaps_with_previous( + collection: str, + staging_dir: str, + instance: pyblish.plugin.Instance, + current_repre_name: str, + start_frame: int, + end_frame: int +) -> tuple[Optional[dict[str, Any]], Optional[dict[int, str]]]: + """Tries to replace missing frames from ones from last version""" + used_version_entity, repre_file_paths = _get_last_version_files( + instance, current_repre_name + ) + if repre_file_paths is None: + # issues in getting last version files + return (None, None) + + prev_collection = clique.assemble( + repre_file_paths, + patterns=[clique.PATTERNS["frames"]], + minimum_items=1 + )[0][0] + prev_col_format = prev_collection.format("{head}{padding}{tail}") + + added_files = {} + anatomy = instance.context.data["anatomy"] + col_format = collection.format("{head}{padding}{tail}") + for frame in range(start_frame, end_frame + 1): + if frame in collection.indexes: + continue + hole_fpath = os.path.join(staging_dir, col_format % frame) + + previous_version_path = prev_col_format % frame + previous_version_path = anatomy.fill_root(previous_version_path) + if not os.path.exists(previous_version_path): + log.warning( + "Missing frame should be replaced from " + f"'{previous_version_path}' but that doesn't exist. " + ) + return (None, None) + + log.warning( + f"Replacing missing '{hole_fpath}' with " + f"'{previous_version_path}'" + ) + speedcopy.copyfile(previous_version_path, hole_fpath) + added_files[frame] = hole_fpath + + return (used_version_entity, added_files) + + +def _get_last_version_files( + instance: pyblish.plugin.Instance, + current_repre_name: str, +) -> tuple[Optional[dict[str, Any]], Optional[list[str]]]: + product_name = instance.data["productName"] + project_name = instance.data["projectEntity"]["name"] + folder_entity = instance.data["folderEntity"] + + version_entity = get_last_version_by_product_name( + project_name, + product_name, + folder_entity["id"], + fields={"id", "attrib"} + ) + + if not version_entity: + return None, None + + matching_repres = get_representations( + project_name, + version_ids=[version_entity["id"]], + representation_names=[current_repre_name], + fields={"files"} + ) + + matching_repre = next(matching_repres, None) + if not matching_repre: + return None, None + + repre_file_paths = [ + file_info["path"] + for file_info in matching_repre["files"] + ] + + return (version_entity, repre_file_paths) From 949cfc75a61b5a1c14eeec40d9153e56c7da4331 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Oct 2025 13:47:14 +0200 Subject: [PATCH 516/595] Renamed fill_sequence_gaps_with_previous --- client/ayon_core/pipeline/publish/lib.py | 2 +- client/ayon_core/plugins/publish/extract_review.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/pipeline/publish/lib.py b/client/ayon_core/pipeline/publish/lib.py index 4d555ae48b..657a57226d 100644 --- a/client/ayon_core/pipeline/publish/lib.py +++ b/client/ayon_core/pipeline/publish/lib.py @@ -1151,7 +1151,7 @@ def get_trait_representations( return instance.data.get(TRAIT_INSTANCE_KEY, []) -def fill_sequence_gaps_with_previous( +def fill_sequence_gaps_with_previous_version( collection: str, staging_dir: str, instance: pyblish.plugin.Instance, diff --git a/client/ayon_core/plugins/publish/extract_review.py b/client/ayon_core/plugins/publish/extract_review.py index fac68a511a..fe0e7d4e3b 100644 --- a/client/ayon_core/plugins/publish/extract_review.py +++ b/client/ayon_core/plugins/publish/extract_review.py @@ -19,7 +19,7 @@ from ayon_core.lib import ( path_to_subprocess_arg, run_subprocess, ) -from ayon_core.lib.plugin_tools import fill_sequence_gaps_with_previous +from ayon_core.pipeline.publish.lib import fill_sequence_gaps_with_previous_version from ayon_core.lib.transcoding import ( IMAGE_EXTENSIONS, get_ffprobe_streams, @@ -510,7 +510,7 @@ class ExtractReview(pyblish.api.InstancePlugin): temp_data=temp_data ) elif fill_missing_frames == "previous_version": - _, new_frame_files = fill_sequence_gaps_with_previous( + _, new_frame_files = fill_sequence_gaps_with_previous_version( collection=collection, staging_dir=new_repre["stagingDir"], instance=instance, From f3300a67e42dac2698ca2a153f1e2cd220f88a85 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 13 Oct 2025 15:51:35 +0200 Subject: [PATCH 517/595] Formatting change Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/plugins/publish/extract_review.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/publish/extract_review.py b/client/ayon_core/plugins/publish/extract_review.py index fe0e7d4e3b..89926d2235 100644 --- a/client/ayon_core/plugins/publish/extract_review.py +++ b/client/ayon_core/plugins/publish/extract_review.py @@ -19,7 +19,9 @@ from ayon_core.lib import ( path_to_subprocess_arg, run_subprocess, ) -from ayon_core.pipeline.publish.lib import fill_sequence_gaps_with_previous_version +from ayon_core.pipeline.publish.lib import ( + fill_sequence_gaps_with_previous_version, +) from ayon_core.lib.transcoding import ( IMAGE_EXTENSIONS, get_ffprobe_streams, From 0dc8bbe0a651f5c9a783163b7b43e2239f4005b3 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Tue, 14 Oct 2025 14:13:50 +0200 Subject: [PATCH 518/595] Reorder imports Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/pipeline/publish/lib.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/pipeline/publish/lib.py b/client/ayon_core/pipeline/publish/lib.py index 657a57226d..96ab76f963 100644 --- a/client/ayon_core/pipeline/publish/lib.py +++ b/client/ayon_core/pipeline/publish/lib.py @@ -7,12 +7,13 @@ import copy import warnings import hashlib import xml.etree.ElementTree +import logging from typing import TYPE_CHECKING, Optional, Union, List, Any + import clique import speedcopy -import logging - import ayon_api +from ayon_api import get_last_version_by_product_name, get_representations import pyblish.util import pyblish.plugin import pyblish.api From 0d96e40d4075695c47905fbbf69268793388eaeb Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Tue, 14 Oct 2025 15:14:07 +0200 Subject: [PATCH 519/595] Ruff --- client/ayon_core/plugins/publish/extract_review.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/plugins/publish/extract_review.py b/client/ayon_core/plugins/publish/extract_review.py index fe0e7d4e3b..8a46b93060 100644 --- a/client/ayon_core/plugins/publish/extract_review.py +++ b/client/ayon_core/plugins/publish/extract_review.py @@ -507,10 +507,10 @@ class ExtractReview(pyblish.api.InstancePlugin): resolution_width=temp_data.resolution_width, resolution_height=temp_data.resolution_height, extension=temp_data.input_ext, - temp_data=temp_data + temp_data=temp_data, ) elif fill_missing_frames == "previous_version": - _, new_frame_files = fill_sequence_gaps_with_previous_version( + fill_output = fill_sequence_gaps_with_previous_version( collection=collection, staging_dir=new_repre["stagingDir"], instance=instance, @@ -518,6 +518,7 @@ class ExtractReview(pyblish.api.InstancePlugin): start_frame=temp_data.frame_start, end_frame=temp_data.frame_end, ) + _, new_frame_files = fill_output # fallback to original workflow if new_frame_files is None: self.log.warning( From bb1fed3dbc59eb5f226656c8b934323fa7373c3c Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Tue, 14 Oct 2025 15:16:49 +0200 Subject: [PATCH 520/595] Ruff --- client/ayon_core/pipeline/publish/lib.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/pipeline/publish/lib.py b/client/ayon_core/pipeline/publish/lib.py index 657a57226d..7152ec78fa 100644 --- a/client/ayon_core/pipeline/publish/lib.py +++ b/client/ayon_core/pipeline/publish/lib.py @@ -12,11 +12,15 @@ import clique import speedcopy import logging -import ayon_api import pyblish.util import pyblish.plugin import pyblish.api +from ayon_api import ( + get_server_api_connection, + get_representations, + get_last_version_by_product_name +) from ayon_core.lib import ( import_filepath, Logger, @@ -30,7 +34,6 @@ from .constants import ( DEFAULT_PUBLISH_TEMPLATE, DEFAULT_HERO_PUBLISH_TEMPLATE, ) -from ayon_api import get_last_version_by_product_name, get_representations if TYPE_CHECKING: from ayon_core.pipeline.traits import Representation @@ -1036,7 +1039,7 @@ def main_cli_publish( # NOTE: ayon-python-api does not have public api function to find # out if is used service user. So we need to have try > except # block. - con = ayon_api.get_server_api_connection() + con = get_server_api_connection() try: con.set_default_service_username(username) except ValueError: From 0aaac3e0d5769718960f362e1391fa7d7406e568 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Thu, 16 Oct 2025 10:38:12 +0200 Subject: [PATCH 521/595] Updates review extraction process. Refactors review extraction to remove Ftrack-specific elements. - Removes redundant data related to frame starts in Ftrack. - Simplifies review representation. - Streamlines the audio input processing. --- client/ayon_core/plugins/publish/extract_review.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/client/ayon_core/plugins/publish/extract_review.py b/client/ayon_core/plugins/publish/extract_review.py index 04e534054e..25c4c817ff 100644 --- a/client/ayon_core/plugins/publish/extract_review.py +++ b/client/ayon_core/plugins/publish/extract_review.py @@ -130,7 +130,7 @@ def frame_to_timecode(frame: int, fps: float) -> str: class ExtractReview(pyblish.api.InstancePlugin): - """Extracting Review mov file for Ftrack + """Extracting Reviewable medias Compulsory attribute of representation is tags list with "review", otherwise the representation is ignored. @@ -612,8 +612,6 @@ class ExtractReview(pyblish.api.InstancePlugin): "name": "{}_{}".format(output_name, output_ext), "outputName": output_name, "outputDef": output_def, - "frameStartFtrack": temp_data.output_frame_start, - "frameEndFtrack": temp_data.output_frame_end, "ffmpeg_cmd": subprcs_cmd }) @@ -1384,15 +1382,7 @@ class ExtractReview(pyblish.api.InstancePlugin): return audio_in_args, audio_filters, audio_out_args for audio in audio_inputs: - # NOTE modified, always was expected "frameStartFtrack" which is - # STRANGE?!!! There should be different key, right? - # TODO use different frame start! offset_seconds = 0 - frame_start_ftrack = instance.data.get("frameStartFtrack") - if frame_start_ftrack is not None: - offset_frames = frame_start_ftrack - audio["offset"] - offset_seconds = offset_frames / temp_data.fps - if offset_seconds > 0: audio_in_args.append( "-ss {}".format(offset_seconds) From 16d5fe45fc1ad21c6a9a548ffcdef528badd2fb7 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 16 Oct 2025 12:44:35 +0200 Subject: [PATCH 522/595] use settings summary to resolve which addon versions are used --- client/ayon_core/addon/base.py | 81 ++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 38 deletions(-) diff --git a/client/ayon_core/addon/base.py b/client/ayon_core/addon/base.py index 1d1562f543..9207bb74c0 100644 --- a/client/ayon_core/addon/base.py +++ b/client/ayon_core/addon/base.py @@ -2,7 +2,6 @@ """Base class for AYON addons.""" from __future__ import annotations -import copy import os import sys import time @@ -13,6 +12,7 @@ import collections import warnings from uuid import uuid4 from abc import ABC, abstractmethod +from urllib.parse import urlencode from types import ModuleType import typing from typing import Optional, Any, Union @@ -136,39 +136,47 @@ def load_addons(force: bool = False) -> None: time.sleep(0.1) -def _get_ayon_bundle_data() -> Optional[dict[str, Any]]: +def _get_ayon_bundle_data() -> tuple[ + dict[str, Any], Optional[dict[str, Any]] +]: studio_bundle_name = os.environ.get("AYON_STUDIO_BUNDLE_NAME") project_bundle_name = os.getenv("AYON_BUNDLE_NAME") bundles = ayon_api.get_bundles()["bundles"] - project_bundle = next( + studio_bundle = next( ( bundle for bundle in bundles - if bundle["name"] == project_bundle_name + if bundle["name"] == studio_bundle_name ), None ) - studio_bundle = None - if studio_bundle_name and project_bundle_name != studio_bundle_name: - studio_bundle = next( + + if studio_bundle is None: + raise RuntimeError(f"Failed to find bundle '{studio_bundle_name}'.") + + project_bundle = None + if project_bundle_name and project_bundle_name != studio_bundle_name: + project_bundle = next( ( bundle for bundle in bundles - if bundle["name"] == studio_bundle_name + if bundle["name"] == project_bundle_name ), None ) - if project_bundle and studio_bundle: - addons = copy.deepcopy(studio_bundle["addons"]) - addons.update(project_bundle["addons"]) - project_bundle["addons"] = addons - return project_bundle + if project_bundle is None: + raise RuntimeError( + f"Failed to find project bundle '{project_bundle_name}'." + ) + + return studio_bundle, project_bundle def _get_ayon_addons_information( - bundle_info: dict[str, Any] -) -> list[dict[str, Any]]: + studio_bundle: dict[str, Any], + project_bundle: Optional[dict[str, Any]], +) -> dict[str, str]: """Receive information about addons to use from server. Todos: @@ -181,22 +189,20 @@ def _get_ayon_addons_information( list[dict[str, Any]]: List of addon information to use. """ - output = [] - bundle_addons = bundle_info["addons"] - addons = ayon_api.get_addons_info()["addons"] - for addon in addons: - name = addon["name"] - versions = addon.get("versions") - addon_version = bundle_addons.get(name) - if addon_version is None or not versions: - continue - version = versions.get(addon_version) - if version: - version = copy.deepcopy(version) - version["name"] = name - version["version"] = addon_version - output.append(version) - return output + key_values = { + "summary": "true", + "bundle_name": studio_bundle["name"], + } + if project_bundle: + key_values["project_bundle_name"] = project_bundle["name"] + + query = urlencode(key_values) + + response = ayon_api.get(f"settings?{query}") + return { + addon["name"]: addon["version"] + for addon in response.data["addons"] + } def _load_ayon_addons(log: logging.Logger) -> list[ModuleType]: @@ -214,8 +220,8 @@ def _load_ayon_addons(log: logging.Logger) -> list[ModuleType]: """ all_addon_modules = [] - bundle_info = _get_ayon_bundle_data() - addons_info = _get_ayon_addons_information(bundle_info) + studio_bundle, project_bundle = _get_ayon_bundle_data() + addons_info = _get_ayon_addons_information(studio_bundle, project_bundle) if not addons_info: return all_addon_modules @@ -227,17 +233,16 @@ def _load_ayon_addons(log: logging.Logger) -> list[ModuleType]: dev_addons_info = {} if dev_mode_enabled: # Get dev addons info only when dev mode is enabled - dev_addons_info = bundle_info.get("addonDevelopment", dev_addons_info) + dev_addons_info = studio_bundle.get( + "addonDevelopment", dev_addons_info + ) addons_dir_exists = os.path.exists(addons_dir) if not addons_dir_exists: log.warning( f"Addons directory does not exists. Path \"{addons_dir}\"") - for addon_info in addons_info: - addon_name = addon_info["name"] - addon_version = addon_info["version"] - + for addon_name, addon_version in addons_info.items(): # core addon does not have any addon object if addon_name == "core": continue From e356630f4d94428828f14898a70ecc3c70619b8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Thu, 16 Oct 2025 17:19:41 +0200 Subject: [PATCH 523/595] =?UTF-8?q?=F0=9F=AA=B2=20get=20the=20correct=20te?= =?UTF-8?q?mplate=20for=20resources?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugins/publish/collect_resources_path.py | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/client/ayon_core/plugins/publish/collect_resources_path.py b/client/ayon_core/plugins/publish/collect_resources_path.py index 2e5b296228..e410303a2a 100644 --- a/client/ayon_core/plugins/publish/collect_resources_path.py +++ b/client/ayon_core/plugins/publish/collect_resources_path.py @@ -13,6 +13,9 @@ import copy import pyblish.api +from ayon_core.pipeline.publish import get_publish_template_name +from ayon_core.pipeline.context_tools import get_current_host_name + class CollectResourcesPath(pyblish.api.InstancePlugin): """Generate directory path where the files and resources will be stored. @@ -77,16 +80,24 @@ class CollectResourcesPath(pyblish.api.InstancePlugin): # This is for cases of Deprecated anatomy without `folder` # TODO remove when all clients have solved this issue - template_data.update({ - "frame": "FRAME_TEMP", - "representation": "TEMP" - }) + template_data.update({"frame": "FRAME_TEMP", "representation": "TEMP"}) - publish_templates = anatomy.get_template_item( - "publish", "default", "directory" + + template_name = get_publish_template_name( + project_name=template_data["project"]["name"], + host_name=get_current_host_name(), + product_type=template_data["product"]["type"], + task_name=template_data["product"]["name"], + task_type=template_data["product"]["type"], + project_settings=instance.context.data["project_settings"], + logger=self.log, ) + + publish_template = anatomy.get_template_item( + "publish", template_name, "directory") + publish_folder = os.path.normpath( - publish_templates.format_strict(template_data) + publish_template.format_strict(template_data) ) resources_folder = os.path.join(publish_folder, "resources") From 68e19f4184dd9835df1dda49417da2bd8118a64f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Thu, 16 Oct 2025 18:55:04 +0200 Subject: [PATCH 524/595] =?UTF-8?q?=F0=9F=90=95=20fix=20linting=20issues?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/ayon_core/plugins/publish/collect_resources_path.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/plugins/publish/collect_resources_path.py b/client/ayon_core/plugins/publish/collect_resources_path.py index e410303a2a..11e378ce52 100644 --- a/client/ayon_core/plugins/publish/collect_resources_path.py +++ b/client/ayon_core/plugins/publish/collect_resources_path.py @@ -82,7 +82,6 @@ class CollectResourcesPath(pyblish.api.InstancePlugin): # TODO remove when all clients have solved this issue template_data.update({"frame": "FRAME_TEMP", "representation": "TEMP"}) - template_name = get_publish_template_name( project_name=template_data["project"]["name"], host_name=get_current_host_name(), From d99075fed6e2186326aa8eb772b9480c8490a00f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Fri, 17 Oct 2025 11:39:42 +0200 Subject: [PATCH 525/595] =?UTF-8?q?=E2=99=BB=EF=B8=8Fuse=20collected=20dat?= =?UTF-8?q?a=20instead?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/ayon_core/plugins/publish/collect_resources_path.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/publish/collect_resources_path.py b/client/ayon_core/plugins/publish/collect_resources_path.py index 11e378ce52..2ef3ffe61d 100644 --- a/client/ayon_core/plugins/publish/collect_resources_path.py +++ b/client/ayon_core/plugins/publish/collect_resources_path.py @@ -84,7 +84,7 @@ class CollectResourcesPath(pyblish.api.InstancePlugin): template_name = get_publish_template_name( project_name=template_data["project"]["name"], - host_name=get_current_host_name(), + host_name=instance.context.data["hostName"], product_type=template_data["product"]["type"], task_name=template_data["product"]["name"], task_type=template_data["product"]["type"], From fd5a5a2142437d264d404456ff990951876ff69d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Fri, 17 Oct 2025 11:40:18 +0200 Subject: [PATCH 526/595] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20and=20remove=20unn?= =?UTF-8?q?ecessary=20import?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/ayon_core/plugins/publish/collect_resources_path.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/plugins/publish/collect_resources_path.py b/client/ayon_core/plugins/publish/collect_resources_path.py index 2ef3ffe61d..fc8d3d15cd 100644 --- a/client/ayon_core/plugins/publish/collect_resources_path.py +++ b/client/ayon_core/plugins/publish/collect_resources_path.py @@ -14,7 +14,6 @@ import copy import pyblish.api from ayon_core.pipeline.publish import get_publish_template_name -from ayon_core.pipeline.context_tools import get_current_host_name class CollectResourcesPath(pyblish.api.InstancePlugin): From fe7adf36e689b4fcc87544d91f3987f6ad63e929 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Fri, 17 Oct 2025 11:44:33 +0200 Subject: [PATCH 527/595] =?UTF-8?q?=F0=9F=AA=B2=20fix=20task=20and=20produ?= =?UTF-8?q?ct=20type?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugins/publish/collect_resources_path.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/plugins/publish/collect_resources_path.py b/client/ayon_core/plugins/publish/collect_resources_path.py index fc8d3d15cd..30fe5c0c80 100644 --- a/client/ayon_core/plugins/publish/collect_resources_path.py +++ b/client/ayon_core/plugins/publish/collect_resources_path.py @@ -81,12 +81,18 @@ class CollectResourcesPath(pyblish.api.InstancePlugin): # TODO remove when all clients have solved this issue template_data.update({"frame": "FRAME_TEMP", "representation": "TEMP"}) + task_name = task_type = None + task_entity = instance.data.get("taskEntity") + if task_entity: + task_name = task_entity.name + task_type = task_entity.type + template_name = get_publish_template_name( project_name=template_data["project"]["name"], host_name=instance.context.data["hostName"], - product_type=template_data["product"]["type"], - task_name=template_data["product"]["name"], - task_type=template_data["product"]["type"], + product_type=instance.data["productType"], + task_name=task_name, + task_type=task_type, project_settings=instance.context.data["project_settings"], logger=self.log, ) From c49d92c30668df40a620218fce2c8991973d1d51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Fri, 17 Oct 2025 11:46:48 +0200 Subject: [PATCH 528/595] =?UTF-8?q?=F0=9F=A6=97=20fix=20data=20access?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/ayon_core/plugins/publish/collect_resources_path.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/plugins/publish/collect_resources_path.py b/client/ayon_core/plugins/publish/collect_resources_path.py index 30fe5c0c80..927e358ea7 100644 --- a/client/ayon_core/plugins/publish/collect_resources_path.py +++ b/client/ayon_core/plugins/publish/collect_resources_path.py @@ -84,8 +84,8 @@ class CollectResourcesPath(pyblish.api.InstancePlugin): task_name = task_type = None task_entity = instance.data.get("taskEntity") if task_entity: - task_name = task_entity.name - task_type = task_entity.type + task_name = task_entity["name"] + task_type = task_entity["task_type"] template_name = get_publish_template_name( project_name=template_data["project"]["name"], From df8459bbabf81d26c6b15d47dce3a66eb22c7de5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= Date: Fri, 17 Oct 2025 11:47:57 +0200 Subject: [PATCH 529/595] =?UTF-8?q?=F0=9F=A6=97=20fix=20key=20name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/ayon_core/plugins/publish/collect_resources_path.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/publish/collect_resources_path.py b/client/ayon_core/plugins/publish/collect_resources_path.py index 927e358ea7..07cae07a3f 100644 --- a/client/ayon_core/plugins/publish/collect_resources_path.py +++ b/client/ayon_core/plugins/publish/collect_resources_path.py @@ -85,7 +85,7 @@ class CollectResourcesPath(pyblish.api.InstancePlugin): task_entity = instance.data.get("taskEntity") if task_entity: task_name = task_entity["name"] - task_type = task_entity["task_type"] + task_type = task_entity["taskType"] template_name = get_publish_template_name( project_name=template_data["project"]["name"], From 34594f7ee4deddcf7cb58efab05311b8c66d14b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Samohel?= <33513211+antirotor@users.noreply.github.com> Date: Fri, 17 Oct 2025 14:12:58 +0200 Subject: [PATCH 530/595] Apply suggestion from @iLLiCiTiT Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/plugins/publish/collect_resources_path.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/publish/collect_resources_path.py b/client/ayon_core/plugins/publish/collect_resources_path.py index 07cae07a3f..704c69a6ab 100644 --- a/client/ayon_core/plugins/publish/collect_resources_path.py +++ b/client/ayon_core/plugins/publish/collect_resources_path.py @@ -88,7 +88,7 @@ class CollectResourcesPath(pyblish.api.InstancePlugin): task_type = task_entity["taskType"] template_name = get_publish_template_name( - project_name=template_data["project"]["name"], + project_name=instance.context.data["projectName"], host_name=instance.context.data["hostName"], product_type=instance.data["productType"], task_name=task_name, From 4a1755c7c58f60706f048e628e6005017406aaef Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Fri, 17 Oct 2025 16:06:37 +0200 Subject: [PATCH 531/595] Fixes source metadata key in OTIO review extraction The change corrects the metadata key prefixes used when extracting source width and height information for OTIO reviewable representations. It removes the trailing period from the prefixes "ayon.source." and "openpype.source." to ensure accurate retrieval of resolution data. This resolves an issue where incorrect or missing resolution information could lead to squished reviewables. --- client/ayon_core/plugins/publish/extract_otio_review.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/publish/extract_otio_review.py b/client/ayon_core/plugins/publish/extract_otio_review.py index 90215bd2c9..f338fba746 100644 --- a/client/ayon_core/plugins/publish/extract_otio_review.py +++ b/client/ayon_core/plugins/publish/extract_otio_review.py @@ -130,7 +130,7 @@ class ExtractOTIOReview( # NOTE it looks like it is set only in hiero integration res_data = {"width": self.to_width, "height": self.to_height} for key in res_data: - for meta_prefix in ("ayon.source.", "openpype.source."): + for meta_prefix in ("ayon.source", "openpype.source"): meta_key = f"{meta_prefix}.{key}" value = media_metadata.get(meta_key) if value is not None: From 99a9541f27cf6c26117cae17b6129be20d5397c5 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 20 Oct 2025 14:55:03 +0200 Subject: [PATCH 532/595] Ruff --- client/ayon_core/plugins/publish/extract_review.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/publish/extract_review.py b/client/ayon_core/plugins/publish/extract_review.py index 8a46b93060..0111d02cb3 100644 --- a/client/ayon_core/plugins/publish/extract_review.py +++ b/client/ayon_core/plugins/publish/extract_review.py @@ -19,7 +19,9 @@ from ayon_core.lib import ( path_to_subprocess_arg, run_subprocess, ) -from ayon_core.pipeline.publish.lib import fill_sequence_gaps_with_previous_version +from ayon_core.pipeline.publish.lib import ( + fill_sequence_gaps_with_previous_version +) from ayon_core.lib.transcoding import ( IMAGE_EXTENSIONS, get_ffprobe_streams, From 0dd5620de61614e90efe0632bc54cc0e99089347 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 20 Oct 2025 16:27:23 +0200 Subject: [PATCH 533/595] better typehints --- client/ayon_core/lib/path_templates.py | 93 +++++++++++++------------- 1 file changed, 48 insertions(+), 45 deletions(-) diff --git a/client/ayon_core/lib/path_templates.py b/client/ayon_core/lib/path_templates.py index c6e9e14eac..ccbea01fa6 100644 --- a/client/ayon_core/lib/path_templates.py +++ b/client/ayon_core/lib/path_templates.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os import re import copy @@ -5,11 +7,7 @@ import numbers import warnings import platform from string import Formatter -import typing -from typing import List, Dict, Any, Set - -if typing.TYPE_CHECKING: - from typing import Union +from typing import Any, Union SUB_DICT_PATTERN = re.compile(r"([^\[\]]+)") OPTIONAL_PATTERN = re.compile(r"(<.*?[^{0]*>)[^0-9]*?") @@ -84,7 +82,7 @@ class StringTemplate: if substr: new_parts.append(substr) - self._parts: List["Union[str, OptionalPart, FormattingPart]"] = ( + self._parts: list[Union[str, OptionalPart, FormattingPart]] = ( self.find_optional_parts(new_parts) ) @@ -105,7 +103,7 @@ class StringTemplate: def template(self) -> str: return self._template - def format(self, data: Dict[str, Any]) -> "TemplateResult": + def format(self, data: dict[str, Any]) -> "TemplateResult": """ Figure out with whole formatting. Separate advanced keys (*Like '{project[name]}') from string which must @@ -145,29 +143,29 @@ class StringTemplate: invalid_types ) - def format_strict(self, data: Dict[str, Any]) -> "TemplateResult": + def format_strict(self, data: dict[str, Any]) -> "TemplateResult": result = self.format(data) result.validate() return result @classmethod def format_template( - cls, template: str, data: Dict[str, Any] + cls, template: str, data: dict[str, Any] ) -> "TemplateResult": objected_template = cls(template) return objected_template.format(data) @classmethod def format_strict_template( - cls, template: str, data: Dict[str, Any] + cls, template: str, data: dict[str, Any] ) -> "TemplateResult": objected_template = cls(template) return objected_template.format_strict(data) @staticmethod def find_optional_parts( - parts: List["Union[str, FormattingPart]"] - ) -> List["Union[str, OptionalPart, FormattingPart]"]: + parts: list[Union[str, FormattingPart]] + ) -> list[Union[str, OptionalPart, FormattingPart]]: new_parts = [] tmp_parts = {} counted_symb = -1 @@ -192,7 +190,7 @@ class StringTemplate: len(parts) == 1 and isinstance(parts[0], str) ): - value = "<{}>".format(parts[0]) + value = f"<{parts[0]}>" else: value = OptionalPart(parts) @@ -223,7 +221,7 @@ class TemplateResult(str): only used keys. solved (bool): For check if all required keys were filled. template (str): Original template. - missing_keys (Iterable[str]): Missing keys that were not in the data. + missing_keys (list[str]): Missing keys that were not in the data. Include missing optional keys. invalid_types (dict): When key was found in data, but value had not allowed DataType. Allowed data types are `numbers`, @@ -232,11 +230,11 @@ class TemplateResult(str): of number. """ - used_values: Dict[str, Any] = None + used_values: dict[str, Any] = None solved: bool = None template: str = None - missing_keys: List[str] = None - invalid_types: Dict[str, Any] = None + missing_keys: list[str] = None + invalid_types: dict[str, Any] = None def __new__( cls, filled_template, template, solved, @@ -296,21 +294,21 @@ class TemplatePartResult: """Result to store result of template parts.""" def __init__(self, optional: bool = False): # Missing keys or invalid value types of required keys - self._missing_keys: Set[str] = set() - self._invalid_types: Dict[str, Any] = {} + self._missing_keys: set[str] = set() + self._invalid_types: dict[str, Any] = {} # Missing keys or invalid value types of optional keys - self._missing_optional_keys: Set[str] = set() - self._invalid_optional_types: Dict[str, Any] = {} + self._missing_optional_keys: set[str] = set() + self._invalid_optional_types: dict[str, Any] = {} # Used values stored by key with origin type # - key without any padding or key modifiers # - value from filling data # Example: {"version": 1} - self._used_values: Dict[str, Any] = {} + self._used_values: dict[str, Any] = {} # Used values stored by key with all modifirs # - value is already formatted string # Example: {"version:0>3": "001"} - self._really_used_values: Dict[str, Any] = {} + self._really_used_values: dict[str, Any] = {} # Concatenated string output after formatting self._output: str = "" # Is this result from optional part @@ -336,8 +334,9 @@ class TemplatePartResult: self._really_used_values.update(other.really_used_values) else: - raise TypeError("Cannot add data from \"{}\" to \"{}\"".format( - str(type(other)), self.__class__.__name__) + raise TypeError( + f"Cannot add data from \"{type(other)}\"" + f" to \"{self.__class__.__name__}\"" ) @property @@ -362,40 +361,41 @@ class TemplatePartResult: return self._output @property - def missing_keys(self) -> Set[str]: + def missing_keys(self) -> set[str]: return self._missing_keys @property - def missing_optional_keys(self) -> Set[str]: + def missing_optional_keys(self) -> set[str]: return self._missing_optional_keys @property - def invalid_types(self) -> Dict[str, Any]: + def invalid_types(self) -> dict[str, Any]: return self._invalid_types @property - def invalid_optional_types(self) -> Dict[str, Any]: + def invalid_optional_types(self) -> dict[str, Any]: return self._invalid_optional_types @property - def really_used_values(self) -> Dict[str, Any]: + def really_used_values(self) -> dict[str, Any]: return self._really_used_values @property - def realy_used_values(self) -> Dict[str, Any]: + def realy_used_values(self) -> dict[str, Any]: warnings.warn( "Property 'realy_used_values' is deprecated." " Use 'really_used_values' instead.", - DeprecationWarning + DeprecationWarning, + stacklevel=2, ) return self._really_used_values @property - def used_values(self) -> Dict[str, Any]: + def used_values(self) -> dict[str, Any]: return self._used_values @staticmethod - def split_keys_to_subdicts(values: Dict[str, Any]) -> Dict[str, Any]: + def split_keys_to_subdicts(values: dict[str, Any]) -> dict[str, Any]: output = {} formatter = Formatter() for key, value in values.items(): @@ -410,7 +410,7 @@ class TemplatePartResult: data[last_key] = value return output - def get_clean_used_values(self) -> Dict[str, Any]: + def get_clean_used_values(self) -> dict[str, Any]: new_used_values = {} for key, value in self.used_values.items(): if isinstance(value, FormatObject): @@ -426,7 +426,8 @@ class TemplatePartResult: warnings.warn( "Method 'add_realy_used_value' is deprecated." " Use 'add_really_used_value' instead.", - DeprecationWarning + DeprecationWarning, + stacklevel=2, ) self.add_really_used_value(key, value) @@ -479,7 +480,7 @@ class FormattingPart: self, field_name: str, format_spec: str, - conversion: "Union[str, None]", + conversion: Union[str, None], ): format_spec_v = "" if format_spec: @@ -546,7 +547,7 @@ class FormattingPart: return not queue @staticmethod - def keys_to_template_base(keys: List[str]): + def keys_to_template_base(keys: list[str]): if not keys: return None # Create copy of keys @@ -556,7 +557,7 @@ class FormattingPart: return f"{template_base}{joined_keys}" def format( - self, data: Dict[str, Any], result: TemplatePartResult + self, data: dict[str, Any], result: TemplatePartResult ) -> TemplatePartResult: """Format the formattings string. @@ -687,23 +688,25 @@ class OptionalPart: def __init__( self, - parts: List["Union[str, OptionalPart, FormattingPart]"] + parts: list[Union[str, OptionalPart, FormattingPart]] ): - self._parts: List["Union[str, OptionalPart, FormattingPart]"] = parts + self._parts: list[Union[str, OptionalPart, FormattingPart]] = parts @property - def parts(self) -> List["Union[str, OptionalPart, FormattingPart]"]: + def parts(self) -> list[Union[str, OptionalPart, FormattingPart]]: return self._parts def __str__(self) -> str: - return "<{}>".format("".join([str(p) for p in self._parts])) + joined_parts = "".join([str(p) for p in self._parts]) + return f"<{joined_parts}>" def __repr__(self) -> str: - return "".format("".join([str(p) for p in self._parts])) + joined_parts = "".join([str(p) for p in self._parts]) + return f"" def format( self, - data: Dict[str, Any], + data: dict[str, Any], result: TemplatePartResult, ) -> TemplatePartResult: new_result = TemplatePartResult(True) From 4fca5bcde5f086cc37ea3a961cd0b872276fb438 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 20 Oct 2025 17:04:56 +0200 Subject: [PATCH 534/595] Implemented helper dict to handle str -> dict conversion --- client/ayon_core/lib/path_templates.py | 68 +++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/lib/path_templates.py b/client/ayon_core/lib/path_templates.py index ccbea01fa6..131a2efaa4 100644 --- a/client/ayon_core/lib/path_templates.py +++ b/client/ayon_core/lib/path_templates.py @@ -7,7 +7,7 @@ import numbers import warnings import platform from string import Formatter -from typing import Any, Union +from typing import Any, Union, Iterable SUB_DICT_PATTERN = re.compile(r"([^\[\]]+)") OPTIONAL_PATTERN = re.compile(r"(<.*?[^{0]*>)[^0-9]*?") @@ -42,6 +42,66 @@ class TemplateUnsolved(Exception): ) +class DefaultValueDict(dict): + """Dictionary that supports the default key to use for str conversion. + + Is helpful for changes of a key in a template from string to dictionary + for example '{folder}' -> '{folder[name]}'. + >>> data = DefaultValueDict( + >>> "name", + >>> {"folder": {"name": "FolderName"}} + >>> ) + >>> print("{folder[name]}".format_map(data)) + FolderName + >>> print("{folder}".format_map(data)) + FolderName + + Args: + default_key (Union[str, Iterable[str]]): Default key to use for str + conversion. Can also expect multiple keys for more nested + dictionary. + + """ + def __init__( + self, default_keys: Union[str, Iterable[str]], *args, **kwargs + ) -> None: + if isinstance(default_keys, str): + default_keys = [default_keys] + else: + default_keys = list(default_keys) + if not default_keys: + raise ValueError( + "Default key must be set. Got empty default keys." + ) + + self._default_keys = default_keys + super().__init__(*args, **kwargs) + + def __str__(self) -> str: + return str(self.get_default_value()) + + def __copy__(self) -> "DefaultValueDict": + return DefaultValueDict( + self.get_default_keys(), dict(self.items()) + ) + + def __deepcopy__(self) -> "DefaultValueDict": + data_copy = { + key: copy.deepcopy(value) + for key, value in self.items() + } + return DefaultValueDict(self.get_default_keys(), data_copy) + + def get_default_keys(self) -> list[str]: + return list(self._default_keys) + + def get_default_value(self) -> Any: + value = self + for key in self._default_keys: + value = value[key] + return value + + class StringTemplate: """String that can be formatted.""" def __init__(self, template: str): @@ -636,6 +696,12 @@ class FormattingPart: result.add_output(self.template) return result + if isinstance(value, DefaultValueDict): + try: + value = value.get_default_value() + except KeyError: + pass + if not self.validate_value_type(value): result.add_invalid_type(key, value) result.add_output(self.template) From f35521a943b14ae0d38e2b2bb005b7ace2fc25cd Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 20 Oct 2025 18:00:00 +0200 Subject: [PATCH 535/595] rename 'DefaultValueDict' to 'DefaultKeysDict' --- client/ayon_core/lib/__init__.py | 2 ++ client/ayon_core/lib/path_templates.py | 14 +++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/client/ayon_core/lib/__init__.py b/client/ayon_core/lib/__init__.py index 5ccc8d03e5..2a25e949a5 100644 --- a/client/ayon_core/lib/__init__.py +++ b/client/ayon_core/lib/__init__.py @@ -73,6 +73,7 @@ from .log import ( ) from .path_templates import ( + DefaultKeysDict, TemplateUnsolved, StringTemplate, FormatObject, @@ -228,6 +229,7 @@ __all__ = [ "get_version_from_path", "get_last_version_from_path", + "DefaultKeysDict", "TemplateUnsolved", "StringTemplate", "FormatObject", diff --git a/client/ayon_core/lib/path_templates.py b/client/ayon_core/lib/path_templates.py index 131a2efaa4..c01de6f1a6 100644 --- a/client/ayon_core/lib/path_templates.py +++ b/client/ayon_core/lib/path_templates.py @@ -42,12 +42,12 @@ class TemplateUnsolved(Exception): ) -class DefaultValueDict(dict): +class DefaultKeysDict(dict): """Dictionary that supports the default key to use for str conversion. Is helpful for changes of a key in a template from string to dictionary for example '{folder}' -> '{folder[name]}'. - >>> data = DefaultValueDict( + >>> data = DefaultKeysDict( >>> "name", >>> {"folder": {"name": "FolderName"}} >>> ) @@ -80,17 +80,17 @@ class DefaultValueDict(dict): def __str__(self) -> str: return str(self.get_default_value()) - def __copy__(self) -> "DefaultValueDict": - return DefaultValueDict( + def __copy__(self) -> "DefaultKeysDict": + return DefaultKeysDict( self.get_default_keys(), dict(self.items()) ) - def __deepcopy__(self) -> "DefaultValueDict": + def __deepcopy__(self) -> "DefaultKeysDict": data_copy = { key: copy.deepcopy(value) for key, value in self.items() } - return DefaultValueDict(self.get_default_keys(), data_copy) + return DefaultKeysDict(self.get_default_keys(), data_copy) def get_default_keys(self) -> list[str]: return list(self._default_keys) @@ -696,7 +696,7 @@ class FormattingPart: result.add_output(self.template) return result - if isinstance(value, DefaultValueDict): + if isinstance(value, DefaultKeysDict): try: value = value.get_default_value() except KeyError: From a798d9b92ba957959b483c3ed28c116e9d2df22c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 20 Oct 2025 18:01:40 +0200 Subject: [PATCH 536/595] added helper function to get ayon user data --- client/ayon_core/lib/__init__.py | 2 + client/ayon_core/lib/local_settings.py | 73 ++++++++++++++++++++------ 2 files changed, 58 insertions(+), 17 deletions(-) diff --git a/client/ayon_core/lib/__init__.py b/client/ayon_core/lib/__init__.py index 2a25e949a5..d5629cbf3d 100644 --- a/client/ayon_core/lib/__init__.py +++ b/client/ayon_core/lib/__init__.py @@ -11,6 +11,7 @@ from .local_settings import ( get_launcher_storage_dir, get_addons_resources_dir, get_local_site_id, + get_ayon_user_entity, get_ayon_username, ) from .ayon_connection import initialize_ayon_connection @@ -149,6 +150,7 @@ __all__ = [ "get_launcher_storage_dir", "get_addons_resources_dir", "get_local_site_id", + "get_ayon_user_entity", "get_ayon_username", "initialize_ayon_connection", diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 1edfc3c1b6..4402e3c8a1 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -5,6 +5,7 @@ import json import platform import configparser import warnings +import copy from datetime import datetime from abc import ABC, abstractmethod from functools import lru_cache @@ -13,6 +14,8 @@ from typing import Optional, Any import platformdirs import ayon_api +from .cache import NestedCacheItem, CacheItem + _PLACEHOLDER = object() @@ -23,6 +26,7 @@ class RegistryItemNotFound(ValueError): class _Cache: username = None + user_entities_by_name = NestedCacheItem() def _get_ayon_appdirs(*args: str) -> str: @@ -569,6 +573,56 @@ def get_local_site_id(): return site_id +def _get_ayon_service_username() -> Optional[str]: + # TODO @iLLiCiTiT - do not use private attribute of 'ServerAPI', rather + # use public method to get username from connection stack. + con = ayon_api.get_server_api_connection() + user_stack = getattr(con, "_as_user_stack", None) + if user_stack is None: + return None + return user_stack.username + + +def get_ayon_user_entity(username: Optional[str] = None) -> dict[str, Any]: + """AYON user entity used for templates and publishing.""" + service_username = _get_ayon_service_username() + # Handle service user handling first + if service_username: + if username is None: + username = service_username + cache: CacheItem = _Cache.user_entities_by_name[username] + if not cache.is_valid: + if username == service_username: + user = ayon_api.get_user() + else: + user = ayon_api.get_user(username) + cache.update_data(user) + return copy.deepcopy(cache.get_data()) + + # Cache current user + current_user = None + if _Cache.username is None: + current_user = ayon_api.get_user() + _Cache.username = current_user["name"] + + if username is None: + username = _Cache.username + + cache: CacheItem = _Cache.user_entities_by_name[username] + if not cache.is_valid: + user = None + if username == _Cache.username: + if current_user is None: + current_user = ayon_api.get_user() + user = current_user + + if user is None: + user = ayon_api.get_user(username) + cache.update_data(user) + + return copy.deepcopy(cache.get_data()) + + def get_ayon_username(): """AYON username used for templates and publishing. @@ -578,20 +632,5 @@ def get_ayon_username(): str: Username. """ - # Look for username in the connection stack - # - this is used when service is working as other user - # (e.g. in background sync) - # TODO @iLLiCiTiT - do not use private attribute of 'ServerAPI', rather - # use public method to get username from connection stack. - con = ayon_api.get_server_api_connection() - user_stack = getattr(con, "_as_user_stack", None) - if user_stack is not None: - username = user_stack.username - if username is not None: - return username - - # Cache the username to avoid multiple API calls - # - it is not expected that user would change - if _Cache.username is None: - _Cache.username = ayon_api.get_user()["name"] - return _Cache.username + user = get_ayon_user_entity() + return user["name"] From d7f913d00478bc5b29f0e54c32ac0a548e9aa870 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 20 Oct 2025 18:03:46 +0200 Subject: [PATCH 537/595] fill user data as dictionary --- client/ayon_core/pipeline/template_data.py | 41 +++++++++++++++++----- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/client/ayon_core/pipeline/template_data.py b/client/ayon_core/pipeline/template_data.py index 0a95a98be8..2f9a7e3421 100644 --- a/client/ayon_core/pipeline/template_data.py +++ b/client/ayon_core/pipeline/template_data.py @@ -1,27 +1,50 @@ +from __future__ import annotations + +from typing import Optional, Any + import ayon_api from ayon_core.settings import get_studio_settings -from ayon_core.lib.local_settings import get_ayon_username +from ayon_core.lib import DefaultKeysDict +from ayon_core.lib.local_settings import get_ayon_user_entity -def get_general_template_data(settings=None, username=None): +def get_general_template_data( + settings: Optional[dict[str, Any]] = None, + username: Optional[str] = None, + user_entity: Optional[dict[str, Any]] = None, +): """General template data based on system settings or machine. Output contains formatting keys: - - 'studio[name]' - Studio name filled from system settings - - 'studio[code]' - Studio code filled from system settings - - 'user' - User's name using 'get_ayon_username' + - 'studio[name]' - Studio name filled from system settings + - 'studio[code]' - Studio code filled from system settings + - 'user[name]' - User's name + - 'user[attrib][...]' - User's attributes + - 'user[data][...]' - User's data Args: settings (Dict[str, Any]): Studio or project settings. username (Optional[str]): AYON Username. - """ + user_entity (Optional[dict[str, Any]]): User entity. + """ if not settings: settings = get_studio_settings() - if username is None: - username = get_ayon_username() + if user_entity is None: + user_entity = get_ayon_user_entity(username) + + # Use dictionary with default value for backwards compatibility + # - we did support '{user}' now it should be '{user[name]}' + user_data = DefaultKeysDict( + "name", + { + "name": user_entity["name"], + "attrib": user_entity["attrib"], + "data": user_entity["data"], + } + ) core_settings = settings["core"] return { @@ -29,7 +52,7 @@ def get_general_template_data(settings=None, username=None): "name": core_settings["studio_name"], "code": core_settings["studio_code"] }, - "user": username + "user": user_data, } From 1487c30f06655e43757650160a151c2b38951002 Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Mon, 20 Oct 2025 20:27:40 +0300 Subject: [PATCH 538/595] Revert changes in `pyproject.toml` from #1215 --- pyproject.toml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 44c6a9d73c..be3e82cc67 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,17 +27,6 @@ codespell = "^2.2.6" semver = "^3.0.2" mypy = "^1.14.0" mock = "^5.0.0" -tomlkit = "^0.13.2" -requests = "^2.32.3" -mkdocs-material = "^9.6.7" -mkdocs-autoapi = "^0.4.0" -mkdocstrings-python = "^1.16.2" -mkdocs-minify-plugin = "^0.8.0" -markdown-checklist = "^0.4.4" -mdx-gh-links = "^0.4" -pymdown-extensions = "^10.14.3" -mike = "^2.1.3" -mkdocstrings-shell = "^1.0.2" nxtools = "^1.6" [tool.poetry.group.test.dependencies] From 5b8d92fb9c6528d0fdb8f81ae81045f9c38979e9 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Tue, 21 Oct 2025 08:31:10 +0000 Subject: [PATCH 539/595] [Automated] Add generated package files from main --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index bbced6b641..bbe6ee01a8 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.6.4+dev" +__version__ = "1.6.5" diff --git a/package.py b/package.py index 114f7d12ef..4a2cd6d568 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.6.4+dev" +version = "1.6.5" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index be3e82cc67..d603c9dc04 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.6.4+dev" +version = "1.6.5" description = "" authors = ["Ynput Team "] readme = "README.md" From fc5199c70f8712697874a2c52af89461c8eb5024 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Tue, 21 Oct 2025 08:31:51 +0000 Subject: [PATCH 540/595] [Automated] Update version in package.py for develop --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index bbe6ee01a8..d3b3454fd1 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.6.5" +__version__ = "1.6.5+dev" diff --git a/package.py b/package.py index 4a2cd6d568..2889039502 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.6.5" +version = "1.6.5+dev" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index d603c9dc04..f43846ec2b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.6.5" +version = "1.6.5+dev" description = "" authors = ["Ynput Team "] readme = "README.md" From afee12cd7ad8b6623e338ee6f9fd579a77aaffea Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 21 Oct 2025 08:33:00 +0000 Subject: [PATCH 541/595] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 27ed2217dd..646a2dd1ee 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to AYON Tray options: + - 1.6.5 - 1.6.4 - 1.6.3 - 1.6.2 From 0d49f5a8dfda7b2b3b5189befbdf4ac34388c5e4 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Tue, 21 Oct 2025 11:14:10 +0200 Subject: [PATCH 542/595] Fixes: Corrects file sequence frame offset Corrects the calculation of the frame offset for file sequences in editorial workflows. - Ensures accurate frame mapping. - Resolves issues with incorrect frame ranges. --- client/ayon_core/pipeline/editorial.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/pipeline/editorial.py b/client/ayon_core/pipeline/editorial.py index b553fae3fb..716035aa1c 100644 --- a/client/ayon_core/pipeline/editorial.py +++ b/client/ayon_core/pipeline/editorial.py @@ -202,7 +202,8 @@ def is_clip_from_media_sequence(otio_clip): def remap_range_on_file_sequence(otio_clip, otio_range): - """ + """ Remap the provided range on a file sequence clip. + Args: otio_clip (otio.schema.Clip): The OTIO clip to check. otio_range (otio.schema.TimeRange): The trim range to apply. @@ -256,10 +257,14 @@ def remap_range_on_file_sequence(otio_clip, otio_range): ) src_offset_in = otio_range.start_time - media_in - frame_in = otio.opentime.RationalTime.from_frames( - media_ref.start_frame + src_offset_in.to_frames(), + # make sure that only if any offset is present + if media_ref.start_frame == src_offset_in.to_frames(): + frame_in = src_offset_in.to_frames() + else: + frame_in = otio.opentime.RationalTime.from_frames( + media_ref.start_frame + src_offset_in.to_frames(), rate=available_range_rate, - ).to_frames() + ).to_frames() # e.g.: # duration = 10 frames at 24fps From 9494472a7dbc1726b3fbe1face11feff2c8b4c9e Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Tue, 21 Oct 2025 14:18:31 +0200 Subject: [PATCH 543/595] Fixes: Corrects reviewable output resolution. Updates the expected resolution in the ffmpeg commands used in reviewable extraction tests to match the intended output. This resolves a squashed reviewables issue where the output resolution was incorrect. --- .../editorial/test_extract_otio_review.py | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/tests/client/ayon_core/pipeline/editorial/test_extract_otio_review.py b/tests/client/ayon_core/pipeline/editorial/test_extract_otio_review.py index 6a74df7f43..ed441edc63 100644 --- a/tests/client/ayon_core/pipeline/editorial/test_extract_otio_review.py +++ b/tests/client/ayon_core/pipeline/editorial/test_extract_otio_review.py @@ -246,75 +246,75 @@ def test_multiple_review_clips_no_gap(): expected = [ # 10 head black frames generated from gap (991-1000) '/path/to/ffmpeg -t 0.4 -r 25.0 -f lavfi' - ' -i color=c=black:s=1280x720 -tune ' + ' -i color=c=black:s=1920x1080 -tune ' 'stillimage -start_number 991 -pix_fmt rgba C:/result/output.%04d.png', # Alternance 25fps tiff sequence and 24fps exr sequence # for 100 frames each '/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i ' f'C:\\no_tc{os.sep}output.%04d.tif ' - '-vf scale=1280:720:flags=lanczos -compression_level 5 ' + '-vf scale=1920:1080:flags=lanczos -compression_level 5 ' '-start_number 1001 -pix_fmt rgba C:/result/output.%04d.png', '/path/to/ffmpeg -start_number 1000 -framerate 24.0 -i ' f'C:\\with_tc{os.sep}output.%04d.exr ' - '-vf scale=1280:720:flags=lanczos -compression_level 5 ' + '-vf scale=1920:1080:flags=lanczos -compression_level 5 ' '-start_number 1102 -pix_fmt rgba C:/result/output.%04d.png', '/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i ' f'C:\\no_tc{os.sep}output.%04d.tif ' - '-vf scale=1280:720:flags=lanczos -compression_level 5 ' + '-vf scale=1920:1080:flags=lanczos -compression_level 5 ' '-start_number 1198 -pix_fmt rgba C:/result/output.%04d.png', '/path/to/ffmpeg -start_number 1000 -framerate 24.0 -i ' f'C:\\with_tc{os.sep}output.%04d.exr ' - '-vf scale=1280:720:flags=lanczos -compression_level 5 ' + '-vf scale=1920:1080:flags=lanczos -compression_level 5 ' '-start_number 1299 -pix_fmt rgba C:/result/output.%04d.png', # Repeated 25fps tiff sequence multiple times till the end '/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i ' f'C:\\no_tc{os.sep}output.%04d.tif ' - '-vf scale=1280:720:flags=lanczos -compression_level 5 ' + '-vf scale=1920:1080:flags=lanczos -compression_level 5 ' '-start_number 1395 -pix_fmt rgba C:/result/output.%04d.png', '/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i ' f'C:\\no_tc{os.sep}output.%04d.tif ' - '-vf scale=1280:720:flags=lanczos -compression_level 5 ' + '-vf scale=1920:1080:flags=lanczos -compression_level 5 ' '-start_number 1496 -pix_fmt rgba C:/result/output.%04d.png', '/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i ' f'C:\\no_tc{os.sep}output.%04d.tif ' - '-vf scale=1280:720:flags=lanczos -compression_level 5 ' + '-vf scale=1920:1080:flags=lanczos -compression_level 5 ' '-start_number 1597 -pix_fmt rgba C:/result/output.%04d.png', '/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i ' f'C:\\no_tc{os.sep}output.%04d.tif ' - '-vf scale=1280:720:flags=lanczos -compression_level 5 ' + '-vf scale=1920:1080:flags=lanczos -compression_level 5 ' '-start_number 1698 -pix_fmt rgba C:/result/output.%04d.png', '/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i ' f'C:\\no_tc{os.sep}output.%04d.tif ' - '-vf scale=1280:720:flags=lanczos -compression_level 5 ' + '-vf scale=1920:1080:flags=lanczos -compression_level 5 ' '-start_number 1799 -pix_fmt rgba C:/result/output.%04d.png', '/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i ' f'C:\\no_tc{os.sep}output.%04d.tif ' - '-vf scale=1280:720:flags=lanczos -compression_level 5 ' + '-vf scale=1920:1080:flags=lanczos -compression_level 5 ' '-start_number 1900 -pix_fmt rgba C:/result/output.%04d.png', '/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i ' f'C:\\no_tc{os.sep}output.%04d.tif ' - '-vf scale=1280:720:flags=lanczos -compression_level 5 ' + '-vf scale=1920:1080:flags=lanczos -compression_level 5 ' '-start_number 2001 -pix_fmt rgba C:/result/output.%04d.png', '/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i ' f'C:\\no_tc{os.sep}output.%04d.tif ' - '-vf scale=1280:720:flags=lanczos -compression_level 5 ' + '-vf scale=1920:1080:flags=lanczos -compression_level 5 ' '-start_number 2102 -pix_fmt rgba C:/result/output.%04d.png', '/path/to/ffmpeg -start_number 1000 -framerate 25.0 -i ' f'C:\\no_tc{os.sep}output.%04d.tif ' - '-vf scale=1280:720:flags=lanczos -compression_level 5 ' + '-vf scale=1920:1080:flags=lanczos -compression_level 5 ' '-start_number 2203 -pix_fmt rgba C:/result/output.%04d.png' ] @@ -348,12 +348,12 @@ def test_multiple_review_clips_with_gap(): '/path/to/ffmpeg -start_number 1000 -framerate 24.0 -i ' f'C:\\with_tc{os.sep}output.%04d.exr ' - '-vf scale=1280:720:flags=lanczos -compression_level 5 ' + '-vf scale=1920:1080:flags=lanczos -compression_level 5 ' '-start_number 1003 -pix_fmt rgba C:/result/output.%04d.png', '/path/to/ffmpeg -start_number 1000 -framerate 24.0 -i ' f'C:\\with_tc{os.sep}output.%04d.exr ' - '-vf scale=1280:720:flags=lanczos -compression_level 5 ' + '-vf scale=1920:1080:flags=lanczos -compression_level 5 ' '-start_number 1091 -pix_fmt rgba C:/result/output.%04d.png' ] From 363e338a613331750036d8691ac3c3252f3fa3ba Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Tue, 21 Oct 2025 15:01:47 +0200 Subject: [PATCH 544/595] pass studio bundle name to farm --- client/ayon_core/plugins/publish/collect_farm_env_variables.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/plugins/publish/collect_farm_env_variables.py b/client/ayon_core/plugins/publish/collect_farm_env_variables.py index 39c421381d..d35f02b9df 100644 --- a/client/ayon_core/plugins/publish/collect_farm_env_variables.py +++ b/client/ayon_core/plugins/publish/collect_farm_env_variables.py @@ -32,6 +32,7 @@ class CollectCoreJobEnvVars(pyblish.api.ContextPlugin): for key in [ "AYON_BUNDLE_NAME", + "AYON_STUDIO_BUNDLE_NAME", "AYON_USE_STAGING", "AYON_IN_TESTS", # NOTE Not sure why workdir is needed? From 54aedc84263fb2adc838cbaf40e59bce6aa84a24 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 22 Oct 2025 14:31:34 +0200 Subject: [PATCH 545/595] use user entity when getting template data during publishing --- .../plugins/publish/collect_anatomy_context_data.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/plugins/publish/collect_anatomy_context_data.py b/client/ayon_core/plugins/publish/collect_anatomy_context_data.py index cccf392e40..5d2ecec433 100644 --- a/client/ayon_core/plugins/publish/collect_anatomy_context_data.py +++ b/client/ayon_core/plugins/publish/collect_anatomy_context_data.py @@ -16,6 +16,7 @@ Provides: import json import pyblish.api +from ayon_core.lib import get_ayon_user_entity from ayon_core.pipeline.template_data import get_template_data @@ -55,17 +56,18 @@ class CollectAnatomyContextData(pyblish.api.ContextPlugin): if folder_entity: task_entity = context.data["taskEntity"] + username = context.data["user"] + user_entity = get_ayon_user_entity(username) anatomy_data = get_template_data( project_entity, folder_entity, task_entity, - host_name, - project_settings + host_name=host_name, + settings=project_settings, + user_entity=user_entity, ) anatomy_data.update(context.data.get("datetimeData") or {}) - username = context.data["user"] - anatomy_data["user"] = username # Backwards compatibility for 'username' key anatomy_data["username"] = username From 2e2d67c2438b53f12354f32b46c2cfb57ecf5ab8 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 22 Oct 2025 14:31:57 +0200 Subject: [PATCH 546/595] allow to pass user entity to get_template_data --- client/ayon_core/pipeline/template_data.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/pipeline/template_data.py b/client/ayon_core/pipeline/template_data.py index 2f9a7e3421..dc7e95c788 100644 --- a/client/ayon_core/pipeline/template_data.py +++ b/client/ayon_core/pipeline/template_data.py @@ -173,7 +173,8 @@ def get_template_data( task_entity=None, host_name=None, settings=None, - username=None + username=None, + user_entity=None, ): """Prepare data for templates filling from entered documents and info. @@ -196,13 +197,18 @@ def get_template_data( host_name (Optional[str]): Used to fill '{app}' key. settings (Union[Dict, None]): Prepared studio or project settings. They're queried if not passed (may be slower). - username (Optional[str]): AYON Username. + username (Optional[str]): DEPRECATED AYON Username. + user_entity (Optional[dict[str, Any]): AYON user entity. Returns: Dict[str, Any]: Data prepared for filling workdir template. """ - template_data = get_general_template_data(settings, username=username) + template_data = get_general_template_data( + settings, + username=username, + user_entity=user_entity, + ) template_data.update(get_project_template_data(project_entity)) if folder_entity: template_data.update(get_folder_template_data( From d700f9f09b307243ef7c30ad5096e3beb8b97d9b Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 22 Oct 2025 14:32:12 +0200 Subject: [PATCH 547/595] custom handling of 'user' data used for template --- client/ayon_core/plugins/publish/integrate.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/publish/integrate.py b/client/ayon_core/plugins/publish/integrate.py index f1e066018c..d18e546392 100644 --- a/client/ayon_core/plugins/publish/integrate.py +++ b/client/ayon_core/plugins/publish/integrate.py @@ -121,7 +121,6 @@ class IntegrateAsset(pyblish.api.InstancePlugin): "version", "representation", "username", - "user", "output", # OpenPype keys - should be removed "asset", # folder[name] @@ -796,6 +795,14 @@ class IntegrateAsset(pyblish.api.InstancePlugin): if value is not None: repre_context[key] = value + # Keep only username + # NOTE This is to avoid storing all user attributes and data + # to representation + if "user" not in repre_context: + repre_context["user"] = { + "name": template_data["user"]["name"] + } + # Use previous representation's id if there is a name match existing = existing_repres_by_name.get(repre["name"].lower()) repre_id = None From b094cbd0cb17ba0216867503c9d87eef81e112f3 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 22 Oct 2025 14:33:48 +0200 Subject: [PATCH 548/595] use same logic in integrate hero as in integrate --- .../ayon_core/plugins/publish/integrate_hero_version.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/plugins/publish/integrate_hero_version.py b/client/ayon_core/plugins/publish/integrate_hero_version.py index 90e6f15568..a591cfe880 100644 --- a/client/ayon_core/plugins/publish/integrate_hero_version.py +++ b/client/ayon_core/plugins/publish/integrate_hero_version.py @@ -89,7 +89,6 @@ class IntegrateHeroVersion( "family", "representation", "username", - "user", "output" ] # QUESTION/TODO this process should happen on server if crashed due to @@ -364,6 +363,14 @@ class IntegrateHeroVersion( if value is not None: repre_context[key] = value + # Keep only username + # NOTE This is to avoid storing all user attributes and data + # to representation + if "user" not in repre_context: + repre_context["user"] = { + "name": anatomy_data["user"]["name"] + } + # Prepare new repre repre_entity = copy.deepcopy(repre_info["representation"]) repre_entity.pop("id", None) From db11ba743708d9550357f3129b7be9356c09b4c2 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 22 Oct 2025 14:59:30 +0200 Subject: [PATCH 549/595] add docstring --- client/ayon_core/lib/local_settings.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/lib/local_settings.py b/client/ayon_core/lib/local_settings.py index 4402e3c8a1..8a17b7af38 100644 --- a/client/ayon_core/lib/local_settings.py +++ b/client/ayon_core/lib/local_settings.py @@ -584,7 +584,19 @@ def _get_ayon_service_username() -> Optional[str]: def get_ayon_user_entity(username: Optional[str] = None) -> dict[str, Any]: - """AYON user entity used for templates and publishing.""" + """AYON user entity used for templates and publishing. + + Note: + Usually only service and admin users can receive the full user entity. + + Args: + username (Optional[str]): Username of the user. If not passed, then + the current user in 'ayon_api' is used. + + Returns: + dict[str, Any]: User entity. + + """ service_username = _get_ayon_service_username() # Handle service user handling first if service_username: From 062f756413ec17332005d59ce7039cedf76cff21 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 22 Oct 2025 16:07:26 +0200 Subject: [PATCH 550/595] Typing At least some, dont know how to import NewFolderDict --- .../tools/push_to_project/models/integrate.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index ef49838152..472500a55d 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -5,7 +5,7 @@ import itertools import sys import traceback import uuid -from typing import Optional, Dict +from typing import Optional, Dict, Any import ayon_api from ayon_api.utils import create_entity_id @@ -650,10 +650,10 @@ class ProjectPushItemProcess: def _create_folder( self, - src_folder_entity, - project_entity, - parent_folder_entity, - folder_name + src_folder_entity: Dict[str, Any], + project_entity: Dict[str, Any], + parent_folder_entity: Dict[str, Any], + folder_name: str ): parent_id = None if parent_folder_entity: From 475d4800a2e86f83ed508e0b33c425a7d6ab9eb7 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 22 Oct 2025 16:13:44 +0200 Subject: [PATCH 551/595] Check that source folder type could be pushed to destination --- .../tools/push_to_project/models/integrate.py | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 472500a55d..bd309d935f 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -702,7 +702,11 @@ class ProjectPushItemProcess: if new_folder_name != folder_name: folder_label = folder_name - # TODO find out how to define folder type + src_folder_type = src_folder_entity["folderType"] + self._check_src_folder_type( + project_entity, + src_folder_type + ) folder_entity = new_folder_entity( folder_name, "Folder", @@ -727,6 +731,24 @@ class ProjectPushItemProcess: folder_entity["path"] = "/".join([parent_path, folder_name]) return folder_entity + def _check_src_folder_type( + self, + project_entity: Dict[str, Any], + src_folder_type: str + ): + """Confirm that folder type exists in destination project""" + folder_types = [ + folder_type["name"].lower() + for folder_type in project_entity["folderTypes"] + ] + + if src_folder_type.lower() not in folder_types: + self._status.set_failed( + f"'{src_folder_type}' folder type is not configured in " + f"project Anatomy." + ) + raise PushToProjectError(self._status.fail_reason) + def _fill_or_create_destination_folder(self): dst_project_name = self._item.dst_project_name dst_folder_id = self._item.dst_folder_id @@ -1205,7 +1227,7 @@ class ProjectPushItemProcess: value_to_update = formatting_data.get(context_key) if value_to_update: repre_context[context_key] = value_to_update - if "task" not in formatting_data: + if "task" not in formatting_data and "task" in repre_context: repre_context.pop("task") return repre_context From 9340df7a250543658d673d95716047931ea981fa Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 22 Oct 2025 16:14:01 +0200 Subject: [PATCH 552/595] Copy source folder type to destination --- client/ayon_core/tools/push_to_project/models/integrate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index bd309d935f..22fcb5cf9f 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -709,7 +709,7 @@ class ProjectPushItemProcess: ) folder_entity = new_folder_entity( folder_name, - "Folder", + src_folder_type, parent_id=parent_id, attribs=new_folder_attrib ) From a077c57eee066f2c38082ea3d023451bde66a487 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Wed, 22 Oct 2025 14:50:25 +0000 Subject: [PATCH 553/595] [Automated] Add generated package files from main --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index d3b3454fd1..4aeeb94ea8 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.6.5+dev" +__version__ = "1.6.6" diff --git a/package.py b/package.py index 2889039502..ced8763100 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.6.5+dev" +version = "1.6.6" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index f43846ec2b..7460ddc831 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.6.5+dev" +version = "1.6.6" description = "" authors = ["Ynput Team "] readme = "README.md" From 45ddec53d30a50d169c33cea530fde83cd5a7821 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Wed, 22 Oct 2025 14:51:09 +0000 Subject: [PATCH 554/595] [Automated] Update version in package.py for develop --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index 4aeeb94ea8..8e0834b8da 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.6.6" +__version__ = "1.6.6+dev" diff --git a/package.py b/package.py index ced8763100..5fa4d165d2 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.6.6" +version = "1.6.6+dev" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index 7460ddc831..73b9a4a916 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.6.6" +version = "1.6.6+dev" description = "" authors = ["Ynput Team "] readme = "README.md" From 110018487f15f9a49156d1947592bf8541c12bc4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 22 Oct 2025 14:52:19 +0000 Subject: [PATCH 555/595] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 646a2dd1ee..60693f088d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to AYON Tray options: + - 1.6.6 - 1.6.5 - 1.6.4 - 1.6.3 From 0d235ed8cacffb9196a54e1b3cf40fbcc36fd57e Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 22 Oct 2025 18:58:20 +0200 Subject: [PATCH 556/595] Create destination task if no task selected --- .../tools/push_to_project/models/integrate.py | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index ef49838152..a7cb1de95a 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -762,8 +762,11 @@ class ProjectPushItemProcess: ) self._folder_entity = folder_entity if not dst_task_name: - self._task_info = {} - return + dst_task_name = self._make_sure_task_exists(folder_entity) + + if not dst_task_name: # really no task selected nor on source + self._task_info = {} + return folder_path = folder_entity["path"] folder_tasks = { @@ -962,6 +965,28 @@ class ProjectPushItemProcess: ) self._version_entity = version_entity + def _make_sure_task_exists(self, folder_entity: Dict[str, Any]) -> str: + """Creates destination task from source task information""" + project_name = self._item.dst_project_name + src_version_entity = self._src_version_entity + src_task = ayon_api.get_task_by_id( + self._item.src_project_name, src_version_entity["taskId"] + ) + if not src_task: + self._status.set_failed( + f"No task selected and couldn't find source task" + ) + raise PushToProjectError(self._status.fail_reason) + _task_id = ayon_api.create_task( + project_name, + src_task["name"], + folder_id=folder_entity["id"], + task_type=src_task["taskType"], + attrib=src_task["attrib"], + ) + + return src_task["name"] + def _integrate_representations(self): try: self._real_integrate_representations() From 0ebbd0a23224e4fd539f8b1a479892de38af96dc Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 23 Oct 2025 10:55:37 +0200 Subject: [PATCH 557/595] Extracted logic to methods --- .../tools/push_to_project/models/integrate.py | 52 +++++++++++++------ 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index a7cb1de95a..9365379148 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -482,6 +482,8 @@ class ProjectPushItemProcess: self._log_info("Destination project was found") self._fill_or_create_destination_folder() self._log_info("Destination folder was determined") + self._fill_or_create_destination_task() + self._log_info("Destination task was determined") self._determine_product_type() self._determine_publish_template_name() self._determine_product_name() @@ -730,7 +732,6 @@ class ProjectPushItemProcess: def _fill_or_create_destination_folder(self): dst_project_name = self._item.dst_project_name dst_folder_id = self._item.dst_folder_id - dst_task_name = self._item.dst_task_name new_folder_name = self._item.new_folder_name if not dst_folder_id and not new_folder_name: self._status.set_failed( @@ -761,12 +762,11 @@ class ProjectPushItemProcess: new_folder_name ) self._folder_entity = folder_entity - if not dst_task_name: - dst_task_name = self._make_sure_task_exists(folder_entity) - if not dst_task_name: # really no task selected nor on source - self._task_info = {} - return + def _fill_or_create_destination_task(self): + folder_entity = self._folder_entity + dst_task_name = self._item.dst_task_name + dst_project_name = self._item.dst_project_name folder_path = folder_entity["path"] folder_tasks = { @@ -775,6 +775,21 @@ class ProjectPushItemProcess: dst_project_name, folder_ids=[folder_entity["id"]] ) } + + if not dst_task_name: + src_task_info = self._get_src_task_info() + if not src_task_info: # really no task selected nor on source + self._task_info = {} + return + + dst_task_name = src_task_info["name"].lower() + if dst_task_name not in folder_tasks: + self._make_sure_task_exists( + folder_entity, src_task_info + ) + task_info = copy.deepcopy(src_task_info) + folder_tasks[dst_task_name] = task_info + task_info = folder_tasks.get(dst_task_name.lower()) if not task_info: self._status.set_failed( @@ -965,9 +980,22 @@ class ProjectPushItemProcess: ) self._version_entity = version_entity - def _make_sure_task_exists(self, folder_entity: Dict[str, Any]) -> str: + def _make_sure_task_exists( + self, + folder_entity: Dict[str, Any], + task_info: Dict[str, Any], + ): """Creates destination task from source task information""" project_name = self._item.dst_project_name + _task_id = ayon_api.create_task( + project_name, + task_info["name"], + folder_id=folder_entity["id"], + task_type=task_info["taskType"], + attrib=task_info["attrib"], + ) + + def _get_src_task_info(self): src_version_entity = self._src_version_entity src_task = ayon_api.get_task_by_id( self._item.src_project_name, src_version_entity["taskId"] @@ -977,15 +1005,7 @@ class ProjectPushItemProcess: f"No task selected and couldn't find source task" ) raise PushToProjectError(self._status.fail_reason) - _task_id = ayon_api.create_task( - project_name, - src_task["name"], - folder_id=folder_entity["id"], - task_type=src_task["taskType"], - attrib=src_task["attrib"], - ) - - return src_task["name"] + return src_task def _integrate_representations(self): try: From d8dd2a23a895b06a45ec27a1c24842729aaa7189 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 23 Oct 2025 10:55:48 +0200 Subject: [PATCH 558/595] Typing --- client/ayon_core/tools/push_to_project/models/integrate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 9365379148..b2475ac7d1 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -5,7 +5,7 @@ import itertools import sys import traceback import uuid -from typing import Optional, Dict +from typing import Optional, Dict, Any import ayon_api from ayon_api.utils import create_entity_id From ef0f5ac023ebf463567d52074ba10f33caa5936c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Thu, 23 Oct 2025 11:06:35 +0200 Subject: [PATCH 559/595] remove custom copy and deepcopy implementation --- client/ayon_core/lib/path_templates.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/client/ayon_core/lib/path_templates.py b/client/ayon_core/lib/path_templates.py index c01de6f1a6..aba2f296e3 100644 --- a/client/ayon_core/lib/path_templates.py +++ b/client/ayon_core/lib/path_templates.py @@ -80,18 +80,6 @@ class DefaultKeysDict(dict): def __str__(self) -> str: return str(self.get_default_value()) - def __copy__(self) -> "DefaultKeysDict": - return DefaultKeysDict( - self.get_default_keys(), dict(self.items()) - ) - - def __deepcopy__(self) -> "DefaultKeysDict": - data_copy = { - key: copy.deepcopy(value) - for key, value in self.items() - } - return DefaultKeysDict(self.get_default_keys(), data_copy) - def get_default_keys(self) -> list[str]: return list(self._default_keys) From f0230e24a7bc3a2e321caeb14bf7e33acd523eab Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 23 Oct 2025 11:20:03 +0200 Subject: [PATCH 560/595] Fix use operations instead of ayon_api Must be in same session as create folder if 'Create New Folder' --- client/ayon_core/tools/push_to_project/models/integrate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index b2475ac7d1..027416922b 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -987,7 +987,7 @@ class ProjectPushItemProcess: ): """Creates destination task from source task information""" project_name = self._item.dst_project_name - _task_id = ayon_api.create_task( + _task_id = self._operations.create_task( project_name, task_info["name"], folder_id=folder_entity["id"], From f13a40aa73b740e4cc715cd54acadf564fdb750a Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 23 Oct 2025 11:24:41 +0200 Subject: [PATCH 561/595] Fix typing Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/models/integrate.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 22fcb5cf9f..6871936e2c 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -650,9 +650,9 @@ class ProjectPushItemProcess: def _create_folder( self, - src_folder_entity: Dict[str, Any], - project_entity: Dict[str, Any], - parent_folder_entity: Dict[str, Any], + src_folder_entity: dict[str, Any], + project_entity: dict[str, Any], + parent_folder_entity: dict[str, Any], folder_name: str ): parent_id = None From 87f1d458b8c6cab2195583e0e3beeef8b80e6db1 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 23 Oct 2025 11:25:44 +0200 Subject: [PATCH 562/595] Change return of _check_src_folder_type Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- .../tools/push_to_project/models/integrate.py | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 6871936e2c..bf14034673 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -731,23 +731,21 @@ class ProjectPushItemProcess: folder_entity["path"] = "/".join([parent_path, folder_name]) return folder_entity - def _check_src_folder_type( + def _get_dst_folder_type( self, - project_entity: Dict[str, Any], + project_entity: dict[str, Any], src_folder_type: str - ): - """Confirm that folder type exists in destination project""" - folder_types = [ - folder_type["name"].lower() - for folder_type in project_entity["folderTypes"] - ] + ) -> str: + """Get new folder type.""" + for folder_type in project_entity["folderTypes"]: + if folder_type["name"].lower() == src_folder_type.lower(): + return folder_type["name"] - if src_folder_type.lower() not in folder_types: - self._status.set_failed( - f"'{src_folder_type}' folder type is not configured in " - f"project Anatomy." - ) - raise PushToProjectError(self._status.fail_reason) + self._status.set_failed( + f"'{src_folder_type}' folder type is not configured in " + f"project Anatomy." + ) + raise PushToProjectError(self._status.fail_reason) def _fill_or_create_destination_folder(self): dst_project_name = self._item.dst_project_name From c50406a279b61651ef6f099862dfe6874d7dcb10 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 23 Oct 2025 11:26:09 +0200 Subject: [PATCH 563/595] Simplify pop Co-authored-by: Roy Nieterau --- client/ayon_core/tools/push_to_project/models/integrate.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index bf14034673..48e5763345 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1225,8 +1225,8 @@ class ProjectPushItemProcess: value_to_update = formatting_data.get(context_key) if value_to_update: repre_context[context_key] = value_to_update - if "task" not in formatting_data and "task" in repre_context: - repre_context.pop("task") + if "task" not in formatting_data: + repre_context.pop("task", None) return repre_context From 0bade2d940ced81d27d70240b153a813abf8a6c8 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 23 Oct 2025 11:28:33 +0200 Subject: [PATCH 564/595] Update usage of renamed _get_dst_folder_type --- client/ayon_core/tools/push_to_project/models/integrate.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 48e5763345..68a0e2affb 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -703,13 +703,13 @@ class ProjectPushItemProcess: folder_label = folder_name src_folder_type = src_folder_entity["folderType"] - self._check_src_folder_type( + dst_folder_type = self._get_dst_folder_type( project_entity, src_folder_type ) folder_entity = new_folder_entity( folder_name, - src_folder_type, + dst_folder_type, parent_id=parent_id, attribs=new_folder_attrib ) From 1ee701b52fdaafcabe9ce6a726f4d74e9a8a9da5 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 23 Oct 2025 11:32:30 +0200 Subject: [PATCH 565/595] Fix dict typing --- .../tools/push_to_project/models/integrate.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 027416922b..1ecf8a8a59 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -5,7 +5,7 @@ import itertools import sys import traceback import uuid -from typing import Optional, Dict, Any +from typing import Optional, Any import ayon_api from ayon_api.utils import create_entity_id @@ -225,8 +225,8 @@ class ProjectPushRepreItem: but filenames are not template based. Args: - repre_entity (Dict[str, Ant]): Representation entity. - roots (Dict[str, str]): Project roots (based on project anatomy). + repre_entity (dict[str, Ant]): Representation entity. + roots (dict[str, str]): Project roots (based on project anatomy). """ def __init__(self, repre_entity, roots): @@ -982,8 +982,8 @@ class ProjectPushItemProcess: def _make_sure_task_exists( self, - folder_entity: Dict[str, Any], - task_info: Dict[str, Any], + folder_entity: dict[str, Any], + task_info: dict[str, Any], ): """Creates destination task from source task information""" project_name = self._item.dst_project_name @@ -1326,6 +1326,6 @@ class IntegrateModel: return item.integrate() - def get_items(self) -> Dict[str, ProjectPushItemProcess]: + def get_items(self) -> dict[str, ProjectPushItemProcess]: """Returns dict of all ProjectPushItemProcess items """ return self._process_items From 7b5ca16993bbc844d14ca27bc042e23ee58ce9bf Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 23 Oct 2025 17:03:50 +0200 Subject: [PATCH 566/595] Use lower only for comparison Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/models/integrate.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 1ecf8a8a59..1cd9e2deaf 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -782,8 +782,8 @@ class ProjectPushItemProcess: self._task_info = {} return - dst_task_name = src_task_info["name"].lower() - if dst_task_name not in folder_tasks: + dst_task_name = src_task_info["name"] + if dst_task_name.lower() not in folder_tasks: self._make_sure_task_exists( folder_entity, src_task_info ) From 67994bb5a3bc8dc527a4fd09f6110049c551238e Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 23 Oct 2025 17:04:07 +0200 Subject: [PATCH 567/595] Remove unnecessary variable Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/models/integrate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 1cd9e2deaf..2030027bb0 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -987,7 +987,7 @@ class ProjectPushItemProcess: ): """Creates destination task from source task information""" project_name = self._item.dst_project_name - _task_id = self._operations.create_task( + self._operations.create_task( project_name, task_info["name"], folder_id=folder_entity["id"], From cea56fbe5322075dbdb0826e78d0b2a27069b5ac Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 23 Oct 2025 17:04:32 +0200 Subject: [PATCH 568/595] Formatting change Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/models/integrate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 2030027bb0..7e92d82f41 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1002,7 +1002,7 @@ class ProjectPushItemProcess: ) if not src_task: self._status.set_failed( - f"No task selected and couldn't find source task" + "No task selected and couldn't find source task" ) raise PushToProjectError(self._status.fail_reason) return src_task From 04322ef94d673cd3b4356afb6897ec7d30d8d8bb Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 23 Oct 2025 17:08:35 +0200 Subject: [PATCH 569/595] Removed hard fail, unnecessary --- client/ayon_core/tools/push_to_project/models/integrate.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 5127afd0ee..164b73e0ef 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1020,11 +1020,7 @@ class ProjectPushItemProcess: src_task = ayon_api.get_task_by_id( self._item.src_project_name, src_version_entity["taskId"] ) - if not src_task: - self._status.set_failed( - f"No task selected and couldn't find source task" - ) - raise PushToProjectError(self._status.fail_reason) + return src_task def _integrate_representations(self): From 42722c08960e528a9e9cfa735aedfd7023533bde Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 23 Oct 2025 17:20:16 +0200 Subject: [PATCH 570/595] Added validation that task type is in destination project --- .../tools/push_to_project/models/integrate.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 164b73e0ef..e80a525204 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1007,11 +1007,26 @@ class ProjectPushItemProcess: ): """Creates destination task from source task information""" project_name = self._item.dst_project_name + found_task_type = False + src_task_type = task_info["taskType"] + for task_type in self._project_entity["taskTypes"]: + if task_type["name"].lower() == src_task_type.lower(): + found_task_type = True + break + + if not found_task_type: + self._status.set_failed( + f"'{src_task_type}' task type is not configured in " + "project Anatomy." + ) + + raise PushToProjectError(self._status.fail_reason) + _task_id = self._operations.create_task( project_name, task_info["name"], folder_id=folder_entity["id"], - task_type=task_info["taskType"], + task_type=src_task_type, attrib=task_info["attrib"], ) From 7e3e5855b86a31e1206c199478bddeb9829a6c80 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 24 Oct 2025 11:01:24 +0200 Subject: [PATCH 571/595] Fix use of lower task name --- client/ayon_core/tools/push_to_project/models/integrate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 5370a35c37..a98c045893 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -808,7 +808,7 @@ class ProjectPushItemProcess: folder_entity, src_task_info ) task_info = copy.deepcopy(src_task_info) - folder_tasks[dst_task_name] = task_info + folder_tasks[dst_task_name.lower()] = task_info task_info = folder_tasks.get(dst_task_name.lower()) if not task_info: From f33b13c19449aed3ab9b1aa9fb45716c6418d52e Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 24 Oct 2025 11:22:13 +0200 Subject: [PATCH 572/595] Fix if source version doesn't have task Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/models/integrate.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index a98c045893..a8cd3be2cc 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1032,6 +1032,8 @@ class ProjectPushItemProcess: def _get_src_task_info(self): src_version_entity = self._src_version_entity + if not src_version_entity["taskId"]: + return None src_task = ayon_api.get_task_by_id( self._item.src_project_name, src_version_entity["taskId"] ) From f6e4d50137f4dbcbc830639bc6e73efc054d27e1 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 24 Oct 2025 12:19:31 +0200 Subject: [PATCH 573/595] Fix overwriting real task name with name of task type --- client/ayon_core/tools/push_to_project/models/integrate.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index a98c045893..5be7dbe2c1 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -828,7 +828,10 @@ class ProjectPushItemProcess: task_type["name"]: task_type for task_type in self._project_entity["taskTypes"] } - task_type_info = task_types_by_name.get(task_type_name, {}) + task_type_info = copy.deepcopy( + task_types_by_name.get(task_type_name, {}) + ) + task_type_info.pop("name") # do not overwrite real task name task_info.update(task_type_info) self._task_info = task_info From efec97fda3938f883b166fa4de26b127fc488920 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 24 Oct 2025 12:20:14 +0200 Subject: [PATCH 574/595] Return task info from created object --- .../ayon_core/tools/push_to_project/models/integrate.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 5be7dbe2c1..2d02316db0 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -804,10 +804,9 @@ class ProjectPushItemProcess: dst_task_name = src_task_info["name"] if dst_task_name.lower() not in folder_tasks: - self._make_sure_task_exists( + task_info = self._make_sure_task_exists( folder_entity, src_task_info ) - task_info = copy.deepcopy(src_task_info) folder_tasks[dst_task_name.lower()] = task_info task_info = folder_tasks.get(dst_task_name.lower()) @@ -1007,7 +1006,7 @@ class ProjectPushItemProcess: self, folder_entity: dict[str, Any], task_info: dict[str, Any], - ): + ) -> dict[str, Any]: """Creates destination task from source task information""" project_name = self._item.dst_project_name found_task_type = False @@ -1025,13 +1024,15 @@ class ProjectPushItemProcess: raise PushToProjectError(self._status.fail_reason) - self._operations.create_task( + task_info = self._operations.create_task( project_name, task_info["name"], folder_id=folder_entity["id"], task_type=src_task_type, attrib=task_info["attrib"], ) + self._task_info = task_info.data + return self._task_info def _get_src_task_info(self): src_version_entity = self._src_version_entity From 636ef024b786dafe45233522aea2d92ecccd8440 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 24 Oct 2025 12:20:34 +0200 Subject: [PATCH 575/595] Task is optional --- client/ayon_core/tools/push_to_project/models/integrate.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 2d02316db0..fc61204bf3 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -965,8 +965,8 @@ class ProjectPushItemProcess: version = get_versioning_start( project_name, self.host_name, - task_name=self._task_info["name"], - task_type=self._task_info["taskType"], + task_name=self._task_info.get("name"), + task_type=self._task_info.get("taskType"), product_type=product_type, product_name=product_entity["name"], ) From 49162f228e9cb3bd8ceee2bad8ad54ca665b4c75 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 24 Oct 2025 12:20:54 +0200 Subject: [PATCH 576/595] Fix pushed products not attaching to version --- client/ayon_core/tools/push_to_project/models/integrate.py | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index fc61204bf3..45035671b2 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -994,6 +994,7 @@ class ProjectPushItemProcess: version_entity = new_version_entity( version, product_id, + task_id=self._task_info.get("id"), attribs=dst_attrib, thumbnail_id=thumbnail_id, ) From fcc82a8e463388e205aac4460a73fbff16552386 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 24 Oct 2025 14:14:21 +0200 Subject: [PATCH 577/595] Transfer status and tags --- .../tools/push_to_project/models/integrate.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index f8360c520b..8c125dd3dc 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -990,10 +990,15 @@ class ProjectPushItemProcess: existing_version_entity["attrib"].update(dst_attrib) self._version_entity = existing_version_entity return + copied_tags = self._get_transferable_tags(src_version_entity) + copied_status = self._get_transferable_status(src_version_entity) version_entity = new_version_entity( version, product_id, + author=src_version_entity["author"], + status=copied_status, + tags=copied_tags, task_id=self._task_info.get("id"), attribs=dst_attrib, thumbnail_id=thumbnail_id, @@ -1291,6 +1296,30 @@ class ProjectPushItemProcess: repre_context.pop("task", None) return repre_context + def _get_transferable_tags(self, src_version_entity): + """Copy over only tags present in destination project""" + dst_project_tags = [ + tag["name"] for tag in self._project_entity["tags"] + ] + copied_tags = [] + for src_tag in src_version_entity["tags"]: + if src_tag in dst_project_tags: + copied_tags.append(src_tag) + return copied_tags + + def _get_transferable_status(self, src_version_entity): + """Copy over status, first status if not matching found""" + dst_project_statuses = { + status["name"]: status + for status in self._project_entity["statuses"] + } + copied_status = dst_project_statuses.get(src_version_entity["status"]) + if not copied_status: + copied_status = dst_project_statuses[ + dst_project_statuses.keys()[0] + ] + return copied_status["name"] + class IntegrateModel: def __init__(self, controller): From 3104e07c78dd62ff438b122c97dbe63cf1e3b665 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 24 Oct 2025 15:30:52 +0200 Subject: [PATCH 578/595] Fix access to dict keys --- client/ayon_core/tools/push_to_project/models/integrate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 8c125dd3dc..838bf079ec 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1316,7 +1316,7 @@ class ProjectPushItemProcess: copied_status = dst_project_statuses.get(src_version_entity["status"]) if not copied_status: copied_status = dst_project_statuses[ - dst_project_statuses.keys()[0] + next(iter(dst_project_statuses)) ] return copied_status["name"] From 542acd0896e1ad266f7764811817212dc4ab6d06 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 24 Oct 2025 15:33:15 +0200 Subject: [PATCH 579/595] Fix access to dict keys --- client/ayon_core/tools/push_to_project/models/integrate.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 838bf079ec..e23d2a8eb2 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1313,8 +1313,13 @@ class ProjectPushItemProcess: status["name"]: status for status in self._project_entity["statuses"] } - copied_status = dst_project_statuses.get(src_version_entity["status"]) + source_status = src_version_entity["status"] + copied_status = dst_project_statuses.get(source_status) if not copied_status: + self._log_warning( + f"'{source_status}' not found in destination project. " + "Used first configured status from there." + ) copied_status = dst_project_statuses[ next(iter(dst_project_statuses)) ] From fcebdaf13006aeeefd2979ceac24304dee9cd618 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 24 Oct 2025 16:00:42 +0200 Subject: [PATCH 580/595] Do not send dummy status if not found --- .../tools/push_to_project/models/integrate.py | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index e23d2a8eb2..2adc708cf3 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -1284,10 +1284,12 @@ class ProjectPushItemProcess: if context_value and isinstance(context_value, dict): for context_sub_key in context_value.keys(): value_to_update = formatting_data.get(context_key, {}).get( - context_sub_key) + context_sub_key + ) if value_to_update: - repre_context[context_key][ - context_sub_key] = value_to_update + repre_context[context_key][context_sub_key] = ( + value_to_update + ) else: value_to_update = formatting_data.get(context_key) if value_to_update: @@ -1313,17 +1315,10 @@ class ProjectPushItemProcess: status["name"]: status for status in self._project_entity["statuses"] } - source_status = src_version_entity["status"] - copied_status = dst_project_statuses.get(source_status) - if not copied_status: - self._log_warning( - f"'{source_status}' not found in destination project. " - "Used first configured status from there." - ) - copied_status = dst_project_statuses[ - next(iter(dst_project_statuses)) - ] - return copied_status["name"] + copied_status = dst_project_statuses.get(src_version_entity["status"]) + if copied_status: + return copied_status["name"] + return None class IntegrateModel: From 3ee7c30cae8b75726875e58970f19fe08af14ee4 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Fri, 24 Oct 2025 17:35:28 +0200 Subject: [PATCH 581/595] Handles missing media references in OTIO clips Adds a check for missing media references in OTIO clips during publishing. --- .../ayon_core/plugins/publish/collect_otio_frame_ranges.py | 6 ++++++ .../plugins/publish/collect_otio_subset_resources.py | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/client/ayon_core/plugins/publish/collect_otio_frame_ranges.py b/client/ayon_core/plugins/publish/collect_otio_frame_ranges.py index d68970d428..543277f37e 100644 --- a/client/ayon_core/plugins/publish/collect_otio_frame_ranges.py +++ b/client/ayon_core/plugins/publish/collect_otio_frame_ranges.py @@ -71,6 +71,12 @@ class CollectOtioRanges(pyblish.api.InstancePlugin): import opentimelineio as otio otio_clip = instance.data["otioClip"] + if isinstance( + otio_clip.media_reference, + otio.schema.MissingReference + ): + self.log.info("Clip has no media reference") + return # Collect timeline ranges if workfile start frame is available if "workfileFrameStart" in instance.data: diff --git a/client/ayon_core/plugins/publish/collect_otio_subset_resources.py b/client/ayon_core/plugins/publish/collect_otio_subset_resources.py index 275b8a7f55..4d3c1cfb13 100644 --- a/client/ayon_core/plugins/publish/collect_otio_subset_resources.py +++ b/client/ayon_core/plugins/publish/collect_otio_subset_resources.py @@ -60,6 +60,13 @@ class CollectOtioSubsetResources( # get basic variables otio_clip = instance.data["otioClip"] + if isinstance( + otio_clip.media_reference, + otio.schema.MissingReference + ): + self.log.info("Clip has no media reference") + return + otio_available_range = otio_clip.available_range() media_fps = otio_available_range.start_time.rate available_duration = otio_available_range.duration.value From 373683890c07ac137df771c5e5d58c82f00fe87d Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Mon, 27 Oct 2025 10:05:30 +0100 Subject: [PATCH 582/595] Use correct publish template in `get_instance_expected_output_path` --- client/ayon_core/pipeline/publish/lib.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/pipeline/publish/lib.py b/client/ayon_core/pipeline/publish/lib.py index fb84417730..f6198bd45e 100644 --- a/client/ayon_core/pipeline/publish/lib.py +++ b/client/ayon_core/pipeline/publish/lib.py @@ -955,7 +955,26 @@ def get_instance_expected_output_path( "version": version }) - path_template_obj = anatomy.get_template_item("publish", "default")["path"] + # Get instance publish template name + task_name = task_type = None + task_entity = instance.data.get("taskEntity") + if task_entity: + task_name = task_entity["name"] + task_type = task_entity["taskType"] + + template_name = get_publish_template_name( + project_name=instance.context.data["projectName"], + host_name=instance.context.data["hostName"], + product_type=instance.data["productType"], + task_name=task_name, + task_type=task_type, + project_settings=instance.context.data["project_settings"], + ) + + path_template_obj = anatomy.get_template_item( + "publish", + template_name + )["path"] template_filled = path_template_obj.format_strict(template_data) return os.path.normpath(template_filled) From a162d6bce1c4ec9fe20c918d50bc831ffeb54e2f Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 27 Oct 2025 15:50:13 +0100 Subject: [PATCH 583/595] fix mytasks filtering --- client/ayon_core/tools/workfiles/widgets/window.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/tools/workfiles/widgets/window.py b/client/ayon_core/tools/workfiles/widgets/window.py index 3f96f0bb15..c7ff98f25e 100644 --- a/client/ayon_core/tools/workfiles/widgets/window.py +++ b/client/ayon_core/tools/workfiles/widgets/window.py @@ -358,9 +358,8 @@ class WorkfilesToolWindow(QtWidgets.QWidget): if not self._host_is_valid: return - self._folders_widget.set_project_name( - self._controller.get_current_project_name() - ) + self._project_name = self._controller.get_current_project_name() + self._folders_widget.set_project_name(self._project_name) def _on_save_as_finished(self, event): if event["failed"]: @@ -412,6 +411,7 @@ class WorkfilesToolWindow(QtWidgets.QWidget): entity_ids = self._controller.get_my_tasks_entity_ids( self._project_name ) + print(entity_ids) folder_ids = entity_ids["folder_ids"] task_ids = entity_ids["task_ids"] self._folders_widget.set_folder_ids_filter(folder_ids) From c03fe908a74b0d5e815f94526363980097bbe676 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 27 Oct 2025 15:57:12 +0100 Subject: [PATCH 584/595] lock pyobjc-core to 11.1 --- client/pyproject.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/pyproject.toml b/client/pyproject.toml index 6416d9b8e1..c98591b707 100644 --- a/client/pyproject.toml +++ b/client/pyproject.toml @@ -19,3 +19,6 @@ OpenTimelineIO = "0.16.0" opencolorio = "^2.3.2,<2.4.0" Pillow = "9.5.0" websocket-client = ">=0.40.0,<2" + +[ayon.runtimeDependencies.darwin] +pyobjc-core = "^11.1" From 5d74d9dc514b5ca8b4b4298c1346222c18ac0ca4 Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Mon, 27 Oct 2025 16:52:18 +0100 Subject: [PATCH 585/595] Remove dev print --- client/ayon_core/tools/workfiles/widgets/window.py | 1 - 1 file changed, 1 deletion(-) diff --git a/client/ayon_core/tools/workfiles/widgets/window.py b/client/ayon_core/tools/workfiles/widgets/window.py index c7ff98f25e..00362ea866 100644 --- a/client/ayon_core/tools/workfiles/widgets/window.py +++ b/client/ayon_core/tools/workfiles/widgets/window.py @@ -411,7 +411,6 @@ class WorkfilesToolWindow(QtWidgets.QWidget): entity_ids = self._controller.get_my_tasks_entity_ids( self._project_name ) - print(entity_ids) folder_ids = entity_ids["folder_ids"] task_ids = entity_ids["task_ids"] self._folders_widget.set_folder_ids_filter(folder_ids) From 425dbc6db1addf6cb603d0774f5aa6abf4637a01 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 27 Oct 2025 18:07:49 +0100 Subject: [PATCH 586/595] Implemented copy of source folder thumbnail --- .../tools/push_to_project/models/integrate.py | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 2adc708cf3..8a6000122f 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -3,6 +3,7 @@ import re import copy import itertools import sys +import tempfile import traceback import uuid from typing import Optional, Any @@ -709,11 +710,14 @@ class ProjectPushItemProcess: project_entity, src_folder_type ) + new_thumbnail_id = self._get_new_folder_thumbnail_id( + project_entity, src_folder_entity) folder_entity = new_folder_entity( folder_name, dst_folder_type, parent_id=parent_id, - attribs=new_folder_attrib + attribs=new_folder_attrib, + thumbnail_id=new_thumbnail_id ) if folder_label: folder_entity["label"] = folder_label @@ -733,6 +737,36 @@ class ProjectPushItemProcess: folder_entity["path"] = "/".join([parent_path, folder_name]) return folder_entity + def _get_new_folder_thumbnail_id( + self, + project_entity: dict[str, Any], + src_folder_entity: dict[str, Any] + ) -> Optional[str]: + """Copy thumbnail possibly set on folder. + + Could be different from representation thumbnails, and it is only shown + when folder is selected. + """ + new_thumbnail_id = None + if src_folder_entity["thumbnailId"]: + thumbnail = ayon_api.get_thumbnail_by_id( + self._item.src_project_name, src_folder_entity["thumbnailId"] + ) + if not thumbnail.id: + return new_thumbnail_id + + try: + with tempfile.NamedTemporaryFile(delete=False) as tmp_file: + tmp_file.write(thumbnail.content) + temp_file_path = tmp_file.name + + new_thumbnail_id = ayon_api.create_thumbnail( + project_entity["name"], temp_file_path) + finally: + if temp_file_path and os.path.exists(temp_file_path): + os.remove(temp_file_path) + return new_thumbnail_id + def _get_dst_folder_type( self, project_entity: dict[str, Any], From e184c1b3dd5de7fbd95bcf7afe643c1738659e2c Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 29 Oct 2025 14:22:29 +0100 Subject: [PATCH 587/595] don't require 'AYON_STUDIO_BUNDLE_NAME' to be set --- client/ayon_core/addon/base.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/ayon_core/addon/base.py b/client/ayon_core/addon/base.py index 9207bb74c0..a04aedb8cc 100644 --- a/client/ayon_core/addon/base.py +++ b/client/ayon_core/addon/base.py @@ -141,6 +141,9 @@ def _get_ayon_bundle_data() -> tuple[ ]: studio_bundle_name = os.environ.get("AYON_STUDIO_BUNDLE_NAME") project_bundle_name = os.getenv("AYON_BUNDLE_NAME") + # If AYON launcher <1.4.0 was used + if not studio_bundle_name: + studio_bundle_name = project_bundle_name bundles = ayon_api.get_bundles()["bundles"] studio_bundle = next( ( From 9d3585a0c0d73aae50ab2dd444fa1e0aea3bec71 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 29 Oct 2025 15:12:38 +0100 Subject: [PATCH 588/595] Renamed method Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- client/ayon_core/tools/push_to_project/models/integrate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 8a6000122f..0968b99eb5 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -737,7 +737,7 @@ class ProjectPushItemProcess: folder_entity["path"] = "/".join([parent_path, folder_name]) return folder_entity - def _get_new_folder_thumbnail_id( + def _create_new_folder_thumbnail( self, project_entity: dict[str, Any], src_folder_entity: dict[str, Any] From 6dc68606222c88ffaac871bc25f68e5fe0856a19 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 29 Oct 2025 15:13:35 +0100 Subject: [PATCH 589/595] Reorganized flow Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- .../tools/push_to_project/models/integrate.py | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 0968b99eb5..33eac6c3d6 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -747,24 +747,28 @@ class ProjectPushItemProcess: Could be different from representation thumbnails, and it is only shown when folder is selected. """ + if not src_folder_entity["thumbnailId"]: + return None + + thumbnail = ayon_api.get_folder_thumbnail( + self._item.src_project_name, + src_folder_entity["id"], + src_folder_entity["thumbnailId"] + ) + if not thumbnail.id: + return None + + with tempfile.NamedTemporaryFile(delete=False) as tmp_file: + tmp_file.write(thumbnail.content) + temp_file_path = tmp_file.name + new_thumbnail_id = None - if src_folder_entity["thumbnailId"]: - thumbnail = ayon_api.get_thumbnail_by_id( - self._item.src_project_name, src_folder_entity["thumbnailId"] - ) - if not thumbnail.id: - return new_thumbnail_id - - try: - with tempfile.NamedTemporaryFile(delete=False) as tmp_file: - tmp_file.write(thumbnail.content) - temp_file_path = tmp_file.name - - new_thumbnail_id = ayon_api.create_thumbnail( - project_entity["name"], temp_file_path) - finally: - if temp_file_path and os.path.exists(temp_file_path): - os.remove(temp_file_path) + try: + new_thumbnail_id = ayon_api.create_thumbnail( + project_entity["name"], temp_file_path) + finally: + if os.path.exists(temp_file_path): + os.remove(temp_file_path) return new_thumbnail_id def _get_dst_folder_type( From 35926269a624b8bbde492defa6aaf756e10c8316 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 29 Oct 2025 15:14:38 +0100 Subject: [PATCH 590/595] Used renamed method --- client/ayon_core/tools/push_to_project/models/integrate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_core/tools/push_to_project/models/integrate.py b/client/ayon_core/tools/push_to_project/models/integrate.py index 33eac6c3d6..cacce44942 100644 --- a/client/ayon_core/tools/push_to_project/models/integrate.py +++ b/client/ayon_core/tools/push_to_project/models/integrate.py @@ -710,7 +710,7 @@ class ProjectPushItemProcess: project_entity, src_folder_type ) - new_thumbnail_id = self._get_new_folder_thumbnail_id( + new_thumbnail_id = self._create_new_folder_thumbnail( project_entity, src_folder_entity) folder_entity = new_folder_entity( folder_name, From e5265ccdc01829ee817327368a164778a40ad155 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Wed, 29 Oct 2025 15:31:57 +0000 Subject: [PATCH 591/595] [Automated] Add generated package files from main --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index 8e0834b8da..e40a2e3663 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.6.6+dev" +__version__ = "1.6.7" diff --git a/package.py b/package.py index 5fa4d165d2..8cd5df8dfc 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.6.6+dev" +version = "1.6.7" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index 73b9a4a916..11e7d4d3c2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.6.6+dev" +version = "1.6.7" description = "" authors = ["Ynput Team "] readme = "README.md" From 757d42148e7476f4065fb4418c2d129319236090 Mon Sep 17 00:00:00 2001 From: Ynbot Date: Wed, 29 Oct 2025 15:32:36 +0000 Subject: [PATCH 592/595] [Automated] Update version in package.py for develop --- client/ayon_core/version.py | 2 +- package.py | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/ayon_core/version.py b/client/ayon_core/version.py index e40a2e3663..6aa30b935a 100644 --- a/client/ayon_core/version.py +++ b/client/ayon_core/version.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- """Package declaring AYON addon 'core' version.""" -__version__ = "1.6.7" +__version__ = "1.6.7+dev" diff --git a/package.py b/package.py index 8cd5df8dfc..ff3fad5b19 100644 --- a/package.py +++ b/package.py @@ -1,6 +1,6 @@ name = "core" title = "Core" -version = "1.6.7" +version = "1.6.7+dev" client_dir = "ayon_core" diff --git a/pyproject.toml b/pyproject.toml index 11e7d4d3c2..6656f15249 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ [tool.poetry] name = "ayon-core" -version = "1.6.7" +version = "1.6.7+dev" description = "" authors = ["Ynput Team "] readme = "README.md" From 5cd46678b473505384fa8b0b1ba061adab671bd3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 29 Oct 2025 15:33:32 +0000 Subject: [PATCH 593/595] chore(): update bug report / version --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 60693f088d..c79ca69fca 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -35,6 +35,7 @@ body: label: Version description: What version are you running? Look to AYON Tray options: + - 1.6.7 - 1.6.6 - 1.6.5 - 1.6.4 From b3dbee7664f23289f8507a375fe8fae063817800 Mon Sep 17 00:00:00 2001 From: "robin@ynput.io" Date: Wed, 29 Oct 2025 16:43:38 -0400 Subject: [PATCH 594/595] Fix legacy OTIO clips detection on range remap. --- client/ayon_core/pipeline/editorial.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/client/ayon_core/pipeline/editorial.py b/client/ayon_core/pipeline/editorial.py index 716035aa1c..a53f1b5ae5 100644 --- a/client/ayon_core/pipeline/editorial.py +++ b/client/ayon_core/pipeline/editorial.py @@ -250,21 +250,17 @@ def remap_range_on_file_sequence(otio_clip, otio_range): if ( is_clip_from_media_sequence(otio_clip) and available_range_start_frame == media_ref.start_frame - and conformed_src_in.to_frames() < media_ref.start_frame + and round(conformed_src_in.value) < media_ref.start_frame ): media_in = otio.opentime.RationalTime( 0, rate=available_range_rate ) src_offset_in = otio_range.start_time - media_in - # make sure that only if any offset is present - if media_ref.start_frame == src_offset_in.to_frames(): - frame_in = src_offset_in.to_frames() - else: - frame_in = otio.opentime.RationalTime.from_frames( - media_ref.start_frame + src_offset_in.to_frames(), + frame_in = otio.opentime.RationalTime.from_frames( + media_ref.start_frame + src_offset_in.to_frames(), rate=available_range_rate, - ).to_frames() + ).to_frames() # e.g.: # duration = 10 frames at 24fps From 9eef269aafa5d3e79e94b69e4938375b55805f53 Mon Sep 17 00:00:00 2001 From: "robin@ynput.io" Date: Wed, 29 Oct 2025 16:57:49 -0400 Subject: [PATCH 595/595] Add comment. --- client/ayon_core/pipeline/editorial.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/ayon_core/pipeline/editorial.py b/client/ayon_core/pipeline/editorial.py index a53f1b5ae5..21468e6ddd 100644 --- a/client/ayon_core/pipeline/editorial.py +++ b/client/ayon_core/pipeline/editorial.py @@ -250,6 +250,10 @@ def remap_range_on_file_sequence(otio_clip, otio_range): if ( is_clip_from_media_sequence(otio_clip) and available_range_start_frame == media_ref.start_frame + + # source range should be included in available range from media + # using round instead of conformed_src_in.to_frames() to avoid + # any precision issue with frame rate. and round(conformed_src_in.value) < media_ref.start_frame ): media_in = otio.opentime.RationalTime(

    (BP?*`;gXm1GuGQnkR6df4nE{M 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 z wpIcJ#FzB3n12IEu7kg#yq5V`7b5FjR%j& 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�fCxodxC5g1H`h?32kv8d5MyL*B z7=7Bo=hD5}LAClZy;}XKm_wY|`Q@KO)++fxZdT9j@X$8}ckc?%a=KPl1G)3pq2-3SC&-4!BQw z0~v%$MJv|q+4YmgMS5W_!O)K~^cr8tR8&4k%Ye=+nHbaj7)18bj;fDmUNk(l)=YA#QBR~DRibMx8SKNgB*_%6<+|0C(Y>tR&M#7p4ZyqgtI!3>XLc=7+ z&(_ep)NxMjofrB3_Ad&{bj3_2sYqFiGV2V~Ts$u)7i?K!fqOFd>mY={_NfduLe(sHs=5k)PE;|Q#} zBLa z{mo4}*iqZ`$E0R?+hWIhpK3z~M>(c@EqYn9@0`c}b{^&YV!BRxbRlLpQe>JXjT3|@ zPkAvzVF`yhW{A~~3GF>E=S#@>hCG6zf%6}Lm>c#&2Ay?Gfemy*K5s*WeLb!h#@T6~ z-3u1ut-2YguCG_=(GnWq85jpXO#5hc{YT&>KrXsdqArz-m3gr*Og-jyI5J9XeAZnl znF&|AUIO4@wha}^4bZ5{aW8Bzj4oPmYE=_a4Wnxz6^K}oVq|D2!>)b;Eo$s*U9GWX zdl+ui?EWl5r_!HAV%%=Z8Z<(2Z;}g8Gvbg-Zq!3_UV0nz(wmpoq^U|jttl7D=m0ts z8XFr#V}t2S(d$*ym)EB;Kc%ok6)OctdR0?fADMC?M&5R=N42&*?CH{i=T>u*y>#HA zfvH{^@XkNZGtc~!9EZcrGxsv@N$2Lhz|N@ta-e7OPLXE%PN-T0A?cKMBZd_~&B*5|I| zMH(CJNUDyM0RVELwxFUUV%ukAjC$mhS4@f0=ske|x&ZI6M@EUN8xaAO=@L+)1&MT` z)xGBwvWg@ph;=DHc>~>Ns7Ln^)yG!JxB~fNR52xV+o$ttJjoVCw>(QA2sK#(Nuua< z={H9cR4(*7b*#_z`*@Bf9M_KP(&0^g9-gBK$Fbu&ba+#rf9G>ay{OzeC0Ca6u0HP$ zE;vWCP=l@R(i!&LnCsOM#mTEMjkkrR=;~fcnM}Bn62w=-O=CK>>{6qRD{?a7k&_}O zkJ?TfqED0)haNDW>-XIp6~BSFY&6G(!!L~_Nwo4V zg=y5CSl55&C{UKID~1A{hr}N9`WW0<{vM}=B6*@_rymSbZUa4Y>KZGo~3*G51 zM|Zj#-N~`d*%#$6pgkEO%Hy$bX{?j~=8Ye{f+F>)X#1_&w;p@^N@`WN13*#++}|IS z10XKC(T~6Z@Y0OD9W$b$aX0EwIlN-_EBpSudRAIIOM^76w78V?E?w(MR_XDtsv4=S zkM=2EpQ0D2bCBumTkn;-4d$vzcrA0*83@qP{M={^nZ|LWJ!o}}p$ z0WTWiF3I5I{p#AMqV1!UCV0GGdF%Ig#O+~Ik3TAZM^Y%`ivEr#BjS3OxNt&fKH8_% zeTwu%=OF6DR-p-vJbv}Eqp6cS~tMAUSF@&D(Q;S znz0E_4@!iVM7Xr0vauq<)R;tN+7?co_OoA?x)*ft0))ZmODyrAN)I^kDPw~D*! zgkP!9E9kHte#ND^_wS5RF45yaOSbI*$8qWjxsqFHhg{(xZ7-sTV>GB-u@Fipa zWwFOo!-5@3iz=Y(o>r8YA)+^!`i`>@NF81xEU~l4j+X9Tk8NL=JdyKEN~p6N-|P|B z;<%ZzW1j8fZ9z_)hInweckzn3`mQa(<+j~h*K>h=w`qTU{PLFJ7s0<-(Qea@AODes zUR=$5kl;>1Aa#|40xxE{18E(n-qY3zJbof{37HRf5lzN0L7;*++9HWQq`A()t6elz z(OMMyf%bIme(3U*(B%P5>3H31-!7fyNKfdat>HoRTix8U(r0r?LhD$ zcl2c@94&2l(5#@Ld1fL_xDozh{MjoA zzY6ES9nRl_6}$&4_*m`=mhZ7E*}8K(xp3UaurEGjnJs7YOvO&hRMc8^dL&azg)150 z#ogJG63*ckbxCXGl5Y@9?98ffqMxbDfGS9;{XL9SmP*kyI+xr4oz{0cCGUCwBsWX$ zjL)p-QZJq+kikYTn#}Elb!5ZRCBjv{v+sLy**c-L)jG;=xkdzo!O-_0%T7{HrL+iP zA0!czWA=6MYOb?d1oOxVxFf_5iu3c4*MUD7k4b8}u>B zjF$!a8N|C@@;OEQf9zfT=%JPH{_v{yg4&~BQ+Gw0HSGdeDvD|7iq=2E&jc|90!XI>xlYFdZ5B>Cx&R@3P2ASpL>-{BosO3%4g zq=L^!(>OA&ub7}i2`d*Zpb5Ub{mVJ@O<#Vr9*J#=6!#E@7_gI48i^!bA00TnWFf0# zDjPu1QMT?=j>iJkO&Vgf>b;;iPNDi#nI>aFFCmDoMG5pmH5m8NTScQdYg>d8XVep0 zWPhXmXvNmn3}bCAoo+^>O$C=z+rg#v&&zESRDn*o&-UiIWxphl7|r>i0jM=4>9chF zFb07YD+%t+Fn}&y%A5q6`5~iL4d6ZVYF(q?9s-tAYR#9beAy9ew?V77BNuPiG&CP0<9l zTHYjg&nA`bG@mJGg&Htrhg^E{>$V`5BYgz%L2=r3Po6trZay9bgS#h5#^0yLKc6xr z&fOdLZo#I`EaX#7?-6+?*@3PFCV2^x74!hO@Qxl_kPdH>Tinh+-P!`9gB#vCiD+;( z59v+VDaV5pstJnm2n#zB!W*nHI^vwsb0)ErMtqTaF|pZ;0wb$UU(pEl0)TxMuBrDd za!r(D@d^Sgt&tF&P|D?AzNedKb_d0?52@)KYgV8X#=yWr)EP( zCLGBpx{ER>tBUXH46RHOTUs8vCoA1QL0zA8CMDfJA?g0fuEv_Y|G}9P`Qfrz-dNnYTt0R22haWB2PaOhm6PS+Mrb%O zk_fGZlG(Z4yZ7uKpACg1okCqz*tu_#2V-Y7-z&zawL~nL9-qn+yELtxz4&ZB?>~2O zWo>hvd@=2F2~?5I;$>=bQN54?W7cPrs+gfM6miSES=#5QQ-}&*%hR%tcp*dQT~bbq zW*K5(s6|BHm7va0p+++vGZdl?h{?MO(!w(k56DZ^GFkg|Y)11R7tSv)R}Fmq77C?(KlY;xJDZ?bZnR2`K7W8_f9auAI-N|=vWuEIjWKdP zYNeJI*IIPjSzV>jko1@ihei8Wg`eaEYLJx1>l>Sjh#x5SM@ zk8pj3rm9hzwk6Yfu3K7l(=eLr5VkedAgG?;>YQ?@VaeO*w^b~ypu9-oq_7%Mn)tM| zp%A5t$w(`ekYq)jr>Sr4gb9|=GXDd^$wM*@(+Ds*sI%Vio;cF69^+Zk7Dq`glXvbKlS!byT$ zlPhE-BaE3ld=b1g?wHxN_P(Ko^qDNnZ=hu@tLZy5Kb@~4R1k_$K`6{0fpJ-%z6)*X zQM@Prt9Vb2{jOQQboMJh)p~#H)vf(fFt0V#EHuB_{7Zhm*(}(5IP&V&uZF&I_7aNo z*!2BBrG1z(rQefse6(zh>Nn|k@pF?NwfAu3>)J=m`=`f3*0EzB`Ehl!zwSMq|0`!# zQ`7hVblt7pIRVBf|5b@MN+pZi%gkEj_+SyEz{r@U0Zo(v5o z7uAre2e=9c2~U;4R3~u`Ix<5g#@vY|9|*w(Lz&@pnp_hphKf6)T99t=G$W@gJjJ3^ zaH8E%Ml~bC+$~eDjC74@3YXBTIUEUc9_pDlTh(IA@D*zGiVjBZ%nWhX5Xb1YS1GHL zUUp83wn`;D8gi>|r?;?k0?9QklO82aeJaz`D3l#do$sM=a3lx4qTA zB^eGG54QGGi8Zx%$}>?kRXPj9B4cJBlfArFI|PX2C0X0XosDvVF2?81pQpO~ne*rA z;aDh?>OOjCM`^OXBb(hZH8o8)7oApSG4dTlBt6E0bZsDmxL#;BM{1=?3B!p?9@fgW zasMSfT)3>?d9wRt@$R#QeRO0f$k$4TdHJ|m^G7*7Y)@-uGa49f*31CsFO@EH!b|?~ zS~)PBfAdeN+vDn`RGd8T{qM3GhtwwTX^)tCE)VuzJtog{alcP$H>OhZX!`Sa*6K9y zEv)`O?7exMB-d5v8xffq5xK9mS9NDscUPCxEzw$AmL-)W%f@~PV?Kj{0ec1vW@eaS zH#{=~xU!&>b1Jo-1p3Q-*Y3f zHg&gJw*DKUDl=ofapT6l=brOBTT#Ay9Y7ir4|Jkj6LgZCOubrPBMKCOUiAP~4ialJ zLX$=fjflCnS#CtNra34pzO$^tE&jc>T@xfBqF?&9^1A?)e(B9?0_!QK|35FKMYfip)bsdHyIKI`TK}dNYtq?eJV=ev`jjeBk?8)&H*07 z$}t?5d}7$KY^)M=m8C{HygiLJ;rr;DWS}B&q1CGy(O!%6XswJm?^Y$g~ z@4@O_{#%;+hxjYwFE|)WYSc1pLqsfG7-4#1E@$lfLmbEJW{1JI z_^{@FQq!OO#7z-~AH!6xkReI$CoZ52Rh5{G==F?NbqNOtH;Ldk|KuY#xg_@1TUEj{ z_6R6Sd}dafRU++%u&KcJ-i%62U>@5dn>Wtu(GYuk>QWgDlKGe*y^`0w!?|Rt2#~v; zHjhLk?X4XR5pOYI5+Ih`)Q;||_U+l`j@g0^)YoY+->0UmI7mosfLmaCgeA6WDH z8kjs0nJupmq*NbJJv1UY7wH0zU!?rVxe9h0aKK2FuFOQSQj-Nu+uOZ=JFSk z(JpEMnKxM9J}b;0l4jxM60o?=rzy51a*E))VLAc-;jpkh1z<>m!}GN;O81d)mRv~+ z@qoNn=$EVaI(t+ZB-bX^F+6HOijXqoCrq5s!Zm}t)j5ZYky9y?7|8+953Z78rJ#V> zcPV&&j+Ym*NDN8x_jr;-8p(K!b(??*L_5UXtj&x?gw=ATBDp<^Bs?d2HX)AMM9&s_ zpX);a;J1jsk0Z1TOxtC5;U=EImE0w?3{NLM__#BZIgWe+^r;3RqG4OKK(!wuY61{n zKqVOclerx=PzG;|BEJUkgJ+!9)opRJC7+SU+CHpAM@rzmkl6eGxWPzfbG`rskrt_`?|@WfCz0(2If?>S85D zC^>Ls$Ry=!P(`sADll=gf{KN?t?xXn>5pjohc)-fPY(OnxIrt#C}b=$)cS@{4v(&~ zqtg>bkAD|;@z=TT4{t)J;~Ej(Q7o2#A0X0OjMpX^`QTl7+STD0uDK}98 z>CT^U@vq**`59tJM&k)`v(O#-B%y@jmeyA{HW)0#7p+z*&|jXyh$K|%5$L%Wf#S#D zk3R|DDDhwZU-;wShChBHZ(M(!0@Z}4XU_MSf$c2SV137sIO=gqsZ0(w2|mf%!6&VG zY*KeS^K%{Pb`~*3lwH}*jNEXgyvR0A zLz_7$R6{*`EO3PWzrWy zCd-c3X6wQpaHL-tQmldE3^aF(FDT^by*^LSvSKo)x2n2T$ja$*wmvu+9-@%nVj-Xu z0ZJCW!{Q1x`?@Xb=9{DvRAo?Q;V-?KN#(p%@34rE-mB(!{>I%zmpn>4XzqaM?jWvH zTf`L_;StyEv~>vb>5=mKb{eXE(?pc4Djqc)z63dRE=vxD8g3Hgi;zR1Ya?5PZ6{qr z?iHWBr;rIjcJyD(>-uBJgfoook0BF&8kz8u$b_HPEd4FWgg*na^J!$l-&8W;r{6#% z^(H;u_?A6e`_8aeg$Gh+0!v9bG{ciUBKmNlPzVO9E-}!If{qA@F`yaT8s7Pxc zf3y2@gjkoq?{VMhzT5p-_ZKEU_%yhM`DcIpnLqmN-+27vpZe`DH8nFkcH_;jfBo&J zn8!ao^7!L}oi`nO{p)Xi_K*I@&C>FtYuwQjs^Q zn|`nR@4TCa{hNONcYfn@rH$WP^Pf0&gTye?~qu5 z53ZMfx&1o12;p&afMv7U`8iYO`H+eBwh!0Fgh{jyxDl~cX5uFSt}DqY3^KlV)l}PQ z8X+bGmnoA8OY4yJf%9cnFXUCS1rr{G8BAvPK0(*W-i|FRIZr#mP~&xdcM&a6i8cEp&}!nI7DnyHiJ;0loVp7ZBCozdH%ux#7I?KBgko zGG43DYC><+qQ>Z8!`riUsx-NbQzb@vCrP94IGqjk7B(AH4$E2FPBRQ?vkVXkO#J5+-=tTQWW zq`i*Cv{tuRuGU0;C5tg>B!Z<1xS|z>5gks%V_{P3)KSK!5)%EH|5`0NR}rS!yDiC# zH1hj+Hznvl`M8OXuz6Fe(5h4#gDPv?N}O6i0Hm<6(Qk5)owMV^?IbnmT}njkq!GMP>UG~9HxOfEN+jfEN;8>L!ljaY0NXOepypmM!b+9!d za!5acjg6}>*d*7Isoo07WD*c_z=d(yCkyEUCHXWn*P)-_W2caxT>xi9mryF2VNWg*H45V})x8dw zLk(UiKun^()-A1FxUjTzPUP!P?^W^9Hg}#c)yNIc?Q5$Py;f=T3zOU}G&+_>oEJ=h z@`Gd@l3ONYHkmg38<^qIQ7JGaQ%Bb=jOlul38fC8(4~JsS}Q;{ES;Vc4GPvmCUu6B zULbXZg$QXe$@Cl%*>3Re*QU@<&8F_xNRP}d13v` zi4!Nzte3hV`kEUE*Q%sU72%2yeYQP3bztV;!TlprV6Z2sMd7N@#MFU<2M-Mj@24-z$RSdsHQPOz-AIXu~#|n{!9*uIq$TAZ(>PF}M50 z_ey9k?@8r_bDTwH9e>r^0e7PI@}(NqJH z6mGYxQ6RHW(13^PWjKSN&Ac@Tg)FAonX@<~dCE;>cvOtQjI;@SnM5rRmJ85H%4M*H zNj}Ltwb&y03iG@wp(cTw~VcF zy^EZu z-st%Hz~9RUw9kX7{3iN9$?f?2;2nR640P<~Z&Fs6zln$ZCYb)4ze(4sITt=(jyZF(YHSw65sEQ|>)GUOUGLPL z>@CH@;KJdK47hT7T1D59VHl{&n&K=eH7-| zwNHHdi!~>A@Y{|Zd)?YI zUs1rv_XB+V&=1^fFFyI?`wwmdF>diei~&sX&hNTGz!49oc#HcMg^m0u*vQZ8AAH&g zJolx~e(Emwzq)S;%pQCDyWhN7D*-(o7tllh*{c`d^}`-blD@@MEBuEn{yfTxB*ymo zo;sws7Ig}f?Ituan0Gmo64Z(6GS=Ww=D;H=&wRz~GN&+LVLzF7w!sw@5H`UOwoy1z ziDpvaRUeLs2_c8p3#liSUPi$dKn_eDk}$Xv>X-@_Nlu(zW;zXow6$|ft5E1Ij3Nu5 zwTl|U`d8~4u>k~;C$|=t2v%VxEP*OIZ5LZpl7_*&qkB62(?3O9DbB+OdAxSm^)1YZ zH05Bouq)nG?AhEaM|W(nIoK9yf=ya(A9QgqwQ6}VLNW#o-c5DqNM_d2cH$L{?sFG9 zz;{qgtN=Dq1&IKl#QpMG)q^3L$h^^V9ri%dh1Y`3`MG+vG?I-+q4<~@2ZF;{MbvkI z4d>6V03YlCC!+CmV5kK!qFoDwu!(ITq{lqWp%VmzP?$py2c`N_1!2aD)|N(o>Awke z8#KnC4P@8mvdQg9)2cbuG{$~eY05XHrh4YvP0x43|e(6 zJTe@&;}#4dVk6v9kX(6<)#5*u>*W@Veh;$<2z#%GEdUyb*T>`L-0Qxm(1Hu7ilF); z-D7VAvt|avaRC<+t?EXldT!Zp>*Z<_KmlH&ZIxc!A{mhs~f#%?+}4-pvFT4-{TeeIv_DBKWmb6gL*LmE?E%cjwJ zWHKY%JC=y@m@zwZXhu{&7+Y~5o9(7!8$a@{mo<&wR30XYdO;f8QcZ}vy;{UuWv~od zdaym{=IS-c`P{jXEB*7|Wx}Co5?S5`E?6yY^eVMN1Vo{=enCqFVvz!oVZ);fHzg0> z;Fh!;+@1#&tgV10de}ldjIK|x1q*N?lPT4DwesppV?9&KEMyW>Pd&4;K>}iI;Q<;N z)pHvQVGxB4(6;z!Y9SEFW^Cui#?oZM)qo}hC=e~z>Ht~D42x z8><`XYo3Az<0F9vKevS<3@`(7EQ(~`?SukuL56(5k@Ux89qaeepuyV1S@wIax=?c1 zaTKowf?#h!2m{0*5HSiqWB@`4pV{v&<~scr9VrkQp2|;8Pv@s5$Hzu2DMhgt?&p-eC>GLb)YQ3u-Pk~$uq>4m>>}}AO zyFt(aK?nla;}>RJHxdd;(n5d?DLI~MRt>#pB$BY%>i`3I$RegoStwCSemX2|ht^~i zSV2@k(zko`%z|J8BJYS4V}{(qupStnFcG6Fm1MFH%mXTj@UGhG+Du&QxtmadlII7w zKwC7)f(ulNNdmtibH#W4^S20p*{md^ zQb7*6M9Pn0BQ-z*NHVIf9tin@7+^CJ3bzY~6wCkU)e0(qVSO7ZvSNQg!39Lj|kbSl(0Qx zG7#y#*_OHpxku*rM1H|TGyw+&=m5Pll+4BgHM%6QAnl<G_aL6FTLMwcAWUx z^JmVS-^gY6?Aen|h9RL=JfTJb=#de^CrZTmGoCmbH2<`%Q;(igRVJGf06VfSS5hZWuM&BP)JjLQ-ATf1r;{g$@ zVG8aG#eu#@Qx76`lcDgTpyCXiQJ-WAl@u~X$B-|;paR^W7{+0F5EqKK1-BLmmM&z^ zqntFYM-YVu3U0+Qp;=NVwxNddo>>rPwn(B}FZWY)(HRvS3nHY5pg;&hdQc(&Hy-S@ znSJQrpar-EBc^}gIhmhWX3hVSw=7ZX=$`s8t?uWvGsn}j zliDZV;QmnmueAI1JLkuq|J_gh@mcMbNfcUt{Hfo4UOV(7KmI-6&4pKG-heRvg!Z@E zZn{i(iR|*vRE%f{1Zb52bkY;r+Y&dQ7Wmpml zJyYccgQUJ=wF^ToVs$7-dF|F_sj{on2{~dJBr>nRcq@X@OS|$BIyX4XV32+OpK%MS z>q@oWXlQV4G1e=UCi8)dnRi4BN7$j%>-8SmX$}h9*AeY^B|d*FI+;(zBH;`dCi0U} ztxZr@WKr^qBE%%f>^>&4}BVp#st3opEI z^3A!xCT2!rRJU%bnYH4YCb-h?bIp_peS36elp>Veq5-|m$R2b4@h%x;NAz(0#_JVKZ(urTS z-G~TU$%wgNn7Q12^TFEbmzG)&PPdj`I$hI(nep*ajt`9Tit-3xKO?)`v zian#3^jO2DvYJX(;56)2#;X!ZJqo5_WaS6jD^X9}e?>g(rTI$LR>m{lEGC{q{rUT7k&KEf4< zny?=XJ!YRfR}p^TcrBoPfLh>t&iWd30J z8_&G3Qf{E=5`)K;7oPb>S&K|ek5R_>6-3NzUcO!^>f1}l{H1PmRr_a?HH0N_7g8A7#uBOVyq^T~WbLu} zxsYvRGLA?iC-sa-G-<&+V7pD93P*7*Ky8Z{C^opNq)vP70?LzfOUvg<)_%u@nwNEsK)s~OU zav|Tj|p|>%`!J zJ%d-K3=TqzC`U)6WEMg^;TNrxx}+cIUw3qX&~ba1dJ(9knyRX7%WN*|2pqB#!QMEE z3JmiN!TUrT#(PD%>UQYsY#LUG))BT;6lH80ZL2*$QZ5S8(!h|TSk|!M!I;E0F`+ID zaZLzup-pIqfQ1T!3yih)7#=(&5{P0ApkY%$;PeD2MlOoUVqq59A-iWtU-jM}vmwXB zHsffEpnFvQBlC0J@>-cL7qAjyFYIk$^ENz0X}RIqqu0%(5@F``F8AtUXJxk`GBmx| z3}AR{VPpFsd!-oX91TmB)(q#at#3p%Zq%>1w@j${X#7ybR)C0G2^CJBkj+ z5iEqkq(ZUD{6sbpVcKBAPGl$YlQFHizM_cYMrCQaSnHyu^az7`o^;oMd$WUan@VnM z1UIN><}uHY?q`_6e~}sdA!hI&r5%4B&fv$HvF%W(dj5j6NMY2U;(*aqXNEga%^3-O z@a5B8wzhO`eRBpQT?Gc@{Q^Evbb54-$iv;<2huKt+Mgu{^Vy*pnavc)D;?SILUbMJ z<9yR~)Sod^>BQr`dXE_?8W!-gfdZ*f(`sU^B{p6DTs0GjFd5nDc(8{3_sC2lH2(vrZxccmJmP^lLLlJGXU$j~S4NLZhh9J?0ETdD z6+?QxAfwxOC<9x)d7Y3JFbijTpP~nfLUD}(RybYWEy+4Pny}B3)Jo6+>=;GJg91pk zG}FR9#UldyTtGlvQW()t5f>zoKu4hfb%FwTqh8s_3TH|HS?$C0>krYd|NTWc(*-!w z`~DB&Oc%d(Mie6>7*Xfju6>n^=e4hr-JHMX)iIgZjgAh917|9R7jqSwy0IblUCVf{ z)f;*|5{YMrM>Ub#JU?p8s}@q7hH#PRPWk~r^3iXdlMH#BMs z{up!Ow=*Yx54_&@Un#Hm;rT0K?GO{4smaT-a+8;3;3hB2wgvL};fQk;0vpu({7WZa zM6-$XRB38f9CkdD8P3B@;{t$%0gRR%a;}5Oze>*RqKsH<2P5WuDF2GQmvg1O*5Z}1 zR=6|kWGEEAN%6_Te(hqVCN9TBO(&9=+r<^pZslgIO)2XSA3O zG=%q&rTq_j%^&0qJ*GwVG??DK-{F%WkNRBXn|fYs0SrQIAV8ly4`@{=VCr}2)9w#w z|J^aJ|L%9aT`OQR^GR(HC*tI!jFg*xJZdjdnB@0B<-{C!7Ea%X(}v)bE# zOtNQuC)NMF#Gmp1YT6m?&-yR8HxYvLx97D_ym^2aYTw|@BHmG-3`YL>Z7+WOPB;3U z?%VWH{om*x;xDG1*Zy4n{eyOb^Zw4b?)V?w?fz8%3;hja{`kyY+V5)58#90XnK$FD zbThU4M*pwe5NqG*zSnsF^Y4GB`(F30Y=)@z7y93DhgmnoLd_ssbW(&XI?2_N~-~)Ie;&PqYed8`)t9WK~c7VX@~S){|+f(v{_1b zD&Sc_msZ3?$Y>(KE10qm{)A|U4o~ypP7F*@O=!x?J!E2qxmkOuj^GGX-K!a!YDFE8 z8?i{7Nm*_d!~gh8mAy$MWI)P(HRFcG_h$f3w%m-zUN#$AT49&K1vx$|p9 z$$=JDTq6mC>U%a#ps>~z-=@y?DGlz-7w)Xs)xmxk8u)+1w!E*YuDD+ z8knn~vcW35>jK${)3}7Q6^C)p8X5JDw}^EzC@5gV;vC_70JoG)1Cf0j^vx)~Cgg!- z31WiANa$Kwe%h zHyi4A6);^u7;merFhy*~t-#`3JDml}PUCTg%>>pVZX;reDiph=3?4kJb;5wE!>I^J zD6Ut-LqkK^bSB&sfR?k=!E9QiKRI(lqxAnKUWo{2;ZV1!rSQdR_Dq7s=t#?@P^j0e z7uV0N7ug%yC;={Xi9S(MqsuNe<^tj5$oMF?%VTkpi8j$sgvDIN)uoiMJv^Ks=t5n_ zVSf!sgf`Y1b|w`iWQ)|s#2G}h6T^;iE)jN)ZqCdnPcs+i^W($1H#7V5u|GSjSsP2B z_2Ob~3}k$CbU2regk8{F5dLzlyKvnWf;%Na98aFTpv1bB4e>Io;u;2mFA=f`m?b)t zp`_^?i=VqtEcT>l(P>PAm4vgYK(n;6>^3@qhyZ{I;5OIf?M4#0At3u$CYQ|)EzVU4 za%x*3C}3)~Lh1mffD5zGekNAO25A0Gh{WQd;cwrY#H z?19OMK+QhV{6YoC9-YuAi@KRy#P+0A>1olay`z?sc8jrnUL?5;_#mMC1&n^NQ z$~5Vl@vt?Rb%aS(C*49v?zU4Tt_dnE+H9aC6(z0$p#kH9=o=6@z^pNIZTcuR1iiUW zu1vK{mR41mbVA4X5r_)X1W4st{bmDYwdP~j;JyWua)?BUWk)14EZvj{AfD33K3`Nc zuU;>c)M-`eWM~YfjO>r)Nb!_R;uyGSSAt)Bx=z(=<5P7^hD|r4-ONQ zTc=C(0`}ru@#HyzUBxmS z(Oa>s_XrYS!NZtk<$MXBR$4RG=urjTwF8|-m3kZ~H9A%lbzGwx5YWszerMN~M-jRNlh&Lx{di0hpd% zI6e9D>A~59@uXVBKqCXmQ#iXdGyvcih*@MdZK3E|*SX4^@D>?Dp#i}ivNq9oEtE(P z+f5QA(R0AWtM{kM=n+RJ3ZLTeN$N7Q_xE z6(Bp_p~{A(7qpuM6WR{P7c|4!yGLG^(zFS6<7A)M4J5`rZI}E4pzC1|UbigB9zOCu z@?PJQiZW2NP#Df$uyxIVxRr~pyNTKKjKEeel8iqi~WqtFLb`YV`$P%mQd5evW!!4~jru zG1gB?p@P}00Y8JT4^1fV#QdKl2s+&jrl%TyO^9!e20CH+a^}#>_Uo%FrKXDf&_**_ zEj96}70VK21_DA8)JVhGmIFAjbGkhEa`TBG4yb zVyoL>)(wZz(kmxWd_W7?$w(tS8%|6l!m}A|Soq>@H`z69q#+_WWHa$7Yyh(<)|W#g zIrd<9FMh4??m`x`*=D41Hn_ap;G?Y{Z=a^0-=H3sl9t`gyBNelm!J%Q5te zK7eV7QCr$BOfvaYtLrNprBbD3M5DN_#ZXJtkZ5527qVY^YJKTzOV2%Xdg-}yD<_wh zodctZLk|RO!%< zPArW^PDLX1)p{gyN>3JxbUgWTj8>)n$Vk7m+zMpIfUk4YGkfCX1wXSyNGeL|);8L1 zG&z+Z99(T_nI5?`I@9lGGQeAzOhwPv>#^Zjy`FcXl{#~GIFqI`y9;{HT?pYE%Udm6 z4Y5baA^{4Daj_rJ$x?zIMw7@8rrVB%H^+xtm{ddyzL5BG^kke0ZTcRMh2er}K0a5e z*U;XYI43GImRbWLpherS@cc{X&#qP)N(LmDL<^Q@4q;_fti9mt^BKUl4_aDAeZ zBA^i>0M4n!TT;_8caS)U7%7Yr+kpwdE3q?HndE!cT}nJoHTLKpGsv z$D5Ig;cUy+m{aX!j#q0)*2y7LL^eyA@IanGhQY)9mo0w*)A!S7(QD6rN zd%?jj;WSF6Do1GGUL;KHMgrtPP2Cqyu2yOXfo}plHVhW?YP(7Bw`#3Q*-|(3YID`WNC$ZU@IcAmL5;86+6LLIz@y~5m$R|Va^H%^=^~#QFSe7n=Xb$ zEh4gm7rA}ha$py+aB5a75xPQoZM|F;3twzN306>p@?|UidP~|e5mN#Kwkx!nzEb(% zNT=CeSwZX01lg?gm5d~0D6o*iBNi|P=O>YzLhWqygJX;q%=moeIzb+IMGfSdXe#~q z?Jc({#Byt?>UL}63=eVtG0sGyHn%P!@K3ysRAb&tUDMq$Z4T$zTv(0{Kru zc+j*X$Xf_ql75DPFE5HtCTgAnoJZdXGhhM+f?KG7ac5x;YDPQ`0X39-Ma)`Y6C^Jt z8VP2|c)*0Z511n3gx8PrcAHQteLe)B?)N}K`c05XXWe;UG26ituB!x#2iNvS}6X`@cZW*!E|2qHx_>RUV1X#C_|nK9mN20#aA6KR(y2_wiZG z3=M@u0F6g8DUS3*5h8VmV9r^Ll%t$Z1ZI&Rvz~C||2s?s*O#Pw^5PVz8nR_KNzm3X!?2F=G6a%9; z7=v$Tu3T|pV*mwBl8Xp0lZNJtql(yoYIWun0!Nr4#RnA+qnH?@gj;DQQU}PN8m@CxuZu8Du!fq|H0W=VM_K-O-$z}#tuyGz53|Uqc>iE&EeUZ zgLL58S;dklp2TNLgex&psToIy)LwUKQhRAWMCj;sm!_kaWIH0tYS^QV3$(a%2)e4= zIY3ewI;cAoJ?MEPQPD(26hj5*Z|J@`h@px#X&=SzbaC&Ue4N1|9z0ZeAqFQo{6=8-i;*A!v%C>!6-9MPme zvI&X+oIr$OXdJSo&;T*!M2)1pAS5U&S;2(3DeC5vH=%DlP|m{--of~J2RD2NH=8E(pbD99mf;t$tp<>0v+Epw#Z$Hw=NvAVgIwQl zFP$hBPb{_jloc$OW3ev$fMJf#&_PB`BNj__V=?D&@%U1^yZw})IXat4&5oKtCvu8c zT(`Y+yy%c%3i2E@K!J!ko0RENENk0% z!x4bS#vKj56u8puRo9x$wQ3LQ-Nb>)Ic(=*7>#Z_rQfTrHk*X@!sS^`@rpA7v7GJ9 zN42Ab{}1R1`p|PkXRzr*Z_h`t7L93d%UgPc$P5Yk(~st(+6VHcHkV8dtMFFp3ys3a z$na1)B>*9zJXm;Zyt+%DV+~GPxS8nM%xSGw6(|%xfOcKtk#B4)6Z%%ndY9MNi51O+ zudvc`MIz?cq1cOa*<3c0jM_{zsDo&4II%V2nt_kP-%EUwC_0uLLB%--*w{O#$VuuP zEifmJ!g5lSAauyijUrB4SQDW1>B8bSTf${QQ}Ev)__mGDD>EE98>u?*5n>-CFyYL# z>#Iv=&z!+kPrlDBojHAexu*Px&~X8F_d0Gr6@yqHEC4t1-NlF#44&|ASeK{g#8f$( z9?CI2XGSIu95@h7jZIDO-*e!=cy4U^(BZ>}?m%3eoy||&ftYw`dMr17;J}{!(^JGV zGP#}J79;Sv1r(ik4{bRn;OSa0Y^Q;?bjRSr86(ScxH(R(OB&h zNHG#lj8V*Q87Z8v-Zt2XSRQOCW9!UxWoytRn+Ko$#{l!-*_% z$cUJE@O;?sr;>yQOv2%36WL6{w0KIab#cNBhV%vG5{NWzH_a|i4h%UnxDbG=jm!;? zWD^{#mp7J|8t_X59UC4Q%|%STwtiu$p>~YKs>LdBF3;5OGIZgXWF`Pb0-D{K4%H;1RpN<^zRgj5FW6PHy)I-RON`FP1V~ATHBc*NT0kd zRHz~g04MWy)fO*ze9c=JWd54`tP}5jZEd{NMpYR{G3)k0$V-r!D3Q%gosB~?QbtI+ zf-tkHOHg(Y8)4b-7U?N7g2pE442dLBr)4E65+)0bFW)qcS|!3jq>ct)b*+V#Hylf6 zv$<5bQ(IfXNvKjI<&Y7kD`doeiOwSGEd^#F4I$)%5Gi&*cQlc}7BR+AD-Ooeljw5$ zyh=3CeRu~*h}!A~)W-LHFFb%M%==LfBz_Y7DXdIZyq!F#Je(4%{1x@2-iVP#;5@ZQ z&O1VEZNzH%$QQ7lJTZ?f;?RzrvbS&u)D^b^APe+ZsCEen#XJ{Pv6W%TZL|fjFn~#O zXd+r|i9}A1M+uA*5d@V8>vcTYWYF?lvQsd8tgyv^9Bl@KP^r0Ll!g(XnDfMUi8y_t zYiYnzH(PT=jhArs%m^|kNa*@_l-|mNsmA3;!XKh+QWC0Y7ge*PHJ11s%_cRIUwolD zod$8!*VnQ3BJ^ZweZ5kzY^*IWuf0@(`m7c!FNvyWgT3qPrHu^<0m9j3qelFQIrK3Cb#5Iy8>9Tpv5uvV( zORv+YK_ew2z|+Xmq0}x}lg|;snM&nS5gd~h=3HWemP!J137;bF?}U?}n^?Sb`^dSK zhL#x~9UmJTNfG6OtSH50329MnnTRu^;}dcKslK|pa$$L1@;1E(uJk={6r$AI=+wC7GYlzkMGTBc%5WWa>+jD z*uc9D7p9k=-qA992bXLsHh$<3SBih(z}Jw`17Fd=A2gN138(>u2QX$V!*!fIxlyc< zV5P`77LP>d*rwwn1N~*Ew`#?W!6n;@#YM8|SetGmnpx26!9sxOLy1Bl5v-RBdaz!| z5-wIu16E&Hs<#1AiTQ#XBe^cO{1UazlhfYG?fTLSg9}ulAt_W-{)>b_lLcUg@yjow z3(^q$5B@+XAn;hhEkwickHLmj0n-q}PC1!)G0@~P&UxACF1BZbOSTs)J|^=w3m6M# z!@%oVmZ;K8`FffjJ!b}jkXWBVR4lMCh^Z9730p)zhH=C%2)+zaL^SOJ zwW4f?&y=3fJ=75rUX^gjiW5}?ok5^DQ9KA0GAp#jnY*$AFJ0at$*Z$f;H7I0SP>7C z=c*2)*AHq$8eS`(fYB=!8@&^36fqA(=#vxNaDsZbTzJJ;r6B?~`dp)XNQ=TmCT4t& zawd_@CW&Z_Ovo9``yNNxDwmzP<9>mNh;5ktix!A2g(`1$8;44HibFl53Pk#ZMWsNm z=3un2s9Ke>OTwZ`&7C482uO$TQGmHevoZh#En=Mc~!it ze)ACMH4ElA6v(%{xLT{lE8+x6Sj+-bg}P<#$_l)6dAzIb1zx)5PB5Yvzc{)CIzBOw z%+OT5vygAsr=b1f1c#iCg7T6)FdElJ`mVKP;5QfZh>sWkd0 z=0TXu&Vt^qJ8!rf)m00sOj)8?@>l~atGv`hM%Kn16#*52UQQs=1+)#F6vPXx0FQ6hT;mYR zE5wU6p9fi!4KzW>`$1v{{kn-6F75-2sNetdhIvLS8%Ycx(T&I$lmR%{$%s=sWuIK;FT8CT zGh_@PDxVNlB<5J+z`+B1FD!5L*C42v-!f)+89l{DOWp-U?vj$cizlBByg+5<;#`%C zW6~4A{0bjFb-}r_Ctt{ojR%A4BuC>VdDoCk$&=O_l&EfQHrE1W(N92LJU{Oup)ZM^ z3_sHnk{A>b_Lg>iQkZnDSpz_bCWgoKuR$8cZNBc&GSLF36Jk3rv@9AHMpcRCQ4!6# znG%#8W0KO2L11}s-K|#xaeU=TwpQ7c?~{aYh8$$dp#tVPic6VQ`P&|K8l zX1q5>;|l^K=%YwIXmEtZhural@t*+F*p3JgO;$%)JR-SOjueAowA=--O$KAH7u`|Z zj4F@f1@1(87waFsl5u z`n=*4ah&laKE!=r;^Xaam-yOZ#zS{iPB9etxhC}?NyrIn=QgW`a z!LP6!l5{dx@;P*c=NWJNE)lwATJ%QqxBfdPJXXt%#lG3!?m`{$$t#xt`6J=Flksuvg>!e7* z>Nuo#hSA+`Zm=E^&$~F-p>1xiYNnGSYzro6)halM?VUj4%6P6Yvso7nreB%7kOPT~ z*{{Xvj_TMlAxX!6O@0e#-NY{QwfcRHiz`4z#D?JtK8L_D+gI{AbcN>yl|ASb;dkzX z#(fYP_dYnjLLTdA>_JDc2aV*z{94*yL-RfW%^SfUbOd|QCqHH5ulHr``uD!~z0Q-L z)@OghQzXHP2So zo?CMz6BUwR8}}iwAL3_uAC(*`p4GE6vL}8>+ZV5B*_o_&n3GNR%b$0}A&$liVgCe5 zx@vY;lURN|sL`$liRV*^@myFkQ`&Z~Ng@W;8eW)y3MkI0=FYiH{%iFm08xb0L(6UY%S?cIQ zDpF^)6>5~+h$eCDA_ZdGwPkxD&WhP=S?XXtLVtltfHQ(nNq_0|Ffi;avK#qap>P%1 z9k&;BJH8k&NY}J5kNSrbHu)zx0rm`0a&hhszd89)lw$Bq{Av_Wv*`_}bWv^f04QZU^?+L+u%DU)V*h|7tb-6k_EV3|Wk^F65Eu|3d zb#V2zv(?^fj!+v}uu%}ER4T`7ku5%SM{mD6&eoBf70Hrv2-|OXCDdW&+%+W>^?C$YBb&=t{eQ4X8L;K*);d-gTdT{4hz0^pZIk3aIw+71O%f`u$F=B6y5ij4xG&9l9F;BjWp8qc9$seZYXP|m`*YgSUv9zCNB)p4x zGQ&KX(M;RAm0HW6_Lp~w|APLPcY71%-FK>uyVRU{_g}Jg@PPM#!lo+Hz?Z)!Z6qAN z{2gHMU_2cngM)7C1WwS~?6I-Xm2o73kchSiIw2hNbWXw@x1pIX`WE(J8Y~kg3CGoW zT3)G0)-@vkd8!d@jZAp{wzi>#GY?1VFvAdcnC-};c{z>45@J$avaY2$E#s>FdM50C zfY5?W2L3gVYI!m73E*sJLr!G9X9aPP4z^`GU}JRfa72Z6)D(p9XrA4+84$}qJUV5) z*9cg>7Db?|4>a1n4@ALFwZS!y67dp4AB|*$1Ybk|sMlS)RmRD@T`+;M;RwnPMVf^2c)yAP7`)#7-o(Vr0T0iV0|EBdBq10hM8)mf zkCiXS)J&p>uyd7l*~2+_S$n5xd8IPp8RS>3gCo;V)i%G~22IcO3+adB={}m5(>Sd8 zr?cLa({+D;SN}ki^9V!lUGu1AC6iXGRBGYE=KtW6&^A*k)AD}WMKxdiAfx6@n$Abl z-U!q7{fv?~X&}RsmuM1?gil_!t506Gi@$QuzJkvD=qvZ$E9kI~zH$$J zUK+n4Z4#^8Nvv}B=EMA2c#Q|yZ?GQaW9IjY7%R(wD;)ePwh+$HwqD2Fpt#Jx@VLys zK-c<7{@x&5=3l(Q<1*jy7e1GHnbQ1ngv$(d8XM_w4TLdF+HTzQOVK3yzGS;JV2HE> z#bzYaHTkQTo2iJ2rpJtQo8@|{Q${s|Vu%zQ`rc}ynh54ryNR|r+FmM~W;-!jTxtia zr{Xx!_Pcv?!R{*ORJ*Bh`&=_vJXZ`hyXI($<5h7q6Fz~*zepP-h&p9V;^F}VX4}gf zy;jg3PWLvJTf=rR9RNSkC*_Eo!Ok8#hdCk0iOY?i4d)c8^H&&!Qw&slF|!r0+Ep{w zYsrHOM?JrXVES^7-Khnm-DW5nYIf~lt;2Cs0IIFlSGrkg98A-^HrjSf8Uyu-VR=8W zYfnU7F)tu|1TwwhJb`VxzwUPH&h|?|P5@2}%lqkf_D^53ODL6qFq7uA@Q|S}4T<6n z6WTuUx$F)K5e)ipQl|45{b@VcX&62JLa^logTmnwQ)?^Kl)%ksnslSL*KC=sem!Ee z0=;S=MmFF;t7^vreQ6;IZ$)_U;ux2hU>7M@QOxxf^kAa+Fal8<9cSg!zmHMK9dZ#Ew{ zxI7q(Fv~Ov363o?UR9#v!X4VOMaiD?&j&dOcKuR%sX1~y_r*|(+-I55Or+H;tru}r z2Ljd6uwPim5SMjc!K7uQS8^XE>#be>+u9;4e>zp%k+SjMhCFf%Ama0vNa>IP4KEUsI` z!BQ?};x)jqh+_&Z*>&;Brx|tG(_THhu6e=6l5tb^nAoDAIZcGM4brg4o?vPu*(1kJ#!7;`D+6!h;HV1O8UR?BiYs4x+M6!~ml zckjRvM|`Jo^Fy0L#w*-J$Oc1x2T)9^gOLF?>Ol4$A}K{|U+>RhLm+8W?m2)d=$i54{17IY7#n9r%obbD%Rj7WIlMYj~xKKPqV! z4D}lE?UndJwpLxQs@E7yWMUfbCFsD3SRm(M{v^h#jkd<<4|=v>k1_vBB=-BkZtjP? zJx1$22A#$_2ueqFxwl6#v6^6=R;u91Csb2xTbe4}jTnCqXs4vVk!?J!6*0y2QV~vd zsYg6<<)!(hFt?`&D4L^Q&A)JyjBaj|=vqo&{I+X1`>dC|_lTXd9|L3|akO+uQ8}?y(hWuFl5wo0 zWj2T0JutFG?i3S3pI3yl=iL0NX`D~u=!hPPb7roTh>cu|h+*?2V;curI6!ZFON0oe zW*Cfd(cpM!KZw6l&&fzvngO;=f9O+^8s(mbLXC6^5EtRC(awEz)4xzD6Xe>>?T|-9 z7Uy2|K;JdaO+iZ;k#yl#JCt{gWPI@iYF+ejv{Cq_Z)e=SiE;NP_@!fvyWN_GH}MeP z&N%cn4caH}BAfLO8GobQA=2Ix&Tj^9MmK-+;`}5-WBVWkQs*tSLz26!)p_WE48zT# z#5$Y|BhQr>4~RE>$>IzTDTAXe=0mLo^r10p?6B|^XTNr~Ikd8@4Ohx2!H3MT!()|a z55>b1*G$CYM#Uh9S|$FnQeYm0UmL2mTa{EX*yTm)D?`JP`ZCG^ZRq5)Cth4Co;>-& zH;zAh{P?M2@zm+1lg9%x?>cZd^}2YH+#OXv#tJPdx?ScCD?l;9V zg2nlSiE9%5!lrE`97%BT6Xwt`t-id%o*F8P8hcijQFaUuu_r>zln8rHzgW_e`=;2F zo}HadFV3g8cT3jcQWnVAN+KrIwhtZH(bsrOFmcl7C6lOR?(r69s@kir45pC82=r#$`XdTMq({bzn?SO4%khC^1TogKsP5zerB<-P_; zUOVC9AWm^-SYG_7}}7_TDhwP~IDU zXzSGyAhXqcXnttdEASiN8Q$IaeycmfyPMl@XRg@Q&VB4E6$CpX87VHD0tQQjN%T*Jucs#Y-HLJm30X3~gSqc#0lBKl^XXMfgYfEQF zCr7d)lcU+9RGP)vFD#m@VW8WFk4Pmkl|^0G!qz0(#=Bnr9rcW{ShJ}oqdobJCJ7uB zsFi8~x3pQWV5VHoh}w;VQBk=?%x0Ghbig81zl03q-}#hYtvbK+Dc!c^JD(q{tNMzJ z8Ztum;Fq9i1ot4ef=qKP&i+;~*rLB11R4#9V2i2{E7Fi5um&>&p&Z=4vp<p8oCmAo%O%?70nvA`bnRv1+^C@_xSj;PgHv$0`xWV=I}n*fQ{C zlj%$3-+d+#GV0}azgd;Rt&49gymVD@B`zlK0exR2!DtO82-uMzdIuR6n@d>F3v%o?cpi{;AcCW`9q=xv?4vURc{$S>2c4c>{$cs2eDV0pUHE4t7&byJ(UW zumE{n?-zMB4|89S}uduE}%+(XR8_SR*koee55)j*& z3o93La*{=13NEm`A0uFiqYjLuZh1en$`cYOS=Sfv_y%%iksy1rI7I9e0g)(A-jCa# z7~fTUL6vmfhNc9J@g9LWm>zN8SEL7neIolX*CMEncUmG-VxUfZ5Vz9~1Y^oq8^T zmeKXP$;YVV*Q(zB!^ZuUeK^#@tanIFS?NmxtyZ1za6OBND-pIly9Sy{f2%Q+*% zI~xHgOsZ`MhA+{9hA+{1cDLr%!-tJa_nNUw_n3L{;hv@^OfySePfxgpo-oZUbz|O0 zCA~g5=ndo$@DR@d@)_zRJ=}7DUv@%C4_h2yjFotDLhmN>3H`kHOTgR_;T?vD)9HZ$ z&@zEwWYz&*0J&RUK6}=Q5Fh^J>bY~|J8mv&1tRkb!zW>V2o_+Pc){GKT3+^QtE-D! z>|k=6-Gi`%fux7=4DcP2UXBbPnE|scf|jg1^A?z=(JHp$g{aDuE9)SrNMWzKokD$O zlBJQy&TA*5t#DqG92#Cbt@eHV)yR77l-j4-sgszd)wGd(o_0#dwzX4@Q2E65Qth-- zS~=&n)5^Kk(pEc#8k_B8V*%y2Q@HK5liBLn(q$cKCp`B&*vzGMq@7%HVk=Bce*Jce z=v(GOVRw5wHMiO+(AwD6PC{93l>P+Qa~)jIjnbdsdPcUSP8tPCvO$W8+(@eEj11&W zX&qS~mBWOvc1AW0(bj1uWQ;iPh?o$2oe_P4+&O%tz2x_$^XGM)5Y&!pIpJfMH@p_R zkg@Fyfu^1LBt1;}mfvRDRgO_y-tQDpwRwF@+N_`tPZk142@~xERAbqLW-|+<5hfnA zGqQ<7&}gzABEDRm;LjWp!$m$QRusZel`SmS9M$iMx8JsZA^+4L_~!oz z#M;L3~co$`+gjo>{h(04$jxK5#BA*lWlaCt&sOaMcAfaa48lemWL^&zw zoi=^~a)MAR?^KWslYlyXPVaOjHf9?wnfL(e0YF1_dqrFQS%zC9$)h4wS`2n>RnRg< z1~hM=RngqD{f(vQcp(jEL6Q&Rnux_DAv97Za>9gXG3kAaB4&KNcK&?*TvTM@g&3)9 z63Sk3ty1qT+;Z&VwUIh7uX_NyUmaSXp?Cr;Z;_&K|!0rdvj|r=B{e9eb(Ns$N*{g~n5nq1O6RH6;Nri(P(3 z6F5CtZgga9^yra8`zQ3$aqtssSpOl7`_B1nwp)2 zFj~!WAxDnoFd6RKEnXo>O|j2hD|Ly?Ge4}XGtqybhDumX2);cul*ly;gyAC{!`eD# zm0sovNr9p14;)gVYF!i}zJ~$PC%~-G9?(KW{UZnw-hXWZxLagx;y|~*m_*Y|%mj|1 zcR=0MrGM-9UnQ8c!sjJyj4EwVCZ3O=Vt9IXddSq2pfbI5dW$KyM|z2718*zNAoyR? z`AABSO-xM0jr8b{ttn*betIeO?@NS3Y^AmSA`u4Nko{mnC-(F@aebRccxWWicOFX% z5~W4Q#>OIPtZt(e@POvNUylVI5cd`R!MJY3vI#;HLc;XMod6+OyBT_`>p{Ra>c%f_u5Pm^|NJ{?Zr!kwIM4 zg6XML*O5|%N7f~(H%b+UqysGZoO%R^ZcM8{T2Gufb&B9EtOl#oSVS=9y>y<(cCr9q)}jI0HJj+SFR2K)|^Sy`}fvTwSSHT_XOpv}cb$ z|H6u@AWqU!!KD|^oITT2hP>;~o;vxw_rlc0O*k)=D2dVT?V$L2pRa~aXIWoaUcXRV z3@ttT^s~p87E{%w=UzJX+%ss$IJtK6^l6f!UaTu)L?MJoyn|%n+y4(3vtpDh^Qi>( zSBAQ@5MTr?rNQ#^mK3;6?{lDD*A5IY1)Y)$00MFS6-^bIcV!r_0;XX5&l}d0rQdN_u@j-RqA3BG82xW4&lBf8D?sv z5}7)nEZ#*&LED>*qbG%*#|Ff}ekM#hGnj~sHF=ph^Z@*4bz1)u3@ zUD3SbKi?zZ2mX!(UrNUoEz(f*`=O}0NTJ!$v0ws-=L%b;tO5LAS$7^# zk<9e_>A9iMgK(-_cK*Kcz~YUgvv=Nk=j`Z^)v36!563sOuYBorJGl4obWB@)>Zzx` zEKHc1gkW0-(~xuHEw|*;It1>emo8kmpr!ZSa?2j;^h+mByzn&Ftm$U9^#2q0Ccu%M z_hIMj*Y|y(0W|K$oERQ6BT6D^iPnq`OH{1Lw7ha0M|R{Y$EhezR*4mroMbC#JPb+O zRZ?WSHg?vPQZ`=Kx@377CsJv%Tjp*O)iNo?Vq}RTDb5TAGlKyz4WI!u`abse|GxJc zua6m0VpMrRcfYG&zxVym?|DJ1^(N@W%Uo02mu71-~0p3 zM#VcKY;;w&`xv0>+}}*t)J5LCe9a_H54#4rp?Io;s^lBQ;0eg3wXQFW~m;6T4PUE94=r1QOodLfvL9J&t^stHIF3Z$|H4tb2)}4 zF7~irMxXq2-b3WQVf+mGA&JG<>twnoC1p#W!l|4fXE_Hsb=OE4yR$RW-U>#n76$~*=ZwSxBT!hOaZ7Fj;ZjHS}7Hx4h=sLrt(;`Or7nBu}oPN2O(?EO{y6zSc?Or9tt+= zBycsDY1FHf_l6L5!8Cn5x^pQowMwdhcMN83&?nH{Il+da@NfK&?0j`l$f0n-RWMaFmpc? zn7JS56;yu(sQwD9^cUf0e*?ZDJnUEC+86yMU0a&)&vvI3&(6=!&!LEC;$kNya-tQ; zQih1?jZ)|y^<#1(YoWU|R3VkZnO19ZQc4;$>xa~VIK;g~VFSz5?^;%i#l{xHfHxQmO1D%?2Xz)LdM zwLq$r3I-wcTxjUO$$)#qcL}$gbw?}!aqgiP}Gc|kU!$+TAkV&o+ z6UbAjXV6VE^y4hxpoNLRJWOhUA0D>laWUa{sjfpazH-Gc3Vl%H4dYy?@C3i`qd|IQ8u8ED)bb(9@3vn(8J=@s^+T1!=dJh{TfCMIvG4H~45a z=jYSmfYGh&-Mo2ouhJ!cE$b%nNn8=28EYy3zx{t$4J_gqP9K7UXVBN>_ z=KP$1NI^-zXnmXT9YfdTHcxTb2j$ zYKqy|=4hN+&V@>~(fA~WdWJ#Wm+OjfS-H;{@1obcsc;Mg1HUwKZ7Rf?S$ZOCfIVQ7 zp-@TVQC8uQbEl(_XUZG#W=5mURI5rk=#dDc2UOjy0uj_D)(Ul}W~#m0{(eZ|P(m;W zOC3`n+JGb?$>~;juLZUkf-8F!Bb*M0z>*Re5>}qaMdaA?;E2S_eI6Y7GMs5q>HaaL z|1Y8leF>cTBHGp>`u`#t(F-)orVq)ANn_imN34B$`I1D!5kh8AZA+>8Z?HYY_Qpo? zy-Q;1Aoz2)wp%>VaeVjR9^{SL(aiC}d5Odn6cEt6KV^bA0*CXR{r#g34UHmH?u)=w zozHvV_4z~QcVom+2H}=x;g;8n`}J;pzjzN^*OfpN2jHd#KW(0*=}Pg{hbf0hA+=hK zGLQ!}gxz#LXY%=zr%utBES{ok#_U3NdX}yo54S4&J4Fh*m9}r+Si5n1J7iLrp1^|9 zbh11xu}5^AqG=_e5HwJeKF|?*N@dcK74m1?o2LVBjx#T)0uFn3?(E;Wv&YmTGBJ^g zh0qJzsD`0fYN9aFs2tqBdiBoLtG5p-4Y=}~;NF6o#O$qLLi0U6V(rUv0!=}w4A5*p zJz`Cr@P=2o?+NdCyOtipL=<#n#l0r7QSloAtOLxq6KCaPVnz7)sI}27{K0g3v&2h%w(8Z!~O2*p}? zr&OuYLN!F%QtTd#NMO>eH&^8C=@DxRCfw|b-0{=$Hn8?(?fqJUk39?@dpmsWQDog^ z_}1I==2%AYOg-fCgaKAF7>1~_O7D2w*4QG%C7q$Sxu;Vr;?MU+v(#9vRcge638w{I zyy3nLE{AU2+Ss6E!0ha5Vy)GU1@eJdw-uQ-Ljmze;@1|SdYL`LP3WyiFan+DYDg$1 z`pFa}PD@NfLZMvEDAh{oloB>d}2oGw9!uFM|DxKnS`&E0@8Ga0~Ojxs_KQl_~? z&WrYo?n{lqAWcfugX%DU=fY~29>?W5jJ?>A&*EHK3MA-T!6F4VX|67I!1-_N9-{oB zm2?kwuaj`m3c<*yvLUMN?%uh+D!3LUnt8Ed0kwv1uMK(%~=--m0G8p}=VnK*UgnTOM=D3xuMbE!1U zNvg+ZG6$s;U3lP2a*sV6P>-z`lj&UClTRF&Gs|@I>fUXo11v1p81nuru3B_Q#ya%VMxIBW?TWS7^ZP>CCL`xz4l-Do_-n$#f4b@abjm-rbqYOtnYV*tA~bAmT1))Z_E zAi82sGJ6x&^e4lt=_@_f#N5kfO@A`Xn!eIwP5^3T6dcX7n;&U zHcR+<4?$}%C;7rLYElDzCE7zsm{Y=yhEv&D&1wY_nmWG*wtA7YHf(-wj^eT1?8S?q!0WwS#Z?b{QQQ==%K zIoH7N1+*HZc}%Y9?*Rbeh7RQL7cn2W0byTIGnZ*MM3$EJwf3VK%XIwE4VvA3G#`hl zsKIa;id<1~lra~er16AeC}ZVT4_ZBbGC84q$9>PJ=wfB82fB{ZaTG5h!RDBg>{iim zG$;AzM)#lc`c0f->Z7~*$GJ%X(=l|xBz{G95c=dMWm1uC4P(;Val`spzgSWpEt^WS zO@zvuE_CZjuU<&=XbCn;El^4o7(LwUlVcP)Ahf$MK3bN2ZCI9lb%ZSY z+ORD9>Ihl(?~Y~J|LKxtUmKQXUmY#W(Cr1Xj_Rf0@ZUm~aa|2mt}Z|D-%yr)ZCI9l zb%ZSY+ORD9>KnO)Tp z0>>aYo&kw$QV;AVL`=!)e)%K9hh1*T)1}7=s`?-pa7%i#{dxvMNajN99Z)pHysxB6 z487vAK*R9x!X{?;*(2IU%t)Ydgs|3JHqh|UIznh2A*?n3^7r0vylA|r(gEivVBy85 z74(sK@QLy#QLqC$AoVe)ZhvF3_2O^Kwldle*LyFEEMADe$$ zN4be>gem^-i9i413ewqv;!%x02Qs zQf#qdXS0PwcFbS(%ZmYJvHs=nNeTLhd=jj?m zQz0}GD95Xfs3QGh4j-U|9f%`P4);>JWw+OB%|!^#q~~l{Vlwd)9_=^wH~k5JD_miR z-+-2`GPMQtEYLm+w3mSPJkUPNJ)H%*X$?s? z3@!9^7B}2h(;8rIP+2JrBo}yAAt-^18zNTPhJ_0X)|IGx#$*-l=;$>q!4f8hCpPh2*BEAX%W;1j>_uZ&-?-q+deYl~p3i)LeD}F1!HEB$SYFk9#Z%-K87A$GQiHkU#KD6Q?dR$|Q6&F1r z;8tvNGljRdgb|Met1FSKd+C!m_tJAWjX7&2lC4y-65AhnC1S;^%_;kUTUNyeC8prG$!($%sH|m6ISn=`k z9m-qq&yw}?D<>znu1-#DbL*RO)kv{m6jzO<)p(0S^#mzX&w{m{N-Mvo4noCNDqDe5i7hk zIk{C2PHxpgt5g@#p(}?30E9y{8m7;k*TXk9H|cV&cv;FS1RH@y0M_DPEvWw4GSsW# zmfuH3GhUw6NDmh=@P%VXM=@WUS8FvQdF=X0<2wIA;?*Qu{S5akIVBHp&vYW-C4XUF zLH7GNZn7Tb6)?W|zILUv+Wkvce*1lj-b`YBky|OE3nDwVJMls5w-u9KD*&Rx65ATC1L1 zybx~@p;#sNl80z_l0Uo_8T$5`Lkc!~9NBFH+p&H6XiZ?e9$^p{pA z=m*3sk4OdsInEP$q|!jAV@-fvK}kvR!rNJA1Z4cZRy@$gB^Vi}Op+N6?G!xK%CmGT z2p+|~cneE)%gn{&&wkN-Xkwh-SYLmU->WrStOo*78=tWMgH;}QqQ<9rU@ z);G>ptZ#HJ_rPAEM}cchWhBGLBWbM$o$=G7=9N*iVtvnU#rmGuiuFCG<$lB~I!pMe ze8~7DPx48gd~JPSSe}=Mc#NBt+2&`B23$|qwQ@_u-ezQ9^Oh3Z?fg}R`y@7@P71d3NiqH)=M|cc-(t< zc;xjSZf(^-k*zK3;p^AwBw4S&cI|4tarD}?YdcqO(JFGIadiFqLGxha+Isow&1&QD zcJuJ|wHrs)LJEc}nBLy6VD4_Wi8-tlOC{DbrsOoNph#dnY^|-eu4GAqH%cWc2X;g4 zU^W`+uvsfi_({?-@77GCRxc5~Tr#$sM2R?anQ5)B*XQT2 z`1x$i&&wI0Gzo>R3ggS5 zUh(Tsi|l@ON7_a^V$kEU(R?~gw0Fzz!CPluAx46f50mR`Y#7t;FnE99?9*YS!VCq| z+VS`mzy9Ppo117j_!u{gP}qpao(_kmr$aQzPDE-~{1nMfM5~+?4N_-~T;_(nm-aX- z)Tv8ETB&r!zhRmi=pltfK9$dh@LQr);!oLsIvk{;UzVKaVBm^>%nThh1KbliG{sj8 z-fwR_4NX+;`sU|@>+4tidPNPSVVf)B`+Jgme-&Lvv-Ztg2OU=&E(=VM&;Uk&v{238CF-!+cQ1Rnc+zm0Q5*JB$=NUBnfBR#bT58w|+iB2*#4W*OelL zIf_PzvK?VY9RJnbdUP^#bj5$S5}U}BxlSr&&{Bo>n~Y^DRommC>B9arq1>3(xQz6h zN;Qo}N+`8ndpgu4c!^_P@6&#q!aT6;k#ed)yc@2v09SbeE~2VHK-l#PGRHXZ*mRCm z>grW%MjBS4#QLZcXHzwS{dG;x*38ycC7P=6zEHPmcx#I?g^GHund>*NZCr1(Z(h4w zw<(s;wuYuvspQZ;D0z9`so3<1SZb0(3Tax2)TFnZYA0r*ojpa6VgCe0KNKmh(j0!( zQ%?Sd5%`T|+9i_9bQFpD8dp3=M+Kw$8`AiM`{g}YNNT(h8KhCjnn4mt^o5|1jU`0D z`!s%7Gc=E)IvDT!6gyKmLH9&cV}mu5PNw5&ubE6oeKrO#Kk#bUGtN@y;WAwh5_zv@ z2H$+dFg)Xo^?5k>c{uoaIQV&bBg7DlX*l?KIQV%u_zPdp{Nz&c|NHv?`rLE>%h=!j z*dvcT^5MV!^G{hXeEoghpX2Y>JfB~AU-vWJzuo=Yp6~sW_Y%N$#eBH>&G&czardvv z3D(d36@E-+%$oI!7|_O1Z4yzy_XYP)d%7vyWMg=^6Vn7BU=2?qrd0WL{= zh@^BdmSkTM?*+oq%M(R65EQKjnI%~YlBC9IoPq{mQptd_KOuyJKT5%|(%xa6R_sRj zlAjLgNDb+}O|$f-pE(Y73-pVQ)l{uS=f?7iiYg%wE$OM=cAZ9Z%|HNwgC1ub?B9~` zrW)ny8iDb{L#Y5Kxl6b+nMLB>CS$kYh!$&e+Y&?xF>8E{?blpDO z--CU|34D@(5V?XUDBtB<42MOyMd4hnRo&Sva_(y{zIeSJBJ3*c<2jFp7wZy}12_U# zOr)hnZ!)E;C{T&+kd~CZ(GdOMkVx_*Ub$?BQpUj;D?G0m^w!FImzu$Fa%zg^a_pVV z;o~MjuqNX{RXzqp);TgpW7zt}&e}$?7R%>nrzgj=OfhAN>JR-+1JhK{6HP_@9yDP5 z+r`5p`hXwoljPZI(xle(2cl64B;!64DJr{hyYbXmsWg_QMB~In@KQ7y1(XaV%{7Ta zt*URAh%f*peEx7O8c$G-IZe5OObB55r1>LzsT!mg>Dbv@tV^e6XLEUiV`mrg3%t+d z=Vxb6ojQH??CH~|m(=^2v!_oXgsT$hTt2ED9G1{Ybqwu6`7m`rAsuPHi_O2*XjSXA zf>?7_L>#P4K@#v2u&hzrySXJR;7GmG?$rM0LV&b58?#q9t>rD?+c%`Y3}9C{ZnjpU zTn4l#9Y{!=m68~_c!FM?l+Xm#%`P})w9P`y{-(lsZ{Y!2&v>Fz=rjUU$?YZ)@Q`ER z*wA7vPZoFSW6wkB_u}^MZV~=%%0mzaMJy*#cwlj7g%WeVP=x*=Ok*NkJ)N6CDpnbW zL)9(t@TgXa#0YufFctn(*Fh@2RBA*!8SRi~Vs1QU9_{WP9F>nMQj~OHf#GBz(Q1uI zwEd$vjjqVeYSm=7>cR=GlFJn#ID;OTN3uH@iAR&!nVE_1&0Y9v^{_@&$FFB{xv81? z{HasM=I!lPG#sNVqUKoS%Z>;iGv(&`E zE;%TR-CqhM?7+fMNTi>tes6UODW#?eTvgX0_H&Qzc7gCaxifxW-uu3bHp4=xSP){7 z&@jl%M@phPQ;rNQROqIsvv6KdAtLV-`;iXW1(i{T4u&Vo?=39QZe3UM#K0)ttzg&` zeuBkIV}C)aUCXzgA=9>S&Sw(aNA1_(*z7FjO@NlLcx;$Mi$w?OI>!}@l6MLCX#{Ce zDZgTOfu(6Bwa6iA+EPmGZ(6&f{gZx5J<8A}66Whd?Yaf#kvb&9!|3u7i7O;n<$Jz( z1P7##{w|dEJi=$LmZ<%yJ_KiyNy5q|^7(vnohdg0#h;Mfpy_mu@YzUdr%3%2>VYUU zm2_%opwh$v&+mnzVV|502^{Y2?(F#Eq$>awh)BoZe}nnji{RUTLbLk!Nc%rSv-&fn zyFkf9wH%NOgrZS7Vo^jXvX@dRWV>MtuX z3~a3*u`o4iZ(T;7coQ=6txLWWZ$k3@h~*iK!L$0K6kHy&^@GTxcl=QD=tse=eTrMZ zbv~SbLq7bY;jh#`e9LU}#G7E7_8die#z`%@U(b8!8EsIvMd#iw=8t>E{gb@zttypV z7xP5ezF*BLkX*n2-fpU!^8EfUzfU52jbFa3HdL6e=a+wZ6L zAYyK@QkG4TOA=7B>ZWqZ~4N1vKX56^4yPd^MO4P`3eRr=UHQ1`bjAXWAo>eDt zhUYBSSbK41GfA6)*QE9i@F+!6kA9Lz+F#8h~T z>zQZPufO)n_wl-HQfPI4K7VHEG}(Gnsa9okT~dT^aU!R6mvF(bsHZy)7?M5mobCrb zyME`+=8l1FDW5+%PuY_(!&AMxwsy6$8Ob?~$t0ckY$`Q2fiyaEc0Pd{YG?cQ+S=<^ zHx5EM&P)aLsWJdYaC~AcH4*cgS0bLf+k2(Er2BeJ>tfd%n#<2-6E3Q$=at+(zs& zo5E$moDU@vlVIfwLF{VS>uc?x{-FBa3nYz8OfB{qgpJo?Tcn$aJCy6D6{Lu5q_VkL z3F?nXZn!ZW4K!HdpEnJOq#|8h0;)AWBC5LtUw`3JGBw7mE}0}bqSGuB*Dg6ZWE9pUhZEz3 zOfmI!4)OyJ; zLg9Z03jZ_|{weg5zX?Tu8ofj^I5mB^$kQ2Ao@Z{DG~Hx5H%yjpk~~QfH+vZ-Nr9G- z56a6?vurfA4N=(XehRx6 zRauL9d9Zt;{|K~C+i34X_xwn7ccb|`-vG-UjO@c~%1^xW{)l}qWVUUQSHR5Q0yF;w z8uLFw_Iw`9{5>#}(pw;hT5PatQWsci7(2T;C+a8VLU^{2P$4v#$xLT6nLv~|OCfO! zc~QBG)W92vSjliIZqAM;lg7%D@dl{2RETrZ#?J0;;|OBo5`Ih;oc!=Z%n$WULomz6 zt=^~H0gE~y%zilnGK#puI8iUe+sKYTe|3HR#$h}X4iS2gKz=;>5Hcho+52M-=B{7; zFR!ex-#my#LOv#=ob=9fyv-!am0G#rKTy(U`I4A5$ehCv@3TwE)bZ-or^hnmDW9?U zFec%xZiQX9cQ=YVcS|kf`d^evX51r97N*m97^Gad0k7SxSeK5kh4F@>g1R_Oz2v&c z&hEfPW*F8n`LPohQcMu_21#WA$x8+d1w#B?I!gMI;U=1Mk~vdr;N zr(oXQ+O^D`mRazIC#u_NeG>6bSfuGJO+i;qxwFM74ZK<7xy*`pn-kAJEHGl0qkdZ8 zVFSd4C-!Zr1Ir=UBGw+xD}>9KIIvt*+sy*Au?(J;us_Nhgky`0wAB9Sdc;Iei-a~a zaYm(Kp3$toju@yPGj0ztP0UqSQXV+<)YO<*TY^m2T1^^z3E#eb zdz<$%Ujc);IUdPl5${ex5_P43lym7_FPWL1&T@$a*T5*jW#tl-T|}JJ<(C30@gO3F zZ`ha9)aD^tiw|s%*;2k{qp`I{-u-?jY zDV7KY+%IVlIQViOmv#4XsvqkwT$-IAJ=^t)1+c3PyjqoV!~H65+}d_tL1*Q^;nO*N z+JD&3p!3B`__3Y!AL=vcT;LKMO!buhVL#vU1(Jim%oP#$b{Fd(=JPFIfLrRngC{>^ z*v;l;{`Xd1%aW+7g3g^ROO#k0PihL;wS(+xA-ht@u5R8me)=gy zmdXY~IO|VGhB@2Lr?bEJiBRo*Nlvm4EMKBj4UR{8?&(j5h3oAmg~0q&2BwJmfQ%w( zRld+{BnQv9MDB@)n!JYd>2Pvqn~V)A#M0nvfWu2~F!^H27(C-rz*8yLs}wd&q+*F^ z|CaJ#GBszOk80FAFB*?}S_h@0!=pwwd?^|r;6PlR_KEIwPiud#d?2UES;t>;f5$6V zw=NwWRGRx0gD~$_z*Ftta$o!C(0v{SCMn7o=8i4}Qc)@nkGKhLi2C@%Pe$YcIqUdK z?(cXR^F!+|e*|y}5M=?H@-83B4x^yUhJf2S=m-LYg91HAT!$`QU%$Cm+S%HC{rgwx zkT5$pLuHy~dvp8NIzvtoCc4Zujoj4aIMJ}xI$3J5a;3C8K6PqwEZ{*-^|eSeX*6mb zkrd^_tKWNd?*RWuOdmTqtggNG%C(REwA`(Izph7C&vfr2a`>J{FG=N0`mZ&r)v{|< z__u4*wd!zov7yNK(!*c86b<8LX_RUAX}DH}ySp}{As;0})kzNDcaEmzi~WZ$DZQ4; zO5z&@prYmWwt7|+IJE1C+Jcd*^DZ$8$L5xS^?QA3;5%5^E{WR^WnJz8&&|M=Skj#D z44fw(Na5d?)Ysf6y4Sf?_r;wrxxb^H!upwyDNNAFE;ylQ$Or-n^KdLX>Ku6^SI8C- zYC{M@7WHXwaKa_YP4LoNkRl7cHIWDQ7FIzcD1LpygGiw3NeVL*4$y(3+03ZD{byXl zvKXSVM!V~Gts!qn`LOp(^+_sZH`^40cKE+MG8J9x&31;pgJ&q|uz}}ogF_qG5jL=J zZ6F;sup?X|@B?OzxlX*z(u9%Okr?lAm{C>$529af5qu({Lh2ZG*pAPtLCcV!Sv_jhV8qFEED`JfqH`)|!n3VQ z{j9j3>-Qh)wz|G!7GB=hQs9CX7tW^Is`PXFeu05|uw1LdR0Eif_e%%Y6obYOt5`Gz zjXDzqyNsn0)k<|@a%OfRKR-7+ox@~7!1U(b;@#~FTeokmUB7|d^&lJ($FsS;bvG7I zXHK0yd17&XE)tGPU_vO&G1EhhVMrX0DUA0OxH7-6q?kB|6&sfj9{X50lDMFk+>`RS<(x#^h`C(p=cwQ@*!O_?px&+JnP;ge%ynPh^HAdXp=nwrDH5Mig- zorSrE{T{lf%9di$J}OhQMT=Nryn3sq&kXr4xDVQ2>>bp{oKy9dbt$YlY*lgKKv?nK zy50&79t-*8UeuW!6YgHGUf|B;W(K~f501EKz?$u`S(%z?PECl3aC8WyfQGC&IzuI_ zm3rpF3pu8~*E>@m6ZiPQu~h#>*%EfGLq8O|ra<2?f8}0;mG_QGF!eEGzo0fb=;HeQ zrw(jcltxoLQurb45VjY<4CKMd4>L0qtAwSfV_iDQisJ>|=RWhiI#s?%Jc&V(B8tNI zf6;YO*e0w%^GBP7$|Xbi{Sii-*ndpyrP96KCHHS) z$^8r*_%m?e&%l8{0|)*L92oO8qbTFrdx^N|ZE#?DLFv=BzD;$Oo^8@AaT+)8+tdrQv5aYblUB5FM*-_n{Wc0cr2_m;3Hn|E;$ z`BrbMYCU%C`psL4A$bh6#51_2&Dcbr>O_0#sW17n3JWWY`TFd|;xyY(xJtlaKdLiT? z7%E$uJOs0cw>T60c!~+sRGqj}C?;PGCO`5Q0ZLO3)6bg3)E1EEwT6r#wEdcSx<-^aav zd3gV_5g`k(@Fw3q72^VvDa>$h{(YHPc$R_+T{H_n@~u_myq+dG^RXXv>%tHEMN5x6 z3<8M1x%XwV2aHDHO}>*jbAgEqvzIsjuJZ-rWPE)T?(hn3bSNdGLzGY`mCB^Q)(l_E2+@g$SAwaU)XHI-|5|7! zm!tj_?$6CqDoc6P>@4N$Vm^sjXq5}`F4WqhG;#6P?5$h3?5G}f2l`k0h8LaHxd%`2 z$TE+L5R2++}%tywGM@G?K^e2L)a4CG0I7-C3 z^#U2Bsr(Jat=xJ}1Kda_7NsFV!xnbh_)A2_GRT%Ofg`jJV@1@?%a>yi;e zP7GN=5|-Qabn)TV1Cg$$A}=u=%crzvP1I<9)SNGBC zsb2L~y~Hzf+XK%nZHm>r{)5oN2cZXvP5Tt|AYH{jn>UFodqccmd}A~pK=I576kmK} z^j>^p)OH1ly#ZR^7o{UEl)gVYhmXW3 zhGaTI4hKQ>w2p2F;Rd`km>?9ze${CC8LIAL0S#p+(4Qb$UY&OOl>7Gpto$SkadrHp z0yXTwd#cvl*=u$8>E(A6$mjEc1{L#f-6b2oL7s{HzOX6c{-&p$R}#zFM!_G=Ow+%& z5Ds)}wQiuced|CY57mv4z^}%O8>LFO?hR*R6SLW< zMM+=yvhS!!=K6}qOZjqUxXZNeMl`6`iasOC8BwD+J4*^~s6a|fHW5lJd-&3_Cl*`r z`(^{w@L3^^ep#i9Eqj)hR#XvEdmM%!&CSfwVAn7^6!j;>#or`!MCzt6^KX-~+HKEy zy<`)}f7nOa^p-D-`HzI9Hl2AnzI68ZDTmhdNDD^sJ7;~~2;z}C-Q7T&{3~+(saAnR zOeLaT8jn*ew^5N;qj3-Z73W37p=$mS4;1{3>YB#dd za9-(9{a3+usq`xyEa=waTI|Q~L-K_YNZyCw3l4J2r;Xr!$bIpy8*S6zZ9W}n?18%A zuGAtR_K2)vwA+dl6Q|m(HPORg!Q*L=SlZfc92HCuxsVYo7BsFM>~168w|5U}cJqf( z_^js#Uhl%aaM{7*g?r(#gTtfo(sNX_=%dzNp<#W41TrbvYtnXe2t837KxR)Qv=Rq3 zv#CUk_^((Zl~tv6g%E`n`+xvmOby{*5BH{qaIc4V7wKGaPjr$zGon%n#&SY;3FEaU zdPpV6blKL6) z7c@QyzWow>HjFCZX0$Xfb}cUQn;3z1!doXsV4JX0$}YMVbs^an3d_0Cua9ZwOmlwT zdHKlmZ~2lF^DRmU%u1TC0}+9WywoCBoVgb!30It1qb7&`U%R!Ln+4rxbDQ)*%++eS zh4~?I=v-LB%FN(s6w|D41WJW^9PbZl9?SB~zxhMr>{(<*m`F)hr0&tuGyi4+*5N#q zGeq*E3 z@P@T#{*C5cPKNsvhGD!N-X&GZREB%PjUxy0^au3ICayi3PFOQNp(_}(%X}h6(m{sl zMRj-AnzYG^tJZaS@sorSPJ?%gknvk;*pFoy?JHsf?Tu|_yzvzgH{Xz5{qrH6qvb3Yzn&GbMZpcnvyrfkume$CdPu0YwJgR&hB zN@!d(s9ypaGKWWY&y8E*ukmJb|*u|2z)vg7{MCWlswGu#U|;Pz7Rj76=fH|tU;h>Hp@6ba{Jxv^BdhdY8p z1Nc)T>Q^mX!(Pi-=a!tICd~ETixB!G-8d=;&E0tPJ}OqMW6~HT5-?*FoEy}!jycY; zVzrD$g^GnTrTCjb0hMM5Yvm5+yEvUO^O*i&6c)W|9+L!$Q%5RR_3Krd`JhJ1#pN+Y z3BTteeCV7f>Zy|HVRReqd$OdIQm)RmgXthM=};^{v5mT%1X|UDeOTSBHt)-+9_+(z4BYqSTn~0?+eDLOa3Esvie-Lc89{fQt*P3%sk5<9)7)h5S5l}c`#z8-o=uW=-FcNCcNQEP? zKrO?_HhmvNo4yZ{J?Nq7mxs>H3URQ;+?$D}qSk|L`h2D7NULxs6!71hsh0QcEWLNa zRafAuE9gtV16TbeFlQcpX%2nq0k~=guKHOp=?YxcsdRVQb9wbAWNK=D%KU)&4$tL3 zHNIakUb}L+`)kJ21>+g(X=>+u)p*s}_e{Zfnm~T6qCzP6Yx?-F>Tn`uLlh|??ek_^g+q(>KvJ9|_QINCot7m++=Z#Hry^<8?eiW$kqqmgKgl%+8O+Q-I{ zW88uMVfF4NSFyOEm@E1fa`pwzp*+hXOs@~8ndZ_1W1Oxn3!+M4Sv%L*-rB7ktTh7Z zT;Au)_g;bR#u|7gRV7N>x7H~5d{Oy%-M=i1Lvaped4!3Ol*qs4DSTeAnX@g>`&7MJ zC`XaXa%CPpvV>qd;Du>^63e`nj<8BZ9TfJ_iR{gj=y57{E8nuE^ zze25;f)U^XrukK)UNCBUPtc;$pnqxU?5UGWFIVpsT ziM@VM>t;T3TjI0y1s-5R#bQsZ2ZTZ!Lua#cfZOLla!DTW5&=OfP1xJ6mP;K9?>R4K z=2347PK~EKnn-cWM&)UWRkRszpRYjH@6(<}>jit=Si9m|yS8?H?N5y=b&MEpvM~Rx zUe~??sqOkpaD-1GOa2zJz+z!#Us5?E{o*yFU zddp4F^FvfDMRks;_z`EG-bax#ho6npy9c_ArN(U1q{d5bc5H0cdSq>FPmyMiE`>&! z^wYrxs)a&T6$v5Io$ZZVYn7dyiuH)2K@VwARew|(?$G&|dJ<)-h){W=8K6P#5!rOM zVm+udH9)OsK9}%%R^pU|?113Wc&?3qz!KZ&Fva;u+w4)>vm*#B5Y29G@9x)r?{|&v z?|*IJjnqrwaBieO1_MYxH;C+LKrUpT8$@!c?E!@}G?G8!;OmemI>49C!k9=r5{O$W z?H`m6s?`JQ5eIR5SS#2I<`SbUSRGUiq6te2gd!C8Nr`dG`d!16XX8!Pypj%s&w`hd z)AvOr)jtLEa!9Hil1h3;<&adr3SRy*BvlT)%z>AejW4Z!$b5;vub4k=PI>k{A2Po5 zXRCoHo+$cGJ@m*6%MU&1BjI%rZE*o9rYz!0gn|sGtS*fbN|E_4owTUTB<_f#ql4lB z&5>YM4@S&`A%r#~xmc@J8jnaASm&@3$#kW*Sm)t~d{lnXzoLFjy?F<3#J(%h(&N~eGKU#Us>!k>TZ`x^&`UZeQ(|NGMZ-kon> zI4?uuTG)_nxTP8?wJL}8Nv3C3WYj1D68NBxajWyW+M1hGj?EK! z-{$LqR`p(*=6x9N*?dlPF~Qpu6yw^0-mQirqIaw0xpi~>g=J%VHF)MsemoX!Y_orQI+~i8nr44~HMqICwO?r^^X&ib zcQ@8w``&lizqA_6X2)~6#hE4c|HuFMZ@>0`{rR82uzd1_!bxu3MZ#bLSSnF!YNweW zA+(zNo(gswXc_eK7ETb0H%QCfX4wp3*$f7nRS$u6Z@UQI2{2jufX?Os5$MBS&&7L+ zEN`NT7l9kAmWkSHmMNh{F|2a^qBrW$zazA4@{f8?=0c&?;?xvf*_dNO-LuRf9UwY}g*Eet1P4@eIGvhI%%l>7_qdIy%oP{_l;dx~W% z2~N1ZDX|stCQkxuYr02rx9{#la@*T?i#x5?UW4RX1#h{SjrFORp;-3&*Is?~)o*=k z73Yyn8lbSK@dRLKbQYAgvD-Xp(?%#F#9<->>n?pSLPABezJJoD4k84r&4vf+acg^& z&5Ol?m3M*V4w?&|qc97i*Kk@_?dac0?HfV)I=VfkEb$|ib!aY zHYg+w5v!C`)-|FZ%7>`3;N_(~D1QS?pGFQ&BL}CEgVVMh>{r43Y2@HEaxfGm>7Bvw zcs}IGbk^ms`|a-EGrnMa;X~a|%AfHi{yuMfzWetU^QaFpa;mGSn<+5LY6<2=kxPuV zBlW$zl~N!v-ta}olhF)*$Gg?ZR4IIz&xC3iI>{*~-QBmld)+aUVQtFQ_R|4^H?)zq|wSExU zoS(nr7{}1Z)?)MYG}CRk!3RV^PpG?pFSsDG3qf`LPOUwj@t4V3xBZLTTPNpkdYfvZ zx3*Tx$6K|vn=+Ns)2UoGd1CA4Y^Whh+;q8U+|okGAR6VxTczsjJ+*!FeGaniKlMQ5?(linr6O)SFdN*|0pfg7e~b3{%ps+A=%gu$Y2v zhh*6oqGsmXHH}1r!J?Y}RJQip?P9Qdw|-FH+uYpK?#BH_D!8wXd%X~r^>$^GmxOjH zmCBL~He<2<{kUTw6PvNupK9z23zUU%H(-yX!)HW$;(HZ!IXhK3&ImGa(n^ zi_u@>zO|s|G24fS7v^19t(=hxv8@GV-jy5Z7UO?iA-1KkR`_`S`knD?4{enL zK;f;W&{i?)e0=Q~Z^ekK5m!w(y}7 zg#3q4HO+8+sjYoQ1AWN;*`Z7Y`e2Hpiv zlx~<$hHq_A z>{`mT#>wUordF#Ivk}-@4eNPm;ZyVTzRdY=@3vTN z(PD5cBZhJoq0Eq^q-Pr>klpST5%*jDmT2vhk>FKK(Zei+C0M14RRh6aif zwHpz9L9bMAY>7jd-jN4sHlYmD}T?H+p0Hj3-KQZ8gjm!@R$rWMHr8TX9A&>K?bKd&G>f zQ3GO8xkH?e{bQje{sUn5$HDH8f!!bH`G1k;e`h{IM~fJrVLpS(+AluscjlvP2O{CD zFmdH;`f&Gu6v>WkKcWAObz}X*#uw$U`}e!~Zr)fk*5p&!u!ZyM@kDitd4i~L>N3;Y z<#MNHcFN`L;&gVS70HAWOyV0<2Tx3ABb~C)Mr}8LP@F#U5qn{#B)+J&t8ruSqVfw~ z&(wKHghJ%0)cI52y!L2kd(+&lBs~?NHTB)Y`j`;S*xUYWV(F!5b>7!X6>)sFe8aa% z7gRI|H9a*-1!|CuhYIP^&ivG7IG1~z;7tMR`4iJ~@yhNd#B_9fVP|uCr@EDEm`QZ* zt?yk^wUCt1v(*p#*y6)f4jIWpG=op==dkbdM(Ybw`Ch32tyY-IPt5G3 zebQJ4%2ZmehKq?h>$k#Gk?-;(`R{*!wUFx4HKA!NF24Ty;-V_)8NPbr#EGjc`F!}~ z$&(bkU0l3&ZFnHv@QzBY8mU$mjT~0uX0zI=W90QxHMKrnX?g;}1bpFAFmf2^5N<@+ zu8KI)Q3ZM=?ZHz+>EM)SeydjVccO|NZ0$~`Z+oJ#ZrES%`ZZz9PXv9{j^+uQi$_KJ zQSNulTEy|oGnNw=(|2|V{9uVCL=b&mq)MyBSW4xzyIJAavOgY;$3JiQz7UqW;BtDo z97dg@LiE8wEY|PSe>bxJBJ!bEwH}N&I}Owih4C3y8l42j70fI6^uc*pd)dbMUE=m_ zpFXnRngO%#Ry-(N3bQx4dC>Z%=v-@?)(pt4eEAx==c`r0Y~|Bu&It-rx5&TZR~USv z5UC*x5Db?=VQXeKb|e!=1j2mr&eT;8h2UA3m)&^zs`czI<8AXC5}+o=L_l@+h#;IUNe)(l{VO@odK%;83hd>==wQ<%S2b3ri%iaH=n z#jF{i=z`%shI0pi`}>-&y@#31{|;aKZTQ+B!PmYFUt3@%b1@$?9)Yi&%Lk4B4L<)b z;A;!aWG?0dw2Xp3{Uwe0icgvG*iXARKdf1qW^3I~%M{1>!pet_nH+0h(ECjqmOS>T zl3aTJ;V>zs3W!}qcJ~hPE37Ltjs?v5M%(mvDwSids5l`^(Ho@WkGYbif)YiUOQnsX z$3u;*>1?>^Z9hu2H1vknF~d|$5`IZAsibcE{V`15!ab++6c{wjgQB+*3Xxl&IHpk4 zz-=mPo!KKeZARn{e>P{Xq>mY_FxAc0#BO06TW$lBn4sk4^G9fGFK=$Q4bQ*cS;+*C zxvp?p*l(*a-l{j+M(b1*Bz^5g551l8kJO?qMo#~fb3bwiIzm)#(q5E5kNtWSJs$4M zmrZoL4wpVx3SGYZ@X4viPrc)V?|u9|=b75gjOS*sDH^rz<_-nEv6;+IO+-%3KDu^& z=jfP&=Qppvd~Guq^51>^^=+7+Ka@;FLNN4LetKcIRNA_Ib7!-1Hry#;Em!;(n8E~x_a3wp=f`-q17=q=oN(1+4M2W)3wk8r+Q?ygL@g_JFrsB0fC zWC0B&ScKWFZHciHdoRr=mLe;YZMWcpy0kvmF$-DjwuZTjH7PkZ%R@y z5{(5vASCefSv`aFHIA(Ci}^=hgCAk*Sef*CY+4cNzTSE^v`+0<7Qe^x ziP~3^y7b*}GCejfk~Ca;{M{lyA3k}qFjMP>W@l$|<8%+mpMTHe@BQFAP6?Aam0y^j zvz`#e5GGS8ZC<~A9YHIi_UN_}u<)B}ChUd&M3F=?L~KrX`}NoF`a}7fx3?HT#J*P~ z?+TrHinQW8EQv6dX#-h2-4$jHg_u;3t#yP4Q1P~a;WHaDsG4CVL@*_{}tbd#=N}xMpyo%kyukxI{ zR+M|DIH1xGI~asl&x`&BS$T(>2~{92eLc zkF7x}D^pV4k|+e3<85g@E)_GCN>HH3EsN*bAk+egy#XscTe>p_wQwUVlU>8s6C8@6 z0fguZ1xXGvpA9BehrVWKRr{x9t}hY3A4F^TNwkKaL2DTFPk$J#;TO>wdUO2?y}3Sp zpcTQZIgMV^^VEq{g90Az8Kj=|Pmp5PsJSPTdg?zh4)YZ5rnCiF)7Kfl8Li)TPdBv* zV7!vp?zktOdgkn!$`9BAB1^ebXHE}pfNL`|X&-1A;-FPI=>%jrskc4o{i~4G79NgtB711B`hGd{Me8J_=ua6uy|#P*003Fdc8#i8U9C&tbi7 z{9Tusmh?LCd#N$wAmB2ce!EgmC&`7_lNw=Bv$1&!09dll);Yo~*PmV{!(d9{62w|nLt$Khw;ct|7OO4iecGTqp z*@IoIdp-N!4skWr@9Zv*LE7lcwu!IVB-6l0krqQz3SbPBWzo28-y25pypZ<09}ngI z%G?)P$}L{J@c8A6OUwB6W^)D;I>+hnfaAY^~4m?iT{+W_fo8VW^Y1dYf1<8(HmxB<;n^dipuP&oRWS4u>E zX*>{Uk&~+qsUy76x6Yy^k;n7=_}&q7Zu+U%i<*Mh51)f^cj{jn_xYmfxY*$_ciIaa z-SUz*+IilSjjhr*P%p|eGCA=(=#9QF6;kEm_Le%JJtn!_(xDNJ7sx&fneZyOdS(msXs5usVsW*^uSGbglnM; zI)+Z_-xJVvgn_fUJXLMA#o*~!JfS8ja~}?QO*ojq10R-5Bh+PGZ)RYQK=Fx*Ogs$7 za$7&?wAArWgqLTN!oIL~HjdmDP?}{Mt14EFh$bLl2=%D5j(ndpy$!)bCxraffSc-*If~-`Q2vH@)7H zB10e>DxE`tzIjE1j$vAKdmZ1YbP;v&u(GNA_(S={Q@U`-rWF zJqiE+Yx!Y4>?831pLgqF$37PnpCQ!=ut1iR!#bGXLu>Ugta{M@k_dPXJONa(p=$wc z@A$A9MnKyB_^=uVJ2SLmGoXcu-t6`Xgtb?OCZ!kY_2hC7XdNttpwcd9fu<~)&uEQC z<1{;aS{U|X?WHm5hm=Z}27)Rt&*9W@?X4jUy0h2ul0>O;8~VI9dLZ@Bc;Im2wXp|s zSQn!TXs6nm99G8a)Y&uIBUDK4R^L3ys z^EUX4c;|i${?hMI)8p6Yiqojj=Ze!vfKKK@0=Tg^=?1?5KIsO$fLzRpoY-Rx1HkqQ zm}y7r0@JwqamGt?NE&3hwp@63J zvuD5@Zv6P}W!qldL{I!-C_tRBS@4)N8tC+BzvrP%Ftw&Of15UkbnlGD2YA4JJhq58 z0g%{S!2Nz6FjeVrHUmPc zMxm*mrV;C3I3YKP*y`Yi7)IEU^EHtyqJMk3%>=L&LUcf zluaUDP0B5eg0{_>#HTG;2Ev(s2^fC{&gA&CAFzGelFj*PI8(n*o6+@pKJ0jQ+{lWUBufRsU3T}g~54Rjp65TIlcKUZ_n{PuH1%^ z376yh;>E?(ytq!bZrs??&hPEY))da~#l=OO-=JYq6^GEqa832Y4se@X9B+v7gYPF? zesJ zVWzG!!DNFtj+BIc%CPfSh=_+n`!)=ku#4_`LR{b{x?yo=ToeEIHQN_18^h!4@`Wor zId)lyy%h_^u|J&3nV$J$=Y;Z!cU?Yl*lmk2RgEVyihAkyi}NF7@1HNOiAR1VPwtcClz&*_`oT7h6JW6+O2=JKOo#4|sI4 z>1FTnXKUep?smnSVRbg|l^PlE1DfwMJjSm8&A$sY2dlyTGQ3x65!uz?`sXxYuS-(e za~t#Vp5C}XCCgMI*bXLA&9*NwtQjsuL|%}nCY9kT#;|UFpNym+T*WX*Wo%o@XLpJvMrrRmQB-EZuP$KFTeO34@Qyzj9mo*GsF^I1^O&$+4W)VcTk`|sT;4(ovNP%R#>g}j|ay`JcJN2`Ed zHO4XrwAYvj+H1t{*=r=ekAhaea=1XSELEqapFNsceON_YXo^Zo79aIm+C>IDnI*?EZ@bXsP0PZtki$9|`wNc`DZ80A|`z zJyN+t#eY)0!75Mw zDT&}8=0Nwp*7AgDY~0!y=1G(Lhv?#m!@P*XLZTN#9s?XGJexXoahUH+q*^7CR9$8V zJ?Er4n0`JNp}DzCu;#19jMy-DS@y-`&}gnQ+Ng9qlKq@Ro}QKl!yIF>MOiX0)}_JV zV9I(8-L>-onnNtlca3-=es9jO5Tf6EBY1C)aBN;ueBcax;0%1=o#4>p;E-6Cej;yD zy++@O3qR7sn2{dFiRIJ~%+tfrPN#<8JP6^`5NM4MCSe~*SFu>Z?7>dQ7-LuI9UF`{ zc0Y^*BDu{0;G~DaVi@rPX;+0@Jf0Xm>ZBLo<`K6L`t`_RKehpX40@HwVm}iEP*Ch08$X_3f`l@?Gk>%e!HTRE-gDl!qJVl}Yj;C82;kch_Qb)Rr=p3eLs-((o z4?KbMB$}!hgY7`DZeozRX9B=t#HiK+^2U7H zMcZSeaA<54_Kc0fjj>T!VPrMT^FIgF1?&TYdtSjkw7HqrpdXUj^axe3C94q+r43$1 z?tTT?Y=KZe2e`)qyZ;Ft7>hPI~_(TR(cXxZ3{7;@3 zx^;E;wlh&1k;i9eQ?XnuHGAsR#dj>dODH0s1oxePn&o4~pHi@3e zO174r`WO$5Ej@Jcp~q`yPEX*qk;Js#q8JfAFccE}R&Wk^4`w^nN*3dd4!^$=iBcDl zlJx}8n3kvOD})Y;*;_X^HerhsIyB1g98mwqLmn_oyKU|#6B?evj1(Aj%o24rF#Jha zRDzCP{^kxX-eoHk8ozL!WnqjSXR=^CRLct%W&7Km2r(h!8E2=Qz=2)Dy^H0BN2)~R z$nVt43zjc8o=%2W;y%iU=tYk61y!=B>%}G|iyaM>6krgW>+zd&lszR9#FSW+UbbhWV)&%;K&Q1lOV&?QShY&}(wU!CkDvBA1YesN z!EAsGvTUHhw3px;1)9@AKc%FpJ4WnDUplBa8m;c_F&J3sTb<=o$s`#M)rM~%9WoVc zl}!kkJB^0xi8yuNGy*8V#OG#aA{}Yhg(bPui4&iV*WS^)*(tRWB*aV%s5tXR19!Pa^0cHy`)ej(-;7u2*Xxg)TI@4ydnGm(?8ZD#YjkKaW*T| zIGrC)QW5)@4D&hY@bQ{ZVz7e?lmeO_opSt4E}At}i46Ke&_#lbM7q6z>t6HO&ml+BM9QX-Ba?QX+ZVwr z=>_$($dRY=fl%;g>?%y}?c_W8W$*LPKVP^^nT}^y-rIe=`&T{BKKsyvkh8e`)o}4H zz*PiDwS1ytk6#{d(D&e7ghel(J(e7s$Ry&?=-8M9hfxEeE8=$-XXFtB_~6df^{apJ z7gxXkU+a52Rcd`CV^aRoduRPl(e$3 zqtQS&KoAEBk{~IOG<93@P(GrOlhj1XZmPVS%+zMaldVmytEM))v!1Hm9WB|9$UuH$ae- zT{RErcOT#JzrO$XKMo%Bjokf%_4eC3h#}>?p2}oWYwjwwh98=0t@zq)WJfVbFjPo@ zUGo9f1mznvh!llM!$$bQM+3ro3c2voFCl_XCbD#tnxd>nq z4lf>k>80H^Vd{(_TWLx9zxMr_s6d^uC82d)XB@VvATiL?n{MtosqVX@3NTA z@Q(DUK_PUbVC;v3L$+i_@=wmivg_4)xZB#=C|$i$udiNQUjFX4zxmBS`SRyJ_sM6T z`5ZL;%vZku+3$bnFIc|w{XhBcSDycizaTp8+FP#^3FnPBzxRiq{lmW)`fXd^|H@a0 zuBNo*r3x(hQZeRIu_}PvUHS)=f-ho0uU`0!|BNh8ON{RAM)8HuTj9WyggTwQhnCV6 zDEO9_m(}}v|D*g_i_hR)^DQv|{fF;=>szN!QE3lFH5dvgnjOtFwQUN3%9f~7A^)kE z-O_Bviz?9A+1}Y{HVGUh_Kl91A`l)iNV>>a403)dnn{i3a-*5iygw2R1SIT)I1530 zu$M_hhkl7BfzQsI9_j_%?)^>>WFgk4&?F6)a+OXX*H>g0Pa;A=FrLr`tz+p#f^?jc zMNZHil3k;Vy9(2LlFprBw_|mU`M1xa$v-ceRnKt;^V$RVq&5wZp-rEhwPnVKhBRQk2a-9hO^|fyeaCJ`Uv6v<=+Lp-(U#H>4LXU=M=$%+73tpr zDLipos&ehxYu_6XpcA*HDGh&Si2NKiog=jDW|Bhv3795}Z~Ru|1o^q49t~)sqryjS zLrRukddVX=(AVK*Ps0Pt-c{2v2X9M4o^eHCe9;z9c3Rip{4sca;f=rh+-E-b&7ogS zefcwg|2N-c`J2Cg?r*>RwQqh?IzU&?t)s?f-Q^mq8JC#PQyAOArujA)9SaU4|B2gT zGY*qOh=1yC7Yg=6V=0&^oZBF_b@y$MSP*#+%HMq(6!v#__9DEFO8F4H{maORUjtwM z1bq2p@I~S$Ps7`f!P}=9BYqM5`7*qHTE+MUlZm@D)0RpIeSEC@iv0EF)&DJj_J=?G zx%Xq<^lAO~;m6bk`Rn~Wk}-eQ=RW*?bE)^Qj1Mjt!JDKPNTj9rc`GKdx;dx!P?E;= z!s3nUgwNb_&*MM$vp@5JbLWsS9vK!fEPwccskjMCQoH=-t8WnBr)d$uS)x1muit;) zeY1xT&&*8Ej5~EF?fp7Com2PU|G@o}M*7^vJq-Z5h^$Ou&6V9{B@41I`_koXF{nM+ zpUEyAie<%db-AL6N9D$~eWVXx>heoj9^4`VN-(>uqni|F#cg$=^4R+yJv~1?J$E>B zahc#UgWtO!lfhmZUS6xkx|AwWL%wbzImBulbrY<{kU(24rV5(PL<_T|olBQ41(|wk zhT^fi1Tr+V_^rqzk4#~&ipb4E-KR%(U0NV(#VZO8Apn6H~94#6A(jFF&K?9U*T> zAUBCC_YRD}M6qe>s3>9%<^+fdxprf{MD+44MaXxu<$1qSACXOIsPG;f0Ux9hq#Gf$ z^3%aN?;AE28y_c%Nd9eBEN_LBNB|3U+x<=A7hN&-OJQU;r{{J|WZg5b zI*n`Jf92Izp;C}9mw4TtTHW)Pc(S)g{m}#j3d-fut=khSl?GXDbWn%%6qI&)x5x1- zy}Nw3Avgcn(3{6U@V;|k$G!L7d*;+h9NlM`dYHuhT#Wz1L0=IHR6IAWa|4Z{X1e&J zm!Uk6B<=cMyL`V#f;0`1sBcY&S?oPK#8B)=aF|x-)VuD#zbN7YfU2QZy3wUjrY-k$ zryZFb%RcjdGKclz1?zIQFnJp)L=#bAcN|4P?A9@ z_e1o%H27#|0*2j+mcM)14mQYqgKUWKLnz%20Ah^-dA4250{y~n`NUjjot+nXsQ z8Og76FBtptNHRLV&hb#_y^;lDk@$I#EX}dmdhzp|ijyQxXjGCBGE=}pKEiI@Ow^h9 zdEv&sPe!MrmkIsZBF?9{V6%*DWc(R3IcMVMIsWl6UtjX&+w`NE6B^ql5R;6?aNA}$ zTNa%x%UHTBGj5Xl%A~Ooi<OV7*e-CUnOViKEn#3dM z8?Q^msQf{H4f7VS>>5IK>0MH%aW*<*J5H&zdIKn}HL~%>?16B7Y9_Z<-Uz4DBqdGE zR2q$PI36*yZ*T)HpuzF)peXDKwNR_O*wZ@Lt@F@|Ix zZqg0Bx)8Mq(U-juLgo+Y%j;RbL84H}o`UZNL=;Mkv$5mTlA~wW`?xaRV3NU6+w}tP zI>%lznjjrxYMrp_bYQKk!?Ksw2&z?_1L(b3_N^XB;A_=8Oi*a0XgG+mjZ>Thv~^O? zjaseO1Jn;6Is^-GD)HP=mie{bT5%5emf7`q{@}q(33y-M$k=u^tK$+m5);W+oCAPe z=0i;Z=+#n*^4M9OM!bAusykJj1BNABpKzi^0GN)4VNw-Rk?7F8JYFr%4WN^mZJ?DD zue|WW+f$=#!WORm#l=|-o4yu3 zkH@dNG<6)BDtSC!c+$V{{PPP71+_p35o`H+(Yn4Y6Cn>W5yF|T85>hTn98|-%x@WT zAfqYUo*`0rC0VH?ac-}oYHpH0F`tjuHda?F73?4@zDj+yUd)98%slmQbqi-~oduR> z$@11cGEc*yU_p500|q5!*Io2Eq}+KjcTShaveOsK^?K<#$ssuL^2;w@EM=!poth@! zL#cFedOjIlh-!)8!lgAL1YWxE*Old$%PoTgmx zGae)zJ+q6=MzfHuFcX1-5x{MPJLR(CWH4NqE0Z>m?vll+*IFu_56k5;@!llr2btRr zA96orDrZ_y*Hb<%wWR>r%m!YFm1MSSCnJ$0SdiyTA+}RVsxHC)D*OFy! zDw9ZLrsm>AG8+eGv1y)|ni_W+^d(UyNE+{J^Wq|kDw(jgzsC7=9Oy4tY3FIEDVX!M z0+oD9bB?d*^~dylOqd9-VIHM_3B91g@@Rc+tzIwq>MN~IG1x(Ryl`RVYsOxBFI0dK z(w-~_aeWA3?$)HYiFd~7ZnH*W1str=KR^)!@jx++F#rW6HX3oS0uuDAzk78LHLYled{{;K(?c)t+{5q)E1m32X~C9 zcgf65D4Pp2nbr1%bELM8W~d#`ThS^bJG`rZXml}7T5;3 z=_tbu$cNp{@JMYXM*(4FK%!e!|)9>2sWV%k3;{Sh5r2x{qqd{^GW(=4*GW#nesUFZw{IAf2F@Z2cfRK0lqt2UGnI`|1FpP_)u*OxqMc>eS$bSZAX8Z_2;qtRGUc~E=ym`Jxz(N>Vb zi5#N16S_virfNrMVv;%Eq+`YUpb<|IJGW9zm-KN|a@Y|;oQvyjVYnMsx;MjLPdNezBC@ggIVy0Uv z`Tc9t9#JiIFOFpooqqdesAiM6{)w4trS#XDaB31-x&ZJclM7LgzH-QN*GW?*Q;xkw zk}wb&Ea_r)11GOTEFq>-q=9H)nqO-W&|XtkOy$C1e_RQ~hO#P*70k)Q8ADgEUpkm3 zOC;1+#-AOOz$`+81(s!>MaKUInxr}U9_YoUvPRI=4 zS134>aEzu~R5T;x9D7t^r4d?NdZg2N(uG?WRQ2bj;<89NP`69Z>CRz;{gi#WRe`FH zkbEz+W%t%r)`=Xo=?INa?N|g0iuH*^)Jn;<)9D;Eo~S;Ots*)jWIi0$6d#ucMh&I5 zM?T~N%X6ysX;u1|s?cKaf`W>E!VeQjTIX%p!TEHm-#-WiQqo1grT$+1_-U)8QrkUM zQm_WtgfIy+$1Cxj{%d7&q<=^S^e9%xciKTjf+FNcT$6M9@W@=%HLQ+ ziavyH^3e1F6q5&vC%|lB86Iwf+<*PD5srktOrqUrN!T&MX_kwUA6-L+)ZBoE-f|Ki zb6^h^YYYxM26+$c!CH;6Xe_j( zU$lbL1r!?NX*!F%EhVrnF8iG6LK(Yrb5l9wp+qJ(HD}5@1l}61G(-th9oPlX0JGg2 z0P=xdAPo4@;9(DRPqZqPl*ktzDE8Lu6%B{iyZ#uG_$Cu0g#Dt2D#a7PAZBV|p9_Y- z;Y`j*9o1^7RE55g?}`D15B0F&TnC|QzXIp_2%PIz;9MVub4|dxa<1e)0p}9$ykCKH zNd~?Nk=z%5Pc0P4`HuMhDI>d|_x<2`EwzhTqUKdX;e^n!=MorlA#b!=D3c^;0YGto@(@S%YYLce(T+hsb^XCHC} zm(ynu%BxQGB2gDaV@GJNKs8Z1ld!5654m!A8_*~rrZ13;dU<87QdwJBE-!PE<=~WC zY&|-VYG}yQHYQYSk(65q=CvTgaU)#7HM2`>57h_giVyjD8VX?t;63*cdr z+ra{m$HPeJJEeO2%tgZhq>nJjZi`s{DPC`#_Xi*3xt#gm_MbQr~H+x(E8%X zD9fk$eTLt&xfRG2Y{ET6KG%g+m+My!5#3%WL_YxxX&*w+st7+4VK!?PgX;w+P;j6DJ;ovql5b-@k_Qqh; zz&af##q0z6xC`U~4dVj{4;bh!5Y#-px-|f8bHD#MuZL4(bbHlw zx}kB0pmDzejl+maJ*AZTxAdUcb4)?w=Fs?xJ;z7r(SHk#lYH3NbEp@dHiWGhxxW1B zKVVSv?=^Y*YF}qjoIh*=;|p}U4Q1d}Dod*g!L#kDWJLutuyt22v5Gbe%|v$GKN44= zf*+MdvhviF;kS^ST-BRU9{ zix=N~8{LOQp6oVSs)Grv zC`q1*v_$tI(J6a{5fPd(k#6sF2pX0x*MMM}i;fxrSIeqXl5lvU&dC zFa{n?^h(Pv)@h=>zN9k6*!Yf^bDFzJ66h*JsM-Fmt zhJA&kMhKaJGe}XSE0%mfc6bR5jFmZYVne|Cv}oW|a!FN+i=GsV==#RW+i$;k6R#Xf?6uqi@+jO*{)$xdGZ+EfJZ4yqhp!`__H;4zyaT+@as{%3ywV0YR zyuO&-knJlu65PDC`dYoXs80qoCPm6}6_d68->1Rc3E`~H^hqfa;dyi@IC&G09{Wp<(?^dG$ zhwvYo)6gow!w}9;e%*LpBl7XNo*%m3BXg(dyEWO@I`16<5qCSH2WMU`@Ki*IK0#%J zolb!uYA)3mf-fkcp;UmQ4Oqwz59HN-lR{tra40@5i9rvFLNG- zjldCnVAi;Z?cks%w7c-3Un>oX(5^+F1ZRXlz#i;wyx|J%9#0SvM|FLhqR8LP3+&)c zjG*Tq*~dWaNyiPry0qAC z`md`2!r}F1cA03p|F#@~Q0;I8HxhegL!|OjX??R)*?9Vt2T=R4h)f3IDM4t2R2;L; z5p;0r%p(sAm6SHrWpoRm5BsE2Uoz@cQMqu@@Gi@G_|9x(#jufiSx$#5`H9lh(+ zsfXVwV_AOVjg^bImR($VBWcVJ-V)pulGU%Kb4j9Mt|eyj_Cl{)B!nOCjp zmUcdS8(s#8!^|QWnctZX7joXdGia5Hvcs?LOeQ?lFp<%;5d^5Fy^BTR! zfIlC(nXY(*XqZ_iJURd=2nBr4goPOB-2%Yqj^V7#O|Zb z0F(?oaly8a-i#>wN(x7BMhy>*c1aFKZb&0Hc(KMs{`=?14RPd#FzYyS1By32r|}EG zeH^(Vj@V)ln}UPkR)qO5$FyuAVi`^q{G_ks^b?`o@Zu(v5_yXoWe*T zs)EgUG=AhT!3z!^J`#;;KYeOT#f3v_K4(A-axy6+yo=M!i2EHzHYKsd&^AVx%S~P& zUHk&mXvyhhU3;3w$W)t*$*xyGbh?IkX_-+}OGx02LMB{Bm%zvi)rz*k2sInI*)#c- zeEtkZ((~A>&CbtG=BH(c2?^;GT|!-JIbsnhR1;+1QeX>Hplqsu#So>;WlPsfrBoz$ zkS#}x)0qU?2Bwx0nQpd}5%WA&ClBV1$X+J%jj!07a1%S#Ao2jnfKN=o z#{(Vm$!j#BD+F*%(KAB;^*O-op(lK72@YtY7OpVh0p71&$-R}Xf@eO95 z0*C(t9PGoi@^9115(o0p*{FKoY#e*;2)0onC7#U^OY|3KV?1aWQuc{#>6v#wL>1`+ zX-8-a)>y@|WvU8Pn*=Kr=|E$QT zby0H8yj4=nJ1ry<>aDk$B`l{)iDXk%!55ZhRbiQ=*@r+5ts>Hc_Z6CH_aa5GaGpx1 z38R%>50`V}Bk6n|ZnYhTjdmT|FM#Q7k;z$3J^nZW`R+TDK6B>rCw}hnM<0Li(FY$t zlb5q+&)hG+Cw}(vf1-b99)Ixkne3=dHZULI8oVAli#f+qB1>l9EHn67f=iRww`dWc zL6PWPa`zUj5~l9~Uy+$;G=k5hp)Fy_yBP?&!g^6f&#UOygIHusCez~YVwa3t0^X+e z9mLS+3%^BB6LH=%%6S0_pSDBSfab5NYGu7(uUEDUiS4bcS0x@wr*mK|nS3U6bt^SF zncBMgj61h2jc7)tx(evYICeqSvYxbi&1NCoZ1r#k!FO>fw!MLbv%GxuD!Odu8v;G7 zk=n&5S{BFOAbDM-`HYPgE<2j%MZ8L{<$ZCiUPn99j~#Kf%<9DIby_EuO$6Gak7dR@ z`}D~ZeYn?M>^1A|zU4@+o*=xmvWW3VPqPawkXwo~z8?F7pPVIJTY;=rdZ$BV`)*-^ z(=d?X8)aW!AfPOif*;?fZM{+qKsk#2e>5~wu9xYvkrCWVusiRNgh5aNZaFg&m2|=- z+>X*C{wM-KwAGYp4!!t8e1kY#bRhE3prHZ*{RPbeZC^*Vngy%r6h|E~x+rbdK}8k} zq8a5s8MjL19YWR-vu>wc`uH3vB;-K>3a{aZnqNpzkm!LSeAWxO(GjM1SrWKPq_qGS z4!^##y82rQOQplHI<{twdMuoNM(ehI13n|VtzUxzz7Gm0aox$Ofpa4kqh(X0^2N zAHDM93*UY5?_ct^E9L1Ypev6*{((mxeB=XX@;4I{B&?g-(-gN5&MK_y#iOej4rK9# z6U&UH0B30!jG$=_=*yD;u6_eRW#D&L0XeW|1Y5AykuX^V^}PxDyW9X;U?t=8bA2ED zm_JM_Ft8p#EuR8MLc>4%u%N~$E(Rl`Nm(a5{thV+hyOzMVeo@XBP~KeIW5^~3PkK) z7R9d+jf8p|J}h}cKM556Hc)8%3XMAn>A14Zu(Q6IC z=A9u`(?Tj`s>(JHI7e&m1=e<8@0q>F@=({Ji`rJW+tJ*(-9E?mCJ?^)%w8au{3X1I zSBkBlyaRfpCZ7&Yn&pN6eS9*PimTdHmYRyEa+4}9m*Ss%;Y&d|$>~BwpVFrbHn)D_ z)ZNlX9<*rr%{$Or(-z)rPB?G?X8iEP=yMg2S(ax9?N7`k4>>R4uBB&=7|HboklF&Thvq zm=*Xbanr+0(jjZi97fA$Z-tiUU-*Nd#>#!rvUuY7Z4p63lZTYYZ-2R%&X+Ghu8q*?nn=oF8CT5wsfV3d58h;@-y1J(M22h<|4GT*`rd=FcStgY+5%mI?MdY*b zY%-2>MII?mQ;l7#;TQT(W6Ih^U@}Ri1av?=Lg5rT&w#C&%!^D8DVRaKHAj7Q115wUGE0E9ss)Dhnyub z^FIjXCd0Xu#&ir&iXY8QlP@E93}4FedS9!Wz5 z-==2iA$Tyru$US^f&qhFU2JdDi{X-X_N~-gOR81er<*OgspZ{t-V3B}x>af|eL6ba zpk@otv4H^4Al#TjZ zs@3vG+2JAY;oaMqjk^f`!jbL{QHr;Ay6B{%?|I}MmY6EB$Vz}xHbTrE5u#F0yJ0~v z$dI=6!Pf4#D?wzjc;;Zo}GiHUKi{L=rsKJoAe?>{+OeI5Grhy)b*J59J+ zL>1|J&+p#8dUd_Ne)ZMm3(J+j>})1bAv?JwC}+ToVqYt+G%27Hy=8annl^Szd=G-O zDnsI~mLYIL-lB{!Z50g1GT3O}xVl~@gijPLeQkYhL-rwmr}G^gP_Tl^@^D&9=dP4) zwWPyZ7LnUX8t;_L4)*Mg#*#_{3%Z^94aSiW7O#wKDW*|Q=o^QcRni$l64MTmd5`M| zCycvQEFKAul04i=#H?OA4W*0a;=!QWw!+w}LQqjqmGb0A%c3$#W**nvQy@X*&LKf{$6oM{Mc!wR@ zZzpLoUD}ZW-h1d;oV_E`-#>)$KMA_Og9bE3beq>~?ztJu?~LO2?1SHTL~b3CROYV# z5{cq(!RxPr*WUoIQDJj7&M(3*q`m{5|2Yyxm>KP`!h_|H-fR7(HT|&{{`4Qc2UWC` z+mv0_9BR%dx@pJ)YcAg6FL35&nV}?d29iR(B?KZno+3Di5gSC-unJM#nIdyUqwl#{ zZV28`$Qu4=o`?Od7JjC;k~yOO_dW_6yczA~13>pXs=&E@<%d}jJ1+jHHQ@*a`H$a! z`=p2-LPJFK5E>$)hln7EM(6ewB37b*$Dk?L`W7!hgh|Z2dMguC>&} z)WxU|hB4R|xc^py#j405PCR|R293$$(JmUmBo33ou#G9m{kM=UR9uT9Dt$N)v1#Dk zK1^xS>XC;j=zdf~BdA+YDZjhyF74$0(uERPq!2vgFO5$joQxu9;P@^yBodCrN7ADV z?Bct{ixHQSTz&<41aTx^3NGc0fa1p?*CRi&E#+VMBh`BLg+G1akF3=Tz&zWMW40g2 zv(->U(PhzVLu-B#C_1~Zun`prMJ9E9LbmGL&4@@TLb!xv6(b_0h_oUq=KaKtP7FOC zGD?l7(PiMseoJXZb#>3UezyXGO>q@AEypzwD82i{Ew!Ib{Yh*9}wG+8XyH7QOAz8<%UQH|o+GMpF4xB$elt zMN|x>zRbwzIprtjvaQZVGI&39>M~A2xRZg3EhCkRV}~=PP>6w9MPz0#Oq7rx$q_&@ zdoc!#pnzQpqv0SzEwKO!gm0()t>VF$Eo1qf9>chU7#YR17~{2qHwyPMpiq8DQZ^a& zGZ@ljiHY8!HxKP6u)P-J!=ezE9iJYaM13+q`R=;U3{ia5*JtZ>hVUb^vk;k0qCu@} zYC@x+GC^{j@sVyLE2br_21KV)FR!nyUA(de-6?8{Q#S*b3o>+(j3H+55_BLu40~or zf>0jbDPPdkr$qua@726_aM0SWv|1g$Sd>@@E)ERigY28J5E>l;9uIc>zSFm*KYilk zNjFyb^lb^x%~U6F2%1554?QRex}y>^ED73vD48R)!>0*{j8GsP%p*#`e`{&nB8x?w zaA^_LUy%$RMq{Hu;z%*AiHSR0(c_gRm!M=bP!u!72`)tj1f>wB((Y@Ac7y23$mw96 zKPLo0Ad=w*ArKgEw0k~A93kMU5tTuS*atueL~B4e1tA6|*9cQkEWPs~iJX9Izf~YM zg;0j#K}{6gL5LZJh%J)LqA(p5E8L3=r-%k9?_);5B@n2{HHFcy9ola;;kbOPXaaPb ze$uJOPAG|G<*i9llnI}vjq*(01+meV|&<9@#r(#17{(I=bUm@Xq z4SMh$B%I$zqWSKuec!!?wuu&$D6WFbQX4T{WGpNPZ2G{<4ma?3FD)oTKVmj1^3aes zFVZEjG{Mv4bcd97He?M?EvMNI_({3Zl!4>Dw(1aLQ86jbby>_iLTnW|tT~C7q|Hg@ zda)8wG(pck_m9NpK`&Aw8q^foJJr7?cS*rz(OO+I8*VMW=e5^r*x6L8D$(w!1m;0U z4yo3~*ZCGlPIq{AV1RI6*R zy>?Nyawh28#<4S@$m?{hTqS`;>{b1=8QWs)P0{P!S)25Q2rX#DW1{8znMv1uVPO=~k+Z>e^}x^;oY#+KlV##C}BB3zI_&#Dx$C z9$a1d@hd-i<8{J%k(umDsdVk~<*Tb#E?>U1va*4s-Fj8tS1C83|3x6$CziC`4JJS@$knW?EzIHDOuG8&`) zVz@(BgGbxjfpCnQ?I15X&~Xxk;o?%WQjdbzaz}OR#tnIKv5;%m%h#@Vu)K%i@Fn@4 zY}>yD*>Lw;OVFs%(Il^o2cxkVVIa*tOA(z0DV~gTDIF(FoMtVth<}HGG41nb-=&3e zVNL|k2WkXn1a{c>LxTl8rKts+-K+My5D{$5VtPG1&1}HbA=O8(i5?#?r?&o%BM^8^HqKIIT{f^93vS-;!688y3De#V-df$5m9ONI4Ai79hGIz~; z4g7LiAXyCS%q6p@FA~i(oXrMXgyB&wU%_g%3TJHJ#-{S6M$z0T%r(Oi_%+(TCQ9~o zg`Pa_v&*FbiElOV3ZKG31O{jjI63|Vzl zoF6Xl^-M8w@$W9y-ds!0-anh1&)15H3u=B|t?|2XL1iy+|5RGxO1pV^lfcs4KdV+& z$Xc|bW@lA+wz%ZKzSfEnHYqnAs1?tvi%+WQ^NB`|YI2rawf}LVwhj^r_#Sg#d zz)mrdnoI>pV$JfEa&u6qSiexZMvpNTd<;tYE~@l?YV=R2k=R>!Q4=%_30%#E;o z&2DM4t;WS%Z)|O?LawY@EfB|tI+-3H-yvz2Em`&i7BqN>kxsHfr4j@*165) z<;{_Wg^|76-2SIGmq|9G@mJ7ODk>C4$O<%EP*{&W*~p&Q8m5~vVHjj4AmZ6NYR?OM4U8o{CtyRW%O0riI8R~Qr1L~E^8zjm!2?d$|56QQv! zYvkBbVZesR5ePxbpi4p<4KMNd(UrGJxj?Rkx5-%c_N7ayR63Qq1gBbAU0G)I9hU7% zdc`+7((M&yv2&LRzs(Jc=ICYcGz)W613(~dXPNl}GQD{%p$VqQHTvta8vZoE8IPYN zX?)UY%M?u#3uZr)4PnCi)v8sdE0ts;RN-1lrweTb7f-YtB_ZxxJJ_`bRV1Duh8ljp z9dNWmsGwRUm~1t;8>NJL;r|dt`cjO~3f}1j;Foxq1{2P|@VgUq0v#zqk?Dh7`!2F{ zNn7>1hmnRU4<5*jWf8ZeY&zVkKJPQv&Fz1>ReA6MgBpk|0+lSR1SDa4W+NzLE`ldodY0Sb@o|BhF4MG( z)?vYbV@N!Cd`kzJ1;-Q>(U7cRWD%9cI|#Oe58%7gM$SjJgyLXu%)Rmj*b|LQ28MQv z9B8a~sUq{8el$c!k@5ue^jjE?x+P>s$|)Nb-T_`yLbI#6Hjp#giMFvLt9&QrUB@?lJK<`s};}d=sIpEiz!QvAn z78(Bnn)}aYZS8?AEqD`s+=mp>?U2IUt*GA2v~&PJc^5lkR4f}#nZsKUG@(42pxu&y z;ff*zET6j-!OGo=LK%{TQ}Hsr9W9>y`)4!1>!{b4`k!Tv45+y=~zzllVSl9~Mf1k`*PsQGiCMzTde1m`{k=RSnq{biu& zhj8u(;oJ|+2GgkzQ}yA$)Lu@V+RLf+tiNHw!h@yZc!6fsLUIh~a1utw;sTW11togO zWyP8~%Lt>-wl^^5ds?RPGO;sl$A=kHaZeXWXH6y z&_NzfrL9Vp2vb%%l`cQ>uqPGh_8!7lnbq}LRq9|s&pV^H@rZ~9@{9NjlS4AZpVb{f z@*jNfTYo8hxLwG!#j>Mb+aP)&f#VU(gTaSIWRR!dyjE93GQ}mbhe87mADWvM!9wXr z+p6j8Y;TvhIzlL1OBKT)8k#gx{vo&q);-r+>+^eC(z>XC^*XQ@H z5J0q)n*;@?S*;5x@3mWEIENTeMx`zJi7H#ZY9$yv=Sc#d5P+iKCb2={unM7M7)EP~ z{J=}f)yj5lyXLEIwStfR3~+_EBf^}6 zRm?+#-8YC%!bdD=5=r!kwy9qD;`oqIv0K0p02vlAb_o?<$PEh>y9J3a>@P@&@L;r) zlI@uoQ#!u)?=a>T?d0#EMUeQ@EYfB&wz>nsKKYZ7=#xJQQ9dVBbY)EvA!sQ*oEj%x z+qjIEP%lGIQxMbvMb#HO09=h}0U5YD(IL`W%nCha6g9$-hjCPHZjSsFk)^ZrrOd0K z8GPc9=2N?I`QXpM;*;LPd|hLn>-T{7Z33Z>|SXg2`!SE;(n6F`OST^cVWwS&BJL)M#iUR|nY?M}5te@`;nxo*5|`e@ z8}Ic(${7&GnuHi%8uQ+>n?M%NzRQIkgOQ-+ohi(_eo}f;t-R|eB_7qSbAspTSU9A| z4&)$_0fQMoFc!p}peZbP80WW`8~`>zR}?EK_*~5I*-vH#*JWrR_}XlWU+%5vpMPuai6`dvZgcyee(QP03y}N$mK>7RDb0MKUg6C>}gETb%? z>}m5r?TQ}7^U$4+3lhS?ErQha7W)h^4+YWxw@5aN$Py+FNYW;Y41Ql};x~6IBx2bv zw+mKm=cqaAh7~8wUCBJ5dt$@;#Msc0Ahy7y95Lf!1*;yl<=74-vxP&Piz$7tn3AKf*x7wV!pj`9JmRt~ zvpu`Ex!s3@%Q@)|uUm$E-a_=^`|7oXw8*m=@?Cy3<%!!+>OdRap0?uxC$wvR(;Wz;qP9{~e zT5a|UM|C6N6(03L6~v;5WbrZPi|U)#uW!mghu9-KxRjX(g5*)^6%ssjyJMT{g&bhw z7XyvG+uZ)A{n4DrFX9NfcbnV)v@fVN^9#_Wvq%YN6wu+qcGoQH}Y>Ump|M$$eQKZs*^hk3PROE9EV zbtlq76MxOcEiZi!uW8U`b@;sQA4r!_AcyN$37thnHk^MJww z1`h~wURUqk_BHJvp$9(Va)v(~;tZaq{nzLbi5vQ#fioOF)bHgzL{k(|dI$-@q$*CW zRH_j|vBj)l99I(pi87~lSs8uD?BJ*eWKenK0p1>VK$QH((bYF!e(}YZ z-&|dJ^`+N`_g8-O-M{*)@BV0I`Fk(^aC!Nqd(QTobPwWa>ax!{YVFs7B?^)7NH#06 z078wzOrwlbQiFK4#J4V!%++dcZ8e3sGg;G!*E)-H<_=Zb#E7D~S&G^+T(mK96qCSK z9UVVm{?mDX$h@`IjT5>N(Hfz;zlBpus!$Exi&E%hyW2l;3Bt8*zXq0JNvz=(S=X%=Q^CyR6O>ArdP7pcgq!nYj3X0c#0f+- zG#w?8&NRamVkUOV*UKIM4)IPy>7AU6(HZbC3+HwQ3>cL|mkV;5t8Uks)0Wkz_|o4U zW|zsCP40-clfxtlMu0+zR5q;+HY3_)-xtsn|Ag|9L)U1PKj>2Yck8@dUOT#5p^2j& z@_UFcNI&XfyNBt5<>{2yCtiP~1eXPm`#3C!D@f}h?5(*>&O=KNCB5UEhkM@E!#^_J zf<<{!?k?G=f0i;x?F1Pqcfg$ps(r=+&0=BFJzHxKzl_OzY}l}Xjhg2~lFt|87&w|m zpeZJhq@f7tiRt*-fQ*0&VMh&I=rz-mG~0*)2oDql2u4irn|?PvZbk*E*|5&jKz3-h zieEsb(AB2U)utE~q-H~$!%Gg@pF&rgnhi?4(tQ{8yVgfPT5x}#{b1{@wKi!K5lo{#_jREe>J_DFXx?nnb>VC4gSj5#X8~D+N#8I$(PBY$FH0&sPec! z+9A}H^4I;yuHsmj&Lwv^h+QXRj);Ql`SXB?8D$^GfW z)zyM!e){mpk%BcpFF)$u>oC953z6F%!%ODS(ZksOc4xe$x}iV_(-W&<`<#wob;t2Z zPK-g5%EY?2jCX>*jIXoNX?8XO0V#BwzjPp!#4M>&t=Po4>}}(iL=p}wMuMZ8O1Y~J z8uy4OLRK1!pW-JuC;jTkED>*p`ZYS#dC{Q`iw<>Czhf-_<>*jnM29*6bM=0sM~50Z zI@CbXp+<>ChZ-U}RQW-LRaZ+bb3m@dE53`GJj!@>ftpMKxl=&yK_GVu$i0i2-G#Pk z3do(B4dUkMwJTfG%=EANqVM_VpLpWEz5j*~cJEc6SD!EbvG1cFRnHX2ELTv^6tiN{ zCR38K*3l{emv+`Y&}ZD!fk0Ml$3#YubyfeVY9i|%=wtVEwJLFy_b!wtorf2f9RtFR zuu7MU*;Rl%?*Q+>Jb|Ce;c~28E@0O|u19Q!NV8NY#6xj$l$a`tlZwzPb>c&Co}u0s zrKp75DOv<#`eU9VSuJ^S$TwExnv`{NvS?ks%C)Ok)nvh%oGhqGxhCl+(&?gAE*HP( z53H{T@&zlOFQ~j+ln8L85^TZpu`fm< z+k&;dUFhdF@N#=E04;=`Qjy4hyQm+J9kN^u3U_k;bkQ~8h z!GZ)>kPs`G;nJFdn=|T5fc-Pi6d~coujje}D{BS1CG6}=^%`l;(R#*WwOTF}h}7HV z8{HN+L}NWw+cxW5r{-Vr*E+MEL*|7v;FLCjp44L4B6&d#o^SaE+L?vPwZWG*EDPx2+!WH661FT_wbSx>5LD^SA0 zz7+`IbnlCXnkY1qBb!^QMAE8O)~upIJ2ze|z5knAAf_L$XG=rFA)l2}yC6tG2L#e|^~@P!$_ak-5VLNF++oE_|@ zyFt5bx9oCfJLc=4poqn`w{yu*WT#avW53W%`xvTkcg&jNZEcaR$lBV{B_bMErwB#h zKvQlHf+wNelfw`^+@rDKj*AU7aBadAA<~J`LeC)A<-gcC8-`;)d(l_T1o5!V3)LsUKj@bv1nL%0{_XD{ox6mOhY4 z$5(33>Po|(pN*F`G6$z*B1|(=OS_d(PuzjM7Da6+>3T5|UP|ex0Hj=N5RF3Ci;`I* zS{SQ$X~Iss8^v^2U(lCFg<}nLghqEbsyXm3tzx%5Dy=8&<+YYYT5bt;$`tK7q*65VU97A_!|g6 zWQ#GqyNFJwtF=0F47n_ZSi%;W7zAQuI*P{BSM@!TBX9syP$S*N0kML{I^Sn4PKl+j zun4vcx%9$L2hPd*AZchEE{9qGa0_S+IW)W67?L$v%eS_IsZ_AF#RRCk9p&7fQ^C|I zT1H|mbxiyvcRR|tJ*T=IO|zbWJ3R`fi~W#{E@Y13Q80UP-o-Y9anjwgpsn?gPPU!m z5jocrjMLH=L>J|@zNtg9OGcacJ5ifrc67LTJd|6^2xjd;u+ja{Nrr*@BTw#D_>#L7 zik$ZY_J~@f{9}sxnSgO^dAdljOgkDSN4LQIQy~F*f%>O(SYr3X&^iUoRZ0qOde=((SPMju12I5rzsW5^Z9kSi9DpB9iSjv-eZ zn+;0bU0EywiK2Bgi+V04M0)sFd@i-Tu&_M*E0TZKbgw5zv&|Suo3$&2vDfcSPljfj zF;X^bS0-a`a>DCMw;b*UUh1Eio#HQ@O%q#!HN$l>?C5oVJRGmBya<7-#r^T{Y(7me zP-pq2R|re!jnH=0PF{B&5tw*t5wrLH4^Wh(@ zvFA*?$ZbN?hJW0)=S%{lkLOaN1|9y%vjTL(Kc3xlrd|}Q@qut|MD&c=u!uyZfUIHaIn04ECjTBBT%hxNXmwhHE?EjZ;qne*}rt<5VJ3dqYIs z6GV3C15R`ZV4@z{10c~M07;U~Wq3*K28P6L05~5oeY+SL^e6d1`z;q8YO&~0OGSrT z$l%jy@QIi&wc@dEyG+|&;Ft`t$ zW_TSsPYL&8uN+fCUD7?JmkJGIu(!|cdofv#U2JCJ1+OBDxjn@;fEB2pt&PUk1qyEi z{Sr7Gz-Vd!j%IHu1T-2*ObuYp?Dfau8r-nO6c{rQ7BgUFKuX}~X^GxLM1BJ+1DHvf z9vHNKYS7STZz-gO3Tflipf$~&mU@13)~7y7ZGVm0{twjlf2Ot{1-FmPE5sM!@rZV) zYxTa^dYV(-WpmLw_y{cD3VNP9%@zyZdVbHdM}t5A0N*oQ+P4?$5qKeO~7cO zRGgVc5D@$qQ+;;CT3gpsDk;l!I*}x2Q+k9XPRRtZ3{uH%fbjBxZaA7qjb$a>2PQCu zaYuZE8;z~?EoZx|(qwW7r$)RAW zb$aI?BG)q3IQYX8c({X5>K%*!V24BZ7zZh4w|Y2a5DJgVifldA#@#l*Gmb7Y{23Sdq#agNO!h27YWVJ#b#n#q53r-W$gcd9lZT@ zAo;%plK%yeEOE1c9Y{VCj$HbKm)O}^-|1M* zmalk*X*F%oL~-C>VWx#Jv_?CF^BL?&yR=A%f|did#&9u`EuJZ_UA}yItz2n#5t^Ho z+9q!Pn>8%7yUj9?j^8O!zN6{2dUz^aUrR?D#WM`>6f@z;R6Jg(Y*oZh)i~D#qAPq- zVVgi`0mAub)tXbOTv;g+Ig$bkw9*~u>IGi=%OoE1(FUIKGSP$y^7Yj)iOcz|UN0B& zJ>)M-T$Hd`E;9$}0%$00Io+i(phWeK9_=yo5-h^+4SGY$Y~sHl5XPOLy^xRDvHXG^ zbc%)9u7)4%2*`EC9ECwWc}R?H6b}`my?Wh`@1BF*&iUCHSG=d_QfAhB%09CLShg9g zVLwK*IxRf3dp@RK;4U`)uDuy?1E(<^FjFQ^edsu%oWdBX%>dM?p9#lkN(|btKEx)K znRSdyaD1V8m_(IO@R$NJSsDvC6($0_dM>VKKF&<&Zmx*r14er?uf+$+jAoI_+-JlNHfq11Visfus` zH6iYy3~U>PP(uYf4IU~mpjP8RJX5|DRyMNL8+>!PL3J07X;VVo``YUg%X_!`Wn=cm zUck2)YE`ym;Mpmp+A5U{sx82b2}f#H0LHceyHtBS5IeTDB~I~@s6sRtq(NjnEn(ud zLW$Y)a4OY`ap(Nuz26qJVd;NaGPN8oZ)|M7@>aS0)+>aw92w1|Nf_zK^tAKJ>MNV; z8{$Yuc!&dJMT>0HddEQ zOx2RaxM0(1g_y)-skeOuA;X?CPKZOAPPH(;DAjQ87ReLJB+RibZtO&IBx@#j&O`nj z$}3`JptCJ=RWJgmr5Iua<3N0zEY-!S12|ln-lU%Xp?x8Sc86?05eJuS*qKlH3u0G; zxCqcF>i~ZJ+V$1xi3BMj1=v_U+_`(ojfpC+7T}bQGf*R60qT5sORQRwE;2Y$2;m|xmzR?zmrbc(lagR9bo8%5dvBM7R z53_~BXvf+?$t}Pv$9TW-M8V%_gJ;Eap&OkES2L2xf#cX|sKhwo4FKE`+C%||DKcsi zR)??{7zGK0#uOT#t(MA+go@{``Nl|2V9-_HBrkF5+|X!S+Fk(T15KRnmtuc?0+Ya*$RaXKb8d!GWo0W=sYN`LRUh#`=v_0KFtYzFNX$a+O0l zS)5C$3LU3`JX&{wIgN@;fWNteVTyk#+PPNgYWRPpUI+m7WkG^ox87(K#}iY@o(JQ7 zSnhV0j`;mI*0(fF*Ec$qjfMt)4fIY!Z~(0buG+LQkC@|g zonz(_ERg^aDR3yjS21SSw3oJ}THD4GkR4zLBxn?7;Yie4BC~*WmfCLWTTlyX$Rm_* z@m!);7rfCI^i7}wfxfuG?^6V)5I036P5~FeTrTo;EF^Fqz$xDscIEzG1!JCts(%)$ z{;OcjXQAr9J!_L%8N`%7o@H@q?m$8`qN2IQw(f#mRJA2THW3}kVr8AkOiWB;TEwFe7Jf0f~p`StA+q!fI8+}+;VsI071Dt>?EuD7ezK%iQE zTW;ln#!juI1JEntCP?IxOOgxJyfEpgb8T2yn=I>_s~ffaf!W#F19_214cr6zxg3#3 z{r*N75qq`7dRw3-IXQJ;G@r?j#&KN^L2ZlY*f+bJm*>5AX#|qh#6%iTHKEewT4P(# z&>tS1n?0B}-w#j#3R66iI!Kao+{RiGAzIaUYUL(ap^i>52{(0A!3Q=sHY)}4x?R3p zSv;yY6~(O;9w@C|d-L)QZsI73wTmLRuhX4MCJS~lIi=1CgJW>Y3(1Ru{Ee&*0U|cH z$rFUsf_E+cJ#|EnC}IUe8x~xBn>qkhD5qNl?oCXY;pvFPwTa#Dxuk&rzxu+E(jQ;9-C=71CvW1`(xRmtPPGpIkRicIo+ z5HBNUW#p^+%bbuMm-M(b^u>>7rY7?f@R%$y%l)kl7|a!z%k|aO8>JmkEtp3gg)p^} zUp=0`DwnP@F-C$oto9od2POrzatF4{4ea_w=t^_{YW{)y^|zP;e0nSdt`*^!I6=6sYH;b zLckx`+{Cs&+OBVI1`x#J69;fNw;9) z9k>&U+kx1Vd)w6R!%m&fk_K^gBL)tcQZyjBr+ub`CyB&{D#eIy66Z&sU{hcsQrK64 zizyNp zKstonlVP{JFIS*Y5F4fKUuLy~BB9{`dhw$dS_ynBJ9hi0{QS88X} z5<>S<8RX;;V{o!}H8zMZm&%HvaDAgLw!+!*GzktRf2VE?-7>7w7m)#~l?ov)QAY6U zZhEEL4ad@%Lzy@Znk!e=uBPy7VR56zRn&$!WX4GOckSxcSUR5@ z%P%Hd(P#{_TC|u!nKD>RmYk6^Mp@|*r=(iRmguJCm9Bc0{S^8XoOPu>1PFk5K)sj; zC%px^k2>{jMsyQQm{UU*Vz=OUBYL%RS^Lr#C(^u*AdijWf&>&1kDe%E-SiYkz*||0nHDpd>r5I?wlB zY%li6$jGfSD>G`7N{dyc)sihaEg5Xa#@HA$!vO6z9$|wAXd0gboM~n{Bco)=EIrUN zV;^j24$Ns7#DEVly$sWcgEa#-@{Up2vZSn1sVb{7GBYyvJ?8iSUcAi6tSm{Kewh(( ziMM?3`|iEp-LLi8__&R=$nKccwP>nNcvmsa^E!@`L7bp2329Y*g?lE1Q;YVA81)X~ z-q^p|sm?GHRA>6hYM@Wy!%(i;+RA1_GvvsdoJscGR6@XlznIjBdhVYA+Gdch7=aR;WmpcgXYle3Qri=lesTQq*+n;4{akmT>ae^*p7*{i}xMFK)TL3gBmIhNVTFamY zHuu;{sH=Ai7s5F+rloTjQ+InWHr8(zOfnG^OnY_HYpjZtevg_Ct1}tWW%bAiXFg=P z_V?r|9?Cnn@|OJu-udI;%!lBOKLkVlA(XrK=i$8IjXwl${2?oR_RJsA75|jKGY9jL z{Nrao`;WIi`sl3(kNf*)4(2QIPXEWx9z5>vTPr~$eHWJ7?bPJLEc)(|IBrx&t+_1X zLw{E@1kScMudwUujPOH?#nvyCD%8g;Oz9d=Q4|W6+pbXB%9ZUlv)Nt<=5ZLW`e0(3 zFmS(tuwSj#{)%<@}#{h8L_>0kMw|BjFd(L!&LBG6;sM9Fu5 zkltbMBuKp3@s9Z7jxQ7V>sV(89YUqqYlg`PvSWo(2*y?u?HC$fGMmLLvX<;r!|B2s z`W-hAO`&N>qg~tDY=xqe*|gCPOGB(rYtx%pFH}o8->^{`-Gm^kV7@_yXRKZ!MZ9 z^|pxLW?x^y-Ax$g!xwBSi9~@we_UNd5qp&s6{`>rl$@v`2P$d5>JG6oz`deTqwY!= zAy{^3%SA3EDea|#H7+gF%goCj3FkTL{5*9_qc{< z4wH)8vQhr0Wt-ungFUzBy8pw6Mi~J{?>5#8dQWedz2Elz-E`8pQ=H+t4tw{%EgOVWW%VD5{Zi! zD-EC;<42f&Z1mH!YK2`%e$Wz0=*v zgU9{-Gf<^NBL8j_5$Fca{L@bFx6T}NF7;!|4<7gT&m43-^+V7P9{2Y@{Nn=7J@_3> zVdlX8FHt)0*AWhQdn5Gc7%a-(;=3mM$ChP(p+-QvS*gJ)XirM(8kStt%-#<9aihu6 z4jFm62_l?{#h0~a*gFM(9_Y0IS7W-7`9>c_R+8(c=kG6@TRDMx%MMEcuBV{W4q}|b zaAbCR9qd#=M0ayvS{1gNbre&2O3y|qkA|?xp0NV?4{Lj3Zrk5~{}1e+6vXk4`em0I za74;3f6<)akxU5y@~|C!)N9^0G?_3xa(#rb@Q}3%>)9kBGgw5~lqS=nykOXB7j7lk zi(J`*zSR!6G1`hVfNW0whv>ehzrD=GttNq>5hZ8uw})gZ8V<A*T_K`4Xh8+?0COvo9ne=bl+21I8e{(c!S$K_rw@AG>5cV+$NhaHY5pD3(dXgxK8bYn z{~#Ux9o(%dxIFyUeI#EZ^xiTytcI+Q{lZx8E&;c2$1d|_?8LiV7qnxKb@(Mzuq76HeMDw;cU-wpH=>Iiann_!M(FpV?=~iQ- ziQAa9$x^g8dt*AB@Uj*$g*Uu8yw)lfPI`CRo2mUe731?YCi39;l&xo>f#kV+6Sqlw zq;_idX8LCK?wwl+Lg{+L!tyRXHnu{MQ!R!l8>(y$;9}&_WiBxXpn)UeZ1oFMx`rd% zaF;@Jpt$Uxy+@1pE+@k@1X<~sysOzVG#O3m?(OnplzH?3^XrH@^TeXk@$Hgb;o(1t z2)}M(n>~cszWKj~s2a`8Be1W30PXpGXwUzSWc|BHnUA25cmyf)5v0sVP=$RO&5UZX zJc5+@h!xH+`4$-bU=RIU^7AM8Qscq(lAlk>ml6-IF)Vm}3Z2k1STu2Y8=mUQKS)l> z(S(09>-%u=!8Z>NFwNav%BiTfLn!RUR!G&0CLPO}Z{6|N#`4p#3vsT(;A@#vNa7Ep zk4S(|9Qd-DK6sfD@v2p(m1?LY3^msK60v5>h#ljNT)DeS8HXLu29%iy%9>N%DR=h_ zLLt&ikE}eq>j|trY4{Ce5V9?ufN#}sr-9#+u?{tMX!!2wqs#BRR}!ImPR-fj#~QCheau%yf)Hp5gN$1KQZWl z+O0*=SG#@ay@_4Gdg_K&1C-9~ql=D2LtT>3%!hHA#|MB^@U7C`Cl?iOK%Gj;2@oQL zkHG3p0a6>=0~jE@=ctkpbi;wMD_TBpuyoLdbZ~#^piSxE{u1HHp>DO>J!ot4_m{k% zIqg7nm%qORXJnFm+=$&@@;Uw+vG+?pZ{$aQ9b7N@?|U#B%-<)alfYZfYTlp#I38Rv zJR<-TEbWdH+jp9Z6nz=9G_0yh0lx@#vw@$aw=tFnNPbFuoIpXfn+SfA1q{y?MU9zY zvi@qCBm1tPWXXs&s2K)Wc4@GZ-FXXl3I>3^*OOn4+GzCMp1lIzh0nxIK(rYK&&i zUZ}8dh#KW;pg>H-KQRdMR%>%yOtuM1Z^nEV&OlQXsc9yCj~nP-y|$y2 zPtCJ7_iWCY?BXVT(Fn;b?L)KS_dq)R1^xZCu;jC~bAOE^NJ{U+KTnKi_}FIql3l zDQ8{@bQnH}F|nl5Dqwbq$1^+zQLfi6cUK)0mv$yZ$~-3EAvqc&A#6&n8FtglBO)() z>GiYW5=O6aQZ7@?T|=WA!?`CnZQ;6@%7rau^^srI$_XsY*LoAEkYnkI-ZkTB)l89< z$@o!ms@C`2%l!?c0dLT6k#KKd&6D*tYJu6($!7m3UQRev)fIfq+Xey&Y-9`>Zc4Ck z?RQu`sBZ_aC^_`u8MvZ~Ho%AV4)PT$32~6WFn_^&8*T&lIlsmRs?u~&x}{iRVj>YE^##+4ahpIKYLpu-6FUtp zd51k=PciK7@E3;vYWOdQKVugjdzh_XJb{T9Coa;fwwtQ+46z`^P7KE^480V)iz_|y zJK&WjNNo`(wFMysgR+NB?*yCvJ=mn&sDBJL{RY^CpW?|AFoGT*O^1`c-6(_TdbQLn zVP4`y8YjJ69QZ*IzC)l2%<%w?tP`ik9%WpJF^|ViOvUlqDAgKWil;?_ads8h6QpVU z%BNOq)HKFk_jm~5P1B6CzcGfxv}O12-i@`3ue@@RlB$3(K_-C&F;YkK`G^EPxCuoJ z;Vw+?1-Ccq?RaEjO6z-H+M$+SC_ZyM6A#&P33u>bZf?A^LA|b_%BNMU+a-#SR5n_b zYZZN_smgNmO*DsQ!gbP2HO=tII=JU8rrxwewovgj4(W))rpE_%pICC--bdqUvN;x!?W#@Anfx>GcmQ(@*LTJ=at5 zh~Q~axi}g&_8mqW2TVJKJ9wE&83TNC0CRxcmkYqwc-!u9 z*lO0}1Vj~Xr*v%E28RGpMo4~$|X-Q>2<-{4( ziG1p99Po`s??YhT{{`m#TQKhhFz^2W^S+sP&YsZ_s*$K)kr%Z|1d6;B)LYu(ATA!< zT#Tw6I5S0_@Ju2U9X6ZB^`=y&8|vL=H%gT)+(#p-uB6&Z^;%V{GgNB|K+lAfy)H#{ zV>xaW3J?;js1BPoWW#*oF=6MM-(>nogQ-^eSgE$DLEZs=Q*WxB`~Kea+_TSq`D}+rE)Gl7ThLimB&s}(B&dPcAkAuNtwcqbUX5}vZ1Ou9#Mx|DH!ur&pQ&^tt&UW086*`_cxXGe zKR#gzYsrC{&ACBmH8JS5N|ZGySI9g~Jd;ByLi}jJM;Y@7hFaJ949FVjdFYG%%^+_$ z=piv-UV9kqWAQt^ywYA@dKjV(q!)J;wc0m3<_C7J$7m0`t^T+ieA~OkcSSBtU9W!YPIL#xVOEs+y;Sh9TuA7fg8mQq%)`?wX{3! z2D$lSb#7(x073zs0Xaz9LC-B4FC(+Q52Q!@BXCQU08yvifP~;p zVaNd}3gPd0VZrclz^ z;S2_;CHAw=@Rt=2%M43K52wYvkcfqt-wSdR!^=hF<1I|`ul+}-?d?HjjX0T|?Mj^(lFqsVfutfv43zIp=M&-3WG*+r>Kq7E>`Ac-O$bcC9f%C^ zXQaCI#MJT{?XPcMsls!0tauv7xSpF&hw%HM9!oeuZb?LZB!Hb}zuTzwgE-YyI-*FT zPSHR&7|_lm535Gk$Z^lK8idf=8y70wYR4QgM};j1mt{b1E11a4Wb)92N^GD_~r_bJhRuyS{nzpviJ@7plE%NmC#=s1Mf7Cn3)L=%-yp;KZY1_pw zb;iCwW}?8dW>7bZQE}K&LRVgs^5K{X$X(PyITRowJ4LuLy(3Bm&X>30_U$%I%*IA7 z8l7ovZ?|@pYt(xqP`fwjw4IgZE^P9Uk_FJeS`{DVU?#GiD{Qcnj zx#{R_c(k{OKzh(BVy|EIlHQj0lKRK2I&}@pe0#1U32@x`E@rJSz7sJQ`-n^tK>r3D{zNu|G zk8tI3XFyCb!WB|AbhoEop+K(7d>abmp%IA@G8Sw!J2|MUM{o&hhTG(jPj5dslAZo% zIJiHA-u~ZkaQ{BOc;?q{G7ipo?*O94soSaXCmEnC}43I}k#Xyc0jmmzad9UHjYNj&qwU?0Zwzgs6AduCCsQ(g-RxHSe`hJj2}tF*;hRFRjcm_R-%mh%uGZlZaF zO0x32v^-W~oc6^~bp_*aWSNO!an4rt%t{@=MHXp@$oU-F>1-|=N)yIS1x$$A&JG*# zR5~q)tu{2kSP`SG_1y0O6`m>tQwSotS`YN|2KaiwO-P&Ra79C4dkov9gdt+%iI$ z&|IH7%A9t?@KJxr%zSSi$65HO@5+blWAIVMyz{>AH*}i*R1bS(4k!uHziPc{t-&Xl zDjFdgtC7&F?nC!+)Q9E~t{iYu%H9uy6{AOUSkOp(G9+<^0{E&M^#;sjyIJ07(wQ71 z^9N#_IIU`RqF&wG@wVeri4cZ{aGLDvgTk_)!l{=#kh-1HP7m`?t6lD^WyJsVV`;Qa zcqfH2q8dyEkfLyen##5ktLqaG3Hk9y&AS)~!}*ywlloR+auK#3bJg#{E_@YzOMPb8S^ zk@qFHn-FSeH6`C8JD^Yxdd{*7DH}twSnmcU-1)6=1UWXAjX8}$V@opa`1W#w>^18TvL(+!a&{sH25Z%;g+rKPQ(FROUKeFoJV}jV84b1L<=x7}eIVZLD5N#co&cnF_QtBXg6LwGLk zB+CS92&wvDL(DPMypPSBw}YQmSkeIHApi(F!sJ6u@zpqInm^jKX_ui$GG#Qa`=WO;Ea zlVajbB;z?0eR@9(*+X)zO7f;+9lT}@cgjk6cq(QK>fCjjH#(ezmk+y1J+D{3P0me+IYwNx0>| zhg*J8`cC>$a|mh&kbAT(*gI@r=i$>iG&3NRrqg78^k%|(_29mL-kB*kV5T=_#F#$* zG{>~q*TanoP(CWIS+?h(^oU7Dr610pVjKV!pRkAQZoKl+2zaqA_Gx zq!{n`5g|r-->Yd5(0>B;psHE4En0fmzJ5CsfKrO^k(#CILf3p^*oB;G-zSLvd1pA@ z6(xfp4)yUV8t3YK*QaXfkR2Cgd*orUPGYOTWp8V5-;gSyrT}8JX3LPQvHiD@Bu7#g zqzA(QYQ&I8lmW_b(kglsMzjf+atrD9DZQ7K4TSeSZIG#x7hW(fS-^oAv!{7h&&;R{j{moY|wnM0{ z;3k(p_K5ZGtlzUf760gcQS4ZuXngX)|M3z0x_{gH)Z~ZnU

    ziJipy%?rdAJ0!zJ5??4>&4iMS?j?((y@r!1tude6uUWqz6)O9{0z{}15}HtT(cD{F ziUO{D=#z~`O@}6ERz5N1%T3XW?3S|X1+}c#>wD6sxM|2kP~4n$YLvnu<~j-ABNfvE zp$d4~P6n_m6}1M8Wsa^p~h@Q?Y@rg#5t z?e6`aC~|8Uxh6wkNM;$f^Jr!<1<^ zcByFcS!Nh{_c|bXzLuQUDi327^rgXR7jK3q@HixFC!}+SqDQd}ZTV|K|+NlVlm#I4A5uQ)HP7 z(3~v9v#Oe#b&f26{dLK(bIy@v2xJ`7N5B)(Ct1RDbxi~PI8}mpo8rNfHBstuqGV+t z9G}-*!unOdl;q?e`F=dJu2&ND{4knJGIG*&iQ_;A_GTlaxumrSw4=6%%HFz3qq!sy z*CNAP`0*YI^3rH7$;hyd2;DoxRd9Gu)H5bG3G}Ei?@l?NA~Kfe;4?XoMo^~Dw-<_0 zo|Y7pSwK{a@xtA^S}%jm$$`b@_Aq{8I5FmKQ8W5CyvkPF+vcoFa{@-pJd>FoH;<>pw0JI^Nn{ur)*3+sXqvI+ z1Z1O;I<$TR<^*hLTc?vpjJhnA>a)y=#y*c6HFCDj z@%5h8U{Ak!vkWXtxEJ7dbCnk!O~$M#H5uV*Tcn>qgY*M2htxvt5uDMC3|Qm6Bj11w z#CcWk$9=44Gm9B|MnKc>oTu{-w;$fW{j=NmAGwe2+<7FjJi0?B@o3TmZ&zaEPdjM+ z#owP&++fk`a98^DlfyY`&i%taOin z=ebK&?$taht%t`o)^6Z`ool~TE|lx-*Y_2XwzET~T9Cg9R8RasrejIvw|OWh3KU`e$e^Gz+{@edNu)SRk?CgAJvk*?B`-piy>efg7lkO3Lq^KIU2xikB z+XhP4FHjPc|5Z`7K4RM=ZH&BO%d%_M!@Pp)6vxwf7Rl*taR zA6v)lB^_5X1yY5xxZtzhnhipGGNiCAyf|sA!-t3DUt(k&9@5_1x2u7R7u8|g z28n3a>DV?OA01T#+3a_W&GQQUsVvto!k@3epTg-e`N)f1^tGm_yRyhyK3l<1;gvVi;to$K8m*RG1;!5Ek0U`FuN9{ z7L013rA%>ZuyH`n6?_1|O>Geb%U_uNk{+S|nPdL?wenZ3Kle6f0-yJ{YG%Jw4%~UM z68!N+t8h?o?05py8GC>N!~k^aje0qs-XvTLmhM=)Bl#jL1iBNDoOC0EJ!il}Zy!l?)y7-25=evRb>u=r& z{K8k&Ua7GWVSMH=Z)mU03fCO+Z0Q(%H*oU78-cCl?->pAPvPl*3QzwN%L3gf%xjxx z(7HZ>F`WaRfr%;CMJj=Ejq3GgS4`(|9c(9)wR&AOYB#K1b0%kWM}a_(2pCnj^>WML z#*^LMlg)H`vwEGVpGKp=bLK{}Z1`UPG{<#bWFulyk4tNlNsVXqdaZUme9yXS&g6`h z4GM>KDP(m_6e>AqhI^CGJ(ql|)q1OXMd5WNRrV_u6=O%LAcw$>`hBsl$G@3MAd`9Z zy0+2Qt^4LYzF%6~+(^VzdF`nQMai)B-pt zPr~H2(M;_%O0e+)+Q5At`@xABo>hi}cv0(g1>ON`ik+s2%qqCjW6R;e!H|*&OWs}) zq4gH25j-s`5BCUxAB=l9cBZUBi2@l(vuZo0JQ7?9JYrf4?Axv6WF=Orm1;>a*psc8 z7HKI#8aHDqUQWeZ9_1(-^74pGx!WG)y^Q*z&-y)3%iAgS zBY^4lrC5CjSW=Jj^ge`x%QhNd5P#4ninFbYUn= zZY({Ihr*dqwvpAzy0^zUi}x1V_v80wWxR0jNU3(QcG15#%T*Rm{=KQ{^_|6AbJK-e zPedsH)Y!!MRrnltag`;HJG%Sm|&U;)HV%WD~D~&t8 z2{nO}HQr&8JLtXF>&Lm{Qt3&_7H@b=0e6T=#4h5FIa9zLViK_nHFrr4WC_u45KSf~ z5xa;xxWAYJ?hun0b}?Azo;1e9Cmw@P4bN~4ydzGTGYFg_h7s#LF=n|Bp_W=~I0c$@ z!)j@*6oz885}=BVSf)|N$|skR`g`*sd+jyiM5*^2R!a=4h-$=&IzvM*sOIG|eF833 z)t67erHY^W1YD}BFXbY;C#^XD&74FVkTI=zyk|9&i-*`dbwlwSAarr-@UX(_K+l`2 z-Fuzr(%~?9Aqf~}^wFbGNVDB!va(WLz0ojO>W42GIJcS2!}k6$-F$-J7f7 zbcCu7p&_7$)RImlW;0DHgg17ot668NHQ&_9YWBh}ugzui^k$kxS;&6~U5yNm!iPP# za99Z6U%S7CEL?Pk=m6L|(@3<#q{c5J8cA0kgZF;gj>{NYNdje{aMG@dJ zEgDCboJd_Q%9Ej;q(#Zr1Bbz*MU5!w-?Ru`2o|+5M|6cbEkKX_33(xrWKr?ZFX07@6W%~KiOGW>_Zujn+uWZflI}PPl z_K)EKxN?euPX&mvUhMCpWUQivo|Fu4eks(!ee|>u4A@FaA32h7X(Y#+XP9XsERw~E zo@7b7P>jfjE%{*1A)(DoIS7kdB>e;<(k`Q+cqJX>aiojPQrMO!GE2)`WYz_7QJBHO z5HsE=bl5v|L(+?(i%xRLWS?kU3g1^E$ia+_xMex&NPgMM9#zf*Xebj zxJ2C85u)@)iIoi+KSw)6>5bB&4#Yz{l5vbO>@isEyE_6SP)4oOy1%w|zm;5bTFynM zHcSq=FF*;P8e)*4hnSMkj6j=JZ1!-vmV>LvWuL-w@H&QM=%5{0{xL-6s%GkNoK$O= zqK)`^D7zUNhMur^mZ1C-vhP`mhdps5Go$#CnNi#*D-o$@X4K50u~F+Qh6#~KaiMQ1 zYIT83h$GD0c%}n>zD&&LW@Za!XSKrd=I0iX31)^)wj9mTYKtRz&@AWmTkWZu_L$j2 zEpqgql|j} zMM`cnr<|uG=q?{lNv0Pl+4U&-pJ61e;vVJYJd5W)VI&vz{C|YUJnH&9CfnIi?_~rJlWb#wQl)5KDNbG=kJeFSiHY@>5RvRPJMt} zJ|SZtwg$`{=@Bkw>{MgON=%RN{#|>2%MRnm;1TX`?=^O6)*EH#*MHsm#qI51^wt!; zm>%JFe>#X#XGykFgWB@b_{sEC4`twC*lN$uspUU=q(^b6JtKc({PNqA)a z^yJ~mPv8G3Sn1rJ4MP2O3wNo#uD>8_vzf-hri%XiP7+rYJ>Y*9d5s1k{KbCJF5)A~ zG+5H?4VzK2(UyvGI9RoY{?bFs`|G!f5V>3n(xV>11WR@6FL(a% zd#{5w^_R%+AAZmKyR?72KiIeSSK5O?bjmhCG#OpVtt>HlkzxSH^LNxuyWZa?dw}ze zvEzTC^hC`VUSy7wUb?uTmoAE?+DB9f3cF0o0jKOA!Cm7?sG8Jky#bGauPE!tt^%E6 zN54f8_hc+Kaz?ROGTiHtaeDFEwTpq#gFClw-I;~gtI3P&;hEmt9|ib|^#VoB06DOo zF^T1vwypy%uO_aUEPUmMPOKzY-Na}pG}LQ>UhB<-T|2TCJh||DBJT8O$$z+>z^~E0 zom#(Gj`V9gRc~9mmq0_vkcTKN%cZ7Iz>(<4Krgs-F z(l?mv4*jM#MAxc!pg%XMJ4o-^rgy=FkebA|hHU{V!C5V-#0WEg0MrIG29Bd=lrNnI z)idHM)iXkS*kd^3IIT@ppHdvBp8fqe?o47tIH=YFrA?A2af-h5%1b*xdGklxFGOE@ zZu>`X{$%H+m&tNYQJlUxaiG*hWKuUUta(1!4J1eXpzY`S!JBjaxP%V4Oh06sT%sQr z=*MOF&yCRvvuPL-qUW4eO2IU`fKSq*gdvhoB|e#x$)}T4iTKAfkV%by4r@3Z$CF7# zNk7m?kjI8dynsmN3y(@Mg2-uu_9#_V)?fonqtJ;<@}AhOIi>tA^2wZ5ekYBLT}H;# z$IHl=`Y2kdk3jg%)tj&1_++l&d<{pRjG&1|NLqMAo|GqQ=AFK+rbCDdN%AGe(c#@d&uBvl$YRNBsehO+cklr?=_ zq^wHs{^#ziPgkiIudhB`&-&`qRXXN8U8QA2SD@?-T?K){YsPGRN>^|h#%zSm=?WK5 z{J#2hm9F{!v#*+?(WQ^^FxvDn9!8%&#=~gTQyw;43nd@t;q!fkhf%BNdD!UHe+VAd z`a{)lrIW6e!qyAO>lI^bN}_l=nL-XI#iOWGNJNk7?Li*LBBH}n{{`avwR`u&PVwT_ z#%K_)JsOTTwo1up^Q18xO;X;BqRM(}XsI={)b_mBFUYs+C3ourfdFkZZ%H`e zh!;0OIH>R4+udbl+cOBH`7wZ?GO|gdG~d_%qZ3f(QBm%d12bja95ME;R5M zClzv~U<*nBRf7FKbvQ}GVAngzp8KfFg5snFim&Pna*8!GSzZ7vS-~V>wH|l)o_{k> z!yVhmgz@}){Gf>gez3`CbL=*7tb=j95P;PViDh!qxySn2sNLUd_p+spVj>o=S+PWs zbwIDZcOUss5ilN3th5p7)pmzYDK^}#^&%VW$Qu5@=m^B76vY5OGcX*Lqon5q*!^c8 z0Vx!-2Xsmx&Uo|&lc^geH6>2X4}dV->4aigk~A4QMl6Ey5E-?}NO(rwrx7CJgho_> znt|wGX7B6pgQA^;8hQnOxNdosT607~7Ycdg$eMKEhr>pHbQ5;K>KpYC?}>ogxds8zjQf?LNC%U`~@F?jFJ zZo4159PGE=n>dM$ivgl7B6JuxTA&&VU?idlv5LpzKsAB}vKf|}xtXa@)mOzIQ^rf&1IP^)Y=IJWvD3? zY&zj<4>lwaEL#rAfaBp99}vZ8DW&5$hPIFQM3&i>=?R^H+0+wYU6GQ}gq|pvh;<)5 z5&MWjp)#PJ{Z@YjwgtJ`P4*=Lg@!gXiXuS0Oi#G$*g33fF|PRy>1A#@Yh?*rSCosQ zw&m}-QaWgHTynu2$*`LG!HHkBUsZvg|5T8sZ#2U6coI)b1cN>~**4}oCH2rC-c~T=I zE}hPlQZ*7CN$*=B?u|?AyD^4W)yerU)@Z^nnH0fMU|$ktbbLs1K4r8`%hhXsp*{p` z>egg)q&sjdw3A;_&`>jEW-bRgX$O?aSf2{&K{Y_l|; z>wq@Shr`j>@Br7*hYEa~(aPDFA61hHJOf4v6YWc&8F4_MxY4h^@re@-#NU2@Hj8@E zjVnYqCK$~G^1jMwYKJvla(O0r#&|k>XY<5*C%Q4sZn=h-3T?mt#o6!7e#iQ@_3f%& z>c#ALsstdyHMaf>6XgSY*!r)9teMUQBDH8{r?JzH6zUthV_<^}2<96e;3W{tuKSwx z|1$R`Fp^~Fo!^UyjEKDNs>&c*CIyDFEza!@uuEWK~uldvIAa}%-qnf(>KPP(k^_&s~xg{wa2?0r13S$(+71qHKhfDZY& z_naW-Udi@z?Kwe?JtxSm=LEU*{0w^M{Q@f4enLGbNF?v@6X-cX;^+Yg%IQf;?MI5f zq`42CcnF?2jA$R>+{OPj1hV!_RC{dD^{W2h;{uyv{J|4XsNZ6J;+($txLg=d`~g?Q zQw^Sly+qm>Mp_yX5xuyZP@k#)X%WA2PXOxr1K=J7j)6sftAB2k5)#Q?do(-IM3jhP zgpTo@pM?dQhy;;{L91fMU;p}ExRS2?n^)_v{+mjCt-g_Yxc2%@*kM7b5>AW)AS}Kd zooA5fMp?pLei82{iZS@tMVpQolIK@kNvb3dlMp|ZcL-mfURz7oH#X|7e@L$hba97w zfe5b;otnU&_*4TB9Xb#)O}A+vU`or7kXAu%=x|^oki~<%PxDkt;>Sd^Z9;+3aM8gR zI1GJD$3~@74X|^{mH71T!9ikd3&RqoUJeuAlIJ+(eTtSv^qMl?A+wO$0%F=K112^t zt?)r9g%3&x&JpY@K2KRt7^at$s~`@l*dTlEl=z^Y1#~~8v^OR0Iwo$K7<6=m2)3X3 z5}dEI$W$OIezNBCYH~)x$aqFHWZI+(St6B=w)a575WJIXMT%1cfxosH*9Iws;XTJy-q5i)&R`omU!kv;@rAk+$VP;6^&ZRJ6D#^X8VCDg;Kf9oZkw+nu`Tqwz~kTiNI z2PJ*Hz)zcJ19(BY*6-M|KS+Ie?=AZi(?(naqfP$coNm#l%{^C#ExQZ=q^TxoLC~@j zi5XR?F&-SY>@?~$S_2KV1jG7+CTS6amc0%7yR;zFmYqUp!DlmQ+5I1c%y_!{{!bNu z;;HmgKT)g~{g!J|0ep@;4m++L4AG7*yeo-mmMytTgVZjQlp< zm2!~orF#$zT^e<1++F`r-*BZ-m&V=o4-uwy4;prQ{~>FpVV8Nw!-ie_)h9CzyUvnj z9X9OXYcoUCKWx|qAfVs3f<`^%y3)2w&c`DlW7mEXquV@7G&Pr`Ge&%vuex9r&U zC_Sk53#sHz3x_dTP$;Fu80dY8m!KPQN7{21T?C*w^=S_e$GKDDyAKC+FEN4OQ~GmL z;yy>iu8E=jNB|CJa*xbU-$JIHAhXhM(V5gdD=qvI^=64YEKzUf$iuBIJQ%0^kGZ6S z7GC`gExdXL5%VuRod0C$_)VWDp#TR=fYT&D6W5t)7W_8Qi&Q0t1w|YEOq?R7nCrz6 zN}Hk=@#~$U(SGI`yLOt6V$JhwUs>AkXP#3@T3}q%X^Y?D?50}a>>bW%S2_DIXQ$O$ zUR?TgH1d8^>P3LQ!Agou4W5b9ytB0YHr0!8O>9@Suj0J@JN*8t2q_ijj9`X=T%VOG z($Y_5iUcKelFLYAcqGs<+(tbI6)FU+fUrO#7~lhd0^W}l76r> z!>*j@C`Y~=YBobhzKloj;#&RS%OxUTM$=Pi=8XC7aBR!=X~V{+H_g$I8}FSp=A^Y;G1edszz@W=mN`a#@z)EHNm< zVRTR3=i*qxO2}+%&wvjttI_9me4_wi3RQG1FO6tPqlu12MJ5zqH1@$$0n^cYQ7x4f zI;tg)w4&|-e9quzs;pXNg`(j_!cXA{kL&V_M4MG3V$RCVT8-A2{_%@yx2#T;)vibE z99SHK#Q}ZsHtO%mUK?u|^hN1R_O!UUcT>lB&7A&6~E% zYOBm>otuQFz^!dE%n8hR+a9bPru>m4-tgBACml^k9-btkg%nu7obb%1$jN znpGmF8e;{Mgl^Vv-rU_E!3DgmR%;r#Wb(2s9xY|?wYbTAnStvqH{G&w%IJKw9!z|q zg-1jmn4}c&otW~7rZ#hdZr=3MhK1GcTi@bb3+!+<%$U5Zf^D{&$c@2Kwe>%Hr}a9Y0~9ik*EY zIjg=)Y^@lGknN4jmy4GPaH?J)Alkl)q0D>1A+oE4eZ9!dL;^Qe^mtzg5vU`Rd6rvY z@_yErV!th1lctnJi!7QGU$RKXOgMNK51v+$tSS)XS?h%8>K&w;WB#V#U!U z3~SS5Q8#-ah}c4~nzrPYjG=R37;n=Sh4A=ybWT!xG(Y4awXC^k1?~}v2jCBzV$SAp z+ik_W8e{fbIF!)3q}T)r!p0Yi8% zsIz4RmOATkGhhgAqTT%%3f`IY3f*7@2f|73ORRpT{4eaFxgiW0>3qh}q#f`9FB_EA zx9L#G7Xm);Zz8k?hg$Sp(Vr`m7UockPWB*^36&JZtt*o!oiPZ+fZqXSlsZ)RoPyA1 zr{JmQN=)V=LD$g?J0__$NuEi<{1)RZrTYl7N^mkhjjVb^0n$V70!TEr2&L*yqr-C^ zW1h<)u3pfw@DEbfdI_mljNhAlLj8gIwECL*8gm7|b=7-CefpgGiurrL_wPSG`RwGg z#z#JKPJO{!z*CICHwcNrc89R3W8_64!{qJ)Q2O=|%Y9Lc48lVk{&MZz_+Yefd9`_M zoWVsQv0`0QnXy{3Zw?lsI}4Y;b-9_HB!(-Z_1KzZ=bAUHxt=rDP}!Ox^sL-8l}2d3 zSV zZJbp%2z8O1?5Wn-1p)dW#V&7bO+Y3s4tG>Lv7DUj?x|NIlSrOeCYzgAYu+n>D`HiI z&%_uL!&f41`>mdBA3y%UDesj?@0#l#$1E&m$iK!QqhGtWzrWk`ULlwW_hssxe|?eU ze=gFDKbqVm9NPc>r~ESUezc-DZtU$HBgjKgB)&@fAge}bL6qJ=xH2%n;2&Tu#7?VA zEn670)!3X^j0hPs3{5-{J9eaRnG2~sH)(WX;eKP1R9FTy$8l?a5Lrkqr`(RwHyZ-U z6f-()H!*34Mh1zSOg%NHvY%Ujx(36sXKNkw2E_DbM)fIYR zd2}_E5-)o#_txORH8^k$`EmvhTvONy&GUDz`ps7ztdY7VS6nQJ-Y>~IjCUAaxA5P}ZPX_WfQ*?fayd~P3mba6%$3UGL z;Wub7Xw490>~OwU>qU2aySvf7iYkJLq}&&P_f`$LtFNll78%ma_gWaY+D(gA@|SmR1plWR4I$=yS*N;GCz3$%hZNjI0}= zTX58i7(;!Z_|(Zb7EzejRMhc^YCm^u!4Sh}1D{P@NVa=cZ-ByJ=n|1(IL^6lhPcl?(0x#o z^wVmO*$Swb%?`6!z*}t5h(ubEh{@5X;!7~tyxM}nUy_k(jd2TU0i{GS6y+X+1cJFZ zK97kN#wz74{qj|1vtdg@`4X`}m!4m248Qzh^UKSN2LzL_fWF z#emYgSz++qfWr+!Ky3Q#Z+NBSKJ^KT495p7kCjhmHN)^&798jZcuNsK@rcEt%m|^ruuM7X?oy9%~T@4{5-~W zGgT?5P)L`V3I%PIwVpjvt9)X5*&}t!r(&ReItg90-4=9_k^D*MLOgO&{L6y050=yb zW4KNo=U55U!kSxJJsFT8O&@KsbcsVWK%U4yDZBn4fevuhz$48iGEwr+o#9Po6?;lE-Wt zt2aCS@O)$>MKFz>(W?6%lVpe~ldGgvjpGHFB6--M{#c zpW1M@P?haJWol0r6`Ie#HEpq2h4W;h&N7A0#14~77OB?zjbRAq%7Xe0)Pt$K@H^v|sPI4aV11TB zqBb)I<4J$eo@J0ak;41#BtFF@nCktdcOZKIKzFP4`$4Ux%E$fcEqkE4(alb|I%&4z zhm1|Fjvw-N1>EuiAz5XGX$oP~Z&OSyx~1wR=CZfFJ8-&{U$D058XPb?(21gJ4{C02 z;t*AAx}v=zGgI&^d9UXD*?g_Omwe@q=Bs7SGpkoMVNl&lQgxjB(hegVzfHkEx!Wi=?;#uzdmkWl*e^}l% z4qR%7;;LII(HpZ7;; zk*ASJ#jE>KTI5F+kw}l0`?S#HxCrK&@W6n97?V{rgrZ$wy-`~{P~fW zrp_0t;JrIZ!PJAUbppi%(%H|2Nb2c=W<)DTK)XPQeXiufNX$;rxC2s1PT;M9fCJ^# zA^>s1SQcs#h5xsnZU>wL8_UH*27~;7QB3;M^2_;R8b}iu4seGkvojzF)mi(XJ=7Nu zr3v^b0Jw}}0?Q}or6?X3v$ksD@gHXV97dNpwOI?J!weT4W?h5KxKrWjqE!M+q}CP+ z>(zzY+tAo?p`Kpd;u>>AU62UC0H6=x5@;>a>m_ur1|!c9^G4J)Ia(tPwIO2CMI)q< zOEpf1h(=gv1Vnxv2Sj<+9Q((SrR505saW**czt)mOYl>S;(vf7vHi5#gG#c6UAdo5 zI}Q3HEhu;iq*B@-ok9)OrD-j2I8(d?E8TMf47OPuoH*1w(0B;7Fcr_&Ea5{-zG)5M zE#lV~s+RDJ!mNvL>F-F11O3dGD3^2{y#3()x0X&&D(|f{29!p=|6WVuhf%)`G>@kC zY?`EZaECPYeTut_r|eX7^!=M|B^z+a^*=Xm98(`!as!sBz#$@n!C`^Jd>$*Q#syb+ zCDB8JqpO23MQeB5bInZLO?QMyFh$~+!VLL(^H8EbSoEX3-bcEmH6c-y&W<~*XczV*HD zZiZB&Fup%4aZ@n((l7VFV49g>xK*ta(K%dy?N8snT7RtmSZ2ZM#J=^dKmGI9Uw{2C zzrBIwYE`}?u`0v|QF1MSghWzSqj<_oNUf@m3CigR1rlQm_p0%vHyZSup2H=>%|UNS zd|_}nZ%eS-kKu_Gi^LMK{n$R@I2_H*#m35Q8JitnZzl62pQX-xmOArUdP={b!~_Nl z3G`;R!v8|K>c5A2pJnuzLT@&&9QBP~QO56V?&6FF5kTn@0_Hp_e4hW2d*%Rhu z_(3Io>L$feB$*_9B%AlB{0gJ4L5Q&LJk~S~98QMgUHR2;f`-Yqi94ywVT?PM1lk?9 z#HIg3*nnYt_(l(W*q-HHZ#6o={Kd!37NF`(apB9dx%tjJS8r}^zV*gm|MlkP{Jd=5 zqw*_k#}fNp%Z(*tCx=Ef4sODI76FgxK#Z`M{%+kbOiFWeTqumQ_urrO9@QQ$VJ8=f z;rnD;Nur;Hap`lS5v;)|D`K2ftGfi#s#bsR-+lY-YW3lVW%C{_6z21I*Q6KbvPAaE zL~+Z^q%%1;n@(|Sy5@on%?1D@0&!oddZi)}Oz~hSqUa4f<31662nE;e7}2mX z>a}pM8=bc#2wNGyk$CF)56HvforMKB?q}WW@^HI1`o26&2v?wrh#m?DDF+p#Fi{|I zDZ|O{UPP7gn;2XW^IGqpmz(-O}gl<}*|e2EE&F@>#l7{ExveP|OIabo3&-d8Kb zw9TOE`JCAk=n!mR2+9Xo$FhE$2lV6k@yf4g4hcBQ;ru-RW@bmTFwx>M+hKG|6{V~( zo5ZGbPKW0hj}nf6g$?@#h9ZQ!Wf?2M>`umGvE1CkLM*nwFPrzM{7Nj-nLwbD40hp3 zL2}q4t|%dxC^8^~am|!^Kt+fdt(MW*-0XPIDC2W#@~dh>jtv9S7{+f}#AdIR5zSbW zaM%1@RdQ8PJxqQ1G}1+4H%OmlxftPIhPSD#bXRN7RG><3iYQpgM&5 zE!nsq^0^(HgRvdPkQmX^k_k9@kuMQ~*Kx^z5VgX@ zg|SGb`?K^#L@phs$xoVo*P_U$YGp$t6bF$}93GQxQOhZxM_>1ubfY5Dsv>cCNm?Kk zXR??US+yaOtG0pcVlNnnU^2IB<+KPfSa9O>61{|IRpPNY?!X8OM4xTO9)4II{5?O9 zm;-BA1RV$1X>2*NaX(-eV~8S_uaW9#J?aOfcpO zE@&Ad5vMZIK_-5wXsItD6TgH^d;v-5AQQ!3>NGM@yrq7X^8S+Onvsby{`=Z<2*s~I z{E$|?=<*T*`LikdOt)u2LCz4Z^q?5#iWCK@0U1i%XlSD4r@AAau3WxUdFQR`m*nd0x8A*c>HF`z^}RRWeCzFZVNArLW=(yjxl^A#_E^;k zPQ1t8o1}gHK-z8`N?a{<9eA3Ty*JTIk8ndcJSrHq8yg~mMLb~erS}(3zc+DQUYLqx z=TI#Bq8X%S(eep9O};Mj`L&Xq{VV%ny?D1A%fa;pdB_*qzb6v=>!ruvi^P`cYhBHB z95r8Z%RQ0a%+AWm4-?^Md=V}a^u8F!DS9f(r{dff>5sn`kuIqwfTKxxW)@v%^_hrw z@y8h>;~#%-GM>PSft;6@1+retdk29(BlMw|VL)udc&#L2{_A=!IfWE>7Af#GB>f9W z`hSk3FBE+#F!gA9u^3XnRW#KiBO`%$41L<62lz>2$*8b?$#~y+5Pbr>dMNo#X{lOJSZA-bBl9xbH(jyJ(o$vT-;cW z9Roo`fwfquyYbxGy}oNZ#U$y_JAGhI10N`tnj$G7QH$Yhcr8iK#9Yo~L4cn`vgwFH zBr^PW0nr^}!DW^z)N3-IJ7nl==>y`T}clP^P6v+&lCD=>YZy^bQsN zR?-nf;U+<>v|fqp4~S#pZM{D_e}Ks7AK;~FVh7sC(+X2@%yC>oSwQB-x@ie^*O7(E#IxQA+gUG>+cLDfEI z<>kH(5<{)4*Zg|79aOv;HE$h67h!ejEt{AftgkVs*7jXkBgt~N!4DuvQAQ*DjNy=) zoX39pUj2jM*ZeZ5DZ&{?2S8;Bt9;1HgYo)Vpb~^7WfQlyyN-c+y#dC}2MleTe*mV2 zq4h8I8-Cz8$PH#hA7d=@82tPg{oMD#&yT^+5;*`(Y8+!0pv@f|0I-21dS3b&ae2X~T*{$L}ba?45W_2b2Oe=p^0&FdW*$$EM1qV0{eB&){4b7yvjn-ee=o|5zQOttt3&+ ze`Ox){_mXzxNwp<{k=Uz?u`Bpl_`KmeL&Xf@BkAdF*AeBGl3f~W6&G5&2mDbcMU*i z2Ar8kyoi%_6A3p>I2Ld_!P^2UBiM*{;EVuIMZs-_dn1SN^l2IPO8fxdLS;7g%Q^ZF zpP|3-v&F;MFTymzlIiZqn#j85bj#SOp|dxTJCSiOG;Z$nGWKyN|mMN|cLmQR*Pb}XX9(Ap&-~0CW^SOhn%gHnyIp*M5 z_YI?0zp-!Z-(YNXBeyB&&P5FH=tC@mqUd!2)IipLr$bop zey7hSXOrQ=xMz;SmVZHChNc})5&BGr@eM_6iZnTTTp91lDp)}RJ$LJIWfolui6rI7uAGP{bYgTCJYxYRUZsoc@dS<^FNdm-}aw#TSZZ@pzC6A;2LS^o8GE9`AQi zPl069svRw#E~=bvKbAaRn9ruO^Cy$ev7@Dxvcp&f8P3TQ{x{HhNcTm)G+jhyYQcE| zi7I$Gc;y@|U;Fx1pw0gMAHDva6OC4X*l)ev&3BKMHwM_Pon+GLwoVl9mYV~)T-^Fg zJVmZ-?q2=As!rKMj=)sytN;1cH*Xdn#`9x2Uz|%X9p#wf$un!i;a)d%@0s8;K83jO z|E9T;k4Y&SXJT`)Y&e@;Tuk7tf(g`7zRH|^;Qfze5@#PilPqMGGKG`NbJ6JB^2u9S zZF6&{J8rj)=$X?;@~6Ks%Xvae>EoQHQ^xnz(23rO4@2E9U~Yrn>DGRy+u7gkjhc7j z${s@+3;;(DK5*o#xA5ixuO5`;1K{Bx?44x4ad(~_Cz7e;`1nd;{sDrFzA=H@Ayi(oArLv9D?E#PtabyDwR`Lt7;Zn1bap2fD-+-dE!VwF~_INf6H z%k9fDCA}J51+h*MA0gOc1av7%bOz$*)JsO9SC-98^i&K1posF>Ll`t;?d~W#-C|Vu zjxjMN5hvor(vDM~ZZSJ$r=&NtH`p8KTzJ&UpQcX!EOk;m2Y;42`HvY-J?lQ9PB(6314*sZ4z3HbG+O ze%a-0l#p=*$V3l^{lw7G+UDgYO+uuabV+5H#t~;YpS(-bA5Z0(gU$oROk`C#B_wW9 z)}_sB*D9OWHm_B#RhYVC?8SOwAzBwX9Y{LqEXoTJIdY19W>9YP1zy3_J5~i@4*qF8 zTquXMOkerngD02M>0)8+v4_t^`>5}_Z6{v%X5E+Xj{PD19xQidwf7_4_#m~q!cE_D znXE`%)fo|Sr=MPt{)z}E>BWdnmkYW=V+&7R)*K2r2Awj#2g+^0|8N~H6DL5Vxnlr= zD{uD&nY^4&NcWI+O0J@mQU{WEctIOn4>YrK(qoFVU6*w(mQ1E&@g#?2I!Q}vNMCGR z4v*{mgRls9zyEzJ$Nb!sVrQ1?KYQYKob*uhqt=g^lwhix*V@e^y?y63}F~?UmV+gnS z93v;#P8_hzs^|n=LK5nYQMb#L3x-@|9G5kJE6@D@U>ZS++{2J_ugQLoi>6%eHR%Qp z_GSIyOjC*zlU&e8rgjD&M$#-HX%^7rNWA3*boUZ(`4{0M><&1OiN;*&q|{2kb{?FE z)YsfsUw!H+**s4Dvsb;vy>@$VuU6Y*%&v}{?=6CZ6=rsdRxq6HHk&&DN$9R#qPZyD z^u#gxQu*s@_BVcid9b&I8bOWX$y`2ZZOZbYl z>9L$CjJi1-C*$Gms-^0!Awt~EP$hFxG4n*kX2TUwv<&F&zvhY*m5po#XE<4XP2(|$ zBMG-(B|pBY=3I zAv436L#W%X!zVhOt{}oQ`P1zTS%v2`^SQR}ZuZ?pfl|{rRPBVCJqOz&9d*ljH=4E* zW=i!t#G&k~=BP0VcS*MRm}qb|PW`i#-+!Ol(F!uD%<2C_xCA@eY3O<35T8@zEH^Fq zLl(#rW&WV}4+}pxE$qW$zpiwVCn@s70$;Ic&;3Hy`$GNpbT+MPs0dXo8)le9}GnL&~M_mi~sCz(GviT7RV!_s2R ztf?#C_{No$C!buI9#cmzuY7~Hbo#vXJSmJ|)mKJ*1#s3jtwDXiySKAxrnA{}6dp@u zW8pFLWh)>I(AYW5_lJ!!UakFZ7vQWe_FG+WyjNHB%-Qsvl(fw62VXFG`{p~FovX|@ z*E^m1<#!jN3-{o2m07vxo|Su!Z!WC7yVc$5?p=HL-D`W@?z`c+lXEARQsHoF>Ey}q z*4+G@e!HJid2^8Fxkk59YXS%xR>^!aoB}3PbsNdKKE1ZaejD%aY#ckqL^2jmx8j8b zg@v5In#Rm&ycC|Ip=^{R(^IupUT9z52HAG9eOU&_Ms9UAhbcR8K2rkgC-67ZW9sPT zc#skd7^z>=W9sOolSm2rjr0Jf$JEiw$v8CyUz;9NQxLZ4Q8a0iAwO4gMo<3sJMq)P zoi?00J;o-&!(I4!dNlUk{%PRAdEo?9gbC3HIAH#%1_o^A}EK292G@KD(X0*#2B5916$Sg)+_E=5V(?Z0-(Y?Gzr%j=;Q4kGEWM zTcRw`mjo<+Bwa2eR#i&6seo&$;&;k7<7O`7|68F7!E2bz{PNKHq7F=meYw!t2I)wPxcFjcp_X zF({$Kva-zF?ImOE=MKu_upEF97U~1Oq#Io(_QSSMZ)h!)4yeo&hUj2_n2lEu6GuiG zG-c6_tbrxu)W%C1OUxa=h|QJw3i)~>&kkbZXeIYp|C|^228-|M%Yk*7lO8&a;nccJ z^fUSX^vgfkx@^=X7@;|}E)%Ur5TWUZ<@xXQmwnUHyIIuTHP5qST(NYX8RP0Mgzinm z@*TRrwMH#J%y(kZytqfI*wCr9W0h=bKUFLgE73|e)~ldd!Hq1rUvy)I`Zlf@Tf~ho z)MM!as4KWyYO6obPA(=uIeEU6fGgt0KC&#{?Z)-2Y^==$y%VJ;Wa5H7XyfPyTo4w> zb}Ze&AgkW0rw8dyER;^F21@<|+rUQ{=RQeW_@lIiA0{Usqc(r0Xiha~IyX|ODkV|4;)9$B0X#jL9K;-wH)ymR-o?Dw z9G1{~mAzCv8rn>)tgNiA5|h=!$-ClgXS$UeH?DV1q%p1O(ifu23V<++pCVnE4I@if zT0#ZxGhXYeed&-R3}}6Zl`7^;=`=QEE;z?wq=5dh{Mw(M6IIs*D@i2p^A4yD;e5A- zrDL?6FB{xqqDG`lzI&jFlySBIaH2}IjC6a%@Nj_snQ(M;MxxgFoLGapsB8N@%w5N0 z+|`WnAr&RPdbl#BB4*blyw@LtGSY1{_V(&B(gjgDgbisolm;AlLcHh+6Hhc*2&5ym zTq5w@$%fSJCHIJHm|rF8Rn2asZWJm-yZOCD^IkB`g9fWkpm$<#r6n-+?Y5+&P!F^n zyS+!etElbv5-nnHx%s}k-7kgJJ@khxHiOMaeT^|v5nm-idW{w7E9ovZpYlt~G*g|0 zbbY70=Vof8E}B1;Ds=ZUNU+-FnxD>8;!^W?c2qF8i==o^xsdxf7!{g=!0PZ2)6E>_LDcG&Y^7QIQN`PZ*rG_u(;LEgQvGav5y zX0qbeJEL+}%)!LVY%ji&viG~;NC?$4Cds`)dpFezfmVVkEnXg)3b*FTFjE8&+v}LE zNwf}yEYS1QeO$p2$J>3ORezfgv|44h7hgHrGTg1?@)pci!}@n`uyNV0SQTth?asUD z&if8x5Zc`j5y?lOe2b;2;y;hf|69juuc2)ren4lP8wn%HU&~=G&iWz(mE-``h zR>wQz^s-Fwuv99pz}jcr<#eU8wNNhHW(q59QI zrGoRbco`J)L|~iLRK3!=akFm~ozYdAA!lKJHX-^&eoE%U$<)%knqNv`Jep>16T^8~ z=O1|A11Fas`P3(VeKYFL)s&uJ`Z${ zfrCLB$Te$1#O;Zhlm_!?O->>K?<9kLe*5uro&z%>=8JDq~!6}8LQXdgK$yP(1Fh}|lBus)*#JqO3^ zuw6EJc-pfd`EVBEL$)l!l$96)VFC>ejD-#)&ZI%e@w}D3fq3PS3(8u8hk#lgS9Uh8=j8g%c0V7FSdmnC(y>N+wSAwbekv$gnQizC^5ExbQGXtt-_o(* z?fM|aCwh5dViJ1{tTtAHisX{1|vg{N$A>?`aVs1SDxB?%=o* zuFA?s3kz7C-+HwD{x?P#C^&`_x_<=vAeJ04xypoxI7lfxOG;<<3qHOlbLJxWX7;5t z3ImLk@|e9b|A7L*E?XTQd1y3>0tx4D5<>!UiRn$BNJ4i$_a1WNaiX4^BXsn{7e=7O z<8g_nG(sZK;l%`UG@@1GMJRLHI1oH!U=%RjB1{FRV-e}_+IKtm9_nvz_Z_T)a*mT5 zjXGigQmeN*qez5kF1&XrkR*9jD)d*wv1I=C*?U3OIRn3(QHQhllqH3rmrOn`E5vI6 z@sn^Sjanu)*D~z!~bu*v*%txMh_%VO~)RX5v`O!}Rsv~}HgCRh^X$!mYgvzv|gOsRpWUt2c ztJ|YYyDuyDQ7$1i`y<1RW_-!#@7p6|1oUwl$h&liCXb+qJ%jj9^^BA2Ikld@PlsvL z{aJMJJ{1po(TECa@qM(Zc+jJy@|!MyA0IfVVQLL%B3`w5kUVQm(E1diro}y7%f)HC zONhfJR^G*Y9^wotgJh-B!7!lc)_1<+?iAg4Om|jf`hg|J@T1+WBggQbiaqtzQ~&wH zk3IF%=RWoDW4ON@d2hl-fsqvrUxTm}y;8hK*GonEzMK;5Vv!_%)i>h?VbG#(2x^H> zZW}#OlqdsxYM>qJ$(F8gIthRpxkx6U(EE@LXk{a9m!sqQD4dSWk0OC@ltj9rk8ptZ zn}>U_?E}AGzXY}k=R^5P9@5rOcT6HZI;Tz;3XCh`Y_=Fi66_o^m`I$ucrmK-vt6&d zJ}Z3cT*=j$o1X{B$1iu&2)D;=1M?f4Mkvi;NPwooq|-<<&q*ZW+=viBX~IeB_D;|Z zrlBU|_%=93Z;X<1a`gLgOV%O7>Ak3*(|nY;Reo81keq%Hp8GgC{UBxeL2~**TDS$q z<1P+F%}%p7@=bSLv1)PwlN0};etW1wQ550$N*uUb%?pU68Jf?}hs@2*czkm+34mHM z=`GY4q~x=Cppj}jRnx5Y^Z9;qZH@m};c?hvMA5vt(=8N=#X=zss7pHS{Wx()UQxfI zo>67>Jlivzzrwv=kNwMk`cMDmFa48$@=L$)b3gYBUTi>bWq>Se6Aza;Dij5)tFn2e zTytnMab^#j8oxh!fQV6=AAyv`5S}?mup?!`rHjp5(4#2?2Nu&K%+hE4i{>K)n3#Q&42BUai){L=9RB9_W+Qm~-&cXOMw{5-Y8w z#4B21E>ZNfGTsveY+@CKtTot1eObL#R&QQ7H~A&?Oj%v@zO24Cy}k%7JQZNU+ zHLr;x!I-0u&MZK?)!f;Ze&g;Q)1Z6%rF>h4AccB{U574)s`X-5E2hgj5-QP&N+EJX?6 zT?mglwPw9J9=5Cz$VR>PXrVRSY~T_U3&%rIP?Z@tW#*PLb0p2LG>l-eX%FcdUN#{u zezej&tqc4P!a#OkRs_zAd?7e+2`p9bf?+vjxqhKmQWDMu?(WDiSxbf zpoWqq5_ZB)DQnBP1W!c3?Ym^Nhw%ZEr@Agn+aujPAy9@+7Hl3Is zT6DK&ib6==RsyBet>ix#0UXetBxP?QKJkSc*;}YDc9{OW;>YpH5YMa&Q2Ljl^wUuK zEOqTH^NMGfS3JwS;{OEYf0-J1h8lR5ChE0k%s>3Y|K$^te?Iw)tmfC%r#_+n54~PA z|Lc!_)O+ojkMobGLtp&rX8vcM@c$M1nf&H&fAQm!rzfBB9;U-7i)d$cm7);&WAoRU z(}1@gN@Hl0$Ds!_v@m|7nk^#^fM+hDGI2RY+c+_pymrSmS>1;cQFGF*p@_udHcSXk z`ekTH#3HaiG((KErl&*4NjHY-KG2*+GjYL2jQ7Z9AFFH5`DWI)0!{HHns_R6*t5vJLa(>ut^}#Fd z)?1s^ojT|ytgX@+$7f zgsQahM6wskjz`_T_u8}ZP?%8wjVetSIvQC=YZ%nx-3ICod1j6m!LDa{iHe1-t=Kz`vCQq_TA|rO*g+SMFot|x z$_Bdm2Y-}cfG?QKM@Ee%VO7WIe?n+BsW0Zljz>ozix}bRhOE}T=~x(rAG!dU`($Lu z&=B(%XV{y>ZbGmZgRwMliiM#h$*TU#bE##d6gWrLtj~%e| z?Oc3p%EX#qkMb>MU%nKRbl$?Li-(MQD{n3yu;%UDsBK|BK$|5x#s3Zt`b9YC1vqG) zHtT-ctov!R9-z(oWjIRgULT;%dVn_T)#xso`(2e;TU*PVoBX5D=iX57`yZcBzo~w6 z@{eBpTIS$?YIj5Bc_{xS^pAd_QPG7#;1aM7kvSBoX)FOZ+#}oovH5z8P^h~+oXg}A z%ehmlOQYSJ9lE{PO<;g-FnDV=i8+AeL16%w%X@hxm1oLwnoGFlzn`)_)!q!}tJT^b zfjt&-TRUS#aAaw^0C|{P-@JbH`qe8}P8rAVOKjpZi;vwn6q;boytJ5uw2Mm&F{*3H zeme8j-$Cs?p)kroQ>Fn%u&O4097gc`Y0b&gxq!1nLdW~NDPHnr@7NZxGPNUs! zG?$BZcMY(Klwh4rem@L}8Ia&s_u}sd(%F3J)trbjA1-5*&+x!5=5;W@!A&NKfEC=| zAAIT6+~}aKv6?$A6_*H{JUeZGcuiNgL>AAI)*Ys=aioe|x=I7Jbo}_G7r&N0xT!ij zu?*A2nb=EOo@*|GHo;N&L61=6`hd%_0?okO4(9dP>Pg><^^N>extLy zM`oEoh`XUdnYn11pYj}o_X*-(Jj8JAGlqml#_14$241JtlA0HEqoSGdfc1)Y%xK5M zJU{Gr_B$~{^>}_lyPSv-8aSCsm5%qedQ9G697JIAF|21aJ9q#v^o!Se77gI5am?HZ zD>mSnK_XrbO_)VXK#zl)DirBS-0pVorB~x(lP5mT1cDxnc$gdvcv$R-^i2k%18Jm2 zgO~i#fy_k7h*50e{vq}MC#mnBkeMi5w}j1got55_)YiG9wRKug=Z@CXX$@uAccg~$ z0%~M#wnk2CU~aYsPHP;4&s%Doq=Lcc(OM=74yjq(o~>Ea+C=D1>Ia^b)R3{k6cklN zNgY`i^@rK(E#m&Vu;?Af!rTz|O4yycfhtxkdv)yyz?K|_v($))rzLX0a8t&cl4$XE zR=YcMxl?vxTy;A;8AkpH3mvdcZkBDPtfG4aMUwtsQJ$ZmJRhJui%OTLj_53sN`#1P zNeSnNqh}_QvhP0?9V9U)8WYENOtl90BfUbjR-v_C`GNntplvga<)#Gl)aG{0-FCnE z#-$PS^;7G+W!$9$Q@n)J#dT9P@Zg-@(nCl|i*T2Gg+y_cU%1iiZdVrufaok-x^|<5 z9=u-57mC~j%-D&==aV5b{H@o&z42`t3)(?>g`dK5EJP%5FpekczJw};YFvfNHgf@O z(0Yi+ghAW5+v$xrcLr7x{{h3ANKIrax8IfY_~u=Q*<>~+&wT!7EK0@t7I{%&Iaay&2?f+IhUf2M(GyZpn z$MFR?;PF*>T#(Hl4CIU8m+AQOx?p`)L)ez$F8Uf`XxcSd6E1Lw1Lit>%g0iD=ThYo z4BRZrn%EIG2BNL`y?Y@c8TT0jJ`ov|ICI}pdg;D1aWKyj{E1_8_}Fe;SFdlZJ&YRM zY=@GB?g+K3qLcNv3v}1S>Vx@})o65;Fdq1j;U7?nkC<~Jy7f3JYhnZvfJF{`vr49l zq@T^l^-_vO(rLKRt;>q*rrXC4#m#R+4=ro&hZgrki~E#Prt3UA$a04ZsUw8)7ju z;?P1iFU~w1!8F2*aYt6TY)PQDb)1il=+NIkpG%6-U&P-F9W*U+=p{kM^7rF$6fbjv zwC5lW&^Z2n>Sj*Vfed>hEK;z{ zMh76<-DuOJ3(>3l`?SoRu>C;Vh(`7v_~tR{(8ILR_rN#zDAC9U&6yUA!h>ldP(iI4 zZ2*V4(cCDVN5Iq0=7o=RbxJ3Pkf}(32RT$Cl}NhMXoNzIMn(7s@Il}Q7p*Yf&C-%q zx6y7LAyT%ugrQ_i+3BU?+)*}Cr4(GO&_wlA()B4;Dl~ekvBhAb!9O%-9q?2dxDn_U z1ss3_wy0*h?az5IZ3$aRJxljY2*xN$C{|AoS<#FD`|V0)6Oj+TfF7T|pBWA5pUSN6 zX=t?utxgrAY;hH5M&neGDD%(`Z8qmIHisT#AUmXK5#I%AbWs+4CIMn61Wz9aY-Wz>i%1)L$(8cV0bvFCo%CQW*q?O6NWzkb49fo zzl-ZJGk4-V6Yc_e;zlT^u2sgc6ipn@C8hg~0Xj>Jo@s6}*)l-lqDx!DJT>3Nlx3jQ zSMYWaGlp*8hXo`%G6JBp&muj4k4I3iie@h)9yR>|kHBC4xDKck!fS=BlPKXVahj6H z8S^k1<1#YBimt=ssPPajm?zZGbLPD{W+mDZ+#VIU6|#r8WGH4T=9oz&^s@w==Zx%* zkf?}6@Hb^iarjBR7w&_9 zm~mA(Des`bDRIBFy)4D8{PI>5xGwBpVpLg4Tr`^$S@SFq7%<0tLsUw-m1~ zTolb+OBXF+M^gOW01-%vvn-*pR8B}5&=jKj1og7e5l|Q*se-1Oo{|PlPd^Pl9X0); zKK*>U>00z8TAruK_1{P0JVi_OXk=JB>Xai+~f0XKQ9Y2hSQ#`X!^&_pE*=;&=;AglXAH+v-HHL1Qv4(g94VR%^UO zTuOPsaw466dCs=GTP*^C)*7=9zVy{pK#_x7dtb#Z>j)9T-d9m~1^EGQ$orj{tX&AZ z_foxNb;*Q7hWg-x$iYc}H5DZ0;G4YtmL$}?(__&z5V*m##nTRrw?j-$E(4cNe62;a zymWf@8Trk?WSk(1ZS+Kk&%U%U4#})O0qTY_1RR=5&tH$t3*aNaOk;NVA9<3H>D|sc zaLe-VU;An@=!&7z(98N)Q(9{IS4b^dWggNXRF0v*8O8F2hv+3uuax}P*OpKFuB+67 zv()_qB=@OTt<*@AGofrYG~C$<*frr_gaWQigsxu?4UZiQm@na9gnT|zC8JO%hpW|q zr&OVA5H86HSVtYQiaTW$aAIaygPxqQhL;$3I%AXgLq7Qv{>3<;a)O9xV^pC5F@uY- zPd$H(B=N9O8&k{iDyGIu{ObZWyc7+mjRqsvhRXE3XwT?xb`b!ZZ`anB0A*N==NOI4S85|SUMI{EE`={#=31V7F0Xb+4D4l zIb&yMn+mM^)zc`e5-&4N+Hn?^c$vg(PDjiR(R1SC&bZm<+f_U_j(PT`nNQA#JllQW zDfgW>JbQ_-Z&x>o4Xql(#Kf~5v$Z*hc=iMvLp$u*;+)}H{63C*Nz=1qlXh=^{CDE( zbR?Mb3sAzzJN;BP%1ycF2~`}@!-w^f+Br|4+K?U~td|J_X|LPNaW%WZ`-EIZ89m&E z++L$c;9500uR>l(cj@_MCEq_5x7OA`os66|hl|}YW;R979^0L9bZ{}8 zi4I!iMuKKcTAfKGA!8BG>0u5Rb=zeEqnE-oxWi^T&F~`P_Uilfo?sVwx+P1~ADnt# zNq|PXSpAAhihYm_OX+g?>7lMkq9*^L*Rc^e zy?_{56NgE`Nxx6i0AR}q%Pfb4Vn5Zi+tz-Jk=dZJzt`7b73)MOCtTX|>&#Hear#k$ zhiRhtJTV=k+(R9_2cD2I$|?9Tm0r#>DsHJ>Yx8Pr;EugiT=lUo#us>myJ@x6^HR0% z-X!>Lc9_f_JFB+;^0Jqzj??jYzdA}M=G5``=L|2k_>m733OVc4s`bWSTan$HUh3g= z^vs$2*q`oA7W4gympZnbTwIJ_zWT=H#-cynK36OQ|IkX$nocS2q&I)~k^(J_0S=9Y>sro3d_U>d-Ro85j}?NvK| zwEC%y+6T$=5gWDdZT0L?uhHK9o4FI9F(%)+vU{`Eh=#m{oRPAIv^zWT6yG+&O)Mp@ zzOz5{79NUqFXJSaIR5ePy!Kb$`Ob}%Xl>HJ@u%;23me0mlT0GnkKL4GVvsDF^+!H= zChsl$#g_Sz519?u{FA~{KR!2?yLA2k{MXx!Klwv%VSK6k&3{{a`;Wib>wfe1_x74^ z{PkCU`_KO9%U|&pcCTK&{=KWsE8o4myqZ~FPW{Pu+c&N^??3L9=9y$0)F;VFlR0Yu zj`yyHQs4e#mGBnwF=n~!&JhZqK8eqsrN zf62U#nBb%$_F7@}ygO9_d43E7F$T~v3`!zHx_`1VoOphm9J&H?iLb;7y{%pa3eCjO)kB z=5=-5J-2qQiXg1I5|IGA)q)?BK&Br`DoJm`Z7Nq10%X#vi}hKQ0a?_Q1dY1v@jR@f zs1eYlCV)vQq4PgmN)GjXwv^()Tjh;<*63G^hhI0+g%X48nlkz}ak7nY$FS13z2gog z%`YhFq9Y}Z=ix;^s)Up@1xrZ>*2%Lexx-tSM&m8X*6sXa59BR9ABF0@zJ>f8<+>wp znQe`eP$g)M#g|eRTR=+ixr=oOcRXiTn#8zi+O6b?Wb2X*65s|y9KByFg|ywU0EjTJ zO5k)5{X`ckkx}fl3r?SFh zC+>K$;pX-xGpqBtdB!EN>QFhy^2Z!CtnPTxQ)~9xDfQ0AVB?+j*z`#^yX;;t9P z>#5GaGWiVu+QXnKJC~gpp*=Eb;x9;=u#x6p(=)|gFZ%Xoa`SC<&wOM4p7q%DOmUYN zq6?$)U{(AIeaZ)^~-mMswch_Un zGsRsmy0W79yK;rUb-B=I+**%LhNB@}9vXUMJvKeV2nl-PCKu*k-FBCMh3Nux+8qX4 z;fO~Vc5`P(<#Ll;ZaucOt@87ec|v7xnO>~dSN)!W+;PK(7wvS72z40m$Dkd353*W# zU(0Gs)RS6PV~Iw_pFafi@nyAE&5Mg6f-PtZW^2bCJ@9HaQJCz!MAE?n5BZ5NEs>^( zv;}@a7#}=a5K6GuyUm9-I_9f3cGc*@c~$~s5$#3-VrdCCUp(xcCy?OtMcq4}$^*1I zn36G@n3wuV3Z#0Hf<9BDMY|{|sMzUnyw$DS^>jCkGqb?8i#|S|zwpI_pSPu&k_@S( zB*S95QGP%&g4k3agUA1yqHneH-;$1>Cmp{OcmnF~E{Zl$N1}d`hL(lCuVt-B1QY4_ zFwAtB?(K<19Ug9Y^~q%L3g+nT2?J+lfW^km3JvVOGA3=!^XZfx?qjXv+w_O_>NU<7Z*k{j6OGm}V~n?WGXdHWvz(noGnID6#xYb} z8piYF33;XeLH#k&lm=PR|KVGSNEW}ca0K%PLJV8w%xG9g0kP8oZVW4bT7Deq@$c-H zkBx1&UfrqHcW?`+yJ+1&)ET>JF}qPE6D93=`^MHby3BGC?KMW#j6%>Q;Aevds6EKd zEuK$?C?7utiWpOlymB_=n1dVrap(G$6k#Tth&t!9PBf9t$iQandS~3ffnFqZKI}$C zA(V`|>&4?zHV{si5LuEE5^9QGRG%F~yFuI<_Cw~WrQD3s5Lye+bs3_oWrEKL2pt&L zAl~7aOb9N+mJ>14DJ$zVy?38hnr8B1`HrR=UlRLy`DE!71}%8OY2~7W##S5@1hzVi z(CMSW$L^{>yoVutQxW04=k`%bGV5&tJkslq2zsup{?LEU@8LWNUkZ|`Sd%#olQ(>)B-(~`!qi}dm?Xf7s6^p7z_G+iL1YCs8}|4Fhok@H6Y{_5 zGp3D=mT)ESJ+c!+9juF`5`?T$5nxDGj1*u!S!MQ7xK2-%Fw>?^-1cAnyna-sQ+QS^ zWaNE^n@NLY#O88^w8kt2JDTYh&|C!3r9LMxrqf&UNID&6sCc3;(NYx{A$X#Rw?-0= z`@X6rCAurORo*ETZ~ZU7kpJ-*PdWVLV?T;2%&#p{uuxfdN&SPcmfV!eDyI;~KMS7X z4)M)kn{hdXVFcZ7*@3bMCCfzUhL&Zz;_T(Ah%lS~L>Z@2c{1Z4;Mc?7nfz?}R_26& zZIl5d8;;3%n3mW)=iEi&C5@M0>$QWo5 z330q=5+6Zkhd`zkDF6*X-IL00Moy zZrZ6|t5l1Ok!Uh}b8h++Qq7`mSE?D6M(OW~FSP@drx3=`tVvvtu>PJTC9GvHF2n6G zvrqItAz4W<VU)mH!`(T|io%jk zLp*^%8$}8W0g-}NL8{tFx+zx%U6`<;!~zV%n%dM(-mbf*_BE(`{4Vjk>` zJywDwCMtVdq0lgncMj?k>LXlfP2Z9!tgfxCb_+|zLU+_Iv`5`)rXceQ0PqqaD26@8 zeqGJwgX}xM29y!-BU*`1}xjE8+9Pln)X9Ok7c0Am?3?~0poSc2_P7RcovREtj(4{NdbOipX@ z*`lL<+ponJ{?%bE_GW6alm$yrn-6QT!U-m9sG47!4{LEEj*m&mLJcmp`A9AH-=tq< znG1^qj?XTi{;8*a}YPA<;Y;;p?(J3b6;>Dqiyi~aZL_BE)*Q40WP zD_WJ>9Ms|v(Aq>d0QZQvcGFrczy&NpW~R0H&8rR7xca8@YxA@g59MZ~I`nJvZ~L|Q z!dImhKNDrxO|{XS%Jk?2E27N*$KIRANRnsweQ{+(X5@WUW}Tf?-96oNvZr@vb~wxB z^d4L;4{HgMk_BoZ+km|W3ENtT5MeDINSTxkcx|l6 z;b?YexYzXD+1=G$)m2%Q_kDyv?-!X>Sv@^m3NkDia8yM`WMpO>zu)`4-#fpLto<@$ z+5r@GIQ*SpNYkjNL)!bDU`XF&NPp#QNRwo_NGNhr7(5UI^AU~3l6+xT1~y5S5}E+H z49OuTg-XWt;&_&aW8s91rzOd)?6tmo>)!rg97+LfP;b|cYVC#b460>lXpr(D;1t5t`R)$$@Kl#E9>~j!WBfVB_(vZ(#?@_}jqy1( zZJ&cyJ7op`9nmWkjX8ou8;`R;e$eDmHtlJjPL zL*r3DI`m3*g$8nC2*X?5Zi6^!``mML_-+${{OWk1z{Io;+urd&A`zZ5+nO=4o z$Z~y?%d4}C_h0;%uKp!i?6QB4aclk~eJL@hR7a>V!D&rLN=!ai1(0C8zf+Wn)W+WkT{UdTs7fOK@~ljtPHd|L01 zthU)7eZ`W<1B-j1jt59V1MY4j5sw@hV1Pi5m`Ui*KqXS?TV`7E`#cF%2;#Ox;Hoy8 z^?m$&$Ac-m*z3h_N!Pymo%e*Xk+ZHkSoN@1Je1ze;WxA?@W!h8SUOpT-nssbpYPl4 z*tvcsx6#B95hBp35#m)k5J5k_Tl7gGmEOZzr&iU4(ucy67JDFeuK5?+UYitW4V;#c zEa+M_vubCrIBR5?PNVR^sA_6y>masbuH|Gj4W#lwuFqfuRdg$K=j6ckrq*}WiD>=f zu@=fXl}V-K^5>jrxe_XM#kn@T_WIz?;C1IQ?X3z1oRU`7lAiHy@#<%MluB~7q3`{yksy^b6t90vxIRtj?&uFIh8G86L+}&sB;m>FmtD#+p z*g32?tVCwWT0I%dN`(l@!;rq|UC0IC<0I^O!5X~B!WYV+tcAP_hqcOnSJu%|TGrCC zD{JVm=7!SUn(JMth#DtrsT8ci`wGV^@_~1um?$pA5-}GS0Cwl2r$73(b9Eco({&Ny_SC!j?67 zkI8b{l{el6!lvUPSec&>SrRd09~_v1O#;z*97=KzDip_$^a7I7ja%&8Duy>M8m9EL*8YG+`N z?WNLE)Jf-?mE>kYy|eSYmoLDJ`A(&|2}()H>N{GxI1X1UwSxiHntPQj`(urFe3mQn zX=$}`FFRD`wo<><90vLyU8X#99KGUaVW(qZE!8MG8n9(RK6!BSt4P z5J)}D?s#aCPpx6si4tN+wJ%NH&c8CILRd7+vr5|$ z5l*CniIW=C3-XT2+#KK=QHss*os?4_C=K&-aK+ETCqBZw_e1p5=irK;gDY-g4%JD0 z8y+1=NzCZ9KCUBG)_wBaeH0NaI^HJEn*KmfnEGf`n^Mp85GFIp6A(ji^uUT03I%Vo z-zP6297bWyu~{-(evN3{nnbP2<@Z)h@m|A@wJa?ONH{+=t<+>t6 z$dgL5DRe#HqlVOfb;K+{_!x(ieZ)aP4kjbyYiaRKcoW*51j!K>HCc*O!c(-xX|z&_ z#<#Y%(vgbiMaCvYyT*g#ak`v-=bd-n?PmyiuGMOzNbd6G%ibooZl60bqfs%Dlk{)M zQ%As-)xoRk`P2g495d~j8rCTA*>ozzf#;hr1Y3b$SknQ`=uwemD)k|N1MITtfOi%_ z?}>yl}WOJSR)kRijU%9Rxr|(Swr9lh=5x6N||J30~vYsy~Ph zn#WCEeM_~&AHW5_MmzkUaKZnDUiu$thkwD?`uK~%Q_3p>uAl@6Rm+LxK7>oKs85wi zL|BJfWwXJU=Uh_B0LKp?7&IqlXGstkOHIh~vU~(PRhh1u4X_~4f@-5Z&6Y7W0XY+Q zaPTVc_?J%rx|A2$sMoTCnVm(0I_(=TDIrzbDYzds6leQtT*|%AZk5kwcg`1PeQs?3 z;D~Uz78NbXhQ^FbJ;;!3@g)V0NR07(hK;X3Wh<^p%-R6dXz&MFUm|Z?3cG}HSE6w9 z9ZF}Z!Ypz`4oYG-qlB*ktJDWv3BwvY;s)ezQdqrk`O4KRS6_JH>ZSG7)wR{-m6c*T z9x=)<;k*Z5q}#0R-@A8z@6O)dowwiklRtUm&0DwLx^w>l2~XpMZ&oLth3$u(a_E{zLmsJH2+01MLDe^ zZc}wUS8TWMzw_;HzjF_6cu#ijx4rEPptmqF0QlsC8-=f)w+MUe~z1pA=V~Fg+{rK2{{=E9kjpT)5yM|m-A|0 za`1(jV^$7!yq72k!hEgXk$%sIK^T3o3HE2lCsOo=Z-NxVE1prce}PvKlGGd7rGDUe zmeJ3SVa?`-Ex67GGx`?XSF&5S;5r+c5%5;kGD>m?xUu*`vGLo)@!%#Sw}h;x1NjYJ5GeMzSL5(%^~P83R{6b1AhJZR-V#Y;)DFcW2lb-fPv*=qX!DwpiP^yPKRpDH< zZ;p@0IkR`W6b7tXkAnMKjygW(w?r-H3{<=nS@>in&P4!d(K-I z5Eb6K9FJ1P@!?FvT&JBuk1ffydamR5xt`w#0lhBQjJ3DzFxTx9xa>$|h%9Ap!Vp&! zwFb1@oejO*&s1J$By-4p$Os?dcp2p<%La7IE zy79=LBuRN}d&%)hBqHoGlR#FPbYou9#M07)yW?RSF@`KJ(P1FSlmH*@LqfY??~g`n zmCD-(C(XFNwSJe-Uij%7Z`5j=t5>ds_wTHE*3l^YweOUjNn+B8#wbi}9=@4Qmrd02 zOxZNZ2K17lX+H+B%ZxdI8QVndMues*;WQ9p4Gq1d4{azMT|^2Q=N{FP5p!ht@>9YX zf{5ICZ;01l76Znc%ljWtL5Jk-Ui5bBjO2bD?3$&@mcadcdf_(+>N)YLrNO>2+!y)t0*{hVGTwKLo08=&rV^qTc=BV23oE%i%&!h{*Y^F${b)k^U=9j#UVg~q^Oy=Mq z*cPR}a{YkX59k(z%I#ht;WSY@qBHzlanNjbEWKJYwWAYl`k-p~hsPeZJ;XUpV3u-? z#{}6Xi2;qkNYcVDAT5)XIvkm#q>5GrclTwTO2XZA(C0DmCb68p3NG~G>XG3Hkuj0U zRG{|Q%}}ESI1x<#WJeL14_71Wk;j*n$xXrzQ=f;TzJScQ z9nxcDL{7_F!uqWa_T}zC6fJGgY0HF&%albj9b*=GABhO}wzCBanJgj8NeFZ*7Fn{d z_@0uIL{jQt5_+O@{~#P9Apl9EJ1pi=?_$zaQ+v7CAN8i8B}sCS^u6ZLdlGDFD{V`1 z`?TLdE~4~pRSIPni}tidBzc!w7{QV)a&9ZJluSo76FYtvb9gHfHxtS?1Z30FRk}W$T4Z`K`C~K%n+`o3 za76kQ*Hn1>iBLQ?CQu6NY}hhESwgFjP%)j>vWUZ)bfh07(T;SaC&3n<_QgakMJT|V zv-FTFRlD15(6PBJjCHp35C=uu`cWuGGqloO#Gwj<#a*vprfbAO>;-19BPLGV%(v$VV{dzD@+wnQRHucB(&|Eu;Q zgpo?&OFby{UOzs5{qc)r-zXPH=50kQ||vR3>e1!~0k2#q^YTKQu%k>IiD2 zh@uIi-_aNuNZ>-kk^Vxxm_S{X1@_p+Dy|rC0!J_q3d3QDiUzsVLv|U-EWdy}@UX06 zIx3P;#5($jn1?L+I7S!=0aFHBNH#W$WUnc7wO#k-uyYNzefERdooq)`sR5+V9OayH z+O|d(p<51QYwAFxQ!*b5%i;9gJE7UBSsP)n6Pq24MS`JfER+rT3@cF3YUC)i6#f$M zO06t3K=VleB0+Nk1v76;@g8o`mQT}`Qg`54+H#8$q{-mY$hFvGWKmieH=~Zwjwn?@ zGoobCfbpOegJYu*q0#COs-Vr{aX%R}p*pG>aDF~vs?vVA=~e3iHYm*(oi&~&tyi9Z zd4BQJmLn#otmUNPBCaL{&?NA5-q5pe>joHF>JOSyjg|=7EI3G$B~>J*YN5bvlnmNS z0t|!JQgkPorUlySN!sdh+DbA_3)(4;z4VkFB*rj6XbEu-tC7McpsF2XMOzWRt%i#b zQ((rEUX~>mGy;Y5iX;uhW^F)11;c3m)u3aH?eHn_?92#d)5xn!6GS0y^aM^2yS+P z6lA!tK1>R;MhX*MEl@wLAuc^>Dn$wlv>>q=*J!Vg(q12f79`f{ns&bOAY3Sr!C*tq zyd{yLO|S-FL{2IgLP9L6=|-W{oML8!i(p#CWVMw9dF=Bh)K;{@jD}jI!TGf1oGG>D z1DDmQ86;(AOVvYuk=$RRSEPSq+BOjK(4owJj}MbJv+}FezzcbDEuzp*kX8fK5#a-H^Z5fRvnhYhz?B%xF_Wq6JQ8&aQ$8 z=-*}x{S`mqnwS=BQU`1;hF-?jTjQhO7A~bCgZ1ECZqJ=_;M9jHL6q+K9Pmrf1pNS6# zf`5;lhc_mfR4OM$Q@z($-5DhgSaqxv0QX+1)h5oQ(`&x-`k(yKAN|q)^{1}`L;L1i zvb=fg?N?r@ynDABk}8t9IM$=7*x1C(JzQHWEoYaOKK<$Fb5A_~=}#{$WtT6kt$Fc% z^r_*{AOf;dZS{9v?4DrcWob8SLyAUpV_REWD;es$m~o0wRWOe%r5&j9(gdJO98 z!R`CEQD&*Tb#!pxZDZ+XNr*joy_iDa%@meW32q>kE{J>VfC5`~tcPEqyI4X0juEMPk$e{gbq^x(lkA33wE z_x&A8^|(A^$hVTI3<|t6mXM7apR)0hTR=jKO8^HE2Q&~;*-Hxl2L%+)6=I^qiKi^J zQiE4GCZIyN^#G9q7+I!LtYp5Ab%{U1UB>uTEz3jPli?y6GN5$}f7i<&6Dy25%!d+N zF2-6uN8g^xmO4|6tf|UyP_vpielR3Yz3b1a`Ff@a!hqELEsRKRl2`HC1aH+bd3hF{ z8F%T17;$Na-gf3Myasb zP@b?ldboK+C#yX@lpT$FV{&Z9JrcYI#NrSh6#~Ou`tkuj0hI7O659@8vlB6ao934< zRG@j=&EiDOy4Z?`6(U!NXN6M`pdOD`Q~`_+Twl)?hmp0l_TFC4K0uBW+~sjUThyk9 z?|k*0!>Lxhy;phX);pEG+hzUf)nC@{eamxQ+An~b>fRK?&0g!vW@}I26ON7ow;rD! z9qmeN8J)qy%D-%r(=MP>ro*@;lA1LMo+4JY;4CwUr>&2zG5Sa$YR-N zyr2ydWQ}9HP6`~8*I+b(Sq-)ADD%^G&UT&F7mZt5|Hn%%Tk5Zr9I&(%`Z~v=9J8r_ z&Lky&l$7I7*F9E*otb6vffCRQ%Scfb5;(GvU~8J_TIs^9L^*gS~u6t0Y*j$ zzXSk}n^LNUCzkc0D-*0N3|$F!>cM$7Cl-o1e4q|1(N|bL$CZaz=IB7sn>{v4)$#4t z?c;(CC#qI?<&RzaiK1PMUcOvRCDRXGHQCLHR7;rV*ez~pTSXp)T3@huEwPp;T2=yl zc^TBR&UyH*SCuc7y6ljYO0`pyFZn(sC0nb^X~8FaOQva92zAmerfo7D!QX){#mV)7 zwpgB^KWGy?%s~zl(+VM}y~eQ7TV^iBd)Ealx+{YpqgtNAN;bime@@#54LBOPjbvBW zQDk&{cXao-Aakj-Z#UUZxO={zn_Huf2b59Zp6}lK{EU>g{dZl(IGfJ>VKPpY4kRj zpm>yoC4KPKJ;MnNm93tmrmLgmE^Ny9$sf4g*CIjJ0LnXkQf^d7b2`yu`_nZ^Ch zH;>-y_m3t=1qpO4P!&+Up6>8=hVd*T_S_?3nR6&116)f;BZ(IuZaf?wm2E0LifaMX zeb^l7F!+6x0w27}?io0tVQeh4kUdL^DaRD1Ux4h#kRqo@L6{;cD$!iMZkHy*=@1$d zRAYGDBVOGzSX0RcEtA zlv@H3mQZh*e0g&@7foAM)QEPlijPJe?1}R&`-VEgYoI4R4F!D`3X+)Yk3d0BLqWuc z&4PZpf%DCs#|6`C4w}95R0E|1oDtGil%i;4@g$4Xv7LimmNKR6oFW2R$iE2%^dXTs z6$Jgy95G|m^INfq}7WCKl66~YS-&s!uJp|Z` z5w+6kg}w>;BHjk#FXk%DRc2ExDX>3es&pxKMtDVf0HN6aZ zo&Jt<^qU=AVo`jdi71}2PP2bp)`*PtwG41m!@BqV(KvEgB1%jd5hh&fY-u$1k2**D zjmCoqt=hd>>%oK0h^n*1mUN`zP1B3J4ia>yH9$ngKKN@+pRE0{G3=D{ouM%%mA{Xx z*`H2^gH{LSN)Wk>ool+*6ytHDIm;=Rbn`J~Y$&Qmk~#a$YLjE2MZt_y32iE&Oxqu$ zMH%*S7pT2nldr2Zbt#eOW)f_gCwM=a98F}Hkvk)wsuvQ+;P1+ihck;XE3&Zc$+EDO zW2SytzK%~%(#<6on8G^~seO$yEO8rr%7=VS${5I348BEydU0}~E>m)uRB;JnlQKB? zJ)AIoN2gDBwj^W%-buHkpTb5A;&wzF9Q#xk1UYbM8awE~L*UC>Jud?KF6n(ep0|9_ zXSSUEj&l(G1*wd1CJ#nj!*(nHWF($h1K}OGj=(oEj}st>oEU+J;{-$iF-71oMYK>T z6zCdO8E_d8h}`bBff-C@bWsxc6Z6Fx0)sPc4$MGOnl}1C)z09>JvMs^@y>0d~FMt&emE1(l0FT%S2XfiE9c7+9^bS z;yp%?<`^|ne2AFz0ovzN-*Qvpp~EQPYn}VIzxz&$Vdd%F(N1_I#g?lLcJ0}&7uGXq z(79~d_~mlq^m7a(NjJ2U54rfBaK?s)XwHN)4ZwHR(d<$JRdGtLLa{RoF0?5Nq=p4o z311*r;gN&z@O)ogAhkuZ6N??r7cp?q`VivC+gPNnbNguf)?{1`qnVCH5i$bGnnxup zL0OXP@UW%da46JT&0#vk5M9lI5R?PU#Rv9ipgRMnR4F-w3K24bB4maR4l1DJfer#* zRS^R}@mLu6Z_Yf{L{^Bpj8y7&{gLmGS4|s@y41|n@eNoScL+GjWF8|THRyhuX84b} zx1ZzQ{t=Y<+fb$|6(@sT4R|3)kxJ!74ynE1;Or}=@qL%6e%0-^+Tw0*H80~>tMOND z#^Ffd;LvaJx5b-=k%QOx+uz5ln*fAz*lzL@@}Zgyx?8k4H=AoTnsTVyZ2}xbJ$tmg zm#$nHN@W!%p3PG6lW5rCl`Bb-l1rs4kC#f1Uy;3~WP?a<+)v-ERK9sj_6{3wzDWgA zmT2qv7+ceT1fnDre*b`9x`zuwJoyRGLR}f}>{T9&b6gT1w>k zin?^nj-o7@!?rqi#oH_iuM8FhA`Fq>-Keb`r5P=wlp^p?szc*nPF3Hjzf;X!N?pp; zvE2~UN<3eko{c4A*09rPA5 z?D!@=FbZz+?*=FlZU7r0&Q4sl{CAU8m$?*s9R_^#v|P6=iVtd84z(5|T*R#^v&NhR z*h=pQ!q%Jy)IoJvJs{H0vnMi8l+%oH=$r^NN`ybEHGqu*Y!Dqf7-q$k$6%6|?6b0u z4;$Df`6-!Q)K4cKU11ydy3DVR9OQIj7Q~x6>b`V*48{oym2f2FnQ*Y<;{gIS<>0Hq zTCaBo04cNN;8z7O2q~_OL^Z({ga{^>kO1Tb}IM?N1v#x6Bs7ntgQ85vjwmNqz81r+zU-TZ)`>!+fu8XxAUM~G4?HVl7 zh)fy*KP$}Wc%ChP|x#Il#GDWCm8Kd<<{Xhrg%fT`i_K74LQ1BLeqkM#SJtA{2 z)*h`V(OG<#j|wvPk+$F#MNDNq=pHoX7$0;`6_U9K%M8;k2;v#gK7)MO7q-6Qr&>F33{*i zjy5>$MiARb!>i|)2anrhJ&ZG-NGtL_#__YZmf1f3otoVm)`l(nsam8KVXl0uiWZ!E z40#bjrBu9sR7=&4?t>ht^?{871`pwPsKrW^wkF0)NoNlUfPol1@xOXbGN?4sD5I(4 zd(>PnKEX~-wHSr~dXN!6YX+I8;!BZsA=&aIFIEeWFfw^;+DL$<3rvnw#j2D_-&VTQeRxQ)zJIi;A1WnWYVSON1UJG&bdEQq!Zv+X#`R|ai<*T$+gkOT{VaAnzB zuWW8sWJOgI)TluCXNQFL&S+gneG(8Vf4Ld0Vwv#^7@!t4}8L(Z{l67-E=*GP0PNE#9g z$O3f`NE&O0))L{R6D!oYA6)_W?DdZI{xd|R06ib>hnSbL2SxQwk#PYLDwCfN*{I1M zmnczt_@F{VJJM|Sk+6H+2$fdjqZTo#1bL+&%(VEqbnS94eMOHk>L$FX8G@hdvk5 z0q)%0$%3PUT8p7=L7DT)7fp*KBRv$(hKzdG4#zORYboOqr9J|d3(}lAEozSk zb@vpI%EU`ty>MZDV<{yMLRL^>C!0tXmY264yL#is$6t8v+O=!Xz3}lH-enNNsAx?I zI-g99SRD5jt}{~g2YnPy3DHu8|Kwp&(E{wVLLn91acnn+7-75R@K8l+QRaL1@|4nC zk{^ZR#$?_WcL|ye0|e9^4xBX`=djg46Qjy1+Ve|A=as8!0ae3Kx^2$J&ET=mwiYVPV<0+V~f z4h6|cA>?ehR;b#GG(QJtF!cy_6RHD&m}3x7uMrVIf*GC|BrW3Z87qjK@HL6# zC(b{qHMFUrW}-P3yX14pOfkg~hlHH88yNQiE zTDbJN&yn@KvgzLB4)KRRXdT?Tb=A{6Jc99J{3fCs6X$x-`LaFGfmt#g8-c){eWFmkt7vDOKKl-#Zs4j^2)-?A%NN}_Xe z&xDMibrAK;eY@dEm`ogX?;NS68Rq#>xKP-rj?g!`poGpx*0iYwPP*rC*7&b)-}@&pH{# zGI?8yF$@Q9zx^xQvF2c4fs~ZX!36RX7ey6rPT^AdkVF_F4<>z?V!d^;GnJ_a#FA3a71bT@E+rP(kY2V4D9*(hxeR!ITl03j7ecr%bHB?y(eK2 z_b3=O)q3~dkRE(PdeE~<(n;lwSS*(-U0wC*$rF0=_~h_}Um$=FNn|KpRiT7RP9)=? z`(a&*aY6>INW4TIKGeO~bc62QMfwx!PJ)S_U zv?D2l(X8q>QEsve>mq50kZq#Jn14h zlKwau^$+Dua{h)HL}n4EtS-le)V0**&fY9sZrNG6c5RL9gnF}``m_Jzn+FHq{@;K1 zcYpVv{@%-pSSI(!Uwh@%ms1ys{jTr5{`ww}y}AT~2XDy8ye3t>Wv$nhzmBpVvkR)7 z`E|_PQaZF7ygHJRChIoe+`$wdYyje&eUO~b-ScfSn9ApG{c(~w9*R@c2lH+6{97lb z{e8{(1tL~#4Nw7NI_x_$fo%~OQ)Ax&?u}@6{(wDJqgy-Aj`M3S5Dtt^2p3zdU zJ13#}R*zj7fW0{BV-qDO6ACn^1p0?V$WX!&C(vRr@+Mb?WBfd(jlG?;=hI!jAkp!1 zA+^fpzM1Z+^x3R*zjy#HnuJGYT=pMIC3*YLi|bjgnv$dJ4hW9w(@Uuliyn;pDukbI$ zxdPJG-K#C#n$bh5m_9lIQbTcPI|}5@0&{kUR|}L9SNwT8Y#yfk`&H`8z^I3#3BuwT zZ`Oo2a~Wx^8M_SbLEZ!=dg0CP#iVH{_I&T&dyUN^z8zCYX}Q>|pjd$}5npQ9p?4oB zj=UOj5~ccJqoC5%A*597{v?zU-aOK-JQiGUb~U-m!wa3yB_De*PAL}s^pj+S{s~&r zTQiDF;ms*5}%NB;cV@G3txMNcVAW~Q#VKNd9O^!kmkwV`ol3X?IRNvm~A*W$Y8m$*1 zD$h9d`*~GjZZLxBfpahJDapmw>3*05E<*Sp3g_%7-|&7vY$sNimkaq?yNp#B_O8L- z>jQp~FSy3Iew5AvZZbOxtdyJzu>~I$v8Ia*oDblu%rLUxBJnEWH1Sz=P@Ph z^OVhx%qtzi^oG6rM9KAa9Lc({e7YK2`5Bwn^x)dTWlyOjAkmrAXg(gU418aW>3AX? zuD5}Ya3F5DeJI8C#rmfUs}DnbF~#FAkXBg_Ta6~L3gp5WR(}{bCcQbcH)Z%{NG4lK z_o*EQ$Db8p9MMwQY$P;o*TQiMw_+iLqY@sF-~-ba{D)o)i-nfw6QS6A%^)V2gaofRh-nljnk2hM|^ZT zxRs3unlQW#HB@I)zd31*-yNgWq)(~76V?MfEtY=QFCiRPy&?n(0U zTB?pwdUX5t$l2Tk7)X{P31Xnl;v4U~0+L;_hiv3;4#dbQnOYX^3-k_hfBka8$E7Z4 z@Cx809Ny-e9;T(a>4>y({?0h({N@(7!IQ?ry?(^)cOxC$k5)UL*{SBDo)gXG@pm2{ z!!`}iY-O{pa`1^6%~d<(lI7&jKqKEliQuJP=jG~EZAS!wVD!UxnA|Y}ovA4N^E(vCtK>+`d4E;(IrN_K+VUQZxgHv3@)tx6z9 zO=p2aCW|bk`MO`neONNBup-O(A=az zlV{5U`qr$)y;U*31g%YT&)b{6kOucoHRdnT(tnpRDjM_8mm~(_JhJM~)AGcHa$F&+ zhMgy92!sstho^m=>~a3^+RGmYfZxwn=&bFvZF_Axy|Rzn zsWyt5`N6PJi@*&^=}>nAsI1jgs^ioloi*2mU;G80l`)&HkLafL!UHo5;-=ZJhviw} z#O7T>)<+tG%+$)S(T}6r!4gnt04~=1M^#<#_R7FHP|h=220umDs0>0B*TR#Y$$j&- zmF6`PtM&2)zoC8Kv6g@BZd$Wee7)^Qx{0QnqNasC>cl2JvJxV-)wP6Qedg{ra%DU9 z{+|M$wpX^|4XqX{hX$6EC?!C}vX;?iaL`Yz1N?RlsLT|WrNVTGJ)b=XCLb#1^Lf7G zTNIQ!bl%^5|NVC_UcBhM&)!A$)U9)K5X6iwq+bH!pWi!lamfU*i~Qa`AX4DyO%Q`9 zeTgN+oKQWGnvxUEH>a2QO1D3v&K+PVQp4H>($w|K1R0tmzYA<`WQ;SgJ`FX9 zpCy3Ao`hRWw9OHrNnt03<*)zNTW^sS+=@Gw5dmWDSS-a4P@h}TTC!GCw)vkydiesK zDp6>E8E*G8NH1T2+g%)mwPvd~jHPH%76!>NrNIG9Z5|)P_QJV|87o`PWZbOnK9RMx zq}XP2NlI3d>RyY5uwxSFQ*CsFBMygAKm(50Pwze%>US<)$OfYz7zmpyDXMhJK!92H zk+qK|gL}5Iw%qZa+;6WQ#lZu(jNs; z9*W%SVN%9S@xPI|A&Hn~S$8JClwH&P^eh5IW*unWJSvBTgLV34*eNZ>YqeX3&w1g* za>|Y6SL?l-y5A_Uq zkEF^G!>H9(h*SF0T3L_Pyo*$Q1d>6K8k8jDMv&*k7jkn4Q-9nw{9)MwA;gL7KGBYzD7a_}D8Vu)eDB2`7%@9#c2wd@+^SP8R}1*)pch!d)+!?`UC*HObt zO#Eis_MVK}EjK3L3k$%H5LX00pG2niL81^&9wx5fXas0lE0C}R4(*e0Z;4<0INbYZ z;NA~QSf7M@|EF^a>m!bF1Nn*-aX@7=3)7g-X-XW}&P~Xiosfr4n1F~<*o9ecCYQ7Y z(F)mWbwv#!rDDs_J$IIsoZE8K@tX-@f+tZ*piX7lUYy1Qk!m|MOj0OySY95wBQo}8V%2P#mozvm za}}*JldIO@G@piE9*178K`-lYnjaPa=fmW%op^{4Zbr^XAfG#b_p|PTWFFD&ryU+$ z?C?bVd{;{+N6tF=CRI3O>H`*N8(X>RH&DL2jKqbm6M5=4&-dER?ZiV}a5Hk&_}X?% zI)+9?S)g61{Pn?x^(YE2jXG4dc*vi5M8lqqz`w=_{25wQ^2q*^M~pzpCHtH65%|%w z5xBk+a`_$M`pL2A;5f0;?}9!!`NJ3Bb`o8 zE5lpuojY~eOvexJmvhOgpBPP#9vYtb>zJCgP&pHF_xBeyAOcfI7={eO?L!|Nu{1-Mgeb_u z>;en$7ahH8tLmx}i>&VB{FAJ5T(Aj2m5`nDBY9h#TS4oH`{w+hK7Fp!c0YS0wHG`W z$>zgoyu3DW^?|8JKV)1BTAl%XA|>xe)E54pBU^Os&mu!e7XGK02Sm62EHVTI4CEoD zsn0*{(uYvk8Er9E7HDfnkV$OynOHgW}!wpP$YQdoQsKt8;A1IN!V5yNTEtewNXFTY4C~8Q8NywtGWWU=X*BOaB z;zlDDP?jlj&v9RaD})L0B?(;z$P4=uq7u)AF_Z*!;*rSZ!D!Tt8<8k*LERRKJCO)N zZ0y_})(BZtclPj|F1+{R=Xu*hB8c`9!BYZ|MyP!c>;>*Z{aA0~5$!ap$Ak+!xLY~I ziuU04{S*0ayUAC3eH1@ptR3qkL`z7T4RI$#6{vJ<-o=v{iVUWrpitMSk=|}lt{0T$ z1i2fS(&x6JO)Nkn{L3QJ%p(@>CCX^{1U4msWmCXe>7+z2Bw`_>+n`E<aSYP$y*|-Wa|Taz#7E)f{Y8PkUPYQ37P{l6P!PReOBHLE*K(& z3T2EtC4+0&2P;~hY|!lu1}{mRK3Xuh3`_=3z=tRmWN*o7iT)f)5GXh30LDQ49Pt+C zr;$yGW@UN!P8Z(KI^;}(BxgpC!nLRmqMLB73|uN&qCUu+Ls5e+;6Q|c2aM?d2^RE& z|C%i5-vSP!V@!1B9OO*C{Wr=rWb*ts%@uAs^RevANAdq#<9FrH8NdG)j87dyZD0?- zfZp~|MxEfiiQaY%>F%Q?V-D{%m+g#LXmm2lB;%GbZVj9=v3HqVm`vJ{#LTx(A(2kM zuY*ojidR~9@rJA?8#qHkK>xoqOAY8n*)IA)9 z!j?8jVB5&Wa-}TgYvO|eWd^Z&^+A#8mkEh=di^lr_O3WG6nd-Rj#sNY+yWkqOs3_X zJw$K;LGX{51Y9$_U~{C%EWzvJp4<`Bz3t3#o#yf^!MalUKIJ5lA)B}-aSI!`AIwx4 zrII*{)}(b7A@(!K$$y)c`~_O_KUDlHuy=1Fbx9?$zfQ~kJW|)Gz59741NqZ_@00!u z{tNo={nV$lm-+jt8|uv`<&FMRzsEb#yW|l}0dixjY}~S=!Xiz=`AL(-QdA5BS=2qL z9#n}9>~;;RQ6$1EVo;L!qCvez@oNG=@i|*0X3{5R@$%0ahs{j?3J$2#^THg3@At9e zP7gTf<6fup;EgvPjAQxbLSgyB=Ecp&FR!nzW(yQ+8?+jo$C&ki%wf5s;+0pHxD@}a z;L1*?_ix_;;bp2}I6X5glgxIus3$zV?qv)O=#A(b0F~%H;ueliYMn0m;k|CBR_oty znIT}ow~_P<#497~SWLUg72@d$s%NFfLD~8Co~5p;MZ3)oHr&41noh!B-i$71Y;1vX zKcwRgV7@hNs8K=QlV*WT(ff^Pw@cVW7quP4i(e{L-$^E0tzeZ{&TcnONWm--Yor^fZrdP#7 zHlu-nYUmfKa3TGpI%s`B0_v2hx=#?5Xqm)&5amc6QDTM%<8}P~B2;P0hfWP!&L#;6 zBMI>K#p-`b2SNP6yi0NbiNEon6A<|Vl`As$u8Lq6 z(72*l?b{s`c(-Ci!=-p?2L*VsCZ-+Ezd}J78J5T#^Eylgt7r4 zd*^95|7aTKTZ?p?eH7ganDK|vRPjT}sraFkbQQH^P9C<6?=2s*6_ucooYILR6z{5# zZ9pSXNfK71LfHdCnGs7sEekQY|2}l^lW^D{hr@nhfy2&gH42CQ_u#O_(#)f{sW_UU z|FHjereB?Y)&D!%P5p*`L%aFIi*MvZEu65e@erCb$~hFfD6p+La9T7FC13-j-~75e zK>=e5Kpix_3kiXWNC2=+Lf%8)RKNZ;fdba%KkNA=h4>ZE=A^;DR8%OCufbp=(ZG$T z;@ox%_~A+4WHzwFSl>W6ogd{J?xH&iq*%$vct! z6DQc1)Fa{~oFnE0o3`*jo>i8Io>;v%^!35S0M%BK@FnsY+y|Se6dO5AmvGW`@{I=r z$I(pf^fRd;GpkuaycReLBjR;;a=vCo5Is_f2;EQKFLB2`x?k0u7C<_a8h6B~gd!0N z{$cff=$q=-zXrY-fnDf382e05`-*1n06H+)(I&s~->V&RFwEa{Fuh0c+E9v1Z6dQe z4xiyRUxd>3*Kj1Z`7IV@PbCON;(FM)oy}`b%0f}C%#=`wJDMr(=adR8dRA8BR$%p`tIZhI4iDc7! zXBb8c zjq-{5Q8jn-moW(O!0YSYf4xo8@o!Qv+NH>`h2e@}<8yfdfOg$oWp4;hF0Klj;%0q^ zlY_-7$)}{SP|$5Mk<(PGzZuNGPw}izaw5Ux-QZcD;yIt>Ie~RR*65#{q}*Y%D%l*jFoNz)S|@$N+>_ z2D{>KxV6LMwBPQBW6s2gk+TlUDmk?CY+XRM(LbgbIW88KjFL}~j*_fKi)KcFD zy+51vlFg;1X0y|2rc&cEY3ArI&t^mW?eY4hq85uC9K8Ipm%K_+9Ens{!{PmXZq|Yj zg#eNb2tfMw<}O!JPfo|WUUW1CE|RH6Qo_Y_?j=VOi3V0CYL^twnR>~H(`x8G_E0i| zEFRAzP^F`gT!D5m$dPeodZOevK3588K=i~dp7%NN@5v+)bd;Qxl&P5Aty8CNNM65V zk`6t4etG=R2sp`zRyb}fuTP9bGT#f~iWc*4hWLU^#w#qgLqiholOU_MS`AgBmg}e) z02Um3meyI9wt0sDcS`BdGSV)oaoy4$Y8O%N0t>#kOO}CZA(dDbWGC&C1`rB!Vv|@q z03B>=)=tt)vz)zx8*VoZpV)_x2z~;4)x(@jdleSjYcZ>6)^3l{ZUm0AYOEpcG1?6r zbuB#spQTgFxYNE=;V__6FPV09;BXbOL6gJb&9qggNW{whlUS}h)T}UtF}!qD%cLm5 zo=8ZVo{`Jd>l`~isP5k>x(0i0c)Y8}AeS9=V7JC#dEm)?obQLXMI@63GZ)IT*bY=_Nc7 z6#oqq9vzDSi=T)mVs>2@2_8UvNwzG}OYrP#V!MG_10Y(;@-` zETQ>Q+zhxDDyp%^AeBX`MDc9_N>H&aWD=&N<_<8%EMnT`bUOtQz}RBSCgPr}NWaQ^ z-}{8G6F&qLQ)JMSbc-nUw1_8Sf@bLB@R1vltSH`LEZ5Cwgx?#;bz=1%`(8fyH4(bR z@yk6=CJC~g%a;Kmru-#03gwEN#n2VskpfcIlrIcqn^7>6e2H=KCB}usNq&iO@i!P3 zUt(N5my7B>vW>$i+s;6S+?X){m2>IQfO4UJ7dME4)PcxYR6=Xldk$Q671tx_TckHq zt&v%f3Z)DMg6oCw!%{>rO!X*z=D`bxbniK=bK`plo&MnNNi7=X?jy-`hEj%!Tp>fg z^2++k<;$0;Y?zMaGKoZn1SOWd_gowGu6=meo=)F=x7F$oB##z0A-YeuoeIfCwh#@Z1?S*?kVXq(SyJC=-#0XwbA4SV=71Ht;>;R#RAxP{~kS zJTvDTJ$mkph!Vqgm%9O?S2uS z{zabli_q>Dq1|h_5y^3$*tGkz1x`+syiJy@Ejr3Z_r{o$o|@6ia4n)Wl(xc zkzYJKlmN$58qElVRUDvr?^<^N=${i-bO~Vw)oO(BNKunobS#QIrMi`nr{i54gXIaj zn<7ajIUMyu6O2Da*k_apQ-oTfH}4unx)O&i3PC`QAuCDIQAKdLuw_O)rAkgUqe}0Z zJ!u^#3K)=}MC`q!s>@_83kr-Z0YQ@2%%z1OXY$oQfdYRA3jBv~&wm01{!Yo_J+%rX zLQYoEKKckFjG#We4GzjE8q(1q@S=Fj08z_mfYgCtVaCVxWi1U zi2xsw2(kX@useiyZ-I{+)W z5pf-gmgk}&G-({k4eAcMg3L&?gQfdsA}S{_LQqLaA7f-S+JukWc6uc&Ej>)zxdd<9 z7`bh&{h(5*9C+8eadgLcyxZfXuweLv(6w(2IDNYZ%@OdagBj7EVp6mLuW9slwbYJ* z6tI)*qO)Mu@PXdQkv&!QK5`wYTLQk$*mJ-kn77rAn6hBr;>+frRk$_)Qx$4r(QN{A zMXJ3>Hy~jTdU(h2kAuHtmJJxeO;t4S`sU{5p62Sn_J(@_k7Yp18DA#z%A28Lx)merFk7JG}f2DfV@#}Z* z+_`hNKJK2>YK<0FoNB8<#DBNuZ9l6}3A-BVluVo8YqB7|2)1!D9;H@;^bApd1 z6>#}(AV^3fQ>IFu58^Q?9B#lLiOMAKS>+>hzfK0S!v{c@OP^zn!zWOt2)Bsv8t%M`(v+=7p4O43FgQo3sE;-U` z30S{nrYGQKP*hUNfe=DM7sk9TLLDU%r6sKi3R#3I7(mzX*?|{@f(bD} zY-Rp0gU|z$p<#jZ<-t9w^1_&4t#}Z$(GKhgNL5k3vE!_|IOZUV$;eS<8U!t##rFHY z-S?Iqv5C^x0yFEd4hG;M2|k;1GqC+ULz_QCn?J)0FZ$~o%G#^D8J&kcgLC_I+ej?0-oA~uFuUseOs%=Y!+UjO$*AA^ zlQ%m~Mg2`^T@n@`tay_Q(I*AN{jG_-B9c zNB{hv|F3`ehhEq!7QyM)64ovwMa$>!-0{jO0pJ6P4^V+YBHloR`^#=?Hb4=2`hq-40M zbewpn*<2)T_4KT*o|v`O)6!N^vsdd4@UziLPMQ!bV*e(d192%gLYY!g2{K1P|C-WP z@7AL0)TjmVYclEHX&)RIR0H<1cmb42HcE;jCIISEu4Q&}ttJjpDL`JU*NabGp}t}c zr8FmXPg98m(|}9lpOZQ`NICRQF7IpkG|13J<{XVV{otUv2i-9>b-NoIRA_j+Y`neK z^m0@JL9Y^}2gsd18No~;h6gq+4GQ-zL#k3og9KWg#>zxSO-j7lG895d2*LM5BQFbU zRfckjTE{McOS;Kaqa?>gx_V}ju8{3g_-(-s4(Z`oreBw0Gj4`0z z2Xk@c8`$TX}P$$=>fXxT)H4u zlY95?9UMHkUAcen?p-f;admY%$XnJ$@rSAiC?;3W&gHh$K#c0Cj0;Sc){m{O5@iX* zqxK$SGpR?i$+DG-_Ey)t9I{Ve)tw=sd_3#{Ck0pbLMU!fRXH{QzlP0)6{9POs}5t3pNoh+l)-iaiPE>PEeBrdiX?pULo6qqJGVON`7 z%zMla^fe4_3|@F*Y1}p=2%r=lrK_Ay!}r(MX`nmZC)cu3yih!B?g1eE>2#}gFY<#w z`LU}{Y^{9s`Hz1ba!<8Gq5b_@EtSh4vm(wW(kU}rFFfYwms37tGA za|vQ5g@_E>m(tUcc24`+pxrf_G*B{h)a;G=__rYR7#1U{H9Lv%?KkdKk7_N|r5~iR zr_Rw>3b`8wKtWvLTFCxzFc~z4-)_@M+?5!l0Ep4KAwYZY-knU^HmTLXz+Ji|2yR~P zV47N9T3Sv`n*f5XTrXLIqXmsUby)^s)DB>rfS^32x^V7u&p-QOD)r*C&;Qtu{@4$H z_J=Lk_7A4|Kz^_lTC+AEx)IxB{liO5CKD2RYCI@(L`i@r{V<#^a`?epZw zF^`}y;q_wYSG=A?dSle28b{KhSum2(Ra`=vaAGIJQS0D9!aLxrP%BJ*Pcikq_v*2Y zu+{J40l}(&g3B;5IvAexuU}W?r*gTC4KG(Jb^YPN(C;1{-e*{XOtH^|ms3qxeB$yN zkh7{Kk7>s}qZx;=Nme>tPJIeWUl*hRP8n}2p+HEOZMm=DA;jxpj?jf_Y6ePgN zi-!j6#$HeGh(;KjHUB2LhT}&)$&-0Ye^OSBpN0N;{Y*$;OvTIAQ zhR9IH^yV@jpkTy8d?S;Ihr#2J7@Q$fn^$O6nxX9RC{ap`PBM()L|&>0goiiHN-NYX zXPco`rFH*)%ii2X^)>AR#eKZ(rIdzKnnEg??dz1^CVmx@Aug@uloZ#HIx6_-t*9jR zh${gnN)yRVYu)_$tY3L+FG?^()E;zOq|C#>n|CSq+_BLR$jV@{X>{4)<5zN#l%?vK6%=6O~8}QNN*Z-2B=W-;Z2hdoN|_z6nUBs zz9oqmo=92PK%V_M+V|&Z-=Cv>f0p+BS=#q!Y2WJ(#sLgi81EE-tk_-MxaeO3Z-xaA z(Hx--sajw{Mx#cfUG>&EEU~@>7bxWvhbV7=jgT)pb~z)kn=Fo{*<)&pH5=`*cYS{! zo$=n$@d=f;59_Uyy?c9Tpj_#Q%5w+x6Tyj5OT+DA04o$?8{RrelwBpjk4#m+v7xk7 zJuDT5YxQ!5VTq}!L-cvwTH4HHHkT~#DOlw){4$#sL-5j4v9L_>b}^RmHnWt^u~%5) zP$55#Ib^c*8&&T*?+OJz$!1e&xGPrZ6pC0DFjG`OS@|b>mA!&vV4;c_j(2@)YkhtF z!q(--WZB%ju=dnb7fX^}eC5iO%Nt9D#~!pb1HqW|@-rDym*S z0o@v*a5;DG~v-YOd~XD=^`E%sMYWyBCUn`0GX-<{SoR# zX~VGPdg~&?E8{a-nEDx!M5t+^KcS(OGZK=m^f!%Sarl$OtDP5xJ{6Cu?1Ct;Z-RGX zg?5(3rW*^Bb3inLEa6cIt04r|@B|S-;!IH8VT2GsSU@8u{#Ym~Oc)43`A`Ez2DR|C zQ}6ZaovF7i^~=7mWU>ZGrcahY&LwYOfG$nV;kd<$2%|+MdqjtDb8r=n8t;w9nZ4S9 zt5S1g+#D0rWj7i~iKN{_GMJ28@+tq1iTD@JbHyZW& zy?a2B-@4^#<%|;>SE*!J%;(aX>{2106HTCyUn@9;HHagbEEGVE%wVYIimv>%hoEqXt4*>1 zJ_aQ`FoeAz21O);QvFn3s)qADLvUKq2&xU#voLSd zmNJ0ER9P02rI8tp#hO24ULa?IC&oEWsEWFG)fn?;FtU*_)*Lx2IK*K7b}`pZvXu0d z1fL|?cS-4MoI>_*5h*#{0lA60(tnj-sYUZ=+RNh1`1HceNU^wj9p-N#*LON89BYCX zBE;Yo(O?p1gJLYOtOB))XjJU?S5{8P#r^x!@ri`*^5PW_4CCNzY)JV|qS5-qc*?IR z648dqR_;}+Mc^tdC!I-!V{yy{OorN2Ce09eV+RLiMxWNhu;+OhnqQ&wcQqu4Ote+4 zrIiFxJ~vAGsP!J9en^=V@G--fSNhD37#S45^NJ`oFs=FUKuMHE002E20aSvpJksPUlqw&T7m>JAtcd>iBdvmvU$Gbg>B1MXOe2AnJ%A%wwrbJp6DT!oE zQ&E*GsYF&vgTdaBwj{H}a+OsQDKizhV*O>6U5d{sMWj`#h?Sz1i=xMnT;2}%_JQ5Q z%wPZv-j95~zh5`dn8D1BQ)vu<2GG;pzu))y`##Z%a@oDTtUPhN;LVD-O1sJWW#sFP zM5@!ri_jY1%u&T%D!Jd`p1V?)F%-Igznq9G#Km?aC?dL6jV=hdehf2CuN4|`uwG*+ z;+Y!bsYJ8kV#_&N)6Qgr69n77U?%J2_2;6sZNQ}XiP_MPuG+=d4};y^o`8PQ_RUTGAG%r z6k(xoFLMI!Gb6_EggMCt=cL;UW6`Ii+5AbFhTn)`*Q8x`t-`Ee1O@yFZ(5GeOVsYQ znU~?wc}cca^9btfGB2ielMY_Mel@`v6YTmtbb%NX#t=m2h=7d?vMn9-(sdPZ8F)MNJ0`GU6{e?BM+-kY7SY ztgR%wL~gQcj3~-ceqnI<;Qsylckaq|hdpAb!-Z8my90Lt38_3fSZUo%ioU#-wOWXj zUqBU?LdH>|Biqd;b-@bs#&P!caaKfRIYnuV5GJ#F-9{;1$o86*a-?$59~G#9F+{Uok6n!2pU~>&|NQ6@t*9&D98%DH*{|?nJnJit3h7{+?FF4lj_a1~o`)Ij) zd$h`Yu+y-dOrE~OCv*w`*;!hs^vc8mVNkKwHL`^uN*(twZg(WF7P0=;tM%W`QbJT3$I=2Qyp5Vu0$TBOPF0q2+aicjb zzd)UCu}`T41&LBa%p_gc!oiUVOyHD$!F{vH?N68mu7*3xdAT@(@gDssng$~ zr*wZz%P;yI$iSUsDqFsWwWfCK7ADaBTeon}4xP2j3xpd-(s(|j=*_Vh^>>G6B71p_ ziYPlfG%<$PU`AP9rr9mspHu^Z+%jDrC1#FBexlirckhr`SJ~?+Tq|7!(|UWAM~^Cd z`)^jN^lPfLNtZ+jA5<%E?#nObYZO!$H0!Z4Z8rD7u{UntrS&$6y5JZ#I1o(eZ+ZRV zxdN7+5V@YDuJC8|J0bk}1|1QM_MN+>&~Ek7ZppfPr(GftgIvgRDUQF1oD({a65GGE zVi_r^%7a}3m5Lm7R;75Ms&#ay%>_)E$YT*Z$`drkBACVv4XG-Xh<1adFo9AxuPJvd zgp8R4AkN zMfrVhU2QZLP^zhkDlD3C-^pS>34;!e+l}R|$ zcd01%F7RFY;k*-ke;4?^s+MHxMct-)!6;1g;^ED;Y?Qts^4!~lctY~jE3-I8#5EGR zAL=Kg@wd33YdTh5qkgIxk!P{Eyxi@|laoV-QdKSv`}DR*cE+8M5spwxwMJx%1B)6V# zT`UB`4{2YT!4iu-FH?>cGUu;7b1t2LT1)t;q`V!y(&|zkfb6so^{p^T#4>24{BH{H zNVybQePUHsXwg!fdVSJxrgzwiI;F4##oZs4lB(C=o8L1=sT^~8b2D8ta`e2AG7s3; z7GusGb%B?u0KBrn0}=5Pl-;Nfr&`65t$-w{j474Bn(v zaY#zx&dcF;ze&lj(wh1>9I?WMK`A#l>sdiB%qu08Ne74OBZ$h+hr{hAUU+=u>9kZz z3Y+u{AfgX>h5Q)dE>e+l1X&<<2$7J06-;7HT0US|L&`MUcwK5OdcAOeowmpV^^?MC z!ux45=V2a|Hdw=(#ud2L_ZM~77qVwlOb8o7PPk9VN-8cel0`d4bR(H%4WSHVVR`k^ zR6%JDMu>+}oqIge>*?$|Vvt;f51+zjb z*cX>oNgC9SLdkZBKu3vf3`GeU@-k*6m_Y;!kF=fQ(XDsebkY;cGbyx?ZmkK&%!vLt z)HM5UX71f^%^&o*rdU7T4cA;J^bTx-w(KI0hiQLfHY=3_F=9 zS-Iut%@7*ufP!-r7I`RD)ezFHzK{srI`gGC?J>nA3LhaQ14D$N;W$*A=G3xy&sW42HFR%V`w$mmLM9;V+8TC zN5dm%(L0#YBqNDPB1_!*UQ+~n5`o?WPir+1?Oq<%C9qWdJTfyEnHlBhDWZ4@K~G2C zFQ>ACs(S2*h-{gJnun9oiz6eoqukVL_+Z>lnei)lb4N0MTaACf_+27C7{B3)D0aN@ zO93LX+&i7ScT2{1N};=VJDr=v8V3g)DyQ1Q67`VbjBPHW7V&ZotT2<|MkhnnJsXpJJS!Wt_hNHGYh7uCMuOmp5_38Mtf6o#$FO%R^Wh+wPl?B)TBP*^p;cV?%!r z6Kk5a2+lUXf&IzztxN#(Ay1)1nA^rvY}cOSyycxECI5)=}!5rI}}uAdM{ik z7Uj9VzDz)~9U`Lj;K7|cJN&%EKT1I&r5jT62f{AX8yVJWN_2t(Kd)e(e8mgVBQVTT zu3M?#@_;}Lmwq~Rd{&*_YC&qnRo=YMN`(xKSdQ!*@};163asdas*~seWN?3qARXwSctmKHVA`e@&_%31O5_NQdDOwKlcFM&I0tN0D zAaKuW7y<5h)J|07&NY0^?E^QAsUJ*!`{iCAp(eSfK%cB*6KLghNDp61Z^yk+qzGC04d>z#&DT+ zDmoIu7l$p9#aQ{`l4$Bs#OY)_wNhB$#-T_sd~aYtVGa z#k@hv$OK^ipB^WM3+fCJ%7jt`hZ~1*`v$XtQG`@`w~Q^A1^C4?fHfCd&CMhS(*RD6 zG&a{rk8jrxbk-9gh2WSQ7OcD=WJw;P2wc>WrjZv%q%~vZ00+<^#a`h$@;i9qa45`c zq#GXyywz;Wj=Gp!i+L85)4!PUY>3v4U9v}TERD9cqTa1_!@o*0q+)5`?XEAC%%fC5s6CC9f#DL zqdEJ#kYJyN<~{*ue;+jWacJxpiWU_`G_tCD7M)w|`1G=VDxIvKN*@j+uty<6h+IgA$K-{T z7x$=UgN;Uh`DRTRSP7N9Jt)J~m0+fvQ8Zkp zdJ00?BG&ij6{4%^bxgn{X=22{@;Vq~GTi2n9*e9Z7(wG+!z@cZOf8|+jEJJ7XJm=! zcQFrOP$a-joIn_g>Dy`&0-wdn&&Gf;OAm>t9ES|!iWn@hTHqVwofWSbOQ3!UGQeO# zC_Og9(P8;AhExJ}u}GM@cr+|Fgo=m_nG88tSKRD$+qyIG$KeCMRrX_Ocpo>kRrVTD z1JNiqhU=7w@uB1!D8P(6hhqcoh*;QvxZgf(pxTw~4B^dI=`x&=lqEcOy#Y!1;;d|p zEHR~wvFTYR>za5XQ@++{Ak8F}hdk)^VF=sp0euHi&?LDM+clFqiY6q>5C!=f&42o~ z7%SZHsN1PGiNBx)I1$C60iA}4UUT4ysPgSbty;c@YJpcE94C*1c(!CHr@K?8gQ{(_!48-|1`bJQW9fhiRg6nTvG4J3 zsD(t#V=rdeY2(0QKtlASgVDv2`$P|r_Lh$x)ec&n)oh0J!h9-$?3KI&H%6p(`HEma ziAGgwt@jrf&p+|RDorUN^nUxzHxbVKc1Yq^na-QA7sn~AUAp}I^Or9c7XNaG(DB>1 ztNZP~NN;=8Cflogg${>M9W9sn5(U21tYB7?I#?2yMJWOFA5y%^S6WR_VP7Ju!Hw$v zLGy`)d@d_JQlqpK6?T>+ud93|MAPEx>)&~^-W7lU?%qL){>HT$MiDEte?ZIAT%KgE zax6^y_@p(cwy*`beY7w`^31mqy?%G^9(l!$9tm7!V7^t9q*Y)HRztVKP^HtQBvDK7 z#F(V5@)fuXKa-OxSz~A=c0>9pOO*?$`~;m2P@r1nD`Hq3V^WVoc*HEqWkmVHs2{_G z%x{)MdKSk43|t`12Cj?B9&K)y(LiYZEdQwTUd%8#S)PqRssKw(S*Zg2ZeahTNCE6M zBH=(}1h7`ta*rwf^3BTkj@L1m}1({wZE5|)z{4dK%;J=w#zax)CKWI$>I$;wxJzOs7F6 z385*$#j=+LycAmK^p$su(PH)~BPWPAvI*`(YL@WFh@6pl7m2?(Ck55aW;E`GC4G>$ zD12IxH*bS;(Sfy34J}e{XrUn_eb^GA(4(g~T9uON8$eTH3Zz5wlR#5q3NEqoA|QfI z?p3tqI3e#6NJ6dVK?{|=S|=MhkMY>Z-M?>3E1LzI6yQMvcWYy?TF&jLui7|%cle&b z2>z!`l$Ej<@ZvsSbUB0tw_B;ue3+oBPKjunt%T!lZ*LoEeoPzN<#HNMfK?hpNTus8 zZ)|LobDfS#qE-tQ71)Liw46a^#|ZO9EVq~<>XW{L#RF_qnx`2}c4{MXdMPUwg*=la za?tcx&45^L&ocu#W}v_foM#5k!^@~Sgw&M&1Ot?fa)K%@Vd}Kx(aD{B+1%MFxmFQs zO_1(fCK{rM|8QsLn>#!I=S~@;05cb{3n`xBL$O9b?Vw)K6ROssTrZ_nGStX> zbnknOwIvu}a%t^CGJW~N(o$`Gef`SQx4!r2QRXflJ(FZJ9COmgVkh%A-}px78}3G; zS=+8P6B!mlz3TZ`oHu?vX{u?uh_;*BnZw)54ElCyEp9;LU9IO&%>U?1e{QT$wHgm~1x*}-iC8j5gk*ON^EF6lkE@Asn_Hm-*>B2{6EC`WWT^oQ)9 z@Vm{-k(q}jCtgHib14yO)L8kVxv~6De#>0m_`J*9HG9mSg8bEL4xja`Vf?=T}5-0i%v0Re9t zT)8vg%7f15+0Dk;jb~-I)@HX|lilheyNA`!yUZDlVVN?Q&=u4v@Q3#CY7lCwn5Ja2 zEmMU*r4z5aD52m^O3obP98q=VPM_Ug=kto=OfsIpsAs__FOzO*(T>QnVP=Dd7cCGU zjg-X9mL(pP+R(~mM~fqCghosrgZ^rSjQ~<#tY5!=eHj+$EMKoDsYiG|S^xGM&SIvP zxqJ68Q;S1+>+xFV@a|n0LWm#kFg{5g*t0EADm8fEos z{_dmukM2Gif`7Or6c!qGs^p~3uV&7l&jcwsqbPY)sgP&*$g-OCyJ#;{s%E*S>_dtk zmW#Ew*NXSIx4*f){p#2M?W?c;(Z7B55C7!VSN~)=K<^m3mr_)C&gWMzZCot+169O7 zC6?*lW_rZXDn(9QCv`M&bc6$kr;XL;IZT-d|Gsz!m@w=>g;M3^c1I3 z@nk$j%>@HuqFZUn=^iv#GdGv&2CuNq z={_Zu4%_`F=JT5grU|Nfxc1){Lv-CSRac&$ z0@pr-r2CLzJ#lHuJwR(VTCyDF>Q7#s9;9eSz05iAYBnJc6%RAE>9&r?7P*gHmPzV1 z4LprFSy42U%7J8P^=Wn-6Jan1Yp-0MUe{-BbFO;%&g*wyzw>%m7EeuCLUmuSqmYM% zGQve)s`!j9j>@uJ5rHxXgJ}vn<#+B>)}&s_d^GbCsc0;DJS%|1h z?VdaY^~CiBGBKsBt8kP!*yY(m#wE?c5M81vK}>Tn@sgy%rWc3^>eH32Z!bhdL<@X| zHD8on^7N;^;#>%^Ie4aY1M!S~#LzPBLtvHk#>BFMzsJWDOVxtl6Ll<(W0v@$L}`Mk zynmQ`*yRKaE}L}*hQ_T3X(z|A>awR_hyoIF!Kslu2dS=BQ;j=pjZ`dEl@)p{lA4Dv zS6Lit1*AsMQltvTWU6ye1`(;a5d%P@Q-ky%oq4JA(n}q8FvAQpv`s=Vfd2XAK=gS_EG>>&N{6<*cSF+Sfij7 zylfs)UH0@JQILp!rlTo#z++0$)mYcT?VWb04IN{#kKwmF54Ensi?xE}0>NPn6{!=O zgI+qq;}hVQM1_A03Hdqj>({_9qQYOiKEW>!ZKU>&Y>^Y*!9C@8QJ|6acIe0p6nY*H zJpmx33XA|yK%LXLK7_oVBfvo7KPl|r##i-l-l2lfh; z!V@f|1p~oBA=Wvs%#$GnVe_~jjC_?06XV!Ewg*ys^QCine#AP!f%sjI?B}abv9M=@ z{t-ABIn@W2)<-{Z$qk&rn5Gox!`OK8hY&^1y~8*PTcmuD$FUEg>pj{>5`;uNtP~rsW@Ob%IqL}0ah&)67|M=&gu^A;F=qWJyDdey88N3Q6+hip^1vWp$YST98 zXJ`OSUhz675~VmbuUU%JsYp5)l}SlUiQ^h03x$zH!o|wQ0+ET29Or)RJ{33$se+W? zSg7g3OolSKkp5Yr2m^7K#bPG&!lf&#=PoQQySZ~4Wy38I#NoP91(&2O*X_|u5H4Iw z?(HoXR?HO3HDe`3(lLc<`K1KR<#p+1iN1se_7j=`QjrJKxfP)Zsb!YQQYX4dwb#K1 zts>vJwxpj9he?<0|4_5rl%g981i8qy4Vrmk9K+-0mN}~_Pfhhd!CZaVlPZ6gxsr~7 zA2zIc>VV)(a3gMHb!8%b6$)#F<{%0wt)!#LXgZ2YPbhEnpieqgx8L4Bpq}<-D%{5{ zV&I05%u(^L$-1IshWnSRwY^$Za%p4mK3)ekJl#$&MOCY2(@OQIX4UIlj$yII_-D0< zhPPO?(bQC4NS}_iXre2>#F|G|5&Gs39FCPLbUxH6V7MG$jv|VzVNn)IGO`N1(Ri#)dAX=jMQFCDI|-EOH`zgpS_}d|m=RKL&h$ z4EVgqu!9wA&4!j&TO;?IE0G!WHH#&8K3 zv@Wk@3PP}jRHjn^KL$hMk#gJqJk{+T_Ye2=V-XL;;q)#C2YKYGvNX@xF5P-OJaFm#f z_bP~M6Xa1)>(9_7Q5n9ab%rt*)A6(!#=8@rq0P-$xQ&RB=FUMzeW6;b#vH|{=kw?b zu||e6gQ!*~uxIG)$bAT{#-Y<%Mtn*EYTb+hW1O*?Cwuf797m91N!3@dOXg>2Hd>AO zx>0}u6Oj?Pi2&V(QLb_Kms0&%%H52UGtIj2D961Jb7TFX;<)pf?S+1%L%}=1eHx!l z86i@yO`ha70o9aY^AwFup>jATY^xLQSUr2-glo!l8MZ2k`qCgw5qutDW{Qb&kPNaZ ztZE_hO0qCS9ASS*QWipSfAx=k7!&KaNZ3r&Vp@*J znyFX~$A+SJeMWrP_!b#1?nTX{C6B?y0AG$AR`c;eHUGC;^pNwKJUR$edj1`jj+_Mv z$P#@_p+d+WcTY())P8m-F^7`>XZD5>Awx4lMsQH>DazBd=0hb3R8q{#F{q$~SOygf zrMhES#snuJ$AKz$+`1uBXF#5~yJ=TNli#Fiu!$3gJL9gfbBS$1DsyyL?TosT9Ime` z9;Q{WVU_Dj4I%L`ts3HCQn1x8aj9j_AH|4k^|-zV8)0EP@ke$&QKx6kV5zVa*Y~4& zZ@j2NnlW@k#&LafXg(m$W(>6?QPpfxZd9bQ;*4<`auSS!Xd^!}u5Vg1IYM;M#)&*6 zAL}r#2cVgl!m4#fK`fz)kY8sM>x_bKWjcv`GLS@`+8QysUo|^C5@f0{r?C!P(TFAP z8&<2C%^2&eJQAQvGu5o6nu&U>CNc8jJm$Xe;1ZKT&Mt3JsG(EqP&?J$j92&FP`9~Y z40!+pd`~D~LJ>xyCGnkPS0mtThhhwrH68cuF~#lsi6ofg5UNp!UDp%czUy=yx9jvG zeWG2Zw($ldV`Zfx9;6!91|w7S5`>R8!Yt!UWeDeEwuw$vk~KRsN(VqWZuZ{Ty!VDV zK1gEePNFHTtgTR;H!xxiLKUIljT>V%8>p7x%uN(ns2pgfr*q%|cY#U{Npq-Y0v(Ej z{P~Ef`G^s%9dokGO1DG62wmVXwJI5xotYcTh!OmgO~I*X@8GI}xp2>BqnVwVCyfSr zwnT@-n!wY*BNIkfQ5giN=`axOFlDJ7*px;V_(gOo%gp6t32Trb;A>#jcOQ~iTdVGF zW@C0w))YO0wqqgGNy4m_cY6KBVV{)9;o@?*7ke?+Tzk6MUU+6XR#OXzmLO2g&Sc0! zB}(U8wN1EZ2PRWWp&z4T1~i=R=k9VAZM* z*>YIGI04kkqQPf21wy)OEd$$7;$fZQssh2;0rT0)k?G~Z4W2~#C%7^CAcqy8n2azs}MAa}+MA@jU_R!4) zaDafIAn6cMLj5ffP$@1!Ix?&Vfg!*FtwRy~k%z5zc{NBP3LavC=}<&3?CJ=~=b81N zD(XBc@kD+YE=aV!4h{CXAl%$XnkAPK=lrurxrXS0d}fR zG$BKC_3mglvcJ0@jqXRH-`;L^_eM`fD(Un2H^ar%AX98*X87XlNx1;GH`z8XIiuWp;FOayZWfTFGe`p;8gvAmHVOX| zc^nY8KCeC(J~)C2R9_f2d^~Yx(IB;GJWPb9Y*|s;(Rq?vTpE}GJitan2(;kG=3)>H zrtJA#3Vmb-zVOAt(1-rHzIz0^-YQTtVyzcR)XxWj^#_3U2jK`3_47e5dt!Qzg1u_~ zW??z%jP?lP*lW(hQj!D}Q#Ois?~X>_{`U4ZuHgW+?;h;#-fLiXaKq)|gdNWieUL$; z=3phGPy&T?N0At<)+iD?jhrKhx!-!0HE}%a1Bp1@zP@mSc?!e6NXe0VA4=smh|R zZlm9-lbO13Tz6gk`nUh|>wkLd)}Ma+)_3pUiI1CWOU3rkUYyliaW1*)1Q(|yxv9M%YpT|-Ab zrleA|3MDn6Bbg<4{W<9CIq2&uyi{UVuNszbDGu^al>iQ(@-@@sLXJAmQ+`PhE_N_q zA3b*TxBgaASJKI+o=iXWR5}SaWPR#uqbe00UOhRtn7A-<0Y5Q!C1G>ew|xG#Kw*(c zV}_?KAlM!bXZV;`7eb#?7(}YmW{Do)TS=@8M2P$9BxOq_-J{#9?sglpK529p#7FGT z;Y&sMQqj;AC?zlOt<2j?e$GFWB(7cYU8d9|X^BF^hv8;YW{GKHK_-fON==J5C+R1X zDK#%l3_cuD)K!yrCT4m@8gdDpIHkrinN+JkKJ21LY0>a>ybD?mB~*n#<M{9Y5^6PRmzg_G{8h`2F&UUMT^kUDQd)$aKBKaD}6RM zNj~-wE{2%xM6*xO3$cR+JwdG)OIGT$7(6qZL{0lhq|jpqzrzP%O!o&q!KaSkld>%7 ze_&eT6z5=tNwz9Ys5WB(G&+7_642~Hd!KX~wvmn5bPh)Obqb$h?0=uJe}J+7Y|&Ei z^vPms3Sj9mp}d4e5H$rct-)q)Iv-QEncwLxJIlovq+rK%&7Tj<(UfuKAvgq-l3hZ3 z+St6Ao6g&mZC*I3<0Fxc?N*i`J?m8!au00Dt&D- z-z+1P{WEMWwn!rOb&noFkLq012>eD0c(Q(+-noog2Cjyl4+4%ArE11wY~})Rn~ozdm9bb@-j80%UwQ6E{<-J!(I?{3_?0X1C$9YU|Fe%xZNiVH zv<9m`;p$AWk4?u<+Ltr{Bd|s5QfD#X!UwfL2CS z$5=Z8LRlP6%tH!#OF)mvM4q~5_!7`tGAzkh^S5X!Z-;1{RtOK4;!7fRvA(5xAa=;$D0XL#x9dM(MK3y0B_4W<9XKLp!iMZ_OjJ`Pzv zX|jC8y7f8Yu3WNw(nW`w5=z2h%_d?dA~nH$F(vOIs~E9fvR>QdxwV3(Bqrm)u^g-x z#07#v@bzI_7vo*bNW^yAMsLtMXcQ>)Osy}MH`c1s{91}+wA!uEdJmjb^}OJuv|)Qx zeXZRaJ(;^i&h%fuv3|Qt$)IqTH`3+1wG3@aNI}LmKti3pDGOT`z@Mj!=b+i@kZMPt z%0X{k3LjSpNFcD3Kk*q5cO&@PW-S(|{^AXC?x4k?84`zPd5NN5qLWwmu)-b~3uIzb z+JmB9`sWZH&cjl;$}vO(0yJYyxe02#s+j|l)h)f3FcMp0mCtO3ZRV6(%mlBN%Ep)& z+PSj|H`X<42!W8rV4vPeG1OkmjVx20no?o|-bBeG6oA+d45Z^HF6oeBJvxkQ^I&>O zsxW3~LMO@xixcdnD7W!gf#t()dmm@=Qu@-u0_{*`@!1*KvQJvJO-hfNO?(anuZ=A8 z1zY0Q{PFADHVH=Mb^mI-(FZr`qf2-4zaiaX`aFl9Tb-%u)u zp@iag^eZF5HHb&$T%nN5)W|5O-aswGCo!~?NO7NF)6FTG5ISbRh$Q9E zc$~`x@uN&tnIltSSyEt5RWq8xdclYF6v`JB0DTAo!Wfw;v+yflTv(t4st-YGTFU)P z>m2UigP-mkAuQ-uf!0@$P`^|(j4#16B(x+NS+4NFRSp zA>n%l^FRpn+-rM8J$(}llTUIR*Js&Htw)zir&pjk!Dy5y5XP9FjdGN@$Lq69DAk+> zGkU>|kkAO9IO%8-<|ytfULZ2)`#e_Zh6qF+hMGP3w_cOT&DLySr-XXGeI5ht zI@2glFRD|8b`o=*6n&AWJ9={G*J@scFlI^Q37$9YACL%C4rK^$1rhkBJ`c-J)??VH>0u2OZ z)90Xve>O)pO$j8x3>lA_Ur%eF5Qvsaxu8@c#wQw1pD2%TZWyr$@zJfwNm6h!c@T)+ zp7d!$5?Hap9v44ER@ap42s`Y z45Unjm7P0Zyoh!q>N2Ym7$7W3>%9<}xt_CCuJ>O~sdCjWL$0SLl zs%jh)W+qzmRDz(?9vi1-J3=1b^j`AmLW>S69tT7RM-M0mf0E3IDVag9avHooM=#hQ zRRqR7I~(40pPeNLtxS)OO9+C<-C@jqc9s^jUOkT@C@$0ML;|wl2apARzO-19J_hbn zcXNHspB$fl)m(XZx8_TMdFXwd{|69zN<#j51H<>ue$hwilacwNkIW~d@#;!&1alCW zX1{1VNAdS4I}czkoHTH=vOB}cy}O^{>|#9sSZob&?g^ew*UsMg!JGg}uKOrC7a5Q9 z=pY(OwaOqGo(zO1XA$sZ)O&Ik^-e~*DewJdc<*n(dwKZ3khvR!{~4)2|cv02j5 zfEBjE{70Vf5p&*}KqB75Cc*E%f^uX%Km$El4}|+>8{ho1KKjgF?+6B{kLt=k(rP|D zPgA*HFNf>*9iw{xSs#5*=Eb7_OU`2}(}+!pW_m9^Li;11@MK@_k9&GQp5o34Nx-pH+b)78jbpqSE#Hx>DdU)aKX17s*PrP3 z`aaJ2#4uO2@0V;!#drHBap;7n)r$>xWW4poS>gzce;(8o{acZzW(h@e>Uj!GGExpl zl0yRJUz{bGlex9TspDA0>pi2tzZ;(YE6~qJp`TxZXMX~k`3<~!`*ZrJ;hK_#Y|^?TG-1c$v8R9`$+;c6NX(dCFeFRj0wt_#Vql%!eCFfN0q;{h z#NDOs$NN>I*$vUCg2%#)K_#LMDj=YX{e+ZpnCv{;vHnghDyy@s)NCD?k=7s`;bE=% zD?iUNY}hJ&g1)q4`(klE+f;Y1r?)tZYMMt{l%lkUw4o z?&{kV6Na*2NPNM2z^WevtE3L`GhotBN_>HjMS*FvELs+DDB5QcO+JDp@6f4m1lPE1r{XS3(0n&wE+bhhsr#{2bceXMxoxfYoP#RTL|56iee0 zo+H|R@VjmNk8pt~o};MYL>!ERQan*C!tb|UvtA1oLq+SgS1z2V;R*3N5nD5g$r??= z+HuZ{i-^WuxQjHv2l?~$iZi%V;Zd))Ot-VOBEB)t2`~fqe)x$?C!AknfL;+^l0~+o z+)ElG7GM=gvhfS+sr5qPQo-)o%Uv-&hpC%)TjR$BJDjxKTC8=kD3_9^Ia;w&ep-bo zj74AQ6_Uxs8I`5(C>okgbkv|$VfD6G+bd@9KHz`AeV`eNE1V=F#qeunrrA#K%H_#e zX4#4!i%%WWvI{;z(;x9TY3Eca(XASf_PZma!2{u!-?F9VgzvlJ&>5!U@LToHo$4zT z!%8HsUQN7W{3af>ul?3b>enmnX~W zHS1kk_3byQb#cxX6Y_ZS?5T{(iSRij*kNqMla7$FMKr)Gtf2)p4HYxlcLZ*I|?| zFV7%`&+b4Q;xhuwO=F4FP;Or=db2Zm^T|Vx3v4OQKtF&Lf(CR1Y7c3j=RrN+4d8-+ zpJdR5h0TQVR`{Ar45f}om0bNF2kLsA8|6L1Zz{%;{WwoRelZexkM+Fu{N|Qq#cNd1 zN`Rj8oX@uKce7Dfylswiz6@h2%Y$?wrkVIt@Bc5UQEi&{@0Z-wRT5I2YQAUOFPW>W zCFed#tE7q^y_(WtsFmpP7T64%WLUcJo2mW+10v6r1V^-Ue-6F(pz1P}XXwsaXHl84 zBq}RUxOR1mvciLOVw1$;TFuz9c6NB#*f36-4WIb&RLf>EiDu51ZD=Vxq>LAdJey%@ zAe3}UVW|M$=zTR#W)rC!s)~E4Yz2NQSseN=;}$)~q)`C~Ix17Yk~;xswdQdiO7>%n z-%`}If`3qTdGqF6V^-3KmWET(htp9AX|y{XLQ{C^qmw>tG*ps4R5UySDg>F*@Me?( zx*AlgH-l3y?H$WRFTR}gCsI#g(x1Yklb6+#XPi8DDduiw<~GIFE^7ekkp2O<-;Y8E zKhK;6*8p#W6B1X?ch1ye7sPvw{WD8|6`vpKB|wt&^KghVJ_adm{zPlrj-GBuWl2+q zZicKhqC3u_ui9zdKXSW!JF=VW9#Q)>u_Wq8Z&IJd2cwQ2c_nTW<7Ov_Xe7mX#fOiG zY?0DJHDYub*cf(Bp&fnFDFsa|Et-PxN0Pi91S-m(@}fdVkrsWUB%Awmoqxq=n%aCq zmqXewhAAm9HdcI0&?>*ihoQ;?7m}ZdRrZ1e?>K7#o;i&JS+Ey|v9>)|&nFF@T=E`4 zYecXFY||2p`d08p_~(y+H&25rACT&(`q>V3;Z$XxZ=q!wyueJkO9`*28khH!8(uVfnmNkk@ylWQv?x}-5TI_6iNxniEvZiFq$Ry}Z+TG^Q{v7}#N%SpxVT6+@WpCr zhPWjjOmy{db>i(kA}XhbGLM0JQ_T?23fFv2uSF)Q#%MHQ>RgieV9=I#68fb?r$yxu z3cZn$OofDFBJ{#Yh0sWk3OU5v2#5@gq>)S9o+DN-FrEFwE^RU-L{c_6G9H$H4#yAs zRzTG1I0aed3&y<*jQa=}Cs_p8i>6C-<)`yQ74kkV&0x`FmCx#R9{wnl`TqxhrYnEp zNFL^7eas2qOx(wrDYmE{TpE3+uj(v-4wUhg<8p$P+6fqPGk_UWVdu}0MuJ5j31-2+ z=!2iN{#?Lc^~C>w9^5Y}mEbW@pV|tgwiQ7&#*2nwd=hvE^@N`Q_C&ago-if;py2VQ zZAMWzL0GFpk0=om9My>#W5?)>k17!ZyJvOK4qor|ju;9Dc^ZO2b%RqU&lf^kZy+a}1(#tCX-$7rZ?Hz8v5m!VAr!iJ zilxvS&wNW^%Oa1(uJ6&**)7hBDQzjV4kNt;jg$!Ff+tPX2(|W>RhaZQkzAyAfK{^c z`Y(c91TtguZs3@pSKsG+1Uz%>F~BxHAX4Xh~ktZU#|8l9od zxR&m|p&o0167Fi8YB8+$WJR3wdAJtj8iEtpd23$8p6nvwe7sM?-Xuj zeN9;a>%Ey(uyo8h5B#13e$p{#W)-Za*P5(?HB6?fU6jr8UtoKd5Z`)IVeoT4xpk8rc!?1!m%Ma!8{ zH#Bn3-=&or+5GFNQ6aTa+<5iX|Kl(3zIwMNDpu|8Uyjb(75%ttq21lRbMIh0u5ee) z%D8dw-r$aZJ5r!jZ`0c;P?L?4nibwusF#aQoS{;q{K*5OAL)6-f>rNIhTdJOHTkFW z&c)m0beqf7?LYg&FMq*E$Jm-)g`>VY89Nun^iAe z%Ot`Isbf0v%p!5$bfSn+5)H2slRb!=n}se;Bp!p26LMJJ+O)r+mH;&z&!?n$S~y(q zn$0c+(k@>}PG$$00E7ifY>A*kDdOYKrHV$5TX)ER z*lU6;AQVT)=3~*b&rqyXSFiGAvL0dJ6-nURU7ktA;|Z1Z*P+aU%KeMB4Ov(i?Wol1 zIW%a5WO&%7OY~atd~b_3$koG}+6tK#_lJT0j4i`3rudvhu--%Su)@pJ^`Mh z<5BtmUxbf_=S_`ffQ4?0VxSbHW8cF?8Kq!{Y+PXONQ0wXh{{7s%|N)khN1(CM6eCp zgO=1>Z6OqVY<|X~F^WP{Du+elmaED?xK@I`j)J^=L61ZouJ4}!i$4Jtf6UNv zfInwgZ=nW;w@tF)xi9}a?>%s*A_`@RFQL><N5Vm+bn?W=l43VzmA;%bmw^-(a$Tyu8ha`27`NZko++hFs;oT-V%zIg5rgF z$bDWRbLB3auTq_Z*w4kALx|8FHrq`vO|=rs$IQsYKp5{3O7rn{izyrho}bn ztMV~)mDQt~bivi*v%WqMje#=TVCr#H5>^|`1`8%P>KVioX;-Pot$ z-gDrZ#Nb5r1&m707v5Bnl;4XJ|kLtvleGk*l^TgDSCdis0O16j(#@G&z8C9-+^ zlcre4$Vv6;bPy(S!}b~HB1x{X7E*JB6sMASMnB{%Vyo~`*FQ@s*SwQFUx%#hgxm4C z;^O(sgD2mf%4V0Avf0a*ok#j1eJQwsW2Z5#<*+&K#|o`VGKvAKF%J1GZ`nLNH2Iza zWVW41)M`GTTb91RMhHd~GKR1zN^VkEb2Mv^%{odnD)OH&s>HM_wBN{4s!17nLfZ))cJ6O^(TO%EtbIAZF3zLP)Lvv%)xY46)^ z@9hoa`l0#Dr;w6g2ExA$gntVuDfwStE?PRzNJCdH;GJLKEE~5j#eLMKzv1--06)-> z?{x+a0nOAywWRql9cx?C6M2w{(NB&PXI6tO32plY621m*vr6S!L5hTw0F`dEVJQqp zk?NG=B2nmGqP}CAQ?BZVp)n>na{n&o-5Gg8&s!RuY$rtp-;t5YW|$x;7nq_3XKWDL z8`Z7)s3{4g5)j|9H(zj^o%lMA<__KOoIRR_(&QTcv9tZHzuB(-P4)f`S*X=J`ny51 zS{>{JX3baBJmS!|cYM;q;k;vxdxD`0-94Lmq7!e8USNf&o9GUter>|e*a=$_(rKVs zt7TpwNjh8{)hODS-%qU;R#Rg7jM@3s9DSJS9z_Fa+H&eI*OxMxb=#8`GHY6-;Yjl* zjQ7cHX}M=Q;V4!8Lq^;LuqQo`!KtTYBm)O?k&sG{ir_uE^A2F(-ClP%7>~vjmF5dl z%1%ckxsPKAE@(8?2+(YN|hGct~t4iwHteA#I8h2b#MuhRvb zSe@Z8iq;V&t<+6q^0~!WY?0o&(nLJ1zmrmURt9f8_O?rSs{aN2_n$$XzYBH#I@FmZ zMki||;K5PeBgTIRwMs@zhBbNCaNNkx%KY&#{^UL5pBw+2`6usvuklqL?|n&qc#nKA z-}@(gdf|CB*K)L?rWso1%VWbgW6v{ll#xPDhrOSLyp88aebxMUBs6{&>h3-FEX5r4 zrtV15xZvu%TcT#?vz9#?2yLHxGomBTE&8tj|W$E}E)>G*@Q2KrWdiZ<_#bLeS-%*b^M+LvovH#&VIY zvESX_k7T9AG7=7$o4JQ5;}0pM)~V43yiuz)nk}L}xpx@@oBfRA5HO&Q`tu7B>a?1A0rvT&+&-5*vRBFaSP+wkTJG|Uz~|i(24|t zk8E;rLt56bb`dC(;~vp(p{SPfKY^70HTcLY@R47Jk9-=w@oPnE<4HAzk0&(q$+MFD zlV_#$r#8-b?QnSG%=Eo+X3~D<8UOwzD zKfemz|GuZ)`tq~r$%+y(elLD7I+Kun+xHpCQ)lr6n%rErT?wu2plIPEu#K}&=l9hrRT_ac zv4TqHh34RFbczBkbSip@25|B*@^QKw;!iK3-wy*d}LwK44aEHGIt&! z&k?x-C;?bRzYPb*@5h)ODnc_)uKl$y{Ld_4YfYwW&}r7HU;9GD_g6%GFZ1(n38IP` zspX@KLhB$xE9vS8w;&p|bXD5VNyD9yajKksi!cwag8m*t7bdLS44ukL9)rFou$82+ z6p%YU=%+vZ>7W0^Cx7OBZ*TqfZ~yl1 z{$5#r_~b8s<};s(edB-sgWvnT-{srZ+u!#ypDh2<=P)74@D$1`qGr!qKMCTg?>z{p zef8yWe5BN&+D<(t7Q1oKgJF-29(Dt(UguMvRxa2Ov$3Y@;6N~8r>7D4v%U@Ow1fO( zx{({hX0s=zxF#jEdcAfcN{2Jd7Ts3OF)S=7!YohY5YJ+iQwF%x4)Tv_nxFfJGM{=L znGZD^)7exrdxpt8riusg-k)JsS+N_-bk)M>^5)(kd4A0p4Nc?Do$tN=dM$gejTz18 zJ$ek6dPZCQ9&?m;(B6%Qvc9#f-17SRX!qNY?qC+2rWsxOr?kPdLhqIgbtwFn0Dz7p+j-ZB_O$gcl0S zOY2LI`e{sy&bU8iw-+NP*(#^Ute$B7=!I|Ol5t8Zp{sPdwf$QB^7#uz*EWak`uXJ$ zz6yF$2l@3<_NblnEiqdgI)jIuYz_@2Km939?f#r<%w#<{vq{u^;ETz8dWSi5t~mX7 z@N(aDq+5CS(Y?-L2ft@sTmX#=onA1BZAR1hl6g9 z*yiCF&icP9ts(5#CHjl9VRRjs!g29#mC{&)Akp?9k zBv{bJ7Wx9CTEB zyd{3a%ADaSD`UolD%?=3t~O#U@a)4RldeL*UQ1dhH+v!2B;TgfajT<#h)0LLmK5DQ z7#>$h&Z1&Wj#)j$ zS@`!pF4N-Uu7}fSn3kjHJa_KG;Ty}x^^LP>5S}$<{Ztp^jfcnei!*5q{z2=fdMiKv zF(zk5mpC#rGIhsh;@B4_994L9L~oet0%y?|PByUK$Q{uUfD z5(+Yh$BV+KI~9RHC?fDg`KH9%X@1=s))AR^7HJn0cG0Qh_h)`u4N-GNCFW+a{shT& zri0wWBXVt4RGlQL<}RC4M;ysF5=R8tnM70Ipp}yy&T5_g4DsJz_3Y*U0_pM>NSF0u zjAz2Qh`oFTfAd$cS-r|SyTCeo#c)!|4eX(z$g{#9dAN~Jd3zr;UN&DcUou`E|Kriu zM_(WR;}6P9@JsA^lFcg{)TUzY)SgfuD>^wH*e9RlRiEE7H?NbT;fz?a5~IOF-*)J< z%*vI>6Qf7?K|Y^}6ShO=#M((uJ5y>FX!Zjf|tE=TMXqifmqX5DdGHVx70ZhZ$ptmnFWy`lcM z7w9uEu}vMhJIYruhrDpJ-XF(W&)=l0IyTK{RKnVJcO9qQcAVYaWU`QxHtV^m%rp|LZV0cUG)D7_HyZsu?|kU@rHPtcE=r{cdF2YdaWwki!Cr&T z0+#jQprZ<7AM~vUmEGn67b8MLE>$Q^u8@-}2qJOT$(6o1MQG}OYGjJ|2om_s2V}$t zj`6kMj~5nE_7)5D&MK~z`AoF0>eMzgLT))p3^nT;hLm6o&6gw9rrsywU_uriR3|8R z9I77HZN5O-@{lwiLS-cQ)THdtXlM+Ej7b(F;x+2_E!sP~ju01ZHOJS7RB{i)qNT4U zzImy(Ee-293k{h=^xgITfqy2tM*Y{j-gzdPQ1{Kvs=E^m)YSV<%#+l`bVh_Mk_@E6 zW(X1>b$R4S$^<=(Eeb?LiDydDA)#Hb)#`1QhJ@dRtam!N7Muw8Yr6#Xj&XAkUK1Wg z9NL40rEfxH5DEUHoQR94ehIfBj}Y8>Ig*L$eXVQ% z3>Nz@6iwsvaKk@>8@{Z)h0k0I`;3dRA-6m@2`5k;sr1n0TlT0I1BZf53CAj-wGI?+ zJFu}{DRqQnT^rGP+!AJG^+qi?RSY`_{Eq0LQST_H!i62+P~J_j2sm;-9*4RHTau>a z!kC&9&V-3E0p${#+qAo}fzO$))fGz;b_7$B1x=m8D{!QGt8LmXhp4!^>vJUTLzeOC zUXI*_>MucM?Fkz)&1>7=yjxQ|s5oIl`6d>oy-Kr~@88`HGNGvOA7MT_uWg<0G;eLc z_8RPGV>y@TY!nK&nnCsh=g~|@F`xkB8B7>Yl3@BnUB`Ryuu6*nEL;!_O}?;wE(qs= z^~`b}fo1tdBfxHaHltZiblg*H?ZE@a-)}Yc9vmDrcPkGpX@g5Ug-%aSYP06-^`_iL z%tmsZo7bM6;*vLa8h%2Of=4>~L(MjH-nWjD z^NSHh$3nwUvW>|$g1-$irsmRk6dn>M7a1HSW9`rXIpX2|3jO3eP~>eW@;^b5@4^r8 zPW%Ax#1HUU^pn4ULjN!Hlh2}`d=~ZKRrAk(=L6#pjV~MDF={5gt!V=H;V-?1ss>%_ z-@W5g?>GLv@tyINac0#0%5O5$fSTu5e@Gp7VBF%TAGUty&p-T<8Tpd=j(_(7`M*(j zoEcx?eE;6~)K`A!{c5!!HX}7V`h|T?MrT`~7ZdHk|JpKRlYQCoqn%TlNHH2w)?$iBKyG)cw@p5J>C5A@g8Pe z@%h8j$9qQ6%^R4+A65qj-6NN6BGeqN=@N2l52C_=2C2GqLsMhx;p?_Tj$pB9tz} zrp_9AQzvD;hPJhJ%|Y#I-m(*YPvzPu^ank8u6+F=BHufJaufP9&8gi42 z5Rtrk<6Xcu7ajd$XjCT$Z`!rjzw@xV^AuI1d&n{fRcvBqb3FcPbU5sH zov=&m+Al>rwCID)ac5uo4=$LeFfR0^Xd;ox#tAL76O(@(jlLQcoTAs15pup1%@VSl zKrI@_zw&C7kOZfXKp64A<8i;;Y9j>4lmFG19rSFx${2fZW>zm>zPvIj(ZGJPjmptmw;mo0GYk6~2weAspj9 zHoAJXuuyF|*|n=*iXJ?C{q@)1++T>dzVg2Jl0CrYvmN>1gOT?ssMVJ~7V|+qOU#@6 z^X3io#L-Cd80fl5K!!OKv0@r5+(|p3{V(iUtB@lE3}GX1{60!1eL@ZF@@>@UP%P|3 z;6)B+8kW9~xNL_)aH36)$=^fpa1vjq><^Gh1G(j4ADyy;WuGW>`p+{O%_Ao_cyutw z*$sn`G3b%#(O8L?X$&M@6dUu9d|P29)<8s))hC*CAC01(>jCcZzv`tK_=$ZBqjdKt|PWj3v4v@GVl^UNU_GGa3qOqEN+GEN13>IH7WfQQ&k zwqg|O>yB(gZtY7^EXe6}*d7^4Q0~~JI#x2>+$V9bcI;A=+Gw?|@TF*LAh+sv`@OFy>+>hkh`)mT{nyCfe~$e99pvpF6s_mqVsqF8XsCmX z!53}<95%^=(nkmeY$g$FsKCB9TsrTH9LvQTxO)(0yQ(>;H9}};vG^9Gf`c0DYs6M$ zjK~_b4-@Hp7O_P(3L0~*NtH<@0YfidpL0(^iKcIhSD&Zz<8_fqXu`fyjC`V8;P)zP zY4;FGv>eenBcK*(a-L|r?$+&=D8!y_+0xHNIPrLq4 zZ$zVib3L+u`D)A{kKGzzsK6NHn(W41R1Lb zNv+k=>WFoTjYL2u3>c|m z-D6!w?(Kf*IN=qz3E?wXZCGItYN$>@UtWZkiof6$u5E>+xJ1Xj@oxWim3Z+%AvY(S zRsiC^sIg$i#|>e43(|d!AQq<__0U5(s}M(3ZA0Rk>rF@hr&*sG{R7= zurnH)FTeZFz&?N89^CnVX?qtSNzVJQucxPbrn{%-xwEsg&zswO;P4<`1VNetwUFdU zpo@}dMU+*MqDP4pDRvY`rHYD4xm?>j2N1U8q7^fYDpJZ!EU8jq%BCdRq)kN>MG65R zilixkJc0*c?{05zZg+NecAh;wul)XB&+O|C&`DN$cV0a`-Cuv-|NTVju=s zky0qSZpY~OhHZkO>M_Pnk^mME?n4^}QUYM4Yad%XGe3Xk()lx_o*FS45F=pvNWQ6* z)Tb5Yu^;JasT<#+-|n|xfBovWzy0m2H*VExm0LG&Tzm7)H?Q4H-MV%2O+SJr!EE&oDZZ?}p*bxfA5D`RIiwFfj{^#;|*hX(1!4yW1F~ zQlzaiWeUL4x!IKErqkJ(nVCm3$!wN7O0a=cCKh*-)ZUnELe%fFov6#^y^jjO2qQG= zWv1!}9ltlmF%z?xFVQ`;?tX2n)(ZkG04D9rMp*4)v4kCu!Mmd4!Nxm)hoMipebYxf z4%GEd4dD34^12jyS&v-0v_Xf0V|W34O+ZUQSBNHryD}G;+)(ND5G4+a{0&C5z>J`= zsh?rz8kc7y%orP3#?K%mVL_kbG*VXx88nE0BAo=3y`lg!k)E7InFPjTY~twV#^6Yy zQy1Xr_yA>$TtR%toJakK!&b;JIWk0tWmTZ=Sj8Ezm*_|aJYXmzENk8pz8tPA_)FB4 zj$wjt7%9@>a2R=RO_GqOZ3-p-oyZaHPR2^~EQg@LAaesam@TP~2JQMI`~yc_1LdynkyyPwnabalOg;YBAW%n? z^sh{s{`y4eJ%4SQ^fyn8%7633sC-n7?LV0op;e!vMSrujCJ9&{qc!EDwl)d{k0Yp{ zCr3w4P>{Ey9qH4w<87!$?k-d#a~jPJFC8K}n63~STo=N0c~!;*!b1YYey@;T*=N9e zsF*@oF9D|ql@$SqTz>Cq3P3MfMFWHgzy=|Mkbw~Ig%+@(azX?ds8`^VoJUaw`4%oH zVVIuEO@=%~qGhG0NF6JwZ2Nu4H9v}6BQ*@uJ5dHP54Uf!&ysUs&`R}x8t zC+MDLtlKaXm_{%PM%ZoTjUJO?1>%h0NBn-e;k>L~?^IDee0p|vytp)Wm|s~b&=SoV zB2qb|OoyFJc{}RN=K1Z(lgRnCN>y{C5kpx|L!!lwW$pE21L7b-V zB22m)D8#`)3X+LXbjRc%CJ4qVo=5&VZ^lC^jL2)xc8(gRXNv=@B^q&Sk$%RAJea2e6qXtqP8(18gxNZz@jt+N{w(YH^Q`AT zW<7tJ_59hAer`47yId8)P}rJWTdj=1wY-b!tD*0TTcBq$o-f*>OS(9JEHD-h?n}c6 zkJLHZaG41dO$r$xX$?Im8WXV_X?&zj`^3oExgNJZg#mfXPA%pw#!`7br{_~0L;AQo z;%u?1tw5`h3boQ1guAQ(f-U9&`ejRRb=leJSpL~kcr!9-jQrRYxRLNyN}Kii=8K>E z^46C>_qi9BT3cK4Pj%DGGta!Ilv#Re>8Vl?jkDqpTCQOgc~hq-R1x(!R+QaE=_6}5 zDfZc;u8$;#5mEw#U?|u>oefjO$2T_)sAeQrJv(nv}U!)J3`meBXq+{20(E^-sUA zq=#JtjsQ=VEkuI3@$8Kr`drGP`i1LMDqC0!{GIys^+KSmQjZ{ z#hZLhtB$4sg`Fc?FdToB_Z^}ICSVl4@jJehV@0l06971cZ#YFS@tvoieza)ipU6M) z$}3;~`X7Jg%U^#nU#zqaK_qk3H8L~(l*D~wE6({bW{d(Px%sMomR1Tpeyi2LFiV_7VYmTx+KI(30z6Vx>{~`A63YXz&0e{N2F1my$Lu z@=k*S1_bTIARmE;O@%Mf-Ov&PG&7BZya)%bQf;qT?N>Nnx}VEpXhXo7FeiOV%h>aHa2 zh-Ni)!=96Ud{z&>gV#pn35Uq!U|z~t4kDfz?(u9+C&$aamB~@^Nsd>iRXMj+F%&t0`6{8Cu62Fu(q zsd(fD!}7$~uUKZZ95T|k`R@4fA@8Ow%OLP*NX4{|a2P0_i>Fn9mqdZ`+kbmEZvL(( zw23=#!mQ;5b{4t_PwqR$&)4DD(8EI(uBbJ-y|;MBzGGZIq4a(QG0~`(Wz=}4PwbOB zQTsyP9~lkFPn14vmz$vxL1(0cI69)) zh>iq-(Gr0~FmbxcIb_o#b9w8T5B@mY2cLQLQmOQThf1Z=rAG%>uFO>kS4moa69-bI z2{G5KBzr0?VcP0!@~loIV_~xfK{*u=tU$~os)&WlaIg^-I_@D~qsa(ycWGpr%QAe0 zUt%c@*>!d-#?b*wi=AkQGYbA%a5Cca;b?xcpxwhPtTzWQ2l~voeOeq=~ z7Z>lCgrV*%O$vl|iI^Y7GhYQ*bgHcf`c z`EycT+BM@&HXhH~W35W}rJN%HQRssdcy_u@7pI{UmY-8ot5T;Y!{ZEdL2Z+*7VHm# z>$e7j+VxJxDV;B!pOZ$K9UYl4>NJzih`L_&OecjfpO*QRD)q?4a+fs5mBt3NDU{6R z&B~Q4n&rXPZP*WFhTZ<86f>7SK6d8e zg44lh*!PD+pI$Q#y^?Z$iOoT+qyMTj{6g{T(}Y3YpggJ3$!oY3r}hFnu1C{kZrf?o z@7HOFR+Qe8=2*1TaX(JT0^_xOvlp|}TKr5Ys(mk#*H6h>XeJ#j3_k0nGly4_i-3UP zHr;EQBIZvv=ID+CBC(ZG(3PB<4v}tTp}1fg2nTIs8v!hHAR0m>3dJ|>S*@%`LCiln9Xmi{N1iwJAAa+K*j(YW4r&A-uhKORUyqJhbr>+*!&zpa-UDP8fd~{?irt+EG zC`FeH3Pw(#Bv!$Xa{kr$!giwcDNW{=jkmgt?x&oH)@U zk=1W~Xzh!?`56Hiz~$qg`O1#K$pmElTm73`uU}dH(3LN~&sxa=HD(-$i78+S;f8X6 z?z!b+ky=CH&Ai?HMeT)DBnemvgv|nBZe8CJ$kJK}=&eyBX(r>5q(<&utK!+fSr=y6 zcCT*$U_cr%6~N+9tR>Tn3At9wCNdWr_X+T=#9Cb&KogKN>8u+i-~Gpn@Bfgj3e?gf<0wBPNZCfJh~0I|i2-bWWB+ zpPW2AyIeIAT`9VGEAM7h{rWkLNW#|ZqF-)ST2<_ln=2FQ)T(2kgh)MEL4+t#J9<;7 zRjH_X7hA1pwA;lg*b-~ybW6ngkyyVIl`uBjjE2^z;cz0+Zb+|E*0hX)q1Q7Jhszpe zp_Sn&Vc@b8X_=(T!Lv(?C+0_HUN9=09DT7jz{n$w==hTwEu!M$fJ6O{o3j&ACZ;8n zX=T)8R?Em7cb)Z6Gze!sJ|>E29LIG#mdK*99^jqT$B>>N(i<#K=v;IhA0mE;%@HS~ zSdkEKrdG`-fTo`Snxs1YPXJ9n0W=|t94pVR;AgVbvM9xnrlB>TR@V+;=nmy%&BCO#$XaPFwt7~=5#;`k!$){avQw^bb}4_Ssvbg6a%Mcg zBTD!w%{&C7&E%P8RK5*}k(DoWyCTKkhyKH6O=ZlYWt*S15T z`p~z(xJLR;QM0#zxVx&?VztJQJq5FZ>DvNo3#szDi>S_zxYfHT(U%3-5^y22fY3d2 zrq#O4gdLVRQG`Xv{$%l|6Q)z_*jqXUP$9ILZESX!3=^W|u*srEy_pcILXc}qQ^KAG zHBw7+475%z%W?z5h=_Aj1vdn|AQP`!gmo_ys=~J;cf3P(fb7| z`LGuDe)&FN4m~!s)=n=sSt)LEu5d_J*_gY$%4#J)9Q7Hq)H#20bd63^cKSVzH%G3*q1KiCiGdB@d=;fir#{pJb6X{s36$J#9K6f#Pz`EW9mi_agP}u!R10{q4<{&(d}dX;0?xE{xrFXb?UGbML~|b5xzt zqT~?Vg{jkI?QljzfH~so^R9y%$)tHh`!rjhrzNO6=*t0j@O9~@@MB=CNPI$L-wzc0 zm*iDHtQqVRIy;$Jb-ly)nl~So(C@!bfGEZR9sAD$2`r>c@_KRO%dg{|( zpAE5hBK%D-neb{{hE_RkANUVh<)t*u5QonBr}ryGs)=b!xBKgssDpM3oB7p`A_;qf2(p~uS) zilI|$b@T% zY*lTs@Q(GI>J#C%(zb)``NwKC$pi)42qYoRqOs!|Eey|tz=;|8 zjJs5%bA#3y1gvGajmnQri2s<_=?T=xI0Sm~>c2z5WDD1?W72QHcG4Ki*X1F*k+GN>;0E>8N zn#*Eyd*!v)hCo&U3BDS0o>`);+KhnR(o@Tr+t!Ms!M6pvb~H$kvd)scr|h-GQr5`1 z_Gsl0wg%ClF`sNSy}}6~JO*p)F)^yyxBmA&_u05)2)&$}ni?)4? zATfL%lxr1OLYgAQ*QAsJ?i96=#}98)tIN}{{E#2BQ2?U$6v6>FI0@h;@P>Irz2&2t zm*;blY`oiUwfcirr@Md9+}(>?8;jitr4>%V;&G5mjamjdjs$N_K@2@!F3YMk_cA8eGxd+lNz01naCjm&*ubF22^?& zMg@I%9)cF#UcZgaNj}QoIe8-rR`^jp^Cd+>!b8*!oQmNl0CBfVPQRARKH#^;0#c6K z?~_wc%NT25S%b#j$ZtgPhe>BQO9C(WdmwzP>Ob(=7_e`^Pb_O$Tq5c?!ZOsslze3) z99uv!yi4^gJJ^oy`{H|C3ZNkFW*?#fCRxE-gR5IxS8G+e{cT;>UU~7wS6c2vue2^= z46eoFh+{=J7E58c1A9xt?s`zk3U)jnlX126!2RJB!slbRuh2tKLv3o#*Oz1XLFlXE z!^B!Kp&|jGXAG$?-HgG}W0s4(*bO#J-t;l7kRr%&j^+kNXG6Pr*8L)s2awV-ndsF$5&}p#JVxZ&W-8#1pM7 z{DK|GMDm`0`M{sF1321_-TP$cbReQbndXB=OnS$`se>p9IZ(6FKuoT2hw2NUq!9*m zNMM;Uc#s3f5-TDV5ZM8a}&sH4|i?Fp5c^RuO>_Tym0FM|=k3`R(1 z&LYyH$+!Oq?D*x zxtQ+VL5#Fov`H-7#f~*;@C}%aHmdal}>a>i&nRs8+shH%W!7Ere9RB%C9{DVv zp+6yA3NtvqN*dN_2Cf0oRpOC+e5&UU58-eet3`x?lIFH*w=heWiW#D4`SGRuM8-e9 zaamEKWX{w*PABasu$&fe`D)cA8kjsm{J;TWv^!MTCRyZok5hcD`D)n+U=1=|A2eI!Ji}mAl>4ThW#|IMK#-j-KQAk_i>ZP9laVL8TZ@mUU2xG#YYg zLQPq$;sW^}0`h+v$QRou(2fIoGAqIlPJnfB3e$H0^igNq5R|ESJOSk+IF{4>&B5_e z6ZGjYj{)$)wCVg^!1l1^_+5Zi42`F@JHYe^M%@INu}1)EC;&YUozG4H6JcKgCZ|6( zwK5xbLfhFXsJ%6urKdo42w~~d5OybcDci^YuizzBGcQ3+9|Wcz1g2J?p{u}DNz>C( zSL$#B9^HhHGTDULFpofc%+TTS4$TufRA`WVfO;p1I5uU7^0Un?#8>QluYV`l3Sy;F zY$+8tJVHK~Vy6$qB~~oX=H`ksR>`98pufF!bB7R-&24`@Im>y`7yRKUsLs+w93e0m z$2{8jwDXRQ4OloLOwLA!B&A|ZpsXEnkmFfD%OvMhwaC>XT5cwqidvG%K5Won*CSH8 zF%0qR1K`)MFc%U_|KEaN(nIVYmGleexn~iD)w7U6E~Q{t02oRrlM>a>W8lJ#H8lI& z_lSu4Aua96qQ{ulXBT1~U-i$M7%A{`5j`@D^4{!Mi6oiT@aED~m_Iq(q=S=OPyRSP z{oE#3RF@L6qt-#!FMREV7ru7ATD|^9U%&FrZ(Y4|ZGUIbxKXjA4bmSHsk3L#W*)rs zz2AM|war?qwfE+07ZbactxDoz{^^T}m4nw_yK$pc->bK7+<1+E`Pa^tII+aoDA1D; zh{zFMP2FZxFI{}}zPZ%H7Z+yFoWK8kspy&s6jGVnVW(DWy?Og7n zY;a}oN^t%5eI;{YskC60?z?2V6Hte|hSMt2D;EnNVx!}VJUgUOpwyA$(jIzw$hb*C zE@p^iOJpfMj;iEo{mW>98z$-_qJ3x6(Gl$}qhkZ-0DCcDGfJN1yR$F`j^ndzQ3wBghogWV`IB8E z`bVj&se9ylr&f?X(XZ^>um1z53HG)RGRu_6fjGtW>T@#jM5u^q!iUY47mR|u>3T5EgsaL zMpIShJAqniI+L+0qhu3nb3~u7A7HZ$4ys^xtlesMng<8_`@Lb(O3WuHhT))h*&Ulg zEClV53_S3;kKmEnTsEDySe00+K(yT1vllk2v21TtJ)i|>++CW@VhJE1gyhy#({H!S zkL*bQ-~AwBliNxi#$mr*&*kd%>(}d|)cesSB}as=BN@^#wBIkolL(avS5D2G44OGq zH=r->)#{Pft=*ksLeJ(~je~mYU~i8WHr7xh^R9rjm1K2-) zF)jKC)m8l707Mw}+G4z`*D}t~HzE#2CnzCKO$D?Jzb7fZK^#j#*-c2i043G?$TxkD z+^U$>CA^l!Ax@eQK*D;SGcnLp-(_OY_z+O?<3Nc-Xi7Gi*vo!gBVHQVU~NxsB6A%! zQdSA<>iflo@L-`6Vr7wo1cTM{LNc0+5@=+Pp?zYa9d;v;ZnHb2P=e#@Qmjd$2FWYa z(Su?Gf;KU{XwCyQdVjYh`cJ|ETl9ZOr8L5XI(~+fApBmmDfJD)J9CErK+b<7JZ`#& z-#NbHU?SC1vd<5H&DlaPPe|0%V9D7A8{`T94vpd^H$XH-&!#D7CgV#^fGHURZgI^oO<MOlv+E2P6ZMk;fC%3fLqZ(u*VX5*r!UT|^ zLM+_4C;KS0E5GJ!6JHMSbP;%Z2k->VN2)ORtmm>~**m$VlCn=gCfq2sC%xsZu3u~V zwf%J$b2dSjPPg0YcAe~%!SyRxt{aW5E2A2D>t{1rr-MSHcNCChGAo%(J(bk3{T(}J z1^X$M`DUlKU$5*cLp&KFWYVCoC0!z2WCY>1o~ZiOs%9JY=xn5KR9TT~S^L&TlBNX5 zPU)&1>I2iT<8)77$Aam_#bAiZsh`c$rz#~j##BCH6Czmmvwai%1o&mbsp!FV!hN;scY65wY*Sr3bSfK%(#T$c$+i1AvnKLG{>eQK8p5;Yei*w@YFEvdKlQ|$nqP3VE`Jce1mV)MKnxH=#$8Sn zp0F^u&fnm=%PNISWvb;W)SV1}td&Nzw5*rbNj9CjX3M&WEud1lEOjc&vJ#gub%mR! zY;c|}%f))JeU$Hb&xi74@jfbktME9K^N+@vVKzEeOx81#`Dh%z$R;ir%PNP0-4WDE z%=O`R>;r2m!Pb_nuEx5z%T~LZPk?YCEO;>mAmRQgjBqq`KjQFXQFxC}w<3A zXFDy>gTf;)6oL@S&jgSz21q_Cy8_W0Pytl zq3`=7AaPN)+0$?|viKt)^e3P8`7@_?Q{Q9soz^v2at#xC_Jdr^}#X z_QMb1Wny;$7ZgEgN!9ZJp*ulk1B&BRHPR5mnK%Y1;VI|t1eC~tzwX?fa3azETK{Y* zgqFL4NO;oH+dv1+xua&LBrx(8fZ>|~UBE(m^E=R+--Mt3I`Hx9K<_7kkN>5lYZv-K z(9h&VSv2i5vJeilY!()zHooikdc5`Si^N?=Inzv2L?qcHxZ7+Fh8+k|lgi}Ov?HK& z&El{eG{Q-yGBbHZR8Ae94xxa=VCgE8Od@bOsWi-nqlN9kwAGfKOOtrXsfY16HQPv3 z)XRkh(_FZHoz61b+qWvWw{G54Z@2%cHr}v$O`Bq#)YQKI`kQY`4r~yF^=5(qf!EpD+1+VNVK;6iq zxLjJ9FRnQBac4Ft#vFHvOp0A6pf?!m)&1SATYEh+sK%r2`a3G6qU{pD9j$CuX!wJ6 zVJ?;yKof8S`v%3uZf)M!-r1{e-`KpdvmVRmAxoX0OruC$e{K<*iYnMPsqNG3B#S7} z;az`}7n3aDVj-QTSWhxDw-6_Lvg}bOPVB9X4qnY@t=?$m^Uq?I-P^0}iTk|M+c5T} zvNkOC=rNPe=Zra8uMABmH#cL)M)aa7OXXXpL}((@qr3u>kGzP+qel+yu7|WTg4^Hk zqQmr&B1b;*X%y3GbWCP>Kp~$I;DzO92wM>ON!razGUz)8qb}-w&+j1AqC2aKK7r^k zyWr$ho6wc5S5#SNW{ob!wzMbK0AB@ zTBzyR?=<#y_YWu+Ro$-D6;*!>+3q}8`xsdJPN@20VC{KL&q|ve83&IEoMC1=+Qq(T z3ggev<*AK0!hZ@J>tFkJ-(0=OPP3o+cC)Fc&G~dZ?xxROoPX#2nPjt>G_+*19R#qHmg-{5hT-ZE< zH9DPVpNo9)Ka?Zi_1-DaP)w$J`Obl}PULftO(vF+5jHlKGLw&v_V?H+Z{zWCZ`A5Z z_pANA)~#wL5Ee@GEtzfdmM)2E_N0cuFTxWgc2DBLM8^6>sUe_>+lg>B%|+v_h{8na z`UfHaJ2ZVtn`XK%lnp6sy?`z5cvc#Urbq$Kxm9(p5HeT{$tmN*5d_IMtAoOzVE8+1 zzR`;r)q_}!S|b*nvZ6?GXXIjBAk1A8ivy#cVF9$6 zVsS_nZyZYGhZDrN9!0l2%wdBs60xf-FCE@EqY^Pn&LAU{EeeOrcTOasn7 zIus@Fsgoa>@WzY4$u6G5qkX4Giz?zfsd zy`8MePekzUqCz_qM(9QkgD=(3)UWw%>Y5Ud%&hRJrMWYno;9;GVMd}-KZ(z%*V`yd z*}6{*m-Q$q&kvXxJPk!HD@lmxeZ?znG(Xn4u6c$iKY7oxQ>{oghWNXV!c*4s)#0;9 z#WF6WH)foIBZOQgjD)Sy42jl6kC910QJBe1Zc^Q#+$STYY_bR!s+ww}O;#f$IHz(7 zCn_ksK4$g92-%-t_CC(+eH<*4OnIr`|G$>>cRVEaQ79h46OcXLGL4*H2qiNT&Zt~Y zJ@n{6>omMVLtY5dXf*nyi}V9uMhBO7iLsy_TaSv81W(N9cE--=dM3sj4#@aD3LH}B zL(E{*ZU##T+fbGb43%NWWoVd;M7bLoN_gGFl|3Aej4txXS6_JT`U@{yS1;F66%<11 z9j3Dj_X)wr_!!k)oC~vdX0EWzwc=+YH^0*j3Wb}EZmp7O&Cd2Rw!XW&yC)9(0r%h~ z_xAR7DkF@7)XQ!MGA6JuB;Ldn37j!I{HYh-Vo*IAl#I!?Y--ZNI+7R$BwY*>ai`a# zz$p1)!+}qjK$j%bQ4h0a&-c5J=p#xmqdf#TAL+wl`4T%FPsqLN^vRIZ?3x+(B6x^qOf)P0s6NB}L1ze4h+xyyF%Uz! zxT`$TOCx_grfAc6(C5vVqUmGWDN1b%#0*A9ybg;YnTRo=r zBmf;{N#6?nCc~H8RhxSf{gzIkUjVUnY>`|YfuD9%q2I-~KtGgL41GqtXZB3J*N?B| zqza3|ru*(&QWBKHD2y9ZoMOHdS{;1xi`%#NUV7<2e)XjnUV7;(FTcq1tFOklZ{fvw z^VL_&^e9zmw!0TV2!LaSYa5Sr4v`I=TH)Km0+yvzu&|J7S1Q;X_qMlVvF+_W>QgN& z1ZApLybbCxacac{0|d16hu#kFoJc%P;0-zR@l+&EDaME14(Tj_+hR3G0S3?jxt0!; z=@~&E3=FKdLZLJ`bP|aa77?nb6FQYxHYWXwzhY8-h6sb=Y@^JrsRX2xOH? z$%MVMRGeR2URqjMl;=VLx|wjY*+QY5N2C&LO4!ID5SqjV zQnT3u4~b)Ul1cH{IAokOo6#^@xDF5Ofpq~AL<6kbLxSjmb%h8XE?FEQXqv4{PAbmG z(Z-Wlji5+6DY0=0WLKLknr!qr==j6~gEnTjD?g?lZ=6=K{hpVn(yKUXdI2&OltPNe zL79klNrX5$5FXhn8@kxzDFN3(8-hc0de0^Ww>4A^+)n`k){#!fGx?59y|+dz3vpVS zy&+#EI~|?m#UwZkgFa1BC{mf@R!&|kzKH2u`dpldNeUlQq?|uDC zSFe8QORvBFrGNkLKJ`1F|KmUV+7YRMZZJ*px1<>5*rrU(_BQt7{>B0h#hNk`+_-k_ znz6OpX!qj@2ZI8jZIVDk8jbg)MC5C>Ly~Uu_D!SRPN(J33UqUB#)%0F4`~a8M%cD& z!p=96CrM2CovCyZbugXAEl8zkSPS%7iuke*S;WFuM*snC6>i50xeyksHDU_zOe#JE z4jVYsG+G6vz;_aI{dP;*l+YZ3_dYGQalfE2VPb zFw?*Z@sKBx8V<#Vu|=UA4lG{)&ZG=2#SD-(6ciKFFS5S)YnhdB`=}+z55J1&o}t42 zy~p7p5ra+zl)al$JxHKP32#aK$`1`BD<}x)LqG>BwuZPcSsS*%K*R2JT7+zq2_V?x zWra!-mCueAm;>^hac*s(*Op?K9l5W zk&P$8NJI#bhM-?LKsF&QvQc9n!J9g}=(O0uN7hJ2GGw}nNG zNtsiAM}aIUwQW#BYrLU~;V}Y8gbZ5=JbL8Wwet@?c)x5*ON(dDF6ENx+|1lE;UKH$ z&Yd~4vM|4R_QJ)B7pHc&(1w@GA*?1+x!HU+_ukx@T<(lK&R=-&;d5sf=Z`2j@QCC?|3zw&O@yh9k4O3_rJOTLH(UeQ&hpG*?kk?~f=aJ&y`K_uhh%d+_zkYvbFu$AA9vSN{B~U;XNLUj6D<-+1Gz zUp+Y3-EA~_P1x*irThA8-}=tYn^&*y?^CxtH5{i>ySt?98I_%bRxTBLY-j7+uhNp; zymyhWyjChfxtErfmREMG!f;ntXJ=Pehr@;Ch=P=kW0L`T=1e4V-+hL0{yexw6hl8q zpTBVa!opl`X<=bu@u7#_@$lV+!|X}QEmXbyFq{}@naK%kLCDi-m!%aebwUh$$t1)y zCczdYU5E(ntqG#UO^aSEpiqR`8&dw!2yb zipaA_q9M(t3==1p+Y@>bLF?w~@h&$kLE%e0aVim|(CVi2`jAj(PZDY&;^qHjxP5F2 zxA!ikmX`%`C9$I0yAyKTzLy*k+I9?bX+_115)6GBa_?1~C8DT&$sv1>*ga~|6Q~;m zl(E2@2hpX6hTzlCB9NViHR3j)eQDH&E7PY3h9z>T#P(nzqVN?lK4o`8o{#9Vxb6<= zvhd0BJK&vx^m&v96Bx3{<|4XB%Bs*7m(uspu254G&j#Mm6~cohCO9%cXSR{hCA^Pl zBFKbNd77Or`Yn7~HkAc5$l>-0LHy@9Sb8^XzG zT!8YR>jwwk<9mA}vKvJ?X0nVPw64}{tJ42FJGXD&UHs0TB*H?VC-Fu90!sV|DDnRc zCH@4I_@6_GKLI7y--3X?<1_)4E^IN{;8FP4G<&^HyWeje)R3dbRC(@Qj@=tsJPXH< zkx-@0h+u&hPyJdEE?ic69CM4gxp?`npy2M@dgaB>fBuWtuYdg;ue{P|?C)Q@rkh=> zx_$MvH*Rcx=Z&}0a38&sh;;_>WK6Huv)NoOlgZ_>*?N7PMQrVK4|bZ(@_X-@Hg(h4 zbjpp#(zphs?@8S95^;;R8GW=63hR~gcPBWH-brxi3W4!O$k$LP6;2u68*v&m#3I0b z`QdvfBP4z}mN!R~66@E;EyVgY_F;!3M7lsPzw2J91L1UisDkowk~5PLX#w9S#20^h z&do;3NK$vfc`*DW&MPfS61qfS5=k3=DwW@ONKNQqiFj;+mtO`iUji?`jJ@ekz{}5JZ+a2DJR=%w==mkwQHr(#G(CTcGou^3Y6@kWjsI5T_$;I;~<8v1(s}recQYQnFbD z5Q`NtLrbwZ(43|rS?1mlUCBS~{aZI=L+a`_y1d@l+P-nKcF=5hyZqBqaQ8-~G8o7s zk@)tv$J7dwIIU`kY6JLzmUvR6rG|j~rs>U7 zac3YD=}4(N)aLFcNGPB17ob;Pf?jOE7d?;;J*PHfzp>D6!S-Nwr)~nH0qdz{%%C-aUvoVoTU;D zMk4_rcq+Cu*~CS}3k{3|1&Puf3#H7v|K6pVa@0or*jU2^gT+Zh)@PGyG;CrzL;AL>z_CCtB5)KONjyDC?IEf6|Jq*neCdw&^k$q6W8!V(D)uPJF{+uj=L3;HSv z3Jw~FR1%Ma9+AHSiCP8Xunmf;7GTN}T~w?DJ=HKqOc-3s%SKH^0ysC}TOnPDd5l7^>LAD0INCF2t4=%oYqr!qD$Yic|bUK=hg&CgPG zAQsWgL^1_VK|>q(BK8}$-Rs$Qo7Q@R;S8oJlzP)i)A}cOj6m7PJPmI}p&|)1#T0}+ zrD>52o_f**c#qA=a7C{}VGKkfBTih(2jfMEL!xB5kk-ZE6Q}+MvNmCR%qtU&(VV`` zw4YlN;{@3$WZlH$h+Vy5pQ0QF@9-DhqZMi`<`eYFRZSYV#-n1+7IP#18J|{kT-}iB z&}vhrYX}~-q3CRfOQX$*dL=5Q#A0H_8kq?iw)VUG^wNgB6HRpQ)Xp626B61GlP*4p zElAyVWk0EdwD(&iAjy;jd%HW83gKhpHLxS#o2@sm zUE90`!c*Mh+U9Km{$n)pZAc>A$VAhN7FP06+y=fR0BF=h=C(#7Cz;L6&Pc+vy|Mzx zP&|Bgerajti~|%p`FY%y*lV!lxDQi1DP_SiUEObYlC%h4o*ki@Q?czhgs z5!B9PgIVNm*|vBLu?H-bN~IYb=-Ii|<>dw5rP3r`C3IlNngcsri~b3Ctf)b}M&MC> zFqfa<=xiGE*(}XH5Y$}Pxi|7kYi1vV)_i`}C46wC3nMMe%@X}dXj3-jKv2n`X*4ha z)T)(Rw{F+=Yt`z(K~vh~AYgSHO_VtQ;U3LP=Md+UIM0S|(#;S;2>%~N#6EYgCa$O@ z)^g|;v7JySY!aY}?2_7Jn7#$r#6~NYA<3H(`=O*P3#fu0!J4=z;PtY^C?y;)7*h~k zl-pyp`fW&cRD2hN!4iI`8t_zCbI14;Zo}#PB_v%97Pib59OZT|n+Z$yV%PM2G;IAY!C&%#;{< z-Gs|7aD&#=iA*+0+vgmiPgJ>Jd7x!-i#Dj@ig9&K{K0z6PLZRS!P?JsT7t;T*)b;a zHar9dM?adiar>Y%9&uyp24HpE6&7zuHRMb{;oyKeQjpO$7$a&7Jf=fyP_$;5zTjbO zPCfc?^nx)pdIP+@jkZjrMjZBEO%@iL+FmKbBaANHM0f9$^k;rRv_tt9WstG)3Qzz{ zMB>3sWRKd<8+jjoJ9(>Kcv7m(6Ow^Nkwadjn?kEb%hRBvTl8kt?NJARHuMFcfPXRD zSYWjXkby}Chm^no5o8pU_WOf1=b#zHlIiYV*N;SPCr?4bB*BIH45_Sf)`QUFS;S|& z88qEGIN0N2fEBhmjKA%6vl(v>_B+s-`VW3U-C1~Z>a7ePRz?=9+Ng#t_k47N+^dK^ z+-G>-yl`_;?}KfvK|8aUkvJ$(hq;t-OMm)}?^HT}`q@AK51;$DpZWaDU;B68sdwMl zYGC%`Q;~^{Y2-y!pn}Z@v2ROYSS*{MKu)ee=t^{{CL&#+rL! z#p>R8y|rq^qVV}Qr0$_@q-Qp-Z*AYYz2AhZC~Hqyj9)4-t5Fvv!zA&hl&3b zv716K!N5tTd-JiVoh#h^X3-G^$3bIm5?y4XjB-md6>4cEtco{sgqjSwRc`k7wVi{5 zoolymS8lUaZWC)jyi%t>823BM4XODJ)QW=!;EHb(g;k_U5$X{9p!6<07_(ioA(X$f zmT4RWq#Bcz+^008mBBtl%N~m3bLk8kK!Sqah*>Oe+9k8M)v7mCEl8nO&}`rBP~UwZ z));j62A*?*jEP6j6TN_sKXP+_BeH+<3xBZA?(5raEwM;T0S|7QqedqD=L^68{$~^f zsQXs$)cqsXh@S;WpWb{35R6JtRn1EXEJt&rzt6ykk2XOxI#PJd26!=s!@ZcC0gOOs z8$Uu~luoXa{VP+A>s@RDXz><7E~qD9G(BNvq|5)+@3e8zz#n?QrWy&S9n zTRq7Eat7HOZfgWuGyQ$59{8+VP+yswaj93IxsW+`admP2!s?8fr7nY+m_2)8<-+pP z(%f7zmqxY588JJzxRfr;lBzwou!6o%tb&_f3u*@uBbAHoGc(*mHi{HWIR)%I8I(W> z{m{0>)0%POX0Ou$2pZfz3pRt;SbHbDpCo9kNKJU?V8e2Ey zy65S5=DY$SKNv2Au8~vGj~a1;pOAIE`-CiM{ia$_$Q-Lc+C8OPqGZu(@sWg5QXW}1 zQ(_n87f1y->HXfu8ZrV5GKwt%+1WC<8ucCq{xI6;5d(pz3AtRdBajnBWk&8HoQQMM z{gK=og4lUk+aDU0X3wZ}q-xlBs1L_Ue8f~(9}l}EeeCU5p+#i%J=M1$iYhpPU=Sj849J6YUd-?IFl_%b8LfP zI$96dE^WAxvPm5wmLZXyNhe~l{Jb;N5!(~#*v3kf+6f0l`#?D%>YW}pqBW|tOQd-? zV6*o1%JoX+`mNiyw>MuW?PtHr#O(6v_U)T{`?a0Q?d_fIH^23b&A+&^dF%G8v?kx& z6pFol?b@wdJG-}UWp7=(1~0kxt*f=$Teq%n-MYOQkM|lG%1twUtvPr$) zVlb^tGa@I%`i%jq(d!+`p0F((alT#ztJD-IEv41??E zT~dCNB!nLADyIp!5z@@bKy65YCsqjW0oGZhPBsa3Li}W{CuQ_6j+3avFw+#V=+bE#%vn#9+Zpn8#6BBP`4om zF(M&Joap$j@|vxWToe?kH74KF<{?0Zk4ONb_>LSK)f0P^ML3xt2PZbrd}K^W)6k={ zNZw=D6mbl+g^QsP0@2VEIR$7o8gHa{*KhT8v1S%pC*J?hsG4zZ>`w~u=vSO}|54_cY zmQq5Mk`)B9psu2JQ$f|j)`igmaV!(+tp+uEa6j1&7yE(lzw-tmpCJVmAml#Oc8sKk zJJdZh1&W~Rq^&r$s$*$2gW}nSqXkw|f$p#S({G2A9_))wdHa5-nu zK=b8Ak*ILD^6XnFyMt38G*zH!LW1O)YoI5~!ES}Bm0b)sj8PO(KonSyBX5KtfPD(7 z1HmFi7-a_h#=zh>S%T&u2Uw=;7{+!ukVUKEUJq0HVz1X|jNK%5Jpp&13kXnoigqlz zL8Yq%c2w-+QfUQOk!a~=H`sV$JhBw+83tWqQJW}vR?w`E2hCQO1_f+d(2^oO2R)>G zJ2=?KUfL{^w{$+AzIZX0yLd6JHCs6C^szJ$qRR`X?)zb5n0}Rl|a8ylzESipf=U&{z2avBRDszC|08(y*jDw0h4+%YG@BPZQh2`3{Gky^u|BH+ZvN;33j0XPZr zBJx0(j#R`%*6oXmE}INkO}?Tm+=AT5VK(g%{;A_QR1QD9H?=eG^lb+z(jK*$cZ!A$ zdO*j0Xbq8-FW7i`LB%&kbir_5?w8A22KZwjX9IiFSNi7*q8a)w$$(I_( z5Knvlu#0>kQLosmbqr|oj8V=^CG7?JN~9STcaHtBOLgsK{beTwNseu8Z&jRF zWt;ZVvLcgBtq1ST%ys|zpA~(pQuMXVwO6lI>s};N&HLBCa=l{tMZc)kYd5ak$WUYG zhMrtVdbz#aSlf$K(`VA-nNg%l_r1~F0_!o(?U9Qxn&~GN6IJ$)sJ*BCOX5>Jb3hI+ zrJjJO@+YNpFkRZEO>oTcG^5NhlvhBP&?&P}W`rEWG>Tj>pwRco(?)U(VWwtVYv0af zBruF)>UHWzw6zT5&3IZyj@jMyDA158?e3N%v$GsCJ4?Q5Mx%xfUunDLIr?rSTaj_1 zMFTOke~JO(q^5xD9QzG-thFL7EZlt4>!alvgZ|twJG{L(j#n4QZc4DF7vLBhxxpO! zhgC~k9542Jf=9v>`&g102YQ#fXMzJTwlNOTp}1$0c!9X5#bvAr6((g*s_Ar@YGEAH zXi)s7qot8IlAe~F#Jo_WMJoW81^9gdxGZp@f~HeE@NhNlBj~Y@;Ke?I5c>!w?4#wj zkJeZ%tf3axK3YoqXtM01>9LO{#6Fq=g-4HrN9P&uhe}}{^an~Ni{X&p>S_;xM^A%C z=NbQpkXN1tkN$2cmd$Vr{KjLOk}2`t*5s%cSIr^j$I-rI+`wBC1l3btcguZ zB!`fwMU90wj0Y?%-6Lytb*F$FXS?>mNYPq+;4EyeY`*eJ4d(3MFs{^gad+1mJ3&wl zcB(Y$oQ{5S4;br=L`JJetZuzXr^=D1XDGR=byHT|%8Y%xl@~$C9eB`VTc`-52>*mB zK;mVT7;4Fxc5!fcDO0PvdCfPfZ=U1iblLXueVkl4*V<-Pvswpsqj7)34z%AfB;H>C z_5YKiWSagljRLgKhw?*YLyJ6T*kh`yc?mHADA66BTE47BKB+fI-gfa=!t@oVC&HAI zaSV8cGXUl$>KUUd|1QxW8PCn2T=bwX!Cv8;M5R=o7{p+G?e;;n1F-L2DUA z#aQ{W`cmh@zoEaIf-7$2@H;JNl;iDTObifhFD8vk;S1~Olomvcp-B`i774OR)ap&< zNobe=3MP|qt`@SRUGd%$8`?>oKjQ$H3)FnU~+tZ)%R`;%c2#+0&vR@#Ob9zrU<*|JMwn z*3jM(n7Xi>z+nkA<1`rP)M=iRbE!){uQxTrqn4N0P&kUoF((**2@JXf20Z}AFM&bQ z(e?rulL5*@jaDNjrPD7Io?XuZ=59B76j}!i zjc#kuHZ!c=!IgDj+RhN=QHn$06lrwmnbi1!H|G3`?mo(th9e+v5G@mSaX z@#U~jkbnuWg7-v0OvE*2^CO(2Mnk8@`N$$*yVY!ttmy1;29<6Xy%)Jz>i^-6vE#$D zB?WVG8rcN;)CuKT(UFKz+H@PiD?!O+%^j(nl&Vcr06OWgiTxNYPgRpM-m7wF-Ydvkha(lN?7dP|V zU@328eDtVzzEG6X@#&0Xr3`CXH3>W%<CX#5I z2be-3D>lZpl%h7`+!tzNH$KH6AztKReM%9U=RO4tc{97wTbBnpynC}pK&>6)gg-NHlA~kXeM_?O_=XFxh zhY1qMu*vZjHyt`E-qoRg$3jikirdmZd&7jF!$c{$9Hega7T zA^7*Zkt_c*Ao*z^_XiPeR9|Shp+l%l=SM)~F?dW5XMn|Hka&J`({%wdAWRbw1I8$Y zCP1bPLHIhE&vE(uRwlCrq$x1l+!sKbLYkyRDEfsRc^c6O=(cf+jPBrdZpIQJpaAxhKFV?1U~CSI#Zyf-L(?C&H4S zTJRaY%VM8e>T?;w6j();P?I%uF?WZnD1+l6#^lTAQ&f#%CDk%!?5HA>la&+)H5>O{ zR#fL7LUlgQTK#LN&i~C?eT21IhwA(TsLnrx>ijoQonL3|{tqbeuRwMFE2z#F)+xh0 zl+q+P6E9!*-1E;r{~N#kdoO%Vd+fbG{FA@%k&k@jnLnnA?VF$e^rzp{&VKNNA3Xc% zPk-=(<>$2VXW;@`U;U3aF8+S4^ypJR_=7+Az9-Bl-pA`xkCtjL{H+%be`-+yAD# z!{YMcLdZ*q#X>ggM1t9rW#A3$H;A_F z8df^i^WO9BqtPltI32Bs6LJqCjHxYrnS97c-FIg!EmcfO(N~iSt7gKoDs|28$1qij z*ZJ0N+ZW42t|sPyUNkyc!TT`{>3)x* zz)JL)h(UOt%3mPiNZ+7s>vI?4WWym`5T!>u98EeCbPJLi$!;nZ@R9sOvQ3`TBA=D( zAcu)4wsA4dqV%v2wc6Eoi`U*rx2V#1_$xUBHK)qpuVi>^&|L-&bwPz^S{NlXtO>vj zwS)k=F`^~?aa6@l3A{VJ9Hol*=W@tTLR32=+GOH6g}io0^hQT+9R`?;q;Q?tZkuvB zadK_2YBHb7%Yi_L2Ly)zj-z}M_NdA7aKn7GDYKg|e?gXW`hW3ua~Ms`&CShZ&tzwK zO+<&y>u0E?KKY6KoW2y4in|M~0NRB-DB3Z_N+5`R`Sim>dJ~Q!q^=T-G@wYYgn#ov z#;VX785L^&Ny8CfEI~TE(_NHB!ZMhoMIT@`3zseMH9z_^{yuv5Ds8& zo*@9$@*EO|={^}-_yy+|R0Qvyut!ZJ=ps#G9Hl~Z(;gXJqsyh?v7DPCY=psKF2Ga; zIU>%JK#bAj@n$?448_zSiUE1}sX(fA0do)+Qr&%$DQS(!8sUHkkOxDg9nfBO;m+amn! z`{8HrFNLacNNLpc^K`^gW?&)Ux|EoMe@wXtVl&)hR=9=whT?a}7zI~GZGpV2Ld|Hq z$S~BC&P|9r)SXZ-%x}>59Io8*C86g{)J28w;JKhD)I1{OJf!DYnsyP+LmxST>*=2Y zm_y1vuV{2gq^-&c+B`2*SW)j3Can|H*Ri7o&LbOYPDnhxvLcR@A{9WCMc~^b+?k!= z$|)4dPEq0*Cg3)qI<5qtiQXd@nIHfQRhYo`X>cw8y`)3k0kBF=Sw&9SKu+0U9i$8%ernLr>r8UtZK1L`u)=ho4lrxDBeUOIXit#pZxgdrysbV zK_6~v4kptu-Fdjry`N~O4xaPsPPKWE%_kjsB=d!QGM%MqY&PAb%Ah>b2lu!4_78T* z*xui3ciXky29+{uc{i0Ik_G>{{06rHzptlHjsPNspd2p5bOg{P*+qS<`^~1`iaDv$ zQYqzhH@m4$iynHLTSV;!u9fU}?1o*kFb;L?`x}OxJhNCz*=Dobm?_yV`>!>-16<_& zZe#N%zphcb!MD3g-a5RPk_~{oQ-e^jIMLJGN1_&0ru@B1v$E$O6BlNRN!o)9{ir{r zq8pZ`N~2xxQ$g>M!=vSw2bBsYD2=ZUkCtBw+=kKvWw;adQF44RPH6{PYW!;j#V10Z z(a_RbBa)6Z^-Sc~oMT`7=DO1$s$2GR%&*QJXBPY-gDE1VzM&<`5gYl zPxySeI`W34P^%HXbKhkX28CCa%29EPLN(n0F;<=f{BkHlXp9ITl1-1>Vfxy$-W4Nq zI^p7ca_~)(my;m>gWObFwDf#@6R1x7Ue3emaoG zZ`6DJ3^FjWSkZVUMZjp3rrOZPZXLz8ADDytg@^aL5Tnot!4ZDa$AD^j8zdk@I6G@bT9` z&O;RZ*dwQa7T}`#lEiVG0$SYW(%Zx?KXMXYNtzZLCxy69!E1OLz_omGiWOKM&Tq)6 z&YT9&)4+M=G+3SnNyV!Y_yfe6DZLfm3$MBaEG0^m{l*^x;7uLY{jCV0f8 zL?nM~$cAuC^;Y{tq*!_W6OoU6<5*_7An}mgJR;1Tl zeW#G60V4??6@&=w|6}jngCn``1HWJQyn9}a!2p;6u-Mt5~U+8$yJUS-PvK;ccJWD9G^?Y z&=M&vB|gA?;5h&Wn89G)lh60}>j4H>kd#E{k5suE)6>(K?&3QjN*TEi##Fz{EGD-e44!AV6JU2`MRvo@^ItbU zAW47FkI8eVb-7$@DVkMP8GQ%Sl$4P_Hfi=7jZ8Bv$plQ{(!Lny2i9LN6Sf-CoSZqW zc9(D)X-AWZ?LY`IQirJmO9CeaEmdN(OS%JRCDTbeN&kYl6vPd10|w6AKuQdMG37h; zsNJ!Zeop;fE1u^8!WY&CNip^uC6mzS6ux4Z47F7?TC1lpHMx^F!K{NSyO zR8?u-jk+`oXQd)Ddr><)Qhw!y%TeKp@&!r)Q#BuXxU?juuC8i*@G_&}@YYt247qIH zJyD`b-A$R1`c3cZ&4jEq($>1gWFvElnPq4*tJ&tOuniCh1|L>mg>BefS&`jv^Wi^Y z&M+a0!Dkx*p-XcY#3YFn;Y76+W+nSx*o3tyzCsq`Uf&0BVx_rLYb z7*$%$QVFNs93vZ>xDL%+HU(~BE(v((^=8H_RoSXYUPrgBlHItnW62Jo(1Bc<+eu@~ zYP-lzSQO)?3OHRun?)VAz@&I*7bvCvz3rsvWJv@(}%f*hBXfENXfybrbL# zX1tYRyp?CXC9_fD)4vbuk>SUv3S z5PnjR7SnA)Go&=TjvnJ{LsUh^i0EHRGCPVAhfSOvjbTkGZ}_}4HFY%kAXV7E%p64z z=+tWT5~hx!6W;|8)bFVXcf1hN6tYBAz}e>L|6}S@rT|o9Hm^Doerg#g~8blZzL*Q8Y7$m{6vQ0e+|O zoZ&>Nv41m^bX*w^%o!->xUyjq4L_~FG&eE>&JpfP-x9kiO(TXpn2l4#S zYUTu?3l_OpN>hZ!I@R8*@sy^8Ju(nf$LnQ-l01}wC4I~D&a_!CsM^Ka#q?`u&zu-{!|ko5GwrZDe!~4z_m^rf znDr)i^vviP_akS%^S$qvwo=(Mw|y_0s+PWg$aR?#^B1E7(=X)kGu1H&FStuEM|38Q zbFgGqV!KJAnW1G`DYWU-(yeSMU2`@=hg^3t-zu3kt3p!dVu&1s3e)(J#4;25m38;p z`cFbRvo6)QmkE7(dHK5WF^8b?<%RKDBkYVBxcv%LbtiC>u8DU7H|afar?Mv}e3Bjj z)7~!j2N899p9l7GXO>bgugqHi(+`!qu3yQD+FVlwTzgW z$kmskIsTIfMwPtkWwVtdGvoB#OjbfAS)EN;(=}PMt!!(8`oloVV98+0#}{~eE6^+_ zMk};wsH}JDveJ@^bto~E$VK`HG)VMO2}&nUjxN9443FkzW%h%$My;J%V}V493I286 zn2%P2S|7n6T5InQfnAAA{1Dic$ixqUT_O>Q9TGl21Z-oYGJ-P9xeuUFyxQ_H+os36 ztb*0iEjB*4?D7ma9sBo}E?GzJd-X@MYNLcs!0)=|UDu3#=kzTfxg{aIlgOCu>09Le z&3`(#q;g9Jiwwr}Di|Dn=3C$W7OeEbUw`*mvwh}U@;*aBDO?-jlB~WEt7Mzm=FDi9 zreXC`cq>uQm~A&F?{EIo%XJm;k)};0%q2nCXoQW=bGw`ey2g&DaiqPT8Ie`ye`GC@ zr!;om%Hqq5P2s@ij@hm(%KIJ{-UXhd&-GnC7v8086N#}84}%||wF8oj|5D?TZSI!m zr>4#7WX*cvf+}4sUCi~l5ZSgX?Z7B?&<((loFv?+)+sEqTpMz-O8T`%LI;A|+YU zt#oS!KHQa*`y{4F&9{QhVt%t^Rs^nI8EiW=q|No&5IMRlPb(r&ClRP4IkVDYS+59I z*4lDyd2&#=?h~>iXf-FkUm3rcbXxxJ3L*7=rTt<=oxp5*6g>#J!TrK5&!d&p<*V@d z;|tG!?|DIK;kB*f?GtDAbe50Tvu949IeVv|ws7<<#5vJJ7DLF|zOeMC59E!Cwzn(Lw{ z_Y+0IjS}4zbx&MlM7~`2O@5C5%p9*NLn`@$6hsziLp6kgipN@uTE&(Q(ov++szj8~ zQDHHUj#a6vC}udDAI}TX6ow)jHYsYm6ysCQ<>i&-%a??BehTPAUWS~OuA;J^2!$Pe zc^R!8amL2?w75@b*Nw|@BS${&Yjcq!qRpiTvexF9T(ZhWjP?G)haghs&Hsz5eDe7V z1?RT+VY%PpMr(UAMLBfaxj6Ze_qQ`kuWj9VHava&HX~7Fd*;ju_xkX}FWpqFz4&LY zbJL&x;r}tUCt6&z`%kx@$&*+Lvn?d@Qc&z4&YZy>=J>+R52x2edo6S2jF6oES|+`V8AQnuS$!*It_*l=MqcF`h#-M9y8e@Z*JLg8^(W--y=o zUGhNkg(zKZ1H8-}`TfZFG5poZLW1`guL%DO^0L{F^CHbyI8k1GIVQZxi|JzJ1*WGj zTzE1d;ad;RS<}8cQt1T>{Rx5w0 zbE(7M?pnLF+F89+o4nM?%gA4k|9w;G$0a^yPZAo%g!#bDiOlHVpcTqTUtk0?e}OSR zZ}{-4jYv7tV5~i#&n@K&2ypbdu%4>7cgW6&1(lmKk1SW}FMC%kj>T)vPPU{6{$MsW zc~YI6OetrlIOeEQt&}xB0jI_>sc6VCz$7EgC-oLE)oR~h;Cx_5!UZ|JxR}pB8Mt`y$Po@NE`GzBnmV5shgjd#lXtrObee6l zj_thowq>YlMyFj8k@*Nt1A)Bmk}4a24bfdNo(^rL?Y!{>NWV9;4r2l~Yioo#a|>f* zD=SY1^7*ADZeeuv8{CH6S%UuAPtsH;9_Mf(@eSPV=MA^tiG;r%8j}d`_d#QKBH^!B zcE6LC0c#(qnISW#m!th-Lwm&2CmmWgA0(OKL4xTM%dl}089zXuOopQ`TulVSOn;!k z_oH8Vqgz{ao*3{8$Ub;3+8}yvZhUi-UP1f+4X!n^=MH_AJw)}@G}%Xf6DO;4{xCVz9reK5>pn(of7GHfc;qG-+RWhFWrnApaJIhB+Dv zX~~T6m1S4c2Zoo&DnuX43%|%%CAl0}9vdbvmHN$U?)g@c z>d?%mF|Ll*6VhV3s_2O9wl~{&wFnYM__E?5*MeWVv#`3(N7Xiw zxo10&No?cJp;c-VSITyzndl|9GpJ-@yxRrqsoY{O;!J zrreC^{x1aaNR#~eRiZ3=rWOJX)pe$n%qovU7diBJPT6rLdHr7|)o1{>&Hz$%meejX z;)6(x4MutyD@| z=Sh9f=(e~~g$t`hXmf+85yuNGER2tP(T#Zw%aM_Sdwyg-o1GUg{i;T=1ojjdE;b~*RY-?`cxY`F?f^ETMH5?Qdx`CaZ<#o z0@Lb$O@GUZB`YdM*?}4pSMiz~h*Qs@sp3}PUlHiUGw{Y-j=T+g(jJ|oK=~+8o&?HA zf$~u(=qT2`F7LGq#W|qpWcMKGB?NlAu$xN??DpX1dC^^X%_Rjod$97D4r(-ZVFVom zBMl!ye%*18I?q&wqO>Mt>_ROE{XAkI0rpSQ&lSRs4#lDK9_WBHCLY2Jg>=Q zc^c~Z3Kr(K3zqu#aK@kTT))M*@V8Wgm&s)LBcAh5dCva^D*7#`=pmgy_ndc6&+WN0 z@3#unv078Fs3#N0Hvi&V&;7|C|8MI1-~HWBf3Wwd-Y0wiOYdvEKH2+J^wYol-S4Y2 z=RWZ-KBzvU9#uv48@wJ>p9%bnPnhLyMLqpXY2OJ$Nr07`|yADq5SeM_CC=& z(;Mwx?*7f&ULz{k(7$@G`Bm>$yx@Hyig4ezYK}j!k$FM;77FwXs}i}@5kmc?CMO-~ z2&W=*RduMCMNM(W094#;OTA!f#FF1}OEw<0$abp-2mu`UKIiK%9XL@EX2N$cXzbq{ zcDfk?%7NWI#KVCb6qj1y_WAjZ*HwWqK=R!wo4vWUO-Ge>*etJ*8x zoj|JGcAM&k>0CshrZiQv3C@(be)?*tW`{~Nv1oz-xoEgeSb3l+EhVa?zSWy#P`7DR z*e}8KZ)Wb!6I-C%JU$|I$i?)J?4EkqrKh;IW>5dBW|Dnx`>!7Y&(C=`Qrp5!&_|az zWp{|GERZ(EGAF6dj70FnrLy@*Xiw51~#SL8%!{^A$-<2s%OG#|{}j zpSy9mS6VGm+N-od`NnQym=g3-k&p5%bUcJBW8{}nXQip6#4rEjx1N2L-vUR!@ymG? z7#hh>9V;9;qQa!m?&6k`cFpzx?mJEStx6~Hmp^*_`!D_YwTpD{qx!F=gR8&Wzm^v# z9d}3Mg%rpw5>O~P86>mJk|Qr13wso&C_^Smm->%NQo;t}0@8m32o>d(5uqHL|@OF zGnDi}w~}2LjfEZLj?@N{-x_PKgj(BD8IP#(-q6^aeYbxt)5Y(TSQMW`qL;-8^; zKY^zGBzUFVb{eW*DmC{cK#|5@s3fpO&9xEG1-K9eBp&${0SLbLa#|T#?dlqR;A_;` z52mvIDRfEgpF(9eF2(nE&-Juo=@lk&G;`gR0|;uZVx;aj5?3o3qSgj;>Nrs}i`@!S zh$~KdjH)lpqhb!8qAx`b-tM{H?V=ibFTU`jjXi15rn$3L64Vz(O-P3mc~M%(JS-g2 z@g}ua7*2L^JyMj(3dZvV>P{H_V9|&P_R=bX3fKDC(WUadUh%dnRKLCj>F$bzH&Y7( zB>}yeUl6HpEnT_z`o+c74Kl8JZz}u;WxJOV*Re|yLse**~ zQGwGe+MXCzeLM0TVQ)8BlrRbXPZwl)_TKK6`lyu*<)!Ph^Zwp{O>GLjKAR@IDjBIZ zx9KLA%8sa7dMjo%)>I_k=v}d*-l^6ca&5_CbfWcOK+%s_ep^4e z-V{}}s1n6cX=IF=r18Kwv5oHdc)YaPq=pcl?e%rCk|mNf7MN-Bx;^;-yM~jASZ9=+2ln1 zN~bQ_webm-XO)D7g(Qo0WaQc8a&&BLNeVY_ck1iQ&!#&y656P>E5&Ffg`5B|GG8&o zgBI=IsM&w*i2;~ufNC@f6a}wxL|!LIm2j*?b{jJ>7LHTUlw@{l!^I_8BWksxt?Ew8 zKG929werGd6n>#1U!&fmX@cEbTWyd&(;FHloIc!(Qb8=Dq&3b^l-ZNb^0T4IjrCV7 zYc|-bbcQB@4sjp^ByM-RWKn#Yld`7e zJ!0lWa#m?=;@7JYG$Ydq9n}OqYePsgj-lq&65`+WDTts=gjyXMa(xn#Go_9ow0wsv zG>xl)dI#b%;i26RKt1rneo zw4-`;s7J_$&WjL`?(`eBdx5Btn$wKAZwCK2qw8))^PfTU=NNP67;}$dN#*d|Tn|0m zj3qG2m^;Uq+sMds)~{H<9lWRa@!oGfWL=nk=pSeSnIgIG7kYm{dh^!j9~{~p!cu>z zB5Cj?FYgnTwKr6yUmM+c!%6SKq1_>6gXROZSSnTU@_mbOZ`jzFpWlfEgIk=iJEp@O zxVCy_ZM*E{QC51{8?iAXI1~>gGFVj%!yGdVqjW$jHAig-v#7n{R57@D>Egvrj}niP ztshN1M4IqJG(Fwv)pioG&*KPD0cuZfKV(%B4@KIoAZ;a^?axOLHMO-XwemwM`k6>N zP_A$6MAM&-VEo^aN}YY*LzYu}D6$+GE&ZSWVSO3+4BG4TiNSNiBMn;JHEB!H%{S&!OD!>MM%$6zQm ztWw_4{8}$qe$B^RBdFHqy&;1pA8~cSwM0c1jUFFiR$UDhyr9Of_^bbWb8g6h%?Bho^X;BDWT585k(_PPuZJ3Hrx75dLXSB}jZh7K)v>xnftx`? zu&W$u@#$H(ak%0RxPlrX>b<~2atU3yfjF`g7|)Q-4m8#Ei@#Lgd<=11*S=JS!D>?DKiYq0DU7(O#Q4;q)*p$s8Ds zq4Rm_jVef8J6Q^aU27G~mH$y?vN3;IJ5nyqi!p1b$I=u$shrQ_b7ovs*Uk=+F1hg~$CaAco1}7XuJhUyUtHOXt_=@UBvGIqApu0!o}R@y>jcl| zOC=}osB!Ie7{^af<$a_(W}0*UixjM;T%E@|&*Sh8i$o&&9X}86#s~hzV13)#uJd_q zO$`t8F4ru18Jvew983>ixs*7VW@W~^cixr!{hp6ZDl1U}M!L-vDVKRZPlA`CN{~h> zzaXApGZ+N4SSkE3rALHmmud=FuiIo**pc&u?OWcLNJVYTeK81A@Zh}LmB5f03*7+j zsYAg_sT;uk4dD6=xTZ46)kyScH+cyDyzHT<tbHw4*Qy zK2p#DM`d6xmZb#kS}z)=+<2S^7pJf^Uv7G%SPS#`6h|oO3jSons~wyhn_pRDXt%a9 zKmXnD&ad$H;~&590?nkoQ2-~JU*h(lVA=5M@GH3z?rX?Amn+6|^e<*#(pmC9s3oFbR&Op=!{%`) zr%rwBcum|G)DEHCN5C5;fl+u+9t$Ft4KJGkl^b^$;y7_v8ll8_8y?Q($O18tJTpLd z_Z33WoTfW++;(j+Bl5vN4>6K-`yeh?m?DzI5ZV=uWRn3Oz=33zmD;m`PIqKwu@Bwc zNIO{xRw@8DIWoU&`>?f_=UMG4al_RS%8|Mnuw@>kO=;{PrcZk$S6=FBuy&WqIo73Z z=KQutvgQuOq|uAHL7WwUx|pPhZ8uYM)*J^&*Jc9Yt?{8^a%f_Us*ozYb&NE|Vzq$v z(!Ih)s>_V5L`i+9U}Dlg2!zv&5YvnhM;IZd86irP6qQBTkE^6aNg1Cr&*htW@~;2F z>R}xv^*J*$`{38rKRt&p^q-!`Qz;WLGK*EA@*)Ff>II8$z^Uam;ct{0Li<6d=`gtH zicjBZ>S7z_;{Gp@*aH;9h9&e|*GSDNyP$%C3}tszbHwpNQkbGjofyg_)A%t(IJqqP zjwRF3+%4OxhNB2q|PiYQ5qbdcztJydT9qQgr`tip;U`Q zGEo-q%7kG?t+hhz!8^s!7HmH>QKSG+e4O!G3T^kKQ3Vfvo%&0G^L!-Sxm4mK%I7>V z6jS_jMm=z_>vZKimoBNvNj@GubM!nN)b&&v(@K$Iq(x8>Zg(pAbz7ml=0MuR2@`f( zffmoJ=O$W#L*WT9!iG2XG*m6riq>%`Vvk4bqnb50%1zd3;?0yeLl*q&bg8PM~>LA&5O{ zlksjAC|WOkQsWxJeGQXJZEf{mXqkyUEfWZ!qn#`%-e|ENwXi56=qs9jPDcmA-BmI3 zdO^Ej?f60vW--w96-@b-=jSGJz9`J)m|A9XStgkEE0^2yB+I2boAuSqU})LO$gZj> zT1So)ldy?Io(=bU!?D=7r^fq|P^%m%Jl}tzb|&`JPLKW__~sj3dYw^WQdG~7FBL`I z=(VSYc6E-c7u1c0^aOM(x$V~i>Fa>>1a#}?whM$s46#k5wq#W+N)_5bqW6sp3B`Y@l`(p zp-7{HA|(lGPN^82QmlzaL{=4-8Z6t?)em&-PMm%monpc~rCQzW+Ub#mWN&7(+i^DW zxRLq}w*0R_Q{vl}JXopa5W(;XW6PhymXEMXX3}pU_4x^2VfAO9yVv?nd&2t7Z}t@c zbgel?rh@uQKA$&^KRhYvbT37_0zB~{ujlC~ zx~aq(#XlALl&nQSUyQ&(}Tx{lGbRo{AHYiG;- z@fza^3PSf^I67wW+{Gx@h9H;CH)m`d9+X!e=KzAALU5(hH~;K&b}p6s=AS)A`uR7% zXsU}1Y`xFful&ucQi)jgC=0f?w99+B*U2(X`Cp(W(Btv8G0;rHgDI*iI#rIA3;p+i)yBTWHDDqALjF3p!d- z?aH2tggRTL%{H~eXez=4Cv%>ITW>jPP-&#jjMWCe!%1eaj?Bh0jq^i~+| zlUkp^)COl~_ zq{}ClX+=_6D{oQUbjyqOi7CgF19K@dS<;<7ba#$G456=Y8=A7*@o$Ap+T8={q2p~X zhqmS?nfW?=-+PAd$&4-oN`8o0p2PROXLJd717x4Hf^MI-D7i!nI%W0TK21cY5fz1ic5GqDPxy&oXcvG z2mtQaE>gHNL=qe^Q)oL?_fC{(_L9j2!(ElSmQ^+RCQxPD#IdTK*F;3kTyuI-;@>X6 zxV}!{9hXgF!{g{6sew_r4B^0sv5g==@P|80Z1&F#eX4!DwngCyc0`wtjgt>?yiPU=WYyFS1(_tPuC*b zRX4aL#e-SAB7Ud@p-L`u>|z47d$TmAkGMv9p?R~6rUTid#i^rNrV|4(CiA5v?^Z=< zw^d4vCq$f;O5V4=ZWDJPZ&4@eeS=`WuiMp&RXI>NQvjq1+>T5mUECsXx0+dQ4 zc1By6U|3)$*1Iuk4LUJlD@Ud$(F3%AU`v9$Y5f`u$}Q4#Mc$TPUovCOJE0xPy}lFL zxgFZM6Ivl#OT7tYATmRaH~tp%;LYUUoC>`0x4=DTzB$Id@wdS9Vc2EHDB}7!%^r%= zH$xR#m?)3&w?Ghg`sQfy#@_-NzGqP)B>xeR|2TR}`BvEs{3b7_hK``6|N>~LQ63C6Qb zIl|!uy3@H)bPBwl7u`WGKi?KvhrQ=18(S*7?$tLdH!4@wcPle8;>8(8AlBd^9E{i} zHOklWaV8{lG_}p*usg1e7G~M0cZ=^)cpZ>SrF85UkKKiZS!@{DBR5Q2E$rgE5Yy77dvulu}H1TQN+k(w&&YMEMZhwR_k*E&2pcM@K9bN$6q0UZGB`UW9$IG5X7X zd*>Eqi;cjHZy-?&iWW&@x+OzFMVn5k=Q~Rh5atrMz zG;c~1kWWEliNw~{;$k&=x+n}p^byEN=;+o{C%q|6Dn6|+3JwMf znq0`+(*)xs4Z#?S!S|QSl{L{2^DAUiMrKrJ<b=Y~)Zq=H_aH+HdK-Y9EThG0nvXvFlOA8LTCV8N}$^mTD~|eKu-a zV2=J@4`_RHd(GfYB7Y-mS6&v(3F;PC*9?w+9UT2SIQn&P^igp1>)_~P;OJDk*JCuI zUrQ&`6P3t5q#Z!msa7kU4uwRX3}15%24-v@1`l9whS5s#q*U(hbdJ7Z(dJ|yIuD={ zuGa{Z@k*t_fF-sMw+HZgiWxlEUBA{dIShh*h(3U1+Q-9-*D{M+rVHyD?%;h`KY;PH zl$Q2i*SuExzwVmdB>`_g@`WxmTObpP5k@lO3Tl{Dh8Xq}!l?!U2L3Ct)}Z$7KFT;i z6{iApkn46uQtWJOAR3q=9gqYENMr`~F3Kxu+nX+_ewI%&n$@@W(aR~JAoF4ePg2|P zy-z>~h-a_v+r0%d%OQ2&PD4S_0yZV%lV~BvE28c$nCei`0%MdyxbKC=DQh%>)(UuG z{@{^&t-rGWTkEerzv~9pUtx$Pdc&gaD4eNE>!oPjDXQ8mVf0cq+zHoL>S1__MTS;1 zLTZo96PvFJQ-yYL9RoCj*(kQt$ZPe5)QQvr=HdEf)Qal&uVePHb*5~D&KwbTAS8V-$^z_lsGjKybixv_fX$bJ{NS$>Fh9?7{ zs6w-(*tUmj^ec|joLDaeXA&nYMY0A?*UC)PZ&uoQsPbmn?#6(~4wfG#V0I{&Y^*nu zK!~KBRE%olL>Tme%M7e0|`h`;hCyO^>LceDy7)>bHQ??;%yc0i0rbEJf8% z_GC=;O{nf$NLjJeV%TQSJ@MQl_o~0(#{R;)8;^~n8UfXfsX9)esHzb;8$nvu=^Uu+ z9Tn{<9LkLH=<|y)&-a<(!HPc7q8}1{ShUtVmb_P+BeTZc3IDupCtlhD0%<^Hqxi<`E`rn~E6y2<~kP z*wmRW-LbPV{Lf6_t*cA`p+k3pQa9!@w(~_hiP{yS^S!$_{Gf}$H)&|Oe_{F{(oRXR z_K{W~cWo}vW^W>&YDZjZnz7H43Z?bCM}%-9O&n*K?gK=T;ZcsX1I2JA7zww7$>J?m zwL>4?cA49YP~(^;5lrzj9HhSjBfW^)qRS<%a5t^3jolVLB%Z}TcnjjahfJj;>Q+w!%REhA)EllgpD~{OdImV z^v1gz9o08m{dZ}SeAvSI@{JaLGSUv{|N0ESUftpbB_T;9&>0dMTka# zc<&B(2a^R<+a{rfKANx(ovbBbmpR&)+QB5Fz-@@BS>Y&OIg;{DJVlcp&ALOa8D^Vp zt361yW}nCG*o`W2_gjG;MZtPDdzEU#?znV|V4tNyh?pz}&I_+!F*|L$<sIyWqT0#m33XM3 zK2C{rBm(XYJG*dzv&Nd2K0W=nQte0(H}Cpb1lMuO4PXz>BP z9TslY%A3aFJG6Q#qx}f)=JZ~S3RC&)aID9qXIRu<6Lo3rtd$nm->6jH;6hwcmexAG zjHLgGEZ#4)+Z#L*o{f0D9`9DR@keg7+vM-A)5~dl<<)Ze)fE|KuQy7i<)tN=zwKNO z6~m&H+tPhjb^^$?a-g=lh8K3RTD^REa{-_3+QpZamR`EJj+=L3^YZ0tbrA>c+G;IO z&I}g{DK}n?>z;DCc#lBLu-VUfBMxovX=WZu3{lEB5h9o^!9c!fg}TK+B-Cxt*}EHx zpzcEADpp&wLqsvxYT7^C-|_aHN^TcvuKQ2rCw6~ErHa&nLNRD{TxzCTW=9xT2uoZ` zkp$|Q{e^|1z5d3!_uQOn%sr2 zV-7+2(yBWcC0UN?A7ZQ|l8+p{S_{uV)>PZ5UKI0yDh}%rtLWn-ki$ybJKbvU)T(&T zs9UX1H$Nr5xg@4%#N|RP{ov+%li`_ICjhBsl-di{a3``PizrAu$Yj)oV7DT#*oS@=(w58lyEx&0h> z7_(;fah$Ll=i_>}!QR=Qg(I*;`&3Lg z&Do!Y1q}TQBZ#Ur-kf{TaCb1mzq_zkEB!_^+zsfmTlu9Mp<0=7zPn&kfi=$OuzJk8 z|NhUQ}@;jLfmPqg+oz@oI)hZC13k#zpRs zOdpo(L-l%^lC5}rTve;!C9JuwWU_FZEDTY^e;%gxaci11fGLMWlUBAi1!LoDqw)oR zM<{EFyKwU{Dtdheb4$WIh2Q0+nfDPS_#?KH87&4Fi8*u3;4!Rz%o-p63@;B)r}2Ag zo_hol|ERSx?}@0Fq6yLi!+V%?=OQZiGenFoF0zl2$xxIdbB~A;04@(j$3s*D8|S&^ zIP}0{(Dr8n&p*GpS&YlfpbQ?hMfnJG5sz9YZuThDRtz)F)ScZxk36v~c#vcXyWIfY zxA8-Y$;L_to-SfMD#Ra^8vJw;_R%9l&q4G+ZK)LDg-CF}ZdGwO!gzVRT*iUjbV5x_ z%8Cac<6b@!xZ#GOp(0?YR^<+5wCg>>-9KX2Uin+tn-VESQa)9+iplU8HPJr9%p1Xd zK$#}Pm>}32QOudFI^m`RF`eygIW^)vCvgIlj?ZGP1DssucGD z3GQ^A9vL*rs81IPtzN58c%T@96d>Z+2rgVDUUhFqg&%OjFb}Q6bni!iN7Mt%7OSYMoC!eW{t+zvd%MO+UH|i46Q7+>ccf}!qivT_`@-1C3{dlH< z#CyT{y9-$Gc&ifyEcgNzd?CVd-5Y{^=2N8~Pd|c2oE3muAg;dgduA$i+FG)vy$q@u zb#4oBNFgP8&xA4&d&iDsFt=m!9~J_{n*>ROhbt6sjZ~8SH8Pb~D^}jByoy(B9dDSJ zzk9zaL?B@w{A`9s139&{fxj9*hW_hia-re$QhGQVSR3j9q!7;;G-KS?BL*i;@l}`d?yE zj^8=%?Y~h83*$}+|Flqr*pW~w?iG2C@Xd5Ph15sOUjMa;3%OC|l|t~;x2Q~yZnVo7hM6HxUvP_@*-l3q&a4}%a< z6-L&&eSGZ7U(fBMW7ud53>&wPja|X(VHX*=W02ye6DL5b5B8iCsY0Xz-&r+OjO>ci z8NfSh#ZSs?AnZd%3tlN7Dq#>n%V7xM1Pcx8I4L`j&nT! zIiCL<&;LH2e-vFkimsMgNu%iMbHGF9TP5Re6kYv0*8g*Jk*+$k*7@_^6Y2x!)S|k7 zPTlX3F%*vA9hDwg3=(mMg+e>AVwkKkF=@ObA!<%h#)NGs%J7t&LAEhT9h8?x_l@#8 zXJtqvU_d9-T^UDB@eGPEMDIu?qyqG!A~2@1(oQB(#cWqZBg;#&MZ)CSck3K$?8&04uqt~KMXl|-&bsg6QZ4iWM4|Dv6At)f+~&PJ(pt6JIY+Hg@u zxD2jC-ppi&2>u?C{2f(55nm~l*hYDi-IDh^bk!+B;G#CYC+wY}$efCBwCsuKTB;X?pi@eKr zQ7TkR7L|8|F_;O_B1X`3jAh%#TO~bA174O~_ZVmG;5bIj3wIzY3^pJ^??{9a4m7r+ zPC_JZH=AfqwsBFQ^5U+liK4Z->fd?hZ`bD38b_U4k*Z4mQ&!UY3AA>Yf{uu8r1F#E zJ;W=>i^%fO)YvlLzeHTw(xV0q$b}KCKWR_rTF?&do?ATZxa6z5%~dARo10y8cLfjCf`G z@iD)Gr2pl@UVO|Se$5E=qtjmXz6Xnp-`h|i@)#nSj)@nOgnBQVAH;f|MeG2^~JVeyj1xRv< zKnaLWKvqR3qc!J2?HU9c#=j8p*cD|U?ge%wcIDC!F3GOwfytXD{m5Vej@;J%M-+#F zuLW2K!B3VT*HT$zT-Z?#>DlG;ixxm7a7S$4va;* zJM76op2o)Fu|r+K@v{-hTTMXRv-lsW>{OU{l|HkMhzy^I%r zI%SY8h}PIng}`)3B%r~vMkA<^A%|=<4)xa4c-&Pc8i_tWJ%=zAJ1iI$xL{=j( z2Ks_+jk`H9%e8GzRIJVj|MUZWh4Q(a25euM_)yib^)zI6m5PC_*?KtvAd68hKKL{c z`4=GERWcfY28{jD;V;5d|GCdozY5HLwIJEO4s-qq^=>rI&1jrogQq0#=|;Hh1~kr> zqB0JohT??_-o3rEGBPZl>z$3>FJnU~Md^K+(Z(#bjA!YQeV-(~cE7+F@tk_B$ibqz z|D1Z2Z%vGA-Vq>Y>#)V!KR}!(c1DG zrA)ir#*U)JY*VdtqqJ8Ln)NTLM>lf7vZI0A(U7bm0`j+yz22FiRr`9v>Vy*Oxo)nS zS_#fKqp^wOiR1HXzUeR(H{>+?b)ohB^#@Cu9b$Ia^az-rO{1{tOOi8%b*z{-oXORL z?I?qR^2YL#yi=&uO~ewFDAlM2@6SB6x!-8O=?uyGa&~hwG#lSp3$B#9WozeUN+FB| z5_NkWi~5!C6%$07Qki0{)QfJemA<51A`e;3<}CA+3?|r0AF2l<^hQijbF%k~xm}!e%{A!o z)d%d%WQNw)gW&K7qZ+=^K;HDBu|wRyQ|pH7!CuE=ve)kP@)mx}mfC5DnBKLc1j*qL zMB&A)wzNz!0QIk?NA;k8bh9gKx6=rh$>+sA*+hvqW206z+=zGGK)bTxZcv7>MG1#` zEAXZ0&=8gjts*-f1w@yNkt)wi5Vl1FuWa@~Y^zI`u3S-x2W--^d35137*QUb9MocL zMVDq2miC_J%R4*yyvjUabA2PLZiDX%$ST;5*ozSFL0-0Wqx7G^Fokr~)K8>21mM_d z!yLjEVOtm^?Q?|iLN~MWMk!@zT~m1|w0$gPC>+{$=I4hdj;H+o7WJjFnxBu>XOfy? zp;dycg3C)+|7OS#XECy~wzKo{%cMv8G%3`$rZ&H)QU+gOszVZ9$4MC^fgT(hao0&1 z1ZdcIyWw)m0KU25wixPEHq3bLCM41cAR}Y=6M*IzkeNUt9YrEdAd!wDkz`DNEfVP{ z66q)s=@Ff6X=+d0LljRrKv&iC-lO*PwE6(GCq8DS)W@VGk9G0lx$c&y6OaU&0@xx{ zuA&*WPR1hbQ;1w|lrrgzwDHu0XrP{09s`rMgbFdQJQJtoXuG=*pNuaspCMIJcfubec1T&n1wZ zo+DI9eUvhAiXsz{<>g9c8FeK-35g=&;uy0*yyuiBjY&^PYTND5M%3B+hUHM<7NMf5 zObyJyJ(k_tqB5}c2ooHV&dmL3Z`Y#~mSM2i!SRnGb&&I4zswG-r?X+X%`s-&T^iNc=O;68ry4ybIX;P6WDit&o5d!Vv=pfaZr=d<=2 z=tM8zC9B+>rM@yib>3Irzej9dhERmIq?MCFN<^EC(otE_U^v>QW+X?m^-|sG)-%*V zB-sHKhKEK1+?rvP!B10OPw2kt&H2>HRFn3kSz;OZRSCK_zpp>d3`4)-m5Jik6bJ}x zR2JDyZI2q|3shYIB9v%}TXydf*eaIg)+hidc#4vYEO)7BELyd#+O{O*S4*j}l&!wv zmvG=6_F&fJE95(ondI?~xzm&bn*KPTiBAq_s^h>)VkEKRsUt$J=BI>GOmu}rzB!P+ zYMnnKM=0+HOyzs#J2eU{lEsKod0rhsEb|q7QUH&jC{ah^mSRp&MzrUT$mc*bMzuxx zp81a3SZm-if)>xKKlln66i~L@oIa168xprLo+R<7Nrfi6c;AwW}Zj@ zXklX93d3dLzi!l7hvh&L!CB4u{pW)OZThKl(Jl9Vo*I9-d3x4G-6DmRQcfl+JP;+j zXp3HWGE8jLLiU3s$IO|;_TL%4cya#K#mg62E-zkqWvTS)JQcyS7cNMllaf#OhWc#} zcknTdezPH)6&y-TSdE;U=&rnxC4QqOCV=m?!v*SEXGus-hj@^A%lP4(9#g4}bW&chr!g6=23c z8g(4m%6tM7ZE!CozaBfv0}~LY7f}su2~HIH67Mx%}9euyCJ!+bseNVRIqIB92DJlkQ{GiYp92h3KOp^P?0;gX>2|Ml!|@lU&UA`jq@$DEWg>?uVdU3gipo zc_7X8J}*WgJL)L4OYLH`OOu_gSOQ8y=)NNY#B$^E05*FMB&5`8gkTZbhP<$k*CG|T1j~n^-aD?rP6Z2= zCc14O_BS^*_Pu~$cXk36mj%b{)%Z6uX9Sru4W`b3sWZr&BS>g^u#i1#e4|pKV;YG) zjmGxt$Vb9@rXfy22!^XnQTEOj)rEU|CwdpU|NRU_@CCKlY_h~LGcW_i2M}t-rPVzd zj2T&_Ev(?8|IMT*Sg{2!PhOt1yGdx#x=z~shZv84r76Fqdl{tJ;9B5UR-dKg^P$-kHL|8SdWDPh|%@HH;Of9fQtnx zz!kIDj%mPZum&|yi#7n=_YDE&d_h1N(}0W$7=r=nBM}hTY0Emw!vZUwG>Y|S9#evU zE&W_kV+HP7g8vXp@Ry;hf5^Rmn0uGXFCRvi-Ha~#0G8mdKv&Y`{vShEA3&Ggtmtw- z1g+8&+K>gK2vO8pK2T1Z$BGk!)`L>5bO&jBl!pBcqF zA_d;%)eG+II8KbpxHUCas%PtRRQ?yCb~r(?Y$ z|58;PcXV|VhjrWTQPQ_KaWXZZie!(mMzU*Fnv}2ER4R`|6LvVe{}!p(fE&y>4rj9S z%nw#Wx_$sfr9vnn!qSRkVyNaKidt*YRBqTE4(8mETyQHfI?|6N3iR(zKkG;vu_Ld| z3oqPwlE~)uo+OWq$T9hk(=3&mPU?-7+VXsAEH|c6p>brMjaH8uNoj!=bFD!tW=ck$ zJuBo~bH)T*=nEFLQ>#?BBUC5C-gRcgom<~3UA|0J(BV{cE+|^InG+xtCdSAKAzAuJ zVS~J2)WQ0~!sv*u9SG_*Q0ZW8$RpXMdO&pa$R$~pcV>f7@e&o6sH{-8s0$FKFM3^a z(-#OIAI~48C2jVbM-V`$?D+WP!kewN2_-4`cL|zQxBpQRJ{ErNR4*opBM3A}(u$)jJpWr=& z_5m`QD2o@Df@%?)GO&?WeLIe5$01C5Sf@C(<~As_S}qf>U#@j3j>M@sJ#2j1 z4#S=1Fgq>ySFLUOeo&&3nivm`3F=2j)5#Pid()YrOr^d>t>zX3JqFX{Q%K#HE$p#5 zq$GZ=97om4>RP3$s+BdWkt7-G#{=;bC-f-b1aeGt%$>*r@yfgx-an@+o@&mM$M$*M z6_z9TzuB=Ex67Eo6#|N4i~&E(l0gCLfYa!=fKU*4&m>?gUA@YdA%f5qwBsg+hGc+1 zAsh1}e3P$hOb-d?EG;cAtv4bWDIufghcwgV#&V;sOB$?5Li{!QO!*Bt*S0jE$luM5 z4o7;Wl~O6KN#l(-E?r)$)z&V*@doyZK1ctIK8p>MJ{-Z#CZw<xV)UWZ!+`}0zDZ0tOqJGp2c9TuH+h9D^SMG|W#IQ=W z6CqnGCOz5?1&?u6OWXcT?C8wls}HTp_)Dj(qKT~xkpwwbN9gL3_#Es03P1l!G}!jdqVwqk^bWaY@Y3EYC6r` zpH_w=jvpeYq=(h<0Xg;fAT>QcNKG>t()x511Et3Zj6(S;=ln1nO~9z+t_k4~r3E(6 z&txbvjFMoYSojFvAU=!p!^nXie)nET`;~~(0@LSHNx-7%$Tv1R^cD;3(o!-PE60qo z5K7W^HL-m{PBYQESP$Hcilvj?SG!tRJ?;}0@0ze4_X&%4O<0fng!Q;jSdaUJ^|()1 z(q)W5O!)ysD}5o9B)W-=ijzMT==k!9Ia6*rr0FSUGnHxNRIE;C4Uc_T2Ie%P@8q+$OtclF_iky;;w&OWRZ^mMg86no^p0Xlnf zkj|bQq_fS8l7 z;XpH`x{&BR>HR8q{#vRxb?ciO^^MJXH<+N=3wiL3R=YqtHgOM$rqt1i#hAHBV{X_H zd7>DNuqY?4sh7&oaiyvENuPS33^E?-#Jnec>g8Qi?~^|DKIv2MlRou6=~J&*M{;$9 zt>}N=fg;CnOk*U|*sM>?8A4Abpii39bbXp0q2-f4*QXs$l{MR;Ocdcu5&z9ldNx9Z zr=4~iBQX>U1(YHBZ$BBdNzk&naqUOp-8ieYm3kM_=q{+_E~rFkUaX`$h33a4K7~SC zv_=s0`uNodE_oAZ8)>1_z=OyHi_SKds#03ucr)W~fn;yut?=tjycKG_i8sNj9>aT~ zpvGlTqmiUpFev7%hTksmIj|q{>4RVw7VsBM>>4T=jHd|bE|DsHY+q=+o}<1PaNRe9g#2fS^m9uiMY^& zD~6bG8$$ZfBfI~S9eGCHf`K6YF_=;ecG>}lENJNa?T$p-ZQuUBYhm$?C1l0MMtNhK z@$|ytVtI3Qi_rt+avDA6yQoUuY;8;QCO(Wnj95ARjK07(b950brPf;#L?$Gqq8`Dn~3)4W)EXKaZpg8ApI=PgckkbU zjC{x9(MCMJBgsg3j7Y{iZvQ!n=JubHU~d08iRJH7dSwogUfw$vTqk}i!Ntt!{|7QF zwkNa5{e6exN+cBG-w~|8YYP$nN5=(h>`6S4 zH0dOy7@`w@mMrWtVXx=0{ExHNGxrzmXYN<`sDIac|I9gSekStFg=a2Yur65ls7KTz zGbu6EsBGPm7x7{#ZF@00j55Sts;9&n>NLY+%gt~gQB};o5DB#0TnH&X2`r2+k1dRMs?55cCKYHQxge44xr-N9Jf|A1SLL-j zqEas`5eq?FY<;o5ND$J#pPrF2-l1$s-S7j75u~%}bSxcX6o^NW?&377kQX&dQ+has z-OA)Y>5f71aG3iykB}6fU!b#{2y}WxO(kXIlnBt+p+_&P4y`(}G?B}yt+Yyw5;|U@ zI@eZntGTeSc6Gjx2+lL{ zNzt)fS?Z55vuBnWL4(8yMzYMK%E~@rumSyYte8ayPokr-tAPSpExc6OX|6RxZpdwh zDC4BZHK!QYNY=zJ7c5?iXl_H{3~NIFl4yaKf8u>p zx*QUo6Cgb2(ffMiy|gs)l9UQ_zhVMFRoccD@*1UQ2ay;mS}if}yH3;sL6#XeJ?cb> z6efzIo@kUBo8@(UOHs$oh_^x(20Khj4qV6@V{}bJVMUr9mUM1d=H4$|S}Lir8m`uE zeZHM*6Ns4^$;m8yeRZMRzn0iA#z@u|q3ZnwL2ndOpv zBFb|-@8D6k`7}D(U08tgQ^^FM3fy707H~%<3w+XM^06CkxZ%bd`6Mx(fBUzW${Q=o z9?poXP{e^O78_5Y+F^$Y^B5HyRC}k9ZP5*`%iLnHiGdo8#H?VuwR0GjwGbJVD%Jrz zoN8_{!(OGwgX*OdWUNWEUMoo2CiCsBo$V?=6pSY=|M}LSsUQ7_`;;ir>rZ7QE|5m%#M17`W&kTQ#>0Dv)|ig;c6J)WKAyW&88nCv)OXai)C(5dUM9S36@t20eyNv|ctQ2C=bpHgngv?u2;%)eK|K3NQoUo|#S?&<#2+27XKoHzJu2b1q5%TO z2w;;Srkz@sQW8vj)1jUB`VJpeuf@bRpPH>HtBcpJ8zGaDynH!>LMu`Uj;A59u}g+J z@fGqhq;~9Lpv8#p&Ueer$ztw=oqj~Xz%esfDW=5kkb$qi+p4Hghl0w<^^Gbju!b&l zLSgFHQ9MPe%_bb!RE~wD`=}%R-}OIY&bxb&A&T||%2eN}SL)oTbS14beKvnXI#eDHB8O!C%%Vn~| z$H&7`zI_7@dF}O;6}&Yxe(lhBYLgy93!7Exl|Trc%mvp7p_{n_8=kr@+s#Do=*ep) za_L|?mzy{;Ix?Eex>N+brht0nz*sJuA0N++jgIE@-`K;MMCQnG=1`7K<;TXU44q9m z;n`Tb8N;?R`=R*wSbx9M@{dPmoiI_NvLrcy9GRG?3bV{!%bamXA~H9b^rn4;l=yAq zU$C$q=x8V1?PyqO&*uDpbk&x09?<`wz7d7ui@F*ti7~;@+)OksG!`bl|G6h(VQI@O zEq(0go|uU)tioL7wM2sdY|8JVDwE+pdMFT>f+Uz7#Q!R1*kT3aE|7EtkqNy(F%FmEqT%ci9r?JZ z>Oog;$_Ylw$-Nnh;y2}kFpW^y%pKI!vYaIKC@J?ScZiF-+Y$e^aAC7Wj3tLUL@n^9 zgC23B!_Y0dsNj$5^rBK15XS~B5V60==PAO}MZ6-xKr!2ryX@GZPB(;j;5@z(n2BCq zrU%vfayku^H^MX)3#W#Lngair^f;CrJ^mBKR|5vf4CX&F7xg9N+#hi4DW%jGkqjc& zp2n+j%gsEEh#rt&{`TJWqaGrxZuTXQmQ|2Y@a<(4g-VWz;L)PWBKq-gQRNJXs=GyQ zh*S`nf~sYG6xy5wRmZ8)~}WFZtAWYbk;x86}K{moI@}w2?x=$e`e$6p~0AEr}*_ zL%73+a%quAW4W9NozWa($&)_OEJmQr4T)qDRvrD>1d|meC5Em)10uvbAp!~V4ZO8H zB0f$Fssr-KLq}>ME!+x6@z*CoA-y+|5I6MM9SMOi@@*vqR~BJeJTC0cZxH_T<`N>d zCm|@GCkr#B!m`xFHQX*e6?O8wp0eV&;dqEbbhTl6narX_xnX_zp8TuT_O92QEZ0LO z(Oo`b!~kqb6p)C4{=Y;Nz$2XMO9Po0Zrr>d>OJTW zvFwk%@$x;r|FpaHS&7coGw8Osf_02C!zd{SQ6)yXu_9w9_El7dF(Sdq!<;9qOu}ai zG8*dgNhJ%6b>th2VclRoS)c#w`R`u-{^jx;^DqAOi{u+hENjrx69n99F~At+bTQ1B zRMEh3CMg3K6)>N$tlQ!H5iFmKPh*&#DKM_32muSA&dX=I1}_ zS*6Bj5k=#pTZeS>M>VEyhfCk}*s~=93A0WP&-l;{>UJ6Ks;x zaf#Q^V6akg9x`lynz@>Y3|qE0E$6c)F8U_MEH^iX)3ghP@GUR0T5(N!C{BqDys{6sZbXya>uEI2w_|QLFm;{QTwrm$`QVkK?-T zJgcg^x~t#aKm%+5B-nh(5G7HvWXqCe1=Pcel-M4{&SPhtaqNsI4{zd4GTw}KzL_0V z7fI2PM}CQuwL@u~i5$gB;wWs~v2Q=snCo}-5g~!>d3urpsD0^=6C@{3qR7c} zQ$Dx}`0L`FJc%mb$vDB!$%|NKh+D=2)wL5tP7CM6@KmhT_5&O=*~48=Jd2f3!3%he zWKaBR2L3c}_#{`9M$?m(QiVdHefH6kRiMOlwWy<X=V3s){07Uy>CJJ=O|KFt$fHO!Z~L!KhC>|LJpm;`y9UJXF0_$&t#g z?W4(vH*}1i5;U3Jc>{;+mL5rLZF5?7xWNI^7;f#v)}~f8=C^ZXvx$kP>bEY5zN%qy zPD`7Du*Zf9#>1_U*xCfdZy^NL^IL<5$I0qHx$=4cd2OPt>dTmrgFX`xtam%toBwN33vTA^;WTmq2H2wSm~JOOzV zm*{Zc`s#8~6035Ppc6CcL97KOT5%NQayxbq^G|{_MM3mtF(>+0lL-_5P)Q2 zWO91XC2xAuS4O*JfO00I7ob4GSn2qboHW{Jxmc$JwMl!%N5)c*j!HO6|72kE`9dgk zBz^X5edibtJ(2@_$W#yAfBaST(qvX=2Y);jOi~ z{q?AT1!D6taAjVE8lS`t)|(_8P@fSX!zKu9o&Ea;zbbPL@~h&2fbfLiyj?@z7X>{q zP0GD19b|Uejansv!>}rOH%i`gyS=cU*jQXDl?^)_ND!*n?j-CKJrQUwzg#Y^5O)PW z3zgg>b*W8petx0Ss$uhdWi&*`5XXy$p_LlJ-fLG@*PS%hWjN5RwqUkU)NA;jWwkmtJfmtTJA zh4WRoo`P&f^wH7bQj*$+)N8D69PupG+mL}$d+tt6W6)rN3*=#GjgQeSbc*N@;Th>B zkp^SFoWXu=rBd147%`d1nlWFtAZ)5e0?OB7B3~%TCcP`|tS-~%bGFj%I|rgf#EU?< zm8Fy>P*@5iM`pyLXCUDT;b%EfFb~AsKcJM1w%rloqN8fK+mHYWF^f4GJDC z&TizxSYJToCdCR{Unn!!3t5qPa>r!ulb=pZOhVIBd!|xR@gsin)3H^6*<^IRv9{6v z^wgwe&?$0NkK#R+Pp*@F8kH=>W)rU_gxBP4wEk z(QEHRul;lM+RvcZKH}@OpGL3!Gi1ypdSuvkB7hUH!{=nUF|0AQ`+NB z@a4tDa~TH^sG}f6J$%Ul9ZAx6-$PaM#H{3n&XH$l*DwxH#<&C6&3Z*#M^e)`lt!AA zYn{-Bnqc%Mc@B`rzXTkVOklKtPmx(gtGKZON>r~R^Nrq&&w>5wS3P1BS9dq(>XQVz04(ACbx?S*q$+4G^W8l(9y| z$$X_ZeY6ja-3BiOKXHT%;`C@Pjp74mis|}pBarLJX`2lT&x*+)^38ib9#Zz?q4}g& zDt+I!>T7gruM}Levq{08>Sp>gn%=zAffZcgTCG&+S)fj7y7rxKe;XjG9RYuK6C4Ja z>-47YbSWAccR*ejuaSF9oH$VbF{(+*97Qzxr8&#!7%!f!@ad6g9FZ-H=Ee(V@4|)i zi~2pJojhy`I90Xf!KEQ@u;g8vn1zCwN`YV7D*%6h)r(K$kLRpPt+G+0!XekIKlAL1 zEc05UUNCFtme$sQ4$P{6ATfmWQA6%>#LDUwP1Fhdg|}~y61p?byUF4H23$%1n4Sr z;KmzooTWZZvw6b}Z-3ic-W0d>T#lzxOCcucShKS?-XKs}G{(r($T$D{I*9>CqWhkC z;q2M7&pxFs?<<(bU;X7*AEhyh#fSIq@ky4Bln#Y@qzAW9&mP>+My+SzrzaTIeJ&p8Qwc+BpY*T1UTiZLCjCIO-r4tnOrjxkC zy%f?#5GKC+UBTA6a6u9s+qPb*NP98094N#Df$O{9J^hTpanWAYdUf{NEY8Iv(X;6U z21$|-?XyU%x4iAf+1@=sb3HtUU=0MysLPjL5>&4F`4=uMueEG_X{lgtY}C;>1Ue`OWxnK6Qq}0Zhk-{$` zQGXSQ`hFznhw{eGDb+E41MyfSw9r}7UHnfC%cES)yiR)OyV z$LsuJC=Hg^p8Q4E<%;T}a&1`*BR?#V_Uxyonjn4w{WUcPCyq@Ujr_1M`o?!8dKwI{ z_}+NS)jJ#K=cDtl{2949FOWNG-AsHmjo#F+c#4yk2 zUn*%4kg;?7_Nr?Ri6H+c`oAQNHGZ-D2_`g(T$*;IzOrJ;+;_dc_hRAmou{7qZ{Grh zjI5~t{PpL{T_DMJNmk&1X2pV$tE;Es2B?5K#2Qh?HXh1c2%xrR*WEeH72sY(05CHw zBM~ziz?toy-g0TKDS}pAT2_WJJ{h3C5N2B(LaU@x#I;Geay*s0nc zj)RBhY4CTV!7re}8+ootXxcbd*)$&KLul}yL4&^?4gO?4s7Dx?z8wvIGaCHVsega! zp%3Vj0^P6vF4ccTf2;l`eV6}!7yEDJ*yR_!Kj^>D>66Fa_2XFA(qb%Pg3Fc-z9(-_ z4L{ixlTghD)6jCF|EW3;$GS4#b^Xn_`GUj^B$IKbm%x1iji?6%E?;K+6Jufvlw~TY zml?UVn1^SI$lifYFie6{T0u+Vt_2i^db#!XY%c@~EwvZ~e5Kmy3dW7#u`pMqprLvg z`K_v?E)z7TREw;bvt})$q)<#&{pBa_96YGpz5k%>`15fb*nC!)TArxCczaBcN;~mW z>idQ~8*Io2m zFcK;;r_5_(y~Gd%Zyj&@&)eVr)K5~eZSW{wN2}*z1ff)kd{cB(ki6u&HsV zQLZ7{Dvfl{=006gCmbEn=FuJk>f%MfqobosB;!--z_n+Yl!q+Ieb)o2WDF%w)FEsS zxe{eZ2^!jSqqtZON5>d?CzCa1@RvqqA@+-`E%P8_X5D4n%j6XIv3>#1{nDtcmM*N< zR?3oTBMzwCagk$K%suQjj@$fQ$b!M^IECcukK(ED{TI=G%1Wk$^ z)EkRMws)=LO*raZP@7noyQK<_8X|j;ef+vs%o_XxJ*y}IYSlk67bDD{ zc9CHJUiWjF{wYoWjOL#D#Hoj-!4v?3V~N^?va`Irw5+yE>UeSK*s0&5U1df@G8(|O zc0Z|ijUypkQ(VqHDgk0T9qQo6^kKzvaEpBKRcvjQ<_U+xhTXuHs+BL;ycYg1_J?j0jTW|519Z~H` zYoTT_gxUJhH%g`vD#0O{uIF=FLnxg;*p^u>gf-jPgQB9*)4zTm42D zY@vw`Q5`xcN~jioO+U&Tp$U>y%aQ_D*^nK4V{!n|xUSw;k9|&aKc%^!(e#JG4dV*T zeoB8qw_HJ&D_A18i0L8Uhed9L4Gp1QrgcpD#|vobk25m*Eqo_{$m2&2@*ecNO9%Qz znpU+pn{5^8rLSL2Ui$i#AnIr|*fd+qN+qp{P6BNNrKA($Rwwr-)NRltN;g$YqMYQ> zJpDxbW>R`G;!HF`s!my3DWSM%Azux}rO>t!LivOMJ{E1H)RBx{`x=S;U?lF$QlPxJ zmKqu8hs64@hCm!+{kSfoRNVn}&l3Y(!41}1R5Ea8Hx%N@kTw|B2c=4tAFB#LAX-7G z1w_U`GqAs|R~pVmqW|hQAo`t)B=(^nP+~i{z>zF49Lz4_haGvnQWm|sxQTBOHlDzI?%a6X`e)1mLe!oB$-3-<;rT(Hx1D)?wO3@qH=JN1np*24YipVAP! z-Xb#I(|NDOqOWc1-VmhBb`XnH>%4w;ejQdXnHyl)VwQ$pKkEb_4A{=;#Ar}23DNnV z#-h%FzS<;7wJR_GPTBvT$IkvYe~+F0Cqs7jH(uM${=)0Fvw!yov9nLv+Z)>7cuhn5 zj@v1L3gdY4!g`8QtEH2;&=FwMX5nx?tu zvHb$J`5)o2{UbcKk6>RM$2R|SZ1cBV^F~a7Yu<>0zvhjo@9W;Sg~~P^GaiL0CB40F ze%s%#cg61ay-~{GA9$mZuccCVyqeFcf3H8dx_sLkRfN8VyXptlaIZ^yy`e$D>ry&D z@KE9M%YG1P`Wgar>!9JXA4De3ih}o~lE@{%h($sfuYWwTqwh4>I-p=YLHL3l!-vB4 zK!3xLVDFOcKg1|QvNFDg1o$SS^Z&}|{4pfJf7OD#H?()$p!_FlTs|0_D-o`IBr@ft z#%A7pg)iIjd2%iv+>lA9Qt3>Fpkr`qa8s>?!|XSE%x#%^G$v@-_zM_J6KhQP1&)zA zZt6C}t!DLxG?7eZuvIRVTZBkj$#e^ca1+og!}}-8#DgBe;}D5O@PH`S2VM383Ma9Cn*hVbyF?g%u>4=o)UdO0z>aNhlm?Og9^~ zHt{0FnOGSBGV#6OnI#Y`%oO3sNWz&du545rty(-us#P*xYY`?wEDHrq8bLxY@JaR< z=?`y0Ap?-t_2pG&ZJDBH)(L0qk_^6iXAlguw#-~$JK%rIxgwpwNhx6&A;M~8*iK>a zQf6(1aF|hnnWbJhZg}eMxd8zmzLbQ*C@qRi#M-2lm_Ek+Bm*~tG-!E)C%0a&b#eYO zprZcZ*jP;Fq|4RP1|jlRG&VMtwr80jr~`6~ABQ}@EgNoygM`}vJs>xRn>R%eNz!{m znYL6)fKv#VRbO_304@{dg-zu;v&7yQo$nmFCa<0Qy8xww@y|+9-THdHNlIX`xUp&rRw9lzE7YN|qD6;N^1_*$Z8pMYB8}IOREkbIVTL$xq_tWsUf5Lz{&i;-@GVNgZjj@f7)>CcJN~zv zOKA0GlNGhDKyKsFpt1;nO}tfvFP=Nv)gEIyMQmtpUT}#(5CfTvT8`MAlk)TsxD2Kd z1}GlSeFNGee(VNFW4MlShgxAtnF8Lo*&x4*6HWMmKIE&z8_&^9*R!yi?ocA05hSxY za)e_n($W66oLNd8kO@hQ7LH(XkXLH8YNbeAo>pIDayp1(Qjj0Hd#PN&aG)I_^fAPA z2F0AZ9lY&yp`Fva{6<4+6H1z!ZW3`r zCYkb84sG}mCWXlQBNB|k$21_JytB+Oei1$jhhS%ZiOCK1Wgmg!op}p1H!lL~Ls%+5 zpQjQVbA2=Uxb~)eM7uN}=5saI%zlhlh>$9}X|Q-xG-7v3PmsRw^&gYEYZA31HQ4lD z(tk;X^L)X$S^Fi|!BFptm>gZ>L|(TWTY!dWj&+fk3A!>m|y3I#|jI zj-1cPIL7~pq(?|$!IlsKNwzhn}?r2|66KcnuN=YbgM>6g>u_y;rsVJFR z;x3(xAm|VNq{w5>rX09%Ge=Ww`U{f)M9R_!`1(1EkLjLa%2Yi=>xr!PXmgshh0Q+& z5G_teiOJyA3iJ732`dzFB8vqbRaH3*w|EMf+#*15UD{k)w#HK+b=TKxwNy$|(+pZl z9+zMkqJ0QPfdZtHElwnTi2!}%foiCZ*7XqvX5hdZ87mxy18))zgyU|@8&ZsBlNj*A z$-9vOTL>!<0L+?WgGCrZPPypIw3>YRBH|Yo;Miahl9yAcL^JfmGSMX87NXul-3?m< zLw`WfQi+D-CJ1?a%o{}b7x8+6H*?un5brR>T8d(YOh*PJAl=UIv*y@fk2(2D& zqQMW14fQjfCs5$h!5kheeh15mUfjb^6Zi0|*lZGK^RMWMU!*5)}#K1X)le@pMN-eV%(=57&*rytf2TX)@c*VWqJ9+x7? z`su}jzIgfpM4$dd?q=-)q{9Px?una~0Q~vjiRYesj%=czNBr&E>&>u*g!kc7C1Zt* zXSJY%nLtMIEVl8ek6AqN)8LzZL_Z7=!`@NK|vfv)yMWtU7?Vx&mEMk8`kcMlG5 zioeQiy7V(wSE6CCGT%AUrN(=7E_&8@u>@)3r|tih$+t=)pU@kvUn}&m14NKA?Ju>5~c5_MH1d z-4Nz>sQW-BiK({1E1A?4PKKW3+n(sHHyZb|C()d&K5?Jk=oIu$k`cnVh8bf?4*slUKcK2;f%^%C zp|vX&CC|NMJbSHG&|9?!GEu-e_@lUq>Q1d4rQudrR~gPQ6M26|T)d2Il#KUM9O$Z^ z$~fpfkZED%VZxDM)g@K2+U`=YPR-g1rnlh9ybl>8SwA-*Q{Iv{0Du{yRAC6=kbq=y z^ts%|0EMjKY|h=}YssZEg_pfzeTtQZon!_<{-~+$v9Gcd`aGN6WLes-&!?KOpA3vK zQQE%Wa?r=w5a1ksae( zrP<)oZ059m#&ZZ_;mKgOxv?$GMnp*jjF2|Ukk;|3Zg7RL(3P|jHGlcOP?w$dX^XLf z{Btaw8qgE8Ca0(R6hyd_DMXXnq!}Q;IHGd2{sO7;)qFtv|LCn}=&i5NTOUIJd<>27 zDKx@e5ZKr0z0+ufyU+-Cp%K2isS&>T?!F}~*05&}i%slV#nFLo_@htU;@QRSZ_u*; z*Dcz;p2e(x>?hytUZOpty^N}mzZbQ?aj$jvD20)Br<|_^)1rO=$x?df?sv*%lom?6 zHydc3n<;Xa?mcE3m%rhT1$#flb!TG@)TCPUATdK zj$V^&I=%}{Qv(3hErxk$EXdyfOsOu0R4^1p-7xr-nrnA&zR6Q6-tEdQ^Wye|^8H6( z$JjV3~#E=(i} zv*jkDpL#9~Lz)S~N5W<=mX7rpdZ7h}K2y3ek?0aXR&8_xuB~Kgxs1eX6y$ zrkgiZ5%#l_G zT1jcuSkaImHc@L*PB^pVQ7ONq`D&(8B zGA<`Xc8WMo2E|&70e58sdmEJq>_wQ8wv?NTM-foy?v5G;6%G*NOx2$hY3}1=iBK#7 zeu@?ZcQzJEjEzeKwEEN@l}fY8(cEaVsMW~B8_$j#p|5T#^DkZ_%A7?AoP|A4qboFr zKH@o3MZm?k+bgRhWZIcw7?VL%+kHr@-9z?)ilJ+^Yv9?KA!2&TwKD@w42MJzB~)V* zaK0*9NgknA`{Ff1i7Y}JEbMuPfFeLOoLyWlm77kiM|EBKO*TE}QxaI9xxb|u_dzuN@C_IRiHmbT9g)B{ zk^JfOZ)IXKj&ZpSgA=>eNWD`Ctd~-$f@V4d=OKOr$In#oq1Nt7q5}wA`6e?4;nqwMColo zSCEGVt8oL@OYP-_$tm8(X#6qf z$cdTwHRbYbOy|aTh!lYemBRGsQb<(xAjiQ+LZFl?Xa6NT{{G-ox%n-NJX`+}E)zd5_K%E`@Et1{l%NEalD)`k_|tC7 z9+OZVicrYst&Xz4#2zcm0wbxB`UoTwW*2TZ0XAv~wvjm4u)+GDD#MJgg4Ks}l8{V( z80$?7$*+f7UBwKZIrhbCyl_&n&;4Jg1c*1o1EgA2N39 z`rYJu?cSXxOLTHHz1xnqYUS0{rPbAPt>wf>;%eYwO|fY~fN(8z1`mJn8X3T|2z7eH zc+bRBL-!^p;f;l5;#faKngzNYIgj5}j>CtHw)eY;3-VoSEi@mvhLLz`Bt@cP(22PO z^2zVAaece+-_fy0G+mq1H0?JuQ~P�gfRgu#nBXdjeDRc?h#TIp z`1;b6JvE|It{aS!rhL}`i>2{UA44^Oxy+dOvm8o>4QkH`cP_RH)Sb_LG8d@U%M8$Oq5t`q?FVDe3Rwi#mv7y;;zlqI?G$MR&quXI>1m%T2 zyRm_88}XD|TC`iER7JgsMnk0yeSl*FK)77W$~j3TU;5Pc^1{(6Pc8K|lc*!5kCa9_ zPNj1F*v?KTK^~t{JMjb+Pf$AX2x>>DV8jlKUJ_+w$G3cd*yR7{wS>ZY(n1W@NJMyF z1dAFIsPR;*gM5*_EguxrZ|mXkrYvDLNTiG{8rIIRCtm_=5f8Wo5c?kxA|jreIX%|L5YT;4-hEaBhz(6lgkJ|@jsM?s6^S|EN381-hNG&F*!*dwaJBGk4y3U9ON^eEbpZ zkr_&2&dg}1@6>M7|7q_}-M98W&g)P0e>(ol8pbvrTUL+EJffY}9(ngKzx$CHGP}93 zNLIN#FZu-8KlF2QWS{cQ;1m!yjd*F;_VCN7_gJ%SYB6^9pJ z{?qemj?B-eS4u1C`Jlun8lhl*H!ZKc5wF$(bJH7?EDec+N6Uta+6EqRF%|_&85d2j zJr}Hzy;ZY!fS?nM@?VT9lQ29PE~)`2coYw&06WqnNsbW@BX=WfAf9Xtf)2VDsd-C$FVSPhYm#Vlhh-5jkZ|`QGziRu;?MY@S&njI?_4Wp)2vMQ(ZK)mu1oTX(03$eoqgk^~pFXz^JZNg?OkjrO zoh~ROV6w$dcMm?ZxU^QPH5<(uxYUc!EWWt-pTF|ZLtjy=s~^2OngB;Tdi7s?`7f@1 z)br2%EZXK*u)}Ue+q@S^{J)}I$hFnPExE~h+^r}4gbG!66s$HbQo@^c(*|h6^8r)x zwK11P_p^2-WVC%5ma0AXTc@Bm4#CVv%7IALFm)N}jG#vmD-a zH?J+?fFS`XE5N3VlKHJkg(sVAgxacb?ezDafA0IwJ@2ib&*h%~{_{E0i~x@Md`@^q z`3gUP`nnIwDPX7k-%!qHuu~2r)bGSs_#S`u=-)y~pM;VQ<14%qU*Rc7&3=n-Z*!*T zu=_3pIE)|D{!IH1piZa7r>FdZoW!}H2n@h_)dn?*qVmla z5S_IvAzm43NN$BJ4E9(^rSdk4zT3dx`7XP5TQZa67ZuIP4G9y$KXPZ{(NcHAj@-?q zcr`FQ)JkMlnbI6;C6>$NLf?c*a37a4mSY5>R*7+Om^5o@<+;&DObPQ=VGrx zmTe37*I?W*C7689|m7>l$^W0ex7W7nQe>#1CZai@Cy^ z)A7*A1dy%K1j-OVmL@?PtzaaRkkF@ziA*pqGggg8m}x7`N~c=ktFH8aoBLoff5u)n7HLnIa4w`lnzysSVq;2bakv&bhF%e>(T=PX45euj$J7IZ3NJ*f@radXrNr@*<7?tMdueXAlS;8@a6oafE?C(@1qPuU42Q!2G+ zT!|FtqW54*_UBNY14VeIFI4(6rASQ~C2im@Ps$WLkK9quic$?k%LvQRF49Oo_fU8l zKZIfy+Y&zUc0)eP?2-gnpGOpXcW6l#_jP`l7&&rXr&ER>ER>>o+@kKk8=718p} zm1S~sfelrJ-lz65Jh1f$wlr~ce5vo3_(aKL_Q=%T|`nS<)@xnJ-Irded%!TvB2@;cinY|1dgEmPhu9F#sT;% z1P}i~;3wbl%|E)`{a@U}?tSjRac3|KKJ31$_n7mgn|e?6p3+aAR9o}p$zt&x@3@0W zzE5b+Y0m+-ak*^ez4?xJ6pJTMIuj;=!l>kqteW9qM_%mXxtxHSRrD7e(HHY-Ynl_~ zL{0nvQCVexU6L33HSA~PI#xLUnB~4mSKD$~j5=S{i+J>U-D3yob8Jg(B2xl;4O6od zY*?}CM$)p)Ml{^4X{gS|3Q*9C4bT=#C7I1CmC%+p5`spzspPKUm_%1K5zISer<@2k z<)t)OHY;#Q#s7FjiyY-2X;Tmhjv$iR1(Ec!{73CeQ=UqLtDBv$dUcw?uzGdc4j-$9 zM%mITq6mrY&^{fQo<4I19p^p1Oj@kfA`xk%dOezv_X+1S`t)=`pPamhmyJ4Y%@&T|{sk}2xsk~7P8WHxh3Zod)kCT=4; zioZrtx#DJ@%t!k?77RBPr^$BI=PuuZf|~eO(FwjxPzpPcstc1v;5ax;_$=k~m(WT% z1JR6R#7Q9hg#7e5%fjG7r3}Tizhv}uM}Ob_ zB%f>(qAY$`7HND~qrW43;&~#ab6EV%Wg;m=;CkZJ+YvJG{K4{Jyuw>n?e=9TI76T| z+pPOLy`CCPDPOQbCP9xslhc$n*#G%0_aQ8)ZeZ)J9Fpl9AuvxydpjbFR4{@U3tcY1 zw3{QW5{W})k$OUUtou8rsYX^ZBTaNP4}uQmugsbL4N1F*%n&+dt?mSSm49z^KWG|# zHx5N$-wF6@G!_RtixNK#6m+9w+0hc1<7u@@+lPoZMJeEnSZvJqclaK$rxH(1taWVa zMOjV7jH6)L+46$gJ(1rRct>+sF^ovCQ4p5QCQCf8$iKZCPB8fbXP=x4bUMl8 z$BDHo7TE@pNv52FL@h;4n}}xh4Z@a-I974B+NP|7!IP(sl9bhMSK`uivX-qsjB?~d zW~`(O{XWE1S(C{j4AIKHy_>sQWvgQ-P|WYH4svBNbmnq#{E5g{LXGJ@0n#uAZ zZn*VzF|b&7Is}-iNowN7`4Ho>yFuTV%ZmaIJrp-CAM&1mT%BrXD1cmzcEk>SFH-WS zkdn8cnQlWWzCUkFPQ1E^nh=`YULZ}py7+nZD+U4+LaW=$m5EmuA%bcvvcaRCtdphz%$h!hM667Ev5<%NVN8XB#ya^ro3+TvO(2@UE z3-Y$r2A5^CY#y`ZRB=FH5=o7|sse^Ed7nVYoV)$TEV{nvl}ChZ>WclFO4y9s^!bGTO= z<>ZrIl?B;Pga?`kM}A-Ci#U3$q6Pj4VAXydfV{H^NrxJ_C(r&!D{)8@&*tYew8s zher7xYZ&Jhr6N~IHGUg1* zB=A1X%%z4NH>pOzK>cN}1*+)zrPBtij5OUvkO#($X`b5F)+Vz1Iv#_>@$7 zoyip9Yp1E4fk9ZK6vs#*ND^N=dS84r5aU1PhJ``zon*yHlFx_2+N(8!T%pG*VW z*CCdf^tcd6>bRabV_~h;`(!YXoSa-ZnJxoIok-z2UB_|aA}*cdVqScT&@D;@pCmtL zxF0x|3jq7tIT~QRuOGpCfRD)fBtw6j8k8D@MA zYNgUWdxB3qA$W_v2Y||N1mi$^s7=;dAo%_7^DEhr7);Ws(tO#ISO`E@tro%~*{sZ! zM7KO?t#&fKy1Y`)BoOq8Onqf}6}A~UcdnGlP~0*h?n1S=g&23jq7G0OfO#+K1O!m~ zqO;^Iw;(3BaU#()UH&^3Q-UO^7AS-y-!lsPh^m(m5qSqt9HG>5K^Ab{Jn%-N zy;cnaLZ{o7tG?Rqxb{Bq>*Q1hT|J`3!enwv&o;@@gn9U(aJSRA?|1-g?G92V0euxu zrfV&7Vqi*TR%M+;<}^OtcRv6S;UY zZM7?1(keBJK$#fs1B){xhUQ*VoJ>M*t&Y(P1&JmKhI*9yt&^#yH0lS@s2@b8{xf9i zt;p1$MTUM58G6M)T$$u^iV78wP*-A|kw6jzO5Bu4FHMOrCozy&ICP2Yv%FJ*Ft%l4 zGe815Ulb9hWSDcsKya18Bt@KT5nLv=UU^t>Ih%s2T7|KP1=UEmS*sF(Ff6DXC6^{d zE)ic1sJF-^?!PI%)KbF@IMHFLG$e*n8D__Z#n9+zCZ$3*MGOT*3=IhxFwbdZw*%jU z$}U32K*$`~lqr&ZdoNSsL?6Y5Wy%l}ko607vTQPe;Qx~jIADS!LqreF4-q|60bE?N z`!|W+xne-$qy-D*4bwP@#%SJQ8h18nnx5WD(~NY{GzKZ(n>6iVi`{`no<$?yj6HTU z)bmd4vCGlOm!pv{LnB{~MwX0^oAL(xFqmL7|H^kA@kNN1Rra>*@E^41 z=;mG8Idbs{xQR%y6wpbh$3yN~HW(TQ^VJ=VC1VDt%@n~>-&bo{iQcy6GH1?wOMA!O zz0=d&EM*=#9o^18F|UtYGjcAd&nHL5Mpmi7nylC7D90-ET6T;d!;8-@(Hp-#lVehK zkv)=dB(NxHL~~IbhKU5_$F?kLc6#eQ$WsKZF_-y#mr6vD2=33*?yg-gy#yH5924V( zQ~>e-J#xR_yjD-5jI<<`h#0`h+;?GQz1r0ywO&;!9a6ucf$!`UUDogNRBBo~v$jTv zhI9jN@j^D2)_^@p_OvuX;PnWhw@uT$FRI7&Drx%FY9vxH>-AU+DR^R}zFsE@O6pga z^wP>o)vdR9CJ>&_Yonw4_Kl7f%$1erpI=$w+|t=n+N`fK4GeMtql(oAUQs1Scftuw zzk`NBJ$vM+RB)O`j#{dK8RmWU;s;gMpA%2^ENQA-I+BT`d6op;rir{oE&Bj_ zI-@O(t*OQF_>bn}ydu29d>-U8gZ&t<(A1>Qi(b#FQI5ZhIraNer|DzH-)Ps~goFO` z&O^bsk`wgSBVHkSzUdE#WJmF`zGG){JP{5STXozYXMm}01rb1uJ$49+Lv;b5(N4%3 zvFKXCEMS@Zt20kgk6`1Hcs!MzJh=0^jgAq=5OvLvJ6Ty00FIH%lOtSosq#!^Nsfq9 zHmC~F!+G1?_(WRE9})nP&e~Jonb%42w*-OsO1X*ZWJuDQ0?Z z!f3dSb`0$^10Rb`uUt;l^MtVdpA(xazc0rWf zl^RdRBH4?WsZ-WAfmBRb1vBe__#U0e}LJw|d=%!TdIz>hO+ceUzAffat zXlHagq8Z(eT2$fqi^*hU8~Pa8hA`$vwxNhVDa3|J0e`n@;{HmyFZ0Td%e=D7Mz`w_ zn*Nntp?F-z(~r`^UqE|{&-u%FY2m0gi}s#HcixKj{u(X*WqAC}@c27Wh^HRZ{>zVh z34C7Oo~B?fy#2(@+RKlg94yYM-@D0um-{aL;o?oq@%@=zeE1gkT_pT_`?tzx{QaE! zYt|QJk^DU8?bmx$Ce!`iAA2m`7+NW5>2t4(u`@AA&Ars*d zjVGlO7;MznRsxnrJvK%o26d_#5_JJNlNe}T>K^50R2-k&WdFr6%yOyeq;8d+^9$#AK9*CdN86dgn|tz4$!eP7y*rBd?YKMTMQPUkp3pN?CL=g&VoKYwnq5ic#y?9E>yuWTlr=>)I84!Ni9Mb@g#q_e#?Q=&z+ zn%s*w9^}Tn9LERD_eTpD%B zI%AxYV9-k$Qg0m!+B0NUuC`YiZ4i~fm!GCq6j9;XvsCp8kp?ZV^4iK;xnquG{)My@ zx8!f|?_?xfvkjmVE6;52Wdx%}H#ZdGjEP%(W8>6=lZ-dt-g25tRkH^#5{rj^tcBOJ|9z=!j zeGipDa59VYCAsCVPPq~j1ofLG64+8mBm*-Ol<8sgx_eUJAj>@&b$G z$qs0kHegUE)T^jO&XNA%t*jK`@QggA^r#$&+yK%MrYc6JIBED6xuRyXg36J>4q;-Z z_!Nj3>oIC;3osX@6anuddAwuZz(oKR@}LaJ{Xj(erafSXP$sG)p zq7Arn1603Ocxj1CMi^zpxPl%Q>?+tG(wM?R0SE@FXw|95)4^&p%9Qy_q%xsEVWPWK zVps*f3Oq_0vDz`Q@%3IR`7ab3NIR0qp$C$Z;v=wJy^sK6rIN@NW48oHQFOk&d-tga z6EZ1-r-kCbvOZ#rjWP7hUU8*I7R>v$3^RVARx@Pe7o}8T28<);V$4PpH@SAElHh36RAFKNlK9zH3M6ikw74hi_(pm+%x+!~W zO-~xnh#VD}DbmuDoAD%KbV$?!8Y;q9{k)QsswG5NN{dLBi5o`+o5?$NXGCC%a8!a( zBxHKm-o0_EJYOL)buZ}UQ-}77h@BBBIgp03gRCT4|InU5Uyw$2UM;(O_mEa16bxCg zVJnRwGFw_gel`%;17sP(PkLMgAVLwet%ffvs~r)Xd(yeStdlKrFoFp5<>TUl>;N~Y z$WT3%dPMab0`aAY(kEGdTslGP*;z0ZM4~BaCSpy5U8Ioq1fiPbZHUzK(+yE*Xo#Rl)ObCLj;J)jZsXr3 zgwdt;ott%Q#W}uYYwj1RsH}uv$FXUdfbk%+TtNa=DRb`pVOVsS=ndy#i{~K-mSG5o zCAS8zUz5WE*}>vk&K#8xbgkWeFf6f_c={t;(xT|)gBTS2sQjwKu-5MrX-Ihz@8(sv zOd8=(yV+~$9Szqa?pKL6iCQ5^iJAmx3_B8F6#j`o0a`06r!dLm5_2?YP2n?HWUY@A zbWX)MJU4KAAjv(~dzcW$cr2ucV%=7i|7tp_mx4)%*9goJRN-nt;|~Eyv;%FXO@5z} zJeq!F4$wcF-*_-Ao=+aV!RL5xI}h?c!gM+8;%fsz#5nW$$`(KCZ}xy-aNWme>WbCISP%jXv77jvFJL_$|^kuV1s z&asojnJ6)htZ|eGT_UG8zrJNp2SJTLqWZV~73K^M+9P;Q2pZ*t8E*{-(-Oq#Yc)r9 zCT(p}?c{AOuXaw`+G%IPo6~;fI?$UCJuCqmct*DTso*|u&idkYD=fi%Y9ia8-X5Gm zAO*KEZEMr&*ITwmO%6fJJp{)Q*sk=)A>V;6Op-+g1-cj(xli?(#w z*!CSM-iC`iG4sj}ytwn2SbUY<@j8cux2>HswxvA>tvj}Ti*JRrQ$YjLs$<)?v})5R zZ90k+OT$m(?eGfn9(#cpwP1i$3IGd>wJbAzB2I$yt$dc)$Yee|FX;y?$Pz1HF$+Cs z;IU@4aR?WvE`CPEGI3Mf;JCXT(IzOLpSo5Vh z3nW1RFo6%Wm2@W)rQHjdQE5{!QCfUpxY2MVO_F1`BrO#wr9uzH`!(c!+i1u~EdX|WK%mTug8wNql+&xF?+3V-$ z&o?z|BCi$(nM_qsjbfhV{Drj+rGrS;T3@at5*2y1$Hvn}N9zSga+A*W71Cm}*-VmI z#G2IOfsGi9n$=2W9>cabPm00V=;-`B=x3{)PCh@H9UGg+fbGmX_(Ed%fNpE z?r}yO*hP8>M2(Z0{@dU?+|Nvd0ephEZ9@8IZWzJk~S zV)Ghy$R)y{-f)keq~lM}`*H#y5*nCUoKTSy>djic#|gdO30}vDgC-lskfe-n*a-JIf;e=5!tkA+yc2F z+6%{8A;S4;RjTCZmGXfQz~4X)g-i)T2=>x)&2)*rXVTt~Qirv)Zlq6!8&qFw_Bu2L zs<3AU2=t+u^%I(Y_sJklt-1HW>q_kC(uM(e&AmrqR?+&NfBgM$^he-{55Uoq`SS~K zuw?HNip4P9V@2ijpu@aJQtO?Nzt4ryM5Ixv2hw;t2|}sY);pn{VST`WM0+Zh!;>K7 zn{8yT79QK4`<9Ea8PS{T=Pwl3h40d1xk=$b=W1cD?b&V={u;}UWwY>Jry~pppTT|6Lv2$Oyxp1}sCTsVz+Z=zP2!#p4iwLPny_qb}|d=4r#UE#ExbJSz5Jp<;7 zN9vV&$2EY>0`OYAE7fXQ%z0;0xMzF5O4}IM;-eAfBHjas9#;3t%8^mIn~TUfXzwIY zq%Bw`QdChANbwJfGBPQR-31`G>kOzkJxs*}BVpgCkX9y+O5!jGvmr4{&?yzQ`lKq< zO9zW9)f2nMG`BaPS^}tpu_%OUCBTJhRl$Ou?rkC0K(G#lR%;M#1PI)Sr{iu#$K3)M z+zOS=<|XDX$ZWr%?QS$yS93W5Zx=`!@8x#gdUd0SC!|VxT54lMi*9U00iq%0g^Jl= zm+|neZVPW9>ShXzVu}a6#j*mUwUr-`Ii=!oZY}^piAfTWQ&n} z)3EZObVaE;uXhQPOUKj15-4UDhF2{p9uVY5mbhmRetK$hG9K%>IB@46oMfUEu4tf@ z&W@vNTuculmMC@U zfO@mOzH_I5bb6VfgmW=XR9+^g2Ag!x3Qh(DU! zOKV>QQEO8%(&-qE6@g>FPQI*p(fO<_4r z=cj|ykDpo4& z+gsn6QeZ7w%0$(ep{iRot6C$_GPOCuG2WB6@Wpt(8p&Ie(XD`wq!?%IVx09)@}8e2 zip7)417LcU^!kI^v$pok(ZlY))Q;KO-OhvB_xtbfwzXq;1aN2!oYEn|I zF!DCn@6DVn4olF*kjAf)ceKrw`#^SM5Y833<(b3fCL~hGPJtZVp4Tf^o z-o5j!N>ctp(Xq*$J9p>vJ9DJ)=W6*BHli6{Z_RH|#CFyx*asF(-&&Fd`JQy9z$3c6_j7??65+u27 zUK&I#{CL?yzaMRp&PG#vxq$97I!8(2gs9Z&K`mlyk$e3Otqh`e^CX^5=?^t!c+&8b@Pt# zVAHCi4~Yk&tVlW#YRVsQ6;yGijs;HqakJDcrAxh*6(HJFqMu^PG)h4W+HjLvJ*d@f ztl-_^>r;NzRFWbJBixIm_;V!ZpP=Xd3~S0lQdo?SK;|LtJjgL(d5{zqW1~~Q zeUqe5Ij8Oi8%k!FWB{ZVgrRRSs#ycx$pJOPBT~Y+!Uf_4HO@+23C87VUV-*Hm0kS* z^){1)=`rAx0$0G4u1*CPA}iWeB1#%s4`<%$YNJ%^QGFq5q(`g~{?mqqw{=#>|BVA2 zpH;2*YWoWd&piFKzp9Y*VvSBuA3S(at+KM7*|{^VQnwcupL_agP+pJE5}4W{1vBh+ zn#eN3tf+3vpsUJMY)}figoAoBxVTKncBMW7&{1A3?2Oba#B?uDECz#(=bxE>L9E9Y z=AU`KK|oIk%Q=KkC>eZnK@kn+y12sAkpZNST46`=3sgh zP`un|`rynSVtt6S<=>f;+#aUm6#ZfNZM%;EV#LHM!fN&W#0aLFj8yy;f$OF@GI4&D zPuq6*{KSL|0?#{FF?f>^qPQGe{J`MyNFR&wO(?|Zs5~}8fbqn5wA&p^IwQ%kZZ|rP z7b-k5M!0A^RV+J+axoR}fhLPnoqy-lZwp+&sr%VtEUWF+SF=5MDTE9AVTZ_?DN6D3 zD)Ui@S{>#+E)(6jl+hCdR)5VHwT0(F;-@TXugD+s@vT;kL?-uAW_z?wn}HHR6M6_I zdyrXrjHIAtYQZ*Dn(F+!VkFGTms$)jrERv^e+$QfY8xGcNz^JtqcBs>Z2$6LRb+Bj zYU)5iBLIN)ddFv(ST+=-q7k6s&`LBk)2&R+i^0`wVtfUAarmhb3Igu5u4cY`xK#^Zt0p4u?4gj%eR@Q0It@mOmoW zEvraop>@#8T+`!!&{+9)D8e@ z8emp)g}O)NX%<(CD|V*X5G~j!np)`GszhF_7%FgE?o|RaWC8TX?-3QM zArG|f-iUb28LSrr5c-6X~EZgazW_AhljduuIM(E$sR3njHWeKa`!Z^i#?2e0Xb*OFSCRNL`^=AEt zJ3tgU$Ca*EXJw*MJl!j!ncS|IR>osmtiv!YScsb-muIu-Xsexyn*|eF4qTQ0w zv%z#jElNa6Edj(%pj)qZ&4i?&^Z?GMy_c7>_TEq&{oJUwctRwgH%M_QlU~P%ikVV}TG|CyC5b+MH8>W@~yPo9c4DmpkO`tlB7Df>{a6Om!?>16` zJVo0GM0>~)lF*{|Sd_7Kw;Kd_sGGz=C~<1NUKBhO?uLACobzlngi5Q!jDTbD>!6fH z;t6{iV$`Btt*pMU^7vz9c1s0L$&)d)Q-7THCSJK>CduSQG=iP=$KVdI&`sGab26i3 z7&_6&M^&%L!$-J-N@Z4M?lQ4AM6OY93;K>I3|m_#){iY0ae8UE*3Vm7YIf!Gu= zV#h;-ySoZ#p8*!rEwC1u32$#)r&ka%i_g&M-k4#Z4PvL*YHEsEw7*#^$Jh&Rp= z1eo2(HfB1Q?hyG#AtR6#Yrwf9<}~D7z3XJQ3OXUo!sNxmj;8j+-TJZ}Xd&_>N52q= zXN#2r#bc|jBa#SMMd0b88|vNkPn1aNdhAELa7{T2PMeaEkr~Y`m7Qg$O#^hoa1CfN`10;qgiLK zFEEtEXeqjZR6V&tx|h28(XzVDI#jg82GT{;Ix>-CrZxN5q1CwhQX=_>rYb~Q)Lw3?N z+;8X62aX><{@)qoO>KU-cKZ17zg4H)b=S}S_%4dxk+*<<4g*1CD~q&-EQ<8i5e1c_ zo>gh&zRZU2;@3-QTB3BRL=R`1#77eFt^sCDWQJ)0W32`2_yd@AE`d?V>@KruP#6w^ z*7b2i@NqZlv;vV{*bo>_`qybW{nCAT8D9WFdmV~fe<;(wm{TV zS~-HS;h~aLxG9i*O?IO1a&5(43sijmDEB|L;gF8n!cHa*^Ur2{>lW z6%zR9&g}S(aVD6~E#S+VAgwT$&)NINWxgqej4$CUU0PW!Nj=+!NQgSV=N_g?t}*)~ ziX!~>rIoqefxRG4;XMhT%N}>FXr=!&0dD(XG|UV^oH7qJyccfNt$?Lq05#Z&MiOQ! zF+LrRjl~jDQYvbv!$7@JB8Zd_^Q$gZ`$m=sv88qFkCl~d zVJy75%FO3--DAZTQ&g?xYVFhmQL*VzU-Y1U3=9LhXU|B$PK$OB6n^RZTO=2LQ9fIrTtXoO<{c=?2Chg%Gsc zb3-NK%i1m2mb1HL-|{?+WW8xd&3bTJ5M) zVlfJf>z%3tO0IN;XDzWKbftVXa#UV$0PkhrWA8v9{^kbg4Q=AT#Ueu}wRNd3f!V=3 zN=f$sPh?IXxkTEJic)X`Z*Hk(BNvxufn&&-`Ttpa^XSO#>%Q~7SNnph!rJI=pt~Bq zfz2k_BtP`9u?Sp_-zo)sCdlT4>X@Ov%S~ z>@%{)_QVoA=QvT~MUgC1X_1r!^+pg~017~%_GLcb-+QkXpa3-Kylzyz+JEo&yZ3wV z@2;p>>Qw^9awTlUaeM`xMx6($YtZbVlIr)xLO!H02=^b)`(txS$5rk%S{;Gp!;mrV zWJ+;R;lT;24y)=6fvJ2D39YzFiyu~rf(FstG|NOo6`b2`k}?=0Ng9pZ7zurC-sXN< z%thvKlJ?osF3?>mGVo+rBVi_32$fSnR)SJ3ug;T`ND-0FBxoUeFVdx%(Xc^LEQPHyC68zcdQc2I|qMf1e(FxN+_DoWB`W5Vo;47$g;VaF{Pk&W++} zXFEtFONA6o#k5^U zC2;R~qW>YqGF6up;m;Pyy-yE5Y*o`tTod_@H`={V4?b+}(4t6d!DRFh7qSS`yAyf{ zqaB*1Xjb7&^dBme2SdtH#4FTj;;N#FRVZxNJK-i-be5AlL3kEJii9OOVX6-8z0g;= zt11bq{qRHXQj3d?p1`drzqb|xXJ(C(4`Hg%D1l}808%0ph?pi0GdId)B$h~%BPt{3 zrx9pPgd74jTN(x`2Bo9)bHN-t4AifPd6BBz-eZ^qt=*AVr;>EEZBTU=jej?KNb z^kHdii-e!G7Q1Ixmp;gM?|O34@}w>K&P3I?bs_#9IPwl~<0rGu(dix&^zpuEa(WNP zi`&KN;`8x-J{OORzX`G#!rjodzVFx&UKS6FcaII>Tyd;8_1Mwg5c~Nw$#)(d%AG}V z< zU{SB3-Kkx)E5a4kp2{9bvwAT*ltS4%8OjtzW{1+FPluvE*A}N-)AvFxiobd<)FQ9w zqH;|!c^JGBR{7Xv&bYcR_v#(4{_l<(llsPPkLv*(wvl z9hpZ^nAay_L5e1K&tYkz{ptkVY-|&%7tf5%pXb;0w2pZDQjr09zQ5$jgb6%rE+Dc0C3pXlOzKjtGGaF}l+ z9CG1kT4WnIch*}_Go?NNx?CY(Gb7;cENP-j7!6TID^BD+?HL<21rh+iq_h##1su1V zXL;VdSZ)Hfy>kL>$$X$}1L)YORxaFQ7E&uI(CrF+vtiRudY7!Vo>ko|lDJ953%1I| zC>|9QkzhQ-o?>()oQp-Q(smL1M7whoWk4?z&jK_OROUT$T5XJK#jO@`vV5COhPH|Q z`eSsf{|_qvO{o0eL*-w!g4Tb=;{3z{(g4sgl+LYuFTKMMpdNZWz?uI>ce;3DVXIs$ z&~kBegViSUy}DCn{$dG+-Xhm-yUM<+Ss!KVpLC+h)C9Q=bUlctA) zW}>4=+)kRHwiafZiptWF_=>WoH(BKk%0l{Y4K^wpg^fxhh#|vE2{(gt*_Chh4sWEw z8gGrgi|D@omZ|XUxzS{D^f;NOr;gtD$o6(=qquE{MknL((W&WU#1N0HzF4f^Y16gp z+qagNZ*5@Jzw%e9ma7 zRbRewyM!O4NnoI2TAW~#l9W`rl{^0XqV#2@KQBL`y?l>o{FyfQ{&Z_7-V^S7&E>s0I1wy`qU6H_j#6-IoS2zJ zB1EMUI$w+zij836=*&d1(o8lB^>xY;M(8m`@F#6zD80IXQ*|R6lTQ$9FGDZo&i2Ghmxkd}K-ZKq#m2E7NJhz}s9siZ?CwK)hZiL2!i0BAoc;6}aLslpjiBcKF`$=BlBb1Ve(Fr5JKoL|b!3d6jK4N+F)ha-&Jfn9?@E-}QQeP~P$MDe8byh(AFP zS#pBFQEE3Ls)*c5DDNo2pn~}Yy#dGZcsdaY^xlxltggOt<9qU5-gsq|CMltIb9=M6 zy}6Cog9C+;GMZQg$Ft+(DL&dMZ)_IJ{a-+=6@URcQA0_Uye8QBy&ZH?zWQa*>FuCX zik)AIonMNbUy7ZdB2|^Io?_>hqLN%F1(qUPpLi=>INo7@;uB9;UkE*&PXEh)d5x%1 zLv}&!*Q}IBZ5;f&Yow)wy&erDI>RLS-pCHD! z?~6RDcE4{rvJuTTHmaS<^6J*DSHFL|9hsH&YUkDI^+v`?k72`;~VSs z_2uQ!O!w=E>=*CYnbmgj<>ppuB9Kkaj*r}I1v5$dL0XlSty0$7{QmbUvC!b<^hObw zN}U?B!r9s?5#yy!BOWfVH_5t)Peof>Er6ySC3X>Ai0#~t2*>HE% zwyR_wg`uTTZFDq|*a%?{EtN<)zjdorIvyhQZ)~ii+RHlJ`Sb@sqIIyNU<^vclpA$g zQ`TFZC?1{3MkhdS89O*~weSYU6LGS-70WyLE&3w;O|@c8QoU&ymq|oMXvEdp!eALn zPQ?P%4s>26IXY0;s%&gEVk)3ORerYCq(+6q7#Rp+=ctE5su$_$bC06WsVdw&wDgD- zGI`2W^s$a={UL81ed~|^Igvjq8kjKNp*|WQy$5&hQ7!iJGCug#)veWm)y^N)axW9C z$6lr08CdUpGGQ*+TkC|@+F#~`mf2rnhlN}mH@{t?C569`c=+;1w3b98a0Jtd-eQ)X z9M|ltau5d^gFF3s$T)vg3*f$hZN^`LrrO@;k7}~XSkgiHI45c5i%V!CLP>4CCSDipM5U1SOKQxoyX&Zfq` zxkD~xB%*Xia+dN_%gZ;e-`H+B$(dOMuGui^h8ODf*o5M8Ct~&b^2R!VsUuJByr{?3 zMx+g-rl%E2L>r*`3Vx&@wE;&qFjo{dMl#drnYq~UBa?|hYv<0Zw?29$P*@v{=SSkB zYwC^!#OcVxEHsE$L@wHQJZ?Y9FXX3a38@HH1+#()triAqj&Od;q)~+_Ah)%JtkrPL zn0SGPU}fO9Sf+>)Idqh!gT+Xex}pq^80hvS=%yXUXD!S6C(N8;wnum+2D1Gu$o2t{ zEe5j1=?=^#(Ge2`~{-1`PkOCD0QWaMCwv!ba*m?C)l~{?H#=j=^klSEtDrzPVu^?pT1b@aH7r`; z^MaugTueF8NHX3iS(}A=y;4GVk;_mru|xim<18enkDa?%e&Wa9`ObI#_!EEeB1g6Q z(zn0$t^fQ7)MESMAN?6|+EkPZXHUQ3kAC+HU--iB{?VVIj{Vsam+!r2e*T_&FFz6g z@pruA9Y205UcPwlWPU*_R4mTVPevQ;M-=3}%-dgl@s(F<(Mde2(<9ca-}z25IX$1v z;(g=21T$$@B)mbJj+@89AbJ+{E5>t9dGpfymE&42)8=Ozp;7y}6Kb+Y&;m4HwIb6; zClDeL@8S5R&GJ=vMaNUr#^hL3o9O7rPU_u#pHwW7|4=P3Mz1b?lsU7PKIF7xp`{Pe z6=*cD^g$@)`t?F<>4WFb8CuY~z`9x#A*)#@wyPMG^^mgf_Br}*R%pjgP3bnJj;K$D zyQNVlBPN0|zD_q5go`>7&8xHrR<>$lszfS%Rzi|@-Timc^IEik%~PHzhTzFu%kIO)2^v^mqRD> zKmJabsQQx2KjNO3#XE4$@4`2KCa!^LV3{AEpNB(W4wpCP=fxQCMOH;#sa^m_7>3}K zoF9U>%r8>;SD>VEn6U(}MB?R*ir8XtBsxKSj`%_BP{@&1XDEMhq@Y&{RhQtazS-vh zD$X8Czu7}6ckUGCjo!ixrPx!4)9IVoq@B*1e};;$e9o<#zvmP(>ezkLo_ z`k|hFYyE+>vS|I=Py7M33>NwO1g?ZGkNZoi?W~z2t5?bt5x>ZCc3PAGq%sleU!DC`Gs1I9bH|h=e}-}U zat}eP29^$=60J_Elsa3z1i9hW=HjKM>G`lzYetJH_B_!v$unu?*i`LmoP8TbmsEXe6A7^y zD_7&i{DStH5o~p5&P-3QuB@oo^c`zuMcXT{nGaErNqrfcFN|Jveq}=yv1+&`Bym!G z&%i*XtH9f0fT*=dE(4a0w35l43Y9hK^h>zjCFYDvjKmw8gwJ%W7R`=Qp%#Y0LbIUagVCB<^#^-j=e}qi!(DmN zTIKHLMeF5HoI>{}q=cEHI}z1M*$=3GAQ3zYqG6963|yUe1k*|^*Fh3J2R0#e4ABYN zmkv2)I{69kzO9K+=|qSbxkcTt++`j}Eihht)DnFe7wExc3QX{xAU3LV z^}dVZ2T`TRHaZ0zjg`wKTJ}5e4|$>-7cmZm$=oN_f^Z3?zoU|n+)I?Gqf}_Pg6iF3 z7gQN*7UM387r%$YvsJfsX1<7vXJ?#CGH8B^k8C78IWMQe&X9!0oIE?UV? zxbo_sgAz}I5+6ZcQOLsj2u$$PpaLzO4&{E$u3fCZDOR2t86J*uEdcxaSUF+BAYT(>jcw_#w+NGW7?Msn5eLe+;*L6K?qr zXm|HvGg4(}btC*ic2*zCnwp`UCy1+LXZ797;E{JB!DOqf{6qVQ{4_Q?oNsCB`oXp0;xrovI_@hU$*BFN*Oz5sXmx zNwG!<3(Cgo2-D46r%xQoHFb*&0%qc4aw>=9bhU|j_)DunA!ZQ^1{ z$U0sdQBr{23g<>BezJqFlF}B`Y@JxVFRTVG7FQZVJ!nNsEkenyMgd)hWY|K3)E*9p zNJP6)Xf&37p5jIBp;2`Rx@3CVed(qa+s$sikD=wfnfE9c5P#0ql#gbgEmo8ekhk%a%$3_^aedqC#lvMsW~Z1ubcOzQd3iC z_nZ0qE_PSNtcKZ{h_~73K-?reFbm2}&};-pE@EUOI|T*0!Bg1vQEr$<2FEs=cuWE> zH31Q1MUcMFH8cyy&YkH{^obL=h}wQQ7#j69MIG_osO}a12r)|A6ra`4=+I!avDe}K zx|AAIJKY_eUU32=51VdJSjq{HByy677c?>E6u+9q0JY`TrI0oQ|DkZQoPpNEC_~a^ zSZIoy*wSvOePnbS#z;@4AVvZ$90o=XM$L~gmsCX|f!b-KY?rxsG&Dj{aG|ORxLHp< zp@f=dDQeZEKI=U-Du64;pVdf6cVtJ&w!dD_r4)OKI!FMDbVPlF@&hcZk@j#HQUi(er{u{M7~?o!->$N3 zbbSMn>BA{RZf=#D`6xIX)U360r%c4UuviC7B0#P)cnAv=PXNtVMS#>0ism0RFzVxI zm4!FqL`*ap-!7h}s5vb}Z3z`Ixq+pGb2<4jU=mZDi=c!`f}!E7S=TJ7_MpO1eS|-) zfFM-$@ACq@s1JCw9v0+roq(c0dH zyBXEzGAK8enwrc5ON$sw4KC$IO9q)B1j3{YIt3Re+0qzToEK1u)o3q{8DuhhD}zW0CpL=8aS&G;IR-(V-k%w0p|#&vui9NWu- zjhtK~5Mc9Bw`H2gMRF0!$gMHB%%r^t>>-At8yz++STINkRK1g@ssb%VJYFIq8E$G_ z&5CAaB_@}I)e%qeF$1e&C(yy|UL`H(-=XDv9W7@WE$1)#w4AqjT8=WueuF(iSIc?k zFfHeqL$n;yE_P3^3vUY863PtMasWJMAort3~!M;!U@uuu$mx& zkP%|9XYu;}5U9%zwtG2T<=jqbUj5_76?{}nYJ zryNjBCJ6vUZfes@ZK~XK6jn~6l$remI0367>A(#d&mjglLFA1HNVsSuo&vyfZ+{!t z(>=_FPS$s(v$s8|yU$F>O@v66TgI`y49cS_}WEInBy<1UU*vQ|w- z2nMy9>U`D=?a_xGd@cHrRoj7)m!8>2C;H4Vo#;~#3wKR??s+0qAj`MkM3mlP{@OR)|gpC9GGMN0MJK~ z0^NO8itxvMF+SWBo(tiXPWYDBs5?0X$dKCA)1cyDv9>h=W0N_1ADL-7z+@McO(S-} zGJkYbVCPBwM+3`PotyirQb$6l1tw%?K$Wsd^mOb#h3YN+m?^|Gf3E9M&~`rugr zI$bg5BIot*-oBN;B#0x{$OXC1wt+b=2wmDhol>Q!No4R2unRRua*1s^E(qnsJ-=DARH8HZUY@Oeqom-@VQgc&)#oWH- zH7Z=NqRr+C_VUy&;voq}ciEE41dZH%Ci`E-d0h*%n|3Y^)t;-ZAPuwhTrHRBxcb*L z`qxjxA3uTqrEc#33jK>J*Zd{)8a2s^Cn--IkA+L^Of)zWjwNtv#KP?A9OvW-eWSiKWVn^$7V_Pj-Lm=B z6IF~nbW>`pyoW;}l`>x#CKryhtRz8WCuodK8Y~XkRMe?gf+#6Thhl8icD39Lw(aA` z^u7E7zot7%sPKehh5_tj)NOWXm|Z0>Vx6*Y8B0bO!iH(Z;ml{K)Q~+vXN2rL&i47U zR&+i)e`!7&&A8#g`daO8wG#VG6|B}?oFlL(F_s#+;SY0hyBQ7AN>ypRvea zU>6qRIX0w}3aj%R{Q=k%C3tRSCFf9>jpsIVIODIc^4ys-G&(wd=C@AISx_Z@PO*)- z4lR8Dit}&|?>2E#DijUsk>A*%|8>v_6Ca6W$A^Hdo2x2q)0hXWMjh!#gbJ!%yUv*+ z5@j!&J0%yOsEeN%K4s1+3=aYsOw1Nq1A_`%^!ctC1r)a6v!@6`CxNS7L!A&e5p+qU zzDoG=0X{)*%g>GwT$vcEIQdg> z&riTDe?RLeDWS^@Vt`#UW7uHYWrHDHFx$rfL+GD|CY#+T1AvZTZR4DvjQ25=@(N91} zPYpp~MNz3Uz)%$aVi$$KNIX-I@P_e;*2Z0EA@SV)NZbYt4H};hw#)0K;?@em)+Ko_ z>nmG0kZj^1+3&ULDLnAF-^*ndet;|o5m_PtSui(9o`a}tm6}nIc@F%gnm!d}>7&%F zg%Jg*V7Y@#pmi5TippUtaPq_;x%SXms{~Y>7$Dm|gpT4H1Eo)7qZDVDrqpVYJfi98 z>}=J_P7|$e68x;FT7(Uf@d49m(E3~-Jr6@`D-o;-vF}A+mZx`hb!XC^#1_1|hRj*3 zr|d?pvsR(-sN#4Dw_Hu7+FjIUkv-J@Vi&b}&O>dU^H7`TJk;hn54CyDL+vk~KR3WJ zT+?or(PhI#=LR@u2yzQLLGN>fEYRGUNVhnlOQ`-NzDEeYkVjX6OaZjKCgu#1Qw~OO zmolBR101y%#S!66kUSA`h^lH5KI;Tp)GnZEP@6if6f2XfC>JK}CxqbWqB&FGp}9MK zLUW$;(EN)on*TM>+}DNP0~dO_5AifTrWyhQX2!%$Gy5XCxam|MBkjXSyOo*&WEThR zQfda!UEFhGkahNO&Tgfqi}JdxL8YdL^x~LfgX}WEE$4}+8)TJzCP}D&s*g*CpuU*o z+-?Thhd*{{AbZhY!y42;_DTSe@!S9n4=3TdQ+@Qi&-D#zAbX^NNH^X`w|mJpAhLC( z!m%MzVGP}T3f+7P-F(W6t(8=u5F3AZfStw?FnfPcD5lh;II#_gqEqgs0ij z`Wm`>1x8U8U5Vw5%yz+Wy3+Iml4 zVF()9+_F_(9h40acb~eBKVU8!9h=&t!t|-^V^cxHL2l4+S99mbJhh!)Ix$Uyp#j+d zq5G;klHr8fWo4>cv^fheUt8v#(aZ>cN)oTG6eSnjYZ;>A3{I!6_e!uFFYMCf4b|^f z9!K*AjXeLEF6x6dOm`Kk~Pv_(wOhomp zDYL9+uV2pvrO|KdS@iicXRgA>TBSW2Ro`Xt24?eIS@A%-HLG1}J(k0BaXTE^qhak* z?QsxEHt6VT_(P~uub<6ODr`VLun4Z+#Z`0<<^ePJ_===!D7)kCy>_~!uD3bJoTI!yIRhkk~dEwm3}Bctu_$2`ZDt$mpW z$ljM(Xn#1INv5WYLz!c0AEq$O&E<1&<8Ep9tlkxe6w<}xyOF=22j=XNLrGt}eIRw7 zAPw;#syq?552QwE`v+0sYz8lE-yU-p_01NW2T`4i>!-l=e}kU!B-;MZSr+FZx|YVR zX>ffST%QKlKVZ4hveV%DG`Rj{>zhB?{`K~kIQ^XcKl1NQ_KEzLqrX_q-1%Ss@Hc+( z7xTFzvXcj$5mHH`*vtq@f&JE-C881nSR{$y3?(Us-p(E8RcuhaiW{GECY?6U-jQG6 zTW~Vdp^gbV70jzi`l*~6Hz&5>7ho$vYZsY5#t z2w8-pr@YK-&Mwedy7m2HqqEU2M~@MTl06d*&;zG@vz-oKZf#f zAknO*M(k~j8YEy;xgQB|Lyq1E;U8N(3^g{kx1w!TTpw>Yk6L(<71Q%4-;qJGycNk& zfsD#5i}qw7cY?4a90(Z&CsB(0m;awv3azajQck@iPkc;va(sGh^wd1L6SC<1&;#er zKlH>y58^$>XG|{;_7C&(XSk(g{aJ1~c=Fy0XC6L%`sB&*N%zR-&XG4wvg)xEB~+-X z(xg2GZBs{AsO=nz(R&=xJ55$(D|ehXQs|#oWy~OXr`6b!9m5>?1-=EVe6g)Ys2JM0y$Ch@C8TOdquZ`w2oBX~sh2{*tBp{T{u~fY+^Yuc!5tYDRG*lR?hms^j1+*?I`lH!U zytzeJ07ag2SEC1DojPvxr00gC6`&V;(`IUul;@&XQJbks(vGgwrelPruuO@x1jb0t zD|PzGIn?O)Vm{stV*DhC@qd6A?*=j64MO~5ycl=S_^}@2=T*`FwX=EtRQ6Dw&K}Ci z*+cpFuDCWiz_s}|ye=Mn4GbCUF=YM?uZ#U&12e>W%#eS>>mvR98$`mwXOD;t6_X@E ze>XW*2n?nL3e;R{-SP?g)~#FlH;9%=diAIo%5@|si1vnp$*)!e61USTkA2Ffe~9v& zl?kYRcs~oB{sZh-?`8)bL9#`VY!P17EhTJ>HzA2+!?tfd_g3eUbLqLIJS92cNqE`& zgB^`178AqbGhkL~EEDAdh&LkQ&)D?C&WEqV!1_pS`h0PZT1tW0lRcvMWZXH&$x2 z^Cne~c6rt}zjf`}x4voVT#0=v(cpHWrN8J3ju-D&gkd^#mHrPYcuf-+xOVM&nVx;9 zi%H_4a^vyYQ}Z`wGetrh3R~ro#OUNi!48%wu2rYbGS!jm<;6_-_U(y@da+J{cKsFW z&)LNytM#0nOq#ppW$u1KZmp~K{5Vxp%I?2_1G8Unlj`vJWakzX7;YK7==rG9;y>p3>Jk}Z$ z5o}i14Gm_o%_GLZJ!0onr-OBoRB>{P`KAs7Q;|7M9m4 zP^_m&htk{x8vcT==_)}_W)94`nU5>-JHG+MmPPmPzzP2gobWSPaPbT%>E5St-Sa64 zJss0~XdG9%q44QF^zBnOCXgYty^FHvhS2qHs-7D{(_KpTDBI&v4ViyEdUl5&$Q>I( z%RVK~45eeAim~JGpe(UefUWAXBOp-4l8dNr#2Iy|XuJeLooN0RA@v9Yn<-{?e= zB)0e#Rk+Rl7LjlY9#+_5v-74$8IwPj?mhaMh(a+hK8o+6bY}NamF^l(9nYrYM`ms< zuaW2932tqz-z1>x2-)~EW2yDA@xlh#dTXnzYjiOfA5Eo3r&g^;wjOnVg)O3Ps~1BPj9R`$QB8qo|AIel+Ych+|&~kO&>joivOxadh^^D}^5H z`>ayTSm$QgL1gABZSxOQh+kF+P5NdzbLmnA{<ycfGQP@ zH$TqOaHYb>U?dQUnRPPc4$X1+#Lt--EiVa1IA>KKmx5352dY)eDto2()Ov#0FSnwN z+KaRTL4=3dzBaVu)lY;P*5fsj90P@V-fEWTU5d#IJ9waPl)rj zU^U5^kh8ep>{I}JA`zJJt%|9JQ&Fl&DQSwxB+=j_v4E*_W40NV9@F9(^IB>onJ8b} z*;aqzEk)?nYV^FI3=eNX1X7TKhr|LS+IXp&*x5-uwLl`FDsieZ4@s4D9)*ZTsPuC; z=S+0qaXw4a=q<`b7K@u(M0bnS;9b?BFc~MPX%e`D=W6uZY~};bdl0;|N9Y8y+2!Q` z1xLb0cKuys*Ylu?>XiP^pvrH9BI{X)WC4BsAZO~=cIj>In*tYK6HHuuO&IaUM_wO5 zJo5U`;gQz|4X9>!feRie7zsJHA1Iu@8$_6$IT#L%5cRQOUlHm7!Jr5QkzX%&Kl-{^ z`_b3U*Z(b4& zN#-tx%h5U|_xYopCU4zr#(~Frc}M3}Byha_=Er5);qb<32J4QPiy&ZYr0+#D-tJp@ z;qjX)lJe4b*0%%7sA|@C*4D_(xO01ZW4*evwH^&#zj?bH7+30BCNVuuyOr?R>9dqm z$sR90&PHr)yJ=biY_Adi$irpbleSX4ediAHjNX@Y!3=E^Cr(M9nYsD-xtVdhSt{Kj z*HW|Qj@s-5%p~?^Su^Xs%%-P%I#D$dl5{B~#n;MEv7#1h2Xc{0(Iy8jmRUsJ*rXj* ztBZ&p+q}QVS8tsKF*s|1-^y(Q9&qn|W7dav~;icF0P zmKc92?aa9vBV(Y&W*%w=$os&!(4lCV-W+wPwMl1X&e~1e?}?>R=+KzW;Isq|HuQk` zGjpz&#HMEWBACZgs&_XYi(ndMtP}yDR~N-pW07Ezd$Yf8w$rIlr=j|;rA8?dZdKOF zci4_Th6w})%O9so550}Y*xL_6+a`*6maQ$y$Oi+w0F zGZbWoK#ah~K+Ho!5$0fgx%|d`;pJd(vHP$k)rTzyBTKFyS&sO~vOlgk;EKtJH!Hgr zEzAt=gB6eL3l#?f#UuOT#DOT`_f8xJ5(h)X<$V$25PZ12FFYIq4z8{uTk%h#tH=xb ze}V!(0}6~_p^)uDw&Do?K57N6e~zv)f~^?ag=Z^%e(C8`u3dGwtyr`iaI$-BX^H`N zt!awIsz$SMa$2Ls)zzZ8r?M!;=G8%oKcZOTR$VSkV{mW*X+OKMcq`ys7-D1FYda>3 zBOb1g)3v!=$DTcw3hPWIcftruG!S|g;;_{{v6gfi51&2bTgLi0SlH()WA63l=7!kb zdUj+*a1}FWrYUZfiM~V!@bA8)+HV=MHSp^v8sGP;K}>B{=VREGSzR7{0`oFw&)Lh%=5BtTyMD_uN%A=2 z@6xgySClse(~W)k6#ahKfAa;jXH}UCB( zk(+V4ch)J5c7RZ*M(3-g0%a21zcE_B5CphYHTO&r#%vk1`HMPN7E~-DW~t?$O`S)~ zqxDTpY>hDPCMO+kq5D$;gR(MZRb?ts!kW_4t_n@{2#z`9S;VOX`TJ$ROkFfsl9%mz zI83eWFu5P&$1=yp$$;ALe0>X-?)rLhtL;~HZTruxE69b)3bGlKQMwqV*_n45aZlUr zJa!!xSR7=Kq3_;I>mJtX%AJ67grqzZ$v`86L^K3s5hhgKp{4L)PR&P)H@|mn`P%nh z-F-il7kdIKQ@mipyXC^;kRi1OV#@GqT2v;IBZ72x^xwT+t}n6=mbcUCEM5rX?mU0q zxQsA36t-}C7SubHZBJUC8A*>$PEL+u%P!>4$zd7BDjJr6+2=f1uIGdFOu$!4VIofQ z=j!F4ahHu zEetbqqVw(}&4pG`3u*3HOKOplQibtXE!=`(V!o(yD)Hh=&Is>x{jn-b13kO0SUX2M z$j32i$AZ0^N)>amDjrEG30bO3>Fv;kz&v>WhmJLw*x97g9Cvv z&<4|cEA5=|4daBRi$W7OEZ$;5(sW^+Q*y_4g|8&B@yhafZQU)oBJvAVu4t6EtJ_q9 zRuzk(=hT=t3mCEa2@d*O_|MRnyqRNM@;)Q77L`5doto-3ax}A2zPvRnW#lbqM&AA` z==F!7*RO(JzYBW(8uIr41+5fByBnLdRy;c>e9!GgrlCUkoR3MmcX3IXl3ir-ap|?9 z68%hfq0%u>X+K2zZ-Yj`JxHX*ujU_lgCSnX_wG>0mG6Q55$GUS^c!}gj{kTl`uLi_ z>qMTpKIGXCbzU#xoaiD>4`KSzCjZ7q_Ja^ZkbMB+;)V|&=k@`QYLntdxXL`}*aaMq z^Z>)0^`S;TX6#0czdBx!Na-o+yRqWxe-oJ43lShjAm~OtNs|#4JcI6i6)gA=x_6ZQ zs%oH1lhJ;bge_A8-H&=&dfI3*`K6C3HpxAJ@IEER?BsntR(krCvs7H=t7@S}FAfTQ zMxju?x{lE%dd_>B)d=+>q6i=0FhDVkV<7DqqVlV!OQXmw*1%ul?oMzWV3C|FywrDz?oEsPY3*qASrA zza}R?=KZKQByDfH!{~b0ohz}FwT1U(3qN^ZgcV!jQ}gT#`omOkY7|n_@n&3qBy;w~ zT8)>3Wy|Of-C(O?on(Y!5i;SP5K(i#yv+SCDdOsRBCa^Ua*^U<7JmwX-6!yhcM}^+ z^wqF9m#EnpO9Mcvx?iPMwN#NA8iZv+ViburEcPX#kSv8^>3^R3>D|?Ibre=jAz6YY z?)V3>af?0&eO*AMhGQxb1XDLSi>NHZvj+AVL?8r?d+)V~vF(Lvxq(`}P#G#!QJc2& zOCss#k@#ln%(=}q?3_OY_r3@2{lDPe4 zf+gJmW&NB{<_=@WEBC$@R=oI{*l-Y%G$Q^DW5IpdFFC+|=kAjAOhFdSK$pqPgTY^R zxo#hhQ*_HNh8xao1i9>DHtVm*B95YlzSq7U$dL z7(s)6cz|a6E_>|8`l~no?5o3sRnJyi%$)o7fBDb<<@dilR8aLt{$9ApBNPKk9?fVT zd?Ce8`(o-!C{nYc#CP>Vfcphh&u%+Wh);}ks>rjU!l^G7_<0ix{Pgo?`^uemuTOtU zlIdv^3;gsItF?G8c$i3%;29>C{D5FYQZQ&8CXDtE3l6ygDQ{Lu^x=_4kE7gYST~QY!H9!L~nv1=hV+h!rBF@D%r-yOPZhi0kejKw~ z&Fjk5q1@tK-cU{%lq+)waEY(Z$(Lb{K@LHoHc$BMF@!mW$dbK$F-(p?^K*yN{4jb) zfc(JS(fTmO%SaA0wOUqh{dy#>Rb{cc4T!u?>?Q934QpyRY4;Q>KL%O*9Cd&Cf@Kqn zY~jo6#UN|{mdsoCo20(5Z*ZiZ#xS1~FwQ0F=I1Y7kfohc6gsAIvb3vC5PiFEdO+A!v#> z(YD%6mBS?q*{PEJ7F}qet5U+08cHe)goO)(5FqC4lqj3LO*`2@fRkj!i(J~BtDZP!H;3lA z96L%S;cRh&qzPV6(Xz-Q8;ndpy)EC3(>9ak&dTuV;x)bOJfL`>SC%&w^Ak^wPOe03 zwl~WZsUk$?cB6f#-MGDa^Y+cv>#ttte>D1l&o>f1FI>B(h$ePKB%QELT4^;_UihY} zW3Cpzx3Y0#b#o2!W_)w51tMPadTXof9m*5-d&!Q>QP!{PJze zDbq_lhUJ(xCVrZURn8IDbDO-AGA?^^QtV_TXV*%LcD?wlW&bvE2jVejlp|jHQ;gNma)~M;oVB z2xp;_8*O8=4b(uQddI(FN&`cCf_|jZBv_?j9=4G#Kne(k5DSx$eg&-bLB#hQ$0TQd3Z0s-rLWmE|2>B zyO&o_Wf_Odp@R!!Sc0*I0$HCsJ>K-0w#TDa;7mHZ-G(ny+Cg<0*5l6y?$>3yIPS8S zS?qoebgxrCs<$S^T!yy{XPtB%0Da82i_^x$TZXkf#_I81nlkDGOg8QE5;>4AFZJ;e zGXejR?ze~khOt*ZyPJgu*{92F{fx)uEv9#~)m7vBly~zd;Gp-R_5Bk#NO_WqeNmpI z@^%#a@*#Ft>Wm}bX9St~Id6CMl<&{iR>$38X(pj8?{GYSel$)D>abkN6J9Ra%0AhW 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%0AjDmy~<7V5DE$W}s-p*H}92o0^Q92`4W#g8m zB}L#(8G{O~7w6})%cKzT|JwJy`|{b-bF(wIZzA}!%MY3o`o*gGBr)VADjJmPr85^V z&Ywx1x%cA5`_7d9lH-LJZod5TO;njeuvhNc%#t@z-8J|0I1_YYX7Ii>klMCOYm*7x zv*>GU*H>Qr%lZ4W$839RZE_O3gnhF(c5;nlG8fn`OvLknIE@c;vxSL5?ar-j{gv0t z>uvtZ<>h#MnUto|s-C3{L?tFwR#tx0hE ze4ciPXmq?rZDqIkCH~)cE^n>_J~pI?oohrVneYKof@;GxHnA3 zYvwsclj%&LWmGQ>EXPU^bVwA5doMwaMotGtl=x7c{wJQQ?zE}@9l-8WYz1Qa3IwzX zD&tqo{V^p|gu=S%*ewR$vazLL97WmJ64<}Y#M|~&WDrvwabshiWN-d&d3_N?QMa;> zf*>EW9E*zOo_)xNSFJ#o|2XeEF8C0!A3l_O_;A68hP%Lp1;f>1>oNHH)EGrxsVS$p zAhpQuJ7@b%R3-~;SR5l6Wzt4dl-wQ(x{RJ@Uk#Iw!sXdf@%i$8`AFTeg%tMi(hgmw z_xV1L?$qV^-sB8t_Ah|l30@(JSoH#{ zI0rnwx=I-oc#7D@VzFx2iUMk~FfQu*+_NlJHh4;3L_rAe%w;f-!`zMu_adJanQ|>_ z)2rCBz6du>oX#d)#%|Qg z@xS&X^hk#x7_EyK$Z{RN7&I8!#l?X~E`i|(khJlF7F^-|>dH#%&#&!-M^nD^?h5$% zS!ZW;{LGp0R-w@9X#z8;P^7W8QEe~O!?QDqwlBzurAnWi?MZT9;NMP8HDc|V#Lmr| zJBgXDR*;#T3C)J<+qahKUBnt_{#|az@ill|dso1{N^>=jBY-$uK|ek|nXPYquTRhu zHJAx>8hFGMd+X!IX1N+oCF9Y@qv!~A%MU-(rSsWPgunOoV~CoZgMb{g~uE$Nx{-n}A1_U3H%Cz1UZUq>vPn zGL@0aO{rWeYjsv-m9xq&o6TU;4PVm(c<3I!wukRyn!&&a3_YEp$jZv1T*fv_8DksD z#n_nP8~hn)Xv0`Fz%)6=n8Y?!a#oS4%2i893dO$1{La1a#iAvv%Kbv|;>C+ly!-Aw z=YP&U_bj3W?3suUtog;4TNHsS-@3kpxbb3q!Wp*@Ydo=$wR=w8cQ_MYFM0;FQc&3- zSyF+DOQIME$}laD#YX}IBLg-91%h#@^2IE^Vfda7WHPI(t3?sr&p}4**8Ioj|BI1( z8n@PPIAWo9=ALt{E`9s5ut>8u|8c|nbbz>aQbEzpzUN%U+>I;hvpS!>BSg56&YXQ@vbwlnn_ma=UtT4fK~5UbEFQ^#w5l+nNfV zIjp(SXrD)#L~|V?w8u?OI=92Cv{~A#PoaaD)+Fb^Gq)ACCPuu3PC0m}6cN%38SPB2 z?G2UItzbu8$x#wI7%<11IhR&6@Xy@L^(Y#)7GgzeMOVYjd80K)U#S$y+vW1bjD=@d znF!Qw-n@DBIoJ9|z97TXHW{9^rvn(YZ{1l#joW;V1)uS0`ONape_UAxJ_53S3O(gn zko75BPx%CTik3^Afw6~3A)m%dhnUsB$zDvvID2 zgbqGNhKA3|q@q_nu@p4QQTABYPF9iKe2|n4p@tkf6*c-%jgV96R-tgTzn9E5-)cpstK@{q zH5GJYk3>{E`pX%IA#*ixn}~X`5TiSF)t(B=Op1+BXL?i}>Myw?cCM2NTetZNx{a*j zrQyI~bemz@>vkC3<}2tnUq!c(Tqnb#+ZdOgewWg1M87#_Tzb)b-}|tE&d;IBkex#F zD0TPfRM8arHw|0L25Krx1$(!tR2gNCD2GNcK#chMnAYKKaWDo}%yyGL3;8R>3aU&? z^KGLP6f1<)augY1Ux&*Be%}yD_IwnDkH!bR-og0WA0tLZ0W2+a0r|SQicW+aRI7z? z9OjYRk_IcX@>q|FbZ~4FzPg2wu$nSC5hVu2MgYUnWA=rpIJs|hbbM+s9JK-iduH}L zhV{Rzhn`Xs3L$KJMWN8lHyZioM#C&DGD9RsI)dNsY5G`}ns}(Lc3R6F z*fPx?0J$g5$ddIVqOE9CMa6$gtP`h_j%8wI#({@pr9#8qER>F&z$|}4GSD8FX;vP= z1Yz_4QpK;#6z+^|q9`2ffQ360Ut29S8pYM2cvwo(#fsU`u~}(!&nCUDNCZrf4|-{1 zR#cOMd|6vAM%LoFwK&QOn}Zt|=T&|jBCrd#rm+{hMLdJ0VntR8)*aB`Sbf(BKJ5`x zMJD*78I3BUMIn)e7gp_GG(8@DYUXK=%p9^aFPgEKK6T`256cQOGe=%Dj~r2_&c5Bb z9r{)%NNdKbzwJ(^tzzZi=HxSZXSoUAvK_LHD+R+gZ?Mz=36+|?fa3s@iF`EAhe>3_ zf4Ir&hWpyvu~&3d2TO{2u$*A_z>fn{EDjPpU1kLl1BonHHVJSlmEQ4$(7&`?T7|Ah zLsbiB)FQ*hq*&oS^+zduWnBkxh6!a*wHP#SF4Ucc3t#qJ6g0`qqS5D)V zx@~(WT_X3#IMD&pFTFO^Q(CRaImS_2s~FLM zQ3rtpk!-Z-1t4cmB>-icox4;bv_aQ_F^Zj4lcZ$|d7u?(wO;{W^g}T6!z`)TCk9T<+Ue^rV$JkcN^1|E_ zRO_~c{nZ-DJJD05{`Mck!7@|$eK=UER?ecQ%wmI?MNg3m@-L#N%%Z2vqNiMVq8)3; z=09S5=E?Riw|}wy^YXC%U*pV^q^p<5MdO0;@6+?oKi>WcccBp-{egEFzb6m(_m4yx z1P;K20s>;sQJdgjbM?>sVj&!LB>4^8i%*5@95 z?9qoGz2`LEswNvF~lcQw3^?J#AJ31U{lmF%j_!}D@9#1C6he^HQT^wd2 z;`ElZMY@blUf}^6Db1Iidf%!6xD<84?}3H=fBvSSor_5IoLS6Qs_W~@abYRpZ{-#iaxH(BfRawv^|r;0 zLot1(`cPWa=}h${+7`w`l-RPpF(d3Z+NpiP2nk@wgXuL!Om{Fg+^$(e69xtjd=KLB z0nd44TaZlp?riOLeD0W()>dUEO#i@$pD;llBVqF1jF=-MQSsa&Nkk|TiH;bd3;2G_ zzcBxY7tAYH=06f8i!82P9;42D5o-!`X+>B?aLfC8imr^LFPMo0-wY29(*J$~pA_;^ z7x-p079b}|9gT%(Vt*jUH%TA!k*L&qFELAWD+=_C zTKZ-{2u=uH5gu?kN+e+kui$E_hBcP@+~R|RFI;NC)2bW3n&gF3zTd`7p;#`}TQ0m` z-7Y-aBwGy|F-atC^0@p3DzN%--fMXz7FIT)4Z%uwie$7$u$*KL*%>F1D$-o@fwmcI z#@elz%HdCFwqf2N>ihQf>(_5AU%R=M%P%jj-`rT=$ZqJfuV24;efa_0k8rb;9A@rl zNc@n3*=(`g#QCmR##gr{et2sV(^Qi53S}&(%~<&YEu=3chlRACP)D|=j1MGD)&}0S zQnb`Vub(=_H}TS9YZw^&n94}6TZB8NNFhU756RkFVfH0n5${1KnFG;&3PigAqJ0Pi z`_D;>Wd7VTcj;h`9IKIVZeMl6K@g`0Z;YMcW&pJ5#hQ9*Xa}g7Ju1T>mlQ;i%kkI+ zTaE%PTY+U4FgXgAY(1&qjYx{$ z&bfu-YpHvB>sSlht0#;P=Z~1C(P4g@`$x_nI>?6(-K)+Px@HjineL$Q+%}FQ2%?YS z4hp|*=e8}(2CM5q<~lZ~N#E|oU^DPnA9wA_R5S2YA4l!VNZPA!2D$z7NOGwrBNfCNb;xQgJ+TCqe${m!y67gptW5lSuWpqwSPiCw6HdQ@7&|pTvYD50UkVL_)nw_;(P}s!h@*TQ=P_F(FCSH$814 zU?Ef|Xp&Bj6ZsuVqvRuVNx#@Ho!v@0i)kz~TZgGDyO zPtqfFFR=`yNhlhPvhc8JTuI@1PqYCEOVeU&iOC%riIh(t;o%t2{}T)vnUv4AE0iRa zrQF9>a*GR-tNWAj7fe-behj)$);*L$@on%}O`IEck*`L5?g*ks0lZct@o3mZ!lHw5 z1<|*J5aeoXT)3YOIiUgIc(uU1yi_hURuFwF)jXyVyge$_m6gryBKCNNg?P1jtG1&< z6B^xa#dT2)cg^v-!*MePsN4E8hg&q#SEO)YS? z^pTKmd2=PRQMg&)4^O#mg6mMi z@Gma#@EeK6g;y7s78aN=Zktn1@Asl>D{|C*tS)W$xqU^$lNzhzq+KUNC78C8P`YT8 zo^ob|UDE#prhE+NA28!nFNuVD$z*sraoibMxtM)HZeBWCce#C5Gsn4Ok}FN+c%a~+ z83@S4)*skKgdC@g3qiU3x!NVdAOc=VVj9>*h}ayeI+&e|y$ph~)!U7;Ifc>!lxxbZ z-db5Lmg*b1dOerj*e*B@$Lj0E!t&RO-MRDnjXSS@dtu?*+eOA7a4pp%r%v&r=1AX- zO!yUe=4arUe*@1v1&@3vX#v=~aRhy5^TYIR{LnLPn%<2YdL~WO2^GMW{;;V*jubD* z#Z>R;emSxmCv2TC9odZ!woaF{8FL3N;L2)KV&cHgJkUQ`IbB1)!j|K66cyZswzo}%W_PFTZ4)A3R5(e-QTDxb zt(%~!`rvL<-8UmTxEoFP&4v{AKbZ8BmDgo_(J*<%dTDr!qs)1ZGUqwToaZQr|3`+~ z_`mRbm;w8bV!ez;hP-f`;yRjYri|JXBq#iJV>czlC8(6e z2rU0pA@h35WdcfTb%LwBvBAi2q*RZ`&32qwa&CkF+#rxLoxE|20HRwrUcY+vDo^o_ zW)<@G%F?adfAf#G*H>?S^zrt8zE>htvFco3yteo+ul>twwb~--+jGTyWgi}&xIq<* zufCek7btp>$&pGLt7ZD^+FCYOK+Pnx=GwJew{9)3RayTg)Rt;5}rl(2eJ>1IX78mb)Yw_gC`yPDwvBw^J_`&;5rb7+o+uKkfTdAQ^ zL%K1)w3=PNu~A%lrBoPr-1ys+S*gs;vOpE~gshDvN*i9gv6g-1o3CNiy>{!i)Tmx6 zt0>RwgqLFNOdn*)p3-gveYpd%gnwuv5jQZ0Qb(?d2FtA+c|L>*a+juf6u#m4%nTl_u@d94;};aDwtwvz{PU4wif( z!KIDt=#!;VJdR3SZFz!`5wn%aq`a$lmY43_aivCF8`+z;ZdI$9<$M`^zntG#US8fv zlm86YGiFHze3nRe@szLC9>O>p52V8J_~s^alzJ|6=gytf(BVYA9(KFJktn${_w74y z52+b_6;iv$BLUBx%M*yi)1UA$HSiI(RXy(`4riE(Vy!QHf?TbPBB?f>^0JfJ2Iss- z_u_Nm`?2$U%GPd~oZNpz;>KoYpMu6>GJ*TTZv`89Pc?50<_h2bwX~!hz>c?8_`+`m zOzY)WzVVH3eDlhcr@VjrcYpu&%aE?V_xiPP0TojMT#vpmw!e)%8YWbCXYHakYd42kDqfxH!RwbUwVu zdZk1jctwUV6PILe>9gF1GE%eP*(!-wcgrJTBeO#D0RMBqVoA!S|ka&luVPY zslrWJLZ-dMw3Bd(+Z&9vYL>N`qhL+0xUoUi_+it}6gn~*TVB3%`z8#1^Y)!(NT5tU z!fVTG!Smi%UwxH2?YTevgfA>^-T{~EDQ}~a=QlPOmGaB4mx(z1{CS_)$H~sv;NNzWegyQ`5IDXo1ZKd#S;4-m|J|T>M9{9;+zxa7DCe{HMu$aj75_R`51LFHYX+sJ&iQdv;2=AfDl zYJzE3UV9nUfvYg_(e64*Z1*&xr!jzD++_$2Lb+hw;FG2JkYHPCSV5c1P{1a*R&H)A zyXu9_N(%e07eI+`4v>%**ixu9U}KgckQFf^f&gcCKmenuSik(Hc;4`(_wLH{L>7C! zsYBb@d`B)9A2)PSCI|A6P0f<*k>Ra6X?G3o3nxH@h`<5(3ls#O7#I}J?=b$R)aJCA z-s`na!1#nzQT&>u)UDPUtgSfOVd#b>+^m?HC6_zhcx~~Mmo-|6WBcFXydV!hT8`wb zmw4?zMtc`OdCBXj;ha(FDY$n4FbZ-28L`o*7u*>b|!%h}FuHRs-)V5*U<= zxhRp!^7IyX&zXWZK9)#~#YgoEDh|1L!~Ta)t4S$Mr6IC84YprpIC$_!Gj(faFZXr| zWvOjN!z>#T$lvG>NNcon*?hPZL70U|?Sec(1xt}sf&9^p(_T{0k{bkNEFAEMN>y1L zXMxXtZB)=pjEdyz-^i{@@!JjNW-a^yYWLlX7?G>9SFEJktol_olU6!?tiB@cyq84( zv4zVEvEiXuLS?>vyeyLt^ZW??azJal9xd2nX$&D%t%FDCE3bm{N@_G_2E z_O<`-(o2^vUs}Afa8;fQ|MkEA1>1tSePsPn0y75umoB~Z(&eS4%LF6o4x(K&&u*7` zk@YS+md)-u!%PnoY6U~GqCQ&5eEXZP-`O{QxS|bkq(tjsFAL-iBb*pX|nYYsqOcX5`$<;l;?(a-!NJg2?0YX@Sx5yA;$ws zg`?x%fx6>rp2lsEPt?55@}X3FebokGUp$+VA`L9`HcKep#4+g?l!O*k+)$C0v_rL6 z+AFXrL)?9+=JK9DHR?jTykQ&WIw(YDyGp_y1BZ2V{#J^QlrIMLgbknH+p2kLq@bub z@FyYVLyCYjlCoHjkY)nQ1Jx|>_i9sevrapO*2LhTUM)Ad{#l47UrW#*kR3_ZaEo`l z{=zUnjnb@p{pL+xl?<2M&M$%_9|1{z79{ySkb~T>q$d6jVB-F}KtyOah`9edfrkel z_>Q3AJAehK<$>=A5>B3YYjAMltwF(ww*~{)nuHi-yE_Ez%Km{a`|ry7!5-G9EFR>p zXkJKvD^u&X&>HzrzewZmzZ*Z35N$_xzWtxC*a#=ddz$p|xz@j<$q?_oVhdsuBx7^>TRK@f zUEWLIv&pxN`E$04@a(KNN`k=_i352KF~=Dq(F&RBa``$n<;j?VPD73_W?c>cY|I;r zlb@*~&)njT+iW)$bKsiWg_T9UV2+ef?E)IFTuC~-=ONeU!C$9Q(lq(zVbX#SFV-7N zepk_bGF!`L+&`dY$ea=^oVr*~@{n zLAT;Sa#6xKv{;@#^cqt66(yEul1Dp2`M~3+@u3ty%BX*tNV_Hf=|>-b{B-j4Y&QcV(ldL>^x8(r7?Q2i*~DZSe1TKOVzZ*?kAy;-F62aIs7L1DJ* zxYQP%75j}J`c`^tMPjT|$f)$$j4DP81CSU?Lj3S|=1bjU#R!TOgb5TkD0Yw|;fQo{ z-y5;RzBgipeQ(4D6XSgy+{Xg=5%iFMkGSb4{azV!_)y=^37Oej|8O1JLh?|&X9tQu z)KBfZ5j&m>vK|HHiXfa5TGpY?bfBZYnWDc{v0^!SuJCK~`BI1hY&>Y4IH{5Qk5OhM z*z-HxV@=eGs+F!TI0RU;nTou1ymZ9ylf~af#UY)^|8vl>lgS_a=h(+*ZsQM`2Zq$c zYdmeVnF)T-{NQ|Q{`X0ZPiJZH+28 zC3V8W4oGATn|x24H-yTh5Fg$hK2Nje_C~}_0h>Y4Dm@xB8cdq%4TECDBsB?#=>sfc z^1t#e{R(d5!YhtLwS24PoOQeHMCLNq^oi~t=S>&U73j!mX}NTtWkqqOY#Ux5=09b0 zo1^4tjh3bMh{Lzf?{TYIMCklYF4tfVL6RiH`%q0%MKO(V(`Kf6+?u>%vunXUl(1~o zON4tgRT(X>n}QZ(m%^MVrGa$=*h>e?PPIoAcDh?a4D>B@3E8?oo4s*kX{FR4Sp{9Y zw6wC3U&~+MZ2~K^3Rd16syw_CrZ}MC zyzUGsGFhP^vTX&Ft^%#7N_|J#%jTd7(pIC%evKxqH|z=~_wNcNcR>=ur_^=zu7^)| zhmlh@h~PZaha$UU$SE5^wnE760778W&ds_TcyyqHfZfp^=;#BEP%m)o02{*s8{0s` z-vJHm7h7Rq2lCsB0(}^82n>+B6ZX0b1f08XD*!l5?!4~6|B#z-KSn3b{0{LuZB(qG z39^SZ(89^0D2#tp82`=j{RzeO9j1Rno`)H=oms5OFQQ+368;ts;^*OSu`>s;Gc)hx z>Ekn9XG84FK~~c{`o&+(|1PDA={>olUJ%#@#=`sE&9oknRq#e(L!71ZgtoR^g+c=v zO}$q(aUmAfBIqU#*&TGpy*LsFTe%0O@X=>ID<*Ppibs+)x5UJRBp#F+==wD_YOx$Y zk@S|rMhw4NvXAY?^{jE&Teoo>iES|z^LWD%CczZ{3bS&@+$S{|40{nC9yek!SZTR= zR$A*d0+1@+@V(g@$|7dun&duR&!VZzD=I`GnF_#g z!dMTlchv-=>PrQy6rJ=LaWbOqq$2F?R}t0D7hyS(pvICr96@727X?c?>kv--U| zF}lOw&TBuP-*a+TE_Yu$`uXpC^zNXk3vjUo(Il9Bo$nKFIes*NHaI?R|%{$2L z@m{&z&&ikvxAJEn