From 39bb1ebdac571ff55eff45de022e5dd7ea0e7025 Mon Sep 17 00:00:00 2001 From: Christian Moser Date: Thu, 2 Jan 2025 10:13:39 +0100 Subject: [PATCH] 2025.01.02 10:13:39 --- .gitattributes | 15 + .githooks/pre-commit | 1 + sgbackup/command.py | 1 + sgbackup/game.py | 110 ++- sgbackup/gui/__init__.py | 7 +- sgbackup/gui/_app.py | 448 ++++++++++++ sgbackup/gui/_gamedialog.py | 675 ++++++++++++++++++ sgbackup/gui/_settingsdialog.py | 97 +++ sgbackup/gui/application.py | 83 --- sgbackup/gui/appmenu.ui | 19 + sgbackup/gui/appwindow.py | 86 --- sgbackup/gui/backupview.py | 30 - sgbackup/gui/gameview.py | 24 - .../icons/hicolor/128x128/apps/sgbackup.png | Bin 0 -> 17499 bytes .../icons/hicolor/256x256/apps/sgbackup.png | Bin 0 -> 42670 bytes .../icons/hicolor/32x32/apps/sgbackup.png | Bin 0 -> 5999 bytes sgbackup/icons/hicolor/32x32/apps/windows.png | Bin 0 -> 782 bytes .../icons/hicolor/512x512/apps/sgbackup.png | Bin 0 -> 122653 bytes .../icons/hicolor/64x64/apps/sgbackup.png | Bin 0 -> 9095 bytes .../org.sgabackup.sgbackup.gresource.xml | 21 + .../scalable/apps/apple-svgrepo-com.svg | 19 + .../scalable/apps/linux-svgrepo-com.svg | 49 ++ .../scalable/apps/steam-svgrepo-com.svg | 6 + .../scalable/apps/windows-svgrepo-com.svg | 19 + sgbackup/main.py | 8 +- sgbackup/settings.py | 16 +- sgbackup/steam.py | 88 ++- 27 files changed, 1562 insertions(+), 260 deletions(-) create mode 100644 .gitattributes create mode 100644 sgbackup/gui/_app.py create mode 100644 sgbackup/gui/_gamedialog.py create mode 100644 sgbackup/gui/_settingsdialog.py delete mode 100644 sgbackup/gui/application.py delete mode 100644 sgbackup/gui/appwindow.py delete mode 100644 sgbackup/gui/backupview.py delete mode 100644 sgbackup/gui/gameview.py create mode 100644 sgbackup/icons/hicolor/128x128/apps/sgbackup.png create mode 100644 sgbackup/icons/hicolor/256x256/apps/sgbackup.png create mode 100644 sgbackup/icons/hicolor/32x32/apps/sgbackup.png create mode 100644 sgbackup/icons/hicolor/32x32/apps/windows.png create mode 100644 sgbackup/icons/hicolor/512x512/apps/sgbackup.png create mode 100644 sgbackup/icons/hicolor/64x64/apps/sgbackup.png create mode 100644 sgbackup/icons/hicolor/org.sgabackup.sgbackup.gresource.xml create mode 100644 sgbackup/icons/hicolor/scalable/apps/apple-svgrepo-com.svg create mode 100644 sgbackup/icons/hicolor/scalable/apps/linux-svgrepo-com.svg create mode 100644 sgbackup/icons/hicolor/scalable/apps/steam-svgrepo-com.svg create mode 100644 sgbackup/icons/hicolor/scalable/apps/windows-svgrepo-com.svg diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..d283d9e --- /dev/null +++ b/.gitattributes @@ -0,0 +1,15 @@ +* text=auto + +.githooks/pre-commit text eol=lf + +*.yml text eol=lf +*.sh text eol=lf +*.py text +*.txt text +*.ps1 text eol=crlf +*.ps1.in text eol=crlf +*.bat text eol=crlf +*.bat.in text eol=crlf +*.cmd text eol=crlf +*.cmd.in text eol=crlf + diff --git a/.githooks/pre-commit b/.githooks/pre-commit index e5ce2ff..bf221e5 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -7,6 +7,7 @@ PROJECT_ROOT="$(dirname "$(dirname "$SELF")")" ; export PROJECT_ROOT pre_commit_d="${GITHOOKS_DIR}/pre-commit-d" +# run scripts from the pre-commit.d directory for i in $(ls "$pre_commit_d"); do script="${pre_commit_d}/$i" if [ -x "$script" ]; then diff --git a/sgbackup/command.py b/sgbackup/command.py index 21710f5..f59c2a3 100644 --- a/sgbackup/command.py +++ b/sgbackup/command.py @@ -17,6 +17,7 @@ # along with this program. If not, see . # ############################################################################### + class Command: def __init__(self,id:str,name:str,description:str): self.__id = id diff --git a/sgbackup/game.py b/sgbackup/game.py index b8e9be5..864e2e5 100644 --- a/sgbackup/game.py +++ b/sgbackup/game.py @@ -107,6 +107,8 @@ class GameFileType(StrEnum): raise ValueError("Unknown GameFileType \"{}\"!".fomrat(typestring)) class GameFileMatcher(GObject): + __gtype_name__ = "GameFileMatcher" + def __init__(self,match_type:GameFileType,match_file:str): GObject.__init__(self) self.match_type = type @@ -165,6 +167,8 @@ class GameFileMatcher(GObject): return False class GameData(GObject): + __gtype_name__ = 'GameData' + """ :class: GameData :brief: Base class for platform specific data. @@ -226,17 +230,41 @@ class GameData(GObject): self.__savegame_dir = sgdir @Property - def variables(self): + def variables(self)->dict: return self.__variables + @variables.setter + def variables(self,vars:dict|None): + if not vars: + self.__variables = {} + else: + self.__variables = dict(vars) @Property def file_match(self): return self.__filematch + @file_match.setter + def file_match(self,fm:list[GameFileMatcher]|None): + if not fm: + self.__filematch = [] + else: + for matcher in fm: + if not isinstance(matcher,GameFileMatcher): + raise TypeError("\"file_match\" needs to be \"None\" or a list of \"GameFileMatcher\" instances!") + self.__filematch = list(fm) @Property def ignore_match(self): return self.__ignorematch - + @file_match.setter + def file_match(self,im:list[GameFileMatcher]|None): + if not im: + self.__ignorematch = [] + else: + for matcher in im: + if not isinstance(matcher,GameFileMatcher): + raise TypeError("\"ignore_match\" needs to be \"None\" or a list of \"GameFileMatcher\" instances!") + self.__ignorematch = list(im) + def has_variable(self,name:str)->bool: return (name in self.__variables) @@ -535,18 +563,25 @@ class SteamGame(GameData): GameData.__init__(self, sgtype, - appid, savegame_root, savegame_dir, variables, file_match, ignore_match) - self.__installdir = installdir + self.appid = int(appid) + self.installdir = installdir def get_variables(self): vars = super().get_variables() vars["INSTALLDIR"] = self.installdir if self.installdir else "" + @Property(type=int) + def appid(self): + return self.__appid + @appid.setter + def appid(self,appid): + self.__appid = appid + @Property def installdir(self): return self.__installdir @@ -622,6 +657,8 @@ class SteamMacOSGame(SteamGame): class Game(GObject): + __gtype_name__ = "Game" + @staticmethod def new_from_dict(config:str): logger = logger.getChild("Game.new_from_dict()") @@ -740,15 +777,17 @@ class Game(GObject): with open(filename,'rt',encoding="UTF-8") as ifile: return Game.new_from_dict(json.loads(ifile.read())) - def __init__(self,id:str,name:str,savegame_name:str): + def __init__(self,key:str,name:str,savegame_name:str): GObject.__init__(self) - self.__id = id + self.__dbid = None + self.__key = key self.__name = name self.__filename = None self.__savegame_name = savegame_name self.__savegame_type = SavegameType.UNSET self.__active = False self.__live = True + self.__variables = dict() self.__windows = None self.__linux = None @@ -762,12 +801,25 @@ class Game(GObject): self.__epic_linux = None @Property(type=str) - def id(self)->str: + def dbid(self)->str: return self.__id - @id.setter + @dbid.setter def id(self,id:str): self.__id = id + @Property(type=str) + def key(self)->str: + return self.__key + @key.setter + def key(self,key:str): + set_game = False + if self.__key in GAMES: + del GAMES[self.__key] + set_game = True + + self.__key = key + if set_game: + GAMES[self.__key] = self @Property(type=str) def name(self)->str: @@ -820,6 +872,16 @@ class Game(GObject): else: self.__filename = fn + @Property + def variables(self): + return self.__variables + @variables.setter + def variables(self,vars:dict|None): + if not vars: + self.__variables = {} + else: + self.__variables = dict(vars) + @Property def game_data(self): sgtype = self.savegame_type @@ -917,6 +979,22 @@ class Game(GObject): raise TypeError("SteamWindowsGame") self.__steam_macos = data + def add_variable(self,name:str,value:str): + self.__variables[str(name)] = str(value) + + def delete_variable(self,name): + if name in self.__variables: + del self.__variables[name] + + def get_variable(self,name): + vars = dict(os.environ) + #vars.update(settings.variables) + vars.update(self.__variables) + game_data = self.game_data + if (game_data is not None): + vars.update(game_data.variables) + + def serialize(self)->dict: ret = { 'id': self.id, @@ -949,9 +1027,8 @@ class Game(GObject): # ret['epic_linux'] = self.epic_linux.serialize() return ret - + def save(self): - data = self.serialize() old_path = pathlib.Path(self.filename).resolve() new_path = pathlib.Path(settings.gameconf_dir / '.'.join(self.id,'gameconf')).resolve() if (str(old_path) != str(new_path)) and old_path.is_file(): @@ -959,8 +1036,10 @@ class Game(GObject): if not new_path.parent.is_dir(): os.makedirs(new_path.parent) - with open(new_path,'wt',encoding='UTF-8') as ofile: + with open(new_path,'wt',encoding='utf-8') as ofile: ofile.write(json.dumps(self.serialize(),ensure_ascii=False,indent=4)) + + GAMES={} STEAM_GAMES={} @@ -973,7 +1052,7 @@ def __init_games(): if not os.path.isdir(gameconf_dir): return - for gcf in (os.path.join(gameconf_dir,i) for i in os.path.listdir(gameconf_dir)): + for gcf in (os.path.join(gameconf_dir,i) for i in os.listdir(gameconf_dir)): if not os.path.isfile(gcf) or not gcf.endswith('.gameconf'): continue @@ -984,7 +1063,7 @@ def __init_games(): except: continue - GAMES[game.id] = game + GAMES[game.key] = game if (game.steam_windows): if not game.steam_windows.appid in STEAM_GAMES: STEAM_GAMES[game.steam_windows.appid] = game @@ -1000,7 +1079,7 @@ def __init_games(): __init_games() def add_game(game:Game): - GAMES[game.id] = game + GAMES[game.key] = game if game.steam_windows: if not game.steam_windows.appid in STEAM_GAMES: STEAM_GAMES[game.steam_windows.appid] = game @@ -1012,4 +1091,5 @@ def add_game(game:Game): if (game.steam_macos): if not game.steam_macos.appid in STEAM_GAMES: STEAM_GAMES[game.steam_macos.appid] = game - STEAM_MACOS_GAMES[game.steam_macos.appid] = game \ No newline at end of file + STEAM_MACOS_GAMES[game.steam_macos.appid] = game + \ No newline at end of file diff --git a/sgbackup/gui/__init__.py b/sgbackup/gui/__init__.py index 9049356..ee4060d 100644 --- a/sgbackup/gui/__init__.py +++ b/sgbackup/gui/__init__.py @@ -15,4 +15,9 @@ # You should have received a copy of the GNU General Public License # # along with this program. If not, see . # ############################################################################### -from .application import Application + +from ._app import Application,AppWindow +from ._settingsdialog import SettingsDialog +from ._gamedialog import GameDialog + +app = None diff --git a/sgbackup/gui/_app.py b/sgbackup/gui/_app.py new file mode 100644 index 0000000..d81c401 --- /dev/null +++ b/sgbackup/gui/_app.py @@ -0,0 +1,448 @@ +############################################################################### +# sgbackup - The SaveGame Backup tool # +# Copyright (C) 2024 Christian Moser # +# # +# 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 . # +############################################################################### + +from gi.repository import Gtk,GObject,Gio,Gdk + +import logging; logger=logging.getLogger(__name__) + +import os +from datetime import datetime as DateTime +from pathlib import Path + +from .. import game +from ..settings import settings +from ._settingsdialog import SettingsDialog +from ._gamedialog import GameDialog + +class GameView(Gtk.ScrolledWindow): + __gtype_name__ = "sgbackup-gui-GameView" + + def __init__(self): + Gtk.ScrolledWindow.__init__(self) + + self.__liststore = Gio.ListStore.new(game.Game) + for g in game.GAMES.values(): + pass + self.__liststore.append(g) + + factory_key = Gtk.SignalListItemFactory.new() + factory_key.connect('setup',self._on_key_column_setup) + factory_key.connect('bind',self._on_key_column_bind) + column_key = Gtk.ColumnViewColumn.new("Key",factory_key) + + factory_name = Gtk.SignalListItemFactory.new() + factory_name.connect('setup',self._on_name_column_setup) + factory_name.connect('bind',self._on_name_column_bind) + column_name = Gtk.ColumnViewColumn.new("Name",factory_name) + column_name.set_expand(True) + + factory_active = Gtk.SignalListItemFactory.new() + factory_active.connect('setup',self._on_active_column_setup) + factory_active.connect('bind',self._on_active_column_bind) + factory_active.connect('unbind',self._on_active_column_unbind) + column_active = Gtk.ColumnViewColumn.new("Active",factory_active) + + factory_live = Gtk.SignalListItemFactory.new() + factory_live.connect('setup',self._on_live_column_setup) + factory_live.connect('bind',self._on_live_column_bind) + factory_live.connect('unbind',self._on_live_column_unbind) + column_live = Gtk.ColumnViewColumn.new("Live",factory_live) + + selection = Gtk.SingleSelection.new(self._liststore) + self.__columnview = Gtk.ColumnView.new(selection) + self._columnview.append_column(column_key) + self._columnview.append_column(column_name) + self._columnview.append_column(column_active) + self._columnview.append_column(column_live) + self._columnview.set_single_click_activate(True) + + self.set_child(self._columnview) + + @property + def _liststore(self): + return self.__liststore + + @property + def _columnview(self): + return self.__columnview + + def _on_key_column_setup(self,factory,item): + item.set_child(Gtk.Label()) + + def _on_key_column_bind(self,factory,item): + label = item.get_child() + game = item.get_item() + label.bind_property(game,'key','label',GObject.BindingFlags.DEFAULT) + + def _on_name_column_setup(self,factory,item): + item.set_child(Gtk.Label()) + + def _on_name_column_bind(self,factory,item): + label = item.get_child() + game = item.get_item() + label.bind_proprety(game,'name','label',GObject.BindingFlags.DEFAULT) + + def _on_active_column_setup(self,factory,item): + item.set_child(Gtk.Switch()) + + def _on_active_column_bind(self,factory,item): + switch = item.get_child() + game = item.get_data() + switch.set_active(game.is_active) + item._signal_active_state_set = switch.connect('state-set',self._on_active_state_set,game) + + def _on_active_column_unbind(self,factory,item): + if hasattr(item,'_signal_active_state_set'): + item.get_child().disconnect(item._signal_active_state_set) + del item._signal_active_state_set + + def _on_active_state_set(self,switch,state,game): + game.is_active = state + game.save() + + def _on_live_column_setup(self,factory,item): + item.set_child(Gtk.Switch()) + + def _on_live_column_bind(self,factory,item): + switch = item.get_child() + game = item.get_data() + switch.set_active(game.is_active) + item._signal_live_state_set = switch.connect('state-set',self._on_live_state_set,game) + + def _on_live_column_unbind(self,factory,item): + if hasattr(item,'_signal_live_state_set'): + item.get_child().disconnect(item._signal_live_state_set) + del item._signal_live_state_set + + def _on_live_state_set(self,switch,state,game): + def on_dialog_response(dialog,response): + if response == Gtk.ResponseType.YES: + pass + #archiver.backup(game) + dialog.hide() + dialog.destroy() + + game.is_live = state + game.save() + if not state: + dialog = Gtk.MessageDialog() + dialog.set_transient_for(self.get_toplevel()) + dialog.props.buttons = Gtk.ButtonsType.YES_NO + dialog.props.text = "Do you want to create a new savegame for {game}?".format(game=game.name) + dialog.props.use_markup = True + dialog.props.secondary_text = "The new savegame is added to the finsihed savegames for the game." + dialog.props.secondary_use_markup = False + dialog.connect('response',on_dialog_response) + dialog.present() +# GameView class + +class BackupViewData(GObject.GObject): + def __init__(self,_game:game.Game,filename:str): + GObject.GObject.__init__(self) + self.__game = _game + self.__filename = filename + + basename = os.path.basename(filename) + self.__is_live = (os.path.basename(os.path.dirname(filename)) == 'live') + parts = filename.split('.') + self.__savegame_name = parts[0] + self.__timestamp = DateTime.strptime(parts[1],"%Y%m%d-%H%M%S") + + self.__extension = '.' + parts[3:] + + @property + def game(self)->game.Game: + return self.__game + + @GObject.Property + def savegame_name(self): + return self.__savegame_name + + @GObject.Property(type=str) + def filename(self)->str: + return self.__filename + + @GObject.Property(type=bool,default=False) + def is_live(self)->bool: + pass + + @GObject.Property + def extension(self): + return self.__extension + + @GObject.Property + def timestamp(self): + return self.__timestamp + +class BackupView(Gtk.ScrolledWindow): + __gtype_name__ = "BackupView" + def __init__(self,gameview:GameView): + Gtk.ScrolledWindow.__init__(self) + self.__gameview = gameview + + self.__liststore = Gio.ListStore() + selection = Gtk.SingleSelection.new(self.__liststore) + + live_factory = Gtk.SignalListItemFactory() + live_factory.connect('setup',self._on_live_column_setup) + live_factory.connect('bind',self._on_live_column_bind) + live_column = Gtk.ColumnViewColumn.new("Live",live_factory) + + sgname_factory = Gtk.SignalListItemFactory() + sgname_factory.connect('setup',self._on_savegamename_column_setup) + sgname_factory.connect('bind',self._on_savegamename_column_bind) + sgname_column = Gtk.ColumnViewColumn.new("Savegame name",sgname_factory) + sgname_column.set_expand(True) + + timestamp_factory = Gtk.SignalListItemFactory() + timestamp_factory.connect('setup',self._on_timestamp_column_setup) + timestamp_factory.connect('bind',self._on_timestamp_column_bind) + timestamp_column = Gtk.ColumnViewColumn.new("Timestamp",timestamp_factory) + + self.__columnview = Gtk.ColumnView.new(selection) + self.__columnview.append_column(live_column) + self.__columnview.append_column(sgname_column) + self.__columnview.append_column(timestamp_column) + + self._on_gameview_selection_changed(selection) + self.gameview._columnview.get_model().connect('selection-changed',self._on_gameview_selection_changed) + + self.set_child(self.__columnview) + + @property + def gameview(self)->GameView: + return self.__gameview + + def _on_live_column_setup(self,factory,item): + checkbutton = Gtk.CheckButton() + checkbutton.set_sensitive(False) + + def _on_live_column_bind(self,factory,item): + checkbutton = item.get_child() + data = item.get_item() + checkbutton.set_active(data.is_live) + + + def _on_savegamename_column_setup(self,factory,item): + label = Gtk.Label() + self.set_child(label) + + def _on_savegamename_column_bind(self,factory,item): + label = item.get_child() + data = item.get_item() + label.set_text(data.savegame_name) + + def _on_timestamp_column_setup(self,factory,item): + label = Gtk.Label() + item.set_child(label) + + def _on_timestamp_column_bind(self,factory,item): + label = item.get_child() + data = item.get_item() + label.set_text(data.timestamp.strftime("%d.%m.%Y %H:%M:%S")) + + def _on_size_column_setup(self,factory,item): + label = Gtk.Label() + item.set_child(label) + + def _on_size_column_bind(self,factory,item): + label = item.get_child() + data = item.get_item() + file = Path(data.filename).resolve() + + if not file.is_file(): + label.set_text("0 B") + return + + size = file.stat().st_size + if (size > 1073741824): + display_size = ".".join((str(int(size / 1073741824)),str(int(((size * 10) / 1073741824) % 10)))) + " GiB" + elif (size > 1048576): + display_size = ".".join((str(int(size / 1048576)), str(int(((size * 10) / 1048576) % 10)))) + " MiB" + elif (size > 1024): + display_size = ".".join((str(int(size / 1024)), str(int(((size * 10) / 1024) % 10)))) + " KiB" + else: + display_size = str(size) + " B" + label.set_text(display_size) + + def _on_gameview_selection_changed(self,model): + game = model.get_selected_item() + if game is None: + return + + +class AppWindow(Gtk.ApplicationWindow): + __gtype_name__ = "AppWindow" + def __init__(self,application=None,**kwargs): + kwargs['title'] = "SGBackup" + + if (application is not None): + kwargs['application']=application + if (hasattr(application,'builder')): + builder = application.builder + else: + builder = Gtk.Builder.new() + + Gtk.ApplicationWindow.__init__(self,**kwargs) + self.set_default_size(800,600) + self.set_icon_name('sgbackup') + + self.__builder = builder + self.builder.add_from_file(os.path.join(os.path.dirname(__file__),'appmenu.ui')) + gmenu = self.builder.get_object('appmenu') + appmenu_popover = Gtk.PopoverMenu.new_from_model(gmenu) + image = Gtk.Image.new_from_icon_name('open-menu-symbolic') + menubutton = Gtk.MenuButton.new() + menubutton.set_popover(appmenu_popover) + menubutton.set_child(image) + headerbar = Gtk.HeaderBar.new() + headerbar.pack_start(menubutton) + self.set_titlebar(headerbar) + + vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + + self.__vpaned = Gtk.Paned(orientation=Gtk.Orientation.VERTICAL) + self.__vpaned.set_hexpand(True) + self.__vpaned.set_vexpand(True) + self.__vpaned.set_wide_handle(True) + self.__gameview = GameView() + self.__vpaned.set_start_child(self.gameview) + self.__backupview = BackupView(self.gameview) + self.__vpaned.set_end_child(self.backupview) + self.__vpaned.set_resize_start_child(True) + self.__vpaned.set_resize_end_child(True) + + vbox.append(self.__vpaned) + + statusbar = Gtk.Statusbar() + statusbar.set_hexpand(True) + statusbar.set_vexpand(False) + statusbar.push(0,'Running ...') + vbox.append(statusbar) + + self.set_child(vbox) + + @GObject.Property + def builder(self): + return self.__builder + + @GObject.Property + def backupview(self): + return self.__backupview + + @GObject.Property + def gameview(self): + return self.__gameview + + +class Application(Gtk.Application): + __gtype_name__ = "Application" + + def __init__(self,*args,**kwargs): + AppFlags = Gio.ApplicationFlags + kwargs['application_id'] = 'org.sgbackup.sgbackup' + kwargs['flags'] = AppFlags.FLAGS_NONE + Gtk.Application.__init__(self,*args,**kwargs) + + self.__logger = logger.getChild('Application') + self.__builder = None + self.__appwindow = None + + @property + def _logger(self): + return self.__logger + + @GObject.Property + def appwindow(self): + return self.__appwindow + + def do_startup(self): + self._logger.debug('do_startup()') + if not self.__builder: + self.__builder = Gtk.Builder.new() + Gtk.Application.do_startup(self) + + pkg_path = Path(__file__).resolve() + pkg_path = pkg_path.parent.parent + icons_path = pkg_path / "icons" + + theme = Gtk.IconTheme.get_for_display(Gdk.Display.get_default()) + theme.add_resource_path("/org/sgbackup/sgbackup/icons") + theme.add_search_path(str(icons_path)) + + action_about = Gio.SimpleAction.new('about',None) + action_about.connect('activate',self.on_action_about) + self.add_action(action_about) + + action_new_game = Gio.SimpleAction.new('new-game',None) + action_new_game.connect('activate',self.on_action_new_game) + self.add_action(action_new_game) + + action_quit = Gio.SimpleAction.new('quit',None) + action_quit.connect('activate',self.on_action_quit) + self.add_action(action_quit) + + action_settings = Gio.SimpleAction.new('settings',None) + action_settings.connect('activate',self.on_action_settings) + self.add_action(action_settings) + + # add accels + self.set_accels_for_action('app.quit',["q"]) + + @GObject.Property + def builder(self): + return self.__builder + + def do_activate(self): + self._logger.debug('do_activate()') + if not (self.__appwindow): + self.__appwindow = AppWindow(application=self) + + + self.appwindow.present() + + def on_action_about(self,action,param): + pass + + def on_action_settings(self,action,param): + dialog = self.new_settings_dialog() + dialog.present() + + def on_action_quit(self,action,param): + self.quit() + + def on_action_new_game(self,action,param): + def on_reponse(dialog,response): + dialog.destroy() + + dialog = GameDialog(self.appwindow) + dialog.connect('response',on_reponse) + dialog.present() + + def new_settings_dialog(self): + dialog = SettingsDialog(self.appwindow) + self.emit('settings-dialog-init',dialog) + return dialog + + @GObject.Signal(name='settings-dialog-init', + flags=GObject.SignalFlags.RUN_LAST, + return_type=None, + arg_types=(SettingsDialog,)) + def settings_dialog_init(self,dialog): + pass + \ No newline at end of file diff --git a/sgbackup/gui/_gamedialog.py b/sgbackup/gui/_gamedialog.py new file mode 100644 index 0000000..7f166d0 --- /dev/null +++ b/sgbackup/gui/_gamedialog.py @@ -0,0 +1,675 @@ +############################################################################### +# sgbackup - The SaveGame Backup tool # +# Copyright (C) 2024 Christian Moser # +# # +# 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 . # +############################################################################### + +from gi.repository import GObject,Gio,GLib,Gtk,Pango +from ..game import Game,GameFileMatcher,GameFileType + +class GameVariableData(GObject.GObject): + def __init__(self,name:str,value:str): + GObject.GObject.__init__(self) + self.name = name + self.value = value + + @GObject.Property(type=str) + def name(self)->str: + return self.__name + @name.setter + def name(self,name): + self.__name = name + + @GObject.Property(type=str) + def value(self)->str: + return self.__value + @value.setter + def value(self,value:str): + self.__value = value + +class RegistryKeyData(GObject.GObject): + def __init__(self,regkey=None): + GObject.GObject.__init__(self) + if not regkey: + self.__regkey = "" + + @GObject.Property(type=str) + def regkey(self): + return self.__regkey + @regkey.setter + def regkey(self,key:str): + self.__regkey = key + + def __bool__(self): + return bool(self.__regkey) + +class GameVariableDialog(Gtk.Dialog): + def __init__(self,parent:Gtk.Window,columnview:Gtk.ColumnView,variable:GameVariableData|None=None): + Gtk.Dialog.__init__(self) + self.set_transient_for(parent) + self.set_default_size(600,-1) + + self.__columnview = columnview + + if variable: + self.__variable = variable + else: + self.__variable = None + + grid = Gtk.Grid() + label = Gtk.Label.new("Name:") + self.__name_entry = Gtk.Entry() + self.__name_entry.set_hexpand(True) + self.__name_entry.connect("changed",self._on_name_entry_changed) + grid.attach(label,0,0,1,1) + grid.attach(self.__name_entry,1,0,1,1) + + label = Gtk.Label.new("Value") + self.__value_entry = Gtk.Entry() + self.__value_entry.set_hexpand(True) + + grid.attach(label,0,1,1,1) + grid.attach(self.__value_entry,1,1,1,1) + + self.get_content_area().append(grid) + + if self.__variable: + self.__name_entry.set_text(self.__variable.name) + self.__value_entry.set_text(self.__variable.value) + + self.__apply_button = self.add_button("Apply",Gtk.ResponseType.APPLY) + self.__apply_button.set_sensitive(bool(self)) + + self.add_button("Cancel",Gtk.ResponseType.CANCEL) + + def __bool__(self): + name = self.__name_entry.get_text() + if name: + if self.__variable and self.__variable.name == name: + return True + model = self.__columnview.get_model().get_model() + for i in range(model.get_n_items()): + if name == model.get_item(i).name: + return False + return True + return False + + def _on_name_entry_changed(self,entry): + self.__apply_button.set_sensitive(bool(self)) + + def do_response(self,response): + if response == Gtk.ResponseType.APPLY: + if not bool(self): + return + if self.__variable: + self.__variable.name = self.__name_entry.get_text() + self.__variable.value = self.__value_entry.get_text() + else: + model = self.__columnview.get_model().get_model() + model.append(GameVariableData(self.__name_entry.get_text(),self.__value_entry.get_text())) + self.hide() + self.destroy() + +class GameDialog(Gtk.Dialog): + def __init__(self, + parent:Gtk.Window|None=None, + game:Game|None=Game): + + Gtk.Dialog.__init__(self) + if (parent): + self.set_transient_for(parent) + + if isinstance(game,Game): + self.__game = game + else: + self.__game = None + + self.set_default_size(800,600) + + paned = Gtk.Paned(orientation=Gtk.Orientation.HORIZONTAL) + paned.set_position(200) + + self.__stack = Gtk.Stack.new() + paned.set_end_child(self.__stack) + paned.set_hexpand(True) + paned.set_vexpand(True) + + self.__stack_sidebar = Gtk.ListBox() + self.__stack_sidebar.set_activate_on_single_click(False) + self.__stack_sidebar.set_selection_mode(Gtk.SelectionMode.SINGLE) + self.__stack_sidebar.connect('selected_rows_changed',self._on_stack_sidebar_selected_rows_changed) + + sidebar_scrolled = Gtk.ScrolledWindow() + sidebar_scrolled.set_child(self.__stack_sidebar) + paned.set_start_child(sidebar_scrolled) + + self.__variable_name_factory = Gtk.SignalListItemFactory() + self.__variable_name_factory.connect('setup',self._on_variable_name_setup) + self.__variable_name_factory.connect('bind',self._on_variable_name_bind) + + self.__variable_value_factory = Gtk.SignalListItemFactory() + self.__variable_value_factory.connect('setup',self._on_variable_value_setup) + self.__variable_value_factory.connect('bind',self._on_variable_value_bind) + + self.__add_game_page() + self.__windows = self.__create_windows_page() + self.__linux = self.__create_linux_page() + self.__macos = self.__create_macos_page() + self.__steam_windows = self.__create_steam_page('steam-windows','Steam Windows') + self.__steam_linux = self.__create_steam_page('steam-linux','Steam Linux') + self.__steam_macos = self.__create_steam_page('steam-macos','Steam MacOS') + + + for stack_page in self.__stack.get_pages(): + hbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL,4) + label = Gtk.Label.new(stack_page.props.title) + attrs = Pango.AttrList.new() + size_attr = Pango.AttrSize.new(14 * Pango.SCALE) + attrs.insert(size_attr) + label.set_attributes(attrs) + icon = Gtk.Image.new_from_icon_name(stack_page.props.icon_name) + icon.set_pixel_size(20) + hbox.append(icon) + hbox.append(label) + hbox.page_name = stack_page.props.name + + self.__stack_sidebar.append(hbox) + + self.reset() + self.__stack_sidebar.select_row(self.__stack_sidebar.get_row_at_index(0)) + + self.get_content_area().append(paned) + self.add_button("Apply",Gtk.ResponseType.APPLY) + self.add_button("Cancel",Gtk.ResponseType.CANCEL) + + + def __add_game_page(self): + page = Gtk.ScrolledWindow() + vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL,2) + self.__set_widget_margin(vbox,5) + + grid = Gtk.Grid.new() + + label = Gtk.Label.new("Is active?") + self.__active_switch = Gtk.Switch() + entry_hbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL,5) + entry_hbox.append(self.__active_switch) + entry_hbox.append(label) + vbox.append(entry_hbox) + + label = Gtk.Label.new("Is live?") + self.__live_switch = Gtk.Switch() + entry_hbox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL,5) + + entry_hbox.append(self.__live_switch) + entry_hbox.append(label) + vbox.append(entry_hbox) + + label = Gtk.Label.new("ID:") + self.__id_label = Gtk.Label() + self.__id_label.set_hexpand(True) + grid.attach(label,0,0,1,1) + grid.attach(self.__id_label,1,0,1,1) + + label = Gtk.Label.new("Key:") + self.__key_entry = Gtk.Entry() + self.__key_entry.set_hexpand(True) + grid.attach(label,0,1,1,1) + grid.attach(self.__key_entry,1,1,1,1) + + label = Gtk.Label.new("Game name:") + self.__name_entry = Gtk.Entry() + self.__name_entry.set_hexpand(True) + grid.attach(label,0,2,1,1) + grid.attach(self.__name_entry,1,2,1,1) + + label = Gtk.Label.new("Savegame name:") + self.__sgname_entry = Gtk.Entry() + self.__sgname_entry.set_hexpand(True) + grid.attach(label,0,3,1,1) + grid.attach(self.__sgname_entry,1,3,1,1) + vbox.append(grid) + + self.__game_variables = self.__create_variables_widget() + + vbox.append(self.__game_variables) + + page.set_child(vbox) + self.__stack.add_titled(page,"main","Game") + stack_page = self.__stack.get_page(page) + stack_page.set_icon_name('sgbackup') + + + def __create_windows_page(self): + page = Gtk.ScrolledWindow() + vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL,2) + self.__set_widget_margin(vbox,5) + + grid = Gtk.Grid() + + label = Gtk.Label.new("Root directory:") + page.sgroot_entry = Gtk.Entry() + page.sgroot_entry.set_hexpand(True) + grid.attach(label,0,0,1,1) + grid.attach(page.sgroot_entry,1,0,1,1) + + label = Gtk.Label.new("Backup directory:") + page.sgdir_entry = Gtk.Entry() + page.sgdir_entry.set_hexpand(True) + grid.attach(label,0,1,1,1) + grid.attach(page.sgdir_entry,1,1,1,1) + + vbox.append(grid) + + page.lookup_regkeys = self.__create_registry_key_widget("Lookup Registry keys") + vbox.append(page.lookup_regkeys) + + page.installdir_regkeys = self.__create_registry_key_widget("Installations directory Registry keys") + vbox.append(page.installdir_regkeys) + + page.variables = self.__create_variables_widget() + vbox.append(page.variables) + + page.set_child(vbox) + self.__stack.add_titled(page,"windows","Windows") + stack_page = self.__stack.get_page(page) + stack_page.set_icon_name("windows-svgrepo-com") + + return page + + + def __create_linux_page(self): + page = Gtk.ScrolledWindow() + vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL,2) + self.__set_widget_margin(vbox,5) + + grid = Gtk.Grid() + label = Gtk.Label.new("Root directory:") + page.sgroot_entry = Gtk.Entry() + page.sgroot_entry.set_hexpand(True) + grid.attach(label,0,0,1,1) + grid.attach(page.sgroot_entry,1,0,1,1) + + label = Gtk.Label.new("Backup directory:") + page.sgdir_entry = Gtk.Entry() + page.sgdir_entry.set_hexpand(True) + grid.attach(label,0,1,1,1) + grid.attach(page.sgdir_entry,1,1,1,1) + + label = Gtk.Label.new("Executable") + page.binary_entry = Gtk.Entry() + page.binary_entry.set_hexpand(True) + grid.attach(label,0,2,1,1) + grid.attach(page.binary_entry,1,2,1,1) + vbox.append(grid) + + page.variables = self.__create_variables_widget() + vbox.append(page.variables) + + page.set_child(vbox) + self.__stack.add_titled(page,"linux","Linux") + stack_page = self.__stack.get_page(page) + stack_page.set_icon_name("linux-svgrepo-com") + + return page + + def __create_macos_page(self): + page = Gtk.ScrolledWindow() + vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL,2) + self.__set_widget_margin(vbox,5) + + grid = Gtk.Grid() + label = Gtk.Label.new("Root directory:") + page.sgroot_entry = Gtk.Entry() + page.sgroot_entry.set_hexpand(True) + grid.attach(label,0,0,1,1) + grid.attach(page.sgroot_entry,1,0,1,1) + + label = Gtk.Label.new("Backup directory:") + page.sgdir_entry = Gtk.Entry() + page.sgdir_entry.set_hexpand(True) + grid.attach(label,0,1,1,1) + grid.attach(page.sgdir_entry,1,1,1,1) + + label = Gtk.Label.new("Executable") + page.binary_entry = Gtk.Entry() + page.binary_entry.set_hexpand(True) + grid.attach(label,0,2,1,1) + grid.attach(page.binary_entry,1,2,1,1) + vbox.append(grid) + + page.variables = self.__create_variables_widget() + vbox.append(page.variables) + + page.set_child(vbox) + self.__stack.add_titled(page,"macos","MacOS") + stack_page = self.__stack.get_page(page) + stack_page.set_icon_name("apple-svgrepo-com") + + return page + + def __create_steam_page(self,name,title): + page = Gtk.ScrolledWindow() + vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL,2) + self.__set_widget_margin(vbox,5) + + grid = Gtk.Grid() + + label = Gtk.Label.new("App ID:") + page.appid_entry = Gtk.Entry() + page.appid_entry.set_hexpand(True) + grid.attach(label,0,0,1,1) + grid.attach(page.appid_entry,1,0,1,1) + vbox.append(grid) + + + label = Gtk.Label.new("Root directory:") + page.sgroot_entry = Gtk.Entry() + page.sgroot_entry.set_hexpand(True) + grid.attach(label,0,1,1,1) + grid.attach(page.sgroot_entry,1,1,1,1) + + label = Gtk.Label.new("Backup directory:") + page.sgdir_entry = Gtk.Entry() + page.sgdir_entry.set_hexpand(True) + grid.attach(label,0,2,1,1) + grid.attach(page.sgdir_entry,1,2,1,1) + + page.variables = self.__create_variables_widget() + vbox.append(page.variables) + + page.set_child(vbox) + self.__stack.add_titled(page,name,title) + stack_page = self.__stack.get_page(page) + stack_page.set_icon_name("steam-svgrepo-com") + + return page + def __set_widget_margin(self,widget,margin): + widget.set_margin_start(margin) + widget.set_margin_end(margin) + widget.set_margin_top(margin) + widget.set_margin_bottom(margin) + + def __create_variables_widget(self): + widget = Gtk.Frame.new("Variables") + vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL,0) + + model = Gio.ListStore.new(GameVariableData) + selection = Gtk.SingleSelection.new(model) + selection.set_autoselect(False) + selection.set_can_unselect(True) + + widget.columnview = Gtk.ColumnView.new(selection) + widget.columnview.set_vexpand(True) + + widget.actions = Gtk.ActionBar() + icon = Gtk.Image.new_from_icon_name("list-add-symbolic") + widget.add_button = Gtk.Button() + widget.add_button.set_child(icon) + widget.add_button.connect('clicked', + self._on_variables_add_button_clicked, + widget.columnview) + widget.actions.pack_start(widget.add_button) + + icon = Gtk.Image.new_from_icon_name("document-edit-symbolic") + widget.edit_button = Gtk.Button() + widget.edit_button.set_child(icon) + widget.edit_button.set_sensitive(False) + widget.edit_button.connect('clicked', + self._on_variables_edit_buton_clicked, + widget.columnview) + widget.actions.pack_start(widget.edit_button) + + icon = Gtk.Image.new_from_icon_name("list-remove-symbolic") + widget.remove_button = Gtk.Button() + widget.remove_button.set_child(icon) + widget.remove_button.set_sensitive(False) + widget.remove_button.connect('clicked', + self._on_variables_remove_button_clicked, + widget.columnview) + widget.actions.pack_start(widget.remove_button) + + name_column = Gtk.ColumnViewColumn.new("Name",self.__variable_name_factory) + name_column.set_expand(True) + widget.columnview.append_column(name_column) + + value_column = Gtk.ColumnViewColumn.new("Value",self.__variable_value_factory) + value_column.set_expand(True) + widget.columnview.append_column(value_column) + + selection.connect('selection-changed',self._on_variable_selection_changed,widget) + + vbox.append(widget.actions) + vbox.append(widget.columnview) + + widget.set_child(vbox) + return widget + + def __create_registry_key_widget(self,title): + widget = Gtk.Frame.new(title) + vbox=Gtk.Box.new(Gtk.Orientation.VERTICAL,2) + + widget.actions = Gtk.ActionBar() + icon = Gtk.Image.new_from_icon_name("list-add-symbolic") + button = Gtk.Button.new() + button.set_child(icon) + button.connect('clicked',self._on_windows_regkey_add_button_clicked,widget) + widget.actions.pack_start(button) + + model = Gio.ListStore.new(RegistryKeyData) + selection = Gtk.SingleSelection.new(model) + selection.set_autoselect(False) + selection.set_can_unselect(True) + + factory = Gtk.SignalListItemFactory() + factory.connect('setup',self._on_windows_regkey_setup) + factory.connect('bind',self._on_windows_regkey_bind,widget) + + widget.listview = Gtk.ListView.new(selection,factory) + + vbox.append(widget.actions) + vbox.append(widget.listview) + widget.set_child(vbox) + + return widget + + def reset(self): + self.__active_switch.set_active(True) + self.__live_switch.set_active(True) + self.__name_entry.set_text("") + self.__sgname_entry.set_text("") + self.__game_variables.columnview.get_model().get_model().remove_all() + + #windows + self.__windows.sgroot_entry.set_text("") + self.__windows.sgdir_entry.set_text("") + self.__windows.variables.columnview.get_model().get_model().remove_all() + self.__windows.lookup_regkeys.listview.get_model().get_model().remove_all() + self.__windows.installdir_regkeys.listview.get_model().get_model().remove_all() + + #linux + self.__linux.sgroot_entry.set_text("") + self.__linux.sgdir_entry.set_text("") + self.__linux.binary_entry.set_text("") + self.__linux.variables.columnview.get_model().get_model().remove_all() + + #linux + self.__macos.sgroot_entry.set_text("") + self.__macos.sgdir_entry.set_text("") + self.__macos.binary_entry.set_text("") + self.__macos.variables.columnview.get_model().get_model().remove_all() + + #steam windows + self.__steam_windows.sgroot_entry.set_text("") + self.__steam_windows.sgdir_entry.set_text("") + self.__steam_windows.appid_entry.set_text("") + self.__steam_windows.variables.columnview.get_model().get_model().remove_all() + + #steam linux + self.__steam_linux.sgroot_entry.set_text("") + self.__steam_linux.sgdir_entry.set_text("") + self.__steam_linux.appid_entry.set_text("") + self.__steam_linux.variables.columnview.get_model().get_model().remove_all() + + #steam macos + self.__steam_macos.sgroot_entry.set_text("") + self.__steam_macos.sgdir_entry.set_text("") + self.__steam_macos.appid_entry.set_text("") + self.__steam_macos.variables.columnview.get_model().get_model().remove_all() + + if self.__game: + self.__active_switch.set_active(self.__game.is_active) + self.__live_switch.set_active(self.__game.is_live) + self.__name_entry.set_text(self.__game.name) + self.__sgname_entry.set_text(self.__game.savegame_name) + for name,value in self.__game.variables.items(): + self.__game_variables.get_model().get_model().append(GameVariableData(name,value)) + + if self.__game.windows: + self.__windows.sgroot_entry.set_text(self.__game.windows.savegame_root) + self.__windows.sgdir_entry.set_text(self.__game.windows.savegame_dir) + + # set lookup regkeys + var_model = self.__windows.variables.columnview.get_model().get_model() + grk_model = self.__windows.lookup_regkeys.listview.get_model().get_model() + irk_model = self.__windows.installdir_regkeys.listview.get_model().get_model() + for rk in self.__game.windows.game_registry_keys: + grk_model.append(RegistryKeyData(rk)) + + #set installdir regkeys + for rk in self.__game.windows.installdir_registry_keys: + irk_model.append(RegistryKeyData(rk)) + + #set variables + for name,value in self.__game.windows.variables.items(): + var_model.append(GameVariableData(name,value)) + + if self.__game.linux: + self.__linux.sgroot_entry.set_text(self.__game.linux.savegame_root) + self.__linux.sgdir_entry.set_text(self.__game.linux.savegame_dir) + self.__linux.binary_entry.set_text(self.__game.linux.binary) + var_model = self.__linux.variables.columnview.get_model().get_model() + for name,value in self.__game.linux.variables.items(): + var_model.append(GameVariableData(name,value)) + + if self.__game.macos: + self.__macos.sgroot_entry.set_text(self.__game.linux.savegame_root) + self.__macos.sgdir_entry.set_text(self.__game.linux.savegame_dir) + self.__macos.binary_entry.set_text(self.__game.linux.binary) + var_model = self.__macos.variables.columnview.get_model().get_model() + for name,value in self.__game.linux.variables.items(): + var_model.append(GameVariableData(name,value)) + + if self.__game.steam_windows: + self.__steam_windows.sgroot_entry.set_text(self.__game.steam_windows.savegame_root) + self.__steam_windows.sgdir_entry.set_text(self.__game.steam_windows.savegame_dir) + self.__steam_windows.appid_entry.set_text(self.__game.steam_windows.appid) + var_model = self.__steam_windows.variables.columnview.get_model().get_model() + for name,value in self.__game.steam_windows.variables.items(): + var_model.append(GameVariableData(name,value)) + + if self.__game.steam_linux: + self.__steam_linux.sgroot_entry.set_text(self.__game.steam_linux.savegame_root) + self.__steam_linux.sgdir_entry.set_text(self.__game.steam_linux.savegame_dir) + self.__steam_linux.appid_entry.set_text(self.__game.steam_linux.appid) + var_model = self.__steam_linux.variables.columnview.get_model().get_model() + for name,value in self.__game.steam_linux.variables.items(): + var_model.append(GameVariableData(name,value)) + + if self.__game.steam_macos: + self.__steam_macos.sgroot_entry.set_text(self.__game.steam_macos.savegame_root) + self.__steam_macos.sgdir_entry.set_text(self.__game.steam_macos.savegame_dir) + self.__steam_macos.appid_entry.set_text(self.__game.steam_macos.appid) + var_model = self.__steam_macos.variables.columnview.get_model().get_model() + for name,value in self.__game.steam_macos.variables.items(): + var_model.append(GameVariableData(name,value)) + # reset() + + def _on_variable_name_setup(self,factory,item): + label = Gtk.Label() + item.set_child(label) + + def _on_variable_name_bind(self,factory,item): + label = item.get_child() + data = item.get_item() + data.bind_property('name',label,'label',GObject.BindingFlags.SYNC_CREATE) + + def _on_variable_value_setup(self,factory,item): + label = Gtk.Label() + item.set_child(label) + + def _on_variable_value_bind(self,factory,item): + label = item.get_child() + data = item.get_item() + data.bind_property('value',label,'label',GObject.BindingFlags.SYNC_CREATE) + + def _on_windows_regkey_setup(self,factory,item): + label = Gtk.EditableLabel() + item.set_child(label) + + def _on_windows_regkey_bind(self,factory,item,widget): + label = item.get_child() + data = item.get_item() + label.set_text(data.regkey) + label.bind_property('text',data,'regkey',GObject.BindingFlags.DEFAULT) + label.connect('changed',self._on_windows_regkey_label_changed,widget) + if not label.get_text(): + label.start_editing() + label.grab_focus() + + def _on_stack_sidebar_selected_rows_changed(self,sidebar): + row = sidebar.get_selected_row() + self.__stack.set_visible_child_name(row.get_child().page_name) + + def _on_variables_add_button_clicked(self,button,columnview): + dialog = GameVariableDialog(self,columnview) + dialog.present() + + def _on_variables_remove_button_clicked(self,button,columnview): + selection = columnview.get_model() + model = selection.get_model() + selected = selection.get_selected() + if selected == Gtk.INVALID_LIST_POSITION: + return + model.remove(selected) + + def _on_variables_edit_buton_clicked(self,button,columnview): + data = columnview.get_model().get_selected() + if data: + dialog = GameVariableDialog(self,columnview,data) + dialog.present() + + def _on_variable_selection_changed(self,selection,position,n_items,var_widget): + if (selection.get_model().get_n_items() == 0) or (selection.get_selected() == Gtk.INVALID_LIST_POSITION): + var_widget.edit_button.set_sensitive(False) + var_widget.remove_button.set_sensitive(False) + else: + var_widget.edit_button.set_sensitive(True) + var_widget.remove_button.set_sensitive(True) + + def _on_windows_regkey_add_button_clicked(self,button,widget): + widget.listview.get_model().get_model().append(RegistryKeyData()) + + def _on_windows_regkey_label_changed(self,label,widget): + if not label.get_text(): + model = widget.listview.get_model().get_model() + i = 0 + while i < model.get_n_items(): + item = model.get_item(i) + if not item.regkey: + model.remove(i) + continue + i += 1 + \ No newline at end of file diff --git a/sgbackup/gui/_settingsdialog.py b/sgbackup/gui/_settingsdialog.py new file mode 100644 index 0000000..93ac5d9 --- /dev/null +++ b/sgbackup/gui/_settingsdialog.py @@ -0,0 +1,97 @@ +############################################################################### +# sgbackup - The SaveGame Backup tool # +# Copyright (C) 2024 Christian Moser # +# # +# 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 . # +############################################################################### + +from gi.repository import Gtk,GLib,Gio +from gi.repository.GObject import GObject,Signal,Property + +from ..settings import settings + +class SettingsDialog(Gtk.Dialog): + def __init__(self,parent=None): + Gtk.Dialog.__init__(self) + if parent: + self.set_transient_for(parent) + self.set_default_size(800,600) + vbox = self.get_content_area() + paned = Gtk.Paned(orientation=Gtk.Orientation.HORIZONTAL) + paned.set_position(250) + + self.__stack = Gtk.Stack() + self.__stack_sidebar = Gtk.StackSidebar.new() + self.__add_general_settings_page() + + paned.set_start_child(self.__stack_sidebar) + paned.set_end_child(self.__stack) + paned.set_vexpand(True) + self.__stack_sidebar.set_stack(self.__stack) + + vbox.append(paned) + + self.add_button("Apply",Gtk.ResponseType.APPLY) + self.add_button("Cancel",Gtk.ResponseType.CANCEL) + + def __add_general_settings_page(self): + page = Gtk.ScrolledWindow() + vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + grid = Gtk.Grid() + + label = Gtk.Label.new('Backup directory: ') + grid.attach(label,0,0,1,1) + self.__backupdir_label = Gtk.Label.new(settings.backup_dir) + self.__backupdir_label.set_hexpand(True) + grid.attach(self.__backupdir_label,1,0,1,1) + img = Gtk.Image.new_from_icon_name('document-open-symbolic') + img.set_pixel_size(16) + backupdir_button = Gtk.Button() + backupdir_button.set_child(img) + backupdir_button.connect('clicked',self._on_backupdir_button_clicked) + grid.attach(backupdir_button,2,0,1,1) + + vbox.append(grid) + page.set_child(vbox) + + self.add_page(page,"general","Generic settings") + + def _on_backupdir_dialog_select_folder(self,dialog,result,*data): + try: + dir = dialog.select_folder_finish(result) + if dir is not None: + self.__backupdir_label.set_text(dir.get_path()) + except: + pass + + def _on_backupdir_button_clicked(self,button): + dialog = Gtk.FileDialog.new() + dialog.set_title("sgbackup: Choose backup folder") + dialog.select_folder(self,None,self._on_backupdir_dialog_select_folder) + + + + def add_page(self,page,name,title): + self.__stack.add_titled(page,name,title) + + def do_response(self,response): + if response == Gtk.ResponseType.APPLY: + self.emit('save') + settings.save() + self.destroy() + + @Signal(name='save') + def do_save(self): + settings.backup_dir = self.__backupdir_label.get_text() + \ No newline at end of file diff --git a/sgbackup/gui/application.py b/sgbackup/gui/application.py deleted file mode 100644 index 26075df..0000000 --- a/sgbackup/gui/application.py +++ /dev/null @@ -1,83 +0,0 @@ -############################################################################### -# sgbackup - The SaveGame Backup tool # -# Copyright (C) 2024 Christian Moser # -# # -# 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 . # -############################################################################### - -from gi.repository import Gtk,GObject,Gio -from .appwindow import AppWindow - -import logging; logger=logging.getLogger(__name__) - -class Application(Gtk.Application): - def __init__(self,*args,**kwargs): - AppFlags = Gio.ApplicationFlags - kwargs['application_id'] = 'org.sgbackup.sgbackup' - kwargs['flags'] = AppFlags.FLAGS_NONE - Gtk.Application.__init__(self,*args,**kwargs) - - self.__logger = logger.getChild('Application') - self.__builder = None - self.__appwindow = None - - @property - def _logger(self): - return self.__logger - - @GObject.Property - def appwindow(self): - return self.__appwindow - - def do_startup(self): - self._logger.debug('do_startup()') - if not self.__builder: - self.__builder = Gtk.Builder.new() - - Gtk.Application.do_startup(self) - - action_about = Gio.SimpleAction.new('about',None) - action_about.connect('activate',self.on_action_about) - self.add_action(action_about) - - action_quit = Gio.SimpleAction.new('quit',None) - action_quit.connect('activate',self.on_action_quit) - self.add_action(action_quit) - - action_settings = Gio.SimpleAction.new('settings',None) - action_settings.connect('activate',self.on_action_settings) - self.add_action(action_settings) - - # add accels - self.set_accels_for_action('app.quit',["q"]) - - @GObject.Property - def builder(self): - return self.__builder - - def do_activate(self): - self._logger.debug('do_activate()') - if not (self.__appwindow): - self.__appwindow = AppWindow(application=self) - - self.appwindow.present() - - def on_action_about(self,action,param): - pass - - def on_action_settings(self,action,param): - pass - - def on_action_quit(self,action,param): - self.quit() \ No newline at end of file diff --git a/sgbackup/gui/appmenu.ui b/sgbackup/gui/appmenu.ui index acb558e..a87c277 100644 --- a/sgbackup/gui/appmenu.ui +++ b/sgbackup/gui/appmenu.ui @@ -1,6 +1,25 @@ +
+ + _Game + + + _Add Game + app.new-game + + + + _Steam + + + _Epic + + + _GoG + +
_Settings diff --git a/sgbackup/gui/appwindow.py b/sgbackup/gui/appwindow.py deleted file mode 100644 index cec6ced..0000000 --- a/sgbackup/gui/appwindow.py +++ /dev/null @@ -1,86 +0,0 @@ -############################################################################### -# sgbackup - The SaveGame Backup tool # -# Copyright (C) 2024 Christian Moser # -# # -# 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 . # -############################################################################### - -from gi.repository import Gtk,Gio,GObject - -import os -from .gameview import GameView -from .backupview import BackupView - -class AppWindow(Gtk.ApplicationWindow): - def __init__(self,application=None,**kwargs): - kwargs['title'] = "SGBackup" - - if (application is not None): - kwargs['application']=application - if (hasattr(application,'builder')): - builder = application.builder - else: - builder = Gtk.Builder.new() - - Gtk.ApplicationWindow.__init__(self,**kwargs) - self.set_default_size(800,600) - - self.__builder = builder - self.builder.add_from_file(os.path.join(os.path.dirname(__file__),'appmenu.ui')) - gmenu = self.builder.get_object('appmenu') - appmenu_popover = Gtk.PopoverMenu.new_from_model(gmenu) - image = Gtk.Image.new_from_icon_name('open-menu-symbolic') - menubutton = Gtk.MenuButton.new() - menubutton.set_popover(appmenu_popover) - menubutton.set_child(image) - headerbar = Gtk.HeaderBar.new() - headerbar.pack_start(menubutton) - self.set_titlebar(headerbar) - - vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) - - self.__vpaned = Gtk.Paned(orientation=Gtk.Orientation.VERTICAL) - self.__vpaned.set_hexpand(True) - self.__vpaned.set_vexpand(True) - self.__vpaned.set_wide_handle(True) - self.__gameview = GameView() - self.__vpaned.set_start_child(self.gameview) - self.__backupview = BackupView(self.gameview) - self.__vpaned.set_end_child(self.backupview) - self.__vpaned.set_resize_start_child(True) - self.__vpaned.set_resize_end_child(True) - - vbox.append(self.__vpaned) - - statusbar = Gtk.Statusbar() - statusbar.set_hexpand(True) - statusbar.set_vexpand(False) - statusbar.push(0,'Running ...') - vbox.append(statusbar) - - self.set_child(vbox) - - @GObject.Property - def builder(self): - return self.__builder - - @GObject.Property - def backupview(self): - return self.__backupview - - @GObject.Property - def gameview(self): - return self.__gameview - - \ No newline at end of file diff --git a/sgbackup/gui/backupview.py b/sgbackup/gui/backupview.py deleted file mode 100644 index 1afec6d..0000000 --- a/sgbackup/gui/backupview.py +++ /dev/null @@ -1,30 +0,0 @@ -############################################################################### -# sgbackup - The SaveGame Backup tool # -# Copyright (C) 2024 Christian Moser # -# # -# 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 . # -############################################################################### - -from gi.repository import Gtk,Gio,GObject - -from .gameview import GameView - -class BackupView(Gtk.ScrolledWindow): - def __init__(self,gameview:GameView): - Gtk.ScrolledWindow.__init__(self) - self.__gameview = GameView - - @GObject.Property - def gameview(self): - return self.__gameview diff --git a/sgbackup/gui/gameview.py b/sgbackup/gui/gameview.py deleted file mode 100644 index 1f4b623..0000000 --- a/sgbackup/gui/gameview.py +++ /dev/null @@ -1,24 +0,0 @@ -############################################################################### -# sgbackup - The SaveGame Backup tool # -# Copyright (C) 2024 Christian Moser # -# # -# 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 . # -############################################################################### - -from gi.repository import Gtk,Gio,GObject - -class GameView(Gtk.ScrolledWindow): - def __init__(self): - Gtk.ScrolledWindow.__init__(self) - \ No newline at end of file diff --git a/sgbackup/icons/hicolor/128x128/apps/sgbackup.png b/sgbackup/icons/hicolor/128x128/apps/sgbackup.png new file mode 100644 index 0000000000000000000000000000000000000000..b86f42265246d071029284d26fe021e9fc3d25cc GIT binary patch literal 17499 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 Cnpoce literal 0 HcmV?d00001 diff --git a/sgbackup/icons/hicolor/256x256/apps/sgbackup.png b/sgbackup/icons/hicolor/256x256/apps/sgbackup.png new file mode 100644 index 0000000000000000000000000000000000000000..9ab7b91a424abbf7f879aad4be376bbf95e70f0f GIT binary patch literal 42670 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 z zi1+sQd$V+`9Y$FX>zrmaIgDG$SAR>?X$e*pVefHIie_gIs~a(&zFUd8E*?Y+)ktn~Pw4kJ zLJjrG5}Rh0TnRwZVVHXN(IDGr$3Jboc$3e!)T7(H=Vl7kpm!d`hIuPdXf(d)6TdwW zf`b(c!~vAlpy_&ok>FC;GdRcYA=B!`D2o3jzQwVI&Fb`zg$IW=Bk|7n_XL#e0h_&1 z$?7dH!xZ%}D}MgI8Qj^i8A`J$bj08jy27C(rJ$ndbg;20m$@-#EdbzZzQTO1%h7LD zmJ`J{mlv2kSKS}f_Bx?q23HnPiu@V{9mN!h|JzXQHAu@s-sk;k+0FI5D$Q+13F8MP;4W3q zV@pOT_@V%+0Zg?Ox=3G;P3L+_34PYWCt{|~=sHhVoIP$5!yQisdismvZTh->ksv04 z>vGayWUOV2Uq7|k9zPiwUONYy1=qkx^+?keSVJF87FF!7XW~1>uLs675t=3prcIZ3 z6we3GI1o&1?6b1dN_~HC$Z>O!)BIlE>hR0TU{vZK#ZTil2)Xz!L9_eO8&&OHGhVE! zYTXPgI;#w#hHM}JeR%RCX47-MzmF~M-rD;;{v-%0Av^=u|7o)wXnEN3m+Y~B4pjHM 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 EA4!f)P5=M^ literal 0 HcmV?d00001 diff --git a/sgbackup/icons/hicolor/32x32/apps/sgbackup.png b/sgbackup/icons/hicolor/32x32/apps/sgbackup.png new file mode 100644 index 0000000000000000000000000000000000000000..81b08e74bbc42adf1de7f357664a18d03fbfe697 GIT binary patch literal 5999 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%0Av(EMON@SGCg-_Lp_we zRJ^0%_9Q+Idf!eE*I8IEY)v$flE-37LtjQ|>f8gIelfa%j`mdDoq5 ztc*1A+t%ww*DGNiWH2@-zVGd4UG;4ImW%rhxAF8jDYbH|B5VQ9@DP(4TLG&rq2_sy za^mhKgN3WMm32OvNu?w1>GeORdJtnPw?_M?lO`g3fq4d8>o8x^(S>j$vOuX8KJV}) z^O7Yh*A$qeI2-Lq8*OjjTHcb685kIXElOc=P|7Hwe*n{gQ+B7JR$4Swf*8rC{LNfG+_7;Y&;qb;Tv^vR0 z+O`E*{Y(PLdMF~-LS1)syYJ3l0yAviMot&jF8GW;Bho8R_zc1jw_oK;@xEDhKT)f* zwBRAq^%-;f@raI~1+)YXSz>N$HuEK}z>jzCa{88F!fftfujNwy36Akw36FK*J$rZ5 z>JYnpA6{T+dAv~9kY^*te-G718r0FMACOmQj{)!omPUk^cD9^%J=<@1-|r-^*z{Vn zts?<*p&S$>3i5I@(SFl-@Ix1BRr;N~3Yec8>TIrY$KkK?^1fY2UpwE^YF@pG@;nvh z^-d$@jg1yK>=t$I#7f}jffGO7QrGkf?j5REFy%_kvv~aYq)f=GkRet4NJoc!=G%Lp z=;>IEPVhW(2<$httpW+sI#{YLf1Us`Q6qdDoWowJYIfr4)+egWHYXlYI9bs?IjD3% ztX|S_TkT2TLoz(CvZtS1hlW+fV&Nt$@gS*d%=-kW#%kx6H?|IUo|+u=(Z%Y%?vtDi zcf&FKawsxe=j%jZ1VV&1lHm`7z#fTMz*ucS8YDjKod0*q&8HQcpuDN)`bn>!yblG$ z5-ENc0b3R2I{7|3&fS8YOHNLMOKSP$uF&(YmEdH5yr|Jy)dYvPJOtw-Q_Xi)8B1*z zdwa4oNm;l&-LN>q=Mr0H*j07ix>{3R)JM#T4{u*}Od~tfN9clS~4aW}R4KIOkqdHVXnHM3isPu1$ z&e?FBmKE9!%2{1mV7sYCN0)n%xZcOruBB3`RGokJISN^S>&+^4+N*%GZC4l=0*Az% zI;g4Rxo5x)0>E9pfsc3E>0#nh_9N*nL$k0WU53zKQSa+AQUSLgbHi2cA|#byf6&xx z�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 z�RXSOD>HysrQ?_pYbNve#v{Oe7eR5_wTTVw5o5p<+-h;)6P%N&w&q9_MFS@S_Y* z?t)~roB~+M6w_+#%yLVzAQ93iJ8W#i-o1Od{hPNv?K^ke@qv-?bvi#Y?M?>(PlDr| zXI${ZuX)Y)z43?t<-gpzE*Zr%KvTs>u$Pz|iPE2<)#e%0=kLl`r3RW>u@MU7GNIQG zS=Qlw@B82U`=9?==I2|1QO(q4HGOc(-uD3WOw9odEzZ=+Yo-Kg8Rq5|xc*Dm zf}7<5@Xq^s#K?l;!a!oZ}x1#_b>M8dNM=4*GQlQm`)W5u-TM0dXXNdPjRXwKb(`(jL}T{{{``Z#@nm-XPq_f# zWv{yWci-^CuYcB_$-S7Qfj5=3WHmTcD8|ULS!P!-uuNv#yRdyxvi4yit16%Q^rv{o zJKj!fVIdk_Ad^I&b>?P8XY`6Lx6z z>nO_@__e5Nm>On&`G1Si_jN@U)5kFPj1AVg^_O*EYv(xo_mNlTM80bZ{~`mce2b`- z%c+b&xKrId4?0Kt{?8&uZXlHfOp$rSJ*d%sRC4Cs<H|)cw%>X?15mz8CaQq`BkHM-|i7Z}&^%;?#nTa^S8s>fs%I@8} zlD%h~$;UtT@h_eZ0G{|q`l=s(&2Rm}TYlk{7e4I*5t9UAkjP(NEK*qsMaT-qa8}Y9 z5Myw;#*AJ#@W?~_(p!I#yYIS_+;srKIZt96HOFErMU|j1 zs@X!Rg)iPYKKt3vaM48udg2Cd5Ws0EXWr}ZSK~}p-YytmeAkrI zpqP7>ld6=gywt6$`mFs6IfL%|pnk{T_dXRtz{=k9iPR2QU299k1;+~@IlAyL?fX7Y zx^N#xGK}}#<#M9~)EU{H+DX|;uP;~AK-&3K>0(LEtbtVJ9G zi?jkxY;t43`iolOB2r?&)3hlz9e&Z7Pdn#*pZV0^9e=Vq#wYz0z~-HMw*TlGUo&*w z%U|~6&p7)TMlg8kAd;>MWx5>rW+_ZSzt?*2v57$)IG6K>fB0Um|Kb-((xe;*6froT zl|UY273XWrZRI}DN))3;-tLQt+(;Pdvw~Mw@vSQ*xlsXVmQ=%+HLOI+K*f3v@1 zI2i-E%xiTyf}Y-UlvUr0Q|I)bct^qUztrdL()UmeS+fSFMbVsW{t?{lA%?|Ml>XON zO|*W#g+@k=;H+@!QgD(ueD)CSqhDuu@?4A^4MJEZwqT{c%p8L$(@*kT%R)yb;01>B z&O3)YzVq$B1THxp06amDv27!l?mOd*4_|WrWl6zMg|S`sC~N}5W0?&Y5xnz=Snjyv z4nFX~zo0oZM5oh^#9CUar#Z>N8cZW)VtkxNBgH1RoXoWdC02X_eu<=aZlO1V8=LKg0IzJFwPt39GC*{jSvY4oqLCf1;y-C*oAP z1bw>JhwtOOPtNhEF6X>;;NN?Eo!(Nacc$yJbrW8#er>EqV5_!@ANNdsEzuwq&9|&9 za4KcUsgYP^Fm)e^pF%W4HH%rbSu(&lmBEY{7?Nq`4t&Nb$DYUa=}E+fucs~ zYU|0LV1QfyjHYz{C8vuP90%e5#9FR;@ry5h=db+wAO7mQ-u@G(1Ar&kamkBb^baq3 z!6oPY&}(0t3^zw&Pdf^T^!A#UF*GOYP`aI*c1Oq}c%O6A*KXvIhaaYsb>d<#W^Y4~ zU~GdOoAOR6)7<{$=D7q8b+=v5g|(IK=^mrbp!8z@@4rx6p9 zXok)nz|S3o;mtUcVti5xK!(geBs;pM!JV&dEr~=)g!+F}M^$lbT)&>z{=lnWEh4}1 zEAM>U-A^_jX?T(zm%Q+*3(q)X>*a6yv7gwyZg?Zs*kDDhEJD-D8bs@>H8>i1sXLuE zU;EmPwA!t5PT%|5Os*IvC%16+zH=BEUPo%iNEpWIFh+;4I)u?CMjK&tQ4`Pv(G;sg zBn*=PKdCzCKp?CzKyiO7e4bjW@qLCnD7)h|CL;`L8E}H4G30p zFS=-w2WYETIt{hJaR5-Ui=H>$*M83zk(w%A@jJ5^u{?mb_tb&tmYQ)~?(6zB(-r=$ zr9bOZ_qRU%(tFRJjDbL%*P|cJw?rhqM#^46z_*dsVXV%_0MnGDKNTQ%1rkXGa@WWT z?OgZ$EtmodeThVsA?Ik#9>B;#)L-#6n;h@Inl)eDwb*;{1cC~Qv54lJefF6fCMVb5 z`egKzPu2h+NgC!IZ+_#yZtmT2211Hj!Iv4bbWbg>87ut zXpiF$v-%1QPfXxbp<`P3#yojCgKNx?H|EHa7P)ccBIL%BC!XARyePSKWJ!lCS->T2 zGTXr?hKWsEu#KU+b2cMnI793f(IB05-Coslnn&13~ePrHo!APM1KBiQ@9 zle>=<3OlqZ3d-itGEsG1=hd63)$i-#EJS+@Z=L@>u9H65f4|SW+RwTYGr9OZ{gT;z zh4$B)zQq6q#~y%Ksb#Q?6YLEPf)++`zJoK?@5ZBd?JoD|z0ZBGN3D9I#fWg;LOZh< z$pYqG1G0WK7@pvo!(&BPHL6DT`EmKbIK{dg-#U)ciSoj|x(}z|y7%tG-YG400W@ue zhPC|Q5B^~KuJ`<3?>HR*JOPeNU--Ope*ASm@Z9G;`wCK<#!{6a67;H1Bq=xmfeorm=LagUX*LYG_w~-z2g`nlf-P zMxtgy9L?+r^j2c%4Hk7#RLX<8Xp6KMp)#nNWw&WRO6Zku?d}%OVuxe;n2dgpp8Hbj zyPGZ`Sg3{st&5^eUGT``!+bbiy90Euea|lhtFBVA)cUwwI4==P{}Imbo~-^vs}uv* za&-J!QxnxZ18v9P%$NOtffZAludd=$>(h(xTj>c2jv^)}Z%rZIVrax5FxtXm{mJTd z09NM&E7riG8J_I0fbZhtoJ*eb@;CqZzghpX7r%T@ zvpHO{R@WViS6^*}Wgogi`b}BYh7Ih0N~e?IoQvc>QgeRMAuA--mPmi+qfD^3;48zX z#Rl;vaCmD{F6|;K6D;@?qazG8$0<1hiYzop36=rU{QO+s%39_mp(e>ZQBK$zn~0MOB}kzw4Z&pr3tFYej4D`p#2yGngXu~xgj zSL@sd{l2@$6eAr?&rEKXvCF`a7YO*{qUM?M+6;iHc*QkCy zO&L$1N*SnyzbR|}c~3>ze{G}Z*fv9fJd~E4Rx~{lnE8y#qVDI~o{uiOKEr%M982^W zHXsFS116rqL|m)7DD>y@sQt8?@)cujAR{t@%RS9T$}3)e?e1Uvk8i&Tn0zw$%qP_p zz>YoJ|J6^w`QNtD-# zAVd|;7!W(3Xun z;22rAUgoEc>zjY<^)r`WcG*^>T9MRo^KnAVX)z4m6(q4Ye+jiRua~3cW0E5}j=t zH-)K6oZeR|RuaZh3XLtXVN?5ZHrT{|tB-ozmP)`w%S}>E2FC?0N%-0aT>w?ZT3Z_( zByO^hH*{~plPfeW2bc`^q0W7-EFS;qKX!IvEPT|s4k8~!%#IA;RA_fv+;vgZ_eXk$8Xld{)3Fg0Y5?(Gku#^GtsDhhE3Oc;)xA zW9zm6;)-SMKvm&a!9eIwS?1sGnpZ#aA?Wrgd8|BjI*teT-_3{q^8fI6pZqirJg}dI z`FULKqAY8n*(*akkcSh0OrnHRUNPHvz3FwSSdn;elG>q2Wt5WF$q1*0iO zQ~dBam}a0nC+rs~F;Vd|i4V6cCPga6ltW%#>o7r3=(sKpa;mw9Km)G`HMx~wYt=+q z2*Us(R ztLUvK8)F$KHaJULtBkguA!*#GSzo8HRHm(3ZS-n(oEQl7W_?;OCKO%4GV8Br+P$BD zt^5A{oyOoSzY5571=sduF_Hv|DLSLWyD`O`mpKmX;o{tFL1bT4Td@D-@VtD@qA z(xUh>aDeXdQuRH^X^jqA71s$_O)G12{F}%5+E;JlZ$9=n{M^sHg==5>auS{_Vm8$Z!eJiCVN8pev z3o}|X=UNb2I=m5%P95P-{`}AQ@LzwFcfaF3{MhT?$olo;Wq=`ZMqZ=P)v3tSwZJUI zDToU7?yLP@Of5tey$bN=dnovefTs}LsRAS+YKat6I)n)o?V2=->>!OH8qFbmTXE{K z;$tRmdPd^bYW);8Dh6pji9gFx69ZaRln%Kn$?znYq{dL%oj0j~jrTeehls-vq>7b# z;1!t$y{i-vrMKyzRp6wM#|XfpWjyGOp(vml6}%8sgG6ZzH+k)AUTbf;{jO{O=zsjT z(*eNaeO&gu?;UyLkG}3DmtX!|8Vy_a(R&$ts>#Oy03ZNKL_t(srB9~6lC1R99N}!7 z^W}HiFEd^3rdz5kABi|5&ZWoHYM=wD$W>0(!Rkr8cF@()ldb@C-*f4@?nN(tq1EPn z?|(1<`Pbe}Cu=h_)F5-7iSaSkty@o$G%ykcnxbQ=zimC3>JDzo8-jXp-Z8f@!?EeZ z$e7_PU;PRP_8-L3KSjSDBliVq|y}McFjDg`uI5Sh4EgHlf7BXh~tc_#?!M5uUmEd1hv3X`}|cC6vF5>l)p@)=S^f z8v0OqDoESAs8crX*}v(6xh)+xKvp>IA6Vq%OY#J0n$*>F}_U3 z42rixW>Ut-x8YqH96f@I!H$#>9_4tTi51Q2h*+A46Oe*zsF>Q3Dsrr>Myw*lifE#y zoHS7Nu|iV?sip+~f;Y;xOhAWiL~@U7`=T%sbT?#0KjaoQTNJ;!^#f zx&4(I*Zw};tU=ad7M-t15MeUb;2nJNi(lYf?|wI4J0ON;I>hCdU&`jKo3X|sCP7G0 zmqY`tMZQ{d*illK?!dDcVbk2>)YH!9n4USz9d~?-<5S1E|A7bjt>5}>F1+x3&fK?~ z+<9yS9QLaKtUNfBWm{m&{e0PxF(dd6eD-sn=AFO#AILjGk~ElDKf!aJb2-Dq6V-G; zy*-7;)G49yaW>2MJ!|JZ&gG%k?;XdFALp*S?&SEfV`N#*ul@Rac<%EqXW!Xp#lIz8 z!7y@iz_NZ^{HBoDRl(KNJ4Heg31C%&DxTzF{}odc<+af0xLobtRV{gdlIpOllE^fZ`>KFaU=>XvIJw_)tZ~EL>d(Q}2kw^)`DHy^|N&dbnM!Lm1 z14TKq2mp%rD>HLSO7HS>R6YHZ*_H+Nz%1^NmHqbu3@A%FjO878%xc!Wx?+}XAFTGh z3IpqXHFkIO*kS(k|GW?HTZo0>(G5KF!pqpOehZy>1zQ*w7cxpUc*(1te>6GX(*?c8EWI@BgCH&S^9ZW8)im?iE*&Bu!>#W-A>lrF4)|i})&9Ut1fw zl(I}Kan@Zm#i=KEN@^$Ad&bjn`L~&#I>NWVeH$PD_{aFUpZnPwuY#|sVcC<~OZ~a{ zZRxC&*b4BX*62X^G-ZUfyl1K|Wkfpi!`l zAR8`3nqNjc#}J=jF`(Hg7>*D;36=tvRP@$u2vRgqovSyr8D(tCxsa~I6RNkNDAcpJ ziD=xit&$?@P{{)ZTAOiPNAPOOmeL~Y75A%(f?6WgN~oknE(tF-1R!XrHh3*1jTIlT z3s#w2zkzG7x%P!$zx|d=KKqF;eY-V%c=mJv@E9LI@pC`>?pM6*nuduKl~vhasI+ma z{_AqQ@T)J0>Ioat-ZHAx3}1zGtvSTo`*GBT-pvt^4U64v;L4G=N0 zWL?nRRsogQJd|&pVcq(T%uFAp(Mb97^%Uq2ZEn-W;wjC2Xu4sM^xfZ%pe zRi%O(7vs4i9x-7*`>1y3V;|qe`=+=k(OvblO>A8FI$wuVtQ0+JgW|&qQ;FnZ1bq+z zN5lkZ6Fa;Y8Q+CJd?!`~=v4e6D_jRluO+2IEreuDq-aIN>P}QDQzJOz$&yJ%H$4kw zIB28T0JgLBDFNd`&=-M|KK4dKJ0(FiUhRSl!gxeIqPB~0s=$|MbmmSnR3yCCd&C%! zB+vl+qW$9HtxY0Pn}!Ni?A=}Z>`TqH*IfJg+wZ>rdH39O_*cfLbe3upbeHG{ zal-2<`-Ic-wG^+bWqKsKQ{Q1ea)BE zn!@30Iow=s`AaoW%QrhS;p4owuCSvh;C>u?Q|zwZeMA z86_8k7r{Eg#3`ICBI7+C7t7bi2nBLM)PN5Y6IN`%8Tg1!7m0v4U(}o`2Pu)(7K@}C z8Q%RYrjFjsxIc~&Ewkpe4$i|&gTWLdiP1T$%Mg=*fdxP&_F=}J7P4_I7zzV`P`t$( z4d{O#ey_#`mc!T*QWqIBi;9r*7{7qYbMP)qLpUF*2hO971d}!)vA85btdM(0Y6a&U z7{RKI7;A?b#f!ygab-1d6~x7vs^#S`xpsX2Ll2+x-iMFed2s*z?b89kV|2XzZErnu z=hp34iJAeGygsP&!hZP2%K4uFC{5|1G_C($dLr}_bEIYkgVDzH&$b_Hz~ms1-^n|C z-={SqAPKqik(?~_2#LLFEoR^`HSwfA)esdRiAK>?Gu{f` zXE6u~?bWjCgW$mEZli7c7B#d?rC~Y8e0xVLrbKi&=Jd=vCIsOGP?UrCN904^pZ$hC20EFe)mi|_$$iWSL`(L>P!+VLURs?Mup&{?o_pB}8Ewym zidRo3%VGo=GzjuMFL2ad_u}yg1eOcz6qsL_Vj;^IZzMRc~YH`z+@h=p*kQ0EPyeDDvA{R0E*WpX5%wRcU?<%*ZXk`hkHnK0;0a;E;zv; zUYz2s1{z{5S1w+JjvCDH(^$9TC6MevC5hA<0pB3TM=pcFY+4k|tXDL5G)xL}kQ_h6 zvDT;1nL0U3ul3 zuDkBqmyZsQgd1aG5FkBWxPF_voXcG+3E*DltQD61dnr9@=>J6-dkJdni8iEa7pw%C z-PHn!00~jL9FvIPwV)Gr^q~w}Q4sJ%(P8fw1c*SITE@mk@fy(Ft#+GMI}a@a=kP@z zzGPSra4j!`9ZR^jg%c0iy%c$mRxO>xczoVLT`*wASdz4Xs>d2bp65|V;PG?%QhfHl zEpu14J+iEWO`FWl&tlRBN*-Gy2IpN#iCu;QQch{t;s8MieeYrxygn^MZQlp>Rw2)F zBr;}((X9lHQ$nG?t^{e&l~v6Kx1R#4oLUGYv1IHBKsQwAi12VnxnX~Yf4Jue2X&MM zCJ<@hjn)9azRb2gQB4tvV{k)ENt0iL=|9a zEfC$n(9Rdr$PY7r*T<0TXkg@v>rv{rRa^{km6h`G3kA@z7+DN-)=mtWvE=D?CeC~% zjGjlXBZzUaw=U%@zQ>?qLpT)X?m|1mIhdcPbJs&W@|nNJ-+2=oTMLY}Jc)oh4fjJF zk%S=x={8p66vTO~O)w%1;aS(2rhWIV9D49xzJ2pQvEvojF?QZX_>titR)mjy6;c9z z#Z(bu1@0G!I>oo|2VXU{w5oL?siH#Q)TC6=g654Ur7 zs$7)PReMLFOrPib6*%--pS}xaUpG$D!?tB=Wvw^($NFlJP!{8e^2 zj^cvA9eigJ;%BE zxY98jLwiRwjIs6JheG=yuC)+QMC5tAW*r%2zYO!?2WPnV_%yHFw~31;EX{&5FoN!K zG|b$SlW62;lmy%sWXmgQblNOD_;GBf!?4#NFh+%@$3!w7@8cSmvV~%Ne}XO*#Yqq` zlT5$~x$(?PPCmSqu`^$W-T1xa$tY?9^FKsB1kpIZ?{Q*LHCU$@$;lmcm^gf#TJl>=jpT?;O7X#3$vL+@7!Iin*@%pD4cc38@CSFyH$8#`T*j=cV0- zb+BPHRTQ`AqZfShy6E}KWk%&fDo0={J@SyfbW03}nb(J4R4jCPv z(RLY`&&hL7-f_50@y_G3Q2uW(%mnouNKu?Ra|}>j(J!;Wo!0DF10*;+%udKpJU>Lz7fhFwHGA_gshUd=+z} z>u5Jkq%cSj(rBXupGWXp3~-br$dPNcXFUP)kOSTa$FFV0i{Pxo4JrA$afZ&kn#S&z zeu)7;7QVYj}wwP>EGPD2f@ zz{tcDYhj@sjgnT1gJ?}8sNZ8ykhC)3nn*#@S`V5YyQu>Oj130=(#tMm+tzKU6H;j~ zH*=g$Hit1es#(?V*AC)ya31d*x$`(5M1j=%LQX04_q`9lcL7x7V%9G>jCc5~h07Pn zvKA(3(rUNawRs%Gs+6;JV8>S_ZR?<}k0k?$xL$xyu+z4K{a3 z=4c2w*NOWiM+hTZ>Z5e6ci?l>=b;Cz9;2SbDTz~z^H}G@c$emQ%>!`K<#c?;Tx*8R zbx4vF&6P9G+Qa1L^(AwjL;z+{F{4l5y!fXfvz6L3uGBzw8fkhpa`|Vf%vi(U-#g2P zzIBNGOfa8};3UNp7y^~0MX{)>NfP+!g#;UEYYh(dhD;`Sn2r49tw*`xkmE>V%27g3 z#WILV@Cr^9te`f9^h_qs`hG@syo#B03o}VZ-fW@XV>Kc1DOQHT4`Y1z+W}CQ<4uke zPaZ2BKDKrc!AOc&OKv=KsbOmPEJn}#5k_{u0=1i=0h!mbP2z>v_ZPe*Kth6I#F6DW z$?P1*KKXH4fA>))j~!+V59By3obUyQO z4t?yeXiUvQ<}tPr-@{cJ;RWfC3lkVyw{7EfKl-}2*7`!HTL5c$y!7g;UpYCsF>o^Z zC~Og>8vC2`m74vf^Xa9k3l$)%nCqrS{-UqB*Df$b0vqXz3>h- zh$%Y90U%{j#DI4~?mB4R3GGX@bUO3A;Ki4-Zrykvp{M04UaJiP;Kavdv|Pi+DhVl9 zzvOEE?9cv$2OoTpwp*ZKnzUwSX$&>-0v)s@iRrrkbhpwZvj2Il$Z(3WKd&BN=AdCp z!h09=8N4U!ba?I+SFnBSj;=M^M+##}n^AG*o3d(Uv_Pp>*G=QN+pHBnbI%kXeXzyx zbRAhPND}3x1w>t`!a3;vburng226-b2x7|g-XqpB?;AX7CiuXuN04L-S8lY7xNz-q zl!nI9QEN&DM&}e`npoY<`0jtf$fhmK-uG!{j^9SAGc>)yI1myf66AsNEETVH{$TSVxI1lvrUAwINaR9%~Yk%(L*d zuhIG3C)qT0AhtJ@Ebm|w3oeWUssXG=B@gt#x{{z5#2TDBggo3$>q(7eb2iJNFZ?Z! zOiZxtnrq3|O+;$r$g^Oos%%JF3|Qrv7hdqfpLxsAzvy@V+kgH1ce_8ePbBC6)_48d zSy#R2#lNs+%Z7EQ<(m*V=nR|Q3X26Dz{qcI%YKmE8sc2kkKci$JtndITCN!T4 zHlh-X6CHyW4jeehZ~i~O$-VdA7e>44sa5R98=JCy`ySH9aEW4uZjzL6p0?&W-J`xEMFP_@axs;)>^mO-7wh+fdgDP?54-QB*4iJ-VS2i?3fj zcp3Ow))M_*T~9AsvVSAW@W=?;wr}T;-}^`SBoAOMN6@6tI=IdPuCqX%waN1qdETOv z&5?EH$+H$&*1}~A@%shxPK!L7FTeNM0=|>uvYb3$pp!YAFUW#Ac+GkFbyxD%x4nh2 zk&RfBEc)zAUk5#bYq3JoC0X1CE9ayg7~|QzWdjEfKFXKB_!UTsdXA^nZjGNcRHcHlC|h`+GJUH&Uhur04d7CV6<9&v@40So`VkIFrcpOT` zjy*g1?f>_;*s^hJg?owAv?4xc@JnfI)JdBHcSFE@1pJ4nso_05iZE*oH$B?ogZIpG znDu0m1kxSnLgp`~3|^!jw5wTk9(Bb+5yglvB!QwMlt4diL;1ZeLmWRg%g#+rHZ`Q0 z2#Cywxm4EA7=vgYXmQOrM)oi?c{YA{9G_0HkR8K|38X{fqb#n(Hh_)oiefPo#JNI8 zEUl3d?6z}h?0y-ed%qv#d@$=H8?Z-cMA2SPQsB2DxsR00eFocBI^VjDsSm!N4Tl~e zr4uGAG^!u^2sVs|$u= zPV&T7q(*>`JOL5|J1;QW9F~Iz4~`9uO?>FKTfTWZ09dQzKm5WkUUk-)XS`{Ad?emL zDO%*UaiBp4Q2Man6{S?cn5d+sz9Mk(A>%H}uFLhKwP129d;it=36Zcv5WG|J-0_i* ze3(D}-+xT*0>afu=o{L^;v%m>(imp@w%ypI5zntW_fm3GrK0bZN=#&_#*d&JKJ+M^ z_ClyK6w?tlC~FxpSZn#7=RKbdlk00hwr*#k1*mc{POO`xWzpzWVAaA0au@aWW=?^7 z@Jn9rwFv^GYkjCxDr&0Aj;-6+x_6RqeCzAXPPItgFjj-X5M!{U0c1n~J_XJIQyQ_d zS01Z5QqrReCi2qf#^HTvy%;R28BRMq|H^0a%Wr=N=bU*N#-^1JiD)GVv*finbpZg< zH%G=3#?dT>29|TqJDUd&+{NAZK1h~Z5=k&5VT!`U7MIwHBqlCUF%n2>${<`zdfR}H zi2s)xwGiWwO07q^N-UN~%+eNgsRO_!U z9~;)Z8W$PsD!m0GLQ4#{x0DZj<1h!^IBjWQHGoY$K{(0~DgfR{->9m%m%aoyYE&)I zxNCe&M$$kwWE3YMkhk72-^ppU+w9vq#Fz+a9@r8qyp6|-Vtp({iN*T_O^3j)BOTgH zbM)CTbOsC3pp#^@lQ}#cFd9nzqIhvQo6$}(T8Uw{F-B)>8*F+uqq|m?UI3u|J&FI9iYa;01%;wOZD9a5^I>AImYbFbooAolQprra@SpVGdw)Z zMHgMn$jC?pdr4WAMe5hNc71vRtwA!f#r0F|o|!Kg2rHfiv!Yha$prwhO#NQe62Q^*#oY;W~!W zzl&2F9;Xg(9L{xcd7Eplc|PxX=X<#F^5-)=G>%#muc3)Xd-a$HQ4`{A>!UN(TId5A zhC?1ccH1pJG{`@ zgu^qlY#1_}G0|Ws$|)C91x5nXp2Vq=P>CyqagtCCXly54x0}(8=PwqO=vAzEFvD8I~M-w20EYmAnV($P}VQxkYnpXO&*+o42lc8B!kvyIXYVLP!xef zaQ>#&w<}l-4SsHlg|x}|Sx<-IW=wW8;=YQ&D*WNp3mZ0V;va9i@q(Lgy5Y~in|-Q0 zQJnve{Oh0o$S?i;zkk*F=kAM6&Qt@dHNlDM@ICjvUjR_3iG|TBmj~yab#j_RmOKki z8}U8aY&T7A-2m2sJ%xYvQT?ma$!WJTKL7bI@awj6;NqOq80%o%JIXGa_epX6aZ`*vVP}0Xw{sJa;BWrBA(4;;Lmzxw!xx#=HoVRmMoJj<&Qv0@sennsIA?O09lT9W)! zsViJV(djtw)|bkALW)t3Q(-|2*B@;0 z=eHc^kz|6*d#pBMPut-ok2B-Z?$|iOt9H?Kt+OK(&fga*gONMIiwouR@{^bt94HMs zoHx|rXD;5rzBKf$l|W7eE}+>p4FRhScoTfAvS=Ph{L;7wf@XtA8>Eex473$g^87H! zC@=yNgpje|=wLAA#7eN4Cejp}8oxk+A8nA^P|Zv<1WfYaeLVCB|BcOe|1(J*qvV1r zTV1gErW4ho0}cTdG$;ox-XHx4KT4o+8t+4p1NO$Ec}@a2V{k@!XmS@jfAZ%^F1iS3 zEEbQEJXB#K+oA%g55d&+U%lam7ktkZ&j<3;0l-NffAl9G{LD+Qe$iDswoaBgM*R*C z4gh+IUaIF6nWxJG;YI+(gr7}K9cONShUuwkTJ1LNb~~WDRfAr<2}a+TP%5|920TKH zKE3yNpW~dP)9EljKgYp?hq&>^8~E$L{s@N-9gYM>+Epr!Be$5OL1TD`XIykKNiqhS zRG>YhrPyTvCl%v3JxJvNj<_I0^sdDnw|#@DqXz@dPZb+MfT6M(Rm;5R>Z@PEb=Q3# zXPj{+W8>ot4G&>$*x-e&2{RreV zA#jKpph-wf!jNguOj3-oxYUpgH*h`=y=rMxL08F`AZs1~s1B;G_(k{`?a#9nKa~cd z8*f79=5lh05`BM|}>v%$>zzFeFJD&NTPXu-K--`JkK^ zDs#SKhAaBRUBJr0YbZc74AzD6zlsAaxmb*b_Rk|Z{K3}_^Q{?}HBEApfKM!HMGSVp5t95RZsLmKBQ#4d%MB}w?ko#bptQd?h+Bb@d z!xxwg^@t|8SV2mhM>{QApZo~3fAy!VYtNC0CHDa=m^g`5H&=2bKo}bg7bKyFgkvex zYj@ibLp$+^_athgCV@w-;h=56^R8y=kG~neejVO`CC8Br^RnzW|`!|?epe3s9D;WLbmjWawvLZi_nNfMI8mQlV}MZGJ> z-HJy&05QgtuNxg1X2bf8oN>lJF1zeGy!55lvSr)mAk1M*6%0LQVQSE5ufSK;gt9jZ z4GRsSVG>e5R1)%_5=c^dNP2p!PFkBGF7Cbeg}_Omr}54sNswywnt@4!RBT+<72%|; z`E=xxwvz6ww4PyU54Q9FXYb9UEWfJz-p@Yg_q(^|>UoybLIaYzB_T0M2nhkkX0qY= z*&*aPHe_((m*FL5IazsmiDP0s<*oPDd+QM!8{6@K9fK1ONdRL9Gsu|1LV!RZf##N4 z>Pg*QT~+tq-|y`G{y671+*`M*t6C+YEL3YR&V8tMhFc3} z^}ta*Q9w;LNO1Jp2tdVMQuS=xxr;q#_wmG$N26tF8aY%AcrUewS@qt}o;}OyGiO#_ z(<(yQY6*u7O9iKQ?QoR(XZ-T}-^a~2zk(lm$2)n`o8H2%T|4m!A*m3H3YBOF(xF72 zjru&S{N1+DhxgUN8eg|e!{2I#^Fq*uI7pfxP}A1+aKkIGWp^vpGImn8A_A6F8m;D* zXnF&#rOzto{T%Dfn4V5%W#f4@Rt*K zR%ws8id4gYDIf)0CWw+08(mB!t8qIUb_JEB-ncqnVyK@Lb8kt3pQerD1Wu`O*Ar*y z`zeZO8B-^c(V5UEa~>PEpi0%N4Sk+fnlo*C^AwC%%)YmXvjfR^a2Xyrsa&)jI%#4d zHV-4qy`8;P?L2eUxTT|FO+@6rX_!=MeJ-g3S~A0me5a@@5{@*U5bITKtMVOkJ%Wr+)S9tiL z`|(*dQ0NkLZO!3C+fK9{a8l);Muf)c=eMC%sWy5dxM@hjJgFZ%zhx^gyz($cH^HfK za@I+s0WgN$g0MdKKB?QOf=I^2mt4lenFY=*EJWzr5*f&}wpDGeUt_~sogL1oZBJL* zb1O&JD$!$)&pajtpZ}}RaNjrYInQLisk4^SApgABb z`5Nu#8WIqZ=-t=OILzsYU~PL$Q_g!I5NMm7x}ocp(TuigBN1&aBd4*@^+tpGO5*G| zvm9GB=~&4{&=zU4PJxmne4PvqUE?vMxZ{2@eoAV*=)ULv06*(L)x<8F~Kgx zafS{@PA@aqF-?c&-wOfJhI}Y3)||KK$`|FAJc_qLt z^Yb4$aNq#5b2D|dyIx_L6)I^~iC_p?ILf<8Wpn~a~Z)wnJKf|=6K;%hY+1e<9*sX zh{jjcYX+HB!R``VK&(U8Z{f1buc0&9jqsW)fIdN!r?G z0l*{H1@lQwFaGrOnWy;BhklE9|J#4bSML5AWf8|HEg8Z<)o-kpZ~L)1ZGiPA5$n=B z*ia~LYay%@{Tct`uKIzp4zZA z&gUuyTO5~EgWiC}`yQZ^9NsLcYLZ%|&)(O_9!zeOy(5oOoIMMwh^BGXgbvkaV9A8& zz<~o~oz9;=&jGl=uUl`u)utz>nCy01q7$~^z0)CLq%&*J-44n;q-u#_^A=gN{!C!=7%?3OKDeEH=_Hi1cr z6GvI|4dOSBO_LV8wl)W8 zz86!*E7gs96I4bh6|t*w4vTQ^fBWzsQw)@!``xIAnv+dxKdbZ zEOK~3S{$;rhezsdcx#j-SU5{K_9S^~X*g?hyhahbF*{+y)357AVPeZ;W^tMD#N*_b zy)a_E=4x?NtwvxCGABqb+#Ts=k_?cfm3CkZ7Pk zRpYat`7FQuzW37aFC&tp8nwwIyp*z5^EENAf|(?-x6|BGYcml?eJr5$xR=(ggE}Lw zl!7fMC}?I3LZ98+_jBD9FJsHp9*~UEIR>h69PK=n|F~du{sbX0-7`mUN)e3h+YWHu zH7{p&+crv!LJJ6G!?-rrQci2Lmz(e7!RPCT$S`6Oy$~W9D>A98!@4pj%2F@U@n?Vf zQGWe5ewBrV1)LMSb1g1~ToCecp~=7~nepjVnxlM(HIp`b=C|`|hy5m%r<*2r z{MvtbACElx5KeroEb3cGEcFASJ*3f%ox= zPkubPB@*w|Cc6TzC!mc6?TtLN7O}Ch20o)dYyWxU0Yf%5m|Qq=vN_1Z`L6Bx-t+oC z$G9ZG)`o*yKMi6m7e*jU4t%nq>-i zO&foYDxjS@u&!|a+s;-_9cA1aD7pAp*rqn8Dtr58q*88ZsSjFtE*~e*S)^{9} z^ErFAU&4;reRQ)e1m`Jyz!>1vVP#Yf(`wx(<-u|0A;ao=vaW;0EG8q)gbW{1iyVR~ zS(xCmy@%O3znhcip5Wy1~b41JbGsH!S0_0tbTZquG? zJuQ{>tntk=NosZerJd@;b#7_;P!e-K*zk278u1$gp^y8$r{AVY>Znc#&a*UV`q);% z?IL4|!%yeht%X3Y>Y`fdZX|N676Z)6C=8Z#HA3<-knPC$ho zsK!ICECWlubDTZXxq4Zlv>V|@# z$c7WB(ci6;|I{YS97%mLwFO!O)0KyajTsw$Ht(Y)d-002?{S0>qFGYyF&2w0HLZk@p|sph200+z?zUT5dSz;(N=J6{hgCIbw1q{yp^@OXq)>ZD-`Ee?}u;3y^>@Z z94BWKr_t%IR#gzI&#cw1(>Nq?wdCdLoCZ{GjboC2opKk%I^XuB{uG6wC*}8RxJo8C# zqGhmN1!OrtTeZr_LI`~Ei+A$q!w+Fv#IZ7sTK`U>(u~hKyyS-4=w>@uT2iu1Q0}8^l0wP$ui(=K5-Flw@_^F=MEMB(msiVNG&rC?7xDiPMzVz z@uN5?L6YK_xoDVE4!HmR`&nLIVrp`tZUsGksCRXxzGpkguCGY3bq3*$6h5+!cF{^v ztJQy3$Nv4Q<9%aZ+d20%r#$R}*T8B&i^N}7!@Knaeo(|a<|iE;D_M$?`mCIKiN%5G zv$JlTcvKXRl1ag&PxW?7sgw<(TTeIWk4HD+a5XqY6*0k2PQ-*jqkjV-S|ICr1NM_l0{{!zFPdxDigF!JY8#{F1SDFjY z1T4J%fOeq=gKhY^>=^^ZR_=RsE}8yhOl{o;dDeKe+Aww`Y0Ao^a+Y87*@)6kkbF-h1DD1W|%n z67fk=w+T&{obC`PQD>AEl8k6F-LnMWTg7OvrUQkRA8gHLtq(f2ngvgC0uu$NK7H@w zXG_}q@#$i6AnL0r`S@S)2~lXnP9s4CSv9aU2V#3%($cd@WZXj1O?R!&IdXW9fiZ0; z6PEhl#?M||JE_sNq70}hr4~#~bdls2ULUkc@k>=%T0BQl6qqF+d0NvK^>uLTT=LaJ zN8Y<*SR5q)A==WWo}{MsPEZn|DsFU51}n8S=z1PFaA`EMJ}?ZVj3biHY8mL5R5dN4 z&8g5Dk*f10CaiM5hhH;2pL31j&QQ`IBdsDg_PQX=KA`2X(f)b0t@8vkl~7L^NkUr8S(98>JR4C;EAV1C4Q$PXc`rBvAHZu8tZ~)zR`(?&ahrG@ zMz8fsVYB#f=`l1JlmNdV@u8JPZ_C;^+7ZY1QWBDpk;CS;lFxM!JQ_M^-buwuJfng$ z)Wu?|uD&gf8gD2gsN2a}djY7cCYls9&MMVwR~@A~`rb3KcR%=Sh!`$tQo(f1R6uG6 zO;1hJKiB7VuX~e!J^@(c>mU5YPi2oi_V@>dsIb)O=4k{}T9C|nT^?4nbK(e@aq{HJ zcxbl{r0VvWfMiOLB2}{0>Q9G3MN>Do=EzYqi@OF{)kZVTVU4ljfWAhXYK;tjwZ3cP zWgrc?an##H5i!H>T3Hlq?jKWm)qM%r>jvH#`?T47Jy3QG)f- zVHHBHCqY6e9Lb7wm6sSh9*8B)2pd|bWr#A>8q%=jP{KFt*tcoD*maDPu9vG2l^Uhi zm#q@OO25ImDkz8HTB~)P>T+t8G0I96RI0IBjXmz5RrTvA%h2i?y1H#u1@-e^x|K?K zmF|bsXF-Igr!&|+spOQ13piJ~6ndm`@|3DbiD!r-FwXaHwN+|TRiM>6(6mJ)YSC-6 zUo+>Tq_39jpU;`kb26d?FsZp{wU$YHuW1?=)cSL}6nNwPX(#ut8RM=fC7izo!d2SOOc`8ziZ{7UQoXu7tR?2gw757qbB>SD6G zh8|o}dQAdQP7UWXicZGt!Hdx>C*T?rI%`ChjO2$A-RAJ#vAn#*J@Z}T(1bi4Ysw2>ZYn4&kElc?LGEI8?$yVBw}cvd zYrh7obqUO;_wH(R3ItJyxA?Q*V^HYleA$KK;Pj0Q=Dnzp}P(nf?`X#g=Z4$-dyIt&>>sk8JSLrM*kvU6a z**kJI(db-qtRcVQmC8)OIbGSgk z0NH&p`L3M=19QH)Vb%X6q$}v_J=y7W==TR4K71v!bF%N#S3{E$;GL@hw+4MkoPoLulvN<> z^}okqYiJ#TuwCo<8Vpn{R4{lpW~1%3mLxCa&_Ln#%yJQI1B!a9{%#uS6v>hhQcU1PgnqwAf6${W2Lvs_ z##lzn2s$Md`BiIMS}Oc){dW|OL=$a!n-p`Qfe zBurH)x=Q223tiyQ-Whg3vcM5782HGC36e+XJ!!*R;`G$Me=>&CA>%sIN@jwQB@8sg zvyeQBhLNm~C5q8x;!q82u_dn9y^o0i=7ll^X$K&Q|73!ar=(mWN}&=}KV1atf+$|4 zMq}$1%@7}}7WT)dB&i}B8=71OE0iEY=HB9by}Ar_jf}Fp@*0-sw=&;fLcAemmRd`7 zx!<6KRzhv_?9(+`M@87a)ycf6O0X=s6uCNqbC?9mt|wf6Ic{#65b^!UF-t{&Yb9}( zv|BKko}QsB2TV^-arfPKeGa(x`2=9h*Nbkv@o-h?Ig#d&OxCE*Mq2=FvWAWcMvd81 zzu&J9vx-q#_mL}@OB!g`YCgg0BQYBz;9VG`ety(od|+RzB5(ihsF2WwtI&;q{#D+2 z4GBtheyjy6*9qA;MB?cx(6xLb#AjlAV(3zly6-F&Cj&||GT@RKcLuy&Xb0xTlB?(bOS(#Np5T&=w3TF5;w|!pOcloxFWxi9C0!#^p_CS@L91Fk@ouaM?3hDcb(%(f z6>p9p)tTAsSsNLfwB*|zodz|@tH;DbG&y++(Lber1((t*pHQF<-Q5S7yyhwvPaa{q zoJ0Zy=_3*l$zm*MT_3NNvSIqatYYdV;}jo5-KG#g4Qr(Mw@+ zIuaMFWGEFYDq52jEom)a!j}1YiekXYQzv=#t6!!6-!DAh0$B0&!+-xLcJJA-@6T2m6J21XYc`yqsK%i4`On_Tdw%9UeC$s?5}|*eG6SJG zKod-xYSlC_HVXO2wddNRA+3**WjVk1!T-n??))p>_2WOzzWsY6^qMM-+M0HZy4*9V z7`PDxpt@hAan?s4J;Klb{4em!zw(PrOiV@2Lsc=h9pln#RG+gcF0C=rNr_^cy%Ya! z#SKw>Cj7>4{5qfb#K(Ehdw!k+`}fo7#$YFjcM%iG)pAZ7i`qzS&n(FT+Y($6E76V$ zw_H5Q*N-o7&mdsZMK!hx;)t+IbuQtN*{y7U<*PXIQ#dWiodGbToGJDO72tKc^jLjOwfcR&Zu8r0LcGJ_- zc<(v4u)u-+JFolhx4!*{KK6&d``h2{Sn-@90bYLjWw%?<%S@|YU+dthJ-KBA{pjZK zQq>v(7!|B(=i7n|^@fI-^Z#RfjjKA>!xdObV%)sX+`i^*Kltdf7ok~EMw;cV`?MzK zPc}Rcv^Fwfs0I)tlyKLV?&6>Si+Ay{Kl?EGgii-V?Ejf~a5?6>;JT3I;B&;~$wJy= z&c#O}6h$_Bn*OjHql=kO{_BC#3f}vR|2O~kr{B%7Cy&=vRtPOImuFy3d$nt`LRaHF z`=M#S8E4L%;otqcpX0ZF>o@66OeOMUL9miwih2R>!6zwhk?Kf}4>QWx-H!7Z5)-mu zfs#Oxo+ns9ljlaE1AGR5^v8e5FZ{yKv9!2YTX4t8pj1elcgc)g2aQcaClbkKW|YY< z-c0C-uy4Y1>*ZUSE6a4tf|74c16YHh4U8%77vqz;x@ZK@Tu{5?jA*CJ8x zgdl=?pg7Gfdple*laW^w4~fWDX@0~+LcvAZ@d|_s)O?3sqy#LH_9~qe2_x{n3_nIgp!m3>MVm=0jrY~L zjDVq?z_~3`?E3CEV^i}u*NFv*BThiHxJ@f420*vl#W_c>-$$I|)vtbT2m(H55P-M+ z$Uk&*Gqcxw?tY&nj&T8Xg*nG(T*$Vy_ zddP1~_3grwfQ0ME>)sk=TJSngdVced>xMS6TufroySGj`5TK`d@M9m;Q>Z zlaqC(xa^8c*s^syQ&TfI$-reTABal9usPW4)n?82riM`_hP+aiCH?*)XV0GC@y8#< z=X3n$Kl~7f4jtz2|JaYwoya2(Vom(Z@l1&rZ3JD=G|v`7$#4GFf8dwi_wSjUnk5t^ zQ}gq@VBh6TOikl`2a`O30oF_bR8@VG!N)#t+RqI_S0O^KX8A8KFLCnZQBIyXhKTY0 z_rI4LUvwjX=SSZe|3wgd7M(j0S)~SYW7`0dk`rpCc~udUrW%YbD6iN%!I5KK{`=80 zSiY5_3`iyoWSpR48*|6jYUzkMGPTBFOyZ0`1$c5w?+89e$}?OwZQOq89_AngDj7@Q zGm0d^>*Gje0B;jy8W|JE%03U53w&eoalX0m04IB=d1~nli{*d;iW7%3n39Ywok@1h zZsP@8_HuaYVlL@yV+S*c6N0(4hYKjf zW|@MJ0ewW2%o|D{amfN$0GAQO#YCr(PhGRUXn4G7ZCoar#l%8^vLw%Qj^`!wuf3hl zY%4)OzAAM^IMqc&hp^5?!y#* z`aSRAWiNXfuejx=S^~K-LfTwqzzYrdPxzHfe$4}S3Xn3$YKH84Fh!=Xdh(dkYQ zG|j|UecuX39a^hxzj~`%dA0Rw1^y(B4WDJq%oJ>y--?$mCypOyYHF4b{iomMdtU!q zF1h5ADC1g7byrg;j2&5B`N5+_%1J;JiyB@zL6KtUd49J=>|{kUDVUJ5_}{Yx}?z%`4x(|UYwx7;rCs} zj@SPXPd@SU@Z>qB=#oQpU(x_hQ`;gUJk{s4x+=F-aFr1dz+5tOisEG|@jm$s7Cn^L z-pHQYznjpVN?1c`B~|yrssZ)nT*z?J(dl-XnVE?e%^|R5>$b~py7?9E6CeG<=Meya z+itr}pL*)4x>w)nbfX*8Cdf}R7RGO}Z^c@KmUvj}d60(xQG)-t_qx7`fM*w>XnOqP zs@RcAnzi$Q4TP!{Euc8x99vM2J^mPf@+Ti@U{`^1HwDo4ov{7vo$$GF9;HTTg4s z&^kw17JT*YySew?dsEPMTzTcybh?w2g;54aFa;}G$Z0F-ZjS_-fn+0}-BtkQMKOqE zLYrXc_WdlJU7##_eDRBS^1uTRaOuH|hlG^m0;FZ@neSBLIZFz5!6*fS^LP{XX7GK7 zcd_)9qkLnjkMnb>#igyq&`8M0I#4$w8qq}YoP;QNBj6cmAg5$&@g#43;Z|NWH^Edz zT(l5Hby7m*tQv=eU`b$1W9#5aH{feakMoJg?&LEkzRD@LKp}>k%&?GxT#Jw!w2ZSA zE(Kq4EV%(Ee4huG?&UAO{4lTBaW!wc^d=5Z?qzG~alvCQw*D#{M9ei}L00w91$EPO zue+JuZ+|C`|Mo8tPM%?EkkNG=&@7(SQYKzSrKH*zk_}(aRi;){z-dkHR1<=aqZ_BK zpnv%x_Pq5S*xUgm>tG>@BVP`0iZgp$1g~nXfl}W&PNu!c<%n{S9$c& z$GPN^OBj`>eU4&Igb?`Tr$0%*j9wD+b6c36nWfhoPz(&`JCwx$q*&FJuwDVFk87|l}Qr5>OE+-G^!ZMTwT5$blSZ@<3vULER{gto;hFnMH% zMs+?fjsdZXo)F{EOwQY`-@||W+6nGGw@e{Z1OixwvkY?sECuB1WwfTat$bgl_vu>s zRL!R`N?+i+!c6ZJZ@FqaueoTBZA$EgJ71IUOlao*Eltw_65@#K!|oh^cIsTl zk>WI7p&KRZt~?;nRHBLY`!b79jXEsSw)?i&>v@yY{mCe|j6)zN;v+2~flNG$wAEW-;>m zd1RD7YLze(WZvUE6h+C*^emGTlfMjH{d@ud96WgNrizg&BW&P$o^PEHZmhmE^##-P zfVHc7FT8<6?rC&!&E{e6?`4LxvXtR>&CwCQBi8LpHFWmV#H0ddzk_@-pD*I{mYvEh)ylQe2l|(`_;%aqq zwtYsG!&5nb!8zUQKOwp;WZFy{%0XiGvoOv+gNh@h6^5EdzUB3tD5j(&oVJoZ@@U4h}~ zd&eM2{32yaP3q=MeQwq6pm88EzG)})G7t+maU3a*^S*EXSDxxG^2U8Pu`f)KIZ1{^ zv;uYPtw*AuCZ@eZCbrUj@f(?0EI9jTAH**&BZVP8$E-+dg-QI!g?NvhtK0Cddgp11 zAt`xBAu26V>!Ok;tplZWaAwC|cD?m&bgsD(o$S$1WXA*!*FFj}#5l^&7G{ z=~2^K2t)|UA~P`P5Ac#v2E}J_cG$NAMa`CNA36=Acs%PqE;{F0R=PGix~9Wvsk!=4 zX^U)ZT7hnU7{RFIjwPw>Ri;HlJ+$i2zG1zd4}Dqfn$SnQBa~&-cu=J*2d#E*MGOoG zIo{j0P%KAD;2= zN<`v_Sj7xC4XE|eP}b793kwS@EG*WdBF%xjlJf9eK%>my+`=M{JaPnQ8D0!8IlbjR zMWK<*ScZh0tarjDwC<8??Fkqi7mdk(QjScw;*m!lqAWwLEGmhI5d-Ljt(AH$w)LIT zJ}rIhvFD|6?X+X-b^E#Fk(2!CV@Eii&(PONI&{%8`4zaB6c|RSB|f2$VuFi;!k7j; zl4k0KG8>?BoEK)xy#1Psxng#ToeEi|l$9t=ihwRj4_Vy3SP(oy-x&|sDSrR{kMpsU zUuMY{m@498;13dofiktms(du%8`WJ;4B8pMG1W9kxy~1T;lDQyp}!11RWfu zH*$5gz?Z4weI(dv<>`=hk?Ec6xcvthY~Ro0fAC%=j~roYd5VtB;na~OLa>@gq|zWD zO=-B=05Lsl{2YaWb~UFMjc>-tgKxKlzdW{vDkF{LLSI*Z(5ot{)8;;{u0sZhc9> z2&AZH%+Jp;H8sOvu#|G>kOWz(%r>xa_AEPh2E23$Wgzp>^SSL5J03D0&l+aM*kXbc zDN?&3!_En|$zj`7JGf-;ET4MtC|^Ib#Mv-G>1J@`2%ZoGoX1NRvO}doY!4?IahTvCd%kg8Z3&aIR$l^5YRaFAR2rA4#$!O9=6l`;e&t9 zN1pl;gWS;I6RA$gDoI^)I4jav>-o2vOA`vxGDTByh#F_JCH~73cQE58_-lJ_Wrube z5~wB>LJ=}+D-9YU&Em_%R`M6Unu`xibLyjiz^TuFj_HN7OqCN*I5Iq<4sj)BWnG=C zfOkG7H@=iJh1TK?g}avLWK0uTdO}2Tfy! z)Xu7^N*PM>yfbs%;X@bS`N@xbXCnaDTz$24I-OeQA8j_)sQ&v#E1atOS2L!jrnvd$ zm+`4jeX{P`Voil^YMecDf>S4-WZSj_crrpLqMdCW{Hq?C4Q0R5;;`4Rtqs!M78j}# zgDQhWLT#i`w<(eA~T+3G2R~skHBP+=Gm5O5< zk%=0kKD~>;lTSWDsL+-KVd4z29Ot`CPfZioNIV98?fT{}5XN3@y)?n0*Xu=Jb)Y}! zlXZ(Ecbav-@-CqIJw9@$IfzUF<_xX zX&uZu1Tun>tb^m|oQUF05#M8WqR)-{r+E2}9bA`9F>jHHZ5}u9CHKy)5D+QW2e8&Kol(_8davUHju2zZA9rWeXFfA$+c_$8d=pyK9mUQm%bnq zVbPWR!O>51aB2^?Y`K~_O^`fIP&Ey8t59%JSjY;*8QxDJdv0R;_wJ!{%?&L7`G+}u z?=iX=O!Nynnp$z@@hKTMgpyFVU{wTjp1uYKUg>v~!A0BI^19bEb?A0v{smapB@ifG zhVvdv(#7lAcWJ%4RQ*SSucnC~t-TL!yzvJ6_3z{szz_fEyWITz{H0lzMOZG)0aq6` zgmU#h_PFalT4_4!@xM;D!>zZyl23p7)2L>Nft+5?G7x2X=`@cY`8uKOv3>hqvQD>t z{YV~6<~4~>xMC1XhUi|kZEn>m(lp=fY$Ac0A@#hA#EkVLL2Wqs*_?wuSP-iSJFA_q5cNyO2_#`-D*t1639Oa*^7NEzA5~cmC zQOft+xg~ry3E~Kgs-u&uDR+gCgz1}iqSs+faVC>m_G0tT*A7gXA zn)TC01Dts%Ks*GOf|>=KL~g)N@0gyQ;_BIH&Rn8A^3*bqJav{Mi|2T9pe*3%Ypndc z5}0%_=Y@UKlU%WVD_3rvW-dTCnGlIV@FW5oWXZj*qVcG+#2ASFC#8e4F7UCFU*@C7 zzsPCn;jJ6B0y2ZLz-tzD`jh={5Vvy8wHR-@;<_k?k3Irb8Y_+vj7%~XY?%+-_hELt zWR@G;KDS9;ifkh$(oW_RDj!h>Jn*j*nZd+c6j&-KWb zGxBl*7rHncDn{@Y#i9(<6_i<@!L-uba{zzIYq5LNqwZuQ1T0NKu%&btVPJ>zj?8Cqgp8q~MAx4>B{;O`p4g zB4veZWF(Y1Wl-Kql3C_#|{o% zdssgF``@7mz@bBjEX%W&#(DgYYCIl_vK((gxsd}&gb)Im&w25UH}c|_+{lMN^3htc zOeATMn+MBL2?zz}7Ei(Asha#U{?%9Mi;qGBtr0`-GqTPMTes|D_nwRBK&+dSTAT-6)Y=jCf2vUL1ukbL!M_P91-oGpA2b z7X6rvnbo@2HJ_m^@y$4eL9M%^BE!~AVi_(W5hh79+__jCx(*s(c7B3eZh0wL?(jbK zO2-nFssI2W07*naRBIVk9jf4;ZUW$(5JEgWuf6tK%23ehc#3ksnX@OEot}&D%Vo{A zi|Q(v3SQi>#cg#2q_KwP&(ROSq^)jXC=vc2^q0x<4w$ih$5ys%*_v4A@i3PZ%#0zq zfp2T@Z*Pe$Teh%o|9+l$;wTkw{oLYNW@l!=XA%B)(rBkw6{S_me#5B15b3W@`ZS5L zxVmj+IQq*=6vZG`VZnhEy!@sc$a9ybeyqj6*qm0tP;<@2fLsyoG$jR^Y?3P};xeTl z-e3aQR*8=}2hP=ZKvUH8k==m#N(rz^mOT|VnV7~a?qdbZo4|1v`S_!EaD5m`P1Wf`xH??QJDx?7Qa z3ruWjyd(rv3WASl8&;v06#>=Pqp0gy7OuMP$y1~ZWi&BzX?)ZP^K=f+c07;%*=Btrs1yVN+Mb7*WT(T;Pe`8IGTLkUe`|z}ERo zqqMBc3E>=h9xYTMA8UWRnn%HU&$P%mk0hTcp5n0pS`IjK?j(;NeSkAhJzif^5lP2P zNu}XGT+*&WifS?XUE9u9A{9woh)9G*-EFmydVLO&2?qTI{_fxTyWIN9S0o6LI&j3K zLDn^qu^$;OO-hfIw%W8*`^59#fNLQ_bw8F`JQ=WBq6fZtXTeIxkcMyU5$Xf-^`dV*haiXmjtyXG17ID!bQ&pLnnIQ!G5OCFZWCE~v@7_0NSr+>v zNw2yZ!va_9_qXBQ4O#FyY356l>)4B5{4)N}pZ{5Y>fP^QX>l2!b>r9-3NokzZo?F{ zR*%s}ARbw>7uq(zX^3!w6Gej(tl-Fz`#FC6I0p}2#r)PCh-DOg!)F=Pmc%v&s(u=M zVAIB3P7|!HOB_9VACDgSMwBY8pl$)PatO|_RX?vEn{14wA=LT;nyS8d0LDw+A%v3G zz40ad=->O>WZ5)9h0Mob(-b;VSB};e;<%tB0D@ZLjVPC0b{VgI?Q8h8U;S-d-X+U2 z%0b}N@+tDX6Az8V&vZy41KLWW=&JW184EdTN3}>2DhUEvH>1CJj@Nz9?aa^3M*?C^ zM73ui@WW>G5mW^yIj?`ioB7ax{sT^)I*B84Tb7r5^m=jf#GE#Jtu^^$Hhwn1#-dA1sK?W8uD=7;2-tT(@S6p#f3`{NwgW-|^?IvHn)V{2FFRsKirZJgCC_NcpELHp6ffwZ~PA#NIC1)MVM-ttMlaqs6iar|LSi!=%(H7kAev6|E0`dcG{ zswA7$f}%XbH}3r+k3RZ!&=S!I4N4-kQCDR$)LIeo&BOVX&RZ3)VB}Ffl@o{10n1P= z(cnQRQ47p%8}QG5;$N|E?+ftKjYOeTX$&PFm1e-xKmzK4jGDnL%+JsAPyWe2X6OES zH0v>temo?^D9S!%C@6}8FeoVd1Iob?_(f;#*vift`qbLWIgC0e( z#GqWFDEow zD87~DJ_ad5N{ThfKu0NP4Iz&5DMQYbYK%BlCaY%E`VmFE65Comp;WFuyqCZAw|Nm*T;#{@!? zX<4RK3n6PzHcN-PG^Rn-c^C*hQXJ>5lMfLb^fFIy4iQD9BqJoKKDt;o$ZLokl@Y|z z#%!V*38*HRQt_n%YFXUpVhIHaI4fDuMZWyxgY?kIGVpO7ra_=O0jLG2oTjrQp3Yu{ zoM@CJsW=evIPW17f)AKCBooL%eTik7TnA%2!3fb9(K4Lo@!WIKv%w|dq>Y@n4N)@w zuNV{zk{x|Sx2wcJ*}Hdd6=rR@^zryz0v=9!+F;`ZBb;mMPaarZr6Pwf1xrSj)u02D>Mj@Ynn zM21#s=%3aYUCh)Qdr~LhoN?mR32?&f+Lo~CPKvr#Kw^vXZNiDTQg?c93XE4lZZ_wexj4`IGUd{Qe* zBuc1s8m$`|?K4dxI^>27BKl7eWyhIHN=RBk&Zgnk-RX)Giu*d5vdtYnW-PFRU zl`oT>aMkwkY5z#8PhWWyB>8Ap3tq+ds>xEiQlN{?IBB%+b(9y9sB8iQ3jX}~SNYVb zd+B+lOnw$IY0%gRNm$}zIPp-S0WNALx+-ByBM7c;c*+K; z=QgxF7MJ>b?Hl(ZK8u1tEwn4ov#m>oJMzH2cYpCaDgpTGKlCF%e9?jZ@5r;P+15$@ zECj`6(LL&-{rmCGnm{H}Gi@a?gCqPpJSHSqy>3(SonRM3G_tE-_VSlAH9y5C|NN7f zkK=t+fb*_0d1(_Ao9C(zg`tdHM?-(jZ*Y|)u|$9HYTV4x7B^DPo;?%Yqh@C#Lp&|w zND%V1QdbOC)N|)ml~UQG*5A7pGE(^ipt!WLjvalNqmSL6$|_fr=^B_n)Z7S{+}o%& zNzzBJgfYe)kIuQ)VNhKYjeD2K3Xgi;LKrOZy6?S#pZ@88!>exkE;5_O=e~y8tyLe% z3Kg!6P64o)Y$5j~92 zUyv0KVR$DEzs8VS$ckT)5%Q_8_ed$i8Cl{Zk9>}=+leTW<80_Xnn-%2-7nHYG^82j zT~{UCv_6~nqjh2oXw2y^KE_x#fbQ>tOI$oVRv%t6Re*i(qvn=vo(pls1 zV#bI6^3#8M=XVqb;IhjOYNy*-p{rkMY=^R>UkoU;ti&**`%|UnCAQ&nzh0E$$UN-c zx`%)A&VR(s*T0na|MvU&+!sI3V~-t!9t_GxKf2D?Qj$^`l2ifRr7X8HHfc2LEg8eb z+R(X3>@f{U7A1+*jLer1LL~W!@bLZLWMX2Dxw&1K6$~RvvP$=DrA4fh7GuBmRB)gj z4CU;Zqdf4?J%|+bqK|>95v~zBWRgc{)fWUQlYWsUjQ|ovNFpOOWV#CGCCz9{O_YKx z69!=sx`Isfc-alt^Xl7g<8Qv@om{l*QYM+eGN1OQ))iYbF(Mla^6L-^s)%UuUJBkj zCYj`#1J`iz-}&eK!0Z1ypZ?1~=aI)AV5!%mC4(Ux&LZgP1?P<| zvs*ZH<+Z%x#V=#$_U&}?IXW_#y17c@Rj`o*NjE@XV=R|t_173P@c|Uh@UFx{!E8Rw zl{>HHU;o3O<%iz#xB2vE|2s#IJx;GsL@ShS7};uCY_dXfyCMfyujia2%QEsjXKrqm z-MjX2{WaIIbNddaCMKBB39RD?&SF0|RhOR5h`7-BR^tDdU$){F1%b1@K1UZ$F>u9s zTV^sYgBj%^wf@Sj<5D>p-WQtUc4^9)a*-4L)7Z?;SOks?Q#BRe$a=H!tm`4d_8Ppg zW}I(W=x9A!8*7@#pPe zdmrH8haTo@-@1p#jy}PulTR_|mr0SZa;{4Gxr<|IS(ZiSDH%?UASL~>WN~SMg~3^l zojl4T-*_UqeF2kE$U;&@hzMmVc<+-XZX82=^ucd&?e()Dc}jX*GqPgiDL74U*qV6X zhB_sVtBEP9J)SuFFpeVeBP4-dNqD0o{y3%2xmxpPb{|}{{UWBP=9tK5$g?hzWi=nK z41uC3Y6;t3uNNz`s{P>NXPuszV*9pjTy^;&ZhGlUxcb_Iyx`Kyn4Q{#mX6@HLN7Oo z$hNjMXf=;+Rx!~H4Tgx4bzm-^=h|)8bNK%!@6F>ay{aPyR2`P+_g^toUJe8Y-0(itzJm0lN4~#$g|%@QusS2!m?N# zpFfLi45&~u#nq9DJ9P`rCWBSKtqlC<{4T!HQeLa$^NYk3Ncz-uy9q{GV>Y zt)Kg>BI}M~)hLnmN^sU;aqa|8op=OWcI<~(G@&2mfsV@I@W^Y(+XQSfTsVIMXHOsX z60^n&RXD%-ST)EKhhzkJ(TkstpZ>WY#dTL)kFm-OYRNE+F`%RxCj|h2Y!-Xy@Mwt? zvvSFmv8)ABW58r!oY8k@2#$cP<_Uu858A$I`|^Y6^l#D)xQyXBCIrafk_-UD3d1>q z;bCt|%vQbSnCl$ayP&b1 z%)uNStRb9UIEMxSm3W_nPKM`vbP>DihZofi1?ZF*44Tvx5kB&Yf6Ro%#bqRkK~`_% ztx(@?A!bZYPGSH4{TF=|U9tq=^2;yB=;&yaM^Xz3ME40b3iX>?X5wAN~!@gt78!=sPZs|-2_}>v2Fh@T>n$g z#E<-kSK@C!{4TuuSKbIRiSI)>m6{~g5NGeCb>i{IF}-ycjHyJ8`u5_FOBSIN>~p0} zMUY|f*s(`EE83GJDL~C>L<^j?_?aJnDSr9Cyaqd_4=CH;kTPsFI(fx5PfAKmlcqya ztu2rmqv%q_z=?Q%hj^y9&-i_tfXfb?(!RGVy%yd3+0E-D%s}T>r%KFpl7gUORbZ=f zw$`I6?DBbXF>Q)=;eR%{-brruL`Drm$Ru#0YhFMwY@&}jbYWaW?oc5%oDvP&}n#rd|xfIsuwN8k&a|D5L-V8=F49}-o zje8=Oz{eNstABKur1iWLEWx7TaVPeZR)f5M*T=600%GyVbOq($P!$V;)U%2cS#r2g zUqA!SllL@9gJ?m}3+F9sTlEU~gH-hW_x|&dbBLbj);Y}2&m%DjNHUc(4(E)2-HC|_ z?A);{`*)K7JpTCc&9k%D=QpZlqcf9NgmYM4srxF{t4jM5FjU+99EQc;G4O75$keLT zmm!h>nOGlS3^L9@i6C*NuYRcb#T;Ai;+tcn%3eZ*w3=c^Z8u)=AAbhNA3lS({mCD~ zI)Zhqi{2+E3=2mI=9ZSwXf(j4(p1@NMJO%CCK4wYS{Jk)RvZm|oCVIEKIa2JDAwN|TTb^(f_#jlG_g{pXd%p)) zSX*I@C(etxxagm(+6hk8y1 zgw5Ng@e@D!O6=UV2iB_YJ}e+syf$~3bp{$)qu>LNb{M%tv9N4pPznx)D=Qh4*5Gvx zNN3Ll4kl3}p542)w%va*Lfrl!YO*|5p{uXNP2c)rIA>uS(Lr2i@Lj5vr)_u*gXV?Pycr~3mNLXuvgd4x!}s zb!KK}xTtE^F0<>$frPNMTt}nsrDz=wbjWs2&@wpAV4(*Si+H(5cttJ)Yji9=&Wm<< zsJ~>nO@z+XdWA0^)SR%I;2^<`H$E%g3daVP0c*7K0~&zTebDuaV1lMk5fj%wzftbB(V^-{=ibtZ%bYyE?|{n)@pmog>TJJ59%#i@NFkJ{SoY zCWk>i5sr2E0f`tt!CZj3X{`ryn3d+9hh{s{R6I6XABDeXZ31hjjzKN~IaR##@>42k zL^9Cz8sxf$L>iIL;cHJ)Yun5x{vbRBzFP06$6KiRr&FeiaU_0ZK8K$jyi#Ac2lp?T z6sNO0knmK^FYoOeA{a54sg5I6i>#)Us!Nw+z$C5NL#2Feug|%XYp4(|oI4Nk!bHqT z#Jt6~rULnTW@dUEqgNby$|nFn_p0CgE@RA&qGxjJMa^M7gL=J=g~g>PGwBhdaN4YD zb&#YmAS7@|B!dwfg>k|nCLe?(_|sD`jp*=wF(D{!2GN5ss(^_aSb%}c_G{M16_w9q zSg;cqQPw$8+Gg`x4q^3E4d!ZX)&{;wstSmH)}F}3e)EnU+fb>c+RKf?HWuPF1B@_I zNjzeb2STCV59fnE!N52mb%Inf7|CFq^HRh`9|vg(+OA7LcRe<1{yTXq!F8@45cEY8 zbxb6JW2aC(kyh#6SVUFGTwf0s@l`N;@{~_{3QA{+lqgAaZ4fBOLq|ab zIC1i14q6BK_>w7up;~Rzcf91r7e3_^fCKvvB!&%%A3y76vcN`XqR*edpoKOHGNMwf zMg}Bl_~aoP%6OH*;&^@T3PmjdpA_B5LldK^=S3}A968fjqMD!+pi-^r61UD*_zJTJ zYdVpFctk<`$T=H>Q(J}KuDV|c{^Xt0JQ0h6Mwc|Ps{vqQYTQc>SOif;j%BD%VhTYz zBmo7>>!>c4+maT(_is_+|14m%lwYs>E%gJlb}s9h$0y4kozwYdqH3{1p;)<>k7agw z6ld8B*Fb~{iihDI4}xk?)XNW#b*VFZ@+pEnbTM#BB<&VMaY0|Rzek@8bP&P8YEoWU z|I%~4lyg^lACVUe`lr6$Ls2T4CHiE6g)nYv*gd`(H4lBbf}kgh#3F*F;7FL4vwd{k z@^EbnZQ3w?N!}{ilK4phT>-`clT^c|bOIHy5=TYgqAp4M3-_Ijwm|)Bh5!5hTc0#K zCpdfV0t}~M)94I79PRI4={y5h=<8j~-20`SAH{6(6Xo*qd|S_mZFXEuom zr%s=a!B50_$>0KHO@k3TVvr)^E4ws5kf__{E0!DWzY~QwO2z~Wx|1<3OsTVl7N1C71H$EMhM2`2{;o_5yqj}Js7W>IA$Dd5rVur zqxlF7d2bk+=nl3jUIQu?R=K&6ko7tlzNO}qV0OS|$uy?Z2~Y+v1?+s1qAk>-i$*Wz ze%bo$B^1AAYV03hJ)2a+ZiPJUem$a$7gPT4{Ie$uC8seen<3xBb*4HK3;V$$di-cz~~NK zGr0@MENU5fi((b|WKGMA|Yfe_bDUe`5B5Z7z@A>ECJ*kt{mHj zk%ZOEiL7rA7Tf^Q*|@16B5#?bbpOfiD%OfGXilFwtz+#*+kC+nMOw5Cm{sNV+}Sg~ zGdw&r{*+AsuDJXPOwY_H3zf(_bhVEF<~NbRWMDJF*|TTWK&Pbdtrcu=Ra{SZ#n%2X zdENn+95QRo^Qpr^Zuh$@Tj2RWaUU>lhdE|%HOs6L$AV&;rIqyMN*)`vO#6NG7W61i zQuJa7=hxNs_aIkVm9>Alfg#3z52!&!OZxfSek!Vd5{!!zMAw$|cN?X>_`!cIAH)@c zjSB2+#WTzVO>}Q>1BAu$B@@rE@NRFs1Np$KHq+nNp zu|URkh!7H&U@T)iee2~I7WT$jsss?o#QHXQ)k$uzwYO3C+gicdGv`4`0%C$hk-OFi zlb^wpQ&ZTpXRka-R@mTQPk+WUv+?nX!i6X&Xo%z^M7qEjr%s(IsHo+Hwk8NZ_P3uL zm1_~674$N;pgs=dezWurhkj@USck+U;ERNytXFVY?FMdTy*EDwO8o~+C$l zw!=F8iIz*MM?t>!Ca>Bgtio%?k8gHcKSj%O$K*9$q(H3ZC^W`Iuq?nzhU;hcl|jH=I(!Q6!ftkko%fR6|mg%LTqL>k?)rh}{9*dhpM z^!NNCgC88F%vce)4W1KTufV;Ym0p12I*w1S1JqrdA?)=WWoSkF0mXf-!ET7cTHx?Y zR~`4eA7x$EVy7y1V~){5=M$y$zg|!~k^n&r1IG4r3eVsE4H)H`9~HD9vRcNQPNX@$GwV#JCJ2K^m1wDM+NVbCuJU~##QmAbaAT}vykr~(+=mO+Bykzv&9_2H*%0)F7y>)m6$*zd9T`!3f+xH!jk>xgT<&cu^^g9?%pU_=bQY4%FoIK2<4 zkcxZ>e6`QsE5yV1&~aZ&3}NHjtkm>*!=w_CiiN4%vLGj3I@S1K>yuvtaTN^JGkp85 z>u~MxE+noBq6CCQJ83BD0EDS8*OTDat=eyGTde0=Z6YT6*En_hEHbN>!0I#7Qu#B( z6cT(QLbY1KSHF7im!8TAK!K#!x{js2o)N1&0b-#;H`ThFYz*Cx+3 z?z-oJJ)W^;Aqu4PqVC{OC4D&KHCOsBM;J;rQ^<~sE{z*`=nh(yt{YLO1nyrmR9!kD zf}`MO z``Y?~Yp5wZEE>=kM?EJ(R+mr>pl{IO5L|nbOKq(t zCct_}(TZans&2&(9()0ItyGaPgRCGm2DVZ6<~zni_$~&l?hnf4JG|wxaq5!EAS5mY zy9C^DxI7uc%dhzk>~*s+nSn7Bl%o-v4$zo}(RIbC{c($At?EU`~)E zDXg_R(T4K2VrXw3m4{_ zs%P?Uc2CR%pc~wrXN8dRDVtUmz_Nv3{J#C*D3WJ#{edS6)Vi8rwO)bxi4*kKFA!gB zc)k4fTLZf58t~g6oqoUk^#+G*iy8^tA>-ApyR|0(Yg?OMkcUuEsqo$;q>7aw!l(@4 zIU`r%r>^==Y_&s3gaFq-ni^P201SbUdXk{??%$rD)kTd_*uiqckNl~h3RyK_;zovT zD=B{RiWlRGbO%ybgBViwf3QL!0T3*<363uQIQO8}Kde3H96*f6AAh{*xtz5y#J>G1 z-WSEYqliSr6#zy@N4I_B^S}GYo^lDm?p=Gt7~`c?DN6f-Itx1l5BZ`bgxN635?>#i9`5_124qR>JaK&$FevijTCUHN~Q}yXf&Op#q+p1oDd)?7w&`rsUUGx z7{|!4j9s+~e)_s^$F~eU4dXI~dg4%L2SXNy1y&raSOiaz0u+o(q3P03B2a9v5;5xa z22Pwj1!h+Mnn$%vVhYch-=`uUOGGd{Je(fbw}0khe7@vjUd&CKrxU<=mS?_b#9Ma; z5wDyL@8gg27szXgpE`36OZ7U8spN3F^vcF%4V#nt{J9(GX~nA05um>2EDSgcM;1h> z@5xy>S66jD@dTQnk_Xo!6J(+TPl0RRvuXk-m-50Ezlattv9OBRX0{%KNa zI#5Es)?BT~s&mRQ&UFxbR%bbWd@;7WPp|zTIr+O$Di6>T=%b zdrPDM%2R0mky>zv%P)i}jN@Bpz5(MyqxiG?K7y|{&Ou<1Is>r|l2%b?h7qTEEt9Ww z{T?G#_q5LX=QK#O6pR#^W58IDUBcBgjvu@HyKv*swHTHmfHQRyMe2M14h({DqDrr% zQta&e4}{|QvfF^Oy#M4Xn3a)tx@3YHy#Y8szk<2NWgsK~PNK?ZQHeCHC~=xNP~rUC zzyI=!5|b}l0`Q-IlG^->py5u^xfHSCH@hI&DU_O*8QExjQVxQa(@Hv#*_xkUw|3WjYs;MIVQZ z0FyF;8%GXd-h(;Kv0)YF-qz~q6TQN(biU?p%q{_(R0Wu5pbC-j9JFm z(lWkd_By;^*RybSl^la96lqQVD_($$0$<~awCJh1#YJr3tb=35(c>r7 zTAnG_5fRU4D?zH*nA|_Zdjm{QPmF?U1XR|B#8`@f7DwMurKm<5(AZCaqh;?XKhxxgAO{jdIO%hE!*g0g( zn3#x>6sYsPqv#4ueFuis@(M0(@b5o!=~hkl3ep>$1T@`S z!Mba4bl-pN2}vip;?-RXDLqr#bW8&Gj{3W=#id>L`C9or-P@i0tQ~1e4@3kR>4eHi zR>8B9{n&QJC=M;&fsZ}>Z+Q6JdDM|%*)5~NHGsW6w+IYz^h;Oqum;3hR7?e&394jq zaC8FSdF2c6qT2PCZp?s@qLBz{byBVYO!FR)a@t?N_x_UP0>S%$8OzHJoH%g;+eixJV<_THcp z$KAw=Ite3nPXMH_K8h_WPr8f!N?H}3)9HOS2fwwRUxi+tKQk*}h$D>#!q_gG@cqNj z!*j2C8oqq`K78@~-MFuQ6pz;Dv5*lARRB@cksN`%+o8nj@S|AG9ARW+baL13-Daad-$hFRKKaQ{z4xY@Uf5=4Gtdq2HmT$-Qy)2e1QXXB zQVI>{8EyBCwOVM>wYjRTw))qsPe80X+t*xuEk5zct#Fd*%&a87fUsaDIClXLK6npy z?7R#!Q=34XM$JruQ7$Q22w8wENbARy435s7!11|LIJGo~d0U4AFbu|2 zI)vTho3LYYE2gXC7;#l>O{Xx%BVcRbxB+H~s(zLPut3rh1as)GdEFHMOL5#_kj1lp z$#v`XcNPE>mX{lN?D$ETByHj>1a^PxJqeY6>qt8@V|-!)`}XbI@Dt~vB>)tDty;siSA7FMar0-v z1d#L9Jca7mf?#mr{3*TdT6vNK$T+<41uuXh0}%_NUdyEYdiEnrtQ-Ur8^_I_1cab6 zRtyw@6xa-B7GIZ&XGlDxB_7VrDw1XGiq41X>Jz@F;#YS|;`}0#f$am`%T!uN(MFtnG+Z* zm_!8=b{b5C<=R%%hc8ECHp3z^I5=21RFI$wMg@dwmLhem3a3uH`(SNBk|+6PRv<~D z35~QD7{M~P+V6byw!#X$&i)Y{XbUgj~YZXcG{_Nd9XQ!X{kSEsWgsM6E_o%R#mw+b4RUI6R zF@-~~IlvbKLm=K*D_}-^KE!5%UmJxUXgkxoR}!%C3BYQ5{p$m5uKC@!U8B~|(;UoK zU-_3^x4g1iKfMUG<~C90HOmU4x#Xg>H=wR>;G)WB`MvDMR}trQjS?wZ=-)%IlojVZ zb6)xmd_pDYfluy@Xm-FzAP{86!dP$TKzlTznKyXBG31Fq6``W3< zz406YIMyPAgVnjp6qEGJ<0*wlE@}eMytK(f{Q6Ia4V34&m-Se&f!(eF{?Vh4VcWJ@OiqqKtX}v| z5arqrgjR^wt@=Q5UWv~nj2o`M0S6E6#n--i9}-u=idzPJdmu4YIIkH`A+Sf#!3#*h z`Sys70ZL#CN?=7IoeEW0XJHbCC4xADvpN!3cMZJkW#5bKJGLV*ar?V!<)$>95w6p|f#>B(~ zrlzJaHa3QtnHh|YjbV6r2qPn-Nc`qgiB22WpHSY%m9Y5+`m7r<>)(YN@g(`85&~Q& z+1*Y^&RP{qkCr5I{TbPHyuWNU4X&KAQ%c$3vv9Pd+g@r}T&7H@}$_g5d z1{#e9oYQ1>cz76NV`HdPDwv+0My*zh4`Y%z7Dk@f>zp#pi4YS4=cjhobfS^82+_dlEvsI z=vKS8c-_`f>6#GoXK~;#D0*`0;=@h~K&q_bd3-`>HEeUxvV$ zLBlTNh2QZseE;|UN7T|WUGGjnX04m2#LL@PQHh~Y4nRD@arfQ#;NE-h#o>pK;L%4P z#RFfzA4iTH!O^3~u(UMa^YyoH-;RCz_TkW>L%96%%dvOwK0Nc8&%%x!JCGy^tko8X z^Zi63qu1NzNq`iLssa!7;u4TnOA3_Is!2*mY&Ry!=y$KJ$Mx*DuipRur>1Kb&?Dz! z?hI=k5~G#cnbW6m_uY5no_oHEhaP?iM~@!E;lqb<{P=O4I&~TsE}ZT7N|j0ln>TO9 zmMvSbbLUR%-n|=_U3MAv@86FruDB8h4<1CCCWSN1BVP_+!*Gy-HbDC%MnB0FhagPW z7q33pyJ7;ThYXVi3u}t%b^61x%^qLW(5K{GavJ0n3GlB+3i}(%6YzEexIxeC?$bo; zxqfrPx$oTr$Ql-hA3X;0vhM6#DJVf0OV>P=$k`KN$F7|le#%^w1Yqypy<&{*yI*oJZE@11-WbD7JmLRm6PS9$fgPGt&05*8#D}EfG zz2#PX_#^)pWD`IvoOmU#V)Y(%5ln=eiZiKs)#61!BEk}~ZL3@XFqDp=5}hu|aN{$s z!SDXgo3U;7G8N;9ZiTX{jZ+keX$x-|!7!mw7c4ByFM;_JsZp;s_z{!?E> zc&NM45X{eCzylB5kAMF7$M6pyct5^&-`B9Xum}!rd7Klx(ll*CJBn>k5y8n5Cvo!R zN!)$cT@e{GNrFwAw%~csdoF(P2Y(PZ+;BZ+XJ=uO6xQZ#fjBEKy+naJSIgw|oX|YL z!sYQ^NrDB^0f~udhj@k7=q*w}EW&HDKc1Wk`~!WTjLbi!SA_+a?yGXXhYa``*Dv^s z7f)b+&Bd>kv*+h<_Ut(rqa%{mX3$Qo#QQyH)680n;gON?ec$lh7d&|Tt)JY;j>d+6 z{l$Ae{Hm#`so%{5AD1dRg+xdXeBUkzFgKxKql!2#;;Czxm>k77-f%6_M7^X{VzHaS z&c&2!<+iq!IEB<~*ep(P=U2akm;dOG;-1^T?j?{tq%S568WpZp@i|@LKyQU#y#Y`` zAPB<#`l$V#euo10Q%ljz4}B#t@82^7k)cN`P_(Fp528+cfjdWPBUJXob&t%c0Sz zBQZnxp6~fC+;r1Tc+rc$4ZC+=24;Z>dsw#+{0k#jRO(-GG1d@a&{#$!eFo2RdDV?b z0Lrdgu<`DF9l7Is9E4am2<)%c%BpMOoE9yQKYjwYeEJrA;^QB~M{oWpjz0DX(!@l9 zmx|+gWXZRgbWN4F!}RBg4-(BNlY_un2WvAt|M}0yx4q~kxar$&!c|vYi%KQ&L}-dQ z5p^{k>#`1rqjR8;M7UoQfy^V21mjXanw)!yv_Ca9pK~N|$W*UX5^XWSK_~+YAV^E$ z|K283-S6K|zVViJhcgeJ4V7yj)IoIN)WGDh!)vk^gTG_sz_HL;$Hv2Eb(>>UVy z`@Z+R?(hHd5C8i{oh}Yjvk3{MD? zQ`5NO%0qbQ;fL_Zks|;rVTQdp2E|P$k;U!-yMkqKQCNcuh=I@e5n2ohh!a@5jAuXR zO8nlN-->74@GYpMqev42IPYWa>2lq+R!|fph94W`0?MO*m09gGIx9GJ`V2nyiI3pd zf8&?&j(7YoeBq0q$4Y$(hJC;eWJVHzt=?mQEpkh_@bny^L`6IdKnBh`AqEnpfrCjH zCLw(7{`+zB&Hoo4{>OiSNCSH=+k@eu5wI7Paz23sk#7^U-*)oyr}2O#R~TVj@8H?` zyhTlm*2;fSWTD?F7GA^pZ%qPZ!0N5Hs7`a=-?jXH=l3o_W;T*t;dv=m#kHK^%-OTJ z<(5z4HLv>>y#4KO#a(yZj)jE_sH91Bu#+HF?$>IrWf9J{Fp|p!Vt+`k8A1X_9M33- zfWb)91VJUV?!RL%=N^Atz?isu{&w~I8TU6eH}Uned%*;4j$-pZG~ch<~EdG z3#=@z6$iqRqsMXh$WiV6YtJ;cMFO!|i!UzSH;&lbHs^h(FssA_EX^-|{I**@dh3%m z0r;LD_~Fq_n>PL4#KZ)Op3d!AkSCM0-bB`)DQQgm#7sr8O~3dVSeTo`rp=oo?4}Zp z)O>stHdy(hqdv0A)m9gUXA}knw!i2`OH7Jg+jil)YoCTY?*1~4K6(^LeFESW{e%R@ z_>J#%xI^+J{s59x0L_jkHh36&j z5autOke_@A>qe6SA^{`wThylj%xXX--qDN*=g*(Rhd=TW+;PX9s8%Z2xnnmfl`7c4 zYmxgv4~6}x)vXNy)?B~pqw_&UeI^QnLz{W^g)T(MwJKlII_#g$Zh7sac710;dVV;H zZN{wOyh|H!+ikbu&2N4)Ui;eD;>eLBAQ)JifxIFf`2bE)0l-8)lZcXU$y)~yxQRio z|FN1pio^#gNe}*SO>qa5zjj+tlcJL1JV@i zJ1G`6Tl}_b8+39@%pc)-{5xnuCd>EATHO!VhEBC2ZDkVU0^{3}0>;A13cmW)`(Pz^ z_46lLGy@A_So!*F8AA;c$W4~+Y9PeMz&ZKnoB#3ep1cXb55M9khbAT_e!WtuH0xy- zZ+47V)OG*>7eVO05r@8+zbGNF7mnkQiHdV@&SBG*X&9nNO361uzV@l>!lRa|g9d=1 z`mADzU`fYd*ab^q3zJl^bL$R#*Y~~zn>I~hd2SI8KXfF*klM2rxE7}{Cr(F)Iz2@6 z`dEj(`*-2nzx5^f>7RW$-tf9tirDXn_5vf1}41JWJSG;PByN zcrze#b3h6XjB=^S>XYJ)AypX%Tk2w%zBs%hEOad#wLk~TI)2GiO^cf=;B1pN5Ytusss0~p!G))(abAls>58qT9 z+x$mgzxVc~CnX2q??3XH3Fq9oBuU~S+CH9#oOsf%Q~?nSfMA`AV=t{FKLSHs21A0Y zuf7sHX19P7iB5vudQ07{gu`WW>vXvlUiPG7Fa$~9`a2!{BP+1Z!8PhQe)=&y^7tcI zSXzXLL%q=efnc+&iF{MsqHGKjHZVpj;##EwLk7fzN|Iu9XarlwcVc{G0#pGgHE^ul zT|)-U&KrgrK+>Kz9Ignd202tQ$TA>n2yVOeHoW~${tzGhhrdOdR^S|gDS=4ljYXUu zoS>$8YCr{zh^#kA$}6bW3DI1!&}ZJHNC5>FNdfLFLViRE!mQ)+@*=+R8=r|+zxp+J z$+v$8YPB?y4~hMM3lK9E#v^h8qV=_(?gUAeuiy20U0!!CKr07ea6)BykZOIN!95bR zGPYK96jp#c?zj_g`=4*ayZ`sQ0CsS01xc#os$ual8&6Eicb`!4{n(cG+$ulizZZ)f z7|-22CAK&9WwfqTk_!8Za%E*1S6p!=e*M+2#YrO0KoD!{mAh4~ zp>FHCzkA@K5zIGz$ZWPi92q3(TjSpb9+}Wl}duGo3`S_iQ`ya zX#ixj$_#8+2sklt*5ZM$KZx=1F^rGZA_SJdZu^|IbZrN$?|~lP14CeZFU zs$itb+;t34r30i~GN&HxMV&5YNkI;%FD>C8KJ*d%)^EQCk3RY^s@1A`7zja}I*Ktn zIPYW#BpyO&02IhG6~JqViBPO;LgG>I)bbE(CBJ8+j)$S28VOFK^IRmP@0TnLC8$+L zaL+yW;1#d0REp}_!W$ekNHHk z-8W!$!f2~SJY65{D#69F!(Q`=?a$dvfaT>n?*H2TUa^&PJwM44t-z6JR`@H6bLHZA z;*q$K(NXN$wQIx1ayFg>_ya%uYg@N&8541Fq^mXHMi;HJUKHzy*QS{%9J>4fMHds z4+$gT1SUzroWPg_oTN%RVdEbhA7BIce+L_|F<_H|Oafz4P?BhGi5b>7P-0<-ebu0C z7RRn&&)iI+q&QX3+_#FfA7MyFn4h1=AOGt9SR4gIL6I4-;741fore6 z9%G{;I^7TuDpCO!k!FqW=CgJE4mP6VOm{cZ)JB{W>-QO&>Zrby`tszxU+Ld&e2FHJ zASd~H6++f<_&@LaJN(+Oy$bh!?QSqzh}fvN5uts*o`Sc#vi->?uS!6rpk?n`ZO*xk z%ITQk{0x39R-Bgt_RKSOemxfrvV;nXfWW6d`AIA7u}E=x#<`%6P(b&a^lv1p zOBVSn`I*Exa`?e_{L8JMIP;`T0DkD@uYA?$=-8MtV5#LmYt9HueY8o%BX;fBj;X0J z3=a+AvB!=nOV|4-voV19ijWmXUR+#6k{C=*jC&4%uUfq|?jZd{5wsoftE;>U3(YtA z9O8-DjK{}sg6i>L%RUkNf!GIc{_1LwSTrntE1In3m%+=&_; zv3_r1Va39cY9$DH$PE_44LDfsry}qBTZqbzhHEV?%x3~X)=LN{sH7GA>*sF6BZnWs zv!C-^3=faOc-sQ@?}L56Pe>xed2Q1oy@F_SFTYGHeSHxD!NwRP^$Y(~(_z@pUM&*P zI`w*s1UcsjE6W)^^q~*q^>6%j9DD5HygwWLIE)`}4SM{EukMU*KN>IE3SVMOnuvx>A;%ces(p7>tjN!4P3=WC+`~ZN(#x9*;yU5rx!aMobJV4i7#22qq>b zFgY>iNr4`ov;GwC08_OpY8Cs1O(0EMWx@kMV5BWXSQrRw94ljx0FDx{CkHt~6Z9Qw z2`On-NQWjy{JDQF6P@}JWK{Q61z=)Mr~$KS^i9foudH1dA!H5U{MkAD*`NIhUjK$) zM{S5T_)Fq9i~~`_qW~2heRBECG_le7XR!#1&Q1Wwf~1yWcw`i#wNX@SRYgQ7XmMv) zURlQC;v!ZS=CHW12rCUQ*GXU)Pi52yZhbOZWJm|XqcH-JI;^AsRq%liy&n_P6L{Tg z-+A|Y6v2QCes(<$bcwQdm=jONEkN`H2r_L-k*2JbY8AEN z5eyHHVrY06X(dHsD%w7<7WI0Dm6Zi7F3w|q{sJ0HnHB>A7%wwSqH3qkg`ka`Bjatq zl~3cRTR6r0{_cNcVsaF(d)@0XGc$vErW|Af87SRleB9ZNYHd3 zBuvPx!@|N6zIN{eu%fM>W~Eku4WZsxhB1t>kzrhS%{4fF>~Y+E@BLs?fo)`3(6w)d zw)YptmzfQA?AWYh?J^*Y3v+H(ZCIO5&?L4j@h8!0hD%UUn!V4;-bNs0Rtg z3jq~ogpm0pAS?+CPt?*HogUw$`Fzy$sv6Y4Lj!`u>KHKa^&*L1)QBbj&t*;F+X=6jiow_R6t_1 zx?;ryOp6GO-pdruWni|-MS#IO-|7*W4ns7UbTn_6TvdrSspScBZ_|4bi#3?W3 zD*0SJqOL?BX{B&p7>JB_+oTN6Wk@Q7iLoh+O^jkpBR&I%GX zNSJV7-(HN=QcO&Y`LT5elaNlC6wdHYo<>n67Qn6zlmy<;7Qpwv?B(A)J3ITrysu4d z@{SR*^OBQP(EHaWnZxMlFm`O;3d5RZF(+79TEX1hqPk5ndniR`&5hw04D0ne8udD+ zXVlUX(i*h;ImD$`~DWc_=`UUXDvhwob#WpC1X)ZO$TC^ zL->-xp^nk<8ustK2AAzVgw30FV{BvwCaFQl=z%K)D>?@0yyk)SON}09R6(sag3+-_ zY@V6L^u!j_YC~9DUO>IE0yYHaGLHxqFQ{*LH~|}uf+oa-#4v8Z<4dRw4dI3xo`#{J zO4}?iGxbRP)*h5QAyaE>ORc7d-#fuwTMM9dEUP=RQ7-%4NdZ(*DI&s`zx;3bjo)|` zzIyN7(L!7Q)SzANj`L)XEu1vqPzT6i=gvLYv*$`|+qw@E6WdX%jKi3uAS$Kftm4PJ zh>W^y3P7A9X(l^0HdEf%DH9SI)%`Xe~@ z*yG;73{8D|=e#zJzZaV}O=I6>yO0_K<^+!(Jr)zWcGZQleayv@86sjHJbLE#6Gy*( z-;*i~<1e<0iF}r1xGTB9tBnCsn!#H;QG1y=M3ndH& zG9ZElqd3gXT|lK;#rXIbP#}>t_iUv{-+pip^0MkAeAz%$3t?E;3;sB8g!u%nP5G|N z1MLZbD=SKiz2qRMQ&8y=XkeFcEvZZTvj^m(laSW-xq zAWercHM1F8wr)X^CYWEGgSag3#fkG8?p{DBR%Wa%38{mPA|1Efatn6v+JmdFx=wi~ zg~O>8`frC=WnF@B{@^aN{p){lwcY2ifb&JSeuIb>cDoQ^5&|$ph zHNS>iZ~GLIByDch6em5%#cEqcbQ-Y8kR}GRTX*8hE3e0v&AVWD6qyV`qy|S088uX| z%BUcgBMV{e?K{{=R)zOQVX6Q&1*nSA(Ftst-GY(P5iG4NqTX0Ua069c4iDUV^~oSM z6G+kU=n9OD4o6PgvBw@qy-{x>p2yb{<4sXpNr1V2 ztT85i=%I)1d*G{Ix#dZd0Q}I8{le(hty|tSIXSVteZzZM%EFZ=Pjt(x)NuJ4*uH%$ zCMU<64vtDib)?UpIfJMq6rjc6;N^)qCSja9eG;Q1V;CMD_Rr%A)vSxvLGz;L9@WHP zhjt5y9w!nA1-V(TEEZUMEuHEv4{BLiu9(NRJ@O3}f@x6%zvX#@=Q*6O!Zm4N12`)< zd*(FW_{P`ci(mYlsv3xL8^GR@SQ7uaatA}_7?u@YJ+SWp_V2w0qeI)^?68hd88s+! zY;&O%qG%zUD-?PkGGAGNEy#!_3M_z0^w6gYCdMZ*GcyBY3@*%{QT+n(1RiG#zU~YX zKXOUUD8ZM$bO)aGtY>4_&Yjuw(Cn*|xmu`SZVx@MU;_V6OthX7&gc>_MrVC5H(FvdnkuxZmK z)T&inxNz3{qXhYB6}%E*zrXyxV(m$j5E_}oop;=YZ+_mlV0PmsH$MuF1}Hku3)<1pATGzu`7{#|G662k&Et-H?u8XX9P$f_f2_Z2;PpYs zVb87|*t2t+@6r*-5Kf;yi~0El{od<6)?Yrl41tmkf}q@6{(puxHP14ArVl2mu5b9vQ}k3v*apTGak=YZ6I_ zJu(8})X7troSZ~$xCTaWkSiF;FsZM_ICffTyz%!tm zS}}qaiPM(qI~)Q9#y12YlOQz-#>Xd+rd7-@F2OnH?OoI8-5n}Fim4hrqEyA=!UE2n zJBt^*;Q1IDu6Y$XgWTt$6B@Ldd%#V>zPx>Q@ek>uHFquolIWbX5)FA^g;K*X@)}6TQvgXr8Aj$ZFBj}lAhKFXAs2wLwhlpt zzx(_5;9c)}mnWNY0j(-ruQexl)V4nQMV>as&bRe5b$T6H)jn!P%KDQn?(`M3C5$%% z^ANdpIDO_ce*X{Nl9zLc>CQ-{}igMW7v!3&FdgvEj|zqo>X?!6C7%XKh} z%9KZF-WNK~!wW2+1lYZE8%Bm|F^LFUVR(2r`l7V&mU3QM(K6aOhb+s!>!$C1`Ph>t z0hphkpB)()8L%p7h1>-r!y`zNV7!rwYS_$znK3;zfqi>+=i2W=o-AYI0?#t%1v(5C zmzQzpop)hrc?pe7S+F+COSC~ZLbpSz*TLNSx5Z?k^ZU3MjNOu6Z_${?!)9mCoW)=N z)nDQG@yB!=&syY8VB8$Y0G0iPU}SU}S6%f?OpI=WwLm7zK_ERClC%KuEj{i zzm<~UsP?UX{$DsZ@JRd!A{#U^hs+YJO))b)i)*gE9!Zjd3<}I%-@NtLRbPUYQvyM) zR>L3t(I4PTU;dKvPa^0dZT;=lAFiEcZ`(h&lwObZKYW`H;HquhxcAj;2TbH*HbN~uJwcSP1qdS}Be{uCLFU#N0}=-&VCRl)*t}^PfNIOf?uKxz%fN)p zdkQQpF5!+lzl!CR72WcNd{AkfA9h_9P5Z%h={J$A^OB(ao;eCqD5>{Ka3r z6IPseA}c`Fa1b=q?1U1404o`4qr*6O;5t;RQ^+y`Sk(wKS660qumKJSvJ?;07Q4~1 zzI4o~bLBp3vzXzh)l?xjW6-b$BjZyzboDjh)OdEcM<7HKMy&_5O<-LHVrBXsfBYyu z@PQ9ves0lMm?2~Dg!c4{-jquVw~GIiO{5HxjIOqw)dp*KA?Nk;KKeH)>L2M4D((dX zKy@X~oH>s_{j+ysZti?Lq9z6Y0y#KpsQ45N4ji}!(^Gq4-3T15z*H?92^=MGpvUKfb=<1KvJ+L`VliI5m>Q)5~hlS2d}~C#3U>-F8~(Si_Jfa zXkS~~oWKJQd=2k^{|B(NwCv3~saZ+$-^G`7NyZ2b3s@1{b@$hB;^Zl?F|aO(l@->Z zglRH8_a{b&aPZ(h7(>B&rpdLuT1k<3(YoUM=(Rr>xoYnC#02*4-Mj8rWWy4Gox65r zWuH$xSwdLi=4d?ti#~tDBST)GrtBW-*j%+@uz&wv)T)VYCNIyK6O|;YZz+6};=Tc9k%bh4AYx-fH>8DKdc`? zRnH9PDqi6-gV0Kjj&u$Dt!Ra`ua8KQ%phoh*tZ#|ifU~Pd-h*}G))WbF+KCd`u856 zQ`ajI<8S`vukq-SW6Ec6wy8!=A&TlNqJ}@fgEM5>qOG*Ludca%#ximyZsOz}D-V zpEL=;wr#VWq0BY~o8pI;xOfdShKFjNEGR9AbbjCwF~-M7aOlthg}5XL=L9IGwa3R0 zVw}G)hr8~%7jqXDRdEivT_=0L?{&#L`#2oS5`z5Ux|k@f7DDUq-}L~tAWpoBqq?Gf z{)=D0U3cB--?#SmjY<6`b9ozpojRV0!@j*&Vq$U@FcnyrLDr+z9a z6b>`jq&pC&J47IqK}h?oN;I?zuSyM@H}Ar}eFs%$*frF6NgNWBph-lfP~9DS>{0y1 zU;cUF{;YL7QO{&@wa;5#VbiMC%@ZY1bVLAxPDLm($l%z~<9Ofyc@GkkfSF;fZL;S@ z^tf<=Om4#Vox7Do1c8%GPZ9D}JBmK=T6xRBd$JhZ#0wFL_aRV3GxsC_8nyxF z2ovL*aNyuosvZb|69!SLXeLXciJI?)`|i6J?|ILAw4gGHwnnkB$kE!N{?#YRo!5)^ zjB)VhV8GI{!yWhBhvUZ|N19eqgs0 z0yb@$#@@?z0nX|GU6Wc<%Lo-1#0k#NE#S*vxgB%!3$Ygzs#&7-t+YGoxR(*1LUpr# z(0=g;k_g|3^R9r1hlB%=MK1!NhM6rpFg7vewFFi?anN`^fQ#^IsPt>K z8b0{J_v60%??>(nL~A&t){o>lC~>e?!un)!ZEI>V7K-36fB8$eLjZa^YFyU}PC# zVqyz6PtWE}?(9y2h; zV5By*rglq`B-plnd-kMA0DkV5-}rhW+T29ODPUqvTHu6IxLZVJ71PA%1&-rcVV={& zJgf#eAO^F+?p-@EJG&Xq)zuge00(8J)1vP|OG$9fbytI4hd z>>0QP<$vGHikA9>(7MBG;^k3w44-iH=rO$Gf4xKPd`)4K2Au$ZuiXF7-kSzlmL2C| zU*@^@zP0x1>V2D@?itL20fq!Y0R$v&7GaVi1#lApG7M6rK!A&7P&6gk3dDQ-ct3dyJkUzYvRpJcU8UR-gEL~e);A13F%BTH*oCO8KkKI3|O-H3@w2`&ZsU# z7=-qBM@j~K6@#OF^!Umaog{t+TZ}&PSzHa2wOR|0oxP9;VIt=@eHkj%nQIXTae_Oy zuj5ZX^+^rPZuI@w`~LGQRQ>Okc=WFiuRY-jv*pL5uIER7|Fri*4{2z7r$mbFbb9#Y zC;u4BEBDpQArr4V;{7fVNW&hv;u=mIKaYBC+Ryl_=@dCXT_VPlO*0TuT~p3H)BtXX zV?sj|3?(F=g}9l6^&@-{nCm!x>Kw=0lHa=FMss~JXl%$U9}%4OtZS(AnzMxIsW}{4IG!IQL`qcDwOm*$5gFf0&G4t6`BSW~Zwy)I z;{>^2CwlOG*!~gI-N}S#GY=QfASYBrdz@x0Yig6hg7u&g@ z$3)oL+QDc3?DJTBumq00tva;DDM9Q<^q%HA4NgD?c;d;&u`oXkBMSEudk0gI+&e=g zR}Dt1SudT3<0;Bgsoia@#mvl1Gd^;YHjtI)gp5wO0sg@60;e}{;T21AbWfJ!38 z{R}$&Cc%l5rvPSTnfAb(vpU65rpi`EvQV+w+)p$uht?uw_x;QY5cNFm-*ez1!n8 zhJ^cyg^?vwz64oYS0woK|NF;SSzpp|E;2f?Lg5+N7ZW}K5a8I+$B@)ouwqq_(rO}M z5PXUPAE}gN`*M-?nHUMGGSdB`SCuI#s}QqunZ6zodX{i#;TYmtOILcCyCmiNN8V;T z!Y4oZDXgxp!Md`<`LHP4fA3$ZwNM@3%e7esrb7nTrO9xg}?ZoMz^!`O<^o64>oR?9B^romZ5Ia zP}*$NK!%1?#a=_Ze=&N2AO3TYlc8PFM`1gynOjZynOi* zOzeHjgSnCqIILpXIpjDyH;cGlS6J5Qd_9v2t>jsD4ugh=%LA%Hpfolt9NJ5HZV}c@ zF3b_^J8gdWX%9D4N(PPQB&H^3V5N{84$`fv!sdU^D$()EwX68T7rs#Pm)K9@GVGu& zSj>C3Jsvqd_&P}dc4yWHb;$f!C!-n@S&BdT^r!LzTPli~VY)@~vE-yy$JETcLh76W z$Y2lw*7%7OzlQu8%?}_iK1KVyS?q6cIIwm<M94fJ z!a21>&O~tc!3zHL-+vyPI~^57a$d^Uw}b>1PBQ;JAQFPj9GvaosMY#U8NUS$lh!6>5c4872o_Gv#+aPlUm2R+bu9q8egc)3d&Y+9L z5Q%X8=1qL@D__M{XB*b(oV!(O@d#c(8A`NcS7xI|oE{cx?f>~v&%dul;uZd!bGUx} zI+m7}hbI8UW$~W5Fp+g$XMT$04e^TWoRRQ1= zpZG*+v}(-vM7+yGw}^X%kJVuufZ>nVPfvJPxL3rFZtB~%N{Tk}!GxOVLt?%cV9 zvZeR%QAo8JpPrm44pt5$r2Bh+!8R*A4wgH?)%Jjw<({0JMx)tQE{=>AFAE%kKl-CT zLbuy{1<{?sH8iM0!DA=O#Rsk?Aw?Zoy)Icm1ff~$;(`-|^6{JKp5E?#`$z4dzC%ckyzFOS$jPTK)dY%~)e?^i3?F&R-s zKofz$I5InjXP$ThCP~q=JBY#}%AZURZs$?}4p9_qXO1IuQ;RQr@yob;`8qnCUal7q zM%_jSdG}C<);IxgoT~mn6$<@z>h-#~c=2LB7C7{fBZcIw6|~z^sMVTzW?uO@c_jnS zJ~Nxrq3v?$#i%K;IIi?Xud`~)It9M>>C zJq_!EBIob|OZ7SoUVQOItgI~WB0Baknll;zZEC(=tC-JvQPcKxB(h6swNM$(RWJ*`Zvm}!_3y;)9rTgna})b z9$fq3+0fD;KQBEwF%9O}&)fzTNGZAby;5KN&=Fcl8NJpDrlx0MqG;rO6rV5O%-`wC#3KvIXEbGW*A7k~P>&tYw49kHmx zW0xFK3v)2No%#gATpNjvp_*X|68DO2s`aZ0o2C1ZcHd%F?Dm z$zbvMLm+_^7f)16-ivY=aZ2p)k>c?50&s!x!b>k=Ybym)?8`gjvo#Oj8yznMG?C#r zg0&XgJ6(M7i(kUo)2DFs*b%fEHCU%mA(!Sg_q(tkrT;n3&ps*&5PZXTwmZ0V=|wO{ z1C?&xtMao&OoCQ>BF|q-@P#H#uehiTV=MxjE~NbM4=^Q>L6X!F$1!@{bZ8(g+er6% zJuEIRR{DB-9UA24g!TG*$>Sh+EX8ceXob1`U&Cs0Qs(LOGr{}+{4mJMcx$V&$VRMJ z5y`8ry@<1c)Mj0Z%a<=#*JuCpdLED!LZi`wVV$Y(M+j(-{ZzT{!w%pPKRfO|SCV2- zp)_S+*dKn3dc6q~#enOLj0-C3tybRJ8rcn<+DlcBNB;b#G)&dcgeSIqTMTMJm!i2zRwI=*1VUVkrJ#DXx>#B)IyFGy?pM3JbcmM~U0L;(N zQ<&qgFw#qbHg{|8I~>I;2Qm>R+HElJmQfFZ24QmVdE<1ZQ@l5T6M!PZ!u&jHwFqB% z;UYFRcECtrQvnrkXegMFJHx-#d~<{>=_(7GzTUISqG5}Q55?F z4k-S`IA}W8ctp2@do3cu^2!Rj-4yk@8JSct$R|Y!;v^}}x`#K(xmia4a}bBb>!2Xi zs;%+xg=C8FljPE_41*|&QLEL_?QZ3W#jp*VWfnw)wY7Cv>%7z4?)NC?#ds}?P$j6( zI}dD|{ak~QEmZ06yqIEqt*plZslsjYihzYfPspK!1MA2AfYdaL$5_ zj*V=qa(QhQKAU| zD!vaP85+)=7~q#=QK!?fQKh zJZ5sWHHX|;4bFjBki@1WnJ>F0K+XZyy1dHWOK(Gk$Lb&$6$*p+Ie)irq@`TzNS`y{ zILO?1Rbl9X6yGz(Xe{e(@A_E-GP}LKy(eMt^%S3sKZtch=zB9>*TIRy+WID5x^flw z9y|acf-#XE@Dan>OnGV6k19ijI~^&nzz{=RiVQu>&$scWr=CT-*7n7mfFhqHFpqKg zOQltyqEw6|R%P4NW~x0w`$dQaNs?f4YWBUa%LL%;*|RQ=<6Kl@tVJYMK7c@>zPdL7 zlHor#^l6*`20GK}$O009$*A;a>?MI&M?z*MCh_dkZ@{HXS8!+Xo}vU4<>eNkm}L)+ zaKSx_Ir1uFz=QiMSYBGi!one(K6L`^RzrJH>|N!Yk0Ur}UH|=W$cNp~0i9i4T`O(w z5r?85$I0cJ^NPsk)nqQtfk9~SQ3;E~E9Ftim-Ky4N64s@peUj<`Y_j^U?5_VroBB0 zniUQQt88+&li}X|`>?(>5@w#u%f)%6%YYP=Pkt#K;{kdke~9OzBYjn<&Z|2}-?GeI z97-*%T(cwB=pc`-6$k;9ROcWHeTMf^`92jh`{h5wxAgS0vzNW~al|^bCu%rxU%zt*J4Z=hw7kCQq1?38!#yjA0k|NPV@5{a3t1{Q6FBf1$#*BqH ziU>NL?!ck8`(eHxk+Fl1b1KMW0Iv=!+AYR*r;DrCZ{XU^+g`dl_U?!RGK@?-X)nuk z3anJ91Ti_AW&ou)a$*K=eDV!wnx^8JR3zVAQhD6%@Xzl@Uy^MiMy-}$yPJ(Hg2(wf za`fndUEBjr08XAf8MIeRy*k-@-Gm;jC*LG-j9M)o+DqFl>yA7Glo5dt`_VvAV+IQl zj50n6fMqmlbv%CIERsfoYd3BpvndEMg0dc~Bt#Akhk!4hI7nXiITPU4okcvje;>z= z9>uX^3uw1ng_N)>6b@g@L|`28p-~kT5wO0#zH8vEK-+m3aQR^otSwm>mdZr1S7WYv zyf#eOl;QK4sF3#@6}$r^on>}F?QggeX0=jGdns<*xQ)ywmnHluN8m$c9wJY*wITzu z2000-bf`*SfRcXbe}tWJ@k-M7{ME#~oYa-S59v#^`p=Wlnjq=>I3fFSnAvIK#L@ZO zwmV0RsIQjruk4&4O*7oTe{YYZ%;mqsR6rc`2(714RsFEFu$%JR@Hj`6D_t65EDkKO zW07pLEZcP-=XaWn7t7jj+iibAW-n$ulghS>Q)FtRyMx8W`?z}T2DW#4h@wR0%E@@e zQB@sfbx6|U4-VEBW-LG?K#CMm6F7711m1A&F&JSGMJfj6RY@7Pfb>V|zzmNKL< zhz%O`I@UIJe3D25Eu(Q__~F9`HU)Ta3BddR>R&&!y|M8j%+BO2<^i3F@|E*ej9|)H zw@kXJ>$Lc2cFFBl1?IssiB1df8yA z!ldE#_tWc^{h$Cqe;+&0iS)S&&j|;okf0bur2|<%XIXMN)BdB=5W!r9?kl}L8XnBW z={4?ldk|Lt4C-rh1%#?apL=B#F{!0-bapFS~`J_PYe62VT*Wg@+ zW{q*~{281)d=w^%VZxpFeJ{>so~iHNN?$fxCJ0xr0~6q&S^&=82Pi6;;*Hsc@jbG+ z+1UudNdPxqHwnP;{J`|I4KTaDHm^CR9FZH{4jaW!FlwDZwCyXN~4KVs){x_Ik|T~6^f8#X$t2u z&8EFwDOgIQ%tcfAVF7?qh{m{yqvQ~ruZ4w_1RCH&wT2(^c{yKV)>#-%U^9z2j`k+soTKJ%mkjka31qBhqS07um4av$ODqS z8)QFxN=Nx9-o%L*t!4s4#J)k4f63=-^(|S*PhJ|r}Lj)$BAvY!l2)J`+3HKM5(Wo~tKR<cm4V(yuTjF!2orShH&ar9*x>!9=td3JVsj0(_?`d-Zw^%(O4QMVN-@^-{nPA`=zR zPALHxbv=e9hzEV}@0UM9GMpXX&vq`)gzugJSe>+}^i6joq6Yp(gm$~V`!x~d2u`op zMd707lK?+hOhAbo{BRZixYu?p-c(*$hDj0!o26>Fwby$LNNc@bfvF!QSwY{F%%J~A`F2DTFZ~k+CuGnmX{BRrIC-zmKQ04DHgl4n(Xic~ZT)RtG*Z^X6 z>=4Y#1g=H6aN#^Ar>AiB`gLq=cEN}=6nH;w$H<+)2<#V^crZMCc3tec5Cz*i9bCJ< ziR(9SU}ky(^Ye!>Gc$!|vjJmbZ(>B1jS;RR)35_ecIm$jt9FK*JY#J5kWCW+c7%8Y4*%gCfdFqnZ??nsWI1gPcJo0!Ka6T7qX! zU%<(QV~7y@g{X<8A_m2X4V5Ls$2G|D9o5yEvW$zGojUL6+|q0)FfcAhpsQD2f7KFqGxkM91_Dgc6b4E z(^I%|;|gxwyMwe7vd%50YDt88 zJ;6k~jYEg#F+DYnT4FrUpp+(CT3<)@G9Cp9U{tWag4qs&Acf7k=yWMC}2ddM>C>6xra11tX_pa|leR`jBiEaFXh@+lJ+DYVYIhPu2Bp)QUeI)tas zUO>AxfhaaAAXNG+)>^;D=#kCXh9%u`93zer^g2C⩔gF*LtE77j0%{W)i9h^+=*X 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 literal 0 HcmV?d00001 diff --git a/sgbackup/icons/hicolor/64x64/apps/sgbackup.png b/sgbackup/icons/hicolor/64x64/apps/sgbackup.png new file mode 100644 index 0000000000000000000000000000000000000000..960ae88e059c26da1182f54890774fc4fedbc9e8 GIT binary patch literal 9095 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 + + + sgbackup.png + + + sgbackup.png + + + sgbackup.png + + + sgbackup.png + + + sgbackup.png + + + icons8-windows-10.svg + + \ No newline at end of file diff --git a/sgbackup/icons/hicolor/scalable/apps/apple-svgrepo-com.svg b/sgbackup/icons/hicolor/scalable/apps/apple-svgrepo-com.svg new file mode 100644 index 0000000..f2b8d63 --- /dev/null +++ b/sgbackup/icons/hicolor/scalable/apps/apple-svgrepo-com.svg @@ -0,0 +1,19 @@ + + + + + + + + \ No newline at end of file diff --git a/sgbackup/icons/hicolor/scalable/apps/linux-svgrepo-com.svg b/sgbackup/icons/hicolor/scalable/apps/linux-svgrepo-com.svg new file mode 100644 index 0000000..1f30a25 --- /dev/null +++ b/sgbackup/icons/hicolor/scalable/apps/linux-svgrepo-com.svg @@ -0,0 +1,49 @@ + + + + + + + \ No newline at end of file diff --git a/sgbackup/icons/hicolor/scalable/apps/steam-svgrepo-com.svg b/sgbackup/icons/hicolor/scalable/apps/steam-svgrepo-com.svg new file mode 100644 index 0000000..27fb392 --- /dev/null +++ b/sgbackup/icons/hicolor/scalable/apps/steam-svgrepo-com.svg @@ -0,0 +1,6 @@ + + + +steam + + \ No newline at end of file diff --git a/sgbackup/icons/hicolor/scalable/apps/windows-svgrepo-com.svg b/sgbackup/icons/hicolor/scalable/apps/windows-svgrepo-com.svg new file mode 100644 index 0000000..b591081 --- /dev/null +++ b/sgbackup/icons/hicolor/scalable/apps/windows-svgrepo-com.svg @@ -0,0 +1,19 @@ + + + + + + + + + + \ No newline at end of file diff --git a/sgbackup/main.py b/sgbackup/main.py index 50e2d0c..0d528bf 100644 --- a/sgbackup/main.py +++ b/sgbackup/main.py @@ -19,9 +19,9 @@ import logging from . import gui -from .gui.application import Application +from .gui import Application from .steam import SteamLibrary -import sys + logger=logging.getLogger(__name__) @@ -37,6 +37,6 @@ def curses_main(): def gui_main(): logger.debug("Running gui_main()") - gui.app = Application() - gui.app.run() + gui._app = Application() + gui._app.run() return 0 \ No newline at end of file diff --git a/sgbackup/settings.py b/sgbackup/settings.py index f249405..8265bf1 100644 --- a/sgbackup/settings.py +++ b/sgbackup/settings.py @@ -23,6 +23,8 @@ import sys from gi.repository import GLib,GObject class Settings(GObject.GObject): + __gtype_name__ = "Settings" + def __init__(self): super().__init__() @@ -35,6 +37,13 @@ class Settings(GObject.GObject): if (os.path.isfile(self.__config_file)): with open(self.__config_file,'r') as conf: self.__configparser.read_file(conf) + + if not os.path.isdir(self.config_dir): + os.makedirs(self.config_dir) + + if not os.path.isdir(self.gameconf_dir): + os.makedirs(self.gameconf_dir) + @GObject.Property(nick="parser") def parser(self)->ConfigParser: @@ -61,11 +70,12 @@ class Settings(GObject.GObject): def backup_dir(self)->str: if self.parser.has_option('sgbackup','backupDirectory'): return self.parser.get('sgbackup','backupDirectory') - return GLib.build_filename(GLib.build_filename(GLib.get_home_dir(),'SavagameBackups')) + return os.path.join(GLib.get_home_dir(),'SavagameBackups') @backup_dir.setter def backup_dir(self,directory:str): if not os.path.isabs(directory): raise ValueError("\"backup_dir\" needs to be an absolute path!") + self.ensure_section('sgbackup') return self.parser.set('sgbackup','backupDirectory',directory) @GObject.Property(type=str) @@ -77,6 +87,10 @@ class Settings(GObject.GObject): def save(self): self.emit('save') + def ensure_section(self,section:str): + if not self.parser.has_section(section): + self.parser.add_section(section) + @GObject.Signal(name='save',flags=GObject.SIGNAL_RUN_LAST,return_type=None,arg_types=()) def do_save(self): with open(self.config_file,'w') as ofile: diff --git a/sgbackup/steam.py b/sgbackup/steam.py index 2161f9d..9780c66 100644 --- a/sgbackup/steam.py +++ b/sgbackup/steam.py @@ -23,8 +23,11 @@ import sys import json from .settings import settings +from .game import STEAM_GAMES,STEAM_WINDOWS_GAMES,STEAM_LINUX_GAMES,STEAM_MACOS_GAMES PLATFORM_WINDOWS = (sys.platform.lower() == 'win32') +PLATFORM_LINUX = (sys.platform.lower() in ('linux','freebsd','netbsd','openbsd','dragonfly')) +PLATFORM_MACOS = (sys.platform.lower() == 'macos') from gi.repository.GObject import GObject,Property,Signal @@ -69,8 +72,6 @@ class AcfFileParser(object): return line_count,ret - - def parse_file(self,acf_file)->dict: if not os.path.isfile(acf_file): @@ -86,6 +87,14 @@ class AcfFileParser(object): raise RuntimeError("Not a acf file!") class IgnoreSteamApp(GObject): + __gtype_name__ = "sgbackup-steam-IgnoreSteamApp" + + def __init__(self,appid:int,name:str,reason:str): + GObject.__init__(self) + self.__appid = int(appid) + self.__name = name + self.__reason = reason + @staticmethod def new_from_dict(conf:dict): if ('appid' in conf and 'name' in conf): @@ -95,12 +104,6 @@ class IgnoreSteamApp(GObject): return SteamIgnoreApp(appid,name,reason) return None - - def __init__(self,appid:int,name:str,reason:str): - GObject.__init__(self) - self.__appid = int(appid) - self.__name = name - self.__reason = reason @Property(type=int) def appid(self)->str: @@ -120,7 +123,6 @@ class IgnoreSteamApp(GObject): def reason(self,reason:str): self.__reason = reason - def serialize(self): return { 'appid': self.appid, @@ -128,7 +130,10 @@ class IgnoreSteamApp(GObject): 'reason': self.reason, } + class SteamApp(GObject): + __gtype_name__ = "sgbackup-steam-SteamApp" + def __init__(self,appid:int,name:str,installdir:str): GObject.__init__(self) self.__appid = int(appid) @@ -159,8 +164,11 @@ class SteamApp(GObject): def __eq__(self,other): return self.appid == other.appid + class SteamLibrary(GObject): + __gtype_name__ = "sgbackup-steam-SteamLibrary" + def __init__(self,library_path:str): GObject.__init__(self) self.directory = library_path @@ -183,7 +191,7 @@ class SteamLibrary(GObject): return Path(self.directory).resolve() @Property - def steam_apps(self)->list: + def steam_apps(self)->list[SteamApp]: parser = AcfFileParser() appdir = self.path / "steamapps" commondir = appdir / "common" @@ -202,10 +210,12 @@ class SteamLibrary(GObject): return sorted(ret) class Steam(GObject): + __gtype_name__ = "sgbackup-steam-Steam" + def __init__(self): GObject.__init__(self) self.__libraries = [] - self.__ignore_apps = [] + self.__ignore_apps = {} if not self.steamlib_list_file.is_file(): if (PLATFORM_WINDOWS): @@ -229,7 +239,6 @@ class Steam(GObject): except: pass - ignore_apps = [] if self.ignore_apps_file.is_file(): with open(str(self.ignore_apps_file),'r',encoding="utf-8") as ifile: ignore_list = json.loads(ifile.read()) @@ -239,8 +248,8 @@ class Steam(GObject): except: continue if ignore_app: - self.__ignore_apps.append(ignore_app) - self.__ignore_apps = sorted(ignore_apps) + self.__ignore_apps[ignore_app.appid] = ignore_app + #__init__() @Property @@ -252,17 +261,21 @@ class Steam(GObject): return Path(settings.config_dir).resolve / 'ignore_steamapps.json' @Property - def libraries(self): + def libraries(self)->list[SteamLibrary]: return self.__libraries @Property - def ignore_apps(self): + def ignore_apps(self)->dict[int:IgnoreSteamApp]: return self.__ignore_apps def __write_steamlib_list_file(self): with open(self.steamlib_list_file,'w',encoding='utf-8') as ofile: ofile.write('\n'.join(str(sl.directory) for sl in self.libraries)) + def __write_ignore_steamapps_file(self): + with open(self.ignore_apps_file,'w',encoding='utf-8') as ofile: + ofile.write(json.dumps([i.serialize() for i in self.ignore_apps.values()])) + def add_library(self,steamlib:SteamLibrary|str): if isinstance(steamlib,SteamLibrary): lib = steamlib @@ -294,3 +307,46 @@ class Steam(GObject): for i in sorted(delete_libs,reverse=True): del self.__libraries[i] self.__write_steamlib_list_file() + + def add_ignore_app(self,app:IgnoreSteamApp): + self.__ignore_apps[app.appid] = app + self.__write_ignore_steamapps_file() + + def remove_ignore_app(self,app:IgnoreSteamApp|int): + if isinstance(app,IgnoreSteamApp): + appid = app.appid + else: + appid = int(app) + if appid in self.__ignore_apps: + del self.__ignore_apps[appid] + self.__write_ignore_steamapps_file() + + def find_new_steamapps(self)->list[SteamApp]: + new_apps = [] + for lib in self.libraries: + for app in lib.steam_apps: + if not app.appid in STEAM_GAMES and not app.appid in self.ignore_apps: + new_apps.append(app) + return sorted(new_apps) + + def update_steam_apps(self): + for lib in self.libraries(): + for app in lib.steam_apps: + if PLATFORM_WINDOWS: + if ((app.appid in STEAM_WINDOWS_GAMES) + and (STEAM_WINDOWS_GAMES[app.appid].installdir != app.installdir)): + game = STEAM_WINDOWS_GAMES[app.appid] + game.installdir = app.installdir + game.save() + elif PLATFORM_LINUX: + if ((app.appid in STEAM_LINUX_GAMES) + and (STEAM_LINUX_GAMES[app.appid].installdir != app.installdir)): + game = STEAM_LINUX_GAMES[app.appid] + game.installdir = app.installdir + game.save() + elif PLATFORM_MACOS: + if ((app.appid in STEAM_MACOS_GAMES) + and (STEAM_MACOS_GAMES[app.appid].installdir != app.installdir)): + game = STEAM_MACOS_GAMES[app.appid] + game.installdir = app.installdir + game.save()