From c1ef1e02b236a097ec3571387bc850773344db08 Mon Sep 17 00:00:00 2001 From: JarbasAI <33701864+JarbasAl@users.noreply.github.com> Date: Thu, 3 Mar 2022 15:14:07 +0000 Subject: [PATCH] remove/skillgui_patches (#18) * fix/skillgui_patches * remove gui sync patch hey, wont work in mycroft-core but will in ovos-core, they are the ones who want to keep the bug around * remove all gui monkey patching * remove all resource file monkey patching authored-by: jarbasai --- ovos_workshop/patches/base_skill.py | 11 - .../patches/settings_gui_generator.py | 91 ----- ovos_workshop/patches/skill_gui.py | 288 ---------------- ovos_workshop/res/text/en-us/and.word | 1 - .../res/text/en-us/behind_scenes.voc | 2 - ovos_workshop/res/text/en-us/cancel.voc | 3 - ovos_workshop/res/text/en-us/day.word | 1 - ovos_workshop/res/text/en-us/days.word | 1 - ovos_workshop/res/text/en-us/hour.word | 1 - ovos_workshop/res/text/en-us/hours.word | 1 - ovos_workshop/res/text/en-us/last.voc | 3 - ovos_workshop/res/text/en-us/minute.word | 1 - ovos_workshop/res/text/en-us/minutes.word | 1 - ovos_workshop/res/text/en-us/no.voc | 4 - .../not connected to the internet.dialog | 5 - .../res/text/en-us/not.loaded.dialog | 1 - ovos_workshop/res/text/en-us/or.word | 1 - ovos_workshop/res/text/en-us/second.word | 1 - ovos_workshop/res/text/en-us/seconds.word | 1 - .../res/text/en-us/skill.error.dialog | 1 - ovos_workshop/res/text/en-us/trailer.voc | 2 - ovos_workshop/res/text/en-us/yes.voc | 8 - .../res/ui/CategoryBoxHistoryView.qml | 63 ---- ovos_workshop/res/ui/CategoryBoxHomeView.qml | 61 ---- .../res/ui/CategoryBoxSearchView.qml | 129 ------- ovos_workshop/res/ui/Disambiguation.qml | 171 ---------- ovos_workshop/res/ui/Homescreen.qml | 219 ------------ ovos_workshop/res/ui/Playlist.qml | 170 ---------- .../res/ui/SYSTEM_AnimatedImageFrame.qml | 83 ----- ovos_workshop/res/ui/SYSTEM_HtmlFrame.qml | 20 -- ovos_workshop/res/ui/SYSTEM_ImageFrame.qml | 83 ----- .../SYSTEM_MediaCollectionSkillHomescreen.qml | 219 ------------ ovos_workshop/res/ui/SYSTEM_SkillSettings.qml | 272 --------------- ovos_workshop/res/ui/SYSTEM_TextFrame.qml | 39 --- ovos_workshop/res/ui/SYSTEM_UrlFrame.qml | 19 -- ovos_workshop/res/ui/SYSTEM_VideoPlayer.qml | 225 ------------- ovos_workshop/res/ui/SYSTEM_status.qml | 44 --- ovos_workshop/res/ui/SeekControl.qml | 315 ------------------ ovos_workshop/res/ui/TopBarTabButton.qml | 59 ---- ovos_workshop/res/ui/WebViewHtmlFrame.qml | 82 ----- ovos_workshop/res/ui/WebViewUrlFrame.qml | 77 ----- .../res/ui/delegates/GridVideoCard.qml | 147 -------- .../res/ui/delegates/ListVideoCard.qml | 184 ---------- ovos_workshop/res/ui/delegates/qmldir | 1 - ovos_workshop/res/ui/icons/check-circle.svg | 52 --- ovos_workshop/res/ui/icons/info-circle.svg | 52 --- ovos_workshop/res/ui/icons/times-circle.svg | 52 --- ovos_workshop/res/ui/images/back.png | Bin 1772 -> 0 bytes ovos_workshop/res/ui/images/back.svg | 79 ----- ovos_workshop/res/ui/images/gridpage.jpg | Bin 31940 -> 0 bytes ovos_workshop/res/ui/images/history.png | Bin 2186 -> 0 bytes ovos_workshop/res/ui/images/home.png | Bin 1446 -> 0 bytes ovos_workshop/res/ui/images/information.png | Bin 2708 -> 0 bytes .../res/ui/images/media-album-track.svg | 13 - .../res/ui/images/media-fullscreen.svg | 135 -------- ovos_workshop/res/ui/images/media-mute.svg | 130 -------- ovos_workshop/res/ui/images/media-next.svg | 96 ------ ovos_workshop/res/ui/images/media-pause.svg | 95 ------ ovos_workshop/res/ui/images/media-play.svg | 86 ----- .../res/ui/images/media-playback-pause.svg | 8 - .../res/ui/images/media-playback-start.svg | 8 - .../res/ui/images/media-playback-stop.svg | 8 - .../res/ui/images/media-playlist-play.svg | 13 - .../res/ui/images/media-playlist-repeat.svg | 13 - .../res/ui/images/media-playlist-shuffle.svg | 13 - .../res/ui/images/media-previous.svg | 96 ------ .../res/ui/images/media-repeat-playlist.svg | 13 - .../res/ui/images/media-repeat-track.svg | 13 - ovos_workshop/res/ui/images/media-repeat.svg | 154 --------- .../res/ui/images/media-seek-backward.svg | 8 - .../res/ui/images/media-seek-forward.svg | 8 - .../res/ui/images/media-skip-backward.svg | 13 - .../res/ui/images/media-skip-forward.svg | 13 - ovos_workshop/res/ui/images/media-stop.svg | 87 ----- ovos_workshop/res/ui/images/media-unmute.svg | 137 -------- .../res/ui/images/moviesandfilms.png | Bin 7281 -> 0 bytes ovos_workshop/res/ui/images/search.png | Bin 2385 -> 0 bytes ovos_workshop/res/ui/images/spinner.gif | Bin 97623 -> 0 bytes .../res/ui/settings_ui/settingButton.qml | 18 - .../res/ui/settings_ui/settingCheckBox.qml | 18 - .../res/ui/settings_ui/settingLabelBox.qml | 10 - .../res/ui/settings_ui/settingNumberBox.qml | 18 - .../res/ui/settings_ui/settingPasswordBox.qml | 18 - .../res/ui/settings_ui/settingTextBox.qml | 17 - ovos_workshop/res/ui/views/GridTileView.qml | 105 ------ ovos_workshop/res/ui/views/TileView.qml | 145 -------- ovos_workshop/res/ui/views/qmldir | 2 - ovos_workshop/skills/ovos.py | 12 - 88 files changed, 4869 deletions(-) delete mode 100644 ovos_workshop/patches/settings_gui_generator.py delete mode 100644 ovos_workshop/patches/skill_gui.py delete mode 100644 ovos_workshop/res/text/en-us/and.word delete mode 100644 ovos_workshop/res/text/en-us/behind_scenes.voc delete mode 100644 ovos_workshop/res/text/en-us/cancel.voc delete mode 100644 ovos_workshop/res/text/en-us/day.word delete mode 100644 ovos_workshop/res/text/en-us/days.word delete mode 100644 ovos_workshop/res/text/en-us/hour.word delete mode 100644 ovos_workshop/res/text/en-us/hours.word delete mode 100644 ovos_workshop/res/text/en-us/last.voc delete mode 100644 ovos_workshop/res/text/en-us/minute.word delete mode 100644 ovos_workshop/res/text/en-us/minutes.word delete mode 100644 ovos_workshop/res/text/en-us/no.voc delete mode 100644 ovos_workshop/res/text/en-us/not connected to the internet.dialog delete mode 100644 ovos_workshop/res/text/en-us/not.loaded.dialog delete mode 100644 ovos_workshop/res/text/en-us/or.word delete mode 100644 ovos_workshop/res/text/en-us/second.word delete mode 100644 ovos_workshop/res/text/en-us/seconds.word delete mode 100644 ovos_workshop/res/text/en-us/skill.error.dialog delete mode 100644 ovos_workshop/res/text/en-us/trailer.voc delete mode 100644 ovos_workshop/res/text/en-us/yes.voc delete mode 100644 ovos_workshop/res/ui/CategoryBoxHistoryView.qml delete mode 100644 ovos_workshop/res/ui/CategoryBoxHomeView.qml delete mode 100644 ovos_workshop/res/ui/CategoryBoxSearchView.qml delete mode 100644 ovos_workshop/res/ui/Disambiguation.qml delete mode 100644 ovos_workshop/res/ui/Homescreen.qml delete mode 100644 ovos_workshop/res/ui/Playlist.qml delete mode 100644 ovos_workshop/res/ui/SYSTEM_AnimatedImageFrame.qml delete mode 100644 ovos_workshop/res/ui/SYSTEM_HtmlFrame.qml delete mode 100644 ovos_workshop/res/ui/SYSTEM_ImageFrame.qml delete mode 100644 ovos_workshop/res/ui/SYSTEM_MediaCollectionSkillHomescreen.qml delete mode 100644 ovos_workshop/res/ui/SYSTEM_SkillSettings.qml delete mode 100644 ovos_workshop/res/ui/SYSTEM_TextFrame.qml delete mode 100644 ovos_workshop/res/ui/SYSTEM_UrlFrame.qml delete mode 100644 ovos_workshop/res/ui/SYSTEM_VideoPlayer.qml delete mode 100644 ovos_workshop/res/ui/SYSTEM_status.qml delete mode 100644 ovos_workshop/res/ui/SeekControl.qml delete mode 100644 ovos_workshop/res/ui/TopBarTabButton.qml delete mode 100644 ovos_workshop/res/ui/WebViewHtmlFrame.qml delete mode 100644 ovos_workshop/res/ui/WebViewUrlFrame.qml delete mode 100644 ovos_workshop/res/ui/delegates/GridVideoCard.qml delete mode 100644 ovos_workshop/res/ui/delegates/ListVideoCard.qml delete mode 100644 ovos_workshop/res/ui/delegates/qmldir delete mode 100644 ovos_workshop/res/ui/icons/check-circle.svg delete mode 100644 ovos_workshop/res/ui/icons/info-circle.svg delete mode 100644 ovos_workshop/res/ui/icons/times-circle.svg delete mode 100644 ovos_workshop/res/ui/images/back.png delete mode 100644 ovos_workshop/res/ui/images/back.svg delete mode 100644 ovos_workshop/res/ui/images/gridpage.jpg delete mode 100644 ovos_workshop/res/ui/images/history.png delete mode 100644 ovos_workshop/res/ui/images/home.png delete mode 100644 ovos_workshop/res/ui/images/information.png delete mode 100644 ovos_workshop/res/ui/images/media-album-track.svg delete mode 100644 ovos_workshop/res/ui/images/media-fullscreen.svg delete mode 100644 ovos_workshop/res/ui/images/media-mute.svg delete mode 100644 ovos_workshop/res/ui/images/media-next.svg delete mode 100644 ovos_workshop/res/ui/images/media-pause.svg delete mode 100644 ovos_workshop/res/ui/images/media-play.svg delete mode 100644 ovos_workshop/res/ui/images/media-playback-pause.svg delete mode 100644 ovos_workshop/res/ui/images/media-playback-start.svg delete mode 100644 ovos_workshop/res/ui/images/media-playback-stop.svg delete mode 100644 ovos_workshop/res/ui/images/media-playlist-play.svg delete mode 100644 ovos_workshop/res/ui/images/media-playlist-repeat.svg delete mode 100644 ovos_workshop/res/ui/images/media-playlist-shuffle.svg delete mode 100644 ovos_workshop/res/ui/images/media-previous.svg delete mode 100644 ovos_workshop/res/ui/images/media-repeat-playlist.svg delete mode 100644 ovos_workshop/res/ui/images/media-repeat-track.svg delete mode 100644 ovos_workshop/res/ui/images/media-repeat.svg delete mode 100644 ovos_workshop/res/ui/images/media-seek-backward.svg delete mode 100644 ovos_workshop/res/ui/images/media-seek-forward.svg delete mode 100644 ovos_workshop/res/ui/images/media-skip-backward.svg delete mode 100644 ovos_workshop/res/ui/images/media-skip-forward.svg delete mode 100644 ovos_workshop/res/ui/images/media-stop.svg delete mode 100644 ovos_workshop/res/ui/images/media-unmute.svg delete mode 100755 ovos_workshop/res/ui/images/moviesandfilms.png delete mode 100644 ovos_workshop/res/ui/images/search.png delete mode 100644 ovos_workshop/res/ui/images/spinner.gif delete mode 100644 ovos_workshop/res/ui/settings_ui/settingButton.qml delete mode 100644 ovos_workshop/res/ui/settings_ui/settingCheckBox.qml delete mode 100644 ovos_workshop/res/ui/settings_ui/settingLabelBox.qml delete mode 100644 ovos_workshop/res/ui/settings_ui/settingNumberBox.qml delete mode 100644 ovos_workshop/res/ui/settings_ui/settingPasswordBox.qml delete mode 100644 ovos_workshop/res/ui/settings_ui/settingTextBox.qml delete mode 100644 ovos_workshop/res/ui/views/GridTileView.qml delete mode 100644 ovos_workshop/res/ui/views/TileView.qml delete mode 100644 ovos_workshop/res/ui/views/qmldir diff --git a/ovos_workshop/patches/base_skill.py b/ovos_workshop/patches/base_skill.py index 591c7749..a377e2db 100644 --- a/ovos_workshop/patches/base_skill.py +++ b/ovos_workshop/patches/base_skill.py @@ -14,7 +14,6 @@ from mycroft.skills.skill_data import read_vocab_file, load_vocabulary, \ load_regex from mycroft.dialog import load_dialogs -from ovos_workshop.patches.skill_gui import SkillGUI def get_non_properties(obj): @@ -45,10 +44,6 @@ def check_class(cls): class MycroftSkill(_MycroftSkill): monkey_patched = True - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.gui = SkillGUI(self) # pull/2683 - # https://github.com/MycroftAI/mycroft-core/pull/1468 def _deactivate_skill(self, message): skill_id = message.data.get("skill_id") @@ -63,12 +58,6 @@ def handle_skill_deactivated(self, message=None): # https://github.com/MycroftAI/mycroft-core/pull/1468 def bind(self, bus): - if bus and not isinstance(self.gui, SkillGUI): - # needs to be available before call to self.bind, if a skill is - # initialized with the bus argument it will miss the monkey-patch - # AFAIK this never happens in mycroft-core but i want the patch - # to work in non standard use cases - self.gui = SkillGUI(self) # pull/2683 super().bind(bus) if bus: ConverseTracker.connect_bus(self.bus) # pull/1468 diff --git a/ovos_workshop/patches/settings_gui_generator.py b/ovos_workshop/patches/settings_gui_generator.py deleted file mode 100644 index 8f926ec7..00000000 --- a/ovos_workshop/patches/settings_gui_generator.py +++ /dev/null @@ -1,91 +0,0 @@ -# Copyright 2020 Mycroft AI Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -import json -import yaml -import pathlib - - -class SettingsGuiGenerator: - """Skill Settings Generator For GUI. """ - - def __init__(self): - """ Create a SettingList Object """ - self.settings_list = [] - - def populate(self, skill_id, settings_file, settings_dict): - """ - Populates settings list for current skill. - - Arguments: - skill_id: ID of target skill. - settings_file: Settings meta file from skill folder. - settings_dict: Dictionary of current settings.json file. - """ - file_type = pathlib.Path(settings_file).suffix - - if file_type == ".json": - with open(settings_file, 'r') as f: - settingsmeta_dict = json.load(f) - - __skillMetaData = settingsmeta_dict.get('skillMetadata') - for section in __skillMetaData.get('sections'): - self.settings_list.append(section) - - if file_type == ".yaml": - with open(settings_file, 'r') as f: - settingsmeta_dict = yaml.safe_load(f) - - __skillMetaData = settingsmeta_dict.get('skillMetadata') - for section in __skillMetaData.get('sections'): - self.settings_list.append(section) - - if settings_dict is not None: - __updated_list = [] - for sections in self.settings_list: - for fields in sections['fields']: - if "name" in fields: - if fields["name"] in settings_dict.keys(): - fields["value"] = settings_dict[fields["name"]] - - __updated_list.append(sections) - - self.clear() - self.settings_list = __updated_list - - def fetch(self): - """Return Settings List """ - return self.settings_list - - def clear(self): - """Clear Settings List """ - self.settings_list.clear() - - def update(self, settings_dict): - """Getting Changed Settings & Update List. - - Arguments: - settings_dict: Dictionary of current settings.json file. - """ - __updated_list = [] - for sections in self.settings_list: - for fields in sections['fields']: - if "name" in fields: - if fields["name"] in settings_dict.keys(): - fields["value"] = settings_dict[fields["name"]] - - __updated_list.append(sections) - - self.clear() - self.settings_list = __updated_list \ No newline at end of file diff --git a/ovos_workshop/patches/skill_gui.py b/ovos_workshop/patches/skill_gui.py deleted file mode 100644 index e3e060c4..00000000 --- a/ovos_workshop/patches/skill_gui.py +++ /dev/null @@ -1,288 +0,0 @@ -# Copyright 2019 Mycroft AI Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -from enum import IntEnum -from os.path import join, isfile - -from ovos_utils import ensure_mycroft_import -ensure_mycroft_import() - -from mycroft.enclosure.gui import SkillGUI as _SkillGUI -from mycroft.util import resolve_resource_file -from mycroft.messagebus.message import Message -from ovos_workshop.patches.settings_gui_generator import SettingsGuiGenerator -from ovos_utils import resolve_ovos_resource_file -from ovos_utils.gui import _GUIDict - -# implements the following GUI functionality -# https://github.com/MycroftAI/mycroft-core/pull/2698 - - -class SkillGUI(_SkillGUI): - """SkillGUI - Interface to the Graphical User Interface - - Values set in this class are synced to the GUI, accessible within QML - via the built-in sessionData mechanism. For example, in Python you can - write in a skill: - self.gui['temp'] = 33 - self.gui.show_page('Weather.qml') - Then in the Weather.qml you'd access the temp via code such as: - text: sessionData.time - """ - - def __init__(self, skill): - super().__init__(skill) - self.__skills_config = {} # data object passed to skill's page - self.settings_gui_generator = SettingsGuiGenerator() - - # fix gui subdict sync TODO PR in mycroft-core - def _sync_data(self): - data = self.__session_data.copy() - data.update({'__from': self.skill.skill_id}) - self.bus.emit(Message("gui.value.set", data)) - - def __setitem__(self, key, value): - """Implements set part of dict-like behaviour with named keys.""" - - # cast to helper dict subclass that syncs data - if isinstance(value, dict) and not isinstance(value, _GUIDict): - value = _GUIDict(self, **value) - - self.__session_data[key] = value - - # emit notification (but not needed if page has not been shown yet) - if self.page: - self._sync_data() - - # new gui templates - # PR https://github.com/MycroftAI/mycroft-core/pull/2862 - def show_notification(self, content, action=None, - noticetype="transient"): - """Display a Notification on homepage in the GUI. - Arguments: - content (str): Main text content of a notification, Limited - to two visual lines. - action (str): Callback to any event registered by the skill - to perform a certain action when notification is clicked. - noticetype (str): - transient: 'Default' displays a notification with a timeout. - sticky: displays a notification that sticks to the screen. - """ - if self.skill: - self.skill.bus.emit(Message("homescreen.notification.set", - data={ - "sender": self.skill.skill_id, - "text": content, - "action": action, - "type": noticetype - })) - - # TODO PR in mycroft-core, taken from gez-mycroft wifi GUI test skill - def show_confirmation_status(self, text="", override_idle=False, - override_animations=False): - self.clear() - self["icon"] = resolve_ovos_resource_file("ui/icons/check-circle.svg") - self["label"] = text - self["bgColor"] = "#40DBB0" - self.show_page("SYSTEM_status.qml", override_idle=override_idle, - override_animations=override_animations) - - def show_error_status(self, text="", override_idle=False, - override_animations=False): - self.clear() - self["icon"] = resolve_ovos_resource_file("ui/icons/times-circle.svg") - self["label"] = text - self["bgColor"] = "#FF0000" - self.show_page("SYSTEM_status.qml", override_idle=override_idle, - override_animations=override_animations) - - # skill settings - # https://github.com/MycroftAI/mycroft-core/pull/2698 - def register_settings(self): - """Register requested skill settings - configuration in GUI. - - Registers handler to apply settings when - updated via GUI interface. - Register handler to update settings when - updated via Web interface. - """ - if self.skill: - skill_id = self.skill_id - - settingmeta_path = join(self.skill.root_dir, - "settingsmeta.json") - if isfile(settingmeta_path): - self.settings_gui_generator.populate(skill_id, - settingmeta_path, - self.skill.settings) - apply_handler = skill_id + ".settings.set" - update_handler = skill_id + ".settings.update" - remove_pagehandler = skill_id + ".settings.remove_page" - self.register_handler(apply_handler, - self._apply_settings) - self.register_handler(update_handler, - self._update_settings) - self.register_handler(remove_pagehandler, - self._remove_settings_display) - return - raise FileNotFoundError("Unable to find setting file for: {}". - format(self.skill_id)) - - def show_settings(self, override_idle=True, - override_animations=False): - """Display skill configuration page in GUI. - - Arguments: - override_idle (boolean, int): - True: Takes over the resting page indefinitely - (int): Delays resting page for the specified number of - seconds. - override_animations (boolean): - True: Disables showing all platform skill animations. - False: 'Default' always show animations. - """ - self.clear() - self.__skills_config["sections"] = self.settings_gui_generator.fetch() - self.__skills_config["skill_id"] = self.skill_id - self["skillsConfig"] = self.__skills_config - self.show_page("SYSTEM_SkillSettings.qml", - override_idle=override_idle) - - def _apply_settings(self, message): - """Store updated values for keys in skill settings. - - Arguments: - message: Messagebus message - """ - if self.skill: - self.skill.settings[message.data["setting_key"]] = \ - message.data["setting_value"] - - def _update_settings(self, message): - """Update changed skill settings in GUI. - - Arguments: - message: Messagebus message - """ - self.clear() - self.settings_gui_generator.update(self.skill.settings) - self.show_settings() - - def _remove_settings_display(self, message): - """Removes skill settings page from GUI. - - Arguments: - message: Messagebus message - """ - self.clear() - self.remove_page("SYSTEM_SkillSettings.qml") - - # everything above is a new method, everything below is partial overrides - # these unfortunately require implementing the full method, may get out - # of sync over time - def show_pages(self, page_names, index=0, override_idle=None, - override_animations=False): - """Begin showing the list of pages in the GUI. - - OVOS change: look for bundled ovos resources files - - Arguments: - page_names (list): List of page names (str) to display, such as - ["Weather.qml", "Forecast.qml", "Details.qml"] - index (int): Page number (0-based) to show initially. For the - above list a value of 1 would start on "Forecast.qml" - override_idle (boolean, int): - True: Takes over the resting page indefinitely - (int): Delays resting page for the specified number of - seconds. - override_animations (boolean): - True: Disables showing all platform skill animations. - False: 'Default' always show animations. - """ - if not isinstance(page_names, list): - raise ValueError('page_names must be a list') - - if index > len(page_names): - raise ValueError('Default index is larger than page list length') - - # First sync any data... - data = self.__session_data.copy() - data.update({'__from': self.skill.skill_id}) - if self.skill: - self.skill.bus.emit(Message("gui.value.set", data)) - - # Convert pages to full reference - page_urls = [] - page = None - for name in page_names: - - if name.startswith("SYSTEM"): - page = resolve_resource_file(join('ui', name)) - elif self.skill: - page = self.skill.find_resource(name, 'ui') - - if not page: - # override to look for bundled pages - page = resolve_ovos_resource_file(join('ui', name)) or \ - resolve_ovos_resource_file(name) - if page: - if self.config.get('remote'): - page_urls.append(self.remote_url + "/" + page) - else: - page_urls.append("file://" + page) - else: - raise FileNotFoundError("Unable to find page: {}".format(name)) - if self.skill: - self.skill.bus.emit(Message("gui.page.show", - {"page": page_urls, - "index": index, - "__from": self.skill.skill_id, - "__idle": override_idle, - "__animations": override_animations})) - - def remove_pages(self, page_names): - """Remove a list of pages in the GUI. - - OVOS change: look for bundled ovos resources files - - Arguments: - page_names (list): List of page names (str) to display, such as - ["Weather.qml", "Forecast.qml", "Other.qml"] - """ - if not isinstance(page_names, list): - raise ValueError('page_names must be a list') - - # Convert pages to full reference - page_urls = [] - page = None - for name in page_names: - if name.startswith("SYSTEM"): - page = resolve_resource_file(join('ui', name)) - elif self.skill: - page = self.skill.find_resource(name, 'ui') - - if not page: - # override to look for bundled pages - page = resolve_ovos_resource_file(join('ui', name)) or \ - resolve_ovos_resource_file(name) - - if page: - page_urls.append("file://" + page) - else: - raise FileNotFoundError("Unable to find page: {}".format(name)) - if self.skill: - self.skill.bus.emit(Message("gui.page.delete", - {"page": page_urls, - "__from": self.skill.skill_id})) diff --git a/ovos_workshop/res/text/en-us/and.word b/ovos_workshop/res/text/en-us/and.word deleted file mode 100644 index c51107c2..00000000 --- a/ovos_workshop/res/text/en-us/and.word +++ /dev/null @@ -1 +0,0 @@ -and \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/behind_scenes.voc b/ovos_workshop/res/text/en-us/behind_scenes.voc deleted file mode 100644 index ef044784..00000000 --- a/ovos_workshop/res/text/en-us/behind_scenes.voc +++ /dev/null @@ -1,2 +0,0 @@ -behind scenes -behind the scenes \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/cancel.voc b/ovos_workshop/res/text/en-us/cancel.voc deleted file mode 100644 index 590d82b6..00000000 --- a/ovos_workshop/res/text/en-us/cancel.voc +++ /dev/null @@ -1,3 +0,0 @@ -cancel -nevermind -forget it diff --git a/ovos_workshop/res/text/en-us/day.word b/ovos_workshop/res/text/en-us/day.word deleted file mode 100644 index 0c303a41..00000000 --- a/ovos_workshop/res/text/en-us/day.word +++ /dev/null @@ -1 +0,0 @@ -day \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/days.word b/ovos_workshop/res/text/en-us/days.word deleted file mode 100644 index 5eb8de30..00000000 --- a/ovos_workshop/res/text/en-us/days.word +++ /dev/null @@ -1 +0,0 @@ -days \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/hour.word b/ovos_workshop/res/text/en-us/hour.word deleted file mode 100644 index a13960e9..00000000 --- a/ovos_workshop/res/text/en-us/hour.word +++ /dev/null @@ -1 +0,0 @@ -hour \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/hours.word b/ovos_workshop/res/text/en-us/hours.word deleted file mode 100644 index 62c6decf..00000000 --- a/ovos_workshop/res/text/en-us/hours.word +++ /dev/null @@ -1 +0,0 @@ -hours \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/last.voc b/ovos_workshop/res/text/en-us/last.voc deleted file mode 100644 index 1419bcd3..00000000 --- a/ovos_workshop/res/text/en-us/last.voc +++ /dev/null @@ -1,3 +0,0 @@ -last choice -last option -last one \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/minute.word b/ovos_workshop/res/text/en-us/minute.word deleted file mode 100644 index 50bc2f27..00000000 --- a/ovos_workshop/res/text/en-us/minute.word +++ /dev/null @@ -1 +0,0 @@ -minute \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/minutes.word b/ovos_workshop/res/text/en-us/minutes.word deleted file mode 100644 index cde6523a..00000000 --- a/ovos_workshop/res/text/en-us/minutes.word +++ /dev/null @@ -1 +0,0 @@ -minutes \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/no.voc b/ovos_workshop/res/text/en-us/no.voc deleted file mode 100644 index 51066f65..00000000 --- a/ovos_workshop/res/text/en-us/no.voc +++ /dev/null @@ -1,4 +0,0 @@ -no -nope -nah -negative \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/not connected to the internet.dialog b/ovos_workshop/res/text/en-us/not connected to the internet.dialog deleted file mode 100644 index 34636425..00000000 --- a/ovos_workshop/res/text/en-us/not connected to the internet.dialog +++ /dev/null @@ -1,5 +0,0 @@ -It seems I'm not connected to the Internet, please check your network connection. -I don't seem to be connected to the internet, please check your network connection. -I can't reach the internet right now, please check your network connection. -I'm unable to reach the internet, please check your network connection. -I'm having trouble reaching the internet right now, please check your network connection. \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/not.loaded.dialog b/ovos_workshop/res/text/en-us/not.loaded.dialog deleted file mode 100644 index bcc81c44..00000000 --- a/ovos_workshop/res/text/en-us/not.loaded.dialog +++ /dev/null @@ -1 +0,0 @@ -Please wait a moment as I finish booting up. \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/or.word b/ovos_workshop/res/text/en-us/or.word deleted file mode 100644 index c4fced5f..00000000 --- a/ovos_workshop/res/text/en-us/or.word +++ /dev/null @@ -1 +0,0 @@ -or \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/second.word b/ovos_workshop/res/text/en-us/second.word deleted file mode 100644 index 2147e418..00000000 --- a/ovos_workshop/res/text/en-us/second.word +++ /dev/null @@ -1 +0,0 @@ -second \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/seconds.word b/ovos_workshop/res/text/en-us/seconds.word deleted file mode 100644 index 729866f9..00000000 --- a/ovos_workshop/res/text/en-us/seconds.word +++ /dev/null @@ -1 +0,0 @@ -seconds \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/skill.error.dialog b/ovos_workshop/res/text/en-us/skill.error.dialog deleted file mode 100644 index 29728856..00000000 --- a/ovos_workshop/res/text/en-us/skill.error.dialog +++ /dev/null @@ -1 +0,0 @@ -An error occurred while processing a request in {{skill}} \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/trailer.voc b/ovos_workshop/res/text/en-us/trailer.voc deleted file mode 100644 index 6374166d..00000000 --- a/ovos_workshop/res/text/en-us/trailer.voc +++ /dev/null @@ -1,2 +0,0 @@ -trailer -movie trailer \ No newline at end of file diff --git a/ovos_workshop/res/text/en-us/yes.voc b/ovos_workshop/res/text/en-us/yes.voc deleted file mode 100644 index 4e786148..00000000 --- a/ovos_workshop/res/text/en-us/yes.voc +++ /dev/null @@ -1,8 +0,0 @@ -yes -yeah -yep -sure -please -confirm -confirmed -affirmative diff --git a/ovos_workshop/res/ui/CategoryBoxHistoryView.qml b/ovos_workshop/res/ui/CategoryBoxHistoryView.qml deleted file mode 100644 index 1e29512b..00000000 --- a/ovos_workshop/res/ui/CategoryBoxHistoryView.qml +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2018 by Aditya Mehra - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -import QtQuick 2.9 -import QtQuick.Layouts 1.4 -import QtGraphicalEffects 1.0 -import QtQuick.Controls 2.3 -import org.kde.kirigami 2.8 as Kirigami -import Mycroft 1.0 as Mycroft -import "views" as Views -import "delegates" as Delegates - -Item { - property var historyListModel: sessionData.historyModel - Layout.fillWidth: true - Layout.fillHeight: true - readonly property int responsiveCellWidth: width >= 600 ? parent.width / 5 : parent.width / 2 - - onFocusChanged: { - if(focus){ - historyGridView.forceActiveFocus() - } - } - - onHistoryListModelChanged: { - historyGridView.view.forceLayout() - } - - Views.GridTileView { - id: historyGridView - anchors { - top: parent.top - left: parent.left - right: parent.right - bottom: parent.bottom - } - focus: true - model: historyListModel - title: count > 0 ? "Watch History" : "No Recent History" - - cellWidth: responsiveCellWidth - cellHeight: cellWidth / 1.8 + Kirigami.Units.gridUnit * 5 - delegate: Delegates.ListVideoCard { - width: historyGridView.cellWidth - height: historyGridView.cellHeight - } - KeyNavigation.up: historyCatButton - } -} diff --git a/ovos_workshop/res/ui/CategoryBoxHomeView.qml b/ovos_workshop/res/ui/CategoryBoxHomeView.qml deleted file mode 100644 index 8473a994..00000000 --- a/ovos_workshop/res/ui/CategoryBoxHomeView.qml +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2020 by Aditya Mehra - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -import QtQuick 2.9 -import QtQuick.Layouts 1.4 -import QtGraphicalEffects 1.0 -import QtQuick.Controls 2.3 -import org.kde.kirigami 2.8 as Kirigami -import Mycroft 1.0 as Mycroft -import "views" as Views -import "delegates" as Delegates - -Item { - property var videosHomeListModel: sessionData.videosHomeModel - - Layout.fillWidth: true - Layout.fillHeight: true - - onFocusChanged: { - if(focus){ - videosListView.forceActiveFocus() - } - } - - onVideosHomeListModelChanged: { - videosListView.forceLayout() - } - - Item { - id: videosContainer - anchors.fill: parent - anchors.leftMargin: Kirigami.Units.gridUnit - anchors.rightMargin: Kirigami.Units.gridUnit - - Kirigami.CardsGridView { - id: videosListView - anchors.fill: parent - anchors.leftMargin: Kirigami.Units.largeSpacing + Kirigami.Units.smallSpacing - cellHeight: cellWidth * 0.5625 + Kirigami.Units.gridUnit * 2.5 - displayMarginBeginning: 125 - displayMarginEnd: 125 - focus: false - model: videosHomeListModel - delegate: Delegates.GridVideoCard{} - } - } -} diff --git a/ovos_workshop/res/ui/CategoryBoxSearchView.qml b/ovos_workshop/res/ui/CategoryBoxSearchView.qml deleted file mode 100644 index 5fc84dfa..00000000 --- a/ovos_workshop/res/ui/CategoryBoxSearchView.qml +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright 2018 by Aditya Mehra - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -import QtQuick 2.9 -import QtQuick.Layouts 1.4 -import QtGraphicalEffects 1.0 -import QtQuick.Controls 2.3 -import org.kde.kirigami 2.8 as Kirigami -import Mycroft 1.0 as Mycroft -import "views" as Views -import "delegates" as Delegates - -Item { - property var searchListModel: sessionData.searchListBlob.videoList - Layout.fillWidth: true - Layout.fillHeight: true - - onFocusChanged: { - if(focus){ - searchBarArea.forceActiveFocus() - } - } - - function searchYoutubeLiveResults(query){ - triggerGuiEvent("ovos_utils.search_event", {"Query": query}) - } - - Rectangle { - id: searchBarArea - anchors.top: parent.top - anchors.topMargin: Kirigami.Units.largeSpacing - height: Kirigami.Units.gridUnit * 3 - anchors.left: parent.left - anchors.right: parent.right - anchors.leftMargin: Kirigami.Units.gridUnit - anchors.rightMargin: Kirigami.Units.gridUnit - radius: 12 - color: searchBarArea.activeFocus ? Qt.rgba(Kirigami.Theme.highlightColor.r, Kirigami.Theme.highlightColor.g, Kirigami.Theme.highlightColor.b, 0.95) : Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.95) - - Keys.onReturnPressed: { - videoQueryBox.forceActiveFocus() - } - - KeyNavigation.up: searchCatButton - KeyNavigation.down: searchGridView - - RowLayout { - anchors.fill: parent - TextField { - id: videoQueryBox - Layout.leftMargin: Kirigami.Units.largeSpacing - Layout.fillWidth: true - placeholderText: "Search here..." - Layout.fillHeight: true - onAccepted: { - searchYoutubeLiveResults(videoQueryBox.text) - } - KeyNavigation.down: searchGridView - KeyNavigation.right: searchVideoQuery - } - - Kirigami.Icon { - id: searchVideoQuery - Layout.preferredWidth: Kirigami.Units.gridUnit * 2 - Layout.fillHeight: true - source: "search" - KeyNavigation.left: videoQueryBox - KeyNavigation.down: searchGridView - - Keys.onReturnPressed: { - searchYoutubeLiveResults(videoQueryBox.text) - } - - MouseArea { - anchors.fill: parent - onClicked: { - searchYoutubeLiveResults(videoQueryBox.text) - } - } - - ColorOverlay { - anchors.fill: parent - source: searchVideoQuery - color: Kirigami.Theme.highlightColor - visible: searchVideoQuery.activeFocus ? 1 : 0 - } - } - } - } - - Views.GridTileView { - id: searchGridView - anchors { - top: searchBarArea.bottom - left: parent.left - right: parent.right - bottom: parent.bottom - topMargin: Kirigami.Units.largeSpacing - } - focus: true - model: searchListModel - Layout.fillWidth: true - Layout.fillHeight: true - cellWidth: view.width / 4 - // FIXME: componentize more all this stuff - cellHeight: cellWidth / 1.8 + Kirigami.Units.gridUnit * 5 - title: count > 0 ? "Search Results" : " " - delegate: Delegates.ListVideoCard { - width: searchGridView.cellWidth - height: searchGridView.cellHeight - } - - KeyNavigation.up: searchBarArea - } -} diff --git a/ovos_workshop/res/ui/Disambiguation.qml b/ovos_workshop/res/ui/Disambiguation.qml deleted file mode 100644 index ec17cc18..00000000 --- a/ovos_workshop/res/ui/Disambiguation.qml +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright 2020 by Aditya Mehra - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -import QtQuick 2.9 -import QtQuick.Controls 2.3 as Controls -import QtQuick.Layouts 1.3 -import org.kde.kirigami 2.8 as Kirigami -import QtGraphicalEffects 1.0 -import Mycroft 1.0 as Mycroft - - -Mycroft.Delegate { - id: delegate - - property var playlistModel: sessionData.searchModel - property Component emptyHighlighter: Item{} - fillWidth: true - - skillBackgroundSource: sessionData.bg_image - - onPlaylistModelChanged: { - playlistListView.forceLayout() - } - - Keys.onBackPressed: { - parent.parent.parent.currentIndex-- - parent.parent.parent.currentItem.contentItem.forceActiveFocus() - } - - function formatedDuration(millis){ - var minutes = Math.floor(millis / 60000); - var seconds = ((millis % 60000) / 1000).toFixed(0); - return minutes + ":" + (seconds < 10 ? '0' : '') + seconds; - } - - ColumnLayout { - id: playlistPlayerColumn - anchors.fill: parent - spacing: Kirigami.Units.smallSpacing - - Kirigami.Heading { - id: watchItemList - text: "Search Results" - level: 2 - } - - Kirigami.Separator { - id: sept2 - Layout.fillWidth: true - Layout.preferredHeight: 1 - z: 100 - } - - ListView { - id: playlistListView - keyNavigationEnabled: true - model: playlistModel.data - focus: false - interactive: true - bottomMargin: delegate.controlBarItem.height + Kirigami.Units.largeSpacing - Layout.fillWidth: true - Layout.fillHeight: true - spacing: Kirigami.Units.largeSpacing - currentIndex: 0 - clip: true - highlightRangeMode: ListView.StrictlyEnforceRange - snapMode: ListView.SnapToItem - - delegate: Controls.ItemDelegate { - width: parent.width - height: Kirigami.Units.gridUnit * 5 - - background: Rectangle { - Kirigami.Theme.colorSet: Kirigami.Theme.Button - color: Qt.rgba(0.2, 0.2, 0.2, 1) - layer.enabled: true - layer.effect: DropShadow { - horizontalOffset: 1 - verticalOffset: 2 - } - } - - - contentItem: Item { - width: parent.width - height: parent.height - - RowLayout { - id: delegateItem - anchors.fill: parent - anchors.margins: Kirigami.Units.smallSpacing - spacing: Kirigami.Units.largeSpacing - - Image { - id: videoImage - source: modelData.image - Layout.preferredHeight: parent.height - Layout.preferredWidth: Kirigami.Units.gridUnit * 4 - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - fillMode: Image.Stretch - } - - ColumnLayout { - Layout.fillWidth: true - - Controls.Label { - id: videoLabel - Layout.fillWidth: true - text: modelData.track - wrapMode: Text.WordWrap - color: "white" - } - Controls.Label { - id: artistLabel - Layout.fillWidth: true - text: modelData.album - opacity: 0.8 - color: "white" - } - } - - Controls.Label { - id: durationTime - Layout.alignment: Qt.AlignRight | Qt.AlignVCenter - color: "white" - opacity: 0.8 - text: formatedDuration(modelData.duration) - } - - Kirigami.Separator { - Layout.fillHeight: true - Layout.preferredWidth: 1 - } - - Image { - id: songSource - Layout.preferredHeight: Kirigami.Units.iconSizes.huge + Kirigami.Units.largeSpacing - Layout.preferredWidth: Kirigami.Units.iconSizes.huge + Kirigami.Units.largeSpacing - Layout.alignment: Qt.AlignHCenter - fillMode: Image.PreserveAspectFit - source: modelData.source - } - } - } - - onClicked: { - triggerGuiEvent("search.play", - {"playlistData": modelData}) - } - } - } - } - - Component.onCompleted: { - playlistListView.forceActiveFocus() - } -} diff --git a/ovos_workshop/res/ui/Homescreen.qml b/ovos_workshop/res/ui/Homescreen.qml deleted file mode 100644 index f0f4bf71..00000000 --- a/ovos_workshop/res/ui/Homescreen.qml +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright 2018 by Aditya Mehra - * Copyright 2018 Marco Martin - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -import QtQuick 2.9 -import QtQuick.Layouts 1.4 -import QtGraphicalEffects 1.0 -import QtQuick.Controls 2.3 -import org.kde.kirigami 2.8 as Kirigami -import Mycroft 1.0 as Mycroft -import "views" as Views -import "delegates" as Delegates - -Mycroft.Delegate { - id: delegate - property bool busyIndicate: false - - fillWidth: true - - leftPadding: 0 - rightPadding: 0 - topPadding: 0 - bottomPadding: 0 - - skillBackgroundSource: "https://source.unsplash.com/weekly?abstract" - - function highlightActiveCategory(cat){ - switch(cat){ - case "Home": - historyCatButton.checked = false - searchCatButton.checked = false - homeCatButton.checked = true - break; - case "History": - searchCatButton.checked = false - homeCatButton.checked = false - historyCatButton.checked = true - break; - case "Search": - homeCatButton.checked = false - historyCatButton.checked = false - searchCatButton.checked = true - break; - } - } - - Connections { - target: Mycroft.MycroftController - onIntentRecevied: { - if(type == "speak") { - busyIndicatorPop.close() - busyIndicate = false - } - } - } - - onFocusChanged: { - busyIndicatorPop.close() - busyIndicate = false - if(delegate.focus){ - console.log("focus is here") - } - } - - Keys.onBackPressed: { - parent.parent.parent.currentIndex++ - parent.parent.parent.currentItem.contentItem.forceActiveFocus() - } - - - contentItem: ColumnLayout { - id: colLay1 - - Rectangle { - color: Qt.rgba(0, 0, 0, 0.8) - Layout.fillWidth: true - Layout.preferredHeight: Kirigami.Units.gridUnit * 3 - Layout.maximumHeight: Kirigami.Units.gridUnit * 4 - z: 100 - - TopBarTabButton { - id: backButton - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter - anchors.leftMargin: Kirigami.Units.largeSpacing - source: "images/back.png" - onClicked: { - Mycroft.MycroftController.sendRequest("mycroft.gui.screen.close", {}) - } - } - - RowLayout { - id: categoryRepeater - anchors { - right: parent.right - top: parent.top - bottom: parent.bottom - } - width: parent.width / 2 - anchors.leftMargin: Kirigami.Units.gridUnit - anchors.rightMargin: Kirigami.Units.gridUnit - - TopBarTabButton { - id: homeCatButton - KeyNavigation.right: historyCatButton - KeyNavigation.down: categoryLayout - checked: true - source: "images/home.png" - onClicked: { - categoryLayout.pop(categoryLayout.find(function(item) { - return item.name == "homeCat";})) - highlightActiveCategory("Home") - } - } - - TopBarTabButton { - id: historyCatButton - KeyNavigation.left: homeCatButton - KeyNavigation.right: searchCatButton - KeyNavigation.down: categoryLayout - checked: false - source: "images/history.png" - onClicked: { - if(categoryLayout.depth >= 2) { - categoryLayout.pop(null) - } - categoryLayout.push(historyCat) - highlightActiveCategory("History") - } - } - - TopBarTabButton { - id: searchCatButton - KeyNavigation.left: historyCatButton - KeyNavigation.down: categoryLayout - checked: false - source: "images/search.png" - onClicked: { - if(categoryLayout.depth >= 2) { - categoryLayout.pop(null) - } - categoryLayout.push(searchCat) - highlightActiveCategory("Search") - } - } - } - } - - Component { - id: homeCat - CategoryBoxHomeView { - id: homeCatView - } - } - - Component { - id: historyCat - CategoryBoxHistoryView { - id: historyCatView - } - } - - Component { - id: searchCat - CategoryBoxSearchView { - id: searchCatView - } - } - - StackView { - id: categoryLayout - Layout.fillWidth: true - Layout.fillHeight: true - - Component.onCompleted: { - categoryLayout.push(homeCat) - } - } - } - - Popup { - id: busyIndicatorPop - width: parent.width - height: parent.height - background: Rectangle { - anchors.fill: parent - color: Qt.rgba(0, 0, 0, 0.5) - } - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent - - BusyIndicator { - running: busyIndicate - anchors.centerIn: parent - } - - onOpened: { - busyIndicate = true - } - - onClosed: { - busyIndicate = false - } - } -} - diff --git a/ovos_workshop/res/ui/Playlist.qml b/ovos_workshop/res/ui/Playlist.qml deleted file mode 100644 index 0ff47c18..00000000 --- a/ovos_workshop/res/ui/Playlist.qml +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright 2020 by Aditya Mehra - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -import QtQuick 2.9 -import QtQuick.Controls 2.3 as Controls -import QtQuick.Layouts 1.3 -import org.kde.kirigami 2.8 as Kirigami -import QtGraphicalEffects 1.0 -import Mycroft 1.0 as Mycroft - - -Mycroft.Delegate { - id: delegate - - property var playlistModel: sessionData.playlistModel - property Component emptyHighlighter: Item{} - fillWidth: true - - skillBackgroundSource: sessionData.bg_image - - onPlaylistModelChanged: { - playlistListView.forceLayout() - } - - Keys.onBackPressed: { - parent.parent.parent.currentIndex-- - parent.parent.parent.currentItem.contentItem.forceActiveFocus() - } - - function formatedDuration(millis){ - var minutes = Math.floor(millis / 60000); - var seconds = ((millis % 60000) / 1000).toFixed(0); - return minutes + ":" + (seconds < 10 ? '0' : '') + seconds; - } - - ColumnLayout { - id: playlistPlayerColumn - anchors.fill: parent - spacing: Kirigami.Units.smallSpacing - - Kirigami.Heading { - id: watchItemList - text: "Now Playing" - level: 2 - } - - Kirigami.Separator { - id: sept2 - Layout.fillWidth: true - Layout.preferredHeight: 1 - z: 100 - } - - ListView { - id: playlistListView - keyNavigationEnabled: true - model: playlistModel.data - focus: false - interactive: true - bottomMargin: delegate.controlBarItem.height + Kirigami.Units.largeSpacing - Layout.fillWidth: true - Layout.fillHeight: true - spacing: Kirigami.Units.largeSpacing - currentIndex: 0 - clip: true - highlightRangeMode: ListView.StrictlyEnforceRange - snapMode: ListView.SnapToItem - - delegate: Controls.ItemDelegate { - width: parent.width - height: Kirigami.Units.gridUnit * 5 - - background: Rectangle { - Kirigami.Theme.colorSet: Kirigami.Theme.Button - color: Qt.rgba(0.2, 0.2, 0.2, 1) - layer.enabled: true - layer.effect: DropShadow { - horizontalOffset: 1 - verticalOffset: 2 - } - } - - - contentItem: Item { - width: parent.width - height: parent.height - - RowLayout { - id: delegateItem - anchors.fill: parent - anchors.margins: Kirigami.Units.smallSpacing - spacing: Kirigami.Units.largeSpacing - - Image { - id: videoImage - source: modelData.image - Layout.preferredHeight: parent.height - Layout.preferredWidth: Kirigami.Units.gridUnit * 4 - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - fillMode: Image.Stretch - } - - ColumnLayout { - Layout.fillWidth: true - - Controls.Label { - id: videoLabel - Layout.fillWidth: true - text: modelData.track - wrapMode: Text.WordWrap - color: "white" - } - Controls.Label { - id: artistLabel - Layout.fillWidth: true - text: modelData.album - opacity: 0.8 - color: "white" - } - } - - Controls.Label { - id: durationTime - Layout.alignment: Qt.AlignRight | Qt.AlignVCenter - color: "white" - opacity: 0.8 - text: formatedDuration(modelData.duration) - } - - Kirigami.Separator { - Layout.fillHeight: true - Layout.preferredWidth: 1 - } - - Image { - id: songSource - Layout.preferredHeight: Kirigami.Units.iconSizes.huge + Kirigami.Units.largeSpacing - Layout.preferredWidth: Kirigami.Units.iconSizes.huge + Kirigami.Units.largeSpacing - Layout.alignment: Qt.AlignHCenter - fillMode: Image.PreserveAspectFit - source: modelData.source - } - } - } - - onClicked: { - triggerGuiEvent("playlist.play", {"playlistData": modelData}) - } - } - } - } - - Component.onCompleted: { - playlistListView.forceActiveFocus() - } -} diff --git a/ovos_workshop/res/ui/SYSTEM_AnimatedImageFrame.qml b/ovos_workshop/res/ui/SYSTEM_AnimatedImageFrame.qml deleted file mode 100644 index 9631fb94..00000000 --- a/ovos_workshop/res/ui/SYSTEM_AnimatedImageFrame.qml +++ /dev/null @@ -1,83 +0,0 @@ -import QtQuick.Layouts 1.4 -import QtQuick 2.4 -import QtQuick.Controls 2.0 -import org.kde.kirigami 2.4 as Kirigami - -import Mycroft 1.0 as Mycroft - -Mycroft.Delegate { - id: systemImageFrame - skillBackgroundColorOverlay: "#000000" - property bool hasTitle: sessionData.title.length > 0 ? true : false - property bool hasCaption: sessionData.caption.length > 0 ? true : false - - ColumnLayout { - id: systemImageFrameLayout - anchors.fill: parent - - Kirigami.Heading { - id: systemImageTitle - visible: hasTitle - enabled: hasTitle - Layout.fillWidth: true - Layout.preferredHeight: paintedHeight + Kirigami.Units.largeSpacing - level: 3 - text: sessionData.title - wrapMode: Text.Wrap - font.family: "Noto Sans" - font.weight: Font.Bold - } - - AnimatedImage { - id: systemImageDisplay - visible: true - enabled: true - Layout.fillWidth: true - Layout.fillHeight: true - source: sessionData.image - property var fill: sessionData.fill - - onFillChanged: { - console.log(fill) - if(fill == "PreserveAspectCrop"){ - systemImageDisplay.fillMode = 2 - } else if (fill == "PreserveAspectFit"){ - console.log("inFit") - systemImageDisplay.fillMode = 1 - } else if (fill == "Stretch"){ - systemImageDisplay.fillMode = 0 - } else { - systemImageDisplay.fillMode = 0 - } - } - - - Rectangle { - id: systemImageCaptionBox - visible: hasCaption - enabled: hasCaption - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.right: parent.right - height: systemImageCaption.paintedHeight - color: "#95000000" - - Kirigami.Heading { - id: systemImageCaption - level: 2 - anchors.left: parent.left - anchors.leftMargin: Kirigami.Units.largeSpacing - anchors.right: parent.right - anchors.rightMargin: Kirigami.Units.largeSpacing - anchors.verticalCenter: parent.verticalCenter - text: sessionData.caption - wrapMode: Text.Wrap - font.family: "Noto Sans" - font.weight: Font.Bold - } - } - } - } -} - - diff --git a/ovos_workshop/res/ui/SYSTEM_HtmlFrame.qml b/ovos_workshop/res/ui/SYSTEM_HtmlFrame.qml deleted file mode 100644 index fb5dcc6a..00000000 --- a/ovos_workshop/res/ui/SYSTEM_HtmlFrame.qml +++ /dev/null @@ -1,20 +0,0 @@ -import QtQuick.Layouts 1.4 -import QtQuick 2.4 -import QtQuick.Controls 2.0 -import org.kde.kirigami 2.4 as Kirigami - -import Mycroft 1.0 as Mycroft - -Mycroft.Delegate { - id: systemHtmlFrame - skillBackgroundColorOverlay: "#000000" - - Loader { - id: webViewHtmlLoader - source: "WebViewHtmlFrame.qml" - anchors.fill: parent - property var pageHtml: sessionData.html - property var resourceLocation: sessionData.resourceLocation - } -} - diff --git a/ovos_workshop/res/ui/SYSTEM_ImageFrame.qml b/ovos_workshop/res/ui/SYSTEM_ImageFrame.qml deleted file mode 100644 index d8b0042b..00000000 --- a/ovos_workshop/res/ui/SYSTEM_ImageFrame.qml +++ /dev/null @@ -1,83 +0,0 @@ -import QtQuick.Layouts 1.4 -import QtQuick 2.4 -import QtQuick.Controls 2.0 -import org.kde.kirigami 2.4 as Kirigami - -import Mycroft 1.0 as Mycroft - -Mycroft.Delegate { - id: systemImageFrame - skillBackgroundColorOverlay: "#000000" - property bool hasTitle: sessionData.title.length > 0 ? true : false - property bool hasCaption: sessionData.caption.length > 0 ? true : false - - ColumnLayout { - id: systemImageFrameLayout - anchors.fill: parent - - Kirigami.Heading { - id: systemImageTitle - visible: hasTitle - enabled: hasTitle - Layout.fillWidth: true - Layout.preferredHeight: paintedHeight + Kirigami.Units.largeSpacing - level: 3 - text: sessionData.title - wrapMode: Text.Wrap - font.family: "Noto Sans" - font.weight: Font.Bold - } - - Image { - id: systemImageDisplay - visible: true - enabled: true - Layout.fillWidth: true - Layout.fillHeight: true - source: sessionData.image - property var fill: sessionData.fill - - onFillChanged: { - console.log(fill) - if(fill == "PreserveAspectCrop"){ - systemImageDisplay.fillMode = 2 - } else if (fill == "PreserveAspectFit"){ - console.log("inFit") - systemImageDisplay.fillMode = 1 - } else if (fill == "Stretch"){ - systemImageDisplay.fillMode = 0 - } else { - systemImageDisplay.fillMode = 0 - } - } - - - Rectangle { - id: systemImageCaptionBox - visible: hasCaption - enabled: hasCaption - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.right: parent.right - height: systemImageCaption.paintedHeight - color: "#95000000" - - Kirigami.Heading { - id: systemImageCaption - level: 2 - anchors.left: parent.left - anchors.leftMargin: Kirigami.Units.largeSpacing - anchors.right: parent.right - anchors.rightMargin: Kirigami.Units.largeSpacing - anchors.verticalCenter: parent.verticalCenter - text: sessionData.caption - wrapMode: Text.Wrap - font.family: "Noto Sans" - font.weight: Font.Bold - } - } - } - } -} - - diff --git a/ovos_workshop/res/ui/SYSTEM_MediaCollectionSkillHomescreen.qml b/ovos_workshop/res/ui/SYSTEM_MediaCollectionSkillHomescreen.qml deleted file mode 100644 index f0f4bf71..00000000 --- a/ovos_workshop/res/ui/SYSTEM_MediaCollectionSkillHomescreen.qml +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright 2018 by Aditya Mehra - * Copyright 2018 Marco Martin - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -import QtQuick 2.9 -import QtQuick.Layouts 1.4 -import QtGraphicalEffects 1.0 -import QtQuick.Controls 2.3 -import org.kde.kirigami 2.8 as Kirigami -import Mycroft 1.0 as Mycroft -import "views" as Views -import "delegates" as Delegates - -Mycroft.Delegate { - id: delegate - property bool busyIndicate: false - - fillWidth: true - - leftPadding: 0 - rightPadding: 0 - topPadding: 0 - bottomPadding: 0 - - skillBackgroundSource: "https://source.unsplash.com/weekly?abstract" - - function highlightActiveCategory(cat){ - switch(cat){ - case "Home": - historyCatButton.checked = false - searchCatButton.checked = false - homeCatButton.checked = true - break; - case "History": - searchCatButton.checked = false - homeCatButton.checked = false - historyCatButton.checked = true - break; - case "Search": - homeCatButton.checked = false - historyCatButton.checked = false - searchCatButton.checked = true - break; - } - } - - Connections { - target: Mycroft.MycroftController - onIntentRecevied: { - if(type == "speak") { - busyIndicatorPop.close() - busyIndicate = false - } - } - } - - onFocusChanged: { - busyIndicatorPop.close() - busyIndicate = false - if(delegate.focus){ - console.log("focus is here") - } - } - - Keys.onBackPressed: { - parent.parent.parent.currentIndex++ - parent.parent.parent.currentItem.contentItem.forceActiveFocus() - } - - - contentItem: ColumnLayout { - id: colLay1 - - Rectangle { - color: Qt.rgba(0, 0, 0, 0.8) - Layout.fillWidth: true - Layout.preferredHeight: Kirigami.Units.gridUnit * 3 - Layout.maximumHeight: Kirigami.Units.gridUnit * 4 - z: 100 - - TopBarTabButton { - id: backButton - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter - anchors.leftMargin: Kirigami.Units.largeSpacing - source: "images/back.png" - onClicked: { - Mycroft.MycroftController.sendRequest("mycroft.gui.screen.close", {}) - } - } - - RowLayout { - id: categoryRepeater - anchors { - right: parent.right - top: parent.top - bottom: parent.bottom - } - width: parent.width / 2 - anchors.leftMargin: Kirigami.Units.gridUnit - anchors.rightMargin: Kirigami.Units.gridUnit - - TopBarTabButton { - id: homeCatButton - KeyNavigation.right: historyCatButton - KeyNavigation.down: categoryLayout - checked: true - source: "images/home.png" - onClicked: { - categoryLayout.pop(categoryLayout.find(function(item) { - return item.name == "homeCat";})) - highlightActiveCategory("Home") - } - } - - TopBarTabButton { - id: historyCatButton - KeyNavigation.left: homeCatButton - KeyNavigation.right: searchCatButton - KeyNavigation.down: categoryLayout - checked: false - source: "images/history.png" - onClicked: { - if(categoryLayout.depth >= 2) { - categoryLayout.pop(null) - } - categoryLayout.push(historyCat) - highlightActiveCategory("History") - } - } - - TopBarTabButton { - id: searchCatButton - KeyNavigation.left: historyCatButton - KeyNavigation.down: categoryLayout - checked: false - source: "images/search.png" - onClicked: { - if(categoryLayout.depth >= 2) { - categoryLayout.pop(null) - } - categoryLayout.push(searchCat) - highlightActiveCategory("Search") - } - } - } - } - - Component { - id: homeCat - CategoryBoxHomeView { - id: homeCatView - } - } - - Component { - id: historyCat - CategoryBoxHistoryView { - id: historyCatView - } - } - - Component { - id: searchCat - CategoryBoxSearchView { - id: searchCatView - } - } - - StackView { - id: categoryLayout - Layout.fillWidth: true - Layout.fillHeight: true - - Component.onCompleted: { - categoryLayout.push(homeCat) - } - } - } - - Popup { - id: busyIndicatorPop - width: parent.width - height: parent.height - background: Rectangle { - anchors.fill: parent - color: Qt.rgba(0, 0, 0, 0.5) - } - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent - - BusyIndicator { - running: busyIndicate - anchors.centerIn: parent - } - - onOpened: { - busyIndicate = true - } - - onClosed: { - busyIndicate = false - } - } -} - diff --git a/ovos_workshop/res/ui/SYSTEM_SkillSettings.qml b/ovos_workshop/res/ui/SYSTEM_SkillSettings.qml deleted file mode 100644 index 6f5e6093..00000000 --- a/ovos_workshop/res/ui/SYSTEM_SkillSettings.qml +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Copyright 2018 Aditya Mehra - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -import QtQuick.Layouts 1.4 -import QtQuick 2.9 -import QtQuick.Controls 2.3 -import org.kde.kirigami 2.11 as Kirigami -import Mycroft 1.0 as Mycroft - -Mycroft.Delegate { - id: skillSettingsView - anchors.fill: parent - property var skillsConfig: sessionData.skillsConfig - property var skill_id - fillWidth: true - - function selectSettingUpdated(key, value){ - var skillevent = skill_id + ".settings.set" - triggerGuiEvent(skillevent, {"setting_key": key, "setting_value": value}) - } - - function generate_settings_ui(mData, comp) { - if (mData.type == "select") { - var newObject = Qt.createComponent("settings_ui/settingButton.qml") - var available_values = sanitize_values(mData.options.split(";")) - for (var i = 0; i < available_values.length; i++) { - var rbutton = newObject.createObject(comp, {checked: mData.value.toString() == available_values[i] ? 1 : 0 , text: available_values[i], "key": mData.name, "value": available_values[i]}); - rbutton.clicked.connect(selectSettingUpdated) - } - } - if (mData.type == "checkbox") { - var newObject = Qt.createComponent("settings_ui/settingCheckBox.qml") - var rbutton = newObject.createObject(comp, {checked: mData.value.toString() == "true" ? 1 : 0, text: mData.value == "true" ? "Disable" : "Enable", "key": mData.name, "value": mData.value}); - rbutton.clicked.connect(selectSettingUpdated) - } - if (mData.type == "text") { - var newObject = Qt.createComponent("settings_ui/settingTextBox.qml") - var rbutton = newObject.createObject(comp, {text: mData.value, "key": mData.name, "value": mData.value}); - rbutton.clicked.connect(selectSettingUpdated) - } - if (mData.type == "password") { - var newObject = Qt.createComponent("settings_ui/settingPasswordBox.qml") - var rbutton = newObject.createObject(comp, {text: mData.value, "key": mData.name, "value": mData.value}); - rbutton.clicked.connect(selectSettingUpdated) - } - if (mData.type == "number") { - var newObject = Qt.createComponent("settings_ui/settingNumberBox.qml") - var rbutton = newObject.createObject(comp, {text: mData.value, "key": mData.name, "value": mData.value}); - rbutton.clicked.connect(selectSettingUpdated) - } - } - - function sanitize_values(mValues) { - var val_listing = [] - for (var i = 0; i < mValues.length; i++) { - if (mValues[i].includes('|')) { - var splitVals = mValues[i].split("|")[1] - val_listing.push(splitVals.toLowerCase()) - } else { - val_listing.push(mValues[i]) - } - } - return val_listing - } - - onSkillsConfigChanged: { - skillConfigView.update() - if(skillsConfig !== null){ - skillConfigView.model = skillsConfig.sections - skillSettingsView.skill_id = skillsConfig.skill_id - var skillname = skill_id.split(".")[0] - configPageHeading.text = skillname.replace("-", " ") + " Configuration" - } - } - - Connections { - target: Mycroft.MycroftController - onIntentRecevied: { - if(type == "mycroft.skills.settings.changed"){ - var skillevent = skill_id + ".settings.update" - triggerGuiEvent(skillevent, {}) - } - } - } - - Item { - id: topArea - anchors.left: parent.left - anchors.right: parent.right - anchors.top: parent.top - height: Kirigami.Units.gridUnit * 2 - - Kirigami.Heading { - id: configPageHeading - level: 1 - wrapMode: Text.WordWrap - anchors.centerIn: parent - font.capitalization: Font.Capitalize - font.bold: true - color: Kirigami.Theme.linkColor - } - } - - Flickable { - anchors.top: topArea.bottom - anchors.topMargin: Kirigami.Units.largeSpacing - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: areaSep.top - anchors.bottomMargin: Kirigami.Units.smallSpacing - contentHeight: scvGrid.implicitHeight - clip: true - - GridLayout { - id: scvGrid - width: parent.width - columns: scvGrid.width > 600 ? 2 : 1 - rowSpacing: Kirigami.Units.smallSpacing - - Repeater { - id: skillConfigView - clip: true - - delegate: Control { - id: delegateRoot - Layout.alignment: Qt.AlignTop - Layout.fillWidth: true - - background: Rectangle { - color: "#1d1d1d" - radius: 10 - } - - contentItem: Item { - implicitWidth: scvGrid.width > 600 ? scvGrid.width / 2 : scvGrid.width - implicitHeight: delegateLayout.implicitHeight + Kirigami.Units.largeSpacing - - ColumnLayout { - id: delegateLayout - anchors.left: parent.left - anchors.right: parent.right - spacing: Kirigami.Units.largeSpacing - - Rectangle { - id: skillNameBlock - color: Kirigami.Theme.linkColor - Layout.fillWidth: true - Layout.margins: Kirigami.Units.largeSpacing - Layout.preferredHeight: skillName.contentHeight + Kirigami.Units.smallSpacing - radius: 3 - - Kirigami.Heading { - id: skillName - elide: Text.ElideRight - font.weight: Font.DemiBold - text: modelData.name - width: parent.width - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - level: 2 - } - } - - Repeater { - id: gFields - model: modelData.fields - - delegate: GridLayout { - id: skillSettingType - Layout.fillWidth: true - Layout.margins: Kirigami.Units.largeSpacing - Layout.alignment: Qt.AlignLeft | Qt.AlignTop - columns: switch(modelData.type) { - case "text": return 1; - case "password" : return 1; - case "select" : - var opts_length = sanitize_values(modelData.options.split(";")).length; - return opts_length <= 3 ? 1 : parent.width / modelData.options.length - case "number" : return 1; - default: return 2; - } - - Kirigami.Heading { - id: skillSettingName - Layout.alignment: Qt.AlignLeft - elide: Text.ElideRight - text: modelData.label - Layout.fillWidth: true - wrapMode: Text.WordWrap; - font.capitalization: Font.Capitalize - textFormat: Text.AutoText - level: 3 - } - - ButtonGroup { - id: settingGroup - } - - Component.onCompleted: { - generate_settings_ui(modelData, skillSettingType) - skillConfigView.update() - } - } - } - } - } - } - } - } - } - - Kirigami.Separator { - id: areaSep - anchors.bottom: bottomArea.top - anchors.left: parent.left - anchors.right: parent.right - height: 1 - } - - Item { - id: bottomArea - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: parent.bottom - anchors.bottomMargin: Kirigami.Units.largeSpacing * 1.15 - height: backIcon.implicitHeight + Kirigami.Units.largeSpacing * 1.15 - - RowLayout { - anchors.fill: parent - - Kirigami.Icon { - id: backIcon - source: "go-previous" - Layout.preferredHeight: Kirigami.Units.iconSizes.medium - Layout.preferredWidth: Kirigami.Units.iconSizes.medium - } - - Kirigami.Heading { - level: 2 - wrapMode: Text.WordWrap - Layout.alignment: Qt.AlignVCenter - verticalAlignment: Text.AlignVCenter - font.bold: true - text: "Back" - Layout.fillWidth: true - Layout.preferredHeight: Kirigami.Units.gridUnit * 2 - } - } - - MouseArea { - anchors.fill: parent - onClicked: { - var skillevent = skill_id + ".settings.remove_page" - triggerGuiEvent(skillevent, {}) - } - } - } -} diff --git a/ovos_workshop/res/ui/SYSTEM_TextFrame.qml b/ovos_workshop/res/ui/SYSTEM_TextFrame.qml deleted file mode 100644 index a2d50ed4..00000000 --- a/ovos_workshop/res/ui/SYSTEM_TextFrame.qml +++ /dev/null @@ -1,39 +0,0 @@ -import QtQuick.Layouts 1.4 -import QtQuick 2.4 -import QtQuick.Controls 2.0 -import org.kde.kirigami 2.4 as Kirigami - -import Mycroft 1.0 as Mycroft - -Mycroft.ProportionalDelegate { - id: systemTextFrame - skillBackgroundColorOverlay: "#000000" - property bool hasTitle: sessionData.title.length > 0 ? true : false - - Component.onCompleted: { - console.log(hasTitle) - } - - Mycroft.AutoFitLabel { - id: systemTextFrameTitle - Layout.fillWidth: true - Layout.preferredHeight: proportionalGridUnit * 20 - wrapMode: Text.Wrap - visible: hasTitle - enabled: hasTitle - font.family: "Noto Sans" - font.weight: Font.Bold - text: sessionData.title - } - - Mycroft.AutoFitLabel { - id: systemTextFrameMainBody - Layout.fillWidth: true - Layout.preferredHeight: proportionalGridUnit * 30 - wrapMode: Text.Wrap - font.family: "Noto Sans" - font.weight: Font.Bold - text: sessionData.text - } -} - diff --git a/ovos_workshop/res/ui/SYSTEM_UrlFrame.qml b/ovos_workshop/res/ui/SYSTEM_UrlFrame.qml deleted file mode 100644 index 618225c3..00000000 --- a/ovos_workshop/res/ui/SYSTEM_UrlFrame.qml +++ /dev/null @@ -1,19 +0,0 @@ -import QtQuick.Layouts 1.4 -import QtQuick 2.4 -import QtQuick.Controls 2.0 -import org.kde.kirigami 2.4 as Kirigami - -import Mycroft 1.0 as Mycroft - -Mycroft.Delegate { - id: systemUrlFrame - skillBackgroundColorOverlay: "#000000" - - Loader { - id: webViewUrlLoader - source: "WebViewUrlFrame.qml" - anchors.fill: parent - property var pageUrl: sessionData.url - } -} - diff --git a/ovos_workshop/res/ui/SYSTEM_VideoPlayer.qml b/ovos_workshop/res/ui/SYSTEM_VideoPlayer.qml deleted file mode 100644 index b4cdb6df..00000000 --- a/ovos_workshop/res/ui/SYSTEM_VideoPlayer.qml +++ /dev/null @@ -1,225 +0,0 @@ -import QtMultimedia 5.12 -import QtQuick.Layouts 1.4 -import QtQuick 2.9 -import QtQuick.Controls 2.12 as Controls -import org.kde.kirigami 2.10 as Kirigami -import QtQuick.Window 2.3 -import QtGraphicalEffects 1.0 -import Mycroft 1.0 as Mycroft -import "." as Local - -Mycroft.Delegate { - id: root - - property var videoSource: sessionData.video - property var videoStatus: sessionData.playStatus - property var videoRepeat: sessionData.playerRepeat - property var videoThumb: sessionData.videoThumb - property var videoTitle: sessionData.title - property bool busyIndicate: false - - fillWidth: true - background: Rectangle { - color: "black" - } - leftPadding: 0 - topPadding: 0 - rightPadding: 0 - bottomPadding: 0 - - onEnabledChanged: syncStatusTimer.restart() - onVideoSourceChanged: syncStatusTimer.restart() - - Component.onCompleted: { - syncStatusTimer.restart() - } - - Keys.onDownPressed: { - controlBarItem.opened = true - controlBarItem.forceActiveFocus() - } - - onFocusChanged: { - video.forceActiveFocus(); - } - - onVideoRepeatChanged: { - if(typeof videoRepeat !== "undefined" && typeof videoRepeat == "boolean"){ - if(videoRepeat){ - video.loops = MediaPlayer.Infinite - video.flushMode = VideoOutput.LastFrame - } - } else if(typeof videoRepeat !== "undefined" && typeof videoRepeat == "number"){ - if(videoRepeat > 1){ - video.loops = videoRepeat - video.flushMode = VideoOutput.LastFrame - } - } else { - video.loops = 1 - video.flushMode = VideoOutput.EmptyFrame - } - } - - onVideoStatusChanged: { - switch(videoStatus){ - case "stop": - video.stop(); - break; - case "pause": - video.pause() - break; - case "play": - video.play() - delay(6000, function() { - infomationBar.visible = false; - }) - break; - } - } - - Connections { - target: Window.window - onVisibleChanged: { - if(video.playbackState == MediaPlayer.PlayingState) { - video.stop() - } - } - } - - Timer { - id: syncStatusTimer - interval: 0 - onTriggered: { - if (enabled && videoStatus == "play") { - video.play(); - } else if (videoStatus == "stop") { - video.stop(); - } else { - video.pause(); - } - } - } - - Timer { - id: delaytimer - } - - function delay(delayTime, cb) { - delaytimer.interval = delayTime; - delaytimer.repeat = false; - delaytimer.triggered.connect(cb); - delaytimer.start(); - } - - controlBar: Local.SeekControl { - id: seekControl - anchors { - bottom: parent.bottom - } - title: videoTitle - videoControl: video - duration: video.duration - playPosition: video.position - onSeekPositionChanged: video.seek(seekPosition); - z: 1000 - } - - Item { - id: videoRoot - anchors.fill: parent - - Rectangle { - id: infomationBar - anchors.left: parent.left - anchors.right: parent.right - anchors.top: parent.top - visible: false - color: Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.6) - implicitHeight: vidTitle.implicitHeight + Kirigami.Units.largeSpacing * 2 - z: 1001 - - onVisibleChanged: { - delay(15000, function() { - infomationBar.visible = false; - }) - } - - Controls.Label { - id: vidTitle - visible: true - maximumLineCount: 2 - wrapMode: Text.Wrap - anchors.left: parent.left - anchors.leftMargin: Kirigami.Units.largeSpacing - anchors.verticalCenter: parent.verticalCenter - text: videoTitle - z: 100 - } - } - - Video { - id: video - anchors.fill: parent - focus: true - autoLoad: true - autoPlay: false - loops: 1 - source: videoSource - - Keys.onReturnPressed: { - video.playbackState == MediaPlayer.PlayingState ? video.pause() : video.play() - } - - Keys.onDownPressed: { - controlBarItem.opened = true - controlBarItem.forceActiveFocus() - } - - MouseArea { - anchors.fill: parent - onClicked: { - controlBarItem.opened = !controlBarItem.opened - } - } - - onStatusChanged: { - console.log(status) - if(status == MediaPlayer.EndOfMedia) { - triggerGuiEvent("video.media.playback.ended", {}) - busyIndicatorPop.enabled = false - } - if(status == MediaPlayer.Loading) { - busyIndicatorPop.visible = true - busyIndicatorPop.enabled = true - } - if(status == MediaPlayer.Loaded || status == MediaPlayer.Buffered){ - busyIndicatorPop.visible = false - busyIndicatorPop.enabled = false - } - } - - Rectangle { - id: busyIndicatorPop - width: parent.width - height: parent.height - color: Qt.rgba(0, 0, 0, 0.2) - visible: false - enabled: false - - Controls.BusyIndicator { - id: busyIndicate - running: busyIndicate - anchors.centerIn: parent - } - - onEnabledChanged: { - if(busyIndicatorPop.enabled){ - busyIndicate.running = true - } else { - busyIndicate.running = false - } - } - } - } - } -} diff --git a/ovos_workshop/res/ui/SYSTEM_status.qml b/ovos_workshop/res/ui/SYSTEM_status.qml deleted file mode 100644 index 6cefd254..00000000 --- a/ovos_workshop/res/ui/SYSTEM_status.qml +++ /dev/null @@ -1,44 +0,0 @@ -import QtQuick.Layouts 1.4 -import QtQuick 2.4 -import QtQuick.Controls 2.0 -import org.kde.kirigami 2.4 as Kirigami - -import Mycroft 1.0 as Mycroft - -Mycroft.ProportionalDelegate { - id: root - skillBackgroundColorOverlay: sessionData.bgColor - - ColumnLayout { - id: grid - anchors.centerIn: parent - - Image { - id: statusIcon - visible: true - enabled: true - anchors.horizontalCenter: grid.horizontalCenter - Layout.preferredWidth: proportionalGridUnit * 50 - Layout.preferredHeight: proportionalGridUnit * 50 - source: sessionData.icon - } - - /* Add some spacing between icon and text */ - Item { - height: Kirigami.Units.largeSpacing - } - - Label { - id: statusLabel - Layout.alignment: Qt.AlignHCenter - font.pixelSize: 65 - wrapMode: Text.WordWrap - renderType: Text.NativeRendering - font.family: "Noto Sans Display" - font.styleName: "Black" - font.capitalization: Font.AllUppercase - text: sessionData.label - color: "white" - } - } -} \ No newline at end of file diff --git a/ovos_workshop/res/ui/SeekControl.qml b/ovos_workshop/res/ui/SeekControl.qml deleted file mode 100644 index 9ac25d2d..00000000 --- a/ovos_workshop/res/ui/SeekControl.qml +++ /dev/null @@ -1,315 +0,0 @@ -import QtMultimedia 5.12 -import QtQuick.Layouts 1.4 -import QtQuick 2.9 -import QtQuick.Controls 2.12 as Controls -import org.kde.kirigami 2.10 as Kirigami -import QtQuick.Templates 2.2 as Templates -import QtGraphicalEffects 1.0 - -import Mycroft 1.0 as Mycroft - -Item { - id: seekControl - property bool opened: false - property int duration: 0 - property int playPosition: 0 - property int seekPosition: 0 - property bool enabled: true - property bool seeking: false - property var videoControl - property string title - - property var nextAction: "next" - property var previousAction: "previous" - - clip: true - implicitWidth: parent.width - implicitHeight: mainLayout.implicitHeight + Kirigami.Units.largeSpacing * 2 - opacity: opened - - onOpenedChanged: { - if (opened) { - hideTimer.restart(); - } - } - - onFocusChanged: { - if(focus) { - backButton.forceActiveFocus() - } - } - - Timer { - id: hideTimer - interval: 5000 - onTriggered: { - seekControl.opened = false; - videoRoot.forceActiveFocus(); - } - } - - Rectangle { - width: parent.width - height: parent.height - color: Qt.rgba(0, 0, 0, 0.8) - y: opened ? 0 : parent.height - - ColumnLayout { - id: mainLayout - - anchors { - fill: parent - margins: Kirigami.Units.largeSpacing - } - - RowLayout { - id: mainLayout2 - Layout.fillHeight: true - - Controls.RoundButton { - id: button - Layout.preferredWidth: parent.width > 600 ? Kirigami.Units.iconSizes.large : Kirigami.Units.iconSizes.medium - Layout.preferredHeight: Layout.preferredWidth - highlighted: focus ? 1 : 0 - z: 1000 - - background: Rectangle { - radius: 200 - color: "#1a1a1a" - border.width: 1.25 - border.color: "white" - } - - contentItem: Item { - Image { - width: parent.width - Kirigami.Units.largeSpacing - height: width - anchors.centerIn: parent - source: videoControl.playbackState === MediaPlayer.PlayingState ? Qt.resolvedUrl("images/media-pause.svg") : Qt.resolvedUrl("images/media-play.svg") - } - } - - onClicked: { - video.playbackState === MediaPlayer.PlayingState ? video.pause() : video.play(); - hideTimer.restart(); - } - KeyNavigation.up: video - KeyNavigation.left: backButton - KeyNavigation.right: slider - Keys.onReturnPressed: { - video.playbackState === MediaPlayer.PlayingState ? video.pause() : video.play(); - hideTimer.restart(); - } - onFocusChanged: { - hideTimer.restart(); - } - } - - Controls.RoundButton { - id: buttonPrev - Layout.preferredWidth: parent.width > 600 ? Kirigami.Units.iconSizes.large : Kirigami.Units.iconSizes.medium - Layout.preferredHeight: Layout.preferredWidth - highlighted: focus ? 1 : 0 - z: 1000 - - background: Rectangle { - radius: 200 - color: "#1a1a1a" - border.width: 1.25 - border.color: "white" - } - - contentItem: Item { - Image { - width: parent.width - Kirigami.Units.largeSpacing - height: width - anchors.centerIn: parent - source: Qt.resolvedUrl("images/media-previous.svg") - } - } - - onClicked: { - triggerGuiEvent(seekControl.previousAction, {}) - hideTimer.restart(); - } - KeyNavigation.up: video - KeyNavigation.left: backButton - KeyNavigation.right: slider - Keys.onReturnPressed: { - triggerGuiEvent(seekControl.previousAction, {}) - hideTimer.restart(); - } - onFocusChanged: { - hideTimer.restart(); - } - } - - Controls.RoundButton { - id: buttonNext - Layout.preferredWidth: parent.width > 600 ? Kirigami.Units.iconSizes.large : Kirigami.Units.iconSizes.medium - Layout.preferredHeight: Layout.preferredWidth - highlighted: focus ? 1 : 0 - z: 1000 - - background: Rectangle { - radius: 200 - color: "#1a1a1a" - border.width: 1.25 - border.color: "white" - } - - contentItem: Item { - Image { - width: parent.width - Kirigami.Units.largeSpacing - height: width - anchors.centerIn: parent - source: Qt.resolvedUrl("images/media-next.svg") - } - } - - onClicked: { - triggerGuiEvent(seekControl.nextAction, {}) - hideTimer.restart(); - } - KeyNavigation.up: video - KeyNavigation.left: backButton - KeyNavigation.right: slider - Keys.onReturnPressed: { - triggerGuiEvent(seekControl.nextAction, {}) - hideTimer.restart(); - } - onFocusChanged: { - hideTimer.restart(); - } - } - - Templates.Slider { - id: slider - Layout.fillWidth: true - Layout.alignment: Qt.AlignVCenter - implicitHeight: Kirigami.Units.gridUnit - value: seekControl.playPosition - from: 0 - to: seekControl.duration - z: 1000 - property bool navSliderItem - property int minimumValue: 0 - property int maximumValue: 20 - onMoved: { - seekControl.seekPosition = value; - hideTimer.restart(); - } - - onNavSliderItemChanged: { - if(slider.navSliderItem){ - recthandler.color = "red" - } else if (slider.focus) { - recthandler.color = Kirigami.Theme.linkColor - } - } - - onFocusChanged: { - if(!slider.focus){ - recthandler.color = Kirigami.Theme.textColor - } else { - recthandler.color = Kirigami.Theme.linkColor - } - } - - handle: Rectangle { - id: recthandler - x: slider.position * (parent.width - width) - implicitWidth: Kirigami.Units.gridUnit - implicitHeight: implicitWidth - radius: width - color: Kirigami.Theme.textColor - } - background: Item { - Rectangle { - id: groove - anchors { - verticalCenter: parent.verticalCenter - left: parent.left - right: parent.right - } - radius: height - height: Math.round(Kirigami.Units.gridUnit/3) - color: Qt.rgba(Kirigami.Theme.textColor.r, Kirigami.Theme.textColor.g, Kirigami.Theme.textColor.b, 0.3) - Rectangle { - anchors { - left: parent.left - top: parent.top - bottom: parent.bottom - } - radius: height - color: Kirigami.Theme.highlightColor - width: slider.position * (parent.width - slider.handle.width/2) + slider.handle.width/2 - } - } - - Controls.Label { - anchors { - left: parent.left - top: groove.bottom - topMargin: Kirigami.Units.smallSpacing - } - horizontalAlignment: Text.AlignLeft - verticalAlignment: Text.AlignVCenter - text: formatTime(playPosition) - color: "white" - } - - Controls.Label { - anchors { - right: parent.right - top: groove.bottom - topMargin: Kirigami.Units.smallSpacing - } - horizontalAlignment: Text.AlignRight - verticalAlignment: Text.AlignVCenter - text: formatTime(duration) - } - } - KeyNavigation.up: video - KeyNavigation.left: button - Keys.onReturnPressed: { - hideTimer.restart(); - if(!navSliderItem){ - navSliderItem = true - } else { - navSliderItem = false - } - } - - Keys.onLeftPressed: { - console.log("leftPressedonSlider") - hideTimer.restart(); - if(navSliderItem) { - video.seek(video.position - 5000) - } else { - button.forceActiveFocus() - } - } - - Keys.onRightPressed: { - hideTimer.restart(); - if(navSliderItem) { - video.seek(video.position + 5000) - } - } - } - - } - } - } - - - function formatTime(timeInMs) { - if (!timeInMs || timeInMs <= 0) return "0:00" - var seconds = timeInMs / 1000; - var minutes = Math.floor(seconds / 60) - seconds = Math.floor(seconds % 60) - if (seconds < 10) seconds = "0" + seconds; - return minutes + ":" + seconds - } -} diff --git a/ovos_workshop/res/ui/TopBarTabButton.qml b/ovos_workshop/res/ui/TopBarTabButton.qml deleted file mode 100644 index 30bcf135..00000000 --- a/ovos_workshop/res/ui/TopBarTabButton.qml +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2018 by Aditya Mehra - * Copyright 2020 Marco Martin - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -import QtQuick 2.9 -import QtQuick.Layouts 1.4 -import QtQuick.Controls 2.3 as Controls -import org.kde.kirigami 2.8 as Kirigami - -Controls.Button { - id: control - Layout.fillHeight: true - Layout.fillWidth: true - property var source - - background: Rectangle { - Kirigami.Theme.colorSet: Kirigami.Theme.Button - color: control.activeFocus ? Kirigami.Theme.highlightColor : "transparent" - - Kirigami.Separator { - anchors { - left: parent.left - right: parent.right - bottom: parent.bottom - } - color: Kirigami.Theme.highlightColor - height: Kirigami.Units.smallSpacing - visible: control.checked - } - } - - contentItem: Item { - Image { - id: contentHome - width: Kirigami.Units.iconSizes.medium - height: Kirigami.Units.iconSizes.medium - anchors.centerIn: parent - source: control.source - } - } - - Keys.onReturnPressed: { - control.clicked() - } -} diff --git a/ovos_workshop/res/ui/WebViewHtmlFrame.qml b/ovos_workshop/res/ui/WebViewHtmlFrame.qml deleted file mode 100644 index ec080afb..00000000 --- a/ovos_workshop/res/ui/WebViewHtmlFrame.qml +++ /dev/null @@ -1,82 +0,0 @@ -import QtQuick 2.4 -import QtQuick.Controls 2.2 -import QtWebEngine 1.8 -import QtQuick.Controls 2.0 -import org.kde.kirigami 2.4 as Kirigami - -Item { - id: root - property var pageHtml: webViewHtmlLoader.pageHtml - property var resourceLocation: webViewHtmlLoader.resourceLocation ? webViewHtmlLoader.resourceLocation : "http://localhost" - - onResourceLocationChanged: { - console.log(resourceLocation) - } - - onPageHtmlChanged: { - if(pageHtml){ - webview.loadHtml(pageHtml, resourceLocation) - } - } - - WebEngineView { - id: webview - anchors.fill: parent - settings.autoLoadImages: true - settings.javascriptEnabled: true - settings.errorPageEnabled: true - settings.pluginsEnabled: true - settings.allowWindowActivationFromJavaScript: true - settings.javascriptCanOpenWindows: true - settings.fullScreenSupportEnabled: true - settings.autoLoadIconsForPage: true - settings.touchIconsEnabled: true - settings.webRTCPublicInterfacesOnly: true - - onNewViewRequested: function(request) { - if (!request.userInitiated) { - console.log("Warning: Blocked a popup window."); - } else if (request.destination === WebEngineView.NewViewInDialog) { - popuproot.open() - request.openIn(popupwebview); - } else { - request.openIn(webview); - } - } - - onJavaScriptDialogRequested: function(request) { - request.accepted = true; - } - } - - Popup { - id: popuproot - modal: true - focus: true - width: root.width - Kirigami.Units.largeSpacing * 1.25 - height: root.height - Kirigami.Units.largeSpacing * 1.25 - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent - anchors.centerIn: parent - - WebEngineView { - id: popupwebview - anchors.fill: parent - url: "about:blank" - settings.autoLoadImages: true - settings.javascriptEnabled: true - settings.errorPageEnabled: true - settings.pluginsEnabled: true - settings.allowWindowActivationFromJavaScript: true - settings.javascriptCanOpenWindows: true - settings.fullScreenSupportEnabled: true - settings.autoLoadIconsForPage: true - settings.touchIconsEnabled: true - settings.webRTCPublicInterfacesOnly: true - property string urlalias: popupwebview.url - - onNewViewRequested: function(request) { - console.log(request.destination) - } - } - } -} diff --git a/ovos_workshop/res/ui/WebViewUrlFrame.qml b/ovos_workshop/res/ui/WebViewUrlFrame.qml deleted file mode 100644 index c87d33f4..00000000 --- a/ovos_workshop/res/ui/WebViewUrlFrame.qml +++ /dev/null @@ -1,77 +0,0 @@ -import QtQuick 2.4 -import QtQuick.Controls 2.2 -import QtWebEngine 1.8 -import QtQuick.Controls 2.0 -import org.kde.kirigami 2.4 as Kirigami - -Item { - id: root - property var pageUrl: webViewUrlLoader.pageUrl - - onPageUrlChanged: { - if(typeof pageUrl !== "undefined" || typeof pageUrl !== null){ - webview.url = pageUrl - } - } - - WebEngineView { - id: webview - anchors.fill: parent - settings.autoLoadImages: true - settings.javascriptEnabled: true - settings.errorPageEnabled: true - settings.pluginsEnabled: true - settings.allowWindowActivationFromJavaScript: true - settings.javascriptCanOpenWindows: true - settings.fullScreenSupportEnabled: true - settings.autoLoadIconsForPage: true - settings.touchIconsEnabled: true - settings.webRTCPublicInterfacesOnly: true - - onNewViewRequested: function(request) { - if (!request.userInitiated) { - console.log("Warning: Blocked a popup window."); - } else if (request.destination === WebEngineView.NewViewInDialog) { - popuproot.open() - request.openIn(popupwebview); - } else { - request.openIn(webview); - } - } - - onJavaScriptDialogRequested: function(request) { - request.accepted = true; - } - } - - Popup { - id: popuproot - modal: true - focus: true - width: root.width - Kirigami.Units.largeSpacing * 1.25 - height: root.height - Kirigami.Units.largeSpacing * 1.25 - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent - anchors.centerIn: parent - - WebEngineView { - id: popupwebview - anchors.fill: parent - url: "about:blank" - settings.autoLoadImages: true - settings.javascriptEnabled: true - settings.errorPageEnabled: true - settings.pluginsEnabled: true - settings.allowWindowActivationFromJavaScript: true - settings.javascriptCanOpenWindows: true - settings.fullScreenSupportEnabled: true - settings.autoLoadIconsForPage: true - settings.touchIconsEnabled: true - settings.webRTCPublicInterfacesOnly: true - property string urlalias: popupwebview.url - - onNewViewRequested: function(request) { - console.log(request.destination) - } - } - } -} diff --git a/ovos_workshop/res/ui/delegates/GridVideoCard.qml b/ovos_workshop/res/ui/delegates/GridVideoCard.qml deleted file mode 100644 index 2d28742d..00000000 --- a/ovos_workshop/res/ui/delegates/GridVideoCard.qml +++ /dev/null @@ -1,147 +0,0 @@ -import QtQuick 2.9 -import QtQuick.Layouts 1.4 -import QtGraphicalEffects 1.0 -import QtQuick.Controls 2.3 -import org.kde.kirigami 2.8 as Kirigami -import Mycroft 1.0 as Mycroft - -ItemDelegate { - id: delegate - - readonly property bool isCurrent: { - videosListView.currentIndex == index && activeFocus && !videosListView - .moving - } - - property int borderSize: Kirigami.Units.smallSpacing - property int baseRadius: 3 - - z: isCurrent ? 2 : 0 - - leftPadding: Kirigami.Units.largeSpacing * 2 - topPadding: Kirigami.Units.largeSpacing * 2 - rightPadding: Kirigami.Units.largeSpacing * 2 - bottomPadding: Kirigami.Units.largeSpacing * 2 - - leftInset: Kirigami.Units.largeSpacing - topInset: Kirigami.Units.largeSpacing - rightInset: Kirigami.Units.largeSpacing - bottomInset: Kirigami.Units.largeSpacing - - implicitHeight: videosListView.cellHeight - - background: Item { - id: background - - Rectangle { - id: frame - anchors.fill: parent - color: Kirigami.Theme.backgroundColor - radius: delegate.baseRadius - border.width: delegate.activeFocus ? 4 : 0 - border.color: delegate.activeFocus ? Kirigami.Theme.linkColor : "transparent" - layer.enabled: true - layer.effect: DropShadow { - transparentBorder: false - horizontalOffset: 2 - verticalOffset: 2 - } - } - } - - contentItem: ColumnLayout { - spacing: Kirigami.Units.smallSpacing - - Item { - id: imgRoot - Layout.alignment: Qt.AlignTop - Layout.fillWidth: true - Layout.topMargin: -delegate.topPadding + delegate.topInset + extraBorder - Layout.leftMargin: -delegate.leftPadding + delegate.leftInset + extraBorder - Layout.rightMargin: -delegate.rightPadding + delegate.rightInset + extraBorder - Layout.preferredHeight: width * 0.5625 + delegate.baseRadius - property real extraBorder: 0 - - layer.enabled: true - layer.effect: OpacityMask { - maskSource: Rectangle { - x: imgRoot.x; - y: imgRoot.y - width: imgRoot.width - height: imgRoot.height - radius: delegate.baseRadius - } - } - - Image { - id: img - source: model.logo ? model.logo : "https://uroehr.de/vtube/view/img/video-placeholder.png" - anchors { - fill: parent - // To not round under - bottomMargin: delegate.baseRadius - } - opacity: 1 - fillMode: Image.PreserveAspectCrop - } - - states: [ - State { - when: delegate.isCurrent - PropertyChanges { - target: imgRoot - extraBorder: delegate.borderSize - } - }, - State { - when: !delegate.isCurrent - PropertyChanges { - target: imgRoot - extraBorder: 0 - } - } - ] - transitions: Transition { - onRunningChanged: { - // Optimize when animating the thumbnail - img.smooth = !running - } - NumberAnimation { - property: "extraBorder" - duration: Kirigami.Units.longDuration - easing.type: Easing.InOutQuad - } - } - } - - Kirigami.Heading { - id: videoLabel - Layout.fillWidth: true - Layout.alignment: Qt.AlignLeft | Qt.AlignTop - wrapMode: Text.Wrap - level: 3 - maximumLineCount: 1 - elide: Text.ElideRight - color: Kirigami.Theme.textColor - Component.onCompleted: { - text = model.title - } - } - } - - Keys.onReturnPressed: { - clicked() - } - - onClicked: { - videosListView.forceActiveFocus() - videosListView.currentIndex = index - busyIndicatorPop.open() - if(model.identifier != "showmore") { - triggerGuiEvent("ovos.common_play.collection.play", - {"modelData": {"title": model.title, "url": model.url, - "lang": model.lang, "logo": model.logo, "tags": model.tags, - "identifier": model.identifier, "skill_id": model.skill}}) - } - } -} diff --git a/ovos_workshop/res/ui/delegates/ListVideoCard.qml b/ovos_workshop/res/ui/delegates/ListVideoCard.qml deleted file mode 100644 index fd2ec655..00000000 --- a/ovos_workshop/res/ui/delegates/ListVideoCard.qml +++ /dev/null @@ -1,184 +0,0 @@ -import QtQuick 2.9 -import QtQuick.Layouts 1.4 -import QtGraphicalEffects 1.0 -import QtQuick.Controls 2.3 -import org.kde.kirigami 2.8 as Kirigami -import Mycroft 1.0 as Mycroft - -ItemDelegate { - id: delegate - - readonly property Flickable listView: { - var candidate = parent; - while (candidate) { - if (candidate instanceof Flickable) { - return candidate; - } - candidate = candidate.parent; - } - return null; - } - readonly property bool isCurrent: { - listView.currentIndex == index && activeFocus && !listView.moving - } - - property int borderSize: Kirigami.Units.smallSpacing - property int baseRadius: 3 - - z: isCurrent ? 2 : 0 - - leftPadding: Kirigami.Units.largeSpacing * 2 - topPadding: Kirigami.Units.largeSpacing * 2 - rightPadding: Kirigami.Units.largeSpacing * 2 - bottomPadding: Kirigami.Units.largeSpacing * 2 - - leftInset: Kirigami.Units.largeSpacing - topInset: Kirigami.Units.largeSpacing - rightInset: Kirigami.Units.largeSpacing - bottomInset: Kirigami.Units.largeSpacing - - implicitWidth: listView.cellWidth - height: parent.height - - background: Item { - id: background - - Rectangle { - id: frame - anchors.fill: parent - color: Kirigami.Theme.backgroundColor - radius: delegate.baseRadius - border.width: delegate.activeFocus ? 1 : 0 - border.color: delegate.activeFocus ? Kirigami.Theme.linkColor : "transparent" - layer.enabled: true - layer.effect: DropShadow { - transparentBorder: false - horizontalOffset: 2 - verticalOffset: 2 - } - } - } - - contentItem: ColumnLayout { - spacing: Kirigami.Units.smallSpacing - - Item { - id: imgRoot - Layout.alignment: Qt.AlignTop - Layout.fillWidth: true - Layout.topMargin: -delegate.topPadding + delegate.topInset + extraBorder - Layout.leftMargin: -delegate.leftPadding + delegate.leftInset + extraBorder - Layout.rightMargin: -delegate.rightPadding + delegate.rightInset + extraBorder - // Any width times 0.5625 is a 16:9 ratio - // Adding baseRadius is needed to prevent the bottom from being rounded - Layout.preferredHeight: model.identifier == "showmore" ? parent.height - Kirigami.Units.gridUnit : width * 0.5625 + delegate.baseRadius - // FIXME: another thing copied from AbstractDelegate - property real extraBorder: 0 - - layer.enabled: true - layer.effect: OpacityMask { - cached: true - maskSource: Rectangle { - x: imgRoot.x; - y: imgRoot.y - width: imgRoot.width - height: imgRoot.height - radius: delegate.baseRadius - } - } - - Image { - id: img - source: model.logo ? model.logo : "https://uroehr.de/vtube/view/img/video-placeholder.png" - anchors { - fill: parent - // To not round under - bottomMargin: delegate.baseRadius - } - opacity: 1 - fillMode: Image.PreserveAspectCrop - } - - states: [ - State { - when: delegate.isCurrent - PropertyChanges { - target: imgRoot - extraBorder: delegate.borderSize - } - }, - State { - when: !delegate.isCurrent - PropertyChanges { - target: imgRoot - extraBorder: 0 - } - } - ] - transitions: Transition { - onRunningChanged: { - // Optimize when animating the thumbnail - img.smooth = !running - } - NumberAnimation { - property: "extraBorder" - duration: Kirigami.Units.longDuration - easing.type: Easing.InOutQuad - } - } - } - - ColumnLayout { - Layout.fillWidth: model.identifier == "showmore" ? false : true - Layout.fillHeight: model.identifier == "showmore" ? false : true - // Compensate for blank space created from not rounding thumbnail bottom corners - Layout.topMargin: -delegate.baseRadius - Layout.alignment: Qt.AlignLeft | Qt.AlignTop - spacing: Kirigami.Units.smallSpacing - - Kirigami.Heading { - id: videoLabel - Layout.fillWidth: true - Layout.alignment: Qt.AlignLeft | Qt.AlignTop - wrapMode: Text.Wrap - level: 3 - //verticalAlignment: Text.AlignVCenter - maximumLineCount: 1 - elide: Text.ElideRight - color: Kirigami.Theme.textColor - Component.onCompleted: { - text = model.title - } - } - - RowLayout { - Layout.fillWidth: true - - Label { - id: videoViews - Layout.alignment: Qt.AlignLeft - Layout.rightMargin: Kirigami.Units.largeSpacing - elide: Text.ElideRight - color: Kirigami.Theme.textColor -// text: model.tags - } - } - } - } - - Keys.onReturnPressed: { - clicked() - } - - onClicked: { - listView.forceActiveFocus() - listView.currentIndex = index - busyIndicatorPop.open() - if(model.identifier != "showmore") { - triggerGuiEvent("ovos.common_play.collection.play", - {"modelData": {"title": model.title, "url": model.url, - "lang": model.lang, "logo": model.logo, "tags": model.tags, - "identifier": model.identifier, "skill_id": model.skill}}) - } - } -} diff --git a/ovos_workshop/res/ui/delegates/qmldir b/ovos_workshop/res/ui/delegates/qmldir deleted file mode 100644 index f34a4363..00000000 --- a/ovos_workshop/res/ui/delegates/qmldir +++ /dev/null @@ -1 +0,0 @@ -ListVideoCard 1.0 ListVideoCard.qml diff --git a/ovos_workshop/res/ui/icons/check-circle.svg b/ovos_workshop/res/ui/icons/check-circle.svg deleted file mode 100644 index b0619c06..00000000 --- a/ovos_workshop/res/ui/icons/check-circle.svg +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - diff --git a/ovos_workshop/res/ui/icons/info-circle.svg b/ovos_workshop/res/ui/icons/info-circle.svg deleted file mode 100644 index e6bb98d6..00000000 --- a/ovos_workshop/res/ui/icons/info-circle.svg +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - diff --git a/ovos_workshop/res/ui/icons/times-circle.svg b/ovos_workshop/res/ui/icons/times-circle.svg deleted file mode 100644 index 44befca9..00000000 --- a/ovos_workshop/res/ui/icons/times-circle.svg +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - diff --git a/ovos_workshop/res/ui/images/back.png b/ovos_workshop/res/ui/images/back.png deleted file mode 100644 index 6955e2e18698e6eed206f5139313e7f5068d268c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1772 zcmV>0zi%HedC$x+9UCVtO%jVz=psl(cf^E}3c5pxLSI(fgPqtiH@IcKl+_GbqN64BYKbnWx5Kl5kU4Da)-^?iHK zzJ$Q~&r4Ou0hrDt>J$Ds$VydbGLbqd5ecd~9RIFaA%p;cAr-jmgQ^Y%AcqkEsyh3h z-(wXJzK9G0P{9#ORp(NIf)#)$A_D-l<0wj17f^!Yzz+cW0%*lCl&Zc#2?{Xw(=_b~ zU_SuGF_x;nM+qEvezjWd24Ht*;MYj7jA=UT{BpTm0AK_KuE@E`;w7{&)lUd(t%RPWb+I`(q8peoLCBy$IhI_@Jtz4B-DM zBK?YTktfyzd=UvDgfo*Q*_iWCWmRp6G44x}q!8JZ>Y?*P2n`whJk(NEZHzJQEeiY) zLg-R(_z}Rs41Ou!p>%kRaaWPxhnyX8qVM!0fc{C6{2oH+mh)I6V~ksh2EWLsc>zEl z00#~Jtvi~DI$QJ8H0=RkU!I3GGx+B-QD^Y0)oND&yYj*Za1j%A2EV<%Jpr(lPwLho z{A}&tXaN5jCh8OZPX_R(Fj1fIe=ykX-^xUN!vD$u{yj|8*?E5U^K%3E_c2k2ov*6P z4c7cenW)3gSJfp3o&O9I_1XDv8o-~!M18LL3k=}TuRSKq&)9#_0RE!dX~Oa|{%0G& zf0yumPJmek@INGcpPm1p!KvOSgzppnGz0jn2;V3C+YR7P!G(Cy%{q6S07>xY`0D2RC z=PDj2@F9e7c8qaD&O;qi)rKTV4#XHqvlI2dKkJk|sXNR7eut_y#TX9~e&?%n96En+ zk|fPJ#GscK^gVF%$m5};Hn1ptj9gzmXFE-~I8 zW8}pir#t_14R-!e)t73P6_zsz&N7l-avvKylu?41YcX+I|!f`|99Y5f|Ujmw1`MQP6DSAsOk!%uYL@m z1b!u0Y9K+ohz!c^QDk|knm2~LV<16AL>f2={7!;J1`?zq(nJaTZVcxe-CZ=2sXAQ_ z0L(R#U<_0ByBy3mlHdZS>UR=60h_v*srr@SAtMPUGEKkB!VDt`u4bBkC&ArD5=>^A zekZ{#MjOMaOw;cqm|`Ts9Zb`&1lJl#FpX*YmEbZX31%`)zY<(xv@v{~Y5J95oY5qB zw)P?v%h%b#SR)DMPy)Xaj51mdUZDhjB^VAs3?{+C?05{-Q;A3rk)Z%81`;f$1U@%~ zK}1dm@RxxE?{hiuxfBEdrvhj*kYG6{flmpdh@70gdpPgo>7Q{DI9(0^^ak*UfdpT2 z5;$EB(lqS>U>CnzRL2rjtJSUmwi-yVmJ&FXpj)KHIQIiwOZ}QN#Iw4Zw(~aoozB1tWybA8N8!lAAmlb1b!v>)IfrRBGR7{ zIJ{Vt$*{~|IXEOD11W*iNua7r3?wK67)%NLO7NC}1XU3^gA(}N6TE73hnbFGs(vTI zJU*VzN$^76cNPI?Vxqp!4xa98^NUC$_W{L_;jvDP{t<*o&>iYf&X|WR3DSzro+IWz+~!6f=M;-uV5neDZzCBZa9(troREs0iaTd-G=o5 O0000 - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/ovos_workshop/res/ui/images/gridpage.jpg b/ovos_workshop/res/ui/images/gridpage.jpg deleted file mode 100644 index dddd6232e9e5d6cc5567bdbce19c080e9dd146b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31940 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 Y&>_=+5hMyb`fgTk_Yql!+-%$b0?U(BX#fBK diff --git a/ovos_workshop/res/ui/images/history.png b/ovos_workshop/res/ui/images/history.png deleted file mode 100644 index 584b9f954764fdf1361a0d5ed909d269eda16777..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2186 zcmV;52zB>~P)^FaiKsol9-4J z28oHpT|uEpB}$AKFjc`QAP8>MP!Odn-Dy96^tHBSX5L-qE`|I3d-uLO=bUfOY-i34 z5F$i~5FtW@2oWMgh!7z{gzyRsh#rQwMz@J$63#;=axn&Z7>-=@NAHe5oj@5%@iX>f zFDg)ORGlFNbQnJqcVaxU&=;u*KdM1Fj-eRqj6Zt3voo8M`4;Ws2p4lC(}L7^tWYqF zAM+@kqLKUg6nhQ@1i%zt!Oy7|PjWyH@dQrg4{V`+RPk;04mbt8nCs~-?qQz*lE60C zU%_g+k6$<;U=$Dl2XPm@!*fgv3<(6l2U$yR@f(NQr@+u>ya7hB3iB*|R*xE-L=#To z6j~5L1SyCj12IG_l+ub>##Y~Ff=tEtxXkq5x8r@3pc*x(K{HMntpLDeq#%kIV(5o_ z%)wyO{J&@v(A$}PH`gC%a;kHbMa)mMBx--ozFfdvtTI*d3pD&|{X==egovMO&=lWOwU;0Qii8 zf?`+Y6HMZEY3)~VnEMM90^r>W3a)oe2LfQeV$8qP!%p~NMNg38rtmtc`B!+iJS70G zlv1$4J;AR_h2H1GO!O0pE_J-bo%TOK8t+-|%Tzp*WfFb1Ch|tZx-hshjh2rS5-`jncZoK_p6yZ<(Z2ms0RX`3Bo*_D)=`NwBx2^i_0I5RlC8gxc-Z))BH$T>s2u00@vy(5pCzn!3O}LILkOC{w2g z0AQt1!+bsU-(M1&9T^}39u;c%jvfNWiMJ@73^SUW062v8qT~wM7uGt5$-<|r0snR+ zPMg^uLz&=3Du?PIK-`kH1!;rYsKr6yi&+i{AOK7gyf}{I2o^pNKAq~k2S^k40DGK` zvHE9ilDWzrI&K1EgijB*?dt}p5ma?qV7DV3F{cEGS5>sE6LNpUV)F}bIO$+lImF7GAq%PyU8p3S` zqbb3li+G0lhRN-369-cMRums<2=P;9vQdZ_&LVZS=TTfrkdbWCHzN8H`@&iWfQy|nNa@$6W7c4QaI9Dsm*~9U+JU|p0{hK*fig4lu zR?Kgc^^2mkHO#e4fas9M?~GZCt=aX0CDz=Q0GP_#75RTBSZJkFlr4v?JCYqQD73Xd z2!JVEuaI|umzyPl^MoaQXh$ilUQlSa=Z@$9U8YEWYvH!GoWq1=6$`&#XiqUKUQnoG z6O!|#$qpoWKVxbsOy_UHFNfHy7t>y#!Tk7nqbxqHJRdS!m1Zvqi#Iq?%ZwKkLTfrK z^SE0rP5Nbl@Qb&dsguYHmg>z5i)Vt)V7a6>h$_AlZ;j1#s*=hJmb#G^7w;C=vgR~- zcPN^`4MGhoIneo@o6HNAx||X_l%I8xcaW)4^JUxPKWT|d2)$sL7fF%4g}--5oTm8S z7)gS}W4hX9cQ5e9d;rYg0+QrvnM4BMW|vcBx_QAek5giESi~H;M9!4-Q7>!Lvx^rj z_x8Xlm61z=G06l-Z<<`(3tGK4-$cbcB&q)r&54q1>ui#O73<_x(m{HnJA4PL_A{lY zR*QS&ogHV5GBxQW{Dyu~$6(*+85Bn;4gNI&|1 z-YBg7|Ix%990xeMLZg7C34^n1{ObG$Dx>-B*uiU<1(+qG;}Vs@yqEu)D1RgUNk}08 z_T#T6uSVR=*7n_{7!6d=Bfi1;G%GwXem}n4b1?~7$V6Jgk7`hkGHk&*qtq?E{JCD=zhMj#it z=+p6+e{d9~*oS@ChYFM%)n{->J4A>OAwq-*5h6s05FtW@2;mF<1Mt4vd;Ei49{>OV M07*qoM6N<$f^0wjp#T5? diff --git a/ovos_workshop/res/ui/images/home.png b/ovos_workshop/res/ui/images/home.png deleted file mode 100644 index c6fdf598b3bd717bc1520ac7fd7ad521484e55af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1446 zcmb7^`!^GO9LK+#&1@rD%G?^6p>!Q`sW#V<%cGP_n=CT-OA+O98Eqmxu01VLi?EZ0 zqEHG?O9=5ix#hO4JcpxVJ#$=#hkxKX=Q*GA{=DDkea`2n&pEG5cQ=X>N&^J|P;zp# zJH6@5Eh)%vZo!EQU7IHF?@X}+8(Z`64X zKwWR=;PuJ=Vk?lc;+F&w5zZn{E8-Y&p>r0#iLUQ(>m8BAd{_vJRNth|BS1WmTzvO; zICK0KiJLoC)WUn06b&rHWLfd}sMx*2jc%@YG9j=5##kt*YR@^Vg;Pt~anwr60}1en zL1JA9>JgMfMjwJdP0DGATwOfLgb99efT~@X4rHe|r(r3G1ND+M(~a6PiJE@n{00>Y zJJdh=n7+e`v9QMsNxLZKPGP5N1l5K2+wrMchB6{h4jZ1dC0b?KL)8+NKrq7=$SM1A4o+XlWk*8fo&SYY`K;nZf;03Jo%+K9wLL#`$W}>vJ>{EKjJg%l`V`RCIhMnN&Af5ag8 zcYtowI{uClb^c84jPzivqF?zi)a8`xVG4D)lN#VXbSyQ@XK6HpyN6xDefT9LU?_U} z@zy(@sM~hWYSSnNWH!85*D2R0cxFyJ@%(^Fp3)6c=5v7;%Q?S^|G?gO)uPRT$}GQ> zJR|O-C>F*q!aVzxe;0u5rk_E8+LY*b1%x|?+sHaLYqK+3B+jGz>%>(%P*PruV zg?aB4X&K5+;<5eq59uYW>qi2e_B@>kA9t@XSzjTV>7%&s(&Am z6i%EQ9Nfy33&-4N#;6#k$I>D9G#b z!ibd$>qY6OFVI#mle#K4q15mwNS2e_&koX)Z4(*IdQFhN&F9g=#1P`A#m{E#N}Vq} zRbwpEL-ZhcW-hRSDj;?KGh}2&!nk4tC{l`8MYSHpJhXOPADLYEwtiF17s`UEV91U@ z7xMoDbXsNWaIlmw7{-p9u@;lQU`&>)W`-;gn^05OBwO1Oj!f{)QEw~Tw@FmsWbbBI IZ9`A{7oop#+W-In diff --git a/ovos_workshop/res/ui/images/information.png b/ovos_workshop/res/ui/images/information.png deleted file mode 100644 index 828d77c9cf012f658ff21c5a2364a77bef06086a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2708 zcmV;F3TyR=P)m6({xsuK=$DF96Q~??`G20_YhL z3M zjb`?5Gi$SCq1ntHH?#L=#U4CBWC%$zGn)h4;ihXzMl-MixJFWQ5P;cu;HNH|PaAFn z9+I@Lr^14IfbeXbAMWDfl_`&U`+>Q@5=rf;@Bn5u7q}bf7qXsX*aUnU*ilVSpehsJ zhiC=ug1~n{90I;0=?B#c3916=S(o1cECB`vp1Z^<;Ce|ry%j*-V$K7=mjkaQ;Q%mQ z(jUF`0A^MXYydtI_$&)YfNui#0Tl@emGl6o1J9;lUSDan6RjlP1X$c6P=&}p&&9Dp zfxp=B3rVx%P7W0#>DicnksJBF0%x(~Nnl2thf)+X`BU77JRxvZF{}eV5!a$oEc@w> z{HegQKz_w>F|gLm>f_i@ipv8`1Xcql27aoB-$=TmyE%bkApb0)Wz4>Tld5A0a4pbY zt_ajk@&^L10q+Z3^cWTc*GeiY9%RZSKKtc{Kz@&77Vzz=g#bssfR(^BPmQ(@_%pDB z=uSXC-~+%ok3(65q^GL#PG)w8r^m8ha8uRJp6y&STjAlewVK(eQfCI`cz}!DLXS@{ z;1)>>i_MzN>{4JU(G4SCuu;-SOPLvzBY<5**R8yoJ4;$$0{Pjsjd4Wh7f$x*S-&so z_E?j^tXna&-+4&>3`y&=3syyqisMJOUjZfoM?HGpo6YP)u?oN$WF~N#XXHOF>DT3~ znB|D&Rp2gw*)7JhAQe@oK$;#vo|+cWY3 zR!VA#@dCzt&z}FgW;UW*0x&aNJh{QcdGXRx;(if$&a>wi(e3H(g#a^K4}9D=_7(Hd z8Mo}c-@}103V5?4b9Charus;J1xHk~hoAdb*;!4|0?7H{g@JeP@nJKYT9OBFikSwS z>FZOws0ZeoS?{6*;1a(&U;!SNkO3}_`Szyn_mJer^^c)FyOuyQt zVu*mBnb~S!Oo14m`~4s@TjEB35-+(l9~8G88`ZS=O;%2 ziAFErQvey44Q3lI1f&BQU?M=q%?ShfDa`}2G5zm%u?XvX1ET;~5DQz*|K78gZ1ZIS4#N^7cta)e)T;8#Vvmp~g0&*0bf=bl6obEH!<_;vL;AYPoDA(V4XGcp;X{<;BaRRHjwV1{%HAXN8E zxd7^d8PY9))?kKo3m_on0FhjZpurHV)-2&Jd%#d0r0~`)^NG;yZ0RIbi zNG-N!fF@vXuth4dGXpdd)x!-)AGT#AH3M6NEmDas*_FWU!4|1Q3veJSfZyX+P5glF zVU4{S`2HJt!30uTT!4_au zpfY3BG}Mt%<8O7 zPM7WDfo}vGdW(l8z0_IjyiNt+yuj;jS{UFTy4>3-wm!hUz^-6VuW)BEg))m0fTX>^ zt-+?=U@Ne&m>(=k0IreZV&Lgu+nUD_V5X$TVt%-;NDq+xbDEj$#*^xzE{W}S5iChZ z@uyVmgOWBB{cL3zbtl#b~tb7VaT%n9DM<}ey~ zt(1=G<#+&y+RJPN&IvZJ8C)*ux2684lFP)owShL^e8Q#DTERW#kl&pUknONNhUkjX zNr8hN!%|>|B&(VL^2BgHup#i!W8{AhXe%Y|$0`6Pf=?2iChi?LsT$S+lXIu(% z23c&?!gH33R|AuXdhG?ohsS`aaeLT`l#7@22cjm6I|6U9;1OUZU~#zpiVMJrU=uJ7 z_*dYs{KyL21zgvisa{obfKGCPUckdn!2!ji8MwlQ)QX{!9w7T=o1`ze1&fxzYteK3 zGb&AfMFmhGIed(0OEpv>=@^Z`ZIUJf+p6(~J#xsw%;o`K2l@rhkKymYXDD!gFHr)> z$qj}BKL;)gv7Q@&N8QPzs-o&$!*W8x4qzH^A?Ynrxd1pt(j)ZHJLv`U3-i z{=g7mgv%xRyVpQqkn - - - - - diff --git a/ovos_workshop/res/ui/images/media-fullscreen.svg b/ovos_workshop/res/ui/images/media-fullscreen.svg deleted file mode 100644 index 0ce22138..00000000 --- a/ovos_workshop/res/ui/images/media-fullscreen.svg +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff --git a/ovos_workshop/res/ui/images/media-mute.svg b/ovos_workshop/res/ui/images/media-mute.svg deleted file mode 100644 index fac83baa..00000000 --- a/ovos_workshop/res/ui/images/media-mute.svg +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff --git a/ovos_workshop/res/ui/images/media-next.svg b/ovos_workshop/res/ui/images/media-next.svg deleted file mode 100644 index 1c5a5262..00000000 --- a/ovos_workshop/res/ui/images/media-next.svg +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/ovos_workshop/res/ui/images/media-pause.svg b/ovos_workshop/res/ui/images/media-pause.svg deleted file mode 100644 index 06d0241f..00000000 --- a/ovos_workshop/res/ui/images/media-pause.svg +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/ovos_workshop/res/ui/images/media-play.svg b/ovos_workshop/res/ui/images/media-play.svg deleted file mode 100644 index ab08c7cc..00000000 --- a/ovos_workshop/res/ui/images/media-play.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/ovos_workshop/res/ui/images/media-playback-pause.svg b/ovos_workshop/res/ui/images/media-playback-pause.svg deleted file mode 100644 index d6a4dd1a..00000000 --- a/ovos_workshop/res/ui/images/media-playback-pause.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/ovos_workshop/res/ui/images/media-playback-start.svg b/ovos_workshop/res/ui/images/media-playback-start.svg deleted file mode 100644 index 25c5fabc..00000000 --- a/ovos_workshop/res/ui/images/media-playback-start.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/ovos_workshop/res/ui/images/media-playback-stop.svg b/ovos_workshop/res/ui/images/media-playback-stop.svg deleted file mode 100644 index 32a01019..00000000 --- a/ovos_workshop/res/ui/images/media-playback-stop.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/ovos_workshop/res/ui/images/media-playlist-play.svg b/ovos_workshop/res/ui/images/media-playlist-play.svg deleted file mode 100644 index 66e47ba3..00000000 --- a/ovos_workshop/res/ui/images/media-playlist-play.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/ovos_workshop/res/ui/images/media-playlist-repeat.svg b/ovos_workshop/res/ui/images/media-playlist-repeat.svg deleted file mode 100644 index 6ef525fa..00000000 --- a/ovos_workshop/res/ui/images/media-playlist-repeat.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/ovos_workshop/res/ui/images/media-playlist-shuffle.svg b/ovos_workshop/res/ui/images/media-playlist-shuffle.svg deleted file mode 100644 index fe8b8e60..00000000 --- a/ovos_workshop/res/ui/images/media-playlist-shuffle.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/ovos_workshop/res/ui/images/media-previous.svg b/ovos_workshop/res/ui/images/media-previous.svg deleted file mode 100644 index 1dc4d094..00000000 --- a/ovos_workshop/res/ui/images/media-previous.svg +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/ovos_workshop/res/ui/images/media-repeat-playlist.svg b/ovos_workshop/res/ui/images/media-repeat-playlist.svg deleted file mode 100644 index da303aeb..00000000 --- a/ovos_workshop/res/ui/images/media-repeat-playlist.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/ovos_workshop/res/ui/images/media-repeat-track.svg b/ovos_workshop/res/ui/images/media-repeat-track.svg deleted file mode 100644 index f6575cb8..00000000 --- a/ovos_workshop/res/ui/images/media-repeat-track.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/ovos_workshop/res/ui/images/media-repeat.svg b/ovos_workshop/res/ui/images/media-repeat.svg deleted file mode 100644 index ea57dd89..00000000 --- a/ovos_workshop/res/ui/images/media-repeat.svg +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff --git a/ovos_workshop/res/ui/images/media-seek-backward.svg b/ovos_workshop/res/ui/images/media-seek-backward.svg deleted file mode 100644 index 8a5d3343..00000000 --- a/ovos_workshop/res/ui/images/media-seek-backward.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/ovos_workshop/res/ui/images/media-seek-forward.svg b/ovos_workshop/res/ui/images/media-seek-forward.svg deleted file mode 100644 index 52439673..00000000 --- a/ovos_workshop/res/ui/images/media-seek-forward.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/ovos_workshop/res/ui/images/media-skip-backward.svg b/ovos_workshop/res/ui/images/media-skip-backward.svg deleted file mode 100644 index d4cb1946..00000000 --- a/ovos_workshop/res/ui/images/media-skip-backward.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/ovos_workshop/res/ui/images/media-skip-forward.svg b/ovos_workshop/res/ui/images/media-skip-forward.svg deleted file mode 100644 index ce4330de..00000000 --- a/ovos_workshop/res/ui/images/media-skip-forward.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/ovos_workshop/res/ui/images/media-stop.svg b/ovos_workshop/res/ui/images/media-stop.svg deleted file mode 100644 index ae86a195..00000000 --- a/ovos_workshop/res/ui/images/media-stop.svg +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/ovos_workshop/res/ui/images/media-unmute.svg b/ovos_workshop/res/ui/images/media-unmute.svg deleted file mode 100644 index 6988c016..00000000 --- a/ovos_workshop/res/ui/images/media-unmute.svg +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/ovos_workshop/res/ui/images/moviesandfilms.png b/ovos_workshop/res/ui/images/moviesandfilms.png deleted file mode 100755 index ac259d64a99ad7693460ff22bb44b5cdfabde5e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7281 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 diff --git a/ovos_workshop/res/ui/images/search.png b/ovos_workshop/res/ui/images/search.png deleted file mode 100644 index 51ae3558a5b170d102bbba4aa203b926a86c965e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2385 zcmb7`i9gei1IG86+0Yz0LhfUJA$Q4bz9z=Lju1H)MO3V>JK8}JLp9_+b4D0Bz9^Fp z)m*F0tXetCH6=reul|JJ>v^8{^Ljmh!ISRlY%eTySO^3H38NiQr}mrpCj!uY4qBak zyg(`1euLSDOYgPRttNZ*&jVHs=GwH%PABB_#QK2l2@ZccK z(=Y8|70-=TYSTr-vo1592l;49-n;DMl%de)s-3S1c?B}8ky3DQ>Tuh&D*0VF!@O(Q zzPTO3jpFT{4^bQ`dNlEq+rfPN;4%t|E;zHzy+ISls*D|=LwiUKM91>S&`fY0X@+(X z+h4eH&4?w7y<^%h=grpyJq@gb(-nbO@GUTVc=?=V^4!U7;%WBHM)vLL%oX)CQdl6m~FH$S96!~)t>U-+O5)_kHp*c9BC(87g{ zOpI-VxX@I@wGQWT+FvFd`t4|G+(lbP@k&T%t;hlNp`q=5SaY~{wmJMLUx0HVWd3s! zUoDVEd|hnv640O+KR>| zxzpHfqk(A&G@RogDeKv`?q@mRs+l}*6zC;}l2Rnuy?Vfc)66$>KV3r(B2?SIdQm;# zo=FSNSV|mo*uIm~a6Qtzl|O!x?%dTir^>dJ>K2p%O~h6V=aBe9CVYF_p_J7{+SHB> zdTAytXiVfa%k#7gSITQs{-Z`o6 zAJ{RYhrC`x5%H+!B+uq&B37D*OuAyGzDX-TVcu7bUmOVxB)N?|6!AsXUc6O(&-0*V zLs-R~GUBTOO*=Ua2>c_G z@Y>8|=^iw8Qfv~coilE|28_Vmqwp_9iosK#^%{QcYV&FRPV*=YYK7ha#Vy%jXH;lBb0_MFaHPwd+;Xg~47hWzS>qFIt*RY1%fZym5wKsP4@a zvh8Ou)h$85TM79w!YHvSJ8t!ZD-Pa$g4i8Hog8v(l84S;eYGQ|@6D__(99gEGRg8F zpRIVUIiWz?PNQFH9g#ZWC%Gl}EDRB7=&!&J$Tu<}w>zkUUJa$$a(p*?R5WVvi@i^5 z29>`y)xC^;o(pOIp4*->|2blm+me+ITDO?97^_zP6#Y8^WNK+J3pxNEVog>5b5U0| zNsCxNXMiHslo^iXjjo)4CtCCeT8!UmCr`&VipGxn!LQ=22~}#L(z~zwM~%nVn-_j6 zevkKp+tMz%$ij-f9fvpkIBc5NQzVFEctK6LxoatLl@J1l6fA1aAd1NDWgHhW36vlI z%7lXjtG6UduSFU@C-1!_fj$aeNfFd<5P_^&Ld<#xAO&;VzZ(t2u*WtU=#Zf7h0S{g zVzfBfIJ|@= zj*OcfTJ@iFWgy+NZ}is9B{8k>5;>=$!0)dSdTeI)ELAe>PzI$snlVMwihZJoPQ4eq zf0+x@MbN|}JiG?wS4EX0qdv5x0$nh%jYgRl9do2t6-OJFHgISoFzd_wk;}7-KevJi z{%XWTv`0+ONhV$q8wDyP`$jIkYuY4~Oe5R^-z()rtRR9y#3IOTuz0G5U6n2n0MtUn zwr#L3xpr0bW%wFSnU&Jai%<~n{~y?tFhu8}*qT0MdEkJWl}E}NArYBaP4(9J`jY6# zxzoDdFF7Xi!rd|cE>t(SPsL_|pw%iI;TUcLKR%~<)?Kq9{M4vRWcYFwGLF9`^ip~r zq^5_)X+&~s&>Dl3$L`~AaQSu)TWCtzeI%#6x{P0`;fqa;9wz$Ok&T}&4nITr%^p); zwZ>JJ8FW1feHZIg#12!-lee~IbP8?kT+rd!sekbKrbga$DDpgh&@sE;gE24Cr`%)x zRbVWn@3Mmaq%oS=VScnigqt7TVn(hkKx3uZQSaMU_1B#56HI@d&oE08EntoCV*N0_ zPJ}?aE5!9fW}9m<=4D3hk7bl{I}K7tze@6})JAugj)Gj=-_DvsN~*h0zgs+AHJP*s z9CG!r+R+EXcbKJ+;P7;{0Y7X(rq69GW&?0MzP{6@_u_^fB{gUYp>RSNp#x5Bb9s{u z3E1;zSlB0Pvg*Ppv@R6gE&oh8eHRmDvZhK5Uac?O0N*-aUTY8Ls=7URUd#%|+VaAD z)CJrS%Y@*9!fQ(2kUm#i`%*qDsC>PIV2{@AgfUC`f2k)&`q}ha;8rn9{MSW@y=}7N z8yEB=+BI5Cy4fzMb%M^zyF2J>o#yw@>1ynlC-ql<5zAg4;AzZmNzm&2BRNcCdWXZ9 zSDgd$*`11wsJv>9W&j+0_(<2bYV_goY27NlgCEttrX4ihwL&Y&G!7UETBLu%bMqgb z2bVmyWei8Yt-V4qLyLRE&t1rBSv7qpM|^jk;1wylb`hIa_`CBrA#F_M+0!xATax+i zezkrW>Zo;omGLMhU~lqCqolO2i<>0YVo`k5x|oHlyXlwDvUzBGQq|OXM6f6Wlbreg zI$e3-BPJP>Y_9U%wz3eCr*y3JW8Sd5o*7Pf<#i!wSYx2$4{hQ!knL!kl|%(g-J~QG z7%o#tGW2c#cL|~wqHSCZ(f;m;edN#@2Orr>>h!Zj;}(2xTtjQ`>QU+Qjs8I`^L9iAV^kBe#1$_xt_+e!uUz&hyN9d7Ion?wR9pp3BS3!c5{gnCr_ZDV<<5WqLbLGswsu`E6nf+BWuGO>d)w2g4%z6N-nf0uhJyiRFQ1{_*{Ri**555mS z_&u6C`e^Rh*wM7_|o@@t#538rR&?q=C>cei2m*OADbILHh*mX=hq*boByc)eCPlC1pNo6t%YO{aV zdO%}#b;&E86Q6~VZBa3=e!nz2Gh}tSF9i|K_nhBgUAe~EyGH5e^=g~Lw|h4>vby!} zWj?XG)RWy;yE6JL>uQ}Qsi|^q$DOznIg@p|%z9;!bwsb1CERk}3z%i?56F9-E!W<0 zbEw*$tlZlzs%dikYrmQAaUT6gqGWx&wd1#*YD*N5GX*=*3ujT`>2X0NjqJzH*HbbtM(4!V>7m2 z#_<}w5XC>Fk};?tr6ka{!%<4diYqxEVVh>ABi-VCCOl?PAo&$x+JRyn+IG#f)=?IJ z=nUkxeLpx@bB%9-kXn`vYswe$eC5FXbxuk#Kj208^=vp? zWm~3KtYSkg5(8`lW#pzRbae(;@NV|M4a9{<C7Zbl zbK4g>^Su%iEL0xzxXPGrn<#Av{+j8lK9TUt0aa#PFNZ!1i}idFl*Nb1-1NMj(v!#= zemQ5&)bOS3%1c3?BZ4I%hjA}94}G1!fT%d_Gyet0@-n})?e*APB3HPo@v=tv=y>9* z)2l|B>ft}e9mY=g87-@X3r+O#hG!TB-@Bwb(KmWJdqYDZTwg>NpP3M_aOglF7iv_( zj0GhmUdxO^%doS!ii#(G6Feco`G;Vfm=964v+_r3sF~m&CZNv4n{0|^Z;=_&0>_lR0WS@u6u~*w+Phg>cGKrYW`yAG_7| zsX%2G^7BrL9gguwyIK?m-TPg#$@BO(t0r47mHJ9$Pcx=?A^YH%7C)lLX;8PAgOPrf zUWCWRubcypO;Igp;@oeVTT3{5sWv!c56D(Nfz`QIv=}J36_~@8UHUm2?)Z3g`m=ny z*q5aHf{nK&Hbc~t7~8Ufw=eMrdooSwr{nt7GDG->MWM+KG6kS%EWc9AenID!mZ(tX z{6cef>W)^jLkyH$xS2o|lChK<`)0+Vg1qAhcT&BW6|+N^6@|7Bw&|J4b*C7%P{-6Y zJnaYh|453-EPbl>d9!X{kk_~&vt}~$s9WP$c?bulh>fkLBZi$M3)A{xbi;pQ+@>kW zYRAn}rtRY%6_4}yyt;WYwhe7bMF{hT`SEMJW?Q_g8=5#T9KIMM6ft+sD@yH0A?zp% zhn_$l>Uu_DLF`c@tJ6|2HN}Gc5-k2+CwlF($&(SGOT5H}2&dNK@g(C3km1l|WT@J0 zVOOd(v}AvZs;wzUsfVo=?hX}UEv0zW*_zj0Sj4L(Nb`_Y>>qNUSs%3eBH{O}#IKcu zyRrN zy=savRV?7B4&1a=P(hu%HcdWqZ-HrB#dD7VZ-`*f@oKw9|Vcr0c>8#6N+MJ9B8CQk4!a&_)d znP6KTEP&bE=u=p5&lIw5n8-lIuiBiCoz#XGU#Vx- zYANGcOJ5^pyA1tErn*;t}p8T=1rVFkF}ZInZOp&D?THTNRNkOGh%_+JlT4u z2U~cf)MN-JpWVUoK7>b^u7m}4V@zZ>4cT?b*&NmiP25k*Nm7_>4uUu5CVLj&45Kn$k! ze>@lP``igS&@xaql#a4zTWAnVBiJ@N!P4=SL9hV3MnCx!N2AtH3~B|CHTf50&FEhO zc=h@q4Owpv(Wo_R7y#F009^C`1lP|1xH72q-b)&_meHtng@LR9uhL<4wQigSs}BKK zomy)EVD;^n=65twZTm^8U35TwN@LV@fKeIho1?=jomU6x$U5}#>+nwj_&U1qb(>vZ z1NcfOSb$x(^b623AQm84h5(M8`bW({{tCC%xMbF4^k^z9MdPMWHdrmq+G+-GGuc zMZq>*PQSYAhSh@;o)X6fi)>uX;}N`}teo6qChAT;k!>4d-8E%nyC{j(A~LPysV7&| zP1O83;<>uBgs!3<=+CI@&<;!v|b<_xwnSHKJWl5h^o0UM3bt1=R=hAXsl*hr&qe&V!S)YhG3;F0< zst@#WzusNBh_(7%QB$?DPZE6o$8NTcBSn`NagraA>&}|a#T1for5-g+aVNQe$lu{c zb&*gGmunGiIztuEWAaL4m6R)Di-S`$>?xtDd-g?hQWg6wFCU%A_L4Lx*w^kONA0so zu)7l^geaE$ibSO!XTFkbdwODo4IKCTZXlTk?7%s zvO7o>4U8#ELanfN6zxaSJ~yZi;h;q2neA?* zqNu{B*$>+{3@AF>EySSUW>=I3cN)S9nyzdXaj>x;4s8LbR~;r7dC%yq28z3Lk;7Rz zoK2S{w`mR3ipR@*AIK%P!iy^m8b3GVs~n#=Ns@j@7FF-!QgW3ZU#N^JdAAVKiU$?^ z=A_#CVwGI4e^~=1wep(GbtM9t_{rusSlYYab&d+7xaZ*3PMRlQutha#&!SP#-wh3t z8$&e+W!9Z72liKs{GQT|=a1S*;v*^&maXQ_SPP0N*K2p;Yg)$oiz5((Q&x_U>DH$z zosv`u!@Db8_zL6=UJ2r>tPsn`VBePm@~Y?&QRiDJ1bm0DnBy)IdP>LQ9&VSe1qI^U zGAiANrt$~G$x!gVEn<$(B0T-SY?_(J*MBj)!#2F|M&zrcYd`r^WtFF_e2GK;>HH68 zOl!fqUro6NhML|9Lw#A_3qeg;XHfeNrgP*SLhi>eM)kjTih?j7E-cq`l+`(0{JR%=&b8G^1;8o%e5$tkFc zpkxf6mGMLOxR$j^mPdP^#0R|yFu|+heVS=QI8|IQ`g2u(&$0LHUbGY)7 z20wyN)!ipZ^YX@q(k$UkwDCl*c~e~DAdeTO(hAy*$LOxk*|tOfJn5Tk)k0yml~OFcFk4J68_9$pz+` zZEC?6J?Gt*v=sV+*e>zWF*;qFfKeJ4z75K)NXHR1Jgi+b@feh4i%it%jK)ebn{4Ae zMy_PVtz50Iqaj7|q9*z#9@BW&yO=wkGqVvNQrhh>p^8ywI%K`kK;2Q~?@fwnw#m~& z>Bn;jsBEI*;k>@d`_F4&WX22fhL^DQh4?@nhyMGPgN1KAkIPq7TCwx!?ESEm$FGWq z2{NVPLX_;~$$s6}MnKVRkW%@cmf;NE#NBn)J@RuHqr=3QJRCV%#}H(xiqb3FyQBcm zsEFfIl0lj{CzBH=6I;GHTjr>wYMd_Y6Ba#eklWFy;f+Cn**}Zm^eG%%AM7-x^ih8( zMsi*uuv|`Rj%nqRgA!~w3<}0k5_)jGu=V%&goJ_o;;FRD4$N}Wq{|M$y=1Fdu%^Dk zuI5sy9O6WtdkJ>9aYPc4EY^Gil^c0-Hb3WbCyQ*xB)ceH?r#35u|3-qaYrFSv0!FX z#1~vIWIi~nxw|mmp#(um1IvNy*q$mckTPT&EERskqYo!7I*iLSXJ0`_@W+4UvlC_3 zma%V!aUvmJ#A(RI=sBAg%+Ye9LmK*7B~ku_s@}11t`G5@%57O=ZLSg7I@d@C)pJ=C z-l88X2}Mb~m^&!AvlE%{2nMC%qxy2*@_Y44hqjiwC{>|zE5Bj|76P9qP$#+FFk=B% zdMC7&yg1v=V)+K~kN__k-jm@?$B(j-^t+(^by~JOH^(FOky5-FhLI{~5XIgdEPRv^ zR?)6fHbt36c7u;LoNY|w20BJ9J)O$|2gAW-qyF%?p>irKE33{KeYcDnV#dk#;&-UR z?CXQ&ttjjEX_c#4&Dw7#rX$M?=m-uoIsR&FHS&@fkT*oH++2K$0WC<-u;}} zau&JL3Er3cgf%$`VA(NbuZ&@n5OT@9-iC$SsUi3z@IOUdI;ZLS-AL)REU=0~BgAN& zncFvDZ(-`vUomwL zwd;S$sN1&cHh%)1D&VF9*!ipM%ijaGD$Px$i*Bg?ZxlMbH%c`}&u#jn^&r%k{$omd9+lPW*csPZ2LaOOXv<~D5t z2SD?H=q4)T`KR?CG%IzTMxMW-=C5E0IH>F2e|+5lv;~b@l=u@A0bJY?ohoUN`B&83 ze*X`^Wu+Uf47~hL$lL5paFSG5<=k`DJqAlD?!HCp>i9WI z&z&`^9lJw0!yYwuC=1?btLfUMn|8n!Va$F-NZlm`zJRUxoOCH<(_BJwDmq=4 zD0$gy#GIQduUEaFvivCTu5{Oh@CZJO!%92c#_+C^tCvGekCi?OZxwwV0WwDshgOXu z&<^FS0pbvcHhHCdDN49UBzD4#(4cF43UijX4OSB0ktn5E6B>cIR8upIDoHIhao625 z#L1g`VcbM@cTs8=Eaz-*q>4$=zG!In*#;98o1%SSzf}IRgQ>QP%{V{h?#6dcUF-Iv zY_2n!1y0RO4x_Nx;#s7Ip<@A?M)1znciv(hiMO5h*$a?lF6rj8`Iu_EDmeOBQ<#O~ zH2EQEWI~`>o>h?4q5SjsBBUAyHH^J|Q_7^9Cx_Qn$?*VcI-+RvuCPzLw@#bCvx>cd zF6EvXlrX~gP}6Gf#kF3McV|VFYy}t zdl?ggul98(RWbM)v5fZ(S(@PQeLh)N4ZaqUBi^p9OgNAd;B)Q(k(a@)i)BqzmKc z%oJh1P4l7_Ht8HSCuKsOJvv5K^TdE|AqbkNt9@@y4`pqb+ zJ3|7|<095ixuX-*;ot)>Tt^RBiwu#%@sc&LUsTNDFn9r6R6F|he19ZdAP+~%h=4+y zqMM?FJfli{u8w zWGkjTd$V}=BMU$$Q(V=l`_p-|uE-cGz(69?4d2SVc`kYPHy&K7uaCYeYh3(9h|M>$ z$*@E=QX!sQ=B&EyMxff|Go5Sm`SuhYurs4fEfVE>!BfMBKodiaD0LXxyXh+vDq&ZFxlFLWTyG;^6NbG`$s3sf2Z>aU zlRka$<=~heLT}u?e*YmJtk;2sIR?I5l8Nvb<;C$D7~E7kCCh$3=D9-M_+jP!ZtNnv zshY#~tm?mwg52SOm)cmEBh@n9wDK^;bjsQCmd;TPYAYo1n>g!RlF{Qm8E19x?4lucdu&%|@=uP_SK0#G|`{td%) z%O@?NIi!GqP5=X28CL0b1HkTQ_RnYl&`JOdW~Da(0A{6OYc&m9x1Cc)58xo3Um5-> zfUtlVodBPQG#B*Y~bOQ3X+5n${DnK#43IL!j&;}@_`Kqh5Ho&V@fN{4m zmu9fO`LhiG7_8fc0EW%l^!7{ByDhVo)(oJR1GZh)PFh9a3*fy1qO}BO87%?8fn5ji zmtnus2$&AOBMaXE0d;|Gz4%104lI6qz4-mjFGYdv#sF}jl?E72D~*Xa-mh%TtkP{( zdSigWxPZ<2(_Q`3THUG$&|OsE%n*%t0nDXW1pelG{-f9V|MZZ7x!Zm#K*PX!o00(- zt^Idkbb$2C-a#pa{i%?eL;N@j6V7&7+&INxw%_!sv~$zVqJ0Xg`?7VN{24G>Cz+Jz zuyX96p;F=L*`UcvsPz))^R1O#C&SHT`%yBpiUzw(mH*`#n3B zG`uwHs*crJz>XS=eMX51-#_*K#DpB`cv|km@L?N+Fn*ht7c*7z^J-2_8fz*FTEumI zZc;lZc{WL=J!UQ}b2IPSYljikqDjZPqK-1Pe3ZQc5hq)eD6w=<9Edo1lPwI4AATz<#uHQvycoTRAT zHEA8u+!LSMj_LPmz^qj$)u4E;(O}#$sgOpCVC^d2D4yh=rYWO~=jC6(>6$(kT3 zZAnmzQ>}i+IF=Oju8~w?imR{;3~skm6S*gx+QBdBBTTmB%>J4HNyPaiv)?ct7n0u* zL#8xKTJ0u*l`e6E%=`ix(*2x90xX2M^9;Trb&DNzDcWf}^LzMGY9&2y+pKB<&?;)| z@ATdL+z9{XNO9Mou7^E1s@SGVLkJQ--Zdyye{OQl@h-#<1#+$WlUkR*D_U?$ZaOIwp5_3|Z zyql=Bsp1V~(Q+C9U2Z>}k*H%6kMe!;T#H~u<@0_rX!nSGHbd9?I+9|v_hd8Klz<=P zO5P-qb#fk9-9dthJ(ns%%m_}%*GU4AU$gbBG?4`#rWE;|s5~imwV|&wZX?YIj$s!a zk&zK9=PVNWOxI_nKc3Q`ll|JHKQDdR5hYf66{$c7oEA?Ki?o^i%{+{6dT~*Fp9A$| z$8XNEgzws)5YeG!l0R0+6M+}ZYF_PYUK7C80-)(*u zv;2^`h@7z~FmE5{{sJPs><$@Nn?OBGtUT$+aX-eqvNpAb|pna9<0IhVu#d`fM7g zME5UDR!j2c`G*OS5S+n!P2(qHSg~#dOXk)H`)6toilla^nNrbyi6U7TYxkm&t3O5~ zc@B{$JX021OZk2I-N)PsmIWqlZd{S3gJ?o%fr&Q46z9G|BE;6<{HSGWd;ElX2JqBe zY?%OMl=)SWd0o>AcWkw?HJ4}=ZvU&utLT9iTmPkqrc!(`f5j_!A(c-HCC4Gs3|_4Z z%*|AoI>J*-WvvZn*(p;j7lN_ou+O+}{eq3%zsN$jB}~xuo3e=UL#x;REYZy#NuKfA zF!_M;%hSkd5ZHUaEO%~8Ceu{H=|*Oa?0uZo2w(7-ycjfhGRT%YPN;A5;S=4{UhPfi z8{J<9vgn`fhxxwFCw2ul6UIlAG2+t)9-nI=>%yV7YePdTGM@AG44jHOCbgC9^=%EQH?+adA)f-nuqImW&$<-y+7nt~1#l6xH|Irn;?E0Xn_M!bEZ=dTp7MM-sPXlH|E z-nFsSd+yU540P`62*t|?19olM5Y4L ztERF@lxoYYby;VIxwUC<<}k6_n_op;!5i~h&WZ|qL~tkL#ea~4ILv0UxjfGhc`3cD z!Xx+Db{%X&R!UN|A5L&zYnT<>-}Awx{@YOLm8#++HgoPT0T?YgVEB_h*Z)eN*t{42 zd-P;9IVmM#=z3dMr;Xkp7hyzW^@jHZKDCJR_n9sF6`A1*mZg9H(j2$lyhw zSPC3~k|_fvJKnDY0&1tgbHGxi#rQut66l-)D9K3gY0XnQN51%_d`b)OY2{N|+mu0# zK+p7NI8UQShG-G}Pj>u^MfwvW8J*K#Q+k?X`ja5HuyQMn-vmPVZ84(wt^Vm>gLeiC zZlmGf4h-M)SFiNHW7GfEG5xPhQGh;|{w?}^uyfU+Inv^)h=xl7T#|_#!>{2#!{o(g zljUGHpm|*zYz`|4oa(x3 z6>Pp_7nWLC8r@x6F~;j4jIB7YHI}WUU~uUa=JtT+ z%1*a1V(z(Y=A3h4)l4sME_FjDWKcnEa>8e&+68uRgk?g!ire4d!fOIWpjO3*F7w+X z*(S$}vwJ&8@R)wmaqWGWTAxrYEMDw!LBk~|# zX`?Ep=}`_}&|yC96CGLZd>C$hxRl(PP?G4-%v)P&gEMJFIY-mn$RnoKEJ#`1kOHi* z#zKX1Ek?zX6RYs;4t>QzEJrk`Qa9xG?g2NUo+_}#Bd)#h1H$*Hz>yBBG?>XvQ)M4pH`fnn|k7 z@^1Fe$D$xN95)7)08=!&&0k1yL{Rc}6_~JR{y?x(SvY*DMOmx01&`_w(sIg%SGV@q zAT(S#yB8lK<;iYRD~?hF{H=YKVwxjRjMi}^7pWGl*cT-W@L z8&V@2HE&X)@YX9Q20lbwMxVDCViWkfq;-5}dUkg^G9E92Q+Jw;n807K4r#C3ZG8d) zZu_F1h^7j^ttUs~gY(|>cSi_K?y-^vSI=)K_DG_X*6)ILdOFMY2lp0CUaFB8!gqld-#`sLyVB~cO`8d4*JWr&6GMe%DXiK7AZba}XR+)>J(l`>3#&XA`oy8dB!Rt*S#*o$7jA9$R$5Seb zWjsOp*60Q9(>2z~`1l>xI2aft){?LJ-iu6_Y(|Es#0^nuBabaVOK&tsdImN;aNrHV z97Gl9TPmO|VHJE6oAGf_OymnieiS2>hgoYGO$oyHPJvD1D6H8wux7^{R6v@JEHiXaDt;M&Y^@bON??oyAZep#>~ z6IT_E(F}y)1S0nbM4`!0XSmegCzPss#1s$G@lcRifVT=?OYnS}Fb-Q{b36L%Wwu-m zmR}g!F834Y8(@X%D0i@&yvlyr%sHatyi_gR|*Nt30iwYv03A`5<-l)unM~XnI zo@hlAMT`<>VB%BoL+eknyFgLbyPX#yB%yO%`QO zh*ak5?!Q@~^IjsmDBIcmhra?T91ge5X#C$Z>Gp5h}^!}$crlwo)>;(6NM z=>dK3^b<(8i=hCD(kh|9ES&%pWd!qEW+vUqyg-lVfprrjo@Zq9v{BP9seF9*;uZR+ zX=~B+)4^`kJ<4Vr28Rec#I9=}l0^u8B5n+Af3slEiP@lBfQ4Ck%*~ad-eX3Z#l#VORq$evbatxCnEdWbK9r0y!B5dT#QAgJr&c9lD$&0 z8P<&?|HdI=T9QyZ1x&we?t+SlxWZ>QcK9~oBVJx$I0;d zA0>k)PF$(A4vSbHXE_u5TXJn}&5)Rg5#%$bccwnx`0Mt3VUdCA_A#R8Tv1Z;gYi74 z%f>(1^~_LQ1yq$&;xav!vSRHCGQPN{oJSo!_>I8%F_7riaOFPe55%l}h`4}Jiv3<$ zGp`xnkAtfDuk*>z?Jl21aoQ!{8zL*^`kQ*h(N8@HG=GQ$1j_Xi{b+BUz^Jk zN4Ub3_kp}f$SX*6G+VZwW211|`jm+e5d}{XNoAYN;M>>35%r^2-{GvJ>C6mv^+GyV zA!lk_SLo%wbN0Rvm5KSi6MJ7aj6`=<_-IAh=%Vb9v84x4{M?wS!x@ zqXHfHQb6z)+kuSlRw+}K?fLw!(| ze1LM4nQQcG^x4-YDf45Zi}M+ry%RQst}$V+!122zxoP4&8K?D8Q~%U(KL%QH1d~~9 zA5`6x89j)&GX9iZ76Yt&-@M^WkF1eJ z7CAfPwKeogS?yp5(|)R9?Rr0m=ipSP%CL;kNy8bxka5BIvh2#dzD6PU4@qXu6KC_5 z8U)|QmN~!W(G~B-3U0ukCdW7PxGl~eJCV>?JVYqWMMuEfdfz1EO>$WVS&bJx2WOLdwv2ZCkrSldtfi-I)c&?AL=`K!0uEDAb&1^n6 zW_}wiw5=+l+o3ztw|R5mue@oP*|Uv`|KnkMUc{(+0w4+e6W|pvI)U2fFUdJ=X9R#G zBQR&Ijp+U+Z9BhhaWdxfjGUY?p9eah+w*za;D{mmf*x==>CMldn)Dd=C{|hw&&I;9*DKy(Mq1Q zG#kJ}Mro5#*WBI>(UNV3w$?+mEj(i=wDx^-70|cMm2aD$8Tz>=+MXBvX;#wxN*Y4a z7ejvzg?<(|8II%@Gcv|O+pj-YLjOsTzdrd-aHKu?zX!s9`JDi7-u`!Z(}@%}bN)_$ z9wb3j!zI2~(lDINE#vaABLWvEWDrY>--|A%NnsR1XkAdxdKEIBaM+RW=ryC%E-@B&Kbt_W6zxOaXQ}LGt=prrD39!; z9jTJ&Yr+kU%yI;A>V&gIkDDpjpFjqiDEnI&o3f`Jop9w(yWE?1m^y|R;@do?L2%=_ z+befjAPun;=d|D1g&8$9fmQM`(jGGLQBbKnBwOMr*Xrow9BO=(N9`2O=b%iasgF_N ztoQwt{2-)g>b|~rhInUFGl$=t<=SdN$A5DLeS@ZUvPbP>Vt>fisiEj8=E^&$srR;C z?RT~w>?qe0rc^ecqb;o?1G?2AgnS!cxV)OH`v9C$rMAl<7DZ`VFmWJI+Zs6EVF{vRjt}hv1=CuWjc%OZ&vw)J z4<}VP(uKTgm`|XJj{V{N%~SM@$fj)uYP#j??)(F;kLKr)ID$;ev*gj!oyRZPQe+-q zvOS~#W7|yULnFZuPz!W(W;qh{;w_xwc8&Fj6!@)8sa&~~b(xx8vgq|IBrOdr!G*0U zeZ2{DR5{y9(wqt}gv+@|cXJ(F=T%4gLbXFW`8Wn5MXSBfZ-(~W;MtdSryk-Jtt`Y% zSf}7pa4{Hee<{mzrqt^eeKMT$mY|YoUa_HftR4oPzdOQBlaZ!uJ}MRj(*)Bb_?7d= zMJ;YDutey^<^kP;!{!F&DErwy>Ce)zo12A+k_a$@JRgnZAVuMVLHo(r8`4@v8uf;R zBw+-O5E5>|dao>5C}Yag5n>s;f+y!!MlV7J8k`;Tg2>n`W%uhT71rzC+4?cL<}WxWWR z(JpeMswy~3k_cw3oXQt>sD+H?7h2W?kP(Ty|+>1v%L@+tLbd-XLVp0b3r&;Q(NKM z?n@5+^#S8Y=Zj4Sl#JO5LI>Q_&N54{#IQZF&*G%C7U(J_6HS}=ZewCFWQ^Hgh+za z7n%9W4JrCCsaVjR7Ri}#ikfo-y9^VLT&Q3ac-M#;KL+S`F1GPKlZ8gBh)Vz;N#U2W zEOrXKUtk3Cj~A{xgiBd=G)FYq3ICj_uu}!rW-i%>^wjb%j5jgmqnBei$ox zP(n$HQ@DTG^Ppj*J~>F>4AUu-wS9hT zU|5xAf19)eZY7;C8J9HylOp>H+Nx+fPzSa}+q4N>)5N%-X&W+uGA4sCx1CD{WNu&3 z#PBZxyaW<-hI7fdlxZtF|B083>zL?}x%g`bb8Ft-w{;`awO{A$gMUfTx9(*E67zIHVCLkb32WXSwVm_eX!bDrO({Ev-^)9!z?f>9nGAfqaElWl;zI723yBFKwuU-0eQuNcj+#0PjcI#VLF#U8f>CMVNr$fK4hZt$iMvhf3MN$M7jm(K_B*ka0{tBQ)d9A zgz&5TF1j|!+T1b)GIedToFx~RCy=RIg{j2|nYMwh<*zA9Drbp?g&la`*W{8Z3?-7@Ma9mUXr{K;a9Dm8G>gZIUkbmz)BXF7Amd_< zF7uo55v*(v@|oC4@C&>x$Cd4uqAYW=8k>*nD70l84P0Mp^p{X!hFIV7V;=Q)Rj8Q6 z=FVgZvl*14Ic=))n4A4|@a59j2r82>*rp~uSz>SD8dl88wt|gv^R!{B{GQ#sZ2NCv z9XO+M-Y#Z9JX55cl@5f1S>4~U84-`jM{9UHWT2Kt!56Kg*iR*TCbVW)2zkBq77S20 zAmU-F%X-7QG3brAZ^~M$w*(dO(y7c~Vw6AbtGpX5)jO^Ia-wWRhSO#TOv4RX+hJ;% zn#7eY?bOpD?8Y9JavPixDchHFCo;QBQaWA0w8)WQ4mPYLrBXsrT8H73di<77=WOM+z7f?bIO|6Ab3- zma(=nR;sprywgPG9rD^w63Ib{15zxU)y&;k=@1JD*#{1_jX%|F6#0LM)q{98QprQN8RkwjNu)_i@xdUMMVlp4e*k0 zlxB@{=onYx^;=pXqwza{y;4NOAS+>q^MXB+ytJ4k6)8J;*7$CgXL_uP7?#R+dzbby z9$!&u(I0X_(sG__C}*c<@ojH5g4f~#e1gPQmZWm-`97AMHgy@!yQgQ_ za~ABj?8?GW!N*Rj?;a%HOGp|fnGhZuXL9>Ku&{=iG7o%G4(VbesRr?C_T)Z+FTaON z!3tR8M4;l3!+I>5-Vr1M$pS7D;hvt~+`byx_yE{JL+!Qm#ZX7v6^2@NUW`2Q!})6PEglIq?W7W(*NDsm!B>knhQP z5`I%J*#RcU%A1>GJ&!?&`jyE^6S zkPs+>jkVsOE{}`!HA~_^zh-0iu>=*YfTwV@dFptPTAtrq%OV#+ixLpwbYHmazH*jE zGCo-`Cdb2;$ugz5O!2P&s|^BIx|6x-zn*XeDR3KcM^9Gv!%an ziB_Ixe-z?^O9_VF+$BFrYK%X2lYg_3Wqi>Mp$AOyH}X29Ag5x(Epb99l(jC`hlC7h z+a*|}`NnlYhiFM6Ca!SC*i|uo@@OSm3mGrCw+nuW+t*)apScnwH!?-7CH}NSgcW}i zxGCPRfIXx2%?Bdrx)ko(NKmdFr`OZEjle?IS??F+(SvGmFqgTkxjdwTCDUXdgpA$q z%%<7fSeYesfFA;f7)O-`Pr>)RbaTF8A*fE}zqcPZ>oTX0Dv7K@@Z`pccAx916ym#6 z9)8;+8b7=f2`(b!-^Hup>+X56sFBCXk72TIP57*0hZ~-RG2tN$Zvn)=RncBw zusK_abdTu391!ImCt^-val`vt9?l-|wt(L5a#bT}Cn$EE1J?AdM@80m2ubQS-43VT z!>cTUr0Z4?C6~Lwbr`qH(?pIe#iyE1UF=uNtst{M{1ndTT@z}+)`M?=QGxF>c=fV* z;M4D=P_SGXkh1K>tR|$oIeUKjG^=T$G0SeLSREMlSMgs5S|Ha3Skv@bWL=J zc)?5?-YPVn!`ZFR?i8y5_D7|ZJ)${y=vkaZZ+N7XWFbbn8jaQ#xmgq4z@|sVx|o+* zJ+q&Pi+~s<9;_b|%}CPVbr@01%#^lMN}J@oeZ9iJG{MYgkpR6l^!bQ;uekvV`;?ew z&7KwC;XarR(XkEjPzfZdLYj)wR9b}67WH;tVq$kLG`@6HG0rf$5u!07c*1#{Ri%5P zej@-U(O()VyEx8PBw)yHT`DFj+Q=DfNOp^|0W$UPBfqZT<&JDuK41RL@x1=@AL;Y| zp1@Fuo~;A-hcb5W^nxeN z{RC2VfK7p`LV-vfpi;)fo!035S?UCk6tFviyFq~|5a4qDjL~U#g92A9(JuxCj859b z9q>B0r$Aed=j&hZ1N}2h2QZW#rf=0b8LOW^%bUR7hn}hf!8#z|R!|0vZr!!CeKF|5 zSHSwD2kXGPhv9o}-3H8+1g2cq_cFF$}; zJL7K9zuld*&7;7eou&<%Xh=%8JGbc*IMC)fe--1We`C=9ePX`tgl-@H!jk{OHvpbK z__rL-+v~+kQa%<5qT23RD70ZiG*aDvp2^X>lTYQW^={9*@Ig^!WA`n`QI^FRsQ6%CO-#+)dqhsz!8yqdh%ALKav!-~g=PDO%{jTg4o#B`n^o?NT1+3pa z^<>a1t6?p%zK5P(4eVa0z0PYOy-wIdWf`rk5>qaEKI&sC6Rk>Te|mH?&_C;ty^=N;8#+Gu-(00{(0LJQRd zLWdZN6hVh1l!V??P|ySef|Wj?=s-w9hlCmw9hwM=4ow9t1EB~ANKpiAfPmcrLB}@C zeM1m+zVDoK?_K9}J?mXD0rbz!e)j%t4GEjBP`?BZe{o|N-d-gYl;o)qgfniByy?kF z`$cY@N&6vvv+$dw+8K1G)YVd$I1_eensI0o1s~vawquAv`%P+SeX3;7x+fvHkcHFE zBYg`=Vi$`N#4^E&2*!RCYAV^4V`DrPvN@iB!N-PaO-NB)xVeVA9{3i4sV>c#^5wI& zGw!=fa3^G{Jh{D`(xKW?kKY;S?IA{%)4MgBx6bjD9si;;6Y?`#9iyXCJp9DB>2mMr z5Exx}rPd<2j;7mCDIvt8Lct*j6=vMOqt*<*16KQC);?%c{5`Jv@;)yX@tpfXe395z zp}lGF`~_6Hw}*!qPj&KADbQ&!3wl8_!VswFI&}p`Imr`WBz@2eDIt|7?+Nuf;4#-x zW!H;%P9v$_brjD%h@P_@bz|9kX8VS6ul^yu^qi_ZsC`HG=SL?G<3B4q(DQ8jg{P?> zq+LAPnEg0O4@Z|^X1jQzv6Adh&BjHtNKKG2b?=f~+I7Z)?ZIx*&YiyEN%MEwsm38a zZ}DLYbG!~KPB>Bm{5YO%pr{;U@5X^SjfvC27Y23Q5n_bFjZVyQ90da465-L zWlLhRVvL9}cq$6wv;Ef_+FG10P7b=pn@neUo#S8CTju zjLUeGgJxYS8Gj}9dhpYnz8;mUa?N@s`L%w2PE5c?xxWWxnBlf*PP=6bk{6}zclow! z%gfdVU@3pI|6nk)hgDgg`p1d;knhEv24!P-Z(eRNONTIx!gF+43jx0n-F2bh8S@+y zyTguudy_EGJz}{tec0zt6k?PIm&UPExY^>o9y123Cub(0I7F()ypc2(r0`0kuh@>x z;Dz-upbL1at#(czZWuke~AFkZSYa8@^4UT#iOqezK5 z(b~Z@e2G;6rIvwnFX*d-jxo@9k^+gV5bKGq#`VFihgm$>REEU39MxfoLxHo7h8cok z5>I~0CM{r-d!OLTJh&H+(b8jv5)43b?6CX=%`ciRP-Gli1EC$QgtnuyYC`(KM=>tz-8XSCh%UC_sT9pW0=u|w9XUU@ zRk*6W9k@6Xc2;_-4VtLTF=eZIiFxh2JB;84tC#v^ERof{*NG3<2gKuimVCU zh^}!S-!30`hbMHnMigQn0~WDtoUXxXPZsTj2s`kA2Bs*)!Q%O_%{4?v*56AnZPlq< zC2$OC8PlgCeKoV?(X6PJoZ+iiy<_VUV)YqXa{(p#W41^!(EBI@IJ7~eYtuB2y6FJ% zweUpya+y0rZ}~OVVjt27w=I@AlrRo*PK%hZ2OUAwh)2hywJ&pUTT)*66Q_JyQ26FU z??f1H5cuEU&f_*Ly%d2g4mMW`UuJ$(-K8?*-BNSsg2orF`Ot)D?-$#%I}ZLq3lx(0 zJuuNkH$-{Yd6eO%0r}do{&U;h?TQpS4qT*_LB%iD?z(V-dLg%{ZOg-R;?c?uA}+pj zzLLhS?ZqWfso)nnZG-{p3oZbV!gk6w8T zF!m(5i(x{-Z{ z2wh>{1LdT(n|pz^x>ivF!1pV(P=37~uvP)sebQI?Du6U)^#1|KR{(Io;-${7(d`Ad z^#TREN(dd}qwNLv^a4WD#Z^2gzr((k1r-oN*NFB&A&IYDXI3p#;KH6?Ia&eP3&g4* z0t(#I3yuKK1eA)#zC$trAba2lv@6gk;!~O4@|pGDXFk`0perxFcG3mt&y}1fP)J`n zeDn1CMv*|N3SysYPXUH$HQ~9!VEXjsFF>rWDOJ8k{ff5#c6qR-GMHq*48xFTjyc_Q%Dw>9k}4(3ZYtOw&73Y9VRTI1WIsPasb_gl{~FCr;n$M< z*N0)BcH{*ypN>>r_Zl+T6kKOT^tx4WT{H9is3G}RZvW1h6y2Ke!fP`$;vY}ytt^`{ zfHc)pV>`P`Yk4nbRn#W14{1UQ%#MmJD@9a<-Z@V{A$HfQK`V`OWw<<~C2QfXqU<$C z(0ERAoC6^&gbIRQkHhb_KhlUg331KCgUO}WNJhJ{`N#WMloi^*7}= zmRw#Ze}U5NK|fnG4^r>!up`OIMRf7h^ffA`LN}Hqrn_D&;k1X6eG8u08pezg)dpXg zf#pty2lLb&3FY>CRdmCr+{=C70W?)c>9m2JZZp`k5I5w9Xc{nCgE6(fdXK$XNhYsbPr=J?UnV2;wq;$q9VBI)0JuuekK=v_? z9FqOo)+yiDR$;$qob6}_2V`uG1fQ0Whg^s$6^X}Ss-qHjjeX@!gXkfY-kgVnvh-t= z0GBV@j$OJhaXm0%nc~^8)IAZInt6qo0Pbqj#L4%)pOnF)$1Y(vm%Z>e?&yvsp0*?3 z8`HOPxz|`|dWT6NH+G~@EE&setc2LM8mF|8{Nxuh&1mF^{wd)m|ILHTY-0;hu<&)= zOtkNn8ygyvDf_Bs3N_{P34 ziHQkW-h2m5?1pjCDHYL?A5X(11Hn_w4%x)#tq%)AV0+?2u^$$}x5G%C%z4`+)JNgR zEmbgmkeIK!CxPVF*Zu}MEb}=;)`-rBcTM_5hToIY~vf`GRwU=wu7Sq#_%SAel zT&u#p9}&Ms3_W$A!MM#I5sD?Tb{e19$yPOqP}+RA;`6eOy=fRmWa1MC*cN0+ zm3s56e?+QJmj866>pO7M}1gH$M;@&Y`;n8)Kb>AohI6>PqHVjC_$a@mNWZB=N}{T_vt z+tqT&8rIpXb>x~>_hZl=0Ki^xC~{rfOS<*OJ2|(T#yw6@+?4!L!$Bf335U#WjJGy1 zY#RozS5UUGJ11Xk#hHI73b&v(G<_*i7~I^x=SJ^Nzb%K-F5YEI&!z9a%hC}0vhkv3 zi%OyP(v`+|Qpt81=niw+O7Im3R#!YJso>#zRx=%W*jN=QUE9{wl?0VX`j5kYauDyj zb|F=KF%jGP=jF(d$9oQi-MfzvPEDFhP!O8k;a;m?ViHTt^-q^{BXo&HA?x?uDxutw z*m^16_VJ#G1eRQWf$ZpPAGm@&-9Mc8>#36%8ErKUQ$o_GZN;|O#a_JljBwQ3TSU_?QF3opJF54-kC#8bYh zPxQQInb7km*KS|9VB3D2L-e|a4U_=AaS4Z~r`xzt&sKlb4S@_XJ%4sMe^FFaIb-m7 zYsk{&ODKj)4UFNlh`%b*Y^VM}NX!6-2AkvXQXD==^z+0I82mqj*Dn62e^jlyH0FOL zLI3aH2gEArE2-)GGX1Jv<%`vC*Z%^vsGzt6h*iP$zo14hfQs_3|G#oYzu#wC>Cp3+ znbvZp-_$9eCHlwrEYUTJs9=N%Xw0t>?SUO8;L0E1hpxG-{HD?h$bLnpuDYy1SxEq| z7u1vlK~h1A6nF}nO20o@HCKULsemXdXvTkAUHY!I1Q6|k1Gub!*9s7p1UeRYhYuM2 z$`u8wO#EAaK1oSXf?rjwg1x0RmvzNxT@|YWH+A*Ce#AfG2v@;hS1JI|-YZTz$ny%lz>#L6aPP_hqs{a~1{rj(F-~b;9 zUi_eM|7Z32|N9kyYVG{bs8;W!2Dx#Fw`fn6vhj`z7}_==Rly`;30aRxQ?ST8eJ-F% zB3l7%*uux(V*?OYB`H>N2VQ#<0#cf4`B~D7rrcJ)*?S>4D)$?^Lz>r zQi#QluH?7wV`m@PSG&|DhUEA0!!6)&UZ%Wo#AyM!rLktdPXKoqTq`MJwWL=B_1fQ;*^I&HaKoL zX}{3{yozgE%@8rId>vjhSGdRXL5M+0Vy0VB$bxXF5r#LbPiAZL6dJ$GI6%vzVGh{^ z#d;HBp7TgK^PooD33vlEgp{1GmYC{!IiZdog3IVGR=u#bAW6fi-$b+^In{#{wmW5% zpysAluNI`no7qYuu)=Y4x#b$DAS z)z|V;pG;mVj&&rCZ96VIfZGZRGOE}}(TZ|2@AUHUh)McYX<+yfje-F(qK=ciGnVcy zti<(>nRq{iMQO868Vcog2X$-oZkx(q2u3GO&rn}ZS6B7&Iu1mpqmzcKK;)UWDpw|+ zlb4lyLA4qazQbct!}fQJT|YY3v;`jTt8A!A>!8WK1T9c`qX*bVoywKMEtcW&Nck-~ zw6qe|U$x#yjA?EZAsa;=YqU%ZJV-T!Z3f0(LMTXZ!DJMJss{dYiLgsGrrkA8_43Sw z_tLoEnsH-HOyE967cDbCbHQuOnrQnaYVJx|WZ(~dLLdKk*Ugh?o2?Ac0QMW=szaCA#>Ll^j7O5wstw)I)y}Az zW-iB+ijZH}Bj?_+(M6gW2vQlH7c!Ls)gw|}*caG19xgdynh?CMqvgv*%>dm#NMkp9 z6kaKz@thmLw(VltX5zNM$e`D6e>Yd3Nn_ygq`d81_c2d2wD{K2rfC+hV=`MJQGq%s zgfNin0;jm7C`crAW!K!o?o7cDK%QL7k@ ze}jqiZR&R0WBk+{yFHNVW5XzCUFeNgUnKXh2vja6V`dY9$%~)jf;bw~6L&en6G4nY zxo*SPJWw`f2z&2Vr6tZ2DIS9fX_h-{=|e_-ineo)!TXyRdLk8LL1EF$)n%5FBf{BB zZ?G@qQuLnlgtI-Wu=?OC%Q;`=Y*4*Hm5R|&-E7WqmQ61f1+FrZ@b=71@WQHqb*&(pBH4Wclu9m#{>SXXGy) zTp60j70szY>OM*T9RGT3fzd@$Y+T!--aXA~aH&xDygz5M9&1%~h;(gVq2a!Jnk9h2 ze&aLzD%?Tj6zZ^Jh_7Nr_0O7(O}Y-$ce^sp3UIH_9d_7c?9oy)`P-*UU<6dQU1&Fu zfnGe3s6`iP4?El@PffacO_Z8yso5CQbC9XSBO4xy)wp@#7L@*JD%q#(_o(p0sp|vV zc+kL38FHu7Qy#sotqD!B>_Z%Wz;0A_Xt3Eu!b~1fB!k8?lj9P*vWnR+CxXO3@2SUc zX}i~KgYN}@Y^Qal%_iceaL9yxg`$M?2S{zu2KB{dTU*Z^ym;HbJ;5Esr^AWVbAGCH z_MzR(*uCMTceu+h8Z1vh=3E|)E7fj3oq6*>`e9`;F;0`I>43QsTqv$@ph`7}JL#|Y z_)nbv?&asJdutzV_WoBd#Pzd8HHg0coPJWrub#Lz7KJd2S>X%tuc5~m} zT~lkw(|;ro0OTpkJ=FA!df!UVqWeXY)>euqe1mFS&s z1QMN375KWDy5c0S$n}4d(*?#;e_*AqiFP0w0eH(NM!s930>-EWeX#G4SAxK0QvqQQzy}0k9+2^TEb7;ogaC`WG7rEP?LX|N z0u8Y@{P9$QbO+#7Kr~{C-w^vI;{o*!n9O{+{*SZbHUmWd|A#;SuFL-eg8yHB7NFh% z!x=EB0kax_U;*~^_gRa7`SR5_1mE?aOCXFSEgZ-^feFbzY3x@FvTA*oAfx5mRnsFI z;&nb2==jg%SKn6BwOG-~7vW~AoJ&hQWkQ+yN8V%JUY~0qyQG4Cjca|j7 z#95=FM>k0iS5EOzAteQ_i~%_=MDPSh=58V&a@5TXK1NYA?aE4CV1U zqzn||HD9*g(B4U#s6j(?LbY5RVu*%=rEhtALt~5Xm_)|EC+OWcHq4{B+T8Oo^o%!8 z4duowkh0v2BU6v%yc>eV4Sm4E0j&=-zUsQBH+zCh2{*XG5!pucY!JgF)>v z#I`pczt4DZq1#Vb!}MjOM|pb0&OLTiY=`a!e8bZGn+=2_V{G}~3JmA#^o>*c?s<0a z$vpAuX#(}g7uu~(hCRWUP-++KYQ4|Qh1LYOODc2xAN ziAslyGIL$d2rfx_G^uX0%AJ9e45gpFk<8AMQG_dDhGX(W13qaz-li2M)Dw5^WW{ZN z{2&_NU$f6_hp8HYD;aV6I?T94V)UkqovcF2@&hTR%NW+A8IObqFCH9JWE_K!V43Ix z9|#$;+R@H*8L_S>(hK;pS*$&l3pLtv!^0-}o~V{{zT{}iGwE5wF=eB;UH4>|4ZC30 z8>JPlI91<^u6`|bj4-Bd03mW^nuH&FaOvm(1e$T-VmvVy=8)oK2aRdB9JE2{oe@AMFia)W*jIG7)YMmxzkqSK%Xs{&CX=S)@XUm6mn7`l|zt6?O zj7HB$qIv=X^4c63&^Quo-Vy5ERLKotiRlBXl_K0Q2QgJZ*}7E@*^8^k(J81F z*SKLV$Zfek$;;yzZIm`mu?xWP_*9?~k7v4f7^iaTt~wT`LCBNbQb ziIrc-N(jWUxWQ7-BOuuwfjDg6EaYYVmaN)F?E0;h@?zyZnYHa9y);(S3t_sV|81oc>$(2M?SPsZuMMe3wmY zz)s_519bFr&J3SP{k6i+*&bnA-{n<8rv{NCKD4>NrQ;Y-h$%(4@bN|yL{j2Y(uDY3 zcLEjnv&wSn`j=i?H@bP@Tu%j_dX|&oFj|MDOF{NOr@L=4X)lXXN+Jh47miRDg%tl08$EG=%pxdIkSw zBC}nC`o`Zs!5Q{TM|-qqaq3UJ@wSA(&h3NE^sjuJKnK^QmEVuW` zgeEV`Nh~G}mVQL@JkI*F!zL{@bObUN)?r^k;lIP@#6o8q2rPZ1Vw2~fRNQ_VE-{2< zrg@cKCz7kO85Uz}Wa5HCo`HL1zeBKwPHrJtzeN_A9?b22bK=WV?*AQ70KSs%z&x4ZQi~}C@bxG zU3s4~*@MFOX6|AVB=<}N94=SOW=C$Pc^r(Cu~T9fNG?1$2=k?!#5Pp^Y0HJDIrZ3g zesW0Bvw78&pb1jgBUII<6!C&-{bdT4-PEDuwve{-%QW(KQ#=vSST;D=(Z|bHT9-;Dq{r|>%Dj;tK3KyXMuYv#hcJfMASDyQw1En(oxfR&73cc}d)(RL@1$<~g z@UD$p339$GxPxy|UqNC5Nc#d9EkS5P&`0At(?6QiYh2e=^ubCBcm;j%b?fRYTMN*< zE3)@(@yg;AAb3{?SXVY!1zQ1S_xLg4@2YBiB!VC*EQngHj0UWbw^l|2zK3rCt~S59 z_TyZ@8hmR_1p_Qsz^(@LFW_DaZ0zr!Ygr6I3ghm|P=EmNDtH2z*MIcdfLw;a;RZA^ zpYi&29AM4i=EpGvA>yxDjIRS&!1^kG085Y;Ui!MV3J6<4>;l-mS_@nV%xOW+Vhy+j znA3o&{c1e_@PaRTzqZf*D@6>v56I!y{~6nOBgxkAxIWyyDx&)QfsehM(+jA0FEO>ofpc z1P}y@6jiCnSBw6Y1^|NK@~v_Y(*cX;ZToWhf!v6O1DldJ1vlVr_<`IfGM6R{Q<>wg z@mC<0-3hsdOztF4dDoH z>9i&9k=|61AzxcG*rnH4y_A94d0nh?0~%{KuwL_8aHp1DOUHn&f7Ij-@uXVWC-^p@ zsR?OT@iuSMUph7_%iji&S324m3Xj}gCX{uC7^P^;0+qP}dwtu#$~r1)Z79{-FR$eEo=gQRW-U_rK~6+EsD(;AgpTY>U)`a&gGzpeUL5Y z?1N25eYII^r%YM#O|#Yd3qiB9e4pcu?n!yq;(^tSm{pUP^_JReqS zlQ1*aAt+alnU>8;g-Kimt@A3lkXj6%@#)UXZ?)e~r{a~*C><;r$* z3mrM>a+Xz2uIX0g%ex058=nMF_2go`qgkhJMG?-bDs;J?Q+4RH*}h@vAa&QUoSO{m z`sA)Li3_Gos)ePstVVJX&zv|i7`lD=ipl1r-PEWD57|1&ZOB|Ct6!*b5_&y=D{uT) z#8`QTsa*z`W&dZ+r5IPwX5yavK@HB`X8wIorJ|FPsH}#laB6({08Ez^H{@k1cJEBn zE9u!CW2f|csJ@tM)|fOZt;WYSlhI!iya4StRidhSqz$84M#9&LMaY5_r{)0dKi^AU zXxK!xsfbFaYUDolxXpMMoiook6IS{enmJMy5MC??h9qGlMiH?CMNvKR; zz0RTi60LV1Di4fQA*q<-W=t5Nq zCNe?@vDoc4q!#c<65EoEGX|FvvV4(RaSU1J_z7iMKn|0JH0io7nsZ#XA)@k_x)PDP zBU93LK-$#oO~jnqKiX9uzX4k z!3c@P+DyYT+=R0hzSjduj_r`9&sWQgOV&SzE9pcP5&V7DMLZUK^+LqS`cf zYV=Jr^fDkvX0|iX(SYSknh0T)9~S2$3cCgBi7Wq$okWk5y`=V!P>a?2~G!e+##78^n_LbFfJ zCNPz^bhs!=6RK&0Nav(27RJ==bgWpnF}xrhhkDmN@~YlE;8U)FrckQmbAon2K{?J* zD0ThoK(m00**MoP;0=&mQh&@j60;8dHipEtIPBIszJS=n|F^A41hdJ5%K5 zL@6RYw_Zhv`E4r0nHWyB(Ng{mSyFn8{r!_w=%TRNK zoCb!NL7Hf7Dx>q}Axajm5S4mZQZvO-A^*szEO`Jd!f>RsaE3;ydJvJbR_7XV#kihL zKEZ{h1IF15;8H9N84vcB(N&jYwY}(E%*3d>5I7dCaCzUcWD`Dcs$!z0}=2e{}uKedfN|`sou<{WunKa@q3zd|-1%tahVZ z>D>HNNpx6ej0J~vS|U;;NP1pI&v(*w(h=Fcb^f?jIFFj;bem(=-Wc7st=v(#zP{U0XVgW^g6^EQuus`qxcS9rjkA+jxz;a#q}e4& zh<|8JlH3J90@dh;{ugq%xm(WhAGWc7@fxG+%fAR@>%0!Tn*Xd#yr!4e;uiw3ESSpz zOksguUNMDNmGT;c;a?NOfHVez!h#USTEmUM@A}=u>pz9?3hpbWoj>#nBs2JDW!+$H z+CTtiSPKvfma+Z~{p-6ToB;g=q%?rDV*9@RaUW~3d~}s93;4W1HBMmi0xMa9UL3$? z_$GK)mJR^JS77z7#ft@D4#4Vdo8cqDR(W763s`{86(lnNsVlI0f$;)?)hn1SSfkAf z@CCIy2~x-_YM1W_^VROk4i@nIcD}v|fW&}hthGo7pm|pYvA(tA_}1-L z19xrOfS>C4^p{{03rKH#JwRoS|9a&KsAK*M{#nT%3pDb7V>$~2@;@>keBlgy@bCV7 zpTPhG^2h&_KyEkR_}26$v;ec&A2znHJ(;7sv-euhNcTwX*$~C!pK0BhvMM`QfC?97 z^n>3gIDL-dmSQ*a{o>gDP{Vk;g^fh9Ua}|sXuSyYCM2z=gm~LNu@m0Z zXOa7Q3f*$)Ws`A-Z(#DKxeXf)0Y=v`P3gJ`Lkqug*J4YhovrTlG_PwP-@tdg*Ot-S z-?aGh>Pfp3k2s?WuWV|TTgM}xaVkAqE2Jv68Tww>{;P@FiIE^u#!E6G{HCR=Yq-2; zEj2~w4$Tg#6X(HE3ExY({Mat%S;T^)V|X-xOt zQhRiO+Y_7#BgB-12(qN6ICSQ34)S7#>|iN9blKnfyeoG^e?C@4*8J4t6E3$7w zr8!8_a)J^Std=P*??uas68Ch`{4z%5tRLG~(kn+cmTjd4u-oq_=DaQ$J6=D7DpGRp zMElA0bXaB-bE-K$8aYgA4f~GocBGo4AAvx71Y|g^X{0WaXF1dvsr*8LkxZj4V={ha zhVDF!Pp~UUGR8M28Bv#)cf!;-8%tlhAEuqh5f0hSb-5SXZL?>~Dn{+6W-s|bPbW#? z_umxdjM!6+I(Q>zlHPgf^nx=-?5ICAm5-=1@3Qs#AxcjSsnIiLz0FD0wT6Qb<}`J< z@qwN6`6Ood5+Osbvcr`jce(Sf)JI2Tttr`5glb(S{+{pzgXcm$dVLlsniWmvL|*q! z#pOnmae5Gi-?&nN4~RYco9Vlq*vJ{&-)O^@O|!KobnSvR-PU z+&YQLdKCHG^KW8e$!W5>F;b!G%`cKxV&yNUujk~Ea5URV;*qV2+Ici($%^zsps_}V zvOxDxkSicrk&WSO{6! zQYSAQJtEr|v*m4FOY2mo1bk<}yim^PyFtuYn{JfYq9}X*JeCK>5U%NRAH{)GMSU=Y zO1yAf5`q74w-bGyiaR>r z-3wa0xI-EQPio%dIPI(WYSPV0FDS6dZiO16m1bxrR0$ z*{=93n&IsUeF_)#?#}Y5!!EaLw}SwK8*qCei)WDM=HT|wxwJ8iHlU#44x{$sQ#N}8 zhQ~SkVcO&yn46F12*PZdC+_2Lg}tcvKsJSnOShcU5Yu$ZevpTau&h*nju2-*^T6$} ztaR82My!|U61ySiDE2hMHmkNhE;6nX(_GlY<{rj2(`Jpf>LE6(UMi^1b>4uV_H3(~ zq$TEw1!?LM-&rAyI^ObJxfVjTGBaDh>-1|01>rWW&;ok4&8; zBMrEJhA+SvXg#NR9I`NCLHzCKQSz6`E!g@->}FT8$z^B73VqLtXguD=Te$PR{(>xn zEaHrcA4eTIgiGGjQzZ6emo!2;6{{plWtHp(X%NL2o;6Ov*4!<{uu6K}Z*RcubUO`L zZW3JG<(e&04>hQ^Q@Kxa&vZH*CRXq&eN6F*nCvtsEO;XF9Oad5F4eH{OhMxVV`;xa zwFCw2c`X`29y?ZmljSaEF0e z*wqaMz6HF}m}`9%-u8;$m|Izf6+mwV`ZxBg_yzRu3i|eSykH`BrA8;9K>X08`_W5h1TkaR34i+N zm1kGI4#x8V4z=QXX^f5U$BksUiU7c&@>VGsO*t8US;I6I@QZ~lDIfE81Y0=T0e>A8Pu%%i@hLA2=I6b4%5+ z)T49ajNjwBU5!5ZFQUL%idvg4OE%@av~~yyYpmQU;Z%_b)_>@~Yr zyzEL#m262A5=C9im`T&zn^36&P4fZ6aXVXC1m)8;v^15RwqUzow6Trg@QZp2DHgcb z(~gMo%xwgXjT#-!vKOznitXOGFfEo<<_dS=fcye^A*OP?5%lH^F%cb~8zWsIR>-&g z?zvHV6H52FmKlh$GeX@(_*1zlQe}U!M}Mw)08_bmdF$sPu=+d5&RPXCJ_z84%KYRi?P_wlgoPPoTa7U<5B~fqrB(U@y6i`tB=s@+;eMW#?n~BDnX7SeHY&ZJfOI0J2s( z|4|fvT-`C6poI28OZ z$Fr-F)$nKCsj8!GmD1}mkEo$vI(lfiv|^9WjKORk6|)Us%9UDf&4bQdX>rM8Z0)=^blEG6QjhczXmj|OtOYrOd&buw zFY7ETpEP0~tMJ}_ObQ}$CP4d@o~$~nCk%RDD(>Le@`TA>WsLzPldoY4$!v;uuSQY0KO1eOj_IELsnM89 zXk?^Qy*rlKxL@ws-*;+K&`y6Nv#?`K!N96rml^>3d(d2Cq7#2vcY!)~cfi^wg&JEC z<>t>wJ$;?{c+!I_b@{YeDixjm+jT1PB&a1|L&nSF#G$1v+uvxrKEYEXn;sMCI@hn} z&qOe$5*~n>U_0{qF?t%%x5#HOO}RM;~DUkzJHn1d2yl<;(ioK#*cMOpnox5Xoe zLRMzS4hDxHp+*q9lsTi4TXt(GxQUHGbcrrM7lG(Q+a=XaXeul?lO*QJMIr0ZZXQLX zK6~Wh&Ee=@no39&_Q=ryV|0TqREiJ*Z7-Qmmng+kkFP^S8%bqKmX-xf--B;bmC2H* zQ>O}lfZu~V$i%v&sJ!O=l>Oxv_IJq&{1HziGJZydWn7{m#p5;Sozs-Y^g*>#VfEu$ z3hHRJ*OqbYZE$Vicg+qpvLDP=u8XD`r%0{pbfQ^ z3-?OTh%n+39b50Y{rsYw!&+|4*!l%Xzic(74e09h@+b73ByH>}n;~8hq_^il# zxvr0Meq3ke5d|iom${*eMVn3Km>&}zzl136-LhB^!=XBMd2n5uybEGH{T)%kioWl? z3Zwk|9HE}bU0X&Zn8qrOB@SGQa&GyJMUuWmIp}BgdTjPISQC;<-&;_JlYP>i5BBcZ zwd|FPTA&3yBRQQI?UX<%$x`1^`t;-~kFNJyPdzZ|oG^Sw7S&@`c7y`%Ov z<{B=;b11~=YQp4644FW68PqmAL~M*MdPNT0uNYXm0J~z}V{zK4P<`x=G~;?_X?h64 z64_O0V;4*Xem}29bct2DqRB74gnO$QVV{pp>q3dn`Osl3?%5k?A_ZApXGirarcxy} zcNN$)VYS&9k>5RCuj&qIoiuS+{?izIDD@gRlugngF+;=7{G<`eQ>ETMIocf|Ri0#!yh+o~1}ZTb{~|M_Kd>TX zqhkxaEvM&*<~7@W)SB4+8F_&N(d2EvZSVr$b#)kNKizHS>r`Zc`K)nW$UI>1-K+H2 zK$ANc-`n4zAn_sAnh#6D0&G1}5AO#lULRR!(082^-_r@H4F1`^>KSWm&rZ!@7(x7x z{}(xoonH$P&;6)^H|4h5Uz}Sx{1t}(_4AJe1wTiz0_Oe4%^F%W^n-# zEeKHvT73f5{4Fxv%_mRrLlk`Y1b;T-+br&_KLD<;0PUOEzq(5XBq;cK;T7Xppqd5Q z3BW!E4p8_5&cBTe3uel`YUkDL1mGsG_{gh_3II?6ER}t49Dj>R0BDMp)6EA|{3)1| z5CGMHn8cbo{?}0nKpg|_@XFXNpQ$#*KYWi^Z~(o`m&_|WxZkF5R}A8B!?%C(=g0uD z4D|nivx-$)$rl4sTA-$Z_XXLB)yTxkgv6=~{1rz5WG8?wpg=wYPe2;~7dG#|5ybzO zZviT}|39UIM=7EEq8y38>c!2 zd4Fy^adykjl@RfMIjh{@h0ULw2J?7qO-bNRSnf*amP^q`%87i+u3rkrPRew^FN%_| ztN(<7gxOh_TQdb@XMnPsZ`q=KQtJ|7GeFtx=eeGLq;srJX~4g!U~9L%$$uNlCGHfs%+TcxNi7;#je=y zLESC2bL|>`G@CiEx2)|dO$Sq-i0$`3;3e(a7}qwT2z_hmp=+Jc#Z%RuGjmz*dVE{E zmeYw`@enhlm!^A`&+~B=Y~W(&Uc*-lLBSaSYFAJSv!{RC10MLVcJJEzmb>2OXlsz@f?JUR`YlPQ!MdOX(r=C06n(@JXTI86uqPZHs4Qo^PELsvT^AfRQ33Z; zC->|?suT4;rT|Ieh&$TsYBsq*B#vi9Et3Cg+w--Dr2Up11bJ_m@AgfWyevcU3VU_HfJb+LiKThdpQGMexi z*prkw**h#*gb=0%Jjf$ab14066w}ko+gKO&o;d~$CqAW^fedq18J!-``_N_+;brQb zUQpj?5;N0+cnrp(A2$a07xGCKGne~}I}zb^nFcdXRL~9DeM*wg8(4Hw=t7PzV|KFP zDbzUkJw?4?2}CU{do);(e#Pz+WwXDwHF31cd@S4`AJ3h=BWA;5Qk-BC1;qCI21}WLL@(HGAy>oZ96w4w#E&)U7+E0A<}EN# zDy5hqb(Q{n_p-8ZT}y_Ligq1{y2HYj8BfP?aj8mTaL~0vmI#1LuFu-sMZYaSjs8vnT7F)cY zmEwdGzjelHn=#TOdS)A)!^DY3bO;@(kW8vmH*7XW8pO_|Mp?C)h?{I~acR?3J|_vg ztjAUz1(L($J+j@Q(vd(ISiMa#fZOWkbThFyc*Lq43>*a9op2<0D=^Px=+Vz`B;z2uYpo;uE0D!PJY5lKbkj@{baEprIZ=(t%& zbzSbo*|*Vj@;%3M#>jLx@0`eH6%t}o;r7-DxuohuQi)Tc+Ud82(F+EoNqyv{BRMtE zdJIzFj&1Ham$7MINLIrnp~HST7o$HeKP64#kcP2{+UW7;q!0SsVQ|j5Xh<-rX@TD6 z639u?t?}KgVbm6Hnms$XSIm{*)COBfXQ)E4WO`=#kd{>3foh6xf^DwZ6)f7fT)q^K z^gh9;j^3u_>3zE`#<94Fb+HBpA>jPq1!KMRj6C@5< z2|EY6Hwtf3R3(}A$>}*RONqAInr*L;W;U0e+~AeUdo}47$x6|A?|__|v(i}B=u=;I z;n>P_NxsyKB07}fT9BpJ(vElQo_0|@Vy~=G5MmYpIvUE#BOYfz4?3$DSlL}dy#p=s zrghZ%`$%Fu&bu|97p>3SGT)4&vES7Mgzxr$seE^$TO{zwr%S7O2f_j zDS@|-C@_oYnNJSFj6HsXz29bG@C+erUc!AWIYsa%l(3Fz+Mp{Y)0E1V=2=UL5%S-M zh?~3R|CyTjGAj)MuR_$OepJZT1>OJasu=iz|0;|DN&HO}e+L8p)~H*l)A8+OzC7j= zELI%lZyXDOLgv#fezcQ!d=<%p$ng)`7A-IS(WqOC9Dkd-XnnaBGyW=%SJM@1?(&MY z%&*n~VdJ&sixq_oh~zf{3c`8Hib&7hwEM)G$7iw}Y!U%)m7R52fV zu>x#c-Bz3DJH&!`1YijR0boGo0t)uo*BI~$DtI;hyJiLpOkY5|0)kfH35g7`k55idW*n| zy3Ya7uQbN1i5*`4R7TUI2JneLoR_PxbX%#}9SYE-e6U5#?my_gw^Cz>D$L_g>53){ z=76_u{@p&(6R}65ZuS=I=hhyEWc}@(IoIU6Tw2TmHk>#fcf-$JPD!S6&#gC`G_$Mk znnYU>Os@WXSS$U&RB-c)0g1=mN0UlM_BD|yCoW=seRDtQWa9wwkOV<3Tt>^UY8kVz zPhz4{sXl)-Dq4mRlfdANw{4Nw|xA0;<%zb zp}BL$a=BRHZ79iN6hsn}9zwvI{D5JD0N#ea}`j z&p190eP#PPvQbd}ME9T+ORFLNE;KF8N9xbv5b?zzES!3oboqWN8f(~)$65QU;WRWz zE9J`=h9#;W{scCf#!=L-&71tKV12j51QYrxuO;Ke=w2H(mf7QUY;7|w?(}+*p$ew; z9VCV&jofcjjJ30KI;Uu2^RR7ww@8rb`KAxRtlSNR7HbY%q+kulHNA&PM@~wds1kt$ z9SVFjLSU)qjTvlKD(brbL<2Qcl=NXf#-R)w7WNg6qj3nDwegb@x4YJo;&N$S$&c~v z5uAW`*be5aVImg$kfNH#S!W!FJ3D#GK`aza@UO@HOP_j!f|TesdYvvY`sib-H8KH1 z5Ji$7Tf_ID-Eu@CnAXSPvb!#c=8?r0Gv0Pf$*Z!u76S1YdZ0jtPmUKhENU%Co1piS z8K}p^LIm^;T;{4af$Yr$uoRlKNoyrH3p&~j6e05PVDUeK+P4lN({-3LOvGoYky0bj z*Y|dZF(Z$wtWni(n|-6UXh_u(+nZyj)CyD@#;~s&1~be&)_2YSQ7EFHqq|X6r>hcnR7kKg;MlcX@w+`c zJK*+zz`<++s!=byt4du`1}xt_CguxQ>q^X&%`|*9inJH;C^bG4UigI>_)}P%y zq~}OEZS^HY9-kbN|7x)y-0Y#RJT`fn=rD464Lm{k2x>&nW<*1J`>b^59b54)RPIMh z(uUSvNmtnrQ4cnb*i+&$#R3LL)*}rqg*q#tfdE|s|LxrYz9YLav5DiNKQpv zmV#v-rR}~!@%RE@zZi#p&yYc7#E0773Ol-?5?t$b@Un#OqIwUfSu!_qf~9K z4DAK1;ygTy-1P|9ZT8GKbm-$oIx|wkd5s#yU-c$&!*|LBc)EGutuZ}@K)>>95A89e5R+Gjo z)TRL$MAu>{bxk@o$BiWS1ujmIx;T1259BgOR`0YAl1RD!>~xoCe*;|R-gFWf9c@gN zD^WzAQDGt{L>*jT<_S55{i)jS^W6X4r+{po+j_t2?6gac_rCJ2)aOMH1c#8B{B-{E zZ@c=759oVzca;Laqk%tU1XFUYurt4loQLQdg`hPFW~x-=<8&>9NikO+)%K~=0d~m% z%YS!=^1(hWq*^b+v|B!J9*;|BZ+s?L>X|n9oi)(s05L_e+ z`g9vYsPL#3x5l>)W~P~Aw7)Mb!yU&`DH4Osorv2=8O@j-2$RZ(y(JhaDH8BsxhG~N z5jwye;w#BS-;7@G`)bQra);FVXK(jP%Ls469~rRT2$xonjxm+!Dog4Y(rA4>^ExRM zk}9y{qy%?Dak|r1*dC(mk;-(bC;nG8yVJ>5f&$BG_{CqB^L40cE+lA%+FfzmfkM$xWqpPEq-p|{YV^x zy}Kne@sdsa3T)i*OLu&y7^F5u^Mb}pPBCBpW~^vm_Rt@E z)w_%==H)Avsl}^Kaq&1$1oN}TysQOSvHOWE0RrOqHt}lQc!guUunLrD0Z|hCLfuNI zj<*KKM;R}X;<~2)1ZOz-j5yFNUh<21^TR)v>qcIFUWH5W;l}(|FkHdQSMXNizJLde zA^$Upyi%*<8OMAj&CePy#frc3l{6@+`QZxQ=*A~rlmd(fgNX?66`UgG(IGzb;>LVx z+$!;ypSa)|#7iFoKM5Z2kE|ZPp$z^Ueyrku6vzML2S7D^^FO7AyQtPe-C=_$P3J=k z_3=|3M+lznC7Bnmxm7rpCT|QlK3}Y5<;Pl@y?D@O)`7P8z&;ruKRh(O6C5=yw?Y>$Zom(VZ1*+jzHJ39t z4R#h554V}-+dYfBh^nf({Py7n5qFt`W5|N1Bl`z)4B1yGZZ73JOk>50K4f>cFGg=} z?2#;UtPT6Dki=Ga9)2fJa$NmvL4{Rx6Mj^scXAJVqFYc|HYLU5gk2*RX(x3}^4%}C zthkAGcMD= znWQvmEIP<4I)~_wit{(=){fqIF(aZ#|H)CqC%!YbCMP=Ib%lm)Vq7m=WHqF+;s!bn zaTHw-19zk^r(C-h8eCdapjhNAJ-4TPD)0{4NifJ4&0P#1k|}zYTcB2S&OL%X?gsd( z*~bK7ur5+wF0~ow>NVYKd}b(DL>t_T;aA{Q)DtXsp$pcDUIY=gwXb{ek*^Aglu(c8 zd-)exo$f@Eq3W$D*Vn3cyd< zu&~uO272oXoRcy(=8fwcV(lESOUT+30|xbbWiYH;|le>BcrU+;*Umu&xRF)`QvSMu_(ECTFP~seY5)u{H;M7A1FaD|Z35{v1;qs-m1d z^%P`di_NvBxXJazJ5llqS)04#fURvJgMf*q=M|gl@OX~4-dq&A<+1ieVJTIn8b8w>LI) zzYnmg+~}c^;hgu~CRgbe)G-px{Qe1ErM4A_Eb(#~Vd!!fZ4S$sq)(}3ZkvQ1XnRDe z!L_%>ox_I{hk8V2bJnA0;OfPXZlPy$-pw8P727}u5~nu8ROpJLm09W(T3cIRXSx(r z_$8(BG`CNPA(=}D!idNqbeK3X8e%H6g|nT}O#Kq4n_^HVrMtd#s`ujd*m#uaT{9C;g0Vo=7m}No` z*~Unlve(=#|LjgK_9Bsr+LV`#Na_KR!hHr|pK=4yVX#ax)!|ewF^V;9T^`73 zjwDMnrRfC8ybdnwf*OnTR8yic!)+fugrVP~4W(UctM62sZFEu&*UE8{3rkbV^aWBn zozlEs>G{w1CBTG<+drNsdcLF_d$r48`y!XlanYTVjcrB^L~vB}Bsek5mCk_d#^>8oGS*^@m#s@F+;E+-*#Jv*+E z*g`z5CSll@t+Z3GavebrULksuq@DGnkHz-usC0^>&yk4}GomfkZ znLTS;qJOJ3f>bYyc^VLn(CsGCC74&Lg4G)-UF@JnWUVidQCu6YoiGe>mj7)>0PzTMhlCI8%cZBRBVz}!m= z{=DY}Kqnr4gX9`uPQ+FtF4BZI{fSAa8>*^yIxMUfwr||HH%cN{{1q+eN(PR&YqYaH z^pgC=F2ua>uaHE)0>^$5H1xj9P zrS8L+kb|4&a=Ke>>??#_hMFB`zI*#m50{s3_#1hcPmAEc);|Y>4*aacG9<0xM;{JUtv`(2pO%ULnh;*e zJzVBtidPU4yg?0q(19;p`FOM+5r?bGw20MljTKr14;29h9sXkD_PqI7zVbL}ONj^m zRNUWsa@k9!EidJ8 z$8sL{13wQ8BGFdmYv=TG7?`&r_ap1@iO)t`%{uTpb4z?<{=-uGfv0B2m$Jcp1-lv& z2H6liFvRQ6cb4F3KNseBZ8@GD%*#V8M}=1#a_{*Q9^YmbzJXP_Wq0@kFa5xmwM$dS zU|^W1V?n(NTEk$t;cse_Zv^u(5Ubw;KlStB!y`bOcr_=?O9-!i`hWGnvy4F<`~5$q zW7{m8EktIs6%Bn)qWeJ|o26vM*4ax_A6Bs|XMyu=ZVxoAwuLS0SgZP1n4XW3O-_j? zBbMgdgf$xl4)vVd>AoX>1kR^L01EC2uP)vr80qO`sRWpI7uk-PJ(@Nd7?vEX58iV# z^;wSLP5qk~RaMZ{l?VY{T};dxsYiVWf}zIW@cO2jc}{;mnD%%&gWbv~zOHPZ=Q_Dz zk?@jx0wQO8K#p;!D$D0$}EjeFzLn~zeyg(T6cK&7?O}pnf?{dY5lv+;)9{6$~&bF1@|Yd z@5-DLxCz6^v77CT)i%8^i?H`6O|0L-PNEwKH8!S4Y$DPo2<^T_>2bsH?}9_)eJZ?6 zX>JY}*l{>m!Y`D@WqFP^0mY)s8aY;|!gRwE&x%*RcNBdrb~`H-y>+V&UK|SqeC1zQ z_6%c+wnz`hrNZqnauwQD*_nlNxo4spKe_p$uPO9M?kyOd%A}7Px%(_>xC=an2SIBN2NO`YxjEi%3ZS4%26rs#cH@WEBSF0-pPUL^(?#!zBS{)=mqP; zZq33*)@2nUp)92ox3vY%qjfGpDsq+GVv+keEt?o5UnM2A?%|}2w>{%VBJy&*#_DSH z>&F?7JLX-sE1B5V>&uger7eE39RHoE93Oi_+&DPB*IcyXLVzJYeSvgJsadGNG(OU& z(sMoe0uXxNs~^~zIE*kglBs@2eWAIHgM7dlMi^a_wIjD1-0|ToN<{S!k7yPko3Bwv z>E0amgB!du0GyKAxB@dXx5eg`kuO?Ke=Z0Od*Jdgr;V8=XMymdAzS%rf z`t_*TaLu&+?Cs49EFh_petidBOM27CyEen`DMe_L{x56P{e3hvt6Vs1NaH)*K7O^x zG$y%mTt45xrE3nsABrO#Q3MhD4W*>=$7kD8YVkpF#Ug9D3~p%|egcaHW-fO!*@ubi z+$Jdaw;hlo1nxz$HSk6q8T7z**ZOGIwKv@Lxyer>7Zc0KQi@}(-w)H})_6Te$a`FF zqv+zHc&c2{WR5;c45>Q$D1d6;Ltn@yjtM)+ycRmCr%g_vYmq3~09yW712(vBFlG}n z^YU-;IBz^v-6{_Z+&|8S;p74MN9p@_o=K-tDbhP3c^T3(a+%~lLs+^Ma4GyLR2Qs~9$ z_Ihubh9POt&1Ms-DGms?p+@{IA2Ge89%@=sIdOZ)@n)w1qgcJY3>Ru8J!mWNqJZ{~VS^`?;wUz)o*DT7-OQ;Ucnfs}ng>=wDMce?Tg z$;jRCoJDux9%#i@nR2NDq1|o%}kO$yG_F2Fzl{vV!}oW>JRR%_Qe}9 z2N%v-69BXiED4+4KDg#fhPOMq8j+z+5r-P4m$w?DnYA_{;z50_K2}w^yQ2Ya^PSjF z3wjq0y*dqhIy`LA6-OUk90}{(chorg*4pDlwnWX|$*_^@dcRKAnO3%Lp8WiwXy5&4 z8%bftu%lWw*k2>6o|SrnBpl5+kRd0PKipUTm}uTN4H)l3cYWECGwrDxTF}wapm&3~ zVb*{9BS37RrBt4_#a>RcBJI*}p~5X)IP`rhyIVmFLHi&gdH&hf*jJ4PJ5ulXS6H`l zb9648n@S6%ZP>bdvhzICcgEj(bW>M^KzwXr?;hQBq4w-8%Beo}p-DM@=dKD%E67R8 zsZMWkLIXw$Q}y2G;#sPP!^Dq{z0jY=J{^7KbM^#BCo;AaQsZYM6CAy@>HmswKXi5U6V+yz;ut;>X6D<8*2n5@{3*M=gHSC zlERJrv4-Yb_s@cVAIYnI;hu^CXjFUJ$mdGks^=u(jq}Z?8t*1<^$uh@HJP5YsxX4} zxj`*9dkv47a}}_UqYfq6SeQ(b)>;C-hnO-Z3V}35mA4XS4Adl?KBd9u-lY>l1SR7? zb>Z~%VcP>=H~(cCgRf)v8)KI(*xA2ISE!sa`RvpG$|C(=e*K>Umd|Tg4I!)|&Uixg zCzZMqJopFV>=G|^uoOJ_K{;Dl()jm?GhPsP$zBDM2K*o{=&gbh^@mF3zFOw^@@NjP z_%sJlt1ipcrA4^^LaXvp2g`=*(!TLhE_WH_%Ue0-H`{LT$KrU>b+y(826Xw++*3Kq3Mclc*07gVne50+?VAjkL7D%pWoVp}#}muP07bOrei{2m+McIDH|_~t7= zhXCr<8!wjh>C*lNUy80G8^8y?CI#~ephV@V)TOV0;*@W%t~#uIla1x@@ohZS;6muJYr!pmgOQp6&Y6`N&W3e&un@{_%?^Ie#P#R=y2>5Ip>f z+p5UrzvaLFo1e4*3d|#kV(i?RmyXF%ZiFeD^vo1!G07mF(8@a=kum`pLX_9WWiYJ+RJTR| zY>2<+FMicD6;G+%eHn!~>+l#FV(T4wB;f;9d5w2c`mS0=mtBNu%9DxpK|V<|jS@xz zGgN5=H|%$cYKIY{EvTOfT_l%si}k&H!ZQ4(68(ymX9VmimCU)vD6{QeNnFD76HjbH z(~0Uw_7!~28KmE!x?^%3)7&xgr}H2#m_psWiM54~t*fl|dCB#=pYY%R#wt(K0xi}g z&2WS=fxw4t!l9~v1gsM=^fE9(+mSTB$$3FT$(5oLruOJ08V4%h1PKihsoDXQd!>xv z3UKf8)e2s}Y_L9n?zPt1D4IY6el01y^kZz%zB+aN8cF zn1f5(GzBgFK;`g=mdl!E(h-v@GWvi9MCTGoUY^kFY$G$%cN-pKiRK!a+sp=RD;>@; z8bq4d7#ZDk=Pbh01`gzCF)!)M5Z9urYahY;fk_>MNGG%+%XER-31WafwHQ~XsMC@G zjb>C^6jS#(Jk*`@OmD9TM`~YQwj1#ivNzeu0~OZzQsS9AM_zZ-!$-Ph!vq}0ILFOX zU^FPD*rcFt^*9a*?AR(ZxB=ySD*Z#b$9sB!$8RnQh-@I7!@^-> zfA$>X{GsQnQ$e*e=1^;L37J^-+J|N`P%sghNOv%T2)A4I;_dd}($)rhob8N`%+V_o z2CNu;MMfif^oS5AD{Ia+hh6G`(vX7QmAqdN1bB&8rXj?T;dW-)ad&5_mOJ-U+qb|% z&D!GuVFH8s*f~9PO_f8Q_fh{Bd3gJ#EZ9MZJXtuis2c?pm@7{YIYcK~#}O!3t z8Z9;ZUiCDVy=E~|nw*kfDvKEj)X8+q6nLi>8y!JTbw}4ZEa396L+jSVq)ib7NhL<# z#@Ad{jzx$p!=b`Kro64QJFrSJw<-WD?#bxm#u;y+w2D;-RXjuCNS|h1PkW=AB`;y4 z+p}PPrW2t?@p_?VXRJr|9(AJ>Vy7V00p)vdrs=SWs8`w+1y&q+v%0en@$4(z3fZOC z2hl;c*VJAcm^2)G%1-JOsA_fG(w6E~*Oz=JkYdGdi7g}UVeP=f-qVJ67ovOdRNUkX zI(I6y*4&s5p!aU^ORd)nN1QbbiIT^dd7pV#6AhTH+rmIrpWk|Eac%I?(JePHz5BNs z_ZSFI-rN$nlW1@D(#;0v12W;tZC-avT&W%_u@EXu?|kGo=*9Y}!U*C<0VD;7sGbTlBI`r+=RHg{&A6Dw9H^h=z7t$CQBCbM$fj;^%QF<#wYTorvtCTHhjG^va~$Byy|8`U1jqAO{ywbZLvEy!`GVsOJVvye(ayh z^>3!@s=o><*PmThzQ4-1Sby%7@lgza%g*v>49z^R70k|pDwcm%6&fj0SaR2XSEI&uf zC-W}n2Ue$$m+}MrQ$=q7sHuDC;}<5UDGWUl&bFMb3VVYA9NW$)Q>=1XaOupRjy@j?;{2}vbeC{Q# z&IQGaYtowD%~sIH-4+kbhEFc;K{3ND3JlW;nHFtviUxi)*v{f7ClID@(dQn!XEWSt zV--dlGqKx5wsxt_Oxe4u>raZ2*Vf?Cd8Xylg7g^srgAKKFwT9O4D(gtnBI{@fE%@s z(o#k$HsTzUWSIRqW|HO4@k5-hW4Rdx)_fGzd_Gd?s_9!3cI|+LQ~^}-)Cadd1B(Zw zYdcSV2z1Pwt$%w*D*s!Pv#MSaq3_Tg{Ow{X2&`uq>*XRQmipv%P(_G|PWcnJ;URsi za3{_8C0crkCgORNw|q-~Y3}W}02KU5?YRBS+@olgn9%yyDJv9tSAZy(gZ; zcm{@q<1bM{2#Lj&n|`g^htirTr#-VeR_g7eY5O*h1Q3$HzP73^aYMsY#V$!U(5u>F zt*coZCZ*hjc1y|4p4q?Nx_oxsq|DHp1-lO6wO(;R=(h=nkZF^Y5skxAat^L{hz^|7 za%v(DfYvu|ej=SA-AIZ-h4r``L-o>4*J*^f1kyL=c^X}Th1t{_t2GTt(oY1wb5@a( zqph=EKXIrt(Kr4TwGhRmjKiHheAJ9%#uEZusE3V7ni5PQ6Qj@#lLD96!)}JprHZam z2dy^B_r!1pl>T??1=Q2a!2bznrdh!gM@d45DMX>j))rv=HRjHgnvBp6a3@vHPe^*DgWcNJVbsC>V}j zwc&Qi$G-3M-RYkL?@9Cst-5-uNKZATy8@JoLBO#^0xU6tu>YQ`}EQJ5shkRa_(uEb2B@?#TF<4-GLTqj)y@( ztsNa|JEDPx42-Gf6%6XGH`vtqD*mW!F(`xRqE7P~cVPoExPnDA6`q>x znn(tSJ7+aWe%5GpSOGQ+Jp^@3b`4#K(~C2!vCcN<_^31~j#g%=sypW7n&(yse-``x z;)xJ*Kt`HgtVkKnJ$!RG)Jy4sFko=SBb1%9uEIylV!{foJ!@3(Xxp4=k*U1ltk)Vk zCUw1clyfpn)?hB-Bstd+eLl?##i*slnzd%J$DWCB1?Jje6^7X-gNxJ4@D!~xBlWu$ zWOCC)C{FR^1;Zbz{r3tDj}Sd+O_WdKHWnQQ{Ef4k1j4!AIjB9KN2ZYr7TB)O4@CIudxZKJB;iiqm_hk?B|~K*BqfE4>dxW3&=fLFkg<~( zGd^XED6`YpfDw(;)cN!JD0H3A-fPrUkutQ8gjvhWL7bhbly%^HF^kS0a%5Yh4n;Axz0t%GOBz1zOrtk1qw7w-Jh@7|YNE!QudzlK39Tcz*+ zYL(iYdGbH%$^Xp$lA1im?dl)|C^Gqn-_ZhNsC<#hi=i&* zO#hZS{`T1_@@w^4A4C}N`2~D=$!ll*Z3JQo0=CQn<1SGQRv@_iY-$P^O#O-d#Sf-} zCh2M&>)%RBaHp7ev;UJrx=O(12UB?ngMS25SHNFC$OS9Hav5RJxYW^Fz3cxc4VN!9 zSFij3hW`Q^T>N|g)#NJQKjjai@o)M0h+Mw-56Uo)15wl_~GNXRl^j#)93fTR!d*}}m3!!7qY0_)7s-Fucl}KjURw zmk!@=1;6!g-Om*Ty5y*Wrs{utK>hjrKVy}8ruT=W8F<;lWz}u>O$35d!iQDCv})P= zjL~YZ0kFF@DIs%0OM^cp{6NwFT^zFcW38Fnp8B{;yeVN>&ne26o3|qj?fo{PPg3{p zlD2G6_?K68-vD!<)JCQ`m+56ZZ05SVAKQ9qN2|{LS(2{j{W9!@gqLp=M8_lVuG`y? z+18dEtFW6TXj*&SQx>#J!_l76S14Ya%Xd6_o#yQKQi-v+`;OjJMxnuerLuinUT$p+ z7dno4s=lMJYEx+W^oR=0#e5#^;F%H9gOj_a-X7?6SSP35S`^;XFk){c;DLuqw%wd! zszVP|O5l9irHYajAmdBlbvB8tQe0aAQ%b)==rtf1Ohe+!W86e>y&YbX1g~~EVFJkb zg3F&D&AGP62x=qFJO`wKjITlun;lkGTu)V#rd}aUFUN~^J8V4@Y3&bS-Yz_0>|iMnmt)^WrwGram;#eUpcCt zEv%prS6*xpnVKY|wqs+3T?B2R$^~6&F3k>GJi8!pS7pZuK|k!^6~SXlt_(*ETvyK? znwDSHAm!QW@zG|tK<}7(Xo%AB0;NLdvT()#*}YiN;e)#`X40+Jr7>S?mlvTRG)KEo z7?<}(%XSzk6k1Tf%}uSKcm!}8u-xIJ_EEtI8frcQL76zYHOF>{hLR!xN2)OD3ZtQa z-n!J1idNk0K*C&>S4)J3R)0ceNiicq{kflNXJfc&qi}72ja$nuQXq9k)GY&X? z{kjn&XQ~O*t*J&!UW>GTf;~oW=%{lYt=AS<>ufkN2xGeAP-=l84@NZeowYxD2BVv8 zO2bV*z)vSVzMJG(g$^TCCulI3i$K)$u$P%B+T{2n$C#i=6n%Xa9jL>fM6F{oUYmLN zqKd4K3E882Df8-3wIOZ2Pe_5g&yY%qP$igJ2jUDF!AMJo`qK2cN^uO$G$r7efK4IF z=Abb((+nmNeHV6|Ed+4)iS=NXeiwP=|^B z5n&|iR&=Vvdo1egpy~x*M39`A#C;=*vP5uo9E_~of}={#gt(-Uxx@nzr>*K5)^ei* zkH212q61v)jlJ}zNeZvR2eG$Y!|-{;!};NNuim-Qis{XH9U^xB#h6_z?fR~-Fbz$D zr`TQt;nE~P@L}Z@sdZH5k=NZ_A!o2R4&RM&oSE*C9lw1&yl;T$5^>ss8pT0qUMrC> zrV{QJJGa%0luR5Ol1bh>oTgwW{;8b+(~zOrFy2cQVzf<9r&%%>37D)3Dxs=YqTql| zNo_|i&>UXQD62j&awd0Ey4%&>`6teWpM^FECQ1m!SgnzcK4c-Je_^NoO^b2JGyg+@ zTdGlN>2tf*rS^IqmF#%zXD@B9B4vS*DJZ8@65()E!|gJkE`*Hnkfg%4vXJ&v1Dlq` zDmR1N6C)^~@|N#46e*bD^({n!-LWI$e(GkK(Q;0qHOV~QgKdEY-AxF-El1yQ6qSao zD(u(pu=;Hvt`md1C_=FgPB$A;CDfJL#B94rqd=T70lSA0-{!{)N>n8e>>HM0;+mbO zZyP&I+SFT(vE8TBU{Sk=rC1ZqyQa$OucW2Pe-VI51a-@?HEk@if`zQ`dYIF+Y-kCQ zxsehi%URcFnD;izul)%sd(s9|SO0LfMDTLLSH{i0uBRhrxQgP69@%}=ko`1VS!;!; zg4wo^clD`K9|E?U!}aNeozKNH>hFBlomQ357oavH(2;tV27Mk?h}bK zHnNFsI>+XO()FWBgXXUo_$h?wd1G@(s1I3pW-`lp3McWeo01as^%))=)cjGjosOMg zrd1yR_odK$ecjSkP}Wc{M3=IZAk25FBvtFiE;vjpD~hSGUG^Nzyl<<;g$G)u`1g zd%pe27op(w{nGggzJ0WW*y1Nlc~W%g?j9r$%zjwj>E*MtmNpo8ky228^0epDy*#Kr zS36JO19*PEwda2q6rTUhuVp3x{}Uh(;D^Bc`yX2MJAZxvv#8(!h3EKxMtF{=5BfN( zhJ;I^wH=aL%sOt8r3l+5KRJ*yQ5V6jgWPG6gDmFa5D z^0s+jN*Nrv{!aG`byQB4XM8G6XKO@d9q_1Vvh4!5d7m9D^{6Ro9Wr^aS36i0yrYjx zz#d{+5DYi!fOqsUG#7AdA)^-DTKFXA)!};mokzQQy!OSs46oC3neSir?sxbDy{>;Z z%9gu0pN1NcJrDFBb5=yZo;>GPtfD-S-y`;s*x4MMVp5U}UB@UbpR^sTdqPq6DsU@N zemSR+Yr&otyC?1;LOZls^>Y^t=iMZ>P4a{p#9ha>Lrw^D)QB^to!=aP=Y;;*vaw=GM^>Q-3V!EVcqyQuM%OhWii;y zf}8cyesX03mqH_A0%xZTNU25SM4J84{AGdJvg8w!1yL!VT(GPiSnis}@wz zRxut{mZvrgs&yE@!^r+_T$Pod_aL{}B7qu4!bjHTLty#+4IFGf)S4RBhtT&`T1?pz z90J6ocy2Qep(cr$MLML<`4d7KmDLm}1m-bU>+u> z-s{fW1|Q=?8QBJ3)R-YT^P$wH9rx9$tfoq&?}(n7mxZhTA%_nG2vd3M$wk@=<$rNwxLYw`pw4?zQa!)HgN=`o{5o*hOOoF310 zvf_YK$hiqajWuD1Zab(WjqgxC3yT1SPoQaw-$1+o09VC!{iMG_0AlIBtl86Y8FAF4Xrym;9@;KM)rvXW{xNL~jy* z`cI?Yz~H9qGKBPg>{pkG8kgH=E}kO6oQS4rnD+)AOzq6q2_~A&mO7N+ z%%qFR3hBOSP$vTpvMvsP15Jf(*F*-v3F1cZejTw2x)N<#W-h=(PfR1>79_MEct#hfF@>_Sx4F%+TN!o_MTznC$h#h zG1xZF?&xs8yXuy5r+aTc<%q(187XWEP72+}igO@t(Fw6R0~oiOIps>cCBMeb<-CIS zN*07b%u?*+T|#!@tWZOueV-g?B~C;y%}`S5V@&6?YoWOQy|oU|!O&6L*m@(1CPetO zKQhES5lUMxVF2Um1aU+<%O6DeI(j2!;`>l66vQ(tqPnX%y_07A{qdR3S?)0=7LKml z%YHumEca^V$-rva;V#J;p%MO_lL!`$&{S7&&dEZn&UE)hXlM=9hx*sMnQJ|;*`5moc;rYMcpY=G8?UE@l(Gr} z<2;BqnjF?79^5EG4R4RLa}*(}+%u)A;hxyvVI#h_@KkNv>9B-&}~4V2L9qpO{$c z>{0EWVJ9~ue3E*7{g47iA+A6(Z+7uXh~LQIv}IRSewxsC8j`J^N)VU7dBh@0M1eq` z)o6Bm8Gbcz92d_mg$|N~cRqoJ9wdnVE9JKS{O4k&Z;#O?Z!_?83ygZ|QQ$}_dq=4N zH0&fP#>3Gm&5wAimY6nlO7!~F2d<~g%mzGEHyKgS$>eL+-%h? zk6%zw(A*tJr z?{WL-9ZX#ENa(BX)HS>FPV6tjZJW7WIt4%3^2dkD_)G)0mf_PMNZE_xftKF{ZX^nl zlr3_D-eZKNJ&3x6!B$L)&QsRq77=Wpo5<`{ruddXVb$1p`w%t_nK>n_*gQg4YQHIJ zNfDCmsAq0K(2#Y>O~yYNpL>R1ZvXn_cE|M)tCha~wK zb6rBY^6u4_DOD5iKncoMq2L`m2&w|xP9Uoatm*UIP~Ixod)@%T(kd9Q@We}vF0UW_ zJ0JAJkK+DHcOO)zSCO0$pZr%aM+!<%{x$pR9sBB~I=_n#I+vhr2}(^~)qZKp3w+=|gKz&|->Cmx zasJ=mgF>|7KP5za{H(tSpJo?nInesBR)Ka1b+6`2lV!^o4QQXu<5BS z$5cTF^osUK3rSbzj&lEngx|%GEObl}cO-Sh*?*7x_TODw$3P+aR=%=MfT_2{NAV@Qoqb-u0o-+z*F7IOL$!)6dzgJ(62|?1^b&8cSC} z_Tqr*4#;SULd08BcQyU#ux^E-1$Crh`A9>z*p-_(ndykfjomwp7akvX9N~D_#d`Tb zo{)ZRDiV~d=w5*1-COL0u%qoQBZ$)B(rZK$=y-(&Q*jZKVrSs@3bY=|hH>)-2%(1> z7_aB4O-}9x7==l_!fPSMNyjJTGkz;&w@?DWL4vKNStvtOrRwT7yDPgmP>nIC36+eP zvJ381rRIU($&wW`z-q`b&aG6*yN_#A1#qBjYj}a-Hd!%dkG1cvNj)WDTXovqh9I#fx$UAXfa>TCe<_V=+x z4aWCUQ|gFL%+ai0FE-f%8FCLjR2hYJW=>a7a$Qe#W&Py)3eM7Pfs&B(9yrGL$9o-{ zjW$_0j-Z&`bDFqFd1&1!k?MfB-c3jaMp@7X2U{6t-y5~J&OXW=S#&2L3bhugU%l>M z(%>NP<8SsiP+~m`Yh}YkKB^cy$*;M;XIco*qu-F0qK5`9+8I{Bo1T!Qllg94tQrVkfePUPc$ic_?$+ zgVNXNTLV+VBqs3)Q9~23adSr#YI1Ng_#yQ676cJR@GzoMzCy;YD5*^Uy2!wltPyWC z;SL3|#OFu=meoyTA0e)ddSaCbpvxSj6@R-ph&XSC*eKmA>EA6TD}S-ge;wMbM{swp_21bnhW&6a!G&W2=s?miPAx zd0z=R4E`hJZKdDEAJ=5Bv24_cYU0Ss^~-F73$o>QaDb>iG7%HFgCd%u-FebwiZ7;R ztvQ1d+8@_n{4l)3Xs?*^oT@18?I5wP1G-KpQeLSwOEyDV*yT(TXHB^T2BWqXy7L{Y z>pu3E$#%i(N>W`y-ZON$`b8bK;sJG5KYmc-yCr*e z*G*Rc0!;Iz1-st=Qf5EOP;+pq6EHy7IyF;=OaCK*#=6Cb`#>w!yUMEEK&P+Pv*2yb zz@(sY&l$K(X<J)0&b&ZN{i@3YQ`_O=u2 z$B*mn(mE!?vOZ&wW~W{{rEpPITVdaP$c{L-jJ#&Dd`!JkgbC4${GmMkJcfpKaYBX@ zRiRhhNox~6ur#iQL3T`usBYZFb{#5%YVLNHl(WzYZE7;J_UTgfc4xCEg`|H8tcab- zaS81YD!8R(Ez^r&x%ZXJhbyy)ez}>X4nV@WuX9gns`;LtC$L9*A4oFiMbst?dJ@vO z!B9fhaqg#HW+zRDN|4Z=`gF~|zvEzRwS>ilK;NS~sTg|l#T_|85@WXSc9hq%4u{2H zG9hOQK18wLzsH~pi0K&Ppy%aGd--rqtb=ri>naYX$nBD< zZ&nbwL9Wy=Iycj5=rMd-DGf=hx4D2%gZXI+D=i9SdQa-GIoF%2O^4@P_J0{KmAX`8 z@BG3eWBrQP`TDOCbMvW*zlp{FFK<`loqPjy*#`Y-Ghj8|$zRvvcawP8&L8#pS+}3G z=Fc|h)=RT|1C%c`!8|8lWd^kH8uY6M=yHjkw-&$~3;+#K@PKlYuQTzIeU$_9KeU7g4gc+dJ?ER4=u4!LEXul4Op^1`7Bg$Ie=eG z;&qewo%*r2#bfXINT?sWb47G6Rh8cHs!A)vTR&T$ARYB*(Rp#Dsss|EK=%{Wn*4G- zzoGQ=kihB<`?9Q@{lqWVgN6F#gy)M-d=Hd&;SQc9D%8(%b1C_`Y=iP^OJIu$G(cAr z=W?fhRdKE+Kf$QylJ)tQ`PtRW_a8i{B^z`VzzVkP`PcFM%XEIulmE(}p9PzYfL>>{#I&=*A69QWb z?uh8UAKrc9DobFv^@F#}FT~x3%HzID=<^9L4<@ji2O|^{CHDLV4Cy`68HE4x@Yo^E zX{`YL=TYf>1zOZY3oV^Nt^R67rHiNhxe8+W2C155?|O#ral@;SWw^}&5UscPbq<>v z7`f+nD10!0Dwyk-G7Ud5Dy3p+=5I5!U$PS6>Je5m$3V^vr__G`&=!XJWKCt3vfmXu zy0&7{1bnL%oIB+7s-V$s&$-bu;1H&GRP2yZRfU7>IsH+^?5x)wc5$a_JD|D6S~eN5 z(kp40{1m_wB6UhuA6}SMEW?7HtWAX-&C+_x2v>mz^zVoj*Y)4FNKPhXmZV(r zC=H=c)fSlqQ%y2XMFFH>ARci{&d`%$!YX%d7-xnQT78+o=EfinRk^q$eW91*?iOgA zl_qo*mFuY=5@!fL-hO7$F%pSE*XtQOgdCYTwwxSv2(_gu0acAu=i537)Y`<)+u~el@OGl>Tpy9cUGtL8>XLmflHHxIo*(bR zk@|S;nptGRtiNRr+jA|wxV+JM48iOjG%1$e8EJHb3e^bDt6dTd0^g(r1Qtnab(A^NnD&j(&f8b-D!?!}onmBXurHiVx=U2jeNemBX{ z3w~?izJ|1c&muOtqUmB_|Hpu_Lo`X;CkKte-ESVNTI+M}v$GO)0`}NT<*BBt2VJ2= zO5D0OgZpgYQ(pRO_fTL+!D6mSdd%5<_OIZ*-7i)2&EyeHdqn7g2GiH24-kgWgx;jwv{T|h;I7KG zqvvS2C!5I1u!ob9k5}UWX+uW|)bR>c-FonG&MASe@;GOriMvz%Ub= zQOOyZMYE9NK$o}*)Vn~UWn!5Qq@o(r+R3!_?>9mMA_BkFrE4TQtQ&EoorBQANT{I% zukyq8bwoWP*1NYuU$^r)vgXK(GzN}ER0L)}Me6oN1Myh6Y+(5z?!4nvg;_tb0x=u$V-e}W&n4tH95O{K z*60(sLrRwy>^Sq2l||6~p$+@eD#ad?13-N!yIVHTOupU`9cnP^Hj!Ms#@f1eSvN(g<~NQ>d$ab z(?j*JF{m)8`*goPY+wWCNhI1H&xRH0qdYr?lPf`)7OjC^)56xgqs@jMqf~h!a){!( zuy0?sP?UB*siygoJ)+RX){iO3yvS1?Pt4Io9Vzn}PGCr04Jz0!460|Fz5XKxqi0#= zl6R$YCt4q)ow8etlh2lw^Q&@nWJ>G_9Z(;LJmWn74C#|Mq$qMs&RuECHg4RZ_5TlX z?;X{2+Gzhu@0dbw(t8VpDk!~!G--l_(5rxei0Dv44@wCgkDdJn(0O@f(pp6K=9E_bmeO54m7$c#G^ z!w7%sL>Y=RHdxl@1;{}Zru)||Y%Grx7IMa{%<2}nGoL?!zU5vIwP&)Phi)gcBTE@Q zt$R8>^TKHj&A98g?vindkEXppEzEn*M~~fMol60va&oMGH8j|gN`=1++AL44z&@5{ zc4(17-I*Co?JSKb?Km2i84D`bq7viKrd4a-3`>ro3*&WX>Y!@Gyn;~iucvW_ByVEw z)Kc-u4047|Z(-cDXx6eAxiRhJk#60yT!+K3P}W-p2T{J?|pv|_p~of|6GI39wFpH3DMBKLD;?8{0HDBo=7PD z&FJ5|fF~`$lH5b1cV4xZ?El6vw)6$+H(fi0^)z@$V8`s)H7kex*R z324r#Jq#(~mYo#!BraMJ*-cx7gy#}55;=_6g|5{XhRi+yC{o|MEWp75cw6Wc5IUm)wJfxlrD| zLL7!@H-bvow_tAA_>5JbdR|gU-ha+w%Ut+!W?n`bW%)n0=>Diq7(vdFi_3r`vYyy?MuSoMz~Iqy=E7ZfNY9 zo7i4YJ$vg+l<~E%B7;ZFniZm?JXg`qFJm=syWTg2UXxM9O`(LpUu+o^T4~5lh@!Gf zq~}pXi&Dli*+no4TA?EnVXSt_%pw-aRd{h;yA~$FFK!WrP9ooO29F%|h)4*M`SvM| zr$8yhDgDx@Ahj1zSuRJGYQ=IU=+?X%;?1YZs&Flr{=mUKs&Qiq=C7e_5MZYs-shKI z2eZgKu_l<{9-i?Pqu{D4np|jM4oz~u(!Rzbc-aN%ZBz0?Ynoy7?Oj_*81ob!7AGrW z5)+@JZBb@&ev8~KRjbBU6t$3%Uuk5nGYuUGPPOGnVFlK$mVT%L_r+W}X34v8ys{j?8g7g?LatYL4Y0bw) z6dZVFzrlxD;~oIEv?f*|pJ(;+gco9^<^H&M{42@Z7EYL>Zyu<`DmV!JSkVhYoTNmL zi^M-b)|-#e3UKf-Jhx3k=-6_8Fsos#>g$GI<>cVzd4lpr=%6_j%(@u8`ukuHF0k`U zcTI42z#eV)Bj8hQ5H&+uwv=I+AP&+Qr&YP6{sRnpqM zeaSZ@n9qT_pcjF#6Mm5izoYg7+!z5CP&2fC;fa66Edb7k6#HY4E~cmw@T+hoH+6$c zFFxVd*28+b;A~p09XscdtG0y-anj64Ba8(PN+Va$r{<_wh5BY)AYer^ zDr#D1@;*GdVq$)!wmgW(_~m@_?KCyr=pxbmp89B~PRE*LbIKLHY~^H9sz9`WEl!7+H`5*3rsTot#Hzzc*9_9iQR6-4EH z7a}zy&F*}slBxjp`i4S+cd{RQc~csw)DuecLWJq&t{ID>hA4;0#&XvAc-tCUXxmk3 zp~9Oc7!`^pO3&?ORz5~F^8!ms&!Mwoth~TZEZKG2Gou7?we1RrLyMoQ1rRD!Y}*htYfdafaCBRhLjuby=7WIxZ!i zmwP#-Y^*ZIP}{*BxYi~YAg_rXEwbJ*vWa>}&E*q3IG?LP`k z6fbMTBjgRV@b2M@^z+KpG{PH}Qne|ZVwU9fsQ?u{nT=5` zO2>EN__an)UO_LhrmA*bfVoq>ukq!M*9!Kpv7|AIPq)lsoSCR-z z`WUQF@0P5~&()A(mw%G~Q6!bPcxt@$0a>xEzY9E0@|UMXF+Q2jDg=h%5fnWNDa zuEV&~{n7gQJRRpXGtR=8E*`2tcIh8vEHBO$N(;NuNXtJv5$@|J zw}?0OfOSgjE$yvJ5mKWE3h@N@lt_63F6;lju0#~AB;S-^n*K@CClN^j(-e@a2Wv^h zm?+U11^P*QDNq7x6ws=FJAg9^!19R^P(Yj#d7}H3qhC#<-x~A3tRw&94*=2?5U{{s zL;^qo4}iT&0`mjpe!|%++yno5q*6Xm#|Ok|`TveZI-cajY^2$aG|UpWZ>g+W^&3}9T^HPIslRf;b421!%OhW>CEw*Z+PWjYs?ao{N^e*_) zGHg4C1s8rle`iQpo6cqT!6_SOt^0Rg+Ocsn=EFL#ooWk+o#A@VI6WndLmsg&Rw!|8Y8{Ishpf{ z{xu8besrsqMS+^jASJ`>t*3*OktCHlZ{nzyS+=pJuLBF6^?6KA0v0P`?ff~XH}8~= zW4?q37nM0jLIc9AP+vmP)zzcj(H5q*MU{G0??I=wE1ak6wPi8O=blnsrKvn*^6oNY zQZ!YpbNTU4TVk##OZo}#=yd+-DoxF2_UWZt9=_K>xv9|Wp>MI0Cw7N^h_ln!JgmtU zzc}M|(_(~CjGg+yMj=%4E`5)!6}yQ`4dk;k#o<3aDrlh1v|bXY@-z5Gk#1hwm5+i$F~p_~H2reC&M zH#(%WxtwZNk@ygg_w+>+wB#&%a`jNZ=s?ge9_tgp~lsH`j7iX9(3lh z$Yl6yhEH%W!a#*b%w5+`tYu%%})u2hD9Q&-5>i|lMGXj1%w2IW=?}ALOGGJ zn_ilW;Es?5w~#fj@I`P#=vB85+|iYbVA*U#=ey4LA~9yJ>R$#ZTqn*~P`WnCOSd?i z$Ka`5kMIp%a1M&W)4E=i*LdjM_*WRctD`()o^wqM=9aTyu;}K;P=R-u5uu;v-hT>N zh&95u=fOTP*oS_wHX3HnlcKFX>luqON`B1#9DkEjY!l#yv*(3(r?E!66&rnS&r_ad z038xCUS(cFN7BX0RrB{LND8yVucpO?aB3rr7G>{ZVqJDyrPAJ;=qNp`FmV__kbN<0 zWW3n@3bfEq`5+?%!rtdevoXz<>YNBUwe86=<)`l|kAk>%Q=J}-a&@lB$;$1cVjo=W zZnDinbM|#J3?j3gG0hP5ZIMg&AwsTO?OCU{yXik)ILZ2L@llRey|nQKR`U0&5agk1 zgrhX;Q7$~Y>OH(!s3WRomV;fX9iO!wS6sD;Qgp=&AHImyVUS3uZC#~z$;(O;6xTOt z3ND2!G%VKI_KCShqUCC``!w4;*&Mg}IPF%`nAfeK0iU`LN9*Xh8HGT}KUZGxu3bq=$*rKhEU0O+k^Rm!u3p5u0uv8#Z z9%(4Ev^89k(J6lpG$wTR3v_^`ikWt3L~j78bWO{hF|orZMcIT+)?-VoKT^j?(eFr> zMFJf^G*yoN8GGi|V@}x|dggTrjIHVl)98g07L__ZWxd&Q_A%a}FUYLBRzHdZNeFOO zUNJJiK`zswUzn$f{F0R@+Y$`jpWE5qS#d=nuh-L6_5&tFZH3W9|FAS~mt8$&rkwib zx=l3L{N6pPge#-EAM+cN2V$CJFdW`)g~1HhHx_Fy!n7sW##7Jk)*KFzF;Qg1PCev^ z&5skHhRSxutyT9y$1e=BRr?fr@Vti^AKG2AGyqc#PP^saj_q+_a8Ec&fu`4BeFs=qEG$5Kzms4v5%jRsus0H=@(&quO8REG|uDF?0Q%01Cnr-K!N;@(10oxe@k_t=m@#- zmmP|*ipB(;icWUzx?TmOHr-JTdu5Fgd|s+s5?yuz^-0w(J`OiJtNKnhe5t5*svCoi zPaODymaZ07m%@;-#rUCRd`glAFp0JJFt{^;J$cY$>$AZ9_=gQj=$Nz@6!59UDhzN4~vf zN!rmlIvO1Z4Ze6!5u0dWafhwteIL*v3tRFuZ6*{iB~c(_NWShYtI6# zSYFfSW)xcFOmXuKPwuv@yufgaNaK@Q1y6ipi<*)HHC#{aHwl7|y*~bmGT{@(?VD!K z6Mp{?QG67cI@KU+#e-7gxD&8O3g0}f)d_j0jL*pl7F0UV1bCE{=p!*y5J8&<@QwmL zG1*sxY{jf&W!7KkI~>InCA(=oRc5o?trIK_Q1ZtGS%uwCXxJ=U8OpZkyPC2A0nD>{ zz7xEd9HfZV*O(3m@KAu-1pKK?L}I=!t1hKGYZ>Q+3>7^ar9u#OC7rwL1m}cTns(Xi z6HkO2rkUM#XU3(_3vSgXl$qIdVQE{G76ow)V2Km=;41mDdGBzKk;t%`aYbEe(X?u{ zx2g^$)h{S7r|!m+jjx**OM5-8Rhbc+X8yXMJ}zu<=jhqi+r=~$^Fg%blv1ZNl%1`);?o5~j1w8Dd%K12Dok_mToE2Z z7@{;F4S{`=U>RNK%pSfB%$Vuz9VZb7Ill9P)8N!a)5nN`Aj&>O(9RnyA}|zQfVi+z zREt1G!XG2H7EawpY(<3iAo6#L1`uA6@Ipl0&douDeI&dXQM`Dx5n&mrCwO|Pl3^Ip z6EV@bi=cQZlMm(VEiZJb!$!DZ^?S9)(oA$HLvhW35&?y;4o*{&O zq%GykU22pB#$@>yqA9ph4{d8pD(@fd;oQ3zZ=Vlg1pGUrWduuIzw9V?TIG3VZ!*K;K zGr8iM-@F@()cWZAwayKuag-CCg1;#ccLtoPKCz3`+F z1XDa6^Q3u}LiyJ@@Y7c2>0ETK5i8*dK!aTu~|61`iV6gbZ@GHFI_J z#tQFV;}`_hQ!&rdu0Vw|6Tu%K48ERaPUGTz9Mny^Ug2)?j=&Ho_1Soxuk;*gFgN3j z29DUT>o##IvEPkCyRW|Ovj0Bqd}=Bt%ZW+Uw@xx2vEiK+&F>~}w|SCPG%u^1t}3OD zs~f4Do8=MkM)p)bYyUGHv7AG-$m+&&L}xq1QF?_=3Oyk_W38MU<0+3`#qfQ|>dy6n z$Z03fm2EXBckJ|v+=C4A3ZB$$L%kJ=VY$GJ6giHj z0rkKT7zl05!vTd$3ApRTb5fe;l38>JyQN!gb&9<-%08`QW7g4SDif52?GElVVcW$s z@CGZOLl>!N9!reLwV%rqvJ?^}! zf((+vJxi;jh%ys)N!5y(ck*^gd#u8x#*rr+P@8KpO9gS6lqj!z9Hvy=oQEHzS$rC= z?l$Wv)A*|YibK(MYcp0syPeU>`9p7UsMwL`6=o7?TktBuBrZ)4^!DYkqdl8$;hAcQ zEUM$S63Pcvxfm%I}@Hs?>Q0qO3|(z`M4e#NkIn{6#FmC}zA ztwy}wJM*j{*%ewk7LWiXdpV9LPRT#xjdgIQX%BwBojIjbeK@HmKuN%cFOgvkIW%!o?4+CkF4 zbCVADqJo97e~6i<<0{fDQ`LBf!pCn5ZBVSBVxPf!!JvWiHLjGgVpG=CYa#I>*pM1E z@;thmXKa{t*l`t`i!UH|6$nfFf_zMWF(V;HjhxxK-7RcdyPaVN)So6B zS2}z*mUUV_`NR)o7nn0qbSooa5^|k!^lGNUCSnOBR7&p|qkDu4o8mBA#@-Ejt5q1n zV8MZ8MsE5fH_0u5^9ShQ2#xs$`A|7qGTf_!&gc-5*=IG5wX~E{ z03||avr5jj*q)?oi)3kO53Aj`M*jeYwzS+a&x!ffSo-v*SE^Y!_&+XB530|DzNz7X z%XlDHN<90f>7Uqppvh#>xVrC^{z{jU$f2Z+DN&dbUDAU|(*qXiA4yXW0P3`tF(qL` z{eHQmBqBbkWKW8jlCJRg;i26?%=GO+%}VUnlLDp(%u#|f3ZzR({Ci-x3DB<0R4g%LN{X2_?J=JIUBwbh z_8rSW$^J9om=a3%#Ir&eBK_m0e{Z_!w`2NioQaelCF)ebCH4?unJXjMH?h$99R2@_sQj7%a)h5j);@B_>AlG zIcYls?uDC=H$>%Q^Q9N9FCg z?F*GHPZt+AKV~iZ7z>yANbV_;-{WKEYh}<|pbScWdd{Je!j}=sb^&+~aV^ zBzq*5;UskmxCN{}io2igRA=xsLFtKm26af9N22vNM#V6mH{M)BhkVN9$IMhq^`ZsH z#~z_W6r`mvRNt&1+sxk?Jq@BU(w-&jew6Ma%TGsT7!ON9Qf>j{;hB(~QA(E2H^NF;} z;oW4E=0avZs-X0o=H}aOlp!U=4nJSCm4h-=kvHg`50iXnwR9m6)(SyWEr3C2bJ)%t z>chO%t7s*dDzxrAPSH*2O}d&3Ux)<9V2!uI!htDDMYrH3?@8@~7mW&^6AXPU z?W#svELT21#dJ%BNnu_sWC~%fHo~8xSQo)N(O4BRY5>}I+Az6?BWP4o7j5;-kXD=X!y0{n2nF2$MnziE zvWJD=joQh>)?il#WB$Fh%eDPb;l~WgXkt`m#Cb`F3az(Q1o?i z2uYYRWy()~Gg9(WVZVK`#u~**Zv0N`&dKmtg~t#&Y0I4(=V8<+A*=zDcy{s$);NVD zv=T^35 zn!*KD+sh8g5WgQ8a&n-lt5qEo{XE(tY4d2oZ#dn~Y6+1i2r|zYtzJ2+CE8+GkI8O( z0so~wXt5iGY3e9h|AbbylTOlmj;6F+T&&`=?~pNZ_tM;DB)q#e3yv@-@M%Grs!l)z zRX;w?-9W;T&@6dzgTegmBn2~ZESjU21KwM~d2x{cicUuXL`zgOeiv&-v(Z}SEgvGA zS4gLnNO#nym-Z4yLPyFyPIGv~O}|nYP2n47-klsWrzYA52L1O^vF=0?`3CG zeIr`MF~rK&Uy`cOldE!9z@C$v;u)C}yNyrKQ{ZJ9H9MAo~S|IV$_a?l7bQ`FlcsM}6Q z`6D`%+9o8;^cgix3ctL$S7zd&D~UAFgaO!R5nc}b0_)Jl6g4dY*)>LfM%``(b?I2d z+a2vdS(u^J#-XR9`TUSuR70={#Nu6X0g$<7isbSLat*D0@17f#?*)w*uKES&{ZGko zvxP)KQ$sp$nJaM023ygi0?Y;V`tCA1jCQJvOjbKmue06ilVMK`*?HU*-0J5Ob%F)i zB+O`G!DMMC^aKyPSl%q26ijjtTV)C5-1f1~pb*knpg$d~v&=G7C^Nfg&?HV#sq$cr zxdNM@(@DiGJ-BAANKGBBwVa1uNJbWXo4ml;DJab*=DgFGewIJG;$7KC#|ZxL}fKq6DYe_;^n*Euw0FoYKw*7 zXoK!>$1zw73o^S_cS0}E$9H}>MDI~eA^0x(N%;5gFAp7VZKtu=jN|?>PkW-ZlYMwI z@#v2QZc;$t+n=Hr;6)KcFX{YGn6v+w7dRL{B^s{>buU5s?lt&HWvac508rn5O^l)v zeON&E+8iwL@42xAV*Vaq3edd=rSGqj)jCkJI!)?X-CZYi`u9Vt`}HcK;suELzzh^1 zdjDPbhIInm{EhIgx5NXqt%&ob=ZKR~-EV=&0B|lIfSdx6R#K`Jh_voE{)sUC!S{Qs zP@DT0{R6})f+QZ@8!-j^++SiCuyg^==>bW+zh+9n=>H12?pORte(tYTC_=xVh?|-x zrd6$qJxM0j;WE0DZzVDRB=9DC_ToqX+=g@4x^Q zQ3C@R0TLpgG)D@g2L8#n-A}lZ8dC>*Q~!g`>_J^k(!HbyK=gk4-xs}2eslfJH=o`{ zbfxl|+TASk^Xy1e2wuv*gLA(BNnYy?y=<$K#OR#={1tec-OUH{_rDlO158h_Xh1bL zvbs-4TGT9I+WmT@s9X?ueaqUVQ0d9t6;26d-7H;bL|HA|`n0nx^j*V%lC`b2$NP)g z1D~yelC1}rWBb2YxtNBHS9;8f-%;yl688&&+tR5GvtzN?})+&hp$4F3A z*g1sfrD~x$0Yo#qq{+F|`yXTb@7*d)ZvLS)Dp>3laEO*g>YfX7{zOUdREG@1x9t)? zEiT1W%jxWmA!7>`Bb%j#j3el3s7&Jmw#*{6cj|eXN_cjHpP8ybx%tp+ zX`%4Z7h$P>5*$L=!T?)&gsmnA4E5pN95u_h->b}E7P65;F6c9=n(T*cn*bENL)lXD zNBx5@j;o=J(OfS-XvC1=tLvuCWvl#UA?1qom?N2-lz6O}7l zzRi|#NeI(Hobs3HQF=a68DV-p*KtxKf=@1cp#7$&Z=T4({^W#+V|^EHYgPCury7N! zKKFKfn+0+_h;?7EjOO4!Utg7Nvg$Jpl2R;}61WU$WdIALR-!rIysUWL5m zS@^;k!H+%J-DHr8!f?6}S*-DgOch?Ap7_CUh?|bIqkb%AKCbe0he24GB`ZlR9a4#d z<3fe8Pmx32Ew8djypd0%gJz3YP3U%|SBHa3wO2%h-p5@JCq<@0uhWq@10QUE+ifq0 z$S{2$t0U6pJ|`pbC@*=3x+^MJ?FDc%Dm>upt!RN!@Jb z;|+!Rchy-6Gwbhq6`ry{dC5gCuX$*-4Xe49oMrj$A<yuQR0wD16iBB+g zsih!1M5*m{WWr2RE42Ls?;v-)8^2K&sBoAk0JYoRgfQ3v6>4bJLa-kkjSRqr?0nLU zSg@7R^!2WY5P5hw)VNc0iS{pS0IY_)?**HX`h~j!@C*FLRq*&Df%>{iuQ-jBSi0GZ zGT#IiF1#>mtl;FQwbIur8e}!=Y#tfxwf}1zEoRoq#EB9GJ>#19FtSw5YBy1o0X@51 zOBO$}JS5y?X&!;uZXD?qv#&OFp*)IDxA3c?`RhlofUVGRt_I1!Bm{asiZ-DfhLgA- zFPYMO%gutxR>er_2y!_pG>_;l=ub~CdPsL=DQ21Li!r9BIc4?s^=f5P3sUob6-4K0 z!Qk<$mH}C`P_`RY#SA(L0q`A&bhT(O^=@a+CR~W7Am3D}xA=szQZ_lVbNO%$U1#mH z>@*jPL^Z_*1NpDk)UKy{xS$h^5W6+Vj|4Bwyjy(0Gq3D$zbXp#@yqlx=b^}nTPZoX zbotXJmhn>+)-g-s$kv9o5oranx%|@*8TH(tWLqW4=P3%J{du}~sU2$6bj(5^CNtu_ zij|D!G|zgW#gI(}GYpg7#l`fq2J0EYnF+dLOH^gU9$Yts#f`_w8AfDQs3jo%$31OQ zahT3y&P?>uQ{OBboym{cE2J7Sy|TMuWUbV#O)rKSr@m^}&3&nT*cw?;)E_Lu#Xn}Q zUXbND*Tx^{Sdfqs=AP8^8P6S&ygSU(&Y2SwY^M@gA7C{Cy(&;)D>>j$9Ll)xtTgiE z&G`Hp>ozQ%pCx7n%*8%<_hKH5du6P040iWji@+nh4~aq*-z9X>X=2mWdd>?J*0)EH9h);0 z8X@HAdTlD|+QBCss$i|}-gPsrXVa-zE+mHZQ!_^Kq>1{hyGiJgx5=(0N^j4b9Bz6A zjp6Je4>V&Jm)2pIywS~{UsJ46!6A2hmHEn-PD=elYQiH3DnT3~PUL+zoxmkC6OGiN7tR>q4n%EJACm_2nLD|IPdT9ZL99{qE8H36?JrtxEKJ0m~Qgd;i!z-J@6$g0X+j zpAr-=QRU*_lFZ)dUpUoEkKYkpUy{TH@(O!s)n7t)5AMIeeY%&5C6EP%2}D&QS%8pN z7(alp+S9j$fhdCCOR#*2Gy#ImyGO19VhSW|6|uer1QhP>1r&gc0=SVSq)@`&9tco?A3wkS_zCD<(jj`h!0W+J{>kh; zsBr)3`C#2^kC6K1|FGh1shw%^8Lx2}XsLUCXOED|IxTz8>X8eb4#RsJO-kA}@mG1i zmF>wgtQPd9lt_F$8~0n*}`X|HS#HV?|flBed0+|G=+(HeX?;R zY*+K}c6QDy^@7*dQL;5+O#&r#9Oci&cha3T`f##>Y41wsZBe;4!X2?XPq{l{lWb(3 zOzPypEjAJ<!=-whcT>Bwww5beNPXTy(gC{rqCy=vfwuJs8U1=srY z3_tJx6MkyBVREP_6-tl|!g!f%@d*Ucs}GUN118O*#k3}{05#}Xf# zwr+@0DB#~N>F2bz>OBt1z}!6?j|=R}k_Gb=cocYVyxd!m zT+%WZ_p@y5FPzAApVIqESz{`;Ey~>$6gk?bAa6?b`h%!LO(X*UD#UsD8`JtovhA9c zOfV(YdHU37WsiI&R}qcXIYl=^Cx%SWkh~e$FnUX|v&u1vcHq?&z(RNhw*ZO|B7M>_V*9duw=t!l3VlR zX8anD;55mzn(Bs-3b)ArqNEChMeum|+egEPaj^m+Oe)SO5=6^YvzMc46u#|hzh7s0-Dl~HH&Dt|6mHP+3=DYewO%#H4H@Voy! z>+2JVrwSb7H8&mSv(kR9;P6K0c@?kzhGYE+McpC@AFp=NL(!YM+{}EQPFz#u5_6-k zE3UXV82*f6BU_tweg}@O`|xdB5vRQ{I$XzksYwAxHJ8bToB0_wRu{4WF0XX_f?KK+ z=^w4ByzwJU7I$L-Jm~5E)5AYB)Rs0d@K_yP;BvSg!r%PZRoXyIq~4h=hnL_Rh9h~@ z-^Ndk^b8nUePk@SY;g2R@*!b+t;x}Q+T0Q`_)B#+@S_jy3q3DV2G$v0>*Ler)`{`3 z-M;Tw;-o8k1#w#mTsqr6A)rnc=fNxS%;|A}c9D3pFf(p+w0&xv>v%F{&~8abTwnF; z0*Gv#i6oA#%15z1Ltem>LQ4OgQRjoP4L3x9RQh2q1@_%T5%whnVo1mkvR660$xu_hhD;xchqKW_jX<71<~!)FbT+d5zpfVz5K_eqoa* zk-;KiW$8R~_;lfsQ7h>bPycV$RqsZsTx8a$M#-W4iyLK>_vtuIKi6{~@2pC%l$bHa z7#H!vt>D(POfc81`Z3fA#V1;wK{z^SkfbF%SbB&dSs0o-x` zVJ5d@#LY1&T#S=oJv}k{XfA(I)YNZ?0d06~9!)0JJKYgfyvcY^K2&A2j}ByNLv7Ld zioNjpka$FB)tva4%viEc@JMs^X?%uqV&s78LlBSXbdcCzZ^};zrs@=ZtvJ>(N_mR$ z1CRb8Pu@Y@1(Wf(i8*I7_v7acL=%K1nlb`a3=er(Dzg-`~x(Ck{>9|M;2TW z@N}30x6CKE2kPDsxvzSMH5`I3bjl{tKH?R3KqNESP64LoT_XMVL@LaQi^oGY zAp^Id-B#b2+OJ{A>~OMQeWTQYoKh#l$_g)W#n-y3y1e*)!EWb7MI(Afd`j86WBzO~ zXu3MGjJEPE(@8C|r%&`EB--lhkgV=GCzCUk6(TA9lD5(fG}sg9o9SgVZcdBMhl|%o z>iE)GQW_)m*;Bc1b7^t1IM%wgQSNlAG;J|8cb;Qnd7C1MKjcczD2Q{`?lw2&rungf zV!_A1XXcY+bKk^0@&r-2x^*(>8{NWrZC-WYvYMUZ!GazK8pCC^9e1b&?t3=qrz~7Z z(AyRhS&GpYdU$APm%4{p+9^%U+RvT*$2@b{NUl);j7|xJdrWE6=`|ymep|5MkS#5x z1PYz$6hjUUI`l3ZJWkWqDZ>6^P61i1MWbs=&f2;<)2W?n#bE194)#Y>=7Z1D`1X6U zx|KAQe3GW2kn4GHfjR8TT!!n=GWlU%HeBh`H=?I^7Vf3KXo4`hy;jiIh5Be|SA6+F zel+Z)!`LRCi~qse>&OMjX})Q=P6Lfz?mZ==-Y(IV?>HybPKKLv@WWH`bjP#b@z2(8 z3Cw~L^p4X|+17Un8Ck8l9!0U&jpzyO0F%~c9dw31ZivKSD)xDSxoFW+f=we^LN}1QsA=Xo+BfKMmJCWx7Z(T=(&*gy;c*?+-+0f#?CCOo_JZUV!$? zer|RT^beS?M5+~$XZ3&c3WRBa?iQd}0b&&(LWyX8B9jVuB_62H1d>fH7 z0Q?9bV2Rq6*q#E^E^vq=r+|+ONMPa+D&X$|xm-XO0}V0a0sc~w84L(#fUE^L#K0@? zOw`fDE*bC}067fwxc>PMQKJ6y*M5Hrh~I;9n1Dg}K_LFm{Qs?IP4C>AORIf%jLD-k z^K?}tBgZCa{mht39M!mkSF4YjatieD!lZ+b8Z1-Du+RSM^@nl=ir3aQ6wOvgVvOEz zoK+9wm{gN%9!6L3%&I1&dbz`ne&BBXu63bT3O9ZEMckWq5q1$6vx9aYt9B4SXx7zO zL1l&}j4@mTu9pqsFxRwo=3Gj7KY^y|N8MW0iCADHm*)M;J*r>H=+ z50j_B%e}1T482TQHmbtg5xTH2^Ee)czIi-l=(TAPno!GG9BpXGY|aVRUS4acn&x&D z>R8l=E!{J+Al>n#rn=2kw_1L&9<#@hBixbccSlcAkM`p9&p3t|Tt56D1Z*Srpm~$Q zx0v6s*wl1;iYDO2kX^Uwwe8Oo=W4n;Uj*>BROp|{Y8SN>c%U>2fj`g}xUTheuow8B z?zZSq33;kYcEO5h`OIzrN)UZ zQz_Ntu(2Z1UGWDqg`iq`+!e;Azz~Ss1F-c?t>A5H7vmd=Q#x^v7S)ObL_J~8eIC)H zkp4~>d|F1`Nl2a6>t+M;LP6FdPKNp2drz2}Tyy}{dA{MTRz`DGkI}aP`6Ac%jW&G& zn&=64e{RcMIknF%Q>jMOB@y}$DU4y<$~IA4DwTMbM0Cg1O1WF2;)Q7c@7(Hc7NV$kBw^>8xC8S3vmLjkxbVbe46FN&Yg zH|4ZhDK{<5H)$CSMg$uc47T7WH}a>rYI!*oibm|0BA*HJoqSfvjrbR==m=i{3^tuQ zNS(B6I9@_cH~qauInmH$u;tYdcCaPb&~T8AdD^gP0}O6@_4=b+)7m_^qONjdJ3t|F z`L(ZooaQMeKHjH=(unujcMVrtM4JcNT2|r>TU+dI4dmZpLm7TGbjJW?=wG6I zp?h%94rMsrtX%u#*5FjAA@iLT`ssg_d=58++*zTUzAXOEin~c4@+IJ7IE#b-;ORgQ z{|k|NVm}dGvs^-aj^c9DE{pkwS}^XTF6K1iA8Dn%#^Y|Tm8)D|?Cr70#uivWr_H zmGdyZ%Gw#ruDzLkQ!G6q7mp5|u~o#6%ae)DT@dlT)KPl81I6%wGmeExw@0C0n2U3F zm5EpKZ1Ri9c@9N7XnV^ScAvopB_xIp7WY_Jb4>q8`prUJH-+9Q54ZHt6pGMf+iaH- zYGnA`m4K|6(R}H6pQb)am&=)L;{h?HDw*8rSuE^Ml+`L>1IEYb*`K7;B=C$Bo3ogh zWQ%`&^;UM zlfS1{WKdAa<6C<9a1{-U-K_N)PYD{%>T&Wy<^<3LOp6P*&icSwj3OLPZ=V^TfJ0K{ zH~B7F4My2)1@^d@8QJwN0zgD?S(OBoJ&2U?XHbCGp{bk-=lVjUS z#f_=tBJ7q<2iwL7OBB`o^w|aC$Z6j zO|cK+PSkZWJPW-;cRBft1@43HJ9;l>H($MXJR9-H7$ZdseCp#*wRhBmmgtx*&~IW`_Pj=^3PsEWNXGDiP1(Lvt0z3ZZR;}w%+0qWxx zW^AibY@yq3oyN*BhdV84AI0f$$MllxX4g_!wdk{*p*@4~AEDC1>2yFHd)5Wo<(~=P zM=-Nn0J9j}o*g@-bf+9B_?R>@AoG>Z2q;yUOp#K{l)wZ?%noL>*tc4V9#O^oF> zUo%NcWGrbKP@D+1G`*nSZ(rZ&)?<}4eev5wZ>Bc4-rEYD3XaKoHZv%T_KO}=CleGM zUg=%G9(}QliFP79>q32^*?h#Q5(nL)1YR!TL9$%L*#v>%dL1`_85a~oS&?)OoE9^b#Rjd#3CLk@b2|^b%RGL@#!4U;yZjy-VzW zN2rhW6DY4ljutU{OAOu;@L79`_aBW|QhjV6=(?9O0KC{6dy!iro`9r#_k3Bxx)pGU z>X+CZ1Ke4_ktM9D?j;TY0Zc@^0@+)V`Xxnf4_dRtbt|GfyGPa{5L}6ng1uMZ`EQ3X zu1YMC0fKWskPC=a;`x(hu>aLPa~BY_fU-Sk@sj#w`%41^7}s9Q4B&AcV7(qpEBxu^ z{^k_yHPHxDSbuYEN$G=w55I!CzvV9R3HVup?)_8x0+ukKd;hnVt`5X?|41$XK5p#L z@Fjg*T;{X7?h0BEsO#COT9nb?)%zqnkZeTtmR&K2_O*t2#FQwYPCZ?HZd@AY-ww2Xv$g)!{J zBo)6eeTAoe1b!1aa?u4PXZ(i8hhxEg=Ohii(K%}E=drs%o&2XLsy2`Nik$xG293Hl zrg5A4!`j6YmtyU+IXoYUanDF)j2$^q+M7!zPVvrmh^bK~Yu@5%-AYfqx|JX|YmZf= zje>No9i=kYB1^X)j0d`Cp3%F~m!k5a{u!rqDumfQsy2cmnM?BQRbEBoaW`Kn>)ykB zQFQX;aD~c-LQXC_auo7nhp-uS<=hUxjF3T8hu^J+ zuo>^yRy#d@CvorrKeVsI(3NXLoz_8>DWQvea<^=UqVgR(7FCrn$~sDtbd6kb(xQ!A zk>WW*dcFqr;v>h>FNx}z6xG@#UnieyaLN!p|8<6TSFwzqDd*bx5NoBI*w}R~cTA6V zt#GDY;kEl!6a#+Q`7CqZmMljtp_K_%kmLNA#N;M&O=~WOmUK*?Umv1~`FOIy$_t|y zWGc_}x^aLpjMcianET5set*SF) zH*s1D(YYapXsN`mrM31=M`pf0?wMCt{4dWiT|IO8Jj1n_c`$R9`|x$7&N*RMkL=?Q zI=vMlF*s!N5f={+igS3yw^#CP3K{r*@^3CZR-LngRQjF^dw2~fu(4Hgehizu7T6Kt zTdCn<MwE7mtmh z$3Pt(Jq|vre6*%7_aM^ApFo;Lq6 zct~5PZcI4MC9w6WQB-w46lr??TI^FJ+$YYUlr*-R3zWt++ERnII?flT?d}+qJ$hoM z?Q9^<#9Kf$sNr`PunE zLN_d6U}~7)%^OE5si#PD`h@8wzPZJwif}RnW2@`=&670J@Os`)Z}9=LI4%y+%8fUgS=6>uq zw*BJdt%Z!}A<2>*-k7b@k#b9lmWK2W*V_sV+<3b~YL%?k#DX5{ z(H$4ZCMaid+)b1~G5EBx3sjIn*Qxr%2TNyuHn!hM&otmhn=aq&MbHQN=t<+%!J#99 zkTa#7fnRQt!7ZUmT@H3jIYMVq^0Q=M%%N`S;o1yqenBSl>Z!sn8O{csS%62eOZR41^_##m~o-!<6_V97O)KPwn%0>ajzW33`!-vGWUr@S_Sz`8kJ%JMyLEvNNPs>$6KY;$Hn6yrR`M8 z+X4`5wSViE|Bze=PXA9v@9&TR)0cmn4CSRW#!00U(Eo1~3WR^@sJlpGer>dp+1m1LQE8Ft)Y7d+@uH zwnvr)bTMJ~;8zTnUjj;0^Sl4 z3q%P_9D7~e+uI^!9e!nYi7J@TTifH&0()D4@&yDhplSj0l@v`NJpd$Hz?UT+B8e7w z1>OSR@HZ9wccJ_L^#1>l(Mz5nVsz6!X;DE*!m|D8(Y$t$*zS3g&ExIXfvw4d}6$1gl$yCso(umADV<80C6L&~qWJpZru&MT^^ zbnnA-DFG>gB=i!Bia_WhC?${t0wy$R4s0L@A{r2x3@Aehp$te1gyKO$hd}|Q2v|Z$ z7`g-z5FG^tRK!t6WE7S8g83H1eBaGkXRUKLd%YL$TKn$ZH^24U&-?s!%gU?f7C!wh z8$~Y+`^jUI>;GwS*L8L5>G&0vRx{+(Bb67`>uw(XCp5t@%v0NiWk7qC4yEP`xv=k2>P#lq@$*F%hoPv(;`K9LZOL0~+#xRJgWYF0dlFm!;sI zA;-?sPT*_Z_&3idC-^^U$DW{>$?CYBA{Db@Pfo78M0B@D6hbSOG)}s9kthP@-%omS z^_lC33inqu=H*lxbAEWJnK1w#`#!yc7+!67@L8!Al^OalCWoZsTsNujP7drXUStst8N8zHw^B*IkFss`nshJyEhXsKt`d| z!tAy<0w*YBl#=SQ;L}y&yIH0R@QEfvKJeSjyvjc8&F&w^<~jG$#q3B?KQ_+ii|5*X z*Djr#HjkGylaqQMq8hbITe@Jl<^xjw8b2#RezXO7ro3-$Ry^mZP8zDeXTZXO#-76m z=9+oLnh3<#yaYl{Hopn^o)r2a#OHm$M#y;F)CVB&C+rZx^Ni^*VK@u)2B;)WjdVF` zC6tV+M4W^DW_|d~jIerXA0b=A_@&MA8MU^jfjzXQw<>j#>KZJ=l&pTq{ILYKa9PPmd_ZuU!U=iv`n&pcR?aDARI zz>p1p8F2>JLlLv~xJ|8jgK#EKYN>e$(q(N;2R)H!ot+3P`3KLGi z3WD}kAE$;v5Oy3w!-Q5eU!O^4W~N!$C#cB~TDs!lGWN))5{VKv^7a<#fnbEO6o1*W zH`FhE)j%r+&S3>th_TW|fa-GOd!zgS>3z-~qvbxSG3kx`oxc}?v}^_hb#GzzIiD;0 z5*l)zmdSFvwFHZ-dqK<16gbwJ%<0!NwaG)vY{eN*P7;Hyt0rCm&_TK5Jvxb_h&0@v z_Sdd7KhJet5sLQ2Yu!U?gxeg7h&0tGKMox?u?VWg6(?iv%|{!z1ic8cG-{#W3U2%{ zpA~Aq=5-JKK<`DQq?-Chk#TVt1(i>TXr8}vBSVmI)lM)l)4hNC-F&HE854yk(S z<&RBIG34B$-<(zC8);%xHD6t`N9V@m9GNO|Q0dJwDM(V5TJ2MG;tXiIf1;^BHaYO{ zWl$tiU34`iT(-esTz>SkeEgP(Fh#n?t(7A>UM#Y=nmw#%y;&~LCxEp)G@!B(UM{ch zWjL0h6my*+mLw(KG^pVMWm%PClMI-lcKoV0hYG^;HH3ju&Q)F_O0MK(DU3v@wEG|xn#xwpR_O9%xeRmXwms4_n*w-7zfN4) z>y*%Hc`74S-e8rWNuo>Tqhs6D1SCDI1*Fee_CuPI$SUw|J`*DWc_w#GESM?V+Gdd#h|m zIJ-N}?!XDWL0!Aa1n$+b9kJ{-MfH9z+&f`Bfh^A+%R^;%=DhOK=Z+EKf4kXT z0@*uiG8^}7UBOdE|9RTpxutAJP7xjUtycN{kFb&V7Esn?CxoK zft4o## zn6Qsc{j7XWQucjnYEp}DYu43SXUR(~;hYud$n?TNbF0bWuUUP5k9tMUbu1vd-X3=& z2_6f6*44`QbMixlO<r&sgSWS@>$Eh=U&sA>fpB!)BEB4fATDp3? zy+rP*t48$2M=B*#=6GVKos!gk_IOg!SS2RS`Fx+R^f0jm483e;my>~}_xVCrD@jzP%WVtK z@R^=oqSZ zh$G!}Un}QORfAikf)l&?5D;7rr+8rE-hWp14eq)`1l^r{M)Rn;%kszS~2_UQDFp^|2&q+{kr9VSI_qL=VfQfOdE@K>78&T$fA|Vgwpg`}0W`8{2F`KdWmfM#JbqSry(;ufVAW!z?9YjP^DUSQ z;EhEFya*3f6O|CkIiUWpmE&jDvy4R*k4>m2T~_-Q=VP)cej|+@!+FOsR}{K@4UrZx zZ-A--7qfb`!5gPh8DR799vkpR1}X|n`K5Pb(<~MRfIA0!#Xl1$sK!s{hkD00327)C zcw?wHd((@I%HQZ1>8${F5>W7a9izS1z@4cm#Xr*cZ{GojrJ_C$69l$yk0`Imh$LRM zeQTapJC6r67yXw5G)Si9fuEKSLY|}n4rj+=5@IU?BkxL(0#m+6mIg9!Nw@-LBx+}X zMWKIJpbbd~34E=lq zN%j1%Gkf1A;-Q+V9V#Dt?ZIJLC^Dp2ue+dn>35U~Sm$vU6C5Xq?)|L2r@H{WA%w=f zm-uj9-teyVvR0}d7BpC!mX-{MP{ceseQbO4PG2)j9rSMa!W78&;g5eHUdHFBna=#E z?hll^T(H01cPG3OIuY+Q{AE%+zxjFe#Y28=r&x9c=w`z$^g z3z|({DD1nn5%Ke0X5B@X;7`{^MiZA(nMQr^i{UU(gjXl?<4Puebwnvvo^glF@YlxU z0)uRuj{(oE5;0FOOrH`^(~1-&Q^>gzk-{Xlcuo`T0H2`RLQ~gMwfg};Dx=`Ug=>a| zlVG#C7k8%VaEUNQrP?6Rl7p>eISOK_x}p!$K9#4vbO6K_?YPAZxT<~c0BA2*I}5f+ zh%^{-2eQ_6BZee&zWRs0c+C2R`B6;g=&FP^+f%n+*-oeK-BN(*J1l~|LNn381L3V$ zy|3d&hYK-?cb3cpW)32hX#T-)O(t_*)Y*4Se>C^h^&Azbj!=uwq>_GWA+Dy)(3({G zlL39KJJyzJk?9bUWmz5Ep5%IXNbP-CEP0@rpnE&0KJc<$)!7Y4p_a!(GGjt_#2XtB zSsyXep#EfM%Z98p4M7|g0gr>Bk0dpKq``BACz>k}N@%WtnKRMd8U%IV2+1uuVOPKc zzF}pxxH8XDE8L#EqQ?FBSw?C7D+=gxrh~h!Z>cWT#AsH}FJ!V3d>VQKVInFVTD+#L zi*SUs1&qNSF*6m3bn(eUxU8##0;$gBi5M)Y=-S$th*9%3*~a%xhjb7%C$*D;ZXf$ev<@k3>w>69$9jMfk!(#J2%O3jQcPk1mg$wE z;XW*XrRi+cAV0_%YE%|&n`SZE0_=T-)R;A*7~uHDj - * Copyright 2019 Marco Martin - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. - */ - -import QtQuick 2.9 -import QtQuick.Layouts 1.4 -import QtQuick.Controls 2.4 as Controls -import org.kde.kirigami 2.5 as Kirigami - -FocusScope { - id: root - - signal activated - property string title - property alias view: view - property alias delegate: view.delegate - property alias model: view.model - property alias count: view.count - property alias currentIndex: view.currentIndex - property alias currentItem: view.currentItem - Layout.fillWidth: true - implicitHeight: view.implicitHeight + header.implicitHeight - property alias cellWidth: view.cellWidth - property alias cellHeight: view.cellHeight - - property Item navigationUp - property Item navigationDown - - Kirigami.Heading { - id: header - anchors { - left: parent.left - right: parent.right - top: parent.top - leftMargin: Kirigami.Units.largeSpacing * 3 - } - text: title - color: "white" - } - - Kirigami.Separator { - z: 2 - anchors { - bottom: view.top - left: view.left - right: parent.right - } - height: 1 - color: "white" - opacity: 0.4 - visible: view.contentY > 0 - } - - GridView { - id: view - anchors { - left: parent.left - right: parent.right - top: header.bottom - bottom: parent.bottom - topMargin: Kirigami.Units.largeSpacing * 2 - leftMargin: Kirigami.Units.largeSpacing * 2 - rightMargin: Kirigami.Units.largeSpacing * 2 - } - focus: true - z: activeFocus ? 10: 1 - cellWidth: parent.width / 4 - cellHeight: parent.height / 1.5 - keyNavigationEnabled: true - highlightFollowsCurrentItem: true - snapMode: ListView.SnapToItem - cacheBuffer: width - highlightMoveDuration: Kirigami.Units.longDuration - clip: true - - onCurrentItemChanged: { - positionViewAtIndex(currentIndex, GridView.Center) - } - - move: Transition { - SmoothedAnimation { - property: "x" - duration: Kirigami.Units.longDuration - } - } - - KeyNavigation.left: root - KeyNavigation.right: root - } -} diff --git a/ovos_workshop/res/ui/views/TileView.qml b/ovos_workshop/res/ui/views/TileView.qml deleted file mode 100644 index 9e391c36..00000000 --- a/ovos_workshop/res/ui/views/TileView.qml +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright 2019 Aditya Mehra - * Copyright 2019 Marco Martin - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. - */ - -import QtQuick 2.9 -import QtQuick.Layouts 1.4 -import QtQuick.Window 2.2 -import QtGraphicalEffects 1.12 -import QtQuick.Controls 2.4 as Controls -import org.kde.kirigami 2.5 as Kirigami - -FocusScope { - id: root - signal activated - property string title - property alias view: view - property alias delegate: view.delegate - property alias model: view.model - property alias currentIndex: view.currentIndex - property alias currentItem: view.currentItem - Layout.fillWidth: true - - implicitHeight: view.implicitHeight + header.implicitHeight - - //TODO:dynamic - property int columns: Math.max(3, Math.floor(width / (Kirigami.Units.gridUnit * 8))) - - property alias cellWidth: view.cellWidth - property alias cellHeight: view.cellHeight - readonly property real screenRatio: view.Window.window ? view.Window.window.width / view.Window.window.height : 1.6 - - property Item navigationUp - property Item navigationDown - - Kirigami.Heading { - id: header - anchors { - left: parent.left - right: parent.right - top: parent.top - } - text: title - layer.enabled: true - color: "white" - } - - ListView { - id: view - anchors { - left: parent.left - right: parent.right - top: header.baseline - bottom: parent.bottom - topMargin: Kirigami.Units.largeSpacing*2 - leftMargin: -Kirigami.Units.largeSpacing - } - focus: true - - z: activeFocus ? 10: 1 - keyNavigationEnabled: true - //Centering disabled as experiment - //highlightRangeMode: ListView.ApplyRange - - //highlightFollowsCurrentItem: true - snapMode: ListView.SnapToItem - cacheBuffer: width - implicitHeight: cellHeight - rightMargin: width-cellWidth - property int cellWidth: parent.width / 3 - property int cellHeight: cellWidth + Kirigami.Units.gridUnit * 3 -// preferredHighlightBegin: 0 -// preferredHighlightEnd: cellWidth - displayMarginBeginning: cellWidth - displayMarginEnd: cellWidth - - // highlightMoveVelocity: -1 - // highlightMoveDuration: Kirigami.Units.longDuration - - onContentWidthChanged: if (view.currentIndex === 0) view.contentX = view.originX - - onMovementEnded: flickEnded() - onFlickEnded: currentIndex = indexAt(mapToItem(contentItem, cellWidth, 0).x, 0) - - spacing: 0 - orientation: ListView.Horizontal - - move: Transition { - SmoothedAnimation { - property: "x" - duration: Kirigami.Units.longDuration - } - } - - KeyNavigation.left: root - KeyNavigation.right: root - - Keys.onDownPressed: { - if (!navigationDown) { - return; - } - - if (navigationDown instanceof TileView) { - navigationDown.currentIndex = Math.min(Math.floor(navigationDown.view.indexAt(navigationDown.view.contentX + cellWidth/2, height/2)) + (view.currentIndex - view.indexAt(view.contentX + cellWidth/2, height/2)), navigationDown.view.count - 1); - - if (navigationDown.currentIndex < 0) { - navigationDown.currentIndex = view.currentIndex > 0 ? navigationDown.view.count - 1 : 0 - } - } - - navigationDown.forceActiveFocus(); - } - - Keys.onUpPressed: { - if (!navigationUp) { - return; - } - - if (navigationUp instanceof TileView) { - navigationUp.currentIndex = Math.min(Math.floor(navigationUp.view.indexAt(navigationUp.view.contentX + cellWidth/2, height/2)) + (view.currentIndex - view.indexAt(view.contentX + cellWidth/2, height/2)), navigationUp.view.count - 1); - - if (navigationUp.currentIndex < 0) { - navigationUp.currentIndex = view.currentIndex > 0 ? navigationUp.view.count - 1 : 0 - } - } - - navigationUp.forceActiveFocus(); - } - } -} - diff --git a/ovos_workshop/res/ui/views/qmldir b/ovos_workshop/res/ui/views/qmldir deleted file mode 100644 index 61c2d2a9..00000000 --- a/ovos_workshop/res/ui/views/qmldir +++ /dev/null @@ -1,2 +0,0 @@ -GridTileView 1.0 GridTileView.qml -TileView 1.0 TileView.qml diff --git a/ovos_workshop/skills/ovos.py b/ovos_workshop/skills/ovos.py index a5a99235..eff00400 100644 --- a/ovos_workshop/skills/ovos.py +++ b/ovos_workshop/skills/ovos.py @@ -1,10 +1,8 @@ import time -from os.path import join from ovos_utils import camel_case_split, get_handler_name # ensure mycroft can be imported from ovos_utils import ensure_mycroft_import -from ovos_utils import resolve_ovos_resource_file from ovos_utils.log import LOG from ovos_utils.messagebus import Message from ovos_utils.skills.settings import PrivateSettings @@ -142,16 +140,6 @@ def __handle_stop(self, _): context={"skill_id": self.skill_id})) super().__handle_stop(_) - def _find_resource(self, res_name, lang, res_dirname=None): - """Finds a resource by name, lang and dir - """ - res = super()._find_resource(res_name, lang, res_dirname) - if not res: - # override to look for bundled pages - res = resolve_ovos_resource_file(join('text', lang, res_name)) or \ - resolve_ovos_resource_file(res_name) - return res - # abort get_response gracefully def _wait_response(self, is_cancel, validator, on_fail, num_retries): """Loop until a valid response is received from the user or the retry