From 39ec9cac5ce5faf378c78ca901e629fc28d775ba Mon Sep 17 00:00:00 2001 From: peri4 Date: Sun, 9 Oct 2011 22:23:52 +0400 Subject: [PATCH] 9.10.2011 - stable backup commit --- CMakeLists.txt | 10 +- core | Bin 0 -> 17387520 bytes main.cpp | 69 ++++++++--- make_install.sh | 7 +- pichar.h | 10 +- picli.cpp | 4 +- picli.h | 8 +- piconfig.cpp | 35 +++--- piconfig.h | 25 ++-- piconsole.cpp | 56 ++++----- piconsole.h | 2 +- picontainers.h | 81 +++++++++++-- piethernet.cpp | 6 +- piethernet.h | 15 ++- pievaluator.cpp | 3 +- pifile.cpp | 1 + pifile.h | 2 +- pigeometry.h | 134 +++++++++++---------- piincludes.h | 83 ++++++++++--- pikbdlistener.cpp | 30 ++++- pikbdlistener.h | 22 ++-- pimath.h | 5 +- pimultiprotocol.h | 78 ++++++++++++ pimutex.h | 19 ++- pip.h | 3 +- piprocess.cpp | 297 +++++++++++++++++++++++++++------------------- piprocess.h | 139 ++++++++++++---------- piprotocol.cpp | 98 ++++++++------- piprotocol.h | 70 +++++++---- piserial.cpp | 28 +++-- pisignals.cpp | 92 ++++++++++++++ pisignals.h | 54 +++++++++ pistring.cpp | 56 ++++++--- pistring.h | 16 +-- pithread.cpp | 58 ++++++++- pithread.h | 11 +- pitimer.h | 3 + protocols.conf | 52 ++++++++ Описание.odt | Bin 0 -> 16315 bytes 39 files changed, 1170 insertions(+), 512 deletions(-) create mode 100644 core create mode 100644 pimultiprotocol.h create mode 100644 pisignals.cpp create mode 100644 pisignals.h create mode 100644 protocols.conf create mode 100644 Описание.odt diff --git a/CMakeLists.txt b/CMakeLists.txt index 6fa514c0..8eab44c7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,11 @@ project(pip) cmake_minimum_required(VERSION 2.6) include_directories(${CMAKE_CURRENT_SOURCE_DIR} .) file(GLOB CPPS "pi*.cpp") -add_definitions(-O2 -g3 -Wall) +if (${WIN32}) + add_definitions(-Wall -O2) +else (${WIN32}) + add_definitions(-Wall -O2 -g3) +endif (${WIN32}) add_library(pip SHARED ${CPPS}) if (${WIN32}) target_link_libraries(pip pthread ws2_32) @@ -11,7 +15,7 @@ else (${WIN32}) endif (${WIN32}) add_executable(pip_test "main.cpp") if (${WIN32}) - target_link_libraries(pip_test pip pthread ws2_32) + target_link_libraries(pip_test pthread ws2_32 pip) else (${WIN32}) - target_link_libraries(pip_test pip pthread rt) + target_link_libraries(pip_test pthread rt pip) endif (${WIN32}) diff --git a/core b/core new file mode 100644 index 0000000000000000000000000000000000000000..b3c23d6be4154729ac82835664c9555b4a666cf3 GIT binary patch literal 17387520 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 zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?uwVb7bzOA;z+c@upKfIVi_P39k%>G=CfU|$*5asZJIkCh zN`wp);?}WeTbsC~FjrwI2&*HEqE#j`S7GQT>Y^*T9kwIjepFCaw14!EGW(xFrc?|V ze{A*pz3<)jHBBm17=wKdoOkX$=X-vA?s+#a1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs 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 z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfWUv*p#uQ`0000W|JO!HaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!#--o3}!Rn>O`K7l}k1Ra#CMI03&K#CDTP!R@6A{NMH z94H|{2M9GlAVU)FyfO-v08t{K!Yjg{_;QzMfekjoAXcq{1jLFJ+Ytew1{+)G3l*W? zHD^w8I3}5Z*!stFKA$h^{Px;w?Y*C~&u!0SAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF 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�Hr$*{_=7v%WWoxKP#su|t+Y$gNS= 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 z$ammsTm0XB{l$@Fr~LI(zkTn{D&I?|c+KwEs!d-alc| zG^VGJrn7@Iaru@>BPl5fS^Rm4lRgx2Qc6UyP-T_=hMjykFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB zzyz286JP>NfC;=g0`GMx>SK2|s(=mK^~>2 zps#$rN2H%SF*YHcsj!l-?R3FjigX4-x)-ug{e7@gAO=^`sRip-zEEL3{Ee}RKYgWH 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 DFI}cb literal 0 HcmV?d00001 diff --git a/main.cpp b/main.cpp index 5abab5a7..d0a88abe 100644 --- a/main.cpp +++ b/main.cpp @@ -1,21 +1,54 @@ #include -int main(int argc, char * argv[]) { - PIString s("sos№⚒№хуй"/*☢⚒SOŮ*/); - /*cout << s << endl; - cout << s.length() << endl; - cout << s.stdWString().length() << endl;*/ - //system("cd /"); - PIProcess p; - //p.setWorkingDirectory("/"); - //p.setEnvironmentVariable("PWD", "/"); - //cout << p.environment().join("\n") << endl; - p.exec("cd"); - p.waitForFinish(); - - //cout << s << endl; - /*wchar_t wc; - cout << (int)(uchar)("№"[0]) << ", " << (int)(uchar)("№"[1]) << endl; - cout << isascii("№"[0]) << endl; - cout << mbtowc(&wc, "№", 4) << endl;*/ +class Prot: public PIProtocol { +public: + Prot(): PIProtocol() { + setName("test"); + ba.resize(1024); + setReceiverAddress("127.0.0.1", 3003, true); + setReceiverData(ba.data(), ba.size_s()); + setSenderAddress("127.0.0.2", 3003, true); + setSenderData(ba.data(), ba.size_s()); + setExpectedFrequency(100); + //setSenderFrequency(); + //startReceive(100); + startSend(10); + }; + PIByteArray ba; +}; + +class MProt: public PIMultiProtocol { +public: + MProt() {cor = incor = 0;} + + int cor, incor; + + virtual void received(PIProtocol * prot, bool corrected, char * data, int size) {if (corrected) cor++; else incor++; if (prot->name() == "test" && corrected) prot->send();} + + +}; + +PIConsole c(false); +//Prot p; + +int main(int argc, char * argv[]) { + MProt mp; + Prot p; + PIRepeater r("protocols.conf", "r", 1024); + mp.addProtocol(p); + c.addVariable("rec : " + mp[0]->receiverDeviceName() + ":", mp[0]->receiverDeviceState_ptr()); + c.addVariable("send: " + mp[0]->senderDeviceName() + ":", mp[0]->senderDeviceState_ptr()); + c.addVariable("freq", mp[0]->immediateFrequency_ptr()); + c.addVariable("sent ", mp[0]->sendCount_ptr()); + c.addVariable("ok ", mp[0]->receiveCount_ptr()); + c.addVariable("wrong", mp[0]->wrongCount_ptr()); + c.addEmptyLine(); + c.addVariable("mp_corr", &mp.cor); + c.addVariable("mp_incr", &mp.incor); + c.addVariable(r.firstChannelName() + ", rec ", r.receiveCount_ptr()); + c.addVariable(r.secondChannelName() + ", send", r.sendCount_ptr()); + c.enableExitCapture(); + mp.start(); + c.start(false); + c.waitForFinish(); }; diff --git a/make_install.sh b/make_install.sh index 195f1dc5..9e65aa38 100755 --- a/make_install.sh +++ b/make_install.sh @@ -1,8 +1,5 @@ #! /bin/bash cmake . -make -j3 -if [ $@ != "" ] ; then - chown -v $@ /usr/lib/ /usr/include/ -fi +make $@ cp -vf *.h /usr/include/ -cp -vf libpip.so /usr/lib/libpip.so +cp -vf lib*.so /usr/lib/ diff --git a/pichar.h b/pichar.h index 008c2d05..c1132237 100644 --- a/pichar.h +++ b/pichar.h @@ -66,13 +66,13 @@ public: inline const wchar_t toWChar() const {return ch;} inline char toAscii() const {return ch % 256;} inline int unicode16Code() const {wchar_t wc; if (mbtowc(&wc, toCharPtr(), 4) > 0) return wc; return 0;} -#ifdef WINDOWS - inline PIChar toUpper() const __attribute__ ((optimize(0))) {return PIChar(toupper(ch));} - inline PIChar toLower() const __attribute__ ((optimize(0))) {return PIChar(tolower(ch));} -#else +//#ifdef WINDOWS +// inline PIChar toUpper() const __attribute__ ((optimize(0))) {return PIChar(toupper(ch));} +// inline PIChar toLower() const __attribute__ ((optimize(0))) {return PIChar(tolower(ch));} +//#else inline PIChar toUpper() const {return PIChar(toupper(ch));} inline PIChar toLower() const {return PIChar(tolower(ch));} -#endif +//#endif private: wchar_t ch; diff --git a/picli.cpp b/picli.cpp index 722a59e4..49c95397 100644 --- a/picli.cpp +++ b/picli.cpp @@ -21,7 +21,7 @@ void PICLI::parse() { if (cra.left(2) == _prefix_full) { last = 0; full = cra.right(cra.length() - 2); - piForeachA (a, _args) { + piForeach (Argument & a, _args) { if (a.full_key == full) { a.found = true; last = &a; @@ -32,7 +32,7 @@ void PICLI::parse() { if (cra.left(1) == _prefix_short) { last = 0; for (int j = 1; j < cra.length(); ++j) { - piForeachA (a, _args) { + piForeach (Argument & a, _args) { if (a.short_key == cra[j]) { a.found = true; last = &a; diff --git a/picli.h b/picli.h index 73f01210..d6050b7e 100644 --- a/picli.h +++ b/picli.h @@ -21,10 +21,10 @@ public: inline const PIStringList & mandatoryArguments() const {return _args_mand;} inline const PIStringList & optionalArguments() const {return _args_opt;} inline const PIString programCommand() const {return _args_raw.size() > 0 ? _args_raw.front() : PIString();} - inline bool hasArgument(const PIString & name) {parse(); piForeachA (i, _args) if (i.name == name && i.found) return true; return false;} - inline PIString argumentValue(const PIString & name) {parse(); piForeachA (i, _args) if (i.name == name && i.found) return i.value; return PIString();} - inline PIString argumentShortKey(const PIString & name) {piForeachA (i, _args) if (i.name == name) return i.short_key; return PIString();} - inline PIString argumentFullKey(const PIString & name) {piForeachA (i, _args) if (i.name == name) return i.full_key; return PIString();} + inline bool hasArgument(const PIString & name) {parse(); piForeach (Argument & i, _args) if (i.name == name && i.found) return true; return false;} + inline PIString argumentValue(const PIString & name) {parse(); piForeach (Argument &i, _args) if (i.name == name && i.found) return i.value; return PIString();} + inline PIString argumentShortKey(const PIString & name) {piForeach (Argument &i, _args) if (i.name == name) return i.short_key; return PIString();} + inline PIString argumentFullKey(const PIString & name) {piForeach (Argument &i, _args) if (i.name == name) return i.full_key; return PIString();} inline const PIString & shortKeyPrefix() const {return _prefix_short;} inline const PIString & fullKeyPrefix() const {return _prefix_full;} diff --git a/piconfig.cpp b/piconfig.cpp index 965efed1..b72bc521 100644 --- a/piconfig.cpp +++ b/piconfig.cpp @@ -8,7 +8,7 @@ PIConfig::Entry PIConfig::Entry::_empty; PIConfig::Branch PIConfig::Branch::allLeaves() { Branch b; b.delim = delim; - piForeachCA (i, *this) { + piForeach (Entry * i, *this) { if (i->isLeaf()) b << i; else allLeaves(b, i); } @@ -27,7 +27,7 @@ PIConfig::Entry & PIConfig::Branch::getValue(const PIString & vname, const PIStr PIString name = tree.front(); tree.pop_front(); Entry * ce = 0; - piForeachCA (i, *this) + piForeach (Entry * i, *this) if (i->_name == name) { ce = i; break; @@ -39,7 +39,7 @@ PIConfig::Entry & PIConfig::Branch::getValue(const PIString & vname, const PIStr if (exist != 0) *exist = false; return _empty; } - piForeachCA (i, tree) { + piForeach (PIString & i, tree) { ce = ce->findChild(i); if (ce == 0) { _empty._name = vname; @@ -57,12 +57,12 @@ PIConfig::Entry & PIConfig::Branch::getValue(const PIString & vname, const PIStr PIConfig::Branch PIConfig::Branch::getValues(const PIString & name) { Branch b; b.delim = delim; - piForeachA (i, *this) { + piForeach (Entry * i, *this) { if (i->isLeaf()) { if (i->_name.find(name) >= 0) b << i; } else { - piForeachA (j, i->_children) + piForeach (Entry * j, i->_children) if (j->_name.find(name) >= 0) b << j; } @@ -74,7 +74,7 @@ PIConfig::Branch PIConfig::Branch::getValues(const PIString & name) { PIConfig::Branch PIConfig::Branch::getLeaves() { Branch b; b.delim = delim; - piForeachA (i, *this) + piForeach (Entry * i, *this) if (i->isLeaf()) b << i; return b; @@ -84,7 +84,7 @@ PIConfig::Branch PIConfig::Branch::getLeaves() { PIConfig::Branch PIConfig::Branch::getBranches() { Branch b; b.delim = delim; - piForeachA (i, *this) + piForeach (Entry * i, *this) if (!i->isLeaf()) b << i; return b; @@ -107,7 +107,7 @@ bool PIConfig::Branch::entryExists(const Entry * e, const PIString & name) const if (e->_name == name) return true; else return false; } - piForeachCA (i, e->_children) + piForeachC (Entry * i, e->_children) if (entryExists(i, name)) return true; return false; } @@ -116,7 +116,7 @@ bool PIConfig::Branch::entryExists(const Entry * e, const PIString & name) const PIConfig::Entry & PIConfig::Entry::getValue(const PIString & vname, const PIString & def, bool * exist) { PIStringList tree = vname.split(delim); Entry * ce = this; - piForeachCA (i, tree) { + piForeach (PIString & i, tree) { ce = ce->findChild(i); if (ce == 0) { _empty._name = vname; @@ -134,7 +134,7 @@ PIConfig::Entry & PIConfig::Entry::getValue(const PIString & vname, const PIStri PIConfig::Branch PIConfig::Entry::getValues(const PIString & vname) { Branch b; b.delim = delim; - piForeachA (i, _children) + piForeach (Entry * i, _children) if (i->_name.find(vname) >= 0) b << i; return b; @@ -146,7 +146,7 @@ bool PIConfig::Entry::entryExists(const Entry * e, const PIString & name) const if (e->_name == name) return true; else return false; } - piForeachCA (i, e->_children) + piForeachC (Entry * i, e->_children) if (entryExists(i, name)) return true; return false; } @@ -166,7 +166,7 @@ PIConfig::PIConfig(const PIString & path, PIFlags mode): PIFile(path, mode PIConfig::Entry & PIConfig::getValue(const PIString & vname, const PIString & def, bool * exist) { PIStringList tree = vname.split(delim); Entry * ce = &root; - piForeachCA (i, tree) { + piForeach (PIString & i, tree) { ce = ce->findChild(i); if (ce == 0) { if (exist != 0) *exist = false; @@ -184,7 +184,7 @@ PIConfig::Entry & PIConfig::getValue(const PIString & vname, const PIString & de PIConfig::Branch PIConfig::getValues(const PIString & vname) { Branch b; b.delim = delim; - piForeachA (i, root._children) + piForeach (Entry * i, root._children) if (i->_name.find(vname) >= 0) b << i; return b; @@ -200,7 +200,7 @@ void PIConfig::addEntry(const PIString & name, const PIString & value, const PIS tree.pop_back(); Entry * te, * ce, * entry = &root; if (tree.isEmpty()) toRoot = true; - piForeachA (i, tree) { + piForeach (PIString & i, tree) { te = entry->findChild(i); if (te == 0) { ce = new Entry(); @@ -270,7 +270,7 @@ void PIConfig::setValue(const PIString & name, const PIString & value, const PIS int PIConfig::entryIndex(const PIString & name) { PIStringList tree = name.split(delim); Entry * ce = &root; - piForeachCA (i, tree) { + piForeach (PIString & i, tree) { ce = ce->findChild(i); if (ce == 0) return -1; @@ -395,7 +395,7 @@ bool PIConfig::entryExists(const Entry * e, const PIString & name) const { if (e->_name == name) return true; else return false; } - piForeachCA (i, e->_children) + piForeachC (Entry * i, e->_children) if (entryExists(i, name)) return true; return false; } @@ -436,7 +436,7 @@ void PIConfig::parse() { name = tree.back(); tree.pop_back(); entry = &root; - piForeachA (i, tree) { + piForeach (PIString & i, tree) { te = entry->findChild(i); if (te == 0) { ce = new Entry(); @@ -471,4 +471,5 @@ void PIConfig::parse() { lines++; } setEntryDelim(&root, delim); + buildFullNames(&root); } diff --git a/piconfig.h b/piconfig.h index 8fb4505d..2edafd77 100644 --- a/piconfig.h +++ b/piconfig.h @@ -42,15 +42,15 @@ public: Branch getLeaves(); Branch getBranches(); Branch & filter(const PIString & f); - inline bool isEntryExists(const PIString & name) const {piForeachCA (i, *this) if (entryExists(i, name)) return true; return false;} + inline bool isEntryExists(const PIString & name) const {piForeachC (Entry * i, *this) if (entryExists(i, name)) return true; return false;} inline int indexOf(const Entry * e) {for (int i = 0; i < size_s(); ++i) if (at(i) == e) return i; return -1;} - inline void clear() {piForeachA (i, *this) delete i; PIVector::clear();} + inline void clear() {piForeach (Entry * i, *this) delete i; PIVector::clear();} private: bool entryExists(const Entry * e, const PIString & name) const; - inline void allLeaves(Branch & b, Entry * e) {piForeachCA (i, e->_children) {if (i->isLeaf()) b << i; else allLeaves(b, i);}} - inline void coutt(std::ostream & s, const PIString & p) const {piForeachCA (i, *this) i->coutt(s, p);} + inline void allLeaves(Branch & b, Entry * e) {piForeach (Entry * i, e->_children) {if (i->isLeaf()) b << i; else allLeaves(b, i);}} + inline void coutt(std::ostream & s, const PIString & p) const {piForeachC (Entry * i, *this) i->coutt(s, p);} static Entry _empty; PIString delim; @@ -67,14 +67,15 @@ public: inline int childCount() {return _children.size_s();} inline Branch & children() {_children.delim = delim; return _children;} inline Entry * child(const int index) const {return _children[index];} - inline Entry * findChild(const PIString & name) {piForeachCA (i, _children) if (i->_name == name) return i; return 0;} - inline const Entry * findChild(const PIString & name) const {piForeachCA (i, _children) if (i->_name == name) return i; return 0;} + inline Entry * findChild(const PIString & name) {piForeach (Entry * i, _children) if (i->_name == name) return i; return 0;} + inline const Entry * findChild(const PIString & name) const {piForeachC (Entry * i, _children) if (i->_name == name) return i; return 0;} inline bool isLeaf() const {return _children.isEmpty();} inline const PIString & name() const {return _name;} inline const PIString & value() const {return _value;} inline const PIString & type() const {return _type;} inline const PIString & comment() const {return _comment;} + inline const PIString & fullName() const {return _full_name;} inline Entry & setName(const PIString & value) {_name = value; return *this;} inline Entry & setType(const PIString & value) {_type = value; return *this;} @@ -120,7 +121,7 @@ public: bool entryExists(const Entry * e, const PIString & name) const; inline void buildLine() {_all = _tab + _full_name + " = " + _value + " #" + _type + " " + _comment;} inline void clear() {_children.clear(); _name = _value = _type = _comment = _all = PIString(); _line = 0; _parent = 0;} - inline void coutt(std::ostream & s, const PIString & p) const {PIString nl = p + " "; if (!_value.isEmpty()) s << p << _name << " = " << _value << endl; else cout << p << _name << endl; piForeachCA (i, _children) i->coutt(s, nl);} + inline void coutt(std::ostream & s, const PIString & p) const {PIString nl = p + " "; if (!_value.isEmpty()) s << p << _name << " = " << _value << endl; else cout << p << _name << endl; piForeachC (Entry * i, _children) i->coutt(s, nl);} static Entry _empty; Entry * _parent; @@ -159,7 +160,7 @@ public: inline int entriesCount() const {return childCount(&root);} inline bool isEntryExists(const PIString & name) const {return entryExists(&root, name);} - inline Branch allTree() {Branch b; piForeachCA (i, root._children) b << i; return b;} + inline Branch allTree() {Branch b; piForeach (Entry * i, root._children) b << i; return b;} inline Branch allLeaves() {Branch b; allLeaves(b, &root); std::sort(b.begin(), b.end(), Entry::compare); return b;} int entryIndex(const PIString & name); @@ -184,11 +185,11 @@ public: void setDelimiter(const PIString & d) {delim = d; setEntryDelim(&root, d); readAll();} private: - int childCount(const Entry * e) const {int c = 0; piForeachCA (i, e->_children) c += childCount(i); c += e->_children.size_s(); return c;} + int childCount(const Entry * e) const {int c = 0; piForeachC (Entry * i, e->_children) c += childCount(i); c += e->_children.size_s(); return c;} bool entryExists(const Entry * e, const PIString & name) const; - void buildFullNames(Entry * e) {piForeachCA (i, e->_children) {if (e != &root) i->_full_name = e->_full_name + delim + i->_name; else i->_full_name = i->_name; buildFullNames(i);}} - void allLeaves(Branch & b, Entry * e) {piForeachCA (i, e->_children) {if ((!i->_value.isEmpty() && !i->isLeaf()) || i->isLeaf()) b << i; allLeaves(b, i);}} - void setEntryDelim(Entry * e, const PIString & d) {piForeachCA (i, e->_children) setEntryDelim(i, d); e->delim = d;} + void buildFullNames(Entry * e) {piForeach (Entry * i, e->_children) {if (e != &root) i->_full_name = e->_full_name + delim + i->_name; else i->_full_name = i->_name; buildFullNames(i);}} + void allLeaves(Branch & b, Entry * e) {piForeach (Entry * i, e->_children) {if ((!i->_value.isEmpty() && !i->isLeaf()) || i->isLeaf()) b << i; allLeaves(b, i);}} + void setEntryDelim(Entry * e, const PIString & d) {piForeach (Entry * i, e->_children) setEntryDelim(i, d); e->delim = d;} inline Entry & entryByIndex(const int index) {Branch b = allLeaves(); if (index < 0 || index >= b.size_s()) return empty; return *(b[index]);} void removeEntry(Branch & b, Entry * e); void parse(); diff --git a/piconsole.cpp b/piconsole.cpp index b8766dfb..adfb5e83 100644 --- a/piconsole.cpp +++ b/piconsole.cpp @@ -27,11 +27,11 @@ PIConsole::~PIConsole() { if (isRunning()) stop(); clearTabs(false); + delete listener; #ifdef WINDOWS SetConsoleMode(hOut, smode); SetConsoleTextAttribute(hOut, dattr); #endif - delete listener; } @@ -44,7 +44,7 @@ int PIConsole::addTab(const PIString & name, char bind_key) { void PIConsole::removeTab(uint index) { if (index >= tabs.size()) return; - tabs.erase(vector::iterator(&tabs[index])); + tabs.remove(index); if (cur_tab >= tabs.size()) cur_tab = tabs.size() - 1; } @@ -211,12 +211,12 @@ PIString PIConsole::fstr(PIFlags f) { #define siprint(x) switch (num_format) {case (1): return printf("0x%.4hX", x); break; case (2): return printf("%o", x); break; default: return printf("%hd", x); break;} #define iprint(x) switch (num_format) {case (1): return printf("0x%.8X", x); break; case (2): return printf("%o", x); break; default: return printf("%d", x); break;} #define liprint(x) switch (num_format) {case (1): return printf("0x%.16lX", x); break; case (2): return printf("%lo", x); break; default: return printf("%ld", x); break;} -#define lliprint(x) switch (num_format) {case (1): return printf("0x%.16LX", x); break; case (2): return printf("%Lo", x); break; default: return printf("%Ld", x); break;} +#define lliprint(x) switch (num_format) {case (1): return printf("0x%.16llX", x); break; case (2): return printf("%llo", x); break; default: return printf("%lld", x); break;} #define cuprint(x) switch (num_format) {case (1): return printf("0x%.2X", x); break; case (2): return printf("%o", x); break; default: return printf("%u", x); break;} #define suprint(x) switch (num_format) {case (1): return printf("0x%.4hX", x); break; case (2): return printf("%o", x); break; default: return printf("%hd", x); break;} #define uprint(x) switch (num_format) {case (1): return printf("0x%.8X", x); break; case (2): return printf("%o", x); break; default: return printf("%u", x); break;} #define luprint(x) switch (num_format) {case (1): return printf("0x%.16lX", x); break; case (2): return printf("%lo", x); break; default: return printf("%lu", x); break;} -#define lluprint(x) switch (num_format) {case (1): return printf("0x%.16LX", x); break; case (2): return printf("%Lo", x); break; default: return printf("%Lu", x); break;} +#define lluprint(x) switch (num_format) {case (1): return printf("0x%.16llX", x); break; case (2): return printf("%llo", x); break; default: return printf("%llu", x); break;} #define fprint(x) switch (num_format) {case (3): return printf("%e", x); break; default: return printf("%.5g", x); break;} #define dprint(x) switch (num_format) {case (3): return printf("%le", x); break; default: return printf("%.5lg", x); break;} @@ -271,7 +271,7 @@ void PIConsole::run() { cx = col_wid * i; toUpperLeft(); if (my < vars()[i].size()) my = vars()[i].size(); - piForeachCA (tv, vars()[i]) { + piForeachC (Variable & tv, vars()[i]) { moveRight(cx); if (tv.type == 0 && tv.s == 0) { newLine(); @@ -279,20 +279,20 @@ void PIConsole::run() { } moveRight(tv.offset); switch (tv.type) { - case 0: clen = printValue(*tv.s, tv.format); break; - case 1: clen = printValue(*tv.b, tv.format); break; - case 2: clen = printValue(*tv.i, tv.format); break; - case 3: clen = printValue(*tv.l, tv.format); break; - case 4: clen = printValue(*tv.c, tv.format); break; - case 5: clen = printValue(*tv.f, tv.format); break; - case 6: clen = printValue(*tv.d, tv.format); break; - case 7: clen = printValue(*tv.sh, tv.format); break; - case 8: clen = printValue(*tv.ui, tv.format); break; - case 9: clen = printValue(*tv.ul, tv.format); break; - case 10: clen = printValue(*tv.ush, tv.format); break; - case 11: clen = printValue(*tv.uc, tv.format); break; - case 12: clen = printValue(*tv.ll, tv.format); break; - case 13: clen = printValue(*tv.ull, tv.format); break; + case 0: clen = printValue(tv.s != 0 ? *tv.s : "", tv.format); break; + case 1: clen = printValue(tv.b != 0 ? *tv.b : false, tv.format); break; + case 2: clen = printValue(tv.i != 0 ? *tv.i : 0, tv.format); break; + case 3: clen = printValue(tv.l != 0 ? *tv.l : 0l, tv.format); break; + case 4: clen = printValue(tv.c != 0 ? *tv.c : 0, tv.format); break; + case 5: clen = printValue(tv.f != 0 ? *tv.f : 0.f, tv.format); break; + case 6: clen = printValue(tv.d != 0 ? *tv.d : 0., tv.format); break; + case 7: clen = printValue(tv.sh != 0 ? *tv.sh : 0, tv.format); break; + case 8: clen = printValue(tv.ui != 0 ? *tv.ui : 0u, tv.format); break; + case 9: clen = printValue(tv.ul != 0 ? *tv.ul : 0ul, tv.format); break; + case 10: clen = printValue(tv.ush != 0 ? *tv.ush : 0u, tv.format); break; + case 11: clen = printValue(tv.uc != 0 ? *tv.uc : 0u, tv.format); break; + case 12: clen = printValue(tv.ll != 0 ? *tv.ll : 0l, tv.format); break; + case 13: clen = printValue(tv.ull != 0 ? *tv.ull : 0ull, tv.format); break; case 14: clen = printValue(bitsValue(tv.ptr, tv.bitFrom, tv.bitCount), tv.format); break; } if (clen + tv.offset < (uint)col_wid) { @@ -443,27 +443,21 @@ void PIConsole::addEmptyLine(int column, uint count) { PIString PIConsole::getString(int x, int y) { bool run = isRunning(); if (run) PIThread::stop(true); - listener->terminate(); - msleep(10); listener->setActive(false); moveTo(x, y); showCursor(); PIByteArray ba(4096); - fflush(0); - scanf("%s", ba.data()); - //fflush(0); - listener->start(); - msleep(10); - if (run) start(); - msleep(10); + int ret = scanf(" %s", ba.data()); listener->setActive(true); - return PIString(ba); + if (run) start(); + if (ret >= 1) return PIString(ba); + else return PIString(); } PIString PIConsole::getString(const PIString & name) { - piForeachCA (i, tabs[cur_tab].variables) - piForeachCA (j, i) + piForeachC (PIVector & i, tabs[cur_tab].variables) + piForeachC (Variable & j, i) if (j.name == name) return getString(j.nx + 1, j.ny); return PIString(); diff --git a/piconsole.h b/piconsole.h index 18b2b4d0..ee19e542 100644 --- a/piconsole.h +++ b/piconsole.h @@ -88,7 +88,7 @@ public: void clearVariables(bool clearScreen = true) {if (clearScreen && isRunning()) {toUpperLeft(); clearScreenLower();} vars().clear();} inline void waitForFinish() {WAIT_FOR_EXIT} - inline void start() {PIThread::start(40);} + inline void start(bool wait = false) {PIThread::start(40); if (wait) waitForFinish();} void stop(bool clear = false); PIString fstr(PIFlags f); diff --git a/picontainers.h b/picontainers.h index 35aa65fd..53ac4787 100644 --- a/picontainers.h +++ b/picontainers.h @@ -3,6 +3,8 @@ #include "piincludes.h" +#ifdef CC_GCC + template class _PIForeachC { public: @@ -29,19 +31,24 @@ public: inline void operator ++() {if (_inv) _rit++; else _it++; _break = false;} }; -#define piForTimes(c) for(int i = 0; i < c; ++i) - -#define piForeach(i,c) for(_PIForeach _for(c); !_for.isEnd(); ++_for) for(i = *_for._it; !_for._break; _for._break = true) -#define piForeachR(i,c) for(_PIForeach _for(c, true); !_for.isEnd(); ++_for) for(i = *_for._rit; !_for._break; _for._break = true) -#define piForeachA(i,c) for(_PIForeach _for(c); !_for.isEnd(); ++_for) for(typeof(_for._var) & i(*_for._it); !_for._break; _for._break = true) -#define piForeachAR(i,c) for(_PIForeach _for(c, true); !_for.isEnd(); ++_for) for(typeof(_for._var) & i(*_for._rit); !_for._break; _for._break = true) -#define piForeachC(i,c) for(_PIForeachC _for(c); !_for.isEnd(); ++_for) for(const i = *_for._it; !_for._break; _for._break = true) -#define piForeachCR(i,c) for(_PIForeachC _for(c, true); !_for.isEnd(); ++_for) for(const i = *_for._rit; !_for._break; _for._break = true) -#define piForeachCA(i,c) for(_PIForeachC _for(c); !_for.isEnd(); ++_for) for(const typeof(_for._var) & i(*_for._it); !_for._break; _for._break = true) -#define piForeachCAR(i,c) for(_PIForeachC _for(c, true); !_for.isEnd(); ++_for) for(const typeof(_for._var) & i(*_for._rit); !_for._break; _for._break = true) +#define piForeach(i,c) for(_PIForeach _for(c); !_for.isEnd(); ++_for) \ + for(i = *_for._it; !_for._break; _for._break = true) +#define piForeachR(i,c) for(_PIForeach _for(c, true); !_for.isEnd(); ++_for) \ + for(i = *_for._rit; !_for._break; _for._break = true) +#define piForeachA(i,c) for(_PIForeach _for(c); !_for.isEnd(); ++_for) \ + for(typeof(_for._var) & i(*_for._it); !_for._break; _for._break = true) +#define piForeachAR(i,c) for(_PIForeach _for(c, true); !_for.isEnd(); ++_for) \ + for(typeof(_for._var) & i(*_for._rit); !_for._break; _for._break = true) +#define piForeachC(i,c) for(_PIForeachC _for(c); !_for.isEnd(); ++_for) \ + for(const i = *_for._it; !_for._break; _for._break = true) +#define piForeachCR(i,c) for(_PIForeachC _for(c, true); !_for.isEnd(); ++_for) \ + for(const i = *_for._rit; !_for._break; _for._break = true) +#define piForeachCA(i,c) for(_PIForeachC _for(c); !_for.isEnd(); ++_for) \ + for(const typeof(_for._var) & i(*_for._it); !_for._break; _for._break = true) +#define piForeachCAR(i,c) for(_PIForeachC _for(c, true); !_for.isEnd(); ++_for) \ + for(const typeof(_for._var) & i(*_for._rit); !_for._break; _for._break = true) #define piForeachRA piForeachAR -#define piForeachRC piForeachCR #define piForeachAC piForeachCA #define piForeachCRA piForeachCAR #define piForeachARC piForeachCAR @@ -49,6 +56,57 @@ public: #define piForeachRCA piForeachCAR #define piForeachRAC piForeachCAR +#else + +struct _PIForeachBase {mutable bool _break;}; + +template +class _PIForeach: public _PIForeachBase { +public: + inline _PIForeach(Type & t, bool i = false): _t(t), _inv(i) {if (_inv) _rit = _t.rbegin(); else _it = _t.begin(); _break = false;} + mutable typename Type::value_type _var; + mutable typename Type::iterator _it; + mutable typename Type::reverse_iterator _rit; + Type & _t; + bool _inv; + inline bool isEnd() {if (_inv) return _rit == _t.rend(); else return _it == _t.end();} + inline void operator ++() {if (_inv) _rit++; else _it++; _break = false;} +}; + +template +class _PIForeachC: public _PIForeachBase { +public: + inline _PIForeachC(const Type & t, bool i = false): _t(t), _inv(i) {if (_inv) _rit = _t.rbegin(); else _it = _t.begin(); _break = false;} + mutable typename Type::value_type _var; + mutable typename Type::const_iterator _it; + mutable typename Type::const_reverse_iterator _rit; + const Type & _t; + bool _inv; + inline bool isEnd() {if (_inv) return _rit == _t.rend(); else return _it == _t.end();} + inline void operator ++() {if (_inv) _rit++; else _it++; _break = false;} +}; + +template inline _PIForeach _PIForeachNew(T & t, bool i = false) {return _PIForeach(t, i);} +template inline _PIForeach * _PIForeachCast(_PIForeachBase & c, T & ) {return static_cast<_PIForeach * >(&c);} + +template inline _PIForeachC _PIForeachNewC(const T & t, bool i = false) {return _PIForeachC(t, i);} +template inline _PIForeachC * _PIForeachCastC(_PIForeachBase & c, const T & ) {return static_cast<_PIForeachC * >(&c);} + +#define piForeach(i,c) for(_PIForeachBase & _for = _PIForeachNew(c); !_PIForeachCast(_for, c)->isEnd(); ++(*_PIForeachCast(_for, c))) \ + for(i = *(_PIForeachCast(_for, c)->_it); !_for._break; _for._break = true) +#define piForeachR(i,c) for(_PIForeachBase & _for = _PIForeachNew(c, true); !_PIForeachCast(_for, c)->isEnd(); ++(*_PIForeachCast(_for, c))) \ + for(i = *(_PIForeachCast(_for, c)->_rit); !_for._break; _for._break = true) +#define piForeachC(i,c) for(_PIForeachBase & _for = _PIForeachNewC(c); !_PIForeachCastC(_for, c)->isEnd(); ++(*_PIForeachCastC(_for, c))) \ + for(const i = *(_PIForeachCastC(_for, c)->_it); !_for._break; _for._break = true) +#define piForeachCR(i,c) for(_PIForeachBase & _for = _PIForeachNewC(c, false); !_PIForeachCastC(_for, c)->isEnd(); ++(*_PIForeachCastC(_for, c))) \ + for(const i = *(_PIForeachCastC(_for, c)->_rit); !_for._break; _for._break = true) + +#endif + +#define piForeachRC piForeachCR + +#define piForTimes(c) for(int i = 0; i < c; ++i) + template class PIFlags { public: @@ -102,6 +160,7 @@ public: inline _CVector & remove(const Type & t) {for (typename _stlc::iterator i = _stlc::begin(); i != _stlc::end(); ++i) if (t == *i) {_stlc::erase(i); --i;} return *this;} inline _CVector & insert(uint pos, const Type & t) {_stlc::insert(_stlc::begin() + pos, t); return *this;} inline _CVector & operator <<(const Type & t) {_stlc::push_back(t); return *this;} + inline _CVector & operator <<(const _CVector & t) {piForeachCA (i, t) _stlc::push_back(i); return *this;} inline bool contain(const Type & v) const {for (uint i = 0; i < _stlc::size(); ++i) if (v == at(i)) return true; return false;} }; diff --git a/piethernet.cpp b/piethernet.cpp index f2c8dcb4..490ed38d 100644 --- a/piethernet.cpp +++ b/piethernet.cpp @@ -50,7 +50,7 @@ void PIEthernet::terminate() { if (!receiverInitialized()) return; if (isRunning()) { stop(); - pthread_cancel(thread); + PIThread::terminate(); } tries = 0; /*if (sock != -1) { @@ -74,7 +74,7 @@ void PIEthernet::begin() { void PIEthernet::run() { #ifdef WINDOWS - int addr_len = sizeof(sockaddr_storage); + int addr_len = sizeof(sockaddr); #else socklen_t addr_len = sizeof(sockaddr_storage); #endif @@ -107,6 +107,7 @@ bool PIEthernet::init() { #endif sock = socket(PF_INET, SOCK_DGRAM, 0); if (bind(sock, (sockaddr * )&addr_, sizeof(addr_)) == -1) { + tries++; if (tries < 10) { if (init()) { tries = 0; @@ -128,6 +129,7 @@ bool PIEthernet::initSend() { #endif sock_s = socket(PF_INET, SOCK_DGRAM, 0); if (sock_s == -1) { + tries++; if (tries < 10) { if (init()) { tries = 0; diff --git a/piethernet.h b/piethernet.h index ac920d38..d0e12f7a 100644 --- a/piethernet.h +++ b/piethernet.h @@ -4,12 +4,17 @@ #include "pithread.h" #include "pistring.h" #ifndef WINDOWS -# include -# include -# include +#include +#include +#include #else -# include -# define SHUT_RDWR SD_BOTH +# ifdef CC_VC +#include +# define SHUT_RDWR 2 +# else +#include +# define SHUT_RDWR SD_BOTH +# endif #endif #define BUFFER_SIZE 4096 diff --git a/pievaluator.cpp b/pievaluator.cpp index 2f6206e2..1e61eb0e 100644 --- a/pievaluator.cpp +++ b/pievaluator.cpp @@ -1011,7 +1011,8 @@ inline bool PIEvaluator::execInstructions() { break; } } - out = value(instructions.back().out); + if (!instructions.isEmpty()) + out = value(instructions.back().out); return true; } diff --git a/pifile.cpp b/pifile.cpp index 64d009cf..41a5c76f 100644 --- a/pifile.cpp +++ b/pifile.cpp @@ -42,6 +42,7 @@ PIByteArray PIFile::readAll() { int PIFile::size() { + if (!stream.is_open()) return -1; int s, cp = stream.tellg(); stream.seekg(0, fstream::end); s = stream.tellg(); diff --git a/pifile.h b/pifile.h index c66ccd72..a3a53f97 100644 --- a/pifile.h +++ b/pifile.h @@ -44,7 +44,7 @@ public: int pos(); bool isOpened() {return stream.is_open();} bool isEnd() {return stream.eof();} - bool isEmpty() {return (size() == 0);} + bool isEmpty() {return (size() <= 0);} PIFile & writeData(const void * data, int size_) {stream.write((char * )data, size_); return *this;} PIFile & readData(void * data, int size_) {stream.read((char * )data, size_); return *this;} diff --git a/pigeometry.h b/pigeometry.h index 138d9ec0..0e33f6d4 100644 --- a/pigeometry.h +++ b/pigeometry.h @@ -12,27 +12,28 @@ public: PIPoint() {x = y = 0;}; PIPoint(Type x_, Type y_) {set(x_, y_);} - inline PIPoint & set(Type x_, Type y_) {x = x_; y = y_; return *this;} - inline PIPoint & move(Type x_, Type y_) {x += x_; y += y_; return *this;} - inline PIPoint & move(const PIPoint & p) {x += p.x; y += p.y; return *this;} - inline double angleRad() const {return atan2(y, x);} - inline int angleDeg() const {return round(atan2(y, x) * 180. / M_PI);} - inline PIPoint toPolar(bool isDeg = false) const {return PIPoint(sqrt(x*x + y*y), isDeg ? angleDeg() : angleRad());} - inline static PIPoint fromPolar(const PIPoint & p) {return PIPoint(p.y * cos(p.x), p.y * sin(p.x));} + PIPoint & set(Type x_, Type y_) {x = x_; y = y_; return *this;} + PIPoint & move(Type x_, Type y_) {x += x_; y += y_; return *this;} + PIPoint & move(const PIPoint & p) {x += p.x; y += p.y; return *this;} + double angleRad() const {return atan2(y, x);} + int angleDeg() const {return round(atan2(y, x) * 180. / M_PI);} + PIPoint toPolar(bool isDeg = false) const {return PIPoint(sqrt(x*x + y*y), isDeg ? angleDeg() : angleRad());} + static PIPoint fromPolar(const PIPoint & p) {return PIPoint(p.y * cos(p.x), p.y * sin(p.x));} + + PIPoint operator +(const PIPoint & p) {return PIPoint(x + p.x, y + p.y);} + PIPoint operator +(const Type & p) {return PIPoint(x + p, y + p);} + PIPoint operator -(const PIPoint & p) {return PIPoint(x - p.x, y - p.y);} + PIPoint operator -(const Type & p) {return PIPoint(x - p, y - p);} + PIPoint operator -() {return PIPoint(-x, -y);} + PIPoint operator *(const Type & d) {return PIPoint(x * d, y * d);} + PIPoint operator /(const Type & d) {return PIPoint(x / d, y / d);} + bool operator ==(const PIPoint & p) const {return (x == p.x && y == p.y);} + bool operator !=(const PIPoint & p) const {return (x != p.x || y != p.y);} - inline PIPoint operator +(const PIPoint & p) {return PIPoint(x + p.x, y + p.y);} - inline PIPoint operator +(const Type & p) {return PIPoint(x + p, y + p);} - inline PIPoint operator -(const PIPoint & p) {return PIPoint(x - p.x, y - p.y);} - inline PIPoint operator -(const Type & p) {return PIPoint(x - p, y - p);} - inline PIPoint operator -() {return PIPoint(-x, -y);} - inline PIPoint operator *(const Type & d) {return PIPoint(x * d, y * d);} - inline PIPoint operator /(const Type & d) {return PIPoint(x / d, y / d);} - inline bool operator ==(const PIPoint & p) const {return (x == p.x && y == p.y);} - inline bool operator !=(const PIPoint & p) const {return (x != p.x || y != p.y);} }; template -inline std::ostream & operator <<(std::ostream & s, const PIPoint & v) {s << '{' << v.x << ", " << v.y << '}'; return s;} +std::ostream & operator <<(std::ostream & s, const PIPoint & v) {s << '{' << v.x << ", " << v.y << '}'; return s;} template class PIRect { @@ -48,58 +49,61 @@ public: PIRect(const PIPoint & p0, const PIPoint & p1, const PIPoint & p2) {set(piMin(p0.x, p1.x, p2.x), piMin(p0.y, p1.y, p2.y), piMax(p0.x, p1.x, p2.x), piMax(p0.y, p1.y, p2.y));} - inline PIRect & set(Type x, Type y, Type w, Type h) {x0 = x; y0 = y; x1 = x + w; y1 = y + h; return *this;} - inline bool pointIn(Type x, Type y) const {return (x <= x1 && x >= x0 && y <= y1 && y >= y0);} - inline bool pointIn(const PIPoint & p) const {return pointIn(p.x, p.y);} - inline bool isEmpty() const {return (x1 - x0 == 0 && y1 - y0 == 0);} - inline PIRect & translate(Type x, Type y) {x0 += x; x1 += x; y0 += y; y1 += y; return *this;} - inline PIRect & translate(const PIPoint & p) {x0 += p.x; x1 += p.x; y0 += p.y; y1 += p.y; return *this;} - inline PIRect translated(Type x, Type y) {PIRect r(*this); r.translate(x, y); return r;} - inline PIRect translated(const PIPoint & p) {PIRect r(*this); r.translate(p); return r;} - inline PIRect & scale(Type x, Type y) {setWidth(width() * x); setHeight(height() * y); return *this;} - inline PIRect & scale(const PIPoint & p) {setWidth(width() * p.x); setHeight(height() * p.y); return *this;} - inline PIRect scaled(Type x, Type y) {PIRect r(*this); r.scale(x, y); return r;} - inline PIRect scaled(const PIPoint & p) {PIRect r(*this); r.scale(p); return r;} - inline PIRect & normalize() {if (x0 > x1) piSwap(x0, x1); if (y0 > y1) piSwap(y0, y1); return *this;} - inline PIRect normalized() {PIRect r(*this); r.normalize(); return r;} - inline PIRect & unite(const PIRect & r) {x0 = piMin(x0, r.x0); y0 = piMin(y0, r.y0); x1 = piMax(x1, r.x1); y1 = piMax(y1, r.y1); return *this;} - inline PIRect united(const PIRect & rect) {PIRect r(*this); r.unite(rect); return r;} - inline PIRect & intersect(const PIRect & r) {x0 = piMax(x0, r.x0); y0 = piMax(y0, r.y0); x1 = piMin(x1, r.x1); y1 = piMin(y1, r.y1); if (x0 > x1 || y0 > y1) x0 = x1 = y0 = y1 = Type(0); return *this;} - inline PIRect intersected(const PIRect & rect) {PIRect r(*this); r.intersect(rect); return r;} - inline Type top() const {return y0;} - inline Type left() const {return x0;} - inline Type right() const {return x1;} - inline Type bottom() const {return y1;} - inline Type width() const {return x1 - x0;} - inline Type height() const {return y1 - y0;} - inline PIPoint topLeft() {return PIPoint(x0, y0);} - inline PIPoint topRigth() {return PIPoint(x1, y0);} - inline PIPoint bottomLeft() {return PIPoint(x0, y1);} - inline PIPoint bottomRight() {return PIPoint(x1, y1);} - inline void setTop(Type v) {y0 = v;} - inline void setLeft(Type v) {x0 = v;} - inline void setRigth(Type v) {x1 = v;} - inline void setBottom(Type v) {y1 = v;} - inline void setWidth(Type v) {x1 = x0 + v;} - inline void setHeight(Type v) {y1 = y0 + v;} + PIRect & set(Type x, Type y, Type w, Type h) {x0 = x; y0 = y; x1 = x + w; y1 = y + h; return *this;} + bool pointIn(Type x, Type y) const {return (x <= x1 && x >= x0 && y <= y1 && y >= y0);} + bool pointIn(const PIPoint & p) const {return pointIn(p.x, p.y);} + bool isEmpty() const {return (x1 - x0 == 0 && y1 - y0 == 0);} + PIRect & translate(Type x, Type y) {x0 += x; x1 += x; y0 += y; y1 += y; return *this;} + PIRect & translate(const PIPoint & p) {x0 += p.x; x1 += p.x; y0 += p.y; y1 += p.y; return *this;} + PIRect translated(Type x, Type y) {PIRect r(*this); r.translate(x, y); return r;} + PIRect translated(const PIPoint & p) {PIRect r(*this); r.translate(p); return r;} + PIRect & scale(Type x, Type y) {setWidth(width() * x); setHeight(height() * y); return *this;} + PIRect & scale(const PIPoint & p) {setWidth(width() * p.x); setHeight(height() * p.y); return *this;} + PIRect scaled(Type x, Type y) {PIRect r(*this); r.scale(x, y); return r;} + PIRect scaled(const PIPoint & p) {PIRect r(*this); r.scale(p); return r;} + PIRect & normalize() {if (x0 > x1) piSwap(x0, x1); if (y0 > y1) piSwap(y0, y1); return *this;} + PIRect normalized() {PIRect r(*this); r.normalize(); return r;} + PIRect & unite(const PIRect & r) {x0 = piMin(x0, r.x0); y0 = piMin(y0, r.y0); x1 = piMax(x1, r.x1); y1 = piMax(y1, r.y1); return *this;} + PIRect united(const PIRect & rect) {PIRect r(*this); r.unite(rect); return r;} + PIRect & intersect(const PIRect & r) {x0 = piMax(x0, r.x0); y0 = piMax(y0, r.y0); x1 = piMin(x1, r.x1); y1 = piMin(y1, r.y1); if (x0 > x1 || y0 > y1) x0 = x1 = y0 = y1 = Type(0); return *this;} + PIRect intersected(const PIRect & rect) {PIRect r(*this); r.intersect(rect); return r;} + Type top() const {return y0;} + Type left() const {return x0;} + Type right() const {return x1;} + Type bottom() const {return y1;} + Type width() const {return x1 - x0;} + Type height() const {return y1 - y0;} + PIPoint topLeft() {return PIPoint(x0, y0);} + PIPoint topRigth() {return PIPoint(x1, y0);} + PIPoint bottomLeft() {return PIPoint(x0, y1);} + PIPoint bottomRight() {return PIPoint(x1, y1);} + void setTop(Type v) {y0 = v;} + void setLeft(Type v) {x0 = v;} + void setRigth(Type v) {x1 = v;} + void setBottom(Type v) {y1 = v;} + void setWidth(Type v) {x1 = x0 + v;} + void setHeight(Type v) {y1 = y0 + v;} + + PIRect operator -() {return PIRect(-x0, -y0, -width(), -height());} + void operator +=(Type x) {translate(x, x);} + void operator +=(const PIPoint & p) {translate(p);} + void operator -=(Type x) {translate(-x, -x);} + void operator -=(const PIPoint & p) {translate(-p);} + void operator *=(Type p) {x0 *= p; x1 *= p; y0 *= p; y1 *= p;} + void operator /=(Type p) {x0 /= p; x1 /= p; y0 /= p; y1 /= p;} + void operator |=(const PIRect & r) {unite(r);} + void operator &=(const PIRect & r) {intersect(r);} + PIRect operator +(const PIPoint & p) {return PIRect(*this).translated(p);} + PIRect operator -(const PIPoint & p) {return PIRect(*this).translated(-p);} + PIRect operator |(const PIRect & r) {return PIRect(*this).united(r);} + PIRect operator &(const PIRect & r) {return PIRect(*this).intersected(r);} + bool operator ==(const PIRect & r) const {return (x0 == r.x0 && y0 == r.y0 && x1 == r.x1 && y1 == r.y10);} + bool operator !=(const PIRect & r) const {return (x0 != r.x0 || y0 != r.y0 || x1 != r.x1 || y1 != r.y10);} - inline PIRect operator -() {return PIRect(-x0, -y0, -width(), -height());} - inline void operator +=(Type x) {translate(x, x);} - inline void operator +=(const PIPoint & p) {translate(p);} - inline void operator -=(Type x) {translate(-x, -x);} - inline void operator -=(const PIPoint & p) {translate(-p);} - inline void operator *=(Type p) {x0 *= p; x1 *= p; y0 *= p; y1 *= p;} - inline void operator /=(Type p) {x0 /= p; x1 /= p; y0 /= p; y1 /= p;} - inline void operator |=(const PIRect & r) {unite(r);} - inline void operator &=(const PIRect & r) {intersect(r);} - inline PIRect operator +(const PIPoint & p) {return PIRect(*this).translated(p);} - inline PIRect operator -(const PIPoint & p) {return PIRect(*this).translated(-p);} - inline PIRect operator |(const PIRect & r) {return PIRect(*this).united(r);} - inline PIRect operator &(const PIRect & r) {return PIRect(*this).intersected(r);} }; template -inline std::ostream & operator <<(std::ostream & s, const PIRect & v) {s << '{' << v.x0 << ", " << v.y0 << "; " << v.x1 - v.x0 << ", " << v.y1 - v.y0 << '}'; return s;} +std::ostream & operator <<(std::ostream & s, const PIRect & v) {s << '{' << v.x0 << ", " << v.y0 << "; " << v.x1 - v.x0 << ", " << v.y1 - v.y0 << '}'; return s;} typedef PIPoint PIPointi; typedef PIPoint PIPointu; diff --git a/piincludes.h b/piincludes.h index c0d39887..10f4f0d9 100644 --- a/piincludes.h +++ b/piincludes.h @@ -1,29 +1,44 @@ #ifndef PIINCLUDES_H #define PIINCLUDES_H -#if __WIN32__ || __WIN64__ +#if __WIN32__ || __WIN64__ || WIN32 || WIN64 # define WINDOWS #endif -#if __QNX__ +#if __QNX__ || __QNXNTO__ # define QNX #endif #ifndef WINDOWS -# ifndef QNX -# define LINUX -# endif +# ifndef QNX +# define LINUX +# endif +#endif +#if __GNUC__ +# define CC_GCC +#elif _MSC_VER +# define CC_VC +#endif + +#ifdef WINDOWS +# ifdef CC_GCC +# define typeof __typeof +# endif +#else +# define typeof __typeof__ #endif #include +#ifdef CC_GCC #include +#endif #include #include #ifndef QNX -# include -# include -# include +#include +#include +#include #else -# include -# include +#include +#include #endif #include #include @@ -40,11 +55,10 @@ #include #include #include - #ifdef WINDOWS -# include -# include -# include +#include +#include +#include #endif #define FOREVER for (;;) @@ -71,9 +85,9 @@ using std::set; using std::string; #ifndef QNX using std::wstring; -# ifndef WINDOWS +# ifndef WINDOWS static locale_t currentLocale_t = 0; -# endif +# endif #else typedef std::basic_string wstring; #endif @@ -103,43 +117,76 @@ public: static piInit __pi_init; static lconv * currentLocale = std::localeconv(); -inline const char * errorString() {return strerror(errno);} + +#ifdef CC_VC +inline string errorString() {char buff[1024]; strerror_s(buff, 1024, GetLastError()); return string(buff);} +#else +inline string errorString() {return string(strerror(errno));} +#endif #ifdef WINDOWS inline int random() {return rand();} +# ifdef CC_VC +inline double round(const double & v) {return floor(v + 0.5);} +# endif #endif template inline void piSwap(Type & f, Type & s) {Type t = f; f = s; s = t;} template inline Type piMin(const Type & f, const Type & s) {return (f > s) ? s : f;} -template inline Type piMax(const Type & f, const Type & s) {return (f < s) ? s : f;} template inline Type piMin(const Type & f, const Type & s, const Type & t) {return (f < s && f < t) ? f : ((s < t) ? s : t);} +template inline Type piMax(const Type & f, const Type & s) {return (f < s) ? s : f;} template inline Type piMax(const Type & f, const Type & s, const Type & t) {return (f > s && f > t) ? f : ((s > t) ? s : t);} +template inline Type piClamp(const Type & v, const Type & min, const Type & max) {return (v > max ? max : (v < min ? min : v));} inline ushort letobe_s(ushort v) {return v = (v << 8) | (v >> 8);} inline bool atob(const string & str) { return str == "1" ? true : false;}; inline string btos(const bool num) { return num ? "0" : "1";}; inline string itos(const int num) { char ch[256]; +#ifndef CC_VC sprintf(ch, "%d", num); +#else + sprintf_s(ch, 256, "%d", num); +#endif return string(ch); }; inline string ltos(const long num) { char ch[256]; +#ifndef CC_VC sprintf(ch, "%ld", num); +#else + sprintf_s(ch, 256, "%ld", num); +#endif return string(ch); }; inline string uitos(const uint num) { char ch[256]; +#ifndef CC_VC sprintf(ch, "%ud", num); +#else + sprintf_s(ch, 256, "%ud", num); +#endif return string(ch); }; inline string ultos(const ulong num) { char ch[256]; +#ifndef CC_VC sprintf(ch, "%lud", num); +#else + sprintf_s(ch, 256, "%lud", num); +#endif return string(ch); }; inline string ftos(const float num) { char ch[256]; +#ifndef CC_VC sprintf(ch, "%g", num); +#else + sprintf_s(ch, 256, "%g", num); +#endif return string(ch); }; inline string dtos(const double num) { char ch[256]; +#ifndef CC_VC sprintf(ch, "%g", num); +#else + sprintf_s(ch, 256, "%g", num); +#endif return string(ch); }; #endif // PIINCLUDES_H diff --git a/pikbdlistener.cpp b/pikbdlistener.cpp index cf7bafbc..ccd9e73d 100644 --- a/pikbdlistener.cpp +++ b/pikbdlistener.cpp @@ -4,7 +4,7 @@ bool PIKbdListener::exiting; PIKbdListener::PIKbdListener(KBFunc slot, void * data_): PIThread() { -#ifdef __WIN32__ +#ifdef WINDOWS hIn = GetStdHandle(STD_INPUT_HANDLE); GetConsoleMode(hIn, &smode); #else @@ -22,35 +22,55 @@ PIKbdListener::PIKbdListener(KBFunc slot, void * data_): PIThread() { void PIKbdListener::begin() { //cout << "list begin" << endl; -#ifdef __WIN32__ +#ifdef WINDOWS hIn = GetStdHandle(STD_INPUT_HANDLE); GetConsoleMode(hIn, &smode); + tmode = smode; SetConsoleMode(hIn, ENABLE_PROCESSED_INPUT); #else struct termios term; tcgetattr(0, &term); term.c_lflag &= ~(ECHO | ICANON) | NOFLSH; + tterm = term; tcsetattr(0, TCSAFLUSH, &term); #endif } void PIKbdListener::run() { -#ifdef __WIN32__ +#ifdef WINDOWS ReadConsole(hIn, &rc, 1, &ret, 0); #else ret = read(0, &rc, 1); #endif if (exit_enabled && rc == exit_key) PIKbdListener::exiting = true; - if (ret_func != 0 && ret > 0 && is_active) ret_func(rc, data); + if (ret_func != 0 && ret > 0) ret_func(rc, data); } void PIKbdListener::end() { //cout << "list end" << endl; -#ifdef __WIN32__ +#ifdef WINDOWS SetConsoleMode(hIn, smode); #else tcsetattr(0, TCSANOW, &sterm); #endif } + + +void PIKbdListener::setActive(bool yes) { + is_active = yes; + if (is_active) { +#ifdef WINDOWS + SetConsoleMode(hIn, tmode); +#else + tcsetattr(0, TCSANOW, &tterm); +#endif + } else { +#ifdef WINDOWS + SetConsoleMode(hIn, smode); +#else + tcsetattr(0, TCSANOW, &sterm); +#endif + } +} diff --git a/pikbdlistener.h b/pikbdlistener.h index 59dfe1d3..e5b566ce 100644 --- a/pikbdlistener.h +++ b/pikbdlistener.h @@ -2,8 +2,8 @@ #define PIKBDLISTENER_H #include "pithread.h" -#ifndef __WIN32__ -# include +#ifndef WINDOWS +#include #endif #define WAIT_FOR_EXIT while (!PIKbdListener::exiting) msleep(1); @@ -17,12 +17,12 @@ public: PIKbdListener(KBFunc slot = 0, void * data = 0); ~PIKbdListener() {terminate(); end();} - inline void enableExitCapture(char key = 'Q') {exit_enabled = true; exit_key = key;} - inline void disableExitCapture() {exit_enabled = false;} - inline bool exitCaptured() const {return exit_enabled;} - inline char exitKey() const {return exit_key;} - inline bool isActive() {return is_active;} - inline void setActive(bool yes = true) {is_active = yes;} + void enableExitCapture(char key = 'Q') {exit_enabled = true; exit_key = key;} + void disableExitCapture() {exit_enabled = false;} + bool exitCaptured() const {return exit_enabled;} + char exitKey() const {return exit_key;} + bool isActive() {return is_active;} + void setActive(bool yes = true); static bool exiting; @@ -35,13 +35,13 @@ private: char rc, exit_key, is_active; bool exit_enabled; void * data; -#ifdef __WIN32__ +#ifdef WINDOWS DWORD ret; void * hIn; - DWORD smode; + DWORD smode, tmode; #else int ret; - struct termios sterm; + struct termios sterm, tterm; #endif }; diff --git a/pimath.h b/pimath.h index 57a6769f..d8dd26d6 100644 --- a/pimath.h +++ b/pimath.h @@ -9,6 +9,9 @@ # include # include #endif +#ifdef CC_VC +#define M_PI 3.14159265358979323846 +#endif #define M_2PI 6.28318530717958647692 #define M_PI_3 1.04719755119659774615 @@ -693,7 +696,7 @@ public: void solveABM3(double u, double h); void solveABM4(double u, double h); void solvePA(double u, double h, uint deg); - inline void solvePA2(double u, double h) {if (step > 0) solvePA(u, h, 2); else solvePA(u, h, 1);} + inline void solvePA2(double u, double h) {if (step > 0) solvePA(u, h, 2); else solveEyler1(u, h);} inline void solvePA3(double u, double h) {if (step > 1) solvePA(u, h, 3); else solvePA2(u, h);} inline void solvePA4(double u, double h) {if (step > 2) solvePA(u, h, 4); else solvePA3(u, h);} inline void solvePA5(double u, double h) {if (step > 3) solvePA(u, h, 5); else solvePA4(u, h);} diff --git a/pimultiprotocol.h b/pimultiprotocol.h new file mode 100644 index 00000000..1c0876d0 --- /dev/null +++ b/pimultiprotocol.h @@ -0,0 +1,78 @@ +#ifndef PIMULTIPROTOCOL_H +#define PIMULTIPROTOCOL_H + +#include "piprotocol.h" + +class PIMultiProtocol: public PIMultiProtocolBase +{ +public: + PIMultiProtocol() {;} + virtual ~PIMultiProtocol() {clear();} + + void addProtocol(PIProtocol & prot) {prots.push_back(&prot); prot.setMultiProtocolOwner(this); prot.new_mp_prot = false;} + void addProtocol(PIProtocol * prot) {prots.push_back(prot); prot->setMultiProtocolOwner(this); prot->new_mp_prot = false;} + void addProtocol(const PIString & config, const PIString & name, void * recHeaderPtr = 0, int recHeaderSize = 0, + void * recDataPtr = 0, int recDataSize = 0, void * sendDataPtr = 0, int sendDataSize = 0) {; + prots.push_back(new PIProtocol(config, name, recHeaderPtr, recHeaderSize, recDataPtr, recDataSize, sendDataPtr, sendDataSize)); + prots.back()->setMultiProtocolOwner(this); + prots.back()->new_mp_prot = true; + } + PIProtocol * protocol(const PIString & name) {piForeach (PIProtocol * i, prots) if (i->name() == name) return i; return 0;} + PIProtocol * protocol(const int index) {return prots[index];} + PIProtocol * operator [](const int index) {return prots[index];} + + void startSend() {piForeach (PIProtocol * i, prots) i->startSend();} + void startReceive() {piForeach (PIProtocol * i, prots) i->startReceive();} + void start() {piForeach (PIProtocol * i, prots) i->start();} + + void stopSend() {piForeach (PIProtocol * i, prots) i->stopSend();} + void stopReceive() {piForeach (PIProtocol * i, prots) i->stopReceive();} + void stop() {piForeach (PIProtocol * i, prots) i->stop();} + + PIProtocol::Quality worseQuality() const {PIProtocol::Quality cq = PIProtocol::Good; piForeachC (PIProtocol * i, prots) if (cq > i->quality()) cq = i->quality(); return cq;} + PIProtocol::Quality bestQuality() const {PIProtocol::Quality cq = PIProtocol::Unknown; piForeachC (PIProtocol * i, prots) if (cq < i->quality()) cq = i->quality(); return cq;} + + int count() const {return prots.size_s();} + void clear() {stop(); piForeach (PIProtocol * i, prots) if (i->new_mp_prot) delete i; prots.clear();} + +private: + PIVector prots; + +}; + +class PIRepeater: public PIMultiProtocol { +public: + PIRepeater(const PIString & config, const PIString & name, int data_size) { + ba_f.resize(data_size); + ba_s.resize(data_size); + PIConfig conf(config, PIFile::Read); + if (!conf.isOpened()) { + cout << "[PIRepeater \"" << name << "\"] Can`t open \"" << config << "\"!" << endl; + return; + } + PIConfig::Entry b = conf.getValue(name); + if (b.childCount() != 2) { + cout << "[PIRepeater \"" << name << "\"] \"" << config << "\" should consist 2 nodes!" << endl; + return; + } + addProtocol(config, b.child(0)->fullName(), 0, 0, ba_f.data(), data_size, ba_s.data(), data_size); + addProtocol(config, b.child(1)->fullName(), 0, 0, ba_s.data(), data_size, ba_f.data(), data_size); + start(); + } + + PIString firstChannelName() {if (count() == 2) return protocol(0)->receiverDeviceName() + " -> " + protocol(1)->senderDeviceName(); return "Config error";} + PIString secondChannelName() {if (count() == 2) return protocol(1)->receiverDeviceName() + " -> " + protocol(0)->senderDeviceName(); return "Config error";} + + ullong receiveCount() {if (count() == 2) return protocol(0)->receiveCount(); return 0;} + ullong * receiveCount_ptr() {if (count() == 2) return protocol(0)->receiveCount_ptr(); return 0;} + ullong sendCount() {if (count() == 2) return protocol(0)->sendCount(); return 0;} + ullong * sendCount_ptr() {if (count() == 2) return protocol(0)->sendCount_ptr(); return 0;} + +private: + void received(PIProtocol * prot, bool , char * , int ) {if (prot == protocol(0)) protocol(1)->send(); else protocol(0)->send();} + + PIByteArray ba_f, ba_s; + +}; + +#endif // PIMULTIPROTOCOL_H diff --git a/pimutex.h b/pimutex.h index e6f63c2a..05111ddc 100644 --- a/pimutex.h +++ b/pimutex.h @@ -1,27 +1,42 @@ #ifndef PIMUTEX_H #define PIMUTEX_H -#include +#ifdef CC_GCC +#include +#endif #include "piincludes.h" class PIMutex { public: +#ifndef WINDOWS PIMutex() { pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_PROCESS_SHARED); - //pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED); pthread_mutex_init(&mutex, &attr); pthread_mutexattr_destroy(&attr); } ~PIMutex() {pthread_mutex_destroy(&mutex);} + void lock() {pthread_mutex_lock(&mutex);} void unlock() {pthread_mutex_unlock(&mutex);} bool tryLock() {return (pthread_mutex_trylock(&mutex) == 0);} +#else + PIMutex() {mutex = CreateMutex(0, false, 0);} + ~PIMutex() {CloseHandle(mutex);} + + void lock() {WaitForSingleObject(mutex, INFINITE);} + void unlock() {ReleaseMutex(mutex);} + bool tryLock() {return (WaitForSingleObject(mutex, 0) == WAIT_OBJECT_0);} +#endif private: +#ifndef WINDOWS pthread_mutex_t mutex; +#else + void * mutex; +#endif }; diff --git a/pip.h b/pip.h index afb03fb8..72fd39a9 100644 --- a/pip.h +++ b/pip.h @@ -3,5 +3,6 @@ #include "piconsole.h" #include "picli.h" #include "pievaluator.h" -#include "piprotocol.h" +#include "pimultiprotocol.h" #include "picodec.h" +#include "pisignals.h" diff --git a/piprocess.cpp b/piprocess.cpp index 8ac7f2cd..ca3509c8 100644 --- a/piprocess.cpp +++ b/piprocess.cpp @@ -1,124 +1,173 @@ -#include "piprocess.h" - - -PIProcess::PIProcess(): PIThread() { - exit_code = -1; - pid = 0; - is_exec = false; - g_in = g_out = g_err = false; - t_in = t_out = t_err = false; - env = PIProcess::currentEnvironment(); -} - - -PIProcess::~PIProcess() { - if (t_in) f_in.remove(); - if (t_out) f_out.remove(); - if (t_err) f_err.remove(); -} - - -void PIProcess::exec_() { - is_exec = false; - startOnce(); - //cout << "exec wait" << endl; - while (!is_exec) - msleep(1); - //cout << "exec end" << endl; -} - - -void PIProcess::run() { - //cout << "run" << endl; - string str; - /// arguments convertion - char * a[args.size_s() + 1]; - for (int i = 0; i < args.size_s(); ++i) { - str = args[i].stdString(); - a[i] = new char[str.size() + 1]; - memcpy(a[i], str.c_str(), str.size()); - a[i][str.size()] = 0; - //cout << a[i] << endl; - } - a[args.size_s()] = 0; - /// environment convertion - char * e[env.size_s() + 1]; - for (int i = 0; i < env.size_s(); ++i) { - str = env[i].stdString(); - e[i] = new char[str.size() + 1]; - memcpy(e[i], str.c_str(), str.size()); - e[i][str.size()] = 0; - //cout << e[i] << endl; - } - e[env.size_s()] = 0; - /// files for stdin/out/err - t_in = t_out = t_err = false; - if (f_in.path().isEmpty()) { - f_in = PIFile::openTemporary(PIFile::New | PIFile::Read); - t_in = true; - } - f_in.open(PIFile::New | PIFile::Read); f_in.close(); - if (f_out.path().isEmpty()) { - f_out = PIFile::openTemporary(PIFile::New | PIFile::Write); - t_out = true; - } - f_out.open(PIFile::New | PIFile::Write); f_out.close(); - if (f_err.path().isEmpty()) { - f_err = PIFile::openTemporary(PIFile::New | PIFile::Write); - t_err = true; - } - f_err.open(PIFile::New | PIFile::Write); f_err.close(); - - str = args.front().stdString(); - is_exec = true; - pid = fork(); - if (pid == 0) { - FILE * tf; - //cout << "exec" << endl; - //cout << f_out.path() << endl; - if (g_in) tf = freopen(f_in.path().data(), "r", stdin); - if (g_out) tf = freopen(f_out.path().data(), "w", stdout); - if (g_err) tf = freopen(f_err.path().data(), "w", stderr); - if (!wd.isEmpty()) system(("cd " + wd).data()); - if (execvpe(str.c_str(), a, e) < 0) - cout << "[PIProcess] \"execvpe\" error, " << errorString() << endl; - } else { - msleep(1); - //cout << "wait" << endl; - wait(&exit_code); - pid = 0; - //cout << "wait done" << endl; - } - is_exec = false; - for (int i = 0; i < env.size_s(); ++i) - delete e[i]; - for (int i = 0; i < args.size_s(); ++i) - delete a[i]; - //cout << "end" << endl; -} - - -void PIProcess::removeEnvironmentVariable(const PIString & variable) { - PIString s; - for (int i = 0; i < env.size_s(); ++i) { - s = env[i]; - if (s.left(s.find("=")).trimmed() == variable) { - env.remove(i); - --i; - } - } -} - - -void PIProcess::setEnvironmentVariable(const PIString & variable, const PIString & value) { - PIString s, v; - for (int i = 0; i < env.size_s(); ++i) { - s = env[i]; - v = s.left(s.find("=")).trimmed(); - if (v == variable) { - env[i] = v + "=" + value; - return; - } - } - env << variable + "=" + value; -} +#include "piprocess.h" + + +PIProcess::PIProcess(): PIThread() { + exit_code = -1; +#ifdef WINDOWS + pi.dwProcessId = 0; +#else + pid = 0; +#endif + is_exec = false; + g_in = g_out = g_err = false; + t_in = t_out = t_err = false; + env = PIProcess::currentEnvironment(); +} + + +PIProcess::~PIProcess() { + if (t_in) f_in.remove(); + if (t_out) f_out.remove(); + if (t_err) f_err.remove(); +} + + +void PIProcess::exec_() { + is_exec = false; + startOnce(); + //cout << "exec wait" << endl; + while (!is_exec) + msleep(1); + //cout << "exec end" << endl; +} + + +void PIProcess::run() { + //cout << "run" << endl; + string str; + /// arguments convertion + int as = 0; +#ifdef WINDOWS + //args.pop_front(); + piForeachC (PIString & i, args) + as += i.stdString().length() + 1; + char * a = new char[as]; + memset(a, ' ', as - 1); + as = 0; + for (int i = 0; i < args.size_s(); ++i) { + str = args[i].stdString(); + memcpy(&a[as], str.c_str(), str.size()); + as += str.length() + 1; + } + a[as - 1] = 0; +#else + char * a[args.size_s() + 1]; + for (int i = 0; i < args.size_s(); ++i) { + str = args[i].stdString(); + a[i] = new char[str.size() + 1]; + memcpy(a[i], str.c_str(), str.size()); + a[i][str.size()] = 0; + //cout << a[i] << endl; + } + a[args.size_s()] = 0; +#endif + /// environment convertion + char ** e = new char*[env.size_s() + 1]; + for (int i = 0; i < env.size_s(); ++i) { + str = env[i].stdString(); + e[i] = new char[str.size() + 1]; + memcpy(e[i], str.c_str(), str.size()); + e[i][str.size()] = 0; + //cout << e[i] << endl; + } + e[env.size_s()] = 0; + /// files for stdin/out/err + t_in = t_out = t_err = false; + if (f_in.path().isEmpty()) { + f_in = PIFile::openTemporary(PIFile::New | PIFile::Read); + t_in = true; + } + f_in.open(PIFile::New | PIFile::Read); f_in.close(); + if (f_out.path().isEmpty()) { + f_out = PIFile::openTemporary(PIFile::New | PIFile::Write); + t_out = true; + } + f_out.open(PIFile::New | PIFile::Write); f_out.close(); + if (f_err.path().isEmpty()) { + f_err = PIFile::openTemporary(PIFile::New | PIFile::Write); + t_err = true; + } + f_err.open(PIFile::New | PIFile::Write); f_err.close(); + + str = args.front().stdString(); + is_exec = true; +#ifndef WINDOWS + pid = fork(); + if (pid == 0) { +#endif + FILE * tf; + //cout << "exec" << endl; + //cout << f_out.path() << endl; + if (g_in) tf = freopen(f_in.path().data(), "r", stdin); + if (g_out) tf = freopen(f_out.path().data(), "w", stdout); + if (g_err) tf = freopen(f_err.path().data(), "w", stderr); +#ifndef WINDOWS + if (!wd.isEmpty()) as = chdir(wd.data()); +#endif +#ifdef WINDOWS + GetStartupInfoA(&si); + memset(&pi, 0, sizeof(pi)); + if(CreateProcessA(0, // No module name (use command line) + a, // Command line + 0, // Process handle not inheritable + 0, // Thread handle not inheritable + false, // Set handle inheritance to FALSE + 0, // No creation flags + 0,//e, // Use environment + wd.isEmpty() ? 0 : wd.data(), // Use working directory + &si, // Pointer to STARTUPINFO structure + &pi)) // Pointer to PROCESS_INFORMATION structure + { + WaitForSingleObject(pi.hProcess, INFINITE); + CloseHandle(pi.hProcess); + } else + cout << "[PIProcess] \"CreateProcess\" error, " << errorString() << endl; +#else + if (execvpe(str.c_str(), a, e) < 0) + cout << "[PIProcess] \"execvpe\" error, " << errorString() << endl; + } else { + msleep(1); + //cout << "wait" << endl; + wait(&exit_code); + pid = 0; + //cout << "wait done" << endl; + } +#endif + is_exec = false; + for (int i = 0; i < env.size_s(); ++i) + delete e[i]; + delete e; +#ifdef WINDOWS + delete a; +#else + for (int i = 0; i < args.size_s(); ++i) + delete a[i]; +#endif + //cout << "end" << endl; +} + + +void PIProcess::removeEnvironmentVariable(const PIString & variable) { + PIString s; + for (int i = 0; i < env.size_s(); ++i) { + s = env[i]; + if (s.left(s.find("=")).trimmed() == variable) { + env.remove(i); + --i; + } + } +} + + +void PIProcess::setEnvironmentVariable(const PIString & variable, const PIString & value) { + PIString s, v; + for (int i = 0; i < env.size_s(); ++i) { + s = env[i]; + v = s.left(s.find("=")).trimmed(); + if (v == variable) { + env[i] = v + "=" + value; + return; + } + } + env << variable + "=" + value; +} diff --git a/piprocess.h b/piprocess.h index 5f6cac31..3cb728cb 100644 --- a/piprocess.h +++ b/piprocess.h @@ -1,62 +1,77 @@ -#ifndef PIPROCESS_H -#define PIPROCESS_H - -#include "pithread.h" -#include "pifile.h" -#include - -/// TODO workind dir - -class PIProcess: private PIThread -{ -public: - PIProcess(); - ~PIProcess(); - - int exitCode() const {return exit_code;} - int pID() const {return pid;} - - void setGrabInput(bool yes) {g_in = yes;} - void setGrabOutput(bool yes) {g_out = yes;} - void setGrabError(bool yes) {g_err = yes;} - void setInputFile(const PIString & path) {f_in.setPath(path);} - void setOutputFile(const PIString & path) {f_out.setPath(path);} - void setErrorFile(const PIString & path) {f_err.setPath(path);} - void unsetInputFile() {f_in.setPath("");} - void unsetOutputFile() {f_out.setPath("");} - void unsetErrorFile() {f_err.setPath("");} - void setWorkingDirectory(const PIString & path) {wd = path;} - void resetWorkingDirectory() {wd.clear();} - void exec(const PIString & program) {args.clear(); args << program; exec_();} - void exec(const PIString & program, const PIString & arg) {args.clear(); args << program << arg; exec_();} - void exec(const PIString & program, const PIString & arg1, const PIString & arg2) {args.clear(); args << program << arg1 << arg2; exec_();} - void exec(const PIString & program, const PIString & arg1, const PIString & arg2, const PIString & arg3) {args.clear(); args << program << arg1 << arg2 << arg3; exec_();} - void exec(const PIString & program, const PIStringList & args_) {args = args_; exec_();} - void terminate() {if (is_exec) ::kill(pid, SIGKILL); pid = 0;} - bool waitForFinish(int timeout_msecs = 60000) {return PIThread::waitForFinish(timeout_msecs);} - PIByteArray readOutput() {f_out.open(PIFile::Read); return f_out.readAll();} - PIByteArray readError() {f_err.open(PIFile::Read); return f_err.readAll();} - - PIStringList environment() {return env;} - void clearEnvironment() {env.clear();} - void removeEnvironmentVariable(const PIString & variable); - void setEnvironmentVariable(const PIString & variable, const PIString & value); - - static PIStringList currentEnvironment() {PIStringList l; int i = 0; while (environ[i] != 0) {l << environ[i]; ++i;} return l;} - -private: - virtual void run(); - void exec_(); - - PIStringList args, env; - PIString wd; - PIByteArray out; - PIFile f_in, f_out, f_err; - bool g_in, g_out, g_err, t_in, t_out, t_err; - pid_t pid; - int exit_code, sz; - bool is_exec; - -}; - -#endif // PIPROCESS_H +#ifndef PIPROCESS_H +#define PIPROCESS_H + +#include "pithread.h" +#include "pifile.h" +#ifdef WINDOWS +//# include <.h> +#else +# include +#endif + +class PIProcess: private PIThread +{ +public: + PIProcess(); + ~PIProcess(); + + int exitCode() const {return exit_code;} +#ifdef WINDOWS + int pID() const {return pi.dwProcessId;} +#else + int pID() const {return pid;} +#endif + + void setGrabInput(bool yes) {g_in = yes;} + void setGrabOutput(bool yes) {g_out = yes;} + void setGrabError(bool yes) {g_err = yes;} + void setInputFile(const PIString & path) {f_in.setPath(path);} + void setOutputFile(const PIString & path) {f_out.setPath(path);} + void setErrorFile(const PIString & path) {f_err.setPath(path);} + void unsetInputFile() {f_in.setPath("");} + void unsetOutputFile() {f_out.setPath("");} + void unsetErrorFile() {f_err.setPath("");} + void setWorkingDirectory(const PIString & path) {wd = path;} + void resetWorkingDirectory() {wd.clear();} + void exec(const PIString & program) {args.clear(); args << program; exec_();} + void exec(const PIString & program, const PIString & arg) {args.clear(); args << program << arg; exec_();} + void exec(const PIString & program, const PIString & arg1, const PIString & arg2) {args.clear(); args << program << arg1 << arg2; exec_();} + void exec(const PIString & program, const PIString & arg1, const PIString & arg2, const PIString & arg3) {args.clear(); args << program << arg1 << arg2 << arg3; exec_();} + void exec(const PIString & program, const PIStringList & args_) {args = args_; exec_();} +#ifdef WINDOWS + void terminate() {if (is_exec) if (!TerminateProcess(pi.hProcess, 0)) return; pi.dwProcessId = 0;} +#else + void terminate() {if (is_exec) kill(pid, SIGKILL); pid = 0;} +#endif + bool waitForFinish(int timeout_msecs = 60000) {return PIThread::waitForFinish(timeout_msecs);} + PIByteArray readOutput() {f_out.open(PIFile::Read); return f_out.readAll();} + PIByteArray readError() {f_err.open(PIFile::Read); return f_err.readAll();} + + PIStringList environment() {return env;} + void clearEnvironment() {env.clear();} + void removeEnvironmentVariable(const PIString & variable); + void setEnvironmentVariable(const PIString & variable, const PIString & value); + + static PIStringList currentEnvironment() {PIStringList l; int i = 0; while (environ[i] != 0) {l << environ[i]; ++i;} return l;} + +private: + virtual void run(); + void exec_(); + + PIStringList args, env; + PIString wd; + PIByteArray out; + PIFile f_in, f_out, f_err; + bool g_in, g_out, g_err, t_in, t_out, t_err; +#ifdef WINDOWS + STARTUPINFOA si; + PROCESS_INFORMATION pi; +#else + pid_t pid; +#endif + int exit_code, sz; + bool is_exec; + +}; + +#endif // PIPROCESS_H diff --git a/piprotocol.cpp b/piprotocol.cpp index 2d3447b9..6e1ad2e3 100644 --- a/piprotocol.cpp +++ b/piprotocol.cpp @@ -3,6 +3,7 @@ PIProtocol::PIProtocol(const PIString & config, const PIString & name, void * recHeaderPtr, int recHeaderSize, void * recDataPtr, int recDataSize, void * sendDataPtr_, int sendDataSize_) { init(); + protName = name; PIConfig conf(config, PIFile::Read); if (!conf.isOpened()) { cout << "[PIProtocol \"" << name << "\"] Can`t open \"" << config << "\"!" << endl; @@ -27,14 +28,13 @@ PIProtocol::PIProtocol(const PIString & config, const PIString & name, void * re if (ok) { ps = rb.getValue("port", 0, &ok); if (!ok) { - type_rec = PIProtocol::None; cout << "[PIProtocol \"" << name << "\"] Can`t find \"" << name << ".receiver.port\" in \"" << config << "\"!" << endl; devReceiverState = "Config error"; return; } type_rec = PIProtocol::Ethernet; eth = new PIEthernet(dev, ps, this, receiveEvent); - devReceiverName = dev + ":" + PIString::fromNumber(ps); + setReceiverAddress(dev, ps); } dev = rb.getValue("device", "", &ok); if (ok) { @@ -47,12 +47,15 @@ PIProtocol::PIProtocol(const PIString & config, const PIString & name, void * re if (rb.getValue("parity", false)) pp |= PISerial::ParityControl; if (rb.getValue("twoStopBits", false)) pp |= PISerial::TwoStopBits; type_rec = PIProtocol::Serial; + type_send = PIProtocol::Serial; ser = new PISerial(dev, this, receiveEvent); + setReceiverDevice(dev, (PISerial::Speed)ps); + setSenderDevice(dev, (PISerial::Speed)ps); ser->setInSpeed((PISerial::Speed)ps); ser->setParameters(pp); ser->setReadData(recHeaderPtr, recHeaderSize, recDataSize); - devReceiverName = dev; } + setExpectedFrequency(rb.getValue("frequency", -1.f)); /// sender section if (sb.isEntryExists("ip") && sb.isEntryExists("device")) { @@ -64,7 +67,6 @@ PIProtocol::PIProtocol(const PIString & config, const PIString & name, void * re if (ok) { ps = sb.getValue("port", 0, &ok); if (!ok) { - type_send = PIProtocol::None; cout << "[PIProtocol \"" << name << "\"] Can`t find \"" << name << ".sender.port\" in \"" << config << "\"!" << endl; devSenderState = "Config error"; return; @@ -72,7 +74,6 @@ PIProtocol::PIProtocol(const PIString & config, const PIString & name, void * re type_send = PIProtocol::Ethernet; if (eth == 0) eth = new PIEthernet(dev, ps, this, receiveEvent); setSenderAddress(dev, ps); - devSenderName = dev + ":" + PIString::fromNumber(ps); } dev = sb.getValue("device", "", &ok); if (ok) { @@ -86,16 +87,13 @@ PIProtocol::PIProtocol(const PIString & config, const PIString & name, void * re if (sb.getValue("twoStopBits", false)) pp |= PISerial::TwoStopBits; type_send = PIProtocol::Serial; if (ser == 0) ser = new PISerial(dev, this, receiveEvent); + setSenderDevice(dev, (PISerial::Speed)ps); ser->setOutSpeed((PISerial::Speed)ps); ser->setParameters(pp); ser->setReadData(recHeaderPtr, recHeaderSize, recDataSize); - devSenderName = dev; } + setSenderFrequency(sb.getValue("frequency", -1.f)); - float fr = rb.getValue("frequency", 0.f, &ok); - if (ok) setExpectedFrequency(fr); - fr = sb.getValue("frequency", 0.f, &ok); - if (ok) setSenderFrequency(fr); headerPtr = (uchar * )recHeaderPtr; headerSize = recHeaderSize; dataPtr = (uchar * )recDataPtr; @@ -113,6 +111,7 @@ PIProtocol::PIProtocol(const PIString & config, const PIString & name, void * re PIProtocol::~PIProtocol() { + //cout << "prot " << protName << " delete\n"; delete diagTimer; delete sendTimer; if (packet != 0) delete packet; @@ -122,8 +121,9 @@ PIProtocol::~PIProtocol() { void PIProtocol::init() { - work = false; + work = new_mp_prot = false; ret_func = 0; + mp_owner = 0; net_diag = PIProtocol::Unknown; cur_pckt = 0; diagTimer = 0; @@ -131,19 +131,23 @@ void PIProtocol::init() { sendTimer = new PITimer(sendEvent, this); diagTimer = new PITimer(diagEvent, this); wrong_count = receive_count = send_count = 0; - send_freq = -1.f; - immediateFreq = integralFreq = exp_freq = 0.f; + immediateFreq = integralFreq = 0.f; headerPtr = dataPtr = sendDataPtr = 0; headerSize = dataSize = sendDataSize = 0; eth = 0; ser = 0; type_rec = type_send = PIProtocol::None; devSenderState = devReceiverState = "Unknown"; + devSenderName = devReceiverName = "no device"; } -void PIProtocol::setReceiverDevice(const PIString & device, PISerial::Speed speed) { - if (type_rec == PIProtocol::Serial) { +void PIProtocol::setReceiverDevice(const PIString & device, PISerial::Speed speed, bool force) { + if (force) { + type_rec = PIProtocol::Serial; + if (ser == 0) ser = new PISerial("", this, receiveEvent); + } + if (type_rec == PIProtocol::Serial && ser != 0) { ser->setDevice(device); ser->setSpeed(speed); devReceiverName = device; @@ -151,16 +155,25 @@ void PIProtocol::setReceiverDevice(const PIString & device, PISerial::Speed spee } -void PIProtocol::setReceiverDevice(const PIString & ip, int port) { - if (type_rec == PIProtocol::Ethernet) { +void PIProtocol::setReceiverAddress(const PIString & ip, int port, bool force) { + if (force) { + type_rec = PIProtocol::Ethernet; + if (eth == 0) eth = new PIEthernet("", 0, this, receiveEvent); + } + if (type_rec == PIProtocol::Ethernet && eth != 0) { eth->setReadAddress(ip, port); - devReceiverName = ip + ":" + PIString::fromNumber(port); + if (ip.trimmed().isEmpty()) devReceiverName = "no ip"; + else devReceiverName = ip + ":" + PIString::fromNumber(port); } } -void PIProtocol::setSenderDevice(const PIString & device, PISerial::Speed speed) { - if (type_send == PIProtocol::Serial) { +void PIProtocol::setSenderDevice(const PIString & device, PISerial::Speed speed, bool force) { + if (force) { + type_send = PIProtocol::Serial; + if (ser == 0) ser = new PISerial("", this, receiveEvent); + } + if (type_send == PIProtocol::Serial && ser != 0) { ser->setDevice(device); ser->setSpeed(speed); devSenderName = device; @@ -168,10 +181,15 @@ void PIProtocol::setSenderDevice(const PIString & device, PISerial::Speed speed) } -void PIProtocol::setSenderDevice(const PIString & ip, int port) { - if (type_send == PIProtocol::Ethernet) { - eth->setReadAddress(ip, port); - devSenderName = ip + ":" + PIString::fromNumber(port); +void PIProtocol::setSenderAddress(const PIString & ip, int port, bool force) { + if (force) { + type_send = PIProtocol::Ethernet; + if (eth == 0) eth = new PIEthernet("", 0, this, receiveEvent); + } + if (type_send == PIProtocol::Ethernet && eth != 0) { + eth->setSendAddress(ip, port); + if (ip.isEmpty()) devSenderName = "no ip"; + else devSenderName = ip + ":" + PIString::fromNumber(port); } } @@ -220,10 +238,12 @@ bool PIProtocol::receiveEvent(void * t, char * data, int size) { p->receive_count++; p->cur_pckt = 1; if (p->ret_func != 0) p->ret_func(p); + if (p->mp_owner != 0) PIMultiProtocolBase::receiveEvent(p->mp_owner, p, true, data, size); return true; } //p->unlock(); p->wrong_count++; + if (p->mp_owner != 0) PIMultiProtocolBase::receiveEvent(p->mp_owner, p, false, data, size); return false; } @@ -247,7 +267,7 @@ void PIProtocol::calc_diag() { pckt_cnt++; } else { packets[(int)last_packets.back()]--; - last_packets.pop_back(); + if (!last_packets.isEmpty()) last_packets.pop_back(); last_packets.push_front(cur_pckt); } packets[(int)cur_pckt]++; @@ -277,25 +297,21 @@ void PIProtocol::calc_freq() { void PIProtocol::check_state() { - if (type_send == PIProtocol::Serial) { - if (ser->initialized()) devSenderState = "Initialized"; - else devSenderState = "Uninitialized"; - return; - } - if (type_send == PIProtocol::Ethernet) { - if (eth->senderInitialized()) devSenderState = "Initialized"; - else devSenderState = "Uninitialized"; - return; - } if (type_rec == PIProtocol::Serial) { if (ser->initialized()) devReceiverState = "Initialized"; else devReceiverState = "Uninitialized"; - return; } if (type_rec == PIProtocol::Ethernet) { if (eth->receiverInitialized()) devReceiverState = "Initialized"; else devReceiverState = "Uninitialized"; - return; + } + if (type_send == PIProtocol::Serial) { + if (ser->initialized()) devSenderState = "Initialized"; + else devSenderState = "Uninitialized"; + } + if (type_send == PIProtocol::Ethernet) { + if (eth->senderInitialized()) devSenderState = "Initialized"; + else devSenderState = "Uninitialized"; } } @@ -303,10 +319,10 @@ void PIProtocol::check_state() { void PIProtocol::send(const void * data, int size) { if (data == 0 || size == 0) return; if (!aboutSend()) return; - if (type_rec == PIProtocol::Serial) + if (type_send == PIProtocol::Serial) if (ser->send((char * )data, size)) send_count++; - if (type_rec == PIProtocol::Ethernet) + if (type_send == PIProtocol::Ethernet) if (eth->send((char * )data, size)) send_count++; } @@ -318,10 +334,10 @@ void PIProtocol::send() { //unlock(); if (sendDataPtr == 0 || sendDataSize == 0) return; if (!aboutSend()) return; - if (type_rec == PIProtocol::Serial) + if (type_send == PIProtocol::Serial) if (ser->send((char * )sendDataPtr, sendDataSize)) send_count++; - if (type_rec == PIProtocol::Ethernet) + if (type_send == PIProtocol::Ethernet) if (eth->send((char * )sendDataPtr, sendDataSize)) send_count++; } diff --git a/piprotocol.h b/piprotocol.h index 7d2552a7..cedc34d2 100644 --- a/piprotocol.h +++ b/piprotocol.h @@ -7,14 +7,36 @@ #include "piconfig.h" #include "math.h" +class PIProtocol; + +class PIMultiProtocolBase +{ + friend class PIProtocol; +public: + PIMultiProtocolBase() {;} + ~PIMultiProtocolBase() {;} + +protected: + virtual void received(PIProtocol * prot, bool corrected, char * data, int size) {;} + +private: + static void receiveEvent(PIMultiProtocolBase * p, PIProtocol * prot, bool corrected, char * data, int size) {p->mutex_receive.lock(); p->received(prot, corrected, data, size); p->mutex_receive.unlock();} + + PIMutex mutex_receive; + +}; + typedef void (*ReceiveFunc)(void * ); class PIProtocol { + friend class PIMultiProtocolBase; + friend class PIMultiProtocol; enum Type {None, Serial, Ethernet}; enum Quality {Unknown = 1, Failure = 2, Bad = 3, Average = 4, Good = 5}; public: + PIProtocol() {init();} PIProtocol(const PIString & config, const PIString & name, void * recHeaderPtr = 0, int recHeaderSize = 0, void * recDataPtr = 0, int recDataSize = 0, void * sendDataPtr = 0, int sendDataSize = 0); // from config ~PIProtocol(); @@ -22,42 +44,44 @@ public: void startReceive(float exp_frequency = -1.f); // if "frequency = -1" used last passed value void stopReceive(); void setExpectedFrequency(float frequency); // for connection quality diagnostic - void setReceiverDevice(const PIString & device, PISerial::Speed speed); // for Serial - void setReceiverDevice(const PIString & ip, int port); // for Ethernet + void setReceiverDevice(const PIString & device, PISerial::Speed speed, bool force = false); // for Serial void setReceiverData(void * dataPtr, int dataSize) {this->dataPtr = (uchar * )dataPtr; this->dataSize = dataSize;} - void setReceiverAddress(const PIString & ip, int port) {if (type_send == PIProtocol::Ethernet && eth != 0) eth->setSendAddress(ip, port);} // for Ethernet + void setReceiverAddress(const PIString & ip, int port, bool force = false); // for Ethernet void setReceiverParameters(PIFlags parameters) {if (type_send == PIProtocol::Serial) ser->setParameters(parameters);} // for Serial void setReceiveSlot(ReceiveFunc slot) {ret_func = slot;} void startSend(float frequency = -1.f); // if "frequency = -1" used last passed value void stopSend() {sendTimer->stop();} void setSenderFrequency(float frequency) {send_freq = frequency;} - void setSenderDevice(const PIString & device, PISerial::Speed speed); // for Serial - void setSenderDevice(const PIString & ip, int port); // for Ethernet + void setSenderDevice(const PIString & device, PISerial::Speed speed, bool force = false); // for Serial void setSenderData(void * dataPtr, int dataSize) {sendDataPtr = (uchar * )dataPtr; sendDataSize = dataSize;} - void setSenderAddress(const PIString & ip, int port) {if (type_send == PIProtocol::Ethernet && eth != 0) eth->setSendAddress(ip, port);} // for Ethernet + void setSenderAddress(const PIString & ip, int port, bool force = false); // for Ethernet void setSenderParameters(PIFlags parameters) {if (type_send == PIProtocol::Serial) ser->setParameters(parameters);} // for Serial + void start() {startReceive(); startSend();} + void stop() {stopReceive(); stopSend();} void send(); void send(const void * data, int size); - float immediateFrequency() {return immediateFreq;} - float integralFrequency() {return integralFreq;} + void setName(const PIString & name) {protName = name;} + PIString name() const {return protName;} + float immediateFrequency() const {return immediateFreq;} + float integralFrequency() const {return integralFreq;} float * immediateFrequency_ptr() {return &immediateFreq;} float * integralFrequency_ptr() {return &integralFreq;} - ullong receiveCount() {return receive_count;} + ullong receiveCount() const {return receive_count;} ullong * receiveCount_ptr() {return &receive_count;} - ullong wrongCount() {return wrong_count;} + ullong wrongCount() const {return wrong_count;} ullong * wrongCount_ptr() {return &wrong_count;} - ullong sendCount() {return send_count;} + ullong sendCount() const {return send_count;} ullong * sendCount_ptr() {return &send_count;} - PIProtocol::Quality quality() {return net_diag;} // receive quality + PIProtocol::Quality quality() const {return net_diag;} // receive quality int * quality_ptr() {return (int * )&net_diag;} // receive quality pointer - PIString receiverDeviceName() {return devReceiverName;} - PIString senderDeviceName() {return devSenderName;} - PIString receiverDeviceState() {return devReceiverState;} + PIString receiverDeviceName() const {return devReceiverName;} + PIString senderDeviceName() const {cout << devSenderName << endl; return devSenderName;} + PIString receiverDeviceState() const {return devReceiverState;} PIString * receiverDeviceState_ptr() {return &devReceiverState;} - PIString senderDeviceState() {return devSenderState;} + PIString senderDeviceState() const {return devSenderState;} PIString * senderDeviceState_ptr() {return &devSenderState;} protected: @@ -93,19 +117,25 @@ private: static void sendEvent(void * e) {((PIProtocol * )e)->send();} static bool receiveEvent(void * t, char * data, int size); static void diagEvent(void * t); + + void setMultiProtocolOwner(PIMultiProtocolBase * mp) {mp_owner = mp;} + PIMultiProtocolBase * multiProtocolOwner() const {return mp_owner;} + ReceiveFunc ret_func; PITimer * diagTimer, * sendTimer; + PIMultiProtocolBase * mp_owner; PIProtocol::Type type_send, type_rec; PIProtocol::Quality net_diag; - deque last_freq; - deque last_packets; - PIString devReceiverName, devReceiverState, devSenderName, devSenderState; - bool work; + PIDeque last_freq; + PIDeque last_packets; + PIString protName, devReceiverName, devReceiverState, devSenderName, devSenderState; + bool work, new_mp_prot; float exp_freq, send_freq, immediateFreq, integralFreq, tf; int packets[2]; uint pckt_cnt, pckt_cnt_max; char * packet, cur_pckt; ullong wrong_count, receive_count, send_count; + }; #endif // PIPROTOCOL_H diff --git a/piserial.cpp b/piserial.cpp index d5639784..e7370f92 100644 --- a/piserial.cpp +++ b/piserial.cpp @@ -8,9 +8,8 @@ PISerial::PISerial(PIString name, void * data_, SerialFunc slot): PIThread() { fd = -1; dataSize = headerSize = 0; headerPtr = 0; + hbuffer = pbuffer = 0; ret_func = slot; - //buffer = new char[BUFFER_SIZE]; - //sbuffer = new char[BUFFER_SIZE]; #ifdef WINDOWS hCom = 0; #endif @@ -20,10 +19,6 @@ PISerial::PISerial(PIString name, void * data_, SerialFunc slot): PIThread() { PISerial::~PISerial() { terminate(); - /*if (buffer != 0) delete buffer; - buffer = 0; - if (sbuffer != 0) delete sbuffer; - sbuffer = 0;*/ } @@ -31,7 +26,7 @@ void PISerial::terminate() { if (!initialized()) return; if (isRunning()) { stop(); - pthread_cancel(thread); + PIThread::terminate(); } #ifdef WINDOWS if (fd != -1) { @@ -174,8 +169,14 @@ void PISerial::run() { void PISerial::end() { terminate(); - delete pbuffer; - delete hbuffer; + if (pbuffer != 0) { + delete pbuffer; + pbuffer = 0; + } + if (hbuffer != 0) { + delete hbuffer; + hbuffer = 0; + } } @@ -206,7 +207,10 @@ bool PISerial::init() { desc.DCBlength = sizeof(desc); desc.BaudRate = convertSpeed(ispeed); desc.ByteSize = 8; - desc.fParity = params[PISerial::IgnoreParityControl] ? 0 : 1; + if (params[PISerial::ParityControl]) { + desc.fParity = 1; + desc.Parity = params[PISerial::ParityOdd] ? 1 : 2; + } desc.StopBits = params[PISerial::TwoStopBits] ? TWOSTOPBITS : ONESTOPBIT; if (SetCommState(hCom, &desc) == -1) { cout << "[PISerial] Unable to set comm state for \"" << devName << "\"" << endl; @@ -227,10 +231,10 @@ bool PISerial::init() { desc.c_iflag = desc.c_oflag = desc.c_lflag = 0; desc.c_cflag = CLOCAL | CREAD | CSIZE; if (params[PISerial::TwoStopBits]) desc.c_cflag |= CSTOPB; - if (!params[PISerial::ParityControl]) { + if (params[PISerial::ParityControl]) { desc.c_iflag |= INPCK; desc.c_cflag |= PARENB; - if (!params[PISerial::ParityOdd]) desc.c_cflag |= PARODD; + if (params[PISerial::ParityOdd]) desc.c_cflag |= PARODD; } desc.c_cc[VMIN] = 0; desc.c_cc[VTIME] = 1; diff --git a/pisignals.cpp b/pisignals.cpp new file mode 100644 index 00000000..79396579 --- /dev/null +++ b/pisignals.cpp @@ -0,0 +1,92 @@ +#include "pisignals.h" + +PISignals::SignalEvent PISignals::ret_func; + + +void PISignals::grabSignals(PIFlags signals_) { + if (signals_[PISignals::Interrupt]) signal(signalCode(PISignals::Interrupt), PISignals::signal_event); + if (signals_[PISignals::Illegal]) signal(signalCode(PISignals::Illegal), PISignals::signal_event); + if (signals_[PISignals::Abort]) signal(signalCode(PISignals::Abort), PISignals::signal_event); + if (signals_[PISignals::FPE]) signal(signalCode(PISignals::FPE), PISignals::signal_event); + if (signals_[PISignals::SegFault]) signal(signalCode(PISignals::SegFault), PISignals::signal_event); + if (signals_[PISignals::Termination]) signal(signalCode(PISignals::Termination), PISignals::signal_event); +#ifndef WINDOWS + if (signals_[PISignals::Hangup]) signal(signalCode(PISignals::Hangup), PISignals::signal_event); + if (signals_[PISignals::Quit]) signal(signalCode(PISignals::Quit), PISignals::signal_event); + if (signals_[PISignals::Kill]) signal(signalCode(PISignals::Kill), PISignals::signal_event); + if (signals_[PISignals::BrokenPipe]) signal(signalCode(PISignals::BrokenPipe), PISignals::signal_event); + if (signals_[PISignals::Timer]) signal(signalCode(PISignals::Timer), PISignals::signal_event); + if (signals_[PISignals::UserDefined1]) signal(signalCode(PISignals::UserDefined1), PISignals::signal_event); + if (signals_[PISignals::UserDefined2]) signal(signalCode(PISignals::UserDefined2), PISignals::signal_event); + if (signals_[PISignals::ChildStopped]) signal(signalCode(PISignals::ChildStopped), PISignals::signal_event); + if (signals_[PISignals::Continue]) signal(signalCode(PISignals::Continue), PISignals::signal_event); + if (signals_[PISignals::StopProcess]) signal(signalCode(PISignals::StopProcess), PISignals::signal_event); + if (signals_[PISignals::StopTTY]) signal(signalCode(PISignals::StopTTY), PISignals::signal_event); + if (signals_[PISignals::StopTTYInput]) signal(signalCode(PISignals::StopTTYInput), PISignals::signal_event); + if (signals_[PISignals::StopTTYOutput]) signal(signalCode(PISignals::StopTTYOutput), PISignals::signal_event); +#endif +} + + +int PISignals::signalCode(PISignals::Signal signal) { + switch (signal) { + case PISignals::Interrupt: return SIGINT; + case PISignals::Illegal: return SIGILL; + case PISignals::Abort: return SIGABRT; + case PISignals::FPE: return SIGFPE; + case PISignals::SegFault: return SIGSEGV; + case PISignals::Termination: return SIGTERM; +#ifndef WINDOWS + case PISignals::Hangup: return SIGHUP; + case PISignals::Quit: return SIGQUIT; + case PISignals::Kill: return SIGKILL; + case PISignals::BrokenPipe: return SIGPIPE; + case PISignals::Timer: return SIGALRM; + case PISignals::UserDefined1: return SIGUSR1; + case PISignals::UserDefined2: return SIGUSR2; + case PISignals::ChildStopped: return SIGCHLD; + case PISignals::Continue: return SIGCONT; + case PISignals::StopProcess: return SIGSTOP; + case PISignals::StopTTY: return SIGTSTP; + case PISignals::StopTTYInput: return SIGTTIN; + case PISignals::StopTTYOutput:return SIGTTOU; +#endif + default:; + } + return 0; +} + + +PISignals::Signal PISignals::signalFromCode(int signal) { + switch (signal) { + case SIGINT: return PISignals::Interrupt; + case SIGILL: return PISignals::Illegal; + case SIGABRT: return PISignals::Abort; + case SIGFPE: return PISignals::FPE; + case SIGSEGV: return PISignals::SegFault; + case SIGTERM: return PISignals::Termination; +#ifndef WINDOWS + case SIGHUP: return PISignals::Hangup; + case SIGQUIT: return PISignals::Quit; + case SIGKILL: return PISignals::Kill; + case SIGPIPE: return PISignals::BrokenPipe; + case SIGALRM: return PISignals::Timer; + case SIGUSR1: return PISignals::UserDefined1; + case SIGUSR2: return PISignals::UserDefined2; + case SIGCHLD: return PISignals::ChildStopped; + case SIGCONT: return PISignals::Continue; + case SIGSTOP: return PISignals::StopProcess; + case SIGTSTP: return PISignals::StopTTY; + case SIGTTIN: return PISignals::StopTTYInput; + case SIGTTOU: return PISignals::StopTTYOutput; +#endif + default:; + } + return PISignals::Termination; +} + + +void PISignals::signal_event(int signal) { + if (PISignals::ret_func == 0) return; + PISignals::ret_func(PISignals::signalFromCode(signal)); +} diff --git a/pisignals.h b/pisignals.h new file mode 100644 index 00000000..e216f981 --- /dev/null +++ b/pisignals.h @@ -0,0 +1,54 @@ +#ifndef PISIGNALS_H +#define PISIGNALS_H + +#include "picontainers.h" +#include + +class PISignals +{ +public: + enum Signal { + Interrupt = 0x01, // Term Interrupt from keyboard + Illegal = 0x02, // Core Illegal Instruction + Abort = 0x04, // Core Abort signal from abort + FPE = 0x08, // Core Floating point exception + SegFault = 0x10, // Core Invalid memory reference + Termination = 0x20, // Term Termination signal +#ifndef WINDOWS + Hangup = 0x40, // Term Hangup detected on controlling terminal or death of controlling process + Quit = 0x80, // Core Quit from keyboard + Kill = 0x100, // Term Kill signal + BrokenPipe = 0x200, // Term Broken pipe: write to pipe with no readers + Timer = 0x400, // Term Timer signal from alarm + UserDefined1 = 0x800, // Term User-defined signal 1 + UserDefined2 = 0x1000, // Term User-defined signal 2 + ChildStopped = 0x2000, // Ign Child stopped or terminated + Continue = 0x4000, // Cont Continue if stopped + StopProcess = 0x8000, // Stop Stop process + StopTTY = 0x10000, // Stop Stop typed at tty + StopTTYInput = 0x20000, // Stop tty input for background process + StopTTYOutput = 0x40000, // Stop tty output for background process +#endif + All = 0xFFFFF + }; + + typedef void (*SignalEvent)(PISignals::Signal); + + static void setSlot(SignalEvent slot) {ret_func = slot;} + static void grabSignals(PIFlags signals_); + static void raiseSignal(PISignals::Signal signal) {raise(signalCode(signal));} + +private: + PISignals() {ret_func = 0;} + ~PISignals() {} + + static int signalCode(PISignals::Signal signal); + static PISignals::Signal signalFromCode(int signal); + static void signal_event(int signal); + + static SignalEvent ret_func; + +}; + + +#endif // PISIGNALS_H diff --git a/pistring.cpp b/pistring.cpp index 6b16db2a..36b9c755 100644 --- a/pistring.cpp +++ b/pistring.cpp @@ -5,11 +5,12 @@ void PIString::appendFromChars(const char * c, int s) { int sz; wchar_t wc; for (int i = 0; i < s; ++i) { - if (isascii(c[i])) { + if (/*isascii(c[i])*/c[i] >= 0) { push_back(PIChar(c[i])); continue; } sz = mbtowc(&wc, &c[i], 4); + //cout << sz << endl; switch (sz) { case 4: push_back(PIChar(*(int*)&(c[i]))); @@ -40,6 +41,34 @@ PIString & PIString::operator +=(const char * str) { } +PIString & PIString::operator +=(const wchar_t * str) { + //cout << "wc" << endl; + int l = 0, sz; + char * c = new char[MB_CUR_MAX]; + while (str[l] != 0) ++l; + for (int i = 0; i < l; ++i) { + sz = wctomb(c, str[i]); + switch (sz) { + case 4: + push_back(PIChar(*(int*)c)); + continue; + case 3: + push_back(PIChar(*(int*)c)); + back().ch &= 0xFFFFFF; + continue; + case 2: + push_back(PIChar(*(short * )c)); + continue; + default: + push_back(PIChar(c[0])); + break; + } + } + delete c; + return *this; +} + + PIString & PIString::operator +=(const wstring & str) { uint l = str.size(); for (uint i = 0; i < l; ++i) push_back(str[i]); @@ -285,18 +314,17 @@ char PIString::toChar() const { short PIString::toShort() const { - PIString s(trimmed().toNativeDecimalPoints()); - int i; + PIString s(trimmed().toLowerCase().toNativeDecimalPoints()); short v; - if (s.left(2) == "0x") {sscanf(s.data(), "%x", &i); return (short)i;} - if (s.left(1) == "0") {sscanf(s.data(), "%o", &i); return (short)i;} + if (s.left(2) == "0x") {sscanf(s.data(), "%hx", &v); return v;} + if (s.left(1) == "0") {sscanf(s.data(), "%ho", &v); return v;} sscanf(s.data(), "%hd", &v); return v; } int PIString::toInt() const { - PIString s(trimmed().toNativeDecimalPoints()); + PIString s(trimmed().toLowerCase().toNativeDecimalPoints()); int v; if (s.left(2) == "0x") {sscanf(s.data(), "%x", &v); return v;} if (s.left(1) == "0") {sscanf(s.data(), "%o", &v); return v;} @@ -306,23 +334,21 @@ int PIString::toInt() const { long PIString::toLong() const { - PIString s(trimmed().toNativeDecimalPoints()); - int i; + PIString s(trimmed().toLowerCase().toNativeDecimalPoints()); long v; - if (s.left(2) == "0x") {sscanf(s.data(), "%x", &i); return (long)i;} - if (s.left(1) == "0") {sscanf(s.data(), "%o", &i); return (long)i;} + if (s.left(2) == "0x") {sscanf(s.data(), "%lx", &v); return v;} + if (s.left(1) == "0") {sscanf(s.data(), "%lo", &v); return v;} sscanf(s.data(), "%ld", &v); return v; } llong PIString::toLLong() const { - PIString s(trimmed().toNativeDecimalPoints()); - int i; + PIString s(trimmed().toLowerCase().toNativeDecimalPoints()); llong v; - if (s.left(2) == "0x") {sscanf(s.data(), "%x", &i); return (llong)i;} - if (s.left(1) == "0") {sscanf(s.data(), "%o", &i); return (llong)i;} - sscanf(s.data(), "%Ld", &v); + if (s.left(2) == "0x") {sscanf(s.data(), "%llx", &v); return v;} + if (s.left(1) == "0") {sscanf(s.data(), "%llo", &v); return v;} + sscanf(s.data(), "%lld", &v); return v; } diff --git a/pistring.h b/pistring.h index 557ac732..ccff777e 100644 --- a/pistring.h +++ b/pistring.h @@ -14,6 +14,7 @@ public: //inline PIString & operator +=(const char c) {push_back(c); return *this;} PIString & operator +=(const PIChar c) {push_back(c); return *this;} PIString & operator +=(const char * str); + PIString & operator +=(const wchar_t * str); PIString & operator +=(const string & str) {appendFromChars(str.c_str(), str.length()); return *this;} PIString & operator +=(const PIByteArray & ba) {appendFromChars((const char * )ba.data(), ba.size_s()); return *this;} PIString & operator +=(const PIString & str); @@ -22,21 +23,18 @@ public: //PIString(const char c) {*this += c;} PIString(const PIChar c) {*this += c;} PIString(const char * str) {*this += str;} + PIString(const wchar_t * str) {*this += str;} PIString(const string & str) {*this += str;} PIString(const wstring & str) {*this += str;} - PIString(const PIString & str) {*this += str;} PIString(const PIByteArray & ba) {*this += ba;} PIString(const char * str, const int len) {*this += string(str, len);} PIString(const int len, const char c) {for (int i = 0; i < len; ++i) push_back(c);} PIString(const int len, const PIChar & c) {for (int i = 0; i < len; ++i) push_back(c);} + PIString(const PIString & str) {*this += str;} operator const char*() {return data();} operator const string() {if (size() == 0) return string(); string s; for (int i = 0; i < length(); ++i) s.push_back(at(i).toAscii()); return s;} -#ifdef WINDOWS - PIChar operator [](const int pos) const __attribute__ ((optimize(0))) {return at(pos);} -#else PIChar operator [](const int pos) const {return at(pos);} -#endif PIChar & operator [](const int pos) {return at(pos);} bool operator ==(const PIString & str) const; @@ -79,6 +77,7 @@ public: //inline PIString & operator <<(const char c) {*this += c; return *this;} PIString & operator <<(const PIChar c) {*this += c; return *this;} PIString & operator <<(const char * str) {*this += str; return *this;} + PIString & operator <<(const wchar_t * str) {*this += str; return *this;} PIString & operator <<(const string & str) {*this += str; return *this;} PIString & operator <<(const int & num) {*this += PIString::fromNumber(num); return *this;} PIString & operator <<(const short & num) {*this += PIString::fromNumber(num); return *this;} @@ -107,10 +106,10 @@ public: PIString & expandRightTo(const int len, const PIChar & c) {if (len > length()) resize(len, c); return *this;} PIString & expandLeftTo(const int len, const PIChar & c) {if (len > length()) insert(0, PIString(len - length(), c)); return *this;} - const char * data() {std_string = convertToStd(); return std_string.c_str();} + const char * data() {return convertToStd().c_str();} const string stdString() const {return convertToStd();} wstring stdWString() const {return convertToWString();} - PIByteArray toByteArray() {convertToStd(); return PIByteArray(std_string.c_str(), std_string.length());} + PIByteArray toByteArray() {string s(convertToStd()); return PIByteArray(s.c_str(), s.length());} PIStringList split(const PIString & delim) const; PIString toUpperCase() const; @@ -162,7 +161,7 @@ private: string convertToStd() const; wstring convertToWString() const {wstring s; for (int i = 0; i < length(); ++i) s.push_back(at(i).toWChar()); return s;} - string std_string; + //string std_string; }; @@ -198,6 +197,7 @@ public: uint contentSize() {uint s = 0; for (uint i = 0; i < size(); ++i) s += at(i).size(); return s;} PIStringList & operator <<(const PIString & str) {push_back(str); return *this;} + PIStringList & operator <<(const PIStringList & sl) {piForeachC (PIString & i, sl) push_back(i); return *this;} //inline PIStringList & operator <<(const char c) {push_back(PIString(c)); return *this;} PIStringList & operator <<(const char * str) {push_back(PIString(str)); return *this;} PIStringList & operator <<(const string & str) {push_back(str); return *this;} diff --git a/pithread.cpp b/pithread.cpp index ddd04853..fe3e61e1 100644 --- a/pithread.cpp +++ b/pithread.cpp @@ -8,38 +8,73 @@ PIThread::PIThread(bool startNow, int timer_delay) { if (startNow) start(timer_delay); } +#ifndef WINDOWS +#else +#endif PIThread::~PIThread() { if (!running) return; +#ifndef WINDOWS pthread_cancel(thread); +#else + CloseHandle(thread); +#endif } bool PIThread::start(int timer_delay) { - pthread_attr_t attr; terminating = running = false; timer = timer_delay; +#ifndef WINDOWS + pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setschedparam(&attr, &sparam); if (pthread_create(&thread, &attr, thread_function, this) == 0) { running = true; return true; } +#else + thread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)thread_function, this, 0, 0); + if (thread == 0) + return false; + setPriority(priority_); +#endif return false; } bool PIThread::startOnce() { - pthread_attr_t attr; terminating = running = false; +#ifndef WINDOWS + pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setschedparam(&attr, &sparam); if (pthread_create(&thread, &attr, thread_function_once, this) == 0) return true; +#else + thread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)thread_function_once, this, 0, 0); + if (thread == 0) + return false; + setPriority(priority_); +#endif return false; } +void PIThread::terminate(bool hard) { + if (thread == 0) return; + running = false; +#ifndef WINDOWS + if (hard) kill(thread, SIGKILL); + else pthread_cancel(thread); +#else + CloseHandle(thread); +#endif + thread = 0; + end(); +} + + void * PIThread::thread_function(void * t) { PIThread * ct = (PIThread * )t; ct->running = true; @@ -53,7 +88,11 @@ void * PIThread::thread_function(void * t) { ct->end(); ct->running = false; //cout << "thread " << t << " exiting ... " << endl; +#ifndef WINDOWS pthread_exit(0); +#else + ExitThread(0); +#endif return 0; } @@ -68,21 +107,30 @@ void * PIThread::thread_function_once(void * t) { ct->end(); ct->running = false; //cout << "thread " << t << " exiting ... " << endl; +#ifndef WINDOWS pthread_exit(0); +#else + ExitThread(0); +#endif return 0; } void PIThread::setPriority(PIThread::Priority prior) { priority_ = prior; -#ifndef LINUX +#ifndef WINDOWS +# ifndef LINUX sparam.sched_priority = (int)priority_; -#else +# else sparam.__sched_priority = (int)priority_; -#endif +# endif if (!running) return; pthread_getschedparam(thread, &policy, &sparam); pthread_setschedparam(thread, policy, &sparam); +#else + if (!running) return; + SetThreadPriority(thread, -(int)priority_); +#endif } diff --git a/pithread.h b/pithread.h index e161b8ed..91b02cbc 100644 --- a/pithread.h +++ b/pithread.h @@ -1,7 +1,6 @@ #ifndef PITHREAD_H #define PITHREAD_H -#include #include #include "pimutex.h" @@ -33,7 +32,7 @@ public: bool start(int timer_delay = -1); bool startOnce(); void stop(bool wait = false) {terminating = true; if (wait) waitForFinish();} - void terminate() {kill(thread, SIGKILL); end(); running = false;} + void terminate(bool hard = false); void setPriority(PIThread::Priority prior); PIThread::Priority priority() const {return priority_;} bool isRunning() const {return running;} @@ -55,10 +54,14 @@ protected: volatile bool terminating, running, lockRun; int timer, policy; - pthread_t thread; PIMutex mutex_; - sched_param sparam; PIThread::Priority priority_; +#ifndef WINDOWS + pthread_t thread; + sched_param sparam; +#else + void * thread; +#endif }; diff --git a/pitimer.h b/pitimer.h index eaf866ed..0e76a5f9 100644 --- a/pitimer.h +++ b/pitimer.h @@ -28,6 +28,9 @@ class PITimer public: PITimer(TimerEvent slot = 0, void * data = 0); ~PITimer() {stop();} + + void setData(void * data_) {data = data_;} + void setSlot(TimerEvent slot_) {ret_func = slot_;} #ifdef WINDOWS void reset() {t_st = GetCurrentTime();} #else diff --git a/protocols.conf b/protocols.conf new file mode 100644 index 00000000..6c81b8a2 --- /dev/null +++ b/protocols.conf @@ -0,0 +1,52 @@ +gas.receiver.ip = 127.0.0.1 +gas.receiver.port = 0x2401 +gas.receiver.frequency = 105 +gas.sender.ip = 127.0.0.1 +gas.sender.port = 0x1001 +gas.sender.frequency = 10 +gas.writeHistory = false + +mcp1.receiver.ip = 127.0.0.1 +mcp1.receiver.port = 4012 +mcp1.receiver.frequency = 20 +mcp1.sender.ip = 192.168.0.190 +mcp1.sender.port = 4013 +mcp1.sender.frequency = 20 +mcp1.writeHistory = false + +#slk.receiver.device = /dev/ttyS0 +slk.receiver.speed = 19200 +slk.receiver.parity = false +slk.receiver.twoStopBits = false +slk.receiver.frequency = 10 +slk.sender.frequency = 10 +slk.writeHistory = false + +#ts.receiver.device = /dev/ttyS0 +#ts.receiver.speed = 57600 +#ts.receiver.parity = false +#ts.receiver.twoStopBits = false +ts.receiver.ip = 192.168.0.190 +ts.receiver.port = 4023 +ts.receiver.frequency = 23 +ts.sender.ip = 192.168.0.175 +ts.sender.port = 4023 +#ts.sender.frequency = 23 +ts.writeHistory = false +ts_mcp1.receiver.ip = 192.168.0.190 +ts_mcp1.receiver.port = 4022 +ts_mcp1.sender.ip = 192.168.0.175 +ts_mcp1.sender.port = 4022 + +r.mv2.receiver.ip = 127.0.0.2 +r.mv2.receiver.port = 3003 +r.mv2.receiver.frequency = 20 +r.mv2.sender.ip = 127.0.0.1 +r.mv2.sender.port = 3003 +r.mv2.sender.frequency = 20 +r.mv1.receiver.ip = 127.0.0.4 +r.mv1.receiver.port = 3003 +r.mv1.receiver.frequency = 20 +r.mv1.sender.ip = 127.0.0.3 +r.mv1.sender.port = 3003 +r.mv1.sender.frequency = 20 diff --git a/Описание.odt b/Описание.odt new file mode 100644 index 0000000000000000000000000000000000000000..7d6880f3310fbe71dfe1ee0eb65d8b66c37f31e5 GIT binary patch literal 16315 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