From 723bd2cf4367ec31d59c6d9e15f30c9e85853252 Mon Sep 17 00:00:00 2001 From: woojin Date: Fri, 29 Mar 2013 22:25:58 +0900 Subject: [PATCH] remove activator, add da_command script Change-Id: Id5640f5b34e91994481758a985feeedd6f08a3ae --- activator/MacOSWindowActivator | Bin 15260 -> 0 bytes activator/Makefile | 20 - activator/WindowActivator | Bin 13885 -> 0 bytes activator/WindowActivator.cpp | 365 ----- activator/WindowActivator.exe | Bin 105984 -> 0 bytes activator/WindowActivator.h | 62 - activator/macoswindowactivator.sh | 15 - activator/main.cpp | 63 - activator/windowactivator.bat | 10 - activator/windowactivator.sh | 15 - activator/windowactivator.vbs | 11 - daemon/Makefile | 3 +- daemon/da_command | 89 ++ daemon/utils.h | 4 +- packaging/AUTHOR | 7 - packaging/LICENSE.APLv2 | 204 --- packaging/LICENSE.GPLv3 | 674 --------- packaging/NOTICE | 7 - packaging/activator/MacOSWindowActivator | Bin 15260 -> 0 bytes packaging/activator/Makefile | 20 - packaging/activator/WindowActivator | Bin 13885 -> 0 bytes packaging/activator/WindowActivator.cpp | 365 ----- packaging/activator/WindowActivator.exe | Bin 105984 -> 0 bytes packaging/activator/WindowActivator.h | 62 - packaging/activator/macoswindowactivator.sh | 15 - packaging/activator/main.cpp | 63 - packaging/activator/windowactivator.bat | 10 - packaging/activator/windowactivator.sh | 15 - packaging/activator/windowactivator.vbs | 11 - packaging/binutils/readelf_arm | Bin 295288 -> 0 bytes packaging/binutils/readelf_x86 | Bin 311564 -> 0 bytes packaging/daemon/Makefile | 63 - packaging/daemon/da_daemon.c | 1670 ---------------------- packaging/daemon/da_debug.h | 54 - packaging/daemon/sys_stat.c | 2019 --------------------------- packaging/daemon/sys_stat.h | 158 --- packaging/daemon/utils.c | 260 ---- packaging/daemon/utils.h | 86 -- packaging/dynamic-analysis-manager.spec | 2 +- packaging/eventutil/Makefile | 19 - packaging/eventutil/eventutil.c | 378 ----- 41 files changed, 94 insertions(+), 6725 deletions(-) delete mode 100755 activator/MacOSWindowActivator delete mode 100644 activator/Makefile delete mode 100755 activator/WindowActivator delete mode 100644 activator/WindowActivator.cpp delete mode 100755 activator/WindowActivator.exe delete mode 100644 activator/WindowActivator.h delete mode 100755 activator/macoswindowactivator.sh delete mode 100644 activator/main.cpp delete mode 100755 activator/windowactivator.bat delete mode 100755 activator/windowactivator.sh delete mode 100755 activator/windowactivator.vbs create mode 100755 daemon/da_command delete mode 100644 packaging/AUTHOR delete mode 100644 packaging/LICENSE.APLv2 delete mode 100644 packaging/LICENSE.GPLv3 delete mode 100644 packaging/NOTICE delete mode 100755 packaging/activator/MacOSWindowActivator delete mode 100644 packaging/activator/Makefile delete mode 100755 packaging/activator/WindowActivator delete mode 100644 packaging/activator/WindowActivator.cpp delete mode 100755 packaging/activator/WindowActivator.exe delete mode 100644 packaging/activator/WindowActivator.h delete mode 100755 packaging/activator/macoswindowactivator.sh delete mode 100644 packaging/activator/main.cpp delete mode 100755 packaging/activator/windowactivator.bat delete mode 100755 packaging/activator/windowactivator.sh delete mode 100755 packaging/activator/windowactivator.vbs delete mode 100644 packaging/binutils/readelf_arm delete mode 100644 packaging/binutils/readelf_x86 delete mode 100644 packaging/daemon/Makefile delete mode 100644 packaging/daemon/da_daemon.c delete mode 100644 packaging/daemon/da_debug.h delete mode 100644 packaging/daemon/sys_stat.c delete mode 100644 packaging/daemon/sys_stat.h delete mode 100644 packaging/daemon/utils.c delete mode 100644 packaging/daemon/utils.h delete mode 100644 packaging/eventutil/Makefile delete mode 100644 packaging/eventutil/eventutil.c diff --git a/activator/MacOSWindowActivator b/activator/MacOSWindowActivator deleted file mode 100755 index 74f62900d01ba3f7bdd5e882d675227aab5d46c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15260 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 diff --git a/activator/Makefile b/activator/Makefile deleted file mode 100644 index 642e0f0..0000000 --- a/activator/Makefile +++ /dev/null @@ -1,20 +0,0 @@ - -HEADER = WindowActivator.h - -SRCS = main.cpp WindowActivator.cpp - -TARGET = WindowActivator - -FLAGS = -Wall - -#LDFLAGS = -lstdc++ -lX11 -LDFLAGS = -lstdc++ -framework IOKit -framework ApplicationServices - -all: $(TARGET) - -$(TARGET): $(SRCS) $(HEADER) - $(CC) -o $@ $(FLAGS) $(SRCS) $(LDFLAGS) - -clean: - rm $(TARGET) - diff --git a/activator/WindowActivator b/activator/WindowActivator deleted file mode 100755 index 8fe08760802b74c557d75ad28d9a49e35aa6546a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13885 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 - * Juyoung Kim - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Contributors: - * - S-Core Co., Ltd - * - */ - - - -/** - * @summary - * @create date : 2011. 8. 16. - * @author(create) : Lee JaeYeol / jaeyeol148.lee@samsung.com / S-Core - * @revision date : 2011. 8. 16. - * @author(revision) : Lee JaeYeol / jaeyeol148.lee@samsung.com / S-Core - * @refactoring date : 2012. 4. 14 - * @author(refactoring) : Jaewon Lim / jaewon81.lim@samsung.com / S-Core - */ - -#include "WindowActivator.h" -#include -#include -#include - -WindowActivator::WindowActivator() -{ -} - -WindowActivator::~WindowActivator() -{ -} - -bool WindowActivator::ActivateWindow(const std::string pid) -{ - return ActivateWindow(atoi(pid.c_str())); -} - - -#ifdef _WIN32 || _WIN64 -#include -//#using -//using namespace System; -//using namespace System::Diagnostics; -//using namespace System::ComponentModel; - -ULONG ProcIDFromWnd(HWND hwnd); -HWND GetWinHandle(ULONG pid); -void ActiveWindow(HWND hWnd); - -bool WindowActivator::ActivateWindow(int pid) -{ - ActiveWindow(GetWinHandle(pid)); - return true; -} - -ULONG ProcIDFromWnd(HWND hwnd) -{ - ULONG idProc; - GetWindowThreadProcessId( hwnd, &idProc ); - return idProc; -} - -HWND GetWinHandle(ULONG pid) -{ -// Process^ fproc = Process::GetProcessById(pid); -// return (HWND)fproc->MainWindowHandle.ToPointer(); - - HWND tempHwnd = FindWindow(NULL,NULL); - - while(tempHwnd != NULL ) - { - if(GetParent(tempHwnd) == NULL ) - { - if(GetWindow(tempHwnd, GW_OWNER) == NULL) - { - if( pid == ProcIDFromWnd(tempHwnd) ) - return tempHwnd; - } - } - tempHwnd = GetWindow(tempHwnd, GW_HWNDNEXT); - } - return NULL; -} - -void ActiveWindow(HWND hWnd) -{ - HWND hWndForeground = ::GetForegroundWindow(); - if(hWndForeground == hWnd) - { - printf("same as foreground window\n"); - return; - } - - DWORD Strange = ::GetWindowThreadProcessId(hWndForeground, NULL); - DWORD My = ::GetWindowThreadProcessId(hWnd, NULL); - if( !::AttachThreadInput(Strange, My, TRUE) ) - { - // ASSERT(0); - } - ::SetForegroundWindow(hWnd); - ::BringWindowToTop(hWnd); - if( !::AttachThreadInput(Strange, My, FALSE) ) - { - // ASSERT(0); - } - if (::IsIconic(hWnd)) - ::ShowWindow(hWnd, SW_RESTORE); -} - -#elif __linux // if Linux - -#include -#include - -#define PERROR(...) fprintf(stderr, __VA_ARGS__) - -bool findWindow(Display *disp, int idepid); -Window* getClientList(Display *disp, unsigned long *size); -char *getProperty(Display *disp, Window win, Atom xaPropType, const char *propName, unsigned long *size); -char *getWindowTitle(Display *disp, Window win); -int findProcessID(Display *disp, Window win); -void activateWindow(Display *disp, Window win); -bool sendEvent(Display *disp, Window win, char *msg, unsigned long data0, unsigned long data1, unsigned long data2, unsigned long data3, unsigned long data4); - -bool WindowActivator::ActivateWindow(int pid) -{ - - Display *disp; - - if (!(disp = XOpenDisplay(NULL))) - { - PERROR("XOpenDisplay error"); - return false; - } - - findWindow(disp, pid); - return true; -} - -bool findWindow(Display *disp, int idepid) -{ - unsigned long clientListSize; - unsigned long i; - Window *clientList; - Window activate = 0; - - if ((clientList = getClientList(disp, &clientListSize)) == NULL) - { - return false; - } - - for (i = 0; i < clientListSize / sizeof(Window); i++) - { - int pid = 0; - pid = findProcessID(disp, clientList[i]); - - if (pid == 0) - { - continue; - } - - if(pid == idepid) - { - activate = clientList[i]; - break; - } - } - - free(clientList); - - if (activate) - { - activateWindow(disp, activate); - return true; - } - else - { - return false; - } -} - -Window* getClientList(Display *disp, unsigned long *size) -{ - Window *clientList; - - if ((clientList = (Window *)getProperty(disp, DefaultRootWindow(disp), XA_WINDOW, (char*)"_NET_CLIENT_LIST", size)) == NULL) - { - if ((clientList = (Window *)getProperty(disp, DefaultRootWindow(disp), XA_CARDINAL, (char*)"_WIN_CLIENT_LIST", size)) == NULL) - { - PERROR("Can not get a client list"); - return NULL; - } - } - return clientList; -} - -char* getProperty(Display *disp, Window win, Atom xaPropType, const char *propName, unsigned long *size) -{ - Atom xaPropName; - Atom xaRetType; - int retFormat; - unsigned long retItems; - unsigned long retBytesAfter; - unsigned long tmpSize; - unsigned char *retProp; - char *ret; - - xaPropName = XInternAtom(disp, propName, False); - - int returnValue = XGetWindowProperty(disp, win, xaPropName, 0, 1024, False, xaPropType, &xaRetType, &retFormat, &retItems, &retBytesAfter, &retProp); - PERROR("XGetWindowProperty %d ", returnValue); - - if (returnValue != Success) - { - PERROR("Can not get a %s property", propName); - return NULL; - } - - if (xaRetType != xaPropType) - { - PERROR("Invalid type of %s property.", propName); - XFree(retProp); - return NULL; - } - - // null terminate the result to make string handling easier / - tmpSize = (retFormat / 8) * retItems; - // Correct 64 Architecture implementation of 32 bit data / - if(retFormat==32) tmpSize *= sizeof(long)/4; - ret = (char*)malloc(tmpSize + 1); - memcpy(ret, retProp, tmpSize); - ret[tmpSize] = '\0'; - - if (size) { - *size = tmpSize; - } - - XFree(retProp); - return ret; -} - -int findProcessID(Display *disp, Window win) -{ - int pid = 0; - unsigned long *netWmPid; - - netWmPid = (unsigned long*)getProperty(disp, win, XA_CARDINAL, (const char*)"_NET_WM_PID", NULL); - - if(netWmPid) - { - pid = (int)*netWmPid; - free(netWmPid); - } - - PERROR("findProcessID %d ", pid); - return pid; -} - -bool sendEvent(Display *disp, Window win, char *msg, - unsigned long data0, unsigned long data1, - unsigned long data2, unsigned long data3, - unsigned long data4) -{ - XEvent event; - long mask = SubstructureRedirectMask | SubstructureNotifyMask; - - event.xclient.type = ClientMessage; - event.xclient.serial = 0; - event.xclient.send_event = True; - event.xclient.message_type = XInternAtom(disp, msg, False); - event.xclient.window = win; - event.xclient.format = 32; - event.xclient.data.l[0] = data0; - event.xclient.data.l[1] = data1; - event.xclient.data.l[2] = data2; - event.xclient.data.l[3] = data3; - event.xclient.data.l[4] = data4; - - if (XSendEvent(disp, DefaultRootWindow(disp), False, mask, &event)) - { - return true; - } - else - { - PERROR("Can not send %s event", msg); - return false; - } -} - - -void activateWindow (Display *disp, Window win) -{ - unsigned long *desktop = NULL; - - // desktop ID / - if ((desktop = (unsigned long *)getProperty(disp, win, XA_CARDINAL, (const char*)"_NET_WM_DESKTOP", NULL)) == NULL) - { - if ((desktop = (unsigned long *)getProperty(disp, win, XA_CARDINAL, (const char*)"_WIN_WORKSPACE", NULL)) == NULL) - { - PERROR("Can not find desktop ID"); - } - } - - if (desktop) - { - if (sendEvent(disp, DefaultRootWindow(disp), (char*)"_NET_CURRENT_DESKTOP", *desktop, 0, 0, 0, 0) != EXIT_SUCCESS) - { - PERROR("Can not switch desktop."); - } - free(desktop); - } - - sendEvent(disp, win, (char*)"_NET_ACTIVE_WINDOW", 0, 0, 0, 0, 0); - XMapRaised(disp, win); - - XFlush(disp); - XCloseDisplay (disp); -} -#elif __APPLE__ - -#include -#include -#include - -bool WindowActivator::ActivateWindow(int pid) -{ - - ProcessSerialNumber psn; - if(noErr == GetProcessForPID(pid, &psn)) - { - SetFrontProcess(&psn); - exit(0); - } - return 0; -} - -#endif // end Linux diff --git a/activator/WindowActivator.exe b/activator/WindowActivator.exe deleted file mode 100755 index 7f873c113949372bb2932634009154a1f9f2c426..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105984 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 sJF^BcyA49`GfoouVz{V*iyFA7fr}crsDX - * Juyoung Kim - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Contributors: - * - S-Core Co., Ltd - * - */ - - -/** - * @summary : - * @create date : 2011. 8. 16. - * @author(create) : Lee JaeYeol / jaeyeol148.lee@samsung.com / S-Core - * @revision date : 2011. 8. 16. - * @author(revision) : Lee JaeYeol / jaeyeol148.lee@samsung.com / S-Core - */ - - -#ifndef WINDOWACTIVATOR_H_ -#define WINDOWACTIVATOR_H_ - -#include - -class WindowActivator -{ -private: - WindowActivator(); - virtual ~WindowActivator(); - -public: - static bool ActivateWindow(const std::string pid); - static bool ActivateWindow(int pid); -}; - -#endif /* WINDOWACTIVATOR_H_ */ diff --git a/activator/macoswindowactivator.sh b/activator/macoswindowactivator.sh deleted file mode 100755 index 9ef0fa0..0000000 --- a/activator/macoswindowactivator.sh +++ /dev/null @@ -1,15 +0,0 @@ -#! /bin/bash - -abspath="$(cd "${0%/*}" 2>/dev/null; echo $PWD/${0##*/})" -absdir=`dirname "$abspath"` - -PWD=`pwd` - -ACTIVATOR=MacOSWindowActivator -ACTIVATOR_PATH=${absdir} - -# for coredump file -ulimit -c unlimited - -${ACTIVATOR_PATH}/${ACTIVATOR} "$@" - diff --git a/activator/main.cpp b/activator/main.cpp deleted file mode 100644 index d2b6a67..0000000 --- a/activator/main.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Window Activator - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * - * Changhun Lim - * Gyeongmin Ju - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Contributors: - * - S-Core Co., Ltd - * - */ - -#include -#include -#include "WindowActivator.h" - -using namespace std; - -static void printUsage(const string appname) -{ - cout << "* error : missing required paramaters" << endl; - cout << "* usage : " << endl; - cout << "\t to activate a window :" << endl; - cout << "\t\t" << appname << " pid" << endl; -} - -int main(int argc, char **argv) -{ - if (argc < 2) - { - printUsage(argv[0]); - } - else - { - WindowActivator::ActivateWindow(argv[1]); - } - - return 0; -} - diff --git a/activator/windowactivator.bat b/activator/windowactivator.bat deleted file mode 100755 index 0655f2e..0000000 --- a/activator/windowactivator.bat +++ /dev/null @@ -1,10 +0,0 @@ -rem # find & move absolute path -set ABS_PATH=%~dp0 -cd %ABS_PATH% - -set PWD=%CD% -set ACTIVATOR_PATH=%PWD% -set ACTIVATOR_BIN=WindowActivator.exe -set PATH=%ACTIVATOR_PATH%;%PATH% - -%ACTIVATOR_PATH%\%ACTIVATOR_BIN% %* diff --git a/activator/windowactivator.sh b/activator/windowactivator.sh deleted file mode 100755 index 2adf516..0000000 --- a/activator/windowactivator.sh +++ /dev/null @@ -1,15 +0,0 @@ -#! /bin/bash - -abspath="$(cd "${0%/*}" 2>/dev/null; echo $PWD/${0##*/})" -absdir=`dirname "$abspath"` - -PWD=`pwd` - -ACTIVATOR=WindowActivator -ACTIVATOR_PATH=${absdir} - -# for coredump file -ulimit -c unlimited - -${ACTIVATOR_PATH}/${ACTIVATOR} "$@" - diff --git a/activator/windowactivator.vbs b/activator/windowactivator.vbs deleted file mode 100755 index 3e63501..0000000 --- a/activator/windowactivator.vbs +++ /dev/null @@ -1,11 +0,0 @@ -Set fso = CreateObject("Scripting.FileSystemObject") -activatorPath = fso.GetParentFolderName(Wscript.scriptFullName) -activatorScript=activatorPath & "\windowactivator.bat" - -For i = 0 To WScript.Arguments.Count - 1 - args = args & Chr(34) & WScript.Arguments(i) & Chr(34) & " " -Next - -set WshShell=WScript.CreateObject("WScript.Shell") -WshShell.run activatorScript & " " & args,0,False -Set WshShell=Nothing diff --git a/daemon/Makefile b/daemon/Makefile index 53d1743..d08072e 100644 --- a/daemon/Makefile +++ b/daemon/Makefile @@ -45,6 +45,7 @@ DEBUG_ON := -DDEBUG=1 FLAGS = -pthread -Wall TARGET = da_manager +DASCRIPT = da_command all: $(TARGET) @@ -56,7 +57,7 @@ localtest: install: [ -d "$(DESTDIR)/$(INSTALLDIR)" ] || mkdir -p $(DESTDIR)/$(INSTALLDIR) - install $(TARGET) $(DESTDIR)/$(INSTALLDIR)/ + install $(TARGET) $(DASCRIPT) $(DESTDIR)/$(INSTALLDIR)/ clean: rm $(TARGET) diff --git a/daemon/da_command b/daemon/da_command new file mode 100755 index 0000000..12c13dc --- /dev/null +++ b/daemon/da_command @@ -0,0 +1,89 @@ +#!/bin/bash + +KILL=/usr/bin/killall +MANAGER=/usr/bin/da_manager +EVENT=/usr/bin/da_event + +print_usage() +{ + echo "usage: da_command [options]" + echo "Options:" + echo "killmanager terminate da_manager" + echo "killapp apppath terminate application" + echo "runmanager execute da_manager" + echo "runevent record|play execute da_event" +} + +kill_manager() +{ + $KILL $MANAGER +} + +kill_app() +{ + $KILL $APPPATH +} + +run_manager() +{ + $MANAGER +} + +run_event() +{ + case "$EVENTOPTION" in + record) + EVENTMODE="-r" + ;; + play) + EVENTMODE="-s" + ;; + *) + echo "Invalid event option!" + print_usage + exit 1 + ;; + esac + + $EVENT $EVENTMODE +} + +if test $# -gt 2 -o $# -lt 1; then + print_usage + exit 1 +fi + +if test -n "$2"; then + case "$1" in + runevent) + EVENTOPTION=$2 + ;; + killapp) + APPPATH=$2 + ;; + *) + print_usage + exit 1 + ;; + esac +fi + +case "$1" in + killmanager) + kill_manager + ;; + killapp) + kill_app + ;; + runmanager) + run_manager + ;; + runevent) + run_event + ;; + *) + echo "Unknown option!" + print_usage + ;; +esac + diff --git a/daemon/utils.h b/daemon/utils.h index ac00787..1df092a 100644 --- a/daemon/utils.h +++ b/daemon/utils.h @@ -47,8 +47,8 @@ extern "C" { #define LAUNCH_APP_NAME "launch_app" #define DA_PRELOAD_EXEC "__AUL_SDK_DYNAMIC_ANALYSIS" #define DA_PRELOAD(AppType) AppType ? DA_PRELOAD_OSP : DA_PRELOAD_TIZEN -#define DA_PRELOAD_TIZEN "LD_PRELOAD=/home/developer/sdk_tools/da/da_probe_tizen.so" -#define DA_PRELOAD_OSP "LD_PRELOAD=/home/developer/sdk_tools/da/da_probe_osp.so" +#define DA_PRELOAD_TIZEN "LD_PRELOAD=/usr/lib/da_probe_tizen.so" +#define DA_PRELOAD_OSP "LD_PRELOAD=/usr/lib/da_probe_osp.so" #define BATT_LOG_FILE "/home/developer/sdk_tools/da/battery/" #define SHELL_CMD "/bin/sh" diff --git a/packaging/AUTHOR b/packaging/AUTHOR deleted file mode 100644 index bd2e3c1..0000000 --- a/packaging/AUTHOR +++ /dev/null @@ -1,7 +0,0 @@ -Jaewon Lim -Woojin Jung -Yeongtaik Byeon -Jooyoul Lee -Sanghyun Lee -Juyoung Kim -HyunGoo Kang diff --git a/packaging/LICENSE.APLv2 b/packaging/LICENSE.APLv2 deleted file mode 100644 index 5554685..0000000 --- a/packaging/LICENSE.APLv2 +++ /dev/null @@ -1,204 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - diff --git a/packaging/LICENSE.GPLv3 b/packaging/LICENSE.GPLv3 deleted file mode 100644 index 94a9ed0..0000000 --- a/packaging/LICENSE.GPLv3 +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/packaging/NOTICE b/packaging/NOTICE deleted file mode 100644 index 0905546..0000000 --- a/packaging/NOTICE +++ /dev/null @@ -1,7 +0,0 @@ -Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. -Except as noted, this software is licensed under Apache License, Version 2. -Please, see the LICENSE.APLv2 file for Apache License terms and conditions. - -readelf_arm, readelf_x86 file is licensed under GNU Public License , Version 3. -Please, see LICENSE.GPLv3 file for GNU Public License , Version 3 terms and conditions. - diff --git a/packaging/activator/MacOSWindowActivator b/packaging/activator/MacOSWindowActivator deleted file mode 100755 index 74f62900d01ba3f7bdd5e882d675227aab5d46c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15260 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 diff --git a/packaging/activator/Makefile b/packaging/activator/Makefile deleted file mode 100644 index 642e0f0..0000000 --- a/packaging/activator/Makefile +++ /dev/null @@ -1,20 +0,0 @@ - -HEADER = WindowActivator.h - -SRCS = main.cpp WindowActivator.cpp - -TARGET = WindowActivator - -FLAGS = -Wall - -#LDFLAGS = -lstdc++ -lX11 -LDFLAGS = -lstdc++ -framework IOKit -framework ApplicationServices - -all: $(TARGET) - -$(TARGET): $(SRCS) $(HEADER) - $(CC) -o $@ $(FLAGS) $(SRCS) $(LDFLAGS) - -clean: - rm $(TARGET) - diff --git a/packaging/activator/WindowActivator b/packaging/activator/WindowActivator deleted file mode 100755 index 8fe08760802b74c557d75ad28d9a49e35aa6546a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13885 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 - * Juyoung Kim - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Contributors: - * - S-Core Co., Ltd - * - */ - - - -/** - * @summary - * @create date : 2011. 8. 16. - * @author(create) : Lee JaeYeol / jaeyeol148.lee@samsung.com / S-Core - * @revision date : 2011. 8. 16. - * @author(revision) : Lee JaeYeol / jaeyeol148.lee@samsung.com / S-Core - * @refactoring date : 2012. 4. 14 - * @author(refactoring) : Jaewon Lim / jaewon81.lim@samsung.com / S-Core - */ - -#include "WindowActivator.h" -#include -#include -#include - -WindowActivator::WindowActivator() -{ -} - -WindowActivator::~WindowActivator() -{ -} - -bool WindowActivator::ActivateWindow(const std::string pid) -{ - return ActivateWindow(atoi(pid.c_str())); -} - - -#ifdef _WIN32 || _WIN64 -#include -//#using -//using namespace System; -//using namespace System::Diagnostics; -//using namespace System::ComponentModel; - -ULONG ProcIDFromWnd(HWND hwnd); -HWND GetWinHandle(ULONG pid); -void ActiveWindow(HWND hWnd); - -bool WindowActivator::ActivateWindow(int pid) -{ - ActiveWindow(GetWinHandle(pid)); - return true; -} - -ULONG ProcIDFromWnd(HWND hwnd) -{ - ULONG idProc; - GetWindowThreadProcessId( hwnd, &idProc ); - return idProc; -} - -HWND GetWinHandle(ULONG pid) -{ -// Process^ fproc = Process::GetProcessById(pid); -// return (HWND)fproc->MainWindowHandle.ToPointer(); - - HWND tempHwnd = FindWindow(NULL,NULL); - - while(tempHwnd != NULL ) - { - if(GetParent(tempHwnd) == NULL ) - { - if(GetWindow(tempHwnd, GW_OWNER) == NULL) - { - if( pid == ProcIDFromWnd(tempHwnd) ) - return tempHwnd; - } - } - tempHwnd = GetWindow(tempHwnd, GW_HWNDNEXT); - } - return NULL; -} - -void ActiveWindow(HWND hWnd) -{ - HWND hWndForeground = ::GetForegroundWindow(); - if(hWndForeground == hWnd) - { - printf("same as foreground window\n"); - return; - } - - DWORD Strange = ::GetWindowThreadProcessId(hWndForeground, NULL); - DWORD My = ::GetWindowThreadProcessId(hWnd, NULL); - if( !::AttachThreadInput(Strange, My, TRUE) ) - { - // ASSERT(0); - } - ::SetForegroundWindow(hWnd); - ::BringWindowToTop(hWnd); - if( !::AttachThreadInput(Strange, My, FALSE) ) - { - // ASSERT(0); - } - if (::IsIconic(hWnd)) - ::ShowWindow(hWnd, SW_RESTORE); -} - -#elif __linux // if Linux - -#include -#include - -#define PERROR(...) fprintf(stderr, __VA_ARGS__) - -bool findWindow(Display *disp, int idepid); -Window* getClientList(Display *disp, unsigned long *size); -char *getProperty(Display *disp, Window win, Atom xaPropType, const char *propName, unsigned long *size); -char *getWindowTitle(Display *disp, Window win); -int findProcessID(Display *disp, Window win); -void activateWindow(Display *disp, Window win); -bool sendEvent(Display *disp, Window win, char *msg, unsigned long data0, unsigned long data1, unsigned long data2, unsigned long data3, unsigned long data4); - -bool WindowActivator::ActivateWindow(int pid) -{ - - Display *disp; - - if (!(disp = XOpenDisplay(NULL))) - { - PERROR("XOpenDisplay error"); - return false; - } - - findWindow(disp, pid); - return true; -} - -bool findWindow(Display *disp, int idepid) -{ - unsigned long clientListSize; - unsigned long i; - Window *clientList; - Window activate = 0; - - if ((clientList = getClientList(disp, &clientListSize)) == NULL) - { - return false; - } - - for (i = 0; i < clientListSize / sizeof(Window); i++) - { - int pid = 0; - pid = findProcessID(disp, clientList[i]); - - if (pid == 0) - { - continue; - } - - if(pid == idepid) - { - activate = clientList[i]; - break; - } - } - - free(clientList); - - if (activate) - { - activateWindow(disp, activate); - return true; - } - else - { - return false; - } -} - -Window* getClientList(Display *disp, unsigned long *size) -{ - Window *clientList; - - if ((clientList = (Window *)getProperty(disp, DefaultRootWindow(disp), XA_WINDOW, (char*)"_NET_CLIENT_LIST", size)) == NULL) - { - if ((clientList = (Window *)getProperty(disp, DefaultRootWindow(disp), XA_CARDINAL, (char*)"_WIN_CLIENT_LIST", size)) == NULL) - { - PERROR("Can not get a client list"); - return NULL; - } - } - return clientList; -} - -char* getProperty(Display *disp, Window win, Atom xaPropType, const char *propName, unsigned long *size) -{ - Atom xaPropName; - Atom xaRetType; - int retFormat; - unsigned long retItems; - unsigned long retBytesAfter; - unsigned long tmpSize; - unsigned char *retProp; - char *ret; - - xaPropName = XInternAtom(disp, propName, False); - - int returnValue = XGetWindowProperty(disp, win, xaPropName, 0, 1024, False, xaPropType, &xaRetType, &retFormat, &retItems, &retBytesAfter, &retProp); - PERROR("XGetWindowProperty %d ", returnValue); - - if (returnValue != Success) - { - PERROR("Can not get a %s property", propName); - return NULL; - } - - if (xaRetType != xaPropType) - { - PERROR("Invalid type of %s property.", propName); - XFree(retProp); - return NULL; - } - - // null terminate the result to make string handling easier / - tmpSize = (retFormat / 8) * retItems; - // Correct 64 Architecture implementation of 32 bit data / - if(retFormat==32) tmpSize *= sizeof(long)/4; - ret = (char*)malloc(tmpSize + 1); - memcpy(ret, retProp, tmpSize); - ret[tmpSize] = '\0'; - - if (size) { - *size = tmpSize; - } - - XFree(retProp); - return ret; -} - -int findProcessID(Display *disp, Window win) -{ - int pid = 0; - unsigned long *netWmPid; - - netWmPid = (unsigned long*)getProperty(disp, win, XA_CARDINAL, (const char*)"_NET_WM_PID", NULL); - - if(netWmPid) - { - pid = (int)*netWmPid; - free(netWmPid); - } - - PERROR("findProcessID %d ", pid); - return pid; -} - -bool sendEvent(Display *disp, Window win, char *msg, - unsigned long data0, unsigned long data1, - unsigned long data2, unsigned long data3, - unsigned long data4) -{ - XEvent event; - long mask = SubstructureRedirectMask | SubstructureNotifyMask; - - event.xclient.type = ClientMessage; - event.xclient.serial = 0; - event.xclient.send_event = True; - event.xclient.message_type = XInternAtom(disp, msg, False); - event.xclient.window = win; - event.xclient.format = 32; - event.xclient.data.l[0] = data0; - event.xclient.data.l[1] = data1; - event.xclient.data.l[2] = data2; - event.xclient.data.l[3] = data3; - event.xclient.data.l[4] = data4; - - if (XSendEvent(disp, DefaultRootWindow(disp), False, mask, &event)) - { - return true; - } - else - { - PERROR("Can not send %s event", msg); - return false; - } -} - - -void activateWindow (Display *disp, Window win) -{ - unsigned long *desktop = NULL; - - // desktop ID / - if ((desktop = (unsigned long *)getProperty(disp, win, XA_CARDINAL, (const char*)"_NET_WM_DESKTOP", NULL)) == NULL) - { - if ((desktop = (unsigned long *)getProperty(disp, win, XA_CARDINAL, (const char*)"_WIN_WORKSPACE", NULL)) == NULL) - { - PERROR("Can not find desktop ID"); - } - } - - if (desktop) - { - if (sendEvent(disp, DefaultRootWindow(disp), (char*)"_NET_CURRENT_DESKTOP", *desktop, 0, 0, 0, 0) != EXIT_SUCCESS) - { - PERROR("Can not switch desktop."); - } - free(desktop); - } - - sendEvent(disp, win, (char*)"_NET_ACTIVE_WINDOW", 0, 0, 0, 0, 0); - XMapRaised(disp, win); - - XFlush(disp); - XCloseDisplay (disp); -} -#elif __APPLE__ - -#include -#include -#include - -bool WindowActivator::ActivateWindow(int pid) -{ - - ProcessSerialNumber psn; - if(noErr == GetProcessForPID(pid, &psn)) - { - SetFrontProcess(&psn); - exit(0); - } - return 0; -} - -#endif // end Linux diff --git a/packaging/activator/WindowActivator.exe b/packaging/activator/WindowActivator.exe deleted file mode 100755 index 7f873c113949372bb2932634009154a1f9f2c426..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105984 zcmeFadwf*Yxi`KiGnq`nz#bsLAW?!uMS~g%Xu^Od!i1m%Cj@4Qn1B^9oq9poJ77z0 z?u=%$oTEKztF5+DYL9LGozhcLynqQqGXW_AQcDFjYTB-GQjMC1Ad&rkpS5R_pxF1k z=knhVKC>@tugkNZ_1xC8p0!eT^TU!=k|Y~`h9OBiai@Pp;`+}o9G^!`etDGieEJ`z z?6fTU!<3~p-`#n<%>~F2fUa#Jj{q4K5=igM3edpb)*IY4j zWJXS+>Ztb@>$RMYDal{=691G(@ZP=Twkf|6_is(WOq!AYA zIYp9EC3+vaOFei8(pp0)z+X|5$VhpqfVdCdC{fy6Ymw&AL#su4-mHq=hW;J0NSjCF z^HmlpYbf<=Pkfc-?6Coyi_TSFqU06InoSCxFPex<1Q+#{27B1QY)M*m#roB^Dz{2f zPZ>T?-xuS40q(>86#*evnAxQ6e0*rc_e|XH_*%Z!E7osVe;YoDzM{{BLy;f1Dt`j0 zeO`w}N%!;B*GQ7K*T&kbtM=H;yp%ttCQH(rD9^kOzmI*&*Wydm{xB*UR>-WMUpK7g zjC0pKSfAF_k1Dm!30k*XFLttpuBjdVfZTipm}snXN=kZA3Q9cxT1nbXgwxk%Q|9mm zV zM+M=fIgTZik@ZsrZmJ+-u!8wHF5lNGcn%ft{bNveQI4a0sB9jUJ$O~J@ufMgC0{GM z4rNzXv%ggBaU?NJ_zJK(M*s*NhnA!EE<)%6r(WV@H@Q~oi(OGWL7u?z@ce&4Yv;&6 zY&67p1&x}=FDaH*Zzam|Rrmv2SKVJM<^SFn_V%vcMu|1006yQSS@&qMq}L7bYeo<) zI9N|GgB|3jz}n2tifq5LH{X)yR41_cc?HbHI@t9yjYC?$p{Bk@5{Hdq3vJeeAwwC@ zik%~(+PwvmYSlVyLCME6&lsp5&4@<$A0d^8TKFNgFrHm+%Qyb(E&RuqXkqhU3meXA zVb=dd3qES$akLO#=2%km^k7pCvne0{jZ^f>$NSQUcW)=CRv_@d)4ewb3`48Sa;c!H8YUdROZsX$&h@R<8hMMNGCDynU^3&0}6C%fmZ6z}ln5nKH^n zi-k7R*ErfOQh1YPi>s*lhhtpkSPuMU^jh1SmES5TH^R!CtlY--M7{l@xVM*D zZ})ad;dK^fY;hDd??dr+-;!`y7oUq7n78XSYNN2Oe}gsb?eg)D0KAW1H7bE5{zE+B zD|M}F34a@GfUd2~ZzWdwN{7%N^dBOO?FmFn%pR189<1%q}r@GpWaW1v7MOPK%8+skr z)lSbFN*Wst+BOb>wZJ3Aw!+QeA{ksX#}mcJ4xW}I5c(oN+SXFm^$JNky=nl+Obvg} z8vkCqcOZo=0^^nEXtO2d0#-azE0F5P8xFQGhgrfti#~cwnWM!azt9$U$}e~wY_yME z?=(5o8s3zO+Tt^rx0|7a&DsGT1#b>Asc5jm$G`K1VIb$uYsVK!5rz)caj@nM-^kb= zNC5Enr%F`0Yib=DS&}t@e4}rEp40wc zlQzFNWf(N>5z=>!bqSn2q6yQq4_BVp;jf`6s3fe zA!Zgzg48hJuV7U~@S)>MC0m@SopP;>t;dQDnW$?CrJ!!J3Io zXT1(eucZEJ9Kv_`H*w#o1kza=$fs|9L1v0loZp8BlZXnwqOx`il_e7^ybx!5D)OG70ST^|9=g30ICFgpOD`AY)V`-Jf61X z*!=PWv{2{FZ8OIPIQ21qW`*_zG2aDXzIV;X@pybIH){Q}&-$MAaK#e->NFY`7ciF_ z6}T&LtpIzBYPVSung~32aQNFGDJ9{7d|5R_@6guYNb!1IH!Nq?qaBpBGiPdTtS5d6 zTba4@*T4GJuTK7zy?!`$_#@B$+Oa!fd>OfI;h7UX$7)k|(_4OPc(FzI4tP3h$7rXF zjbqCB?pz@NA(B#cuOnU_F5~zei+afqAo0&GhN0L=hV`;zOQPOmVg~UOXix&7tXubX z6+sF5v^F=XD!vV6P|eQ!vq+BsP_>IyIU&T((;A?EZ7dC_i&pqh8uro^Cb7|%5lk-U zZ(Sx}!N>MANl()^X6h?l+8GxJy1(5v8Fc;?yN5)Z+AW0B2sVBRf6S~PD4ng`gA&Mq zbI^7I?HGTIyw>f^Z-siAO{f@I&VOf?4z;S&!hkPa)*JOY1Qxn4N@Ag`w>;|Y6VQ2K^>$Om;ZjT78eS+R&964y%OS#juq9^Xu=z8x^NrBH z&F44RFgz1HZ)_ghkm~XBT4%18PkMtL)62TzsrkqCsxG#4MuDy#3mt)CNn!g@gK;D& z8A-8fFfk<4`ao4=edzs=b7XysPs02-ff8U*3D!r(%OogcFW@3fkokF;7twrQ>n~Dn zVK7O%q|J)~)^Vj&OaQjbzp9ArpM;$%E>nZOV~2!65|kht~xw_lAC{m5hkp#kH(CfNFM>d}aLfEHd>SZVNWw3l}GjiX+gI?AhPfO4_%^hJHt0!RkCM=(S zW*PteAHset5;n6S&CX$@`HCP-3wrid(v+Kjj_!h=3hTOSZxYlUcIIsog5fl2-H zzeMr;H4cao!J{%r0c{f`UkZ$gL82cWFw`zEM-GvDmumC;NqI!{*PJMSjnHY{0V+Rk zQhDSoD*xffLsUN3O;mm&LFG^N{XbLr*<7nSfSOnhh!LoXeGIDlr?fcIghbHd(-)ew z2n@vLqI^>Sp#tGwvQGhX3r7{~pQKX?^hy>Wd4!B{bFPA4qzBg9Y&Lg3J)d8MtKS$m z4L1mHchKfH{)7iP>>cp=jW;3cJ!Jz*W-tZmR8l>%vO2$2Oq_+4^|cA7F)j~vdD_)c zH3!IOn+^F7yCYIzwgo_Z#+yOO&-!t*uwxYgW88ETh#d1a6Str=EIk_uD_4-^A4~_V z1$d1xgA@_uo!8;<*+6pX9*3Hm-&zz;$#12;n;F37%bdDPFSQ9*984Al`{ z*1yE?IU&*i9oXDQ8d21WDobt1BYC{eVRhnju`R-i9g&^e8;00gJ zj~2CSB{e4~h06x`?Gu1vypA+d3mz+$w$eqn(-#$An7w+RiLP=KGfT{(^b#9fQ5$SU zdWntlE=1Z;&Hy`QX3e0i3rLHmi|nQP0vp?CJNfRUzLRgE+|-j?MiwH5eUYf;Nq~>m z&=Nl}5eAK&KS~vJ@b3b}$P;1d5O|~cV|YcK4(0+8bQoh21Dfu~WYBYubAtnTX147# znjpuC1;v?4rU22ijy@J8KMFb*cpe-H0)a*%0(LliBv^4Ca}chn6@3){D{&v-7UWVM zwfr0KsHB>|{neUDAa%Pc*q{CSJX_e?6Yxc?uTo`W#zCll z4;JS$&pcE43>-p{6=KwjGefQQ8OA*>-cF+&xi_7jd&RTp4f!LqHV5Vvd&VL|C$@eS2%@j3n*)y413!RVs*d!01j5}=FBgS<49Ig=L+%j_~U1I1ChKouDQgyE!<1U)A>q*}95(K8Gf8HY#6%AB!;|O!0OF@!Fgw|iK7QbGw4+@tC6Y0VD~Q?$00<^equ3k# z2yCeU{}L0c%9Y{8w(8hc43O4li)~Nbe@pic1Js+}ntvpM#|Ue~CJ9$a4~*~}3xx9BeU1q(GS1Y&+G*j@MbV|r8Qb;%FXRHPxj(Cd`%e;kh$e!?2N zDZ9|3q_PEhOnQR74P|hAb1}@9KE+d5n&m-E+~IqVdb?=Fj{gOu43hTqabtitAddeG zO@Y;dww;eq%e|QHiJ0I!=V7|If-nevjE z0zq0r8W(x~%}lXjo;P4%1h>hkcp6%c1gGuXN$qZ?cI%+ldPs2GtX(Im%Ytq`1(UN% z_!CIop{nT+(y*3G-JyM|HC&nnN5ugiCH+_CfJqkh_E-qyD=>*8W~bKrkfx_84$3(J zR2ocK&i@^aMbP7SspXVpk0G5*$;G>{`b{lD@;*&^6fLJi`N!cI6f)$XUQ)nE3AM|= zMRf@YM05k{lOJtuDe<+JER=X0bO;_mad#L*zu2WO&J35@^pb47Bu8JIr!StVmn_{X zK{#t`=SzCYBBAqwnLBeX0%SEXI>~(L<~L%cgw3*1K7jSo97tvm2j2lRUYKGb@>%x7 zGg}5hW@BgKUNQ{5JwE;*U{qIC9$2%!gW&S?EAwNdh5*8|CjrjgkFwt4xi&(+=kpv{>@>GI#*VssWm{`lYlS zVh06cGo+0|t@oxvjZ_2Bq_QG~0gG)6^XIWKtPKwHJsVO@QD`<47e+tTx*i6`p4~d2CYa)JVLTl@JE6p^P)M`uUPN z0qedad@WTYc!MB`=2j3&B<^O5v%@8&P$eVS!4@|k0Tzk>jj#v*Y-0XF#u{Pe6d}rn zf_Clp`7rN6G8^Y}`)Mq?2m?0B%iAGj$WKeWd|X+nc_j7bpo1?X6S}8T$J~*)xlg%r zh?@aRTimL(X2I!pfd2!FOWIl+d_01mVM~E>!Fhdy44rQ>bP3ufhJFVvnnXngL&;Kj zeA|?ng=G#*sg^lMEOV*Wpsf<5hG`6DE;B(!+Fln-a@g%48%U(tFjH7NaW}f+ByngV z7W@k|rr@KdUVsF!eY_eu369EeSr6;spM4ID5q=0cZe9UMNSr2E_!*QpS-2$wy`SYs zvT!RNh=o7`cDh==;S{!8ItEl-Xe;)88 z5JfQ420*ngA%PjSYV=p zCZ+(p>|lja>*6oKvzS~!NUT{6TQx}7)TF2X4x~apYHR06!E7d^ss=E$`U0t?q)2r^ zqnL37XlDOAh9Oo9p!BbYJgO9;QUEI=DIgIr4hbk9wG-L{e9hkkY}o=fOxpRRZw8HK z8$rj;6*TN0)5-;{>*lxW-X2(!$^_W=Ai`*g<9X;&n3xIL6swk~K5Da*^^Mn38!&4< z$j1Y-(684+yb?i8-}!5*`Abo=;OG3~o``~FoNTrj#wbg-c3>d_D_h&Swg6Kwq^4}xhbD=`vpW4iQad>=e?(6X=` zx>~A^!hVQ7f;V5#5-vN+-Gt>j4$I~!gCGohkFrBnZx>rUpB09yIx50dNAY_TzXKIm z(Jxu#GXgGxck^xe`-(kn^_OVW5_!Cg#Kwq+(vjwsem^uVL>9R(WC~|8YI;m8dTw1Dp zXU1`Os|2?1e%~;*MB*!f?RYyG2FbbzWvuQ{Zoe{lcoI4lAP??M(2BsKr(gYDWBo!& zafg5)1qccVF!>TlqS$J@|IQMBWV?mOAqFBzLVJ{CLKRpXDnQN1Z{>eL0!j3e9OlS3 z5T9^9E1Ah$*2A9t8^#dHiLc?yOhR!d|C5~dCr>LFeR zhN3R1<3W7MaeMJSL4A8beb9h$E`&`v`JceFf$-wee525zj@9ZiE$T=@4`zMlTo1@o z)&g%EK|A0`%<-Hfye`#FSrxaTX2R(Jp@GKvaT9##qFG^YzmJj*3u_4}Q&B}J=>^QA z%K9;HVr2uEIo1bjT}TtFu$hAXSlFZh?TVJsnv0jwKfXCVC)H=ib8R8#VW z(C8otVdUTyrc1T2rFtR17wziRrb!JrV8iLv^Q%{ov44!D!8n-nVtNy`-vV(?8eJHY zsk{?QLXGu4_}qZ>`-nWusmjHl7zVFHu|fNS{{~-^^UoZzlM~*ZSP>~%vhe(-a`oUn zYVSZpgZ>|U#Hu6uk4a5pjgdc;4rShY2ifDjn8WlQMFH-Ck$zx!WgjC~)K1_2X=T?_ zWdlQ%by8&?V?uLQWm`pM^lf-$q?0$}OR{qdNY5raw+N=VfCoN8ScFb^(Z}#_&qZPp zI@8Mw@EC_3glBTf*7ZV5_8^W2{VaV=J2g>$paU{MYt4?elB9)f3cMy+BnfN&=c6uH z1^-!r7*KUg?0)26C5}GZa*I-jkCXJO{>ca1eH3Vq@(38+d3U1+E%Ve`k4J3#tTqjBVVkY=i?=q zQbYZMLz?fvYh|TgLQ}xWH54q(=b>(Jxr3jAc7_`!TH-`zDemN#Qmbp7DCi)ZgWdu) zl7Q1Gaef&n`PL4UVeC6Y{^f3ZIA^$O~K6L6Uo^M$BcO!_DxYET& zPN!)q*dFd48(G%dC}C*wCuU@$dHGjrN@OTE9rxwnwVFJXTcyc0}1JW0`~h2TaJ}9R)SMV{CNrqwudLrvdy;)WMgd%E9`d1N%}BdiXi- z?(4zhAj1`=!#y$M6Oq^75-kC+)SVweP|z&U7harc3P%diCKU#VW)J1#$cH>xyc&Ze zNZ9nqAwm&M2j|CPceDf{F(k=)kQbzmfM>nLRYN6pOG~khPesv$%)ww?ijWw-65=Z% zwW$=jrl<~nB@o3*+(d5Z`Sla1=WE@ln|$xQ1Eow1l3d%4YLjy9ZU=G>wIK-NG?pI( zG3ECmD63t)%TGf=-fNMns{pJS7EvFZ- z@}&ghL4DRt3^Mop1=Z2hwnexk$NMofg1MP{2ws|NZ=4>NjanN-lEd&j*wq*$(B9w8 zsWx07n9iVE2dMdyX~2NY3Vi%AOwTG=6vhv1l@M40vHV^avQF!}Z7xBTnBv+F3GF-o;LnbEl%dxA! zS-<>L=$AhLbd6`nevdopm!{Jshc`?ywMzssOJvWCkNpdEQD~PGxw#21!!^t{1oiwc zY8aseOfB=dh->>NT4qqmXmh7Q4@j!LD)z^D!hvgyq!g?Mk*JEqCvT;1 z%od_|Bb8o!SkD$(K}kViu&6C#{V`C0Kj;P#y^;!@1nqSta6wMtgxActnqQ6-+^$82 z%F5~p)(~I?Kn36d=oG#Z|D(T=do(lGd@UThkB@VHcg>Hc%kViP8>;w#b zGV+A{O9&6sJ_EG_2+tYieEtg%x2P1hy$!2he!R!+u!m^984krEpBfo|K>Z`g5Vhw} zSIuaLsD+w}RS}mAnUZG%!JFx;nLhyn)*q=HzX)HFVy?xCKAn{fxImjf|7x2e9wG|o3J)^*xK$nQ|s{b%lADECTcp>h~ZwJrOiFI4V0*i4fwUc$=Y9K&zb6#YHI8x zFn%(M_9Qj4EtaBvU?ov;>F3WFIgdT)-RJYery>egV zVe0YlXS4T-6u@{EMu3iF-mr4jKzMWEKw=DXhQ?szm!Cf~fOh9BKr6<{KLgXK>! zi5P{JVL2ZjmJdBZ4-;edu~qwoMpnL$xMo-h)ZGIZ`tg$hm;*l-es27-@yo{#xXuEu zvv7Cg?#4Y6_e|VfxVvz7;_k%Vfx82D8}7EV$Hv6bBGk7Ozt#9{qPmk~Q(^@MhK+@I zM{kFX1Nw$MX4+X}C)l(q_7hAOnSmgUJYv?P=nySum_`!+a2W5BUO$U>(XQ5(UaqyK z`}ioZ;K^f^lUgf_1_cVVW_%<`!4`ZZi%6!IF_@Im%U}0J`cgUcf#tOmxbCL-Rdu>H zQY67kg*Ykp2F$9N1lC4)5^F|Z3WIDGW#$2xh?M~{hl0@YW-u_;mdJhm7!VhY-XCa8+NhmHiDHILtkihi&J@!zfaeTAw6%Rn%)#_>EPMJ3p}5`VKC0s;=s zmHZS|JcHRQ;8+VO5`dUmWY+AYUT#M}(8pQ)cfj!ozdvX}xYr_RyPah>OVZlH zRP2wH5Nxe>#joBv2hUAADTTH&s~^2I0@8MEVT&6n>IrS9g8Qi2Hv!Uijz{^iHpKk$ zCs)I0X;mG;EKZ7|lDlq8B)Iq@k?`_L-~u?ivx+|4>j+NbIex%tj4K5s+qwW7fB6I_8FKNvDiaCm{O^(VDs(Q;gT#;irS8M8`p z=s0mKwEhrMSU_#P0Tj=`OFL6)Ad$UD3wv%mE z440C##iF%Y;ObgzCa9laKwvohJZIRASzb2IoT;}S(t3>iJqTC%rDU-*DV!A#pyZ6^ zE+yxepaUpE+$2LuiT@#7Y)~t?ZHUP^Gx+r7;L||jDH-qh-_o}ac)nTRy2>E4&Y^E} z775v&jnAZSe~#COXX3I7zh?Xfb?86Sw^TXg@nGI_>s!k8&H6S`M;bEqqTO!%y6`)J z-%*TnZ8Zby$Vg#;I|IHP53q9*Mi@}_-(@vWAi_t zZ>ce6yo&2y{Ep(sDdm4m-)i02s0=e@N9FGM&}`wl&d;9_j&J8mc)hEk7@d8RLqU{! zuT=B|)L<_n0(%gFZK$2bI3FbCP;_erocLNRdCOO`^GQ@NtGSIDO<;=)yK{hH(W6sD zMlP>>z?Nfl3e8?lfy=AeEGhztj19EEy{QPkA@cvLh|6&B@}sB>fi2jj(fK7s4HVl} zGbnDPBJ9VrS{Kb>BN_n%TS4n~pvnP2lHcm{0pfw76$Mmx$z&3L+2|+jU4xq+yJ<}u zV}LCD#g6=gJOn>E!k3NOOrsV)99oX3g*(T=Kf-bu3J=Z23o4rG98;l`)G<3h_F;4Y zp9K*hvF(6QTXPIj`owwVMUqgS*f*4qEi9c_S%4x&pJ+RaH%rIvQ!fDO(bn{$Ouz8E z>uY-TJNs8}rGDz(V`1+x6P;0S2U;U4(7gu`7NL6&aSp}F8XHB+CF6D8Ox3$ zv}H{P*3$+gWy0XFu&QIaHG#EwI!ji}yd5i&F~k)Egz!>FewmZs3(r4|A)$Y*G8!ME zML7fl#bMtO4?Dhzw8nRkE)=e8{Noou5Mtqp-^E@>}t!6S)bX79#xu`sTt^4p-+F-Kd>+P~A9 zX+@x8sjV*6Q|hQsrSItmws}@LD8d5%xjJAkvqaCM!Ek$4Iyc%ppVy}HY^owroM_6V z4S-Hw8#nKk!NSb+hx?!QvXd(KkBH@*>9|D~!N zu~t3#f8eiRYenoG0G60WsE$zIrgZ+NDy*#JZBF9{@xb!gHuG}?^Mt~z5~XrIWK_pW3$Lk3mCIH;5#thGG^_?9h=vx28_2@kLPpwz9yot zGr6b33lPn3Td!8|V+8LpyjOaTZ7AI-!L@^j6c({YJdyRX52)qa1bk?Ce0ZJ zVdX_;cned5?&Z}Hc-bk!46~bKWcTkxpZTm(l8OUjDnzpm1TP{Y^X&P@QDltpOyo5A ziRA8!z$V3RVOm#;!w=Zf94Fa}h}Hgfe(M$-cS38^O^bzz&)>3AZFK{ECC(!CZa?n?8Bkz| zGD+({gFQ}%+P+9-9oqYo+upZZosYHt3}l=7QqKd$QeSaSgL)}tok&?T(dSdCTIb}p zPP^3>HZ$%N8H;inl}!F3+D(9PGl5XnWfazRsS}OGwoMrfaW|G?eN-I5MjoJe_$WGw zRxyhlg+Ab<1jN!lNE?xqI+SNa@5 zyNN!pB@hyQo7$XGz`raW z>;)(jQyn3dp!cvl?=ysqJ&O?c=GJ@v_H2s!A+18F7{m*Sj+ot3;=n%2dgzyZMY`P> zMUXPPl3w6e(vT4U9b#WfoCcP!J3oOVfDYq{h$ZFtk1@OjG`vU9WPU5{DtN3F{4kCq zF^SaCcq9+TbW;8_k%x6cq5y`TgC8SlFdUglcf{{e3PRP%7f}gp%hKT9-r9*7x<8l+ z8x`W2R*vI#PkUV&Yu`p+f;Jyt4pXhNa@z?AQ)IdTo8I(U^o?J4)`!&Kd5~54M_!_O zH)GS8y5)dbw1G=%1%& z{e?|uTxfgadF)`W;MF!)IsY@pscErOYDCxK8CrWbq%SQTB*hEtG_60gZoJm&^6}?L zM|ho0rDlGZ9b}|P7Hv(DcFkF_`Ws&c;l%Qwdj|$pr#aJxhcS|%|(cI{qz8i z*m1z{sr2#lR)b*nIw2EflmpQsXyHpxT|7-&?9A3)$7v=d2#-YgjGZ=JB@HVy10{sh zyU1jzj9=;Jo1s3)&nF@TC!Z{FN=0Zk)6ajp97{X=eza35Jcee3EBUIH6E)keO9(5y z?gV^1H&f3be)Ie22pd67a#%wnf@-iTURa=1GpVo0sVRPRqejql{*mkTWdkA$Obk}) z>}%7MD+`x7)X_eE13^Z_bAjRQicc)8bEuhg5|`}bS0+BG)^s?4Z~zsQyi^izMm&$& zDXKGOZuj$hL?e-;7KN`42EPMFd6xoj>$qDhA zMmeC>Xp)4OEA6yRNk`c1DD8BS`X@Z3(u2(EGQ$hb%mqXZwW;yf@T&do46JuQKL}e> z2oFEsiqEjJZbRoPo7Or%-vd)`v9m8?Q$}d}Y~d2@YF!z>9CQlC%*IZuiO7gYr;$1U z*B;6E_yu4ohYcbmy=fngJe2gsPQBhui|=+Kt|VrY0%<0I7u|n_pfH6yNIMfWXUlJm z-%8ejI+m+*;BOmWt>^KHc!KR$N?V+i@z_AMel+xli!eC$@4_1xk3zuFJk!CaAk+>t zFY>-Zo2^FiT&n59O2mqM8vl>r_~l7%N2C<&aD=EKnBja;V1fz81l|t^SOV8S#$(cU z!#ODXln;RU{39n%B5rr%Tk>z}T;K;M*ic9GTwO1F4^b;6n4k93?(}{-JrQx0&9Bi& zEp|4&FBtYpbL+}9x#c&Mei~=);0Ow=#SdUL^tx`txU}A8xfb2Xea})i5WmS&)xZ8G zG(E!4KP7R80jSgJ`cYCz&p*NQj<0lhPL$^=ekMY(0HpC@}aQ#67CD|KzR#WZ;BY|QvGy^;RG$Tc= zfjWm&#k(r|xdzNzyw1we%Ut>3tYUzNf(ZV+*P(R|kn|n@tVJ2~tV0>~O9@<~reSj? zX<&>WXc|V(4de><@mfGMbq{(@gD8VDM)6w#v57jsh~-`q8J&diAL9d=4Ycq9;uy!T z8O+JwE)Y0~UoVIoaGxQ#&!nhtQ@EUfcWT(%nFlLV!VJ zoh4bv@r?YjYb8p*lXQz4@?_7Y+Km9PcONu$mFx`BE5_XD&`VqVhZ$=BfkrO89s>vptW&>la z&P4$+4Yo#nY_Q9_H#p)}wgIl9F3zY_Bb6e=dDKkhTW}`Tr+PNpHmCAW7ol`JyUD?3 zw!tWXt{{=4ZEmwk$~b+4qsEH&3Vb(|HXF|bP*h9&JVWi~xikc{z(YwU2+-`b@byGe z=S)Op)MP4eK|`pIzkoQO2!O@OLAkO?_md z;%YiIh3<}~Qy1c{PS7@GN$@>AgTmOmptm@|$ynCQZ;b>UHKl|g^8CQmgZRFzsZi8< zAuA?Yog}NSTZq;o}G$Z#WURwR;VV zK~Az>>`Zof(l+m`Ua`fCfGxz>&A%8(xB`lrH+l)*k77*7hVQ$<98CT;Js>!dKaK~! z0-4Y#IW_eb%F7=@2^Pi!#(S2+_(bgQm$qR5+pD=3OVeeiae=rWJ z0B0WKqp7CG7F3~ok8-Pcdr-U`;{TYB)a~?*e}qRkJ@pp)Mq>ef(aA9kBQ6U*y$WcV z0Dl|RYI`%m@qz&F##$r)BTylR=HF0-_B0JW9Fmy;uBqPEh!DfZ!43Z^Tk5uX_SYAC7P%b_9$4aR(IH2`cerA;=3m^fkP=O3R}0o7QH zFd<{3o4*QgGD$kQ`7@M(Tk+R}3GWjM7PxhsNGQZ2wt8jNqw;F0TzXlZ<*O)6ze*SORS`9%X zBHY1!MM%dyf*`)pDQfu#V9@qbKx!IH*EVR+gkpnSBZ=5_tyR!gH%2bNnF?{Lq2>T6Fue(oFvpevLM*3%2t$vdB39?t8gSTI zDxZa}GBt~q^~{riXoB=3>^Z|e8i)!{S?`A1#gblsMR-%M=bFt6JnQ-!u4j(6_ia|3 z=UUziH>thxyO{1=9%upW03mGLqc@@ncA(!fVxwg&@i{TRU3{ji8p0b1!mok7!CL z5xH4Mjr>xoT&NX(0UkkJa4>8asv`~bMEkC8!4AF2_2+}M*dnW~hP+bT2FApvktJHh zg~9odPek>!Wy8UX#TGPk1I+=Pc(9Yqwgqn?Iw=Q?Mk|C-?*U=UeU8m{!}0fwz>CW& zhkpD`sJo9om_#Jse*zt#ee$#mSghBAgaV*ytiA{m>XfyYD9a`n+}zlu6<*K-)mG?` zAKHRs&rQAZLrr*KX|zN|dXVGHob|AUp~1t;Z49cf8!1zb+AL;83%$^k{1KdgW~%V> zaK4rnu@!o|8{RR>xaREzgL0{1cl-*X#JXdkL{`;ns3(MmPf{e!ruYO%ICP!WbqSKh zI$4hv%>M~p4{VKIHr8cHN(Kg<|GkgoN@JY?n)!DD@*>t( zqhX~ZtDLlLeFNi(Kw3jyrwTMhV;TY z0xS8h11myz>stYJJ=VQJCCHg6{}+ZinX(hU0C# z7Bha@h*WxqK8lsr=!vCzUXYA(WI7|B0AV6HrMyAo@zwC=skU6Fs>AMm_c zKN-urZ2v+y>K#R%*VR63OJ{p>+e$rq>MYR2ZfpT7tjfW5e=&VRwcZ>ys|KE9OuDP4 zRe)gJ(AgM^u#qsVzs@n2 zJOCTV@)77K+Y2$96-7)LTxoD^?idRZiKO(XL>SdtX&+qNs#oL`U600jxlZ(`hy+>`1i@)L^vZ)(3MoWXwFH^xddE2+D<~MrG6}lbyKA* zTM69kb;ez0LC65wWQa|KUuoGS)48@E6jMwL(c8#%U<+g}MrKUANx$(BM91JZEzw)i z{P#&DLkyqQdqVo6?&4O1HEzvpqF_X#-Xp!Uer+7BZF2jqm2JDBoXBe*9( zv$#FUUn;TG7VO5vhT#E;y_`5_xr`)_o zJRFmoZ@~kO5zyW643(W|u{nz7N~mn}X9(_qDQq*w-2oaT4x53TP?4$f1Jm#%zv$(N zAi@^T`YQ^mK2|Obdq3IYnEkqvEx)kIkYCt`^JvRXwA*C7I~I6O)qkqBrW7nU)VE>H zLu}OAQmGwZ!r(ojdt0#+nn%TGWm9{5@R^l$Vq!72Iah zF%@};ig=HS+9_iI@k}Q~WO zaQ^S!@I#GAY+2dRa&tq=M7`|Q@D@tY%Q{*n)-R(j<4BcH5H!4H^z1j4`SJ@3(d#36 zS*K@z!?f^&rPMoEon;3wNqt#DQPixprRZe`SXr0+LV96YXZ`zl6lq-rVD1-c2#jzG zxkPcY-&KFadVfRs0fD9fzYwqJ8&X;*1sPnFa(^qzphpmwH)4U#+@q=%vHSNT{c@_% z$D7`xj1W=MYmK?E6jd758I2hI{^T zv^FpPy4ex*A}!Gi{U@!cOaBS=BP!bNn1ypfM4P_Z^hAvw^3aozId~%)9>58te^|i> z_LEHHX)^)XH%YTmH{)ZGEyCZ&^!*!iacEjhW=w(S59IfeR2ef8CHgC|AMg^yokL{R zPR5GrOt4D$ehwz|n2GpvE!e~eH@3Rp^v4PzN0pE?6E5d*w@^)Fl>VpdihQN6L``L) zCd{)9bvoA3mH#AUZOPhTreO2nB&ehbSdShX2wsiN0G~gjWrKvKQj9zHHp06nx=<0w zKaNuxs$BIK`opRV?l9x(1Q_SvO$149vJneBb*{}HRVs)izgBbBLhY5h3DjLnGDZmf03*;A+7QB70PCxKUjnz zjeErTbmQ@HLrvr9mC9`p9u9od5UmJ5kTXRs#{v2q7Byp)vGMeDb)Na%rSV3b)(Bs) z3C~P?lbh#)(wlKU^(@>CuQR;SVgkj#cNc8{sH~Jj-@zBLm;vmFcvGKGoZD;S7rF$; zB$_1hh*MxR|2Vo^94;vWHpcsEI?>4>RGgrq+s_c&W`^%?M7Iju)hj5+iQzfCW{%`Y z+%Y*h5>TShUGr*|fox%7@l425coBO@pw5K|2!uD;+Hq<;ykN^;DMzLnj(Uw*Sya0f zLr15vg-e!educ-mrNUyV>B1e~Tz3l4QCH{(fDD#PxYT7_g_$@u{QVS6B-}zaieJSy zBTw@Vz@=u^fpt0~Pqd&55$|rQ8(4%-n}0@!AgIe&iI1Ic3OvPyV}pSmY&rDte|?)| zk2t4mD0wOWo=Ap`uy!eq16Ty>*{9c+vS|F~1olPX2h1~Gj+|8aT&g_(I9YS3hz>p$ z_0LGue^&BRKFLh3!7&+n^&-96r&pJ*Oiq-Vx}Qh)hpYuGD~qTGEW&2$q17M-iYDE4 z3m){)DqMNlm81(u`sv}NNC>x({0%?;Dz2$FVqEm_a*?|R*H9l$=ti2hi>i|3<{#1v z9gNu=##7_9^VEvQdW)o%)zIc?GLCmpPF|3a7$5Z#tn7_gtEa8i7o^~4V*(5a11kgo z6ClRsp{^vda?hv9>cAfi<24N+Rq7#{_~P$7O!pf*2qxY-!W>??c^fhymEh&S8cY>j z`3!BVk;0)naD!i~6EiF#2|4sf>a9rj!9JRBPm+$B2?6qp^K49@MYkj}1rn|95*psw zcr9k%ECCb#2ttV3*-iWHi+q0M6|jtlb`V@EhiFQUh1(r80?O#1y}}TW{MYCpL{i}n z8Wd%G&}QtQ(J;h251U`jriZZlfg_1k2MZA{;!Z#Pi?xFZhbgJR-a*5?shgs+hZBec z2L=c9r`Dl}9-@E{KKpV~6&2yoEqL>VL$p5Zt0C-%Lz~cw4{%VvEhf8wUR`Emq!8l~ zYOC!-oAq5|LusM_&%*c7+Q{x@VbObaSs>Uztd{Bwg>H~Vl^d%3UGzoM#Y%ahQkDJISW(udT0@@Ow_Km z!MkUJar4tOLZO=|Aw31%7GGJI8bJnqUa9<|=)Z0W+7p-nN#iR&^|}}_Z5IKUB8TWN zIWmDV?HOuLOq(C*rPPOda7_UCz#&S(>bFa|nz;>^dE{l3jXjYHI=Nd)Rri%uE!*)HWPS9B`|Y+ z!G@aUka1$a)yoxx0~o`~ocz|83{1HQIx_7K(yv`510SSmhxe8QF@a-T1 z0PgvfWO|B`t~AF)w}8XwV~H(BQ`DwiRA3I=892CCjD!|VwHn6EGlMqjc)akx9!0eq zmhyLT*KS(`S~LkONe!vieF;0%b}&|nij(5!Id@WjHFZCZj-1Uo{`}+Yvw$w-kmq$} z5=1pl%X|c)p)y9uu*YqPcxLtrblQx+yL)6zVbG9{T_A=!)3wuAVQY(0%*PLzxV zxXPiCNPx#jd@voAW)(4NR>(Gf-ULz(@lCM9OqpczxR0OiCx&!m3~mY6mm)}OmT^t8 z%_mb6Ccvab3VWS*e<9#d9a97v;1voedsSXn!cqQrFzCqL9@)}7x zMB=Sl2j}&70T!)4BDgBGb^>?fH4&`w%6I}eR)}HY?_C0f_Ry;RsWRkWybeo{SPwN8 z1Zs|Ce{#ZAP@hsEr9?#j*0yN7~jb+r&?i3LF`H4`a57nxdBrJzv4!e-s|iu zfxqv%zEtwcSk$YHYih_(!+RG|MO*2awUCa~NA`6@1OF1+D0C8(6&_Wb!IKP$Uk9^G z9NBqs&{X-2}UOo<;%HubP8%<#1nB4!>iVXZ}q(voy4}XaQ z;Q;j@QBbubIG#7+v9d4q7T_WUO5Rd~tVKa9zZwolU=~j~=Ox7o7L&G8MjTQ-b(!6w$8DK- zi>5koO}9y{(Nw4SnvjTk=opG@T@A4H&4A(f z#%;!2Z*3hsn{6ZsI2@40w4eB<;tSn@Q+diU=A`{F%J%plYuOTg5 z>k2oxZcsnb-j|ge)%i;3fR8yiirexq zGKnw=Z2tnxS8mNiocPPrae<={R6iOADNaX3f_?)6+wX<7S_vbAucL?I5vs5PCH@#{ zjj%)U-=pe7SDvx`&I ziAWqh`&KKQ0c|!!z-M%+*jxsnAD+~DxKnGjL{5@N5787`QnWo5RP#4%7e}EJC-;z~ zQ+~dd;RDrw5UK4{|L;-%E;z{IEn-rP`S`Y(=vsmSjal?ExLKXfWiSqr0;50lGHkyb z{$v}KzmtN#g+>K;d+bq5=mA|{RBD_UVZ_A2|iv`3aW*FPq@CnPf{2k z;LW~X>vRy1TP81vM;lLHj?*j4+$nMR6mnH760slyqHm$F5jr5RxkNnV$PdwE9E@~X z!+!yp0fVhDR{^Egf0o^YkJ)`J?l`jMQpJZqJhvAUxB~JApd4r zru8u5U8wt8c7w5BDa)xcTf2wwt@6ZEZ;=Ks( zt3Z`z?06znCair8j$39VJrjs?`KO!V{L9)wxG)@fj0BOT_3 zO?KK^hd3RquNV=ZcI{s5P0KMB+BV@Y$+e^yv||Z>`F3|JW@CSXd1Rh;Z%wyH47;i6 z`xZEh;Kk@+f5utp4G89#4i2^0|kj{zw}i1j{WD<_?M>{YiAfa&h=NJHeM=M>QI!4#fPI2uK*8}3p z#r2T5zACOAxbk~&;4zpzm%9N+(*A>u(70_$eiJ z4W1jnxD4m!L~Q2BvK0gRQv{3WT{-L?%xXI+5@U9xun>L!PHTp|dw+Po@|_TsavrEgSi8$Ks+5Zi%g7NRf1D-^Z-NYt`WS=RVPjWWOSi#rr|;};td zoq=?-KeUH7wt=!;cZWKDK_U@cXAW0vIX;=#am5x5K4-^@@C>7rqj)!^-$}U5RqM_av=*7w}l14@jqgIxFsz? zga}Y+{tfKOvvT|nIbz>N14JwRtL29{w1?b$FBn_vuaF=53?nZ$qjxw?uvl?{ewO3s zC@qyk4`L$NxFWHn1u&ybQh3Fa$5n`zmF$5{2uR!~ofC+uQH@8i0z65nspC6}>UvEOmgL@N48qhjm zI7A(Xua9H`{=)iqQG%8|l*!Q$aV#|wAG>AVK#Ry275OO9ET{{3VppOeW*uY$tnPRy zO7);J)9fBmu>2Z4$^^ZV`9$uX!~MfL@eyo4eFya^_8uO$t{dzxCigFbP+}cO*811U z5A~vLx%mXHTK^jP!52jO?ef3C?}Kx}zpdP(_1~pT)B5k0LqEc|J~2v-CfEQ%Qf^I* z2KpXf#_|VY<}dCb-y;MeyaQ&jY{j{jg-B$s#THXIuIN#>4?-X9GIvM2L6A85SvFsa~pj>b30&E$Fq zT{k~WgH3wjMHGw*C4C96CZ?k@!gMK`LyE^AEIyg@gviGDALubY9!Knwn&+QE>8n9(QBUP2wdt zJ_7r0Mw?%<&GAECi3ydR`xNy(_bD1xv(wKy)l1mv(DC{y!&S)k?3?(V|G*&cI)R)9 zc10Tv?-{}%VY`Gb5?me*6Rq%CPGYKPK-W z7-={DmRVQ;4l)!Y0zd5kA@5zlqpGgI;WL>@G9;7C009C77%?as)L;M!LvUg)1SK#b zHzI^ffjEu`G0XreVB#b+lfzhRwY9BQDf%y3TWOVxtw2IB0kIk`3KmMEBJOcOg2a$O z$b7%G_c=+3!~fs+d7tNdzvp`iXU;xrt-a6M`|Q2;ZSA$_nSDeQB2&`3I~7iyV`TpQ zd+}?2fN_P!?(B1ZNtVDQT3|Z`*k5;}d|v0UBAE{YYQn2|j|~%QgJkdXAd>k2IjOCt z$=87V2N~uHaoN3S`q3L=E9#?XtT;ZnLcaDrmFq?_Bz#;l1+c2YW&jAcm z%P?6pVJXX?Wcu&e1?EbJBT8G==`0!Ik@faKVIY_arSQBy2O2PRU{ zb}wsaiv!KQ75A``!5t-hr0#??f;Vjai&+#VVDQnT`^Q>z(awRX?v6XkE_$=hyF2=? ziFQQI#av7Gk9EKm*N3Jfo+G-*asZC4>ad@MrP4(ZvdBu%vUR(*yPypdI zW<0EIePHt}V^EI7EL~Y&h6({R2!(YaGRU*k6GcfBEhME!GSZ{kALLe5&c$N3h*J=& z^hp!R>~WzS2CZ!zAEDt0Jgnj%X&2V$X6dw_BpD{N=KligvkcIk70*rdoB>5zU5T``9A{USOVZy^Zv)A>2Apa_KuPux>yJczL#aY2(xLkp z;qCkwVLa^Yi$hj}#9@kPewf0E)BLaw2ffl4vHU9>GuubKY(?d#^=MVs$i5B}*}$M@ zc{_6svM{iTM3YZQ|6tIR;`fat-ZxtZexl$UYSdH*wNgC@B(fI5kfx}RIf?M6P zbEx!U8ns|7yaXja`_U5_;ZHcZHFO6YdK-&-!DQt7Q+cFEPx<8Kd)fn1&Nhh{iqv$P*qo zs@kfOPpC;G7oT#4CTE;*MpHV)O;BSc?eSxBag+a#aIg6)%AjKXnYVCT1sif_xW7KK zww`fD=Rez+(Y%clG{375H1`lRa{{qnWkzQB+T?AGJl7-`P#g?mH+S?NqBQN1nXw(_w7<%ec|twL$n9(Gba;u-cW_%{9%$|J8J%!fBqQg?%a zBC!|tHmZO)IY#OldW+$M*y#}85mtBm;Ii-NBg(oD;s8?KTXC)viS+7ksb<1r7|mI+ zD}1uZvs;IETCN%^mxB=7TH_!sVCVp=$>9PpoB*hFQ4lL`>?Rp2zXLxNU9|XWtegZQ zdtMf*XbdK4d)J~$6tXHb4D?yFA+rlqb{&ZJya`l6ZpoIv{+62Pt7ve4zlzZ+QXXZG zM*=wSm#xNg8q_Z90(OLPh7t%XxSG29_5xPcX-VD`jYR-3>0}S@R*;<+{RT6AtLt8ocj4i^#BRaiOA)hw4`8fWq=0pC8z8 z%7rUZ{s1cXl~4>%7U`+o`_6CxK0390^cT7Ef<>NLi?Aj@X2Pp>0P2V@k~hqEFHP2C zo?@uzp!CNbpEuI;ohi?$&o%TsGG%*+l0G6z{^*o<=^4f&mVyzebuV@314oKH8fvun&}1Xu0Npc zz0NRAO&C;Azjf%Q7qSPAQJaGDQ%WAHCUoQui4=1ENd>G6y>|Julp^?lagHYS^%0;3 zEy?P83s7-C$0$iu(CO|*o%Ry6(p(1uoCW6p3vgqI8_9huc5rLKCO$GgP!Ucw)(0li z3)u&pih|ra0}Q^wGN}zVnlP$Y3;|-GnwwNx;0c$%$BEZQ4J87D7;vqNjra_`&NC4E zBjwXZlQtN(Yu*_RPr8`^`KJcLvAwCsK4l0D4H;@iVuQ+-$$pLwiaM=UyL6s@aL1tA4Imkdm(9z5v%OKsJq)KCn>}Hr4FZP3`9j z%k*EG<^PH!ntTk9x51z|?-u>FBspu$^H8 z@y+Zl$OFn`R1J<%8${*;I0mEU)E~t>3W+u|5DrwnA=5`kc@aGvTh>%!6v5<+Cb0|K zy7Q16DN6=4-A7Ul{Fqhp2&#gpfqTcQa`V+!NN!e-cn$gyfk6@^$7V7e?wPn0UmBV+ zIMvuWIo73xNf>OJkwduLT<`i;MyoFvTcS>-;H~$rx*rBCv0l0AKDoW_n-H(g2yHIU*bv7Xmn>?4U{xm15$)1ON+oL zDWbu86CRSPv+j~761}_D>a|_1XrKfvpOyV1x3DBR`>e4t8tn?EO|gqoNt>c_Ea@R; zbZYDO5GCdH^turFbn*y#-TFuN?#GQdWO~jYDo2hxlyGL8;Gh`ca7#K~;mN&7E0r%A zRqkGtBnkfTYmNYOcS*7lENMRmQ2Af|VRmCw?Z`yXq_)Ky?n zB-GIc-*DbEZidrc`vcPCy>7c3t1tIKqE0L9<}HaE1@uhAF+mrlV)geUZ<0C$^*`dt zIS%~zBZ#aq4DAA2jaRkCO{8xd;NLtj=q)g>?C+vx_}eh_-<9RS0D^uBgO04Z1E+#r zHlm`R8&c6An@pb82L`>58`heUI&>1MsYTZULLE0e$xeKWw{bGnN=8o=g8lRehd`SX zK~E(&7)!bDc2i<}8$}p+wNmiWD7OQMLC`Bjn%N7hD#?GJ@(<}+2 z!N$z_)mb3M4lgvjJR4#>8%i5C9)RRcYuHHI<7thV_ShQK&?vS$iUx<65(HM;g-1M9 z$!i+up$Ya95s;c2>;Y#k$JkEK)yxnMtX|Ia@xZDvpim{TnP8_LuLU1Sz6y+zr3|)? z2T(}(-elu6Fp+Wy<3{`G<2CW(nq`kc>xI_QQBo9c!NjP|IR%Br%VOfTUgd+D3`fZY ztep>-Fu9_#nWe)9fFFkGo_P~8A*l^-`Ur6H!N#Y3PvJ%UJ$i?UEvGd(!k`$X$54#3 zF91s>0F9OH$Ok;S;w3oFn@Wkn?U#5;5>IG1gc~ECri!N_;>jwW`iZA>@pP4ji*ja` zcsehh=BLnSqJ&Nn0L66|l@ix3*zT%nQX=YKs)# zfx3Tr!*ayExsY8M4WK23pX7|G2yA^8@eR;6a3PU3H;V{V`fMa(6|h1|mu-TI099xH z`5G{DBb7iszTn?P82%G`RW{gOboFBs(66AS!Q9wHnwZ;{qBa%=KC{oI`Lz_4(ybYOUKj3QzCQ@{HBDG^OpiJp1%mzeyf?3ft zw+LqWJ6II@l)E|0?; zy$G&Edg?Mp>(F*Qj)^F2fiA=uSUYWm@cBL7nsgAeu@~yLkd|e)M-}Cuw`vYPw{Y*Q zv(~@=9V2C&&TvLm;av6QrY%dcOy*yP&J=y|pfgBIc6BDfZ2q8TO1DMuK=)JpnU3=Y z2Av?fjMk)#mZTQTWmou~*+|)Ms=5Sa*M_M6(d=c*QXBf@kEja$A3@R$l zVW!Y)-ipyBtWA>5eb`IzaD`=K)di41Q6Jw%vX>+5eR&-<+CwlfPNoTL?938W6tWQk z>G~5PN!;yExYp9Zf+zypNvWCb1{sKiIyMS;ZYGYGtjFSzP}g>51-6%h&a<6frP@6Z zQJ?O4gL4>JaL7b7Pk0i(4J?Y@l)Rgw(Bk%3jQ@+!v2@S+Hae$-%16;)Tn@((tRKE4x|^nj3*>(l1C}rQD>@{67HsgNpOJFdH$Rc2;v#r} zFi5*v&>hw9veK_w24ehP9OHr=beAc)*x(w#$D_sdG)RY5lI1Fl7}PUlja%$|2qCi8 zo{T8E>R8y<&o^0)^5ExC91O?@Tm$8ngzsx2sttqh!*S`+P=bZCY0`_0iLUOSinGM} z+0M{Fc8u#gN+hIuDC{W66c@Tv*#?KLdcHm|*GFHrI+o3#H!FIxPjjYeW(6~di9jfN zPDj5%RX6~1L0EQz!GHaip>4*Q1^2HOSD^`rR(TZ(6x;VvR0+~GwF z{h{1^dW}^V|Mb+SUEyS=*^ITg4cs=SYY=7QdXt&x0pw`d7FTSk$IxjXcQfW?rhYIR z3B$Aa+UkNd+5M_GbzSQxKGaz#*M)Z@*C#>#R$;seRk zyjdF9Ihhrk&^`l3RA8lJ1e75Vbri-Z^rbL^%od*-eET0q)4@C$>U$kz?jH4h6x6$~ z2t(+KxqHQmz0T}}>EGPk9QGY1LEUyp$Kb7Sw_C0E52j-wWFm=Pw+*EuUYEQco~)H} zf;LKqp3h}^bW4TqC-1-6wmL|2EcJR)NfkKCJ;R`HOpT?k-QOP%I&W$WPynGuN^+{+ zy%?sd$p(hWZYTNq`WXxePQuOvM#^0%m?9LbL%YzkzS)vOrpnjn$(OmI=j6C;&I}lj z=9Z;l8v5KHsmDSk)xv7DI}o#OtZH5wUjjY+R7eHYLNuH43W)iWCvMwx|7KOhQ-#1v zJX;Db$cXb6Jo9Z8oNM2E0OHv_^@mPKQH^VaSNB6ZLY~Qd_J;Gljj`&K(rLh&Yy3L2 zbt~pv?s!g!{?C6A{^{ir#7V&(iVOqa7|afYd3lX9sxWZ0kZt=NYR)ZaZ4LU0E*cZB zJH;s%a+7srh+gA@&8MS1__Od;ugdhmgbyg$z@T(40v!f>HI-=&w0CH(1g8oolSj~y z3g=cV=*Vzxr3%titk1rHdXIxZP$!?j8BQLF6D*DXM;)>3cu%Tq+}crR0&W1YQ;x*Kfo7QOSoCvVXsfsBB$#Bz#$aq-UBRqxAiR>Ra;Pg0dc| z-i8LNEEc1}6?jF?+*oBCh%@_yMEZJ1e^w6pScD_`*BO1^bp{(_EE)2sXDV;u4KUASwjVb|wmgI&$q5-Gas#BE+?DHv z1v$t)D4=nh_cb#o$A=tj>hQcAk2I^j_u>~O-LZ_=p@B+Bw(0U=TKOBn$|)_g#Fq6W zuSd`~0%^CUPewa6(pDD@ocChxgOL^lZw`u?MD(xGa%62=dbqCKSh)!gtn(rbU6#Y+ zUltUe%y=vO5ZYvIU_!WjF)*kVAA{DAjFpQ(ZMo<)Oy;Z^D{XiV3~B*hewh~ukDOHN zsTxOxl3_A#ycybyo+>LIYpN(eWWMVmw9A@Ec{}AYskXc$f>tc6;_xJgX&c>Zp>{K< z#x|ikzqLC12lt}MG){x+iT?rPo;n*lIfrM&IYsu;I};9Rv$1?@wHz>Rd>skXm@XY~ ztTE^Rgi9daA3dkT%s#*w@x#>&HZ6zPTczFI8D7dW7Gft4BJ?X~Dz6+>LNe8KF zPNu548IR?=sm?%`j^1Oe+KL>BnwFf6x^)c{@}Z=*1YQxmRaqdiWSdsqQZq0u)$=la zwDKzv@QuYwr9q0aW>%Z5nH60D>|U3BDz}Iz2`yCKV?m8?$P)?v8Pn)>oKC~b!qQ;e zWFc660v8At)c2?945@ESH|scMO&_!u)1;B>ew`Wwco&>gl_lO65c6rqoddO}wI2)q z-Qa(iW;=aVN7TF$Ppr(drESn`rzFI0iN~aEsMt+_F3Q=i|J9s5jCRvEXNw8eJ7?1= zXAf{n(bjnzr|;k*pqCz%jP=S^hmtLe`~t7+I|pcZt=E1`S%c;cW$K36*$RPH2KTK6 z1@`2z4BK|E8<@j*=VqND<@Lq zV4v1$&~7I}%ju^M`3+*?EUGpj^JU(=#U~c+mVf9-6o>y_@Io=k$5&uG6-!{kWVPW# zD*pO*p5 z(2Ztqe~vu-^M-i{<9YZvm)+7k4`Il|_+0kJd@z8qW4jp6L@HGaMtfn`1$Latgz`}K zSG)no;h-+|0z%5HB1p!J-5D#QcPTsJ7;y3FoO2}RLc=gKV{bjrk277qO1*25Cyb6s zW$M&v&n`2@(rm%J-a{K7^IshD@+G5v~hnm3ToaUl%=|_!nE}@S$u?}%v!3w zSAlX3fdK~So+J3{g!bXE2PGf&$&^sETwstp5^$_*cPp@M`?SW&c@Q?`yD1*bU=G7W z(vf6aqOsD5;Nc6N-Oa!x7wBC5BD`fSHR;~tL{O6l4; z2%!SK-%vg!!Ubyql#~0gSJooGK#WH6!f}m~Il?ytMOb-c?N==7xH@e0k^Tkd@z99) zjM`U$4w@5@H@!d!`St^nFpIPU%e_-0jFm6pS&TcC5@}>F#yR zJ?j-Y$w;Q$1N*ts{RR368*9L3&UJkRjCLyB1QpeB)KgS7*mv~g zH~WXO`+MFnN4!+9e0_1BlJlF{PT+ZQhoCrniB&96u>yK276ojZxiss7J(#xgO4M_W zE0X-B#I;$|vA_ex<=r5K-_~~aF2%toamHZ-p28@89f}|GO&nUM?LA@k6l#^g{K!sn3yV850Pa`I;>z^M`$P&BB z*wG{ZS^s=LWutfhjGmbU8LIFZzmc6rGB@tF=Hh*#KmI)>BdRkdYK;0dFwWePN2M^KLNx@sEFek5)o3i~w=M$9qW)s3t~(slaU4W$(rjc-$j# zm>#fMuFHI*8|&v4=i)GX?O6f9q2wxd1!G893J}&m_fkBX;*qXeQf+l*DCtyMp?KC> zQ}rE48>$FkhRRK%_vH%!762i{?x!`5x03T&uJ(_n%IC9BUM z30E7?Eg%w^Kf=3-6sBXLM@id_Fb)Vfppb)w-RMF@%4HF6P-5u{0fbEt0Y5y)iN4-S zMDbK^n=pxW#}3MJ(|5a&DAEq zwn36oEuWM%h=J)mmW}m%h#!MJiz#5~%#w@R~W8X^; zwUR%PRFfOnX%N?A9|ldH?mc9_UIrfm>=7CCn~BIX z-7a%#L<4C&8m}rqP%|X|Gh`4ZioJgh5k$pybDM#=WcYW;>lh`Ch^0|bSC?yKV<-ht z449}GAP*)NcVYojSQqwBb$4BJ4d_jx2Z{fryQ`Bd{-KeS)jQhX0GiR4+YhfSntvd4oD3HuG3!3;8n4s2HzGApbX(duVyVoD46 zEc>P+z%a2gRysjh5uizyvC@vPac3i>nu$v_V`Tv#WE2+*cgvMQ(LDh17V1rl!+zf@ z9=!0#eKeAPQs-G^NX}=*jnrn!*MEm3k0RuCU8sq!JZP*$1%N$>OtO^gdjsKK$;?GE z!f?bR2NU5M$orSM^pW7*C!r=&gGP3namO?|oR1=Ft|?CkQlD;tIrB`-bW8i{Z{gzt z=axv-un8Y7kkO1~Q1|*~9a1Rs$&KKxF^yK!CH61|&yFxpngM=(y`Gs!=)n?se2FI! zHaDQ%b-(MPe2H&9``$&PET5?zp~E<4bsHtWfewcyqR_o*Bi|!Cv*midb%v`0-WOPZ zq>EHNx$wK-!J!NxvxKO6l0=pN56Kg$o*1k0kT67l_sApN#T!D5-A)Z*H(5`}ZVs?} zPt(_hGet)BY~+P@j1kylXuO^by(LX&tSqEYVa8aL<-JMm0vo5objEwt;0;Yez6w*O zH%r**)w6dI5u2&pC{q=EAlU^kI#7O5T1kI7)1D%9Eo>~U8pNIj_FOrIT1Mb_8w@ZR ztG-1v#R!wJ>R)(33t5HLV$lTCbX&$Ee{!0B%Q${FY)Ql&i-xFp?V;;UCGyNPQ;Elr z5eKl<&p0N9g!cNVnwhb2)zy#@Jl$0C66*4D;1Lj#1sid&0uZIeV{L^hfVkCwYc|7du{qSz@huWS8 z??U*Q&|_Ids(7-UTaoK0Yn3G2PeLO!0@X}?t~bHjgbPU@1AQnZi5Ed5ypV{Rs^4q${XJYUr8qmv7fv$W$VwO`C^whQi%bu0Jg#(ls8h5 z;b{n-u&n=16&l?RipBD<4u;K$jg;peg6Db&{%InDzz#}}J<$VSi6BL+6%o^s^7SU8 zXMv!P$!H4)H6aEWkiLT_M)BEb1Zm2=k;*^CN;dz7C%;HM5xYyUViDLuDArL)Z}o2I z{A5FlX0q@J7bto zASYTbJI5AcZ^A)Moy-~+u@5^AUSno~Ka1-upjL=pUHuqt5Xs+MoDc0Am*XyYdLpkx?NgH<=$xYV`fR}1V zNOeYgb#X^S#uaiCoOH0dxV<5xLrO(TIOmM9Zkgbb~F*!<7mQ6jwZ;D zCS|qT(L@~N32nELGr*@dOsxpCz-Ggm3BBD*yoK-E*S$mmRO-p5Z;yKku4eN$ukKzL zq040_DyTji$OQvUz37Y&-UMmWALlS_fMW4927?03G;>+|Z}9@|kKr7uBf2s8V<=xi zeVFojOz3cEoOA(%@WcQ`DoXA;PYixAiF5nG91>uU7z*ygg#(I;CaJJ1CvZH;aZfI2 z#e01KP(-uMal1q4y)`E36%J@v1V}=Sl1(=d?>`dOTfRM=k>*j$@qrV4vmfz7u$vQ?O; zC&@)N$1D|GrjRbRIcBS{1q#e=b4*rY_bagFHb=4wo79tJsm(D(1&>lloi>L>g+(f` zwKm686?PdbUX<~5Hb;sI`wB3T@r~tZbvDN|6?0HfZ=@v-o8w*;{8t4`!&;les)B#3 zfH!e)stT^`N&Z=mxlhG7lnBpraGDCvRlqND@K_Z*RRO=m!MCa4F+It@$}yvGm_w=G z{gf!LafG=C(SnI9ieV$|bK2}$3{iS;#}ph5SZwxwJvf*Q*u`;j23*Y9gr^BFA3UjT zImE_ZP@>oJcZ%i=@CF6EpMyn<2KXTbe1L;RqXyUpu<}Vh;uz7cftjR4XyRbev;iKa zfN7j&LldV009dbpPjIkk;{ad8LY$KPDUL}{BOC{Y3Z|KZMN3D7S_OQDgGFNp_zeZj zI9RlIfS>D0{v5}MCJ)S7B?67b)K(AhVg=m7!J^>?Bbq-j zLzM`f94sUNz#$5lrUVnOIN^V4i>@z)ORT0cn%iw z0pP(s$&ck2AtHe3#Nr`kcN_-`DFN`;3OJF2g`fcVV+A~cgN3XBcqhP0;Y{WjAuE7+ zS&1-}gN3XBc%uTgagn2QIg^I#4hqz;2E3EQ&4eM}G z5s-vo-|-+x74{Vmk|bd#c#uQ~`v(t_xM2HukVFLA$%7;o*jqeEa)52-L2CQ#mpn-A zoyj~%ZJd?!AT?^{LXfjeZJ9m95!8O!d>*7W%W`;-nkdWUL28xE!h_TlSt5dD7o+z= zhI@lqD*QX2{oiL_3MwduM*oV2)|g(xpdR)@{4?P2{1Y~(m9{pWra}gX&4EJpr4xhu zBLC^epT3JyM@-2dB3~8D37DoClqDU$IOo|zUr|xP=RkC*hrVS?Av+M`=WUKH(>=R-GbTX1RR(_7$!WmpS=s?v8s$ofOnYrxGAjF<0`!9-s z^#>n)XU}Bg&ehX$9nnzIYoV#lMy%M$?cOv@cZ@2m3^0h$G)#9)Dr|uQ!@NPng%rOZ zFd?kdFmDji0Z!uJn8-$_F_%3_t0(S{1HMPV4c0pS186HhaovFOj^wAJ%6*B|dMnI} zxqSX<27$w~G#40Oa|HxI}Uxhyu&#^oZyg z?H<0`=J_3=dBswu?rLX33%$@iv4p-0cBn4hO-aa^CQIlp1!5ME7)$8;3M5)UVlAPy z3Z(Nf9xKigx?h2OD>eyyMLe;x}E;|Aes@orO(j&Z9Pxhu^ zE=>J4unMbEV3>#xQDKh(rc`W9eq&Yeg9@qH<{%|k z-hMI_80O+RD(r3rhPn7K4#Ui3WKWW}*&IXR$sP&VShzxZyUmfOl3qF>xJSTs z6&R-S1uE>!503DrcNNk*ZH_rA>{SJJm(7u@!Zs-|OyxzPq3N#eNfNVp zQEmV)R!FUCxdE1~z%Z2;e~Z6cAuzdXmI!UX&5Q(Hu-dB0iUqmDpT%4Qpcb zQGej~PIex5EE@ZcVo_F3i@UMpFb9(ykf3`=c+jQ})-r{|3%Q>sQVGq_kqCW2r#>RA z63s~TJdh}tQ)`#4Bv>F`AXuR9uAvhgp^z^mTWI6~?FQ8wp|T|3=)4&_g32xtqze}* zqbW;biG2uyigcj_urPQd>4Jql_)R#7baW;~<7dcjMhIufQgL()YDl3C z8p;2Kd=WC!smsJ(KGwO<;Q(1kwQlfz*bMCUqM$(+O=&2n!FCBf=ZPpZYa zA1jW;t;TFr^=4GsM2)1QUt>aB;PfZNgy}N&rsKqlZ@-&1(zx8}PbK2O zj#u%(Zk?!nhmnPBB+{ay9O!JMaB)uI25OWl1rJ;o|!2~VL-)3=jI&b3kUWTKF$ccsWXY4Wt4h7I6 z+Px4=SlSmlKSP1470Z3DR|yC|k?h`DDgy7emna+6h%JwxjCL1BCO-ssT}hBXK%9mX z7LS&IJ6;f&72Y&Kl!CE}Z2u^wnQ7uh8A3&=5k-jvoO^ksN$h-*QgVihS$Z9^>)8i>{5#yk(*tSpO ziYa8j;`>w7{yx-r3ZT&whqH6LB)s9~132ta`O5#qqOmd-Us8E@Cb0igPy+?TOnvXF!riZ~&+k=NuKS>(O0V40>wE5^Eq%3G2l)_coesMxQ*ZUp zSJ-<{WiKK*)8raYc^Kv10Phot?hOXXdAmZEq>>FSupt-sQh8IokHDva4pl6b`1Ki} zy1qM4@Q-2|T8#2tt%E^h;Z-fu#KHhlp2?Mhm0pVtzRVbBs3T;qKU^Nn1|d&yFtpHb zMWJKED3)q#rv42oIA`P=^ktm7t>G>m)zEsp=CAX+)3hQfQ%_PKl9q9&q>bD3M>xgie-2QUxH0s%#<4Ky((J!GLscJP)Gcw7IZU)7ooiR9j4N)O(%f;;` zar^Z^bW7z2HNT$fY{VV>;(*km49~kuFF|TSQ8s zK!*lFR|<3(&|yK)%LFbP#mDKpTNJ-hdBs z@Gh5{ERUIpk0KLtWeSo~q)4ehNcsmspF>MU%mF|T2!j5HKo10Z;0^eA6C`qJjODQy zULG+ZjR}&HTck7y=s`iyv;+k{1_M1f2s%TchX6g~27HX>e8gHFi{*U8f;2WrN>@pk z>?j=ybg<@hN}z`UJuFD<-2y!v=;1fu<2NLTO5-e##W@{#Q5;C)`jBFmdks*~0W2Ev zW7K@0VB4=~n?5Lozo%tru;ehOOT3nWYT$LRHCCZpg_32d4~h7Kpi>0;TcE!Uf*vW* zexUt9Suj>zMHeUA&RKHKscc|+_9He(ksNHCM?&X=pmzxLcR+s^1pO<4z5w)v8?fQz zY_wQ%T2wY*X5>d~%n}J*L_!yXpzjiB`h?#HL7N2n63~}!z{dG&R2r?8oK|WyIjzWZ zYmk&0KnBzgAo(E(`VRu#26S5xG&##a?8`u3z5yT0I3MknoOZQ1+JhuSqd_FpfrL7O zpv?k(1?Ve5&>Dfh3iQ<*uyLA(wzf`7PN(xxQAay_Q|6&*9C1wo3)hgywI8D(7fQQ; z>gxS^9t&m%_W6OfA_FsUOcd>n=FhLxdDHvxlN6W(;M~DH-){}nI=`~ye5IDeSG^PC zt==3smzaz3tFa;~byLG8LP8xbO*POw3Zxi8w^&Wl5B(0$P#3AEa% zgR$`jCz*jlwW47gD<`Az^=jO{v0SKpY03FgW%J7*d@KPmYlOH8`OdK&F`tpyg1ZOyf1pUK;Njr|4yLQ1|N)#CqW|HzP03htFjTS zBhMEJsU3M=HYN%5jT-zAfmR!QFg9A-h>h;od@wf7{y?SCX31&eEgFr# zG+0Nz7i6fPH)`;&3N#vgX|M)gA<$^>rPO-|<6{Bm&b!rK-?=-U&%H&&XceJg`y-nSd8PGU&yYv+B{ z7nYnacp-iP`Y(dCuqVX(zeGU>lLPYv`bKhKsz9r9AQ<;UK_c6}w&Z-R79tJe`VUp4 z`bB|OJN{s7xIiM?IxIOIDjUHD^s_}m>KLH!dlCiuMslFPK&x^f7#rVV{{UY?>HLkA zvK2{kHs$#r492WxGE6ZY{Ig%SKdZ#t$0upspXUmHjTwm=gEy-%RA z5?2rs1ieL|u@W~+OQVQi;JNoG!j0!X3{Z}G7;r5$?&yAbAJhz>@Zwn^{@4EdG|VE6 zSsHG!lJ;t|kzp*D^z%K0xwY7&lml+Wtqb8>rsQN^c&T7v&YQBF0~jf%sP-?P!&bz5 zdx)pa^y44AhcddEe*6)8D65<42hNA^8rsfGqeZfLXtC@UE%QPa_LuO z0`3gy1-Z82^>kdb(|r|2I^0(youQ~buHo|RMV{MI8#!2g5Ccn&-A59we068n|k+{t;jw% zvP;{qdGRK=Zi|s;#>eK*vE}60%loCOKHbDt^?px!ynd-?445G=Z;A3;J*dYe4aKrH zPKD!KUS9kJ_mwWE&hq{0JG~QDd*{Dnk|RA?2KSRX$@LLG{0#ju_7m*izej~m4^BMz zw=Mk{ok7PQNG$Yx>yfPPa;lC_hVCLdXA<70hl8@D1FTBfxua`I24jYnq$8uA{7ROPr<$hi%`Uhkb`n9{%?5 ziO7Sl*2_@OqnCjqJ>GQrtoCqOv;}l)^kqg1Xjk`}l>o%>y!e=;lL+Y%GF<*AoT>g( zl0TG>%AeDF7Jxx6Od%%7YKoEl7qk|H-3&Ue2KRWXp_Bnk?nbdY5%iyy55O>MT}P;F z;5JfVAr}U;G&*-Pv@OUW1`2$q^c=|&ve@qVDTSd=;tq^0JFD8WQ1mnnI8%!)GRq}b zf6LX?QD6tUq#>SIs3bfo9<*+K0O!|mW^naDCgJ@;{pPi2AZ!}^ILQ`E=l1SdipPwW ztCimKEV#A+Oe=>SXJ8Wj{zes<7+G-JhjS)z(!^wq@W* z@r9%#??s|CN|Li;jnD6s_w{x+DLf*f(B!PC+5^U&sWG_)#+{FaB^@b*kN8+R2Mm2H zIm=+_DC-9)rTrW}>LTuQ*N%m!7o5T84Yzmu5}EI^A3&ESd|7Trt|XiL9GR`>(rng#ys$K2f^Uln=n-P?)_u{c#3R|uVbUQwv8g$ zQG(q*FS*OhdO72qtWP>pkqmhVJt^e8m)Ui49QUILiZjM7&qA7af2#N%?IQ4#i*Aif zF5y_@8Fu?`!O*gEk~`&jlK=30=~{0;v5=aZ3H3?XR4}3J<&;f$wtoZ^EDK=BSa}8c z6>b!8_TK(JA+}H=f#dYNl|R4O{k(}kzob5Ic?}^HgURj`DI(66R{`5hKXNt`{s%2} z&gscfMC-g46oH8pggaKUk{@u6!*={wV#Ybtn|&(BLG=;VO<@HXps==#b{I9PAaAB- z$)B{Dc(G(K=WR#`_|btTPsTZlyP3Emj8S0p0oOT>3{2$tA!^ii{67N~SR^px_Im6uhLT0;K zk*jYK4jXrBN<6v3$8-^$6yuyDx@Kd)Zw|QK z`}Po44knbG_#A+V%w$04LP-?vsi9Tao~2ae9~JJslmOSC{HnUUa5GHU1qr31{kQyC zLX&Z)9ws-)vZbB2kk5`AQ-dju7j zIxaFXs{0L>9jf_u_c_CLtr~9ntU4OHrH~>X85TvULj{|Tt{;~Vc(PmJ?i+Q^w-L>D zLxys?98QTW~4YvG0XHt48Jrt|ZPMKl}h68%u0vg#$k#po=btVG)n41_#Fhcg92pqO6vHNI5e z@#NhY{KUvvofuEPcPAfDnq=G9IkGK&4ueJw#-aKj4JWCjF*3@xIlAmkc!}cgSQ#7J zycpAoz5!HYX>3fR;(&9CdtLmvfHTbEj32l94vdOr!#f^~0%=&h?j4Mahlp`;`a60y zgXAj(79!x^No*_KgEBBqs$D9>b}aOr9@h~MXk|GDd5$4DNAC*dL*@G1oWCbxyyTBm z0yN@;UNlZ#cpfq2=h)^J!4U>Vz=0-J6EzMh$kfmrU2`EGVa5;k`G+%Bg=%ib5hdIe zgJ_tNtw*;6g<#92b$Sc;zEw7g?E!@+mc7w1sWmeb zb!7fKhE<5j4|PZO+iAlK79M7Kid!v5jg?_Y1g5);Ro75oG175PtVvId52U# zr@t(RuE;qw3&x=KU2Y-|1@14qJozS=jPew>_@59^*HAV@yy+TjiYP7lRRsN$u!hj_M8ukVtoBV{A(cqk668`7gg zBb+wbSTi$v3=wB=;(M$0ve7DH5NQZr4$?6Zt}&eS79t(SNn=z}kkJeXWVb}%ltMNm zo4z(VJTM`w$JXaskf7JCI%uqZ6hYW)HvV)e!NN7!t={x7U7J*Htfa{?cnvXD#^BA6 zrxE3r2v=yiUgy`Ao3F~nPy=t()_aN}d0H(ejPApDF*=qS&D3GW%D3?_6-Mx?wJ>50 zCyJzs3;Ha}0ayS{g||mov_>xjRD(7Gwo4!z9}Q%f=wt=M=_+pqY#jIITD3X|d5_Xz z7$V59vKyw$a>l>|cZBo325poaUXvZDo*5SEA7d$QafNZjtN2a<^f(X`qd1Sjn#S4W76F4lczr2l9q77Kj89-U&AlB zjdJ$NTRdlQ+K^D(au_2|SRD?yaH2#pDQ!nLfefJVCa5Mi27!ShclJ4&{J`!AEpQ~K zkf_c$hk2c`N~UpOMyrq1uyB`$z<7SW@r61q7C>4(GY2R78&D@AOWgl`r67w}I3$3c z+1-I^LFe7v9Z}ByC7wt!;a(epFYnt?40>$foiF6nnHmN1jfkW4e4RG zMEGx~niDRFt9aGvq5_`wM_#}J-cKX~{?!UJj4IGjv}tFwt}TozP;`jDUx_T?T_D3p zfk^W`hu%ySKkQ>$8sLD%QLc(uR)(M_(dVEZul-SD)q@nkVBI$#0nA+Hk@-@SonfNF zHiDL~sgYspWIT|#9@(81NvItts_P7A4p7K0Kh^!p-yrxu8@ApBrk{eb@Zq&q_?bC` zIP|t{Jek3Gi+^V>Bcu1%nbzz!ef=CZ)3Gvw=?6?-KglDJaaZOR=>#)y_DP z&$Ul?$W6hvXh9nl!=_BLCHcJDt# zhrx_H!f>v?1r3Ol&(|ZOT>TbR*AC5wF|hN$&I}9B#jvouZw~5HPJyEzpT|?ftf~by zjhams9;M7Yd4UEK*>Z}{*91xeU`4Di_#Q-<-MvAT9=(~N?`{DarV!~(wImvlG(4PL z_cmkI6cG9UCg#2vGNJ2(lU6-9h6?%Ed%{hYsdNbkhSy$hy7_>-e~g42S`L&&$aO`} z!=b1yzWxsKYEvcoed?GRgM@-Y%b|7iEKzS^uC)r@r^rvp#XbXpHf|z)l6z`mz?rDJ z%N~(%$Z4A4)X#7Y%yqQ-q0{_>Uz_V_!;u{n6jay^VaT0-5F5X~yA~%S=pk3nd~&bO zD`;&hmW=?8YHLV0Iq0riq#DLL)(M)^xQpQqt3c5IDYxdUtW?pmRdZNdIuzBN|B!Wh zZc0qQ3T^QUXmN;#`&;FnS9_eUDhteTH?u(Rnh19;Nxwn;ASW?+9{MAHr#Ng;d66KKtCb1`6Z^k|hkAHxU9ZPWes~ct5hFZQ+aIsE zdDAr%S2)KJ#g#97!k`X&v-W1X>AVu$1sQilcpu+;pF2R0b!Jp+9j562T$oVT`w%Ir z549G!40g33T&m;@EHb5Mib zYhxr=WI-;=M#aTZ^6?3$3ynK;NwfrDV{|}O#@=C=c&x)CYH=oJ*E&nP^LRo#O!8ef zgXp#=frb*Q`y~d`x5D@}#PP`|x*6YqAZMVsJ{i5^nPT5z$YJVOsilZ{iJ@mENTV=J z6NKGQMS%Qkwpt{&vWlLR;}QIEK7Bt!aq&`d9@&drJ_Tnyt8Zd6dg7hK4Ewrxu!>cz z77i?qnNU8YjSgwc$x;=G;h&svx~H(VP=DN0SkL2;3Jar5C#Lbd#Ewvj`Tx#W%eqg= zDFu}%3hJ-mMft+{2=*?hiuER9f6d8a-)wM$5>v%X6AF-v7hdUb*8U<*CtQQsQY0a! z_IiY%a7<-U2pI;~ds*GMb889bcfr9=v8j3_h9arS+4?p8*cc)i?LUcS2aF)x9i!JA zls_i<9to%84Pke9XK5~1SXtO!A_>VQH51BN|6(12` zhc4E)1p&oqAKDff->vt(1Q@IUx_5~*#|Jeg_??fMA5v3|33gT&Uu($df-%8C+(d~O z(UM)k&W4O@-F5|a-u!llc1{j;(FNGJA%@vFG!GbVrs4ET)EIX=_Q5mSo&AhEvODUU z^^tYg*%hQVi+Mlh`-M2ImTihW=**_0LF)}WQ{Q=Thndc~-V$-9Cfs=|jB&?aUD)NIHlRy?>)RaP!@9ebGdHbf`xcTU`!r9 zj=IEv1sva<$=? zcrt;<_5FKDcXEDsUEnDje9dYw#`mcjjPrd+K{dH^NG_C;tEJ?|AvqF7Cr5K}uM!;q zQS%58#XJI{aPdxJ{U-okm(<^g%1TsU+)mpJExv_PACg}Y$!kQihm)N1jV9*Rcb&q! zoJ7(@B)!lFfRi3F3Yl)QN*$)y*WmEwCQ7wq|P3W88N}_fW^)HFK_q*~4_2NpPo&@TnZrm~O zF`004oxm+59R2IY6Q8k!-$wX*yYU%%->&a_l~gD2n`&1m*jgC2L- zg=*;v)DvWN?-b}O{+Uvk=|T#hj#W4jDR?tZ`LcNYQ#N*&h=0mAsdxMnh`)m3zfbXB z=o|lpPtW6@u(1pHYIy$%U)#lAIiQlblj4tCjrjR};%Do9YtQ$hZUMDK)N_gYR#4kt z9ZM$^@1SO2|09L}Ey6n}e3XaZ>;F8$UkwCx9YJ?}{wFnR#B7&vjbtXW4yHI1^8;d1n z=AakT3iYEGWWnLpXwm;Sak!RcfX#qA_$^PjHtS z@-jwCp1z8GSHIQ5N3zs%Y383;QQukt+#WBl*sQD|KZVDx(5cLNamoI>A1@HK{> zLeP9SvPuEp3&Uu>_5a&{w?Cor`@q{lUq z30Ewx3AkqBT8e8Ou4iz)hHD3|eYlR`I*qFpm+lFTGz`}*xbDW4iR(dJt8qP#Yb&n( zxIV-6Ev|N4I`9^Q%ZlqkTuxjYas3(B`?x;F^-o+3R~s&A9eBfa3$6*cX5m_Z%Zck5 zT(9DK3)lO&KF0MWuJ3S3$YV6FSX}YACgIA$MgO)U&(Go7h^q|Od|X+$rr;Wf%Y;jZ zOZ|8J)>P>{u3J%^GjZ8)ZNT+Bt`b~jxZVMNFRnwl)PI(It5jEHl~z<+CCw*RY4OWe z6(v138u1?NdG1CiftgFJHVR_&DZzJ^l(<+UCC=7J&n`}tZjZN0|Gr;b2X3}X*KnP} z_0X~v%gP>JBArlZ;y^bOS8tm652s2dlU4fkKIpQoT;(iVw)jybFU9{vq)TyD_KCCV z@m0=cpej{p%t6vs(=v-B&CANlR+b@M6W&*tV>d*@LRw$?uT!;O0`SH z^D*2Vw_2s&0{1koFL52j6$h9J*9=@KxN7Y^X)f;-j$f84{ebjd8EcjPfa`7L+K&6* za5dmMk88(mR;dDXZ{XU4XX$aPRFC^l7B4j~U%6!Q@@3`~iyvLapO-9N<)reVf6I}6 zUb0o%d#6?U7}u4Fh@bQl)=|J`4u^y9zl z=_{n3KaKRC{q;`aX{qNg1hVWu`BUSY|L^?h*X8=hU)BEqb`8)}bpL7o!++`*r2EsF zp1%;yfA*)w|8egBS0VpX3!pc};7@%cJ@tf5(tns?g{&|Af0o-GDwEU`79kB6!Q~ZC zyDO_U{e$Cay{*SZ3dCPb?X4GY)z zi-pJ;-q^f zCr`0VO__GDb@5M@EL~Reko{rDBg-FMv9k2BvQNRU0e`4PJ;spyA-5CGmy7e2L z`ahlj|I_dP-!A{u`_j@gGN)(Fxc`Bf*|TQba^~dbL4|m3(SxG=Z;b!{METE5TbMT^ zJ43>KR(^KIoEaGGAe=pWRz_axoFWRR;WKBf(g`Kp_JvhyQo<&L|96|gjf?p|Y6jB6JI6_PA}6F? zW5Ja|7Xo^${x8BcR$3vsq~-X#4H!upyTY}6If7yIACkl*X~U$j5R)z=BO{dlO-z*d zBx9_3vTbg-Ub-hSvCsw|6lOCGK_&en`y%|4q_w4M@lOv5DO}R)ans|E9;LLEWf^N9 zcG}8TE?Kr}l_WhXt&)~VE2T1N8UF5+mU4dJzzm$Nket%PpjalEah2hZ=*&n(lA@#t ze$SI;O0%V0{Pm_0*j#CbG)tNu1S3i5h?R{qGDPv?m^^7|jxD>W3Xldea z8F(ti-HdA`eqG1|@t6%RW`G|v&(Ts2E8$!}%4zM$%_@Wz%_^H;s#sCe8f)A}7u{I*d+vL0 zco33y-TnPOpY@a59?rY>o_p@O=bn4+pLgHHhI*5{R+1-$|A?brB8Hp<`of0RP%Cw= zT}aLFI8p9_Y`W}O)Jv_W9?XDaoYN#(2hxZi*_YX}5U<(PQw7%(=`seI2xPXwCO0BA z4sO>Y)&YJA#7P?@6Qz(9kUm3zb2XLVGLrRBDcxT5zl$ZSxlCKZf#lkdwWBmDttDL$Up=P_l&18i&6@St^YyH3SHxv$e-m$0 z-&L^BCd8>LCfUjsO3?v{}A_Gx)0d%vi$!Pds$jjnCm-aXhH8sJLW3VHqBF{eew!f_*3$u zQKZn!(}vcVy45{1X~yg$osVGYpI2@V#8tOJvJ0BCY4+ARn|v4h=ausfp%tCbx5+V+ zm)7iefi3#$4)jZs>xR4r&7~>C>6yGZ%}zAa>6)S0L-+1_8M3ZLU65_jS?bi5N`Ai9 z3QTvnihyb5F})e*qQFt$*Hb$16_j3G$?)rhEDBr-yikSja)HNy-vX=vUj=+*Qzcsq z+yi_yr31eWI8|8*Nx={J8sJiYCG427Gg>8PY{q7R?*cvqOdsS-0@J&R1HfDP*r555 z#!Lrq^G>8uyLGQn#csrZHh4<1Y_ec|bybI_HfWl(O|>wzQD0wez#KwrNFVe@oI5!c z&A;TS_0q&^57*{i{MC5*J&}JNvOMDoZa)1(mS=o8o==~=Wbyg)mgiNdgZdo&_`ghd3)>9M)#Gm+ z)`Sk|r5aDzFd%G+XSSpx5yFj;?9Na;$DePqJXg|jDbd!(<$tmR~IziVE$s}{>_J}PU35BTy3M6A;&IEb6cvhzlr8`LsR-Nn$#c%{{ z9Lcjy>ExbB!j_7qBCH8)yF!V5ws0UTf{OiBKw)PNvea5R_B9aT^YV6WMe!ZcC;jY5lM{ zF9VViyxz>BT#IQowBa0i(8e5TkYuWb=4@e8=_F%zNdn27Ymb_uvf3_^ERyDJM|m!L zq$ifiW~@5q?aH5{8%o@Sv+7VdoTg1rFp}?{Ea|ugtbG^1lWAU&JqS1~jfG#Nut+n)@#;DbW{)Vp;aBNFloJ^%f1D%m?ho>X^A3ZN!x|`!{9*s zL9=8NsI2j=&@1gyO}>rDUmB;nNhYd~@!f3>Sm#Y~;zzO*ACi^I<0pe_JY8KLI$3~i zAgs4-MX=GsJ_NRP>&9?+BOVZf==MrLb)-Gg)fV9$UZ3pFKW~FGrsPJv2{RKbbDcSQ z!*_Eo&UxINOYn}Ygva827)rPE{)@DwbD^|O6H4$$)B}6&X5dRa8F&#NK!R-z?PK5p zoMu}hZS3Yyf;EP+xpWvA2wT!I{?ruBr87p_u1Gi$F(OSl{b_45!E+mP1`cJZEJHa4 zdImZM8ist9OT;k5Dl%EPT2h!1-xEu8hLc^4Wz(?)Y7N`2g@mCBlLAvB7c-X$u^bwk zgDjc7@WLeb-bgr>iB@#P5}XGdaDw99ct3tuE)pjJ&9qz^27oRx<9d5+ygm7}NSaJ_ zktUQ5@j^?|FiV56StbD;aw-c=S27$)qj4rp7v`FF*o7H~Uc$L_h}*iEhI(MD(3^!% zByP)u;@zPz<^hu~(wTnot4w&T5jh?;1Tw>=q8cD2Q*nngNH zL^K%8I@*%)ST{(_IIS-dS-rzCpJk!RNG4LzmJZz&i^tF~ghVpEH`0knMPeVGGqiYE zOlwQ-LEDzlAp#qq;uU6p#?sV#WD&r~@5F3k$u{HhTn|PyRz~C_4H~pNnvEoIe*soy zq=hixu^hpPP8tifXucXVzJ!lK14V|ymNIRTI5kSQQ<9GC(2x+%mUJ}OOwW%$dNFQ{ zKQm7sYm4K{OsBD9KHmuoqfRs9Sn1@SVQsOtwg^|cnNPN5K11NxUFb|R4kau;>tl)c zS2&l2O7hKPH14QVvuU)S7Ovn*y${+r-9syo!wh z-&Rw@Mmer!!@yNFjcmY3&l>SoBfpNvo0t!n_>==veQP?Dt4-o@Fq6L zaV?wS_-1yPxQ>-`+{j9StFdn_ zZw%uVvG~wM~s|61aX_0~;~$AjkDA3mk0P#9DzjH#V{$$D3Gy z<2tsU<87>z<0^J`JJD6MQygz$vm9?`hdI89O>kVpMmXNehB&Tgy&TuFILDQ2H^;ZJ z8jc&7$ng$V#__GJgyWs~r{?j?4Li56g&?)Bk(~kFTz?Zg&G8O)%E0r$JD`gbz&CAb zV8?)~YU*gzHq^2(aO2Kf zSQGGVm0MU1@Ga1*V#L=Q@lxQXrfpnalBWo9!VBAUIZ1w!x48H%#jh%n3X6*>3Re{t zmy{H}wP;&akW~We^Zv9x?@w)2<{g`DZFgeFX{)1aJjwKR7z?(lcqo&x)x@yb!b)bJ ztvbJlploK_6v{*lqRMnSv=6D)v_*0o=I3%|YucBJEMwA&J!lAX64o8Dc3U=zsXT1M z#FY+T$6Dd3L!H=6bn~q+c7LgTv;~9<&e7i3h9wKOfn3;DgQmNUWV#R~V zIeJ@BWvn$7$1a?9z-S)bv%38bTYEg2$)zKD`Kb4o!Wp z*k}vgit4lEpU2Y3eqva#z-qBlTvSn4C>YrOfC}vfh9WrK#4`c@+=xg8jw9*JhFk`c8QJJHD60alLEHx>8fXk# z=5|bUEiE``iN`t<*fX`X;MfMLz_ty~scc#jfg_$lMUx-QXxv#>%cXa_Bis%frZN{jY8iYIP(R>0j+>0Kn=hL5CQ7}HozLd z^G^7G;6lJjwGux9f^*^KO11zv12_#h1(*Yz0GtH2;eYa8gK|O1(*a( z0LB4hfKk8*U>I-^Z~!m_7z7Le`T>1_UO*2Z3rGRtfGD6D5Cqf!e1I}QDWDKAe>>_2 zi~{-rVL$*-24H}>+aMEQ7%&JJ0Q3P;fI2`mKmn8kiUFr?1wX(rAPcAgtOpbU=68b^ zU=WZ3kp7y11Az5_V!&zqb4L^|?d!Y0@18zfgjjWd-~IRYty#SqHzDr3@4nTzUoG?n z`vzDME5A+&?&`xm2V8~-1_w~gR^B(zhf)mJA)?V}QPHbFZvu z4V#DR$B8pP=YI98A&YsQ%w3W#mCW$n1=C%Weu7LV1Q|N}4rORcj&!DzI0Z3S;&nz1 zG5r%m>;14p+)aNo$~QDtH*WjggO88a{Y&-OWuN)1``2H8u>k4Sp60#D^d4+?+at~T zW#`6hE*wiX>z%_piX2gM1H3qf{POe-sc_qJ`T8&}Lb^Rt7S%I}_#rb5`DUQI-1Hm( zSj$ja8R$-#We}%#TW1k3YFp$*G{m2Rm6x>~0lQr=+iopu zdEld24f=)qM zGf;ojARaW*DBlcLKGrgnUv@9%F$*86dkFDi3ooJ}{uHddmX|w%GRFX>y|$jG+!Sc6 zp$~M09gAtyZ)*@Q16cVH-AcN#mLKD8g~EJHsgzaq#nvW))(;)ejHE{SF({?>BDZwPXnvhboZXAv*N_cUfcf50EB zomtCJzHmR*phg*rQ=6+14+2b?h-M|3tmUZeAllq#;YH(p2=P(C89)H~FnJQ~O8&@N zo_J1x?wExqm6>0GAJMJU$JVmMF9^CaOTSPV5pk<*M6*(Rt>uW<4CqqJc=aJZ4KUl8 z0*x80{b02Xs%y$phWM^jzgbraoby|@L$@En-s05-Z05=WR$W%W_5-E>KLixKqkxqG zZU@{AcnmNL_z%GK*Mc6<3g`oj0iFlka9shuzbjw|0p|;Wk^s+|#OM3#@I4ro&TJ6R zD+S_0Z7wO(^Gks#?d`y%_YJ_*pKc>wmO(!NOuq9k!?y+HD0Bi7-?YK!{{R!;0br{C z?}3RY(G>5|%iwWIpgf{|+Cr;bfR+k>sVYE-WkE;n=>sPDDbP5kKs*T-172Sp;PKyC z>KML29aMJhI~HX>@-no33+PNy9VD{Qv5}W z{0hpg6imIm@mf9qYGAT2vVrgg%HXGCxU9zvY{u8s26#1Q{HP`WuWt^p#{d+}{N?2z z*>U0g=&lRrhj(8%|M6Rw=3C`s2)}OD^Xd5?@q9ixtM1V0&X>RGofpm@XuWX$OQ8$r zzqx&B{)|P>3}HH~=iduF2r%WGwa`T)__sI!Iwh6Dkw%AZJM;`v-pBMzfoz2!oLsb# zES@Q?AJ`fwje=S4q@`X;-`^P^#8v?p157%rJ=_%wu)6^i%zUf-SKb+5Zvs##YuB-u z(*0Ke*c@Lp=Tk7-L*whRWPpX%=FQ+>-zDT!VdA8DB`8f0gpkT^l&2L9u=d%3ec67xTmX=@M z-odG*`OC|HVEV%OonO6he(ihzr6mdk1Wk!F8^=8xio({|0Ca7n!mh! z-9InQU*6x37U{OPlK$Uyc_sS*fP$I7T>kf6wKRWu{a?OX&!=@B1*?q*jrEPWZnNe+ zRTbd$w05On=B>f=$m;`?#Mi5Yt$8!ZqqT4|)&@NQbDcwU=6dP?(kal|kAhjA#@)oa z0AF8BfyNx4%#iaK(o9+t7Z3vk69;%q|MQErOMO>6;xum&&^$|JO0v2Pc+98SkVbPH zwc|AEBznO@N3>Mdl)=OS$}qzAHwVl|PD}KI24CXWi)Tt3J`dj!W1c0NW6Nle#Dgir z3}{J)Szt<|U}8#t7U=<=s{bi@(5l~;hRfzpUy$#r^trNCxACZ_y# zNDo*Frq`WY-$6@#DWkrz^VAnK>f3#u`r4M&_p`U1TVGN4V*BQd`bv>z4QBg>z|UMm z2ba;9^h7(m*K9S;HG2w}&5k`u_hQ(hxo051xQ9-=6U#yXnOeNxq`PT58aFpM9UH>*e(hJ6 z@LR}uL%Amsu1&P3`TK4BNUt>=moLrq=h@~&JMPv6lQFuz%)UuCKrQjl7B?rB{h*y3hlSN{bB6!RSlt7CbD_)XIV-M8?x~oiM{9!cF85+Lhpt)>sPzK%X#n* z64>ik@4{XGs%R+Pl-!Cp#Ia5I?0{9Qs;kOE1~?A=cZQTE?EI-dUFC-1d<85TA^z-vx^-k zovf6>lGJ*=vMRi#!uz(LoZs3i6XC{GETI#=NIXd>{8b-6>hoRFe!+QptKY>H>} zZem}jXOQdPqa2|as?}p(qZl`l49Q}#o~JB5X^c>e{BQIAucCXm5yt*@)pp$E-G@&Z z_$x|$z`~_N$L=SInquvHjCOt1!p-PCIFfx_ZvI12O|h;>Wrnv1Px#;*}@_rF9OaXF)`T2pjyBJNd^JEw~OA z>BNUf0bE=N1Sro+({hvk!(lDwAzngTYy4=~d5D+L>Pk2dC3NS&y#_npy#SX3nvHl6 z*vh8^?_aY4Ob0L_vjvv?9qn{yg}?DObCy#am3nN zj1~u~clgWN;dfiI=};`22~_K4Otwp8_Lu2pQTKnb9B+-udqtjjM~+`@Ys+=K3}#CT$S&yz z^GzG1^8|V>1kktBw2yu*;8Fmt0O5|6er{i6U`pfXj7HvTfXzJOOJxbu4>J>A8XlBJ z-)moC0Ht38pmZ02;+00c%7|n7=Vcm<^hN_?8s_|O1*W>O72$lkfNg*jU@ZWPT`oVh zgXHN0kT1E%!1n@ETiyep{C)t*gKwAlFY|oNh(8QW@{IzhzP|+!-4_7VrtbhK{|5ld zFNMNLKLn%~GmyXQGo6{4_+P+Oo`P9qxDI!C08zkhfDcd(Cs6af})MmfM?zyx3rK(xKUVR{Dm0P6uZKndV%txhv%;G@7(fMLJ@ zAO#>EH=2S27Z}ebHnYsQiO-jQzWo0xy~)SKX8Au~Tyox^x7l{y@aLhE^Z$sQ-oEqy z`q!UF`>7S@H34HKb6yj${rTtsE%{$=3Z;LEx%`sCqESrXt@rM`_Zp*fKKUd4;o(o{ z_@0l?ou#M1-F+O7f&QzH9)HxPXP@);o|p8bfPp{%3h65i`hNiZcORL5G}04D+S zfH}Ykz%js4z+u1?U>q$xE15hyK=8^xwKm7L{E&TqwaguYntYZ)AZJ=sseH`>aPhPbBgJ|E74m6G^P+8gv znmp*4U<5qGM_wM@ZG=(KE1*9gm@?I_!}p!903ZSn%YWC~O#k1CU+!0XFIg5=8NqC? z`Ci$KTlYt4obBRNbIE~(HGlcu$(l!BUEqj2aG~=k{ReKAuwQZ>Li;m(gp_R0pO%pIso$OIqA)S0m4f1wRNwM4?fG=8A~zs3~FBg@p#ObfPE|kHq8{sFB((7!wSY)@iK-uQa$n z?0(wa=W%%d!F$BJ&3Bvc9^VeNRqa*>RA$qS=XJuhf+Bpx@m0q&j_1JZw~kHDTb#E$ zv(9%p?{yA3_d6ePzC%>RKJlN#Cq=*O3D;TI6;iE~mER-(R{n#0nNp&ZDmN+~rCMoJ z-mN^~+3)$B=gXcid0+At`L6VdzH#5Rs$2cEI<5YT`a|^%+B!|rbmKh$)FXUXsItGu ze$f7~eb)X{`|s>cj^8^x&L%Fy0q1JhA6&nZ|6Lwc#ueti(*1V#p!>7#e{}z=`;YF+ zJlA@TcxSxFz0Z4p>pkne)b~czx7~N2@58?D`2N-RyzjTZmwbilmFilxR~?27+qAvf zquS%zH?)7%{-{;>W&c+Hef|&mhy4%xAxr@OW6V?wZNeVm{lW}1ebWAd{WtcP?5iEG zaa`fJ+L3X*$Fbk>sN*rmVQ6f-^E1vv&hIrJ_qzMt54u0<{yX<)++THn z!+p$smB;3}!4vkxJSk7N=f|F(d%g+ntnpptd%LgPx85iCZuPy}_fg-dZw$RN;hXeL z`40J}eV3^v>Ke5a+PYVLzdELVMx9ir)I;hs>Z>%j7SO7-8m&$XYE9a1ty%k|Hm*%* zliHMag@3dEqoltez83=8DI|o9a2)+u>+E%Y)+vaM;s?bKiysp&cU|dP>$=fZ?`njt zCS7x`I;lYlOZQ4YmtK%cEC=V!O%D0sr?nCY;+$Y?>a4)zEJ!?Ey zp=FY%%G2rD=XtMZ*z-xxQO_SemwVsj^?L90zTLM4{h#$c>HCB4R&_PmSu4I*1-eQY zw13WVt<&v%m00eokh-NSln33@zSF+n`&O%K{d7P?XGXh(79lIVTlh!eQv1j4Nyjf8 zzj3rV6V4wyf9ZU^_@X!>b;!N){qm6fW%)_@$MSRNm#dWwPeVp(HByGr@l#3wU44tzpl}b?BRd*2FGe=P~0zmMVu3-r5`IlRi0CRsr*{` zjq*F?56WfkweGX-OFdV5wtIGaBAz{-G0$Px+V4GfZ@u>sZ?CW4H|+a@?{c+GjjB2I zU24Dj0LI`t?FQ6Tqixk%w3wFA{!%-jeM*E!qdVpgx?4y_EP)R_VxBwdzbxQ`{(R4_O*_i9h1%{o&VunEp8FF zi?@q$ajz(2bOoiI((TaDx2310UrBF*e@x2nlRqPWUjC6>2HzD>-iy(6NI9nboAO5Y z7WZ!V{d_b%=|19q&i#V>b)GkR)_KZ3qQ?WvtMxQ^-igr__oO{{d-^>OdOqTL*z=g@ z+n#4VMcx{;y~lgEx8M7a_p{zvZ-Xy~vGxVuSA0e4$+Onf;!(SUnl$JDC&7a{-|;s78ZhT$30*4Jn8wK=eTFy zQ|f)Yx5B%{8}zn&-|PJ+?~CyD-M;<46TVy2JE5arKszPcjha*QY7N>R?Y-I%bn|g- zRQnvPYL$PDzuceoKS_F-;p-;$8jSOG_MrU;eEf^{^^Q7c(pe;aN}LeC1plzX<#GLm z>wR38$Y$@gf6P8%f5Lvu{xkbq9rex~&O4kDXBTG3v(C#!o9Ga$q0gvz7v_PF zfzK1-G5EU&-Eq^}708{jLGmplir=z;)0y zoS$JPT$8RT*CE$5bbZ8i)HUNe=6Vi(_C;wyDw1VcMIR5!56a(?XXGEqC*+^VCo!k* zQd*S`<>$(3_v_tjJvYItzQ_AM?+3kOzOVTf)IX@N(<-z|?I!g0VeRL9ycYRi>%ZE6 zt$)2=^85T-Fm`wPTl{zWll~t6z5e&Z9-j4|r8bom;8*5w_mj`24>=|rH)Hm^MywD& z0UvWjybg21Gtz$fqw;ph@B?LD`J($tcRNPc)1LqE4150$tC*DUhrW6>r0!Gy2IFE4 zWU1Aq7L)C&X`xr^PE>lB)}I@Yh|>yIw1K z;TO`_HSk$Mdy{>)y%~NgY>(RG_LMz~ zQP_)>+@O8PegNy9QTv$vgniCFkF~}r`)T_bJ988|iX6p`62}@xsbj6f<|uQB4#nYf z1RT|l8b_UDx1-t7>IgfcXkp4R=ooSwa2#|DJ4PI%jxonLG&|{-avX9@W0i8manv#6 zIOdpjoN&xJ<{c*;ryQrTW?XQbbuee4v&dQOEOD-JmO9ruZO$@hxpTc!aEi{|&Sqz; zGwh5yjfHENw2 zRGZY(>KT<5WFq==tz0Irmqo0Hs^vPl3BD;T$K@<~tsgdgKpvJy<#F`iA^EV(f(7(X z&*3Ffk*ma2>aw}YT>{o&0j$A-u(4K*o)kt-A4bg(M$8D-V-pxD(-TB4$33)m^>j*$wTS^^&tHJh&qbZ z*SI=itiPt!!|DKx{Tldyi$&w_duKi*NO6=}s<3Fe1VZLMb0$}mT) z*91+}6wPVw}xs^V&)6ly+J>gW3A5#{7l;B7d>JgvNMl0Sn;8SDC%sK5QR>$DFhug3l!D zUa+5qZ5P3w1=zE0$xX1}UPoWvf=6MsWUpkYryPZbU6wh0&N^q%u*Vd)!BK8=)3CLZ zu(Pv%BUqas5|4^ASj)_dXT$~ZtVs4@gJp<(bsmIO zkT=!+=rDYz?lq6OPGQf(U-Ayf67{CAcIn01<)C-OJMKM- z^~-{{&{u{XL(tdk>-7y_$8gAZ*mu--%r}eKciy+)V``DHZ?Itu`!IT=Y6|^jd733s1+;X)B)wL!3FU%- z-KkHg7Iq6gLccI1Ob9c=Y2mC;YA>_<>;djs`(S6&@SqHq6@XvtgCCsc-j2bemBV(b z;mum%!+PPlOusb_`#A(}MZStW)mqq1Kx~4|M8$*fQB&B%&B9g+UB#|4*hr1533G22 z7IFYPxG7l2QP(_dqY!pcE{U*;CfEe)D`17>dxSC}DD(7}6sCkj!nAN$m=_A| zHb~xsk#W>s1kY~DI|pkYf+wAF3b3vwX*YaKR?=;u4%X15?8dIIRSCl`;z~-%a_i_* z`jr8Tjf}ub#;{kOP$v28G>!ep5pFfdux2}vx1E4SJy3(WI_Pim@8*3G_DB73^hg%- zcCWwB-|rvr5Bi7DLkF=#9`TQ&pT_+Y{z?Co|B!#$e;70SQLI;vq4!Sk{yXVkpgtVJ zy>Z@$g+h@~ER+aqaGF8=S%w~6k3JQ7uLjVsH9{Tq)P(+R7Fva{5EbG=3OleK=&lbv zK7bYf5cWw2v5p)On7str6VUJB{7l+s@5gL9W*_IiW(wYB+I|@8x}!KxII(12U4Vt0 sJF^BcyA49`GfoouVz{V*iyFA7fr}crsDX - * Juyoung Kim - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Contributors: - * - S-Core Co., Ltd - * - */ - - -/** - * @summary : - * @create date : 2011. 8. 16. - * @author(create) : Lee JaeYeol / jaeyeol148.lee@samsung.com / S-Core - * @revision date : 2011. 8. 16. - * @author(revision) : Lee JaeYeol / jaeyeol148.lee@samsung.com / S-Core - */ - - -#ifndef WINDOWACTIVATOR_H_ -#define WINDOWACTIVATOR_H_ - -#include - -class WindowActivator -{ -private: - WindowActivator(); - virtual ~WindowActivator(); - -public: - static bool ActivateWindow(const std::string pid); - static bool ActivateWindow(int pid); -}; - -#endif /* WINDOWACTIVATOR_H_ */ diff --git a/packaging/activator/macoswindowactivator.sh b/packaging/activator/macoswindowactivator.sh deleted file mode 100755 index 9ef0fa0..0000000 --- a/packaging/activator/macoswindowactivator.sh +++ /dev/null @@ -1,15 +0,0 @@ -#! /bin/bash - -abspath="$(cd "${0%/*}" 2>/dev/null; echo $PWD/${0##*/})" -absdir=`dirname "$abspath"` - -PWD=`pwd` - -ACTIVATOR=MacOSWindowActivator -ACTIVATOR_PATH=${absdir} - -# for coredump file -ulimit -c unlimited - -${ACTIVATOR_PATH}/${ACTIVATOR} "$@" - diff --git a/packaging/activator/main.cpp b/packaging/activator/main.cpp deleted file mode 100644 index d2b6a67..0000000 --- a/packaging/activator/main.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Window Activator - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * - * Changhun Lim - * Gyeongmin Ju - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Contributors: - * - S-Core Co., Ltd - * - */ - -#include -#include -#include "WindowActivator.h" - -using namespace std; - -static void printUsage(const string appname) -{ - cout << "* error : missing required paramaters" << endl; - cout << "* usage : " << endl; - cout << "\t to activate a window :" << endl; - cout << "\t\t" << appname << " pid" << endl; -} - -int main(int argc, char **argv) -{ - if (argc < 2) - { - printUsage(argv[0]); - } - else - { - WindowActivator::ActivateWindow(argv[1]); - } - - return 0; -} - diff --git a/packaging/activator/windowactivator.bat b/packaging/activator/windowactivator.bat deleted file mode 100755 index 0655f2e..0000000 --- a/packaging/activator/windowactivator.bat +++ /dev/null @@ -1,10 +0,0 @@ -rem # find & move absolute path -set ABS_PATH=%~dp0 -cd %ABS_PATH% - -set PWD=%CD% -set ACTIVATOR_PATH=%PWD% -set ACTIVATOR_BIN=WindowActivator.exe -set PATH=%ACTIVATOR_PATH%;%PATH% - -%ACTIVATOR_PATH%\%ACTIVATOR_BIN% %* diff --git a/packaging/activator/windowactivator.sh b/packaging/activator/windowactivator.sh deleted file mode 100755 index 2adf516..0000000 --- a/packaging/activator/windowactivator.sh +++ /dev/null @@ -1,15 +0,0 @@ -#! /bin/bash - -abspath="$(cd "${0%/*}" 2>/dev/null; echo $PWD/${0##*/})" -absdir=`dirname "$abspath"` - -PWD=`pwd` - -ACTIVATOR=WindowActivator -ACTIVATOR_PATH=${absdir} - -# for coredump file -ulimit -c unlimited - -${ACTIVATOR_PATH}/${ACTIVATOR} "$@" - diff --git a/packaging/activator/windowactivator.vbs b/packaging/activator/windowactivator.vbs deleted file mode 100755 index 3e63501..0000000 --- a/packaging/activator/windowactivator.vbs +++ /dev/null @@ -1,11 +0,0 @@ -Set fso = CreateObject("Scripting.FileSystemObject") -activatorPath = fso.GetParentFolderName(Wscript.scriptFullName) -activatorScript=activatorPath & "\windowactivator.bat" - -For i = 0 To WScript.Arguments.Count - 1 - args = args & Chr(34) & WScript.Arguments(i) & Chr(34) & " " -Next - -set WshShell=WScript.CreateObject("WScript.Shell") -WshShell.run activatorScript & " " & args,0,False -Set WshShell=Nothing diff --git a/packaging/binutils/readelf_arm b/packaging/binutils/readelf_arm deleted file mode 100644 index 8776f202cb8bb262936e079d64fcade07219dfc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295288 zcmb@v4SZD9wfBGKC1Dt%3=km3v92vK7lAYk-T2?`i$#1x`p#dd)3 zVuTtYDy3+~ij}rhV@q$T#Wvoea_@!Pw8b{p(soXUQ!!ARwpyc7^Z)+N?13ZKK2PuG z|D;{+yud1Hv^ZBgYpWiC8ghe)4RykqO{XxrbS$XAF)C$2Xu}&Ai zao^{I*1p~>GzK96{NIIqLZvNFX2H#nM0tiE5D&b3MHWVY3zQzR3j~&x%);b5gO)() zMU#wMU?UXZ?IGY3EKB8zkG@s`3KhT;AzdmEeLLZ@SYoAM}6x<2i5tt7d%1}# zU;T~B2JU}lvU3f77U3s>sX!5M1yBHt1116b3j^bUi-mm5-zkPhGg#*VQG=J6P{A-0 zmv7|$E+ld$Alt}BmjW?Be-~wgFPXr#!g)bu2K_L(4@=iQsh~`I9fm4{(+L)!%14(w`iCS6QKTXT&Rl zzCV}7E2D#B5vz4wG7q7T|5F+AMU^4{$+d;bRohAz*+p%sKiNh;C!bZ_WqY-Wd@Ty- zPd1dF=}&gkpZqcRC!5Rf^d~=;f9X%YD?d@Y=udW)eR4jN^HcQ|{mD;0?oYlj#V};Y zt4v&dK|Z$pkHdyudC#XF9@TsIhZq0l!IFKK7d-dCg+H^(DS>?`<3WrHv(j9rcHI&j0LXe|!0Xyw>l1{oUb{_Pjg%j2{nu?y+;u`tY%D zzVQ0Pcda~SP2Z!-=RUfrglDFIp+TUFI*ficy9UWcMpB! z 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%0D%p_dO$n%-F zF4>?9XBA{1E=g)Pz91WE3$jsQWEr8F!r(pRGFd3kZz%ZtNaUK|EL?FSiFOeO0B74}=NLR|ul-&(IWF>a zjOUrd;hrnRyEH93_hfC{=}OD8Q$_TI4npq_1TEYvD8!EUoGHR#2ovc-Zdo3JPsl+d z4?I9yC<8`IoO2GeMp%GTey(@SF~t1}OSmM&SKvh+fi2I)ZS_>#)=r3<8#_}v!YM7` zl>U++Xa{MW0?YR+6rP>|pgI@+gq(KhWOSq7xAj~NhhiZJrzH&X5Eig7c7ND8h43X_ zV4l!lLS3d2;Pi3L!r}`fnMmVBJ>}!YJ;kkzNi!IDGb%>zaZU4%35etH>;hnj>u_m8 zLloeIUi=e!rqpR^&AA&zA-Jcfi|L=9E9z%xab~MZ9+IEnR*O0Su17DpwZO$Jri<}t z))w%IY19W_%tOkNm`&aE=uUd+-K0u&EI5!l4sDO@x^lt0@h*5b9!9EQ)G57x&o z>T&vHlw)b;T{Z^Rd?(BldAw}D;+(V66z7~3*EPHd;nN|8^TZ@-Xxmo8oYNA%sD`Xv zjBSj;p$<6=4G8}L%i3ND&#ou&kL{{$%TD~xm>Vs!oPQ?|x(obIaFU#|dwdZFE!d}i zD6R&VN-Mz+Zp(Y&Q7*{`3m3~5M^D+Lo4J#FR>d#*R+Yfgy<_-+I0Ec$)G68=g7+b~ z!_p9$pXo>Fu)Bg&()f>(%wzUOBluIj_;(#ZFZe$6DCGFa1a1}dL;S{{_%jFM&-A75 zCnx!gluz}gAAwJIyfM9URYi|~OkaP0Hj_AC1lf!FQhY(ekVoBB!*!fi4af1@cGkvA z{t%YqA)c?Y**50C7QhIz4Cw70E@1S7k6L%eYskN%V(_rqMiMWkzzej1QKSmIiVAX` zh~4IfOn%BE_JzQvr?jL5Js}RXie`XDe!#_el_tWhA9mMPkUNFNL^EDK3UOTr)6D## zOPy#g#EpDLbRI_IFXFgc*8Sz;3xpr@1u=Dd8$`U@1axzboo}B%S2rmf&&sN9=t0^O zp|QDiy44CbnqYw{9Fk}}LK2;)%&7UrSH>fmWnl~XV+Hs;E|k&ON@;uSE1NO+CqyeJg{}o zYhr}alA-1mVXbqkLQj8c3-JjY?-o%Q2Ni=KawNF<(O?gQORDL{vJXD!8|#k3T0Ygi zxNLT>(H851(!^>Uc^2z}(rHr|X%G_%5q{FDAj^`@*;o z>ih$$GfzV@S75YVJzYqDZ@wrGE=Fsei?G(u2&cN@5fxr|l*&QeP#;`aM>p9>cd`#% zSbtCGU{CbK5!US!I#>Zcbi6^iTfVb>a5#@b!k{BbhbE+m(}Wapnvfz+6H>sPz{eNS zc@}U(eQ@a9d+1K~!D0Jb58bIgIDA&Dhwe-t+-M)%**-YviVTbC(1a9mnvfz+6H>%! zLITd)qw_q+Wclkj9YD0@BWa393yRI7#drkQ#Z#0e zvZ^eAg;mN+15hKrkZ6OAA`QMa z|1Q%n^NP2%Va&X=Fndv^W)_V{2^?{6-TCt~6kGZ7%VPXWxNtDsg_6y(8$7mx{bLWz zkKvk!5Dxts5}-U5ISY$#m}7F0IKELOks`stP`xlagZt}r=juXhPXWIGF+9-C&0QYUTka>7YeJ?amAsaTLYmma*~w? zKZTP9Bj92~!MWG@^VrXgO`)v8UYw}M1AiVV%HOizukpd}Z)GXQUaQ7G@% zPuoS<GUGqHJjM{_Cv6d%#T3@&ROv5`En# zjVybh+Rm1@_jcBf4cU7*yLi5InMOI^G{*Tp>F;BDwvMxkJa%h7Kkxc zhtRvC^ZY!DK?O=MKWHS^qB*lPb~L|y=GbE1Xz`7Pggl@{;~{U-!*fgv8q`_cLTa(Q zwbn*i%Bxp9)m^%>&6eJl4o;!Z-aCR8)6L^o}nZz@T zXBp4ufPXjM8+e*{9>()QJWt^H5T2*;T<23eB+sL}cyAxdns`3_zC+nzydS-$exz~# zPi`H`_8*ElG6bF%??i@b^8)y%<>eXGB5^W9|>qUfV4eVu`c-HV3|E<uwNH!jh$Zpj`$HS`+gqfmgHL%vw#nH`|Cm%j)ZzmR7U8rnHCwOjwU8*Ba>Ypb=_G zySmwIBb0_|wrYDID@FppmEDJS8&`Jo^~OduKXG;7#PC(o8|7{z&+26=bg-ssg}i7< z--AY9b=s@-qg@&USeXDP2DSQ-6trt&&HA@=t%%8pND5 zRY$ckD4oqRl)|g5E2P`oy;51L4dP){SZ|J$I+ zaP~<&pThGjo=@ZX44%*8c@EF#@H~%)zkBhX#50X&7EcM!GM-gD@5bZ5XTJy@c%H-a zJf1J$c>&LhcwWNuUeIpf*~U}H)5O!ka~03Sc%H#?9nXjH9DViX>~kNxIXm%NH)kIN z{5<=}Z;Elf_`8R*r-0uF-$(I$5YJ?YzLPk`nHb1%c~GQ13$PdgrApELIc+@Cdf2kuXq+tbW<4qGE% zy9P^ct=?FF=v)pQT4cVm$yyturE9g_EwS!4XosW2M0MQl(9Fx*7^cvUgE0zo5$CP) zYt>HP-fK1+txk1=Hs$1{^77b)auWx`z$d^o*shg3*P86Gjb^=GX}7y@h^ck0+-%5T z#ptTLdpocy8M9Iwo};=-9Z|u2t-^eCzO@|{r@T=`6dKU|#I%yMs+{%eRg4AeWl=_g zM{BkQjzLzDsM;#TFQc96?s~N=4eN~^7!=j=9!6*$FYV{uEh9Aff!kZ}?6tbX;~ZV9 z0sDT}J&c~(+o)~^nZVyQlHl6S>UwRnR^5n-ff?d*T&}b*g6#wtvhIM1Cg0*QTy1x~ zz9-`u!`F7VtF2n6f)t1FwcR@8+$cwxV_Z0cw^vW{yV-&M8Z=*_+Af{7tDS;w$*;1z zJu24$#{TQup5r0SyKR#oghk0m?+;}ejh90? ze`vT(X0#P+r`v4Rsywdf@GgpH9V4i2xQqcjrzITUgrxyhDmUW~J=g#((jgQlH8ft$ z<-jBOU9Qyks^)3DI@>K+z(xM7ZQW(x$_N7onFY6o+%#U78=S}JO}k8I)f@8JQ>T@B z+9_+*bG_~DN>fsHffGGgyI`q|>E6JwZ?g<_U_t}6CZw5WV5_zsvd`n?2)(sg>8YR0 zk2aLeq8Vtt&G15Na_;TM`Xm`+cI zVOyGyJxz`CarKok#ZXD=`CfCq+%FEnr`qy#f}V3zS6wI{FQGBdMTT?eIbi&Ner&ni zu3>!7=G|a)CDJ}SOclEuAJ0XzVSNF^?ya@gTV>2eR6=-mNMMRNAmzVS>y$BIL8}0g z1gGESRhnwOx`XbbELF?pLd&2CrNO*Sxk>ZS{Q0R~MVLR@n7ztYkTo>>MvsY)b?H|i zx46rqi@=XlKWnvmts`S+<*CIW#%WDIM$lWGZR2ZAY{*uZk6i~MLdT=LqzUSZlO1ve zvwxvGaapUImA!h$s7)4Wo}(6^=^^7WhgIX;tcKU- z-PLS3M9MZ_nhK{wjohrQqgF;4L-Wt7VRY#3S$50N<7Jc|^r49#XKRd(1=KsM?($8` z0u1VVJ5f%-u|M$eq+#!vz;2DWELx_t1Un8EMI+cw&?)B?F|XcgaR zFsW5rXR03xbfG^(S}-SG?$)JuEzw?yvR$^>)3knF?o`kbm0A6JcyY!S0->0yJTNdD zC=o;ic_d$h5H2^%Xrw_pX@;WZP=Ct3vdn!u3dgx#g~e7$bcceB4n;CQ#LIHmU1kKA zlo^2wWd`j}P3B1hpS9X<1;VvK8`>?DJNI zqcljh&5HWi*%PG)I+zmG$_Az`C`6*$>Q%0-!0a_WHP+sTA%oiUVotmM&?8o09$#}< z+j10gmAC2rJIV~!M)oj$j5QNW7t&Cnlm_phF=VGwu#*r@^10BFXn1W?At{?Jj~_z} zYfJ);g&18!Iql1Wc~f4)dPuDMf=8>23J=@IJvBb@(`jMzNbo|ww~I;FdKsn)rs6{U z63%Di%gtI7MkIy=8`UPd5tCcxNd--KYr|XQ7aCbjRe{fX9ZMG8`X+oZ|Bfbuk)wnw z9xLTyH3Gj;m3f?iMrbA2* zYqU3C?J`V9G`Vb?Qu&L;D25d|RhUHAo0y%(8cC2~Z#Utp*!HFr$&iM2Yu#FO^+y|D zfa$;9fEAXsPn_-dQtJ8?oD5u)57u*_M=O#hH*qkSV9{+LPms(658WnSk%u7(WhY{De`R&8UsIdZ?#vbB`?-Om3#{`~ueG&D098RKa0M zzxWG05@EK0@DB8Z;az~yr3KhqeUHxvh6NaF4GxnZzyPx}0}ODR1S#C%Do^y^>+(kx z?@1$Yj3V#^%p|2Sla#_tQVN&5<4M=pJuPUF!id9h>?2T=0xzZy?F)7UNS7J#lpCc= z;`KaahNQXJ8raAOv9v$YN=cL=Ak`$?@1nlUU6;Ww5~gDxDVZMAG(n~bR&J}MwPB7?op-f ziQn0#vO8PDZR}B*md+MuMbzCu2jy;~P) zbz8=32O9<2?&g(P?%uQUALw_hHjbw|iBC)sqiY>WC z7Lf&cfW9gT4E0v&HyOYvT`r;$Vl65rPqS8CuL`4>4#`TH@Nh<^pB@jz@5+Rlx|@6L z?XnrxtVlraLL z-{1=NyX9DB;Iw{@-cRQBuvZ6VV$eIcB0Bs29Q^|X!mc~+QMFkh4r}vcImZpV4P@{} zP7I==ZT7XaoQvu?YYNug2H^p#RWf9E>uvd4?#@TSDIau8CRcfnVv&ya z5PyB|NH)loLR%@K0R*vGDr8UPAg9eZ7oNkAP<)P! zW;tTOwiF@B`q6NcV!|fN^H4gCOQnN}N7=I$=da(E4Pr;{OgeC%c@^q!W?70Uafl?C*fDR z*4f5RJK@hM1L(SqRk(V!r8u@|GMTQG-D*E`@2bRY_1+PKmm4+a40bZX*4wR08;Nd6 zXxAEzdbJ{v4RSggE3Eluy;12v4u5N5*0`-;uVX<(!h2CCe|N*Aq%U`8Vb%q+U(OLU zHnruLL0d&Lw8nu(2TKrG5kZMS{SiH2QzNDY)vYq1{lW4_8gIZL9%+7&j8V&Dz?M8T z)kVC(L&KwF&Ts{~1TS>kO|DaEIRR}*V#1X?y70nf5JT74R&&S-9a(ReE0_&7WhA+|=wS*|?Vw>h56K2GCXfYw>gN62&C2!VB(As&qVb?!k@28S z-%1>u(kn+qkTXv4YFN%!V}1w?9`{KrZm%iR*urOnYnUWL{6bs94%0{-_$mq89_|uQ zK1e_Jx(c6Nrp@rF9^n~zge3wEFP)3FT!UCk#qQYmHCQfnCBQ+|n{1Te%>LW5{6Q{T zV@aQ#4`vkN4E}qv1!=HZ({e~5t)Mhlvb9&qbwMeQ?HPK6$(bo2ywPUp*g#7s^WfMT zjMB?Ciet^)$WD(OgCUk>Cx`XDXnWgpU7OP3Dy&`9dPI-J(z5Y^sr9uJjaF-~$xXo6 z32fnR6k;CZL9_xw&jubnQegQ5s2|*C4f|kkYdgo{TZ2^_^IsKMAl!UHV>Fk&BS>mK zum@69;VL?{m0eD>abLR_BkADyEn-9D6Nt9PRcdTlLF3rT?{#%a_j~RL`iy*5R^`sY zB|q^IdtZ6v7j@^d6R6<=Qq!*Ho@kf-ah{jBa|M-hNlaWbbbw!qJtm-BXqQo8bLWt2 zm(6H1+3c=qN3O1`#;Y4gUEff}#0s;Y`7TQl8|{3pdJXH$P|yZd<+(O!S#-Cw<>0OX zty5=s*gafM4Drx(PVEqzO3l%RVmbgxm2Ex;%UIEJXEA8eKq}D3bGLkF8{MRlxQsM% zwA4YqacrK(6v*zzvBu^xTV`&fX0;xYrcRr$?xMfz=8cpW<9j4Kzt_UFNsHUXX|Hh? zIV<5>pC~K_lua0598y(bqULuEY}|7flyuKI&+vKIg3M3!R6>lTP+(XpHH}z$V)0Ym zAq)0k*45Ux^NmJT_fKK_QM_gao4~w;*>HX(}?k>CHVkwI%x_QA)MWAWPF0)%wA-rdV5tl4gPxdbv>7Wx7Dx1~%W@SU|0|B)tnb z(go9i1IJ-G3Uo4u)y5S%2m#5k{)sZy0Z|wpQcYP;_a)ih^9KoIU)R-@^^gfdI=E1( z(3gdgW7@!IcPNRaAne}Igd_cswsJr_Vx8m>MxzDe4f9B$hUYx->H1Y{1}D5&xsq?} z!Ds--8*M`6EI9HH5puApO)aXS_baG8IO|tMOG%}#L62s;9Fw-t$xtvkvXw(~N3tX@ zyyuhAJI9+NGMORKu@&o+Es~wt%q~p0+6MZRtF@iI9Za6s_Ens=LU)ADc2@{p5pG>b z4#Yo+e!I++NJE$9uNI&Ka@q2=WT$(&?H*xhG;^35qtr9l{m2cf?7%|&PGc!sXljxY zT3QIm#2n#a!DC`X%~@pSTQSYWRpGZHy+$+3(c?H;<$fwiX`~D4Lu51yO*z-opOerW z$(5!pcAwD?Y~)dIn!58EZ{i#ioFY!Pbcjz#Q&_9l0ax)Z4 zpXg>_;~cua%iO)2kLk2A+BvaFP&=fok>~%Da1Rb_yhp;al88uTEQd}-_iL36v|X&D z7~rVA3J0fvARIbd*@FVpU;~{XyDjWD$Len?c$Q6RE4+k7Uv2`B^)JkHg`{{Iv^}v| z!`-^>~bI`P=k-{`w6B|MTnsaVOk62~KQ}&2~LN}8Y{e2&}?$#*!wM`XiTv*GY zjLil%Gh>Da)0wq(S^p`fVbgct!u%}AYT-9qNCqavH?Y*c#r^SV9I9K{hYQ`ML+5io zK#^RB%{qTSu2PsUpmU7Nn#cqUp{y{LCc4X^=HbEqEN?}c-a?0Rj9iWN3ppy;&vJ=A zqJv5vJ*9Y1CWf)Wd@KTnx7JI_23t6(E1+Miv~ko`*2;nHPFI*#rtzN?(r!ALdlC~U zuk3J7R-tCPY?#21)0xa0azg`+9#rM_lc&0`Bl^0WIOHs{b4HdppUe;KgPv=a&T4l9 z)7+Uf3IixVnAK&4{CfIisoi2TeEog!#0okQX~lTX9jz#fe}03XWWNovK!%nOdqHV2 zYCFgDD$hHG?UCbrKlqM!pcEY$Xe$yl1IJEcu{<9b8p1;N!1oPd5Fz>82k%7?>jAw1 zx^Yg7b}$^5=gj%U4c7M|4rDvQam>4>78in*+h}Q<eRe>9+?N84#b|cF|%Ke_~4;3>k>8TkL`1VYVcyz z3`9>xqk{@o1lqA^mNqK`@1P~0@WJqohj*2Td1PVPwJ2}nnuJN>9zsA2df3w4kPa)# zuZa#T%m>qHdSo{)jmH6H zIOg?1q%m$!r}7M{IzSJ~52^_MvRyW*0HYACs{#aCF5h3l`YKM4@Q{9?Owo@chPZ>H zm|yf4Q;NG4yA;w#8zD|!_)=Ve=Ng4=%xG{|%lGj>bUHmNv$cA)!6eT|ohuC_Pv$awECoLP z)6sITzvE>vD{C0Zdbv(?=;@sNtpn}19?5KuNvD#L2gg4kL}f>~zve^YZwT|3Vcwkx~%0j^K=&>T6K#Y@%ne8-A zMZ`E=1%bv9Ax_vO>tzmnVjOIR9a*Hqrf%eq%WrgoG`bkS<%uKA|4Oy;5Uo~jzX*I% zJ!;oU6QZ`3-A2lp_vaDze%Hz&04RhbsPLWk2S+0~t$6HF)G zvR4=HVS`WF8@rgqpVujnPQGt|H$QDcSoY51jaZZq83LC38u%tdzR8epGUS^K+np15 zhVTsIIf-Wk&nY~o@tnyh9!T*F<2i|E1kWivr}3Q0T6QLYJLEUp$1$L*W?S~IZ^&_k zZ0G8_Tr#t{eg!mFvMO{|g}$oLTNOIPiBi1rKzG<$kX50Vs`2HXA=@6rnMMrDujTh1 z+r-F*D_vpsL)yY4T%ke>ql=+OvO~8V%8LIcZW%v3ehdB`F5>$`@4V$icB6l9x~cbH zk^b?UlYfUEe@*`aheIc_+iy<(9lHHB{qyj=Dd9iy-%W>ZKK#1Zf5Rvw!|u&;L*V^KXCtcm9|E^$Y*vcYp7T z|MGwPS1-#rPT-CrRhJ||38ZKV}4?wU1$^JS~_ma!~_Q?m3Vdu}B&nlz&lkS=QTR+YB)B9ikhkRe(|I9y9_{0BL`91oa z!q0q;?~m;-|1-RQ>G1yYZxR0J{_W3y<&pBEhxSXq4fx})-+$=~cz^7s{ilBq@4Fw} zf9i|G-?snozfw6mFDT!^e+@k1{RG~h{_3lbWWWEFM}8S{PW~I>pV@!&m-znZ{=!WxVg$e`yeJ$oKBIzx>E!pnGb9__y!RuJV1` z{(B$f`#bhe{244wEyf+;!Sy;os|1&R3IuHLm z>5uPkKdbo9`~$q9*AIP$_>ui*Kg;*w{n3BQ_Z|D!{}6BReU5MF{0ddVl&G@kV;?ILr4l`}=q^e?LVS{3q|_``rGETYTTO z|EV3m@7TZN>MM^t`O2%0H1WQE{pa>ykoV8--*t`fFYG_hH`4pm2M9mC{{_B3GQ2`Jw z?J>TO?AL$dl}FwTIUdLR`t=X(zbx_S|@jq>F_LmjD<>&E!`lkKo`9}Ij ze-ZDGeb@f=kEs8%ALaXJ_w!%E8}aQw^NQ&6i@!|xmi;?Eh4(Wz?LYUcq`SVq{cC)G zbpK_%slTWH-Ybth{_?Aj-1;o(kL*A7_xV1&fBUb$^2npWKa4laMgBbBZ{ENDyRSTw zp?trHH}m=G?zaRc*9^KDo@dlqxiSI-ESC_x~$dg}r z^^xcCCg0EDP5S>o{2u!W+l_2hIJHc;AXAe>}^+3GZ7bZ_d68@2vT{?0fJ! zjOV-g2K;7&iF@pav+Un~_0`6we>BTp2l&}PpJlJd`^1l7o)_;Qf_e3gc;ANS+wt&s zGoD-D|2o*5S@s18@+Q2$70-9#x%bD_eH-3y1WX(K+wk0i=c}*2+Ia3SWZA2DGwh3a z-vjvT{oRT*`0psv`=8R|>Gn7C@Yy#VmhwOxHS=5oGcP|67}=3M*?C>|4S2r**niBI zmjSa=|HS3jWn47A<=YQuC=S`D0J99-4*1XF{TaY43%U7!5irZ#QG;Iu%(8bc;1A;c zGT?8#}db``rc~1h2v?!Oy8|n zUzgp1_p=7S3Gkl={2XA$_h!Iv$NP)sKM43J;4hp13BdOPei^X;#^AW+J0m;}I0wx5 z?gIS;-bVqWTFY+|e@6j7iuWY^&*MF7^vi%Z;NHel$J4~q!SgVlNAY|R&*ONW#PbxM z58-(l&viVXyA5|6{>>;y1$;jbod34rcp-tYyqwMAu0sD+;dm+Wp8N|rcq8#A{N4n<=@9ZMp>M(e^S>SC-v#`5LcamH zp1{nfhZFcB;Kvep67ciC6Z!1{elqc22mCZ(&qp4<`9uOQ0{(OYHvvBf7-H)Wj?V-3 z-(@(yn823+e<^{doiKSn|0M1^#KZR&@VsE|7x8`xPxe=F=Odms;dwJ2(hcH$!rY^H z-;3wVe|&SciuX32hw*$6&l7l_#`8%$&k_Fdo3l<0P{<8MvRv^Cdhl;ko6fasMTrett)Rzsvksze;c~8%#Og4Y%W(a6f_PLkW(4 z&*Awzo|h6lv+Q=<7deRMpx?$%9g@2)-G3Cc(>I|1aDH>Ri;`hhLA!ke`VYN~`>~U| zC|`!fa`guEpZzC?!d;r=|3T0`aRd6tzi=qru}S(5gZ2|QpnvIi4#^#xq~-6!hmq%> zJ6J#6@_z=rpT7bB+dq0p?(p=FUM9tG`_UkCj&p#9Vh=x^^T z51$3?7j8h`Ezg%hd!zjQ@^goZccp&u#`LT&ymQrmw|xzI))(H(>OaadM&r3s#hu65 zP3-qyhYt&6uRrn)W4GM&hC@dVz47pyZu<6{zVqhWZ~CsAzWdPk++ zDLZZ}0LQT^RXvXHKOF1e;thqicK432?cqL#W4Qa~I3etC+{RMMwcYl$9es1jg+8{y zwE&dihl>D7ua0KD!w9iY?6~Y~JC2jVHF!0+MIt+nZ-pGkhBr#3&Kf4fg&r%Uxbrm= zdUwAMx9O2}Wv7Paoh{rpa9r7};Sjqp2&bIb>AuDv?N;`MEQKRKj0eECC1JgvB#t&R z>83$94UZgd|9Opj3lL7X4Z3a6-Qh%dI~^A-n5*Q+vDRat8wEhSoIld>;abHX+qme{ zKZ?E?-Bi5~9S`g?E#${B+6gdv91JK6SPL)O)aUVlh0t+K_bd!~j^+GETK;I)_;`$C zv3p>^|0UpDJ_g~#aVE!abaM>%9O&+a+jZdSeIIZfLy(SRz}voA$AHd{bR2Uq>zs~b z#(P2c1qektu$FX??qNKXm3WSAb0m&q4*z+)SAcLj84rT)ixk3sq~r4=c%1IGpMZSG z@RzPfLdMD82k|%^$I`ca`jE&ip7`VOLUf^%^n&g-(3O6HA@%2Ue+3}1qJn1|J7>~xgd4XyC26=L(~;yD8fqGbS59 zbV#{Oj|W*A($kQ}&wjxCP%f6i&jb`Q0cG8Ha-TiKbtV zbddk(FUtSo1@mvac)^?t7tCMiUVKscqKhsu^FlPK+tt?=N?yvzJZIxW-f8$yH%w0$ zJLJVz2R}G__paRBzKaTVf7$qE`&?;) zKl=WKg&B=71D|LckF-(twc?lCaH9|(i%%{-gYltVW#aR{{YyfIjNa)pSq^Jw6RT&_{`vEMe)S3jo8*tez^XQomygGaQ~GV8z+7m9C=*N z*!jw1V~W1}{nATzo;u^`fZ56mPn?RH338Z!*F+l+AQKN;cm{+A#-!gLlTI6r{*nHR z82aa9;K@;9grtw!9MPHhP#@91OhgVv0feOgJ_at2;r~nw+&u<0i$R8TTv5fxcY{#G&cr^KqHq(0{eJ;RpH*^*H zUhpzrq#w5OGyP|_{Dd=+KJ1+?N%N5J40yeb2petm37}7Xvpu~E^qIEu92hTu&2ci@ zF>BWCcP?5utK4;KnQPW8$E;sg%(`Lj?eoiBbIbA;+*)2fx7;y*VabA9U2~)14Rg!q zx}v}}3+KCLMS=WnO zxr<$n64%@X3rsq2WTttymO0Ai-nwAHqS=mHZ(CFbwzrktfxN5;>Q{2>`~@JWB*WY9 zbj`nWu4A@I4dx5xE_6U5R<82avW3Vsx2$a8qFG>et84zEg^rT)xpVJ8d2<%IQMd@n z?{em1ol0geSX4fj0=X8s7dY;0jI!WVf#V(d6bgSwFn{fWi3|HvA_i^t!^AOWe@+|=0`#LqOdQys5;0l$ z4)k5ozZ}^J!NbWAlYu0LZ~!R`F;Poph>1ZOLrikg8Df%@!4TzTGQ>ce#SoK}K@1`J zP==V;3}c81(Qt;S$Vi5m6pdzxL1_#_Oj5@&#Dr%8LrhF2F~me~GDA#arZU7tb2>vz zh-NUvfL_cHlchNfGaQb23^6HPzz`FvQihmBxfo_T9E%waa5$DSJkQ~%W_Z5C;boZR zaI9cB(BW9g@B)V;zz`GXRSYrFdWaz=n2#~UCo^0uC=w*x5t$jdK}o$HE7n*@SX9F>9_3O(K_M; zETDB@GrpOpbs#Nb9;4w#WNRJh0Oxs33pWVtBurBb2L(R430D(t6nG5b6@(iE9!EGpI4JN0!VeMNB=97{ zYYDFvcrxLq2nPh7N_Z3DYJsN{HVBsrJcDqMaIwI}gm)31Ebtt{4TQ%CJdf~x!ovh! zK)8``rog3yLxfWWb`d^C*dg#@!p($_eb4$YB@ADL`U_l5IEiqBz+S?sgo6UFAe>Hk zlfWwpXA)j3aDeb2!U2I-5gtakTHuEWk0e|w@MDC>5H1#YEnzOd!;=NxKzK6YF#0&gT-OgK~EO@!wWP8E1F;Znj5fepfo2_IuW8Mu{jHQ`2qgM?QQZV-4U;Q-;F zz`F=PM0k_HZxUWhc&)$5t0yh%gMR+pc?0?PF z{;3{5HhJm|^BS)2ikjf-`f2m3mv%`C%|eAv1Umd#{-8QH3l87mzH;3lgs-Nck9(Su z@V%`iUTuoY*Q3h^MLYbi3mpEf@P^`V z)FbKZQbFqry3U{-I}k~(cV-dS+OT^^2YIyZMzFAJQlT1gX`i|7s;KltSguiaW7j0t zZAuN-BAy6V)}==2bfB(NYB-(uL{f?Rl&H~4?GHm zVC9MYk*MQDRV%fh25Ap`xF$XMlLn71s5;*l-eJlJ2i5#kt*0D z@BwP%65~99J_3Xy-bY~ROO0G>T#4E#-t9mtwHd;5qS0M&&kF8m!tolTNq9U0oErJ1 z(IU`FK;Y;@5TMzpk%5LTa+gWosiN!ij9UdaQ*f6<6}~;j1VK#%N{tLKrV{cE2NWKO zFHZzSrN$AMjpF^8WE(4rg&s)O=6>kt2rM6Hs;5Hfrw-GosQeiX_@~s9Gei&Z?Pvm(P zFhokMm5jM!$4?WTC}{dSPvkE|^bI-c2;bvm@C3eSms5;Nv5or#R%)M-hyRmDhSAn2(kkC#8=2fbv8z zF)cNcN#onXtgj395o-MJ(gc4N#FIpPEKP7f$sQDJUuK>l1=Ijx3}bZp5=p~Mw$vyV z#q4gc*Rs#rX0> zlF0U2X@u*TaTcSs;~33Flssk`1Eg^;22zd8F@{UyrUMFR2x`3Xir7t0=K4FMwF!(q zg(w;P!Wb**M^BT%DC2rUzV`uz4+^T#ST9n(1<2UKXzg}JS0Y-p!xO=Zrqp;%gnSx! zPXtSwQlo(gUjT^kDtxJtg~nPDw1#;Dj4ody35$$PBJ&*5&cj#0^0#`QhAWbjFlzhu zxX)K!?(sYz<)wxa^>mUe3Ex9p@!EE+0mGO%o*|8pcG4P;F}^Oi8RM%bg2hBJhS+Hp zGdz(z#EmB4T~{kL>(IQO$V8$pxdo`hFnQaae4mNpWAvfQ0!_u`y5(97jEo^NENf!dC}Gc$Z*dDaFPEQpU@Iz$&-c zSTBet1%Y`@v2l+SdN1<@1ba2HJ<$e=cbOorA>v#?EEGgO5#LLB)0l6%U@s?jrHFO4 zAh2pIHXanjWrDymv)EWB`OaZJt{bBE2zz=DMZli0$frGxub3ph6Lp_~hPYg*@kj%U zyb4_$chU^)?%YfP*Z`Dxkj#kFq6O~m#<)t99Rxst~uCtYz!zR@b#rv2UyTbjL%;%cpqtwzbK%e0H zQmNtW1#u_ljb^NiYai5hCzN2$1Dnt8kWX#y76bQ;fs;tVC@q z&XZDH*P*Mxqn3ZTeq5HEpHPyEk78>0QemSn zsMWc0^&ZSms-;;JRGXCL)CvxT22-MfLt08!=vidY^ABrM5_7Jn5KX@=34m=9X0Q&j z&+L|zg!L*QM`$H-u&8lE;vJ@d%od&&wc9rR*cnW=F_=gO8Ce?mh7?F*r(0~JJKsk4 z1>$x(!$#NguXcWajiEczt6lKDHo6Bvw~jl#IXhf^b9N}J*_~OdXCaW;F81PXfs<;h zKiDuWy?0U)>mY2HH80Au=~Q9aK+u(cIrv=Cx+|Gp|ibqWx)w zC&2on`CXGj{{(Bj2d6iB;R)YvtxoZB;;hX;vrWyS1PdWZXbZ^Vj_F0sy4y4cu_HC& zsO;@&`F%|sTwXo0S$^Nf-$VX|C$u^n$D2#RaUK(jn!(iKNV(ce)mZ8{lg6Sb37CRr zpY-ikd^e-bZwzpue;#-fvL<`h2=%$E#qnEW0(JycDm!chc(!wj?E` zx^e?*U7Ye#mng!0OglEX!F55-4(-5i;)m!m(MQPcsO`A>~1PWuIBm6DYX89Yq5_bxn&0e@3t=@Oi-8Xv=e2mu6?qy^g z((}1*_365`=q*|Sy$#kMFv_&7xLwkRU;UDLIqVB6K90Y>RxRQxLoQHgg@++@isph< zpspbYRakg9=a_3X`9$4I09^@6AluM|!Yx&K&YgrdNJ3U8jp)4#;BAmIqIhW);2ruV zjOy(PPXNe%l)cA5?OIQ{lXB|Heqm={Y-9g6GU)|BVqXdN;Po9i=mkm2b8q{{#-Xw- zd1TrKbcFke`{izXqIb+((iF+e7hb0xJM$MP3dYPp>K;vzj&qV!$>Grkv zI1((*)W>8cH@haPOPoore0w3AVJT5v#j%Kq>DqDlciJ1<7nw(ivz8dOqlI zphZ-s8HkB$c}`d%#SkRyj}exUHz?EvQuu=It5AqPZ>X04Ch0~a9icgz!i%x;1*p8* zJlZuKo(>j%4s@*UoTMF-{z<#D*Yi-j2481mgl2ugdNja|h$d6B;_bP`Z|m+i|N1xR z=M`4&ny_T1u=VfW5v;5<_j@I(BLXQBA2}54G;+=-AK$1Z_FLX$ydQ%BtS9n@j^^M50| zk68;+v^w?kxVSo0z_;5!t_$T?yxgBre@Lhp2VwkG;-Z{Z)uk4rIoU`FEk`{$OZC2M zCbs#XNf0wU4#LN_=TIgLVM0fH|H5X^OF!#Sr~Xt#k*SzAHCj&WcOaz^ozE7`-=`P; z*yy6EzgW(;dRoNL@^>j-p1O!6yEsLRW~R0%#r4#AIsB>OB?CQw7qc%pj2gbi8s?=F zz5}q;8SV0|qF3?+pQvW1v1kjI6<{KNmFLLBm9spBl8^V18(bp^gCZ< zU9^0eu6>N`Fx_ohUW(%Fhst26yd?W1M!f`mVhRLS>*2?@k^{98cZ>o@P=H>rRdZ&m zb*UHn_J5r%7Dxq*6hcj{%+p>Dc1<+~E zF~vI&dO=#7X$2{F7~6_bB>Mp~PltM_#5tDE-IlLUBj)ry>nvUk= zCnk$$$>Nq67S&+U)SwscVxw*aWmFjQPhsK<9mb;@wfbq2zc)Hvv>%08HV zvS}d5IMz_uIih-35#~|qjtMyCy10JM!2g3|v{YJl;?Q+dPd7K1M z*O|x#c{8uXR0>8Ca-iW2LQTB_ty#X&SP}$`bW{p@HrI$H0b>y0rmq9W2!`Q+k;m|# z0b?@50|DbEhVKT9c?@?4jB(0iuLO*H8U7_;Jj(D-0b?V>bphj5h7Sjf-3)&h zFg{|a1&mJ_dIBZ6D;=)OOLA{YReZcB;Av@P&3$Qz+jZLl@@N~BHbS>~AW&PzxGqpz z#u{HCRq-{VSA>TM{#K(&P;U{H9>c4fO>bG`bqZ8XJz~yB3q7Ael2)#plVlrqvEt>u zja+o`;w>6@xPD$S44a*f(k+7tWmMddi&iS#aw(ynOu2i@7{=qX_h>kPW&4q$c*{&; zk5pX6qp0F7cM?LFVT3!hAw7^*}G9Dr73}YRF z%I?N}2u!<)_G`5z)#!RJXmGxsiFQ?6(v9tYz&Kx@E^vmi4f67QUCyan&Nf~m{JQZ4 zg36bT0|=Tnd0M`w*l8>d`?_x-D{4Z~({BX|=Y6J}t)#jDREqa*bUWi5Mwc%{)YF1{ zE{lwdC9Mbuu@4v?E_LMsRFvB3=mOTpD|Xbdi+2wys?;_D4Y(V2Q~{gyQ))922NnfA zjhJ2k*FvJG-HbcbZm(ld6!6v4Ex#E05CRekzs<%n_cvO)8Vg>h_*;OhC{{^3QGz&4#1BOHcn=^v5MRPaZ8^tyTFz?D0Lplqx}7Xi7_FVb==aDGz5y|uQ?wjocPU#Wh_ODVrNy%FHv*l z#MC{@l&11V>F8^*v0nMG?(`L}OTsRJ;wwa+rWLS1Y|Gc;5a2mTA$qTbSdmK;Rtu9XdV4-30p2fGK7|bylD-1q`B_KcOS*~0W$I|q4r%wAi_w9 z(DY}NyAtItN4au9p!l9gGJF-!%&wx@`_=&w-Uy%UX+e)FHCB90tWN9$!1`6F`?ox; zsjW0Q2f=47!*p4Y$5C=2>3`G*WXFejsX#-`E)k^sLjb0xB2tFQE^~Ydlc1FTY6YN7x$G= zzTF63M*(L0NB!xE_uBnwCUOHGjQZ1u_QR$LHTC2?bCt|9SAc~%7@7SE^8+_f(fI-A z3rl0*S7P7?yC!v@S7Xu-qSkhP*BqKRpqu+n<)y@0%)hbS z>KvWmo@p4!79PtM!!QmT8f4rHjN-irD1bwZdua&Xb4^e&9+p&IZVhvf(9)Z&ONGhs z1txX0+xLlo6nG9cPYRd63zTAPBIGL~PaaYuW9)nayTZnoB^ZM9jm2-_nDz>_CEhrN zY_8#ED_0<7opJxes_7jaYdXXD4&>H)COU73wSu* zA+wfjS38@@Ha00>V^Nv&g61<6@5kU*2|2ppev|h&`ifG+b(-4T1Mtt$C6(I8&<}Bj z3iunOtIa8jj~58-#SA;EeNFy{y=Ym^j_d@ZY;t%(V3#8|j&me$q7=@{bh%DJ@L3?G zwhl7n#tVY`2Du50`rd`**!izaZxY>!6PfHbKAJ1G>Mp)6t;3vrvYW zPpN$Zfb87e7E@fKZ4cr_viS`Na^oqmHy_{P7nE8)J(%kt*2jwvc7Y!{vt8hFau`iP zq+RS}BW?AXM6y0Hd}i1PhLGR{2G1Y!3EIeiIlWnW{(HE^D=|v3fGg`!NL5Z3O>%2LvyH zz;?dC^L6agStsjq#Dc?}Q2fexN6voN!s;t7cFiBWU(0Vyz)5)iA>8oh2A7JWu<=)~ zcr|oCJ-<=TLu4;GDfBst0SZS_JfZSCyYi%vx!#h5Lv_xs4z0Pv35;c@IBmBIIL|7; zHIygt+#|M_YvcjW&2`Q*9UXae9G_I1eV%w5{vQHt>>lrE@^%=HZk(pQCu`i%*}>{1 zLoarBYsw5%FHIPFu`3C(sLeeqzOEaWFw}vg5OwEhb2AJgVaLj!cVYBY1>+?T6j(+x z%F-te!Vz`;K36KF$GK8+^~hf+-UPS_eMv@6)jmZ%oAHV1*k5kyQ4;X(aiyX#+-pcy zUP_Crj&yS$$=*}FG_LhxW!3h<4R!E~`jkO<3a6{SB-7XG?um>EdFfGsv~AdW)f0vk z>`R!E9^!h-Y#a|8rwatQG`e~Ccc>3%JLl_DGP8GU$3nbNjPzTy{03+^^y*t|x`yx> zaPIneCsL&0oYdd3Q2&p__?+%P;CLU@{Xq?qbFjx8(T>3^v80u;i$Um0*-CeuguL7+Kd*5wAdfl$KV3TVKza& z$mPCX&yzFZ4o6qmzUQG9sD6t|;T*yJD}Q;(U+;spyaK0yQzrLaw6Fa<(8D32+$o8! zH}!t@zSm&uTKByvGYr}N9iNOn^q4b2(+_vd&l8}g*XcJp;+w&@=}F?{{4e{Y*yqq_ z(Kt9p)VbPb-)Sga@39s$4($VOp0dw?WL=OLXBN&p&%;hDY$Cr=@fOhZ%&RdIs70tE z3lHxhb;o*cDJx#ymjp$2tM0~a8O6&-)MdQGwm%LHSUOv}wa+nJDbN!9L-G#Y4ga^nx z@JK=5qLU6Kt-#@Ae&e=ACr^*w$DI+yy8#{0Zd-5J`hGgfroV*GV$aXZ#M%MmyzGFx zvZ28r!e{4mBaar4zYp7!NL{x!j~5CbLopU=kt9ot$G<{!+t_tTL%(+4Tu zS3wJNr$#f7$T~J-?nF+96z@c)!bO}^yuV_!Xun9tj^z?-3pJ~G!;9g zxYJvagv;7-4xFXK1z2tbx!R3qMP8bJd=IrQmBq!R^ilH#4`P-~0w-rYWJo5LA!*EqywbxaGZOgqWKOA4$;(J`m8rWN*FcJFbSmFp-pZ9LOY9{&J- z;qy^-%W%T`NYwE>%DTVOiTywE@9p0w_V0I&+18lQ-UYZXY*&!I3-n=i{(Tp?02S%j z1%3-=ZCzmKPj`WbK&uzFcL5v|f7==t?E>6fLn`i`c&}zOf4^SHE`Sbz?qzm?!oy87 z&35}yKS;9rK}U}SlTB6YFtCZ$c1+8IF{iY3hP|-cpY9A0s@<}shb4B_z5L_55dGiv z1G(vDdft?_-WS^suKS68FlUF^4>BB`^#j}=tJ?2tg?;Dmr%_)3YF;gX=KC@FpY7X8 zvj1e?3O4@e$Y9?YGO9}tdSyG-NQ>B`G5@j~oY?y)o4tPld$$wVyQ~T>6nzvdMXlQJ zaILfY>di=KT4h^*wcpPi11D^-xlr|Pj4Peq!zdZo zEpbs7`~JA1{Ns6G7r#umV@BlhNq(5@v`!{`<5T^4DcZD7CVb=5{duX{w00lgHhmnQ z>Ca2krpZ*HqaPkW$d4;G(>j?GjK@MPL*0={{l(-NrcE2J){PvM%UUYS2cmT`+OgrD z4>EdqeOsf1e-&fTcFnFL^?%UpT5RK4n*El#>>--n?Yh^}D(&rmqgT{QOroQEpt_+t zQFlxV)C~oRx?@tH?o3PFF)2{@AWPjbDNy$?b;n3c<1vYy=rz1v`k1WG3jZn(O{D)s z2f7L*Y=;OOES|6U7dJvG%=HlN-b~Vql6Xb8@J+2?msZrMxetf<{5)=r=>@wuulW)x zUdP6}L)vzvfAq+lW<~W-^F@tRdDTv>urY3LueY_L2F<;X6BR7@M~=$hSw3AI8Rz~+ zpFB*TFkGLWs+Xpn`apfxp}l|Vz<`gnzYjQ`gUMFap|Xa`L`+G_cB4CeoiI7G_k^sR zf_;@+%8M}~BuvJB?WDmUXbrZ03_NZFn_}C0>729Mw+bh`F7=4s_&VzcEd2}L1TXNB zNB3YSIfV^M?RBu$rq!}8v-8Tb@%rvHQ;YlHE;=&VEc>P$pK+gwJ0NdBtLwyzKzm1^ zCOgmLHZSrNd47!r{|wA8Pqt4Pc(ZmZ_8l!7Ujr7~ni904L+p3Fjtb)rz1nR0t^Ig5 z3GM}#r>0{9iG^m-ezE_5x4u;CI-SFHy!DFPd>k8hq~}x}s@x1+bHoU5Wk*hu1sjKE zJlcUxnG}t!W3Adc&TH&--HOcruC5K(ZDd{dxnA7X+Y59Oav?=4 zI*ddnIa-mV7wn`^6O(YWFe-a3r^*4nXdheI{VK-LTK4yXeVm}q1#CB`(>8Ou32E%; zyHmd7nn|j}&TCuRgRM>?@6rZtx23hKJXuO>L zTD|-3Hl3oJ94jjZxF?YnW9?XUN&hS~%i&W8l;^&|LqG}c{Y_n2K3;AC-dvf1r@66# zryLU8hkOUMai^QLsi(iwK6W3l<|)6~LQ`vO8@fC0N3ON?%Q>KAr88hA_4$pEgR87) zM!Tvwsc702i$Skro=}FxXCEqM332)r=)MAtVd)R=*TC~NdQlplt-7#rUfi(_m>T>C>WZOm~Z* zw@r&@<#9{jnY9s5weWe7{Kn7$GzOMxui#c4Z6@>zwuV5FNprXprEB}OXC!fGg^9lN^-4MA3uyUwCX8JTk00v;qvH42FUM_ZyaiTFvEX5O-Ek#ZE-fNm`UQ zcz;|yHgwItAVP#Lm(3{><1rJuCoE078k}im?@7pS>|J;`YS@7s%qy3>VVvxdk1rOR zy8-fq5+H-i2ERIh7V`<NOP?bRl@9B_dG!eEW88eaHb+j@?ZE+f< zh`ZM}HS#*s?Zm%_8$w`X+{lD`n(D1{p6XoQS?HnoT(AX*xCu~QVkUSy)KEOcjH{fX z?N=LzZ3{W&%=QH=Yj_RDdkJO@a-@C$m@UkqcT=}J{hrnze)!?ky90I&tj3?~%Rg0D zI~?vVxKgTak9P#s4-)F*GxNq;`zM}HgOF-lQx{x2P`q8pyamkv3?yzQxQhQ*j6Gjc zjQZvL&b;R8YwMP0u_D#EQXhlgikDX-i~)$sd%yng{BM{t&EntmcuC;@&S%oK6D>aB zDI6>;KSg2xTZMM0_mrvQqWlv6kNnU;Lxb)1#ZH6OxbvzJLJ(krX86z&1Ov> zkea?X;P`)8)2qf#$#0WN9;Lx}YL~-jlOqFiu8_KwjiD{W@a>Y#CFy-|}UK(|cRciQ* zuKoJ-MM@2~hH#%bdT-Lz&vuv5)ziGNXz(Vc`x?x{G1l3ie{M;X8=|hym70(^xg_H+ z;-8h;RPa?>x)^uh{;sP|#ZBUkOxa33_+J2VfLDWg(HT!q(?0T%n?mM&zm{%>L5|+%K_wTRmF0hw4Bd^_rKo=b3a`Q!^@QP;mzou?Dl~D% zdZFQiVDer@+qHMxKLS=7a*^WW{kib9_%ip0)fPqWv77g(c?(`H1^Zki<9o_1JxRN) zHQS}~5^EKR>#&bOUr}Y}*p$6$V^rCnz<^2u@JK7hpxNyG%Kp5>&OiTX8o;KKX~4Ya zqP!j;FSYp!*VM`@5MF}&Wj2HkjT!27ev=K_4GKO`%)d~KTUd@=Y0&dDG4G@&A;Xi24ZmEhNe zi1(;J;Jtpl)(uJrFyRGaJJ8TFiq>YV+5w-fHvlEwe!9O7;b}%t6GR$W=!m z*MYj44<=e~fhzHwreYt3yt(m6+%lEf_T+M~Hti!_|X7(1>r9 zAh!T;h=Dw{n-HZzu;wel3}eF>IML9cr@@`E@LgbNwtG|v^)xO=6Kzfa0ZJ7yL#hU>P_G#P8o@Xn2OPDSkP(5lRr?rM-js=rq*1aZ$QV`AlPaK)VRa5?J&x#&);m~ zf@ZLjfmX1wX`Xpc;~n+XnB@0y=#>aOo=by?kILWZN>{7)byx2F4kf5}?u)N;46Pdz zm#GHh^}<8k8FOaoY5#EEl$10W*NM{Jav&y)syV1Og>x;|dr*80yDixBlwHwN2e6Nd z-BWCgU|l-kfcDOS%^RgF5LMU4YaVdGT$K@NBn-&8cFX3DDg zE{BkHj%#QKdajgm99M;sKhUc7yH{xS*x%sB?xpC9dj8Jt`9arBIP@Hn|E3yBgj(^8 zY9ck0Q!llQSMKc_t!3AtbyuU7_3?Van|fgo%U9a$qi9xaDW#x-seGG4Xwe_xEArp; zFYTJB7jEuexT(E>uALU}B9tp?Y%d@m`_G%K0{+MXc(6YS1#kh?lLZu_fHS+|5!>zs zhHJh}>WpY@x^cyG?{qM)Yh!G8)GwO$$QBRvdkQRBD+7hvYl8xvp*2rNYt*f-tHYq7 zsymn3_M`D$6s7hHFj7yCF`wIHYdFPn&>EP|*1_GWr=3d8t$>-BDv7XYB>oAB#AON& zUJE$B#8P=#o}(yHThDL}RcfXoE8-ZRcs)|73E~^@6(s>z&k|4TW{3MsYh2Ub@tgt| zn6BbI2&z-t9FAj{PT(@4L$3;UFWi~@4y+BPrd0*8cNxANrEwpX_25$&QjaGQvFf4t zZi2nkIi`mxYe4vem&nVl3dQ>wd@Hh7CV5WdFw#*mTxd`ip-C1RI${4Sh*k>{F9t)# zjX=shIh4;l)xb(J%nr$ZBnvB)FX*mb&jjUPF4qayFll+3#53T z0h6dC?(8~8e)wH5lzLSoDfxZ!nH1g%WE+1GK=JlL7;P9T-PMI{;7%3xcttyPJ_QYVHLI>#a$WK-QAcyNJCIfjkDH^MW?UG^_v85NLEtU~cUAUO)cSG1+qIi`k(0U}8p z3s?aX0`UNR3(@=Q9Am>h+vqJi>#$z&PG~Xnf*d$h0E!(BT=X$f)S!!Lqt-Z6!xumR z+gKvu0 zIG%xhk5z9~P;tIzQ`(I>avXDI>Q$S%7jAC1$xT|p=J4JKcx}D_6tG#Nd*RmhbOX=Z zhhIRtUFn~L(1IzWcRS#=4U!18_dfgNJJ0}L90?6v0tS3JS}j)zWy$Jk7(ZwAq>B?e zz7j<7c4I-n#S0Ga1qALS9Q~scX~lCxza(Y^z94OPlo<9&rUl`_$OIg3 zeTMG>4)NZM&y{#516`*>T$u8+PN`C-RH@T>7A{k8y#&|O!X*g~Z%stqBh8TQPiVu? zoONdZ;P{RGRxII{Mo+rk{q!EC7~--I^5soB8~|JkwaT@PC1RtaKk;D7M%n4Xw;!p3-W6Ao&K^9z}IMj;q63H#_ zdf6x8-I}g|J?aUv`}Gf)qwIcdM*lQr$PV&#Cr(h~icHQ3Ilrzs2jDuEj)PfXd~a9$5rk)E~njFt3|F7dBB$ zn~?2I>=65|f;-cD$Sb9GD_$p*pifEB^Pn5WI}{E73MU?+jLp`&ufQY|2pN^St_Pzj zX+ojrrG`$u&yL26i18dpYLjz_j!!!}YvjEGC6AabOJfVgb^ezHB%l(_gKlQNW6PJD@Izqv!G_ zo<1dOJrh{3R;>@sV?C`!@#0xzJf+IkD0_|8hT9)tu20U=CuC~xC%}Z#miIxJkeAteN|u(t2}FgP%P^l( zYQKj?j4A+OHQec_DnqH^GqUzMNid`R0K4}0=%P3~n)NYG^sWV=dA zJA>6bYCnNj@&$RL(SetK12DDC^NzC!jgXf>;SLQS(zHu*$R^3tkDHad0TS71UPq&# zbXGD{W6@j$n&>qT#rq;0PksJcQq<>fV1Rp0g&Xv$wF$ZO2)f+Dge}ns|G_ps3O;J? zPNc;tHQZ&vB~|kr8%?8f}?1amclk&(}x=@Xq;J!u82 z6d$JmPhrE`PxO>DbUyvMG_7!_eq(A54ubPBrP`_$8p?9+BUC2kG$_mOBWZq6FWfmK z-{@DkRlja1>6mAbNsX&c>btGXU-%SOAeFProH-4ZMS9^T_{nZ+)hgKHUG#%_nK0~x z{9y0GojHYD%SKfu=j0n@!=?Sq_iw@d(XI53z7IuFRrCv52~_eaRdR3*8XWUI`aCK| zsre@agkEUfHkEk!UQ~UG6HnS}g{u_r5cV&{bNUASm?F;WPIq;ssHfxH(f7aVQ_}T` z85*qfMrdlMeqD;xhr@N*{kY^&7%W=}+Z|G9;Ox5}l?2L6q0EB9paQA`T*N)7Q%S7hJh#0tS%%Xn%1w2Ad;co!ZXbl=Gw3-Rs@uYk;xiz1w z)DEYb@`L`WU3H0L;2?yWk?7+i{XmJ%dhb3Gn&V^;zqLY_fHk%10&5DSY4; z&U_5R@MXxr^|>q*E>XOfgQ1fdL)LQT&u$_UVcps4oSTZb!W@C|>hk7|pm-P=oBKzX*yQrU-~Vo%k}4#T@~Mh5n%WV`;L0Izn1DTX5!oTqxL){#hS4t zg)+fB>bEjcf>?NW)Yd-tYr)3SkBB~}thTw|dmw_CzlCN(AD~1GBUUMyp)H*;_=7MQ zY7q?ztp<@fxqAXU{vUl|220Nymc1J@ywH{48ov2NtbT^uJlE0(O#2wV7xu9pda}kc z_N0(P<(-ZE7Lslt6hV&gNA1WeB0nQ?CfdeM*+AqFAluf8TiIYAegkE7vbYHEWCEN& zTpaD$X@Bq6zSYRNs<|V9*H)1iKtOA~V-G6AA49NnYOwX(do03BAf25i4ZSAZ9}_F_ z!)v2{cpZf4;D`CXf1V{M-cM*V)}r(}XaN==es|aXQNKGAHTtpN&4M)H7ckk%4rcEW zLtb$TwX4EcJ7YO;!28d=e>KY+r1^<2ViFB*(rqW?*}#ClgtUk2N2F~FJG7~4!*d5h8EX* zaKWM%2B3V9(wpGtr8qNzDdXnpRoDo{W;z~7-o=$&A12i&&OvjKMcnr6V9xvHxmrup znKIvGvbrNFt~qB%`FZO|hOOrH4B0g>PVu&?dC4hxySqUsn8FPQ_JeQmDk&7VV|_8Q zDBeTB3yt;zp4;*}6To&N#tqyYjPkP{i{!(S|K>8Qd41IsW=AUcBqWl1&W}AMMHa zRg=0te+8AreUBZ`vEEys=+qk2W9KCAQhc`(Q@8?U`|gDcvDUAmxsJlVAmwyu>JINw zv$yPw-~H#7org_qvt^HR714RijzY`!DG7*0s5?^sO}o+-e!5-z;n#OLREtx<6vJFZs5&ZxXK8{`*IFI&I%D-;2d{4Yu-X_ z7CNtB=EUum5cfZ#qi5T?_bKQ!Jlo_KP0S=qm~Tj@!lyXRkuf2(lzSoxp+3*U5m?v# zPO6_b!@{+CwXR=ibU?gc3g4>DB>+0#NKB3f*YS`!bS+X%JJZ}NalqhrB~aCMV#+}m-s?XVW}Mxs zRs|ed)k<*2I??ULyS8Z6`Cgd;!4HIj*l3B?udVXWK%{U9_?h-8Vl09JO?@tdKD`Sq z@oJYrjh+Z-mnpU7h=T?WnL79KcgN@_u-*NRrw*MvpuUf(Azm6A(5hBdo~QnxRQ7+J z)Tr6u_q1cI=IFoeL?_aQ|1F3B_2lC?2QlKck8fB_Jdau^HABtS1=byJ0+wOPcLCQK z4I@Ut*Rt97VZRn_jb^4>tbX7jx<~HoIuaehw9TG95B*BzkjxE((9}tMX6~>bca`Cs zN`8xW;ihi7KG}&NO`ptTyi|QMcX?Cv$+#02hggz6CJilm_Pnl1i3{MK#X|1B7aH7P z)nD&VuS@s+G;ExLL}w4B=eEz*AMl%#gDaTzcNlrG%%b%wwLb8XHsFu5qH;(RnCkK?%{wAHCPG^#`KU5~ao#rMY`J`|nxR2_Y{ z;u|P<_Dj5zS>pIY{4=4+l=$ByK1Skyka)GkmrI-{;EHdS8Akz%Z?qXl0gCS|GmZjq z%?rEor|P)2R(yNScqZeU5XZZ6d!w(g<1FGU>HDE3Tu(T&cs(=p7{D-p56ki=c0~+2 zr(MItSDG3=gs_8Wjn2E5q|gGJlaIMJz>8BiT2Xb=WWA4re%;n?liJm*tzHTX4(->W zT#3RYWJz+_J<3V@UPXO zO|>HLfEMjzHtpkFlJjKFjdIk}sY)%cVBqH+oY&zFx%97w5wHYyOW$aeVs)A)F&%-i zL{s>%rrtyR111U{LQ_)k7=<_r?)y}&LMiB)N-dv4#xuAoZ`=8Y$5mf}86I!R*){Oa z?d=A32sLH%u-8;W4`I%W&_1SLf!gR;kXfEaMx%{|_RvdGLbFNy5hS$6!Kj*PaW;Cs zvr_0UCH=EMrbn-{)AL<~LZ3i-zH#WM`STr_LcbRkvE3tTlOI0C&OZ}%7y9+2Kc|hq zT|Y0iTS#cDX4>5xk}FsrMD0x+lepq=1ysg9UONF1Pvkqi?oX*5Z6Ry&&{3?O{tjl~ zXjT%i!Goq~Z60Nvt=w@|xknJne9amiE{40+rzDw8kJq4_n{&LpUt9yK#2(g&+J#<0 zmhc=D#e6{e+3hv}$$^v30mc*F&Z;0?^knt}&A%A7i42*bA;ZutR9Y9T**)YJV$Jr@ zi>kvT;o7C%+*pd%TW98m5ty~hIPy8YD%_q`WsWa)Rj;sB`T7;6s!t;fr+|?1;defE zVJ(P#vS#@`6ug%c4%k+c(3VF){w=D5VvtEjIF4T7v1ow+kR0DQq+Mc)V$t}X28~^m z5}PP>wWcTwDT=%oRPV!y9%l6T)*7O-$Fg(6wckQe%ySzs>9WmO6?GvJaNKb$v3s7= z-N^TiquKH~dxwS`T8{-7`L#at@XhW*TD?5qd*pObWEqma|2lmn8yL27?|$ZNyisrxk_wL7|=3M^WpLhWDcn)!z1; z`~h#kOs;dy@qCT@PK%Paxo-P$EqNrZcgNNOGw>y{$#w1>Xdd;LvwL2O>urdevKE(U zDE6WZvn!^Uns#CU4Q14r?W`}sTc@E%Dv7UV4_H@7L@!**|Fs<`? zpk4mSrEzENvI_}pmo8?zM9Yh|OP^AwZjW$zh$?5v2EFB{|XBRyQxErkEC&)>(9*Lp_)h7l85Dbl-F=$PS|a~RGjxtKQl zVJJQy@6eIX=L@c%fp)`E9U}zU&f-XsAMj&E{n*yl*7aNxnTlxZH~I)`Dc9y*M%v~p zpLWq6bRw%&uB95VDh~Ie1F68%VVJQ2UPs0If*1@p0E!wRo_>Vw4z%^0 zmEf%RATf>6oG{x=am~ZBl*tF5ua7|ntm=M&vdsmD)bSs>x>dU5*UwH^iu+&QIBX!Ui>;{RChSHHO6BN3C37MZq*9{-0MG}qIw@; z0k2nizsr_?0P{nf-K@_Enmfve zwed;Qc55>sv9_?E%L23CP(lR~%H)7Re~SA!xY)&g4#mkkr~;nt=ySit>5fchzlXxn z$*l24n#hXd@lkvR+)EHxFCkM0-ww*qA z!2SVm!*$_36khyx(Ie(4*I|5H!>ON0em5lVFv`tCiq*Yx(Y@rZYg8+y#oJ$W@QBB3 zh8wWzr#=4~a5(K~M@2qLMQ(!nqkP!dF5CQes>LM*T&%7<7V82I81S65Z{}dtsTJHA zL!VK69|6ODh6h4lAcO7OBIgdt-`o$E;lvY#?-CwfjMki4!ePy2jw&x^4t>lil5Myz zU5)|^1M*h1IrpO$zegvr3p~}<(buD4D9S`ucP5;LozQI~{Ix}R9tlU7Gayu>ltc0t zaAdF-tdhlE24WPq5A7e{C-75vl4K_2#=))cW{mz%ITha(4DlQmUOLGbeucovFjMh` zNI6FFy~(f|ix7k-cOvWk5<%Vyi6r4>oJ5d!v_z2kT!|oeyhN(uryhY#!_Ys6p@(Lo zE@2G_{Cqgxg!Nr(>$XqgTc4PK**t#X4`Z0NJsH12wHukOMF@TtqZ|7r(m0vl~x!S5J_%uU8)zXFu2X2r@a`&h>2$i6Xg*$u2X5K5aKAzD0E;M z1Tr_Oa8inexciClpW&4CT$v;CFrVWCt~`_{t>ab#cdWVqge}E}PTgpHDavIe) zHlOm=Z_ujNa^NnM6VCXTG=U$l3mBf|uX+q?>`)T>Bv;p&=IT1bTwPm~O6XiLiV8!5ktDPZ(DEpW<#4}1Jbd2~kp$`LTjp=;h2A0l z*Ti?;O|C>byGbLxgxO72l5O4KAHo|?O0$Mxsp`r2ke952W>ZgrLOdrOnV6B?Npudo zfir8OiN^39nnrYA6Ft^MW8D*CdEswNCYPCLSVCwJ(G4d0ViS#42=yZR&nEh3CK_^v zB2_@&W1`O$bT#xA`jqI~P4t;St0%{V-XZR46PF^m%+RaE{mjJ03obSEN8-AgxMrzv zQs{o-zW7RN_O;-gp=HF?o4CV*iwoUB+@r*yCDFyi5ACvfu1DZV=?HGXv6|(%zQU-b zR|S$!;m4fefWkM@h;T3lWpLOCb;b4!6nZVYRCn;V^?5azj-_?zGj610BAdO`skTzH ztWpo*p`h?-j5Bt^r)-2ROHA=zAmOR+QCNA0?SO6&LdGo!G=&2F8k`|e_+Cg3+y}&! zShz1u+}p(6VBy{}aodTz!oqDbaW4_~a|_3dmf-g^aeXaZg^62BT)c(5$;3TE+|ebb zETc`_y~KTB;WABJ4RLiA&S~PRhj~C*SfwG zQ$Vec3*UGe3-X1pW!6aV%3CG>2F_v1liD|Cwb8O0YpvDKM-JL7{HECKl$9N8_&1v> z9=zLB#g(XO_{%S>S|y++YUJ#SG^yjaVL}-dYr{>51%Q+Jk5ZeA8mf`A6xG29x4-YC zWOC5pT?1y}bWsm~j{t95hB(5n5R(+>j7aqw#Hk1_zjnEXOM0GUB1&0)IVIr+#YKWd zF94_W5HAUYdmt~@UFKfog(wdS#LuL`QPbCFpi2LXoz$nW$cXxPXXs++CHw(eTnfMb z2TIH}qEefWxFEZuk9#6qX)0;cvI4gjiAg(#kzlBTVI$}ElOU}x{^_T5qi8yIv& zFC%2r=A|SbQ@jJ9*XVBPJy4&uTk5?H_5x!*V2uFFktuvFaMCUqjJeX{@3sBA($-a) zrCno{wj>1(&-(%@WR~V09xbUEszyn5R!QkB>9C1=$8xhy;%-A*fbKO5cMJtIy~-bE zR;R#mL0_2f)NZ7GMY>jAXu*#OoS>-pGs0Gur^F(-G3Nm$%y$goIrTPsTOjn^m73P? zP}gvgfM+VT_n1W}wG#!?M^Udr#NMGAWyj($zH#66Gi;oG{E(@E_aSKb_+gfV^H9FL zL0%+_$Aa(JpOMg?%hOPA4btKL)%Tu4KOIhv%Xt$TX$Q5;% zcVXKidgrANm_+B_++h{Tj{%8idHLiq?pbp~HStfF55l6kFCAJ}4lQp-$KiZ3)cda@ zR@bOlJHS0WiJe)VONjfxI17A3-$7GNt8u=0OKNyFQlsb9eDA#8e=5q*d=r4jFUw}( z{at{4yWMB&eHJ5z5fl3js3dkGqW7Wo9&^zCdY@w2!mi{7T>l2uI+Ek1%GrAE3dS%8 z<;{G3gfPSr>}Q194r|{BWUWKnkB0gxzVC5!J^NsFt{1w*&!X?}XRMJagGdN9%FYSq ziOB8<9p8+0SWVffaH0}A+^W6GC6hnz<+xs8Z<1ZMeUOi!QaX$WHsLKazM!<)K86}wO$~FowF)_PKXY(Pp$3qt_s+P~`_Q>9&KTsa*z~s83@fJh;9!N@ zy&SmSNZyO}ok%mRjdFNfY)o5hTwAQTEjGuBVLryz>LIPQH~9^BuXQYE@Ay?09Aeoy`2L9&GyP?Mnt<-7ez1qMdI!9x z?`oXjd2w|11$JJ=m^?dacjn_)=01d;E2h)x9;}a$q9KSPf{5uLbDUj}6Ks@D&EeDM z(IBsNVh$L`U^1ag%S>}v0wel&=J3v4ra9C;OLOQ5ZwYb~VR#*~bS}+*X9VGs@a*e& zS6Cl04&U4cC=i~dmYFoo#_tu&1!OdQ6VEHU#O)ZB$e#gL)Jt$aYnL)lJZ~OCLX4pElBbFEHAv z)mrkV=;Jf>X<1PRc`5%n4~Sw_?kU+kFm!nQPwsEfHRff02i_7dUECq##?B#}2YXZ2K6OQ~50krGx@ zHRceOgKa7GH_q-jDMyObgscQTC=XhYc?Bq`(C44S`fVv|i9AM`G-{@-CejjutD7EdT z;MLHn2=2R@0`(XzBj?Drku#gv{A#e05iKqVGc#=})aTibMO+JAS@Q_ZhhJN34V_P6 zS2N1|v;(BGHT@~SHit!4-H-QU4Tk>w=IeWzj+#dI$xTJ&rAG}j3j%?{QQps=7R=tg z?UMxar&`rt<8hi*+cZB3O4Qe=UraCWqKWr-lfy?)@3RY`vO0)4m*&d=fjK)E3MJ`2 z=EL-$r!Fbnk~vTC;;v)H^|Swsyf3Dc!4cR%wg-XdHVf|rD4t5vS;^)I*qEWfhYAKlW{%A3k|H|>Ph|16O7nw`%{_&p)!{kfl&}48zb-{K#ecY;FYw%a zJBr6?&PIf~yak_D_&A}}V<;NNivS>VMl0qa(^}Kl>Ege1@n5?5FL=L8?Dkt@a~#uI z7PzNwzz%BELwb9khQITezP1_*Zh&}nWHc8D`|)kM*Q3o8j|Ks4aDSbRkH8Vy`$u$u zmsg{ruvGEKFJ>a{`J{Cj%zJef@jE*D(?@JF?JQwU$+&|vlP!E1R~`$!i;X{j!CH)u zEVL7UR_D)uN_iQ#9IXMzU%0W&HsR95qnl0*v&|PNk&Ba48I`mHy2zVg`gEy5RDYWP zgf;9v*)Fj)ET)LuG&Q}A%5ub9BMyGoJ~lRldPp4_+Qf>!%zYGp(EWF(U?nnJQ);fm zEI2{tYu5PZ*zytzS61**U)Z0M25}_{58r}Z9rbFTA1s(ly@#JUVfmkEohX5wZk$PX z;kOo@_n><~`|7hVQrlObNr1wuZ~|m!HrnPOPoV>w?jd@jvKm?J)OL5e8`Lz%yI6>i zZi&Lla0zS^b`juF#N{a7QVut(XMm>rYEojN3qOgww1_qnQ$rq;tn6QkVp z_%@qYdG*anzUXY05P1vzsp&7^FLgd4APtenNH3xOr@znoBo&6tqGF$rz0&_KI--qe zJX1CV0{>0$t{G;g>`h%ogArAW=ml=a-^u$V>*I~Y(f{ZZErxs)?KeAr^%g0BNx1A~ zP$m0AM?MN^1Tmz@N09UPDmycVq?=Ga_{|osz3$+*`OAzvL7UZLljF5=W!%8V<95TsVygAk%Ec$H` z(~9;f*}Gcl6pX|!HE>PEuYC=NrC7k3Ib2*CFOCPrjQ1zvuiXj;F333tJFbU+p ztH^V(3gOlM7Js&P%)ks|&w(V2_KDSelk9SEvb??pWId{QM0r?I+=(Hj7=#wi--7Iv z1{|<(jM89MBrmfTTBryWFsEi3FN*5?nQu`Fz-Un;3ljN2SsKQ1I?%cvG!k(*SL2IY z6a0Fc6$4Yzt#T|~@)Gtwo<|#`u#VjG%6oKj>@;+m7Esa(guOX?W4i-a+B zt10&J^jI2HXD%*Y1Cwc$J3G{T)4@~QeXFy2K|n4Ha8`oo@snh2e2G-zFeZhWlq{{p zj#;qJO%wrI=tq1}`#`l4SLe&_ec*YT1<91eV>hFt1$7<1O{_2MhcUf#3be~0t5md$ z6|T9}LE8mYuzvz0{vP092e1*pVhdX;CC4h6j=rar4g-0lw&GaQINub35v_&9Q4P@` zmsfI2UJL;1$wg8cvVmHtH(FqY!xk^@A*7mVQ$-;5U< zA?uB0yYbh&(rcbz)OPtOaG5X6PSzspk#|O_Pb{sp2&Xs9)rYoqEeZwFeEv{jcf<|I zE#^FeB@jlqKjc^z^``?skc4p8rcmF__xY~Z9mVMspI9FimTP(;5kfZ*l`usm4mEW3 zhqTbhA5b5B$qPvla;o4uhiMFdv5^-tJ~h@R3sG^hSW7zUwZl+a<)UC<`b_A#uUh~5LuCOL694bJ;Dl@8s;msT6V7TpB$U1KO<8G3( zDMzF|-(8n>M#tL^;SWY>GNx*dQacY!zH$ZF(B6OnqL!elzE`0H`xyWTIqXJScZIUh z&kUh*Nl62bKcPuFGC-=BLN&A2yu|iC1P&q4HTac4)@%5{iJ#IFv97Sms|zI++D0K> zY%l&8u5m4Hp-?MXIfbaX&aj_DtMsB`gaqP+PxjZ}w{6-;Wys%;T%0k_c?QI*1|X&- zbqJp5)N2^)6~3HRc?wV*2#NbYb1QYh$LyKWEFM$^UpBZXI7qs*Y5kFdKA13+B#+dnK=2&kDuOt04{JZfs zbAW4#$J!LjLTt~Qkj3tQ*mI$mI< zq{b;$n4kc}sui3BhF+0Z!Rg3^dB@q(K9RI>_R<5XLvrLMdaRv3^lSo`H2{cQsy7Iv zxs|9*yxdn4uy8WA{+ova;Q8lR5nn}=d8y^hW z@P0 zysJ&#s)*LFua`|WSegG*wCaRvBU*z{r`w9wF|2Gnh}by3DWdgD!2fU2I*v7>SfzM% zL~9e$)E0cLw4g7({hy-s{5yfv9|CtUnjHE|1nzru0GAOwNSo{rQKCY{jHQdApG`}7 zFjVg^$1s6jJ74^`a@4()3U!i#74mXaTRAGmTP?yIv>99?6+(B^v15)y5!YL}auk=t z5t;c*o@a?oO>-=;L+w?hJ5fkDLWCro}HpLylNgq z6+L1kf_OmJgN4T$m8haYCGpE?c9B>9Q<=ddm%r|aT`^+Z_0pKmz(~%9{>D@PQn;S z4$jBL-^pYxlN%c z8yl>;AD73-pRd;9E@iel2PF$Z z=?KX>ysNOO(-Zn<%Qdp6Utw)QL4-V%SIi$*gI-9exG&Hlifm9tQS9fCP^j>O{r-oJ zT*@*jZa57&bv#p)Ki}*@2MFm5fhuztU=}$QLrnIM)jQg@E$NB2K$r~xW~oZceJLST zsZrw~jkvyb2n=>0w!adA^2LNhB1%aOw#gUeIP;)d(y(YuRtr(I&zi1o+BWWwVHx_UU><%)?CGMGeEW(6j9he}6 zbr#A6dBq5cT!j^=ztThVr@x|)UR3D~E^%Fcu)q`cZtF>ujdAWp;ktkB1HSzE+7mE3 zU{+rU(phV-CS}Q^+{#+YH@VME{};R|qj}rUZC=;o)oC#`guL=0;|FN^fg>2U8}P?j zl#priLqn$E(+dajX$JnZ)u&?$hmS;wtkoX;wpXrHPFL6DX{OcsEX?a2{Ik6`8|+_2*St^<_-Pqmj3}bP6eEWLOJ$? z)Uw3+Q^8yIXwvj|YST^DW@j7VgKr`J#ikC;c9sACiVA+*x*b&Vle3(Oc>Kv z16m>i#veOUMgT?xhBtE;7L*K~;wcWi*?#vt@SLPAP`24Qf3A!KQYox%jK4V=R1iYm zI1Cuq%O|lhzQn4Y2GZuO=2tPxyAD@TT#S&|EH~<$xj%QI=a9Cd0b_rP=m6i^KpGu; z9>GvV0NU_gOnp&*!W+m{{?r<_*$Btx!ci-k^%QO}vbIWHAr_O)``L4tmIykCrHJ}A z9#da4dM_~P4`;zFW}<(F4A0c&%)x{GA^tf2&I%(gRK{;;6o`oNJFOI!u3Nxs&g}aY zsLkyz7KWcBtA7N5!U-sp>&Y4SF_2{p*b*@z%I#T}>kk2SZ0oLCv6U2nGM)(fw}&JazqA zd07ca{3x0d9eyHv*!nw~;_-*<*C`alzCC&`$$kj0L$1u6u~a3&g9-_1VCpy4HZ3%c z*neVHg;MHX;`0QnweM*sBUO+>39<(p2)~DAB0z)+N7?=8p0P>*6xrf_{akaT+1gWqh7i^nh2Z=rqP+~F7_mLtn*=L%>I!2O`{h27t^%bAc!oN`qokO+4zdQSL;t1SDKlNavlas^5 zvlDucvrO^c>;&qYcyoLO1M)dvN8SvD=H|pYbx@Y|WgEWW9^nkb-(co7;441y=4vOMcMju|fqRVd8u$q} zSL4%mW45f5)4a$Tknym$`5QSl=<;aaz_k|MaRU>Q-awMtE9%wNFX04(sYa z!y`=I_G}=oJ+k?Q#oIauB_~cgO~Y~%S+&S${DlJ6A9wJ;3N7X%EwUd>i9|%kD+7_V z$PZu~ym!_@!(ivvB2NJn@3^e>EPgM24lT#KR}00Ugy0EL@4Mhj+xa>Bb4rJes37Xe zc3ZnH2UVN}L@6j#=YJOVZCD<<=2l?s#I_ZQlUxt-F<42Jq=1k93ZFk!D`g}GJexsc z%ml{iu|A$Ut0@OfT|SCO^B6olyb4w!C$i$ow-Jd7cUkk+h)#M8C(VrdKzH-nG|Xrx z49QKOiCd@AJR7VrGy|>`##G<786BgeJ?DvSQxSs^tw4FFGp1DoT3|kw1||xdD21i2 z+yByriN03+*B-v#Q)L>&Zb z(I3S{&n6*`kLVK-sU3H|+=90?Hv`Pr`5tVXNe5oTy^9nj{>9GD3${3b={|x$>-U$D zDG=7MIOziZVPV$ED8c3}JF=h9Z{xL4YZvzLcr*s@mq1>l@3jc|0Ph2}NHL1T(}mic zr*ZbBq&14twMa%QTGwY;(me|c!gXk3uRCmpp$!u)p zX=o)u^A?)Z($drcx>sSv$wSfMPNk0E8TEHDq3IISW>nT4e8Cf4>8XX1F?MzT0^9?z zK=&_%#9pdJ{s`HDQrX5mL%4qAfS2=2LC&mMTIeRSOXN2kUMt9XAN_kR-eo_)HvuaS z21nLHg9X$gj;fpp-eUs(FL*j#_RvFGC>>958c%5P&})V_b7xu!2Arylf-%V zSc&&wk(79_lO)`!!Y5L9rlbr6%u9r{gBW}pEUOkd^qhpWJHaXPpZK-AA-CY;MAZ2! z+vOdgNXm~dlhvKYyq`j4!nrU}Cb($_xymFe}Sj;y|mzK&A@IFt3x+TT`?M4%FeO3169a`u<&<2oq zYvFZnnXB-CGGit2G8cin%ALvUOV%hpJHfaFSx172n{it7*qNkQCc2!X0U|+1%dHGF zkTMA4!VyE_@UyiKCLQ-4E|t<9AxDsxoMR2}A+Oj+6+`&nc(rd}CGwVJAA|scq)EfG zwtPLOB}j5e9&LGZiSStpbT$XQKWugiu68OZs-PEB-~@{BK4B)JhyZ2Z!@$Xf$-^KU zCkUidd|0<49na;2$s-Jy;%vgm$xp!KApMx3%l6tgfNJ3Tf*i)wxgWB^9dGosm7}s8 zPg>+p?2Vk^6LBj!ptRCoAQKC6{&u4l>WRJlf}HWQwD38H9gYxjyU{y$#CsxofP~|II4^~Xh*R*aA6ev76bhnln8zq6x1qwmqI4|+HN4H(S$J+@yx#anls;QZ9efy z(KtnZ7Wnk$$rvBd|1rPdFSr~OuH$>@qmuvg;0?lgKyRJ|{)hQY(5p37i>$y4$6Y}j z=ZnP2@8Y&v*;A2bj3y~Lm!gJl|0au6NX_sAK%=*I*CKaHe78Il$Cn$&r#GLXh31KR zrpS7otc9lF-N9G-JdC!eW4aa^F6YG_TKE(oENN{8Lu-)}B=U;VIP!g<4K<4v`zL&J z@WgL%o{9S(Q94jQIP)s}#WXvJWW_W)(}%w&1^%E#y2**R6L@zeWP}#kB@>`!ydhhK%XbsXJQw^@xzGQ8B{H7+9j+TwL~$V|BF|96^4pB{#Ez^0C2g5 z@ho$_ZS?`c{K9LYfPsSmZ0Ydb1 zN$aly$r1@N?A|yC4XwP#rg@4MBA;t>)=B=th`pL)S8txGg#*Z^x29>4=?;Q~48M+L zl(ZfY_^*+li*JeJzZjoOT0azDFO*+n2}VrE*EpYQPUghtU%3XC-_eUAE)k@~b8+PV z!FRp2vlbCCF~Q;qmRyNX^g`Fd)xWR?l88(2%%KpCqj-vNY=0LmbUXQW&M?`2#Javz zKH)CL0P?XOC9S`SmfSA!-12lB&(#8t-kODVf&4hEIR5bhe$<<9!o3Cfrne48{1ykp z%W=LQslTnB}QREQVX@Xe5g@W&hql90_|OhTuOG*G z>qWrX{Qy;vGb02yVsH=Q?Ff0wlLwE>xd$rnI_wJQt;4j)Dm<{mAC5O<5wf$tX9ljo zkO95$JVOgVC2~O68#2c&i8<-dqQJMPQc`&3`~$-9HUZvOi`?jd-ySbu7{Fa=HdKD) z{OoiI`(1DCszuI_pE46&$bNUmb3sm3Yv3xal%e1Xa#pr#p==?Ce{4mBJQ&Cj2u_Q9 zg$J~4Zh}w#g>FN00$L~{S@$6={GI^EG*BhMV~H{H48R?}$eEl5dXzrTY&lcXw9p4+ z*_?rA8$LPoQW-+X-dBn5te1HT2o_C1K6vTDt zpF>%Ls(`n|rQ=9=iM%cEK(EH5yaU}9u-iZxToisWLcQWk6qmC>YXwETXJgE8H-FLv zXn5Xg`)vV;yJ^CeDB9R(-IvWZ3(l8f)oGWZNHEVyTDTNn?e0*k@QNw15U&oM?IX~u z3UYeR!F?L6ed~!@Ic@HtG%%G6KeN~V9&R9YN5XgmhHAr3x9$SVj``>18P*9V3j4Z zQH~bM!kZSE2&M@iT=h1r7=aObEBy8upAt4S&#Gl?a7bi^N^lf_II@ku&@&1!$LtV~ zh(3BNGOW552&fk@r#((&I!}v?l9d^j;F63%H|XvZ6-je)CDfmTphih+ ziJ0;CWA}wq`NWizRSoxdPHCFEYB_(xt6s;C{V2Y!dWKIA@+r(Gc+MSNHG@z2e7cQK z6ZkZqPq2m_T{VnPSMcc~K3&46)A`h&PicIjfq9jOPd)J@Nc0*>bSo;i%3?Z#{kif% zZ#^IS52{LmkkDf<5Dnq=+FIm1`L*IN@qX0s6_VyAEfmHK2-S#_p5A;T`>S*YlJGK3 z3r_^091D!iaVghO*NZHv&|ID2$@7QL1$_Dq%b1*G&~4=o@P<67ljG(4F2093 z^zDn#ILuR*YoW{WD$27*;z?WHBZ6(UV#K@)-G#~)w{+9Oyz(+9lNb&P3}+L=kGANU z@wjJ|b3giL&gG~-`e%YRXAoO50_m!FRyX$EIai41#S+Q6I5`4ftT<&4W1adE+5=pO zre}dk?L%T3!xAF&qj;)+6XSoEc!U)sypAxN#VgGlw=y%$8==YK2_}&6B7#uwD#%&Y zS~yf_a(ab$uYx8who7Gmuh1z&5%IJXPetMh8fW-sg4{1&e{6;P2{Xi@ozDcl`3}_Q zdOT`#1|wCs?nWA}Fz-*0%OnW;Vm$el6S1QOtKEDv^@_8fqqa&6_Q*URy2=_vqRb*`ABtYo3V{jP(7Gn%F#d{YX&BWEVxI{XyGO$_g*D1JP z)SY&>oh_BT$IpS>iLXC~a{ZC)u0L>nou&_apZ+QAPK`XT1nqh7Bz zKNj93eAzw%6AEJZ)@u3(c!{QNs`)xOSvoXchkJm#2DxRMyLwHNVm`w+?-Ds)lUtnyI5lE~-HzSigYfq=Px$Kc*BJvl*t}TJ6H6ju- z8>sjgU$z^jZzpGkIlLb>VN#{9kTz!@EU|PyI}8&D$N{s9q_0COY!J_7o9Xro|3Dn2 zctS&rU&3)8 zTjNJfeF@{qn-%yAM?zCy%-2Ex61R8hm3ZlL2tIa4&2*7u6jf*;?*DLyY%Xeon?Up< z1B2CxyM15c*Q3Fw)N1upsx`@}Rx5t(yD_NH4ndX5<5PtW+k&B74t{!9J7U-vf7B}s z$wGquYUwd$jkEns5LLiA{Y3YBI)6FGGVVgHL?Ch8`YF-L%NRs2`4@^PfpB$P#7io` zQi~Yx6YRwP%Ds*KRf(N@-o7P92Y7>>iVXmA3i`Gfy=kl^^e11V`5({*SxzAueiM(2 z7)e%IoV;QSY^U$*j#tR9Ua>%;RfEB9XeB^n zU+B;&euZcrv7N@tGopD_*)iPihR63H3X+U%2i|ngxSpkPP+yM)|W_ z{)ioBO($dGV603Fi63#WPCm^>N6Sy-nxv-lFdvztQp`!I20VcBHj4h+j=S^{_sT%Z zT?U-yDTtPmi^&*GbxV%n?sOaDPw*$MKauGW(c<{67Vd&iDy#kj>Xpmq7hpmM z$H?$X$>K&#d;&$1Brh$X41%A`B`8q#A{f(Nfj)KS3pn4xaNm`J1*`gx`vRcYY?=6ID1x7Rq5(biXxtY!%)S+<@o#o}Xv9_z8AK9A=o;3QMeDUF<8I+N z;qicrxy?eHU!tM}z`T*T$C3%hb!Ptr&^XI>3`R%?>s@dXCpySBNRLWXd^HFn3V8_G z>{F4>@hGni_}giK5>i1J++oL5IAJ%uu~0_bzTbkTxt%ea8FL$t&k5V3-eQz0#B>hPEmA>3xSP&xfQ=E%oj>up5VazlO^YGht+W2AK6Csr9BUH6XTU-qK;Ps zxm5;8oRM?-Q;^o}PjOAAHTfa}9Jd?eJu^Ze$1hu&&csI>-h%gYeHfH%cCYZ+J;hXJFhb-s^h?lcZHb(3~sy?%`ElbQcE zM<;ahJ?7*Az8y2ajizskrf>D-Z3*r$C!?fT*U4FdPkcA`o4FzTb13g-UJNmyjr?lt zH&7Uj&WPsjrcM&gZG=&haT-j2gLT<7(Z8Vr^ka6+(YeltVvJ}CXF!^c?gx)_q1wjX z(!ma){;+g1`_${G2&^`Pa0_aTdS~HykFUlEqB|QM!DZzStaX!3O0cc*hqnqIJoq4$^@HOCps8V~RdnmqG5R)K+XF^HAah@;ph_MKIvF z^XTvNM(Tg$Xya^YZ~ku_UO#$c!f8H_?Mj(_Q-8Pf?C6JqL)A^rL46{~_dd1CG{2z1MSl$=~R!(dPI7W#+Hu zp`ER0h~x425gzUHQBm~V+@!#{TI5?yyr9<hVPRs6~F2 zgJ9IS<=9 zZXrD}_{@9=sKrKpgM9`ls2}yBIUp}cHx}JyW~28#`@mSq{`o%t`kA?j^6Mz++Lq6Y zpVjgwwk^Lt-6=ni4Uj~NHD4;sOx((B2{ui^#2W^f%8QXE=Lsre}d zY5X3nntrfPa&WaTxY`I-ff*>{;G+2feG1R0(_53Zd3*4fsHnk;7A-M*dNvQ~A%l;v zL`C7wX?zT_^ba;#KMrlH_{>GcYg#$c0#nl62k8rM)LWfo1KONF+%!QY;uqYUDrw=S zZ#L#?T*E^7TGB$}Stb(j$nB>`FyGs0c;{3x@LG_?zuInqB@y3gAbkw=(<1N4A>n^3 zfNh}=heJsV+;zgwBR5$Cqcmn~9Pjzn_5K*ETJK-SANo+$;@6y#1~Bu%bU=cwZX%t7 z>w+mEaO$i0jC z`~uuE*k$~Zem%IU2KAx07U)4!YZLh_ zGL7<05Gb?=y`x2blKo4+vb*t3i#$#-B71p15V4<<*-v*$&Y-&$_dfuFJ@Zg%ynt{4 zpzYsSd%b01pk9l7Dmw_1J^k8n2eY6wWJBpu^tmL{6HXC#un2KYld@o-VFHA6xY!!g zU38k6jdLapPzMa?vA@U?(e7^#p#t0=!v_?4i)gSkY7G8lT`z`r81^t4HAn>9^7!nG_O@h4`=(Ral$#?ja zT_K-tfVl?sVsU4(jhVpDHnnS}+s50|(8jzfvQw?L{K|Cu6xq<8TIeTMGIF{^3pcNo z_@d2OFWcJ#`j3P>MGIf%6i73u{SE=-0RA3*twm@kK>|H_3z5a0zqlcXWICkrET)|- zIfaryG*WUAPq;~J;iW(vAH~Z6jkCraH<-1Bf*lj%#-^1V6oNwbx~w|<(jIoQp2G@0 zk|^kV$z$9En1wnJdnbZ4flGj6D$e!*LYuROaC!?43@npRH)&x%EB%^$?T1RggFIS9 z)K_mg7Z<KTYmvT^8r(duBfz<`c;3Glx`-&|^pGjo@a!s|G%frBK-skO&@@+B>9XDKgbYlk z24LSIS#2iji9)qG-^;NC2bAfOo^U{!z#^yNRb?jb%h>f2<{H$Kxg&ce<;Oz0AP?tj zd$uzMPGM<>0L7wD;>!=t%cXqz(s>!rmj=AF<6U(dXmL02K+xsgQR()LlJ)5I;s_$T zy)48&p}0mDJqQPvCY4z?J1-iGqmvqImC6?jFUWAd7FtWJRMEoRq9j010FaQ7Q?(%E z`%b?)t4}9P4#PC6mRPKjcvRl%c#}&47K`Tf`$W)e~T9S0?bQ&;988v#4glre2ecw zX?i!jW0F+sF%$L-SFWbA5_t{ovh6Lra$BMfxXnw%hFXp^KO97aWvt8x8qK0!=6LK7 zanr2D8|-0@AK=?M>qN0Y-{#vauLja%V|?ppY(ww}b8MD50;`rU%n6wWmgN5JT|PDP z8nsXh`rRzr!f~e;?Z)!Dv9Oa~)R;D_V>Qp~nz`GJIvhmuW<5a*3|8`1H`Gtqy|v}u zzWDHhYnu55<{D$W-k6M&Jb^PA*x*Q7;9}o_*;@g%1m-|%lL8Uk2?%`1L@CzYFdzdu zxQX=$AAIcMfuA>NGK!0pi*LT2kM(77(eaJYv}S!PvtG!o7mCl1e|?M#dmid(?8njg z^MZ}N@}Pe=;k@(32yHWyAUJ-riCqBn?3>@$K>yU{5a((L&T5I>N-9XVW+{- zLmoh+l2`Dc_UD#_Hf{|CHe%h4Ut4Urgid=O! z`YJ_$aJpAPR9UxLg8T&_F8>P76-Rzv2h9%Fdc^J-`~<~Y2b^z?tz3kD40K%i(nG>X zM@!>kq*$k;PT8@8wcg(WdWS%VQ6zyBlYZeFD7$Abnl>RNSZL z_Q*g~l6tMRIq{8rBELgffd2%kQ;a`VS zt5_@4Ny;Iv1)L3tGgu=SGK#j;`x{tC+*K}q6curc(t_bYAvQ3;{@)UvA4+VXH`gnD zvP2&q1;%DQ6<315!4{Q__%< zjFio83av!LP-t{ovPX|~6gO+1SJ!Ks(Tpo4!;JfcC3V-lhQQr`)N8$D8M2Pt1{ngg zX`Qi6i!dJEj4ne!xX30vo)>KBRkX#XDcb30mwwuEaX_uwE~iW-(qZ`X;_lulgZWhYjN z1)bB0(^!#URlR>HNnP)!@gzzA$rBy)2T-B7=yjN3h5{v?V0t9m;t6g!mF12oopz>`t%ely>z`Huc8 z#xMKNw{zA6V|z4jwaWs5d(a8CiB1-B5>~+1PzPo>x(zD9L+ouf_sca2QM!UcP+wp7jI0DvZvZlO8m^D>K(x3!^vCnP& zf^81&ztgJZm~@{cI*@4!en}>KOS`h0l(Ls1Kg*s5U~E%zgOZ{BeFvQJr|FDbffK{V zcF}&o9^K}vD?DV>N&>lXp>?3DeVaRbE+fQ?8}Ep6q`$V;TYSegUT~hkBiy z|4VyL+lwmd@!WFO5%8sP_(kN*I_qDAZ1v8{a1QK!hGeS>iA^Pv4)FX;os^Q&#vkI} z3N^OCm5bDvjXd_%$I2&CuTl{Wl@9zhgztTP_>cl0aNzq8{)Ysa-Too|_mujKbl~^k z*Is#i_;m{YbO(Ml;W@gTZWQxx_Ca*vQ1qW1En~1a0M{7xP2I{F=DrpFYMhCn;O+AI zR%Q|Q zsS!21E(Im%yB_y7%znV(D$(mJ;Z2(;#AwlXc@FK+*LL7m9_-0zi{RS70u1e7#l`h> zDhC(h8#(w2iHc0@)cI)E`xgu@K-Wl3oi|6=1dH z$(WHsvEV^_KYGdSerJ}NFf$?Tu53jmP{I%Rwd>fULMWROxto!Eql&sZ>jdVbn3HBm z>kYo6F*EQh#2oD~vYW1OE9zl5hmSBtY4i4i?A(A0^}{QT)S(l_L#p-!xAN3-ErtK) zqw9>HR{|nw^DbAyUc{<*jThGdjZM%+6t|xJJFi$47i_cTe}O`VAw&!^e1l(m4aBCb zddS6|qcsL^l0 znPgQv8E#>Qp~URXx&&3UzG6cEc14}7RQ@q1=Q#xI06@L@dM)&!X!8WY|5|uhyZot2 z{>z>G-{IF@i-|)vJ_19AAY?bK^lw0>vi~ZAKGP285C!KCM`ZJ#BH;bR2}VJS#Na7n z;uIvRv^b&=Z;6w8A^``s13XnJMt1=F6Rem3QuwZ+FJEWcewjIS7yJoXT95Mt zcX?AK<);9b)!Gsl2=07@GxguTN7Y}1fv58sGJDIT9pM#M>GoJDY#?S1J=bt|F=DLT z1l80W=QVrETf>5!BRx%IcBIAu`lHll^XdpJN`5+ z{&Y+HDd0Z&7YlHyHO6;Bs+rhymf#0-bc#6{{%;H5Z!6?ueOkQYfva&PJSO=Ea69}q zant$RkS--HOwuB+;Mr)<_oa7PuZ4>sHqCL2%Y!yYStnp&?Md^4|_=5BN~94oNBiO!<9AoF51rk^NRV~Y_QiY4ZXfNxw?n#1X< zi|u4a8MYoBo!YI7cBFCYMEaPA^;#1k#Jh%LyiHoMFHzG!Ni zrnewOh9NFqQpaHNfW+FeAFf@H_i124i+icAWh&N&`DJW)T9S>oWt;ecz!eMwaz~#EMKTx9Wmmh^$sTgLZt%L;S(aYZesdW|*Hf<~i2P29I zI2cwoht-SWa&4zWVhMgfoK%=n(n6S7w*eSJf$TmIj~9zaoDRUz^OF51^KF9`{v2Y& zoSb5gOEuuCmOJ0xfCTirNRp0isJ;*q{IyoW)M@w^+phu)?Ezl6kDv%GY=ha5&B&{= zOYspEN0XAQ-UmU~+)Cj!iNMG>4Y+_QGG0^^k7C(bvW}ui(QDw~Qu+i)jsk#J6tIW| z_^V{q$d#;6O(WSF6}8S_%|x_IyAvB#v{-Tr{O7H+MJ1}Z?BF?Z>4r=n^l$Md9F8$+ zL$CH01rW91PIS~Yu*5jSrHWs3L?kH;>uWHSRR*)sNv`;;{}m0y=2Vn|D~>Ha3xk%! z7o+t*G(N()D7P8{7L~&M1|n5wA2otYz$!-mV&fyZ4myr?!0>(m-WgI3J3bg+fBNPOHTqP%FxMN zH)oJXM3*Ft0c&qFw}46N z{fpB;ZHR43CC6YTF92eKnY#`yXxclFOz$8ZbJ03a4Tj^PI~I60kWzH+T`ff5YF?hx z-(L>vNur-5Q^BrM`7brdE#h- zCs4dqh3p*sH(;r&f}NNs#G32C3<3qJs04;NQ9?0* z;iP!pc6d7hz?rkeRZr1W2uhfX-fGzV!@-)&fLBBr`jl4;_B{n$=?JYmaQ(WOx73$c zjnhn!LNij$+$vx00!=>+Z)&p(6VT`Bhx+MMYko{wV7A@eg62!+iKnFlxE*mTujRM?w`Wg@nEOFgF7q2gG zY2nA3o`T3$MiDfvYL{#m62u?!`RC)BP0ait8}7}^!q+e(luk4JRn`H7(N!y;_M5-V+S2ZG zn~uAkqv4&Hx=t@D?_(5I ziE|x4lP`*@l5@m?98R)ScfcXmGnWeX$RvBnu{h`_lrz~YgB^9Y?tqyF4!2hHO0dpa zZTaYQ$wu(SvhMDQZ-S}7HZ|x6Doj*$tSeAiaT-?6Tv_KSImG%>=r?3PH_7@aZ@kJpppCxshIYb|Hg+#FWXY_;XlyAWb+5 z_A*thT;zPIg*W1({SE${un$j4pCwS>%3A={B;oC~=Ckb)#y z_}{<=vV<4#*9+%5kYsU+7W&ogGP1Bxe-fmf<>DF75PND;0`WkQ^KE} z)E69PrC43#nY>w8jELo`^^64iJ3`?mY2nvUbv$;!eZzQ%j@B;CU)}D0GPy1g zH*w&^OI){zBN2i;Is%c4GunJ)rK#A6tAd?Eyjfq6$l@46%$a4yx>bziKcM#NWZ<@6 zo>Zd5gm~wyc|HJLG4{5_Oyeo!qBrobs42cya@dO_l+_|1xR9dU`Zq4$vOmJ^54sq| zrf4fhv;h2d+52AWEq)*Tv-pnmRLoh&ksc93okS?Pkd#*@itD!RN8x7x&0qAIKSsK@ z(fpZUdoapC!nox_T}wU6CgHpq+_~e+DM3y27qVb2Wnl5d6+#}@QdrXcgB5ANmICqh zTG92)EPFs*Mte!y3*CpZ%V*hKx*x-U>b*8r3-hX7*) zaYh6SyXvM~uG7^l>QpwDS+E(zYy*)^bURO0NySvKMheJ{)t{#K1h<>s4>D&7xpC+bj(8k&eWa0#tIl*ftTMaNGNj8$6E&|yq7BU`Q{+x3k$EY@^rVTkw-W@a< zEEG-8sO|-lS^Hs2wC@v4H4T3WzJru@?g+SxUtmE5wE&%jWv2}PZ~f(5Op4;>;m$Bk zL88G9FEf#Z(Y!|I_->_D)sM=8?8H3?VdE$*@ai?i-NU_5*lZM|e{bn~dpTc?qF67a zz*LvwDmgLiR_KjhJ?6za5cWpg7f-|;@LDP z|6&|V&eLF{RXcKvf(E6;zLnj77jUUy>Pl^)12eK6jG}#74*^Eauj-by){X7HHY$~< zvxXA?G_lZX83b|Yl_7`2m?t(p2nf5N~8- zNnx&{o%P$=3)-USJS(oS8AS1lgW_t|-&uD3^iA8AW+d`hGaUHdgja-xx=OefFzPpT zl_1vv1KL5fSt*EhzzOXj)Rh9(0Zr|ysB{#BkhQVhXSJ_zD(|g!pU+A(kSp4G_^b+j zjO=v$&oen#0#wN*K((XlBC!vTmtK>Vf#Ah>OT%M|)j}L1%qX;2{ji86J3cyc@D+4* z_m|To&B#G<>v)|XV~cr*a)Y`h9Vv6HGGY#;0>PP%R|8X z4nXhJz~2~#bvb5=B}8;$T8i1hyxt2!!AN7^zHo6|d9`!YNo6F5i)h8Ev(qaZCMFge&9H=Uv5|>YN&CgdZ!okSf3dL%HIECv={!0TUu@{G7DDh1MpOXn2#sp6 zt+(N;>6jl;AyUrT!OFneCQifgCR-u}LvW(7T=PgR5B+$1vhx{@usD+|yrnTtx|&z9y6;d4ZV>&~JI!I<7x5&GGc` z>VtUs_`yx`WcGA(e44)2gQqleSb7w9J)~!m3cc?F-BDvwx#PW1Zb9T!D}%VO-{H;r z1>Z3Uywqy{7G390-As*BFYZ6ic z#Br3i6Jw{fQ*g7f1D0xqnQ{=C^H`OZDa)M4qUzzxhtlq}!?Rx4D}1dcZ;-w1=qcgLW&4sV?vf4sa(GSZI4_ zFQ-ei=W-YLeg}Ah3fvC!r7rMr2l({=0ers;obCWWp)M8LVeaJue-Fa5fiJ3i1V0H5^@1+jk9=EL;r5{|_q>FbO!S-3aD- zgJMS}OKk?dQBOW*Xci0wYvY$7g@BSAEys~qF7O<3IXb2jiio@PG9~J#TmLmJWT3zFW-O_j4mVPILY9MApH~iZu{W34hFfeD9NG?b{)8 zxb8%7h@=0a@PFIn7I8TgD)_VgN>D^q3}vBe+Ps7K>&9QaQar;i=QC7a_1&mJ9&yT= z>obY>ra0bWiT6bpZva>x8wZ?$A~^X3SD>!%0>ny1U2R$!T{l2czf z{a{jAKI{3%IQ}fj-m?IMTk6KBxKzKc*Bo5e64zmLk8JPWkKOi;lz1)_cmmZTKx+4P z1LI7ka(NEI|KitP41}WHFDLL_B!=BidxBR|wJabW3^xsYRtfEjn53Q$&Lh(Di7_j7&7NiTm!%xAT z9Ph6ImzB;c(e?rTT(tk#B55>*XuU)WIVI zP~kfY%D*zj6Xr1CMVYXN2@f)1u1xrx3AZqT$9sWeD-*^s;U1arDHASd!W1Sb zLP2%y{Bn~dPZ-s*2et!DQ|i6c0h~s_&Hy}4JLf8N2|4fs2)_+pB@R5~amk+bU<(N2 z>H7vy6zBi43QV0OmzU-Ta|gpoQe0;)9rxfCa8f&|i2gQTDg#_p+!(7i?gORHNvs1R zqC{UR2P~kx!&r_qJX^1zW{&Z5cp3t+7^Q?Vo|%uo=5V^)86#4R3907O(;&Fat1_q^ z;l53*AVF`|*!qM<#<3~p)KnwN6?yn`sjwTRY(#LZez&bicBug6l|=!yO+L#%=sE4&U##Hyhux*TuB?tuHmy-PdBBPQ=zZ^7&-Em;;N}JfX3mA z{{9&8I*YTYw-cgxSZhClY;E=g{w=FbwQLQNoQ|q5W;da{Bzrif15=hL%3=`=q6*yW zu)xC4`;LtUC}snNl4(4cW$&gOl_xvaur!`m!1>_# zi3J0fMEO&@Y!9ADpZ$m0ycH-9epq7aH z@i=ekMcbjN{D7%Ui_Dkr;QN2#z1@N4JF(JnXNMu|%v^D~?=av(as?t8Vf~wm@t9(L zA==we%|w=qM8rJ%!dZQeztqQ5FL4W zDql*c;RUALGRBe5{=9hh<*7;0NvVNsTy_XzkgjL4;du?{v05!O0QF>>D1G=bxDmwP zQRf{(B;hB>q5kdG9$Iq+Nb;U&>sH8+@zE>2 zD;t@k7C9hS(MMQX9RxIG!$mz=pmq zM{DuaS1TQar^F?1=OJta7y`kSP_T%97UKCfJe{P4ewLLv1NUi3ra4Qdsf>9MTIFyI zi|@p0Wu)&)vi|M8J*({q4^^J1GL z_#+iK!-0G7IB<6eR}l_P?H@Qn#G4Om5E!6RrWX26HvLRZq_r#4QgHQfaQzn= zi|BWiIE~7v-Lrv>*xet8fuyyWp`w$lWr$&}W=U6YzbCSM!PEQXKI#1@HWD63E}S7^ z5Wx_D5)!JQT%c{*)#kjJT94ZS-#@s8>vww=1!P-#rYHK-@`>^h_lIp$E2)SHWVgB# zE_b`#1w7}1!SIWYr{%rQg^iu}~<58a(}KNO%e?4xf4>0x`0 zHT5aimXA-@cftF;Ltr@W{vCpghxNtmeFT5YAY$_YuMDgOq8-2qT=@CrE!DqkH4YfK z!Z{x^zl$Ka2G(~>euzI^l$sO(hsTDD&j|kA%-`b6Us||G(<4A^<~KlUFJvzVCma3I`==wOi) zV6pGQA7>nj2vl3xzF>p>E_&2ScRQBds@liX*TcR3N!;;j=3`T>!OY!Kk1B(@CmUnE zZjp@IgQmK5w@0JA_Vxm3c;AYnH9Sj>5YYAFB6suy0$66w_}R=6XBV&)v>4WD5pdlJ zQIGxf{&00dh+dXk@2}ub(-^lsmxz2=Ydr$jZ1ZH#RyV|1Z{S%oiBg%4Qjp2XMt+6v zuk;vehxjYC(v?U>RC`2w?+|>?H=^InrA}CR%xfHs<_JW%&%&g@0c~w8#gKF^q(not z&}1)Ss7|a8B%6~mWgLFg8g)kKYHZ_0NL`#isbEZ#?r5}#dccqe6j4^X7IFxq63CN67vYBsr6$q?X=iCvd z6W)BE2wiHnv4`BDh?QOcl7iqbqM;Ss3Obv#I!$yG>UG@LNT$G-V*(F#J9hroaC^bj=aw+1_(wr3Uuv5e6u%Zg{W)Vb!DxFbB=2mV5 zu>MHY0d%*6ejDBwt(HC?;ir(t9G!{NUuHhtH{xpHETyr(u0wC46m;mgj6_eu`MuKV z&}0}O*`38&Xdf`vGKcOD1at&FKobd+{duDiQxY*xG!j8CtUy z+Yg5D(>C%Kn)$^B_OS#@rW>Et*r(U*?W=$7(Rcmk z`LIii@l}@%NZosyzUv!U{A%n|YrgNGf1QlG6XeI5y}gak@I~MCa*f@q=KGGwTl00N zE-lPgHYr0}F)5?Q?xBCJ8DG_W-MOG-*W=9srJYt_;M3R11-OY_-_=>d_d-p2*X-45 z>=TLfYmetc)Fe@lZu+hRq8_QD9w;hakFHKVKB=)!sQKP2>d{fwqsH!Hd?gxn1?pC_ zH>Jyln(sRspAm1_q~0j=)SA7WYwS+PEwiIrruUdKlM`ijXjkT^wxoo<>k2fjrskW@ zU3M6?Ws^=tX?;lMCX!h;4<7_f6Ucl({|034Q}YeTESk4Ne6ml~ckLA^-Yy%;CiO9a zq!Bgi+hwhRH~2u;WkM{b`Eo0@Id4H{G6kcN%fOo6wHOj2zL5;CoEnR!Zt!i;^vl7T z2rJsu%Q>&-uN)JVAAv{b&0)CPTz|~#4emCt9pGC(>&s~Bhs>K>fe1qWM)TTCb5ceW zz87>o5+OOQb03rbQ}u%FW#HhcGH|f)aT9D`K4Y}K94km!t~ny3=DUvAcuGd#u*vBK zMkjN0ng|?6)}NGu@Z9FI0LB~cvPRfiV5{@_aa@uyC=a z{{WN*#B}~@ac7&WpX4n?Q{}A=vca6TGuU0C;l>dR#;CWmuU?yTGV}oZ0GI*oq_cE) z41>j9$>%sp&bMJ&xIcci6{9l>{$AW!3;&UC%SZQG+>9HDa&*yI%?fX2}yEsz|(@sFVYw?S)sAZe*3yh}{%T9g+76$ob?pFS$ao$1PcPyQm zzc+u8|9t#1|7G|^{yxml*r?1uiNB}?Z&+R|>dfRs5G?; z*Ms4&7>|HXwVK~2Lw^B=&Xf*C9BWkeo>;{X4N&a6)N0|YPzTq`xP2I_XIxxMh-I_k+l3+xuAFLBdR&x2S%BYiQ`=ey~s=XWywA55R^ zrlX!)W%@d%-|nQdo^>*PE7Px$=^RBOP%H3%&-6iVI_k-Qtw>LL1nGU;bkO;EnV!LP zubYng&y(qAGkp)X_u`{3GzVX5td34c4ZKp+@7Y3G;QvoMoLIp!2`^&KeUE*9|$iiW&HJLq<0d4W#^0e0ml&a>j) zhlhVTj{QZQU+zUdgo9dvaWCf=u{7Iy0N8GU>r#IotRH~Tbxv`XzG3gU*w$?a<=8Y*lOu&E$0zSt^FBF zS3%T*rc03J?LbnLz8XUi^w2(0GLL|>8;7u;>c;KsE%w+)J6>?{hJ~^1n9zbwUh!2nW2;V;6eyx;#mhN40 z9fF_vCiI*6?f+VLPb|bTu7@~Wjuq}YFg;fDa@~FSCp71OuDgfEYQ9fS7BMEQu`57s zu}lLCreI+Qjzb-j$dFifPlIJMvF_%z85?CIWxXR}V??SdF)h@}N{F}mL;w#N?SqQR z9ne5r{uKw?qy{anj6*a5-`bfMix{AvmOR2q=>aWN4CMi;Y7@LW$HWuwqLNbU@zu_- zp~g^?4TkW3a8#EL#*4J+XrVlSEV>L8n_CdpguMtE^;N;JKOnLnq38aD+zO`y0PV8(kY_i^|cViS)-2>-0_ zmx0DkL2`S~sDt6<3DJCGvyb;NO(n*eFs-B`)~SmQr~6@b!vYuy-nUS17vs~!I5q`f#bJ1?3#450)L@zlRnwU;z1Lr*3Li+!y|Elf*B5Lb%Oa7tIdohH20U%Zz> zzsA@snWw(pmo(=~db=;CK$D!qg^}l4Z}*$< zH?8|k>7Mo7cNnAk7?U#fx-4H&xfT(&RZ%n3U&gkKgpE^JRXkQc)QKPGDUtJV^XdgRD$4 z@y}w(`m`uT$Wv!_7MsCb`2DnJkaK;4dd5hRhKv`ZY5!#3Xms>IXbs5KI{}G?v31upAEE#MQlQYd*-i33PQS znkET4A?@U`AgI?EgByL3k?TZ+i+L84x#VXzlulC@pvn!!L+K1k)AZ3mzvclF;uMDv zMHsJ?{CVtw{1EKW4Xz#fS|Z5de5uDy!SHj;+7RC3u`qFhLp9yu%ol4SM2jd%v{(kqY*-xm%!e^d^;l051@yB<|5GlE$3e!5^WC*$1n&=l;4NiLN8)>ftQi;Z zx3dS6T|@7TVpYVb`c-Nbc&N_KN4E+3{2tuycc5_<0Lq>J@+%xk<4PFHph_+L86-K3 z%-By!;Xc4kO350%pd)&*}&>?%mp#5U)x$IrV0dc>%=v9Em=pM zC1IVQUZU2U8kT)o!mhA>k0jqfRIR;T0g;HFC+#8C3p35fvmg(RqWMi-X-~knn?YR1 zo)B{F31z~bFjv?U=1O})S;C%Bc5=~NLkxPD6r^d_wJONBV3|=gxA6br?cKwpDw6l{ z37Ke+;0X$fD@fF+sOS;_mp~#21X01og(xa`H=?2<%m6A#k~2dx9!8^!imR+3sH~!* zix|8N0b&A*8jwWsV+avIp7YGy@&JI6ylZ;|1{i^(wioWVGMO=NS_Z|1Ku%D)0OP6tE^-{9#h>;6u# ze&UaYrQer*_B2uapsz1l&>M2p-55|*Di>YX2?rUk*6qe^i$#^Zkht_>43pg})2ay& z$fzEHAfA}SCT+Ob9jqHxS;HzRL~v9I@`ConOi%+(g!b03Qfedm6YOtZ#_H;{D$KD$ z5HfnRH={t$2+0N%X;+P3IQGp|ICD0a7L&gm4K(vHEfgQcCf!Fd&~J^t~&o`h2nW zB^0N&?u=CP#YY>#gYJA$=8>YloepYT>gDJ&qNykc^5{cPUX%0Qpk%`UJ>I?bjH3Ew z5N7!^K-<+>U>&lI@x)5w(VE^XgQv$u>&MJZL7x!aA0e|@(-z)b_m2P0gCNGavGXy^ zTI2WniKX3mgYY-B;WAv%5trWM(6R9FCyfNUh(s#1A^$5(Srm-d6Mz?|1YfJWb4t&wR$K8>1tS&!o?`3^dPM-tcAvB=e$EWJr#4DJJ$+`6B9#inVB{b1t~n)sKhjwWqOJ8-93NA;^y!<>_!k2}j3V3vhaW8KQKD#y`NaYNq~Y z97J?3-<8}7o%>!vR!}c03O>L5!JzPk2R~kADDG5KTwwSP8zlDV?iV`UDHB za|%-S59=TSfH-r0Md`3QFU_&8$%XEVjG5(p2+z);8q<%NPUYqs929!z430DGzZntv z#N3JZC)8?B8^BoUUg-DdxDAOfKDhh?cys3v>@mjdFxZ6c#ujE%TO)Wu6t-y54tq4S zt2+$p>_0OwqH9`RczyJNbi5KhFb9GzT!nfg#hW;9iV8T?94`#!OO~(;3(y{HP6+c{ zl{=T3is6o(gE)c5Sp=Kc1krB)k)4C3oL_jxLme2QMk$hu+YeA@F(VW{a%Q0bdq1j6 z$>6rj8n)HKPC;H=XU|5Xt>R75sYhfuBPl*1M+6b<+1i1k+FPxpU|^)SO^QF`J7P5F z;0pB4&^J!KzCdxz?J$&_TRpj2EM}{0nK5?`wK`u<#RKb|kJ(slyD;khmj8}Vy(9yh9Wrc}=g??54W2lBSK z^qEIQqCMxJPp}F#sCz5d#c;&^M`o5pioUV`iX!62$B(AM6a1`^eX{#@kn1zbH=#)0 z{;dtQEM&*fV5#=J`6RoykIo*z0$nR52kDgLc4u^rpkln~?~Xlwcxvb`C>395cMYIQ zs7WgjWxQF_H-pd4PaI@*5X!8_#fO1ESsi$dFP7K8@~5q{1T$P`YTc8Ggr)K7rw-->z8}MX^BXLk z&BF&;NaF)OJhQ%&y%*X03bBoHG)LX{Y1R&vU0iWv4$dht=2->ucSgnJV!LlrI%~yMeyai&%rL#x2M`dkdTn&Y*Za&RwpcEg*M_S|fXBJNuwKu)nRiwwjLr zw4dyMAjd%+-4o4mo?tP`F0p!%JFU)R@n2`4YK@z(pNA2pxz>C{F^#$p12`e?;Mm4~ zLo0|U0=HVzwqgUfHLN2q)5Mbm#o5^JmOt5#cVxf^CH0_wJ&Zy8A4n4V@Ejsp8yWFh zQ<}LF*PJ!j)llo!n5~hCejT%+pcFcRx$L^RVC~D``Cm>P7inrdlCMW?ns@_WmU@5UPwvZ78-q4(55T)q zMra+-FIzc%M5mZChie z>esv)v@|jRNA9<&i)cy-SF|m?Xe}C>ym^RZxjfUlsy#NbSr=wu;?I2_9|Q{BhiS0X zkA00BtRB|=en@<5vz)dgcwGLpO%w7b8~MSt?4}9lx^`A@M}BZqN!7$YRuL}ATphvX z6I&yr+KYVh_8&rxSy%h5qfkDFNd!;2!fW>lGD0CusGAJ$__q9MYbU(38weZWZA5+A z4peAVv_S^k#)y}Ui`E(yzcXcGrgeW-B#5O82!Uy}%SWLDt*oeTH0F=P8X_Mp<52kd zc_Z{Op@R*}ZvsHvCH6HVakDBGCWdY0b`bbV`O@$)X$|JR*{$V8G6R)bBeE@cpgsmv zWFx6jyqb=_?#E8?mu*KGrBp(=#TM??pUy7chK-kJ!~NF)eZ*6=(_7=KqtF+ZoOCL| z9?-nVy?zJh0uQ#!yPcO>r=e1=AepTgLw2%#p|D=ifLP|i?XMt0#R*cnO5AX|y1(-$>t2L{TTz%_A6j*+NK^6{Po zy$AFXAT=hrAi!;e*~`^o&vdN6=n0z%VF=N z56?b!2)7H0lPT?|c6%emb0fo^CJ)?)x;;VnIq+vY!cS907OnMmMZ={Hf(?5b*Hw!n z2~yg=0X>R*)B=%JaYEP+A}bA$zkzPcALS5}J7m7V3f5W6Uq}l7Vfj0H7|#o%4T?{3 zQ;6Rze#aLbhV2~hphMyRsmARkR`FtxEIW!l%i<;C9YTKWH3wGMGlpe2KX<=v#Ds)~ z#Bsm@JF#O_0a*9hmbu~w3_c9<#n@X3f55Dj*alX#2>0D%j|&EONmU3=k!|?GrIScK z8J9=ZRu<3o2uE@q0Ls|Ex(#EZc10sMkD_p&J^yc@oaEUtn4DV)=eezF(7Xp3f<3eqFvV2j7-8 z*Wo*Ga#`~~`FlcH^J@OKD{HPNOt=>+mU%bZRfB@)1lfcnw9gt-tG6o+PYJn=;dWNH zdG-fSCfap3+Nfu#PGqs?6AqknDPTB1clQPCoDFVJgeH|kV2%U8MSkObjQ#20XSw?I zo#?Q&=u&JMY9Ad_3xc{DkN49-Bxl3tY!xrUc^YM65!s@Q9h&DA2P-Um%ev6pwFdbhT!ta%Ly7^)?cYX-j7jSy99Cj$?LVLz98;jUBXVyuShU2Ox0N-QvR&a2{_E{3O5kd5g5AcfrO4{^Aa0Yu zXwM)=AgipIQwSqG6pW?kze>wL+s)sf`G2PBN%q%t2CVb7DmStj54dhOR&38~Q@jLB zGYx4FO}1ZJF;~r|a7JNc<0-<&ykR=?e?~QM z_O;%ryt`!tpxiO0O8W9owxXmNDu^(o`QMX7CnW7%unJ{ zg~t+2Sqprju+WqSbaH!XN-dfKW!`dAzK36rO*vOJr37tphGD$meKfq43M1PO!v#d2 zLMC_(s8vH|`Xa%Fch!zmGk045T>|R9W|2*w;94D}X3(c=H z16fEiS>&}y!nd$ft6Aup3^-?mPxYR!&^mJ}pxE=d$f=(L2Ygn8`|`~u+)qg+a9_UJ z#hU!cCvr>Ei@2#;^djh0>uSU3n6+R=dRbuWEJ89KoX_UnmBZTGE8s^XvC@EJyx;dg zQ?lIuZ+iAFx5!sy230GT6m)+iKu4t5o6wNv*VE1BRz?NG%H)WzbTvYkf_^e4Zv1Ov zARU3$hPS}pFv6#TQ&!wko0)eYdd~r809MO{zHz3(u`O)g9Sv?7!yyorSI996s4y@r zNCVA2pmDGa9yZ~BG(AoS101w`9jy@%-xqn zQ`(Jj92v7j9`~h4vwI?0iKif*w^-76vdecA9Uh})114|1E6h$;qVKa$wuN^=n5_@~ z3t%G59Msxa@8$Hu5@TN#m|UY193>LRd7q+5nU&JeYo9f&*RB3b;BdgY}nPmK~5+i_@%2s2;8Ro zznv1BQ$^)_$Wvmkz+a?xtJTOUF&gu-B@dYA?~61T6@wwYEZJy6zhI+KK^CuYqw;8^ z8KE9PtzPb3Cb1e%clk|X($r^=!)J2}9JLi?VxV-&$~;+OYFc8V*yh&`x4q zsPBe)g!CANvn5DjMh>TTL@qtWm0dyu`gZXFYK+1cb2|UPKamfUv+|?; zNw0G5kH=Cy7U^@2osygX?jXdv3;42NZ~=ZvF{VXvkN`3ku19}v6qh9OxduLnXg(fgI+0_ zGhv2`fi06L3_*J+=%wzqh!$;7kIArMeCto9J**=uT3j9N#Dgxrh#Wq#6rzGUr@Ig; znbsV#3#DIl*wYkyD|affcNJ<@E4et$L$wiw=Vsb!LIHiW0;NL(@}5@li%T`gU+(5V zf%)O0j~}^-tSI{mRZZWs0-*gPvVSOWLgeFRi1a)F?_N)2qFg6dh+%TM+TH0RyN#{j zT5DQEx@_-Bms>xM6==>oNm;05AcXzTSddZEY8d6{5mA&-5u9*D@u(sjWPci^&ASb^ zSs0;HX-wmI!zuuI^YQ+G2cX~nLILKjC*SnPQJ{Jq>GvZ|mR$6#HvTJ8%b}$7>#~oX zj7!n|=0+dy6cO*ih0lmFz^=4^wPgOhn(pjyM^vqL62auTM2>xeOWx(GZA6$WBCIET z%UvgPgb`(fDz>5+W_Q}7E7RyQ6v;4ov*Jlld{cJ6qm8+aGZV6V=LZ-S6GcH(dy7Ig zkmJrVcg5&41XJHea@YUrAoveJx9c_O%WtnBYoy*ez$K|Avi@vT`~}U*e?yJE=V_N| zm>U(Hkm?lTpQpcMhZUUt`AvrTIp+jf@K`qBlphX-q{}u}IO9=_+*w;vmA76x!`|RI zU-ZFapy6I$79YEFKYr9pBrXwUr~#a@ZBF+Y(!dFw^#+LPmjgUN7GS7)-c zX)cpZK---YklV$;PJ57KeL7maz%JQAjU0*=&$O?>r*mxz4fU14+mQ`4d^-h1U!1&% zATSz#z^_`+{tpZd;TP}xeL-1aDZJ0qi-ryk^w7I2t1#h2JP=Xkya}fPW=*vPG6j}$ z+`A`O%bHrSYulUo^52@^bhR=pbivx*2W5ra>Pl&g7eToTNe(85cLxT~Ta5(tEK~MF zQ}@lFJAA@X^%+bc!MR^-98i$L>NBX;7@dR%cFxXczQ)B$uX#;@C53LQC{Ngn=edp9 zj9(9mFtaq6qg|M#_*LZ@OHI-V_7J*lE?ot8`zhw~s?|;G)XnhPSsNQLp{PYZDk&Nq)J=!JmVMqHuy6OL>Jm{Ti9} zIp|S6`%ta7E=P8nhwPJIrKrwfqS6eh_8br~%Krm(Tnf`V#Aj-}V%(S0bwrL-C1t(s z>!>VXPAxM?y}~aCxsn;i7J)0zx+nLK!oFP(fP2$lDUCiOB|?@G0Pm z6kHZ)CEf3q1c@%&KTcEyRiGgIRhUO!R$|bQ$cJ09FZ6Pv`hVlwSlYP~x%3RbB{JB@ zXy8i;{$|EvR`S*h$(3}yAU;4)$<`SOqL)gp&aWd^iP?OU5vn^KRIhjv(gWfASnhOe zND94(o;4~W=mA9L#=Zviu+K;$r-Q!{**Z2+B1oVqogg%^f9kV0QA1l@8Vf`LUNk&CAEFpy38==9iJ-@Y4@iz=g z#DWRFK&(+Q6lYEl_8Xx}ZDf#AJNv~s&%T+}b1n#}!1_ovpP;e?sOYWj)IX8yTsIe? z*W=sjT%7_vT!Z#$&#>j&#W^ms{G^FMqsyH6(gFB`^* zQ859SLWE2)LN}dEew-;>+k9v2$5KkFM%Zpf#kE+Y0npf3l|*io$TM;z@)jIy#nymW zw?E0D?ZBG#GBV}Q3!L9U8R;h-*=<^*N0*9Xqh7@hvL#>= z;X$S9IhB zu?Ep&+l9_X#aM6&qWi|Kk?0Q)9lL;^o045#TT31m$5fU?8%)Z_9b6zh{Rrs*jOiimiNae zGA#1N0+Q5SgJX1)vpr5xDzKnd*E$8NmCG}+s@HyVsI14R``eF<6NrG$90;8fTTS!pp zi*=RQArgB8m=3TZUue|*SWD_4{)TXAr?oi zZWn#jd}b_DVjGdcsMwDI4$#wMdtqnbq%$I8JNa4u0X~s(My!>9zoUX(V~t~2-5m%z z3su}GTw2$e6dH#q6S9oJnF2@UVz7z@U#3bmGknL|9m#-Iu-m& zY$f?Ed^Cd2rTB;bM9Zt@8=;50u)vRTjtLRRm*dDLsA5z!D5iPt>R3+^O2;9SQE@V` z0oa8jW38mT81{cU&G?7%un6lbElV%Nu!K2%?&(;0#cC=#_0}`w(+8`1-l+*o7UR`F zRJ}xxEIxb5)MOiEZYVw;VMRWURNRxurG8wh*mUINEZl=V8u$0UJ(gp=Xq%E3!XQd$ zEJA)=XmDqf+OV=f%mPeSz%TZgY5OUV`WxXVaZFFj?`}3_8=+Hxt5LyIlF(8|;kG<* z<#z}vQ^pB{AlR9G2Wo%2V6lb*Y8NaZw^C8qfbC8#ps*Qj!(JYYE@C93s~%C#Etu3x z*-j^ZIU}&hcMQHz?L=0~h{lSyulp47`!Lb>(2)rGLPTz$N%Ypd0U<~$IVXf}$0)ACrKz;f3QKX5#(2b`zSB_B zE;2%n5n2dFGAh=9fvK&3L5K;U?>`~P^lD3CyERrQ-EcXSCr7*yK1qG~jc_9l?IJGQ z2v1jEIao7QU!~Y#0MQ58QuejdCwDU_h#X*j52BejU=CnZbjMglgoy|T5#U>+B0VS0 ztF6wI&vGPRj!*P_Hyy{k&glAo)Y)B?lpqo?mz6`M>30!isoBy_(e9l-bh_bKV zB15}_6EYATZykjVCDF12`}gnPv+m^8r$kLe7QTf^ne9 z01e_b!H@y*%x&pd&cJSA1kI*&JdMc@8`jB4fMTzlXMxnX7D)6-S|DP3M85nP>zzBC zsaP@nzqG2yd0MOFVF>6>Nd9hA@n+LCxK{=>keawz23;!+5AiV_y)UcBwPYi4s1U4$!i!xp~ErfmfnsFNcm$HmazCZfQ3 zU=5u%nDbH4y0ih9kF*hq8Onl+bPuqYAHbEksqqY%$?XSfM#VemDw)VV38e!tbQ$)$ z8=;+Od!%8{rjr{YE5Ii2%TAw;fSI(i(1$dv*>q0W8%Lv*!ct_#fq#)NC?@!tU>Nx< zRs?bO(8EXefo{DZowd zgE(pDCRTlHL^wwz~Hi@AjN5wnN5Zfei3n4 zP1sSGEu?-ABdf5ze9q-3_g4iwyv>nWoer*B23|prue+Z4dQm! zV<2A-NR~?c!>79enw{Y{-TM3tlzNqyBJemmMM(#!4SdV8$9Q;|C@jJjiq=s}>Xr$2 zx`yc8KIcXNa@Rx`ti~BL9szE;F6lS}YI_!j2RB_8ZzbFFRU;i_JUY&~2O$4v4jp?N zIP})Bw~j9Xi%ytW*Z(M=lL4U)BWfy)D7`t=9|AGma1wSwN0D6~hJ!x|czH{}WC#G? zmbUY=u14EWGwX`SLr|A`2^ou4HZBJHE=y6xrV^A3l_I& zoRied`&z;r!kC!fk8+cM|Jo8T3=#rgmI{1lOTcc)CnsZk!=W&Sz=ZiHPp%{(a&=2( zy956{EIuXyk2nnQ>{Q^PhXKAL1vqJZOdRWuk6u1!!2bl;)90L!0$5#inCf@pbuq1* z^8wmoH{;Q03;-t^luM$+A6qIL(t*8Kg|d@?Pj3kr5`(}ur2w}~haNts&;JB?p3iCb zKLO_X9Q#{H#Ioj>zkndcV1zRr{}EC2a_ktH&Rv8j#*B(N7}bcaf5`~{Vq*$<&{66!q?D#4yCEUXqa9sN;UD)^p@1H-zsl6P3{jYW z^F$6}yT`^!>>Y@Wjpk?h_4q_eUTlh_T&{xW#VQyK`w(;r@elVd8=>plQNDM_EG8S~ z5+0JcA9Jk#UGQR$dfaR+sdp{by7FfsxMXGAokiK--G!N5H8eX2Ki?M{E`G)8|ByT- zs*~pWVolj zZG+fYSALfJR6&DdQzhj`6a>JFVsjY`&tyOXyJ?L&dfAt#7$8-g_4W{HWcTkT9FzfAZgw6q3_}SkG_e`Lv%L=N4;pbLk&l36$3j!f zeEDRI6vWYCHv*l3&nP}mRG$_ox+c{EedaI}U7Z4))O`WZuLpDLShOvvpZ28)U%j6S zQ<$Q9M9Ta~fZh4gKTUVeAdc z)*m+kvi%C+py{`7K?LYGNY)fH#t46l9`OvN4fsBsq4YCMPtQ>L55AKKy|pDmV*rtx zUrqr|LVQwhSKFWMb0z~Yfj3a@n8MLG*?f?gB;~+03m-y6_ zab@1J>33&vGWhe!J;@;`J!!)>*GjF0xv9-z;jvU;OOnCD$)#b0DzJM2mS|h7H#)jy zn&d7>ItzeWV>>8RT4KNr^dY&Z#PEGMRL<5=>5_`d(T6~Vww}(ZNz6C?HkbL}kXi;n z4d+&eCf|IGe9`|xzN=8GN4{Yxs8nxgN#MA4WV?SS<6Zs!VSqoyekZ+=)qhIn!g$BL zemEI2&Xc4!`kbkU1H5I5OSXW|8Jq%GeNJ-Kalx1kKwYoA3H|5kl`S_X>y^e^pjRG% zS*bVbkUcjgm9BP6q=H7GFxm*ZD#t_@KxvK%nTxBGb}1=CFm_>uJm`x(Bc^e;FJRt` zq^VVYGCq-H`C?;eD23Xo@JwH9ikM={KZnZw4gU_=lDp4$iHTWEFB;`$b1*hijIdhd zGb#eK`OM~t0le+f95BM;5F0xOwK)s;wVPjm!&gF9B~hwmoYD+;-+wE_W1VC* z@g}L@d{sfu*nBa8FGD11>J@uKOyJ+Qq6K{z$Fp&UfAPa2KNwa_jEVVlveGn+4t&6CJ23g(iSEmq-!%vXzWa0mr>9`u4Ie>&m&(DEm6q&tq4 z*YXNnNR{lhG&JwzWpGs_dnf%tniIHX^0S{_!Lew_b>E(i(HZnw#BQU)qQkLP=aTB} zEm?@Jk$I--q}yX}3rGHK3y3w9HhuZS_ylS1h^-bAzf=Xs#Xccm_>TxWh&(9cCNb|b3RJfcElAn24U1}(-5GVrt*<+tNMD!al6^;KV28sW8@fy+kl zj^jr?vQRbz6>tU>?yJ?2o?HhhLLxXPv5vClxAw;hq-`;jhs!F}OrY(q*yl3P79y4$ zxgY*QR`?2Foxk$y7wpP)BK-Ofk(iDzovcZNld@ORuI`OmoLwq8oTP$BvVk&q}>|zGPce0unRa}SIXW|Ta3PGb{D!2^!j*Y!1 zkuwxb``9}15cFcc2`a9CY>AS82*&QA2r3_?QZ9^bkd%v6a6l}?)Ns?M$jlP-wpBMC zW`I_v5Td%qHBh|SS<+M_Re%4|QpxT-;9Qg(+e=nj0Ibm9BVxm)!H*#r8^X`>2UW_E zvC)!pzY1o?#tJFULeROD&>gWOz!`%tT{Hgxw)Hggg=4U&Ugz`y2xLR#v%DIL1#Mf! z6@%RoG~DOh>`pCnjL-u|sF^Po8(zg=(aDySJ+Y<;_4k6v)J^56-+2xa)RRWrMSdT& zKI8n7Vk0G$Jl?ZrFfVLY=u`T}{vcwf8mmAD&4w-phkMGP2flIPO~Pq>bVB$H zeW)4g;OI)f;oOC957Q5lF^$W#OFS4lu1gQCj^2Q@@i2G>-~Y2ZqP9#{N1a9T&I7_& zJ_}6Jl+$Z40+N+eW^ldNg5Juj&iQ__&)Wze2ch91=fn4*$P@UROB%d|_TN;Va|dh& z9qMFO>?y|4oO4kp6ak8k6f8Bq?Q$0GCTRt#>YPYRoN$hI+v>^rp&R0j0SSBN6#4@%eZ48HP(^_m?Ty+}hHJcL(vW07el{qKGT0 zeJhT}e?-hiK`*Bk6g*5pi&B7-8gPrZ)C7zE6j-KSC!a54;NSr@A9sp)Fe8&;;wHd! zz$6jf>PqVjS_a6f1w2wI&tUwk1yjC*@#+8ECAB-;c>d zjq`h9l`nBFN???=$7#y`EV>W2=)c5T)t10SMhEUffYvzK|; z-Y7=R<*d4_`C06mr0Ekr@GsH`&$}5t_Zv+rQ{^C+%#SpXTct@h2K}r znG~BM6VblFABM){*kT65-+qKPouT6X6zfO}Db!H~d&df7V`@D?{He{})l#!vc9sVoZ2L0#yxw|%k2GVQ#SbyuoLZa(`K8)1;n-DlmIbY05E zm=@dG zU(6@#Ja3^QAX4Frr3=rEWyR0opC{?C$sxrsyWvK6-ai5J{(Zpl(4e=tD>j_!(bL-_3YJ; zw1gowHFV`)Q-P3Xia|vFIUlnr-j9zxi(fCcGq1jRuE)D-2uj1$?ub|D}se{Z@B3B5uGEh1sWG=br6FZ5U?0{JIIxx({aeW?9oS z`Lg{jw0q=56kLW-yv+!82i{hP{%8g6Pf&Q`u8<3y<#48PJ#}Gr@Y;o$!Tb1%Um40Z zQ99PEykktui8FKeE!ttsco3P)qHROw4M7Yl$J{A%VOrpAZ1~Dsg9G*UWdm>?MG}jd zn7uGN@GRoRcm$ArZam%1oEeybbQ0tkOmq?t7<`4Aa8g@;z~C9S61Q@qn&aVvNBinA zy+Nez4+v<7xAKN1&h`8Y-&SWHBD3VV=BOW!zSQM^G%+u-OYJL{do=?Yyi@Zy-nzMY zq9M0#Zpp(8_=fB(>xP7MIDwZ{JDR@`v1CckK#@z{#Uunk6d38+V@iZdb7H*5k~ zXBf~%r-X58-WQ39bj7`*o6zm{_Q`TzN4Ot5rukSLH$roghi}D&z*dGYH0^o62@d99@Bk+qx zrVv3urfw{&o@i?_#<>=SE6ov^K_bY-#As7vhO~~abzHp9&4Z)+r3D>*fq&~&Ezqz( zfmONZ{l2S&+uwJ!okh52O_(Z^krmK+0Jg@JGrOeu|ZHeYzrdDV16#1 zgH=i)ZSB!$EH)em`st0`su9P!DA61JLhiFZWwk6_Zl7?^sg)M;ZUgw#?u3@F&)7A( zb!NkdM`YG#tVOhMqaW(6w2(J3w8Ax#;hOmk_*B;*SYhH94bIh3%;k8J8|Sm^Wgr6g zM2D|Z?eIg8GSPjk1`T3F$$Z`p5G{HZT$)IMU`7gW0Epsc_|%m7JR=`1T6k~*54cB* z7DeRD`@zXP#va8LWpc9p;A9?F=cP9tcz!)8nV8P!;q)jj%+%451RfQS7QJ-u~idNVBo`KNX^AHNdf!WagQ-(K? zj!^ie^$hXo3qsrY6Buc{DR)-jHoUh8Y&Lfdc646D0s!p+yk?e}|Cteb9${QI4r6hr zK6LeKXBq}#=z=a&20^|l1V4l$&F=UNuvFn`-^P<3#gxP9RVow-j4v?@Ii6tj+=9Ja zx@m?U`AZ&d;NlHIjmO~Pv%Yc#(8NMB%%~xj{J_jPGPoTVMgzba(#aZ?V~x*Ml|s$) zrV9J3iMY&8@=mC&vN}vv6b@Yi$s)2&S%NfqjzCo2fyQ=dKQCIt`_$ipP-fkbvIlt5 zcw?= zFkW1=Q_YI6)6?ZiBKuAjE#>01OeuOG&$(05(nLVf_oHa*nw-d-ZYY~KpmoP@z_14Q zHg~meGq^x40a#Ks8pr<1M4>_fK2Cldz^y_d&VfLld#43Xo#57rH^H?=MIUUkL^v~W z1pXftJlgHq`Ge)0th}d&IT>F&vR}OrbFz&7=vOkDcMXFi&61=+UeXW|0fA1;b+05b zhPmo9I3be!!!@9h0>l^vG|~ear2+j>fEc5IMteZlDK+R2PY`C_29t?HEc%F%!3nZCE=lXg1Vez5Ue3(Y?Q9`jE&*{@@F~^K`bb}fNP4_ z7wlGKw!2*bodjl(6+p5QU+lI$$ zYyenVeMVx?cw_8@8grZ9tntt1>#VL^sL$}mO?}4Pfr^c#ISo5U*{U;3}8oj zfg^zG3#aj5kGnEgy|f0I`&YR0>P3{3bk3U)Y4k_Pxm6w(HJgsX?s)lt)psV;soB(y z=Z)WoW;2^`NARC8ua)DLPjPQ~uUVp5B5(8t2O8lAMgRJNI`!{VhT7&ZgolUjVqt}u z2*FW#g9Pl+5*R6gY?X461hQ11j|6-waE=5zsz8necB%r7mB2O?I6?xyslZU~uXf9e zPB=2ayZil1_#_gZK{_5hMn9QbjY_=xV=Pc3aUaS;VrRGNz-i1m%}xAV5`*oOl6{M8 zZT|yv&?=>T)0EnfZZpgVHfhxmnlzQ@6srSeI2|9g45g>7R2P6w>@WAMwlTt8Fq5zf z$!c_QTm#P~+lx}9y)y?UW|+ag%CtCV3g%~~4yDg4|4gWrjdPbzBdInnqa4D;yx|{c zl=UJb)3lqLay0)Jt)8}SJ?~8h50buCTk8u`h#^ij?H~7|7u*N3BdW_nPvagB{f+G2DYTh-NurTI z=9B4YbBVmd{rVJe7MiY;WwDlHIdTwY4`9p(a($DJG9Sn})|jyXgWH-z<0moVBk$%S z%zMrKlc^}hfR`TX`Zpvk@c82-LCv{U_H%bQ;BMr{Naft&DObbT4)!X&q-D324l@X*l6_1sp@E&!E9X zW>f^pTZ5;@Y8sC&sWNNu?){__%#}kTADj32+eJPK?nGR4GNL0tPW}%nY0JDu_&=b} zJYjhd&cT@$o$DHgB>41V)K2>Uh+n4$fR?<2orf)BKwugF;bzL#9M7=wU(2=z7FZ*C z=QTwXNq6Nnw2`mCWlGvcqU}Kiy|#BWiLvE;_OgfyfkT&Mx}$`T#ktQ|2Pc9xCiafp zU*N2Sk7oH}5Kzk~*drTxbND)FhUIgTgjVQX#92{tE3VaSZ5C2@`2yWsr9dApNlu5Z zs}$Cuy`EBl!x+_=g`%JWxhj+Y`2?_^9O7yaBh;C|N{blbFw6{xmn%{KS{=mRfDj*w zy>K))XDq|H0i7DvDAluOKJ2AvA0$=8mY`(+gsj~w1i?l5J3J--=UV=#o4*(G>vas* zgzarEOgq-mmZkCm9wR&v9qL{IEf^I-}*i#drxN(AV&IQNy zF|f?$2@$}+e7lADyQ%zPFMk2@TZ6NCL8s5UqP^V-?l5a`N9?9PI$owTP;xG zB4n@)0q*Dmcd~yNOyI6ae%32*XHP_3k*h!k=h$lj;;lX8kpGDEn^I11x10j|1u3UH z$zTochT>lJikrjY3SFARtXhN?!ojL+O2Zt3F)mFs>xR&y^AJS|S~(bZ(YKOHM^oK zQ4QJb1|Vtom)bP4-|nG)I#M{0%Ft%XI)#mYAjxGgdvHPo4n7a`#`V|U#NxOKuuI^T z0l`3=OnU}=)u{Cgulzc|OTRgP1kgeJ@q{3jV9E+Qcyy+G3e7@!!j$)+EF{L6@@fDh z?RmEFTBd2-c!5fjd;=t{!0pf8_9?7Hq5CPW14R*aL3fZHFIA9GXiYcO)#Um*uRXi- zAo}@Ki$0Xr!9A6P^?LNrL2Z301^uU(>w#Rb6g%L-maSYEq8 z{%w-#%#@WF-KgFNmTf^coxOP)q}D)xtfk?SzrE%iQH}Gq51g2eggP26db3)^ot%@>~NTvc%wr z+r?XcY<)X~(ZJq}t{+%{|32q3l&#+DfE7r)uULdYJp4-+OK?XO5f z-mW&nxt>XQD8xSM2E<%rkY%-O4352x>W+>UWfIEO)=+iUz#MBtt}-`0!?9o|V8yTu zubEH(C3rRN;fZXvx8Ah>zP4nGXwLPQ(= ze6Z&*%|*Ev;8p>A=}4}oAK*RM;TUIx&v#cwqJ!ycHP1vZGMww)@4PSFu*Y2&)3V) z2mB;e;?6aHu8L{DF`4G$njL;t$PGk7b42S=Ku)}{k z@_O$q>x#lV!#$$|=oFd_0CHx3VqxqMKtBf_RnOaJkRc-?e&%z*zz8jcCe7QO=e{&k zAEx6(MoXBU1og#^{>Q|TPx3xbQ*@P-n`$m`S>!lKxtl2Lf?8bc;E6HRXZ0T(iJf1guCF5F2enFfbp_cy)VP`A?R%e+B zZovz|n68;JErK|zrZKDy27P|}GV-#ki-DL9vqPKTMqHRYB7Y(^mpBuZbR3-`9Uq2t z+;kG~Hx=K+_2qEQ5BDdx#4m|?E1p!-(9;F^(FE8JF|GsXI^(<30Pr~g_!PFVh|`ti z?K~Hpsr(Rn*5R5QcpX`lZp5rad|@QSP}HaknDruyPV?>J z_Tv7SgoR&4-s-WOt3L%Jms(;DOA`sjk>ostpqmS08Jm(#^i&@xB%|UV=sZM}A>v{6 zS&q+;`Yc7^e?ea7XuztDP@5Cxj{+sG{W2NlZ-IfwRV#B`I0d&oCZ0A}efJ}ql8`{+av-6cNvdl5yK6`X!n#>;I0w?;j)C1er7PwY52CTO ze|xz}80K0n+)Qp61Ke?Jlygx5&SpV|Vj>`B?txRW4GpnzfugaA-W&e`TttM8-d`(l zXvAy$dw{?SwYCJFx=#HG9Z(|*BH3gS=`mbTH9@S3+c=MIc8_ols7j1CE0e6R=4fynT1J%PA-K0bdAieSnR z@G~8FK*@d+ee#yXh;64gdfdec3!~u_7Sx^X5ja;*wYQ>_%V;3|*L2s$rD2vm6qW1c z{iY#Sit;!{x)MQA0Oq?a-4~hS$D0y#E(!G_b2^bgV!Z-;$b8m^r8;aHTY~UBI%1>k z-(Xr=gGK*J2d;wsjxY@Qi$FZM09o8)V(w;p+fM>TQUC50+tMQ|(`64aZdd|C#@#rb z$(?xbyl;o0)JrCp9!W3mwg3sUX}gR=8}Q9BXy<&%&SVus17=a4VAn*s7j-E_q$A7>QamlK z!HLo#BYkB_51Q|i(S48xs#}5Qoq_;GhBALlVFO57;V4-Za87PY7D82;E-6HQX)k`A zk8z?vZ|?`1v}*4HzC*wP0F0}%d{_W_E?u2{ffYO!KLfdRn98EWsCdhTxiJN1tp@YB z3v&T$@0x;USVQwp03Keh+z%h&d@l7tkj&?<5a;p~g||&}ly!D1ehC$o;vSK7Ym!hD}8xtbvae{!3mt6x| z$5#NIbRr}=jI$x<{cUoxChQA*3w<>MgZ5q+LHG;-jhB(=+=j5;4>}s>u?1sb4JRp- zr=iA_LUCS%%U{pjP3xdvJ1Yd|u#gHn8BnLwS^~&Nw!A!=iKs!p*+3Lks3^y z3v(vxJT|4y1GgloHwu7cl856g8C7Yk z^BdG^VBj{qQznY>n@-7S>a}l1nk81YyD{ssj-tl~=Roe!p^OkWW^EUbRHV)bJ&6IU z>;Sw{5)o}{Jtk^nKz3gV8fF<_qW&Y4mUSLu4i}^&tkX=_AKg!<-H?R%vWtk6c)L8C z`{z-RLbAfA8t3q6A)20$?NfnlT(%FPI*7}5g@$3aK`d8LzGbs|=H~6T*PaNMnPIZ4~*$9lFoZa`8VuJw%_@~A==j}rG5HPt4Aic=Xj7<$51E3 z+yvMQDPTG=?oEJ|0?c(7B<;U0+nI%)iG=-76!T`n8j8;8h|kDl?fE~N#s662US~Z< z2r^`}sI)$Vn_-a;J3&kFA3q`WGgJLksh`>M6J~+xi`ItviW`bzd#X6GQ1EG&f#K`J z*#Kr8w8<+tne0XUXnwp##Ukm<*qEoz-4rdb1nc>80hXSz0RJP{O1;Z|blrgitp%LZ z;*sc3t7rj9%iL^|6_(bb%PWw``p$rxNySEs7ZH@+K>W%&4_vIsm1VyV@|sNrMmQhP z(cm}BABA9++cLOyWGEwxwwgr?3RnQ<$WnmRiJFF?riE$qiDdvgWz|>oT_OHH(AeI3 zu}t4r8KJ8o!^w|lAxq@5$i7H86Qm)`>D5Bg~OV(`Qh=%>#~M2QtkIfy8EfE4%f50 zuoL-m6flpQPe@s;&2Z-qLs$jGLM)u|+_=Ji#Y8;5O%3Xip|<0hhBewOgv`R55rWD( zfSH_GD7#>c@J|wujWD2ByG-39vIxbFAxUAqeklD@^ z^!Vu^wK5TdY3MH<@Q8hImNDaPU|m z;r`pPskpzGoO=UuqhG@{s_jPTS&bf~L}q)a+PghGtuduKqD?0x$n*%R;)1oSyTAke zlB*hmlC3vHwkEZ9k%sS37UE9we975cYlua@5Q6zDwXE&5tnd999St?}-7&fjbLzlS z$SC8KO3mRxDYdaAp^wcSyKscKY$pc+3Gk%qjF&hap2qV0x$^xZ>Wdc9!vJk8Jm2pF zaQYY=n9efsXzN2;;Ms}3le-Azuz#}g%L23dpQm0Z+yLaIt>E|&3O1Xto`bzn&;aH> zyuvpgAJZq9`!2(^L71A095EhVk5bHi7vfAPlBe6wYhJi5qcH1PCv)oH_iwx!6)|<84vfN zD%*D}#2li`ePe^O%nT}oG}&)y?wgGF=8$4Md=C&a_XTmk8iG~s_%I%NANl9yfCQ8h zZK05zZB#1z@El(k$@io*5U+{(q=GB3QA4Wy3tq?oYV&eXnJJqu)7U~%mEL6*_W)W3 z^%mh3U{(hLqO-83#Di@Gc7vpn#KV!x8kAc=DluOjs85POU}1A|6;kU4__OCdjRGPA zGO_<1A5K2d1YK@2LcBEAc$oH&x$g!eTt)mds9MuZ+46}WDpUMW`Qk_DV`gwG7D9A) z;fFdEKUA6cp|ZpeH6wng6Vsgfgj_NA4Z(S0q3Fd%XpMXfGQyBysG1v7)0`&(T~)SE zy+FgsK-s=DA{y!?&{MDl4-khVU%zZcz5}#D4kF(pl1lPDO_!ubz6zJ26!~67D#(|X zLcV<%zSu9gZ+zfvbKitO2Xo(DMz|Old9D2n051KU5AiMhemHci423So$-(GumsFyA zX$rcV(2zuL2f-^qH!}s@O9dNRAZboNe7pQB`!DSC>F404i>i31h6J)hOL)@&kbCVPQ#UTs%y3KFt{&4=3}g%6$P-#eQ-*)ae$77fyFNxnaG(*zU&xbTk0Kn=kqj9j#VW>EB-Zn_8=p_g8S3H2X z#)lJokTZWJWPxlJFdn)d5z$$>3)Hyp);IuiQJ00^YqD@FELtk9_(Rv$#Sl-dqV?$9 zg1$wWMzkG@vx>8~^V|PyBg|NNBB2N6j&xTyO0f~#MCHmZ zf}n2{IOOhagl=YwM&|a8h6GvS$hHuiVh#KP0hMLjZK)e@pw(d6f!uD(vn)(;2*Qmv zWgwTtcF<#gWNe|#)nLe-%9>CoinRA0CG6ijvZ+2}F35*s;Ivxce%aryf{t88v?8#Q zvOu3Ca?Jb@BB!KE4$FAvcLmxcM=ZUFNr*so1!c8VqA!j#0+cIAnJ5AB5dtL= zpio5MDg+w)xpGlRyD4vteKr=!F!6Z@&CqH4zBcB@f(6)#{W;Xc?)V0?%=kbL9gl)J z3&;Uqz~?sz)#30WdB4LDe1jRt1GHZ3X)H<(06Sly7Zet1x7@SXCILixq##0z(b*5! zL=V^%@1Ps5#yY5u@kouEmS!p*B-XbV0eCS`RH&Z~)Scr}^5z^B=R}P3p7tc>N8WRh z7dZBGrl)wHv<&veE^wL$d~J#&O$YAe0&f`PmOSv#B?~HzM=Dh2dl`CwUG;YBrN><0 zNgiYQD-1~{FB5~;D%oj2i;0LAq?Jto*M|Frw z#~||A$GU~RodPpOgZbeI)%GU{e+ z;6xm~JEG3ljb|IK%BvieCJLj@ccWR;%3P7Q?pt%O|AF<_)cJg4R=E=j=sBOScv(;U zN0E73SWL%6F?GHPQby&FG*w3F-rfOY-M0V>eug3u4F2dA2*vNsPx978{(a>Yk&PoF zt8fCNWAwuFDhFa}-%3ufBb&LmePG18@AuSEwgkS1L_VS}y&Lv;n|ssi(n}urD0*+J z>RU@nO7{E^X3^rG&S16!G^(ovce9DKPhUAa*j z+j^vuU)<*;_bqk9ya#vZpq|J|bNlp#rGY=@t$`e6+=?R+?cP2SsWZQs9>Im=!EK*> zvwKBOpjF=P);}#Q4dNai9?_AlV+9MO-#0v;i499#(DhmNjtuC)+HR3e%9k@KP7k@y zig{6OmxVdOle|LusY1r!$9^8U!BcBiRi&g3U}~k83VeA#RoTuRpq*Q$fg6?jMCZ^e zYAjt3C)0h<8x%ocME`q_i(lqZmNGzaF7{PgF@?Vi0xz+c6@F=?S=$q}d-JV>`^UXK!0V>I=qAqVQu+yRm}^~S zJhw;nmOrwG{ndKfR&?11corD!*x~xCTW8L{8UH{sd9yUln6)DEku@wklDBLPPz#(1 zvS(o>Lx{E>F&KUSBF=4rb5gf1t3`BUL*jmtJd8)&Scale9u9M(8qn9bFvoaoC72_; zem<*@v{MyjNPcpRSKGH*ZO^2;Y=DmT##0){d*p)^jYr~IGCT#|`V-9E14Aa94huAR zy!llZub^L15M}r!X+*g_dzkik0^mCr;LHR7?jJ~`|LCT-*3%>FRyY~O=2z*`N^@_k zz!(hFK!0q02%L!C_W0E+e64T)fiJ~H~lZiXOZeN%gIG+rI3ykScH22~0LRv(W%IL}q;q$Wxp!~90 z=5q(B*n7s(W6fr)@x% zpCB!2zCF_1p4NJ0q{+S(O2XSg$nkfHV*g(tDD0IWYfJUl;1$Wa|H#Z#Qkl7O=E_T)u6bmtHW|W4bGX0~7{46<5AZIyI&ru9s&=nR58khwp2kw2Dc;YtN=c0DYP~6V zolFcPd(o3=YuGSjsU&{Vgb`uHN+-H*(JZtRtur_J%pcP7d$H!p^C#W_BHl@KqCm$I z9Fm%%>{QM*fIs~i++RW0k-f9V=WD$(SmvDz=*BcuZ_h_b&aG&LYIlBTHqWT&iI~Pm zNaytE{jD&1-=$C1lK;_(X^}VBehB{h@Gp>aQWJ)m5ee@?(0YUajYaRHbw@^rZ6K4q z%M2^N$!@*NSo){vyRuXj{S9C%zR7G|7g=rZg9Q-z37vN#%ot0O;I7GHM~p|4(em~$ zfJ-49utfYjZrg=;BYx{CGXRx29lcBF-_=O=kxu_21`@K z-Xk1ODQo3bv{2q0!d;OJ_XN(0rqv=Pn{o;MtCRw@2SI_8sA({HNQy?!s0+=N^ng>Lah5-2c6t>M1}Dg`up8<6(%Sq>?JHoUOn8&-f(DxnaV& zc*^%ef62tU3y<(QwU7q?W1GA((69;PrD69YGaKgVYi0l94$*PO((LG{R+Yv7G?ore zi)@6ZDBE62iUyYidRfIwT>TTbKWmZZbD0EJlGdcypOIo*(3zgM2GUu87M4bS3Ut%# zB1{tF`Kzs9b!z^N#?s<{LdBI%`=@V8Kj<%x#U}d?kbl5t#W$_M5IpHEgJhawh%7L~ z(_{!gc*d+9=W;_yRXqC^dIySH%nnt6?BkjJy?uIionEeeuBeq>S^N^IRayKZep)3F zZBd{%X#11rr%%{}bm4e(TWkdvr?$Iz5gPuIH2g(h;EFirCj)b)M1wWP(qS(~c41_L zBzA-wj*Az$)DT5bs;EI_(7@*G-kaK-(rGXGrYwjCg{Zsi_gDt*Tf@>UhaU4IugPLK z0+%M|7tdu>+0!Zf1BwX$R2IK}5Ji^YU|aDLr9U-3`2T^Aihxt`>*lt8E<05g)l4b! z2n$ZKxi<^arv?OQZv~fttFlRlzqH$w>#bl)VPvPO+!|lFO6X|H78a^P1&s#+(B4siyS6vABIG_-wqv zP7dt6L}(?fm_#T5V^;6q(O&-si(xKT7F8z`=sXZeq>x6R{~|}g^wpTUG;r#Idw9Vm z#(~_&vN5A$y(q_6I+4avK`WzzcgA8uWfg>TUdqfY`-X-)Wq_w`hSC&-sz6!x-+uZ1 zKw~y3=MvGbM2uNG+U@2zo)9{^{RPvjTizNC|No*7OQ+S~s+hkCPZZVY9oCT;Jml4L ztPHaI)3A4ARVy^o{Lgf|4tsKedluRt+;NV=zdL^H%|D~NhoQSgzr!KpK+nL@+eg_g zo9x!;8idb^hdF6n<@~`5UyP1K_$Y)a`at91Bq{|Xr=(KhfpQ$DgE=bZ7c}q`SO8*B7YRH&R?f5twS9{5Ltc(JHQq>{_wS z4 za+3>7ffLLkg!>J17_XV$#7QsgW&(W*Ag!4xa8g(S;a*LK^Cqxvc>>p-a1~mmDL_Jw zAK)=`Zq$HMdP#uZCs3gR65jp#NpWvvbFjS3#GE)fdirp(LX_#g7Sp>j{Z6KD$W1|}zwwMxC2zh3D- z33qyOr73VysYST`6cNznFncmnfTYqA0(}M`ty0g8pjUbU;a)o|oK$)o;UZe4DTPU; zKYkCOo0ALkxJ0jX4dDus;XFps;pP#peKMRk2z9u73AYnMRBNm^qII~-30Ip8=M4!R z?o7fxoebxVLme)SaH3ardtLnBemL)~Ftj{cebS@p8 z#aU*p|C%uewrMLAu)oZmS@4!wol7y}r$UU><1s$?&dlZm!E6gD__i3&HEOKS?3@<@ zB(8Ixk`*1^J=m^M?$w`=6=^V6cF*4*Sc@f-{0}C7hj%TKGrRTxam|J~Fvh~gM)~g> zPt@eEGoDxpjL&RXMSC#v=@pSW%wRi_-MmHbZcyA%lC+uZi*{nt?QUsm#5bmC#h8+3L!GEQFVb*qv?2-kOgg;&A*`7F#qBMxt z|4u`q{(9VmkA(`^QgsJPgS%T+f#CD@?AcDZ4i8kq0gLkmFKcj?^+0>vW|-O7fpozA zsiVYQeh13J1*$*5Nn&5e?*jpUWPjtw^%>01=GJG-cE5nHTHZkc-h7|l`BikyH=j|x z>1C`X+%oA7v$^;GW9{wZs;aWMaV}gG5<6H}SX53?X*wlkDXAsmH7zMMuf0k3>Qqyc z>Al*E6nZbhnIlDwHP%?^Xs=^w#n7>=P)NwEL8T&de2eOwa0<=wjmqcyUHhDS4`B2A zJkRIHAKY`+S$plZ*Is+=wby<#XRW~VbrssYzk@`iZG_oxB>8!=L~|B8$Xu_Km5YB6U@kRp#3m& zcBJi8^Bl6UOPj}K#gVqt%~^ckq?L|DXeiRw+nm7nwdO7Onf0zY7(XqQlt-lPJo8rO z{h~JSeo1?Q`99yD(n{;)J;!{8@AJ&p@S~MJ1oy;z7>^R#0UyVhpP`1eC=Y_w=FxeK zw56N9z?&AmlCV-kd?-$v69RI1!3Yr0pbgqvW&}Fs*ch@Rw;W6WHs3nQQr2N`J_F z0+067ctW|7%$dT|pC#Q;k%iBkAh4N4zKxHif8=969_^b|x}oMLs6L$7E$J3Xx{J-{ z1a=9L|H;Qv`a@-bhOgz2vY$W5PYE)m&X%=9`R=bk4i zQp{C+E5VY9BX$;3h+ZCN=1aMbA^v%MoO=Wg0j{7hC&>q{FOIbJH1FnH$;Uvmw*lnl z_j~gaDero~%<&?-5BS&@kM=+Dx*aQMcRg$J4FC2r_J>zf;Xq__ENOW z8`&PCvxquqPFqqQKo<)3SYl5BJkmDY>?&B}CI{DPSCWC01ehk|L!L!g`fzr&eTdz>q<};f^H?~ICDCFW_2?s;Kz|?%|Kd>+>64vbfj&pSGD$VRma36)SZN0OLCm$fRFsyXN!~1Z^O^6;+ZMdFU$=GNJ8`>}hOH;)y1aI)_YIESTKO&P7T@frK*Qzt zV$;CcR9bW{V3;2h-Yzn81@J8g95%6Lr%0?os^hrLx0jO=L^pUpX%-dKA(FY~*tx`wn z=4Arox;OJ0K9=5qM|P_N`BoAJ?>6@}MA|MfKNbDBSkmv4at}5CA+WQU{you|llk~J z>P!zjp#05KgxkiM-KB=! z0hU(!v*drJxf`t>mp=ez{>;Zxj>F82c(fnK6Xc$F1_YFXCWQ6nfXoWcY13$-T49s4 zDAx&_3pV0$?#+0F<3#jI0!r>D2Uh?ZX}iIEUosy?^o@KhJ)e)uS;2iIVZy~oI85?6 z5dd67fTBVvanXgDO>jvc(rd#2CDL}cX^X;eov^u?k8^j)hkMM!@}W`Q{$zHeI+RdO z_8Nd7&s)ta1>;R7&6T7t3G!`bp?r8+-flOi^R479CY=Y6vIle8j;F$0BMNgbN#yZy zF2`YW+A{cUx_rA@06hsPA)w?g5*h}m(~ouGrvwTrdN%3&ft=3Gl4M;anJ9HP0i+P{ ztd!++()lljOO8G1X8NgW(Om$U8GJ1Lf{%M)4ed|xggRk;Wk`Lk20$zABC3C~a6oX$ zC&ugX3(xBD}Ad!G6(vIS`=@;8J|(3`W;NeWh`+zd_b&1GrF^HqHYXB|c8&auajON8(7E-{_ezG&RK}D0Dp1NKE02 zFBwzFMmV9uyaQiazV*f@ob{xLP>jnoMrRoJr|H3FoZPPCro14o%4_D{>cKv&`Dh=( z$Yoib2uku-qJWayD|p7Dkmks*=`)k%^hl$i3D=?dvmd(;QGT5AV$B0e%Q+km;g-wO z@a1p(0=ZdtlTeeaYD@~9&Xrqj>7ny;w>|PXu;kp^%RLz3Z4Ayp&JcvPlcj7+4{svf zlKl@~Jm9OT6^M?Ao#W&g78AY)oZM{>pT=y<$L)w5o-*?rMdDnNcuqb)veRAN#qI0D z)`!TnZ@3xP^z8K=SabL^U%079aI5H9C)}rji#3)if^*}P!kP|pJJln%PmrM-`MGb4 zq;qbxiP!%%`oAW@2F%&L2;3OMQ*wPpiMr27#CD&OUsx@2RMc!x1*<7bc*r1D@==(l zfnxDP7bf5aKH!xHqIH4j?e|Z^!3QBU2t)oudb&#Lw|)dS#ueNa@hB%paOV8}mTQ#! z)Qu$j0mV})PRUYFSfF@5Sx}@B{&e2W&bi?+;xk?1Pk=b@Vy*M%&PaLq8Y4eVd)tqD ztPUOtS@@qGn*8uH_&q_3)|2+IVzB*`$|WQGoROby_y@CTEpQ5|a$u$QL0rI{-$HR% zX;vd(b80CuiEvf89J2WK6qHoK2u?9S>)SLW`4KgN^j|K%zpQ6nJV~!i)sF zH-#7D=dn)wEc_e^+h{_tuf>tfOk})nxIe-E+6xE0aDv?c5Y7ygEicB5{#F@063!;F zv=N6oDo@oK3p|J!3_~i6%iwunR|hK{=qc9#9U{09KaLKZj8Yhb&>RX-nb{SR2~Il5 zMjk+n)y_W13$>Fw=;1R_GgBi&ryU9Xm^))Y_)}or19JFi{R>FBgC5z2a=CK8o2)RT z5Z71UH;mvhLY|IhJI9W-C5G}IJ`pww?Yb=`e4MkWSJeX-0S~b*`Ro_RE|-^~SjBoh z!?necO$>>`d|{o`n&SToxEP(N3kE-c?*Tkg9Y>b_F1QK<3+@NdH%GpfCC6<^Ap|$! zXCb zYq-c@^DZn2Nc}uoeZOrKr6CZTjOBOwNs&XR&B`!>>DcPf{pI1IR1+kRY~F#zn<{p! z8eBXc8`(WtFZ$US#`rBRlGbZ@kM!ptcYMxQ2>ar$XWTAb^fSZhQ!8>C%8Qz3e5;2y zw4_pRhZJs@(S&e3l>>s1ox2v#7Dy^=#`aO1p&@hE9T3=`0zt<$c(U#QwVjE?Wr59B z8>$GK9EKagMty(^O4kifBk8)~vg2AGht;aV%{VP@cm~1xI5^WKcrbc0?yQflyWd8x_w3TVRE`>4AD{8dx!c_2A}BWa^L~P&Zr(YFwU%4!XB- zdAgp5Ow(H)6@6GrDcTQ$kP@>#BCTbo5#E5AgKgS^Y8;jKyBhmNWEt0IPyd+4AbW5} z(zs0WN!`S+pBHMIGwL1~Gksm3KPT9n(;Xte3F#zs1Gbok-ysvjF^j8id%JfhCN`73gQ#)DpIf^b9JovwpBxfO|^=F`>ofb9D z+zgGGM$jyPL?DWNo6+ORS)lq{VM?V+y@8D%3Qt7;=MDQM7}^u5;Q z&c1e(N0rYK2#OOglQ~~}%Kmq{e!Df-((3pj^`a&v6*p5@9V+(|D zyR{1E;n`zVx@(xOzTv3p_F$-p%cwbA17H9@3Rvg4Bt|V8v)G5r6i#ZFJK(l#X z04R)LCbt4+qjM#o9|02x_z(c4B#EG?l;kCZpHaiq0~n*&{N(X2^y*L_57rW-ai`{<|(UDQ!TT?JG&j(F7x8O9Hgd#Q_i5^yQp zKOY@^2+*MftZ+| zEcxEzQqal#!1l}!aEbhknKVj=amPr@I91vvD>&Y*c{l1QZZZ ztpJ}BFqD853h)U5{RnstfDYW;s#0WB%^(o0%Q{K zEdjij9l3NP;4=b7D}axHS^@?s!2b6Dc#D9u0Qk+;`z_E!6lFwhQ_b`%rkzE=_X^NJ zz*GXhRDg8^1PQ1I;3y4@hkAm~N|$_J;8M~&Hu5MHbGbtQyNiB!y+WtmD8DRb8_~lm z6D4{iK^+-MwC`pOmr5n5*k}L0kO;XX?jwn2v|7nA#)$O_ZXiMVZg%m;5N~xSyqH0~ z(nah|#J{+R@rHS=A~?jwJNOas{@4jGMzD{I_%9-kP>Ag;w3Vz#_H;2{AZF%KFk?g$ zUDOAO`k(z$#{KZ*tUC$V3IJATLlm@Yu~gpzL3C&&kdlfT>`Er|_~O^YpMbDnSre>j zn5d(plnGpqUuFa|^n?Ad$q8{BY(g=DnR;NQk!Vct`vNO_1S^vYR~{d(v=4$Z)dxKm zmTbEngX4R#ym9vQ_DT`+y`BdHNGraVeaz8I6zis^1DPe-MZ@7K(O5WGZi$}52}LZ? zDB#+UcR*}}*W)6F9mG?Jcn1(Y@njj#V0}DRB&8YCGL8Esa^M}zI8=PwtlyK4vodNU zo^yZFA}>I;7-Y6&(Z3yvovFMn4y&T0z441t)VwGV)VOgd&QpH}Z!?>Q`qlX(Lyv^F zb{vkHtrTXnZ;Os2CQ;{sM(aZ41^IgAFkmz0>?bEO+y{yY))VUl#VBZmhQuzj=}#tc zH~nn*n^-*_55hU)IWNT-9$gs;YLx75{Mv(%*un3}YZ`bx$}kly@5MnJ&KFmfi{n+N z2O8`#Als4NYNYB=_FPpkFQ?ep*oNhfl#~c;NzaM{J8jS>Yl*wkVO|7mUZjhpcbR%GL|g0JFaW zF*cNVJcq&D$nJDw8kZ}6K5LfIol^?9S1E+Z8?Q^fS`NNs{nPQLR?bBE`7S+BJ}y2I zBZwFzKVFBALuRC4w344L`d*X`LQefnt@BT#X?+uv5*Xl{k@853U`1-vZ@96rCU?D* zYi6Y72eK*i9kIB8UU;w^r49d#tHabGdVby0XtWwM8f+P$jg-?_$j*8IRqU@le0nY5 zg$IqWM59GWH{fg`!{C^|Q%OO5jp4dHn#9H-%l4nAT$TQD}D=q@flsya;;#G*zXv@~7pm6F1 zvqg|%B0fTP{&uqMg~KZ-V%CC3z{%}|i&R}8@vdvWOOHu9QzQ+2gdBcD&Up}Y4_7`% zku$%Kj|rLxYj#0gNCZ*G#0E|IO+2ZXB&nE8l|arb!RZ*TZXTt5Jn3m4KSGk7+Q+Na zM{ge!P!C6KA2@yHQ--g1&yF1K#gOd0Qq+Zhpf0eCm7??xYhhI%LE|H?f;LJQDn1xR# zap&Ga336eJR5tYl?QcGR>-^b>StVE#u|)+*#?NX*2Yn>FJbgEM9@Hno#z=DQf86zV zWR+H}{9!*%+*W=b&abw)epbxp13sd_vq)(7o$(~02P=#F!4Qp7X%T2IA9@KWpo~u0 zSkwzy>Vjq9ZYktKbSn`;0TMgrU(u_^{R0Vils}x|l!ItTpeUmS8|1;0RIG zt$n83-ybF4Ig)QyQnVn|t%mKi^x1#8%b82JjCJY^^ol#^u)XvV(`y0mu#N)UD5SsJ5z7t@LCN zv>(Smoaa^n#U#1%{KF9L%+yHRiCPJl%NYeYy(ZHb)7uyhE;i)W>w!uwasiw&-d)!Z zzi|1D37L9u10M=1jS-lRS*B-{89hl9Lj^t;WJdC`eD*Oc1LEx6=d&Szz#)WrfQ~Hm zap`sogFe&?FBhK^#o?mAF}zQlix;2)B*K`o3_La%6X5gK<7jql4mJwvb^qhYAD_7K zVniRcTn_Zxj|m;w1he#_1{|OjSQhHztFy-;TfvJB^&C9Z2JkS~uq=%Ee6ZeNHGeAg z>qio4=hCpXXm_j;i`1n!H7w`0Df@!&Znfi>Jf1KCmXmO7m_Pf!Zh&XyyVSQVxbSjZ zrlJd7!%6z6Qnxu z{kpdTHl*jz_^-|NbxBAV()}Qx=lvJ8kH|NhuROLY zJszmA9p2ABdnoN&MM@3SE4C^$3=(`4iCo!oI}+wI8IbkS6i}Bt)hn(MM+-#VhJfwZ zA0%O}Ko=8aJ%IQ$8XQ6%sNy0FpO$IS6I7~8m`dg^o%($exfnggrejgZk9b3E%jP3j zzS1>B|3l)4RKJE|l+W(!vp+&)hxvDEcgbjXVPVJ>=&v8fZQ6fKWz(LdI06lVq7tbMe^-^oG|5(-f&@(}#8HO_9+$Wn^Q*G*X=gFs752QH!X%ePB4CcYVoYjrIN8 z-0-4B?*LunLN;I?s((Fm@l@Th>*7pZ>oAo7rtBOR4D-hrJwz1`*YN~ z)ksbYmSHDT;RehM6g0SYO{RO@`a>P7Dg>!68=O$Z(@4q*??&(rX&Z$b92H=Hf#nZM zt|%M(K?prYLAokcY-=Kj94$J9j06qItpUJUBK%x~%%q`)tStBrc zy@{r*MVgTV@UA4@P~zPa$D32MY#tcZ=JjLOTd*v$rZ{rw5iH_n*Xz$VYLO;|X>yqc z>nDqrp`ZR3IpZk_`}m`;t7mZa7d(-KJ$%j~9%iAH9zgz}@)mPmTLmgVA*dsEPSF|X z(7_qdF)AnF328oI&W|$92TY^N^H+S+A`LLQ-g;^Cn3?7ORP{2EDNB&jl}B4|+^~rE zNJ|eaW0=(iZO8}XhsJbm7EkZ3Vflm0hK$S9=Dv;Re$!-u8ZwkQ>jjPR_AnZGpq%2V zI+m{|LPm1RrYhGbkhm+KmFgMtIaSqzpVFuV4f`9Ua``J-h8y48SYM^ru~R8pmaIj8 zmiMcaY#?`D0j`zOKr4AH#1k6&?-Pn~#o&=g_>r3{z#Js_%UZ{CBfs_o%uDJIoV zobgxWLQ2!0{WZBdm6%rnv!XmLg&s)(6wm4J==}I4JW9I;QNb@=`GZJh2J329CDI;` zv>-N_fQgAg_8#ou!4Xc3UC$y&k^u11?WLQIRWo0fS-Wb1iYpIuhanW zM*;}g;6VlWih#ic$W>PU?DYhkO~ADZV-*1>5OA3S{FQ)Y0xnX3 zQUdn91;CjKFq?p{3CK`@KM}BrfFuRDoq#n2?1jC6fC>p%Nx)78C?Mc@0vZ$`pMXaR z_&@=22q+@pbp<$wfV&BJ768}&uy>XnGaaBU>f&b70$HlW78fkL1oO ziEy`;GjTsQmluSxax=sKHHQ1GQ|eR-*Jb(TO?1d$A2h8cZy@W_nKkv{H|-t*JMa&) ztzEo2m;U1h{qp`;j-rpqHb(S;fwOtzt!g(z(eT)Av}h`xylwn$Py4G!#&i@MC*e-; zWIqF|sc5{$PFiR@fhRCqM$H~cq_9Hjfr}iW^rF{V=~*hzW3}k>0AjbJdQa1$een)T z-EpE8+&)mMK#Q^tv)KIZT0TvT*8Uf=J;2>!nOTeWH@E-zxSqZ?o3UCgS>?Yt80zA$`D&&N+QS+>m zfxwQkhKTzR4aSEsQ@%;S*9vea0ZRzjqySS0s32es0Up|;J&N$b3Pt-5L|oVbG24Uq zl!JH)5qTjwsuioO_Ci6h6$NbKy^9vzs8pvbPNIh01EW{4!c&>(VwEUEi|zsXtVu|4 zT<9+RKVB<&P$6$8@>b+zcPA_U?6oY!#{~S0XtTEvuX=i{!>^+d7*y|qsX%Y+D+W)| zoyY_)+-ry{juid%q(7VFUIRH~jb`$T;@yvvxRslD9+9pgQkg>1aG|>@R=QT=%#1E4 z()mQXRUxH@&I7$;&_8G;%N3y+#5tBYmy&sO5Cr@JX60kWOVPC~arVyU15T9o&IPe+( zeE^us^Pn+5HM=;XjFvu7&9r)8fgXGr zoB1OT!hE3~arl^XkZxUI2Qi?2%3*e0Zlh>9mbUOt7o7MM{Sf^{U7!*k3Vv$U&qDPh zOPgfe)oGk;f{A{?m+?`CfWi8y&}8M0Clztjr~*;=99ZPI>4C+_0xKg|mS2XG65!)Q z456!W1)3Z-t%n!u>tx)9W$tcrm*cXLr^?x+ZK*h)xv0?y;*`6^7$GowNGq1FUeu@u z7IRc{BgJ`&xcG4K#_`Q{@k_WL(QT9OUc%uH@+eV5uKdp^w9|GLZ>V)&u0`#7tiFp#S_TTK`(@Z5(nX_r>|GXF6c7_F#Vs zY$LeH?fLHQfV$a(x>OOa3aoSq=aDn6tJO-56DM)CL{6~OtlxP z&8xwKm+9pm$y_FEY*1PnD`pSet4g6yLQ12j2pyph*$h04<0{yeAtdUoQ@rIB?6bjp zf;wkXqNBzz8ES(=-X#F_&MjE3MQ#VTdbk=2tAFgY6~Td#Z4`a4HKd7;g6kxAzh@{2vicMJyOGlTVqUbH^A)IOyROsDBV*5psaA7cH^~iH-g)gw2$`!E^u~#5bn^%i6d#g3&^SHuK zBO4xFL}agC4B#MHi@Q7$s2-3TT&9&ik1&#rJ9S|H5OBbro?G3p_w_ijY9-ErO6tio zN~j=-EX)YC()seVx)ExP^9Vn=svE&o(g}4VdaIu-{@_BRx)Iq5&|m%Z;SW`7GzQxC zWsqlub^L1D=>^FZw2Jq0p)nQv8#LksCHtN6TJ-O1UhZn>0u#Ln0J*(F8G5}q@7NDQKxTN49xx%a zXfM#CtsDVk57&1BzD5q73-?wY;6!j8LR~WBwJeKKU>et9&2so!o34&Kt|)-Ds7^|j zYQ5SI(*{qz7TSUMQv=#V1|U-35_;Oe80I1B4puwg$+$JwFY9$$^f{0$*&kks6(xa} zq2xX5oKAKrg5O3rER&9DkB*fJuwL~zSl3GaK>UZ^E_RsM!TAQdTZv98t-_WsE;1Pj z-Viro9Ptn;7!i9>Vu4)MU3(o%Q81&?0|Y3C}Ju0%qiX+;LS{i2(yD zMaexb9~IG~r0k9Stl~cEI|P|vzYA!Ew~Y<_BHqT*UO;9A=({S>;N=i_R|WshFP?gp zdoC*=t6r|f8~{dT_Z0o_-Oz`#c0bUkV0L=-0WlnA_}OcNQ3P=cDbHXJjS?7FqsJ@r7I4(J;Y=pQ@}J0(2W_ z!rTJ^$A;j#z(T%7>eA{0CIK9SW+A-gvX8xYpkT*EU`=xJ{}sP*RrET{o2x*kCvLeD z9~rl7cI&J7@9nGTXAea`kd1=Hu8Z&jUTvH zzLy&7VR<~Lx>}H|Nalg0aeX^tcX?8r=1K7ru2KdQ8d9hh<(zlBss~GlMGfd}c-(ef zK&((*fOVAck^MIei=?ApeKrBIf9NR4Yy>xa32j)Frd;g~>P~$TDw` z^A#6tU?GGMm|DSu6iq+oQdp6arMk4+szKlcp6^?Vua+{0?cXXNlYV4B8V~fu%O~s8 zuv-JtOX1)n08@`kyfHb24B=l}2Vs!-em>uozko5sWWGr^jk{pKa(cN6G|8mv`$TY% zSpD>$V6qDR1$_v&7Q!6C96R|gW<`NQYEpGN5BzQf*7+`>j0DD6QpmFkMya_Yu!r# zwm=1T&p#PYmwC`2hCov8g&M{QJUf5hELjyIu zYHzB&8>>UWb&Y!_*hV^cJkzPIEcUn>Lp|xzQJ#1@Z%yp;q&S8tP!nsLpk>Opwx8pK zwbY**PvK5v3Kv#wLME&lXYCQv&n}!rL&gu_8t|h~5w;82~zRc~4%yEwll&faeZg1)c_LD`{!NxV@2AZeO z!I-Jt9Po0F*4WP|0WJB0QNE@GObcNG$OuN|+{f~a32S!weGSGmEF72*+d7iEIy@ut zKt_U*sYUM+@pM#{tS{qcODBE0h9PBVuG>O`0^MAY6fA>TM6>qRo!2s6sgjC$+KXo| z-dIl-XE{aq6u(9wnkyZpHV?N#NTnjPq6N+fIkGlAvIY^eWqQG4wu8WYXONL@jK-)A zg~Ztke!XC&F`7dNoXcPEvKB2AO3ifv>PZ6bNOI4?HwqRRIF_MsfsyfNJ-86luC%)u ze?|e>F^);^yB?!v-)23ynt`-4IbLkjNvl;jJa!^e?T!D zBJ$#*wYiDN-f?Du6?0}AwYRH%b-7%(utA$!03-}pxKXwM(x|00^gy){ zXi5rHA0Mo>cCQ9E05GQ5EJk??AgU4$$tSgXb)!D6BGu@thHmqXq`fq}C?lWYF}3P^5v>-5}Nskwzs z^aqY+{~z<%?X7=}+oj=89nJnTzgQ(jZh*n`YGwA8xZ+oU7EPlwXL~c+S4`a^fki$< z)^f*XX{A^ea3m6l`iz2TBrtzKuDDEE>CFJ^MGFvgpgNS+qE=iv#(JYq7RG{F)J(Cu zj{R;rBd`@cuU3-Dexsn-+x?o>$ae)O{qJBrd&_XIM;;p>16t1z%3@Dp-{JPl3n}vQ z4#oE_<9OUjnoBWwtEJ>la@45{7a?f%cu(^VjscH?4i|Ge)>Rjx%yXio*EQ!cL@ymeU%d`|{XGK2Fv6#jk>LkmcM zOTVH8{ela`sp1|8a5k9w(sJ-UG?Lh zOm1(K(byzp(mByho;EWXi4aqv)I8CIvyj~8DV#&D!>m#{vUb;}+i&8L9{~D(tNV-M zw3H0vJ8J8}c8>2tkKn(4LIe+8jRh%JZi3X4kP`i*S0|c1$(AD-bs`E}l(jCIg;y<> z2U$9vv-Qp6bn!gfeNc|~In1J1_*?!^nkooQnP43RGZJ@}4NdHhp6Y-d@?ftAHluuwY58LZ)MXyj=SkQZ zP33pMd(LB2XAuuVI}JDnDvv7Xt}CPBV2>2K`W@`w!1GF^WVKkWOol~&CVsi-uVr0) zK2ZEuSLLbi3yq#BI5mYvnidpWhj{J~ir={jGvCfN^PeEM14bB?TIc%dv#J9==aWE^;3-0#iK$@PJW_ zQMkxkLqB`CnB?K&oCcZ>r!>{tg1}=r)sbCToU}1km`F9Y2(~lz(H-&XPW2Fb4bQP6 zO)C#mqdGOqcUUl|J+cRl&N>l3-&(9Kfj3xT>_P_6dm;Z|F%jJeteGOK8VNq^bK{d%! zIbx>C1>okE@_Zi6<+M&0udX~lu@kf`u(~`yDF)ULYwsV{iz>asF}KDlrYz7{p6|!Z zsr83PA*H?j;uDQsAU1ER9r0Aw#X$D7$FK0}MfLwXmVu?=oA!2agWGmjbinQ7!Tq|N zWa*2F2NCUnI@W_~0u@K-RJ*v>0#}5J!#UuY@uC_pM+@RfF+XoTC>bqx6QA56BQuU| zT_vcME^4df8(^p^HWj=zj;;q@woZ{0FS{w;mlT*&@}x-E78lSD^C5W0U_HU4SU(W1 zN1V}#Qm#v0$S0guRF@oe3_A|0k3G$I@RnBK0T+lnuj`VZ=2KnrA_w5j|9y`k{1fws zAv^(jM~?U&F2MTe_eBr4JN}VYHF;2yH~D%`^7EJ+#tIX#;w^yE27q$I4Ug0rMVwH> z#K&T6s60|U1np}vdK53IY>yxJwUW0nw)G|$?Md*Kli&s;z4;y&7uCWX9K^vw7@TWWQZaD(JQa(LbZ!@iA>@H@y}r>1nrPf*-C2v;iiV_~tXN(B z50+U!{+T*ohTG_>oqiuzN^Hh>CEZn^BCwDAvBhf`Yklg0aJ#YkRVb-ewI!*r(zjg~ z47ZP60MbI!nPwgcLb+jaku%dhE)HwD>}U zkTzU6+udFN;0SLW`LXY;)?kV(~ zbBp3Mt@}FDYup|yA?V%Yq30KRw7K?&82420qyt4u%p=wKcc5pS!e-fl%QwKKsxE$% zqme48;&EQsyse!prF=9joGIr)d@;Mi2?bBNSAtJvQyf{M>XJkm%7WEpJ!xK)Zdi-v zIejBXZ&VD-hqK-WqHJ~>!>%fR;H7TFrD{z^dgA+u|8X3@Jg|dF*sfVQD2w$w@NX3C zpu@ZlVX5+rV`UL}wN`a8cWDO~c=MR*vB?KZkOwvrZ*dLEUzzE_p}nbG%1B zO%4wEWnZX8Pv#(7;^jt9_UZah-n1{q(^BvX1Kmpn=#Wi^w;YgTy&VFW$yt}>p)Nk9 z+S25%e7!yA=fx@OfimmT_5^p}74-n^XBI9=X3^z;(>V}n$Jj#B!DwE!b+YBE*!!>j zPkvUkr!x+8IyA+1JffciY`6N)1Zwdm@JV==o*Wi)ly>p8C-F!orv1Y&otfx0YJZHk z9=_J&yYMqSnVEdf%C?H}TRu6-hxFk(`vee>dm~)OAJY)Z$wwSAT3r^X)uL0V=~EKz zEu07LG~YEX?t5Cx=1RM-bt{|v+I!>E;~2NRMb%b={fC{wJ_n5)?b{7|96RnU&yKkE zTO&cA<KqM?KG?{i z6b4LCDpw%%phZsQX&ToW6~sm545#XSP3s=Ubwu6_}eCJ0d*z`xHt{g_LH(=%l z-$H+2IZq>Ua!1P*Ed$KvJ|uGZ%1Xdlp%dZ^k;Zq0_uV0cn}00We2Op4m0P%jndaJ}LhEUYUo zs%Mx2=Lm`aAijWBRkYlPlQIs3E43AMJ{e9bF9B(CHenP|E$%O_fJ+L#?CVK4rTCB! zv7K72cYkXXEj4r2q z2<5{r2gy;7jZBJmY)vfU2=ff2>?tV`7UOzE;Xb-TSRY0=M)kp17l&uB+@6Ju*#Q?s zUFp3EipUDa67uGN3G4pU7JVnnJg^Jr3P%1p(C3sE+Qr>SB~m^ExocJ3AoRfym3ITMS6_aqFU7-o#OW^cSdb zoUa;%iB|7m1J~LjW6z%GbLgAFkA>7K}!14ub=DKh;gpIAXDDF9U>@>RiP{fMS zRev0HtAny2o8AF%*aexUF72vACaz{&7tWnI^<53Vb z-y*>c)LDWY>|KGdof>Z-q9@T0`z)Yhzjy~R&wfEH&{7#0aD%VY&v(R|2s|h}B)^op z55+GZncj+-Xa;b(KhzlPRf!p%Cg1lVY4S1*`2^247CgA;Sdn2yNUVL!gb$wtZ`6U{ zBHxaDY*2Wry1x@kAWhoWV1Gtgr{J?0}tiz__MP?#2PqA z3@>T&9qgBny!hYr6P@GLs| z7N2vfiD2`hAFf-FVY4BolLXyDl_@*rN~`+=Vx(Xyob^C4gSZr5#5zT90n<)q)-aZ0 zJOIB%zY6qQp7Z#P?!1NLG}dFy6{2S44$uqwd!aooB4AO75LJ93?zIJ-+{RJ$1Mr6@k;h7AFjgRobR`o;PS!0ZlD+e6z;#dyW@@XWZWI-QvpMA2$@Lq<@* z(P-t?B0yFAs2V>0`WDq(T=!? zb&Nznj(>f=J)3VJjUEd->EXCe{2t88{S;mWN{dH<($sQhFVKU6GgYiG9M^^!O^dO1{yCtLX>gU=Q%R3scv)&BF>v9t4 zl;hm}!X329E;-P#X8%tbfAY{cjx++K5lfF&Pa1>&2aOu*9MW)_+^2Z<%3^t37FHs@ zvDi+hu@tXz|GJ54J<<;u2dY&YT@Y)aUQ&<6NgrrQ2B9VLS@zVv3tDOmgdUF~&) z$?PuJF3~w=b|VFt zFgy*@$ZF3k#kqfZjWh3@exf?(qrq#n1#9$zMON#5(1;6pw+Od^aur+0 zOQ8P~Pi?IQwyS4TAs7SuU*R)EPNs8@)iy{R=FSgV(#RTI%+2i{Vpanwk)2O~M(yEih8f%CaD;NW-wdlh@l*wnfYtc2hmI|6R7;IRDxK?Qu=IU`! z4+l%zbE<#(hdu*7jj1OA2d-Fxl?xm_KMk)aX@YeQUa{mm^1V;bPshpS>zC6k)*3~% zTGes9yx^e>77eIau+3BNEfbQ{s=A-?F$MwCd`5o8;FR#GT2;?%00xiqg^$C>GxJ^ixkA(P2Y@?gS))^X#e*M2ouDR+?pa(>4?ggv+}R`KP|0nt;n74kb=~KPe%UWQ6N|dt25y`UiX@EW2W0OQno! zw5t4p*wq}Z*2619=SOyQ#Re%%OS1YxXG9MA@k}v=PQ-3bJX0Y;-MHH=uu{?+R}X*= ztV8%kFRa%K%^{d}jeG+v28uQy9u&(riM`P}T)gw`rE_*wlTM=EFpLkgCSizZa)^jy zWl@dvHR8i4D|aDX_vToItz!j3lNM)+Hr!qI?WJcr+1JczvM#f;mUvQoRP zF@KfvVqZGS>G?+O`MvsPcY}o#`Ewq^gM-e^N>w;Vq5R`hLK$*V_lMitG4@e@E)LZe z@I*l5A`hqDA~o1J0ra87gdA-KD#&*%UukR1_i+#P?j$pZsHjg5f2dmPPKD=fr$DhL zc#?mL-q0R_1W ztC-kZF4R;4ods)^iz9-#fULblWEmeErH*ukFWAY%##rWPa=6)p_it#5J)U?mxyJI( zRd^_1Pa>%Kv!mqOBZl`MP;>Dhe+b5U%WrX>h=4rx!OZKZvoYX{=;*ozI0@nTGV zObVr~n3n0A*4s{Y@u_F5=XjZ{jZdh0MtM-bF>}jN-v+A^AHgvTi>s*`4{WnGF|t!w z4U4O4#3{8F)iH@8>=&!q6du(y0<2Fb>!TIx1Iz3O(Yz6#b9>d2yYLQSO!x%e>r;2a zd%aHDf9KA+FIkc52R96l4FDoL1f>2WQ`g^t)F%T7JwgF-Vh0N2i60mjN(JrLYqXL@ zICl>FYP1!3na23uppXu8Ph!5ckPptk0WBGihJkZqrtikyHqHTtt~++dBfrNVr$A!; z6ega$mSzUOa_**i2z=JU4G^7P=PI)+gy?_Zi;3)-@u2FQ^?gD@Qqcx`G@HL11rVzo zRFu_=l*6Kj*lb%r3p%gd@5k*Tju8sFO?maSSxinV7d2)g?NTt6Yso7IDS2}d}X zRg9kc$PBH0YzJYoyKdBljxUG$UvXm=4&}TN?6=SsjOvrK$$CXcL9l!Q%Fyt&QU)u` zyz6PBI@kNtAPu^#6X}f5U}F7C5x(hr@fB?d&Bl6m33Bl?ns~EaiiMa`^UvUc6@ytG zRLqL;ZiCOmd7CTcejn=NQTXV=BL1fS{q!il{)Ya=6y#LQ)Cm(kxxAHjQ(UR^1RFtj zX$Mk|G!8O$aq7{r#cWSwxg87^ujwc?8FFj#?Aswt>I>SxqXSy>Rags%T!tm5xXmKTad^x`bDzWoePqM#3m`wRqo$L7x7;UGXr4R7d^OIuGsa~jEHt@g(r)|e% zI~SHlWcz?JIjVx$x>FO-=vcXbK<-Yz9k+`U0EAq+(Xu@ZUhO>Lu`_=?{s({mov&&? z#@`y(^f+~=MYq6B75+BjLDjw6-C(Dm>TcE{QWy7o;%$#j)p{Ixpj+{ZNcAxA6T-~@ zfAy8A%sP4kibn0}*k7J7k8roYT;%O9zq%#fU-Et*dlUXmJ(_*qV}OX50DV*+`cEDB z--z!t4s5M8`l$YH&6PA9KteGMkCwzt!$$Y`*z3W7{Tfh2Z{qI6N1V>(sVq1Gg^xHs z8p}~n!flWkI$H~#1x*}n4V@jIW{gVHKQ+dr5^#;AbR5 zi|8ef>3lpEkFx%SzlD{u#^X2rmz{qm3t|%UU=pPv>Ur2cua#`ukATl6>-ngt-ayw1 z-V3t!T6}|i9ltUzL+f$UQ*}%i;b^|vHcVfOj(sNc*sgs^p?=l*SF%~zw+MYOrXR!w z0RycqFvrvh%tnqFh-(n#62wPgB&B|midJ#~*zeh<;JXF4!hN&;0Cmx~K(_j%-u7{d z-_HH!P7)UNM~!2@Zw+?rDAo6EUpL}HpWXCdkfHz3VZPFBo3wY6Ve(l`o%^k^uC>d( z2~y*IP-3?`>)my#fR61Lk)p42+h)uy_`#LiH)OtBo7PDKO z`lo;6o40@Zh2a!W|KzrT=tvBQrRIjS70O9( z7(PR+^DE&w8cuiL3T3mpOo7O*BP~{{a>$>6GTJ;*SGBY7qIVV}@|{zy!dGAX^bamx z53I%x=a5uJrj#W)UoqxWEI9|ANm zvliVynl1X`E6_;ml3zwP)J%MpcvxQqgYe7{$K1Nf1B!1gsrwKv5=MqiL1LIdC{QUyUF?WV^9DX25#e*Iy8MAVQ@L(Y(3Wo{9T1j_i*przrA#vayM>_~y zAJ0L;{dd5QA|7%Zm(B+oSuorB4>y*tK7y%o`ytHeupRV6tP~TRi28}A_N#R~658v2 zaQhcp`#t>%mg|A}z#B@2a00T^ZCfWSf+`ifjNP<6G}s54tU!!2!mPuyNR{I$qKBY) zZ%<|yUyo0h@Dr7B89|8k`Lh?O03G@-fK=S^8J03X6Ca;+@k4^21<;!==w<;80O(&X z=t_cuwH%cE3ITLlrf@0?`77A1;GF_+z(>V=o267U+VJn6g3^J-n0_sBzckcscS_|9_&f;*N{DYdFm7oj^6P2}@Z zYAhZG{hbwVjLKYU%5T=v)$-eCX}$dRU%Ekl2P|#CuhRH6U{9->G!To3nK-(sOcYj& zo(|tp-zbr66{d6oj9TtcIWFKYtile z5=H}&i5v8LO7oqDq6Zc_ocPx1;ad9*VB>t8O&EUH6@ei&_MWG@@f7PX*HcF}(EsOG zh^hxfB_^-oM_8WAVRt}oU9ZGxW^81)eV;hp&d95nHChMhJGt?IhK5rxGUWCn1pwN#=CNC zxyC`gm~6Gi{7$7;okq`Fl_^Jmgmm^^q*4B$!~S5BEu3#XiLW@{&aQ`+OTAFsZUlUp zCj!2DQal1)fd+3MvZP(0_0edtvsbMUb2a6oa0H3?PT~W&%O1+|2VvIXqF99v%oeLd zkDQkI@?z9VQ8PvoxUr}Gj1CN+)eoQPq337W7kmp$*GDRORE?8%!xra!Wz~{TH38wQ zz6n6LPs{jD>4Qv<>uyB`0c@3%+C25q`S5!051Nduf3=+?PN#4QS|WrUFtb8_*?ESm6k;> z7*@&&a`ryXw8n;R=b=Xd7a4S&ZXgGzDnKU3jPC?RF>^jL!bfRJ`av}8bVnPc9o;oI z-j0qXF{(bOzk@Pbzkry17FL4;@OJ`s6A)kn!+|F_V{v&>UOJ-bH>osI8T+k4K+=oq zjUrP5U$wBKIL~enx666zqX)2Ze~Q%y;=b*wWEXRK6(SVn@n_%QcDi3q%gO=_U-amDoP-OR5&IjX|P@F$-t=KNNG4Z?sl4}6FsNV$ZuB+oM>R7PN6V$5S zz)=T94b$(bup^wBYQO)!|F`iOss2oj&Z-f=IQNQkY=zC`X*lJj??GqLBQ6B%s@L~z z@C9%(R$~$-pm}zIuRga9N8Q4sWhi`J7P6tv(d#Im5}!tvBMP=^(KI09L?eE7jwq1h z3J~J#w49S+PjnX8pu9tw0>nJ^K$G`;f_eAAB1l?a`=;Q&N$Aw+&flhMjpJkw`?S(0 z!A6<7;>#82xNqXpICTP~fb-$d6e*Ms@Cu4CLl*L&{)E{U>98JfAPO?m46IELcRJhmJMvc*wGhk zWTUtrc2MSr zw>fx2iT4B=e7o}&vAc11f2-nF^dD?+KI=nVG#hCqq9!~rd<+K_=T+Ug6o0q~aiaEXuL4mhp8Ahn;8m$f$ z4ecL#AhIsaI2C6I*L&N=SdX3bvsCex_E|ZUL+psZKNuk4;|fR^f()HbdGWT)#G#lN zm;h~%{e%Q?x$_tT-0~Tt{Klk|)O6Pm2^~|HoB(%KJRV%a{C4O5VG?f2O~*C4Ef+DL z3wsZ3zkbil^_Ad>wv_yx4wkW=zXl6Hk|@0`6tgvI=()4r#Rv#1D5?+ee#d0aZ87&a zA1&*lcgejSc*|<~v31EmV~j?;mgRhpbm#dXi7n4N@~=xyck$;d{M`<|{Q$}jdTGvg zSr>_S%l&?x`o6<`r@Zhz)5Xu_yUNcOyGODv+3$YuCEwNUx4iEl{wZFF_;DujjN>fF znTr=QE{-@Wb;)j_>XKb{>yn!t#_N&~#-8>$Pq-zv{U7*K^%=&sW}&`D7qqer{U_9u zR9ev$P`f1P>yLUEw;%IHU;9qLD%5k0bDslRw-Lr5cq{6I$5r>haYL?(IqmHdS^tGL zeZqih=nWPE85#4?g7=sEOV}$@MUH?nRd@%?ZfG@dLl`0*)WgmC0U3SkpSJXK=NC>y z0vc26L9&QL?=UssKdJm`zi&H=FdQpoHk0I7eC1jsJT4JLEalhz=Z8Pw@=+KeIK;xV zhvA&BsMpx9>(69yJYN8J?ZHqq0JpqfY0<&#-LkTC_U9b2zPy}nb`#UO3;NViijnHm zB0F09)|QXVJ`oRa-deb*2<>5iG@-gJC1rTH73Lh#m*_CiLzjo{6Gyyi<>&Gh$CMUq zEzfvdj#@~?$t6?$+s*qXFpoG+q^(@t ze+`|iMOT1D?zW-f9eTEmo3v;m5J093w-hIVA~LB&xz{CvAK3wPmxvKp?djP3a2%0w z94*9!6OQWqb6IL6)T$cxM~_pvpD689%IN`z|3h1pfVKhwm*2im%q`~A3UJF{sPE9z zwUSx*<{Uz4XR}R_j-0Mx_r$9z_t3LLlZkw}LIyht_5u0_fvr%3n>XH$iM*zAe>wT$ z$Ov%i!apygriEspyDm?|uBe7Orc7XWzZj_zXE|c8#6!ggLh%JWs{B~PE>jku=vR9q zp*3=hR60A4mKWKD<2=#DKYP{7Eu&Gm75n3&UBECzMm4-Yj%WWE%gH(KS$b;cP_Qg@ z9Yu6La-n~oi5}w`dmi2@wD()}y>oW)I1X3v;p2x+4rxPA4|N-Qb~wxJmsG@IGVrX$ zn2?8m92z1!u?A*ak2!#ITr~>6>_jNUcbMjU?iLB8_-%~sAtzxkQkx~!ms8!cuXBHK z&7_?D=rTB>D8JEXpxNwbK!7s$d9y~nML*E9}+>dAP zfUhE?BlqmU-kQtdKBG0$%T6eP?}VEC<0#f7&iq70vGW9m3#Ox0BilGq3*9N-J8=ay+<+W(g02}*?O(_8Nvx0j$Zf`2 z^lYS4D=4EMg}+f_FxpOQlEcuNI=q2)QJT>epXriK>#3b6r~vW zx3zDR6TdAV`MjT7et}!=f1V6oMzI#AVRa>A-q^XGBp#A8>Uki*ugs8NlgdYSJ)$S+ zKe0vqFcP1Xl)vU9iio-#%mhU#`ZhzeKZLVRJ3%abMP`?)((7yNZ`fYd^nra2o1esX z?ttM1Zz-`0=I;bKG;7wX)gAxk162bP{GuBC0))p^!ZfRoCjmPXZx4(90>Z`{E^yf6k_$6&AoYx`07M|EIU+<%tz=~~r#?d|zu(C6$dLoT5% z#rOLz4xJU<6zW|*+UKzh0KZ={p+-+qUd8FC;)@eP$*anz!4h!YGB{x*7|Wj6 zDyxr3y{5L7J>ovCS%%xvB;+G@8w?G&kWCwm=yE34Uu(gSA$!6_qK?sHF5~^!x1T4gkK}rs^bQ!0vLncJYG1s4}ROZxrb(6uOHT1 zbB-L?gEe&p79!J!(RX(}&=lE}a9~TMcEF81{H^jVQp`D$vwui%_pC3p_tr=DoQAtf z!XfOd%q?o3*%fg8z>N2Dj;QiiQXaSrrknIF*xb4Y>l2H1Bcgl|k9B%0^J{rj$@@TI zYb3ZY;Xu$jP`Jg+v-wBv zcTD}l2=3net-b~xrxD)0`3Knq37;&yLy&$*#TdR7`5(~nv+ls{&AGwW=_jEWMBMyc zZr$`0_zhBT_!9mp@`DfWJH3_Q$iFvkZHMG>2{F5LL=Y^!pf!AP?x9&zJCs~MC=yV` zK8ywEu*s;c06fKgk=ouOV#q6JQ_lX}gR^#O?=?jBo~8$PhkuVM$t`G|*(LX&zIR4_ z&L$<@50rdZSqCt&0!h9`d7}io^|eYe;nseE-KxX{r+$uVrbJpPo6X+~Dy3p={toXy zr2Yz#z(@arB5BS20xB~7I3s8gZ}YC)wKGzN6g7vFD2z?^Fjj=;FD8#7wqMF4j2pM~ z0OUb^)c1ya=I)u9hbqT@d{22Xk{_$RR~KnLO%Lo2j~`Ods+Cf8^}XP;@29=MaVv!6 zq?lUKQL3$!DiB&;aOAPqC9d>U3c1$^?5+#6QeFB6S~q`Z1oi>mx><^rdXWA~VBcoe zKAd^fiKT?I`CAVbFa$1}FtA1$ufZTvJ{cNP_+tBM%m7h><-Mou$ zsSWzx&EGp*RpkB}{tVX*tnC-vcXB~<%SX8fw7Kcj>=WAyROETJbv;;~Qxo3qONi{w zvJMQvBG7kB=^_p+g#^P$qDoe zYmBUHcN~d#*eCyzgaMe^hc9{jyL`epzr~NfAqk)`)YK01F}FTuJS zd(E!9;iDSxd(=NTHVM9j#Dob`#^hZzaLSceT^Vqn#}pLg4D`I5f4=ACqS%*_Vi1;w%z+h1KWSUXrSl&W#c9U#>Q#O>qP^{xa8!$T?P)MBZ+pII8;11V<%oU zYE(QMdG%y7uETfr-U*>yCN7RAmr>&;PVgk+YdhW*pi=^mcoYQ>#<+aQ=b`~I`O5qG zIUU~%T!A^?N40xz$An;9aDJyeytSlq_12RJXbRcuAVqSPp zoYamHd2j!{U3z?Pm%pnNv1X$Hu@>u8XYBJB=&ncU`0B|m|Eh7 zTX5AR_iZ8@Z`?}AYg|3#)uS2CyC-7@;>lZ8d{N+*0e+>Yiq1Jf%{pRnt|fa#cyK@i3IDOP{3jl&a)V?`~Arh4-XXELr2^Y&Zik19MLnBH%H@8Z;8+AqYinV6B zP;PFNZqmB1Ra$YgU|Dwxh0VfdGbJF1OiHS3mQn5L@?IhDW$c%7 zjl!mhY2@-Z(Zi^{yK}3!vspJ<8Kjx7Y?7xkTS{?ftKvwd;?B)Rv21Gq-F7Nrjtqc$ z!PG+C=-?7sSpkEkIEH$o*2rx%1BUw3^}RwZr1;u_%Vg_n#}R_saU|O9Mx_you@sl{ zmdrPWXuH~EUX(|^QY#qi$RX%aFIIMZ`}zEUoGq*|-wJtAW!w^35*Dz+{S z;G^r?X}WTGOX$^HjhVm*-^$e+8?=znE7e9bx3g1e2(n!-rASufZlk`Fqk)i9tmm7# zT7J8*-*Bj@bcfw4hybYyWbln zz0okb9B2Qc%k-4>wUivq4ddh1Fz)r^)}Vddxs$}5-a&FU8(mJBREA{OBe&h1;(ojk z*Y6ES$w|ED@a^it?!H5IlF>$e(_y7fZ+sTr*x9|jJsuo5YQ5iW4LU=I=88Ubv6hCn z21yc#YSea_J9qkbl5Q6z%Kd|6IO;nYmD8jr%uEw8e{g`qd#Qoc^rx#g%8Ab7YzCUmRs)K$z84mk{xPF?nJBOY2^>}{n z>|#`@Pf}bhJt5T;Y0Wk_>l=;cMy_6nc6Ljp$V@{K1!6W5opVf&@{lQ;NHF3A*`ofU zdPN6Yt(t4FeiTX)(V*f9Mo*Q+7*RfkVJ-J`5EP-iJDLh6X$i}c!Qf)9s^(;h#t7PQ70&NG@E#trDZ-5kvsI0-Tl3I zzBNAUbUUrVz4#7eqd&MPQPsMv)$#o4u+uy2$HUQJ+#Zbwj4~pnby>sW`8&yA$ds%^ zSsoB3^Xv#Y%DZc(5+>kL5|8ekCX6Sh_@!$yrpBYVe;A)6C;h>_+30n%eu6(vS_cS@ zhR02r=R40cZ4cw;lR2(7$&So54uFQbtRDe@|2x>BW5H&2FMO+vYy zdXbUFB9p7#C}^lIXnhxJqgu;9BMrWG_N+{zK3uEs`S9H8LG;YrBa4r8&z`*=3){TG zE|R>$jP9`AotrzATXZ`|FsqQWOSEOGQFVLM%msz*=2lJY7a8uxvXKxYjv;Huvz9iR zEp!icP0&6nolUHkLT|*FIPG_Oqd1ynjB9_|Hl6eOELCADg^_J)g+Lt7EiA7sF0T#a zh;pwlu6NHgbY=01gyvoelZ%Mrxwia=^sFHRCX!5~Ad3h0u!cJAXl`!qU`Sj&IXYo% z@Kl>-e>6GH5fpmLaC8Nc~%lv;EJ7(1B4lfU+fZfBz zwjEcPOo#o!NlR?6h`JwMoWok9J{!fnnz?p{iE@4(>2_`pm`|duPIr_HVu$AYy~EDY zc%Y)RzN5_qJLVwiweQ8P@j++gd2<_=zub%tsG0cF*R(dugA~K4WEr-Hy_cPlELX9 z;oqoa>M0)f#n!c)jyO1N$=suUJLXV>Fea!1y-I5xwJ?tp}%Y>*5&-y4}gw4>cq zx{HL&CW@#o>!O!d#lU7pnxk5T(bb7mgP(sqbJ_(Dkia}a@7L^YP^VIxe~?EUJ5ADj z4K3A4CShNoIOyys>y*NrN#{RXX=$Wsa z`?oDEnp-<#6YDb3l53l@Mb0G_75Yhu6*=}xQ8^8o5K_XSn&H_lP7o$UiYd2;*}7f8 z1CdE-V%WB_KMZqqhm@uc!}?rNpSGb_^O|qbU{(u@StTvTqJoD~8iP|%!){4B&Mav+ zD`It}X_iQzX0jkQUA7dKs6|k3n#>L2Rl}wn_XbJ3f7D~2By;b=RVL3`)9g=6#Rhh| z--yPo1B@-<>f+mpW&JVhj-Ni45E;#1)EVkA=W)Ye6`x!TPq@N5I&A>ME0L>2zWUX#p0r%uTIN?zV+Whn8PoD?e5z~w z>I%#A-1=B;aJHSZsh~^>Hh`^RG+UI#-R}n3r^+NO_Bu(Yl@|)*Z*^JnP~O>S*1Dy{ zQR%8LdU$U5a5TG}oW%#@lT+FCx+sakm|%4|bImCx{8{uyHkwQ%bHm*&ye@OYig|F> zu>@A!*~6x7jabHRk1+wGquw~mIn?b6%t9&76?r_U@zB5rSAe z4>7{y#|d7F@6d^`g+P!;L$!{Yb{Ei;^*?&W-0&3=;bgets_XV_L?RbswifZjbM1$* zsSeaVaHgh=2$ew~d+26vqsVzNlDAs}ym$jl=0n_g-F|CCfr2o7MQtmm*4&Up_&K{B ze1$a1Y*g;F@t)vA9`w82WH1}XisV|->W(mTXQOKiVqecjYxXI!S1t8YoSe0jQ#LF~ z>oBfYXQReo3~!4@Sa?EQ9r53yQLimU>;t-;;V3k;AJs8~6*%`wOt>>0v)Dm8x}lv# z{ZrAE9xRSTdYSxDIpR~ore$Y>Ylgpw`wAE+G7H2vs?vwV8lNPJF`X}{1EL-uo+izc zPH#TCXo9V?dD&0hC@@Ux96iKa)lKozvh%5zi}kuhZc1MK5yp9d`#NR|#EyvoE(pA} zQM`Q%2PFO zj~&nMo>g3iU%rJeh91(5k4|G8Ok>PZvP*`^;11?1cI}{(4B;$_E#1Py-WEr3B<8j} z$@CFg6Bm#Ms^h_Fe@JhLOReYcF`o?kU93XE#efXtWfQ`1L(R#6Lk!+%2Zxr-hB8hU z_gdXWO3W^XVl(yNXp(Z^qA-E$v&bPSx*hdtLNV}2B@bChrR8N8fpar9QYK>zH5E`TZjwI4^BKI| zKVf^{xs5w^bZ;WYIAMBi>6y$NZbsEz%4@|BvAnplcqN*bN#r7xwHt}kbtulS$edU$ z$a#kii#wv7_3TER3f?Gi+`wR*A0$Vi&zC55kd$-z?N{MvM*L;zW5b6Y(#5fR_K@_8 zMdQ6*9QW>W&KAw?>eK6rr6P3ecB;wwq?{|VLC0i_W*>`ii#`)QJNrluclc+p6dUhcvtDzdt=i)Zd`rGzklf&C*yIRJPJW_24&>ypsJVq(IEh&X z@&2|(NweB&KgY7)+~^Q&J8AW{DuGeoOdOOB-fNA0t-rq;QJa4t4kliJ5|G;ALy2jc67G)&$=PEyQz z)dp%VP_9)G&^$B+NX|yR=ILnA#8uGgNfGlbM!oTAN+?$g&HWN-aQ(<3YLiLtxn#gH zT5ay`pF=OT2GoSjpgK&(2Yo3}J;4Rq=yOPD;+o==*ZPjf#$!H+;>3j()h}y%ftEO0 z#6Vf>c6!hC>A{Pg*7_Q4yLdji13i@Bx{XwwnA&pT(Ds>UFJXsrJkc7(ud=J(L(a0W z+i?7%b3@!b;<$X)1mz(p`*kr^LZ^?e%=JQPD>i>}yvr1LyKnfsNHU!rg6GH#y#%k`c#wnN~RUJYfWNSsrD1kYT%mZL1}_Gd#tXlYg<_#UaCAO2f9t zL63RUqr1}0`lm7!pPh|r$sseG9P*ngh%Q-q&$yKnzh^3I;6$HtQvC(dfcsw>OXuwj zkE3VmjK}2Jh(nk7@yFv1x-3Vj7P7NIjd5={K9vgwC^EX+*E!m0WW;4ytgcZfek_(g zi|IXodwh5i&tJRM8yUSR3N6ltkbgOVpKp%`;>x-h-72iEEX$EOnzhw|+KsO*tzP4V zC%=A84%5r|Yx)%Ds>H1k=fc<4iIY1G4 zJCDZm{Voo|?P@g_=^7hXIS5gjDihzi_9~mvqf3&JGF9{LDfb9C4Btb!XlwlX&S*G} zw`wa(QKNP%u5DA+vaSZ3ouiH%{pY%;$1R&djg@!Et%=KVeN5NejyVpsnLZlTJ2J5i z;|6Op^D4IsxJYIbY+t)fNheTzErTrTubQuNHqjgQn4YESArt4;`QPigVyPBr#+18duNert-aiS zw8tsykkMD=n#l>v%$*i9E0rgj#+%8V4!Xvi;z`w-YA!8vDyO~h^6H~>YAy|wcDdN_ zDk%UvU;1Ruvirpc)P+yDio7?TmZ*!|j(<*2F^?{xZ@^=UXR7O6g2Uuld+(mw9> z$sG$hK5H+pbNY#OIzEXT^_w!tO^wx)&U5{^aLOzn=a;X>hpm%N_g<90hb=rD#^q~M zO1x$_$2Ev@S$fENP%UmMxw0H{F3rva6Gm=64HfW zU|xv}y(3D1^Io=<4EK6MkM8#lIMeSB9v;SdamVe`ioG+_gQ(T#6JPJO{qu8NcRB9t z6*r5yIKR7@GdHd54S*>3Di(!a|Dbb6pX1?al$^BM&D;8r2{$$es_FzOw~pk>4I4Cd zg2d4Zx`|QTRcq=Jr-P#r+Z8)mPR25ix+r(1ZarOcZs?t0SedMT>_(EF7`X@Jz}h^FbJcwPGXBjF)jb##_NeA$NG`>h zbJ!8&Yb;2k)cTLHRE~OL%{n2yAyt4d@UBbHU-IfJk`X|^F1WwFydWm+x;%s44=^eC~zCvvK5Ic{Vg<#M;S!@A63ly3Dla)KGKIj6= zHo)U#b!EVVxhY}2NhI861>iA0N_tHOsc!qhTemwaJo*REq1XT?&ZT&Dh1wBIO2Ut_ zwp@zWmT+?N5K}=O%aYgHGOI0*b(W(`@f8+&dB~!7DJGdby8V9dh)H5$MTDi;Ay~gX zV#e_S(ZbaUGc#C%ZcL3Pz#N~(o2EHAI5~rO(m5S6woO3!g+c{LQVD8O6HuDVg>5w) z!{dbm#;gQZeQ2%K_2E@feR!-T7#^>+3}zl{3%&l~=~zi?tpHgGkyRp2PAr!RpToM) zA1sItDKA2lCPha9i>W^2?r6{&iqWQ>G{uC8PbV~%ApYtQwn2u%DK0GzX zIlLqsVhN4#M1i$#<2u5_OYqLguqitzwyH9JFwS~pL09dQkI@gU*;uGzZ99Fnh(&Yopf&hFyw zvQgV8Y>87Lw^mN5!($(LX&A7VMe1mGQH9E_@8T zIu6jU;7Ie49I4@3gFZo&b2g=0etW;iJ#gIPpnYs^_=GHAoH@upbF08gcT9eU&r``y z|GWaCfjtHmf7RUBor(yuu*@k2dms^HkA4X7Czd9>f%BiRP zG^sf}*SdIS?g|xyBvM(QwJZYCnaw>RjvTq-CjTx<07kh;kUFr@@v7ViXvx$Rwb#$& zvC-*?pA}v@_NdkAi5FFz@^bdX0M$#`viQb5yfR$O9uEhXhjN4FvL3c4k-M0L8D_5j z8RvNX@PeKhaP{R_b?no}+3f3y3Kxaq;TYG7NH#RN)g_)f3@0Xiqm_w$`D3C7S6^QK zn1~`^uRui-zhEv9Mp&+L|I4Do=op{AQlg=`i^csz(>Hy<^V*1oBewgTOF8s_Ti4vU ziViurU2sIH1{oO(7!1QmG+S^tI^E5J1@(lmyf4_}FJnx91vzM<98!l^ z9|kq8X~H_fOwc+?NY*`#ZgHB*crKNA^FZ!XN96*y`sBKDafkO%^yEQq*hcaX*QDge zKR5R9I?7$FsJ>mPHMn)ettsC2lJjPJ|4M>fH?Ea(Mf>{5Hl7s|4DNbs##}t)vZJQv zhFyaTSTJ&iQQF<)_N-(H&aKEQPVb$H+~lq0YEN^quUg{vx!$OTEVrAZ`i)|fYgtc6 zH+Fd$g4y zA-S-#x0h2yUgm&uOCoG|huddzG1U^N?G3rA=5TbP6}2)Q$sFIXc0kaJ=f=(JlW@(u z!7WO?8wU%QwIoU}p~|&og|VAc|x>pNqgya|0Z`=xdDwe(;T$! zHnrai;set6HCh5q#-9vFd7Yt&ZPKLs+k4XvyHzglH#L#l4f6s*dDDa0^%wZEI@dS5`0&7`qYMP5QO^~x%ToRXr0Q+JOrj$MWs-)J%EjY>A7n5Zql7Jj zL{G?Xc9Wx4`(9M#MVC8k(VewMbmxjfK>~%RqC4ySfAh8c(^!#EbmuCMg);xt<=?9X z{^b-kmv1!7a?Z((#TzooF-z!ec+LuCCV;?;6AV^(t4xG-j#1N@L&ExcrMa4+r@ii; z2Is1!%FYdcZvz~kfZPW%%=YDVk8`i1z{_18zftA9RxS(~b|ysL*zo8!YI;OoIbcWN zSOpaqi%lsgTLOn_zT3qca&s!sq{O_FAp`>LB`3?x?b{|sq37mJmS(-g#O;!kA2*4a zsvTjYR=<&!gf~cTq}2dc+LTw;jdWg+)%SZnfiY@cn)MX-zU>5ITV84QLePOr7Fj}2 zBBbiez@Edtew@Vvks2RJG_MkCopUM1H9SF6@dP&X3X)uz*;rX&c0wbOE(ZvCy*wpB zF5%e(Wx2)f!=+8m(s;=R*Q+Lh&uDMb=*1~X-`G|eS5h{)xFs=Mvg(^d0l@BPcb0IHC#%SLBBrykvPxOV4I(F=TR=l3A3aa?cvngyfMaZHAySse3CU zSK@eF8uDt>H;f~3$I#W1XIoiqF1zZI7S%RsE-zWE$$q)g~?n)1X)< zoaM^R!?bxFwzsyipJ8*2g2i-8I$2X+4wr;bcuU9^Ng3osYl1^aP9hCGEk~MvLY5`n z(pE_2dCm!$Qq#+i2AK%Kj40c&rEW#FpvFWP_xW7;CfZV$KrBzqtnGZJc!2x4Tdiah7hDMgft13YbJ%k(*y>0{Gw8QW2#_E3JNCp zM8T9a!Q!NvPMS_T4o|g^PTaf^@Nz^oLa^k5Em%&?W~F?$Vn zkyXZ{p`@2yg(h0*=x~+d2yTXviS@>&pU(tk5uLy*8NA5Br>h@fpFlS&US*Y5$e=|~ zvx3VEQfM|Ry0*%I3zvl2^rBO%rYl5^n(#{0bm&@*gi9?Hk*KfRQeAsBzpfHA2?<;^ zQ?R52TVBngI)4a#y;)VOf^eyFjq1@U0&KgO!L~!payEC^^BDP-JEWKt0mY^A8M;I% z!KU$qG)W*QO%@V;(tzj|Fe#ibm@E1^Yk5(PIikz;uzVH^BsoQJ1Y`^B3DV~_ws>7< zcSl~$m65KfE`(Rg(y4-I>9J`vPV@}AqTSljYVx~MqO~R{?Pk#JEULLJoAgc5HO*vY z%~%RD#zLw?jo$Lwg2oy&?@$%&M97jCiZH*s;svu$Zx&wDlr6Sn+<3ZC5R)Yr61WgP zL0QXCOksRgF=Z@YEldB`yg}9QbckA=ifr*4FY@xW<8-)~LZO6^o{9>o(=wY}Kjsx; zt3${u(^;V2MAZ56Nt0$_r^G;pp`=L-o~B?5=Hf$IA3iwohJdM}%$%yE>aPA^i-vJx z;p4Ef%rDX?-TV@b2KfaV&tZOg#*izrP0=7f^itgNJhcpFewjwu*eBWq`)RNgFq8r^ zFC|)LGu@~J9PU*|mOH#IEVpq}%x(qcjMvSPCcImg;p)OVxE!JrXo|EPAGZUUm!155b+f2o=gfsZ0si90+i$qE8ohH#G*pg|Sm?dscrUbEW>}Fqa zl%SB>IaJpWGjR;=Z1fZXnE?mUB4nDFDIA5B3RllUph!Rv4t*U<%EeAK$ijOVT*@rL z%61+D$0Ye>Xz*ol%A3K>_BhD5DC0X{+fSQ(Uv{~sr)to&zX>+Y3uM9%lkE^1wp~`k zwtGle`kvZxCW&@MS+4^$l`pYAEyL2wcZQnk=_VLd-ZhK2CHti5VBO~pUt^RCPdIuU z=JN=~&gSyco~sWHFE5#H+?2^ROObA3C}KvKkd(-VeD_yeHPq1LKnRG=G~Zkew2-i7 zAc03ysR3$~6N2veH90N;*F`gU%BydcY23GaW*Sd$rivi!=FogTMpzH3U*YPZ)ceq z6tZGEBo#BSK}yiRHz+~%!s^)c*lrf}!mYzr3v3f=O>067KN-DA|RaZuff*{ane;RJ3Y`$##4MMq)hA2C{=%f>hH=ZW7ktnvPqKY z>$<{(ovflVW-_}<>$E1MKh#T77i_M`fJ!kLY#!6;!(qEY%x*RrXqXOEHiJH)F=z}L zFtQU1_`rhfR@Tz&2xl30L(U-4@_L$RdEHu1CR;&+k}8_2tZ1q-s8>I&oolJ^Yp*r) zfsqXsh!!lBELbWS%&Du>Q3kO&ZSZ!U&wY74mnyKlUQ3acwIF6?Er?lN$vL@hIY&)UUJTUuuk?pw_bGbIvK9zj8Y|D+uzJ;rKHJ(aAgwmw!L-tSvB2HF{hOx@snCvTBcn+ zEhvzqg;nZl0Uvi9gq&t-UPj8avHAJquxGI`kqJK(?nr@b^E1Zg=f2YnQfj8wQgTMD z`6=);HMe3gII`*qB_qo)W#njg(zD>O$E~bP_Q92@?w;*mwp)h%%aGQCf?LY1Y0_pu zV)TXzfo8K(LYR>d!fX@|Gf_gAg&I(qOl+sl3>ixcvoc0nn3<)7*;!JUp|;{ghT8Kd zGE`cap(f0f&Qih*Eh)^<{SJBBLwqj}v-HF;Pt(;yZCxi0lR8?M($d2EaimaRM++6! zGT5JsPnAxo***}`Lj?kQs6SFh@r_uT>h=>^kFl!>m(c zn0rbM70B+mY@%`6#17@tn2Vht%%t%hXJOoEggnN1~yHkB6Id5J6MB(6*)Ha?$B zpFwFu4eMBxgvx?)4lh*YBI=lz@al>g8xj`nRe8%NxH`97Bx+@Ft_d26rf~v<+P0WltRlevfR6;l z*fk^5HuJ>(QN(A* zWsw(NU02kw97*W!Vx`y$(mbY(sTew>jDlqOJVumm+Pw&AaVNotZNGMO*K>J+)~P2! z%|il~U4nsYThMSA2p&|Gpw+zI=h9%Qk%rB0O9`19bW(p3tXH|s=Md;})aU6Afi7kB zbcaA+we(VjCU$b_)d0~LCrM)*qA^SunPdU(;vK&xCf?yLK2?WoiBEOX89>yQTZHD` zm|{5?t>W7fCXq)oX&ki}B#^L4@F( z63Z`e%bA~x4N>m?)NdBOT=|u7$GPRda$u7d_MPAo?sZod4a>05fEG$aS||-!_oIgG z@1AMcTCgsutwxRF*69v+W3AB1RoJA?_?48jtjmy3r48$xpC*kVg-Y0gX`<5wO7Y-^ zsp7%Vqyqf)OATwmHKZOF4QUl1 zJCZNT?meWEyba`b0znaB4 z5J~wt?FewO%5@n=mMl7QkRu96Sk77`tcH;dYgY}!S2KvuNBOSiw1p5Mw-`+q0g(np z1s69}&5~utnkpCbwaNy+grD||lwxWo#8YD?rOLO-?4_VUn!7?^mw}L7ik0Fpnw26Y z)oW&k3ApODTa((5uN%v0QlxRpgsm=*Y(`U+k*2zDov<#jlBs7TPzLH0jp==gMz71N zkm;R4_CYTWsK$gnCv#aMCu_qE3;E$wUoC`97Zj>ZLC8&#`YWlr(bSN1Ow|__XVOW+ z)OuI8^ffX?sf;w4^`mHnSovv;3Q1KkcVuNpsJsT%kt8`9RJJ`DtCu0KWH7I&tsYU6 zR+0O3j!$qmKWZ_+D_eR~(%D5AiYSZgG%q+W>B;9Ith%yk zF-UGMg6o<(xFbs`M+DAMBLeVNc~sUK3gCgH=;Y zW@(uok@BULoAPC8df&}U!cuSzg#BD>qEN?IJF%JGtd?>Z8|D&@#O#2lP}Ww}8k1Q^8@E~aJ%4(VBGJV3 zR4)1(SY-+8iY5W0k%Y{GAR$wE5;AorA*M8+hH#n;BuxpDCI(55Gdg56 znlNALVo-QY3+*u-?SkdKOF&sI+LV_EGXyWpad>%-;6;j$)u&e^RmGq_twDWC>~WW` znC3oDL3|oPd9pJL~Z5OsFiAUAOv_%bAe)aQzKA@O)*n;BB-3SFIe*9R$@kz%%i7 zMRL)$O+e34C980ix!(2+3Cav+agqNus zxtsdZN`|--QfW=EfGnO)goY<1I9f&kqtPp^;Z$dXdX+8eG-jBGncGn+ng(`-puy-A zltgZ13aYdD%9#W>fJ0OX^bjiR9N-Is)1rF*P^Z%I5DMOWPFJz z`4AuzS{6&I#73v>=m}1qsxNbeNW(z0p}^482)!KUGF8(oRM`=H-Ft$|MhU*e#?#{q z;m}lXPw^5{iW6xlUM9^g`rp{}VgpJlIV5`F8KRSKiKQulLYWe%#7TjMm=Tz%NX^1f zCInhyR-hw>0$sh>b`yz?lojcz8JQ{73Dr7G`$I|Ih>@3EO8TDvi?nzLJj$y zs^(UvT13>QV+oJYMIR!4z8X&RG^o$dqE67%OpmbXslHM1#Y#OYoumPOs%Yf-0| zN4;(-#i_IVhL$E z($xU9vg-ka?22F%57q<-nN`5yflBD@CMsfswZLFg(ZK{`ID!=+C8YXimH`;tH1E21 zKnkkCac!r9L=(FjkVblt?iOYz0mhV977$qyM!5}Xb2{39b zi)Ev;gFvyc{S6@~xFw{yL-3lASGGSnLMYPH0;wr26>Mu^)2^$wPPKXYcDT>ebjT?J zCz=5b`BMp969#OKluc}k9IzQemdTeO;PbRBt2Y%W5{roYO(xUGcKP?kbLK$M9UUpC zKTk@lPf0<`yXDGDc7(8PJS~u&(o*4u7D%TRvL*y&3us{;AvwqH zU`O@t*-Tes)s{(VTCUQA`6nYLoPfM?fhL}oRmGDhbeW*1%48z~Z6+hqB!L-5Lx4Gp z15DNN0`N%O_R2rIZLE)?!`3?nitnJXkJ{?pm}jkgXYCG z!(d)qvtfO4&4m4nYYsKLb`ON0D0v7_?KpDsA)p9C`a`C)_c zyYp_aNl+?Xo_hIF1F|`nfZCZ7aCg25GAVmT!YPZp{|%2dfhA>N01FzJzk*7?v6otu zIrY0*)LZ};Io2!}y1SxngPR-D5j8@rngHe7vjHXwrYHid`4rWq+X(kTSbP}M#fPEe zVzzmLI4`i(88l=SQ%lYVY^ATYxLo{6`Yf?S@(!bEIZepT80l$hf# zWw}e6=C**3-mGM#u|#5A1~mYIN(%@fuJ6r?DB2|qQ}G`4W%iWG#ZCoeE?V%3<@ENA zL99>KAl6@NkPY)Y90t)Ht_d;*^A$^DWXg%W$LM!KCVE;L#EWI99m4QuG1UlLB1q2>x9%bhyI?Yy z>f3GxBjn5lf?k|buidK39cbwC_S=d~{Dz$f83-PEZHjEjDW8i-gOUsYaYDRnpyK)IAy5^HDz^xdrenM!@Z`KjtiTV)wJda zY%rC(yp##2c@vR}0eOuVWUfsiNyp!&S*R?^52m{+)EQ&bz93_x-TN_)+rA!SQ8Pn? z>CF@oQqp&0NW|RW;@ngY)h>V%pB~wP1I)(ZXOBh_pKo`N z^|m>Jg_v!Ska7-Z+ANk)2$OtSrb!N0yX-gJVXyhLyxnXXM4OM7HSGl$Lo~x$sdASr z9K<6XTUXybS(~RXHTnfV6B`VhC3rdc0mv7t#NKg*D zUS>L>rDb}ZrQve+axBU2A&f>s!=PtT2nyhcQv!u^Qlik#5m`ZGSSdy(A8W}}j-yTr zWsRTG2-=iFLdzCVDf^i+LzuG|IH*>vV_Trfa?LaaS zX29#cO*1c;U`Fs#23vO+qP$pDb=`D1oPyO|A4Awyn`YRQkF?dAdwikL6;;FOZv-kD zeE&glT@l5=_LvJZ9Hds1?zV}Fq-3cGC2=M#E=lo9x(kUZ{mL}`wfEsy`Z@gc)+R69 zPe>Q))%#Gdp2K^dh9YCFdF34LHR$J*MoXzLRZqmGWjZfbCNb{)qinM2CBoc_?c;wxffXb4wmh7+8=;$rVF zzAmeEpoB+leVo$=5Y1GS$qo6CoFv2GFzM*}dnsPe6tfnN#smhA;(>jmcwpWrZt|oN zT}CF`fFQT>T%>*LnolbGK}k@@u+Yp;4R*4Tw_p^xBuMOM!w3t+=j|dR6B8TNOJN%H6uBKK3Yq7rGkfLfgSTt}ESPGS- zGEyDVMccB-wVE`V1azgLSR_|3 zH~I3H`3d)c#%JjGjgPITQ%;)8&6AdIs>-eM8PBujm2*BF5r#)lQ_m?LR)<_Km*2cd zvlq(p6vduO+DwFJb&AKHV+K5|%oCFB$!EaBnmWNFzxtTf=g}z&SIH-t__)s$X5NjR*|Eb3-T#Zc1dP=4QS_(#9Nh-#@DHIaGQRMcr#b&D^>F0 zOg>>*FIILU^Hy4skICS==QSS1i}~#WAL86CTQtMGRm$;E66Mo(al}e5)Gehfhrk*q zA1y8MO-zIFCD9Taaf`^SI%2)-RI*2d@1Kt4G2tlMiE2f#l;4{w^BHdHo?m5#+^1Tut}?g2_~+8N+l$TSAJABSnvnTmRr6iwhHMriOm)ekuE^h7z)C^_2xVc%_$&mb~ zVKY>I*@q5e+gX08s9VQtx;rpowmjlMXe>Uaje6#81rCG8=xxzRxn1tUJiU|Sg<~s0?-QDEO}u&$HXK`($pM-QYDM+sAixyJ1J)#_kQ<`uO~Iw(N+e6Wx?AwkVSz zewa~Jn}%FWJ2JBtGo~9-+x(KFCfriYO|0p8MLrRaqOUN@GDYvZk0HdWd<=^`zcj} z=EKP*?$&m(=7hu%A|f z4a;?1QHwX?WIg5gHUv1jg&ytnqob~FKM1(y!t?Ii#22Iby_4IWR?jh{Xuz|#9_{ud=O}l3*zb-< zNmR`*@bz-Cx|2lpjWohwB@;0?5m zVpJ>?3h~t|YZ2vWCkOGUA9s4AC^w87tt0tRvwktUUNuQK?Gv0ETk$5Xm*ZQ}Qibs# zIpUk|$zT|@$9((!M5{5N@_pgMWDwU+(I?6s9Z?5E)VBl|+j*W(NC%OE+qli-_L%QS zr;&zWV{`5Hcp%>~4j4RbhcDaby8H^dWZgx{o>pDFC7($i(RKLny^U@R(Ehdk-sGo~ zvo^)M#o9ahn@Lw^k^t~ z7fM^P;fW>rP_l{QiV7aa^v>(EalFuq7Zxa4oc$}jVcfaX>LQBvz8)_e#|zzfp&l;` zpq#;*x|#eiZ(Y*CA!(aiQFc{ zN^VC%Zby99{8UqiMYD-w6Dw&(L7IbP)arC6tHY(Sv63huk*U!@zxY0FCkbf1h2g!E zkegCvG-I~ucTLA61%H|XT9|0E4iG8g7Y^?Arsap?VQ8In+A&Im*(~%(%ni;Y%p|K= zyU%oLSmry2@u^IZz0pO5N|-JJ193rS;f3L8((W8mzw+lq zNDR|?do-p7Jx4fyh)S*Ay^D)dn{6wMnO7Ey0ev26QSUy} zEp=L_gOkIpVZSzdHtr9k1{Mxv6;)N9d3?~i+wJs{OOGEU?LJ0=L8QGdJ>I%~dyw3@ z^!VxcwzS0%%AnOdlE6u;J%Hno$sKgEku06w#X5U>>2a##(&G%@OOMxVdPI)yot~F; z#0s7?jRGd@)UcRQ;n~SN(_Z3+#bn>u6ytg&*3$c-X4XvBIq88IFS=fNSx!_M!?JsO z+?de!rtZnt&$39)y2V){s7 zhe`6BJeSVqx@WqC&ta^Cjv|!5*}5?U;)myCt!L=>`td<) z)DjhB_+gFB4X?+CtiZJaw~$g<44Ie zqpuNSvs9D&qt|)XLNWCp^oi#>r@lF}f^A!+yctz&-5>U4FClg7D#TT0wp@}{xVnA6 zAjUe^N?Y2b=aywML2Q;BYu8ErohAdbA*tVEPj=!BgX?slvnbl(M{H{NM;p8Kc>a{0 z-x`gFB4w<0#6@WXc(&N4-{9w&;`zgF-^e@dGq2NO>|PH}l~t{aw?<^04t2eslGVu7 zZ{jW4%_D8p8a|iFO=awBcJVxx#h`h1hz)pjj!xnb+$-;s)oGhOo$P?yQ~C%`-SS9a zLSH$r+n3@O;`y^{>+ya)w^v|ZW^=_Vh-R%(;_9F-FF44{i}FqwwKW8f8I|mWoK!|; z_f9f2b)o#?4Xjz-QRgJ!y(sl%cq*H``(T+Gl}&bcC#S3jBepqCvM3SoOLGJX>=x=o z=h`rdPm^zWm1XZZ!1i~1qORvdFiu-5nu)=RkHM zM6hRQ#q5(IxPfeUxH3NSt)8$MGiQKJaHlgEja%KAm*vE_!EQ%cww)vd9lPS;nRf0!k<+Hn>G@ z_0IEgIXRI>ywyEo{Nk0OJTFR?%PNrRNKUpFo{|1S@|}c?){f|MlCBXsqJR2KJtfUP zC80@+dCV6z!eu1;B$hv%OupT0*ULTnXdkG zYsil?ZJnSg)u}W&%+m5Wo0HW>>}wf@FP{y{iw`InoY2f_(4~gBwUESOV>v#^)X_OI zGx1rOX6GWAOK@I$;=t-FDz%JU4b`tkgNW;P3%`L5s z7v`2$%s&kYUHAWF%J1q&r!pzHE3_0xoWM9}W}_{?FL3i}TKi__XZ9H{#K)$t(}OML zN$bAb!tPcEyLr^I?~G64jdArM|u07so{=)0jUu;3Vw+m^v2y^rl1X;i1lB@vCA? zMB0(_uNNUp99hBs1I@CBqb*uK$U4ls3x#(Xx9uKsMR-2`_R) zy`^jBTqnyb*hD@bO}-hJp%_tm+)-?j}2H|IL{-Xzcyka@XTtJnpH3b|Aa;R4z-H*ywIGvA*dcUPaks zke`{r)1srDZmLbkLZ2|HPdCP2!3m(`HMC}!R0BPU6s(dDbG#79oDdVm+}0^vj~j9- z;N*)RHcf(0_DF13oEjtVT;@+uHuc_-d( zGv=v}C#V#&-iLhS+xKVPZVe7%^*hG%2mP^}C*YZCcjPElB!%(P*e?_>x4TwX1}pLU zn)ZRM>aHqtZ9&Go-enncp4dl8Lvg-9@=4DW78${E@bj?ShqH~z8nHT1N_Nr+M@`(o z3mDf&EsibyU;a30KR3kqPfZ1N7BH^r=UXD79pJ?f$X9DiF{55AEW*n{cqIt0nlS4u z_b~NiNyhk+WJ9@#Vr?E;S8Ouz6f>U`xgpok+zjyrcu9ZA6)1Z?W(KHpg0=jX%k^Hf z&rHj@=#t;Jg3~QR(VtyYd9ocOib-1ZE%y(`(iy~4&D1c@s{_Wj>w1o?(Q}W`c*{%t zBLRVhtNgPHuy@n_sJ=&3<<8K6SHgNDO<*_H#}Agh#!mnd^zZ zPrTl27~Dx%0?<{aZRanPse!W|HLf|OJr!ScZ!~*<9$Akp*QJbh90d*t2qbB(r*J zZ`WIScAC+3uY0EZsJL>smkb_yNGn3Nr4MZ;!}g$~*P~`5x4z?3^XrIrZOTEVn$_v0 z6fKV|I=Wb!{fS5g6*VrgFB-N3g7D*?rsrwbY2x)^oWqi%%`(qRl zm!>)v!#g-`MG(tL>L`xy%#AOx65vLC+^mr79oaoz5+BOrx`o#J9q{@+yi^xcnmRfP>jqXlvb@dM~D}>QoG24*1GK%W?KU?u|TL&d+Epg-p4FJFT8vNiFq{ zxbu|n4^9_ZMtk?3N(F~9H#s zD&}SzMKH%`lveuYx#hSTV^*BcU+z;y{cbBR=k=?F>s0Tg&`F-yR!d$yF<|!C zUG^C@Vm7;x*EmLzA@v;$-W!bj0cupo1G#DvS3UQAbzJ2#`x29h+(J2j48U;Sc)4Gh zP4&n$5k-yUj9IA2He@h1SAkE4r+ifBJb7g%h2y^V9@lxwji9{s<^1Yuywy7CFq5$b ztS6o4`f)+4z}E^jm+Z^bM7O!Tx^mg}1e)ZqbHtr;*?IWB$h<~97u!_XM8g$(?ZtRA zNlv*bp0vm6BMs})&#!#++}7PhLk}Y}8ys`}#1Dvj@xhQ^##mk2;>xF);p8em4VF)* zqOC!K0m6;$?BI(Fy(971>HI6!jP#L|w^nE3@Fny00Z;xO$CH5yNxpJpWkOq#wUgY9 zpK6`LT;nPW_h)yWs$Gm%%qB}lUr+%X1J10Z7pEPwSS$vOg}mvuZE{ zZA;1fzP#EwUnK99D`%nDbLPYKHJQuzO2u31WZ`5+D?crmYgaxUbl-N}*{^1M3$IrU zI%QovLwBkx-Z^^I8)wz4+@SO2&tWql#!Z~}yfGnHIb%JF@ok%3fKwrx+zw-~WoMvr zZvQn5H=Q~r);yVH&TsQz#!agxDr;NRxLq2IB~?aydf4TnJkD!|J%eaxZv`7wXTz{^ z$Xi@%9eH*$3&AqfMWn9$KSIWGo6&JdZ8F~7?^V!dGI4~yi42fP&Jqc9_zt(V-@^DlYewjAlzN;x{di}iNI zq9_)cxwVOvDiM0lD%&9J-8_Aa3yv@JXMJQ`YiCFN!mPSMSGo2)=!Mwl@MP$IzEZ!; z2JD4cQ@OHJ`zW%lKhSvbUr;Kp1{6?z%jN*(h1fmsN6BC6QZ0AcPZY%QZ2TQ=^FEme z`Ey4C{}VSgSqJHH@@kHI`6l3|z2;3r>K0hsw(=H+Pw94N_QjM;$|zzZ>@EPPhf+PP zejld09C++y3wLUYHVJkM2_+4FcaZ%`HOO3<3Pk^pgPF0O?XghRaufElb0T-hPwN? za;L)QusaZJf4z{RH!+V-34#=k9u^rgY0_?a(aZ{!PYZV+@GPA z&0Xj8Zi?P>kx}mNymR8wls0HeA%^i2kHa$L?LA^)=xzm>5hKe}&=ACzuVR5Eo z^rPhyT#nLw?!%9BTRknuJ+A4f4+m~Ln@paz*_)Ai?kX%gu`r+4374M37&_$Ipe!Ev zjCKaknxk%E^nWj2qFlF}kf~D6lOTH`|Hna}gg-XAy|CmLt0T85%^h2>wj7?tC{Zu*(@ceDLw3sQMoGP?hRN)+|ZdDUzaOa zys!0~Tu{aX%!J9M8oV#v*5HUmLob+$A;#dfi-;SZRLafdo}6}>g^%U^Ry==qz*~g) zRCDn>n}U9uAQ!?D-O38R9M9trJd&W?f;aOdNH?C>EX7JF@&cv!sV~JPsG?kdz$?Sx z_`mgSSc2UD=T|ETaQU8Bp}OM(k;#a(OTGx=O#&R2ShTzsZ>?jQU**MWUTr_P7_-$R z%DwJL`crxLz`8k7y0rhttgQc;7SPRib~?pa(l=>ie_2h|)^q}9!E(LGzP-#rv05^+ z3b6F(0j}*^L@AR`@;Vk{DwUm#Ucs=|!2Q^qEa?g@5>{HSW`3a28v(5=;tQmIc7a78|b|!tRD+{E&k3XTjMvE9PXXyo) zuq-fj*cG|A+w~X_0~EP3NOiMj>wngrAL~1YPD{0>{3>TNY<KXF>A~_YPyo!y`e2_c>b$P zZzRd=MLx+dWMI&il-Nho(3POuhS?Hct%q2_jjJDH~TIgvTV z1uK(`)jXS67xKw>vGh*yZO(r6wujqWId3qd$y!2oAI`he(qCTST@+V~W>~>p?8%#> z(lN{%jm+<2GE1NIhT{41oG5;xg6Ur@%G~C5ai?~@zIUtDK1hy^JJ-9t)9bwZHNJEA z`t`HxqTAHjk#xI77Ju^=ncnQ@S1*R<=Pb;ANb*0&o>X7CxCP7t#C>Qf#T->)%79D3 z={RI^z|u6$)Hbix+{VH)uLmRt#vay}Y3T>FtND$WVm)^$zH@b<#wsJvviQICH$H?1 zLeBhXi(CVcC6RAb>E)61GC<^i>_e}B*f(-I&l?wwx_#uJRJWv3J^pY0J06&s0rtQB zfthyzr@*HI?*-y_J}|QcTmzm2wt;tk-vcvMp8LS-fMehkI0L>2coXmz;Ol{J1>XJr z56pZ3nE3%@0dFDv_3tJx;N8G`fnNoF5BO8yWx&jjAcyD4|MXb$!XS6^~rX8Xd0ng0@y@b5ifo)Q*#_XO_f?)fI-U-nlo z%)IqeFU)-JCtsNPT%JGjDJCqq1K|;HxO+Ofi*wH~Uc!z(`3&P+niu;NS)Y6R!pt)8 zFz{Kx-vhoFxC@*BZQyC30u+E(wJ*%P9QYf+UjbeM{9n*N2>cH4KLNi8{0#6Dzz+f6 z1AGhc<)8O)_;?+Bybt`R?gL-TSp0P0A>e}t7iN9~ct7y-z&`_i1b7$loxnE%Uj_Uf z;0u8vP_2F({{K=3UD`7NKJ?}bGyfg%7T|S2{0}b7yyB}b%=|w*|6|}+zUsov5pX{l zpZNlD_e=A!q<`=&7iQiAT>CE8vhTbwv-I{0Ge7+u7iQ|fMc^afeqrXDfhU2_0QTW~ z?+;&?`2yfm-))|!_W5r6{Qe&`^gsO(^W3-ijK!a{Pm%Fr;7xx<{ud+j&&%@xbh-88 z7iPAA5261Ro}XjGpUCqMe~h_>=P!TSOJ{!V(_cFCFM;P^k%IO{LQa?aOMKoXWQo-&j-LCvG@|t2f?rLe2C`;Pubj*?emWgP5PZ* ze{kj{(D$K>ywB$;=?*R58+d*)_}{kp-?h)T^86I&Z|C_}c>W+yN%y1n>GZcwV0Bev zsKa6Y9{c+b&ioX-{{r{`@O!`?0ul621HSjAGcynKybjy|_JC)A*8?Kq6M%b!KauBG z@RYK@ji*HZAkRcKgAZzrj=V{|JBP z_nr7H#}i)Gl^;Wk?B+^Itr2^5euYJ^hmZmtzv{smk@F-^kx}I-b;Z?s9pHcH~pYU}L&a~0Uj}>~@ZG?>f%gKx3j7}MVc?U# z{=u1-0gJ#Bzz*>FKo9t@fwutP2K)f<-vhr0{5J4^01te_gEOBATn1cyyJsF+9cTfk zz!w8=0lo$J0pO>BUjcp>_!Hp5H$FJ?UjUy2tO9wU1~_?t-e>z`Amh)Q_s7%y<0aSt8zzFy<;Ol_z27Vm) zMc{XVKLkDuyyR`nnZV0{B_IdXfb&ZGTIe0%9`GjM9|Hdv_z~c}!25y!9eBwVs;3lvK8~_903xU4_d^PaR z!1npY(R*02hI4zzv`dG=bLxcYrSe-VA&r@DAXIfv}GM2k>74 zejE6A68D|hTEJ%jp94G!g#44?67l;$3pfS782Ed@Hv!)V{4nq{z`q853;1Iol<~lK zVP65C1zZ9?7pMR&UuL8dbdohk*y*@!-s-1FrzC0wtgY+yUMUd>8N@ z;OBu~2Yw&;Fz_kgLmJ=;unp`3$G{oz6~NnocLF~Kybt&t;7@^2-;aksUITxbHSp5! zWi9~jm**wo)`1*Q0iFef_c@+-fiDNX7I-`GL%@50p96jk_+8*nfCv6DV*~h1;1S?a zU>mpvw1E@g4ES>3t-!Yf-w(V8_*vln!2R_5SkixkeEu!)VPNK;u%7}%{wwYCW0}|g z7i29`?#F-vPz9a=4uLlSZv@^1ycPHk;QN7}0R9E=%YZB2Zxa3x@DboszVE@A&juv! zGS6276`%zSfG-8U4tNLfqrlGrPR_p}{2|~a?=-Z(&U4;|h39$@7Q77px_~we!V>@G z;NJlJ6W}L+_W{2J{GWitf6}|q6<7r}fjvOz?ym#>Moaq#Jil`y{>Lr;uXz3z@Fx@T zGv9CIeJ0OKz!N|fXajeEHv!)Syc2MF{siG)0R9)?gF^oSY%{>czk={O@D%WQKp*%L zz{P(J;qL~14ETBA1Hc~xF8;y~G8X_2m*?dG&k^1QI=~x&w*YSk9RH6J{w3gl13ux0 z@aF)_z^j2W;P^h)&u5U`osj>xC-DEby?24Ldd?sJKg~>aYFgXwx7}@5%R$4WDbq!g zWbRFj8Z{AOn#-AHG|h~2W@;itB!m!RLu|-yO9*4Nv`TIvHe|(y*w_$4b}pa)^Y#9` z-=Fh7rGAA+d%f@X_vdpy?}c&ZJ2C$;&hFoxuKyR|y=3KKEBY^>%c`z{ z-q0ULfl0@B^p$WvTnG2S6R-*X0d4S;hd6_Sqv1p-g&A-;EQN<*1DG)1MgK8;1)Uz| zj2eCkePIY>!+0o$X<+=#M1LtPf@N?&JPsS+RoDvK;d4lMg!2YC6pn&?I2~$W4qOAb z!~L)hUI&TiL)2#YaTEI&Fmdlw_m#l^s}dOazogyek&n~b$xAhMjW7=u!5wfPtcK^{ zb=U?wp#|d0y~m?GJAfechY@f*#LNA6HJ?ga%c1UHO!K+g-#o2er`21v`g^TDtktzz zHRbW5HovLW?OOdZPR_{3s|kPf%KE2TJy@%QwVI_><8OSNxirpfC0LMZejE6Iz3L0TP*kLWkybSJzCU_EFfp_6^NO+v*4sZbUhYYa&|2y;(2(uK< zhB!D0Tmsj_o$w$$39rFN@K4xp4QE&|7)HZn zFk!W)PRG3wE`-bBTDS$4!vpX*JO{7ByYMMAL)SlZ#s&vKe;5uqFb>Xy=`b4>!X0ow ztbrHdZTJLQ;YUw$wg_o(3>*)WU@FXji{VE29kiGJ)!07|ufzNB1$16Zox*{T2FJlE zFdfc;%b>lm#BMQezq8!`g#I~r13rPIb*zt}A7sO+Fdfc^D_{xOVc(1SQCI`dz{~Jg z_z=E=?4)pgz6Fdno!5i>Cdi!TYcalAfon!@oN}LBdS?{~_FecRKfl_rprySY5|sthzn} zeOQ|>LA?fUhGlRsG{KYbBD@LP;Y&!^Kp%v|VHo7Vc$fmUFbA%IJK#ZB124hb@GOjWGzmNM)Xoc>t(0<@BI0{BX5mdnia0T25zlSxj0p5g<;2Q}1 zg*gNchCz@4g>WWRLnB-a*TEfdKdgb5;4SzBTcmy`U-{4C~evSHv0T7>$qp>>y&VVpn z3QOP*@C3XJ@4)BK`E|}Jp+Ag*LWmD*a9EIZs@w1 zJt?HZ2q=KlAq)d!(ZSX_#6`7@Y-B2)PrC!WNW)3)N-hYi(nz#4iCUukebev8AMA+>*1Rw0-=_qgq^%!c`}2yTUYU=^%~&F~?71&Qyl?}Yu~a5x&iPuh&^@%TFpDq#j( z4A;T!uo9kt7vW9#2)=>9yZ>5TCeC>E=Y)3<41nQ~1BGxJgrE*Cf<BEGUFB zI2%m)U4Z^FSOmAh3TT3-;1zfqK7?J6^kLMW@!yg9Q)E+M7-YjqPz+U24;R2?a2?zV z_rQbj1UwI~!MpG=d;^_7VqXitg1&GBjDTD?3C@IRAn9q;YDa0?XaDajfr}~Y>);M} z0R9Xc;a%7T-xgEne^9TmKcv7A$b@llI#fVC%!TXWE?5QY;Z67yoE^+Na1acJ3>Xhn z;ape%x4`|d4mQEN@C9`Gn0^8Wz(5!U@o655-Kj7Y8sQ4K4IYBE5HJ6qFuzVZK7?J8 zo=-S8g#95MvfwnB1{c9XSOzQLkMK0S3|rvu@FgUD%2^Z~0z)7JPJol449#FThs#0s>#Kr-s2W z8YaWpa0%Q5_rX)}Hhc};cX18?De#|Y3;W{SR|2L4hSCOe;S`t-7lLsU^=iyF!`-k7 z*1;xt2R?y+LYFV;!|-e94@W~TOn_pT26mXXeim+*z#>=%55VK_9J~(iz(~cb zhT~xh%zy>34E_ik;S=cbHERGE1rwkGX23kS4wk~B@GQIm@4*+)X*XxRkOD(tER;Yk zoCjCHO>ieX1W&=M@Bw@ciQnv*&mUv=D>wwwU??01$3qd=WnuJFItPu* zf$`U#`W)_?VHvDhs=Da0XPvxo`#C z2)~8087zf|U>$6NZSWNY+87rh z4MssBltMksgT?TBcpP4aZSXa8cbR7(9kStMsDjyWHQWIY!L#rddIil7uCAmLqrdO2JR zx4=E{AUpx$-rnB^+&07e@ENqhkNAXTZ%Bb7;8+*~6QLX;a1mSww*jBj46K0-Am6)r z8};w-57-4=J5xW93P(a7Tm%#04f54qx{RHazp0DK$WMhZoClY~jlk!yR2cW7^64j4 zX2$<|%p2iN_&a^#-^TR>EVj0bYj>;7c&^ z#j63j!pO<&rBDxm{$R@-g*gu? zIL~CMJ5{r)xJIq2+PmX=LO~%HKMfo_$dT(-`OK^OIBa%p-K=oc)XMtc;PgT1LAg>V zIKf%R)6=K%s7QlWTb7+p($KSwqm= zw4tsC?Z?MpXYn0%xja_O4desbB*&yo?iDC0jnr22%_J@sdf zAg3Fj#VsTEaye{$h)<-KhN|VRO1^h2PRiVY+thF|U+v|4>C;Oh(~gx-U~5kmo=4#=b>S*L8C@SMJW*fYqVA&N6VT~{x%pBu9;vIUt}d3G zrB-?QbI$1J6dvges0f!jY0mh;&ZI%kq`^vok>HSNkg5i zAx_p%r|>8xNrCBWcxQOhI&owo!nd}oQ~A7eMTK{LXw+$DWvC`b+~h?ZBtt6VxO^%% zsUYK6c(h6a)rJqN*3!IkE9COY3>~mj5*}De5qpZtoan=ppQuufqE^&J!lKqyL`11B zb98wQ8szH+`??{%Zm6$2(#eR-2oH5KD(e~=oeZwaQE3cO`qCV{w5M^uNJEXuhSUxX zi9A^CC~az3SHJRK5#FQ+Ps$G)s|P)XycK$EiI#e1vu8jW$lLd(+n$$SqHkX+t=`IngcPfU4~mPA6S z9j1-$<7KLS5mjEM&+JW5(q!a1>W_SwuB5ao6{LB{r|!7|LV7G?hgUn%8EoM-T>_Pm z0li`8!Y+YlU^&czNstZ!Xu|!~C0zoG;UVaHYnQ+gPz1B#cDVkQE`dM7yO0Y%zm0D% zqJDX~SdYE%1uxMC$^PcYM*b6H!PM_>kL4lt<&Hre5E`?Ni*FS*((7Ea^RbGvAo>J@PT}hC>yh zaERN9V{EzHlJPafCl#3SpYbluWP=yJOpyP_5 zp+?_=LT>$Xh!}ZuS(;7_DV&b~nA~c+sv53hk+0nwuT?c%+Qf~@J3$cXzrD-JXRHh7HF#(p9 z)R$GpXOP?8VukemZzlDod2u(jE-1NjA;wDuw^{JnOzm7lbCc^i;?2d}p)=iBaxp9uClpuL*47y*)y?XQV|tFcS+CgSzzFLOt@CAU<%-RUVlvN7e>8n#Et6lk zsw}p8?uy!m~zp{}gBouHNVo`oXTtaeHoO-jrXn^D%g1Bz?m zsv9NEnMK8sDz-b`u!~7u1g|rMQA$$Fsr#9tg0xSrNi3Fo?6iQ~1xaY<7!O>ATg(D0 z5>icyz{J9G=Sp|Ew3(}^yxt*cp(opBuIMPPE7RduvOA2Lsu>F!N~W5~q60C(u;nXL z{nO}+Rgvp(ooCYc20EOC>vXf5|s?S zs#EJ!NI$BmDx)uH3x5z+O`DLIQKj`2Q&cl(4AGXS_8Z!lG%_s>Cx$5dz(=eu5Vz-@#CJMt}!Z>J{lj0y7P^B$TUS3Wwlgs)IwEPTs?VhO~Q1+SW?BD4Hoz zU5l<0K`Y_Vp*qGcf`w@WzB_k(8!vL_I!R%ltZnL;u4M7%jVao4dV?xjZK|)78=5$J zAeDZJa^WN=P~OUr0`RVh@|L-Nk7tR&-L}yR)1#^1O1ZPzv`;PvZ3suIW*Bos?j@Im znG|sWmMqk)^#-x3THIp{_Xar7pwo}6voY<04tMMT)E^plU6a5Ka8Ppnou;e9b9O@gTgGU|36zitOW92bAenrFa zgHe$T@{JNs)Fkb}cZ!Hx)Kni z30kH`XD?r&GHZpZtYl=P#{E=E2I#Y)2y>QiDM3^7!_66LP`ui;5$5jVR1TokZJP3k z!`#itlL2-+>hM2Xj;-WIXYNFlM-Wk|5#7}lum$6?osfV>KMBGSSYE|G1>uyU&$Xe|JZoLzGokRkKE`ad-;h>j_UTVN`!4 zfj@bS;N3x+GGGv4%HtWD&^U%QmU#Zw0W*(Myz>V1YGN3~WwV^|XmQVqJOAWra4!U9 zHF!^{!Fx&#-BW7lo>Id-srXojdy?@n?-^uFh~*8cMM}=X-j)_^EyJl!J@Yw-R?*x< zW|kNatiQETqg^V@G1|JsTe?fwRWr2RbRLTtcXp=6wm}W(NY;c@=MkMByf@onRmT~O z_95Eh2359p`9~^EK#@w51$3$l5^9C*FQldTY8TT0B9m{lQlRiQHOeUCOlRTpa0 zX$Rm{(H_<{ex27faAmSycIkbME)rQx4jvI4sU8@NvMh(TXDPFGyuF-|6xXvj*fZc_ zZ);IjVX8=$Uph~Y?3}%_alE-f8@xhdCr~ymx}~H(*wv~@fROipKQsb-Vj~45#&7)EcHSJiES1lpa7zdwv7A$7v=%h}J$bFlk3OOwd znoR?bSNq|lpA5#>9usteWckF*>@j2W#uc+5D3-Opcj0PoI9$sJ#fUf}cuGl_jM8wN zpsFlqB*Wgo@=$5RR9TRlA$gQD(ko86ZM43&HdtCUb(9nICwBZ#tYOxuomxW$lyjYJ zc)BY2?oO&)u<9)c%SmojmpOLAm|!+mHMKPZd_!h=30B$t`^*2erM1<;qlWt0;YXrn z8Yvo|IW~CIQDWd&nypXp=yVJ!kirt#C15&Hj!;X2gV7$(-Oa{5`{<)Zo0AzlT7_l; z5JO?X82%qudKU8^>k^eZ%cK%Du}1c-<-tOZ!KYgKeE3mfo`YW_{?YtqDy%Ibb{OEqAcs z-2ryBeylV!j?}DZeGAn=Nbzu~D-1dtbR^4C83qj=-j0ZGt7IzcQssJbh%832Na9X1C)7;t)v@tt@DK>o`>i!I3G0s~Z_fSzpRBa)ju# zB$_Na2oRgx8ZRNil;H!1%W8HcHnJv`0v*L5D;pzwtgwy5l&a1(gU22#w}Mjv+C0iL zc9$r;TC@jois+5y;$%;xPfEM+G)E|X_kp6G z-oHQFwC*Vp&oX7e5VnNDltF{o%%vPMh`z*{Xiv-2Q_ArsJH0s3I2%u{w4|I@=%&&Y zL$a>Q-pihqq@+s+J}r0rIQ4R!*SctNp-SWCNqGNfkI9uXiyM}L`p;|hal?@BsB2}a z^cpip#X4rwse?>VQ)`rrcTPxIDxW!=L$v3pMxycR$%z?pbYsA$a?ET{aq86$!KjhY z3Cf!%Y{!RIH;zD|7zPehisXQhD@-#$VwU_i%S{8X1B_9d^pghP)tEhJHJAHdV@>MGj*dePhncmk}9y@0g4Z}yy7m-=3n-m|9h_|{7A$0lpOnAo(1Ctz}?BQr)5mwK`!kM8}z zrG2nG_UvNBc&-$UM~iuOo>*)`Vp1_PR5C5LR4f~L^vEpdQ)TCq!XiZ9eb{ySR!BP{t}`5`>fD_?_@ zH$slor^6r^3`0QdhQU!z*gICQhzwMx#8b6eT~33T-dM&PpcQ2^or=gzCq&Ld&rr%kbv#7ZGOR0Delu=`t7HKcDdwzz4TR_=Eo!~2 z!l_{BW?ACd;7gq<7)j4oMgVmrFORik_~eK_%u<3iTDb{JWb{iDaROc#tSxwo(B64{ zDgvBw$ZkPSaAXu!O$$v$Z9f%0&Jw;_3R#CaI^Es@iQZS(^6JSl4=7~sJ0e&yy?%tu z9BQ%|;W#>83D`fq(eIS)B@OYS{(+O)VMsBW!xDNXuK>t#NpJw`>zYtat&H43v0?M; zjpEdW?Z=ygeEFdApt_N0naJYg)vUD_aXW0D_?Op)<@q`uXm_NK`CP@|?ZI^vV`!1` z06rM<&UbQ7$sC_&Ubr_cb8wpXivCb(m8#6ufxbLg7%nm#5SVrwlozu(;yEY8KEppm zU|Ur)wO{a{V}rxJcCGxAkUFM6c^Jd$OdSuAK$)m1C(eAlM+!kNy=huIRrddSiM8hCwWnRic4UvcB0TR@C1y`C+okEEEGqk zl#d!o!bXh4SDkvFY89? zr2*QfCMD%Z@M<5&3G%#6uh#6GrSSuzU|C6xcdpBrLyGD32r~id+)E{KPNNnc>Wo4y zvfBxaGnw(S_KXTe17WyeB$m?F8+7?S6A#m*!<7UpISmb-u3Q)wm3oHstf+qy5tXkA z$|I`klDcp8Q@{b3DmOV>=_uWFuTaflad zLOVr3A2x?IXzUXrao|+N-$4*|H2)ozmsyY3mRXe-^|#k@YuB$HSG}5{s(4i3_q{zm zs0l{(>6mixGA@N09c%p%rRCA?)X7Xp4G3O(sS{dxIRl6q(B)N2T8h^;<3=VuC)+Jj zk4g+*IwHF*Mf;3eYN$RY!(b)vC56H&{o`u*>6$m`4(1ncmscs$m>P4nR8TqvBk{`u)vaP?zhDV3Q!?5}ftFH6dLA60 z#uGC{(}-kIq24U(?pWn)W(T#Zks=?e7Hldy870~&a#dB%m>Oo~s&dBN#;WNJ(>X5G zzlPv9i456HNHt2(lwk*TW0hS&?6GoOeRy@}HI5EyP}fRJD&W%>TS~>aB{TDi71=cZZQ*EmI(8uvr`@w^szV zj2gz<5z;dH)VTeSl#F*!9Cv^$wP@Z2p^dhCm>efVJFersMDk@F0+;BsPILAVci`#u z!|(4;&i}-3X-PT#TAq5cJn+^;vH+B_tF2=_q2707>MB>yAoOmbCN$GK7gtB+YLUjd ztix8sI{KAehk7xWQ)Bi1uH~)|pzCURqnf9UYzwN&)Kg^bU%UIiEMU6lcZ<>RjeD3y zn0iLcnXLSJN5%qk{JZDjuy^LE#tY{C=)pccSk{^9K%PEcPq&Xcsw~R*6&tRtEU*&OeL<9m%;ss_E~^!Fa8 zROaQ-Ms?i|{!`scFVGN~AS)g<>v>NnWL!35m0nAy9HI`8DdD^vwG;6ybc?r_jbaQ7|W{o-J^=BuIyN^-_WAu>{j36` zhv%hDy~tj}QCNG4^wY@n5k1x2OJ4MOc3hy6UFXCqCNzFr#XzAmZiHF)+9%KEY}h`v zR`sX7Nm}-HLL8T`;s|fs?5+HxdFx0tT304*UYN`wdp!a7!lSnRa#TlIR>K*-X9fAP za^j@thJ0;GxA!AoW*yvWc1cAds{QA1)Az79jr8h z-sEo9Hmr8&57t_bp};I`g24_RF8N_h2(|lsNxK{0YLnfcM}(fRGBUHvLcWB8;&(f; z{HUK<6uDy99Q?oA4Yw3d`X}mh8y4#sD}a=`X8nT@&6}T_vbEw|0I_X|2X($O_#tEun4MP5{!oZ z;nOF&a0g$Pz#VW6q`|Joy9C|?)878Cs;^K6e}3$pU z=Pc}R<|9JGUto-YI#>*1XV{4TBkY#GNI!$k;JoD7iMnK{|4iK~;kQQs*(0UB|mzn~i_tFJ7I4oY+a+Hb)Sq@FeAJ^xs!a zrT+Kk=ZA!C!u?mn_%?q{9pu~ii&rH*#?GWIUd^XG=5Of|mTE z?1C94K`QL-%r_E|k3hmN`F7&|_(i=M#P0iWK7P{s@ZD_K4_XOp2fPW-!K2Voc-wn( zzd$d(84gomIBe!)b}L~q%!drv_)||t7K2JtIqu{VC=)j7z;+kId22*TJI{Ndqz-+2GG$+uW_`@b!3 z-z7hXlK~Z%%+I1@5T|R>TaX4)`jqfvK-iUcIZjH!n#eU@g`VHh`HwX88+#jQR0c)P8K($5HE5^B8L_cf>f8^ZX$asGFbpP%x> z%kaNbe!g#79P*!@Mf=X&lgbY4Cv{-oUKsIq`R(`}VcBiB^qbK?qs>jI%e8(n>U?Mf zIS5+%LLksGxm%zU`dYrv7Cgh#pNGDO)?b3&(fS4G`)K{DbGS!C>wo$pQ@+;UjEvFW zq4f!be-ScUbzJvi-&@P~$9}uEzX^R$ZD0COG!4_R-=Sry@Vi^L>6yd<`woX=5PJ1(KmB{0x2t z2SQ&s9MWMJjD#%6hXN>sBKYf?KwuK;WS9b95bkbhg#^r9p$Gf~eh%f(#FFc)QvQ2{ z@ArnNW4@R7lSiZ9;+=*}1WcKnhyGlc1M}c=FmASb753M{4RABu3U|O=@H@B{9su$4 zZTT?aep`8cTYgP?CGFpqZ<9}c@nBy6lPBgp5}Xyx7$DCO<*g?FDI|xi@+uNXuHM^Y z?H`(&jG!h25}eq7*@3L2tN{O#V(r^EofJrS_V%w=r#=70$}dc`{v|B@PXGK664IUC ziPpb_-rwn;@h`pl|M*|0gv6xIY-qZ5Pww%f{eIl@CqMnKUO)T!FM9v-SNr$*^#KP4 z4?6gezA1+umfG*|{%HdS9+5t1@Q|TL4m)c2(Ibu-dF-g;GD=FzcvLjCvg)j9)zkUq z!`b0TeZ!2IjkC@ls;d`XbM1AD zuD{{N#W&sjnsCJp0`98(w(vrHwDY@|R7ozV`a&H~#wOmbc#i+tzp9eQ(?QAN+m$ zhadf8$H$+1y7RNozu5KVS6}b`=AX?it!=LJL-U`Rm7SBDH#&dJ@h23VICfm&N#iFJ zO+5LONvEFX<-cS1{}%b@2UIDMm?48-26=C|@rsr_yw@*VRq$RGk97FVn!JC(%csVv zyVGg^#A7l#JI>v7r9Rg-yOYt6ys6n;fjS#?6Y7TFG`qXS{+4F9PZ!78aci@?0Cn|k z&F(hT9!s0uKv&1vf;t>^$L-B-5o*D2o848YvzIlyyHI=F)$I0VwC-_tvs;e3WCiY` z{-N33i8}JWX18}Y+*dZc8K?{HZ+4f6xvAM*hq~p_W_Ki`;_5#(yLG75PmoSg*EG93 zQ2RXD?4~6nzqZ+}MBT9t|EL?*H@h1}eYV-{*#r9x&2AxTpN-A#9MtNUo84zndu(cU zTTlyLC7vHSP77)!>XO%*-9=(XU58q*nesp#`9`ywx}W2$*g|-yTi!+vwa;?fp(5$XoiRj3QDY;m`t7F^xp_W3E{E^2WbQ43ZPpQw+t zxI0m|tZs4B|BL)QK{%*Oo@#NIqRxK0#odaU_Iiukvlsq9Y;iMC3sB2ZSA5jsu0-we z338|{pCR`%)X$MaUESK^)}i+4-0ChxoqSxYyA^c{YVV&@UKy?KNYv`lt!_2yj`~)2 z1?ueCt?m}omP=dRv|nJJ-|FV0Za}R@?Q>bHyAX8+>KfFv%Uj(YsIyUf^(H-6w7NN{ z1*nx`UeM|;My*C|LfwJ76Lt2Lt#0ZsNzXN{Zar$BMXl~K)Pn0tC+g%ITHQXsBAy#t z-ASk$7Pq>K#C$X9-=A>rAYG^hsMV;eQJ14`L45{w@^4$+-Ka}Y`}9G68S<#Jm$$lg zs7vlAU8sE?Bp+f%-HzIV+Vj_#A8K_APz#z`-8raRP}iZ3e6-cwCGMzw55WIpt!@$O zmesB9#i%=;Mh>;*S>(k1Im+cg{Gkp-U4mMUx&?I+YMEep>9E4 zfVv^4&E14La&(*9D+M{!98r&NbL&w@p3vqlLS2B`gt`HBGwKf1U8rdVZEl}Ki4S!+ z>JHQ?s3T7#eAES~t5AE4Yjd}v_9-Mihf!W9wYif~H=xc(eHnE*DqTVSbvkFf(`j~~ z)BZh@lIC}!oUo;Oou&o!|E_5A_Y34+lJKL>3H9BdLS}Sw;%iCW(L9xzoN$}bWE)LJ zyoM}0)iD3MX7?ymXY_u7ED5hz1(%l<4o-_;DRTJG6~fVb27$Wl>5S) zo841wxBR(D$InYlIDwG7fJP@L9N&HI`X41_?w9mbZt`SbpPk(3>qp1f6ZS}`m++aF z)9vs{=)9y$6B9OeUz@o;^J$f_%;aiqlETPj8gwMDtMET(NwYi8_CID`5<%o%nm8ev z*SusE-!|m8GXL+!ub8pi0D^OFBPI`)qA z7vf#ay6qM8G3h(mPhUc&AF)?=>9m0y)_BYD8{>!eugYI~x+$fEIlflfeKmfYRyDg{ z+3}s=x5JufJIqfe>vl6#?O4{ejSuPZ%#>%2^qTCsovVl{+HVrB)JCZ|={VBvcHn>e z!>l*$_zUNDo^WX*?d~Ky`kA&t$|{vQT=Gb>`3ElxYr8WQaU#_Az$3jL~D+?_xZh@0qftN^+CWRbeTEl+}E~St4tG zJKu~6+4GX9+=Q>Jkm%vwIJz1?fu~vT+i{yZNx0AQlEdugrQNiLRKjQx|IakLccb^q zYRufElNjgcn_(U&kxgZfvjEwp=;LKCv}9#`E<)B}zjBf-J6#Pu`N{cu9?X}NII16B zjC?xsGJpDENAv!Ym60sTyTs9ipMvL_-FNIbDEB<30mk$TqwRNea$jV&Bj4lsX1Bzy zR~d^c2wjhx8OZfyuU7OTbCX>UMRSuVlC>%wBAb&eBiMR1D&{A%A~J@o;?B@E$@eSs@KkC=rjEyH#zY=GZ=_>f}hyg3SK5bsXuwUwI#sbEvC-rB^Jz0N*wG3 zASJEJK>GD^>ZlfXKlWjMoMtSWn`D(* zRu{WGdBf0|C?1$G`YmHcYt8p~ST)9pGg@#J%?&~uTKJnTSS9&T|TYd;TP z*m;maT>J!kIL^?9mOa*qYIyN7dn!>$RkPai_6$Y%={bXaJZ3*1lSJ67`+DvE0P~UW z9@6%&yCTUN@HKuPaXiT}YC_a5EGRXLxo z%lXN!R{YtjPi#cK*V-2M1J08CdO1bQuL@Z5xyeC99KzkSsm1Lldb6ftUMTTq1t%Zt zzQ}Av=5#v`>>rBMy6J*wA!jDnMoW;1VUq3Sm46*!?RvGvov6!SjrRpQecSEw@cQ^t zhfl@$!%Swk?cPc7FUdfjyOa@=j0IOK-Kf_cK2F`8VzO=tQf$ zy!50apR=8^u;(H(4&QE%qu#hX1^N0V^kkFm1)`14CA3n1bH4=TzO6tMNbl%vN`<9iJKB$Jk{(I=O%-mLR`4 z)asr`{C<3=_e=~lINf&ss@txEd-5K>((XREXIHIlIXLks-7T`%#9j{&wN- zGVzzE&*aWhWssdbNw2L>QEF!LB(F?l4BL*s0?w=_*>j=pw+&YE>4)A#`m~n z0dM`Bot%(i`JIE`BK)SG&vSwH{5DzfQrO-`!YgcMz&!0Lg*`gin7l?CJK5T9xygB6 z5>)e2^X6vKu;2pD+U>E%r2h#k4J?*|q&dJdjMej~Q}lKp2W@M^u8Ny^M za>Bf%6QfgKR`NOi=>@XVA1d+NgJ&c`+wYiYdgp8RnYO#P&S17r7-#2C!e~N%GT~*| z^7L6o7!|0DE%IEZ5t)!JW6EHBG(;I&0z8vhjckeCKj@DMGbk$wQJ<@&BbUT88F|*{ zmy^iJ?%tA{gj@^HXwI?QfXK<2g(Wu!xgwt3%(By%P@p?-rOJz>Z#i-+kUPbelki6C z@L1qU9c@Hz8*(?<@#^_D@dSIlkeRGUV>L*mGut`m>8J*$0L z27WT|vyNv>SD^RHWAxlanGPlK`RbHKqR393fSu@al27u-Um063CXAlHX?0K2Vfgck z4r6q3VT}ALyV#imx*^a&JnP6UQ8WJdV29ZZOxKa z_c2@EtZ~k>iy=>~adVI_ytUO0*z+{ycBYhDg5=ulj%6G7Uh-+G>E$I)RLw$_M_=}@ z>BKi&%d7GpH#f1sub<<+%En#7FG4=!JIYJDyBPUG4zrfze1TaaAt>m~d;!teEmR`(3MZLyBNfdo+r#XQa6(;ukoF2LfvXL!_$b-N>#!pv}F; zPDjF(N)mh~Aeb1=&|1 zzsrtK?b(i>+c^>|FMVVv@^ez!V%LgidxeXWQ^bEuaW6#g*D;UFMMCz{5=J938#)Ms z>DpP0`wrYi)(-=%tc6wuDIeU1p!eM-s^IgJ$IF02{o%9)xxk@q?p#|Ay@atFx7oNI zZo9E=k;6BWPH9uYgP5O?8)wV$j3jSf;uL>O;eb`bEI@WSvRSq)VV3AHrPD~5^~h~R zZe~n7RZqXmx|^i}gQCbTMYeBhTkQUa)i!5+*}g3C7a%L|wFLUL`THF;{^g5og(W&o z>7|silRbOUb6T~)chLQ*&%uOuc$>d2Q{nM6O2y8S%p_InC?DC8$aY5W*NN_MJ+Z39 z{UF?v#C_l2z7p710{co}UkU6hfqf;guLS;u5^(twZ$=fpET;^oqwfK8u1pH>$kXXD zp5NS|F1Ro$@MW7@+cY;RAZwNK`AGp@8FG>?P725)uyF~FBYPWJv-}L?PaeJPOz*}o zmRPqD0msS?k5U|t+MJbFBn3o22UWJwvUlL9-3dUO>(*vqPa10_T{}@%U7jRP-}|o@ z@f%O;$055szR4L*Rcpv%?xheKf)}G+gAd><=&}(1a3~CeJUAIDU}4oS6b$=m|w8sk6`|-gSex824>6qv@}~{In%s zj(NFd&cyt%WtMZowU#*t^EiITiK6}*`2Qu#y$thPn5E6jUn6{Ana5-P(lXa!?zDjK zS)i&vG(9jI;|w%MUm7*b8F(+tJ>Ljgs`T~CuZpHY`udHQS^E4^%vXsztegA<$hikI ziux1HA2DBqx*2yl?q82t_L5sM%UBWU76@F5x&yO}8Jo0w;HYi^8GGK==3ba(4EhZ7 zeAFOjUQ=*dFkg(CftknlPV&{Bxe&9AKl@{r_@-c%F{ZyZS7Vm3<`~SEpf+NbG3Nx# zlHLWFWsEvq%P+z#W7#zAz7#W$Mx67sc{yeo%NAjl^sK}z`{(7DQPiIt89!>7IZ}0A z(DG}L=P1#6Q=2zpmObG|m{oaU<|xYfTAO!Z=J>_wys)b(zulNQvT*unbFbmu0zu5f zFr%oygZV!Pv*a%w_r9p7YV&Z+hhnb6Eb(PvmVNzs+PwgC8s;mtdlBXg%-3T^QGe3r zms;j5%nxb*Q;^Tb{5WRQrgJbqhgr(268AjRx3qjC=3VG_Lo>LLcn!ZXhW+3t@N?K7 z4upf@Fc<)<SM50>z_w`8D59C;P3D;h}_rEruCiq33(6r^diDVO@}NffJtx` z%z~@nl!;vfW4Ck-T!Vfw+zx*L@oUVY7oNbLpG7PEdemo$@5o5kz{%*v{{~C_i>0^S z-okzxe5Bp~!5G|%{tM_tU+M|HAqa;9Q(j<{*5_)yq@@Ub354N%xC(v)?YXVMezkU! zvfqe)lQv5_wxBn5i%ujA%uT4qPSj@T+@0UrTlROq5C}X3RC~LB!N>Rp8^6aF$92g4 zWiPTTkLl`vGvGbscJ4*i`891;|IYuw`CS8Tdy$>;Nf-Y+1Ic^`;1|$tVzCUib@9JF z&=J)Y((z8y~s}aE#LUk ze_tcloo^BtbG&NH9)Mi`y~xh_I9kU?BX|5>WbJS#Be%DDD3@mM^sxBW; zRqhNF6IX>+Is?mR)kJ1Z_f)y2O{|!`Od*PHuWO4Q# z|6~mzZ8QOfvQHU`LFRSyXXYNUll6+oozAa+S!*ylMW7+;A*p zeI((@{%8SmX&7XUB!40&427@Q!-$;hpPCX`_o9!N8-<Z6 zqjMI>dQRkI-!=z1*|(YSB(KsyrRt2F?DJM4C;LB!%PYU}ZvlZpYeUm_6WNz6IXMT|iQF#i%%8{z5{C)T8BBg3NOGQ$2BiOjT74T; k;+J^09@8!G%wtJT{z2LiC8)K2SlTRd?`gd#;x2#xAHIQo*Z=?k diff --git a/packaging/daemon/Makefile b/packaging/daemon/Makefile deleted file mode 100644 index 53d1743..0000000 --- a/packaging/daemon/Makefile +++ /dev/null @@ -1,63 +0,0 @@ -CURDIR = `pwd` -INSTALLDIR = usr/bin - -UNAME := $(shell uname -sm) -ifneq (,$(findstring 86,$(UNAME))) - HOST_ARCH := x86 -endif - -TARGET_ARCH = $(HOST_ARCH) -ifeq ($(TARGET_ARCH),) - TARGET_ARCH := arm -endif - -ifeq ($(TARGET_ARCH),arm) - DEVICE = -DDEVICE_ONLY -endif - -INC := -I/usr/include \ - -I/usr/include/system \ - -I/usr/include/telephony \ - -I/usr/include/vconf - -DAEMON_SRCS := \ - da_daemon.c \ - utils.c \ - sys_stat.c - -LDLIBS_PATH := -L/usr/lib -L./lib/ -LIBS_TIZEN :=# -lcapi-system-runtime-info \ - -lcapi-telephony-network-info \ - -lcapi-telephony-call \ - -lSLP-tapi \ - -lsecurity-server-client \ - -lbundle \ - -lail \ - -lxdgmime \ - -ldlog \ - -lSLP-db-util -LIBS_COMMON := -lglib-2.0 \ - -lvconf \ - -laul \ - -lcapi-system-info - -DEBUG_ON := -DDEBUG=1 -FLAGS = -pthread -Wall - -TARGET = da_manager - -all: $(TARGET) - -$(TARGET): $(DAEMON_SRCS) - $(CC) $(INC) $(FLAGS) $(DEBUG_ON) $(DEVICE) -o $@ $(DAEMON_SRCS) $(LDLIBS_PATH) $(LIBS_COMMON) $(LIBS_TIZEN) - -localtest: - $(CC) -DLOCALTEST $(INC) $(FLAGS) -o $(TARGET) $(DEBUG_ON) $(DEVICE) $(LDLIBS_PATH) $(LIBS_COMMON) $(DAEMON_SRCS) - -install: - [ -d "$(DESTDIR)/$(INSTALLDIR)" ] || mkdir -p $(DESTDIR)/$(INSTALLDIR) - install $(TARGET) $(DESTDIR)/$(INSTALLDIR)/ - -clean: - rm $(TARGET) - diff --git a/packaging/daemon/da_daemon.c b/packaging/daemon/da_daemon.c deleted file mode 100644 index 10f6e89..0000000 --- a/packaging/daemon/da_daemon.c +++ /dev/null @@ -1,1670 +0,0 @@ -/* -* DA manager -* -* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. -* -* Contact: -* -* Jaewon Lim -* Woojin Jung -* Juyoung Kim -* - * Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* Contributors: -* - S-Core Co., Ltd -* -*/ - -#include -#include // for realpath -#include // for strtok, strcpy, strncpy -#include // for assert -#include // for realpath - -#define __USE_GNU -#include // for socket, mkdir, opendir, readdir -#include // for socket -#include // for sockaddr_un -#include // for sockaddr_in, socklen_t -#include // for chmod, mkdir -#include // for setitimer -#include // for sigemptyset, sigset_t, sigaddset, ... -#include // for unlink -#include // for pthread_mutex_t -#include // for epoll apis -#include // for shmctl -#include // for shared memory operation -#include // for opendir, readdir - -#include "utils.h" -#include "sys_stat.h" -#include "da_debug.h" - -#define MAX_PATH_LENGTH 256 -#define TARGET_CLIENT_COUNT_MAX 8 -#define READ_BUF_MAX 4096+8 -#define DA_LOG_MAX 4096 -#define APP_INSTALL_PATH_MAX 1024 -#define UDS_NAME "/tmp/da.socket" -#define DA_INSTALL_DIR "/home/developer/sdk_tools/da/" -#define DA_INSTALL_PATH "/home/developer/sdk_tools/da/da_install_path" -#define DA_BUILD_OPTION "/home/developer/sdk_tools/da/da_build_option" -#define DA_BASE_ADDRESS "/home/developer/sdk_tools/da/da_base_address" -#define DA_READELF_PATH "/home/developer/sdk_tools/da/readelf" -#define SCREENSHOT_DIR "/tmp/da" -#define HOST_MSG_LENGTH 3 -#define SHAREDMEMKEY ((key_t)463825) - -#define TIMER_INTERVAL_SEC 1 -#define TIMER_INTERVAL_USEC 0 - -#define SECOND_INTERVAL -#define MONITORING_INTERVAL 1 // 1 second - -#ifdef SECOND_INTERVAL -#define __sleep sleep -#else -#define __sleep usleep -#endif - -#define RUN_APP_LOADER 1 - -enum TargetMessageType -{ - MSG_DEVICE = 1, - MSG_TIME = 2, - MSG_SAMPLE = 3, - MSG_RESOURCE = 4, - MSG_LOG = 5, - MSG_IMAGE = 6, - MSG_TERMINATE = 7, - MSG_PID = 8, - MSG_MSG = 9, - MSG_APPNAME = 10, - MSG_ERROR = 11 -}; - -enum HostMessageType -{ - MSG_HOST_BEGIN = 100, - MSG_START = 100, - MSG_STOP = 101, - MSG_PAUSE = 102, - MSG_OPTION = 103, - MSG_ISALIVE = 104, - MSG_ALIVE = 105, - MSG_BATT_START = 106, - MSG_BATT_STOP = 107, - MSG_HOST_END = 107 -}; - -enum DAState -{ - DAS_NONE = 0, - DAS_START_BEGIN = 1, - DAS_TARGET_ARM_START = 1, - DAS_TARGET_X86_START = 2, - DAS_EMUL_ARM_START = 3, - DAS_EMUL_X86_START = 4, - DAS_TARGET_ARM_BATT_START = 5, - DAS_TARGET_X86_BATT_START = 6, - DAS_EMUL_ARM_BATT_START = 7, - DAS_EMUL_X86_BATT_START = 8, - DAS_START_END = 8, - DAS_STOP = 9, - DAS_TERMINATE = 10 -}; - -typedef struct -{ - int type; - int length; - char data[DA_LOG_MAX]; -} log_t; - -//TODO : -typedef struct -{ - enum DAState status; - int serverSockFD; - int clientSockFD; -} __daHostInfo; - -typedef struct -{ - enum DAState status; - int serverSockFD; - int connectCount; - int pidCount; - int clientSockFD[TARGET_CLIENT_COUNT_MAX]; - int execPID[TARGET_CLIENT_COUNT_MAX]; // exec PID by target -} __daTargetInfo; - -typedef struct -{ - long long allocsize; - long launch_flag; -} __daSharedInfo; - -typedef struct -{ - int memid; - __daSharedInfo* pvalue; -} __daSharedMem; - -typedef struct -{ - pthread_t timer_thread; - pthread_mutex_t sendMutex; - char appPath[128]; // application executable path - __daSharedMem sharedmem; - __daHostInfo iHost; - __daTargetInfo iTarget; -}__daManager; - -__daManager manager = -{ - -1, // timer_thread handle - PTHREAD_MUTEX_INITIALIZER, // pthread_mutex_t sendMutex - { 0, }, // char appPath[128] - { -1, (void*)-1 }, // __daSharedMem sharedmem - { DAS_NONE, -1, -1 }, // __daHostInfo iHost - { DAS_NONE, -1, 0, 0, {0, }, {0, }} // __daTargetInfo iTarget -}; - -int aul_terminate_pid(int pid); -static void* terminate_thread(void* data); -static void terminate_error(char* errstr, int sendtohost); - -#ifdef LOCALTEST -int aul_terminate_pid(int pid) -{ - return kill(pid, SIGTERM); -} -#endif - -int _terminate_pid(int pid) -{ - int ret; - pid_t* pids; - pthread_t term_thread; - - ret = aul_terminate_pid(pid); - - pids = (pid_t*)malloc(2 * sizeof(pid_t)); - pids[0] = pid; - pids[1] = -2; - - pthread_create(&term_thread, NULL, terminate_thread, pids); - - return ret; -} - -// return 0 if succeed -// return -1 if error occured -static int remove_indir(const char *dirname) -{ - DIR *dir; - struct dirent *entry; - char path[MAX_PATH_LENGTH]; - - dir = opendir(dirname); - if(dir == NULL) - { - return -1; - } - - while((entry = readdir(dir)) != NULL) - { - if (strcmp(entry->d_name, ".") && strcmp(entry->d_name, "..")) - { - snprintf(path, (size_t) MAX_PATH_LENGTH, "%s/%s", dirname, entry->d_name); - if (entry->d_type != DT_DIR) // file - { - unlink(path); - } - else { } // directory - } - } - closedir(dir); - - return 0; -} - -// index is started from 0 -int set_launch_flag(int index, int bOn) -{ - int ret = 0; - // set launch flag before execute application - if(__builtin_expect(manager.sharedmem.pvalue != (void*)-1, 1)) - { - if(bOn != 0) - manager.sharedmem.pvalue->launch_flag |= (1 << index); - else - manager.sharedmem.pvalue->launch_flag &= ~(1 << index); - } - else - ret = -1; - - return ret; -} - -long long get_total_alloc_size() -{ - if(__builtin_expect(manager.sharedmem.pvalue != (void*)-1, 1)) - { - return manager.sharedmem.pvalue->allocsize; - } - else - { - return 0L; - } -} - -// return 0 for normal case -static int __makeTargetServerSockFD() -{ - struct sockaddr_un serverAddrUn; - - if(manager.iTarget.serverSockFD != -1) - return -1; // should be never happend - - // remove pre unix domain socket file - // remove(UDS_NAME); - unlink(UDS_NAME); - - if ((manager.iTarget.serverSockFD = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) - { - LOGE("Target server socket creation failed\n"); - return -1; - } - bzero(&serverAddrUn, sizeof(serverAddrUn)); - serverAddrUn.sun_family = AF_UNIX; - sprintf(serverAddrUn.sun_path, "%s", UDS_NAME); - - if (-1 == bind(manager.iTarget.serverSockFD, (struct sockaddr*) &serverAddrUn, - sizeof(serverAddrUn))) - { - LOGE("Target server socket binding failed\n"); - close(manager.iTarget.serverSockFD); - return -1; - } - - chmod(serverAddrUn.sun_path, 0777); - - if (-1 == listen(manager.iTarget.serverSockFD, 5)) - { - LOGE("Target server socket listening failed\n"); - close(manager.iTarget.serverSockFD); - return -1; - } - - LOGI("Created TargetSock %d\n", manager.iTarget.serverSockFD); - return 0; -} - -// return 0 for normal case -static int __makeHostServerSockFD() -{ - struct sockaddr_in serverAddrIn; - int opt = 1; - - if(manager.iHost.serverSockFD != -1) - return -1; // should be never happened - - if ((manager.iHost.serverSockFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) - { - LOGE("Host server socket creation failed\n"); - return -1; - } - - setsockopt(manager.iHost.serverSockFD, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); - memset(&serverAddrIn, 0, sizeof(serverAddrIn)); - serverAddrIn.sin_family = AF_INET; - serverAddrIn.sin_addr.s_addr = htonl(INADDR_ANY); - serverAddrIn.sin_port = htons(8001); - - // bind address to server socket - if (-1 == bind(manager.iHost.serverSockFD, (struct sockaddr*) &serverAddrIn, sizeof(serverAddrIn))) - { - LOGE("Host server socket binding failed\n"); - close(manager.iHost.serverSockFD); - return -1; - } - - // enter listen state from client - if (-1 == listen(manager.iHost.serverSockFD, 5)) - { - LOGE("Host server socket listening failed\n"); - close(manager.iHost.serverSockFD); - return -1; - } - - LOGI("Created HostSock %d\n", manager.iHost.serverSockFD); - return 0; -} - -static int __destroySharedMemory() -{ - int ret = 0; - if(manager.sharedmem.pvalue != (void*)-1) - { - ret = shmdt(manager.sharedmem.pvalue); - if(ret == 0) - manager.sharedmem.pvalue = (void*)-1; - } - - if(manager.sharedmem.memid != -1) - { - ret = shmctl(manager.sharedmem.memid, IPC_RMID, 0); - if(ret == 0) - manager.sharedmem.memid = -1; - } - - return ret; -} - -// return 0 for normal case -// return -1 for error case -static int __createSharedMemory() -{ - manager.sharedmem.memid = shmget(SHAREDMEMKEY, sizeof(__daSharedInfo), IPC_CREAT | 0666); - if(manager.sharedmem.memid == -1) - { - return -1; - } - else - { - manager.sharedmem.pvalue = (__daSharedInfo*)shmat(manager.sharedmem.memid, NULL, 0); - if(manager.sharedmem.pvalue == (void*)-1) - { - __destroySharedMemory(); - return -1; - } - else - { - manager.sharedmem.pvalue->allocsize = 0; - manager.sharedmem.pvalue->launch_flag = 0; - return 0; - } - } -} - -/* -static log_t * parsLogData(log_t * log, char* logStr) -{ -#if 1 - int i, nPos; - - if (logStr == NULL || log == NULL) - return NULL; - - //msgType - for (i = 0, nPos = 0; i < READ_BUF_MAX; i++) - { - if (logStr[i] == '|') - { - logStr[i] = '\0'; - log->type = atoi(&logStr[nPos]); - i++; - break; - } - if (logStr[i] == '\0') - return NULL; - } - //length - for (nPos = i; i < READ_BUF_MAX; i++) - { - if (logStr[i] == '|' || logStr[i] == '\0') - { - logStr[i] = '\0'; - log->length = atoi(&logStr[nPos]); - i++; - break; - } - } - //data - if ((log->length > 0) && (log->length < DA_LOG_MAX)) - { - strncpy(log->data, &logStr[i], log->length); - log->data[log->length] = '\0'; - } - - return log; - -#else - - int i; - char * startPos = logStr; - char tempBuf[READ_BUF_MAX]; - - if(logStr && log) - { - log->type = -1; - log->length = 0; - log->data[0]='\0'; - //type,length - for(i=0; itype == -1) - { - log->type = atoi(startPos); - startPos = &logStr[i+1]; - } - else { - log->length = atoi(startPos); - startPos = &logStr[i+1]; - break; - } - } - } - //data - if((log->length > 0) && (log->length < DA_LOG_MAX) && (startPos)) - { - strncpy(log->data, startPos, log->length); - log->data[log->length] = '\0'; - } - LOGI("log type : %d, length : %d, data : %s\n", log->type, log->length, log->data); - return log; - } - else - return NULL; -#endif -} -*/ - -static int get_app_type(void) -{ - int fd; - char buf[DA_LOG_MAX]; - - sprintf(buf, "%s.exe", manager.appPath); - fd = open(buf, O_RDONLY); - if(fd != -1) - { - close(fd); - return APP_TYPE_OSP; - } - else - { - return APP_TYPE_TIZEN; - } -} - -static int get_executable(char* buf, int buflen) -{ - int fd; - - sprintf(buf, "%s.exe", manager.appPath); - fd = open(buf, O_RDONLY); - if(fd != -1) - { - close(fd); - } - else - { - strcpy(buf, manager.appPath); - } - return 0; -} - -static int get_app_install_path(char *strAppInstall, int length) -{ - FILE *fp; - char buf[DA_LOG_MAX]; - char *p; - int i; - - if ((fp = fopen(DA_INSTALL_PATH, "r")) == NULL) - { - LOGE("Failed to open %s\n", DA_INSTALL_PATH); - return -1; - } - - /*ex : <15> DW_AT_comp_dir : (indirect string, offset: 0x25f): /home/yt/workspace/templatetest/Debug-Tizen-Emulator */ - while (fgets(buf, DA_LOG_MAX, fp) != NULL) - { - //name - p = buf; - for (i = 0; i < DA_LOG_MAX; i++) - { - if (*p == ':') - break; - p++; - } - - if (*p != ':') - break; - else - p++; - - //(...,offset:...) - for (; i < DA_LOG_MAX; i++) - { - if (*p == '(') - { - while (*p != ')') - { - p++; - } - } - if (*p == ':') - break; - p++; - } - - //find - if (*p != ':') - break; - for (; i < DA_LOG_MAX; i++) - { - if (*p == ':' || *p == ' ' || *p == '\t') - p++; - else - break; - } - - //name - if (strlen(p) <= length) - { - sprintf(strAppInstall, "%s", p); - for (i = 0; i < strlen(p); i++) - { - if (strAppInstall[i] == '\n' || strAppInstall[i] == '\t') - { - strAppInstall[i] = '\0'; - break; - } - } - fclose(fp); - return 1; - } - } - fclose(fp); - return -1; -} - -static int is_app_built_pie(void) -{ - int result; - FILE *fp; - char buf[DA_LOG_MAX]; - - if((fp = fopen(DA_BUILD_OPTION, "r")) == NULL) - { - LOGE("Failed to open %s\n", DA_BUILD_OPTION); - return -1; - } - - if(fgets(buf, DA_LOG_MAX, fp) != NULL) - { - if(strcmp(buf, "DYN\n") == 0) - result = 1; - else if(strcmp(buf, "EXEC\n") == 0) - result = 0; - else - result = -1; - } - else - { - result = -1; - } - fclose(fp); - - return result; -} - -static int get_app_base_address(int *baseAddress) -{ - int res; - FILE *fp; - char buf[DA_LOG_MAX]; - - if((fp = fopen(DA_BASE_ADDRESS, "r")) == NULL) - { - LOGE("Failed to open %s\n", DA_BASE_ADDRESS); - return -1; - } - - if(fgets(buf, DA_LOG_MAX, fp) != NULL) - { - res = sscanf(buf, "%x", baseAddress); - } - else - { - res = -1; - } - fclose(fp); - - return res; -} - -static int is_same_app_process(int pid) -{ - int ret = 0; - FILE *fp; - char buf[DA_LOG_MAX]; - char cmdPath[PATH_MAX]; - char execPath[PATH_MAX]; - - get_executable(execPath, PATH_MAX); - sprintf(cmdPath, "/proc/%d/cmdline", pid); - - if((fp = fopen(cmdPath, "r")) == NULL) - { - return 0; - } - - if(fgets(buf, DA_LOG_MAX, fp) != NULL) - { -#if RUN_APP_LOADER - if(strcmp(buf, manager.appPath) == 0) -#else - // use execPath instead of manager.appPath - if(strcmp(buf, execPath) == 0) -#endif - ret = 1; - else - ret = 0; - } - fclose(fp); - - return ret; -} - -static int sendMsgStrToHost(char* str, int msgType, int targetNo) -{ - static int initialized = 0; - int pid; - int is_pie_build; - int base_address; - int app_type; - char log[DA_LOG_MAX]; - char bufDeviceInfo[DA_LOG_MAX]; - char bufAppInstall[APP_INSTALL_PATH_MAX]; - - switch (msgType) - { - case MSG_LOG: - case MSG_RESOURCE: - case MSG_SAMPLE: - case MSG_ERROR: - if(__builtin_expect(initialized == 0, 0)) - return -1; - sprintf(log, "%d|%s\n", msgType, str); - break; - case MSG_PID: - LOGI("MSG_PID handling : %s\n", str); - pid = atoi(str); - if ((manager.iTarget.execPID[targetNo] != -1) && (pid != manager.iTarget.execPID[targetNo])) - { - LOGE("Failed to check pid, pid of msg(%d), stored pid(%d)\n", pid, manager.iTarget.execPID[targetNo]); - return -1; - } - LOGI("pid[%d]=%d\n",targetNo,pid); - manager.iTarget.execPID[targetNo] = pid; - manager.iTarget.pidCount++; - - { - char execPath[PATH_MAX]; - char realPath[PATH_MAX]; - char mapsPath[PATH_MAX]; - char appInstallCommand[PATH_MAX]; - - get_executable(execPath, PATH_MAX); - if(realpath(execPath, realPath) == NULL) - { - LOGW("Failed to get realpath of app\n"); - strcpy(realPath, execPath); - } - - sprintf(mapsPath, "/proc/%d/maps", manager.iTarget.execPID[targetNo]); - sprintf(appInstallCommand, - "cat %s | grep %s | cut -d\"-\" -f1 > %s", mapsPath, - realPath, DA_BASE_ADDRESS); - LOGI("appInstallCommand is %s\n", appInstallCommand); - - do { - if(access(mapsPath, F_OK) != 0) - return -1; - if(is_same_app_process(manager.iTarget.execPID[targetNo]) == 0) - return -1; - - system(appInstallCommand); - if(get_app_base_address(&base_address) == 1) - break; - sleep(0); - } - while(1); - } - return 0; - break; - case MSG_TIME: - LOGI("MSG_TIME handling : %s\n", str); - if (strlen(manager.appPath) > 0) - { - is_pie_build = is_app_built_pie(); - get_app_base_address(&base_address); - app_type = get_app_type(); - bufAppInstall[0] = '\0'; - get_app_install_path(bufAppInstall, APP_INSTALL_PATH_MAX); - get_device_info(bufDeviceInfo, DA_LOG_MAX); - if (strlen(bufAppInstall) > 0) - { - char buf[PATH_MAX]; - get_executable(buf, PATH_MAX); - sprintf(log, "%d|%s`,%d`,%s`,%d`,%u`,%d`,%s/%s\n", MSG_DEVICE, bufDeviceInfo, - manager.iTarget.execPID[targetNo], str, is_pie_build, base_address, app_type, - bufAppInstall, get_app_name(buf)); - } - else - sprintf(log, "%d|%s`,%d`,%s`,%d`,%u`,%d`,\n", MSG_DEVICE, bufDeviceInfo, - manager.iTarget.execPID[targetNo], str, is_pie_build, base_address, app_type); - LOGI("MSG_DEVICE msg : %s\n", log); - } - else - { - sprintf(log, "%d|%d`,%s", MSG_PID, manager.iTarget.execPID[targetNo], str); - LOGI("MSG_DEVICE msg without appname : %s\n", log); - } - initialized = 1; - break; - case MSG_TERMINATE: - LOGI("MSG_TERMINATE handling : connectCount(%d)\n", manager.iTarget.connectCount); - if(manager.iTarget.connectCount == 1 ){ - sprintf(log, "%d|\n", msgType); - pthread_mutex_lock(&(manager.sendMutex)); -#ifndef LOCALTEST - send(manager.iHost.clientSockFD, log, strlen(log), 0); -#else - LOGI("send to host : %s\n", log); -#endif - pthread_mutex_unlock(&(manager.sendMutex)); - } - return 0; - default: - sprintf(log, "%d|%s\n", msgType, str); - break; - } - - if(manager.iHost.status >= DAS_TARGET_ARM_BATT_START && manager.iHost.status <= DAS_EMUL_X86_BATT_START) - { - LOGI("write batt log\n"); - write_batt_log(log); - } - else - { - if (manager.iHost.clientSockFD != -1) - { - pthread_mutex_lock(&(manager.sendMutex)); -#ifndef LOCALTEST - send(manager.iHost.clientSockFD, log, strlen(log), 0); -#else - LOGI("send to host : %s\n", log); -#endif - pthread_mutex_unlock(&(manager.sendMutex)); - } - } - return 0; -} - -static void* timerThread(void* data) -{ - int err, signo; - char buf[DA_LOG_MAX]; - sigset_t waitsigmask; - - LOGI("Timer thread started\n"); - - sigemptyset(&waitsigmask); - sigaddset(&waitsigmask, SIGALRM); - sigaddset(&waitsigmask, SIGUSR1); - - while(1) - { - err = sigwait(&waitsigmask, &signo); - if(err != 0) - { - LOGE("Failed to sigwait() in timer thread\n"); - continue; - } - - if(signo == SIGALRM) - { - get_resource_info(buf, DA_LOG_MAX, manager.iTarget.execPID, manager.iTarget.pidCount); - sendMsgStrToHost(buf, MSG_RESOURCE, -1); - - if (manager.iTarget.status < DAS_START_BEGIN || manager.iTarget.status > DAS_START_END ) - break; - } - else if(signo == SIGUSR1) - { - // end this thread - break; - } - else - { - // not happened - LOGE("This should not be happend in timer thread\n"); - } - } - - LOGI("Timer thread ended\n"); - return NULL; -} - -// return 0 if normal case -// return minus value if critical error -// return plus value if non-critical error -static int timerStart() -{ - sigset_t newsigmask; - struct itimerval timerval; -// char buf[DA_LOG_MAX]; - - if(manager.timer_thread != -1) // already started - return 1; - - sigemptyset(&newsigmask); - sigaddset(&newsigmask, SIGALRM); - sigaddset(&newsigmask, SIGUSR1); - if(pthread_sigmask(SIG_BLOCK, &newsigmask, NULL) != 0) - { - LOGE("Failed to signal masking for main thread\n"); - return -1; - } - - if(pthread_create(&(manager.timer_thread), NULL, timerThread, NULL) < 0) - { - LOGE("Failed to create timer thread\n"); - return -1; - } - - timerval.it_interval.tv_sec = TIMER_INTERVAL_SEC; - timerval.it_interval.tv_usec = TIMER_INTERVAL_USEC; - timerval.it_value.tv_sec = TIMER_INTERVAL_SEC; - timerval.it_value.tv_usec = TIMER_INTERVAL_USEC; - setitimer(ITIMER_REAL, &timerval, NULL); - - // commected because this resource log send to host before receiving MSG_TIME message from target process - // send initial value of profiling -// get_resource_info(buf, DA_LOG_MAX, manager.iTarget.execPID, manager.iTarget.pidCount); -// sendMsgStrToHost(buf, MSG_RESOURCE, -1); - - return 0; -} - -static int timerStop() -{ - if(manager.timer_thread != -1) - { -// int status; -// sigset_t oldsigmask; - struct itimerval stopval; - -// sigemptyset(&oldsigmask); -// sigaddset(&oldsigmask, SIGALRM); -// sigaddset(&oldsigmask, SIGUSR1); - - stopval.it_interval.tv_sec = 0; - stopval.it_interval.tv_usec = 0; - stopval.it_value.tv_sec = 0; - stopval.it_value.tv_usec = 0; - - // stop timer - setitimer(ITIMER_REAL, &stopval, NULL); - - pthread_kill(manager.timer_thread, SIGUSR1); -// pthread_join(manager.timer_thread, (void**) &status); - -// if(sigprocmask(SIG_UNBLOCK, &oldsigmask, NULL) < 0) -// { -// LOGE("Failed to pthread_sigmask\n"); -// } - manager.timer_thread = -1; - } - __destroySharedMemory(); - - return 0; -} - -#ifdef USE_BATT_LOG -static void wait_for_starting() -{ - static int chargerfd = -1; - while (get_file_status(&chargerfd, CHARGERFD)) - { - LOGI("wait for starting ... \n"); - __sleep(MONITORING_INTERVAL); - } -} -#endif - -static int startProfiling(char* execpath, enum DAState status, long launchflag) -{ - if(__createSharedMemory() < 0) - { - LOGE("Failed to create shared memory\n"); - return -1; - } - - // set launch flag before execute application - manager.sharedmem.pvalue->launch_flag = launchflag; - - // remove previous screen capture files - remove_indir(SCREENSHOT_DIR); - mkdir(SCREENSHOT_DIR, 0777); - - // execute application - if (exec_app(execpath, get_app_type())) - { - manager.iTarget.status = status; - if(timerStart() < 0) - { - return -1; - } - LOGI("Timer Started\n"); - } - else - { - return -1; - } - - return 0; -} - -static void* terminate_thread(void* data) -{ - int i; - FILE* fp; - size_t readbyte; - char cmd[MAX_PATH_LENGTH]; - pid_t* pids = (pid_t*)data; - - sleep(1); - for(i = 0; pids[i] != -2; i++) - { - if(pids[i] != -1) - { - sprintf(cmd, "ps ax | grep %d | grep -v grep", pids[i]); - fp = popen(cmd, "r"); - if(fp) - { - readbyte = fread(cmd, MAX_PATH_LENGTH - 1, 1, fp); - if(readbyte > 0) // process is still alive - { - sprintf(cmd, "kill -9 %d", pids[i]); - system(cmd); - } - pclose(fp); - } - } - } - - free(pids); - - return NULL; -} - -static void terminate_all_target() -{ - int i; - pthread_t term_thread; - pid_t* pids; - - pids = (pid_t*)malloc((manager.iTarget.pidCount + 1) * sizeof(pid_t)); - - for (i = 0; i < manager.iTarget.pidCount; i++) - { - pids[i] = manager.iTarget.execPID[i]; - if(manager.iTarget.execPID[i] != -1) - { - LOGI("TERMINATE process(%d) by terminate_all_target()\n", manager.iTarget.execPID[i]); - aul_terminate_pid(manager.iTarget.execPID[i]); - manager.iTarget.execPID[i] = -1; - } - } - pids[manager.iTarget.pidCount] = -2; - - pthread_create(&term_thread, NULL, terminate_thread, pids); - - manager.iTarget.pidCount = 0; -} - -static void terminate_error(char* errstr, int sendtohost) -{ - LOGE("%s, status(%d)\n", errstr, manager.iHost.status); - manager.iHost.status = DAS_STOP; - - terminate_all_target(); - - timerStop(); - - if(sendtohost) - sendMsgStrToHost(errstr, MSG_ERROR, -1); -} - - -// return 0 if normal case -// return plus value if non critical error occur -// return minus value if critical error occur -static int hostMessageHandler(log_t * log) -{ - int ret = 0; - long flag = 0; - char *barloc, *tmploc; - char execPath[PATH_MAX]; - - if (log == NULL) - return 1; - - switch (log->type) - { - case MSG_START: - LOGI("MSG_START handling : %s\n", log->data); - if (manager.iHost.status >= DAS_START_BEGIN && manager.iHost.status <= DAS_START_END) - { - LOGE("MSG_START status check : %d\n", manager.iHost.status); - return 1; // already started, then ignore this MSG_START message - } - - if(log->length == 0) - return -1; // wrong message format - - // parsing for host start status - tmploc = log->data; - barloc = strchr(tmploc, '|'); - if(barloc != NULL) - { - manager.iHost.status = 0; - while(tmploc < barloc) - { - manager.iHost.status = (manager.iHost.status * 2) + (*tmploc - '0'); - tmploc++; - } - manager.iHost.status += 1; - - if(manager.iHost.status < DAS_START_BEGIN || manager.iHost.status > DAS_START_END) - { - manager.iHost.status = DAS_EMUL_X86_START; - ret = 1; - } - } - else - { - return -1; // wrong message format - } - - // parsing for target launch option flag - tmploc = barloc + 1; - barloc = strchr(tmploc, '|'); - if(barloc != NULL) - { - while(tmploc < barloc) - { - flag = (flag * 2) + (*tmploc - '0'); - tmploc++; - } - } - else - { - return -1; // wrong message format - } - - // parsing for application package name - tmploc = barloc + 1; - strcpy(manager.appPath, tmploc); - -#ifdef USE_BATT_LOG - if(manager.iHost.status == DAS_EMUL_ARM_BATT_START || - manager.iHost.status == DAS_EMUL_X86_BATT_START) - wait_for_starting(); -#endif - - get_executable(execPath, PATH_MAX); // get exact app executable file name -#if RUN_APP_LOADER - kill_app(manager.appPath); -#else - // use execPath instead of manager.appPath - kill_app(execPath); -#endif - sleep(0); - - LOGI("executable app path %s\n", manager.appPath); - - { - char appInstallCommand[PATH_MAX]; - - //save app install path - mkdir(DA_INSTALL_DIR, 0775); - sprintf(appInstallCommand, - "%s -Wwi %s | grep DW_AT_comp_dir > %s", DA_READELF_PATH, - execPath, DA_INSTALL_PATH); - LOGI("appInstallCommand %s\n", appInstallCommand); - system(appInstallCommand); - - sprintf(appInstallCommand, - "%s -h %s | grep Type | cut -d\" \" -f33 > %s", DA_READELF_PATH, - execPath, DA_BUILD_OPTION); - LOGI("appInstallCommand %s\n", appInstallCommand); - system(appInstallCommand); - -#if RUN_APP_LOADER - if(startProfiling(manager.appPath, manager.iHost.status, flag) < 0) -#else - // use execPath instead of manager.appPath - if(startProfiling(execPath, manager.iHost.status, flag) < 0) -#endif - { - terminate_error("Cannot start profiling", 1); - return -1; - } - } - break; - case MSG_STOP: - LOGI("MSG_STOP handling\n"); - if (manager.iHost.status < DAS_START_BEGIN || manager.iHost.status > DAS_START_END) - { - // already stopped, not possible, ignore MSG_STOP message - LOGE("MSG_STOP status check : %d\n", manager.iHost.status); - return 1; - } - - manager.iHost.status = DAS_STOP; - terminate_all_target(); - timerStop(); - break; - case MSG_OPTION: - if(log->length > 0) - { - if(log->data[0] == '0') - { - set_launch_flag(1, 0); - LOGI("Snapshot disabled\n"); - } - else if(log->data[0] == '1') - { - set_launch_flag(1, 1); - LOGI("Snapshot enabled\n"); - } - else - { - LOGI("Wrong option message from host\n"); - } - } - break; - case MSG_ISALIVE: - sendMsgStrToHost(NULL, MSG_ALIVE, 0); - break; - -#ifdef USE_BATT_LOG - case MSG_BATT_START: - { - manager.iHost.status = DAS_BATT_START; - sprintf(manager.appPath, "%s", log->data); - create_open_batt_log(get_app_name(manager.appPath)); - wait_for_starting(); - if(startProfiling(manager.appPath, DAS_BATT_START, flag) < 0) - { - terminate_error("Cannot start profiling", 1); - return -1; - } -// batt_start(manager.appPath); - } - break; - case MSG_BATT_STOP: - manager.iHost.status = DAS_BATT_STOP; - timerStop(); -// batt_stop(); - break; -#endif - - default: - LOGW("Unknown msg\n"); - } - - return ret; -} - -static int parseHostMessage(log_t* log, char* msg) -{ - int i; - int bfind = 0; - - if(log == NULL || msg == NULL) - return 0; - - // Host message looks like this - // MSG_TYPE|MSG_LENGTH|MSG_STRING - // MSG_TYPE is always 3 digits number - if(msg[3] == '|') - { - msg[3] = '\0'; - log->type = atoi(msg); - - if(log->type < MSG_HOST_BEGIN || log->type > MSG_HOST_END) - return 0; - - msg = msg + 4; - for(i = 0; msg[i] != '\0'; i++) - { - if(msg[i] == '|') - { - bfind = 1; - msg[i] = '\0'; - break; - } - } - - if(bfind != 0) - { - int msglen; - log->length = atoi(msg); - msg = msg + i + 1; - msglen = strlen(msg); - - if(log->length == 0) - { - log->data[0] = '\0'; - } - else - { - if(msglen == log->length) - strcpy(log->data, msg); - else if(msglen > log->length) // parsing error but deal as nonerror - strncpy(log->data, msg, log->length); - else - return 0; // parsing error - - log->data[log->length] = '\0'; - } - } - else - { - return 0; // parsing error - } - - return 1; // parsing success - } - else - { - return 0; // parsing error - } -} - -#define EPOLL_SIZE 10 -#define MAX_CONNECT_SIZE 12 -#define MAX_INAROW_TARGET_MSG 10 - -// return 0 for normal case -static int work() -{ - struct sockaddr_un clientAddrUn; //target - struct sockaddr_in clientAddrIn; //host - int i, k, find; - ssize_t recvLen; - char recvBuf[READ_BUF_MAX]; - log_t log; - - struct epoll_event ev, *events; - int efd; // epoll fd - int numevent; // number of occured events - - // initialize epoll event pool - events = (struct epoll_event*) malloc(sizeof(struct epoll_event) * EPOLL_SIZE); - if(events == NULL) - { - LOGE("Out of memory when allocate epoll event pool\n"); - return -1; - } - if((efd = epoll_create(MAX_CONNECT_SIZE)) < 0) - { - LOGE("epoll creation error\n"); - free(events); - return -1; - } - - // add server sockets to epoll event pool - ev.events = EPOLLIN; - ev.data.fd = manager.iHost.serverSockFD; - if(epoll_ctl(efd, EPOLL_CTL_ADD, manager.iHost.serverSockFD, &ev) < 0) - { - LOGE("Host server socket epoll_ctl error\n"); - free(events); - close(efd); - return -1; - } - ev.events = EPOLLIN; - ev.data.fd = manager.iTarget.serverSockFD; - if(epoll_ctl(efd, EPOLL_CTL_ADD, manager.iTarget.serverSockFD, &ev) < 0) - { - LOGE("Target server socket epoll_ctl error\n"); - free(events); - close(efd); - return -1; - } - - // handler loop - while (1) - { - numevent = epoll_wait(efd, events, EPOLL_SIZE, -1); - if(numevent <= 0) - { - LOGE("Failed to epoll_wait : num of event(%d), errno(%d)\n", numevent, errno); - continue; - } - - for(i = 0; i < numevent; i++) - { - find = 0; - for(k = 0; k < manager.iTarget.connectCount; k++) - { - if(events[i].data.fd == manager.iTarget.clientSockFD[k]) - { - // read from target process - recvLen = recv(manager.iTarget.clientSockFD[k], &log, - sizeof(log.type) + sizeof(log.length), 0); - - // send to host - if (recvLen > 0) - { - int count = 0; - do { - if (log.length > 0) - recv(manager.iTarget.clientSockFD[k], log.data, log.length, 0); - log.data[log.length] = '\0'; - if(log.type == 5) // MSG_LOG - { - switch(log.data[0]) - { - case '2': // UI control creation log - case '3': // UI event log - case '6': // UI lifecycle log - case '7': // screnshot log - case '8': // scene transition log - LOGI("%dclass|%s\n", log.data[0] - '0', log.data); - break; - default: - break; - } - } - else if(log.type == 6) // MSG_IMAGE - { - LOGI("MSG_IMAGE received\n"); - } - else // not MSG_LOG and not MSG_IMAGE - { - LOGI("Extra MSG TYPE (%d|%d|%s)\n", log.type, log.length, log.data); - } - sendMsgStrToHost(log.data, log.type, k); - if(count++ > MAX_INAROW_TARGET_MSG) - break; - } while ((recvLen = recv(manager.iTarget.clientSockFD[k], - &log, sizeof(log.type) + sizeof(log.length), MSG_DONTWAIT)) > 0); - } - - // close request from target client socket - if(recvLen == 0) - { - LOGI("target close = %d(total %d)\n", manager.iTarget.clientSockFD[k], manager.iTarget.connectCount - 1); - if(epoll_ctl(efd, EPOLL_CTL_DEL, manager.iTarget.clientSockFD[k], NULL) < 0) - { - LOGE("Failed to epoll_ctl delete fd from event poll\n"); - } - close(manager.iTarget.clientSockFD[k]); - LOGI("Terminate %dth pid(%d)\n", k, manager.iTarget.execPID[k]); - // consume that target process is already in terminating phase -// _terminate_pid(manager.iTarget.execPID[k]); - manager.iTarget.connectCount--; - if(manager.iTarget.execPID[k] != -1) - manager.iTarget.pidCount--; -// assert(manager.iTarget.connectCount == manager.iTarget.pidCount); - if (manager.iTarget.connectCount == 0) // all target client are closed - { - manager.iTarget.status = DAS_TERMINATE; - - LOGI("Exit daemon process\n"); - manager.iTarget.clientSockFD[k] = -1; - manager.iTarget.execPID[k] = -1; - timerStop(); - free(events); - close(efd); - return 0; - } - else - { - manager.iTarget.clientSockFD[k] = manager.iTarget.clientSockFD[manager.iTarget.connectCount]; - manager.iTarget.clientSockFD[manager.iTarget.connectCount] = -1; - manager.iTarget.execPID[k] = manager.iTarget.execPID[manager.iTarget.pidCount]; - manager.iTarget.execPID[manager.iTarget.pidCount] = -1; - } - } - - find = 1; - break; - } - } - if(find == 0) // this event is not from target client socket - { - // connect request from target - if(events[i].data.fd == manager.iTarget.serverSockFD) - { - socklen_t addrlen; - addrlen = sizeof(clientAddrUn); - manager.iTarget.clientSockFD[manager.iTarget.connectCount] = - accept(manager.iTarget.serverSockFD, (struct sockaddr *) &clientAddrUn, &addrlen); - - if(manager.iTarget.clientSockFD[manager.iTarget.connectCount] >= 0) // accept succeed - { - ev.events = EPOLLIN; - ev.data.fd = manager.iTarget.clientSockFD[manager.iTarget.connectCount]; - if(epoll_ctl(efd, EPOLL_CTL_ADD, manager.iTarget.clientSockFD[manager.iTarget.connectCount], &ev) < 0) - { - // consider as accept fail - LOGE("Target client epoll_ctl error\n"); - manager.iTarget.clientSockFD[manager.iTarget.connectCount] = -1; - } - else - { - LOGI("target connect = %d(total%d)\n", - manager.iTarget.clientSockFD[manager.iTarget.connectCount], manager.iTarget.connectCount + 1); - manager.iTarget.connectCount++; - } - } - else // accept error - { - LOGE("Failed to accept from target server socket\n"); - } - } - // connect request from host - else if(events[i].data.fd == manager.iHost.serverSockFD) - { - socklen_t addrlen; - addrlen = sizeof(clientAddrIn); - if(manager.iHost.clientSockFD != -1) - { - if(epoll_ctl(efd, EPOLL_CTL_DEL, manager.iHost.clientSockFD, NULL) < 0) - { - LOGE("Failed to delete host client socket from epoll ctrl queue\n"); - } - close(manager.iHost.clientSockFD); - LOGI("Host client socket is closed, fd(%d)\n", manager.iHost.clientSockFD); - } - manager.iHost.clientSockFD = accept(manager.iHost.serverSockFD, (struct sockaddr *) &clientAddrIn, &addrlen); - - if(manager.iHost.clientSockFD >= 0) // accept succeed - { - ev.events = EPOLLIN; - ev.data.fd = manager.iHost.clientSockFD; - if(epoll_ctl(efd, EPOLL_CTL_ADD, manager.iHost.clientSockFD, &ev) < 0) - { - // consider as accept fail - close(manager.iHost.clientSockFD); - manager.iHost.clientSockFD = -1; - terminate_error("Host client epoll_ctl error", 1); - } - else - { - LOGI("host connect = %d\n", manager.iHost.clientSockFD); - } - } - else // accept error - { - LOGE("Failed to accept from host server socket\n"); - } - } - // message from host - else if(events[i].data.fd == manager.iHost.clientSockFD) - { - // host log format xxx|length|str - LOGI("Host client socket selected(Message from host)\n"); - recvLen = recv(manager.iHost.clientSockFD, recvBuf, READ_BUF_MAX, 0); - - if (recvLen > 0) - { - recvBuf[recvLen] = '\0'; - LOGI("host sent this msg len(%d) str(%s)\n", recvLen, recvBuf); - if(parseHostMessage(&log, recvBuf) == 0) - { - // error to parse host message - sendMsgStrToHost("host log message is unrecognizable", MSG_ERROR, -1); - continue; - } - - //host msg command handling - if(hostMessageHandler(&log) < 0) - { - terminate_error("Host message handling error", 1); - free(events); - close(efd); - return 0; - } - } - else // close request from HOST - { - // work loop quit - if(manager.iHost.status >= DAS_START_BEGIN && manager.iHost.status <= DAS_START_END) - { - // host client socket end unexpectly - terminate_error("Host client socket closed unexpectly", 0); - } - LOGI("host close = %d\n", manager.iHost.clientSockFD); - free(events); - close(efd); - return 0; - } - } - else - { - // never happened - LOGW("Unknown socket fd\n"); - } - } - } - } - - free(events); - close(efd); - return 0; -} - -// return 0 for normal case -static int initialize_manager() -{ - int i; - // make server socket - if(__makeTargetServerSockFD() != 0) - return -1; - if(__makeHostServerSockFD() != 0) - return -1; - - // initialize target client sockets - for (i = 0; i < TARGET_CLIENT_COUNT_MAX; i++) - { - manager.iTarget.clientSockFD[i] = -1; - manager.iTarget.execPID[i] = -1; - } - - // initialize sendMutex - pthread_mutex_init(&(manager.sendMutex), NULL); - - if(initialize_system_info() < 0) - return -1; - - return 0; -} - -static int finalize_manager() -{ - int i; - - finalize_system_info(); - - terminate_all_target(); - - LOGI("Finalize daemon\n"); - - // finalize target client sockets - for (i = 0; i < TARGET_CLIENT_COUNT_MAX; i++) - { - if(manager.iTarget.clientSockFD[i] != -1) - close(manager.iTarget.clientSockFD[i]); - } - - // close host client socket - if(manager.iHost.clientSockFD != -1) - close(manager.iHost.clientSockFD); - - // close server socket - if(manager.iHost.serverSockFD != -1) - close(manager.iHost.serverSockFD); - if(manager.iTarget.serverSockFD != -1) - close(manager.iTarget.serverSockFD); - - return 0; -} - -static void __attribute((destructor)) exit_func() -{ - __destroySharedMemory(); -} - -int main() -{ -#if DEBUG - write_log(); -#endif - - //for terminal exit - signal(SIGHUP, SIG_IGN); - chdir("/"); - - //new session reader - setsid(); - - // initialize manager - if(initialize_manager() == 0) - { - //daemon work - work(); - - finalize_manager(); - return 0; - } - else - return 1; -} diff --git a/packaging/daemon/da_debug.h b/packaging/daemon/da_debug.h deleted file mode 100644 index 9d53da9..0000000 --- a/packaging/daemon/da_debug.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -* DA manager -* -* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. -* -* Contact: -* -* Jaewon Lim -* Woojin Jung -* Juyoung Kim -* - * Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* Contributors: -* - S-Core Co., Ltd -* -*/ - -#ifndef _DA_DEBUG_H_ -#define _DA_DEBUG_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#if DEBUG - #define LOGI(...) do{ fprintf(stderr, "[INF]" __VA_ARGS__ ); fflush(stderr); } while(0) - #define LOGE(...) do{ fprintf(stderr, "[ERR]" __VA_ARGS__ ); fflush(stderr); } while(0) - #define LOGW(...) do{ fprintf(stderr, "[WRN]" __VA_ARGS__ ); fflush(stderr); } while(0) -#else - #define LOGI(...) do{} while(0) - #define LOGE(...) do{} while(0) - #define LOGW(...) do{} while(0) -#endif - - - - - -#ifdef __cplusplus -} -#endif - -#endif // _DA_DEBUG_H_ diff --git a/packaging/daemon/sys_stat.c b/packaging/daemon/sys_stat.c deleted file mode 100644 index 9bc4350..0000000 --- a/packaging/daemon/sys_stat.c +++ /dev/null @@ -1,2019 +0,0 @@ -/* -* DA manager -* -* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. -* -* Contact: -* -* Jaewon Lim -* Woojin Jung -* Juyoung Kim -* - * Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* Contributors: -* - S-Core Co., Ltd -* -*/ - -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef LOCALTEST -#include -#include -#include -#include -#endif - -#define USE_VCONF - -#ifdef USE_VCONF -#include "vconf.h" -#endif - -#include "sys_stat.h" -#include "da_debug.h" - -// defines for runtime environment -#define FOR_EACH_CPU - - -#define BUFFER_MAX 1024 -#define LARGE_BUFFER 512 -#define MIDDLE_BUFFER 256 -#define SMALL_BUFFER 64 -#define PROCPATH_MAX 32 -#define STATUS_STRING_MAX 16 -#define MAX_NUM_OF_FREQ 16 - -#define MEM_SLOT_TOTAL 0 -#define MEM_SLOT_FREE 1 -#define MEM_SLOT_BUFFER 2 -#define MEM_SLOT_CACHED 3 -#define MEM_SLOT_MAX 4 - -#define MIN_TICKS_FOR_LOAD 8 -#define MIN_TOTAL_TICK 10 -#define SYS_INFO_TICK 100 // TODO : change to (Hertz * profiling period) - -#define CPUMHZ "cpu MHz" -#define DA_PROBE_TIZEN_SONAME "da_probe_tizen.so" -#define DA_PROBE_OSP_SONAME "da_probe_osp.so" - -#ifndef likely -#define likely(x) __builtin_expect((x), 1) -#define unlikely(x) __builtin_expect((x), 0) -#endif - -enum PROCESS_DATA -{ - PROCDATA_STAT, - PROCDATA_SMAPS -}; - -long long get_total_alloc_size(); - -// declared by greatim -static int Hertz = 0; -static int num_of_cpu = 0; -static int num_of_freq = 0; -static unsigned long mem_slot_array[MEM_SLOT_MAX]; -static CPU_t* cpus = NULL; -static unsigned long probe_so_size = 0; - -// utility function -int get_flag_num(unsigned int flag) -{ - int i; - for(i = 0; flag != 0; i++) - { - flag &= (flag - 1); - } - return i; -} - - - -// daemon api : get status from file -// pfd must not be null -int get_file_status(int* pfd, const char* filename) -{ - int status = 0; - -#ifndef LOCALTEST - if(likely(pfd != NULL)) - { - char buf[STATUS_STRING_MAX]; - - if(unlikely(*pfd < 0)) // open file first - { - *pfd = open(filename, O_RDONLY); - if(unlikely(*pfd == -1)) - { - return -(errno); - } - } - else - { - lseek(*pfd, 0, SEEK_SET); // rewind to start of file - } - - // read from file - if(unlikely(read(*pfd, buf, STATUS_STRING_MAX) == -1)) - { - status = -(errno); - } - else - { - status = atoi(buf); - } - } -#endif - - return status; -} - -// ============================================================================== -// device status information getter functions -// ============================================================================== -static int get_wifi_status() -{ - int wifi_status = 0; - -#ifndef LOCALTEST - #ifdef USE_VCONF - if (unlikely(vconf_get_int(VCONFKEY_WIFI_STATE, &wifi_status) < 0)) - { - wifi_status = VCONFKEY_WIFI_OFF; - } - #else - if (unlikely(runtime_info_get_value_int( - RUNTIME_INFO_KEY_WIFI_STATUS, &wifi_status) < 0)) - { - wifi_status = RUNTIME_INFO_WIFI_STATUS_DISABLED; - } - #endif // USE_VCONF -#endif - - return wifi_status; -} - -static int get_bt_status() -{ - int bt_status = false; - -#ifndef LOCALTEST - #ifdef USE_VCONF - if (unlikely(vconf_get_int(VCONFKEY_BT_STATUS, &bt_status) < 0)) - { - bt_status = VCONFKEY_BT_STATUS_OFF; - } - #else - if (unlikely(runtime_info_get_value_bool( - RUNTIME_INFO_KEY_BLUETOOTH_ENABLED, (bool*)&bt_status) < 0)) - { - bt_status = 0; - } - #endif // USE_VCONF -#endif - - return bt_status; -} - -static int get_gps_status() -{ - int gps_status = 0; - -#ifndef LOCALTEST - #ifdef USE_VCONF - if(unlikely(vconf_get_bool(VCONFKEY_LOCATION_ENABLED, &gps_status) < 0)) - { - gps_status = VCONFKEY_LOCATION_GPS_OFF; - } - else if(gps_status != 0) - { - if (unlikely(vconf_get_int(VCONFKEY_LOCATION_GPS_STATE, &gps_status) < 0)) - { - gps_status = VCONFKEY_LOCATION_GPS_OFF; - } - } - #else - if (unlikely(runtime_info_get_value_bool( - RUNTIME_INFO_KEY_LOCATION_SERVICE_ENABLED, (bool*)&gps_status) < 0)) - { - gps_status = 0; - } - else if(gps_status != 0) - { - if (unlikely(runtime_info_get_value_bool( - RUNTIME_INFO_KEY_LOCATION_ADVANCED_GPS_ENABLED, (bool*)&gps_status) < 0)) - { - gps_status = 0; - } - else if(gps_status != 0) - { - if(unlikely(runtime_info_get_value_int( - RUNTIME_INFO_KEY_GPS_STATUS, &gps_status) < 0)) - { - gps_status = 0; - } - else - { - // do nothing (gps_status is real gps status) - } - } - else - { - // do nothing (gps_status == 0) - } - } - else - { - // do nothing (gps_status == 0) - } - #endif // USE_VCONF -#endif - - return gps_status; -} - -static int get_brightness_status() -{ - static int brightnessfd = -1; - int brightness_status = 0; - -#ifndef LOCALTEST - #ifdef DEVICE_ONLY - DIR* dir_info; - struct dirent* dir_entry; - char fullpath[PATH_MAX]; - - dir_info = opendir(BRIGHTNESS_PARENT_DIR); - if(dir_info != NULL) - { - while((dir_entry = readdir(dir_info)) != NULL) - { - if(strcmp(dir_entry->d_name, ".") == 0 || strcmp(dir_entry->d_name, "..") == 0) - continue; - else // first directory - { - sprintf(fullpath, BRIGHTNESS_PARENT_DIR "/%s/" BRIGHTNESS_FILENAME, dir_entry->d_name); - brightness_status = get_file_status(&brightnessfd, fullpath); - } - } - } - else - { - // do nothing - } - #else - brightness_status = get_file_status(&brightnessfd, EMUL_BRIGHTNESSFD); - #endif -#endif // LOCALTEST - - return brightness_status; -} - -static int get_max_brightness() -{ - int maxbrightnessfd = -1; - static int max_brightness = -1; - -#ifndef LOCALTEST - if(__builtin_expect(max_brightness < 0, 0)) - { - #ifdef DEVICE_ONLY - DIR* dir_info; - struct dirent* dir_entry; - char fullpath[PATH_MAX]; - - dir_info = opendir(BRIGHTNESS_PARENT_DIR); - if(dir_info != NULL) - { - while((dir_entry = readdir(dir_info)) != NULL) - { - if(strcmp(dir_entry->d_name, ".") == 0 || strcmp(dir_entry->d_name, "..") == 0) - continue; - else // first directory - { - sprintf(fullpath, BRIGHTNESS_PARENT_DIR "/%s/" MAX_BRIGHTNESS_FILENAME, dir_entry->d_name); - max_brightness = get_file_status(&maxbrightnessfd, fullpath); - } - } - } - else - { - // do nothing - } - #else - max_brightness = get_file_status(&maxbrightnessfd, EMUL_MAX_BRIGHTNESSFD); - #endif - } - - if(maxbrightnessfd != -1) - close(maxbrightnessfd); -#endif // LOCALTEST - - return max_brightness; -} - -static int get_video_status() -{ - static int videofd = -1; - int video_status = 0; - -#ifndef LOCALTEST - video_status = get_file_status(&videofd, MFCFD); - if (video_status > 1) - video_status = 0; -#endif - - return video_status; -} - -static int get_rssi_status() -{ -#ifndef LOCALTEST - int flightmode_status; - - #ifdef USE_VCONF - int rssi_status; - if(unlikely(vconf_get_bool(VCONFKEY_SETAPPL_FLIGHT_MODE_BOOL, - &flightmode_status) < 0)) - { - flightmode_status = 0; - } - - if(!flightmode_status) - { - if(unlikely(vconf_get_int(VCONFKEY_TELEPHONY_RSSI, &rssi_status) < 0)) - { - rssi_status = VCONFKEY_TELEPHONY_RSSI_0; - } - } - else - { - rssi_status = VCONFKEY_TELEPHONY_RSSI_0; - } - - return rssi_status; - #else - network_info_rssi_e rssi_status; - - if(unlikely(runtime_info_get_value_bool( - RUNTIME_INFO_KEY_FLIGHT_MODE_ENABLED, (bool*)&flightmode_status) < 0)) - { - flightmode_status = 0; - } - - if(!flightmode_status) - { - if(unlikely(network_info_get_rssi(&rssi_status) < 0)) - { - rssi_status = NETWORK_INFO_RSSI_0; - } - } - else - { - rssi_status = NETWORK_INFO_RSSI_0; - } - - return (int)rssi_status; - #endif // USE_VCONF -#else - return 0; -#endif -} - -static int get_call_status() -{ - int call_status = 0; - -#ifndef LOCALTEST - #ifdef USE_VCONF - if(unlikely(vconf_get_int(VCONFKEY_CALL_STATE, &call_status) < 0)) - { - call_status = VCONFKEY_CALL_OFF; - } - #else - call_state_e call_state; - if(unlikely(call_get_voice_call_state(&call_state) < 0)) - { - if(unlikely(call_get_video_call_state(&call_state) < 0)) - { - call_status = 0; // call idle - } - else - { - // return video call state - if(call_state == CALL_STATE_CONNECTING) - call_status = 3; - else if(call_state == CALL_STATE_ACTIVE) - call_status = 4; - } - } - else if(call_state == CALL_STATE_IDLE) // voice call state is idle - { - if(unlikely(call_get_video_call_state(&call_state) < 0)) - { - call_status = 0; - } - else - { - // return video call state - if(call_state == CALL_STATE_CONNECTING) - call_status = 3; - else if(call_state == CALL_STATE_ACTIVE) - call_status = 4; - } - } - else - { - // return voice call state - if(call_state == CALL_STATE_CONNECTING) - call_status = 1; - else if(call_state == CALL_STATE_ACTIVE) - call_status = 2; - } - #endif // USE_VCONF -#endif - - return call_status; -} - -// dnet means 3G? -static int get_dnet_status() -{ - int dnet_status = false; - -#ifndef LOCALTEST - #ifdef USE_VCONF - if(unlikely(vconf_get_int(VCONFKEY_DNET_STATE, &dnet_status) < 0)) - { - dnet_status = VCONFKEY_DNET_OFF; - } - #else - if(unlikely(runtime_info_get_value_bool( - RUNTIME_INFO_KEY_PACKET_DATA_ENABLED, (bool*)&dnet_status) < 0)) - { - dnet_status = 0; - } - #endif // USE_VCONF -#endif - - return dnet_status; -} - -static int get_camera_status() -{ - int camera_status = 0; - -#ifndef LOCALTEST -#if 0 - #ifdef USE_VCONF - if(unlikely(vconf_get_int(VCONFKEY_CAMERA_STATE, &camera_status) < 0)) - { - camera_status = VCONFKEY_CAMERA_OFF; - } - #endif // USE_VCONF -#endif -#endif - - return camera_status; -} - -// this means silent mode? -static int get_sound_status() -{ - int sound_status = 0; - -#ifndef LOCALTEST - #ifdef USE_VCONF - if(unlikely(vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, - &sound_status) < 0)) - { - sound_status = 0; - } - #else - if(unlikely(runtime_info_get_value_bool( - RUNTIME_INFO_KEY_SILENT_MODE_ENABLED, (bool*)&sound_status) < 0)) - { - sound_status = 0; - } - else - { - sound_status = (sound_status == 1) ? 0 : 1; // slient mode - } - #endif // USE_VCONF -#endif - - return sound_status; -} - -static int get_audio_status() -{ - int audio_state = 0; - -#ifndef LOCALTEST - -#ifdef DEVICE_ONLY - int ret = 0; - char dev[40]; - char state[3]; - FILE *fp = NULL; - - fp = fopen(AUDIOFD, "r"); - if(fp == NULL) - return -1; - - while(ret != EOF) - { - ret = fscanf(fp, "%[^:] %*c %[^\n] ", dev, state); - if(strncmp(dev,"SPKR",4) == 0 && strncmp(state, "On",2) == 0) - { - audio_state = 1; - } - else if(ret == 2 && strncmp(dev,"Head",4) == 0 && strncmp(state, "On",2) == 0) - { - audio_state = 2; - break; - } - } - - fclose(fp); -#endif - -#endif // LOCALTEST - - return audio_state; -} - -static int get_vibration_status() -{ - int vibration_status = 0; - -#ifndef LOCALTEST - #ifdef USE_VCONF - if(unlikely(vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, - &vibration_status) < 0)) - { - vibration_status = 0; - } - #else - if(unlikely(runtime_info_get_value_bool( - RUNTIME_INFO_KEY_VIBRATION_ENABLED, (bool*)&vibration_status) < 0)) - { - vibration_status = 0; - } - #endif // USE_VCONF -#endif - - return vibration_status; -} - -static int get_voltage_status() -{ - static int voltagefd = -2; - return get_file_status(&voltagefd, VOLTAGEFD); -} - -// ===================================================================== -// cpu information getter functions -// ===================================================================== -static int get_cpu_frequency() -{ - static int frequencyfd = -2; - int ret = -1; - - if(frequencyfd != -1) // first time or file is exist - ret = get_file_status(&frequencyfd, FREQFD); - - if(ret < 0) // error occured - { - FILE* cpufp; - char buf[SMALL_BUFFER]; - int strsize = strlen(CPUMHZ); - double freq; - - cpufp = fopen(PROCCPUINFO, "r"); - if(likely(cpufp != NULL)) - { - while(fgets(buf, SMALL_BUFFER, cpufp) != NULL) - { - if(strncmp(buf, CPUMHZ, strsize) == 0) - { - freq = atof(strchr(buf, ':') + 1); - ret = (int)(freq * 1000.0); - break; - } - } - - fclose(cpufp); - } - else - { // do nothing - } - } - - if(ret < 0) - ret = 0; - - return ret; -} - -// ======================================================================== -// get cpu and memory info for each process and whole system -// ======================================================================== -typedef struct _proc_node { - proc_t proc_data; - unsigned long long saved_utime; - unsigned long long saved_stime; - int found; - struct _proc_node *next; -} procNode; - -static procNode *prochead = NULL; -static procNode *thread_prochead = NULL; - -static procNode* find_node(procNode *head, pid_t pid) -{ - procNode *t = head; - - while (t != NULL) { - if (t->proc_data.pid == pid) - { - t->found = 1; - break; - } - t = t->next; - } - return t; -} - -static procNode* add_node(procNode **head, pid_t pid) -{ - procNode *n; - - n = (procNode *) malloc(sizeof(procNode)); - if (n == NULL) { - LOGE("Not enough memory, add cpu info node failied"); - return NULL; - } - - n->proc_data.pid = pid; - n->found = 1; - n->next = *head; - *head = n; - - return n; -} - -static int del_node(procNode **head, pid_t pid) -{ - procNode *t; - procNode *prev; - - t = *head; - prev = NULL; - while (t != NULL) { - if (t->proc_data.pid == pid) { - if (prev != NULL) - prev->next = t->next; - else - *head = (*head)->next; - free(t); - break; - } - prev = t; - t = t->next; - } - - return 0; -} - -static int del_notfound_node(procNode **head) -{ - procNode *proc, *prev; - prev = NULL; - for(proc = *head; proc != NULL; ) - { - if(proc->found == 0) - { - if(prev != NULL) - { - prev->next = proc->next; - free(proc); - proc = prev->next; - } - else - { - *head = (*head)->next; - free(proc); - proc = *head; - } - } - else - { - prev = proc; - proc = proc->next; - } - } - return 0; -} - -static int reset_found_node(procNode *head) -{ - procNode* proc; - for(proc = head; proc != NULL; proc = proc->next) - { - proc->found = 0; - } - return 0; -} - -// return 0 for normal case -// return negative value for error case -static int parse_proc_stat_file_bypid(char *path, proc_t* P) -{ - char filename[PROCPATH_MAX]; - char buf[BUFFER_MAX]; - int fd, num; - char *abuf, *bbuf; - - // read from stat file - sprintf(filename, "%s/stat", path); - fd = open(filename, O_RDONLY, 0); - - if(unlikely(fd == -1)) - return -1; - - num = read(fd, buf, BUFFER_MAX); - close(fd); - - if(unlikely(num <= 0)) - return -1; - - buf[num] = '\0'; - - // scan from buffer - // copy command name - abuf = strchr(buf, '(') + 1; - bbuf = strrchr(buf, ')'); - num = bbuf - abuf; - if(unlikely(num >= sizeof(P->command))) - num = sizeof(P->command) - 1; - memcpy(P->command, abuf, num); - P->command[num] = '\0'; - abuf = bbuf + 2; - - // scan data - - sscanf(abuf, - "%c " - "%d %d %d %d %d " - "%lu %lu %lu %lu %lu " - "%Lu %Lu %Lu %Lu " // utime stime cutime cstime - "%ld %ld " - "%d " - "%ld " - "%Lu " // start_time - "%lu " - "%ld", - &P->state, - &P->ppid, &P->pgrp, &P->sid, &P->tty_nr, &P->tty_pgrp, - &P->flags, &P->minor_fault, &P->cminor_fault, &P->major_fault, &P->cmajor_fault, - &P->utime, &P->stime, &P->cutime, &P->cstime, - &P->priority, &P->nice, - &P->numofthread, - &P->dummy, - &P->start_time, - &P->vir_mem, - &P->res_memblock - ); - - if(P->numofthread == 0) - P->numofthread = 1; - - return 0; -} - -// return 0 for normal case -// return negative value for error case -static int parse_proc_smaps_file_bypid(char *path, proc_t* P) -{ -#define MIN_SMAP_BLOCKLINE 50 - - char filename[PROCPATH_MAX]; - char buf[MIDDLE_BUFFER]; - char numbuf[SMALL_BUFFER]; - FILE* fp; - - // reset pss size of proc_t - P->pss = 0; - - // read from smaps file - sprintf(filename, "%s/smaps", path); - fp = fopen(filename, "r"); - - if(fp == NULL) - return -1; - - if(unlikely(probe_so_size == 0)) // probe so size is not abtained - { - int is_probe_so = 0; - while(fgets(buf, MIDDLE_BUFFER, fp) != NULL) - { - if(strncmp(buf, "Pss:", 4) == 0) // line is started with "Pss:" - { - sscanf(buf, "Pss:%s kB", numbuf); - P->pss += atoi(numbuf); - if(is_probe_so == 1) - { - probe_so_size += atoi(numbuf); - is_probe_so = 0; // reset search flag - } - } - else // not Pss line - { - if(is_probe_so == 0 && strlen(buf) > MIN_SMAP_BLOCKLINE) // first we find probe so section - { - if(strstr(buf, DA_PROBE_TIZEN_SONAME) != NULL || - strstr(buf, DA_PROBE_OSP_SONAME) != NULL) // found probe.so - { - is_probe_so = 1; - } - else - { - // do nothing - } - } - else - { - // do nothing - } - } - } - } - else // we know about probe.so size already - { - while(fgets(buf, MIDDLE_BUFFER, fp) != NULL) - { - if(strncmp(buf, "Pss:", 4) == 0) - { - sscanf(buf, "Pss:%s kB", numbuf); - P->pss += atoi(numbuf); - } - } - } - - P->pss -= probe_so_size; - - fclose(fp); - - return 0; -} - -// return 0 for normal case -// return positive value for non critical case -// return negative value for critical case -static int update_process_data(int* pidarray, int pidcount, enum PROCESS_DATA datatype) -{ - static struct stat sb; - int i, ret = 0; - char buf[PROCPATH_MAX]; - procNode* procnode; - - for(i = 0; i < pidcount; i++) - { - if (pidarray[i] == 0) // pid is invalid - { - ret = 1; - continue; - } - - sprintf(buf, "/proc/%d", pidarray[i]); - if (unlikely(stat(buf, &sb) == -1)) // cannot access anymore - { - del_node(&prochead, pidarray[i]); - ret = errno; - continue; - } - - if ((procnode = find_node(prochead, pidarray[i])) == NULL) // new process - { - procnode = add_node(&prochead, pidarray[i]); - if(datatype == PROCDATA_STAT) - { - if (unlikely((ret = parse_proc_stat_file_bypid(buf, &(procnode->proc_data))) < 0)) - { - LOGE("Failed to get proc stat file by pid(%d)\n", pidarray[i]); - } - else - { - procnode->saved_utime = procnode->proc_data.utime; - procnode->saved_stime = procnode->proc_data.stime; - } - } - else if(datatype == PROCDATA_SMAPS) - { - if (unlikely((ret = parse_proc_smaps_file_bypid(buf, &(procnode->proc_data))) < 0)) - { - LOGE("Failed to get proc smaps file by pid(%d)\n", pidarray[i]); - } - else - { // do nothing - } - } - else - { // impossible - } - } - else - { - if(datatype == PROCDATA_STAT) - { - if (unlikely((ret = parse_proc_stat_file_bypid(buf, &(procnode->proc_data))) < 0)) - { - LOGE("Failed to get proc stat file by pid(%d)\n", pidarray[i]); - } - else - { // do nothing - } - } - else if(datatype == PROCDATA_SMAPS) - { - if (unlikely((ret = parse_proc_smaps_file_bypid(buf, &(procnode->proc_data))) < 0)) - { - LOGE("Failed to get proc smaps file by pid(%d)\n", pidarray[i]); - } - else - { // do nothing - } - } - else - { // impossible - } - } - } - - del_notfound_node(&prochead); - reset_found_node(prochead); - - return ret; -} - -static int update_system_cpu_frequency(int cur_index) -{ - char buf[SMALL_BUFFER]; - char filename[SMALL_BUFFER]; - int i, j; - FILE* fp; - - // execute this block only once - if(unlikely(num_of_freq <= 0)) - { - FILE* fp; - num_of_freq = 0; - if((fp = fopen(CPUNUM_OF_FREQ, "r")) != NULL) - { - while(fgets(buf, SMALL_BUFFER, fp) != NULL) - { - num_of_freq++; - } - fclose(fp); - } - else - { - LOGW("Cannot open cpu0 frequency file\n"); - return -11; - } - - for(i = 0; i < num_of_cpu; i++) - { - if(cpus[i].pfreq == NULL) - { - cpus[i].pfreq = (cpufreq_t*) calloc(num_of_freq, sizeof(cpufreq_t)); - } - } - } - - sprintf(filename, CPUNUM_OF_FREQ); - // update cpu frequency information - for(i = 0; i < num_of_cpu; i++) - { - filename[27] = (char)('0' + i); - fp = fopen(filename, "r"); - if(fp != NULL) - { - for(j = 0; j < num_of_freq; j++) - { - if(fgets(buf, SMALL_BUFFER, fp) != NULL) - { - sscanf(buf, "%lu %Lu", &(cpus[i].pfreq[j].freq), - &(cpus[i].pfreq[j].tick)); - } - else // cannot read anymore from frequency info file - break; - } - - fclose(fp); - cpus[i].cur_freq_index = cur_index; - } - else // cannot load cpu frequency information - { // do nothing - } - } - - return 0; -} - -// return 0 for normal case -// return negative value for error -static int update_system_cpu_data(int cur_index) -{ - static FILE* fp = NULL; - int num; - char buf[BUFFER_MAX]; - - if(fp == NULL) - { - if((fp = fopen(PROCSTAT, "r")) == NULL) - { - LOGE("Failed to open " PROCSTAT "\n"); - return -1; - } - } - - rewind(fp); - fflush(fp); - - if(fgets(buf, sizeof(buf), fp) == NULL) - { - LOGE("Failed to read first line of " PROCSTAT "\n"); -// fclose(fp); - return -1; - } - - cpus[num_of_cpu].x = 0; - cpus[num_of_cpu].y = 0; - cpus[num_of_cpu].z = 0; - num = sscanf(buf, "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu", - &cpus[num_of_cpu].u, - &cpus[num_of_cpu].n, - &cpus[num_of_cpu].s, - &cpus[num_of_cpu].i, - &cpus[num_of_cpu].w, - &cpus[num_of_cpu].x, - &cpus[num_of_cpu].y, - &cpus[num_of_cpu].z - ); - cpus[num_of_cpu].cur_load_index = cur_index; - if(num < 4) - { - LOGE("Failed to read from " PROCSTAT "\n"); -// fclose(fp); - return -1; - } - -#ifdef FOR_EACH_CPU - // and just in case we're 2.2.xx compiled without SMP support... - if(num_of_cpu == 1) - { - cpus[0].id = cpus[1].id = 0; - memcpy(cpus, &cpus[1], sizeof(tic_t) * 8); - cpus[0].cur_load_index = cur_index; - } - else if(num_of_cpu > 1) - { - int i; - // now value each separate cpu's tics - for(i = 0; i < num_of_cpu; i++) - { - if(fgets(buf, sizeof(buf), fp) != NULL) - { - cpus[i].x = 0; - cpus[i].y = 0; - cpus[i].z = 0; - num = sscanf(buf, "cpu%u %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu", - &cpus[i].id, - &cpus[i].u, &cpus[i].n, &cpus[i].s, &cpus[i].i, - &cpus[i].w, &cpus[i].x, &cpus[i].y, &cpus[i].z); - if(num > 4) - { - LOGI("Readed %d stats of %dth cpu\n", num, i); - cpus[i].cur_load_index = cur_index; - } - else // buf is not cpu core tick information - { // do nothing - } - } - else // cannot read anymore from /proc/stat file - { // do nothing - } - } - } - else - { - // not possible -// fclose(fp); - return -1; - } -#endif - -// fclose(fp); - return 0; -} - -// return 0 for normal case -// return negative value for error -static int update_system_memory_data(unsigned long *memtotal, unsigned long *memused) -{ - static int meminfo_fd = -1; - char *head, *tail; - int i, num; - char buf[BUFFER_MAX]; - static const mem_t mem_table[] = { - {"Buffers", &mem_slot_array[MEM_SLOT_BUFFER]}, - {"Cached", &mem_slot_array[MEM_SLOT_CACHED]}, - {"MemFree", &mem_slot_array[MEM_SLOT_FREE]}, - {"MemTotal", &mem_slot_array[MEM_SLOT_TOTAL]}, - }; - const int mem_table_size = sizeof(mem_table) / sizeof(mem_t); - - if(meminfo_fd == -1 && (meminfo_fd = open(PROCMEMINFO, O_RDONLY)) == -1) - { - LOGE("Failed to open " PROCMEMINFO "\n"); - return -1; - } - lseek(meminfo_fd, 0L, SEEK_SET); - if((num = read(meminfo_fd, buf, BUFFER_MAX)) < 0) - { - LOGE("Failed to read from " PROCMEMINFO "\n"); - return -1; - } - buf[num] = '\0'; - - num = 0; // number of found element - head = buf; - for( ;num < mem_table_size ; ) - { - tail = strchr(head, ':'); - if(!tail) - break; - *tail = '\0'; - for(i = 0; i < mem_table_size; i++) - { - if(strcmp(head, mem_table[i].name) == 0) // found - { - head = tail + 1; - *(mem_table[i].slot) = strtoul(head, &tail, 10); - num++; - break; - } - } - if(i == mem_table_size) // cannot find entry - head = tail + 1; - tail = strchr(head, '\n'); - if(tail == NULL) - break; - head = tail + 1; - } - - if(num == mem_table_size) // find all element - { - *memtotal = mem_slot_array[MEM_SLOT_TOTAL]; - *memused = mem_slot_array[MEM_SLOT_TOTAL] - mem_slot_array[MEM_SLOT_FREE] - - mem_slot_array[MEM_SLOT_BUFFER] - mem_slot_array[MEM_SLOT_CACHED]; - - *memtotal *= 1024; // change to Byte - *memused *= 1024; // change to Byte - return 0; - } - else - { - LOGE("Cannot find all neccessary element in meminfo\n"); - return -1; - } -} - -// return 0 for error case -// return system total memory in MB -static unsigned long get_system_total_memory() -{ - int meminfo_fd = -1; - char *head, *tail; - int num; - char buf[BUFFER_MAX]; - static const char* memtotalstr = "MemTotal"; - unsigned long totalmem = 0; - - if((meminfo_fd = open(PROCMEMINFO, O_RDONLY)) == -1) - { - LOGE("Failed to open " PROCMEMINFO "\n"); - return 0; - } - if((num = read(meminfo_fd, buf, BUFFER_MAX)) < 0) - { - LOGE("Failed to read from " PROCMEMINFO "\n"); - return 0; - } - buf[num] = '\0'; - close(meminfo_fd); - - head = buf; - for( ; ; ) - { - tail = strchr(head, ':'); - if(!tail) - break; - *tail = '\0'; - if(strcmp(head, memtotalstr) == 0) // found - { - head = tail + 1; - totalmem = strtoul(head, &tail, 10); - break; - } - - head = tail + 1; - tail = strchr(head, '\n'); - if(tail == NULL) - break; - head = tail + 1; - } - - return (totalmem * 1024); -} - -// =============================================================== -// disk information getter functions -// =============================================================== -static int get_fsinfo(const char* path, int type) -{ - struct statfs buf; - int total; - int free; - - if (statfs(path, &buf) < 0) - { - return -errno; - } - - total = (int)((long long)(buf.f_bsize / 1024LL * buf.f_blocks) / 1024LL); - free = (int)((long long)(buf.f_bsize / 1024LL * buf.f_bavail) / 1024LL); - - LOGI("File storage total(%d), free(%d)\n", total, free); - if (type == FSINFO_TYPE_TOTAL) - { - return total; - } - else if (type == FSINFO_TYPE_FREE) - { - return free; - } - - return -1; -} - -static int stat_get_storageinfo(int type) -{ - return get_fsinfo(UMSFD, type); -} - -static int stat_get_cardinfo(int type) -{ - if (access(MMCBLKFD, F_OK) < 0) - { - return -1; - } - - return get_fsinfo(MMCFD, type); -} - - -static int get_total_drive() -{ - int total = 0; - int storage = stat_get_storageinfo(FSINFO_TYPE_TOTAL); - int card = stat_get_cardinfo(FSINFO_TYPE_TOTAL); - - if (storage < 0 && card < 0) - { - return -1; - } - - total = storage + card; - - return total; -} - -static int get_total_used_drive() -{ - int total = 0; - int free = 0; - int storage = stat_get_storageinfo(FSINFO_TYPE_FREE); - int card = stat_get_cardinfo(FSINFO_TYPE_FREE); - - if (storage < 0 && card < 0) - { - return -1; - } - - free = storage + card; - total = get_total_drive() - free; - - return total; -} - -static int update_thread_data(int pid) -{ - static struct stat sb; - int ret = 0; - char path[PROCPATH_MAX]; - char buf[PROCPATH_MAX]; - procNode* procnode; - DIR *taskdir = NULL; - struct dirent *entry = NULL; - unsigned int tid; - - sprintf(path, "/proc/%d/task", pid); - - if(!(taskdir = opendir(path))) - { - return -1; - } - - while((entry = readdir(taskdir)) != NULL) - { - if(*entry->d_name > '0' && *entry->d_name <= '9') - { - tid = atoi(entry->d_name); - sprintf(buf, "/proc/%d/task/%d", pid, tid); - - if(unlikely(stat(buf, &sb) == -1)) - { - del_node(&thread_prochead, tid); - ret = errno; - continue; - } - - if((procnode = find_node(thread_prochead, tid)) == NULL) - { - procnode = add_node(&thread_prochead, tid); - if(unlikely((ret = parse_proc_stat_file_bypid(buf, &(procnode->proc_data))) < 0)) - { - LOGE("Failed to get proc stat file by tid(%d)\n", tid); - } - else - { - procnode->saved_utime = procnode->proc_data.utime; - procnode->saved_stime = procnode->proc_data.stime; - } - } - else - { - if(unlikely((ret = parse_proc_stat_file_bypid(buf, &(procnode->proc_data))) < 0)) - { - LOGE("Failed to get proc stat file by tid(%d)\n", tid); - } - } - } - } - - del_notfound_node(&thread_prochead); - reset_found_node(thread_prochead); - - closedir(taskdir); - return ret; -} - -// ======================================================================== -// overall information getter functions -// ======================================================================== - -// this code is not necessary anymore -/* -static void get_app_info(const char* binary_path, char* width, - char* height, char* theme, char* version, - char* scale, char* removable, - char* comment) -{ - int fd = 0; - int res = 0; - int i = 0; - int j = 0; - char pkg_info_path [PATH_MAX]; - char buffer [BUFFER_MAX]; - - sprintf(pkg_info_path, "/opt/share/applications/%s.desktop", pkg_name); - - fd = open(pkg_info_path, O_RDONLY); - if (fd < 0) - { - LOGE("Cannot open %s", pkg_info_path); - return; - } - - fcntl( fd, F_SETFD, FD_CLOEXEC ); - - LOGI("get_app_info - After open pkg_info_path\n"); - - for (;;) - { - res = read(fd, buffer, BUFFER_MAX); - if (res == 0) - { - break; - } - if (res < 0) - { - if (errno == EINTR) - continue; - else - break; - } - - LOGI("read buffer ===%s===\n", buffer); - for (i = 0; i < res; i++) - { - if (i < res - 22 && strncmp(&buffer[i], "X-SLP-BaseLayoutWidth=", 22) == 0) - { - for (j = 0; j < res; j ++) - { - if (buffer[i+j] == '\n' || buffer[i+j] == '\t') - { - LOGI("width :::: "); - strncpy(width, &(buffer[i+22]), j-22); - LOGI("%s\n", width); - break; - } - } - i = i + j; - } - else if (i < res - 23 && strncmp(&buffer[i], "X-SLP-BaseLayoutHeight=", 23) == 0) - { - for (j = 0; j < res; j ++) - { - if (buffer[i+j] == '\n' || buffer[i+j] == '\t') - { - LOGI("height :::: "); - strncpy(height, &(buffer[i+23]), j-23); - LOGI("%s\n", height); - break; - } - } - i = i + j; - } - else if (i < res - 6 && (strncmp(&buffer[i], "theme=", 6) == 0 || strncmp(&buffer[i], "Theme=", 6) == 0)) - { - for (j = 0; j < res; j ++) - { - if (buffer[i+j] == '\n' || buffer[i+j] == '\t') - { - LOGI("theme :::: "); - strncpy(theme, &(buffer[i+6]), j-6); - LOGI("%s\n", theme); - break; - } - } - i = i + j; - } - else if (i < res - 8 && (strncmp(&buffer[i], "Version=", 8) == 0 || strncmp(&buffer[i], "version=", 8) == 0)) - { - for (j = 0; j < res; j ++) - { - if (buffer[i+j] == '\n' || buffer[i+j] == '\t') - { - LOGI("version :::: "); - strncpy(version, &(buffer[i+8]), j-8); - LOGI("%s\n", version); - break; - } - } - i = i + j; - } - else if (i < res - 24 && strncmp(&buffer[i], "X-SLP-IsHorizontalScale=", 24) == 0) - { - for (j = 0; j < res; j ++) - { - if (buffer[i+j] == '\n' || buffer[i+j] == '\t') - { - LOGI("scale :::: "); - strncpy(scale, &(buffer[i+24]), j-24); - LOGI("%s\n", scale); - break; - } - } - i = i + j; - } - else if (i < res - 16 && strncmp(&buffer[i], "X-SLP-Removable=", 16) == 0) - { - for (j = 0; j < res; j ++) - { - if (buffer[i+j] == '\n' || buffer[i+j] == '\t') - { - LOGI("removable :::: "); - strncpy(removable, &(buffer[i+16]), j-16); - LOGI("%s\n", removable); - break; - } - } - i = i + j; - } - else if (i < res - 8 && (strncmp(&buffer[i], "Comment=", 8) == 0 || strncmp(&buffer[i], "comment=", 8) == 0)) - { - for (j = 0; j < res; j ++) - { - if (buffer[i+j] == '\n' || buffer[i+j] == '\t') - { - LOGI("comments :::: "); - strncpy(comment, &(buffer[i+8]), j-8); - LOGI("%s\n", comment); - break; - } - } - i = i + j; - } - } - } - - close(fd); -} -*/ - -static int get_device_availability_info(char* buf, int buflen) -{ - int camera_count = 0; - bool blue_support = false; - bool gps_support = false; - bool wifi_support = false; - char* networktype = NULL; - int loglen = 0; - -#ifndef LOCALTEST - system_info_get_value_bool(SYSTEM_INFO_KEY_BLUETOOTH_SUPPORTED, &blue_support); - system_info_get_value_int(SYSTEM_INFO_KEY_CAMERA_COUNT, &camera_count); - system_info_get_value_bool(SYSTEM_INFO_KEY_GPS_SUPPORTED, &gps_support); - system_info_get_value_string(SYSTEM_INFO_KEY_NETWORK_TYPE, &networktype); - system_info_get_value_bool(SYSTEM_INFO_KEY_WIFI_SUPPORTED, &wifi_support); -#endif - - loglen += sprintf(buf, "%d`,%d`,%d`,%d`,", - (int)blue_support, - (int)gps_support, - (int)wifi_support, - camera_count); - - if(networktype != NULL) - { - loglen += sprintf(buf + loglen, "%s", networktype); - free(networktype); - } - else - { - // do nothing - } - - return loglen; -} - -int get_device_info(char* buffer, int buffer_len) -{ - int res = 0; -/* - char width[BUFFER_MAX]; - char height[BUFFER_MAX]; - char theme[BUFFER_MAX]; - char version[BUFFER_MAX]; - char scale[BUFFER_MAX]; - char removable[BUFFER_MAX]; - char comment[BUFFER_MAX * 2]; - - memset(width, 0, sizeof(width)); - memset(height, 0, sizeof(height)); - memset(theme, 0, sizeof(theme)); - memset(version, 0, sizeof(version)); - memset(scale, 0, sizeof(scale)); - memset(removable, 0, sizeof(removable)); - memset(comment, 0, sizeof(comment)); -*/ - res += sprintf(buffer, "%lu`,%d`,", get_system_total_memory(), get_total_drive()); - res += get_device_availability_info(buffer + res, buffer_len - res); - res += sprintf(buffer + res, "`,%d", get_max_brightness()); - - res += sprintf(buffer + res, "`,`,`,`,`,`,`,"); -// res += sprintf(buffer + res, "`,%s`,%s`,%s`,%s`,%s`,%s`,%s", width, height, theme, version, scale, removable, comment); - - return res; -} - -// return log length (>0) for normal case -// return negative value for error -int get_resource_info(char* buffer, int buffer_len, int* pidarray, int pidcount) -{ - static struct timeval old_time = {0, 0}; - static int event_num = 0; - - int res = 0; - int i, j; - float elapsed; - float factor; - procNode* proc; - CPU_t* cpuptr; - struct timeval current_time; - - // data variable - unsigned long virtual = 0; - unsigned long resident = 0; - unsigned long shared = 0; - unsigned long pssmem = 0; - int num_thread = 0; - unsigned long long ticks = 0, freqsum; - float app_cpu_usage, sys_usage, thread_load; - unsigned long sysmemtotal = 0; - unsigned long sysmemused = 0; - unsigned long curtime; -// long long idle_tick_sum = 0, total_tick_sum = 0; - int call_time = 0; - int rssi_time = 0; - - // buffers - char thread_loadbuf[LARGE_BUFFER] = {0, }; - char thread_loadtmpbuf[SMALL_BUFFER]; - char freqbuf[MIDDLE_BUFFER]; - char cpuload[SMALL_BUFFER]; - int freqbufpos = 0; - int cpuloadpos = 0; -// unsigned int failed_cpu = 0; - - LOGI("PID count : %d\n", pidcount); - - if(update_process_data(pidarray, pidcount, PROCDATA_STAT) < 0) - { - LOGE("Failed to update process stat data\n"); - return -1; - } - - // this position is optimized position of timestamp. - // just before get system cpu data and just after get process cpu data - // because cpu data is changed so fast and variance is so remarkable - gettimeofday(¤t_time, NULL); // DO NOT MOVE THIS SENTENCE! - - if(update_system_cpu_data(event_num) < 0) - { - LOGE("Failed to update system cpu data\n"); - return -1; - } - - // freqbufpos is temporary used - freqbufpos = update_system_cpu_frequency(event_num); - - // memory data is changed slowly and variance is not remarkable - // so memory data is less related with timestamp then cpu data - if(update_process_data(pidarray, pidcount, PROCDATA_SMAPS) < 0) - { - LOGE("Failed to update process smaps data\n"); - return -1; - } - - if(update_thread_data(pidarray[0]) < 0) - { - LOGE("Failed to update thread stat data\n"); - return -1; - } - - if(update_system_memory_data(&sysmemtotal, &sysmemused) < 0) - { - LOGE("Failed to update system memory data\n"); - return -1; - } - - // prepare calculate - elapsed = (current_time.tv_sec - old_time.tv_sec) + - ((float)(current_time.tv_usec - old_time.tv_usec) / 1000000.0f); - old_time.tv_sec = current_time.tv_sec; - old_time.tv_usec = current_time.tv_usec; - curtime = ((unsigned long)current_time.tv_sec * 10000) + - ((unsigned long)current_time.tv_usec / 100); - - factor = 100.0f / ((float)Hertz * elapsed * num_of_cpu); - - - // calculate process for process - for(proc = prochead; proc != NULL; proc = proc->next) - { - num_thread += proc->proc_data.numofthread; - virtual += proc->proc_data.vir_mem; // Byte - resident += (proc->proc_data.res_memblock * 4); // KByte - pssmem += (proc->proc_data.pss); // KByte - ticks += (proc->proc_data.utime + proc->proc_data.stime - proc->saved_utime - proc->saved_stime); - - proc->saved_utime = proc->proc_data.utime; - proc->saved_stime = proc->proc_data.stime; - } - app_cpu_usage = (float)ticks * factor; - if(app_cpu_usage > 100.0f) - app_cpu_usage = 100.0f; - resident = resident * 1024; // change to Byte - pssmem = pssmem * 1024; // change to Byte - - // calculate thread load - for(proc = thread_prochead; proc != NULL; proc = proc->next) - { - thread_load = (float)(proc->proc_data.utime + proc->proc_data.stime - proc->saved_utime - proc->saved_stime) - * factor; - if(thread_load > 100.0f) - thread_load = 100.0f; - - sprintf(thread_loadtmpbuf, "%d,%.1f,", proc->proc_data.pid, thread_load); - strcat(thread_loadbuf, thread_loadtmpbuf); - - proc->saved_utime = proc->proc_data.utime; - proc->saved_stime = proc->proc_data.stime; - } - - // calculate for system cpu load -#ifdef FOR_EACH_CPU - for(i = 0; i < num_of_cpu; i++) -#else - for(i = num_of_cpu; i <= num_of_cpu; i++) -#endif - { - cpuptr = &(cpus[i]); - - if(cpuptr->cur_load_index == event_num) - { - if(cpuptr->sav_load_index == event_num - 1) // previous sampling is just before 1 period - { - cpuptr->idle_ticks = cpuptr->i - cpuptr->i_sav; - if(unlikely(cpuptr->idle_ticks < 0)) - { - cpuptr->idle_ticks = 0; - } - cpuptr->total_ticks = (cpuptr->u - cpuptr->u_sav) + - (cpuptr->s - cpuptr->s_sav) + - (cpuptr->n - cpuptr->n_sav) + - cpuptr->idle_ticks + - (cpuptr->w - cpuptr->w_sav) + - (cpuptr->x - cpuptr->x_sav) + - (cpuptr->y - cpuptr->y_sav) + - (cpuptr->z - cpuptr->z_sav); - if(cpuptr->total_ticks < MIN_TOTAL_TICK) - { - cpuptr->cpu_usage = 0.0f; - } - else - { - cpuptr->cpu_usage = (1.0f - ((float)cpuptr->idle_ticks / (float)cpuptr->total_ticks)) * 100.0f; - } -// if(i != num_of_cpu) -// { -// idle_tick_sum += cpuptr->idle_ticks; -// total_tick_sum += cpuptr->total_ticks; -// } - LOGI("System cpu usage log : %d, %Ld, %Ld\n", i, cpuptr->idle_ticks, cpuptr->total_ticks); - if(unlikely(cpuptr->cpu_usage < 0)) - { - cpuptr->cpu_usage = 0.0f; - } - } - else // previous sampling is not just before 1 period - { - // assume non idle ticks happen in 1 profiling period - // because sampling is not available just before 1 profiling period - cpuptr->idle_ticks = (cpuptr->u - cpuptr->u_sav) + - (cpuptr->s - cpuptr->s_sav) + - (cpuptr->n - cpuptr->n_sav) + - (cpuptr->w - cpuptr->w_sav) + - (cpuptr->x - cpuptr->x_sav) + - (cpuptr->y - cpuptr->y_sav) + - (cpuptr->z - cpuptr->z_sav); - cpuptr->total_ticks = (long long)(Hertz * elapsed); - if(unlikely(cpuptr->total_ticks < 1)) - cpuptr->total_ticks = 1; - cpuptr->cpu_usage = ((float)cpuptr->idle_ticks / (float)cpuptr->total_ticks) * 100.0f; - if(unlikely(cpuptr->cpu_usage > 100.0f)) - { - cpuptr->cpu_usage = 100.0f; - } - } - - // save new value - cpuptr->u_sav = cpuptr->u; - cpuptr->s_sav = cpuptr->s; - cpuptr->n_sav = cpuptr->n; - cpuptr->i_sav = cpuptr->i; - cpuptr->w_sav = cpuptr->w; - cpuptr->x_sav = cpuptr->x; - cpuptr->y_sav = cpuptr->y; - cpuptr->z_sav = cpuptr->z; - cpuptr->sav_load_index = cpuptr->cur_load_index; - } - else - { - cpuptr->cpu_usage = 0.0f; - } - } - -#ifdef FOR_EACH_CPU - // calculate for cpu core load that failed to get tick information -/* - if(failed_cpu != 0) - { - LOGI("ticks1 : %Ld, %Ld\n", idle_tick_sum, total_tick_sum); - idle_tick_sum = cpus[num_of_cpu].idle_ticks - idle_tick_sum; - total_tick_sum = cpus[num_of_cpu].total_ticks - total_tick_sum; - LOGI("ticks2 : %Ld, %Ld\n", idle_tick_sum, total_tick_sum); - if(total_tick_sum >= MIN_TICKS_FOR_LOAD) - sys_usage = (1.0f - ((float)idle_tick_sum / (float)total_tick_sum)) * 100.0f; - else - sys_usage = 0.0f; - if(sys_usage < 0.0f) sys_usage = 0.0f; - else if(sys_usage > 100.0f) sys_usage = 100.0f; - - for(i = 0; i < num_of_cpu; i++) - { - if(failed_cpu & (1 << i)) - { - cpus[i].cpu_usage = sys_usage; - } - } - } -*/ - - // calculate for whole cpu load by average all core load - sys_usage = 0.0f; - for(i = 0 ; i < num_of_cpu; i++) - { - sys_usage += cpus[i].cpu_usage; - } - cpus[num_of_cpu].cpu_usage = sys_usage / num_of_cpu; - - // make cpu load string - for(i = 0; i <= num_of_cpu; i++) - { - cpuloadpos += sprintf(cpuload + cpuloadpos, "%.1f,", cpus[i].cpu_usage); - } - cpuload[cpuloadpos - 1] = '\0'; // remove last , -#else - sprintf(cpuload, "%.1f", cpus[num_of_cpu].cpu_usage); -#endif - - // calculate for system cpu frequency - if(freqbufpos >= 0) - { - sys_usage = 0.0f; - freqbufpos = 0; - ticks = 0; - freqsum = 0; - for(i = 0; i < num_of_cpu; i++) - { - cpuptr = &(cpus[i]); - - if(cpuptr->cur_freq_index == event_num) - { - if(cpuptr->sav_freq_index == event_num - 1) - { - for(j = 0; j < num_of_freq; j++) - { - freqsum += (cpuptr->pfreq[j].freq * - (cpuptr->pfreq[j].tick - cpuptr->pfreq[j].tick_sav)); - ticks += (cpuptr->pfreq[j].tick - cpuptr->pfreq[j].tick_sav); - } - } - else - { // do nothing - } - - for(j = 0; j < num_of_freq; j++) - { - cpuptr->pfreq[j].tick_sav = cpuptr->pfreq[j].tick; // restore last tick value - } - cpuptr->sav_freq_index = cpuptr->cur_freq_index; - } - -#ifdef FOR_EACH_CPU - if(ticks != 0) - { - if(sys_usage == 0.0f) - sys_usage = (float)freqsum / (float)ticks; - freqbufpos += sprintf(freqbuf + freqbufpos, "%.0f,", (float)freqsum / (float)ticks); - } - else - { - freqbufpos += sprintf(freqbuf + freqbufpos, "%.0f,", sys_usage); - } - ticks = 0; - freqsum = 0; -#endif - } -#ifndef FOR_EACH_CPU - freqbufpos += sprintf(freqbuf + freqbufpos, "%.0f", (float)freqsum / (float)ticks); -#else - freqbuf[freqbufpos - 1] = '\0'; // remove last , -#endif - } - else // update system cpu frequency is failed - { - freqbufpos = get_cpu_frequency(); - sprintf(freqbuf, "%d", (freqbufpos > 0)? freqbufpos : 0); - } - - // print log - res = sprintf(buffer, "9`," - "%d`,%d`,%lu`," // event number, reserved, current time - "%d`,%d`,%d`," // device status(wifi, bt, gps) - "%d`,%d`,%d`," // device status(bright, camera, sound) - "%d`,%d`,%d`," // device status(audio, vibration, voltage) - "%d`,%d`,%d`,%d`," // device status(rssi, video, call, dnet status) - "%d`,%d`," // device status(call_time, rssi_time) - "%s`,%.1f`,%s`," // cpu frequency and usage (app, system) - "%lu`,%lu`,%lu`,%lu`,%Ld`," // process memory - "%lu`,%lu`," // system total memory, used memory - "%d`," // system drive - "%d`," // number of thread - "%s`,\n", // thread load - event_num, 0, curtime, // 0 is reserved value - get_wifi_status(), get_bt_status(), get_gps_status(), - get_brightness_status(), get_camera_status(), get_sound_status(), - get_audio_status(), get_vibration_status(), get_voltage_status(), - get_rssi_status(), get_video_status(), get_call_status(), get_dnet_status(), - call_time, rssi_time, - freqbuf, app_cpu_usage, cpuload, - virtual, resident, shared, pssmem, get_total_alloc_size(), - sysmemtotal, sysmemused, - get_total_used_drive(), - num_thread, - thread_loadbuf - ); - - LOGI("get_resource_info result : %s", buffer); - - event_num++; - return res; -} - -int initialize_system_info() -{ - int i; - - num_of_cpu = sysconf(_SC_NPROCESSORS_ONLN); - if(num_of_cpu < 1) - num_of_cpu = 1; - Hertz = sysconf(_SC_CLK_TCK); - LOGI("Hertz : %d\n", Hertz); - - // alloc for cpus - if(cpus == NULL) - cpus = (CPU_t*) calloc((num_of_cpu + 1), sizeof(CPU_t)); - if(cpus != NULL) - { - for(i = 0; i <= num_of_cpu; i++) - { - cpus[i].cur_load_index = cpus[i].sav_load_index = -1; - cpus[i].cur_freq_index = cpus[i].sav_freq_index = -1; - } - } - else - { - LOGE("Failed to alloc memory for cpu information\n"); - return -1; - } - - return 0; -} - -int finalize_system_info() -{ - int i; - - if(cpus != NULL) - { - for(i = 0; i < num_of_cpu; i++) - { - if(cpus[i].pfreq != NULL) - free(cpus[i].pfreq); - } - - free(cpus); - } - - return 0; -} - diff --git a/packaging/daemon/sys_stat.h b/packaging/daemon/sys_stat.h deleted file mode 100644 index 91e2091..0000000 --- a/packaging/daemon/sys_stat.h +++ /dev/null @@ -1,158 +0,0 @@ -/* -* DA manager -* -* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. -* -* Contact: -* -* Jaewon Lim -* Woojin Jung -* Juyoung Kim -* - * Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* Contributors: -* - S-Core Co., Ltd -* -*/ - -#ifndef _SYS_STAT_ -#define _SYS_STAT_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define CHARGERFD "/sys/class/power_supply/battery/charge_now" -#define VOLTAGEFD "/sys/class/power_supply/battery/voltage_now" - -#define BRIGHTNESS_FILENAME "brightness" -#define MAX_BRIGHTNESS_FILENAME "max_brightness" -#define BRIGHTNESS_PARENT_DIR "/sys/class/backlight" - -#define EMUL_BRIGHTNESSFD "/sys/class/backlight/emulator/brightness" -#define EMUL_MAX_BRIGHTNESSFD "/sys/class/backlight/emulator/max_brightness" - - -#define AUDIOFD "/sys/devices/platform/soc-audio/dapm_widget" - -#define MFCFD "/sys/devices/platform/s3c-mfc/mfc/mfc_status" - -#define FREQFD "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq" - -#define CPUDIR "/sys/devices/system/cpu" -#define CPUFREQ_FILE "cpufreq/stats/time_in_state" -#define CPUNUM_OF_FREQ CPUDIR"/cpu0/"CPUFREQ_FILE - - -#define MEMINFOFD "/sys/class/memnotify/meminfo" -#define UMSFD "/mnt/ums" -#define MMCBLKFD "/dev/mmcblk1" -#define MMCFD "/mnt/mmc" - -#define PROCSTAT "/proc/stat" -#define PROCMEMINFO "/proc/meminfo" -#define PROCCPUINFO "/proc/cpuinfo" - -#define MEM_TYPE_TOTAL 1 -#define MEM_TYPE_USED 2 -#define MEM_TYPE_FREE 3 - -#define FSINFO_TYPE_TOTAL 1 -#define FSINFO_TYPE_FREE 2 - -#define MAXNAMESIZE 16 - -typedef unsigned long long tic_t; - -typedef struct { - unsigned int pid; - char command[MAXNAMESIZE]; - char state; - int ppid; - int pgrp; - int sid; - int tty_nr; - int tty_pgrp; - unsigned long flags; - unsigned long minor_fault; - unsigned long cminor_fault; - unsigned long major_fault; - unsigned long cmajor_fault; - unsigned long long utime; - unsigned long long stime; - unsigned long long cutime; - unsigned long long cstime; - long priority; - long nice; - int numofthread; - long dummy; - unsigned long long start_time; - unsigned long vir_mem; - long res_memblock; - unsigned long pss; -} proc_t; - -typedef struct { - unsigned long freq; - tic_t tick; - tic_t tick_sav; -} cpufreq_t; - -typedef struct { - tic_t u, n, s, i, w, x, y, z; - tic_t u_sav, n_sav, s_sav, i_sav, w_sav, x_sav, y_sav, z_sav; - unsigned int id; // cpu id - float cpu_usage; // cpu load for this core - int sav_load_index; // saved cpu load sampling index - int cur_load_index; // current cpu load sampling index - cpufreq_t* pfreq; // frequency information of cpu - int sav_freq_index; // sav cpu frequency sampling index - int cur_freq_index; // current cpu frequency sampling index - long long idle_ticks; - long long total_ticks; -} CPU_t; // for each cpu core - -typedef struct _mem_t { - const char* name; // memory slot name - unsigned long* slot; // memory value slot -} mem_t; - -int get_device_info(char* buffer, int buffer_len); - -int get_resource_info(char* buffer, int buffer_len, int* pidarray, int pidcount); - -int get_file_status(int* pfd, const char* filename); - -int initialize_system_info(); - -int finalize_system_info(); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/packaging/daemon/utils.c b/packaging/daemon/utils.c deleted file mode 100644 index 13070ff..0000000 --- a/packaging/daemon/utils.c +++ /dev/null @@ -1,260 +0,0 @@ -/* -* DA manager -* -* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. -* -* Contact: -* -* Jaewon Lim -* Woojin Jung -* Juyoung Kim -* - * Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* Contributors: -* - S-Core Co., Ltd -* -*/ - -#include -#include -#include "utils.h" -#include "da_debug.h" - -#define BUFFER_MAX 1024 - -static int file_fd = -1; - -static pthread_mutex_t write_mutex; - -// get application name from executable binary path -char* get_app_name(char* binary_path) -{ - char* pos; - - pos = strrchr(binary_path, '/'); - if(pos != NULL) - pos++; - - return pos; -} - -// execute applcation with executable binary path -// return 0 to fail to execute -// return 1 to succeed to execute -int exec_app(const char* exec_path, int app_type) -{ - pid_t pid; - char command[PATH_MAX]; - - if (exec_path == NULL || strlen(exec_path) <= 0) - { - LOGE("Executable path is not correct\n"); - return 0; - } - - if (( pid = fork()) < 0) // fork error - return 0; - - else if(pid > 0) - return 1; // exit parent process with successness - - sprintf(command, "%s %s", DA_PRELOAD(app_type), exec_path); - LOGI("launch app path is %s, executable path is %s\n", LAUNCH_APP_PATH, exec_path); - execl(SHELL_CMD, SHELL_CMD, "-c", command, NULL); - - return 1; -} - -#ifdef USE_LAUNCH_PAD -// execute application by launch pad -// return 0 to fail to execute -// return 1 to succeed to execute -int exec_app_by_launchpad(const char* pkg_name) -{ - pid_t pid; - - if (pkg_name == NULL || strlen(pkg_name) <= 0) - { - LOGE("Package name is not correct\n"); - return 0; - } - - if (( pid = fork()) < 0) // fork error - return 0; - - else if(pid > 0) - return 1; // exit parent process with successness - - LOGI("launch app path is %s, pkg name is %s\n", LAUNCH_APP_PATH, pkg_name); - execl(LAUNCH_APP_PATH, LAUNCH_APP_NAME, pkg_name, DA_PRELOAD_EXEC, NULL); - - return 1; -} -#endif - -#if 0 -void kill_app(const char* binary_path) // fork version -{ - pid_t pid; - pid_t pkg_pid; - char command[PATH_MAX]; - - if (( pid = fork()) < 0) - return; - - //exit parent process - else if(pid > 0) - return; - - pkg_pid = find_pid_from_path(binary_path); - - if(pkg_pid > 0) - { - sprintf(command, "kill -9 %d", pkg_pid); - LOGI(" : %s\n", command); - execl(SHELL_CMD, SHELL_CMD, "-c", command, NULL); - } - else - { - exit(0); - } -} -#else -void kill_app(const char* binary_path) // non fork version -{ - pid_t pkg_pid; - char command[PATH_MAX]; - - pkg_pid = find_pid_from_path(binary_path); - - if(pkg_pid > 0) - { - sprintf(command, "kill -9 %d", pkg_pid); - LOGI("kill app : %s\n", command); - system(command); - } -} -#endif - -// find process id from executable binary path -pid_t find_pid_from_path(const char* path) -{ - pid_t status = -1; - - char buffer [BUFFER_MAX]; - char command [BUFFER_MAX]; - - sprintf(command, "/bin/pidof %s", path); - - FILE *fp = popen(command, "r"); - if (!fp) - { - LOGE("Getting pidof %s is failed\n", path); - return status; - } - - while (fgets(buffer, BUFFER_MAX, fp) != NULL) - { - LOGI("result of 'pidof' is %s\n", buffer); - } - - pclose(fp); - - if (strlen(buffer) > 0) - { - if (sscanf(buffer,"%d\n", &status) != 1) - { - LOGE("Failed to read result buffer of 'pidof', status(%d)\n", status); - return -1; - } - } - - return status; -} - -static void mkdirs() -{ - mkdir("/home/developer/sdk_tools/da", 0775); - mkdir("/home/developer/sdk_tools/da/battery", 0775); -} - -int create_open_batt_log(const char* app_name) -{ - char log_path[PATH_MAX]; - - pthread_mutex_init(&write_mutex, NULL); - sprintf(log_path, "%s%s", BATT_LOG_FILE, app_name); - - if ((file_fd = open(log_path, O_WRONLY|O_CREAT|O_TRUNC)) == -1) - { - mkdirs(); - if ((file_fd = open(log_path, O_WRONLY|O_CREAT|O_TRUNC)) == -1) - { - LOGE("Failed to open batt log file\n"); - return 0; - } - } - - return file_fd; -} - -int get_batt_fd() -{ - return file_fd; -} - -int write_batt_log(const char* msg) -{ - int length = -1; - - if (file_fd == -1 ) - { - return -1; - } - - pthread_mutex_lock(&write_mutex); - - length = write(file_fd, msg, strlen(msg)); - - pthread_mutex_unlock(&write_mutex); - - return length; -} - -void close_batt_fd() -{ - close(file_fd); - file_fd = -1; -} - -#if DEBUG -void write_log() -{ - int fd; - - fd = open("/dev/null", O_RDONLY); - dup2(fd, 0); - - fd = open("/tmp/da_daemon.log", O_WRONLY | O_CREAT | O_TRUNC, 0640); - if(fd < 0) { - fd = open("/dev/null", O_WRONLY); - } - dup2(fd, 1); - dup2(fd, 2); - - fprintf(stderr,"--- da starting (pid %d) ---\n", getpid()); -} -#endif - - diff --git a/packaging/daemon/utils.h b/packaging/daemon/utils.h deleted file mode 100644 index ac00787..0000000 --- a/packaging/daemon/utils.h +++ /dev/null @@ -1,86 +0,0 @@ -/* -* DA manager -* -* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. -* -* Contact: -* -* Jaewon Lim -* Woojin Jung -* Juyoung Kim -* - * Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* Contributors: -* - S-Core Co., Ltd -* -*/ - -#ifndef _UTILS_ -#define _UTILS_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -#define LAUNCH_APP_PATH "/usr/bin/launch_app" -#define KILL_APP_PATH "/usr/bin/pkill" -#define LAUNCH_APP_NAME "launch_app" -#define DA_PRELOAD_EXEC "__AUL_SDK_DYNAMIC_ANALYSIS" -#define DA_PRELOAD(AppType) AppType ? DA_PRELOAD_OSP : DA_PRELOAD_TIZEN -#define DA_PRELOAD_TIZEN "LD_PRELOAD=/home/developer/sdk_tools/da/da_probe_tizen.so" -#define DA_PRELOAD_OSP "LD_PRELOAD=/home/developer/sdk_tools/da/da_probe_osp.so" -#define BATT_LOG_FILE "/home/developer/sdk_tools/da/battery/" -#define SHELL_CMD "/bin/sh" - -enum ApplicationType -{ - APP_TYPE_TIZEN = 0, - APP_TYPE_OSP = 1 -}; - -char* get_app_name(char* binary_path); - -int exec_app(const char* exec_path, int app_type); - -void kill_app(const char* binary_path); - -pid_t find_pid_from_path(const char* path); - -int create_open_batt_log(const char* app_name); - -int get_batt_fd(); - -int write_batt_log(const char* message); - -void close_batt_fd(); - -#if DEBUG -void write_log(); -#endif - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/packaging/dynamic-analysis-manager.spec b/packaging/dynamic-analysis-manager.spec index 774e19f..fdc63d6 100644 --- a/packaging/dynamic-analysis-manager.spec +++ b/packaging/dynamic-analysis-manager.spec @@ -38,7 +38,7 @@ cd ../eventutil %defattr(-,root,root,-) %{_prefix}/bin/da_manager %{_prefix}/bin/da_event - +%{_prefix}/bin/da_command %changelog diff --git a/packaging/eventutil/Makefile b/packaging/eventutil/Makefile deleted file mode 100644 index 35202ce..0000000 --- a/packaging/eventutil/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -CURDIR = `pwd` -INSTALLDIR = usr/bin - -SRCS := eventutil.c - -TARGET = da_event - -all: $(TARGET) - -$(TARGET): $(SRCS) - $(CC) -Wall -o $@ $(SRCS) - -install: - [ -d "$(DESTDIR)/$(INSTALLDIR)" ] || mkdir -p $(DESTDIR)/$(INSTALLDIR) - install $(TARGET) $(DESTDIR)/$(INSTALLDIR)/ - -clean: - rm $(TARGET) - diff --git a/packaging/eventutil/eventutil.c b/packaging/eventutil/eventutil.c deleted file mode 100644 index 8cefefd..0000000 --- a/packaging/eventutil/eventutil.c +++ /dev/null @@ -1,378 +0,0 @@ -/* -* DA manager -* -* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. -* -* Contact: -* -* Jaewon Lim -* Woojin Jung -* Juyoung Kim -* - * Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* Contributors: -* - S-Core Co., Ltd -* -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define BUF_SIZE 1024 -#define INPUT_ID_STR_KEY "ID_INPUT_KEY=1" -#define INPUT_ID_STR_TOUCH "ID_INPUT_TOUCHSCREEN=1" -#define INPUT_ID_STR_KEYBOARD "ID_INPUT_KEYBOARD=1" -#define INPUT_ID_STR_TABLET "ID_INPUT_TABLET=1" -#define MAX_DEVICE 10 -#define MAX_FILENAME 128 - -#define INPUT_ID_TOUCH 0 -#define INPUT_ID_KEY 1 -#define STR_TOUCH "TOUCH" -#define STR_KEY "KEY" -#define ARRAY_END (-11) - -#define DAEMON_SENDER 0x01 -#define DAEMON_RECEIVER 0x10 - -typedef struct _input_dev -{ - int fd; - char fileName[MAX_FILENAME]; -} input_dev; - -// ==================================================================== -// helper functions -// ==================================================================== - -// return bytes size of readed data -// return 0 if no data readed or error occurred -static int _file_read(FILE* fp, char *buffer, int size) -{ - int ret = 0; - - if(fp != NULL && size > 0) - { - ret = fread((void*)buffer, sizeof(char), size, fp); - } - else - { - // fp is null - if(size > 0) - buffer[0] = '\0'; - - ret = 0; // error case - } - - return ret; -} - -// get input id of given input device -static int get_input_id(char* inputname) -{ - static int query_cmd_type = 0; // 1 if /lib/udev/input_id, 2 if udevadm - FILE* cmd_fp; - char buffer[BUF_SIZE]; - char command[MAX_FILENAME]; - int ret = -1; - - // determine input_id query command - if(__builtin_expect(query_cmd_type == 0, 0)) - { - sprintf(command, "ls /lib/udev/input_id; echo cmd_ret:$?;"); - cmd_fp = popen(command, "r"); - _file_read(cmd_fp, buffer, BUF_SIZE); - if(strstr(buffer, "cmd_ret:0")) // there is /lib/udev/input_id - { - query_cmd_type = 1; - } - else // there is not /lib/udev/input_id - { - query_cmd_type = 2; - } - pclose(cmd_fp); - } - - // make command string - if(query_cmd_type == 1) - { - sprintf(command, "/lib/udev/input_id /class/input/%s", inputname); - } - else if(query_cmd_type == 2) - { - sprintf(command, "udevadm info --name=input/%s --query=property", inputname); - } - else - { - // not impossible - perror("query cmd type is not valid"); - exit(0); - } - - // run command - cmd_fp = popen(command, "r"); - _file_read(cmd_fp, buffer, BUF_SIZE); - - // determine input id - if(strstr(buffer, INPUT_ID_STR_KEY)) // key - { - ret = INPUT_ID_KEY; - } - else if(strstr(buffer, INPUT_ID_STR_TOUCH)) // touch - { - ret = INPUT_ID_TOUCH; - } - else if(strstr(buffer, INPUT_ID_STR_KEYBOARD)) // keyboard - { - ret = INPUT_ID_KEY; - } - else if(strstr(buffer, INPUT_ID_STR_TABLET)) // touch (emulator) - { - ret = INPUT_ID_TOUCH; - } - - pclose(cmd_fp); - return ret; -} - -// get filename and fd of given input type devices -static void _get_fds(input_dev *dev, int input_id) -{ - DIR *dp; - struct dirent *d; - int count = 0; - - dp = opendir("/sys/class/input"); - - while((d = readdir(dp)) != NULL) - { - if(!strncmp(d->d_name, "event", 5)) // start with "event" - { - // event file - if(input_id == get_input_id(d->d_name)) - { - sprintf(dev[count].fileName, "/dev/input/%s", d->d_name); - dev[count].fd = open(dev[count].fileName, O_RDWR); - count++; - } - } - } - - closedir(dp); - - dev[count].fd = ARRAY_END; // end of input_dev array -} - -// ================================================================ -// device write function -// ================================================================ - -static void _device_write(input_dev *dev, struct input_event* in_ev) -{ - int i; - for(i = 0; dev[i].fd != ARRAY_END; i++) - { - if(dev[i].fd >= 0) - write(dev[i].fd, in_ev, sizeof(struct input_event)); - } -} - -// ================================================================= -// file descriptor manipulation functions -// ================================================================= - -static void _fd_insert(fd_set* fdset, input_dev *dev) -{ - int i; - for(i = 0; dev[i].fd != ARRAY_END; i++) - { - if(dev[i].fd >= 0) - { - FD_SET(dev[i].fd, fdset); - } - } -} - -static int _fd_isset(fd_set* fdset, input_dev *dev) -{ - int i; - for(i = 0; dev[i].fd != ARRAY_END; i++) - { - if(dev[i].fd >= 0) - { - if(FD_ISSET(dev[i].fd, fdset)) - { - return i; - } - } - } - - return -1; -} - - -int _get_maxfd(input_dev *touch, input_dev *key) -{ - int i; - int maxfd = -1; - - for(i = 0 ; touch[i].fd != ARRAY_END; i++) - { - if(touch[i].fd > maxfd) - maxfd = touch[i].fd; - } - - for(i = 0 ; key[i].fd != ARRAY_END; i++) - { - if(key[i].fd > maxfd) - maxfd = key[i].fd; - } - - return maxfd; -} - -// ============================================================================ -// sender and receiver functions -// ============================================================================ - -static int sender() -{ - struct input_event in_ev; - char eventType[MAX_FILENAME]; - - input_dev key_dev[MAX_DEVICE]; - input_dev touch_dev[MAX_DEVICE]; - - _get_fds(key_dev, INPUT_ID_KEY); - _get_fds(touch_dev, INPUT_ID_TOUCH); - - while(1) - { - scanf("%s %hx %hx %d", eventType, &in_ev.type, &in_ev.code, &in_ev.value); - if(!strncmp(eventType, STR_TOUCH, strlen(STR_TOUCH))) - { - _device_write(touch_dev, &in_ev); - } - else if(!strncmp(eventType, STR_KEY, strlen(STR_KEY))) - { - _device_write(key_dev, &in_ev); - } - } - - return 0; -} - -static int receiver() -{ - fd_set allfds, readfds; - int maxfd; - int index; - struct input_event in_ev; - - input_dev key_dev[MAX_DEVICE]; - input_dev touch_dev[MAX_DEVICE]; - - _get_fds(key_dev, INPUT_ID_KEY); - _get_fds(touch_dev, INPUT_ID_TOUCH); - - FD_ZERO(&readfds); - _fd_insert(&readfds, key_dev); - _fd_insert(&readfds, touch_dev); - - maxfd = _get_maxfd(touch_dev, key_dev); - - while(1) - { - allfds = readfds; - - select(maxfd + 1, &allfds, NULL, NULL, NULL); - - if((index = _fd_isset(&allfds, touch_dev)) != -1) - { - //touch read - read(touch_dev[index].fd, &in_ev, sizeof(struct input_event)); - printf("%s %s %ld %ld %x %x %d\n", - STR_TOUCH, touch_dev[index].fileName, in_ev.time.tv_sec, - in_ev.time.tv_usec, in_ev.type, in_ev.code, in_ev.value); - } - else if ((index = _fd_isset(&allfds, key_dev)) != -1) - { - //key read - read(key_dev[index].fd, &in_ev, sizeof(struct input_event)); - printf("%s %s %ld %ld %x %x %d\n", - STR_KEY, key_dev[index].fileName, in_ev.time.tv_sec, - in_ev.time.tv_usec, in_ev.type, in_ev.code, in_ev.value); - } - } - - return 0; -} - -// ====================================================================== -// main function and end signal handler -// ====================================================================== - -static void end_program(int sig) -{ - exit(0); -} - -int main(int argc, char **argv) -{ - int opt; - unsigned int commandType = 0; - signal(SIGINT, end_program); - - while((opt = getopt(argc, argv, "sr")) != -1) - { - switch(opt) - { - case 's': // send - commandType |= DAEMON_SENDER; - break; - case 'r': // receive - commandType |= DAEMON_RECEIVER; - break; - default: // unknown option - commandType = 0; - break; - } - - if(commandType == 0) - break; - } - - if(commandType == DAEMON_SENDER) - { - sender(); - } - else if(commandType == DAEMON_RECEIVER) - { - receiver(); - } - else - { - // TODO : print help text - } - - return 0; -} - -- 2.7.4