pax_global_header00006660000000000000000000000064134112334340014510gustar00rootroot0000000000000052 comment=ec6a89271472aa7e45cfb72d483fd8cfce0210ac actor-framework-0.16.3/000077500000000000000000000000001341123343400147025ustar00rootroot00000000000000actor-framework-0.16.3/.clang-format000066400000000000000000000021751341123343400172620ustar00rootroot00000000000000--- AccessModifierOffset: -2 AlignEscapedNewlinesLeft: false AlignTrailingComments: true AllowAllParametersOfDeclarationOnNextLine: false AllowShortIfStatementsOnASingleLine: false AllowShortLoopsOnASingleLine: false AllowShortFunctionsOnASingleLine: false AlwaysBreakBeforeMultilineStrings: true AlwaysBreakTemplateDeclarations: true BinPackParameters: true BreakBeforeBinaryOperators: NonAssignment BreakBeforeBraces: Attach BreakBeforeTernaryOperators: false ColumnLimit: 80 ConstructorInitializerAllOnOneLineOrOnePerLine: true ConstructorInitializerIndentWidth: 4 ContinuationIndentWidth: 2 Cpp11BracedListStyle: true IndentCaseLabels: true IndentWidth: 2 MaxEmptyLinesToKeep: 1 NamespaceIndentation: None # Force pointers to the type DerivePointerAlignment: false PointerAlignment: Left # Put space after = and after control statements SpaceBeforeAssignmentOperators: true SpaceBeforeParens: ControlStatements SpaceInEmptyParentheses: false SpacesBeforeTrailingComments: 1 SpacesInAngles: false SpacesInCStyleCastParentheses: false SpacesInParentheses: false Standard: Cpp11 UseTab: Never BreakConstructorInitializersBeforeComma: false ... actor-framework-0.16.3/.clang-tidy000066400000000000000000000024171341123343400167420ustar00rootroot00000000000000--- Checks: 'clang-diagnostic-*,clang-analyzer-*,-clang-analyzer-alpha*,modernize-*,performance-*,readability-*,-readability-braces-around-statements,-readability-named-parameter' WarningsAsErrors: '' HeaderFilterRegex: '/caf/' AnalyzeTemporaryDtors: false CheckOptions: - key: cert-oop11-cpp.UseCERTSemantics value: '1' - key: google-readability-braces-around-statements.ShortStatementLines value: '1' - key: google-readability-function-size.StatementThreshold value: '800' - key: google-readability-namespace-comments.ShortNamespaceLines value: '10' - key: google-readability-namespace-comments.SpacesBeforeComments value: '2' - key: modernize-loop-convert.MaxCopySize value: '16' - key: modernize-loop-convert.MinConfidence value: reasonable - key: modernize-loop-convert.NamingStyle value: CamelCase - key: modernize-pass-by-value.IncludeStyle value: llvm - key: modernize-replace-auto-ptr.IncludeStyle value: llvm - key: modernize-use-nullptr.NullMacros value: 'NULL' ... actor-framework-0.16.3/.cppcheck-suppressions000066400000000000000000000051701341123343400212410ustar00rootroot00000000000000// having an explicit constructor for attachable would // make it harder to use and its a library internal anyways noExplicitConstructor:libcaf_core/caf/attachable.hpp // cppcheck complains about padding1 and padding2 not // being initialized, which is silly (never used anywhere) uninitMemberVar:libcaf_io/caf/io/basp/header.hpp // converting raw pointers to intrusive pointers is // a common operation (e.g. getting a smart pointer to self) noExplicitConstructor:libcaf_core/caf/intrusive_ptr.hpp noExplicitConstructor:libcaf_core/caf/weak_intrusive_ptr.hpp // cppcheck complains about `node_id(const invalid_node_id_t&)`, // which must not be explicit because `invalid_node_id_t` would // be completely useless otherwise, the same is true for // - `message_id(invalid_message_id_t)` noExplicitConstructor:libcaf_core/caf/node_id.hpp noExplicitConstructor:libcaf_core/caf/message_id.hpp // the ctor `duration(std::chrono::duration d)` // is not explicit on purpose noExplicitConstructor:libcaf_core/caf/duration.hpp // making this explicit only makes API worse noExplicitConstructor:libcaf_core/caf/detail/scope_guard.hpp // `operator=(const ref_counted&)` does not assign `rc_` // on purpose because this would corrupt reference counting operatorEqVarError:libcaf_core/src/ref_counted.cpp // cppcheck complains about not initializing the pad members uninitMemberVar:libcaf_core/caf/detail/double_ended_queue.hpp // making the policy functions static is technically possible, // but conceptionally questionable functionStatic:libcaf_core/caf/policy/work_stealing.hpp // 9 false positives *:libcaf_core/caf/optional.hpp // in theory always true, but the unit test still needs to check knownConditionTrueFalse:libcaf_core/test/optional.cpp // ignore warnings from any 3rd party module *:*/third_party/* // 6 false positives *:libcaf_core/caf/detail/limited_vector.hpp // `test_struct::test_value` is unused since this file tests `announce` unusedStructMember:libcaf_io/test/uniform_type.cpp // `exit_reason::as_string` is unused in this .cpp file, but part of the API, // same is true for other falsely reported unused functions unusedFunction:libcaf_core/src/exit_reason.cpp unusedFunction:libcaf_core/src/shared_spinlock.cpp unusedFunction:libcaf_io/src/interfaces.cpp unusedFunction:libcaf_io/src/max_msg_size.cpp // making only some overloads of `abstract_uniform_type_info::eq` // static fails on MSVC functionStatic:bcaf_core/caf/abstract_uniform_type_info.hpp // functions are used in a macro in opencl/smart_ptr.hpp unusedFunction:libcaf_opencl/src/global.cpp // suppress false positives unusedStructMember:libcaf_core/test/serialization.cpp actor-framework-0.16.3/.gitignore000066400000000000000000000003261341123343400166730ustar00rootroot00000000000000*.DS_Store Doxyfile html/ build/* cli_build/* build-clang/* build-gcc/* Makefile bin/* lib/* manual *.swp bii/* .idea/ .ycm_extra_conf.pyc blog_release_note.md github_release_note.md .make-release-steps.bash *.swo actor-framework-0.16.3/.gitmodules000066400000000000000000000002061341123343400170550ustar00rootroot00000000000000[submodule "libcaf_python/third_party/pybind"] path = libcaf_python/third_party/pybind url = https://github.com/pybind/pybind11.git actor-framework-0.16.3/CMakeLists.txt000066400000000000000000000665001341123343400174510ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8.12) project(caf C CXX) include(CheckCSourceCompiles) include(CheckCSourceRuns) # Be nice to VIM users and Clang tools. set(CMAKE_EXPORT_COMPILE_COMMANDS 1) # Silence policy CMP0042 warning by enabling RPATH explicitly. if(APPLE AND NOT DEFINED CMAKE_MACOSX_RPATH) set(CMAKE_MACOSX_RPATH true) endif() # Shared libs are currently not supported on Windows. if(WIN32 AND NOT CAF_BUILD_STATIC_ONLY) message(STATUS "CAF currently only supports static-only builds on Windows") set(CAF_BUILD_STATIC_ONLY yes) endif() if(CAF_BUILD_STATIC_RUNTIME) set(flags_configs CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_C_FLAGS_MINSIZEREL ) foreach(flags ${flags_configs}) if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(NOT ${flags} MATCHES "-static-libstdc\\+\\+") set(${flags} "${${flags}} -static-libstdc++") endif() if(NOT ${flags} MATCHES "-static-libgcc") set(${flags} "${${flags}} -static-libgcc") endif() elseif(MSVC) if(${flags} MATCHES "/MD") string(REGEX REPLACE "/MD" "/MT" ${flags} "${${flags}}") endif() endif() endforeach() else() set(CAF_BUILD_STATIC_RUNTIME no) endif() # add helper target that simplifies re-running configure add_custom_target(configure COMMAND ${CMAKE_CURRENT_BINARY_DIR}/config.status) ################################################################################ # utility functions # ################################################################################ # Appends `str` to the variable named `var` with a whitespace as separator. # Suppresses a leading whitespace if the variable is empty and does nothing if # `str` is empty. function(build_string var str) if(NOT str STREQUAL "") if("${${var}}" STREQUAL "") set("${var}" "${str}" PARENT_SCOPE) else() set("${var}" "${${var}} ${str}" PARENT_SCOPE) endif() endif() endfunction(build_string) # Forces `var` to 'no' if the content of the variables evaluates to false. function(pretty_no var) if(NOT "${${var}}") set("${var}" no PARENT_SCOPE) endif() endfunction(pretty_no) # Forces `var` to 'yes' if the content of the variables evaluates to false. function(pretty_yes var) if("${${var}}") set("${var}" yes PARENT_SCOPE) endif() endfunction(pretty_yes) ################################################################################ # set prefix paths if available # ################################################################################ build_string("CMAKE_PREFIX_PATH" "${CAF_QT_PREFIX_PATH}") ################################################################################ # enable ccache if required by user # ################################################################################ if(CAF_USE_CCACHE) find_program(CCACHE_PROGRAM ccache) if(CCACHE_PROGRAM) message(STATUS "Using ccache command: ${CCACHE_PROGRAM}") set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") else() message(STATUS "Unable to find ccache") endif() endif(CAF_USE_CCACHE) ################################################################################ # make sure config parameters are printed with yes or no in summary # ################################################################################ pretty_yes("CAF_FORCE_NO_EXCEPTIONS") pretty_no("CAF_ENABLE_RUNTIME_CHECKS") pretty_no("CAF_NO_MEM_MANAGEMENT") pretty_no("CAF_NO_EXCEPTIONS") pretty_no("CAF_BUILD_STATIC_ONLY") pretty_no("CAF_BUILD_STATIC") pretty_no("CAF_NO_OPENCL") pretty_no("CAF_NO_OPENSSL") pretty_no("CAF_NO_PYTHON") pretty_no("CAF_NO_TOOLS") pretty_no("CAF_NO_SUMMARY") if(NOT CAF_NO_IO) set(CAF_NO_IO no) else() set(CAF_NO_TOOLS yes) set(CAF_NO_PYTHON yes) endif() ################################################################################ # get version of CAF # ################################################################################ # read content of config.hpp file(READ "libcaf_core/caf/config.hpp" CONFIG_HPP) # get line containing the version string(REGEX MATCH "#define CAF_VERSION [0-9]+" VERSION_LINE "${CONFIG_HPP}") # extract version number from line string(REGEX MATCH "[0-9]+" VERSION_INT "${VERSION_LINE}") # calculate major, minor, and patch version math(EXPR CAF_VERSION_MAJOR "${VERSION_INT} / 10000") math(EXPR CAF_VERSION_MINOR "( ${VERSION_INT} / 100) % 100") math(EXPR CAF_VERSION_PATCH "${VERSION_INT} % 100") # create full version string set(CAF_VERSION "${CAF_VERSION_MAJOR}.${CAF_VERSION_MINOR}.${CAF_VERSION_PATCH}") ################################################################################ # set output paths for binaries and libraries if not provided by the user # ################################################################################ # prohibit in-source builds if(CMAKE_CURRENT_SOURCE_DIR STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") message(FATAL_ERROR "In-source builds are not allowed. Please use " "./configure to choose a build directory and " "initialize the build configuration.") endif() # set module path appropriately set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") # set binary output path if not defined by user if(EXECUTABLE_OUTPUT_PATH STREQUAL "") set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/bin") endif() # set library output path if not defined by user, but always set # library output path to binary output path for Xcode projects if(CMAKE_GENERATOR STREQUAL "Xcode") set(LIBRARY_OUTPUT_PATH "${EXECUTABLE_OUTPUT_PATH}") elseif(LIBRARY_OUTPUT_PATH STREQUAL "") set(LIBRARY_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/lib") endif() ################################################################################ # compiler setup # ################################################################################ # check for g++ >= 4.8 or clang++ > = 3.2 if(NOT WIN32 AND NOT CAF_NO_COMPILER_CHECK AND NOT CMAKE_CROSSCOMPILING) try_run(ProgramResult CompilationSucceeded "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/get_compiler_version.cpp" RUN_OUTPUT_VARIABLE CompilerVersion) if(NOT CompilationSucceeded OR NOT ProgramResult EQUAL 0) message(FATAL_ERROR "Cannot determine compiler version") elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU") if(CompilerVersion VERSION_GREATER 4.7) message(STATUS "Found g++ version ${CompilerVersion}") else() message(FATAL_ERROR "g++ >= 4.8 required (found: ${CompilerVersion})") endif() elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(CompilerVersion VERSION_GREATER 3.1) message(STATUS "Found clang++ version ${CompilerVersion}") else() message(FATAL_ERROR "clang++ >= 3.2 required (found: ${CompilerVersion})") endif() else() message(FATAL_ERROR "Your C++ compiler does not support C++11 " "or is not supported") endif() endif() # set optional build flags # increase max. template depth on GCC and Clang if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") build_string("EXTRA_FLAGS" "-ftemplate-depth=512 -ftemplate-backtrace-limit=0") endif() # explicitly disable obnoxious GCC warnings if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") build_string("EXTRA_FLAGS" "-Wno-missing-field-initializers") endif() # add "-Werror" flag if --pedantic-build is used if(CAF_CXX_WARNINGS_AS_ERRORS) build_string("EXTRA_FLAGS" "-Werror") endif() # set compiler flags for GCOV if requested if(CAF_ENABLE_GCOV) if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") set(NO_INLINE "-fno-inline") else() set(NO_INLINE "-fno-inline -fno-inline-small-functions -fno-default-inline") endif() build_string("EXTRA_FLAGS" "-fprofile-arcs -ftest-coverage ${NO_INLINE}") endif() # set -fno-exception if requested if(CAF_FORCE_NO_EXCEPTIONS) build_string("EXTRA_FLAGS" "-fno-exceptions") endif() # enable a ton of warnings if --more-clang-warnings is used if(CAF_MORE_WARNINGS) if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") set(WFLAGS "-Weverything -Wno-c++98-compat -Wno-padded " "-Wno-documentation-unknown-command -Wno-exit-time-destructors " "-Wno-global-constructors -Wno-missing-prototypes " "-Wno-c++98-compat-pedantic -Wno-unused-member-function " "-Wno-unused-const-variable -Wno-switch-enum " "-Wno-abstract-vbase-init -Wno-shadow " "-Wno-missing-noreturn -Wno-covered-switch-default") elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU") set(WFLAGS "-Waddress -Wall -Warray-bounds " "-Wattributes -Wbuiltin-macro-redefined -Wcast-align " "-Wcast-qual -Wchar-subscripts -Wclobbered -Wcomment " "-Wconversion -Wconversion-null -Wcoverage-mismatch " "-Wcpp -Wdelete-non-virtual-dtor -Wdeprecated " "-Wdeprecated-declarations -Wdiv-by-zero -Wdouble-promotion " "-Wempty-body -Wendif-labels -Wenum-compare -Wextra " "-Wfloat-equal -Wformat -Wfree-nonheap-object " "-Wignored-qualifiers -Winit-self " "-Winline -Wint-to-pointer-cast -Winvalid-memory-model " "-Winvalid-offsetof -Wlogical-op -Wmain -Wmaybe-uninitialized " "-Wmissing-braces -Wmultichar " "-Wnarrowing -Wnoexcept -Wnon-template-friend " "-Wnon-virtual-dtor -Wnonnull -Woverflow " "-Woverlength-strings -Wparentheses " "-Wpmf-conversions -Wpointer-arith -Wreorder " "-Wreturn-type -Wsequence-point " "-Wsign-compare -Wswitch -Wtype-limits -Wundef " "-Wuninitialized -Wunused -Wvla -Wwrite-strings") endif() # convert CMake list to a single string, erasing the ";" separators string(REPLACE ";" "" WFLAGS_STR ${WFLAGS}) build_string("EXTRA_FLAGS" "${WFLAGS_STR}") endif() # add -stdlib=libc++ when using Clang if possible if(NOT CAF_NO_AUTO_LIBCPP AND CMAKE_CXX_COMPILER_ID MATCHES "Clang") set(CXXFLAGS_BACKUP "${CMAKE_CXX_FLAGS}") set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++") try_run(ProgramResult CompilationSucceeded "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/get_compiler_version.cpp" RUN_OUTPUT_VARIABLE CompilerVersion) if(NOT CompilationSucceeded OR NOT ProgramResult EQUAL 0) message(STATUS "Use clang with GCC' libstdc++") else() message(STATUS "Automatically added '-stdlib=libc++' flag " "(CAF_NO_AUTO_LIBCPP not defined)") build_string("EXTRA_FLAGS" "-stdlib=libc++") endif() # restore CXX flags set(CMAKE_CXX_FLAGS "${CXXFLAGS_BACKUP}") endif() # enable address sanitizer if requested by the user if(CAF_ENABLE_ADDRESS_SANITIZER) # check whether address sanitizer is available set(CXXFLAGS_BACKUP "${CMAKE_CXX_FLAGS}") set(CMAKE_CXX_FLAGS "-fsanitize=address -fno-omit-frame-pointer") try_run(ProgramResult CompilationSucceeded "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/get_compiler_version.cpp") if(NOT CompilationSucceeded) message(WARNING "Address Sanitizer is not available on selected compiler") else() message(STATUS "Enable Address Sanitizer") build_string("EXTRA_FLAGS" "-fsanitize=address -fno-omit-frame-pointer") endif() # restore CXX flags set(CMAKE_CXX_FLAGS "${CXXFLAGS_BACKUP}") endif(CAF_ENABLE_ADDRESS_SANITIZER) # -pthread is ignored on MacOSX but required on other platforms if(NOT APPLE AND NOT WIN32) build_string("EXTRA_FLAGS" "-pthread") endif() # -fPIC generates warnings on MinGW and Cygwin plus extra setup steps needed on MinGW if(MINGW) add_definitions(-D_WIN32_WINNT=0x0600) add_definitions(-DWIN32) include(GenerateExportHeader) list(APPEND CAF_EXTRA_LDFLAGS -lws2_32 -liphlpapi -lpsapi) # build static to avoid runtime dependencies to GCC libraries build_string("EXTRA_FLAGS" "-static") elseif(CYGWIN) build_string("EXTRA_FLAGS" "-U__STRICT_ANSI__") else() build_string("EXTRA_FLAGS" "-fPIC") endif() if (WIN32) list(APPEND CAF_EXTRA_LDFLAGS ws2_32 iphlpapi) endif() # iOS support if(CAF_OSX_SYSROOT) set(CMAKE_OSX_SYSROOT "${CAF_OSX_SYSROOT}") endif() if(CAF_IOS_DEPLOYMENT_TARGET) if(CAF_OSX_SYSROOT STREQUAL "iphonesimulator") build_string("EXTRA_FLAGS" "-mios-simulator-version-min=${CAF_IOS_DEPLOYMENT_TARGET}") else() build_string("EXTRA_FLAGS" "-miphoneos-version-min=${CAF_IOS_DEPLOYMENT_TARGET}") endif() endif() # check if the user provided CXXFLAGS, set defaults otherwise if(NOT CMAKE_CXX_FLAGS) set(CMAKE_CXX_FLAGS "-std=c++11 -Wextra -Wall -pedantic ${EXTRA_FLAGS}") endif() if (NOT "${CMAKE_CXX_FLAGS}" MATCHES "-std=") message(STATUS "Supplied CXXFLAGS do not contain a C++ standard, setting std to c++11") set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}") endif() if(NOT CMAKE_CXX_FLAGS_DEBUG) set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") endif() if(NOT CMAKE_CXX_FLAGS_MINSIZEREL) set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os") endif() if(NOT CMAKE_CXX_FLAGS_RELEASE) set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") endif() if(NOT CMAKE_CXX_FLAGS_RELWITHDEBINFO) set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -fno-omit-frame-pointer") endif() # set build default build type to RelWithDebInfo if not set if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE RelWithDebInfo) endif() # needed by subprojects if (DEFINED CMAKE_LD_LIBS) list(APPEND ${CMAKE_LD_LIBS}) endif() ################################################################################ # setup logging # ################################################################################ # make sure log level is defined and all-uppercase if(NOT CAF_LOG_LEVEL) set(CAF_LOG_LEVEL "QUIET") else() string(TOUPPER "${CAF_LOG_LEVEL}" CAF_LOG_LEVEL) endif() set(validLogLevels QUIET ERROR WARNING INFO DEBUG TRACE) list(FIND validLogLevels "${CAF_LOG_LEVEL}" logLevelIndex) if(logLevelIndex LESS 0) MESSAGE(FATAL_ERROR "Invalid log level: \"${CAF_LOG_LEVEL}\"") endif() ################################################################################ # setup for install target # ################################################################################ # install includes from test install(DIRECTORY libcaf_test/caf/ DESTINATION include/caf FILES_MATCHING PATTERN "*.hpp") # process cmake_uninstall.cmake.in configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) # add uninstall target add_custom_target(uninstall COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") ################################################################################ # set inclue paths for subprojects # ################################################################################ # path to caf core & io headers set(LIBCAF_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/libcaf_core" "${CMAKE_CURRENT_SOURCE_DIR}/libcaf_io" "${CMAKE_CURRENT_SOURCE_DIR}/libcaf_test") # path to caf opencl headers if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/libcaf_opencl/CMakeLists.txt") set(LIBCAF_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/libcaf_opencl/" "${LIBCAF_INCLUDE_DIRS}") endif() # enable tests if not disabled if(NOT CAF_NO_UNIT_TESTS) enable_testing() macro(add_unit_tests globstr) file(GLOB_RECURSE tests "${globstr}") set(CAF_ALL_UNIT_TESTS ${CAF_ALL_UNIT_TESTS} ${tests}) endmacro() else() macro(add_unit_tests globstr) # do nothing (unit tests disabled) endmacro() endif() # all projects need the headers of the core components include_directories("${LIBCAF_INCLUDE_DIRS}") ################################################################################ # add targets # ################################################################################ macro(add_caf_lib name) string(TOUPPER ${name} upper_name) set(full_name libcaf_${name}) set(shared_target ${full_name}_shared) set(static_target ${full_name}_static) add_subdirectory(${full_name}) set(lib_varname CAF_LIBRARY_${upper_name}) set(lib_varname_static ${lib_varname}_STATIC) if(NOT CAF_BUILD_STATIC_ONLY) set(${lib_varname} ${shared_target}) set(CAF_LIBRARIES ${CAF_LIBRARIES} ${shared_target}) else() set(${lib_varname} ${static_target}) set(CAF_LIBRARIES ${CAF_LIBRARIES} ${static_target}) endif() if(CAF_BUILD_STATIC_ONLY OR CAF_BUILD_STATIC) set(${lib_varname_static} ${static_target}) endif() add_unit_tests("${full_name}/test/*.cpp") # add headers to include directories so other subprojects can use them include_directories("${CMAKE_CURRENT_SOURCE_DIR}/libcaf_${name}") endmacro() macro(add_optional_caf_lib name) string(TOUPPER ${name} upper_name) set(flag_varname CAF_NO_${upper_name}) if(NOT ${flag_varname} AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/libcaf_${name}/CMakeLists.txt") add_caf_lib(${name}) else() set(${flag_name} yes) endif() endmacro() macro(add_optional_caf_binaries name) string(TOUPPER ${name} upper_name) set(dependency_failed no) # check all aditional dependency flags foreach(flag_name ${ARGN}) if(${flag_name}) set(dependency_failed yes) endif() endforeach() if(NOT dependency_failed) if(NOT CAF_NO_${upper_name} AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${name}/CMakeLists.txt") add_subdirectory(${name}) else() # make sure variable is set for nicer build log set(CAF_NO_${upper_name} yes) endif() else() message(STATUS "Disable ${name}, one of the following flags was set: ${ARGN}") # make sure variable is set for nicer build log set(CAF_NO_${upper_name} yes) endif() endmacro() # build core and I/O library add_caf_lib(core) add_optional_caf_lib(io) # build SSL module if OpenSSL library is available if(NOT CAF_NO_OPENSSL) find_package(OpenSSL) if(OPENSSL_FOUND) # Check OpenSSL version >= 1.0.1 if (OPENSSL_VERSION VERSION_LESS 1.0.1) message(STATUS "Disable OpenSSL. Required >= 1.0.1 due to TLSv1.2 support.") set(CAF_NO_OPENSSL yes) else() if(NOT CMAKE_CROSSCOMPILING) # Check if openssl headers and library versions match set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_LIBRARIES}) set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR}) check_c_source_runs(" #include #include int main() { if (SSLeay() == OPENSSL_VERSION_NUMBER) { return 0; } return -1; } " OPENSSL_CORRECT_VERSION_NUMBER) if (NOT OPENSSL_CORRECT_VERSION_NUMBER) message(FATAL_ERROR "OpenSSL library version does not match headers") endif() endif() include_directories(BEFORE ${OPENSSL_INCLUDE_DIR}) add_optional_caf_lib(openssl) endif() else(OPENSSL_FOUND) set(CAF_NO_OPENSSL yes) endif(OPENSSL_FOUND) endif() # build opencl library if not told otherwise and OpenCL package was found if(NOT CAF_NO_OPENCL) if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 3.0) find_package(OpenCL) if(OpenCL_FOUND) include_directories(BEFORE ${OpenCL_INCLUDE_DIRS}) add_optional_caf_lib(opencl) add_optional_caf_binaries(libcaf_opencl/examples) else() set(CAF_NO_OPENCL yes) endif() else() set(CAF_NO_OPENCL yes) message(STATUS "Could NOT find OpenCL, requires Cmake >= 3.1.") endif() endif() # build Python binding if not being told otherwise if(NOT CAF_NO_PYTHON AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/libcaf_python/CMakeLists.txt") add_subdirectory(libcaf_python) endif() # build examples if not being told otherwise add_optional_caf_binaries(examples) # build tools if not being told otherwise add_optional_caf_binaries(tools) ################################################################################ # unit tests setup # ################################################################################ if(NOT CAF_NO_UNIT_TESTS) # setup unit test binary add_executable(caf-test libcaf_test/src/caf-test.cpp libcaf_test/caf/test/unit_test.hpp libcaf_test/caf/test/unit_test_impl.hpp ${CAF_ALL_UNIT_TESTS}) target_link_libraries(caf-test ${CAF_EXTRA_LDFLAGS} ${CAF_LIBRARIES} ${PTHREAD_LIBRARIES}) add_custom_target(all_unit_tests) add_dependencies(caf-test all_unit_tests) # enumerate all test suites. foreach(test ${CAF_ALL_UNIT_TESTS}) file(STRINGS ${test} contents) foreach(line ${contents}) if ("${line}" MATCHES "CAF_SUITE (.*)") string(REGEX REPLACE ".* CAF_SUITE (.*)" "\\1" suite ${line}) list(APPEND suites ${suite}) endif() endforeach() endforeach() list(REMOVE_DUPLICATES suites) # creates one CMake test per test suite. macro (make_test suite) string(REPLACE " " "_" test_name ${suite}) set(caf_test ${EXECUTABLE_OUTPUT_PATH}/caf-test) add_test(${test_name} ${caf_test} -r 300 -n -v 5 -s "${suite}" ${ARGN}) endmacro () list(LENGTH suites num_suites) message(STATUS "Found ${num_suites} test suites") foreach(suite ${suites}) make_test("${suite}") endforeach () endif() # -- Fetch branch name and SHA if available ------------------------------------ if(EXISTS "release.txt") file(READ "release.txt" CAF_VESION) else() set(CAF_RELEASE "${CAF_VERSION}") find_package(Git QUIET) if(GIT_FOUND) # retrieve current branch name for CAF execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} RESULT_VARIABLE gitBranchResult OUTPUT_VARIABLE gitBranch ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) # retrieve current SHA1 hash for CAF execute_process(COMMAND ${GIT_EXECUTABLE} log --pretty=format:%h -n 1 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} RESULT_VARIABLE gitShaResult OUTPUT_VARIABLE gitSha ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) if(gitBranchResult EQUAL 0 AND gitShaResult EQUAL 0) # generate semantic CAF version for manual set(CAF_RELEASE "${CAF_VERSION}+exp.sha.${gitSha}") # check whether we're building the manual for a stable release if(gitBranch STREQUAL "master") # retrieve current tag name for CAF execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --contains ${gitSha} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} RESULT_VARIABLE gitTagResult OUTPUT_VARIABLE gitTag ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) # tags indicate stable releases -> use tag name as release version if(gitTagResult EQUAL 0) set(CAF_RELEASE "${gitTag}") endif() endif() endif() endif() endif() message(STATUS "Set release version for all documentation to ${CAF_RELEASE}.") # -- Setup for building manual and API documentation --------------------------- # we need the examples and some headers relative to the build/doc/tex directory file(COPY examples/ DESTINATION examples) file(COPY libcaf_core/caf/exit_reason.hpp DESTINATION libcaf_core/caf/) file(COPY libcaf_core/caf/sec.hpp DESTINATION libcaf_core/caf/) add_subdirectory(doc) ################################################################################ # Add additional project files to GUI # ################################################################################ file(GLOB_RECURSE script_files "scripts/*") add_custom_target(gui_dummy SOURCES configure ${script_files}) ################################################################################ # print summary # ################################################################################ # little helper macro to invert a boolean macro(invertYesNo in out) if(${in}) set(${out} no) else() set(${out} yes) endif() endmacro() # invert CAF_NO_* variables for nicer output invertYesNo(CAF_NO_IO CAF_BUILD_IO) invertYesNo(CAF_NO_EXAMPLES CAF_BUILD_EXAMPLES) invertYesNo(CAF_NO_TOOLS CAF_BUILD_TOOLS) invertYesNo(CAF_NO_UNIT_TESTS CAF_BUILD_UNIT_TESTS) invertYesNo(CAF_NO_EXCEPTIONS CAF_BUILD_WITH_EXCEPTIONS) invertYesNo(CAF_NO_MEM_MANAGEMENT CAF_BUILD_MEM_MANAGEMENT) invertYesNo(CAF_NO_OPENCL CAF_BUILD_OPENCL) invertYesNo(CAF_NO_OPENSSL CAF_BUILD_OPENSSL) invertYesNo(CAF_NO_PYTHON CAF_BUILD_PYTHON) # collect all compiler flags string(TOUPPER "${CMAKE_BUILD_TYPE}" UPPER_BUILD_TYPE) set(ALL_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${UPPER_BUILD_TYPE}}") set(ALL_LD_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CAF_EXTRA_LDFLAGS}") string(STRIP "${ALL_LD_FLAGS}" ALL_LD_FLAGS) # done if(NOT CAF_NO_SUMMARY) message(STATUS "\n====================| Build Summary |====================" "\n" "\nCAF version: ${CAF_VERSION}" "\n" "\nBuild type: ${CMAKE_BUILD_TYPE}" "\nBuild static: ${CAF_BUILD_STATIC}" "\nBuild static only: ${CAF_BUILD_STATIC_ONLY}" "\nBuild static runtime: ${CAF_BUILD_STATIC_RUNTIME}" "\nRuntime checks: ${CAF_ENABLE_RUNTIME_CHECKS}" "\nLog level: ${CAF_LOG_LEVEL}" "\nWith mem. mgmt.: ${CAF_BUILD_MEM_MANAGEMENT}" "\nWith exceptions: ${CAF_BUILD_WITH_EXCEPTIONS}" "\n" "\nBuild I/O module: ${CAF_BUILD_IO}" "\nBuild tools: ${CAF_BUILD_TOOLS}" "\nBuild examples: ${CAF_BUILD_EXAMPLES}" "\nBuild unit tests: ${CAF_BUILD_UNIT_TESTS}" "\nBuild OpenCL: ${CAF_BUILD_OPENCL}" "\nBuild OpenSSL: ${CAF_BUILD_OPENSSL}" "\nBuild Python: ${CAF_BUILD_PYTHON}" "\n" "\nCXX: ${CMAKE_CXX_COMPILER}" "\nCXXFLAGS: ${ALL_CXX_FLAGS}" "\nLINKER_FLAGS (shared) ${ALL_LD_FLAGS}" "\n" "\nSource directory: ${CMAKE_CURRENT_SOURCE_DIR}" "\nBuild directory: ${CMAKE_CURRENT_BINARY_DIR}" "\nExecutable path: ${EXECUTABLE_OUTPUT_PATH}" "\nLibrary path: ${LIBRARY_OUTPUT_PATH}" "\nInstall prefix: ${CMAKE_INSTALL_PREFIX}" "\nGenerator: ${CMAKE_GENERATOR}" "\n" "\n===========================================================\n") endif() actor-framework-0.16.3/CONTRIBUTING.md000066400000000000000000000274101341123343400171370ustar00rootroot00000000000000This document specifies how to contribute code to CAF. Git Workflow ============ Please adhere to the following Git naming and commit message conventions. Having a consistent work flow and style reduces friction and makes organizing contributions a lot easier for all sides. Branches -------- - Our main branch is `master`. It reflects the latest development changes for the next release and should always compile. Nightly versions use the `master`. Users looking for a production-ready state are encouraged to use the latest release version instead. - Push trivial bugfixes (e.g. typos, missing includes, etc.) consisting of a single commit directly to `master`. Otherwise, implement your changes in a topic or bugfix branch and file a pull request on GitHub. - Implement new features and non-trivial changes in a *topic branch* with naming convention `topic/short-description`. - Implement fixes for existing issues in a *bugfix branch* with naming convention `issue/$num`, where `$num` is the issue ID on GitHub. - Simply use a fork of CAF if you are an external contributor. Pull Requests ------------- Check the following steps to prepare for a merge into `master` after completing work in a topic or bugfix branch (or fork). - Squash your commits into a single one if necessary. Each commit should represent a coherent set of changes. - Wait for a code review and the test results of our CI. - Address any review feedback and fix all issues reported by the CI. - A maintainer will merge the pull request when all issues are resolved. Commit Message Style -------------------- - Summarize the changes in no more than 50 characters in the first line. Capitalize and write in an imperative present tense, e.g., "Fix bug" as opposed to "Fixes bug" or "Fixed bug". - Suppress the dot at the end of the first line. Think of it as the header of the following description. - Leave the second line empty. - Optionally add a long description written in full sentences beginning on the third line. Indent at 72 characters per line. Coding Style ============ When contributing source code, please adhere to the following coding style, which is loosely based on the [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) and the coding conventions used by the C++ Standard Library. Example for the Impatient ------------------------- ```cpp // libcaf_example/caf/example/my_class.hpp #pragma once #include // use "//" for regular comments and "///" for doxygen namespace caf { namespace example { /// This class is only being used as style guide example. class my_class { public: /// Brief description. More description. Note that CAF uses the /// "JavaDoc-style" autobrief option, i.e., everything up until the /// first dot is the brief description. my_class(); /// Destructs `my_class`. Please use Markdown in comments. ~my_class(); // suppress redundant @return if you start the brief description with "Returns" /// Returns the name of this instance. inline const std::string& name() const noexcept { return name_; } /// Sets the name of this instance. inline void name(const std::string& new_name) { name_ = new_name; } /// Prints the name to `std::cout`. void print_name() const; /// Does something (maybe). void do_something(); /// Does something else but is guaranteed to never throw. void do_something_else() noexcept; private: std::string name_; }; } // namespace example } // namespace caf ``` ```cpp // libcaf_example/src/my_class.cpp #include "caf/example/my_class.hpp" #include namespace caf { namespace example { namespace { constexpr const char default_name[] = "my object"; } // namespace my_class::my_class() : name_(default_name) { // nop } my_class::~my_class() { // nop } void my_class::print_name() const { std::cout << name() << std::endl; } void my_class::do_something() { if (name() == default_name) { std::cout << "You didn't gave me a proper name, so I " << "refuse to do something." << std::endl; } else { std::cout << "You gave me the name \"" << name() << "\"... Do you really think I'm willing to do something " "for you after insulting me like that?" << std::endl; } } void my_class::do_something_else() noexcept { // Do nothing if we don't have a name. if (name().empty()) return; switch (name.front()) { case 'a': // handle a break; case 'b': // handle b break; default: handle_default(); } } } // namespace example } // namespace caf ``` General ------- - Use 2 spaces per indentation level. - Use at most 80 characters per line. - Never use tabs. - Never use C-style casts. - Never declare more than one variable per line. - Only separate functions with vertical whitespaces and use comments to document logcial blocks inside functions. - Use `.hpp` as suffix for header files and `.cpp` as suffix for implementation files. - Bind `*` and `&` to the *type*, e.g., `const std::string& arg`. - Never increase the indentation level for namespaces and access modifiers. - Use the order `public`, `protected`, and then `private` in classes. - Always use `auto` to declare a variable unless you cannot initialize it immediately or if you actually want a type conversion. In the latter case, provide a comment why this conversion is necessary. - Never use unwrapped, manual resource management such as `new` and `delete`. - Prefer `using T = X` over `typedef X T`. - Insert a whitespaces after keywords: `if (...)`, `template <...>`, `while (...)`, etc. - Put opening braces on the same line: ```cpp void foo() { // ... } ``` - Use standard order for readability: C standard libraries, C++ standard libraries, OS-specific headers (usually guarded by `ifdef`), other libraries, and finally (your) CAF headers. Include `caf/config.hpp` before the standard headers if you need to include platform-dependent headers. Use angle brackets for system includes and doublequotes otherwise. ```cpp // example.hpp #include #include #include "3rd/party.h" #include "caf/fwd.hpp" ``` Put the implemented header always first in a `.cpp` file. ```cpp // example.cpp #include "caf/example.hpp" // header for this .cpp file #include "caf/config.hpp" // needed for #ifdef guards #include #ifdef CAF_WINDOWS #include #else #include #endif #include "some/other/library.h" #include "caf/actor.hpp" ``` - Put output parameters in functions before input parameters if unavoidable. This follows the parameter order from the STL. - Protect single-argument constructors with `explicit` to avoid implicit conversions. - Use `noexcept` whenever it makes sense and as long as it does not limit future design space. Move construction and assignment are natural candidates for `noexcept`. Naming ------ - All names except macros and template parameters should be lower case and delimited by underscores. - Template parameter names should be written in CamelCase. - Types and variables should be nouns, while functions performing an action should be "command" verbs. Classes used to implement metaprogramming functions also should use verbs, e.g., `remove_const`. - Private and protected member variables use the suffix `_` while getter *and* setter functions use the name without suffix: ```cpp class person { public: person(std::string name) : name_(std::move(name)) { // nop } const std::string& name() const { return name_ } void name(const std::string& new_name) { name_ = new_name; } private: std::string name_; }; ``` - Use `T` for generic, unconstrained template parameters and `x` for generic function arguments. Suffix both with `s` for template parameter packs and lists: ```cpp template void print(const Ts&... xs) { // ... } void print(const std::vector& xs) { // ... } ``` Headers ------- - Each `.cpp` file has an associated `.hpp` file. Exceptions to this rule are unit tests and `main.cpp` files. - Each class has its own pair of header and implementation files and the relative path for the header file is derived from its full name. For example, the header file for `caf::example::my_class` of `libcaf_example` is located at `libcaf_example/caf/example/my_class.hpp` and the source file at `libcaf_example/src/my_class.cpp`. - All header files use `#pragma once` to prevent multiple inclusion. - Do not `#include` when a forward declaration suffices. - Each library component must provide a `fwd.hpp` header providing forward declartations for all types used in the user API. - Each library component should provide an `all.hpp` header that contains the main page for the documentation and includes all headers for the user API. - Use `inline` for small functions (rule of thumb: 10 lines or less). Breaking Statements ------------------- - Break constructor initializers after the comma, use four spaces for indentation, and place each initializer on its own line (unless you don't need to break at all): ```cpp my_class::my_class() : my_base_class(some_function()), greeting_("Hello there! This is my_class!"), some_bool_flag_(false) { // ok } other_class::other_class() : name_("tommy"), buddy_("michael") { // ok } ``` - Break function arguments after the comma for both declaration and invocation: ```cpp intptr_t channel::compare(const abstract_channel* lhs, const abstract_channel* rhs) { // ... } ``` - Break before tenary operators and before binary operators: ```cpp if (today_is_a_sunny_day() && it_is_not_too_hot_to_go_swimming()) { // ... } ``` Template Metaprogramming ------------------------ Despite its power, template metaprogramming came to the language pretty much by accident. Templates were never meant to be used for compile-time algorithms and type transformations. This is why C++ punishes metaprogramming with an insane amount of syntax noise. In CAF, we make excessive use of templates. To keep the code readable despite all the syntax noise, we have some extra rules for formatting metaprogramming code. - Break `using name = ...` statements always directly after `=` if it does not fit in one line. - Consider the *semantics* of a metaprogramming function. For example, `std::conditional` is an if-then-else construct. Hence, place the if-clause on its own line and do the same for the two cases. - Use one level of indentation per "open" template and place the closing `>`, `>::type` or `>::value` on its own line. For example: ```cpp using optional_result_type = typename std::conditional< std::is_same::value, bool, optional >::type; // think of it as the following (not valid C++): auto optional_result_type = conditional { if result_type == void then bool else optional }; ``` - Note that this is not necessary when simply defining a type alias. When dealing with "ordinary" templates, indenting based on the position of the opening `<` is ok, e.g.: ```cpp using response_handle_type = response_handle; ``` Preprocessor Macros ------------------- - Use macros if and only if you can't get the same result by using inline functions or proper constants. - Macro names use the form `CAF__`. Comments -------- - Start Doxygen comments with `///`. - Use Markdown instead of Doxygen formatters. - Use `@cmd` rather than `\cmd`. - Use `//` to define basic comments that should not be processed by Doxygen. actor-framework-0.16.3/Jenkinsfile000066400000000000000000000247521341123343400171000ustar00rootroot00000000000000#!/usr/bin/env groovy // Default CMake flags for most builds (except coverage). defaultBuildFlags = [ 'CAF_MORE_WARNINGS:BOOL=yes', 'CAF_ENABLE_RUNTIME_CHECKS:BOOL=yes', 'CAF_NO_OPENCL:BOOL=yes', ] // CMake flags for release builds. releaseBuildFlags = defaultBuildFlags + [ ] // CMake flags for debug builds. debugBuildFlags = defaultBuildFlags + [ 'CAF_ENABLE_RUNTIME_CHECKS:BOOL=yes', 'CAF_ENABLE_ADDRESS_SANITIZER:BOOL=yes', 'CAF_LOG_LEVEL:STRING=TRACE', ] // CMake flags for macOS builds only. macBuildFlags = [ 'OPENSSL_ROOT_DIR=/usr/local/opt/openssl', 'OPENSSL_INCLUDE_DIR=/usr/local/opt/openssl/include', ] // Our build matrix. The keys are the operating system labels and the values // are lists of tool labels. buildMatrix = [ // Debug builds with ASAN + logging for various OS/compiler combinations. ['Linux', [ builds: ['debug'], tools: ['gcc4.8', 'gcc4.9', 'gcc5', 'gcc6', 'gcc7', 'gcc8'], cmakeArgs: debugBuildFlags, ]], ['macOS', [ builds: ['debug'], tools: ['clang'], cmakeArgs: debugBuildFlags + macBuildFlags, ]], // One release build per supported OS. FreeBSD and Windows have the least // testing outside Jenkins, so we also explicitly schedule debug builds. ['Linux', [ builds: ['release'], tools: ['gcc8', 'clang'], cmakeArgs: releaseBuildFlags, ]], ['macOS', [ builds: ['release'], tools: ['clang'], cmakeArgs: releaseBuildFlags + macBuildFlags, ]], ['FreeBSD', [ builds: ['debug'], // no release build for now, because it takes 1h tools: ['clang'], cmakeArgs: debugBuildFlags, ]], ['Windows', [ builds: ['debug', 'release'], tools: ['msvc'], cmakeArgs: [ 'CAF_BUILD_STATIC_ONLY:BOOL=yes', 'CAF_ENABLE_RUNTIME_CHECKS:BOOL=yes', 'CAF_NO_OPENCL:BOOL=yes', ], ]], // One Additional build for coverage reports. /* TODO: this build exhausts all storage on the node and is temporarily * disabled until resolving the issue ['Linux', [ builds: ['debug'], tools: ['gcc8 && gcovr'], extraSteps: ['coverageReport'], cmakeArgs: [ 'CAF_ENABLE_GCOV:BOOL=yes', 'CAF_NO_EXCEPTIONS:BOOL=yes', 'CAF_FORCE_NO_EXCEPTIONS:BOOL=yes', ], ]], */ ] // Optional environment variables for combinations of labels. buildEnvironments = [ 'macOS && gcc': ['CXX=g++'], 'Linux && clang': ['CXX=clang++'], ] // Called *after* a build succeeded. def coverageReport() { dir('caf-sources') { sh 'gcovr -e examples -e tools -e libcaf_test -e ".*/test/.*" -e libcaf_core/caf/scheduler/profiled_coordinator.hpp -x -r . > coverage.xml' archiveArtifacts '**/coverage.xml' cobertura([ autoUpdateHealth: false, autoUpdateStability: false, coberturaReportFile: '**/coverage.xml', conditionalCoverageTargets: '70, 0, 0', failUnhealthy: false, failUnstable: false, lineCoverageTargets: '80, 0, 0', maxNumberOfBuilds: 0, methodCoverageTargets: '80, 0, 0', onlyStable: false, sourceEncoding: 'ASCII', zoomCoverageChart: false, ]) } } def cmakeSteps(buildType, cmakeArgs, buildId) { def installDir = "$WORKSPACE/$buildId" dir('caf-sources') { // Configure and build. cmakeBuild([ buildDir: 'build', buildType: buildType, cmakeArgs: (cmakeArgs + [ "CMAKE_INSTALL_PREFIX=\"$installDir\"", ]).collect { x -> '-D' + x }.join(' '), installation: 'cmake in search path', sourceDir: '.', steps: [[ args: '--target install', withCmake: true, ]], ]) // Run unit tests. ctest([ arguments: '--output-on-failure', installation: 'cmake in search path', workingDir: 'build', ]) } // Only generate artifacts for the master branch. if (PrettyJobBaseName == 'master') { zip([ archive: true, dir: buildId, zipFile: "${buildId}.zip", ]) } } // Builds `name` with CMake and runs the unit tests. def buildSteps(buildType, cmakeArgs, buildId) { echo "build stage: $STAGE_NAME" deleteDir() dir(buildId) { // Create directory. } unstash('caf-sources') if (STAGE_NAME.contains('Windows')) { echo "Windows build on $NODE_NAME" withEnv(['PATH=C:\\Windows\\System32;C:\\Program Files\\CMake\\bin;C:\\Program Files\\Git\\cmd;C:\\Program Files\\Git\\bin']) { cmakeSteps(buildType, cmakeArgs, buildId) } } else { echo "Unix build on $NODE_NAME" withEnv(["label_exp=" + STAGE_NAME.toLowerCase(), "ASAN_OPTIONS=detect_leaks=0"]) { cmakeSteps(buildType, cmakeArgs, buildId) } } } // Builds a stage for given builds. Results in a parallel stage `if builds.size() > 1`. def makeBuildStages(matrixIndex, builds, lblExpr, settings) { builds.collectEntries { buildType -> def id = "$matrixIndex $lblExpr: $buildType" [ (id): { node(lblExpr) { stage(id) { try { def buildId = "$lblExpr && $buildType" withEnv(buildEnvironments[lblExpr] ?: []) { buildSteps(buildType, settings['cmakeArgs'], buildId) (settings['extraSteps'] ?: []).each { fun -> "$fun"() } } } finally { cleanWs() } } } } ] } } pipeline { options { buildDiscarder(logRotator(numToKeepStr: '50', artifactNumToKeepStr: '10')) } agent none environment { LD_LIBRARY_PATH = "$WORKSPACE/caf-sources/build/lib" DYLD_LIBRARY_PATH = "$WORKSPACE/caf-sources/build/lib" PrettyJobBaseName = env.JOB_BASE_NAME.replace('%2F', '/') PrettyJobName = "CAF build #${env.BUILD_NUMBER} for $PrettyJobBaseName" } stages { stage('Git Checkout') { agent { label 'master' } steps { deleteDir() dir('caf-sources') { checkout scm sh './scripts/get-release-version.sh' } stash includes: 'caf-sources/**', name: 'caf-sources' } } stage('Builds') { steps { script { // Create stages for building everything in our build matrix in // parallel. def xs = [:] buildMatrix.eachWithIndex { entry, index -> def (os, settings) = entry settings['tools'].eachWithIndex { tool, toolIndex -> def matrixIndex = "[$index:$toolIndex]" def builds = settings['builds'] def labelExpr = "$os && $tool" xs << makeBuildStages(matrixIndex, builds, labelExpr, settings) } } parallel xs } } } stage('Documentation') { agent { label 'pandoc' } steps { deleteDir() unstash('caf-sources') dir('caf-sources') { // Configure and build. cmakeBuild([ buildDir: 'build', installation: 'cmake in search path', sourceDir: '.', cmakeArgs: '-DCAF_BUILD_TEX_MANUAL=yes', steps: [[ args: '--target doc', withCmake: true, ]], ]) sshagent(['84d71a75-cbb6-489a-8f4c-d0e2793201e9']) { sh ''' if [ "$(cat branch.txt)" = "master" ]; then rsync -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" -r -z --delete build/doc/html/ www.inet.haw-hamburg.de:/users/www/www.actor-framework.org/html/doc scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null build/doc/manual.pdf www.inet.haw-hamburg.de:/users/www/www.actor-framework.org/html/pdf/manual.pdf fi ''' } } dir('read-the-docs') { git([ credentialsId: '9b054212-9bb4-41fd-ad8e-b7d47495303f', url: 'git@github.com:actor-framework/read-the-docs.git', ]) sh ''' if [ "$(cat ../caf-sources/branch.txt)" = "master" ]; then cp ../caf-sources/build/doc/rst/* . if [ -n "$(git status --porcelain)" ]; then git add . git commit -m "Update Manual" git push --set-upstream origin master if [ -z "$(grep 'exp.sha' ../caf-sources/release.txt)" ] ; then git tag $(cat ../caf-sources/release.txt) git push origin $(cat ../caf-sources/release.txt) fi fi fi ''' } } } } post { success { emailext( subject: "✅ $PrettyJobName succeeded", recipientProviders: [culprits(), developers(), requestor(), upstreamDevelopers()], body: "Check console output at ${env.BUILD_URL}.", ) } failure { emailext( subject: "⛔️ $PrettyJobName failed", attachLog: true, compressLog: true, recipientProviders: [culprits(), developers(), requestor(), upstreamDevelopers()], body: "Check console output at ${env.BUILD_URL} or see attached log.\n", ) } } } actor-framework-0.16.3/LICENSE000066400000000000000000000027561341123343400157210ustar00rootroot00000000000000Copyright (c) 2011-2014, Dominik Charousset All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. actor-framework-0.16.3/LICENSE_ALTERNATIVE000066400000000000000000000024721341123343400175520ustar00rootroot00000000000000Boost Software License - Version 1.0 - August 17th, 2003 Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. actor-framework-0.16.3/README.md000066400000000000000000000125661341123343400161730ustar00rootroot00000000000000# CAF: C++ Actor Framework CAF is an open source C++11 actor model implementation featuring lightweight & fast actor implementations, pattern matching for messages, network transparent messaging, and more. [![Gitter][gitter-badge]](https://gitter.im/actor-framework/chat) [![Jenkins][jenkins-badge]](https://jenkins.inet.haw-hamburg.de/job/CAF/job/actor-framework/job/master) [![Documentation Status][docs-badge]](http://actor-framework.readthedocs.io/en/latest/?badge=latest) [![Coverity][coverity-badge]](https://scan.coverity.com/projects/5555) [![In Progress][in-progress-badge]](https://waffle.io/actor-framework/actor-framework) ## Online Resources * __Homepage__: http://www.actor-framework.org * __Developer Blog__: http://blog.actor-framework.org * __Doxygen__: http://www.actor-framework.org/doc * __HTML Manual__: https://actor-framework.readthedocs.io * __PDF Manual__: http://www.actor-framework.org/pdf/manual.pdf ## Report Bugs / Get Help * __Open Issues on GitHub__: https://github.com/actor-framework/actor-framework/issues/new * __Ask Questions on StackOverflow__: https://stackoverflow.com/questions/ask?tags=c%2b%2b-actor-framework ## Community * __Chat__: https://gitter.im/actor-framework/chat * __Twitter__: https://twitter.com/actor_framework * __User Mailing List__: https://groups.google.com/d/forum/actor-framework * __Developer Mailing List__: https://groups.google.com/d/forum/caf-devel * __Feature Proposals__: https://github.com/actor-framework/evolution ## Get CAF ### FreeBSD Ports We maintain a port for CAF, which you can install as follows: ```sh pkg install caf ``` Alternatively, you can go to `/usr/ports/devel/caf` and tweak a few configuration options before installing the port: ```sh make config make install clean ``` ### Homebrew You can install the latest stable release with: ```sh brew install caf ``` Alternatively, you can use the current development version by using: ```sh brew install caf --HEAD ``` ## Get the Sources * git clone https://github.com/actor-framework/actor-framework.git * cd actor-framework ## Build CAF from Source The easiest way to build CAF is to use the `configure` script. Other available options are using [CMake](http://www.cmake.org/) directly or [SNocs](https://github.com/airutech/snocs). ### Using the `configure` Script The script is a convenient frontend for `CMake`. See `configure -h` for a list of available options or read the [online documentation] (https://github.com/actor-framework/actor-framework/wiki/Configure-Options). ```sh ./configure make make test make install [as root, optional] ``` ### Using CMake All available CMake variables are available [online](https://github.com/actor-framework/actor-framework/wiki/CMake-Options). CAF also can be included as CMake submodule or added as dependency to other CMake-based projects using the file `cmake/FindCAF.cmake`. ### Using SNocs A SNocs workspace is provided by GitHub user [osblinnikov](https://github.com/osblinnikov) and documented [online](https://github.com/actor-framework/actor-framework/wiki/Using-SNocs). ## Dependencies * CMake * Pthread (until C++11 compilers support the new `thread_local` keyword) ## Supported Compilers * GCC >= 4.8.3 * Clang >= 3.2 * MSVC >= 2015, update 3 ## Supported Operating Systems * Linux * Mac OS X * FreeBSD 10 * Windows >= 7 (currently static builds only) ## Optional Dependencies * Doxygen (for the `doxygen` target) * LaTeX (for the `manual` target) * Pandoc and Python with pandocfilters (for the `rst` target) ## Scientific Use If you use CAF in a scientific context, please use one of the following citations: ```latex @inproceedings{cshw-nassp-13, author = {Dominik Charousset and Thomas C. Schmidt and Raphael Hiesgen and Matthias W{\"a}hlisch}, title = {{Native Actors -- A Scalable Software Platform for Distributed, Heterogeneous Environments}}, booktitle = {Proc. of the 4rd ACM SIGPLAN Conference on Systems, Programming, and Applications (SPLASH '13), Workshop AGERE!}, pages = {87--96}, month = {Oct.}, year = {2013}, publisher = {ACM}, address = {New York, NY, USA} } @article{chs-rapc-16, author = {Dominik Charousset and Raphael Hiesgen and Thomas C. Schmidt}, title = {{Revisiting Actor Programming in C++}}, journal = {Computer Languages, Systems \& Structures}, volume = {45}, year = {2016}, month = "April", pages = {105--131}, publisher = {Elsevier} } ``` You can find the papers online at http://dx.doi.org/10.1145/2541329.2541336 and http://dx.doi.org/10.1016/j.cl.2016.01.002. [obs]: https://software.opensuse.org/download.html?project=devel%3Alibraries%3Acaf&package=caf [obs-nightly]: https://software.opensuse.org/download.html?project=devel%3Alibraries%3Acaf%3Anightly&package=caf [obs-dev]: https://software.opensuse.org/download.html?project=devel%3Alibraries%3Acaf&package=caf-devel [obs-dev-nightly]: https://software.opensuse.org/download.html?project=devel%3Alibraries%3Acaf%3Anightly&package=caf-devel [jenkins-badge]: https://jenkins.inet.haw-hamburg.de/buildStatus/icon?job=CAF/actor-framework/master [docs-badge]: https://readthedocs.org/projects/actor-framework/badge/?version=latest [coverity-badge]: https://scan.coverity.com/projects/5555/badge.svg?flat=1 [gitter-badge]: https://img.shields.io/badge/gitter-join%20chat%20%E2%86%92-brightgreen.svg [in-progress-badge]: https://badge.waffle.io/actor-framework/actor-framework.png?label=In%20Progress&title=Issues%20in%20progress actor-framework-0.16.3/cmake/000077500000000000000000000000001341123343400157625ustar00rootroot00000000000000actor-framework-0.16.3/cmake/FindCAF.cmake000066400000000000000000000104551341123343400201630ustar00rootroot00000000000000# Try to find CAF headers and libraries. # # Use this module as follows: # # find_package(CAF [COMPONENTS *] [REQUIRED]) # # Variables used by this module (they can change the default behaviour and need # to be set before calling find_package): # # CAF_ROOT_DIR Set this variable either to an installation prefix or to wa # CAF build directory where to look for the CAF libraries. # # Variables defined by this module: # # CAF_FOUND System has CAF headers and library # CAF_LIBRARIES List of library files for all components # CAF_INCLUDE_DIRS List of include paths for all components # CAF_LIBRARY_$C Library file for component $C # CAF_INCLUDE_DIR_$C Include path for component $C if(CAF_FIND_COMPONENTS STREQUAL "") message(FATAL_ERROR "FindCAF requires at least one COMPONENT.") endif() # iterate over user-defined components foreach (comp ${CAF_FIND_COMPONENTS}) # we use uppercase letters only for variable names string(TOUPPER "${comp}" UPPERCOMP) if ("${comp}" STREQUAL "core") set(HDRNAME "caf/all.hpp") elseif ("${comp}" STREQUAL "test") set(HDRNAME "caf/test/unit_test.hpp") else () set(HDRNAME "caf/${comp}/all.hpp") endif () if (CAF_ROOT_DIR) set(header_hints "${CAF_ROOT_DIR}/include" "${CAF_ROOT_DIR}/libcaf_${comp}" "${CAF_ROOT_DIR}/../libcaf_${comp}" "${CAF_ROOT_DIR}/../../libcaf_${comp}") endif () find_path(CAF_INCLUDE_DIR_${UPPERCOMP} NAMES ${HDRNAME} HINTS ${header_hints} /usr/include /usr/local/include /opt/local/include /sw/include ${CMAKE_INSTALL_PREFIX}/include) mark_as_advanced(CAF_INCLUDE_DIR_${UPPERCOMP}) if (NOT "${CAF_INCLUDE_DIR_${UPPERCOMP}}" STREQUAL "CAF_INCLUDE_DIR_${UPPERCOMP}-NOTFOUND") # mark as found (set back to false when missing library or build header) set(CAF_${comp}_FOUND true) # check for CMake-generated build header for the core component if ("${comp}" STREQUAL "core") find_path(caf_build_header_path NAMES caf/detail/build_config.hpp HINTS ${header_hints} /usr/include /usr/local/include /opt/local/include /sw/include ${CMAKE_INSTALL_PREFIX}/include) if ("${caf_build_header_path}" STREQUAL "caf_build_header_path-NOTFOUND") message(WARNING "Found all.hpp for CAF core, but not build_config.hpp") set(CAF_${comp}_FOUND false) else() list(APPEND CAF_INCLUDE_DIRS "${caf_build_header_path}") endif() endif() list(APPEND CAF_INCLUDE_DIRS "${CAF_INCLUDE_DIR_${UPPERCOMP}}") # look for (.dll|.so|.dylib) file, again giving hints for non-installed CAFs # skip probe_event as it is header only if (NOT ${comp} STREQUAL "probe_event" AND NOT ${comp} STREQUAL "test") if (CAF_ROOT_DIR) set(library_hints "${CAF_ROOT_DIR}/lib") endif () find_library(CAF_LIBRARY_${UPPERCOMP} NAMES "caf_${comp}" "caf_${comp}_static" HINTS ${library_hints} /usr/lib /usr/local/lib /opt/local/lib /sw/lib ${CMAKE_INSTALL_PREFIX}/lib) mark_as_advanced(CAF_LIBRARY_${UPPERCOMP}) if ("${CAF_LIBRARY_${UPPERCOMP}}" STREQUAL "CAF_LIBRARY_${UPPERCOMP}-NOTFOUND") set(CAF_${comp}_FOUND false) else () set(CAF_LIBRARIES ${CAF_LIBRARIES} ${CAF_LIBRARY_${UPPERCOMP}}) endif () endif () endif () endforeach () if (DEFINED CAF_INCLUDE_DIRS) list(REMOVE_DUPLICATES CAF_INCLUDE_DIRS) endif() # let CMake check whether all requested components have been found include(FindPackageHandleStandardArgs) find_package_handle_standard_args(CAF FOUND_VAR CAF_FOUND REQUIRED_VARS CAF_LIBRARIES CAF_INCLUDE_DIRS HANDLE_COMPONENTS) # final step to tell CMake we're done mark_as_advanced(CAF_ROOT_DIR CAF_LIBRARIES CAF_INCLUDE_DIRS) actor-framework-0.16.3/cmake/MSVC_v140_clang_c2.cmake000066400000000000000000000007451341123343400220440ustar00rootroot00000000000000## FLAGS FOR MSVC v140_clang_c2 set(CMAKE_CXX_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /GR -Od -g2 -gdwarf-2 -std=c++1z -fms-extensions -fexceptions") set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "/MT /GR -O1 /D NDEBUG -std=c++1z -fms-extensions -fexceptions") set(CMAKE_CXX_FLAGS_RELEASE_INIT "/MT /GR -O3 /D NDEBUG -std=c++1z -fms-extensions -fexceptions") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "/MT /GR -O2 /D NDEBUG -gline-tables-only -std=c++1z -fms-extensions -fexceptions") actor-framework-0.16.3/cmake/build_config.hpp.in000066400000000000000000000032411341123343400215240ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright (C) 2011 - 2016 * * Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/detail/log_level.hpp" // this header is auto-generated by CMake #define CAF_LOG_LEVEL CAF_LOG_LEVEL_@CAF_LOG_LEVEL@ #cmakedefine CAF_NO_MEM_MANAGEMENT #cmakedefine CAF_ENABLE_RUNTIME_CHECKS #cmakedefine CAF_NO_EXCEPTIONS actor-framework-0.16.3/cmake/cmake_uninstall.cmake.in000066400000000000000000000017631341123343400225510ustar00rootroot00000000000000if (NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) string(REGEX REPLACE "\n" ";" files "${files}") list(REVERSE files) foreach (file ${files}) message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") if (EXISTS "$ENV{DESTDIR}${file}") execute_process( COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}" OUTPUT_VARIABLE rm_out RESULT_VARIABLE rm_retval ) if(NOT ${rm_retval} EQUAL 0) message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") endif (NOT ${rm_retval} EQUAL 0) else (EXISTS "$ENV{DESTDIR}${file}") message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") endif (EXISTS "$ENV{DESTDIR}${file}") endforeach(file) actor-framework-0.16.3/cmake/get_compiler_version.cpp000066400000000000000000000004461341123343400227100ustar00rootroot00000000000000#include using namespace std; int main() { # ifdef __clang__ cout << __clang_major__ << "." << __clang_minor__; # elif defined(__GNUC__) cout << __GNUC__ << "." << __GNUC_MINOR__; # else cout << "0.0"; # endif return 0; } actor-framework-0.16.3/configure000077500000000000000000000342351341123343400166200ustar00rootroot00000000000000#!/bin/sh # Convenience wrapper for easily viewing/setting options that # the project's CMake scripts will recognize. # check for `cmake` command type cmake > /dev/null 2>&1 || { echo "\ This package requires CMake, please install it first, then you may use this configure script to access CMake equivalent functionality.\ " >&2; exit 1; } command="$0 $*" dirname_0=`dirname $0` sourcedir=`cd $dirname_0 && pwd` usage="\ Usage: $0 [OPTION]... [VAR=VALUE]... Build Options: --generator=GENERATOR set CMake generator (see cmake --help) --build-type=TYPE set CMake build type [RelWithDebInfo]: - Debug: debugging flags enabled - MinSizeRel: minimal output size - Release: optimizations on, debugging off - RelWithDebInfo: release flags plus debugging --extra-flags=STRING additional compiler flags --build-dir=DIR place build files in directory [build] --bin-dir=DIR executable directory [build/bin] --lib-dir=DIR library directory [build/lib] --with-clang=FILE path to clang++ executable --with-gcc=FILE path to g++ executable --with-qt-prefix=PATH prefix path for Qt5 cmake modules --with-openssl=PATH path to OpenSSL library and headers --dual-build build using both gcc and clang --build-static build as static and shared library --build-static-only build as static library only --static-runtime build with static C++ runtime --more-warnings enables most warnings --no-compiler-check disable compiler version check --no-auto-libc++ do not automatically enable libc++ for Clang --no-exceptions do not catch exceptions in CAF --force-no-exceptions build CAF with '-fno-exceptions' --warnings-as-errors build with '-Werror' --with-ccache use ccache to improve build performance Optional Targets: --with-qt-examples build Qt example(s) --with-protobuf-examples build Google Protobuf example(s) --with-tex-manual build the LaTeX manual Installation Directories: --prefix=PREFIX installation directory [/usr/local] Remove Standard Features (even if all dependencies are available): --no-memory-management build without memory management --no-examples build without examples --no-curl-examples build without libcurl examples --no-unit-tests build without unit tests --no-opencl build without OpenCL module --no-openssl build without OpenSSL module --no-tools build without CAF tools such as caf-run --no-io build without I/O module --no-python build without python binding --no-summary do not print configuration before building --libs-only sets no-examples, no-tools, no-python, and no-unit-tests --core-only same as libs-only but also adds sets no-opencl, no-openssl, and no-io Debugging: --with-runtime-checks build with requirement checks at runtime --with-log-level=LVL build with debugging output, possible values: - ERROR - WARNING - INFO - DEBUG - TRACE --with-address-sanitizer build with address sanitizer if available --with-asan alias for --with-address-sanitier --enable-asan alias for --with-address-sanitier --with-gcov build with gcov coverage enabled Convenience options: --dev-mode sets --build-type=debug, --no-examples, --no-tools, --with-runtime-checks, --log-level=trace, and --enable-asan Influential Environment Variables (only on first invocation): CXX C++ compiler command CXXFLAGS C++ compiler flags (overrides defaults) LDFLAGS Additional linker flags CMAKE_GENERATOR Selects a custom generator Python Build Options: --with-python-config=FILE Use python-conf binary to determine includes and libs iOS Build Options (should be used with XCode generator): --sysroot=DIR set system root for Clang - iphoneos: for iOS device - iphonesimulator: for iOS simulator --ios-min-ver=VERSION set the ios deployment target version " # Appends a CMake cache entry definition to the CMakeCacheEntries variable. # $1 is the cache entry variable name # $2 is the cache entry variable type # $3 is the cache entry variable value append_cache_entry () { case "$3" in *\ * ) # string contains whitespace CMakeCacheEntries="$CMakeCacheEntries -D \"$1:$2=$3\"" ;; *) # string contains whitespace CMakeCacheEntries="$CMakeCacheEntries -D $1:$2=$3" ;; esac } # Creates a build directory via CMake. # $1 is the path to a compiler executable. # $2 is the suffix of the build directory. # $3 is the executable output path. # $4 is the library output path. # $5 is the CMake generator. configure () { CMakeCacheEntries=$CMakeDefaultCache if [ -n "$1" ]; then append_cache_entry CMAKE_CXX_COMPILER FILEPATH $1 fi case "$builddir" in /*) #absolute path given absolute_builddir="$builddir" ;; *) # relative path given; convert to absolute path absolute_builddir="$PWD/$builddir" ;; esac if [ -n "$2" ]; then workdir="$absolute_builddir-$2" else workdir="$absolute_builddir" fi workdirs="$workdirs $workdir" if [ -n "$3" ]; then append_cache_entry EXECUTABLE_OUTPUT_PATH PATH "$3" else append_cache_entry EXECUTABLE_OUTPUT_PATH PATH "$workdir/bin" fi if [ -n "$4" ]; then append_cache_entry LIBRARY_OUTPUT_PATH PATH "$4" else append_cache_entry LIBRARY_OUTPUT_PATH PATH "$workdir/lib" fi if [ -d "$workdir" ]; then # If a build directory exists, check if it has a CMake cache. if [ -f "$workdir/CMakeCache.txt" ]; then # If the CMake cache exists, delete it so that this configuration # is not tainted by a previous one. rm -f "$workdir/CMakeCache.txt" fi else mkdir -p "$workdir" fi cd "$workdir" if [ -n "$5" ]; then cmake -G "$5" $CMakeCacheEntries "$sourcedir" else cmake $CMakeCacheEntries "$sourcedir" fi printf "#!/bin/sh\n\n" > config.status printf "# Switch to the source of this build directory.\n" >> config.status printf "cd \"$sourcedir\"\n\n" >> config.status printf "# Invoke the command to configure this build.\n" >> config.status if [ -n "$CC" ]; then printf "CC=\"%s\"\n" "$CC" >> config.status fi if [ -n "$CXX" ]; then printf "CXX=\"%s\"\n" "$CXX" >> config.status fi if [ -n "$CXXFLAGS" ]; then printf "CXXFLAGS=\"%s\"\n" "$CXXFLAGS" >> config.status fi if [ -n "$LDFLAGS" ]; then printf "LDFLAGS=\"%s\"\n" "$LDFLAGS" >> config.status fi echo $command >> config.status chmod u+x config.status } # Set defaults. builddir="$sourcedir/build" CMakeCacheEntries="" append_cache_entry CMAKE_INSTALL_PREFIX PATH /usr/local append_cache_entry CAF_ENABLE_RUNTIME_CHECKS BOOL false # parse custom environment variable to initialize CMakeGenerator if [ -n "$CMAKE_GENERATOR" ]; then CMakeGenerator="$CMAKE_GENERATOR" fi # Parse arguments. while [ $# -ne 0 ]; do case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case "$1" in --help|-h) echo "${usage}" 1>&2 exit 1 ;; --generator=*) CMakeGenerator="$optarg" ;; --prefix=*) append_cache_entry CMAKE_INSTALL_PREFIX PATH "$optarg" ;; --with-runtime-checks) append_cache_entry CAF_ENABLE_RUNTIME_CHECKS BOOL yes ;; --with-address-sanitizer) append_cache_entry CAF_ENABLE_ADDRESS_SANITIZER BOOL yes ;; --with-asan) append_cache_entry CAF_ENABLE_ADDRESS_SANITIZER BOOL yes ;; --enable-asan) append_cache_entry CAF_ENABLE_ADDRESS_SANITIZER BOOL yes ;; --with-gcov) append_cache_entry CAF_ENABLE_GCOV BOOL yes ;; --no-memory-management) append_cache_entry CAF_NO_MEM_MANAGEMENT BOOL yes ;; --more-warnings) append_cache_entry CAF_MORE_WARNINGS BOOL yes ;; --no-compiler-check) append_cache_entry CAF_NO_COMPILER_CHECK BOOL yes ;; --no-auto-libc++) append_cache_entry CAF_NO_AUTO_LIBCPP BOOL yes ;; --no-exceptions) append_cache_entry CAF_NO_EXCEPTIONS BOOL yes ;; --force-no-exceptions) append_cache_entry CAF_NO_EXCEPTIONS BOOL yes append_cache_entry CAF_FORCE_NO_EXCEPTIONS BOOL yes ;; --warnings-as-errors) append_cache_entry CAF_CXX_WARNINGS_AS_ERRORS BOOL yes ;; --with-ccache) append_cache_entry CAF_USE_CCACHE BOOL yes ;; --sysroot=*) append_cache_entry CAF_OSX_SYSROOT PATH "$optarg" ;; --ios-min-ver=*) append_cache_entry CMAKE_OSX_ARCHITECTURES STRING "\$(ARCHS_STANDARD_32_64_BIT)" append_cache_entry CAF_IOS_DEPLOYMENT_TARGET STRING "$optarg" ;; --with-log-level=*) append_cache_entry CAF_LOG_LEVEL STRING "$optarg" ;; --with-clang=*) clang="$optarg" ;; --with-gcc=*) gcc="$optarg" ;; --with-qt-prefix=*) append_cache_entry CAF_QT_PREFIX_PATH STRING "$optarg" ;; --with-openssl=*) append_cache_entry OPENSSL_ROOT_DIR PATH "$optarg" ;; --build-type=*) append_cache_entry CMAKE_BUILD_TYPE STRING "$optarg" ;; --extra-flags=*) append_cache_entry EXTRA_FLAGS STRING "$optarg" ;; --build-dir=*) builddir="$optarg" ;; --bin-dir=*) bindir="$optarg" ;; --lib-dir=*) libdir="$optarg" ;; --dual-build) dualbuild=1 ;; --no-examples) append_cache_entry CAF_NO_EXAMPLES BOOL yes ;; --with-qt-examples) append_cache_entry CAF_BUILD_QT_EXAMPLES BOOL yes ;; --with-protobuf-examples) append_cache_entry CAF_BUILD_PROTOBUF_EXAMPLES BOOL yes ;; --with-tex-manual) append_cache_entry CAF_BUILD_TEX_MANUAL BOOL yes ;; --no-curl-examples) append_cache_entry CAF_NO_CURL_EXAMPLES BOOL yes ;; --no-unit-tests) append_cache_entry CAF_NO_UNIT_TESTS BOOL yes ;; --no-opencl) append_cache_entry CAF_NO_OPENCL BOOL yes ;; --no-openssl) append_cache_entry CAF_NO_OPENSSL BOOL yes ;; --build-static) append_cache_entry CAF_BUILD_STATIC BOOL yes ;; --build-static-only) append_cache_entry CAF_BUILD_STATIC_ONLY BOOL yes ;; --static-runtime) append_cache_entry CAF_BUILD_STATIC_RUNTIME BOOL yes ;; --with-python-config=*) append_cache_entry CAF_PYTHON_CONFIG_BIN FILEPATH "$optarg" ;; --no-tools) append_cache_entry CAF_NO_TOOLS BOOL yes ;; --no-io) append_cache_entry CAF_NO_IO BOOL yes ;; --no-python) append_cache_entry CAF_NO_PYTHON BOOL yes ;; --no-summary) append_cache_entry CAF_NO_SUMMARY BOOL yes ;; --libs-only) for var in CAF_NO_TOOLS CAF_NO_PYTHON CAF_NO_EXAMPLES CAF_NO_UNIT_TESTS; do append_cache_entry $var BOOL yes done ;; --core-only) for var in CAF_NO_TOOLS CAF_NO_PYTHON CAF_NO_EXAMPLES CAF_NO_UNIT_TESTS CAF_NO_IO CAF_NO_OPENCL CAF_NO_OPENSSL ; do append_cache_entry $var BOOL yes done ;; --dev-mode) append_cache_entry CMAKE_BUILD_TYPE STRING Debug append_cache_entry CAF_NO_EXAMPLES BOOL yes append_cache_entry CAF_NO_TOOLS BOOL yes append_cache_entry CAF_LOG_LEVEL STRING TRACE append_cache_entry CAF_ENABLE_RUNTIME_CHECKS BOOL yes append_cache_entry CAF_ENABLE_ADDRESS_SANITIZER BOOL yes ;; *) echo "Invalid option '$1'. Try $0 --help to see available options." exit 1 ;; esac shift done # At this point we save the global CMake variables so that configure() can # later use them. CMakeDefaultCache=$CMakeCacheEntries if [ -n "$dualbuild" ]; then # Use what we got in $PATH if --with-clang or --with-gcc is not specified. if [ -z "$clang" ]; then clang=clang++ fi if [ -z "$gcc" ]; then gcc=g++ fi for i in gcc clang; do eval "compiler=\$$i" configure $compiler $i "" "" $CMakeGenerator done else # Prefer Clang to GCC. if [ -n "$clang" ]; then compiler=$clang elif [ -n "$gcc" ]; then compiler=$gcc fi configure "$compiler" "" "$bindir" "$libdir" "$CMakeGenerator" fi actor-framework-0.16.3/doc/000077500000000000000000000000001341123343400154475ustar00rootroot00000000000000actor-framework-0.16.3/doc/CMakeLists.txt000066400000000000000000000102351341123343400202100ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8.12) project(doc NONE) add_custom_target(doc) # -- list all .tex source files ------------------------------------------------ set(sources tex/Actors.tex tex/Brokers.tex tex/CommonPitfalls.tex tex/ConfiguringActorApplications.tex tex/Error.tex tex/FAQ.tex tex/FirstSteps.tex tex/GroupCommunication.tex tex/Introduction.tex tex/ManagingGroupsOfWorkers.tex tex/MessageHandlers.tex tex/MessagePassing.tex tex/Messages.tex tex/MigrationGuides.tex tex/NetworkTransparency.tex tex/OpenCL.tex tex/ReferenceCounting.tex tex/Registry.tex tex/RemoteSpawn.tex tex/Scheduler.tex tex/Streaming.tex tex/TypeInspection.tex tex/UsingAout.tex tex/Utility.tex ) # -- process .in files ----------------------------------------------------- configure_file("cmake/Doxyfile.in" "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile" @ONLY) file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/tex") configure_file("cmake/variables.tex.in" "${CMAKE_CURRENT_BINARY_DIR}/tex/variables.tex" @ONLY) file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/rst") configure_file("cmake/conf.py.in" "${CMAKE_CURRENT_BINARY_DIR}/rst/conf.py" @ONLY) configure_file("cmake/index_footer.rst.in" "${CMAKE_CURRENT_BINARY_DIR}/rst/index_footer.rst" @ONLY) configure_file("cmake/index_header.rst.in" "${CMAKE_CURRENT_BINARY_DIR}/rst/index_header.rst" @ONLY) # -- Doxygen setup ------------------------------------------------------------- find_package(Doxygen) if(NOT DOXYGEN_FOUND) message(STATUS "Doxygen not found, skip building API documentation.") else() message(STATUS "Add optional target: doxygen.") add_custom_target(doxygen "${DOXYGEN_EXECUTABLE}" "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" COMMENT "Generating API documentation with Doxygen" VERBATIM) add_dependencies(doc doxygen) endif() # -- Pandoc utility macro ------------------------------------------------------ macro(generate_rst texfile) get_filename_component(rstfile_we "${texfile}" NAME_WE) set(rstfile "${rstfile_we}.rst") set(bin_texfile "${CMAKE_CURRENT_BINARY_DIR}/${texfile}") add_custom_target("${rstfile}" DEPENDS "${bin_texfile}" COMMAND ${PANDOC_EXECUTABLE} "--filter=${CMAKE_SOURCE_DIR}/scripts/pandoc-filter.py" --wrap=none -f latex -o "${CMAKE_CURRENT_BINARY_DIR}/rst/${rstfile}" "${bin_texfile}" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/rst") add_dependencies(rst "${rstfile}") endmacro() # -- LaTeX setup --------------------------------------------------------------- if (CAF_BUILD_TEX_MANUAL) find_package(LATEX) message(STATUS "Add optional target: manual.") include("cmake/UseLATEX.cmake") # enable synctex for convenient editing set(LATEX_USE_SYNCTEX yes) # add manual.pdf as target add_latex_document(tex/manual.tex INPUTS ${sources} "tex/variables.tex" IMAGE_DIRS "pdf" FORCE_PDF TARGET_NAME manual) add_dependencies(doc manual) find_program(PANDOC_EXECUTABLE pandoc) if(NOT EXISTS ${PANDOC_EXECUTABLE}) message(STATUS "Pandoc not found, skip generating reFormattedText version of the manual.") else() execute_process(COMMAND "python" "-c" "from pandocfilters import toJSONFilter; print('ok')" RESULT_VARIABLE has_pandocfilters OUTPUT_QUIET ERROR_QUIET) if(NOT ${has_pandocfilters} EQUAL 0) message(STATUS "Python with pandocfilters not found, skip generating reFormattedText version of the manual.") else() message(STATUS "Add optional target: rst.") add_custom_target(rst) add_dependencies(doc rst) foreach(texfile ${sources}) generate_rst(${texfile}) endforeach() endif() endif() endif() actor-framework-0.16.3/doc/cmake/000077500000000000000000000000001341123343400165275ustar00rootroot00000000000000actor-framework-0.16.3/doc/cmake/Doxyfile.in000066400000000000000000001421701341123343400206470ustar00rootroot00000000000000# Doxyfile 1.8.0 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Enable markdown support #--------------------------------------------------------------------------- MARKDOWN_SUPPORT = YES #--------------------------------------------------------------------------- # Project related actor_system& system, const uration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the actor_system& system, const file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = libcaf # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @CAF_VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, # Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, # Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, # Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 2 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = experimental="@attention This feature is **experimental**." # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C EXTENSION_MAPPING = C++ # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO #--------------------------------------------------------------------------- # Build related actor_system& system, const uration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = NO # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = YES # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = YES # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = NO # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # actor_system& system, const uration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = YES # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # actor_system& system, const uration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = "@CMAKE_HOME_DIRECTORY@/libcaf_core/caf" \ "@CMAKE_HOME_DIRECTORY@/libcaf_core/caf/meta" \ "@CMAKE_HOME_DIRECTORY@/libcaf_core/caf/mixin" \ "@CMAKE_HOME_DIRECTORY@/libcaf_core/caf/policy" \ "@CMAKE_HOME_DIRECTORY@/libcaf_core/caf/scheduler" \ "@CMAKE_HOME_DIRECTORY@/libcaf_io/caf/io" \ "@CMAKE_HOME_DIRECTORY@/libcaf_io/caf/io/network" # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = examples # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = YES # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = "@CMAKE_HOME_DIRECTORY@/doc/png/" # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # actor_system& system, const uration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = NO #--------------------------------------------------------------------------- # actor_system& system, const uration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # actor_system& system, const uration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 1 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to FRAME, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. Other possible values # for this tag are: HIERARCHIES, which will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list; # ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which # disables this behavior completely. For backwards compatibility with previous # releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE # respectively. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 #--------------------------------------------------------------------------- # Disable everything but HTML #--------------------------------------------------------------------------- GENERATE_LATEX = NO GENERATE_RTF = NO GENERATE_MAN = NO GENERATE_XML = NO GENERATE_AUTOGEN_DEF = NO GENERATE_PERLMOD = NO GENERATE_DOCSET = NO GENERATE_QHP = NO #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = CAF_DOCUMENTATION # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = YES # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Options related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = YES actor-framework-0.16.3/doc/cmake/UseLATEX.cmake000066400000000000000000002210651341123343400210710ustar00rootroot00000000000000# File: UseLATEX.cmake # CMAKE commands to actually use the LaTeX compiler # Version: 2.4.8 # Author: Kenneth Moreland # # Copyright 2004, 2015 Sandia Corporation. # Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive # license for use of this work by or on behalf of the U.S. Government. # # This software is released under the BSD 3-Clause License. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # 3. Neither the name of the copyright holder nor the names of its # contributors may be used to endorse or promote products derived from this # software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # # The following function is defined: # # add_latex_document( # [BIBFILES ] # [INPUTS ] # [IMAGE_DIRS] # [IMAGES] # [CONFIGURE] # [DEPENDS] # [MULTIBIB_NEWCITES] # [USE_BIBLATEX] # [USE_INDEX] # [INDEX_NAMES ] # [USE_GLOSSARY] [USE_NOMENCL] # [FORCE_PDF] [FORCE_DVI] [FORCE_HTML] # [TARGET_NAME] # [EXCLUDE_FROM_ALL] # [EXCLUDE_FROM_DEFAULTS]) # Adds targets that compile . The latex output is placed # in LATEX_OUTPUT_PATH or CMAKE_CURRENT_BINARY_DIR if the former is # not set. The latex program is picky about where files are located, # so all input files are copied from the source directory to the # output directory. This includes the target tex file, any tex file # listed with the INPUTS option, the bibliography files listed with # the BIBFILES option, and any .cls, .bst, .clo, .sty, .ist, and .fd # files found in the current source directory. Images found in the # IMAGE_DIRS directories or listed by IMAGES are also copied to the # output directory and converted to an appropriate format if necessary. # Any tex files also listed with the CONFIGURE option are also processed # with the CMake CONFIGURE_FILE command (with the @ONLY flag). Any file # listed in CONFIGURE but not the target tex file or listed with INPUTS # has no effect. DEPENDS can be used to specify generated files that are # needed to compile the latex target. # # The following targets are made. The name prefix is based off of the # base name of the tex file unless TARGET_NAME is specified. If # TARGET_NAME is specified, then that name is used for the targets. # # name_dvi: Makes .dvi # name_pdf: Makes .pdf using pdflatex. # name_safepdf: Makes .pdf using ps2pdf. If using the # default program arguments, this will ensure all fonts # are embedded and no lossy compression has been # performed on images. # name_ps: Makes .ps # name_html: Makes .html # name_auxclean: Deletes .aux and other auxiliary files. # This is sometimes necessary if a LaTeX error occurs # and writes a bad aux file. Unlike the regular clean # target, it does not delete other input files, such as # converted images, to save time on the rebuild. # # Unless the EXCLUDE_FROM_ALL option is given, one of these targets # is added to the ALL target and built by default. Which target is # determined by the LATEX_DEFAULT_BUILD CMake variable. See the # documentation of that variable for more details. # # Unless the EXCLUDE_FROM_DEFAULTS option is given, all these targets # are added as dependencies to targets named dvi, pdf, safepdf, ps, # html, and auxclean, respectively. # # USE_BIBLATEX enables the use of biblatex/biber as an alternative to # bibtex. Bibtex remains the default if USE_BIBLATEX is not # specified. # # If the argument USE_INDEX is given, then commands to build an index # are made. If the argument INDEX_NAMES is given, an index file is # generated for each name in this list. See the LaTeX package multind # for more information about how to generate multiple indices. # # If the argument USE_GLOSSARY is given, then commands to # build a glossary are made. If the argument MULTIBIB_NEWCITES is # given, then additional bibtex calls are added to the build to # support the extra auxiliary files created with the \newcite command # in the multibib package. # # History: # # 2.4.8 Fix synctex issue with absolute paths not being converted. # # 2.4.7 Fix some issues with spaces in the path of the working directory where # LaTeX is executed. # # 2.4.6 Fix parse issue with older versions of CMake. # # 2.4.5 Fix issues with files and paths containing spaces. # # 2.4.4 Improve error reporting message when LaTeX fails. # # When LaTeX fails, delete the output file, which is invalid. # # Add warnings for "missing characters." These usually mean that a # non-ASCII character is in the document and will not be printed # correctly. # # 2.4.3 Check for warnings from the natbib package. When using natbib, # warnings for missing bibliography references look different. So # far, natbib seems to be quiet unless something is important, so # look for all natbib warnings. (We can change this later if # necessary.) # # 2.4.2 Fix an issue where new versions of ImageMagick expect the order of # options in command line execution of magick/convert. (See, for # example, http://www.imagemagick.org/Usage/basics/#why.) # # 2.4.1 Add ability to dump LaTeX log file when using batch mode. Batch # mode suppresses most output, often including error messages. To # make sure critical error messages get displayed, show the full log # on failures. # # 2.4.0 Remove "-r 600" from the default PDFTOPS_CONVERTER_FLAGS. The -r flag # is available from the Poppler version of pdftops, but not the Xpdf # version. # # Fix an issue with the flags for the different programs not being # properly separated. # # Fix an issue on windows where the = character is not allowed for # ps2pdf arguments. # # Change default arguments for latex and pdflatex commands. Makes the # output more quiet and prints out the file/line where errors occur. # (Thanks to Nikos Koukis.) # # After a LaTeX build, check the log file for warnings that are # indicative of problems with the build. # # Remove support for latex2html. Instead, use the htlatex program. # This is now part of TeX Live and most other distributions. It also # behaves much more like the other LaTeX programs. Also fixed some # nasty issues with the htlatex arguments. # # 2.3.2 Declare LaTeX input files as sources for targets so that they show # up in IDEs like QtCreator. # # Fix issue where main tex files in subdirectories were creating # invalid targets for building HTML. Just disable the HTML targets in # this case. # # 2.3.1 Support use of magick command instead of convert command for # ImageMagick 7. # # 2.3.0 Add USE_BIBLATEX option to support the biblatex package, which # requires using the program biber as a replacement for bibtex # (thanks to David Tracey). # # 2.2.1 Add STRINGS property to LATEX_DEFAULT_BUILD to make it easier to # select the default build in the CMake GUI. # # 2.2.0 Add TARGET_NAME option. # # 2.1.1 Support for finding bmp, ppm, and other image files. # # 2.1.0 Fix an error where the pdf target and others were defined multiple # times if UseLATEX.cmake was included multiple times. # # Added INDEX_NAMES option to support multiple indexes in a single # document from the multind package (thanks to Dan Lipsa). # # 2.0.0 First major revision of UseLATEX.cmake updates to more recent features # of CMake and some non-backward compatible changes. # # Changed all function and macro names to lower case. CMake's identifiers # are case insensitive, but the convention moved from all upper case to # all lower case somewhere around the release of CMake 2. (The original # version of UseLATEX.cmake predates that.) # # Remove condition matching in if statements. They are no longer necessary # and are even discouraged (because else clauses get confusing). # # Use "new" features available in CMake such as list and argument parsing. # # Remove some code that has been deprecated for a while. # # Mark variables for compiler and converter executables as advanced to # match the more conventional CMake behavior. # # Changed how default builds are specified and add the ability to force # a particular build. # # Made the base targets (pdf, dvi, etc.) global. add_latex_document # always mangles its target names and these base targets depend on # the targets with mangled names. # # 1.10.5 Fix for Window's convert check (thanks to Martin Baute). # # 1.10.4 Copy font files to binary directory for packages that come with # their own fonts. # # 1.10.3 Check for Windows version of convert being used instead of # ImageMagick's version (thanks to Martin Baute). # # 1.10.2 Use htlatex as a fallback when latex2html is not available (thanks # to Tomasz Grzegurzko). # # 1.10.1 Make convert program mandatory only if actually used (thanks to # Julien Schueller). # # 1.10.0 Added NO_DEFAULT and DEFAULT_PS options. # Fixed issue with cleaning files for LaTeX documents originating in # a subdirectory. # # 1.9.6 Fixed problem with LATEX_SMALL_IMAGES. # Strengthened check to make sure the output directory does not contain # the source files. # # 1.9.5 Add support for image types not directly supported by either latex # or pdflatex. (Thanks to Jorge Gerardo Pena Pastor for SVG support.) # # 1.9.4 Fix issues with filenames containing multiple periods. # # 1.9.3 Hide some variables that are now cached but should not show up in # the ccmake list of variables. # # 1.9.2 Changed MACRO declarations to FUNCTION declarations. The better # FUNCTION scoping will hopefully avoid some common but subtle bugs. # This implicitly increases the minimum CMake version to 4.6 (although # I honestly only test it with the latest 4.8 version). # # Since we are updating the minimum CMake version, I'm going to start # using the builtin LIST commands that are now available. # # Favor using pdftops from the Poppler package to convert from pdf to # eps. It does a much better job than ImageMagick or ghostscript. # # 1.9.1 Fixed typo that caused the LATEX_SMALL_IMAGES option to fail to # activate. # # 1.9.0 Add support for the multibib package (thanks to Antonio LaTorre). # # 1.8.2 Fix corner case when an argument name was also a variable containing # the text of an argument. In this case, the CMake IF was matching # the argument text with the contents of the variable with the same # argument name. # # 1.8.1 Fix problem where ps2pdf was not getting the appropriate arguments. # # 1.8.0 Add support for synctex. # # 1.7.7 Support calling xindy when making glossaries. # # Improved make clean support. # # 1.7.6 Add support for the nomencl package (thanks to Myles English). # # 1.7.5 Fix issue with bibfiles being copied two different ways, which causes # Problems with dependencies (thanks to Edwin van Leeuwen). # # 1.7.4 Added the DEFAULT_SAFEPDF option (thanks to Raymond Wan). # # Added warnings when image directories are not found (and were # probably not given relative to the source directory). # # 1.7.3 Fix some issues with interactions between makeglossaries and bibtex # (thanks to Mark de Wever). # # 1.7.2 Use ps2pdf to convert eps to pdf to get around the problem with # ImageMagick dropping the bounding box (thanks to Lukasz Lis). # # 1.7.1 Fixed some dependency issues. # # 1.7.0 Added DEPENDS options (thanks to Theodore Papadopoulo). # # 1.6.1 Ported the makeglossaries command to CMake and embedded the port # into UseLATEX.cmake. # # 1.6.0 Allow the use of the makeglossaries command. Thanks to Oystein # S. Haaland for the patch. # # 1.5.0 Allow any type of file in the INPUTS lists, not just tex file # (suggested by Eric Noulard). As a consequence, the ability to # specify tex files without the .tex extension is removed. The removed # function is of dubious value anyway. # # When copying input files, skip over any file that exists in the # binary directory but does not exist in the source directory with the # assumption that these files were added by some other mechanism. I # find this useful when creating large documents with multiple # chapters that I want to build separately (for speed) as I work on # them. I use the same boilerplate as the starting point for all # and just copy it with different configurations. This was what the # separate ADD_LATEX_DOCUMENT method was supposed to originally be for. # Since its external use is pretty much deprecated, I removed that # documentation. # # 1.4.1 Copy .sty files along with the other class and package files. # # 1.4.0 Added a MANGLE_TARGET_NAMES option that will mangle the target names. # # Fixed problem with copying bib files that became apparent with # CMake 2.4. # # 1.3.0 Added a LATEX_OUTPUT_PATH variable that allows you or the user to # specify where the built latex documents to go. This is especially # handy if you want to do in-source builds. # # Removed the ADD_LATEX_IMAGES macro and absorbed the functionality # into ADD_LATEX_DOCUMENT. The old interface was always kind of # clunky anyway since you had to specify the image directory in both # places. It also made supporting LATEX_OUTPUT_PATH problematic. # # Added support for jpeg files. # # 1.2.0 Changed the configuration options yet again. Removed the NO_CONFIGURE # Replaced it with a CONFIGURE option that lists input files for which # configure should be run. # # The pdf target no longer depends on the dvi target. This allows you # to build latex documents that require pdflatex. Also added an option # to make the pdf target the default one. # # 1.1.1 Added the NO_CONFIGURE option. The @ character can be used when # specifying table column separators. If two or more are used, then # will incorrectly substitute them. # # 1.1.0 Added ability include multiple bib files. Added ability to do copy # sub-tex files for multipart tex files. # # 1.0.0 If both ps and pdf type images exist, just copy the one that # matches the current render mode. Replaced a bunch of STRING # commands with GET_FILENAME_COMPONENT commands that were made to do # the desired function. # # 0.4.0 First version posted to CMake Wiki. # if(__USE_LATEX_INCLUDED) return() endif() set(__USE_LATEX_INCLUDED TRUE) ############################################################################# # Find the location of myself while originally executing. If you do this # inside of a macro, it will recode where the macro was invoked. ############################################################################# set(LATEX_USE_LATEX_LOCATION ${CMAKE_CURRENT_LIST_FILE} CACHE INTERNAL "Location of UseLATEX.cmake file." FORCE ) ############################################################################# # Generic helper functions ############################################################################# include(CMakeParseArguments) function(latex_list_contains var value) set(input_list ${ARGN}) list(FIND input_list "${value}" index) if(index GREATER -1) set(${var} TRUE PARENT_SCOPE) else() set(${var} PARENT_SCOPE) endif() endfunction(latex_list_contains) # Match the contents of a file to a regular expression. function(latex_file_match variable filename regexp default) # The FILE STRINGS command would be a bit better, but I'm not totally sure # the match will always be to a whole line, and I don't want to break things. file(READ ${filename} file_contents) string(REGEX MATCHALL "${regexp}" match_result ${file_contents} ) if(match_result) set(${variable} "${match_result}" PARENT_SCOPE) else() set(${variable} "${default}" PARENT_SCOPE) endif() endfunction(latex_file_match) # A version of GET_FILENAME_COMPONENT that treats extensions after the last # period rather than the first. To the best of my knowledge, all filenames # typically used by LaTeX, including image files, have small extensions # after the last dot. function(latex_get_filename_component varname filename type) set(result) if("${type}" STREQUAL "NAME_WE") get_filename_component(name ${filename} NAME) string(REGEX REPLACE "\\.[^.]*\$" "" result "${name}") elseif("${type}" STREQUAL "EXT") get_filename_component(name ${filename} NAME) string(REGEX MATCH "\\.[^.]*\$" result "${name}") else() get_filename_component(result ${filename} ${type}) endif() set(${varname} "${result}" PARENT_SCOPE) endfunction(latex_get_filename_component) ############################################################################# # Functions that perform processing during a LaTeX build. ############################################################################# function(latex_execute_latex) if(NOT LATEX_TARGET) message(SEND_ERROR "Need to define LATEX_TARGET") endif() if(NOT LATEX_WORKING_DIRECTORY) message(SEND_ERROR "Need to define LATEX_WORKING_DIRECTORY") endif() if(NOT LATEX_FULL_COMMAND) message(SEND_ERROR "Need to define LATEX_FULL_COMMAND") endif() if(NOT LATEX_OUTPUT_FILE) message(SEND_ERROR "Need to define LATEX_OUTPUT_FILE") endif() set(full_command_original "${LATEX_FULL_COMMAND}") # Chose the native method for parsing command arguments. Newer versions of # CMake allow you to just use NATIVE_COMMAND. if (CMAKE_VERSION VERSION_GREATER 3.8) set(separate_arguments_mode NATIVE_COMMAND) else() if (WIN32) set(separate_arguments_mode WINDOWS_COMMAND) else() set(separate_arguments_mode UNIX_COMMAND) endif() endif() # Preps variables for use in execute_process. # Even though we expect LATEX_WORKING_DIRECTORY to have a single "argument," # we also want to make sure that we strip out any escape characters that can # foul up the WORKING_DIRECTORY argument. separate_arguments(LATEX_FULL_COMMAND UNIX_COMMAND "${LATEX_FULL_COMMAND}") separate_arguments(LATEX_WORKING_DIRECTORY_SEP UNIX_COMMAND "${LATEX_WORKING_DIRECTORY}") execute_process( COMMAND ${LATEX_FULL_COMMAND} WORKING_DIRECTORY "${LATEX_WORKING_DIRECTORY_SEP}" RESULT_VARIABLE execute_result ) if(NOT ${execute_result} EQUAL 0) # LaTeX tends to write a file when a failure happens. Delete that file so # that LaTeX will run again. file(REMOVE "${LATEX_WORKING_DIRECTORY}/${LATEX_OUTPUT_FILE}") message("\n\nLaTeX command failed") message("${full_command_original}") message("Log output:") file(READ "${LATEX_WORKING_DIRECTORY}/${LATEX_TARGET}.log" log_output) message("${log_output}") message(FATAL_ERROR "Successfully executed LaTeX, but LaTeX returned an error.") endif() endfunction(latex_execute_latex) function(latex_makeglossaries) # This is really a bare bones port of the makeglossaries perl script into # CMake scripting. message("**************************** In makeglossaries") if(NOT LATEX_TARGET) message(SEND_ERROR "Need to define LATEX_TARGET") endif() set(aux_file ${LATEX_TARGET}.aux) if(NOT EXISTS ${aux_file}) message(SEND_ERROR "${aux_file} does not exist. Run latex on your target file.") endif() latex_file_match(newglossary_lines ${aux_file} "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}" "@newglossary{main}{glg}{gls}{glo}" ) latex_file_match(istfile_line ${aux_file} "@istfilename[ \t]*{([^}]*)}" "@istfilename{${LATEX_TARGET}.ist}" ) string(REGEX REPLACE "@istfilename[ \t]*{([^}]*)}" "\\1" istfile ${istfile_line} ) string(REGEX MATCH ".*\\.xdy" use_xindy "${istfile}") if(use_xindy) message("*************** Using xindy") if(NOT XINDY_COMPILER) message(SEND_ERROR "Need to define XINDY_COMPILER") endif() else() message("*************** Using makeindex") if(NOT MAKEINDEX_COMPILER) message(SEND_ERROR "Need to define MAKEINDEX_COMPILER") endif() endif() foreach(newglossary ${newglossary_lines}) string(REGEX REPLACE "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}" "\\1" glossary_name ${newglossary} ) string(REGEX REPLACE "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}" "${LATEX_TARGET}.\\2" glossary_log ${newglossary} ) string(REGEX REPLACE "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}" "${LATEX_TARGET}.\\3" glossary_out ${newglossary} ) string(REGEX REPLACE "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}" "${LATEX_TARGET}.\\4" glossary_in ${newglossary} ) if(use_xindy) latex_file_match(xdylanguage_line ${aux_file} "@xdylanguage[ \t]*{${glossary_name}}{([^}]*)}" "@xdylanguage{${glossary_name}}{english}" ) string(REGEX REPLACE "@xdylanguage[ \t]*{${glossary_name}}{([^}]*)}" "\\1" language ${xdylanguage_line} ) # What crazy person makes a LaTeX index generator that uses different # identifiers for language than babel (or at least does not support # the old ones)? if(${language} STREQUAL "frenchb") set(language "french") elseif(${language} MATCHES "^n?germanb?$") set(language "german") elseif(${language} STREQUAL "magyar") set(language "hungarian") elseif(${language} STREQUAL "lsorbian") set(language "lower-sorbian") elseif(${language} STREQUAL "norsk") set(language "norwegian") elseif(${language} STREQUAL "portuges") set(language "portuguese") elseif(${language} STREQUAL "russianb") set(language "russian") elseif(${language} STREQUAL "slovene") set(language "slovenian") elseif(${language} STREQUAL "ukraineb") set(language "ukrainian") elseif(${language} STREQUAL "usorbian") set(language "upper-sorbian") endif() if(language) set(language_flags "-L ${language}") else() set(language_flags "") endif() latex_file_match(codepage_line ${aux_file} "@gls@codepage[ \t]*{${glossary_name}}{([^}]*)}" "@gls@codepage{${glossary_name}}{utf}" ) string(REGEX REPLACE "@gls@codepage[ \t]*{${glossary_name}}{([^}]*)}" "\\1" codepage ${codepage_line} ) if(codepage) set(codepage_flags "-C ${codepage}") else() # Ideally, we would check that the language is compatible with the # default codepage, but I'm hoping that distributions will be smart # enough to specify their own codepage. I know, it's asking a lot. set(codepage_flags "") endif() message("${XINDY_COMPILER} ${MAKEGLOSSARIES_COMPILER_ARGS} ${language_flags} ${codepage_flags} -I xindy -M ${glossary_name} -t ${glossary_log} -o ${glossary_out} ${glossary_in}" ) exec_program(${XINDY_COMPILER} ARGS ${MAKEGLOSSARIES_COMPILER_ARGS} ${language_flags} ${codepage_flags} -I xindy -M ${glossary_name} -t ${glossary_log} -o ${glossary_out} ${glossary_in} OUTPUT_VARIABLE xindy_output ) message("${xindy_output}") # So, it is possible (perhaps common?) for aux files to specify a # language and codepage that are incompatible with each other. Check # for that condition, and if it happens run again with the default # codepage. if("${xindy_output}" MATCHES "^Cannot locate xindy module for language (.+) in codepage (.+)\\.$") message("*************** Retrying xindy with default codepage.") exec_program(${XINDY_COMPILER} ARGS ${MAKEGLOSSARIES_COMPILER_ARGS} ${language_flags} -I xindy -M ${glossary_name} -t ${glossary_log} -o ${glossary_out} ${glossary_in} ) endif() else() message("${MAKEINDEX_COMPILER} ${MAKEGLOSSARIES_COMPILER_ARGS} -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}") exec_program(${MAKEINDEX_COMPILER} ARGS ${MAKEGLOSSARIES_COMPILER_ARGS} -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in} ) endif() endforeach(newglossary) endfunction(latex_makeglossaries) function(latex_makenomenclature) message("**************************** In makenomenclature") if(NOT LATEX_TARGET) message(SEND_ERROR "Need to define LATEX_TARGET") endif() if(NOT MAKEINDEX_COMPILER) message(SEND_ERROR "Need to define MAKEINDEX_COMPILER") endif() set(nomencl_out ${LATEX_TARGET}.nls) set(nomencl_in ${LATEX_TARGET}.nlo) exec_program(${MAKEINDEX_COMPILER} ARGS ${MAKENOMENCLATURE_COMPILER_ARGS} ${nomencl_in} -s "nomencl.ist" -o ${nomencl_out} ) endfunction(latex_makenomenclature) function(latex_correct_synctex) message("**************************** In correct SyncTeX") if(NOT LATEX_TARGET) message(SEND_ERROR "Need to define LATEX_TARGET") endif() if(NOT GZIP) message(SEND_ERROR "Need to define GZIP") endif() if(NOT LATEX_SOURCE_DIRECTORY) message(SEND_ERROR "Need to define LATEX_SOURCE_DIRECTORY") endif() if(NOT LATEX_BINARY_DIRECTORY) message(SEND_ERROR "Need to define LATEX_BINARY_DIRECTORY") endif() message("${LATEX_BINARY_DIRECTORY}") message("${LATEX_SOURCE_DIRECTORY}") set(synctex_file ${LATEX_BINARY_DIRECTORY}/${LATEX_TARGET}.synctex) set(synctex_file_gz ${synctex_file}.gz) if(EXISTS ${synctex_file_gz}) message("Making backup of synctex file.") configure_file(${synctex_file_gz} ${synctex_file}.bak.gz COPYONLY) message("Uncompressing synctex file.") exec_program(${GZIP} ARGS --decompress ${synctex_file_gz} ) message("Reading synctex file.") file(READ ${synctex_file} synctex_data) message("Replacing output paths with input paths.") foreach(extension tex cls bst clo sty ist fd) # Relative paths string(REGEX REPLACE "(Input:[0-9]+:)([^/\n][^\n]\\.${extension}*)" "\\1${LATEX_SOURCE_DIRECTORY}/\\2" synctex_data "${synctex_data}" ) # Absolute paths string(REGEX REPLACE "(Input:[0-9]+:)${LATEX_BINARY_DIRECTORY}([^\n]*\\.${extension})" "\\1${LATEX_SOURCE_DIRECTORY}\\2" synctex_data "${synctex_data}" ) endforeach(extension) message("Writing synctex file.") file(WRITE ${synctex_file} "${synctex_data}") message("Compressing synctex file.") exec_program(${GZIP} ARGS ${synctex_file} ) else() message(SEND_ERROR "File ${synctex_file_gz} not found. Perhaps synctex is not supported by your LaTeX compiler.") endif() endfunction(latex_correct_synctex) function(latex_check_important_warnings) set(log_file ${LATEX_TARGET}.log) message("\nChecking ${log_file} for important warnings.") if(NOT LATEX_TARGET) message(SEND_ERROR "Need to define LATEX_TARGET") endif() if(NOT EXISTS ${log_file}) message("Could not find log file: ${log_file}") return() endif() set(found_error) file(READ ${log_file} log) # Check for undefined references string(REGEX MATCHALL "\n[^\n]*Reference[^\n]*undefined[^\n]*" reference_warnings "${log}") if(reference_warnings) set(found_error TRUE) message("\nFound missing reference warnings.") foreach(warning ${reference_warnings}) string(STRIP "${warning}" warning_no_newline) message("${warning_no_newline}") endforeach(warning) endif() # Check for natbib warnings string(REGEX MATCHALL "\nPackage natbib Warning:[^\n]*" natbib_warnings "${log}") if(natbib_warnings) set(found_error TRUE) message("\nFound natbib package warnings.") foreach(warning ${natbib_warnings}) string(STRIP "${warning}" warning_no_newline) message("${warning_no_newline}") endforeach(warning) endif() # Check for overfull string(REGEX MATCHALL "\nOverfull[^\n]*" overfull_warnings "${log}") if(overfull_warnings) set(found_error TRUE) message("\nFound overfull warnings. These are indicative of layout errors.") foreach(warning ${overfull_warnings}) string(STRIP "${warning}" warning_no_newline) message("${warning_no_newline}") endforeach(warning) endif() # Check for invalid characters string(REGEX MATCHALL "\nMissing character:[^\n]*" invalid_character_warnings "${log}") if(invalid_character_warnings) set(found_error TRUE) message("\nFound invalid character warnings. These characters are likely not printed correctly.") foreach(warning ${invalid_character_warnings}) string(STRIP "${warning}" warning_no_newline) message("${warning_no_newline}") endforeach(warning) endif() if(found_error) latex_get_filename_component(log_file_path ${log_file} ABSOLUTE) message("\nConsult ${log_file_path} for more information on LaTeX build.") else() message("No known important warnings found.") endif(found_error) endfunction(latex_check_important_warnings) ############################################################################# # Helper functions for establishing LaTeX build. ############################################################################# function(latex_needit VAR NAME) if(NOT ${VAR}) message(SEND_ERROR "I need the ${NAME} command.") endif() endfunction(latex_needit) function(latex_wantit VAR NAME) if(NOT ${VAR}) message(STATUS "I could not find the ${NAME} command.") endif() endfunction(latex_wantit) function(latex_setup_variables) set(LATEX_OUTPUT_PATH "${LATEX_OUTPUT_PATH}" CACHE PATH "If non empty, specifies the location to place LaTeX output." ) find_package(LATEX) find_program(XINDY_COMPILER NAME xindy PATHS ${MIKTEX_BINARY_PATH} /usr/bin ) find_package(UnixCommands) find_program(PDFTOPS_CONVERTER NAMES pdftops DOC "The pdf to ps converter program from the Poppler package." ) find_program(HTLATEX_COMPILER NAMES htlatex PATHS ${MIKTEX_BINARY_PATH} /usr/bin ) mark_as_advanced( LATEX_COMPILER PDFLATEX_COMPILER BIBTEX_COMPILER BIBER_COMPILER MAKEINDEX_COMPILER XINDY_COMPILER DVIPS_CONVERTER PS2PDF_CONVERTER PDFTOPS_CONVERTER LATEX2HTML_CONVERTER HTLATEX_COMPILER ) latex_needit(LATEX_COMPILER latex) latex_wantit(PDFLATEX_COMPILER pdflatex) latex_wantit(HTLATEX_COMPILER htlatex) latex_needit(BIBTEX_COMPILER bibtex) latex_wantit(BIBER_COMPILER biber) latex_needit(MAKEINDEX_COMPILER makeindex) latex_wantit(DVIPS_CONVERTER dvips) latex_wantit(PS2PDF_CONVERTER ps2pdf) latex_wantit(PDFTOPS_CONVERTER pdftops) set(LATEX_COMPILER_FLAGS "-interaction=batchmode -file-line-error" CACHE STRING "Flags passed to latex.") set(PDFLATEX_COMPILER_FLAGS ${LATEX_COMPILER_FLAGS} CACHE STRING "Flags passed to pdflatex.") set(HTLATEX_COMPILER_TEX4HT_FLAGS "html" CACHE STRING "Options for the tex4ht.sty and *.4ht style files.") set(HTLATEX_COMPILER_TEX4HT_POSTPROCESSOR_FLAGS "" CACHE STRING "Options for the text4ht postprocessor.") set(HTLATEX_COMPILER_T4HT_POSTPROCESSOR_FLAGS "" CACHE STRING "Options for the t4ht postprocessor.") set(HTLATEX_COMPILER_LATEX_FLAGS ${LATEX_COMPILER_FLAGS} CACHE STRING "Flags passed from htlatex to the LaTeX compiler.") set(LATEX_SYNCTEX_FLAGS "-synctex=1" CACHE STRING "latex/pdflatex flags used to create synctex file.") set(BIBTEX_COMPILER_FLAGS "" CACHE STRING "Flags passed to bibtex.") set(BIBER_COMPILER_FLAGS "" CACHE STRING "Flags passed to biber.") set(MAKEINDEX_COMPILER_FLAGS "" CACHE STRING "Flags passed to makeindex.") set(MAKEGLOSSARIES_COMPILER_FLAGS "" CACHE STRING "Flags passed to makeglossaries.") set(MAKENOMENCLATURE_COMPILER_FLAGS "" CACHE STRING "Flags passed to makenomenclature.") set(DVIPS_CONVERTER_FLAGS "-Ppdf -G0 -t letter" CACHE STRING "Flags passed to dvips.") if(NOT WIN32) set(PS2PDF_CONVERTER_FLAGS "-dMaxSubsetPct=100 -dCompatibilityLevel=1.3 -dSubsetFonts=true -dEmbedAllFonts=true -dAutoFilterColorImages=false -dAutoFilterGrayImages=false -dColorImageFilter=/FlateEncode -dGrayImageFilter=/FlateEncode -dMonoImageFilter=/FlateEncode" CACHE STRING "Flags passed to ps2pdf.") else() # Most windows ports of ghostscript utilities use .bat files for ps2pdf # commands. bat scripts interpret "=" as a special character and separate # those arguments. To get around this, the ghostscript utilities also # support using "#" in place of "=". set(PS2PDF_CONVERTER_FLAGS "-dMaxSubsetPct#100 -dCompatibilityLevel#1.3 -dSubsetFonts#true -dEmbedAllFonts#true -dAutoFilterColorImages#false -dAutoFilterGrayImages#false -dColorImageFilter#/FlateEncode -dGrayImageFilter#/FlateEncode -dMonoImageFilter#/FlateEncode" CACHE STRING "Flags passed to ps2pdf.") endif() set(PDFTOPS_CONVERTER_FLAGS "" CACHE STRING "Flags passed to pdftops.") mark_as_advanced( LATEX_COMPILER_FLAGS PDFLATEX_COMPILER_FLAGS HTLATEX_COMPILER_TEX4HT_FLAGS HTLATEX_COMPILER_TEX4HT_POSTPROCESSOR_FLAGS HTLATEX_COMPILER_T4HT_POSTPROCESSOR_FLAGS HTLATEX_COMPILER_LATEX_FLAGS LATEX_SYNCTEX_FLAGS BIBTEX_COMPILER_FLAGS BIBER_COMPILER_FLAGS MAKEINDEX_COMPILER_FLAGS MAKEGLOSSARIES_COMPILER_FLAGS MAKENOMENCLATURE_COMPILER_FLAGS DVIPS_CONVERTER_FLAGS PS2PDF_CONVERTER_FLAGS PDFTOPS_CONVERTER_FLAGS ) # Because it is easier to type, the flags variables are entered as # space-separated strings much like you would in a shell. However, when # using a CMake command to execute a program, it works better to hold the # arguments in semicolon-separated lists (otherwise the whole string will # be interpreted as a single argument). Use the separate_arguments to # convert the space-separated strings to semicolon-separated lists. separate_arguments(LATEX_COMPILER_FLAGS) separate_arguments(PDFLATEX_COMPILER_FLAGS) separate_arguments(HTLATEX_COMPILER_LATEX_FLAGS) separate_arguments(LATEX_SYNCTEX_FLAGS) separate_arguments(BIBTEX_COMPILER_FLAGS) separate_arguments(BIBER_COMPILER_FLAGS) separate_arguments(MAKEINDEX_COMPILER_FLAGS) separate_arguments(MAKEGLOSSARIES_COMPILER_FLAGS) separate_arguments(MAKENOMENCLATURE_COMPILER_FLAGS) separate_arguments(DVIPS_CONVERTER_FLAGS) separate_arguments(PS2PDF_CONVERTER_FLAGS) separate_arguments(PDFTOPS_CONVERTER_FLAGS) # Not quite done. When you call separate_arguments on a cache variable, # the result is written to a local variable. That local variable goes # away when this function returns (which is before any of them are used). # So, copy these variables with local scope to cache variables with # global scope. set(LATEX_COMPILER_ARGS "${LATEX_COMPILER_FLAGS}" CACHE INTERNAL "") set(PDFLATEX_COMPILER_ARGS "${PDFLATEX_COMPILER_FLAGS}" CACHE INTERNAL "") set(HTLATEX_COMPILER_ARGS "${HTLATEX_COMPILER_LATEX_FLAGS}" CACHE INTERNAL "") set(LATEX_SYNCTEX_ARGS "${LATEX_SYNCTEX_FLAGS}" CACHE INTERNAL "") set(BIBTEX_COMPILER_ARGS "${BIBTEX_COMPILER_FLAGS}" CACHE INTERNAL "") set(BIBER_COMPILER_ARGS "${BIBER_COMPILER_FLAGS}" CACHE INTERNAL "") set(MAKEINDEX_COMPILER_ARGS "${MAKEINDEX_COMPILER_FLAGS}" CACHE INTERNAL "") set(MAKEGLOSSARIES_COMPILER_ARGS "${MAKEGLOSSARIES_COMPILER_FLAGS}" CACHE INTERNAL "") set(MAKENOMENCLATURE_COMPILER_ARGS "${MAKENOMENCLATURE_COMPILER_FLAGS}" CACHE INTERNAL "") set(DVIPS_CONVERTER_ARGS "${DVIPS_CONVERTER_FLAGS}" CACHE INTERNAL "") set(PS2PDF_CONVERTER_ARGS "${PS2PDF_CONVERTER_FLAGS}" CACHE INTERNAL "") set(PDFTOPS_CONVERTER_ARGS "${PDFTOPS_CONVERTER_FLAGS}" CACHE INTERNAL "") find_program(IMAGEMAGICK_CONVERT NAMES magick convert DOC "The convert program that comes with ImageMagick (available at http://www.imagemagick.org)." ) mark_as_advanced(IMAGEMAGICK_CONVERT) if(DEFINED ENV{LATEX_DEFAULT_BUILD}) set(default_build $ENV{LATEX_DEFAULT_BUILD}) else() set(default_build pdf) endif() set(LATEX_DEFAULT_BUILD "${default_build}" CACHE STRING "Choose the default type of LaTeX build. Valid options are pdf, dvi, ps, safepdf, html" ) set_property(CACHE LATEX_DEFAULT_BUILD PROPERTY STRINGS pdf dvi ps safepdf html ) option(LATEX_USE_SYNCTEX "If on, have LaTeX generate a synctex file, which WYSIWYG editors can use to correlate output files like dvi and pdf with the lines of LaTeX source that generates them. In addition to adding the LATEX_SYNCTEX_FLAGS to the command line, this option also adds build commands that \"corrects\" the resulting synctex file to point to the original LaTeX files rather than those generated by UseLATEX.cmake." OFF ) option(LATEX_SMALL_IMAGES "If on, the raster images will be converted to 1/6 the original size. This is because papers usually require 600 dpi images whereas most monitors only require at most 96 dpi. Thus, smaller images make smaller files for web distribution and can make it faster to read dvi files." OFF) if(LATEX_SMALL_IMAGES) set(LATEX_RASTER_SCALE 16 PARENT_SCOPE) set(LATEX_OPPOSITE_RASTER_SCALE 100 PARENT_SCOPE) else() set(LATEX_RASTER_SCALE 100 PARENT_SCOPE) set(LATEX_OPPOSITE_RASTER_SCALE 16 PARENT_SCOPE) endif() # Just holds extensions for known image types. They should all be lower case. # For historical reasons, these are all declared in the global scope. set(LATEX_DVI_VECTOR_IMAGE_EXTENSIONS .eps CACHE INTERNAL "") set(LATEX_DVI_RASTER_IMAGE_EXTENSIONS CACHE INTERNAL "") set(LATEX_DVI_IMAGE_EXTENSIONS ${LATEX_DVI_VECTOR_IMAGE_EXTENSIONS} ${LATEX_DVI_RASTER_IMAGE_EXTENSIONS} CACHE INTERNAL "" ) set(LATEX_PDF_VECTOR_IMAGE_EXTENSIONS .pdf CACHE INTERNAL "") set(LATEX_PDF_RASTER_IMAGE_EXTENSIONS .jpeg .jpg .png CACHE INTERNAL "") set(LATEX_PDF_IMAGE_EXTENSIONS ${LATEX_PDF_VECTOR_IMAGE_EXTENSIONS} ${LATEX_PDF_RASTER_IMAGE_EXTENSIONS} CACHE INTERNAL "" ) set(LATEX_OTHER_VECTOR_IMAGE_EXTENSIONS .ai .dot .svg CACHE INTERNAL "") set(LATEX_OTHER_RASTER_IMAGE_EXTENSIONS .bmp .bmp2 .bmp3 .dcm .dcx .ico .gif .pict .ppm .tif .tiff CACHE INTERNAL "") set(LATEX_OTHER_IMAGE_EXTENSIONS ${LATEX_OTHER_VECTOR_IMAGE_EXTENSIONS} ${LATEX_OTHER_RASTER_IMAGE_EXTENSIONS} CACHE INTERNAL "" ) set(LATEX_VECTOR_IMAGE_EXTENSIONS ${LATEX_DVI_VECTOR_IMAGE_EXTENSIONS} ${LATEX_PDF_VECTOR_IMAGE_EXTENSIONS} ${LATEX_OTHER_VECTOR_IMAGE_EXTENSIONS} CACHE INTERNAL "" ) set(LATEX_RASTER_IMAGE_EXTENSIONS ${LATEX_DVI_RASTER_IMAGE_EXTENSIONS} ${LATEX_PDF_RASTER_IMAGE_EXTENSIONS} ${LATEX_OTHER_RASTER_IMAGE_EXTENSIONS} CACHE INTERNAL "" ) set(LATEX_IMAGE_EXTENSIONS ${LATEX_DVI_IMAGE_EXTENSIONS} ${LATEX_PDF_IMAGE_EXTENSIONS} ${LATEX_OTHER_IMAGE_EXTENSIONS} CACHE INTERNAL "" ) endfunction(latex_setup_variables) function(latex_setup_targets) if(NOT TARGET pdf) add_custom_target(pdf) endif() if(NOT TARGET dvi) add_custom_target(dvi) endif() if(NOT TARGET ps) add_custom_target(ps) endif() if(NOT TARGET safepdf) add_custom_target(safepdf) endif() if(NOT TARGET html) add_custom_target(html) endif() if(NOT TARGET auxclean) add_custom_target(auxclean) endif() endfunction(latex_setup_targets) function(latex_get_output_path var) set(latex_output_path) if(LATEX_OUTPUT_PATH) get_filename_component( LATEX_OUTPUT_PATH_FULL "${LATEX_OUTPUT_PATH}" ABSOLUTE ) if("${LATEX_OUTPUT_PATH_FULL}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") message(SEND_ERROR "You cannot set LATEX_OUTPUT_PATH to the same directory that contains LaTeX input files.") else() set(latex_output_path "${LATEX_OUTPUT_PATH_FULL}") endif() else() if("${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") message(SEND_ERROR "LaTeX files must be built out of source or you must set LATEX_OUTPUT_PATH.") else() set(latex_output_path "${CMAKE_CURRENT_BINARY_DIR}") endif() endif() set(${var} ${latex_output_path} PARENT_SCOPE) endfunction(latex_get_output_path) function(latex_add_convert_command output_path input_path output_extension input_extension flags ) set(require_imagemagick_convert TRUE) set(convert_flags "") if(${input_extension} STREQUAL ".eps" AND ${output_extension} STREQUAL ".pdf") # ImageMagick has broken eps to pdf conversion # use ps2pdf instead if(PS2PDF_CONVERTER) set(require_imagemagick_convert FALSE) set(converter ${PS2PDF_CONVERTER}) set(convert_flags -dEPSCrop ${PS2PDF_CONVERTER_ARGS}) else() message(SEND_ERROR "Using postscript files with pdflatex requires ps2pdf for conversion.") endif() elseif(${input_extension} STREQUAL ".pdf" AND ${output_extension} STREQUAL ".eps") # ImageMagick can also be sketchy on pdf to eps conversion. Not good with # color spaces and tends to unnecessarily rasterize. # use pdftops instead if(PDFTOPS_CONVERTER) set(require_imagemagick_convert FALSE) set(converter ${PDFTOPS_CONVERTER}) set(convert_flags -eps ${PDFTOPS_CONVERTER_ARGS}) else() message(STATUS "Consider getting pdftops from Poppler to convert PDF images to EPS images.") set(convert_flags ${flags}) endif() else() set(convert_flags ${flags}) endif() if(require_imagemagick_convert) if(IMAGEMAGICK_CONVERT) string(TOLOWER ${IMAGEMAGICK_CONVERT} IMAGEMAGICK_CONVERT_LOWERCASE) if(${IMAGEMAGICK_CONVERT_LOWERCASE} MATCHES "system32[/\\\\]convert\\.exe") message(SEND_ERROR "IMAGEMAGICK_CONVERT set to Window's convert.exe for changing file systems rather than ImageMagick's convert for changing image formats. Please make sure ImageMagick is installed (available at http://www.imagemagick.org). If you have a recent version of ImageMagick (7.0 or higher), use the magick program instead of convert for IMAGEMAGICK_CONVERT.") else() set(converter ${IMAGEMAGICK_CONVERT}) # ImageMagick requires a special order of arguments where resize and # arguments of that nature must be placed after the input image path. add_custom_command(OUTPUT ${output_path} COMMAND ${converter} ARGS ${input_path} ${convert_flags} ${output_path} DEPENDS ${input_path} ) endif() else() message(SEND_ERROR "Could not find convert program. Please download ImageMagick from http://www.imagemagick.org and install.") endif() else() # Not ImageMagick convert add_custom_command(OUTPUT ${output_path} COMMAND ${converter} ARGS ${convert_flags} ${input_path} ${output_path} DEPENDS ${input_path} ) endif() endfunction(latex_add_convert_command) # Makes custom commands to convert a file to a particular type. function(latex_convert_image output_files_var input_file output_extension convert_flags output_extensions other_files ) set(output_file_list) set(input_dir ${CMAKE_CURRENT_SOURCE_DIR}) latex_get_output_path(output_dir) latex_get_filename_component(extension "${input_file}" EXT) # Check input filename for potential problems with LaTeX. latex_get_filename_component(name "${input_file}" NAME_WE) set(suggested_name "${name}") if(suggested_name MATCHES ".*\\..*") string(REPLACE "." "-" suggested_name "${suggested_name}") endif() if(suggested_name MATCHES ".* .*") string(REPLACE " " "-" suggested_name "${suggested_name}") endif() if(NOT suggested_name STREQUAL name) message(WARNING "Some LaTeX distributions have problems with image file names with multiple extensions or spaces. Consider changing ${name}${extension} to something like ${suggested_name}${extension}.") endif() string(REGEX REPLACE "\\.[^.]*\$" ${output_extension} output_file "${input_file}") latex_list_contains(is_type ${extension} ${output_extensions}) if(is_type) if(convert_flags) latex_add_convert_command(${output_dir}/${output_file} ${input_dir}/${input_file} ${output_extension} ${extension} "${convert_flags}") set(output_file_list ${output_dir}/${output_file}) else() # As a shortcut, we can just copy the file. add_custom_command(OUTPUT ${output_dir}/${input_file} COMMAND ${CMAKE_COMMAND} ARGS -E copy ${input_dir}/${input_file} ${output_dir}/${input_file} DEPENDS ${input_dir}/${input_file} ) set(output_file_list ${output_dir}/${input_file}) endif() else() set(do_convert TRUE) # Check to see if there is another input file of the appropriate type. foreach(valid_extension ${output_extensions}) string(REGEX REPLACE "\\.[^.]*\$" ${output_extension} try_file "${input_file}") latex_list_contains(has_native_file "${try_file}" ${other_files}) if(has_native_file) set(do_convert FALSE) endif() endforeach(valid_extension) # If we still need to convert, do it. if(do_convert) latex_add_convert_command(${output_dir}/${output_file} ${input_dir}/${input_file} ${output_extension} ${extension} "${convert_flags}") set(output_file_list ${output_dir}/${output_file}) endif() endif() set(${output_files_var} ${output_file_list} PARENT_SCOPE) endfunction(latex_convert_image) # Adds custom commands to process the given files for dvi and pdf builds. # Adds the output files to the given variables (does not replace). function(latex_process_images dvi_outputs_var pdf_outputs_var) latex_get_output_path(output_dir) set(dvi_outputs) set(pdf_outputs) foreach(file ${ARGN}) if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${file}") latex_get_filename_component(extension "${file}" EXT) set(convert_flags) # Check to see if we need to downsample the image. latex_list_contains(is_raster "${extension}" ${LATEX_RASTER_IMAGE_EXTENSIONS}) if(LATEX_SMALL_IMAGES) if(is_raster) set(convert_flags -resize ${LATEX_RASTER_SCALE}%) endif() endif() # Make sure the output directory exists. latex_get_filename_component(path "${output_dir}/${file}" PATH) make_directory("${path}") latex_convert_image(output_files "${file}" .pdf "${convert_flags}" "${LATEX_PDF_IMAGE_EXTENSIONS}" "${ARGN}") list(APPEND pdf_outputs ${output_files}) else() message(WARNING "Could not find file ${CMAKE_CURRENT_SOURCE_DIR}/${file}. Are you sure you gave relative paths to IMAGES?") endif() endforeach(file) set(${dvi_outputs_var} ${dvi_outputs} PARENT_SCOPE) set(${pdf_outputs_var} ${pdf_outputs} PARENT_SCOPE) endfunction(latex_process_images) function(latex_copy_globbed_files pattern dest) file(GLOB file_list ${pattern}) foreach(in_file ${file_list}) latex_get_filename_component(out_file ${in_file} NAME) configure_file(${in_file} ${dest}/${out_file} COPYONLY) endforeach(in_file) endfunction(latex_copy_globbed_files) function(latex_copy_input_file file) latex_get_output_path(output_dir) if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file}) latex_get_filename_component(path ${file} PATH) file(MAKE_DIRECTORY ${output_dir}/${path}) latex_list_contains(use_config ${file} ${LATEX_CONFIGURE}) if(use_config) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${file} ${output_dir}/${file} @ONLY ) add_custom_command(OUTPUT ${output_dir}/${file} COMMAND ${CMAKE_COMMAND} ARGS ${CMAKE_BINARY_DIR} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file} ) else() add_custom_command(OUTPUT ${output_dir}/${file} COMMAND ${CMAKE_COMMAND} ARGS -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${file} ${output_dir}/${file} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file} ) endif() else() if(EXISTS ${output_dir}/${file}) # Special case: output exists but input does not. Assume that it was # created elsewhere and skip the input file copy. else() message("Could not find input file ${CMAKE_CURRENT_SOURCE_DIR}/${file}") endif() endif() endfunction(latex_copy_input_file) ############################################################################# # Commands provided by the UseLATEX.cmake "package" ############################################################################# function(latex_usage command message) message(SEND_ERROR "${message}\n Usage: ${command}(\n [BIBFILES ...]\n [INPUTS ...]\n [IMAGE_DIRS ...]\n [IMAGES \n [CONFIGURE ...]\n [DEPENDS ...]\n [MULTIBIB_NEWCITES] \n [USE_BIBLATEX] [USE_INDEX] [USE_GLOSSARY] [USE_NOMENCL]\n [FORCE_PDF] [FORCE_DVI] [FORCE_HTML]\n [TARGET_NAME] \n [EXCLUDE_FROM_ALL]\n [EXCLUDE_FROM_DEFAULTS])" ) endfunction(latex_usage command message) # Parses arguments to add_latex_document and ADD_LATEX_TARGETS and sets the # variables LATEX_TARGET, LATEX_IMAGE_DIR, LATEX_BIBFILES, LATEX_DEPENDS, and # LATEX_INPUTS. function(parse_add_latex_arguments command latex_main_input) set(options USE_BIBLATEX USE_INDEX USE_GLOSSARY USE_NOMENCL FORCE_PDF FORCE_DVI FORCE_HTML EXCLUDE_FROM_ALL EXCLUDE_FROM_DEFAULTS # Deprecated options USE_GLOSSARIES DEFAULT_PDF DEFAULT_SAFEPDF DEFAULT_PS NO_DEFAULT MANGLE_TARGET_NAMES ) set(oneValueArgs TARGET_NAME ) set(multiValueArgs BIBFILES MULTIBIB_NEWCITES INPUTS IMAGE_DIRS IMAGES CONFIGURE DEPENDS INDEX_NAMES ) cmake_parse_arguments( LATEX "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) # Handle invalid and deprecated arguments if(LATEX_UNPARSED_ARGUMENTS) latex_usage(${command} "Invalid or deprecated arguments: ${LATEX_UNPARSED_ARGUMENTS}") endif() if(LATEX_USE_GLOSSARIES) latex_usage(${command} "USE_GLOSSARIES option removed in version 1.6.1. Use USE_GLOSSARY instead.") endif() if(LATEX_DEFAULT_PDF) latex_usage(${command} "DEFAULT_PDF option removed in version 2.0. Use FORCE_PDF option or LATEX_DEFAULT_BUILD CMake variable instead.") endif() if(LATEX_DEFAULT_SAFEPDF) latex_usage(${command} "DEFAULT_SAFEPDF option removed in version 2.0. Use LATEX_DEFAULT_BUILD CMake variable instead.") endif() if(LATEX_DEFAULT_DVI) latex_usage(${command} "DEFAULT_DVI option removed in version 2.0. Use FORCE_DVI option or LATEX_DEFAULT_BUILD CMake variable instead.") endif() if(LATEX_NO_DEFAULT) latex_usage(${command} "NO_DEFAULT option removed in version 2.0. Use EXCLUDE_FROM_ALL instead.") endif() if(LATEX_MANGLE_TARGET_NAMES) latex_usage(${command} "MANGLE_TARGET_NAMES option removed in version 2.0. All LaTeX targets use mangled names now.") endif() # Capture the first argument, which is the main LaTeX input. latex_get_filename_component(latex_target ${latex_main_input} NAME_WE) set(LATEX_MAIN_INPUT ${latex_main_input} PARENT_SCOPE) set(LATEX_TARGET ${latex_target} PARENT_SCOPE) # Propagate the result variables to the caller foreach(arg_name ${options} ${oneValueArgs} ${multiValueArgs}) set(var_name LATEX_${arg_name}) set(${var_name} ${${var_name}} PARENT_SCOPE) endforeach(arg_name) endfunction(parse_add_latex_arguments) function(add_latex_targets_internal) latex_get_output_path(output_dir) if(LATEX_USE_SYNCTEX) set(synctex_flags ${LATEX_SYNCTEX_ARGS}) else() set(synctex_flags) endif() # The commands to run LaTeX. They are repeated multiple times. set(latex_build_command ${LATEX_COMPILER} ${LATEX_COMPILER_ARGS} ${synctex_flags} ${LATEX_MAIN_INPUT} ) if(LATEX_COMPILER_ARGS MATCHES ".*batchmode.*") # Wrap command in script that dumps the log file on error. This makes sure # errors can be seen. set(latex_build_command ${CMAKE_COMMAND} -D LATEX_BUILD_COMMAND=execute_latex -D LATEX_TARGET=${LATEX_TARGET} -D LATEX_WORKING_DIRECTORY="${output_dir}" -D LATEX_FULL_COMMAND="${latex_build_command}" -D LATEX_OUTPUT_FILE="${LATEX_TARGET}.dvi" -P "${LATEX_USE_LATEX_LOCATION}" ) endif() set(pdflatex_build_command ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_ARGS} ${synctex_flags} ${LATEX_MAIN_INPUT} ) if(PDFLATEX_COMPILER_ARGS MATCHES ".*batchmode.*") # Wrap command in script that dumps the log file on error. This makes sure # errors can be seen. set(pdflatex_build_command ${CMAKE_COMMAND} -D LATEX_BUILD_COMMAND=execute_latex -D LATEX_TARGET=${LATEX_TARGET} -D LATEX_WORKING_DIRECTORY="${output_dir}" -D LATEX_FULL_COMMAND="${pdflatex_build_command}" -D LATEX_OUTPUT_FILE="${LATEX_TARGET}.pdf" -P "${LATEX_USE_LATEX_LOCATION}" ) endif() if(NOT LATEX_TARGET_NAME) # Use the main filename (minus the .tex) as the target name. Remove any # spaces since CMake cannot have spaces in its target names. string(REPLACE " " "_" LATEX_TARGET_NAME ${LATEX_TARGET}) endif() # Some LaTeX commands may need to be modified (or may not work) if the main # tex file is in a subdirectory. Make a flag for that. get_filename_component(LATEX_MAIN_INPUT_SUBDIR ${LATEX_MAIN_INPUT} DIRECTORY) # Set up target names. set(dvi_target ${LATEX_TARGET_NAME}_dvi) set(pdf_target ${LATEX_TARGET_NAME}_pdf) set(ps_target ${LATEX_TARGET_NAME}_ps) set(safepdf_target ${LATEX_TARGET_NAME}_safepdf) set(html_target ${LATEX_TARGET_NAME}_html) set(auxclean_target ${LATEX_TARGET_NAME}_auxclean) # Probably not all of these will be generated, but they could be. # Note that the aux file is added later. set(auxiliary_clean_files ${output_dir}/${LATEX_TARGET}.aux ${output_dir}/${LATEX_TARGET}.bbl ${output_dir}/${LATEX_TARGET}.blg ${output_dir}/${LATEX_TARGET}-blx.bib ${output_dir}/${LATEX_TARGET}.glg ${output_dir}/${LATEX_TARGET}.glo ${output_dir}/${LATEX_TARGET}.gls ${output_dir}/${LATEX_TARGET}.idx ${output_dir}/${LATEX_TARGET}.ilg ${output_dir}/${LATEX_TARGET}.ind ${output_dir}/${LATEX_TARGET}.ist ${output_dir}/${LATEX_TARGET}.log ${output_dir}/${LATEX_TARGET}.out ${output_dir}/${LATEX_TARGET}.toc ${output_dir}/${LATEX_TARGET}.lof ${output_dir}/${LATEX_TARGET}.xdy ${output_dir}/${LATEX_TARGET}.synctex.gz ${output_dir}/${LATEX_TARGET}.synctex.bak.gz ${output_dir}/${LATEX_TARGET}.dvi ${output_dir}/${LATEX_TARGET}.ps ${output_dir}/${LATEX_TARGET}.pdf ) set(image_list ${LATEX_IMAGES}) # For each directory in LATEX_IMAGE_DIRS, glob all the image files and # place them in LATEX_IMAGES. foreach(dir ${LATEX_IMAGE_DIRS}) if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${dir}) message(WARNING "Image directory ${CMAKE_CURRENT_SOURCE_DIR}/${dir} does not exist. Are you sure you gave relative directories to IMAGE_DIRS?") endif() foreach(extension ${LATEX_IMAGE_EXTENSIONS}) file(GLOB files ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/*${extension}) foreach(file ${files}) latex_get_filename_component(filename ${file} NAME) list(APPEND image_list ${dir}/${filename}) endforeach(file) endforeach(extension) endforeach(dir) latex_process_images(dvi_images pdf_images ${image_list}) set(make_dvi_command ${CMAKE_COMMAND} -E chdir ${output_dir} ${latex_build_command}) set(make_pdf_command ${CMAKE_COMMAND} -E chdir ${output_dir} ${pdflatex_build_command} ) set(make_dvi_depends ${LATEX_DEPENDS} ${dvi_images}) set(make_pdf_depends ${LATEX_DEPENDS} ${pdf_images}) foreach(input ${LATEX_MAIN_INPUT} ${LATEX_INPUTS}) list(APPEND make_dvi_depends ${output_dir}/${input}) list(APPEND make_pdf_depends ${output_dir}/${input}) if(${input} MATCHES "\\.tex$") # Dependent .tex files might have their own .aux files created. Make # sure these get cleaned as well. This might replicate the cleaning # of the main .aux file, which is OK. string(REGEX REPLACE "\\.tex$" "" input_we ${input}) list(APPEND auxiliary_clean_files ${output_dir}/${input_we}.aux ${output_dir}/${input}.aux ) endif() endforeach(input) set(all_latex_sources ${LATEX_MAIN_INPUT} ${LATEX_INPUTS} ${image_list}) if(LATEX_USE_GLOSSARY) foreach(dummy 0 1) # Repeat these commands twice. set(make_dvi_command ${make_dvi_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${CMAKE_COMMAND} -D LATEX_BUILD_COMMAND=makeglossaries -D LATEX_TARGET=${LATEX_TARGET} -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER} -D XINDY_COMPILER=${XINDY_COMPILER} -D MAKEGLOSSARIES_COMPILER_ARGS=${MAKEGLOSSARIES_COMPILER_ARGS} -P ${LATEX_USE_LATEX_LOCATION} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${latex_build_command} ) set(make_pdf_command ${make_pdf_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${CMAKE_COMMAND} -D LATEX_BUILD_COMMAND=makeglossaries -D LATEX_TARGET=${LATEX_TARGET} -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER} -D XINDY_COMPILER=${XINDY_COMPILER} -D MAKEGLOSSARIES_COMPILER_ARGS=${MAKEGLOSSARIES_COMPILER_ARGS} -P ${LATEX_USE_LATEX_LOCATION} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${pdflatex_build_command} ) endforeach(dummy) endif() if(LATEX_USE_NOMENCL) foreach(dummy 0 1) # Repeat these commands twice. set(make_dvi_command ${make_dvi_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${CMAKE_COMMAND} -D LATEX_BUILD_COMMAND=makenomenclature -D LATEX_TARGET=${LATEX_TARGET} -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER} -D MAKENOMENCLATURE_COMPILER_ARGS=${MAKENOMENCLATURE_COMPILER_ARGS} -P ${LATEX_USE_LATEX_LOCATION} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${latex_build_command} ) set(make_pdf_command ${make_pdf_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${CMAKE_COMMAND} -D LATEX_BUILD_COMMAND=makenomenclature -D LATEX_TARGET=${LATEX_TARGET} -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER} -D MAKENOMENCLATURE_COMPILER_ARGS=${MAKENOMENCLATURE_COMPILER_ARGS} -P ${LATEX_USE_LATEX_LOCATION} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${pdflatex_build_command} ) endforeach(dummy) endif() if(LATEX_BIBFILES) if(LATEX_USE_BIBLATEX) if(NOT BIBER_COMPILER) message(SEND_ERROR "I need the biber command.") endif() set(bib_compiler ${BIBER_COMPILER}) set(bib_compiler_flags ${BIBER_COMPILER_ARGS}) else() set(bib_compiler ${BIBTEX_COMPILER}) set(bib_compiler_flags ${BIBTEX_COMPILER_ARGS}) endif() if(LATEX_MULTIBIB_NEWCITES) foreach (multibib_auxfile ${LATEX_MULTIBIB_NEWCITES}) latex_get_filename_component(multibib_target ${multibib_auxfile} NAME_WE) set(make_dvi_command ${make_dvi_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${bib_compiler} ${bib_compiler_flags} ${multibib_target}) set(make_pdf_command ${make_pdf_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${bib_compiler} ${bib_compiler_flags} ${multibib_target}) set(auxiliary_clean_files ${auxiliary_clean_files} ${output_dir}/${multibib_target}.aux) endforeach (multibib_auxfile ${LATEX_MULTIBIB_NEWCITES}) else() set(make_dvi_command ${make_dvi_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${bib_compiler} ${bib_compiler_flags} ${LATEX_TARGET}) set(make_pdf_command ${make_pdf_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${bib_compiler} ${bib_compiler_flags} ${LATEX_TARGET}) endif() foreach (bibfile ${LATEX_BIBFILES}) list(APPEND make_dvi_depends ${output_dir}/${bibfile}) list(APPEND make_pdf_depends ${output_dir}/${bibfile}) endforeach (bibfile ${LATEX_BIBFILES}) else() if(LATEX_MULTIBIB_NEWCITES) message(WARNING "MULTIBIB_NEWCITES has no effect without BIBFILES option.") endif() endif() if(LATEX_USE_INDEX) if(LATEX_INDEX_NAMES) set(INDEX_NAMES ${LATEX_INDEX_NAMES}) else() set(INDEX_NAMES ${LATEX_TARGET}) endif() foreach(idx_name ${INDEX_NAMES}) set(make_dvi_command ${make_dvi_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${latex_build_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_ARGS} ${idx_name}.idx) set(make_pdf_command ${make_pdf_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${pdflatex_build_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_ARGS} ${idx_name}.idx) set(auxiliary_clean_files ${auxiliary_clean_files} ${output_dir}/${idx_name}.idx ${output_dir}/${idx_name}.ilg ${output_dir}/${idx_name}.ind) endforeach() else() if(LATEX_INDEX_NAMES) message(WARNING "INDEX_NAMES has no effect without USE_INDEX option.") endif() endif() set(make_dvi_command ${make_dvi_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${latex_build_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${latex_build_command}) set(make_pdf_command ${make_pdf_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${pdflatex_build_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${pdflatex_build_command}) # Need to run one more time to remove biblatex' warning # about page breaks that have changed. if(LATEX_USE_BIBLATEX) set(make_dvi_command ${make_dvi_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${latex_build_command}) set(make_pdf_command ${make_pdf_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${pdflatex_build_command}) endif() if(LATEX_USE_SYNCTEX) if(NOT GZIP) message(SEND_ERROR "UseLATEX.cmake: USE_SYNTEX option requires gzip program. Set GZIP variable.") endif() set(make_dvi_command ${make_dvi_command} COMMAND ${CMAKE_COMMAND} -D LATEX_BUILD_COMMAND=correct_synctex -D LATEX_TARGET=${LATEX_TARGET} -D GZIP=${GZIP} -D "LATEX_SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}" -D "LATEX_BINARY_DIRECTORY=${output_dir}" -P ${LATEX_USE_LATEX_LOCATION} ) set(make_pdf_command ${make_pdf_command} COMMAND ${CMAKE_COMMAND} -D LATEX_BUILD_COMMAND=correct_synctex -D LATEX_TARGET=${LATEX_TARGET} -D GZIP=${GZIP} -D "LATEX_SOURCE_DIRECTORY=${CMAKE_CURRENT_SOURCE_DIR}" -D "LATEX_BINARY_DIRECTORY=${output_dir}" -P ${LATEX_USE_LATEX_LOCATION} ) endif() # Check LaTeX output for important warnings at end of build set(make_dvi_command ${make_dvi_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${CMAKE_COMMAND} -D LATEX_BUILD_COMMAND=check_important_warnings -D LATEX_TARGET=${LATEX_TARGET} -P ${LATEX_USE_LATEX_LOCATION} ) set(make_pdf_command ${make_pdf_command} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${CMAKE_COMMAND} -D LATEX_BUILD_COMMAND=check_important_warnings -D LATEX_TARGET=${LATEX_TARGET} -P ${LATEX_USE_LATEX_LOCATION} ) # Capture the default build. string(TOLOWER "${LATEX_DEFAULT_BUILD}" default_build) if((NOT LATEX_FORCE_PDF) AND (NOT LATEX_FORCE_DVI) AND (NOT LATEX_FORCE_HTML)) set(no_force TRUE) endif() # Add commands and targets for building pdf outputs (with pdflatex). if(LATEX_FORCE_PDF OR no_force) if(LATEX_FORCE_PDF) set(default_build pdf) endif() if(PDFLATEX_COMPILER) add_custom_command(OUTPUT ${output_dir}/${LATEX_TARGET}.pdf COMMAND ${make_pdf_command} DEPENDS ${make_pdf_depends} ) add_custom_target(${pdf_target} DEPENDS ${output_dir}/${LATEX_TARGET}.pdf SOURCES ${all_latex_sources} ) if(NOT LATEX_EXCLUDE_FROM_DEFAULTS) add_dependencies(pdf ${pdf_target}) endif() endif() endif() # Add commands and targets for building dvi outputs. if(LATEX_FORCE_DVI OR LATEX_FORCE_HTML OR no_force) if(LATEX_FORCE_DVI) if((NOT default_build STREQUAL dvi) AND (NOT default_build STREQUAL ps) AND (NOT default_build STREQUAL safepdf)) set(default_build dvi) endif() endif() add_custom_command(OUTPUT ${output_dir}/${LATEX_TARGET}.dvi COMMAND ${make_dvi_command} DEPENDS ${make_dvi_depends} ) add_custom_target(${dvi_target} DEPENDS ${output_dir}/${LATEX_TARGET}.dvi SOURCES ${all_latex_sources} ) if(NOT LATEX_EXCLUDE_FROM_DEFAULTS) add_dependencies(dvi ${dvi_target}) endif() if(DVIPS_CONVERTER) add_custom_command(OUTPUT ${output_dir}/${LATEX_TARGET}.ps COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${DVIPS_CONVERTER} ${DVIPS_CONVERTER_ARGS} -o ${LATEX_TARGET}.ps ${LATEX_TARGET}.dvi DEPENDS ${output_dir}/${LATEX_TARGET}.dvi) add_custom_target(${ps_target} DEPENDS ${output_dir}/${LATEX_TARGET}.ps SOURCES ${all_latex_sources} ) if(NOT LATEX_EXCLUDE_FROM_DEFAULTS) add_dependencies(ps ${ps_target}) endif() if(PS2PDF_CONVERTER) # Since both the pdf and safepdf targets have the same output, we # cannot properly do the dependencies for both. When selecting safepdf, # simply force a recompile every time. add_custom_target(${safepdf_target} ${CMAKE_COMMAND} -E chdir ${output_dir} ${PS2PDF_CONVERTER} ${PS2PDF_CONVERTER_ARGS} ${LATEX_TARGET}.ps ${LATEX_TARGET}.pdf DEPENDS ${ps_target} ) if(NOT LATEX_EXCLUDE_FROM_DEFAULTS) add_dependencies(safepdf ${safepdf_target}) endif() endif() endif() endif() if(LATEX_FORCE_HTML OR no_force) if (LATEX_FORCE_HTML) set(default_build html) endif() if(HTLATEX_COMPILER AND LATEX_MAIN_INPUT_SUBDIR) message(STATUS "Disabling HTML build for ${LATEX_TARGET_NAME}.tex because the main file is in subdirectory ${LATEX_MAIN_INPUT_SUBDIR}" ) # The code below to run HTML assumes that LATEX_TARGET.tex is in the # current directory. I have tried to specify that LATEX_TARGET.tex is # in a subdirectory. That makes the build targets correct, but the # HTML build still fails (at least for htlatex) because files are not # generated where expected. I am getting around the problem by simply # disabling HTML in this case. If someone really cares, they can fix # this, but make sure it runs on many platforms and build programs. elseif(HTLATEX_COMPILER) # htlatex places the output in a different location set(HTML_OUTPUT "${output_dir}/${LATEX_TARGET}.html") add_custom_command(OUTPUT ${HTML_OUTPUT} COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir} ${HTLATEX_COMPILER} ${LATEX_MAIN_INPUT} "${HTLATEX_COMPILER_TEX4HT_FLAGS}" "${HTLATEX_COMPILER_TEX4HT_POSTPROCESSOR_FLAGS}" "${HTLATEX_COMPILER_T4HT_POSTPROCESSOR_FLAGS}" ${HTLATEX_COMPILER_ARGS} DEPENDS ${output_dir}/${LATEX_TARGET}.tex ${output_dir}/${LATEX_TARGET}.dvi VERBATIM ) add_custom_target(${html_target} DEPENDS ${HTML_OUTPUT} ${dvi_target} SOURCES ${all_latex_sources} ) if(NOT LATEX_EXCLUDE_FROM_DEFAULTS) add_dependencies(html ${html_target}) endif() endif() endif() # Set default targets. if("${default_build}" STREQUAL "pdf") add_custom_target(${LATEX_TARGET_NAME} DEPENDS ${pdf_target}) elseif("${default_build}" STREQUAL "dvi") add_custom_target(${LATEX_TARGET_NAME} DEPENDS ${dvi_target}) elseif("${default_build}" STREQUAL "ps") add_custom_target(${LATEX_TARGET_NAME} DEPENDS ${ps_target}) elseif("${default_build}" STREQUAL "safepdf") add_custom_target(${LATEX_TARGET_NAME} DEPENDS ${safepdf_target}) elseif("${default_build}" STREQUAL "html") add_custom_target(${LATEX_TARGET_NAME} DEPENDS ${html_target}) else() message(SEND_ERROR "LATEX_DEFAULT_BUILD set to an invalid value. See the documentation for that variable.") endif() if(NOT LATEX_EXCLUDE_FROM_ALL) add_custom_target(_${LATEX_TARGET_NAME} ALL DEPENDS ${LATEX_TARGET_NAME}) endif() set_directory_properties(. ADDITIONAL_MAKE_CLEAN_FILES "${auxiliary_clean_files}" ) add_custom_target(${auxclean_target} COMMENT "Cleaning auxiliary LaTeX files." COMMAND ${CMAKE_COMMAND} -E remove ${auxiliary_clean_files} ) add_dependencies(auxclean ${auxclean_target}) endfunction(add_latex_targets_internal) function(add_latex_targets latex_main_input) latex_get_output_path(output_dir) parse_add_latex_arguments(ADD_LATEX_TARGETS ${latex_main_input} ${ARGN}) add_latex_targets_internal() endfunction(add_latex_targets) function(add_latex_document latex_main_input) latex_get_output_path(output_dir) if(output_dir) parse_add_latex_arguments(add_latex_document ${latex_main_input} ${ARGN}) latex_copy_input_file(${LATEX_MAIN_INPUT}) foreach (bib_file ${LATEX_BIBFILES}) latex_copy_input_file(${bib_file}) endforeach (bib_file) foreach (input ${LATEX_INPUTS}) latex_copy_input_file(${input}) endforeach(input) latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.cls ${output_dir}) latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.bst ${output_dir}) latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.clo ${output_dir}) latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.sty ${output_dir}) latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.ist ${output_dir}) latex_copy_globbed_files(${CMAKE_CURRENT_SOURCE_DIR}/*.fd ${output_dir}) add_latex_targets_internal() endif() endfunction(add_latex_document) ############################################################################# # Actually do stuff ############################################################################# if(LATEX_BUILD_COMMAND) set(command_handled) if("${LATEX_BUILD_COMMAND}" STREQUAL execute_latex) latex_execute_latex() set(command_handled TRUE) endif() if("${LATEX_BUILD_COMMAND}" STREQUAL makeglossaries) latex_makeglossaries() set(command_handled TRUE) endif() if("${LATEX_BUILD_COMMAND}" STREQUAL makenomenclature) latex_makenomenclature() set(command_handled TRUE) endif() if("${LATEX_BUILD_COMMAND}" STREQUAL correct_synctex) latex_correct_synctex() set(command_handled TRUE) endif() if("${LATEX_BUILD_COMMAND}" STREQUAL check_important_warnings) latex_check_important_warnings() set(command_handled TRUE) endif() if(NOT command_handled) message(SEND_ERROR "Unknown command: ${LATEX_BUILD_COMMAND}") endif() else() # Must be part of the actual configure (included from CMakeLists.txt). latex_setup_variables() latex_setup_targets() endif() actor-framework-0.16.3/doc/cmake/conf.py.in000066400000000000000000000226621341123343400204430ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # CAF documentation build configuration file, created by # sphinx-quickstart on Fri Jun 3 11:27:36 2016. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # # import os # import sys # sys.path.insert(0, os.path.abspath('.')) # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. # # needs_sphinx = '1.0' import sphinx_rtd_theme # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] source_suffix = '.rst' # The encoding of source files. # # source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'CAF' copyright = u'2016, Dominik Charousset' author = u'Dominik Charousset' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = u'@CAF_VERSION@' # The full version, including alpha/beta/rc tags. release = u'@CAF_RELEASE@' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: # # today = '' # # Else, today_fmt is used as the format for a strftime call. # # today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] # The reST default role (used for this markup: `text`) to use for all # documents. # # default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. # # add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). # # add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. # # show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' highlight_language = 'C++' # A list of ignored prefixes for module index sorting. # modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. # keep_warnings = False # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # # html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] # The name for this set of Sphinx documents. # " v documentation" by default. # # html_title = u'CAF v0.15' # A shorter title for the navigation bar. Default is the same as html_title. # # html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. # # html_logo = None # The name of an image file (relative to this directory) to use as a favicon of # the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # # html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. # # html_extra_path = [] # If not None, a 'Last updated on:' timestamp is inserted at every page # bottom, using the given strftime format. # The empty string is equivalent to '%b %d, %Y'. # # html_last_updated_fmt = None # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # # html_additional_pages = {} # If false, no module index is generated. # # html_domain_indices = True # If false, no index is generated. # # html_use_index = True # If true, the index is split into individual pages for each letter. # # html_split_index = False # If true, links to the reST sources are added to the pages. # # html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. # # html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. # # html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # # html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = None # Language to be used for generating the HTML full-text search index. # Sphinx supports the following languages: # 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' # 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh' # # html_search_language = 'en' # A dictionary with options for the search language support, empty by default. # 'ja' uses this config value. # 'zh' user can custom change `jieba` dictionary path. # # html_search_options = {'type': 'default'} # The name of a javascript file (relative to the configuration directory) that # implements a search results scorer. If empty, the default will be used. # # html_search_scorer = 'scorer.js' # Output file base name for HTML help builder. htmlhelp_basename = 'CAFdoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # # 'preamble': '', # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'CAF.tex', u'CAF Documentation', u'Dominik Charousset', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # # latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # # latex_use_parts = False # If true, show page references after internal links. # # latex_show_pagerefs = False # If true, show URL addresses after external links. # # latex_show_urls = False # Documents to append as an appendix to all manuals. # # latex_appendices = [] # If false, no module index is generated. # # latex_domain_indices = True # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'caf', u'CAF Documentation', [author], 1) ] # If true, show URL addresses after external links. # # man_show_urls = False # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'CAF', u'CAF Documentation', author, 'CAF', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. # # texinfo_appendices = [] # If false, no module index is generated. # # texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. # # texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. # # texinfo_no_detailmenu = False actor-framework-0.16.3/doc/cmake/index_footer.rst.in000066400000000000000000000003051341123343400223510ustar00rootroot00000000000000Version Information =================== This version of the Manual was automatically generated from CAF commit `@CAF_SHA@ `_. actor-framework-0.16.3/doc/cmake/index_header.rst.in000066400000000000000000000001441341123343400223040ustar00rootroot00000000000000CAF User Manual =============== **C++ Actor Framework** version @CAF_RELEASE@. Contents ======== actor-framework-0.16.3/doc/cmake/variables.tex.in000066400000000000000000000001101341123343400216160ustar00rootroot00000000000000\newcommand{\cafrelease}{@CAF_RELEASE@} \newcommand{\cafsha}{@CAF_SHA@} actor-framework-0.16.3/doc/graffle/000077500000000000000000000000001341123343400170555ustar00rootroot00000000000000actor-framework-0.16.3/doc/graffle/basp_header.graffle000066400000000000000000000157111341123343400226470ustar00rootroot00000000000000isF?ǿ΍"]v<%K^d&*D6)Dm%~Hd0~5S,,^<8u|qG]BNߝ=Ź'OA'rC/{{A@Ύǧg i:ǣv;5LNh@%/lnڽ3vNc~8Gaٟ8?kvCKQvQD{?/kO!;f|6K'V}d^ywOi^RQ΍+ᇱ:nh|v?_͞dat&if4ҽYsevM;ICyT2󏺣_w4MsvMS 4uqv.US_fU9a%y>vjKe\21FQyt i2os HQt}{z腟M0N1w"`x~?9weaH+i e8*r`/oqAȹ_=4W29]\($b?N2^mA݋uI(j5Gɥ׍>K1J;ؕDQ^P{ 3=x1`i,l24M/%.~lSiϲpUիvp*ɴwݱW"n̍R]zܻk9Fu&iu9eю^|-=7FuX[֙TwKmkL|iV@m[6~iF)B YC6Ze ¶RaZuSFcRq5tU4 QR[? D^y9U^/6P]QMD+Q$QUQM^&5IcI`$jnZvx$*zI$&IT 4Jt"jDM $oP$j?n%yPZk0Kt"jDM $ !DM R{)&IT/P˲pY1N(D]~ Sit& H'vt'ҁtrt| H~ H'VNtǂt'ҁtrhtH4B:".htHE:]0"ttvH`DtNH't'ҁtrmF$!< \UA΁Gt-HktHtrNkW?ҭtHt~UJ:_IwiZzj21Q 31E&&Y&֮YpqFH d6Ij(C]FFusWGI ok[Nxu,oon!'قd$Ḙrsv UQܤ4 Īn;Rjz[s jьVD8tzztFegM13Ba,oɖ fAQCh,[%H1]0TxrԴjRkH>]$]{-1N٤szd1Lnb\\l$oWgFɄF@r\kW gLF@j\kW g¼`^]+2L#w t* C F4:]7 :LlF4B:T$#]7MNGzN2ґv0PtzHc@IFv#t#N2ҵa6H'*nF@tdKn|9b}P^fpuit$(W,%zϔGOZq1 XOh⋋M{`Oüɦ2jF#9 s*'[!">X{jW_Gs߅$:";Lcb 6Z kj1KC W቟nL2`g^W"fhE#Vk&0+Gj09Z?&ОMj5 &IԤ`+TP`+RtI 595 &Id`+TI5Y5 dM',qjP$j2j0I@MIW&o:yDj0@5i5X դR55 դ! FMSÔtʁ)r,M@G%:b:Q"5+B ǭ[V!7i[idJ2\@`[)?MkX싛MR(l+׏0L^:%HU|qfi9rF9nuOmQ?Ay-0^5ݒN}r̪__1! 3ꝩVAM Q E^+tP[w)ÅN~5q* IEyx.;&TYgT5cNB詳FFl{豜V/\ޡ&x'Fxx'NfxG;N*ޙVx]3;N.ޑhw*xI;}xE3#$]+xմ;x׾ b` f4*6/MhU8",@>:KtwdkChw:Iƻ84 U;FiKjwU;x׾S|Wޡx'7\bbKj SɪFC5ä®uMVwwv֧wif^ްz"ZVkHOvE=zx$jz2-DO"zEOFE=e;=ɢ'|\D@OTJD$z'=ɢ'̲$ѓY e"zEO 4R?IS?z^sqߝ/{r}NxX4&mz,6ٳ̽M^eejwC.3[z^Fk鳎_{4/4V~N/;O?*n  }^Js#;~܉^ᑟd?hdOԏ¥M]ui@Ӱs^(9ziġ2@D}QNt`;l9fQob–қǦx}>~^Ӂa48kʞg~: GrE}yԻkHz 9ӾU{~G\أ'ITEe'fka*?sqdN<#/(CJ9h$4]u佟oίv[y@$=}itʋ)L/y}ț&1pe@4>‹(B>%c^9D]=Г߂?h*'/O{|;.>t7?./^gg䷿Z=8/Ky鿤`,7ߜ'9{t]bMl۲] mq\VMv42[9i6.kMg`ALeo3vsIOT$Ea~ɁC (L  04dvȼYt鸹Md(.V=KIr{deYY:/D-r腟dZF7b98uxdŭXH<**ڮH?'S\;F6R{hblNc2-mZ&,Q_Vh|XethLoLM#럡׈o\XkeBTq> 4ղ "<}o"Y^zq[Y[Q-p:|)٢aQ\SQ@yx䎮G}:#f4'Uj(E@q=PQ0OKo,wm"2 $GUX&aeIUV)QO /?0*饟(v =%a\!{u1 '@̎L./mIg }8YܟC# CzQxK/~_>aD _x`Po6>6+ 'LHMN,`u]$s ,sΉFFS:47ѼL`mnS`kහ~K-ۻT^LdaK/j\$-a.Ö U.5a˔Ɩief/F1jy'!D&a2,b2Q['x#xx-xE} lwd׎α9ZH9|sD>#|9{|9#|to99#|#Zf5F'c;utJl"j<_Ef/=B#dJ>zR7j:@@, A@ n1Uh 0! c$d XH@ #!L@ `X,>|9db']w5bLGmtT,@P /p~2k$^+Qi`%oj{j4첫PFmFm&оճym^lcMΕG1Hr ic?}(6: 5]e*şl;A*|ofWAF^_ɒҋb뛰sX PP'uAKQ,^AG n* 8 NŜM y)FדR,Ӱ\uUp\]'W9Oȴ0qH>GjTa}omMk׷9φui}`}om3j &D3]N!@=0 !$@uNaܡy [(lkMx׃>L47X ApPA6 YMR? V*f $08&0dЏ8r𗣍Qyp mMn#.8rA0-WQ賿n m b6%1#|1'Ih;#쌰3;#hΈ?쌰3Έ#@vFagx^agIJH(SiQ,BrĜqt4p,cL-q.߾}O~exiHc/垵;Ɵh`e]!յ;sI"qm9R|gpceH? `~|tsactor-framework-0.16.3/doc/graffle/basp_overview.graffle000066400000000000000000000240651341123343400232670ustar00rootroot00000000000000]is"9ί`nw(_l;Q2iDM1ƴ] rt\%TR>OfJJz*}f_~-Zl7U_;>?X/ݷ~़V{WW+Ǖq X]]M`0p<ʩuLAsw;P_1cՁf/ӭ_n?VUl) p^"h@0^O)= ^7[ـC|#*y!)INݩF[7oߚmD ! 3"ґ O&ϗFť4 .k|{W:\:gnQ5`պF׽A׻)kF!/~p~~|j= .n 1&P|(d>( P$a,HQrCBSn]/T]~fURsQnYyVU-ZVVRLJ)B[ZMЪjiB7(]=yjj@iKK ZV-ZZ:JJW2gb9*jiB.ȁ{RPUZ5ɯW˯_'RܦYE %Y"ş|[W(M$,3y)N5:p1ȡKTbc3$-43{>9 Ȭ$3&JjF% K E ;T@ T)x 0%S},})N$a |MTg P_S#wW{Ld~ZMR]֓<іlMi5&#P\gL^ e@1@R '@ ; 0&@QpGI"bD 919&`I٥v0Eا . {i8h7)y iSIweo77uR#$F#-\j4\ߍ#O4NZ^N'@R زa2d9NQV,w' Rg{?ܬ Y1q;r)&Vy?3 Ğ;X9kfK&x:)ĄQD+pJւJN0I{օ\RLcAú J0"B3L è"OH-3Fc"vɦĒQaƒsX0đ;,PDKWΰHvtό"N%R$N+)L+c>E"A"yRLr0lT`J "(U!@U`"@"rnANq,1,;`@4)RXaJILJ Yz@&UXp 3x4P*2%fp*ؤe`2* IM~.A5Ig+%XL#8W2U4"3Urqr;WC*%ѡ!31x>[0#1K:Qc(:brQ269757rF 3<(ЎDJ Ni Οyq s#4'K@#5tT(G? F 18vP03Y5"/e;YzIluD{f9m$E̒-`?H0Me$a@ֲOm\/2ciԲ+xϐ%lH1lc6lURjQc 'c Q; `=0qML9R'<6\~ 5rTSi1BVGhB Ua1iZUڅB% D:]#7⣆,uh1qi&_틐J"- -0LT+DP*"/Ͽts;}~(C?!OI6)̸+M1dLba}|(3G+\O^pAFԑ Y8!21Iy?7BO$M SNS&h7[Y'w% `~/%Ϣ~/}tjV[l_|@4ʝ%>aIC/CXQ)Zq)$\SIͱ!M>9J5#UWYT^TŐ*Z-umxR]Ry4pjgJּ6O!쨀ߗHeyjN<-OY*Ot;_Kw^kcY))T+KR&)aNKR?18AHQp4;!LFHcjyjN<-OY*O۩T6-7 KͅbRQ&YIB5E+9z$'78HLJV47usufIJY})"}˿kcdHU!jPQZ l$;8=P(>*awǎS 2,9-N1C |ĴK^7+bec:@yy@Ƣg/G\R̅.C-j[p&sY# cHI5x8?8OU5aCЩ&nZ?f'!51-+`'/E!hkU#c^oEo0qyX[uT27jX[N;2kAmlM ׭e~csn'<9ݍYN]f59beVyew'XNF(6_<ڇ(WfհT[urZ>Na燐0=>Ȭznaga퓎 lo i}ވ|q7ϡ˽XoNG C9.#Sw|32Jn?u*+}TZtlCqݱsSCo[n RmS&\#6EpdD;hopSh]'E>|F$eojz߫FFp/VDz^f;N\5m!+:n&Mh^,JȨ1zwuzRypʭ$qc-l7[w°svsOe̖׍r;aJ*}X+_! Uyd" X٭1z V867(x dJE}Fր"9lM-L[ەfmeW{g"&Yx'= f}02A&t4> :2Q/W׏U2Z^8uvY}3b]oס2?nV/27fm=3Rf>{Γguzh塸d$[ŧÖhC=?} ܠ`R j<͓Us8?Jd=8lpqQ| tn|:>ĆY3yu0L[Q\C:)mPo|\|H2P|F5㜏//~+zu7[%ƭh=DA iFjqj/z.g-wB3y/›j &FSB߾5~j`b8Z)Êfř˛r)5 VXapJ1"%yV_ݭ̂>= [ЎݭSRvyv~nUM,Ϳ4,cHSn$HIaWʖuobŋ)K+E%=;(N,)RLyge+-x[[`݂^u>r$mM&-FCc.=sfL 5XMrL0.L3#' oL{YD,Hz 4S gB.eGA|$scX0oI!  J$TI@(GAm>o)m{׺e:bZ]OnF/dlxLsh9FA[2s:4C+28\i b&!!;ېcCvlȎ ٱ!;6ddžؐcCvlȎ ٱ!;6ddžؐcCvlȎ ٱ!;6ddžؐ3̑#^Z 3+|3.7ϥ_)o;%_q*lz. tИb7=ŕz5떔O,H+J,xfE2EE5&h0  %f&+ǒQ5OD!9laK(r4!1.ss -)&1xd$@RMR;*"8%B` KUJ3+~̺3#E={+@P'nDqz a"@Nr e/ɌJLiҢA(bgL,[`'TDr&2VIpBR `!*-1KU~nDTArcq"%ǚ+ńeikZYښɲQh&PEXq,0 ,wK*8PƹfZEC0*K0xIs` \Xd@5ŬH=}۞ 2_;fUlfØ)D"Vq ~3X'(fzOʢ@WSNU FH)N \Vɣ]~l IM:2bI~x *I)]eƧ11k,:^-pGe6X[-`}(V:*wܴ(sOy3Oj͡@"#?oRV)w;@NZkm2 {d|evJv+jv""cf$Ѩ) wIV6gg1LrLˠa&֓ hL1(GE^ł1b7ŕz3ɒj& 4ē'`En3PIjgZgjQCd`FI;%tقk*6bG1)2#FS)Ą2`ɳ^UIzߡAА( w^˘2xl^(/V( 39q`poo%(dk%sqcx{TxUDZB5=Yp+AW邎z[ 1I0 Bk̒Wn k[ LwT:D%S%[e PGb*Ƌ$ '+%ۊ̪*WUd/ OAF +qxQ~ZLuq/ m>x98t#\8n90K]a1a"G灖EHP7w9׌1`G1vfl-#E")u8ŜȓAd晼G`,d!GKe]{ޏ {Lia m.n~<{>a"1J0Misk _B0KR?q^7 -)-NZe>;w^48{N0PFxm)*L(eċ'J5N䰂a{~ JiS+ɗ!@̿`[pDZ#kaap@uoˆ(J&pHЁ+ /\jв<ؐ[6&zW6q&BjLp%dZ6l86~_!Ǥ``͍RWafS`NDaf.{+FSR: ̙1<ŞY^ޞY{_^ֳ[MMWΏ虷J,hۿƗ^ ~prY:E{2K? 5 u>*e!et<$eׯ/]o/W>!׭_r7$|‚`!4HBu GAm> ILn?tߵ_~֘ej敟ds5j)'A9R堜݇Vy; _iy%ᝬbvFB+$!&^){7WYZXؒ 4 ѻa|UHQ2LpsLjrxfqLLDR6{ͫ9 |x q!A5žߝ"_܉ ׂ O=|x*T wg, p:A7suF|?4Oh~غSB i٭uvJO+&A#|?-C:;Teھ;~ѿI=@G_Psߜ*}@P Zw~iԳ"ݮtmi I %snX:J)5ԅ)CGHk0rz]A(Qy׭׏z=~|Sd|NO@TV:?Tn]lou\V-WoܛVOi˅k|lgߐfkk9;u5̓3DͲL%ݍy3b1jq$~+'@!$I*> ڊ aqCs#뇠#۾![u &$MCMFCtdfn9n浿xq3q.HP cmMBo~ƾ5R c /fwRNk5U뉵n"hȴiaٯڀpXj uVg8L̼n0 * 5U:ؘe8 ~*tϕf=j59xs@Q˻ ^Od#7b5n칄 \) ΒgE]t:w%fz2 cF@Q% (E} /*2$actor-framework-0.16.3/doc/graffle/basp_sequence.graffle000066400000000000000000000111501341123343400232200ustar00rootroot00000000000000]r8=~ n~Z2<;ɾ$:TE8vMt(wlg u[^v<{{f<Nj9>o^}8QۣӦvp zpp|u\^^)ϔg0-NUoy}N\ހk*a&j=5kn/~x~K^4Z}GϬꟺmnH/UXv Y',߷σg]{A][C#5``GA#A`r4a5҃qպ=m۠g&d[q`\6ׯ`_BN0@uv݀|Xӱ|cT9=S])Ƿ&۸4Q}m#B>.q}HԨ@5*_,}~!`Cėf/2RUAcAB a3ϭh+׭R^z=댶efw~;΅NN`-Y9/3ۥK)(xQpg4YE(kFZ;chrCHX&@4/U )!Voh-Z^9jdtwpsqv$s1L b*si*,x.Iߙm;sxg/KγW,eU:wUJ9XKlGď#._Ey(b@Kq|D>"^G,,E(8:8GhU"}D#JQG>w9Hn9q0<O[A'zc742GjuQPn"7/G ?,z-jˎZuvd|cWseC# JSB]%wWQh9[pInVFlʷȦxmˤ)I[_PA8:a䫰aOڑ2_in6VH jy>+azEܭx lGzt$Aì uL"~Z uZP'0htRT2 ΟN!CdPހP'#Cd uN2i]Cl1ކmsb~#܂-rP.pa eޣTC|+G;9nM-{;mޟY#KmϬssO![ΜrG0:zq**-W͗UtT "&Jiyt7dəU<#ҫQ3̂`v05!55!&v-mXj%2yr4/˟VNH})'d81ĕ .%K_6Yu~,3;wr uqAdZ v ZS7ZB%Kl#%k$+B"++Xd!ZOY/jJ*W#`"2gt|wpIg%ik +ox4b CM3uK' s71kt#եLU"ސau3C-'l >V0R/؟) M戮1QoQõVHsLGAڲA<5b^ҁ[|s 9 #yvf`\jG3v^4At(13ѧ L"4;aIe&6\y{m8Ǎ"I 5*B]\/PBF^v[ٳ|o4G~O>#Hrf`Ԍgfn+#nԓry}y䅡bH쨽YaZGFzxW6Xwڴ]Q#7{GW^_'F- oNdW+o+_gFszg.3=Шn0OZ}WǦ1IH5Ę{$2 S3CL18 O=c|ZӊqR.%Y0]OS{Tr`X @U!!2ؘüj7zis!ٷP +2оAቺ-Eֵ?ilVۀWMbc/{eGm}̓ϘzE/e"iwV"#Oqq {+_C0ӱ5)cx _a3T}/zuks}181_nmz66vwc}~ϸ7JɃsR`q%Y~ҿd=7yӣ3uxMj߹P^Wmo! 5Tchcve{@JN9O$&?8Q8 |%mD X`ӂ* 69g5&fi,JNژo9.1Ci.fMixǏh@֍&K"6ctݐ1-˖q$-LO̶}'{^^N.?7)>;J.|KΛ%BYZHw"Zt&aT ^#.URU\_+ wlj,W3xbRSv t c5gki鲷U>ڦ8F!&uC S B3fX`XBy j c!,A/T a{i b P]viiV긺f\`}j[%hŒZΓQ 65{yWvL:@ Myr%|N07tCG'Qfe,ǓxYr AF~Q7dDO8?FJͩ?U R''$@?$}~!BTکcGhS! Z[KkfdSc/ăiyde2,)AXa fr2}d2u#S v;]Oq=d#k*xr)-Im,E …$aM%|JyЯ `^8x)baRx "6cb#*?v%*ѱ ,<`$F&ʱuC+DS 065kGk9SNU`[o+_N޹ƝPn<o*͈w-*=lt(TC?$jA4:D[ YC/hUfwYh~E 7 x»#/h+ 8vm{T磍;ٴ3 TF\ q G {fAw3dn*A/dJD0\Z 4tc$rleRiZkF^imnMRVɔvJMy_1!UKUV*Ze*V/7ՖҦfzQfkjy}falko)S+U =kUciWonS,L)-zEO,J-pX l!0pnʿ:YG)*0Np'f26t#]ͦuob2?Ḯ$oGN P?a6K5+Y$Rɨ0 a3-ay(B·&dQ Ոwz[aJtFީ?5`對Y%_kΗa΢O @3olg 'kMq=R=Z=H~Paggv'1A۵-*m'6B;.%Z .,oõq'E/ߌMO`R[zF!L^y?': 8*>؆g,h&{QR8~\hk5Myx~)C"ds]ܩ^8-ȭxk7kUZ7q/@W%JMB &Tե0Iz/䋰nU<Mmj0IƤz,N[L_Ϝm*-Htl1SڈrJl [5r]Ec#LW+gtSQ#8`[;3~qr#-5K,uH2LL9a8 s%7_&LMSIe7_f,RINE@-2:{d[pB1-ny{H7^5t}!]gIH$ f^qlwoft!w1"z.YMڷ(.k1500"%UV͞(w5r(mx?tB1 ү;;a͎uit%Ujr*Ý %@*;nUp2X5ƺqq'+O_)PpfjNQhS]/r?`Njcө쑚8S2qdVs7Ze$Ʃ} Q?b[PBXTLÉ|9gmQ!CDTቄL${`n;gJ`nCGplזfT9c/Ό8VIUyt JVn{3Kgg :,^BVh{^7ӧMHٻ7ͽ׻G@|˫Ge:!96QO2 aSJā,&*h'yh<{pE8|@vAt /ա"LFlwl82 3 A4w /Xad_`=lc?Uuj45;[wxY<5~ {pgezbP:5H@Yd]qψا~/8{ı=_#q;kz'Ug7Ӏ96ZY"pOeǢ-fix. jSC?MZ;K%X5ϲ՗L5 ]4ܜel9KgFއh !e"PFI\éb?),ηQwiDuXP6^|sU70^^52-uX1AAPd,>YA'L73>j&'KU5f6׽%j?@Gd S`~LtOǖJT&U v4 saI +ZݾڸZKS#=5G RN檧 V4q0\ lI"d6Xb:B(^˃ r gjaߝ;ߴv}3Kla6VDž0۬KPg{z'6.A!lf͈L<,q 2428 「;MƇ]gN7YA,,B B7FLD4MqG3om.Mm(|י\r2~6{vxK2௰/ޭ8'&C* maY9Rm:]ܺa/׸t8OW0TzAt00p>2RKX݅?asETIx?ݒjFmxIv)`q;4wl> |G;I+ aW(ō}_[t'T]aĚc |7k?b!Ih%mahE ȌEFCW\l6EmaC~t"3tJ@tBtz:Mkc[J{L s4k]4{7NR%ڗ95\bс7Y'_5/3 ]',2ͲMgp}y=37u yOM&F#!!Xkۖݣ sz3~Nf㥍Tץ 飀;[[qyv {v4FN.q:g>stf_h?']OCx?~eR^].~%_(7J \H/elِ5SZ.SoB4*]G UPepUSM/%]\ go|c`O,&&Ͼ10,9I` +AW2{{'0 ց&I`/Li7L{,&y|.9Q&&'}a7z'YI0w0L% "1x?ڦi14f>)haað){,ǀ}X,"%14`0oGz4I$y|}'“h&x$DcclaM6μi*_~#>2B'Ie?7tDIIe =N*A^2rEq :Wy۝TvXc~n h5{sYY[IR35}0;{FFގ 1 !^]ѸBeJk53OleuhآOZHϞ-[qujWv݅J҃qdbf;(0:{ ,|sG.> E _>I^pezw.-VUr,@4IZ0&X${1.y,pwoZiYKT ]:cV&wXƸ- B0]k=?[p LjWrIz~z (޽9g_˧e<&g8Q9,Dxnc9ys?AJ(AGEd6|޴/pmK.&{xdbL=k~h;:1_K?+YwrbY;E*˹( yEk,wE":6E`ݒ ^CխibۆzRW,.9Xn.TGhE׃}VQkUzoM=G7hIbKtp6\^$eq H9,Ic9ts@:V@{1w7pҌN@AN8YwzdN8}&F[q+/nDBDwH!P{Vokg}[}XC]UAFCu7?tȧC0D b =a a>2A kkɈa%E-шhj{CGѢG"wDy[|| b@DD= T7Aaaa0No9!c\fh(h K dهዺhRhW,-9Ү1 #2?Og,#uaw3Uxxn:ƞ|C+HH7GgrR`簸 uľJDlDl;#wvC#`̰Ϸ4ˢ'd܏9 -Mҽ[R0S)G5HЂeoł ' {ݼz>gUȔKS7;͡h< 񴗍/sr=+XvHp7k\yҏwP{&1AFމEANsf4BcxUO[|;XE@E_, lͩ·JYKu&z:(s>1κ#4! [I2(4l,ǕiIêhr(j[ɖ]Ttt=ՅD"bk+sA+dgNb{?MX5Z E`Vj՜D$V`XG7U}SJ6d _`t<Ee_1%*E %W*9t5~hp y3̗@淒33?< 4_+Ч<`$0C!dX}JB3, +l%ǠTsSp͒*2X8W}QV*ؘVwŁY]-.uϬ1D,{E#@ xїJ){^tr_ZVIZ嶒k*>rz~nnvq^kpg'qywyKWCXx4wüK_) lPkPW:OHy<`d8rVF|kA]sdYMQ(Sr9q_ZnS7-NTM$F~IR\G`? TDžK$6B'%/>-RYU@Ͳp/) nE W)ڕv f#*Xh@U5QVaHȬI!qm .(\O=3ˈtx*B$Ts{RݐV_k zUn\Ԛq1Mi4|i"&ҺRV[T59龝;?V4mf9Wڛq+5Nts=3[u[ɜriwȫ'wɭ5%swդ3Xzh mNX]+LUGfq.u/)%bᨙ!ˡ2y `^LRJcG4|e 6 sk8YJn mWwp R}AlzQY%gܻaLyɥ0rیG\QhVO8p}`,^psBE.5eSP5&hL5#կR4vL˼<[&IBֈ) ddm.IVYj2m%'>Sp.vcQnL&EWSVufɮ7;=WZ&=8֠X%Vf6Zj̰УC͑gZƧ^2"pVh+iL+C*>nNlS+`su6?p#1WrW) cXJ]Ws/.yCkQVR nx޾lY7;(q3Oa#,& &cpp=\6 KKya2ZE( bRor)iK~&?WX캼)LJ'5;T5iFoXr&:"8l&Qϖy kVAWVkvKTu MLw39A,CHӥ*% 9dR.,n7b }ݣ i֕h -MqpCfڒea ZԲ6a.\dJnlVxKIg=P)uNsgLIŒ.gMf8dLjƜ)wi2:w_ 0hDgkӭVEЎYՙҭF>;ZKF#QXgdd7*ʎ4M^/M/kM'jyг클LZ2bMl)CdK o 0P1A>E='0J!ۑH$ Jy0`!h0p U !6\nC/^X5(êccQ ^bӰ~9m|ɣ4D (a$MMczj`Y; cٖrAJC 2 Q63$D$3D 8^ t֋Ü6gNpjK1" 7<NJ 4~9V #hY&!ROzX pu u.1!Umt\ zZ;8loizA\^3X>Ђټt=Au4Z#oHN`yGTLrt7P5\s!EڇK0(G*(ޡXyy>\zpeN;=/(z=F-4<»\>4WK;H{ R۱Q}ʳ :oG^R^XA=KKݱpی/[_ ѝN@1T׆Nz@c*w{18}ޡcAk;ÆX7']э= >ރB-^$R)hiҥ*i1sdЇg~9 [h ݇r{A150+ Y?=f .pBƨ?[] Fcxk>MG2'7~_mo~X֗k߮o};-,ͨfWBGx!c$EO4k_ν O7}q{Tznui¸FEϼQfc)A;bWkJ+PF P³^z!V7yX+̣r;)9*y|Sy#8bo*(~YɵGu&䊈Iqewp9pyfGzv,kJqz@ 4pt||Ğ3cz%{{Tx=#jz/, 7KK7b^++w]_-{5AoP#,Ρ 7q}88y/|}`Qo`sy['y6rT/~uyʜhLz >ǃd0]뇧QueQWuak;Yݥ sQsW@c\(yQ+CxcX)(̈<3SU{SC БEtWaiOCn1m*:[t]ZkLCKyCe~g;=+rbC%p{T\Wuz660iFs2mBR؝63wA~5kԾ54k zg;k|:@#sWmQCOFʝ4>MWa\U*jLU^lb`ot~Ѓ+b$ P/3LJd?̐$t8Sr "cma$m; e&˶xxCևtCRXFo8^@pD!KoZ@#M5;${MϳwX0kPE08RW*MK[?OG>=qq [϶@:|E N$>!пˏ ^ΔVPf`C qpZ?t0j?a<ݿk?נⅢrf^5^5^_AuJSn4Ba uba_bh hE߼ƫ\a/ͭP&1-ӗa`Ew|}`G0#= &w8+7 >iHOAL7t_a}&c{LgcQ+a 8AS8 >^C~~q {3%< ƙ{&t G!^ (6 Ph XF3(v O|שL@}dHH(+6P#0 #O|sPAq u>chxQ0?s4cu k{Tkܽ}*{#m*U>@aL4V3tH2mi%?? $"F"W#[B^x;Ndx#VDJxA7bϋ몶 uC/纔t;(?|~c͟bMhyyg)P:pqWn_Kw3з~/5GKLzC 6<Bu uA:c":0Fߙ0QD2W5⯟?O)c~99JP=J^~Nf0$ /Y]߯}σӄO pߓoMSO_dt?ȝ=s;b~?:=t|`W*5rSoLLt uCEu{6cJixYɇ_)۟!4Eg]O?1JB{牑CB㣑?k">0&(/ M*Kfr #?ػ\Woe*epsx`=}W2^dk@xhv3i6ȑ=Yg<}9[ yڬ Frr} @G-iCU¡_YM*e2Њo{yC3؊oP#9P0&1`4|:e >Yu&}FMafuW({$@PtI޺(g 6l} >tC}ת=AH XҜO#1fCh:,MNHޙ:|ڐG$<{BqlQIsyId[9,nI.'Xx?Q`vT6YNq7ӑ\GNg'ϨEі6.zE9?s 鋜H^WoL!h S=?:GrkB V}8VBr4M*9QNg~{YXQč8TzOͅ$=.}H prM#@Ih&Zh&k3X`ls4R=w(ϑ՚rZAA,?G'uRyFO95?i”0M#&۸[[2*j9g"#]- ykU?t=J訬0M]Ȱ$<7KY0Vj][ew95xRog՜^3-nM tDΧ*;#Gd[GV_g-usއ9#`j }܇~pQPn=vtՆn&QHD{d vfP(xuXCN:9#1ԟ_z (RWAo=ݖfɴR]F`r;`PW]u@ % gc  ];"Q>`:,z77WZh-@p[63یW,.uR$PDY`C)F&k8" d6Jt.lI` Vi` >8R9F8H&\;85kjGi܀ H ri% pnTЎZޣ.LxI`J&SG=;sӥmHs`R#H@IY>Tl#J2a!۞0]Uql-f* ;2E+Dʚ*cs6dzf]`LklE_ (:D1Zk9eIX=,hu2RTf9[NH#]q$ĵ ә\/i `s97^4ras,i Jps5 %xZqA㲤yIHںd*υ%۔':sgݎW頀./=2p9]!#VbѝGI7uj*"zBr; œ^U{Cp}2B3)U =/l?}8zjm),e[s!Ħ @@":ƒV;*(,4Ub v Pf#q G6A]`K#5(qb\;SŪ9o\k&uY< iS}uÜP{#'bt7Nk$nF#1ͮiVE1}٢K2}zh3aC?4gyQeY9Kp(Ic FW%^s,H %/޶-) ]N^J2ϼ^d@VR2iun4nl'Aw͕9x,i]ѵ TX+yς^]#~73`nO:'@t]0Ϋ`*pKk-M|R [[H4KNN6"~@BQ[ `8O#_L/bd0l &CIE*[͆U/GB\ &79Tn/koEsJSVXMAl4Ç B6dKX6ՙnhy0FOZu)%˞N?bPK1!:Qlх>ӒCİ?#dhõ?懦Fcղl/hF!R8cfn&;d6,{Iɚ+Xw3_%'liy,cb\GjZD*>G]I Zu0k. ylC,ތjMyنf>*A.yB^]1"~VKTz"2] )g#enla9s<+Kn fufҔ~˷WCo1o@o~d"*6kWL x:Ϝ "J2-烖 #XM \>U>GF,x-co^ eMAu~H@8kLine9~02-\LWM2;?y223~e2y5|WcaKZxٗ(YxyxZVOwUuS p˶A'cҷv|\ S#GU\ih.>՟1/\]jk\Ǐگzvv Z l5\[}e.#L/6Î^^3^#=yuq(b s\g0"X`i?mN^i?p,YE_(leU[J| f^1~m[|gKǏpZ҃m/=1r<8=Xə{Z 4 W^= =mh/Eg 0ӣ\R8=0/,%^|2/XavlsZ1ýXYk"3*U z NX児+h79vȳ SY@7>JαE A`LV`adk#yOaHiΉyVJNxiA Ql'I7őYiF[H ےɽͧ %/ڛ(ǘvWV"{E^zSa_z=6Sy-1t$F.$vӥ_tW+lV7Nq,wƲCQ'[rrA~0?]j"װ m*wpNrOE8%AE{%~ċ AR@SMD_ }=w\%!B=)TU)晼W# rX7actor-framework-0.16.3/doc/pdf/000077500000000000000000000000001341123343400162205ustar00rootroot00000000000000actor-framework-0.16.3/doc/pdf/actor_types.pdf000066400000000000000000001035401341123343400212520ustar00rootroot00000000000000%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream x\KoW(0; m. bқLÞN'ٶ;<+J=YK$u/}~tmsPӃu wan(nݤ_aO7~O>VOFle] C=;76@|Э&Y^*tF0C߸;wn.[wu޿j^?:4=<\\8/^'ۄ/l5 CX]}~y,u],;"PqO(_yŠڋ"[mEtK4.U ~W!*Iי  *d v[ґK *CFM߹.ԈRKЄkH+ǜ/.w e%y 5WK#Y`:zEԁy6C HX!R?ruۉ笲64~D. Gif6k뽾uBb5C (-|}eGFKuƍ´;o8$l/oLш}™z< {Ed,^aD|KiH,AxQ țL("dh`LƏBM5 &Q|t͡zBw0[}}m/ΝRQt(L 9D,G_d25L>=$l9TSEt4baofwgMj^@/CA~lLmVI2 C^ȥ3#bwաit_]}S䒊`GwɵZZ8hj[Y$x>/MʗJN6Gg! KEjHu9IDDęL,8E ⋕./MOqN3E2eP˟g$?KY 2y qToSE zq"Gߓ;j?%Bf!(u*dgcFّ- ^< _VKF}B·$q-Dʅ R''ю8˖YF{\3T(" $8&)?\JRfm}ZmFEc5?vë0Zp"/mАP$ CR O|4\гRB;0LRS#K9K*tf;T"A曓E4ju03R5GɌ̈SQ';Ɍ )t0*(J[VKH;z2'GV-Y**tԡtw[@aǑ[l0w`B/5|ecp17JM7 2[}XeY1ҽ|e'hcWgQcZOe|s\NнZ2o]VOnZTMo3T02L%0\akEI/'.n[rI 4~=mf&a6wBM$'}7VL/wQ/.ޏZivysqҵZW>2Lw#tXO,i6Xsiu>|S ; kJi"*$ c 뒛h)q;|8PyP\}e m4Yqeq<&=^9MblGZ\erc{ZI%T<0Xi"p=*@%>yRnl=VjȥX]4AV6v,f2V4B|E.,0]1Ipl|U+U}-yPV48yS~($\jͿs%WPBh{a1I|0%LQH>b\ʄK~W&tkx`HxPGuSLTQ?^Ñ[oс&_{D*9LAId`.)!襍|p;D1_$gYE5$OMq{PlmJm`u_E}lʗ=7μQOUo'ݰψ${ܧe-jxgc@e %hl IJ qbZOh?4JkgK# kLEMZZ$bbЪI*+XPؕJr-m b *_[Y% ƱUNA-]{];FQ#j) fqLk6 ]{nAl V^е`qB%S7;wxM? jCu>ieVꏇH<5ރMPC hj\;}a:s''L#l`*ƨ\2S $ʍ?QZ8үTc |) lȐg Ҕ6J-:R2 2V0R?ŅVB$Dw> endobj 6 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R /Cs2 8 0 R >> /Font << /TT2 10 0 R /TT3 11 0 R /TT1 9 0 R >> >> endobj 12 0 obj << /Length 13 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xU[U9 -Ct)Kݥ[kAd$L }*⋫IA-zRPVw"(>xA(E;d&Yje|oB%6sɨc:!Q,V=~B+[?O0W'lWo,rK%V%DjݴOM$65GŠ9 ,Bxx|/vPOTE"kJC{Gy77PہuȪu R,^Q 9G5L߮cD|x7pdYiSශX]SzI;߮oHR4;Y =rJEO^9՜gT%& r=)%[X3".b8zᇅJ>qn^\;O*fJbﵺ(r FNԎXɂHg ˍyO+-bUɠMR(GIZ'ir0w]̈́Ϣ*xšu]Be]w*BQ*؊S㧝ˍaa,Ϧ ))4;`g>w{|n Jˈjm*`Y,6<M=Ұ*&:z^=Xźp}(oZjeqRN֧z]U%tACͼ^Nm{Х%cycE[:3W? .-}*}%>."].J_KJK_͐{$2s%խטX9*oQyU)<%]lw͛or(usXY\O8͋7Xib : mשKoi1]D0 N }` **6?!'OZb+{'>}\IRu1Y-n6yqwS#smW<~h_x}qD+7w{BmͶ?#J{8(_?Z7xhV[|U endstream endobj 13 0 obj 1079 endobj 7 0 obj [ /ICCBased 12 0 R ] endobj 14 0 obj << /Length 15 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >> stream xU]hU>sg -?m 2VMIfS*tv6;df&O髠>Ƃ*6/ŒJ5 Z (}R;3dvA2Ý{woJ4~>9}JMiRFJ ƎoޥKg[c[кVc(ejD] <zo?9[)׀\@z`:ojԒ,;VlcgnFf'Lgjx𒡏0۴NcN{r6fr-ɚt%Po27^uNgqC$AZ<->ê9<2%+þCМd9zZ"{F?V|ȴ 숊 cy-..A/b?h/Cs&ԬcD,?rzxo9=k?RcU}y~xNt2ɥп7 X } p| htZ*%LX'R=fYAoP~קԀNց^_"ذ.M Bg3p4<F .h?c>1' k&%^?MOCuE|֝x2KQުY դ gyカ\= !F;AUm5 T LiVw7#NNma4f,T&4 endstream endobj 15 0 obj 1116 endobj 8 0 obj [ /ICCBased 14 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >> endobj 16 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 9 0 obj << /Type /Font /Subtype /TrueType /BaseFont /XOFMEV+Helvetica /FontDescriptor 17 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 223 /Widths [ 278 0 0 556 0 0 667 0 333 333 389 584 278 0 0 0 556 556 0 0 0 0 556 0 0 0 278 0 584 584 584 556 0 667 0 0 0 0 611 0 0 0 0 0 0 0 0 0 0 0 0 0 611 0 0 0 0 0 0 0 0 0 0 556 0 556 556 500 556 556 278 556 556 222 0 500 222 833 556 556 556 0 333 500 278 556 500 722 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 333 333 0 0 0 0 0 0 0 0 0 0 500 500 ] >> endobj 17 0 obj << /Type /FontDescriptor /FontName /XOFMEV+Helvetica /Flags 32 /FontBBox [-951 -481 1445 1122] /ItalicAngle 0 /Ascent 770 /Descent -230 /CapHeight 717 /StemV 0 /XHeight 540 /MaxWidth 1500 /FontFile2 18 0 R >> endobj 18 0 obj << /Length 19 0 R /Length1 16440 /Filter /FlateDecode >> stream x{y|T9w;Kf'3df2$l %@&b7*"TZ f"VPAh}kCk%3s'm_nI[1-оpΒe)D܅~_ܼh;4gTD8 ҸyWF.HZxvA9V@uoݢ?[h99H7,Y?Ej3ГHA<5Dbg+3c EA*Ϭx\J/'o7  I"{Zэ&'v#ͨEO<@ if J#< ]z,ʝuc_ϱSd#E~#'%UG д-h+;c3$e0Szn w:_w3:Ji3_9:_8m:;:;:v㝝'M;ѣEmt}ܶn`3ڧΜng3-`(';9댃68-a(8](q, m#n*S-P9RS?G|"x7oVP *A! B'wD@GN`KPɜćCF$>HߍvI2G9)uCGUNAM<\(,Ph Ǻ9Th.ԎKr?fm;*tQ >G734m\M Ec'5iZ`NISPzi92:` iph_HZZi(-7I jC<Ňќ 6w6J@;9d{:Bp,Jˠn4.9H,Bh݄},y)o݄zInt=aFRU$uro\_Ң$T&@:*җ!3vgk5~wk;9d]syow_"@x֢-Zx J.f=kTrm Ggo(37/0J2Vn1Nã?nZA+t3>s>oNLȁ~0ytix{q>.3ۂwQ|OߠXJADB^~GϧOeFGfE6F~חyb䆙)Bh&.AY`vI/ kg Vx'wL%4SY"H6:CO;}A`XF2f4zY^del%;ma7ҳ %n- jqf쯁o}g{l\gm0{pj^KP|_ .Ҁ^EDkFz:}}^ق1Eny@ q@mVd4uZZ2X0J*ֺB'*nQvJ'"Aw9 F ܉ծT*B-US H )WB\%yŮuJ浕''A DGɋChTPh$d,C-MXURls&UAIC'zDQ;fՒ\]Wjɻ4!8dZVfC4}KT(NvkU!  S׶&UuZVIЄNK"aǓG&$iۼ6h{Ij^{3HN &rUCxIclBa7Uwݨq|Tz hN"6BrT$!*K \m\yLWJ:(8 նlCu0xO*y<UR*5 7%1}&VZm`q5 UpW~3hό|xEu[y*;tF-ZhpE[ɻqx&́ Mor9xÓmD&  I sq 5x#۠DG $ `zKBM1xc1(\S(\(<~;(<pO(e@nIMHχt(@9 h7FFSqUfS6= H)$_rnRnr5e(32Jfrfelxer9(qrZrR|jכhPRKӢϯNJN rf..,9rcwcsrS9 pCN`x7n8> 1=*hyyԚTSXeS^*jLykRi4 Pjjp yAo4isr1'e3)_vVNf,y#pn&Gec=C-7'j˟2zqqT#]%{_Z6ffM*^ #o$O9c/y32.\v=YK͏-11rz"aK@v[R<4 ZmDPtF*;w6AU8`{$s7>J"'֞z*KB<i&Γ>/[f 670Mؠ9ٔRΑ8gӇxOaw54ѵO%**t$8PSYV*Z\TA7pBV&̥jYX S42  cxSϩaTvRn[b ͉O7 jP ,& ,;H", MDQ 6x\S6~rJG?[\Jeqx]V*r UUEEQ8)%Q1Ѭ il4h㮃+2 >ڎEFGR?"q tMG% "!%#3!CA|Vr${3 z?PbԢKMw''r+ `;- ZY\*cX{6cDe~:B6{>Uxm< Ss3) XG"㑆 cr>֙ɨQirnm& 4z16Hd&ݶwgpȕ_E糓8z.8?r1CƆ!" ƙA "LFub8oɜrMt{NSEnj}l歰b*èoeU*=}϶lP,6Tn K ;iT۞QhR볻bc}x3#r1C;x5C ] Jx62<[4DfcyF-ZRDfe:՞w#fLYЅ>2r ck6v<ݝ6-Hϒ㿺z}d \'z޳;wm Ÿ%$#hex:q(eq=,޽ruTx5p.|q>rx l0x]St+M#)ʥǗ! #ƨ(9d04aÁG٪69JΆfXL-a6㣑.9c˜0N,זte(fbJC\f6hrƥh-ژtӴe*q,!g\'S*h%ZbᵳΑʛGX6[^!(\AZix6xr qT!g#/3u]m^g}[sc>ޱtYO.yF `(X/r\aq-x0%dpG1p^`eZA.gi6)L#*quPLY(JbUg3E~tRy\[$)-6B`B0yR%_v,DKӶs:Ւ *3ՉiIc]&nڃMY9e5|w'i zpwa1 'CyA302:6ewi,O=z%: 1^, dBGd;P©gS]p= 7qQVЊXS@ A^YBnq%H"D\DvDÞY Nލ`32.E 4n48&BI}Wݯ ' iXTm ?\=_@ Zeq2ZORVͳ?dmA9Ȗv=HhcbC-Gm_RK |Dk`*SzRzH2kŋsbks#KnKar ,8cfFnp17~}ˑ]g$!{Uά林hVd5 xhcn/N5-7y$_MQ[O{7JiO I%L~sWyv^</o_%zS˾X$gNbba1!eMQ,HV 7Wn_j4QꙵFN4rz֊p1&b}QuCȤRh5Ī J*80M/Ծ.+#o/5g?+{}-#=H(Sq͵Wz);yR vမ#hviZ9ҡxͤk14V7Yp ?^c`d=yyD̢be%"xчT:5R-PbpQC1Z̜3st31!z 2`!ӿ#\I؁VLClc6f z*ơFDa)u@:~0Vۇ]ޚ[.f9d|H > $)wS5&BYܳfUi=_#ϼ߼~m*7+v,aU8੠C.3VAV O[9iVEŰzJcAY&}{%GkkYY-5]`q1;} xʼnTϱ`E~0ZV%T6({A6 ΈC0\a1&OIat1%9Z*ro& {~ vM)?xH[c8P.ʍbT 1ć tԐZHk&L1^ZđE7#?:Sgdf-X9wk1C}tΎ5/En`.~^-nYhgTko;Mw_O&Mv`%N99s˧:fH$$#L`/n9\tJJb Qfl dӑGܳ:Loi- d 51MYuq[̜''Mo]r _T?H)j[)nsvKhi|ir:p 33lWX!ou$ܸĞzG{ {x WSx-_LTv.̭[92-b-hj0%MijGeXN&`"`瀡9U)u^ !XRJk KkE Z ԰kԧB UA,3e r|HCރldqxeo+o#Ў4 aa @3D[6ZlƳw9/SRq1&2?r\E098KxS U`cR |7VDWa?{࿃B'@ G9 bB@-6 fU/mL+xʄT,x5dξ.&uqS&kS8vτM{Û2>.<3dwfF0wNM\#ެO qfhVȬvbX5)Qm%"$`nm(DF@*M;0ꄤcɶ.1٩YUP4e/~·ؕ$D0sMLW-%||^1Lf^-b1VoXmXR5[RTOP>̛ *!'>p*pS'kQn$iNr۶_>bퟸFwیz;^/G0y '$>QSn CWYc0iD .F9 | rCTluXGn!c|cp&iLҰKI-Ό'#v`zs/\#)94rqgk~dS҇7/pR8ٱß rL= 2A>?Se ԔJ)aC(Xu|Ȣu9&<`* τ#FDDXo4pkvm OEѯTDz"E}G`{SqJ6 \|ן.uŕMωkV4+UMƸFoool{WMfRtjfC>%>F>_yswRdu78Rv&SyJM(՝jufiD[UNzX;71wrdyp#NYTq8 dV9HG1KϹC u6ٍ]1C=D2'3n\b5v7"q@H,B`9"QK%c2hQD"\ɯYxPkC{P[;ěU>ƅg'GV"p>  70y?F i%^+V$q栗 * @1wzo^^8//cx3˫$X,0߈,<YΤݸp&{ 2 t^|:CɟsB8_7 Mb|=&ɽTdx-L>gǏ3GL9QN hij.fΈ] 04 D,vZBF0]]2؞#Aĝaaɍ/`Kԫ&\ÖĻkU9cfonI535$tRlTRw~ȹ? {.q:?Nyq!:!%t$q'c?l_EDf&5ҊȽlR-ș6i/Ֆy z~0l7n7v5bMjexnbYdޠ8qD60s&C]q|DE0Òj&m j pƸH /`$ *-6;39)IfvN.zi}Ь-}uF4IȜ.NxAɹSqL%VY@sDk˕ O@3 VT",`q<`gGV=YgLr#q Vؒ\}Q6os8?Eoz[hgKo4==-㏬ =f̈ 4'Hڶe{(V> #|-ǔ-U@Rzϳw"}$^IF5͎FDs[1 dǘYf$gD#6.y"\iOYO0dFr*$U|[%)Ef≹yd~H951=blA /[qRE檒:Є .Mb`zVk3aӛ{p(n:-kV1.jZT좋cڼ j+ 9EṮ}iAb085pb\s}׿"{fLaNOg1/L(GJGhs%ia d4Ut bjC\E!V$3jd:G螎9 u=Ə31Ѱ9 Ѝ]]o ~qIfP8ɒ~>P&Y+@[c^EERW?Vh/IϮP5D⯥~R# ƗVLI,oX8vD[-Hk^hPq@8 V< EW5@/A`H(0`!jGv ;W)I,X (n^xJ_ƀyayG9~P7|G{ rrҠrڠtb6`T.T>> endobj 20 0 obj << /Type /FontDescriptor /FontName /ZARFJL+Helvetica-Bold /Flags 32 /FontBBox [-1018 -481 1436 1159] /ItalicAngle 0 /Ascent 770 /Descent -230 /CapHeight 720 /StemV 0 /XHeight 644 /MaxWidth 1500 /FontFile2 21 0 R >> endobj 21 0 obj << /Length 22 0 R /Length1 10284 /Filter /FlateDecode >> stream xZ tյ3ddf23LHL䞾& []3:['swn^ߛ(U|ϖlފOAϗ?HϷs}], #r4_S̡g@G^!DQH$Bj縤$Ԏ?Y8G+$_hAٳѳgO]|%2TGU2oF672;@RyѲe|9g ǧ"XZ?x&7 {ሔxse9G8F}6Xٍ)^Ou{;w$*NrGםن桓,JH$ӳ :ZGwN:|gQ4zG8ѭ#;C&--8Nsc~nXSo^]rbWUޗ?˗< on i no,MN4mpyu]݋>0g t:G>F3a6keOݽmު*H\oZr-#˥ު&]vnOUWoѾzZLi_i_i_RW^^Jπ!s`sGc,n$қH*Dxv'Jp)WŸ  ] pdcR ?{Ox0, #T ax$㧠9GY 46GK'ܜh`<a?GI.:[P8X- Y$!ocwpl阷 zY7a8 ˥Vrۯz< 'J#oHIcQed'GogL?rܽ(2i=Ç0(Pyd At2;̫l'r\ sp/Vg5l[pF7(&Q) E76#$y.Ka)`~af9Ōzv3=þ~N >o~.ԋKcߋoA@`51; !h “<| qb24(:|F (c1xL.+dL7 #pyQGúl6ֳ#'k6r;a0w~$ `c#‹B)c$eq/<c ^rxw ~  8?!vTY{!߇< `or.(^>*Iqsl5H9پ,ǝr:2i6l2$FR*DX] gu,w]]ݘ}YBW؉I5S˄^7fM))aJJdIsCyv;gi_ڊ᛫m[.VpV[a WwU䔄@) Դ0,މ+,%6wUu0UƥUi.W[& z+ 'MTp6b04ܫD$XECa-t>ya*lP2Ìw&,u@iƺbى27M(B=1vuJw.[GmUQd#)ˮ9.T`~`>s\] ޞD g(z&q!oB3N u}΂Yr ʳ ̠)0]ljBUJMKmXkX7un𧀚u}45{"E>I?iBa})<@]RG7 nKe ~+N}#|-B7E~  Σ Èߏ . 5Q sxagM3z VZZ]a-m26ɧ`,>܆-hTBzUVc`UZXjCш4ϠaIIQk,2̅_h5D0m N.i"!E8B.2+MvXmh _pɤX-.u%ٓNAx<"\Cx}5rJ[!#%r c:ЃR  ELf,"ukp3"'HxNk4_Հ@O`o"̓\`o N9;26 Xuxx<-_ ϾNTUs )N$I$`L5(.-󕖕rg° b6K3Jf0oJʥ;f^977CSn$)'`Z;'Ա{u3Qљ}M 篻cUlbo-6hV65+JEFŞ񷹣'TJ^SdЀc*W2LCVWaW 1 =?XTc*e.T7uN`^j* > C[3w=;oq?FK3⋛Gop[F_E]PAJ' >V6C #p8OM4%4G5Tu4fͩ(5[!Wxd11}0(OpӍԬK0Zu\ND393au Wa%3n^բ$nU˷c_ľ'1,-4汹E4ںpߺ7?Ff}AdVrLEt/B[" ;cщQ-!8XgsJ aW]R^P_j &3UDܙ@EFG +ܣ@ˏ״-۸B_ҡVR 1GnyjglA7!lɄ5C.'%/x[=_[6)yȡbM9ŔbS4 msysn8&Bf,IZt]&x2]OSX&-5 j8Ȱ=%Ϗ$84 :Np.wɌ׌bT^syn}yLqWk55 s[2ĭn?xN*pUvhH>I PAxXn8 SX ֓!3$2+؊~kQejN,EVϣFVq5B깴SqD\K]\63e= f8gߩ'c؏3jSl >y\aŢav5߿ً߈件hM{>]g w P!yyǴ&%qfhc8bN`*T olZک.TKjNmh\obcF'.;9sp(/m$C:EC/OgxF+]r0@@}wɑ؊*Ž؃z@gxJ+O  YE9 6c%?8ʵICPZƫ%|HkpO!ߎ|?aw! HCm%ayJ6-ۋ{ jGOVZx$XC!HPzR;[! k; n|,8~i4nhL77˳W^q)2'.#u0Sr0S1sY[5shƒ;C󜳚[qjekKV\/Yhs=>kZWkYcI՞$Ţ`J6To"dĤ>.f'56N,W %3H;v2bIEm%0zȱcce~#!;cM-Z")ǜPS *OښZ:[HsX|ǒ=rCP;uW.y#z˛e,ػD?s'x@.&{7qϱ{O[aNa#Ԟ`BJQ+hTNֈIR4Tc:j\}_'m(Ktč] ˫,,:%-W9[DWY8u;2{s^@ebP=M7vIK:!˪eKW-T׺u9/ {SLyDΟ*1kJ@(ȿl'8yo;& Ÿ0YYy^y $AzqkX2%gvɻD4ۙUBH2䖖XTC{[l\?cOҪ,..ZWW zʜgLYKvwX0[>N_K8!D`A$ ,tERhx9_CX' SJ [v1MoV[Y*kmcrNӂ-ufǏ)u=fGl]@ZZU_@tL-fmg6[8!Q)=9QN2NB|lB`xeT OhFYg$g{)ցźqK( U;0[.9ԡ|dy#ݩ6RX/)mF s!X-׈xoW~jj1Ջ*tDE6 :s"m)U|M5'jԇQhF3*Ad ϠTҠVeԨ AT8tɩ +IO` I]a5LXyEdWvE|<:=:v:Gn hwK 8lW5GF< 6k's) u:+?~aT: 9swV."x@oτxw_ 5xO^RO_ MЌ7*?oû{# rH,j5ݼ;PyݺUԥ_!݀t(O~,9.b% R:i H"4>z0&x^45=-rZgZҞe_;-oZ|ʹ7qSڗ7L˿nZ\orS<-~6_h endstream endobj 22 0 obj 6510 endobj 11 0 obj << /Type /Font /Subtype /TrueType /BaseFont /INSYGE+Helvetica-Oblique /FontDescriptor 23 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 121 /Widths [ 278 0 0 0 0 0 0 0 333 333 389 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 584 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 556 556 500 556 556 0 0 556 222 0 500 0 833 556 556 556 0 333 500 278 0 500 0 500 500 ] >> endobj 23 0 obj << /Type /FontDescriptor /FontName /INSYGE+Helvetica-Oblique /Flags 96 /FontBBox [-933 -481 1571 1138] /ItalicAngle -6 /Ascent 770 /Descent -230 /CapHeight 717 /StemV 0 /XHeight 540 /MaxWidth 1500 /FontFile2 24 0 R >> endobj 24 0 obj << /Length 25 0 R /Length1 11392 /Filter /FlateDecode >> stream xZ XSWν7 I$} nH + PA.ԅj[ѩRkݪOԱ.5u[Gkcm;u۱_%s`N3wz-;7w%ԋH:]ͼo9Ko4.xˊwuu yADYsB!V ]H-^-5!ކrʖUjZ[zÂERŭaa?+#&hJA 5H&V07#xw3<.&IA1x:H9e;H_QMU~vQi kIi8MI M;:ihhP+|Oqv0ʣd2:B4mS uc$QEhq,m,pQq҆߀4=J@kAO(G[$-h6ҮãF)۞4dEA>cQ-(h=~K3̞ Q2њ2\;cϷetJI86akK`-I. PO>i>;| ۴7=kb;Zc] l&Kba󼔭Yr.a_y '۵VsK$;ڜ9&C̦MAhu$ ul'- #b)CEY .=(ykJQRBhsBJaRϨVU WeTɪDU WjZVU.eYA+l_ZV :Ԥwy>e1 w}mPDFV9vsܠx7I`jF=RjC0С! ݭRnb[G9Ɩ;y[ngmx jFMX0QksTJ磍FgSrhNo8zV:l9ˡFuVpk Z[UAykui̵{?2W>l!Z~\xs5kk^-]h1=L.u(sZ \l7* P"є)!/{4B+Y4zz>p&*ŵgkikc6ѳ j-ffV mj)RVeUD h W?tX<%ãQX%_I-5zzl3FK& eR0V*.$.Zu ;w=O$v{i!NYF?Ȕ`Ϧjb;Y4kg% v>a:S:!BH }I-aE|BDN* U$(vu &+$OciUa t8 &s2o{@,El6X6ձIց?!R0 B0OhňHB >QLG]v乪eN)TBҜg5,suN!i|b%/UCiT ˜l pn s, [yN% e-h7;%%2ۍ+[y:j\M<5xS&t8bȓ~@5~ ˜ ~q 1H(r6٨/2W9%(*ZޣѿY?B6J7Wn(o'ȧ7|/M덶z.FY(ی 94gg82R \TRv.YvhN6󣐑T+r}-능\Ar07R* cKƗ9 brH{y[^^YݜcT{yYhЦ C771KlVfno޲Q E ŚJ,5Ff[ӻ~BHv'm w;Bxp7 <<Cx-i|.#3!|ϝ \pG;9B!\t ?n(p;RFxτ;Ax!<[.8sOҟFxb7`r(#zlʟKi󚴈@8/AUkRE2h!(E|q@ZP bGcH-T᫑囀-?Z?NU>!-^`B( ǡҀ4d( "jtM:)Z:K1]TTvG]P\Pc AO 8tVqTlELI Etv:JΉh#/:\2cډW"`+W;6$£ *뗕b IK]78=.iV{Sh vn3bJ) 0[_&8vCʖUFV뇭͟ݟ/~s72%%\uO^|aa|j~Y"?4)Q̉cOEC -[V5{0+~v~}،O4Է6%?0 P!; NaHU*I'됯f,80ЛSd/xes6KVY~dW+UrQaM= $Ywm:ϭeR2H+ >BP˜*.I׿$]?'Lgס󚇤 Z<" eJ@ϳr Bjka /^Ifv[򊾜,^e$v뵠$y|V,G@@6\7?DA4ΦdZ]drG,+0 Ө1A@E2P=h)h h;h:5ۙ`}2;pn/+!;/w͂Rr>(rs# *QiSf>$ ey4M3`vsHP'=ZWg28AgMHf Vmw.I/޽!¤˔9klN7fL-ZǝEEۻj2f/-sQzWq+> MɧF7rR+r)y /K Z@#y +B6`Wn^.b _!Lބ$LP0A!LP0A!LPW„ɹCYNv$| ra?3OpDZrn4j=d}vY+؞xܶ%ϤXsq4I#`"ԋk$sˈI@L#&1 I@LbsQ(khhhhhhhhy Nͧ^EQJ>B^(dYW?bcSG/wӞ5Mzţ_>)s/9ayE"LW `M&^a +W虁Wxr.2QM(&\M(!%$nB 7PM(&h%܄nB x;(X0_;?!2,d _![ii?潴*wjƢϘ'_,6C|/}mⶸQBCԔf=x9OA5Ws;)I. j?jhZVUjhZVUjhZVUjVUjׁ)ekV?VkkVkVkVkVkVkVk4Rʠr͸z*&ɖ-2Al7ج!C1̇Կ,vڽZ05o6y, `:{{p}H UR xE H#!{9DᲿ=DzW$xh5g(fXix|ĸ3q:4TsĶਆWӗI=,pr鮉/+Yk9/{ԓos],Gm&fE 7Cķ-l@C 78聃oz؀6 az Η ?gRYotGǬ+cxtNyA 6u@m:7W\zo){79n߻PWZ Zr΀xx@4xa ^X/ k5xa 5M)yY}yxbxg[~_?Mυ7hwsw_`i7WS{Ro8\M\D)6xn3Ƿp888888888ّkxa"T&na CE75;HM[&5M=9sSvI8y+㊻>ŷK`o!_{oᦾ=mo:`o|-M`o@{3Dܢv6w_} )Y_s$j%=w  @-Qq i"I\W~, R " R "Ezh# ߱PHQ( E7 ~,4j1ALX k7a&݄5jMZ5jMZ~؀bx"Ɩ淾Hy@r1Y{f 3jM&}L?^)eFXas_xVRoʔ{>ſGFf;6?~\(* /Uwom75#c < "p5!-hly9}}[t}²zEYI+m0oPTe /g 6q~xM@m/y_"o#HcEv]:յ)v9L!#b.Onb'A J~<> c<>ApWYyw S\~%~-St]3/$|ƸI\n۞|P^ׇ;9æaS`T0l*6 MæaS`TߦaS0p1TabR^\jC Cumd-=Efx:)s{ 6wVzs4@+?Fs\irP!Q$2Vg>Dr|2U!ag;*[Z>‘VT;v욪qsgߏMn < Zz # +x@2AC@ASAsAցv^0u[==ʃz(QQQQ٣,+{Q xGx,Q l_أGY7`K{I endstream endobj 25 0 obj 6433 endobj 26 0 obj (actor_types.graffle) endobj 27 0 obj (Mac OS X 10.11.5 Quartz PDFContext) endobj 28 0 obj (Dominik Charousset) endobj 29 0 obj (OmniGraffle 6.6) endobj 30 0 obj (D:20160629102354Z00'00') endobj 1 0 obj << /Title 26 0 R /Author 28 0 R /Producer 27 0 R /Creator 29 0 R /CreationDate 30 0 R /ModDate 30 0 R >> endobj xref 0 31 0000000000 65535 f 0000033758 00000 n 0000004443 00000 n 0000007207 00000 n 0000000022 00000 n 0000004423 00000 n 0000004559 00000 n 0000005894 00000 n 0000007171 00000 n 0000007340 00000 n 0000019239 00000 n 0000026365 00000 n 0000004691 00000 n 0000005873 00000 n 0000005930 00000 n 0000007150 00000 n 0000007290 00000 n 0000007994 00000 n 0000008219 00000 n 0000019217 00000 n 0000019512 00000 n 0000019743 00000 n 0000026344 00000 n 0000026775 00000 n 0000027009 00000 n 0000033533 00000 n 0000033554 00000 n 0000033592 00000 n 0000033645 00000 n 0000033682 00000 n 0000033716 00000 n trailer << /Size 31 /Root 16 0 R /Info 1 0 R /ID [ ] >> startxref 33878 %%EOF actor-framework-0.16.3/doc/pdf/enable_shared_from_this.pdf000066400000000000000000000241311341123343400235420ustar00rootroot00000000000000%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream xXn\7 ߯PE[FEn <@Ea8SN2c7=Ճw^NqND"C|?C$#N;xo?Hw?5%i!%6exXcO6,S#P/v̴ O:FB[u^y3HÝ"Htۆ@َ׈_}e|ZOʨ VX_$hHj#(.׻ݕ}y~]}X} JIS9}~?w8v@k:_ͥX};⛑ddJ"F=ciͩ`QIb% O0mt C 0`z+r)$8zN_7W߼IJcTGdA)Z9m?o:V/UFFp~2QjU\/D T^Fz=9rQG[7udXѦ\nSˬEA I7m-X?cЎ0clþVmQwlkOO3n/R\ *-#ם_Jm\.ʘP.I{pOQ:A{F6#n" ! 2LF"k̛t;YS*7d0vg9)АW&N~&h#G^Ցnb5 %6e)+dԊW0HUE$'LW`a5ҵ#=O׶H`U,[˜4ON4ύ-D u\1WI FNYcR &ѹR3Vvg`;uO ƫ>GvdD.3Kic\FWqxcajKyf;-^"ER/^"ӸØi  u$tMiu9 RYz,&b<βywG"$n1!`Py;S8cNA){4:Ң"/C:fWyp`/[E^{;;#njig$m} endstream endobj 5 0 obj 1690 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 311.811 198.4252] /Rotate 0 >> endobj 6 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R /Cs2 8 0 R >> /Font << /TT1 9 0 R >> >> endobj 10 0 obj << /Length 11 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xU[U9 -Ct)Kݥ[kAd$L }*⋫IA-zRPVw"(>xA(E;d&Yje|oB%6sɨc:!Q,V=~B+[?O0W'lWo,rK%V%DjݴOM$65GŠ9 ,Bxx|/vPOTE"kJC{Gy77PہuȪu R,^Q 9G5L߮cD|x7pdYiSශX]SzI;߮oHR4;Y =rJEO^9՜gT%& r=)%[X3".b8zᇅJ>qn^\;O*fJbﵺ(r FNԎXɂHg ˍyO+-bUɠMR(GIZ'ir0w]̈́Ϣ*xšu]Be]w*BQ*؊S㧝ˍaa,Ϧ ))4;`g>w{|n Jˈjm*`Y,6<M=Ұ*&:z^=Xźp}(oZjeqRN֧z]U%tACͼ^Nm{Х%cycE[:3W? .-}*}%>."].J_KJK_͐{$2s%խטX9*oQyU)<%]lw͛or(usXY\O8͋7Xib : mשKoi1]D0 N }` **6?!'OZb+{'>}\IRu1Y-n6yqwS#smW<~h_x}qD+7w{BmͶ?#J{8(_?Z7xhV[|U endstream endobj 11 0 obj 1079 endobj 7 0 obj [ /ICCBased 10 0 R ] endobj 12 0 obj << /Length 13 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >> stream xU]hU>sg -?m 2VMIfS*tv6;df&O髠>Ƃ*6/ŒJ5 Z (}R;3dvA2Ý{woJ4~>9}JMiRFJ ƎoޥKg[c[кVc(ejD] <zo?9[)׀\@z`:ojԒ,;VlcgnFf'Lgjx𒡏0۴NcN{r6fr-ɚt%Po27^uNgqC$AZ<->ê9<2%+þCМd9zZ"{F?V|ȴ 숊 cy-..A/b?h/Cs&ԬcD,?rzxo9=k?RcU}y~xNt2ɥп7 X } p| htZ*%LX'R=fYAoP~קԀNց^_"ذ.M Bg3p4<F .h?c>1' k&%^?MOCuE|֝x2KQުY դ gyカ\= !F;AUm5 T LiVw7#NNma4f,T&4 endstream endobj 13 0 obj 1116 endobj 8 0 obj [ /ICCBased 12 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >> endobj 14 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 9 0 obj << /Type /Font /Subtype /TrueType /BaseFont /UMYMGH+HelveticaNeue /FontDescriptor 15 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 122 /Widths [ 278 0 0 0 0 0 0 0 0 0 352 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 600 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 574 0 0 0 0 0 0 0 0 0 0 500 0 537 593 537 593 537 296 574 556 222 0 519 222 853 556 574 593 0 333 500 315 0 0 758 0 0 480 ] >> endobj 15 0 obj << /Type /FontDescriptor /FontName /UMYMGH+HelveticaNeue /Flags 32 /FontBBox [-951 -481 1987 1077] /ItalicAngle 0 /Ascent 952 /Descent -213 /CapHeight 711 /StemV 0 /Leading 28 /XHeight 625 /MaxWidth 2225 /FontFile2 16 0 R >> endobj 16 0 obj << /Length 17 0 R /Length1 6976 /Filter /FlateDecode >> stream xY}l[u(>DI7)R}Q%ʒU9JƤm[ص^n?b@&)au[\Z75[76@apm{xA6䏑:w'WI'It|Dk(uZsZ.!+_T 8jkgQ*_CZP׮? k(cW>OQU׃2zڳj(O^fUOK?_W{mP5'Ly2HX/UϿc{{Tq3 { MM"W 黊$eӿE F\ mLW" >@6ԀzMleQ8"9V#@:[D,^[t[d՝>5QIryvA%M]h\o7.lkg/lCJ]5i\z} r\F$T;dH.7u͛l+IYT)4Wu6Agcͪ .56nlx7E(RGlr?*˒7Ȓ,A,d[Gkh"qM3)cҎ :v}D&}v(ۚ3ܤ=6m[ T-|v쳰-,.h+*vD| ~( 5ga/to[$m7,15$K]p]gQV#)Ja$'3Z%ǔО$eOLK]y c '.?̤Wb$wQh wԸ֪Zu&v nIDEo7^eHU~ [MA0c?~?e7l]GƟ~7YX~'HP/Ld4|7lJAG}`l8J ~6R]k0=` 0C̹? 9I/5@%K;M삇F?lXUˣ9*yr kf›XA39KԸ#'. B{^u'>9;G1i>!f>z؇*v"~\>7F׾ 䥓{|\[%N{* X&Zw.oixzB[8F9XxtHSKӴ ;Gq2iJ1W+SQ"&-B1~/*قxOAn MaR@n M) 7䦀\ٿ6 F s=F^HB-;Λ`%ǀҐ 2_5Fde7#{<DDfd30HńX\LEʢ_]i X(8<ÉDC@b>;`q/ɣsrhϟ;Ώו}~Tr@4=G ^gV g:0R Lf2timc&Y(WHXYwf(he;Ӡ<GWF6{嗡# 1ك,U=9!Ohޗ Prέ%D@&3Af6𣮻CYq. 4dz Ju+?xVpt?_Qv=W|V-TPe?t"0'_;i9D|MAᑛ(ͯу=ܧA!>ֶ0,Ul?DɃK[H* A9UÇ {V|>ĬE8t15sYY[ٙъ";";";";";";";";";";)1W9#ܺr6pS3?W?cJAY-xBIg_&XOwHN\.gozSnA.FF>A HhuG`G 9~> ̈}eB7휫[K| (rߋw-p0iN$aoWk5@Z8{mK+ͯˢMmpFx&=1oԷ?6hO$Ӿ,uvee}ԫ'efh֑_ibNb U7:& & J9⥈ּM'EzsL]{se߂ӏ&d`p?Hf?PS>F2y1zg?gS_ endstream endobj 17 0 obj 3937 endobj 18 0 obj (refcounting.graffle) endobj 19 0 obj (Mac OS X 10.11.4 Quartz PDFContext) endobj 20 0 obj (Dominik Charousset) endobj 21 0 obj (OmniGraffle 6.5.2) endobj 22 0 obj (D:20160524100320Z00'00') endobj 1 0 obj << /Title 18 0 R /Author 20 0 R /Producer 19 0 R /Creator 21 0 R /CreationDate 22 0 R /ModDate 22 0 R >> endobj xref 0 23 0000000000 65535 f 0000009592 00000 n 0000001806 00000 n 0000004553 00000 n 0000000022 00000 n 0000001786 00000 n 0000001929 00000 n 0000003240 00000 n 0000004517 00000 n 0000004686 00000 n 0000002037 00000 n 0000003219 00000 n 0000003276 00000 n 0000004496 00000 n 0000004636 00000 n 0000005097 00000 n 0000005338 00000 n 0000009365 00000 n 0000009386 00000 n 0000009424 00000 n 0000009477 00000 n 0000009514 00000 n 0000009550 00000 n trailer << /Size 23 /Root 14 0 R /Info 1 0 R /ID [ <8b77a38ffe85e842a15ccf9c1e9be77f> <8b77a38ffe85e842a15ccf9c1e9be77f> ] >> startxref 9712 %%EOF actor-framework-0.16.3/doc/pdf/mailbox_element.pdf000066400000000000000000000426561341123343400220740ustar00rootroot00000000000000%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream xUMo@xGP]{Knzhȡ8M NNagؐJ,3Û7 [|޻hz ,鷌\aχfNC Y R#q K|uA_ֱjGJ>{`tW|yufp,s[Y& qq'K e' 3}Mֹkf[o{մҺwg*\s*JAZ^ ?XGJU\Vη> endobj 6 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R /Cs2 8 0 R >> /Font << /TT2 10 0 R /TT1 9 0 R >> >> endobj 11 0 obj << /Length 12 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xU[U9 -Ct)Kݥ[kAd$L }*⋫IA-zRPVw"(>xA(E;d&Yje|oB%6sɨc:!Q,V=~B+[?O0W'lWo,rK%V%DjݴOM$65GŠ9 ,Bxx|/vPOTE"kJC{Gy77PہuȪu R,^Q 9G5L߮cD|x7pdYiSශX]SzI;߮oHR4;Y =rJEO^9՜gT%& r=)%[X3".b8zᇅJ>qn^\;O*fJbﵺ(r FNԎXɂHg ˍyO+-bUɠMR(GIZ'ir0w]̈́Ϣ*xšu]Be]w*BQ*؊S㧝ˍaa,Ϧ ))4;`g>w{|n Jˈjm*`Y,6<M=Ұ*&:z^=Xźp}(oZjeqRN֧z]U%tACͼ^Nm{Х%cycE[:3W? .-}*}%>."].J_KJK_͐{$2s%խטX9*oQyU)<%]lw͛or(usXY\O8͋7Xib : mשKoi1]D0 N }` **6?!'OZb+{'>}\IRu1Y-n6yqwS#smW<~h_x}qD+7w{BmͶ?#J{8(_?Z7xhV[|U endstream endobj 12 0 obj 1079 endobj 7 0 obj [ /ICCBased 11 0 R ] endobj 13 0 obj << /Length 14 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >> stream xU]hU>sg -?m 2VMIfS*tv6;df&O髠>Ƃ*6/ŒJ5 Z (}R;3dvA2Ý{woJ4~>9}JMiRFJ ƎoޥKg[c[кVc(ejD] <zo?9[)׀\@z`:ojԒ,;VlcgnFf'Lgjx𒡏0۴NcN{r6fr-ɚt%Po27^uNgqC$AZ<->ê9<2%+þCМd9zZ"{F?V|ȴ 숊 cy-..A/b?h/Cs&ԬcD,?rzxo9=k?RcU}y~xNt2ɥп7 X } p| htZ*%LX'R=fYAoP~קԀNց^_"ذ.M Bg3p4<F .h?c>1' k&%^?MOCuE|֝x2KQުY դ gyカ\= !F;AUm5 T LiVw7#NNma4f,T&4 endstream endobj 14 0 obj 1116 endobj 8 0 obj [ /ICCBased 13 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >> endobj 15 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 9 0 obj << /Type /Font /Subtype /TrueType /BaseFont /CKCOEV+Helvetica /FontDescriptor 16 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 121 /Widths [ 278 0 0 0 0 0 0 0 333 333 0 584 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 556 0 500 556 556 278 556 0 222 0 500 222 833 556 556 556 0 333 500 278 556 0 722 0 500 ] >> endobj 16 0 obj << /Type /FontDescriptor /FontName /CKCOEV+Helvetica /Flags 32 /FontBBox [-951 -481 1445 1122] /ItalicAngle 0 /Ascent 770 /Descent -230 /CapHeight 717 /StemV 0 /XHeight 637 /MaxWidth 1500 /FontFile2 17 0 R >> endobj 17 0 obj << /Length 18 0 R /Length1 11048 /Filter /FlateDecode >> stream xZ tEhy?i})}-EhB[( *\"<+BP*/E]WUQVuEc{jo)dz盙of3ofs( m]I !JpE(9؏CbhjH j\&ԃGR 83: P?#gq7੢qҙ&VsO87}rA{cs M'"?GU$@=@b|?>"NE;^S?f9> Q/@xX/qt4Zt5N9ۗ;LJ~cwE) .Ǣ,|uQE#ȵ_wdB>>ݑkG"՜ШG8l펉Po/M:}(Lu$ d`WdUR'׊yUIU> =U~;?S$˻x+ZP JA.8s(*X8 9IN @ HЅ"HG$SBh1#)BDaBSQ?FCWD[)(GATr3LwMkh 7I"boYt3λ4%eZ}ɮ[@-:L6IJ-m ;H\n/ .s9OtI+^Le'Y'e]bWd[1}mkuW)il5Mzo\_ͤLj&}mR_dKJt/ &5gm :[B dݍ H͞GIl0ȁP}k$@gQFqġ>H'hܞл8ˠ^Ñ=;Kh': ҭY 6!JDyTnEÑPZnCGQxWM`"E#̈́67@ɕqEA""Ȅ@gߏ"țTMȆYq##$ ih8<`i-wND~jÀUSDgEWw%et'r$7?H(HQ< c:9:;od6ZCC}Fn7]L?)_EE.EAFdGh=%&4e\K|xz> >Pu~:?_(RRz*ꤶSGNqwWL1KO9p[xsHQ7 )EhjѮDп(sv.K'؆7ZlٸZ</K, q$#Hy]VI. j"NiQsF7A<  pѨcEI: \G!'p鏄pB|T1WUcON#!\CAt u cn %!RfkhoOŢLFJD=tYoڵ7ި|h|{3TR)Ө8w:y}\u~^5?2*gfo~_`P4c o?ˎ🯯_o #SA8'* Ӄ<8"\ H2*)\I9yKcc<֫yYzbdo~|*va_v`j_wcUw?dA^RNAV.II"ޔRQs#01CʌuiuKG@xQ|WS> 0.I٢MdrtE 2 E{v͠z:ѻ5@\6.GNQfeڍ}W Eue+\P;\Ҩ>tZ{P,HrªrKe|Uhk6(*_t*Nh<+| F[n ʞM-Vmj<g.4\-+$ϠP56kb0+sJO@y.d5&|ʅ,v ]o V]}݇qs!';?oVXNxwl8jtP Paw0ju킦]mY xX|`E.y6zTosA;ϟ6NcX y ӓ^WUgx-7*RXw> Mnѭ萘qȌ#&z٧ig1v[FOi>WIu#B@t]H('qyz^Īy3p,]S 0xQbs.LX 0E0 (9:*WrxOի?;5V>`>so}oۘՅx׼2 b&AA=ȾώֈJ!氕:*֮F)QǥšYMեuV_M&jEM&G06Ly*xa,FKLA2N#Lgw.ʝc8ø!sұJd/? >zW/ (;6o|\c,p;dDVݻ-4bY^DYMEcTqSzʢmu65v#K޻+?ً\V`ٷ`Sx;'8VWhr3êߨ嵱*R &k /J@\5Áؐ2a6d^pzRÓd@h; ( ֡E} &V( nO5yjZ(4T*D6$U 2nkt>=4?kT|1^͜y1XH,`Wo -$, MGu{(FrX2cObR뒴;:YDfNnFs/TL+DHZUcL;?'``e/Tc|xCy{=gq3bg/H _aJS6 eumϫ|fX_5>p_J<)uGhħm (d=jÁj-[!hri0߽˞MP7жVEM(`3lKn~{L_,^2@TV&cX\Vhyd K󜜳()ʘ~WlZg&TJΉ6դԿ`6Ru j! M#mu\`Jw1ggCGm7i|Iv~|tL fhܛ)syFxk*cOUeXP=rmS18CɓO~?S5<g%pU7|]}clfp ۾Ӄ'H 6VԦ&j65?m\|h3#qRIbSQ6܊iO1у0ͰNs8tOuNILj; 4)bAJb&ZqcF&- a2[BFk (ӏt\K=m\/Y!~<5!$*\e>UI(pvkflSXUӛ-72HHtyW'ACy1o)NEX `VA $ NG6wDGqha:ߘ9wz~ axku؃?z"|#<~ C(+|ちPS TiT]r*M|&K<]'Ě݉\Ãx=J(Qi3Xk2^dYEQ4,&ՙ^$Oj+<gϕ{ oνEݿygމs; }bkuR 'SWH:c05hޘ|aTR42O f 8L|*dƅp9_t#cXSrq"$|MF;Gj`G/{ȼ(\42pHlKn~O2*\ىs|x1ݪ.wgb{0/5WMcEo5L4]zRby(OBI3b=}o"2\`/ɒrȗn` jHf@S蘜TȒJ8=Kp!өpց3 ۵gՙ\BU#48r~566 $Dn>euN} c;&q`Mp>)[gG6O홿1:z_fΙs{y"x ya܎IٕbE9ΞZ7;ؒ1%%cP|L pa FS5X_?ҫ!lit2\^VpP' g#H8_ҽdqg%qk諰"V%G\ěLpI oRjEJ frHȗVЊƃ ,P8B',iC>d Oh+OLJxf= Zi;dJ +j&W(%u~,"P, .[w+6 9KUk=,='ɐ1GN`ZAsd'4/Wx'E9%@xC[p*nj Gfi?G6Tc,ynQ0b* v:f,8-'yaIE 2@UZJ*&&&,໼,%6S_!˪UR9V a~ov |ܵߜ +BO/AiRIA!M|mQ_Cnnc34})c_aMAtblbk CꕊX" 7MǕ`|;zX0EuS g3Lz ЉZ=\%VhF Ӧ U5xJ_v]>VgPŪpk؁%m/ /gb8Iؑ'XI?_ T? *d2T!R5}1CK=s64Ap 7j!SM6eF씪]KJ5bV h?г@//I% ((4hr{z׀>h(2h#8>iCS?e?q`OFzk no%;Joixw8xU`L[ڿ{\q|7

> endobj 19 0 obj << /Type /FontDescriptor /FontName /YNGNAO+Helvetica-Bold /Flags 32 /FontBBox [-1018 -481 1436 1159] /ItalicAngle 0 /Ascent 770 /Descent -230 /CapHeight 720 /StemV 0 /XHeight 549 /MaxWidth 1500 /FontFile2 20 0 R >> endobj 20 0 obj << /Length 21 0 R /Length1 7952 /Filter /FlateDecode >> stream xY tSUȳ)I%4Ҵ$Ц06`hP|C3;K' \(kzq_T#69)\.Ƿ:g57d:@zr]O3n#;ƔeׯJۯ_v| }҄#]G 8N'm[DZDŽfJ4T*!L4[l}^h!OJLH?PlV/6M-6ԆnH^  6ܹ0㶰ԮMSklsWdDRMb#YbvR"4y@/7s9 EBHQ$)T B_\ELʐiD%DF G>0``Ddpw@.mGJq}zg*@ T}{O$ mӇL#֊SY'@0tNYܦv%ŢŞŮ;jXn6OS뤶LJp嘎!(!r`7&1K#vUx?IWIbW3M0RhF 5񓔮']/P3 Za=1 E ?dԷ)d[VvR%>wC3?5m؀2__qܮ±=+V\K<0sENA1,T4˼Ϝa+99>߉Ksji/-f6~ 5X85/Ľ)~A0ewy 3(eװY./ȦȚ b>ķwѸdB,UFr qS !?8o BΌ8p!\AAB<>x\ %S\v-$NeKf#?5g:znWW|?0/ ?*3ʆd{edoHVhTßhFe84BG3?8Di4_߱d~̋ױOJi&`=fMBqJ![HOjRS*B.9A(X{Loij*%.J (qrI, Ӥ.ʹ쒜DNDNԘ,)6y,1> MJmR8f30y}nS{LP@߰]R\tJ b!@+sxBʶPlXj[sfIqgZJ-/.MK?lMZjY5%=b( twH腐ދ!7\=[t1#RD2w}! $^$ [ SHii !Ρ6 Kv_8ە-EJo5)JKE]kߞПmLyXۏts/(mK0C^j 3D/8{g}z14X[ ;aVlt.5)ϰf& XL%zzrJ`RMdˈ }˟3 3R*BهTÊHKIecz[ sB.HI|:L\H q앉Zfuv,aq%|ikh5P|^q,YWC^ vm+V|j 6T$,u -}kڭu@ vA]UJ2;im'꼴h&0J/Y/kw+yOH{͕xb;fsD1;*(/@'hBT~ :z/Ќk]Hl$!V:[HIz''I|j g XNhV#r^NGO7{JLZBriN:J -T_/O#ѨcBoNQMT/.{65k/xZ͙₠ů5R_6P}a]PG$gVule[uhttԬ[5ec0[9מEVWʹmZYfW h2LȔV|)JWRC6Ş~M6h#9ڰ~/vvq]Sb'0796l_\p}}p,Lijn.HXT$mNڬaue,og^`uZm&QCڈ4Q&i5J&.Ȝ 60ӱȝ &1֫{GF /=:?͸hfƿdny5ũBR9\ v%C&{lSlNe4]vs:ʼn7tFhˬ(OimlȔUhɻ:٘2tt^95,fwxb0ϵqtk(d\:gPv U՜Cq~NcoUgϫpGUorNr891 rcy{mD*^V JW)4j922R,T#,DIN &%?@fT˖ֽLDsDJ)vHDPbC:e*ڠ86a4s[j잦DsWvc0vvQcG9{ z'OIjw4@;\ H9B29󋚂+kJn\T.<3(&YHBn"yd/#$o?0һxKR.*KҿpKb.w?W endstream endobj 21 0 obj 4710 endobj 22 0 obj (mailbox_element.graffle) endobj 23 0 obj (Mac OS X 10.11.6 Quartz PDFContext) endobj 24 0 obj (Dominik Charousset) endobj 25 0 obj (OmniGraffle 6.6.1) endobj 26 0 obj (D:20160916113738Z00'00') endobj 1 0 obj << /Title 22 0 R /Author 24 0 R /Producer 23 0 R /Creator 25 0 R /CreationDate 26 0 R /ModDate 26 0 R >> endobj xref 0 27 0000000000 65535 f 0000017020 00000 n 0000000653 00000 n 0000003402 00000 n 0000000022 00000 n 0000000634 00000 n 0000000766 00000 n 0000002089 00000 n 0000003366 00000 n 0000003535 00000 n 0000011507 00000 n 0000000886 00000 n 0000002068 00000 n 0000002125 00000 n 0000003345 00000 n 0000003485 00000 n 0000003936 00000 n 0000004161 00000 n 0000011486 00000 n 0000011758 00000 n 0000011989 00000 n 0000016789 00000 n 0000016810 00000 n 0000016852 00000 n 0000016905 00000 n 0000016942 00000 n 0000016978 00000 n trailer << /Size 27 /Root 15 0 R /Info 1 0 R /ID [ ] >> startxref 17140 %%EOF actor-framework-0.16.3/doc/pdf/make_shared.pdf000066400000000000000000000227051341123343400211640ustar00rootroot00000000000000%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream xVMoG prыo( E8X ·H>/hfcFYE/;=ч-rK>%#a]!IxMmVs6t{ *O5rC UdZx)} )N7l0V'ն` -xUWX;>lEb6"Hl8+z:jOZd7aSA%q4?ޯW=o~,?nst9I 6Ԝ4R b8Y>?MNT_m[\xIش`B<8:SMyx*M_)M#FJB'l=T͙ x__Zo(먤l=ےZ^WtT!W#y9ڎH=w+<΃S# BdF(A:! :=b2 v\N+ 1 FhH1Rd}ei ]cU ķՙbhyZrS1(4k,J&a8RP 7df04tuֆAE[)\SmhLZ ;0acd`t^wvBy^19!ai[$>S$ms+tEϷ rz J#5<ܱ+4v[rjJѱ?gZm=#MKz 1V{6G R g_{A( :g஍jz> endobj 6 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs2 8 0 R /Cs1 7 0 R >> /Font << /TT1 9 0 R >> >> endobj 10 0 obj << /Length 11 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >> stream xU]hU>sg -?m 2VMIfS*tv6;df&O髠>Ƃ*6/ŒJ5 Z (}R;3dvA2Ý{woJ4~>9}JMiRFJ ƎoޥKg[c[кVc(ejD] <zo?9[)׀\@z`:ojԒ,;VlcgnFf'Lgjx𒡏0۴NcN{r6fr-ɚt%Po27^uNgqC$AZ<->ê9<2%+þCМd9zZ"{F?V|ȴ 숊 cy-..A/b?h/Cs&ԬcD,?rzxo9=k?RcU}y~xNt2ɥп7 X } p| htZ*%LX'R=fYAoP~קԀNց^_"ذ.M Bg3p4<F .h?c>1' k&%^?MOCuE|֝x2KQުY դ gyカ\= !F;AUm5 T LiVw7#NNma4f,T&4 endstream endobj 11 0 obj 1116 endobj 8 0 obj [ /ICCBased 10 0 R ] endobj 12 0 obj << /Length 13 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xU[U9 -Ct)Kݥ[kAd$L }*⋫IA-zRPVw"(>xA(E;d&Yje|oB%6sɨc:!Q,V=~B+[?O0W'lWo,rK%V%DjݴOM$65GŠ9 ,Bxx|/vPOTE"kJC{Gy77PہuȪu R,^Q 9G5L߮cD|x7pdYiSශX]SzI;߮oHR4;Y =rJEO^9՜gT%& r=)%[X3".b8zᇅJ>qn^\;O*fJbﵺ(r FNԎXɂHg ˍyO+-bUɠMR(GIZ'ir0w]̈́Ϣ*xšu]Be]w*BQ*؊S㧝ˍaa,Ϧ ))4;`g>w{|n Jˈjm*`Y,6<M=Ұ*&:z^=Xźp}(oZjeqRN֧z]U%tACͼ^Nm{Х%cycE[:3W? .-}*}%>."].J_KJK_͐{$2s%խטX9*oQyU)<%]lw͛or(usXY\O8͋7Xib : mשKoi1]D0 N }` **6?!'OZb+{'>}\IRu1Y-n6yqwS#smW<~h_x}qD+7w{BmͶ?#J{8(_?Z7xhV[|U endstream endobj 13 0 obj 1079 endobj 7 0 obj [ /ICCBased 12 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >> endobj 14 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 9 0 obj << /Type /Font /Subtype /TrueType /BaseFont /UDCNVU+HelveticaNeue /FontDescriptor 15 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 122 /Widths [ 278 0 0 0 0 0 0 0 0 0 352 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 600 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 574 0 0 0 0 0 0 0 0 0 0 500 0 537 593 537 593 537 296 574 556 222 0 519 222 853 556 574 593 0 333 500 315 0 0 758 0 0 480 ] >> endobj 15 0 obj << /Type /FontDescriptor /FontName /UDCNVU+HelveticaNeue /Flags 32 /FontBBox [-951 -481 1987 1077] /ItalicAngle 0 /Ascent 952 /Descent -213 /CapHeight 711 /StemV 0 /Leading 28 /XHeight 625 /MaxWidth 2225 /FontFile2 16 0 R >> endobj 16 0 obj << /Length 17 0 R /Length1 6976 /Filter /FlateDecode >> stream xY}l[u(>DQ7)R}Q%*UJڤm[ص^m?b@&au[e\Z75[76@apm{xA6䏑:ݏs=w9iOnrHճ׉1Q>J뗮jw .]yl@zy5Ttgÿ~yճkm<>~A~uy(O^vUO6BFrb#f"F)C>R}9ӽ?EnϞ7[lMh$(ru[d:oHRh?[ęM`ĕteR$I'tLoު&or@/{消E-`㤋H7{hN-mruJE|fk@[S 6<*8]*0 ?U⅍|`M}X)Ѱ6ɑe>]6+ o]m4!G`o4 MJ*NR`SY?Y߼9ݬ5n]oޝJz;Bc|Ugt6&nV hllpxbiƆw+Qjdi+}t,ySEBd z4 ےZ:RBkb}I.vuEnץ#2ØCtIl&{I0h•Xjᛏcla7tA[Q#XCYx {`&d}LNuu!GX*6I=If2K)>E*IH: cA2~:A,]""IH9@NO~?:4Aո`cg.hClQ'>e'C!ʯW%dϓo 6#l@7a;wvj s\7g9d5a4#9B_@0U2 (suQksβMఫuٌWZ + D+Y01HJ$>Z+;_`/bIڈ%@{^ $9KSˊnCLVWKd}TFGQHϘ d'9FJC<j̍ @Z yQE ye@> EJW,Ӎ"Y@ 1m4L2^ Saf^2aHdY0/(m@%Z=2C04os!i.C0ADAEcK_)k} -[ib]&M4m `$or0ʬX4.7:Dʍ6b23+*E啂<e%yzdP‚BSr49z7>r&&#}'Hb4U&SOg0gYֻCvw,p@rҳ00!)-p=h 1/Nj΅:l?GW ѯ|-ˠ@ 2{ ,C9 PggPg'ف-î|nք3Vv1[uv UϜX 6 A佦ˉ/C`W0vL,zw b"y+ppt^9m:?Ūn}/ u10B yp Hw0??0W$/QOwU rO3xō|\_1;Z`f*YML\X1s7@g?.Qj6µ0y_;Vxdɼ !C'}֝O[}T.\h5OK AI~fj m12I ܭLVTԼIKP_K zx Srث4r@nMi Wu z!7 Q@iE`Qm-P˄&qXq4,ȢW@D QY.ƛhkΞ,y|GG.&Db:5Z OMc%.H&sϦH  9p'C(}@~00&s_WϿ 'Qi %xYos,pXsmV~H%0(%"QdRsDƢRMHᐕqLCDSi}:Q P_<'dTuw~D`>A{ ?3:r]6h3 #79y6h3 n7z]AacXt[D6dq ԏ戶4k8|)m繐z|vYj \jC#W3N D+tB?N ࿪m|u"ĥNۉ~,nw#=T;> @b_r{ b ?!Uάά̊h^ZYYYYYYYYYYկfke-b=W;Վ IHʩJ%NUeGF3@v13vn1_<76v~1X<U 0Gݝy4_4s["_5#Z&(*82\rBah96יy$n\|T͙ZUL3z0xMN?%~'ؾr6qS3P'_&Jр"x"9sKvv^2Lo3\bW_]j}5Xt־^:l﵀6c/@]1w8{E{"9due߫++k쓧^;.3Cjksӷ0y1ix5EQK/E$m:8 ,ћڛI[Q_V d*sF ] endstream endobj 17 0 obj 3935 endobj 18 0 obj (refcounting.graffle) endobj 19 0 obj (Mac OS X 10.11.4 Quartz PDFContext) endobj 20 0 obj (Dominik Charousset) endobj 21 0 obj (OmniGraffle 6.5.2) endobj 22 0 obj (D:20160524093456Z00'00') endobj 1 0 obj << /Title 18 0 R /Author 20 0 R /Producer 19 0 R /Creator 21 0 R /CreationDate 22 0 R /ModDate 22 0 R >> endobj xref 0 23 0000000000 65535 f 0000008932 00000 n 0000001148 00000 n 0000003895 00000 n 0000000022 00000 n 0000001128 00000 n 0000001271 00000 n 0000003859 00000 n 0000002620 00000 n 0000004028 00000 n 0000001379 00000 n 0000002599 00000 n 0000002656 00000 n 0000003838 00000 n 0000003978 00000 n 0000004439 00000 n 0000004680 00000 n 0000008705 00000 n 0000008726 00000 n 0000008764 00000 n 0000008817 00000 n 0000008854 00000 n 0000008890 00000 n trailer << /Size 23 /Root 14 0 R /Info 1 0 R /ID [ <5ba17f31dd3a4dcfd0d7ba9369eacf87> <5ba17f31dd3a4dcfd0d7ba9369eacf87> ] >> startxref 9052 %%EOF actor-framework-0.16.3/doc/pdf/refcounting.pdf000066400000000000000000000251221341123343400212400ustar00rootroot00000000000000%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream xVn9+(ýI#F.n`A hZ-GK")dj 3^?~{)I)ǫJV;I͎dk4?YHe-[Kz̡׃{Pd5+$Uuw[+HdلK kGͥ VhLN)aIs}zN_hooHzm}w4oVnltþR@6=9&=D@W9c&߮٦7lWk-z`j.ofQX\nok ϣJ5 d.ٲe XQYzEi7:H ]U3n{x.o.x3$C m G6R"=*C7ߨd1E)^Lo~ꗝ_ rRC׭:ZYoH?8rh~ȰIF_%[Wu?[+9c;n*iV'Ct~FuL_vA2q*w0&00 bǽEawq8'Lef-0-G/I_Z nb"nvjb@ɥA{0HRA 2YV,=ceĒ%9A@GwG^=);aЍ")^Ns-cM\{(?%4,xπ\:l D)jD)ţn6@Z\DzKL$TIae()+-| U0]xUE@f4`M şTBzzG$9x\X=״ z90J+n |@(ˀHXl]aTT5[χl袋o s4_ٮS<+NM{`yXehiǍ6\e}Vyc~?4n[^lofLb F挛c%pcSK endstream endobj 5 0 obj 1033 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 311.811 226.7717] /Rotate 0 >> endobj 6 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs2 8 0 R /Cs1 7 0 R >> /Font << /TT1 9 0 R >> >> endobj 10 0 obj << /Length 11 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >> stream xU]hU>sg -?m 2VMIfS*tv6;df&O髠>Ƃ*6/ŒJ5 Z (}R;3dvA2Ý{woJ4~>9}JMiRFJ ƎoޥKg[c[кVc(ejD] <zo?9[)׀\@z`:ojԒ,;VlcgnFf'Lgjx𒡏0۴NcN{r6fr-ɚt%Po27^uNgqC$AZ<->ê9<2%+þCМd9zZ"{F?V|ȴ 숊 cy-..A/b?h/Cs&ԬcD,?rzxo9=k?RcU}y~xNt2ɥп7 X } p| htZ*%LX'R=fYAoP~קԀNց^_"ذ.M Bg3p4<F .h?c>1' k&%^?MOCuE|֝x2KQުY դ gyカ\= !F;AUm5 T LiVw7#NNma4f,T&4 endstream endobj 11 0 obj 1116 endobj 8 0 obj [ /ICCBased 10 0 R ] endobj 12 0 obj << /Length 13 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xU[U9 -Ct)Kݥ[kAd$L }*⋫IA-zRPVw"(>xA(E;d&Yje|oB%6sɨc:!Q,V=~B+[?O0W'lWo,rK%V%DjݴOM$65GŠ9 ,Bxx|/vPOTE"kJC{Gy77PہuȪu R,^Q 9G5L߮cD|x7pdYiSශX]SzI;߮oHR4;Y =rJEO^9՜gT%& r=)%[X3".b8zᇅJ>qn^\;O*fJbﵺ(r FNԎXɂHg ˍyO+-bUɠMR(GIZ'ir0w]̈́Ϣ*xšu]Be]w*BQ*؊S㧝ˍaa,Ϧ ))4;`g>w{|n Jˈjm*`Y,6<M=Ұ*&:z^=Xźp}(oZjeqRN֧z]U%tACͼ^Nm{Х%cycE[:3W? .-}*}%>."].J_KJK_͐{$2s%խטX9*oQyU)<%]lw͛or(usXY\O8͋7Xib : mשKoi1]D0 N }` **6?!'OZb+{'>}\IRu1Y-n6yqwS#smW<~h_x}qD+7w{BmͶ?#J{8(_?Z7xhV[|U endstream endobj 13 0 obj 1079 endobj 7 0 obj [ /ICCBased 12 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >> endobj 14 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 9 0 obj << /Type /Font /Subtype /TrueType /BaseFont /JATSYI+HelveticaNeue /FontDescriptor 15 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 125 /Widths [ 278 0 0 0 0 0 0 0 0 0 352 0 0 0 0 0 0 0 0 0 556 0 556 0 0 0 278 0 600 0 600 0 0 0 685 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 574 0 0 0 0 0 0 259 0 259 0 500 0 537 593 537 593 537 296 574 556 222 0 519 222 853 556 574 593 0 333 500 315 556 0 758 0 500 480 333 0 333 ] >> endobj 15 0 obj << /Type /FontDescriptor /FontName /JATSYI+HelveticaNeue /Flags 32 /FontBBox [-951 -481 1987 1077] /ItalicAngle 0 /Ascent 952 /Descent -213 /CapHeight 711 /StemV 0 /Leading 28 /XHeight 625 /MaxWidth 2225 /FontFile2 16 0 R >> endobj 16 0 obj << /Length 17 0 R /Length1 8924 /Filter /FlateDecode >> stream xZil\u;pfg/o,CGp'%"EKFkFFrȱvSCEҏ&&hFl8vnE©P1a⢉5w{3d0Hgw9~s[bvvSGcy4?>}/2w}W ~syq>@[]ƀ&OyH~ON>]7mGSGϮ̑SKgw3Z_ r`R"egr!{/WOfs\ԑ\԰xoVEAWz#gpee&+ʋ!]ƎWe6Afc,0h^@s'/\]&ʈ,r @SGYtiRB4 K9ӘRX՘$IbI::^;ij)&L$&u~":bR2ȤmRc ڱGXjaa-|!d*}J >Iop2ᎅ'C+ZXme'SG֙_ceu l0cs `IaۤIjy/8 l+LlZ"1[fQg"fo@~23D #{8;!_a %ܥ11LZ߬XnhE9üa>H`AB/", gN3&&AߗOE}3^~&u; wƓUӽo1̓YejW+v;75x#4?ށñ}> u0 Y`mZ"48_Ǭ9q;n%(dw-+y˕rz]atۼ};/]Z +_ &"#a0fYwBih 4  "2Pׁ)'0oSޔ4ʿ!|σAA] :@UF;t"HB!&^lǍq)" q( )3+HWgGwnWGk;ͨ#jRt'+\Kyj|}33r$d ̏HB | "+DCbAH==m(K$TXNOny4rV?BNv^ zۈyݰE5TRBL3}ijz+rWySPăz覷ߙbYdAaM p)X0 6L,@&ay㠧@W@xNO _WuV%' h-)lPxx=D<CURV0e()xKg*㼲!)d]߉r;ZofeG-<\+ɮ _烛'co/_C[2;Ϯj-TGCư&!7ERp@PL [,C]s#܍ϔOzʱN#^Cztye^x᷄Ǧ?8<+#e^ _L̉y $E۶7w@)ˢ-u_G!k7.C[YWk[1{VAdl#O1V]. DhXu:|`>Xgfrq_eOUG#]AХC@VY 󖰱rxt'(ԥ3`3 !,4eA`W]pa @ 2!r A (`"!b0Ae@5f=)s$`'R`#IX##HWpK>W& +zzʃqʂ'#eUy&$yb 앲nQHn-3cs^pm.FPғMw ]\.J2m4pؘۘ}a6œ{#f$ &`{ iv8<*BRB ZrE9`5XWOw [l*w n,X w Je,c2s{̍%%QXf@Æ[ΛGiD#^G\ɑBa<-Gٱ[xzu6jG >)D^e7/ر$6hB!Q#DY:PV>J׃ILѳ3۰SۜWϒ"VXc$pҶshEkr7#HsLC<$=@TG&U)CG[ʿg']╌onL57 ھJs*)7 JϗMy0?_n 9>qY;TTLCANҊL7AЉreCU(E5F=xx"f 1֚k s NE؊$܏0ʾM鰚P:|F:^Z`TX+}CAn-b@n-E \_B{ HCnUwy%5{BS afEb!Px,DY4h.O jf83om羝M]ÃALL/ c ϟy/WO8p.D8<||b\@"?WXp8` ̉kPhl i&᤬̯ӬRsu5$,nW >oW_MgA:/0cϯfu]ұCH0_l360 /"+j360,N2s)A^زJg"h%=.N"xN[r! Fm\\tJT$cYez̋Ly16pjX 7:rQ1 Gc9?J@o㎎̀akfn0i煘Lz4܆[Eu}JxdlLJ q#fN <ӋYŚ[̊ά،VٙٙٙٙٙٙٙٙٙٙOQe;PX+Ë\£ (h񱃓q.`4?tt>?:4tl>?|uW)Q*rnW+,_5#ZoMXgoOQTqlpʙX=R޻.ʱIfJ"Ŭ@آ0WS0jx0:9! bu)Jj⨤VJ@` ,% XK@` ,% lZC_X[2*^B"}ΞB%#]|Nfo3tږ9ţ1OA)VbKSOaG0ONbvkR%_Z⅗Ҿ8QvjU;gG| aGŽ*U;S BxJ7E9,8uHۜ9vF5([?&ޙɩ7l3=@k+LuTY6i>„yQ8z|Zg5 ~VA6Svިz@54:RK hD50!ȩ*YQN^lXp$qd1uʬ;8|Q+sxbi젳ۦ#K$ۺWGE,iWz.$:1`́+^wNY)4APE]KЯtHQKe U v"cTuTU@&ID|n&UM_n|QUß(:D%x(bmdȍg9-+;Pmg;NTqvڃB^1/s4b]Μ8vd/c endstream endobj 17 0 obj 5074 endobj 18 0 obj (refcounting.graffle) endobj 19 0 obj (Mac OS X 10.11.4 Quartz PDFContext) endobj 20 0 obj (Dominik Charousset) endobj 21 0 obj (OmniGraffle 6.5.2) endobj 22 0 obj (D:20160524093542Z00'00') endobj 1 0 obj << /Title 18 0 R /Author 20 0 R /Producer 19 0 R /Creator 21 0 R /CreationDate 22 0 R /ModDate 22 0 R >> endobj xref 0 23 0000000000 65535 f 0000010096 00000 n 0000001149 00000 n 0000003896 00000 n 0000000022 00000 n 0000001129 00000 n 0000001272 00000 n 0000003860 00000 n 0000002621 00000 n 0000004029 00000 n 0000001380 00000 n 0000002600 00000 n 0000002657 00000 n 0000003839 00000 n 0000003979 00000 n 0000004464 00000 n 0000004705 00000 n 0000009869 00000 n 0000009890 00000 n 0000009928 00000 n 0000009981 00000 n 0000010018 00000 n 0000010054 00000 n trailer << /Size 23 /Root 14 0 R /Info 1 0 R /ID [ <62d47362d8f736379c1b83f2a265a0fb> <62d47362d8f736379c1b83f2a265a0fb> ] >> startxref 10216 %%EOF actor-framework-0.16.3/doc/pdf/shared_ptr.pdf000066400000000000000000000233651341123343400210570ustar00rootroot00000000000000%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream xWn\7 +DV`d _0ܩ]Ǚ]]=e0OD"9?~a8Ei|Gwe˴?#+nxM6s|LPzXmyNLȠTH!ʛ;AV $::xF6DVFe }녱QIe dd4Z)iC)gnl|N_|~ۗw7/4]/<-'R z^ڜ,ލ4;HlFM̅xĽ2E{:-?OoӻS؋JF[Vt 6`C5 ;ZS^Iv Zy)PG%kH~2p kH.Ps[2bޕ2F}EՓo RRvl>HYe0-> endobj 6 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs2 8 0 R /Cs1 7 0 R >> /Font << /TT1 9 0 R >> >> endobj 10 0 obj << /Length 11 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >> stream xU]hU>sg -?m 2VMIfS*tv6;df&O髠>Ƃ*6/ŒJ5 Z (}R;3dvA2Ý{woJ4~>9}JMiRFJ ƎoޥKg[c[кVc(ejD] <zo?9[)׀\@z`:ojԒ,;VlcgnFf'Lgjx𒡏0۴NcN{r6fr-ɚt%Po27^uNgqC$AZ<->ê9<2%+þCМd9zZ"{F?V|ȴ 숊 cy-..A/b?h/Cs&ԬcD,?rzxo9=k?RcU}y~xNt2ɥп7 X } p| htZ*%LX'R=fYAoP~קԀNց^_"ذ.M Bg3p4<F .h?c>1' k&%^?MOCuE|֝x2KQުY դ gyカ\= !F;AUm5 T LiVw7#NNma4f,T&4 endstream endobj 11 0 obj 1116 endobj 8 0 obj [ /ICCBased 10 0 R ] endobj 12 0 obj << /Length 13 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xU[U9 -Ct)Kݥ[kAd$L }*⋫IA-zRPVw"(>xA(E;d&Yje|oB%6sɨc:!Q,V=~B+[?O0W'lWo,rK%V%DjݴOM$65GŠ9 ,Bxx|/vPOTE"kJC{Gy77PہuȪu R,^Q 9G5L߮cD|x7pdYiSශX]SzI;߮oHR4;Y =rJEO^9՜gT%& r=)%[X3".b8zᇅJ>qn^\;O*fJbﵺ(r FNԎXɂHg ˍyO+-bUɠMR(GIZ'ir0w]̈́Ϣ*xšu]Be]w*BQ*؊S㧝ˍaa,Ϧ ))4;`g>w{|n Jˈjm*`Y,6<M=Ұ*&:z^=Xźp}(oZjeqRN֧z]U%tACͼ^Nm{Х%cycE[:3W? .-}*}%>."].J_KJK_͐{$2s%խטX9*oQyU)<%]lw͛or(usXY\O8͋7Xib : mשKoi1]D0 N }` **6?!'OZb+{'>}\IRu1Y-n6yqwS#smW<~h_x}qD+7w{BmͶ?#J{8(_?Z7xhV[|U endstream endobj 13 0 obj 1079 endobj 7 0 obj [ /ICCBased 12 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >> endobj 14 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 9 0 obj << /Type /Font /Subtype /TrueType /BaseFont /XNATEC+HelveticaNeue /FontDescriptor 15 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 122 /Widths [ 278 0 0 0 0 0 0 0 0 0 352 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 600 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 574 0 0 0 0 0 0 0 0 0 0 500 0 537 593 537 593 537 296 574 556 222 0 519 222 853 556 574 593 0 333 500 315 0 0 758 0 0 480 ] >> endobj 15 0 obj << /Type /FontDescriptor /FontName /XNATEC+HelveticaNeue /Flags 32 /FontBBox [-951 -481 1987 1077] /ItalicAngle 0 /Ascent 952 /Descent -213 /CapHeight 711 /StemV 0 /Leading 28 /XHeight 625 /MaxWidth 2225 /FontFile2 16 0 R >> endobj 16 0 obj << /Length 17 0 R /Length1 6976 /Filter /FlateDecode >> stream xY}l[u(>DQ7)R}Q%*U;JlƤm[ص^m.?b@&)aAWfMt+0H6 C1n}/Ȇ1sss}WI7Atrҩ+D(kNsKZ!ϝS릳8kP*w,A=(Ck= gN=OP|ԥU׃2vkj}[(]yfUO WyG $7=a 0Kϡ_%t\/rk$/߼>bo>EmOAkx=E2F{ ng61W~ӕI$8e0I7v75xy3I`!No+']@ٛD&,_w swNT P0AORhHHt.Ctqcݜg}ˆ1ڍ_1{愹n~r;a4#9B_?G0U2 .(sujsβEఫuٌ7Z  DY01HJ$Z۟e/m`<5a#b^uM%Qo˕Y3MH7 ڜY:\ƍdyY&w]??L55>HI?^GL)1 >TA(/ӛ/~r2R,P(jcEF+ѐDKOmߞ{w1VkPe,%zelQ â!zٷo}W1(aSDT%uve~>Iڈ%@^ $oˊo{oALVWKd}T{FGH/ d8IJC<j̍ wAZ ySs ʌ IJW,Ӎm,fa6a&no@i03ohbc ð$ ك2TxeJx@1P @ς3 [9I`4L&QP0<@Z_sVXId;:MaF9ۨL2+u=i&&ˍ1QprŨ :XnJQy OCiI\-MήuOH 'a{M> c#{}ViР]&3}}f$,01 zH|}\^⁅lq``5B m6[؃#+{WxA sO^}tCPK!Y3ijT3raWB>7kvm iUs;֘-8&d=4J}Bd2:؛ۅgN,.O/I՚,RHh 0 gΐLkI]:v,؈ @@@A/n^b+8nB7Vk$s@`t;J|Q.6BP -7_"SSǦSG'\6?6 p9]ٔ\Z?5Y;97 EK 'l&&0(x'[ʉ#Ẽ] zt H[9C RjT{{4>>-$HD@^X\/l))MAyrdr'g̤;1z ?eoq椂}Hr/D: m"]jN&CۆNO*ew{KBu `y yB|ǀ:E @D~K|}PW(($GLGktP>vG L3k鉉 :f;cp{L^:nεZ2碌BЉer~OuF3gnalBУC޿9C[sL?mw+s35/(a-w䦁4* 䦁4r@nU(oiMj0wZ+؃oTy ;dn /2! |V|( (?89QClTVv3ãWLOfgɨ@:Oo@"GW|̆ ~A^{̆[MbWcQZhM)YauD^k8|)m繐z|vYj \j#3lN DtB?뱱N ࿪;m|u"ĥNۉ~$nwj^!1/=@1hN^LCܪfgVdgvvfab/άάάάάάάάάάp|JWN3kex1G{[۞jGԄ$M@TyTVS+2bv` ;/;H,|uWy{]U< -SSp.[ck!0p$n\|T͙ZUL=0xMN?%~'_m_9Oɂ("QY W%~@`Y 0 f,@`Y Q|#RqH.'[tQY7ݵ/?OW?V dG8Y&O' 0eEEU?#tR?0s:\Xx}څ3!i_ endstream endobj 17 0 obj 3936 endobj 18 0 obj (refcounting.graffle) endobj 19 0 obj (Mac OS X 10.11.4 Quartz PDFContext) endobj 20 0 obj (Dominik Charousset) endobj 21 0 obj (OmniGraffle 6.5.2) endobj 22 0 obj (D:20160524093429Z00'00') endobj 1 0 obj << /Title 18 0 R /Author 20 0 R /Producer 19 0 R /Creator 21 0 R /CreationDate 22 0 R /ModDate 22 0 R >> endobj xref 0 23 0000000000 65535 f 0000009236 00000 n 0000001451 00000 n 0000004198 00000 n 0000000022 00000 n 0000001431 00000 n 0000001574 00000 n 0000004162 00000 n 0000002923 00000 n 0000004331 00000 n 0000001682 00000 n 0000002902 00000 n 0000002959 00000 n 0000004141 00000 n 0000004281 00000 n 0000004742 00000 n 0000004983 00000 n 0000009009 00000 n 0000009030 00000 n 0000009068 00000 n 0000009121 00000 n 0000009158 00000 n 0000009194 00000 n trailer << /Size 23 /Root 14 0 R /Info 1 0 R /ID [ <85166bfdfcf5c6d27d600adccc373e2a> <85166bfdfcf5c6d27d600adccc373e2a> ] >> startxref 9356 %%EOF actor-framework-0.16.3/doc/pdf/stealing.pdf000066400000000000000000004501671341123343400205360ustar00rootroot00000000000000%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream x˶,Ǎ5$ܪK]=^-=eҲ(~F?D},`[Ddߎ'et_˗O_~7wt|| ץ~0tǿ߿?_~r@o08[tJv-Pj9_uNфrχv_3'!22^3'aԾr}^)ya;L9 o:6$w`0{YOt9|z/Ӵ}\ח^_: v_zA\כ !}}I?A_r>HJM;?JHB$hr^/t~YWE|S!rcA;߯Yc t;dN iDb8O4ܙ!dPM qI:^~~+zpxw/ xyY3_XT|x70f0d_vr$O/4.$<縉yacڎ2ݮ0k<amP4_l^a.˼Z"۲eY04I'XPFN胡~y$v|Bnv N e z^| C !< z*ڃ7c NWi^c*8 irvP&1Ζѿ38֡eb!&YM^6!G7~xEO<+\4fr~z/˝$~t,zDΘ<ԑlLҏX rgmAcsht@$Aa49@頇?H_{L$t &3R1nQ~msDS+%OE1Q# '|#?e:EPƌ_-(f:7|^,.8,͎вY|텰7,m_i3uVf,44q mʚ{VfVfV&49k09G*%i\ݨ&gOw FgxXFHI^Y;sP}9<9 sa_]܍#,9<#,zsakorÚ;o__yO~⑧@y18g^d]X#YAR@#/%9o],#bh5}ky5n\DRʙP|Ι/I ., D'_&Bi]*irl b~JwgԒKd6<5暟|k  0JB@t?,=AizdyG^yAeHWƏ(_f!|H:e+-Q|cɔK$_akrzlMpP&{6[Oǣ KO3agbI>c?aga$ ;kN3{e"fg;svfagr5\eVˮ񧣔5i# y GrPԓz _ʰ0 k~9haa40@¸h;aүs>mqw23RtF%JpzlZsv_FѶF np\L3Or?ӥ`.muDRp(ԻF '&$t?Ԁ,Bz>1(JQ? H2Slkϒj~^h<0!)60LI@'F`~֠(o懩FvaHI P9^o,uy~%"♗ ϾPqeBlԲvC;\%%cMI1# Ȑ(~Dk@ @4BT[( ]D=~p+ӗ|cM<|_SrW :#'tE1i6%,v׷ GQp:! ¼n 6DJ-K+ JȒEFtM-&D Szl: 4zCWd5ZkAdz}K%^c"Z %q(d9nBvI4fڴemU2!tL~4^-D+hߚ#D1Ńd~ϘCfBJ\_@ DNQnlhCϜV~~hUc9hTC: 2R8˅paZ4ܨ(LM -R~Wf2iXVMρf䶀E)*UU4-sG+{ @R!mľ *;fMFhiۦ4=3-@ؚ̣gXmZT҃u7VG;$gIKjC䣮˄2 I( k)w*s ZD#żND4֞[4 W[mҡn3u崵 N|+-727J.xsL]CVrzFҽPCVB󅒅JF-(rw\)즶=Ah+<2mZK%JJcaa ǠZ*AKH-~oZ*0DߵT՛DڃT>C B89]d>Y%ʌm Dc^9-HPN Rlo3LB A$P~ۼhMy֛l̝C++`J46i xl$QRb"*IL0#R?Y6%̤^+}ݰ|5F`R\b$TD=ie=D5,$[5˅rbCRjJ: cDXz͸RnᵡB%ںC{; !ۗ r9ѽ䶯XX1&xV~8zv~\i+ŴZ*GdǙ4Fn7Y}aqs"b!J`J[,baS39ePR(I:b]kԌZY0@>ؙ Qsx@WmN6VV?В܇HqxX O%WU(rђ.m)mhhtIk&?HWS蠴E =hPtp)h>Ĵh4 2;E#Z_4IYf\Z 3 ?x'lf\D/LS}JEhLkF%uFE3:ԢZ4 K^/Qc߶p`t~l%~_@Ü_-8@ (61qQǟ.tBjaWS40\[@ slfJ|jLÁϢ3@DԙߥgdbZ@g+QJg߉G5EW*8CJkR4~Ɍ [üMԬHY+mao8R3h1؅&abAƁlgL5! W>2(67Aq;(1pӅF4֕>˝h0hr Q7Rpf$}Xo!;(JO"x^SJkxq(&6Jn 5zb(>3)`0T(?X著,n‹/^:£pJLMƃ79=!{ǃ_qdhL";zcqZ cP 2% ~aDs< HsJqfluLN|>83 S9g*)n۩{#JrX(LI$rxڕ}Xj72g,J&c+eL˴ѲIc;yP LΦzh!ʌk@ʤV Vj}dQ8.dobX+a#-vA`lvOcH}E B%ba4,6'8!2l@ʬF/xLs*{oAvL;*崰_S?~y9Vvrs{lr0iA?n4v^ VqhA;&1qH͍3,q.1rg l|DZ~x!MmʉZ..uqMRdqLxAe;GCCAKCL0 <@Qpx +08lz$b D++.gGV&NZYKFpV眉Kz')R|ԩF0;̈́Azgu& ,s񑺭V֝xU3ϯ(B!N_`.$D.0lݹ-|zGQ><6.ЋF|6-^G'VL"7v`xLW'酞50zֳGrETR5]YHϹ#K%;д|9]#QɮI~Qpv3AЉC'7rֱ!G<o<4]䰟 ۳Qp׃l!Gk[8y׶jQo!|j(f#T'xYφBjZQ.zzgы(\}js3G`#mm_7<ܴ㐩+_GO =k`gCtmOBGuw>= 9%Bc3>ћHySGsvl/j_ne|E|Izg lЌO=I7"w[|D g P<>I휭E߅% mf+:\.Bw88sV2pe+rEQhk)ܹZ있Ƕ{?>6ѩBFy^N$-dǝSy!ǽ,IvYfwEMܨsn{БՖQ>^sj-ѼEvgfw 쎢Li48_vG(]Qdw泖.+EGvv{: GG,3x',UbD+cL,d)_g>Q]rs;aK(㩼*1"tOE͔EZƹ.j|Qֲ=xt G5FG5zgNCb{HEvbkБqBD_n׊0Cd'fGc;]BYl̩8L6HOgstSxqkWU4JO9%H1)PzQrQS׊=/arE\x;&N'tQb'EЙZ7"Hy|Qֲ=Ze k26(. y?R\tHh5/j=77.m29Yø䔢Ru$+ lR'J^۷=T}?7~ni?= ?5Gb%_O @YφZ((_]qOC= 㧾GH=(:~^z6C)D)>~ >熟JsçSS#!WO </c}{FIcGLopƏuݑqT'K&v5*zK=w$zR=)zR2@I5X)* ,5VJyZ4AeB0͏">s#E#Lnk֊lUR>Z+~ɑg᪵b勢vZ1XnE[)(jhb=[sE`o-RjAX\1znh~s{PR쓈 L~?EؑlU㛒sZn4!Goj oCw,p{HR5Xx[;Eҫb (_ƌl ce DK{nEIjsqFh5XJuSjŕX8 EKCN ]XopւnӀs`披QL [BaՄ 5GU 榠jZP5DHznsɠv n;5^QȥSkn;EqU|=JzUkj=[`U(U69 lWC(D C>P+jYCˡ(U+ZWق.JU1|Wb[Pϱ}2 sx3XEQ|9h`4*>lWH(Yz FVs gRl=JvU_lMQ#G-j nxV(2+0g J8k"sm0XT7N~a2N<^,UϡWS-5PE!Dc퐀E{q=Plg [LUff]Z.r5pc;._w7pcw7n&$lbYK .Ԭ`C;k7r9ԼqPa֩M=>xָ%[N< 9vș~<ǿk޼'1eCFNFN;9$rbIv!񅜕liV)B=^t tv_b'N&rW`>IWQ҉IzLS: N|ګYQ*k|+( IO[:. 욯3v]ixCgtvm)A,n}Kh;<9nyn(BO|$гz6 (eyo(k<=,Pӎ=Ww{]+k^gW.2|ֳg'g D)\+ * /4/p7Ya\؉u?^YnoI7s9-F-WAp$uU].8xqX|u28EjxDfc"(m[6e>7e. 1C 'v\[3;^|g[yKRzN^cm+Ip?jxoW{zYvmxD/:P=5e6#$̮#V=|dv :6wڂvvtۋb,(#Bm3;n^2 E}^ąP7`|y{_{=C4(Hz;=sN[h=~z^}]mE虯g}\͛<4.6g9&.<ތ{W7cZ_ VPr|Q6n=YCQ1t*x-[IEM&ۣ )JZa7MT;OѼT>d…T/ )mn{e2B+ESaꃢ;5x3LU=n_+_6{EϠDomİYGNQm?\{hyc[\QӋEz cTcǽTpWשy)/(ঔbr| E񓯣'ᅕIogky+3@wWZ`z.KQOW џkyI|>aZH"]8KW^ec-jF2x+-vn;7@7tL EU{EIxrl蹕RώTs{_ +,'sS&IGϭ(bIkK-)e{=[+$zb(M^?&IOcWA\ :uVS5V,m]PqXfwnk:> й6J ⪶eRv(iw3蹭ٮ'mFOBO푎(a$kIk㋫*ȷ)^5J=*$pOCC- GHG-ϰQ5$U-VlQ=%O⹡x/TwtN旍2-UWS,MFIcG _)# f m5܋W0ՌcَjVvͮ(v8vL76oR6 7Ukvjh~44Y!xnVj{4J6Ućṅ"TiV**TS۳hۭ0v|V*־(=+C,[55U[E綊 l@j4Kn\Uj=X<槶+3[[j+>%$ =Q^Q2V5VU5VDqc=/+n@b+F(BύƇX1Xn4Z[W֊ Q Gk-2|^Jg3_RX($RbԔ'酖4+Eur+5>9 Ylm'#wa8.jC[@-]qu"\kX!ىBn#d:!t[)7"0)!㦸zrokxUp[H)6ʖ<5ma[b0h9J";G[Уp$|Vz5v5 ;6Ryb+03tҽ\m* 9"dm9=tY¬qI灋0[VY!(2: eTB /cl5zr5S5L"ob u7A6WletF!P)NvM]m^c kl{[]WyU;-9O'W+ƹٮ:dQw}C.!Zm*15v Jo!tW)V R|=JzE٦z^hIQ0[[X`#Z~jfH(gadl9J:hhtUU(Uz~{E-J MTZV =;c`(:..FѶ) B҅UUpk{upko52o n䁁B5sVYQ7 NoUm) RQV|GOARmh)JzEݦ~^hIQvcz㖣[;a7xg-]zjkU+MZ/F%(6IjҽMk D|P9vNm[a׎6i="$i۶V]Z([=m9fplyicV׎h=FIױ®) ڶto+B dx5Y]\==2o{̰chx|QJƷOni\.T%zP̍*kS` T `IҀs@yS{q:C='T E(n[iWNQ .4(>+!E\K|oNQ8>rTå$ˍ0is7 _Ҍ9 cX2RUJ>9Gς$YSD4͎SROQ?u$[KX@$pmW (8Ʒo}NR:k:G4# @e@Q@u%, l*' J9%> ,>A%Du},6J( t[(`0;t^LNѯ8-. ES\_ +Oݪ[y/)ЋvWn&Xt%+Q̍[|*Yx>m^Ƨn|÷!MO\$Lc<e}+۫W$,܂S<\uEʩ)<Ɉ=?eZ}y%fENx O} (+Z_ /KrnB/^Y_+g i'.Bc^pNZ^oՠr\|֑$\P޶sY5zΓv|OhM1|79MYWzԺĭډ^LazΖlIi^O|V26ق sFy3}Gq,Ri>QO8Q]=j /kMWE}̶n/\֑$荲ÄnA7|%X1,2iYɻ /4(UZ6V4x~ 7N >S Do_%u>N)0:I+7&5)O|  X5(UZ6}||v] Xn):}c74_֧\@Z^O?o귐< l@u;I+b$~KX@l|V[o2nx\t^|EHѓB 2of~* ??w_=qu$:6A(xVv+5tOͪzjq+F(SlMݪFUb Ԯ*3Eծ0YZ(_ꌎKoPOŠ+)|uK]FIO㧞@I/sz.o4w%<RuDϥKHdçKgSZ ,ή(44vuO<RbTߣH#dߥ㧾KgSj_ Xwi+/}n>uY >S ||Z4JP:~y)D0zXKГK7Jv^ߎyiVMxS3GHdçKgTz\@4-u٭>EPֹ $_g*ycQ1TL=*sq0vs]OGJS% w#6vEP mYCg3[]t5tNc +jÛ'nl;b[ͻ5R/߆L :5 ,FѹmgS؟\@qNBmV 3~">s5 ,Fȉ]lE̓)OZ-Ag=nwǭ|w N+| )| @E+c#lA/U㧨k5/ q%kƶQYnقg"_ſF邆_ނOk-AO ,([}njŀO3W`)64| ?S @I/(U6c[khz-_`[%| %QT}4m~ k\b *] hZZa|_vE]}wN|$1/l0zځ-Ofn;SǮD'v~;9NcYł.씾(o|bOےOBmW|,;m }ih܄T>u$+,"Gn|5Jv#k~oP^d|Zռrrr%yr{*볖'(k~oQ&Zv{wTdWĮ=!%wp5lЕt-Ʒ]{O ]yN psJ+/''%_['^) e4,n!  : S'+''%_O R@Y_y9'Jn n|^#Zi^|:nֽᖴWI׸$rwtI%+6ܫXymB;_|(«nK |U<~&?x䨣/} W> Ey97e~DC endstream endobj 5 0 obj 15856 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 628 502] >> endobj 6 0 obj << /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /ColorSpace << /Cs2 14 0 R /Cs1 13 0 R >> /Font << /TT1 15 0 R /TT2 16 0 R /TT4 18 0 R /TT3 17 0 R >> /XObject << /Im115 241 0 R /Im143 297 0 R /Im52 115 0 R /Im124 259 0 R /Im92 195 0 R /Im86 183 0 R /Im131 273 0 R /Im27 65 0 R /Im145 301 0 R /Im88 187 0 R /Im3 11 0 R /Im108 227 0 R /Im133 277 0 R /Im37 85 0 R /Im119 249 0 R /Im31 73 0 R /Im121 253 0 R /Im78 167 0 R /Im142 295 0 R /Im113 237 0 R /Im83 177 0 R /Im53 117 0 R /Im106 223 0 R /Im19 49 0 R /Im10 31 0 R /Im89 189 0 R /Im63 137 0 R /Im134 279 0 R /Im90 191 0 R /Im109 229 0 R /Im91 193 0 R /Im11 33 0 R /Im1 7 0 R /Im100 211 0 R /Im54 119 0 R /Im141 293 0 R /Im79 169 0 R /Im20 51 0 R /Im7 25 0 R /Im57 125 0 R /Im39 89 0 R /Im95 201 0 R /Im30 71 0 R /Im132 275 0 R /Im140 291 0 R /Im117 245 0 R /Im144 299 0 R /Im75 161 0 R /Im49 109 0 R /Im85 181 0 R /Im21 53 0 R /Im60 131 0 R /Im135 281 0 R /Im70 151 0 R /Im118 247 0 R /Im98 207 0 R /Im25 61 0 R /Im67 145 0 R /Im110 231 0 R /Im50 111 0 R /Im16 43 0 R /Im72 155 0 R /Im77 165 0 R /Im41 93 0 R /Im93 197 0 R /Im74 159 0 R /Im40 91 0 R /Im59 129 0 R /Im42 95 0 R /Im51 113 0 R /Im147 305 0 R /Im80 171 0 R /Im34 79 0 R /Im101 213 0 R /Im36 83 0 R /Im17 45 0 R /Im127 265 0 R /Im56 123 0 R /Im61 133 0 R /Im44 99 0 R /Im4 19 0 R /Im102 215 0 R /Im26 63 0 R /Im114 239 0 R /Im76 163 0 R /Im46 103 0 R /Im18 47 0 R /Im105 221 0 R /Im82 175 0 R /Im81 173 0 R /Im45 101 0 R /Im55 121 0 R /Im111 233 0 R /Im73 157 0 R /Im38 87 0 R /Im23 57 0 R /Im96 203 0 R /Im58 127 0 R /Im68 147 0 R /Im28 67 0 R /Im139 289 0 R /Im66 143 0 R /Im107 225 0 R /Im87 185 0 R /Im35 81 0 R /Im12 35 0 R /Im103 217 0 R /Im71 153 0 R /Im48 107 0 R /Im14 39 0 R /Im13 37 0 R /Im84 179 0 R /Im128 267 0 R /Im2 9 0 R /Im126 263 0 R /Im146 303 0 R /Im138 287 0 R /Im22 55 0 R /Im129 269 0 R /Im24 59 0 R /Im112 235 0 R /Im69 149 0 R /Im29 69 0 R /Im8 27 0 R /Im6 23 0 R /Im65 141 0 R /Im123 257 0 R /Im104 219 0 R /Im47 105 0 R /Im33 77 0 R /Im116 243 0 R /Im120 251 0 R /Im136 283 0 R /Im137 285 0 R /Im15 41 0 R /Im5 21 0 R /Im130 271 0 R /Im125 261 0 R /Im99 209 0 R /Im62 135 0 R /Im43 97 0 R /Im94 199 0 R /Im64 139 0 R /Im9 29 0 R /Im97 205 0 R /Im122 255 0 R /Im32 75 0 R >> >> endobj 241 0 obj << /Length 242 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 308 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x] @ f=OZ }a#&-KȆ/ٴ->%FI`NEI$}𡉚0]cĂD`$I1n5Ifs$_\S7*6ϱUHvWlEB5Z?%齓  endstream endobj 242 0 obj 168 endobj 297 0 obj << /Length 298 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 310 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK!Dٜ•qaKN!м. Hi/rYKtyޗ˧3 D x2OQ5dA`8j^3c/.Jl[<8[nc |/|ߖKz˂_QTQhFtI!?ro endstream endobj 298 0 obj 165 endobj 115 0 obj << /Length 116 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 312 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑Q@ ( g -iHN__a0Fl_<#n񡩔dL|{2}]GDۈC-›XZkX*$--yT[x 7O{(Ypp#VŦ}fڌyh;ޑ? endstream endobj 116 0 obj 166 endobj 259 0 obj << /Length 260 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 314 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͐A@E{3Oe5FK'atΆ 43,p+ **F y恇 @[ 0\a+U Ě>E=`e,u&”4eqKo p5a7JVj?^# endstream endobj 260 0 obj 164 endobj 195 0 obj << /Length 196 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 316 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x11 3^A 8_.]]3 $N<GNkZ^tiIȋ4;Hy@"\gG9 70"T0'@yڷ; ǰ/9ّO _ v#OγGq4_J Gʠ"L9N|ߗ|Ш endstream endobj 196 0 obj 162 endobj 183 0 obj << /Length 184 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 318 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xQ@ fOCDE4 }@v_%)[?(00 zH'}V}GT!eR-Uܣs +s*C=vižɚa ﰉ-%moPwŶ# r endstream endobj 184 0 obj 166 endobj 273 0 obj << /Length 274 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 320 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[ 1 Egg/A5>`ҏDŽ?2sot`r_,p#~}sƪxZo$M-љSj֥* mF /(lV*3 1UǛ;4Q50Dsl endstream endobj 274 0 obj 166 endobj 65 0 obj << /Length 66 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 322 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑K0 s3NWP%чVN ;*+'w>F)ޯJ>HLRfSts]L>Y=$$z )0lZ:',vX>cKTY8N҉~ endstream endobj 66 0 obj 161 endobj 301 0 obj << /Length 302 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 324 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xQ @ Df/Bmk}H0lvO*2ėɰ)O4J11\McvS[1xMp= }3 ka/6S:lg46%?W0$13hAhA.~B endstream endobj 302 0 obj 153 endobj 187 0 obj << /Length 188 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 326 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[ @ E_"bХ &_-!͝0NQ_ pkdgg0 M-79L25ͮ;V8`#X~EOKs;pyuizo8Wi~tZ-ɘV endstream endobj 188 0 obj 168 endobj 11 0 obj << /Length 12 0 R /Type /XObject /Subtype /Image /Width 91 /Height 91 /ColorSpace 307 0 R /SMask 328 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om O@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  a  endstream endobj 12 0 obj 132 endobj 227 0 obj << /Length 228 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 330 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK0 {˂6#[;"+Js3M[0 8.aY <" <w,ykOúcMS-҉[Uv.fvح]+ַwXΪ%bY^dE<N(RCo&m;c<~?a endstream endobj 228 0 obj 167 endobj 277 0 obj << /Length 278 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 332 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[@ Egg/ҏ ~8洝RzHp:TYAЀlΰ2`^3? FP$WKEd]6`ڌ_ڃJ@|W%lś>-껠yҪ{/"qBF MC endstream endobj 278 0 obj 165 endobj 85 0 obj << /Length 86 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 334 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK0 DsIUUSD>cb36H8>Wz9A>Pܪ:4]tqn ?6ɻTW\x{wU#,N9 -mAISOm<<~ C'2]"v&- endstream endobj 86 0 obj 159 endobj 249 0 obj << /Length 250 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 336 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK 0 D}"BSrcDlUF!??I4>45Jgx6X q.20]ON-X*G/Su)_'+Oɓ0 1+@T>*,s0Ē4x츊2 .,sף|S$ endstream endobj 250 0 obj 163 endobj 73 0 obj << /Length 74 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 338 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͐[ @ Egg_"E]K?HkC2sd-h0Ac5 7Dpdo4_1HT;/cS2O.aWe[M,F__m s;/Dn{䳟JPy75 endstream endobj 74 0 obj 167 endobj 253 0 obj << /Length 254 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 340 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[ @ Egg]_ko8/fI#%~K^aKWfIdGF#]KBZ̞ϖƲ,nɚ߿օxD2!B4F<’Ya3u6[į-ZP͵fX-s0 endstream endobj 254 0 obj 164 endobj 167 0 obj << /Length 168 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 342 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑[ @ Egg]V}P5TJ!sr}R'=tw0I)%UsKEz{Ha!N|$G~:f&kmV=aGyp\ϒaFIRw'?labzy‡A i~֌W.+Us endstream endobj 168 0 obj 160 endobj 295 0 obj << /Length 296 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 344 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK0 {3N # =0U)by{qo1j~ 3az A"Eh;mx,k>`sLX>-QoDޕX4m4ce,l (S RuyFaĖ1ŞlV endstream endobj 296 0 obj 165 endobj 237 0 obj << /Length 238 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 346 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑I0 Tԝ>"JD=E&`7<bVnp~ǯ`-Ƀs-;\kͭjma vRe2Oxi)̥B-|L3@G٣b6qs͙oYO;sy;ƣh endstream endobj 238 0 obj 160 endobj 177 0 obj << /Length 178 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 348 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[ @s3O/Qm _.Cl{:}s=<GV9 v gP @Mܙ|-B10%!Ӿ~+_ c (im}ݶպV> stream xK0 s3NÂ3pabQ*vPYK:{qK{ 8r:>Kh;IJtQLRg/vn|;iژ&ܟ{ lnd!l+@\l3"]R$N{NA/ endstream endobj 118 0 obj 160 endobj 223 0 obj << /Length 224 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 352 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͐KP `g㤕waFN`:%<9#[20 $zg]fhx(Rk0ktj$zUGR<{\B9\¶ڄ?g.,7hl~Vz-%׮}5y+|y endstream endobj 224 0 obj 159 endobj 49 0 obj << /Length 50 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 354 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK YNUUUMz}:5 mzRc'8 a[!nn"Ku*wmfl^[ia#y [񹅇nǶgkXUm|nŏxgdm!vݼ[]X婮p endstream endobj 50 0 obj 163 endobj 31 0 obj << /Length 32 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 356 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑[0 s3NjQ}:uEEL6f)gEUw?.2~VWŽkd'H$SL-> stream xI! ټ"(ʾH> stream x͑K0 {3N?,8GF ;*+ry//4W8x s w8%F%j_ Af/u,pE|gM+Nu)rqH˶7#x0,2[66Ef:B?y M endstream endobj 138 0 obj 156 endobj 279 0 obj << /Length 280 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 362 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK0 s3N W(gч.MBeYONKܡkc(\"`=\lYplv$C4!lUU;ۄlG$S+l:$۹|k+l$xiXf\^؁s[qealRL{%  endstream endobj 280 0 obj 169 endobj 191 0 obj << /Length 192 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 364 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x 0 SRf` +ʊ|^p'l{q? V0  sD~w&lcDywՎKgS^g]|N|as2,tj?{a#ьU`?op6#B endstream endobj 192 0 obj 159 endobj 229 0 obj << /Length 230 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 366 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑;@}3U +*gPޤI X1inp 9`tar& a٦ĎspI4`ڮ>vylC6 p3bBd7@W"8C^-j endstream endobj 230 0 obj 156 endobj 193 0 obj << /Length 194 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 368 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xA0 3^UP(a(zʪtvg ,a #̯<\S-&SVn*STM2(k|zexye1U%UUM|k?٢3ex(bF\I endstream endobj 194 0 obj 165 endobj 33 0 obj << /Length 34 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 370 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑K0 {B# }ٴr,ȍǯ0݂v N+dnp Mլ\#>["(LRvO8^ˏIh22a73**k2 M H?d ?' endstream endobj 34 0 obj 162 endobj 7 0 obj << /Length 8 0 R /Type /XObject /Subtype /Image /Width 91 /Height 91 /ColorSpace 307 0 R /SMask 372 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om O@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  a  endstream endobj 8 0 obj 132 endobj 211 0 obj << /Length 212 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 374 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑K0p?T.vH%;WSCҼ0 F8^pT]n\u uo6d8 l"kzXdԤgLu^r8[0KԼYDf X_Br޾%Z_ e endstream endobj 212 0 obj 161 endobj 119 0 obj << /Length 120 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 376 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[ @ E3Wh!X03= ß>X3o.q6p ^AacC%Q{ XT򹟔W*{?nau25,L]9pF>톖&s ZTNqt4Kg endstream endobj 120 0 obj 160 endobj 293 0 obj << /Length 294 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 378 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK1 C{3N 6anb5qt?-iHwi 𭰴 CJ# mIk#)'?(5`I!kٖK!Dss9VSl)/S> stream x͑K0 *3ө-Ȋ3~N> &nܽe`^2kȏ:8T> #>5s /݋`n\C|j3EO´a}T+K>Wޤކ8|Ŧ;hpmt!vT^T{ endstream endobj 170 0 obj 167 endobj 51 0 obj << /Length 52 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 382 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x @ D'=jk>x*]eɶ#5ii>҄ry*mzwx@ąV:l=x}aƱ!Inp%a̧>8#:wfù7{cϼEI> stream xK0 `PUKpVPR'eb;NA'C_Ua p X5Y@/y Xo=r͜\Qnej1*zإ- oa;C@M͛ahaxq7\oó9aw1/;9~YU endstream endobj 26 0 obj 164 endobj 125 0 obj << /Length 126 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 386 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xY 0 s"_ =t"5vПay> stream x[0 YOggѧCVT YEVuxK;\ ^$B _+x_`2OV_`Qb<*ӱ34omugaͿVPf_sʚX3_ _B endstream endobj 90 0 obj 168 endobj 201 0 obj << /Length 202 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 390 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK0 {3N$T =0*M Iϯ0lGW׈;a/ +[Ypy80KȏxGjc*"`pEIҷJ46a#do1ND,5Ҿ!ڨ?dW endstream endobj 202 0 obj 164 endobj 71 0 obj << /Length 72 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 392 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑A0 3^BD> j%'ڸ }  #Kq dXU \6Ʊ5 VkaLbp:˛\zx^wlauӹ"Yw".0w~޶ }/} ^D endstream endobj 72 0 obj 164 endobj 275 0 obj << /Length 276 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 394 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK0 s3N_3paQcP%6DVWX?p޷uaf~|5`K!zض 24ƻa;1@š0p Ph>҆9l^FPixj%Zr?vOx)>x endstream endobj 276 0 obj 157 endobj 291 0 obj << /Length 292 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 396 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[0 {3N/B8C> BJUYftݟ>wW9-z YVJ,d65;i$tmaX8מr_sn2rXdvʧU!ΐu`N0N=簃% z ߹_wmP endstream endobj 292 0 obj 160 endobj 245 0 obj << /Length 246 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 398 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xQ @ Df_E m%in,=HJJoiv(96J!+N`0k^Xuܢ薌6\a pf[<@L!2,cBr|M7 endstream endobj 246 0 obj 167 endobj 299 0 obj << /Length 300 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 400 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[ 0_"b}5tx/$S !ɹRp'|]9{>omyo[>Tެ=>{/K[Nk~1S5’|5_ * Sd6}ڄ :5 { V endstream endobj 300 0 obj 165 endobj 161 0 obj << /Length 162 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 402 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͐K0 s3NmmgËdU{2ƔwTKw\1J9Ŗp0SIޓa}CXN̰I-)ڂ7NLE+vg"l; H/۲[uz@wcj)>rxTcw&'"7u% endstream endobj 162 0 obj 160 endobj 109 0 obj << /Length 110 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 404 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK0 D{3NE#! =!BeUf8O:Jt 8QH׆9q^K^qNT-=^Nsm@(=.nmBڍۋձs c O#]X ~:A" endstream endobj 110 0 obj 161 endobj 181 0 obj << /Length 182 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 406 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xQ 藱ƪ՚x>Nظ)dCR:tp` *@+\"_upsGs&|na$)2} {_@$Mt޶6Fi-67sj %2:M f  = endstream endobj 182 0 obj 166 endobj 53 0 obj << /Length 54 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 408 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x] 1 {3O" 3ZoMڟvIȿ*ݥ4Kg$ih8;b}L0$hh{V9-$ԗ殧;")3iPGg\yùp3 idG]OHo[%ߗfyT?M endstream endobj 54 0 obj 163 endobj 131 0 obj << /Length 132 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 410 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK 0 D}"ІBУGT&tEc4R(/3 <`# f\7cxcR$v n*N2s _:H,I wdn%mI u|t 8jkVFy;t}mSW ި endstream endobj 132 0 obj 165 endobj 281 0 obj << /Length 282 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 412 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK 0 }RB3A"ٶF==ۭi'ox~`np[>.+#Yaἡ fWP;W٘zv=ߒ&G^yp0P)sv϶xa;T w7fY/J\Lo -N;a.u endstream endobj 282 0 obj 162 endobj 151 0 obj << /Length 152 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 414 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK0 {+*PgVB*+rs: `X o]=}0!a#c5Qw?xob%-ڢ)IZ> stream x[ 1 E3W1_2p .xHO,o7V(]up ̙od |uo%HumQ=qL%Fsxl(vZU.bWw1A endstream endobj 248 0 obj 155 endobj 207 0 obj << /Length 208 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 418 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[0 s3N/RчVӊ?DU3Nijm*p V t'dXq|g3=X0`Nb7meXrҼnnS穇~#dKI2Jޯs۪awh(مVϋ endstream endobj 208 0 obj 165 endobj 61 0 obj << /Length 62 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 420 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK DYOUU?I?RУN<]!dy7 y~V])05 [+0݊U浝j^!b@L>g:t[eß6ÁKnu%,+5c3 URiOdx] #& UXp : endstream endobj 62 0 obj 167 endobj 145 0 obj << /Length 146 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 422 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK 0 s"G2VeiE=)49baqpq[|v )~nFEhypN PZ.spk+ÎKg<g$/% Elϋ_saNh?U_5) endstream endobj 146 0 obj 160 endobj 231 0 obj << /Length 232 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 424 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͐[0E3W1ķ ~k{̘WWňtnXKnoXYNѬwC~ endstream endobj 232 0 obj 163 endobj 111 0 obj << /Length 112 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 426 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xQ @ Df=_mV<`ص%,LH):R&/@j{Iwi Wa_MMska&$V!`c67IGٌ$鬵1Zo>'ǟ7] #1L8C?c <|t endstream endobj 112 0 obj 168 endobj 43 0 obj << /Length 44 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 428 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͐K0 s3N -lz:zOD eUQdYf> stream x͐I@ 3^ľH[%!'NDcW= /]Ue$Ujƛ)ZX'8lL '?~48Ϊ}$bz 9ᾒ$dn5Lo> stream x͑K0 {+ȆMY",3 w` 0s[hbG8-`mCSRASa^OăIL_y㾘Q'5Ϸ*QK*KZÇ"*,{ְ%U-1\Ic$R3_:8x7*;dl1pM|^K endstream endobj 166 0 obj 164 endobj 93 0 obj << /Length 94 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 434 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK 1Ds3O1+Qqb,_Y!4S?>t6i^W9;>Ւ% laHB`o=o+uGmj=HœfK$wSew hFFC y3-aQ endstream endobj 94 0 obj 158 endobj 197 0 obj << /Length 198 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 436 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK0 s3N W`3paiCTe?}P` ]Kp CpFLq@=٘jJ}%kRwiJ?>Q djV&o}xFemh qҏ-Mޢq] /c/'  endstream endobj 198 0 obj 168 endobj 159 0 obj << /Length 160 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 438 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑K0 {3NOOѣG ;*r2MXa7> stream x 0 f>D~L|=y44uA%KK>p,p4apkNyx$}gX5pluBɇ?`~/pKVsbYdaWa;Ʉӣn $s\  K:U_. endstream endobj 92 0 obj 159 endobj 129 0 obj << /Length 130 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 442 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑K0 Ds3N?,z>ʚʊtwTYJG֯).u1O[7 & Dx/ɇ8 a o6I\291COӶ0C##v:.HZcezfm!nGjKx$ endstream endobj 130 0 obj 164 endobj 95 0 obj << /Length 96 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 444 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xQ@ DfO4 x>Lc2tg^w㑚t.C:I4|m,ՆY,H{WA]Ko,A^{ƟP\sj7s5CDQd'{,) Ȉ>-О-l 2N+oi endstream endobj 96 0 obj 160 endobj 113 0 obj << /Length 114 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 446 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xA0 3^# h)+,7Tm:qZbf8%= wJj1*Q"9v<<J̰ W~:g%ֽ)RwꜼֹ\y]^H ߘtG+ԭ  endstream endobj 114 0 obj 161 endobj 305 0 obj << /Length 306 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 448 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xY A Dfs> stream xK0 s3N AW$У#GҤbȊw`G8paS#<ŮQGoyז`P>cE8](_ZPe{^XX0C :m+`݋m27ޙH:^IoEcWK' endstream endobj 172 0 obj 165 endobj 79 0 obj << /Length 80 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 452 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xY1 C{3N1<%EK5QEQ9S_T'YZK i^I(VN"tI'rEz`4 le`Iud0>2쩆!@#'-<w&+iW+Tΰ endstream endobj 80 0 obj 158 endobj 213 0 obj << /Length 214 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 454 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x]@  g/K|U40;m}w_ Npso~k(p0J48 )LkTy5l`'Ұ!ZsͰգ5㇙jjgM24 D%!=e]~aPy| , endstream endobj 214 0 obj 166 endobj 83 0 obj << /Length 84 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 456 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xA0 3^ (ӇV48p $;n)P 3\b>#L1=jk9h1³# XuMk8 $뼆-4ں|qv@&S\C _jasc-lT51ctw嵃.W-W?}#+ endstream endobj 84 0 obj 169 endobj 45 0 obj << /Length 46 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 458 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑K0 {(J-ҐȊ\gs-8ľ~950 U>e2lWaGEaC ֊ɭy> stream x͑A0 3^BZOĕ*xS; p gpXHGNKe*?tئa2P|ûWtbî{خO:gjs`300gmY98Eleanmx8ooɟ  endstream endobj 266 0 obj 168 endobj 123 0 obj << /Length 124 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 462 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xQ @ D{3O/j =C24l,%,luX_ ^0E<`cCP^բO^ӆhuk"(WERnd6 ֍v̡W4*°SO-\vނE6s%~eZMq endstream endobj 124 0 obj 163 endobj 133 0 obj << /Length 134 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 464 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑A@ EpeĈ+џ648hJI;}g躿a03\#͖3BVCXja Um2PjF.%G, ]~XȤoD:0dįq3{ۃ endstream endobj 134 0 obj 165 endobj 99 0 obj << /Length 100 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 466 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xm @ D)"Z {!a])a}&] 0y_a 3<Ra\VMInͧ︇3CMeevHWd (,hH1gjE jo_7O) endstream endobj 100 0 obj 158 endobj 19 0 obj << /Length 20 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 468 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑10 7cF2)x<:΢ifi;zMiv*KKY9 .>E^Zk kV#@2<5c1yٺ^z8tk]> stream xK @Ds•џ)2L&qEӼTW {p Z`wRH1Y!#7 Sa%ʭ029y~4!y7Okc8dm6ϑj4J2B ihiY8%%m3{ҿ,( endstream endobj 216 0 obj 165 endobj 63 0 obj << /Length 64 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 472 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑K0 s igQXYQRnA6x NcA.A^yx53tQ yT.ׂ W1TSibU{9݌цϪd[sܰ3 7q>_[=ye,ۺhLA endstream endobj 64 0 obj 163 endobj 239 0 obj << /Length 240 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 474 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑K0 s3N į@/ѣ#[vTLpk.Ճ˩3b`T?Pp9R)n9Iũ_yذTx {=B+6ԍ˞|ypՇ(L|be[qľ/_N endstream endobj 240 0 obj 160 endobj 163 0 obj << /Length 164 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 476 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͐K @ CsҖ_9C*$0qɢgYa w.ՇyL)x|@]髾j4X'(@p; ?uXϿI- *Ai a' O2+)mZӔo~x|Pn endstream endobj 164 0 obj 162 endobj 103 0 obj << /Length 104 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 478 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[1EggO~$~=dHiؐB?ik[֕3snvUc2hcg$;{H|3~]2Ǫp endstream endobj 104 0 obj 161 endobj 47 0 obj << /Length 48 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 480 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑Q 0 D~+ꮢgBKS)I2c׽>*-d@֥a_cҖZ^Jn<<Tg`(4F{H5fZar[FPa9N.He햍?0 3Hт%zk !>%'c3 endstream endobj 48 0 obj 163 endobj 221 0 obj << /Length 222 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 482 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x] 0s3Oc)`gY} ۙI,%:;ƮS]4mpTԧ>|.Xk^z2hbwūVhic$ |BZgE_,∄oNѰYHmSpU if˯[ i endstream endobj 222 0 obj 164 endobj 175 0 obj << /Length 176 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 484 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK 0 D}".JzCE"B754[ߒ{I(=i.]ù}*4I& oʭ6턤e`_k|)6™Q~dz0( "ĘGA l?~QSOc%z]| endstream endobj 176 0 obj 160 endobj 173 0 obj << /Length 174 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 486 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x 0 D>-ğgJ|ēKH8?* Wz;H(ɇ^!I(i!VvT_?;x90@0$4ɼax{dɸYӻB*xVGs`/K< s)"{W? endstream endobj 174 0 obj 160 endobj 101 0 obj << /Length 102 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 488 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xA0 󳾂SP@xO6DI*PE֪-WXߦs ,9]cGxpˇQxֽ?<Wɴuub{*>K ܃"ߢU_$6tuD{.hz6ymer1ɖ}0$yOCm Tl endstream endobj 102 0 obj 158 endobj 121 0 obj << /Length 122 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 490 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xA0 3^BH^xC krzl#dmzb;iIMzJ7b{FiVG3˒>0 0S@U %}_FJQY{_$K8nä0Ulh6܍"?۱NmZ endstream endobj 122 0 obj 162 endobj 233 0 obj << /Length 234 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 492 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑K0 D{3N-)B8c4VfN23n< g]7Pigp2dri]GݒQwpO^Q dLJXa. f1{lˇ2a"5LW{24_a_( endstream endobj 234 0 obj 154 endobj 157 0 obj << /Length 158 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 494 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK0 s3N% %8OR!!,bE3F-(iSeLIKLJ\1A֊+oa+p9 4Ҍl6lh OjGC ܃#Ƣ*d_KG-蝞~. endstream endobj 158 0 obj 162 endobj 87 0 obj << /Length 88 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 496 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[@ E_(&O@ʨB3=sSnz8> stream xK0 {U%z>lJ$"'?$]젏yigdrpk%Q/84/A:$onⲯoM&c ?fL/t̸?V'M4/!U<'.IZ5Jw 5I}]9]K~E0 endstream endobj 58 0 obj 169 endobj 203 0 obj << /Length 204 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 500 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xA0IN -ZΊ+DQlfCEzIWiv*_Ga>yJ+Ɨ&.7Ox]=H8褍ܲ^g0L:B,3 S6dO[>9;CwzζW-ph endstream endobj 204 0 obj 156 endobj 127 0 obj << /Length 128 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 502 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑K0 {U"* }T)Mٰ#"'/v .p\Ba,|QOCC)40).y8OWϲ3##'ɴ n mb8KD$?s4~ qpo8 endstream endobj 128 0 obj 168 endobj 147 0 obj << /Length 148 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 504 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xQ0 F>JfSf/ۦ 0}Zx{YhYpbK\0/anyPE9rӵ#}4'Zb<,[i>fքepu9 \x]_֟jt endstream endobj 148 0 obj 163 endobj 67 0 obj << /Length 68 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 506 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[ 0쬫IjҊfȐhh$):#")~OR_b=1ϨųƔ3 LVcF|a}hcOr_*ZdZn%杕<6/gu&i cگW_&k endstream endobj 68 0 obj 164 endobj 289 0 obj << /Length 290 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 508 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x0 g|Gdzj0MHJF8fXa-.icˇs Xp}\{>L6d i_θ ks5_Co{>nSo6vD?6{dw6_vn'gŴ-Q6?] endstream endobj 290 0 obj 160 endobj 143 0 obj << /Length 144 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 510 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑k YO_ }? gѧKĕB6,AevR'xהuHC |T$yMldL̽.^)\2lqк(d8M.5.k)pt^_D^,:S︾| [ss endstream endobj 144 0 obj 165 endobj 225 0 obj << /Length 226 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 512 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͐Q @ {/QjBУC®mWa]wtp#Q r9#FN-C=0}=+H=aXZ&NukR;:T>3d捳Sp+[~)/wpo)-Y9J  endstream endobj 226 0 obj 162 endobj 185 0 obj << /Length 186 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 514 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[@ E$ bXx⧐vNMs'=4.Kti mɫR X p4LuybOi ߃/pf1 Os$jY6a"d?‘T h ˚5U׎ qnM1b+'a8 endstream endobj 186 0 obj 155 endobj 81 0 obj << /Length 82 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 516 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x] 1 {=><8$P"웥4_wp 3+H a6kxX|hy8;#~~lh䕔7E 'm ~uo*ÐSa\GPiĸbi%]:FVcQ;-s=~ endstream endobj 82 0 obj 168 endobj 35 0 obj << /Length 36 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 518 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x @C'=K^?=>&KedGjGJ{4[\γf(4I6i)OT$[# HܓǶ0/0 $fRvZ`*Ʌw%4<N[3:o endstream endobj 36 0 obj 155 endobj 217 0 obj << /Length 218 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 520 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK0 s3N Aů8C>LlQ%.d `3L`.pWGFx0by֣`]s'WjZ{h:p~NzAb;ӻ^SRk\ucЪ֯aK=aMK endstream endobj 218 0 obj 158 endobj 153 0 obj << /Length 154 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 522 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xA0 󳾂cA@)OaV#7AmNK0i pbrnuܰ^>\=V> stream xQ 0Ds3Ohjłgѧd%,e2ͶOtf--K-('S!拿t`y$?Tg2ڷ\*<wɖgS2sK&5/1kwc.y:<+ endstream endobj 108 0 obj 167 endobj 39 0 obj << /Length 40 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 526 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑K 0 s"ЖI gѧTݦec$wa`攁wx5Be}a)0aê,T홖pߚ΍afmssVCuK'P%SlL%?/ıkw5~u\컔 4xDaX8~~џJ~ endstream endobj 40 0 obj 165 endobj 37 0 obj << /Length 38 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 528 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑Y0 sI~Al* =0%+ =el'V8.aqu;X+?M|xz!Vk<f R{R,o}%v61lӗYF؇ҡJ/ٳ U?Ԑ2^LZ4S(⃔$9~T endstream endobj 38 0 obj 165 endobj 179 0 obj << /Length 180 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 530 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK0 Ds+T*t8aKIP%6D$xR_c{;(Ư-0."opv-f>4* ?SMt`a%;d; JS-qzZIm r0kK<dW?_Y endstream endobj 180 0 obj 162 endobj 267 0 obj << /Length 268 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 532 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xQ @ D~IjKcB״d6mGj#$D6ݘ~ߤssdC,nte܃qĐʲ1?f'6 jv癶ϯx*KA. sJƃ }]/x[GbL!>)G endstream endobj 268 0 obj 160 endobj 9 0 obj << /Length 10 0 R /Type /XObject /Subtype /Image /Width 91 /Height 91 /ColorSpace 307 0 R /SMask 534 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om O@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  a  endstream endobj 10 0 obj 132 endobj 263 0 obj << /Length 264 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 536 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[0av*|"B/59ɤ KtEoip33ƕ:+dF$8KVCz-ذԬ,Ū!T,%m[RRŬo|t{e[#u N+w^z endstream endobj 264 0 obj 165 endobj 303 0 obj << /Length 304 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 538 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xQ0D{3OABPTǗ@J-ofg?}"M[j8*i^\(lůXt;$>7! jM5I5gx>ؒ`gs_S0"i&;[ FhOΘHFuԴF.uߝ?' endstream endobj 304 0 obj 161 endobj 287 0 obj << /Length 288 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 540 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK0 s3N%T3`KVBEv<9q[ &8sưv+c䓇}VW2=|t|f57j2K=*s;t.$07=p:ĒaU9@V3wi[/1 endstream endobj 288 0 obj 166 endobj 55 0 obj << /Length 56 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 542 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xQ@  1*DZB^ ß.7 p ǰ|pD_,Iý0:HO ̧ig?V2%yG-mn%cSk 5:컮tuLkKMQv? endstream endobj 56 0 obj 161 endobj 269 0 obj << /Length 270 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 544 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[ 0E3W/Q 3 a7;t``;; .W$)u[bk#c&,N,cFeP8} ,}ZfP ۏ1r1dQO%m7)c*g~t endstream endobj 270 0 obj 165 endobj 59 0 obj << /Length 60 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 546 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͐A0 3^* B }0ET\YL6w-8'O8|uOq+6> stream x͑K@peC1 ,28,\J:ޣ麿{=<`:%l y̗>[NpBڬX{,2Yx_WI:g~;j:*a 4DTfI ?ڝS>ήBBN}kj +t endstream endobj 236 0 obj 167 endobj 149 0 obj << /Length 150 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 550 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xA0 3^C7+c"k׉[ǒ;W`n{y0z9K x6I[v0ցLsq>1 ՙ$YBƚxgk%yHZHw #/ax?`3/; endstream endobj 150 0 obj 161 endobj 69 0 obj << /Length 70 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 552 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͐K 0 }"ۆ =tjnkBFOwL.pb6X!1 |hf5ZT5\I3c=ul0ߠsp(ϬW`8͎CӋIY%^؋xŰ5/{2kCևRMmg`ت+j־- endstream endobj 70 0 obj 164 endobj 27 0 obj << /Length 28 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 554 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@f* t 3R 4կ?6a} %;<7xEC,kphGF.?JZۘôzjj(8NUzVbma{ ަ)R;j> stream xK 0 D{IWxL04D)C/!-O* MhJ<0]*fhPzOrӟkVM[B;E(ŔHd:yzgtroIm3ٔ2Fx'G__0Z*N6 endstream endobj 24 0 obj 144 endobj 141 0 obj << /Length 142 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 558 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑Q@ Df/#DQ!$N &|BM}nJԅݥVR 'r햗}%C,)hڸݭb8X_r|4I9񶆗?2[ 4$VK?1ye?p=9kġw!]f+x<O=/ endstream endobj 142 0 obj 167 endobj 257 0 obj << /Length 258 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 560 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑[@ E˨pC'4uOICnʙ;e&#A;+)v[J}gm $c/<:YE6V:0Eb>+L2m9WVR~J{8x9vaApOYcd~I endstream endobj 258 0 obj 160 endobj 219 0 obj << /Length 220 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 562 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK0 s3NeA8G&d%3)-O`'\m Lg|㬀8BOtJf5aOcT%P~0{%_Gg:Xl#sI $B·3p}޸#68;g1# >~2|/S endstream endobj 220 0 obj 164 endobj 105 0 obj << /Length 106 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 564 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[ 0E3WᧈZ~zCS?!9ͤ?-hp/-;^{wCb1mZ2SὸyLJҡ3x,O읽i.stX9;n1$iwA#C~Ƹ Vm廈)ڱN _5 endstream endobj 106 0 obj 167 endobj 77 0 obj << /Length 78 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 566 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x] 0s3OS3,] IL&_Ԩ"Kx~KɓɻtCQd},4> stream xA 0 ɜJi}ChIQK14!yz'> stream x͐[ @ E3WW"E5! ~i Lzrsip_]g`-A^@LdbfؤX 30lj3 mTedSVaOls(4m8yKl_#ZX\{J{Y['D endstream endobj 252 0 obj 165 endobj 283 0 obj << /Length 284 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 572 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xI Y_STE.RЧOF 6)`׋a 78E<ʒZæerK+o3;~ػe-m|& p/<1CnJb}W.]VؿU9E6xQ endstream endobj 284 0 obj 164 endobj 285 0 obj << /Length 286 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 574 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xI03^1 endstream endobj 286 0 obj 165 endobj 41 0 obj << /Length 42 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 576 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑K0 E ѧ-Et]xދ }0Np7] <#da{0-Qc'{Zi LSiua'qg]R$p6Rmm ̭r>UaQJnV1p_GƖZ5<. endstream endobj 42 0 obj 162 endobj 21 0 obj << /Length 22 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 578 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x 0 Eg~O"m:Oc.-68VJHӓ-KڥJ߰mai#WX|WM({E$Kc)mǫE]ɑSTD[вdj7ٲv+7Km7qyg eK_"#U endstream endobj 22 0 obj 164 endobj 271 0 obj << /Length 272 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 580 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x[ @ Egg/Gҏ f?0$ɽ=2-ak8{;^pph[0#O$-+OXa endstream endobj 272 0 obj 167 endobj 261 0 obj << /Length 262 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 582 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑Q 0 @{3O/QqaggJ nח-eL0p?KOxBI07+V&oj+ls+4 kn9cLy^ʛNزc\]뗔Nۂ?-~tҾWê{> endstream endobj 262 0 obj 162 endobj 209 0 obj << /Length 210 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 584 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK 0 D}"BC3Lj4BB~rk:R&`"a?}-y^<7cG/$>H2UL$3وuN& !QYĔo𰐲2)۽|zSX endstream endobj 210 0 obj 161 endobj 135 0 obj << /Length 136 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 586 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑A@ D<}%dmCS8 \|2HG`Opa:݃ꑇ+QJNa`l ?f1gHO&3?KkvْΜAt4dž˖xuZjYkTllֻCEoB endstream endobj 136 0 obj 167 endobj 97 0 obj << /Length 98 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 588 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xK0 D{ğ"qd&Y̌aӁ au0 9 'Ba rr]+3Bfsd2uI{SXWSYoeUfCbntBʦ♞K1K)s=y endstream endobj 98 0 obj 167 endobj 199 0 obj << /Length 200 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 590 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xA0  xO& Ȋg; ]CsH׈;y/%`KHH^ħj`: -= 0SOÜ  Sa oDi[h a@{b:>Ǜe endstream endobj 200 0 obj 164 endobj 139 0 obj << /Length 140 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 592 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͑K0 s3N*K`4XjeU;~~qKti.pG<և5t|Lwt Kq P5i]*ԪY{إ%NγqGm bevWݞU  d=#G endstream endobj 140 0 obj 164 endobj 29 0 obj << /Length 30 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 594 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xA 0"BC6,_"iOԤEN;K/W4Wl>Pׁ6 ۂ˙73Y58W _zYdDot7<~H^iqsvw-zۙk3x0 endstream endobj 30 0 obj 159 endobj 205 0 obj << /Length 206 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 596 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x 0 Eg~Cs7ӏB;Mݹ7iڟ>8V8 <`k7a|'P" x^np'']4tMm&ۭm' ^apbySWÁ;NG^B(JϧܿHM^;< endstream endobj 206 0 obj 168 endobj 255 0 obj << /Length 256 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 598 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x͏K0 s3N O8C>LmՔU#+zy8mnA' Rx1g#\רԚ=Kأ  )c 0LUfxb eTt.oיjMǰ:;?X=ai;8%O8McNU endstream endobj 256 0 obj 161 endobj 75 0 obj << /Length 76 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace 307 0 R /SMask 600 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x] @ {3O'Q£C>Y[\B $M&O^nʶ*-.l"270 Fi]//9MLv .wX3o endstream endobj 76 0 obj 166 endobj 362 0 obj << /Length 363 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` XyY9 8!|vY׼Ύ\g60_Ȫ|ͩSJ-A\&٠W>}<_UZ{噀\F)ߩg^<=[$o=o9| elII+&jh" (2 endstream endobj 363 0 obj 143 endobj 486 0 obj << /Length 487 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 02"1qȈp2ADTT |. CԸҢN-o$ 2Ʌ-ar LrKywI8 y޽b`ܚQ]˗wEirZZ`.3cdfFr%DU endstream endobj 487 0 obj 145 endobj 350 0 obj << /Length 351 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` yDLx|15n0['u[[=A|!o>[⊸Mϋ MӁo-Weq9Ԣ&n۷A l4^pAy> stream xc` 9ؙXխ̔|&a㸆P->FC=nszYA\~/<ڜ :t cn׬r7VghsJݛwȧ[+g- endstream endobj 455 0 obj 145 endobj 356 0 obj << /Length 357 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` p s@u:y;銲LfݳS̈́@|9oUjS^ϲ?6X\z٫?:K er^eI*.yy$##H-0-p$)Y endstream endobj 357 0 obj 144 endobj 554 0 obj << /Length 555 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` ٘`9UU8!\ qq \`.[mKkܤY@|.57X l<| Y^~We ⲫ>~جX5vI4kfg0jVG/V$0s s3C8H endstream endobj 555 0 obj 141 endobj 500 0 obj << /Length 501 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` xYʘ, y|F~" ^> stream xc` 0 3B1(XzzZ(@J~ӧW*qE^Ne Yp۷ Bd@\e~,Be;> Y6l"/ 2˪@x@ *3e endstream endobj 403 0 obj 143 endobj 546 0 obj << /Length 547 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0s @uh;z;뉱LB&]{-DA|vnry͡z >Ǭ?NX󃸜+>.OetXei +)g10r*kq2B LlL02 % endstream endobj 547 0 obj 145 endobj 408 0 obj << /Length 409 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` X88Y`tdx Y꼌 >g}YA\.ݜu_Rl~V~۰dǓ/Ul?0-Ze׋k5"jd.6(/ R4 endstream endobj 409 0 obj 143 endobj 328 0 obj << /Length 329 0 R /Type /XObject /Subtype /Image /Width 91 /Height 91 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xٱ 0DQXW:t@O7d&ir(009:\]9Vu-mu:tz/RA^OA 6D A hC 6D A hC 6D ڐxxxx6nz>\ endstream endobj 329 0 obj 186 endobj 538 0 obj << /Length 539 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` X٘`9DUT%!r1Y .`.SdYA|WXhV|6[۰do7XlJӎ\;9?Ie4Jhٓn) 2 k{9銱y \Bb,P endstream endobj 539 0 obj 144 endobj 440 0 obj << /Length 441 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 8ʘM5E |D3> stream xc`  s1CuKx;h , A|.g ضٶ}NWС?rƥo?8QemZe~ȣi-100qIj*BXXyH+V endstream endobj 553 0 obj 144 endobj 422 0 obj << /Length 423 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 9D4L|fĦ 0S+i;eX@|#?_ ;OϫE .eoH`q9T"_Y,6I@'0> stream xc` ٸʘ,|F>@->> stream xc` p q1Cu8xi L"橝 A|ǯYzR#nߦ?o՘<o*Cen\}i$*Fneפxy$#'zf66&+ endstream endobj 475 0 obj 144 endobj 508 0 obj << /Length 509 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` xXmu!|N%⮶ [IVQ̱~Kr yA\嘥7??;MeUOϛs$ .~~Ie*^oDmn].(HeS72Pafbc#: endstream endobj 509 0 obj 143 endobj 560 0 obj << /Length 561 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0 r0A1rɚyxY+AlreSgq,7\UėycX@\ɀy7~6Qvl;ɩ2 Y.ux L>)ib`.3cfcc endstream endobj 561 0 obj 143 endobj 346 0 obj << /Length 347 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0Bu1)YIsB\jA5S'Ȁ$Zw^9ؔ$͢޷z)qc,2GZA\FA[7Gs l~L`.,3T  endstream endobj 347 0 obj 142 endobj 568 0 obj << /Length 569 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` xYʘ, y|F~B? ^<\eWN^&~вM J&F @sD + | endstream endobj 569 0 obj 141 endobj 564 0 obj << /Length 565 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` Y9DTd٠\ vf`>Gµ3D@| t>%\ YA~Yrgx%,Eb6 vei6I1^L2" endstream endobj 565 0 obj 143 endobj 434 0 obj << /Length 435 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 9X5̔|faƞ`M^0S#~֡;dY@|~C>?ܔ :2#.ϼzף77Wirʡ=sȯWV'g%s#+7 ݸl endstream endobj 435 0 obj 143 endobj 522 0 obj << /Length 523 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` Y9DTdX!܊l`>Ws,@|^7 r; Y!3~=ۖ 䭾tش0E٬R%3& 03pʘ@-f`aA:$ endstream endobj 523 0 obj 145 endobj 598 0 obj << /Length 599 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0 3B1(ZzzZ(@~ӧW*rE]Ve ]x۷d@"p9& QҳGzf%MްabH/A@j03/.If66\G endstream endobj 599 0 obj 145 endobj 338 0 obj << /Length 339 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0 3B1*ZzzsC53Uz+pE_Fe_|sAW>PYI{'w3'Oٰ~B6"b' 2i@x@XؠR0!  endstream endobj 339 0 obj 145 endobj 472 0 obj << /Length 473 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0 p0A1r˙yxY)BSgr-+7^Yėu;ˢA\~~&^q8~`4cmjd`MI 2esye5<66-y8 s endstream endobj 473 0 obj 143 endobj 406 0 obj << /Length 407 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 02"1J CEXuB-  z.waY䃧{e]1/ˮ'8 :9۞zq ˪>ÛM@SV-gqXŌb핸K+ɋr"̌@b_ endstream endobj 407 0 obj 144 endobj 464 0 obj << /Length 465 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 01B1r˛sCS{+pmk6]Ve e@\~> stream xٱ 0DQXW:t@O7d&ir(009:\]9Vu-mu:tz/RA^OA 6D A hC 6D A hC 6D ڐxxxx6nz>\ endstream endobj 373 0 obj 186 endobj 404 0 obj << /Length 405 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 98Y9%4t!|Nym~&Iܩjͽ* .zҲkq9vD!C+sÃ/o ,2>;2hW$@lbS2weK200 pA]J1 endstream endobj 405 0 obj 146 endobj 418 0 obj << /Length 419 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` Y`9UU8!\Jٱ`.gmK\$A|n7_[n9Cf Y>Snrh$=q(vI<{fGj6Q]G/mV$p q"M endstream endobj 419 0 obj 142 endobj 544 0 obj << /Length 545 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 02"1rKˈr3CDylC5 |vEy:x҂ֵn>)KξUq, ?~=\ 5sib֥+xAj\"ctj|.q%I^(Q endstream endobj 545 0 obj 145 endobj 548 0 obj << /Length 549 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0q @u1 x8KCzm,~^ SB`^^* ⲩ. ~IԦx!J٥sR4@ ":> stream xc` 0s q1Cuj;xk Lf)@|9ǯx2cnߺ?oךn:SejX}i 쒘10rI騊s2B ll`Ka0@ endstream endobj 587 0 obj 146 endobj 392 0 obj << /Length 393 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0q1B1zpA> stream xc` Y٘E$ QYIj >m[A\6ո^erz B .N?>qY'vfI7ȧ2?Ve`Tt1Vq @B) endstream endobj 427 0 obj 144 endobj 308 0 obj << /Length 309 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 8ؙX,U|&AØp~F]5jsXA\^}Ͽ> stream xc` yYX- dy|&A|oUn0C5jҮc=Y@|>˺}OY :2#.߲~wAe9Ԣ> I W b2^&v^$W~C endstream endobj 467 0 obj 137 endobj 368 0 obj << /Length 369 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` xʘxLD |nd Q> stream xc` X$d%٠l^>R`>E% %X@|vع^Xr}fk~0פrNڀꉋ?*G$$j?sr)Q fq!ֲ I `UfG8f endstream endobj 581 0 obj 144 endobj 470 0 obj << /Length 471 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` xYX- x|&҆_50]%bcZdX@|>=O] :t cnEgmrFN}|sD/~xEs:de+Cy^ LH}} endstream endobj 471 0 obj 140 endobj 366 0 obj << /Length 367 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 3Bq[(2lnEVrk_,V.=ow(DU0Wĩgg2d4c'l:+Dc`7gsXd5 <FvvV`  endstream endobj 367 0 obj 144 endobj 326 0 obj << /Length 327 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 88X,,TX|&A躞p]~F]%rs{&(fU{yؐi=u .Qoq7_%6W'"SGVXGFNnN#@q endstream endobj 327 0 obj 144 endobj 600 0 obj << /Length 601 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 02"1qKˈr1ADy4|y #5\!7nr+{+cX@Ro`U2+l߼}^R`ŜmVbSwe``WPX R uX=R endstream endobj 601 0 obj 146 endobj 506 0 obj << /Length 507 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0s Buj{Jrz1m&I,A^?,KLJS] .~ᮗ\wqTc^|vw[$jS8ov]*"#Me`VTbY # endstream endobj 507 0 obj 146 endobj 458 0 obj << /Length 459 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 01B1(rAJS&zʳE\Je[tksAcV>PYIggO3M߲yr"jd 2 *hiCy@XY2 endstream endobj 459 0 obj 145 endobj 342 0 obj << /Length 343 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0s @u k9z;닳F 2DA|6iGZ rz&+~ۤr?Ou )ˮ<Ȉew([eY,+!k 10(is2B lL02 endstream endobj 343 0 obj 145 endobj 592 0 obj << /Length 593 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0s s@uiy8ꈱӻ,DA|6) rxF+~ۤ?Nw Zi+؈ep\}UhNy$7F,#$$8`4` endstream endobj 593 0 obj 145 endobj 384 0 obj << /Length 385 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` X88X`<< >O˺}Z|dYA\nw_ݘo Y6ñFK>Ǥb/vlS?9\ e0𢡊6"fd&s?D'8 endstream endobj 385 0 obj 143 endobj 446 0 obj << /Length 447 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` YXdD9l&`>E5XAٔ}tsS /˩W/@\ݼm~}:*N;v> stream xc`  p0AqH:[3yC5y\^ügKL8)l i1Wy5KnJ .jxm ,A\&~-(+IZf^ m%aA yfvVP endstream endobj 529 0 obj 144 endobj 578 0 obj << /Length 579 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 89XU-,TY|&ڞH}> stream xc`  s3Cu9{;ꈰ"齳M@|y'Y| cߺć?o՚yn<2Ce]eQ$*.E،h;9$#(#H-0-p$) endstream endobj 477 0 obj 144 endobj 348 0 obj << /Length 349 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 02"1rKˈr3CDylC5 |vEy:y҂V5[o9%K̺ *, ?~=Z 6D_ib+@jԜ#cj|.1%I^(R endstream endobj 349 0 obj 145 endobj 432 0 obj << /Length 433 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0 r0A1rɚyxYAlSgևs_M,-5V)%$5VWؾu'2\=k7M0ӂMjy5<f66FRT endstream endobj 433 0 obj 143 endobj 484 0 obj << /Length 485 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` X%e%X&>^Fl`>]%-EA|N%Y6y*SߪoVC\+/?$EEҩtYvb`8e̥AZمd!ւE4:j endstream endobj 485 0 obj 144 endobj 594 0 obj << /Length 595 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` YaمT١2V! !V2`yf ҹk:J0:/?<]嵨?`y71s95sfA,fQɋ'g[b`0 4`iV>  >VL$d@ endstream endobj 595 0 obj 146 endobj 370 0 obj << /Length 371 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 03B1rɚ+0lœVp.\$V.3ʗoF)2њeWԹgˀ֊i c~$~@FV+/ 100BQ% endstream endobj 371 0 obj 145 endobj 516 0 obj << /Length 517 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` ԰ HɊ@E8eB=EY|IK& 19+/=9+R <׋E\`}O_.6sy ]{xv^*;HUƽj9"`mCL$&100r)@gdf(qm endstream endobj 517 0 obj 145 endobj 492 0 obj << /Length 493 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`  p0AqH8[3,}´x\gK ;4Mv+<ߖ Xy(eVC%kݶV"`5SsZy5E> stream xc` Yઘ8EeY!<ʎFb>_Ò5S3LA[o=<53Lq|g[\|)S 3.^wΑIr`l23u'b䒳 vK200 Jʈr3 :N endstream endobj 311 0 obj 145 endobj 496 0 obj << /Length 497 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` XyXa8$l eRY] `.IWۉ%^pft??Z⊹x Y,^]{ $XDM#K㭥\V!eC#5Qv M endstream endobj 497 0 obj 142 endobj 514 0 obj << /Length 515 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` XyYa8 8!|6Y܎\Y60_ЪlS,A\&W>~2;@ĕ\~#噀\F))g^<3G$o5wYF ELII8f6aUCCUa=@y&v..v9O endstream endobj 515 0 obj 140 endobj 322 0 obj << /Length 323 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`  q2AqJy۪ 0΅g5Gh񀹼F.\# qxӏR@Ңӯ~lk;+`UssYA\Ў՛g 1L|Ia`@>TV R endstream endobj 323 0 obj 141 endobj 570 0 obj << /Length 571 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`  s3Cu9{;j̢;L@|NͤnY6~2cnߦ?oVo>"Me[eQ*nEh;9$#(#H-0-p$- endstream endobj 571 0 obj 144 endobj 378 0 obj << /Length 379 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` Y9ؙaX 59LAyI`.Zĭ{ى26M(V qvsuOroMX[7cs> stream xc` Y؄T١R a6r`yf1kWJI/>&W16 .qWkqUc眺s~i6$l1a|;qQ lb& I `gp$‰H endstream endobj 449 0 obj 147 endobj 498 0 obj << /Length 499 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` Y؄T١Җ 6`yfqk畻HK/>*[ 1>cV`I׿iq松snq,&Iڊ1d <%<^q >V(D!$ endstream endobj 499 0 obj 147 endobj 400 0 obj << /Length 401 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` Yxʘx -!|u†~&Eַ}a .^ަ4qyLt\ÓUf`YV9ߎwMWe/n.+ode$ l<|<9y endstream endobj 401 0 obj 140 endobj 468 0 obj << /Length 469 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0s q1Cuh{kLB&IۓL@|v՘GV{*S^ϲ?6Z\zn6G e[}y4 蜐d``WQdK &660  endstream endobj 469 0 obj 146 endobj 374 0 obj << /Length 375 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` p r2Cu:zj̢[bA|N' [7yB}.Wо?s<ƥ[> stream xc` yYaXM,eL y^\`.zG7I1֍:UvpW{ 8!M_|&MTfw^&!ʦn$^&v^!H~ endstream endobj 505 0 obj 141 endobj 480 0 obj << /Length 481 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0s q3Cu k{8hLF m;S̄@|6iGr~: >Ǭ?O:er^}E,+ d``WQbK &66`b` endstream endobj 481 0 obj 146 endobj 316 0 obj << /Length 317 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 9xX`D,t$9,bN`.~ƼGVE]O~weAX[?<ِ R- #]Ua+"nXۘ"6MTRW j/3 jd endstream endobj 317 0 obj 139 endobj 360 0 obj << /Length 361 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 3BqJ[(2l2Erf%k_*V.5ow*%d5VWرggf1\12uӳjXd5 (  endstream endobj 361 0 obj 144 endobj 318 0 obj << /Length 319 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` YyYemu9 |NE ;IVQԡnÙKsxA\%7??7C eUK[%A\fй_??,2 Y-޻sz7.eXVa, 2( 0ss1A# endstream endobj 319 0 obj 144 endobj 596 0 obj << /Length 597 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` X88X`xd<ޙ*`.}kd깍{}{]Hߦ?י󂸼f{y]5jځ{'*db"A\V!u+'KUAC89 +E8 endstream endobj 597 0 obj 143 endobj 558 0 obj << /Length 559 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0q @u1 Z{8Hp@r$2={Y f=B .nގ]& Ⲫ,ZK~Iĺhu! .uTN.!ճr3CPI endstream endobj 559 0 obj 141 endobj 320 0 obj << /Length 321 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 02"1 JɊ0CDCtY|6Yً{ :LJ_{trXZu/lbq|g[ \~-7V&[htAQ> stream xc` 02"1sJ q@EX\Bl!|^خEskAe|ݹ҂eUKY+=@\6 }:Ke |V .aĕK8\}'^|RJ bL`ǏJ0^V endstream endobj 457 0 obj 144 endobj 312 0 obj << /Length 313 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`  p0AqH8{X3,v9}õx\negK 9цtMv۔؞[~hV]9sݶE"`4RsZy5tE> stream xc` x8ʘxMD |n$sQ> stream xc` Y`%մD!|F^5(ki0]1uŶ`|f>(^ $-˟9A\AΓ~<̵ْ̭X@,3ZA\v O;uA$HGDL,O endstream endobj 415 0 obj 141 endobj 336 0 obj << /Length 337 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` YaمUؠ|N9` )0Eʥ|Evb >^꫏..IK[́*S,Uw^0s9Ӗszn;HY6oꢉL .wbV~ q^;I  endstream endobj 337 0 obj 145 endobj 410 0 obj << /Length 411 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 02"1 JɊ0CE,CtY|Vً{ :x_{lJ7 -Z5%Tl#}xXST^IgdffCR endstream endobj 411 0 obj 145 endobj 412 0 obj << /Length 413 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` XyX8$tmd!|V)̶BOE4q8=ƢHET[??^ ⊺9fG7eν ,zYDL"l@ F7;? endstream endobj 413 0 obj 143 endobj 344 0 obj << /Length 345 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` YaʘxԵ |&> K)v0C9c͖VL eݮ.̋RbqEܧ^mWع֧i58wm_ 3HE1oŒm^CFM, r"ڽ endstream endobj 345 0 obj 143 endobj 530 0 obj << /Length 531 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 02"IJ A 7$j7s W)Q fqr I `QfG8f endstream endobj 531 0 obj 144 endobj 478 0 obj << /Length 479 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` Y`%մE> stream xc` 02"1sH s@E5Cmx |EjAz޹JeQIX緫|$\ĵ~>ex 6B Y>K[9\a=Hg5>&0WRIA 113#D[ endstream endobj 451 0 obj 145 endobj 364 0 obj << /Length 365 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 9ʘԅX|F>ꞆX#!<|`sǨq >bmRuOg:@\N> stream xc` 02"1qȈp2ADUx!|nօ T8AҌ.{oh/2+D.A2 0Q½{ڜDAxczV,Ps=43H(*sCy@%LHV endstream endobj 335 0 obj 145 endobj 420 0 obj << /Length 421 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` X$d%YlF^>&R`>e%ęA|vg_ V{ݑFK>5[ɋ/<2K e-zn$ .eb% 6 gUbG8l'X12e> endstream endobj 421 0 obj 144 endobj 532 0 obj << /Length 533 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 02"1qȈp2ADU |.Ж U9AҌbέ{n( 2ɇ/ǭE! Lygq(u.b Z]+wFjp̂ZPy$% ɕpaX^ endstream endobj 533 0 obj 146 endobj 452 0 obj << /Length 453 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 02"J AEXEC,d9 S*sfYæ{yM!˩Og{\/~>*G>c^,yִ kdF1dž)r,V@8e endstream endobj 453 0 obj 141 endobj 488 0 obj << /Length 489 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` Y88ayt4%|Z~٥.`.RHƽ+k\$̫v>|}ce&HZбܗ?qM_y9GS3q{X@"f}5ZD4m,aacg)=a endstream endobj 489 0 obj 140 endobj 354 0 obj << /Length 355 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 89ʘT,,ՄX|F~hCA> stream xc` Y9DUd٠\aA`>{Ղ3E@|Âu_> stream xc` 0s q@u iy8ꈲqӻREA|6𩇯 r|͡K>Ǵ?N Z+ȈetZ}e+)2rKr1y@ l)LF endstream endobj 425 0 obj 146 endobj 490 0 obj << /Length 491 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` Y9ؙaʘ 59LyIr`.Zd*Ř@|O^_]⊸Mϋy`B]'~6U$˭ع`XĬR[{+չA lbڶf`|f.!>v+ p endstream endobj 491 0 obj 145 endobj 534 0 obj << /Length 535 0 R /Type /XObject /Subtype /Image /Width 91 /Height 91 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xٱ 0DQXW:t@O7d&ir(009:\]9Vu-mu:tz/RA^OA 6D A hC 6D A hC 6D ڐxxxx6nz>\ endstream endobj 535 0 obj 186 endobj 574 0 obj << /Length 575 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` yDlLx|1˔2Un0[7mѳ[[%A|!o?]⊺Oϋ: Mo.SrLڶoyhfAG9Z~E}cM N;Y9 endstream endobj 575 0 obj 142 endobj 584 0 obj << /Length 585 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` YaمUؠ|NYЄ`Ki0Eҹ|9E >n֪+..MK[5{3,eÑw^2s9Rsz^;HY&wI"L .W8bV> q^V;I  endstream endobj 585 0 obj 145 endobj 382 0 obj << /Length 383 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` Yxʘy -|F^ `m~<_ǖcB@\܄1;Ǔm6`Y->#k% l<Wy endstream endobj 383 0 obj 139 endobj 572 0 obj << /Length 573 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 9ʘ,ՅX|F>#!> stream xc` YaʘxԵ!|&> HK)])cyV"L y~]] ⊸Mϋ: S?mk1Y~ھ^?Yf,CބMڼ Xg[E= endstream endobj 463 0 obj 143 endobj 390 0 obj << /Length 391 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` YXઘX L|q>>JH۲B><6O_wKTuT\A-o+fW𭙳=Jl#3bF!)i.($A# endstream endobj 391 0 obj 141 endobj 340 0 obj << /Length 341 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` %e%XR>^Fl`>}%,D@|.[5} 0׺oTB\z٫<8I$"\6w[1fS*$.\ l# Z<#33Nn endstream endobj 341 0 obj 146 endobj 566 0 obj << /Length 567 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 02"1 Iˊ0CDC\uX|699{\>ӲW u|˯'5AҢS/tsoQփӂj,G!"@l2Z#33D Q endstream endobj 567 0 obj 145 endobj 324 0 obj << /Length 325 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 98Y`tdx nY> >G}:@\N^VjVzө[ˠhۓ//Z {2F5 AlbPpfI'36 endstream endobj 325 0 obj 143 endobj 526 0 obj << /Length 527 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0q @u1 x8I|Mzl,r^ .~ᮗ^,ⲫ/*s>IԶd5A9dlbrR> stream xc` Y98at4$8L9)N`.rX˫ę@|~=^__ 9OϫE`G|y!S$˥<>2, .yrK_U&/&eds3;8H: endstream endobj 551 0 obj 144 endobj 588 0 obj << /Length 589 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` XyY %9!|v9Ύ'i60_غb+@\&ِy>}4OeVYKdA\&i^<5SA$wݳ3 \V Ғhs1"*{*عؘJ endstream endobj 589 0 obj 141 endobj 352 0 obj << /Length 353 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`  s1Cux;h bY}:A|.E[{".W̧?q> stream xc`  r2Au9yب ,b6YӚtA|nŧK uxl _U WxUv]1}%v`y=SrbldZx4tEJA9Xa  endstream endobj 511 0 obj 144 endobj 386 0 obj << /Length 387 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` Y9EeX!<ʎl`>o52̈́A|>-V.:Ϸpd',mv׸hݕ;G'ɳ2ne3u'b vK200 Jʈ0BD endstream endobj 387 0 obj 147 endobj 518 0 obj << /Length 519 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` X%e%Yޡ`>M%SrEA|N] |Zs^0עYi.=,MY¡x`8-,9@ZMHVIV LL f endstream endobj 519 0 obj 143 endobj 396 0 obj << /Length 397 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` yX`XTM-ѕ 9`.VŒG93vmG^> stream xc`  q2AqHy۩ 2,fD<y+_/ ; -vWmooq-jv{v~^2+ˮԶj|KaU|jl I&nIUME!($B% endstream endobj 503 0 obj 141 endobj 460 0 obj << /Length 461 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0q1B1xrA 3ɲ$;v_ԌeU_uK<\ O~1We ~}-vB .IMk#8A\V1Ӑdom&0UP^SMgacs`  endstream endobj 461 0 obj 144 endobj 428 0 obj << /Length 429 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0qBu1)[IqB&8K$w^9И$ͪ&liq}8ˢ:G[@\F!9[7FCfN`u +ik2Cx@,02  endstream endobj 429 0 obj 141 endobj 512 0 obj << /Length 513 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 01B1țqC>S&y)j7_Fe ]pd@Vp9& Qk≧OyOe$=^ C0U@^KK^jgagg: &0 endstream endobj 513 0 obj 146 endobj 380 0 obj << /Length 381 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0q Bu1 yIq|:Q-&;J,}_kken|^'!C7w?.MvqYvoG?$l?g %vM"<#]e`RTfY  endstream endobj 381 0 obj 146 endobj 430 0 obj << /Length 431 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`  q1CuqHzk,vf3zYK^?81H<Ǔ-9: s/^*s*yvqa*HMey6L .#[BF4;%( XX-# endstream endobj 431 0 obj 143 endobj 590 0 obj << /Length 591 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` Yaʘye4Y!|&APSqK#o晙&`ia( KͽIj, _] 򛕮pug.6YԸ@jdL<\F6>Q1(" endstream endobj 591 0 obj 142 endobj 576 0 obj << /Length 577 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` p r2Cu9zت bV[A|.ԅ', ش{|=NWȡ?r&[ᄌ4IeSo]}Q8*F^UX;Y$(3; endstream endobj 577 0 obj 144 endobj 436 0 obj << /Length 437 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` ٸؙ`X D!|fa8)60[;q= ,A|_]"Jϻ j >\3_~zG1^V)o%NZ =;Gc9n$-(さ`%"/ endstream endobj 437 0 obj 143 endobj 444 0 obj << /Length 445 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` xXʘxlt!|.et 0He02Pd9a<4 endstream endobj 445 0 obj 144 endobj 398 0 obj << /Length 399 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` X88axdtY`.}> stream xc` Xxؙe-MTY |.eCA<[ƪs5SW~@iP՟'i|xq*,޴iq` *MQFBxd LUYAZ*^ bXIs endstream endobj 525 0 obj 139 endobj 582 0 obj << /Length 583 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`  q2AqHy۩ 0RNfDj> stream xc` 02"J CEXEtC- .waYB{em/ˡٯ\ݼ0eUuMe`ŌBfSW/&fn _ZI^0&ffd>g( endstream endobj 395 0 obj 141 endobj 416 0 obj << /Length 417 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` Y`9UT8!JYr`.W+%A|n 7_[ i=ۃ5< Y>Co~]f rj$;qHe6Y"{fG j61]'/-aV$p q" endstream endobj 417 0 obj 142 endobj 536 0 obj << /Length 537 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0s Bu1 {Ir|ѭ&9H,r\?Iĺ`U .exF/#.*10090A " endstream endobj 537 0 obj 145 endobj 358 0 obj << /Length 359 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` XyX8$tmd!|VI"/EN4Qg69<&{ƒ(%[?<ِ 8w{Pyf['iν -zE#lA JFbP7;D endstream endobj 359 0 obj 142 endobj 314 0 obj << /Length 315 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0s @u k;z;뉳LƉz3DA|6GZ rzF+~Ǵ?OۂZ˯<$,Tp˲zOYVS6:#I ,!"LlL02 %; endstream endobj 315 0 obj 144 endobj 494 0 obj << /Length 495 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` jdyY"~z"`>K%})Ƃ`=L,-sӯu9A}bgk\3sYeje. 6[.,X b1#Z#33D pz endstream endobj 495 0 obj 143 endobj 442 0 obj << /Length 443 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 0Bu1*YIsB\5S'ʰ;._Sb(Ǯi .Zǿޜ' 28vaQ4{֍1\ .Yxv 3&)ճ90A | endstream endobj 443 0 obj 144 endobj 332 0 obj << /Length 333 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` 02"1sJ q@E5]Bmy |^Esk}A޹ReUM\緫3\u~}6et6 Y> +4)s,z1ΪPYxĸ ɕpa[ endstream endobj 333 0 obj 143 endobj 376 0 obj << /Length 377 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` yX`XUL,dFQ 9J\`.f=GջH0_"I qz۟;u9vmG^~*˥8s߱ &1UMyXTͬa200qq_ endstream endobj 377 0 obj 135 endobj 542 0 obj << /Length 543 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` X٘`9TU9!J`.KՒm=eXA|NUמ\o1=χ-6 Yn=/~>XgⲩD8z I8cfw3*+100s s@yx( endstream endobj 543 0 obj 143 endobj 562 0 obj << /Length 563 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` Y`$ԴE9<*Y1`.oʭęA|w_Y :} Y~~> stream xc` ԰ HJ@E8|C= |IǢK& 1zY+.=5;Z,-`vïK @v>~̈ oՇī,nWȵ%g`* d``dSX R Q m endstream endobj 331 0 obj 145 endobj 388 0 obj << /Length 389 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` yĴmLy|1ԖR?U.0[/c3[$N=}*Q $-1?Ϸekv(FԈ}߲2;Q^fAЂdY$8l\9|$ endstream endobj 389 0 obj 142 endobj 520 0 obj << /Length 521 0 R /Type /XObject /Subtype /Image /Width 15 /Height 15 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` Y88ayeu$|٥i\`.bPƽ\%yM+v> stream xc` 0q1B1X{yrA!3˲$w]̜eQ[yӽA\V1Oe v .qMk{"չ\V1dom&0UP^C]c``dacs`  endstream endobj 439 0 obj 145 endobj 602 0 obj << /Length 603 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >> stream xU]hU>3;yCmK+u!aR&MMخ6Ut'3ٴ } oZWE|-jžT (XA ~gv;pg9;{eF4"_=}GiRpfg)ƮZS-7q޹-25+0Zj9G҉a!Q및 }?ЬVr/ =\KئƂV^vn519= r>W3?iLLJN3ٶ==TGfbFx(ب {t,毘AcmXEHf*0|%]x#Y/5Ia'r0?vȕ>c-orGysxuJ.ߴOFCQeG`n)CC Q`;|':OO/Vk!&rgXC`ERY)$?/:&||[xQۑޠVO>9C?EoDhF̄v|ky?pm͸ή> _:T;ҿY/ۙ5o(UYYTD{2jY}QVlxaui_2;;Kr5a}Xg |ǬV^]#w}M7] kt4iEZ>簮J[ԵOY 94)`6 `)+YK=VUՇ)uP=Rw1FԂ3;*qO6e7ΦHpV '݉83Grxvwۈc A6 oIdz'˖#r1|]8ӏܥʄ2dIS1eD98;TSbv ωd(Oh( >oҊ9<ES&Vm~D[Sۯ-1߶Q*u_{ endstream endobj 603 0 obj 1088 endobj 14 0 obj [ /ICCBased 602 0 R ] endobj 604 0 obj << /Length 605 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xwTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf endstream endobj 605 0 obj 2612 endobj 307 0 obj [ /ICCBased 604 0 R ] endobj 606 0 obj << /Length 607 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xUoT>oR? XGůUS[IJ*$:7鶪O{7@Hkk?<kktq݋m6nƶد-mR;`zv x#=\% oYRڱ#&?>ҹЪn_;j;$}*}+(}'}/LtY"$].9⦅%{_a݊]hk5'SN{<_ t jM{-4%TńtY۟R6#v\喊x:'HO3^&0::m,L%3:qVE t]~Iv6Wٯ) |ʸ2]G4(6w‹$"AEv m[D;Vh[}چN|3HS:KtxU'D;77;_"e?Yqx endstream endobj 607 0 obj 1047 endobj 13 0 obj [ /ICCBased 606 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >> endobj 608 0 obj << /Type /Catalog /Pages 3 0 R /Version /1.4 >> endobj 16 0 obj << /Type /Font /Subtype /TrueType /BaseFont /GUHXAZ+HelveticaNeue /FontDescriptor 609 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 201 /Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 556 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 519 0 0 0 722 0 648 0 0 0 0 0 0 926 0 0 0 0 0 0 0 0 0 0 593 0 0 537 0 0 0 0 0 519 0 0 0 574 0 0 333 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 ] >> endobj 609 0 obj << /Type /FontDescriptor /FontName /GUHXAZ+HelveticaNeue /Flags 32 /FontBBox [-951 -481 1446 1077] /ItalicAngle 0 /Ascent 952 /Descent -213 /CapHeight 711 /StemV 0 /Leading 28 /XHeight 625 /MaxWidth 1500 /FontFile2 610 0 R >> endobj 610 0 obj << /Length 611 0 R /Length1 4788 /Filter /FlateDecode >> stream xX}l[?>?yq%8q͗M5Ѐ֖4I?V, cSi"`HLMl6S+ml4MBk>4M4AI= &swι;xV.DKɸDlmg/m;}y?i$R;b0lm}h'.,[O>埶D/^?6wUk>+?G̼- ՑJq-e7?<>sK".z}^Я?%`ѭ,H~ꐷpaxjU ~vf)CEL+wơ* W _:ז"YZz.SܸPk=QݯUyJ'O T".o{ ФDsVo7+K+ōՍr2IwXI̕{j<;6a`F`Y@k %1IN̆7|iR>˗.l^=Zڼ2f"Ebfl}iN؀ƆW76X1FV*H= -[9M MTQv]bR"R# ހ3V m%H]{1-7T@K&—no/nG>[A8pKEzA.C8ܤ=K,Ww~r/AwC A~[yԓyxg$*VN ;;~]eOm;Z S7j:CQj]`6! Gc ~]zBn޲]Hco[s1stV^$/cF]B"B 5;Jl b@&pjonVٝwX*ski(9Xp7$*8x ތi :\T$iL9|w wlx [TY"[([S2 g= QHR< y ,{ː_@,2mےTE>R"Yq;$Y)AExb5G@~'docT5S_`o wD=%;÷̪DINӟY׹>Yl]6q ,Y , , , , , , ,x3qS2ZF| ^( nzͯ:ï:ï:ïnAr[ [Wi LD ® f%3w&a|hhL_YDczնɑ"Zݶ`8o * L͖bcӝ|"PEmɭpJ]5 ܉&9ohf52q,յ/0:ڑl{'w6X XXTD~3Uph;X^LybAɡ)m \[m_?苎tϩ*2HѬ UVFVEFA Ҁ;N"g];|r'ḩEt_߉Wp\c\`l2Id0Id0Id0Id0Id0Id0IdI"a \!bj,-b A_Nv[g\.]i.dAױf׬m: z/3.4T>&YO +'ϟ6|Gx; IKpz}>mHW*4'(bڰZ BobVךL8P8588888²v "B'dpPc⬧B>!u#C|z7&=xy"l=Hdc-Dd#UhjqOe2f~V3QӷGf"tp^w,=U˄""8"m@ j~3u1ݪ̘Yn8XZjML,(3'f/cǎ}x c_=<ͻdKl$[[cWSHli4>sj||e&^g;NU#.x.W3_Ȳ檞񤤌phοX?-ځUh/$/^`N[8d; ,]Ӑ!@y3HqO'lj !0T1J 8      7 @&hLyG1o80ˁĸ'v1;1= sdz'raƓb2Yjo*&GO{{FG}}e,$渇(&YvAͺ*TgN")ob&UX\|~jĻŻ^=}Ep4#8`ۚ;q(ɚrPP36NAbʕ"~6a S+aVHR*#| N_w /HuvϺDs8ovJHE? dwZ cݾ0SZY]{puґUZE(F endstream endobj 611 0 obj 2706 endobj 15 0 obj << /Type /Font /Subtype /TrueType /BaseFont /HMTDQJ+HelveticaNeue-BoldItalic /FontDescriptor 612 0 R /Encoding /MacRomanEncoding /FirstChar 84 /LastChar 116 /Widths [ 611 0 630 0 0 0 0 0 0 0 0 0 0 0 0 556 0 574 352 0 611 259 0 0 0 907 0 0 0 0 0 0 370 ] >> endobj 612 0 obj << /Type /FontDescriptor /FontName /HMTDQJ+HelveticaNeue-BoldItalic /Flags 96 /FontBBox [-1061 -481 1530 1141] /ItalicAngle 15 /Ascent 975 /Descent -217 /CapHeight 866 /StemV 0 /Leading 29 /XHeight 650 /MaxWidth 1500 /FontFile2 613 0 R >> endobj 613 0 obj << /Length 614 0 R /Length1 2904 /Filter /FlateDecode >> stream xVMl~3?EEzEDR2R5bK-֕UeKHԀv2C\Zԇ(F=E꡽T@ Ek #Rպ@]y޼77*J[$QaimiKg;hC^YkBe7],^0E 4h/0_^]jΛo4'|eqb;f]}u۱?]4Y Mb[#\{u]Cwڟ{̂Gb/}rSOO?5m >-XhR+(,y C=3r]-ToBVyhTT +2,GHX70[҇y,|EZ>=JQ>* F06Rl %1UPPUr[3gK@$ ) (l[ϡR i 鱐%BqBNG!UgB^xFȷo=#䞧B'&M$yrL:x,:*JTqBY+hPBb䰒GBׄ"6lLۄ(BctvٷOŷƶ;PtR?50SJ̭ڿ~`cX*ՊG饶u*j" 2) +V{~YOm۷)#0v'2sw *Lez 3x`~\@wԍ"`ncq\)Evm|H2 d -Ȼ!m7П nL?9._uv=II'2ܰDOC1I5;=\齹|GY<]@8RL͗)o_QC)x""\o;6ikkͥsM7 4pM7 4pM7 4piঁ[;]/B@gȕ w*cR&V%7ոA= c EʲOj=^gM=]΍_+g]yJh{%ѓ _ύD|֐-f2!Q8Z(W__ D1t3ZNNdGU?1AZ/keobkϟ'y/{2{Wm-LLzPz'(> endobj 615 0 obj << /Type /FontDescriptor /FontName /ITKBXH+HelveticaNeue-Bold /Flags 32 /FontBBox [-1018 -481 1437 1141] /ItalicAngle 0 /Ascent 975 /Descent -217 /CapHeight 866 /StemV 0 /Leading 29 /XHeight 650 /MaxWidth 1500 /FontFile2 616 0 R >> endobj 616 0 obj << /Length 617 0 R /Length1 3148 /Filter /FlateDecode >> stream xV_l[Wι8{l7vozRl:[kHmMSFZ6}c%?YpyؿN#ܴ4^3\_G3Fp?F.gGK S\ V'ɓ`7HOMԓ)I'd4Th,vDurac%Q.u5_F XDVRCK'9ױL&3t%YD`Zr"8Ɉ52v{;!9Kz inJFn[\&Lmҷ釴M?kN]HV~dDIըccۥVyF,k*;'ak:S"3O%VfW*ꌺR5DtrRP\ɢV͗X.& ` +%DV3nJ݅19V|buT󅒢it|zhLL8Fm|{#b DR1VY(T[ZQӀJ|QLÚ" a-!R;s idL_ AJשCAj}HmHel: iKm![ ®/GIz[G!{ a++/i!WԺ@x뿮,;Br 4ΠӋΌ~aUâx'p٨cdw$%.iu = ns~ځX;BإƆ0͗H2M֜&}|g_ƒwu{IΪCT1^ԣF#  Z=͂J5 W@o~Եv[Gz8jsŠg8/3!GѰg39><4cPj/fCVvA.+^}e8<1|ul!ew`_O͟K9L菝D3@o w{{]f_\==ybtpz `tJf fp?;ӯ4H{%īrL򀢠  ek}ZW_Q;q/v~ ?t!'!iE$r \F%KoӒtfsLXMlfdylXn"n8ќ6NzҹGҧChx%*$ٴ3U PPa}Fx-&OOD=n=f]qS:ll~/%`Lv@}]zvQζݲA__حW%O6+%[Y8e?Tf =G:<=R~mdMآ!ثOe++cD'|HM HܸKG) /gm~\uؓmT溗8ZDz%%Ҁ dp {!{oc;C֋o:?tXs'fϷʍW.}K;ts_%>]{]t tu+&D'禊7.?V\>4qa D endstream endobj 617 0 obj 1810 endobj 17 0 obj << /Type /Font /Subtype /TrueType /BaseFont /ZSIBLZ+HelveticaNeue /FontDescriptor 618 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 117 /Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 556 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 648 760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 537 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 ] >> endobj 618 0 obj << /Type /FontDescriptor /FontName /ZSIBLZ+HelveticaNeue /Flags 32 /FontBBox [-951 -481 1446 1077] /ItalicAngle 0 /Ascent 952 /Descent -213 /CapHeight 846 /StemV 0 /Leading 28 /XHeight 634 /MaxWidth 1500 /FontFile2 619 0 R >> endobj 619 0 obj << /Length 620 0 R /Length1 3280 /Filter /FlateDecode >> stream xmh[ǟs+k"%Ւ-GגUD vfqbR8um%kz c11]  FC_]AۇQJ?%s,4L<繿{s7NZiL^\[ Pxyo(=7.DХ+ O"raaɰ3e46AٷaKE_]_[nZ[x>UE kc|X?fsx1q^&R'nBX#+:2$ǟyMz8̦}&TEt]ϩlerYE_foc/L*d.gɔf9EU9L-\V.LTw8_f;?(g65]ߟ]ɔ0x  jDtNR¿T2%: |_3grJ)6|0Lb]Ro )2/rӹV[Jg^EgK7OJ73^%(K#RD,.߈ي-^\E(Ţ+[T̨ހ+cL2KʉxE g)2u&E$KH)-@1H۾!{Aڱ'HC*#NHկ ~-C#jF҅h:a7DسDx#{~A iAx-Ks]!"$?S };bCB7`iKy f8Y g6ϻwE׈[ψJJț6@vn#ZS,9丨W46I4Hd fL* ̝LZ=iK~Ư'zMͤV`"Q)Vê Nh>jIuj2[2;4ݒ1_W~RGuquUDP }^BGQhC+% 7xt 2={TAN,[ "kbhvU+)S2e qGfYGow3*ԮZc>MwGc=]>WX蔢ED4 J8=nk% .a؈D$". D$@D D$@D D$@DI'"(ƽkRM/ЪIɚ+ LOMMsU, csm,- A.iܣV }@بS#@>khi6[ @ 4].C?^C7?BmYʿ!{7^]^v𲃗e/;x kk6vd~P^W궨C<>q,Vw2b;ƎJ7b|qQO$s[[saQ.N:|ԡͬ$+3(]c'_\N_D耞#vrL\Z=zP?Qb8 v[d QA} _Qgpc7+؈mz zPsz 2 {Dk62R+x4dFmt˹TG"Cll;8|4~bF큳 #9Q9|φ' + ' O>䧹 endstream endobj 620 0 obj 1825 endobj 621 0 obj (stealing.graffle) endobj 622 0 obj (Mac OS X 10.9.4 Quartz PDFContext) endobj 623 0 obj (Joseph Noir\012Dominik Charousset) endobj 624 0 obj (OmniGraffle 6.0.5) endobj 625 0 obj (D:20140828151914Z00'00') endobj 1 0 obj << /Title 621 0 R /Author 623 0 R /Producer 622 0 R /Creator 624 0 R /CreationDate 625 0 R /ModDate 625 0 R >> endobj xref 0 626 0000000000 65535 f 0000138863 00000 n 0000015973 00000 n 0000127419 00000 n 0000000022 00000 n 0000015952 00000 n 0000016077 00000 n 0000030062 00000 n 0000030375 00000 n 0000059822 00000 n 0000060136 00000 n 0000022010 00000 n 0000022325 00000 n 0000127381 00000 n 0000123391 00000 n 0000131176 00000 n 0000127567 00000 n 0000136096 00000 n 0000133663 00000 n 0000047717 00000 n 0000048061 00000 n 0000067876 00000 n 0000068223 00000 n 0000063837 00000 n 0000064164 00000 n 0000032225 00000 n 0000032572 00000 n 0000063476 00000 n 0000063817 00000 n 0000070834 00000 n 0000071176 00000 n 0000027136 00000 n 0000027479 00000 n 0000029697 00000 n 0000030042 00000 n 0000056890 00000 n 0000057228 00000 n 0000058720 00000 n 0000059068 00000 n 0000058352 00000 n 0000058700 00000 n 0000067511 00000 n 0000067856 00000 n 0000040340 00000 n 0000040688 00000 n 0000045869 00000 n 0000046220 00000 n 0000049919 00000 n 0000050265 00000 n 0000026770 00000 n 0000027116 00000 n 0000031867 00000 n 0000032205 00000 n 0000036653 00000 n 0000036999 00000 n 0000061266 00000 n 0000061610 00000 n 0000053209 00000 n 0000053561 00000 n 0000062001 00000 n 0000062349 00000 n 0000038861 00000 n 0000039211 00000 n 0000048452 00000 n 0000048798 00000 n 0000020913 00000 n 0000021257 00000 n 0000054686 00000 n 0000055033 00000 n 0000063109 00000 n 0000063456 00000 n 0000033708 00000 n 0000034055 00000 n 0000023820 00000 n 0000024170 00000 n 0000071937 00000 n 0000072286 00000 n 0000065666 00000 n 0000066016 00000 n 0000044764 00000 n 0000045105 00000 n 0000056519 00000 n 0000056870 00000 n 0000045497 00000 n 0000045849 00000 n 0000023089 00000 n 0000023431 00000 n 0000052847 00000 n 0000053189 00000 n 0000032967 00000 n 0000033318 00000 n 0000042558 00000 n 0000042900 00000 n 0000041448 00000 n 0000041789 00000 n 0000043290 00000 n 0000043633 00000 n 0000069724 00000 n 0000070074 00000 n 0000047354 00000 n 0000047696 00000 n 0000051387 00000 n 0000051730 00000 n 0000049552 00000 n 0000049898 00000 n 0000065293 00000 n 0000065645 00000 n 0000057979 00000 n 0000058331 00000 n 0000035914 00000 n 0000036260 00000 n 0000039966 00000 n 0000040319 00000 n 0000043653 00000 n 0000043999 00000 n 0000019059 00000 n 0000019410 00000 n 0000026039 00000 n 0000026384 00000 n 0000030761 00000 n 0000031106 00000 n 0000051751 00000 n 0000052098 00000 n 0000046614 00000 n 0000046962 00000 n 0000032592 00000 n 0000032946 00000 n 0000053943 00000 n 0000054296 00000 n 0000042920 00000 n 0000043269 00000 n 0000037019 00000 n 0000037369 00000 n 0000046983 00000 n 0000047333 00000 n 0000069351 00000 n 0000069703 00000 n 0000027862 00000 n 0000028203 00000 n 0000070464 00000 n 0000070813 00000 n 0000064184 00000 n 0000064536 00000 n 0000055419 00000 n 0000055769 00000 n 0000039231 00000 n 0000039576 00000 n 0000054317 00000 n 0000054665 00000 n 0000062742 00000 n 0000063088 00000 n 0000037758 00000 n 0000038108 00000 n 0000057612 00000 n 0000057958 00000 n 0000040708 00000 n 0000041057 00000 n 0000052479 00000 n 0000052826 00000 n 0000042183 00000 n 0000042537 00000 n 0000035548 00000 n 0000035893 00000 n 0000049184 00000 n 0000049531 00000 n 0000041078 00000 n 0000041427 00000 n 0000024560 00000 n 0000024905 00000 n 0000031494 00000 n 0000031846 00000 n 0000044393 00000 n 0000044743 00000 n 0000051021 00000 n 0000051366 00000 n 0000050655 00000 n 0000051000 00000 n 0000025663 00000 n 0000026018 00000 n 0000059088 00000 n 0000059435 00000 n 0000036281 00000 n 0000036632 00000 n 0000020169 00000 n 0000020520 00000 n 0000056158 00000 n 0000056498 00000 n 0000021636 00000 n 0000021989 00000 n 0000027499 00000 n 0000027841 00000 n 0000028599 00000 n 0000028943 00000 n 0000029326 00000 n 0000029676 00000 n 0000019801 00000 n 0000020148 00000 n 0000041809 00000 n 0000042162 00000 n 0000070094 00000 n 0000070443 00000 n 0000033338 00000 n 0000033687 00000 n 0000053581 00000 n 0000053922 00000 n 0000071196 00000 n 0000071549 00000 n 0000038490 00000 n 0000038840 00000 n 0000068984 00000 n 0000069330 00000 n 0000030394 00000 n 0000030740 00000 n 0000045125 00000 n 0000045476 00000 n 0000048081 00000 n 0000048431 00000 n 0000057248 00000 n 0000057591 00000 n 0000064923 00000 n 0000065272 00000 n 0000050285 00000 n 0000050634 00000 n 0000026405 00000 n 0000026749 00000 n 0000055790 00000 n 0000056137 00000 n 0000022345 00000 n 0000022697 00000 n 0000028964 00000 n 0000029305 00000 n 0000039597 00000 n 0000039945 00000 n 0000052119 00000 n 0000052458 00000 n 0000062369 00000 n 0000062721 00000 n 0000025297 00000 n 0000025642 00000 n 0000048818 00000 n 0000049163 00000 n 0000018314 00000 n 0000018667 00000 n 0000066036 00000 n 0000066378 00000 n 0000034804 00000 n 0000035156 00000 n 0000038129 00000 n 0000038469 00000 n 0000023451 00000 n 0000023799 00000 n 0000066399 00000 n 0000066749 00000 n 0000024190 00000 n 0000024539 00000 n 0000071570 00000 n 0000071916 00000 n 0000064557 00000 n 0000064902 00000 n 0000019431 00000 n 0000019780 00000 n 0000068616 00000 n 0000068963 00000 n 0000060156 00000 n 0000060506 00000 n 0000046240 00000 n 0000046593 00000 n 0000059456 00000 n 0000059801 00000 n 0000061630 00000 n 0000061980 00000 n 0000068243 00000 n 0000068595 00000 n 0000020541 00000 n 0000020892 00000 n 0000034075 00000 n 0000034417 00000 n 0000022718 00000 n 0000023068 00000 n 0000028224 00000 n 0000028578 00000 n 0000037390 00000 n 0000037737 00000 n 0000066770 00000 n 0000067119 00000 n 0000067140 00000 n 0000067490 00000 n 0000060894 00000 n 0000061245 00000 n 0000055053 00000 n 0000055398 00000 n 0000034438 00000 n 0000034783 00000 n 0000031127 00000 n 0000031473 00000 n 0000024926 00000 n 0000025276 00000 n 0000018688 00000 n 0000019038 00000 n 0000035177 00000 n 0000035527 00000 n 0000021277 00000 n 0000021615 00000 n 0000060527 00000 n 0000060873 00000 n 0000044020 00000 n 0000044372 00000 n 0000126168 00000 n 0000084915 00000 n 0000085233 00000 n 0000093050 00000 n 0000093369 00000 n 0000099815 00000 n 0000100131 00000 n 0000118463 00000 n 0000118781 00000 n 0000097453 00000 n 0000097766 00000 n 0000098126 00000 n 0000098444 00000 n 0000099139 00000 n 0000099455 00000 n 0000094062 00000 n 0000094377 00000 n 0000109678 00000 n 0000109995 00000 n 0000086938 00000 n 0000087256 00000 n 0000075690 00000 n 0000076050 00000 n 0000120823 00000 n 0000121142 00000 n 0000119479 00000 n 0000119796 00000 n 0000103541 00000 n 0000103860 00000 n 0000100827 00000 n 0000101146 00000 n 0000080804 00000 n 0000081123 00000 n 0000108997 00000 n 0000109317 00000 n 0000088299 00000 n 0000088618 00000 n 0000101845 00000 n 0000102162 00000 n 0000078775 00000 n 0000079091 00000 n 0000090675 00000 n 0000090994 00000 n 0000072984 00000 n 0000073301 00000 n 0000111028 00000 n 0000111346 00000 n 0000105232 00000 n 0000105551 00000 n 0000073662 00000 n 0000073980 00000 n 0000118126 00000 n 0000118442 00000 n 0000097787 00000 n 0000098105 00000 n 0000072306 00000 n 0000072623 00000 n 0000103201 00000 n 0000103520 00000 n 0000086599 00000 n 0000086917 00000 n 0000085586 00000 n 0000085904 00000 n 0000092033 00000 n 0000092352 00000 n 0000082161 00000 n 0000082521 00000 n 0000096437 00000 n 0000096755 00000 n 0000119817 00000 n 0000120126 00000 n 0000094737 00000 n 0000095056 00000 n 0000114071 00000 n 0000114391 00000 n 0000107649 00000 n 0000107962 00000 n 0000088979 00000 n 0000089296 00000 n 0000111706 00000 n 0000112027 00000 n 0000121163 00000 n 0000121479 00000 n 0000108661 00000 n 0000108976 00000 n 0000084236 00000 n 0000084555 00000 n 0000117113 00000 n 0000117428 00000 n 0000112386 00000 n 0000112698 00000 n 0000116103 00000 n 0000116422 00000 n 0000095761 00000 n 0000096075 00000 n 0000074674 00000 n 0000074991 00000 n 0000082542 00000 n 0000082862 00000 n 0000081482 00000 n 0000081800 00000 n 0000075352 00000 n 0000075669 00000 n 0000101167 00000 n 0000101486 00000 n 0000101507 00000 n 0000101824 00000 n 0000100491 00000 n 0000100806 00000 n 0000117449 00000 n 0000117765 00000 n 0000082883 00000 n 0000083199 00000 n 0000103881 00000 n 0000104199 00000 n 0000077087 00000 n 0000077403 00000 n 0000105910 00000 n 0000106230 00000 n 0000084576 00000 n 0000084894 00000 n 0000113394 00000 n 0000113709 00000 n 0000114412 00000 n 0000114729 00000 n 0000091015 00000 n 0000091332 00000 n 0000079786 00000 n 0000080103 00000 n 0000115426 00000 n 0000115743 00000 n 0000121835 00000 n 0000122154 00000 n 0000076410 00000 n 0000076727 00000 n 0000119140 00000 n 0000119458 00000 n 0000115764 00000 n 0000116082 00000 n 0000089317 00000 n 0000089636 00000 n 0000095077 00000 n 0000095398 00000 n 0000102861 00000 n 0000103180 00000 n 0000104561 00000 n 0000104876 00000 n 0000073322 00000 n 0000073641 00000 n 0000099476 00000 n 0000099794 00000 n 0000087959 00000 n 0000088278 00000 n 0000113055 00000 n 0000113373 00000 n 0000108323 00000 n 0000108640 00000 n 0000081821 00000 n 0000082140 00000 n 0000085254 00000 n 0000085565 00000 n 0000096096 00000 n 0000096416 00000 n 0000086264 00000 n 0000086578 00000 n 0000081144 00000 n 0000081461 00000 n 0000077760 00000 n 0000078078 00000 n 0000090336 00000 n 0000090654 00000 n 0000102522 00000 n 0000102840 00000 n 0000097112 00000 n 0000097432 00000 n 0000105572 00000 n 0000105889 00000 n 0000091353 00000 n 0000091671 00000 n 0000072644 00000 n 0000072963 00000 n 0000104897 00000 n 0000105211 00000 n 0000106251 00000 n 0000106570 00000 n 0000092713 00000 n 0000093029 00000 n 0000118802 00000 n 0000119119 00000 n 0000093390 00000 n 0000093706 00000 n 0000095419 00000 n 0000095740 00000 n 0000074337 00000 n 0000074653 00000 n 0000112719 00000 n 0000113034 00000 n 0000096776 00000 n 0000097091 00000 n 0000087618 00000 n 0000087938 00000 n 0000078099 00000 n 0000078416 00000 n 0000111367 00000 n 0000111685 00000 n 0000113730 00000 n 0000114050 00000 n 0000093727 00000 n 0000094041 00000 n 0000092373 00000 n 0000092692 00000 n 0000112048 00000 n 0000112365 00000 n 0000121500 00000 n 0000121814 00000 n 0000080124 00000 n 0000080443 00000 n 0000116443 00000 n 0000116756 00000 n 0000110016 00000 n 0000110332 00000 n 0000089657 00000 n 0000089975 00000 n 0000102183 00000 n 0000102501 00000 n 0000104220 00000 n 0000104540 00000 n 0000106591 00000 n 0000106951 00000 n 0000117786 00000 n 0000118105 00000 n 0000076071 00000 n 0000076389 00000 n 0000100152 00000 n 0000100470 00000 n 0000120147 00000 n 0000120464 00000 n 0000083220 00000 n 0000083539 00000 n 0000075012 00000 n 0000075331 00000 n 0000083560 00000 n 0000083874 00000 n 0000110353 00000 n 0000110671 00000 n 0000076748 00000 n 0000077066 00000 n 0000074001 00000 n 0000074316 00000 n 0000077424 00000 n 0000077739 00000 n 0000098803 00000 n 0000099118 00000 n 0000078437 00000 n 0000078754 00000 n 0000120485 00000 n 0000120802 00000 n 0000079448 00000 n 0000079765 00000 n 0000109338 00000 n 0000109657 00000 n 0000079112 00000 n 0000079427 00000 n 0000094398 00000 n 0000094716 00000 n 0000107983 00000 n 0000108302 00000 n 0000106972 00000 n 0000107288 00000 n 0000115087 00000 n 0000115405 00000 n 0000089996 00000 n 0000090315 00000 n 0000085925 00000 n 0000086243 00000 n 0000116777 00000 n 0000117092 00000 n 0000107309 00000 n 0000107628 00000 n 0000083895 00000 n 0000084215 00000 n 0000110692 00000 n 0000111007 00000 n 0000114750 00000 n 0000115066 00000 n 0000088639 00000 n 0000088958 00000 n 0000091692 00000 n 0000092012 00000 n 0000098465 00000 n 0000098782 00000 n 0000080464 00000 n 0000080783 00000 n 0000087277 00000 n 0000087597 00000 n 0000122175 00000 n 0000123369 00000 n 0000123429 00000 n 0000126146 00000 n 0000126207 00000 n 0000127359 00000 n 0000127502 00000 n 0000128113 00000 n 0000128356 00000 n 0000131154 00000 n 0000131448 00000 n 0000131704 00000 n 0000133641 00000 n 0000133923 00000 n 0000134172 00000 n 0000136074 00000 n 0000136459 00000 n 0000136702 00000 n 0000138619 00000 n 0000138641 00000 n 0000138677 00000 n 0000138730 00000 n 0000138783 00000 n 0000138820 00000 n trailer << /Size 626 /Root 608 0 R /Info 1 0 R /ID [ ] >> startxref 138989 %%EOF actor-framework-0.16.3/doc/pdf/stream-manager.pdf000066400000000000000000000470041341123343400216230ustar00rootroot00000000000000%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream xKs7)7NM^וKn)jc{$ǒHLj xj_p~^ӒK}22ƚ_ݽ5ޗyy[\esNټt1ʖLܘ66kXgR,֨o0oid͡m6<.%xhKlggp[Qhc8:, M.F R&y<89m?Qq![oϪʪ+F7[R"b{n MfN_k+:z#O*p$ u.n<7!d^2rϳd9>nd!b򜶜}dNJ$:DV;? ֥0o~fW,}ǰP$v d/ ܢ/c?""IJt+٬g>(_sb.=+04ga3"XS XDDJQ MG4te]J!;JýPU2+ģon7"дMO;JSMrM8EuRm"R37F<ATFaVdž@YVI$ӴP~ilw5P>tztj ؾI+s-)Yyj{I-i%ǫCIPsUL'HESS`>%؎@9$@a.,CBAXoC)s d8}BJp++ϣ/r.}\9PRܼ\*6)̊/pZSomAkŰ Vo|5.v6Ft`\z~iBMmOkCIqy-66btjc(Zqehu߶:?M̃yʼnV.'zw4Զ7K$pЦN}4PQ @pXg>BmKpg#0&̭C9pT r14'&_ioHv-o푳z{S.Dۡ#W~`O3< endstream endobj 5 0 obj 2546 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 423.6809 283] /Rotate 0 >> endobj 6 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R /Cs2 8 0 R >> /Font << /TT3 11 0 R /TT4 12 0 R /TT1 9 0 R >> >> endobj 13 0 obj << /Length 14 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xwTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf endstream endobj 14 0 obj 2612 endobj 7 0 obj [ /ICCBased 13 0 R ] endobj 15 0 obj << /Length 16 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >> stream xU]hU>sg -?m 2VMIfS*tv6;df&O髠>Ƃ*6/ŒJ5 Z (}R;3dvA2Ý{woJ4~>9}JMiRFJ ƎoޥKg[c[кVc(ejD] <zo?9[)׀\@z`:ojԒ,;VlcgnFf'Lgjx𒡏0۴NcN{r6fr-ɚt%Po27^uNgqC$AZ<->ê9<2%+þCМd9zZ"{F?V|ȴ 숊 cy-..A/b?h/Cs&ԬcD,?rzxo9=k?RcU}y~xNt2ɥп7 X } p| htZ*%LX'R=fYAoP~קԀNց^_"ذ.M Bg3p4<F .h?c>1' k&%^?MOCuE|֝x2KQުY դ gyカ\= !F;AUm5 T LiVw7#NNma4f,T&4 endstream endobj 16 0 obj 1116 endobj 8 0 obj [ /ICCBased 15 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >> endobj 17 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 9 0 obj << /Type /Font /Subtype /TrueType /BaseFont /ALOXXB+HelveticaNeue /FontDescriptor 18 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 117 /Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 537 593 0 593 537 0 0 556 222 0 0 222 0 556 574 593 0 333 0 315 556 ] >> endobj 18 0 obj << /Type /FontDescriptor /FontName /ALOXXB+HelveticaNeue /Flags 32 /FontBBox [-951 -481 1987 1077] /ItalicAngle 0 /Ascent 952 /Descent -213 /CapHeight 712 /StemV 0 /Leading 28 /XHeight 620 /MaxWidth 2225 /FontFile2 19 0 R >> endobj 19 0 obj << /Length 20 0 R /Length1 4892 /Filter /FlateDecode >> stream xX[l3%QZ>DJԃ˥HDI4))he1vra'FGEFA"lGiK+1i(-P;?垻KF`|8wfg9sc^x[ DB玝'cBf_ mjD־g_>eƷ49"̾؆6xKf_;ډϟ=q?tK*;vnヒ/^p|QFHm I HVh7AaLt<2qOz?>/oY364k, t MƚWK =.O`JgÓ'7H+UwDoCTacb8( ?uK71pgBpN /mqY>U)@KiцNvCNRBE,s&Ex 9̕JarBD^ٍIhfr34#?-;-g-->ؔmeOiB8#夐_G+r u-w1z/faTeTJm@<`Џ $ԅCBS5D:vZ^r\S4D;7؞wi 5SRRMmJj6 dip 8w(*79_1>n2nդ* C0;mO8x`ԫǫ ݝ8Lx h3@X^A PqJ`b(:p6`279}pݦ;Cý6=͸my9d J=lyKz[To[zd4R|nˌtŴ>շkNXddbOR/ƖmO v7>ux5<Kn mC;ΞO; ސnvaIJϫ4ZHdyqkEkŹ Bv5kX\WqQ;} v@ g׀+[ šuhS9|9ݭ+:4Qәt7w&9Lyr\Ww2="%[N$'cy~q;㣣gh\Όhdz4 8\ޭ !@(,°> ^h4ذ Y+0 { h_6huBZY@88HP|FTp k{](paEѴDb#Qލ|m#y{SǑ0|2MLFcAq#+~"C/La:^/+Bۄ)EH}`'w`&Gx*gA3Z;cwɊYE3Z(?Ez35N-fr'gxseB[6ʅRFqdtEܚf5,6>~N`nP7Ӻ!Zk9[FFjuCA97IAj ߛm\Z.h7>L79.1|o#{v|"Db Yuk-cG;9k9-7e+&&*h}w[F龴 ʉQdQϕˮ#mw)rگ"@ìn;fCT/ȕMs+lF0[]ϜYӁe0vͰ)^Ⓧr`ԭyR]{y280ll|FLiw Bۍ,=EO>Oh72 rO+;z\ޙY8{q™Ǿ_L endstream endobj 20 0 obj 2545 endobj 12 0 obj << /Type /Font /Subtype /TrueType /BaseFont /KIPMRJ+Helvetica /FontDescriptor 21 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 119 /Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 0 0 556 556 0 556 0 222 0 0 0 833 556 556 0 0 333 500 278 0 500 722 ] >> endobj 21 0 obj << /Type /FontDescriptor /FontName /KIPMRJ+Helvetica /Flags 32 /FontBBox [-951 -481 1445 1122] /ItalicAngle 0 /Ascent 770 /Descent -230 /CapHeight 717 /StemV 0 /XHeight 627 /MaxWidth 1500 /FontFile2 22 0 R >> endobj 22 0 obj << /Length 23 0 R /Length1 9112 /Filter /FlateDecode >> stream xZyxSǵ?sw-%YvK,򾀱b/FMpb 6ƀㄼ@ ~iBXJ <:!tIHl4myG_ν2.kG>]3sf93gu{: m݋Awۺi0~cao+f3e,O'%VO@Ѷ(!tbF"M&`ѹDZ?qSv-ooHJmyG|zWIM'@whi?S:A$߻SmIw& :ANYX"qկ*3K1êcQh̎B-RDf#qh"a5&HwS'FO`%E`q*;Q >Ă $bn4ZP G*ir*N`EdN#r#Phc4^(9<8d^d#YGD'(Fh)C@tGO0WUʒka#cFcS䐣9R$1qGk̿{AQGev9v/][=Ns:["}auD=ROuW7NXzB`q֦cŎ@WlMc}'}UJjEK}H}H}r_]z:]Hfcv9%13tg@˾ lX|p?D ű`ς6 Ј2H>2߉7ygе]l#)zdֳj|jn؈!3\̴_O/`RI-8ӄ#di kȓd;EF5QRQj*f}ũb_O8vX kqty _۲/)#|^$GNR 9O"%'ԔʦzmaUMNKLa)v)km/X83PwB&qG969=0 Q'VRD'bE"yE/NtST;ޥhEOGy~B_aX&12L-<,g೟9 0oAv [eM#Bm=n-.qB8gЖcHj_߂$Da>h]Fī2-Z*@kxuM>,&NhYLϛIwmVٔj4u$Jxeh@NSZ#SS+=mv]F+.eW2T E7q%DIq$Ѻʡ<7"?y\Q2v<ͮȰ2ۍ\asg!p?!'EC#9TRֶ,LJ#VO(xG -4n lnw3a֜+zf"ϢQ[%mASnkPR[5.uj诊\)*ԌF6KonJH:.EM%u{u+Tz:"0i*Zeh9'k8SsJqۼ6D;gؼvcgHxjQψk܉-R_X8ᯙ0Pi mFXom[rKC Uބ*|k),ݺ3ō9m9W%HBil%BڮfQw=si9|]%h$#W3fi2gF M%Q9NH1Ynr\Usd+~W~W1 :& nf| /Ux3t,T)kh "bgLCS Zns3*5^eչu.Byqkn@>7*9.#<Bf)giz , >܀p#|ިm2s! M7p7 <un} ap8 ߸c^pxRbPIU0i29 CyʨC _&U}6r .h^?8@$nT$2"5rI%PCYFPF"y}}SE:4}MKG Q`-^G!11#D^f–X un;實E+x=̉$i$;d9Z,* Jʦk]Z>( Vg(Z, (ʊz- v%p~GrLTv:ab ا'K-d=Fڿ]bXzAlyyc)XX0mY2ɘ%%n0ܐ2;&Qn:LnbtcvD[.hբAX KY:}=LyTgugug$Iud9Ou;ґ;/O߷3d(ռNOvY?#[,>/[\ o#A}-Q~K+)cltUaX pNNצh ZS{m>DIs(LTF$iOV t*5$#Gz".NmB' :}W'/ 2feLȨ[L>aE3zkQLaQ Xw \Ԕu8LJiVPV;3,`02y',5 Ib@DuCFPCpdᙇ:/6pKsm9ߛlEIWt*ȸzͨb.avwa`jTxCxT_-0j^e-#O~jqQ%7!5ɧJQwQ>›cS> Z TGh l3Gׅ= {D\-<߱YcW\I޿'H_}H*hp@,}IjZJ)~A"Ri>%J85ke,mVZiU IYQK%d-H2MŚZvhF'KR+4ut.f*/13Чh)V97MLkNp`lA-rp9Jt yg\gZ}n E,qr|!,ЄрwJAQvuQblF4a\RoKcqqi\+qǥWKgz(J endstream endobj 23 0 obj 5792 endobj 11 0 obj << /Type /Font /Subtype /TrueType /BaseFont /RRKCFI+HelveticaNeue /FontDescriptor 24 0 R /ToUnicode 25 0 R /FirstChar 33 /LastChar 33 /Widths [ 577 ] >> endobj 25 0 obj << /Length 26 0 R /Filter /FlateDecode >> stream x]n {bKq¾!E"?XH0.YsRl|aux(o9 @.l&.rfdxׂ@>R@3 @3>cS-/\ tBkpyݳI/fA =P3S=!p#&J6:\ (TiuiY0#y鵪'fjשh⽒r6h-J1mpx endstream endobj 26 0 obj 223 endobj 24 0 obj << /Type /FontDescriptor /FontName /RRKCFI+HelveticaNeue /Flags 4 /FontBBox [-951 -481 1987 1077] /ItalicAngle 0 /Ascent 952 /Descent -213 /CapHeight 846 /StemV 0 /Leading 28 /XHeight 634 /MaxWidth 2225 /FontFile2 27 0 R >> endobj 27 0 obj << /Length 28 0 R /Length1 2228 /Filter /FlateDecode >> stream xVoT>v~ n6-5JelB#ݒ(Y4TZوEm[5H , JxH5延1V -9;s[+[.?wgUub-l²oI;H(T+y'G=V]^]sbosnF_.rũ~ X;r3Ń31}ImT% !)2;⟟_x/&}w7׿'C-iaہ>]k-ǽuIvԛdp %iQ2{\85@R"%Y'>ZfԎ pm > HF:US۴~ό: {R[Z!`L'Լ%gY7ռZ-[҈mƸjѬ[fe s+q}$[PnֆPKTKOoV-Xh6uk3h*p!t̢Z{"⚵iHL3r׈#:LH  6aFN4Y57btsAj a}pN,|o(,^N`(Y̸ &>E<'jap@iS;S/z[8-o-cs' ˷ݠԇ+wA)}gWd ‰b%^*`XU53t}q6N'OJ틼bADA˗P8;?5y(]|}J.Hbt▚yP? {<o,ML9篼|1Y,ݩ.Εߨ k endstream endobj 28 0 obj 1097 endobj 29 0 obj (stream-manager.graffle) endobj 30 0 obj (Mac OS X 10.13.6 Quartz PDFContext) endobj 31 0 obj (Dominik Charousset) endobj 32 0 obj (OmniGraffle 7.5) endobj 33 0 obj (D:20180827140233Z00'00') endobj 1 0 obj << /Title 29 0 R /Author 31 0 R /Producer 30 0 R /Creator 32 0 R /CreationDate 33 0 R /ModDate 33 0 R >> endobj xref 0 34 0000000000 65535 f 0000019014 00000 n 0000002662 00000 n 0000006962 00000 n 0000000022 00000 n 0000002642 00000 n 0000002781 00000 n 0000005649 00000 n 0000006926 00000 n 0000007095 00000 n 0000000000 00000 n 0000016871 00000 n 0000010367 00000 n 0000002913 00000 n 0000005628 00000 n 0000005685 00000 n 0000006905 00000 n 0000007045 00000 n 0000007470 00000 n 0000007711 00000 n 0000010346 00000 n 0000010743 00000 n 0000010968 00000 n 0000016850 00000 n 0000017359 00000 n 0000017040 00000 n 0000017339 00000 n 0000017599 00000 n 0000018786 00000 n 0000018807 00000 n 0000018848 00000 n 0000018901 00000 n 0000018938 00000 n 0000018972 00000 n trailer << /Size 34 /Root 17 0 R /Info 1 0 R /ID [ <6379b620e09ae40ad4d50502e0f37ce7> <6379b620e09ae40ad4d50502e0f37ce7> ] >> startxref 19134 %%EOF actor-framework-0.16.3/doc/pdf/stream-roles.pdf000066400000000000000000000254541341123343400213420ustar00rootroot00000000000000%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream xXMo$5WҴ?ʊF8X6 +I2 bWԸ{+|XgQ{.WJmR*5a۳G}i]Mla } 1G׺cŇ-/e%Ȉl!-.%1=TV0me!.+{|nP9/n;,09W11:?ZK5~iE$tŏ1obIhA]'>Tsԭ$2Բ$n$ ItKMˍ%8X ,[ & R5 k"~ jҢ'XXEE^IEzM"JEh&X.ښ%#}ҚH-wン4ԚeR1֛Ʋ8l]B[Эƶg\e u_s9# ۞Ɏ /YsKֈƍ |nO =~ǓUȞ;3K*%Ol̼1C.{<0P ,a[sr+kԜm0dɹۜҎm[`g}9izo%yڻ OcP̛W{IbmzVi=ZPZ2EZ^|̽,p{Y!~` 5Ym</FI2sj/&8ro\ͽ4X;|EdS/˶y࿾GӸO X]~?oeY R퍉E@{3RXRf5DEGԜ(D*ڜQQB"PI(J*] *JO;ØH 39qb" ^lDIHgD*nR1@$Y"&R5*B^]ɚ 6J ƚHp2f&nD5L$ &DOD5gdi3ZsԚD6jz'@ &rG&=/v@ * MfLHJ0D6&DL+!ġ7PYx+xyM+d AL[:2V䕩4Rؠ"PHІ&-'8,ks" p3jÝ<5\H)Gl LYNpoo>*s(,(}nHNjj r]:,@,S% 2JψeG$g-G>jhoaT%}%tDo+'5,8NeDo7e,OG<@@.,{sX@%Z92R'YfK+BRJkjU*N~(Sn y,:NgsjM& 0,]?/.f1aTw[掠 ZO:"6xJblk~Fzhw ,C\ә5Yਣ?L Ί'oO/>HeD 8~i42'z';$> `He}4 mdXNnb\L^3$yΐFZQqSKX6'$B"v^5HtY0׊Q 1[4D~\~d0,Og~ 4ɵ%3 BW_w@Bmw:yvrړ OOB~'!g'ϟr=6emҮg)󮍗uKr'brRGrb`tlhNŰ^Ի) (9lWq~> 98Z7j TEfp[1,Z> endobj 6 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R /Cs2 8 0 R >> /Font << /TT1 9 0 R >> >> endobj 10 0 obj << /Length 11 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xwTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf endstream endobj 11 0 obj 2612 endobj 7 0 obj [ /ICCBased 10 0 R ] endobj 12 0 obj << /Length 13 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >> stream xU]hU>sg -?m 2VMIfS*tv6;df&O髠>Ƃ*6/ŒJ5 Z (}R;3dvA2Ý{woJ4~>9}JMiRFJ ƎoޥKg[c[кVc(ejD] <zo?9[)׀\@z`:ojԒ,;VlcgnFf'Lgjx𒡏0۴NcN{r6fr-ɚt%Po27^uNgqC$AZ<->ê9<2%+þCМd9zZ"{F?V|ȴ 숊 cy-..A/b?h/Cs&ԬcD,?rzxo9=k?RcU}y~xNt2ɥп7 X } p| htZ*%LX'R=fYAoP~קԀNց^_"ذ.M Bg3p4<F .h?c>1' k&%^?MOCuE|֝x2KQުY դ gyカ\= !F;AUm5 T LiVw7#NNma4f,T&4 endstream endobj 13 0 obj 1116 endobj 8 0 obj [ /ICCBased 12 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >> endobj 14 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 9 0 obj << /Type /Font /Subtype /TrueType /BaseFont /RJCDHA+HelveticaNeue /FontDescriptor 15 0 R /Encoding /MacRomanEncoding /FirstChar 97 /LastChar 117 /Widths [ 537 0 537 0 537 0 574 0 222 0 519 0 0 556 574 0 0 333 500 315 556 ] >> endobj 15 0 obj << /Type /FontDescriptor /FontName /RJCDHA+HelveticaNeue /Flags 32 /FontBBox [-951 -481 1987 1077] /ItalicAngle 0 /Ascent 952 /Descent -213 /CapHeight 711 /StemV 0 /Leading 28 /XHeight 625 /MaxWidth 2225 /FontFile2 16 0 R >> endobj 16 0 obj << /Length 17 0 R /Length1 4620 /Filter /FlateDecode >> stream xXol[W?o%vNǵرqZ;Ke]6Me&moiPJ6L}@:>5wsBs{;9go>ujdڹ>4.lF}5׈̑g}[#jo21>E8ѷ ''[}>/i:Z|?9ӛz$aYEc ItZhA`_?L&*{I&a]9pB4.<7d{˜AAT5L>Iq騑sa&+ `oĝwa5brg<@nSP;$܎/Ԩecߨحj% kMǏ탪,ϔ tx1).n*jUޒOmɳmsPoqc}\Wb׫q1 =xӷņP&&Y )Ty}.^Eז*J^Z,kRX,7lfk 톖G*[[B'z[)b"PkI8!$j*Z'j 0 Ȯ-Jmx̱Cmq~er 0bk ѺI4W1tXPH-BV$bPm XĀbPj)#)>KNWn/w1#pC%qaO):) Fnfms ,0 < <\+3z_Q*NT# z5AVM?INA;_ t8Lx eYv 9lvC85#!tHR$( /B:2,ִijgD ZU(TgF |`ʌ&Ԃ).ٛN;-. O <[{JX]ɪ 6#>ufL<0W9ֵ͏'$o u`,tm:<>5nנn{]vDN#'TzfȄ 9f!>Dއy"C}"p x tl-|ӡt;Шwu"k 1ҩ^%4z|jphӝ$Gākxa}||u6qbr)9Vh >—uj 3&0A.a vN= PIĄ.LB̠F bp`LɊñA=^= e9v>V nƾ]cG˙L*lt0qS?QGNNLTtlDh~^G.$tPMfqxuM p@|oM 7+;@#  NzjAv)^eC- r$]:Q$ե&O> ~i Vu=b{K}H;x30x˥x̕{2L-G,HNuH8CbFs쎍SϪ萜U3e$+x1 ɫ O;}H ^d&Wɍ*۠u\ڠ - Z ֑R:3֓66߻}?^"pS5L; pXWR 1ԃ= }g).a-,J3[n~Dܓ.;+|{UW5(NXH)!#,( ]^.WwF6KGu9غ2Gpw'_Zy`gg/QBGUN l]u:} EncS,W SNJ2Tj>d|4:2_)\yd"~`#GgN:iZv#CzZi|e4;f~X3 qvQdYZRgT8 F5PQ j`TF50Q j`T: CDOzmT, !}0mL 80t8Ud wroeS$ɑ!qE|cjj~-ȁhwW 'Ҟ^g_ũ%] rC˯xVw<9.V 'eC+j>؉42,37̌ TWZBMjpeRH*3ag_4OqO˂, 0X_Gu,֡ێKQ{a#(*TŽS$UҷA(#$>K;D)k vlG(}#N[ߢ!s@0_@tQk)7Ϭ>_?s$D endstream endobj 17 0 obj 2753 endobj 18 0 obj (concept.graffle) endobj 19 0 obj (Mac OS X 10.12.3 Quartz PDFContext) endobj 20 0 obj (Dominik Charousset) endobj 21 0 obj (OmniGraffle 7.3) endobj 22 0 obj (D:20170407140035Z00'00') endobj 1 0 obj << /Title 18 0 R /Author 20 0 R /Producer 19 0 R /Creator 21 0 R /CreationDate 22 0 R /ModDate 22 0 R >> endobj xref 0 23 0000000000 65535 f 0000010314 00000 n 0000002364 00000 n 0000006635 00000 n 0000000022 00000 n 0000002344 00000 n 0000002478 00000 n 0000005322 00000 n 0000006599 00000 n 0000006768 00000 n 0000002586 00000 n 0000005301 00000 n 0000005358 00000 n 0000006578 00000 n 0000006718 00000 n 0000007009 00000 n 0000007250 00000 n 0000010093 00000 n 0000010114 00000 n 0000010148 00000 n 0000010201 00000 n 0000010238 00000 n 0000010272 00000 n trailer << /Size 23 /Root 14 0 R /Info 1 0 R /ID [ <4115ac4f21331c49a91d4764b7d849d6> <4115ac4f21331c49a91d4764b7d849d6> ] >> startxref 10434 %%EOF actor-framework-0.16.3/doc/pdf/stream.pdf000066400000000000000000000303201341123343400202040ustar00rootroot00000000000000%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream xYn7+x3s\|3$ $,*0Tuj-L{Y,2ݎ&o}~ξwͻ.eh/avsyi9'i! m/%7)^v 'F|oN70bƘa%?H?B2a1G'?\[~FP\ !#MQ"^env< '4ApӈQ%8ܬ25UcynfP3lLކq:?O e= }_s]dEϋE%.S8:i ^<͓(0yUof}T'W7yzt4Q|KY~48V1o,InM;Feu1a jE?sIFLC2]X4պizP^ 1<"@|as[2,x\EAo#k?0ubP`g]*߹Ubp6!% *܏a0_MpO#$F&];eTu|nb ^kն&z}D ON,"jM4K!XH&4Pj82!!b b*WI!_fWI=O|X7wuo\]Ů>Wݧ[ۅ_ ="4$AxK'Α琄x@R㈣kCR)ِTC Im#$Fgh1: Fd}- Xzj29 $0iy\,Ơc*Iz ^UI*-AηURIj&!ᴕثVqi{cVT#DI*,UJ1nz̓Ur h+vHRy*JLR IEH4J*mCR$K[߬7I#Uo% JIW8z@9݁ ܋)e =qe9j@pِTJ$5ㅏU : ɬt/#)H*I5lHMqT>֑TNHjlH^}9ّԌSIJ$Tfh#9H*%[rⓐT%D8$8}_ѺxׅUB)}v۟oْT_&dSċNA򌗓FRs\40gO$TIjaiĘ3P!1*7m$,7*I\%GV=FR#/6$T9m%xHRҔVUfJ5>f{9:R(dB{q(-MmF$S%Ԅw f4R΁ MHv:mijȭZ 4'ZozWB\;GS#'yLSM5hەz{*^[0чl_\; y.<2h6yĄ!c{s[%.,(?1T-]`͠J>CCr]h:c,c("xpC)]@ѿ+@4{h[87ό qypύs{zӝmZ/majACW~4T?> endobj 6 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R /Cs2 8 0 R >> /Font << /TT1 9 0 R >> >> endobj 10 0 obj << /Length 11 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xwTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf endstream endobj 11 0 obj 2612 endobj 7 0 obj [ /ICCBased 10 0 R ] endobj 12 0 obj << /Length 13 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >> stream xU]hU>sg -?m 2VMIfS*tv6;df&O髠>Ƃ*6/ŒJ5 Z (}R;3dvA2Ý{woJ4~>9}JMiRFJ ƎoޥKg[c[кVc(ejD] <zo?9[)׀\@z`:ojԒ,;VlcgnFf'Lgjx𒡏0۴NcN{r6fr-ɚt%Po27^uNgqC$AZ<->ê9<2%+þCМd9zZ"{F?V|ȴ 숊 cy-..A/b?h/Cs&ԬcD,?rzxo9=k?RcU}y~xNt2ɥп7 X } p| htZ*%LX'R=fYAoP~קԀNց^_"ذ.M Bg3p4<F .h?c>1' k&%^?MOCuE|֝x2KQުY դ gyカ\= !F;AUm5 T LiVw7#NNma4f,T&4 endstream endobj 13 0 obj 1116 endobj 8 0 obj [ /ICCBased 12 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 612 792] /Count 1 /Kids [ 2 0 R ] >> endobj 14 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 9 0 obj << /Type /Font /Subtype /TrueType /BaseFont /WUDMKZ+HelveticaNeue /FontDescriptor 15 0 R /Encoding /MacRomanEncoding /FirstChar 32 /LastChar 223 /Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 648 685 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 537 593 0 593 537 0 574 556 0 0 0 0 853 556 574 593 0 333 500 315 556 0 758 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 518 ] >> endobj 15 0 obj << /Type /FontDescriptor /FontName /WUDMKZ+HelveticaNeue /Flags 32 /FontBBox [-951 -481 1987 1077] /ItalicAngle 0 /Ascent 952 /Descent -213 /CapHeight 711 /StemV 0 /Leading 28 /XHeight 625 /MaxWidth 2225 /FontFile2 16 0 R >> endobj 16 0 obj << /Length 17 0 R /Length1 7020 /Filter /FlateDecode >> stream xY}l[u"oR!~ImQʵc3&ˎ?]&X+,chZ/c[lEAWV[vV غ-u`IVt5yd'+. #uxϽ=w9iZg6vXʍKO1caͨSnӏ]{'O6/]ghƍͧGh<+q_tc]Z@;??A>ޛѮ~9Z{Y3Ae`cX/dsc.H/v԰[}ϖ7t-= =,1oJRxv;wqY `tGn [ &09*NNϡͱ ufqoO3:.7 Fd Cx#Be 3n72~͈Ȭt];s0' ($ Qೄ|FXQ/d5ƏS]s|Ӽm ZE*3F+)o!W@f'b]LԽQ](,{ ɤF(hP 4``z7!],qY],r{Mn߯ fO1sm:x+g衈d)B(':)pX K˓_{FW?tO\ O/ݯ&d2H=Lf9$ !4{@yΏA`dRAˠ:Ћ۠/^ 4a*3 4doˠ:Ћ۠/^ !n2/Vrx)/ ]iA1,ȊoϘ2`@^"/V3xN|<@f0.@(dPE0`1P j6@O3 "{ #O2$&Y 4 :: 4H] `^ @Z.+ t}XJXbJ, sʡČ&eN:_r{)A䔲VUҼG%MaJ&Ʊ7,^@BE-XGVA!x qa|'*+#TvɊ|gX0<5+q!2\{|꟔'F F>tyzX[]Ow16l1AKyU-dZԪa55K4yCEH&y $䁐<B@p^A{-P!y DD2WE; 2G)ɤJjP{oF5F|hHHG#^~o+jʃK{)=_x)9S!fWnkKXMqJt{dzG/+eƋR9lqG}/*E%p(ŗH5[ŏrWCP (RQ 5v0 fw!%Z]1<,%ux=i1)RJSZK,}(Pqe:d#GsIQ2kȢ:2wX."503>28RDEU^3>2p#*9UoSư1,2MOVGCͩ뷃 TfpQ$,R(Kj9gaR*C$ 4Iyͭ| :OoL #̨#3KÑܯR>SkZ*!6Auu<rw4Tx EKoM$:Cp88Tzhs`HL %Ajthl6m8p:th?P= ŒgQsh!enucn AŢ|/y<$;SwVha_!KTDI@&Ԓ ~E`=<$& i-@'G9@T(* 0W> endobj xref 0 23 0000000000 65535 f 0000011758 00000 n 0000002347 00000 n 0000006618 00000 n 0000000022 00000 n 0000002327 00000 n 0000002461 00000 n 0000005305 00000 n 0000006582 00000 n 0000006751 00000 n 0000002569 00000 n 0000005284 00000 n 0000005341 00000 n 0000006561 00000 n 0000006701 00000 n 0000007350 00000 n 0000007591 00000 n 0000011537 00000 n 0000011558 00000 n 0000011592 00000 n 0000011645 00000 n 0000011682 00000 n 0000011716 00000 n trailer << /Size 23 /Root 14 0 R /Info 1 0 R /ID [ ] >> startxref 11878 %%EOF actor-framework-0.16.3/doc/png/000077500000000000000000000000001341123343400162335ustar00rootroot00000000000000actor-framework-0.16.3/doc/png/announce_proxy_instance.png000066400000000000000000006362731341123343400237150ustar00rootroot00000000000000PNG  IHDR )sRGB pHYs.#.#x?viTXtXML:com.adobe.xmp 5 2 1 2@IDATx|Eq $)^CEAҤbXzv8 MwChBH$dM6awygh4z       Ld#30        _9@@@@@@@@ `Z_FG@@@@@@@@@@@@@@@ `Z_FG@@@@@@@@@@@@@@@ `Z_FG@@@@@@@@@@@@@@@ `Z_FG@@@@@@@@@@@@@@@ `Z_FG@@@@@@@'ٻs߂Ǎǫs#1;-@@@@@@@@l4MN[[1[ |6Vy:"       Y \^fLLr+98Ts4#~UavOّf        Pe'hgeG*[ PGN 8AO@vBI@@@@@@@)`]~y?5()((HOOK ='ajWMn;eZI       '`M}vi3iZzo]}=VRX v3llld        X@m`$JMܰIOw,        % Qv?I~cKj@@@@@@@,N*b0H       '`on3nܳ)奥%'΍<=d@W)MJvɾiiDػ6 BCwmˌʹ))q h<^;ٞJ@@@@@@@Ꚁe'_>b'!kgܪMh ؿ3}d .~xi"`ºmD?8Ѣkjt:y6(cT!       `24 bHUݽ:u*kG̼S7bٓ{^T[@@@@@@@0qBܑ-E^(A۩eMIaA֍X^kkQN~W!HpE1}^=gܱ[R.H@@@@@@@FNvN8eTnM;휜dQvO :TmpuZ^$82K mwffhcw;A6Y7:~x~jqjبEwGハ$mͳ'LvQ       uG,r"A -Lh=~2Cj/E^R[S}0MDѧ[֟}ԫge{5h4?& >rwnM*LX?E=O?⸇f?`jmٲXqfiyDg@feb烴K7w2B؃{Kd@@@@@@@:"`v ½ #\5[=vr#wlE5޳0+SִWzJ#[6ۃWafFSH       @0]yi秥$';oW02'!nQhoASKքoX ׯ8!ѲX ٥a6h M~ŷW_@@@@@@@0yv{e)+lʥ?jJ>3ovNN:Er@1㯮_8͊#ft;*)4Dwk"EY4ػhdDGnU@@@@@@@O " >rC O:F1[㴛~NGzY0Y~2l vw)bi@'Y4>Eߘ       X-ɽeߩ sRFqj%+n\'cmޢut_KM6yyr @@@@@@@0թk%wFD8XAe ih{ YھH쿸 bFyݴd\0+ f        `MumԾSڢ8-HYWe k8Km0;+zVLc(H/mYGr(7Yj[`s#[ @@@@@@@0qJQfv8AِmaN~qϾmbFj/{g65        P9 *r@=!bo3 {;AANI c@@@@@@@0,` &yzi_Z5jPwoWAF}3oT钝OP/› +KB       @0?chزsyC nW"PzCc]}U } 2ңvmE\;Cꕔh%@@@@@@@R/?UPqJqCavvĖ ìe\jˌ 22?x[^j1f,        PG+;Ҫ/3&R7oe|Y,3hs q|8?^OO<<[Wf/FK d *kS$ dQ^Jlnl        PwPt MNLz q)BS.Ot2Y7p;A @@@@@@@;6Ԛm^uν52ڀٗʺv>ZSw٧7)bka8շ{h5{Kk#w3Ol5=yq~~ IΜK^>3?S!@@@@@@@@iv5cO$^+fg:uyZS^|~/q~D'ۦ*).1oVj6vtoX).ҽdc;~͖f#FSF@@@@@@@nq~^M3gd|jk{n@Tvk0A_cٍ^:d&6~ \       ۟ͭY=ve+r9~~$T~ѩ5UeΣԗY6ޫJ.qga@@@@@@@z?v3OMNYc&))ɌN u=յ_Onn hElݘ|4f|~z?iAM;:חz@@@@@@@ꎀd'dDGѺD߀!uAR@@@@@@@VPS4K&xuFjBM2        +]=!c@@@@@@@VD-gi^V       R3O.\RGt__ @@@@@@@@ h4;*=/5򥾽;7L<{*ۯϞԎc@Hw        Bzc̻= eP       w=yY @@@@@@@@';}sl;j@@@@@@@FK O}8墼-[{vݹ[-e@@@@@@@:%` u X@@@@@@@,]zNv'@@@@@@@Vɲ.@@@@@@@Esy@@@@@@@k ;Z,B@@@@@@@\N0'<@@@@@@@Vɲ.@@@@@@@Esy@@@@@@@k ;Z,B@@@@@@@\N0'<@@@@@@@Vj.LSRrȁGrr 23]]|x7vm7`h>mlhǦ],nZ ef\2@@@@@@@@Re|odc~)|㺜8{z76=pK{PQn:/2ɽ,fjb@@@@@@@@e|g 3N]cOKi`d3A("       @T:;!_???7fgcgg99t+Hof'Ls ,|z8f|@@@@@@@@NvÊ=O-Nm{u镟~ݲ7&%bmCi+#WSll<;viت֮tF63p#3tN&N04@@@@@@@/P1cEܺGu9{x6ynsIsoFnѢ99 _/^S/_TwǶNWk;RSY5k\|}ӧOoѢEeG= +>;f P}o +>;f P}o';]~?('[e~Sԏ|ѱE'WEϿ֨$mȁx$2U*c#f0jk׮;wnVgO4h`ӦM3I2@L$`@"x$@L$`@"xdY4t\IIq'rKj&A6 +src #5.pQ PF6SWV@dE HS5C#sW^yE:*+`ehx4,"`XA>\Ex5jn*Am}6s,`]~[Q /Mx^Ĉϗw;_0n9f~W(_zŽ{ 63f(ڨW&zQ#eL- >jԨŋԷc|J n[qu\#P֦6B@}P Fv >x/zp@ PAs:zP12n~n>6޽-9٥zJ#Xse?+ P[^j,+ @DߕWoi0,u\@}S:BBBj{}Œ1{ӗ6 P˫ν[w+\ kRd3ߡ! ږYѲㅕ_ڢHƲM=Y7{wG\M KMqrlhllJ7xP;BCwmˌʹ/V-y:v6+?=-7)Q@E1?-ULL[o p@WoW^چjJ ??_ƲL$P]y&"P>5,,Z(Z@ }j\)X2,P]y<=n@PԸ,e"p{+6N[[@ ~\:5흝{/^|?Dغq{%۹,_el^d{CyU&UGz53&Ra?t/{v<@F$"\aɏeD]ӿZ}c3ԄI<{rsr+J@@@@@@@^cT&}oT!vhԴ@S'Ԣ)f% ɹMy:b,Wwpy G@@@@@@@*8!ּ&}׈E~b-J8}CWY'&$_^w6Әf yruO gO₂H߇Q YIt!kdu㇋]dSFg=8wGハ9mSy)5j^4L.ػ 33rm\'@@@@@@@@*NlWYo81QbÖEҀ6qNhNkzhL3mSſu?E;GG1x5klxdio:~VRv64|eKCEs3a;S/_֋.{~xғ2D~82;'z       X@kE6W+] bljgOիkk˻E;G{-y5z\YW~}YvʬIv kc{ٱ'e1e@@@@@@@ PAvB~ZC-V9vj7uv™vMڻȢ~~[?5ib_=tg62xLu2&@@@@@@@@.:A|_*8Pvk}uœlXqzd3+6:36̭m4|uavK -쒬Ξ4d vPh3q5+5} @@@@@@@r/VRXXOS.U-V9ΎulkroQ-xl pC$t BC%f-R._EÁkQnMƭ;r@@@@@@@K ;A ܒ?hX׬|PGLڱI))(%l|f#zu6q^JzE쾝? $䧥ߘ       XܛRW۳o28bw?=à.%9U8VKM֩Z8/j       % Tд@uUdXX|qo>բb0pq.rמzž4KNMu2YYjqqA~@@@@@@@d߾%]?0'Ԗ_V&~١ RK.^=yIrc=}WLi=ϡ~}UGjV&2K12v lndK!       `e'c\I"=|:+?{ll@mYOK g{mQ;% >߆,Zqj)/٥ĩj 1        T`⢳=/-^D57H 9jn7u] 99 Ξ^~E        P@ [yOsίXT*8KoRo־/7٣?$L$_8W\PeK`|vBqa     / *]h/Q   (PbIz|T.uȫ=;mUmEjqiGwq}4&ƒ$L~ۯ]J 2c=Z Q59i˃>m&Nʘ{9.uA3W]~jZxXeEf-ZOl[;@ꔀal>j܀zuӌ" +pO%9%^ ^ʣoz>J&MuQD@,Hb Ϟ0idP@oI# 2d'!>E 4jA?˸w  CոņXfdQ^,ꃈW abNt  V) 7cbQ @ߦ=S j3mcϣݩ@,Qҏ5@?5Ag-%!_}Gs˗\ XQ b=}_~û-'& ^=w7 -x\쵐}#V6spsvkc_Yc@ ǿ>1pne-!JMnw Fz[ty:mœ}?byo0w,wcY>))dB[qp>N1k&GӘ6 X@nR8B'ϴ@0Rx_GVV{q~}aV$_@uמ+)2y^~:!Z&E@@ϗy=f?VGq/w%rq.Ήˎo{JfZbYcK ~YCHQO|>r{Qbgy B*ۯJ ~5@.Eeokyslj2S._H:wԧ聾]ݝ|FGu'yIn͒Νy%Ο9# `@v|ܩKml㽠'#x(^'Lxi.;qo;~HmL  dqaf{V~ٰE+YӰekj1GS.'c{ɖ  {v=s{~O`?6]~bWcM#e]qxR)?8T^:c2S\M\وeMYQA_+g١?l ^>]|FSrSJ9@,U@$弰 _mωc[7&͹+647ոFެŔ3c.g]wutadwKl&r7nиg Ojh7Μ@@@,y-Rh3i}8Ul({_J4[ @GToqPoypQnNmA@@oKwUmKFSRTdPa@=ī& 6Q;kW (9 U# O%Er810^b4Tb@@@"2#y;Q-Kɡ!j@KȾ+*dK7NPA@@"H(sNMЙ-.p~ub Xf\_ïh; srߠ1D@6 4jQU֏C=6T" `b;CubEX^,geOx괌=wdfg |IJթ?AX#?' b:~DMg[;#[FRl"Yy ߚ`dlNӭ 9 5F4AXY=&/eXQZdUKm #Zڦ?AS?8a#ڥܱVYClCԔ VJE^Bnb~jӰ"5 %#TQVk[)6`bz- k&`ҥ#Xu,:QKV-U8,Ÿ^~DonODU?O~ZpKz ?AX Ԧ?m{Y4Z,)4uBw] @OK 9<`up苀 &Ԓ@Iaz';cuKccce{5RcK_(5 \@}jjl6~z̼(56i3=)>55 ,=PƖ.9uQj,̧mE#yKuQjl6eDElޭs͎NCMuZYX}jj\aͧ(56Vs&ԸҽԧƵ6SH]6(5 XӍ]ٱwzlp{G^?_RkԧU:Rcsg.J< kY@}jj\0EX#RZCRѢ_|($.cvZI 5 4P튊 soqæwOwQ  ewe<'- F.8?OmMvA  XFz}ڝ\H'5ݴ;~K}@b GE9'?|G @@K ;Rշ|DvڑU@@P޵{97% 'm{׿V!F@76vrW~)#&J @@ ;"uNҵ- iF3z[-#  X@έt}:sް<?xZO @h>rLs5E Ǐ"  `d'XcI::4pk˺+cAI`   9 C¦%'y::Za]]De@ꠀOӣEb@@Њ\}|ӳ2 ?alozd]\`D, @@n<bf#]YÖJb@FߞO 9]Nf#ȥyuz@0OԕYl$eDE7oYmwqE@@@ e LG]-" PYj{;?ȍw{/nEb@@85ϰݴ?ˌ 22ϞZ/c@@@ H #r¶n%5A XlIAʖ+M Q[4V  `Țg(tj%Wxe2./uϫ6G3@@@,I/y_z6#~0KZsE@Jm۫PĐomf:=%@@LN0QGarѻ&y⚬TS,5{D @@@,E /5EPζ3/tG؄gKůFe:"  `1K&iM =9vz|E]uq~F$+}zw~RYO   `a 6 #]dG#o# @woitɈ6ll>as:8{MY$@@,EKyR<ϻa>yEo\|s۳o&~7Ϟqh-W.*piX/mC   `7˩,t{!ߞ gW/ '[~zuݥwiW=xyJMIl){j 1  `d'XcIzu<%\3F/>!z#nܣ^=    x0+&@0@߈غ1;'K ` @@@\@lUm3dz Ԃ{`{{wnogշf m1z\E@YԹ3uѤg/MꕋYcro6iެeÖϘӭGCa uXIEux,@D9yY A}.=w'KI/׆myjѦ_qP/ƾFJC@@LN0SݥEKkG@@@@#УUwJ@@n pC|@@@@@@@ ;       uS섺Y5       '@vBYs'@@@@@@@ uj@@@@@@@jOڳN       Msg       Ԟ g͝@@@@@@@d'Ϊ@@@@@@@=jϚ;!       P7NϝU#       P{d'Ԟ5wB@@@@@@@n P7;F@@@@@@@N=k       @h4us55kքw#G! `Zsԩp[nݳgO ]HyfXJ=ORTy 'c32f7h9 1fn&      5&]cc5PZZҥKֽԙ؃:#;A*իWkBU      #cɎ7СC&׎͛ 5 V(ջOl[vaƍ/p, @@@@@yƒ@ulә        @d'THD@@@@@@@ 3       T(@vBD4@@@@@@@@j P->:#       @d'THD@@@@@@@ 3       T(@vBD4@@@@@@@@j P->:#       @d'THD@@@@@@@ 3       T(@vBD4@@@@@@@@j P->:#       @ eKg%^L-,oעi`[fm| kG@@S8p 44TgTRD@@ ;gx_W_u=ӫ_['Li6b-Y#e D]=gϝ]1k[6/   @ t:J   `qd'X#K| 7WO#睟~-L/~SOgU@ _ _߲5xjW7     uD u7USt֕wn}pjAV% )sm^9TQa?x^"AV      :d'耘i}ДVu~yäŅj%1 ؈ 4mnވd@@@@@ ;Aa7ϞP''bgaSv.SǏ-z] @0R`ǯ_ cdcى6|ZC     H{wfe51f􊵎 hk]\\y'KN֟c&47Pv$@@@^nߦi`ۉs^hѮ{Fl~⵻g<@@@@@`?)/^]VҳC Sd|v]iE"@*r$=N.xoQmץ_v}O|_x=fXT~^@@@@@@g iJ,/α|=Q;6kGlPg,TA@ڠgc Va]rs_mpJ]ّ3SGUPǧI+5۸M3Ӓħy^My54Mb|tzrBFZkFMR3&E:4nboP?un pXpk7#/}{b+û^pBKZwSI@@(((kذV-'''---++յlU333Űyyy#; 0777;;[nnnbc @@@|e_Bavv[I 'y"n=aJgRGHs{;ZX 89 wлoߵzI?뿣Cu>D/+_Vp̧{Q-nd.X|}/))os;=1hUߋi jg'.emPk&Y|Г s4DFcFNvϜJo;V>-#Y- 9M?fvKg%ԫ_M.} 4rpwN(F\>wӷ?OGlwBֈ^/f߆@@ pEl"9.\N4h~v\| 3+ С3g#v&ĈܤIڢIdhh#GĞ"'@ջwK {\\\y o155u޽:(ve!!!wygvD#5   `Y5ݺ6K6R-oװu"wl.)%e A?/8 }*L_f*-z| E|޼ggv쏄񋹏vߞRJog6ֈhe"KԄ Ie (+ЙXQ |'fx5떌1 6錦s2.Vk1+E*Hrء?H% lY}l]FIl_I   * >M?u~j7n[/mL$֮]+v0]s"gBԏ/]$5v9{?hX@ jժ2SPm۶},d   X f@+ Ξ3]e̘26* T%GF\P+/yƴԶٽq_2Ӆ58D &M.kD*OuQjjM>>~ڼ!i e6۲O>ދw˼)*ŧj⸊_*>6hel?=oB:oZ/6E;A4p߂Ad!cfٻ(I(1!mHrzwYzg/YT@Bz'G0lM3;%*RLlRvȫ-4[&>w; 4\lџ2B_  u_@$IyYY٪UoOJ78{lU]f`*6X\xbYA7Ye/ YA@@d';XV\|nC:wr]kRyONsoYo&kk"L擗,TPa ?~a֕ƭ/e2E2NEVf,!דA4"<~cqQa5Ta_Fz%eɼ/8>{6?C"?Zd7:oDwwOuT68`}5GF&nIQaihd9 B@@~?JOO߶_ XhJ:d!.{҅d/[0@9ظqca,\,YDr_+ ʺaD"$A@@d';XvʞQ-wPSut~S{-˳gss~nyL^bW#n `xT̰5xl`Rso jyհ/ooԙ3trOoF@@%^ ! }Ѿfqg*$n?!:u̙3z衻{„ Zw';y&.A[p~GEEi.4ʚ{ќ:uӧ5A:B@@UAζ~ͫ(+S=`HW섂 Kyؙ}zWi&n{_ou,i.p&bpȵ+?ү/ʶ5Ϝ<,pu6-˳d2== k_K?:N,eawĀPL90\sbÊy>+J?sB9T LyG^S?޿q:ws{^LSMz^-ιx_-yB}_oE)y/qPh٦s˘9v a̺v8‚\}#lj   Pڵk'ټ2 aڵʡRxI`aM BALmhGG $AkP⦂d'H}uPcQGL.] 8/SSSe{;uķnݪՅо}6kG~鑑i&IePס  N&`N'vNa8}B~qYA}Hٜq7IM%OѿKDdD F{RP"P-jɣIYEK&5AOyW˗~Gjhrؾ=[ް] /em;Wu}ӆeONMvww 6.[#~>Ӏc൏3 ۏ ߿1rϟ{6d{+%{E%⾧?0?gJbzAS5I HdͩKvn^ am#W~" DrGxkVOG@@{DDD >\ tرdG6BvAtUק$$$:T uDfر%aJ#ɲUr7o.:Z AII ?~*u(   PwiQ[WtV-\`O?h0>kjy^.?"w+o(FOf?|Pc`W}^>u7{:=^sꈩ,KT+8 Rs=;|7U4_Ȃ ,~ igOޭ#ʾ&h:l#KOںJtL$iuځd_L<mXv9y񣟮. pWT.d-a|M\vx=<<5qӡOOظT4a਩XF&#کa<,"vs9  %}un:йsg3336t}_,))ܧG9(..V*gggʡ  Mf IFR_у$K/A9  N&peA6'LGv\rkV]dO}" /T0|Ϯ,ѯĚ4 1)/m4ky.Veؤeu4L3*;}uDʲ-߱`Mܑ579`#7k)gMqVm:K7:v4>nx9'G}mO\#{,szhϖVm:ї%lhVJ8+zcoJDžJR`"Iw=-4Ac MPJKO%%izM5>#,&v$*M9swyC}fPR[_@@j"ЪU+ӛFɺ, {+hNk";M={/kݺlN֭:bAddaG ͛7ӧU[?H&)OOOYbŚ69D@@ ;KS]~L=+Mea"R0?-,`pM{ʩj:X|ZNu䑽_;]TGuڼuꠔP 54_HfRr(E胦_V5wVwkw#=pITtY\r/9y8U tJвR8N]h=2w}E|×x1GOiu$0TVPWKP1NR* 2饴T}H$(1Oʲf>D$)Dl _}PS@@@' ;D߰ ;Zk@iAzV>CV \HOMڹArdyu l<"k:/݅6oj"RG`lxXC iyLgڙ7/61HgPe6{r+_4h -)G~Ee˒߾~wԗd gi7.Ug'upuu?bZ9*.~eM<2HL N@@L%mV&  `$ JF-ڶm# /}|˖-[,(,).kHHvI\cppraAE OD@@z-@vBݽ}>zmoBv9*MW.wRU(kW+j5VᢚuBlPp3}\ mRCI^(uf"YJK#93,WPKz4Lg*OӐu QۻH5Ք?r ?/5Af>T->8 w20e¶khk恺_@ij4XRR\jxI&inebC௨lU0vcÖgO4'M9f f=r|4h"u0 (.3~x$KoV/!  @ylll^4N6ؿܹs?e45+=44n_y*d'T@@iii=]P푓Pm:_V!;8n8rOWݻiFS<{ģ/W孟VV4hP g~L..O\]h4})$|,Ӹ҈Bu^;---⽧ OL)u欻쒠 ֝Cٮ4~޺3NF  АjWi6mZDD%iƒdɒӧOUrP_/ c0 Bӂ;jH8D@p*yzcSʺsZ~%9sSSEΩduMNPkX(/_VVhپm;ͮ f_AaAOcecoԠvgK.#.G^eأlRcxҠ_=P Jy3'WڦӸ N(9+雏7bƳܭ(ex LnΫ ^zԇ$֡ǀkm"ц^m;ޗA#{4@@p@iii;~=Vc&M8rsႵK^Z2<==M#1"::0n8x%ؤo馿[aOYaN 34-x2~/Eyad]hZwSd' VyέԩѲGXaJc Xy_Q0v>UGY/{}*_U-c:iHSA~Ok4s&bԖhzyt *N8sR  `nja6ܧ}+vO߾}%;ԩS.|}, 㔝Mu۵k׶m[}ܚHPπr\]-GHv5A@ 2x[!өNCvug|[i!v${kfGCЉEn'Kr8rv,oJ}l>jmJ w0]eئAE$'ԟjIQvUVZDLxIo;EjNm%;QCq0E rۦ?+FUƓ9ʡ0%\u|ИifU)-)&޾=^進d;}%㡽XNUU hA@@켸Xӈ>TxQrʑO׮]''';v̙3NOOW~~~JY);w v$ghVC^Y3W#_]h*@@[O){Ϲ站4,ggީsR`A6LMgiD^_a: H 7/8~Z]G]/w>똲d';ڻ}>hi9VSٱi2wCa溨uY%\~W-9eﯨǯ=OZRΪ C–ꈹ!l߸4a %}!?4؁+o*>}ulW}  51z6T=r; [~} z1ynM3Rg'DD,( ȏoʦqSn#  P/$/T*e )J5g*vB-G\\y4C UWЏw__R6pi5ѯT/"ҵ 'Ȱ[\nxǖ12~M ryݿ(bx 7Qljˎ5 5533ξȵj89nAoIq<.).+*Os埡2n}G)a)¥ן,{5q96eybr{Ddo==-5"gf;g4R冃WTzY|[t|[l ff9voCfx/a?SXha `L~ꈔO?{4kJDŅ..vT@@ fj[H^^ŋHv<˒))) P__N)|}}.˖-gUk֬}6u릔$@/Z(++K r7Ҟ&!  N#0g\M';$;C䃥R.+)Y5cZ+6O[9K⯯RO3/%"+߲=͔;Cc[Ҏ r K^T__^?25/韾(?[ڔOLq#͢>.} ?;sXke9o%>?rpXԨ vO񌦎Xw鷷a}/^ T-o\?z>i熴3ɻ^ 2{5]2ȏ@օs;>ܼE[ٵ?ٹy>1Y좯cLM˖=<6}٩d Ț1ۗx|Z?1ko  5hժa +Wܰa(&[zW_}UwӰg`mnXB26ŒIysULj޽{M墢n#)"=z믿.((׏SQQQT4Ԅ n۶Mf9sf׮]#q(㧀  k5A'>Ծ SSkާpǮ~_쯛̼uubYQ'%ZL3[ώP)XhePǛ:x]a\]N'g'2הMnTO/,8}f.-%Ө<Ȕ4ԇ#O/ouDGzbY0p{M r(˯[yioYρݛhxOGߵQr=w/Ap|33ti ww;}|⌷mgRYV{DP*HNFd[?q$1WRSG+ˉ   Psy/韻#sy-wa7lAKLyҿj*AW5 d-̔5$X3AWW׈ ̵nZ"fNN}Ҧ$FR Lo^ ĀN8q2T~9D@@Rݫ?L30NSWNh+v'I=bɦ?xujB#סo|&EK_ WS^{jOSdrM‚,iJV}i~<枚.1_?q< `!QF-&t9lȵ}aoHMIHM>xsQ1w]}IބWd 4 T/}?{ j%~>-7+A҂[6Pqd9*\L9\j\f4v#  P ///viawU -+?~<11Q$oC$0L&4hP``kI/4"y 3akR! `Ȑ!.tI|zl8  P/m`.^/'Y٠W+ZnqKdKM5cicwz#~\fX|OUb|qw5j$fT.*8gvGMضS?񽇧vkF./ 3o=aDXsM92~ӽϵԧ=^ծS'/ i+CԟԄg_gʿs# V93{c:~on T$XH>B/o}~c=j\%  X)0tPookJ6lѻٶ-?85ϯ?mV3mܸqѬ&x㍞9 ͛7eO߆MD@@رc޽㑸5<|Af7I'Q;ާ^}9]g>RiM*h"Z4FOټ ^n{}5w,nd >"nf7quPH#]#G_OJDnjY޻Vt"ȷ6MأqL󯕶,pTZzlݰb/ӏ$(Ļmqę,.s Ju0 IiQ-K RwzK@@@7p<>ܨѣev~Ö\cVcYtap{.2@IDATJV-$`A$eA4;> ) "  P_,/`l}5$;:Q-wNX1o\Ĉ pvv]4yOI}}VMg~ ~>^#zgP,\_]w?vG kP>wǠ1Uxl_lp^*?G_܎ JaQ?g_ K%p%[}_puʷ<ғZ2x}NI.p_ft862| 6W W~M ։m75lJ 3M) ].^w_-*Q5xk2Z*" 44y ~7wpmڴ qqqgk+ha&SNׯ1cHN"JmِBM0eJ%I$ C\_dIYΝ;K;f'  @(../- RJ KyyLL$cVO6kޤet@tLMv3)S,\P'^];AdGo?}@j!/od/No fW)ܽ9awg_L/). ]z o,PƋ l[z"3̥K-Fl'V)Gֿt}L8r43=? X:v"^>]WN.))sdx~EMinMJƯ?o{օsYr3e9-Fw5,$z6~Ϛ5FB  "PZZzԩ켼b\}:%%%77@,ުU+IBYYYrr'd 3!K5XoR/TF@烲hւ|hZXhd;k7'N\ Κ]z Suo9ȼ)`0=:"l;ysmwdoX,fQ5$ u&+j+(M;-p0qsŸːkWdet_폃   PQ@oGt&򱹂 NWΫjwnnnW]TB#  Pٸ?o Pƌ@ \<d6%'Y%j.@@@@@@ZZڊ+*˥f{Nw#Ŷ ^ލ[k1ӴwJK4qݚ      PΝ+[U:#5{Jk d'@|G_BDſ1omۤ5@Nօ}W4 !GL9D@@@@@z-`Ͷ JMf  N@@@@@@zJJJ"""222z!!!՗P_D@@@@@@K.yjSڔÅ5&E       \Ƕ&Z[.@@@@@@@;O^t>UV5{AfJvB        7nsׯWڴi3ydI/cf       @ P       "       Pd'Ԯ?#       d'8=f       Ԯ O       8 !       +@vB;       /@vcf       @ P       "       P=P$/RY4ųILS   47&%%i۷onݺi"   d'XoUk^8ᰞQ>pN!   PWJKK5&!   TIUG+1MIMdX        Ugs]0       d'zyߩ`       +@vBi>pGF{@@@@@@@NǷ\R 2:       @ ;}r \L:       S HĄ-4z!%~O '   gggݟ/^wSځ999laaGƍeOOjZi //O >>>n @@@@J +'0篚1RIiWq Y#  X~}ii>}ȳmMP9/] C ޽{ϟ? ;Acx d'ț6mڵkY@>Nl֬rӡ]mBe}2$Y@rܳgϸ8唹¹s6lps2.߮]_033sݺu)))ʪ Z8lذX}"    Psjn,fz [!  8D@˲ JMM]hԩS8+I|gϞqY"bʕlѾ}{ 8p`͚5 Kv-_r%e+V e@@@䤜Z?ru\o1]    #dAJSL)++[j OMP'r)HLӵYYY/%4MB CmP)    N#ڹTVEYz=lx^>@@@.O?Ygzzm۬oS sf˖-3L&E6nhB qbɒ%4h! F    @ ١|Ǜ/n`yA=C3@@@ B(,, ˸=ڷo_alеk@OOϼ;v$''k&;ydvq &@ӦMAR1RRRʂgϞxSN>}Zє ښ "   MN #9m'&#>ŕ/!O   @- ~ɳye ڵkCpEYŠJMd3yiJF;rH%'**Jd%n*d1M59ҥݯ#55U)k*o߾SNJ|֭JY] df͚H>DFFƦM$A]2   P6ĴcSEYfL+/}zIVv쏦@@@ꀀ0|puj cǎ׏N7|i,To'<<\SbccNM:"3vXMP0qYAPB'L- tuu ?~*u(    mv`viͶ?=~_Ω6N9nt۶Ok   uMssssβ$~FI& f<ءC:4`vv,`  Mf޽7oެ9+ c Fr(Ó///)K.՟"   5 ;^'C^^@@@VZjez_? y. * Se}gϞ/Zn-&S+u릯.riؑBEpie ra S䔤Jb/V2   D0ڱǎlx;pqM#   y0oa >;B}jڴaY@6P-o\B҈avBTTRA_1H/oh +4HRBPPz :u*I B%B@@@l"@vMHYIJ~_R2?Ebh@@@. [84F2갰0I8o֠ FN]HťEm۶gJup?-[jrYY&"d'ߚ9D=#du2   \MЂ~yi Lv/د/ZF@@SבAj+#[-*axL@@@l%@v$mΩ&/S>#?anh@@@N TG۫W*S ?wǏkoc"5 u*%   `gj9蒄^kԨYDgo?NߵCu|9F1OlD   `oY0]أ* _~nݺTdɒ'FFF*WU)Aʰ`N0\Aa0Dtw%j   FmhV/aj^~|Nu}  [J=+ۯư'Mq… V%[[tذC.+ N:}SPP`aBRRR||rvڶm[ WϗjiKnD@@@ 57@@@gŚy#J/*Z,8~M/v*KG?>99رcgΜ1DHOOW~~~JY);w v$ghVôf͚)]h 4A@@@@d'^-tmF˫GY[-YTkJY !C   UѿRoay*_.QNÖA3Y@ JfiA=zHҥK>"""vޭ\n*Hv&b, Cҧ$&&ZN8|j}D@@@ :tfdGT .=aD@@Tp߁'O+{ybNÖ~ͼdC 8x^sKDFFjajjѢE )?~|˖-S1~xSPqg'HA jyرC     `K,ڤA@@@  f8p@ukfxb >hNÖnnn˒)))r/” % d#e˖3 5kd>JݺuSJlѢEYYYJT[diO@@@l"p4G#   8@V߯ʕ+Ϝ9ӼysY@)8}, Ӱ% 888--M3+V 80..NuPL͛7#rxx:ػw~ArQQw}׷o_iV6k,;vlÆ r(Ք`TTTtt,DLIMXpa׮]%B&"DRR,z!   J[I   3 c~y.5v]hu~ÖM j*AW5 d-̔5dDDD[J9''g?)5%۷l1`'No U+_@@@@`CLB@@pZ//' T~Ö$pز,W(i lL0h YpB5\ӤIMt(H^,o`ؚ 2dZ :u-XY@@@ @@@@(0tPooo+g>l0w+m5; [V5j_F۶m[o_۸qqUYIM===m >ncx    D섚q-   @9=Z\ag7l;vl5EnN@:nXsqI>q 2??_0$gB&*5Ee@@@x>h̞=?k,;uT7兀y_   @7죣ga| nk#(Ԩ˟    vRt4        `Nh#       M7       4Xg       8HA         V{8        ;At       @ ;z&       Np4        `Nh#       M7       4Xg       8HA         V{8        ;At       @ ;z&       Of˗//**rܹpF OD@@@@@@z*``=î#d'FHj¨Ql\}hѣgϮ#e       )6_vڢ!@@@@@@@HÇ۬-B@@@@@@@f7sȑVZ|yQQ \R6qЏ%&&f8@@@@@@1 @v-$(ǖ-֍Lbн{YfՍ12 @@@@@@烶iV;;4;ϼ@@@@@@@p @@@@@@@ 3o@@@@@@@%@v@@@@@@@*@vBC@@@@@@@G (iA@@@@@@@ PاaZE@@@@@@@f6k"Pxt&5AD>+6iGS@@@@@@@jǽJ->֍FW%95SD@@@@@@@p;;8޼=/߫\?>&Mo湩)YG%]eW+7m@@@@@@@ ;M £n)QS)+4;P}*-a2        ;U175P?R6Wn>>       Npyzk\p~^lwTUmԇ@@@@@@@p 7Bm X9/]:[@4 @@@@@@@ ;vܭkygNlr/|_i ۔x<4Q)        P+d' {:g[F+ُߓw&U %{ꗗ]=zy       %^[ӯg}JLɡo01(}%S!SW禜TtqsQ-@@@@@@@jKڒBLZELH鲲‚C k?}bps#       Hvvpv C O-j0+jR@@@@@@@GqlvokMEe8fEe        `wvv;q ;(//_Ȍ?SpU[?zȡG+uecYor u@@@@@@@ 7m??&5!f/RQqnn;LFYa)^y~}ݴa&e@@@@@@@,Zw{w'm5?]0fBMjT zqH~ ヲR@@@@@@@@VNvk;U;uqM?ňmKEYj"       H++}Y#PJM|!OCJ6zorH@@@@@@@ xsk{N>^^VZ(4_}VwPRF@@@@@@@d'8 <ܡBYS}*s @@@@@@@{ `o_'$T}hR}C}H@@@@@@@ `*t}ဵK d;0c!e@@@@@@@,@vНou팤C φt>       Np0xkڮOhr}{Nrhp+g]=\'a︷Y1mbK .=tauRS ^zqx3u2        ;Uדe~:[(B׶v)       8R]\\\6K[}c>_d}}j"       `?gk%Aߺh_l`ݠ#??/ܽ-,       `g8۠ƍ{>t;b#.;,g?4q~s @ @*f< @ @ @ P5 U2 @ @ @ꄪO @ @ @TM jÍ&@ @Ivj߾}nn7{رcϞ=[nO W[RR{vyyyvXܼyjp߾}!h۶mVD @ @ eT #@ @u /|_O\`֭[S:Ǎ BgHx7/_>GcG;1QgzPˎ߮7\zuK(,,_ q˖-?Ç+R͕+W{V?{.]O*NC+Vj 2lذ f< @jB @MN`ѢE٥*׿5:a y b_Ϟ=Nv&?k֬ njӣGZ]v-".\8gΜhIaσP~:w|'s1ѥ>`֬Y6l(o};QFLܾ} /vڔ 2Ҋ8p`= @ @@T'P @ P+kzVׯ/⑵q5'OlܸӦM `ŋ{2;sϭ@ T9! a3ݻw Ç3&7X~}8"H={ [hQz);;[n^xa( @ @5PPsJ&MX: @ @i lSTJiB)IH?!Pg xdɒ!Cķ.(z7n\z5cX;@IDATv60HK;vlJgON QuB8!}nX^4!> +L߳gOSL @$":!MR澚e @@~¡e>tpC8[!޽{SzjmHOqsGMV1"}|Mz]J'W'[.:"0qѮ 8J*&OүI @\@uB /Cw}wb$"@ @->WvVHN`|:uTfΰ[m pCyQ2 H]Rw;4;a?Y{lzgB @ D7ĉO>u*G=%6mڲenK @&*P m [nࠂEk> ۷G=`yœ9se/,**J ) advvvΝӧ{9ax @ꄚ ϡvc.R ez @2F 8g}2 G-^>7.}+2+(..L1 =e-Ή)SR@4  @ @@"ىd @HVc?'{jd8pI'TujE=+VHc0fiMC:mcꄏc @ PU U3 @TJ lPq lP}i]~zC?֭ϪRC|bz\ZPf e!7N)$ @ @  @ @ EU̟2XvΝ/-[϶m*3fʆ͛/$_-ڵk3e={RzқwNC @P@uB M'@ @&!P_~ϟ9edg-ˇ?zjNXfM!۷u.\8r1-ZH:2=;vLwֲ+KRuB @ Ps 57 @@v~Lر#1ew [GlݺuժU˗/߰aC7o۴iQT:!3RvM6#EJj€NM @ @jn( @4~VZI} 1)ؾ}A*J7T8B3<~C:W^N44 )=o ’Dϟ_AuҥK+x @ @@M @ P@^:=>>އOQZZv`^KyAaXƍSOL=%zr54ׯ_Ή۷oгbŊ9s\ ^xaig!:!5̭s[) 5  @ @D*:g1HB @@/^>u<]~~ɓ+8!e|6kiNNNÖk׮M錚ånݺEZnA8aʔ)a޽{{-i?m۶r1"߹sgSWO|) @ @@"F!t @ @F)Я_E?ڴi6lгgϰ=@8`ݺuaCP>^zji١ԠsΛ6mJyg}v̘1sL8!~)T+Ҹ{ΓO>OS'O>䩧҆BO(YX|Yۗ284ðO>[,D=A(MxG;P$4 . ^$@ @P< @ Иg=|Oyp7f-;^O}+= ! `aOcAI(5իW#=4xgw=cƌ> a+lSr ѣW\ROH& @ Ĕ @@- P ʏ@(&(sa+]CBXjUcǎ Nd8sڵkY IB]BޠlaLǏ27c=6f.]** @ P  @3 @駟޲eJ>'>OZZvIbҤImڴj>Pߐ> 6&|ӟn޼yzΰ}B8z#̞y)R% @ @@MT'D\ @hB[>977 G T<ή޲C_-"¦ &L(O Tu|8p`yC%\R^9H(Y )'>' =ݺu 7#'ʼ @@nM&K @@ }W^YtiaaauQvZǎ/cO-;pe͛7owg ?<R}D7|s [&Cˡa@!lɰpߟ>2T$ :46Kү!@ @j._kn( @4!gKXfͮ]KJJ_퇊ӪUsύ⊃Aү^|ƲKo>tI'x7nܸyPPPPp? ӵk޽{wܹE\Ν;ڵkٳo߾0&?5Z_Y'u}999G~S& @ @5PP3ڙONܷuKH{wW~~'ٺp~ ۷5kVۢCN{gujd6 @ @ @TI@uBh笝5fmz]?^?ص3enI[7b}M:eY/b~ܺ[~M @ @ @ IJ kgLYPcǜүI @ @ @jI@uB-sU3>wUnU'z+.;''/&@ @ @ @*:Vy!yQaӬYIt-F^~KmN @ @ @ u\wwy~9Yb @ @ @ Pgꌺ.nG a˄1?gW{ @ @ @(G@uB90ؽcqu=:3 @ @ @zֆf˜u/~4o @ @ @S@uB}'x۷~njpo>FM @ @ @G 䭗M~`ai-F?&]. @ @ @ P5 ,}h5}O8kgz*бUl @ @ @JB5a~3ZSoԬ|0oʏ7 @ @ @TFQjcnTgwC_ @ @ @ @@SP7  @ @ @ HT'4s= @ @ @@nc}~k]ve  @ @ @ @@ ;Ψ݈ @ @ @4Q M{l @ @ @ Pgڍ @ @ @ @@PD_&@ @ @ @u&:Ψ݈ @ @ @4Q M{l @ @ @ Pgڍ @ @ @ @@PD_&@ @ @ @u&:Ψ݈ @ @ @4Q M{l @ @ @ Pgڍ @ @ @ @@PD_&@ @ @ @u&:Ψ݈ @ @ @4Q M{l @ @ @ Pgڍ @ @ @ @@m];=cƌSNz:w22/$@ @ @ @ C>c D@uBb/"&L4)thٲe?3aH @ @ @)dgΜX. @ @ @ @@#P˜0aBb$"@ @ @ @H̉'N>}ԩ%mMqH_ˀ:~= @ @ @d@y3!NH-dƆK/-:{ cVA @ @ @@2oWdTT߼&@ @ @ @u%:݇ @ @ @4U M{n @ @ @ PWJ} @ @ @ @@SPT߼&@ @ @ @u%:݇ @ @ @4U M{n @ @ @ PWJ} @ @ @ @@SPT߼&@ @ @ @u%:݇ @ @ @4U M{n @ @ @ PWJ} @ @ @ @@SPT߼&@ @ @ @u%:݇ @ @ @4U M{n @ @ @ PWJ} @ @ @ @@SPT߼&@ @ @ @u%:}oVb  @ @ @ дrfӖ‰n =zػK{ӞٹlK w yէרq}Ϙtd@t"@ @ @ @ 2]Y9kg,c}wS&޶hAV-w;;b'Sh @ @ @ @ fb{5ׯz )iwx/yR5  @ @ @ @@L&վ-o/dhݣWOnյ{JIqy) @ @ @ @ )';$%Lg>۶T;_ܟukᨁ֯yqƬ[VgwiO8aοro @ @ @ @읐e ܷoO`¦yoT;Uw!DsZC҄p鰞}LӮߑezlë @ @ @$(`1`Ӽ7/]%[nfUK=ooq}>sf<qΘy]III_L @ @ @wB`{֭y/6kvu^ mr_ݵjERϳ( @ @ @$(:!ALNX=h)G]t٨a>}{ _۶DuwQ @ @ @$%d$3Oa~~”lu aL6m}ϽqWm;A @ @ @ ꄤ$3ρ];oڿ=8?NΉlywޖwߎ @ @ @ ꄤ$3ON˖)uڸ_!3#xǛb @ @ @ D9I^)+83eeet7G*6f= @ @ @ @j l_J.F4kvaߖO @ @ @-:t kbv x̐x8e6}FWo @ @ @ ꄤ$9OWwXx8azD @ @ @$%:!)zu v$,/.).޹rytcX@ @ @ @Pd=zloQY^{ݚΪ"  @ @ @$':!9z{ͲUӧTf9gL<;{ჷ^eEo{Gtu @ @ @ ꄤ$?ϐ+-[o_޷gݚw?m2j  @ @ @ @@R<9W8o?cOݾt:oIq~kD]=N=GM @ @ @HP 7\Rկ@Vv_1 vn/]ɖouFZwn~wX6+{?:#"@ @ @ @ NHβdjӻ9>9صt9VQvw#+* @ @ @M@'=3nʬ/+'wO~9k߬`c @ @ @ @@T'TϭA4h^Yp򷾛 oҹ_jc\"@ @ @ @5pC p햃5L۪I/]UM]5]Woܐݪkú=~>#jx  @ @ @ @@eT'TF)S4o / M @ @ @B5z @ @ @ ЀT'4ci @ @ @ @QNhC @ @ @ @,:K#@ @ @ @B@uBx @ @ @4` X @ @ @hk @ @ @ @ Nh/ @ @ @ @@P(^ @ @ @ @ X@uB~9F @ @ @F= @ @ @h˱4 @ @ @ (T'4! @ @ @ @@PЀ_ @ @ @ @F!(<Č3NZPPP:ΝP&i @ @ @ @) NH쭇҄I&%N" @ @ @ X؛9sfb$"@ @ @ @H@uBb/s„ 咈 @ @ @4"';$2'N8}S$a$6mڲeZ @ @ @2O@uB,($36\^zꄆ* @ @ @)d|mM @ @ @2H@uB,K%@ @ @ @):!#_E @ @ @ @ PA/R  @ @ @ @@F Nf @ @ @ @ T'd˲T @ @ @ 2Y4 @ @ @  , @ @ @dꄌ|mM @ @ @2H@uB,K%@ @ @ @):!#_E @ @ @ @ PA/R  @ @ @ @@F Nf @ @ @ @ T'd˲T @ @ @ 2Y4 @ @ @  , @ @ @dꄌ|mM @ @ @2H@uBC|YEv*))i& @ @ @ PE*7V V??m铏l]8?ㆂۚ5+mѡcAC=㈳:|dUݷ߱lukZvܦW1>윜&4 @ @ @TC@uB52)yKߺywoҹvWCSܶdQlc!PcKCs~sX#O]誀 @ @ @Ԓj Rio%|K篚gRzVLc/h4!eLu7^u={R.i @ @ @ @dT'$YlEE~3-kNV8!pg>- _zi_lw! X/PTXX @ @ @ @@ T'_u/?ԱW_AWܜG{:&>`K߼y ۗ.:=b?E_]K7f~V5 @ @ @ @ q2@?{H.qܟge猺#1 Ac毿o!9=0/Ưu[_!?|١y6=Zܥlj tѤ[7?&  @ @ @ @@NH h 7~;4!5O'v6H(mɢz4iO4!Aa#~C=% " @ @ @ D9+lDc5j.Ï.m-Z5K7f%QgNQ3%=j\I:WL^] @ @ @ @N^5\|.$;c9GSBe;fa~ɇCv{R?eA) @ @ @ @ NHv^OǛᤆ ǛߘS|0tKKx8 @ @ @ @T'$%Y<{֯nQfyq~G/^&\?x32zj?``ti?5 @ @ @ @ ) IIV!O:!;7UsNǛb -;u0cN.߷{ͪ) @ @ @ @I &H aYYYyޛa]E|0ut~|󑢇U1 @ @ @hVoRصk#O2|dܷyS񁂨ٶQ\qвc7śb @ @ @ a$nam: ־Ys{MfqV'ۢ:- @ @ @ @ W޺%?1;7̟??bm5ެ n١cj؃! @ @ @ @Dcm% :x5K(~nNرRGrZ nꄽ?`K @ @ @ @zVY7_a]fF?o{BwBnV)k6o!~ @ @ @$":!ƄZ/߹qŔRWxOVNe_kIQQ|bJB @ @ @T[}$P=w̻' 0?rŗQܺ[(Af}W[uo  @ @ @ @@"aL IIIɒ?>8[n\n%WޏSJcZuHu];W+ ǯ:!!&@ @ @ @dT'$X,7HIq߮f;ܿ @ @ @$):!IJڿ}FG~/lԬ^wFsCEwya{DM @ @ @HP@uBMlc KGg7o13+7+g|=Q\TX8w\ +Q, @ @ @ @ &N,}hX~J-:tlեk|pSFuzօvn|B83"UW]j3Qg') @ @ @ @ NHֳR6f4nՌ)7jV>~7qo?N8hezl㛯~ɇ靷~)n{M>'ʶ! @ @ @$+:!YϏ϶w=?~\FtPPqO ʊJ @ @ @j(`?Vy[4_hO87ӓg*M% @ @ @HJ IIV6O(ǟtW,xg~E{֭ٷyS=޿}| ]슍#@ @ @ @5PP3=˱ǍކF#@ @ @ @/d=! @ @ @_  @ @ @ @ Nh @ @ @ @PPN @ @ @=! @ @ @_  @ @ @ @ Nh @ @ @ @PPN @ @ @=! @C@IDAT @ @_  @ @ @ @ Nh @ @ @ @PPN @ @ @=! @ @ @_  @ @ @ @ Nh @ @ @ @PPN @ @ @@n:|3fL:Y;wn]= @ @ @ @ NHņ҄I&%N" @ @ @ X؛9sfb$"@ @ @ @H@uBb/s„ 咈 @ @ @4"';$2'N8}S$a$6mڲeZ @ @ @2O@uB,($36\^zꄆ* @ @ @)d|mM @ @ @2H@uB,K%@ @ @ @):!#_E @ @ @ @ PA/R  @ @ @ @@F Nf @ @ @ @ T'd˲T @ @ @ 2Y4 @ @ @  , @ @ @dꄌ|mM @ @ @2H@uB,K%@ @ @ @):!#_E @ @ @ @ PA/R  @ @ @ @@F Nf @ @ @ @ T'd˲T @ @ @ 2Y4 @ @ @ ZkYjQaaѾ}ymfeeS e5o׮6n!' @ @ @T'D~~'ٺp~ ۷5kVۢCN{guDmɢG?q}{K]$ @ @ @ @T''Swڙr˒n^?]tiyДaUj2W_&Ti @ @ @ @z՛fV"m}s^k WMN[ŒKy[,x$@ @ @ @5PPsjf(.*zKlY±{v?OmY8?RezV͘:Uf1 @ @ @ @ A2>'] ^u/?ԱCc?Ѻ{пs/6hX—yES^ʊ:+جYIeC @ @ @wBUHqܟM\4e֠]նOߜG} <{3Ehf/~聨Y$&۲2!@ @ @ @ NHֳٖh 7~{u7FxHz'z{n>_4:B3#** @ @ @ꄚUm~'qM]ٿuE f~k阖 ʵU;"6QH @ @ @*+:R ۹r G]pIvnn,3 K=?|4Ҟǝpʷ*&@ @ @ @(::Y3u}ucψz ϘT)|uӏGG(A]M1 @ @tUU0`zw `/(;cױED(UHߟxޛ x\w{޽>Ϲk}7{ @u7\K~#ϭuiBG>՚w̳Ǫ2{ɚ @ @ @ @ c ]K L_4v8訫A @ @ @61 Nz97άXۙnE% @ @ @X_NvX_ұLx땨b^gO)fR:U7(f4 @ @ @ T'l9#Fwuu$@ @ @ @J[~99Kﻺ @ @ @pַ}G @ @ @6͟m~ @ @ @ aoow|̉I\[ @ Pvrss˕+Wvo @ @J@u†w_ @l/Ǐ׉f-Xd9u4mܢ}Ӗ7o߬uXbI @ @`C No  @ >>0e-;=|~EzZyꕽtjE6%?KDly׋#ʕ_aX8o5OVFO~4=!u>cθcOn> ~C//FEt3˕QnuCqRvͮ촯s @R &H @S?|]̧?Go~߮u1g oFу|)9N[\pq @ :w @ißG'(kؼ҄v[nwI>w?.;}ִIMZO.Z0u ϪU+ßn׬ l_ΆOFzM`nnEYrE-ksgM͚?;{o>UVtëcyf)ݮ-yyy. HB`hy;k/G ({#ͧn~_ @ (:!QD @y]퓃ɑw?8:!͙13s7:胉cOW|zvއ; o?'T6$u5OFGn>#]r_*բx?׆bx~GڂH x᫆ `!!'w3x{Ҭ/>|!$y|Ja6gσOPb|Ta>+#(yQӴe'I՗sMVvM%aa^0Uߕ˗DByއ,BB,ic#|;%}f\puW,[RZ. @(P@ @] Kyd1QF t„H]|-IF 'g}ryw'g<i`| tCsoON~-Nx{^x_sWS#{K''f6!|†C=jəȄ1C碱#Ń#G>s?JƯ]n㳅m!^{S.+\vi|[L2=(5& o=sk:׸H4*jl$o'ZOz˹^ы ӆor(y q] @ P :7 @@ }N&_J\rk "9}QCzK?}!^G1?sQqr9~I^8o\~M[u,lH؃N[zUa Q<|}CwZ*q /WgC~[ƍsO.jˬX|iV|; @ !vuOݜ9|wG=tߣq) Ny[ܖj*vnլ:oəK>#̋bn`䊕حv36el^ASc ޲-vY5q#Y[l6awa0!ݣv<**S*^~Ǝ.o˨!4"VRaŋ*Y%FvxuT^)MN!@ @S@uB{(Mo6 @ tşDւG D 5mb|S!R~Ӯ=z^;ZuD95^x_)z}.ܿx0"RNCBffkԼ]fff}[ݨٷDhK/ 5)wO8h̝9%FsXryo8->D޾_ΨTjB|U<yN1pxRkR.#:nSssswR&'7ڷԴDRreKUQ;-0  @lbNvH 8p`2 @֯@uκr%(a_8oFGn:_u}_ez1)yBiB{b r_RpjԮ>pS߼?vkmO? $O4!\WavJLb?7|Ż݂{KBx@pۏ'O[R.\%w{<*je/:Nr+P*jxBP!96?XuʄrBޕ,6nޮ߮N~O{$6Wa @J]a clEXǰAyyǑKL8:yG:ok&ΜOÿܰ _ѥ PBҽТJEMԎ[owNn4o%lj_蛶}UߜU!Lzgw][e)+ (mת4k~Inu,Y4/yx8&l+!@ @A@u @$ m4[> =>iWӧ-f/꣗{pl3O9AV7Nꇜ鿎KJ\/Ylqt,fdə/>|&9E7cΟUJ 尿^ӷD ?gԐOaxv~[͟PQ|*l=-;"r)bkqiq:3>b6C @ @`sP9eH @Sq(2(3Xxa8`oBBOQu’Tt^|:[&/=i[iѓ/[(eBa:LN.Z 9[$Nj^8of|3w_t)_n-g|ߺ PQtuBYy;ɏ֑y&*" @ _  @ P,5μ'=7pewc"#Y&i)Ӡ3k!XaK;a̐:!sowV\[v4RM#2˕O6#|{'j&<,l)|+sVLN}ߒ" @ @ X/)4 @ @L 4HuT_п85oc'gk_333{r{/ܕG>zBB{B;NOH#(jR#T'$ K_||x$ΛuqCBZw{~z8D axNY 6. 9ᐂ;/;jִI s"B H§~2%Rr[O *oK$d\x#ݲvbܨoG<=tơ + _#N,yB @ H%k @ 9TY砣}ŻvaG]oڪcӖP\~`܏EG_NW<^r7ăt='_mm;Xj8 Vcϝ9%!9toaXx~~޽W?o:ok7_yJ>a:v7oSX<#w?9Y*V ?; U$dk|#Έ~M%nt =s0N.yyyC|嗢.\hn|xA&K/sc.-J۲{ ۄ+N-aZzo'w:DŽºe$<˝)fsnՎLF @{p @!~WMqիܯH^ckݭwP'⃄x^^O>[l~ $$Ļg^XJ㑂v]6HHyBDBfit՟}6]~7zhz񽗞~/Jrw _eἙ/>tEYFNSE7T{b! @ 8as{㞗 @)T~=<|!Ev:]pӋ)-_b#^~OVN{?";+TjަK)iXQ<(Mz}<䱗Zæm! f:.a;[]JtR4oݹO/zZwض8e繊|FFF9. @ @  @ m;w5^f;_'6L9IީP1);Gڧ_PuϼpVEaW?I%0rqٝogfo|̓7nY9Ciµe(%*%u~[NCENJ":& OV\›^*'LRn?_GU,lHӖye[XBr<_7n.<ʒޫ-UE5.mŽWXcfABY|;|(-쀲GG*&D, @ F k$@ @H pU ;!^]5~TN(.ٶ;2! 6i[_A5qqQ yam H\g^XZ""![BiEʄ‚e,P]C"Ĝz}O~4#Tlt޶O= @ do>OINO>zG$E @4W0?s-_lɢա 1Ԯۨ];tݱ6W7#?e[pnΪt뇓 ١W]/쐈oV㐁sfLY8of^~^Ԭu0sKj^^^1 *; ԩߤE.;sDǭw^D5m?3e-V݆ݖw)ՇZo޷%'gՈo>6yf-Sfݺ 5zpDY @ʜuQg}?\0z衇~28]1l"K]Bk #sP܍( D @J lr=|J˗u='oO:lc< 7o۸; M[zߖ *aSb) :s @ @':axS??Wl "?\JܵyϽ[phmh+.?vq&[25jnױVmF=v(ф  @ @ @ @ NX;t|ժY ^9?o~rm욐 u}otysF r91LXQɎόOM @ @ @#Y$9$7x҄;q7$_G~{~z ʳ/q3%] @ @ @ @PN͕)}(ըpCrsW2a/>?I$B @ @ @%'tMm_}is.'֬>Ui Y'.;fԣ<(J[%gW) ?Cög^вuwڸӲ&uG?ߴg#i @ @ @ @@z읐^ζlegdƻǞTyr*ON[ӑ˽y\QQ7j՚4;rnw={Uo<\-Zػ7au2W̝D]  @ @ @ ^ ,l^{!?/7+}Qԍ7 ]O:}˯+W#=ϋ=oanQ6?rf QpG]  @ @ @ F i,T^c-p5Ev嬜?7~CA|ã[ukw_nr=:wr_8kQW @ @ @Q@uB1;U֔ Ǝ~TfQ7e#Ny_7x7/7wQQAva&;4gĐxW @ @ @K@uB$K0ϒSmS[XnKZ_:cZng=h"]nx\6 @ @ @HtI`PIϮն}[XfKKVo,B(2QƼ#jo! @ @ @ @8xuBf U7( LeΆݡS7VEF~^/32jS"h @ @ @(@bIK@v &PZFFFq&;bh|'a'U/vc_z:~5\ZmйFgX4qIWXv<썏v/v 8  @ @ @ P\ ŕZ?y9˖ ݕ*;~NJ5kv]]?5Lh҄vFh2jnrEA<{OKN]ޏ>_ax<=;N=G# [s[dzًt  @ @ @ @ eu@Wzn;ˁU43hTSs/kѥJuzÚ7Bh>[wr4*QW @ @ @K@uB$fܜ?7Yv]y [rFfrQ_Sar@IDAT]%4ئ{Un;ww  @ @ @ @@ZʧeW7Ƕ=nVvKϩexvBq? @ @ @X; k疆Qz5^L滷>:{qV|T "՛_ͬP!&@ @ @ @iPOh҄.8=Y⡯ks(RF w u&&@ @ @ @iL,&)W_t2}乵.MTm!-=Ww6&@ @ @ @iPƒMrႩt?GuעQs* E㔏?E4&Nt5Pc稫A @ @ @%:!]%gһo)YR3/,Tm<,~KY,In|iaN<4 @ @ @ @ m~Ne'+Qr={Z>QJT Jqec_y.oUvAdɴ_:>?`QN[z̳}{QR:=o j @ @ @ @4 NH#fq3rh'?.y=Q~6_Cn.qvzwڵvw\bŢIQ$eU<䔗  @ @ @ @ df(@%/~rFF~(|4hTQ:g,~L @ @ @ PR %[_J:!,(l}Y' ӕ7UYe^+W.:U @ @ @ .NvXgmF{LjնʭN=sG/8~ U֤֯i]z6ߣW= b* @ @ @ꄵUS'mB @ @ @&=  @ @ @6 p{ @ @ @ N_$@ @ @ @X@u~nO @ @ @6y + @ @ @ @` N/  @ @ @ @&/:a @ @ @l` = @ @ @T'l @ @ @ @ ,:a'@ @ @ @M{@ @ @ @ T'l @ @ @ @`PɿbH @ @ @6 ܞ @ @ @l6W  @ @ @ @P_ @ @ @ @M^& Я_ypÇ @ @ @lfCi~헶LD @ @ @6';M80ms @ @ @lB2{ꕶLD @ @ @6!';e?ׯ_vvv&8&߿I6X @ @ @= |g@!7:axVA @ @ @2)d2, @ @ @! eeY* @ @ @(kh @ @ @ PT'e @ @ @ @L N(͢  @ @ @ @@PP^ @ @ @ @2):L6&@ @ @ @eH@uBzYJ @ @ @ʤ2, @ @ @! eeY* @ @ @(kh @ @ @ PT'e @ @ @ @L N(͢  @ @ @ @@PP^ @ @ @ @2):L6&@ @ @ @eH@uBzYܜU, @ @ @ @ /#/0wԈo4gf\>{f!ѢU͖klSUGSi57;{'1͚p[g+_v6wmMN+ @ @ @T@uBIҜ?g䰁眲]8)ʭN>Wk$!V-JH]r_>vmm5!M @ @ @Qi,T?H¥?.;74!9׏.}6  @ @ @HtIx o6 Vsdnʯ.;oோ>S~*'#Y3* @ @ @H@2IegϩRaC`lۣN-Ϟp؟{߉¹ v_R~7_}4ٹgNksx Ǝ}3Buć_eddDA  @ @ @ . ,<=ghLVm{{@mH6§~21d/_piٌiCn~;2ƲY3{[,wt;(u;m>K{~ Wg}ؗ @ @ @ @ -NvH c&Yl[DcvzDA҄Rh4a~-~(ÜC Q{k/F."4!Hz;^~} ot+ @ @ @ @`T'# 9KD#{@MnrC~ˋQc+F-p5Q7e9ߦGti ~u5 @ @ @ @@T'Km]yfu k4}tiY'F݂F֔ Ǝ?*,WƼ?Ļ @ @ @ @ -XI͘ hNᜅ[XfK̊wC{)HJ/3*&@ @ @ @iPƒMth@vyFįj. Эն}BBnVSdo)  @ @ @ @au:ל-ڲ3V֤i-hī2WRABBn֔Ixݎ[ƻ @ @ @ @ -XIz ÿ n7]Sjhx1wx]m @ @ @  ia,If}mߣ^Yp w5mIYxW'ߦ{M @ @ @":!-dqoW, 22wmۧ~_^~iSvٺVvQW @ @ @K@uB$0ϴ>C+TzeKfѼU_ax\ @ @ @RM='D箞Q7~vڗ㗪4h]9fШfk @ @ @ @RPP霼=e:9ލڹ99__}Iߣ^9n̬Xi<~脭N9#{0D  @ @ @ @ʗfN)0誋Qpz>Lʴ`ăK 9-=pզ](Y⡯ks(A @ @ @6@|:_ŻEpC՗,]{Nƾ<4w K @ @ @R@u֯۩Kc},-l挟_x*ZRfϦ+.I(v8訫A @ @ @6_MVu??/7 ]f6Hh94:ol zrOe @ @ @ @N(Rsv_lh9#O-igw;Y$!K @ @ @6G l$+۴QA#>V̚{!Y'&E @ @ @ @F":a-ZtBE/|;^qqߎi!)31) @ @ @ @`cpÆ| k_w;i_~:틁rPjkP}ǰBnUmبv>)"% @ @ @ T'l@޺R="|6R @ @ @JՔ @ @ @ @@L@uB C @ @ @( jJ @ @ @ @ &:!I @ @ @R@5% @ @ @ P$@ @ @ @JA@uB) @ @ @ Nah @ @ @ @ :PMI @ @ @T'04  @ @ @ @RPP $@ @ @ @bb @ @ @ @@)N(TS @ @ @ @1 1 M @ @ @ @T')  @ @ @ @& @ @ @ P Kaw/;;{#>|&D @ @ @֧ꄴi҄/mә @ @ @l*NvHۛ8p`2 @ @ @؄T'e+ms @ @ @6-z(B{z5?lŤ޽{.搲ֿI&Z' @ @ @llFBB'3nsGu* @ @ @eReY4 @ @ @(C˲T @ @ @ P&T'f @ @ @ @ N(C/R  @ @ @ @@PP&_E @ @ @ @2$: ,K%@ @ @ @eR@uB|mM @ @ @ʐ2, @ @ @I eY4 @ @ @(C˲T @ @ @ P&T'f @ @ @ @ N(C/R  @ @ @ @@PP&_E @ @ @ @2$: ,K%@ @ @ @eR@uB|mM @ @ @ʐ2u+.Yl]g1 @ @ @P| 󥗊Q#ƿҜa/=s5Zٲumjjc7m7S͚4a 9KI2+T޴y]h~?*ZB @ @ @%t J#ua9eO?&LpOS|ӕ[|F .ָIBZW-ytBN^ΪſN/?~};(!G @ @ @Qi,T?H¥ºzO.MHe6 @ @ @ @ ҈Y&ڠ+/[Sa+켙^c7\O$Umܴa4hSLN @ @ @ @t 8!]%'I]pz|L n`u:n|̅|Nߎ9UՏ Q?8[cN=s_}ǂಙ3~|tIA$uQ @ @ @ @ mFYw{ΒѐZFZmڅO5dpc^8Ҳӆ~w<e+ uQ\*D 1?//FE?>Pm!kMn4}zG @ @ @ rrr/^א[lEmtzv+hmI^p5쎐5ybG?i[vVBBru}> `P`%I @ @ @T`ѢENZ#YfaSeggW_5j̙3,XJʗ/_N]އzh U'lwlƴ讍)###֨ٺmҲ9hѺena-?n{FW×{K5 @ @ @ L>SNISnU'~iʕ {'$\Zwq^O~MBTJBE-[v.uY%bw]N.)n()jOχwo4>3gz~9y?kY~衇;C.UM:Iߍ( 6< 1D2eڒaٜjy7hszZG @ @ @ P 4hذa &~gqƁؼy0xƌ'O}w{Ά__*(b1?bCr$efU771QgV3V ͵˗O3⩓!ȪWNwwJL\1 @ @ @6]veŊx?Jl~Pz?M47oލ77p7_x1;9cx?͚8~yN;->Ǫ* Zz6g?֭^*32rmW6f~}fv˗}3qӝ-u.  @ @ @ @ ԩS'j&,\0D2ڂB?x8!+ &Ddɒ!CD^z 'Pfͨ* 7^::u׭ZpMVmzh=\qNҨ?T'LvȁT): MCszrWzmQ$@ @ @ @&5'x9s+93O> W6?:v۫*j\tEO=ԸqWCĤItR ؙY״9/)%^݆ k&K"s6xiB[m}Ard6U!(^q; @ @ @ @4W^yѣ3۷oc,f͚8 @ @ @ @@I^xo11+0lذZjm䫯wyP4qxN@/ZZ h]k5r:x= -:wu:֬uij#zxiBSnm>>l)\{EA//&@ @ @ @@vvYg}e]wo&CǛ.lG*iuc&gOrN8}7O|Ї͒_;.ˎ7Wݰ}6O4fÞ~9#j4`g}i @ @ @ @@ 2o޼ĔmvNjڴFgΜo"=~Nv//jVVq>Lk]z'^GWY3V{p: 5f?'9lڡS @ @ @ @@ 馛jԨ5 Dg:u222 (9vxǎ N//yn=K'VXgOߺMU^"pW9& @ @ @ @b֮]{gFg:;=3`K˖-{tN|d iEivNVVDͰB՚fMv 4kpV/ZO"&@ @ @ @dn)S$F$ےU1ٳ)[۶mfT'Tw 9gś577%X\fͺY}  @ @ @ @ 9shv5SZf?;Pd/W7g~F;ﺱ  @ @ @ @`C3fs΍>묳FNvwE:~M[.~ycމ7NZ蠇_%czgxM1 @ @ @#0iҤaÆE\NY`ʕw9lϰ[<{o:&Y}v'Ш.?Xr޷S(ZF͖5CPe6z=w|5 rr>mhtv*K @ @ @PছnOתU3pL==؎;8tМ 'tԩSO?U~7`۶mLYd7r`5/=جڵf"唁w.;?z }9QoknVf @ @ @ @@1 .>|x4 4j(j47o^>}N9o6>w]vy7BBfiN,dT ~*}}?3z+5`C*O>|^KS{cYInx܀#D @ @ @ P<+vxqG=:>(#s&N4^y>@:.Q۟:pCDx?z= MvݽV-tƴySE#CU7om'gdfav^Y4ӧcڲcCz?s}c}7ݙGD @ @ @ ݻnQ3 77/ufըQ/2dHztT'l7u_ys/q v=cPAnjݖy/8j1VvTW  @ @ @ @ xgϞ5O8(.QpǫC9;l۶mTNv4v-~o'_y]OiOc^y~y뽝λ8 @ @ @ @@BG(233;|SOK– ?_~WLT'$nsc\rUV_؋Z{^qm19dh]N|ҞZ:ŌolߝU @ @ @ @ի_}ըgϞ͛7IӧO8p`4z#F8sJ8aSw^ۯE'Y}ɪU;n[lc_aˎ{޲YZV\ك~mׯl+̬t:Zw6}z4 @ @ @@(MXjUD6.˗'gdd<p@nMj4آG/zz; @ @ @ @`<0L&^xq)!y饗/jVz( @ @ @(uֽ Qf͚o>j&<35jԸ 읐  @ @ @ @O,YݵgϞQ|0lذhp^D=I 6lڴi70 X @ @ @~_{o&;6|0xn-v6 @ @ @ @@: NkJ ,_}tO @ @ @|ݬF:uI3fHrde:2MB @ @ @(pYfE7 @!j&l Ւ1 @ @ @lM6-(((#)?|ʘ$;!^ @ @ @ @4Pf/r  @ @ @ @@ NHWf @ @ @ @ T' \ @ @ @ vY0 @ @ @H3 i, @ @ @ꄴ{eL @ @ @LZb/wԨQ#Fɩ,ƍWYS"/$@ @ @ @ MirˮRvBiB߾}S.f+ܝ+F @ @ @ؔNvHѣSK" @ @ @ PT'e+e$"@ @ @ @H){}9r#rrrRb$zWgΜZjq6C @ @ @@ |]WL |/@!|Rb:㋬Nng^ϊF @ @ @ @ 5x %&d @ @ @( *% @ @ @ P @ @ @ @ :P$@ @ @ @bbB @ @ @ @T' @ @ @ @@L@uB CH @ @ @r@ @ @ @ Na  @ @ @ @rV9$@ @ @ @.0jԨ>;ԪUI&M6С!{ddd$?ȲN( @ @ @ V\9k֬Rgꪫf[nc-ESJ*:b @ @ @ @@eꫯ;:駟_bEF]tѣǯp r EX @ @ @l 6lXfffykowU'7 @ @ @ @ ^x'\dҵkfgg/]tĉ6|>NwS+`zF @ @ @Fe˖;v,(k_YgJ]w]~222Aj}c.W6 @ @ @ PFN;m5jԈL @ @ @\zӧǛ TKm:R+)nDA JgSٳ:4O3@IDATf,9}955Uzi{1{YjL @ @ @$еk׍=Β%K-Z]mԨQƍf1A͚5_pabʺu뢹adTQv-[F &N+|9[nݦM:}E/3''gȑ3f.^8<]&M:vv!##饻:tnƬQG %e(kƫg>L* r.Ξ}>p-;wgDi &@ @ @ @@ǟev&L8桇/Fb>駟ѣG_pQO<' 5 B!?9dȐPp@Yz~yqennY޿E>-E/Gp;=6l6!a-~\v?571bʕՓO>9KL4i}  ;w.Tow';65kw}\ʢW^sW-nӊ`c7^2&Pomv?gpuU+S#áWvh @ @ @[`}]`Azk5f pM7E=bѢE1a熐k׮]4+ ʷz+jva7nj/n a'~rJNʢW.s4a$n:wh|^u&zժUq]r?&q˶Ѣ[h @ @ @R | /\wu—G}t 2&LW/_^^Bâ5k^|ŨynVݏ[Pg |k RG6ΞSp?<1=L93}x"nqMB5F4z; :iDaW\qE"Y@uBYe{1{+U%yFC)3NV*Ga=T?{T'l @ @ @4x_"q |M8 >N=Q|I'E 999!~C4,oWXuQ\ҠЃ=®EЬY7|3(c w {'B:(~qƅRDOVVV(Έ_aKksMtTaK1U'έf-8~5%ldcOnSP*ѵo҄Ā{{#_J4ܺ5kլM @ @ @ @ .ɬ<|O?lذ wM憲!C=l8ܡp5/&m4 76hҤɝwYdiBbzӦM_{m&lސ{ U'|'ѽZhQ|A8KpL>CRibrW9~DxvI%wʙϭ]߲󞿸Ž JS@ @ @ @J,6T ž E>f˖-8+rʨBe@Y!9#9"Vd+:ujt)ѸqYdvP8KoƺuffΜ5gϞ=gΜaPnݧz_?}~f(GuB,td2p:<&]n4~EƂt#gF'@ @ @ @@Xt 7=zt8`gҏJ /_ugEI/r42###=ZlY8!jK. ')s1 %dҹ~֌瞙 ߾V|={ǛEuZln=sZW#_ 7dծ]` @ @ @<dɒ~(p`A4r޼y}}wwu&=AB]B9|?И Qg8 ѥdho_~YLPiӦ?Cw9Zq6j(~b g[˿32e:uJ0Jꄚlvdw:!osnnd&C @ @ @&6lX^EO<91 ??}(\QF|J(8ß~Dg`ժUWߡ!~C(_ʊ'I>&NO4eʔY|V֖W_)⋜5kYguv-.c} g:g6VZd{r$&wru]K(o}Mi[(.>hڡs|UQ @ @ @ PIz{/?#:뮻k-'tRT1bDP!>fȑ0'akP'5j.5.?3a/b?///>C^{LJ$LII"߇~;D{4 Dj5lU ?U @ @ @T <lj|pƍ5'm۶{ H\5k}ً.Ѱk׾\rɮ~]-{:e01Dﱌh߅D-NrM5~^z$ #@ @ @ @2n fΜV(`ᘆ~Eaw+>:`(.EbŊRpʆOƄo_M7:sM租~z(SX e_";a,9A޺-{|W۔k,ϪդiYL\saxSL @ @ @J/NG$3t0mڴPPa w}w3+GuTuΎƗ:!l G}'{۴WM4… oƛo9cƌ 3O>C WԩՒN(X*ǿu9|ȸ1';:jIϫV-.ɉ @ @ @ @r*/7N5# G;D cswܱ,,5OUֱIaܴi?|B9sꫡ_^zutcۢR%>Dw2'쓉κZۏ6%,wBZToE| @ @ @^ #ğqc7ExG'Xƍ$\};w^;o:VPj2M\:kۗy J=?77>>j[b'*V_ @ @ @ @ L0!zvExNXlY8!\}ז.Uv 'ħ" {G41ܰA ODIҤIQAÆ o3<3g"Y@uBJ?1/7w+mt%-YtU޲Y|zf1؎aXM @ @ @*>-Pf"1n.mB?Cr-ohnvvv8m!j}] ɓ'tkn◢1?> gώT'?z'7}nW\[\?̬g ke'0/gM|d&b @ @ @*@HK.?ABI'<+W|碞SO=5{_}YdrK~xfΝÞU>Ƃf kvm762~ [f䜷FDjjSCJw͚'$]ߐ:!(&@ @ @ @ ꨣ E]tF=={ {'DDpG[&E} Ykgխbyo+&^>U{'5 @ @ @?|J0Б E %QuBT=Fw?2ȹuǏO\裏zIhѢEZo:?E5^ONmڴ o:uj4iӦO<Ć[\}Æ oK̈PvVg "|}‚Je T'EͭݴYO ?.\㳱f5+h<~ @ @ @*@͚5î a/d# _X">C]vl,{U|J">Gx[n9/O>dcCnO1osW]uU&ᾧrСC܆_RPOnq'Ū2:WD]L"[އh8gnw܀o4O4&A/ @ @ @@ਣ*((ګWƍ_}э5J~ l s 1jժSNv/C5?*ϟtҰC>OX@H  x~o ;1^:j۶v?|z M,{SuB +DYY;IݓXF,8i[7o٩Kfͣ @ @ @%K,.s9Qdj'a3~$9aժU US_LyF 7l/ú5k\L^nȁ}53IɞM @ @ @ @`3ޡCo3D(#N(ZҢ[w7_;uWG= /'gG|nxߴc @ @ @(R ''. 4( 8١x45o͏ 3ff|>iS?XFޓNe= @ @ @E 6O=ҹUY;]w}gy}ڪG.^ղ{ O @ @ @\`ŊD⋛4iR%E N(t?u`)juzM0-6e9.ݼE6ضm~'7ЩiM!@ @ @ @Ν;2CT'+7uޖf\ @ @ @T`O?g͚5++T'TķbM @ @ @ 7n|W~k֬i۶ڡC.]lT'[f @ @ @(w:u-l7<S @ @ @ @L@u&wc @ @ @ NL^$@ @ @ @L@u&wc @ @ @ NL^$@ @ @ @L@u&wc @ @ @ NL^$@ @ @ @L@u&wc @ @ @ NL^$@ @ @ @L@u&wc @ @ @ NL^$@ @ @ @L@u&wc @ @ @ NL^$@ @ @ @L@u&wc @ @ @ TLyQF1"''׹ݯvqjr# @ @ @|RNCiB߾}SN" @ @ @ PY쐲79z咈 @ @ @T" ){zJY. @ @ @ @r 4(O+8ᗍѧO#G1"''')2W_9sf:  @ @ @ @ NH  ʌ#:b @ @ @ @@Z 8!-_E @ @ @ @4PF/R  @ @ @ @@Z NHf @ @ @ @ T'˲T @ @ @ Y4 @ @ @H# i, @ @ @ꄴ|mM @ @ @H@uB,K%@ @ @ @i):!-_E @ @ @ @4PF/R  @ @ @ @@Z NHf @ @ @ @ T'˲T @ @ @ Y4 @ @ @H# i, @ @ @ꄴ|mM @ @ @HZu\jʕy³gTɨ^~J#gJ&  @ @ @TJ .b[*A ʾYU@ @ @ @X?*MHB#gJ&  @ @ @Tb e&}GԮP6 @ @ @|*;zԈޞŕGԮP6 @ @ @*k]уNR +)\T @ @ @ PT'T[PPJV/Z•G.O* @ @ @*p?f~%RșIB @ @ @ꄊN?k٨ng[_F,.AX9Kp{C  @ @ @ @`PP~rW9~Ě[q}味K2 @ @ @67 荿sNX. 7G}q味쫒 @ @ @6+ ux)=XM;{me_Yy,d @ @ @ @M@uBx˿3Kɬdz)#gd: @ @ @l6{{r$u:w-#gd: @ @ @l6Cvb-o ./#gW% @ @ @l6{јokb7}ce})s3= @ @ @@YOgkY=r`u[)#gd: @ @ @l6/[|Wp̉?)e_  @ @ @ 9 Ndo꓏Ljow})味쫒 @ @ @6s `o_Gk4آK)e\ @ @ @ @ Ny]"qN_re\Gy,L'@ @ @ @  7áW.qMwߣז}味쫒 @ @ @ F]ժǫfeq味K2 @ @ @DբH*U ڪ{c??O?]*Ŀb*m;ziֹkٌ$@ @ @ @PPjr3j`4!L}__}ŋ.^0:?v'7i<>FL @ @ @R.Jk.[4Ӓfry*M Ow' . @ @ @ @PJzԈ^҄aO:j51c߼9o%= @ @ @ @ UNvHd*ZAURPҤrIѬv?gp^7ܾ]-V|Mi_~e}wqXANx @ @ @ Z LAPzт{5UE-;ߺM>;x+=sZ߽}yh @ @ @P)LM cW'bU p{4!AzjYQ7o" @ @ @P@uB 1Sjc,f&qn,iF,."\8a\d׎m8&jn4ݽNO.^2mj @ @ @ @ NH!fYSZ5r`ܵD@-LঝDƂ{` @ @ @J@uB$Str~sdIW|M^Κh|[GƂ7CR5M1 @ @ @HTI5ό瞙, (c-3GS2)7,imo  @ @ @ @@T'JLy3g&RdVsYu(cfj[.2xBD |QOFf۪N< @ @ @ J ,]:)'{Ibz!W7ܵM4k弹o^xv0w ;GM @ @ @Hb2'혷[\^D]/^mSxr޷QO"] +5욨) @ @ @ @tT`Gc>Y7}c,ɪ]?~ߡVL$Ӟy4lsۄJ%ӧysԊofG̨Z]ku# @ @ @ @PZϒeY=r`ui=nmJ[ؑc– }f|VVm{Z%"@ @ @ @(zi.:g1';C4eÇhڱK2\V=Lb! @ @ @ @JoWƙS|dO&mպ.c0=?/ӻo{ ?D7|_Jb! @ @ @ @Nv(%\-5Kc{1\uhp @ @ @ B+BMmoKEkռ[-;[ziLp?gMF`^Yx @ @ @J@uB$7}^zw'ZJA~ޤ?QOA>ٹiE^I @ @ @.dV =nxTU8` ޫ H;`A]]{ww]{gukeU^+6T)+C ?uIBʤg;=3,͹M~M9iȳ @ @ @ @*V =8/fq-/x ;w؋}>95 @ @ @ @xCIJ}lS ^E=MJ}.foY n٪^ЦAO @ @ @*:bjF]?,B  @ P8ſY*=oӖ7l(K  @ @mI@u¶t5 @*>_bbRr>.@IDATkԨiN=k^{Rɞ/>tã9W=:JnM%[wmz ?$%o_?V,[|mAF͟`aTB5o=ξ/Jo35ؕwt @ @`?޳wD @\SW,[~3u7c[o?tbRRRѓ6/S-'Ͽ\ fO=03f 3OY٘~ݚ3n)f} Yb 3Ag7PC@ @/:_#+$@ @,Nyag_p>m.|QޫOj@1KsrBz 2I*6yG @ N( @ M⃯d] *"~ӬcSƨLUh(&co:{JcrsVLm&Y1 @H,C @ @|o*e8;J!0ΛQ)jpy @ G q4 @N`57_t Dr lޔ̽WTε[u$og$ @JGJլ @(e נITV.[xo̜UvAsݚse{hΜp-pilzLUh(U~ܻ{ρgp8J @ P %3 @qڻofhY-yc?ѱ}ƍ~qsCjE׶P{.ʼnIIIEsEpW @ Pr %74 @JWeێ?Oߊ9SkOv=oNX$ؘ!VMZݻpٕ˗Koجq6ZpC+D,Y8'!!1$+߼iUkV]V]~x/buFSVX6nQaӦ-ڵٮks$^9cw:dž}8YJYlQIm $)8$  @ @`J @_ 11;cH kV3׮YnT>Ǎ×Z4Pν>ժ]C5׭Y3&~5*KذnuT:sAǜ9PnsL!7yWkmc6}FXa37?*9̞<{o{ۂ'!lGѧߡ'璅s?}x_gmٻFj`v?'巿EPD*Gwޛ5u| JLv=%+NX6Ju_n9<O~łr=5*BN]JK~, @B ! @ZVz{wgMYiS}˦Ofy3'c/wXT_ϯ Ңh_,M׹~ylqE)dB!OZ݊q,9 @*  @L;1~f+^xAl2ȼ]M6y4d%r8{>y3|6 uvgG}6 ~C(tuH7Z @ @ GUV$o|̘1#G,$p *, @@hиy_d:>χ4m١km:cjrMW>K#Oyqd37>z~;֬UgŲſΟȨ3Of̾ߡ뮃>773ңj࿤֪ۡ}ǞQ$޼w8Mr0|ǝ}Cd&M8!!qGثI֬mѼ񟼹d؞F}|P̞+v%A&f,vs0kw[P=wM(9rK-^3碞E7Ř0'O>-`IYrYʡ*VOZ^ y,9/ @ꄸ]4aРAqD @K ';lXfꕵ6G5|ya3 z)z03mn:cтa&7xuvZſ̉~75\T8a>?a>7NeWn>N8a!`'[m9?|ɇn9+Pcт? ^p`nP#u{qU%D&x~0S6}Iàg׈  x?+sr#AOq;ϯY,FVz'w÷5rY?o'G& Gs AqԹ4ټy5g27y.aЩauL-qݓ )<$"\ԃm"sgNl}U䃟vo؞q,=5oꁠ"4!8']ZBs~_L2D 󞴸Gѡs/=|5Qɭ6KsףO"v]z=$(M`}A1Ma '.~IҜ @U]@uB> \&"@ @@>P3~[4^ڤ>Amh3=|]&c' }6 ׆} eێ_qqg ~~Oyu7_KNN]I+psg̍iS (c1o<yܸz\rgRr[*߅wh쨠`%!7Srf.^>jW%*fa|س֪{ͽծS?iդE|l4ng8$+j @UJ Rz=zȑ#337xM^5jg'@ @ W jPsv]mԤe~=$+> $$o6nu4h  =._25$//{V._yc-M|W @  @/]w㦭#k2#MYe ΄B zC\}|sfo4Qa{I]vw 3 ԩ(^gQ=7kθϳ:''WQQgoڢ]T&h9aT8"G\OGtͺ5Qfa+CVVf2kԌ6K{r&Y @TM"jy @8/\S?wX#&njn;_j쫿)C͜p='?^ϳC%J߻&}3&[wݷS=qN=vZkey,d.zkSk.x˖ۡI1lq#אW52g\zZGE |/y.#2tfq`m->}[};٪]س6oڔ\? C]|d ,9) @mO @ P/g%@ @@PP? @ #]iRr~. ~*~u‚S_~ƨק#_i.v6qo?wCDߨ7e QG7oA'F%su:n<`єQ9[f=neO_qBQ链,"KNGLeKw{pT>1ݗ=Ԯc歷W̑'÷\"-0luтQb̈\FM[Efq{&Y vv @TY U{ @TנIj֭Xp΂Y?~><)44jֹ^3*PMw;ߢ {W\p;tON)+3C>gd'T0صO]2u{}hd<3>rn9նx^@cd)=>59s^iV.oG\8*4;d%HyEwsEZa~VbtuU~ݚٌ !ϳj27R]  @ @ ?  @ @ u{cu-u(~s<9!I>8go?uץ ~mrrJԆح):aŲEO7iѮ~æΟ1yبywߥ8aԭ(g̿jթ:ܛuvx|_c{=sbbR 凯`ILQ_~8"(>:ovמ5xUԂau5U/9NTa_~OJ|Ea|YSxո rYM @  @;}7?cA_#y޿Cҁ_ψlf3vdc/ǽ̍v|TK}D'<"|DԴelܬunjlX1/$$$dG7_ ң .٫it[9&x}mձ[=w))=6 Y^}iyi ?7œ|&Y+tv @TA*e @T^ǟs5WNE&-[-hPpj֪y(g7o,|wq{Aw{h j.Sξ.;9seK~JRr]oTO=V3 VURRkni)=̓/}^{ouQ=Bv '-nI @UY@uBU; @I xss5V:3|rLJ7Þ""lmDut?ǣaH͊g`Gڠqxl)gpgCM>]{FM[G8. 2>bfu^{ƨ]v C*`4{C(Du7Z @ @j lS&wM @ |֬vϣӯ~ SaW-.kTjٶ^q 7ϯg='wkӖߡkKo}{߉ډ!O_pSAEQ*NN v7%%&%5?]kN{ ×#Vl)z7҂7jmmjzqWܛa'\]gJ 3rϽ:繀"aU<; ͡$fB @@BNN :W^l+ؼ  @S`/s&pO/%c`5kШYPCC:tUegggO)̙>ad[*}[q.;we߶m5VZ4X۪K7nX_=f5Уq"ܿ='~=fΛ5Rk5mپv]|R&-K8yiSlڔ5cҗ?|5j^ڤU+Y7mФ^&@z6^F E^JYYǽX[z5m}] 9~æ% 1 @M+~as1#F~衇rǟwy>`窄#ٍ+(%oڼ~}JݺtWcv @CE[?'~Lm~SEP^ժ}dEg1XaiS$'tuUjsfJJ= ^u}AuwM @ @ @Q 1ssguVoH_1} cKbk1d @ @ @ @@T'K8d̉suB6tZMBX|֚{HC2 @ @ @ @ .y|]yMUYY-19v[ۡV?yռE!ҧO}vޔ¤ @ @ @K@uB$<r7kW#[)v +%$&}Ͽ,A?ʋ6gn=/lN,&@ @ @ @qd0g:4cqř #^vUTiB=#)g~a&6X!2/&@ @ @ @%PPB_9'-ܠc<?NXvg˛%urdSL @ @ @":!.ř$;!Fj63EĘ5ѪVzoԻ97EϕبkE[oHl=ܸjפΑM1 @ @ @@I(ETI2 qW￙GiB)';=QgvpTɃϮh/ yuY¦ @ @ @K@uB$69T', [?덗_ܣw^jta3?LLN9g OvgoЩKAi6viӧMYW ;3??L5礽R]/:D  @ @ @ @ ~gY2EvѰ'doH_WN{6~p'}ڰQT4g`[ﮗ] @ @ @ @8 xC1 ;UNvso/cKpGaBu$+ӿB?O#҄}cRR 9n @ @ @ @|]ԑ[`ӆ 22Wel޼絷jڬ? ?~ua}lkoKY3d]ݷ]3#U`[vI1 @ @ @ꄸn}”Z\~E0wK'~۴~/0Ј.y9993F\רÝ9iլyT^ @ @ @]NZ*&&%mwS/flv4p'G&4ܱۑo<&Ģ @ @ @ @@i;4TKe]{DλnfT<;eM~N>3ű  @ @ @ @@ N(UxNhM9欬oV-'X\^n @ @ @ @PP6q8KԆ :vsϯhӏDjwAoOvL  @ @ @ @@ N(3꒞(}OS4ܱ[d37N{҄`˄b{ @ @ @ @2PPf;/>uvC ӷNhSrvǗΐRWF @ @ @ @rH,V6's~}hdgl3!)fnŵWdY{2S?  @ @ @ @<T'~Jv-'{G1oNT^ @ @ @K%Yy6gey~-[rZ1'?{Edz~N\ܠcEɘqa֚չY_!ϼ1JH @ @ @&:!nEhyZȷu- |Rj!O00[r)M{ jLD @ @ @ @xC\3Icvڱ8SČ=֯ xTiBxqz9ll  @ @ @ @@T'K󬜓i1 +|pfll>mO @ @ @ G q,T{'ĥ:aӏd^.q~AҧO @ @ @ /xMd d̝iعK;X0vT8n ]O:>Gsrr† @ @ @I@uB >MwBRԺm}-FlZ7aig'$n}cu6s8J@ @ @ @JC`_`Y͙yrЩ0- > @ @ @ PN(4!{SVv17\˧c3f_44ڣq wRVWW}Sm6`3[zv/V  @ @ @ @@ )c4cƼ9_\sQl}ʄĠ`oo?C~i47^={gr H[Q]=- 3  @ @ @ @@';ĚE&c4 }^f A~|؃Gq%QQſz ~i]UZjɷ_}zŹ#m7_ @ @ @ @4T'\9ܜac-^ܣw^ϳgf0T'6eA3X6ysrr I @ @ @J.%7, Ov7ԥàCnRΊӦ,덫(;gث8*7\"̬Yfjhո[qxS%vo_@ @ @ @(:!E*cNZd ~rxLF@IDAT_x 6~p'}ڰQdc?uq{pG6m5kgI|tҗɏn 3 @ @ @ /OvdoH=҄pjo~GIo}s֮ޔ Ԛ6z/E&ul7䰣?a箑C*w @ @ @ @@T'Klڰa_v_tQjбs? g۴~}ٸ*#`놵`، w'$&e?ljaS@ @ @ @%/5y*RV˯j^vܑo/]nru|6CsI^{}QT2Y]KaF7s @ @ @ @;!.>IbRvy%}6S ܠQ%$$D%cEoW?!@ @ @ @PPlظkS[$l&$ AШsf~qUa'@ @ @ @PPlhMEF͆;vl'i6չy;%} |vCӝvgi ޘm#¼ @ @ @D@uBI3Y>+W_[kf`ß {&$%ߡS W-Ꮻ9GyqM1 @ @ @ge:lU vfv7ݬkf~ϥOI))a3n!af/.~|3؜=j5oٸ{) @ @ @ @P/"ӦaM}}a&6Xî I5nX n'ժ|~EAAD&:}kf԰) @ @ @ @P/"̳G'TL~' |YFi:U|[7sEڌC|u?at>İ) @ @ @ @qH\*@;cc?5?7Gg!5ݧY]kh>eS&Ӟ2'{sسV\re، >23VM8b]{y~}c }؄'!!Ꮜ @ @ @O@uB,2SOI9nLCgRGTS'ϣAN6Ot 5/ϛkAAŏ=N;;  @ @ @';8Smn{~3WΚrNZFMR5nܭglI)/Ğ8fvN\2ÑGjܵ%$&lڬv~!u(C @ @ @.:!ř0(wiYuvU`/  @ @ @ @@ xC @ @ @P3@ @ @ @5; @ @ @ :g @ @ @(] kv @ @ @ @@u @ @ @ PJ @ @ @ @ @ @ @ @tT'  @ @ @ @ > @ @ @ @@ N(]_ @ @ @ @| @ @ @ @PPf'@ @ @ @T'  @ @ @ @+\Wnj3rm}O0a{G @ @ @ꄸi  t&"@ @ @ @ۊ';J;6ns @ @ @lCv1 LD @ @ @!Ov8pѣGI+DF={vXU @ @ @ @@Pk(sƊ1СCU'TKa @ @ @P)/E @ @ @ @J$:],K%@ @ @ @R@uBlM @ @ @*Jt, @ @ @TJ Y4 @ @ @D*ŲT @ @ @ P)T'Tf @ @ @ @ NDR  @ @ @ @@PP)/E @ @ @ @J$:],K%@ @ @ @R@uBlM @ @ @*Jt, @ @ @TJ Y4 @ @ @D*ŲT @ @ @ P)T'Tf @ @ @ @ NDR  @ @ @ @@PP)/E @ @ @ @J$:^ +ҳ֮, @ @ @ PtַrgҼQfN[9'-kd)jjmcv8q/g̙rvښ?6jV]?݀!II~LM @ @ @~(ڷݿg7^>mJԼYW͟av_AGɳ>c]?WU ;dLϘ4t햭wo;sqxT@ @ @ @JIJ ~tY#O:24!j?mfJdiBT꒑q͚C @ @ @ @ Yپi?5VVvٽfQ]pzƼ9Qq:؜͛"sy#lʯ< @ @ @(ꄒɏ?0az~މgc>OpϤԩ Qp an}opiKu3OY+ۄvm @ @ @ @ $}FR`uI5<=C#n٪4'xê2aۯ.{37֬ +$׬Yq}voyІKs?rÁ @ @ @ G{'hSM|Mׅc҄P?r i/=̍gL+aQVX惠iC}LN)"@ @ @ @qPWBO' tǜ6cf;i0|ʤ0ZNvǒWQAtH;MxD @ @ @ @ N(aqf#YW#{q^txpx(}Ԝ? |ڵc;f'5t>zyG/ @ @ @ @qH\*uvh7`p/z7<6U[WٛDN }^GY @ @ @[@uB?psV֒ w?ĭobQnݦvGE~idF6klUg7uRjʳ$ @ @ @(ֿ/'t7v5<)u5ҽ˱'w?=b߲7f SА9apT[[dSL @ @ @":!.Ed_o >%geAի|UoO=AfƊ0:F6 klY~"@ @ @ @b $sa%X^C,M^?W +#354l6hy4؃!)&@ @ @ @qwB\6I?:X?Z? jhո[qxS%vo)3NHyƖ .)C @ @ @ @xVQ ~}u\k,G!}Ym0CL 5k oacĦy1 @ @ @(';D8c֮ޔ52)ᯍػ𨪴㤒$R$4C7" *XP*U,kS)AjB' @};L&y9)ߌlsΗs ׷ko\% v==ߡ̄.n&i%+h(#       ` v90?=8KӚj"[\6zbW7!yQHPZ(h[U       8D00wh> Z~6zzN0:k Eyڪw Z        ;1z...yO QUFUY ygvP催LU Z         ;Q0Z^9s:uJrTO2 ir!3!^aJ@@@@@@@F&__; mmoxS՚rN=||[2d:,2c;AA@@@@@@@Qd'8J҆yiQW[PZu%7RM6BډcO@م&        TF968vdꑃjybm2A=tW3cB 5|ePM@@@@@@@ ѳs6@H9mD yg`섈TNoݨ-秧'ީZV)        @iTa}q)]ؚq+hv謭6*rhlU.pK.4>B#       Hg䎜, 7zrhgvlUU|5 Rphs[$i.U5 wN[CרR@@@@@@@@d'8ӆ:>Eӻd3K&/lzfByw//U5"ߪ{\mD O~⨊nU       cNpfLp̎-J9|B%ś^{vӫOP}#ORUUhҳO`.un+QSA vET!uONUUC'       Ƽ((qK77̚.nCOX{kWϺIL8d.=RaO:        P*瀱 ue+}ݧ}ˆy`jj?otyO1 nѪv7nl"       c8}œ/vؕKbw<+񴋫wpHFM j>l6Mݨ7؜ow3SEg&$iĿY-[6 Ct!:#       P USO?6O_^/So~ @@@@@@@;84        d'؀EW@@@@@@@C;       6`]@@@@@@@@@c        @v XtE@@@@@@@;N!        ` 6`@@@@@@@ ;4        d'؀EW@@@@@@@C;       6`]@@@@@@@@@c        @v XtE@@@@@@@;N!        ` 6`@@@@@@@pc CXbŒ%KPK;w4c1;?k&       PK9`-]9vfHj°a6]m(ѥgԆF@@@@@@@dZas1        {1 ⰹ@@@@@@@Hb:tK,sؤ1Ѳeˎ=j\KVnA@@@@@@+P{GNp c &N޽~kd       :fvfT8R}o@@@@@@@K:       \d'\<       @u P]\@@@@@@@KUK@@@@@@@.K        p p7       %@vBuIs@@@@@@@.U.WF@@@@@@@N.i       *@v¥s       T %u@@@@@@@TNT_y@@@@@@@ ;        +}#       P]u!c@ny7Ϻ6̺YYEץu   %!~nW^]v"   d'XoU=K-sboiG;\.s 3aǎwuwu`zdg1fG@@@V ,A]*   $6]f-^Gӵߘ93N{ߴ-ZbD`X:#       `}@ՏLYrXcjiǏ,8ٺMՍ>/ʦ!tF@@@@@@@d'T7\w_fiJFxIqJ;qLbɞϦ[ٙn       8J%i<{d4#]:ui::}*~͊uO?TaY^yzyQVϞY5ur:%V       `Y8SNrAn^ޣ2OUj4k;-2/OoޠJJJ$5!'5       cNp E0'[ <GؾFV+,χqaF`t@@@@@@@pi\yi{To>ltTX#|ГkVmS^$iϮM>cjjq=t˅F@@pvt뻻;_٩>>>Tr#`FFLQ^=L&ʒS1@@@p2Zm7dwU.bHp>fIqk[_dg/2 4L9]%#  'f͚B]kϞ=ٶ.W...VUSa|]ܷo߹stH"%#a۶mǎꪏ<ڵk˖-UXek/}8K(((6I˫Yf&'N:t(66V{!AAAmiРI(?~\HuСCΝ-I(#   d'؁!qYh6dWhݡ}Vz51Qnrv)   V DGGkgIr0f'ט 1n- mذ!**8L ?_~7 7Ut٦K"߿i&cZy 9أGm۪ gΜYnӧ׏\K.}1'Oť*2HjŞ={ꪈc"    Py*oh EgvlQ:y5 xGvS)Y4?/M=뷊֌   tVbN:`oY[Y… \Xl$[o+Ws2ٽ{v=ڂd9rpҥK e@@@p@G8J̣vzB5ccgɜ@@@T@6$05˗?t=f' OMP3H恜dX`h"A7zYiYmR@@@@G (I9i-y~Mc6=K2Ni/ּӐ+~Q+NO@@@XvkHJJڶmSNj?Rrŋ&&חl:國_Ur0 A"$8 @@@';TО6a\ܤU ~ ulw'c;ML&_gsRF@@p~^ ͕}/s^zU}͟#tҠAOOϬ;v&w׮];m\r]DaÆ 'O4g޽ݺ91>>>!!YE|}}srrڪ   8PbZ;Uv)տyK)ǭ^S2P~f&I>jlyĭӿ$   P#wl^]]N|XjBjjI`a!9LA릒:T.y r^ ٌ!##CMsw/ԩSr<ܲ;u7oVem!88X97n-6lTm    @Nvp S奕~z" rï701y΅[TIוӖOXRVĿT@@@V@v 2d65Aڱc>}d˷>گ 37j`Sve1h mj1c5 GE*4inhٲ&H5$$[Շ   8Vk,䥦̄S'שSp84Cg^M=mgzxAWX'L6ni;V]   BkԨQn[pΝeK rsUxСvS9ayyy!r).:HAuASU+7nܨk1]TeyPn]c\Kgff    @%N$=õ q)ZpsW o" rϗ~@ӛ * 昪7C5Q@@@]͛77}߸ly.* l]rhqm۶-ZC]v5FnrfBrcvBBB:x l߾iT ٬bѢEڅQF@@@F&)*., p5{Qgs:xq+)ըzِDSYԃqq?֭@    P  ԰aCs;m9A)'>&1: Ja߇:  Uُ8SNƠHR@@@p aatW[dpSԤ[\6zY[{w% 2 '=dX߁   @(oӍh%[ a j14׏D$iӦmڴiժƲ!@D@@@@2X; „yÖo֢}W/V]L.|_V   NNr#[9j!..nժU_~+4ݮX,]@NN-!Dv"4 @@@ ynLq7WɈ L٨jvMTuYn   @mOŚ+¦uJAttY?[ٔ]+riX??_9N0A@@@PyCf7/?aiBҿ:w0)1uINRw}}V]!)j&RLMN7xk#@@@ XlZv޽%G?u_ǍFٔF-n 0 iփ2   m84K]ٚ섀4dsn95/qʯj;}Kv2   `@aaMGٱo199_?ϟrUrĉ===M͞dѲeKq˗+O]L]X0    @%N$=i}6Qʖ >TƪL@@@~}v9f2XmW^ONNƁ ֭nݺ>ڵkӦ1nM$ -;;[^5WWK']`t#   @N3Gv;azDTlvjmؾ*S@@@jyv1:r  ҥlqܹcǎ>},BRR驅frϜ9cwv ,zƍ`v@@@@2d'TFα]kG&;!#!8?O d't}JTB~]y]UW`J@@@$mJc䩼3UѲ%@q`eӆ _~joC wVMNE $cȞ={,d'>|j   :t Q ;kbb/qb[D'CgUm=v*WX_h\=DC   `܁8x$`- lٲEw_Y ֠AϺ!KZz)9'iӦ&?~|ӦM&IȸMA }1U׎;tRE@@@X:g!`oXxGߟٱUUv|ji$cR@@@jcbbQYYY-p胮VhMrrɓKSHHc@bXx1@Fegg\2ڵ*BQQт TT_tq    (8d:&RSbW,йd3_Zu/D̄x;^^J@@@7omʲeN>ݤI@)HHH $AسF"UlI5 <{.]گ_mʱ&$ظq6b*7jH+mDyyy?S^dZ9A"pرu:KU`xxx˖-e1$5a޼y]t|M/t="   NpmfLhA61 ;c}C@PLM%ś_~o 47b$U   P _sqݵ,~tq'Vݲcvd!,_\}d9dAr RRRdOٱ@g"`-$"9hRXbիeNIo^w D߾}O8a|dS!tץ    ;6L:~b/j;cjHA4>w`o]~]SxcwPJ[)!  T@ݺu[ju+?[-[6]"qHe ]k] uqJF#TO8p 'ѩS{AAA`&@@@sGD~jD7,Y?y~Sw5amhQ~~LjB:}^y;8[,"  A>e磌2>z*Z6׾jӦ7֫WoرvL+ ]wqN>A0Fd={m"    ;2zwล_fD.nCOXә>   k݇.G XVmUl3flN` C )oduL4)""Ƹ$?tIY݉I$"7ȑf[ "   @e8١2z۰][6{;-{'7can@D:G@@y ~-lܸ+nݺwƦTݲoy׮]Ȩ+<)F!'2l߾]Ώ0l 3%AAdؿv %#cǎr؄$[    @\JJJ*? 3T^ ?##veJ<RQ~߬E/a &LS?)sGC"@IDAT5Ɖ   @aaa|||zzzVVe-ڗv{e ©S$M!///??_KZLpppXXX``>iiiB}̜.AsF7o.6MXTT{ Ydvvl aH΄$Lȴ6MEg@@@"`SN1cixO? 9|!Y^O?6O_gY@@@(_@a߲e۝-[H8ew}2e8d6&A@@@8Iz+z"       =d'أ@@@@@@@^       `c@@@@@@@@z'       #@v=jA@@@@@@@Nފ        ` 1@@@@@@@ ;z+z"       =d'أ@@@@@@@^       `c@@@@@@@@zw@@@@@@@t?sAA.h9rDuTM@@@@@@@ |N5,cҤI~c%s̎gs)))_LԄaÆ]LwĽ       J`sUU Znݺi#/ڵk׮IfdVr\L       P{$-NpK0dD       J`\cgs잊33PwXdI^^ZlѣGw8U^Íq"       P{6/K]FFFڽ.] vwd'8@@@@@@@jwi/֍ D@@@@@@@@/0qDwww}Ԋ4ikejƢ@@@@@@@S $$dԨQvMF1V !;VL,@@@@@@@w@}j b       C@vA i߾lJ v&;4       E(1i$nL(Ԯd'Ԯ׋"      [i- (DzPC@@@@@@@]vr)\KPK_8       wy볾:a7w'\KB@@ L?VTTX׻^HZun9o'1׭-I U@@@pĉ|BӺKO}.VEM9Yף^=GQ1  QF-Zp#=-ZNpЂ9'vp2WO>zxWw^cʡ#SHk*~6CG6~<@@@ S[{]T54MuNI>-޲B.0Lrss0ٚ }zmӲKꈱ];=$%B?,SRR2 N!QyCXXgvC{7%<8V    0y O5/a_EcmytX\{L~c:~Ӧ6RXbr'k[&mookXۇ2  8cr™}?z r]os;65Utܜwj]UcmrO{tmO@Lnl Y xBiU=\@@P@E JN.VNi>ZvXoG,u15Aw iǏ,8lkGl9q}SfK]{mʼjJ"  @ xxxL82UXp4P/מK"|t;.^R\NU(/ocOo^"w 3cǯYil"  N( {ſh9 צ[Ҏ p ]z1Q,_(ӊS #MGcvZC+   @ X>rk.'dj/s=_|iKr# ZGYOůY$64J[|Q{m6dD@>d:vP쪥{QIQJW{M8ԑ  N, 'k>aOpfN:ɉq幺 V/;l56fw ey( P+.U: ;p:   -Э[={g)ʄVg]N+'9I ݼG|3*"zMBrGprCz[&e)e }$lE!]/W2ӎ25$Yԃ|Փ  Tco Hw!!=5YGmYqhϦ"]fg}3Q3r>r}3㕌68{PMr>)ؐ&UDW8g6֢|\xډTHXK]jm8r`鸿 w]]AM   @  = rd'AaN_RTS`ÿqސ+T$zLcvy>Mצ&:Fr LkWW\\̜H@@(оk&0G>{ˍ}Xèn۹I"fulG-YNgsK’NH;_{N.W{˔/{};D^q5   P&Mzꩧ /p5%^s9N%/-uW_j>ltv!zzr rm\wS$:um5fwn~a䧧iض@@@j\I/~'oضva1% ~~1+H;wt_zJrDxK^2.|D޺vUSEG1`DU٤=A`J(4:+dgI8* uVj3 %fIqfK⢢szry&sv6ʳ"  @M sG^yQdexs߲j8a^3xCyW=X.SNa&VY ^zTm^^DNP^ev]مQfAS3 ݦt=uboJ<0%QxxvFR,_[/߃FޱSEv]OnZ5_)ަӕrQcSā&s>{YPP7)"yxaL?/Ax?S]EDW9pD~C\޺pr3TOuqIh6dWhݡ}?bP:u2O,U? jX[U&$    `Ac-^X'GEZTXx'sx-+#XyN/UnSߺfќ^0ɒVIwpTvfl.tڠ|pFmm>i>޶ǁh[.j*ؿGO6â g]SrL޲C?ND{ߍ߰oJP ~# 7Byu [~Ofˇob0*w^yC>f]/z 'M6QX8sڒy>}N0vpx׵pO/Y'rTy!32G+ѷ<2|}.ⷖ   PѣM=, G]L\/-RTPpfڎwޫAuO?nMIk |TY .kRF@@0Vkٞ oO˩ W/x鿋Se[N  yzh_c uJ,֫7[ݻԄ2Kl5{C7yd߿)ݼj5'(-ke,&@@@nݺEFFJOr1qnKE}ÛhهG~|~x7lױMw| x#?͈;n7ҿ糯k ;{;F}ot{3*@@pB:w&2r4z™o+eSzcvnBoK~u=i3jӲ#{t_1f`=JV匆5VM"gO9neٽQu.Ad\hf/y5 oձۀsoM=h _xh#֔~rX@yGkмugir+-fnҢ}~M/ Fݶ\,1϶vFtdyWQUe67XϯA޲BuKr]g%s?MUO/]6>w䉘Bc?0盷$M[xD@@@;d˄{8A|LcCN/n6   TfOv}ݳ2R1Kɳf,vqokogJJA)n}ynyЮ=|ܽu|T^RemAxn﵈N=lĘsAMo鞃7d'jja ~lc!1$n&.Y   &Mz埶Epp yij 8zmƀj\xMOL-))Ƶ尾o\)gL~rs͛W3iOJB~ͯ4Ɖo@@pRNwCǖ2<eg?N?w/SFj֬U'/?ugOǞOJvhW6Ad,Zn65Avػ%cHiaWQLɏ}qOx~O]Y~oi}^h oU0jr{ԮkW?[ݣ(IM"[JHw61AcJdoXX\{˖! _ixm:wSgEƠM|kt tF@@ ud'rd]|6jxko~s}_2KL$k\xW]o@@p^O #+~dz; AuGr<ĵo jGl2ԸoV#hzwn1R~}n (R#&r럯yӃr0v{=Jʉûu+.h6o5/$#A̛ʪ 0/|? /.Uux!䱃{ʜQbD!7j0ID^ڈ,;*"2*xwTU?:PAUUAϫ!NRwG@@w]Ij d'N[‡o=qwH3?߶蔸/a=rj EEQ3>սuRvmr'`X@@@E 7t *o}]7]wՠ&?Gr¡}[Bڠ]e足XA{Dy)\#sgw]7׿Xݗ.ԭc򨾼!elڿsڹP0v q: ev@@@l ;&.t.*.,M=f_ omm9Wn hosSLcyi{37hӮȱ=z선N]ݽlYyfǖyC<˚lu)    PKll[d;g[AmD7iv3k$ҶsouSOI8"ѻ$+%;:to,4-R#&]z m=rPL=;laHx2ϫOw1"]{ }/TձuKg'sh ]cv fx̪*),O&Eۼugւsl #  ܍!"U*fKӚj"[\6zbI޻+yoTpd7?,oVcn~e5]_cꜗrnߴ.S;2  8@섀&c\CԨ&UI:}BZG .ZJ{u-hBoq7 ƥV[FLn%%;̞^2U$)CG^٪ gj4kIUCEڻI|h΄1yt::4iZwT~[{8I9Yx˶e>0vpl9ZGfC@@.MNKw"}XUh}m0~uO޷{gj; zt Ac&m=XIr(z*@@p68K_HF9cg07.lKTC? E[~ n.))VM]mjX hӯpСFLZ̴E~-jiÒ3JPM \\$ҏd6XjmYơOCyC>!{$de'Hy:\s*_̀   ]+PCDsسQeb;I zڈ,GH\o]?΅綿F)I@@j\@q #fZI`+^:y o KܳQps/Bssar5ค̌ҳ+  2Y j FeeTqm!im!墢?`oO5%|&l|#:5[8[KgE@@@ÎC<<ܼթ YyPuPFdgi Z!ѳ6 %?Ij    $l%@lٳ~G7fv;wp<>j>*;Ad'X @@ض9hٸlo dyy36i#fgnB,[{99M]z qIbV+,_h޾i[Y=_kǻQhK?9w.b&%]23iٺ[*"FaiRj~]9ZERE@@C;*;Avg,|UrçBƪsF\S0;tVM ܟV@@~ |+I۱ҿ&% E;mXNJ;aZ Z妗um{C@P  7VsN4>W[:]60ʣBˇ=센ܜͫcwDwe'ufH;08Ts~@@tCV; 9W.).N;qL6lITY Aڪox3mJ@@A` s+:Ơ5nd6ó3O61^oSmzL= AH79MCŒ=\{8DEdW7W;Ї1;TcArE[`Rad_uI6a?IƃOVTFo7M_n&7¸s*\6@@@* ;B"w];WH//=2Pu>-Ҏ`1cv   Psxmps4vcܚk=1,㗪CnjwѮJAT^G+-ĝ{ȁ 2o,ܦl`%s?0jyΞg1u0c6;a˛'D\twdžv.o-<    v 히 TŵNIiH7Npx܊%>C|_1ynmO sj[:vV)#  @ ;# K0y WnźO޽ŗyԬuFa-죽z~n5?k#v6Y(_hn\f;8IKc϶ՑW\el}?]S!/ ot!] +[f;~]JV3Rڴ8ѩ1tAݤhriv_kGt%H-zkO@@@Vls@߰W]GyÍ.Eyy;>xSuiDAv$1u8`k1l_^J?s !  vܳx@vfZb±#{/c@3OqE5d[g}lfy1t~j]\6iquq^{ˣ`Fdג Იt & KSVFjPpc'4i0$sC{7iW[\TvqcIջS<亻UD ^gK,edgʵNRRtocӴ7j[s>6.H;W;ewHAhSygOm\|[1f ԢD@@IlrXOU%@w6=3!^E7Z^3FUYYڈ5ビkVN  @ }뉱3?xlߔ ˺im:Yopu|𠱛+gڜW:ۮ8k@Ph7CykoQ,ܸ47e c40%RW۷X6xzr/cjt?5IdUU񇟻o i)Ioۜ&j}Kfzus1n6s$SaӪ/2.mT޵q]g*;AwꅏOꖝ>{uU]G@@RVB9tjӼgvl?װ~hAx-=FBG e]8U}ܥT ^}F5խU  8<%+qw>q\w|֩YB>[9]U9j!>SN7TaF3ݾk di g%iJ=;I>#w^TH:}Wp<wUyyg%CJٟ>Y3 cvo4|ŀk砱:'Yd?Br < xfgZUuVUUZ^(   '`'2}KUH*E.T,5шlQ_Kbn=1F^ћDTDĮXP Arߟeg;30 s܇Z{wՅs)/?߻&ϟuŋNr@ @@i loSwWo5m,j;bfv>;,D;ݷAeآ_e/os>KE; ,uiyكku?#E&~T?n1~ˮݶQ(y*rnۡ"mMlv{/̜B!'OԄ>Gwyh}gJ. @ @ VwWwy6IK7W ?{~s5o^8)/>TB._sӑٿbnҵ=;c"/ˏ%e}z2 @&дJ yl֨Ak{v7H꼟WPEB!(c{_!:%hҶ:nxuOr&-[[S.=9ry#yÏ(c{V-WmurE"i۝wbYwc ~^\&)T!@ @Jd'TJSGOԺ yVn}ʙU?4/-\:뎇s" @@looɮ y~ <ݚˑ'av=+5+ݳ;uxr'ҤIӍ7.7^Hen8נZ QM:%.ʾr#amh|ߣwlްRS0z'vx;nnCdA]By[m>Ѫl @ \ % zlrl?۬ժU<ۛG{8}Ͽy|=woY|S*  @@#ĦXX=kn}Xe_ڮ6_>.6fh]͟ʾ]ݧS( mi,ђE6L-O"J$Ognqng\%ئ}Uoߴv {rb7PO8!~jyn3ј5Ƹ膧~*;##~u;}k]3 -͏V  @ @rTT9pTsE_}5a?:OMڤiӖk;s=m~>q/&<1tGc|<.򓏢:ڱSn5"t{衇2$f|+H!@ @! ,Y÷^=jqo͝3s-XMm:[l3`٦Z qj7Fz1rsf,Z0yWi_6JdwxncF#FyÞ}|ݶŋF/>6sڧ_Ξu[Sk^?Y }T .]:F2|ۯCa񢅑ѶC6d]xK9h;2 @!pչT> o}NhPK@  @ @ @4  e54C%@ @ @ @JM@vB!@ @ @ @& ;ި @ @ @ @RPjox @ @ @ @@ N(7j> @ @ @ @d'1 @ @ @ Pn퍚 @ @ @(5 F @ @ @r{C @ @ @JM@vB!@ @ @ @& ;ި @ @ @ @RPjox @ @ @ @@ N(7j> @ @ @ @d'1 @ @ @ PnmB+n>&LxnjhѢ7zyQQW{h[ @ @ @4PXl#7RP7ogȐ!s_]75^fMSC`  @ @ @V:]ajB @ @ @#0o޼z9snɓ'St^뮻'ئMN @ @ @(m_WK{FW })1 @ @ @ Psߺ';$C$@ @ @ @2c`:՚jqL @ @ @j"0z1cD75!Аߞ @ @ @ @@4]N]P @ @ @ @` ,ZK$ ;1es$@ @ @ @)0tYf%#rDP޲9 @ @ @ @۳ɪPf셚 @ @ @ӟx≬1E$Y2P/*$=IP @ @ @H e3bN䮻ZdI#`_N([S{s  @ @ @(?`zfZUvCe" hRQQQzb1bСC;7)6 @ @ @ <쳯Z)6Q-W_ӧOn< ޽{Wvmc.3g,c< @ @ @СC aSN*'|Vvmc. @ @ @JC@vB-âE:u4k֬i߾g}ּy*MiD @ @ @ @@I :Ԅj܍:%5zz- @ @ @4vo}wqrA';K,PTn#@ @ @ BPӧwyɒ%UwҬY)SZUWkwߠ @ @ @ @@) }MMqGY1NSN @ @ @ @e됡*fåpߝ @ @ @ @@ ovQ   @ @ @JW!T~μ50<3g"@ @ @ @:tPӪ9-ZSNf*I۷Ϛ7o^xU }- @ @ @>ZԄOԏV>ZOvB-4%@ @ @ @95;fr^ %bJpXqקOO?=%8BC"@ @ @ @bM0V7pX%>X-ӧ6ZM2UADvBxM%1ț}&NxײOI  @ @ @̲Y(gw}%Kj0hmkаA4 ^SI O1vؤ@ @ @ @@ k7:wQ>kӶ-NC q.TTT$H @ @ @e#^Lf47xc̘15}ذa˫U̙3|&g\ݮe'(y%@ @ @ @r#7+#= @ @ @~A-w:r˓O>{ bĈ}gkV @ @ @@ {Jذm) ;4K)*{\{PoȘ @ @ @ԝ@ _ε$;|ذaI#G&e @ @ @O &^+,Qqd'ǹpdrT @ @ @ @lkrLD, ;G @ @ @FM @ @ @Y@vB= @ @ @4: 0 @ @ @("{ @ @ @ht+7a @ @ @ Pd E8 @ @ @ d'4Wn @ @ @ @ q @ @ @ @ Nht܄  @ @ @ @@d' @ @ @ @@hfl @ @ @ @Y)cKN(7a @ @ @ @\d'5/ @ @ @ P*JM @ @ @(W f~^ڵK:m۶mRV @ @ @ @kG@vBq)ܹsdu4hP9L @ @ @D ce0n*aVRK@M*** ^oFխ[VZ5z  @ @ @\ g̘ѳgOe2= Ea.̜9fc* @ @ @T%СCnG`';L" @ @ @ P# 5bӈ @ @ @(X@vBT* @ @ @ @5P#6 @ @ @ @d'L" @ @ @ P# 5bӈ @ @ @(X@vBT* @ @ @ @5P#6 @ @ @ @d'L" @ @ @ P# 5bӈ @ @ @(X@vBT*~{|[o @ @ @ @be_>X/8Prxĉ7xvۭo߾&M*) @ @ @Ě` 'V cZ Pzr˔)Saڴiw}7 @ @ @X ce0&VX35N(s9u|>87^Ho:ujf )r/?}٧ZGvB @ @ @JBw?GV>Çϴy睯޽{WIGTTTTѤ[K.}wC9䮻jѢEmf:Q @ @ @ @&L{V+5gfA}g6=C=F s=Y)_?ɔ GZƋP4j"@ @ @ @ o$qOf.=3G?sl#ѵk׬`q.e'S @ @ @ @` YҥKVnݺ 0]tW\qVxϟ߲e[ɻ3ѣ>xrtrT @ @ @ @,_g~uɊe/<0E5*7^O:_PgO!@ @ @ @RXiu(guV+;!oZ6-|M-q5WUVY%?]N  @ @ @@zM0]. DwYf7f{wQǨ$u @ @ @h5ZaÝQ1G޾}-Z>񫯾 6HF2OӬO:;s; @ @ @%+kC y"M! Kv93f,X wlkFnDd'4]7ӌluӗ^ @ @ @(mHP8CJ{%:> ڶm7Nvh o  @ @ @ xϟ5.dթW^yΝ#s\izλCVzPO%@ @ @ @/ϛ7/k۷ϊҥK#5aСF@߾}sǭYO0!+RK';ڃ @ @ @ @ƍ}dǎsFfΜGeU^xĉY7t;3u7s[n:z V }YO>$}Y̲bj{ @ @ @U}ހrF.[)r ',By]w}WS&9#[Nv @ @ @ `&O|饗f wM7ݻwV/7`:4iw^:R섢Q{ @ @ @O`ܹs_~dVx5t(ǁ+GUFEBV; RvB= @ @ @'`o}-1bDS;!+X1aÆmV:~K.8pa;? @ @ @U`u~6qSc##G}`# bȐ!of~AUtެYgt@o߾/z-$ @ @ @ @"̚5+)r_޲eˬx^6mڴs]ի:|DͺjѢE#%pv[oo6GuiD ;˧Ewq}9ӣ\>3 @ @ @rbM0V7pX%lp냃~~ۧg6~w޹ >K|u 4hq޻;vt^˲ꕷ:L8e @ @ @ ]̲Y(͆qu,gzYr#<̊_]vMPP2yD cǖɬL @ @ @|5Za{c >|„ Y.\5;SM6Y"\N(r<"P.L @ @ @@zM0]NUiC=4kK.}'eyg+iŹlVx  @ @ @(nI&K'}ܸqOѮ]tin ,N(g @ @ @ @@QYg֭[ϝ;7e^{j0>8N6-ݻgEv);hD @T%piY5:d] @ @j 4oGڴi]u-G['ȑ#?qye] @ @@ kn̙I}G˲,ᇹ `q") @ F}jzegK/=c?VZUV3c7ݎ;FvBlÇOߊ ;>CE]tE7|sVHSxreHȪ\>K.뮻bs=7.]7}?h;&M+ 6.KG\pAK";a׿{s\eUN5*-S!eE\ @ @@ /cǎMe3,s=;wέ_|y @hC w}HMH|bni$XHaŇ~xnjB /?)"QCMMHWGZ:rd$DBd &$mΝy|dH$"-_~m#"7DH. @ @\rwؓN:\8q R֩z- @4j؃E$0a„H5>}zMbӅW^ye8᷿mmc3O?=7^E$**$ℋg$ ,D Enɓ'WY~mV.];+ @O`Y}7,bw8oɚZ1zev);hD @E j0)Syq(C!m뮻*Gx㍅T:ƟwǼ#=Z7pCV?W^yVUl0r6N5!@ @@Y DnzN"?VÍl#CV_}81+Xf|g5hɠr @ @ wܒ%Kr{o'۷{_|;ϭovm'xbHzclY2fJp .LǓr$IeamvU4#-`u։:[nOLЌ38pUW7dLM6'x"#N=Ԭ`gɍN5!@ @@"^L pg=:6vGl80wo=({h Enٳg278)+ @ @@Z /4iR:)?袋Zh܊]N;'Lk=[j{B|ϣe˖qd{wǏ;6oƙ{n׮]wߙg[9vvު,ҧO38cv9F8K"#֏ow^m'S'26rbH$&ꫯFbDGd裏r_JۣG.  @ @ H p=^o&N_W^ye|C6ԾjoXz8v']FXm @@c ;]vY:5!zn"9 +>`V0eΝگ_L'58?2ڶo>oHԇLjBTh޼yAs9y+.策 99FZC[n;#"{gB${C`7$  @ @ W ,?P[EE?_zQG+W7*k./Ԅj*F,84+ @Xя?m$Bdu+.8 +>q`t.pYgžj駟~]wƟ/ϭ#a޼yY1V[-+̌gXf~ײ:3fL޽/~!Cd?蠃n馬a;Y5] @ @@@"ti{J+T bs̉/$ ~~  @@,46,5!*M^~BN:䶍&l?Lt-7uH[9oO,5!Iy[) yn~O/Y$ɂ ^zt$qԄ, @hꫯ^ ymڴ)NkՖ @|G ovBJ߽޽{-b8@!O{[c5r=zh֬Yn< ZkƳs+$8!)"SNس!7XN;{ŗ_~F Y=lȪ @C u+ @hSN%n.]̟??sY{Dtv9y՗M4BndH UԌlV"#7XH$[pM4tgI_F9g] @ @* ;^yuN @K {lBO^/"o ǎd˭ɻBVvȑ#qnU% @ PSW @ f' eѢE5kXVyOCޓ曬j5fmrSƍ7a„LoSL;vlVys$@ @V@vBz @@PW_ti]uU~ k!WXnsͭAtAF >Yw7of] @ @- O @FM6sc=ڵk:W]/w$An֭[k?g5=f'nu謇$@ @P[ @ @zm۶mp衇pL<9hhժUɛ7N*&>HWx嗿-[>sx>ଈK @ @ud @ @:v;ѣGK?R 1W1+гg*ZUVlUѢE?kW_oꪱE:L @G@vBq= @@߾}swm>ZE Nxǫ j`"yCrug}bC=E+ @ @6Nv @ @;_/Ž;{+"ÇKnuᡇ W_=`>}0}s㫭ZǐύTTT"믿6lꫯO=:묓D9oCV @ @@}NղsĈC߿;\41 @B`5׌E8P Ƿ~{1W7`t<ӧO?Sg͚?#"ſ,|3k.=/0aB:)r!͚G/SN=dEpϗ}bx~M( @ @`>l)r+ 'PcGJ@[޽{.Ÿf^`cagk :|  @(P3<ò*ϙ3'97*t'x .MMjuO? "GavXoƏz?,QG7|:UVY%V:'fN)Y ] @ @q Djc_~yܗf¼y>س׿u׮]ȡATW@vBuoaÆ%9rDC @iBvm+Q4i'|}O' .̪b׺J98wN|;ȃ:h7ϭֶm5>zG['"񭗝v駟{7,* @JM !Zaif'$#Y!6 <02W^yuRV7t_i/6ĿTkʲU j.W= @4J[ne}rghѢW 7DK\rIr g5.첼cyꫯߪ})N!"k  @ @ W [X[GӦM{.o?SbE  @ Pkv|"˧LRy|4\mժժ*ЪU.((dkwݮ]w1T[ u7 @ GQG^08[ ke&Q3޽*̊$@ @!пtv¸qԟ3 @ PT/bY]wݬK @ lMeglo߾xVVpҥK,I*G$"NEܹsr+oa̘1O<ĉcsҥK|IM:\palO裏:f1:YMj);z @ @JBছnJ6@IDAT'3A  @JO ӃѣGr[o.ef裏&UN8|0)#Gկ~D­> ̃Vv%\gѻw??yӦMs+dE***;/e̺w9W]u^{[66kK @(@|oӟjtI @2/r">z#F|ee?c-r7O.kP?~n;x༩ _;nw~ԩS'yS{}I'E*C}AvB @ @Hl¹fm&\p~5#8bUV $@ @!/BBѵk؄ }b?\h#<\VV6lؼyGydRAwa"iѫW|t(h" _駟U6Nv @ @5kVrEϳ  @ @TM{L>=Hy˓ =r ԏ%˝vꫯ̝;7S# t4L;oIm۶G}tPlV_|+>`1sLع!:|饗wJ ^xs=\~vZtվ}Ƚ߯c{M\s5Gu[oDjSP=m  @ @?٬ڥ;>##@ @!kCg%Ģ58!fx뭷2ÇWzVr>hr뮻v).cu?Y+3~G*DZ@:5!2aqD4A^y4/{rlqe%!1͛o:oӱiD1;/6Hj֦ ;6z @ @%*:sKtpE @#p뭷>y^xqGjɓNOz7m5hР$;a…֐>!II0&&{0Įy_g}6SbHs=}7" Yy#9#}7]-%~ؒe˖:5+NV @ @@ ?]YJwFF @-] &]p9,]4NIXίۤZB76Сõ^75!|5|ꩧv7d"7pCVv믿H ڷo\- 뮻2wy%K4k|' ?I&Hne <ܧg5򿣩8 @ @ #X" \) @4D9s\z饷~{,0 w GqDgR&5\`$<x`2u/Np~H.]TVCg/ıqr3<~GǍUW]5nu#+> @ @ @@VB'|5đ BfqC>amxkCӮ]t-[r!H\s͟,D&M>|xd]SsTk֬anRr&;iXxvŋcO$̚5+;I 5Ӑ @ @ @@l$pYg'pI'/ʃ J"<ȼy&>:)צp!O_-^_|qr?a֭^zŞoKnUVHoЪU 6ؠe'n& @ @ @w L0!O<1-?28sϝ={v]v_nH&MH: F!vh߿y3H$%\2s$$)GaVѣGre{.V[Je 5$@ @ @ @ 0cƌcV1S1e›o9jԨ_~yͳ8a=x3/H\XeU Ô)S2w_y8d! 䢋.0`@EEE&xtMʱg׿5NwBr)^ɖ z_2*kH~rm MԦm@:L  @ @ @4N:tAu2.sYnWw_&f6!zR!{wհ|dOe]Fr˭*׿뮆w>fb/U9wyj[LJ}C!| @ @ @- ;naKdo}[mvMF qۦعgSO=>:kB/7X]Nvya'M\tEW_}uCׄZ˫kB ҒwFr}?h @ @ @ @' P]xp b WZi=SN'5%L(mv曯aIՆ ,pn ˛_bׁ 6ؠ # cPqŗ򕯜tIa WǍ(f̘t۶xuR׼D +CUg~jY @ @ @+L*ҝvi=V[m?#}ӛ޴b_W\C|M71,뭷X{O+~_Ğ G#<`[iM7hi>/8{#12e믿Xx ِ @ @ @N v)v`;QSvq07~&M{uĩj! @ @ @ #M:u7Ps L\9 @ @ @W੧w[Z ǫ @ @ @ @`,bӦMCӦ mBY @ @ @ZG=ꨣ}{ZhBkI_* @ @ @Nzx_^}'p78B }N΢;37[ @ @ @ @ ɓ'7}¦ДB @ @ @ \`?Cfz'c1 @ @ @%>\z^'; @ @ @ /~tMO>)SZkSnC Mz'tg[ @ @ @XZ#z'; @ @ @ @ 0|m.b @ @ @ [zh @ @ @ @`N61 @ @ @譀 .ojB @ @ @F {O0[cz ^mvoVղ @ @ @''W8x7s͞=7Gr8:-b-p@ @ @ @@ /+fy@;z'dYj3J @ @ @ ɓ:>NzgH @ @ @ @`8Nv5 @ @ @蝀 v$ @ @ @ 0z' g @ @ @N@Y; @ @ @NEM @ @ @z'wB @ @ @ &@ @ @ @;w֎D @ @ @S@lwQ @ @ @ @@O8bN`z'$@ @ @ @Z@n\{wnx`,o;#@ @ @ @ -xO02eJK`ZmSL*gպ|)o* @ @ @D S}[n9  @ @ @ Į y睷6 =I+kfk_N|D0vB `~_UkuT  @ @ @ @`^EKDA= ra.avmzjru @ @ @#'-L^{|c:ޕ ِ @ @ @}w\8~rU:;;!P @ @ @(K,;R\vNNH-Ԅ @ @ @J,ORz'$*C @ @ @e~'Oe~I띐` @ @ @O`y6mZ{r' nwBJ @ @ @ PJ҄;!vQ+ @ @ @(;uԎ:=tyꝐr @ @ @L`ƃ:pB;† @ @ @ @Q`w4iR6VӦMkcRwB)M  @ @ @ @ M%\rvnq%X K h&$@ @ @ @tζ* ei)$@ @ @ @rQ&O<;qaBGz'ߡ  @ @ @ @`wiӦM(~jBke^jK @ @ @%c&~ ꫨwB9 @ @ @ е;u6w׌뷹rIW; ׇj/bգ.ղ @ @ @''W8x{_&\gNZw޹馛{K//E VR @ @ @E~[K/]arPz>l'M.䒭W+z'{Z'x.[uU\p @ @ @@?vlN;y晭7q8 0ػ:㣧wD @ @ @l`7-^{y;댻W0vBmV g͚VԆ @ @ @&O\ؾb<̲.6k9s;N&  @ @ @G v;}[;: ] -N/ @ @ @ @Z?]8NHAT @ @ @H`֛:ujӀjӗo צ""@ @ @ @ a U=5{fO/0k֬R @ @ @O`$[ng}6I&{K.dv0+4 @ @ @@산7#. 1vN @ @ @ @ gq$C&;OvHA';$D*H @ @ @ 7OvȋgYve[#̙3w޼~~! @ @ @[ vD}ݫ1PuMPm}xk6wUA @ @ @@1(l9'owwj[oFmtw'T3U!@ @ @ @ oxO0p ]x0[oScyN<|;{o~lI @ @ @@`3{׷2aNͣwB9jCUW  @ @ @ @`^EˈM KDB5 @ @ @ @`\rɯ}kgNhb @ @ @(@`}-`%إ %h$U$@ @ @ @;ͧ @ @ @ @z'T @ @ @Z@R7 @ @ @ @PFRE @ @ @ PjJ|*O @ @ @J wB I  @ @ @ @@N(u< @ @ @( %h$U$@ @ @ @;ͧ @ @ @ @z'T @ @ @Z@R7 @ @ @ @PFRE @ @ @ PjJ|=|W=^\]@ @ @ @d f@z,wBK|ۮZڪZV @ @ @ @` /RF`ٳgH2Yg[l @ @ @h!p^y啱6lb5/hG@vS5kVmF @ @ @}}w,%@ @ @ @|C:c !K@ k 9P @ @ @ l͊#FV @ @ @,׾]Zmn:X`Mlm=z3ۙ= @ @ @ @ EBo>䓗^ziabSmNNfW[mN6  @ @ @#B WM6)nK8vBlІ#ShXdvwqkcMtC @ @ @ @,o9S\my?{)_~_dEwBHӧOg}tPf @ @ @$/뮻viWShV>|^vꩧ^O?t٪?N}/첦bWl\[ouSLYSj*^I &8mUM ŔJI6˄+=8a6Ђ5Ȅ'L4EW/`U`W|}u{07>H >j({=@|@kYް\=渚|;`;J)SnvQJs4eXjkZdтKg}tڢxv¶Z0VZn:_=d%q`^ϐ\{;Gz;V @ @ @ P E' @ @ @ P;fD @ @ @!wBI @ @ @NY( @ @ @ @EP} @ @ @ @5jJ @ @ @ @@z'j @ @ @ @@M@ @ @ @ P E' @ @ @ P;fD @ @ @!wBI @ @ @NY( @ @ @ @EL*bC\sb]`0y0yѰᵛ s5o9$9lQYRx'lO3ZgSY?^-ITG| -hT@WȫBΓc"9y9޾%N&'Te`u`- 0Luo"Lۛ"̏ߞ PwOd]>Ͱ2s;oj3[9H]sS~~p]_[*LxVaWyXaK>]N;?\s8V[S–m[aC?97鯕_l^^aٰҲa[^[ѵ 5ź)t͵^EKWSY ?u8OћzRo 8uT# g^_U.5?Bo#tgqG:;xʋê/m^f>&K09pοh/^&в|'f^ͥJ)<rΓKcQ)<X l3KL4lU)<TS5+Lk,rVdw8r ]$`0[K&cif29mt2.L?2lUIe2ET&SGz:LAVOXo&22ܝж_ʿ-Ocݷ{b/ [_bx鿩 Vz*\ .z[xnu+z4'xO 8>80pU#,|}a)%> #_9|dJ=s=?^PX}zO'\6+__\Xy`cأ.|v7+}btO_y2mN z''+ݡ_exPo8}愰g.]CR0zOjxaUA{=vhX%/ߥysOAUJ<2s.lq.%t`)rn6_9D,]36RH?2r"YIe2Ep.ϊ;lI#jX3ʤ``v/L&`d0L6RH-=2>d ᤍ}dFWQ`n ȞS)ިȗsqǻg]{kcׄj| :d4P+bw>&]FKf{lM_QΣ&43ḟUɍ]%5kg$U W{&I7xבa烛tMh% _5,6O(/wDcׄu:ƛBXkºoi5!1'ÁTty 9O7`9O>Qj7"&rYd2-Yt,,""N,M)2Ie2ETǙL&Hc%`od0Lt2lK&Ӵ&;!3Ÿ~ғ¯ ?>:|lGCaJ>ѕa v6f\)h)6\$>Сaq0J1wdžg>b_Q#&s1{iKʭw>q8O8G|5,66Oo>~h|PzQ+ҋd]{P()&>QHuY) x0R<[ؙ)>Lgd4),DVFov__ø}{j+YǞ=Y>pș"M9IDAT,}Aґ+ZaSv nRiؿw__V-#SZm~TG<Īē& O|N|:-]u-/_+V|%2jc嵟/tYsn,EMϟDr.L?2؈<Dmjr.L?&r"YIe2E-Ytm.,""f8W˽2e280L&`lt2̞-`RL&N&SPMtdVBU+aʋ¶z/&7_K-޸d 4 :N n Ye)lw@Ȝǜ^E/'/.}!⥫C=ѹG?|h-*՞(6|v/T{ߕ ~=|Soׇ?ztKk+_HmҕbV&ΕeY{N:s7Pcc~iO;l^]P).to{]`ygT mnݚ̼t;{N ?BbZ~vlS8Cwy?N|uD VGWnP[{zſ=v\ל>m~ΓK OD}y0[D)<rΓK)<XG}<TS5+Lݟ ;lg5YDed0;Ld 0L&d pT&SDIe2}`}djbhFbI=oϵc~[{'^ ^f~~lx޼%Rχ9gA̼rN7cG3 7.7F5~}GiP+Xo 3UCo9ŮWZSwW70R8 v_]2q'JvUawTpٵV\66^C|㜭`5lN*Ů3ف=@cuMv psnu#'Q)QIn qT|ݵWtP[TR0oW]o6 ݌ѫxCUǜbħag|AfŴC32J88MӷSEGk:18R_T=ŃZ%=QfΓWy'Ǧ̽J<`Γo-N~ÙqTM j|ٚ㏅kkƿ|BmRn'T]&UO|sjQćg"P_ʎGO%s_~Ťb= #hd:<۾h]ZXʗuzGu(۴_oB9KӜN=(0?ȯV 0ŕm`)>e:-xдܘgzϢK2MM^󔡕ZQ3ZG3ڤK< M i㬜g4~q9O׬2"@}\RDEc"*Է7E8v_).D2Lۛ,moo0L2"lF@HL%[=˦zʓG׿2s?+|lwf#6_dl~mA:q[u/)Xο Lk\V` L/+/W}2XCTE22SxÖᆓ̖ۦe Z|iC:e+P]Xϝ4=/aS#~QתKUc&/RRO卷jod" CAvRޒm7Rs969OCy@8+_\S5+LG7P`온$Mݗoo 0L:KG//ۛ"L*)")#=LG,! }k2Ɏf^|uZ[q!>zWƍ i_:\pB]ՙU`çTxU}_[[e +,Vn)͖b&>ƍo8z٧jxcYB[d{7s[OyBab|gk+aUjɖ[";6N_o?cJ{ﷀ5mnyδ b/ =:g_!|l:^y 3ؐV)'y ߜy 0'M,7sL-)⚕T&SD#oϊ6`l3ѫQ2"+).D2"L*)"hӅ=d0L&SdHO*)"["LNh85;2j*a.V`6[|*ނc7)L9[չ*yL%7f9?Rnݶ bNeIz\kj~3?MY7ʱM加q;#~=XO4?Ӯ[WCWW}DC bĿ<7eVyǬ|/.Uu̺!ViwB oej 1w9O^a浟u)*eܐHΓo <8{Γ{<`ΓoOѱ,7sL-)⚕T&SD#ϊ,/""N,M)2Ie2E8ZLA`RL>EZ҃Ldr0L2"y%Ɍ@V@Fv <\;>/z۟cU{+7 Njo1uVk ?{'X dޑ)Î-ڙbFyIv.oX}gk2vk/l֫Ǯ 'T{j~Nc)@,.smYR'u=.^:eƍE%ׄoOZ۲Hj|6|c '+V{u ͦV?aڜP݊}ZQOW [;ne_]moWZ V/ͯEc?ThujC9;ݟ]8E)mn½*:L|\>Ppo^?{lpމկT[d9o5Q ݴ#cԴ?E癧2W~γS?a~o1$d#kR1$/L?ҏddYԻG^|"C,|]KՆh8g H W{{$-n싽nxu1HDŽ8\uz(p- _?-sްJσQu'}f@n`rw- փJgW~] zYrqq:#ez^ __.`LG/xG-BEi#`` oSzdŏ ozuX}Jn#抺f=QV/Z:b7W 4efwMubOr`gtփ;Vʥ2){3˘ɴ`7{3nSd ޴̄>˘L(vހ! g'ql8a6z}ûw _=ol#N^mەq$%'w}&=Tѯjq5L dL)Ped ޴`i'޿)g2Xoo Led:FS P"X9[S߷ZyYW7bf׽fͤ)*NG=$+c%Qοω-ۆigc*w9KV o_*,@W5\q}ȯNԪ^'4sJ4P[5ZS뤦rNzG-Cy,`_%yڼf7i3ΈgT&oo:\̄,7 -ѷ78]E߬M?ĜkeIdZߺW:+Խ6嗯ɖ'-Zs5!f<~lPr*D;x攰O$᢫[[B}GF t=5ј-Ot?ߺ1VZ.&]&/uX80O(v7Ae?>U$0œWDž~kB\'>u[?V_nþçsAe˹N>H@~{ӵR_ud&0-w lY-4_+[e[-[svӕğ4Syg(QO Hyٞ#o jh'O;KV[U|Wq퟇Ϝ*`Q՚GlquvvWܙ57˔{kW}Xw -zD_=o*83c ?>:\0}+Nޟ=آBA-?Usa+ޯ2B:olr*;nY\{Ԃua@^9O-c{7rfo&o +{E<}05DLg\N"kic&бvY2A&SDL- W&Md L`ed:5 #/ +A/}gvƜxGwçbu/5Mxn&&i?^ϮNyEK|o!7uz`m_}-}Vco>А4|l`[CW%lw@vw:1tD ~o_AEWnNhU7(6ov|Bhr~LѫKW\6M}/^}B_!޳g֫'jL㺺žqS"& f{F1'O$%ŵ ϛ7|̺#~%#34}MirNc'`cz1<`9OAyr&o @+o=yH &4=f"&b/-"|` e&Ӱv~&e=dx"[#dZ 0LG d|6>Kt`öf B Rw*A{eXoO*G9]bE{$l'& 曕 гjZh~_;t/ChAEV)W֭q1/X7o9Ɲ[߃c Y![OS{}vafKT} ӻwi5N ;+zdpLgZvdg2]zsHS lW .nNnp* (iw=f^?۩ν/is')6 ô&agω? __uWƚ~n, k-_k:tfb78fOjƊrҺս8R|'Pߢ!J>dvL,>?ׇ~1gxa7]w kO ߘzkM^tOsu!wYܒpZtPJrؒr8<7GY5+LG.tEX>;FWezt`t`'Oo2Lۛlт)d27ЂeGzL6B ZcZB0$S+S]A _ªg/}0}Оo׭7p3qjm&g*ve!?un@NXsJ]t!Nq +Uا!mmJ תy!R}IWvr~|C)z'ĪcNԽJe&x&gb r7ިy$rFr[M#뚕l&W]:yώ^3Lۛ*:141L&&G7_il&3ZŒK;MuKgK-Vp?nyLS~s }nz}_H|ߪ?&O˵W[TPWK3yz +dŐ!vjsZ(s筴YW;q7MZuiEDnn?ed֩c>[76%q);?ʤMv\)Xh&o ~{oMOf2979ش]Xз7}e ٩Wٳu7VX^/tkͯv᧿76yR_n+ڑMsc د:=L}fXE gq%kr_{C?J*{jXJ+]v;Vm~bW:wϕWn\3/]9,[%&_Lg^X[+XMػ3Y%>R=yZ7}yFgIyyeg4{9O׬2"F}\RDEc+ڷ71uA`jLƆHۛ"}ۛL-=||{SGz:LA~ZB q@񇹛{+-޽KmRluzW_h,O>ռ<8nwl=8m޳#@q83s\𵟌s'0j;o6cÿ^7Ļfmq[MxN:&[L_qaV_a{b/ֽrk\Uxuw}hp^0)ᑰdUbxt㞛 ];-]ԍ(ih>9OHg<@3ڤ_K< E<]d 8[DEc+ڷ71uA`RLƶH̞ۛo&Sdr0]:H&S\2>;}3_T?YpM_ xs)ޛ[s&T.~/.OoƛmoHݏJ7X1@&] z^m~yxDE_Xth?~}Y߿Ln's`wW{e~ݵY iʀ+oy_83!v=]xeк%^x{{ W (^ᇟ ǘ/#|Z!5d#lk咖>Wu<̜u_[WoP>KX~6i|[ |"uOJHSdOΓH,6'HYSm<]d F}/`$Mv]ĆET&SD!'[)"2"Lۛ>d 0T& Qߓ3VxMsf-֫< UR.|dm!~vA,;lͰ*{oDxG!TU#>յZ޿[A-ߋkTjoo>4^%L]Fpk~֎â(jᛇ}?U/. ^ya5²nͨ<3ZpGml)Han_;#|ʐ1kC?]Z%[սyUcx WcKmo X' !1JƯ򁓝bgğpqVLvϬ(#_ *v`q#[IS6y?{:,`Ry5>DŽ ^ēᘓǩ^lח}}MN?|^P7Zk=v׷^%W᧿Sٳ'QHXs[,Y*5J"1*!&r-$iӳW{hsZfr8zmjw8ݱ:?3OqdKs%.vHcBWH/Mq7lX}O9kes#i<0/(}z)wK~7ծ;-{/8ʍg}w ZQX3T,,/]9\{jÂj7 לb.^遇j&ch3çq0S| )G&?_zuETmN{cp ռy -nrѶr&),d[AΓH,iBs\ _}vTheR;fqBL!)47=` L&MqdX=5_ }}aƝTK-dqd\7ӧO]wN%'n=p!9v}! ]%xWj9lgB-:8!.Woem>"cO3!VLEd&ڈ@Ly@9f2};ɴT]'L4EH6LvSvF϶c XY@Qo8 =uV _<(=b5"Ba}|W3W ~N=ŮinS3Q l)\'qy:QMO<=a. rb}k9Oׄ߁Lmcdƀ)bLZk(*YH&S\=k#"Ё@i|A6!@ @ @ @!wB? @ @ @ b%@ @ @ @;I @ @ @I@ajm @ @ @ @~u$@ @ @ @$w0X  @ @ @ @@?N臺c @ @ @ @a;aZ[ @ @ @ @z'C1  @ @ @ @0 0L-V @ @ @  @ @ @ @`N+ @ @ @臀 PwL @ @ @ 0Lz' Sk @ @ @C@~;& @ @ @&J @ @ @!wB? @ @ @ ڝ=c-ot)0|U-W* PX׻T %0k_<,'wc-A d}R@ƺލs8C"eC0 Q`XXU. %jUunzS6]n!ElvfՅ $:X@ڗ-Oh'V&@7a^q7] uky9M׾l EsĴ\gϮ(h*pw{, /|ׯم*p_p[m6lS`VC@\,:8̭/\jik&.:xޠ j7._O>}}vP]N<]wݵ4(Bu < @@\K߄ @.\)^uM^z'&(:Sg̘j-o1jB ^ P`!vJ%p,IC&":X @@I\KP i*%@ @ @ @%Vm @ @ @ @,z'ԓ @ @ @U@z @ @ @ @PRO @ @ @ PVrM @ @ @"wBYZJ=  @ @ @ @@YN(k˩7 @ @ @( jW \IENDB`actor-framework-0.16.3/doc/png/basp_header.png000066400000000000000000006654431341123343400212200ustar00rootroot00000000000000PNG  IHDR )sRGB pHYs.#.#x?viTXtXML:com.adobe.xmp 5 2 1 2@IDATxxTq )B {(HQzE` ذzł;!NHBzo:v7Mٰߙ33gwf8h4*       Ml#30        ?>@@@@@@@@ `^_FG@@@@@@@@@@@@@@@ `^_FG@@@@@@@@@@@@@@@ `^_FG@@@@@@@@@@@@@@@ `^_FG@@@@@@@@@@@@@@@ `^_FG@@@@@@@ '}󎙏>_G@ lD@@@@@@@ ph4;KkW2czש[       %P{'syiW#6>0]#}ťekv\G; @@@@@@@J/[{}ѱ5̌ϓP~RF@@@@@@@@@ =;c3M")9) ODspz5|CG73Q$F@@@@@@@0{vWځmwiR+~4 @@@@@@@N2M0G&';,        5 XPv WNTǤ "1       Xee'}TĔKaj@@@@@@@Nf\c#SNNN ܫˢ@g`FSϗ}sIp -/ Oܲ!1BuչcVS       X\vBʥ3֤ZL8u|eMw]F;g>zq2`Q;ٟ_ڢH2b"/xnKj?kGZNy600a@@@@@@@0}p}p7g'sjב nߜ"YYʫl#eR./u &qx?t\nA@@@@@@@lF vI\:k$"4;Y^^Z lY!60EeΜcH/|`Jߘ{}ঔ S:@@@@@@@2bcVC󑓛,jf9b_QJ?xxa8A͐pR䶍ii-5W6WCQV( G>@f'n3h4-3SS{'&j#dވ]9⎤gEmO=8fnu4b@@@@@@@D g~.j6yyى ף4j7kFw ss"6T9Am)-2e+gwMYK1gq؄85FC$($=s`O֍uoL        -`BJGg-1k.RMF.^!;:{4j`?H 6N8G_@yLMж疟/֜Z H       `?~.0?oۓ{qCq3 vy5r놼 YTq83B4k3 d3 9으e` vPh]iYm*@@@@@@@IN-Cr^+Ȣ 1 MFM++^ްZ^m:!KO/C/.ߌ@@@@@@@lINv՛9W[$_) a }-eGnrSSZ/;W%CG73I11SĖ4C@@@@@@@f,4;A^l0;A lH6_Bf'\\\Pcjb~j/gw#ƪ5        P% *r@=ƿg@XvA        `\4MEvpָYQ標rdC^ZjM[rS xsR\\wLN(˻q4T~妧A@@@@@@@KN_>H       XVv¹%?[Sai3d`xq|8aߛ/$injZ 2VN]5wGn)F ?7;1^6h:v @@@@@@@>7߂/^02~FltӉgOŝ<{hNosruթ)1uR6h2z,xȈ_SXh ooѿJ{G7 r==w&G_w,        `??WԚ/]~ʨ u|%Sؙ`얃A8º{F^^_tD^TK=4zZZGE5[L.ghާNgO;a}'}j`YC       Xhv5#O$^7 HWl;qqԢ;7p~D; _AUXPiUJm㛗)׽8lٺSF@@@@@@@> _pxϙ &69-5       #p\6ѡKqX18%Ϡ{.nnQc7M`[\3]' b]ЇH3.!       `í"g.,j@1~k&),LL;~g6\DĆ~ul19)ɞAWZz6:ZP\_@@@@@@@NHXܡQMZwp Y)       +pOv(?|-S[%5`@@@@@@@r HvBANΙI61       ZNsivBҭ_qZV       RrRSW.COT*        pk4ͭAxjтη?ro֎y߉+e.        `gs j12yR P       ]@ێ~I @@@@@@@@l';=li @@@@@@@Fk 22|:/lZhնF2       ] Xev]=!       $?       *@v>Yօ       `)Oy        `d'e]       X $       *@v>Yօ       `)Oy        `d'e]       X $       *\΅i sh_fLtFltfltnZG` A56rAh4kQϋ[xVm0dجK;       Jg&>7Wȼc_@;jyNNGepnj~35;fXZH*C=X        e(g~ۓ ީZfz礦dŦ\xhh*7͠)?GYqPV N~-Z6lwt*͌B.|̘ɴy,0 @@@@@@@ }_XW6:\}ux#UkD(f݈X:iիoj'?&ƫ5f)@DDIJeΟ?߬Yׯ_#@uz3G(7d@uz3G(7dUԓ.뗟vn=mFYsܫqANα>>0uqzU,F̘*5"⡈$Ml&[l} =|iӦsעEƍgQd2 IA32, U:hI"IA32, U:hɺ&il‚O P]q0%n }jl,J(JCN>5Ln@qw©rk+(9;ܯ߫i5aWooT{O{E{H85ׯ^?e$t_{eQ:ͦG$ʫ"h4a/+iW#zmo|ɯyo}Xo`5"/xnKW\`N lSqvzVٟ_z0|6        `->2WzJݲɹbقMwRNjIJ0pKO6 [&;f?.Rd rp &w<wNp T"       `%d'أҽj` {굺P;8rH-#.,(4}RܱPܫ8@8ݳf4V gN1H>P+c]گc5@@@@@@@(d؛jvB,jvV9TCX[|m81! mߪ]kcg`4sVvh8k#8݌g۴w/M!_s؊_e ?m>d ү_sX?냬ql;n{hL}m N>fÞM^=ʅxov^ZR^72\{ש'        `%d'l6ԩ[,2SWuWEDҀ6oNָ^k”f6IG>yO?=6לdU/9ĩoځfۯ [^ć-3{':e}Dy#v;Ο֋.۞zp2D~82;!}'ʑ @@@@@@@:kj~_/mvMIV?RF;mww 6my5r,Ygwm6Yd̤ gQkZֈ2ĘH       =*VSeݪ}s̝p찼gZ4?zM[lpˢ}XFnqrsZ@       ؃'ike'xVUPD1ӣ"Ӣ@kТyڢ{uWbs[@^Aq-D^lL^%@@@@@@@@¼*Bu.jqFuZFꘛOIMQktF44U\[ze:hhXlxy-/-O       ظ'WW'AȈ)6ij_jbǵ{Snj9wYߎ&;)Q7%޷K6mG-۪W/Eb@@@@@@@l[ܫeD_!X e5jRаɛ^c#;,s=S[Oql`0(ɉ?}B^[?YY48{xgejۤޜa#W@@@@@@@vDM k[5|<_M'|b}clZ^}s]\k֫ހ!u oJm&R^5=IN21-@@@@@@@vc';k0rZ,swBPǮeĎ┊!?^۵mlkVg 7WevRNMيeH/@@@@@@@QZ]{';ŲSG}kvM-) =WϞWSˡص'?ihwCL^zZ,s\StD@@@@@@@J8!kwuIvmt4HǒO]}>I eWV|vm{G\ [3QpZU{Wmp&c&5&uؒf       ؀@I 8s*8hA'+ʏ/Tx8b1P[Vltd%Mzu+[7\ټ ;K(Xw^=wƭ$gw#ƪ5        /PBZG? ?{\߷+M[{iy!?̵vTo,;:br        @q%d'nm?vΊ=BT uZJ8;1PW™SƻWkG-3' rs\\w#P' t9    ҹF5    `% T}ηņ;'MuyHmӥ5 n{mZ4Gpʡ}#;{x>|5ă$o] rӢ"5l-w-)rSSlPo}껯v򌶙8)cs.4kWŖ^!u7>nNN@J@|zԝY bյ{McEm\pDFLtNRb*'gj }{v ֈ `q'^X3b3cA:|^&'z׶C 6&PrvXpy6Mav7bV8bV7_9/^8mBMxzwE3m;Vqp7?+3߫D3 '7>Vm!?~Α]S\}|d@H<{W?9ɉ)DܯWUÓ/{iy@9/zծc+ei *~ @BSw}%08[iF@q'HÖ$kg^t|Fέش¢mkv!j./QJQ&{G_Nm1/3ss3~:O^ W jPCcBk 66\۽Cl!~'Ɣ5^U##HMiL@T +>Nudg (PXP[7j uЯKO[3'/Q u lg M9gAN޿Ǻl@@)`}#Wo[3qh́N}Sws<232c3b_ݱY=%Gs:tZ 1wa,Ɍ.n$'~>b^}zbgy3'O)Vz,@.EeGsł-NggACF >uꉓ2ϟ?yg'~$'jkn9(3g`CG-m/N ;vpwk4n3u$ķSKz~Ov!@@22.K:ւ 8kɢjֻk3(\x?fn J Uyn!uďu lQ:36:)ܙ{yJL~'< + @@k05;Aͷڈ?6otv5OT,'2xL>>}L\cEjھ 禧GE~8`bjKb .W_q=\j`9N 6x~{:w qtvA12qCUfn-.6j[ꦻ@kʺn8zϜ@0] #&'EIN=|3_z).~wo?|ژ@+8鼼T9az ٷ~CY۠?C $%h/]{˖  zv=sOYP[?gkWZ O鏔}ޝ'& |E}EK?UqL~jg+?Hi>iG`%u!oj 8r&~[* EئWh OqZ ]Ķgwk' _,hCb0o@L$MeN3_IM >7eKg~v&|%b@,\@WNRPtjj$]n2#Ub@"e'98:- kUCLYwQn/||Mb6?Jܡĩf #-OFz5;F[F2}<#%!:u3~vM\W8ʢN E [V&Q @RS Y銘6 & _l]A_EA' hQ^[%=% XUw}^f-#sî8XSX3U# X@)NvP-~+o/Mk;36&+FV|98R۰q!v7%L;؟{"6~=Jlu O do(Ϫo8˔[6qņ~ul19)ɞA"oëvHn=ih>uٸ7-*29|Ξb6LnDpjtZI MseZbE,6ưƵ3g@@@R".%;-\(FG^5:tE@E >9U u7\}gyp~Vfʥ7  V!P;к2mKFSRb[@#WEM@l v_2ؚB(  /ϓln‰{E 6@#;A!F@@B -2Bg!#bqZpZ$F@Z2Gɩte~CRƍTb@ f',R-ʒStfK \߳SfC- m4%غ#/3 * I% Pz(X9v#mD@JvjXly^JvU-# `-ׯɩzש'c#AU"1  ``kf#pMNp ֨)s섂쬴W0#m@@WooqVO*@z5;# Д%DfP Fqqa?ؔyG-9{V%  `-OY{\X@266ȊBv*B  X@n={X;MϪh- UWfI1 \S/j gO?J &t.4F@-@vX9wH]ܫ 2nEb@@@ݳ*+SeԮk' sꕟ3wH ݣN}m >a -j>`0r{pEFȹ9;Ԝ2b+dɽzBƴAXE=&/uQdeKe -Z渗?As>8aCڥs+X,P!@E-jJ6KQ"/!+.V?5խG ̑`Oے*Yy+ap`-JzܖX=mӧ.JM[Rc 6ӓSScuQjlWƲ OM-|ڦOO]>T>m ^~ʨkT[?7;էrRc˙a9g.J9,+M@}jj\i0E[i㫋RJ-ݣz~-Z{ԨRAi5ڞ\>55.Q][<<uQj\XSSJn.JwJY]W4"`ֲiE5楧E#q~Vz?P-#  X@^F#KB\}Q{ ؒ@.MwZؘ>hÁGf]wޤٿu@Nd);!75ed-=NP=@@@kh4.K&4w=ϑ`y#^@lRٸ{Ƭ=f~o9F~VޑE@@ZN'e *v$;A F@@T #&z;θ/3溺z|jb@l[fn[$yR^E@@*NdqSvBnJLvUm@@@NKz{:s^ߏN}v~j=1 v(Pofȅk cE@@*NdttkK%cAI`   % C wg'y:u9аrO\jPyFUj"   d'%r~ H 5kߨg^$:EV @@ ;: ϲ{j 6=495"\ִA   `w@IDATX@y #x֊&T@(oFן@h4;!N6k4|,  V!ld6,P[VN׮1-Ny:{x.Y?uMkde`έP* @@@,_ %ruMM_Zu@ @[7h SS#.zcGOp]@dDYt ~;>_$-qNݣOؒ   )reNY! Pi5Fo۰ww%  `Qd'XɴvufD!O6x6\B@@pUϐ! P >u]ó+oOw[r@dNvcws e񧎟 gӯ]͊YO 50%mCa v,X|#زH:'ܖ0kC0YǧlسQoڹ5۸iM5n*WѾg G!  `d'X胱in{|{`     `?n -gɬ@Sj@@@@@@@*OʳN       ا Y5       '@vBYs'@@@@@@@S|@@@@@@@ ;       )@v}>wV       @ Py @@@@@@@ ;>;F@@@@@@@NNΪ@@@@@@@<*Ϛ;!       `>W^ᫎXlى'rss+|[;}ҽ{wz+9rHxxv5ر.id'h-Oyz^-2C4Eɒ-27)JنA|. V-퉔v><ҊYN{^-Yg&7X=KP9ˣwk:8n8譝w^*-_|ڴi3       &@v=+"+vM 5" B@@@@@@ Ȩ `ۺjN =g̘QZ5RҥK5,pA@@@@@@zY';t={ ^9k׮ݽ{νu p…2        `Eiiimvv6 ţTd'耔شiӲt       `=曬{=7>#W@Ϟ=չFѩXZ6mpCih      V$p]w7 DEE\ !!!3f̨VνN)cqӦM#A|tC@@@@@@7nܲe,~LB-t^6-a.].]z\k~ ݷo%!v/3@ DjPnlbY,@2cfg{zqjR7! `cd 8b_ 60( `ܧWׯK/4?~B"5ȍ҇@y +.s .%!    /n1 <G<       (@vBD4@@@@@@@@r P.>:#       @d'HD@@@@@@@( 3       (@vBD4@@@@@@@@r P.>:#       @d'HD@@@@@@@( 3       (@vBD4@@@@@@@@r P.>:#       @d'HD0FHK1   `oƬ@@@B"@R"O q+O$d&i4nU|kh߫u~OO/J7)@LԥDnVԩ  }Si,=,0+@@Ud'*y= ݼ_ W/ܷjnwzhĔB  լݛLW8aJ   `LoHr¬eo-gvϽMԩ  \[J=.4kWCo4|LJ="K~ -7'k6X8ryёhLǣ%  X1c 2SLk[rm4Dvm\[DA9{v/P@|+a'tt-'5PD@@Lo2l d(@@C_^z}c4Ff}m+\߷?zyi%*S`.x޽GoU+ss\җ;ӹ:ji)|5k_Wѹ*:ϐ{؜aչc tj("  q7꫼o*u.NL@G"  V"@v?g/\.g׼]rru52l~+VOԢd'H8qhc ޷ǀqUo_Gs??& K~c'Ke /Wݎ!  `o*&IQ\оwz@@1,~vMeLM6ݣOw_ٴV[~U~vN@e ,zuy׳s~ur.?{{K=?Jûׄ=\r#=,.CB5&.&2%!659ӫz@-߲<5b'po_! SWvU/_]nUSIq+77ۧZOuCee^(~8Q3   e}Stz4eV&}dؤh>Mwl9 W/&]^?(/6sIJw@@J(J72(jTcBh: ΃qcT3ֿӴKLMvod.Oڪ?_~ۋu꿝[C&*ܲo:w|O|όphҺˀGjGvoZrtR7m/v_uJo g%LxW޽Vd6N}2vy'C_8?廹W?hu@m6EW.t(Rd m]Qջ(B76M郲 }_}t*ukW,ݽ郅:WEQ`c!ڢ}/:5VӫS9ڹ*%ƿmXs[ɿ@@oMy$-}o ] cDݛٴMy96nhKq{z#{-j&mu*bfz?{lFYt)a@@d*t90?Oi>~"%d'gEYlp^&kjn0;-I-zEv,رG5a?~77i,kN~L6vׄ'}b9@ߤ6;a/?gj5NKNe[W}WBmqy~A!~d=3d;V5Y}On B .MZu5 ~Rn"G$#-IZIW|vǘzw9jw?0cOOp4 Wŗm١}Oߴu7@@7}S4kě&+BgLQ|oM|_ rs.;,DŒY߈\⍼l >B^vӻJzJی?OmA@@,cQ3{vwZ4Wۨ߈Mk23  'np.oʹѶIN{!ׯo?ym&LOϟ59//V/ڹY2 {h4k|ĶW.ޔ  6X%&$]PM/رQ?}HO1̵y9^OMPg/LvJwMq¹Zq3G~exFݔz@@J%&o7M⛧27&3}W?奩S!$܈;sYCLtܜW\FR.Ok~T+@@,Y5%;/Z6QW?9VAvV+H@ߣFj?1<;ԯׯ;|XFIԬ[ŧO7Q$SbKO:PK2O/UǭmS,fߗ_@@@&&7Yݛ&QM+(S~\PXL3"~DpT,|{8Nlk  f ; 77Ho iopm;-Jɨڑ2  r lѠ7me|9kϊ_/>>qq~}51>7BC-Eg-q֔1ۺBO_o֚}eEVFGxq @Jޔ^DE:bE@TE bTPD*J/ H{$|rafvIv7<ΙsfMsjZ_pTsHݲ5A  [&EM.$|n7Ą8l}{< fw7 ^7oDX G@@p/SaD@BdDzr,^J)[.R7ɣڃ#b# )RarpH1OOo;{s{KJWWs  U=)D+p"TӢdjbd;((' 'rW>:BW\ Ar?ͽi+ )Zv\lĕvi}KY%b/_~ǞCM K m2S.PSߕ5/& (WL#g9ydgԵ '|nU!鲯IXxu[ :qhlՅmw;e@@-`&<7I&',mCbxԶ eXX۷PpQASe%hXibnOu|ҕ_|/?|g MruG5q   oih%U e`ACv7/ctss )ZœfF43U+lj4(Ywᯥ]o,i+N{ʡME^9TBÞxcPS r1~Î=kV=庻{@/[(US7SVU\>},J܉HT }v€aCKhNjU> RAQ(?ꠔCF(SYPԊG $,\i轢 rDzz8+-)   `osO4<7eU^dÇ&L~nr;^w?EZym?ʠ 5?{v\oqEߍߕ^<Bnٰ3 [ M4 T@@A71p}C}/j[RFpbe  UJE~^R dXBi@g^r-s6Nؗ rQC)+YA <<4Sj 3]+?=YQaDiqŜ]dG}wȻYёWA@@!M#"Y;ixRLRF+gd䓟l'CW)uUً|{ul-]ď۬?Z^렐b)REW@s Mh~KUT5̐Mа甔_7X*@s]vO Ǖ#OJTHJ-9kv*X(D!\xJsf\  ~M$3?7݃MTw=L9HAoCj࢚T{VmթR&O@@@ ;!w->aHKSIVPKӢ".fo ȫ0EL6t<vA N0ۢ9$՚ HxjBrm%"YKWRM:XNMS oG\>+"9}t5 ?r|V̍'me>TݬH2WΪR>{5 ,f0'G*  ~M.$\yn񩸪K|ZY' =5T8xژ,Wݰ>TV3?rfj4(h؞   N%` o=20Y{jBD"*e `.o@ޚg3;Av/ǫ/PT /[UєJ6g'FZFE^Ҝ"9ޜ1܀ :j uvT:p#%ANs# 0ܪCsF`͉R 0"  8X&=79C|ry yyy[6Sx[:I|/',5 _p;)_ؿ}!LVön|   $d'8ɍ0_cc Ғa!`.op L'~]eoyPW ˆoʕRSݵ>ru}P )X޼B6ܵiKaY.2IpJ<-HհC}A @@J&a&h{?79C 󲑦o2hOŵK# >QuLY 6~fNOKݻm|=֝< ܵ]  8w}7p@'@vŭ?咬NHSBvZc m(C ٘|A'E2 Wb*B)ϲIII@(d),7_SE s; )nyEM% Ú z+kz   0DsS<7C\l<7ݛMT\tFYf݂!'FZv{O?߳u1o@@@"""ޭ[Pg#`9{g,лcnZyq.[p@rdA@'3:b|V:3=ך?܎3X/l{Қq-\ZFFđg _ը݈?[އ}|C$a3/oA@@xn2G6ynr&A`?W@:Z.{vܤ9{ii1aă &N@@I̙ $q4X;Y+@Jܝ._[Ω[vZcݫo}od3T[\eD51WΟPW ׯޕcj! `-Yfe5U̞5)QN5\bF>Vl'aؕMKA ~-<,wQ@@D&a&zh ? 6SQd$%^v|(^^HD^=)Po7;y`E[-9+##wN GH>;!_}_Fx?aC5y旕%&W~0܌󾮏5kK̙݉.xٰ̨fӄ4}cE Cd56yB@@<7CصD&{| 4}SZ~3fp宯ijZBMݿ}di̵x3k[,  ٳ~W[uurqDXא.Rru]=g@)\gRoOR@auuʗM??qs3׬a\̸|._ !;$bph N=Kvo5#}oZjRٕ '5Y-Q^'3kE9B@@<7ك׵D&{| 4}SRf >GT"gO쏸|Vf ]z??jₙ|:w/~\N 73R>;Cp   ]fΜ.+] ;o^weuհ6#Fd| I FplG_ֶ6Sׯf^Aj LA(A0AKg껭ӴcHs'Ϳ˭ZϞdyJ+}oSn+}  .*s=nk=4MhӧpKE5Ps)J*Us͟gÊ%'XF}_.>^Y~t"  6HNN;wҭ%T;;8].ծO(,/S|O:?#]Yݭtm >ofG>G0~:na>V!}pk޹r&CeU7ūkopd;հDvic4BN] fz#RptR LgagZ?{rYgO۵iy]4qS5%9iJUi}ןN@@'I}Sl&?Me;}*kZ%GE\~!W7ܰ|MK5 i)󧿣9Vu绾Ȥ4T>JTD" uͯDѣGʑv#߾Q =~CHzZ7ߺzSKlkOOlQ;[B+li#}~ZFތ6ݧpGMT71}P"/xW+L2t)#K0Ms2 `o?qY>fU)Y^  k ܤ~tss#ӧ[ӢW/z}/?y#ȃ\(YMԵ wRV YRP@@]Yfi&h*k'8 k_)갇~[kfg{ZuΕ( `oAM9qIp}ZdBAa㢯_ -KBD\>3 TE|/œJuCjAo:"c;VRwl}7#5ڲc?}0Y?@֦z=SOKJZDs[H՟nC {}o>2̞q1Qh=<~/Z^iy;,_QiZt[r*z:U޿A)K/yKZ|G)ɉ6jnOjPVc_S~M7I0gެH5 @@\P&Msd<7࿰lOEG/3/?ddK5 g'ȗ:d3ƅ*k."Kwo_Vk RE@E~)UD$>r\#&;9 6LKL0EWwn?z-oέY}7+7wvRn Rq?}26 YUmS<<<<@uZ̑v3|߶5-\8!?NTOd  8s8HN>p)jOVWYK,ީJMOC벱ڌrn |"9}<1؟N||[ 3|  Q8SVecT)dG}َ4~\5KrƐ_U\8)1`h"6Vh߼ vtYB"f4@@@xnss+秢˨B{x;38,<Ӗ@nxJZXF1rBߒ  cvuAñ$.G  qOk<5͗3ݭóYa,]SNRͦ٘@Q_,Y?OlJ2}DĕjR'ߢc?%irflo*LdcZY _{>[TE}Kِ"WDP=T w~AEJX߳Rѵ'$OV  *sdz<79}*Z}¬Geb-=N"c>_^判 3r" 8X iX>uL^nul:ϒ@Gzda[8+Uۇq m8@n Koygr :n)}}@5 :sg̰8  gxnխCL&[#cO\2a7?[&[ʂmo@AR0xilA _{@uY 5?s)VF>Rj}?l~"  YHNN;w䨴 r3s\~Gw_zv\XɁ_PPtrUʟ8JB PE@OF޲`^,dUa={tѢE=z&%;!D_ v'f XN t @s<7[@ZjB$Iߚ}w  d'tmҥ;66y(;y灛%     Cd$͐.&Te]jB R"   @Xre׵b i&;!O @@@@@}3v/ %Tĥk7D@@ٳSSS3i#-_~L[tw=G@@@@/аՃARg~:B4$2nxchRm}>H@@ ̚5k:a3Np›”@@@@@o헿`B|f{ԵT6+|SGv=79)ARCf9[A@pEݻw8pʙKKi_^=+ۻb3\1g@@@@MOONuD$n>7<<   G G>\    8Ra:?Z>?=r"  c,%,ZNpl@@@@@Ye׾/fu6~Mxl Y  N+tҨ,MOYY:ŵZ"     gv3? 0iIO#Oδ1 @@\Z :.6{g ʝb @襤$yy@@@{\{ITϼ򅬅}+N\v1*⍈K   *YZWmai-  DDDX"l"xڦC@@IE;H׿e~a@@[`٩٘%r|Hp        ?+99׊s        yI`ɹCOwNp@@@@@@@\I`֬Y9n{t: v[@@@@@@@{K %%eܹ9fAa'Nx: NxS       ׯ_ἥ'8d'8MaJ       '`M~׻fYgA`͚5+VHJJ9t݆<}t" @8{rER*@@ @IDAT@@@ {wQy_l/_.ڤ7'IMСͺs^N@@@@@@\Wѽ5x?ثW x?hpcSRR/~uc9\|+}8ѩD7       ҥKm ҧr&Lv9       d.`mLگ̯-sl+5ӍIGq"6~ЁjUi޸~ *,'HR'8~pr-)ɃGOU@@@rW7YئAjmSȰYt  9HOOBi.|z|Ugln@q>$'%܎ܨDM$KU|2U,ٯq+YJnlTgL|^Pzfzi18iW/.!r}⥏|2jޡOz@@@\ ;!m6tZRҚAKG   v屆:ŏw1]=s~E4AnY{Mʹjtطm"c{|:woְ߹/   mwG_?77FfL@@p@ƕs~ͭQQ@P'0(Cf|8L=RjiA]9w~q=4`\81e@@@ ;!m65+ͺ#@@pV}2Ύy! +1>4`jqiҾtZ cΧgSG(#   nAoG\[z#@@pb;ܳuO! \:{l+RE~=ʎ)i~F   YRk;@FF&$\KN5C&  :<2Y^)Q.\tFq~権ۏmA@{zu}{yy#ˮe~}r9;6~ (     ;6qW_ԝgFZͺ#@@@Rk5jkn>C퇏~='%&A \8}x>%@ɴ*<=}a+1/SG(#  8Xl{{17(RW@@@%̽s\@jj[k5liboވ -? P̅"bn?u06:R~  )XHVU*==]}{R6t"{@b`y&܎v鴛{9IKKqMn_қt,k܈ͭppఒ9X[0;C[t (XXa&r8Vkvo^~5(m(   8Xf۷W꟞l/>~6]   8ÏNٙ4qbm)ɉ꫑JnԮU߫O1 7ǕuwoYTMBE}n&$%ZMNڮY[Pw'isbea~ߴzο&޾47?dC%SA haצr{2Ȗ%STE!uuͯ3Ο:H鑓Ͷ|vvlXle&2U Z>9BUN6/kݶ:5%/l %{.#cXKN8}tdhIuE y_F#aD^X0U6HUxyhpΏur(ۅK[.Ҝ^IM&NZ2U/%~nO}"e@@@ `?[;/sNbr(9)]#Y Cߜ.-gO8JSM /1fEi?sKJy/N~s>s=[VȏzY9_D_P&i*mQI5l2a'utd'HSJra{   p }yK[yҸ@@P (,ߢVGLyAV/ZZWirWS?~Ab%oT,qGo[vZp۟_yA}&Vn SI 6,Rk7}RZNT%?}l3,y0cδ}}4".~G'[۰,bL}%?ѧ&GBr+oK+`e<9ٺR6B3U4l=!  X+@vRN _lWof{$sc   `[H 5cx&i-{Fݬeꪩyv9+D9kݮ9K7'οP"V$˂J=?nx'V꣚;; Z3[ɀy7YXڬ}_[XhbfNV>Bšs>ܸr5ܸ6Iwmb͉6Ȟ)˺Ո\+O/2 -<̝N@@@d'؜Ԏ2 )Ί _Vίv ]#  .fwvWk|Y\9iaE\ҬiJU)dv=[V*͔B9Z8aݶJ-K+LH?6Rj#d\uBYޚ:Bg;$C6fu #w`(¢7^?ģ_=4AVv#IEN}oi hdj/la割H:-4wl]R4A   t0b]~pyFSWŚ?utK'   ĂPSͽi+Ԓe+g%K-7WgI}ۼ K4dG {Av|Y (W^,|螓GvF]o)/ſ<1/Jw?ޠT؛ W7vc w[(R-Yڭ3g|8E_=M\_MNJPam%ݞ8fU%.n}{9~[JࢲzuYߡ|:joY@Ӧu|LjjZ:(e+-[NܭhYN#z@9}йrhJY)<)X˚rަLZvS#˫W&A    ;16;>G͝/lK  8@zz'~Cc˗/k7SVU\>},J܉HN os@`/=y&(/>K Z_=u÷55qjJ^茌tuPk#KV%~,v^}QDaӪy[,3{/~\őxq%b*F{ /kUy+Gݴ?!Ru 5H֑j4߳n&y*g]])+kY~LG% C0`؄лru7ms ]l_4Eݛd&+A`#Yŕñ<2Y+ V @@miޒbcV\[}4`~@@@M+Nj~ӻ\6˗W g!ߴ(>$/YUSEǾ{xxt5}cw&Kh𻷬gߠoieC奵[hRχɿ?c5A[I{>of VݯlТ&HU+cnhw1SteA~NM6[_,e!KwTS&HvƲ,ܹMT=vj&HUf^f7&s}cDt{SdPRsk$hZ?+O׽_.vk_\eAa~.>A@@pk'8Cl9օ*WtJ   {Κ(?cg5g9GjA(ϫ&RW}|}A){iΏj:W_g{='ϰР&/OQ:b4_`g4y$Ow*ku\*D\9w>͔$4AShxϼ%KDhJGǞڏM@`/ĥ*-[K玅/njꪩ\P1T??U"^}w,T Y${vQf q;GQvK>@@@2`Lrѹ?X<4R?1Wϒ   B5<7f隟5iI5%% ^|[4Z@RSՍeyC֫#RT慱*m|Ņ q?a% 0aj_@?9#BT:( oU :Ri':꠩? 0h)}f5MP4v=LzMރ70>mz19DYY@?Djj>hMFxw6UV204jϴG@@ȆNI_vs7v_XNc-  8_}妕<)vݛ,rxF *{3R}tZ){6&'%(US!':ϟȇ稺nrpvoumd/.@MGQ.=U@@@`Ftraú=of{xye$:E@@pss -ZLhUװՃ'(7|3ae?Znk5p쑫O /']]zÚ>%AR]x"3}/ǒ 4AZE\2N +T_-^>脑8ٞdJJs=[?-*ˏM7kuu61I]CG~+# #@@@ w߹0||==1qYMk'*@Zt묉N,k3t;\ {i|wM0KUo5cİf|[LI1@s >~sV2Ɍ~6Yp d\b#'捈_~f)?/.sCD^=8g5 `-i`|Xq+kNMђ%mEv|(^^HD^=XaV5n_\ g6[v6N@@@$@vBh  8@zzs&ZscflF4}csٗTOT78kC8kq)OjppQS$ LCJs0=bn\KKMqE d'fz)< CHÙc{3Npۑ j/ѹ"$&韟&*D@@@ lFϔ@@@tvo~Y}ߛVivIMcՖ@$I^4[˽ezD*~Fo OaqWΟзTB㧎wSp Xj=!%vOqLDvE )ZJ?c{A%rgj+*+ y/!  nDjNKfn;d+jvl]gI@ǠdڨC섳'ڴ~.}$'-P 5JUv /[Uy͂džO *U 2+'/TZ?#{7gm$"+?O9:vjMjZ\'2z~5 gڴ43pR bo^%nFjoF@@@d'؜@@@ ~ m_d9eXlN~E~(Rq{u$]̞z\ M k7n{֏^q3&.n^Rd%ذD=eU'܎^gմ_~r` #>@`)ZfۧU|vY@ͨkS}:f&X1JLtՋKU4y#bWoue6n9Ne{n#rrU_ 0JWiF@@@1d'8ƙQ@@@~7e|{%_ m~Ь]^CJDJ5'Y~sa Dީ4n_J=o_٩A?+g5*;H^:n' kвοP%e xc`.}WXކ^pġk|wMKV74Gt&?bN=ΚSvڮw[uo;6>s}jk54Wz zۏmY`EGPh 6ًzydt%TH_r#Xv:{ꪩ\hE}3"   6l>-:D@@FK /YE&mM_:wlڅo9@=_Q=[WZm=KjH͈3ߗ|MpJr:tto_u~V-+Ĝoz:U޿5/yK'ݑ6ݞըtU;<2xϟ]xR?DFF F _fMeDyo{{ QAMvS:-=C6hp/iC@@@Nvn@@@ ZB6?>ioSܴO "CR+YN M0'U*xEN2̽7go^g^JH 5qAh񲆳=,.;& B#av zzz Xٿ@-~3q;.F֍HII_YnN_۸z$%%ݛU$B~i@@pQߤ\26   p 4~o~k.k诪niEMP]m|>~ꈺܢC_777u$5]X٭G.ӰaZ e)>Cǝ6R8SV-Jj)d[tB .wFo;38,cC4+_A`PfC hCۓ4[4   `?gK   #8)4c .::|XCRbqS/-;jmQ5+P"]()J}F2d*e)ɴS5YIƄ6_lӲ'ZfS 'biK]ʈӤlToww>#Z̥!WD.E1y@@@Np@@@t{9km!oڶ?ZUj7nogˊJUJY](QJ*uk4o'=@`fݺmy{LZhl?+Y!`Cߜl8Hsm 8y0@,9.tZ glԯAy"~F3#6kyzpzo E   0 @.*лw '߬]/Ə>N@@rK`5ts}|+^j.BpJSn^O3==55ؾ-{:{b_ё)ɉ ," jضNӎB3GV{ܵic# )^J.떯^<Z ŘHP6۬S#I$OC3ןn~lMp!EKjj\l|coF&'&x(pc>gzK#yD=i)E  e^z-XAC3?iLM{SZuZ^ide^:@@dy5{yy,WM׭uNӧWGIծV4o-^h -p𹲨a KZjӇtq lᇀxJs1й ~z䟶3N7sڴj&5H2wqt   }oǙ   #pf;4+E"AJrf̆&T|;.F Ay쵽lRLKg(W* {l]ܦ-J3-XxH{<|*@@@ TxsFD@@\O`RS4n@M*+0(SYjBS &XKGdϼ5yLU\8-Of'8]+-`<:B@@@@@@\HV̍s?_͜  i֮&HhARg~:B4$2nx'~%j}q6ЧD* u#ߧ}[{SG{y&wn Rzŧ)WqjU{ ;    @. C.34   R8ΞyidžM{X/uӳ=N|zgAa2~ŋgl\1G} =6|e@@@ ;!@@pUఒ窳gWŬ^_anBVr^c|n$wmZv6҅_\B*J᠀   }@@p%xwtY3{O`>K^i}_OQ)@@@g ;s@@@N'_B >-;Iydc.ǮO~Eq9   @^`gt7@@@@@@@Qg+ @@@@@@@$@vB^\        (@v3       @^ ;!/M@@@@@@@g ; sB@@@@@@@ / x楋kYf͊+r}&ݻ ;<}t"      .* ]tLۙNݑԄ:ج;WS+Ms2G@@@@@@@`g[f}       yH̶mڬ/:B@@@@@@@  nfW^bŊ$uZԩS /_IG}      mdwם?3wNly_$AAc޽{f'Ro1Gf      dtolCI/*vvPaPD@@@@@@@;`TD@@@@@@@ *         `J         ;AA@@@@@@@ @vP@@@@@@@Td'0("       N*]"       JE@@@@@@@ v@K@@@@@@@P         v ;t       *T@@@@@@@@d'.@@@@@@@@@%@v "       A;:˴P       dG3;'qN $ވ:Go @ @ @ @١bU?zԸԄ9ӆ<:N~H @ @ @( %Un}eQ)`5#/9痑GD @ @ @ @@ xCoo)a)i黜sQcf.j|4s6orGu1_M @ @ @JJ@vBItE~=5M>L @ @ @_@vBoŊkߜ!Pe발WZFMiUV  @ @ @ @@ N(~XV󖩕M*,4.vb @ @ @ @d'V^ofƍa5ZxJjZB @ @ @( %^U<0윱hȋ˜ma|cORNXU @ @ @ @%" ;Dطb?mڇha-d[_aUU0@ @ @ @JJ@vBIoź-Q .w 맿B^Snvl@^  @ @ @ @@q xCqj~]v>䵡*).U?. @ @ @ @8d'6yyg%~(T9]t\5gv:B @ @ @\x3t<)iuPN۴[xʙWΚiϯ?~mnQn!@ @ @ @/ ;!ɝ/KMУڭ.qڱ17oX\sN:qiUT&@ @ @ @, u-4~£ƎW浸ԄCZvVy˰S>pWXU @ @ @ @%" ;D Ot@IDATөv8H\v>\ߏo\** @ @ @(N߿.UUufjسjoE񧄣=,iRXU @ @ @ @/ ; ?lnܭG5j>fm [U&@ @ @ @, ;b5~ݰα|q=O)Κ @ @ @ @@Q N(jϟzUV)j&5rت2 @ @ @(f h$av[U&@ @ @ @, ;bZ^:y|l5&ƶ6KlU @ @ @bߊtRqp&AXͧ0UwV @ @ @ @@ N(~󂮘Cc{qyYhy9"3U @ @ @ P|+VyU̟}Fb ٛ6M|Q7\֭ª @ @ @(/.Z>t޻ui/2i#=#?56( @ @ @ @P[.v_'=H8,'{>a$a;J&A @ @ @ PPڅY+%%]ꍛ||ǣO7 _O @ @ @ Pt6i3 ;v_ꛫԩ;vK{>Z{j%@ @ @ @#㜄U*׬뒫w:9rg)4ټE=7U?$g  @l@NNκT^Jխ/ @ @@PƎZ;mv  @(wA.¼Y&0rΜfղ+rrZf 6iչ{v;;r@^zy4n޶nqAU @ @6 NF@  @ P6o͈Wx ;!gn>~eQ<Wp_٨iKPेj }c83.X?OϿ*c׮۠V a;um}+|=  @ @@EPN @ @c͛^)6f`^/;Rvz@v/t^tQeGn;ϣ' @8*Y{R @lÆsYWcukվ˙?SZ?5xR֠K;;m)NϽb"zCk'܎zҥ=bQٛ:ukW=RI @TL =5 @ $0O2a}/WNZn|W߃􈄗( y}/Xbn>Ŷ\Y\s> kϸv/3jؐ`ǝ6 @ @ ( ;G&@ @@A-W}/YlԴ1g ᥇l|v˿.g'~ǯZfævm~WsgN=ulTA@8gX5kϭVu ߅Եg`\5HJ#?|%|A-{u>=76:'͚<{RRRo ԭV>)H SSS/o!#n>cMau[>d[N?Y{Q @ @ NG+ @*#>|kѶc¦ 8۰nMlǞ e Oy|3c3w{7ֹjW18aEn9ׁoZF augo7ՠn]r}rSVflkfwܼ)+D/Ν|PVwYpqZZZj/#h:c&Y7d哝W rD2֬[ 6>~g?ywsiw$pĎ ?>w|oD&gٯgNΎ;75j RdŸ??|~m?`m9d!h" @ @ @j¨  @"' >=£C\8 !FO}*{ukW_sYYFJէ'5!.:ܙ?;SsS/Yxh s:s_v2֮JܣY3W<䟚o?}5cR }w+~q q@ W`pE+1paQ @(z4 @^ w8!w#N<:UI|>z[x4peGDȇ5 ?H6qDAfHV]vX~lKϋ / {cQ%@ @r/ ;$@ @@alܰ.:}#:Ic?!F/_=> -Foo/37lg!N.H<`Δ3׃SDEy7vXX+Ywv3Փw]Ok\ƾ-qhٮSt%paQ+ @(< @N`% 6n6a<`FӫDk27dV+UJUUC߱ sq _иyޮ˚U~6nVŒI?zCOG8a^ޅ:čIRRRpd5knnۿ.C?;Qv7W-VVnvNUȬ)? {V^kN=mԬScgNaٯD{IOsɹFھk~̘]60[7=H5l]7N#GUO,B @ NH"H @.|Iv SRR5kx̸ny-q=zSj5+.|3|Zs1O8aC,V?» Ȕq_=xiM#c#ϪZF\|ԴԚꆝ/W,]Vs Uռa?;sձe "p5l2nV͛vKovMo?w\ ߿xIv;y'wk7MY4oFvvv,B7;lX6cʚn)GLXOJڢ @ Pd'$F1tdNZ 3fL)؅- @ P kҼ] X%:>[_NO|kfkm8GGqg~]ދqg\@\>jkԪ}H\9C^섵W\dAܐWx? Xx =/_% '"E*V-/k/܈f$|UG8*f'YqݢպP^ x"e'o.R;/=~c4nٹ{v}{nUXrižU7UgT^3=uO[:[݄}bKbM  @ @N 1  @ A@4;RWYƎ6choԬu4Yx^p }%}\<[Zud'}_{{t$V~{5ikO{iB߰YµV:%l مPaӰ\n A~7>N6Kї=  @ PveR @=z_RJIG|;>!+7&lH0gkfv9ذI~ \c>_ta u7vt[̸YmٮSwUີ{q݋sų֋_qCt, G_kL @G@vB9kOJ @hf9<ј' sDMvڄo⣕*zxȷ0佧gvؾK`hk„h,35:m=kܬM4DΜ0^< }7dnȈң_4X#A>}{tRl4}iC2 @T =) @Z3Kx}Oc? mڲ}¦ho6h</}`ѦmҳÔq_Mh<7×_|\ ʫVŗ/8!z.yM2u|:G999VEvh93Շxn$kc/mma炟{txi\㷟7& X{~! @TH  @ $nn ?{3{?._./сA$8SJؔ0y=Ws׮0Ún_ϊ pBz tyGv GwZmWpK8"5j։ Ģ wb)RAs2֬lԴUtGx ^v!]Kn{e^rxP=下6aTzvn fϛ9a/'|C?C~ɗ ,V~!A @*@UXN @ θF/_ ZusP5haK/ \hN@to >Niܼ¹ӧOv-?3[Xta9( >ڛ/8 6ۯ;gcϺ2dggŻOhjBп~Pjp@tWÇ+h6zwa0,l޴),_Zy]*UOkj5|k1Ox?+>pN=T5 8Waɢ9qjF-|4^#moaGOJ @V@vB=zN @ 4h{޽7K8`e#?x.aS྇qq&l?nW>-h3;vֳ2`PD - rEfS?n ^jD 3V_tλ9h?`o>~mqy-m]A435jIOr97wY>[|j|3;{O|7 y:ǫT7CtˉD>X_{> @d'  @ X`N=/_18*:qGw3xcZz崴 8ng\`󥷿z婽;M2Ν?m,4lҲC?Eذ~#^ >SRRsrcgVsyH 蓕UHUpI*6ṃN vzpFcUG.SktG!@ @@jXR @ @y ?5kϫCA{|5^ >U,xf@ënz a~f>8Q6a 5UQ _ =䌳x.{uܐq]Ib5xOw]Ja.?n")S^wMAZua}\OS @ @@@v? @ P { ;gzSZuO &- <#v7>Y%z^=[!w\^ɯUztD"NθF{kG?勉!3x!E#BQBϽC4nY/:|}c֌}_}5 oMŊ ~E1 @ @@T`  B @V ᏻwjkt97?܃{$vy\vm)akp\Sw%a0[^ eAa0ay.[^æ ;lcχt?_t{(> @ P1Rrrr*{ <^~K4.B @@EXt1Oq伙׬ZvղkVTZV6 m߹G߮=oשgZZZAWgú5kԪa.?kŒB5V R V; gO):Պ% kdνz޿ 2ɶYS~X0g¹ӫVѸyV;;okWXbI\W.ٸa}jՃ ;ٖiñ6eMQz`d:XtӀ{`EtB?CyE @(Cb7'~裏~U$;'~8wC~28<_X9+kk"܁  @(_53SM,ڬvZ932[' .>Zum;a镻?l<yx}@Z/=T @ P@vBB?z- r}oڜ9a3ze eX^RNJZzztڪ>?q @ @ @ U:/n/>]VօXu嚍Wōټiò% |vM @ @ @$Q 5s*Y_SmX콣GSsg#M" @ @ @ @ Y%y/]2W 7]mO>J4<%xC4vth @ @ @H@2I ' lXpÿ_~;}}\i jS'OxE~vޔ)))aP @ @ @$K ɒy6_?!6෱nŋ{{86%5m>/:wrV*W> v/G{xZjaţaU @ @ @$Q Iܺ6gf639m daci9zUϻ8;|Fn<se;qlzS& @ @ @ -Eo.4l[WO}!* @ @ @ @&eE/`ytٹnê @ @ @HdIy~iC 7^y߇- Q  @ @ @ @ Pr'xKΞ˱O%W7ZXe @ @ @HYfhAf[WF  @ @ @ @@d'$TOz_]}ˮ*W @ @ @ @d NHd'+#:7fJz{|wO * @ @ @ @ NH:i)0''gګ/um'uӿk4iW%@ @ @ @It2aE_|;vC-W%@ @ @ @E$ ;`Kxڹ#~|-GMw.'W&@ @ @ @E* ;HyK`YYx帇SRN|j=ο煗W]; * @ @ @ @P<ŷʗW\0Gckxnc @ @ @ @d'uq,4WbS+O;8ֶ @ @ @C@vB0e0r֌.:#xj*6U}ˆ @ @ @(YբE!.Z3sR @ @ @ PJR?koX|C {\xGV @ @ @ @@ N(Ad.=׳7eΘZjsE @ @ @A }Zf9$M6^|H Uկިq;F @ @ @ ( ;Po~8wć'zOI @ @ @ "Q*}--kҾK#@ @ @ @* ;<3cx @ @ @(YvBy8G@ @ @ @*^^L?׹K7m;{R٪!: @ @ @ @bpwBQ[ @ @ @TP =6 @ @ @(6 Fm! @ @ @ PAd'TЃ @ @ @ @d' @ @ @ @@PAc @ @ @ @bPl"@ @ @ @T@vB=xM @ @ @M@vBQ[ @ @ @TP =6 @ @ @(6 Fm! @ @ @ PAd'TЃ @ @ @ @d' @ @ @ @@PAc @ @ @ @bPl"@ @ @ @T >w<#Y4ӗجcƌIcM @ @ @Q{2s.v:Aj A6]YhYpYة= @ @ @ @@I xC?䓤e" @ @ @ Pd'$0 LD @ @ @ʑ7;$08|Cfff&m1Ѱaf͚KVwch\ @ @ @+0aKt NH ?ɜt5x uy= @ @ @e'$,1H @ @ @"@5% @ @ @ # ;!C @ @ @( EjJ @ @ @ @ F@vB " @ @ @ PՔ @ @ @ @@ E @ @ @ @d')  @ @ @ @ 1 @ @ @ @@N(TS @ @ @ @1b0  @ @ @ @"P$@ @ @ @bd'`( @ @ @ @E ;PMI @ @ @NP$@ @ @ @@@vB @ @ @H @ @ @"@-SnX<+#ξ @ @ @ @ '+/[ @ @ @ @ D̤M5qO/(tgv0֬QgsO @ @ @ @@R> KD sp ;aC;j at˜7ƕ  @ @ @ @@ܝD̒*sp ~S*U=F ^ڲ&slSPé+p @ @ @ D I,ɩb}QG;kjF6]>= ˗ fm?( @ @ @ @d xC$KrMYq;HV7ߗcS>Ujj!G}<~αC*wQ&@ @ @ @d NHdIγq{^{[}F㹑;SRÔ@IDATK']:q\XU @ @ @ @,ɒ'Z[ٯYuڴp/* @ @ @ @NH c ORVt8ؔ`?d06h @ @ @ T O\9Zح49W+U=a%y'@ @ @ @Ph5jcj^jjjnX,,+ @ @ @ @d NHd SoN;\Vl5r5Me @ @ @ , ɒ,yw3V*dg3;lmy@ @ @ @% ;!Y%;)әjlvէү?~V6gfxϭaSvV @ @ @ @@d'$Kr1 H|q]K}ÝժU @ @ @ , ɒ,yphG>p3/sGx.Cv߫'U @ @ @ D$eHIMCt\"w'K'{u]w>&{5iM-i⒉cg悯>})x %% @ @ @HYjlu o}xaWΦuc3zG+ @ @ @(7;lW#?N w?> @ @ @ @p VG5o&v5jѶ>;|h"@ @ @ @.n]i'M^O.g_4szVoܤf-vAuڴU '@ @ @ @PڧJ;>8o @ @ @(P.C @ @ @ @R, ; @ @ @ @r! ;\ @ @ @ @X@vB)>[#@ @ @ @B@vB8FA @ @ @JR|8F @ @ @ʅrq @ @ @b pl @ @ @  = @ @ @(J @ @ @(1z @ @ @ Pd'ñ5 @ @ @ P.d'c @ @ @ @ N(Ňck @ @ @ @\(-1bĈCfff %icƌIL!@ @ @ @( ;!i& 4(iә @ @ @ovHI~'ID @ @ @ @ NHa0 is @ @ @#ovHa8pCLڤcaÆ͚5t. @ @ @ @ NH ?ɜt5x` ( @ @ @eR4 @ @ @(Ca* @ @ @(4 @ @ @(Ca* @ @ @(4 @ @ @(Ca* @ @ @(4 @ @ @(Ca* @ @ @(4 @ @ @(Ca* @ @ @(4 @ @ @(Ca* @ @ @(4 @ @ @(Ca* @ @ @(4 @ @ @(Ca* @ @ @(4 @ @ @(CJamڸzuNNNiܜ= @ @ @ @Hy+&OX(sJrRҫ֫ߠSV}i!ڵL7WV͞r֌ ~֠ajiGjZN? @ @ @(B%yȄ'}5W7g ˖,zd:xnoعk\ӦCfzv\|AuKOl޲  @ @ @ @١` 4;//{45!:~o_>m|uECO>jڵqM @ @ @ @ eoDcR:DYk׼AK'O6_v1 a$x飉 @ @ @lm,nnƎoG=s҄ygyuǍi_kG>ٛ>ܜۺbƴ?ts0Xu>{SZKN^F1ߍ_aU @ @ @$]  0;wq v|?ȟW\,ԗ|)s~]pBo3` JZի7lԬ]N:#mX$7>h{ @ @ @ @@ܝḒjګ/dozUq aSJJJדHP6mܦӦ|[N]|05!;wdOz߫J @ @ @ @ Yɦ y6[M?]vmXMX~% kOVs ?J9ap{OR%ZvAaDV @ @ @ -EcW͙|ppÎNM+6R:pHPX:i|l5+#c;_Фn[|SCǣNg1waU @ @ @$Q@vB1 :՚ysb?/ռbM[]MYa -4!Ue @ @ @ , ɒػ(sLw "`XbJ(^#v4b btA ̼7xpg0×u>|֊K0ϊ9&-]o˭S;糏ֽD ۵߮CxiзsW  @ @ @ @ UR%Yy Ukf5IfpѴFvT'hՠ]բ-'ff]  @ @ @ *TMd֣MwWU;--- ƌe5]nRLhҥ{4z/U]C6 @ @ @(ҹmШ=zMvٲI/>ե[]`~ڜ[U]|FFфU G @ @ @ @ %NvH cO2by+f oӨ۶ 9KvШӲu[LV/TPK @ @ @ PJ ۘF} YσOEσXdqx5hjӮѠajhW @ @ @D)a,I><N_$rCp) kDiW}uª @ @ @(ҹmQ?KY9ZkFv̻2k֌I([~襵K]m @ @ @  )aL$f1v>ߟQjL 'fͰA @ @ @R%:!U%g^?^a/ ԳHIKtܯ?v.[`R  @ @ @ @ RY>_bR%COo ǥGBTo8 Oyٰ]Tck/z5m  @ @ @ @@*T'R3ɹ,Yz}ĥ[& yCl0m  @ @ @ ZNgdBֺW˲OIQAÚYMw۳qMWqBpfDf͚Ѵ!'9s[aIם;?j @ @ @ @ NHgR;2̛9vot9ゞg_KޚՅo8ݒ)60-}{o$Z @ @ @ Z \l]|yh]nG3{qnkn; @ @ @ @@T'2ɉdfҶժ}tks!-#sOs @ @ @lo `gX _x瓦;VZ4" @ @ @ @ Uޝ*d 6BM@9˅}ܓK|V/_YzmonۣOhҥ[+G @ @ @6L@u†mڣ߱-wok: @ @ @Nv{  @ @ @ @@ N(_w'@ @ @ @_@uBcOH @ @ @W@uB; @ @ @*{B @ @ @ P  @ @ @ @@PP @ @ @ @PPN @ @ @*ʿǞ @ @ @ww @ @ @ PT'T= @ @ @ @|T' @ @ @ @/:'$@ @ @ @+:|ݝ @ @ @T~ =! @ @ @(_  @ @ @ @ dVG܈O8lذ!Cl{n[=zc= @ @ @ @ NH ʦ3 @ @ @,NvHN>}XU @ @ @ @@P= rMc~N4* @ @ @ P!P!͢  @ @ @ @@PP6R  @ @ @ @@PP!͢  @ @ @ @@PP6R  @ @ @ @@PP!͢  @ @ @ @@PP6R  @ @ @ @@PP!͢  @ @ @ @@PP6R  @ @ @ @@PP!͢  @ @ @ @@PP6R  @ @ @ @@PP!͢  @ @ @ @@PP6R  @ @ @ @@PP!͢  @ @ @ @@PP6R  @ @ @ @@PP!͢  @ @ @ @@Ȭ@k|zuպusW[̜V%Zzeq s @ @ @ @P@uBHQY7Mrܜ%T)HȬޠa[wkҥ[Jx/ի g;{qAJ5  @ @ @(J@uBQ2/>˲cnYn͢s>(|}۵[x1i%e&hd @ @ @ P: 3*%k/z>҄g}a񗒏|~&/ @ @ @l 7, yy߬&]Y8q|d"3 {ɔC @ @ @R('nbڟ? |N8ej5mijx;Oôu_r|iOR d9 @ @ @ @ ޝBLrHKq#ؓjQjiv?=bɨ^#Lg*&(((JV/L @ @ @ Z LvɃ) w芮g_v Oϯtݚ5Hq!̈⇻J @ @ @6D@u†~~{A6mwzY]9k-X[|c1_\?0FN=+_!"5  @ @ @ @@Ja^ONGgf݄襅EEsWܵ Xf͋J'@ @ @ @e!:,T3Y3mc[TQK&vjrKN*[ԽM @ @ @B@uB)6tȊ9Szhv-^ZOn+T]n;a  @ @ @(S eʛxhuBzf՚YM>=cz4Шvn|{>o.}~ji" @ @ @ @2h[7UZvZZZ|N|d`]ݘv~^0e6KL. @ @ @86ҲG:k-Ѭ.ݢݘnň`{t1  @ @ @ @` 8aQoЍF 8oY:PmӘqCaZ}wZA%@ @ @ @'Gg];/<OϬ:"gY+2A @ @ @66y gL}蘝.I:||QnXm @ @ @ T'l|dۯshg."'=TXPU^w>M @ @ @E@uBf1yO>gT/.aZPKi}zz 3  @ @ @ @P1ܕ+Gu˘ADk㦁?%rs?.w`޲Gh6 @ @ @(/ %{߂Ƀ͉{xg-ģݯnzo #Mvi+n^&@ @ @ @(:ys?#Vm;Ǡ{1Q̬YuC@] @ @ @ T'lb!uҚE y54uN<-=##Os?T)(bϽ2$ Ǝ\*'#*=Zzш6 @ @ @@ Ars k ҫUv%ϿZݺI^fn m|p_9w:! M @ @ @.:a K?'Λ?9h߶]4M @ @ @*r۾-M^wpY 7&@ @ @ @e#:l\7S?^a/ is0RFw$o&y?vШ8+&@ @ @ @.:a K3gW_b#a7F3.y$@ @ @ @%d-j7]ݏ @ @ @ꄍmô}K#@ @ @ @*:acg:ac @ @ @@f~3{cN >O|qnM @@Ȩr @ @PP^K @M]`w#=bʄfN"{K׭mԤE۴hӾYmZnm=Z$G @ P{ܟ @@z1el/9|7K>+{̪"IsǥVm옌% ?U 5׻?7w_/F% @H(wp  @TJsfs}-姇o=㵧n?괫9d~Nrfi@AU͚>W>#3GG{dmU+c6gML|O{pU AsO?Lհ ش_AqK1n. @ @@@zL_ @6[nɗ&P8SnМ5à#׮Xdy^O?I @ @I NHJ @*@ք=pՊ~α_̐63XAVd/ t]jgL'9/@ @LT'l&1  @ nE֓ߍ1חz%ҠgL摊μ^2yfH @+ @)4ro֪]Vi̞gM6>9K%*XY>y%Wfe}@U+n<_ߤYr  @ @@ :׀ @ {xjg_86###j׌\zdd̥W`^80&[F}/uݽoBY1Oa҅ հ)ϋIVd\% @  N)4 @ Y=ˡѷ_|0mn|=h19 } LKKVz'hscY*Wܮ^hYԳ5Isg'!ǜ5\ @N @ @.0oϣcoѪ҄vtI>}c.^ӛ&&<{-Y|֮]vMWW!nZm1Kf/vZ7ll+9 ̛okԪ0yYNl93vem%fV(m:SGP_}ߐ~7' (x[_ @ N'@ @&dGni`|dNϙQ|uB3{/?4ӷM:5iٽAzRt={kԬymPld5m}߮-5=xըO^lqГλhrrE<$OQ$jcm{VU|{ԧ|:1:tݳQEOګ[nNoK¾p'oY<w{AEPKw~Oz`5+crk֮%@ @| @ D)-̜io8~^lILNAA~L$[?z屣œcg|ywN~:r<{择N'FO<ꄯ>|5x@4m;V'oNx?}\mjNԭgn{7kuӿꓷ%Zf;voN5qҘiߏ\OO}YW=icF3/@j5jеAfsgM=cR~޺OSN+ LܤVuݫ֝g/q,*U bҦNݗ_.oxӮTAg?cGI2q1+iEeK-Y%&;<\jиiƧ @ @):!e&)D @؈<_,{q…̛=-|AaVa޻cMœpéAC)l5j7[Nκ顛gִo n &.o &2cθk7c`09>NRSIxÚ+V._Zn$ @ P쐲 >|x2 @6@z Ϻ/Y8'nͮ[zeQ5}b_y{|5SLr7TI On~e^|ߟzok ?xj@&{ŦVG|hhiBޣp}oh P>z`JsmաkT?t1v2ˡ}]!AiBp5xC2k sx䄑Myw.x;!k8 @*ꄔmn޽S6 @ v+zz%sƌx9bz @`a=?m5OΌ%;<4~Tz?P/8G>>sGWYމ޻P!>`m?w挩br/,6kծiW_ ~nx$xS/'feKM1v2PVݫy;ip`V6Cb"Ĭ6%26Dj֮sHx5 n.5Uޕxy @ @ NH R91W~T'l[a @\`[]ts'_pGo?凯MM* ޅP:F}]~oG,^uZ(o3WOHSEa$Q!v'~Ytat"q @ N5 @ @XFMZ->KΛ0 >n'?Ϙd7#{xlsfMI8I-cor~99.q^< P'@IDATekjm`E ~|+502ҒEʨ:!n_.z[?z}7tehv~[.%V#XFFf6/j=m:Lbr*R\Z:aVRf @l6] @(@ìfAAaeK &"Z?K&uC1.7Jn|H¿z/~HWĒsC;N26jr\W'T݉RGΛ?q:ī @ @Գ* @ @@Ru5μ}EZWpfzCn6iޟo*~lƌmиۭX$aB:Ɠ 5g2ccrrsDRحY3ጩ_129AuBV W h>ڍoW݉_y";9iM&B @s=5 @6HVzsU} 4K|@c?)G5o$ӪVK0a#'sfz\"&OK+ O߀1ϋ!'ni9{U+c2$|1CnnN2b"ժ׌t+Ĭtݠ4amY^v&B @6} @M`¹UAVjc-?OiڲOU+F6nsTڪcKapA4n&63b"A7?7,/!VQ;gʘU-^ܨI`:T's {9*6fڶ]yq\L]ߖm:4{/yedoH]_uBڝxEi諏iަCn=" @ @P͈ @6Y7'Yſ8!mUrQG9LM V,;kjt~` bR1$6FVfN3Go v&u1WO=A-c.ݩ4p_}5"NtO(oK҈̘fFe ?|?*&lTII}ܵk~Z|P @?2B @*@DG'\ ä񙍛3Ȼ/? SiA;v|n.FP? #?Ϙ[Oxgg0EͿYM[KKz2/HHxƐY￴hbKnwb~w|BFf}91>.B @B ! @6Sn{/DHaNƌF}N؍iy{bA6;gIOpŤvgM&`aO\3iiiN 3W\惰[5sǤ]/mܴuI/oKů'ؗ ǃHkOߑR4Xw'dKmg wyX+ 3  @ @`Pn'@ @v9>xN=-?Ra${ɂ;.=r'lաk>N^s¸ޏlG_: ⃍~}OCo;h$h/Y8.ЇRw?8D fx>oꟛ6&ꓷn$hh;RpeG͛==&t9"OVWeOIz'cUߖߟu9Wm_~1f%WfLV݉㿘0gKUQe=W.P @DbEI6 @lu5rsYUU*<ɣw"&?h_kn:/Eg &ん oF -]^ygF/ (fl]}ߐFMZs)cǐYAIw0En/鹒)$wn4,xBC~[NhuE%ǃ_ogZq"GzeIUvߖE$]w ވYu qw|0-xʞ}Gv&, @ ^ %@ @H 8"ᬫmиi,a]^ݷ%xĵy#u7o * "aBQ;E=Ka<(G.xDPs%9AF}DJ @@ZAA󴞴t{饗* @C gߍ\4+/[TE 5miweRfLleK]PAVprA]zw〢(vʿf93,_ߢu[nrmXW1_7/ 9wmNP40y붝v;^D7_?qNj~dAmnn{U.ePm>}{YKשרQ=|pYg5hРUGV 8dyyWW[Z(`ΌɾI  @ج!|33vީWIwyhʧ ?~ು ojfWn}[Vk?Lv,I @O@u&y99>xok/.8~弹9KWRYAF;V֤KuEKLZ:mҩSuP]nw)ф  @ @ @ @@T'-?W7_vYv̤y,Z0糏׷]qm Nܓ_{ W[M ~ǜLXiɎόNM @ @ @HO&IN 7x>҄;+Ӈ/E#?N^{JLiB4_x]:L|K @ @ @ @ RYkYM4*-8!>b[GpKw?|$JH~t?}~% @ @ @ *?jj/ќt©-{WO[aI?|/? ~|YGIZZjnza3/hl[YsfgO2s/86iN?ci @ @ @ @@j;!ζrfgqxIu[ΨZ54vmxݏdT&I?v/?#}ջNVZoz߾{4Gf^ˈK  @ @ @ @ Rl?Sft]Ͼ(F;:G_{5k=g޻Eםnչ=Y5 A @ @ @R(:!%j n\zM񃻞sqVaΚE '8&dmߵvMveKL  @ @ @ @ RT3~XŲ?~zE?z̝O>gT/|x~I=YmXVY:mS֭^2꫗zݢ[2[i @ @ @ @dT'$+qrWu-c _cz z4D1!4 Fm&vŊ1"oxΒEy#fT&@ @ @ @)pCJS0II/]:҄G'_p¸'|/Ŕ& |?]  @ @ @ B ),T+}O}ybpBtv:>Z[4ۣ#9h$]U>=]%/ȁ7,ˎI%@ @ @ @.ۏ>J'0sؐz8{Mc>r}U68Ta=oXZvǝ zX݄A @ @ @R%:!U'/7/yC,ZOV}<~zzzFF/ly„&]UU+hѫѮ6 @ @ @H@fJf1I>p'ۦA{~1Ӹn1œ+&% @ @ @ P: sK-M^wpY:gYvtTͬ&n1:DWj @ @ @ @NH c'Y:}WvKCZ7Q+khIɾ!с;wv  @ @ @ @@JS2IJ*՗X먴>=]҄`ZZ:{qn1E}yhW @ @ @D@uBJK6ɚ%g?$Kqt-EQN54 .C4~xj:]  @ @ @ * ,e=tOS̠j7mh @ @ @ @T NHdZ0?wdK˥׬^˄ MxF6{vǝ  @ @ @p %aZONKKO&M|e @ @ @ @ N(؆gXV ʂN=wjֆs}wfgJ @ @ @6DW91fdc֮Wnʙ3}s)Kߠ*"-=F[أg{{   @ @ @ @@)T'nVaǞ  @ @ @ @ J @ @ @r'@ @ @ @^@uBbH @ @ @Y@uB9o @ @ @ @J/:o$@ @ @ @,:7  @ @ @ @@PP @ @ @ @rPP @ @ @ @ N[  @ @ @ @@9 N( p{ @ @ @ PT'T- @ @ @ @T'= @ @ @*{@ @ @ @ Pyܞ @ @ @Tz ~=  @ @ @(g nO @ @ @*@fÆ 2dHNNƼFѣ7]܂ @ @ @*ꄔlPl: @ @ @ @"dS6 @ @ @ @@%Pݻw2 @ @ @DNvHfwСC I٤D7X @ @ @T< ܳ@!O*g4ׯMc+ @ @ @Rr, @ @ @T  h, @ @ @TH r, @ @ @T  h, @ @ @TH r, @ @ @T  h, @ @ @TH r, @ @ @T  h, @ @ @TH r, @ @ @T  h, @ @ @TH r, @ @ @T  h, @ @ @TH r, @ @ @T  h, @ @ @TH r, @ @ @T  h6hyk-+((ؠY &@ @ @ @%,#R/`)/?7+ꗹA A[kU6mmٶiѲwə{S_{q+YJ 6عU}:&]tZ @ @ @ @J*cG ?篋6f% >/orO~͚Ǥ_|e1 y,Z0糏׷]qmK @ @ @R(dbxq{ė&L6g#>P̥ŋyз^9`>I @ @ @ػ8qR*e "PAEQc j4lAM51_KbAK@A(X׫6+{ṟygΜ琿3 @ Y%Lsc~wE2Y?z ƽWJ~~^3g夅cY= KN.zI @ @ @H@1?W'e^.̷d4lS3?sڶ_h>{_Re~}ߝѠa>yߊr{}AÏѸIϚ5co1QZxKz>:--- @ @ @ @d NH3;sWi۲uSUmĜѝ7w(3 .;fZz7+o>|ۜ|Z{}a?Յ7'۟y^t/~6[ ᶝ[|3'^m&j  @ @ @ @@T'$K2 |38JZff)4cf-zW.ӱq1 @ @ @$O =yS7 p[sYC*Tk_yLk, @ @ @(E@uB)8?3۫~36i_WN=z{=fY;λTJSL @ @ @(d$bnTM8̱S]pM ?x/:7{>?z{:Kr'I6`gV޳Y; @ @ @ @ NH:ir& n[O6Ԯͻq )jL3pmJ>Ӕ& @ @ @$K@uB$q&]:!i镢{|ⳫΎ r1~uڅ S^yGѨq_L @ @ @I@uB9&yG׮Ѥy}86j f6}ߨyߘM;"/&@ @ @ @*:\y9y澝e͞oFq^n{7\= -:ӫVߝ5~޿(Ҧ= @ @ @(?7NTYWiE;t\]|3}|;۪MSL @ @ @~2 ?w7ڰ*kޘQ?^ jd6rFx3OϐxiB?e .) @ @ @d~2nTo=[oY5[,:9~Ffx3+gN{3JՓ# @ @ @&;Mwޣ]o/<1~A{7\f9iG?҄5 @ @ @ꄟZ~ⷜcfIq?jj՛M֯X>aQ~FM @ @ @؆~jڴybtE}ߢfA~^ވg_$ӫԨ5C07&zҫV+W @ @ @ @` Tކaoz ocB`uYbE}݈+JՃcL38٭{ 7)cPmz 3˘, @ @ @Q@uBV]χI'?zߵk:6{ߌrƗ ƍbyQf:-Z{BQ쑯o,{⁇voe @ @ @ @N(Rs􇯆`^4Io,)K;]zek,]P& @ @ @ %PAV}/Ff^oWe:-ۜ~萬Y3v!@ @ @ @D@u6{uvk]Jڥ/rF̱S[{bbu @ @ @ @ dm֩su7wo7Z:˗ouwos=v޽m_Qk4j\BwN @ @ @؆!wVw6' m+ @ @ @ @ dr@5% @ @ @ P @ @ @ @ :PMI @ @ @T'0 @ @ @ @@9N(TS @ @ @ @1 1 ! @ @ @ PՔ @ @ @ @@L@uB CH @ @ @r@5% @ @ @ P @ @ @ @ :PMI @ @ @T'0 @ @ @ @@9N(TS @ @ @ @1 1 ! @ @ @ PՔ @ @ @ @@L@uB CH @ @ @@rsǝrȑÆ &N=!@ @ @ @R@uBҴCiBϞ=6 @ @ @ @"dQF%m. @ @ @ @H@uB^f=6 @ @ @ @`x xz';Q39#F 6,''CR%m3gLZ' @ @ @T4 |#@!|9cŘO>*ƫ  @ @ @RY4 @ @ @H! ), @ @ @ꄔ|mM @ @ @RH@uB ,K%@ @ @ @)):!%_E @ @ @ @PB/R  @ @ @ @@J NHf @ @ @ @ T'˲T @ @ @ RY4 @ @ @H! ), @ @ @ꄔ|mM @ @ @RH@uB ,K%@ @ @ @)):!%_E @ @ @ @PB/R  @ @ @ @@J NHf @ @ @ @ T'ڥ_<7;{kg1 @ @ @l@̗^.K&O/ak-((([:[nުNV{Wkצ[p/_|CfN_9kzUa*Ukl׮v;NB @ @ @!*O_,BMtw{wQlKR^?~S nX5{VN{_~aײ h @ @ @ @$ 8!='Ş-M(4QɏZχ ]*o ;딢 򳾚'+ԯI @ @ @(:!7>7wWo-㰼]`{??? hkfd6._֯zV~M @ @ @ ,';$Krjd4lS3?sڶ_h>{_RVq/}wRFQg`ci{}/λMtf/?tYՉp? :_F  @ @ @ @@T'$r&xߝWECh}Gm:۪My wbΊeKΛu-] J3{⹖Ǟ.yƹ3Vn˄veCb GR@IDAT@ @ @ ';$q&Ξј{v5lL4!&* *m#Y:U! ;k6٥ͺ}}iA~~Ԍ>`lvG͢A4;☨ٔOX@ @ @ @P 77wժUp ɽOf+E`Gc5ozQQ.3_~>q5쎐5kλ-mj(zHKWRI @ @ @;ʕ+_z饤<|^ԩST999Ç2dɓ,X|PPrzu#<餓oW~ e&kJKK%uZ_^huœQãڻlبYR v={t5D @ @ @l/~~]Թ)}X@ @ @ @P //O>oVѵ=+UN(ti'p;vXRoN/l]}>u!aǎ+W)%êWzUԭ߾Cfͣd @ @ @@ݺuիW.ᰆB ~\pQG5i$$Ϙ1cԩwߘ1=77K.=zt _*(f1 ?; y9ҫT=;-hlYYJBs՟<|jԮS{=yX1 @ @ @vk͚5[|jժ6lgwܱ߰S]wuWs9\~{Owy N/hu>t/~6[*ᶝ[^tkΏ:h9ox{5̉ wE ߩO۝rP蒀 @ @ @"?A͚5f%Kҁ\P[C(4g ';D_}҄RXÀVX1hРm~WT@uBzAߌ~3NRƵٹمoj7k㑧vVsVF:aG 8s b'>W~ 6(qt @ @ @ @` 38cܹ\xg}vUVZxQફ2dĉWCĔ)StRlrLkڑ-YT4!j<\RiBY"r[3o/Mdݎ:?ӢN;ESИa @ @ @l 70jԨ:-:ˬYNݻr\ pGCB'ě<ǫq!ghߟ5>to.}xuœQoD wn[Գa͚yc~_4}{ @ @ @lzw$FcQt:<,)K'O7+xl *WϨnhبE}ԣnEfgo-Yz/8KBNZZwo~Pmq\_P#'A @ @ @ ʺ袋^?(o8{YRܺu,':=E/9g}AƗ}g+ܰ*+LćxnGS?Se{=-RIK?8j  @ @ @ @` `ĐVZ 8*Udff9sfپ"=~Nv/TJAw^9gUn\v=:W^=tx: 54o}l? @ @ @(1c{(;VZ,z_5kLKK+PlsN:śi&jV@uBG߭0sf͞oVS7ެnxr굚]]bY  @ @ @ @,s Qf8 OFSUR%4˲~4dNv__t]k5k~C* t\=wv{]0RVTQ3JѨI  @ @ @ @,rKNNN"3###^P.g}6.uwB UYƼN2޵Ffxfff(r%Y_oڃ~KO @ @ @Ef̘ODW_}uf͢V/^{U4{_VWScrV*j,:9P#QY܇_~wI͒?Jժ7=ȨZM8h‡Q /'g½Ej4ޥPCtI@ @ @ @EDFF\P4=O?t۶moM:iӦeeNHVmZ<1>yoQ ?/oĀ3/[]msUjԈ`sz F_{y??y5F]orQS@ @ @ @,Y矏BA ,8c9^ovZhܸq?b :J7X}AMԟ}+zݨ?JՃcԌVǟk8Ϣ p+}Ǧ{ucotImۻ  @ @ @*#e]Vjzi 5*9'O>#)o4һyZZڦ @ @ @,J]vg}fك뮻/K8!UZzРAk׎:S=PmհW̋nxG5K N^YZM_ʆU+9fO]%'̎* @ @ @DC3gNׯ_oVpǫ?oӦfSmQFxn=~:-ۜ~!M~iѺpD{ﲫ˒, @ @ @O>dD޻wY`Ȑ!҄eƒ>o DuBa$9n-557V#{qTΨq9vjcO,"O9?VQ=O`(jժÆ K,pö|U9躛;]r7{wG-·JFݹ;6Ш55ެV8x7>t՜.HKOlT.M;E4oYsJ&@ @ @ @ J֮]QzQ\ꫯ^zu"?--:#><2U'lWVmNI_Jڵ8O&}f @ @ @ @`:*,K|SBo߾Qs ]VE @ @ @"qW_}5q:te ^xDrjծ2L4{'r @ @ @&LbŊݻw{')cP^2&o4 X @ @ @|_!o1?~|Y`{om @ @ @ @@* N87w/^zJ|  @ @ @~:qE7V~5̘1Smz @ @ @(G%K̚5+A(M QYP: @ @ @ @.YPP|IRnRY0 @ @ @H1 ), @ @ @ꄔ{eL @ @ @RL@uB0%@ @ @ @)':!^ @ @ @ @Pb/r  @ @ @ @@ NHWf @ @ @ @ *z+rG9lذ^ĉ3kK:  @ @ @HQ;`ܲ+ꄤPгgϤM -f/< +F @ @ @ؖNvHQ6 @ @ @ @v$:!i/GID @ @ @ @`;pC^13bĈaÆ$mҊ1gΜYt-MtE @ @ @ yO[yP '3VSluB=;_xcVA @ @ @@r|m ɡ4KL1 ! @ @ @ PՔ @ @ @ @@L@uB CH @ @ @r@5% @ @ @ P @ @ @ @ :PMI @ @ @T'0 @ @ @ @@9N(TS @ @ @ @1 1 ! @ @ @ PaNS @ @ @ @r9r_\ddd4l033cǎV2F@uK @ @ @L ;;{֬Y[p^xolٲw}o lO @ @ @ۃ_ݻwSN9瞫ROH=ؚ5k7ҥKn~V[N /2 @ @ @ @`Ky+Uڬ$ @ @ @ @`{8Jz+V,]4Z~ DRB7ndɒĐ7FcCfTQFMF &Oo̞={…a͛hcСCt1"}ƌ/_aÆ:u v1--[vIu–rrF83*Mج[i/Ӧ˳f_ϴ?Qs]v;fL @ @ @F 6=3j~'Gyd<5K .{.J%F+(xOjBAt)B'xn5kV?_uUE]t 뢳=쳃 ; [ٍۚov锏`23_~>^Ph\?pعoX%M @ @ @~1 Їv-:rȬYRnݺ^{->Qs 3gx/-MHL8a„ /6mZX`A3,4!;u?K/ Qް\f=rGۂyg} 6R$^}Sz斒 @ @ @?pѣjٲe؄ j}¯QsÆ J,)6lXvvvtώ-Lra⃲ ;w.Towg?>իC=tWJޚFƮ]hԥ畲AI7^1<9/g}P{j`󣎭[ܵY_bd?tG4D@ @ @ @[`…={\xqsOjբfwF=/V<|O?TFDM7ݴjժDN8q-A;#-[ԫWs %:uZ|o?bҥsCk׮]4* nw}7jx S5h ^> <̿(;sogk [W.c4aM7(m>5=;֪詜Ѡa.u/_s%Iq'rPh @ @ @ۥ@-W_[g%{Uyá hO>$?|իW׮]PZ\~СCQG뮻fu?BAA8KBSO=?l"=,Z(>K C.1cg q(;6z!TcD9UVm' ¦[e\aC(sk [W.c?ysF:R26U߳˕V-}: /KSꄢPz @ @ @H!*vP7߄39wޣ>:+N e D~_fMF$v5(ƍ;@!K;!R{N81$zT3WqR[nKa%CCxΖṶ̄F- ?ljG uz-R:묨:!?lذB*afYJ\}zaxSL @ @ @^ 6H+==]vQ3īVZtW|͕+#ʕ+/>d PG^9>he˖ESL իw=\xO?4aD-T'l1ݖ95w5MSFs׬7K7vi 2KIv @ @ @ۙ/-Pzb1n.mB?oԨQ -DRz?a(yԩ_9ࠃ_r }zBiœ9sn~p '}]˖ȌT'lXU r33N{  @ @ @؞F\sM /xP|YgE=Jvv/{Q5駟?),6{9zѥN:N:QsaODsڵ}Yt YB5ZjURfU'*9s5龻sUΨq̣TeѸI|`NU' @ @ @lO=TH믿uֿկfѠo߾D8k]bEY~O`t5.TV-j͛:nܸpBA|=z|)cwn^W]u#<t=5qm}_~yT"zv[N-[;cΨ7·쳼_ēw9DuB5ԪfuJWϝj @ @ @ϖ9 -tB:!~-vll޼IW?ã>:l.SO=5uGwkXng33 Zh B]w5mڴh`ff[tM?~8pkΌe agh~ '!,8$Jؚ@uU52g}_5>%-4YѥpD=6  @ @ @  T^=(3??Y&ܱc8 SR0x嗣o c=6^z _|?%Oh֭[7;;{ƍѥDaxwuBYNo~¥MW3gNxp)1;\t-I߂1T@};GZh_ER]mQS@ @ @ @[ mЯ_@KF5  .P{nƍ˒?2dW_]49++hiB(Jx7CCDiVc&® 'N,TPfx lP҄o h~d2βpY%w(A fg\\uZVZR =] @ @ @ @`;]vo?ڵ ?3w[DUzfAFFƸqBI|Pzf'N:+0aBI{'+)'}uo ${9vmnP/N('Ww?w'c i]VL]LbG_^/z/F; ?Ǟ} @ @ @HSN9'^h=4hlw?ի~e_C˖-Pn;wn،Yf_I3 >P+ʆ \2lFϡ&)ixyC/7߄֭[jӦMo?G}t(b(4p뛪ްBPJ=N3'V3aK&OX'wgFuٸI @ @ @ @@`Ŋѥ_WQ\ ===(Of)c~i+WUSzZү'}Fn+[~\jzJ4D@ @ @ @PGO{uQO"vv/?gvQS@ @ @ @ <ѥK/4 8١tzc"a+/,?n+kMv]Ʉ;{+|ӃqiT6 @ @ @ P!C,YT~ꄢ&)Ӡ}tW]=CowM):i/  @ @ @ @Xo=_f͚QSP}R޿Rժ\ 9>R|~甞* @ @ @vL˗?|pݺu'NcM6-AQF.ldٲVenzT~у.[4გڬ[.in%%'@ @ @ @.f͚"\} 6,bT'RQ:;; |`5;pqK|̛nMvӼUVm=;~[0! @ @ @ йsAq, ŕb ME[. @ @ @*V^".MuBE|+D @ @ @\A7p_|~6m;vҥ6_X*.@uB*5k&@ @ @ @rYr͎q1=% @ @ @ T'l3z7&@ @ @ @;E{L @ @ @ T'l3z7&@ @ @ @;E{L @ @ @ T'l3z7&@ @ @ @;E{L @ @ @ T'l3z7&@ @ @ @;E{L @ @ @ T'l3z7&@ @ @ @;E{L @ @ @ T'l3z7&@ @ @ @;E{L @ @ @ T'l3z7&@ @ @ @;@99rarrr~dw8qOv/7"@ @ @ @O@uBi(MٳgҦ3 @ @ @^쐴79jԨe" @ @ @  NHѣG2 @ @ @l_^zio_Od7*c13bĈaÆqH >|̙Z$@ @ @ @&:!o$(O2gsGuBxVA @ @ @pCJ6&@ @ @ @)$:!^ @ @ @ @P͢  @ @ @ @@ NHe @ @ @ @ %T'kh @ @ @ BReY* @ @ @HI ), @ @ @zYJ @ @ @RR@uBJ6&@ @ @ @)$:!^ @ @ @ @P͢  @ @ @ @@ NHe @ @ @ @ %T'kh @ @ @ BReY* @ @ @HI ), @ @ @@Z뎹vJZNRcΤ,$ @ @ @ ] NЯu?T&Vy_ny̹2 @ @ @lNv/7/'g3҄,Ncl @ @ @ Nta/+9B @ @ @ @v):"ֵv*Hc$.T @ @ @  Np/ &[8++9B JIY̔L'@ @ @ @23>Ĝ5#{r[ۧyĚLt @ @ @ PP ?zc~lt'Qk?++ @ @ @ @@@uBibĘQV_Y$Jbbd: @ @ @2–Fy*U#{ڧQmxOQ'\TJ\^ RkFoM @ @ @#:8zEN;vSǴsHuBI6 @ @ @(7;G\ @ @ @ @`ld @ @ @ Pov(^Qv4p3v8x AF&nI6 @ @ @(enǣM~矌NHK-5n$H @ @ @ E@3 @ @ @(B`J @ @ @A@uBL!@ @ @ @ !:X @ @ @ @EPP4S @ @ @ @BN( @ @ @ @@T' @ @ @ @kh t?ipI%fj3 @ @ @le]PC @ @ @ʝrwI$D @ @ @2 [u: @ @ @ @ N(wDB @ @ @ @`+P]PC @ @ @ʝrwI$D @ @ @2 [u: @ @ @ @ N(wDB @ @ @ @`+P]PC @ @ @ʝrwI$D @ @ @2 [u: @ @ @ @ N(wDB @ @ @ @`+P]PC @ @ @ʝrwI$D @ @ @2 [u: @ @ @ @ d*rBÇ2dHvvvE>=:AT @ @ @$':!9$F Ob! @ @ @ @r xCʮ#R @ @ @ @V$:!eo߾)[B @ @ @ @`+f]~ 6lȐ!)[|,4t3f\dA @ @ @O@uB*YP'+ :|\ Y @ @ @ @B xCl&@ @ @ @H@uBXR%@ @ @ @R@uBl&@ @ @ @H@uBXR%@ @ @ @R@uBl&@ @ @ @H@uBXR%@ @ @ @R@uBl&@ @ @ @H@uBXR%@ @ @ @R@uBl&@ @ @ @H@uBXR%@ @ @ @R@uBl&@ @ @ @H@uBXR%@ @ @ @R@uBl&@ @ @ @H@uBXR%@ @ @ @R@uBl&@ @ @ @H@uBXR%@ @ @ @R@uBl&@ @ @ @H Z9SY&/wcpiUҪիWdܜEn" @ @ @("ӕeS&y@ύF6;gY~_tڻ/:y)+MY5^ut\C;' @ @ @ @LWs>1,MH~ɯ<_$zֆY1oa}?k7o=F @ @ @\ =+Z0UpŒ c Z֬N)M['kϿ{=wH @ @ @R@uB*5S֜C?va |Uiի>yH @ @ @JR%uh9'W_Ee&Ҫf|օܰZ\ۯYӧayxܗc!t @ @ @ @ NHg VJ-k-1Ϊݲ/߬na^p'5cjкŋC+A @ @ @R()LRo#k?H~)oT%?/Kxh}z5=#3 'AUD @ @ @ @)PB,xn"PFMvmχungZՌ=SM0A @ @ @R+:![-{eְ'nL}Cڶ/noc}<2##GrׯK_n?t>}"@ @ @ @(SF%]KZ5ov;}qxsH=X*״}@# !@ @ @ @EPPtbΜ~5H6H1 }ޗvx$Vo;k$B @ @ @(E+3yٹY$-G_^A1_y6zذSYӧ1u㺵E?f=vIq <  @ @ @ dR8.7'gs֬ooǔ&t1|w6߰zoݹE˗~r֠[Z @ @ @ @ %-í>Ȝ;U7n~K&}Gz捃{34!PN=/#n:|1v5 @ @ @ @@ T'3}1bwDfԬff&5AϚQ;zvǣ-`F6mITIo^U @ @ @ @@١hnEQj G}|6?EʟsQ*szHڵ}#'OzE~r}u4 @ @ @ @@JT'兣8-6>=1-7Rrά܍ᡦ;YV-b}`X~ p9D @ @ @E߃6߬ j4w1[@;f)0! @ @ @ P4 Es+_WfE'TIn:mEM̌j @ @ @ @xCJ HA? G}?oΰ4j4nj,:lr@Ț9-zb;Ew  @ @ @ @@JT't :tnбuV̘l҄qޗ5sZ82h{=h @ @ @ @T NHdٯe׭[h3NxF6;''<$H @ @ @/7,/+Sis|;F @ @ @ @ N(X(x=cϫoV~6ܵ{Ō5 ( @ @ @(7;Gv?ip)6kN=k^1}ꊙӂΚ5=-=F&[jw6}@) @ @ @ @ N(X_a.'Taҕ( @X+Ōmڲ}Mc[}V  @ؚT'lMWӹ @ PfML>u7SQ:gi322_a#W=쵘S;o1"#?ˎaͶ]~yLՌ-ۏK>M81ҨߨϏ ^2cR:?႘`v:m?CG\q׻A7h m @l}[[9;# @@^^n[/Y|͜8歷0އjժɯc$^ J~Θ0pN2+GY4l^vuV̎Dʼ,>acH0M2 @ @@PP  @ Eg>y3xt:\9ǜX Ԁ" %'֩0%Y l7rn.= @$/:!y+#  @ P.Ϟ|^) /y3ˏ1kl ]%qWg-}OޒXܚS`+IOdY @ @Ec  @@8[.<|6 C|x)"UIJM2U!@ @@ T'R @(=Vt!--Db nyK+f.d$@ @@xCɸZ @I \|k4w%Kˍt׮z+.C[qijo>ċbNYmc""~x%?#&Y~L @ P 3 @)cZon[0o3acaǟ{Z#-t>[P{/UV-,˃dy r @ @@T'  @(Ym;^x?n{O^tQ`4l2ԬU'+. '-_a4jںzM-֭]h̴dq㪕V\fZu7jֺv 7ĪesgLX|qٰa} z 6mѮͶ]7?(GR\;'8>q1g7-!̼,_ IY)i 8yn oED @آ-@ @HOON;U51ٌ~غ5j֮G_{m̷\86{sUN16]z6A]bթ߸^91"99yL|?oծ0m& }1>9wĘ੗ܛm[|d-c҂`q={wY_|ϣ>9G^v{Ё{EPDgч訯?>qd—%&{+.X:vlu:v\'zz 1 #W쨯>G,('R!f|!j\d %fY @T' @(G}1Ynu 1;m{_cϫ^{q <5j ӯ:xW6_}iQg0v F}|e4:u#:a1#O }s6=tѼ3v=;:6ZG 4ϰ9Sϐ7nަA>㈿\fҡkV-IT뀣G6ŏDJys&ߨyֲE#WXS7r"Sf2yVFFw-:'7 'H !}Kado- @ @ H@ @E ~T'/>z+4!k_xNsO1 :uGo[ SNkG˼حg❛+)˘/ܧezpao?V:.u \vkVgRnl=\6!acSpAqI^GČ;-&XnaNힰ4!sݚw_y\0d#7$7-aEIfz"@ @@%PP> @I`=o,>% G?tuݸqC£ \x؊<]L}MM/HnpgD2xAcS_ց%uL#7)vNΆ.>rW.A)?7B\ 6τOjчj4:Rvao<񼃣_P@zO~?0 Po1뗇nao!g9 @ @N<ڙ @ PަKi,NT|!~#Am<&!fWC_+{}u`^ƻ.?vŲc,wy[gO'n[1o>um/׭Y 'WZtW/5O Xђ|枋wG3& 7R~C(x:ZdY%i_ @TZˣJ+R>|!CH9;zr @TNǟEboꄄ/hr=k]UYKgMV3}ڄ>~?3w]ݍ8CӪ5kYdosc3rCq? s_"]w;蘳"?}'kYDcjӛ}ށô#W,]ƣg#:mёH;--}GSm׮^#?o#ZGC1cOrTQV!?x!Oa{F/ėѫm\ttiBŁGDN=xl@t|ԱH{)MOt7)̝117A@PQSxԠ_y↑TI= &9E=m:׮Yb0~?loc~ *x;𨠘&e1.ɛdYfO @Tv ) ۷oֲ @6#2`ΆcsfO3&?8cn6~m0`p!/_&6Zx џw֬ ǔUNƗvFFf|sfDsD5eLt7M~OFF); #jkt]U3?R1.gg+i"#onŃG_v}1sWXS7-9!o>{Zuu:墻h !~I&Y~  @*@ QRu6lؐ!CSxٮ3t3fmv'@ @ " 8kFMZnq st/7 9tyt};ǟ?.;'bÞJ5XVn~^~ꄘT"cׯfN7̝*ƪesOߺё.;Ӵ6̎_F#lI9Wumܸ~]%0cc*Vg- # %qCHQ9 &s,'J @M@uBeΗ @-2QuB&-gׇ't6^~W.7>҅U6\jyH$l?tjvo{:nnJj&2E0gY6yBaWK<"?~٦-c"ꄘ\LtSpgo8N\0s9ia%j9xIcJPe{4dfhw @TZ ;q @*snܴutpuֲn1'JN|H+oWr4/wn;!Ou$3ԩ(UfзrSfY#f-Dnc9fbv|ʕKD= =%~i ~PG0%(buBI-?dn'[ @ @R 5괝, @*@xIcϼq6՛Ad99a:ӯ FJ"/??P0o. \*ϥ A nش6nUD#xXxJRبYsoYpq#:&[rOPФyۄiD[M.B½&==-e_/μt+>"˗vE ^P t(??/s8_)xXIVF֬Gˬ`6u{Lz?hw >'yï'9_FZ~m'=uĉ0٬նg_䎻ƄiظEʃ6tIx( .^87l ~{|WoX/>ziSru=*wƪ$QP7$MLҳ) @i(  @ @D^~ w1ZD? >t9g.q.K6jGDz]a/UPa|=Ɣ&̛3RvMoa Ny=.nV֦ioM%<$jlB^JCAI ,S+M&Y6ٕ @^@uB@ @@ExLfdA11;W'̝1'n|1]/Q֧zm}4Ҟ=u\|bEϞpjڢ]|<̙>>aԂ [f_?..Ҥy? if歷gȷ_ sCFe/MlS; @*@la~p @(+. uG׳Ok~=OwCAdW517jvÂ`ƜןG9/1HUN]z 9YFLdsMa_8 AmKPmod)so>Icq?}nts6d}uܱym1rԠ>y饋*lms$7z?5m}x|$7-6Rd&lw @TZ ;q @ʋk$&Ο9w_ }5 |1nF:ԟ>ˏㅑ-t໽n8u1G=#Ɯ׺F}C?DvFf6:v nY"u{chDoIX4VdF~>a"2,& H87 ϡ_z+kF_Kn{}=\䎿b˜x= 4RFAq'* ld{hhLQȺgO3>a77h07 @ 9 '@ @@) uűEi๷uas 9|?}Y >1x|p4///ŗ&G{/n3226? kN }_:D|_;tK:᫏_i3U_l#zkGreVۄqrDÑ[lzZ 8ͧn+{鼃t=]]ը"+</386lҪ'+nAyIJ3( 2$`޴NÞ;piGO}JbFM JPI$K(U @ @@ q @W "ȁl.]9k^~3 - Jo`=#NiއNXdAC雴hWaL?rD̃u22uߵw`ب[QukV^x܎w^9=j 'o9'䍠 f߼ܷ%TԂl!2k9b6*S/AAO!fQr.cC<$B[Ȃoe  @ PiT'TK  @s7Ăo\y>AosČ6oᴿ?9}??FoO|<&rEwǿT"09Q"fR6nֺc 5֯[׃O|>iiyDwvQUOqpM&x=;l)[Cc~g<ɔfmo=|2tyqɌO !vL27ɲ @2 @*@μ?]~gѰIu# 4(M5kՉ>TB󍛷&ޯwnwxx ^xkN&g\h~͒EnR/2Ոw'at@57k≔n~}@d@|GS{CHr2MLҳ) @*|; @I x>{_{5?5!gg +?8Gw۵O”ҫf;_յ=5a=퐑/izwߨgoT<Wƞv}[=8ċ/G aag]D&T$tY?A]ES{C(`9dj @A(X`ofg[ @ P>:sO&b_/ߨYF͂]9xN;%v^^qLɣ,vu5+ת]/ڻUK]ݮpZXr勃VXaj5jV^]7+?F͟=9Sרմe6v}FMZsظ1gʸo|7tq+W, s6۠IM{{m,*0ۏשרQVuٵ'oش)!?+ @ Pb$~c} rs9%aISdddv߭O)+ۚ%Ym> >%B ehY @T']2qq AmYs?:חNf˪TOQAF]6t] @ @ @ @ X}|3ypG ?\aeV̲/]7}vK @ @ @R(µ,UXY ;e/[cK=D @ @ @ @@T'J(dLquB^nǧ ;D٤u^q?$B @ @ @R"ꔬk- 䬚7'2,=#v[Pi͍y4h˽zui{Py C,t6 @ @ @Hꄔ0e Uרۦ]Q_zUo1vEZ5^tW @ @ @D@uBJ H^nn:BDW'gdl4fψ֨s6 @ @ @H@FJVHa҄9Y ;nidY3[84C;4ܾ[fZ[\{=ajmqJ0`QÚ#M @ @ @R":!%^$|C0AfKf ?wcZi鍺v;$PT}OT` +WN~qMv%M @ @ @R"P $JH֬YW>&:,Z*~+_pFvmA @ @ @R%:!U[gU',mn-ΟuƿdtmS^{>y#'>p @ @ @HFQJ7;7ei6v&/4aoX"~o}ܦa_r洷_%W7Zhm @ @ @HYfӢWo_kA{pŤ^9㓎Ӵ  N;5 GnO.*:M @ @ @R()LvsfƗ&j4j|O'iUWGbُwNO? bJ|^533u #@ @ @ @wޅi|6_emX2+?7wkoմY}@0~mׅc~y5f0R@#g͚uwmȎV^}oS @ @ @ @ RN3ky[5"x¬!ZiMq :Dǵ  @ @ @ @@ N(QT.hꄍk&\=7'=UҫUKwjuA  @ @ @ P:J9Xvo!:M @ @ @JM@uBQweS~^ݢw^.M-x#E @ @ @ @@ N(5l4/2 u#ne7NhWbƴ.Y7 @ @ @ @e"^&VM虽b%G>Sx))=LQCi|s9W7v/(M%@ @ @ @PPk7upC?Y&n1MU33nX|O].ӟ  @ @ @ @ T'~^n\F:x5ix9vz=κ(f. @ @ @(+ڸ2cF?pG^Ά_5oN_ W =Kz}q6n1H>}7 >a$F k6i` @ @ @ @@J&;}O8pY===z6[MeɄq~aҋO#k5kWݰQa{OMәI @ @ @PRt9eS'p&69&ld֭wгoTS'ſ^%@ @ @ @D@uB]-oÆz8|Cj갗oKaY3E @ @ @ @@9H/'yT4垁?M6hpzFf7[4!5KuB~ @ @ @ @@ xvB_m]|>[1cSW̜V%/F&55nm68n{V,|O  @ @ @ @fT'ltmS/v#@ @ @ @$m @ @ @ PiT'TK  @ @ @ @@) N(%h @ @ @ @J+:^z'N @ @ @JI@uB)Aۆ @ @ @TZ ;q @ @ @ PJJ 6 @ @ @ @ Nމ @ @ @ @RPPJж!@ @ @ @V@uBN @ @ @R  @ @ @*w @ @ @ @T'm @ @ @ @@PPi/'@ @ @ @$:mC @ @ @*J{8 @ @ @(%Rڧrl3|!Cdggoe;z쌜 @ @ @ꄔi Or"@ @ @ @[7;J1"ekY @ @ @lERv1훲,D @ @ @"ovHׯ߰aÆ EBC1cFE @ @ @ PT' RbXkǥ @ @ @*7;T&i @ @ @ PT'T%U @ @ @ P!T'T&i @ @ @ PT'T%U @ @ @ P!T'T&i @ @ @ PT'T%U @ @ @ P!T'T&i @ @ @ PT'T%U @ @ @ P!T'T&i @ @ @ PT'T%U @ @ @ P!T'T&i @ @ @ PT'T%U @ @ @ P!T'T&i @ @ @ PT'T%U @ @ @ P!T'T&i @ @ @ PT'TUT/_fMqW1 @ @ @R O]n۶OdfM}C?Ț1mi9V3iզ>߿QǦgH @ @ @(onW}|3vK:aGp5&MY?/g93Wyuv6K @ @ @R(),RYzNr>`Gŗ&?Ny嘸. @ @ @Hbz%RݍWMzljhl=j6mSfό @ @ @ @T xC$ NnNΪys"32kl* 'IԳv>;Gk6_^~^UHqϽ5K @ @ @L@uB( ЪDfܻQ( -Y5jtx [rIM{ r0_o-{=R @ @ @DRXE_аEY"nGݸnm'cJCv?nИs]m @ @ @ * ,:+fN 4蘂??pfo_n|.=__:a\ @ @ @ @)PB-섔T'LxU+$v<창6 -<1?//j @ @ @ @T dj!V kpJ]vsG mM5<վ}£iaG @ @ @H@uB L섪kmӮ l2#7'gO?cT[N4 @ @ @ @@Il ՚X8NzB齃(EPETbWE &NB  ~ݕfwdϓ{fx3Et740Z9ٲO2&@@@@@@@@r;rEiBQA> ܴԋץξ 2M[5mӸ{}cUl yqǬ}6/V ɉ@@@@@@@0,@uak]:h8ܙxn-E=A7g0D}Iю߽]2"j{ WWv8W2*ct:v x'ޟxl        `)o[jF)SݽËM١ \p`.YuqӺAtMWWegwj3Q&       `0Z}{CRʞ%c]`}vvv*^~$       T'MWP2+l:899ɦ|5U6K[V!;1@@@@@@@0[*z YYxWW6}7S6K]]=Ck˫9dL       N;(QA (NʦC^u 1       :RV'1=T#jsR,-..*J=wF^Um        G36noՔ?gWe,I'nN솀$:l](˕Wn<jjiqH%f-Mb@@@@@@@,"PyEc2<<&["?3S6K N,1QyNN)ϐ:̩\ٻK6{?yO^rY˯y+$@@@@@@@@RT'XJ҄yB{ vAfAF]3ʼ[3dS jՊ7OyF(2qd[8&       :R&SNr/gG>8.nkv26O&ˠ;\ٻs''J~e[/TPnFM@@@@@@@,(hHjݤqٕ,ۡ;tl#(8#E).*==7E6y?-*75YO       '@uyn%NRcF7{p]t~㽱{v0M^ml#_yC&AFo=Kd@@@@@@@';XӜB mސrTJ̩3Պ\}]} ݿfNN7vts7Z?WH=- Уf ;,\;        :L( >-,pf;}=ռEyiψ 5cjUL:y|osijŲCnJRhRǟW @@@@@@@';X քi?;!rpmijԳ1+y6rNDYy9n˫E>42/#Cu&       :&϶Wj{Pp`n5UOO=wFW6zŅdi~sx:G@@@@@@@T'l߬v-?9fɇōZsqG}#z>eT'Y8>1.k|tˆ-.;\ݷk{o&       pLh@vbmw SdCm:3eK/Zs7eO]73e>A-qe:tjs-AVr        ` b6Ձdg1}fW&K~MW+8?ȼoC)Kd^- aiIȷ_4@@@@@@@ 4zԔ|.81 v=@9(cpz"Wβ B3v<gANy2O       @N(93n^~z'e\Z>`thqQI!gfd;v<Ȓzq       XPтs1V^ ҂c K^-..jwo/*ȗ&qiAb6'EQZg       -@ut,ϿwveobЪ .mݨ_{ ^QSrrwۙ$       f S34{ s#dlvNpQ1St-%_8/       XJ,%iNZ+GSР+G +᪲I       ENid_q Mȸ+2OO{93U^AnjER[4XHu-.!      )`o8C 75E ѿ-k` }H'+"INRfMk UI       E;"MRAF܅UVRp׬cΟU^o;91Ky\\W .7V'd%\1ЙK       '@uynN]JN+\-?5>')Qv;~,3%ÁsyMyb@@@@@@@#3gl~ffQAj۝E z4Aq;kw4jcoآB崪b%b@@@@@@@:l:3楥jGv:vڼ.S=ް+dM2A~Fi .V^u P6@@@@@@@ a4aWWU.=[M|FT5L^X%n7T'-AanOu҃@@@@@@@2T'XYy;dL       N St]ͮD|JcFƮTvkR ?OfN-Y ҂e^jWgа1#       `I-9+s rj/WMAanOޓkkJ6E]phlj}g|`5d@@@@@@@ P`ALjES:<8ovF lS99ʌ &ܟv4 @@@@@@@ 4vC ;\seΥ:'G(hۯle ԭѨ1)Z5o-񻶭}l "{NDthZB^!@@@@@@@@)L0E[&F'9ON lEkk'l(}ϙsJ2hW 0ߊ˗Wj|K[7_2Av?B$C       EN()yy1Rt 29NЪmi}6'_|\vȼtqKdSu4y       XLo[ҌBjwzƌspѼOO6ܹp7qULo̞t@@@@@@@@<T'Gc}4HWvt00]Fo=,* yk$3 g\        `YNv99WŞ͌lgoQVHun56r͎#}q[n>`xnDg@@@@@@@:L chO,8!S!       `';@@@@@@@0A       fP`C@@@@@@@@L+       !@uh A@@@@@@@N0        ` f1@@@@@@@L:,"       T'@@@@@@@0A       fP`C@@@@@@@@L+       !@uh A@@@@@@@N0        ` f1@@@@@@@L:,"       faHik֬-ۧwgNIz/D@@@@@@YvU:b(M8pŦ/^t-5"      T';XLݺu@@@@@@@N؛ٯ_?D       D`7sQQQjLzӧOkZMA<@@@@@@];VCmwj P`E(?j:^vMjU   y@IDAT    e>Aue(E! B@@@@@@@ V@eJ@@@@@@@PP D@@@@@@@+P`TD@@@@@@@ B@@@@@@@ V@eJ@@@@@@@PP D@@@@@@@+P`TD@@@@@@@ B@@@@@@@ V@eJ@@@@@@@PP D@@@@@@@+P`TD@@@@@@@ B@@@@@@@ V@eJ@@@(,,^/@@@@+V @@@Fb9oө#;HMLO)(  8aPhqrv2@@@@*YJ~J}NrGiʓ,*,3Us.TE@@I@lϊuιS+)!N۷Qwɯf_wxGG'mg2@jr„uT;6U^};Tw).S%Ϟ<TIM{G꾞޾PaNMZumթ?   JH5NSD秧;9{wYG;ZJ:y|IY:)^37F@@$pҹYo=qpv—3_Q{[kA~:=z@Q"~vڞz钢sresу;׈d͐z9d\B@@@@'`O,|GTS祝?#~N,~׌g8TǤfan @@nbX﬌S_Kg?{:.)ri/aC\|n쿫4Mwfδ~~)_G@@o\_g'D-MP-5l<}TCmoMIxVfzjR#i '//G|]'@l o[gCW!^Wuzz_2YXX|5/'/_P9+9Vy ׮ﵻ{?nʛZ#/dK" [VU1:nڕդ̕[O#gtj&/^d&O@@@jT'TCpyi-yRƥꄤGıu 2}>:qy@@nqx@fImC۵ K W'O^W/bϖcһ?o@HnC {H|[{_Uf̧De*yckŻ}dlW7G )-}M]F2[HKzf83#uʟE{Q8:jG''g(-+E}m;X7jӵ($f_={]5\މfN[5O2E/igN/j_7ھn.߰E&>eW >T-b⨎g9;D@@@yb׭7ol4Hp^~1l~ٔQPo]{N  O%ƥdl ;Ͽ3ҒU}T,,(XLW}D jwă|`xO .b}WX3U ;7.vPv/^)U^tx״ /DIyS~vЈ==裻(ܩgo OꮼjX]hy{^N9vY)2s{u9vyoݷ='>2S x\-PɕWn NoZ>C<{61xt.#  TA*M)Ͽwq' W@r1A̟Kg1  @u@틽xk[w꯽L~*cߗG>K;vxsVo.Ubsy1 ?#o4sr⥟i Ө!b~J&LElY1?4ha!hGu?խmA;Y1r pSf??Te";:V[ px*^   }4Zg9%6aŧ_sfwtN7lRj2'  ؖ_@ܰ?Vٮ1/eRinZ´INa]*ϹC|17~~F& c_{Gʵ+2 VS G]xn/mBͤ`9!~5k7lE$zm])iP ۴HVjCe`͕ru}T8ǸRM@@@ ]ھYU xծ#"Hp>n_~867߽Ro{͚nSޅ@@A4Rٿj}x墶I%_O?;fg}ʽ${FYsAAo>ddqs*R*/Dhd@|T<Żrsbc:O cj~S%6-.P^v_upp oo Z2   ժqC%<˻z;8f^zybt⨼*'/o&͛`qsnޏ߻}.չG_QI  H.F rҷ^(~D2(Av=ѬmϠzneƧvsuפ]=}Ξs|ϵ+=}⓯Tq慑;k]vvvuۨM ˱.;QTX%jш)cх›^^kgOgaSTݢ\;<ʛLKI[hҵHl^5Z}pV񪤪i)7D nrqEjz/^CpuuӠrP)Yu~5_@@@[MJxdz/ɻzש+Qo+?9sNN]҂]ww_d|YCisG@@Uற/kǷ1F_7o׳e~{U'@SW~߲C/ǏiΔ"eRbb!zvzPȦCՕMIIdQsM< 9pE ɦ D<гuvq|#Aftf1]7ubmƭJک#{6$%\ 6pGK6Dn$*6اf?֤*nxIQR    UP _Rnj|:AzKd7$'O*.V F-7-5j׿|ϼo<9Bٙ@@y&''^_ >׊Edg&{jY|y}gU "?^dyjFW,}cZ^5}iΌo-ؔ',=䒵]8sOԲ4A\aNժOe+3GY b7>])vhPGUҌfi: 9[õ856.3~ /V׷wX;T­@@@*+P*ěoa)Ee]X;irM}rwzvW mŹ'/pc@@@Տzj )>o>ӷ>=7Qo-e38=܇K":tCaQ\m3Pw8ާw+Q]|͋ņ ڼ /7Gz胪>`fPhG^:#J4)C۴C ʤF-;+3XMʌP*w w ]I@@@J: V]Z{{P\j?zBl_OC_>vuXCo"ùE@@ mg/>"o& rΤ9z;IE5|pmpϸ)dnN#;̈wo]:C{ۀڼtQݷg 叫 Ѻ'nlޮ(uo^:o m2ҹݪh97Im^[i72՘+RivpF宖#  TTngf^ g*Yw#aɧ˫;o ;cg]sģ4#@@@2_xq}?ذ,n6oe [pJ+IsD;2ykҺk@TcԼ]OU"; kh%ږlwO y Zvc`Hhfbs,e˱u)&śV-8888Q%ES0ykib8SYkeWDD B'   p PP@^Z]Ж&n [v uhV)_3 ]3/t%   F } Orb=qNY{ͫꄸ~ -ҡmAIMSqɿW g%i;,ySyc!.%_7:}{ T:貵j7"6E<z^hYz\|Zxe^OW_KYR   URꄊ~[\]U ҳgTIU;,q(eu޸_|n麘E@@E:dCD#sYzMLjUiPz_`ÓgPڱz;IhVŞOiM+^W.bmuB5jI55T(骀ǵ̇̕WbXBI2   PPπ Fܧ:AAl3ꄫn6?]}?;89ɫ   @9<}u"~#/0Tlq66Y~oguyciXU wROodW7LzV34jNeLfct3OjҕCֶ2Hnj̲+M]T/͓D@@NF&YWUpr/{`  &nW/U]}ⵯ=A۬R^v1vfe2>~"*BÛF γWSƯrQal[lBWܜLyG]JSe 얛cD9\N [!w=f kԬm[y@@@"NHЪĜ,-gJ=wF^mg@@(-muحqk "U_&bz 1GwNH}iZtR%=jby)+#Uƪ@ﴪ>l?sH5{t])NK'X_`hF]a {6]ٙM|ej3 x\M]RU`ky96I@@@!@uB%<)|1 qr@?EuB'(/8oO׷+c;De@@nV^ݮ&xTI t{{mۺRg檥_h&bqAs䵄8UF6o3,<9ʤ@Gl{8ĝ;aK^>NI/TAeWlTA }i-ܘWca}{Oz2C   :ART\ҭw5;jE[Zhe>vM_` ya:ӓ<   p :dK"ի[0k83kX]y^2߱]snYپPMX8Ka Z$TyUw5dhƞ>j\m޲ Y[?ow/gϟ>,*,PN"΄)̋z~2t.!o`]Nޮ&QK GE$(]24]}B&չ}dBSlbڢn;*)5C]lU{*9yhH8qgbco^P=E   RF C}k9wvm (8QkWN޾w)Q"3WyW!O-meRĢ^aӃ7Msvu` ~-I pz+P\\4'nkҺkFgO?o/afPh~w_+Ex_8ETx߿yO*T=C3Q0g(3"o>_Ls.ĉ ~4A1hjc#vsujUm7]S~SayL&'Wb*oUup 4*_اf4la    rgpޗ; T\Tz_:uk4J   `l{kԯI q!=Y{L P] .~{o?ժىωKBn'^EOv7U!bx'DgGذ⇂\'n.3'+]uU6W7xM8~@fJ9/F[u짜ӘJYQ)vvh{Lõ ")r:Ad,&{X߿~fc`>Su?QqR7UC|}C`%n3],pQ0xOTl4e>;ŁuyeΟX3#/}w_lӭEGf4Ml}!28sb5ܴ'_\c Dl2cU뷾nuȳ7A@@,-@uE3$t˜kY?`_~:nA] hV!F@@)PI۷XW/<76wm @ާ|􇓳W&o/U<Ͻj5xKqVEiW-wⴆ-::8׺V:(Mxբ ԁ@;ûm|iuwZXܭ}a7UW#oK]F?>{xVuV@@@X-zϐnF]1G>=٘A@@L۸͜{}ƶ6O#}B Q]|~߳b?GCW?^ ]\=>R&k}Fl`-tƜU⸁҆5dѡFAoܪovDỈ+i_:Kqeߝz߭nm:Z轻W7Kb7G3ӨG_gzX-   PYT'Tml#_yR 6zi3@@@3 O>|ݸA <ҧ.ne޴Eޟ/ߴ6b~;WGxd, ոU~^Kku7ßl1-5틵Ͽt~ϼVU Iwy{ކ֝ j7|qƯ}_M4)شJ bnL8AwG}:sD*=C&ndi}UQ mzg8mIUv, @@@ 9?VXO^zWH=- Уf ;,""",Y]M6O@@l] 7';Θ{NsŬ(b[~ wlҪ ٌ[PW>#Ng/N.hu[6]vHۉ޽sɉk7 8$@^-**w>uxx%劢Z6F-;gZ{tkW.&'P7PoAްU_TLnqd/Rr]ݜ] 4 0   yNضV烣FZCQ&M;wnO>矛? 47 ^Wû#ď   7A|q\X9::5oKX|~=Y|rN(hآ) ^H&2d?ҏ$e  @ @ @تc(v2jId'dr  @ @ @TVrN)e'd @ @ @T>Zj :-vJH>.;!Ő @ @ @ @R Pҷp2s] @ @ @*@Ϟ={Qq뮡?N16 @ @ @dvZG' %  @ @ @8k֬M:<5t*V**4 @ @ @d@V RZlY+#*2$ @ @ @TP* ʲRI @ @ @C 삐S%qXT`e k @ @ @BZj :X SzrUPh  @ @ @ @֯Qv @ @ @ @@z٣G 5C+Wj*6 @ @ @diRbXfɐ @ @@9W._oٶSf-Y"  @ @ ;N<7n,z:5k 5we'd"]F:4(mڰFZe՚v @(S>?UFFM7lܼyv]wC{PfO}o<g?AGK[\eK5cަ${-B }N(>~ZƁ$@ @R jjȐ!/RѳuB͢d] yySr,f6XFVV:ۻ_ǟc,z]hڋO/:ySNbڍ5ݮ[?; ܺ2y @ P56>PyIwk/<2<غǝuyC֨Q#v$P5>x%ԉM,'302$iw5V+iY[ @dP'Zc(JUn/}|a'}re^w[Iϟİ/Źw/_`+?^A6u  @XNS^v9߳s2v쮫Ϝ9mB\KnW<EܷA/xǝ"*u/'iYNP%@ @ =a_^v:l-N8e~ꉇZDe~y}{E)O=2ꦝNrn } @+0wk~=/i3wl/?ӱmܰ>QBN?D 2#;.Jeh @t ԪUO 4 u M48W915~vzQem/1=.]nZՓ,$5ZT-*lXbΝ=(@ @@ _:e5BLStw@O,XDS @ EP(섊\ 9ŌΧr'SNro~|~1]j5l g=e\%xj5j<_|󔉳]3]ya`~sNZ#J @d5+geH @-Z[|\"eeY)$@ zѣG9xVcRg2{FkrԨ[ոiN\w˗Ο5S'W!\^;.-|F<9voߪ6qpUϾ?xOW"2떟FC @@1 ^xaCUg0w i֍kVGR[-4衧{a SU~^TgnMM⡐SA<=6n(yjՒ2 @e.н-Z/κ_wy?z#?5 e[YiaS+P!ΝXDSneC @@q?aƍ֬Y3c#]P1n҉C?oVt8`Q# Y4i|lTX8#3svGG -wÉ~/_dwO)B @@ /G}K #&ēBFr8 b٢î u7l6|ի0I№.>OMjѺCԭW*+;Zeii\x%6iު}M*rb)bYLZdaZ~mq-la2aY!0Tٴiozcͪ4^~}_[tal<;wcW*rnC^+j6lҢr/n˙_O>ylA<O04jV:y}ItYP8`w/.8g}E\Zx=א^*NZ {QoW!~?w^}lgoOцkckԩ 4 >-C;Po__|Đ_{C~r)I/ Jyo-]4?fv+q9]v/W\Ϋ?__|>*կYN3\VVT(ͺGB.eh{/9F//Ħ'47rb+gN?-3g"FB @@V CԱaMe'T7Hjf@IDAT^:nԱEtF} bVΛiݏ kԾcź7;ڶF @ 6{xX6nX{w qi_|N~һ!8c=_t_ԭ_X͂x^^[/=SƼ׏bEdں.G}2'K31ꌋnNۉ RxSP8[BʓsW'Gث}CV]t\(r#7sJ];l7sza5bJEcg|VX x |y?">"_ȉcK%X<瞃j׭~,V\O4>}=n=f~]?%֯[ڳHM Y_OҡoHlb/=vca)cr컗λ~o<oD3~7K>p\ذ~]8[~[tjB>?ϴIUIZ.-o1nBbNg3">'(녇?tӯ&D Kr=vs.fNUt.e; +QjBmqZfE{ޙS3GX1'/c+ǖ; ]n ]&~ÂFyƛm5R @ @ C¹;8p$|\0N:S oRaTרHA$oƛx 7^z_N܃&*1Jd[υ6RYu}qx`_jٚU+R|LS+ZcQժh>ZfGR6_['6 `?;?̈́Fb+Il9H:2d~)pJ}"]3= @ @ NW^=zg(B3 tt{[Ѱ~Ŋ^!-vsߎb٢o鿷*?P6מ𡿍"N;uھ^Krϛ9GOpukn:u٥P&aDNi_|t([?Hxb#jժN]zzd?;=o^*x*<|~yiJN9PS ._4 c<ޠQӝw; |+ƵkO?`O̝quoӭgm5uΌ!'ZXOSí{$N# @,L ae'Tw^w&gsd;%lXOG/wwl\Vz ٸzU?8';fwouU[2mQ#c;Vf;jԡc\k.  @@';WX޼ ןZ݌ruFW^F‹\?sԭϙ>]B? _;7^wDB{CWA0dH$f'tu-Z{ /ðל6ǃw_sVbwU^=^/t:u\v{U _p->>l &DP OIߗL-?;.ϋ x~׾ U, r\S_~0Ĥf9m㿣䧉 >{{y[+kһ<3|;5iֲKBnP$w_{ J^FH #4lr*?-3sFE @@ :K. fL'/YeKCvB8cr'y}߹6E1on?ji횩KF=b;jԡaϽW @ MF{ˏSZ4}pMM> ZA!d z`` u羉r|ϖwp^λԄ#)]=öo,(;Ԅ?&V.lĚe/C!{ dTĥ&?nV[6zUJBҍŽu/#g1BNOϞF#?_^zn7l_MWQ/?_ Yʂ6jsw]/L㹯θ(oLӲ @RhժwLzVՒP˹n钨וsgyީѩߦ]ms;mKIwXZ ;rس#Z,\Evw`!w  @8Msiu͜1m|\poo \qg%ָވ &ks[l~mǟseW،aͪ_nؤn|fZ]:5Μ[)cc/ `DSM3\NS~sS7S>THXF#GM2Gñ˞(eQ^a2*dBt&%d貸/eÉ}bS)_?-?$= @ @ 83r*$eD"HdcfZ4.G7~ʹO_876nۺEBަMnzݲ pė=0't#@ @ fAGG!LAvx)/c|/ƼmV7k&B:qC o[CmB#:a6[?相!-]}l$|P>|FB9Roذ[' ?͋|Q^{/ oUS'}S~q#5{ {ž?i֍ NS ;bď}רIn 8/MLnN]vI_0rۺ2lH @z ^ Vmk㴃ZyV,MZ-_`uqo䄗1edZjBԊeVftlf4I{ Z.W'mؤEa|t¾ ;!GʗRa7iWWT [iYQ/ @ҽ6;hAg_0'g,*˜o_v9H\Qy*?g7_Yi$K @2D pոӢu( :)BFCl?/|/"cG~wH5sF2'p8;wԿMϘKKTf-ۥ/~ʅƓ7mO%ުS}ןg'\[0}| Ө,,s1N @d@j&80jը[/:U!ؼ[T٥V[U>Ҵ&waԆի~N{_:;~C!-rR=Q @ @ Bju?;WVf;hoj{Qp%W;^!??o;r#gP?[/=zvBwI)HFjj'i04G&};]/ޗ/"O[jԨY$c f%נqTX*?-+4  @Y' ;4Oz폿Rl fݺ ;t\9}\.q3͏RjկJm;NRqS @@|?#x&I/a3Эm5:uޝ|n[υ[E[P~"e\XjBܷ}ݾWםOz}:6H.vͪ$ފ$]EmS˪p e8pC\vBu ֭]ˊel,˪eHO2QS @ ʲZ`~=%D yyfL6sT^|YTz9-c/(7uj^* @ 9}Ɇk33c-Z,(OӲN/ G }'4eaNT>yLT/ƼNyfoT˘5 :*WH}g4|ŧEg'^Ym羉|kW(1|޸MtnzV"q+OߴqC/{9qT.RbZؚj @ P3զZ;j8O!sg_="&;~N( '²N=bQ&@ @ Cw^},q05j:`cp=u{l$ӸH.g}E8!6( ܵG:͚xÌ0wakPԄP3}v^z~qsa;`kݓU@c~2Ϋv!! A?m6iv¤>ScE+â˂BF~}uqՒ^VL:SiY=B @PJ<~V}}hv;-64k:2of_+E_Nm3g]c/  @p/^{#aq{Ě_{§B^yKn5i(?}qZ{]ϸ+ ZuE^ϝ'Wxp:ncatHbnwGbHu,X,V* @ @@N(5Ұ}N9ϯL}\z=heӺuרBmc9hÎZ^C^9q|А~aGtzͺmѨ @e%0eW\6Y_O|'z^Q1nM^S'mxOGc-/]Qv;լUgr }?{gvs@T-PV˂r}U+Ho!ɨx{Qz4?\8n$]v{z׾˗.`F>|?=T6mlj[b7jlsxTnǔ'۝}yڅ(j0ͅ㩣OSv[w\qj^ 6n;'-Nw\~~Wԋ{k׭^҇%~+~7#rln_ygo{ja {*L:(ަö?}EG\_pF _}_ri\:t9q.{v/eaq2i׾K @(oo[8y!>`T?{Sͺn@~^G\2mw-'?h>̴bwܵw`T۸G}QNf]Gt@ @@ 38wI{q o{=;J{|7kZa2xi=x'%f',.|?|6=еk7}3K﫝ьʻvHzvK}}821;!<{"Ǟ_y${`X~õW6yMkݳu)Y6RO˲Hk @ E [$* ժWxcOcݲ%NOvZ쓳[YąN UwqL wlnӧ_̝8{t9mtnMt۸fo.j{lf(s- Z( @ >W?h?yIW͜L,=.>g%..=-|%"s%#{*?m6?Nw+[je4֮YȧWⰪU_fUeT.?+–QwNMp}сYWГS3a[%r{gi#s+O=l^/"5a>?pUu֥L*SV-,C @TO:!а}CXqӨWO?=sYjV[}-{-v>H~ަI9'=7`:7ֽ?ߟi'2 @)>/5hؤ6isٝ VHMow7dB\p#-Z6BїtXg}M fr7<^nQ'EQ9߳îDºr JNԪ(,.L$^A^{/,8dwٝsEםnJ"Ǜ^^=_Y)(J?-KҴg @ @y\[rx;_53nᔊx4쇐t]#FI' s_x-Sn`ݳl) )M?-Kӗg  @ @X[JRw'j/7:&|[ _<曾\SqQ Cm֭լ[Д`!@ @ uUm/d~m6/װî{BxzOyPOw=oڢ\N]vi'ږm;`O^7c?BEQL+xة7=>f'X5̍}ֽvMصjc?ɨMszqZ{~ow`~7?1^؇ǟȻ%8! `8֡`%)̯'zRܤ5ht=ow3VeV.|Iq.Kٴq%,O˒) @(@>~y_b#fY߮]lՠu!\N.Y<㵗~=uie~ڬ;cSԭ߲mt79mKrySlܸaǎ~}ƴ˗ 6jӸiN8 {5(|orx+͗? qu!YNێGueT8U*[X@e @Vঋ$=g~lPkbxJLA @ @ @N@vB[J1>:_)fb @ @ @ @@f Nu1* @ @ @ =g-̈́ @ @ @d\"@ @ @ @# ;!{L @ @ @ @@f Nu1* @ @ @ =g-̈́ @ @ @d\"@ @ @ @# ;!{L @ @ @ @@f Nu1* @ @ @ =g-̈́ @ @ @d\"@ @ @ @# ;!{L @ @ @ @@f Nu1* @ @ @ =5g*=3f<3&LX~}E=ztL}%%H @ @ @@%+ ;d'<쳧~ʕ+˦Jʢs>|J2X$@ @ @ @ Paׄ*Pp @ @ @ @Z\t{gΜ9ڋ[C{nӦM:R˧~P& @ @ @ PfϞ]?C?rB׿U=e NZZ~~~\eqf̘.8ܡn @ @ @ P{}ݷt{gΜ9ׅ СCs=iӦq}N)>{KP(! @ @ @lrKf2Z@vB-OA駟8qˬLj?5kVBK޽3itB @ @ @@Y |s-h#|˲umU=Uo5Ν;,3;.o ! @ @ @ P.~Ⴆ۵kW.}h* TJ5W @ @ @ @d'T.  @ @ @ @@Pd  @ @ @ @@Nt] @ @ @ @*% ;J- @ @ @ @ P$@ @ @ @UJ@vBZn%@ @ @ @ ;uI @ @ @*&K @ @ @*@@vB @ @ @T) UjM @ @ @T @]6o<yf͢ @ @ @'N0]aԌ# ;!=˙gپ}06mڜtI0%s @ @ @ @N0 7[𮰐ZRj]իGݵkWy  @ @ @\ \paݽNd'9:٘͢  @ @ @E u=) 8!e*  @ @ @ @ N( @ @ @ @d'L" @ @ @ P" %b @ @ @ 섔T$@ @ @ @J$ ;Dl"@ @ @ @R2 @ @ @ @@d'C @ @ @ @@RR @ @ @(y @ @ @HY@vBT*nիǏA @ @ @@ 7Y陠8gC/3g֭ۀ;{l9 @ @ @ P@x' '% %L U J̝;78̟?@ @ @ @bN0  o û,G@vBzŋGXdITV @ @ @ @ b ƾ+̾Qzd'Y/ @ @ @ @ Nko @ @ @ @ = @ @ @ Pud'Tݵ7s @ @ @  q  @ @ @ڛ9 @ @ @YLsҝ Y @ @ @ @,X`~g3d'$S#@ @ @ @e-㏯Y&Y Wd'TE2D @ @ @aÆY)d'Ke @ @ @ PcN0!< 4QPW  @ @ @ @d4P*d'TU6G @ @ @H_~yѢEB9D˪PPV  @ @ @ @" }b$B]NȲ5 @ @ @, kqc  f,^2Z:ucQP @ @ @}'[Κ s"=ƍz  f,^2!ؿ@ @ @ @@ ľ}W}3MÌ ;ġx.秿W=VR#G;*  @ @ @Fg4jy>} nv7i51tt @ @ @2@ '''FQ_;,lwQlNȦL\d'CY @ @ @2C@vB)aڵ[hQahb޼yk.BīgLL @ @ @d/\DjBjdԘi0 V @ @ @ P EGydu`:';[g @ @ @*T_`A7nXt#5k֜;wnVV; @ @ @ @@& >| aܡN(1N(SN @ @ @ @ rCU5+/ʻvFN @ @ @*0f̘'8P3Or%&;.a @ @ @ @@ w;ܙ2j&D 777IT @ @ @li֯_߮]ES-͛Wv\5Ph  @ @ @ @ ^yb&LX)';x%@ @ @ @ %;dO%t 08gݧO /03pD @ @ @@Y wvmz?X, 1XTOgK`xDvBXo̙A @ @ @ P>O^|:Vq-<- b2b_}U4SFe @ @ @O `iG)qyĝA qΆ^iĖ @ @ @Y#N05,3f„ %n<<Z(L^c#@ @ @ @$0lذR-rr, @ @ @T- 6<䓥sh!SF2q (D @ @ @O_-C R6NE1$ @ @ @|eu(#fh̛e'T~  @ @ @ @ k95ߥ  @ @ @ @@vi't:3߿xWXH-a NHUJڵkw}( @l!@IDAT @ @z~[n`zg @ @ @ @+ ;ꮽ @ @ @ @NH^ @ @ @ @@Pu  @ @ @ @@zd'Y/ @ @ @ @ Nko @ @ @ @ = @ @ @ Pud'Tݵ7s @ @ @  q  @ @ @ڛ9 @ @ @H8 @ @ @T] UwK0#G^uUF*!@ @ @ @r 7_|qxKXm) ;!3%G~tAwqDZ+A!WȘ @ @ @@x' ^-s-Nk_ܙ1"z䭷ފ  @ @ @d@;w7S3J8gC/֭[  @ @ @d@;rLD, ;!#@ @ @ @UN@vB[r&@ @ @ @ifp @ @ @ @*' ;-  @ @ @ @4 NH3 @ @ @ @@P܄  @ @ @ @@d'\w @ @ @ @ NrKn @ @ @ @  ; @ @ @ Pd'T%7a @ @ @ f i @ @ @r5܌M @ @ @]n3C{'dJ @ @ @V ٺE @ @ @2E@vBq @ @ @ @l+[j޼yhf͢ @ @ @'N0]aԌ# ;!=˙gپ}06mڜtI0%s @ @ @ @N0 7[𮰐ZRj]իGݵkWy  @ @ @\ \paݽNd'9:٘͢  @ @ @E u=) 8!e*  @ @ @ @ N( @ @ @ @d'L" @ @ @ P" %b @ @ @ 섔T$@ @ @ @J$ ;Dl"@ @ @ @R2 @ @ @ @@d'C @ @ @ @@RR @ @ @(y @ @ @HY@vBT*nիǏA @ @ @@ 7Y陠8gC/3g֭ۀ;{l9 @ @ @ P@x' '% %L U J̝;78̟?@ @ @ @bN0  o û,G@vBzŋGXdITV @ @ @ @ b ƾ+̾Qzd'Y/ @ @ @ @ Nko @ @ @ @ = @ @ @ Pud'Tݵ7s @ @ @ F/ @ @ @ @ CƎ;a„ٳgZj=<#2d`ƕW^aÆf͚m6O֭Kf ;L5B @ @ @.f͚n y X/¤ zj[,T^cǎ]vҥKgϞO7O>uy晣:*1JaH!K.{pE\0m5֓ @ @ @ @@˸N۵k~S o=ظ6lpìY\x㍃ Jz77w8 y<^{ ᄍYV[ %Kz&*ܹsn|AnaaJD'Y/ @ @ @ P,-Zhҡ|;ߩPcF6o^\5F⺽IڴiN' @ @ @@zM0. 6DzUcsέ E'TSgZQIH @ @ @ P5ZaΨ#ԩS۶ms{裏r +e4/{=zԨQ2dH @ @ @E+k#G7n\)Zaю86{Emu- 3ӯ_ @ @ @[ 9c_qd:t P O  @ @ @ Pqf5Әe]Vݺu) c-Zȴ\:MD%@ @ @ @/;,X 3N:eJ]lY&5*ar˛$[o2O2%SR F# @ @ @(ĉs` r X2gΜI&e*/]tԩ׵^/gVgkx c3g7BE'R[_ @ @ @ PP{,Cֱ:VNW;S/?"nLpFzP/.  @ @ @ @dOӟ43ܭz¦n{lSiĈ͚5Kw%KN( @ @ @ @p~'8t۷2k M򗿴jժ)6,2n;#SX  @ @ @ 'hѢowcƌzUW &0ᄒ}6i/+k<.[C=#ytySE'4  @ @ @ @ݻw?N56x;ta# bȑ/N;Ԥx˖-c {n$bv3L6ioҞ4N @ @ @ 0wL/7.vem޼ynz߫x`汋5նmۘ1sGF̙6iZtBj @ @ @V@ЫWO>u֍E]tg6Ҿ}VZC_kq0?Lc5N^ @ @ @ P~ ׬Y"`8qb؊`^Ep-l_~78co%%M%KN9唁uY.  @ @ @9&+={U’[1bO]ޤi M[VGxQNzWYd @ @ @oe7xz/FYd:so~rƎsx=z P2"}Ʉ dVA @ @ @@M5ZaMul}2?1eʔLaYf/ŋgvM7dE'LHԤe2= @ @ @ @ %^LSUJ#yaelٲѣGg 2ceG]뮙d[ @ @RXti>͛w _¦nfm Tۋg?13«:6}~.y}n @(u:w ӦM-,'Nxb;ʝnPȴBj @JC >BQF+^?p];ӏ>}ԽSWfl%q\?Lܽ13d  @ @_^?L&w>}u?5` qtt§~:k֬L;zʔ,dQ @*E'}O=ܷ*<  @ @@1 n:3 dJ/hѢP+"S鲢V @ Pwya͛W &O @X! : @h*ɓ'tIMպv  @ @# :t @ @@ <=P ܐ  @ @hƴE @Wc=蠃2[t3z;#+_r @ @*D@tBǏ}ej ƍe]2'|{ソkoLƌ^{+^-ս{-آs;ײe̙;ĻBݺu6rn'@ @byxy[UvՈ|Ij @Tq 2}L:o'{ŋo>bvuC=tKI駟dqׯ_$5jԃ>)ڵwLa 70f̘>Vs[Xw}?|w̽ZKI#jl_cI[#8"R!) @ @رc?iҤt,s)Pg @ @@Elf5γ+̛7/ӟx… 'xѣG|_oѢEo|-n٦Mڣ~=S"})dJꛍ\wu?>Z5kW1Z*W_ Wx+s;vl<W\q_~Æ ˭ @JH F0aBzoxş2K?裹3y,iǶ4E @*\ >a?ae SLя~|KN;.N=:0)裏y$$>$݀D!jMH|=& B07/t>lt]chBR-'|M7%% @ P ;;3唍("NNh"X @ @@% .Zk4GD$D@C +Kǂկ~YZnyu?駟fn& =dɒc9[P¸qj套^:G9(?_xZ*D @E.0tͳ1[E>/B[ 2ffm6hLaPuD @O`ĉ5NjuMi+VczԨQPUVk xs7r@?l]Jb#F0Q}o~ی V].]:~r% @ P*ӟ4w㤃ح0RlGy32SNqBf[3}@f͒I @\y5" IE.$$O3ju'/L6{m Ik}IĘ1cof 54&:!ﯸZc5zݧOuY_W|$e̙5M/2O>dt6׼yj#]M @-^LKt{nǦϜ[J]7xc^r/DtBK-2[l% @ @ ʫ ;dڷo'|rl.+)r{Cʓ&MЇLa/~1SX^{TDܾ;_;vL71?/_.7|imfK]$鈢8au)/Ǽ}Ѥ @*J &^+,]؜o?k0@k#c=ɁUl w-xmqhYd @ Ps|IGM7gVgcC;1kI:I|+_Ʉ&ĥ-Zy晹 nrcub- ,X.8CIFc"!S٘xKz~-o>qsk2K+xgr[ne׮MxyYgEDn}% @({XcƎ}VXwqGqD"şjlWS˝B.]fxSb /ɾAPTZn}Ι3Tl @ȯ@,ǫmtt:}FIϟ??Sخ]}wȑ1ύNX[lm۶c;sCs+w@⢋.jӦM{޹~''p"I.6=PiI  @@|;w. __[yEdGz91B.666 !@ @$~]~Aտt%K~_XR;'BS/H80ƙ){ϭ|QGŧ4r˓o~I:I,\K;WK<CҚkcHI @F vSp!1뮻nq y%@ @ v٪Utf͚t,Q&Mz饗ɓ'g*,뮻v)HWv))|ꩧr1!{k։cr %oFmMF:Fp޹r{Ncc0vۭC1t4 @ P/ R @U`|o5kVuqA,Ϟ=+g(tA cc"xʚ]e'w{kNȌZnl$WlYg-2SsܸqBY @ @n& @@^=8?˜1c:JB ?[|$]e]v){v޼yc[/+P]m~K_:ꨣN=k&W# +_ʯ~:3|ɑ~衇2Zn~e mӦMn>(0jm۶M/WnCxt53B @ @ D @>^|CSW]uBbˁwܱC~ڷo?wz!F'=ze {#'ձcƆ ,Xc5r/Kb/t:ݡCta~bst3gfJO)%@ @% :^\* @ @F ,[ꫯm"V/]v%s §~[_믿OΟ??xȍ85ڵkwŒo^㥤.]$ճgϤ$1{O>e$6mZR_ @h@m`69 @ @D;3йskЄof*2'd,Y7n\$`=To6B\sܻ^xtI 7HT kM6iѢE~u"b Ə)Lg#v  @ @@jdQH @D`ĉnݻw-W_}Z k!wx衇2wᄆB͛iwʼn na…0\AB=_s;o+!@ @. :Vj @ @ ̚5+^zV<3+8$b\}|Laq :u>^y1cW,^kɽ[IySpxDW$6N+!I @ @ Hņ2F{2ij @h:Z+z+0J;#s %qó>.$2'Jt1_r!^x￟1ҧvu]뮻fΝ{ '~k_K6שz{t~qA~؈(?I'/g @ @By8(pС{GqN9V0-6tһwsY{kjK@tB*rî>׿ȑ#VE< @'{N/7 pg$%D|?Mx?駟^JJNsdh߾#~ex;, }7⤆^x.6mZrd[oH7נA8"Qx/&LEo??^Ԕ%@ @@Dh¡KϨ PX`AA׀'_v߀R_ Q^/Ex_,vl*:!ѐ @ @@jئ.-ZL4Dx衇rJJuCu-F_Xl+^mӦM萩h۶m~O~  @ P#c8LÆ Zjr^T8p`!PʣxE-t} @"_L(>ʔG6vpj؄ 7pwҘlD7.]vj[裏ޱ/}{qms̍7ޘ[o+^U @@țӉLJ~뭷6o޼gh̙սs9MO @JK෿mP1 ;쐩 KIv}C\Wٿn)6HHwTt'fZc&~vcnaDr{J @ @:8RO?S \pN;ym2_O @ @UK.Yep@׮]ݖ?0<)Ys5k$IXwn[U&S)rJ D(F+|]|BO>]wʆW @ @֭[YXk) /pر7pC֭袋2J7^@tB @ @'pGƱ ԨnEp}Μ9뮻nGGwtܹz<{g*jB @h"w9>c%Kȯzj @C`ȊW=nOؠW^>l2S}ƛ+^P5E @%!@I D):Da @ @Ư7^T$bL, @LnebjةS$[K"sclٲdCO>$7j&۷֭[rK/tO:u֬Yo&^[ouk) GO4)!b}F`l7X $:an"@ @.pצG]6> @ P(XOw/~1Ɏ?>%L=ܓdkIz꩷~{R!B |oII~ū:1y\J'"nxtyu:NW0`׾N:y2%˗/[N2%s);w~ VhLɪטK @^ >{q5t83 @ @b| qFm\3f|dW'W&$&Oۏ1Є{SN9e]vykߎ֎:C{_y}OP 7 @( DH6lV\p~۴i)%@ @)?x2=z&I6!U$dɒ;ɮ,q}-X z1$$^~w9roDZ?o1(8#Ǎ.t۶mkt᪫:묳2uCcK @H`ܹ|!b" @ @'0k֬=wM<Q^ziR;Xeȑ#u]/~au:NH8dM3f2dHw㎋}Λ7+^`1gΜ:sC48v^z%w%}{>hoES:u؋xK!ix-$uc=_~IIc^ @ P2zW25P @ 4?jԨ.(}VB,|P8a?>裵Z+S-.Z{I_7p~e% gIt"TthBD*tM&쉸wމ^}㖓N:'H(K.I cSH[b+t7bӈcwcCfc^ @ Pn_c5J @ P믿KƊ{&L>=s5xGD',^8=dnU'qoo"3؃!v5(#< q Du/wBR^N5.iժUgӱą^xiUFS%Cvu07w @ @8ÿَ @ @Zb dZ+bz뭹&$FXy睷lٲ8ܡ脸4T1a :w_Єۻt#6o.3 =\lP{A`o|:#3q޽{'78!:tn$@ @%пF٬Y_WwkFC @!*9ƍ" nݺn>`kFn͈ : ^8 SNIDp衇|W~O>e&O[oM6-}HDr:kvm>=sʲfe5 @ @%!pWI  @ @@?OoX:thD';jRG%qWo{MnO q:1N(>ig^{m=#uY')$կfJxJicǎT;t萤% @ @ @(?`zgĺFx{oܹ/B$5~=iDӟ~P9rd Q0dVH.%Hmfkv%:q„ !C}'c 8C)~ҵ 1n1cFzGV5 @ @ @J\ oYfVXѣGnxF ַ^y ˖-iFB6mҷDppWƖ .l߾}N=uVZ+=MKIkdkOĨbluL,҃|7vi;C.  !i*|G.czM6YYΝ;v?#<2iҤ'Nok{%+> @ @ @@& 7̍NȆYzqC>ab-Cӱcڵ;C%yLwhsڴi?"{㏓^ƍw\~II+ݨ- @ @ @@#]қ"5ԩS$'6rHMhFQ3f8묳}=lӢLF @ @ @(m˗?>C{dӉtt‡~:xֲ߯e#8"}K0`ƺG',]49H^qDܹs_~9)1ѡC秜rJr_Wa$'D'4΍ @ @ @ Pwygr^C$oh۶mS#Rl3O׮] N.ɽ|AdkI\uU+ZXlYRW^+KILKJ"4᭷J NNh0  @ @ @ @b#|; ~l&}G'%w} 뮤KҍIr!򓟤5c/.(tI'Duv…jrief ۷tMWVn& @ @ @M7 L2%I67q q{Ug;vޒ)i֬YRH #;4 <8)y'OHJr_|9s:*IGb5\yIzeG}4Էo-Z$'H @ @ @A`&Le$ovs[&O=T楗^ںuLa:7{ouo~j.i&ɮ,-̘1?8d! }áC._pذa^{mz熤rpgMJvu;!V'{d˄[ngH׏ ^qIN;픤ḩ1r7@IDAT3k3%@ @ @ P;w.oW^r%w*ٙgyf[g> bvm6`ZL{^hyĈ=Cd&,^8 "_.]DnT'臈H9sfR{ęQ;+$׿" "^ɾo]wݤNLW7FMmqH%ߜ  @ @ @T@n]yNh۶m{ نz7t޽{~de#k?}ק~zG92]X^gu,X'd.6 A4)y睇rHnݺmf}[oz4Ƚ%^U :u[l+ӦMp '@ @ @ P&+UX+,GqD=PЄ@@&QxI'㎋TnѢmv9VrCbx`e W'MO}~lwkРA1aÇ{{hsM +^~W6Nh0  @ @ @ @" р 7o1 ]lfW^e˖ګNA @ @ @([kfٲeݻ.RSD'Sc @ @ @ P/~IZv J @ @ @#pm͞=:ӱcÇ:BF @ @ @-?M85X#J.вˮ @ @ @ @7oW_;:?^WSoFe4l֢. @ @ @(s_p5Nsܹs(dY @ @ @ @y|MJD'F1 @ @ @8ǎ';\QPjq @ @ @*VSN/ZgϞlM޽X 蹗 @ @ @V`5\+ĜPXo @ @ @ @Py܌  @ @ @ @@aD'[o @ @ @ @D'T37c @ @ @ PX .ڴi ?N % @ @ @(`:]64 N(0x w>$:th @ @ @ @kF ӓ^@`̘1Fw&@ @ @ @P8k= @ @ @ @Pݬ  @ @ @ @@D'ZO @ @ @ @2D'Ts7k @ @ @(駟^.hEЙ"x@ @ @ @Z@tBY?޼Nnɒ%r:Hm @ @ @ P\&+={UBlJs4-KsF~|[oI'K @ @ @ "˂x>}TIaNPAS}ג&L% @ @ @(?`zfjFPre4P @ @ @H e3A) @ @ @T脊{&L @ @ @ , :#@ @ @ @' :  @ @ @ @ N(0 @ @ @ @@ NGn @ @ @ @ ; @ @ @ Pq*0 @ @ @( @ @ @T脊{&L @ @ @ , :#@ @ @ @' :  @ @ @ @ N(0 @ @ @ @@ NGn @ @ @ @ ^5k,}:J @ @ @ P65tl&h"P`n-LF[$i  @ @ @O &^+,QaZ'<~ѣG{3'@ @ @ @Pg @ @ @ @hYS7s @ @ @ hoK.]e3&MJDzȑIveVZ 6leWKKkFz̙zw @ @ @ &йsUtAw}wS뮻·d› @ @ @Go4]M4ZwB-8. `P @ @ @(S{'Ʊݺu={v]*׽N.]f̘;bib~:E71c?~GndD @ @ @@beϏU|7\nE>hlB y )Ξ{Y=#G2ljb @ @ @*^ B=jѣGOR/د_j /зoWw;HLKF&i  @ @ @O &^+,eFFH7i6 ѫ{/^L8N % @ @ @(`:]6D?<87%:tn$@ @ @ @8ꨣZjh'ZKSӈyFB @ @ @*ХK//v4U|x#-D;loPŐ @ @ @ @$(C[(N8 \ @ @ @JOo߾{n-4bQtB1?c#@ @ @ @8|x&zRZE'2Z @ @ @(P%@Cr @ @ @ @}ݻwQK}pa;vLzСC @ @ @ @kiNcuYZ˗ N:hР3f{FmT4$ @ @ @"0mڴ}w֬Yݺu;v&lf+w}7>gݲeXڵkJR… z7߼}Xg @ @ @\ gϞ[Zlao?蠃^ :١ bt[OD @ @ @` 6 񫼽.uVHWwB?9sk@FC @ @ @@ tܹڮ.]ֲ3glժUs;  @ @ @ @:j%&Z \"@ @ @ @گ6"YtB=!@ @ @ @2ׯ_޽kP/_{fD @ @ @E$ VV^DCP-_<i̙S4C @ @ @VtܙD}nݺ}'Zl9cƌ] 8m2~F @ @ @_ Bw8rBb2_ @ @ @ @ 8"kE@~8Nv(Gd @ @ @&d|Q.]t 7L[v̙ZWߎ! @ @ @@"uQ"]Q 1q ӗX… Ǐ_uU5 @ @ @(qX|1rH~#:P oԩ[l;L6Ff( @ @ @[ cepJknׯ_޽cHWJ{ u]7cƌ֬Yސ;  @ @ @(zXfZaя4XeBnGtBi|(͛ K @ @ @@zM0VX~3-䌆ޮ]!;-D'Ƀ0  @ @ @(s]׿% @ @ @(?`zfjFh|23f̨Qw&@ @ @ @P8k= @ @ @ @Pݬ  @ @ @ @@D'ZO @ @ @ @2D'Ts7k @ @ @ P8  @ @ @L ͚ @ @ @N@tBD @ @ @*S@tBe>zɒ%r:H7  @ @ @ P"&+={UB%Њz-ztWL[|[oI'TL3 @ @ @)˂x>}~l]['`{ k:a„$-A @ @ @@ k7S3*8C/˗/ON' @ @ @@zM0. HD'\w @ @ @ @D'T#7a @ @ @ P`2eK/-Y,O'=zܹs({ Θ1ckfnڷo_S6A 9PH @@ 9Xݔ  @ x̙3 4s@H2w9OL, @ @ @@/~2). y]v[ y @ @ @*M7ꫯ>}zut_뮛+Nj%\e'@ @ @ @@y ލ\ZAX&en^ ט @ @ @ PM0hѢc㴍(fiHv-hm!@ @ @ @@M7ضmNM׾ ){',SW`ʔ)n{ @ @ @(}{Ӎ߿ꫧOt]hݻw׿fi`vȑ'x @ @ @8Co@"W +nvvۿ%KW1ާzyҗK??yٳ3:Tĕ<"~8u'X'`Q>zʿz `=z7Y` @ @ @ BU @ @ @ @>"@ @ @ @B@tBSj @ @ @\@tR @ @ @ @@SNh Um @ @ @ @ NB @ @ @h  MM @ @ @ @s [H @ @ @ @M! :)TI @ @ @|. :s ) @ @ @ @)Z6E:k6U׭ܡjͫީjU͚ϫz}.(6T}j5V^l#7\W}gk5s+)RyTi]F"a.E[ev#W y9g~ɏc[;O١y򩹪g KEVTEM=LSOO 47&`cwSL0,wob>wÿ,zsFCn˃U?m&T]ͪ^[ 3YskYN^w1UUMzj;U֩^U ZחZ(V-_^iUslRT]~NnOU>_ޞSX+ZY5d`Tb O3nW>]O0-oaզVVuUݺjkoVpg&կj[^yWǷzU_޾ՋeU]t⴪|6zUcǪCvjY ?GJ&&~"ķOԪ S>9^[l\Uo\ϠΏj%X՘VM}j{US#mAզ+ʿ|.y5|/ڼ wLpe_Q;Oc&X4fWw%;O}'~jIw&U<4/H"`M1h^JWno2M14`:Z~7xSRu% _/р/ak|࿦އE*~=>M(ŹΪQsE'g _lMGD]w=U?gP1"xtyyԧIwL<{uU_uU7fUgU_4ߪ٬c/S貍]4~O._C*y{gB%IdߗEʚ%B"]YleWɚB$oHYZP/g̝;w93Ϲ?9sf},f9'@'cII# ϓF}=O< t{yR yLܳD9-/<*JwĄ@(PS{c9\^^nq2 w2VHs2r2.r!st2A 0EA!_lD!LE9|1naЄ@|Ex -W8\tӨ5! H;G<7E6&$_ ]Z&z{Uݘ>z78rVHhB@ >L@1$Ҷu,Pڦ{&ڕ^JP.3:1ݒS۷-'LuaL&Yy}ڙ!LjBq#/SFn/XrēӚ++򫖼ԏ:ܑN;Z6-3ϽF_=XοF^۪&kH+,'Z88iOW(_[ 8/M߂)_z]'ṨZVs.,ާ|<SCR޾m<)ek?gR6II# ϓF`#(ȝ(}F((gr2&bi,4!>c)1Ҝv Ւ음 er!aYm^1!P.P1tId =r2A!.s~ZWw/ཏ/&wjlê+Kjro8(ߖ5\Xa~wԾ}}|3T֥ҿ_p>F/L"n] w;E=錣|>yσ (M#5}&B͛xM^ >;Ҥt@/*t'^u9v t8tfܭ `Izp[d8tЙ4G;1C;l)gaKI;-N']0^O&#rGRtع4/WCWfyG]J8ҋ׹#MT\uɭt^/-oGLB]ԹMy y 8$x-%{-%{4'@Q=K1$0pHTvф@(PDcD9 음!r!r^^M1!P1tId To ZE(%R&Y1~[oqVitvsϡy<:WxhWSomGt@Yh\za/hi澧,W,{Aݏ=_LZ8Yi||94mJ}'ul@ṯ ;cnP Ձo& v}2Cn.ߟ;-pN2KyMsT{ޗv*TA&t=JXo;ۖnoL;kw#X4 C-0PкYj}-7v"*ǡ3<BЄB%(Op] O}ƑˇMQ󽖻3xE ͣ< <nП6%IU>(#|ɽr;yf&"mފCSH?4b*s-Py%7.ge =h}Q|8c3:sË6Oކ^lmʜK|w^1u=x(7 6fƼHW /6|%+iuEG]sSUlLFUbg)r"3N ۉ9x{rx)e{ kj:?U.( MWՄ3}m[bgZ7n{ ]ߍNX;q _v%'~~6uE,NP^++$oOv.66'\婞8x|Eܧw_N,e`ky쵹u|EfښhėA7uֻ7_U7[N?|qx;uCȼ3*x'xkxn!8j-E'f{ <P^azob=.ߩsz~ (Xz@y y y ,=D˕dy y4 yLܳD9 gƣ)܄@%ƈr2&(ɘ(ɘXz+ɘ(h(ɘr2&8!NrP :AQ_?k 7~W,V6o]ޤră/`^Wfn2n{~脸,}k⣷6[Iz}uIVk{mIu?c6SOۍ؏ecMpgqgH_w✾iF:6>K)oye/.p/ߐ6\ƍMJw<Y]2OF',Nl;Avٗk-J-)&f[_E>Omףv. 'D"<<0

[pKz{)`V20WxrmQ9+ )W!McxzS@LL>#7q;rN&@KhI|I$hȀE[g<.)Q*?ϭ&}{oo1bae}+ƷxBS;Nt~Wo܊<~6Zre igEEGj;F߻JoFHMVK9_!6nSi-2B: z7&1! nM<Ƞ|Xpŝ$ASSPl&-h̍ϩ4.8v۪r5 5~ %挨vqe+R7Dp=ʭ籧뒴' pS<:iؗ'=^'S#"]hbqhi7 dhӛ EOo xt2 &@[LKz*L2O@TgۯcR/@R ?:A > ˖Uj8:OSl Mllc(~yv4;f+]qygܚv/LCyRЌG7ԡx7uޓ /9H$i?Kw'Dؘ/1h's{Qs3t;nyțzQN\&#ؾ!sft Vx!<e:zzS@۟D_-u2i-P<B`Q[*=*7VzjB:cp*Ͽ{+o˗OM/.Eom X&M=ux";+éU3}O>%ԼۼHx %ԏξ!p;nIߡ펡TO||p}5p{Ձ SKREy-;I6Gۆ~%d 5A@D'h닦r>J~Q;6lsok"` G`q6;FaҝJMa~Ox-_Iac5X M-(/y`Jϓ 5H|q5$/c'sm³I'}jhK̴@H:`hσܭB2Phf|}Z7_'B!w?EъMWט4 \v`:E<=Gt? Ũa FWG-qlNX(xR{CȘA>VyԜǯGg=-U[q9b+6)Kϓj!cK&<"0)f$kUVYzi=%03ϓ¡+gS{|'Rt>!jB}2=92m)iw2)]rw2zP>*ʭM/PI/.',׳tN&ͱd y&-hMi6|3ÒK٤,; |kO*};B"c_vsp'>cZ&M#E`R5t\zn,B@F5,}o|r8L Xע yf-}+ηh]f4᏷B7ׅ&rU*9f?bM>x6a5ّI7iME iՈgs8 .f+\n<^J{gxϓ(Md LL4jLfN&@Oo L|dd &d &@&..F  r { ~! $]uE'4RiO^S~nkYz)7m>1Nbz;XM>'%;szc#YM%0!dh(F%P]KƧ7tN|DI @tB]x?S[_$^t¤mvΆM<}f2ue!n8m[[3z^wԙ|ĂB`1G5U ˮߌԡ8+fZFy nzM_ɗ ު7Us_{X>y#~lY(a< -O8.{lk ȞOot LL 4d4 FЃ-w'Kا7v[Ct9NƐ@[ :!R_sS99FY_Xgʿ^v[( Kg} 9Oo ]8CKApNȳO}5qrU{g oιޛ[0 M`-hoōNxK l!~ ժ8Q_tB.a{VOģ}OŊN+=c<%-F-JqdǺ+q˾:!s}-phMfˬjoE;^dOM$> ɪuV+P+iOo ,F@NF@>9Oo ]8CKAp7ǯν'{gb}X; } <_sWf>TYȒx->'d_H݊/=Xr TY[f)jCON_~yԱ%y|~ݫ}`,N9eü:|nkh]n[Zذ9ƀ5'=>gfޢ:'_GG;/-V)uN!k~}5b5?>vKg%~5-=mk43>LH/gC<>C7=Xw\H_U;-[D.ck+ᷧx6W-j:c t24Mpژݶ;횖k?9ﷳchƿm./j\.7w]8nChռX݉< } yJU ogq2)EM31"퍑FĨ mhB('cB 7[Oo d 侓%]1'P=?ϖB~9kȿ~HoϤIFr7Aw3R!<&VŜlڹY:_JK_˶>*bK@$0Yom~vM+,G+PFp:=*B:s ~M‹ozmKN˞W88d4r4a2~/#im/G[ЋSx$u:AI+p{D̠Z^s/m*DG邛U "qC&a{=\&q]u fu<ϣvU헿=d*gSgx͞G/O{ ~ϧ6#->t%^=Bv-675{sh,gBzpՕc 8"˨akgG9CFZm%H|x?dO_H?njQÛ|vo-vGӉvieSa?f}D7xsQK h4<'u}iǢÏEqŷx`\ߩ<} #~peyݳ8sG&gb\&# iЄ@QNƄ@9Oo T|ޘ(ɘ(鍹K'cNz" :!9Kތ'^67OO{lkMt}ԣ/UbilL'_Z%oa5'.:9J5s*茣*B@38#(i\2jtt-)ky%.#*4>m>ЯYf\[vsPt~UD=-uܝF?WlE7;F-|*]xB*k$BvF#'ydjxrd2.Qg,7y޳$83>)B΄@ m|BsƜ8x3cN'cN 7FG`Oo d %])& 2 UsYe ;I>;[C莋bmb4r'7j_/kUMsUA,N?xi-SETۅ'ww9zw#븉Cjdq\Qݜu5yw s1'P1'NsܝL1'@tBv}6[( >}֙iTzy8mqӄ;+m+a7 p|`y=_/զ=DT<~Wf z}}Gs;}Dͥ'4m6}}sה[7UW2=z|ͅr)C 1K5߹ hdspcx+.O?(?ĂXN?Bc_'_"״"G5v"1=_Q%}hK4{͞R5VPۭs<>f*,c'dv8g}KXUTKZexj{D}NNDu2b4:\GdPrHɸ]c:V1'P&`zضoHmryEpwN[ҵ!F@?)^|NiF+s6j∮UqIt$m2!ϓ f?c/@ )Ʀb8z^N&n7wId ̬C %ЊM@@@@@@@@@@@@@@@ <7A@@@@@@@@@@@@@@>@tB}mh< :!MOPzZA@@@@@@@@@@@@@@ Nȃ:~@@@@@@@@@@@@@@D'ԧކVȃD @@@@@@@@@@@@@@ <7A@@@@@@@@@@@@@@>@tB}mh< :!MOPzZA@@@@@@@@@@@@@@ Nȃ:~@@@@@@@@@@@@@@D'ԧކVȃD @@@@@@@@@@@@@@ <7A@@@@@@@@@@@@@@>@tB}ZXbM˕VF!@JK.5" `@]rCnAP}jc|Ȁ@] zH@zA cw3n~ ާ| ߕ+ϱi :ʭlIoo馡(0A}nռ[ !݂@U{j'  @+O@"ާ+n ) ߕ+Os@ zSQ j]d@ ܹs?k6l8}f͚ȃ%0nܸǷkn=0C9JA #spϽ>(;ИCP*;ͫUj GյkW7@CکS'k   )aS >h}B@ MA@'](Oqȑ#g͚ղeC=&H( @@`NA@,!%f!)%pi&*4@@@@@@@@@@@@@@,%FA@@@@@@@@@@@@@@l![z [ :֞CA@@@@@@@@@@@@@@NNl9@@@@@@@@@@@@@@l![z [ :֞CA@@@@@@@@@@@@@@ \d%IENDB`actor-framework-0.16.3/doc/png/basp_overview.png000066400000000000000000003171631341123343400216270ustar00rootroot00000000000000PNG  IHDR+ba.ߘsRGB pHYs.#.#x?viTXtXML:com.adobe.xmp 5 2 1 2@IDATx`EH%ޤ* ((U.6PDQ_EX@Q@DņE@DP Uz 5B۝0wr即Sg?55O.A@A@A@<@GzNA@A@A@0: ӧOoގ y|{ؼd9ґ py9%}2`Dt vZJrVOrt-x3YYdaOVƖ[ Aׯ?{S<@<ӑYhHZY\da/ El~ndq@R]A@A@|a YLA@A@G@H2A@A@Aw;TA@A@yg #A@A@|a YLA@A@G@H2A@A@Aw;TA@A@yg#xjԨ1uThѢo߾6׼駟ʕ+wĉk/0~xFK/?A@XXwn3{f͚6VVmĉΔe(E;vtI da Y0/T߷o߶m۞{ӧO[?:tȚLŋONNvM>| 6V|V!8Y=~ۭ9NYΝ;daUԩS#{ͫqG}ꩧ뗩v @F/^x\\\ξ_͛7… 60d#PdIDΟ?H oׇ~z;^CA !/ifڵy`j֭c.NJO S@oO>_~寿nsIII#Fh޼yZ}Q#bs}G:t0f̘D#-9;lҼ *FGGO4  Jrf4ŋwo۶o-Իw-[+{>B:x}+WOQbqc%tPL  Y8Xpc2[ #f.3c J>Q_PlڪUaÆ|]tT~z Sw}7ZJĐCײe˨ױaÆgnzȑ5A~~=㏨=X HZ| d -7n~ʊsl1h U  p&o6U~Ç#`7DIϝ;w"ԩڏGrA@20"gˇ!8ړJ0m4^/+gy,P~W>ۅhѢ #^T!3ٳgO޿5Q?̣x3ɓ'A@`P'|ƨ # V!ǔ)S8@^޵kȼkߴiѣn݊UK- K/>K84])ctTTJ$A@0d2i8ungΟ?fT&\ 6`t`CGHQTM={ R9=˗!3w„ +VL&Ko$->k dر։/_ٳ]u& hovҥ9s氎,XN\qj^sM7U^]&zO#x " d;vg?D?ž/qCO>KW_}eb'6o޻ֵ4 nqQFpp踘<Aʎ;g#q"YHG}NB?0EM"H A]2,X"j&XKUcCl1[%һwF/@YeYk#@Oѕ;QWǦ̷P7Sx3j da^٥Y`ի{ s:uLV"xw_hZXJ#yVXt#h :ȷ_Ưo-F0lh7dnRJVX(/RM O!УGy9TnFr8X ԮqVG9Ck[1cڵ+'S\ayak./@v  rp0 y{0VK+`SNt-vbT^t&9]>wMi.n'܆YNխR+9b}Nq; |c[˻9,%66)pCuޝFQB^TQO_~ex"ծXfI@{A"V%Q,GP23 />(ҌH nG@ƕ)&d*g7pik@XcS %Hξ}a1-U"|JشVp|S5:t M([%yۚ"J8R`C!LJHEt:7 Kз_@gzڟ/KW} y #"~!UQBi8Ce[+ަuUTT'~LI #(b3vJlTq4Zƺ)^I2p*>b$S.uy@#|Q+YWoծ]˚m  *HBJ;}rrd w"K#=`ietJX+n62u 3k0:W   qe3 nn lʠBskpj|FAt[]Z D`)`bEC҂   G]vƍ͆ d⼇E8#y.CX- sZZiGX(+.k҄2Q޽qZ)墅/  d; .!*0Ź(=08&xE#Z7SUAf3]\ ɊFڶm[hQ,q:aÆQ/aŊA*U!J` k@4A@A@ydBK,Kx#@G`w ș3gR:u0=WQ6Ca xA@ȳL3gzUJrrXhaLss:wгgLͳA@pg7v6n܈\ E0FoѢQ˱@r zXAX7~srxXZAQ~?/H&'][A^y?^籃d dyPUxsQB`ɒ%t~5n10$0x: ᑑ7ԏY/ӿ-y}Qg-d ]$&zlef xFj٪U|D=/~gTlj"H2F}g^-۹sg; -CA@d<A@ ?o&jpO*2C =ES+%J [N<9<<<+ 9@r# 7x򩧦L jΕpF??@? ],Slf_j[>آ%Kt*uY /! ė>m B>8aBіOrA7҄Їd,eT0 ,S; Z^R]͝#:۶m#~vFT@J+Ѽȑ#0'A@駟zB[:FVm`Zw Ca2x!ja])a1i&<R]C9s]!D`޽5j1b/t]{p]ji7 RO>TRVF>|8 hgGի^9sTuUQf@Ui)c6gYs?bd_80$2+qɉ,SBQDԩv Ǐs\ 8wO<~g,XS$Q+Z$i$X@ &0\+ɭpedfpkC1) 1S.^*ZY)C b`lzT+<`>[nExP?6oNJN t^r&!~ΝnLe@Pyby!Sn9p[v @R X[pVI1{9u|Ac0#!3f10A\S0W_Ӭ $+I]ثoWv-Hr J4]9 _ŔĄKGٳ߽up3e$-!7^h4ो.6{իuXp[N9>QM򣢢_~~A`Ɣ0¢Өr%Ŕa0#@!LA#|xi 1ŋs ؼ/Z " sD>p׫V=>a󒐏~\%wqQlYaz@?삓N:!!@ :VaaIMk}֧_Ga z뭰̛VП쭏TM.k>WΟ1 Sa@ԭ*_Lð0p7LHQ02i䤯>$So̝-xsšM>25sv`䧭8tۧ{u{+X˝T2RHT|Ab ]E {;+ӦM{n˔7X9Nv~uΜ1;p\E ^X:D;8\`b 8Se[pG?&I"P?H`[hZ>M].|9n%'^|%Ma lDCTQiWWu $FA(2؈).MeSΝt,=252>/4D#FIwH5_ϚռY'{#U+]I8GL9پ@!8|E*XcVD5+ӿ}C4.h6+I]Aǣ `Upbڷo_? pV/R *5$ "؀[lzŬOi*.Ysk1OZ\fswB a5# C#S SKI6 CCVbp ̧&1"F*IؾBŊ۶m_#y~W8'a.\P ׫|d= P+ F [mV$ 6yŊw]öm76s/]lYH?̛WZ܂{=E^ 5u+Bahxn?o~`谩6g`聒B/TؠV('i;U}<xcp ˗/+8S*e^G\y c^;\? dy @bd)aiFYku,$p񟃧 FvN!X!;ʈ#c7)nݺ%O8 7<|əy) ZJ%"N8>U}.\Hmc8/@A o`lܸ{'0 G3u0}yde9J%n٘xWQ8:{ ʕ/!"fXӜEw$28;(FrP9P\╋6TaQ~G=#?ȣG1`׵kWĘ1c4 1Ò>e J_,(hVOll"#tӱJ}kCNaq2r[CzKG-"RMu~ÐfЬ`{+SF? bN _Xƭ7ԙwy}$TlÄ4&3 x J0L'ig\MFpI#pa$ RLX/>rKk҈  Vp5+rti:Nəb 5zf} ƶ*R-#[4˗/DZ:j*JBSW KIPU&oM$ZRBWA+K'Dy/#9ي=dɠ &[-PцA3̧78P 0TRRNY[̀rqȯl2ek:/hfnKx%Ƶ 6B5)UND ހdod \Sxҥ+FV3HlB3t27ܐ ,Y8q?h  V%B?;u~ [4ElЋêaEl鸲8  Q b KpgH?nS rq v~e? Uz dיCE$r;p@X<ɓ ȎT q-[bsB,6\Ւ@@S$<牄0ʕ(%7g! $]O8Z?S-S%SFYmzGc4mL R{ ZiÆ ]2ٳ *-Bu^Mx|" c;Iɱf (GZ8dK*O94ڌD^EnݺƏG+$&ͦ*# B CanP2+(o3 >|ˇ~aб[rA1f<!Fssq p9';e렌<<?r |ֽ nVD "x6rU|( tk.9M9$-ܞ#4JC4A4Y\2ʯ~ԨQuԁ gҗ4"dhvyρ1\Qآ-B[?nݧMMf*@'"2qhJHL z;~ FQц{`@i\'XG5N<Z@`5plj8ԩJ`ڴi㾐}݇.-,ܟ}./ A 1?ҭO?_ZMVZX-=EO>h|ٱcGApYA* ~ؠ9s?:0w\s1MsfbE%d ǎ /uai?p XUZR8/`8q*5T6fsQ H~X: d v~ݙ8"8fLߧ}Ejwi޲SόyoΞ>3{,4'~ # -t{+ LT"CXPt{_Ҡ /uC`xLU'WXYgP#ia cʕUz̑3/5 `-8YX O!)ܹsĉh(@fȓJ܅I&OTujnNB |)כ}L*۷RXb.]D.Aݚ=^+QDJՂWpTD|l3pGӧO瘒!óY F&W^\ !LY+VM<LQNcSLYz5#O3aal%66;vBA9OYKnQu?MINJ?,qkCXDfA@pow9+8t~MXƀ04:B{RGP f$v' b)WlaB )?+ 4_ ǂV 1?*S$hgN>*?8^H+tn,+Ǝ}n}$(!Wu܅+BZ[i~\6mb@)r\y@Ztla!CcFVý]0®_'ϝkbZ$׀nv,jZhX9ZKZ|vVQxz D!ĸMk"E&͚'l* R%5!YEi= NlA@q y)ڛ'ڵ#AC5D"PXSC~dHG!Z#yۧOX:;7W.7 qrRQr;x$3V\6sA$"MoYBD@IDAT`,0Jٻw =jAjP:?=n``/E{*~/b~.tbH<0ğy} FWPʕK{~;p-3^z9 ОJpV2 믿6bCV ={ASq0Mܹsʕ3f !RǏg8Q͛?>$tO$AQp1H#ԲY?z(ֆ|.|@bky)xy zY\Pؗ4Eg ARX1tLgg*]WG2w+иKzt`G;tR3MIA[ W#O>ۯo>`Ƭ9  .V?P`xKJ8w1=)I*W=\E?s=,$K 4fPhpz%.Pݻ~ m~wyXo_[U~õvVf .dı&UÆ uT+@4mرx,tR^"߁C!y8"⬅6m9Pa%Ɩ)]e1%*gFaq a';3J/ r-23c= 6lҷ}CG4T ,(*40H夤s]|M+f͜@.C|B 8&m4^ظei'#M zŨ.k0;4:1A&)l8彉5W_^_"iH{S*'O8KnD"'O"9@ 7ޅ49avkG7bҥKH_A@6pUep!7 Ux} ;հ|[D ; $*BfDwTIO3mTCAߦklžqkH-@/YWU AKP#@J A-[;uiJ&>np~$1`߿?$:?S iP~`\)&0ӈDSlz%[7x#H 8b_: q6~d2W]hA `Ca ޴nۦӽ˅ybkFhPwnWcoUS ۗt!2=,еU1o㕡.D@0, T0CW;)^W6xaů.#StqM;%~Ű ֑+ìFINmX@_vЦ<bHr Վyff~係 [`ne+u[t: gj&AW*կم) okh5SY CB +a+,nOcDY[~WZR'|Z/|]m޼W0[ZG]X`eTpaѡ6.׬-;;#9YަX6mP}P4CH/àl$Я@͝ %iMnfѬy̥ PshfXƒV07sv+] @.@௿ss'K$:׵F)ѫaxR\![& pJ 4(#{A6lqˡ^gj߾}gJb9˹%xTJDFMN‹b +Yva؝C6R!#WX$ĴJ7/Z|aasε6َKPȾX͙:ui2-0;?|(p}u9 :g„ |PÂH9= џ$roār~(XdH2 A@qZiT qE_:.|W>}g>r9Q:;]q~vb lnT]MW|oa p8S|e#0I CLE,~ @yf⟌@/|+Wи ͜9roٳge5ü`,&-Z:}A!dB\ 0'R2`Ff =^}QDNW g@cNNy>&gV#j 6QcgiӦ޽{Ai$ &>_" rjW{(+C bH?e!I , O!\ċQ>8!|?nng1[jZ~FE$ lt؈bGd 4ٵX#_6g͛7o߾=Qy =ocǎT$G||aG(t` /!Cp3b4޴iSF[.eЩKoPq8$`FQ?a;A ̀)#7<ċ^@ptēyɢ I >CFwT0̽SZ'`pwKϻN::'NtP5oF s\Lϗ + I0 ۏ4Ii F?L-~`Ӆ:Itf;u#r}qp $~:j`r@aU>Đ';ѪG)䠛<ⵋ<=(鷶뢳"7SO=S( 2U78 2P!LI T6!a@ zT<".!w8hA 3`kq"!P 1P D1tU@1]/:^5yϙ'lblI~dDll qET˖+WU|ه3![ʩ'n&l¦L"7W3;Զm,~wʕ Y A/ qA?%1|&K8twv/_ĄfUF!l[lxb+lʖ]`Nt1<6a_܈)Tt;'; B H)*R(L"A:*6 v YbA-NX4F#F|E2D( !`8Hx݆vrKB@r'+DɍUL`|zxCBȽ`؝RalB77n\;6cƥPB{߱f׭Y#[qC !^vamoWؚh|Y d6%Uf{允4QM;b#EeU.Li,DANsM`j|!Ain:AQ!QM{uԉ8 cƌqoZC_V,?ؘ}stN?tܡqsJay,2#7" č`JSYE[I DjCS4Ebh?D*P5: 'fu) E/xaG=E"(6trN#C](n)6 -,>c !ݻqơ=ڮc>wm_s* Ex㤅=11tyA?޽{c"@@[Ƈ s[v݉/_V. XR6xUW x `_7  z(Ff7sRSfRSRK jq9ޖ</,\rɤra 9tr{})H!?~<8#v/zc_Q+Y9T Fȟz2Fl?qpw^11{hG*̐nD E)Gh ~{T<8 .;/.X8%  'VɎt1b>:$ݪP6A@a !#CC=D J3s}g'<1_={'b (]Xg"* OK1s?NIMMthυ>hQC ){YJ(U\:QM\rb;HqHE3H|H)M@-k^;ƈNx뭷1@%_r9@ҹKeΦϐ ԑ4㽀?qdt+T$(t)<0,d#q[["eX[`7O4l}btQ6)& I7BEM-]>LB6er/?\VDe\y$~p;>:D>Ph*C@xQwUi@OEa.k e4JS)lgɘcqKAhh^prBH:3.+[.'/97MfQ38s#"J/#wB6So 7YO9cV+?~8jK84)ݡy4yͭ#qi 7H(5@m+POY9spi,RI%b/~n"e#E$FlG>~YtGN&[d ~*f?~8.nCtu&=2H>Y ◈ۏz\9YΘunO UMG / 8(de wm=x Q*7 WNş^'},+Pl]a >{tmv\fM}Bɛ41>=: vam7gϾ/GT#Տر` CAY aF$(rRmfXZYO|[Ձ//MJ ; 88tyUs;}uy/O a$˅Ztq͊Kڶj[&ץAfT8no@7E=tFh%;.<= qx ac᠑Ȩg'#HJ#A0+Fb̘1o~aUڔ,S'(*:0@ &_I?}졄'N駟Ĕ(9tnݺq2447 ϵgWy7T-pR~o+PI> 2fa{\e#yfNg^r,ab?)AËv/wz`/bB.@9iJxU*{ロSm\nBLFaBnX7mSU"q7~7g [z Y|E+@W'a}}L̹׼r|(š4o<  \<^Y鄓S6l.͍= ) U/i?+M"w4۵suYYy >/'/Cnd T# W&3իWsNJϏ .\yX@K'zoNʕ+g- \+s!m'mTXudR~6hS䵛k lו ,N]䋍tX`LĎvZst ԩS?st#qAby Z… ,(o<7nZL x28P͒C ϜiҤI.]h}Yp!;udD.p$T_~#fڜ7_pC@3ә0a FsT=*!t0TV'Ka2 D (x1ٴ$3$Dܦ7ߊ ě?o߱3 D.R.[fΖ߷NnO5k鎞3X/I@[&Wd>uL`PS)pgU<$ː2Τ_9[E ~Pǚ%"q"iC'guϔ<${tѝ?3?X7a΂]+%)7$.Zk4na [n;D .>'8Q^ 62AƝ<5t`؅M8AqW_}.,MwW7Dap$eZ+gFA/-э_Mh H` Fp@I EqĐ'H5 ~)8~@oGv_ /_˂@chW%av@ԗ򵾹^JAp2Yy;+\EC4m_ad#JO :Q  Ѵ&0Hj^feRN֝3wnXl|QM,p 0t +Ðc? Wմ a䚤-0K“4ޒ^yَWvrlP # Prg5$^S+`GO@!`p|UxDyJS}(-ߨ7ZQmY7n+?\7Z)G/̙=GoPɾ4ݡM}K9%R;D}a犿5[mEFE\JcAN+ OYsx v jɒ%!pZ ؗs| B8}ţ>j38 o TlEЭN9;u4~xU^AGHEXpΥ`pD˚LF~inua^j)ކ] ”T)ypQ81aZVVAK%{ P02ab0QD}avw{lͳ>2;ݺ?ݔ(UhaT\֭RQk-\.X(jrCYCpNu | $$<jaH? I!'aK1!JA;<4)U9;k #XXR8@J i>ZD$鬿ɗ[Av9^r"v lV+×u]:ܼ"mklr{*ױ/h2٦\($~(oX}ЎTZʛp'G],l-PR kJ '갉7L9Tǔ8`}KYoJ? Iۍ8|k N5Mg(;+K: a#4'nN?:p/6 A54;_'NܰaF?oflСA*T@@iA-!tW-ݤRH} lM>co ;kA+*0?7ɔN @\^^=!,@s~`*('ā(;&Ҩ8Xю:^5NY,( )@}8b(M[e-P%}v:H=֮YlEYt&ջO3b3vT,)w$Ea)j\M ѩ"H}I!+7\SBE} cUOmTYueCfdiP0*ls!\BJE}xg׬^?G~}vPNN߉ҹsxeϞ7ʷy#[VڝW5g!\1vZk,:R՚ Fx0:\#fYİ< /5Z*j%\jO78Iws)~7xȐ]w-mamu<}|.\!E[HQEV )Z?-"u$)]^:#L"YVJ}6" `DJi6"1pF<#Jo90i{}~2A8V*Rɶ\n3fae S0VVF%A@ qÏ$nbVI#my[$ɆsN jXg`(FRoQ*kr+II+E `Y 7pP9Z6DvΝ;slяKLjaLo.;+W;ꚓj6Ii )oCkwĥ/,}& h A&_PLtYiڷv!1ΦX?1tR㗥@HxЖbHIl3Y"JN^CQKO'ӗ%5A@X:J=MZ6 B{&s*Uz U̷t?yXX6$cOkk3& 2/2sA@XK &&;Tr|,.yɓ> ߻9!c[c:ΚARԒZxgDN`I=$9yիWJ7#QQQ&N hZW0_)xr p5|JKoB ;!c adx ?:+&cc;_UJ+pdJi9n)vB?. GV֤{Ϗ6\\o@`ƍ11uۛbPZ/_L%'kI. # N2jQs 4~`{3)W=t ]HJZ^_TLUJZt~b.ZLݻ A@sX»`W%󭐟W7#RD [7@@47L_?qdF®.]FĴN_~۴ Y27>Ucu6 ;tV.:P38;Iq5G֡w`۲>Z|Z@X|Xҧ#R,xfk*7Sd&.] d Xh co"%s̝Wi܁.5bpvb44Rs⣢ 8eUDgI @$m8y-$y"#b  їxG)^={l oLY,hR:nKiъu:>a6mҺmZz_rScЙ;tJ EJܡ3}#S]#]%phر[eKA=uKW531ӣ@ݔa\^XZ5V7C@47iOeKɑw}v+\F ۑtJJ:|`"EnCS:r؏~uu)s (*)^XĊdMJӚCS.0sQur:H$V#G0իdJ yD-y},HNLi$D{t|U $$ؑQZHwu֯{l]2aT3oಥ"w,hL{ב.J޵sksA/90 }.G%i,QҊ fHEB-Pw,0E؇wO ,ʦww>e@J,O?}z-Sp>>> ]۶}ŵISkT [#G(ơ8_u͚("Ň[&FDksiDxA*xIQٲ;5TRzO>|X ȹ 88mxu҅j&uTJk}+~mݻqrWÆw@IDAT矧NB0aB[h믿FGG۞&)r.??uTߛ1YQ_s7!2"7#N\iYk%&RP-G >믿ӧ|3OL hʔ)off+hF:"Y?6(N珱}W$K@Zw6"\-O3gN8.]D 4^z3awCxm\PR5?lOS lڴ gyᏄAAӦM֭5< mH(O>k hYlدj㧆ڵSærwy_ԩm۶f9<Ԋլ" dd[(3eSH8{g_wk޼yhHVU޽Khi߾}LeNjժQK {} ݌bsڳs`dͪ՞Iw1bPc}[tٹs[^R```曺gL]V+V0 ݳgOO۷Gɽ{>r"7u𼢪7KGʕc%op1cQlHe%A ?|\akRTNpZ%>DҊH(S̒?GPr1b(O{|=֮Za[ImSv׮]8ͺ͌;\HV/Ɲ;wf͚E+#q+NO.$>ުbȹ qD r 0a!Om+^RF z=D6lH 6o$E,xX@ +JT\ڈTib_D(V_B'vITB[&= dPh_@`v)i`y.Q-J+mҺ5Jgϲ3a+'-]vvkw57zDA)gqБ&uiE_|a0I^zccvcsc[3ɼB|nfY5D&({U@ߘ={2 з2}g(W\a 5jF"`8ի?CW^y?fNjyq`T!7xnuђ"FKD@4 ڂkN-7{6fxPdn Fm8sjpp01F?P h\e˖yK\׍oy*&c:rw6ުsOR}vF =y0L v706QwNLPX`~F?<PJ [21w7'ݻ1_pbBXO? $[=Z <|/1ɯlF%A@",_@Pݻ7[8zȐ!(vg)pE #͙vs׭m[&um_>nˍi;zקl˟1uߥߠ˗O,vпӓgyjwNc`ޣ,K&Y P<ԩӸqcg -u"zrtCFA%~@9\[&_w vB+y,v'.\۲c`>|PllK܉ ;>NCX A$TM] wxر`7oܸy׫p… bePbY5\m)ׯֲFn'1(V=D?E@@(R΄" 8MaWVj]NthMŋR#J!\@:`=K}ɖ-[5N4 D@4mדgJ+y!%ĶKj < ԣ;]t$fO+M(͂#0bKP. ;+g;bNk `QPyhPW$PQׯ^Q$қ/˃,YBy~QixaG5ʕ+ O.]%#G\zI J'O0KaNn! J,?p͕1\zd<4v" y#H"8r 6 VDcT'6BTuY;% -sx* 苄~72"H$z^H&~7\1zF *p wD^y[j\E'AA];Z4&>\*M P >%p}kJ7S< #ND@WJWtd# !qD:*!,y0hG%or9VN$9:^cM_̋MJ6Nm۶)@.^r%mHS}yskjR cIglĬc4r"A;mF3qEg\ %% F͔>E-$}x ~Gbq-p[۷ןwIw o8p>S=g;}\ ({*vKL8ˤIXbB8)3'ujp.rRJ=O89QiT#?(M$hI[^R&4Ђ-he  ZFhM0Gp8b0:>} 5k;v4JF;a$ |E,b;V^sl|amKYDq׹ A< `")>[dP_ `REk'N!_~aB"0A MDIiKG.BlF4kxGRv 5@0u.={LpD, 4\FC8 ߹ؐCېAz$z Bfݿ<䓶 !nSlذ!!4XBh~" /䡢@um扰!lW^yD̳f_>=LA.G0lvM˦ )T)IA@h <{ꩧ^5{l^V*!{_J̙3g\ "h uDZ[!7߰"DžСCpLFXȥKh<{lZ5Qw|{]4w r?_īJl:?~<^XnVA@{Y$ .]3PW`IC . ̃ݫc#㓳iڴ)a!H}ʔ)=y;!GᏚ^eH<󴨘`.azSV޽{ > d vB@l vVC_R!Ɛ^z)**XᢽdR^~y 36q hR] %"Bnl S:tһw^[=JV֨U lm}6dĈ^^^X 5!"=  ͌@Xrƍ5jD(jѡC2kʕ %/5Bmv"^X="8z2M^1Iު-||Jb'?sL[a+}Y``h A@l͞6L=?<;ǽ?hРSU{9T} *US m2eZ NDN:@뷘r .lJg> ᅬ8QO#<~c?W"^{=.A(ZOJ( `?b?lr$cMajziGǤk"bPPCJppO[QʄQ?x,;Ǐ[fMp fgϟ _·l>s2޶Od>ht6gϞ= , =rU" 6/ܳ}/غ[f͜9sfAz83qHKd,WG`ܸqT|7ROnݺ˖-Kn0* FA0ÁFZ~]P F[s)Gg͟7UXbRx}^v]ZLD  1P>cIJ5ƒ]+!/8!5iI _~I&*oF4.c?9ϑְ 'N耂)cA@@+T\ &|WaHgd(+\Gg ܹs;nA ܾ};$$lոqcg0erR ,-"wߑW^M"hhISͿ^+WJF=ӏ.QD" foMf J 8Z`lڢE HѢE;vHB^EˋKszY͝'W{rx<۷cYL8>rZ{f%_.8 SNݻ5X»`S#W`Ab=lKѣGyUA@h펈tؚuIdΝCp;GAx7wos=R#V]NIIIlqǎ,Ũ`+BG2879sTZRΝ;YegIr*'9swj/":: ӇHOA @{tcMr{MpuHn=.1??{m@HA{zI_?\5MGACx饗p2$˂y7y&WmviӦժU: 6!+DG@41 F=z8u!~IcRlBЖ̐2'X6aͰt7#XÅo0Vx޽{,j̙aXN8_~hA1@C 2IOrvڗ,YҥK4蟚}HZݷ BY`ѽ{w8E?jLͅ .갋G@Yq8Js"J;l>lݤѮbWx#mf_G]-F˃6OG &&f֭lߴ[Tr.R3ϱY!X?Yr.Cul:ӴIԹn:Ccǎ殉# @tիW+U8֮[+? !^*/q.+W tʁ%"="AF.0wskV e더p&XP0-"61cQuEPbfx`2*_Lu'";1,]xm@N%^; )^hMW\yw. e‡6cϞ>9[ ~`| yq汿N%E8Ͽ-ޅJӧ[w{P:|?G.!Y)We*wbAFu"DVp 8^ש8ɐ~g\NY dЧիWMy76He*sջ`eSX/We񂰂n(u}Vґႀ# (lsleLQ?Tez\/M~ Q/>-Ă},RS˰%Á,R10Cvz3z䩉PM*Ɗ+*-ACBXЯXdK,ɖa $7YJr^6RnQ;c }ҤI6St[=\M hׯ_xE"^۔C%6'DS=yC"R;=Yhe rMW Ś7u#ֽYك{ [}o߾x3b Ls ryYX׬qgo-t9 AlWEP<1F%#@GܙP>}41PõK9uTQGU \$OKiݼys04L\?HRʉ `obo} ׇnoЭ۷dNiXDgCFb92lͩWl"^R|bȼI#֮Zc<:"(& A@lh S9ˉhC+} =3a2 #Abګ5=cyZUPc0cZ,~g/eǒ0–,^RlőPZ&A@p-$ĵHk /sB=bR-J*6;ITb1(FWn7B@:8kہC= u~H.᎕kk#7>쇌ZAZj>o?—3.Qޝw0_`=['ģN2[H Y[#@ppprRbR̿ŘMfi{ŋXX,+X_ i J?25i5?~di]yFk׃ZU$n_ |O?b"ooݲ~ՑBWO3]nNucO=zqÇ'_oa2HOA@@pDPJsĆ-^r*LNNXG>S@4@˖-3c@,jۮwp`@f5s`Ò/͝g@vvۥ(0jWw_{_>e󦗡8QLԩ;oEYB˦o>)lٲF"kj h uDZCQSDu{t|T8U 036mJ ,В.GW߹&R%{@Rh]+!I(5лwo-[0ʎ9Ky ȑ0&14*JX6lu3Ly4(ve~ eA@xa9 yk3:o{6P䥽yרQ#Օ N2{Et˂6@g&`{WP|\ƍK77-*7*LD[]O+ۑ;n;mA`[׮]xܹ~7Nh o`-wY̭+ZK+D\X `ʉׯO\+|Jy尷X^AW\޼G\ѯ_? ʌg /!"SS`D:OT~,[MEun}Gd@ )F]d eA@3lܸlǻb?7s /sٵkX8xi_ZPe(Rtܿ߂B zGuo1]L{RB}_3DGGS|վ}HZ@ &&:FyoowtXJ}(#Îyx3l7c>P~YHLte@&F@4L|n/!CU6\l襐_TPnYf$SN >}Y uIxc#HaZr)(W*Z5"  ²B9DDDwަ}zX 1UfJC o@,hʥ#F4eț7x;vHqiӦ9pA) ) S{!@q(}f𡲀SR\t؎W {S;w(1L0_~駟Me: ) ~%܏+x|ekb ]d;*r"! 28c(Cʂ_{{|'DM 7:m֤cxiȑ#Hts]hm"" f! YpIgAvϞ6gwbp iN )!Ww7}w}w|._۲]SÇHWAC1CbSB)tBDl{.]bxHGݏ#Fhb"2PWDr/yWȜ|wp'j6'PlA>#e{5K-ߩO^zYVܹs۷W g["кu޽{G_]'uvYyr GbXgiP<I" ]G7*R=ڰaáCnܼyƭ9,R\…2CkנPpŋ{yy9" `Eנޱ쪁=*`\3Q2ZD@4m"̙t5>O=ڵkw=ػwo̢|}y绷_l_091g:бf͚%qx9rds3d:rJbHioFBD4"҃Ļĝ:_t9eyǬV󣢢4 ʙ3gxsiV<{F(EJ*vٳ###EhZh &C,Ǐ_>@~+{׭{zVsp7t?[n}: /Hh fϞ4O>)c҇3gt kg1[۷)#G7|388{-Y" _@ /굑jΝ=^.~Ww<:bKH+zg?ޥ`J؋/*n/_>!*. IM>]1..N %44mx}w!E+#W=>j$w9RuJwv2ʕKyf^wUV%_~mM6… < [s2`!CrCɓB!pio-[bf #<J4i駟7o^`` XmjՊsXYw,J*]t Fׯ'cH@, D~^wؿTyn`ʱgϞS" 4m'=MN@pq&N+b Q?4L@9^`㹛Ec t8q;/Cԩ edΝ;N4 kꔃqb,`ғl+\Bg`JuR Q9G`~C~rѣGڵ F~B.@WAÁ!Pl~ydԨQK.EĀ3-ܱc?B-[6=z`$s43;@S0={A[CW,X~ؠA>ej^֧\lLIqQg<|>RXgj\խÅ##w%`̅n颢B=h4iuQߟ.1q9qJ\]Ez4J@*%E:nBgS#W^xpџx:uPχKF(>{9ܴ)+W t5 jXqpL3g^)C__e׫^!&˻ĉ .Ć&i#g_q#wy.ϷB _o,Ycc"N߉>P^1(+3y~JA,Fx > 6TlT) }׮]_~PH=9Yݕ>dRNBߝB |cMFTb1%O< 5gG/L`Wތ321hfpopιM*r,DqeݩS'9Q.#*vU9]jղw-ݙh+Wƍ;lK:^W3G칲myfBQyCP`]ߋ|mC W+5X<QP>4J[4gmԨ.*4O*ASY㝅E%.݈AJB7N":.=w^@n\l)SH"aL~_ŁO_[;:$a>117n"3sĹ׍pٲN0qp Bz TS/B:&P+D׮] ?;vv0F-B#&B̉E4ŀM QIXc ˯v/$k@ 6`;#o,䅯`ˊ7jƈ|CN19K ܫx}+E^كQ0YqL@V+a+DwW*QA{\y 1DHi7eo+!@ ~WX-q%EVA@p*$ͣV/^SeEnݺNh [XiLT[#;ҌrTŠh 9>|ɔMe9D m @)m"RNF@4'aN>lW| ȨDA@pzrvqY 8 q2qHǓ+F$!="S~h>LJ}^BTDA@+;!r87VZϫSvڎA8 K#@-@IDATnݺQnɒ%ҷRG" #^ZA:P$c&Ix5rH9I"!C Zh1DA@h ڽ7"=,y*VH«Ea =+矩wA@n+$ @~1sԦNsA@ 4hĉӧO'D  ̭AAlW{]m۶6l(U5d dr`w}ףGLL_ /, @!KRʅ TDW" =&OuԨQA@pDq$"Z͛7S|M6M2ɓZA@A DA2 2d G# o!Y%A@y1m޽{%߀B~DuU. >7nᡞ`&&sg#@9ecƌq,ߡtš ~DqǛ)tΝeQ<ؤ̕+WDB&-6@%KP?z1vXQN2 /d2MA1Hcp.vDٳN%}o$D#BZpw=zTv+駟P?!ꇻy 88hacv؁(mցA= MA@TL:5,,_Ǎݻ={OLLV! B ))iҥSjU w^ d&`;u32WA@싀xa_nvlFQ\_|ݺuGڵA@ B>o߮<_lY֭Su۶mڴVZJ̙3)(3~Y-Z8v!g\A2 22(s-ST5&|y5D81cw~-Kc͛}p7o Fbb"x٣)Rdذa(0wwrIȄDDD|W}駗͛עDE}"GL|ˀ3|D,|ZL8xcPj0[lXNȶ D #Ťe["|rJm\p:ufu~ף4kny|J}r}lpİa&Lb`aΤIH5C~hpGA@}ƌ3w?M}DPA@PqF >Q?P3REٲ5)_~} --[vx BEǜz˗/3"ꇊ `+DnN}& `w[ݯ_bSk/Q? sr*UGTFN7MN8SVQ23e֪QyjHf~ X&M[_p1z;w<{xf͚53,sA~b?l݇2@5=zd谎O>RΕf^XwVɗi?3imb:5d{FǐfMVΗoߠ/|9CAOy^Mlz\\ &-[63+sAH@vmn׺uHh蝉g2IHL|s挾}ڵF0 H/6E`޽wڥnݺyxJZx IڷoOt+A@@@44@&;vrqm~@c]ʕжÇ (p G@@* "cvKeeK{#΍|DAb6BE߿;R(;7SYl$Q(D" 86D:o叾3HPНڥBṳ /Zh& ,:o@éD>uKF*UmWCC͙3|%CAD2`1"d:~CW6i&LѣG )A@D@l VpӾfׯ_7%틖 4>ɓ傃i _ՊַV/Ta=7ipT Rz761d,Y}!  z ӦPne˖}-ւ :rv{_>}Io8M:x^8bI"V!9y"7núua?pg.?N;x~ bUGb+##BR/2Dl fA:;FjJSm[;M;6+SsHNNoWCyu[Eɜ}-"=22AAtp⧤ yׯ[7ulovw+ǹs?nzȑի+  n?ҤC׮][wOOyEW1Y>A@P ٠zΉ@ѐl۶Qd'/tePpժUrA@HW.YKi m?6;wL- @lYz5Q?7;שj wQ#@C*UاpsJѢ=[:!@6.СC]U@p+QrGA 5;~GcE$ ?rpjaEA&bݍHs1+ wR#!_f׿oݲNp- . Mfp $W0yo߾a @j!CKy.1ZiA@ F"ch nM@@y,B1 ݻG:,[@h " !"9{D|[ yGGA@gºOӳ{yyxxK"炀 B@4[!>txϗÇLa[t쨈>8LA(2>uUvxǎ6-f 4A@    8Lc1@ qQJcK<(XH6D  `KD%nCp“7mt^ȗ'O9C ??\ cZpa/DA@Sĥ)s #Hr䈍c^8 Ē˂ )xꩧxD8YqqNl.OLeT>x`֭}ͺ]vom-\Y_8'Nt޽Xbq-ZsǏ7>宾曠e˖$v+L-=:ַb=nHM611Ξu+^D ڴmPʔAjx8l9} %{?|{cj i޽f͚;v8Lʵkn޼ٶ.\,]fyV:k,"]}ٲe^~%xj̙cd:uT^= d?h̘1#Mj7o7l&[5b+$݊Nrʖ*b88b=~,)9e˖nLFl@V _w~@gfʗ/Y2 >}tp`2@ϥK^t?}چ"9rd޽P!MIt^relllQ/F-ZɓVZ}TRni 18W^{-ƌO?T޼y]&XM7aEn={xZAt|w_}%>>%C*k:l2OׯtK[hҥ CYStc]7qw@#ԊIHz?8G0"& qɍ<\ "~5׭[G&M?_5dU 'c͚5S2wZ*,,ѣGt={6 @xDEE5m|S ҙcϞ=gϞm߾= @2=Si*dM`f믫,SzMoˆ+TΩODI ZB,TҨ7dW~BԨn2d ipȃ-02ih][oi[ZX[|5rrUp{N::hW^&LVrgJѣ n 䭷bmj (*}ٸqT" 0umՕF,#G$4K?;vbDy w?@rС?w K|'0EgyF#F!C@DK;'v8h)WrΜ9y\MF~'h  Z0vח!fa%At}|jH _^?7[֬(d=88(  oR "h&Θ٪Z5IP(ts!y8X3V k!CBBe%f Ś,Ձ5ÉT2sLRic'[:?jҥ/_zZ *hc ~7Tl,;hBU'/^Tܹs 8#z;'|yaQ"22yծ]1cp(XPQϺĉSp4:F53gˡ0>8(Z ipN9۱()e($"Õ*plwE`E@ "#.X|*XOU7q//_N華k?Qw$$NΝ;=5>dҀVXgjwiwiy8X3VˠݛZ='jUYӫ!t3x+j7} 8EXs,ؤ'B!D,$}J>_uym艹ǽ R/O?('/XWϟ?O `R@~* >fAAA/:TR a"j{G V4*HÆ *ʗ/?jK,o48E0j;*Ii4-C!Q* Jz: 狁=Db;Ht#]6?ˋ N_ye {vPxS#1vIAHAprA#Y+yҤI,>xw*g_q E2`Ϟo֬yxHM&uɴ _ef-M;&JYO2Qb`iCc6EEiiH+$ޥrK^0".n7n *c/I\2d~pT==:^7:40`%¦G.|Q02A-Fh̸Xc ;UV) c,cI9HtDYk׮.Ųa}n 2mr q|cF` E?;k/:w4xPBVZE jwkn5񲌶a @ QORr`W/W$E9Ä`oF/4' X4c?đ2A 0a՚L#q/pkYWSѓj# @>tvXkEFc)okhyb PѨ2P+H2BBVP =z"\5[s|c' we]O2 8D8M2r ѫ@~e[t_uU %;Z&'7m9g/طOiS]Z\Ntџ['0^o2PMcա:Dy~`W&OGt2ބVqa zČᥗ^$ٗb[͡Cj!+"I11Y7nP&]"xϧ<طγg!^5v'iA@P .ɍLUnQMI`j,@ǟ54$1d{lPV((Uђql_AGp (, * hL ~F@|G 0C*NjjL@E!!Q[=2X1x8kW c-D0gK),l 0p*q4bÒLA@#m?b[L̈́ _mdɿ6a~9}ZLQɒuTݦJs LI"eX|b%Gp%KL2HZ"!NiS.Sr+DaE*Tfc B!">pŁ@ 'LY]*УGHJ=ϛWOoh_qҒ.|ק;>5 -kc˒# |IEt-We¢I-.]Y2i LDku qa]7ݎJL6=FWUGQVg*Պڴw}*GipؔBԌT1LKFSu/^L(I ~Xvasz~8©N#38fI ~H $Ѭgq`Qa<aQ˗;25гבhN-Iu_Ph3%<@tE8.u'aT6F8 i}!Lw! A@5<}KĢFEK|ں8*tjoAK23fKfO0rԨ^~|ᩢ ;*T3l1i_rƋ?r'Μy>y;"@kjMnD`޽q Ą:8`#P|zeWc@@Kk1؁–ǡ.fbAQF%~ʾM3l@ժU)g0̊(P݅&(Z fP EiGF6 rހ3͉'2 !ejPw$,w,J& wh͉ )'gzbE_%U6/fa#R=DRS *+Z4Sƌicb UTݶSءU٩|cB a=wiSx{mO c N|$L!\l7 *,{fMN1#CI`FRb;B 75* A!80`n 鱏g(Gl'N 8sNQGh /F:tεPMѢsP\/AoyvGQ JbjU([8HࣘZQ-PbD~6 LNl](aDľ+¼vk2;HՂ + y ԙ w*H\{եV8!u&PZY4F;Td  4l:SuFV}I?qq=a60XB_u@LYV6X_ʍ1. AIpB; >|f=eKU8eD9474td_R`Q;^v)d #Ȕ*-m PTg;aWצG4}GE: rMFp DHaaB1A҂`>s)ԥ Tnj'Fۊdz>JjOWt*70lŷBʃ&$*p"#srH[GPh-|㐄&$87ŝ;.Cx̅;JUI&,M  Sr+xXc[b?vor= iN/͑=BDu=I+Ag feM2 2c gk&k#}Bs۶mɳWr4WCyf,@?;8@Cb5!y+Ih0 } oR%˙zcQYsa ldxS[r(NCQU]ЊHX^.  *":V)|gFqrv H=0vHйmAY`eviMIH瓰a,f7x˄e&)Et\ ""06:)bF>JQ̭.sHAӀk7EgrJL[Ȕp ;2A@/S؞G eiRcV"yfFı|5j;ws, Ȝq3_ /ܫlhi 9 bCUJ*~ T&ģ GA@l" MX{gcΐзq֑R$G;w.u漘äڵk6BBBhA rH9S   @$@   DDb'C6mǃ>J>NJ?ݽ{wY`A&ŋwXc[o#G"׸y+XFrA5:c c7o&QFO`*WLbj Q;B Epʓ/լY.~!aqG_Z.v~=G7n4فMˏђDX~|< T聓&MZP!"=uQ={Ct؂|˖Uyb;Fēx"9N BJΠA*UAI^ǩ) A^ pb!6TvڔiѢ_J_ƃ!a8=W/DԢIFΏ5K6?f̘b<c.\|ϐ!C8uey`3R/vz"֔7Oy 2M6mҤI\-/< 9*ցL ׯwG{ռ5*8 7u(@W6;ZKkE}ÇGz.@dhI|,?VZJGRlYһwN, P?h@xR\ 7s̘zl|}Ɓѷ*b@f`U> Ɠ Pq  0EoߎLeP=W/DH@ rzȠHól8 4&XAIiҥ'OkC-8I5*06&$ J׮]QBQa4(A $O?l >dԩz(bfԙhXDUM1m4<)S52#.L|@νFYAFTGFKaIr0"tf1DEK! 3i˖u|[9* 4KN ZG5*QໂFJ@A@@@K)4?½Kp}J:Q PIb_|Մ|gVkתPY9-eF8ː֐*r& (,Sa}רt`QfL?X@҂ `8 vLuŸ>FG7IBpj۶-)L 2_ս!Qi E;e-؉!_|؅ oa$T1첔&Z2&YȕMG !uUkjPnA $_nO% M=!8k'ӈ#ڱ}xȶxwඁ,3 "\M\5TI!" z4܎6 Ȳe) @s a0F6*t\2c'id❏,e@0ᛯX+ёDIBX1x"| r'RfNStRGeEQM/Q_tC{]5ڔ lhF L%V@ TL!I;R7 ⏁_&;bURʍ 2dcQ'g{t q ]E, $d-~K0#{4v[T*Nv06G\ߣ́I ߃hI|,?ĮBH H݅ AJB#aB*Pբ;c[ɷlC`N!ӎL jfT& <J@"`=Q q7vST "Ğ+͇uTuZŘ2[fR]H~P1$`!-ku;4’oU²eSWoalֲ.<)SnEڵSWF|3)-I'=VOk\cŃB=JXl*- U,GeHMV+,xK)IK9r vY}\JAxepgImA@:TTHf?|1I 3%6*#2D|ѣ)@ :y!<+h= dhs! qbV$#c#ć:La8s EF.@pmCA3pD b<#x.s'-G  n*io*!)^ Fpvv~T͊$^GՇq @(#PHrK>P*`see삀 ?y ^^4]E5dɂo*zװaCG/]2,k @0{PKXR$8.U/fʕL DHLEY."wqInݺvJ4pC|8p"9B%Ν;a?k:^RJ ТE Σ`70NҊ V_5anƃ P 8Ys…3kӧW^$Lp$$l^e'ҩS'{L83?  D*ӧ|neyiTdނ [N:1>BA <04hPb?LcRփ{ fB҂:T8ln Wp/HlllƜ <:2A@/"LH۳&gwޝ~͚5׮]~kc9.ǎÂkٲen JÃׯWG֨Q#-cpDv%N {cp|{2'A xiӦ;w.:thܸq*UBAgȐf߾}h#TT#бCv H*@A QɺkVX՞={>S{suirsȁYׄ NJ|Q ځD5k^;A 4Gk!UM#G mDý{?>CxHLZ6m۷U@/^\Noi<7ի*[9sU|= cÆ ! 5^~L2bR #IPY*?b#9s @\dpeʔ|ɒ%{p ? n*cU'NIC#ԁ0X:| X"Q-HH{d# 0ydQ۟s<Աz;wL~h:H&A@A@K.]4p?0M4FbAg)6&L^xqȐ! 9҂  @#ӧOǿ… 8~K3+>G'^V ̍hREA@A ؼysϞ= KC*׭[7=s 6,GhsHJ   !8WD?Sy]tax]vM,PM8'#A@A@ES gܸqW^QQQoF(@BɘA@A@:[У!]W*U^x!AD8 }12,A@A@_ @7|sŋGE/n^c"ÄtQwwСWREaB8 |)2$A@A@ :s$nl=<;@IDAT;&yIZja]k׮`Z D˫NA@A@ǏgޠATl1^ =6bWڴigE&M۷o޽&MB@$ K  C`ʔ)+_SOcDX^/_̤j֬rJN5O[lnټp n'A@A@p+`y.]K#$~ԩSwرh"]ٳZ8`c'_~9r?s1eY윎ȋg buDb_1cHY #K2eK#Aڀ1c's({챠[t)UE${|4gý̛?ۥK/]HDI'I˷oƒ:5k6jب~sqb""7+j\ҤI)SN߄ v~jyΛ7 'O$Kԩd}}}G)W)W|@YfAj R^B|!*WCF~0f?ZXڕЈB¨̝U֋6N^1WTF7?~WGUɳwhOaOBt u `ݺu˒aÆQFq>uXO8I$Iy$PRRuVz!7$>׮]sz)9}Y}Μ=B|+&IeY,qsM3mc/]?f;y{U$^"z:uaƍ .ܾ}%KXq/WEA@!ƍ'O R9ڵ'! JafI)&A:t9* B}Fǟ"E ƐJX 3I ܥS)'wRIڵqM*yzEV̲==z\S>g +x!<`ܴiSBiߣ7ozTR0>|)"OjԨAΌ3j/ǩV~QcݜHJaŨHB" (l~ӧO+pp0edVKwHԚ;wRNҥZJdDC҂@h!ȟK,ʔs= %E͛ ۯ_ܹs)zw`[lUbJgLڮL.%*cy yLb(Wp"j_`QFܢ$!H"Em9P'?o'Q&k֬/4j}8p?'O޽{nZ= R,*T/]K ( T-bL6, gI6li۶-;R$, ؎h01j׮Mhڜ9s#H"I!x|pBn O9B3;uC/ *VC,AGrݾoW^SIdB?,[,ץq /W_41}diT`0}tA8V\^z.FdѣGc72sL{䯿2d0'hN8TW D,"_+V @һ*LDZv- U0 EWٹs{GB _AHK:a9H R%+P˗/?vX [D*5GJ"iT#'eY1*gZǺ$˚&[g^װKA>q0/ԡCϟF<k?RF~_Ba3ɟ?%@2s5_R`9ݠāXV҂ @=Sp!! lBc$&H`E0XE:07ʖ-KDNR{P$#x}`]hQxL*gl9a3BaN_vjKhJޢrܢa{\t vP2R.L ,ţܹsF8m\?ia|č8_SW-[A@4 г`,>CrHH.D:늦bmT,u\хַwDX5+: Hf.^#i=UVD QB `V?:,/,.o:H1)&$mڻDa)9rgmZC2A @YN=E+ȕ&" 9oz;NFJ\"a֥Nk4*E 4==ؓʨ abuDf"nT\9[Wz"C{nC5E/DT{h W|ۈ!QQD$4Yq[`g98b:\i |P00K! ?~9۠GXJoPX{rTQf2fXV-': ?xV/0P_Cݺuu! g6:P$'#A Hضmާ@!ُ AL[o*W}YD7W*d|<fN"XX0$JMl%*L,1 F 6 N \=XDQ)kB+E IR&xSEj]q/>N90* A  p"#7PgZ)'`p L8' N9<%?aDQ3͝?O>AsSA@A@ N@Ɛpa?~({tۍج@m[[X8x!  CX={\2~L%>nϞK6-T1IL7-\c٫d   CDapXlY.]Μ93fL.P !qr$ݎhoa~Eb d   $ ̙3[l9K6b`xw-Z~:ރ'q7<;wxa?`tp~$ o!:"*E-q a;9sf?SA@A@",4_m&)R0U,f͚qb]R%֮][D z|w! /ɗ?ؠ-gxO HA@@n-ȑ0I2MEgܠA=ܒ 7}UTI>= <8E ?ŊuoR^avߍڮ֋#@H   =kVo--d̞M0xo2e j"E HԫW+׏E6o|؅3-ٰaCF,G&  -[6F1E҅ E<պ~ 8Gtr֍|t+wY5W>!K.%~=zx뭷bbb+E|c\v$ym_'Kz|@r j}AVQO#B>~r~o9r(?ݟٺMԅ8r4!7N_;VFZh{$k88g>x?]y٥S';6u@`O ̀ p͛77m4 K'E1j+V̙3gpOF̚5/pcGV9\k-[n'Mz/ZYfޤIbΟ?A6+A1Fxkav'Ιgj=D @`}ԩS?3 DO?6m/{`r 8îV>vn;ƔiC/H"@ 3G:!7q^ ׯ_{ֹ8y+ssWP‹YdB u v'eB XCh2TA@?իW߿o߾7;QH#K$WFxkի *cpu<˧*؅_ŋگ%D~ .,Z(L`^=}!E%"·olczmYсJŏ?2}KK A@|*Y>?/FK.4aBni.~BP۷ǍG1ѣGoݺf͚K-Nzα!^Љ[J ʼnIS!ɓ4'N  A @% JD iO 8;wZI#vbk.⧟~*]tٷo i@s|se~s LŭgΘR`e@le)/_ɾuoڴ) X!K` (av5u% ! Sd}0qJFh)bRd+Dw! V s97,۴iCR?~| cǦ~MSGcӟ/eN>F`Μ935F+B@dܹsճ#WF4%66?+W6LOƍbvE>f?cɒ%Scuk_u6p4sGGM|+tblNZ8;(I!QN?sI A@իWKml&MN=A 9}D?EI֭٘{7[nUZ| g\%)UAnݺa z Xӧ6x$Ap:ڵ޽{Q8?Gu/E=5G'~E7qdM7LmjAǖ$#&2X;nv y/FL$-AǕ+Wt_ Y FK݈$C/SGǏz^`<ƌh 'O$stgJ,_O_7~|;w*=\tt1̘1c0LN{'(WIܸ~ԼַR]4[YIwإG>vT"ke'8GEeRFy]A рHBRɲ0I c@Ćl߾>4Et)eUdi-Wn\}];po"Yd!:tˠSZbE֬Y4jHL0f͚5nܘܤɟ۱sgH>*q$i$L{ڭ vЙ m۶pr8ޟG⋎\I6m{K+,:pZ@ʔ)~iu~}$%_sR] E I"9sf{&pI K,Οo>}\rW4ctOޮ]_uĈ)<ׯ7ڗh}߲eWba' A@A@"lo2d|1Lc3fSt^;V\rU5ڄenZ-#G48>-*-Dzy:~A OA@ Azj~ܜ\k?OT懎N#ni&X "#w}*U2ʕ+Wz[# j_93#y p+P\Hݾ:y=N*#A@&N8tP=ӳkיn'{=?C;-@ϟNa)#x ϚuYj$ꅫnؠo\B4s]m{^~((x[4ߺyK4i6mJŋ?E,X0ԵIo>{:¨Q8ipE7<N֎=j]v=#B39_)&8L=:{,ʕۿ? cyr.\@6=z߾}PB奘 9kN0~֜pe\D/|N|ݫh֙3g8 -Ks'Y::^??mTS +~ AR"bH %jذ1cͻd=s~KWO 7Am|2J]K'`r .:X_~1P-MDȡƍ "vD7E3%-a@)Qp$ O5Aΐ&_!oW_}M6csE;1Ʋ/Xb 3wq0nT+:piԅj|vAc7oK9Q.ܫo-@ .¥©eO7ë_[g*Daсk A k8Z3>GbN}z 1mx@`!7 A-.={⹅ٳUIW^@ɡ|Q]Ck?=uQt C SLɭ :hS9/gU@+2-Z/Eo; OHD NqHcAĠ- 7(R֭p@j`?FD, _z% ; #AJSR C VZ99r\ptRQbbbyvݔ;w]~ Ӛ4}_`#>] StANW ?GkсXi6%r'T*WP!cƌܢBԷi&H! cuI@ӹsgXիWkH*h- ;l |ʕO:E/T!-H|PL VZ3nݺwgbĤΠ(Ca@nwc-̸)6aO]᳇3" ^{Ƙ9$-&0zhD0 z` ?# C~ y@KdJ7Kik!ZBׁf:DСCP$e5""ӦMcxBjժ 62?2u_Lb7tNJqǷ3fJp9rʛ7nDpzTs}}}3ҝh')&gH"Qz ŠUeXU@ΠX) $/kK.PXGP,Yi ;c-rn~mʫ )#L BMeyȑ#qM3V 8`9?/Q)_Гu@O(kA^-Lb&D O]@%p Q(ey~ E0Ԃ "ۻOk]9պqr`ǽֻ7M\eB4EeiOG//y( A6* N(}J@Q p&86E ai[%ڡ0f]6^A,Lʼn v 4@xԲ_0@ mڻ5ѝ‡ +PnYC|Kt\%UA @\J>*L*᳴G2v\#1쾨'OFMHkUWAkydB>9Dw&Ns#!Hx@΂@AS/ -Y:%pup,,it@yfk!<@с 0U@"M_l2T2ӱ@0 @X*%)~FDQl]$N:i.W[ 8qMmh C5=2 `Ts}9C/l:MɧR-8E'-^pe [g];qD2 G/]J-tɰ E9< iX@53#ܻA`;GcB ؑH Sw4n>*;uG^dsuUSA@~tqs1HǎYLwpҵ HHӖTN`ԕ2Xt X_pwO7ԤC V֠g6i&dr.;֋p ~:;_c2Uds @"y6Pc,]#I sX߉!Hr '`@zĂv ύ gù;bpMB|? G.>$+cB=t萶r A`}uu}#܊۷k3gN%V~ӥKװaWZ5 'SBFI!5 s~Q= 64jȥgϞu]WN9s^{yts?yʭT$TThc"E@MF)>@(ږ&Eɣqiժ+V̍ZTqZxZ#sI'/]XGaa@f͚_8A_e]`#ifB}՝;w3&38w܌ \r %l֔)S`y]_ _{ϲ@dZ(Sqzv#IPCD%f5r(Rо8#:qDЎП#w^=O_/'9Fo/jo5lRe˖7o^"@Di". A 8(QԩSA;}C?0Y-ZrCCWi[|^6{skۢM[ (g#`$IX۷oXH Xdɒ[n!$^ XA@ pÁztܽ>7qQxw֜^g9[8pN3cS7|cUgO'~:ujcIC !U`Ewn:S 'zH`$A@A@+T hX"|X`/YݔL"YҘ&y WaBxM^ڸqB YFf\^{5\с2JqyClٲf͚(4$kA   xƍctt?9s>S<țݻ`1r Yf͖-[ҥ3edg{vL78AeC`yRFA@HG`ҥk׮!ҁc_}1—+SJ5tg}XJҤIy#3PIH)  CnݺլYSGj PcmѢJ3>@>,\0J2X~XVB8z_2ZA@A@qW)Sw(,mڴ+@/ ]G}<j՚>}zvnܸ (A@A@={ߺu+.ٳgPѡC W^n] p#t_MP{,+D>A@A@"sYndO"_ٳП!,!O:uꤧV wP裏?6m[_UL]vy/_&A@A@j7?}1%J矅0ѣ1HB/ >|RPkƍ&-A+bI0 oӱUHW^yű!y<"#SNjՆ 2^|ɚ ;;>A@D Zriʿz/nmF_|LH[ƒ"47ɭ ˗/4iҦM'O$,>%'?qМ1w}&K9~lիx3G{Ψ?Vȑ#LeBAn!q(1[LA 'F=<bكf|D]v  smԨQh"uT}ʁX.eʔCՋ=6i%-31\'/Zy-kyV 3M4pqܹ/; B>Z@I(/2ZXCN8hʕu'LQ 0hF.Hs=eS9| ĶLE^xF#4l"ϒճxRH;wꗃgӕHQu:g{rp:}J8 {;txur.XNPx ~UY8-a?ڂ> OD2C"E c?]j.a\]!yۿ26+ݺy>c9WѥBΗ~va rE֬Y;TrwL3eK/`t-=zv{SX#SiтiU_~YjU*!d8/y(9Q𢣣u/E gΜ8l#$Mfٲeu:uj (֯_O/ :<7bcݾJ)"^LO+_qyJB۶mK/' F?AcS@C%X=8<o2;[a*vL[TS*ujiK6Pc#tV]o5lذ#eY9j.l#0bP,ա\ m lضA8(Uy82Z<jg\LټIRG9L$Qʂ35~8W;_6d49}caWsq+˗īʕ G'_w14t{O?p2sLT'OVޢ$ȑ#{u!+"R}ѢE I$ ?`6 ,hNP$Q߳izk#I@" 2J= KaxHpk \ď?XX1"2P!d1X)(:ث)u1%pT#ـ~N6 /E:űMɭ 7oђeD9`@+'JL8*uem4(S#vsSt-{۷/L#AرcMe VH ^,Ӌȗ/`dA*ُ駨v[iݳg$%_3CBuLj.5+ղ-xJ jͺ=BEDzjee$0x̺f8\ }.~cjG*& hBTp-8<쳘0j A1ۇEvjݺ5ߏÞvH F%-9J)}vw>flْ&ڵk>H1 .%5$l&ׯX(+I8:u]I.[nm=gy ۇ6l^Kf{,ӪYv~ޅ20Ԟu 8H&ew}_㥪2DIgi]&O5ݶe+ۯKDC #q4ƜQsVSZa @TiH㤎=Hu]ٕK4Q0K% 9Qh īlCmMBjLsYdAhSD ;`C[x^vd1@$X(PCO69qrzo{~q&Niּ8i-HX4zRr!b*)m1-t,xP MҪT>!sTPc3'%1RY^S 2fƆňjRƋ=eXþ 3@E8L `ףGvH8LS"%,e-[JDL*ILw҅Vp0ģ$&:!ӪU+`c~(C4 S*|̮wN]THeH3xlzGZ6"iA@ '&E1p2]Ӭ!% S&BB>SB[ (آ/P5[B>d!d12o}j:wnEU"mAN-)cDFI$ aHe-'H]ʁةkdS⎡GI3D~c>& q-o,pLinWtcR%^PD!, 5JbǀD&W\-.mFAs`cɲ+^$ߋxzR׽)xң'urMę#_ 2H4pź:B:H*U̔/?oNݮLuuo1?W'[?-w) 5WޮC}RE)lBc D؟[xB~㭅FlϔMk'C5=}Wn|ҧLL&pDb'roQJ`Ubh6pc|3Y1з6DYX @ `"9'[=!m*\B\E,ʻYEDxh2xGH,E-&}:OT{5СC Pab?ӵK 40ec?LdIbj?er"vdK  2eJ4ӎb=(yJi/8n(0 i^reŊя'0/Ɯtn,)O>VRp1uǒ+(S ~S-03ChϻI$Y܏|3oMEl 8Ģ5eq&N4E s#r .)lU^$K#5RDz\@0ѳ.qhtrۗ ćʉm=<Lj?U)YCMY$+83 Ct &@VA@"Y4&O3_J)E &$WZF!Q[ݖ4OZ3*okW~wJJ   } ,MfLߴCG'NGO$#3@BT#G&IϔXu)>VRRA@#pDI\L->82($&zioAA@A9$ڛ;;QGu^F8q jҲe~~P$,#){.` wbo޼tR 8sNq@wip)gB g1ʛ7Ɂj@d *h8a?"Sio*TJ+EPͫ#ݎUbE_w߾}ɓq"ŋ3g 5j<%oHH^zWĤЙ>J\yjk<(6,’sE@YPLYT0_5\9 T%JwYZ׺mlo7]]:uΩjSP6M ~blsʕ+.\xJ*TrB@=RNf#FjժFY=J,f͚,]6m(H iϯRFmy㣏>4yҧӧK $Pf]1yg؂ry睗㦒gzf8۶gϦ)7%PBi{޼y@r p2dիu*Fvyǜ&YxU8;B҇~xر;PͲEWr⅒Jʟ|d{ӏN߻rۛUљD>5NV->ȾeY SNj<ѳK`oϘ1cݺu^tMD@"O݋̙CDT@Ϟmu93}y;7tI͛oN>%'׿S[iWhcSB_0@٢k-ָJ W|JŌcv~믿V|}5mŖU葌]WGճUt ¥^fΜ$^t>UD@D /e˖.M-ZsNʔՐ*!Gf7r{fRoǸ`*.Ds.+{Ag/|w?T;>[o4e1c."mŁMHFЄ~R)_v;;h9=oաinVn@v3UI`ذaF7 " 1BtDSbX"O<ĪUz@8A?>#NN.ymN'0!UT/%'uKZ\ZlZhږjUۧa.PH˚Tb٧4m믿K=iON]{ CX=knݺJ:SXAb2_gx뭷>7իn$-7s{gYƪYǗ|IϼS]7YФQFMXl:`O36LO|O|W+#q,m h1? j:tDrJ!0bR6O}];'-SZ7߰IjժSO]?nذᣏ>)۶mڵkӦMʴoPs"~xTՑR:tcǎx!+ »A=~ϴ)SY8@B$Aa}t| 0Աc,ETT"˗xڔ;WoRQ8qdgo䣩%KtU4))}GQ}H…ÞL8Сp B#}?_r%EW.۾AbckynvL2P> #Ms4!s:w$}IZqŊÍ]26l؀wQֿ~!\Z>GGKTyjx M.Uu;7d;kc ^+夠#mx_z7.첐HAg)p:={_$@T쑘 QB@G8_%+lH|ϞŶ>3az_?t|yw^x֭[ />s Q^E:"eI_VRsXc70bovu=4LBAaBH%]cktlXuIgo۶Сgd&wƗICǡ@ML?ȅYficP*@!Hx˦%SRKs]dq)c*C cn[²o/~8Ǿ85TLxשSheBw  ?xj)J089/QRJMS6 k|BSl{ڝjݫ_4>,͡A }DhLsx D#֥ L5DD .`5a'T*\\PȁM{Rؔԕ[5䷺tJJ < ^k:u2X׏{" A Gʍ;2Ix:qz෶\zk67&-R O#i;8oYY`e˖6^Z5V}ט~'pÑ=~n=yZ 9%1jd+tU gVOxbтžy͚5Gb k*`*V D|Iw0cW=iEa˞ 0p We$`e*lE>ILhA-S:u4\.lȈ5*g̘|wY9;dN4h!$۷o_pQC\Xp&M; Ĵ% {,N>ϙuoظ+J*U\]gѲeKt) '(E8ϢE#;cf taK*jDn`!KѴuM6mܸqΝ(:Q,r`wUWl۶ormڴEB{oWu& *ڠb*PcBU=GH\ 2%SJ^zNO'x"}k%Ei=xKQ" 1H?q1u۷oߵ^˜qrE>gΜj1f*+ fUxA>l>ۊ=kx-N&Mӝ saEje+C|ԫpСŋ{ѥ$Ţkʸ{Q^y,mb \ܞy 5Uad۬E@bhd:69fs?siܸ1&+㏧zjt5,*(:Q,$ȶyb|BfϞmCA`'t8w6č0AV¾s^[na޽{34W0=z4K/tyYd"]<.bLMdu]n6> ԍIخ]lxlټ%Dt 4@’@Bђ@B$a# XfGU*L1 ۭbŊBUƌÊ jنD\Kcjrc_z1 +W&gx0&`Fc8vXgt,"r0PA;])RIkc&>G@RS aGOo! o &p-1_&Gk29@W4o<ЖS}'!{$5'>=Z^K?z$%<ϼ$pcx"E֏鄔L``7E, ;"!Tnxn yfޅL51HŞȨD5kFrSJ^*Vs};"X-sK0E8!+pHxɹi2: L\[dF̉,[ gϞtD,A} * ά~%MqEn9v,z*v,SOUݜKFgYL&cmȞ!ʼnBxJIBAYԊKoʸl~(ETp6 +lLo&ȇ&u0omS/Dưmldkj7c23.3>ft (Ff&PLEj#IQY93d T"I]t&FA& @MHheqMv+I б'$!Q\3 ;j-vs,ڠq"Xr՟Wt)&8R).JHw3ҡC01sgfelؘ]~f&Ӆ?`d&F0D&ML~c z6rc=3CIlZ;z$D͜ۀ^k,Y'BtV̉0̂Z!&O05|a3[btr Brwj٣X Eb_fA`#%vfˠfa,+hV<.YA/=?רV39'|J[ d>b`E"2$8Nɘ_&f1_wpjcER!\s+Yuŗ1{,.PTa!.V:&Я_?}y1d :#MWFJ7`ƥr=Sqf˱1@G,kq b:o)9lnc|Se*ñs~衇6,C߼ж?9/MJǛ?%^@Y>S >̔}Й \@9rH`~F\E1qj`|`Dl%cvpl):hzA/1 '(M$ H<c6sbsE଒{zt2`xt  *t;1J}:,)!媆NE [PviK.'H\3hdԆ|@(IJ hb V0`#Z<ڷ/{JL"a0C-s/ wbqV~L:J'5q1Φ Fa|\A <O`KS+-!?,>,Qy ZBxAF9chD`c"J<0gNzT)W.(:u (aVxCAPƖIIVyvqK*YGûzQ#GK2arsk$̝͵`̞ƦAz=X?5ûͿ_׉:,4p3ѤIMD |,SahȘ~O&?8f_~*xpd#_iuc}ݍ7^٪v"Jv%['!r KO3)~J/" `ڕN oGbԅ)O&ԁtgHxUmX1ux!3axf1k2U2Om) *C;[̠g<*C>}]/张9tq{ uEF9pς5{}}H^!gJoz_o=9. +E@D +,iugZWug@"GEVx[~w 9eiG]\MCd<"޾u}oNkYIkwOf1 oԾ +P2# $32 6c- L)@ )pD a >uT ɹBXO>d5?@+iզ=Aƍ/]vډMֽ8g nݗ}aݳO㏣QANVrEJ@HP, >M˖-CI4" ">m۶e,Hb—r'p'#0,_|xG/Iisj-7O5-u״oH*? `ٰaC\'@"wL!s='MTl(;neVAD4u P]XCz_WI) )_rK/T1r`ՎkvOߺM}LSasS?~Q$e0~4bU,8T :q#Es4K|ٲe/jɚhB|YyG<,Jhڴ3Jw d eցXhk׮u !DkT% fSM_n&fŏtl}]˧i`L?Τ#V׉׮"^<2S)s6 Dּ#kҤ :q~ihU]ŋQ2M&5C[:u뮙XvލĴ{~Q#GdďL:`=qDuU4S-HTd@ꑲE&BV_ {キ_~flQgϾkX&q, 5#uMHAf@`?gy饗0²1 =ڹ3:dm޼9$1HIV@D`kɒ%S{:J! eذalc#VV9YD@D@D@k]Ο?4hǡY_}լeLaޕ+W~WfQ`6hgfM@$@y~>w޺uk3 {ay rmfe <8##cҥW]}Mڗ:GZ\|Ώ.Z>}ÕI Q;EdO);&Xs"@HY@LHWWl܏9U9mJ0`2)ҡcrʟ}[xRNs!#G o-rocw}7w\Wgy橧+}CՈe|u<(=1ļ;n'Xu;%Ŭ'E(qZNJ̞=_|YU\fсY 8p@&M.rL#-XccpoG_ʶhkB̛oEu7o=>!Te˖ؓ)}]I<[Y)r?~Q[O+TR%: ,Ȟկ}&~~P^۴U 6'O}'K!JW vڠ{ȥM2;_~%0> #Xm}ƍ7lذ $C=gȵ^~C>#U\#ќ{*4:렫"?NJݻC+\dɧz*INsEfh6@b۱={%O^|ӃyvR'֓ Pr-a<-`] *1\eθzof2T>%iV]ϙ{wsI{9(X``XIOOYJU8m:›rI %36l`>}t /^L8!Ç'[oUF {|'Θ1s *:0SŻ9$ %\믟qXHsa%rs? ߘ1c0V줒]|G|$ر#+xNrcGt;tGO>$/#伃--=jWأGzu6gtbϧ#"ޒeED͚5م3+p0uk]x4&G'@SydҘqSv@&bh"g֟s5襗^3l]̃2_eYG>AR՜9EN $Վ;%|qϞ=cfD~zҤIjۘߟY:<hveAAa@YUP$hZp^3gN`,Š %s c| l9sK5b& ͡PlHȺ&>"K\BA ^1 "  &- ߍ7h؁ J@eOV :!Q;,М gkSa^p C~=^aJɬGbrW}Jl.1y͑%L8jφ ٜbiUlG Ş;E֕!Ly"^Bzp\\)ѣ?47XβׁDs U9)_r4Q 8uAoJ N.!wVŨp`%UCg>o$g 9.4hUVe$xn0giӦ ҍ _;7P/(8Y2%OS7m~X`3gjD&Cs$wfSN^5?J$\b^`0"1!&l7`aB -ˇzKÁOV$:!uGB8Fe>W30ҥ Ub:z Q1z6r^&A@[oCvGZAFv`zM~bJvSHwރ&wlAYv6V6D WcmR)@?_s,ãSJ $х!!0F}qBB  1b^E%HLU2/8v9DJqJHqM61Mn$Y{|{cTIva #8,Ikj V! 1 :+NE #PT)&z$tf?m!9 $(;kI3Lb\EƴtrBd":x=RqGBޔegk+懕7mJ*Ytۮe8\yFA7wu%@׏0|L1`W@2y9&d*Ѥ4clYw> uv]; c-c"ISWS <ذ KѼmZZzx`4{ _UB.2ljs i&" ݲD{ĹOVT:'A~-O1EN~M)=.FxQ]Vzl&{? #̭ws,1gj`|6K8W0qh#s=wD'33PbY6G!"5۷mI.Z6:%ONIN)x :ũ H ]À92Z1gz7J>B ?&7Ca֜T媵}U/=3Ȣ.88bXeg8ծ(¬TCr|T,yڵ 4aׄ}Aѐ㎳~ZGW,p`L@ݶlLC%nOO=#,2 |1-cV|U!6#l<0' -Vu,qG%[x)=c|;\M&~`TJGyĨa~g*-Gi[é (xmLWe"df0bP`r}5!9Eg#墛94ޝe΃&+DJ|ftAhFK̙E$lpeoA#Cj̗"pyGN*C+ca'<3a[jp@n@4Q0٢2| XTXQ3I@Atq9sq@⪆S=d7hr;&$F*ƆQad=4}\#+0QKD`c8 b> 1Ӌ9!xrS/3c+@Wq1xoY#wwޏYy2lڰ.K_ÆdBjֽp)]x"c(ybhLXģ?窟 Մ;['sV5D"eeW8_Hqp&e)ȗ9L$&f [PGra=&֓ԙy}X 3Vyr6͜2d7s؀K')33p͇ߦ"C&#y ?lᾂXxcE P7`AWGUB&A`C+悐+g8{I9IZmc3V@F+ OfػW|H(a x1a&W g9-[IJ) 豙@fsvџs5=Ggd* C~OCNHs6B+O6!BK蝪If+V(2C1Z +ȊM'99e9c/*+` 'ħOmL[l3K Bf Ch7 .aCٝE` !3VA@#xA0p Z{J g#++s껐ؿ(hHҫ GNHTDq5X*:*X#: +hq &0o9$H qȂ9ڥo.,rEUkWzpd<"H@H`8{;z9cJ"Gkw\͛X!,B,ֵs R9$ +䁻[YT]")n"`ҳ~FW~]֙F DžWعkIҁrJצyh{㠑CܹpL*ڴirJ5ҁD lX`YGJv !0T9Q`#*wVd+m2땡C&^*A H E" " " "%&JuHZ,S&^˖Vԋ uoZU]v~=Vl ilEc؀_8|'5^J`h /xiTD"D@~ lE@D@D@D@K 99yS9ۉ5폥;fr8 H廣@UևO[pj>ߡC+O@YEs9k{~iZC9$rަw5jPw{˗ܔ<r$ He@'Kڼy<A=RjfS=R&tMժUK7B ?գG3v-c0>… %Hh;,JUS0 ~W543,ۢ(KDq!HqwkU;.YCkGP JvIRsH}ӷzꩧzIDAT~ 3v0;X *k @v G.؏?d&<@^#P~/{>5hӐCnR#{V/޷|rچ۝sӃ7i#.2ܔ@baÆ͛7OHhJD @֬Yӯ_fD@BhѢ=P߾} o[8`rj4+Pzr2IEKN9H[c9ڢeiժUXLr$"fdd :t˖-WYfPM"H ?LC義y@ҥ10`/T~>^{XUxwr[˗t$kg|}Gy$ %d6l0k֬>;/5]m#N-!PM6UXlٲ8+Z7+B fC" "'T`);""_ *1EÆ %~׍_[I Y)]vM0DZvܹsbD̙3@:ݻ7)o=^cťE@C)!)W! %ɚW6Ș1cRSSmD@D j9ATԪD@D@2# $32 Yx2FBQE@D LƍfOk\҆@D@D w H] R:kgSM:&U3D v>HÇv" "1jLVa$"v: gt6qXD@"Mm@,XTR"=%HDdF@dFF~ `ׇr0p@sZH(@̙crrHtV)))(Dy䈀$SbhwV rq`OGD@LB#Ed$0@T" " " " " > H JD@D@D@D@D@@@H * $h" " " " " a X|[nas< @CưUya_Fq#쯑9ԱìX"); +ȴ4]??D<|ot39ԱVuç=bc6kcĉ[D GJ$$TcD@D@D@D@D Hꉀ@BPS' $o'" " " "  E@HBN5FD@D@D@D@bŠKMMZ޽{kFFS͗/W_}լY8h("(vڴicytH%K\n]…j1@HՋ-ڥKGϏ~իW#HCଳΪ\lDʼ?c8I 1~z^{-_zg]z ѱD 7@,nc\$ +\8EuVm0Zvm*UlD@D :֬YSfMgY5jXz3D" " H@:\8E#o\vґvIH@\@hժqHHhE$8I ~ּkS$Q+Z"qC'A" " H@VX?ъt|M߶m[Bj@HKK+WфlrqRqUSD@@mN#t!^zIs""@"E.2#DdE@D  H}/_>==}޼y~z5O+sQd֭" "I+V/UďhbWY" A ht4!?Q"\,[E'VoذaK-;fm]UaHx?~Qj` rС F /" Y8p@JJJA$pW2"$_+,ď Lh"&%~dG" Q& #8HMԛvYa5o|ĉU+" " " 1H[n1X+UI⚀<" " " " "g$ SuE@D@D@D@D Hۧʋ@g7L& $o*/" " " " qF@H0UWD@D@D@D@⚀$}I qvT]k@" " " " "g$ SuE@D@D@D@D Hۧʋ@g7LՍA{ݶm[ VLU-GVAMOO_nѣG^D` BD3@$MIb_~׬YkfY֕qCedd_jJ(Q|%KwӦMD=|=}tI&v[&M6o 1c30qDy)=:h64_!{ԪUO?4ո??|[[oոqŋ-Z .~9S6jԨCo&ĉ;wFKi/_~':tșE@D@D@$UV޽~]t$F +N2H"qws駟۽k|7q[nE?'+dDEsόЍ{、”?sϣ>jAVA*hݺߏf[o>}i~s:c6ݻ;pȑ#8쑠&[cq컬)K4믟s9 /UVeCVzcڅhY q,Xp8:qںYlÇϚ5ˤb9sK/1oK.aP 38KLZ^a1&@9 ffwJ :TC5kքygDY+|SXli.|w܁ H Xaje+ckr Ab@r]тX&-hL]FGׅ9_G m׏! Ǽ M[8&''?Ԍ38uZa1SbML U9 4gϞ]\9JiӦKgyWwp"Hgtk<)"UW]eb`[9exbaSRQ4?c¸VN {k!ؘ00̾si][LF{,Y2ŝS2~c*FHwoi*UcrJB&Dh+?x[ae@mU 5,YԸo*GR\^Llj YnܹMmDsh8G>l6XR!9֥K"8- #-9!7eD@)n*|iObw~W_}-”9>O>$5gԎE #` Pb=p50x"K&]19%&MDYXsas¢Rf?0>ZF 6E&/Yhc믿R$FB*\ a;8k9cr6 gf&X6A`Ȑ@kkc"Sa fE{9|44wᘄ+/0NJ&;bLGb̘1۷?M)S[PD5{rgڵk@gpŝI9c _ykxL*@-,$W]Fep<ꌕ[Q̜9I  !3g*eBLUBgp.2fGa֮]@՞"cbpF2'#7:݊0s1ot\,MY IJB@S.#-qX:I zxFhӦ rCy1[br@~8ӝW ;8(3R.ϋXN>aQnI AT\9 W`Cf#E!A$X4^rL}7b{ɻ69TЁb2;&FD0upItj#:qWayL@4L#I'q-d3fG !H{k=nAPKꉗX E,W彯_ZX&[4_iq^涆&sps5dt-ҚT,m@⋀HuT۸ ZYTfwD%QX3l#; & ܈(9^ XQQ3Ƹ ;anW]& =]`1ʲɣ|Q[f'ڎk>j s 3Gpqy+>3tYlNDUEAxf"zGa|4su, }^@HFG$&1H@c)RwP[$`䱴h6S'G-ܯY?FH&TJV&1}4J$ HJ1E'7t,=[K{G߿?1|}V #=.4 aSvc3To[V" " E@E^Ff-xt7%Z U{$쩲tչsgƕ?[TdQ`MQeD@D F +Fn!" " "dwEusҁ TE@D@D@D@D Hۥʊ@7P" $n*+" " " " qN@H@U_D@D@D@D@⊀$]9I q~U}+Ͱ̊qUUVD@D@D@"HR#XGW\ڮ@?4Lʂ.@6 wOlRt@B4" " " " " Ȅ!`IENDB`actor-framework-0.16.3/doc/png/basp_sequence.png000066400000000000000000004171131341123343400215650ustar00rootroot00000000000000PNG  IHDR- ޙsRGB pHYs.#.#x?viTXtXML:com.adobe.xmp 5 2 1 2@IDATx|TڇBzHGڕk{WTPAQ:ҫ{%&=M9s>sμ3S'Ha^*q,Ԥ`u(T ȉ+11dɒʕQFZڶm۱cDze,\z=lj zzkC[KvWN|{ Yž٣G֍p)E@|';+P IJrHjRŋOOOg֘1c3}MSGzX)&l1䐘lVU*-×r{l5rHvԩm^ڗ #"N@]ϝ|D B9{mE2ߋ_p–-[u]=Bz%@X{g*9$[PPl9~W\bŊ_|O?E4i_)(~"za&D{T~X2_R<Φ8̅UH&$$$&&.QDRʖ-{7_~^{-{7pCQ$"uxhQrH`y*5%PNvGB 7F8A&TV[KGD [B@]/B"!9$K셕(B_Ť[eɑ#G|aڷo_JJʦM.]um۶q9SX *#>9 uCKND /+Pޞ#`맟~K3 MB@H wLdu1ьQX e3TCr$|^|={|GgΜieڵ/ic)KßzO?_{5eVeX֑sG^ڴis5׬YƤOC,ݻ7aĉ,+ر㥗^:m4޷f͚LDE/^:_$X".}Du`!Q|_;oСIII&L@f1c^r%R]pLw}<#O) 3W_m۶-+Ry?py /Av/sxکS'֭[ϝ;?sE@믿޷o_[fwݺu=z5kc$M(W+yP3#f 0= q>ٯ%KW_qÆ rO<>jݻw7n_/)ghZrˡ7OF&v<"$"yhƅ_#Xvy @ P?u=[3P}Q!#@~z7nB@)]"./Θ>2>Cl`&K*RJ*xr-{o8q3]tnݺ.5tn!_~>VwժUǏVCZj.V"^4oU_$x磧%Ю]ߞ€%Pw7n4Bb_wu7ndw}W|yHH͞q{J͆=yd4SL93vR\/)܏ A==KDVӸс9͈'W]u{0@q"T&ͧ烀|@S`86Q(=v *",/A`~zA.%*ٽ{r}.)4oڳgƍ)S1lPbŊe͵'Ex۩xQM@]/O!(!":?̙3p@죐7IW^1oo`R2/)?ʋ͸Т,X76*!͛7~!߻ロ*f/E|.d&S{̨e:tp)nE x8z|*aP׋޶SI \ o.f!Cp@O업Bg}ӧ~ p0Pm_|^RѣٜD!H .f`իW`d[ JV]:h… k׮MHVZ^zoG 3P52 g{9*d"cLDGAHv1|܂:0B 5D_{ժUׯgψ߈ yIMX@1[ b3 r [CAŖx%pt<>|8rR0G)))&MuN#!VǎO=9X-jݺu^o)QaÆt<Ѣ=oɽgϞ_~}x\ve@)E"MrbQS 6TVNJ#,k|1n|W(!ɅnQS3U0D{CmQtLYutw烎>bիWgZ v#Fq'"*U⫇VO=qH@rH6zP\\9 }Iwz.sO?ak:s0xb'T&ux [Ps<O> Wif!>GM~g}Z 9F1 :/q= PV%1uK\;zF;v[SO!W ,0S|0wl0Ȃ.vZ>ZdG$ 9$>=(>sNjΡN:5'N<묳,yO 0ڷodd$֢&> x 4}MWM覇 5.SXz*o09Vs͚5ž *+eioYغ%:O6 Ar 78NLXQOY"o.K,/22Hxd >|Q3z #d$`[`n!uHۦ||35Ɩh3Ųj*,.P3KW0 GYb iQ<(Y$"0O l(:m۶1t!yAqAPR|0"`'] 3-ZWʻöT^k]g!W+O?5]6l[o%'QJH"}лN pB\VNŠzry ? 3of<!A) yƴTR\s bA}g ,!natgOP lVEe1j(֎/_],k1Oqg@CXc滍q#^蘄`r߬^ ]UWbqp{ZM֕!cAZ>0뾐X^yT|A*mQ#^Du׳~A|,/Vuq߿͛a"\zGA` Vo{07t񞠞!юQ 6x)cXfo> |Ue 2ze *d&_(̝;'ئO}ф`>XœU}9DwQXjժ.5Y_Ln!Ř  6m xG"@Tw=S) yvk4RZǏ͖{M,b-Za5L($^GVqϰ/1E%@B9@ _ 0!M3#gCpfL Tvؒٳ9?4Иo祌#E z]})uS]t` 4!jQ_q[,jR,?碲_&a. 6 Do3 ǁluh,8›/Q3Z>d=$0L7|C0lsgM +#Fa pbn'3ʅ_fs^ŜM֭[7C2gA2ɝ݄bǥ0h6XmڇL_t/ X!E19ꆹ(Q0PqI_"#zЄ7fLa.s,,f9O][#<AMʾ|\ :G &.뙊`$K*WP׋٦U"^dJ7!y3Rh!-9$ZKz1ӔHtP׋Ri ${'n 1믿'''Sg}6111jqW^|QT`5ԗ|aҾzaⰅ,Jz ={vΝCuh5*n P @]/#0Gu7^Gr҇Dr넡l!;_Pf"^F]/#6;u7^GxvZ ≀@ *@ ≀@ *@ ≀@ *@ ≀@ ;v,(b!g|N\Çܾ}\l黣cǎ5{/!:,S)Sx G"]"eddfmРA^}ÇGaV Df3EMKK;ׯ_te˞zꩯvlGy1 8R%7oڴpw\PT)ȑ#y'b{=p=ƍg}gqI(D$zxL߷3۰aĉ鉳fͲ-H 2$SRRN9JdƉkΜ9|/U(" }H5V u۶m/R3L|פVpN233H ]_' &\~倚={+" !i]@w/e?~%\BMGa7XHݕD>'07|߶'w/e޸q_jbŊasu=E3gy*TڵɓX(W\:uxn޼%[f[o-TXcƌX"A6'={>s-c≀;zV(\2kE=zhn1ݻ7wna nFt)lEbݺuueӏyWҥ ƓX^tE5rӱE"M6E Ʌq3 Bd*8NYIҾc#3_V + o0>VE ^7#+2r1Pn+CS.Z~0*fceǎ֓QLR뮻Rnv ̧~5qc^o~th!9]Ν;Wn5>D1by! 9$TXׁTy+`fh׾UqWV 4z\mq|GJǿ_} 駟ڣ~A )D5z$[nEK.u*^0?6-F sӦM<`]V0*MW-bz_~h!s q5U"8/^pB@.X1BYưa,.&xO\(7;l+C8{$6\R̅Y>XY%B *w.+}YSifC@TtO?#Hx c ]vYV97]"`o O;X9:t$v s-#BTRi(Sm޼9n~YO=۷/qYlAhet ``uRc3P1T Ng]/tj_2uV0y0J4M@'OhѢ-bϞ~ˣ`Ю];&iQ+ysǟ5n؊H" ._}VG1”5f:ґZHnv2PV.=|D DHc:c>|?59UH&P]$Oe %P{^f^lSfMo 6V5 pQ#yD@]/~~~\Su=Ycd01":"yk%uS@B:k-KtعsgOڍn+X/#3uxn}=GaOCٱf #y^*䏀^)VH je~hVˡ@P׋Wu#^၀֩{#o4JXD@D@D@D@D![D@D@D@D@D h$ @@r04љٳCY+5}QK@]/O]/b.^T]/#<"urx IH9i^۶m[ZQӧW^ye˖-"zo,u3B(zg9:~x$Oe_ΨQ| 0" "(JG".XZM@M@M@~Y1۴qU>}U}UYz*FP׋jz%" " " " K@vY6**!ڲD.!6*8G'K!E PER鈀_¥K@C"iT0? 2qTD P @~凚DF_ۋWldɒS!+/޾}{"*@A+cB"C>Uk.q4L5?`U2s[?􌌌K9p@ffo9ĔAE@2479,X@bS`LyXdZ#\/핗[J`Ŋ5jTsL"IQ "?ti*U`0|$`u\}|`" " " " 1@@#hBQQۊ*D;C'.8ګ 2e/^}dv[nKhzSF>xW*Uc ` YX?D /L6l*WܣG}VR5 %K{}}'K$ !R`POީSo9 0Bq# ]Rv馛:k) 駀!dE;&;\>~IɲkҬ}裏Ҹ?cMi'~`Ew1?19$.+ qoUv 7غukZҦOf͚;w kʇ?[vؑGx޽CFL+WTRR&8 I6m԰avYovРAݺuQnf}L0Ҥ:tV<9䓙\|ڶmk<Х7ni/lo9x-/[Sf(CT2۟(׭[:^^TŽ|,67͛O=TwӞ,nv%{#:>U)I1$`oWnw~a:z-c8toVI1?t:l3u<5S1D!A~|UVe~w .DQi,O){BקB1bgϞ|FA~/V^0F)3_iج1?ԋ >Яs~ySGao3eK&vZvmO%%>~={"J@dƯBYւԄ ʘ22 }{֞ݍPA.fd PqKdcHnGmIi ̽>cKx[K.Mtf%|.a,+V ˜y2rrЀe졵b+@Du=Ɲ~e]"X̼ā'|5O?d&y?*!eڙo/[<9/1eݿ^Ύ):~P#kl\4ibNs,_R.>~{>TYY#"S)#{0a}?#@5fFhւ~4x=lCU1XDg9$=e?M1126 f`eԢE n ܿ Ƹh#[>*QSOY/Z“];ca 1즜Vʼ۱VY!thgچC$G!2p@Etxs)eGtf9E&q;Ǖ)rQ=0JCEȥrH_ 8K"``3J9Oyo}z<ﶦ|r}c._SN95zӁ xYtCSo۞O~+/z -#8:ًbb9y> !$Ț6!zJ*1G]0fʌU)O=V̏ ۪ /<!Yp5j0p1+o=Rxu5^z(R[ѱX5&xѻPD V`^T*+k8݀!X#X) uI Xf/iX+_1aj s)eGt|`negrLA|=!j|1o ZVy=<RnGaS/|l% *X #0Ŭ3J&;/a `fT{wOkJ8v0{h0Ytʹ 1hDO,[[.x/odꃾ¤=l0aU3ze6αHH`qaBS`GĒs/6_D@BYc y[\>;- ˩U|r&._.y%9X0>L5!-jD;3iIASst^f11'\|L<ίO=GX#=n}4A8Ԭ1?tŎ}=88xT|s!^F1Mpyۋ?/w30eUɢ~"Ǚ|“oK& 4祏ټXr3gF 4yEWn/fc.xcAĒ)t1ׅ1+lsOȱ\\ܨc/Oy,84/'ǒ`I tI>!Qe 7t,j+x2͢F\&)ZS,53/,|PS#$/SLhGV79lTOorFALjIMsԉnS #}_RO);SEv|)>jⳞ^[*`@9=5+9S/.Sʎ#@{8K李-?2G30lRힸewh,FT@F~˞'.)xJS잲cYTf^͗qLiY}(Ul=Lm'|LILDz,<W_-@y1|T|hf=};_ΞǗ.Ȟw|P\>)GG옂'Oǔ= ioCO F#@OM)eslC'们r7HRD  k#*R<@BF( zl9ĥk(9D?̗{p(co2iֱAD.ʱH,b$9`o0w:\~'"PL/E Sj" " "}46[#uꬷB4vѮw.pFJW^P%V7,NN>ٶ^+ծ]iGָBE>mݲkvqvCMtu(Cx_:ب#~ƚE׶N5L~k״{gtfJ%GX*O:ԢurwmXXt䱋24*_|nxtYkd_שT S|dgn{ͱ[,sM:0l5;U.yn۪>u3%u-˱zG.|'Ӷjr5ziR)ԣeeҬT_.ܸ{/oÚJܗl9Phn+ҫ^,sM\8_`ej9%WZ׿vYrusXrW"1Jr`訉R3gMӪJbB^5&sVŒ]2;5(?mA^yyĸi;δ勏cmw[\RIH3jsv4^f嶃_@>%vmReG,5CZZ-xJ%? $?72lՒ!<3j'S6_B'Bٜrw3Vܭ/kڝi;Us=_=eEJIçozVrd1{0qeo;z¢  9q$8]D[pE .!9+mڏ6|ޜ` w+a%Y/9Yn1袋b5>D?.bխ˕,zI'1n,2{vH_o>)3njg?y:]5J$oZe޼5(iONjY0_i7ٲ2V'j#{Ԍ_Z\1n~BzAFw"5y1QF޵q/ljp foKARF^ذڗ)+(3 Er\^_^ܹfRܾzU+GIMEB¿ т`(fن鍪i9~p}^rhߡoΝ"m=MJyo_WgA[2Svu=M.OcVpj" "H@G,X:GG@ׁ7w"uh2&69!TmSߋ;7,o10q6gۻ ;M :(ckU(!(>Qn]!nU,<%=(r;.V˸[L{>iǾ" b`t! )e]k! :T?r8Y(u/‚#G1ZpBWq$GRX#paɵڣӂ`VgUfs﵂AQI9er +" " "r!(Y5TD 4f0Í?;ݛUg]S'd?gZ9k?կ]FF٣~f_%&:|b)_N2}u*Hj\,*(h߲'Gd֤ eZ>JXͲ ĕ{_1sKrvf $qQeH7~[GI%R X l\ֵ&Vd,@8*մ-g1vb8z~?_-qϗKزYNG]O)0XoCBsw[C M{9y<ݲe 1i%e;w.[q&q&KdJ!oV3!!ϫ@~o1kmߐq}jN<ύ제M{^,;r2RPoer݇ф;wA3xis `Sj/w$ƔObۊ>Fy 3[?}ec+#N^X<pR9faG7%׼2ŋ:C4pd2$׾WӶ^xJ<ȯD|wz;ol1Q0vzt`SxҦeՕtF{_Z8bJbO\Zqs7cSYMDy9{gy|/}$o< jf\8ペQ6ђYgY4e=Y꥿5R […Xum9mb8wK3g";e?}9[ 7:O]̙3]:3-%eޥ?8ŋ简"pf͞{9s\uU'&E >$۷իק~z 72 A"> X#\9xFF\)̤VVXȆg}{ӳJ&ԭT|t4-떩V.ĜE[۪fes|m޶7رZʵFohKc-k2 j'gE+ػ1e]qPֱkYKH,ܺVQ3Lz-~L"mj*qt3T!ǒe@ޥ$%[O!F-If.ٚF._DEQ4^X} OoiS̯sa C$`?=fy0@9\M%EDz>G"rQ5H ~iַ adI*}oW\$7 IyG.{Y`4 Ўm6>+fmъmQqB(RXAXdq.NM{;z.r=yQnfGzH/ccV~q{n+VdS+VԨQ\ܕ?fҥyaʕM6΁ݎ;֭[wE?ڴi07nܺukё#Gf̘Զm[eHԩc(RH≫G<]vmv9˟HaС/=c /9nC@0PL B<3ӣmax:bnr'Vl?psڻW5SI8zH kץ,cu g`TdCSv/mIꯋS;J߯S3veў Rz(VNbO\PaxeL,9Y&߫y]o¶kTgo8гYӚw(9dxKQOFT[;9/)ݟEŊq3ݝbPZ lϱ]},nY(bl[ǮSL1O裏wy!RkFtc`t꩹r׬Y?̜ZVWT_׶m&M_^ Ro4hss 6{yp q9'--:ˊn08Ї l߾EƟb0I&.ERn7hQK>! `’`XL㇀c_}+)itM 9ű](vFaAA0X[Uo׽?IQV] o[aIpժMuq;W5i!6x%9G=>?f-pLٓԷUybq,kC=>F)mQhQأ!a뛡k,&&U> 3VxFٽQ(>:8 Znޓysr!&5YE{RJ߱Su+"F˝ f U:M=aXl1GxB{9_4 3fԩժUN۳gZܛ7oFFǯ|ÇdXqt…g5j޽3ѓC0U .hTTnT\a.^E8)|(\QVu 쳯B…LX !A?*JLYX}G 1ekM8mAK]zu,s7K XER`B`]!#8&%O=R7RĞ_zuzRNmc%xaypIeM4 Qi%k?c%/M5OimN((jW(*] LjWb ^Ej%X|{K,f]_bj{S֓T K&X7b<ŒCߊl57̵B83!Rt=9{dӈ]a@9.`k]@ !ࠇU:{`yS_GFb+xg1be~&Ν;O2Sʩ,kAB֙ n,G2E@D <)MYaHu+҆d?GFnD2ሽ'WuO'~ֿ;iUwUo\֐M"Y㕱[QͣAubvLʬPg;g#Rjw _k4kTedrz뉒~h嫜s n=&Jx:T;A Lt50qYQBIX$ޛc)U] .4"kƺ%v+f㲫f[E8!Ip` t*Ljj뮻V+WFIp2]X݁$7HEo6tWyݻGqa;s PtP~\jD >$bEDRx%2ez6m#V䳜 /`sWqN;%<|2fEM16+".)]fVlt6In fYͮa47֚tOZ*6~sSp'{K ⹄r (|wv-n0f Ɵo<C.[98 \c]Rё~K, Gt) jCO3L|f^QX 2/Y>v<{:Q1̳ E#h*{n*rb퇫H#V-miQk$}SVCU!+k9|!/0TDaD rX#\98zZ䴐{I`E,vszf9S'y=c|%}Ȇ ,}Ԟz)eyGGu^!\-/cbjE%K !.@tJ2`acDG@Zz!Xzuו*s9PwQD@D@4Ӑ;rl$⼕@n>grH##FR<򗀯kMWE Org_ΎXO7hЀcg@D@D p1tWVFCB\8;Z> ̘1òDKD 8ࢋ. tJOD@D X#@"mT"e‚?uʿ>qI]<%o]?Xs&> ~" 1L@rH 7V 'd'BE@IHBJ;*H;é+|Pq? s=Usz+XCW\mrI ie7,VRơݤ\jcG3\rѭ@}gRRPE 5kzyG" #yfƾbIٻ{١-Y*9fgNM^u|%JUʰ7ee*4d^h<>|hwOH(nܷg%e+{'+[d%|^~p[u*5;]WLt&/-[Cb%s{8=yهWnYL{SVIOWȗJؒTcO2&𡔃6HjreIOݽhJ L8O]jBrLM"Z\J%*XɺӰ.RtZkgWlжKv8JV0̕E WU9D@D@✀9u׌YSܽc^=Rspߦi9oYǏ7G Y ^)0wo;w#zYen9n(Ǐ3 +<MyGr&5%^+M!d;k~s&/K?}wx)0eƓZd'ػrKY5}mv/G(? +GkRa|x櫔p΄7 O4|{:w#v!qxټw˪VTb#+y:8lٲyFo@B( r)9*/%!FD7Zsj*5O!pN}#]Kv/ 9?&)EKHߦ5c *̜=9L";6OMشtZI,d<h;xL@ IƧeϸk5SYƍ֬RJ]VX}Qlq {l&BSjawѬWڝp SـPVё$EM3fYR9׍uaSUHIe!V}rG:9ʬ@FC"bxzrn"'l333#).2̈́g}QTJu`)p*'[!:Ν8j0TEK#4i=yhYY!S$Xa\G36)Rxrζ !_4w `>n)!H kUb{&YΪ-'Z2#DzxBѿc`duˍ&EIux\Rv,P5:޸j9KnpLYa!`X+SC WE!.R" " "+|&LsBaɜ7x92|ofWJzMLekҺ|c`onGIY*W`Xlm8נƧR Z^:k.+@jDPgkrvߢ/o^3Q 9V$1+ Jߙ}.grKg֩;zz磧A%0`_~eP3S"`'˝'Fԥ W)HW@9[,x1Ob[-L .b Own%*8<`]VطK L ߊ; rߺފDc=BÞ`ĺ\X|]&}L']/Ϭ@FTAÓL4E V 6_!8dp%[O){ԋ%$~&w}4i7~B9u:k]q߁_zW߆5+o)wǭ&x"絭:S <sUʲ-,өAy)ylĊ>'?{eфIpN ZБ"Ui?PDDEJQD E J*PBI ^Ir\.rc3ߔ! Xk'^Jy9."9eeLd?#G_rnд̼v.>-,9#& ?hao4. 6 2=4ȫQ1|4? 1i4І}_bTY|Ř9[5Reu9$mWBp':6ɂE].?J`L￙8kӝc[9Xѻ2Dvk Ϡ}7=m|lF|[F<ɇETX\ϠGဤ-3T шcCaIotLg`e3׶^1{ ?۰lĘoiu0>~ۑ/fq~;-zr KԆ3QMt~91X&|-j:Ġ&C?oذgB"5@~}2~---4,Gzn1#۬_+c >_]Z\wOE6x/: ÛcݎQ٘<5Lxt⵰!m .e#=EImt0i|4,ˋ+ƨ'd33K..y݃]ƥ]DPxn_xgu=ɦ쿙1p@3;7$Ntlìz|y 4f:[f3Tz2? .Gw?J_z|w/_vtt=5dȐyd!>ɓ(ܱcG>} 'tR_CO4J?Yd&Q zBx*+B+*A/[f{i.+~Bugh+jk nvBIC:5|RW\09?ČOpA S\H1#=-/W\TRv*(9`[}^H!dp$fbԜ.D1?6{&Z ,*%/3쏷F^-K|0ErXhy{͚5{Lxx~m۶cǎ3윂jsnٲ{3" 솩\C/,,ē!mhXĤ *b55njcQbCYSf|HGSCvY*N)@lT+(Pw\=x;A_22Y 8 *6] vk:#=D^+=Zu8웃Vd,Hԝcijc VI 66A ,^^;%f).X A@SSO>;w÷oߎ44^:ګjT4h 8C)OС 9*%%''WbJ۶m8''w޼۷oGFFsb8v驭}E Dt: :C4:HM=!P`zva $~Y3-&=$VDO GK L={A<Ϟ}?1->,ʢ&&S<r9.mMunkaH r.:$1w[lT! 9om;`!s9Y2͛o|O𱏻hjiki! 9:Ze'U ^[[O2#iah(&ҥ˲e֮] .+W2Of͚kYz{o^r… 0E`{ڵ d̙CYYԩS @g-6mܹsϟA,t!7B ~sJTQ sbEF@v&QB6PM"OO[,?1?76庸,hM/*CdBU[Q*nt'y맶FN9c#bH^(5jh:k!'pa$u4PK2Lz\sC@WVKG|o4Gr? j.c mѮ=ys@,T7nuV1Di`p@mZ~}^z AP /o߾h##_~IİAGiii}  ݻw#mݺuh|q_p9rQz)g$K5wEWdi$meRlpB"9b MRT+?Z0~99YK3-s UO SFvG[dq!&06M5E֬>M ^6 8ghk;y,F:ѩqJ0^FeH }-%SsU}wygM$3ѧ L*_%db~D7!(>ߗ1ZqF7|#Gp鞇[_mt$;]>h[T|CP;K yhlghRsVF:%:q'|!Jud/[7#:UE@!III'Nb3f̀ 3|ȸEPًdD:En`? X B$JrYY 5eggDn~حR--ABDV-ƌ{DevI.΍!@ ḓ4h|!'op,a.|ۇw5={XR^V^!OiK1(gut3WjNLmϙNBx K{=D%Nvx:MzoJBGFDŽn(p jKSh4D1W 1Aړ"䜀%#@P>\ݯӍ>rv? nP1^Iy*CTPWZEG15yd~Ǒ?nҤ FYƗ_~  !kݺ5a6󹼁-[ =8C.\L;v :O!@G@hpsRj@=GֈB/?= .1vfk "6/aTm⩶I(sJ-։K䄴rz"~TzB.:wƆIWJBa?\\\@Q2rAHwB~ B cv`—GU}%eB VXiӦ;VZ5[lj}M+xD"\@0%r#?JʂIP[r}Æ *1!PB믿"ӚB 1qx}m}d Dh Bp Ph!W tBJЏ{"bB&?C9ژ<}\]]Q'Xׄ?%%E4@%qJ-6vΕzo$kl۶ DŽKE!wV)%C!w$B e^8/88eGrϝ;W⵪_B(Tlۻw7Vַ;Ҡ<ufnll3L,Ģ!lE-[ˠ \T2.P}@Xn_li }BQ PVFF@BܠvM%jR8sYЏ,thP0,Rwy5pSD;RG~iSj1 T'!@ R(ꡬ$"Gޠ놏UhP'RH 9y$*h3AYH^G}-ӫC ӓ^jZz qi7x<iȾ0E_)W\O|^f24m5jsS҉rWi wJN1"#B@E@"f?~ծkX<5Zf}V=* \ZSHNI~ih'GW B ǗՇf! $$$p 7WχWY(<20ѷv̎~W[k]31EYʊ򍝚Y]dDŽ?5s520F\oFC[M/+)ʉ 5ukŹ&FjX'+QAj'Mг+-ϊzhhVZmd~=ijfEۢy' -m$΂ F5K6udUx%e}k5M-gp6ҫDb0,LIpXϕjHZ{ִcS`ݻ{weVbuc'ψ4$ e).Bw#Qs|`ݦ>-Zt.ˆ"s^r생 ”¦r{~'Qft"+^اg2pˎ -ĺ=hH&ɉ ٸϪqU*žV q?P$ +V@CCE&B(XbPXX+MyZ v7,um~|*;4 uDb&M ;ơLjG=h LXcQ,u|hòE>k,\ QVrJk3imt}7Ȱ+_L`eF߁TN3Q2/º}JDCΝ>f94zQ> ---~i@ 5@CmZB2.%B ^ApR%22u5B@j~WMBWg`lH#6u┢ ΃; OS 'bPfp kon YӶDVQ+/2hdܤL2 ->*֐C"bs%?anvM\!⵱0$8Ρ!P#DuLğF#W۲U7mCa,lSuʊ 8+DbN&րbݶWҭ0Jr=ہ&v.pb-}#ޮRC\y/2VABrc݊/]ƏDسR ]hTYƢ422R65@a,8-ZD Q B  K ru-l@YKQ$%G*%sV=G&\? gC٨Ui;'6|ʼnEl/,\s=++CȖm# eY#Iii1_9 YhTYƢ422R7"p+HfB @]9qk{mfͽCg뵯ںe ͚1/ԷC~6"l;DDb?w)޲<0w2%c_N׼1Du] xc17 ˧$? f$#k<#l4~y|x͵L+e12ぢ^w[kiq8r[ C]CKk aF"pskM~VmwV)E!JqTSHqWF"񮸠^ Ffӡyk~i 6Z\!z6Bl;.ltvQy.yKHc̻$*(bKT4.&  aiڰF4'1݇@hHY}< ?YwJ$ RgBЏ8"tM4`q8rq5$ȾY,yF+rF`S{q?JfU"/%FzŴ! B\$;J1!@@ @{}FhE6!@ʎ!~I~B Dୂ-!R s/!@!@R"@R6UZhC\Un( D1P?^IT;,M)mS]r.W3OFzʹ;$rb=m wI61tm#B__߆eکR ~V iIHB@) !JqTSHqWy)6<9/!!(M\ZANa]AٳČ«Gסo|\[_d>H 'jj΃M^8+2ݻSkGiЍU7JJl:ڸ sҊϞ>{|䱮CPP>b۩CgEe%Hlfj [Ю88 m ;J4BBRS4\^syܶ҈+g7k̿JH$?KNB\Agj0)@jCGk 99DU,=ktv ɹ PACCh~ֵGl\u$Ò{.6+"Rc [ukU׊=ػ1&BM7v267*ڣ/zXȲeq^ӒZZhݻ~6jȧtXAD4PC~H+T\C!(d!PUKMWԧe;gCM碖p%4M[S}Pk뱝|oV=$ `}R\Lɳ7npǤ,ޔ]w8tZ/'/c?䬢ѝ6 NqП[(KʞrHZ/!mۚ!.Ą%9[飿wsK/> F-(!n N;bB7;%nȝ Sz8r?q2qkl~.h0b_ykaSz9ZQ}748qɁ[#:؊ssC268oӥY7 ST;,?ۆIukfn > jfWdcgc=sJk7,.vѧ~RYO!1q$ /#,Pӳ}o}ki7u{@+-,MO3w3=K@@SG3-8͢ˋ)\$-(fCҋsZ[Axώ%PU3&O@ QMM- "mcmC;ÌЌ|fr=z>Zm!< x79dfhkȎmzZ4=8L0bgF"gK 62td6i pyҐ@D`w=jZ7oGfXo&tؽVKr >}0 jHE`V%zlJX?09Zt`O+l!hkPX@uBx|1آ3UCN\.}XaàCGUXAG"XYt y<KCqnBϯ@M۷~ά,`O 6q&33 R np;d$#97OSS2 !]#~{ŘHw+h[P -}6ۀ Z7V߀-xOüa9{ EKrK!ċ-$:lPe{TKUn*^(?DnwcccTP-U}'qw~նf#"ǗAglLtZC] Zr/.Y>|l(.-AG+^u$ ߌk@2WiEk&%zzZL0.I7glٶ_Ky㧛SlvF GFx4UX|Fy2u76fz9<6Sz:.v|ٛld !Z¡-VV{;ZHa6^;4ӧ썰ѐ]E^\FAQ=kBw;ؙ =H0`X>.y7pě1PPvPsH h>Dj[ai!kP+69ֳX> x`k ؠ*sn9tu_ ҋ6lAQ1ʌ,&R0::=퉓yO/!P ԃ?4Ԝqnf eRj>9.ަ{z `2⒋6f7my7j6.dmim ÄxH ,mnY|ŕDDp +Da,:[ƥ fHN?vR j 4FЏ;s0 ?s-{,)0 *v8;:Š"!i1#=qZن3Qw2+CĴpLdY)yC>H1`FMwkoo .':5^ЈptPi5*{۝߅Ř7kJTa:^#O6 v#"/> ikv֨ 1^FKP"Ss>, ivm5lsm5iXzY #մVssd$D33HB;uQc6hC? [@Yhʊ˘? my>${x>9$V-qҁO燵C4t4J^t>oI P+п!0QĈ! 9om(wr(헝# +-h? i 'l,܅5{ DKކ~SA?RAa.U_.*j q&b/7ÖD)+hAMa(&`.R;}薇㏑jE%fݏBW/po%iV[Ԩ CPԟ_V&”( UPzBP"uNDm{T?;vO=4n%1H CPܹb 'IC]AL&!ifK#d,[]CP&%|%Il1d\bwD<0%&f$M'aL)M{ \ B4ᯙ4+0I!P¤9XZhh{3_kn#c"f'ˣ}etpfqVsDAqBlUs-YIyx/cbxR莂nPc?a/Xļ2ruEgnQb fi_NFBh[w" #5EP(g6!d 7AO`,^#: z_Mw41~w+"x'5D@ &dKC x$n/#3(P8gGDN/pIKw^=2Đ6 rut S :܇`:X1}!Ae-;9S*TjvHq$ O[PGU\I W, 6T[`y?ể4)~I{ lepe y⣴Ghj~Wl`@@@bwY2eѮ pz@:d)-R{6@ÀF34@Z|?iXA\6?%|@ 8g ITĥGih+1ݿ7Qjx݌N232whbi!5kJȘ4OvʋWx:-ScoGQVȏǛ9E;߁ A0D+1i^hHRN|*6 '6AA*Nm紭Ha0N:!p {u%+V0_(%&פoX]Crƕ]25܇ uC g}zTv$CHbUePwyN@Q:+TФ碭tA&4xr6m?tuD+!~,Hkh($jPWm`G leaFE>H:΂A/=`,LBP׊˘jÀ屈!c;EN{TY5k̺45 l n0")/݌,x~eC浶a쿕;$I>&"lm[$ ,a.OUHm@b %B4L[]Bg"%!ZhBNQ6Y6(:W6?YNz"#JTaJ'!RgE#GD*UGQ|Oik4yXCvĈ%&2FaE!H5A(W1B$J!zzkB;# ƙ$jȰbr`AFb:RB ?uر-ɺV!zi4vHvv6 g۴SBUW n5)ΖU!76]bB86@}޽ow߅)2mڴ޽{I4'T~ EH u ՍJE?{moGA@uuPR{g[Wƍ}o/i B@ϻvR]@BkdԫҰui;;ŋ?|^[~϶mrss_hq5A BV !31'B~!ЩS'__={ Sp֬Y666:|U11bDdD@!226BGZ|9k "!@ a:HT+Mk ^%E#pJFEEXbʕ={D2I '@ErFCpKBBBZ/U*žvtR0 "еkΝ;KbHv F=}tҦR?N-..ollOMp`ߐGÇNX4@ʵ:O]JI;o<;v쐽+O>WQB@@,#Q@N`-~)ѭ$QU ӣ'ѪQp PQ IHC`͚51mCgsNX χbYf B@es/NQF?W&Pe`W0?N< W1c~W_љ*si#@5 є"5@2gΜBs!_N!Pڴi"yU}!D4DC@h%!@#SAƍ]PJ H TP~@@TsYų&!]]pё⯞CB!@JH۵kWONNNdδ!@<p y"B B BP$d(ME!@!@ 4i@4!@!@iqtB;tB B !@`pYyD ~UD #`ddzYtM!@!Ш[( w}O" 5@[)VDP[YҲ_B BB6?ZvVc=}9r|:$=fy i!{Ϻ04=B읷ڼ^Sy|euwJo-[y9'î%y##ѡXVNNYr Gd!@ #p+>gqkX"=?KcĮ?(s  VE-澣Wŭ(wCgڳl <ҷIgcJB nfH|sߑ+K.Ɯ-eO.>?!g p~gR}p#/|plRg_- ή;~ ̞S-y D \s+QaiސUe.q )lv ; A.nzz|yß]ބԂ &Õ>NXJ)J Ez&2xSm/ծ孤`~)A!ZDSGZ\X!P(*-NIړ({TqF<\CKNsxZkOr⩌|. ό'"+3ˣgKEnkhn .zZ|>Ά(']=YXb:/yZ:͈1}~ i--]b<58{7פ[ E\ș6AkUJÛY9^&Suo!²n{jl s]sO.6VXguzپ簋V6u&wqhik$P &:Ln3PA5xXoBvz[XNi+(v9vH9AI27}A,Q惛vklhF5x_ǥ=xYĐ좼O 썭r~ձG2ij7O_> (o k}8vwR+ܡ(4#ZuR4CKCsЃcg] fZ:f;Ncm0<h_e߃3'; "d'|G'|òIpj?CgoKۍu O_?a БKkZtb=tq'S?/9 y%Z7_Á5J:d%MP.U5s㲟LqZy5 hg,`6>? ~ec,쌬~O3 DN喀Cͭ\Z8nrtqskkIa0zB뷉 3 cgԘB0T5ҍI LŠۂ2pcmG#k$Q/bÎE\a`r+ܲK|XC2FD{Dۢ72D&SD2%Ch \=2I&!QI !@Jyj{m!4Fɰ^R=j/#i̘=tm摂n}ӈeۡǝCp,8mЦ|JLLe\ Y=&2 t ^×qOh5 kƘg?9uϏ|,\(?\Zn? v 䇰)wqh,\Y jk+|2Z=1ܤY}te:P.]cW"k_oxCD>.WZ'-:y G'c9M`\Ef&;ztf ×u){zl?AJ$(w|@[<{w{xKNM ^<*ب _JQ PMt Y<{/j"AY4y>ҿ_ҵ O|4ŝ&1v='40*.mo Hc3ԭ[b^c_;Yf'vcw3KJ o9Y~e[`hc,ی_3}Tol=-gg2ڣ7v`-89Wx r5u >: ~m=v|쏈˸)nS9ҠxSVr?ҙ_n触VRW6#%B &>?:ԶCx9֫/F cT}'{/f`d3@φz#ǔOJ1L "21:=?.~RT4d[fث?N2Ũ<ޅ-j3K }SU<G 7h@5k0}S?'N^oK$7vMbR*;+WC=B022U+bB41t N 4ԳǷ!*2lS;Q%&Fc# >S]"i׽cpڕH(<_8uPc`4:fi+8yؔ@.;`'Ǝ{Gj@⣞Ma0Q +1axSvY\{;$:bfi` zнc+>,Xq\@&zsErW,38.{Vemw{Dz҆i / cȹ{`_|C:qX,Fb+Z&FaK/h._ Rt9T p^s$ҋvr QX]YҲNB 'G $\SS}qߊdWQq8?v Ff{W%&B.BR>02jjㆩԟ&r]y[t|R\ QkщDY9Ey8COx}ᱵ/mM)Td0> i7 6 d N'KHk - M6WIT; P,H! B  ץC{>z=k~o.K4} !1WHTҡ=v?>E_N*1o jpȥGb 2VP(\ki`RW mEG~Qi8jΡom)4|g4V_~1Ɵ=8q~s7 >>>󆃒%V}%'mB<-⃣?Sֻ_zJs__p̭a>?a5RP:jTǨϭ^>B~(i ן- v9r$쐝;wHGƕ/'8p@ QA eA@Q2S=P{ TH&&|8bUnӫ_!Ld$/3%(}AI[H/($7C)(&]4>zb@ڨD$CYUNBs=a#1Yp`(1~FҎ>\! sJUHKkR:}^~~~:::!L>Z ʥbza!-3z8;[3y|HF7*I$@V%謞VNEnn/N7@Ə]G'\FxQj@}CkdԷ[C!@(;{ Kb?u}ݣGMֻwoQ}." SW GbE!@ =-ăI|5A(0yyy۷oӧ_|›C@hL4iرcAB B _}[=mۖ+Fj/I|7ՅvbG!@!pڵk3f̰:u={4jFSe) ISeP/h!@!<}z wMZJxId!5@C)1*kٰ֬aCUg=!@!B~x?k)5$|=GkzY/^&T |+J7BHCƍ(iO,Kx֕+W͛oΝ;W}m XOp Ph̙3B___h B B@>>>-[T gyX(JDSKlYKk[B @N8А7@>UVphjj"@8fD+e9Mxeн3?zdJ^F[ :4F?o}\ .cbhտ&d}|7/vYXVۍ}bjj>'8qRO"Y9wkQ u .?N=ke㎅Q ?e\۳gϮ ~7)fr!Qibd z%\mvimgFBvz[XNi;%EoH 2yRZpA(\X6M3֬YaÆz&C@qߩ5jץt{Sl߃3Y'l$/*c|'>ks:tYdlyX6 NZ|g{7yot㍷764w0+`pzjr!5@NYWmJoS;H zY5w;o;{Ovwj#{Ia24f̞gOOC>9=u-6f %OzMVuݐ\cr-a1W̑K#^5=FYs!<02>ɑ60%YN>rcCwqh,\Y jkF%&KvلVNrf uj ' .G;ꯏVb"}V M6\!s),,6GH!@4(n=+)Ѭ59@ h+j r %i2 (# '.Zno] V 9H(|uaFztFAܻA?l:C,MЀ)ܚb<%`l=-C$])*{Q ,:3Fj[F~jX ܫI[fijvžG&;SOk M B;ŲY$i.!@@BOaOKgmw Gޮ؈LDN e?/eġt4s4b)RX*wУH5154Sebi XY`ͱ5ghc` ?bag"zIj#@`5G@hԜq Q |{pG2-&}CƺR~QۢLz';gϾnHFTF/l6ik>k;cM"YgF>b(FHjۇc_55wDU 06WCl?%7B2ѰOrE{Mʂ%(HNeGo׮]ʾ  ,oq{GKFS G-Ņ.fv}1N<,/Z%FKdetM@N90N1R$fkd D #E;GsLqYȐvs1ŇȂU+J۹VP~CTV9h0&:ڄ!Dp %k$*!@@=BZ5vpaJ$BoF%$JCԼLT]}yI%uxLuI\i=ho^q!CP㢲b"%;!%Tw3=d&]ײD>% '` $o9`cwC37f%?u%kKBP\V=)$!@ |_~<ꑻA\;:ԣ47?,h`L>Kinxصa>?a5%n9ĄhwSi~PӿaZ;sng"z eٲԴK ]F,=u40E-ѹzL>fgDG4Џ[9S 5{E҈J"ɓ'8p@r#GAd`TQ|*]@@Q2SQE| yDDSXz,p2ח7R󳐈c@U$ }aj$X d(,-faZygbN*<-,]X!]ޏ[i1 LV싏JkPQ2r! PWk !NMM3!@! c[Ana"?=]tĹvFV "ښZmm<(F B|"o XS<S*=!EN^r.Ad#@X,CJ EHWWW^j#QѵSN iӕﵝm ×HS)+: B'p zrGk֬!bA{&rwܹm۶)S"d!O!@(\!/D{ Q|+7'@aa!r`~:u ? {Ą d @ ph(WF3g-!@!P_سgjcƌ100HI=!PXO9!H9DF!@+WWׅ " ٹ&}t3f\x*Q !@R,N2֬Yciiʖ B ;sEAa_k!R z## B!(C_6b!.L}Lhhp#^ /hp uiu9-؈kB;dΜ98^ח!B ^9z2@C@4pvej[#B B?{gхaqw7\K[H h---6-iKIHBgfvlBn}=Ms93mNVm:l9So9+q:rwJ"@ DH1nHz?%y;,i~D"@  p+@CC D"@ CL"@ D"0NJ)E D" h(OX'C͛ZR"@ DM MqRgOFnC<OGG ; D@v TTe>|Pv@" PhiICږQI"@{/߻'rSj֩)|b[=f'5I\5M5'='6s2JlqFl˰*P> D[ !eW; FF h_Q& Dt~|r6k~=)˦3sGH-.,<N lR¼ MvO5ABR%W  OYȭK$ D" \=y yq}yaӶ٫K F~\X"./T%DVb?H?BlUYYّXD"@:@aEؠw *Jܕ M>@ą|O3',s5UQ*%ϊSWVbYH S >"?+~!67POF,:qjJDsa5kk6<!G<̌gȊ~Xl^ ?Ү˗ '%&~gM.$dn aI[51?e漠$6֟9 <| X;x #pX^5HKrkCX8A!ʈ'0NEpIdcMO6DUMғk{N8,:hM >zi8ũKS2߿NM@x]ަ<~+>X埃v.;6zf[n4fg0,3}]w~vj4 Mun%Ue .Gz=M+K] EpXZ|h߷;Zoqp9?LܭUo6o*q!榛8=*2s'[,!V_>L|wW`^:]5uM|7-ܞK.+SQܿLv8w5=S^OƁGUB Xπ9xR%a٥S]G 14n  ]P&(i԰c,J"@ڟ@jQ̘Ӗv{NZӊ𫉖>naC8 "߫;5-U T:wNo׶)*)*a?`=@7"7Lt4:}/%8Knv;~"߫ :!X~ZqY^~wg,?]~;MVdm`~rk"V]u֗_0ت>Sѝ f{>07;1?iCV$ɓw'hajQNem &s"Her1<#9[8nRR[&+CM,+x::Ϳ (hDt$X_IkJ>f,S-6,`>,2ԒVp`@NxƸEG &p٩_bn'|kE9Po>;gyu bnd`8B9|6<4̦=j  !0ȼoଥîhHzq <͸.R=M><;%8[}0FĪa߰⚈%Œ}'0Ë`a YBX>8AZ’#'"Ю Ň+g\___#F\$2"@SQ?'-Fs<8Puc_Ҽ Ċkmq[ϸ ;;4>Xk}8V}̜FY ^6*J oaQi( =;mR o.vf U{{s܀k+dCg\㠒y=Ɖv nG?:Cf|/,+m>rB#J4Rs ec‹샡C4V ء|. ‘ ]@K3g/[[#y*%rCdڪ6S&`p5a+xm`ܻۧ -%{'6Ƃ޵\F q&B5jޢ;:+j4kG l KHbA?ϸ|ɉm uտXЈʢ8%.?kgC1fǵߏKO PK<5C|||***֯_/lD"@ڊY6ElkקG> 5u / j r֖8/z >bn58'UB'EskDmKVm˓z{"B=eUVV>QKL D5s;/ݾo&-b!1퍖I /+>M::Uc\J< Z> =j(>)RG:zԒXᄹuրg}vr7v Ư='4?v'vCEQ[S~s[yxV.+h5 -CC^^SSoF۰~^W߮a)"@ 1G&rܹS'`J5uPԠJd}@Q~*+ JK%ʥEɉ1 cl TGyYnK*ՠg-mS{X;y{] P$^>"L ը"@VgߏsR}{Q@IK2?'i~;gE-ms;YN=_wg-LWF魩m{ЏZض%n_f2Ff}V$_1pw f ͦwc{23{Y6"ͪDUEOϾǀw1/ލ kXwa]m4ZNljhT VkuqwuMceiO-T&>.)H6+|[5u=#~Yhkɳ,+op\H9S]Ujf=Pg1e[qz=C+}R?ks> />9zvQ_:%ŝHojeI@VG]9Ov!CL,sAԢ7퇃M/pE&0轛[zy#)\j]}[מxwC6dt-=oJw`1W"E%)דbd=,I(Xx57;U0_IBRjQǠX76 ߰wUѰ)P79ZA=Jtؾ˧? 񏞡D+E13񽋠++jU5tH%?kG{^7Oľ s bN#bBSpfcPtv@[F3^?oqZU,t>4(b`¯kX޹%7qk>е`m(.H9h En?Na~X/48& ]#B(Yf ??o~RZ1̺?QGY>m;ka|_eQwvX cQDGAp'MD֏G- %+FwD? M~=-OVUM0/@}GCLQ`hHCω(/w`Ewۍֵ)HdY:aAx+.^IQ=9gROC +8OͺkȲ;Wqj2* :29}#l\Tf#NH*G V*Z"X9NwYYNdD<=_0/6!,0;f8MFp6jEj($LVUZ I {"/='OoUYQzeS}1#ǂ!bbVy=S}KM=թ* ޵#G'hݐ 0<O9Mz1+{gzĢO@+9I=XY^xeeey=ljP`P, aЎA3tMPEy.0Ϥh {%92C^vqJ 33zťZ 7%ɱ'ЕXCIr`čuC<ޞQ6o!ԭװI3(5Eoy<ͽ]t=05\z6(`4~PCS/Ձ`a =$;/O,s2,r28OeM' WRVgJJ!nϰyEf@AԄprt R.C4LO xf&1YTfUukX`9Vv+ATֱxyyJ\'A6b՚j(IK`bj)zT}0qF#[B̩/PTWD~C Dip+Mto5@AQ1=)ЭvlL$V ?@&SEtؤ*bDoyz9X| , wvVjHMu)?2S 6hMKJIEKҬx`B\cC<}SXڍf+?-̏Ch| š%/[Y.K;[ѣ'֪Ņf0' \K@()LÆK)Z ah*=! /JrP; B>%`m סh@sh`eŋKkj?6g< M%Š#4G~MlY)ډF'|r~'L!+*M(*HAqp$Wdla`#JAT*tBi,E ,N[ ƩÓܨ;{FLFO<_OegUE1T2x֤4 D"zHYScpRQӮ( F ǫ .jqL,KVBD`n!0)u2^ Xvߺ/ z{Z :px!_[&#)Pأ0 ,q\(x?0#Wڠe0B \Mq'C()k[i\h" -ڔ+mavɵPvpTcCcgNM/|`1@Cd F^4h'ѵLuU&`ϔS9QFޢꍃʍ0} >C-URR-0vڊ򂌔k>P8cuM@"R;>kcЂ`>JO BWA:U`X`#JiNYw9+E<}RlčLsm\-5XcKݛb":lHJ p+@SQQ~9\gڹ`ïXOHf?xWU%u>M\{-b ֟rE&}s(-N;r%^u(3rM}0dCh2J,[A>t?m4BKƟrڗ{_ OI'bÂ<^7r]F 숺Zo ]3!]P05î}s|qqX c5L43>Eå "4/>WM4o[D_p2۽XVk4 gN=Rܧ]8Bl;=CYI51624>^S}ms\/S06=)ĵP%W}nd@<  q& Cyy]YiLތlfg"X?زDD I "@ShSF垀P)**l`=k3׬5{wangi9wAEMe AIgc!;1>QǩВ8FvbH2 m0gsLK &̻PB>Pof3S!lqegaըF5cx%Y齇}T#4ͪ+KxP,efo7B TԇUYifv 4sRV]{"|= yn'?d:,б-B@6^:1n4jN^GPDȅWvEgE+ NJ)`A&~ƎnKnX:V6D{|9'>U~/V`ߤ=))*߾DXZRyB~oشn"ogF`vm1R6h704%;bı׈_sA,ȇ= JG)FCѧ6ϥO-5c\&͊p !3rDGa7,?^"4o4RQ.B@l1n^ҘY/^'1 !MJBT75lyXCv|YEda x|Iɕl֨Ǜ~ u跺#$YlU5j8YEMÀeb#,I WK05u3HPB8 &\r_GG;uH&s2nT珼} 1aW+8jqb"DH_ 7*Dkgoq5K5б+@~ρbK_l~E3x^Ff((.L&]cz؇Gz4dh[Ɉ&;E<]1 i(BghyR M@Qߡoݽj@Ip .ȿ\x`|YCB $ȀthՏ6F3LvḒ~NK vٰZJ?7GS?(;ݥeRȉ@AC}9=`)XˎV"a*)1ECiiq&өBWvE`,082pca+D˔Ic! nKp3rb-н) CKOLًdxTގGٝ '~Վcm'Vi" Ow%!`CU+xLF*nǹ RuQEre ,GoV]\e7Ds4 \5t*39, B ~q+p|}۽ g<<&)/|[G{ (3 D&@zL?>F3^ {0D  CF։"=#QPS7npww֖yF"@@W& CԕA܉Q]:R$.#}FMG& l l Jw]Ν;wţFjv6DA]" h(H!{E@@4ESvLFG< \6i;Qh o[egghѢ :88tT44 RBVR x"BaN%]'|2iҤk:99yyymݺK"@@Vtn 8."@:Aݻwkhhfffp dt4  Dte P_]ͽ h_?.H8sϝK'"4 D-nHzHۂޞ;Ry*kHTT4W9M" - !HH"@@{-BA8s挺9s֭[ |d&O"@@C4dB9Dy#_j0E=f D@ooo*ɔ$, D4Ou_5jGV]Kьz^|)D!D %KU[>=Qe/ay</Z@i"@@!PWWSoa3Ģ7f]SSQ\y{gʃ +* W)H褴8ﰷU4$W(:U/""ЮhخxsZ.SWWo][jEڃP|[6̦yy9]{>/)ԦjU{@IDATf$_Jy:O D@^ p+@C|}}d@v01LZRpeEE+|>?-F-w(=)DQIysYL_:}aܽC)22g**45jLDmK3\ƳŅG|nro^ZCwRZ}FryV-D>YW[|l0eόG"~8˗ugi{1F3MuM4L =E&CBfӉ>pٽ|u* o\Sz|EϊGF2yYoCMM9GwlaU5A yyTT[;X F'qIhcQP-"@3 P^V$i:RN@r!;@Co]諦"{eexepMh)Ffݫ*"!4)!d蕵N.Dnrz%+woA-.=f\8V:Vv+)N:zqGDd ?݀kԛa7qM%ˢ@KۡMAwy<@9J+1hf 3bҷ@ "@@g`gr+@=ǧb] ͝t<´f#FWϾғLm5gEE%tn%Ei36ƭbRY$* n^Ȱ Y5mYصNtmXNSߥ%Y#'}1 ,톝>$7>QDzRo񻍣ܞ9煴+0es[} }+wLlwIQYaAӏwska x>ao߽ج2s]};`n3(16w~J8eKYxzVH7 Bȯ lFװXNJ|m{oӵVmsVtKtGЕCYVqe$]Dt$P% _h u55U n[ "[qL Avv̔U%6NcWZ;p+b+i!QEU)!55iFs ]z¸})=9$_&L A5#SCc׬۬ \zzIQ cWNai7XcqZQ!ֱ097$q򘎏|x}ϼUh*qlL{4Q # M5|"@@g`gqACgiuttSGI &\'=)ڂ#,risJjH X st .-rnu\ Q#),R⶙ؕӟ!uH4|Du2r45o4;#>VEy˹H3^mܺ@s47(;錘 yDEY!JJj;E0.!fcC D+VtA'OMM!y91,w<幭zNj;}0p Mn zJB5uS'04 v+]R.z 04TXWT]Uۚvo-zrEH*HiL_׈RӉW Bz3H!o$<(+QMq ,r yXW9hңzkk*n{uL "@ ]ld@G@8VƯYXjQUT':@~IsȩzrTxc8hBإ ҂}UQz8~D3a+d959n#ZiS69Ulpkn!{Uqf\i pCdU?c#C]= Rا`'cq"@RHR&+uemMuyZR6}ªܑaSAƮ`ha7Ч {'a[Z2P~ K|~VdȹoUy#1.Bc<ᥓg\5:X[uA oXSt\:6Pz Z+g٫ݸ4zFi&r""4c@,yę3gB$wҶفZQ$ g]PVtKHQ~BaTb=U $/;zIS۔-. r;o }F\ MV0bfq@`1O{+KMKHXev ='!b޶RBmo2 Df p+@CeEڋQ{vkhh]]q3~kjp?k}OρUgG: D'zHYS~4A!ߛ4vرuֱcǮ[NzɄ$ؘK???YzHCM61BAAE D"@$Ii+`_ݻPEEeƌ*// جkkkwYWW'OD@ Gg/s "@:!իѫ_qwwwqi= ͩ"@ D!@ŔC|Az$r9%%S.^XG9tZBܒT%@+@}vr P>ϗ@T,RSS !pBE(BYzT"@i\eNbXnx<ՉӱZ|9 7nܚ5k3f( M Dy%IG,ݰa4:dȐ7fff"$//|ҥv=[N2"@ D# p+@RVu4i帤O>b IF$%ʒ"I D@n Pn M[ D.[L&@#߿pHE="@DD40NeUVV"@D _ h DZӔP|=2߿_~C3!D"@h$=9TTnnSD"@ RG["uφ"D"@ rO4A"@ D" uqT:H " ~MfLHRpx=zݻ]gKc"@deɼB=d޼y|>_gC RC ,,W^dO"8---<<|lllF=mڴɓ'KՉ4 DH-ZJ 0Ux8:PڤjCy6쐺brrrVZ~z1 %$00ٳ۶m֞={/F.PQ7DۺOYmmu7gf+ڃ|i(Qfe,[L@"Е _|Y !Cn ;w}d VEEXMoUeXb J*1ۗ6$3Irx_#N--g]0QAㇼcE8t|cOLMeŹՋC/O :ׅo_kXu5E &Vc{ԏ؀=V/BQ\Ԯo2.`OY@GVLehFB{6˪!IT"@zA| ?4W-oFPN֧vwךҜ+1`s1$ЦÛ;#6S'F _y0ӻlLַwִ`)/r{~\X"912V4en."sL~N3%I@b% W WBBŸiӦ~ ;k;cƌАd@7U44f| {TݼPYg}j<*O-HLyԢ( sVB/ {ㅺqKx>a3dqHM<Xm܋(-pڸNYk5'vtθ3q= />BVN`%>=7.  4YEe?%Y)~粊YaNcj*_0ۗ2à ڸ ؔ0_Ĝ܁>y?># {T @VOVAr f%Ijz~~~;wl}{j %T"cǎܼysyyyKS 5 L"ogN쨛A'q ?wPBn?blWEߦcӿ{Ϳf='{'1c~fo/\TհGUMmH%|>#"B.|JV5Ieq~Kt,RSUZ̊(Iz,edxe߷{-^0t&4(4r ˄K?EA(Eeհk.!E1v^uiqF(ѯm< kuȡel y2iH (͹uʢ|E/(T PD/~ }'鯰Lf=ɍIr\AIhk*w$ GA*'FN=[!!DeI Q5"@Oc᠅ʕ+8e>Z˗/7#&&&3/JL1//:ޑu(r0ʚ]p^U-Ҽ=KƝK-L~? 2ѵqyUqfiA50M]3,.fA X6#AT-$EfK?]-Ǡ7Aؽ+1򍸅9l,vnQCÙAm+ٍvRV]u7ÂuJ3{RoCQrv3FWUIafXPMYC-lop[M `7rIAZ&2]+M6K?e#"|47Cȏs#QPTug PSR> OC!OC"ЙpҺ聆-e틏޾PHֻロȸsZU*,-e%ߞv+4C0:P[,I 7'|Çj PB`aBsnOۡSXo.-^3%pvwqf"+m3tt (H/Nw3 fcavi5HhЬF,!EcƔhVػPda%fDFIAQu . 29RVxT]_%%^%/v+ڼ))KE eM##֪᭾;T,|f9 'A%Z@ADol"6]Tj."@@ N[oPXGő??.]T0ju԰S t윣ihP5ma|ˠ':9a!= BQG |QU), {FS tRK.gĥUO#!gJGB|:nٿh?@p H?=>`*<+p4~MIIV2ܒNVj FM,Tbi62~FsǼp&7ZU^3u)<2:Yf[Ʃ×,3xmh~oa B _2h@1ChM9H PNA Vߖ."@ _-Ņ#!zl.(pRVVƷ:ܴaY Ȋ+:9oY!Aލ u->@FJixXU1~( 0eд`; ".ZTolj>w %hGth5X p 7=f.ɍxXƝ˰!^|D fk_wGIY0]Q0AJ0{!UՁw.T qre B %z*wc#f @KJHg%2E+@yz276#y<ւ3I ؖld #}#.LU[[ ?.\5"MNj 8rdذa L$t,!'ΎPr~Dy{ ;|=dd2=$/Qú7[%#B_g$G79l몜PN_-Ɓam rbuΝ1pi?ۂ!^q`w5ἎF>{&`\8 {ܞYĊ#% a& {m!2R zP8a{4Dkl-E<}cb=,L Yi>3t2)A@ p+@CZ͐>-___#ǎ Ozp'&a҂\{{Ν@${ݻBZ7HfCsb'[ K4 Jn] bXMejx'C^l]=;7X/8)eܽu {|j} [6a-Z+ilJvThmK q.TF0mnT7~Xyĵcr KG,+ns(Ğمk@e ǹp*H!$Ȁ: $^9:/ d\zloMur靰0Pe)7Fl3d2ph,v#u^~kF)鰢ݐYz6=b0ndC9N/r~)s{r®-qK<w2lahn5|p)yx,t^̭ܨ3VĴǺ)t*tlaUeEP%TCQqڃJ&˱D*zWJ/ E P_pQH.B7uس,4B *_pʲ>؀뭷Bogg'S D `9ݨ~[,g'J< k-Xc^3Y6֣n70>{ /6V>3d l;?C=^j;_bӱ5}AoEi&wϸ{ѧз-z1 e5MlCSh}Oԑa0|섈^bxс +~H>\ Xh[ #om(n=澅#D6 К{:Fn 0|-~$x^+>xk"FWեEat'T_yEr_Iz|oScoQuILa9 ʏl_ũO3'8ÿ\<'DB}EUu}-wYV-@w.Tg 6 P̐f…. Х2sL09|Si~Z(F'AQ =TRUg1g&ԡfoec^f /oٖ,I[(I[۪IAJ,jb})aPQ]n᥇p øq6J8&O]@=ԁq'8i  mkͺR}|J5QW]mjtG^i؅Vn/Z&\Ju 2[6%tcXL60 V ޠ_:uw| 24?b7d Gc2"Gpf m'~]&,"}R~]׹oYm>h`+jWW/'%ɏƳtTm!"ł{.bCݼ~ :6ŲvE_;蓿8 UQr}w?kGֵu{poe mca&V+-S[e;HdڅI 7,rjf&9,Yrs3QĚWiifb^{A 5U}<w?=T)4/JEϱ ,o〠8ry[ !, ^ O#5'D@`p+qgYyPRMt#OӵJ I9[fZ7ӉY``$NjjՉ?vjVu|?9"ye!lBYHh4Uh.7'nEßAthNi(n}"VT>^0pY_F~JJ4cdzk*yMU䆜KRaphMJK& +`\CCX^>3P3lIK{۾賖",6 nEQXk? K<ӤHM+ɰU{Xvs^~Ǜ? u;OoCA A{XS "@Y'(4+%bwF=D[xRrrqi0\GOIx(A9);uNS-$i2Zu"'fvz׬up6 >u`LpbHH2*FUIʣl qg\;@]S^w[d$1", #@fϧ2¤UCA5g^( XȄF09!ckDܑNӗAĮ\]5 kZ[u'fMjaڕ#Wr?j'm$r}I&_5֖gD4$=Dj }CIz[Dw/!  , *EeExX/fzEa*svAlaT;W[fjgQ ȃcvUY\x11-4Ҵ@+\7\Gp{ x}@tEUEvΓEiEafQT`eY/;}hSԭd3`ǎ[n;vu$WnR,8z-XjԳ:la?j2g NQ|7/>q}^XLY_5s"=+kV4mZ{5.* >o\FX>"SL Kjɑ=1,)S=?u:G |Ebõ֤X*`j:/@{f_@ ДtlݠW>E0 2q'VNT m%CinHz =5<ʒJ,g3JYB:ƙg|nڪIW_dc7c4I8/.q郎q 4tU-( Y@~BaʵaĴ5%dh20 L}-23^QPS\W1+6Cm#olQ/dju Fa`P?3Bs!e₎KG p{R1YuW]C:xqJ,.t=J2| 3-s~@,_MW ZmW0s 1CLz7vt[W]O 5alI5 g{yymٲeΜ9ZZr?y J6oYe{XGpS/LB;Qtq+M@l]j񧶣[ifJNclF?j`͏n)SOyDrJ{9LkJ>a9 uZ$wXWcIA+j4{nf77$M[c&o)&15b R*;uP0{˹=Ӷrقcl~Dz`Eq $h`I^?n=c0UҶTqC&OxIYj47*HXYW[=:WtN:c(0}˵e$SN.^4g>6\- Frە\^掾m|CX.ڿHH?NɕHXR#nws8XlDq?ά cF]&k)I?[TFB.A/IaGMFjQ)Mڨ>L9dSdqZYQYiDgE~0Պ&(rbb!"[e{!Ϸ}^̔\gې2j*$X}GS'yTˌ=8[dԤ5Cgdd=ȲAOY MkEGnr.n*U|%bJ9dR`}Q@'[zH`Pi62,/5R;ʿէ~:pr(e3@y(I$3y;8z< ;{׿2ɏYkFے"aSۨw]:aT Kx)9X32)Ї̼@cN;F]r&l:Dۦ2IGOT/bM݂eokNrXBpJٖ枻[?ߚ)pC$  | X\beZjH+Rcy{+UTv{;bKIڒth!'}3ɭJ* %G߸q#W?cNNUff&Sv]\\wߝ?o[A"ոASqe$!z:;)%\.&eӟ9Gc' r2ƴ*cİj f2lO-gOC~0ǻ(<nь3raُ-S[?2>dH^n\sġ CCl>ǹ3+Gٯ]sv˿??ͺ4[%YYn݅E{ɹ/ D-ٳ]l;""",ya6zJ U 5:PCg\HQRC#ˮ}\>58;Nޘ/b(S[>^F`{?a}xܫRwADǹs[eFg ږ` YZh5ؔ4_+:ŴbG5{lڴiPL"˗/Wޘ1cLGVݺX&ܵ*A4sHW#>fͪXȖGE  [x?yE,G䳑g(nwwgz؀ľ~~D, ;a+I}43I|ܺŘX݆(ZmA? !mWRR:!,".PAQ``fmCHUTtxچV"@0wAyV|H;? !o59ʘQݶцU&f}c 2 \uT{͚5`/GݻKZ@o|ܹ(տY T+ͻ/^3lذ!22244?u䂀 T "TA(8ȰaÈZ,/ P5aRA@U+*A#`!'O&P [A@A! `{a#馛222iaA@\Q@/ _  PXшr ~YKV,ħVZ+-e{ʺ7k `ɬgUnp9]1Hy33gEg0X}`[ZT5N'MKkиA~r$kIPI  Ph PxH5?<3j3[ʴdٹjj3cm9e ,g<ڷֺu |OĝH\+-}v)sO%֫;߉ cpͅ7?_|>;!ە/gPߠ R(-A V *,RY5&YVn \ `?nIK@?3moZ^˟_N7wlY/FSF\FEXt`uyѫ^]DJLg7l,yzo:< 4흻w?ԩSEO,LM׳BO/[na۾F+/O=zT5rti9{:N6nA\ܼ8H5q e;5R( hbeKDEEyyyRLM={b+xO5Fn д}S$1_GynM= >&%(Bǽ=:ܑΓ;C` hO1{'"hjwce.#|7C]<ԇ.]Iݙڤ%C 9[?X$p˅fBDktZ'7u׷%s5NdzʗV0OB0&Z@񙢢lFMxERK,j.ZRsb_ܹs]\\ q1t b"}os?isҹN ڎma!(F\nNwR<9 i`\]#sw;( zqӰyÉ_OTݰWlK@CZT'ZJw ҲP^6&K2ed `utηw6/eA@O6z&Az.n^!ۺ]_ۡe?J>r|q='zw17V{bΝ isXYI*JD@kW(hA*Tڇ (Jnֵ(IupqS!nQ|rTL^۾F* q)mFQM[>ۂOWs/F[;{)af6'7SZ_4{-gF}^ɭ9ϝݍAqAjR58,@ jٿj;п"+( )g.Iu0$Te}ǘVRv4h';1"2Iy(x^N0ƞdB Ϝ: r-Ŵe%T)&] 6!ǷGNk '&qc">`F wœ aa<%vi45yksߺ۷}zSip*$$d.?^9)z)֘?tCf=V#gV\]b)mU&,B6.*VԂxu/숐tQoih4CjTYg4gO%E/Kۻ(/ǯMfvR۾~#`]3tNOo{}Dب2Ҵ]1S9Rů5DVv Oe~6jtx;5Q{w 1ՠq:\܂/lS~@{ ocLJ}p=z O yhOum\ىūCҎF}a}ǷMں\iXynj_@?puJ͵o`"ɖU1Eʲ@IDAT}֑}v_6MO[\Φq.>ShZiqĸ6 m?w>W}hɜ=u*0=[Sp2tx-,X l٘/ ϲd% ~\d\(_rr\ӼgsNq0h@nc-M X<8ĸ[?۪IݕJD"`() %!%ۿNBH+Lpّ k~ ݬ-SžL\ !uycW3ֿ?.d}pAL46cXlXdLX#;X=wA'Ϲ4ht`w8ڄ3_z6UJD&_'(HҖZE-Ǣd~2a`Ⱦ_=0фҲ8soXsk~xh%X}+fee|ڶo2/5팇EwrS(Ի7<_|v2rm_f7 h R.NrJ&͹=oNec^8>q}FbÙ\S@Hi3b?Y}Y^0 )fwk6݊X۞]WqԮxzz^eNh+h$^8_A!!rc}iqW))JIM5a;-~j18SԞ(v5#lt IHˡ쭇VY97/g#U/7 a/d1Vf#g*!6*a [7c>M0/{%R &{'@*CNј0>'_ڏn~bCH޺d?] G\2;ؒ 8&}:u c:$nXxb :-^╩6vӑw|VM>GgC C,y;LO 9v[H[:R-FSzc:'uLfR,[Kt b!] ƍ_ߘ}$IrY:;k,x٥T;O]6UOdV`jF1Խ.:(_DXB n `'}ՙ Ksc"! LG5w0CZm"B:e}G*b2"Q$Qoؼ5);NH#VBv E rHԻڭQcEB(82@8a4_n[,nW'킇a Zg {H -tG,6^t*EQj_3~,qjpΊ=gWƘ5,^SπEw֢Tŵqۮ_/lS5mtuB*yHŋS+qN-\7] M/_R&-JKr"jd91!~mK0 ^`UuvC#s?a) *jBs2mpڄrŒ,j  K1US-I:vkҮ&>1mE7ZhzY )2Jš{T9/=_.ӿ%傓FO3@a:d`un!F\0h 6 P>KL;`f9pvbs%gCt=xr$rjp&8]o`n?#V =q{د+Nt3rȦ ]LOmM46na&gsҌǑmQ5l_XI?l k@FE9JK/^ AosEoդ]/BGapD9[ğ4ǻe[:; ϑt kxJ iڱgw6Z5V7+u3T?l3=rlC^`ƞu!l>!7/ '>.PH4p"|%$BC sX)@e#5@_Ve'KΝB@&A( nLQ߭AQa,eŻyێ-DkCAO~H[ nw=iӥBFGF yfqC38X~Tۿyn!']GY|[wpɉ},.EkmܲAfb5!տIVM !,p+iUf*V#&wWL42 ( J<XA@ Dv')<g 2E"@V#X*P~:uj˖-Vdpԩ.\4c%=+ɗUᐊ"UOA*>yW!'2xBŒRfo9kݺ꫼<^N"(<i,1clY/5 @MGN:~ajj?v=O2eժU*EPMߠ_bh!+'+@E\W0P 5Br- .LLL|碣 /DP֠5@#6mk _A@A@z*66vӦM#G_+44D/S,+77NR/  P.Ь-m۾qqq}wˎ+W-Ls" T,"DEEo޼Y#UP} ݻ}Ư-K~j LiiiEZO?Ah PxHM5xsqQyk𳩦9sfڵϟ8pk50-$D`5/S rٳgoܸ0M;#|AIC^p (<1_9*ŪTORx{{W\"j٫WjY;G_,^wɒ%p;q"xZvrY PH T #мysoNII;vӧ\A Y߬Y[o_>w._СCٳTF{Vќ2 %#@'9.y;8i$֯/fےA@{xbٷoW=dɃ0IFFF@v-@͛_5O˛B{{@A@(_jĉkH^{&`R:Tɥ YȥO3g&Z"  Pn//W!E@kC ׄm͘1ϯ&TX=j?^EȬ \)pnq"5@#)xo>p7哱EuӧCE|A;Z,EljXcGhF2mڴYfUT"Q@'<;v I2TA*DCHEB*WAk$*' P6D,NҫRJURrWϽ+   5@!4kΝ"<>?Y `O].eO2W݋g899ݽaÆ7 PPe}]"5@!v|dQ W$dͽ{ѵz]?[>q9~xZZ5Ν;ѣO>}mԨiA@H @ CװEׄ-\udXD߱c_|+`?i߾A'մiӚ'Y T'F2yds!2  1xaI۵kW<=zmI֯_vիWGRÇ\$M4=`ohoOVC˒Qv.A@"ڽ{wLyH9qĚ5kVZrJ8 (N2x`(++^n˲V"8݈Nٞ?:"[uC|sw [?ߚ1rH}jgSAfLͷoɝ]<]L-ˌîq ZZYʬ#Y#j3Ż>&ijA cǎ45/^tHOOB!Yl|_'IxE{IB^uMZZ/?jWfl'‘u0k';XTe <ጽWnb,xkC#ΤuItǷWs,Ϙ1?w|Yϩ^zxoئcG>Teѩ+Łrs! rr-v x66 7m_{*G6$릣knjӺF @5"@ܲ,,^sJ2$)))~-_~eԨQF#3gΌ/(#bθ8eavXFW~+;>ږnn(w-iR_ZvS4tmiHh@1.˭S׀p.M~3}Z} _93F3ʬFn o nv5LWfo.>X߭~~-$?l#+;ARH盙i&3뫺՟T_>իGf-j⋘S֭[?O[V-;͓ 6?e{ۻi ycQ E}3nց,]v  ?3.F.iYlXϵS'gOV;<<߯_}v>7~*񔳇F~ZG3޺BAzR\2;N;ϛ}62u`_gFac(L@O[.tT8s$4rozɴM='+gsOFMU&~Z&:GQՇQ~b z6ڔ[[Sه٣bVzkB'F6 y}&8i-K5Gcm޳y ͷhGیh> AЎ&[Ѭ wm}ӎM[ j/H_c!׆:2k8-lRa>!xl3鞟tKº-I 7l;{DKxKF);D7O"Gub= X6?gg XڔU(T[Kޒ|IiVu57ռqDニv;i ,i 4&w|q JMaQaS7،X*=hrL.pxׅ/;v}`sq7M..Es\= g_61\o rbex \˖ΎQ'Y aK9 9Q,X /05 5:4(cލ}NELo3 Ou"ayύGgmX1c7?o>4t׊%PO;Om Tn1c%$H xboc{<åK#>qlձJ!KZyu\bArĄ } 3@W\QX:>(uKj@WnwjEg߬O3 M5={:. ?AIx[O[yc`˨vh [4? d'fϻo[>ayoOSw2esQpL@ p߶{n&~5s} _l79oEsxsD@}[z^~m~7ti**8YphɡO-jҾ Pk~Svj Iޚ|7x#&iǷ;h6SrhѿKZQjҮIIPܚukp5<=io7w b' d{ ]ϔCΞ>}!fc90) :zX\ϣJ)7|q#KQR#T Y0]O \H^P9N>M"lbHMH\\~_f (#5[D^gjviפ?{tn^IRwՈV_ݨ6b3Z|x/a.=|B dTeȨ/ ]4+=Z׌3VO;).DW7g_G{x`>'Gh9fCTe6 L 7#e#/!s&}"n8WpDˁ%M j|׀ǣ?/Umnh(z?V!AarjbSQnQ1C{`X8 V1X3=1&|>Aq^xc<2tSt0AC0mi/HӑD;{\ UA4jSKPmU1]3t^Xo_ϭG,6~;IM#B7Ȫ#mF9P@׀>_,yz :7<+=5!\KaM~4O}X‹] 6@+ayf*̛iyxkPi6^j ݛun'0GSlH Ppz۶m+|P.]|嗏xH$iQ{{vl 37A @4I؎ (txO}KXܹ3?@ 5`3Q<^oŌH#+XNYxFIP㒐ֆoZnJ.-78KRl@117fSMe`qFMF @kVUO0?,<`ᔘ/Fӱ+~:^)Sw!! *j% zA!۴nzΝ;ٔ hhkX㈟/}i*Gy@Z'hZa9 d(0&NJ8z]s16DLEl{ IyLq3{>`h:DZ XB8cF+/6,1z>GVWl %Y*j+_[w/jvC1("XwGV>az5ަݛ*3A4[|o2cK<|TKv$ُ%mYl* }R2ϟ1Cj9%fbh rS @yGUO`/oԺ5Ĩ)O6C,eAl a6!Cv^~bm@Gf[mٕ"QL X$X"Mb'(=e8t""Rw.bK]=kA:j]]MWbµ/_N:A# BGJ0иmc"@0a@B ՎԩmtUe) KƬ3 BV~tʗW;SXpʂdMDlC;])A@A0ɓ'd>>p4ZOV6 #Xbv/{h@|]y{i >h!jjgS6` cݚzҍ`1!+XlY* jOԔ{אе:d"|a#PU|IͦW74 GbET7Tv.T4T7\ gpBqeG{:EM^G0L{ n! C.]$΢CI ]Mm&b"vkUTmmr–N5?E-3X2g!; x7I8_ĊV:t7ӂJ]w^Âǣv2&5$'Ц$Brr(:'Uk( y}?7 uÙ.Z`ێ6fimn'M}|ҷ8zeU+- tÕǽ=LM.CȠ%<11{QL넍k~+Hrk X/qPr5khԊBCȸT+jUmEP^ ?ghټ(JΨ%x~j[mn&٬[TQ#b8u(6.1ߍQLޭNA;?!SyQK "Cxs0h+hˀs32Z,"ԉx4e?§/.&͵(EyE+>xH 3A_I&13J"<%|{nWo5k<*H N5؞ nwL[8<ǒcYRIP`Y⇤ŊK,p6H a3 'c/ izw%Au  A,z N"M|E/>HRl9IS1@l\Äp:״jQ,e{Nɯ!i?%-A2ae;)@'xIT'h~4B0j" 68^W}VR٬ے$U֫7(tڈd֤TJJtuI_Wx0٨V'?7*m^4t~S4 {[kI~:;?#Wj o\M%I&4oCntSLBDi.udЕ[D[y\Swջ*=;tu./]/GE<!0&MAc |i1!_Ut9l|*|ۡ`+]m?AN Rp^?o57qHq| 4 G%{ $DK< B })i<@xQ?Et'[#eT/H[#V,*7xѷoߥKVq .F륲fUNMZiO;)sT /~tٍ?hٮデQ4ącK%܀3IU XD| 䁬1,iDKئ甥S !X-!8 yO HHnXQ5)% XM{ VNd)DDOalÀ+@TTI( p,,O?8pkN;V)JKT|II^^MH@)fK=|&/rV.>TO\#%h₈ І^-WI$`C FCũp Y9.tRqXԓOoVU #f c!Ĭ  p5h Px(c s纸QWsˉ'[96,A6!4=s2Ju7͏_M4ۛLod5ñaP 2xb㭗uv7`.wvK,Wp݁C&}3)h#Q'5dhiM=COFKkcrEzzzVqJ\#x} !d)Y!2eX7xn|+A0fk-RW` %Y)&]6GWئ XlZ 5_Ib¶zp)  ph Pxc(3f]+╔4{쯿#IHH]wEzpp q  %"5@czū TU 'yO?t\\܆  6sLСC|cIނ @ A@4jZ4iӦM>ݡ(ʉZ|Ijjw}GԩS7StA@j֌䠫4e,A(ʁtL"kAQ!B  5kȃre!\kĮv_ /F],LA@ԬP;w.P%!HY  5 K)  8CqfA@A@1N}*Ո"A@A@*+FreyIgdd\% 7oqk%<޽{ktJDJe _ z2$IU \/w/;>}zʕԳgOooo띪"OQ F@kCzO#@>\???}+A@^r] !!![oݴi̙3ڰe٣ Z4Ʃ\aeڃ@WٯTBe˖k֬yy0Qz:U jH#5@#6muA@œ¢ܢ+(CjA~{޼y+V֭۶m۪e2i5" `5/Sx RT$wAj5\\߹GsWv,Ξ>qtrtr|Fx t[.}_OgNXנq }.)T8cǎݾ}-ү_?%| B- dmعOj%rs=X`]oX%sЮqƅم6îi#Q1Mi{Җ>lY@SIb>gVARhѢ>ZO??jժ/aÆ:Zƫs~wU?(<. ]/;\R菢sSsG7{ >'wNݙz`vLjo'xlxwe7|0E-|bbbx2 (Ze@-' iڱi&fDެgl~b{6FyOb|B}P67\^ ^'O0}в .Z|d_[wuursR=ѳw|E6 n'倖m\?Nߛ^ϩ^"Gԭ_ :Zv]~ܵkwWmpsn͜8nvqrz.)Vz[$9&#Swyg̾Rf]t Э°N?kJh%` 1-B[:fg]SYᲕ1!Bby{ : Orb*Pʂ@ 0f̘;vhzjYA"PP - U޹{?<')pܚॣ~&LvMPd=H@hBA_ jqu"kCzG2#+|5 eS=MZMDMgϰ?fǎow,~j1D˷Z9O,8EO,Ju>Ⱦ-ǢYt7*#.#xppM` ZP|N:_@`YZ::z^8aeb0SX]a =C\(pd*N\D }q($PgR&,MtMP P/!!fm5"#'UbdjA@p` }ekv@[zjZaѩ${-Aσ9ܢcjx_R6ێ_u.Mc?dLlB_CtuЕU筟mE(efL<<:"t}Qیlcc8 P 1jci(e!̻o67w&t ޳g m>dpHkABTt}!Ƈ߹ޣV0Z>|zV[ueaZ[/aOzM{JAׯ[oEFFN:TZƍU*+UYFbǏ_1M* 1Q$Wi{ϝdOppV 4)S Z/WIMYw?=[DW$>a"VP$h'%ðW,+PHC5lfeD4 SnCs05c { x4Hەzy ^e|Mg *fO*-g: M}8D+SE&4Nb"™7wMoq!|= +ә B@Q.9z%#?-) !D@Qr{h5I~5yH&A0XvO1 ,:E2DBnJ./.1)p7vWL eA@d$~Y$**2J, @"YP|׮zuIr[uesl둩<MNt;'o|w#.U$rGN)u" FR !d|b٫N/w&>*KU2A?΂τ C!LLln>n#mkݛwڝõHDt&SV.%"xVflж&dnf}-9 TQ5D;GL$ ѰWNEƚD_e' BV_<0r ENvmd)&L̞=N%˨ DEEyyyfrݭ֊SDw,`oL ;Mt YGT|Y*'~ 'JZ {4 'FTz! X68souRU "6FX}Z}qy4,X RɣaGDc ,4iWԯLEɩjGߝO.\U`X+ ̏61%PZrW ٠qWW_YQ2eC7r!5@S/nҹ";wK<"KYkmxwЕ, S"iM˼jϘY8NU;)\"šʘKLE舮.?mm !}T+/n9#VeHSSAK>t/GЮq?#G~-YI[R^2+P$_AJBX b-<ѿ!TQvTgt3riz3Ջ2 |I۶m9NrV2QOũFcUӑ} >&l 8OyōA𱅤(iv)6y3!r+ SD l8}ƐJ /A:syO?ݶm[pp]wuwqcw#W2Y"N:a/>gA܄ڌhÛu|&j?:FXai)[SUb{Q20j{Șc:P֤uEHh" b W=b|D}t>P;͋3$kv2y283ԹsokQ;f8$4B9;έnZIrL2GOݑ>k7?d߇b@,PX ,HIl3=HK3+h8~K&!qY8||$cte"ԯ3y)\xfi91KnA0˚)SN񭇷 H2ꖠAND?F"r+ԄMC*{:#SÂKzcK}PR55""hգ?ڌ)HϙDү3tD棾x6f$(k?ҡ흡y69skU2X2Q2Cw>\yKEBxUY4d=JFyd:flT&(R5nHS9@GS]c=<Ї/2ء|Mg@  LWʐ.L=n`cXv6Qv B&22I g3W/WNdX=tA2`ehWƢE!0c ??cpmM#9O]6oތy_~yРArÊh;*пqC:0WDTrhQUSRSnr.KN>*1%eⳤ4ӠXF*I7;AlϗþMʘSt1$f A)jqQfSPt/d˝]z! y-ݥ(͑jFEbpSFZmQ߭G I'$C۔(OAd2MM:TA J& ;f<9VM ɵWēcUM%Զh~h!ӦM+,,5k=,N  Pis\yK8hJnݺޡCnS$as RW"5(ʻY./AvM< ,gOgsvXZN?Nnb!JQ瀞!k5bUYgAfXד wN| ,\˰W4o|{u:a9NCr,״eA{!AlG{фVCZWFR:ת[k㶷y9M'*bQzuWD P?~|e۷wqa!W zK,9(Uz:'h'[?pHߓJ_ߑGbB &<+!,;ډTZ9lK!B;ȴMC'd:E&|H[Gt8=5曍psCpd06Moq!|= +#T` Py>D^jƔ@ !$΄C!ϷSYĬAiQZO8 Oef!4HIxĘJHEr3*[ ‡n?[6Y 7k udWWW>Cl Cd ^ޣu P}U"I.ylv|"\?s=2O؉tnĥZ]© N FR !d|b٫N/w&>*KU2A?΂τ C!č`f?`xs>fx=}s{S3v$1.fәLYmd#3;*Q3RK.HaYt Q`>j(l2Dk#Dt`AIʰu3+*C@kP-fix1Ve+^T([xVR'"cΜ9D 8뇍(9jbܱU2% #Y(Br[&=#QX3R^!Le-.,qFۘD9'+m?<\ҵ6ިD^%" ¶uhQXBp+ n%MZy+SF9t HbAqHIIoŪ W!ix!ҥ CKl%@Ti?M:ô2/:3f;LeU :.%-l,ixx[`ťHH)--k ۔RH!-@"bDw,%Kg?9fggfgy1#D#S~[Ӗ9`?AK6U<iS"@My I_RR _u$7|-Ƭ#=D6h{%Lς|Z~ Y3 Jijc>T.D@ QIFk!Df]v} DȖ1 d;2Fl`%r~!bH\˗/GD;lA,^~[Y9O M D"@4nݺuiiZVTTd+%%e͚5Ҵa& RRb^f= ?uDو4 G {_ś͈t,Bn 4!ȦM:lZtc". !›n"@`` Hņ D@ ;0Νѡ*iIR`w$HA"@ D BBB ~ Hqqav܉pK 룮D5Hi 5C Df V $66W+V@^,7j!pTzFL$D"@\ S!ĝ8:b??}¦KaN!D@e)ܼhBD"@Ȗ-[ ggg|_}եK׬Y}7| ٤I~;w@`K"/*ӡ"@  Lga9Bz+WAWDDe\~|K>jԨ#G"8dtQhQ C`OD D" \# l( dhB @gn;cǎ7]ơK@vn!n#Cr'3bWmD" S1"}i1zUV[/^<k֬;99t4 KIg`aaˤ"@Tbcc!HW17 8$$@&8N:a„7oAIH#֭C `cE!D)v(C*7mJ5D@NF?rrbK"@GTC)K"8`*P /G|8p) / Kr%@;@E`w9o5n*5U"@ D!0Ȉ߻wܹs˫R<AYYc;uʩ<WCߍ2?F}>~QuM 5Cƻ8 b|r(';C-1muBQظ’VK|&Xua9 ’ |ذBH--*4``!Т@g!W.]E6T4gjjp]ȿhÎO$@;@| (v(Ї,[z֭ >o DE#"y_JV_F_.FGC:ikj,񍰫fF4N?|52z3&j\5s}̘99ŷҚmثL*vLKτ==S%Zo e(ѼiD"@ZF)2\mDrJ+b6~6z:hW4E_3ֽB0z|A"VZ^^W/&uzJy,z^h]PEXX*>UY+ͣR=z.Z DŴLmOyZ )zFT"~<=v(UU!QY4B0Pb@0*a&A/05f>gf|!%50c;R" AZC 00pϞ=I}  OfQ=-߹=Fwtee.r2+;\Dpzk nE]=9Z泎]B߲Z y?'Th4f!^p_}=٘NnC Ԯ~i/J"@@;'6-Z"@  `Cy'먆ZF;=qHajWUcsUU-3=:s{ "OzEâA=b~.h o5(n-8umPv_ 8+2T" 9&D@H1P"@[ GzyI##1ܚ%Cr1Ypai 9W՜+mncm ㆮ츐m0:n"XvA`Os\+"REeQ9!pT4$ Dgb"eɄ>PHΖ(Ozh!EJ#@;@{J"2{|%7M"@ DhFԽ-.-oQA D"`w$<#O\`aa39"@ DȇJDQ- D" ?c0v(Ї,[z֭ "@ D@E PEr,K XVMMrLfI D" E(z+Q8z>@ D", !Tp{Qђ D"@`w DO;W$xj$1dYo#L z:-)Wշ~ҡ *$~ta .Cʭ-Fܾ--wnEGtjO D"TAsfrU}c䔲 n/26-3+ٲUv D{yydcf,* k5Gli\G{e,_,t36p6O/j Ԟ"@ D@ pTRƥb?}Qߣ,rgu/f YUG7@:iqQN73#[=fP;y}ESiYl-\ ^5u=̛򊺛kiFuso0z,UVWgF*( ){#qhB*1bTʎ#W⻏>o5h>,+t1 5M{BI*)VyE6z0 DO>nF)<tHʻlfatY!gϞ6m2LXxyEƆPjk1Lh1dP_K7wnݒsl_FNtgi;cÝ@ңw5"u}r@R:ֽx}]N7F%@[]Yt[PkÝ"GV^ˬ)*E#?(.|:(4K&=Bt1䏸e}aoOtTZ1T&Dȏ6UoCCCHHEmFt %PAy vHy<%k &6xjV7R19VK'A>Ev+VdWG[\{zzíY8>̥Y〶JW|FCG9=:9﩯t-lm>َ{AȟFu=e j`-\rcnK倀 D6J"+RWG[C`lˤE)8+V⋽{?'O"@Ȳ\k&Lk%K-Zū]]qdY6+0#`׮ީhm<5b}B Ik\'cYmf)rd= N6:m^vܙAɍ(~ޔGEl辰ܥMfѼcȡ$T6@|NFFSNef"agRFYńh_;I2LRdne=[^^{WBr ˈĮ&_ 3M萬j-Lf;k D@vdɒS{_f3dws ( @ ?[l4mc(kgg Nł"aC]}_иw[?uq-㴥tpϩ84srg[a`^FEP,ɍ֤aiRz'$V]ߐVVQ۠(g!WI-,-=1إ1lnhM?c矺c5T&m'`ll7n>&,t,xi *+DRV ӳ&Cic[ ,#NeO8yuO66mR !g:<{GÏ[#r81|ۓNmo->].|1dֹ[F-օ׈,E6fR)z.)E{g ]c%ezXR%"vҡ'WV,;SmgCz<WdWT Q-(}<3IymI# jFD@&/_~ͼio@5P Fƒ7 UЀX,D":6[@###(M(*WX|ϓ(qxwNFgNH s51|wסրۭ=1Ik|{me0%E5R.fT 0؎T`mPEO_MJS\OW'{_fjsL+=v8!-9h T .[/.a£ajl8%v/Pqsȭ#sT'7!~ڜ?CEOA˽x+?E##ik1c[]MmAx"JmyƱb q :E`  ЧO7|C6ZLcgCq"ߢ\GBlX!Dٳ[e;y<)vvUsxC`ǀ1E} F8ئ9xS_j('KiY~e#6ٟ¢{Zu37.ZB ` xGW8,E?}@SO^x0EgO`x3hωɏ|0{L ڃu"{YA9:dIt8$n }XK+Ga>^9`oB]}3gt$\;^Bǎm\/׻ 3܁O#$;ZOw_vzrXv(F#m5Id@HJϫlKe" [x=tcذa}h4"@T}YF8alcg7#tpl.0j.}28ֻ76y˜S]Lx1*$LWҋBź?|;fV_wOlz‾k06ރP_)O:PwFу޼xXb:"qelOgtJdN7>~T~ѱ0-Y:`JW49.L|m:2jν< g/r-K.@xW:Βp 2|9ꟸQD <=ȀcZ]iYavl/3cX%2&d썎&!&/ !9a"i~7zT D[:e!JxΊP.79[f 3fwjh x1L;9O \Nf{пb>1 >BwKS˳;ul6'!<ʰ°x|k둳A9ӏ\)xŒ%^7# . nZI$,@~~\$ ͥW{x@F8>bncxa#RBR句܎"@P@|:ʔ߾}8`  M5 HYPDNE9=% _YW~^ɿ߿_^QW0AmH2ƙ.::Qx?W>s V\m5U?i/oݜmqHeUBl@,#E}c#>ǒa%K@!aps' ՕG/5 I Q=6/H3pg*p,#/nH60f[ J0xi *c] "u2];, D(v(˪ȲDk*;{sAKOKE#vwސ%`ge`b 5Ȳ^osV/o4C~ևE_I߄޻Ocmg ;& 8u Pn[Lpq0j dK}{յ;ئk! jwBzw 1-M<јEBcaI*.9e\94a9\=L܂.xvv%撋F8>)bo49`DoE!@i#4&"@ZMvFG[M ` TWWoݺ#RG" G>}:F>rH+v81%oW,͸#bdֳ3Ѓ[9 1'2 G::ڌkhTV#t)"";\˘9:A; ̹(֋Đ'0q'É;9=5yK+!ن悇#&[/~ed5K?#(*e+#8TC,F`i+v G|$I%āEx\4;>)7-$ݟjZ}tJLwUd=fŝ!zaOق" u"aaC n6(z/nhHs4AҴ6Bqvs $"t7Bh( BO:9VH20v)b¿xN ![FEpWCXxU_/A&Yq#ij-Lf;V\KR?>e@QeѣG᧎H8y՛ibCbh!zy)D^YISh *> `w65, jgo"Ǒ\ CD _0MBo!6bHl7#t^9pP:QHV>r=!8.9>Ofy̙" !*4u $=?8$%@O7e!4E>$j e#.mZ ?}EwiĊ@ld;6I{SɏN=|t.%Ó[I!nIJ7},LO|E OAB'Jf [P !uC= Ux}=Mm@3`{u]&<؍tD%IHzK` 駟ڵkɒ%˗/(dĈrRv- /ȷE ;BWoED"kNH s51|wסh -F3@IDAT[k{d4lz+z{! k o.sxXnmP}:-- IHHȑ#]]]?dUZ8<"=zTV^<`𘉇D ec 6[DC4S /|p5D[k-sI,E"ޗLG#Oa={h 1dk q$!Y ʏ ^9`@$&m33:Y qK)<݅`m#g;/pr[B=9c,;{#DcP'ґi=/h;8*}8"@* Ȇ ֭[7|pB4d8<F.v3{M6en5\jHB`\Z=gȾ+BRR#G3>HK}2 Dq($ "&9ppHw~@r1㒊K2vG柺yCHA8dZkߍj(;hv(C] 0:ԫР=s W =/{N#v&PVV(:sEuu5CrM}}3f@ kڼys;ϳ-CPh?`0&o: Čy' QuuO1pb:^Nf{пbb}/A|ě;=NR'`N FEvlc%0Bla|𜂵7 ?F m_+P(nn&FO@\xP.XݼB[2kĽ` =f8R;&}+}=>~]v #w5jd%B2rK_&)> ȩ}54;~ÿ-aƃ۳Nx5t1AENB1>$ohMte{b"㊫kJ y侨olXR:d ($n@=D5ź"9`0ߣ-iCBЀ?xXPǦ[@Fjz lk}{!2@ |#<7Z7Bc뵳AWӳ+*d򣗽 ovz}LkjD*hD" D ++ fW o+V(7Т-炖 (%6M[" G.:!Kj˘:x)xwml笘y_6 /Z qDB$Rz>?91N$F#0WQ;a 50ߥ`Xd0j dK}{յ;ئk! jwBzw 1-M<јBcaI*.{IDBF׃"9ir7ox\$ wCPG/1\ .7іmO[gB2҆mJTcpޅn4a%kJ5O,o=Q^4g7ǹsb̙կƑ{Yq3 EpȬs)3/y\P`u/v܎H8`szh3ZSY`V O"+R|/ڹȵY!a%˜|(ahzJ {  N+<{jy%fWTACҬ5<|0E(JYH9PϑƔ@ !%" 'Ӭ"ӰD!MPzݻxذa;w/Amڙ3E|S$ɖq>PzdZv:j۫iaM+8@3 z̊;1 BÞ (Dv_nE@aÆp|#{S9~7t B k4G9@2qTbiS"@$I5#D(%///W%+| '}hP1W}ȽA @E$8g;v̄8wh */Y!g͚’(W.{c_̻ynծNuZN6ݟxL[i/,9A~$:,ligP>OAu!-tSM@C؇N"@j9j.LC\4ExYt JE/\{`O"Kʻkjjl*K+Xq>!x9?T[ˆ:[K&=hfʝ_b!lJxbDԋl̊+y\ egkoE-(fjxzdYx)׸0O&"a",Ԭwn (3!3 nEUο?1l: 7h`ny56>(m,ni\^A xx@A3~U hGi 4@ܞ@} D(FG!K,Qd{xC|ZOC: ;;q}#ijW!B0ODdcx=4r`˟}yiY=M\ \GuognH˚َ-qZ0%œF~P\=M[fhѐqz?)]rL#n`4L*pIQKPӼ DDBZ0RL>^F\!ktZlfH[\[5KA=`%+3%𒛣˥uivǧ㎫WݾǶm89mӴ0َjj Z]tdsF{VM%7n#!Y4C!7SI !0..Ie $?unvi)))֭/Y!m/vv| 1RG|ٽsgC=}M'٘; =Tg;z (ag{6OiaKiZ:sjk|pre"&o tdszԠƼrȲe˪nݪe"@ D] !r4kjHؑs%9U50ق[/1Aefd+]Tµ,uɪCd5.C'fD"@vuA8wDΜ9s˖-RޜMD|bic9L)l,F򩸑%UhBt^h-j,vJWIQgG&D"@ >;w@+%ES|=sZ1 D" g0A^dŊ WΫቀTr?A D"@$իWQذ/}{Ea~~VO DprrXrwPEHkcw[@@m))CCC˒4 D"r>DZ`ˆVwoM;@R,,Q[ܙ:"@ !Ptn$i3Du\yroWn=:rH]_g:_'%Y u|a&6=.W{Zֹ3]Q( xTĴL`1֣(2"/Le JSI =2ˡ"@P:"wu%UYY֢kc {b_~[˭D˫K&NO;h3jAgg>GǏt}L|z&2QƟܗvEFeMAy˅awWak,@lٲ[*hD@ DEE]xQ'CD}}}cccKKK{{{s4+"@Rhvۧ(=G'-c,)F#O/gn SVSW.pߺ ixxGVCݸBYbiNQ6f -9wt>#9L }+`Yȳt %g;v ;fRL ]hlllhhEFiӳgϞ߿?j) D# y?~,mfwBLG=۩ii֕=ς`C7d#O?Hrr?DJe᧮Աo4iґ#GTubʲN8믿g N*..G6X[[wDe%Fξ+K5؍_|.[BuN=4[[T6oY²&?yOiR›*PTV x^9@بϬW](@&)Swż6ILLuVPP,6oތJ///??#GʪO'D( ƚ/XYs̾Z][;A}U)g9U3菿aXWwffC-aVRY ;@| >u D&O~ v?scƌqܹs֭_ʕD??D@&́ŤLFA@ΕK&>J Js6r㩜u::EMQ!{jK"íFCAՈpLg0CHbDQES%D)p IKK{ gT].]ڲe d#Fq'@ԶUyX A_~k%n#6mG7 |ya+݊n(6!V٥7Wa𰺊 #WQc4{^QIb;YݺT+Qc:Ϛc`ԗk}P-en잟J ,9)q#] Bnd6puv,Oy1n o?k4["@qfffGlL?I ?~F 7nĉ}jOT!IdRhjjZZUua~c,=pCuwLx>t-,_}2F+>\띕n6OWmj5'Wff֕LАgFlnӫ]z1;U/0n*^_YYǍ}s:PQ\bڳ7S/1~4MLН+8Θ;,44s#yMҍ<<'0PYM hD׷ ̴pWjj*lfM},vPů]Xwu?4!3{֣|׮RZҵd)KIigN2IAj|zo^"d!.>l 1_eC/ec‹ĈP]i1{ 55`'t8$1U5EEe~Wƒ}{+}6#0xo{凱~+KKc䐄p349 mOd<Pn +ͩI}u4@twGbc!pCGmS$9DM{> ޜ i=r&}= oRUUUyy9lQ$==?}6B`YBB֭ >tF Qɇ'OmRyw  d |Ci$; [eNmֽGŗ^[tw@A 4C~`;x7?\ c6aw;+/C)?~H9:} U֮Yޏ~._d䐼pD+r?Glݩg-BSoc6k6ZF}0o!A*Ky-Qc%wg$%}JEVVcmM/ /@K?g21iQ{jP neV\PS"@ڟ8.YK.ЇKBH𧫡wB@e Qo(x5% %}! FUSO/=pew߇T欄93Pmjj=ppL̜W N5tt`o+Bހtmլ7 SD!::iiE'<Зmby$gdY-zT # :}e>uCP/"@zaH*:Z<Fǻ(%ϟcv2SgvG'am{F܂Xagg ^3 Ov7!x%IqYaP`L1Պq7|W:P!N͜ YbD!;{)o1epS-hzԷ(aR8z[ߟzƦUDGsjuCWT\J]X'aڗ>d\q !!>"3 m;lT(Єߍ),7b,@w{GBW3]MZSva0=$'fߺ\"B#Hs oȏ+McjC`w$(3R!=*Ѳ8+>;oV"/I[Ѐ.%`s"ǰoUXhv]YlHS^wBؚlXg15ѿ(y<|(+|ymYS+#aE([̼O:u:t&o8{;TOg߬GrNmY){GTfguRWíͤ,焆@2Y|A`w$(C'`PnA`'V ŻX͂%ظ_]}b"DΞPdoq~.,us8]8Ϟ W> Y8"H'VbWx#l [>9=BzF>+W 4,s^@Uc;xC%?\w9IڒbL${=?RE<1Ulp}aD_Pn͝>,o؂/”7ϗ"&݈~Pv4C^Sؑ!GF/ [r>|v>O0FF;n\cdm\qmϸ78L d#W##P9J2i' -%}^%"ɀ)0#;Ǯg '"aZs?@DZ32,? {d! Q#SOO1 4ZYzཀྵf~|ƕKxQj֭Gf2|u1 *RԜpHD@q X;}S3@U0pK({DSOsgk^cnv敄O5/}/T0b+]f+t1 GC /lܾ@=$ӐаkT*|}mS1[.L\ ٳgKnJWPR[1;OVwU]_YeX*`DJFyt,"j9$W}ij-*]n@;-|zWǕ7^ǻLa#c@Dd1#ad@ÛWdCOн{wM+/ zmRvP0UB@ fU/ -kU"G"ቸ%([kGJGU>a؎BVR .KJАU˖8Ҝ!2;&e~ Dm%+q'M f4J_cØ]{`8; "oTkhWQJ;lϢ؋Kp{9bbb2~x^/6Ćԉ!'0ٺn7]N7ֲw:R6tJ`wBҬ( `vٸr*͚Ib`w}H%@"aŜ.J% ~dd:O콘+ss]s 6LA mut;Oms^DAA~#@'Ⱦ@Y^ 4F~'\ldn=6^¶++VLJ=k벴4 *F ##㯿ڵkW||ᄏ`ggg[f' |ZԥE!!UPc$@;@| (v(C z[[l!"qȘlHM&טH;r4l|陱S""7< Z^ڦ+ܑXW^#1v*Umm>x%"@;@%zX7UQg4+:zfJ;Qg{<H w3S"ROt&\"S3!4TU9k~Õ0h:쵐j ^Gjyk9ПP}D.VCF^~NM!U۲S'co:88}7xܤcjle(L~C~ϯ)*8w9G̈́ҫkihWdfxxuLv4-R 1"bONϏ2 sq}\ f.C* ܿ_U'D@Vi %v;'Y(8D@OaLj)ηrVLJJVƹy?*oѢE3g$,)2ٳ@@WK8u$ fQ"@__;v+}Ϟ=zW-d׮]b2L"@!hD"y={655>dĈnnn֭jVC  " "@@;pppXzu\\D1cƬ_y G{ AaJt "@h$g  DH"E!{%KïIO׈ D@e)۴iD"{-l!CTӒ $p`P"@eQ@ Dȑe. M D"@H$BD"@ Dȑ!rKC"@ D" BD@t2h_xvl{݈ D<[Hy7۽Feee.]իk+Z TgA DU%@r>YZW?:xJrcǎ-Z(>>}QY4 D6 6DԩS###---}}}li"@ D@ ψfHTӵkזhJKKUʹB"jJkU#tC:<ݗ9$ 6ZpuVXXS(0;g_My9^ZQ_6 P۽eM+KM}eew_>1Ə:6aL 5_CC{⚉ɇ|[U$D@ R?><P5SL;w.l~G(HTmU$}yYC춛.NMK:jj(W旧5m5YY7]QŹf}j n\d1|NroVgc[]XX[>神ޝGU}'`H4,5aD6E *n,)PB-"bucEDE_ AEa[@GgfL.wȝ;<<ΙsΜ9uܳ ꙧ{]\f-Wօe#BT8$Df#Zcֈ#xիWk*Tpmo:Ne]y8 ]wG?/W]^m+`4oS*5heև ԼU+杌7)  ݱVlٲ?hZ9ZfvlߚU{t6uqK/ꥵ~؞ܟW>ӤgKkөCLD׭ǥ}?N_܍=˗19_0^{|㟟9o͟+=7+Hߊrou}hm39jk\h^S H7-Í?efgܝFWQ *Jf;ܹ]}n=`!'@rCFnݺiիkԩSå3,[nԓUqu%k۶ZӁO?ɜ'7ٷj}Ϟ<9;>~b+[RhTDTTR.|'jVn7ٳʶI*X%$Z%h|`b_'>woL1..4̈́ҳxm9|pÿֹ[E%e֫ߗ26>tNU_}E!BZyY!=|4 ԪUk͚5#G|jZ^綮%j1Ok *5l{G0uM4yxa oTDzQbk&s~YKLf :ߒu ~BӇLc.+~UBěnwOeg~C"8S!ZhĉlҥKPpE 7<3&{u Dו7z- DF6aግ;u3iѭ_(fh)yƄtޝl~r.c"͛o֨QFf0-{Y<@>"ܥ ho)=-#QZ7ߢw/呈'CB~ дip&} iӧFg՗תirYZa"^{"ff㉇)W=&DiChъM'h݅T[Bڢߋ$)]OiyeКVu ?Ǐռn k^~1g6k󫝵v}POiοԅirBW!;v@A8Z۽um˙³zSϜK.T4|bW+_a|3.鹎} >H}&v9?d~SL970uWz~pM\i6կ;&srמBɧZ=1D֠<'[Ks_ul.K떱ҝO<߽^IP??E7x?R%Z:m4#/i:{wtZIDAT=xtiZxnګ*.^Ewe'E(8.rk8K/.DDz<ƌ39GN9TRNc`^qe㸧zʯD:z'^B&Tq&'G{\yoftA<=0*?.TDG. )]oIUXJU)f+Q3XZ_ya"@&M7]t8 1ecbtf6 |Խ˗*i8>bHFs߲_ 7wVn_jmHOZ5Tu=ׯlժ:ۗv'&).-7MzVK]4Ю:KTu)%% !;vbt Խh!Ђb{[;D\Y~C-K=7h/TIyw/]Mu{ީd|sb5v׷|6uK-*7j|yRrւKJR~Y(:PƆ55oci#^͜^_#`3]3nݢ%aof:5-]*wϒk{T}5L݋?>d~k퓿WYmٹoX~2߽xDTTR:1`'_9OǍ=w^jrM 큣8w/YDGю"_ӇҵJkt¯~:qBj^t>ZbLs\}hj]+JIj:AhBΜ9vҥvǏo۶5k\H.(СU0 ճ`:@ xZEkH`Eƍm4F@qt|rhNA3ߙzoӷ[>ɮzli |nq-Dn걥ST_e!@@( R- 3l0[D[/Ln:M[i#B{'@<[jvwC[/<ƙ^:N[qCB|CB  Y8$T  >!!aqqqԩS'&&Ɩڨ p~39.*:K!--MM5k] -ws0xb;),`\[FuZ[K+ܱev >nQC@@C}@@[8nQ[གk>(F[ F 8zqV' >ĉB<_n=_R*@֑_}N5_[/|~0  OTFK%W!4nRm@@@ @Ȇ   0/6J* @\\-5uB-/1s)~ ?GfrHhs< pud闯C|MHq@LL- ͵*A Ld6"'x -5#  ."  @CgKWcO]Ԃ pLEFֳS-g+S&==] Y["qz&qHuO>N@( nP3(í/C?FH-P[`dGn={% .u#  ?*!  @0L]C ..ΎjuB-/1s)~ ?GfrHhs< pud闯C|MHq@LL- ͵*A Ld6"'x -5#  ."  @CgKWcO]Ԃ pLEFֳS-g+S&==] Y["qz&qHuO>N@( nP3(í/C?FH-P[`dGn={% .u#  ?*!  @0L]C ..ΎjuB-/1s)~ ?GfrHhs< pud闯C|MHq@LL- ͵*A Ld6"'x -5#  ."  @CgKWcO]Ԃ pLEFֳS-g+S&==] Y["qz&qHuO>N@( nP3(í/C?FH-P[`dGn={% .u#  ?S!a۷o׹NZgL5gg̘x  P^8@gK͎y 6my$^0uB D绮St@@-GC@@!ְd/F;@[@Q[/Gݍ}f^G54h uzuz@i p땦>za<:ej8ö3۾qJQ[p wSߙѤ/  qHhD@@M!nM  @h8J@@$:u7fsyz@ p땞=za=.$&+0h >}z9ɀ6 pوIU.9,~YNJ>O[>KjBz%"i  T8ĥK@@pq!  R,B@@Swд:wp^2"mzQR%+y+Z  [֑_  8W8ĹcC@@pq[G~!  \ -C@@!nY  s@Op pIENDB`actor-framework-0.16.3/doc/png/broker.png000066400000000000000000001054511341123343400202330ustar00rootroot00000000000000PNG  IHDRmhsRGB pHYs.#.#x?viTXtXML:com.adobe.xmp 5 2 1 2@IDATxyՔ?p2Fh4"[b-,h%ƒD!ZXJQH !c1c|ޟ}u={9W/HD HW[/w&@"$ p!X&zeVD Yvq<1S"/)Ń/5lj"%oS4R^Kijmgjgʼn@"3GN) Oެ<HD B :$@"LdS7+OD HH6s@J} _Xۿ(5v\;/Xo95dF)OyOOWM.K_[뮻JWbny[^PO '?_E׿75yM{ 7D`SU:ߚL{OIMk~cCz;/}%A5yW\_/tZ׺Vrkvͮ__oS'U{_̙g__4![ }*3{>%}cM6yӞ?Ϋ__>Ϡ?ƿկ=>}e#Ie/>PJ)O}ꤓNzJ}nzsCY-2hNp"coL4?kvՏY7^b."as!bIN.wINVdëy1X?vQ]?_%59眃D~PxM7-N97Om!?/pz׻7vt7a)%xWD`H61m0nmn;(<׾&C9Oa祝s~}%/yϱ+A=qk._Pz>=묳!wE7X73&i_<M㘴ͤՠ1's1v#XiFT"oDv=1Z`M:wUom|L&B q@[ o~o}ݨ1iӘE2["Љ+ҧzwdqΦWlw;mثӖ|K"$ .r"Wa<؛}VҬd.ap &3N3O"$sm50D+XѡV<9x]@"jL{N֕D HD@&"Skfhdx lx/#>#gc8j[|a"pd9 |#/'%>?w=R '>"xIm[e!yH$ﳟl;|ŀ4?O WKy:)Gq_'zg^A@FҶ/hd/~1[|Hf[=+Z7YcߵSw֧;-ndCк /6?я.IxG3e5q嘧( |szUT=J$_svn+{Lt$ΝdE.SXb|>WB[YCu-X\pg&)yV ˿QGu{ݫ /}> 6N2U\}4~;SIg}9SϕOh`Q/Rhӌv ڜ/m jSJ*ȟ~Q`Ju] (.+<>u|; ߘ FoC=[0~ي QT걞a{eRO CxG@`줙UlX^4Mj VӄF R}8dٙY6D_."3D҉M!H8~[1ĉ!t?!xQحgKTyl0?W="IOzRIBMַusŲ7Ui:MozzK~tK-l頖EÙgi} *M[ǕTJc&C9w`~ QcȢ/#@RR4&S(4O:$S= zK(HL>6JR:جhMIvL0'K;d,]6)Mr=FHs:+]Zy \NI :i632E&mF-5-wG0*@`IHE@'u:ܙvfԆF:tfS:Ѩ16b1{sԹbTӌu"k)4-Ȁ$ҨA956ouuw\2>R2 $"Ղð)gupq5wqUWdVa1,㤌Ψ_[ag iT^{<'ϐ#gJ$;Dqn\*i/ ҹ(3'wX?IB5S8[PVHyG3ɉaX0ŧV[̡DGWR5&%=Gr<ިˏ8~&W$oʲ;NC կ.i|F֎'A0uQFoqFUl})toKjd[#l|9S:Ѩ4jXҘ=('u\du:gG>֡3% h F,{wah%QXDA#A 6xu_wӸ'S}\rJyWD[c)]lDf58e֥J$Nd]URZ!ԁ1F!rFH5rlD}Gk)`{ƴ7Sj(:I=eZp'TR`΀X1Sv4ʝUH;OH}y9"iFEf ܹҕ;QbfƧ!O;<,AkTy)K (,1nhXIو5t `dX^;D k%\q[2z׻:r/ww'F%HzK~^C5~x^OJHjtw#TnLjGR픁N]NkIގ?f ] k1c>ndD}h|V5 +@a6_-Fa\R62K]mΘ!$L5K@`%&-`=m| %B=kBI VQ+>-5;w0{EN3(SKw`L]e|^iT_Ҭٮ#%:;EX;˱:&5"WBoW6WsCEQjXKx80&=Wge(މdk eeɬY('=7 a7j_w7 ztvN1}j}e3F`0UX5hZ 'ReX&nA@ z0˨3ذcF3l>nddVCl3cj%׌9>y{ϼtT֡YB,2iHFf#@+Y03$+gAßbްRY9 /+'l8q$m1wμn xCV*He"0)nap>gI: $u/"G!J fHr'@"4ddG'#/,5)^xamr|YE,j&a 3 t?'D HIc K( NW co˵lM q ;2"`~n) Sņu+{p?k}o?|Nqw7 vwqJf*ӰNxeՈaڅI]G/s1XI+Zc2>nQ -P`u.pW- rL߱D_,7vΕ6F<<92f)z+ü D[N>£D/̉?ߔOU0sY\nqJp(0B QbF*̅Wq*u sŐ/f6]ܦk?_{l&2Ǒ8OT2;Fw)cfD`42uS:=)ε҅*퀊Nw~Jd#xbmGu%!0xüH0zЀ7 #'CβuJf-2cY@`&<,OMMLʮtmQPEt܊w{JЖ^mSWq:P9 6-@tKJ wn]bRGNڝN@N.;_'Ԉ$e:Vgca NS|NDJY0c"0@X<0M5o䊹: c{s19ɁYX%=+ݹyI 6-qsi lϮ#:ޡk''U <auJ K1 ww1#u@uڄhFK};$Qix1szҰcm$F`Ի- Cgz"zzM?]P47NR9S*Ƀ'i`{g L95v% @YD$c j}lm+ 7lBwґ$@" R) Vh()b"z1^łtd6cj7FR+v{Q,STGy"0ۖ,|k/˫o Oߥl*3ȩFuX:|6%=ؒw[*_@.X/aXBL [G?K s~QƭVgҒ#qZ酰: !Sd{;S^wUb̽1_:}yf'>ҳId8gړbXi8͝K϶s[G{t>qb$7GǙo|}Reudru𐽮: !S~{.wc)}L L9d׾v+UmJ+dӍIZE 9rS{5sm"1ȕk΅|45oi.[]jf2@.j.p)cN #H#a)P܏ |TWFwU!j.xz0isbUbN!1f vLg6sNj(47pQȆV8j5uKm;{*Tj }KJqb)᪙7K@%f f3C_n+=}KhvpumiX{C35eIb 7æ#КYxk|_|q`cn8ŕYdQY4Zidx|k^cUoK6[_!RcuTI\Un7[O !3zcg<߶sB3}-;g5"ۏ=(Ή-:*83'~xU3 s_ӴzIa`׹TqhhTհl<[ƃj$ tBHD L@a2KF2K$)-z|nB8̖slx A'RƂhV-5KavZiS|! Ý~pí 84xV9흗"%p1QRmș<]ÒsU0TZI:7jN;{P*#Gcy5H޸(1_,Ȁ10>t( QG 1 ʣz<Š)_tdR|d`?u!aoԮm]蔳E֏eZW3}EmekT8K + 4̝w>?t ȭ&p@lj$نqA4-2%iع|pg¹AUCΉ;ię9HZ-(Ҝ < IFwfA:3lke%>ߎQCt}_J;@L ƒHfD}uKʽak7lj%"=6@;e D-oyKpbfLɸx)^˜Hif_2k׊CXCDpqhd;r7f/{KgsNa=x .*c'&I:wك9Eq(8D_Npx,SJ~{qpĴJA']ahJŌ8ǧeG(@AB]3o샮|)jC#cl^ɼ~HZ:`ލ=v%#c0ōΐpFW Z^PL0Uz-L :T2>VA<쪤h }<)"{w KUƯ" 4Jn-IcjnUJmKx80& ]}=X)a uG c`탮$`q@B{,E9uÝ4+Ѡaf;\4j>Klxf+@,cS(m6}L(sx%Y[^,,8:a|8p5h ~y6.igҭiwL6f<}sgQC^|͗WGcBG -xӟN'OJOud@"$ɆɴD HD`$*YFX(v㳏fuɆD7g#WO>oq"\g%c"9XY ,Yh`K6"=x9Ws\ūD}/g&<# ؗ{ &xu2;# iɆWƬdPfjgL {L>2>O9Y?xXYʲĆW~KIpF2cڅ[Ic"j䅥Uzwan+}~upL_Ie`x$f|؎gmdҏ{m^@.#Tsؾ;s9!2t5bY(̄ޭnuIWt1i 3su0io喵/ (~4&WY<+fA@:.-"ht }<tYظ`$K)/=8@s&%+@J+iV!0=?8 )V< EN4"ۇF'}'+&_}D`x[>>dGtJYViA1oy]lO:OySYq;է>e>tzWqY]Ji`4Ɲ5DIi_r#;P T+mcvT4 .Yd)t+m$=qzQM"@nl(FX51OɌE/½m-UlЏop8LkC}_=g8*/<EN4J:ЉF'Juf: 2Fq-QfW诹PcAJ6L7wK.m&]?mbn=Wx;̭=w}wE/| q%NJtY-pv:È#HT\gpIA gm<ʞɝE4`]Nx e҆.Dj8Is_ E17JwwW-4i p%FӮӤ`k1ٻ)#O9Nv㥙Wj3Պ /t\hwvdF|=ܓ?{P$\mh-tLE E]Oo<~k_[iŀxpY$Iz뭱"IEqgK}@ 'Ȱ%Sk>q6t:ѓzc<1'x8 rۮIewN4"i4: [V=غZ3əg9YºTBJJULI64BjҐ@)(oKDW:pvo܏൭>Ì6G06yw3ử-?Հ:E_,61 dC=>w~;q.@km hB͝E&ru`|KFqVjq^aqNUvŴΌ}NwӖ@ƞ_D YlIlwLp(I8\ar#3OO5t׉e>h<nY[:O O]gm=PuRyA`.ٰ-ҕ EfmrxuͼeNRt-;V$"N"T%A3E"}Fj>&)mq!7r-$n2iklM֟$Ӟϊ-=GW<hm I@"$ 0gl8;,ĝkkgĆ]eil M⸆N͘5c8 Df`NqX`>OlK~o땝:m0ә-#g exTγKD$a^򗣇ȳh[fR_W\f#qn~\N͛f\D "SG`NJcì`2Ͼ/?2i`򂧣6 R.=gxs*䩧z>ate[1^N9#vޛ"0O0 xcDYzsӗ!Wp[:F]0HrߴӷWgu1NXHo*'mm$jsTbJ  )1E25^KW&8QQf*w:îJx{_ȑ}4E"c}> dRyJöIj_2ec'.5b85O)2@1ƴW $aY[5 o*aQ<ICF`kN=f1 |}AސG'clỷS򙵬aJfo4eja[>6z5q,u:lu#m]fwy^;q WK}`ęHʘ6\1p)WD#|C1L )6Ocb}Msז xgpk}pA1@8Eϧ,37cƿųv۠Z"cq' o9q'}^pf5F/wYȾ́|br_:< '#F[6 ~"ڛĹ%܏ֺI7L/&mu!G,l5&]36ی 1\9=H8QO"` w:k ^ &hmI^ǹ]ޗoWI_f*7MVW,GvuJ5y:ݴ]_g8XW%Vlcɋ1U >xΆ Np"gdVh\<2Zɼ0\;sTa'JyY.?Qѯ}xE4PB,mD6+ζoHޗdvf>0x >7(}>e63$?hq(2ɘa TN6jYC0hXl`IxyW> n %B>7 v\@?RhӖюR6QQ*עvک1y:}ʪCg4;:i[nciN: vN4d#89\ha&>>FDFRx?m2&X=#CQ-gF4X8XY9)=rN42،_"M6Ddg5y-d d根^x뭷i wѦ_2    p',^溍3N|_ӚwAXg2ˣq5o}[zի8:[g}va)3pqq5crƿU8D|wE z*wY%P%->vm݈Exo'tܙy"peR@IDAT6A}c۠B`x[>UzXw4dNyeO.*68۵:P3AG 1 on'|r>$:;D(K9M} ^`_<mzU6zb {ly/hqst߉5wTXF5/yK~c@<Ffۙ'&~׿k6c2,0) /pDuLk_?W28ባO'*׽u;SD` neGp2/ w"`Ց:U Ȳ5`S#F%y9YUdD0Ff߯E-SnpA3 ;%>n[2O::y1p͍lq"\9Cp9묳JH-K&"8cv'@,9ӶBu[: ذ >^:{+QF_%G-Zg}@7ZJ6B@j ƃEcO7fuoDF~Č7dL/r&k#7ۘd|!lx+M-vsIɆ稳D`!й%F!7ۘd̼ lx^z*L"k8(/:&É lx^z*L"s8ֲ>`V0"@G a X\XG>2ܾ7E/zpLMfd35IX"\KD`H6<}&k>[ne' Gzd, lxF:"H!>я7m *i#lx( L\I[9.dËяيD`7sKx{ʹ0lh"0$5%<-k$@"7э~_uY:@Jdj"WUhluIR< /,$@",d/& #𲗽, Mp$iW"l8B", ?}k ضlb!lx3[$W'?ɉD"0$nJ"D`\<̭i;|C >ߜ$S@`w=yg\j9M߬r{+h֗$D`2r8^;HD XA YU"$@"0Ɇ'+s'@"$+@3JD H&C dxeD }^z'>IZF Zl{"r!W\q_lբ lxQz2ۑ$@"0$NKD HdËғَD H9D vZ$@"($^v$@"!ɆӒD HEA d#HD`H6<$'@", Ɇ'@"$s@9$9HD`QH6(=HD C14'ɉ !^8C-:)?O5|7twߝ#k J6<}-X~fuJznZ;3M5gE#$hg{!A{6kND HF lx@$@"Ld6kND HF lx@$@"Ld6kND HF lx@$@"Ld6kND HF lx@$@"Ld6kND HF lx@$@"Ld6kND HF lx@$@"Ld6kND HF lx@$@"Ld6kND HF lx@,}sg}2+#𶷽9%~I=ْD =?R2nɆGɉW[_|w]zjRl"p/r-٤v6lT%nzG׺ֵLRgq{DFࠃ:5OOuD>7Wz/~F|@ 8,Fvu{]B;餓_ט%C9眳^{QJ .Ę=bgюI3}sQI"@NwSկnF|F 0>,[EOff%031IV"$Z@ Zlc"$"lxF;&JD X $^ mLD Q֌v̔:SOY^|#fj,Qփ<2xw=&+91/ P_~qx6yv>9Ղ5I r4n >KD HdËڳٮD H9@ tR$@"$^Ԟv%@"yDk:)I >h[_ve<,q3|e.D._wjlԧ>u1H6M[U^җ'?c= 7yQG_UU5/c=lxCp>o? :\Dܺ# /bMɆSIWU7hv6M-o~?O>8O=wO7QzԻs=WGqӛS>xp sWտy3ggN;M=2l۟ɟ $K@c>췿N;(}xm3t޶dK:"ϣ_ |3l: Il_~oQ(r}ַ}k?]!~>s9Gz5Y(Yx&& ׿ۿL !Z׺ӟT/vmM7MD%-bxC; c7э:׾6Ro|׽~PYf׿u+l t?\̟y$G?J ѕgz1nሔAh7:IrBf vj]OyS$hcÑ6g683_u{ݥ^o|?{ x_}~}{w .aӄD˿~;tȯOӥnV%0@җWR{M4GFIzh]0ÉBw}-X<՛o9՘$=_I աy ^p!\qwqA#=-oyK'?IǞtI?. ܻo~ Q|COS*Ik3lxmmnJg}(Ĝj6#Z2R±k1do}yGҘ{owTzV>򑏨y.gE6P٬( SkCX(,U0Rg04"HܰFf3Cgf.]Mc0ْ c$בcu>vo#~ e]9bc:rs֖[nYLX~锉2fNTgpl]c6Jd^Ap俒4܎RI]t;G|~9SgjUT:o~ŋh>3}57u}o;Crv}l_WY!CF+UզYUvfęGN2]H6<_5ujk?e>KF||Ҽԏs9-o{~1 >1vNCJٲ/_ioB@3K{뛳Я -'> aj2uM>~5߃j51s/dc<.@Ǎ$DZ<9u0K,w&̄KCft+U6_c8Wp .4-.oG}4\pxċg1 E/ג,>2|5X)_ {Yc9330;%I3fV,3 ?qnZVPhT:tS}_V>-O,JdtG N?ZPfm|JY)l>T"O;oL8o&$Y5 ivu6.3#dܽd?8H1 ka֝4nUry^ߊu3:^+^P0A)l/ԛRDJ2$C;~dL4D47}{:㬝 윳HH: x-i#6IF]e&[jР`'sʆI{70m  ( *4˗ȑjE/2Cx]g$QR- (uJpو$2kooYpT ߩ%Bj^) kDG !~8\l&3#1Oy`r_DK=ۇii|iTT@5,D2d91 5;uчXgfFjF'Mz E߉pM%/U"LZQ{)ysAN-.Z"x_}+5,;Gffi`W Q0Yr=ܐj؁yVeQ}դx۫v+@; vsZi_}6~jIZ׆fڙ'ٙsK(_bHY4y y)C}za,AIT}ylܭSmԍ\bvuW :`@mKilϑGKSב=3سYn-"~G;bQzYZSm ּ1o ˉ;i(O>; |i! 7NZ:oh)g?2Uja+em:='&|!xنFYSK;mj5ju:-#Zee;VC0zLL֕.s E9 79LK:$a{щ'9K3)q` Ӯ%Swyg@o8.d=온;d.5ft⬁Wx%`"Z*}̖p5zxbRrcՆuv>jgJm~.~%p'}p+GWi2GP7JjY&q0?ΡzH euV|:a;Ǚ(Qc7zTSIcLWpd|\欒=E%EJ.n DK]MtLڈ|y9+5DWIbN8SQ ޼S`6-N9W-[ 1LixL2[,d@qm7eA?b҈D"47/cЗ>iS5xc׼hD=؇F-~HC0dC}= pS7Ƥbi3sfdi6ɗ_֦(cJR `'/qGprM *#lx_ӯkLFH4D H\HD HD`]!lx]!] 4c1c8#D&@<߸D T}x8/,8Wxa觹ab`%yǺcRS]JA,#P)>PW7|seR}]&JLho{|G}4,Wn:0+#o:ܨ3V#:K5 qa(7l1s <%L +Up=4#@Зf.3 qӗ9;߶q>}gmˉụ60cb'#5/9]6߉[7Cg!QIȾ2KULf-;ǔ+g}6jD+j߫lCp\%\RhƇ4L.v7ڶc`;:]Jd} 8Ww:T4a&O~h{JQ-v[L~F lQ#'"~!cOiz3d`J@R"1P ?6e\X ԝ%FClTB,ȌM$ͬvh%wj.dF pFҰ+i 0{aR)̮:sl2S#Ҙ者^"xeDUUew`a,Igo Cl\3uqnM@6Df( 28G pELq95Uevʜ~j5 @*JZB-jAr~Å"bf71=Enhj#<28~XVd׌ȹ,;JӘ&֡-sP8Pg'8X4 {ԭ2'\G.u|#[!Z"5!$}4-:qv(EsZЎ4ƨ.=cZ @ɇctdk;HVTV%hȈ(qN^Q*ĆK*3ݲ Q\pV;uq'ן7sQYn9%:8e͘XMl@߰3, ͒+7,E1^݊do zR.>Qy%Ó]@iNă>#a~+@`Ýh.af\crq>-q;s{}W$} `c8FBi w(6vvL]p̚"k3{kߛ7Ll61[|b ˔YNl#`gs+"ml#OGoY@cviZGfa ut9DCELnй|my5Ug Cv"6o.YyW9|EH?z1PnN,pe]r,N 4;֤a(.q9L߶ѻ:&f㿓9v\JU ;%`VƬ.6) ~muE>;]Fg TD:[SV#>]„ɖ0f#&DF^\ʦ ʴT¢I%jd h)GNH";لTtZ# XIP1ja$耎|Irz<_z~{ҍA8d<ބD`:Et֡nK_RjvP4%ۺm~tNgt" r36rgÝ5e̕q~:O .M&v5E4EjP?.#v.ެ4^FALñ77*xj_28 ;kf=QRf^(wJ 1X,63Q'v~6o;>4OIs_ F~_>aŋo ΔA,ݖi%EЬσNqڡ:aщhNk( JLٰ12:k裭"6ˉ @-܋[.dO )9y(-j:ggILjBOE*#K2Kml[oMXxϤ`5XZP1Kv5؋idXz|&][ϑC1Zzf٣k^)r{!kf<)=Ý%@"0 g"Bug6&Hi bl&eQ3eҝ% #En@yIiᚾ J6(;&E }OXO+nCX Q"7G<֜lx{m̸@wȽ+HOU[ˮN#,tMٻ:5G 1\5~O=W;XdЎ]Q1ఈ βH@c"%`}˯3kH6\0@{F\T`9鱶%T0Fj`)BV$bLPB_HR7H0Xl27;wj ~mFvAd l}]sIe8,iA; 3Ae?[f/:(8 $#>!Kun#&sneH묳jgL"Lׅ)`.x32g@pAgK(ְ̭޺]x7/wKI81|yX>x]4,Lh.ޅk-5c"0=SD7꧔v=m$oߗ4mq/zqEi\NrO\dp2\0NM/]"}a> H1֧=Jrl@ /)NB7!nFHF>zcs!9#Օđ.,섗u{̾v0ⱰaBh H!ׅ۰,9&[̂ Oyv)[搅07{E$y 6DcR0׹<=x<]:wkN\9h3׽n>̑$F.ܮ,/1YrL%CSۯn8NLYu"u60yb / ,5u3\^f̩5_$W%o$.w&eD6\9HGʛu;Y8‰U3P3<>Ɇ*s&KATUkחRŢI(']IhGc*W̬*h"@qǶ6%̈́|y6Rչu ܐhFgtyS.r|e,.OY} qrv;0WƋp WEcm1_}GlVLY$% @FFԸӝtk_|W\pda:se\a'/%,b6=œ1CZ?_n%\mdCqM֪$CdL' Ox`ks'"$Hi*'?ɳGsQXL{l7pڦndWq-BD[pՠ]hzwLxrf94w<_)7u a8.Hr&HR[g-ˠ|oVϊpWQEK ].RGnz7~ɜD`#J5>o/я~>OtcWj3ѹ<8O; [x+ϓ%@~#oTR?u /Ӄ:knN!7mlE[)Q!Sd]<3B8w/ĘkO{C!_;=C, E~C1SH0H*y4oZCC*d ձT-oy -1NVQVabqI&ыSB.1Tē^|x^I)/}KK͏}c=bưqK1ЬfI2&-; ]MN&M7ݴFjW?.[ a5P,ԉ֞ڏ!U0o'c`dzB#ɠ n(v^$kJ_}=~ΫMҡRhJq$>zNJn,<"m0ש\z饍ȉg\ 5m%^~p0ˉ^'84.?X0rox:t7,(\JvZ{/ˮ^jm~c9#ڳaUsÓ1VM†kكjOQmR1h& ;@:eCt5 AJ*Guѹ386l3h8tr #/WxT6}hwpblשm_ѯ6F"P3M>IDau%iVUFm`"x4x}We(Wi13gk'e]Bj޴K!OXQ$Zs@԰ALdIĴuJb;%"2K OƤml3uӟt1Zn+%8jp^,(km^zֳN=Tlqg5s+w:NEE$i+Yudl\ 's KC+^NG[4뮻j~y];+_S6˦,wU@vƀj1vkWa: mq~ 4͢EA%X#p1R.ʡl$-alpzyKGǟ`̊:Pa䩘0 FAP ] "Dbu0YAE1`\85\ƹwCuuթSjtUSĕ/˪g^^) KgnrH&MV\ ƪ)nʦEC)ZכrӤYHd& նmsdL&),ìAt?yl޻1tּ\8&޺ICfz 0.)p$ >4`ӊO2di,k'y`Uϩ+Kc\3v.}eoW_D2orOIeji:7%\Mu!-ᚬᴥhq$pdeRv|63 G1V>DīgLZK <;wL3r-<Ȑwښ)UZ]7g"!޺ḏ|6,mea(r~d')oRހh%_QO)멺:*9Mg-W%#) @ )6a9b]O[ϕeYS[@\/@B劀Kr)_KZfV\"j" `?Ѝ .((cE` mjb@ iǩ df̓Wtb,]LN3e4Wn S &W>S@! `SFGEG+:C W! ,p(:cg EDЩ+)mNl/M. ?6aH&@Ou<H@H[SH5@\(}:ϾNѣP,K}@ē&Mrs @ gL>N@Y5Mq"f\ 7M _zUt4.&\B `c.|(\;6 E f8:@ '\{b/r 01p >\{D#P)}1ZD+|m>Id=}uwU/ gpP%&o߾|.!x ̆eCޣ` ~'l37\^&@ ˘h2|&PHoWLȁ| adBڴi:r۶m*0bJlҕ% /̰ 9JO8KNKdBH҉$ @sM4IDAT 0i8@@(/^H-93&ROE3g͉іoy2!@"%3|ϝ;e?nݺW^n~71eڅ Ȓ>{Ǐ|٪U˗'tr[1 @ 3+WԩӇ޼ypwyƌ۩Sn߾lٲG^~}ѢEjՊj6 4:t-JƍG 1m?^t¨QƍY Zׯ?lذ#FR$$… A DZZQW7u}Ν.],^H/ @ -?W6lXF %6mZzu%\*fׯ tK߃sx+GNq4u +Z*UhϸB *dm={Yf*.TTISKinԨI6n"6ol$i"5Ny 1&s9I{J׫W֭[7Z(x7o4v+ӧUQ~U vӭƠ:9 m6=|[n7n49s޽{w ۷ot钊i}(={>rw]fnŮe_vҥK}Ǐ 6 @rҒҺukYb%:tPN%6WN/e}%Sgtڵkʯ_._*f+.3޹s7t¶nڣG[4'.LZj&_@@\Ia8 6]^Yaִ55Z`ݻUnO̸L>}82I@'&Z[źڵkk~i5k*y%W136 v[ɑ֣Gl|Rn]>rlw5yd9[=#n-Sx9m $H hrG[r޲e{YRthV9W֞'O  8q6͢ 8p ZJ}wڵ3 (?Z[}6mڴcǎѣGk7O>^Z+ۚ_S[uGJZZ:tH H+oA `\}C~rVX!!Z>} YjSZA:ij5PܠAh޼skenO)S7]jԊ޽{&mdٳϟ?봢E*Kt˩eZvtH$ DDQ&§9 -+b}[ k3jժ %r_Ϛ5KQm4iVνȮ2jy89b$cNh gxްlN03X$߻wO46e9Nq9@R-+0Djfeb] vtP @va9WE(VuI=5@@)`{*v.ȁ P5t a@@`s!@a@@`s!@a@@`s!@h"tlxd{z[ W& CpkzጐE(fùg$E,%lҁ[ 0:B0Ö,݂ 0 a,%t` f8  `)̰K @ 0a%t K `-X@a (# XJ3l-@pF !@RaKnA@`0J@ [:t @3QBG@fҁ[ à:;1@goKof @ MH'O&TB `#f6*}  dPl$qT f8$ `#̰J @ $0!(Ԅ  `mU@!!@& HVr8\ (1SN rv#n;@q T(..[ d{ÙL@@B[#;IENDB`actor-framework-0.16.3/doc/png/client_handshake.png000066400000000000000000006522741341123343400222450ustar00rootroot00000000000000PNG  IHDR )sRGB pHYs.#.#x?viTXtXML:com.adobe.xmp 5 2 1 2@IDATxxTq B z/ R&{kv~bB: IH=fٔ ?>Μ93\Ⱦh4u       Ld#30        |        iN0/#       |        iN0/#       |        iN0/#       |        iN0/#       |        iN0/#       }ز󙇍׻C&Fw1;-@@@@@@@@l4MNҺUc5n[T       f%P{'Tqy1|#[fPьׅYƾ]{ddG!       @fqU[cķKllm]C͜+q{섪2       R ]yԻԠ #=?=-9dWW/8zBJb@@@@@@@8g'k)ذK{y/|8wZNjcc#k@@@@@@@@j#Q͸wmN}ʹи{d@@@@@@@,Q VS/S        `q敝 R/Eb@@@@@@@8{sqn= L)/-5/9I6p-~MInRHOKM '%ŵ7H =ucfLTxMI[`[&oݮT"       P.;!ExjOX5&YdmEgjl0m]򴬑ٟ/mQ$]Q^Rp|2'#ZOڳ]wwockvT0U       L>8;O]lĹ1;gbYAQnnuw.;b%C{xrԄGL0o}Kt;x]ʅ1i        k&M*q󱝓,j68\YzE .^.ۋޝ?녙8`MFnh{֕˿,k<귙~Ȣp@|cmSn؉oF"@@@@@@@@EvBnrR?B>zG=(ȱ-L($ġ hK7df:n)ˋڴV^ tsF۹xi~N eSh4VSGkM$\MX5gEO?qu4b@@@@@@@jɳmz5K R󒓲jJ6m;dWjrN()ȏGkn(Β+]ee-&N嫟aqmw;EBګFo4tD        `&N-w&"-`/єhk.^a ;Kzc bc? |Boj߷إiq~d'H@@@@@@@@#oK ?~^=5zoWm,ΖE5:3#dM[8B6K[b&K{v"       D{AFO[2s̮me=֓r#7E5޾0+SִQzJ#-땖6-ۃ儩WafF≣H       @-0xՄiei秥$':sk02'!n̈́nԻA1w=Kք^) W-8#dAݲGh nY~{/@@@@@@@0yv{PSzeEžJ9UMɎ'gMuIHh6rU˴bcœWWYq~~Ħk:?Am`|,J =)ۻ5M9V .E96ёs@@@@@@@0yvB6aU$>zlG~㴞rNGobDY0Yfʝ2h vw)bwno{Y4>Eߘ       X-cYAZ)⠡#{ʋkVX:7mѰW_Roleq^\B@@@@@@@*.;A({԰W?ɝ.VEcZ>U6-R>/.(ظF^m=W"(ʪD] ,t3j@@@@@@@&:Ao>>mQSR~A,ȫ25^Xmck1;6d_kYGw9jtحq#[ @@@@@@@0qJ7;A lȈ 6_Bf'\\\Р[/ϖeS}/Kqb@@@@@@@(KOvs l9밡ڎu3qwS{9Ș@@@@@@@ cvFI:}ڼml=[V>jPcskAF} ӮTᒝopw«B +KB       @-05chٹ!l7ȫpvCa\}} 2ңnEo\>ցuJJ 4       V)`v gNuYq)wJqCavvղ{d\Ij#!#/59] @@@@@@@%敝pnɏ+n)ݛ48s, Z>Uߠ$tKڢWR+mlld@j׽A&"aWȼ9y)IAI3dL       @C}-8791g'ĥ M9{:uZ}cNNQt-oljT;''Y,+piwY{5>䀦VOFϗX=nh:mwӯ՝99{_{6ƿ`w,        P{l4>k5_Zj]Wh}~^4f +~򠞝 &m=׭g#c|ĆkA ɿ WF"rB>vX] >7)O9&vNwڟ65       3Nsr&ty #ث6~Yj{9֔^pszΏh|+6J7ϚzZ= 5Ell,[4tn=e@@@@@@@j nmZN69SĄ\]v&]q3݈EK{tれҩ ǭJjBi.j@@@@@@@jNpԬAמ'9lǏ_) }ܩvutjs}zU'wq_:z666p]]m>L}"pMq @@@@@@@n8saQkdZM>_*4MIIfltZ1u};uuts+kFr0bÚ9W\}Dzzo>zѡ#       P{';!#:rqu4%ڇw?="       `7d +ݾ3 8       TQJ,VZt @@@@@@@@ XIvBKN^'qcY;       HkNH?2=NYօ       `.Oy        `d'Xe]        $       *@v>Yօ       `.Oy        `d'Xe]        $       *`_ŅiJJxN|\vB\NB\Afo~ jسm 4Mش-\65^̍lV%@@@@@@@*$3~#ۯkV\7˧-?ц[Yȫ"Ӝ=dQF6S#       @؈*z/=yaȠ_xhd>|w~ZN{# B@@@@@@@jF ܤ}\[;;#|޿ #t35;f1.ʷk~m@@@@@@@ Td?zٲwή~^鹉 .^=Ru{3h87)qllmXJMMjѣyKMQݵiҡ̉Lcϑ`&υi       T]eÎi[٢%QIaM's2#ԫh4dW666j?oVOQkJw˖-;|6mLҴiӊ@{@,WA}v@Vݐ@,WA}v@VݐTcOv >fHQNڹٽ_yǹZY:.?'Wl^}{rG_ $t?src w#5.pQY/zIlv!ȊRSDw jD}E=TE`˖-/***`Ehx4,"`XA>\Ex1jn*A }s,`m~[Q -H9{Z-4sZSnlQ?SQyXEG7jlfPQ.]*wMF"Z@|sԷc|J n7[r\#P֤6B@}P FF >x/ezp@ {]A)w~ZcdQ|\mmcSjEoNtzQ,W)ϨrTB`Æ J0@Ywe՛h @-PԸ|j@'Oݹh>5L-c>56/m@*eU_{ѷؗԋ秥f.~>/ 1UYѲ|SmQSRRRT$c٦MqA,QvQ#.奦8{yxt :»Cgk< I'ňʹ/VָIGx`W~zZnR߅b~ZŵAjRޮz 1T@~~Je%HM4 E }j\YX>5 P]Y50%n@-PԸRdjXkxzZ"q-Y>D ~WV * 򝺞mllSqtgV"a슍P       \zFLT܁=ξ}bwϲSNjOM6pK|h-Л [ ];eԮ Ro., Is@7B9deA@@@@tAFF)}@@@DrNvKjݯGry>{?@^5Do|ij>Qυ=X;1$r3?|RRXټw(HںɰN_y)m3qR v OKò.Lj-+5m1vbБvv#*y̚oMN?xU(X, @m(Ϗ޾)ɡ'SS;yj!pMMGܵ6PF@Z(x؅\=r(;!.'!N{ЭqnAܛ4k5aZ=Z’@@N 4єks5~̈́Vosr0#M3є.-'Lkr(Y4Q۹[[}rsRΝnJ,A4 /}xwN?;f,)z+wd}~ZJ0Q>1xҁ]v=yw N>sz3fncopm'kLgZtbgέܼk&7O=_zNk~O:mœ>\yտ`w,OY9)Ʉbk 31Ƭ?TAjLc  `I# s*C@[Y/0dz@u)*C>~G[,]j:bhqqRf3Iso~QwbDt꘶Cbk ~\6h>vũa+n-&~*J|9G_X De@I0;[|ndMc- HC~yvYA>u]b)BO~ؼP6#V!W @=O=NUVo]]$ĥ;E_%4k]\}d%  `)f'8yx[e㽓Y^fLѩ[O {D\\sˊ[Dnf- 2bu?pX%}BAO'^!>Nг- m/ V{v(6yg'CϾȵ -#.. {n, 8pT69Qo-8 X@Qnn'~zaK?sF@x^K:>զx;Q|6'd^ىsnƽjcb@,Hgs 33ݛ4eGtmOM^- @@K0dzķMk~bll;范g Xh-'Jwʾ]I'& }~Jw5b?\ҩ ǭ4tD{\|k ySs W-3j֟WY/N#XqFSrS֮q!XuIlyf^am~`z‘ D)luR%GB{қF⭳(&|%b@\@WNR|St†=jj$=nz1 X@Ųllmwx,ա[ۧNr`sr0) |57MiyB ևmh&YvAh&.A׽fw5䣷hJ了Qu/dmR6 $>;u#7'd+b )p~[P/W=ӹ$K9{Z @ 8 ࠛv!ŚkS5БK  Y TduG{xGn^weߟ9 IWsN^xHGFmz5i_fltZ1bN]nDpk!4֫ܓZO#j:bE,6ưĵ3g@@@6 G^J9*Zlk_(F-M^ E@,E ~9Uu7 `%bOx\2D)TeVC_J Pڄ(),Tdcg9#bNzBqlllƲuQjlWƲ OM|OO]?Tf>m'ԧƲ%.Je3P(56~3o.J|f>w޾۳.SpCcbVV1VWqX.JgU(5t1qM7RƦo.Jklt#{gm{ӠNKK8.URkԧƕ:Rcsg.J+= kX@}jj\0EX#RCRɜc??$.ݳ;sZI 5 4gP튊 sUKvʭSvߪͿu@ Ndt.; #e-]|NP=@@@Kh4.g#&|Α`y#T\@lظ;&n3q7w9FQnΑߕE@@RN'etk*v$;A F@@,T ;>nl}wNu bkvb6 X@G|N.ofD"  `d'XcI6.; =uf]Q[:{Eb@@@ڲa.nSg.i{N # P  f]r⢄Ce@,1Y$\]ɵe] `N0U@@@ġ{_{nB Se@+j^]]_Ų+gZ$99 Oz  e`Ɋgz|ᱢ zFMqvJ{dF~bc Ϝ%od@,IY?ow>4HvB܁=.֔˖"ܛ4Sk@@ ;"Oһ]rWb|QY,؈<]{@@@rfeZD" &d]wzxbYA ~R }yZ:_,G@;_~'mI@@@Ht<'Ƭ@1W6h;7mqۯ w%  `Vd'Փiw}ۀBࠡVok;nm   `bj3!C@7=ufv.^~{Ц#FnU@@8N_H:}/ߧ^8u9&7kFAwV       @ Ps @@@@@@@)@vB|@@@@@@@ ;欹       SY5       5'@vBYs'@@@@@@@j j@@@@@@@jN섚N       Njsg       Ԝ 5g͝@@@@@@@6vWlٲ'OT7vƖC```߾}K[hѣGõoѢEn,t!eM%c)hȘg%sn4cx(gTtV |x3ϳL3X=s4P9wc>8yd荝w\-_|̙YYY3       f&@v= ,+vM 5, B@@@@@@jή `ۺkN =gϞ3?t@*S\t)&T>       `9111&ѣk[0x[nϞ=:)S *ы.        dffnyyy&GR       n3\T6FbE"##;uu=      X*v7݄,Xk[0r Ξ=S^d'T|3gPI>!      LX耀"@vQiӦ/b0SLCHMx}rJP `__j6z["Y     @Yƒ@Ulҙ        @d'KD@@@@@@@ U3       +@vBD4@@@@@@@@* P%>:#       @d'KD@@@@@@@ U3       +@vBD4@@@@@@@@* P%>:#       @d'KD@@@@@@@ U3       +@vBD4@@@@@@@@* W7@"񱗲2Rtz6jQW"       `Md'Xd-7F`m[ν|#T+{6/ѩ|密OxPbE|SznmTR,-ݼgK O{ӟ,ݸk,ٽĭW =֖Rٵ|e@@0F`ݡ:-SI@@,Kz^6/Mt1-<,rw=@-N :d3hJJJuP6@jR\K:w(өW ?7'+]RAMYֳKN)CWkyٟ~_p!;Aj   EEE:EN E@@8,鑥?{WS'i)2]F]5Ζ\M/0YQa'ug8BDŽ"V,{/jj!     @%Nڍa͆'j g]SW:{znDkt:K/*A@jr|,      @ pNvd{vn9pj?~[=~hqa!@@K75Io      `d'XK ;nb xMtƁ]Ι8q?j*s衃s^E@L$3D3,     X';Xs;մ䄸)=7 mU㳫Wz ?@@@ ##C||Z_UJff6//nݺbdG}?ұ)H黈Cֈ/kr#Zn}IE^Tde{oy ھ< 5v65O'm;wr_KvvN}Ԣy/}Gj@@;w,wmJYܾ}ՖEm0x`Nӧu* עH8|K겍п~͚:ѤӖA~~~HHHttK(,,T/9((s: ###/\]ǧ߿<== ^bu"ס}:u24A@@@BN0xIѵOqo 7 [h7r7oe~A/*̏ 6𿣧?9bîe|sb:2zyϜ;G,F^8.^.xM|ycs]%58kHPkD|3ŵ~Z|L#^'niuO~кcovuk:jqO}~C25?Q J۷A-7lNVoW?D 11w81jړ6o&TןwywAepc9: @@ gϪgk'- |}̙ / >2@{=~xqWLL 6-t[I߿t@_=zhӦTVŕ _]tׯ_iU;v숍թE+H8y7ܺu A@@ ;㕽56r";I|9YjeqA~6xjޫw/FcdѬ]=8^zzSf<-gESy)V">Ft;r#*b   `t%\r~6mpKS\I\2>>6m?w֭[Kdˉ'Dnѣ ,UV/QglܸQV#  5 Zbo-g/0Dy1QH r_x R,)>YӒdK2&5AD|"S?mk\l&w l?-75A;wM|w%bg3>5Ar/9lT'nHé }baY,7'OMw4gڽ߫z[-Ϯ2RşDK6I3_i/5M+Wkȸ__5*7 @@0[!A o޼Y^k '2 l#S}W^-@J[zj85Avgamd@@I} Gt s7An"<]8@ zUzQz;gCc 赢 EEz&:$FH.fnv?Os9sdso2 Wg [\ש+vm  ѫdQ{sO5~f}Nxh_sve.=,}wn)orꈅwu,\H}H2`۬X(xO/dK,t>d{yVV=_4;g>y_  XX%--7ߴ,weQ٩Bd &"-esZ6ҡ+"HVd3;!  n `Iէ̢TLEl_6Dr<]عqU%_*5 :{0Uujq͒x͏^cPAxuPnJR(k Y_3C^4e#ckA=g!7)TӬGM +~CB^LJh:\V)NcjuS^ LR=f|&(U֝W0,丳W~Q}KQ&}\)1usӊ[--4"&҅L"RGIuTt=T+ 0(¹3{Idv;^ڱ],D }yX 1t]=H   `z-+Wk#Gjʚm0BlhԨQ2e|}}lrveM݉'j׮eoUJ*%!!! NRh* ή]4i>tӧO#rPPPzzZ[Ӏ*   {+3Ճ *_A]P>;! ״fεԥCw|'l)& K~ UMea6Y<=lÞFm_3%BXV&nX{XdrtNzk/W\iڶ|ΒT }vݣƅFW-BF^+07AٻAn}PJK)ٷ%uD~%_N=OKeuPD,W }GLNUn:7joYL')^tƆsw+юҾlX|kXJT(hvBQoqڗ^8E3k֬gy{9@@, [n-f˕Rt钬IOJVض )C}M2ڮ]*<ٯA Y!%%EL 6l׮?$9sF)ko޼~>>~ٰa.QQQ׆ .]VR D@@`g罏W/v:hX/sݳUY [P~Km%662wGu2Sg dM{IX9GMаZI~NMf]<(;sD^k$f_7 >X mO}%R;}Ò;*)ڍ۽zKje؉Kɷ j~LYPd";8򊹓g~(Jݗ?PRH"   X:wNMkӦ,I7|oi,T'22RSmۦoVf͛oY mDo%. _Nl"}+W_~UT9*/BDDDWl   ༷2/?+w}vx_V͚,-,Bb>nH㱇o3H}^"*ڠ^&f}#^Fy>~@Ӊ3We wPk_)Ie)i[߇ս)ee' %"4N r™ޔ`1/DLJEUT Liz+iUKRΑ7N/|wEhdYfTu(\V5Myy]{I @@[һ5q6h@YYP}TQPWZ8p ++K:tAff899Y0Po^4U-Zw delkF8@@pO8}Ԭo.5 .n]dO}*e`ۮ=8leϓdefhΞХWJviݩG嫔,U6-Egk1]Ր/BYY~o\ բ}C- *K$d)ˆFi"R=kt1Tk6hNvh};G޸G9ڿJ,PYD=_{6i/_+RF@@*Udz_oe!}}/9gvh 5h~ɺB|QTGWiĺM]*NЛh1Lh>;A0AlƕqgbeI]:CPP;w6VnGJqn=5)A+Tjf|amdÑZ Ԭ\J;G޸r2>-rm4eG~5   ȃy mde}v6?bH[jjɲl %(3NQ 2JvvPFF$%-[V,k6JDB;[\  8Xrj7l9b\zUj5q*L/_Ǖ~9prvBpH҃cĢ3GU0<_l6ٺZrdw%]bE#&IE/[$Tf>&bMYA3S}Zf N(-;7./xzy7MAT]8wpv4 y7!A@@ `n)e ,tbCp .!I'' $B 5jԨV<7B,G}|m26پᳱdM_j w$AvBXd|+ȷA>􊬋`e{i&5+~z̷,;8sʸ'Ϛ;*qG~- C   `(CtóYM7TqJ}LrWH 0tRmJ*ooo   qqq?uP葓Ph:q]vBfq>7n9/p)x-~ɻY9G˳mآ~̮GSge]Si- ySi>ߖΌ}lڵ$7n_vo^in|G@@&{Mqp'v֭]A͝;6,P˙ c0 Bӛwr5RE@@N*6!Im֡O`OPSgNYuꖬ`҈,_U͢R hV9N`Tp>2]E$RP9S{YiBjoYV[&緛a? F7 Ro]Z|֩c{=E~}OdM"q+VRyf|sxqϻƊ*  6.c~^(]bء p]heᐖ.]* W4ɢJ*q`ҥl4RS[SsTMI0ã@@puɓ'俣Gvtd'T̡#N8iN=,[R eB#KB!{@ӃmA n=MY# o{̝eDt|N7KrsrXSs +,;tb k#ݿs[Wr9[}!̱esЧlq+W~~lcˉ#Μx'5qyכA@@/S3;p :lakժd'q {iҤqڵk԰v7@e˖DzekV$;AF@@mm۶sNWC6<,FM6 Ǐdnf^Db:vpK!*|,/#JYޱ9YJTxOJ~5=Nг8 g*ْ@so~2<&.ճ'~`2R~KuP]܅#-T-_,}ÒرN|tւ_qʄ6iYtC{k,7]!eB"4s  yvi( .]vL{?5jH~GKHH8~ѣGϞ=k8x%d k'Hrf QQgA pcF  }2;)JF(w>CٍNLNq_)S0NؽNgs:v&k,U7mXOLὛ4n -/d'j.pD LG&*T.%(u\|}~Ӈ؃;+8ƽ:aqjd:K{4Sg?vY>(  XпRoay*o7Ӱ%@q"88X:P;iAf͚IƼy>w& J- 2$}"f!;СCnkA@{@@J@M IǏWv[Sn\ ;on.=ʆf$&FypZ=4~U֖Vf7f0r-EFco_A+U- ۴}ܴM$y?O91vMUM.w1^pt[j]s߱!cg'75DN,"YAGxO_U&bo\YHv’_/QA+yp>or;YC=H  8'NP?W*Mk**iز,~`!ʔ)ӡC]s /o3gd *hN4U;~z!I۷)(8$M6K5ȼl)~PE@@Ν+(CDDܾ`i7OǧFA8O,[sRr~hҼdمf7NkfYW&5<+K8JY)T\)ۯP7?oM-Fԇy߻m뿮\IS2  .!`0{[39sXAޮU; [{yyiF.K:evm<}{9="t% Ń 3 ˗//[_R5nX)+ٳg'%%)SAneVĩ"  6'OE4p* ~Ck[=}:s {vTRo@Om±tڹqyVfMJ߰gjr9Up=4"[l4U}>y?'k|&ʉQUk&@ѯ[z}'kL;k^|ڽ%[>Non6}gOz'pwMl[H0#[6}c-keA)dmR /NjFcF0Iwϻz@@p_j>l!zppŋlofvFN8!# >o߾L2`Ϟ=e dM\`ŃR;vTMɓ_]4q հ0w!@@0o^wohzX=д3V?7RR&+`'.5G?hգr#^QeAG[v?M*(艅k_6, M. c', *El߬ݭEiOꭩ~%ψݨqƕ nil=Wa+:CaMcyK`Mc}vs>nH߸{ p_;pK].y-[@@mfjЩS'w+ϵm3; [~G֭[PP!PF oϴdɒ})Dpwʕ+Fd- wî"  <[lٽ{x$.G _AZ3Nu=;O'my6(ĥ[uECetOٮ뻒]w5jܪl' GUn'ȊS&4/>rk[~i!?dH@RҰlVϿɋWO˖c>SkWW󵵭mѮo\ʵD?ܜYԵ>IA@@1v<>|9ooݻ9-~,NPй;FgG:뮚5kZ߭$ 8\:,Hf#""db8  C kY>jW>iիWjrؐ- :ʒ r/dIYРA'}D@@priӦY6!n317ȅ;.0\UTuM1AɎt(o].=w ڐ|BVf{l5<g͚տr^~Av- @Np@@@@@:sNɺlQ7otd'c 툫j2~VIo      D`V#->;f        lݺu׮]V.ڌ\1l\R[iqٶCzC@@@@@@&/`oڴM.휝Q!utω1+@@@@@@T?*Qᇾ7uQ#      8y 4:i/gjLvk/F       4$_@@@@@@@,pBt#gɹ8%N!;%nD@@@@@@p )Sdggbr[]\61H@@@@@@@ =Т[:DU@@@@@@@_`֭;w,<\Ч;d'8al       $0y"=qv:;-       %5mڴ"Yz~؉Nv       zsνpB-=H?E O'; o CB@@@@@@p=[m?w~ 8^K.\0##Bӭ[_;A@L`ʌV^=r$P    &`󉋋6u[DDMzsNNٍԄnݺ٬;Wܩ#fMr2F@l)쑾@@@@@\_`ԩ6#=&9I'`|rEG       .%`mLmoIvBΝm!      mviJoҧ ;,fk׮K,}D222l֩stx#GSq8@R qB#b"+     `ؾalFԁ٤I Ù{93 4h̙2wgD@@@@@@@u>|aкe8c nlVVVtt  !v"D        rͳyj Hҳi0 d#       =u0]~=?+[u       $p}NoYdYnz|Oqmdd'{i       Y>}=:rJ%;zTt";;=f        @@@@@@@p3C@@@@@@@W        !       +@vBsu@@@@@@@_@@@@@@@ ;x:       /@vcf       @ P\@@@@@@@v)2C@@@@5_b:Iꢅs'2xOO!P   Pd'--=z-]ږ]  V ;;kp PBrXJutgn#V3'ߜҾ`MF~3z#^/c?7wgO'Io ߵiZϾ7Z#/ai)ED)K?UMwoP撝 *@@@ ;xmv<;Ǒl5!  @rss AnGk5kv}O}XNtMr (n_^23/&inTfM@U%nTٯqⅳqUկNM^E.5~;i\%{SP{e`f}Ѷ۝vP"@@@Qbķ٥s22&ج_:B@@'سesnc=O#bܸ|ᚠV-MNvZu۱ațCM_5l;E@@X vo/+sM@@p@ES_}Sʥ\ ɣ{ݤ ;aP~|(*VoиU7uvuϪp7V   P\d'ͮ{|_~j@@U0YGǸ@~8@uejܪk ;cw#@@@EbaE/ǝ_>>Hf=  8+_dh cz|eâuأ\_r3W15D@@(wZة$5!u/=8   oD.5GΟ<p QS?hҺ! _~]ӫ:b*?2e‹(ٴ{7W\P@@@p 7w|ɉLyxyd۬k:B@@; Xa.r~i_oo_W Nݻv/~%%@ɷ*?}z~bʄ3c|:_   ` nܶf0tW׻@@\R@fИ#l\fٙvoxS'M\_NI|1-910(8$|ɠ`}3$];AFgnecU ~ڵσ6de^QF^iԢK^w>۷}특߫O1nǕ峷[TM2Qw=&X$%,5٨Y[Hxm{ru+PEpXd]4'z_Jt–5 d-JB嚍eXCsH]]'QG3{xmw&vwlZ5')QCuc*ז⛷Us䝬Y}Ò SK_*u7yCֵ ׯGUFC ?mqi&g,u1-d6yXpDt =-Yi_-z%M ʡBN[6KszV4T &Vw"뜎%}jO}"e@@@ `?[;׋O^:t -d'ћ@@(j^8%)8~)ac6';˰Aƕ3™#cu7ⶻRGDW^娯?ۻmҏ{HAhy 3~#-%¹O/jթ=OSBcӡ"[^t{ݛ~w [n\5g?4MD=p|{i&y[;};p5@9~tG_JR[bThyK_Svƕs YQ7)೟Y %VO6K6DO nxn%hMw%feRFBܩw}d uceS?0gʇUdWF")/`ɺvZƣ@?+MZk/d9YEס?@@@kNVIڥ:MS|Jt1 @@@RbfkSA cr^M<ꁝ&YCUS9q wm^9+|UknלTqO߱Jʂ26,o ԗxz+QMF޳It_&|; Z3Zɀyޗ[X,㻥}eMc٣ᳱdY#Dz8o{f wEm^4՚^.ޙmb͉6d߶)˺#V>e[x;8   N9;Y6+Ȧv~P@@/p:nKý_6[ʡ| ϒf;UJa'l[Hiu/ 3ysJo*'0\aBzT}4ZX(S#6[hl$C6t(Ĩ.;1;|OX Yaַok/WS/=4AV v#IEQƳqﹹ9 hjB_ec:ioZ(iT@@@#pl3W*ת}/ڤ[:A@@ ^^G3~C1=<<[w_zCY]6_;+)ϟ>of>KC=7i&MTݶ }_'kx-VӬdo;osPylE|Z)ݹiޭ|Ju,>zin * U$%;}צ%Jihߋf}q]5q}53#] FTפt{hK 甸  :b*o߰ngn)eBdO겾C~>QS|Ê_e=M7PuPjRfԔDYNԱ}z@9}},tZ|RV  2N,k Vದ\M*6ٸUWu2   cNp rnM_o.'K_.@@pB?7|Kc<˗5/uUy^,%R>~h:ҡP}vS. Qgc5AyYZ=M />-nмӳΐ]]ɣП>!//W߿gW/_U_E)K"GސULXNNN2/UDa[,#9hԽO~b5x쉃JT !/kUyw"c~v[Ϟ8$Oݯ31H֑7e#onCT>۷\\i۞e:*I섻G .g\WxF>࿴9dniKjr~uoʒ${DEWe{od'X H3@@@<޶zHNZ2|h;vxB u1E@@ țgO|ɛ[-?4B޴ *>$YUS]{yyy}cͻ&Kh[-mߠoieđ=塵[hR><(?oO5A[I7,ٿcBRݸ_hޮ&HUt#]ܩ+;w i#(_]<_9G}'H&F:5At<7(d M|ڦˠ%5A2Z Z7v@m?Luj\Tfjn͇=uXERe}| 6pɷ[Z6iѽ @@@vmpU΍Z?~/o;+v;rIƓpDwnH섋qq-D@@W%*ph48b*v/_?JF  rhؘgo|ըBLYY~oS߲n,ٲRr55 ,W W|e,.DoyƕV_V-1LM%K08gpYzM;37fzٺ*//OWGaZgB4KEU/%%_AjA}4xcsoݩtUda%3Ak" >µ1U zaIA{=   @!;)DGb'KGߨ{xvG2v"  3 ,,7TonW.ǝGGo]t͵TRLxxu0-%quvP{HWBQuOޭPz峀\FmU?9w*NwQC#4#QW&&%Y>c~` ߢ**ueq+R/JGtꠦ\W9$RO5sFmi6mӣlXt3]7Hi׍40WM0Z'𙽹7ZyaԒ5Cf    ;Vv''+kYiޛ<\r%:E@@TRqüfՒ ?+|{~ۮΜiym<=t9' ް/W)N>;Mz[ɻҹ_Z}*50 &y?uӾ@VfĄs,?2$%_|6%@nG:5-5ȘNTAk" q;;>WA{o*Y>+ i  Pbھy%n&Sፚ|M_@@@*Twï{2k.5sss>'0;'W:߶nR6I-'[64*N 7P3 /͒.tQ?Ay?D\J *]wϟ>TnquDyv.up"|Humd._`P$MG OU=U@@@`Ftrrm^w@`c+)  8gHDr#ZMn<@پ=rh{%wѨՅs'O۫Sr4U a\%4"F-P@Ui섰 jNIm1PAfeeZ>˫8ot;J|]9Z6\ml׆Y0A'l zp? zµ Y ?g!  X/P- *Mt8y|$~ա}?OVUKToe@@(^Q1z{,/9//g{7uDV ۴CxU Ю&Dʲ6CKaۆŚC>~-o g}zZ56,os+gYYh8g#m%=,_dP!rKrbDO$;L) p㆛bBt   [\'//oaŨmʵlKv2  .o$3ebNv5귬ZI-$!9c>;ayWt:4k۫ UT=dU7pj*C[E,j"k"Y 6my4 >2ʚoUȎQ1HJ Iìk&n\\&m l9   Hq@@p.ܹS?֏)"ccnpS'+99"/{jO٭ng˪˩΍q)1D)hlh)yS!%hLhVk*+s-wEJd'{X.:OA6C/p|\v1Bt~"WS ,z"   lBG@@@t{JpF}je5 ÚƖ{hʐ6hr,լݭ{hʵ޳SϞ8oS~K%h+YK OǏWᄃ jAr@{BC#/~(ۡ?1%,ZGlH졝qgbd v+'ihD!  n)E'Uofmptlq?PR SW)#  ݯKÍJw[>dė4 65lX9M}4V===e+khNcxy__TW"J:b*mA JH,_쉃UL3&#4G-wJtΪ܎?ӌ|E4Y5\qGƏ   {):{~Zgwb @@l'p1^p]j]sWؿcCqY*V6v^wd ִ<Mpg'ڱe͂fz1o'C7,_E*J}vڥ3=nHVI# 'ʨPiGm_sӊ7u$>m~Ц?%=jQ ~Af~Wx}{qˮUk7d_z=lTeuɫPdU߶kIYr^zm;Q< =w=]v^d[ϔ - 'zjN1.GޡPӭݴƏ֧&ȹZZC3 }5 0hWyкe3/%;qD.;oS_~~x_NYJz-4%N_NM *mKǪ{^uTg"@@@ G6"  X#`pzZSw6h֮wN[63F-l[xlYR+A$h(m*QCge^4PW󕯟:b?{|뺅zFYabėcpr6=4no_KRKݑN߰Egv?9wyy7Zj>n,ռmv[*M|峅!Hy]'%xCY D:ՅkWDa~'vh#o׭G6=g?gJV;qɣ/j8H>w]#K6p`ɠYr\fy*xf/22W-hۣj7ڗ?/;}#^dN<¤InvhZ%K[_֯Ay"]<Lnnξk5A7޲R3#)!;hT@@@&簋q!4h̙3oeA@@ؾa}O?s`xJ1UtuwHX"IvpkeCܡ=ygggرnűv$_yTed7unܺ{|Q7նu܉ĸ!!Uk7mchpp\|ѝ O%%DC"TӼIk4t©7$GC3h{`:My'¢*hjjr|+/g^I P*VϿ wjoPqrƕ{e^ QA   `( -3x>8p3x>hhfUpȑ&M25}&NhixKw@@@n,Yv^1g Uztu=.ۧ^jW+yAbF<ܭE>W0La>ytn0-T|EW;=d']#ߑ3cZx&5!\fm{c:@@@( L@@@Hpx&|%] <&Hb 234e64A˩IJT qKuNSf* {_>ܦ-J3-,yU$eQ*@@@ [͹"   zw;D"Po_>׌_v\KjzZʔ[Ԩ{KGdAY,9-xtLe N߯PF@@p/@@@\H %i~f̥ʄ2P@ vrsh$"hI{+U׾5ݠڶ۝+VOD֍8vp:3% =f,@@@`׽w@@[M~uY-Cר߱pB@@(Fvv(F|.  @~#ʆE[ 5Qb{ugO/uv|\޴/_QU]xؾ pǰgiPF@@(.K"  *Ya#o 0dA'tq7Xw]9sR!Oc `҅i_LjfapP@@@[\@@p%o7vQ3Og?ݽ|<0(8K}ۡ~oc7hиU><ϓƨ.Z>v`lT ?3*    +()WG@@@FW.def(U1>~Q)@@@g ;c@@@N}˗ !P@?=$o.el~fb:   ; ;M       3 w1!       Nd'd.       8 xW       $@v;M       3 w1!       N4bҥK.\Q#nj[zw!       EGΰYIM֭ͺsΝ:h$W)cD@@@@@@(Nvvm!       Fd'fvf}       n$6]v]d… 322l֩stx#GRZݻD@@@@@@@u=t1rg ;wA-{t dдiӉ':      FAN/7;;ܨwy#       (%u@@@@@@@QNQ/!@ @ @ @pCͫ+?֎ iY9c>Srvݸ>ek~r[YVV:3W^6MGwF# @ @ @ @^P/Xt(+&L Q}1;eԹʢ @ @ @ԋzaƢ[ߚ~!|,j=;kw.[5 @ @ @ @^T' {U--)پhA4ǸpA'/mZ)&@ @ @ @Pyjwф~pArZ7 @ @ @ @ 2`4$@IDATo^;ݲU4aQ|`7:xSL @ @ @2/:!X1;7Qâ _}ˣQVvN" @ @ @ԏq~8\is_>j[V;FM @ @ @ ^EOo MXro?l/_{ߊ[>[ @ @ @ԗ@n}-l* lnʝys+(YCXa#:<"T*\ds_ɝ?  @ @ @ @PP_XϚ>eޫJ.{å?_πS7@? @ @ @Ȥ2]󵺍<f{|Rd?*4 @ @ @dB@uB&kFiIɛwqϱGn}**{K=4+0 @ @ @ PNvsZ.PVV[royrr;}.G xľwl׊e Ec{xOW-D @ @ @ @ y ɛ&rJi ./t`?m/,/ڹ^uٜ7sZ @ @ @ @ 8![n·g9gOg҄0U'}xui>;-DM @ @ @ ^EۏC#/$ޓp/"c}OI @ @ @2)p5v&WVU{?E#[wvw>C'1kY᠇, @ @ @ y 7ꊻ׬*+91z\vf%AO_ ;ěb @ @ @ a r{֮6x8e䎥T2% @ @ @ PZv'#ެ$`jv˖ @ @ @dX@uB\=w,'W.O6jt)&@ @ @ @Paj,׮wmފ7+vjQcM1 @ @ @Ȱ WcG+㝷WKԬ$XG-[u:9_ ޓy럛 ٹQS@ @ @ @2/:!X/~-Uhžkĭo͋zAo]so9lݩ~5 @ @ @ @^U}WuN_&l{{SNugztj!C;9`av,^/ry42z{ @ @ @ @ 2o^Oۅ[[_FJKT W\S% @ @ @ @ NvȤvMʚ;o>%W}CUo$ @ @ @; ugXPp̧o'}{:vU @ @ @ ';d9UZoWy]c]kUfegڽ}}OҔ= ' @ @ @HH@uBBJӦK:SY @ @ @$ :!D) @ @&# /,Z(vN>cǦtj @ @UPPu+#  @ @/pgL$@ @%] @ @ @ @+:b @ @ @ @PP=/  @ @ @ @ N @ @ @ @@T'Th @ @ @ @+f< @ @ @ P= 7 @'޽;++SN ۷k׮{k׮?mYYٞ={Blٲ}!sVjB‚m۶ƩL$@ @(p[Fo0 @ {) tIvJg|gJKKfy0y~=s…۷oO4iR(D"^[rex /t2vGAn;\QQ믿vPP\\6m 8p}MTys˖-[fM˧t:w\yZ*P0rc9O"&@ @j :h @ @@Xxq}vJg; ǏONkP_|7/uօ&Lݻwfn|E͝;7 RA ?ݺu; ]:\{͙3gӦM1cN=tՔ;w|gׯ_ bgqСC!@ @j/:2 @ @:og*OqƇz//+YW$~͛7W1yD̙3Cň#*dɒz*&)oV8*U>hz}I=|!%Uys˖-j pFlC @ @I NHJR @ ?_t[n}ת>>ᤆJ'J8 ' |^8J9=XC_DU!= @ @Nv% @ @NBԩS߾}—a+V8d+IZaD8a̘1;wnժUAAΝ;x5k֤wvÇCg8[¯&]P~8ƍ_Zn݆ =)q )4  @ @DT'$(  @SN ć~:jF]7 *bA42 ^ꧤ :uj:p^C_W'1ٳ'eXh=z„ #ƍSG}t˖-_~9A=B1G޽۶m!m/R1 @ O0iM5{3f51y5;r; @hkSLɉvԨQ,ॗ^w8x߱cǔ:jgիWzg _SHNH/?~Cvi)A .{Sr2K,9cLJo6"Rf>}֭[_ٳE]>BGx= @ @@T'2҄iӦ%N" @hmڴ9sSJII1 N+?K921᠇I&W8p Q>f)9&N<ӫ4BEBTzH/Mk{w  @ @DT'$I*fb%"@ @f&0hРp@7?VHo߾kCғo޼aÎ8phBbر=~_~.T>1^aÆ脋#FD_Mo ġT"|b) @ @@T'2~qm%N" @h|% OR׮]+>Ψ'G= @ @  0oSΚ5kƌ_LlzJ4s+V%@ @@38܇9%={J8 {'l/++kGuԐ!C» 7\y s gXT8$jDNL)\#u>%Ρ  @ @ N @!j7K/UT @ @-~O?'~Q kygù&MJB+(--J1oKs"BDM @ @v"Y$!@ @.WlC=Pmx{gժU)+V,iX>p @ @@uT'TWx @ P%*k`SN9+۷on۰aC|V ?PI)rs}i2D @$ ߷@ @xGuTzUzt>l߾}egW-I nz @ @@T'P @hR3'k׮( Ϙ1c§#o߾f͚+WnڴB[F:t(xj\3R`[lݻwDJj€NM @ @jo( @4}mۦI}% 1)7ةS𩃨3TP ?xꄾ}[ T'T>^&`J/_^cF @ @)R@4  @ @@;vhZxy^Gz hJ}TuyҤI>hʔC]_~)WCsƍᜈ_ =V;wnʥPqEw8W'SO=O5z7Rj @ @Tvb" HB @@/,Y^u]AA+9!e|6hNNN'֯_5LJK={k. 'x" ڷoSO=-'///9v(z(???)#{B~M @ @ CH:I @ @@4hŋom̙6mӧO<@8`Æ @!}dѶCAnݶlْrSO>  u_ /R<իWO qQQ#z2R @HJ@uBR @ @@S^<&Yo@upCzuBB5kV8!|\!| j vXbJ <#BO8!={̞=g 9CaDBz)#FH9bWNpaBI @$(d1"@ @&+кu!CTKhdm;|x T) 2Pf͚ &N>8sرcJgy3$ u f c:u4y䔹)})7w^W  @ @N) @ N;6mT8WU:vĴi:tPuQ!}n/ GZj3|>!_aOxI'T% @ @@mT'F\ @hFڵ;977 G T>,cWnۡV .'"GLr8PO|bС.ÕPrCzӳgpDWu @ @ȭds  @ @@o?K˗//..N#;믯] <|!|ˡa@!|aѢE߿?}dH5jT8l"_C @^rP @hFSgyf8.aݺuw.(((++ *O۶m#;/+*~/Nﬤ.]\x '7nܼy֭[CBQQс+P~L=׭[J6r?z{-,, c½^z 4(G:\3/rM5k֬^:lr߾}cf"Ls/|py @ @5PP37e^^Mn̎  @ P|x]+jͺvP|~j&#PXPj|j4 @g7hjm!}'5Xh33?rE 6o*ڹE֝t>ӏ8 ) @ @ @ @Zŕ_~u7.|`w~ܲos2hyn#F $@ @ @ @ d'K=xoS߱KykO/MHϹfuʺgg_C @ @ @Pdby m}kO]'+uH/޻ݶhA%= @ @ @ @  ^W'W Z;l?e 9yO~3WcɢM/5Vz'^ʊ: @ @ @ @ )NHJy.N2*ؼi~?Ĝ:-oa#eiwgN6ͯwGM @ @ @HPĬ^-_߹|ɮw\dËυCG/=e%Qq_5AF¨+ڵs__妣>zynC% % @ @ @jo= Jwypӷzjk羲-W~a;/9q @ @ @ @vNv_z%y%ٹPzNy Lěb @ @ @ D?ɞ|G]_ھhA)&@ @ @ @|'$ t:ǟңޢKܻq}Ro.8CK{67 @ @ @ @  0$I~NpfVVVYYWNmٶ{]_"juxSL @ @ @Pc'si>Zk_~xSL @ @ @Pc'7~r>޽ŧt=. @ @ @ @D"Ics_c: 5 @ @ @ @ ) II60?=7dbmk @ @ @ @N8 L#޵b_.xvV?0ӣ @ @ @zYբu!ⷾZw2g)M%@ @ @ @PP 玵O͈MG}) @ @ @ @(:\zKgnzg1r @ @ @ @Zb H`E0yʁ7bкs{Tqa @ @ @ @Їmyhkf?~fՃix#  @ @ @ @@UP>f-{4] @ @ @4W M|)܆{ @ @ @ @&*:)xM @ @ @2&:!c"@ @ @ @T@uB3}n @ @ @dL@uBƨ-D @ @ @f6 @ @ @ȘꄌQ[ @ @ @4Sfzus۳gϞ1cFQQQݤͫp7VxI' @ @ @TpvP؃ ӦMK,]cHbŊ1  @ @ @ @>쐘O?X. @ @ @ @@PÜ2eJb$"@ @ @ @MH=̩SΚ5kƌEEE%mfΜqHː!C:~= @ @ @4^ýlwd A@uBO!($36\^zi {w6= @ @ @d 8١>yM @ @ @2%:!S!@ @ @ @U@uBs} @ @ @dJ@uBC @ @ @7 @ @ @ȔLI[ @ @ @4W ɻo @ @ @ )  @ @ @hw @ @ @ @ S2%m @ @ @ \T'4'  @ @ @ @@T'dJ: @ @ @ @ NhO} @ @ @ @L NȔu @ @ @ @@sP\&@ @ @ @P)i @ @ @ @*:>yM @ @ @2%:!S `;w4 @ @ @4/un|~ /E @ @ @UfRչ<]b~j'ޱxa׬ KW ?>2F @ @ @$(d1K{k/^7 KRz+.XR5  @ @ @ @@L&Uᶭ>rmr7S2ݷ'+]zeJ& @ @ @HJII&ݿc[-Ʀg}g\G-,شqs|{YB @ @ @ o'$FYD ?t lZS.:hzNϓΨ4!\jߧ_s;P4rşQS@ @ @ @1hw._ݥ;-s (6ͻ8X/8uYExmĨ~}SN:}N5 @ @ @ @ ) IIV;϶o= ՞v E;냦7OD6us/m_V= @ @ @ @NvaCɰ7*޳;1!1ѥKFM @ @ @HJKX@ @ @ @W@uB'ƹ/Ds[ 5C{ݚ=kWۼUN]G?0~UL @ @ @T@uBf.Fu?0;''4֯~#X(y5F]rD| @ @ @TW@uBu}7F;8hp>3/]wڨ? ~ﵹwkmsҩ% @ @ @H\ ;֋@QhP Ka!ض`Lx7 @ @ @ @ ANH>S-wúnECz6m5Bwel9?2 @ @ @ @@ĬTꄵO?mȏ^~8޽3vmQ)g:G@ @ @ @pCR`qrڴYg aL}Oe ;A @ @ @ ꄤ$3ρ˟8}jzyO#>tޟΉl{{ߌ @ @ @ ꄤ$3ON6)=e|!3qG^tis3M1 @ @ @HD@uB"e˳R:ӛU0ly1z @ @ @ @@-T'ALi2MVo.~-1nz  @ @ @ @@T'ԘaMlݱS|C]7iӡۣX@ @ @ @Pd=|ZoVl>ڮg( @ @ @ @T'$%YyzwƛJKWvqt  @ @ @ @@R<=e{6+=P]:! @ @ @ @@rLƟ"\3뉪lgaFo  @ @ @ @@"g'NЯ3ώV_jԬ0()*zDm) @ @ @ @I NHJ&^ ֓ݰ.=i5 @ @ @ @ ) II\7x'\otw>֯E]O?ODM @ @ @HP 7\Rկ@Vv_ wd7tqÍ=1z[ߞ7Cʞt/ @ @ @ @@rl:=< U ۏ+کr[** @ @ @jL@'?cOqЇɷjZ @ @ @ @ N[uȏį']J6:hy?JƸD @ @ @j/d&mk4m[cҚf 6onۣg^}M8mдs;6&@ @ @ @H@uB#zXJ @ @ @Fl @ @ @4" a* @ @ @hci @ @ @ ЈT'4e @ @ @ @Q Nhͦ  @ @ @ @@#PЈ @ @ @ @F):Q>6&@ @ @ @H@uB#zXJ @ @ @Fl @ @ @h@IDAT4" aؽ!nΞ @ @ @ @@5r9:()*Zܿ}т͛vhѢ,+'u.]?#>q]{o+ݵb t֡oG cS݄ @ @ @ @NZS׿>;?%oY۷n|n4SnQRUܱtqb!PkG塹ߴoi_  @ @ @ @@ 8١`v]r _|ziB5S=;;RJϪo&)شҌ/>wo%M @ @ @ d=O]'+uH/޻ݶhAg_ye QO%~ᔒJƸD @ @ @j):5o3}N8^`}f㾏}< 1 eek_ݹ|_hԙ7 ?//̆}.Y/s۶l+?V @ @ @ @*א0]`y?Qԟs?{㗣t6"c_ QW^\ǻG\qM|pyn WN9;7С'm۶ݺ>Wß?:m'ϾIF @ @ @ @ ANH鞲Ғhq_FJiBt)++kםxQO^妃} Ҏ}hX>QiBnj=./5E @ @ @ @ Q rV9 |Mߎc?.X0jw[F9ZE͔ߩM;7\5czzCtU@ @ @ @j#:6z5z%G^xIvsG.`·₂}'~I C/D!f_ @ @ @$(:!A̪ڳvu|s>o.'5/m_ ҃Q+O_Z} @ @ @$%:!)jٻq}|to.8CK{677|9`fq>}; ]Z=/EM @ @ @HJ@uBRNmٶ{L_">XuB;9*~pq EJY&j  @ @ @ @@RI%}N?{?-߲]:nj%7ըuV}lp{-]C @ @ @L@uBj5Z)޽ŧt=.jnRz(jŕmtطuK)&@ @ @ @8!:O2/]6Zc: 5wFq:oVm*r @ @ @j(:p?\zъٹ-ϼywmf%q]W7M1 @ @ @HD0Ups_~C/pW#vCT 9W}[߫dK @ @ @ @fj斉Y+蜛>WiC|N>߈8 mۦ 8\UKwśb @ @ @ DN{ͪ~˫x4%k>3_l_Z\ʩc-+)OL)V_ @ @ @ @ T5v0Zo]@Q|bW^v={Eq7+Ư# @ @ @ @DT'$˜@g7ۼ1%KM)AiΏ_$.)ڶꄸ @ @ @Pc-l\?<];M8-?ٮWxOQ 'Nk  @ @ @ @ ) II<Ϛ3۷S!x#윜xqWp W;nXlӵ{)&@ @ @ @NHIJ_߼-ZE)[ůˋ:+ZkײC^=n\_uk8 @ @ @ @@RIn¢*>sLwV%nףWߪ66*S˜+mu9jx @ @ @ @J$Ou?|4!|2aO3mۨ) @ @ @ @I NHJzyvX엮dlu3 QOu|">eӫ/śvּϏb @ @ @HP@uBHⷾZZ:?jOhݥ[Խ?D_VZY:o%@ @ @ @I NHRܱq_騏^5klyEFsC Gy?-9zGM @ @ @HP@uBUMbGgj=Xՙzɕsn=Q\R\<+v^Q, @ @ @ @ &N,h؀SQO֝#>Iv5f;7S2۶m|XIQь/^3G]}] @ @ @ @dT'$Yl[|=f7jV=}&SL9day??ǯ:ny덍/>۹lY٧ˬl_8D""@ @ @ @dT'$mRwшn#FMhvsƨdMO{;>_ @ @ @HL@uBbUL*ٰ?VgKU!+'_˯| @ @ @ @_KjO_U aC#>>BNds'M&TB @ @ @$% IIV5O(@M@cOx\xu[ݧv'{WG @ @ @j':v~ {vL {vG @ @ @M_MC @ @ @ P @ @ @ @ Nh @ @ @ @PPV'@ @ @ @M_@uB @ @ @ԯ: @ @ @h3v @ @ @ @~T'ԯ  @ @ @ @@P;$@ @ @ @+ٻ說a$!HoRED:X6:c{w{AcCA,REP""[!$gxޛg]wssZ}ꄲwu @ @ @ PT'Tw  @ @ @ @@ N([W'@ @ @ @_@uBǞ @ @ @ꄲwu @ @ @ PT'Tw  @ @ @ @@ N([W'@ @ @ @_ ?b)>ÇY,KM04. @ @ @ PAT'$ |pҖ @ @ @(NvHڛ1bDֲ @ @ @@2铴,D @ @ @*27lذCfff&mѭc?x֬Y[ǽ  @ @ @(΂?\qXW. @ @ @ P.P._&@ @ @ @H@uB9zYn @ @ @K i @ @ @ PT'V  @ @ @ @@PP._&@ @ @ @H@uB9zYn @ @ @K i @ @ @ PT'V  @ @ @ @@PP._&@ @ @ @H@uB9zYn @ @ @K i @ @ @ PT'V  @ @ @ @@PP._&@ @ @ @H@uB9zYn @ @ @K i @ @ @ Pѽn;~}:uRRRJ⩳֮R)jݺ%q k @ @ @ @P@uBHQ̹~<זMv+UMV~]vlxI|7_ysE @ @ @ @@~)k7ʈdn ˖79}n;ƤA prXP  @ @ @ @@R7ͬlXu 27φ>MNT| @ @ @ @`T'la1W/(Xx֚pҩ eɏ?PL9 @ @ @ @  ~O*@;nmԧфf{zY-zTI 1{iS'?1ôMY_\~JII i[hygT[d9 @ @ @ @ NH"fZp 'Vyˠc?lUJӰp?y}OVV=L^͗^}>&_0r @ @ @ @@rT'$׳MRnNvۥWw;Ұm{$x= ~u6lF n ό(xQ @ @ @ %Ds}:qwlXdSn%'~} w>H~юL$@ @ @ @PPX$e̙|pv6R+WNy-]_;kݺaNژpOl,dq @ @ @ PJBu3k;'?Dv1:lh7.Z9cZhlxj @ @ @ @S̟]ulZۯnO kiK&H @ @ @JT@uB&^'>dh0}nnL;';OX#&G @ @ @q;OhsVM{hV.ݣݘ{oȼ`{vU1  @ @ @ @Pj[t/\3onDî;k>4~ػo V[/z1H @ @ @ Pz~.=b_i}wL|8=5JGF=[ :wGZw@L<#&>pw^0F~O1u  @ @ @ @@)N(\C?9 ˖Dj4nʕRܼpܘ03.4>2+Eylպum @ @ @ pggeI˥V{\te:u znNN9wG'n4۫(6 @ @ @l-7, ^8ǣ[=l׮}4M @ @ @ʵ2{}3z-Zlm|ֹevC.L @ @ @JF@uBɸnnՕf|v0+Jգ^ڲׁaHO 9e1{3LQQzM @ @ @\@u–g/ajHo\di @ @ @ @ T'I«2v $@ @ @ @e%dҖ_dq֚ե}U#@ @ @ @e':3f,K @ @ @(S ͟6w= @ @ @([6x.'|w<}@)pi @ʯ@vvvʕs @ @PPVK @]`~0)2skWܴ)aM[uh޺cӖZcêT?#@ @(k e\ @[@A?kiR-_[ayC:k̴*"I}vi7 +.px˘5l~ nmglĿsW'}ӑ'],gcbn`x1Oǩ VNSa ⤎;e}w٫ 3D @ 6N$@ @ )x;ew_-;w8D]ȕmmrsrj)ϋįU摍׭Ɉb"eľ%̄iy ySfxlbn?;7C @ #%@ @mV矾/Mϼ#37ێ'nXjŶtoOiʸi @ @B N($4 @Tp`ׄ[.8tݚ~Ic>VژYL,k2 yrzn͙vEOs^ @ NF^$@ @fo+-L8rӷl.x#͙^#(yl2}f$@ @' @~qSlޤUJjjpyܙ'w^annU {Ss_~U\ lX oM[#N @  @ Pi;O+U=wI+W?_+ ~ ~V%b^`'m~I+^zc.aʥKΝ&t׭x񡁗J @T' @F27n̰{ϋt[ [rILΗ^;{RRRb^.ʤr w_Z,AM҂_g>yy q⅝w; @ @@u @ufh&%acN3wΛլUxsgMYbIٸqCu4/_gCOcF٫W.XxjШVr.Y87c٢oܫ׬ YQv^M׮×?UTclע]Ͼ{qj*U na'~Qm;u۷y/W!'ժS?&sc~n`8n֭<#(*`Q[)#秦^t gn^:vV4Oy:}ПN$?-3_@u§=)+zŠ}wT'|[~ѴwͫNx^zMYфhk2'+,uF 6~?k̘֮:.6it4miRy?SοZd5l|Qt`[!OKEnķ%Ls,`c돜{SD$6Ors1ȣס'u  @ @@ @lnO0]?!1Y3yFW@NИO~?Qǝ*o<}27&~50++o|dx6gmڴ10|0qx;m:Ɠ^1/ ,|φLM_YvՠNX&#l{y;b') jߏLuBUM$@ @@HO  @ @`F[$L#?Ȇ'L.L0+k!L vY~ӿSRș3c0ܰ)diB҅skgOp~S SNY4om߂aZg\2(-N6xˋZ8D-MC .M$87dԱav bWz T5_bi" @Tx {@ @lF im:'?}gkNK͋)Ro4"M =8>UcӦo8/Hacf5!#!8D#fؑ{o-o3^| y?$oo0]ʕ+h%~ (" @ _';W"=|Cffnd\֘0aB]̕ @( }3%r?~5M[vc{uӖ'/8o=wg5joߥGvU&qܲEg?{e^dPiF3/ yߎ:Ulש[FMiޜi9ٛF3l'p';'7nvnھe?OQRnLڌ)|cGwuBPQ]*ghL(NmrʥYVɱվtK7j?=?i" @ m NH{J>-g! @NwX(FΛ|>} =y>{CÜ/=|UwR~w^ ͉vph`즦VnҲ}jjj}ۣݰC5V5 w˧G8qǃ,va?VV=8i7>uȟήVfL| 5k=[ou>x_BK2FP"so^ugggiRp}3v51vK2ḭi}]wAiB0llq#3 >9adk~; ox p-5 @X@uB^n>} @ P{[z^9#/(,8◭ZS9-qID; e/?λp+t#kԪ{څwǃ} 3s̙]LNPp%byݦ-uC-peǬj75&n~[h TY?"// Jo:~JLd+;1wn^GR[?w%B @[@5Y~ 6lСeɒϚ5+kZ @PG2GP=/_C7'C*UE"pnMi{qދ fnXӔoC%b *n}jd Oߏٯz Ag+.2)?aL+dؑ^?%ظY ~Xl/3/^vU==>XȲ%g5>~}|HLQ 5i}´WT߹N 5ڽQhҼ]RIbuWot͌xh$aD-۵HKx'Drvo#M8+(ZJ$@ @_ @lWsϹ~P&-mߥ$[2/ҠQӘnPyвmCapI7j&5RS+DnNv;.!;VV憵1w:cyc֮:#Nݷ\4:OCO+ы~Knv~[ь勲7mVп!Y`s #)tz2~J֝v!@ @yooF @ -4Ho_^ꄀ(~ X~z^]r9ul ֬Z0wF+^1ZuP$\6FӖ99fY? v u&MY1g^~El];cح:!S/ٸa]`%4"rZ̶wִ_څ? $|B_~ @e @kƉw?/s-]4o KGo<@еѴteK~I (lP#N_yʸyLF~r3GKheE~~)>|}tQm+ Ǟ~e" @ @ */Jc @ -Ԯ.x{vG}iަS֝XrZ~?+ "Ux5O 5r #'~񊥉J>fvܾgɘu&~5t7gTZ-q⨧>?ج"&v->ho0vs A~NNؑ>3U+D{rR|"9q萇}e/Qߖv? +qދθ?wګM:so?>&3ny|;1rc"rwڳ @ @`P;zN @߶% شi;Ͷvٳo~c҂z>sr|SRJk}@LB{εOVV=k௷bHxBDLfItu|w1?xny׬aѰ{{ݠ<z8)excmmӪT]0wF~]]g^v?]Z%m9'|54۲b邗7YNNST{ˊ1 @찭qK @5j־ P6/ɟ-Y@IDATOK?Hn~%=毻wkթONZj-u-0% MZz9/[@iλS^~횷 b/ӃϏIgsK4ءyz.Qߖm"Oێ&<p;U& a~4'=h$=GO ='*Mbo N (!Wvjj ޴uQ Jnx _F.]ߖ..т*Xrv h9O->AGE @ @@@$B @ۂ@z`Ё?o'\pK  ۣa=8a ?qE~ :0(w7ӭV%R?YlP)>亇>Yn~SxrR~ ;eӖJ'lYZ%mQNPA[ھnӪl63/Z쀲oo}j֮ ! @lV@uf$ @ @`H8ڧ<ΩY?~{̀`_`56<௮ ~JoW&u 7V]ă>z:1COyi|C~u ~O.Ndk] oz?נqL.핛l׽Nx5 e8K6+c%m a\dzD.(H_<%/#.C"9bˮ|ō @ @#<'-@_J>">.B @@ܰ~Ɣof8n-nM+7UACMwݽ{vebwHD #ϟb邜ܜ:6oӹEO,ќ@r☏~L#gm 7kծi罋 ͞'S'|lѼKGpwжw)ч*KےqW҅s3V,]a̓5zzfD6٬ @ʝ=I?!C>Xyy=y=GykÙYrvVVU)ƿʏ XrnD" @lSF_z괴*;;$}wudҗ:gub7m}Ӗ;ؿ+X-UTݳ$ĶSt$@ @':axٙs?xۯ-:y+WR9Z زׁm=.݋t/ \Ӵ31}oVS~Nw o~7GL @ @ @':xnɜ5ڍ2b޴aْ_~|6 w6aǘnpZǴW+6,_ .xuSO դhgF&@ @ @ @H-L7xF]yA|iBg㇢g}DO/834!۹?>dܐ @ @ @HdjiJ ugY G,:9~(/),3*QBJ|0XOD @ @ @ @@SwۨO9ԳZ:?m!cӦN~cFi9c?ۯ[09(q[9A56[3^̟~' OZnO9a$G<(jczVn2r庭ڴ:~z;,yaW @ @ @$W@uBr= !/dٻ]zu. FGŽsMW7\iÆh$hOJ9almm!OV% ܰA @ @ @(:!EXj7?ӺW\_n_K0gò%K&ԭ ƻra|㪌?M  @ @ @ @ Yإ2^>mjSnFp.CpCthݜeS'w5_thıѮ6 @ @ @HdIasDh7v.;FA|yٙPEhrvxjգ]m @ @ @ , ɒ,:A%A4ulZۯnf-RT #~k,2):TpM @ @ @ #:0JIΉV'U޸0Ș3+ְnp6Do޸17rsr~0Z^BIS4 @ @ @ @@! '-{RVJJJa_2q\4-}nnn?|\/{ {ıaU[7j @ @ @ @$ NH"fajѳw)l۸jմ^NIߥ{3zyitp]^qރ?q'lg[7!Py!N>#)aW @ @ @$K@uB$NvV֗] GlX$Zn^sʸ;ʕxU)LhK*5kM7:j @ @ @ @%eO` >xtn뾇Cڵ7^=hN;Gc2OdC @ @ @ @x疄Y3z-Zlm|ֹX:sUFtVn-[GGSTv  @ @ @ @@RT'$ȋ5㳋RT=-{FԨ]4n1{Ftbwv  @ @ @ @@RRE*ugYY)}{إ "56RK~^wv  @ @ @ @@RT'$hlX|'C9/'b4vZqp3샰[@c :u  @ @ @ @ Y%YufMYyRVv%E(5%%aGGGF^~^ڵH|{ң|xVHMsGA @ @ @Ikt( Ќɭzٸ*#B6oP#q+ ~!gcf^d_:A>xaNٴiO~}0R^^w=v5 @ @ @ @@T'$K-4.Le'/u}a~vw䪱wF~?>{xMڷ~N;tڴ~Y?-qwݟ1{F4zvo&Mm @ @ @ , ɒ,:,ZE/Y4I9Sy463  @ @ @ @-H%P$3_䔔HѸIgu:C2  @ @ @ @@QT'UlK3~.΂: ֪u| :W=bZg%@ @ @ @["d-+.'|3sԪet9s>zo̟VΞߠ*"%5zZ͚7ߧW RU% @ @ @ @b N(&?z]N:}OwH @ @ @^WW  @ @ @ @@ N( @ @ @ @ N @ @ @ @2PP/  @ @ @ @@PP_$@ @ @ @e,:_ @ @ @ @ /:¿bH @ @ @X@uB'@ @ @ @^@uB @ @ @2~.O @ @ @* =  @ @ @(c e\ @ @ @Tx {@ @ @ @ P< @ @ @*+ @ @ @ @T' py @ @ @ P*>|СyRք J*.A @ @ @U@uBlPp'm9  @ @ @ @"d#F$m-  @ @ @ @ $:!i/O>I[B @ @ @ @ 8!i/_~Æ :thfff:g͚u܋ @ @ @ @':!,(P:ax @ @ @Ri @ @ @ PT'V  @ @ @ @@PP._&@ @ @ @H@uB9zYn @ @ @K i @ @ @ PT'V  @ @ @ @@PP._&@ @ @ @H@uB9zYn @ @ @K i @ @ @ PT'V  @ @ @ @@PP._&@ @ @ @H@uB9zYn @ @ @K i @ @ @ PT'V  @ @ @ @@PP._&@ @ @ @H@uB9zY[tYYWݢUL&@ @ @ @EH+3/dğxeo.ZnтN6u[Ӻ]6:{b-z̹~<זMv+UMV~]vlxE]V> @ @ @(ꄢ%9#YwO^p̭t=.Xizۮݸ*#&!7{ӆeKy|>7hct  @ @ @ @@D"/cy> 1 l̜/vgnXu ɿ {CC" @ @ @ @ Y%Yuf=d5l* p/ /(QNJpC|7={xVM{hB.ݣ]m @ @ @  IaL"֯_{޴~.u߾CR7rk juzڇ]  @ @ @ , ɒL:F}IGUU{ӺYkĬXe>bc뎿郟禦U<"A @ @ @ #:0J%V{cI)MtxUvƎuh @ @ @ @@RJP gc'!.͖\fROט҄ҫdYs  @ @ @ @@ )5tpjoWRJ?/6Yǡqߢ;qo\J4M @ @ @(d$bnRM䯧歒n_c 2\:k :v7֮lͬZ~[u=hP @ @ @$] I'M΂fuZ|4tRn-͝ڋ/i}ǔ&t:?;MiBz @ @ @ @ Y%Y4}CZJj?_ k.xFsں ǼY'^]h\ @ @ @MmSEs7-ev7rDtF&=~-; &@ @ @ @%*:Dyx]{DevO8bò%a0j.q3v٩߃!L @ @ @ @%'VrK[9k/[:ybP햭>\´`wWsèN}hf뾇Cڵ  @ @ @ @@ N(5\h㪌F 48r3D5Fh7=ע vg)B @ @ @JM@uBQB :v /1s/?߾C)thEA{]< VzC[:0h @ @ @ @2H-n߱s|=*-dhAЗ]fsR>҄jo @ @ @(K ߰s%>d_{?L8ZZϦV,0EWtM3{>}L3gzyyٿΫ;wdzѤ3cɻoѳqNMݿvf]=œ'~2걼ܜgvׄxS/ƿQ1I @ @ @R8ynEKQq[<|-^6_" @ @ @ \%PAVVQi~/pݓ;ns V!@ @ @ @D@vBmD xuJ+^~ыVAW]?xҬǜPhp D*  @ @ @ @@EpCyB _y] /~Ƅ>شrEV]n{;G8_Y4k^BtfA @ @ @(G k6ܱÉ·b @ @ @ @ P$@ @ @ @bbB @ @ @ @ d')  @ @ @ @ @ @ @( ejJ @ @ @ @ & ;!!$@ @ @ @@@vB @ @ @ Na  @ @ @ @2P$@ @ @ @bbB @ @ @ @ d')  @ @ @ @ @ @ @( ejJ @ @ @ @ & ;!!$@ @ @ @@@vB @ @ @ Na  @ @ @ @2VsnS?~̘1YYY`ڴi썼 @ @ @RR훲LD @ @ @*R&LH\&"@ @ @ @H@vB6w)D @ @ @ P>!\/of6JG>}ƍ7f̘$KcΛ7/]Vk @ @ @ Pd'rGBBrƊ1׀d'T  @ @ @r, @ @ @4,K%@ @ @ @i) ;!-͢  @ @ @ @@ NHͲT @ @ @ r, @ @ @4,K%@ @ @ @i) ;!-͢  @ @ @ @@ NHͲT @ @ @ r, @ @ @4,K%@ @ @ @i) ;!-͢  @ @ @ @@ NHͲT @ @ @ r, @ @ @4,K%@ @ @ @i) ;!-͢  @ @ @ @@ NH*R7Z~}ig1 @ @ @SZ1^&fL/ozq^^^5h۾~]e~j]~}!sޜd]&RFVmZ}w;jJ@k @ @ @C/*Kߟ:W?_ч&_Gᛨ|=[E|݊(w'7{/'Mv$_E @ @ @ B7;S}pߞ{HԄ|nΚ7_ӶzO.gs_OF| @ @ @ @ RYɉ$wKvr69œxǏ=[u=vrs^9WH @ @ @R%fTIo6|h|L&v=gM?]wc _/^5gG>KDrŠoLݸIT/񏻦Xeƾr ~n{$*/j7uk5ᮇIqFF  @ @ @ @@d'XMk! o~ר.·}㗼7A'dZhZ՗r][zƃ˗dcNjBPeN;inN5_|{d¼ 2?g*V :!@ @ @ @`;Xz3<ׯ_ 5UVVرcG5cƌŋ\2&TVmvرGy've[+~rأ_}=322ⶂw7_`v‚ c>wn߶1Qq[ާ^QkD @ @ @-^{ 'p7d|Ң(;iW߹],1=ڰ}x19_O}'9FM;qrM @ @ @+N?_~9ſ oO?ݧOdW>a;?$ndVxĨ[:ullUv( @ @ @ @@0`Zpm U5]㏟2eJN5Urؠ_QxލA|5ͨCjɰfk|a 6ڻc6m @ @ @(k N.kȗpᇟ{GuT-BsΚ5;8q?hξ |͂?盿Be'T(d1Kޝs6%ڪTqȵ7IQe6mT׮྿凞gE!^A:5̎gb @ @ @l?ϺuJ18F4ig7߼pR­z饗SNy/MzG>x Ne}8?][6nvUwݭ7,*ln/xukÇrATk|ޤ?zrg=& @ @ @D|uF$e˖ԁ^[C77;DW]uUԄ)aСV1bDTfРAjՊj*x ;mЗoi'V[oˆgoӮ}ѳgeCvœG:xB3==o+(uT @ @ @ @BipJ;38Q.r5DB.lԨQӦMK3gv֭J\qSԨ/n+5!e^[agShQrI QogU|R @ @ @J"pWO0!1cǎ 2YfEVW?zѐ|b*귟nzaOxaE_<`Q [9ټnݢs6\UθmwQ @ @ @+|͉Qڅ#G֮]$yN\xӌ3 ;;mPZwsF{[I':~os?;z[o[t[UVUO;' Ozv9S_yg=|Uyy?pD @ @ @~}7!(n/n+upXOty֪ N@Ou[|uGxƗ.}xaOV$^yMf榝S>QӰ'jjksԺiՊ( @ @ @ @@2 . Q!CxQ1%AG^z(&s~47;[0-1=zm}Ͽ\A㎝=."^q6,]T[/שuӬE  @ @ @ @ 믿>+++ѳvLd'\p<nZxg'7@IDATwLj7\4wF$:M{V]'^l{Iu[q^nn[`h꩞ @ @ @ ̝;/6mDR<>/5W^W]uU)gNw}葹|YT,:X>kFC|>M} k- kN, @ @ @HBkݲeKcVFĠgϢE?LJiNi?r7"e3[]#vغ_{)y[cM/^ @ @ @ @@3g9rdau֍% ֯_.n{ vqLJzKԄ"[ώO|Y</n+^gZfևCPuvG|ԿnT,4ʚzQS-escH]:{BԯLGBܜqCoZ,jSש>gۋCA&}w[0qݭjՊ @ @ @(B`ٲeG:FE/ӧϙgW_>ZZh޼y>b e! jW.&O+>~}zJݯcT]ipwTW今 Ϛ+']ݣ=D @ @ @ P>?ࢋ.*{Qcƌ'L=3f8#ioξ+׿kQ5kּGQ~2 峃gc[xQ ߨ`suvZns}iɛ׬Nٲaߺi.EJ @ @ @ /`8hР(.Vpdz;;СCP>{Ti~/pݓ|^Uև:۵npD˓ @ @ @$y䑈J*F&#^z& ag xuJ+^VAW]?xҬǜ"ioشrEV]n{;G8_Y4k^V]+_2拱/Y%3TݴY-[vD7h۾XsL @ @ @A &lذ!~_~ڵk322}#<2iSvBoY͆;v8_|)5g73 @ @ @ۭuQb2ʕ+I Q72pCV/E @ @ @e"e˖>y;vIO=Tvvvs͚5/$o7g'Y9 @ @ @SN]jU^zEqȑ#ν{$NM6MswP[` @ @ @ 6N|rHd}ƍ7f̘MZ1&;vy E>` @ @ @Wc%~+R/!A!|R9cŘkf'W~{wXU @ @ @ ?vP%&f @ @ @( ejJ @ @ @ @ & ;!!$@ @ @ @@@vB @ @ @ Na  @ @ @ @2P$@ @ @ @bbB @ @ @ @ d')  @ @ @ @ @ @ @(je0)  @ @ @ @@ ? .H1knҤIӦM;utqp׳4Jg, @ @ @ϟ_?S\sMoSO=3R\ ӟ @ @ @*޿O>'^Jۖ[W}ʜ?w9-ըqVmm᧧}lU5 @ @ @Lx^gժU˗/Z5jԸqXDo`sss-[e˖hlCԩSuQS3^~/bɒ%aζm۶kcرc7n\xܹs\2]&M:w&ԩSFFFK$;dn?ƨCG zdHkxk=;lMhZ2s%u[r_bM3 @ @ @*@m>.{WT<Ȩxǿ Q .x'!`„ \rIT}ICN@Q333ⶂ7Q~E;蠃~_pԩw>{x0 MMΚ56lXHe*KN(a13S/sl=I?'.& @ @ @T>p›oW!Q1C~ŏ7o~ⶂ1cƬ_>j=3̙3;찐|ؐiѵk|999vڔ)S!UV.s=^ziΥ)١4ze5vү' ;Us>yqOs6E~_o{1wna}g>X!0bw߹  @ @ @ @r ,Yo߾K.^/K͚5b r-D5O=fN~ЫWo=Q{׮Y&#~ӟ&v%-ZtGX"i:묐Bѹs+WN,/_Nn[{g4* 7x#*p ÇS5n8^9 ?wqgv%)M ;4ze26R6.f[oc]^DMڵk7nҢ[}snZ,Q?rO[v  @ @ @ @R n!~WBQ_~7\fcǎ]vmu6mzQGժUP G?vmQvB3Qx~5iԄ裏/wO!_uxG}{'NpP7o'PQ|…!"xtXUW]z&P2[0U%yGC>5^ZFU6ݯ< m˝{e'RC @ @ @@ ӣ섬!¯֭*(.nE TB_h޼믿5B"1iBAz!9#Ñ_^ S#?)Y,;dne5jٌ铮mbZqe|)~ܨ(45!ѡuŸ#_~yQ1̀pBTsI'qDԭ W0{)\ѸqXhNP߿kmٲ%*`޼yQq .z5_}~g(FvB,S敿^=?}ONJ~Kޛ%;ೣx[ACs3r[= @ @ @ @R ^n gL02dwR ֮]UGEI/R3###3ZfM!*[nA2335SN9>!E#_kɊnv([G}{01o{ۋz#^GNju[ ʜiq/שShg @ @ @>jժ+VL>=\.,z.^o߾of=D~6lXKHG=`|}B1G.|+DMaQvۭAQ ~A?#8ov׮]åzjFMeN(;b̼˅?/1J}zݺb 5ٱ o}QvBΦk~hϽ @ @ @*@ lk!AafJt/~j֬N<'|2Q6ذaC!/T^=>IqjƌQFqT,: kKw}EΟ?Ͽ wrzy衇;RNHgIfyӳ2W%8],D97=hH:GqAN]6.z q1 @ @ @T裏~뭷~C 7p{O?=N?3&3nܸpBTGqqpCȓF?~}ᔈ|zꩰ^x!^QoFvq|:vJJf1IiƯ&/1C˃?+;eKs7gEiEv--V @ @ @T >׉{lƍ3':t8CuH\DM6k O?e]͛_}+b} ?pZKN(afXncb }cU)ѹ y95~vӍ @ @ @ ~/7o^[!ߋkU{uȐ!Q\`ݺu%UpH}BŸ/[n o]eۿMGsNHSX4e?"١6x5Yk2 %Ȟ`v%xU+j7i/qxk8!^ @ @ @ @  7|!e![DeH xO>D1\됙/evB8!*;5Im&Mϲe믿>w܂3ϙ3u-Z Ke7.څ'fPGPf$WY }@ @ @ @ P9%|ge ʆpBQvBZ:h=( KFk׮}ꩧkR7mt70… ǎ.^z饍7FO2eo=)qPKJ$ ~9O?צm?h[2|g'T];QO;{n\/  @ @ @ PB:Bu@P>quBjuhܸqH"ZO8!4y_E]zgbc %+7v*Gh' kx/Y!$&@ @ @ @@Rʞ{A<;a͚5B+^?VڠACJԄ8 |vBvvv8 'IVXϜ93/4i򗿜wyQ~0b %+CgW>Wɧa:͚LJg[/onܴΚ @ @ @ P~辆jZjʆpqCqZ;YfQ~x46333ܶrssγfݻǛ>D5!5aQāӕ|;7^t{M?Uח|oFnk20'kSg&b @ @ @*@8H+a|駟wu_Q`0pp}C>\vժUbFN8ᄂCdddD5 2ᄆ={F5'NL" n˗GԫWoj(VoDM;wZjT,q-\X\w޶yQz\2ernkeO5}Ŋ;t8_o^4^vo5w.4^haV& @ @ @i$lٲO?/^8\sLx'M-RF|bo߾/RZCB͚5ⶂ0âE'O,Dćݻw^޷,|<@䆨s8 .^zb"8c#_|q}zw=1 -[ Y ?ϢQGy~貆7qѹaa%QJWi<%B3?5k&v}iQ @ @ @XVZԄp@2xI'׭[ܩS<0^8aF} c9&j |ѣ~ ņ _~˖-QS"05rlG& @ @ @*@|s=} W*ሂhT͚5CMT,:]ɓCJ;St'nONVH??屮ܜd;b%@ @ @ @@|yyy?B{ݸq+q_~5J~ ۷C~@a…06mte[3 {psῠ%K^:Fϡ&|!C œ_~e8aƍa:裏I (;bի3yob5 ^le˴;nެK[DE @ @ @*R VZ5򗿌$*UI8o>I/[jBVG-UR> K`;-ՖM ]LNv|>/jdA @ @ @  ԩ"e'iٽGG[ۯ\pƖD5~7ܭYC @ @ @ z衇aÆEh7;f}{یy=d.y׃h__Z[_,7<$" @ @ @*0jԨe˖%5j4dȐB,( ;I4޻a.aW_"u2_u @ @ @ @@7tS_nݺQQP섢}үuߟ_F/e欢WQQw>נ3 @ @ @ۧʕ+ރ>aÆӦM{fϞSE]}e'̭B{#.z;Zh=znz @ @ @l֭_(_ޤIBT* ;PR[4z'/תO?^heKh٠. w3vRi !@ @ @ @]1Cd'+:7wo=m @ @ @sw]V Ɗ4 qW @ @ @]qW_}'|iӦ:ン:u֭[/, ;!w͚  @ @ @ @֭?}<ޒ @ @ @(7 F @ @ @ @`;l$@ @ @ @& ;= @ @ @l' @ @ @ @d' @ @ @ @D@vv^ @ @ @r` @ @ @ NN6k @ @ @ @rPnL @ @ @ F{M @ @ @ Pnʍރ  @ @ @ @v" ;a;hI @ @ @M@vB{0 @ @ @Nm'nj )ӐзoߔMg" @ @ @ PY쐲0aB2 @ @ @DR{N\&"@ @ @ @%0lذ>!\/of6JG>}ƍ7f̘$KcΛ7/]Vk @ @ @ Pd'rGBBrƊ1׀d'T  @ @ @r, @ @ @4,K%@ @ @ @i) ;!-͢  @ @ @ @@ NHͲT @ @ @ r, @ @ @4,K%@ @ @ @i) ;!-͢  @ @ @ @@ NHͲT @ @ @ r, @ @ @4,K%@ @ @ @i) ;!-͢  @ @ @ @@ NHͲT @ @ @ r, @ @ @4,K%@ @ @ @i) ;!-͢  @ @ @ @@ TKnK^>7gKx2j4h3% 3  @ @ @TJ z[W~裺mٸ!a+Jܲ2 @ @ @Tb7;T?tpŜ)YI @ @ @ @ Nu]>Ԯ,L F @ @ @O@vB/Əq]\Y̙ @ @ @*섊~=a;쐗ŕŜ)\ @ @ @ @ NpR6._•Ŝ)\ @ @ @ @r Np[0IJ2VKbΔ,$ @ @ @ =NXlI6Zwebe1g1+ @ @ @l*П@ ޜXӑN\_YY%N @ @ @ۛ o^sf'ϙCwI_\YYU @ @ @+ e>Ǐ=XM{K2 @ @ @lo*ĎrK,J}zݺ\YYY%N @ @ @ۧܜW?=+sUb)yKK2 @ @ @[ SzWXG˃?+K2 @ @ @lyߗ;[XD *ݔ< @ @ @Y?ڳd:8/gKb)=oJK2 @ @ @s e\ v?=^ՔŜ_ @ @ @ @`{Pn?G* fu[gCe@@@@@@@NSel5Đa'߸Wh夆옓d瀦-dSPvC7W6@@@@@@@K$ugQ5z?dIW/g^*8@͠[wjRVX-.Gu:89wlWpe!@@@@@@@@@_l F 1fgu3U6ŝ+neCLGRϮ^[^U;}r.SD       -ϟ뽌: /E.֣ ZpXФS98%Cg+z@@@@@@@ P ]8엥I7]W ljv r        P`337d鋯Tj۱<^UPmߙ\E9yFRy?;;-ՔOiǶqruU$F@@@@@@@@ c&ԛӼom'bHE{~BU :zzxT$:{&       : P#US]ںL]˸wG'FZt4jԘ~, ,^'Qg'[!@@@@@@@'QE4>MONE98d`-e^^҃@@@@@@@@7t,ډ{ѵ\C勿nu(CV vϘ$}|ۿl        (^˯MWtg+jSf!RSΟ=}sdOG 1       z PdiQ7N,\.h>hȌ٠j0{$       7,.3888tp (ojs/'       y:!bź(Ph4rη֮}E@@@@@@@ ١ z6`(i\<~Js&l^PAx`8UholwZt;ߔIJ b@@@}!  E%`0d[jV5~ލb`J5ޡNNNCOzc)ٿ\OZ#Af쓑:cFz*SMQ?=.LMGfDgR@@(T'{ @@@n\ ~7I7lq2/S]y75@cKsٗ;lLRʇd17gy   T'XoEO@@@X\}g\著mмcXPq)ԹSUsdef2% -rR|zj[LΜS.{HOdV  C1c   Pb;/=p]gG.֮%],E%CR/IA@@t:AGLB@@ O -5{E],Sr&S ;+s:<$oH@@@66̊  X-0ee˩&EG_ؘӷ\E)iuٸ~"6ꊏo`JX7XJMIq%Q|_gge%&&%&'r S,0E$F?p+J|22޾W 9?oҍ}ճ:FAܝ[_r*kY)eP{|    P+@@@ptt7=ӒU9gCjrb/U^~*>4֠YUro_G?J>5aH޼rѻ#8 q.E7\غ9{|OfFwi71=v{hN[rU"ߣ_;KCDI:=0<;(',dyK־`G9\GL"޷wʿb#DTPSSBNmHhaL   N   @pnum떨V.ls*/a';g|2 "O C)~ɽyŸLQ|<8)>fS%ѣ#^׮mߖUKh/l:āW)^mu¾Kz;cn\{7oaظj7lug;Zq1K>"44M\xF|֮_>fGx՛ B[lfg˿~+9LjƦ߿:?:*1ely|y2XwL+g|o.32(,'j̔v(>?o!C)@@@#    " ~ovf"u͏GP {iPNȤ*HO{㩶|BirHs̩SMElɣ:l ȋq:eTx, 3#]ۏ_\\՞ya'ԛU(uA6;IQ\Ң}_U5?z52LGvg~eXK r _Ll\!3V>$ÚY   PrN(9+E@@/T2U' s͈ZY$zn_N9:Аkbo&,_^pU D޼RloMO}#{oN/S -J>w|?dy壶\BQQxtٴ@|:dQ-"  %V xTbE r7n\vmzzzA&)c:T WŒ@@(ek/<%UR7}@@j\~b|̅3GT)jx؉V~/+>l}5plP:e=oE_z̯?kgFzѽ;zܔYyMUoбnUCf+HSD/\A!侸2 gTfDRfLc.V i\B唤"mƕpmjҔ/{ڕ[uexx^=|'MԬ|;g˜)Vm;QpdK_rS]$pg|i;c>uh%'Egf+, 1!דU+E<΋  dt4{MD   9ovHKMJN*+GX,Zlʠ燏е̜>㳷F^<+3xnwE^??jb叏}\`9.xgPZd`ptrVU9vzM*^7I_ ;&3Cg,IeШE-*/3"thP&Eo:R:|N͂ 4g>CƼgc##+Vƶ\4k#{vVeeggG=" Bl6YIʇd1Y-@@@JR.yf[L˜   R .X91xԫ*KD^05U!Qb`eS. cjJ@8ztOLUΦ{\i*K))J"S(Q6MqT "/~״sڧASLfBU o+T)ٍ$' l~f<4Z&K?Jڴ=B.nv3E>4AFoOXkO\|H8'   PNO@.]t@@@LPjff~k#Ž/V%M 5>=U{H|]* šmk&>2X9䩉=;CSOMN}*_] 9's+(;_8sX4|?̈6صt/}l~KE]xhG4mS9͜b䄹 qQ+yG̵i;̵+h5e_>CO<\*ڼ6c,'cC   %J(Qz]ln6lذvMPɋvן?h@@@$`@R/4WbN{ū6 ;M*3uiPZԵeRħm˵:Ȫ>WWuٲ2{eGɌ7Eh.'Iir_wMER|̘ l@0{b!YL2@@@&@uBI\/  ط@rbXKL^4fwsT ^u囜xK;Д m[vim`N{z4H>7 pq)UF]=yhEo|xx|-u6__yQ;m@Ūڤ*#hTP 15uG6{&=_}W9pߖߏqdN0 *5S>Jm>x X>c!Y+   @:z.@@R zvɤXeggef-g䯐E3̙ђCLNk ړTQ"rNA⓱!Y|VJ@@@%p5%겹X@@@Юܿ|2nę[<=U 3$B|vk$Og\(Υ bf ko1??W& 񾏜Xd^d9AwϡRMvt󪅪٦0o^1SP|eP&*R66z =W'|H:Y   P2N(F@@ ڥ7=W{k׮BVY/?(^`2M-Y]_~'l}Ե ڤ6c cm>BT-SRUImvfweL׮Aq-]F6m@О3V>$|,@@(yK@@@# ~ov1{yyA}|ݬUWup7.;kݛW^pJlh4|9ˎ`GU?>w5iWaujxoi7h= -iRxX^FKS3bӈTo\h2c6f`%_4.C~Q4`E!Y+   @I:$}@@I ~]q*7c3Oo3 yMT i$>q9"ؾͧm[#ް0ͫ6M!/YS ?Ѯ30)_7jYCvsaf|+=<V!)c//c; 4nݾbsaU= l?ܼfEuId,"  '   6X`rfF=JVReD3~m wc'|k/=:l܇usᡇ ~Ƣ䡭E5ՖvQ&n.Su.fjuxxkOz.?)I "ôk7lM]wuss;2ޑؤI] ޫr>U -u0u,K+[,qV@@@ PP   뷶AR'g ST_]Vܼ,9f䁐Ӊ6d.#  %V@]_b!p@@@x ߺ[Zi~Χ8-;ḱZ0Eu/p "Woܱ㪤Tȉf:RMɩi79u+|lz5̔bztWYp{;>th2"Žܱyުz\*!Wc߰W7ZsRo;EU-fO_@*/b߾@ft hOQ|<$v@@(T'[υ#  @q8slwrդ$_yK;A[?25@,XQw+>zm\SnO%E]iT٥tVfZā- [ܯLU2BƖ8v}䨻$ܸrbmY&L݌x_ٱ2YpI rNS0of|O|B\<s];_&4Sڭ̰?3ypo;La*b_?Ԕ$9UMfbӤI@@@r:!'   @! |4i@4YkvQy~z讃ѡ8j0oc엵 h~q"ڠ ~Δ!uP+VԒo(3f}k).mFl] }j`U9Bw3נ{ |~7o%P`eL)UAԂ4j\~7DŶԄ%>yv}phZl??u,…qj@@@ PPbo=  v,дMqoڱ@u=[Smn^5Q:pUe|p͑|y셣{6ܱZ4ͫ2#^}c6c"ȼi X)~KmFZj΍?v=FAOKMV6el; QU⛋'?>++Ch4k[s琻RE;/vv{x[j;jM}֜hX,rv@@@ 8k@@@?Sc*|U[X=*J򐨄xqbIv~y{l&_zgIi7kV9=-9eUR4mJ!^2i.nO\H촃xC[;z!uubǞ}>Ɖ 'vE}-;h(*j|oWUuD*o‰P>ET΋  L\cJD@@@ i .~- 8oẫȺXj%-I|M~}-_Tʵ&݅;ϩgՐFxpȘGY3Nj'e??}1V|hɡ:]s.?@&5VݴZo*m [?0{n{o* Ɵӑ::52}ѓ7QУhWUU`!‰ .Y*gA@@F, 8pŊ>g[⿍jd@@@x \~lߦܸ+J,/_!hڦgZ_`=쉽ᡇG$ŧ$'ٻ{x֩Qif+F I nE%Eeq-]J͆yWQGl<ЫϖvsX5zXmMyûGMi^ey-'Ҹe&{?2Fw;/W,MOo?u97:> f@@@&Ѥ6~p˗`oرc,X`?f̘.;ynh¶KNMurXۮ@@@(*רLG)ŏ7m/>J9ULXA|lB[S8;4hQ|l60]\\SVȴ   w EyCO:z(+Tr.NO{}o?ǜ<|ZRNΥmܾS}7u:        P@ X'Ģ7~ZpΜ֘uuh==z Th"       s1U^/\9^Ж&h^ܰ/Q{        z Pd~׹:Ɂי[x6>Cd@@@@@@@Eպ$ dgf&^hQRCLs߬W>4{w.]\oegb@@@@@@@t0gk|kw9GY 44Av{$4>I3dFo2O       @N( `DžeCNXXNUzWɦ٠5n&DŞ>!       %@u^yGwB#cCOEk;B/ Qe@@@@@@@]NЅ1?_8'֮+ʁ{=lm<sI       .T'˜I Nݼg ŘR>5B͜b5\R6@@@@@@@E]k&       z Pd ]p}߮\ǟZ;篹9,[,{::t]AQ       X#QҿrVdzRe[aO\߿'#!Nv].}'k ^esa,Ul>aruP#      '@u~y)>k*        F]Ş9·N}e4AlnǍF$       @ PPhέ(o+;4 qyiŵ;        E"X$g-' l"=VjM0 g-=}j֒MSs̤]?҄47       @Q PP.ZʳF_,9˾ =)<0df}9/n_(Uв\K\E6MAدdr. #3V)`eg!       ` VB٭w@IDAT\{:jr k~_޹E}lܣBPS'8 l=B&ɦ n9 ׈lZ4~α?=@@@@@@@FkSwس{_Nz8,T6.^=]:u33)Q       @1:nDi ǿ/_`y),Yش[|9m        D.̏ ?l>M}w0 b`,q@@@@@@@;oWpNsj>+;6ٸR_97?Zy+'K u "N       @T'Si*ռp@@@@@@@($PHМ@@@@@@@+@uB\8       $@uB!As@@@@@@@J %s        i@@@@@@@(T'[υ#       PHT'4A@@@@@@@ PPbo=       @! PPHМ@@@@@@@+@uB\8       $@uB!As@@@@@@@J %s        i@@@@@@@(T'[υ#       PHT'4A@@@@@@@ PPbo=       @! 8yJi6nܸvr:t]       PT'-JwtL       "t7om.&B@@@@@@@.:A٥Kb"@@@@@@@"֭ۆ ֮]ۤcן?xU       ؟ z3Q s1N(U       v)h@@@@@@@H;Y,@@@@@@@:.oF@@@@@@@NR@@@@@@@Kh@@@@@@@H;Y,@@@@@@@:.oF@@@@@@@NR@@@@@@@Kh@@@@@@@H;Y,@@@@@@@:.oF@@@@@@@NR@@@@@@@Kh@@@@@@@H;Y,@@@@@@@:.oF@@@@@@@NUХ݊LN.,G@@@@@@@ yOw=O:z(3zV\ckF ,X:|X\xXfbԦCNC ptπ5A@@@@@@ȿL߮#O~E :O}N_j)O7df$\ Х5ݬyպV       AG"\       ^A/<ϓxiGJVNᮩ0P5ƕ mJ&_zimhʈw=~߭P"D@@@@@@@@7tDbӨ[93hFG:wr+z< 3"Tw&-;.e?V^۳}m=@@@@@@@E7;˜IuU'?ShY0'+5E;ZU kcϲ)KS6@@@@@@@K$'h3z)-*NNx~96<*/o >6g mrfb@@@@@@@AkR igin4At2bO_X#%߸.GWeƻjuGaiۆfMS&C 7:q-%        ` lqᷫەOW=d^T'=.Gʤ ء_{:qh4ہ$       7 7;ekխֽg.BcOOFoxzpߕwLAz-Iribq_siS.^PE ]\Ϛ+        :ba0eҾ=.|WeRi1fL:BYO`X7Ѓan~䡐Gy2$%OF/Uҳjמ2C       ^A/Gd@@@@@@@n"_'Ww&M١7.#S2+5z<`j:);8uϾJU<<0엥2 &       w.6ɩzq`lxz<:A6?sG=        oMW5T2%l:8MծlkԤTE Q9$       @N7]a:!+%E>ʦofNgpey4V @@@@@@@K$m>xeCjѬUWtT6-.{`        zI|3Pиhܹ3fN`GU3<       : z{eEυuZ9Kl ~w!fyn=l'^dHG|y        P MZJi]5M,[,{:89Ԭ%"R kGs#7UH$F@@@@@@@@g2*ج~ufrl.>6<@'g]{ٕ?8O6+ߠl        zIaeԔ=L[#Ȍ6Hry߬i2VY)FɸT)I/EFb^ҕK2fnnI       ^T'%yj>U8張if2&c{WeP׃Asޕvbo{k2UUM@@@@@@@tpq.R\{:j5/ܢzϾMZ6iQ!(̩GE ٲ{`f/MMek˔>qdy捞ؤ8sxze?:8vxS"@@@@@@@:A?˼Twس{_ =*f/.w4{T$=+5H3JI>97ۼ~@㦖p@@@@@@@| f|t`igtA[VmGZr7Q'玳hDk:@@@@@@@ P?7F7)Ѓartv0ci;@X`C~uurvImPwoCd@@@@@@@Q7;舙tUo\Oqƅ2ʹo|[9X*_ОعLL繗.nZ{q ׯ98: (_Rv]v @@@@@@@t:AwL( 2?#-q@؋  {_Wy Z6aۘ8@(b)!%M6mӌ7!HBJB a '+`ol冣ýqeK3sHw @ @Wkv @ @ @ @@v @ @ @ @@ N__ @ @ @ @ @ @ @ @W@vB @ @ @ @ @ @ P @ @ @ @ @ @ @ @Pf'@ @ @ @d'?@ @ @ @ԯ5; @ @ @ ; @ @ @ @~d'ԯ  @ @ @ @  @ @ @ @+]ӿf?9s c믿 @ @ @ @6퐚0mڴMg" @ @ @ ^pCڞ… 6 @ @ @ @{H@vB)S6 @ @ @ @{Hi{SN7oޜ9s 6iØhܹ6mjk  @ @ @h|BBsƆ1׍7(;a< @ @ @ @@pC|lM @ @ @F, @ @ @4J Y4 @ @ @hDòT @ @ @ (d'4f @ @ @ @ NhDR  @ @ @ @@(E @ @ @ @F$ ;=,K%@ @ @ @R@vB|lM @ @ @F, @ @ @4J Y4 @ @ @hDòT @ @ @ (d'4f @ @ @ @ NhDR  @ @ @ @@(E @ @ @ @F$ ;=,K%@ @ @ @R@vB|lM @ @ @N>T|D]e @ @ @ @dפ(PVZޚ6ټ8XXfN=z0^sCfv͞U7>7ٴ;t 7LUcj @ @ @ @v3ʿi<{+CkW'[Z\tlgCz7'~WiW$x͵ۿnh&eQ#nu=}|+Q @ @ @ԓ .ʭs>qMjjBGl=7MR}jq˜';iYSؽOꜿ&E @ @ @ ^ lߛ4e]9EIe%xѷ6'Nj;[>VVr*^YYf]3  @ @ @ @@d'ݰ3^|ao~ꍝ7,x7ܼf画i g=,ףbRpxÛquIɨ>wI߿sk?3 Oߖݢea믾 @ @ @ vhj 3jbwU᭺HTa+~3+JMCyhyMY_GyQD @ @ @* ;!՞UuwԽﴫ03*]Ɲ뒩Q+8 ^6)+?6IA N22g֩AD @ @ @ Pw u7 }OqޱhO!+ M"j:nMYiy"B/>qbӬsiOj|}y>D8b?F  @ @ @ @@8/mܨsn~}\+ }=&^eD&M,Y\z8:(,-:'@ @ @ @Pk,).޻hO}6#X4 ]8Y?v`BGGqZ/V7{wvB Uhi"@ @ @ @Z drau(~#~Ci&ȪnIYII|ڤdx @ @ @Z@vBj9ԑ~ޗNMOԴu8jفUˣb.]8*S;Njb @ @ @  ia$Y͛'qџrReRM~1^}Ѽآ*L:ǃ“bNb @ @ @H8VֹI^wSFFFRejqgޕokQ]Eq +ڞ!!ONk  @ @ @ @ ]%Yyrr0xXXYi&Mʓ z섢G;;4)^ @ @ @ @NH c&i֦m|@![<|0sZop|׎ ox{'5 @ @ @ . 钬< i:^"i*jM/eQӞ%[-Z¢& @ @ @섺rl#l|3^,.+-'t62޳sbǶnU{^y1ju[ȉI@ @ @ @" ;.z$S^:^ZT7̌B՗ cx=j?#Q, @ @ @ @iFNs%M2Λ]ωw8|TCn־cTDqeWVZNkF˯z'/ @ @ @H@;tj*ZCӣ.}pWbAIa?jjٵ{brr]{cTm+EԠԩATeܹv @ @ @ F iĬT?ykw IWsۣ ߾#yxS'Okxޭ3)OG @ @ @W@vBz=;[_#gW:7ߩ(twqUu`fF(~#D=sy I! b_~tӬGcWlE@ @ @ @ 9LQs̩I N>z×~p_e칝Fi٥7V_lSgʯ9?(ES7L936=^Ǯߪ[}+zg^|PF%? @ @ @H섴rd={}gϼؑĸS'䎪t=>?:ص-*;7^ @ @ @Ho̧xuOئ36#+3K_O}*i0ᔟ7s_9mO @ @ @ @@]d'E/ c; Vn٪N/ U􉚆GgD5ASb¡7}2I  @ @ @HYٲ[8e羺usplۖ{vgdfܥU=']wڕm]9/Xb^ֽMm򱿬x]Hg @ @ @ pZ %:C'4rEq'4 @ @ @jf @ @ @ P 5ҕ @ @ @ZB @ @ @@@vB t%@ @ @ @j! ;h @ @ @ @5P,]  @ @ @ @ZN! @ @ @ @@ d'KW @ @ @ @jf @ @ @ P 5ҕ @ @ @ZB @ @ @@@vB t%@ @ @ @j! ;h @ @ @ @5P,]  @ @ @ @ZN! @ @ @ @@ d'KW @ @ @ @ٵcHeϟ3gNaaaei믿^7{? T @ @ @ H{FrntBj´i6]chώMO?ưRk$@ @ @ @)d/\0ms @ @ @d'aN2%ms @ @ @쐶9uy͙30m6ΝiӦԵ 0/OWC @ @ @@`#+oBBsƆ1׍7Xav9sw75Z @ @ @`zf7U'  @ @ @ @p] @ @ @_d'_&@ @ @ @gJ@v™v @ @ @ ~~} @ @ @) gJu @ @ @ @U@vɻo @ @ @ pd')i!@ @ @ @W '  @ @ @ @p] @ @ @_d'_&@ @ @ @gJ@v™v @ @ @ ~~} @ @ @) gJu @ @ @ @U@vɻo @ @ @ pԅ\f'j,U ^'JKNM2iSAz @ @ /f͚[?~رc*  @ @ NU,+-]CoMlPw,\/3izLi!3; ЛkSPYޘ  @ @@8uTQQQҒCeR" @ P#4tP`Y|]ZZ\tlgCz7'~WiW$Qp3Ԅՙ @ @ @N vÌJ:פ&$]薍g\#IQoÁk4Dg @ @ @ PG uMe]9EIe%xѷ6'WuUκ @ @ @ @t 8!]g/Ffc>v'*O޵K5ᬇVonnҤZu"@ @ @ @wB,k8S! ռŕ=y&V{ _]7wqznz/ԄY @ @ @ ^ lSрKe˯w/6^wn[t[F 3N  @ @ @StjV£GVQӮr̨twnKxv~}*ٿroCyN?Nw @ @@C(**:vXFFF۶mOG9~x˖-[jÎyyyaړ'Oj*ܴiZ?0aAA'BۢEZOe  @ PMj@#?_ʂ~S[SVZy/:(1?]B= @T&Ϟ:u* .ﶓ*EJKKb"իW|QxI @ @@-d'- C-͒ۻ_)GʂatGʑ \Ke'D @T[`ڵىq!9oFjvĉS+>i-!;!/._;v|gٱcGR}(]Bjʕ+/vPC @]@vB kZ~Ss Æ bȺu,XQ+V܎ O' gYYX;7>CD!ma舡䈛?S cZ|">)&@ @/ m۶=z8ydZ/lڴig*̟G63]vM6=qÇ.]u֤۶mСC2P AC!bر#>0UVSo߾sQM֭ Q @H4bVw=mE+)8%ß5?i &Dc+ xI6mCi ͩ @Ί@xwÉ .Qpȑ'A;D=KjNUzӫWkAjvB،!///[(=zҤIصkW8"rR^{mȑ999Q&c1@IDAT/s![n-ZxC*C @H҈Yݩ $d'C~z |n l'ŅǎλuFYɟ|ڼ䈤 @ `nSL&1b„ 2÷+|_Ow6*Hk׮&즐Z lٲnK O꫓*C}HXn]4Iس!{GRBefff.]` @ @(Az5[GGwn_pM'֣Q͚|cձ[M!^g\t Iso%*]!7~"" @4 ͛_yYoQF-RO@(i&s= 3Ço]zTMRavB^AXCʩS>0!ڷoa?Q#GLjBRH=ydT# @ @" ;!-5XW[ y{jjB4i~3$Qy`ղw=.SR\<'/]ωG @htmgֺtRk 5!wރ 0`@xxpE[R\R矔aNJ\}233;v3#&j @ @deJ-L '엫M~1gy+}˖$j:nUL @N F.j.&m۶ {ϯ0 JKKCA PPP+["a !;!R  @ PG uֹIc^wi3̻2--gs uGݢ_<  @ @1 TGų{_>jΐmvx`˖-I0e!O5*g:&T:T5 @ @NvafyY[߯q$>{'NƆ04)Kt*8??{L絗ß5)ؿ|ilŊM\Ѧmk @ P;a@Q5Z^ry]vU'Nxꩧ={Fj0Hd'TC؆!l-{  @ @@zҬMXvB!ë3_v?cƌ [GN۹010⓷tZTu絗7?Xg·!hޱS(&@ @@-RR_1|CepC m6luÙĆ CC =zXbE4<설 aIi"+W";aÆ U<_]O @ @ I@vBș(xI&em7{3N{mt>**(>mNv @ P۶m <*Š6xW+l~PF֮]ɓ'?IC/ѳgϤPܵkW8'wީMf˖-/Nj ^{m2㐚&LPV ᾖ.]4" @ YLL*кgկK_%KeG @o _f[.N'f͚UšIXOoVرcGReTLtuhٲe ٳgfQ ,8͍;vlGAIIc=vѨ&GSO  @ @G!-ә?y\?|?<լ;5;G}GvQQ@ @-зoߵkצ^eܹw޽{ SsΰBHPHyVji!ՠcǎK~zҤIC :ěB&K/I]vWO>d&ą?ôᰆPR6o$u-իW QM" <Ș1cB>DP GHY&lzS @HtIlKvlbޥ<:umACI4;-@ &afT @ @^ᐅ[pᰧBر $#^ٯ_PNsW8//o- sĈBl!Æ K:bĉoV KM="麊 @ @@d'SedfNN]xpb؁.c4rL.je?=S>uF4;(" @f͚ 0`ƍ՜>Do۶Cٿ߲a?ua+IO袋†IîǎKŐPQ~GD$Fjժ*:urC> @ @@wGD"кg?x6忈9bO{ˍ9/^ޕФɄoqge.J @%\Ҽڧ]ve `=-;O6uֵAԱZkj1mHMMOGoWX6o *lRI @E@vB]:ċ{6}?P2/=tև @.вeˏ|#y3ggg_~ሁ[vո5pÔ)S*:fΜ9x:ևntN|H$t%lU% @ P';E/ c; V/ٿ~ wUVA= @K/aÆ+8 /l߾}jYeCne˖^://^s9<RL>=k#6lN U– k֬ ɓ#F&BrIj @ @eeeu u(ۺ`ֹ8mˉ=323[tҪk.;6}o ~_LyS @ @=/pԩ۷;vĉ'>-Zh^vڳgCBaaaQQQx'tܹgϞ;vѣG;?^PP s׮]#j4aII֭[z뭰C #L0mҙ @avm? _B sZ_h(ϥinko ʂ @*߰߿ .;#OG!-3gee}OZf3  @ P}')VJO @ @ @ @6jf  @ @ @ P} շғ @ @ @ڨC @ @ @T_@vB$@ @ @ @j# ;6j @ @ @ @P}+=  @ @ @ @N1 @ @ @ @@d'TJO @ @ @ @6jf  @ @ @ P} շғ @ @ @ڨC @ @ @T_ ]$@ @ @ @xƍ?#Q ''kqNh\j  @ @ @ @a ׿~'kyoN;ꫯ~d'8ᴏ[ @ @ @ P7\i[o溭6e'F @ @ @ ꪫ:wv0g9Ӟ Nϙ306^ Wo T @ @ @ H*{?Ho ,;''g̙wygz 3wγ8[FYYY{!5aڴi;r/ @ @ @nᆇ~8* ˗/7n\eƎ[y NvHۃXpa2 @ @ @4FLOx-e'L2%ms @ @ @7ߜw4.S9١t ;̙3\5wM6.z5 @ @ @4^:١g={Wݭ:999;wܹsu:7>ٍebS4h7xc sw]t&@ @ @ @ T~///$\yO"@ @ @ @'0vѣGzcƌ 3zxC(;!?k#@ @ @ @F&O}+~n@d' @ @ @ @ Y`ƌɵ(Q3gάFFEvB|lM @ @ @ SK.W^ye-Fuܹ 1Y$ @ @ @4PQEvBcyRI @ @ @C ЩS5ݎ 5Y,;,4 @ @ @rrrfΜY è i\e'4e @ @ @ jzLCM7w/Qv»= @ @ @ @@Ǝ;zjNzHNhβ  @ @ @ @A |S߳6nC$ @ @ @h3f>m>i5hwH𡬦rZJKrr5y @ @{U^XfMݍ?=f-+ @ @@trWΚ5Bг>V !졷 G6o(;VӴu^=&L}鴁ܐY~N:^7lx3o n;`P+s^Y@ @$N:UTT*j  @ @@unf'>ՙ ٳ^?Z:i5EǶn=t߫swvERbYYٺ{_֢cG-[%?>y[} @ @ @ ./BNx׫5׼W5Z[|Ԅ[8eWo꓊Glzʋ}閤ԄnMy)M* @ @ @ @ 9993f̨bT=$;,?MZDn=s~]JK}omN%?q_jbAF,sX|<ٿg6!@ @ @ @ T}pCխuzÙgY^ 2F1J'vF g=,קHlTy%CFVϔi٭];n\u+񓲒w,+O|x(w @ @ @ @ Mƍ=zʕ+S 5=YcX y峚'/ԄԪ{.nQMO>be?QTlս_xJ랽2ҩn|viN }  @ @ @ @@* 4^L%;=?~_Aa#.5k/^Lo>@Ҩ2Q1t1{.?ds } @ @ @ 3gfg'ljB}ZoN8;UuwtӮrCU;%SW(ؿ(4r쀫A1 qsT_t뢢 @@QQс=\Lxjտ8XQBWzŎg'Z[SVZY\RZRrpM9%ǝ[(=z$5U] !a֭{O ԩӠ?ڵzxk` nٲ%Ȗ-[>|ԨQU<$b @ P pÓO>:!ܸ?ssgQ`'>cQk];J OSj۳wW4)ޔլy(&@ @ڵkM!9oFjvĉS+>~ߋ/|yپ}{x?iҤnݺ% OuىKEYfũ ђN<r§cǎ{!Cʂ{>wﮬCF"|unj3a„Tդ~gvIQ+WA  @UW]RBj>m#AvYxX%{]xħ>!O v=.2*33iiwtҭ[&-,ݶmۆl wM :t!cǎ8Z*;۷o߹sgj稦uqI@ @.L ARvB;~=NmE+)8%ß5?i &Dc-?|S'Mk>8#׵2M~'v:ag/=g;i6E @h^G '>,\0*F#GžUXLKS/ :ujTO^BC8!O a3nP2iҤ_bڵ+n9k6r/rRDs![n-ZxC*CU @ @t ̜9隰S}#Ztc_jߞpü[g4iRV}X?tCYnݨQÞ ᨈؽ{0Yf.]\{!#$WC @%~ONׄh ga9] n9в[Ge7k~UǶcY e̜n3!)c?Ȝ'|גR~{M,^ @}͛_yI eaK1 g,;!jo>Ҫ @Φ@߾}á |?VHjOb8!u={C ׯ_84!Z1v 79ٳgJ WINعsgtEaaâ] qHU̚5+^ @섺l'JO'j}iٜM[?#/x7]uxhF)'~Wn]௣n!n /Ϯ#ٴTA.})_]Ɲ(&@ @+^WBjvBԡC ,}=(#ćI*NիW!5kWI:!ڷoRG922 I!ɓQ @H섴0`c_m / Ѥac9JKV-;jy>!?MRj€۫O[؏a]?XvJN$ \O~Yl/&@ @"P ķ%8+ dńoBMHݻA G}A),^8a'x}C"d'B̎;;̈ Dj @ @.ull-R~ ɣ?媧jӧkoپh^x`WOԄ!p?}wo^-1ò0>\L @gWgwU.ҨXuv۶m… WPv ê>^+["a !;!R  @ PG uֹIc^wi3̻2-->?#^y^sC&)C?M2VC@E @83Q̬ <Ϋ:Cڵkx-[$M[aBRjUB uMc[Ƕn)+9;ӲeT"vU!}Ĩ( @ @Z :uFk}Ų;vx8p`۟CUsIሇдiD O߿U_M6C爛ǏOI-V!@ @( ;n}{9ZGqANVQ]Eq޶wq 7ߨV @o*f; f[v?Ǐ ۷o"OAAyj~ k֬7n\Yf}:hРԴo>[~~~xjU%);!M  @섺xfeGv62 9^"nݫO53''^ @ @@$ޝEDZu8rH/۟1cƄ#(C xm8GӲCAǎSA~鐱R B&K/T]ڇ矟ڧ_vm ߴi~C *{տ!5GYdIؘ!m˗/5 ~|EUBdk @ bvz+ >ziӞyo/۰+N鷞~╱7=WB=:ERl-~b>'~m^sY}S+5SZ|sm @ @@F`[c5^zLz[1RKmeMzk1oHL|z&e-\z3;Sagc7". :-lDzOgK%|"@ @9 Ā;_ǜ-7ÙOsF颷86بhMɬ| ?.%)E7V~!_FC  @ @ fmbٳg')%6vX} Q*U;wa?[bРAߐ\|cnFh袋ˌ" oʧ m-ܒ?$ @@. Wn{hUV/.? muײm/kS< @ @@K_R ٳ;K Vիv^vmmnΊ < VZiP! Y!_H,1yC,9QD @ @+owE.:#gR>~Ze]G>z<%#@ao/).T WիtNG  @ @ #G\guYd&kfdXkWb |_|?OӺ1 E'9HJ)"ۈ#V^y$FL9s()bB(-"_(蓢K$@ @Xhfsf̘p׭n^9卅z򋯰Ҁm,ww_zW^KQfe-Ro9pnmS{~sƃ)^{m>]  @Z^`޼y'N|gΜ߬ezm^aSLy뭷f̘G͙3'#, ^ar 0o߾y:Ԉf͚G B8 JGt?x„ ǏJ~3S5oUd&@ @@ llljuZ-O J2ˮ=rJ @H Z:)W/Uq!^뭷^EJ^xW_Hi !@ @(򋓓 @ @ @ K @ @ @TX@tBAG @ @ @dD'd@ @ @ @ @PaP @ @ @ @  @ @ @ @@D'TTq @ @ @ @@F@tB. @ @ @ Pa U @ @ @ K @ @ @TX@tBAG @ @ @dD'd@ @ @ @ @PaP @ @ @ @  @ @ @ @@zVn\㯽q͙3~-޻! @ @ @4@[Mn 뮻n*S\2iҤhxTV5  @ @ @ @n*@&tЄ ) @ @ @9sfU+^xtUj 8C]z35\fM s @ @ @hf'VC=TK(6r˃>V̾N 8) @ @ @h"Ν0{l Mf(]L <39 @ @ @#ZkUzb-Wk)0|?~&nGƏ[ܡn @ @ @ D<>Uw߽ 'MTK(묳j*=15\Oϙ3b6RA}= @ @ @-.o֐!CxOפyjB6mZ FS @ @ @(%Я_R#Pʦ @ @ @蔀N9 @ @ @([@tBT2 @ @ @ @)6' @ @ @ @e N(JF @ @ @ @S:$ @ @ @ @l eSH @ @ @tJ@tB؜D @ @ @- :l*  @ @ @ @N N @ @ @ @D'M%χ~SOa @ @ @ 12clME'ƹ2a„ _6lĉ[I@ @ @ @@1&#CQ+l#d N(WJK._)S3 @ @ @-,c12 Q+ljZmD'ƹo'xwm @ @ @@zL0=Vz-բN @ @ @ @+ : @ @ @ @N @ @ @ @+ : @ @ @ @N @ @ @ @+ : @ @ @ @@._A.':A:B5 @ @ @ @NzG[Ś':4 @ @ @ Pij֬YJNhNRE @ @ @hѣGG+ mt :%3 @ @ @O<1nܸ83۝)̽ @ @ @ $]vYRvZ @ @ @/0gΜ:GlGJ6D't^F @ @ @رcO #%C/k# @ @ @S`љS2ZlWtBu @ @ @ @@c L:n)R"=»Zs+ܴ[,)1$ @ @ @ @eci`-rWΛ7/sHLb Nhέpvi.ٶA @ @ @@ cEJAjϟ_b ycǎjf&mj @ @ @ P裏Fo_){챡C )!&uE'Ro֢-ӦMe\ @ @ @ׯ_ԢpGwym#8s:JZ7k Pv  @ @ @! :0gΜO>r;yE] -ޣeZ! @ @ @ @Ǝ["4!G#OCչJP%X @ @ @ @@w=ztW\qEyZ Zk+;Ԕ @ @ @U]:u͛W={/|l~ ރO @ @ @(0f̘vCޑ'r6b*Z' T @ @ @X Pβs6/;5'@ @ @ @xǟ~2+9#4&8&@ @ @ @t߸-of ͟?C 6mZTI @ @ @@~ZYUoӜ9s?}Էoɓ'/\9͝\ @ @ @ 7|sB=?ju~T @ @ @ 2 ;+wMРӀՊG:蠡Cs1݀5T% @ @ @*%c12k(N:[o)qVۉ MM Q-xM0J @ @ @ P°+R(EZ1c̛7mNNhnjJ?I /$6 @ @ @h=`zZZ]q.+v9QtBm[*ONm @ @ @ 21v4J yǍ(ӧ7wԍ @ @ @I`]nKbt** @ @ @ܹs.9JrXH.:;E @ @ @ @Ǝ;mڴ.;JrXH.:;E @ @ @ @*(W\|oƢr @ @ @'0u[o\e_y2NhRS @ @ @hTj޼y]U)DtB @ @ @ @@ TjYB+[Z#Nh^P @ @ @hb'xbܸql@eV%:] @ @ @ ՘eQYtB] @ @ @^`ܹ*ތ(3Jx*PtB] @ @ @ZAo6mZ[eF/^N @ @ @ @@+To \{+ @ @ @ @79jԨvs%ql;),Hy%f)$@ @ @ @Fc=ʩֽޛD'{W9gL+;LWV! -Prvh @ @ @H [Rc 5o 2$m @ @ @@zL0=Vz-բX١6έp<𩧞Fj}٧  @ @ @!cz. %@ʕoE⋧M @ @ @:_~-R j* @ @ @ @ N} @ @ @ @6j* @ @ @ @ N} @ @ @ @6j* @ @ @ @ N} @ @ @ @6j* @ @ @ @ N} @ @ @ @6j* @ @ @ @ N} @ @ @ @6j* @ @ @ @ N}߉y'tҽۉsB @ @ @@s 'UmmL /X{^{%@{H @ @ @TN cdOQB s%N}іz)ߒm @ @ @@zL0=Vz-բNs+\壏>JNm @ @ @ 21v4PCj, :.G @ @ @nL @ @ @j, :.G @ @ @nL @ @ @j, :.G @ @ @nL @ @ @j, :.G @ @ @nL @ @ @j, :.G @ @ @nL @ @ @j, :.G @ @ @@nb &@ @ @ @58m ;QzB= @ @ @ @@ Nh՞. @ @ @ ('ԃ @ @ @VʷkeM ]fem @ @ @@zL0=Vz-բNs+\0`@dW5jT+4I @ @ @hC cd0(aK2r?~y~?}t{  @ @ @Z\ z!ClID'Ԅ.2mڴj @ @ @ PJ_~;Fl+;M%# @ @ @ ) bs @ @ @ P脲d$@ @ @ @:% :SlN"@ @ @ @P6 @ @ @ @@D'tI @ @ @ @@ʦ @ @ @蔀N9 @ @ @([@tBT2 @ @ @ @)6' @ @ @ @e N(J?𩧞 @ @ @ @bd3>]Ns+\e„ 0lذ'B @ @ @6bL0F1VF.P|\r믿SL3f  @ @ @ZX cd01V-մNs+\N;$6 @ @ @h=`zZEPgW!@ @ @ @W@tB{-'@ @ @ @PgW!@ @ @ @W@tB{-'@ @ @ @Y˸  @ @ @h'xbܸq'N9sfm7Hź^gs]feV[mÇ ]/"%NB @ @ @ @f͚ug\zc)c{NѣGOӃ Zs5㿟gzg=CkGO/'巿oQU؋;s9V5脪* @ @ @Bgm^}kw(+ ^~{m旿&lR?~S?'e]s+W^[=*^  @ @ @ @@C ?~wPhBn馣FD`%o{>fAꪫvӧW*lVKZk":f.D @ @ @ux̅7h{nÆ ?_t9o\|}ꩧfRj+:ڮE @ @ @3fLoVZi|zRoJm>LĉcLbv{J.D @ @ @j/f.ڿ-2Xn^s΍W_}5qx2G gy;XP5򕯜uYcUW]5X] qv @ @ @@,*I)wРAm][O<38?q><0k֬޽{U#O<Ĉ#qv˴CD2 @ @ @ @@ |گ⊙J.?яc|syUJׯ_{/X qv @ @ @h^Uw[}(=z4V<@cզNb-Nm @ @ @ 21v4 Yk?}!QtBwʴqvJ *J @ @ @+L6ojY}+3fIJnNow;vfm^ @ @ @hX}S†gcV쭷ޚ={vnK-T>N&]fMg6LYJ!@ @ @ @"@a=l:6h{5[fewD+;t^F @ @ @t_Yfe_tمLyEO0`@j$F^xLEgtҮ** @ @ @/oΜ93S}fR*'DhرcFaUJ˭ ǏIٮjFB @ @ @ Pk_|1ɕVZ)Xfʴi^zLsN0!u?3ݍ6h%,zJ1UɓӅZnNk @ @ @ @@Mn|b)-x9CI`{m׿PP] H֡m+;tKf @ @ @hI&TwudM2]mwj_%SB c锚mN  @ @ @ @@>H_O>\sMf>۱ 7ܰ"Te$`WtB ] @ @ @j'0{ѣGowyg\pA̝InT[og>SիUxw]wMOk~?Pma @ @ @ @@Mo~s„ DotbU# {'b^D={:H 6v:u^I @ @ @ @ӧO\#<{In= {mƻ[$V+W^}gȑ,H>R&Mtg?ceQƻ4 @ @ @~Ç5eʔ)Xgu^|tz'c*64àA.ҏ?8ioL#~;IR!:­S9s:蠡Cs1:  @ @ @r1&#kF6O۷oe/6lt }y5jznV>W\~6^m Um#(^&Lrڦ1 @ @ @@aXW^) 1bD"Sɓ'uQVݍ#;+x㍫j:ۢj"HA /H4 @ @ @b1XaN;~Ǐ$>(ӴK/t&=kp h t@Mz5Z @ ww}7sI[B =!ϛ7O>k8!t+;{IO|ɮ 4i矟]xO8%X"I)scĉӧO/d^ve2O 1vӵkOV>j!5LCb:X] qv @f8cnj^e$Ww}3v_K/';wn:C,wuץSlO~{w+S &<{$%\l @@Č>=X'K>327id6#Gs9e( @@Dj>qRW_|xMo믟Pm v- @xeᙶ4n#v[#TF.0k֬3fdu0.n":Є6hw&mL]8/%\~{[l @+K.vOUW]Չ:Ux:(B3嬵ZN  @wߙr_Z"&8Sy?ݳjokӻUάl3o6,d{>:v{ @.h3g̤ٳ#@!ӮVh 4駸nݤo 'n!C>ϧSY%f, ~x::W^9cNfu&@ =*O @@3 u]of3\  PK=6mZvXz6 묳N:gDI>3zq*g<N;  @&R @Iѣ~Ο??<^>t^zkItVD) (S "{8$'|ri3&IIo?yd+Xfe"W_M2˱6D,~_?` @D'%# @@!ɷ+gRfLIw3ȧK!@@83c5r-$d76NH i @Жt @ ~>9[ =6am?4B>}btmXdE:PHr_}ɓZh)(9_| @$˰퍐j_u*N@ @:ujo,r+-xݻ6k<>sO_={v &Bjc-0ywk%VQ~[Y fn+C|%7zBQQK,VriӦE`J>`hN9gU6O+h]|(V1RUٚSZ>^+.4~<>Af-J}]\2/,2TI̫Y[eܮF߹M:+_J&:ᮻzG:?ALp뭷w}q{de뭷Evq+.A  @@ /:_.0uʞ.:J#@^L{-"ޝ1cg}=+3gL?o~s6*>쳱qa;Dyndk74hP>ORk_~wFc3ӌYqc۪sdKW;Fx衇xDK_R>Ox8SN) k 1䉱ch!Ilw#|裏{W~#3cॖZ/d׿_:.,kݫW 6Cy#"]SO=?qرɼ1F>|әKlG/w}wzk(!n2c'n}_yD*OlJ+S xbى^b?qSDžWYhZ̔xK./{sʮӟv;$\k_Z fpBD'g?oMv7|&l݈@ ꪫJ1 {,Ibz#bG&NNȆqrH r믿0gΜOƧ>ǡOq?Ksu׽{# /@x%GF'T\C:6'>vF',S|g6ԭ2)٭Hej6 EoSW#bNzjD7O)ly?OR @-&1JQv߼ $t㧕40H'v՚B,%KKiE  @tx:y?c MXC!zĬ1#e&D=oD!?DPn Ǘ?p %:eʔ+(]TRB~QqJ5GqD9+uU؜NKD'TC s2wkάLfF߹M`ذaytv|:Цn̕q>lr/~1( K.dhw1 +փ2K*f.y晙؍?@aŘ4/s|ͧgRοjaӧO_i+t^+2$qtP!Z+yXK"}ba;'=̡=ލFm3sUK/-Z޽{Ǔ//Q,;>zȐ!q+j|<-?YHoqmUhz^)1Cu3@3k|,zbePreu>=lMaW s'Dfm⯠O<G#OdCY6 b?uM'~*jl+~kמ:_tB҅ :!t W߿R1cb8M6^yxj93_G@_^{G0ӟx9#h sz݈ Ոf1LX|%Ɖc)x3b/8꫏;|1t^z%1|OCIJa#io:ܑ~ievcD{^<зoxŻ7iEgt(zzU꯶5jT fׯPw}7b>N=O'fʧm A3T:+9ulN(~?ʌ@7XƧά٭2c^]VnSP6D'č.nm1%QTC . rKn z1Xa40'd4oڭoDTz9UmWVYe5^-6!@TY 1_!ht#:!X{q _wuBb/Z(zzc "%Ljra8sxҤIGϤLhB$ۚ!3aX;BhC#̑!#"PMݘn:"hL,B̦6bĈ/H&Dx`4 UJ1QtJL*!vaBC*h}5\Tx6߮X_#c]K/t<3z2yW#TԼju $IfO \ڿ3ky,Gy*wnS%nSZnһB# (:3 ƿ1SЄ @ /',U59~i_N.h}@E%*BS ^uM,Q]⧐/8_:m @Eqٯ~ ɉ}SOIFL @ds䋍i^ϞſAĐskN>S[lLz-wYfX}`E_4Ȉ@`,+v|'FJO#%|k_QLzE&e]N?L!~_EBmL{ѡb#!Yj$]ve &Kw}w~|S_Z@|$a|z/A|"rʯExƊ7pCo0-}]oG_2G!D9gVYN;}6U6 E?z",}za;bR @-)ヱpgo%M*&W?歜9sf^l( Gca>;CCEW yc:3zIJb $Of#ޫ脿%YECP m?) |}cɧGJؗ#s4|ve&[[x馛nZc5ڪRWcsi*z%CgVV^s*S=SWf @4@g-SJE5:Ĕ)Sb€Ey##?BWִ/6D>O:%=Vt4V9ҧdDSb#G#~bȐ!r21]LvͱwJ;.Ϙ}6-}os"j-^t05-R*"PuygVY=žs*; YP> @:' :sn"@ 283 Kٵ{|ςq3|Eoex'ƪ+B>=Rtg.Wne#<ѣGy睱$ajtAG/sO+3MI6"J+n=Pz6Xs2xX#F#*Ѩ6hP9 Hz̍3ˬ[![V;%cz3fdNؠ). @EzMH @@eFqƼW_}b΢#1s)0aB>OѰLW_=W[V5^h5,3uWgN@>uygv }WnSE{g觯  @贀N9 @@N8ᄘa6ioQbEW:?_Xښ|h y^{mS*E]T:[Lz$\N 2}TL 4,Z~&.6rx_'uiN\O>I$(II6'\ݍ3ۭUW2o]);ڙsͤ/OB @@ePYO @(%0dȐc>ߛn^(!#<[b%_ZeOdΜ9__e>x?R./Zxr="N6x 6`6ӧ!k^E++2$1WvzIw.*{׻wXkY[\:qoN\}%Lס]4pMiwfjHL*KdTr$E?}*Vf @.  @*,{ދ/xǼ?[oU2ژ1c9y*rh/ZN 04$htBɓSb#& U_[nef?gn#{ڮs˔^bcĉ;REĝ*Řqd,ϚYs .:YE[1OțdR坙v}w+wnSwhLF1E?}lR @芀脮9 @@b?^ַbvP{[yܸq]Xy'G}b> 'Cn,+S ۛlI>R"|$Թ_~7x3ꫯ$%HJ+kݕxxwg SO=U !_ΥTV]ufOn|o'?S[vWnqU:)\j,PBH*juӫwnSevJщܢ2˔ @2D' % @N NWoGN]wݕDL@Ogӻ_~yȰ曧5vLq? 3??^)!aÆw$2)ڍ bx,Ù. odNn߃>8rȢUjZjÑnc~СClS܀juShk40(:G!\F3ֿӉgώ5ǿz>ݔjT E'#)Tf @ P@I ~>餓ba @ PӢ.?yz(."v|&.{PhF,<v}ݗOkS|ĦK)kV!1&O5dFzh|喋ucQ߿GuTĩd^9$9L|ǂ&L5D?3VgX"S9裣u:s26)ngoqX5)k1AF[ \:DL;UN6mZL ʼP5mL%StBD  @ N8!F Fۈ>[o?g|ɏ>hhhUOo.;pgUB t& @5PuY'b$V/?:OS K(3O>p@>31CUĠr cW_}uLPVX+_JK):bq 7d+׿E3MqbfW :::kI'DӾ/1bDÇtJaW^e]>옛!׿bwgJJ+L@|}_ h7߼۾1~IlkOq~ @@71<~(̜93~v(]8xIL馛E5]&[١-rĤ\H5 Of x7c6_1~<}޷o|饗b3(v mb7I'f+ˌ9? /$)WJc :^zeJhݢ%V[EdF#auM7 9mfm#S'qş?xzȑ9O &{hM.V=?gQY| G;)ngnqytJ^I-Nq |O nwfڰѶwnStLw|뭷$%@(" Z3ӌǏo{ǵ^?ՠ _|qTPLliu%D'K92|-Qc @@<Ⱦ;W.u3)jIxP2XH)&Hh?k.GT3%7qE]3Ӏ={Fۇ  ̡Zbx2`F\ƉK,DӟԈEc?>W3?~` ֯7dzzvmulNreڞڻ[1,7,sVܦJw?>{L|/F @n%A>GLJGb 8ԭjX 7wE @(Sd_}Ճhc|(HhXo+ohӿ/\s5+bA#.1H_Ys58Z~#F,XoT|7;L)ڄh]'2bĈkrK< DB|/' 7*^-ӟb">(VZi}Y[\[hIz^)+n6zdϤQ%(5ޙi*?̜U;@҅8J  F}}}XO~衇.X2ݜSN9%3f N躡 @%LZ}?rNQۘCjB!sM7_)yN(1{ァzj[ψ'9q#@|X}-d0kB嫣cl{fś-B+b΍cEuh+u 7+\b1s{Q+sFxVW.V՜B{cqL?x'Xح@̢hJgWR߹M:s4vIK Mw&=uh;vץPR m ? .(T5[ͯPI @@#bnqM4)1cF oG@s믿~Z;mڴ ^fݻwO?dȐ>wS{KZ ^GTd'|_|9bMbJ=ܳCL4rcǏS)o﨨jl3n"qwƻ= \z*;W}G_ri=XߎEmDE%vuXȼO`wSh*IR_׫9?n㡇zI'S2U;3xKDpRao/]sP_GU7~W~_L&@H a1@!(َ-bѤ2DL`춻/!I/Lv;$ wq-@ji1 }? ga @TS ~\Zӡ_M(ߩzU )5\S/U  n;x طVZ]z}N&RXX/r-2!Y}饗n&Iw|%W-     ȴ5_Bo[()iӦ޽{ǿ~WZ+_ *86  |=j{vBe:0ĉׯ_W+o~Yfr^͠0|`o߾)S'1c%\rQG͙3'%~9[=R&c.]_RFr@@@@gw8СC[X A@;}?p\\rzkJB4Eয়~=zTx|kB@@ ?dbɓ'ׯ/Uw߸u1cG+;7nԏJ.gP$vIc%Ӣe˖|  !6}tF)W\9 >^* ^8@@@JSNgyojB9VPY]Z 47n\nB.K{/a[ׇz4@@ oGXB D={GkWSGK3>\H.w#vl~@fㅥKv!vꫯ9rY>裻[+(( rܹs{arrI'{Vd; ꫯ! =     y睓&MC y**V(_ɨ ժU \Ȼy 23s@@ xI4h};I8sw}y͛7;V{{{o~-^$@o/Ȕ wիFTxM诿*{!}2e>0^"_z zUE&t?KK5nB@v=E@@@<#guLt*pnZo@{챎;J!kq~WD7U8!  9O=|>۶m;dZ\㏧+q rKQFg1iջQ@@+PAA1dIHN:5?~ƍS&SO=5 W0g] f͚z5eAFP83G?ܾ}{V>?ŋD~W8%^qxqe{    &+WN#/&Ԋ: `a#  ^֭[w]w:q={-2oWI)Qz¸qeʔq9gd**s;82;Ip<٪+?5jʴL@@@@@@rO~O~He>^\ lٲvիWW2LX_:w/TPoKD -… ~ ,K/?\rڷo߶m[~eիWOkM&O\Nj-&6@@@@@@R`V\٤I?ةSSʍ:’0hР;;#*0aLx yT'N<^j;־?qdenG<2Mg7{r ̘1ў={r 6dpT!Q>p}-Z˖-6a￿袋$MaŊ'l 3;dQ        S'Hd^Rd >h|$?[nUaz 2>N?s=׾e^zYPPpߋL!3G|ᇓ&MN2.Z{+YK.kךիoVoOYmK.D?:k,IЫNȘ@@@@@@@-0zh=_D"7T\9eH2eLܠal֡K.k;d\8ꨣׯj£>zE_靿z8 gu" ?^͸@vBt       aHnпܫW/e̘17n|7?_wn?;ﴯ,X |ɻ첋^mٲ _ݴi*`,jժoq{Nv{+D@@@@@@^XpAӫɅ>[oo nkWkԨqI'%RLŞ7JAFhh߾2eʔ,zKraV{Ri8eذa\\ᣏ>5o޼\rz5B\s        &\r޼yij/42d_=m4Ǟw}wŊ2qCΝǍ#G%qRJzaҥG?SdAj`?[oرcaaa|cnFaA,c!\wu=rG z5^8 O?t&MJ{} [ڴi^ et<^±#`ϸɟ@@@@@@(((097xNC 馛JYo߾2NȘ.I odf|@@@@@@'?( lcPre5ApӶboذsӦM}Kqe G{Q]wuƍ۷ow<$0Ȱr*ѣwP:u5jώ ?C4ɇR-jܸqNdŋ#      rOP nZʽœ V68sd Adc>}\frʽ+_}ׯONM{R$gqF0e>/t&TVmذa~&HNHnJx'3,_^H[@@@@@@@ '䞠P.+̉; z9r(35D N_R%r*U>SIplO*{j*L 7<iv|g}V&kH\W(͛rǦy|x5kڵku      䞀^Qv֭0*uرf͚W_OQ:ԯ_O>iΝ+T` umѢEqg >l̘1 ֭(Yڶm+p?sرsɒ%2!jذaPe˖'d'dLǁ       y' )ԍ ([(N38w+_duȒ~7efI9!       @ <WiӦ[[/Ec@@@@@@@rVZj~{Άn`7WC@@@@@@@ Nȿ6'b@@@@@@@ ;!\o       @ mN       +@vBQZJte      䌀3Hd' uE׾cǎL@@@@@@rO~O~0"%ps%'N|뭷ڷoߡC@@@@@@@ IO.i w\x7d'QbK`ժU %@@@@@@i`f       )@vB~;Q#        Ys%@@@@@@@SlwF@@@@@@@ <³J        D       @xd'g͕@@@@@@@O݉@@@@@@@NϚ+!       d'g5       @/cr6bd'T@@@@@@@ ;!nz%nkd       `; 64mYѬ6΂/r#GtA}B%$      " eK-XYfy8A(ytNȣٳ͛@@@@@@@  s/R" Gps*: {Yo      9#`'h/L !s9@@@@@@@N센krF@@@@@@@ dBr        y       @d' @@@@@@@; @@@@@@@N!       wd']0       ! 28C@@@@@@@ NȻ&'`@@@@@@@B ;!dp.       @ wMN       ,@vB\@@@@@@@ ;!@@@@@@@Y섐#|2ez#@@@@@@=A{9g$N<—kҤ}ƍu      䞀^aEJD2\%.3gN0}{΁@@@@@@{}ԩS;v( ۍ ;%+1bժUX       @ C|3;U@@@@@@@_@@@@@@@pNǙ        d'o9       3WA@@@@@@@ N߶'r@@@@@@@ ;!g       @ Љ@@@@@@@oƶmJ<͏?Qjq *t֭GLaaajLm+jժV#      @h]+:SnjDO97|33Nfvߜ+"      \P09 9-c'M      c'iX֡N:+Wt}jժtR!& &qu8q>i$jF@@@@@@@o3x7]BOk={3gR| MsFաC @@@@@@{IM83 &L8$_ݢEt{y?#;І1Z￯@@@@@@@  s/R_"43 |?/az9 ^-[e      䌀3\9=Td'dLǁ        ѣB pylʜ`N[P@@@@@@@ ԪUOr9/2$d'@@@@@@@ ~My$;2       QڵkAA<Obd'(T @@@@@@@ z*Tٳz<Obd'(T @@@@@@@ 'e~3N0]       @7o޴iӌݬY39CƇ| &uC@@@@@@^qsu!;!g"       ѣG[]Q={tc$w!;!F@@@@@@@]'AZjep`$!;!D%@@@@@@@"# R@@@@@@@ 2 BAAA*g6BŝN">F@@@@@@A *ٳTrTd'D-       @J;MCiAbNH` @@@@@@@͛7oڴȞ˝# m,TF.S@@@@@@@+̽H /tyr{<),,4ZT@Emvҥ{Ǹq{o+I@@@@@@@ŋwuuԙ:ujz|9m^dŊ}Q/_^֮];nQ섨`ߴiӴioUza.       +W6i҄w7Lo'efhB7f͚8WB@@@@@@ {rgUV\pA٧ēc'FfpժUfU       @`;/Nm۶+mV^lY rr @@@@@@@ ;vУG4זG!5ANH4!@@@@@@@< !.ld' T@@@@@@@ ZhѴiӔvy4CkS"B@@@d`@IDAT@@@0HnPJBƙr_`ժU$"      HxXbE:uon?U.]Zvm.3vB7.!      d_@RvꨇlɟU@@@@@@@|H!yϗ4t`X_fv0        0_۶mkV]lY :aۈ"      D[@zcr^&Hd'֧PMfΜ)-yW@@@@@@@ ȝ3fpЯfO`/u~Cv dP-ZԸqN:~/6fT@@@@@@{rgurP}|<_-6m*od'[gO>tR9~/B'H@@@@@@0^@ ʝA%{7'H \fڵku      䞀^aEfD={R7̋r- i       k~9gNH6@@@@@@@ӧOg)N@#QE@@@@@@@"-@vB#       "HT@@@@@@@H        D@4UD@@@@@@@ d'D<        ;!D@@@@@@@ n>*       @N@#QE@@@@@@@"-@vB#       "HT@@@@@@@H        D@4UD@@@@@@@ d'DB|Je      䌀3Hd' uE׾cǎL@@@@@@rO~O~0"%ps%'N|뭷ڷoߡC@@@@@@@ IO.i w\x7d'QbK`ժU %@@@@@@i`f       )@vB~;Q#        Ys%@@@@@@@SlwF@@@@@@@ <³J        D       @xd'g͕@@@@@@@O݉@@@@@@@NϚ+!       d'g5        5WB@@@@@@@ ?Nv$[^r%[k)8@@@@@@"" `Æ .!#hFWѵr& <"59rAԧOjG]@@@@@@@O-(q͚5߿g\' F<{l}yt      䞀^aEJDs.\Pa/@@@@@@@ g @B ;!dp.       @ wMN       ,P>.\ꫯ~7[n0?3ׄ V^W)  6mZt vi:uTZ5C&@@ @ 9N Z`ƌl2]@fe $38QF袋䎅c;       @\s5Ć@![d' /&r!&@)@@@@@@@Tɓ'k.ڭ[nK, 9uׯzk , de@@@@@@-N8m67i.E>o|%KgAnݺ^Zd'8@2\5jE]DB|       y景դ 7^Q=W^ye֬Y[nZKiR&(IˑGYy/?~ 6lٲethAUhAWLF砑RJ,5aЂ5HC ̘4) hOU=e`>y FтYo+sK@fv`A ^|F.L)hUMm ЍЂ&тn܇A3ۥ5XZ1Mkև,99hN[x A/z&K ^@ z|f߯K2[%uiA$?O|W,oR@@@@@@@@ ;!UΉ        %@@@@@@@B T9'       Xd'X@@@@@@@@ P        ` `YPB@@@@@@@ NBs"       %@veA @@@@@@@ ;!UΉ        %@@@@@@@B T9'       Xd'X@@@@@@@@ A4Oާ겻JkJ*M:jD)SgߤSOգ?#`jj%?M9IgluSl1T`zUVQ.ZZz#E  ~WoNGc"R#:wH[FQ]ڪC$[g7Ek|j m=վFǷ}<>>i}}_4K=Lx 0}/>Oi\[MMQ}>~Jg*`,UPQ= Y=79=ߓt٨LՓ -ݜL@ꧫۓׄ2q(ܝѶ/ϹYA(qW Wmpj:폫+A >c{Gg5y+e#3ԍ= Ez]e&D1'F^+uŻ^v˜IwJ޴dcխr$:×+b/:_6" NO*JYӁ˛c1B>I \7% :Kɧoz^':v1nw$<Ì_yJy<h~ciKy>u)m6@j} 3˨L:Y|B[0sȱ1'{@jVz2h`Ou{ӓ=VLQ=I+Y$W-@Y+ dJfȍS&jq35Qe+un2;DnU~x ]dn-srj#԰~dr#q*VoyX͜gTJ](p u)Rȝnתqlf5(^.ݙ\cUӕ&Fkj~vG6{յrM^<~|G1L݂~G{K"`$<^L1%HyoA<LD^DKFy2'P)_b^)OfcqN7'Փ "zc= 4'D2'\9BՓ "@z2ӓ (dRքNpuOSM}V3L4DGyE* wΝr}*8ꋌh-w" 'Ȅ)qȀ'_dH, ~)'꒨!XOUP/|%0`XEjpleɰ #iyquj7 y z3")F}^^4H1$l~eu$ʊǏy<¯z/xR$<^DK?y<h~c҈yG>eNO&Sļ<+R  nbIO1'D)%Ɛ{2hNO& ~NfDFdШL@od 0.+=5a#Z4ׂL:|N"S}/6ns;n~JY)<;T|4gevm|ޞj؀}[=5ߩeꔫJl$8&MOinEcWr~^n_1DMz23?\^d4ۗZnǨMTT}/b3?P"Ğ/z[$ Vɚ+-L2N|)_^թe0]yc2&63}{FXzrren|'㐤UǷ5,Y~Xޝ{"C 7Px1S0ucu}BU2%HycHcy<(hx{韨 1@<^4gQ= LHyB0s 'y7+cZO [Q= &3'PeidШՓ -ݜL@|e'2lD@ )+j:y/&j5[rr]>Jgz[Sբ !w?X]MuV+~Jf5؏㓈G ˽y=ѲeՐ+5[wz-|T@g|2S=?V+g~o5ՠUuum>NZY_L&IsGVQWޣ^GhhaV$[Y[$KzD^ЭsW5>/aJuJyhx{iD&y| >/`$<^ xШ>O@Yd IY8  #rDeо~O&9=4'oQ= 4'[9=4H9=GMXE Yd01>+Z`=?޳“-$CSrxIy?Z4f$"H[,THFq}_ 9St\cپ)O/7?f2A Ջw#bN7jU,ɿ%F?]G T&'^>!5AoB U fbUAt\$TE}Sу ߜr06mfǯ0:M{L}LJ'Q}4ci}4gQ= 'ϊ= " Ι>4^z2S 'Pd Мؓ7 ШՓ -ݜL@՜L-E@Nਖ ?)d* d]JݥzgJQ]e[̽EgS\+kET/5HdR%a|;_>:Q%I!!IFHc,uCƓ"mH瞠8buaUs=Ӂ)%(+ƣGk5$/[C3/yoOע$#J~o2Ӂ 3fiy:84 7ו*/(65!/C((ɞt} |+LcS^%<h`< "@<hZOYFdP^h>+_`tcO+cZOլd МLՓ "@Ӳr= 4'{FdzK7'P3'S; ͛f9nnnl[[mn-9}ZvUEFoUЃJ rx܎Lk+,Q2/^wR ޛ7G?ƊB&GEn=X.'h/k0{2b@O}_/͎| ;(nA',~QTudu! \j9ƺu%eC/Tker)=& B+#}d<&YBy Y\ϓ\',z2A@YDA3c *cԷ7AXvV .@Cz2hη7Xܳ4@ "@z2AhԷ7AՓ "/46"`@I7M{grc/d_N>Z~QCS̛JqGqRc&y#g]wrɵk*auq;aVXKYf9A^2[a>AhVQ5"/}S:F۔oQ JY\3NU2^ Q,XlQ+UTT6=yQRww],PP=!cgƉrOVmFq 1uaI[ݶל>Or I6<&*}d~|+LcC[%<h`S> "@<h`S>ESn oy| д>OYFd0rYrcqN$De`2lVO& Q= LM1LՓ=@z2AՓ "͐L>p iuo #˯]#T . 22NؼEI횼ȍ@ϔU-S& 2C[wnuRʺI:k+8ɛ|h-,;,mZhEଭp &S6f41[۠^줋yWCj葉 yIz;636S V^8f<Ӳ!Nie'AJC>_auo?n0oy 0 >7@<-nKh}4cy2'DWϊ^n`tK}Q= LbO&Q= L~%LՓ=@z2AՓ "+ΐLq/#` ;RYnt\\k]k"ﻶhf?:yǝTx0|0fnm}?]Ep6͔<{Öd 7Kkf?t=۟ǷqkRSjEx:.։%5A gِL>9ZA c60} d)_Y_Jw~IZ,v~םԁ sm+r|xpוTFI V']l=}^MzjUJe?뚄uQO$h4W8ڍ>ĄUXkMIn;?oe': 20WBT/o<Ȁe-þr2jmv NHhI+2])WY?_Q1=~3j횫/4~UG (G_O7G=Y%(Q uBیd4Ȼhr7_R&(ѹ}ك^'Oϩ1$䣤 +PGZH!1b5jb,$5)mAGSUh<f֓=@Gd}58gPYL=7hNO&&ݼ!M@ӓ=H{-ݴ׋Mzg DH7ՇSMfZ. ]uGd/睤˾!kw>;޻. {ʧ KOsz<,gլ>P_>U#OH:(,~b+I 끿K|:85:GqW1TN3eA 2]oZtV7nPr?7!Ϩ9 PB&K2 M u|KǪ5 0wzﳄfL9j=M,[T4֓7}$;! }`fϓ[G,K B՗s@'gVd ' " Ι/1ۛRŞ#MFۛt6'&H{>(dJŞLtdL ;? Rf}B vKXMR=1;>GFx醎kUD^Oⵗܧ^v6s,gnW2K9G@bqT՞}/w'LSO_ޢ4׾{WU\d}5GGzH(Nw?cm%ӑHgեw/vLxyz+.GIdya&6NwN,^B=Ĺ>O[0-C؝5 /1")3+=4Ub0sHq;xL$)UQɸ 0޸ 0޸ ׯnrO}MdL"$@vBKAv5{uuZ-^bjvNx ) :\vW֩}E%(˯gRR~)UϮ]gHSuwW;U*YJ)E:L,H.5{(D֗1!3 wz5% >ȭ5IDz呋‡4RcR]/W3f-}1 {46D|ٰ)Jr5%pqǨnJD2)}LB<>}n~^>+}Yɸ 0gDH " Ι1/1ۛ VOTFH#K|ٓ h}{>d2{Kjw2X 0Pl6YXX*ݞzbv=)/\7'+ Nn_dhNȽE&Q8Dw:hX+qDvs456nMÝG SOamIyκQC]Cxz9re°rcX2pޮ?:M/4oYuw,$˟*i O =WGR W7UHnPEH``W3:D[:Ǔ$RSG[!HH|)SF=s5Uژf/<+à}OHMCjVWPr"I~-/0b^)Ort$2P  u <>N頮dԗsuI^,e_N$yAƣ~ x[^>=({9epT}{PrU<?!yf/[8e/\%>=({9ri?"ד)m%ii/gp ~N{Prv'A vz2BOk4K`z2 0U!_z2%^LГe [zTz2ސ=0GڢޞMbdlӎU}O(yGԁ K>HcAk\,^3!7&Y#qn9Cʇ׶m[yH+DzcJ{#j̤]wR#Go95Af247ׯeզO߾ HT5\Բт+I^xj\/]|n߾Omyۂid=OSfYd`1)D~}dX;*= 'ŧhz2`_=4p#ѓ`=ңғ8@/D_lNXDX~{9sOrxQFC);j {X})(}ܔW>eʔ͛7Wz 75flS<~Y Gu!pzh:*(2&}W:Fjzv{d-(Z9vCT?/Tc?R3f$ģJu;`4iGPWzkԙ%ןjq~<ʽY>=NMJ7ࡗ&2XB"_H'Al]hF#/<-73o&\YOU–<%DF KOc'jqp}4 ZP2jΛQ{r,.BX,a$z\ "f'+(;J fJay`f/<*QayLkA< 0>O?u_M?x nt9hqN3'MqO&i{ԣ=~{f={(͡IJqeޢ:s>բR#-I'yoDh7>ޓ+@c+7iҍ$˧ْ&4G q|piTod{ +;8t"P_QȚ&,zHB߃7uV%ܢz)/aϟM!%z_=cC;Hʗ˥.x󭸬ޞlVQguvY{.\P9^pHLa<5߾=a㎈J@%ԓ>O @y>5Xcx)g=HA93߯_f,Y0螌퍏|e'W~{W)Oo ۛn/ DE,FTe#Hd>|}|OfZtscϓHюy [cx)g=BбA93ʘ퍏f&hO S>ٲۓ1@31Wƀ -ݜL@^쀀i}i%էP}󃵓b_Zԣz=tӾ)9; 9!'ʔ"A֕&[uijސ0jHs{rf}`UvUVYJfN uV=G T.1O%LcE[R|JzqYcUc81K]Nx,++*Ѡ:C5GƓnZa]*}Vϓl-ycSLgi=LFYDA3c"+c7h7h`O&`Av7@{2(gη7ӓ ( [0\l6K 2NN^-'MAfǔ/s"D%ˉtBvn5=s$5Abqd MmvW9OĉNZ_?z:aZdqfX+r~Xn$Mr;SԹ'\Sq y+ KžlOXLx i6&#7EK/ݽy($(g<9Дy>OIV)>Oq2!oϓ t,z2FDA3c%+c7h7h`Obڷ7noo JM@od 05 H[VM&ffl|Xٟy軟(Wc>gmkҊ*R%,UΏV;J_?J̛*NUDJժCkȷ}y2y|k}xEV}V5ky5޶U7>QڶUc t9KԷVM+uX˓okv)u.ˡ}Moyۈ>OII)O'%KV6IfgQ= Ln,n " Ι11̘:}дJCM&?ٲ֓=@i>s -ݜL@&قd'd䇹m.P~o֪jV/[wDXo1,{-km5 a OM'[CttUЮƅd89>VIDAT=r O_j:k3:UJ! o]>0Jre魏Ye<;/V,|fyoA u -j$UP`)URp"XQNhB vBJ M8Z2 hBINGz/ܻ}{gݻ?sfn0; =W߮Rtc?1.a}h>XR&[}ؖ'7=!ΈC~crVWg\yƁ4Q3 <M"';fd p\551G99cY/Ligof=SgZ0GEe29LuQٛLo͞Kdf=Tw圽wH/$`}4N|g7zֱ~Oq~HƱE\q3ҵt^ IgUy_|(7nضcn*=Y ,ҧ;+8xz{7aAOwûߊt}ttUlAtl㣑fݲ^׼޲zJ4:%[[181KxiG퓎Pzv«΋$1.5W =ǥxnNZoEz\o{2^{A|Xk{/~Ɵ_XؒWVH:CH^8IJ^5z6"_וO2['yZ]}rzyy!k2.TrLmV9L;uHssP9 SٛX;ǂ9,*`rd ckMdrXٛLr2LA;a(]_zӽg~ZKtgNΏy0pQzAug+ysLY\{q+␃߫.?Dx&BܝX~{n#u܋]M9vqeSܗGJ ӷwK.o>4'.GՎcik|_~ڵcQ =?>x5"݆XrNvbX|Tr`<9^15u,v,HcYqobLݿ> eR|k{q.oq8~a>yQS]oSMpn\881HVn_W:K̋rѹW'%b痂J?nW4uX` ioy-;5so4V^ߍ%8q,]'`ҽ>4/vJRiyr.3d8xxsȖHSB 1SUʷ3.>nERhwX_f6~WJ?u{7pʫO=K;igav숫WW8"|tKFgz}FEݣr0OL]Cr}̀yoϑdmJd8b0:'-LWB pwx0O dj7Y<{/B2|u&!Lft7`g4B|V|ip/{=ns ψ\[xsb574.0˓i{Mq4Vė,>~41kVwnmOƉvs"f{MzÚ}VG:"J>B't:EO\Q1՚WrhkNOxkǗ6O)'O]6;q< m,UKr^2MM󌓗ig'wx&;q49̱+L!go8c]0k%d2YLuٛ<{/B2|+MCz>/@z' =R(xw]|gg,/mM~uuTLEdͷZ9D[9Dy k2.9ڬf3#뜱R”p&k3fXB&5ъhlMKdXٛ|f39_M!P;v HOdl~T]Vw'ʰbŊuM\oޘ~{?,M̩WGz[ؾIaz&6O>UnGGGŋU+W^zt]t7ߜkKsz[ Ħm3u7Nx_XpD$҉BNW#R?IGuSV=itD5LW`<_FlMr+=x8HҔ#wlvඪA<~.]R>mLƵsfs> oQYyN<*mf9tkvP&3J4f7)g#LFe2ԙvP&ө#{HL&_`g^SCk!H*qqe+tc}zW3W 'Sٹ=i˗U6 2MsuH=>e7<3Q@<aλ9O^_k[@7a+4_JC@&Me2m,Lf`՞^H&/Ց @koA!@ @ @ @; u$@ @ @ @$w0նX  @ @ @ @@z'4n @ @ @ @`N+ @ @ @hB@&m @ @ @ Tb%@ @ @ @MЄm @ @ @ @a;aj[ @ @ @ @ PM @ @ @ 0Lz' Sm @ @ @4!wBI @ @ @I@am @ @ @ @&NhB6  @ @ @ @0 0L-V @ @ @ Є M& @ @ @&J @ @ @; u$@ @ @ @$w0Lck&]Ig6>{㝉F$Ы5=S1 ۾zwH6A`m_}|)L`ڻ^\<#0$>>$ @ڻ^,MH@UVcE]`^pM$@ Ym}3`m_}|Z+133^g  KzWf @O^]}nL*Pol"(,bZUG`;vt>!0-[ho͛q?>8Y/]tٲeY7du 6o,{QCaG@;8 5 2 1 2@IDATxX%$(bƈ9 f1g@3a831g1, "Do{˂;>s==տ᜚nBcRBd̵ʨjѳzġWLmt8ҩ9gO?L$@$@"R{\X-5%s_ɆMc*WJ>rYk%6 aaHvyNYUr![*}mCQKL /:8ë׵C J*;z3]0˗h^ǽmr|qIHHL} nox4rwuk Ljx"$gCG̤8bL /}ӭ[w@NJ7E߇UH($*j{Eؐ &/ԖHHH@@]+|S)caٹGbh8z@+KcZ_>Gqhźӝ6HA B $@$@$@RNg"xnoԔX5KT$t˖WΏ83 @άG.=r*   (2qۀs'R.R2HHH ș/ }!  Ț9QC?e,#db]!  (Hc%Y4{&5U)rW ]M;ڥ՞ָ>ܽM 42ܩl SHHH@qJ[96, rs_?M5a}Bu7+Yq6M#_nccs6kwb_|v>+ŔT}J1% ~{&ka%%%P{Zgvpr|=?*/W޲ #}_^{?F9g^|Ȭʱc=zsb#]H}W=>"Rp|߬=fbv9tǮaZ%JaE]r-)ZDa1aF4}l.bh*E6YjZX!7HJ13ѵ;0zW+OzWo'U'(fB}S@yu]=&%5mweTQS7o& Zʮ9Ҹuo3.]i3Qi$2y #߬K=(š"DZT鰨HQPVQiϪS9{E;D>0{B"h$B8/IHH7+z프w-t)yjE9VehɲSw|l=3uo CX9uYFbU44DE   _%Tƀ-?D?}3HObTjصn"151To.VQ7ٵ>m)d~zuu )BE#6q)F}C\3x΂1;E(P/2i-ؑ `(J@gn5`m-VX5#Zo9`ު~5`k咇۝m_y*&Ny[6e_n>RizTVfZ]8B?IaϼϘ{xJ7*oոz =:z))E!o<&ҵ4ZQ(nD obhlmC/iꘕi7 C|-ˈ(Ū%DZWURN6bLMcށ4RT[W.*ױKP*!< GsT.l#~adԔ䟫[53Ǭz 2t j4293{+Tr]! ʙ2d4iV:KV 65RfI6AD~v.}Z&HWxKvJQFqh,A|XF5>2-jN*I!AтzŠIW{7HK#rE9E}=rJ\̩"ܵR{&r,rW*ϟ Q)V"}}ЍYN5&LH&wTw0cw2Nܕ5-ϿKZDJrE[ɘgRy3vG9yL%H"@R]O_|$drW 亠ٿ]+fd_2w"wd1waTׯn?X^ϝ+%fDNT])uٿnξ9g>=/xeEJ JHnK0Ys#rCÆH@373]ͧRMRRpFNP& } %1QuzC@񭄺/@l<R?jx&8T3)-9qSS]^ګ_ɚ%!<}@c/NKIO&y2 ߺ͢ u<&F?N8vxy`61Zrk n%`wʶܱdZj* _ E DŽ} cuqݯ5X#DDIaw_c^Pt+A'btìH~5bZ{tK/:235NIN΢*"g?y?Эwе˗&zPpxWHjJJjjUu3ȴ̏z֕Ȭdx.zfrοS߹rdΘV͵LE@*Б=;VΝbs$}]uwO0e0ey՛/TVT(ovvaa(q#B,*4lhU>2_?GWO`N3Aطav^=ytb]aӻ&nҾD:9Q;ό=/9j%557ϢF%~?w.,^l&n_;2!.J14OʇwX֨u]G=xMϠ8հ=ܖ/RTDzRs7 5Ӂr1;"3|jmҹ]ϱJJJgv<ޡs7n׷jfPqj6~n0Bٲb]ˁ4c k msѮ}e,~\e׮rm=J6 ݜ;.dH@LmD@E {mlܹxIR xe[g>p |V]mrQ-LJZsny9ӵs{]=a`R 3d~ ~3n64e))ɂ J>c]TxHIJk^~z=m\<=n늉W8gNY%!椤/^9:jwvĶU ^'yy/]A[pMq*=Kױq,!>pLrph]v}I6ާJ6|ܖ 3CA lkًڂa{U|_Rej&aUqɃH #98D~a`(j^ע\ϷDLPQQ]]^ y  -WVrҗo^>򌋉4,^QWp796:R ^?_wOW{~Oᇀ`wҿ&-+ 729G8bMW]^c1]NCUmв> J?[ouqI˅9wݥaNq[Ȕ8cvOg9pM%e{\~c!\{s~wMkCGIK:kۤ!x S u"_HQ5gik 9ﳷk*} "B]C&jED9ΰpAb$YNM1߉AJ◢%ELb(Q)tܡtn8 ?}x:n{/G3kN1G(Vܾ|q%+4T(u4.k53Z"!VXV3D8hXe,^#爷Uqo+D|H Hkj(mmco^\XMܻzdc{q:54p~L? f]WSmf,yߤ ' m<,P|$9xt zS:߬"\v-xt3"W #x%D|YT"99iլiNXq5e"U&׿-pQ ޚ?Yh(35O@ddٯ눜5m&.k_!wJ ȇ@2NXhBNX ?9ߌY1?Sa}~O4TͶ'9sY=*WfT|ڙ\01 j{QژFc0H4+ҹSB|gQzT'Áx;0L0ur{omn \i'- ‰]YRͮg]C-c9!H$" b L$Dzo:$oL7D' xm1^;L*Uj歺E;}|7d/AjaJU$Pݻu'Bb+I8,Y\Cޒ?Zz+V :bŕD34B0EpFG9wg@6Jȋ xՉr$o# +A> BwP[\L!l+.#܄Ԕd5" ~ e Xs&^J29 Zg`h}@q3…ղ(д0#;Z Nb¼Yƻ$ 7%R̝ϞU\o'9JNq N55*H? O' [TٌZa[@".OB@C¨xx:C_/xffqa?&+ ݪpD6 bĭ/B&bFYȁfeTI=N\ޣ eH ?y:= ((W+᫪vS]_6İ3X6PY7sz3k3&sr^;y$W<ϻ I@a `rV5S:b?'lxbÛgYjFa Gacag2\^7;х6Gc_+JKBX֨u]G+Q(qVz!l0dJ'm6yyˋu%ngH o ϗ>,kaڼk#'m1#y늉15m:wHQ-]쁄$?GB;`L- w(BNnK^;w3VLP{$Nlh)仉E:ݱ=;PzլU*`JdbYÛL|6T!ͭ?<6:Փ~Z\7{u]3t $AAl>Ի$rDži<ћ@~!Nla)8%3t1gHM`mzc\ؘ(\P=6G=C7y;毥͗H ~\/$넟?{[o*)+"Il׃%;l l:vVȜzf$MJZt8 m6hC(}̹. sZ7Bp逄(3,X!(1ȬۤVƄPP$] 98 ˬ5[;kWlrCv&H"D # ߨM'.Ь…ę \v- 4(yZ.zͻ[~xh"zw</ BZw=8g!qo_DUUmǿ讒R ?ef(Qn x.2D53M@"tCA\ dQH~@fOd',c_C2Ă0.aQtАwۛٵ7~vAL%,g(@LY VͬbdG .L#3@#Gw,2eŋJya'aϧ\)\h"$P ?bY5󆆼{g&1 Q7RHgJ \"Բw%~))5>_RE$&ʗH VqbF Ɍ'w|=9- !Z yU@ coR,la@kWI3欻)RE565KNO\شLNKQH GJwss@'Tsk9I (^\h['t_JBAj }z7GE(L N[G}ʭm6D$@$@$ޗ`aa윛۷oc>c+22F$@$@ ŗOnɢ\I_Bѱ p fHHH h% @'q >Oyլi+=4e&|   E ?_±"^ӷA$@$@$K}s_OeNzoj  /N@NbT5jH$@$@89/xNKny "q> (89Y ^*ոMM%eeN݋|SP=   J+[1 ᡥ7ѳ$@$@$`gЧ^12󵝹@M[[P=   JHk-Z[Ti }_;">jp/lk}QDKEUN'*&_MoՋ:Grq(UN!?,إo½nPnPKGtuP<}1+dSN뤦 ҦDŞzyd/.˳[U ;G68%99w +<|-k|RS/y`BjzM~~bn.?Zq촅W~jjJv$cw;AshDhpZg,e sNK(>POVB݇,cYE'gv<ޡs7n72o5ݱ {3^3a+GP٢ 83lksAly؟=VBjjjƪ b9Q; Ճǩ%''VG6AU}o]>qjn} }R6wݬZ;|U};kgkmT]yˇvxa׮/"Bvfjaڥ,*]=ȴLO+8bNjq16{AqVUDz70.YQFnbKyzgQb=25{\< U6JOG/M]vmBf!ge$*f Kn]:ٺz`]>3mt|+L4t_uTIsJ6 RۻqHQJ0?{l9Ja N 777 灁9-B_Yuz&Bg+TgckW^m;{KN_mTakyy.0sPv>xXjU;c]TxHIJk'%&劲g_p$ޑŌ~rܜm <^k /pEdGϑgvݾrİxnkF^O]^{q sQ[AQ^>w8:UTe9xtf(@UUi0YŠhj3)p|F:z}'- *=ʑKױ߼l:|굳{K%V(yC/=Nܺb"l6}vo^31޹z߫<=whCc;**ae}_1Bm]=NNN] n5*^8׊uxbЖш>PuXB|(%\0`W%J=5&H@ 5.AO3k%J$K:x;mIrxmE?[o50S3>7~oU*9">(SHDGK;0N٤{=력kbϣ<+װ< uzrx4lƶ}.,kU]xсHV}o2< xQ36")))Uj5}ζ .@_oA^Һcml[!z3cPtd޷7zOC8V%k56Zkj"wO^WwiyjHK=C e K 9V9_HPh ,{|3ԯJ"Fw6j?E&wKee厽'ںhN*dR(Q^H`pnԿArR"G#>a1 9F!úFz4-o] fn2V5_#$PCFo"(>!gw"2័oO[<FkA I &4tN,#1R2ߦD ]L xsF>\AomOƪ= 1%!.!.T1>a. g`_ԐFY _̢Dv("D/DiQoAQ t?5y٣[ߕFBhK/4h݋j5Q137AWt#rf?8--;RFQeJ0*KF޿yC_H~f`\jꀺ=p=uc++gxPzN!?g@ߞ*{Ÿ`_74 (Z DW>c]Q|;k CRo7+>6QXȁ?|m=o E @V9go]sE8$h%(CJ'i@VSxkS׃w!~>Ԣ:k rb2:uBԪ c{^< CfCaȔUx= ]}=!j P^}|tfJ"46|1T1 MZ&‰AE8rSfO@PޔA>a~d|w1[lbQ[g9mS$\ѸDe6dreПF:U‚pca 扴;2 BD*#)3{vHzmŋ3M H@)rڍw^8T" Z|%%UUKd~S_&(O |͕ 'vRxK j5:AAh%>s~=[v*q+F34'{81X(/ xbD{T+A֦߱b#@y!/0.P8)(İ@fPO [YȑZ?<=hf $aܻj@ $.<.~vII#;Z _k lpyPM% %ԆWtԪEv=M ήiG/:hN(SjNd|Ug*XZYDE&`.,J &!sċ tpAfaBDR/ORIx܁G;Kl_SByߣ-0m>Ja0a)b0B$@$@$(ޗ`aa윋%%%ݾ}r}r\4"$@$@$ 'h"R &HHHCVpHHH@DV$@$@$@!@+?8xA$@$@$ " +!sD  :-L ( ޷oΞ!pQ-Z,b*m+ {xCuJ[:|m5ҡr4L?Gn1A$@$@$8d;PϠjNKaO똗|u.?tw&  P2v26}r\͹ӾD]J31HHHC%D*f3zbq#75(   K@޾fQBʖWR?8['  B@ošZ<ݺ!%)KTc/' Rm%5A.oRzof&eZ$@$@$_#.Q+wWj:E   P(2vW̘   !FԄHHH yKwssKKKˢU3HHH/`g$@$@$/9]wrrE)!  dՒ @'@+!?BvHHdDVZ  h%G }x vVRUt^KOKgO`yRE&  P%ܜ=g϶=T}yР,mѮf   ' [_Qv6@Q}vo-?[ne֤2z\Swq&  P2%kMMAڥB<(Q_Gu    C+[:UWUC#9!ڌIܳ?,*jjŸ?Љ$@$@$@@@V="춭u%4M'ť&' wSJTԁHHH@lޜ?4fM[ 딱PՋ~k^9с! xI$@$@$s ֗paF2m_Jb"zkRqӺ鱍t YV6Zrľ髃{cCmg7H    ! C+X1ikQ7!K.\hF (Z YtOIIIb,xHHHm\O   5%at՜< З ;HH7%XXX8;;炊ӭ[rQEHHHdAYPe$@$@$PJ(O}   Y HH K׹]jн|wXa3LIHHl} 7gOٳb~&k_?C-Q~&HHHl} G[ajSTk[K6C:>,{EZ:tS(THHH@ } iu+:68HkNK*L (Z J{UHNH6cC7jjZP Z BKEm[9EMK`+H/j;͊ IB'^ (%9MW7kRm+e';2!"<--'( @$@$@$ N@V…n1mVTT,tOsDF-uWi   ! C+ a[US    J(VjLxVGpZ9%_ > sy_) "y"w~G9ү֠V& ,ݢ#úRVG#]ӑFv\w!jy!-z7֙9W߭$@!@+A> dE`p?;uKǷl^V.O+KMMÑaR+of?juZ<xmrߚA/c pA}a$_ zzǰx~/RRRը y|҉+?/UsU o욍:ص{(]ql3y{¹G/q_]vmǩ%''VݼiG75>wöM;{ ?z1U@IDATutns,3{.VvzmDq16+_Ϡxsݒp1GP[WN:eĴ5R%I$ Oyo%%d?ٔ 0f_=אuta7y~}-a1Tک{WOVkkgZU+C? mgbΘV%wOڰ~e*3+}qsImd˔b/ PɦQPq!}F;?weŌ*fexUhR'Uj7{~Ε#Scg/Eº o ȍG䆚 @fU7r:.o]:[+>mjJK2 K:kq|Bfâп KFݱTK`ŞG7yVayzWdG j.!^"un}'cZ:?)]cY%<{Iל_&*JTDq3K''%JL 9{_s.䔋R,B@I ܮc8oihj[ZFk '1 PMHߐ5r)))#t&.WzƸ?*WoTEn8 B  4yu㴶a"~WNnGû^.лd@ '0aʐ Ț@[ ֘@#=glk܄2~ែNQX[X ͮgw?$&&`YTGSʢ,/ j}xE6};~KJJͤ?~]k߶zzF@+-OuзٞyfŸcնͺxq:t!SV}6uMp%L.v}[ G˲V5D֎n9BθOL)6ig\81=b]OG"ڠ'̑,\Y |(b2B5C׹]jн|(p1w= ]{[U*D\’%K߀%I@ a(&9Bc&%jj}M@~B|lҗ|gAq1QpKxDfB\ 3GK̄f-k W7 M&Ȍ6;L2e<{Nnϟ??FΗ/o/5yFC5Ml`ߜ;YmЧ[\֘wI@a@Btoe6?̌ڀD~ .!%LJZHREUU| #|\ԶDٽV‹;:/3oݡ|WG8ޜ;U۷ TU%  O@Vk\# u.aɖfe>=~} ERK:e,W,: 8Z dLYEσHHH@a 6.AaMHHHKVwQHH~Qy?斋Mчn B/A! "    gg\t ;G Ȉ} 2jIHH !;@$@$@2"@+AF`Y- {y $).埰'J.?<^t ^t^KO"L (Ώwy[ؘ#͒훳Vg?/   ' C_| pzw`C#4Y=rSȌ x{kv:1M$@$@$dKPRQ}&BZj$ukdSS|lpvisEAHHH$З-ʠzI1і]+)+W}<{MWnЉ$@$@$@@@QG|KL"춭u%DL (Z aϞ\8]UVQ1Zݲsϐ{qKc7]6wM#caAMHHH J+Wա} ^Bdě`+ }aF2m_JbBL (%י:dZ%R0S"^$}:A]2A$@$@$ dh%FM=1bƄ)H @dk%au]=ЀHHH ԊHHH h%dHHH##nnn),sZ$@$@$@#Vte$@$@$@9"0K罕`aa,Lv.#F   `\|8  h%gFIHH@>h%ȇ3[!  G $yQe;t6\Eʅv%!RAE&  P%AI1G%'$ݾ0VKl{cӇ   ' C_Bʗ/N,bh&_;9tm5ҡ25L?G+4 @:tܹse[nݹsK>yTRSL"-C_J;>0RSǞO6J:-_h .ݼu @6 hiiaddwިƍy̘1III͚5KIIf2%(ꘕb-812 ~wsM[}{cN5Ϧ#  Ȍ@pwÆ ۷8p6n܈vڕ(QٳHdVx Q3C#?8٫K˶\P艕z?Fxor b 8W^͝;ѣG`֭Bp-Ę =p!ٓ+GBe-; w[r0ALly%eSHH L8e˖H~cǎT\r6,7^{s4TIxslšZ<ݺ!%)KTcɦ#  .gϞyzz5J\:ԭ[:-u:Sga$nhctͩW)鑰0%2kyHHH V\XHvi_|%KfHJ@FM=1 hCޑ_i-n#u)L$@$@$5'O qQ///̀GJ#BzUE&Xb+D. CBBի'*xwa6HLjBVVI$@$@$ *U p*9s&ď!Cf777hu"xr.sHHH`xઢuE{"ԇHH@,,,s?,y3?YHH5m.N/(%(*O$@$@2$@+ApY5 Ȃ@6mp` `3' avéSN&P (Yf} }=-[&U?,9Roe'SNV Y!Rsz_1 k+2   &uuuLwѩYC@@ SNj8}m۶K X^iذa/?^wXYXsI\yX o=.r+4l;f[뤦}ġY|'q&  .`ooo,wCaÉ'9"={vJJJ2e00QBd0i$@[['O FF%vzcJs$ tkMk-72k9o=.]b٩.$@$@$@%{ .@ 悾>]Fo߾ zǏϞ=B}BB)0:ѬY1_7._A>}`%4oiveK4vp͉iAK?>//IHH&bpJ1c!ŋ###a+kNOOOT ŐDznV^PXrʉ䅄lMV=ZzWŸ?eHHH ZhBCCK.08p@~{Bᠤ08nܸi& It v튋֭2"^xSiVlȇ8x4M'ť&' RJl˜< <`CXp„ 0 M :=| 2H @̀V HWʪO:v8Ԧ^8tf`w2%{I JDXWWi   6mcRSS/޽;1gATUVTTbw؁Y˗/Ub 0o$@$@$@?BÇ% DG*/+'+AIf_D&/IHH~HJ@d` IV¯k  >q@IJ WP!afG2$@$@$@!@_|8   =rpf4d_3'' SHHH@K5aO$@$@7 ȚYf$@$@$_ Jb5+$ I͔% " +E+IL \2B=Z:tLqIHH~:[ 9/2]).4 O' [+{U~).4 "UD^.tt?!)&&9>.>SBxX"FRL (Z ~U t쀮&D~~o3vR'(A$@$@$ " C+MG0KdRW\J) m\tj 䂀 } pR331HHH/`g$@$@$J* O!#nnniii9O```NPHHH@vK[L$@$@@,,,*~we(@$@$@$ 7% 5"  |FVB>{`THHFVP!  gh%FuIHH@n>zQW,TQװ$&9{]²|^Va& % _[)W*v~mRS[9"`$@$@$@R J tkM;kMQcj4{s$@$@$@C@#9pIBK6|eYOD6TԄHHH@D@MV=Cڨ?^roi{qheHHH@AJxNbC>$$Ň~JIJ:ܱ FG   ' HWʪO:v@{ ii7p^%2ʰUt-YvB>ubHHH@Jh?n+UTNr;  8H$\10l'l)VHM[lR%I$IJJNII~J d%p#A\{>ۻE =O`޸v]j) ލufh>UN{c; ƁS:ۗmYNɽ9D$u򑐹u:r|d\W2-ȠïgM736Kwk QK= e2b 0wWNM[3(E:x+'FGTtbzL42-JDiҐNMMٲ<}5Uii9< 8}W^hHTA[wihbv-[H~ ~P3'CqCR\xߟ2b|4v^~j=NydFvuϣ븵s}.Аw;Vawun]Ӯ]Z:RSSOqyx,d`6 kpCħI_ a~>^E3x  R{QVK]ڪ-/ZJQJ۴h)}i]b5"D[I=8W/Sl^"RT* Qb: ؅ q2"%BIB_of߯of,Yns6sZٸoMzB&^U}ztvB6|tdϑj߼ *B|ٳ`}xΔm -94lψرF270H2W=gʯ{g-?ѸMO9?&&75=fV(UY($-g^ $`[ by{{8 c1@f%pJWkWkD0Hbh֬YE~;mQN (V#g.}iRewi<٬@Did1sTfWñ =Rq'TV\G GVGEH>ބm@>304{H@Zb$I X+Z ?^if.R]1а'o?{=9r 0e3A[[VaX({"$}E˿}GM#: *u\"p;\g^YZb-9r/ٷoHXZ9H9 d},N$&x^T/q+G6Ss10g9_,_s?o!`[KXxG_[ԣnހ\ pW̚iҙ۬C`țO깵 t3rsu6hNg뚟WkR;6vzğ >2Ò-#`1j`I9ʜ$@6`4!l_i+Np'^7v9]TeDx$:?h:ydBJw=G۴{&xĈY&DE_Wx #o<T= 47٨MXP^>^Рe&:1CaC) w3~Hkr HTݗΉK>}:n~y8x!%'G]9ǭYw3WnL˖?Nlܮ)dX\{jϭdSK1^tyy"fX90Wd8 ^Of~pĉ kOAMj1Wc*{*Mّ89ԭ;*!&(]Ѩ.y\=W7JĦ)r)(gV5<),\ӴZ4)$@z X-=//L}DȖ3'~Iέx4vK"JHHHtEZr]{U=а׭l"Űe%aHHtBދqݽ|qA~ee{&ר-^Td^:aA1HHH 8VK-!@@JU]\^[rLNH4Ʊ*} 8 N8VKfkU8􍟖Nr#^V݈K=.j쉭4HH^rKHkTfWk&|’S_s > 8Ж-G--q)l]lޯ9E7J~R KNl΍|fz 9U>5=}sS j N8PK@ :v_3. p㒿|1 $@$@$@:'X-An<[9G$@$@$`J~ c @"`[Bxx>`-k0? Ж8HH26<==}||l/G8p,B$@$@$%8*$  @ZBf8l 8GPe$@$@$/͓ǂ-TR-kٿ&Dй{ 臀cm Wǣ]=P䃹Z3[\P^L,Y(NFHHH%:[[v];dq)l]z:h*xO>L~enY+4 Gj ΍|fNq?jz{IFФ3G\RcqՒ.bJd:   c:v_3. p' ϫ\ϽAqau]3? @p A^oѰ=E0M48 '6 @$@$@$<%<=%  L#~~~)))b 8m c˚IHH c-*6c  p @& @-!D6HHBZCR  `%b׶/M.ӡs{Ϯ\vqF,\uP,hT$@$@$@z X[µۆŗAuxI:Iy( )/W%5_r`k)n^,'޽|`WMb '@-ťDV~za++t{ .\%?#rȡk)P   SqΘO﷗Txx/D"7vl~n{ףO}juSB$@$@$ 8VKI=Ņ˞5wrk<{64o ܹ_8 @$@$@$JZ _*;K,*T2J& 8/AW0$@$@$@`-1'  GRRREg9}ly-$@$@$ [%|x&MPEHHH C>p@x~s.( }JC$@$@!@-A?炒 8\Kصmzv YQӏYF$Ȉ0Giܹ7nȈSf s%\ n_8oN2 d l @J/'q00qtџ.ܖ>{nq !cǎlٲ5m?~<**y=o߾ҥK DjΜ9CBB.^ؠA|]vرc*UBbܹs)S|-))СC(RreLeBbrr2%!p=zYH@kK>Z+p fȣeŽk,o)A@$`/6tΝCGx(ccc1ԩSȃdHHH@ݻ!(ܼy[qƣG:99Ԇ p$9rulpp0RH2j &߿ؘȀ]y`~R> %Cz&P`>Ovّ>={ŋk׮u֏?fpX:wܽ{wC߿߾}|F$`8$"1zp;G~h񣳧r˽'?\&=K h$AX9 ̕PF X6mڄ80B\jժ&`0W-I2(j yd4ʔKp.ΥwyK$<( Bo8<+;22Ҳ< @*U*00PΌe˖qƨ  <oG/-[ (FHbT6Q ˇ^ H~ tȀKy,ZҥpQL̈(3 dk׆KWzxxXc nݿׯUV[յVZPڶm u>(% (wH///ˇ^ HUޠs.b|2"2L%!Cܻw!6wzv?J^٦A۶R$@! ?#%!'$ bq0#`ڣ?-Iz^8Bp?|WMr]z\ܼӰ$@رcLG?ռysW"K.|W_OSHHŋ4h/@^vرc|Xkit!&>)?qiKBb…/P&6K 8~<;VK>:vR).u^o ,u/y$@ .(Z:sЉgΜ.h@bNT:u0: 5kDw"^I6@{*Kb6|W^ Qdɒ(֡C(X&((XR`H@?lX#Px8܋|cc"v-{;]}H+[>G˶.  8 #,Xϓϛ;`EW"/oRl!A+z5o53nRc##ֽK+7YH@; ȏc B9i&1܀ G ?F(䂱ժU0NaZ dP/ (kh)1ĸj?̖=W#voA7 7Dc >^ lPg   SX%СCDa8-HH2cCD-q'-HHH ȑ#G!p`` ~ԩ_$ת#-Ao߶Jzf&  LC}]3vX'"k[::tE" ڴicǙvB`d%$@$@$ HKׇʄ$  @@SΙ3GFf!  LH B]5LG~ XK211QWt( tjvPґ-K$@$@$%3pHH2 8͛7kVj-ҡ$@$@%'Oܹs۷NWJїSRR^B,Y @ ~%ѻ; M($ @!~PGZB9l d:/_f͚́   k ^zŊ֖rh~i AAAOvhkY9 @HHɓ'u%]q0$@$@$!<~ڵk֊k2? ˗/ߤI)#~@Z|||޽]۷G׏i :HHHl .رCmԨQCwg) #X9x… Ӎ:ZUiРA111FqHH^^j ,XD V\yҥҥKٳGeZ*R,VHKFm& $J*>ުCٳgW-\rEb9k;:5$@$@$@1dСC]W\WÇo^xӀъGCCC 8 < +*UT\7,X`裏57ol۶Q#-aٲeVR$cHH^*jo9s?>sL"ŋ߽{7[nmH O10e : btKz楏x*\029pv?~||<1c @9rqKdsx8ݻ׬Ysɒ%iL4i_ cΝ֭k%#tP'<}Ng|`ַvڥKbӢV==pdKx0&oG8"6 Q]o_ZL&Xd<%d%M0Aq*Tlٲ+WĬe)SE08k,LLT$xɓ'x9 ^?_| #rGݢE p8:e˖"EiwQv,XO~rW_aoNJѢEkMW-_xq޼y8D~Kw}hZ^x 9bMC YxqnnܸaٰaCb֭Xa>7p\=ZQrt?#|ݛ7o޵kW'''h3 d\xP`$J...j,Qۏ!IDAT`~ $Z]#-Ao6mSH@oԱcGtʕ3f ,Y"C兮o CW _ C\ܹ~:9Cm6X ͛7cz4#xݻˡ`ݴ+60`Ϟ=8 %eo@@@.]p\G%P+gTP20o߮B[&M Xvm;۷LV[ƍ㙂g ̛N5@?@fM~~~݀ڱhѢc@" B & v2 'VnO!'=S.K >|8 p//s9$5'(IE8z(TaÆ駟wx _BAE !֭[_F?Ȼ ܹue $DoecB< .{̻ Z 4Z 00VMĕM1xqa4GgΜQ! `\к@A!0uVbR :AiiJoB}X`<1`úx1:%XH_e]lC77Ztr*[pANr#"Y*/ 1k!Qyh !BX6:uBffϞzaǛ=ҕ564jH# 0~e0 pSGmRy0&Tie ܬY3"2gE`+Y sk@@A+/'LC˖- _Ǎ8cX*Ӡ1дiӑ#Gbl(- ؄%#na5Âp 0gc[  'pS@ k00ac Ж0_EhGR#4s51  sX{0Bz N]IӚ??9SuQ5il = L!KoR6m#b  8l08}`z!ȃW :|0a1 1> ؋|ivdX pPfD08耡^o?CA&P rfsLS@4L@ *؄*" (G@OsN#2^t:|嗸1R{;Tg|Tl8 ]q2`9 wĉ¯#*g$.qO-** oV|ocTh_eMRr8<WE0j7x0 fy Sa=q/@:̘ 1Lk0`48@t43@  hi ` 01ӗH1G ( L0`>%`4|m,$׏L X0'y6C:%@nYtC'  1p7mx>st : A@XuM^)3_l̇Tg9GXg }fB6q    0 1ax "s%L:0 S cHH^pBWd `@aiEA|ԩSXETf?X _DJrVd>&VБ_gB*g  `0|CUTa:gVcŴ&yX4::K!Б_6s @)<IEE@ :(` v ãhP,IHH%1.4_G};͵$@$@$<?mkLLsm3k#  RHX +G6i |'W?( y6c./!MD@$@$@/)i X<3^f  +/2`s:V%,H$@$@:Atj]q0$@$@$@x ΅$@$@$@:ZUA"O e&777]]GZjtuqP  $ЦM#-!=E$@$@2Ƨ @| 7o/>j^LJJ-AUm`f  –`~{+WZc'4t N:ggf  4 +Ks⒜ -l"u4␐hmHH2txK[ZnlX6h%#[qHHH M6`9P/ *4Q3 d<Β%,7"ش :͛'O"$@$@$ DWhTXK lP8`!  K 8ر\`qdƌCHUl8,B$@$iwU… g%qAz!  0Gs^Tԑ|wv\kN$@$@իw}׎m>|Ԧ#ŠӧO?OcXHH2.'OW~`2 :%(21B$@$@$`6`x\ bHHHБvR  Ä́ Ǘ.K*eSf&  AҥK~#-P^~ JB$@$^˯o k   #i vl"  D B] #-aٲeV C$@$@F t;{_rx<6m˗-jfΝ;fN B `{M ^i6_3: 'N6B}իWϙ3"ii5$NOSLmvƍ7lЈFttٳ=zdM''>ދ5jqrf  NjӨQoK7om]v>|nݺ͚53cysϞ=ФIٌV d/'Ϡ5lv.l+E5]b4ߚɢ=1Pq d-'>QlwEIN=#Db9sh-b.a?y>hT9kR$u;[MĽғZQ0'm,q=e Z#?pJ6:qȖU.ezJABR6<+1.hNv#ř6!>ƥZODߩ\EV-)ify>)RnU$5},P@]Itl&.FIQ"!ID\@`UQiDbLo)omi]%гnp md[~ѮQ5օRrDJeK_b./,Bz dEd|MZ*.#"ZС fRNl~oYHʰIR(eH6Jo]%v0[ H~v"ƋEh3)6ͣ1-Qm,GFrʩ1-QmǴZ.ՓKz]Y89IJW˗ՂxDAܯ]J.\@nU&0Vm&5%Djb>I@_G@w;[Mɉ Q̪4 9*刪mYJ~1DUU46+Ԍ+&V4.*gBҳrQ?A~P`J$ ܑ)^S 03jPK2n-bg[NмpMOſ{S0~j D:y+j ;eb@St~ǻr%XKspœ٭P2~Z)TBEc{O|Eq9wYhoɘ1t3hQ +q}~ߏ3L "XUxRfeߍI]Sdf mϾhx%O ).%bGcZPţ@ţz#hxLxTYxT1mGdK1THxՂcr k5+7DBhxǏo\r)=jJR}37ëWiNNhcf߾NBA<Ü0[oU-od CFAJ4Nae6Ĺr0ɌݰU *zXP cE'Faz$Bs'5>noK<k`RVX8(r448txT#d{* "]zBjT rm]I)Fn@=JzDNVR E*TZ\=K2྅RՂJ8YuѬ!BGlRӈg9sQ=E`dS(2`IQ=7-\1ޘ{(e,%>#Fz9@#Vvo<6b"cp ~#F[(>*IcDI-H<7ϓn< %>J )Z $ MZPQԚ)>*gEbwi(OX !,8QP-eœfAJ^oTH4sե̣R%Ȯ.bTa$0mDvhLۂkZ9[ (=إ@tA$ 8YAC@ҳ4ĉ"gG/OwƊCHGiPr4O:IaZ&As͡nUiIpnЀ6|L8d0T/Vs"k J}G;IDi)d{V0 ix0`["2`.⳹v,)(Тc%Mf0 *6 s%R%,xY;KSiܫ_I-\ oyϖţʇӱF!y*Tl!m%D֏1MM -J45 FKc>O314WFF~.նK^YVQi8^~j5itjx(\s-?*yA_+QQEH!<͓$&s@_}7R"&.RTR}$mӎ;V 乔.h3rLJB >~rBʣGVmqTbQ1bzX8qt(Fxh9h`pX ='Φ$'?#3Lk6?GէjnjZÇ)GCRnŚl WyGnՓz$A#h[Bʐ)"D(m9/sya:I5MČ!gCm# θ~va6x. iXL) Ie(s8 NPKɉ$@$@$;/`,/ J2dg0_<<:'h i ;vܲe ~ӟBq Hf? Ϡy6c`8O4&cƌR /%/oHH2Ig)<IENDB`actor-framework-0.16.3/doc/png/dispatch_message.png000066400000000000000000010722141341123343400222530ustar00rootroot00000000000000PNG  IHDR )sRGB pHYs.#.#x?viTXtXML:com.adobe.xmp 5 2 1 2@IDATxxźq @z EiAQb 6,G^$k{9ðI6ɖOsߙof߷܅36!       F5        W^        `\        @v@@@@@@@0 et@@@@@@@ ;       W2:       k@@@@@@@+@vq}@@@@@@@N5        ;       NcΧ4|X{g??ݚD@@@@@@@h4;ŋWιc7m1LZ       &%P{'pyYћ1F/YnP ~zE9=z j`G!       @& ot 5oprj yjN       Hg't3AiaaafFAFzq'ܫ^Z¸mT+@@@@@@@@$ȿk~6kٟ|ҢB87Lacc#k@@@@@@@@Q:ξgmN}d@@@@@@@Q_`{SΟS        `v U3.FEb@@@@@@@0;{Sq}L)?=-?%Y6pqE=NGW4/9IES\,Ga$/$>ucVk RfM7yo嶧@@@@@@@k0섌gնZL9u|dMQu, v=ea'vm {IY#?~+~Ed0aFyI D"ٟ◟ޫ=tsmPQ΄B@@@@@@@h&yboN>5 bwl)̐Ŋ⼼U};ujVy&oĤw>yI;        #`Z }%{Bzɢ>mΖ5EBbE孡Ź9jsd\ ̩M8wnH0#m@@@@@@@:!'1aQy$7?srEm~G?Y +֬PY5+d{n,Q 4l[ }(+S ؽism 7U'OY~]BSO/r,SmJϞ0ee/@@@@@@@G$R7A -Lh=~r'!eG3>}SaV{ٖښ˛ɫCon$P?#/CzulfԄAG.=aA.WO9-⌶{#       `%FN8qYZT}5NSZ0 RkԸ;WvBiaA?)=-E5('[V2jpo(ki;e-_((;k)RϞ^M8'fۦf#FmL        -`BJ[{QZ H 4ښ kVNvhj\91zq? }.m?~߽EIAEd'H@@@@@@@@({޻q-0(xMj̶E99XqfiyD=g@fbswrB䥸ŲH       \vp/L?;k[Eݴ;䥒eQ bo*Β5^ JKֆf ٫(+3Y$@@@@@@@@J~Cm;yfE%i)'ܚq1RM_;y (+ez]>,5QkV}*+d,bhzhYjo٪, |;uSGW!F@@@@@@@ѬEʊH=wϛ먝N{r kEjKft;* ޽YԈ?wq-նɌߘ       XѳDt7<1mǴg?xKo;ev?fkh Sf1;6dMwʸݡT۹d@laxcZ"       ` 'ϑ_~* J71WV^XR@=E}40bxc=-K\       )`r BٷS}JKQ`Y83dug%6WMCѫlrR5       Xi ewJ8W[ԔG) a -dlIbͅ[,;S%V&2K10vo4C@@@@@@@bL4;Ag^Tnv8AِmfNzQϾ^mb5'oKSb@@@@@@@HOvsl9pi3 {Ch fkk $r1       0F|yzixc^9(+3ffq=vtmC;gة%;^ %EE׎˟l9       V"` Qk5ٲsEC nW"ZsX#Ǻ7 "ff\޺Qbň>ڟoҠTOc.!       `&r=ZwZ,~:\ڰFtuk0U~bqaffoK-ƌwE@@@@@@@D[eFK}歺̝/mn!o^:{텂4m˧qR+mlldPjЫo&~X"o&Ζ1       #ׇ[p^JRzIO=w:쩤i9v::EqpCG]޲A[?m'ϰsrŊF9WWkJKml«k&h@mI7}s(7wO^ 8L        XFgWιVFw{>!C_˖ٙ`փ=T:†;&] ~Du h"Za-z95;Ι'gѴyIAAjęǎ|^z9y_g_k$P        `=&`,vMc> WE9j{NfWk*O-r3VnT{l7+j R;zxhJu/؎_وѺ@@@@@@@r/۴vT::FۻLݲ?W?r666^Һ]{@[)%}x4       /P';8saqN5ꛟ4MiiV\LzdDX{W׆]{8W4FI ?p)tmbk [Pp~Z,vt/       Xd'dDУuMݾCAR@@@@@@@LVOv-K P[       @ ,$;J1       ԯd'DZti7e        ,!; 3w䒺CÆH       +`hwո{~ZŋzwL:~w_'?]|1,]@@@@@@@@cdx%gHM(WJ@@@@@@@KNvv~z|yY$@@@@@@@@S섎w̝q)2@@@@@@@6F%(9ɂ -[t׹[e@@@@@@@0zB,@@@@@@@sI0@@@@@@@,UK} @@@@@@@S ;T@@@@@@@@RN'˺@@@@@@@0LI0@@@@@@@,UK} @@@@@@@S ;T@@@@@@@@RN'˺@@@@@@@0LI0@@@@@@@,U Ӕ^ݷ;о܄¬,_?F.~\ڸOAh4+q"-\;־جK;       TI `ooD]{-AgfҴoYjV\%S+΋NwELB       u#`#SSv?UcC|۩7]:u l3E@@@@@@@*g'D%_l?W(7wǐjN/('[;+52@@@@@@@'Pds˽W8df%%f\phx7͠))>yI#>_bck[PKV 6v>xj).>m鹑\:k W yL0 @@@@@@@ \ұ.o :=zEU 9 @x!# 9 @x!# vAX5~xqnڹ^zG,oKl^}{?Z[-5"4 l&ۛlSw 7Xbܹ=xiӦ$  F}H  `cb F}H  `c2I;[Ad#!5v_ JS b^O~src 73.E5j\-zI lv!ȊRSDw jD}U=D`˖-/ߚ B_U=F}H ~p:}Ψ1(`=skk}КnPv©ŋRϞR'1ߋΝT3~7hp(?{ҎG-63d(ڨ˖-&zQ#e- >jԨ o xԣϭ\Aq˰|R^ԗ%}}Pԃ@*N(:+ Oajq[vQq̶)gN5.TLJN,UT_4@j^j,+ @HUToi0,V.|@'Nݹh>5-C>56/m@&VT_{z+]5+ Se3.U q1ڢXƲMBY7%1;6gDEf\%وѾ\A'N>}"fƬ˹*܃7mѾ;Um{X&&wqu 3H\*TUT!F(((C$@# T~WQXާV*)q P@}Sc+`Ա@EwV",e"PUT_Sf$Pyv¹|jMb{gsWH85B׆ι]^A-_6vő_;eQ:E;yxʫ"h4bzm/^{ާC灯|䘲 ֈD?-9ۙ/|kc[6~^ғe;[)Vn,ۆ@@@@@@@Eթg^&klAY^yvI i)P{rW&ȖN>v3TYYnq)J y&O;[?W T"       `d'$أ43a@wՎ׎RƈKKJ6ϛt,\gp;'6 ZEKO4V)gN>vH>P++]6g5@@@@@@@ d_+ s*/~k^r6ܽ{_= ifpୗ%Gh>j\Ow q-),̊!D1rϲ͉/?0.n=d ^Y5~A8yzuw^~]BSOow~jMI~lݶ8h\ȁw_)^ |S˱{=       (PIvf"zUɊ-zl-}evWv^{է]GCi䧧]m,CO ~CYst㋟淌0;@ǯ-8anߺAG.=l4ps%xsZm{^?)C>#/CzWL       sIZjs{j}UcWKaFZ8 4amfEhv~/!lT'^ٽ]V2kҚmjj(?vt"kIbLY$@@@@@@@@*N(HOS9W$8"-(Xd^5vvW-Fi;z`34hx g:%ɧOKZFEkq^M;r@@@@@@@s$;A ܐp)*hаYMn8=aw+Cry:D ~/|IGm6roj3秦G]ˀNAAzi       ;Aͣy+ubczPvT{ۥ{_yA]~OKJ uZ槥TX_B@@@@@@@*Nhw*qZ^,>vڷqjHHPw<źl*\{Zęe`ܤkdb‚j#       f'P}K{GQnk-đ|Sw埤gj_rs'/9)v疸;̸t#͸?v:4l6k5nr)c lI3@@@@@@@,@}윜K :@dZ#OdǿDf4 1P[nnl#͊ݾ򶍗l(ϓ7J:y{G^KSb@@@@@@@(+PIZG?{8eG_suG6_-Kܴ]~3W?:}eAӣ˘@@@@@@@*$;At:as^R%_5Uu6NЫoFjԔkGõ?)gN=;) )gNj{98#PRT$ l9   .h4e/Q   (PbIBz_.uuȫz/[6jqʹӫ ӎlzlVI4w_kfxj-") 33.o|J}/^|BL17". e\}%VlYެE Sckgg8@1ko%/%Y:hа!pj܀WYE@WڱGꙓ:KH8#~|=|ⅆ4 @';4;gU%?fȔJ=qέ'(Lm|,/ptsnA?qE%!9ʫĆXn~Q_o666GJ.up5+U_P=1td("XތEE! 6vMMPi˛6z@-e/Q 9 _oMMYKia?G\ A b=}կ '& _6gw׳3v>k!jl1~EkYc@ ?_~N|y}}ʾڠ 6hp=`Ý"F[,,W{'Ȣ5ńLz [kƋfq!i %'tL@JKJ6cz̶嵷:/Z7'^@\<'K =gIA߿Ǽl@@)Pο55wvv\8Է-t8ׯ(7'7!>'j-r)9kq֋MdϽ Wō_ė7Ϸu;+Ȼ9yzקP[ܬ/@u)*?|S[,+{v=NlѴ8)35LcG>}/=?ꛟ՝%7K>yT[sA5EM\wȈ'[˥WTO4yxQSƥe?/|]م@K(/YX  R;\ٽ]EФNs rk@cQ̸x!_}"6/?w= mU@B@sS_` ˿{Osgϥ e3MfuOV  "`hvX߷lg-t}ot*-'{HCT\sʝ[Da ϖm bt?bղ i"w_ugGOqB9{ Atå5J#Mom PvA1z 8b"ݸwNwpG-~~1BC 9 ]ڰ_;zϜ@0\ '!דml^O#(~ZO">c2]|w/u}ژ@38ɂL9a&٢lZu[¡{i)KbC ^g%  `.]_67m{}lUX/2Xّr\ݻ+4ph.F0zG){UY65q[]0n::Bq2ȅ+L|:t525A֋kȘV^є┵D * v]r۽<~ք67+s]F@`qNؔQ6ԋ: #}5Y#Y}>1 &. &&K"hܧ%HgW}@@ fck+X#<3/7 6dnmn1uaӐ.h3OF|TP6g}]RfdOZKlX{9f>.΃L\(W?,jo4Дu _,"_dm_EI @3H>u[x|ޏ􇺟i# `@įɖZy_Xn~zKbkԳd@3f! >kظYaWR);U= @NvP-ŏ}zW|-/9I#+xjr섦F99 ~[-6%'h7MĄWƉnbYMzrkF|X>mB&ϽP 6܂jdWWGhbʦYq1Wb]]8]{5׷ChԳo'5z뵋Μ@@@kȈzh3i}%8Ul({_J4[ @0CT oQHoypq^n ^mA@@_Kw-5MiqC뫁eG&ښDA%~je@5Q?2"^Z\$C E 6@#;A!F@@B +&Zg˱bEZrZ$F@\rɩt/eE+RεTb@0 f',R-ʔStfK٥Alˍ6 l.#غ(7 *J@Q]GqVTX=&rP ՙbEPu%V-# `.Wȩ7m.c=AU"1  ``kf#pENpj֐dvBI~^Ve H@LP]UDާFS*@0{5;ߐ%eDG|AՃ@lEcklC?L6wm(%  `.OYRXx\_T%%6 ;A!F@@L^IAH;M׆h-' WWf?$^ Ի@ǞRΞV* |]h [c 3~yIJ ef28{ rEb@@@4LTi}vC-# ` q[IAvu^y"Wʢ@@NGl ,HS'T-ꉝnNK&;A@@@ Dzbb|:ulɑ҃@RΜ㷓8/mVm,m@Cx&Tu^2*8{y jq~~s 1,ДsDe`OP'+} Р~x֯nOD5w"~N`k0jwSk,P~LSi>geOp۽c ݊ssrurn>թ?AX+1/Q놑X5,5@ vN8ݘX+ LOOLA)<`Mp@YʚPSGEEl =gDSRvIVP/U)XV{.J}]rX6 0qO驋RcG0ħX60@]El@`SScSƆ`-EOħy҆;os{Nuy`ª-vje cq 5tfXÙRK:P}#uQjlԸ&`I7wvnɧcF ؔ]Z}koyeϮ]>55Q]<=uQj\XSS:n.Jw:Y]4"`iFegE=qq^z_-#  @QN>KB=a;窕 X@>g;]QIQQnb}Z(|'}X7;xmw@0N0dt!;03e-]NP=@@@sh4cvnڝwZ PuQ{p6e~w9Fq^ߒE@@\N0'et hv$;A F@@T '!~lWnUu bIkw:;m@lƽv\~Ɍ,  Y`2'Œtי}%Vm@@@N_ts:sްv"hp@+h>rLs5%ʼn"  `d'cI::˵e_ Ƥ`NU@@@ġ{^~f݌S|v9nF~vz@0MLXˬDoƥ &g^ѼeO8G 6E @@@H ejj2a[u!3ZSE@Wvh{?w{/nEb@@8%ϰݴ;ܫˍ 33Z/c@@@3H}r¶W A@,U@ @|e&>to@@ ;%Pl+Wx~O2(\LSZU@@@I`}_6#}<&sZsE@Z^m۫Vz׿%#@@ ;DNc&}⚬T#,5znX @@@E ?-UPζϵKKJįFSd:"  `f1K&iM =qꒂл^޼NV|Je=   Dda# 33ď10pv71@0mX;{<3>-)gN'%oe@0IY#|b oOK@LD}GͫSŭC};wůQƥ XDѼZC  f,|;~kᮧ̹bF7ѻL=   f t(; &@0@_6'õď,Vtᐇ*  ) O)OY@"~\\=۴j֫M;B^   `ƚץZkG@@@@pj=~%R@NNvΪ@@@@@@@;Κ;!       `d'Xsg       ԝ ug͝@@@@@@@Nj@@@@@@@N섺N       X Y5       u'@vBYs'@@@@@@@S|@@@@@@@ ;       )@vu>wV       @ Pw @@@@@@@ ;:;F@@@@@@@N;k       u h4\y:::z'N(,,w}ŕCpp֛i͑#GoݺuϞ=t!MV$c.hȐg%Sn4cx(fMTuV |xU3γL3X=S4P9kW}+z6mH~Wyv+V;wnvvv (       `b̦cof5]HM0'ä@@@@@@@rrrjmJOO_hQۺל:{ϟ?Kg~d'Tl2vM}@@@@@@@|bcc:qٳǨ`X~}XXνlu!pj        `FYYYƛm~~> ţTd'Tخ]t       `>ƛ7>#ץAչFѩXU]rCUh      f$p뭷7E\ҹ : ,Xbܹ$(Tn       `ӦM[|O ܦ%gٲe'O,,,4W2}(}t2 !pԁR5k֯_?X@@ XqiӦ 64@Ax,0#G7nݪCO#ܤ~8/ߕZ{-Zxkm8Shbs3 ϼKnTYj@,Pw޸ ƍ["Y   @~/`*@'M} k^wk9mM:@@@@@@@TJh       5 ;F|tF@@@@@@@JN        P#jGg@@@@@@@TJh       5 ;F|tF@@@@@@@JN        P#jGg@@@@@@@TJh       5 ;F|tF@@@@@@@JN        P#3V w1;3UgM{zTRD@@@@@@(WrY|% ޶[u|qש6S_|N%ESNڮ3ghݡN%Ecs&]IKLk"y|x&@/{ӧO߿HHN%E@jQ$666===7l5((˫oT_CkK ֗|{pRKpˎtξvӒ5XgOo7^ѩ@T"iqS=I']X,+>nZ0و1vvzrI fgȢ6(,שhvS+u]ē@ ͫ޿ܬwvvuoөGmۥo٫  u/P\\\XXs_QSC@ *NufccS[7qX O._oո/Q^x1Q6խ.{lM֔E u#@vB8]R#|5+4 S3.F⹟4lg?٘c |Ƽˑ't'9CDŽ"V"PR\/Z@}YHY8{4o#{4    {Ϣ"=kLJJڵkWddQ<<<4K,P< 2x/~ꕡcfyx<l_\ ]nQkV''J؋O=0;tfLJ g~ȪLX,V+P\\#V-}W;ٺ'ۻU$   V!pm۶OMW^]|yNN1ψ'jHKT}DU 3R N)!P%Uo4wĠm$/ۚI#J&J1 e)BO^^4F@@@[憆VW}5feyeM걆hY|^eML&tW#LjJL PUzh~|yo-g;72i]}U6v_E@X?W~5nZR\sS2Rї.   0زeFs _g.|ɪf,"m`E2u\K"p^ɘBҏ10-`_t3R%olĘKV8ik]\\|yk'OIc&47Pv$?IZPDPyFS79[v}P./E kQ;9Yi-y'>P$F@@@.\uri[n޼yffK UmpرnݺښY OΟ:.g V9-!o &FzOηQkȘV7MŋN>?NG@ 3ӎm(Qx/w<޳S."޸YSO@@@8zhم4idԩ666ⒿHSh߾UtZ.^ئMz*@ /#ɟAs3tS|NO.!`d'kb@_m4phQ]޼^[8?i}2ӒҒh~zx>{!5銧w#߀` ?/)>˯CEIqqVf8='3ӧQPC7ϊJIIIVzrFڵښ:N^NVrbZ_n,^&^~m`H*j"~\\ڵŐmc?;1tFjG. =DSI ܷmeqqN>&:-v{ե/S_XwȮSD@ ŧǞ/zqZmzzzvvlyķKŰ 6#;o+D #www)i @DLr6mڥKSN4ߊ6~Y|^ߓ۠:]>iyUHri׆N8rN EFE#zg-2Bd ݽE1%5صaO)>7i 9}ms;D6DCɔ-i;?xxYn3E[qbo?u@khk\Zu9Ꭷ!w;}ooiWE㮽o3!G'Cmݘ4[ 8r lVV8ܢǬi"!l˲=ۿ=Gt=|yG|L|lSS'3~M[Yhm: t9sOtL("ԯΝ;uЯ_?ٶN,n߾]Mˢ66l|]R|䐒S9tP_PEF¡CW$겍;$$eK}ur2"NĈ"5k& Թ}˗/kvk^b@Q:IЩS]y  P 6VBO;&Q6;A rwYUa"1/QAU5% ={)d.Kc/@vI?CJN{*nРOv_+_;TP[˿/}'tAL/۠1Vj}+N|ܶ۟N/YH i֦{oȘYXNfCcDvf7=sw%j{y}邙*>ݬ'Y)?-pJS,Ϲz9B֣'?0t :s/_҉WFOf'qCW~!>2:}EQ|)~,q(h{C_?}ե-;V41귭]"PGm,r?"B$b!RRO>#^|^?yV_HS8&~֭_3,!: t-YԹca:}e˷xGvrv jǬ?rz2q߯ϽIx?"k;'K/REK4ؓKl-&XbbI=^bEcUtcw8w}y 3W7l#?*Y~S-01PsȻG>7I40JYF#>;>%   `ܹ#_VDֳo߾g'jՊN%sZgI p:[C 臾W֭[f4lU[.^'H3@?7"%u(={lhDƭW^˖-yؿ;((S2PjǎV@  ;!`敤A@k722Y4 A9 oQ9 Ô\:<6и}WN[,WB"AHDr|u7rɲn^I 8v0=9YhYUQM di:{QVHKMbtU_Ӑ 1፥ frES~R^Y%'>3_(2slc~Q 7&9<Ɵ>5-9`.G}~_05L!uBg.ihҷ+޻i /wR/rFFz `n\9׺!y rcJ; + W|ɞ0ܺlꐺOE%tvPܧ99 ze9[~_|~BlLWvr|Bh3l@@@xt>5A>됐]v6Ď;JѣG)gBw[ .ׯ_?5 W[n&H#GS%   J,]R^:Q硐؄ h9 J )1&*B%}͈WpEt|nָMoFyh!% ``(X`TKRZf"D$]-N,0JwҀ ҉ o]Qw }x`_z@nɴN\TTO{6WcJ͡uf-_6{dFt/e|=>u.#66023xKd&])I'8ǡT%~)C  Œ$r<33رc@ :'lu(ۀ9'w^*U͈ʗYABK(A@@ ::K5P=Rcoo4 &A5xDyxDy&ygbSSsyTtÏ5AH@vަ̴pR|NuKfL݆rڮ{9%hU˰iѝZkovW761Uw=Q{9[%Kp2JU߂rٮ$Hʋ'wRayuWb ywZЕyP@~i\Sr\LĞ?h3(=9L}T󞩦sPo 9tvPܧ"1Wz**ZwJ8dFl>bկ58~1+%3grmrEkH~NjА?9FСCd*rp\0T2s~_"T 5A KP"$<:S8 gz y<=jL MQf34A].5(_`^DFdJsud͂eiArdVʩ>stv iOgɫ䎽1x[jV6Qa? (z:s]&5%I,QA޺f2-'o_3?[FF-: PkЀ˧?-0CZMTz /9z~Tu$oO޾\jsKkϪK9 K*b0zfʵK46ĄX3%N;39ѵ^ĵ|بPu7#У\.uuOK5qF 䋡=ʔX~j&E?w)׃ٹi0HAYʾ ]:!ܒj:AHe/N)13ˑƫ'߹۔XWB  y-斒BDѣG͛7/LD5jԫW677OJJv/.00zIIg+ 64)[[["@(CxFqF ={,02}KRi3h5,--5"`0/a;a䅎${I7,:3|7RQXZ>tTn鼆zE笣4=\0_q/hPҒe  k6/g>t0 'q>vWJ*-cڷׅ2^zƶ4GFHMI1x@w~(_DҨ:8ۀ֒^o}*.} һukE;)1}-.AwJ [}8<yR*J͡\"=A@@p}-hm^ N|8yԔ@I5 4T,,[]Zg\Q]t ~)k*Nb 1fݺu[nmjK:3zڵkIN.]$rNdWWW+uJe@]6$\FdIо2ԥpL;3ѣ((56v&.`Np' 0`B8A )18=~۲T%U SdK^ϫz~9ոu/JM8F[8ֹ/F+eix%i;~I۴,XsT+Ǵܨu upf(oI%!n7~+y{gR2e {jTvSȰsH(5gk5lK ԁyV7#vğuwQAqxܼzy9 ܲ9ˏ@RVK|ooN;nSUGg;@@^7T-SN"PV-[((O[*B^IT___ެjժ۷& ӧ$=%Lܽ{WrB5) e˖߿'&ܯ_?b+@jʣ؄(<y\<=jL SC (oYeRba@'j H͙`"90 ɑ/4{(ZW0Rii~TX  6 v掽߱*x.[菗%']?xgb~Ҹ{QA\$n_%>ɾo}]pt/ jږr0klʆ޳&|EܿqhttQ載-{HMI01:wA5Y)6   :=zUԩSJ0YĄQ \t޽{5k֔.PAm۶MM}u|JO>L婩㓾'mӦ T5gӦM@|TJ:聹JM 2h,Ꞙ@@" *ƗF/$Y+U= wgG Q>QajN7/ǷGk@;.x{r%d0X]u0i ϡMfiqj1i=E^ dI5n|hJ;iqmkԺW:o FoԧLy7~g'E"N w$YXk`雏^ wiy+gf>{PoI٢2«.0:S(5,!EyOl{Ge܄׊@ T;Y:TOMNNu#xaaaGj*VH&Zg0݅Eʕ+'H՗FG?P5jSJP{-LMІ0@՜Mp(\aQy<=jL VC1yuxka#0 ;ABapBVz<fgf;2 KC 'B¼Ro11.Z\(_ItG^%vVe%OȕtȴrReO0Ԕ䈐Zg}|TV&}Wx_T˽fu]լИPхN_tZgIG*Z|D_ӆ' ]gq.gMzRr|CyBn,uvPܧ.aATryiز{i'بI#ttc2( zr[8^3dJ(ha^^Kb*[%"i&N@lL*O5ScDY1{Ld-@)!.&QV"I-gVl n-%|5T@85wRSTiё32K]tvЅOiF$]~PǑWxŽR :S|09o理$ jТ4دW1C   #pjDtvv }?/_J*^^^/y /^3,f,\ˡ@f?g:3@HM   ,ʨp34ЏE00 W~.z )*#uѣ L8)HUa`)HA H](NA RxUGGAp R«B?RC*Ѯuȃ|zSut+!VeQ!Yɑ%WRʩ8g'sie_ܤeT|()`܌ZvttWՅj'%h{cM{T W*c ~^Kg? T*EGAS:O漽ÞWn&&  4bnsMjh_Aqʾ EGG)'uwt zrQM"OB>qgMM_@   \jժM4Seٝ;w6m ל0e!sT}%'<6WN @@ B@[7--W+&>jL##31p͈ \?5]fP~3""bʔ)_U8RZ;NHv{}b3yNf1JFr>c/[~!.ơL6])N@[[v ] Sg&{~d'hqT8wJ.FJ*QBP@¶Ӕ9yC2  Nw*Z}a S vO);ٳgT~;P q njР‚7^z*Ux6ҥ_$''']36T .   @)aI8_O;Y8"ez=o D<<|<<"VEQ̡ME"9H___"@%Y5ai5A`,SaܓC> ؝L! ƽ]gSkfefHS&VݽVv3R.S;ӫIk *]:v{׽X?>2&;}js*_^$%<}U?rK9CgIHM`_է˸z0zj>{ ڧ>nR tF@h}fvА}bGtDӥ Gyoc/*VK#? |KK֐pr:$XRܕdIߢ05 WAavͫw-̥iQ ##ɀN8' ..ѻj>; G3 a])fś)/~lPFF;3OZE4   wVVVz~]AV%Y¦:ƁUFRRThԨj8p?Av:7e'H*п7($>MhNxۚ`  B?彨QRR\CIٲe41A0F(r{Qn[=ELl"MŋK'Jb, ;oGScUQ߱ڠWޖ%7ЭWvg'\8}orp [I~Gs7*tмI]J,, ܵzTӜD>+dfUΣR->&-@W)0ތ&Mf[jq'}#&N5'xu+h&Pa;y+6_"s\9d;Zl),@v*1a   ZpU\ܩ=záߛ_~5?xD7FQߢE~OH$4-,YA9fEw"&ffU u.=l"c~Y*"iDz#%fAwJ>m߳'w_)) y/ rzZ-xJ(t6/a j,@IDAT(4wR7nܻwC{6u6ӖM&r*9LoO|!>À&''8q2?R`חdIܵkW\\Q t[! Py!w4&SSSs+VT<*bLA A xDہGTBQt KQ()0ׯ_kbDvЪFC<䌔F3ӏjqƈXݸ}6 >{{v[Hb#sZ*|tKߋGxjy:wt0Wx6_4T:~BVϻs6"ߥ~;d.t7NKG:J>l+-6VܷeX|ȟTظWg49w|RՅX]: GgL@@cLҍwo=?u0ԱM>u.$IpOl2ľUfk? ߽Zf|\pϒ>g&Y>ڼZ0:@ =zٳ@՘o߾}[: R ^ȑ#G(c#2 U\\\N6m*odtwܡ46xm۶ժF5{===yJMرcǕ+W0G6(8~^zsfܷoQGkԨw7 &L2#jkM! z'A53a7ٍxEtjetU/˂aO?󪍦VVe~{c*߸c6X>އi73بPacHmo_a\Q7ztm./]?GKT݁1655հ-Tפe?:K?Noug*^$O}NֽwollBAzءO[5_[k; _u2`И/>Gq;(adim;TiM\@)B%-ר9>24oz[E**[06fmI~Ioe}]еPD%ggg^x75S(Ji5Wr?   /O_bdN 4 Z?v@@TS*0Rj777Ns+INHHSNOJR 7U9UVPS!q]˗C/,JP>{{{*.ߑ oһ !Q<"wu?EE.*?CA&NO>]o EvYyG&)/w<ڷ3F>wiش[k!<=~(W12nxRýb.ݹܤU YϭޚrqTŁ^j{wi]ݽkobjfbb*$`2%Grk6s)R^$^8^=5iaUOy!~ ɉMMe8w8erԄ:;mU|OD۩`ԤܑxqqzJAY{P>^>YY %UڦTwB -\;PWp  E>! EtZW^-4¦υx  ݢE {_y AGB4lؐehLPTGxD#+l፷>|Sw_eH?5jz| I!Ag?D) k;4ߊ9RJzs.^5ju[j9M)ZkiF>ѥU8dF7-,K+JSҶKٖT[`3RQ|3VRS6jJt#n&QR-M1 CUFSuTރڤԄ9ˏq.廠J! ilb:y.%F;% u6 @@@@ڷooiie ;v޵쫬¦uڕ?3[T"h]dɾ}-&T'-[ 5TY<"t%h&P~}نJ_Q&57&&A5xDyxDy&EH3bBK+"ڵk7oNtUx)W4iwwwcs\521r}?ղXպM8\~*UoDi=_C f-;Y3]iE¬5Zẁw՘VwڂC[G-rt_CgO9ͻPF\~TAjݾ!WB֞@}Xտu|]PW-Coe}]@ wpŪuZh2%Ip|wJC  NVzM455֭c)WO>T@3*ЩS61|UʕeJ>4htJYCgggZA&   йsg:,IKW^ڧiVf/xD7FQi{f_NPM_(4բ>K#M8vzsCF/~=gű 3W OH6p7 k/:~Ѧk&~]l\Fi_o~~'}M^6T;gzBcwmِzJ[[tWkoEzͺ|_>^kxK2K:A<٨/]F%e|RyW˖2}6z+rt`>u. ,^.v;Xy+1nʕ{6mׇIyj>R;ŏ^@MDh@=;2Z:th͚5ϕ+W&jժ,t60d*Lmkk͔i{ ,r yBdֿ\J|Q8p]4d4\:uꐟ\O @ п(o4 UY1bg._ipK ;^?m#GT6-ץ"4jZZږ-[4̈bs(;;L5Hw\OG9$?{aZӫ[#m S?y-;"^4_#tyTX`\lC7: Mau7y|ׇHNKNIv6nUޠVv+i*0]JrMtDӱ*9>(622K;%lai]tѝwC޷.Sg=G88i[TXq#R^[Z[XQRs9aUKG߸DG7ͫgW\_ ʂ z-3Atɕs)gʧiв{*u\3>u.¦鑦<$zIJVNbb@!IGvT)'Nb M׍@FFƳg㓒k‡ BHHHXXXdddBBBjj*}B_SZ2eʔ+WQME\\ JLL|YR"qvqqPGh_>}@A&''S#PjМ@@5!0iҤ+ G=uA_O ˋR:pLw 5kx_N7|mh`A*\}!`׮] 9;w0@M1jZ Mv6,}fӎdզ|,w"A@\eXXPY_o$98161]f_$%lZcO*5Jh@@@@@@@@@@@M61M6dGjY Po( 3i0,죬Ox3M23~_2۬JʃԄS+Ur~cy%4           E6:&EN(r~jΪ݋xfx_c{y4߹l{\ fi(Z|||nܸedI 6Ҿ(vBQk@P |iedzQ!SS&^-OrS~f_3(b/#;c   :bL`)ɉ/YϷ&/z?3OEԫX*>kȇyf#.A@@@@@@@@@@Ny W-cd'hA@>m7{5>pɦKq+v?Ό\a           P$Xդ׫H quQSu$0dT-M Kë֘O~ZO } *<(:"(&"8%%ޡgͺ:{hlbbbA`           y%q"{E} ;"|} ;y K6݇`           شiSFF2;E}?xd٭              #aÆ|;(H|Z8P81 @'yR_ |w@Q"~[p @Gݑ#p               zHOO߲eKLO`wd'MAH              E 7y ?tbݑ`7!=JʰaÆ7"6@NMMC`# ]N^@@[>g={v$x@L%@@T&+pF뀸 Aw9tysvv/aM6~"pر" tH`РA -O7K,/o[1Äh>y򤆫              P (u ; :uR KȧTtB;9"fR=zѣG\ݽ7bI *YtDKb9AL @@@@@@@H @   "P\M]:$X}@@g 4 Z.IE+bD[c~ܖ}v^ @%h`AmߎAMOOwss\+)$$̬> +Nv0P@@@@@@@@@@@@@@(@'y.r4ud Xը0U!kDw1bD^vcTf]v3fL]ͱ4Sd'za              j W5مӧOK +W4hbqCǘ!@'1C/d'?FO c               _N/              ş= A@@@@@@@@@@@@@@@_@@@@@@@@@@@@@@?d'{~ ;A1:!.^o PjQ!2,pM?ߪ      _N/%GOOJ F%t _     %>\ʗ-_le=xV_Q;媯ǟ_mjm|Ni ?/+O}21o7؟CS8V.{)fU!,fLT/G&%Js"$.2o]4q3VHM      %Wl{wvtl"YqRLb@@@@@`2 +3<1.\Qw.(N 4;;K"5%-ErbsRSM%JdNwƱQvfF3\$yjBZM[v>Nͫf>C}{3Ǵ;sUojV@#d'bCg;LJMP/[N2IF}C7!K`Wc>g?sAe6Onyx&|%o*"냫Fw~^՘%[[X框} +A{ތ~cG6~c <{|+̋>C|7YG:wk戏S}`s      "}WlܧL1wp     `B[4cF@ >rpoޥB߼r d@v^+6hrDIAy#&p)ߋG 8@ `>Q_i'݆5 OΔ̭@@@@@@ OLd c"M /rlz0 :]oys5##=:Yx:!*,jC݄ Gr^C5զM? s쾇VX@(|N(|抍x}Տ'fgf(@@@@@tLGM;sl~/_w|ϥ/A <{|±m%)@U.*\f|i :gֲr dB&Bp3aϻ     P$ nAcf={=22ݸXIGF7332cccm˕͊&!.&Hzؕr+]gB(بP{Z-`֝<ڦSYzYY(FFƮ^̌ aUҎIiT+%&"QiGWGl[=7;;K~Q6vʊ|p0{Ø ݸTNs@!@vB!Wfcceuim;ʸ!w'|vEUt0ęCܸR䳡Ҏ.vnsp߅Sɻd`]V^/i.}XjR'.`hRRѝ?e.ʛCr [5Γ03z܁ɌV;N(SARQC4A_##)TZ,G撼y|GGO_jdo}DH߿rfo\t=ӆm`:jhRۨfߥc*Ks +wϚ*e0fԼxrgIۗUj78yo_AH -k7жpZ_W.[>^yWFH3\ -wBorke>yG      #ݱաs]5GkN!o(WphyUN-3#]hXխ?211*ڷ`MW-5g'm߳kȇ&MZZ>}5b5 >g-w0]+i0V]J(0+~vͫWi_ִ27([] G-֔Z^>y-!?}v`ˏ3^9^AQ~_v3g=G?2@k 3WSjKzH*Y~˧ Y_WjE>n4ͩ rNdd7/˕+=j"LMiߢ gm^k \heS}Fg`fmf|j<舠o>sG}XAX1oM(T,(E̟|oNCutT#O\9bRѠ~AL-)Kzvz8U0Ʀf]~dVĆ0@@@@@%͠omc D5L6ϵy{Wcfm7UrdS 7`zvԤ ?zFKRNB+J>U?(UF^䇷0Joڶ|/O&Zʀzj}߽Zc:92!\~DKoɎf#`jGhQnC$w|5$S]FTS.FTrL2 C      8d'(T23Oi4tCkxy3%1̥K OrYLMͥ$\;|LZw+PktT'AU@Xa(JKѸrVݹ.Q萏NS~@!(߾VgO)/]eQ!ti3Oi7AG]$˧dee2Ap{-;"5fG)JM!`Z8`E\[Mų*Wei4sE aسa`e}|F%4BT_ EǼc[zL Zrf/cFgT5}/  ;6[XV67Ѩ]'w}޹EuKOnW4S}HM^ptv%X,b2e+oJ5⢟qTLnsd>ç1zBR{jЖ>uyt tZswjgi)]Ly; *SQ=Ʀ]ϑ6*euTųZϪbFГ;<@~}K.%ɒ8^Z~pi6ԽqWqͻȕA@@@@@  ]x_8w#cP,\ڷip sbof%g/?Z~+~/bK+I~_i}pbB\ܒ{>=j1J훛.\-ӸnSh)gdggɕ$سU&+J|/H2%R y>/RNhj9. ѭ-{ ?[XJw~BK@t063zaVO]zbo+C;ŘxZAyݸWȈTۂkJA/UJFL^#gH+E笳/.)ڒM{S'Sf_wp郫ci]8NFva     av+j0=I!>Gn60 immc'DJnm@z~o3{M% 3 }QRXo->%\Ekʷ`RgQ|t_F[1JYK^ D[Tֽ(5Yqs_Zh/J?7/å;~<5l—?2h9􁍼^SAI&M?oL(Hy]󌒚-;EH Ԥȫiߛcw?n<5I04!_mi33.U+ױ1wp<{|WB      PP; +0ęU0 8 ؽ[zcngz=hٵ8^IꋤyҪY~g!W|܁v=3Ja̴o߽76z{"S߰и| ZR3s ɡ+%`im;ǃL]:/K} J}:3m1T5]ݽJD0W)@ell?a&˗*{{nGw"odRNfT6+'߸ҝ-љ4b~cZ/HŠ%':<((?xДe'Db,ȕj'Hwlxk*wv|?JD     {nŌ3q֚]WWM3jN[?Ď 1ǿu\Cr:-c@sSXSѥ48OMIp`E ȇPz&U05²sp*.F{nrMUu&J\Ճ?ghsdUcs/EeD!.<?DFFF)Xk-6k/aI^=@@@@@@ N]tDg?ҹqU-Kh,0dV%>/~gRSS#Bh] ǷWg)kٮTreRB]Z J۾gR_HMPchxÛCjKZ)[124{<`]D"ooޕ$E˕)߻Vq^)i=kRqdICBb| qU*W2rM٣\cx#^hD6 Zvg͆-vr +u*{T)Gz1|@]3ZT'@fC> V< Ԣ[{- @@@@@@@)NPNd;,=)QkN'#)aPWyVk1!|R.b፸vsyȀj2s&-;bzi 7yBþL :!>;A^rUpVwY'Të4PpZȧ U-yy-h7{Ӝŷhb#SsSBt;j4f,{N<[2Q3##Wj \[^mʫg-=TT> Z2(H T?|{ELF;J1@@@@@ Tqs[ty?M᣻~v`VVfD;{ɹIV utߌRfyiG\K +X<s(S.כEE";!1. ,Q+Ʈ{Ãdrkbbzx:˔k'MʵFI.n z>91qTAc ME ;A:qIe/3&33     Csيn*Uoؤmccc .pFfyZn ;aA]+gAOn3>))\ /]-~ٝ`ʲd'8gnJ$rG ;4}ML Evؕ<.]-T6W Lٕ0AǾ^y?{, Ē?      =H+ߟ*lv9&}f 75A@@@@K`؄=ޚ`aimjoqޛ\Cj6l۩襳J ݆^ Tא)$^:\25h֡SBPER6NfL|Y 80S0b446%3F)y6A]sK|l$߱xh,J-S(nC1,mA@@@@@r%\ ;+K;zI\Sߕ۔m r A@@@@@,,+lR舁[WݬRUj7ԇܪh}p ܱZ,ld"R*7 &odۜg\ΓJFf^pB6&`MGm\W)mN|pu/IȰ@I.f-)̪f ~pi3"6#EE @ ;!O`      E ++k|LngӤ#e<+37Vs=j>)7űD\OrCM^]](bu%I)\`."肕GUɿ$ńgfdj;"d' ٲ i#a(&|'rN("#|87.tHʋD>N(0S@@@@@tN@ :pn atWOmډIM gc6c 2S)/KQֶZ[WUn%Z5|xɉxIJ]z&l?+?}O @ h2`;\AnR8:Ճ=_^)iGHb&P~F2p::x@@@@@%;b9":ZzteaW/=޿K2n9I&Iބ      PlRE25Z|Пנim_0W(TQ6kҊQillLGQ\8tܷi1g摝RS\A[I VT \(*A0t;n\ElR'̈l8 :لѫW,Q"[x( ? ukeQD 2*E}@@@@@d'ͪ7u2omX#N0j0cÝ"P@L$[8|TSw{$Sju[ыJ;1hlM>;!k5jS3=-K블:bYNp|):a)Q0T8a泌 \ٰWNmґDJ^s,撽.5\uK&rЦk0lMn,NU) ϣP4      @vH@@@@@ `v*˧=.[q:܁N ܏m)zͺ5i1eGN_^ΌYd0FOCʕ:bE\9W>tŗ^~TAɉ>pߏ]w>yy.;M)uZܿqQnA~e*T ד<:|#}7c4:j6qc~I6qGե1[V}y|j2ͤN.zR{&tڈ|^\;O|$ 0*TØ       P8P81 ?uS|fsV%/u`,u<{D;We'౳|ЃBc΄Ck}gee]9Ti & iem3hO/y~N:Osȟn昙[䯻N{y+k5eKb"mt:t䶼k*fЀ(N@/ A@@@@@! ")~[uռc6kJC7 T ` * Ćz 6ҋҤPN BH^f7d';gΜdos2Ĭi-T`ԟKRgo|“{akgݽi^yz>x'w!qUʆ%iCo&{۷3t~)\/d'G@ԟZu݁;ivESE@@@g#Aac p0n m sXan#ߟo3=ț)ncATTQ`pI͎*z35Ys %M@@@ ;<[ZF@@\!P:ʐWGDXH_KETѬE?z>n*Ш:wZe/ Zv}e(, |#$xCHi!NVl(CHH5Tbd}uĉZp)U[t4;ꉑȳXͳM[/C ;  zݯ7PxfKKflwT*/M+GZ,Dʾ Rd36d!(s=@99Ҥ}Ӥ ]X92 ѷw"{ t&##`>[ܷc.!3h,"  L#33e;cGn*лw;ߢC/yG'  %eуOF9q_ʅWަ#r%%o:A,7OK{Ӯ+bレpꕋn -Z,TӸ}杋ȲuSvmZcÒKN&^_48x銑 ZwT\-;gj |\╋r %Tި~.Ƀ!$GCӽٳIrаz+r)_Mx3%ׯLQV|=fH֫#/ |#u$?SStrC}P&-䣨@@@PQ76x>ثWyx>hhfWpذaӧOT:ti,T22ǁ  dy1}||V{Ѷ#fNӦO͆mGɢV4? dOx[T0%=-Աxf5 )]nۼ{&;aݒ|bwsܧ +~Ԥ&/Uan9n@@@/@vB@@\K?r`x%]xX&"( ܺ逗 *ѻ7޸,Z 챽LR|ӱ#=6Y`mU$>\ "@@@ \o@@@XzN8o#)`:B@@@%{D@@p#k8姙5}(ڢC/MErWqHO Y%Z[vS|@d܈v#lv]&GQ   + {9   `>{)W.GM >MM#฀6RH䤫MwmZ6{Dv=K*r:6n&kjbPh),}M ^ߟ{\g\:PF@@r"  y] qG~[[Kq=_gg?`Ҡe׶]{7X~q38A  3;">F@@USϧBܵ;_ <:|bó} x[olA/}\RxCŸ/>YzCu2   @n [@@pWe=~ Y#=PB .8T^< P:cÒ[E. *F6J᠀   }?   Nw3/N>'F~}<[?0ˣ:xr=ʲr>PY>Ǩݴ|<&J&P:W8ॉs|||@@@ȟ(){G@@@MRn\u3GH2a"jC!Q?]tK/]p:%%)hp@``p 54Pz#///MU{W   yNW'u!@A­sp_]1,WH~Aq8   @~`ft69@@@@@@@ y'@@@@@@@ lr,       EYO       'X@@@@@@@ȋd'ųB@@@@@@@O`rXVZlٲ\s;sNEa"      s@79d'8HjBN֜;4t.ݡ@@@@@@@ 7ik֬qZ[4       @> ;i'}Nk@@@@@@@GഓٱcǕ+W.[,55i捆VXqQ}_+kY'      +eLySgIPl1oջwo섊 5-o^       s>՛PҊJT@@@@@@@@L@I@@@@@@@P         &`*M"       JE@@@@@@@0APi@@@@@@@Td'0("       d'J         ;AA@@@@@@@L ;TD@@@@@@@ *         ` &$       NPaPD@@@@@@@N0&@@@@@@@@@%@v "        @v .l2-]!       l6'r9¹WE'I8s)߀bV"[c ^3       d'Pfffo6{%%uo^MkHpoUXq)C@@@@@@@\`f\w`׉Ǐ.giRtMdvVR       #@vB;ԥ8O<[ׯ}SkWWA@@@@@@@zs׻o\>O˻3GTZR%9tb=43=jz(xP(        %o~nٸk$vReZT^C%Rl9){w~xeU_JM        3; ;C eSBk=}`ܺՙ"@@@@@@@rE\aw`wTj֪WE}x*WV)        +d' ;HO߿G]~#lPY+ )#       z\oKOMQ6(SV)[+WyS/RF@@@@@@@d'܁=*lpRV/JXE       ^כ;GOobU)ۺ)MeQ_8%XŃ       @;\nJ夳׾/ )j}-ZTY       @+c"*(DϞsΞQ"­76_P➾zKY       @n x֎ٯ> 6sqi7,C fWjՋFL+O]u=Ҧw3*         %~˴l2d…[-$&e۶V8       `fWjg_!5j;Yzh£1mQ*       BW(pQ'РŨv4C~<1       `:qwLj!ѳgX9Jd@D$9pPZ oKԷge;        8_: _Ԥ&T'Gwt]S5mRzJ%z%~3Y뫮I@@@@@@@ 0ݥ}|z3uf&5A*7[c*Կr>T)        +d' ;ꪵ ܣ:)wu#JJRG֮R҂H@@@@@@@ zs`ī ŝ[닻w*u!#-m75J  jg"@@@@@@@rEsޝV׶oRsSaM[TXi G]>o$;ԔB )PF@@@@@@@d'ܱ=6~elf|lotQ"rU?pA@@@@@@@\)ξ<<<|8M~ /iU{=۟OM@@@@@@@ ;<[, ΣMG-hݠ;~9]       F\섽)ѵ=#M<~/8Hҥo>M;8a4       Np 7U{c?   7,ڼBqXx{PTS\z(U>RWlT?t|ρlT`?-U;ꣅ񘨗m X /\tZM#봨ӴMSx4Sʆ[nٓ%\>[PPh ڔ*[p7tԣTVYqSoVWQF<ȧ@Wl  `MxXđ*'GMV8   @@@f̌tgME@pJ >o٩Om@@r"@@뱇wggSu@g9>m_kRW7;F};_WfZKM E>u'h|SHMp @zd$UW3385%Y  @NȾ[" Xd\zww8=~D;9zوʵʅ~0}`I^:kdU]sfo>6@@dgOqe@@-@vB@@訍-fUE LM=2s;픗\Py#/ 0kʢ=sFIOK:;6.!mT` @fU>IL<~(ԛPF@@PC  <ԫwgp(#.2h;ux:|:6fԭnչ:b)U#٣mr%Cao|=tVJ!^_{x 56]t2:Rpֵ4o:PpZq*# @^o8?L3e:B@@GNpT   h\XЦKeQ]ٳY|XHXhXLN?1W?(*h; T"dxp2 +d6Ү]|夫W (S?0So"s$^>/ϛ )^l[]!e3NS; KƧutMe4';囙m_4H/;&[34v;>0d/57SNR4 ʢ>h;r-ɣ^(?7oEPX+:w4 0$,b66obƇQN$߸~1O)wk \V6($Ù3ݺuSD|tic +ڴjEUS:fׯĨ+$/!5M5z:u5T^׬hFO_8w˭)KQI6q/' Q[VJ)O+Ԩރ/*ɓl,/ҕRGT/:4[Ų<wOt)}6/Plw/Mh6۬&bY*}{^}zKġ'=˲_ykBEld? >߾aXhf4+A Zv|~bOD$i1;6,so~hٌco6LUj6Ǖ5?ܴLY${-U {#A/M\9.H&QxHE4rp, gj2,SPVJвC5Dl Ӗ͛&Ò'']Ujjt2"Ol|"x9w rbzd#)R䛡%5Ae OO"O,#z[$LIKo,uwn=bzhrˎoC ZZ*KΙL[l0:6Cmq6[\yL-S؃ {ɏSΩޖ2  "@v  ^PNsf}H[r̞MH-{Zk͜btkbEϏѭϳ _ak5%fR\M[zb?OD|M&ָsٌ6%|t5=֝{gI9#?O+^sϧ}E///JxLԷaǢwȏd-<3KyB{x]`)4k =M\M~,MO$cB4[z|˪:(e &4nTPuJr\#뫃[.7lY6oV yS^ҵ+Je}A V_iǞh|ԍR8Yel%F]'e3>Ni(]_gSd4 K|z`z E#u$]@Yc)|髋Dw_ʌ?J~$F6jrU,[0] ;{ec7OoDdF|(z%ڵidX)ӯ ~lX>P2Zld'Hb+س[Np'K~/uų!%v$W|2aɌQΕYv㦭$(ݔT4g񒹟8J& E:6CmqX5IyLI&;A oL-XD@@NO;Q @@E 3C O}b I '4:+|`ƇY7ej6lw}PH2YycU$|Ӌ}I ik>l]j haj[KA~٫}!*2Lȴ-#}jz+㍧>{Ga̕׿O+m(>Yص&ii?MwۚgNT~khG}j$@9jNul4F-}kLo͕#5Jsձ  d'oEM@@2I|w̡ ^CQ7Snoo E{ KN2ѴTԑ.nG#g}23X3ZwmJVǸg:?`m2Rw[[+E?{03>ٝOCxݦJ`8فa$ŃԬW5ˢizq*O/+hbRL 6oKR|oS>IF'4Zw?NHػwk*Ybu~M;EI tcpSS=^-V0.у[[7YN$xSõ+' Wv[ϛ?YzC``)MIn+Mevɰ-3~6MQIN)IIv4כ~/M@@!@v V! L`&eAfMdٷ(:ꄕukK3bGkJ{~Zj +E_kѽJ, kɄ) W78M~ZAf(S>R߫NvFE?UEKkraKBKyy[tCfs?}'j ;A49ܤ$']ĭ-O +Ye܌so=(_AAKdצU:g1l7!:|=ZD֬&PNdɌ \y;ۆ:h6I|> ;ƻk'-ȨNN)3~6͸Q Iߚew9SU+zVmۺ_%#Dd@@;   9.N9|]RyJ{RA *}Y^~/U^TZbk2mqx_|~/[!Ջr{{Xr rܙ1?^"ZSoaM NoS*dv^dóyU#cʃknX9G?|ԖU6 9oTX"f&k b!%݈?J3yOk9F;pV^8kc*˖x'iU-"߼(eB$)tn)uXdԴ`2˕?'(Wm'jf|ˡS>ַk4.WH>'<6]ae/_gg3r-!^} 5ױNoӌIZv3\IZ  Cd'8ĕEUV-[,555zzΝe T˯p@ʍ#K.:;/Vw%΄*}Y2WI2.}o)7ԛ(}T6ME[uIML4W m_Al_?KBr>n~b(#N?M]H C! gG)kxԩI{*õ(8p~7wVʅTkGqLyjtfb}W(eF3nZ+QhmCvnZefi$Asko3l> zݛԋLlSAR6冭\)ۥfPH,}7,WLTk"f)ok^ ZAwjɢ< ncCƎ~+uČӤn?SF/~(j`0;4ZkN6&Ư7+, 8J sWmܩd?j}*Y̲F3nr g'ڼ"=-M"OX9𪵛k4ͻXKБ;Tk"nDdeI(,Zv={}SUoJiaR.YS"+K!-&bhe)'6v4h'nh˄e|:OxxrLM֬JuZ5ױNoӌIߚ љR7äI/0&@@!`X66c^}>N@j7WݕKgΟ>.|,HVHv&`Fww)W!+h&w~L|^\U\O-}%B扐VմQ.fiZ+_8+7?syFA0ׯߢ>DZZΩ8MȵKHEg7z1)Ñd|;2\k؎FJA?yd~6I{/U|`z{6٣F3nպM:-V\3V}[̕笭P,>;A?.r+6v4h'nhg^P2 (RMu.R_fq_1W"BZ-%bүc3Tަ7j5r3\]IDnֲʔm)    ;AoHǎW\lٲl6W7[bѣΫ_  :l@ߩgw, 2{]'EΚ>GoV]?gN ߔŬ=[WˏDysu^/fR|%A.>qdoeȚ+Sn\eJiŒmg'q4}kWBKj8V, Oq]T"=l™Sg2/UND>;eV͆Xyg})&4䡦ܯ͟9.Vg'h ^-:-HM||w#䤫+Tyt?{6HOڲB~tۮ<džo:Ѧҽ;6,HW(?}L`ySWGdDۧVe3NΣtg!ų3c8ms`HI.,WN0Z[Ϡ}9\K׷k8h j6`#0J7̻i F|M˕Pq;B@( k']K0i#l6 ;fy^f_9?Am5l}%G7;Ӂ~jF5gݨ$t3\2Ra>.u4  d@@P45(٤ԑLl8^|]7zC[[wk2.-HJ|WneF2}çm_s }6=&"Ch"ENf/ygQ8Aߟ=A%mglkԔ$}k0b &xi5k)a@*X[J]]s?qӐi.3bhtsq']:w*MiDl,z9r4lڿ>@IDATMC}a7-X<,W' @|l9;7PrOV6$6{6[xיRo&aM(   `Mk2@@az)XFq`ZiT5O=Ykve` 5ۦK=.p_JPӤ g+k"FdcّM,W.ڮ`iZ+ 2Ѳ~ǭ`8B*Fi)>=vNoAa G׷cXp~qQsof%U.b)ڢۧL^tEmy|WEY^fu`U>d3>YVX :6CՉm:Fm޷&~LYy)o OA@p^s#  .V!f:~hԫ 7j}o@`a}+h֖\kן8w,пLoYĆ)dX'IZe؇ekUVӊWD&pɰ:VzR2vqXx%*%rheL=M呲 eaؓw0g4|beĒe*{;J\Ade_ . }F>2AJrR7\:Jl|8qQw'4ftEKa>+e [v35-8qa])W`ۆkݖLU`'ˡz&6~6[\x,iۤ1oԻ  /NȗB@\'Pbn\=eFԝp8;hv?ڢC/u9)\bl]s`:!ym^8s|/͌fMַ_tc5g+k"%JҌ!!uDep)͢=M=⢌/(QF}džP1˾3&Z {{|"(ͪ v-RF +j9 # W)A̘b!% .(aw;7 uZDZ'SX'Ch,gju\ʭD^XЯ~‘k6{lM-g/koӹ,}y-_fM3n}kϔLb4TaT>P@@TLq@@ 򪵚F 94mbY(x6'f'(˃R{ ,*DmYuݢݛdR8S)(d;,ew\[<,Bų胚L= ]? *\8,\y ;=v1X3"ak;A*GTN]e'TS_Gʔs4ٿvvWϞԑ8[ﶬ])뷖"q3"MޯN={dž [u3ܣL3O"*.Y>n^Č7 I.=w,jM<ͶYwqռkV\Uk7߸r7׿ ֟2],O{5c^[4ױNoӌ\5N~+m:]UsyK&"jD@@ xCD@@pH@[㋥T݂&}AZXpkf}jsqG5qYG2<Ȍ2OA͆2Bk5AeW)+)e34i >l]hYJBfLl)Bŕ?}1鵾2P*'<5eWەN?MJˮ,,Gl5Y.-o񘧗w椫ga=vKYdo@o?eaI1c[.T23)!~սMa4㦡G4+ޡ T}`^c!Ѵ/ӦL?Df77kXOt?7Mt6|i|rlLOzyN1ױNoӌ\5IrWadʵu(#  `D3j"  /j6* _<,.=-Ͳ6##Cjxu` eay0yL'@5׬JrQ?:ԩTvvm ⚞↕s.Uǥrԟ9pG٤Pa^FRay>9G1O=u*jʆY{ܝ>kwk~/Lyhjm XVkk˸kj[|$X\Gu~̏_t xԱ~KPܤҵp}A~.ٿc]rҵtyI߾yvחO՜1hMC-:?T:64uLZ AwmZ6v{\r/=\MeI)M0.oje"d#3& 9 [d|s' #d:6͸Q yߚL/l4g g(#  `M@z@@! #<ϰBZMekU Zt^?5d'es֞:M+ȑ۔EKA^)׸e eIN'diyЫl[AeQ No]䤫-7kS^#CQꞨ2ȄzRų?9wDJ Ip&Ӥi?.ʜ?Rλ'nV~ FG8Srf+I=}t2m 26FwzII'Rohv_ r?͘ ? x)t1_l6 ĤoJ[I]+}AүrA7X{C;%W_s{xQGlM-w݆&Z2CXi#5vvm5k^7E55 l)keJ&kRRp'K^t鿎Pun&ݨּoMҸ[)%ܙC)񪵛gRE@@Q>  nn%qڪ,Aac! 㦮yqy[c9urN}юQoFϏUЯ=yju[j*$]: bVF?_FЯD䭸f { ww2vE3e8W2WH`pIMSwjST߈hٗAlW3c1j/>~h\>wrgcClbƇь`oA Srk?7ed[jVlG 7rV}7W )]=]ɲ'.;ױNoӌ$Iw3eA8$>j\IE@@ ;}=G@<^Y7>[IFM-3AmKJ g}k]R.ˆ Uiҍr~M$ř~Le׏\@@<(_<`  @?PR͜?IX/N-O6dKĹ~XHIk5e~[W ?7H :Noݽ?F(eؠy>~{zPiGeRصiֵEuRd36d /#I3`Zy_;5}/GOIZ!D{ w⠤#(]z֒3h䔯#fkcf̾qpFMPWȈ.W֬R/RE)s5j}:rFwM[xXF(2wƤQO$ߒ7_H#rqPR(|`f{ג2[ߍ.EQ`p ySrRJw{}yo$]GUx5-[сfԖUGn?}ġ~*^znHmה>_M$ҾkZ٤ ~dhXc84i_ i{`zKHQ>s?=yʥW.ȐA!aAo-}ɡn޴kûڻz⭛)2Cb2K5,jǛ+L0:dw,yCc$Y z] p][VڻE*nL$3VѬ]O5yG׿INMI޻mͅ3r(]-S 7Q_tc3TۦI7jY;[7ϔ|BtrC-0j"K:H@GzoZm|W^|0}ذaӧOl?tiӦe-7ܒ7 "g#@@OҒqaxݜ{g l\5ok}ԭr)&0J0a6E}@[ӚE3e KPF@`<;!4tfe@_IL˶ߛJOM= ߓtl dzxy,Y3[N3G&   \zEEl"\~ ,KM(r Se2嫟=&C l^J5 X6ښ ے1al?)>> @@ =7s:us5}b\îj_ܼyѭ@fzZJ3ƕtOqTiA@@|#0?Ls8^S15qYLN4߫hL$1yLuSO';A B!sl;ނլe@@$m=C}=K{\  @6< -phl"ro}'V.sSү"  O8i3>~A4$]bleCA"Nh٩Odv#GZ?NiDMb-:YDI@N~{{hXD@@QNpTɗ.Y87{HO_xnYu}c{h:U," νPIW5GkӲ!#YT9ӱG=u35YSSBK^_H6d_xnm|=#&ŻO޺fJՄQd+8Ƿ͉#Xt.w:Ur A@@ d'Й-JJ\˗։4 eZ+\2LLӜE=_ص-{&;njΤKG^G~U|C,Y/ );:U)  ?GO{xvͳۆ^$03 "E)ЩSA@ K󷦸/&ё7TG(#  mN6]N7LOMk Gb>qLFc {QYTd&\֫J|ӸWw;eAYE@@  y3ymɜ)_!s(rGû(iiadž%1{T,{ "Rl߆@~@Ulؗ @@ 0vB }w}ar s{ _kkZR'%E   R|2w_>N0 YZ9Bfz<Ǩ)#] m:u@ 5YsW8ॉs|||@@r( 9+'_M<8^^2å=;$aDF"@@|)Q?}]tK/]p:%%)hp@``p 54Pz#//|a(yt/ T$Ƶ[7S xx(Q<,jf#絮@]mߚJ6sy$MѠ  ,`;e4k'c{~rpdM{ԋ@@@A­և&I!Az|U~\_{Ϸ~'ߟP@@ N5{,^g_j7:3qH`Ek*W];}JH@@@@@@@Uչ8nPHno& FcITQF{jbK DP"UPЇafv{0eO9sZ^[kkfsޱ0'I&M:ܫ3 <}/:DE  @ @ @ @ > YBo>ʋ.Z]l{{ш6 @ @ @Q@uB5:ժߎoʮ?;̨[7!K @ @ @Pd͓v{o89UkurѠ6 @ @ @]@uB5(aAAsuKX֮'㦻m&!K @ @ @bP;iMIvw?c j[w Є. @ @ @$ [iz6,[]GmxC3MȈƵ  @ @ @ @@ NTjH;ƿM|o:w}.^&aP @ @ @TꄪqY>x?o۾Gf; j @ @ @ @*PPeU1ьW_&Ly˽{sAUm @ @ @ Pb`R0r֌/.an_zȭJ?H @ @ @ Pov(RMnkVUZ @ @ @ljgϞY.5 @ @ @ @@-PP66[ a] @ @ @j@fm n*wLL @ @ @LD @ @ @ @` Pn&@ @ @ @U&:ʨMD @ @ @P [ƻl @ @ @ PeD @ @ @ @` Pn&@ @ @ @U&:ʨMD @ @ @P [ƻl @ @ @ PeD @ @ @ @` Pn&@ @ @ @U&:ʨMD @ @ @P [ƻl @ @ @ PeD @ @ @ @` Pn&@ @ @ @U&:ʨMD @ @ @P-+GS9- { "  @ @ @ }]ed NPЯ_ҥB féRk$@ @ @ @fG[. @ @ @ @@-Pf'\ @ @ @ @Z$m>|𬬬ؒ֌DÆ 5kVZviH @ @ @  ^):!} qf_duŽǁk @ @ @x_uBw5߼aoeϚrի]g @ @ @ @@iܙ.TU[٘FظCM={_OI8=?w㪹ϴzvNK @ @ @bf1cK`.uɥ i9_O鹄. @ @ @Q@uBZt^H17^OШmmٿa6 .:;{세. @ @ @K⒌'Oڵor̆K˝ncMi{οdw- ]FϹkVFw=UG>R,M @ @ @ g'FYD֯ʐ7˝*xBPgѠ1ϿaiBphvw?iݎYohaW @ @ @( 1b-U^Nǭ1m+‡-QdmZ. vcql؍6Zvzē/ajw`A @ @ @Pd,ūG,iş'Ƿwn'.&7_C_C˦|<ö @ @ @^ ߍ(̕YInX5ys-^Ti6m6 @ @ @T [u>&qm32իx|hШۤiݻ~ʙ]Ҽ"z6 @ @ @(ꄲv;y k a#w?|>X;lw!  @ @ @ @z%AuŒW#,M'zT &@ @ @ @1 xvBՙ*gp5 {Q-Y\5衠=ɇ=  @ @ @ @ F 1bVghu¼K;tF6Yp]tK޿m#{d @ @ @ @q xC\ՙ'wM +hׯ ?磥 zpNzv2! M @ @ @q NK:l\xÏˇb? ?̍sUa=v=waW @ @ @(c.W -=G3g+Y:eҋn~ث6m}/'߫ Gj{`ZZO- @ @ @ ,k@:kCwU+ iډYu/y @ @ @ @PnzbO|Xed4!@ @ @ @PP>}VݻɔvcfJXv=/y%q @ @ @T\*n n`̆ k:ҹf֪y߮](-=amjӮCCwLm,N'@ @ @ @PPTSI]~?X7 @ @ @ ov" @ @ @ @@ PP7 @ @ @ @@PP+E @ @ @ @,:o @ @ @ @Z!:Vl @ @ @ @5X@uB K#@ @ @ @B@uBFA @ @ @j9F @ @ @jZ. @ @ @` 5xs, @ @ @  b] @ @ @jX @ @ @j6 @ @ @ PT'ͱ4 @ @ @ P+2kUԔ1bDVVVNNNMYPL0aBL!@ @ @ @-Q@uBl&/t @ @ @ @"ȑ#c% @ @ @Eb>}ĖK" @ @ @ P!<Ç[Қhذafͪk  @ @ @H= qYP3cտ 5c+ @ @ @)))mM @ @ @RH@uB m @ @ @ @Pf @ @ @ @ T'fY* @ @ @HI )mM @ @ @RH@uB m @ @ @ @Pf @ @ @ @ T'fY* @ @ @HI )mM @ @ @RH@uB m @ @ @ @Pf @ @ @ @ T'fY* @ @ @HI )mM @ @ @RH@uB m @ @ @ @Pf @ @ @ @ T'fY* @ @ @HI )mM @ @ @R@IDATH@uBMܬ܍VY @ @ @(@f^)y996Mv)HȬuwxaݺu%_N ٳg5c Zlܾcm'n􌌲&4 @ @ @C@uB9b>ec}z7N[iò%}AwA޲sׄaEvO:8e/Uလ˳guu%Q  @ @ @ PIPIJa|GW94!z刃?"PB۬76덗 c.Z8K:i5 t  @ @ @ @@,Cww:'-xCroẳg,9q=ι0ap>kî @ @ @]/>k/pa<-=Hh[ӯO?xqXsӏ=t~\+m7kܸ0ٰaÖw@3}~-)O|uO @ @ @ @1 xvBeH5g ҄PZZZ׳?04>M~z@BӿKw=7҄04ZOS ʓ"@ @ @ @ Nɦy:d~qua]ު>˿v NA~mjxǟWlgd|I)Ac/ܵkgg;aד~f1waW @ @ @(:!FҦZ=oNtG=lhwc7冑O}.ѡGv  @ @ @ @@\,C5-nnq=zh?v;ު]f;3u® @ @ @K@uB\eNHϬ۰UҜ=gVtX];G # Zz]Gkwyhx(o]  @ @ @ @f\)@zumVsLjϽnƍO,F"_}~V=M @ @ @':|n:CL)6Z5g=_CƜۤaF--!&@ @ @ @xC,d,NӢ˞v)dAqNn ?NXTuB Z @ @ @ @@9T'*O?CgLϬ᧣ذbyx4h4l:-`ѣ3]m @ @ @ 7;XYI:|p3^y>:_:ZPϫ27/] |_` @ @ @ @@T'ϭ*Κ룮h{ˮFv³26LP\^6fv  @ @ @ @@,ba9ɪߎo;3MF#iւ C @ @ @ @] X&ܵk{ỏX=ngGa6mv]:-iц-[G @ @ @ @  0Ɛ`ώa%{twB BtL?Nظ*;zv^ΆцT'D=  @ @ @ @  8V0ŋ=F&i[w ЄxBQHNr׮:!M @ @ @q NKyz6,[M<a7t9hvm~V1{eÒkΏhj @ @ @ @XT'X$ycoۤ֩SHWEWsU4 %76jTq5 nAã Aó @ @ @ ꄸ$˓磁O3{T;lN`iڍZ:acJsJ0&{pdfFw=j @ @ @ @J$OYfB4!xdBš(Mn>}hon ş~ػofÆaW @ @ @%:!.ɲY9kI[W/eya]O]E}޸jՒ/&v8Wa[ @ @ @(:!F2+r|C:i}y!+!7oy鹰]\ck/x4m# @ @ @ @ N qj2׆罛~ɕpJ-_#n]~?<7ȿdİߴiwmUaW @ @ @(:!FҦr G׫R3KɧGM6D#a;/7wV͙F:~N @ @ @ @ dƛNxuH8S>We0RF7l::ײ_ɻ3"a谼N;0z5 j @ @ @ @xT'Yl?L;bh ot;Cn0=R_mX_ˋǍ/k[m`|ӉiHZhDE @ @ @ Ns-!w͏+׈eЇzaMjm @ @ @ @ Ng, eԫߘSr_>=a @ @ @ @ x|z[,pЏ{@ ثqoTPC @ @ @ g'%Y咈 @ @ @"ovm3?ÇgeeĖf$6lجYjZ @ @ @RO@uB{(X3r_uB @ @ @ @@J xCJnE @ @ @ @PBe @ @ @ @ %T'Y4 @ @ @H! )YJ @ @ @RR@uBJnE @ @ @ @PBe @ @ @ @ %T'Y4 @ @ @H! )YJ @ @ @RR@uBJnE @ @ @ @PBe @ @ @ @ %T'Y4 @ @ @H! )YJ @ @ @RR@uBJnE @ @ @ @PBe @ @ @ @ %T'Y4 @ @ @H!Z떳Լܼ6iVWvm~ަ sZzMVr @ @ @ @P@uBHQy ˦N^xQΊuedߺyݻv{5aXAĈ e:` @ @ @ P>X6,_?'&$;W8h#> NTF @ @ @ @ Na93FSikkVu1KNN>TY4#!@ @ @ @1 q qނ/>;憁plדOqݍiv?&~^i׾\}S6 @ @ @F Ոk/z3So5߭KwyhB<;Ñ￳0ٰ|?$K @ @ @@@uB of#޽ ˖D5lf7t9hSP{-7692.4>r>5mh @ @ @ @ N `N{& 7-ҥ׫+zM2{A~~8rwOl㽋  @ @ @ Pq 7,^<ߏF߶Qx;E @ @ @ @ T'TxhiBȄܻ9TۂLL @ @ @*G@uBn.Y3޿t@8*n_H]aJyqcgp7F]m @ @ @ Pq 7,O"wL3.M|?>X:!9F @ @ @ @ W\S`Ê O~ɕpJ @ @ @ @L@uB5l7^ߔ[8qz{/հS @ @ @ @f3!aS>We0RF7lպ #@ @ @ @(:4.u'얾KuPI @ @ @KZ~ݒr׬YG @ @ @O@uBUgϞYS @ @ @TꄪVuBU @ @ @W zggjg >ոS @ @@ eddTf$@ @ N@ @Z wc_Y|ݚ켼MnMݩk\ո&fʧsgN^|ꕛ6hݾmoKێ;w~}>nq͸Y`vk ۺv͚N @ @ @t  @}ƝW;t繉?pV,]< h; 5A|㉄U=`5v>7_MX~~5N3KMlҬE-qv@̺%R30dċC_|hW6m]^aH9Azͤӗ/Y|aᡖm:t5};;%RkF0W LnK)?oS]ߟ$E @ @` n p @|:y7kʰWyt %G3$GϪƜ1gCBz_{V䪒G90 ^tQ?{m:] xz]Wop9wsi_|\$˾;N>C>4=̜RW,%`?¦ܜ"͗c/նNE$@ @Z/:o $@ E  t 2 #!<)wF՞?_}ٔTK @Z,:oK#@ e d4x[5:ur'?-\lq5qԋT$NG#,T͚61 @ @@mfں @')mqW_knAC&nmXx^3pN-((hu/>Qmum;ԪM<>_9g}:йȣ6+g7;&xNa @ @@PP @rƏ~k{xKW~٭Cn*"#Z4?L0 [^vf|bE/.yǁex.Gp&vו'U  rOB\78킛u_nac;$D̯-f/u]Y* @ PT'Զu= @p]v'%ߑYR;ݳ6[mp[}/O3zؐc~{n{|&D|þ[lX_%7K#n7U+$ һ⺅(""O._p q] @j@ @[YSF#OS%]V, >7nߴy~~~~3z ~"!1T:!nʥ+~ظa}˶l[-%5qH)Lb6iֲm H @Pd @AG;Sjuа7S?+-ZwاQ{V%K<هow}ֆucAa>(*`YG 2OokOmw)ksg9}Ά_vuíIJŠoܙ_Ξ6p1)W|}=iF'*fRyk>ϧ_tkY=~;nEyjצ?zm zhPR 0ws %4~)kV%`wV?W}Fp5a?\voy恫zM??ZOGtKu~>^bokvruB\'=tN" =m| tͿک93&|p@a~WuBu8'}4ڸa]tukV/OKnY/?)^,ydh$(P;K8²pfp9W}y$:F @)*:!E7β  @?eq/*2[S*@Ɯ:9!yt^{૷Gp%Dׯ]uNY&;P Ńoܼ΋>ݽל6/~AGꉻKXd:+VtxARrA@q';Zxu8҂rlFf݄Yr7n;`g)%{yV 2/k(nX)U!yJSwRʕF @#qň#rrrLZrM0 @$p~3 _6vIgs,^O^ >;uwͿ6q}??ydp߃.E<~}5SHm:Z4{FJ{էύHܺi./=QNA°S>}G~$klwmV^$+2k\ ;sr¼}\m[5np݃ʓEߤ1z'Hն]ե!]jqR&UƜtܩk^O쌩\8Gc#)lWүXDeuƎ(}z n6xCԄpv*'ߪ{{Hn;s FfPB[Av;EY0gZ8zϾ #NS{('>-g4hԸpv;4? , ] @ mePЯ_ID @@Y5nz7?r'͛廯?~ĉEl?ߊ׵~l2gσ ~w>C.ada7(z7Mn7I2oyn=lȒEs.^ᡯ'~s[zaw\4JnovMvnh9wۿO)\IC>>'cS'-VktL^`fy'vVkf['LVUpwڪMp%7H.Y4oF~~~zz!+W,\O5a{Z< o&G]ขx1(yvu;8~lʸ/E+Oޚ "}?7! z׬ZfY$1θ}z| EZɿ2_t[m~UJANs^2 @ @*6M7rt9 @@ 9w;a?rm)_m=qެ7҂=Pď?f:?W֐3ii_| Gۯ1AiB |ܔ-տ=woG: 9 >04qvo=fE=;!Xm^P^6gs?ro y`-G;\x҄`a}?'s"CJ+0Q)>6itCÃ)yՃw9Oc:DF?俐AEWPRJq^탟4!8q@:u>`"ǡ֭냷=sV ~u/} Lb0 @h8Nz$B z E"bAT>@@#\Q(D,H(ґNh!$!4H]l6d~gf${wg@N0#/ĘlF&B@@OF6[5"f_Jܼ m{}dc3`QU V׎ggu[nnSg{O2˧Rv*s#c?,UR׬_c3oh/OvɲѕqhצvЛ1C{G&[t;_]:xԑ?z[>\=O5vl.Qu6ӟ.kn\1SiߠD17hbL̵ gh(>Rft8AQC#c8;S6e _PA6e 6Hf1Rys'Vh{A/b,e?b2@@kM$744tӦMaaawGL^lܸ  1uo+>Uk*c}hwtp篪gO)vїyeй0q8l*'7-w^Ljc1kQ|(4k[lWzvתKeY ڛ $WŖsVX6W=]ԞWMAv.߫{Tt"jwDN5LfSݥxM@mAXL/-oҭs7ϡ[yAv+/m^5U~gU%/DtF{TEm@7omK~`>)jd`z,7Q ;j<   $@u)(PrƲ1N(U  .wp:߻욓d&}Vf ɉWΝk6iƷrKʤOޡN (eq+i ʤ*>sLח4l2n)i)]`elƩ7 k3~n}oKm[{r{!ס]}4i Bu<ڥyV'hOL{bdLc4%b%M4mzz= )ޥ8iT-t*)bǟ{GeRKGchzSLAW/7FSP(@@(T'@@@hڇxu([L_rVg "󢏶:AEg=oU5+Q_N7 ~X3!.J-7y~X\JJ} ^>Wj80C7|k_x8ǩ#;.E_vnX޾K%{ap{;;:hW˘O;)/09).V=F檤YѿɫGWKurct6yu}[xvzzrj7&͗)7&{13   P֥xon  CӯU3yyyf- lmFo c_vRI %'jgH= z&>v }hfHv6CpSIN-ݚ0uFNӨ^J-%{~ V^5ߟ.ŎM.h.UIէi^ ڵEls=Soj;LA:|Rys3   P Oep, @@0,:sv)ؖj޾27q_bsdFUe@TآEECQ|飻-_Q#vSeU*WӶq[i)nݼûO/;Xz{E(o gʥ;~{_޼Y[ļd_@IDAT|͑%>v,| jiQct-|bzLJUkjo$b.T򯡽$3qNBWl[VQz$'ƆIʫTW6eXH|9kg@@@T' @@@Lnغ}!bpj;%]A^+2ɱ5/h7|] wdn8>|9r@pHxf}XC&h{1Se$UTˈx+n^OS♣T'Rgf޷" 1YW;KfFj`jr*i9τ@@@b lb   |iݓ*ëTwWs':'ijJK+SXۨ#iʌ]pPѳ|* " [iYw dgeh3ڤ1>tcP>^>cűdAܢ^O =™#Vr)2K:fJ-(m[+*T[?}PM6szzԡOQ}s(+?   PT'2@@@o؄ںnvQ,M*3~XҤ&6Hл]yت6״yeF߉Wxl_v6vzɘb/ڼ6{Bam?.{e?1Rie~fǺ% Zw+6ه9.jǵ}'nku)bۺovlNshbp#g7@@@#NY+A@@]a~ثEꁎ޽^5RC7kK52-P<_}2#ݛW=҇z+']:S_ iQߡ?a.K"spLU]0m&U4o&Ċ҄ ?,л*@Ҭ}R6ڴB58a|DžQjY?N{e?1P i!|[?ymVVVKЮu4So&ٻA;x JWerrD-*)pv)~j+X[>zwؿgm&n"#^Л7$   PT'?wG@@ 88: ;)6{ ]6kW6jM56|ʋfǩ"s@ZNvvzsFU)[iMpQ$ڦw߫#\_dIG܌SqׇG2%<3}o%D]r΍ z2?5Q)F`և^9EbӈܜlU~-6Tt䤸ϧٷuj'*L!tCMk>KKN{~tn&XkzcSsv<ğbU#{6=?Q?x74';;{e^ eF7n]ԛIO)v^7 !   X  W}aEmm/Q  ԳI[VY|&NOXK΢׾U~N[vU>jm{ zV5\=yrA|*YPs7X1ħz}>//O젾x+1}Urnw͏& ( C_^eև~/ 3Эm;r,LbJҍG뾟svy"s12Q#x}V' "37["vQ# z^lccq+UuU6NbٔrK]mmnG5X蛃|i   @.#`   j4"/>fU _7#4o[pjuB{dZ ̏pU eFψ ZvE#o)A6F+oE\ߤɯw/l~ǽv^OLS*[[X[ywgWfp7qJ*j1쌏̋z>6F;7PРy?-yvj_D+}w=9h^ @@@N(@@@dNE8)௣l~P<=in^QaĎF{TzsFJu((/J(>.C̋fݩs~sq0MH<4y{򕴗TV{zW+3iqJ+Ӭ]3Vgi6/N[\I*7ޤMOm('z]p'λ+eDC3W1j5,*   %'_J @@(c#VM>Ƨa޾U(>2=etG92~3WL|s֮О~>YޮFDvebg*6ŎL5ɮ u+b8v?;v>UA/}zAc-|b|U~ӿܠ[?a3#]VEB"\xJ{:>,N dZvA5Aoƭz1w8AUl*TdSՂP!  @-@@@S JAE母w. V━Y9~vA_UHlT0m1SzWe,*z<6惯v 4&|QWZ+-=uW|*UU%rS@+}dƳ7ab2EqOA!nЪ$c͸NN5ꗯ`h}s(ϗ! )&  jY ,Ѝϟ_,p$ efg޾mV6bĜ6vM@@@,H 7'n>H5[ܛaggw   f=W':LL̼ucڕ 'c3˕˷uSϿ}j=6lh &L:qܙgRڻyQK^00K    Pwņڊ}\TIٌ8[SPÛID   PT'r!bޟOJQ}\~nNFBN ާ׭Wt!??oL,nq#f]{01KŢ_@@@JX`֯휕'Tʋe'kB҂V    87S& 7u;'-Miݚn۬$_xVbWU^LkcܫUکM@@@(utrqZۑ=azҿB@WQ"Ο>tѬ۪SYo'@@@L%@u$m!¹Ĉω޷KΞ}ﴲ eim1Y۹RגϝeC)}xQ2\RF&   qg^yנ]= ]k#Thg:    `4j!s&_qRvz2Sğ8VIs9I^nnpU\IUPUSKG$d@@@ʸ@@zS?~{-ƵQnn]=4l٭F666e<@@@[RxW.)fAwzKZO~-7YnU*;}yGe@@@,Bѹ}-b,@@@,E%k*ՕR*XL2.(?qTyӸe(#       ` (:ט$_:|) lZe{rdS]'2HB!@@@@@@@@HNv0ʔ*lu39XYY3{ܑn> +" x.ǫuXG6:ƑY{0{ww$@@@@@@@@T'ة(~wKC|6Q6Eo[*E]>[Ke?e[|#%k{&C       N0!1ilڵ+! ~fyk[n =Blئ[>s~]܌gW/cU`_UU       M8S\@iԐ}NV)cd! m\f ߡK       N0O߷\\9_^XAy5/7O5w2_@mܨ5['_P@       @Lh)R._5ՋR\o3٩f~~GE|򪕍G^Ts湳7ϟ͹}K=<Æ MnA#@@@@@@@@X*~>YyY;ڻ{}oVʤ* ҄=&F({f3C"7.avW$F@@@@@@@$`FL"v>X>@U<`# &ğ8l:z,^ժյwƥr?#sO6 @@@@@@@0 &,T1ѿ 2f8|A9WG~**3#eFWpi9;gF@@@@@@@{ 9lEFvlQwqgwWiIgߺun*y|w CCQ⠇S'd@@@@@@@S P`*̓H:eOyA9o&vβi @UqI       IlM2 O`礱'L96ۃfL^S>i VL       4dO ٹjǮY)Gf <||e/OX4/+SIv^|o rrN.YI2~\$@@@@@@@@T'ةn=(^޼^ȦAƵ#FW^?0-?~du ]e5sn߾ylN){T#       `*L%i6        P`A"       `T'Xcc       X X*       )@uE>6        P`A"       `T'Xcc       X X*       )@uE>6        P`A"       `T'Xcc       X X*       )@uE>6        P`A랖O0@@@@@@@ }#L/~8?=6Vl!pP- =0V~Uz+[7F]p2<=&:3)\|+[O/:wֳo&E       UꄢtyΜ?>I.* bޟOJIVuHiaTh"       `BNv0!f:p 2}m/T]63~Ή/iK/oZG6k/A@@@@@@@TT'JD]k+y9F9qlnxz-:hi?D@@@@@@@$2a緍Sz~6j\VltRdĩ_^\&eAۏ8Ie[ʭڇ<9J.+|s'?o&*$VVV2I       N0d9<ٔKdb›7hk> K qO&       :TE'^?JNYPPqsy) dS$_qR&k>2ڶc;mlj>"ǔMb@@@@@@@L"@uI6Ikr@f-9 YP^ReSĩW.)3A>lC%N+       D0mQr[@Ï(zTl8MQ k:mUuUo7       ܋@!Ԍ-H x=tYP7e>z.ٴuvq'@Y`mk꠷|2\W$F@@@@@@@$T'h4" H8}2~9D4hܲm>svvÕAܑʦO&1       &:$f$fuzffamgzڇUiQh2Y))+*;4ll#       `LhIrnN8uk1/n`e<4vLv튜;GP $@@@@@@@@TT'J\۹ڹJNOSUtP<3+ȱֶv,1<9@@@@@@@cN0F񣽟CY MR t",WޥkS|9A)B       `:kMLf\7=^nsᷟo*Mkӱ٫eZ"       `@8%}ɫvwN>ʕ>_uڽ]{L {_ztsZN$F@@@@@@@`B{RVC͒}+6'/s:;=m^8UL} ʞmߛ2t2I       ;䤦Plf_' }vnrޜ۷z_6 +]"'J }b        `*L%iy*5o㫕V6g,OzY61ѿ 2fحG~**       I3xn=kzRNlj˛Votm%'ߊg}6xWxvyb@@@@@@@*@uYyM9o/_P6eHIk{fNz0ӣm ;        `>[MzvM}->@MPL-dƞ3eπnv1#2I       @ PPb(+%9j6]ClieWFnf[QV['geSGRY o F>I@@@@@@@:ĨW:yY)/zV)3ʫξM<m(:̿}g!@@@@@@@@TKz֪|{w*ʫĥoNKUK)MWE@@@@@@(MJZ߻v',R6 ӣ^X^qpM2&;4yyBd@@@@@@@R:=jv#{p߱?MA^nQC2=f,"8y9ٺC1(#       Pxۼ=ʖ 9:]rB?S,p]߳]rYٷlWLՎ]Rŏ8xz9ٙn       )@uP]nFXPN{t(_OFN>/yl]gV~+{8zPf.o^/~ds       1T'd>-&u1(9#ďlB^U]w#;-U       @s@Y g 7^^Fvy!id@@@@@@@(#T'ڃp8p{"l'裷8Bo$       eAJ)ػ|Ͽrmk۷ğ< ~윜=j{VY3XPq3  ,a@.!       PT'"?vѷ)@@@@@@@ f@eJ@@@@@@@PP D@@@@@@@3P`TD@@@@@@@ B@@@@@@@0 f@eJ@@@@@@@PP D@@@@@@@3P`TD@@@@@@@ B@@@@@@@0 f@eJ@@@@@@@PP D@@@@@@@3P`TD@@@@@@@ B@@@@@@@0 f@eJ@@@@@@@PP D@@@@@@@3P`TD@@@@@@@ B@@@@@@@0Ny氰+        & ݻw7tL       "&{[l1\L       }$@uf׮]M6!      __/W#44tӦMaaaFn7n<u"      5LDDǔ3HuBx@@@@@@HNvƢ@@@@@@@ ,aT@@@@@@@,R|l,@@@@@@@ :KE@@@@@@@"NƢ@@@@@@@ ,aT@@@@@@@,R|l,@@@@@@@ :KE@@@@@@@"NƢ@@@@@@@ ,aT@@@@@@@,R|l,@@@@@@@ :KE@@@@@@@"NƢ@@@@@@@ ,aT@@@@@@@,R|l,@@@@@@@ :ֽ.5#)1;=^ga<       E-bE .qhzl|jW7;fG޼"&wkӡj5`m@1h       P>.98zhˋO':<)K{oJᣛR?'T}R._?˿?vTKՇ&       &dbyc gZ[(/+3|ѧ6~|Bե[_6mis헪nΕ*4}ɷ*ɗ.4@@@\@IDAT@@@@0';Jh$_ ɦ 2ojlvS{ *4i)TN1       @) dggL{;7f@ ^y?JNYPPq?]#$_8Y3Xן)Oh0yUmZhkl#N+k VNd@@@@@@@?*p͟~$/Mqƕ+WGGG'&&[[[//zuܹo߾M4)hxSP (5y׊ZZYYfA{K7b Wl}ܪV C6 ׶*~ _M      QQQO?I^e۶m N7oԩSU7ɉM֧O?P+YDRxLiף]ݪ@~DyգZ eSĹٱzO6f{77߆\\#_/       ` Cݰa1_n׬YjL2ՇRxWw〮=YA]Ke?qGfܖɚ 1       @8p֭[k{؈TRSS{} .& _pdr(hq}NN%C˩W.݊w[?@v&@@@@@@@0.UiBG٥KJ*Ν;y9sv~ΝU& eqYL]o=Cm{e?F4RS}6ڕ'Uع{שWgаzß5Xb@@@@@@@#VC?㣜'::|+vJ9s櫯S}/rر|p{%K >\ٹT'sv©]sy9oJ+Vo|Yvѷbˤ{`lݴmܨkWd^٩)K0cnm%@@@@@@@) 'pqqM#8Q: eb;e˖drɪyIaԨQIII'N & خ1oemD@@@@@@J]@_Ve[šJdcg'<= s_힝[k[fr62~;4=VT570rruo&I       `]-Z$;Ϙ1A6UA۶m?c]JAo|ƍ2SP_˫ԼeV6O~^ng,`ʻUuM;W7] oGٱGU       zg`wRRR.%vѡIK9';hiYvY{Гre9ʦhI6El> D)͝qI@@@@@@@>}ӧu=7?cFرc\"4hРFY3g*ך|lzQ6 m]ʫI 2&@@@@@@@0Fի:A|'Zh!& K,Sى1!pCI?]S_?@*{^lz֪sFعp`";8W$c@@@@@@@c}L]O'''e1 :B||UEfAqz˫6UuMVSf}7<sʪy@@@@@@@@+0cƌ<]iȑ>g> 3.bCFDD1ZOJxG5c*zMd$ɫ5zY6uAȰQLIcE"}6'-̶y{l       [z eAttthhaî_m6QPbEebJᑉ:+]qȼ.H8uݯ.v-'#2z!?qÿVIgMg>ǁ% SqbQAEp VqQ{j]Xֺ?u:-([QdB{pܘs<{{=>w9'룛Ɵ;i]N @ @ @)裏pp9Ç{nj?(#sNzhw)ƻA(ZԇY{ g+4sMrΪ9͉FW֠=8-=?yNY+c=˦M~}:{vukj~6ik^~ʐ~ @ @ @ @rrrB@tG{WL<ξkcY5kּ˯GN(7Ur]~ɤOORY;tKWj}ysqVټ~ݤ{XެSǸJ @ @ @믿`y'Gq.(!=#:+OdyGumwsoоϿ^'Au?\xy"!@ @ @ @SO=QtIQ3_/M[&<of+M&Hm{{|+^o+{qdԮߵ7hzÏIdw㔱榌:u߮1|ٞ;1. @ @ @ @@> 692իW-fٳ  Q/Nv(ZAK~l+4imwy۝v +ly:5/B3j>W/rok7ۮn<]ߣm_ @ @ @ @@ ׯ(~Fq_f͚~CI|zʍTPfm;{|IRjԯog @ @ @UV?OzD+VW^yef P)_"@ @ @ @2ؼykn޼yǎfaòck֬y%$81u;!uߝ @ @ @ @/-0a„+WFwիW' ޽{g~z 5jԬY0 , @ @ @RF?_~f㣑o~_|wߝdww @ @ @H%| qWdɒ5kwVWo  @ @ @ @7n\t5kv%j&̙3'i6=  @ @ @ҥK͛ &`P521 @ @ @Tqf͚?Lr흐r̂  @ @ @ @@ NHf @ @ @ @ T'+` @ @ @ bRY. @ @ @H9 ), @ @ @{aK @ @ @RN@uBʽ2 &@ @ @ @)&b=zó*2':gތupt @ @ @ {]eWd I{;4o߾IK =wİSaH @ @ @)d3&i$"@ @ @ @H@uB^f޽K" @ @ @ P쐴٧OQF ><+++iI+F#GΝ;ZZy !@ @ @ @ u&yO[yP '+F~Zn]ϹF @ @ @ @ 9P'd8 ! @ @ @ PUJ @ @ @ @ N@uB @ @ @( e*% @ @ @ ':!CH @ @ @2@ @ @ @P!$@ @ @ @@@uBJI @ @ @ N @ @ @ @e Q9$@ @ @ @e.0z;/Ԯ]iӦ͚5ԩӑG>%>N( @ @ @ Pn֭7o^ n?lذ믿}wy'X W@uBqŌ'@ @ @ @ 0N:{饗W <#y熒h-ҿG\2ߘ"˕ @ @ @R33fL͚5<ӧO N*! @ @ @Tt<{1cF|S\ L~uVgMW'? @ @ @={ٳg7Hn:ْ+bCyX+gysV͝vZ۾u;HVX &@ @ @ @@ew}8+W\lYtqM4E&6o<77wҥ)7o憑Q=D:uZj]*4:u#ŋm۶m׮ޱcBљ5jԨp9sX"<]ӦM;wv)--%:dnĬуD źe(k7}e6TАjE_3'l+>Jk0 @ @ @*@n>Yvm9eʔC9$j}ѯz,"8^zh@()3f%\DcbP*KA(Dx' 2o޼X|e>{Yg^xkv=W]uU(wvGP/4-^6mr 2|94 v^<7]& @ @ @رc3:!ЦMѣ333斂 6ս{%Ν~}م&N0s9蠃f̘Q-ېm&DsO~G<82DT'ްL2|5zSԋ>xgHI+.bK @ @ @|`?zۇMf؇ |57mꫯF-Ç_n]tNӦM;CA"sCE׮][O9SƏZjƒ>x饗\JWVs/n3`K7^9{~1PMϿo.{/|pCt`Ē|<75" @ @ @ @@Xxq߾},Y=]wUfͨ~QϰaöZm0thO?TF^X 7ܰzXN۵k .Z^|yӨQ38#PtyŊe˖ƄB?p]wfEu]Fc9/4ij/n ag}瞋s=~z.]JW&s4aò5H6km{qCkԫɨ]v-u_=Kcs#~ݲ{h @ @ @R |kr-g%/?|eG3L2%?r5kԯ_?߰q_=jzo}ho/Ψ:!h||5e R駟?l"=|wFylzrYg}B6_)BƈԨQc?@P6:,k BD#KN(^̝?KV-#33ߟ*qRFlW#czp)/wN( @ @ @x~Bq _u8 ~̙gD񩧞U'deea |vڨ3̍$v5(͛;@!K;!R~78qb(5T^=g_Ö7|\ – ǔ,VP2tꤏn:V㦻8`#xwn&/7vݏZЪGv}j_ټqcFZt @ @ @RK l!"/B],ફ{pC j41|_DhXA(#ؠiӦw_ ͚5{뭷ڷo6oGh]׭Ouo{!r(y8"T: @ @ @aCpB8 PcjC.1bݺuQ3>ag7Mg@D v3f̈. 4i5  'tRt͛fΝ5,Xp¨Y0Wދ/䏟޽`B{T'R>_U%A;ױӏr7gGwpfo)hu';|?b_H @ @ @Vcƌ)鯾o5kD7|3 f^:5CЭ['ߓ/>J4]-Y%sK9 Gcyv[.=mz,4rp̹bWz#lPNB$@ @ @ @@ݷȬ+W._|ҤI(p`A4o۷ߣG3b͡C/ߘ Qg8! ѥDhN;ԠAYDYf~>8C0vخ]C+N<ƍ_*XuB#s9 :\[nQP\d,˸ گd:ZZ ϫ/. @ @ @ @r+/ V'‘ ag#co]v٥4,7^vO<1'qf| 9.\8rPuonذ!?}QOb"P;O`O~Xgm{B|i;!vDf15n?rS @ @ @^ #?v^c24i6r2 ڴisgE]zz%U'TW͛ޕ!EZa=]ʞ?>Z[bOWIL @ @ @'7eʔwuרW'^:[VG'|rġ4a}&&^9>(ˣiӦE5뮻9g}0f %+ĜуdᷡEW:WmMO^&YD9nG0vfE v @ @ @L_koUVl7D6!?#n%:hnfff8m!j< rssӧOʾݻw/ ,%T'?rݒI7{\\Ϭg Vg&0'kcMU'{  @ @ @a#+" zQϫnݺW^y%934'?[oonұ۠Aٵkװ'D~?< ~:u[xĭ3rc&sG,WF:}~Zܩ!%G-'f%\:!QL @ @ @@%xFϏqw vDS02dȲeˢDqիnE=o)xwK;wVZ,q\X\Iݹ6yYx$K'OsO5p5/xϪ6epIB㵋j4)&@ @ @ @@ ,]t֬YE,o -&OGyרQ#_g|3зo7|3DWCB͚5斂aѢEƍ ,DO_һw\Y>ya/.gӫWwBԌGqDe?_tEs=QO=4dn^ ƌ?gyܲuTW?{յ|?x¯;!^CL @ @ @@j O;R,AOCXpXI44Uu5:ak|KᘉF;G/ @ @ @ @@%UV5!%37 _]6~pNw-aW^y%?yW'}̙3 ~Oh6lpݺu7o.ł 3< {KZi֬Y`!¥Xmݶ``)P]U_}5atu2j׎ @ @ @Tnp'H4!hԩS'_A<묳:37o/xY4!%[ʡX 'Pc&® 'NWPn?lwBqJ;7,Ǐ7!դi夁sR 5 6^tG?z$$ @ @ @ @@%_~?k"o߾H>W8!lQͪYf艚Ek7n\(㏋;cK'Lm'ҘX=ӵk믿>lPpO?}Ȑ!nPĢ/N('Ww:ēNҺ\XH]L,[Î٨I次Eh^qLZÏ1 @ @ @H;.//^h޽4i|_7N| ۷;vl7,\0lкu.]l)CؽO? jlXxU aVpa!ɖ7 8_Bί:İaÆC;~9BCoN(aPzoVKNji7OhuVy) @ @ @ @BBIʕ+K~'Ip|`? /zXFFF%jz3JX^B޻7n,t19٣ X=ntuS=%" @ @ @ @@xssscީS: "U'NiٽG{G[ط;m QO,~s_7ܭ @ @ @ zǢKbANv('Ůy_C{񇊄[<~>\Ӽ~u[ldʄo>|oO~]SDD @ @ @B^|ťK.5nxYP@uBAi{o΋a7_wE:it  @ @ @ @Pn-?nݺQSPꄢ}Rꞿ;Z\v~WV-Ӌ* @ @ @+z߿aÆ'N|Gf̘S΅^X5YJԪJVg>ww.n[Zh랽]y}=4@? @ @ @ڵk?p7mڴK: PP(KExƠS4-6\9답nXN p?Y.%Hk  @ @ @tP, JM!wآ- @ @ @X I{4o߾IK' @ @ @,NvHڛ3fLrID @ @ @*ꄤ޽{'-D @ @ @ P'ĕ4NvغQ#3jԨÇgee%8%U9rܹZ$@ @ @ @&:!o$(O23V\SP1^U @ @ @ @ %쐒͢  @ @ @ @@ NHe @ @ @ @ %T'kh @ @ @ BReY* @ @ @HI ), @ @ @zYJ @ @ @RR@uBJ6&@ @ @ @)$:!^ @ @ @ @P͢  @ @ @ @@ NHe @ @ @ @ %T'kh @ @ @ BReY* @ @ @HI ), @ @ @zYJ @ @ @RR@uBJ6&@ @ @ @)$BkK^.7gsxmj4hșIB @ @ @R@uB~+f~1n7r/,r~U2 @ @ @ @@%pC}9YY JвșIB @ @ @X@uB}cozٴ]_YL ewl@IDAT#@ @ @ @':ӯF{șF @ @ @R@uBE||7flŕE$.O* @ @ @* -I"g' @ @ @Tn Ny ƌ-+ZFRW90I @ @ @ @*NXoyIxulM7 ֗#,Ÿ @ @ @ PT'T_G )C}N\_Y,L'@ @ @ @&:3b A;/,r~U2 @ @ @ @@PPQ^W}̣4ˁ]EүJ @ @ @j*_w.>'}~zݺ\YY,L'@ @ @ @):{nN[瞚2}y}KY%N @ @ @UV@uB Grү,r~U2 @ @ @ @@PP}'}zMEh𰇟IK/K) @ @ @ "<מ:sԠy9cKy ڴ+"g)d: @ @ @Tq eY8?O8e~~5e @ @ @r{3jn_u^{K)_  @ @ @ PT'/ys޻?;-pR.,rrI @ @ @ @ :~ rGnm].JY%N @ @ @b7!-iާ7~e @ @ @ wL]3jժW/""g)d: @ @ @2HLmɋk=~t륓']'t8 #1 @ @ @(dn^nn4m'jn5xӲꄲ#1 @ @ @(Jg. @ @ @ u [72 @ @ @(JWO \<~ܼ^(A&McͲ#1 @ @ @(dNǝO_\uBZ //tnY,F:  @ @ @ @@ P4S @ @ @ @bN( @ @ @ @@ T' @ @ @ @e( @ @ @ P %@3 @ @ @(b`J @ @ @@@uB L!@ @ @ @!Q~{۲șF @ @ @L z @ @ @ PT'TWbA @ @ @ @ Nd/ @ @ @ @ ':½ "@ @ @ @L@uB%{ @ @ @T8 X @ @ @d* 8 @ @ @ @ NpĂ @ @ @ @@%PP^!@ @ @ @N@uB{%D @ @ @*JB= @ @ @p*+  @ @ @ PT'Tq @ @ @ @@PP^ @ @ @ @J&:PC @ @ @*@F[Q*/hÇJ(d'N,W @ @ @HL@uBbN }M`! @ @ @ @j 8!i{̘1I% @ @ @D2{\ @ @ @ @J$d>}5jYYYIKZ19rܹc-VA @ @ @':!,(O23V\SP1^U @ @ @ @ %쐒͢  @ @ @ @@ NHe @ @ @ @ %T'kh @ @ @ BReY* @ @ @HI ), @ @ @zYJ @ @ @RR@uBJ6&@ @ @ @)$:!^ @ @ @ @P͢  @ @ @ @@ NHe @ @ @ @ %T'kh @ @ @ BReY* @ @ @HI ), @ @ @zYJ @ @ @RR@uBJ6&@ @ @ @)$:!^ @ @ @ @P͢  @ @ @ @@ dZR׭=m !';Z%n" @ @ @(Wb6oXyuY3V͙j5֨_4sg>G5oٌ$@ @ @ @%PPb25zЀ4!xɱ7\qŲYVg.i ~'Zy1b @ @ @ tg0Ycozٴ͖ 4@/<}w#. @ @ @ @PL$j v ozܷ/lbZk޹U @ @ @ ,';$K2y/n3&I?r݊/EҪe}m{h]h3j̈ߛay={  @ @ @ @ 뙄lyyy4aò%'W4nVG:4h.9n1̓2Ί]ڰÑO F  @ @ @ @@D䤚?6?H<̡n?{K4GOϨu~[*"j  @ @ @ @@T'$3 NэWjt.K.21mg>!j ugFVg5#j  @ @ @ @@T'$ׯ5h@nXC}N &Y>}j4YnQ_Z2 @ @ @$K@uB$kjqMI~uNh|VmxKA؛!Rb @ @ @ , ɒ,m9 GcYv[.Vz-[WMYŴ(RlKS|SL @ @ @%:!Yʳ\|N,EzF>?[nbeLv])?" /77WkC@ @ @ @PL͒yS2WƦ{ ͻ[TZw.=/j &{ǒIF|z  @ @ @$Q@uB1Kj߇|{-?hK)Y}~3{^7QO,^~_5ƨ) @ @ @ @Hn:ي+>ج 3i%,^Nxћׯ%f {ñ'4umۇJg,|gگDLn @ @ @ @@rT'$׳xٲVg4 /gslZ;oЦ]R|tz8꣰e’Įl0k?S~vX^ @ @ @ @d *_p~w>]Zz&{u:wK UZܺ 4 @ @ @\@uBJ9sO~XzۃLL~gtA/Uy 6 @ @ @P%+Uw~H~COlm)sf遻r6ng\or5G  @ @ @ @@R%xuK&}l}_{s6zٴ)S+?OWԨWn̺-[EWb}wFM @ @ @H$b&jc&sGlhF:}~Z ,r{/鸓Qup6i?֬ՙELq @ @ @L%s+(ȋ߾GDž-[:yBܥ/{2McѠA^~^.lԤM[uCwpz<61i-? # @ @ @ @IPb$͍F/3"DͭowcZv? V/r6GuRNYDbQuBwPPK @ @ @ P26/|*_/{7\1"D @ @ @J&:dnkVn,YD\uի7 @ @ @ @ )NvH c1t<}PC&8aq^{9;8454.ŌD@Ȝ7;~bb @ @ @  Ia,F;)ӟꄴ.^^:-_6}J|x_mq @ @ @$EIa,$wۣv"V|QoD"yo7^F]v @ @ @ , ɒ,H @ @ @ P\ C^g]pĹtK ^k]vs}~&VGJ @ @ @J#d܎g ?ŽMu]=3kռ៙_IKOոiݖoZݺ硡ɍ'@ @ @ @PP\_QN9#ek @HAMY }vk3sr6׬]wv蘂R%ye{f-5l,_gY4eDr @ @b N( @$Aw^ &jwkR)+-tT|6n؈E:+T/ct7suoڳٸ|kث/gNn=E27l\AͶyuѩaՋU1қ/?7o_= ƛ7gܣvV~6 ߯i@WCkQsQ/uk{9:ˢYw/'Jz̕K&7gs;uO-د @RH`_zK%@ @ %)sG\R U=6ϷMY{3 .ంc0xoyӧ|<:7ocA7C] S.QV4F@ %>B:볏=E^I @)!:!%^E @*/<|C#kШ~6g섗Z @ @ N/ @T953cWg^z13~T&|f830#IZ$ F(!T2͝11 @ @@EPPߎ @9Uɫ3oܰ拎\xAgXV ӫq{??zĉWGP|5糊+!Po>[إ~t @ @|2N @>x}ѝS𒞊/pl4:W- _Oxf>s՗޺.8YqI\@t,4զM׬Z͂Yw)ܜOsu /xj c\ٷkC2j衒v]0k>3=l @TD X @O}]MVؽMket ]ڿ StL-Ν:׻'{:e[C 1ul^^^ZZZKUE᧼|^^O}aE&iCLk @T( uX  @?,;m)MdXri ֿAfZmy!a;|ܴE[&y>\]؄Vz ?+Mr۲N;+W , LJ\{Kۑ7qúKQV_'\rswúKj/,_5e\i&-4jҢueȂҳaKKKu5k.k\]W B_~gFPpw{)CC)ko4_6izDC @PPv2 @ P*yAR sRzsFSW÷k}5P=p1gPu !#VZoz]:cmww"7ן鳎>kc/'aݚu'eIy_lތI) .,1wTPv_>o_N?{j I[67'=zPNR8~>zѥIY?2{'uѧGgg,?ܙo@hvqdѯuo~Z/#z,VwoQ3cK?!'}8&I֭N970pVBnsvV,U[Ǟwu5?/x7(ꑯ>j|ӷ~?crVQ3_V@(A+x [Q= Г"E a3?XOf{? ׮^z>挋d @ @T' @ 3?ލ rң7;K|ukV$| ?zݑ_3`~Cw@~lgO?&!5kȊ~qWoICAG$Oy^Wtt55v42u-4ʥ: ؇{06sy'ʏ9叇p^+$.2{Z`E 1/_*{,X̢_?7G VMW—Q3ҿ{zlռ- ?S>G][_Μ|Mre7PM2oƄ#Z+Tyh@,~oXP:XVM=wrx5u_FaD:DE'c @(Gr[ @ @ ߥu;}@GQ'TB*BKTP bA쨨v*X;EP$*{!!V/n2d9ssg}γʦ)XೋTB423>s?~rirm@CY+/n[ {?z^ch2>u\' rܿ|fDӳ'󽩒Jge(݉+i.i;n!/MНFPpݼXFz݇O&pş>{M.=:l>IX"C/ySFxeڣ]<ڞVf|e?OSl~Ɣ]-^V[ n5_\X<6b9{ UhW{hCIGfX )rї V!  @q PP\ @@, [l`wNW5'=-YuZ`jbM ]#aECToM\Hb9>m   o@@@@_ 4\ul?65}"m:Ev6-{$3໏ x}T,Q!6t ̈wӟ^`ťbL~w(*su^Z"x~̖XrU|["^k;ݺR4edOos"?G uyGVI_?5wԐ$oW7Յ2ӷ]J6 ,ub9YH$ic)= q%jxԡz&rbFk hd@@@#@uaB&ǰ@@2)S o#OAڵGI+?YZ=&зbr?&*"W45)󿜪lXT15_l{61OϽ<$~+K_1K~x_pRKaSwgxVoz{O411muB9xCgzZ$̱/ݸWm^ x"k? Fm?+y`t9=&)/0O:A?{򐲄4εwjLTIC- &G[tk .uvηjoߔ'*ƭ|: y{}o^P[T^rb W]b/nDze2L[0j9I{ ggQ"*07!  @e׮]kh   @?Q5+wWx. ^Ms)fm,`ײ(#%,&ct7oŠ_lw[~'q?[ttܤ|/;a   N0LgIc؈   @/=?Cc}*Y`so}{yCWDa\{xٟysfkxxNSzSΞگʋH45+kC~B,s$O~w9U'M_ PؗAu0y\,͋%@OMy{LR{E˙.Fi;n1i;1|ΑT6Mx_Rߪۤ2/:~`v=*AU6i̘b6)3?rd냒FKwN8":֓@@]@9*{ժU7eFFFFGG>,"  `NQֵi!VV[B,xσwmS!#=ġZv1Œ}h36/2޾GoN{T]Qˮ2niX<\=LV*UM7|tHL+Rc''{}}ШI=qp*y3U{>?rdFxoOhxIO@@@N0Z(t5|pJǭ`  @vm\.V&9;;/LpXΝF@@!5sU;5mC4_'1յDSX5G|Vm\9O:v3%Ԣ}X9G@@@ 8ohFF@@"pC/Ԫ\URJ?Sxiрn`M@rBvl~|?uh/̵ M7HӐ;cF`HSwW1KIW]4ngUIƷپ7wU[W*3{6P6EܰE+JTgYS5>WbNi{1 ~ϊgR1bmN.aR{u˙F  <1"  %( %ϥ@@@Ϩ?{Ae3Q.Ӻ͕ՕG Nk Mr(S,J0Wct*UӞʄV+x#  >xNK>ݷI{J:nB|{ؘ̌M!9T537IӚsU}@@Ѧ][,T)_<{Tit%]R70vq)NƧB5.mv[3999VמUEڕ+۸ꐹG(6Kɷb`s   PRE7ے4E@@2"m舅N٩ΞbaK{ӽGvElVV<\^!wv2l;rZ[:Q[nB)>rZCǽڡװ7VMlC(޲˼X^\8I6~ʙRUu8{֕=["TB,%Moz؋yyykoZ%ׯ_kmBfӪ>z;<{^TTb Dm".sNԞw5-Ucߚ,#YC@@(T'ΧF@@a5m߹}bn7mX bʪ)*j=$o*V2u +{@!vq/YW/YQ|dK[kϯ]GU6lDBLOh1k=3SWqRB\@p*ieIZy]m7WWG.ByŞ"sp:e^⯪*Sz!5]K>+lin);PU'㱴<2!  K @@@4<^bZXZG;-W'/R\Pnm.$pvqU/E-hO UhFyU'2լWO2V6wǭ@v3FR{<`ٓT?J7dg4B $Uײٵ(Uu؎ S%E-;~b)*-CriuO۾UR6Dzlgzj!Cٶ~ɣ/Z o$[  eD Mˈ@@_ Rݣ_ wҞiE_h.:4lM,lxYqT5]zA6u|NmO, +~~WnGkdwǭz TMw) ʼ=0_ڵ^y]esݛWK1Ilžڿbsݦ{jMY+W m kiDQ&F屴iJsF   PFX;h>&  -0xk͹~MoD߽iEN?qX>o*ᵛTZSj6tlͫ>{ًnaˮ}\״M!ٵqLJ, WDiEu'Ӻr 㖯[ԟF5E֨pꮂc2mM999goR߻uef퇮F)¸a.vQMLTMG'ϖ(#ؽb@IDATil$_zڡwlyU&;;SS)6w^eR96kiheIA@@T'   %G?'ieϟ:kY^|b^*/w|F͝7Y=m:qVZj/ ;sbrsqŀMڟ8UA"!F_bXe4N)[M+p9Թ7FAte3%YΤ;;XsQ{<`_ӇN]-U-' ߿_;Ȥ=&)/DХ:A,'$ffUּg#|pjbw߄C]k|YXEFvģo~5GڮY$% ,ȺAJRXGu,#(h"  &vvI@@@w/{x>QD[Oeû7$䜋>_x͑hvw2߸u7+e_:ʸNK$܈ϛ֞n ?U{Hy/Q,`:/=N[ :tk[%|8yǺ7i<ϹJFM^텾8~w(*sņ#rm=-q`Z$8*Fl[HMWu sϣʤTnk\F X>K]{)g׋ɖ5 R:Sdq ?k?oyLn:E bMk)T \/HJb@@@@ y@@(=chZgms⭛9{G)WͽWbǧ|^CuOgKύk~M͖5h辍b/1_HHh W7KMǝ5RF=_I}nvӻx;[[u {ˇul'EJ<|STGeSj_""$⃓GvZ8kҾi}yd3._8,yy"{H۹p+1ߢ=M;߱nLn~?OXW /'yTpuu[}[mSf    `1  j [wcMSozYyN5֝jOQy uY8<4齅bxeFų ])ָ>"hѡodOwK@As+ڙ5 }\{2yJuOжGwF Zg4gQ˧bNwn]4b[?fFmz6Gnv2oRa翋-lb6Y22   :! @@(bO&)6 R7w "^I>: s=G?~Ur>*iTyAu0 >뷛P-ޚ2/o?f;n 4N@+&'hLOR_x[YGE9qb Qr1v9+/ͬ]|֙:߸uw˭]6'77W{LŚgߙWP7~J?`Ĕ'ܦm=5*hv(>kb/ZVf(Rfv=ۤ]!0v,L&QnUK5c;?EzTR޴cxC<;91>63=ӽgxƁ!f?'L@@@ |8y5: p!O<1{li&L5kC8 T'8ݳe9YY9iin@T'"M_@@@n1R['i!  -%@ungN0V)p{kbժuY`Ϝs",~@K7ʕsrq-_?~k3iǡ   b qqu+ǨylfMiB9J$   T'Xoe|s:ݿ wX?z> N8ߙqC7-xoZ>w^`F_    󿚶bg;\pjzh$<mN6$@@@ p.'pყ]sX/=-M^?~@@@tKqrsYQ:$2o>-h{6I@@@X;@";vH8epuBnNʇl\7i''vPVr{[+QS!    p4jӻBZJ1~`xTsXgNHSM*Uڞd@@@P P)fNVV9yWj嵽+c4UiBv>0j^*D=Dܱyi&9HnvֆIYI& @@@@Vpuu7l’~u|k3Czŕ!   P>Yz$;cJ΃-R._3bprv͟xN9l@OۍH7}y?4Aegb@@@8==59bPwyi w.g!   AI (uS8gY Fk+y FB1ö`˴-VP@@@@gGiKy(zlCI   I3f,84'| O$'ؙ   X`g 8=\; gN;,g\{0炶tvq=h{YiZ6 @@@@>k!{٥Q׮\~B՘ ~>~j6lڶW]\\nI>   @1 PP7/pl׭/I(Oi.Hy&1   =:y @>   @`graEG nl+TMy()漲I       !T'h 99rZuz# ήnA)L[@&1       !6"JrL׮g 2.lXv=Vd4lؿ^C7//PmǎolT)C]nAM+       "@u!6"ugV]/̩S? D@@@@@@@pvv0.:0H9]ەMmrw^hUiX(MТA@@@@@@k'C.c6h75ϮX3aLXe3h8aQ#       `WkSSuGf}\\^I-~W& @@@@@@@(ـկV4__ҩ?R       PT'wH6g"gȦGk=M6E~#ܚiuW6 @@@@@@@(AJ?symo*Fmsa2~t4fgbgVՁ&       %%ZR.׭5hO?4!jfY,eq}{ӯC'<. 2SkGf W 3@@@@@@@R+ԸY_}A9Kh]ߝ[4o]94k_ٽOsrsdO-,2oϮ^!ȦAǞ''       P`}wޙˡ㣎:&os^JNR%i"       PJN(~̃Β[8       $@uB1As@@@@@@@ʬ e@@@@@@@(&        PfN(       @1 ueV^q}={b       PT'-Jcp        "ɵk6!       p P`ٳac1       ;;v3{jժ -EFFFGG0 @@@@@@@:{& ?FX:>|8 V0 @@@@@@@!!oF@@@@@@@NpT@@@@@@@pH1i@@@@@@@HYL@@@@@@@:!oF@@@@@@@NpT@@@@@@@pH1i@@@@@@@HYL@@@@@@@:!oF@@@@@@@NpT@@@@@@@pH1i@@@@@@@HYL@@@@@@@:!oF@@@@@@@NpT@@@@@@@pH1i@@@@@@@HYEj       (jc)p{lѧjj]{ZsV^nD.O?(rvs ХZ>svƒ>       t~_nT3КS+mgJCs2Ϟ~ϬgM@@@@@@@ `g1m*IϱuO5X[:[L`}wU&        P` C%Ku7_9ӷxU iygp%U>/7gı gN4@@@@@@@0JygM9yWj^ |ό銌S㱏7{銵뚒).{?/=dʈRSE       aT'Fi@IΈu LgUiy𲵶v-Vȼg kCfD]%1[=dB.m\]GeOb@@@@@@@ `gC 3r[: 3}?NK3Q&C nlMb@@@@@@@:(Ilj?%ϩXۀꄌsf1ްeSh֭_?_       (@u \;CsJJh2n5z͕M@@@@@@@p5j ƱU Iy2.tpnm<׷Z}e\`ԸЎ]Ѽ<' @@@@@@@@  }vKy߰pwFNV֕eC:90op,@@@@@@@!P l{\1ssrΝ19ժcM%e}sdڃ˘@@@@@@@`턒 Yk׮g 2.lXv=Vd4lؿ^C7/gyqFͷZuA⊩/W hШK5('F@@@@@@@ }uTn .Pv36OyLl%E=AiW_}HѾsl;ffR/g\ ayTn7F>Re##       `gIqdNٴ~^FW,)Mr\~q#R\geB">nռwL*Mܺa {}<@@@@@@@{P`Ղnj?u:-9#@m?홑/:!j?KpN&uk޿ӆIOv        @١膅AAyk֩ly(b7/oy+ @@@@@@@0J$>N#kVGnBy4qe\p73C ̿y        PWsCΈvω?[3XdO'WZudSU;v+tn]By\|nuP`&&1       |mp RwH6ۙY))i.86ǸcwwqsMT ޫ̜X;dS7ɻW*&       F P` u!{gn{U4h ;OyS˦ /r6N~J(2p3cl7>pM@@@@@@@:(IƩ5h9߰py j+T?Wvo_Իݍ%n([xI*XwI       PV 5n}kxP?bk3y歼+?r~Qap9y9WHLMe˟wjpÔvh>GEҧjXpfbOvjO?0ߔM[XQ@@@@@@@ -+No-,U9tҵ;[Vc!+7W~nN.]?œL@@@@@@@ '@uB 8K靏Gj8z{QBZM pCLj}`"       ` fa >VϽq}|'OE l$[JںY*_^ӳ 5{왳k"F.O} @@@@@@@U;vZb @@@@@@@n! ={4l,B@@@@@@@`gnf޽WZaؠc1f       xT'yDKXÇ:t f      8;;8mc       8 t*       )@uC6&        P@7"       T'8mc       8 t*       )@uC6&        P@7"       T'8mc       8 t*       )@uC6&        P@7"       T'8mc       8 t*       )@uC6&        P@7"       T'8mc       8 f߈JI)cZ       "jKgQ /7yg"'DGşJJsvs ХZ>sv~wrɂS'㣣c{|kԺkHx~..v<        ,`S+mgJCqs2Ϟ~Ϭgn3M^\.Thuw-|cOˣ       Ikð1j4A5D+o?wj7ei[ʥM<1fhfrM@@@@@@@:XOG+GVuWА{WRrsMp*ll;ry9ʤԟ ey@@@@@@@.@uB ?o>3c|c'ܿCGb>#zK nD뾻r2e޷ZNθoGcRFY'\=d{vl5$@@@@@@@@pWGd@+Ү* \<<]Xӽ9&ykCLcѥmiw7-+9I{;7wS30r G?=}үǚ{?_~wUiAH       ` mCIvZwvljúX>|\^lvkwwTU;tgLX~s?'@@@@@@@@T'ݰ0#eVR<ɸ 26=@;v8/f!gD/BH ܩЛb?        `c1Fξj+ƅv*9FrwnΒ=(csAUhOk5\g       ZBĜ+=sX7m!R7oPfulUBjM>a:zf_Yn^^I"       Ph_zhN4'owNza..',;vXo;у"-jnf<˚SgyRc*       "@u! zng'_8'2JJssoY!d$ܐ|VS6-W']:@@@@@@@ )\8 lQxC&n"v`;mD^^2/qʌgPi!<*`P6@@@@@@@0D amK$ǜ_ă,8ذkyG&=<$Cvvs<}\{(ZNHb3@@@@@@@( s+YskWʱj3ܗ!399fuT@IDATǦ]|53gɌjWOOyrWQ!S2O       @Q١(z97+%%7;Ku]Wv4AqΡkm*jVQud38_un r2ҕM        P`:2I6>]W2A 2JINPj#      %@uQ֎Pi.jҼ\E ibeO| 9漲G@I       !T'h +)OP4zxUGo\rI!A F@@@@@@0J$mbn>ʦwQT]IiB* EzQRł"QK%tHalv7)wΜsBv̗XB}6߈;uBIp-U)h        rg㱁u꫏=vDU;3#C]LPz-uf`KOT64"nTjZ%']4@@@@@@@ȉ 9ѳXu%tqȒΟHIV2oNңKmRoSRvҦ       N#]j޺-˗Xra4՛eu(D"NWY5Ο^       S=r{J_f|JmII7mʦa#=9yϔ]^%J׬lJͭ=șaQ{w+FFZڮ1_(K+4@@@@@@@ vĴO Peg"枉cϟU>S45諎{g`ZR:SS޷Ҧ       }N`ߟK;k4y{?zW 7i^GeSil̿f]e3rۦ/>v15 "G/5ZBC@@@@@@@;ڡ^ٹgc::z6 k%^Zuo<[gprnX''[Usޓt"y;4| {\޳ƵW,8t '        ]N+5 ScMǥ]/lug_fOG}E%څs~E5Z|mPF8@@@@@@@&7FiCGztF,9ŵ7:|rg_gwiW:l;ajeI       9:!'zv8x6oHW/o3ݕЭ}Ry`&GUϳ,Y_a%olЂU՞xJ       `ezқk=^vz٢3'E^trv.]dvWU]hpc+DshԘCވ\үL"+V}I3CXu"@@@@@@@Vlr)׷=aԪ{g!]!       `+;؀!        ` V`       6P`        T'XE*        @u h       VP`        ` 6q       X!@uX"       T'؀!        ` V`       6P`        T'XE*        @u h       VP`        ` 6q       X!@uX"       6!Y X",,,999ߵkO5W wD@@@@@@*  v~:nώ&tn"_:oBA)cD@@@@@@KVvU!       p P`'m۶v닎@@@@@@@XnOf/_lNGG˖-;~~,5A@@@@@@+e,^p |^@AسWϞ= *Tkc@@@@@@#T'؇^T        :t       *T4@@@@@@@@T'8.@@@@@@@@@%@u &       8@%       NPaD@@@@@@@PTD@@@@@@@ *         J        :AA@@@@@@@ @uP@@@@@@@TT'0h"       Np*]"  |\    _\@   Y $=q01ĸ4A%˕X3#sEzĸbRRrphR6hú~s'Y0,[X&&   T'7)檋#ƗzZFzTO@@D~-"md6j竃'd#u|շHqrsr&4Ӥ^`ӊ9K;~pGZZzuv>n:bC[_ųǞ~5<Zk_c} (m2U ~ u5H1 gi/cG͸]J~O T_6il"   P@N/O\fFF3O-[wh쉣 22g7wАf-KP{gW;<_W{MWB8@@2]>@~;K9JDc/{xRz޲s%-7d} S {xF r쏣^=mI{f[ZJ B3$MMK6.los D@@@` nw9Klëk<Ϝm԰ƔEcfzr%@@ 'Ǝxϩ^CF ʅ,9q '# }Xk5._89~srGݯ{xp 7-ѳPu$O?^ͩ?:4&l"  p6]#zЀ ǝ{ృ5[ɫq^@@@"@uB?SG4  jиp` M<3#}N-<"l1&  wLݎݜn%8ç^aw9r?|{@@@(쐗Ov}7J5ZϽTAE+U1]pv͊uレ`ZGi\Q5_g ʴ($@@sn$~ZѳWyF?A_9;3eT$   k 0:umL֔&(8eܶ(C3ZUάZj:53=M  \ZjrOcxeϖ fu}⵪w哈 ﻭۆ&'0̪vxҚ_ɑ;ϼ&ΦI@&2)a\u~5u_g@@@%@uB<_q~uUP7 mܚS^ٿLfWݛ?b zXs/  ܉%KW}o?}e1G/sHz(y$~e k?HqM?wwO}ЪHc2P3 dYN6mͱr8q2]T䙸+dr O/b%QGȍ뉗Οprr6w!ϠԈȰKg鰹h LOOzI.X2 g5U{~cau.!6:.rJ s^oz4}D%?EC+A@@_&&+eU\.Ju232d ԬxHM1E|SL!e/ @@렏~)$9I{?| {A.Î fDR wni!3>ݦ8>MAT-xH}BA}QI|ꄝ}ݛ^(W,W!2gTGV̟|uDϽ5tY0ogR"q/ZLȚ9'](ݱ~Q*$m=鱗RA ZX礣i2[w}f`\`zZچe y&Q8|ZZ?O6m^f"YrM}W^ѾB?ˆ/?v?_2CvZb%vnX|`u] lI77w}WG)U'l^5۷)^Vcys$b7KI)~)"@3&|(כU"=ڈ]@@@ Nț̪eʉ}K+ӶUz~![){+{AGԀ ]IuH@@C@6i}RrkV@שWv9Ly-!LWrCq_?ɣ>ڗ_h޶f̉Ct6gWlNPߠUp:BiiRF̌:z`/<!S.wg^Yen[@j>w.=-W.Ǟ+joԠ/jr{v#?~hw*$s 9uT/89y&ԇKo*lNȅ w 쨞/A݃}Z7=~=1Nq{]<şjrgo>2{=&qoqkæ[^ c7i:1܌wd!e7e&N @@@\~i\sIV9Խ#=5?oխܼq"D@@/PI" `夦z!JL, #^ideLR]}z%s+FX\2{ܘaOҹ㟾5%M檅S-M0._(~Sin- j|exveӡ {]C;eKvhN/z[TsCOm3|jC!en2ye3!]VѠeը28K|k{RX\z-JWwpYPLMGo]:n$ߚDhŚ[JGli?xafZ 7Bc:;m\`fֻ{5dm%h`4k޾Ek5lg -4AmM^ԓx&ܩÆ׸aGw|%ӱEUH@@@  PO Yʖy}@L oǁ&bl&͔cjDnۼˑ~Ee YI@@ mk r+Ԇ6=û?9E}WJ{_?=RnNfPq[yrd`]Nݔ3yZ5D;& HX@H-k7n۸CEj25͊xJ=>=+wOeס F[JԘ}KjSny峀Jʿ~}3G322Li̚8LGVįh@zzpy̕|5rxs~;fjuˌ2_Ɉy?sbM77/^)Pj[7izF](bfHLpoEzcưHbO%4hYޤF#w( R`xQY]XG^60e3q@@@yDN:XbdNE~ai&轻bW23_Q%-;/|r+Gi#  #Ph|w8s֩&w[)Mx~oB?f=-b/8Ŋz}_S'Vf}tZV{]-:Xui< C_"hm5~ڔ^4A2u'w2e:e=SZM\ݨEW)M,"ߤ>~yRrxw9A?fz\b T?C}}#Y-렮iܺE{`Ξ8oLȡ~WJd|ʵhS ڶf>hy$|{)瑱o/C  ܅T'5ٕ<:WpH;_ O"2O}s{}륄LW~W՞}s@@@YtY/fY1>ݣӯj|_s7( o]YCLr{uS4,M_>~SGhgF4mV~ OwMc/ϟ>N;Aij{z~b?7e8( \D6KNҿVRKW}{E"ϝ8w7YpD,PJꈩ-;JDjh(k_*JC!dBeSid2im#dŊO&@Y yG:@@@r"@uBNl O=[e_O>>L| ==ǜ^TT7.*|B˴3&^  w@V7=[g?\Af}!I"o)/SX52Qǎx7ДVCPA+٬i4lUKi U݉^GzPom>㧏K| p#9@M5i]z409x \zYxz47m&"'<uNľ-MSyEiޮg%|Rr°}0O4JW@@@#@uBn?׮ejY?wiohi.wxlbU[>~_)Ucx3ɹyeXh#  #1/_8G⮞9_ӲK6U,d9ws!ROgLZtZATn쇰s⯇Tcڍڨs45;$_5[AKMD[_iؾ|>A%Ri@th#y~uHf(m[:]ߡ kghM$ǰ>4geSjP~Y9mMQRm%ǪF^9m!LeJ2   @ Ϸ{Θ{*ݦ>n)Wۜ%TH7EXrHzjS%"_{TV^   @QuB-Tp&B>rT`ɲJ;D]~3kҲڼt~WRNNN:mل:9'^K 4i/TM L%Qd5 Αp-!V߹DZ09Aß\xs(.r   jNPkFWsJ>>rH_;L;ٵvҴZث\ܔ4@@@j z`C,?A'b wzbW̟kca->}lJ7cJEC] JܶBJ,9KF(OE2z. g+D/5_:J&]Y|h2WoEsi3   p7S(u.ӓn(=R]iiԮ5P3M97cR> i2ry({5HSU*v{O  w&$5D Y5=sI :W/&CJ>{[TiH7U'8;mŒVӟ^o&gۿGlsCэQ233^"D_v'f"~o3@d@s^yP؛2@@@ PO_bUkX2WOO҉nŚsk&̌ 3C̶z꜒MS  !}B ;qA^ $ݸY[K1.Qؾ}Q;gnٞEF+W DG)bBKvH9L*ep+eۭaFG~BpJJ̥'C+w)(P5ֆM@QqW/ݶջJTb<Uܼn}C@@R :? ]Lw7}D*BU-_Qvs/_.g?<(UBn$_O5E| Zw}YCfH*aȝ4Ws\h0<svvW<Mu/09ƖDwT'ϑwr5Y YdB   &Tz@`cGԛY=qN({WwAS    LAjJ>}%RΣ~eJ&"J{/"[ݒ[4TJdNDgpvV!?^P;]8q\vuu3\đfuNIa׎']O|x5,8~h&Mٔ.ƎxjJU`Օ   `3k6PqHSޫΟH:SʴdoDr?f}5u6  \9G]~.n>[qvv^ŮK4 }#hͥ~[joNsh;0̑4ضv|hQMfs'e?fQ,&A?ׂ&!6eY7S2i+iɷr^?[ƚE>^Þ>B2 w\d(bKŞ>W3i,[lo4`xE@@@(@u1-Tօ ef8|Izg{aJݭ U N_C@@$+4a rBVNݳsÒ-15%yT-%oyYe]_,;_@ZOcM525j4P {sޱ~ь *FA/Z:a9Or2q߾tHg-n[\+~ C&899ivI 4n&^ٽyyWTDRBMYASR>M>|f8Ƕ Uj7ճ$"S/A-D@@@+@u}=-ͧThvN5y3ZsgJW5(4@@@8w ("ϟ8sle3 tLUѪKiK9v̰'5nvLۏ^e^냎7"=-Us"ѯe*2mD8-oEROQh*طY+o۔4e(%bj}&M߮E<-ܸ(r*"AqD~#l˚Η111j? )Sٴ+? ]1&32ۄ%'>GMy:"mR;ݲSo 23oЗ&H}{izpfFe"5ʵT;챣\h2fa/@87y.axz6h}L&s(^SAxph>/ؽ)lOVqsRCOrkjvxM0M!ҡ:96   #Npj}`H61^ڹu^~UrU[>`w+&ͫl@@@[}˪C 喼;##)ʣP!'m >_pGn^=ڍg_:.}=YF4n׼}O:Uwߡpm/R1v?||PH9W7gfsiVݧCO rצ01ߡΝE;?]ff wm\:Mce_MZwW'H¦$ң*_hxx/ˤ&N^>I4{MLó4|WJCϽ|\]{qGo57h   8BgN'Q?|NF{쯹"R/nٸw۩K 99b @*@@@LuvBn6W+mfVwM޿QY=eGgpS'G |NPHy}\"r#2AV8%B+{{c -W\Vm[c],Oц-Ym"&ӚETyL4wnOOާ^jfv+3C< IZ]1l1͑:>ſDF.*WY'}@͏Dn錑۴̒+5jg?o(_|ʄ /I>E " %! blR_C%4!&uqB%/7 }Y`ۼ:z4Wc{OۯԐr?|әY0KAk6l"aC"ju5 7!   CLs) pzeeϜyٹp`wZ.ۡ_r6iCz9w\}o+S'  w@ZZ=vo^vԔ$ߢ~Ed:woGuWrҍ;W.w-!6==MKC%*hTfju}_ym+Z{ҹ(H ѨX_rt!)7-ݹaqt䙸>~ŋȴu l Afdd U2<<4xGn'-:\Zr޽eYľ-#)כ,E0J._T)Uc+yF$p,QLZAYΡRS@@pCznZipGspvW^ye„ _~W<2/g,\o{Ák@@@n5#O⨾e"<t wxyonev6v%xˤ=q@7`"y7Gg@IDATn0+j,K ǯH@@@,pBA@@@ VvT@@@(pOչ@vym>/"   p P=\   h3e1f= }|w)=۷<)333O'ZJ:tp']ׂ      (=z3gIC-^~}u$ݻw׫W/XnOĪU!      )#o%;sKmn}       @xg8^fǁ+;Lgp,l -[vqV״>N@@@@@@ @e 4**TR,v@K JkAhg)Cj={4NPC[       Ӱ:!;χ']v믿r>+MVv @@@@@@@(dOzJNWOA@@@@@@(]t 'éNȇO CB@@@@@@(xnnn}ḥ'éNȇO CB@@@@@@(9_!=O8¨@@@@@@@ @zԩc֭+=|x~>06@@@@@@@&<;u:W"       ݻ6jէO  d ic       S ((k׮6M q ib       Fl;PPP)Ɖ       P0d*͸`Y0<       w[>}0ɗ:`%SP/F       P]@pN݃-@@@@@@@r,P^:uX؍dJ41l@@@@@@@|-Z8>3-011$@@` $=q01ĸ4A%˕X`]3s'\o`ɲEj۳;رaqeVk9I1W]=ܼ5T77{F? wZDۢF-|Ml tvq-RǯxʵTӬNv)|sӊ9K;~pGZZ60|ܭv]iiO4+l>`o1ߢrlY^>~ 1 gi$^|< :b3o+{q1QH7RƟgCF_3k 1ʱ?Ԕ}W_!!ZnӡR\l+Gώ8{H# ϺXH߲hpL@@ƿ5q K1m3 Ӕ8{|D(*0e>...fWw{l_Ϳ)mUJQ8/uC!qdáFy|Gp/+)i֮)[=10B?\^rvΛ~tcGn\1Mv~>+ʦPd0 urHNv %]\|Nα`7~ư+wm7 3 /|B߿|ŒX9y+_}>e Kм5T"4@@*gy&ɱLuBxN,YگMFjJ8/>SܻD:6 y" DSG0ZZ=颙cQ`0ʿq-~ڸ67lRYG  nfT5՜1sg}yssʹ[6N>6ʿ~I7 'LE˩z?Ϸ:v߿\]u_Z|w䫝RS$DhGb] 6ȢbKJl:d֏[v'` XZȌ{,j3'|ۙ{<<.? w̋}ۭ[5uNmwSTMۮka}K4ŝE%e?4ã/w8'GFJ`eNzG&']3yyiwEY؇V\<{TT  `[޽^1p:!#?OAx5h\8&zsqS)iKveQ5 dLMLXKg׬TD@ /Ro|z#{7 ,8΍Kde >Ez=iDޏ `L`>Qʘe>uq1P߷gܿcf"W"xzZryJrܟ?Ѻ张r_6Ӵy<ƒżA0#a,3 J@֏;U\5m_R%HɈ=m@\ Z~yCm:\fMu^]Z*ۚx瞯D`7l#Gsqk:mҾ=m {sJY(~7Vh}KaT.Ru7ko%N@,_~:u.*J\ZCuB=7@9gN)ױwɐjHt?}sʄ ]ܲdLiKpowR]/P.+mKKw<´Fԥu <% vxY~E4]r7(|늈 ]]O}7?+ԚssjdFn[KGa54*%%I&Zp&b?e}NFzoc:6L~zR5mtQ7>7. v͞}[* w7u~k5iҺ{{;E]<}u-!Fѝz⢉[iO?!V!G/(_)Z''=)Z%`kIFC+):gۤ!Ne{gdd,5FnJvFQ/^Zcߐ9DعaQ]y_^ƽ}?+hda! Z@&Hx7S8A "Fݸ͘ɚe̞%rhT}u‘ ef(9.MPYO3oj[Rd@ X% /ꐞ]<{lٲ\#Sv}⵪w凈 ﻭо,WNm צs,޻ЊP6sg勵t2)%W\S-I&ǎJ;9cS{ojZ|2inP~e>_wLu '޶V)sRyzy'[v\ӍMA"Vh,`kp X.PRg߼WCYp gKa 'ZYyWE~9#wuk&O7D8f:B@,ӧ;3v; ꄼyb|뻕e;t.~ϭYa{sk݀Z*>h ~oMD.^[" 8NdJCG];KS>{B]{4޸/T6\\)E Qg\).<|j(IvSyOSn.òH7'ʷs[~,OSKr7,7X\座j+u 9NkҶ]ޑ,9H`IaI#2UВӰEbKLq{)UFm?<`ILio^GN4tyLtʄ cXAr "or\/.1>߿&ĝ4Շ=2MKKZ|OA} Ձ7%D_:+-R,0%tC < ˿낕 {Rj:{Vuַv|DdOy$O},+eJKY%ø$PX⁥rf˯ ]ٷ%~K#@ ҥ…}-`T'_&&+eU\.Ju232Tf_9W96~klBN/NuH@ Nՠ~)$9I{?|rjмsnOf՟}'6 )/s+w< {ڭ5P]\]i:ArNk:a%roxQ>]J=YB!e*kv߼vɴعFPe^٪V89V#]R8_kj7hӺgJuo:yW̟|exѦxޔϤGj>q[CU75f&0}ÊxKK9Kk5jݳ0/?ߵ1LwsmRF|1aM" C&{hn5~&d9oߛ+j,υ>;̉veS%J?pSDfLP~>DZw{SM79nlzZKNm"nnJ6!©ЭւLێOq?ϔ7eپ>.\_Yw%fҍqNkQzPr[2JJd?vmҮHU?˟(96r/KO]DےL3#Amܮe̛3y>\w#{7ϛiRiʑeٸuwMC;Y`*S d t=;M ZްS>c>zH̉۷&l {=17/:^{o}ZtЩsèǏ .]\ug B.@dMu]euKk;/u.5qk7ӽ%sG]$?k_^m͂ѴS"R`6i|lgLԭB5 Gle7h橈pyah_;3O/eWV a7AsɽxEA!"THQDP -T齇^C ߫fgr^yo6wgs<W k9Vs?Rjh !_嫯5;a]|Zk#qW{_y'wmKgCemёp}NtW&!g4xJW*?kv;D߹A~$jG#.p$jsU :nː)9drtV qs2ɋI-x V]Ǐ ( md`-D_ƃD`J2Ctgc]ȋ9~hI#%gf2,C#s%ت03M62s/ {di5,Y}.2ӼU׬ #O\zd) |jٺKJ/Ӌb'9@~E*mUN~/ĽL_%i}sJT#:n܈vkh(,a V_3d -<31'f`HAڥ?7㦽zJ8U7۹a'9KfɏYA0[{ν֤Zڢ$$>fAOϴ/Uݰ[nGR4uQ"i䏔N"%+=؁MN1ɛaNʃXa`@hӦMDDDL̿ǒb Hgo޸qjÿI*<~gL5kUдi%(Nˉݑ J-_ٶI2@I@$3Y{t;1ޮCU׺T۳m>ӏ2iik#1͗ ?UEh<]9_\$4_+%BGB(_\݆UE;ک_o4qmHyKXwȃ:W:9ՓdW?7=ql.uto䑒>QS Mз!6΃W=N9ocvqwM/o i2n[UnқW_g~%B[ =\D'$'oɻtYدH tH8iO?Sv4YwziB*ǡߓuBno7s^j-';o w~B[+ZZM;;Rzv٪_gN߽r{YΩ k a$d~fjh@ Lfg֞y] GhBXXoz~jcwJKYWS6z߹7kKkm9T2}a17g\&yxaFmڵFϺV1 Uq<@rGyDCh :!Mnh/پSTkW݌ՄL qд :A  m;k6@սs# ysp/ I~clTz63l~޴/E+nb)ߪrk?tdÉk 쬼#_u;֎vnOÖ&3nˠ6( 2.ly: i=XGk%S|9O=7v:_ޕԍo ˘`:Fw;I1]+ t1O^26md?{zGrZyΐ#`дa aMDŽA$TO?Sv4RE3zN? }wsQfemu~_ike`sR ; wg@ Ve*oh*cH8ۑ][Vj_c"~@ᯫ#O^ o|G|\'];& Bl9"2>cӡ{3uC%D)9?*Ƭ #=-JFØJͧ;Nf(" 8OO;+`D'=aY 7‘CV.Ϳx~tfO[sڢGQ2O-H@/ ض&hygSҒcmZs{6dU%}㡫&T)l{¥A9FJ$WɻAB~@Qrکo(_<WWE^f:r%_B2dl~[3Ǿ7R!.\lC7Muu!!!RCm҆eV5NT-+|ĝtvOҰV}N AuΈi k2'wt=m1Ï~u9 keW?\$?6]?LHU]#O$)b%PZ5_epCLcx(b>\Mާ Ǩ`R;Be<SȰ7@^ t֘qvCǎd Uaڳ}ؓ%GF@uզ5\ GJt&}Z0%9ŘikdΚݍԉ3-Ҥ]7׻𜔋ƽz8v'P&`dȔQhJY~EWnH{uqY ӬD'yXYZuي!ÿ/FJq©ug4pD|*q$3ej2r܇Z_1iSJ}0grي|=;,YQHڰ&_ij~@Utfys`҃]O Ӈ59r7Ҿ/!>Sc*Ik4GiШU2PUB!s?vebHsOLQMVL9n٩/}.oie0/}JB gMh?{_ўgϙǑ#}LkMwh$:A` G 1' 7xQg?5Gri?44԰cLHyw[{y$_ؽIfߐqn {7,\4]}%o(jt¶ȬϹ4T_Z8*5:^Cdu޵W$fw4KbY4,pJvdsc:L쮣rZ҃Խ{$71=6]?-LIljdbv\SG~K.SK}n%wGϨ۬~U xLVp.DbӒt Jؙ ,dh>?2X>S҇C] <*# ,_=}0#.TܻKqH1T./9oJrL.|G;_zۮMn$(UVHZ&1iKV |1L%OmF{;B D_qԒͲ UHhuF,Ȗ߸O&kxGh˵<<騙 '79߻_8vo@]}wN/7dʢ '/)NT!,Rkp'ǎ]ڇ1{.  *7o#FUCtB*nxؑ=3/Xwlhq؄mFxF._yB٠@P;Zs#Z4ut3>'>Vmn%=kZsr)gȴJ@Cl6Gjt,,6YϔtA5_X|A^wNurzL]e:0'KܯCXXZϽcv2+C,FTxǠҕjX#ڲJv\JWqer5S˱jNV"UH2tK[=Kf10qKSGMLߟbׯ]Q 1hLgzMHClϔMLau=r}$´<iTv ucwKkF&GA _֍sؤ>eǡ{3G@nz3COdTYTfH 5@I;q]1Yt™cz  ,2v0 p [p뿇.%Ou쾙 ZMKԾ/s\Vnz 9Z͛F TMLN k@wFogänua6Vׯ]޽O$dcw=5SۼsJ5BՆXw]jƥQvo]q6$dʒC!SG8 Nrdk4pʀ[f(yGe2SXv g<2hs{goӨiÜU.fkMqQIJt3eS#u2X{r< EaZ;^7]ٶp3>^_'n߰D#i [!32q~XwS,F}M7 $ L4jYyG99gqZamԽ!s"BH/~^zamս޺dhE5d̜U_ʹid]hC@p%QТ/J|+,K!cɳ ̰tYѢmҹ;kYɽwLy6KwNH"$mX%s*H+'ۻܾWotjß3ԐxUnA_7i@x.FNYKjmj#YG=}>Sm{(]C/ʈ2sudzu6^=jI-G qߊt̉{ --V4CFN*1$d O2vS_i X힭Em]{mW-: Z>jȱdS1kܧjSRXmuZ(N8ldu[yT}UW^RϽqN{I2'UHwj^H$fXL cjF 9Eӵ t؎);뼗{i\ Lfj9*Ȓ- h9[MeyZ_ų;b,U}I2L -!V#;7\4]2H֢:+cYs)QA I/V>~yaCKeюC~jD#͒<Osx}2+mm-PxcO5C?g#ŬL:21bZރLwFTh˽`t$@Ao ]~k^xdD[71[bnSVF+bM(q_fL ]ܥKQ?9~6vqZ)mt I# M f 9# mMPSiȑ2jtL }pޭoڽȖ74/MɣO-CI gcO:Οz#}GDw,j9vLWI!:AiBlNpHg?{ڕI˔%%/ vnatvNp< 8u?p)H!T~ECa1[b%<{icmU7ńAcУkwe.PHPfH@ Ĝ<4wۿԵr.UW3oP26{Q&HΝ7R/\z/n]̥xxӘmЋXLwUvӴ.2k7~0<-j&W/J|y݈1l΢N1eNۯjձ L?2]\6oF0ѽvqNM2b)WD$~gZCk֦`RZs$y~Z^ܣ$O48{/c:ƕ[ও;Ht6 /JR9\m %_m\9+i]dXg<64A/w!iB)G'x Oݛy,x #7+n2dzsQ 7=޺iͯ#=d|_87k|>aq2eɮĞ2 cU haZw³g/+`gΚQ0U[i?/V|^/YξYlX?J{fr4 vK;6$@IDATPkΝ/RL2y WCe׵a 1 a//f6{I%]yO%\mgcNenEFD)ڎW,&ƪ(%qn,)cfQ._d4 >xfhL/&ym~Zu^QG7Ƴ=#]) wonÊ_ Qk~OJ~c(Z{W' TѴ)Τr{/I'KX~},YލZ?^|u&SF P^ؽ(~ Uڑ_6}2?K2p׾aa,fȔE$@p!`ҬD@'rVU2嵴DX Y" _:zQcV_8t AAU3erQ*:;&e~j$@e?f3eXx S'2Y*Tw9*=m7 -qmeﬣgn2;AOQmBŵ 5}LZi;zki!'a\ hɹi:sUBf~I%.G0-~`Oc>2J}(3=]3+CvK@wRW.v|n.%n:p6WZD3~eȣrYD_ 4՗@P`EZaO*VV:Vhػ}=.2>l. sy ޳}]JBy}hCvW EwcKn}>˖#B2mjaw,6l!:A"پqt0)|Xn+wL2IЀj7yА-ܳ%Am1\r1h5cֳo|esR۝"Kj %`N;PDu/`ϔMt_I_ҒOH;k\Jّ&/9zg{G_+#atvg:bl  @tB*#C=[\D',+Ω5s2Æ\|nΈzdz/C@.=ڀjk %MuT vx56z_7("_>m@6p$ e֌-2%XӾK|j{u!Lv?xwLaG >2@@D'xy;wgjcKv|#=$~]|ՆjVlY{U#O`X=W޷G.2 +E?ҒVLKTK{ϦvjJVAGgDʐI7l!Wm}tW7JZ.VSkV>n+J8P†Iuy!OTl|1Zg%qgi>]#iw{eX0_k2rU j>9 t3eS#W2Luzdɕ /n{3>IjyG`_r][V =[ΈD_kZcЗƁPܜ˾=wk]*aӡO{ųǪ&N ,R>L)߁رkj>ri   `*jKY EmBSNmX-&n^aڪL 9U|9ii[\yK+%ߺIߎ'SkP9da1L$Ѭ}w9veڎQ4| 2e.y?_߻rl)/ϝJ%cYnMm-O{^WC,oiΝg僣XXx:w0:ɟN_jKd4-?'M!b~E,VN;A^IT2>MiGLY^k5d t3eS#/뼯H;2[5޷ca׮ yKtF7>sbDȚ#ΚGRwtSnj&9)wOVR%Ü' {9塵:5Tֺ/ӷK-y™A/߾Ԁg=ӦhmySΟ)SWR7ͩ~5_T0k9Wˑ'HI:`&>&:SU?-i='܎ql1sm\;hdr\}GZR8Ԁ e~K>&SגR%{ɓaػL2eJ֢ z˻r'LgGnx?mu sZR}ߛPS=B7,,\#Վ   %';:]{>V#UgU6!  _n3-D Pn+8j>ϙj5}RnZ3>ڐf/_r.=c?Ϊx+>~ѫ駭J=gGh$@HEӡc>{:щ{5ndM w|̝vsʁ7eȔڕGldڦvj{LVB& [7S>;ytySVMW=ȑWKMޠ7 CԽ˩5}礣sHK~A,=cн+|wo]\KڴA?쌱 vDӦ꟯P+cNb%h~3bil~ZV)ZܠgZV5@7tCrfy>l?o%s)}9#ů Zu&ů2iXbMU.2Y&w6Ecʑ;i6 pV/]Ug^TiIMޖa?1ylTQ; D?$Zc9);;ю/IF9Ξ+_پ @_!}Ni9圔,I7l~ZnYr:łK+nZIl|>!pdt3#rfIy2S[ڰpTǽA)bNIV*SI־CZfVA|2`.\#'L'ŜOz9[:ߦ]a>v`j@P~CYD@07-T Vf+Zܝ k8*/qVX|V1Kjv6O6A@ :!n^erq_yWn䳮+RVz.?8]$^ɽݶaLtbd@pG $!!r[ Cu.<1O רhيKn=sps{wۿG{^3C ]?A%ǝj;u4c *_5  7vm^׃{6_8sqml9"dv՛U^?}lɣ],Ǟ:zi6{b"ɨJUN$b_{q%!gDw=;wTka/g=xotk˪DYiҌ{8"΢ g̅s]M!X^DEi@E-{˟sܸOs6B3w~R_ebgn[~3ey#-gLn#h슊9uD>2eɝPwJPf(qo@C7ݩlZhߎ<~h)P4r2G>N}w}ߛNZ۹ym߹1+_|A"q3e&X U?oזݹ~M#] :$ xj;N;^ ^ׇ# )/_Jʷ Zxxę,EӇ{s=ބ4)`܃yq!ܛr=n䠧;q)F3!;B@ I$al&    bah|(2EyL MH%{.KkD! +w2 f:]+F0\<u w7$4`bpo$O9(C| B &," D'oEI@@Aߞ7m'2=i +cȗū/Ni2v@hhh7l@EtBtMs~3kX",Y\ڞmkܠ̊'9@@d &4@@@7O­>-U -vmYeȗfwW3 l*T2Ɓݛ9@ϟ;udQiGC&fArg44' 7d / [Q@@@3fvCgV޺H-P4Kܷcݛ_5ŜLIWKH2|“?R+}fڇ39@W?ykW/; et [@po$ye ]d&sH#  :!bG@@m5W.qj#oM1ݬ 9Ulتyi]wF/[E!Ο=}>C.C_I lܛN644m1pB@<`f @@?kHN]c~?"I@ yx6gDmCiK{:Лv,?Yߓv](w>4     ~/;ndȘ^C`2Br d͞wM&D†ںF[$/;_ᇟ{D P7 #[ /{wg @H )cS@@Y>}6m[^Ȕ%{2f=tda ]5}7_$!Ҩ.Sln/Yc?]d.2e}u  aoɆ   EJTxe,Kf8'g]v9k\YΒ=W;WٴDjiӦ~  kaT,PBkW.ވ&$$wB_tZV ^5<46\`2Ҫ OOA@R(@tB @@H!S}7w$Z%{<'{Cxk_n.a"2O,@@"HA@@@@@@@'D'8!@@@@@@@, :"HA@@@@@@@'D'8!@@@@@@@,Isӧoٲ%...8V^mڣ][Vү*2@@@@@@@O9f 3ftҥKT'F]x4f"       ˨ A`U       \|ƞ;w/xr|0WGtWh'111      """\fn 0TD@@@@@@@N@@@@@@@@mܦ        x$@tGll       n 6@@@@@@@@#0fGx%G HtB\ֲeK&Mhi       xggS/$$"$!!{e~*hѢ9s4hРQF~      n ,YdЬY377*aÆjժ |hz/111 @@@@@@@Vw^x/Yz5bgk)@: Pf       )<qqq uVOܹ?.]:g&?4`zBG@@@@@@@)9sMZ)Sm1D'K       .0a„$ &Nd(pfv*7;C@@@@@@ U!%х w]IXXرc뺘e?@@@@@@@&Mdh[HI_쀥m":RN*C@@@@@@@wupP_iNcG@@@@@@@|T`ƍ[nuqRRʻYOf#      @rCHny$$$8YE6&111&d!      @ DDDblS\\\cccSܹ?.]:7񯒌_Nj"      ܹs 򲕯w,#:!xl       "4 mG3N͒Gyjժ+$@@@@@@J@ ʓ%JSB&K5::zQXm=/6!:/O4:tDh      #x,~ǃB{vN4)>>ރV&D'aFرCkݻ4 @@@@@@<3A=8qud[w Ns %!!A>e@@@@@@@?ԧ6udƍ[lrVjxs_ސ_>: @@@@@@@&L榼6͉N j@@@@@@@KƍSNMa'D'AI       '0gΜ[jzRXnNt       VM0qD|R-&:!)!#       @tt*yImnBD'ϱ       *0yxKZ'HmT;;ǂ       U:8omm`Jt/ڀ       QQQ[lRia^ ~h        1ԁu2 Ϯ@@@@@@@^ƍSLRlyU! %~@@@@@@@A`ܹ111Dꔚ-6*$:!/       @ 7}5{=d       O>c%ٝ1c,\QyO?t'Y_ /Gv"      @i֒%K脒%Kvѝ 3;̡#!!!>i-      >0#^ :~ri/]&      '&Vx=G`f8^wyfiA]t .@@@@@@p" o߾r&MȳB'F]ܕ\tF      <O#""t;g       @ Ǟ#       ^@@@@@@@^s@@@@@@@#@tw        +@tB{z       wN3{A@@@@@@@ xNcO@@@@@@@ qf/        {9        :;@@@@@@@ :!x=_hѻᄏde@@@@@@/y2د_?yJ_ͦ)@to_l\t7o>bĈ;G6!      `<'~<%$@:୉=M~7-M@@@@@@c @IDATO@LP0zJ#@twa/ׯ_׺Ok$@@@@@@@ `  ^gw        Aw0       ^ :@@@@@@@ :!9F@@@@@@@D'x!       tD'!       xY/;@@@@@@@N脠;t@@@@@@@/ yy@@w|kׂN" _ )7۷>4J*ڵ^IZ$[n!4!%L>\;w8q5涮5} ,0&[} 9X.0p@}Ǐ_j>4  IP[?jC@dlϙ3gڴisI h/۵EGbԩb0a1fϞ=o<}x "i=z|PN  !ܿyU ^dm{Ō3j9$@@kdn)RVLj" @ l޼m۶2o4S{ .6cC,"gΜMI}i~B={O>@X/Wݐ!C{KQl?E s@E1G0gÊ"1&EA1,fĬ(1z[ggfի+>]]ݻת̡"P$^c['L0ǧBW[" " " "д (CӾ@c ܃6ƥR/E@D@D6T<|M]>ۥ)S=&MQ(VZi%DǏ%JdE@"zD@D@D@D*kbUը" " " MfbB#[pwuW[t]4iߟgy[uU6mN[&N,&l8 uY$#0M߃ >|(!" " " "Y'dEc<|5k" " "P>c=v>}:u?O ~Ow ~#!xv޽.D" " "wyhQr!6-QUk?;SzUgwiȑe$I?*xy晶~RZͩNh,N6(! ޓ>xذa_|B -ԣGz'" "  v%|z{mرliSPԌ_3," "  ~]wc!]VymV&kSN@aYfɵuk-9L?L%2$3F@s#F%J@$N[ovEEW2??_><0W}]V9~r(~۷_~OoY?![춧E{[lżkKJzT=gl!yn8 d%O=ܾzIk ożicV 6v aTQg}MFpvs}W^ye֪~hh-K/ъ+(`C_:鼬B4F7Xt}U/E@D@D hѢk׮u]~wƌÎ3ĕW^yeY9|8uQFQs=dG4z;nݺwI'kD Din_zNt;r#yꩧ]jq!3 n㎋$ 8P#s=i֑uY /|>`{KK&P5g}Ww;?oh*{shy0y/B >;N;m曷v}gb^ûkΝ<@ &\&fE?sşx &F%lPVzΩL[o_ƨcXc q\+˒8Ï.7]Iu8cFF^*ZdH3'n -xNNsؿ0J}٘:9B~) ož86phpC3>$V_}uOx ,pI'94*:Sޯ.c3/^-T1% *5~x8^x0]v%IH䱶`pw󢈷?#j: +2@iM6oMu?LNqYSլMWAypb]}%_h㮎" " "Дk6i,5$0cq_î `n" " "?3S~Y-d}9_Ǽ|5B|͟ F ,}>QW(z{Eߒ7eI|6C ٳg%4O/F9aKH?h6b󢩙M+|GRu{']?̊O?\q^O;jb(-ܒP (0&&R!&? ,ƍdž޽{>eywD p0`5\cg_{e tگW\PZu(2aCO+ /Z<tnb雇ʁ%-e:]u 3)c(ZJ0Mubxy~kj_MdCغvpPD@D@D@D =Y'g" " " "9 e,X$(D+~MƷx߹q\H^4jdrg8Zσkn/H ,~&:bFo`TyN>| >}4,3dNS Gu-IN?w"_?9_Id%FZT1`2S,NON9oP `ˣKs]BA6($aXb%J v΅:A+qS.ٽCa d)t f>k:'?t)C:,\," " " zAXzlfobIrMt+_R_cO>dΜ:1b3GA NdbFG#8"ͧᤑe /0X-:''o0[PW]O9B&إ^gUBUAbߟH9ѣG'ąؠ3<蠃|Oq=3N4B|;?iryeAĿ)_RP$U~&C5|]1pCuW% XVOgC%{-,)'DYf? ~ 洶~88xsI^g}Mv]u&s=f1P" " " " hQqIu]w7eQ:B;69(|;Сw v@,'6laSO?4}paV=L |" 4"9u2=G8L3п<~0 wS-wyC.VZ 8 ʳ'96/w$3ϼRKvq}>mI_q=1$ v&Uv4MO*XkI|K.ĿMZfzSUB"Q~Mp"f1^|ŶĤ)ҩS'*'98/Yx+7D36sZE .]13Qy;4t'!91vm̘1sah)?넵^DwyU׮]Y#a֭ecȑ.l^`VMښ!3}YuY,FH|Nimo.ŘVl<<5|gtj5/u JLM7QBD@D@D@DNʊ!)SoBߏ]G#\pA:.?) }Gpcv?0:Hղ $9H|sl׮]cw9upB:h@T`6 S/Ύƺ# 3RjbX8&1a#!-!ͼB0k45} 81 4:zJ0 'F3#P2M6T 5}Ȝ*!]-pm ~;w>qlPD 44['d;-f^a['a?:<3z 7,{ǩ 2B,첎q Y} 7S,WVXə3~QmSNu놅_V=,O" /040yAjùoo֖??]ËqQ6[{g˻/G1wm_{sN[LtnNG{|;^.qU a(>ߢE N6:B|;{ "q{oԽɶnC,9mv5⯵i:JdN_1hJ06>l? ;_ԟ07+gpSV3~~E 36cFM;`Tyū(3َjbmS-v$NKQ#Eס(fv~Φ$ErFD\!C8†8cmcʆ(0S&>kZ:!K(" " " "P@[d2 " " " " >q$@ǎ†r|y$r-o?ʺԃAP` J$"ȡg`]ERLLJjbuc!'nQOτZqy'K/! D\k0GLƛ[d„j 1^{ ]/Yy5_W1\%(I@ %)E:uY~v8sI0t6m2e 鴈> # AH&s4L{,?$>M%9\w$&0d*V)uÄà!Ɇo|7n=|3*HJp`Fk[d2`o}D /z S_.:nWK2N=!3ojX@XT㌹H(" " " "G@ qd$o<|ړHD@D@i|_oPf*[IZlYAs_5>9E2sPA>LN]1 "~Vl|8;zKO!ǀ(jcyurVXp*Ce >BJNu*l:f{*w&FCjѢl5x%]4x:@ȃw)Tqqa9|Aޝ6hukɓGLV[-˒K.Y+>3oj*ǭcV Ab4sW\Qfrsrۤ*8q" I?|kR`D@D@D | xO2!lqDE)v~ۛ A?ɧNP<:ap,3pl3f}H+M#Jlyw]ʰmmPn_eEk}+-s꯿B]ո83)L􉬆EӬuFB`lr%t҅ 7`\ 'ݍL5_1j넚>qR^8< 05`hQ|MfĈBSNq^eY-|[1|ܖv5|gterR?s`1'E@D@DInm(oADL[b%05\XKj \{&0 Ç7pȃ!CM}{dn)_K._HI1æk]??5sBID@D@Du _̜";dT@e]v[L(}uYȃj6mژ<)r^#DVRfgˣvӛo9~쿗(BC%`-27~Ft_~SO=;qQ:uZ}џ}ZGHw;ÿ{i8eL߾}l fH7v呭/Tٵ.ӢshXTYt&CY| D"5_1jTg4s! b O&vz2p@\bݺu O B,<):fG0Niî}p )M>3M9s? ܥDŇ ;o_|ڞ*ZC쫯r$oNDmW 4"ӢZpFp\OhʢY94!oGqypim75X25|t% ysHDBNHS" " " " o6 6o^"HSH~s99;]vY6 6|-Al3Lb֊tf9u4TnE!CR=_[BۈLj;t # NՕ:s88Mhl2,~?۲eK;[t)ٮ`loŘ1crKNW]u-(1xM[R*ZdH09^C OYTn__#Ag\tàdkV. [/`5W5۰L߾} 1F#iDNk Vhp`tꩧTMՋ>hu5A4A0" " " K`xNlxgm]q8yΒe;wMkۙkհfKiNs8~s~}ȍr裏u:r馛Fœ:鷘Rk>O?.ZNۈ*o49m csɜ_V3ZgNͥs=V[d>-O<,AǞB`Z֫W/_XĞ4]*ZdF)5{vŠ/lnuwIs}|M[_ c˛U3Y;4ܐsZ[z!Oo~e]x R'O7|s'~<:i*/7gU5 Q _GCB`klaBZgNSVZ'u% $'؊-;9d$"0_b#p /Rk:lyKws_*Zdzrva8 Fa\#A7~6ID@D@D@r~L!!k &.#dꫯUɃs+;~c#/m"" " " ͓@p(|hMp)/:xucYlŰ}7T7xc87CH7s)eO:$;8EN4͕sR aR6s*FB6hQq]\+T 5yPenl<[n9Vz#jPt{瞋)_}WCmY'pifJ] Bc}"^{nlRYeqFa_KI0Mp ԙG'&P(lEV]uUvOºݱA_sj:u.k;:n,/#9M  *A+饗;C,b "%!ZA?/R#> -ec8Qn+Mz-` CEUCN߂3ɓah~!`>Wr쮸 OfՊAg7|P;vtӸq2#IYRq4%97G@#um!ROQ߬|݄9Ug}NM籮V{j.ʊԖ' pd{{n$q}7 D &EN-V %)dO ,_AoWhL'/G_<9'/ICvrɄNm6w&S?#JdaPllˏv<xͅyP%27O:[, XĹZISI'D5Q묳Nΐscǎ=̪OHv^[th~!=+ x zDJXY(gV Z[^^z%G6! P>f.a7UB[pDd=W_ڵ+@֖Tc]7H]ӺE@D@D@2';8uF9”huWx ol <6Ta!ЧO/<hMf9,[q3|-L<>o;v,(6x ϯ*DdǸu&v;ݿy'Tވ*F ~ǭZB<}ڤ^qɵ΃jqM4 U c#AUE*IЕKNԥ)SL}?7m4f ^W\qd~;**_7xc|ÔeT%fU<ɐ#S&[C 2YƗ^xavgؒtϚ+j,? Q Pr#&"X*8 b9{Xg}~Mg|yaKWoLRl" " "vذaѨ?p05.a'Hgl9<# K :ʥ6^Qa2I shwqGжdHO|/z;3<2Gd+uB@!bw E;?ٚO:9~ױFj>4.?/Bä#uQG}dMi(@SN`gB$,ea0QuBTG_-ffZ'6V۷/a1P g"" " " " " " " wr-gǵϖ44.0Dp'F FزW˄>RMo>&$@kSfK- 2M04J_W>,(ChbQyu4O-[4F@Nm*~u] ߡ{ۺiWظi"=E "0xk֡g}/_~A7~6IpBcw8ݻw%J@%`tRi&[ĖDeuB]uxm tR~ah~2{*<dS1AoG{|+4ď?8rȋ.{6mp8u(V:᯿" /iBn^~e[w__(I}ѳ:#ԡ4Oh 'Gݶmg}N ;.'C>uBm-|Gpo׮D@D@D@D@D@D@D@R}™gl 𠐢tS˂'~zڴi=&0}GUn;ﴛXi{o[4gG+`9`}]ry橠QD M:4 +wmetgP([l{д^quHIO?4n%+"Sz뭾ܗuQ-Za$w3LwcJq@w](* {K7|Aysչ9\eQD@D@D@D@D@D tܹgM~'وc*4hPJe)ڛ05jr)?e}=SfV:$qv [@!5g,]p$bpE 2Yf6ǤG$JV%)v@IDAT#nㄼ{VTXc_~?iZh3~kfNi"VXas9@> /y睷M6ۡCM6dVcYvƲ.0hٲe_ "Oҥ/L) l{ Ho/ĉy׭8îL몲J*s$PF-" " " " " " " " " " " " ͐@vzԓ&MZqlGѱcG|)al wZߟuYx *ؒ(}wn\ ._~y*`6lXUU_gD@D@D@D@D@D@D@D@D@D@D@D@D@D@ԩS<@4a9K&d;:=1Mȶ`m"sꦛnp( L>n ۘ1cV/r|'8\Ak+q3>{رcmyiY'MXJ}pĉVq$c~04fF"|lkC hт>wq$l8Xwu;cw}w>~xɓ'ۇe+^U." " " " " " " " " " " " " "P{С!2lUٛ:#+c9fuV_^I&]tEn ;S{3^M4=\sMΝq}טJ~- +yB5M[[n뮻2ōDϞ=:(#;!넼 7C=t:cH7i$" " " " " " " " " " " " " thYf <};Sm۶>M7ݴz:O_z=z>}ύ7w޹Yg[kZ mRc^oĉ75i0" " " " " " " " " " " " " @0aB('h]weN_~9¦zLjc=s=K.-, - 7&$|A!" " " " C8VOE@D@D@D@D@D@D@u5mN~O?6 /wvM7;.&۠N7i" " " " /)S8o߾]vy?ko꧟~?ZhgZje]K.-[l|vԏ<O\q[ouV!pꩧ>hx]w9ن ҳgOGجqpm]{Ǐ/>~X-DYd?޳:Hk>رcg:~8$?\JVBD@D@D!e믿ꫯ9=\sdBcǎ~=/ >rE6mR0WYe;CiY'I[m@@o?g5 6gU+ӦMA\';04)CD:lhѢ9_L81%ac&;Sލ~hh a ;oFTOo[:u]<}-TЇ]wնNs.[)z:tH ;l D@D@D@D@D@D =%vNNS~}7xcVuQpΎ1B4&s=<]OyZ3 3Wī4hh뭷ަnOtG}4 o5&" " " "ld_I;>}: θ|Ne[," " " " " i `a{V``x'aԨQ-[4B;\8@*>m_q7l3[ӚO1/Z&^MAcӧm0a„S&0ը@~j3fhPs̷~[e_x!CTYWF ɓ~}@|'J+RDi&@@ED@D@D@D@D@?SOо}=c%\tEgyoO>}`K.dw_~g%̉G}tە/z%J$#0A >Hhd. " " " 'лwVX~QDOd8#Z|Is8 ~yuY/b4ܳ2_?~Rga;<(vrH 8=QZD@D@+Zt^ED@D@D@D$x!:.:#" " " @{1zh..6!Æ 3fkKB czWrPlBcgCyqEx3z%k9r>ꫯvdMc_l%p饗mzm8ڵc 0k8K;srn:yu8Br=B8R`g]tу>n/rxz뭍dwqfDg}:+sύSmu9tb[ ԆV#Nxwz뭨~~C{ѣ@ j*:O:uԨQ}=mALN;1%2 O;-Z8+P޳ЩpM7u$}Qҥ;dz)1g A(8<)B;-2v+%_f =s!xJrˀ[o2]r%ofM{'&L`Q6F/g:믿>3d5thjFo25sÅ .EGyPu7rmM:!t;h5vB '|9˔-.S;-$zY~^ziSA+}'+[i}Tn[l͟mndoN)Aӄ_g-'9?w9`LǜKTyt>ǧ,9K%g%}r٭p` Ka^"U#VsR,WyW93?OiӷL~cr%p vy|7tP^\z8*~7g~P}8¦tӵ!C#Qyr:!'VD@D@D@Dl|oEArKbQ|e|QI,hAlJ˃ 8sd/cmgKc@pQGŝ ƍÑcɐU)-!Z0iLL0I` )uTr {7)kRTd(3+{x&#M=u±(i*PoUᄏ_3* S;pxZO3MA5`&Wt/JsXCY xq b|F$~:)_]%XNgEΟS*<6 nXGBl$kuEYo$hÁiœsipcgKcMXПER~?w/N5 En)gȉԐ`nX<tA}*DE1f_cY;͟SܫSY~LܮeF"Bev wxbXI]w]'3^q:r `UI(=)nj\ Igͼ;a-lLm54۹nA" " " Yy~srkΦ(_| zN:{yAnj-sPM6aL@`>:|*uQ)JD~=o ycJ+DfR(ٜrȾ''9|gys'O l2r߾\r_n=n/8l`ʚl8_`rg;mrVf3B̏ZazːӴȍG9cWa#`Μ"ښVDV0އN2?5v~0%\R_7~X:ccFCO v-$4A"gyfPt2_z饄|6_veSy;G_Y|Q y睗vq4|&LXz饍&$(d(8NBTPNU!9rN;C|?u6>8_/c*bG-W2|[23?0N.vg)4ϐFBX1]qؒ( o'33O.ٴYm@Y3GlV_)(]t dId4M";Ň뎿u,QC-"s_u/VŪP'˔\w:ïI/JV9s!ѺMpc&+\a*w;K;a'bR ?z~!0C+/{uf `ɋW^yeϞ=\W3YOiÑuB״_<Ύm͈*" " "|ZhB^ [B[k;~a&-@lq}Gw>g~ѝ>ϑpGy^zT`2f ~%[o567<,Y3NDo)R`<"~[g/c&]Gw?\:hM9 fODPmXʗ :xMݥ`,1;ษ(JARUTtD քO<܀F`n_f%z0 MZYB?5X?g2/p3̟̚)Ub|3u<I2>g7n8Na\|t%n_Ɯ]$" " " @'GGKؔl1ի׍7;>2W y.&,ۃk ;c7-" " " " !{?M.2i |c`N9 0MHV:W?T[cw eG[lp~5/7j(IlwJq{=ܾ f< ynk[y}  _ۏ=XL$l\)+q+: 51㞨w9PS,\  NKg,lHm@[(}NٔA5 J\! UF.kB~D&L:=矷ZRcN>j\ࢳ)av Ɗs՜!Dsu !6'h6\.%Z@pnWNܓy?n ;O\u^/p3O)rdgw`[9U S C>ycÒ vOadUMUOc7ؐ" " " "P.^oUr*2?n)sDhEQ[" " " " i9{'wUNYJ?թ"7ׁ["ߑ{Ghg>_]m!;\ٷͧ[l}6#n2R6VnvUk$.E–5Cпvq']} Gcr4aU0/(=<]tFYnI#02hI }(OS7С-qӀs娱g_ή[ΗW IJNXx +hX(y ^Sᄏ% d1¹´il)SXO]vY_)&]V]d"7uV~֊vۍG0#+#K4y?XEAgzaâVG@%Tr= &'yJg&0)â<;y*8,F { 9N샰FNp8AoQYtxe|gr% |g~N޾IbWM8 _KVN<%9Qzl>䌽JQ<)Oe5l`52˒_d4 x>@|CU`)99K:y.]+2#KsύnB{2d&0* NlXU>O,p3ƚ̟)@>SV_)`T„ 3pO$vv1J4ݲp]WE@D@D@D@vo%U ?JiF'mB;w:vHN' QqSYvӧ{4J*o(^zi389ҘT788?xxNƏ |AsS1x3̂}3N;[$ԤN`]vuZd66| jJOQ:R>sA1asa.|*9EkKFeA1bDΝy[y:aQU#sM3\i.؍o)mhH\X y0C8K-FT8žgϞ6< >y˭YE@D@D@D@jK@ E@D@D@D@_Y*H* C`fG;*P87D2!Ҕ$Mhuq;rH'sb<{_y啎Ò S^`"D$W6Wے>,>͵vmQL_cO8vj:,%s9Oʖ>}AO~ [zR\p nC>M 'zJGHSE.Vj?et.bMOrj[)9!/:Ӈ(+k'ԈQ- ~6 O%X" |Sj*xz!^.`GSaN2EDP5Ɍu6SLA[mUp]ut^+t&y.8eѸ};3^.X<)wy^i 2˳cJ?#"FٵnN"뮻Vc̴ Lq`~u gԑ) *b!j+ei'pA1QoVL6qތn\)PVR~4ͬ!xă>8vXƍHa=?=_Dz\;a6/P5?xUV7dVulܣY,xb9{cĂ9K٢ @%`m<'36lq믟\ܳ|' x>_KfeN%Qmփ ~j$fCus_h$h svm$x}ӜRĠVҞv8unp-v?1 5^L }3%APBůxgu;avqfͯɺ˃z,?[+F>p]ӹs.g6kv㛓O>&(0uNQ|l;2~(,(/,@R+娃?eWɖDz$Ӛ7Ɲ?q#@$(7%PPOp8.0Zp0i٦nzUW᧊/n)m1:)" " " "Y'VՊA`msh3f/$;_6 },oI>28C>;;q_:MC&$AH2?dS_' ^z_n%A[+N=QF=#K.~SN=r$sw$l;0׷:s`6q??σއzGwt,U #lP1hM:JУGX #8 (wzo߾f8G^χ ~oC9gAϜ4[ou0#v횰qpM'( J}O? s/B4:mem|СNfQd ) fv_gׯ#:O?Ԯs:HY F~j~r~"Tp2:.C4r ~tټ) ( 2^Jss=NJ#yP>Q8WU-~%q)%?ر0e;AM?TEWd]vq Q@ 9,)b9nil(yw}7F G-%"~6Y'L$MD$!%wMEL1cZ\'%_REpcK.^B%E@D@D@*#˃>/;eʔnݺI% oޢEevM~~nJ ZY UW]՜q!_]('vi+͗bKq,3x UG]t[ё˸vmKgg =`ZcmM7Y,!u6rup0:yDB?1u9MEM2-q駟zŒb\ ܷ!\~PRjO~693;VZ9a\Ȁ㍠~ltzFTfd1͂.AXy3sG1±9̩›oyw`jgF[c7 K%S$PnQ.3zX.%,y3נ'bUp7=vb,XFNA/,)!Wݩ0!] oPZ$?삤}Ga]M rfp| [_OU!m?|oMl饗n*@ Ql|=`RʆMD@D@Dy@ʶ*;\B_6qj_j ڙJ{i){//BA-) *26xc_Xz`  _7|ԐUP ӊFs7#u]Ax}/7g6‹gؕO<177I<S[*#"3tIĝMc38G?묳va SP8Y k7|J8)V'̧^|E'-LXؠbqqF~mb8RAuΟ 6m:7n8?4`Y J"ܢm۶aA8aJIc],3zXMg9-y ܉נ'{< R |v"\`ʄo,,0/~QD*ϼPZ{O/Yv4 .?_B^#X.6,;e}uM.8< n~EY֎' 4߈rCݥ41?'qΦ=씪!3 E\ZnLc -o׍89n Yϖzs7YdQuyi†n3ɧ6h#5UrٸX|HP2%=,hwZ@:jlgI3+JQ'4:u:sX.̐k''0+] [Tͭ[u4ltD^zXSiYNgDN?)]r640pƁI50X80!0;<$:A4)Odluٿ `S8~i$+kܚ 9RLÇW fȤ;*ժUˤ  ]Vh3p|nm3C2QNZ :Ts痘p"vJ !%UzGy۝PTpiґ_@ L2- B4)7߬iBy3')KC09Q}$9g}.?@!v: Ѩ]2$ HtB^}C"R)݁ٹidHBύJm;jš]AԪU+poH#Q'sѓV+4M}Šh  *v΁陇7/6zbz,GIWkӻ |ZO_ C_}IIҐ+WoPvŜ}hשtzN%Φ&QS9X$zٟy/<$ YZ`N׽{wBS'"E۳M,LDÆ Kf }dfb]6gR' ױD'   6oެs :/_L`P%C^qUg *^9W A@!:[nтךv19:!ޥyU$  䠀^.N xʕLI ZhCTl ͝-4͉鸦+;P@\kW ^P F $=?zSz4UWFv%΁Ks^+gSX%W ĉ95kdM:hf͚5[jDNLw .5zͼ 5UjY`.= @@(:A=N5N65j$H^ۭ[7Ç':!@ :5TNjٝh뤶`NܻfϢ=\;4  jԩc6֖5mڴ0a I[^xPHԩSjcOl6N(A Bv7˺v)-+o&-+ȑ#o;{qEt@@(N? * M8묳f͚egz;ϟINhyKni?쳃>x)%?o97|3l\mxsv}}_ti'M@@ r{ϮӎN8cҥK'O+Vh7lꫯ {E'T-:CiK/}'kVXi gϞe̛7O޽C=$ D'Ȥ@@@6m8_ӱm۶{キfv `Ԧf|0rrY@%qwfPf6Y1_}_رcիWcǎvi@@ -;w_MB`6~'k^1~Q4iүj*))Q'xqd*C2eqvyz'G__Cʖ-i稡Cj1O{脴8@@^@/]tEC dݺu=?ߟÊ~"iѢEFm+hF-hrH @7n\}tfrj p&ɹ{E9'  [lj*SwqGDNLt6njSb~^f8c~w t͚5˛7ovZn]p hذ?XY+Tk׮m2[n6z3Gkʕ++:A =hg}N8ZՔO@@Q@)?p={⋓,L߿iV^m9p@yOrA frk!m`t`}oУGbeF@X^*;/^lj֠~v̦Т DsjzwygԼ&L0|յ}3L8vb˖- COk SLkO(DuH׮]}]SKh}Sa2EcM͑PktP&NftM”$AtB&z   ?vaaÆԙk9^zt X@/9ͳj8?S>Ѧ TpZ)Sʖ-kys=ã ^ʫ1_}96s'dDZ   P8uԹ뮻4ѷ5ߊ+;~u]+Uj>-̟gz@߾}5uDQ dC69_|m gIc{W8?W&Ʉ$@@4A܇Z@A k/0uTokEBU/eN;-m4]_|aN *Wl6AC<ڼysRXh9o]tH%*T0j(3DgwO$*A>   P<;әgY< (r%OD h=/`*^1w@ȚO?WV|I p vD'hM`/h+`fSGt'Cn$`8Mtºu봔C&ML=Zz^sY*Vh 88"#:Af33I@@@@@@@\iϞ=57n׮]k){͠ٲeK-ٴiSpkD%xGNP9P.jlP3!nj]v1!{,X`G'4o{z7pCvqN/0-W/_{t9(@@@@@@@ 4&sϭ\Rh0/z \ W]uռyg.r)/WLSh%PMfW{Y/.].|ZU͙3ǔWŰL~`BRۼ]|]T/Fjm.L|q]8c5k5죢Mg!VfM̘1C7a+n7@@@@@@RF3g\zuݺu r|EӧO'|]aywqsa4?i$g7xC)2y[S;(NT5yz%);v^of޽>`E'hf}8dItB&z       rĢE-pgLM?`kfoNL:/QCP({K,4hz ϟE)LaժUae8 @@@@@@@t6z޽BiCz xN?toS:Ϧ| TDv=\;'t͚5R[lVx뭷MpBM6[|yTsNHU       #|-֠%4m-`e4iRVLh*Ud^\9Vq\t믿'nذe}MNډ5]#"       / Gh{RW^y[:!eԌʕ+k! M`ұ&jԨq+b\s}wyL;MtBt  ~-wG@@@@@ gl駟lk6vŽNXnt)SO^RJs9!iиqcs` 6m<GOJ֮]k?3m|饗sUL;iq   @|'Z>7ooE|=o8Nqsũo1ޘ{o-g6y"/͕h䂀+ NKv}=d3P@_i9Rk}f&ӗ_~p͛wi}٧N:#Z@˖-{MvءO>*T09$@@b;vYA e˖ 츖l |W r)'|rjM)裏~CmV[8餓JaСW]uWL]!c6'a&:aÆy[g%@@rK@$&ĸqx E:*Bo]($żN{l@@ ^@_-f=M'ݹsg0~__6e.$Ѿ}{пl}wC6.C=Tr~|fo`ž,A z,XJ%DT@@ȚbuO=T'&w]wuߟ{9/@_@BQŖa;?ޢFAP@_8+DX?U'+;4QFvZzUQ GҥKnf͚&BhYs1@@x駏8M jzX/rO}Zlz6+UԶm[!Nvmgrfh8cLλ"ar >f״LZ ͏eC{ooذ2i'.9@@ ("A!iT)W^zK򩧞*W\[@\@zөvȑѮ&Nho7.J59j5#w5YȴiLW_}6mـ@@Њ~ ,i+7`$j3fpJ4L2NZli>RB2k˪栖oA,(T՚7N?txiͅ9P]ZAs'M/4e>|xݺuJ;T.>&iӦ&IL8@@`(@`ڪUkNs @rS/wjNۢ ~@)5qgWZhj3E >]lG',^X_;s*wvjF@':uT(X=.U}Ǭ]E"ZhisOE-qͥUb |A3ԬYS(@je/XjUM_~Z'WS̪fT5#fV0ϝ;Wa1:QƙDOߒR@MkYjU+,zV ) BݻuߧLuh< hz*|'H# @A hd?,ejgEԬpwH?dv1IC=v[Cv?Iw]wUm8C/";4A0<3իWһː!Cɓ'k wy7Vd:uLhWNgv脴%KԪUK;Z|eҥE: ! ٍКVE3_7_"2v .L@XpQڵs.l2^u?y'ΓrS'H < F@4&;L+ܩJKs92Ijv'9ڵk_p*š@]wu?͛|%(UVN<3&G}/_^ Ԑa2,㭀rg}6W,+GW@(,Pҥa|e{~7A믿:wv;߻:Jө99v3/m8;䈀?˲{Hrs)]r%څs3/7 O՟O ߥ{Nk`M\ ݧ  H@ߞyub]Φ^;૝믿Q܃&IӉ4̦ML᧟~ZKM/qYg5m4Z^xw5ƍMۡChN ,,vcRMk':*+TkkZc{e՚yO+R)ɦ&S[Ŋݢ0y+kW([X7p֭O?W+juP/LhNQb"ZkYzkŶ wq_%68>J7n+x׵dPk1ĨL ;/: 'ތ25'֗2#FPrV #.+xwyMtcS]#ݩVM:ꨣLg3u֍=Z5O>S9P/ϟ?w\iL w9%TSyNNL:XgJMO a/(rrmdz::3X:cTWJYW_ٽ6lX45F@ZG5ꛙ>:oĿgĜ(zaM,ĘwW#  YcN;鈆4dnvU+B㠁թ[n!Ûo9d4}_gJ# 2y{Ue?icL=I&tjdi۶m~\NUeѢE:Ex g,GD7o߾ꪫw2fB>|Wm턂..]x+f!8p OS^&p#7tKЗyFL M4ΧUFrMQɩ}6! bz\_)= `Bs/iἘYn6i@J@K(ݫM=Q՜u }9^/M}9=Z;!kԜ@@ SF5@?%12G޴iIPP`jbվ[w*4+$*?&NwŇ8';~R hOwő[sղ!mrMHp5רAf̘RX[6dz5\!a. uGUv::c(IT{;w vKLG{JO82e{%&D>i}?J_&NH~G~񬎼ΘnU"RSaNt~#RLmVM@@lB*UԩSbH-lY)  @z8;j&|,9Dz X჈αANI9o< fo ڮ]CLKf3q\)RyԓwC6h3+$<4+ 24>r^|hiϐ飤U64UI2O-I~'3Ge2$4K @*Z %iCQZFfډ8x7lؠu ˗/*)+cM;I49KSi?#VE[gLY| qT&UrB@@l OZnΨY5ݔ$.@tB{@@rH@/kixLZ+As_e_&iZ˛:(39! ROd*C*wi$주qԙtt5ldt5dᴋiJp *Z?59 9/EϥDˋh:eY v qGnH2EԻ{vtɮ<뭷)/0 P1zhҤI&Q(ILG.u4ssx w0Oӯ?>guutǕ>Z#p>Z^MN&  @h L?O8~}CyOY!sCj@@ȞzOWZ?#/mT@wk$}%wG}.r.''IMDs=vnmzر~zM毡%KKK5lNLWJ & CDˎb~u{k:јڵkD#FW/ ҚqD:P:p|NpEQh 飤 CFwjV8 A;m2D9EBsx2zk~ 4X\OԥmC`%%fV\Y/>cxI'IXbU1?I̐֡8u3,ZHfW_}xtW_Gh!:$;5/OޣGf̟?A c saͣ,?c#VE[gbziB~_tU|XM  @Q KD]w]ZERgNH  X@ .<1Y_o< }5EG}'ׂ~4ԦM vmҚZk )U߮i'MoYhi hP#)-֯_K.?=F#<ꨣtY«KvZ(cÆ 1])eS ƍk4TC O;:`aZ1AAA$Td!!a.6_sx99r`Gy.} 5t:dKf͚x㍚{ 8 qG{umFꃯ1W ;kF{jM2#נ5hm&4ܫqbƇdljO+iJ+aƌ )KR38 MP]yYX\!?*W^ݴ<+>$Ĩ[e˖ MPکW5@JӧO9sxm*Gw$ޛzvaZ\+/SYej(P MP%ZFe%Wʸq?x&h,(:A} K:q~嗁ShAf;==*mf\D9/K0 қ`JHdmdz::{뾍JUڛ^:$ _@@."֗JŀGNa  @. jJC\~K}zgWcѨfctO!`-x"My^ rٶ]ΦfRZ-OuS91}{-`5C(8Pt駞zJ1]ÇS;hoMN|;jʩ_9[֫N6"7'M6 r28x,Qcso*]88O65MBRz(i͍,MD)D2oH# ,C4;ԗTeSpUH|gf@@l֚nZ㗚;p^\Ro#Fam=#Q'x?:S$AcKǏOu_rҭ~] ?yM7k-Q4wt}/}g&hŮ0QhA:כx|Ztig ;'^٧K+Ps?p ;9qԹGi…N˵5\6G9q\&Ӂsk5pL֫W/tB>C XDϞ=3֘½{G'h&OIo`ЉmL/vir7ڙJawe83'q|*MSM'8ĩ?kn{&מqf1=u{t/IL" ެH4c_:," &4W˖-ہ^Ij5G%>h2p;j('y)5@h4mf7@Ce6lwipZ2Z73,v:0ȟ^ӷsET̮I1vvtHZir;8 +&'|De:u{5J:8&9'6OE44iEؕQg%o7K~miz"?Kug95j4M2 ٵ9iv䔸?F^>O7Ȑb`ʸ颭?k8n{Q񬎼8n"Jm`tOMeN@@Bp؅  _|N"&9NHD'xhV i1oMZ!.mxǎkGb4CCժ«V*1:A릇T.M! "hb ^:>V3vmg֭[RdNΫ1u`($$ .I:,׀?3*o H_4LZ@?QfP`)$9E5kN6ld:oxtBiCf ;(oW`tBKNUתN!8x(\CC{;i8fN3T;9Y{q6guuڷAY|3+e $CҩNH# !@tBh  s tPgg5ZJK,1uvBVbe2-,1Ĝv- H٭ l@Qt֭H99;8wT^m/8qQf=Θ)gev Z²2ID@(0 ?t@@}gݢEoQ+>hzJX4je'7сGxvDJ7sՄ`??ЪYfZ!(KW*p !pչ/s;b3^u]v^{m6F6W,:(WvǕetSϮDYիۛ^:dz+s;hH>mqLfOa_TFHT`U%itޱq<#3,HR>H#  P %Q7m,$ 䠀F}ZnNhkf D8"վ5 /_o6k_ŲW֟}فS뵼~L2ZǕ =pUv3>}hN)iVܹ<*:#(.fkpȟo]Lss$e?P9Œ%3M70#q&E;g.S#Tm&m?#hޅo{W|(6md&Q|y& #`hGF+zrm'|N(7@U!J*%QݺuǍ%ߘZqK-[)R%g}R=$C}k >CׯߨQ#68XOZ|cǎ˖-WqQF~o q/Y^"NߴG8x>k +$q={&PXuFQoo&p)\}e2H|*u_ı˗Mf^Ktr?n@g3ޚ5k:g6U\]6393Fܶvvmo7g6:#<8Lc\  P4/hPI&@tB֨D'xSwz߮yy: ) h>wNfu@x,!zf6m[%iM hO>q:N;9$6o#9E}؃b g3G/@_|sT_kETw9q\>^zZ[TMɌk8xjz p Z{Eh^3fH)fovδәGICǮLJNe2'UT<]&30:!p qs,zWs8f[Qs@'ϢJsC`Y?#3,+YRm|, &1ѣGϞ=[a +,ѝ }˖pCGx#i $аaŋ'?ޗ^zI;lj!vt̙3NЩc4/k9] 9-R/_f޽N?sZ8/1nO7n4l*vAf&8xh$[?]vPaڴi&M?$0_,:(i(]Ckܹr^μy8ySkSȚB;.'Բ|+uؑGirĆ K'Si̝ibmW^y~W\93BNЩ#` *x-(gu{zuqWp'NHt+.@((o߾`CG ֟#  AYf9k, |)zG7͗Gqc=坜\&wq *_P~ 6L˟Ǖ W[hs'x"dT! +VpɻM{tJ/"~g6G 9/1{SIuQ}5x篺*Iozd' `o#LgI !d̔)S]8#@H́}f )W֭[giD'8x{f+GngWŊqe3h;]S9N`?xVG^gLYL{q\)D8  @ !8B@- 6i,_~w_:*pP\M64 Nwc@IDATwvIwu`̘1Nf|+WW^vm;ԨQ <ˠAZn˟ӕ;z뭁kℇz߼|ωWo~s=K{Vf03FӵziPP+C.M5/9Zmɓ''sƍ>Z'7}J)8E4&cNazə|%_{Kva_L9s ̬S??p1}*MSMZ2뗄Dq6ˉ8n8Ցm_wEWʹgI Xrd@@/@@VZ~?rȓN:I%j5k.B|fJ kǩDS_tE!hȡW^p~MZfwi+0r"AdoeW_}.P̘TnZcɒ%.iߩS>Mg3r^q)SƑ\&ӧOw2ͦ6i2&G1}t_)bɴ$zK.Yz^۽{wS&$e 9W.]j>kvAM.̟'g_NE1wy .ssbU#s:mG/!C8Ԕ90?LI2 w0Oө7g̘A?3xզqHɼ㶏Yy1f1=uRν'M&  !F  @v4sih^G~5Q4f͚M0!@ \]w3iٲ9I,^M6?5"]Lo) {tH 5WHcҚ'# qGB ^˵M4Qz'%=OXm֞WZ/M حfPx1ŐiB=w}w=`rqꩧѲ>BK9DAbI8s"mN:UQcC G@f5Bb .3vX%f+WCu|Nٌ1}*MI8o8Ցm_mW,h'Gs6  @+;@@ z-8fMf:t?s駟nh-ۙJ/]TQ\sM5 hpUfฯ jX]zx!/k1F%`5):u45tn6 5rӞKDΫ?GIz{՚E\buj4oy}?|EN Z/S55n8ߺJj=DOKSlYSg2 hdJ3pƝdWc<;\kxQ˗_nRЀփg>G럭o1S"$fϞm6UI` W,;EqGVk3,R6P޳7/{&  i  l3[C8@uz?z-ޙx;Ɠikzc؟k^[_oiP?]IYHNWJ䚙'LtH|tޝZ-f=lCO,~Y+y}ZΝ;kdĞ.0@.h/Sy*x۶mDCd2ԩQ 68! yرcHw[zu-dhDg M8ꨣ4/E'0_T"ѱ jv0Oө?##VbE[g|Y|!D~̧@:aIڥ*Vhʐ@@@ mVvH@@@lAj29JpM3 /^]9ҁ/^YhdjksGVtw}dfLW_~~x}HpN=-CФE3&2>|FJC hY%#Lɜ)&Hpe(^ۯwIJ@ Yʣ`&J>Qo}8!*L&_o(/U;UE>NsYyf1=uF~G࣏>ͦPG6@@HO (@@#p!htD/ݦw: sj)RM۵k|~Ww?<Òjc N T ]t KZ¿ƹXNq_(dhР\L{ܑLtD˫GYVT;aWMxTuQ2+&M링}2;T2p%h/SHjѢŨQcDȥ^T?>NHɯYԤڵkOjNcر!wqhHtH͵PiJgkOOsh;Ҵhoȟպ^m__)@ |# d(@tB  m45WClivMگCu\אOkShB9kN)GRZӦMاrʔ)SYW:uN8ƌ3x` ~]C&L7 LfZ[M7TFds $:c(G'N|4Į)m)g͚uI' '0TRJn^Sg6k>ӧO2Oc-0m4-ua^W#z볩19;ߤ˗/E;iLN`*qq=gtΦV|BTr654ig%3g 6 HYKmf1=RӧOw|E%9s   f%AXfI@DIh? 4?'S47F4f2ґoFS)+VxN ? 964'jѢE 0Vo߾}Jo6gّ1+1ye˖kx1j~3<đHzSDnc;g3~z3-QjһיڼvZ Wfiݺ"@29gOfsӦM Sx뭷͛gƍ Џ3Д$R@25;eloϝ;w 5rfc:*&o߾NUW]u7;yu9!?HLn|ңm۶l#vLO?<Eݺu\GtD &8&l" PlȠ(!vo8*΂jQ4&ڵkAvN!   4w*2ְp/ߟߨQ#&9i(#k֭Çk;4׊K:s  Pԏ:x "D 0wB^nz`&   H p?o߾ DpRYg5k,'_w?T.\SʟqN0fzϊ "@>>x W_}uҥL6@@1A{oT̝dc~i @@HWiӦ*T"L:U/mvTW_}7V5OtKHK.so |2=Mpw8Pw}A"Ȼ_=vX/رC@SũA3 :!sCj@@@@ X@o^tEC ^ns=$՜+W& M([jVE:t=zf3gNM 0y{4ib/'  Q CTԃ   @-ҵk׀e/N,ܹΑEvLVjwz&injc7^Ik;4   #    P@^zi v/_o߾zkdG N;)#v;:yٳg9@ȗiҬ>}!  @TD'D%I=   ${fAy*sϜ9W^hٲ[z.;+܀M ܹZ4[qÆ +S!  @"@@@@ @:u.=iҤŋX7,PR%v{lÆ waD@fMT>޺M4I"?Dyh"G$8?7=q3I   )qQ@@@gQBR?#7d!@@>m m;;@@L""@@@@@@@ :!L@@@@@@@L(@@@@@@@Nd!@@@@@@@" :!2J*B@@@@@@@@YD@@@@@@@N@@@@@@@@ P@2@@@@@@@@ 2",n;G;m2I       @cv`:HG,@tBtu5UI@@@@@@@)=ʎ@윆%\駟syW=        H@c͛>} 'DG I)Sfذak֬@@@@@@ ^@w_*U t0;g΂       @ Pמ#       Y@@@@@@@(^s@@@@@@@#@tBv9        +@tB^{z       @vNȎ3gA@@@@@@@xJo9        7nӦM%VpBSFѣGDҥK~Wv[lɯm+f͚mΎ      YRJΕ':ƏGO=ԗ_~9_'+;dߜ3"      @.]bL|5j;!]̝B      * \X-^{^:ɗZ˵CrIN嫓smmڴk B@@@@@@42اOF]qէN:E+Y0 aP-[z=zt t @@@@@@PhB<7xO,z0O>QFa%R7l0rN ͚4iiԩSM      =&h^O#$HI%D'dW\nܸtNL       P0.Fޑ.]DXgEذ":!m:D@@@@@@@:vXtH8Tjܩܹ@@@@@@@ _VڦMHZzT[$UN%D'ε%       y,r QՓSD'1       *кu*Udzՠz2$':!/ MB@@@@@@?ҥKw)vՓa%9x8 9xQh       @^ d(C5& y]h       @ 4lذ~iA!s@r6@@@@@@@< nqN Ҿ+8@@@@@@@WcǎJrsQ:uJ`^!:!//F@@@@@@Mjժi&騪Uq`^BtB^\&       7-АQBtB\)ډ       J*)Uӛq!lD'lC|N       PKԩSJSy!U^@@@@@@@ R]!y@7߃-@@@@@@@2hذaF%U>yZҥK'SJrs'5ʭY&Dk@@@@@@@ 6*UVwQTiӦի J+]ts0wB_b:       mvбcǐsko1&H脐ۀ]       d$pCތNcc       @Fׯ!ko$:)=B@@@@@@!D$$ϡGהl]mTk֬)NC@@@@@@*PJ$2Xj^{yfRJ-_Zjvf;/.]C@@@@@@ AhݺOhNts       @E92Ǫce 9VvKD@@@@@@LܴiSx`ҥKGU h!       @~ (cǎJUh:Nt$J>S䢔@@@@@@@<~`T^NGUCtB_jޒ%KjժբE#8bҥ92      Q hLP#vF 5VuX_FׯJ v?|rrg}68@@@@@@r^@cT35Jœoo~4Л2'N!:!?\h?`?4 @@@@@@(<{L+,fG:u*W͓ȹNȑ A3@@@@@@@ \Zj>[  A*!       @׮]c5$:!.MD@@@@@@@ NG@@@@@@@"D@@@@@@@Z脼|4@@@@@@@< :!.MD@@@@@@@ NG@@@@@@@"D@@@@@@@Z脼|4@@@@@@@< :!.MD@@@@@@@ NG@@@@@@@"D@@@@@@@Z脼|4@@@@@@@< :!.MD@@@@@@@ N˗|vd@@@@@@@ttdY,N>dN8I       @ cXaeG`-[dL&O+s1͛7/@@@@@@6mٳp'ce+f͚nB@@@@@@RJAeOg͙@@@@@@@(Nk@@@@@@@'@tB9       )@tBq^wz       @NȞ5gB@@@@@@@8N(N@@@@@@@Ȟ ٳL        y5        :!{֜ @@@@@@@ :8;F@@@@@@@ {D'dϚ3!       PD'uOǥ^za]s5JS       @hLP#￿F ̓,ӭq$g9蠃vK-       /^ܠA=zDY;us'5Oǟ9t&M@@@@@@ O (;D'dǹβe ;m2I       @cv`:HG,@tB9       E'@tB]r:   k<(>|,QT4QQ+.aB4]+(*;(j,5X{ XXbAEE߹/n{w}Ξ3[λ{v @ @flZxwǏ>|ѣ嗖/y䑯*X$@hy?'|2eʔ;.B:kKF  @ }0@A!ӑ @QFI&y2htLV#F۷H@ @ @ @}уn!Hȋ  =z 4J @ @ @\%OӞu'O2dĉ킖@K.ԩSr_:v)#& @ @ @ @l_V|um-`Wvei_O~yS>vXs @ @ @  X}1:ug}ET?JvD'$4ؽ{F6c@ @ @ @mۡCuY^L:vvhbp "%0~=zL2 @ @ @ @[m<`ɓ'2dĉvAM ХK~u)/@\1bD߾} PhA @ @ @ݻÝ7%0vfaƌ/f~ {Jk؟կ|P[n?09\tsRFd%NvKFq֍̱ A:ns9Ag"!91=@'d2̄/׍9̩!z0'vKC*n;l-:  hE٣^˫oC9$yOc-Pr=r櫓LC:zkAz^{zS;},\ؖt@fojH=ySMl~;>||c@ @ @ @ NA6!@ @ @ @  @ @ @ @ D'ؠJ @ @ @ NY @ @ @ @lPM@ @ @ @BD',A @ @ @ ` 6& @ @ @ @!B @ @ @ @ATi @ @ @ ! r @ @ @  @t @ @ @ @@H脐9@ @ @ @lF^CΫC,3KNyN鱤lL7]w;A^}Φkʕ'רjF࿿OSejY=~I~P9:Q_+3$yU^EVk!|7id3E󏔝7¤/]|UweģG2e&2 U~]8D\cW/2Q|cI{menjzԀ,ӟˋ.(-(]6X]'k)ĚGV^[x>x]'?,<]|C0|ʲZ˦2˽OFބA/w'xu_DXD\Dz+/gI^d§oDz-,K/g۷>)1x1eLj@}#+Q.pIAtw/m Y Eu[>ȹ^d>LNHL{d%{D߾y,v Mr(}'*ǒ#>O^\LhB΍Qւͥ W.]ܮቦZ<2y}Sm :Gv>LhBB b$rYЄRn_I46ѯkneB*2r̠BL)'̠M4=$/|,y~8dϓE`y ~6@/|,y,ݳd, ,{e9*6І@mR cdl,K2(l'cCS rē'08&'cCSK;%eϻ\^BM^^OvfϓES>{;%eO,GEh4ZֱaS eIMd, tǓ$POƞ7cCS Ny2.x2=rdZB!ȚIVZF#: 6K]7Kn~ Oiɵ-kWzwҢ {kˢS > /X7!M?$YY/|OYs%hun>}}a/(O\Wȏ~M);l$,#+/-,&~Y!o$u:YF*;e^f>JQ5I')g扮~ڹa]=m:c/ʑc(.aǶjɅ9:ʜs8Lh84=du ݧ%&zm)&Z`2VxPS;O~v:<: EbwYx%TXrnV2޾}y2 :T;A3Mr" 'Ǐ#>OF<j':dX@ >OFNterޱZ _;mRx (Ͻ.7/zF.w+d.ݺ)/폒m[+.^&hpip y*%>8 uYn([2B6212Uw=^ZwXMw]\&?݈9/!k{ .P] =$ߦkImd住|q hwCTM%饿.t߷:*} ۙ/#o}#2 M(sMr.q'* >.AA} zјmԔ9k_j)7ͧw XhBP+N4KmK^no^LpEhv7be& 8vBJ SN,[onA5Ǭ@|,<@5{TTT_kC6ָ1y2VX'cI;Yz2fO@<d,]d, OmPD'vJ,:iBfPN;u2CN)PNGSL:ԟ}}}lx@ju]PNE'Uzt07>Ֆ q*3с=t J E%Np紀1B7t< QG.ﱥ\~: 6qhy0AXyN^9"Ԡx+\,ɚǖV8$hD~x jtTI,-nSRziM%:H߯bhB!(5 hFMǔLSJ&cV`C+/dž@|]y rjc\k>Y<6YNy26f(=sӗh5'c\``t1Oƒ@w<dl5=W1IDATd tʓtIwǓ$P;w<*@ϗf-oi^l[믡lft`iSPo":I|<4sja}}mH\ |8Qt^ 8cT>'޽rѡ =:y"Ǯ'y/9UTLלUƢRUW|_*zy' ?s:_n3];uB#WMbt 7WT1sJ$MED+y|j6)e{ >O y@r\)oqrʓ!r,!F #aSOolD;7:XK+e˭>!)OƆ@ظ;XD."e=-β`Xɾ@-}r2oWWL%^^SEz!F]mm_5VGGOꎭf2 vGiZ:ib$gS B15}%>~\$d m>ޖ(*9\K]yw{ѡhV (1sSr6gIn9WfkA2_)ٙqV3.V_dP='6o߾+ZSڃOH<<6YNy26vP%6haD6q hƞ@G<KyzcI`dlt鍍KS '%p uoՈ{aSjmNV"q#IN0Y~&4XA/`K,?,VTNXtT&nZ.E/tf맍{ ":E4S$2lҾHLkS߹a,/.:[hÌ8%o~PqtKwݮ:ͻvz&9G۶?'f;u޾yL4Վ4k>YYT>qA<6YNy268GES8M 6Ll8XJ2GOƒ@w<dl,=D+4!)OƸ@<t<g#LӟrD Ѥ>upw-EoV̫7XM&U#Ol+vOko/r=:!0뭳[L[-$ȣiťKnݧ>{Q:iԷkO}v0@Y}9k;kV ̲zu+]XJ=jX)%5~R;ʲZm܈P3ɵwQ]52ND'Lr\wzE;.IF1\t-7}Wc<}|Xϓ7|yy\8؀S ǒc'c\`i[bC6dKdlt CbsX'c\kOo_]d tQ :ҹq/w8\Ln V]ڛEU_ R:s4}󈖓oBuĶX脘t ?=6?yz+ɉ;f_CK-*:tqOKR -mhOylI3PX6GѤ-.{o-RcH譤9P#mƐ8@h!n;gyE8-RbEs.apx9 VDj_S=*v>O;y|/yNeya1~r͓1.05/h͆AnmO }zcI; N=!0iOo, tǓ1.7i.y2iΗNAe2 :{#˷3K}=c2G>ȐS(ʹﳋ/Ի #G }.H:1|7%쬒iy_\1\4_Ld /U9׶Cnj}b {A_ o{L;'ֻ鴹 8@ӣ/AβnZxaL{DFx3>-)`tm'ŤmNҋUTxw9GGZFo4I?dy4.4keòwWߑ $" Dv:`^^NGa ΖMx4gDN/2z|nFe ʩ;հt+>=؀< @k&I#7iV:r==}zFL×t_<'xD:KA?,w'Yis|kL* s[WE$:r^i47$ZE^r>tc_qg jɄOt춅UTh}dUO2tUȋcD:Y\6\-(s1~=#fE'ѡuLBJW!:ccxIT_NA=/Qoזp굫Pc @Ӕ $]. !G_Gw~fw!é7(UhlP٤c$7+nx!>d<|0m4ϣTylZqgyɤhoڴ!F mLOo'S@%ǧ7u ~4 Я7u MKL.0Z<|!0/o硻ɓ{*~ 9E%9g_ʖs/Ѱ/f!T-&bY%|ӆuyF;+ MP+ mLQQѼ]M':rd 30F'O p7!hH1M7p:hvbc,<}}dNr!r-Z}al*EEE 0<?/[΍&hd幡t^!:il#g^NGEoZ*Α MPGnC9beSY$b^zCWFeR]ע,' KaZ'1Y,NX9i$EEEFHs|hm5E hޔc牊3lOWߤ9>Oע5g'**o݋m'**o@|gy+&1#e4@6fo3**WAO!6iGLDhR7U)WwL*2K ȓi@`3l_E?37HEӯ~4]{$9ѵu NEXSlVgg]*Gn+3 nNW,=eYocˍ ʝ6wȝr@yLzDNSa i[ g,^U\s,iJVU:/'\ή1-poccB9|7{Рϓ&< t)wd*kϓoVd]m'ww˹3[xΘwتZƴuXsףu;u3L:CԓLiי:M6<('_&~g/(I8J.7M`@-T^|Cz*A>zzVb O~{9_l /tJ'/?)nH;_/FNrv]Pzo{ 3V7Q}WwtMctҤ_q6=GQaMu䥍Ke'LYOxXIqAc5 V4Q`%-_nq3< lϓ@|~s||{ 4S>O+؃O."S̶ӘUejZy4'/C)'z6egdee;!jC6;weÞLf+H}O&Jܪ7rALd ,k'9Xg5/{2Vߜpc'/=WG3ϔIw ?iX,4Dg q 58O;[Mi7ya/c+8^6@Bb 79:VԿ嗈WEw4LX sh2]|Jc+&hph< jS%Uvdme?j$R sUOy}\9BF7?6U-EamDq4vB[мp {Ur<ړ<-p8߉<<ُ,=Cڂ 6lB^4͓.76|4Ǔ.7VA<z]`}|zS'_vP s-x~$N٥T!$b@H|NtBVM[r8qJip^- AtGa1%lM~zc'cI`_d rv5e'Ht>bKQ-T{oϽd R? M!#zkTOlkGE]; w)?6`1M"XC.[tjaQEL:TOtHcE< ѱINv4w4@/2yRKEJI¢荾5>Ok#>Oy@[qyyfYz2ffAmi[mٰ|ƸƠ![V=|zcV`ك-_OƠ@7XjZzzc'cI`\#Zϳ][˞Rj.g/㱰G׎NnN6yrx#9pˤ5ָ _7IX8(9O%2M.) ܪc'c\`>ʱІ@m6Ȭ1>1+7f:ɘgJYMOo ,Ƭ@=yzc'cI`9H '@tBt_iWiu SP=m[)z?*odC9ԂgHhjID =jW#4 r{E'SEV[V^tbT zP 3Ȓ6XU4Mc݊[ֶgcuCֹ 'nv0Y`р؊7ޏ9{Q+|F+.ՎN6[$A-yZ+yJ;I.%SX)w;AQ.{oo{H^z7u*i{=-7Z=²˼U1пӤ{ktpѵ\t\FWO#_|VE9\#|]Z|>)eW >OYȗj;o"v5@յ~p?+3 u<.1A⫤KoG4lƨT`{վ_R/wm׏>v ŷ/[mHXؗh\EaZn$9i ", .@NIt>OH<]S$|y>{;%nqц@m6ȸ1=1.aԖ6!)OƆ@ wX=}zc\kqw>rxQ|/ 0&NE_6݌~TL:1I>W1'XY??Z=M)_˶]}T2IzlG6^CR՛C晳ލTߋA2n :Y6} OڦQg.k>6) MŤ%> /MO=N,Q}Ԩ6A:vº-Jt:A R.J+p59L>lU¼grYe2k/ Wu].9.\t0 `8 >2eKuOD4ľey]uD'JÑ<>O#y4=Oƒrh͆A0Ʃ766LƆ6:K[Ooltʓ!Щ7.x2FAp HD_ծ~umV _{m7eCd ˀ6 YkpȄ 8aY}9Ypy^LXoJV51kj=Ukr A0WZ5fUB‰y5aQH9X\uЄqqjc'cO# 6l czzcC`ômlhCS <$0zƆ@<zzc'cO`4$ s!޸[-=no/6[˛cB|!G.}jK+P-wqڟ X0BZ3¯f[޻f-*X'6θ Azwz}6mtz-Ww 8UT<\:=rXZ 𯺣𫞶\Wݶz'첩X1.]Yu$-!oX2FNȮ`>O0T!||j|Jd\߆c'cU`O!FeOShGo'cO Oo 'cOSOo,]]d%9Hjqiᮛ˛wf}[ |\Rm1 r_ۓr'7w{,S ]䞿ʥ'Ա UA,StiYo՝Np}ڱ:BzIҿe$i奂%3:~e'uuJxZOnä^)Kkfkωϓ<|XKO%=+wOƶD75ц@m6Lƞ1<'af7*Oƪ@ܟX| >!-c fyJ2q' y{L\F#fйʿA3`sL^%||5p-,pۿ,#mC=+,~!\q펟$O>*\05X/:\Kk>(L?ĂAzNxZT_>ʟs!B_T/fVZޛ }\WRR瑞+ƫiI  &vd>O]=}.\+d4͋ <ͼ}O=}ON~d6g.;2bɤq>'tKzZG<{bfǶTFG@_T xbw{"aN?:44fG+s6j҈=lUqi4>OS0 >]>Of7'`Ax2T'SoK[d.x26 w he@ @ @ @ @tB' @ @ @ @= :=6Z!@ @ @ @y :! @ @ @ ООz @ @ @ <u @ @ @ @hONhOV@ @ @ @@Nȃ: @ @ @ 'D'F+ @ @ @ @ D'A}B @ @ @So @ @ @ >!@ @ @ @ @ @ @ @ȃ yPg @ @ @ Dh @ @ @ Ao&m8 %}0J<r$}0G=>؞{N>Tw`L!}5J'}¼V%}U{6_]D'ߛ1o߾A&\{FB2>Bz߅ fǦ =w{NpO\H# 6vݻnjGa X!} V Op0>h+B'zQޘIt7] @ @ @ O Lݘ @ @ @ @/N𥧰 @ @ @ +|9 @ @ @ B_z ;!@ @ @ @ :מn@ @ @ @/N𥧰 @ @ @ +|9 @ @ @ BtuIENDB`actor-framework-0.16.3/doc/png/heartbeat.png000066400000000000000000006147031341123343400207130ustar00rootroot00000000000000PNG  IHDR )sRGB pHYs.#.#x?viTXtXML:com.adobe.xmp 5 2 1 2@IDATxxEq6=!!z/ (APpz잜]O{t!t{al6ʖ/Oͼ3|,vFj@@@@@@@h0@@@@@@@@        4         @v        аd'4/#       |        @ а       d'=        +@vB2:              4         Pqy!Ӈupuusѻ͸!5i       f.j;+n^pgn;w:NQ       f%P{'qyq[4mSѱ=Kth5li        ]vnQn_v uop$]Սd'ԝ@@@@@@@ Ov@O *JJJrەtz5rݪ˓u>G$F@@@@@@@h{w8u&_=OtyJ`3{w Y# }!tEd0yyI D"…<[91W㗞ӿǽv_p600a@@@@@@@h0{ vo/ɖŪmU}|ZQ"é 1=O<涑.tA@@@@@@@j+;Axhn<,@Ci0oу+Kfo<6j(ѥ %y픛3뺋.oh       ؈@g'} jVe]VmνwRkԸˬ_=;8z믝Ԗ"ݱ4?OV2ip/t>}'<[;#2.]M:r vcWnL        - b)v~]dwph+t5׭6pyjŵ$1FqOߓ \|F-`j_v|ӧmyqd'H@@@@@@@@0]k/{`7ɫ;ˢcęmS! Ya+B)3+d@@@@@@@0^uÿ4wޝU=3ʋ mE5ݵ4/WtQzJ훔ql٫47' Y$@@@@@@@@Fd^Ӵ9Uigee=gGٲ 9q[mr0Y)wL"/AWnU;gɫ2\J,bMCd<=eH۽z5+R@Aj 1       V/ L/0(+xŰ߯j+v?hޓzEr@ w\^RW/66(-(ptsSGmvCǩb3GdxVVXkm1W@@@@@@@>NYqӶX;iLڹS._UW۽$'Z˺e'8yzɡD~ҴN5&mLlI3@@@@@@@FL*qNLqX8!':R8rjpy*9B~;vZ|^.Pk@@@@@@@@*s[5vkm#TTi%@@@@@@@Rϟ;gT^V.JqCi~~Ԧu{d\j← %99!/p,        `#敝poV287.Z{isbY4ts8AwIp狳3uEgo'Vj4Y()8tI0-v;y象,7>BiAWKr+7SLlVys <ݬh5l͐        P;p/we;ywۣoqNvajr)'C4nomy٩O+LK;;C*6US4v>zz-+6m\:W &d'sa       u6cl߼9yz}SfzwwI RS7}(jo읝|/F֫qfx˿t,FجrGjj*r.]̚5m۶5 X9 @x!# X9 @x!# vA1ej ~ f>je帼gyob;5ޱĠ9GgWelb3l/RN;f5UV-\0/'ݗ/_>sL$A@xl XE^-11I@u`@"xdY4v\IEyGt]jnԻ~jS bOo;1EQjFt V/.5YQjj.DPGl߾e"@Mxh ^a0.q"h657B@uP F :x- :hOnRv¹K3.S'1{-\Tpo4ir(ߞ}ڎg=63e(ڨ+V&zQ#eZ@[o]d[ };G)려 @ :x񹵍 T:(q@c :ؘ UAU%T:(Ag' Zu=jq[&~/j؝[ϟUk .*Ml׋bg~FUW; @7oXV @ TzWU}MaqOm#Uޝ9s-@@'1> 60#`ڧƦ Er/ڎCKnUqVl0OeW\ٴ6/>Vv<#(+lD)/)E;S;9.jP^\{[vdDvȈ _W_?!ǎ[Hv&vǖܸ$ moۭ^Yi?.YbbzW7VFiK% z6 P_r(5 @UUU@`Xl\@}Scga4@UwU7”6( RdY׻yzP_F2UUUʭ-H섋?|=8yx55\\z-z+^+"@Dm^y l_YΗE5[%@F_ȍVuq?z9=nq*7\#.|ʉRjӿǽv_p6jOTx/ė^8L^rj@@@@@@@oSωI<_hz!Y]EI řP{WySdˌafM"AV "ŀ[d85}ROknyAD@@@@@@@NH:r@%h1phӖjM-bf- S;8"(/߶hnP]h [kϟ[3qH>P+\1_⑃U5@@@@@@@+dZ R/-m*> {x]81!]ۣOyb~4sPvh8KW#uRŏ q-/)ɍ!.b͙eusᄇFyW~cA8{52!zee$;z8о4]&OrY.Wr!G~47GwՈM=       X@5 z \/ ?H'7.FWjA$ ⫇eOn4ӵ)<ۺXOx=Ywr㋯6L:m#@{XYć`ٲհQ".HI^;zeףM| N|N鯷^92       '`Pu bnj,XqMhu98yn[skYa, ~o4}u;yɭySֈ2ĘH       -TP*8{yZ|Ծ p긼[X92kzm֕?Wlpk.ZƮJFW?)wv[T       ؂;%9S=e'85U--WgGG1cs nuk>~<]ѥ+AVEY3w\|k /@qj(+s0&/        `U~_B]ZutU=n2@sۢ99j^as}Rlߤ5&MSU͖Jssw҄ @@@@@@@@e';9ٻ\wB~uYɍV:{7S1F3}yQfZoJxhlվ, |VfE^R       X@5 4OLVAX '&J :G_MsbyO9`Vbpql`0(/.N ;#/yn~Ane69'gU@@@@@@@,]7p]vBTdf盶􄺏_y _|mKڊr:[vN-h3nbq}Pɸ(#]="~vWM2MoLK@@@@@@@,]bmmګ+̉TN7CQR1C~Ja`KEiI¾]_~=_,L׫]v       % Tr0uUdXXrڷ!jb0w>3%-ĺ4U=3,qXςu2yyjqyIq@@@@@@@dAC%%]ZPfx8bOiwj$#_Ǟ_iq{}u˕̾awDZiSU'O/YI:M֘{1%@@@@@@@wv)/$UpnҾndy!BxUݚȚ qr -?##VFotfٵm[ &ꂁϿҤɵLM󧆯NXZP'?Z"-NE5pk.I6V$#1eW~yԱRS@ (LKGY6 & ToӬ؝[ ׈c*חn}{ZؙʗA@"~Y'*L=gyqѾM<|l@@)`|yM \\ߵaΤ##z8ŧ#mMs\}]|J .95b؄@4t0ٗ#TtUHSO|>z!}Ynbgygþ<+JKtAfGOyڦ}6* ! ~թ_ߧuArbf'jZL|k9t   =e-ΈپIoyq^x]C8d T9{޳]lծcI^n^|q˾d Oȼ3~ė(8yz eٷM[ACu2an%7qt\*8*bw/pGu-O~N [BC % FmZwzه)'Y3  '%Zҹ~ثyIu.W{3T测N\nU# `A'>ZR#'٦_{m/ku_mo=at%K%'%  `)[x5'jGcjĘuxH WM;sB/5Al06rQ#?|E#OW*ɬ"pǎ^t{#u!oj8Ur&>]{: E+d׫h+q5"@K.m98w.|y# `8'Ql(yI=x,+ z@3pI_Nۼ_MMDb _T<"]!F@ YvXNlxWhĀ_jdR=:9{ã)]ȷ?WⰆtscz-\lޙahH3n wZa$2?Q@ƛYw_oNN|6.+n*Jj X@ڹknE'?y'z~B" ?}-[zn7ٿɢ 䑧zz" $py*K>iڢYaWR;U# @ NvP->>ė}zWVTR*vpCwl7qrqjwS\tC :ϼ+z1aļb{`&m{}VqX/Sn-ڈ7g:z$j)IYn"oýUPOfhNz07>6+"ɓ/Zjڊ2{Gj;ިo*kb"GA|h?WxEYgWN m5|l/ *1   `~:27љN(/*͔̍A@ <ZWD@;GW?S61 K'ܡnLw[S!.Y$@@,EKyRV8Gzx߻ڠ05 1   `-i:55eGk8d2T{# p=L~!LUHh0Fw1  d'40W)PRQR,/{ڠ 5E-#  @WYsq7j}"1 V)tІٷVg4巭r, @^Lurբ4hq @@ߞ4/>V.Ƨ{/v-=@M0_><ݐnVz@@6Nl,Pe!w3؃A-1.**rqq ܝanBoQK6'h[d~ -zc~wu'?{O_}unjmO[<鳲'h:E]Z۽qM Kj3v7ҫ?AX/' p|6mlOq-"Yy _`ljN #FE\/c ,Ь,he˪'hY'k]A[1^V1Łw.zѿu'ob3[ JdOFuo, S+&99~oiC&Xdud[Ayap`-lJzX\]Mڲ$~2 .]z1[-#fx|Zõ'h[d~ -zc~wu'W6ahTG6%+Wk[dKc -ژ q/ V1+J7̾maIGjH,9-jO.s'X"PY&4@Eiz'hՎz JKEK_]f.>556i>=uQjlfR]PRcK_(5 \@}jjl6}z̼(56irb6Ϳs;ԩɿlwtT+OM8tW3:D]qX7Ը&7R }F_]7F.ͺtկy&KK>vh|5SSZhnEͳQƵ,>55ni4EqݱGVƍ< n~yZ[uyjH\VX^uW   -PN~'Oo}B@kh1pȼCa$']=۹KwWqÆYsY._@@2;2U섒lY^\t#;A F@@,U@^\w;-Ԅ3u" h7 @FAA]f5};zx1 ,  "@v<)+[@ uU&g'`# 1   `Ie K\O]}چ@h1`/Vh2/cN\,  !@vE<&뜤[JL\g^BO-#  X@?Nub˽-Lczb@lP͸ ]f/ ז%=$  E`:'!זw5^ƃ듂;8W@@@sjx o/JOsrC#zA;k @A>Ug\Q  8 dtTkvpuk֩4@@@=hؗ57qԒOuP+@}*Ir܃Z+ۣRC\%b@@<N0b+پQu-HN̉lӮ'9 *   $f L-" PSuk͟|aFA^"1  ``Țgy]T㒜'v1    dEF~~9a;G;Vm&5A XlEIȖ+M ;to@@ ;5PlWҪe\U mEW5mO#   $p१K8I͸ɒ\@w.jCԢ8̵Omfz=%@@LN0aӰwtt,S8qMVAEYىȚ}4 h!   "P!~س͖E@XKwuua_^njjY}҃@,CxNV<3竫Gʊn^Nt6>   Cm@IDATX@e #C?aAg E]6^69}l|rѢT٬nnH XE̒IZ@|{I;[cу;Z tpuUW]^\16J=v@'@@@05?I[-dw3W? @?bwnі馴ˉ25v>O~{rvN_xM @@K ;R5Ͽ_5v`yQnW'ԴE`Wپ)҅k 1-5km@@@U TO|ɢA% f"ӥչK|#a|{կyv˗_񭶢\пݳM;@,1Y$}{zH3jo<,#nw@z*@@@,@ 54/&@h0Ͻy}~bCcK zpOVuz@@ een*Orqh ;>=VmK   @91f @ 7WNѳmu;4 -@@ ;MO]i_@FFng9wi%@@@3[U   f֮\CamO2ޒ  9 p9?[@3N;w_e^W֢gv^:tw_Ca 6,2^=KGftN޹5?`ֆ `{5O+~δEͫcg;v+4wV       @ x @@@@@@@ ;6;F@@@@@@@NhСC4tZsĉH;tЯ_? ]HUfUXJ=ORTU V%c32e?h9 1en&      &_oc(++kҥu7Ԝ:3{/^[o~d'Ԧb vM }@@@@@@@rt&M:p@ނG`ƍ׻^b-.]T^tA@@@@@@,H 77f[TTDjB6QwS@jSܹsm@@@@@@˰an|FnLÇwGVիXS^zqCMh      $pmnYYYK.o[0r#-^[^d'Բjժ PK>!      ̜9sʕf?M&hf:/Kp+V8{lIIM:t`o.Vә XsGҒbuKiݺbY,@٢bMԍF XVY @zEna۶m{ag͚%6<9FU@ >-?-lҤI~.%!    Ax]]:@@@@@@@Vjh       u ;N|tF@@@@@@@jN        P'Gg@@@@@@@Vjh       u ;N|tF@@@@@@@jN        P'Gg@@@@@@@Vjh       u ;N|tF@@@@@@@jN        P'Gg@@@@@@@V4@ۥ䧗е^%z?Y&Zu#   `; [!CBBB*)"  e `Y뿳M={/+\ΊKsu hݶN%1csLKLN7"%PUi(M*O 13 ~>ծ/@@@teee%%%zR"  X 2/}uOZged_˸×M[g<%"`](&ޚ^hW3JRDv9YcAii\C@@@@@lXyQo{Xx~bzhOrrw1QH -T3z lhVh Q68X>      v 1(cֻ@=[6 ozןM[^Z*k@LHJvT4C@@@@@j @vB nT̈& xև_x0`aDm{lr葷^E@RFؒf       pV7ѷ_.˕o=v/WɃ\]]}Z EZkywMr0ّ@ZJ{'88:WKĖ4C@@@@@lMs.]%gӵm߯wr522k'F[qnR `@{'l5t       ťw_oSSt Z cm6++*rpq Ғ،&M3.Yզ&f'd7k)\k=X^VӼUSw XonvFR|o{M^NffZa$h&͊ 3SqwW   `%%%999|VPP?uY277W [TTشiS1Ϙ!,,,Ď4C@@0ߟ,&_nyAy]2;A!@ÛW~z9r(G'n5Qj7Ƀ[r~?Dvi9dظ+u'YYmwӷgCw_:{Hm7 Ϡqnߥ^㲗3RJ?|7Q3f=UW.5_?suSfz jUWc6̑Ey46t12ܴz[&] nGv E@@n={=x`޶^,ڵG>tG6ܹszF+2;vl#o֬YHHHvdeAޮ844466V%DҺu޽{]2^tRLLv]??Nm|`FEEݻwիB  *@vY?c*ʮ}ZvL4ɈrXvmu@qpƖ-[j%1  X5-֒d'yw0iV#HܸY$@v|o<~{Iu*7ݴm) H&x۳ғex oHgx1mjEE;0 u6t? Ֆk 4V1E;Ad0|ƟwD@@FTRyymߍj˂T~S=$ծKvCr3/GNy;RzQoٶ[ȈsӣO=&ޛ6ܑ-N WX],>>t6{.II>gmr•-oS՚j7fЭu]Z#6Pxm \um:һZ]Q헟eNe8z'n`P^qtrߣV0?G!v<:\xz-)"  {!xyy|S_,322rȐ!^Ȇ>}x{{;99gff?~<ٻf_HJ@! {";A@RQjm]vkmZPv,ʾĄ! drd&L~CyZ>sNvgM!C,A9[pׄ`IWw4ĉGV_+((PG4堠zU@@pQ6V7@]5S>;3Z\B`ҬO<[mk^{W3 u~MUyP0/ͫ_=4:pQi%b*s?uP ~}~Sf ꠔsD,zzzE'yzz c&L%BpFDY2i ~j>~򻡜'_܇T1s{USf/R.94{'?sSu+w;'ڤB@@g&Mw"ć۷+UPQQ!{ǕK(a R_3vJO'>>^%n*d3jM35jԩ~XXX(C-k>>J|JY]ׯ$sϼeee{Tu   fzqU3e^  fs  fJ oa +.kF^⏚TνNM7LTrQuT:w&5A^^^~6J$84kUS/\m![RddɄHLI/_-nm[OKF.-̒^gyȊM_-f   г[Yԩ ÇOuTsrCFFƄ?ASS2HUUl`TM?6m&hʘǏ_R"!= i.#sA U@@pq 䖬7$TݬRɞ*e,4~1 [F% \^֪gۣL쯏"c޾kfPOl/4m wlnnzjZZ^ wLKwZϢ?}d&%N0յ =M݉v7zS9 }[e^o3onѝ@@zD !!~f]6T44UofjjAujEzz:bA\\D2޽{ՃH@]4:taj\*֮]*   ^aZ[wIVP_424"Zrw5NB9f3'NMՕ3 )ʘ umSvQi咵s k̬0yBiښrXR\)#'}ofʥ֖>k_S"Ja;///4(W)   k ȋy3  fRxx555? G0rCG  J}A /566JRBXXe?%SYl$mCC  n#@v>N ltz]DSW)#~_m>;ri͊z?ǕHsSRV 嗋%h*\)-[sLd/ Zէvoz4OAvƄ*  .*[|'Y7߼iQ ;vȹ +z~N#ߜ1[BΉ0 NvB4@@pu^{vNF_RNpsi}|y5Aܤ 7Gw|Æ3ʩ bЦ W I}lf1eŹU@@pQN_}\||`b$ ++KfΜefu3Kʦc;A:mC@@\W[֝w);]tm]F/F]TYa5y*ezDfQ w45w[v~)q7[^w`h_^`jچ؁)U)9"KD@@@wOgղ'MdɒX6]n]Au00Cf 'Ah@>*  [ XB,eN='0'(4yMaQd2iwX'Atv]ܱTxSGL1ut~ڸ K%!D}&!̓Qct\E@@l.bk~/kva ,(++;rhElݺU2|}?.$ _0n8JTnOUS߆^%  ,[LnA~']^]? ֊9}`ϳpʋ畖aC*zJy- $*ƺwM|'yL>;aJP66CgK\ @@l 4rK6<;wز#?'N센<A>},3233Gmjoy; ?,/+ WvK(6/9UѪ*i zN#3gw JUGKUSy`p}  t_@ޝ755iGtGo/_9|QQݕ* .];A34;XHUٍa.J5^"kew{imiY֟#ȁ1I{hG|oGݕi>;߻o;_ <   `srssiiT%S;-[6裏47%jHЌ5khx~3PΉ0`z…}i.IBMAA 'O6ܪAСC"  6֭VۑD%sg; z$_3w_U\mi9)ըDwQҌ J9I3֖b|U^?kDlW3T/\%ε6_jMy`3?sY46=/nq?RN3umh'44Ԛ5s)1%=0(D@nxwo5A?+_>>va[WC@@ΖWݚkkk׮]kM{VlyYl9 *U}{4 oi 6lgHm۶>ʘJY)^R 72&N@@Xl^M74e%- RnmnȒAzU G~_CMՕeʖ~c>8JisUTJ[URxQJA~">ʼK6޴Ѫ+\#W,}߿\Rs=IȸU@ hz#io~CgIɃ;q94}z9M*  J !!p͛7ڵKr䐂O>d֭׿h;-[R """ 6m ^tIwAƏʍ^VVnΝ]__oRԄUV8p@6f=zT"NrN   PDf@H\tjWvc'&G O/?ԫmml-`qxDR@LUfݭYIi~˿zT oߢ3M)83|hYJڪ|iةOyWAΩV]<}T) H7!]|?0or=зGjW7>r?gZ6DXYgMիkߺQ6W=wR@ MHQ@@@_vӿwWb[>Vor˖-rl {! [P^^.{*Ȏ,XupРAA)WWWK| cJbleСc LrEOK@@wx7[>r_w]%\~eŪY76|~w䏣nj[rPsn(?uf<&2mڴPMn= 4qJFJK>}R5$ObĈ'NT###9@@\TC${x{F >R/0e6,wtsץ&1=N݅2 7G v14~}4Aê<$mOPvS95-z%̴l{?y~~@>}nAk}kg8G@@3f7ǰ̙3 [;heNs l$''K~q>}. + _}}}c #yÄ  /D@@u:tIK\^r LG|江ѧ^?Ae>H1}4_(ijK==O| cXޙԑ-   y ~6pKTë=߲ŋO4)88ؒz4nr RH{N?- $ C/t%lh0rHD@@prz"媴1m.yYzܳHcY+Q5y%1L ILJҗm[h8y- `{} ?^_Y^*C£Bã=Aɣ,\.9دB|Ќ/iea˚RҦz__I#",A}mN)W^V/nPJڸiw=Z8%o O/D坑*ʂC#BB1nỳ>+agx巏oz%J{챥K:êX  kZZZ򪪪jkkG'~X' MlA(,,,...--nll_n+I /...""ZJϯ aՀ999/^EI#H΄l`>Yh  }ʦYoAW^-;s6np7xvCv@iNpGB@@@@@$; rDw66np!r        N'PRRiӦNqFii3Wo@v?A֏       ˗/#:]6sd'd       (l2 eyK tfd'8CaI       -p'NXxR[Ee#      8!Xy# a@@@@@@@$ԴrJJ{eUjLvk=/V       ׯ|U˪.՘z^@@@@@@@vLCz9#;s @@@@@@@n lܸ H/ۅ.хxL,@@@@@@@5/_҅J/ۅ.хxL,@@@@@@@5x./;}|p /D@2Rh׮]?*@@@@@:z?ni)))6uÆ 2ZTTMFsANكԄ9sl8W8ܦw^rF@l)pc @@@@@VXbqd'|&9 `}v@       .%`cL7mќ=Yfl,B@@@@@@p#G?~܆dLCqٳl"466lPhΝӯ%))iܹ8@R ///???>>~ny     ` >fՁ9zh3%6Z1uEVZw…o>N@@@@@@\W>ز2k;oYXXc\dWyR@@@@@@@֯_oOSFvҚN@@@@@@@hDZ&ZG)@@@@@@@x衇NoW_ݲeٜ9sumu;%;M@@@@@@@:뮻:sN%;a .T]t"';3@@@@@@@Yz֟@@@@@@@ps        =        C@@@@@@@zV섞gv@@@@@@@_!       =+@vB3;       /@v?c@@@@@@@ ;g@@@@@,\R@IDAT@@ ;1w       @ xnCګ-2 }pdB@@@޽;33Ss'NLOO"   d'Xn-Z5s\K}i_is8@@@UI: j"T@@@@*NvI66n}dफdY       Uwx{Qɣp'       ; O5g7       d'+o͵o#       .x$5ą#      \!{Ϲ7nۅ#      ]?V`Wf<>/   #TUU?UTTZ;ZmhhӧG+J!888 C@@@,peXxYs]ݖG\mn2ϿZ~:wRp   cvҢk„ n[T|իW0}ty ƍKMMU.uTtҮ]:jPy&OWt,//߱cG~~&.UٕAR+?>s̔}"    }oή}'WM$LC@@pMmOUXXzŋˋ-qUxw-\ؼy$[ :Lm۶s2 ;vLr;3f}~z@98cӦM:H@@@l%i1y;u\>\t̂   HِzZ[[l";ryd{SI恜T56۱05Էrڵf(SDOMP:YmR    ;VjkoXYn>=&GL   -IK9LGGa6l0L&MvQG3q9bݺu h! A    @78١~菿)ܷ4e>cNd   P _7|/:wĉ 'ȆP__Ch&w;du\r ".h* Ή'FWPPhAAAjmM    `lA?w07䖿g@@@Iݼ9aJU)TTTȞfv,PZڤ )K}Pٳg+>xcN5ͤ:jԨSz{_%Faa!i|#F(+eu_~ eee{Tu    `C^oӎC5VUnydI[gTfž8C#  80k,uj,j'O֯Noj_&٨@?Ntt>(MAק9rD,%%eƌi#2%.  gTBDIMgTTViC@@@l+pkl+wλh3{So @@@ov///F)[O@cooԩSÆ So]`j#=ddd466j455`UUl`i ӦMMUs{\1U$OI555KD@@@@d'tݳzL3/9bV@@@Q77벡TWWد*6/..~7SSS $&S+M '2uY  СC S䒤Jfk׮U/2   D0qgw&q>F@@py1of!>;L{_ 7S68m9A:JP1NW cM dIJ Ǡ5b}PHR644(     `lhAZ>-%GLd   Lm`Zz[YuTT$kP#Iyxxx 0 999))I+m'gXiʭTe N5 r3""BE3#du2   t_C0>OK0/mK   N%[|'Y,op1rBnn_}խ[4nWpU?01\@}} s"$U°L@@@l%@v$m?NއۏqgmaD@@@%z:%%妛njm| .hoicaUf:w: @@@.pC 6d3?]zR[e Iw۷:B@@@aV-{ҤIcǎBS[[nݺ{'..NeU˰`N0܌Aa0z{e@@@l#۶q(m_0}|xHݸ)d'A(#  hii5c]XvDDĂ ζ\b\rÒ%K|}}M OHLL4o{oM˚MD_    @7N& @@@z7M7S`8A-;3qDN+hכY9zhS???}!C$''Dyz;@@@/@vB @@@ySS>AEERIKK#._s"CR%¥K {'Hrf (Sh 4A    }oh呁7ϱpϯ[4#"U    Roy+ohoeKځYpHHlu%3رc%WcC ǎS X^ dI4ǏN8s挙jD@@@ 'k|}i   Щ ^^+,iٲG}/PCfddYF%4WZXX(D 0@I".\طo$d̟?} 0ydí:*   D96A@@@p×[swk׮5s胦]vZҬ\\R46lؠ0^uuu۶m+}1ӕRhmm]zuee1䑭[Nĩ"   M}G&1   n)͛7_s dCIPз쑈-%%%ڴiԩSSSSX%$ػw:b*GGGǏ)766{'NaHwU__i,Uie%b*HjªU$BnDrDfflziI@@@l%@v$@@@5q⚛4q'or>;Al">  岧X1TXupРAA)WWWoݺ>1%1BRЏf2tP1SLxRBh楊   6db2   %%%Y~{][N-lx@ -[vǏ41L&6ml8n۷&h &mBBBO+OaĈjdd\E@@@.4   F3f[x3gԿzmiٲĜ9sdoӧ]wՅa%5_~L>A #yÄ  /D@@@="  ";S^goos9-¬Y:/%%$,\tIY͉A$%7ȑW "   @wә   *y ~ݻ̙3{rɓ';Gy?f̘N3@[oUNd8x`nnaed/3$AAd̔gРo) Ç&$D   t_0{ ,ZhժU{/8@@@ZZZ򪪪jkk'k־d$' ~RIShllljjW ׯ_\\\DD>B_SSS__/e7qNHHlmmɹx,N0$gB&dX1   }_z%=ҥK4s*@@@o'&&:ge| i#(tk;{yy<"   8IAL       @ ;>zn@@@@@@@ hA@@@@@@@ k=7       Np4        kN赏G@@@@@@@Ad'8i@@@@@@@d'Gύ#       4       Zz@@@@@@@p f@@@@@@@z s       8HA3        V^q@@@@@@@$@v@@@@@@@^+@vB}8       vy@@@@@@@G (iA@@@@@@@ [<       Np}imn       m69D3tvSgNU&$% =&,I@@@@@@@TKz][[[e{AÕ2b*K?9qqQz Q@@@@@@@p 7tF[͵ꈾ|?ܪeOooJ@@@@@@@ xs+fz)s´cpk/{GJ/$l^P@@@@@@@U#N4ϕe'5~߈094)%tpJK}}ŹWN{ϕ(-0PF@@@@@@@d'8ܺoK/|e[֓$a!a.yA@@@@@@@)\X*E[?eD@@@@@@@~d'f#Kȇsoㆥ {|K"       Nvp fgwG/nZWqt3w关}N1+>cDl0C        `#la‡fc@@@@@@@l @v @@@F`ݙۙ8qbzz&H@@@, ;r+Z"   455iSU@@@JӪ4F@@@@@@@ ;Z1#       ud'XEk@@@@@@@Vkh        `@@@@@@@@Z=       X'm]sZ#   @ 455UUUyxxx{;Ouuu555AnZmhhӧ J!888 C@@@,peXx4C@@@;wliiL4ay *>իJT>}_O\ݫJY/۩*G%")GwOII1c&.2[r(9r GEhJt3**j!D@@@@d't$5aΜ96@@@z߮IM0w@9^A|N:5l06rCFF>I0 4c~ ӦM1ǏҐ%;AzS d.^SSRF@@@`O1Wf3   @/HHHC oZ/g= uuurh~7|355uРArh:"==]^1 ..p"SGEPPPp?A::T5A)KlVvZM*   t_~6w͆c @@@- / 3m~)<>^i/dC$%I{ُAkĈmhhP"@@@@&d'؄AfϞe˖7w=4͛ϝ;C3-   K:8ġޖG$̏4yxx 0 999))I.<}MVUCBoM₴􌈈wQG B    ;F\KiѢEd'>@@@e:z$7 ˻7mdz䨅ώ;܇ V \zՒ5m%b!*    D&0   Vӗ趝 tMVS /_~͌faдji0nI$,,L߬N$NлA@@@d'tߐ@@@_@ޝ755iSQTTT(,8~ퟴ4:999ϟ/**2D(--UAAAJY)\t w$ghvjIIILL2 @    ;   ԛ9&@;-irCBBd%( Ǝ+ׯN=vTMl Kҧ?~Lv™3gOj; >{C74WH̜93xELM @ @ . qIC @uY ?=^<&wLZ~^\T!7.xCpKڂuTX`t9ڹ.=AqǿAΠ0"xBr%}Ix ,X|pV p]M @ @ FovS* @7ٳgo/=A1AE<`ABPp `Μ9ޫW:uC5سO:u36nܸ{ w}Yybȑ&OhѢ2L'1r(cZP胮m~ 4  @ @ @ @@1*./OS]xKKs.Cz @ @ @ @@\⒌-իtQ&^_=3'!@ @ @ @uu,y%@~NNP+vu|K}3=.ЬCǠ?kܵfN?|/V5.<~iiia @ @ @% qIV5͛< ]9Y|=k3t'qY-vh0ٽOcOkoW|'  @ @ @ g'ĈYTyy+N^7g}9ko/YXΞEa~W\EWh<#Y_7kzOlmB8$ @ @ @ @UPP*]=T]z5~1c'&@ @ @ @Uf՚Y 毝53NNLFIzFFpIѦ΃B@IDAT @ @ @":!ƚOqт&zqlYZf~ѡ53Gb @ @ @ 6>kHR@}{^:E%֙lItծwm\8 @ @ @ @XT'X$Zr!%LKK+**qhuBzfæڗ:52`^ՠM>Ѧ @ @ @":!ƚOpW>6!o(ϞVMn}M1 @ @ @E@uB,5!Bزaì.i@)&@ @ @ @ǒETxK;owV=zM @ @ @K@uB\)ӻoc3{r"\% @ @ @ @f(թ9 ޾9?u{u  @ @ @ @ > YB4s/nCh @ @ @(:!FZj¯_~)a>e4lЯI @ @ @Pd͓]L-y]6j?sb @ @ @ IkQ¢<1k7X'>?5۩CB& @ @ @]@uB줵%aΊo\pƒ6zCxA&k @ @ @ @$:a;pڅǼqYkVEѴ}]{C3 @ @ @ @*:a@oմjР(|z.jˮiԢE) @ @ @ @#:z*^{>Î8Z @ @ @ @jPPmq9/<-M0:긶k @ @ @ @RT'y7lt̳c>, @ @ @ @HxWgo&sڰW  @ @ @ @&T'Ԥ~]vc„.zO  @ @ @ Pj?K{­5翈3\ @ @ @ @ UXki-Sn eCV {4ޱuv94 @ @ @ PN 優VNnq'l?o$@ @ @ @f(9VXwi @ @ @ P_T'ԅϚ?.܆{ @ @ @ @:*:.lW9 @ @ @U̺zc)}_ZqBKL&@ @ @ @& FB @ @ @ @ N  @ @ @ @@ N6j"@ @ @ @T@uB==xM @ @ @M@uBQ @ @ @m @ @ @ Pmڅ @ @ @ @@=PPOm @ @ @ @jPPm.D @ @ @ꩀzzn @ @ @Tjv! @ @ @ POT'Ӄw @ @ @ @T'T  @ @ @ @z*:&@ @ @ @&:ڨ] @ @ @SzzǏ?f̘퓾ƲN2k]tQC:  @ @ @HQҾL۱Z":!JF[TH4o޼x vj @ @ @ P b% @ @ @Cb;̡CƖK" @ @ @ P!>|qƌ[ڑhرKҳg?<_ @ @ @+P{Gv^T'y ABgڑkԨQ%V'ts{  @ @ @eƓ]*7 @ @ @. %: @ @ @ @ N'  @ @ @ @@u N.i!@ @ @ @U@uB}=yM @ @ @K@uBuI @ @ @ɻo @ @ @ P]Ku @ @ @ @@}PP_O} @ @ @ @PP]ҮC @ @ @ꫀz @ @ @Tv @ @ @ P_T'דw @ @ @ @T'T @ @ @ @*:&@ @ @ @%:] @ @ @W 7 @ @ @. %] nm~NN-؈- @ @ @ @@Ȭ_"w[TTʏo^:oCvo6^TXO.jּ9߸!ȓްQ];|HF:Lӵ @ @ @+JUOZ2qBwVKG7f3oٰp~A޻ˈ#h @ @ @ @!FR}sqɥ i;~  @ @ @ @ F 1bƓjUs_|*&xz$!Cw{MwH/*,xsO$@ @ @ @q xC\yr׮te=Fy{.Yl'^sI~]~G @ @ @ @<;!6*&ںyz+~RTs:pyFG=ʐ?&C;t)gx줖w g{6 @ @ @ @ FNb VNnάsgrfPD{Maa>GhжOC;xN6 @ @ @ @ . qIV8p /+}A^~8}ѻxZLvC/y{|К%C @ @ @.U7-fua\Z#áfM @ @ @K⒬<& 7Ѣ.;=!! @ @ @] =ֈ@^Auœ #K,MS^8b;W]TTT @ @ @ @<;!F̚L~]x쥋߸ -8hֱs۾{e6noXUt(g zOA@ @ @ @bP#fMV',z^ǟ|hѵ[س%;{{oy9kWzCGv62 @ @ @ @!.ɚ̓S5?aMq?d4!Өy#9ፏZ]MyCDL @ @ @q NK&lِ|~wkÆ'eףNX՟O  @ @ @ ꄸ$k2OF& |!Ͽ43r]zhTsM1 @ @ @E@uB,5a ;: &'C @ @ @(:byFÆMFҦwh^4hmիJ @ @ @TZ@uBj-[E7zfiqf&ͻv Gs׭ c @ @ @K@uB\5gͣ2vG1 @ @ @ @ . qIpDw~h0kpM=X@ @ @ @Pd ihxŅ[ѶB  @ @ @':!>e Ҿ=ͅFg;ƏNkwhSL @ @ @bXIRSͻt>ldx/ן~6K >pYNm @ @ @ ꄸ$k>O3ϋlk/ "=gݛtq{ wd6i6 @ @ @ @ . qI|Gs~o~ݜt|oQa5k®}iaS@ @ @ @bȌ1T5+>=5^ֺ❬1ܻNUOַMK?Ҿ @ @ @ @T'gY 25'^}q[6/M9S|G[;?9F  @ @ @ @@١ttaC~-Zed\U @ @ @ @ N[^f|0{1elOy=r~s  @ @ @ @ xC pULٴ\1 ǾaW9+7m:uthGy*^r @ @ @ P QJ9ZGOހ} @ @ @ @@f:qn @ @ @b pl @ @ @  u @ @ @j @ @ @1  @ @ @ PT'ñ5 @ @ @ P'T'ԉct @ @ @ @ NŇck @ @ @ @NN& @ @ @ @@-PP @ @ @ @@PP'M @ @ @ @Z,: @ @ @ @:!:N @ @ @ @X@uB->[#@ @ @ @uB NEmǏ3&//l(}L2%L @ @ @ @@}P۩ #F-D @ @ @ @xCl'9a„rID @ @ @ꐀsС咈 @ @ @!ov0>nܸ1cŖv$;vyj^ @ @ @RO@uBg(?qfF:v] @ @ @ @ %!%ͦ  @ @ @ @@ NHòU @ @ @ Rl @ @ @:,[%@ @ @ @)):!%ͦ  @ @ @ @@ NHòU @ @ @ Rl @ @ @:,[%@ @ @ @)):!%ͦ  @ @ @ @@ NHòU @ @ @ Rl @ @ @:,[%@ @ @ @)):!%ͦ  @ @ @ @@ NHòU @ @ @ Rl @ @ @:,[%@ @ @ @)):!%ͦ  @ @ @ @@ NUeÆڸ9{"@ @ @ @Ȭ|ӷ@A^ޢ7y53XnmEiwlf~]cPk|Κ?w9K7iӶy-vޥБMh> @ @ @Jżdlِ`kU;||G}/aZ͵{!~m9AsC..\  @ @ @ @vf[k#޽҄ ǽ-~k|PBWc^yjPy/?-MH|{]>dg' i @ @ @ @xT'YldԢ &-xCr~WO:jCa{Isž2}1 @ @ @*V~Ƿ^7;}=s ;٦S&>s sՅEE߾!:nNaA^n٢.n8s<̦ +|-  @ @ @ @ 5$LY|=ip>]A?k/ kV|'sǷ]<_!yȠQ=M6mۮ=?"wͪc?tB @ @ @QbĬ@ܷ=E3M @ @ @U@uBN6¹-vqտ %\|eCc~1#ltS°лѨQL|HG_y9! @ @ @ @N^%f-vpqNL+632z{B$V,əCimM O8-b¦ @ @ @(:!FڸhAtj#6K75D̜mdRgS҂.DT)&@ @ @ @q NKy-nkhe]C.6NmȰhxN[-ZMaS@ @ @ @PdD36m׾<̋NkӻO4RФM{--2p w æ @ @ @%W"y/pWvHKK+US'GkYeS>ѡĠ}}W}`=DG @ @ @ @r*VU] >JeÆYO?]Үy-yaEםøI6 V6 @ @ @ @ ovq'xKiwV=zͼuaͻt6ˈ:aj eh"@ @ @ @J N$\u.[g?Xx̆x,>uk hڮ}YFd Ѧ @ @ @"0n$ ޾9?~W}Pw27/#nM.c! @ @ @ P9 sU_{i,_X烇wuў NxvBfӦ Jk6jcthKhSL @ @ @bP cI6,__;ߗѰaBa~~'-ZTP]P @ @ @ @J kJ_ |z-S￳pK^ta;Ý}O?'vA1,#޺ystiѦ @ @ @":!~I7\iŲtO<}MJ(Ai; [6dEGˈ rM۩Nz  @ @ @ @  8V1KΊo\pƒ޽?eС f:F{]]:!!&@ @ @ @T'%Y< Ǐy³r׬ko{O32%vNu–%NK^8٤MhSL @ @ @bP c%x㯦WEaF\|վ]ӨEaf X<-{ْ燣/ 섨 @ @ @Pde{3PtÎ8Z,Oܬ}oV|2ۿz@Aynܸ1cŖv$;vyj^ @ @ @RO@uBg(?qfF:v] @ @ @ @ %!%ͦ  @ @ @ @@ NHòU @ @ @ Rl @ @ @:,[%@ @ @ @)):!%ͦ  @ @ @ @@ NHòU @ @ @ Rl @ @ @:,[%@ @ @ @)):!%ͦ  @ @ @ @@ NHòU @ @ @ Rl @ @ @:,[%@ @ @ @)):!%ͦ  @ @ @ @@ NHòU @ @ @ Rl @ @ @@f l ?`-Zm),dNk֨eq 9  @ @ @ @@(:!ɠ /oћcsV,[A;nGe1ekgߺySqŒV @ @ @ PdlِpɢkV-{mwqAֶOije;5,MZ  @ @ @ @@+̪Xr׮G{%ɥ {Z|põgL+|3  @ @ @ @@T'Tݰ ^ɨE^/i}ZZ썯tӓӳp[ @ @ @ @J J_ӻoc̆xAmwީE[r_Zv @ @ @ @f7:}s2f+ݾ:s7.^P<ӣk @ @ @ @T'Tyy8&^}qE{' Kwyȟ  @ @ @ @@Nm\t¯_~)a^|} &7ϟT3Ci|qK @ @ @Tsr>떩Y%/:Qξ;5?'s2pHt @ @ @ԔꄚOnQQgtõV,K}oS:$GەS?)i~^wStTL @ @ @jP@uB {߸%'|Q]П\΄Qܙٴ>Qj @ @ @ @jPP ۸c޸5ko{O32%ScEC>dO3U> }G#=>Q˖1 @ @ @*ViyA~7jwAF\|վ]ӨErf/*, g.z ޼'9:! "&@ @ @ @ Na3{3PtÎ8Z @ @ @ @PPc7照 #|^^Xcra @ @ @ }T'lme]?o[Jogt|XSߙ|؈r.Y1}>|  hҶ])&@ @ @ @UPPudxWgofeڰtiBq'~j|HuBڀK3 @ @ @ @@*x @IDATҫJ [1]'M @ @ @cj@\ 7jQpI @ @ @ P]P]ґyᩰm-OSΠ񎭛k_ɦ @ @ @ @PP+Mp6]f @ @ @ @fߴje~꾪 @ @ @ @PPYV%] @ @ @ԨJuBu @ @ @Ԭ@f^^} >5x:/\ @(((H9 @ @@M N)y%@ @@m2-;=;km[i߹c^wޭc^]v}߃hبqm#@ @i 5}O @Z&< W{|9-ykkW- >NPN8C='3ad=uI_'Q}Ԍm? V8Ȯ Zח&tֶ?rOp)%t`s} cӋ _͞3O,٢U-Iy0/C @(e:  @ @N \ߞ>ywk^[/xOo=|E]̦6EɻZ4oz䨋{3$$-y7eg%lcK^nBO6 OgV⮒g83nx>tv?Ӽ 7C @ $@ @z+՗]q&P+}u|yNAxgoXWם~t}?1m @ @ e @@Ԅ.){}sڇc [*Z7mKeGKXH @D@uB=9hI @mY  @ @@ @&j)w~ȑwڳ]ni^2 -yri]{)qTg](ؚ=Wt_ nξ#~jz;6G? @T'5 @ @_z$Y!3EOHuNǫOL w&kyO{uڇ:u婖;K֯^bѴ9}RaaA„);_]{IC @B ! @T /wgKnᣒ{tM{Kذ~Uœ=}JKKK׬}ŝ\Ron`}ݩKi$-_(]_|k=}֥4:9dg3`Oߎd6lTcԥauFÆʎ?}o{㞚Oإ>;1ty;C|);1ƴ$lw^ 'jPPqgeABYѠNEo!y~zze7<~y9 >9gcZ$k @ @b ~ @ Pߔ~e￳7KSTT6 n_yƜ9A#?Q3 zWy̗QY5?z >>zyiwqu+jk~^t81=rv֚ AWGr?Y3=sf~ϻ5hg4^䃿=KNMEG[鐵hzc%%\u3 =e4'2$ }{}=0Tͱ=Wgy)uk/{$x7u&AkO;WK{ :?a̞>醋O.jlpNڔf\{Ng[C<=:!T'TZB @y:n @h۾Knܟ9%N.Og~[86, L9 L.+υr7_r& WX^;$GG?{wFyJ%_/wG0V_ܙQx잫*-\][Ϛz%#.Mw7dOfAm;w[ѽުu UMnsZH @u^@uB?b7H @mحsݓ'i䎋9]>u+\9y}8BK>쩩`?_V9_ΨLQEֺ{ J4:$o'+ݒ͙<#!xFªO&<{#B~Fs?Ybry&)϶+1'##.{$/\:!E @|#Hnjwq1eʔ께+ @ PwT`wa"*ݨ=h={c76R)HX:,}Yv_\nff]~y;9goKx#>y5xG5jաzZ$/9DZo΄G˕Ԣ]XSq҅W߯?w\dm (&6)Wy.jKSs7Ɨ2\ݎ!xמ< vf߸EUK}nƔMo>v̩~7| AGEt➗_cG2qg?Ԭh%YɱޝVn ˍ/!@ @]S@wB{КЯ_Mg" @lCߝv>,VB̝>{ SVw{jaM~K_;N+W=CWDA,2Xjf S-6jZRuz09mAA§J|˧_xGxO-Ny?ʔ-f~~;7h}3y;u+[BL~+*U9[y̘ܯrd!b zƄZdNOjg} MXaNRIu׬ZQr\$ @ !i7tذaID @ضTRK}u9]?\nM~3sJoy{qӚLrv-%n=>j7/򑷧=^imaҘ܀:lM?Q-mQ_;|{üxCOxCք '^ض~ En/|*g\tw|>xB@| /('g]zOL2oXQ!P||r3[8cYbOX?-x4~*Tc}WvԪ$~wbVa^GT;!@ @A ++qk۷!C,z|̙3; @<'ȵ|F] ^o>}ʻJ+S6Z)ǜSFhYL|YW~L2s&l*ߖà֧jФuiҷG{Pj|yȀW>_7m)(HzרU?Ar &9:eܗAIJJs)b _p& >G?n)<./NxsiY8֨p\w'8dskֶC  @&G @ %PJn=?̈-tyn$.)w'~[ #ϭY7e2 @ k N5wM @P>{7hbz7hy(S\n|PȲ2 &?Lnnn-_JGP>lnŹ1Ɏ$wxgW̜!++3~12edb%Ĭ|ˆAk†uJ2 @5kw @-I4OTZ2ecæv_x/_ RO~ݚr+,YktWN4a|YLQ9TaekV-/[n3s'<1HVZ#P^GoFJb&x*ƹW!`U1 lĬjUƲ$ 9T%AwGa[_N+ы~Ka¸X?- hƲ7*]ߐ,J\wB;E,Y됷?~6 @ @<ߛ @ kՏN^( ArZyz BaƔw']2}[f}b+W !C#pĤeĘf8&xDL2o4-do̊9zϱ549 Ocv'k;/w}Ż֯,;n F~ZF*،;sUwa֏ca ݝɗ.k!>)C @B-2B@ @%ZvG}^C¼% Κ:.f߾MOMMme^'>|c :t= Z w7Xx^LY8a\LAН?1'2fO}د? ZBGV7ת3,u< !_u~K- 8TNo?/?z1T<#>/C @B ! @@ǿQEC1O}:&7g0w߅q̞>a숏aL!WI&:{I+WMƔ ̜&{7.?P^&c⻯?}%+.?tɗ'k9 C_~bh&/YpGCL;0D y:0+kCL> ]IPF6 6)U̝VA H̫VGeğLrϸh_\X?- ??2o ukW~ѳ>&?,w']L8r/b^{/|;Y~m=G3P @Db$zLL @@*Տ8/|o5uvߡ iФM&K*|<`ڤcG|jŒϾ&/[.|EAz岿κ>}[V\``מeq`XV^Vl͹ӦN=7i?jO/I+ӷrXQ>ǜ3'ctIVlO}a𰊘ʚu;hro(AMLxa;999z{.]bqס''/Г _iٽ ?f=NܞwߧiN ~1}ʨO̜b*Ļ^yuL!]xG.d2 @et'첷'@ @&lqM6n_T٨އ; ,W׃惘|NN[v-%>x@LAtxO)[.ɋ8,v C!SY~3yUr*_*h8<[g f.~>f|cNfʤϙGy>9A|_yFunU3.{7?-˗ȵ_dLe ;1b AN| Nt  @jvvK @+TnTm/࢛/]LfrN=c}#[?X>?6jޡ$Ua'D&t~p#N?;_Ӡy|>m??ƺZ[VtԙED~Z5kEZO{$ޝ¼j8⿿R@C @ @ O@wO @@v]oylXav7?iuN<{M+ tՏE31\VL2=U$O<`Nlrq?IMMkջOjkR9ք$hC)I_|.]3rW= ւU0%פ:O+VT @ $" @Л?(6(M9Ŀq 8[oxpp 9| zIc(U k}z1 ˖x魯1~|q{#C!.zCWT%S4i}ߠzr~;^M&s+굊Rb#؂dKjnJm2$ޝB,xJCWp&, @ج) @ @.$lpOCO8B~|ȱS˖+Yݻ;Ӄ_]bWܟA1jy{^1甫P9)9/uXO4Or7?饷ߎ t54n|kɄApmط_‚0YqxgFTY7LnS.ݬ@Š];4M" \I-?{ܜ[7hڶaXGsrr~Ӥo7 A@Z7Ƿ}YG}:eܗKX8x Uk Z޵aZw.7&/OKVֆ|M`_[~???y_p<ȖU,詘%$K^.r-k9KAM"O @.%<!z*w]tZ={{>VN<{'zZk~1& ӒVfENqЙ @v> ;=̜'ym锉kg._n)JVFz찣kwZ_4pOSW̘bU~-Srmli#v۫H*&@ @ @ @[&;aܒyħ7̈47{EuMMMwl1,~1}sӕ- .h$GuKۓ&XhgF' @ @ @ @HM1 7xïK|kB[CE3?|ޟ團քhiy6Sd!  @ @ @ L ,\9=`ΰlZ\2ebLCGD)`/.?/>?$C @ @ @%+dMmFqӼEk۫6up춐1kƲS&>@#²Y_^q OIIm7,qrX8q%MVU ꯞ?7cO xFV3N{[;R=~}3+7j\*--xh۾N8ïRe˅ zχ0H+oxo{{԰QjRU7m|PogclV[+/  @ @ @ \ ,l^)7';kp g$tw|Jj $" @ @ @ @(]:eIOϞޛ7aZ)))|1ѲZDAܴ~\>gcj^4~t8l{eT  @ @ @ D I,T {^O݆+BZFA_os)\D+֮}-?[{Dp(Lٽ%Z#&@ @ @ @IНDbꫫ/Z=wNx:Um2i*yN@jC}>~#N2hܨ~zܘr=L}b @ @ @ @ ITI6t2o~mt=/vܶaA~cp.LAJ+ot8B @ @ @ ;! 4Ŭ}ez5:GsZh>8Koٳ)&@ @ @ @IC>_~qe?n:]JK sss?xWM)UjV[ܤWi̟6[,}>͏t- @ @ @ @ +m֬{'gCfeTy=N;'քǜUQhի?pWp˗~z'~}2eb @ @ @ ;;$1 O>ڋ/f}Ǵ&کܚd򄉏]ǡϾ~ؿވiM Tu?uԴqC @ @ @ D I,H︾?#|!:K}OXNh>>\LL\QC{aM1ܖ2#̐ @ @ @l/~.3l/CܯEO/_n{?iĆ'֮ᡲk考۟rVxVò&C @ @ @HdIns_ @ @ @ @N/;-  @ @ @ @vНo @ @ @ @^@wNA @ @ @ t'l @ @ @ @`Нbo @ @ @lg < @ @ @t'$@ @ @ @Y@wv.O @ @ @vz ;-  @ @ @ @vНo @ @ @ @^@wNA @ @ @ t'l @ @ @ @`Нbo @ @ @lg < @ @ @t'$@ @ @ @Y@wv.O @ @ @vz;;ܖopСܖ7n6K @ @ @ @*;!iw6hMׯ_Ҧ3 @ @ @Y쐴;9lذe" @ @ @  NHӧO2 @ @ @؉쐴ٷo!C <8333i}'3g1b @ @ @ Pt'$ dθc5` ;ƭ  @ @ @H;;f @ @ @ @ N(A7R  @ @ @ @@НP"oE @ @ @ @$;,K%@ @ @ @%R@wBmM @ @ @Jt, @ @ @H %Y4 @ @ @(AJͲT @ @ @ P"t'f @ @ @ @ N(A7R  @ @ @ @@НP"oE @ @ @ @$;,K%@ @ @ @%R@wBmM @ @ @Jt, @ @ @H %Y4 @ @ @(AJڪfgemX277wfq2 @ @ @(@颟 ,87_Y4vԚk=7ҤY&ͫ4m*5hXԫfgfVt5 3/mܔRV^]Fjvѵ;w-  @ @ @ @@Qt'U,;³0)f~^yoonvՏ)o8񩇿 +3b r7_x_QwԴQtgc  @ @ @ @@D"O5_|kBD92'>][LzC˖W%5!!u~~>4  @ @ @HdIy>Ks6fï(ۯ s}&%!>z'dC2 @ @ @ @ ) Nʼ&)X 癟_20ZSVGW{=kѭzk/>wò`_Op҉_/_ViϢp {\n 1kƲS&>@#²C+.8)))aR@ @ @ @%;!YEgweZSicZY0Syլߑ FIGe._wh倻 +`͂qSRK.,AWc~= y yG|WoYb1 @ @ @HXI֬:?xD5!<^nʰhhAO{ܜpeƴ&g$thta~rsraL|Wn G@IDAT|+o .^^s89  @ @ @ @@t'$K,=2ԨI utm\6c֌pd̞l07mGjR~wBxJ,Wͧ;"Pb0/v'N+_vLAa|6C1 @ @ @H0mnH',qqS ӳդU_ %: @ @ @ @NH c1N`N<2;s}5Rwӝkسwٰr^5: @ @ @ @NH c'ٸn&|IO=q. Wk*)VϝNUC[C @ @ @HdI&a?*VڸvM֚13VnԴ/4q@L~ˆccڠsSK"eAհFLlѼ @ @ @bM.Yagge}}xdj{^vic~y6=!, @ @ @ @(]|S9/_2q|ޡJ'kvMggW_4ǣM9ڼe4)&@ @ @ @L@w6BVfy x=SȇT]7+Dy_&۽ν R @ @ @l3 ی Uo.dΆ̕\E0S@d DAb/&SF 3 @ @ @ ]RUwVk6G O=CpZ5)<քj7 @ @ @lO ZFKNy0xM_z6/z+~k/Z*&iH @ @ @v[ +۹Qv?jօU<{S2f͈O @ @ @ @D@wvU7٘1RQ|)#4;6  @ @ @ @`G eT[\pܯ>%S&_4xPUj-ZWk&xB.{VS;U@C @ @ @ @`; N؎]lj->>xmX @ @ @(;;)  @ @ @ @ @ @ @( ŀjJ @ @ @ @ ";!!$@ @ @ @A@wB1 @ @ @N`  @ @ @ @bНP $@ @ @ @""B @ @ @ @t')  @ @ @ @ @ @ @( ŀjJ @ @ @ @ ";!!$@ @ @ @A@wB1 @ @ @N`  @ @ @ @bНP $@ @ @ @""B @ @ @ @JÜC9sfIYu @ @ @ @&;!w$hP$scN1nU @ @ @ @D ١D6&@ @ @ @%H@wB YJ @ @ @Jy, @ @ @  %fY* @ @ @(Jmh @ @ @ Pt'e @ @ @ @D N(͢  @ @ @ @@ НPn @ @ @ @);D6&@ @ @ @%H@wB YJ @ @ @Jy, @ @ @  %fY* @ @ @(Jmh @ @ @ Pt'e @ @ @ @D N(͢  @ @ @ @@ НPn.ueYkl,'@ @ @ @E(]z"x|eQk][q*MUnҼJ歏?R[pܜzu'd̜bU+IRTjШAԯձSK lS @ @ @ @.Vq.~ ^äɗO!x%:%WWW?ᬏm/qrLMNֆ ^S_ר;n;"Ɛ @ @ @$QI,T~ŷ&L!sصŤg9>քg|t1x9&oH @ @ @(;!Ej;ҜY<-;s.J֏۵?tLYz tۻ|1ܜ.<'c! @ @ @H%Yy2~%甯UQc{tަڅ˧Oᅧݰ,7{'8/ǗY+LzxwD)sZ6y5bWW%kLț:_oD @ @ @ @ NHe&]YVTiwVm"Tm2x5w~pQ˗Z3n9hn ̔*W^ovQa&*o3kw072߷gRL @ @ @"`g0m5k=(Z8 _Wt(&@ @ @ @Н,"3o*롊p~6} 0)7''AfƊI<;mSa|PkF K'Oc @ @ @lG+Wn5$қ~yV#ã5i0N3FfTk&xsGwt1f}мST +N2 @ @ @+Vxw?*U7Uff'|kM81==}ٲeAkBҥWޱcǃ:裏ڵk~y ?7j=III UZhA|wœa57kp_s >ܛ_JX- @ @ @ @.0o޼>;)gϞu'<_}FFF̅6nܸx/禛n:ꨣΠY!D u'l۴z7 %GVm2: 쬬c >0OA(Sr%&| @ @ @DKviqa|oV߾} SCNMS;:MV;",+]b a^ׅVc @ @ @ |x1PC ;HF~pٙ󎥦;&+5jZT0ܰjՄk˦N AZ*5ulwca6+&@ @ @ @#СCիWo=м)S߮UVt;o𤄻.ִϟO?E]~o_?Yg-c ; ڸn&|IO=qV Wk*~kU69 aj#ה:இ#<$ @ @ @ @P x>AŊa!ŋ AoA8s_z`g0yƴ&5 8pW]uU+O:rʅ<Нݠ?*VڸvM֚ʍy=Ȟa>N֠!Om00X2qۇ9KC?I @ @ @lwO_V?O_U0ټyo1& .^{mܸqyGɓ'w=aL״+/)KXxa|kBjy,ք@,sm_?Yք 4>JV'ȝ#F @ @ @ %7pðaر?ˬYL_f.lp '  ZRܨqٰzv9- xIÚrX @ @ @ @@Q;3`ۅA/_>~ٳgG!zhĉ{vtJ+_mw/_N G|C}e̢֬٘,U1o 9W AMJv ~WM) @ @ @ @@T ## xw}hAϝ;7UVa~q7 7ؔځ# ;ͩ׾rדif1q!OTo%>|0ӧEVfDy~7Lf-zRaIL>  @ @ @ @HW]uUzzz)͛7K;=ڝVv*3gF/ңv;M%JK yжk}U+ֺqڱv/K/U\ ;y$cU4ku܀olH]á @ @ @ )0bĈ'|2,뮻ʖ-c={{yɊ+$3&ҥKtǺv˫}CyÓ[OouҸi0R gߟTo?^NX| @ @ @ P ?{:/Phʕ/GAA׮%vv;b!=pe-*W>A6zGNA+ͦuKG' @ @ @ @@a12%}WTsE͙3'歹59r5;vVZvk-3i+qAZaA:X@ @ @ @WY|hBaN/&Oӫ-Jֶ=;!zEaeƼ罦=(';WPnt aȊӢGssr2fozCW)O @ @ @3fxW\ѨQpۡCք޽{_{[9?]w¶6޺]xɜ +9,21ZPv0f߇?I&>^5` aB@ @ @ @BtM7n+lРUW]U6_??͋VwyC vv&KD;a[ߦjF/>rxtX@xјm;D'a~?lxTr ?(ArXWٙc=ʺk`[e^qW]uUʕdIt'l;U7<5:N޲Dō" un\Unuԅu* b{"K;$5 &!/O}yis/Y 8{@mj|7qؘMN͍;uTW  @ @ @ @ xϟ5O>(.RpW9Gy߮]")P6NavJ ڶ;W@SZ6hCbWgHd1 @ @ @ xꩧ"N:)j& a˄|7ިx DuB?I`68ծﵷxjÏIdw盫թ[69/ùq @ @ @_~ȑQgݷf`0k֬GkԨ1| . `hРox߼7Y:u҆wuV;Վ;wij:Vjk7ۺn-|xfff^fW7~̝>ѿ (N @ @ @RT |+,:!io'&+iR!ѢoP*  @ @ @ @,41c$-D @ @ @ @ NHѣGrID @ @ @*2{9jԨÇgff&-iH4r9s_6uz @ @ @H]cGCSwV^>T'$̌#W޽ NaF @ @ @ @ 9w_[uBr(epC @ @ @( *% @ @ @ ':!CH @ @ @R@ @ @ @P!$@ @ @ @JA@uB)JI @ @ @ N @ @ @ @ :P$@ @ @ @T'a  @ @ @ @RV 9$@ @ @ @.0z;/Ԯ]iӦ͚5СÑG{%>ȒN( @ @ @ Pfk׮;wn1n?tnm۶wu׉'X U@uBQŌ'@ @ @ @ 0o޼N:{WG]fMF]t֭i9r", @ @ @@_~^ڷ馛] .? @ @ @He]vitƍ+WcڐClZ.v"_/1w9,\Pqz۶ߺmߞкU) @ @ @HgŊK.6nܸI&Q ͛,Y$6eӦM02SN˖-K'O1b_hѢumڴ9۷o_B:333G>{˗kڴiǎC:2xT'mKݿoTP[OvaCT!s_3'h+:OEJk0 @ @ @*@l>Yvuר9iҤC9$j}ѯZ,$8^|h@()3f̥^Dc?|Ś& TDPO 8pܹ/{=ܳ>;=O܍W̚zfgn߮^_o&kڌxpCt`~2o[4E@ @ @ @-hѢ^z-^8z{f͚Q3;Cj!aG 4w>hРX7޸jժXNo۴i .\^lYӨQ38#Ptqc K. ;7~.͊믿wߍs%\R5i$^> >s={O?N:E=% T'DT1Bi?gm>ۍYkVG[8'ԨW/SvMnӥ6,[p]]&  @ @ @ P!gꭷVBPPp4äIb#G\zu 6lxע桇ۆft?BASP_*~&an_Ʀ)g}|-a?Y"jhL5v+ ¦[e\{aChdI %+1#bӪVK0~is%N]aUkȿf{v<⩡;rs~Lb s+YK&Okbk5n}'?zO7K)(JnNtAXrnmzcͯ۴aCZ @ @ @@B E ׄhn( sr~6PHuBM 6V`76hڴ_`iBlzf|Ͷmۆb=?p?}zt)ѤIY`vP8餓KoMf̙5ϟ`?W /O_z QP Kt?%E})+k3xsA~:;xs# @ @ @ @B \o{3gJ V^uϊ: xhdZZZ{0'jժpC A.]'|rFFF|ON8㧯PjNv([g6t3mnoT{|~X|nmÍ2̌]7yC:u  @ @ @\ G>w"333WXlٲ &W^uƂ9B]B9dȐ޽{? g19X!H q4h5 0s}7Gq>Ν;C+N<ƍ_*XuB!oscҫUȳ-*UU'jtv;%2G ֯^u]vKd1 @ @ @(om۶_^EK.dԩ999sN(\YfPpǾ⋱ΰuCC|zICɓ'GM6-jƯ7/~N;"~s=s/]څnݺpLYɍU'$׳8r<̌\}c)Qƍߏ4tώQ\xЬC|_EuB @ @ @ *pa}'1z뭷rK'>SÆ cFSz(.jvuѬѣGQ3 gСCò_{찏B8p`5<#j߾}I"II>o?~/~}韋m93Y[ƒZ~GǺ% * @ @ @*@Æ ~lj;8&MD=c(:k7M7CuB aÆ}ΰ@g#W^y%گ_(.Ff͚b?%S1@l/<묳BI_Ӗ\1M[v۵)7X?vfBZ[5`o  @ @ @ P hcfΜJ)ňCi{ML:!+++s}'$˖-L4j{]/BF,v:tş5߬?4tʖt/~*Ul<~z֚BMq;ra4+dK @ @ @`/Rt^Cxp|CZ |pdC8!qGy[o (vpAEs322i Qࡇ积!'''aƌC lذڵk7m]agyfm 4/F.lrw\z㏇b j ѓ^9Cf{uVV}U,$XɇVVv @ @ @ @b N>@ AN:yBg gѼyD^x+" (7 UzN834ve?~|҄u>ak%,j*VO^ fY4nW_]QZMF͝O7/F>AfUL]GD @ @ @o.>իW8Rw[Dj֬zfAڵǎJ">Gx⮻:c/?|sCoO1{キs7pC&ᾧ~ ܆_RPOxI'Կ:]T@]L,[Î٨Ie!~h/d4&7 @ @ @R@ ѣG&M-?qƉm۶}Q7,X lЪUN:m.Cؽ> JlXhʕ+ aV:BM6oׯk{|M؉a!Uvv E y&:"Cw})?[7/wՅ6l(p1YY]5oNtuS=%" @ @ @ @@%xGrrrbޡC:"U'Niu&ӏwƊ~~y8-]$" @ @ @( /,Y$vq+ppOx۠w/?/z~ޕTx߷%/ @ @ @ @222n҅^Xnݨ)(\@uB>wu?[Fw.??gcfOZ * @ @ @*~ۯaÆǏGOSE]T9YԪVgw/O6Vztꆖw @ @ @k֬ D+6mZ% N(t?.jwcN4'W̜fK٦E7ܾ.}Nk֡S1ҚB @ @ @;w9I@uBRlp=:h[ @ @ @ @ uY>`ZT'ǷbM @ @ @ PM4g̘aÆv:tҥK/,:!ߚ5 @ @ @ @@ ԭ[o.TW @ @ @ @@ N(3z7&@ @ @ @D@uB%y @ @ @2wc @ @ @ PIT'T1  @ @ @ @@ N(3z7&@ @ @ @D@uB%y @ @ @2wc @ @ @ PIT'T1  @ @ @ @@ N(3z7&@ @ @ @D@uB%y @ @ @2wc @ @ @ PIT'T1  @ @ @ @@ N(3z7&@ @ @ @DZ%y-G>|xff方ؽ܈ @ @ @*ꄤPЫW @ @ @T';$M3&i$"@ @ @ @H@uB^f=K" @ @ @X H+~iF ٳQT6r9sj @ @ @ʛdP|ݻ* @ @ @))d|mM @ @ @RH@uB ,K%@ @ @ @)):!%_E @ @ @ @PB/R  @ @ @ @@J NHf @ @ @ @ T'˲T @ @ @ RY4 @ @ @H! ), @ @ @ꄔ|mM @ @ @RH@uB ,K%@ @ @ @)):!%_E @ @ @ @PB/R  @ @ @ @@J NHf @ @ @ @ T'˲T @ @ @ RY4 @ @ @H!j)ʹԬks7gOVA FΤ,L @ @ @k]>cڐClZ.sKYU@ @ @ @Xfgf7*MHBK#gR&  @ @ @T` ~t5KLLJ#grW( @ @ @T< ~=zޛŕFP6 @ @ @k]1άR%7+I\T @ @ @ PT'J/]ĕF$.O* @ @ @?[VZjIY_iL$!@ @ @ @ :|%'||55jtϳ/[_Z\\4r @ @ @ @@PP~֭տoNؚuiQF.t @ @ @lZ9kzlA~WŕFΒJ @ @ @T=lg[Mv;x۠4r|U2 @ @ @ @@ePP.oscKIV#V[++%\ @ @ @ P9T'{~S33VĖ76O U9K$  @ @ @ @ N(W~{u/sT9K* @ @ @ @r N(ӏ?"j4hx#ϤF2fr{ @ @ @He~^k\1Mt۵)J#g d: @ @ @Tr e^0/N8eާ|5䫒 @ @ @*2{ӟjKn_Uw?TFΒJ @ @ @`]uNK?k6ܪK)%\ @ @ @ @ N(쬬f]wly@4rpI @ @ @ @2Id'|qz-%_Di,d @ @ @ @A@u–1X kuz>lKY%N @ @ @"jQ$2Jؽݿۢqcndqr=d\JcѠA)7 @ @ @ @N(^qDo]1-N(7 @ @ @ @8١$z @ @ @ @.:׍ @ @ @ @J"dgn>W3;՗tWVfi䌿 @ @ @D@uBI3wNJ|ԧW+ [9 N @ @ @ P '; @ @ @ @e( @ @ @ P  @3 @ @ @("`J @ @ @C@uB1L!@ @ @ @ :X @ @ @ @PP 4S @ @ @ @"T+XC@3޶4r&w @ @ @ @@wB{ @ @ @; X @ @ @`* 8 @ @ @ @ N(wĂ @ @ @ @@PP^!@ @ @ @N@uB{%D @ @ @* B= @ @ @(w+  @ @ @ PT'Tq @ @ @ @@PP^ @ @ @ @ &:PC @ @ @ʝrJ, @ @ @T0 z @ @ @ PT'WbA @ @ @ @ N`/ @ @ @ @r'Pܭ(4zÇgffCЫ @ @ @$&:!1F҄^z%0 @ @ @ P쐴=f̘咈 @ @ @T  I{=zHZ. @ @ @ @@pC^fϞ=G5|̤%-F9gΜ @ @ @ @Pw W23\{VP>^U @ @ @ @ %쐒͢  @ @ @ @@ NHe @ @ @ @ %T'kh @ @ @ BReY* @ @ @HI ), @ @ @zYJ @ @ @RR@uBJ6&@ @ @ @)$:!^ @ @ @ @P͢  @ @ @ @@ NHe @ @ @ @ %T'kh @ @ @ BReY* @ @ @HI ), @ @ @zYJ @ @ @RR@uBJ6&@ @ @ @)$:!^ @ @ @ @P͢  @ @ @ @@ TKVΥf])<{Z !;+jŞn" @ @ @(bmgLrhMn6`ynwݰ|٬_X1s3VΚzonv lI< @ @ @ @MW33G&$~=эWmX4~U'|CgwܴɧƿmM1 @ @ @H@z3J,nf锉E͖՜Eg)Mȗ'wS|4% @ @ @ @ \_>5anSnMLߙf;7_C @ @ @%ddI&3Ϻߏpf*EMOJZm/iF;Rgk&c̯nj}ٛ~3S7 @ @ @+:!IȖJ/]\\ߍpDhymq﨧vmv3FyRƜK|Uh @ @ @$QILNIc\aēlܜhA_ijգo}3TEDM @ @ @H$b&!Ւ>XZyqI%GM'DA:̨㪌3GM @ @ @H$b4UֺuKt}Mdg/:9ܬS(\b/-Y|SL @ @ @%:!YIr֏~z]I|Mvh|E悰7C5k7 @ @ @ @ Y%Y< ̿cY)c-ӫ׈,6%7,21V; @ @ @ @d NHdf;1"Z<[n"eLVmv,?u99_'-jU'D @ @ @Hdj/WNv瞚"6}olybjhsyQ30;O,k4h5 @ @ @ @ YT}bKϕ7o}4wsOu9k6Y}׫??F})j  @ @ @ @@r%7lEXǟyslV {䙴bTSǃOMN{Ckw v٭A붡RaŬ :ӪV[m @ @ @ @@rT'$׳h2We77{SlZ;h]t?qa˄?]ް~g9VVmKD @ @ @-P?O2*iw/?ySv}j!C7%Ti]UCi @ @ @(ەp矚$Z~C%LdgO|hгw\2q\r߾K~1on !@ @ @ @pC1J8m]uI{ *aܷsOIZ;6iۮ[3WΙih2Ǿ:bNl @ @ @ @DT'$*qYYZ&W<{&zOVo\f½wLx c+y}ޛXFb @ @ @ ';$hI>x 4kR^:e#᏿xēC&5[}:n3M) @ @ @ @IPD̄R-xw̄{ VNGZzB3 4sFq;wR!3.'Q%qܖ*). @ @ @ @ 8١xnşmѸ{sL>Wݰ~S8ZJnN QOAG/$@ @ @ @%pC Knw=k7kv>#z)F @ @ @ @ N(X <[k4hXZ3j*| @ @ @ @$Nv(^mF]T[xu+ jvZzzMvԪ[V =EMn< @ @ @(ꄢZz)\ %@ @@bffR-2Y~I&KR @$Q@uB1"@ @ذ~-d-wKw"ٛv._ŷ3 @#dq @ \6ppwʥK͟虓?3 4׭xk.*pO n=yp M?xm#ˏ_]X  @J":$z @ @ u<-7w[0;L;*F>ws*j6څtEz.Ezre<7jժEepyK<k @ @@T'P @@vw\ygwܗxWܑX}ؘVzߵ+xtb+}'/YذMjܬeZZ.F_sÇ%YyMW-_jU+kxu5,OEX>ΔU+7=<4jl֭ms%YŹOs“~#N<$0srrYom˿JI4~!d=Ş_^ @ ~ @@zznz#ܰ6j&~u7>5xG#V\R۝;I{;年5^z u ֭3^&uIxs)zsOc>3nFطU]1謩FXpѧ-O5(---t.v+½v]:_ zg/fm?f!^S7Ŗ_U#>ɳMY˃8%OԜ5']6}QO`̉?E^8f:y7_rs]~d,`{pw=Nk?~%Q+N2mt5~ ;^3=<}կ=MY{'w?ݹ]9+FKN)Qg`ck:XHiBt]_{* @$Wמ mKzx{o8mӦ^-3|~%G\8F>vfN5 rp@bK}ԘW&lJqߍoʻO 4}՗3cGrN|6~ƽjQJ:/ޓ\u8KVFPM?)F\zē/:"(B;.=B乔_yfQI5[ @*=) @)/hvqr8!_ _MB\U7{t`N>iyI.N_͘0sc MߟHc1C}ı#3׮NpzRWöm'}㟽ʤO,|bWK_ {t5͙6.j$B+E%YVt_ @TZGV$>zÇgff$I9;~r*K"@ P9j{JO>=n6;vhv֬ZݼO ;'ֿe(LO-JBOvصsXF>aq°PĠ/.m'J\Ry9׿y" ;gB$9Ksgo}9BdVV.ژr)K WoZV%YVs_ @Tf I{4W^IK' @ (d ׬]nػqdA{%C\pkU\YuֽZZ:kժGEPnEEA6" 3z8ܛḂ> y~%f63.cZafs,f mJ(h.vnA>!膇É ^6͝?`_BLBWE%Evk @VyZx'NeI @@N<'Uqʹk4!(\jP *fp@Aq4?K?q)Lg.hiBpC='(V{Y_F'ǔ&W;:!~dB2 |]7A@PQS\}՝/רwW;.Yxȅ/Zcح_'~݆Y16+ˏ'̘A|}o |DP?TA73cbIBI/\J!Y[sM @Tw :thֲ @(23g˶g}d)1c3yGLٲmQ?.+4L/t;͛6c U.g_q}iúpLeu4@IDATKMMO),xy36 ma&v/<zA\V3.SJjG*߅rd`%? S~V.[>8vg}Lr͊̽WOϨw]SA|YiLE| _eɔCr٭ @ @Z Պ Qovذa&L7n\vL╻̙S{pu @  A(7{ 8qVE19ޯ'Q1AsW]|BFLgWG|I]!3`E}y||ݻYrYt\@f@)&G 9!fXE7K =속Oμ^ A }k1fc,3x~COy iJ~aG<">djש|шB{Ɋ@%l? @&yO"W55j]V @֬WHNIm91} 3m; Wزyc kWߘ-++-zۂW0{As"v;[}J5XYAbYנI|uBV -DdowΘc,vUJ.k/}L=5kqd3V'9 iq?{Qj[ny__LAb~d~ՃdY+LAE| z]$Y]dA @&:q @-FM[gׇolaO{͓]6BO_riAuB:mX:~bA&l:4j{ ب}>nFEM|b HKU]Zד j'>,U֪Z(j /ȏ_YɘL0&:!91S G.*M6o~#F'NS?}^DES!xHνLAun&ŏX%: @j{q @ ݤYhr}֪h ݚ[#'>_|&-W{5?7/w^9F?שװ$w˜'*?7>?yyZ3+SSk7k>&4 ]0fXcV.g'g]+^$??=19)*.'sw/ڸYC;N:|H: @T+m[S޶7K @(o0wޤEhr}'D$2v]p.BaD__rb)Q[ ˻riBBnԬ6iUF𼏢X|BΨ;11 Ϝ2b6+ŅT'4mѮmDu6 +kUzO @ @@PP=wM @@Jdoz=9)a)|_7$~dVn/P̘*ԕˏU_Vѽ5k_bӆLj`]6swW}g$Y 99{ԬU;&߬kUzO @ @@(ůTO  @@nf6(UA谒-Zw֡K[|w>|ُ&>obg P/=~ǔO(tQ= {vߵ޵3֮YQȝ[M?ؼiCz:ocŲESH%fC#ιC}hи0l`o F4|hиB? b%&K!Y;ti @Tg { @T%KMxj߭g3[ꄃCO^L.})S'Mf;Y{:b]yyyt되'&ޙFMZzmvKq4l"h{<׷;۩8_= ukJjqtT'TB+%SJٞ @ @@NDI @*Ľla,&٤yLd37܇?}x??9Kؽ"-1w_rWz;*bРQ߾{)M-Y4;fNnؽv.Y?[}U.Ӌoo_+da$V!U3BvC*];w[Cr @ @n~wv䃇 do^pOSqOD|1߱kczŭf3[ϟ5%>Y2ψpF4k>>d̞Zh~% yx;={1=r-woJ Hhf{O|2|3+6lP.TR}HVV] @V 0Bx @5֬\|C?iOwC⻂g{jи L[sƘ&-xi1ɂf]Ϲ.ӛV+=&ST3Y/jϯZ{pBvRQS>,&OL൘mϜ9|A3gKOվKm:bK\T8̶z,Y8+f31q1¿ng͔Cr7 @  @UfN~æ1ٸ>k g' }C0>8 'g6fblظy>hW^?5e|׮Yz9v{ښ|;xP4Ʃi58 ֭ ~1қQS-Wf&w?a`X~P0Y~߮ZvUfAp?|{shL~5+Q\ZO;9T8w^Ltlڸ><֗1 m&ЫTh2[ @ @@Q'@ @Nӕ'J/ӵޅu䰘~qtS޼O};~_/nSSӂ6絧picZ{f =KZnj֊_r3xSǟuUîIϬQX!B[姨qبyk?xqg^oauP3=#xnEpGx,_2?fplԴnfȈǍی)-TfP{lfɢ̫.{],]4;IARb@(BUU @ @@1E @]W "їF7d ug_,YY uV߽8|t|uK߿<Jߴex̩&Z׀à^asCFS~ǟvUn|=M^vR=!?INN >|b~=8"~ SqAćo b÷5Z~ fk1eg_~oNJ|JqEa~?E+ܧ @(+qd1&@ @@PPmo7N @@?KX̉1?AWCҁ̌mh_%9⤋|Mv|L_P`L<"rD̲;٤y.=/ؼio<o޴! ㊣ .k~6d-/M8؟ |S~ .=|oϒl۱K]9$P+V|HV] @P go @UW SݵwNſFM[4(~X|oPpΨ *!.&-E%?.*t,4&/d{)i]{38{˾I r/L3 URkoӾ7Rq_|}pQN:NB /Z)J!Y)sQ @Tg { @T%={Ϯ-Ԅ]nΧqJa|3: %AUDN=wH̀K_\@L2lwX깿[p"B[mؤ=[?2xƆ;"U?캿kܬMG|iP=|1s)!0kש+dvgpBP/b.TY]e. @1zx @oښztP^pw?w(U_k=^jծc6iQ]Of:5&c/oy^9!:&/"aN{8-%7?>Y~Ԅ=?MK={^ 5j$g/Ϲu/kLaYng/n&n Hq/A]EI& 휮|H  @I /0jԨgy&~Lk[e @5~;w7ef^lA 7jٱkߒo;//oƔfMd+.ܸ>kㆵgԩ|ݺukv+A ׮^zykoټfz횵jܻIREG~sx̪ѬUzpM[sغ5gh)k׬slװiMkhF?|dzal??_׭߸qֻu0d 5+m?ʿ+ @ QY'xر, ނ\p=SU^Tssrr7mJWVnN @@el[˶?/?$x u7 ^;t&w8xCV4EjjZ= ^faWy&vhY @ N˧L.i;/<.^FZ 5ޫ퐃;=N=3:XL @ @ @" a,":4{Y~̱AϞ:4!s0𛭛W͋  @ @ @ @@9T' '7쒈ꄧ ׾^>l}]W._5}Z @ @ @ @D NHd׉PꄬsW:DcOLNc;SRsB8%VLm  @ @ @ @@BT'$,d͛Nkԭ{-Xp~tbÎ6wZhSL @ @ @":!!eY$<;!Vz˲Ddヘj4حKYT\nѮuEb @ @ @  a,"yi :wMJ.V'$nڬ${ʚ?':qѦ @ @ @$D 5!XAiB֜Y^dYs27\dݤGFL`XZFN ,谦}Eb @ @ @  a,"c 5^>[cJJnܣנn0خHHbᖵkg<踦}Gb @ @ @ >P !d͛~b! U|I? ˖{%]Ӹg:M @ @ @HDIn5sU',anΟާǜWȒ 13z4v轏y, @ @ @(';D)cOvWoص{Gm.Nՙ3VMӏ] ?;g_o;0Y x/??'f @ @ @ @@T'$β4+e͌ըɈjwСdo^ÛC r~ ?Lo8fpIs⻿hÒ篮f @ @ @ @ @̒.vpt0҄`@z&1/${ͪOpz >nO)MuyGFJZZ 1 @ @ @V`wޥi|n޼o߲6+{mV~nݚѬy1=`1ׇcy5v0SLa{ےV~GgGb @ @ @ p 'i/f"#'//?+mݴw'vqddH!a~~̱tӕ~O[5  @ @ @ @@̧1a ҳy[s 䚵14  @ @ @ @@e Vօu;sܞa?^h<{o?+].UfASa݁C ^aAj7mV @ @ @ @ N(!T"5w?3ECvyT~۳N֫f~bڔe2rÑ[ʰY/x6K=!YF @ @ @ @N(Rt?Uqmk2g|9#lի?⑱5֍ݸb @ @ @ @`PPi7bmՃx(~+-[K5wv|R @ @ @"ɻ>6џg<Դbj5hu,҄`b< "@ @ @ @JpvB%߀zm|{スfά5gY#//qMC[OJZq O>=xU;qy @ @ @ P"`vn~O;k^ @ @ @ @Nd2 @ @ @ @ N'@ @ @ @;I@uNv @ @ @ PmT'T[ @ @ @ @$:a'A  @ @ @  @ @ @ @NP] @ @ @T[ { @ @ @ @`' NI.C @ @ @j{q @ @ @ T'$h!@ @ @ @V@uB8 @ @ @Iv @ @ @ @j+:zo @ @ @$ ; e @ @ @ @@PPmo7N @ @ @v@NNo1nܸ۝|x– @ @ @xCĉ @ @ @ @H@uBnСC @ @ @ @Hv3 6a„qegg'l]cϙ3g؋] @ @ @ @@P{(⮱֨QT'. @ @ @ P%<١J6&@ @ @ @UH@uBYJ @ @ @*yl @ @ @T! Uf* @ @ @mi @ @ @ PT'Te @ @ @ @J Nͦ  @ @ @ @@PPn @ @ @ @*):J6&@ @ @ @UH@uBYJ @ @ @*yl @ @ @T! Uf* @ @ @mi @ @ @ PT'Te @ @ @ @J Nͦ  @ @ @ @@PPnVyy ʻ @ @ @ @ox"V|=uɥ]nvZYyy{rWdnm0+9fm[:û{brXC @ @ @et?G1{KNG:ak/}r˵OY?/gs׌'9iq1c4  @ @ @ @@DL^ @ @ @$P@uB1KT N櫧?`n2Zn>`Zrߺsc @ @ @ @ Q(RnтiɩiuZ)qщSD2I_ڰK%- 2>#Ld @ @ @$L@uB(Kкs foȱ/M, 7X#qđa&j3h`ۃӦ @ @ @$P@uB1KT섄T'L{侜ukM90.*8kՌ¦ @ @ @$J 5Q YYfSueNέ׮c#fQA7???)l @ @ @ @@T'$˄g'J׶}nFnNβ? S:/)ycԬWY, @ @ @]Wf^n tZJіyM.ǎ c @ @ @\g'TP5ڍ^dYs27\dݤGFL.pLrjZvf] ƥKjoиG]\L @ @ @PPOEu.аY~pǿ5IA=n0خH{m'-M/䴚ᄩ{u·Ae.Ua鰣[wϲ?yvؾ3gߠ⣛߆¦ @ @ @$P 5kYM{q]Op^{N#jo`~{izoVLTLpdF.2lFa=Y +}9= _}1Iפm @ @ @HYfj/-&s3fAZ#[nB{d6m{N;v5cn_n/j|A~Ѝ5ۿ1z  @ @ @ @@<١t坸c/x(~Ō}qb?;Vޤ︯Wd1 @ @ @ @l斀Yџg<ԴbVՠѾ:3,jܽ)NS3#Og%C @ @ @( ,Rڶ?Ջ{{͜YkfZ37F^^z鍛4٧As/Z^n/[_]pކKk7k^E60;O!@ @ @ @ PpҲ, ?,vNz7*x;J' @ @ @XOvX_ @ @ @ @  @ @ @ @+:b}N @ @ @N3@ @ @ @Tꄊ: @ @ @ : @ @ @ P* @ @ @ @? @ @ @ @@ NX_ @ @ @ @  @ @ @ @+:b}N @ @ @N3@ @ @ @Tꄊ: @ @ @ : @ @ @ P|5[77n\vv}OCG&T47@IDAT @ @ @Atv0,0>UӧŬe킹kƓ4c816W͜>7y5kVe 3HVm_=ο4 @ @ @ @ d -Ųo]zƗ&,5ok='by^~jp9/=-Mal'lY>K @ @ @$V@uBb=KG7_=cel|޵uYw'n&K)j< @ @ @(}m]c"z}ifKz{V^8&xG76l3gԣs7z:S?~gg.?~ǽϹ0vF8ɓ>) @ @ @ @ HM,ˣu)G>2#j3-7ok @ @ @ @@BT'$ċeg{ymWNaٟ~W#?/lt)5k͘͠: ?"L۞ @ @ @ @oX=r_κ>\Evu~޶B aÜ|;|RCCσX0? @ @ @ @e ,8>\]CG͢iao~~~RبQcm O=3 DV d>T磏/j< @ @ @(2ӕ}bnNβ? :뼤bQ^f}b>x'iwfqVt5gVA ٸ1-# @ @ @ @;RKX/?ݼ)r0.s8R޸i]KTÂ-[ l  @ @ @ @@(RGS6`߸tI Umhoq-&O ش|Y{D3b @ @ @ P~ 7, K?(Sm䔔eݺ)5W: zw{iy[Y%)h(ިq8+6.> @ @ @ @NHcٸpBx[޾. anO? ^_nk}]a:nvf1q6PP. @ @ @(@rV5:!^9ad X1u ~ ޼zU4Sih8ahopC)&@ @ @ @ pvBBKHmG_ ϬQc[AFMzI. iߛ6d]Kfo_R+=[L\kꄍ˗3X @ @ @(ꄲkV:aõA7^2lY~ouٛWM퇎p0svBjaWA Du @ @ @ @<Pٰ!okN̔G?7aăOFK154Q)r[0)E'ec]b @ @ @ Pf e+-kgwvdtȱ%%V|Ŋ [q_moݴ)[IhSL @ @ @":!!X$%==ft{%1ɘf7*\քYv @AnhvS Q1 @ @ @$F@uBbKJZz1rRRRL2U0|gᘌ-8 ;!: s6 P @ @ @ @@T'$J뤤׎nܭGYTܴO51lZ<|-Yk®E7nm  @ @ @ @@BT'$tԪ :=͢mۅW 㴌 6*>XhAtb @ @ @HDIb]GGթme {cKh"ZGa\|5n8 vF7v  @ @ @ @@yT'Gsfh8?//ZLиGf{ -Y`^,&XaoM#'. @ @ @(qn Xb%YhEy[ÑMNviaW,aYheS&]F @ @ @ @ ,Rm?F6^+̅okҳOj5jff=Ddt~^IFC @ @ @ @ ۾#O*Vn쿗}>)lfg~aWFVMz AQafO"ly[N0߼:-ZM @ @ @HbbޕLl8徻/^ft{jzz,8:y7mݼ9 ܜ 瞺v0c9a, @ @ @ @PXϒ鰣[wϲ?yvؾ3gn꣛~ZO ajAMz6NuӦ0Se~9/=hD# @ @ @ @ HM(@Rr{jpWLr{م l{-W~򯾘{III2hO<3tHK?x_^buZ~}΂7^[=kII`?2" @ @ @ P ,bu۴=^;-kۺq5x[ӤG6|0lIos @ @ @ @ a~c>aeX;VI)q_(~p;'׬U7XpKw8 @ @ @ P K{ᴽ95N1u~)|T3&qY?y{f⃶ =楉O>=K @ @ @$VYRkqe `k۰tIRrrfhfAQ}R-b^'iSgM_xѦglU}:~Oy/UnvC A0 B@ H222v:59^k={"@T Gꓷn @ @ @ P_K} @ @ @ @* ;H}M @ @ @K@vB}I @ @ @8Rd'O޺  @ @ @ @@} N/i!@ @ @ @G#[7 @ @ @/ %> @ @ @ @Hp>y&@ @ @ @% ;݇ @ @ @'o @ @ @ @d'ԗ @ @ @ @#U@v‘䭛 @ @ @ԗ@q}}'{󦖭Zo_a޻soZ)Az @ @#B_pajzqR @ @@۞,e?,}kmqV 7a9ˋ 6螳Oڷ46D'@ @MJ`߾}eee)GcE @@vW~:W(_iт{˶-_y\S={f^;-IMX  @ @ @ @@j6̨ :?ȳn @ @ @ @PNv(dM^;Y#[ cW3<Ӹ5+׿wLK0_?{FU,]S]}Qy։ @ @ @N f]GA2evSw''iЇ<^z!S(//Ԅ]Y @ @ @ PX F?}JgϽ(f<_ޕݲ[-Vҿk׮ƍ2dHҘ[ignϞ=+"/a޽ٗܦM>z̘1K]lٲ%K,_<{!=zvӥKd_ fO2r;ѣGW4( @ @5P YI=ܤZYaU7j|#}lykqfqC|lQ @y ,Z(}vf\$T>7N8qbnvB2DvB /̝;77NL+WI&'5ÇvB @^@vB a޽~9v?.:v9f|2*vm7gzv:|ҿG>!@ @F"oc['f͚{+U}ݷv<?x$[9!/~'ss2*GnE]T@d9<%{,~f7* @ @88>1\\*`a2K8"@ @: xY0xlojB!2l*DA,'Ԅح[>B*TnݺZujB20ˆm @ P( F5OzG@ǁj\߿uo|tٗ/ؿ_g̐{I @ .>9_W^ɿAzI UOhQ遄q#UaD0v.]jjΝ7o={SխXcn8[]:vݺu HXjUL9pϟ?~NE\rիs;'-:tصkWvrI @(bt횤kAC'kwTSeV[_?2![Yagr3W[uݖZCe1 @ @@N;-'wzꩤl{TcAҳ 8L!^BlN4?0`@1y I{1l߾=-cƌ4iRq?bY&%:ꫣF*))I_z饤]ٳg$sӧm۶aÆ^x!R( @ @pC1 g롿DvB0*LMȎak?s])=U޳mN+,'_N<9"_ @@0eʔԄ?aB _bȽ{mM!=7`Μ9݆~gf&DS /NĞ qTDRM }?>dȐHMƢ^z]zaQ @ @ +pk+Z{lNX>C ~m61w/Ey/\TRrwnH" __ؾrYq'>9⊫RT  @ @Ii /ly4ԄG[䞀(t)չqBn7|޺ 'zުSe @@lP ;Z>"GgYfM޹s3>O?U,dTLvB16 n,.גle @ PoƱZQZw\uq /nӦÀ;Vt޽yc2B2O=K-ٴiS#M֪UL O2dHUߢT;vZr۷omB @R@vB-k2˰cK׭MF.kth׫ORV @ @WxSPa<m=~N=NXrꃟ]m;8ya…Ǐ\jݺunc=vذat5[iiidg'_Og jɿ$ĔrD͛WEv[oUcz @ @) )xQ-*?'~ٴxGt?ntR=˓a oyVvB_с @*us>[%W&u}q6IU @Z`РA-ʽ?{7s V^*DBniiGA׭[Zc=6iҤ#Fıٗ"_nɔ{x'?C-Q޳gꩧF8!Z"eaҥ=ܮ]Rݒ 2$XHZ2HM{Ǝ .M/R=U  @ @B N(d 9~\³a~SO=:P2x響 /AS&|zRU @ @z=ދg=I7jM;qN,'x"}b8d!r 6o{*Ď)H5ׯ_v%NsngΜOGHre92u ĉ-[bBJ @P@vB1EQԟIclݜaܻ:qg5ƶgϟt}̡-&wP]U"@ @hݺСC~}Lz_@jQGMw{ vS @gyfO;s_7`M;9:lQÆ ܱ۷Kj6R>j*7flGoW7r)^H @F@vBmj;3> }(@-ZY @(@v>я#{q@jM;r5.؜kLR٨>}+_~ye  rDK^b8r«  @ @8١6z>9?~;ιhⷿuuN @ o?Oo޽{sx1ǜvi]vͽԀ-u78+3g΂ o~5N8ᰙq y'2q~Dac˄>1bK Ƴ۽{wnH8㰉H.ɽ @@Ge۷/?mŻ;׾עm^{?A\E#\qqgbwߝۮ @^`߾}+WܶmΝ;7~d$ħm۶yu7@Xfڵkׯ_i {)++Wٳgw^][Uvرk׮As޽  ˗/[,&YZZ?f3 Zt&@ @@3~u]8_M7TG7ja}!n @ @ @ @@W_}ujw"n^5-;&j @ @ @ @E]ԳgςkD̈\ 9s棏>gϞBm^{ g]w]4 @ @ @ D*{?DS.))>} 7P{Ë\ؘ Eyyy޾9:R9"k!@ @ @ @@"p}IU![`ܹǏn}yΜ9ƍ}F{O=Tb D @ @ @MG  IP n);``ʔ)% @ @ @4)-lNơPc >={*֔wy'wC=ss۵ @ @ @ t*{?dwުsd={̧sSST&$9ILZ+*N8njҙ @ @ @F.PF>^$\x<@gqYjB8١c@ @ @ @*q ӨF8L @ @ @\УGZ>"DZie'4‡bJ @ @ @ JJJO^yGS pFPL @ @ @@e} ';q>"@ @ @ @'0nܸ1cxcǎ5ޘNhO @ @ @ @ |ӟ ";WH @ @ @ӦM+..NQQӧOϣc";I>6&@ @ @ @)ЫW /sQ={&1DvBxL&I @ @ @MFf4lTSATy @ @ @ @@]zQFP4`g  @ @ @ JJJO^EU!M섦̖ @ @ @@uin&@)N @ @ @qƌgDNhδ  @ @ @ @Q |ӟs~3`#&;>S"@ @ @ @&/0mڴ.#DvkWD{󦖭Zo_߻eIIC @?pN=ffjɪ @ P{^z]x>`աOO3*;<{[[wYQI0yYsEy$ٽi[ߵy-o7^٪c.Cw:,~zA>tV @ @2+++KiDcE @#pW6;!(G|_ϦE R9lo;0;?|>w?~m W˶m]7|[#iG @ @ @ %"cÆWOvKs-5ׅ5u=kԄ#.~_Sխsgi**wgV>d%- @ @ @ P{njx"8١!ż5. 4|ogg>/GA%zͯw=Y_CcWGO91#cͪo/Yc~>/_u!G% @ @ @H`cƌ7o^nhͲ XwmXy[i{o7% q}~~|Y}(C}jR9?~Rm߷e3_ ]>syWvˢ;oɮfosQӿ^NLمǏ9;^OgQ&@ @ @ @L>8}AD{A7 1ٺe/nJ=蜋F\^vƟ4̩I ^OIa% I5s N:i/۶uIU @@YYن 6nܸoߟOk<5k,YdժU[ll#~۶mk׮]lի#fPf0&~uڵ6%@ @ .HhO56j:;/Q-m~wdJ?Ť\Ya V=;3su(:\r` SsII:yR]7n#F&U @xgs߲r);v]~8]gQRrh+L " {l'OܢE(ċW^yeҥ;tеkq 2$50Zξў={^}+VD޽{/EM @IDAT6G}tٯ_ԥY˗/^{fH=tҥ W1ٓl׮q7z*fve @ P8ᡇxD 민Ǔu8)& #Lg$W{7?vY?׎`RЦ[K-[ɮ* @ @@Egg.Er@x섉'f'+x }(GvB /̝;77Ύ+WI&'5ÇvB @j/pEE}2 h}&AvB<{?ٻ $B{jL/*iu`vܸhAr†s/u1Ue @hpx*T=8C{+=j'q}ř y-"H9/^OdTx_=r;:UD<_0NxjyfDv@e @ -ӦMiaS7bϝS-ϼ˰C_=YWyg Hۢe! @4@lHpԄ,OtlojB2<j9_Wȟh"@'xG*L&MoVe%N1cF+#BdED6Cn- @ @Ǐ3fLĉQ} ־2+kGlղ_ oצ Q(ة۱:U}ć?}W'U?ݾo{KK_[soU[IU @@^;wׯݻkԏ ;zj}μ8aر]tiժΝ;7o<{˗&[bűqB&t1ujժ쁙r̟??ǝ+W^:sҡC]vek' @ @@b˄~G !);;>`5INDyO7=eB26U(inMz/.W3siX;~]Gt̾QS~ˎ @ @@cvZO&'>G5kTW_}uԨQvK>jϞ=#O>m۶| 6 Pag @ @PӧO7?  9}tSꞭz qN;׵ak?i5_UǦϸYOg׽Lw-"w01)uN @ (L2-i/&-B|?^wcbڻwhrrS̙;|gyf=d.;#uC,^xљgCվ}֭[g.K/H @J ~g68aٲ9+Ԅv}u?ntq6ߘmyӐP?.*)9;7$R{}箟jRNIL>;] @4@6m.TjBfZ==!Q8^!7<㲷.&OgϞԐ8"Ӹm۶ !K8Sj6`S&;TvvŠKfpǯY(۱cyKt4~7#%쇯~l=\)qovԟyrj @ @4hP:P KqCZZZjjڐ|ڵvۈ#&dV7.vK߿e]rV^p{C 9rdkBYŃ>jW%@ @j/ ;Ջwƴl_?8Cgsf:ayɗwE,JFOsS;_ʵU- -Zw1]kly{ɖwuU~)'_z?){2 @4@bBnvB ~[nƌfĶqB?ć f' 0 [9]R; еk15jTncI!a{E @(섂0V#HٶW[biԄ$hllpݏ~1g7̟aܞc'}o|50&;8:[0ߝsޕi߳y__<7執L @ "P doK Ӌ2# d24'Z"~Æ :thOd*yV.ѳc:vLVSvB @ P{C/kK|Zl6g#{{a&WwmX}Iu}L>{䴫Qqæ7$U @@lP 2Z>ӦM֯_jMuΝ3fXzuje9d-g*܌“ R"Q%@ @vuΥ{̧\mt0pǪN7oLzo[n}I%%* }N׿L:}OT @ @kߨk0ݻ_ve6lxgӦMyN)x̆VZeWxŐ!C*l:u;vHVoߞۨ @Zdxaǖ[,i!)W](i>ЮW}~RՅTMoQuW  @ p Tw+4)9ϳަSO섕+WƾٵPj~䅅 ?>suֹ}=aÆҵknԊKRvB @ P{ 7v` &öf$ l]4m䨤g֤=zfW(wptբ2 @$,f -I-[$,;6ظq˗.]{U~S ;t w߯qvB,nݺ>}e& !ըJ @^@vB y d'l_@ٞd`v=z%Qش8-.}+{`dW  @ @ h۶mW8& 'cPGӎ8!Ν;VIcdd6T8#W=!;;_~z2'Pv}e_ڰ0לoϮ8~lvU @ XbEsWI u4`_N+6?P#ue<@jHqK?u5k֬s"{)Z}Yf.EBƥ^i}r"`„ n={v** @ PY, /cRϞɥvfs\eO.VQXC**iuT1% @^xqNiܹЇT:Ѵ˖-S3-VZjLR^l׮]q#jՓO>9Ϟ={Ew޹뮻vڕĈI TB&s=Jls{Ν-~Bn̐#G8qer\L5T}U  @ @ N( f5B(*~3i̞36,{Y'uƝcvl|csθo9E;ry^7 3|S&t:1ڵ%-x'7l]G'˿'@ @)֭[:NWV;w޴iSeꧽ=v+Vċ܅mO~]tI5mRQ xHzgT3ȓ5jSUT{|*|\"@ @5P3KʶmɄWs:o~a'/i0h#]]% @ y晱ݻ* g}v> 1:v͟s9wqG͎6lX7oK.6R>j*7flq|Cܖؼar/i!@ @j#PTR3> }(8-ZT904{7ſ=?plge3/[ﭺ @ ڵG?ϫ(..>s㈁պv6m.؜kLR٨PaÇCn{߾}/ܝ2=#e!R'>^z qDW5 @ @vm 0۱}'ݷUA\竾e$(9ܪS;w>r1giSuOW  @ @ #o?Owq%%%s1aĈ^mƺvpWvi;vgu΋ 79H"āG4VX-e]Iv4bK"2** G8>pF @ @-Iz(۾}.m+ݹEEm{j߻oIg:NGvo޴[^e[soG6zۯi @ @ @h{fרd' wu 1zWXQdp ivB @ @ @@!fϞzLK./dt<#ou_ u]83S^`R@ @ @ @@|k_կ~ ݯ_:G@ёXk%@ @ @ @@@vB% @ @ @8d'Qb  @ @ @ @@Nht$@ @ @ @G#q[, @ @ @h  @ @ @ @pD=n%@ @ @ @ ;ݒ @ @ @Qm @ @ @ @d'4[ @ @ @ @#J@v- @ @ @4@o֭[2]&e @ @ @@;woVT?ǹ9峟lc%}ꪫÒ @ @ @J`0VK3|ZW#^t֬YÆ k׮ @ @ @@3ׯ9rId' s3Ɇ j, @ @ @zQe-dt$@ @ @ @j$ ;Fl @ @ @ @y NțJG @ @ @ @Fjf @ @ @ 센t$@ @ @ @j$ ;Fl @ @ @ @y NțJG @ @ @ @Fjf @ @ @ 센t$@ @ @ @j$ ;Fl @ @ @ @y NțJǣ*--}'  @ @ @@={Ae'ԏssˇ|SNYresX5 @ @ @ P@7'tR%wL _ Jw7^:֮]{!@ @ @ @ ;x3 G@vB87lڴ)Y͛ @ @ @O `R+ . @ @ @ @p>{+'@ @ @ @# ;~݅ @ @ @go @ @ @ @~d'ԏ @ @ @ @#W@v‘쭜 @ @ @YE=߱NvB#yA @ @ @\`ݺu_g3_gE˓P6 @ @ @ Ph_׻v튟Nh  @ @ @ @r-fj-AvBt&@ @ @ @53gμybdrMB413w @ @ @h"/f]м @ @ @ @@ y<-IH(N85 @ @ @ @@C ̘1cƍ -IH(N85 @ @ @ @@C r-綤:4f@- @ @ @u{Ԝ%S͸*;?/uIrҨ@ @ @ @@~']n6 υvmK1Z=،-?$)S @ @ @O `zXQe8T^S[(//c9s3&O|g6%6 @ @ @y <쳯j)L:5! ̞=Nmϴ'X.;9=Xˆ 6A @ @ @@#ѣG#EӞ—GK_ҍ7X.;9=XPv @ @ @C@vB-CYYY~6nXYݻYUVuh6Ef%B @ @ @3HMӨ\GPG @ @ @ @.p-[o=lf!PnF @ @ @APu߾}U)..^zu^ԯ;?A'@ @ @ @(p65!}gc\@A$; @ @ @ @됡ʿgӥt @ @ @ @@#xϟgϳs&;>8&@ @ @ @+Pۿ񮼒(//flذVM @ @ @4G=z4eqԽ{5kִj*!M2[ @ @ @h?pRb=?F5b~jg( @ @ @1 5sF ;>F8{sI'կ~5ʍpD @ @ @@`:th%~Z֭{G5$9F lCd'4(&˗v(d @ @ @ԍ@ҥK3/ &3߾o߾-F lCd'4(&hѢdK,I  @ @ @4?w J [o1k37ǹ9ܥ5)B,!d D{9Np?\k?{5 رc섵Zk.䩊dyM>f͚%}IP @ @ @H 3A)"qw={LFk'e @ @ @*O &^+QqPJ7n\42p8d @ @ @"kO>9xX+0Bd'*^VF9uT @ @ @T@O`qPg @ @ @ @P  @ @ @ @@qd'Y/ @ @ @ @zd'T7s @ @ @ P q  @ @ @^ ͜ @ @ @G@vBqB @ @ @W@vB{3'@ @ @ @Pg @ @ @ @P  @ @ @ @@qd'Y/ @ @ @ @zd'TﻯGnرx# @ @ @@ zꩱJX^6PG~/䒽[B)!c"@ @ @ x&+w^JPht]n6ӦMk^-׿8p`:)w}qEnh E @ @ @,_|O>o5\3`[~o7iDzGuԣ>zwo>H1/e'S[_ @ @ @ Pl믿>ˋ/xUVɍ7Q~fwu#<2+>q8"+XEIG @ @ @ @oFV[n,2V{ ,?0q裏f./v!ﭦӟZm$w,Υ8 @ @ @@qnݲ"_c?3?38#?>gΜmjHޝ!^z饡C6EwۦH @ @ @(cYfe~WΊ4eVN?w=?ӹ&={v8:wi˅ Fj]wݕ` 0 7DnVj|Y]:١h:"@ @ @ @b ]*#SN}*/X`„ ȑ#_{>},yo5Q0jOҍbe'S[_ @ @ @ PT{, S`t:*}Y6lsϥ;O?!֖d%R @ @ @F?>s/+ԗkƁԽda5k,=N;the E @ @ @O`̙rȬY]koZOWhr??-[lhs֊ ^{ޚ,¥"  @ @ @'0wkW^G.Mzøzݤxw]vI]p{NǛ,;O @ @ @ExO0!kl$0f̘#FMZ4QF˛mYvTG-Z1|QHW $ _2lwoҞ4N @ @ @ 0mڴ^~_wym۶͊7eͻv>}u]#؈]ԯ6m8^K72uee'4)  @ @ @ @` 묳ުU欳:cri׮]˖-s?Kq0K?Mc)N^ @ @ @ PyW\qoɓ#`{wzc+>%p 7㪫o6xqD ;+q?\93 @ @ @rbM0V\sX%,;':w?hР'(,^:|s9p7x&l7iYvBVT^ &\SQs3 @ @ @+Y2 ߽YWCYdO>9cz;Fx≋-JOpW;w,;E wyBfe @ @ @H -ؐ!Cb=Ǐ VE]4o޼]{+BV\!]j i @ @ @ H ˩*Qg}p|0+X=Xּ⨋*+XF/ @ @ @ @믿~n'N N_׻ᄏ]":u~*wnaB1˲/ @ @ @(+Ϝ93k}R/No'O:묓)ڥ섢Q @K{׳jx555YA @ @`ZjUYʻ;wn$(d+"B]Nh:[- @ @K oY,X + @(G8hc&@ @ @ @H@vB,C%@ @ @ @e) ;,_A @ @ @ @2hQFc5T @ @ @ P-[.ZIݻwSwѤ_e', @ @]L{.zOiӦW^?viͿsqn馻>TL6h7?Cӗrʼyґu]D} /g N߾}c Ç$xW_}5s;sVTzxI IaĈ}I.s 11cd#N $@ @ ԩԩSӓzҗY~sDd'Y/ @ P/gMşs9կ~ծ]jz|F*DvBl<@VΝş-[o$(̟?3ϼ+*Gƒ?W.D@Vo={vrm&%z꩑p(%F{G4k,];sӑ駟D>NX}o}/[n]wvBL駟NZbHY @ Py;3G?7f:XaG}4wFu[#D#) @ PFyHMH|b}ȑ[m՛o ),X`MMH?HTkrSҕ#b=|-GFB$(D@njB̙3## $XBelfF~En0|W\&C&e @TD裏Ƽ&L?1wu(";`5K @U-{?ƏyĦ 1:"vpQ!'\|$ ,D En͏?o֭[~.  @ @uae]^~ o0 v7묩ZVhF# @{ tl'Mtġ <e^z饅ԌUaÆ]~T:ƟwǼGzD1d=; .O~-[>U cƌɭo\ @T@G8 sood 7?ė YSXnǬ`1/[3}@dt'e @htG7N0`:3}^{-~͟[_ʊ7f}Y|U-s9mڴt<G믿>o޼t<)GA4\QFǎ:9묳"-`W:mA_ M2%޻}z뭗) ?ѣ=ج`GɍN5!@ @@"^L U8_zT wqan|#qa㫃k&ȽU섢Q}G={Lk'e @H 'NLG2C=3lӦMr+v8$)\r%#Fh׮]VH Y&.  @ Pr-W y+BiHvBC^g  @ @wf'y ߩ݋uY'p݊y<Cu]EȊ+ZϭD@[UW]57{6(V[a1cƌOGBVy3$@ @Q@vB#bj @]O?%?ݺu3gNSyn0+wσ]f=^efꮐB5g({έ%DnH>#(ǐvu׬K @ @Id'4)  @ @&5>}zxf,i>j։MrKɻBVv˜1cr-nU% @ ЈSS @ Py2=X"5';|Yq>Ǐϴ6iҤwy'9 Yu\ @ @+ ;q=F @U-G4.\XMկZ3gYnrKAO=:|ᇳjjw $@ @ZAhh @T +;߾SN#zn |$60ȭd=;~NvmN] @ @uN- @ d;v}`}mr㌆v1 y39h[뭷޺[o+GyСY @ @@m"U @ @VYeKҏwBL߯c:%WgϞuo喹"s9Yjjjn֬`^^tE߿Ї+"7q ȢErYW_}7~zhWNG7!K @ @)d'4jŶ9zk I @ ХKXm|rH5Hǣ{ӦMˊ6,+RN y7cN>}~7~t0SkZ(K3fꪹ-dEpbxM( @ @{ƎFJvmJk*Q/~kȐ!+{Q3@A_}R?ٜ\rɨQ|Sm/ @ xoV/2O9gfU~…駟ϖOۙ>(v/-bV{۫[n?̢\xynNjݺutd]wկ~y`V9K @T@&1;/rK3Aa|A=^PY_{\pAף,%w_21cNH4 @ ls-pFpsW_}ؗ8"Fjk_ @r˹5=r7tS͛z.o?L/섦> @dVZ)~r&MZy|<.SMTvڝy晱'D!С_ߩS<+"BҦM$bÆgTH_ @ @@i ߧp@ޱf̘g/+SO^Y: hԏ @ @\s{lx5XD[Z~|sq}ﰻv?F۷om5 8բvءjK.jkD @J\ ]gM6)O>W_gsYg-Z(Qn\ 5 @ /_^7ʏ~3 RV\qźk_Wκ뮛w±J` VH_(,Q![իW[ @ PtИ1cZnL_'KFh-j @H6_?~|lONwtRSS?fm_~m_|[]veʔ)"/Bm G;>ꫯ|'O'8!mYgm۶~GFP̙ǩ ={GR̙3>Y @ @`-0`@P[[nerиSk @ @ @ş<0Ͻ aqB+>bσ':se=vfE\ @ @8p`:;wtV @ @@QOK/eu7? $@ @!_d?T ;w\[t$g @ Pz6Ժ뮛\7n뭷N.4û;pQGr-IH)3f%pO2r" .D"W_}gx| '#şH:ujN >묳NTR83}r]v9㢩Ν;GE}4\7pCR/>DR= @ @+_٬J;>##@ @!kwuYg>+!58!f7n\&|W-\Vrܹw}wr6۬q\d'DA$Ӆ8R!ҩ pצ'>,:z72#zO9LO;H"J!5klWOl(_a @ @+*9?|tIڵ[o=f̘̭۷ϭBm4[ISqDΝ˼Aa2wyoEɃ}ĉӇD$2e]oN޳?8 @ @ #X" \) @_~y9\s5?x) 6,N3}'Z|WI:2Fʛ؆!`V!FRmZ~: Y;A}ꩧb?8b*˕~u vaW_}IbÇU= @ @ @\ oɓ'VX޽{nzAm#;_TXpaL31䀟'rKZl9_k.l=u-[+^^y啤~7L..Ĩbl:ǏOWѣG"=>#]  |LS[иZn"駟qci @ @ @Xm՞})Sٳ"v'|2_~<:} D$;!ᆲ|8L!y!?"O"ij뭷^rYx!vȪ|뭷ưto}sgjj-맫5Jy*lF*yI @ @ @pXׯ_vkM$Y;عs$I9SHk?ΪPed'^sͺv 'P ??|I'm;G$\Nhg  @ @ @ @6pa~58?ikw&w Q5kV=}$wQ'. &wy1kMx79HSs_s @ @ @T@Gdf'y58.#}3qÌ3 N0t/)ܭ[jԜv<رc{;w۷o{wI#TL} @ @ @?07;!k#bg̴p$;!}&lk7SN۶m^{#Xҥ?ĉxȺ{̙ϟ~]tQw֍ݢ  @ @ @ @@D:Bz:ᮻи:0:wI$㉍rV[m;,.&Mtǧzӗ.N7  @ @ @ @-Z4nܸd͛7_gut!0s8!>C_~eZ-w#(GjB~ NX`As|iӦ%^{--tG}W# #wAvB$HM裏zd'ԛ΃ @ @ @ PI'G*>Ϗ~gen?iߐǁz_|ԩ.HVYfI$;4 80<S$HnϞ:ujr]vu]7\zI£>ݻ2,\ֻp~ރ @ @ @ @L;1O?49-^~姟~:yתU`2n~Lкu䲶B0iҤgy&YHv5H?rgr I NDj;!vqd˄={/NH׏ ^|Id6K )4KӐV<[=錛ꙵ @ @ @NR߾{4=SN9{v&<{7# }[o$*538#}XC|a An͛cq[I]tફD28!2>$vř૯iIuX}Ǎ +$u]Poj|0n"GqH5ߜ  @ @ @T@n]냍ЦM5!(݆J+4k֬t^z~:R[969{x;pooQFrfϞ7d݊mbۃh*+k[]v]k꫏>(#<>f"# f L0avm'V @ @ @lX*aVdh}7(05!"Q#kz1" 2|'xbn3f&~ =Pm Ȟ{wqģ>/f&oK/mԄW)_+̜2y믿>%Q @ @ @*B ce0VXsr-k ÇbqRCDg[nI*mgxH "u_~y+d18!6os".k&kZYNm~-ӓ/")+ @ @ @ Py5ZaItw_hQ4xΝ;O6-СC;uTwSO1 ovlP1?ӧOm-=ܳ>{wFfCdT|嗱C<7<Pv0lذ6?؉aΜ9ԚkşPo߾q  @ @ @T@S7@#G!>f.Xj-Z]:١I5H @ @ @+p/\03^zm;FF @ @ @Tyd~G}tRV[@vB> @ @ @ @曧LԩӰa( ;@( @ @ @ @f̘q9$sLKZ}] @ @ @ PӧO_馛v_9r[oh׮/~d߬e'S @ @ @ Pf:NO{K0 @ @ @ @}=SE@vB-0 @ @ @ @ GCy'd;u 8١. @ @ @ @j:w|gs]s57`^z߿jA2q , @ @ @T@U;1';[o @ @ @ @d'T;7c @ @ @ P\  @ @ @> ͘ @ @ @W@vBq˹֭['O @ @ @#^L+f&Rd E/ ~IY @ @ @H +ofTf-*NOzѣGu]4hPL @ @ @C`ر?|)lvuTs@! QR?SNυ @ @ @-PSSS3 8١xz"@ @ @ @) ;:߻Y @ @ @ @ N( @ @ @ @@u Nn @ @ @ @xg' @ @ @ P5 @ @ @(Y @ @ @T|fM @ @ @' ;xz"@ @ @ @) ;:߻Y @ @ @ @@Q>frQ.d'K0 @ @ @ P*6ϟG㏏r1 @ @ @JK cep5׌UB냥ns4-sFX_C] % @ @ @EeDW|FmT':wBN7LZxw @ @ @'^LVLͨ8\ ,Z(F @ @ @`\14" N(2 @ @ @ @@ NWn @ @ @ @ ; @ @ @ Pu0 @ @ @(" @ @ @T섪{&L @ @ @, ;#@ @ @ @U' ;^  @ @ @ @" N(2 @ @ @ @@ NWn @ @ @ @ ; @ @ @ Pu0 @ @ @(" @ @ @T섪{&L @ @ @, ;e]f͒ѧIP @ @ @H 3A)"qw={LFk'e @ @ @*O &^+QqZT>nܸ|pp@ @ @ @M _'|rVX[5q N(JjjȑSNeA @ @ @@ Gq  @ @ @^ ͜ @ @ @G@vBqB @ @ @W@vB{3'@ @ @ @Pg @ @ @ @P  @ @ @ @@qd'Y/ @ @ @ @zZT͜ @ @ @4Xo_`6{%uvmW$u}ƒ{饗zϕN(SúQ3&)+ @ @ @ Py5ZaʹQfiI 64҈섆U׳K&.'A @ @ @*F &.W}"tP#ٸ5@IDATݔzy @ @ @߲eFvFitP:H @ @ @ @\t;7裝hQ*Fd'λ0 @ @ @(c:))J %:  @ @ @U`vi装hJ @ @ @@˖- qG N)e'K1$ @ @ @(KJNvBi"@ @ @ @ݻw^=6(ZR~;F @ @ @e&p{ĕqBN$@ @ @ @-\SÆ +bYVP͠  @ @ @ @4V\qŝw޹ctR e  @ @ @F~4rAP.o8  @ @ @ @<b%kԯߎ KR,;a) @ @ @*Pe˖Æ [Exj)ʲ}- @ @ @ӰˀC]W @ @ @ @{իWDͨ_`2&;L_RvN^;v옔 @ @ @<`zft3: l6X՚-ZeH%(0a„7|ҤI+޻j  @ @ @F8qN;4y]>ݺukf?<曺gݢEX]qVwe',맟~Gڵ+j:#@ @ @ @>8eʔ={Z~wnv]:١^bhxz"@ @ @ be_~:}:HWwB鿣ԩSKk@FC @ @ @@ 4YU V]u:YCO>iٲes;_  @ @ @ @߿n5&:5p @ @ @4H۠Ka %B  @ @ @*HO>z;ݼ*/(;ީ @ @ @ @@ ԶABmz ٢E5-UԩS+fH @ @ @b ϻv7ߤjѢŤIV\qtNkj @ @ @ "avGD'5!.;!_ @ @ @ @rqȍ4r%֜J셔pP  @ @ @4rj|I˖-o  @ @ @[ dQԄ+|_=nܸWU @ @ @2^x`cQrc_N(TBÛ0ak0`ĉ%42C!@ @ @ @bM0VVWc{}իW<j#Pmo+'MO<믯C$@ @ @ @bM0VcJk%?`f˄*8!^wF9}d_|ERV @ @ @ @kʛi1g4lذm?i%;D^a @ @ @ @@ ⊗\rIoz @ @ @ @&8C2hRvB$C$@ @ @ @e- ;_ @ @ @ @2P/  @ @ @ @@Y N(g @ @ @ @ d'K2D @ @ @ P< @ @ @( e  @ @ @섲~}O @ @ @@@vB$C$@ @ @ @e- ;_ @ @ @ @2P/  @ @ @ @@Y N(g @ @ @ @ d'K2D @ @ @ Pu[NK @ @ @#^L+f&Rd E/ ~IY @ @ @H +ofTf󀻚𱬢E"  VĎUTtVQXײ*T eQQQYV?Km7>?L&&̌3' 裏v}M7m9H @ @ @*>|#4LaPUHB$5_Ol@ @ @ 8B@ N:[B:iV9aMn#Ewu*r!d@ @ @ @YׂO?k׮}Ͳuj};ynjo:vX?O @ @ @h>wwͧE!@tBc87^f̘B2 @ @ @@ F BLgw @ @ @ VGV @ @ @ 4 _nC 5jӛRkz駿[  @ /_|ԩS۶mK=M/ A@hNG2 F'M@>0AH}b[ :w"V" @ @ @ & p '\yM  y :!:jB.]M%M@ @ @ @xufκ)S 8pĉvA СC>}k./;@XY @ @ @ \v۔V+oF5֫Fgmv%@ @ @ @60btڴi/vڕڡNgsl6 @ @ @!0<3M6nitgbE,J`]t:ujR @ @ @+nܜSL8pĉ킖@C}i׮]l_D'ĀԹ8t޽{P'>6 @ @ @'гg!CXo&ZJ`vKr,=Yg=z鮙_W^ydƼlU6vgo'ԩӚk,E`"LW-Dу0YYRQ5#lzвzfdl}КHe`*|lLZ LSucl眃̩!z0' e*wl!찹$T&%z-[k:(_2>LB:ͽ6z0 %;p_jsVbէmZk%fO}EK8гa[zІ^Hc=^r̗V{̊d^Ѓyj`V$N+6l+X2 @ @ @ @LPM@ @ @ @D',A @ @ @ ` && @ @ @ @ @ @ @ @0ATi @ @ @  r @ @ @  @t @ @ @ @@@脀9@ @ @ @L :Uڄ @ @ @ @ @tB @ @ @ @&`*mB @ @ @  :!`A @ @ @ f7h+iWKj:לҾ_,/n(k$ReN>hzrUo4wGmcO1~5_XJd9d,5*Ыp*3b- cG?dc>O6 >OÑgC|,iVkYvXo4)+ui{2 h'cH`ZmoBiOK<<8y|VοQ^L.=Nv߲R vշj6Ӻ?e?Hd-d dٚI̘!%NDu_Kz;]~E ɗEkMk++wMז65VtX Nڃz./,t\BZXauL3NŚFTkQ^[r|m'=%]E?\~3LF갈ll챥Ol3!5zGK 2vwKrKKIdUaW+z1yyLR]COereuJfVdxfb>O&my2XI# 'pY*9V^6<1tϲǓ1$?\5Qn &ڬIT cdL  sd2h'pgɤh'R`U Vy2.x2fd–@ o'ާN}SLZ+K5oHG/R9;~ȱD*8(- šr@qj\)HwM]7YS#ȡ˻VtrrAXx5uf࢖[܋Np4|Xֈ:w ,O_|t :'kZB|zQtkhYg_iW{Dџ o{XV]NUn1 'BeNAz,yR I)±dϓF>O~*9V~2<)gYɘ;hu1QQ`M\Qfd.00'@ =le'^Lz~2y2 ʓ1tIǓ1$0vbL1@@ | #,Hɺ8媖L>w<4!f֤H+dSX+H.1r%B>t;Xtnx6&$L\w,S=/cMYxƵX,٘'ּq~RЄ}ˉr?c,I@;e 6hl[饷eJ&Tes^L)'Ljo0}&IN~a$=/ٺw'Zn%S8t͉gIWo9U@ u#=\sR>y Uuy,0: Ċ8o߲^4v'/&h%%k))ckvGL2RJsz-ϓRY7>$'|4y|XhϓRv>OzצϓFU>{=!%O4GEh$ZJ1aU %I d Ǔ1$POƜ@7cBU Vy2.x2IFk0NSH.K,^Y)HKJs]ø]:(b{1H[ ug^. ƞQ,_+/lՔ Z“qhPq6zݧ%&SxWQ-p2xPSD~t:<: Eյ,w U"oc{+ʒ\۷+>OJ~geՎ`LJytI#cϓR>OJډ<V>P+mϓR>O<&YVy2&<%LXhB6)1y2 ,f.i'cBU ex2Zz2&Zd.*O%OƐ']^LIc(OE2(m}1qY0^Ҕz+@A -w[Uz"=)-N%\u9c$3X͇߉:?VN?RK_o-W:;rcgA}YB^ܩonhxU:Nr)AMrjhWO &Йa7.(n͜r_~ch;Z+ɮ'ʸ/ZV=3ꑚ,Lys^Wz"O[']pS^4bO[/vO>kYwre22? lSw^$h޻#MS~jYuލ651^ܾy2]U;:$}-y pd"f'6/ύDcDW%;ҏeUQte.߉jPt+h| fK껃eΊ&ID68/[y LMӿ5?\o>[6['TA槿 M5ef}۶xVuȄL}N/Vds^0 PuQN'+Yafnm>O-yX1!*DŽ@| d(pd+6=*OƄ@=P=**z*5!DUTX1y2 SW5ޓ1$OƐ@{)dny+3ҡ t/ت#L/}M-scYՔJo}в'A#V4t&<P.4`Ip3c/tCǓp1iq$>uó"scbqNO- 5%IU&~"A#|˓=T;ufBZsE9poBqXnyPtV?rPЄBC(qQ=sEJ߲Lo;}dfN]I< V`C+/DŽ@|d.QZ>Omyhce'cBhgnM\Qfd.00'cH= Vy2&˪yӞ Vy2 ʓ1tIǓ1$P;{<*@͗fMoI^l[@z3:s)urUab<*Bw۠6~bfBPJ>(:/Rf_*Ocl~9@NVzIf{%z *r`n @#KW䪛L>ҧgu=6 id`9o\v#Jb{t ?-T6sf(ME/* +y\J6)f{ >O yb@r\)o1qϲʓ1!r,1!Du#2aUOoL,G;7ZhC%ˍ>1!*OƄ@ޘ[ɘXD6"f-β`d_H;n"^ђQ9oDWH[/O\WUEz!G]cu뺯^uGV`/#;У4IZeH-`41O_v??a7I!촩Բmɋ|̵dżΫ;E~ǞK>r2WuEFG]SElLvUΌSq"3IĆxe|ݠws<]r|)f{ >O yb@r\)o1qϲʓ1!r,1!Du#2aUOoL,G;7ZhC妟ޘh'cBUOoL\ҭdL,>(Nȭ^ }F4 $d3Rktƍ($;AÄ>txRa#"[d /d"×D[RiR(:aEj:DXЙ)n9nn:ɏ7K%GW$vO4ȼ+"1?L>9\V].X6BكqJoG'[]5tj'$I>Y-uzY.;>vmϓ̬ɰ#5B'[< ,yhhϓ@ }lOmyLܳdL,n%߄&h3j&ʓ1!ɘh'cBU %ђ dLʓ\mKU OO!bNi?FF*֯]#6 v>{ ]ߏN_hAڜE`3尩xtBaqe:T8}tہ8xOP-qku3Ћ̬51A?϶W[Tw\\ zix3yo:9TxÃzO}d+B'[Ňh< Pm>{U 3.ã)܄@m&R cdL,&'cH= Vy2&Jɘh'@<t< g%Lӟr Ѡ>q`w Eo򤯺R7Y[v&U#,Ol];'77T6*z`$I=pBxɮIf~>0)vc)x2姖}5a MggH9MٱJ'Rŷ2K)vwn++wjq#"/-<\rlmw`Oyb@lX8`>O1C>O,<wM%&hnJ& 1>1$OƄ@ޘ;D-6!x2 Mt<;(NhhuWɸ/ٻn,&y w kע*/DŃN߄<@@DZ_Mǩr-V8:!bheue/]^rW9 KqU RTk4FcdۍSi~ҫlyK?,W+C<4~veeݚj (g&Cyq$tǣ^wd|?›wJus-iL9=b3X~G}~t>Ov'Ya8鹕\Om[o32Pt:M^#.eh媓E7G|0>-ٝ)`tm'ԅŽOnˊxݪ*|8^y-ҭ[-4bŎ-F~ ͬ`?y_G\O<`}ǭ[403 |T3i |&d* 0ȷMY7LMM]dtMU?*0m'DOo* tѓ'S$' u `21Dɓ}5}k~CG+,F'Ȩl n]Ypy}P^_r|[~Œ~~38t^g \sJ|L GI~+r9\i8T2doo} "G!ל Dv`NNGa/#.7fNx4r?]^d|X+-D'S#5۷bS/+V'|{y֘Myœy4,XANfChh`{^^ĉEBVOxG;"X"YqM 8ԋؠIH8sft*[xR+DղСC' EFϵw?I8)ϓ7xmg¢ w7hWtHh٦<7ތ#4,r9Up3`%J&& Βlk RXT8_w:Kzp:HhщHv./;F8zɧ3IaQ|&lHt,YBEr_# z;m*#{l)];K,weeY Z8fzN}b5hw7?*9==3IaQ|&Wn1>OXT8_6fE p>+ k'C',*ϰ:2EuZ&VO+*ԉ1>O=XPV>OM< p8wrȓO`b5!06'P7mW<6uȓ+ Yy2v|UNx2idҟu_]d&!ȲTy~pygl&7;񲝱U%H 갆S2$ɷk_6mZ6'HҮ5u&Pm~BθVox9J.7L`@-T^{Wz?Fj_r E ^sŜ/A&zp6 ݚc1-i' ~(]9sӤmw[E{UX__&sM`}g{-]n5FlX,8$hMhypgyqs=x2ǟG"{^x+RRXXcMtB?hs}Se(/籿S< lϓ@|<`hY< lϓBZ<ܳd,I,” ٶiX'dbպLJ dr+=XϓF<3gUɭփR޳dR 25!DJnOr֦m'R`9ndr9Dd`L壢-d ,k'S9Xg U/{2)Vޜc'/] VWFDor9ӤF;bJ脉_GH,Eɗlxr.6͆vrc-Z]^%:)Xʯ~қ3(T Df2_rWr6hς XR _!zGXÑ F-F2M`qmGQ:LFW0uw CeXyiSunBZjQAtMc'K, |G%ϣ=3>σϓ(MϲܓI/0=d-hͺ!eL<-z^`Oc<-z^`I/7zŧ7/{21%+ ,  9wJ ~g! $]:N?B,ؗD'T`հU:ޙ_١ݯ|G5݂G'OT {_tvmU:E!&'l"K5A?h+{*ihq_j+$?: jF`uhD=t?e.^H'%Og8yEi籼yyRYݳdM4fr7ƴ'@kd%Cȴ'@;d(d'd%ڧ7Y ,>T[PRA`Xk sǏW,q\d :mWO:%28BC>E:uͤ;>և-w.Gj~f+Y-:KY]vАi[p$4)y_B+t=N]5Oؓ<"ȘO#Q2]x,8.[*vTj|p_i籼yyR޳d2M4f2ڧ7Y shړPOo2X`ݓJOoX?1tIǓ1$/2p 9TEÿc_:E!}5Y2KTuXW4@/!OGBtȄ'Ju*Fn9;w ?bȈqV^&hTIDAT+#>/z]tFNJyc2ei^d©Jy '%,}s$|G|X?Ā8cy9DgYd+0 jCۚhͺghOo2X7d Ш'@ d+'@;d(dU-4%OƐEFgF=3fȨJe .oWFUNqA݃<\|qQg}Iqk\OM *eFk*]%Gɯ 9;'XynsZ`gK+/u kS,AGEi?B:M~50Z=.Xg}nh8B!><-rd] ߴly $@9|y{ I.%<#r|<߳ld2Xr,4!Du# d+§7 ГV)g5?\` ߧ7 ГVv=Oo ]d ,>)Nȳ|V>c89*m7w3<矢i0ѯ~}7?K&\Lϡ IBTK,ZŷF' vVNO?kM_P$:_R-ZVOO$N+]JfM_*X-ZmVH|QٶO27ξ M?q˦~ֽb El,FV-qڋZċ^!uXzt~}J' j]S܉VOoh'@=Sl{zAOoh'@>{X|R Dֶ2O_-zuDR=#aAU %3XGNLצ2PTN#K|9>13bg5朣y5UKY9_r zy|}~}{唵w=WQm=?lȢ[ +/+ VQ@LsŎmn}XNsTF<<}S$|yJbɥQ=*OƄ>ʱĄ@m֍(scl{zQ0sy2 Ԏ [Oo2h'@>{X|R O釹$ rb~53?KK82V7h\& #}FH3.48kʵUK3e[mEr &~uܟ}}dbcy7:_tg5Sc]Gc{޷{ִcH1\urhQt}"|(їu$}7-N cTɆ]?+sd2W􅮾lGk&) ~:h`u凩ޯ4|nԠ^}^H'qeϲVx6<`\ 춅76ƗLJP408 ! .9a?YzZA:vFKx:A}\6(Wk27S`Y5cZ+PlYs[3 VW>9X0ު^?tXX޶:ާʏ3o"uZ՜.qy݇aI'}zcBU V=1wIē1'0|NȹtNKcߌm6G 67OO[Lt}ʼn@ȱ9}vh: 4~ ;']sw#5#~USrUkQ8vy#(iyvʵlY?@v ^4pgFl߷u՚v~a((}ޯrv#9pUXǖr3-̘!ڷU> XRt桩\#+d1 ۋy*>Oe> [S5>O92 . Xo1zϲ1*'Eݙh͒')4g%Oo Lu ē1'P{dž7FG`Oo ē1'Ъ7.6x2Đ@$ 858kpϭ>W׭ >.<|wDs[6v >Cmܒ54lyrͩ5lBUth#aZ<=P6^#au+m;ܖt^e5#ICZcጎpN12gT ;mVkKQCd{p僇]d1 z5]eer2wJ}]7y{/\2j M#!_}D#:^"uqrE.NmUv{tçn+OrCkY|bO%y|BGypדi|MY7%ƨgQ6x2F:"ߧ7 md 鍹KzA6'L`:.}: g_ {%(Ց3I{СCٳ!CSw>*cįE?b֨i<% 6oȿ^Qɷ?ȷSme%[]s%YdASVn(~QG]펟$GGyL 7֋/rz `-~'__duE{^Z 4> s_=JurJ=J_H!#%&s2VgWQy& rb=lm >XyR<}<5Ჭ2>O=b}ON~dX{l\v'Iv'_Ƕ 53^Zɘ&}0 =-G76>B_85;~!":HF6wд[y?4VFlj֤]l۬хS5i|`6||i=5|oO&>2dʀqOƥj4]-d lX#Aُ& @ @ @ A!@ @ @ @ @ @ @ @ȃ yPg @ @ @ Dh @ @ @ A2!#rr9ʮ"@tC]t)V[d9 =z B2! YD | kj@W]  P@Wݐ @JwS!pde ! \4C4eƌ$0~xM:5m۶Gرc< `aÞ}-b2#i@]f[s*i=FZA׬6k櫋|;CPЄngϞP@@ ScS@pA '}.O iǎ۹sڋQl( #J tfB`Q@pAG:3Np0 @ @ @ (Y!@ @ @ @p vB @ @ @\%@t= @ @ @ WJOa' @ @ @ @UD's @ @ @ @p vB @ @ @\%@t= @ @ @ W?ue/-IENDB`actor-framework-0.16.3/doc/png/kill_proxy_instance.png000066400000000000000000006471711341123343400230410ustar00rootroot00000000000000PNG  IHDR )sRGB pHYs.#.#x?viTXtXML:com.adobe.xmp 5 2 1 2@IDATxxTq"ܥ@wKP ur )]Cp$ݳߴf ?OΜ93{dߝh4u       Ml#30        |        yN0/#       |        yN0/#       |        yN0/#       |        yN0/#       |        yN0/#       cزM߷c#3;-@@@@@@@@4MNҺT1=4;&LtD@@@@@@@بMvᖉ/uprh&vlmcn=6#@@@@@@@@\N8r-6_]Cz܄+qBz섪2       R ]x;Ԡ03 #=%d W#V-8vr)3Jb@@@@@@@:g'k9ĸKy|ҢB8ZMagg'k@@@@@@@@jQϾkªm.}깰{d@@@@@@@Q_`߁ {Q.S        `u V3.Eb@@@@@@@:GKqL)?=-?%Y6p+FMi^rX-HOK;%ͽ^`d0H;ucVltMiG`&M ۾T"       P,.;!ExnSNX9&Ytc]+F]OqR`枓qyqY#?~#Ed0~FyI D"ٟyKj Ow:qmPa`T!       `6{<>uN> j"R!eyyQɫv,2"# yS1đ߻AiUtA@@@@@@@f,+;AhҬAHY؇ٲ0rjY,+޺87G^m;W"H9szŘ" -=u)t        6#`A';$&22/{.. NG deĪ6jl/L% |m^,Aoj>f6hTȿ\}ЂYU9"¯SH~zj DE~jMI~޺l[u[ً@@@@@@@#` y)QׄzPB[$ġ hK17fe9{xGoZ+6~|b05A[ڬ _[szB$        @0߽qeͤ^`PA7ɫ16Ȣcę-! +B 䥸=;Je@@@@@@@Z"`q ½03o:Kme=6nJ6E5پ(;KִUzJ-땖v-MۃWQVf҉H       @-0yei姦$:skƥp271~䑓nԧAqSv=KDZztyU+Xd(Yhբ, |;tQG\[!F@@@@@@@̞`zAYRυ}USy3vspqi/wqRmؠ(7]mVRPڱ&NwprRNRϟEっ{q^MfL\E@@@@@@@̞P!&CGL޸wءɧk;]8k}U6o Z6ٱY kN] u4W- b@@@@@@@exz{uVlV8xh2Z6OiYo*@@@@@@@INʾ:7_rgFFdQ☆֓fb{%W˫m&JEٕߥBQ       - XR~ iҒ "eA^8ϵŢm[:Q[ݱ03Z˪e'8{zɡDbSf5&Mؒf       ،f'TH qdCfTqĪ2;er{{j#\]ZM#       @YxHGPgldȆMkg@yÆj;AINI c@@@@@@@0.` &knZrdCQVf̎zέچv'ϼSKNN!=d7ӳJ _r@@@@@@@j%f'DM W󖎮e=qd8A^;8bյc@6to[u, Nὴ_+nTHc.!       `r{ZYQR߳iNsˢդ%q-H]}kZigg'2V 5l #B?x#?5Y6h3u @@@@@@@=o$_`dsagO':xxN~/-ppv֩)޲^['ppqŲ79WBhJK mzUשѶ\ě>JݹA_'!k{'"       GNZu+71ZFouS-ؙ`C{;&FnvDvh$Zn-_!k51Ol9ijIӒgO?}]}gqn@YC       @WkB1I  (Vv2s /v=e&F_QUZRyެUJmU))ֽdg?nt)#       P; _pnjهΙ &69ĵ5?- y)ƅ 'Jj>5       Gg'8nޠ[6n:0S* L]bN6uˁ}t ĵ0@[)%}DA7i%@@@@@@@l^OvQd̅Em Rh=eȯd4Yq1/: l߹GYh4ЃV'ȽP z jܨπc'K=       Gv2c~ֲT&#ߠ Y)       +pOv.o P]       @l$;H1       XN}I~Jۧʹn,+wG@@@@@@@)` G>xS.=9խ+        pc4͍A%zz€}]'1>710+Ϳ_7ξJi&r\Nuoh`&6       0 허s&[ZMlX-fld^y꼨tO/Y.        P3vb)?5e^XSE;:x':1jY^';f:PD@@@@@@@pvBĚ|rspz^Z``|o;ff7SLl?Մ}UQNvVzli3d>       TNb';iwdf%%f\xXh:͠))>{yI?[lgoop(mejjON^-ZiMfFnd!rndBz y.L@@@@@@@/w-vn~~BjG#qrɘbs&Ux4hҴɰQ;UmgX&&wtsddT૷+^mC%PPP RcYIf(z3Makr@ zWV} L[ P >5,(C}j\K2eޕUʭHs?/VqνjMbGWҿeK"@DnXI vn,ǭ.2i6/*K^F >k~3>:ݦ#F7ЯgZ|72/_“]{twmgo`s?;)ooC        "`-su꙱;N_+tsrRCAZ);T^je{ow2\cv=He1GNMO҉#;w-.38       ؼ@9  {(PD]QjǫGEsĥ%%J:3k;}'tŔ3W(ʲC p_Y G@@@@@@@9!VE>&J%Y1Qb#~ _lsͼӿK7Y#+7T k\귝5AHN!驉$߿;?5Yۦ$?oS6ߺ8`\^,^ xS1㵱G=       (PNvf=T"zVɊI2;UYӦ)ʹmӎ~6w}'b|1f|4^}nܲ 6'>l?m 0t=7-qĕ?]?r N2':#        `u5P 6 Pޭ}_hv)HW'8ZF;S_+FyUy5fۦN?x%:-Rtj*W,ϯ\Gz!       `d'4_]8A-V._=zH۰W_hX$( x;OF{qAC.2מvҿSnUu2EjqIaA@@@@@@@(d%]޽(7jK#q_󒯽I F%7_[|%'{Ǖ=;3"/q)|['TڬɭRkL=45%@@@@@@@rpq-)$Upzn=Y#{ @mYŗ6+.6vm/ϓ7J:zzmK}yIn&LUk@@@@@@@@@_G77}Nq޵G4^seG6ܫoHѸI;n]g.w} uwˢ,G\1       %PNvyރj缤ӋPk*l)$G P)WjRΜ6ջ$L9URXC`zvBIQ     / ~.h4A@@@k(d!=zM = w͚z1 fKkW} h8\ʱC#;UA&N?W.EYq1-ZiǏ]O6'e=Xn /ɸt1="6v@Z% ޏY=演dCuX"_v2'! -Nw}vq] ֈ P NG$&Ƌ=4 nܳi֓g ,,@lL >Y~s_MivWVO9a6O/9/^4wFMj̦7E3]ױ޷8/7߫D3 '۷?Um!GQw_]/S==e@H=[/FZ.~% S3.⹟m᧻J $65ᕲ4@N~+>C))OIw?069ߋoӌ" +pm+)%?#^{]uٺ 4 X@';43U%8j∔aj8v֕f6.>P8׫WM;9}*㲂vK~Cs( WBȢ 7SȣO , %b255Ag9.Lt  6) >7cbQ @5~a6޼QbwlѿD  (pbᇿ짟‚_}C-ԹD@"zz?_OL:dP]O?$>nd)gN|~BΕ8sܲ dYq쏋N|s+6?ŵm/j^ϾTεLO&~ߵw׹i|+e3MfuOV  "`jvX[655zzeFkJEvx>@WT9q;,߹E6 jު0;+;.F ;_ V-{@lv_g]w/Qpo'/~(P "7_d(NGϾȵ QG77O=ts؄C8mywߨr@Q8//r_|xak?sF@t^K:w!>Ӷj9~xofȼvىs|~]jcb@HG 2=f-dW[,HK^^?- @@k0dzķ榏O0T쏝}}lX/2H9ە|Nja;EԈF-ZSW1 '<|~{Yn7:Bq2ŕL|uU25A֋s_є攵kD * v]r}/{ݬlgV⑃ֺ D)ltR%GB9~eY#Ym>1 . >&a /a/U<"]!F@+XvXbOP7)KujҌ[ ySO/S͠>ٷⰆk;s/t;HK3q.іfb7s qfD=of{WC}Tk_98;ˢN EUV&U @R'V2pǣ}NԦ5~BV" Nn']^[륞=- XUԟ-nFFx0u]qHTt  `Q8Ah{^_Q]GnbB^ռ$s8RբU1 v7%oL;؟ʹۢ6I̾':' l)jBldq)měӶN =aubܫ "o^PF};fZ,+_RNEb@E JOWY

ڔy#9E@@ZN'e,),L+STefs[87('[g(M}P:R'A'lkfd5]j}mX$kL\L p>;!7)Z>p@777񷈫eLZ`2|XW?Az?AX Ԥߢ5m{4c63ϩ]z<`O<(> M`4X%%%&; yo9Rl [2Y5+o nO E ;V=nZ nn&[mYQ= .ܻwY-b@x6 ETm rhpcU?UzKVܯCo#ԫm J|WХ&Ims柠9*1fia,?!`%bOy\E-)Te6C_N7J;9zΈD^P'۫@][El@`SSc SƦ`-EOIl`큺(5uRcـԧ>mӧ.JM[Rc O/3:r61)':Վw7-NNjecqrfXřR*KP}#uQjlԸ&`K7rtu߶ONn~ Ա_Z'wJרOM+=uTƖ6JG]Wz@:ְԸa۩RcݱGV5< n~yZ{uEYjH\^uW   V-Ps7}gOj%1 $аWô+*)*MLӋ&sWqLy~_@@:;:M YRt#;A F@@U@ќ[Ï Ԅ6n9R2o@ <7i;)L|SQ{e@I<*09;AdNP5@@@+I_=mM.Alp=qAg> 1 -аgQ,w˼/ѲH X Vls N(H7qٗcՖ>~j@@@luP׸?3[ y{N # P vrᚒCe@ 1$ݝyȵe_ `N0U@@@ġ{_xj[S<]z|v9[۱RC\%b@@2NR[f%}3"/jWٴyO8Wičg{nEb@@8-ϰʹڧ ƅI'KG1    Gx9a{'q6 A@lU@ @|dĕ&T[7P  `Ȗg(t+WxaO2.+}䟫vMG'   $9N o<&kZsE@Rޭ۪VF⤓>%`#@@  ;BD-SIcnH5YG?Z ktY7,   X@~ZPζۣn=y,  `>m; +XV쏋UנdI@9,L]]~8?_qIQ{fgFEȚ-c@@@+Jw@IDATXH;aqvǭhL@x5otaCc_$f-OurwE@@*bL҆۱kJ zb?OG77u%L޼VV8@@@W*'d %kL \ؘf X@ߎٶQSRҞ<ui0=-@'N/Z(sˏůSW7/^?4%ߛM5  U`'۾?r9WxAY Dqn=@@@ܤEYV0Q z=R9;,dQ<]fu߰OF]Ͽz嶤   e d\hcV Ԙzhm=5C.D@,Jzz2oz1x y6\B@@pUϐ! PMNsavn{ufoU@@8N[@^SH>}ߦ]8}96/{Fͽl;.j F$ճt@[Ifm & 8{z!<]ےN䧦/'7wVm[nF {G!  `d'X胩uf֎    G˻," @dY5       5'@vBYs'@@@@@@@j j@@@@@@@jN섚N       Njsg       Ԝ 5g͝@@@@@@@d'Ϊ@@@@@@@9jΚ;!       P;NϝU#       Psd'Ԝ5wB@@@@@@@v P;;F@@@@@@@N9k       @ ;v>wV       @ Ps @@@@@@@)`hjʫ}QQQK.=ydaaa~cܿ\\7nܯ_?z+9zhDDv-[޽.id'h-Oy˒z^-2C7h% Z1enj05bL@@@@@@*m ,޺aDZ&,!'0gjav% %g]k4A@@@@@j /ٹi MI[]Z۪Kcm*‚oyĪd@@@@@@/@v -K eK&gﻜ;7zeik|y'OI7_v$@&f?ڸُܱAPsX@|߿[`]sf      %` ORϟrlӮ-?rpv522+FSzzBA 4lR|MȻ89^F      bqw_)WS n: ]]ew0@A~^R|[=oN{Ԅ/߆[Y8$ =<7 nܼ\5.p`c76-;5je   ض@aaaffV-777===;;ݽ_8[F%wrr[ЇgLCl jbG!  U XQVZ]/ɉX\֠{rBh36 ΃qST]mN}_i6;;vSiů<$W*ޙ71mM\Թ_r:u4UڵԻЉ#&jG/^LM4qښ?=3SEбsy[ER¦ CvD?17>dVAR|~}pˎ7OG^۩IW/1U,ֿ:r};ү5vtY޾ o{5(|O\{O~yŗ5pkn  B`Ν:}mTKK}C[?dl N>S9x` *EFÇ/]$Pmě i!f BCCcbbD^BQQzIĮ]t Թdu…hu.~~~m|`FFF:tܹB  V*@vE?K :F߯ej<c_Umкco+Nر,u9 b~h4.yK|D+-uܱBlu "hֺ6;A$ ԣf2.).^S!&+uWaS|`~~w{{65mIHXgt*EQ+pCoA`km`]g'3֙Ԉb;~_Co:T1jJ>ONv?@@ ={V}?[{?`3gg' 0@?;Ae.ކYN߻w;?6lPhiko!&~9% |}}{ٶm[y 11?/A_}vڿ}Uiii;v숋өE+H8yaڴi߀@@ ,9^ٻK_!#Ԣn@m2".hFm^Wn1TH !қ70o8B@c˩{s؅S~;'' z/ f RTX3Bwѩ7Rߢ He.o=CwOu*e17;.FϒmdeQ3{Z"Ϯ}9˜ޕE@@UnV\o͜9So9$VX`bM6ڷ7v߹snݪa.'Ncǎ5" V\_(ظq[$F@@[Z.+ >~-[ƠCehY$@ٙi?vkFUg٧}Nk[SFOg5Q'y&: |bBR#]^z -ػM/~qNqq ?i-r2όN6puN^ç6y1qP濪6GU}բ68 ͪf_D_Z#@@%v]U'%%>|xj*Nj0?aA=~zbݻwWb✋5kֈMAdElAA@@ ;rb^9?26Q&A\^QoC/-6J\?Sz^IMr}/å3QF=۷k[_3tD䄘]tt4Ueσ={h.ǟ>}ZTW   κ0'XW~zz~ vYW7P^rSNPl(TF`a}ϨywwZg=/u~L;x.i|=셰l[z]܈oյ_XgՎ?%~ٟ>_RrQn*iSиykM\w<+'%h.W^{{Qaj.Ium϶S9qRBHû7g_(S%'%9)WӖhء/Qn$cER@@@hӦwJć5k(U&{-_SUn*l ^dc ^233SSNwwD9Bim۶:xx\]-G ݻaÆ>>>qFIe H@@IjKOHj*{03}v/NO?,6_}~[Jyݒz#O/M\x1;.Js3#A?^ᩉ^>aٚ[2PUbեnn9Y .cD=*@@pnookЁ;ʖzه%99YCkNuM```LLL~#DMOϿ~Ȑ 4cJ4Ae̞={nڴIsU2 qd6xy*YYY1"  sTs&Bw\rK&nVdO}2e c 5 _2]g}|(KvczxfK$/67m )ٶVQwǕȍw-+/$V'D՛z6]4#'$HQQo:M_9A#,&Tu J*_:k2GR@@@5kfd~f]6T4rrr4UgϞ={v֭7o.&S+:wonrиqc:] OVN ۶mk $UB6Xhzb@@@i8١>ʋ X ˟ijY xksg9>ˆ楎atd_37dB=>{Ԅ qG{\=ITGD m\1ؠ"ux*]nEjX9^ԃK}fv>!+#ϪW14TG(#  s ȋy3 \åE6ؾ} > qqq]} ""}8A?A$%~ u`nCAI v[   U;*67IYަ(I>wCZ.r6P@>MnިC""ۚٲm5m䵷&bXgaL;\`ڨ^K&IMӧi" 1-xu u) [6&%::V˦չS_c8[4hyǕ*@@ em`Zz[j ̤_M4iժU-zox͛ 3 ,.!SKC"((H9h*P& U@@pN'TvBA g_\U3^O9PQpИg+ [X!fe_?ڰfw?qPSwZu,;胒nZJc+Qգ\Pj9㯣X{/FC@@+P[2aޕW^idAa͚53fXjaNC^^_(Fx2@OOrNJR)   r].roRo-N(RO e骏#ԭTlg)>J~Ar# fa0rèIO#JY"Fy@/G&7uL9pbfÜM+VAIEev]buJ(͔BNvR~)   c XV(**Gr9s8qB3yÔM  u/w%  C $%%=Cr';rnV*; =»f.w ;  6nu6vfnn埌eOzoepinq{64P7'+cɼR.**sJ|A~kx}b nY4AV p@[L4>pL߀  G@6 ύ{ MO>'N 7~zً/>}ReSvf &^Oܚ.T@@p s~cZS[KxzfeJt/SٰwZrEB?i=XZ3qGŔmm f{5?Z9Y 8ofO3۹pu1#'.ߗ\3Q ujiH@@[BkF%|M7uB9{)+#$c O4+|ӟYY\5U33mU  8̙3e O'g4xyYa@] 3],\jo1y9eJ{@) _/qudkLn_;C4kٱiWH}9Y^>\Ky U@@7s)ݦrwޒ/"ȗ|}uK߸M6Z-#O~d'XK@@ݽ{L^t9*:.U3ܙS?6*ՈC}|*, ye&> D KOlٙGo_w`E#1<>; w}KL]HaYvVS#'jEpxq޾_iL@@j󂂂(,="ׯ}Ws=5B~5jTZK~~~JY);wN)W {'3dC J@@Q_~yr&Cvl0r[ԣsjX.H޵C9:L M[.CGEsxluŮYUnvAvFS&m;y:iyꈩܮK>hx)e]U|+ԑFl%k4˛+ U@@jѧ/pT/F>)BnƎ{mIւN7Jv`pb{"G1XE@@y)Sk38١F?ͦC O=os[WJ.wi6VP 2CV8]%uJZUX՛]]e|9o?kȆMxK5LvY|;=Tƕ,'(D0<|Οvs]u#c,JZ>4[:)# U@@&qqqr~(yyo"6l0 9,000&&槟~tqWԸqcU&&&9M4_ȉ'6oE* 7pD7}n ھ}"  /VHY"cƌQ"N_;Q thuø_N3*nݱ:P?ՋEE;&útpz ,7>{N]/yݯ4`.}^Rf\1uTJ,׏#WO Y4W'֧.PM<#-gƤ?K L{~-:%>~ZsUw'~i&Ԕ3n)NjDU^V:HU3M }ԨIK3  0|-DFFjJ=`vvEj'l4myV\|@dˁRJY))e__߆ =[F9aҥ7|7(-MիWjڵS";w>~R5d ,=zfgyd˖-KIIѴ  ̜9SԪNvqըs#EyyR..,\yČ_trUtmU)(?]Wx-Μڹe3^{Gj?b~}"=M^{tܩڷ}}nv'ؾg>skyo/H>.<~]OOj]3 E۱i&wXWr2䤍94w  'ЬY39XbÆ q|9`Vok6P\*Qބ|rؐdlTj:S TٳT.\xtU?vw}OM[VT IQJ!==}[ndngΜٹsDjy<)   `E$%"qMЉr;>v,?:tO[,_vMV.Qڹ{Up8sS>,`pErҾ|G\n3M?}ŋ |Cq*,0Ni2z_=5#HuW}tikww+֓m~5iA`Cc7kgX=:PF@@g...\^lW\-8)oW\)> rȂʞ K~/u^%"9h0333%cڵ2$Fa L]ڶm9_~'O?8T}"  Lg.**ҬH"ꩧ4qgw5a{F=Bo?{xJGuѽ+Up>)Teڳ>A՗8  6//-ZXjy.o-oovtt$N[v&8qݻ%MA6dCdkꪫիg8 "y r2hENj8p<:h!!!p@@G`ZEYqG\csuD mo|Gvb†g?Nsð.UXG3܍ՏOSuxy׽Ota@]~,~41d/f7L38s-O6B'>4+/=ߡנf2d+% @Gy@QG4[:Sd{rWҰ>UmY]]'65{nlXG i4.zhoWBYqO]8L 8A  &__뮻N^qww1b1`ݮnڒ1jԨJl!. bptD:n喨(ˉ$`رeHʂ$.hN|0<,,L6o#' D@@qo`Z?sޤFrKk\xD̐i37_~)wm\t>ܑ[~w4maGp/|Á(ϣXQCASk\ovdžrfƻWm#o|(g3.w á`ȉJY]hܼm#@@@&Lh׮!H˖-A֭ VWvӖCƏߧOKV'G)9 (#ȁolڴ4,Ȗ n$ Nd -B~DرSnp @@)PPP0o<3sLR>O.e̔N&'6lTid@d7&/ƍ7|=]ߡc~{}'01^^Nz]~s֥"_س Re]FerQQ]b78ydWFZJFjraA`H¡S!fiX>~aadiL|荛t4hPE~xSM7}衇Lb p;@@@QQQ|||FFFvvP&cןSli Bbbٳg333嗛_KlBCC7n\3Ӆ:!!!+++77W)ܠAf͚Iz% W:uɓ2ɜIVtə7(#P@@@YeӬ`‚ $|~a̘18U=`Uνȹp,9kڧѾ@X8&W;{S.T:B @@(% 7DFF 9BvӖL%@ #WƻVvnnnW\hG#  0k֬ڐט#/veHvEhrt     @˗;e˖Ir9zNp'@\X]YK|:q1|;P߭PE@@@@@Q`Μ9r[36',C7 ;GRѻTʕ]>0@fKg/-5CjT@@@@@@GXӺ% 3 @ suA^nFZ~lUCgϴ@@@@@@vرg KKiߵkW ;b3NpħƜ@X_lׯ]g,|.:u<flՁ٥K37uK.%%%5cfkq͟?_߱c~8@@@@@@p\VT!!!9UNvp'<@@@@@@@j%K [ͪP@IDAT1e䚸J͉J @@@@@@@K8DkK       y睓&M*w93fXrr8ͱR}4@@@@@@@@LѣGyMuaݺuJvB˖-ǎENvpg @@@@@@@^ן#       d'83f       T @@@@@@@p~B@@@@@@@W       8 Y!       +@vBsw@@@@@@@_Ƭ@@@@@@@ ;z;       /@v?cV       @ W /ɀ.u\<ճ    @ۧYo޽;w RE@@@NܪFp݋rsL|BI.C@@@ hf'AM*   TH*UC篺wPCgɴ@@@@@@@j 7|ޝΰր       d'8S=jNve@@@@@@@ ;mNҹ5QNc/#      8 xKJJ$5!7%Ɂ@@@@@@@j wM8nr\x%L@@@@@@@x7ywW7޻~HMwOŸ]?@@@G ##% ݽDw髊333eؼ<uȞ~2`nnnvv}||*=@@@@B P;䬼wdFU#  Xn]QQ^zwۚR]vŋ0p@y ݻ`LL$"HP2nzqyAAA;wTM]~~m$/P}IM6ԩSxxɓ'>|)M]BBBZ] 4?0ʀ'NPORrڵkױcG3OS=e@@@ @.Xڑy+~; X  8MK3߯Nׯ>;A^kx d''7nܸsN83|7lPTMI۷oeJWppp[n\*pܹ 69s)}իj: TeWIؽ{    @NG8g"{@@@.6]U0 ?^^oiď?xY -"VX!m۶5Wdvٵkv\{f$᧟~痨3/_.@@@@Zq#Lru9o>.    MM0ͧxʕ=glo`yj2=<  SL}-Z$[ h2U!6(U     `-%iq.R~zf={A1@@@-grr֭[-oorR "A,]0@69h&.\,^Xrз-A"$A?@@@';TЮݷf [6=/ @@@c/e^ǎݻ'X0Bl NMMݾ}S4ŵiF`kԯ__$#!!AT={tE})>>ꈦ痛4   V ;*쟛ӝ< |+[_C{   ( #9ȉk֬QJ!--M$0c*9LA^k6L ֽ!y r^7 CffT;uԿw˿HLL!dɚ۶mС߲eRVBCC%aÆ>>>qFIeP   V1m8T~F{'Ae̻k̆ch@@@  2D j߾}߾}O׷JD6*ЏӠA}P">O74h:5Aڈ̨Q4AKAd9*B*Fx㍑ AWWװnAl6@@@@?v`qͺz03iVc&7ɺ3   @Mkرl ?AQW-"r~CkNuRPP @ 0@4Ue̞={nڴIsU24W*ӓ///%t_"   U ;~pެ# tSqW   P͚53}_? y.* K999rh~gΞ=u͛7Cԩ;wַWG 79hܸL.ӧO+'\~m۶5LMK*!U,ZH=1    `hAҎ#u贯mx?F@@bDdg}vVT~}1e헾d9@A`?ćA """ART1C$%IUcС>D$)Dl@@@ Va ŅXז]L~mu3E@@Iem`z[juXX$kP&#I$ҤIVZhB+m6o,gXiŚTe N?5 r588XE3#du2   T]C0xحCk##  (אIJ '#G-ŭYfƌV2i0ܮŋ`p7[BΉT ^JP2@@@ ֒8N~4yxX6   P#}^ѣG)3gΉ'47LYд*w:; @@@JpC%%)1,om[们{'ܮTrjY:B@@@aoa+4>}H¯hd/^^D^+pZM[6?4 5Y```LLO?~7\jbbѤI%8qb͚Kq 7>;AkUk"   U̝h0   N `2[E9AަUM[if.[$$$hJU^.) |}}[A K.gHիW1;wBqq ӕ l2&N@@@"p3 VA@@@pJf͚8p@+V9sQF=SpiPA-%biKApppRRfQ˗/߿֭X%$شi:b*7h@ٳ?H9??…{aH7lؐi,Ui#"""##e%b*Hj󣣣%B"U9Bb߾}酦%U@@@ ֒d@@@g]ދk)gא-8$ aʕrl {! [*{*ȎI5W7o.9ArffU֮]+cJblԥm۶c wIOܗ*   XQP   N+բE ˗'/ mvӖ$pڲlW{nIS̍SN& 0@6ЌpUWիWO4UeK G6СCM|5$$|"   @%N]@@@jA-\-kf6$1|p??ͶUVߠ[nѣGWbXIM===c r>nzex    TE섪@@@ ^wuG!G ofj5[DȦ C )K@:n喨|0vزA$eA4'>HXXl GN^%   UpJg"   P- 6mtȑB[l٧O jnrcccݛY׮]<)F)'2l۶-..̰eN f [2۷O]^^d$o^U"    Pu-0nܸ(Lq"   gdddggO}H/vM[Ϟ=,i _KdBCC7n\QtNHH͕87hРYfQO:uIdNNl aH΄$LȰ    ~F:uizhʔ)6Q¬@@@j|>22FOhrl] et*dw}4ߝܮwD@@@; p        VZY8       v ;N@@@@@@@Z+@vB},@@@@@@@; `'hn       @ ;>z       N4A@@@@@@@ Pk= G@@@@@@@Nd'        PkN#       `'m@@@@@@@d'G@@@@@@@ v6       Zjg       I;As@@@@@@@j ѳp@@@@@@@$nԎ۬ZjٲeN;vH?%       et0"@v& >j9@ǎ:u#̔9"      T';XM͚5V@@@@@@@p"0 b@@@@@@@'d=aÆ\rٲeVf b 9A?-:A@@@@@@عe"f^NS5cqf'\Ѧ}Osd       `Gvu(E%*         `lʐ         ;AA@@@@@@@l @v P@@@@@@@Td'0("       N*C"       JE@@@@@@@ 6@eH@@@@@@@P         6 ;        *T@@@@@@@@d'!@@@@@@@@@%@v "       @2$       NPaPD@@@@@@@`T;Y\Xhǻq+@@@@@@@*#^N> ,.Ҏ<"*E+ٰtQ}       `R3C%%%g.gXU%W[omP݆2       (Ո_[8kKз7s@@@@@@@Gq]N}foF\¬uO=n@@@@@@@/7x *\ܣ|鐑A-[6l~5wIIq_J.vrăF@@@@@@@N.yK{f>PZm깋:wS"4&Wk3wM?vt)7܆gjJK        T';T {nzh:%ޚNMPRiiČyJ0a꒒J@@@@@@@j ;Z+p];!:5F ]LCd>T)        P-d'T 7X\|~nuhJB՗b@@@@@@@ 7( CԗܼU       _W~zx*ث*ݩxEKu2        ;{`Jn*.(PBŋ'~IDxP@@@@@@@6v8uO>TUgzJ       "@vBW=HoZ{$*S0'g+KJӫ*U        T{uݘZ(;dWKn('׍ jݶ^撩z`UY qʘ.nC>?       @u P]o~oZYLH[q^s?ٕ!e5        =8ڕWp_ڹCt_1-hI@@@@@@@!@v=x;~4k,]0O4        6dW%%%>voRpEˠVm69vpڱE9Js?ud@@@@@@@/@vM;/>IMh1~T}N8/O=nްSݒ2       vd;Wv){w>#~inPF~R       @P-t'瀞v롖Ǫ#DӾrntM3       Skl{ޕ{Y"PstJK)#m'ޡ.߫T)        `on3N().RZvT쫾*;@@@@@@@ v2N[먮)kZ^8Lc.!       `kl-\3՝}BBU3eꫮ*e@@@@@@@,@v+p;ߐ0u -!uU       Y;Wv խSRW͔ߣ>Z]       N3xnWM;J \R5S8OUWϠ6J        ;%Q~0;[їwN(a*%.#+U        _W]{K鐙pǫ$ڡDԅEE{7u+A|T)        P-|Z-i@dnOW){b"*eTQnnڱ5GRƇu4TG(#       `o^;x߹~9MVrxS[ ; /D@@@@@@@`O%)Qc'D@@@@@@@vd'j#KBǻuDZ^/Y/AQmMfݽͷ*       d8[.uvw=xrⴣӎ?OuquRQxx1C"bK c@@@@@@@$@v 5wP6nݸ  8لY4 m, (T# lW(3o )Ue;9lܢ+spuu|+    U ;tG@@߿nQAy3\5!kffoo5 oO]p|_ "Zvkh}Ux:83_5;3UYomZ 䃻64‚捚 o*A77"?/MOH1Ûhަ~hxgІMzxE=?ER@@@ U;  8Βk T.#-YO8R{ݾk dĸ[(;%\,.z/}L |ūXk?ᩎغ\e刺ڨIo}yTP‰ksOfsx΋䢾}Dd6::qh+-,4L]՛w<&^FN )dnm-uW"@@@*!@vB%  ie #Zw͜aV:b~n'lZ=_M%%%...KDX +S/˻WGPZݛ5aHݯ|uL›Et'j)*̏;ExVFߗ#<_u[x1gR^>^īqyLME   PQ**F{@@@{=7iݠ_nvFSa5q}Uƥ?H}|--ef\ʸP?~A-eg^H> ~h㪿rFj|˦C6lV?DrsΝ>*o>fW4jzAewN٭pue+I :;4 PTTic=?UlG_=5};w;R ՘5 ;6.=gK뎽k   d'8c   $?H^ӴEa7ܫKdw/$_r\iwMm;_~G\5]sr©{5Tc]^3y}F{ N<|vߗ~򱛖giXgRr\|{v]bn{ݨJYږ?֩SܥMT0a&;atksۣLz7;Q(e0}Zw4)+vg'QXPi+eN‚|O/ @@@ {eE>rd (挊(fwU95ּ漺$E@ H0 0_6}3XV9k*M>{L @"v=8( gOy~bJ;Ӥ2Ͼ?}˞\T5hv Jg.?ibRQጀw_ûLCL-m*.?e>:s6iSvY`n!4oe';qw]qG<{[)>5!>_1[!FOC7n+$lzq)݊M;yW섕 ?m?p_)TN*kX/ovDhA톛5uԦiScS~'c # yXȕx퓹/!eW}, @W@vB}vVN @:"py7Hn7[ONH١=t8 Ly̏ߦ&~ދs1˖-M;$m0$x޾sf5lEp{LǴG O.㷟_ZDO?.B~қ/8.CQpY=F}_~?RԄ\}",??qb`ϡE>YUt|Ē䭐 @ @@ % @pC7V{oڲ^vHxxu1vwVU&[g]NG3ۙ%z'+J#BXFt&-uK=|`[8Ӯ0Z2,>1dUVlxeW 9V^3q#+WIDN?r܈R;4oIj0#Xٰ'5yAe @(BF @WʲwAH2i/?~nƾ읉P=؋7txI"[w S>dYxyӎZxax7yȯ?~KSa=Jf'|SƧv޻ǝ{[<{#lpu'MSOݺ_KG_jajW'qƱ%$:O=,:iBW?װi]^7f'Ozf*w_Pg3 @" E ݻw^^^ʦ) M˱ @@Zuϸ'q{K˖-KAsaĵX5,۵1Z&Mi#N8v?p;.K,O3>~9= ӐvDjBhXߎ$5;!u/8**lQ9^t _ cD0T/'*VJg :t)ipi>:Ujc]κJ*ǛBȼ93x0. {34n&/auʤ1bԬ]T/L5WM?+'dϻ=''>% a{Ԟpb<%Zԭ$u 15(B @%HG'@HMs=6  @ @$Ǿa~2[P< bsyMcI5?7Jy?mʄ&fRF؎",6mѮWCRv¨K@IDATNM HtFuj(3?s-۟x=IL^vQ9*TZnOMM(Nn~~vԿ3NU&j .DjBaCW&L0 3Kn(Gufgu Bfm7ؤkQߢ׼赩WtH3e'̚692! @"2_$Œk" @J'\pgxG>kJoR7$xyxq DxEUUOCH vڢ[ #[ojvA,gg^h$fZ=ysӧGB9V \OHiiNvHڸyu l5d ,Z8oF|iwj#K=-j֓a+(/tݾ7>Wbx0;E=}BsVE @lɧ?1;իxVA EmZ섒 U3~M;שWn9mSy ֪۠j4g4ysiѶCb_~Ǽ|Y ?gFA_C}S[K I^]QQ+/Uyӻ}t8#l8D$TCJ#$=5mj jYeg;AĪKu zG;WGVY;OT/Z~D<}Y'\xWyI\jZu-0IwJ @5# ;a8  @J!^BpO}QyOO=}Ӯyiޒsw-HyydvB[D1p|7QS)~'ot7L~r>g\HZ#ޔ63^fLx[Db5&Lԭ8R]zb[ѕ!Yj_m]q?ɘ[y#c UV?wY ߴ섴ɬ #@ @@fR @ -Xl$mӺRZ9[2mzS|?9 n?MM"]/_wdz;lsNWZX^p%t\%̈́EͰfULвHR;6wi+VvH58bnyo^|6E&4o'Ԅp˖قZZPh"@ @ @ @xgKQvwDQ]f7mx[M6!JwV;_nO MzCUw| 7vn6U՘HDuMo| cW%즐萶ZPka9H?gdTKR?yFXsrZuS|+ŬcpqJy0';w xϞyyW0x,=%* @d,@G @_N'?QN{kǮ;f'JԪS?NïCGj+V]7k{vz +/Opt}qƏ6> [#̝[1sHO k4myТ&irTXA%oӾ3[1*GbgS O璐X7ؾV`T 7 S~u>z4SB'jW?r8e Qs[!@ @@Fd'd$ @Ȍy?+߻/ gаiOnиyjÿY> ')$ '_ǍҭL٧Y|QC %7rPlf50f7g'1L6tۨ%SEJ;f-hD$Z{!q釯N{o$jfmR x'+MjBv?o,uTy5kиEy$@ @@V NȪa1 @ԗiQ~HJۺn6iF99oRU'JzN3,"2qԟ7mپGE=Ö m6>sѯGrA>ih?777/ދ"#ƫ`ޒ4o;v%-ʭm^ SL2>1jɉHTQy+4iAMs\R[SuO6K I ]reKPuT"D•Tprj @d'{'@ @ ~槽I]SS~SvYX;.fMFT-qn1a|eSBy+Mu7Yӓ'x :&DՑCE/k g'[`(WZ-٦ہ G Gl>Q9i^FEըЪ}&F,)j&;!qGb9cR_y 1C9mڢ]=/_^b#0N;bClNxf8y%3dU$UbLDB5mLj7 @Hj"B @?w̜'/ Mء'_Yf(wx κDcOvGNbŊo>};OMMcwh@T }ոY(~~=7 +'"vXlY3*UlH=r+<QsgO3u\);j{:ǮK ?z 7߶lQZp\E\zA[a{$UUoiDɬi-WV+ gp|M+&~~5AЧg$fjڿ'۾Ǿ]5=<)/>a+C>C˸቞30-9K"gݸJ۴iM{Et$ @ @@Z'mWA @XM_~^L|]Vx6Ax}w|}ᔻ_fM% o /+UrupJ~2^3{?N0z}#|Jx 5=x! J{K$Vw.t @ P@nQ  @ f̚-g^+2<ֻۣv{Fը0sڤ' MN+G{wU?.ܙi6薗7kvAFM}Q直hw?۠qG K/y$w.9.&,^{?iD6:~:H{ gHRI}X!k igp\ԛ\s-]O;HhA5kE?-m;i5}yifCˁoZ$ԄKć6H6KeH~Q+6]vE} @ @TtR: @ @ <|H瀣.hb O8Ԟσ|?5^HQK>jLpB?qz ^u_@"Րp}}רy VV3L[Xi>f;&Z,ۤx0pεO5h2,yy=簳pm.Um-> /m Yԭ$გkw8k|A5Q>򇛵(jif-i<6{mv=0-$Ev*\S369g": @J" ;$J @ @`u |s_z%uj8aႹiJ|h\}Zz.4E4k]/ i#Rٸ7?EڟVNSנu}!jDSC%%l2= Wž0*VJX]=6qq#[p~"U׫;ߪװYI[ (n5 r?ڐSY)U፤n^sLަ @ @ d'd3B @YY3<p{CVCK9'nx J>VX"f\HH{ F-7oz$u}ovP-Ex!c}Cn߷6]6۶G<?~3oݾ|w76ZM)m]ο~;W">dӭvG~}Zut圮;}sCN:]8ĂVX>b`qxnXJ''< vYtfſK7?_5~Q4Ga]8N*N2>moKWVJmZ^M4n3n'<ԇ]wf.%LC7vķǏuOUh~m;_IR{C釯Ǎ4cE .Z8/>F:!Y7ؤk-ܠc#˖}Ə:oΌ@>ᤃ:5 _tٺ($Z8ۏ?ꀣ/<㑴%_Ϟ1eEf-7 l4/w2͆Ԩ1omiaԮ ;r޽aΡ$ .UGåK7v@>Ṵw κr*/j[_}ukfCbMC(w]ŗ>'RN'[O.j @ NoB⭿X;}tɃm|W15!,c OEݪ_U6?†]̜>kQU @dyб/W VQC)!Ѩj5j_x +W"  @ NXEl>wY#GiСVCf  nU @ @@ uMa];f7~_t\Hʕ֨U݅ @ @ v6/'W}`ZT&M3W  @ @@ TXnFY< +wUUrl &@ @@9V:'i/UsO"IH ǫE 4/2 @ @ @Ȉ섌0e*k7a#srr Ҷg'V\a~>2w7* @ @ @ @Nڟdmw; QF͐P5Mm[Λǫ @ @ @ @ #2¸'ic):Λ7ŧCv* @ @ @ @fdGO/=gw\m@ @ @ @2% ;!Sly OEέTy*y( @ @ @ P';DitG|Fu( @ @ @ @@d'dβ<47>S&ln[^pYQիްQ ;F @ @ @J( ;Pmڐo%N^DՒ~7Uz @ @ @ @8١$Jgi g* @ @ @օ'?wܘu6 @ @ @օ;g st @ @ @XW*7VJM?6|J5Dg @ @ @ 읰ƨ] @ @ @Ed'E&@ @ @ @kL@vv! @ @ @ }n @ @ @1 kڅ @ @ @ @_T@v_m @ @ @ d'1j"@ @ @ @Q   @ @ @ @ƨ] @ @ @Ed'E&@ @ @ @kL@vv! @ @ @ }n @ @ @1 kڅ @ @ @ @_T@v_m @ @ @ d'1j"@ @ @ @QJ^=ݯ_޽{孞ڬ J{q#=rYi  @ @ @(=`9]eg섌={fl0IcRk$@ @ @ @)d?cs @ @ @C20wLD @ @ @!';daѣo߾{ؤ1Q>}Ǝ-m^q @ @ @ʯC<;d'dO&g̎z6;aM8cVA @ @ @@fnP%&d" @ @ @ d'TS @ @ @ @1 1 E @ @ @ @`5NX $@ @ @ @bb @ @ @ @jPMI @ @ @d'0  @ @ @ @ ;a5 @ @ @ Na( @ @ @ @A@vj@5% @ @ @ P$@ @ @ @VՀjJ @ @ @ @ & ;!H @ @ @ Ք @ @ @ @@L@vB C @ @ @X V)  @ @ @ @" @ @ @ d'lrY fꬋ @ @ @YJ읕+((xo=Ϝnv垲M?>;zθyr+WլEvi۞:4@t"@ @ @ @ x3]R5o>_xZ[{5KM>#{O* @ @ @Ƞ2~zUsO}A i<#򳉸* @ @ @Ƞ bff3yUkucj4mxm7jX'?.W%@ @ @ @pC$33O…Y3<ݰGtͱ9xf^ > FY_R$@ @ @ @wB(Wqe~7>m7e* U~jl#;π:7z})_}U @ @ @ @@읐AMZhuq¦? M#B @ @ @V]n-3CE|ҙQBDMF/X"* @ @ @ @L ;!SkDݲM{Eբ >َݢւ@ @ @ @2$ ;!CFz瓴 `y~o}rr|c*k75@ @ @ @VաZ9Cf@vI5'' mKC[dq^QY @ @ @] k?cWug\*n:¼_&̟8~)UԭߡS @ @ @ @` NXkn .VE܊CuC{/9<%fDaӪ{{"  @ @ @ @ SNvȔڜ'+X OZQqe @ @ @ȔLIyΛzn=Rㅑm6rr+Ff|?xC @ @ @ȔLIy*V|wr9`ZUaxU @ @ @dD@vBF$kN$.0mȷ}D @ @ @ @* NXE^rժǗRjQ冝7P$3S @ @ @Y@vBk`:u qxrjjh.=3*+ @ @ @ @L NȔZg 7rZj15jF57  @ @ @ @ S2%iԥk|sƌW*X1w~M @ @ @ȔLIymE|U?K"  @ @ @ȜYՙk?愾d9wkбsL @ @ @2"Lg%Py{+Z  @ @ @ @@Pf,|nEd}9+u㡮$!@ @ @ @eP6UG|6R,pZ1}4 @ @ @ @Upêf~3g,[I+U?&|{BwMy)95d;z}jW1 @ @ @D@vBIk*ko^S^o  @ @ @ @`p: @ @ @b Yp, @ @ @։& @ @ @ @@ Nci @ @ @ @`N1W^d'dǣ  @ @ @K';f @ @ @ @ N(GR  @ @ @ @@P.E @ @ @ @r$ ;=,K%@ @ @ @R@vB|lM @ @ @ʑr, @ @ @K Y4 @ @ @(GòT @ @ @ P.d'f @ @ @ @ N(GR  @ @ @ @@P.E @ @ @ @r$ ;=,K%@ @ @ @R@vB|lM @ @ @ʑr, @ @ @K Y4 @ @ @(GòT @ @;$@IDAT @ P.d'f @ @ @ @ NƇ'a|;l#ד/N>+rљo=zԻGT#w.,갿BoսgoRVaR4lն=dֶoC4P @ @ @dP ,T^z`h\HMrrr:w6^EB˫/^  f1捗n7ϳoF Q<u޼S)XQU"@ @ @ @QO6ꅧ[⫢jg_ذQS`ֈjaۯP" z#TBviQo;D  @ @ @ @`Ud'^?n[OȭXDCBaC ǾvOOj萣yU @ @ @ @@d'dS͟8>޵ƫEI ÇūSbY~rQ;v7~xU @ @ @dJ@vB$K1ς_'{ݠ}ZTN M''jn{īi5oVFQ/ZU @ @ @ @@d'dJijr+UްQI?6ޭFɱjnxkQ;5-_x/ @ @ @Ȕ@LMd ;pga5jdƻ5yT]toFxSL[hex|*lRCU @ @ @M@vBViTOX:oiإkT]<}ڊyQvVQBzM* @ @ @ @8!#}O/=gew\m7wvTZ[ƫŔxb4 @ @ @ @@d'nMGTtJxyKfϊZCzFj1jՋ=Ue @ @ @ ';dquMtG|[^xyر)o섊USrv¢Y @ @ @(섲Q}Ӌ^8erbv#;REU]/޴txU @ @ @dD@vBF3<ɼ ?~?FbNǟV\9_T,c-X<>0oR&@ @ @ @e(k2_R /\ݝ7 KYox`TѸITb/Vo(^U&@ @ @ @ LRPP0g\{颩&УwD BOF+e',77ZLyyޒxk @ @ @  q\YNLbzwvw5OTk4i8;!@ q e @ @ @ȔLI} zpqKfNOCk;{rnŊxr+e',;'mɿă7W  @ @ @ @@Fd'd,  )rTzE[{Iڵ`5jTU;n ~T|u/r(;!L @ @ @)ɲ٥ V{˭m.,IF&sǸ }TF 7  @ @ @ @ S<ڋԄe.ݿK!5!\f[D X۔y~~EڢW  @ @ @ @ S2%YyyDcr+WޝO:3ѡGŇLet޼CEMm{ @ @ @ @@d'dS}qEPB>bJ1>k8jQEFb忷kM @ @ @2) ;!%kY?uzZBʕ7[hlQ5bٲAwݪfQU @ @ @dP@vB1K:7_Y,wnq~IGoCz˖,G9o(蓢 @ @ @Ȭ@Ng~텨[nݗΛ>QիްQРf3- NΌTz2;Q[u:@ @ @ @2+ ;!%mڐo~>Q.Mw%xٗo|ط^W[&[lSiiCOf4⏁9`N]4 Q"@ @ @ @ NȬ϶h_z4iӣ ?ϊ)nq׭R @ @ @ @ c2FY‰Sže UR X4r*V79i%@ @ @ @(`?U,?섰G>k,.|Ԅb4 @ @ @ @@읐)ɒ@N@->W3~:iĂɿ,>Fj[m;Q%]~ @ @ @ @`d'_vnf;tWv @ @ @ @`pú! @ @ @X֮ @ @ @ @u_@vº! @ @ @X֮ @ @ @ @u_@vº! @ @ @X֮ @ @ @ @u_@vº! @: CMz)b""vcKlcQc-bGcCA,JAA@Q>a$Ǔ{ 3wssZ7 @ @Tꄊwu @ @ @ PT'Tw  @ @ @ @@ NXW'@ @ @ @U_@uBǞ @ @ @Tꄊwu @ @ @ PT'Tw  @ @ @ @@ NXW'@ @ @ @U_@uBǞ @ @ @Tꄊwu @ @ @ P#n'6lؐ!Crrr657ĥƍ!. @ @ @ PET'ņ҄/mY @ @ @T';M> |g@!'+nk 8Pu* @ @ @**ks @ @ @ @ ND/˭ @ @ @ @J):R67M @ @ @*J* @ @ @*ks @ @ @ @ ND/˭ @ @ @ @J):R67M @ @ @*J* @ @ @*ks @ @ @ @ ND/˭ @ @ @ @J):R67M @ @ @*J* @ @ @*ks @ @ @ @ ND/˭ @ @ @ @J):R67M @ @ @*@V%MVrsVѠAFFFyU77rRuCİAF + @ @ @M lJE 8\C|e~`XP#\sɂIJ/ @ @ @7, yyq駱uH._Q/<1y$ ]%ɔC @ @ @('4nb>骟FOhkߞǟҶ>u[ /2yCw=*J_хȌ(Xy ?j J, @ @ @Q i,R+wф}|#zsbvר>Moo[#jGs?xsODݒ4 BiªJ, @ @ @W@uBz=K.ϋw8^gu㍰GV'kOhH/3:B"O7J @ @ @G@u}A;]tek:n^87nz%96c;"6Q @ @ @T@uBIҘ=ES&G nqؑYYQ7e#zpC|h/ݢڹ+Wtl~„~nE% @ @ @ @PPXs٬6-ݴV񡅓'ƻEG%Ӧ/^y.>g .kQ]pڲgw1M @ @ @6 o^+~k#.:sŜo/G)=2oסmG  @ @ @ @@Nu\tߏ~-!oN{=kHv|7=T3g(#sըqLA @ @ @ !T'lHu_+wŊ8kr56sǝybyamۧ_  @ @ @ ߰+ɏ?aFă @ @ @ @R N7_/K– {p6^a7 @ @ @ @|T'V]2c2kdK"[vZO~XuBF.\ @ @ @ @`=2ceXxѬD{sQÏ @ @ @ @ N:/-pfZN;n%  @ @ @ @pÆ]gڿz_4;|H 7ӼE  @ @ @ @ PP&ð'ꖼ_{%ϗI @ @ @*JZ~y˗m諺 @ @ @8 >G @ @ @*T@u†^u†6w= @ @ @X&xG>[8(|*\ @+Wz{ @ @T'T @ @`cǍvg?L<{ъeK֮mڢM[еU-v֨YkcG @ P* > @62A‡o> vB-S|=¡f-qe{rVVd$'?Q[~f|u :] ;?%7w\0HOcIV`S 7㞇^r۫ N;&fVjШiMCqR׭w3D @)RN$@ @*)0w^qܔ/?.-LJn˫Or䟮Ku W T+KY3&xFPr$yH YryvmYn'w3SCs&ٰlv󁃮?87C @ %@ @MVo<%/M}מ|ù^56jśz_~O<' @(BI#@ @@&\w+/)sNnX!wMNW0 ,^#Vқwei9hRuL$@ @MD@u&=& @! ^p:5/>zݺWA!/̩U*J`ם}OlѪCQ9 @ @ N5 @ @j^{4Y!+Wc^zAWݿ_tDa2a(JVyU^`7'kUI 7Ox;% ̝5aN4??/!!tW.~Kο! @  N(4 @ ^uO009^=ugtpҹedd$u?8YWܲ6k[Գ9?N3RQ>gwfע @ @  @Ξ<:Af)M(Lxѓw5a?͝=u-)˲͚1if [W!SGnШYv|x0//oًْYYMZJsge/%{4o>u֏_tôëqZ9]-. [OBO2?B41C}Cn_|(F+x  @ @@D} @ljM~.=wL&Gvꄐ6W'}1ޚ>{7mv>}ȉ﹓y3CeCB?_ݼe`}S{ʅwծS/ *[#[?WFBM_>v[˗. 9OW,CAj g߁>FYŷǎz{N}#çM/k8˦ےpcz03+ECcCN eR! >Br~ff9?[ߓ\Ngxa!ǜR~xd/)FŃo's\qQgw捵j׍ݨiEW BumҘH(7 y/dDFvIo#|9w[|cc{;mGe@&)WkH @U^@uB @hު}ݓ>zc_f'*ңMnDɅN"X6N,aqw_Ud/s1h댄okrV3 apF¬/FH[ߖn?/|Jx?]fLI7·S.CNv?̨5xfQ PE >q?V ֭ӯ?י5WP"s_. 7˛p_~6,errp};ɷHʓVZbْz !@ @*&dÇm-  @ @` oɬ^ ~NޯݫW(g͘W~&&E;j2,xhиzM}̈k=/sʅۏ}՘A@&owzj>A/MwvhH(dB0-\JXX<;!n~[&:ˏG=y88&ѰC{ؠ䔑 6JwBX k: @ꄴm-  @ @` 硗zJ{G^WjԬONoNntxZB.3`N,*ߐPWq##tZEjth4j>|˓ٝ㴎[lRVkڼuCp=g$NQ Hޗ"!ݭv[#>r|[߽Om~xv~[̚|>!N:.=sQp;ѭQ^)6kKX @tP7:ax @@ l֦7<{ҹ}֓?xu/UKB11v[]2oz$EOJA%ޢusfƃ[ݮ_~% ={YT~|)QdꗟD͎{GF= kV-_(Bߦcx0]o~aٵkeK$OÄmE" @ @ N5 @ @D-ڄ} g񂹓|0i_)%Tb#yoSNlѺc⅓!':&%n@ًZ4:w,ad329E7cC-P?7F7/v}mYZpճjtuQSoӡ۷_}ZLNx;NhҼu8 B @M-{F @QIVȠ`ᴂ)? ac~?G RyVV&%:$z/Ҵy_lIʄuH\(!yks&Nj⧔|?7_`N|?o?g#ESt}[~6mv\b*I~2G̝ # QV䋥a/NX|YӒ_AwIk8*9G Ĵ4Z KfLm"!X 'M{yksFOΰE6۬mPNYn֬^Ti)m FdVJ6#|{gLn;.|بQNʧ(a/]:9yaJ @ @H^FKh @ @@h?z=Ik/2.9Ye=^zpr0y ={O 픧,SBZ;Q:!yIc>HF~979g⟱=ZJ-+ZǛl.*u6HHyƐ+>?y聾f*)q}k?zY5: @T'D @Dz~`򓇭WC ^{4!Rj~Q|~Qc/ǎz;&4rܝ 6,xF)N=a iY3&)lө{j{q5n욑QQfbG݄ƘoL5g에V~NY]\-:o|?,srykʡx2d/|]2yǾ&2S @6Y  @N{97]oCo&9S^t\) /?{/y% KM:sMOC|裷 s?b}H/swa! ~_?(7wMB<ޒ ^ZIиfݶ-!'RpGΝ=#!apTD(I4OUFDjծsi?ZmIYsşd7wo'$ē$?ԉNa3wҩv*'|?E @ @@\ _Ǵ  @ @`S߰AG3'?wS^{tֺCճOa_}:v[˖,H"Z8̗6 K]w;^ ؼ5k  ^xsf&$nmplryP|{§Zk}] !!=k֪a#px'D$dG?]OOXq۝/O%V~[N8q I,^0.-M&dVҷejwA*~@IDAT&B @67y  @ BNFRdjӱ? ξCza¾i=oww ɪQ]ŦayvqZ S͎;fm:'C$AE1l唿ޝrnއXK뷥]~7Tөv%ɯo$ULN<级2221D @ T'& @ @ lޣ5 oܬpkt/Z)6?Hѧ^@<t} 7O=YE1~ԩWJ`8^Lٛ4ou6oաk҄}7vbZm9[o{ -WcI+)ɣ%dfV?/]~[7J!@ @)MGr @l oЁ?oAGu†ݾρW=i$ A>CN' %zm'tkծwϖO)y7p{}F%k睺5Mw"9.B @@YjڤϦ3fcΛryeKֆPиi.=w==_G^6wꗟݙӾ\ds׬34l<\N{QDp_}1|3/_ߦ}6=\rGWÆG]4oݾs]96/nM_fg/Q͂[-wn[/oKn3v[ ^<~æM[ k=u7N  @T:.{)~<#_|egq_8OʾV%Yܮq-ZUA2kškt#ʢ'@ @`!\rzꬬ[/|Ҿ~esC׭w\'azvjsBuRF͝&|Cly;AgM @z6w3wW̝xQjճj5nҴVC[lۻTz°o,>uɴ~ftkԥkrJd @ @ @ P6 esK笉 YhA Wuݮٖ[%%wiS'W]zтhļ_O~q5ݏ>!,Xeό/M @ @ @J"Y$9$7xG^|VriB+Ògzp:94!S♝MIC @ @ @ @ ҩYYI5+#]ͣ^0ybPa$q=2UBFr0,{C" @ @ @ @ ])~O)^iֻy)mSES&O|9GEiks?Xͤ(98lwڹdu[^0OZAS;jG]ep8?aN%ă\uիО `ߛڬQ7hն?\fV(8  @ @ @H4bbAw':n^8?~Ca|㢄[GFqIQ|N @ @ @ @ ҈Yҥg~h({Îʊ)\pC|h/'FwE5ZG|h/]m @ @ @ . ,:f͌gw>nQ=kB|ϳr~=AMkՎw  @ @ @ @@T'KJxvͷwj7y|hO?ƻ[ͬQ3,fR.`҄PF|6 @ @ @(ꄒ(9'^UN%@ݶwv"s?$o͚(עxFfFKT$M @ @ @ @%*a4 ޥOo/\Fz%Y|1wC〃}UapŜ>fÆQW @ @ @Q@uB1KT>§?oҥS^x2>WNe/Oy]vmm♹+W~q5OyDʬYkKh @ @ @ @4 NH#f9.5⒳Ϟ]imuu 5ouڕ+ #[%V*,^i'5bB5 @ @ @ @ -NvH c ;Lyᩧw6Jy>R|i‚I_N|}؋҄P~].O׺moA @ @ @(:!e_j9nN/Wiҽa0ࡧn2OnxpO#㑄vv}j~ !givB. @ @ @X_^P6 yvG OӢe=jb=SsWP&vv!s-=)zXA @ @ @%:!]eY'/7+.|W/ϬYk/;n̴xjfQ/[%ضwun1V; ;Ļ @ @ @ @ -YiY"eyٓ0>þy=:w^6xNĻŴ2MdC @ @ @ @l斆YB4!l oseX:giv|V-buf֨j @ @ @ @NH cY2ce֨yKC;QfESJBwmmM @ @ @"U,RZ0w'\۪^0x¯6jxW @ @ @E@uBZKŋf7$~T-CiuZ&.Cߊ4{h4Ф[A @ @ @%:!]Xgƿ__[8!f^WɩR322:Ȉ ]"InOa,'}D @ @ @ 6F MQr~,(RFM4o%oS2MNaduP}~vG9Q#O<5DZ垨A @ @ @(:!%]jބ1Q[ƶ9wD:wἿ}qQdW_V'jwxnkWZ2EL;eFnײUuZ,nGw<_& @ @ @(Ҋo~U,(lsǏelب{mm?;ࡧj.>( @ @ @X';^Y8)ϩQގ\ɧ|%ӿ]ݴCUDFffnfn}BīJ$@ @ @ @ePPFZ&M{s @ @ @? @ @ @ @ PP/  @ @ @ @@PP_$@ @ @ @,:_ @ @ @ @*/:ʿbH @ @ @*X@uB'@ @ @ @U^@uB @ @ @T ~.O @ @ @*=  @ @ @` \ @ @ @Ty U{@ @ @ @ P*< @ @ @+ @ @ @ @T'T py @ @ @ PT'TW  @ @ @ @@ N @ @ @ @ dU'ܐ8lذ!Clȋnk7n\% @ @ @ @ NHۛ _ږ @ @ @*NvHۛ>|xֲ @ @ @B2,D @ @ @2 0t!Cmэcw}wƌǽ  @ @ @|BBO:W88pꄍU  @ @ @TJ';T  @ @ @ @@%PP^[%@ @ @ @R@uB|mn @ @ @T" eU @ @ @ P)T'T  @ @ @ @@%PP^[%@ @ @ @R@uB|mn @ @ @T" eU @ @ @ P)T'T  @ @ @ @@%PP^[%@ @ @ @R@uB|mn @ @ @T" eU @ @ @ P)T'T  @ @ @ @@%PP^[%@ @ @ @R@uB|mn @ @ @T" e׭Y`V1 @ @ @^ SH}yc?_˜ 5 wlءSvi[ګzips,^TZAFZ4U{w:.  @ @ @ @@iT'V,&~}Uº~>_In%ZNH+;{?5K ֮^8? o~vͶ*!M @ @ @Qi,R_>p+\PTͿz쁄E 8\7_?<$B @ @ @%:!]^gګ/%zgq1yyq:$s/{L<$B @ @ @"괬k9uo!k-۾I-W2g)_?osG}4NQ0~~5 @ @ @ @@T'Kt댻eK9 ;nW5yiԹKt_~Cr/,Z/nf[2ƊsysȬ5:(Mo>]~P0~ s?xsOlyIdm @ @ @ ';tX1_Gs! Phi1~(ü_.ϋ;iBiB4HA;_rM Oh+ @ @ @ @`=T''`YOK˗E3rOVnrݞC¯*ϏQcOD:tѕQ7eי4vhhu5 @ @ @ @@T'K(~m+ج׎U+u 3[4er#3qlGf[hJh,eM @ @ @":!-[dϳ -w%uj4y|hżnh/53|oݢP]m @ @ @  ia,")Р}Ǩ]LcFĻ{VTӞ4%j @ @ @ @t NHd֙=򃷎9FkW]wC݊9?œ:߼:z6 @ @ @H҈Kic?\J^n_I=0sW,sA?פk(X|#wŊ8axf͆\?q'ǃ @ @ @ @ NH;iz 4h׾Q:FѺkW;[L` O=SwܘP "@ @ @ @t NHd9j] գk|sK!l; ~ +OGzf-qm @ @ @ PN 6vG-Z?ɍ yvG iѲ5{ @ @ @ @\T'+o:o.ލy_qGz(Y_vܘi[%h @ @ @ @*R`,8p~ϔif[m.+d==p[iԹKpC s/oNƾ<4 @ @ @*R@u†oڽgx8-btwM: G]~sDunhks #5k:6 @ @ @@ &{ݯuw{_eu?ܰ7FEQAEPV2Wjqjjmu[u*nQQP(CdB|xܘ3OpNnΖ~f׌J$;oF\Vvb"Q.={m^QMAl$κ @ @ @ @$d'$ n ڧCfhܹwZvѨCPq笞I>x֜gzmwׄx/ƽQ1ÎI @ @ @R4~~EKQq{~ 4<-^6O" @ @ @('\%PNVVQIӾ]=zڟ =o;ysW!@ @ @ @D@vBmD]mr+ZnየRW0hvǞX`p D*  @ @ @ @@ypCYBz]u}.}3?ܴrEVY{;g8_ik5mVBxVA @ @ @(C e߹I}÷b @ @ @ @P $@ @ @ @bbB @ @ @ @d')  @ @ @ @ @ @ @( jJ @ @ @ @ & ;!!$@ @ @ @JA@vB) @ @ @ Na  @ @ @ @RP $@ @ @ @bbB @ @ @ @d')  @ @ @ @ @ @ @( jJ @ @ @ @ & ;!!$@ @ @ @JA@vB) @ @ @ Na  @ @ @ @RR sS7nYYY`ԩ썼 @ @ @RR铲LD @ @ @*RǏO\&"@ @ @ @H@vB6W^)D @ @ @ P>!X/of6JG޽ǎ;z謬$K1c̝;7]Vk @ @ @ Pd'rGBBr1We'  @ @ @r, @ @ @4,K%@ @ @ @i) ;!-͢  @ @ @ @@ NHͲT @ @ @ r, @ @ @4,K%@ @ @ @i) ;!-͢  @ @ @ @@ NHͲT @ @ @ r, @ @ @4,K%@ @ @ @i) ;!-͢  @ @ @ @@ NHͲT @ @ @ r, @ @ @4,K%@ @ @ @i) ;!-͢  @ @ @ @@ NH*R7Z~}Ig1 @ @ @QJ^*˦O/ozqnnn]kӮn]ulUn3Ob٫^&LRj:-[c~JJU  @ @ @(_U]~0e~Lӏ7Q9w]vyRs+?k{7_{w<}  @ @ @ @@ B"O}{ϡSLusx>}yW|CFqJԄ<3?~:W$@ @ @ @)B̢M5OMݥ[d'9,'k[/Y<?WCyj޲ik6i>wkk:7s< @ @ @ @ UnvHd|ÆltХlzٳ>~_~6ꖛe/xsZF<=o7*3;\w3Q~W g[ w=L5*6JH @ @ @R& ;!eEhꝷf] vw\vE5wmI/<1kՊD|{vW3l\,D5k<{bT-Z}M:u w:#>t8!{  @ @ @ @@JƢM~4ܻC QStH0Ȩ-dޱeㆨ;'5!jjOc92*'/  @ @ @ @@d'JynTtBvĭwnޢ{.}:ܭ[bde{b>'opT4ܵ3>b @ @ @@vv5krssp }yV'FuZiuQq{AN]>7*NGȜ7gy#ot_l'_1.Qr̐QIJ~'5 @ @ @W~gS}W3fȑ#Ox+WԄ*U4hРCGuI'Թs /`efvȈ -޴~ Əݥ]^Fq^zF @ @ @ @ ,Z?yJ^vw>333σlٲlٲ7\wu'x-tK2ئu_-ZwQ\H|xkvdg=ݨ/Hju65  @ @ @ +V83^yd/icT)X@ @ @ @P ''Z3+WNӴvN8a;vT΋`\reⓙ_O}/_ķTs$Ú_]0ÒoOD @ @ @ PoРA&qwGݼyyΜ93gμ;'Lڳ/袷z+y/WE j; X̒&8MJUz--ybTYuJ+k?os;r嬙Qk֭p{89'sD| @ @ @;nݺb{&?VƍYx-l7pm]ve>|9SzK.dӦo8~}s9'޹Dzmٸq}ᙏq]eFCivϿ K*5 ^!\GA5_?1|g>բ[I@ @ @ @@8vQ1`ٲe!u !}'QW_'5!j k2dȪUU78p`5rN(GIUkٲa}7u[uc(pY0c iܨ`9eNC? | @ @ @(ssp/\0?3̿pAT뮻^{Q/9rԩS!bƌ]v-s9T״#/)%l\uԄJժ}KMbYWEn-|u9ԄZ[rrSF w?p߯T"@ @ @ @\s5ǏOС̛7o̙Q}~TvZ4$~aXxrgy[7g8':?Ѽk/NX0}vmu[l^nф_չV.*?pg^ǵ=渨F@ @ @ @ExnĨpˆ#j֬+O>xq{qu7M>=^,米UQ^6g;1~3Ϣׯߺ%;Oe5cz2TSgN:wO|Ȥ  @ @ @ ̼ ^?~Q_Fqv}xq{n}#UHvB9ڜ2hϾ묳/8'w;,pËjk2D|7rTv;3*U:,h> @ @ @(/^뮻6l{ UVmҤzΝ/Eznv(K\j8`~ww?O5nٸa_tEK\F'x%y*i~ɨ~kct @ @ @ |Zz'8׿&*k׮Cɓ';u/XvB9ߠ[^ݎ}xKOݚXgׯ_!{~)C5k<ض:tN<ִ=渽,7gM᠅5jF43<Ril\,> @ @ @?D/dF%\`h߾}X ]aךżxzbWQN]MVD @ @ @XpaNz<) >h4UժUC1!eނ |ii{ uv{a钨j:Q\xPVCͣX@ @W@IDAT @ @p YYY5k֌g*$3>B /'w~^:;;!?FyM '3bkNNOդYg&w9[nݚ9 o{= @ @ @ @@~9s<#QW\ѺuXgw}&ꫯ.?p ?y=us֚/>gNwդiއU}{IOxa Q}#  @ @ @I\wu[lItlٲÓ]>}YhQ\0nܸpC2-b ?6^G.VXHlxkZvNv/;o/^0ntѾNjb @ @ @(D`ƌ#F: 6vQx O88!>;阚^d@ýO>Z+Wbj㢚ϞSދ9YYS)jլEI@ @ @ @n֭[&k֬yy|Mnn?{tMYYN3qf:scH]۷sbԯ'OG99c ڴbYUU+*&}}뷗XM\haT۪Ԩ @ @ @ PeFu  6E /^ܻw:뫯w}_ЬYx}Ų`B@F*у'\뷮]BMTV|}|ΛQ}պ]ǨӖ~>_Oyއw5WM~}'ͻgz @ @ @ @Pz(~_\hG}?>)#{O~G4y@:.^t8{Ȍ-~w.y{w@M3?zg'Mt[s!8ڛ5^3*U}#*Q|OuڴS0mCò{?&mJ=n+##c[ @ @ @/RݻQ1 ;;_uFU^+>|xݺutd'4~~EN{?|iekӪOl^:gˆ~'&;G+ @ @ @D/ H%\rc?}EwvCQ&MvHڵ?z~wCZWޮv»%Z=r狯H> @ @ @ xG#J*/*&92L{^~劗Ld'$vi]j8JZ_}à3{b2h3XVBso/(& @ @ @#q1cD={l޼yTL2={!CժU=zE]Tev.p[fn{|մYZf̓ }/Ƽf,ΨTfhumPM"ͩ3 @ @ @aÆg?Y'\qk׮Mxǎ:䇧]O eeT[wߔlB @ @ @~GNj+W '%D= 0 *Vr[ @ @ @-[^xhf͚u!*&<ىիWKݜ{g @ @ @ c L2eժUS{#F:+OTdРA&M$ٹ̻N(- @ @ @Hw}7C=4^L2Q1`ذawqG˶  @ @ @ @ d'r!E]ҥK׮][Q_vB @ @ @ @'0iҤaիWܹsTL23gN=+R7 i7  @ @ @e͛= &dcf'TIRG7 @ @ @ 4i$77g})$i7 ieL @ @ @L@vBm @ @ @ @v[f @ @ @ @ d'نY. @ @ @H; ieL @ @ @L@vBm @ @ @ @v[f @ @ @ @ zrǍ7z謬"nԩ7kꃷ -I% @ @ @i*~Lӕ[vy }It0ђ/Rk$@ @ @ @pCǏLD @ @ @*섔mf^R6 @ @ @ @@pC6wcǎ=ztVVV&-3fܹҼuN^  @ @ @+1]O ܗ>|տvۻ|* @ @ @H_vBj(pC CH @ @ @R@5% @ @ @  @ @ @ @ ;PMI @ @ @d'0 @ @ @ @@)N(TS @ @ @ @1 1 ! @ @ @ P JՔ @ @ @ @@L@vB CH @ @ @@RӔ @ @ @ @ƍw&5k6nܸI&;v<SQR0~K/4$!' dDM $"<#7tӼy/?/;R<;>w(I/$[wcG??sOM3ŋ&\=l٧m^.O" @ @ @vwy'p.7.333*n/ظqK/pT,F0w܃>E Lrqf*/ 4Ԅh̙3?CT섒 _=;1 o9w@nζ@ d *n/=z3<3̘1Ɍ ]tɓosO<9^5jx½{e\JWZc7,zs 9`{^5ӗ4'kSԡ.6G[wg~>ӑ #N}ݛ~- @ @ @*%Kt5T^=*`zkTO`Qo?'  ={;]wݚ5kq9?i"n۶m"wѢEGy+ }!SN+W'$X,_<'&|khT\s5ofT< jԨQȽ)sxQ;ܹsTS@vBIJel8#&l\?[^6ߦq>2Z:*5klԸynٴbY~o=( @ @ @ @@ 7xc~߾}o!\&njvںu7m/Fţ>e˖~ݏ~ۣ섐g j !S_6C?81< 9&L-᠈[nOá!#SZ= BD84"谌:,I ;$z2`+3*WI姟yv[&Ný;=WZl}{~۔u?J  @ @ @i$k.8;;;RpA9k3ΈBZC["[. cA g0S YfoFHP@$N{lSN Uxk<GJp ]tQ2Ld>ާx⹕֨eӧMk4li?]P'rFmG` h/ƾ(~>-6UQ#. @ @ @ @@z #SYy~ĈOMƆÇorBBk40_ȴQF?ؠqwuW M4yW۵koHw}yL=Eg ,.DGXٳ;v /vP# L@ c ښ91QVI>%{m[o< aG LR@ @ @ @ ,T ™ fV:ꨨW^Y~}T!3 ՜|Ʌu+0̚5+j A4j(*5[l!;wnT\`… bN:#Gw|z P KTuկWl߳_ǒ'nݒ{9QaM  @ @ @ P!V^}7Ə_ _};^zt)k׮*㣢$_~9ꙑ  FY&\Cеkxq<񩧞zwxE7;-<'?~=EzWoKc-Ze,:KjY% @ @ @ʹ@ EfeeZjŊӦM W! /ӧ[oս{2QF?OP Qe! QS2AXFmwW^T,$sg}vG<(;ӥKpiiְaxSŲJ϶3rO TjZvӢXvBwnG2[~diڅ_4kdC @ @ @&Ю][dHP6l̙3n_"$.T^=>$$tIO=T2laÆZW!!~CH_Zj|0ӣ>䓨XxV֖3x=#E|ͻ .nݺ܅=zvaNƲRYٶzY~].i͛^4I.}세 @ @ @ *p1Ǽ> !oge'GT;vlL! A8!IDƍFpJDO?tX/ (M7TZ?o>:twKI\)%$SzW!GxUEm㲥[7gEnŅ5| ˖_+ @ @ @*@{DY;QFQM?AZzy:$_ w.Mgy/sCmͯڕW^~Gy$D%d'ܰD3,yo11EzyJEޔ܅!A_|q뭷ߦ?s=7),]~5c ْxdKb<~ӪQ57 k ` @ @ @pA5M}YHYᲆ{7Q^ySN9%Q :dffFKs A߾}O?xMq۶qƿlٲps믿o̙3'̳g>BkڵFvBQRvČ{z^yH*W*?;aò @ @ @*@?<vB!\NVHr!N_p%aiذa|x͚5O;xM &M \p1cB/q)'OwD5|@d`YO>:'uZomtK*5k&3*Vx͙E1 @ @ @*@HGN /$NHa5 ID 9Dq/~uhѢ.,z+^,v,;t%zޜWNQD";5;;?rGbIV7  @ @ @ Prss?*U^{ExNXfM!ꫫWT2pb!5&9>h+VD3f̈ 4hϏZ?裐N(6]dg2({ /a=?N;j,><{xxKDЭf&tD @ @ @ &3D5W 7ԨQw W6p@:M6:;8#ᶅXHp'̰u̙֨3k9[nOQMHMX`AT,v ;tM,~b|v ş뛑5|/;a$'Y세 @ @ @,+o8tx1O|gD5?{ώvZ|x8p7FM'tRzb.]™ >i{AZj|Rsy[b*5k~ʱ[CZ͚f%ߐ.;!(&@ @ @ @ C^rseSNy'7DY_~3qs}KΨ{Q\@vBI367vǂo;vX";jZU^6Ѻ/ ."세 @ @ @ORyB@e?~-pllӦʹi1IhѢEZ~:ꨣ~E5lܸ3 Im۶ !n5kV4I&upu׍1⫯ = K/;#BB8Y!G4u +:$Pr4Vfe',y?o9^hǶQFE_~-[Dax[l>ի=~1Ohjժv įM wyR1R%ZՆXHݷ=RfT @ @ @ @b H25!hԪU+OA<:쳛5kLpȑ#333&W_}5d99S |pD8aԩyRj׮}w7aQ띝PTp֐6GIr%'{ᙨsoh8*og{^]b5k}85jWDM @ @ @Tu6^{T({ѨիXxPfI&w}5$O~'te]6eʔ/5`o9$.]\{ᘄBzuY7tS02& uS%?GN|qy1s|VH?7ܭ9h{K @ @ @48SrssիQF+V|l߾}6lڵk;pq… a [ܹf! K,Yzu8! ;,, Ly ~9pƍT۷1 ,yQvB Vggj:ziM:n/x-S5Zz]k7k @ @ @ P@H)XjU_2 *Ur'0C$ٿnUT YSxVJ&,+=}ﴐW[6m*p19c Z3nԺރ  @ @ @ @`xnݚx;q; B1^YvB1ݺ7p@%gnٸ1I9YY;QQ}N];=$*  @ @ @ @@~8j:th pC>i7A9HK&O:ҫu9vK?o~1U}2*2*SF""@ @ @ @@#G\lYaÆ.qM}:;޼,$['?iQ @ @ @(y7GMկj׮ N('ZU{_nݜU3*W9xVݴ @ @ @ @`Xr}w!ԯ_ԩ>YjպwL⽵⹕Q y}{k_Oyw{ mݣW\۪{uPO @ @ @\`ݺu D+7n\`d'R^*;=$|f]:mܤ3>Z'-ܸli-ٵpf1! @ @ @ ХKÇs("qYpMw٢- @ @ @XsϽ{jԨQX&;<5 @ @ @ @@ 4jkO7mԾ}ۯcǎ]v-d'Y3 @ @ @@ڵ?cvT1^[ @ @ @ @e& ;= @ @ @ v @ @ @ @d' @ @ @ @D@v^ @ @ @2` @ @ @ NA6k @ @ @ @2PfL @ @ @v ;F{M @ @ @ Pfʌރ  @ @ @ @" ;ahI @ @ @L@vB{0 @ @ @Ad' 5  @ @ @ @@ N(3z&@ @ @ @;@=7nѣ~hO:u,"@ @ @ @' ;!e{R铲LD @ @ @*RǏO\&"@ @ @ @H@vB6W^)D @ @ @ P'~mFIݻرcGt6f̘sj @ @ @ʛTHHPTX>߿VA @ @ @pCZnE @ @ @ @4Fe @ @ @ @ -d'Y4 @ @ @H# iYJ @ @ @R@vBZnE @ @ @ @4Fe @ @ @ @ -d'Y4 @ @ @H# iYJ @ @ @R@vBZnE @ @ @ @4Fe @ @ @ @ -d'Y4 @ @ @H# iYJ @ @ @R@vBZnE @ @ @ @4Fe @ @ @ @ -d'Y4 @ @ @H#*iso=cj4LLB @ @ @R@vB֕~2[6nHrܒ/4,@ @ @ @Xwss &d1gJf @ @ @so +9SB @ @ @ @@PNqgjWsvf#@ @ @ @ ) ;mMFwQl}aiYJ @ @ @;r'a!foN騿?Ty4, '@ @ @ @M@vB9ٳ !/4,@ @ @ @;s{J~=%_YiYU @ @ @v4 b~a'RJ;1=V%\JiY%N @ @ @237dPugwV,:Jc.p @ @ @ P ti']}CQs|Uf @ @ @ @A@vg-*5k~Up1g d8 @ @ @Dv;픛xV=L{Ěr?bŝڟطZz4?HL @ @ @J" ;$zuk4lW7*`گ~ӢaҘ3 1 @ @ @(Jg, @ @ @ ~H @ @ @ @$nv(^qv8kH$9rI^x&ۣ855NKc @ @ @ @$JW/a3G,;!W84,A*  @ @ @ @@1P 4C @ @ @ @"N( @ @ @ @@1d' @ @ @ @+ @ @ @ P  @3 @ @ @("`J @ @ @C@vB1 !@ @ @ @ P}u:=$|SҘ3+4 @ @ @T0g'T : @ @ @ @ N(w[bA @ @ @ @ N`u @ @ @ @@PĂ @ @ @ @@P6 @ @ @ @r' ;m @ @ @ @ & ;m!@ @ @ @N@vB "@ @ @ @L@vBPC @ @ @ʝr%D @ @ @* ^ @ @ @; nK, @ @ @T0 lC @ @ @(wݖX @ @ @`*؆z @ @ @ Pƍ7z謬t~>ujU @ @ @ @d'$DЧO$:B @ @ @v,7;lǏLD @ @ @*섔mf^R6 @ @ @ @@pC6wcǎ=ztVVV&-3fܹc-VA @ @ @' ;!{'3/;|lU @ @ @ @ -쐖f @ @ @ @ d'fY* @tUqR $!B"]zED@PQ@Ei"6T"XPkH ^RH^f&Yy}3޹s^;    v)@u]6        P`G7" x@IDAT      `T'mc       ؑ vtX*       v)@u]6        P`G7"       `T'mc       ؑ vtX*       v)@u]6        P`G7"       `T'mc       ؑ vtX*       v)@u]6        P`G7"       `T'mc       ؑd.539ِ%ݡw33\\=       [|3Wtnb:XgM [aqgąIr˫l>5kڭwf-       [||`vzQCdi3?}kiQ 7:G >       .LOl֧/<*McuOzfŏٿyA{|E&/o$"d@@@@@@@NS=ci"7rFQLꠈ̈́QGlMj>lj{2B3o&       : P#fALI0j!34QOqPI 1'M[8}픇nޯl#       zI0ŅAaj~I^NO*UqN؛AyȩI       ^T'%YyήZyoLԬn]1%#.]>Y)ɦ O0lO5>[wjRVx-._tpr"2C       T'뙷7b2 gޕm;{Wj۱b˄d^[^U;}r.SD       -ϟ뽌: /E.֣ ZpXФS98%Cg+z@@@@@@@ P ]8IT6 @@@@@@@QYST\D+`ijZ)[vِYqbO8pSmg~Q2C       ^T'%Y|uZjԍ>K1O,Z >2c6ڭw!#"       @xC >/>e[\       @^NȫX/ ġs&cyun_f'G@@@@@@@(ov(6>J|z&7|jt?ΆE?ͯGŠ;t Yd:9@@@@@@@ȫ yn~uP@@@:#bU}*V P%&w-@@@N&ׂ  Z#<%::9{yzjتn6[uuvv~O &ذLuiϽeGQ%&۲WMW7{a'ǭzˁǯuWTbv΄ͫ4 JmŽQE>M! F@@>w\   PTCoE_K'(Tcz=d]؅DHxH%<   T'T   @ &b  nD\;ο1@@ov+"  V wwr⇿ q/ٻ1n![A4St?iř!c;eVʔ&;Vٳ}ݬB#C V  Dꄂ1@@A^vrhi.Glٱ~YA/itݚ\S|֫uA'挟''/Ri2 -RSn\ppp_dYY I =}+yx+yϝH%>ibo߀ UyP~腜s7F\߾ m#L έk/o 2l@(z=VLJd@@@@\Nȕ   @ 8::ȞAiɪٳ!59*jܱfdžewKRVI'J-ա)I |7.!-%Qǿ}{ #~:dj^8{<")߼j޼הjue ~~rl kЬ*/;J>5aH޼rѻ#8 q.E7ߺ ;'3#Mٻ{v=4- B*ׯΞg!ĤY^<]_LkcWΣ#rZ;{`j_1QNBT*穩!OQ?$m0E@@T'H @@@X {z߶uKTL_9X3>QaGgS{?-l_ro^S_+/Nٱ~T i׵k۷e/)ڋf$[#'~N8q>^f¡~co({&E/'_L;SJ/-ˌ & ~7K3ʼ[=,q @@@!   ]ټHn],&ȁFe^2 2x3Pr9Sgbe/}nTR`Zީۦh"6Q6y޸|O^2CrRLr./[.MPj߿D*}ƺ (.iѾ?z1\Gvg~eXK r _Ll\!3V>$ÚY   PrN(9+E@@/T2U' s͈ZY$zn_N9:Аkbo&,_^pU D޼RloMO}#{oN/S -J>w|?dy壶\BQQxtٴ@|:dQ-"  %V xTbE r7n\vmzzzA&)c:T WŒ@@(ek/<%UR7}@@j\~b|3GT)jxV~/+>l}5plP:e=oE_z̯?kgFzѽ;zܔYyMUoбnUCf+HSD/\A!侸2 gTfDRfLc.V i\B唤"mƕmjҔ/s{ڕ[uexx=|'MԬ|;g˜)Vm;QpdK_rS]$pg|i;c>uh%'Egf+, 1!דU+E<΋  dt4{MD   9ovHKMJN*+GX,Zlʠ燏е̜>㳷F^&3xnwE^??jb叏}\`9.xgPpx{Ar)(1U懽o %("~Lf ^;XȓʠQ[U_fD$ѠLx<4tBjuTAi|=y(^<{\\LZs̮A z [y-vDA2lRٳbZ  (yD]-.vͶ9@@@D\r)ncW?U&Ga'k\BD˦]@2հv/}q<|M~c-T&St7RDh%~. PχQ6MqT "/~״sڧASs'~-DE4A߰W^GRW/IOvyhdMT~>59)^̵i;#{6ݩ]@&f|wv}Di8*P.е(֞(Y,qN@@@ P۟.]6!  9̸.DU#^Jk|zT&C.IKM}dPrS zv#~(Uꇿ8;hУsNW.Qv>氲i?|Oe~ A!;lkMk2_Ў+?iLs9y sUcV~*kvkW,Оkܿ<<}|yv UymYOƚdY-+A@@J Qnݺmذaڵ^<ׯ?w\Ѯ#  Il58|_`7hѯ\Ŝ#W=yhhtpo}+f/ס1v_?0EmiֺgN_^׽7.O\ LZ|Ť_5=E*##&l{4ʫGVMXxH.Uok'}VX?0;Dgx36/2e<ğ÷a2ir[,nkf=   @ :A- ?zX<8p V @@J%Ek*ݥӨE'mRf+dȌb7AUkrC2q^q:n*T [f_[ZB'=-HBD衝_&I{ ;M*3uiPZԵHeRħm˵:Ȫ>WWuٲ2{eGɌ7Ej.'Iir_wMER|̘ l@0{b!YL2@@@&@uBI\/  ط@rbXKL^4fwsT ^u囜xK;Д m[vim`N{z4H>7 pq)UF]=yhEo|px|-u6__yQ;m@Ūڤ*#hTP 15uG6{&=_}W9pߖߏqdN0 *5S>Jm>x X>c!Y+   @:z.@@R E*)Iʦ).[_!"g&-3y#{֋k?*kBY\/`kNI4zggWP=BUF4N#j6yV5<}<%b׮ 捫' dy1DZ`v'cC   %JokJes   = N١]`e2)ݬ333d= xzAfr DI2 +΅)/iI LθQK~3bL}9ȼ.r62C02U UIMa޼b:\fLUlm@0{"OZ,u@@@d PP2;W  v) J2SK/wotz?%5i]̭諳^~PB;:d4ߛo_[^I}{Oki7)RIml7W3j}oZO $ūڦ0ʐ]*Z*m=Wg|H:Y   P2𓗒 U#  G@RbZO1z+YV5o]8{|צ7|٦hs?^7~}tF [kҮVV54n qf{ZM&񰼌H;IfĦ#'{65ߺrLell;Jhb17.]2ui60iCWȩ@@@,@uBI\;  ؓ@K~JUjozffDH|?7rd}O*FaaWoC^Ч2 .]g`P1SnԲ lmW0{:Qy\C2uePֿ4ӸuCc[k~rlT/TvVts  h_$E[ZdѬ"  %^G@@_uڕ:9g*/^.ʈSNx_P}]}dDZ7nY{Hdl_ӂ)C>~o̟zSuԿ|厽W%M͠*FN7cl7QnLNM㝿Yϩ[c'5TaôУ ȂSC;ר~5VM̌KjU iTRum3i˜xaWwbj1;7.Ty'ڼ6A{!Y    @:z.@@c˖S&%)go_ D#_S Ͳ~;[yȐk>~_ʼw{x*!.JHSr.2ӕ׺'li~eR.2AH2$'Ɖ_[S$Gͽ%ƕfo˪mw0af,u̎ɂSt=^OJsyӞ0{ZuU?xѸ몼h6ineɃ~a [W#M}iW$ΑaGT6u =M?$mZ&G@@Iꄜd#  $Ѥ;gjxٱGM{^C飻zvFCN`ؿE_֖&{ŭxkv+9Sw;z\Ay[QK濡̘NؾgNRyv;6,{CbÃ}[W}R įe\Svs5߼: =1In56suswY#Zh js6o=]Yѝ_0E ?Uv)m{?B4~l}bQi‰ltI-i@@@,P`C   @_d>4tBNk֦g&Oٮ u|F|.7v1<:}]jnE_/җP7@ʅ3mVm qvvmЬP^>~2=ŨPaR^zQv}صiߵ},(DĮMEC/fOR$? Q|j9T'*ͧ&}u(n6Cjxhf}W`d.S#  %V{p@@cmz{Վןjs󪙗ҁΨ+k|ec/ݳʤ)m^lK%DkAoPM[MJ![j 5RvnY|qpp4 |Zj)cQ\cϛ߼f6;KJyX<'gg'}^i7.iS IwquӞ7׌}BrfR= ޯӸM 0uzתl6xl@z3#奖\*=5g![S4kk'k*)Oj9_4Nd89ߵ/lA{Fe|z-^t?U;1(DՅvUwGKo[w5߮ vx}[Vih7s{T)7쟎8.},io匍0_7Gl I}NT8tyHR9    p0@ `Y`+V?mT'  Sc6<5[Qb>~eE A6=jl Cѝa'F~1%)>%9A[|TNM4XF6ZHJp+J-!.*#-խk2Uj6y,衼R:*;=9oŖ*etpr.]ׯnиi@@@@@@@ PP@ ?'qU'c_w攌xմ쬴;ϾW@kF@@@@@@@u*l^?-64A;†տh}韍Cd@@@@@@@K$3O| uOy8:hI#1=D@@@@@@@]|]˼L@vff n.+:=|N=͚~eʣk_wv/_AE=Dlc_λgf:q#k;88$       z PdIi4dUlݾߪyׯ98:AeF~uO=7'f:z}Х L       .AL|o:1g(đP&bG;ï`W-VP@@@@@@@( p9l  To444y~B䡴'd@@@@@@@NK2(N(xuB|dDlI~symSCD8l#       0gg0ue br`^)9~u(Ŝ'23LǾxB/*hY.ogSDCMƌμ@IDAT " e2Scx+e}˔ 3@@@@@@@R+V=~y95/ܢzϾMZ6iQ!(̩Go{FCXKdS7kG6?RwXߟ       X#@u5J;xxlޗSDžMwozzDLJT%i"       PLN(z,CFoWKV6mqV$       @1p,&(ppph7bA}Sz li ~B@@@@@@(bN(\ܯ΅ŝ /e0s(囷rrTPw0)+        @uB0R' @@@@@@@Bi@@@@@@@(T'[υ#       PHT'4A@@@@@@@ PPbo=       @! PPHМ@@@@@@@+@uB\8       $@uB!As@@@@@@@J %s        i@@@@@@@(T'[υ#       PHT'4A@@@@@@@ PPbo=       @! PPHМ@@@@@@@+@uB\8       $@uB!As@@@@@@@J %s       s!dfƍk׮MOO.СCwq9       )@unڢ4{MD       -A;yfb"@@@@@@@"t]tm.&B@@@@@@@.nݺmذaڵMZ<&Z~sZX       P= =g,s 8q+X       `.oF@@@@@@@NR@@@@@@@Kh@@@@@@@H;Y,@@@@@@@:.oF@@@@@@@NR@@@@@@@Kh@@@@@@@H;Y,@@@@@@@:.oF@@@@@@@NR@@@@@@@Kh@@@@@@@H;Y,@@@@@@@:.oF@@@@@@@NR@@@@@@@Kh@@@@@@@H;Y]jڭx@@@@@@@(tS 䱨:gʕ;vf`ei"3(GWϠ6*wo3       @f:vy/O,ZyvcMuBĚU{gN=}B5!3#B.n߬ifֽͫM@@@@@@@t:byg<ƺvh?mijX!YD       T'舙#lR7Nj5[&*o4dS:*_ NP6N|d)"ׯ6fgO( Lj^Ce3hf$&b~ =)ۯn k0♂o۠@@@@@@@ovКF&Yy+;Yں5)MSW?{A7Q UZ]ްm}JġĄwo8zy @@@@@@@ P}θ NOuVٞq2/YgI/ʤ ء_{:qh4ہ$       7 7;ekխֽg.CcOOFoxzpߕwLAz-Iribq_siS.WE ]\Ϛ+        :bapeҾ=.|WeRi1fL:BYO`X7Ѓn~ꄋC! j^e&#)IKJc_Ϋҥgծ=e@@@@@@@x^yh0Z]qϿ}:<_fr!+S[㛥w޳oM{}kSA B       zIaNk+?SoG7.REeSJMxˠY;uMUS88:|Ǐ&       z E^32O.-&LεCo_GԑdVjmxtrsSvqP}QT5T yx`/Ke7M@@@@@@@t`]m>S)Os^t)yt*m6~ U?h{A@@@@@@@ T'䛮k6<@'g]{Lʟn'fsޕWoX6 @@@@@@@K$0OpβwVjʞw&dF$]o4wr+z,ٔAad\qE"~1/%m3g77$@@@@@@@@@/<5*ra洃|3eA1㽂2 ~qpn ?_E1^=5Ъm&       : 88SY)P=~yߗwnQg߀&-4{T􉣢 l=B&ɦ2ppt5NeG8SFO lBT9uE@@@@@@@ !tzڬ{F|Ń+}sPUju;ְtɹ/0њA@@@@@@@ T'MQM f~<`xa],X=شn_w=dRT>@@@@@@@t:bg**~|Ww.,lX\Dx)ͯFw-߼퉝˔i{{¦c>*NIB=.E *(RDTTrU䊅"X@%t齄 $$@z/LNn6d7y|μ9#LTš3d'_ttrһ_aa        `uNjɄPwDK4zO;LjY "       PP̎       T'@@@@@@@@:j}@@@@@@@N=       U+@uB2;       P{@@@@@@@Vꄪev@@@@@@@:       T U        @u@@@@@@@Z֗@@@@@@@@        PT'T/#       @@@@@@@@j\v֭ϯa}vG       :jڢ4!22j1       5E$7l`@@@@@@@$@u6!       P8jsРAk׮Ϸڤ1њ5klc-@@@@@@@N3 5gƌCum< V      إ';cc       ؑ vX*       v)@u]>6        P`G"       `T'cc       ؑ vX*       v)@u]>6        P`G"       `T'cc       ؑ vX*       v)@u]>6        P`G"       `T'cc       ؑ vX*       v)@u]>6        P`G"       `T'cc       ؑ 6]-ζű,@@@@@@@p1'*(-)9k~OM-/ܳOFvr1y>ˏbι71*l'g*F@@@@@@@຀yv_ZY ~Պo|ռ% {f{ȡݫ'ywF܊2!?jz|NOxrV=б8!#-V.k{P^L]{ϻ3 2e  ]COW:ʎCޝ%E2j6Q&rb^t(C@@@@@@@X,::UO@D'yqafea߁ʮ޶WPp-NFϮ0'So2A@@@@@@@,CqBC)rhcdF:M*w?&y.Avi        `-N\عUf;4l$q.!3lNE7Z Sm\:G( )ZVFh#       Py*oh {wkCÜE 3ONGhkն=Nx)K U4֓WFNee6       V:*M|A^ۨh'n\SS'ʸlff\ڻSvA> SF~5 ʮv T'b@@@@@@@B' J䧧ɫEuBOK~{&1~g*㢝w2iש{0(@@@@@@@{'XѼIʶ:J:~~mڻrrpFhz-3?Qd~ZQ#ZrR.If@@@@@@@ṊRW)7s5ޞZv.CAVVҶ?7>>)jLC "#\<<[:ʄŦ8m@@@@@@@*#ѳ쒢BՕ#~Z;xw]Ek%|IyCIa M-:)-.VN*VPF@@@@@@@b,‚t=^ٰ m\dUN2!ѲX_E0+S5.Uz(@@@@@@@ Va4cgwwUvp>STU]߰fwQm\+@de8?O:AA@@@@@@@:T'XY\}TF j`Oxo ۢo{elfgɶhPԠ       `-%i<ήz-Z+;:81䦦Lr irx#+2K@@@@@@@P`F&[[yAݖm]CmwwІr4vTnɐu2a*SL\Lk^ x[~2rj"6ԈҒ룎       XS3rk\FCB "SN-=Q;rȳ~_ gWwQ)1eW()*:0=ū~٥       N"S?E]'E"n?;+霌|}ww5Z_Nj..,\;el8i}d٦       uN5mD8Kw/Z끲|ŝ?/C j1zFP~m;ny(7WFt Q]q+x@.mTVK       XA s0NNwD~5թGC;vo3cSmS>stt,(ZXlyW$ĭ\oMOXsW}sºUN/ѩGEh!       `Uid!}˪q# 2td}s|NrZ<"/44{q`.8@@@@@@@&7FiD!ZݷQSutvNOz<{X)kD@@@@@@NNv 6!       PN0`b"@@@@@@@j';Xa4hڵQQQV6&ZfM\\v- Bv>X'      +k8~mSk>Q XsFۘk̘1z smc@@@@@@# cN%(8AA@@@@@@@@*@eJ@@@@@@@PP       U @uB2%       (NP`D@@@@@@@*: P@@@@@@@T'(0h"       @PPL        4@@@@@@@@ NTD@@@@@@@         PT'T*S"       BM@@@@@@@)@@@@@@@@@!hD@@@J ʸ^\\T+0(^ȗ95]7@   T Ug[]uvUY \\]R\$|} dF@@c/M}.UF>/=E4urv]۷^mKlvxǺΉ;@#gY޳ie$ͷΘHnh鿍}쭻&`$~mkKaŬ_&w V~-eІfkֶP"   P-T'T --)9k~OM-INn=4lh'+<'/KQnnӮY !@@H?Ū,ث"6SoLzQ?zh:d̔}nlB[***{7J]9ɘ$BیSZʿ(;.+SEݾǢ|S:3|\ЦzG "   p#i\nM}U+vGT7XRX/~N,^g櫽g1[nXY`ֵ$#  @u \J^8s үaxuKLY@^nCM[u6|"oC 1c T&6zaCI1Cn3  ز t6Nr/+\GӫƎZWaz$(q@@e'ޚ>Oזש[[aAo>u}W'_T-k=u;C5Jz)3%mZʇB@@g 83ovz/iK<vP_Ғ⍏OJ?MX3ɤ!  ~j8צZ鞈nW`rF)5¦0   `l%b9LŰcIvxdzf-tmZ' 2uqמp*9/m6SM" @@'m4E&'jyԦo*--M4ΉCT'h]nؼ _X`|C g @@@ PPyC gMMubgw!, <\FD+(}t"tH{˄/Խ2x[O&^6(  HķiN,))V%nNVw+´rAr=~x%#Z\H8)'tbB`P#Q5NPFB[/+#5=nC"tQ}OUk|pNNY!    U(@uB:zެUikv?.p_ЬCarGg"9 @@.{z1S^xM;k6gۚ%}e!=[d[kaMۥ^:WW/,;̴ĸʗnѮ{ͮNhT(ov"r/dM7jJ29   T U[i*P-G3rM`.ߴNs!#ɪ;_At1_|z=G_@@Q^4ڻyf?}KVj d_M;q-E|S$B6klm6XFx67;YNu#Zhujd]Jwtt= U{J>SۯAhw-LINLrIlO]?HxxzhIIk" q jB1rU]*y:JV'LKMv /ׯAú~  6>"   zNR#/̐/~cm>hNzhiI [2䬝2@7mOv긡   & >w?޵67;*kYm>GqB:Ŗ^1up mZp黰@IDAT1`6ǂдUDOeu‰9~P=JKK %[Mĺ_6uC˿~Gԩφ_W?44EM)E=ׯo۹|pvUܰ˧.޼]W]Ċ&W<Be*)3wޢ8pD5W^bgJ1ᾭdLQ!w?**dJnHzL}gTwmy \jv7^PݿI=#]\k%qDHc{MFk;   ` (Y?'q9OeP{|Cab>?)MޱH@@{oՋT-*2>UnqQѪs.x#;kRtu'==V,IΑZ eD9hr22k١ 3+cE4{6ˮ1_Ʒ>O ˏ^tNڽM>㧿ߢ] S m =%gznϟs+bK]uE+ێ=Y:M=-~{wj{œΞﻏ RmD3}&X=X}9Yi ֻL_xQqJJ_<+~3:G=KWZZ"    8UA /-m;q) Dt?NrC+Kh-z=P&q@@e>C׻>"՛i(XX/N㧍&(/ߵ{D]|e nT ^aqԑNp(U`<4 xM8]rUܹ&k_8_&ogro# REaX2{#cA9UnvG/#v*jx8Sw=߂.r^.#bw5-MiƵ }SpJ5Tɮm*yS\  cNG8l/f#mza9^^p$  TZCAj{z6P`ط7C ⢔iNe(}5,3'8tT ..nM[djo0چ_ SV(>t" \Zٜir66U?ΙEEth%ǽ԰+&SKxb(i?}t%rTo(vA{$ؾJӠDo7?/w#;j((?bUF2`@@@ P`ܧJF/*u> ɮhdKHھ9% 29Ul]R\~z3wP2q@@qggVE$[OT˾|3zW٩sDt_4sT'׷dInZ F'M_ޙʼa&Rp Jgāܠ|}3wi^;Ozu.Gǿ΁rpgWk*>uĒk L_<   ZmHU $-_;4LwFCAfǫ'*[UVo;aS]w.ܢku妧_TI@@N_}횯\: ;MvۋM|9q}z_H|ͬg{>sM7#8.][5Zɮ8aIgr=qhL UArHo* mW?iN}2ӯݓv%Y(ީ)#ų|LqX@U}>KhԬrir1Kj/}z oݱw&m㙓чntМ{d埏rج~iUx|괻ߡT زwLRUݘ=Qu]7w-:kp1'Ji.5?C5쭥Y"   f 5YWl@NyoƢqOMҷSBafƥ;oyﳠn=嵆{v} ݨoCsG@@{=;3M| iھOwwS| %ʠh;&$.uѵ´ >c($PKyfm(W2%L@B(72ׯ5Eؒ'''iJsď.S|fN~!z.bEц_e˶5KR.ծ1?8nb9oL{GM)K*ʆ7Z&)..>{*ZhkX}RmE] [[;+9ϫ)YO_wtȇvhV5QHbE<>Sհ^    %ӈ@~z 4AFj́oiʸv__'G"  ]ַwXe;$~l)f:g4AGY+1ߗ.^Xv>ʗW"\p5%IЪ|ArHۮ.6L{+eiXEŀvbO m"eS>E[2|'?[>m=)LY r> |J~VwUtC:~}.'f];p(?uPt7RwV #;>π;&?Y }SlZ ͷY@2   VIGӮJ:~]<7upmD{#_R%Tg꾖cW%E@@{}]yaA6Xad/ 9n<|CQ2M|+N]Z9sm*gS}73 rT]-h޵O..ňqOJ8MHcb{s(7ݣA9{Hu`nЦczE;$*d0j<ٖ Q '(lCHd'cʝQ{>A׭Ԣ}wA2ȶlxx}ٕ Nl !(ȯ!6֒wG@@@b,BeuB%{$N<4bꡋ~}`ܔČ?tח0䟘NXZvb];4z~̧  "wכ,=bRz2G۸k ڠ8@ԑxDT{!ޮ\C>meՂֹC)sq]*mxQCւ- 1t_]Z}G.0΅ mBa=}q JpqKNNUDtOO:k]Kz S6."]w(ݸxNmw@@@:,.+$fg&rv_. mrn<ۢ2͗oId<-?wi֪mrB   `;i89k#WOZkpl%Ҳ}^Kp)錌?TX9 Յ֦s~mç6x"bҡ{dpXs#Ae%hwʸ*._<y٭o+\ Hzo-+6 ȏz݆%.m!gXFFp*Nز{!i0?ϟֻGBvfS0t2NJm|kY @@ cZnGF[/5%?Sٗ.Gۼu]AU@@@{(,?M{~C #z?l?La 7 'cv(Ь.fМXo@ZL|Tp\BV5kݻhS]V"g_XFW66Wv...޶vvZ_7MKƷEn!Cz޵UUڵͷV2#  5GM}nݣXidMY73Juɹ)򪃟} =$%~䨪_)=BEס|}   P4 _v2pn;Kn箝Jo ޘHˈW~-_\Qup/:LA7*1QLTWbur&%%~0_ PE*=k\tn/_hF"8鏝+9.tjf]|k]*A@@@N0:ɵ|k(lcʼ.ޡ k޵XKKʶ'MܰZ2.gAzQ  -ݲR27n<(6&r=CʈaPyՍllCr41;;t';(㢈A٭]*} i][Y]n݂wiC?W.WEݔmQWryyK1{w1XFD~HeW3r~_հͷjt@@@,:^RyrW/o6p,Eg`Ɍ"  @HM>g=ߊ kѦ-c]?ᭌOw2_}ez &qAy92"V'l4m4So=6֔a-]][|_\Tdp\kX;Z^y٪93ӯ Vko_fF@@9VCV; 褜$IeP[l~6^kNi   @ X4?y4!mДHHx+>9Yc997,Z8DDaoevF&ئ_`vȈAYqC 屉2]?n,A} }[S٘p]"*T B"w|6~O^_j ֪p$   T(vPy\;u\Ṳs%e[)ڎ?Rfo$O2ȶh:嵴@@@Kywi]\ qrrjݱT+H|\TvW/\jЦSeZžѻeSn슆'Kj<ĶmK>UcTި]A8b)ePU(v_vyeͫ$D85w=ʠNH8}zUPM:{|NSp umeh@@@L:t+ePZ1awpuQ6eH36<NO<+硁  #v(MX|%uʜеꄳo[uSz_ şhšXHˈW/ٽWeU向vF3rbH|?^o WbnV퐈^V ծ8cZ]0qkmuuKx]~}Մf]9svEڸ*RTT+wPU'Ԧ7RټBߢ}w6[Kx"    P`CB /*ZC'g#<]   `'cvjJONO<}xztw*+s}2&CؤF]IVE7"Tz"\,P$UrHfq1_?Tc&uhՖ}ݣ=@y}RFZ2_1YFě|3W5ܜ,ZgOE˭1ƺizwGv}TwLS9ew 1 EޚG)B)#vhGo-mA@@0W ȷ@Sn}IQJ:'=_]vi   = |Wyّ gko*Mwz33V\F-w1dѼߜY\\wto {ch2Vi۷a6^ӻQCWxF3rbH|^lͱM1S^.Ug<:߿FKJJĦO-M ONҮK?[s/M73 RDg8MU56G9ӧsL[?=E bO+ghdIʈ}pGԌGnٳANkό딓J k*hk_o-CwA@@@DN0ioܫ߅t^ڿ{_-\biIɮsw tb8٥  ()?S[5jK]RRoGWZF$} ZX9-vGH;WynT{Ck6_ ?/wEه}9xTg6hҹo9U_Hx]\.&z{zĈQDµԋ澤̬3'|sM حHlZy^!A>qhkU=r2U;j{ȮlԀ    X^Ӡժ]WFRD/ӎמ?벴ӧ 22.`Ί N}4@@@fty7ʿćO?aaRC.8.:GZF0"z0^t=:K8vDl3PXCk4yݥŇNS 6ܧqp o5N&q=D- s^J8F4ifىve5qǐf^)Mh־CY5U   )@u`K _|)r~Icum C{o}m{   Oprr7_wmkݯ8⯃,wS_Z+<-N0R`2j0o=e o5 ”4-JfYM{bOm\oDlpYhs6n("ChW? iҪbho2@@@T'!ZݷQS^٥G;=)   @8[F?UvMPtu+F QEİ{?"g=+0Q ozqttjѮ6nV:v$50 D$۠IpXYKbz{3n+^>!8ڠ?MZ$6opvq ϴϟ9q6n$ҭߝzG 굹Fz;vgzGEƼ q@@@ Njjsߎ#]_|+5~&i$!@@kQ 6߽NzvW/O:[u0K{.+6fxWGqG?DO~C_6ի(_q#aӶF>=5}15M30:S6h">b?1#BP񝯶o$S0cGwm?i"aݏy z,nYg1OAf{]5O8pjm?bCgd|'_9k A{w@@@*p,-sra`ūQ k~H<|# Ы~PH~"[Mp̘1˖-o_jD@@@ Oqp皳2R3/vȏy@ [5lkm~-%#- /íGXv~6۰M1{=ʥ[v@~nں8!yYo‚;VGjrbbz\[z^KJJ;kͩûACaA(԰qբ}wsuIo-[xF@@1;|pKӦM7o{lܹeW>vY%4s,\  X* l4oߺGa֣MM>yf݋dWW}GC 5).6JiޮMդY @@P17       @5 PPG@@@@@@@ PP17       @5 PPG@@@@@@@ PP17       @5 PPG@@@@@@@ PP17       @5 PPG@@@@@@@ PP17       @5 PPG@@@@@@@ PP17       @5 PPG@@@@@@@ ;@@@@@@@:_O>-sD{ٲek:rHC:E@@@@@@-ofʕfi#FԘNvq       A &@\uYr5 q        :ÇX]C)f5!';XS~ݺuQQQ֜:pUğ8ŻD@@@@@@;ʫkٮƍO1ٺsVl5EiBdddM#@@@@@@G^tP DGGwI|;v<62';XAlذjs1       2VX}j:j`V@@@@@@@J`„ V\ug,,s8!***??_Ϙ=֬YMZW8١:Ê9>XcIvxdzf-tmZ'D."zC.S\U+=]:hwwHoF Gc6ri˿@@@@@@@  ŭҶ3 ,*͑/eWkv?*#/Tvu˾w(-[fx*m#ɥח*sh#      XE`ܸq.. DDĭ2]LBuB<_͕(rxv$9$۲rlt(6:tn5vd_;uBvi   ؠ@AAAjj+Wgtpɹp©SΟ?VՊzg&%%9Een]L(rLŵ   "8tPU*X|6ukG_!~cm>hMtWO--)qt*+.)).r윒N] #A{v^>^ֲK@@@@)i&ݺuQ)7n,))N7Էo_Wײt#G嵢ݧOGGGݻ7>>^9wݺu;vظqcՅn.[BKLL!vww GiwE9rHHHP޻N:'Q F13glӦMD^HO4H"`Epۈ06p, ҄ BB=Hシ˙wܛs={/o^k~7w @/r}vR$T>^f'3&5|vQ'6mZv[?gώrH޽Sszv1_|q֮]9ٳȑ#TU{y睪6ᆪGΪ:.Ykl琊G5QԊӧqC 6!@ @u8#> }&4xX6lxoS BΝwgD*vӯe7Ζ^~!%/uɪ2 @4@MmFpw~q5ӟg.9xlF+<ٜwy"#ЩF ?gKi<@όHL @XO~򪫮Td (o;T`ڔMkj}-[6xOO瓛=3x?ۢed'= @ !vSrܴiC=ұA EA m)25!wٲew}wl*W?~\>5!1ˆmU @ PBQr oјOgwmٺM]QX>{'9sf%/U_pޙ%Wgbԧ񡧟ݶK|U @\o[sX`Oo+ui'5T?ѢE@' &&?u']L0!rȶ!""!; @#g'rlZ#8١׻OOߵS][j+V<럽qm_y15 m:w1lar w޸'h?s>}nX+;~lo~7_U @ @ k׮}]vmKoys'Ȇ}ݷ[nm۶]jՒ%KL2sbuf6lX28[ ;w=zBb̙3'1W>ٳΝmti͚5I% @ Pr2K.i'섒W;/ߨˀAQC+ 픰a{׎>F m:v?_۸zU7;nc>tx]zgޒ_Zj=h @ >x7L0iҤ|5_XtiIP͎%)a R?5T#w߿1y xNVXjA!Һ/1͛CĒSy晽+yl?T\uwd޽{w!!.\OD*CƂ @ @Tgy楗^j&4ζ?ФT-Id'!|`KZ8?s^^4_TeS1G|gm5;aj N @ (7-s=#-'GrRcb;g TSf2OCN[RG9+{Ǟ qTDoT۵kԲe˝v餓NHȶ!@ @@T6qd'4ZtI+~ N&tݷ{n~K/4$_l,?B}?6|ӞI]T[=" @ @h߾qJMM+޾ǖe' YW_}u=Hn]k=;vݺu.ׯ r˗_¡ 1A҈|vBK&$Ľʕ+Ae @ PZ~&;T2;a֤3G_vE+W_kofo~븏G͛6MU\_mK_q/xݑu3W @ @! A?zRWW^_5mxC8p`Lo퓑ׯr.섹sO5!9(GDlVqw @ @@d'ݰf#lXj >w8w9s v4;=%֮N__fQhѪu}λ\o6u{S?x`#  @ @a|5 մ/=z36 qC'>T`vB C%uCI ݻwC^{ #k׮G @ @N( c Y<Ӗ04668n-7 i;3"& Tjn'2{?d؏a/??޴vM.nɢ/:_olL @ "P $%hp=!?HHe]nŻ|dy 'O3,RM/d<7mZlٳgdl9ΌM q @ @.-YZ| CceׁtZGJV_,9wԄh1;+ؘaW&+ @ @@ Tag{LpZ}!v5k֤I'i(]qau]["ΉHD!A @ @Xm:uNo`?8^uE׹STs]>?|Ŷ!Q @#P̟IUw2dȁXyF/|M7۩a ,YD˂:t<;섬 @ujӦUɖ= OV*{ 3uի߸|]s!{O~:+zX  @Q 6  ҽFЇ>O~o߾5U&L0wde9$;f˹섂1< "5BL @ @{5]M&sCU@IDATw9r.Yo|[6mWwgDj Ϳ7<&_U @ @Z lܸFk}vŴ{y),\ŋ98!2ڶmk_$AW.]Dܿ+WLE+Vd" @ @@d'6ݻ zmv/W_hq|;ΗWz~=;BW_ @hٟ~ASPp"ev>8fϞ"g͚m /#rڵkm3lذgDwmzxj-[V섬 @섺x`-}ՈUl޼l[=/[,_B^;&Ք;5ye6ɪ2 @\!7Xti܀OϾ,Zh̙o;SamvT wޫuvB,:޽e& T%@ @. ;5a}ONX1w{&:)Wa[';sdU @:tc|oiڑv8յk ̀܆ p@js=C }}sNHE 1lӫNx׫y]K @ @ % ;!Rj1Elٜ̇r'{YOIбw䥅/I^M|k}Ue @ ^ XiO=Tj]AAh֭[cNuizK]y✈]v%{)"oɓS"!㤓NclvB=V )ST%@ @J"P9%Aq{S,lZnOq>}z ۣÎ;.~ݛVSxm_ lӶmqK @h_f+;jժᄏCRZOӎZJ<3gN*fǥvڶ`ǎ[A w_6 ^^t9/_6mtw.[Cj< &x  @ @@ d'Cq[# IWΝ۷WcAǜFᱯ~aêUH@ @!0`>c=9 qHK/4q?hzv3 DF.E&O> Fu睷GʶYn]w/1oymY&~С`  0~~:6f;ӦMH#9#?O @ PIvPU5D*@1{TߛG|o}Prl]~_TQczf+7^6sfC?27n|k&Kv?U @H kH ϾwWb;>ZӎCϟZf衇Ї\!0C"`ɒ%BXjܲe˾}wR#9ZX">y3#b+h.ÇO1f̘3fd\L5{*D꾪 @ @@ d'Ch_CYlI> ;7^vܩ_Է&im-^~u|#-un?}e秎wОvm!׬Yk_~_l[ztν} @ @ %Ю]v7HūK].^ߴwYfŋBbgdȡڭ[Tc= /_G52 ovX+D^{ϧT{|j|\"@ @P;ԯ17uߙ'_47ի^uECQ́_Κ_nټ2, 8tK @ 8ck#88}b4ț?ꨣnc1xo'x ۶m3Ol8!{)Fqf/ @ @uhYQߘ>]|qZj}؏=K_q|14u}vV>rY۸J @!бcǏ}cz֭[}q@vݾ}N8!6'ZqU+6T83 RUlO>zjv'\HYąԉA"N; qD @ @@]]1l3|zkQǟ{}o {zQ~m7>dronlݾ}-]%@ @@?3c6m4}ݣСC ^m`M;A8?uܹ~Ppq E4;wu|`!LrJ$al bK"2* 6;nI @ @vZlٲe4(+f>|Y>UӢe;}ra3זz7b=zЧocH1Þviqge0oE @ P7n={WZYǯotС1{w,XbŊu֭_>^GZ@|fwׯ_Ϟ=klٲ35⬇5kDHDwyQ7m4s3f$W^ 9UC 5 @h6'8ߺqNΪm΃O:-Wcj4 @ @@R o4hP2$7/Sr!>{WIFnժ~J2A @ @|iI @ @ @H NH @ @ @ @%PbP @ @ @ @) )U @ @ @ @J j8 @ @ @ @ % ;!J @ @ @X@vBA G @ @ @d'@T  @ @ @ @ N(1 @ @ @ @* @ @ @ Pb %5 @ @ @ Q%@ @ @ @J, ;Ġ#@ @ @ @RR  @ @ @ @@Zxf<܌3nӧ_&O\pE? ^$@ @ @ @ T~.Ǵ<ǟ{+W,pMd9s›dM @ @ @L@vB cׄfP8C @ @ @ tVZU]t~t-п.[nNHԦzm5]jä @ @ @MY`:?'[<{ԽZꪵxjK @ @ @4!z;aڵR O5eI5 {C @ @ @K`<@jNx*XU pKvGLA @ @ @*F N0Ys!7xƍSwHS N[s1Ǎ/+ @ @ @ Pyww2CaJE-[D&N8a„c~Mt M @ @ @@>3<i Gyd]4 L2eȑx.p@UW+).;f9ֲpr= @ @ @hzjhSҗ_5|_ꫫZIq 4˱ Pv @ @ @C@vBhѢٳyڶm[UX @ @ @hT&L&5!WMs=MFvB= @ @ @_]nam**!u Nv(+ @ @ @hP';ԅ۸qcnzܹ;S͚U{'4'h @ @ @ n&ļMl (d'` @ @ @ @`@1:䨊otie'4gg @ @ @ H}Eh_d&LvB}pM @ @ @W!Դ}]y3ke˖*. ( pQ! @ @ @*QW^z_hѢԳgym۶.M2[ @ @ @hsORb=>z5a~ꀧ+ @ @ @ܼd'4{\p#GKghJ @ @ @J ƛv-z?X#5ko-:6.cjvg̙7n49 @ @ @#{-[o^M*sԛniƍX[􊾵$NhQL_^˗ @ @ @<;[iWt 7z̺MQvBy+.[l/#Y @ @ @;dbXO ygO^oPt̍ @ @ @__}:NN'X @ @ @ @@ذaíZ51Nie'4‡bJ @ @ @ &Lp:;Fq8H#.;>S"@ @ @ @'PCnᆦXv\'@ @ @ @?߿VE]b6Fγ2S @ @ @h7|ƍK2'F+Pg Y  @ @ @4UR[iGk S0 @ @ @hSN>}z Ř% @ @ @ @i V1f*Nh@|&@ @ @ @&/aÆ[nˈ1cPNh(y%@ @ @ @J{.\XĘ1rɇme'4 @ @ @ @@% 7r[H @ @ @*F3Yg\wu=PQGuymK6mۦ4Ty @ @ @ @@c8֣>N}O=bzUL';Ṭh"d9T @ @ @ @bYY@vB!Ce @ @ @*O N0VjEpCy+.s=;;ST%, @ @ @B O<ĸq]a + ;X)ڶm{5,\ @ @ @/իWjpCy݅ @ @ @4_ [9 @ @ @(8  @ @ @hﳷr @ @ @ P qv @ @ @ |d'4go @ @ @ @<. @ @ @ @ Nh  @ @ @ @@yd'] @ @ @ @@| @ @ @ @N( @ @ @ @+ ;>Z|ĉ裏֢. @ @ @4-x3o~36im8KcU:ꫯ>S%(4'dN @ @ @J'_o %(ε$;>w4iR@ @ @ @@ $ &VJ<\ wYn]~r>@ @ @ @@$ &@ )2 @ @ @hv#` @ @ @ Pf ew; @ @ @ d'4Gn @ @ @ @ v @ @ @ @ Nhv܂  @ @ @ @@d' @ @ @ @@ @ @ @ @2 N(3 @ @ @ @f' ;=r &@ @ @ @ePfp#@ @ @ @Nu[ @ @ @ @ OoXnh$̃ @ @ @TJ}E @ @ @$̃ @ @ @TJ}_W=v=_V @ @ @ @ +oVT qwyΪ%Y @ @ @U;x3-a+0bZlٲض5{իWO2jԨٳgW’ @ @ @*`9rd%wU&PbΝM7 @ @ @ wf0o ]a# ;<Εpŋ痱dɒ|Y @ @ @HL+ZQyd'] @ @ @ @@| @ @ @ @N( @ @ @ @+ ;>{+'@ @ @ @h]۸  @ @ @h$SN>}ٳWZuo$4nذ{ 3f;\1K2섒0 @ @ @5k%\R0;!w!l-[.}״iFms|x17NeL)r/.c=FvB @ @ @ /p 'fӦM5jσ>uP oe˖jiO>qw)x۷/o[,$@ @ @ @J`ƌG}tR>G}<묳͛W2w1lܸ.Ա:N @ @ @]Ϧts9o 7|G,Z;رc\#-Ed'ڍ @ @ @ @}ه~8u#F+_QRJ^}W5"9}sv!TU v/ @ @ @(M7ݔ>}dyG|z<; 'pgώ.RU[NnD @ @ @/K/nڷoC=4,oO=T 6Ļ~;q5kVjzW}/GO~ȱSTe'] @ @ @ @a`ԍ _vtv4 @ @ @ @&,r{ڶmo'xbvO<9H^#/[,,ODvBy݅ @ @ @@Vu*_ _ա1زeh\#*Ю]r>@ @ @ @@$ &z]СC hѢrix1| @ @ @@`]a]Q9g޳ggbŊlDZ7uZf<ȇzh„ cǎ=> @ @ @hNpcƌTlU';ڍ @ @ @ @z},\7H5ްa̙3^\s /1K./S0j7o^r~;Y-gYvB9݋ @ @ @*ce7nܸlȏ~ll}.Y-C#x駓7wy.jTvC4&@ @ @ @�gΜp@*XA}}w^-[V2R섲Q @ @ @O`{ʕ+رmݖzglP8OS6mcj}#A!wܑ *; nA @ @ @Xv_>L81u_wB*X՘߿~]<{'n޼SO=&]P'@ @ @ @ 3̙3w&Mt9$Z4O6mzjoݺu_zbQF}_N N @ @ @ hѢ]/]~:tHKXmٲe~ 'DP۷S:3^x .LV,;^y N @ @ @ / :o۶mg}_bv;i&o 9sg?{p2 рwk @ @ @|+H}d'Էp匿~ .`ȑ\rI+gaVB @ @ @@F ƛv-6w;SgϞɕ曇~xc6/~:kڵy;^:d^˲ꕷ̜9ƭZ @ @ @ ~kz+FOU:o޼/8jկ~u˖-w}2e'Bn<^UY @ @ @ mc9&~H1cF*X՟֭K-CnR2Te'BnLI+dyA @ @ @@B N0YN4iN;-5͛7?C`EV{Ժ⨋;,,Ouyn. @ @ @ @{ggO䮻zk:%G^e,N({ @ @ @ @@YzݥK˗'}mos8䓓 6mzwS :4)[UvB٨݈ @N+_ʋ/jq뭷+T%@ @5h۶mURʫ]6RR_UvB @:mڴT 6" @ @@Sh'm @ @ @ @@Є @ @ @ @&) ;I>6&@ @ @ @MHu @ @ @ @if˖-zۯoQjĥ1 @@|0gΜ ,ZhvySNn+W;wnϞ={UEm5kּ;l#Ϟ=;Fi⫝̸R i  @ PJKrF9֒%Kռd'4a2 @ P'N뮻yKH-o:agvK]JU&]v׿kO?2eŋs>]tѱ۲v|?N05L}w̘1{ntL:Y7nݺddذar_zȐȷcguVLK/Y/֭[A 5x[o͏/s9#FWXIRȟַ  @ @@ c…EjE_}캂",ODvBy݅ @ԩS?#ަW~~^ziǎjc7>}DvBl>`R׮]ϭC=;%(_.kS#Mᡭ~" _VZF# f 7#aɫQ~v窫^p-ZH6%#|?Ad'뮷rKvvU O<3vˑ 1MM]|y\xᅑ!֮iGl0YbEdk'/+ @ @@ do/| X̙3gȶz5, @4k؃|$0cƌH5?~]bӅmWġw;df \rI6^M$j/ gYl9sTY6mJ0`  @ @@ 7.ua{9MVaqիSK#&weTlU ev# @h.@PΝ;STPL8/E1-g&`H~?TWU*X>6md{U}¤Im5!@ @@E Dnzgv9@IDATIПt#{w!dH-sqc*Xjr̽@ddI/  @ Pr\qQF :t/B?gEe/"ɍ zbT\uѢEx_|qݺux qDZM!;ݻ/Y."-wf}?k_ -X SOar=#W֭[H58q_ _q Y @|U׿>uT ;80l80;믏/%P6&Ç0dȐ|Y @qxٳ\e]־}u+_ʛo W_}9ӱcT`52bG̗^z /| 6`o~sQD[o_jq4)=z^*2r;Cb7Βo|dG^~o}[q#[?6N]("";H,$OGbDGڿه6,R @wwMp7?̜9M.>#@]{_';ݰpOƧ,:  @ PCo%Sbԃ>8" uxC0aѣs ۳gς#u Rr Ѡm۶o|`r83" Hk/>`?KQR>:BKYowT @ @@?܋l&?W_}׿gTor+f;?/q b|<5!b˖-%)84Q%@ @@я6\!R2H]8 ?cod0ͦ |k_})rK.o{]^~cfyxd6Z*8v)U#3s1H )U @4CMs΍E~]End'K @'P0;!Sx_W=!~oaZP t56lX֭N;픍g#qC-DE߾}س!Q˞alٲS#m۶=RAU @ @ B} @ @bu]QGգGlȮZ}Zdv[oݙ6]tkT8Ϗ`6;#Hn* @ Pjp\"@ @5޽{i<Ȝ9s⌆;V 39K{ǰa^yd'|rʕ:tGONET  @ @2l2- @ @@#ӧOvSNȽb!of5ˉ,ÇW. ׯǞy+V$/E2L @G@vBy݅ @Q,n>۬EN- _6XHp{llPE @Euӗ @O`oo;O}c9hYP/ lnsgs^}ǏNsz  @(R_駟jtx}o|#ͽ߼yK @hlN0?xW83]!6 O<12۴iSAjkYreKze'$5H~k,W5 @4K뮻c_~}+#j;!v#ڵkjG?*8^0+VĿ5RTCDHU @ @@V WXm#?-[|ߝ7o^.7> @dw9~r/Ν[uةSEf't.=!F׮]o=zl ^{/W'6b  @4NST-[g/N>=۟|d8>˞՘l\GzOt'@ @MQ`v{jtx4wWN_~c߿q`jQ#裏YEU @ @@#=sAq= rmٲ%Q.z @@.]~x^=?3 Rvi[6ګ^zi|3lذ3.U^{UA>xUW//bw}}٧%A @h'MԮ]_|ſBZ|D @ @y1[?3f̈/{wwմ>p|R)4EDJ3QI4!dj0nE֟K735D.)%I JҨ4s:o}okg=uYK~|իWի9N=FSTcժUSm1cF]η˃v}„ gϖxWX!38$mڴ *8ԉ'(2Ҧ@ٳlݺUNY6l";v7;m[XE@@@]v[kstIzd'x@@@H"Por'ٗCd2[! cg1"GʘGuW_}e;Kma@@@h߾5;᧟~?    ڵkC k׶md@@@8R9[.:a Zjn( ޽[qk.}!dVZj]I f?~EdB桇Zn]Amܾ} (?]tGL(@~\@@@9r[hkD   yroZ>ZΜ9SNѫ2رcjŸ7xC )} 7ܠs{He-H" /0| XG˃nٲUW]տҥK'`RXXk~2-m꫷z;<]tI<͖+꜋    ?7yK~rg6   @T?RXd҇:u'Nܰa^MUغu{ァ6mcիϟ0 ijB3f̸+O:餹s˗z45AwuРAʠ7/ސ+    @v"2gƍ9!Czӧ\r"   >ydMQ^=@8r_رc̘1z5U߼yۯ_?]ΠwߵkN+-Z[XO5_tEӧOnrOx㍶ݬ2=E@@@l Y&ͯ=$/AFfxl@@@SVXѹs+W >CwIyofG-ՓO>Gn;6n-zuKvA嫷WRK.f͚]=$X^:z :uQG҅C~zG_\Zj{!q^~W^yE裏^|͛7[Npǹ    `|esA[?j   6:W?slՑIdj3gFo;Ln۶mرzSOY}} g xkATkjd*&d 9~)2ejR"^QEl 6سȄi4"Ro]G)Fs@@@@Pn3rT @@@{?Nz;wwIMXdmfK/駟NzV߾}uv%:݃i&Ql 2A$/ҤI @DENDO?_D-[V3{eRꫣR2$C dV&;!37B@@@s.KssN@@@\z'Z \I [w";NDI#lPPPc%MM^z?^z2xCtˈ#l 3fЏu!6 ,hT槟~jҤ>= q"   y'p-TְmSrZwPnѢ*ETT>EKC   dW@TyO.3H@bejժu)|G]Ǐ߼ysŊYAo?묳2N Ν/%ATVM&- wK/'ڵLX>ŋD]BJ^u=Dn;=j6`;    :rݞŐP @@@0 _{5jرcb} 2{w'&).grI ƍӧH:1dAqFiժȑ#^(r-¹k~rUPT@@@@@@@  MT#j}u֭Yod};wzݻ%LI\Mb(gqo=Lزe~g=XueZp^K͚5K/͙3G/Hnc.\h=#(\`UW]%$nZrڷo߶m[zeխ[WkM&O\ۋ-&6@@@@@@RN:_~U6l;u4uT1F[X vw\5tvmL0A&Sg yR'N|ۮ]{FY\ړp<7M[O a"      \@ l2x/Dg!X7vҥZjzh:COAaӦMxJbr$(<-$ҥS& _~)\2maf8 @@@@@@@ d t Kʂ-0'n3*:lذA2;AsЗ9sEY8,׭[7ՑYd9O>4i?xO?Խ{w[bĽ%BvBI8@@@@@@@ wl KbvL S6 Ѱer`oРUZOPB^[<,W^Ex>@.ƍuV(ӧO2d#hTO?Tj֬>W3.e|>'"       `U͛&˗/idȄovڴi#}׶Ѻ*7tyܸqэO<+ ʕӫ rKF~2ɂzʝwٱcƞ={9:r>XBҦM]vS(qskMDM      @AAɁg}'5{ob/ꫯF&+t3Nq)0 rd-:tudxɠnݺ۷olɱΝz겱f͚zK S?HF²eN;M挐28{lIEp衇Μ9r d'dL'Jލ$y2H>O      䓀=N(_ c 8i[19蠃6md=I&r ߺ%UY9H:y駟>~xYE]4zhhܼy]ld@.e]}뭷zꕸVZGq믿~.OL$|Kird ,ZA:uW/^      @n =A3تU+K( s2X /&$j9ws%Hrg_nJsF*d0ڵk7o<d􂯾/3fd6HFe9KmJO!i};vg}&\dİuVT߳Ȁ-ZHU1'"      䝀XS72`tҒ C;=VL%aefI        @ <ӻwפIN:)gC40E@@@@@@@H__jUtjժ}ơ 8 @@@@@@@ 6lp=hkbŊzBz2w@@@@@@@Xv#N8<믿9rܹsߵ^,EMvBfn       6m2dH o馂ؘT@@@@@@@-Z[ck R@@@@@@@/|ԩ2C6`ft:C@@@@@@[jժ :ܶm[7nܤIVZ-Npǹ       9+PbŻ+g 60fv֛GC@@@@@@@ Nȿ6'b@@@@@@@ ;!Xo @@@@@@@ ;!ڜ@@@@@@@V`hʕշF        3{rH  0xk׮;ve        {{{)#P0GQr@`ĉn;t      4i%MNKsp"@v% ^:B @@@@@@rZ #!8k @@@@@@@ ;!?۝@@@@@@@Ny$@@@@@@@SlwF@@@@@@@ 8@@@@@@@O݉@@@@@@@NΚGB@@@@@@@ ?Nv'j@@@@@@@ ;!8k @@@@@@@ ;!?۝@@@@@@@4hP}l*        d'tz܎;VZxR\ @@@@@@{rg~rfM8kS&զYxf"K/5jԨY      mAY,Xдi< #]      '`'hW{zxI= ENp_n߾]l-@@@@@@@ g @.Rl2sLor      \@ Θ1^5u*k٫~ o hѢ tԩu֋/6fT@@@@@@{rgUVrPz}|^͛4i"od'[g>tR9Ŋ/rL@@@@@@0^@ ʝA%{7'H \vƺut      䞀^aEdD}P75N0!       @ ԨQx#;! @@@@@@@A>\5$;!D@@@@@@@ n>*       @NA#QE@@@@@@@B-@vB#       BHT@@@@@@@P        @4UD@@@@@@@ d'<       ! ;!D@@@@@@@ n>*       @NA#QE@@@@@@@B-@vB#       BHT@@@@@@@P  ʕӏg-@@@@@@@ g @ ;!`?\׮]u;v@@@@@@@  s/R" FTaaa0ģĉ}w!!@@@@@@H#0iF@IDATҤӧKi0v!D'JXzul      @AAANGp 0Cp<       )@vB~;Q#        YH        D       @pd'g#!       d'g5        5       @~ N       '@vBp<       )@vB~;Q#        YH        Dcǎ+UV7x3       @H䞠_%`Hj1vT$g,R^zQF7v@@@@@@ۂ,XдiAyyumisѧΛ7O)       @ X Z^D 8£0e      䌀3Hd' !       wd']0        r.\o̚5kǎ9_~0aš5k*@r^`˖-K.ݴiSJjժ~| sPSP@C> @@ ̘1C-[Ldg;kї_~ܱmg@@@@@@n΁@![d'x /&{챤&x@%@@@@@@@Tɓ'kοڭ_~ĈK,!rk8p`ʕ%c'{#      %ХKVӟ޶mh)ۺtzxyWB@@@@@@LmۦNjbԩҔҠNdڠALN@@@@@@@ <+V˗oӦA ҠG,%)6ZR {챛6m*      E[n]~#,YCpj׮=pʕ+HGIPȐ@@@@@@@x;70TP2+lՒqϞ={ǎa~16mZ%y9994qUtdA|,%v-hX:`Ɍ9AcUEx 3dZЀFpUZ_VOs0=8A(t!Z0K=,-eJ9xExXH/ I={W0;-:Q2ZqR7ZЉ9hfVK*fi-RЂ%3x>i 755FτsiAZMhA7z={uhl{W_'O>G,oR@@@@@@@@ ;U       1b@@@@@@@@P         ;!fA @@@@@@@ ;U       1b@@@@@@@@P         ;!fA @@@@@@@ ;U       1b@@@@@@@@P         ;!fA @@@@@@@(E~V( **#U6eCUT1_pfn1Z'o/xv#`]j6՜$ lުv,o]TJCnPU+Z=^@EYKo^cF;xS <8~<{y,Z9E=7 ͨ$rޓ;@->hNOƧݺ{w5ƏJ @D/3lަ~YH)Uuߟչ]aCX\jDbjoځA!꜎>RP~Z>TꑛBj4D5'|,jUWWZ'G8LIzmHt'-(5a5UZΪVGs~QErMi5q׬b^W u7ݻk&GEZ~ATNL>ޙ٧&F>-DžEj$x58Tq:Pյ:7&ٺLMB-ZVS!/CQy +Ϋo<^u<|zR%<hrǓS=L 0}7Z>OI ]Z[MMxQ}>~Jg%*,QPփQ=?ZYx=69=ߓqt٨Փ-ݜOꧫۓք2Q0ܝѶ//MAvĺg6m)2jyj"^[ƅnc$SSY] X]wQ^6K}UQr06njzٌ]OnkU _1G g{5y+es-C 쇅z]KMc,ϼz.| c&E^Ϸ+yӒQ'/Uw>Ʌ _ngQʚ\T_5upd~]n{4h[/Q'ϿS}1nw(<ÌWyJy\h~eiKy>u)i4@jт}3˨ڞYxA[Џk:v1'y6@jVz2h`Ou{ӓq=VLxQ=I+Y$V-@i+ ~CdJfȍ[Qg_&'j~=5Ve2lnU~vV]@ԄMQ.S27JG_915Žԑgfr#v)VoL͜gTJ\0p0uMIRlȝ7W޷mf5(^˞Xƪ(M 2[$ (m;ԍFrM^\~|2L݂^]G_}MBq`(}fӓ)/17ϊtяXGe`RI1Փ#hcғ/@nQ=`]Vz2IkFd'xLR?^W_2T@EQ {'?V*pZ΁EN .I'?θ^pmXzj㧜Ktrc?UЇ2qC(6!G~zn[dFUHV K ?6.oVSi[{G_I}vM$#)ks+;3a S7Wt_pSPy>? > 05{>eNOƧ<+^F?NbIz1'GI%ƀ{2>hNOƧ ~NfGFdШOod| 0.+=5a#Z4ۂL:b."S}m`d>9u~gU7TSR}oά+^tKCuUU݃mnl`WweVu柋l(8&Mif겞VEc?Wrz^n_{lg~ܵ"O?h.ի UUՑ{[P(zbWTAe-֨ eͭd&L')jULW>(~OqoT\ K]{jPh=ƞ<^/\9rё'u2IE6%+O"]dh`5-bM Gj@98*<..B8tA,CJ.?qn,/Jy>? > 05<.4&@<~|fՓ#/17ϊtяp2d<0к%Փ#@i2sz2>h}ZmOƏxQ=`]z2I+F "%guc?,b:T;%'T~IJe+ irucuyOuZh/L%e65ȏѣ ˽y=ҥսש%[2D|zqW~{X-5 uxXV׭b:zvC.tM&^yؑ+ITR$2e t$ufSa^i#3Kr{UHAR.Z6Tgߨ~YZ?Er6;ҜcW'gR}^St#lF I'aJzuu} >vA~5Gd;ҏՓ#@u5Oӓ)@sz2h`O/7z2~hTOƧtsz2>hhr{2@ &Alcr}7ǒ-Ea,F_y д>YFdP>+G~\3}iz^z2Svߓ)@sz2>hNO x`hTOnNOƧjNO&{48E\v{ el]MݵzJQ]emͽEgS\+46QjHqWɤJ-:KnjuL"F$u: *5!Zm *>7fϑ O"#._E=ZűbB^;O x[M,˭c%-IUVdD/ _Sf:af,-VC]6n$4.Gɬ"zҔ c$|BIEICu (xmfǫ0MyLx}oLVǏxi}L,M@Mxi}?>м}V$ro#@?<"ۑWƴY9=?4'G֧ee{2~hTOnNOƧugNO7@ 7rݜ܎ٶv,۵+fd`߮SPu2Q5*~,]bmq{3b[)(`yIҫ*SF%/OmL9ŬX29u(؎uz-eᯖ,7y/bh*9aA' yu$d} }[籁dq>O"}?>`beqq͌Q`*|{_d| Мoo| 0ճ4v_#@z2~hԷ7~Փ#/46"`@q7M{fgtSd]8Y硢U7=$Q]N;A{<1Fm7bkg_-㎑Qmvq R'K㎒]X|ohkEb ox02ItSAUYoن1(]g+sR΋].?KP4zN+703uߨW{P8MFF]Kt1er.cgƉr/ʍL'-b bc o>Ox.Zs<-H'$[ؚ> $yeTOƏ([ЏkfLGeƏSig4'S|{SƏQnTOƏ_hlAp@,ɖJ 3'}wTGd#]dIOG#"+BoKAuUW8:++-d'=Q1VC"3SY;%dš|Źfٿj~tXBtZ ᱃JتZU2qJ_|M72͏bו'KT E~z'yy ӫxؐV>6OyШ>6OѤx}4gQ=?<|V$}:G~\a8Qz2~([Փ/@Cz2~hTOƏ>En 'GFd<дoFd0r3'Fld'@Z]1nbudԀ*a|6#V } ]_g'lۮ$[PvM^Fg֪*{ӡzkp)2u1.z/ˡS'y3OEE*KnUB"V^[wy)[3͘mP/uż+jꢨTyIzw{632ӾeSV^8fRl<08eq#C,;A«wH,;AVy ӫĞ߮KVC<h`PYxi}o4mOT[x}4gQ=?<|Vz ;G~\I,I2Fd0Q2=4'GFd0)jK=?4'ydxK7'GW!=T/#` ;PYntFZ{nP^~Ƣtl[3I?lM8'+ט4צgot{ؒlduizuͬM>g6NMJ0-dZ{ Bȷ ’gѳlH9^Gc7} D)ĶɿlpY1sm܈XJMV=؆{+٧jldJllzzxE5~bJ(;巵q4죞kp籵} yy<2'yM-~53V2F}{G6~{SdШooM̷7>hNOMtz2vL ;!֑e^ϩ_W~}U'%=?b,;ѡrmzq~A|.+-yq,DMhfpvB\E[Zs2Zk;ǰ&ݮ2QurQu q?{URI{U]fH8IfMӋOdW J~tn]$owu995|  T+TcH B#.z7:w>pHȿc w\[5$2ņ R^nruڼ5g['/ܥd-2AƆ-9B{7E~>azBᐸ^@u\ur^ꟷhmDv؆]C9O[}w£m+ⲕMFoljb )¾ { fP<s }3}e<7P<~f'Sl?qbIuʄۛƞ퍓C퍓S~v{2 7N EO&d2P( "X2w?M}jwƭYĭbLp=[/(nEY~l_B tZ( NW}Yc wٚ}#9N>HUUw՗#_/RsJo3`}#]θJRdxZ_Ƅ(=7?Mqn& H~M"(GTݮQ3) G$2Dtٴ%J %wyYTytԔ>O&jC>OO7/>>\+}Y8 ЇgD@#@?1'1ۛ  WODZHC}ٓ p}{O-I>1Y!8G~\3c +oo20\=ooJ`)Q_fd20\ޔ({-==*}#)#atRoܯFU]>ժ LCrϺǺd}%Y];vZ.5>kޤzdOM'#pe-{RmQ}U=Ō$_VTg[!HHt)UJ7k1[[Z.u7fa瓤&)* #>"I^-֠匯/0_bؾ#2-6YleutO$/OOkPֲ'O`<֠ucWOOJ0}kY^O<֠`BGc Z&@<ņ\ϬdJ`b`}ZZ\܏_=dHS2QO&XrfJ'SXEwyғ)QY!d`=Zvp'q 9sN-4M'c}pvGs?9<Б϶X0vD.VӬl94WHkm۶]_)'=&PzCP{1FUOqjvڷz᝸G&%"Oc5R L' <{1]y`}hT~0}`4< 0>Ov!}O'7Yɸ 0]>Ek]dlW+Km{2. 'ŧh(z2.[0+«Lped\5'5hk'&@۹" 'CQ{'PxB98~섍=ݺx5s55Ad$~{j̃S|JM,@@I WakE˓Oɿ ahA~?EqG.E{?].g0TbOtryUԛ骪[ QIr ˟z%OMH.$3V~3{=sLߔd_6^d\-z2Yyߓ=ɤV>@{2Г5eۋ}K7'23;!r&jڬ:_ܡܾ٬RmEqv’O*.JFFlKrW=!ۨԋcb,%3X;c/gGR-_K zm OQTJuj7>"ο[5gE҄èmc5jX/VNSj nuqXy ["mʚ( ]_|eKP)O&mOک'GYL*sFCV2CJqeޢZ5r>OEsDGZ>O<߈y2'>@Ⱦ^f٪L`=3~ӓq޸0M Гq޸ւa&[=&=.@vB~ޯJRd1dj=- d' lL#/==#w\έ :;A[w*6a?ˀۦiNe'4#EN8QM%A~xEk68:˜$g[H_H?:Y$4;J'EB2C(1d@QqQ$)%d"C+] q>O/y$ya,1q3؞Wtt? d2~d oo 0㧐=4LڈYxx`bۛ4odlI`؅d'dil_/\[,9T5Em..pGk&pq7 -~UǢz%=2_M!XȺ}C;Hʗå.8ޛKT\,>s,l? :aY,xDkkW8.'}b³>X5Xcx)g=tI~53߫Wf,Y퍇&}e'U~{UIOo n/ E,FTP#Hd>bjhόx% ,xcB\j jy٭.S::3C.nԘKx$0痸 sXܪQ+͏R͈DžJW]dNJ(`T)իSkaMƺT+KuQ"si0%A }hG}7OQo? xj#@?qVoo< 0cd_O4!@_{2h7ɖݞ퍇&mb7Ood| LȭM->jOQB7VQJ7?]nڬ6nR_ύң}L)+?{dIc*7▼fة~Y7+̶U}Vlߏcϱ̜`b9T9|!2-AFmIZſ)yJ6nfa65XڷTb/ՈOGp>Obv9n_W_KWUWh12Dx7ƞ}HW$}Dlϓ>O*I k,z2яfDVoo oo +]MֿO*vYd<0ŏfJVoo oo +Ŵoo<0 x=o3w/WMyBL+VE$B`0Fɣ$PԢI %21* +51d0Ec@dxs}|/=<9d d>[V3B:wp$>d /B7{^)Y)w诨Ê6?Xx׋{v{hblδ`Q~>t/>>_>a}Jy79O9ݶGǨ=8]Ծ_}I{ce;Jch[>u!wWXZN./.;/kDu#d59O>^f |dY(we\}2&=7-&}0ޓ|SƜ#ҷ~f>Qf^![dՓm/ʸt.Y]zRG O>:m߶ԕbZ~y©mzaoٲ7DXbX79%NpE6&_=5Yt`~h|q N]?9+_hHpp}Y= &Lkf/pVjdfzeOKㆋޮo=9,u+O@_fk~\R}A$!!G橩>jtxOc'.g1gx|<#j8R&69OTÑ29O!by Yd2LMll(q草6dL CF?lvޘЩLDN1N&c(w2 0:jm{|Jڮ^; _z刑үg=pab.f]% opBaϐ{Kk^}a:bK!d^W}S]W4dvl%e`̭mCӷt$;_7ޒk䩗Ͼ._z[&=:-ə*m*}J.ҡJD o+ Wt#Rz Oۿ\/_c_;==K8qhzn={i&)|W[ar r@sW鼛m?oKtO8ڦtq005adպ ER>~p(.|ylM<)99^rr?<@<,G2s:=2me2N1`&V4S!9zc(:ɘЩ7~dRFqF'Xn }&գ!W'O뙧ɧ{3:A}20w>ѿ _|̏#]91走a?w1+Cfɫ_ӹuriM.#+VwPHO+>m3EZoY|)WΛ*Ɔ7/+:i3Mff6U_S OG$[|'y9pl(ޝd7,I-tYFN]<`\MSy.9O!jrB21'>0o"1gN IDAT 0/Eݙ6V93UƑ7lo ˘ БL\:.1`h荹dC?.d2A /3,Vz]SArf=bd$ѫ홬 d]k>*߯3.%l~e%¢F&cN}F3ɣ7Kߞ\܉ч;h:t%2v5/zgC+ z%Hx>Ckuz&c:fMllsq荹6Ft!17L},1#9zc'z& 0}N܎++Gcآ<5SۧX_q&9wpp1+K73o0^(=}.쬦T[:G~ڷ= M7\Y1_<^6/:F2yTwg麇<[.?GlU>X^-{7}z'MƤQ~\qO@;'Ktݶmީi>_9TsCU!1kn<<&.!牶9OTÑ29O!<1Yv3}1md2.1`U\h.d2FL5ݣ71h]ds?v3ӻl2/w^ԯK]pEޙ*Ν9sίp>1}*y}SыuT>ԣ yҕgn. Eok֣F>}zj#G6m=vWEKdS돧^?nͿłN!?-=)ɦ.T8O>kd[SOirpO[ttg,X$t pm0ܤ ϤM<%8`I\.l7穰bg?XR< L T7qʎXsvJ&2d21]Ozd2[I~=-$PB+1==Q'jSrX"za>KI![ۓM1(ceM:鈮ʉ5։E'f;!1+ 穘d5( @&SƧd2>V"J&[Iw$1`lmĎ(CۋʈU@@@@@@@@lO@@@@@@@$$6"       `C 6'       I`tBZX@@@@@@@!@@@@@@@$ 0:!IM       `t u       @&V@@@@@@@l0::D@@@@@@@ INHRk+       6`C}"       $F'$@@@@@@@N>@@@@@@@HĊ       F'Pg       $I IjmbE@@@@@@@lO@@@@@@@$$vh"徭] P@˖-[3) !B]fH@B P+4?* (R21  ͏zDh9!& w[*H 5v-ᄏww>3@QGlI e$6 P@_.X}r+T(P+4ݱ:}rޅUh1TZ`7_P@ իhÆ w[nlٲ;FgRF=…  0p@;b jPFE|vd$>;%@?TsP&qAժ`ݸ`ߛϝ;wĈ :4aƌuuu@E@@~ 5 2 1 2@IDATx|Eq B !^(`o-gGq) EwC!޳Vawٔ [~|wfޙBFS?        62#               W2:              W2:              W2:              W2:              W2:       8:Aܮm|a=<<h9z|`Hӻ@@@@@@@,\A/mXӫynj@G@@@@@@@(;ˉr 7O 'fb(6շ&v       T*`q Gm\[~cky#:tY;NOPsRF@@@@@@@@@ =;Ov}ggee߻3jڕ'Lk?}ZI       V'`Mv1n^?׻X6}vf;88@@@@@@@:87Dvl~>,>Y$@@@@@@@@kTnj "1       Xee'UĬKj@@@@@@@Nfܨw?#S*(LK ˢ@g`FS^)-}232#JplT^2ݾ9'.&JܫY -8ֿsWD@@@@@@@,.;!EΜ\3Yr-~^/F=O>pq `ξS{v{ Y#s)Ed0ifyI D"¹E1◞ ٧]wG۠B@@@@@@@lyb^ }hдlk[Qv,VDo wߥ,V#Ȋ\9NM߈)'}oq|5nA@@@@@@@lF J\E}Ϙ'kK6ŊJՎoq5gV*Lt_raJG        `3tC^rҺc RH!o&ڠ[XVF]թlkW" ;νSdQt )LO>z()ȱ(LOն)+,0o({        `?PPJh5nRۉ8A͐vR{)vW//ښ˜-fo$X{_c+C\lf;Ԅ!#G/֫&._I^3ƌGi:1       v"`섳wA´2Mw\Zgv忲ʋA9Am)Jre+2AYKso{q؄8[$(;tx--FoL        -`BJGg1_lp]xzrmŵd'\\Jvtrh3~ @lpew?6m8lUVT9l) @@@@@@@~ |.d#|yqCE3iٰܴKdQ ıYF΀ b̈uEAR]奥H       X\vp/<~#nώCKe[7ȢR#k:*dA̶JKnl٫$';1Y$@@@@@@@@N~C{i?mNEeEEiޞu)BON\7m̴{ ,+ev=xH%hk"׮l?u*5+e,bh~XYjxpӦ, PfF^_!F@@@@@@@̞ݢ"Aa󏧟몦|c f9^$7zAI~ڬ(jcM60=CZJ?'g҂|mh㍹       =;JdGy #SϜv̸p.78f&74]mk8LAtuie~EMF7%       !hipٷ" AqQʋVX:xj۸  3LoleYa\B@@@@@@@&,.;A(w޸`ɝ)VEcO-1[֗*Gm^'vyV~b oF        $`Y';Hن$9-j2#/yUⰆ3>Krcwlnsm1n쬫-k#A O֘{5oibK!       `3 wPc f'đ ёƑkW섋kVۮ,V#pkrvh7yZC        Xb"A-#=c6ڱb&~.rJb/        qKNh4gN^oWF#Jrcwmvo/6tprn?mε\rrq #PVRrx*͕        `'yXx >:W<đ yU ȵWuh9zg`#٠AaoqvVͲh$8+G~yXr#       M X\vB3պԢ~qmRPq4N$h;iTސZ-       ؉ee'U7 ȉ-tP 7h/\QVjJY,/.|NA,vruթ)Z8&fFm~"6M+ <%&h&Ҕ;8+k'WOm)7 u9~I~ 3Yqw2#D&@@@@@@@'7wkB5I TcξjMEeyo;ifWyYs#׮T+OI^T[[O@@@@@@@0p~^Cis9ozjg[@TviA4vtrlyO7.OMl)'}E?8{xq*?@@@@@@@!lA=fI^7_4x&5        \/[8Age@@@@@@@,Av::.@@@@@@@@@ 8h4Y$/؇3/n׹[@z3O@@@@@@@J* X@@@@@@@]vNv'@@@@@@@Ulɲ.@@@@@@@,EKy@@@@@@@[ ;V,B@@@@@@@RN'<@@@@@@@Ulɲ.@@@@@@@,EKy@@@@@@@[ ;V,B@@@@@@@RN'<@@@@@@@U.LS^~ޤsr<<y4 jy 5e'_98:J[q׹OvRG6Yȥ#:tY;&;B @@@@@@@շ++fۦ]ߧ۷ףh7yo:D1?Ju,ʉR/mz5?oϏRk;RSU+Vwq֬YZG@zxg@j.` @zxg@j.` A0d ¯G穝_87qYQщO?8b5޾NĠ9FgWelb3b4UNڻ5Օ+WΟ??7'4hlٲ3gZ$  fuL  `Zcb fuL  `ZcI;[Alw_8OGi bMB'ow"}HFKz#\T6h\&6SWU@dE HS5Cj"m۶{N&*`Uhx4,"`\A>\Ex3jn*렪Auu:sk{uОnRv™eKϝQ'1˺_T7qջzCYQ<\iG˻2mT˗]dH3fŋEl1>H^%Qϭ\Aq˰|R^\/^mUT_4@jlڴIRcYIfz3MasO휅#Pޝ:u-@@+1> `n^-")}i5u܋#\R/]Y.y Yj0ŗ6ɍ~尷-jKKe,sp(+.EGggS9.jPVTkkVdDVȈŒtw?n!-FjG#qjةsb$Ux5kռewjWQVfAjbQfóApS#b_]Ejb-"9J0@Ew՛i }jl,,::@>5C @ TzWQ}O!`'kY&Q׻T Tpǯt>W//J{|+|C^O$M6>U^Am5vџdQ:Dgyȫ"h4|szmO_}֯Sr85"_KWT`>]ﺿ88ئ_{ R|iEäUP       x\zv\L}ɹb.w,pRNj(H3pK핗rTm3 [[?k `)é rOܷaJ@@@@@@@l^설UoT#vmؤ`cGբ9򲲭 榜ͽ3>“:b3jeEqґGN<|#       `|m@~kŢ!C%?DѿKo.֋Ξ]{vw6 ۔f |=rc&\x`w?hB#V(ۜNsK r¯G]dOÎsl'[HafzCI-LOն)+,0o({!rKrIثyKٞ@@@@@@@k$;Ag>jeA}h>ۊm|^ۮ^ٔf66Cx_\]M;͹sN;z+7ɖ@}.xKj\l:x$|cFYm{ozRH}>~Wf'Y@@@@@@@0pIZmwsj}Uc KqVZ8z4a]FEhq/.RZP w_&)+O;e55A^l4~qRS @@@@@@@J23T7_Xحڷ 'lCnwpt^y)' ~X!G@_;A,[*c@@@@@@@AlU\<ÖZ#嘹9q:жqm`%yڢ{CWb̈fk]@^A+U^ZlL^%@@@@@@@@*пX[yII=MHOOX8/׵ZQH_ṷ eg5:qI;ͽS z5fFv4Xanly$''M @@@@@@@l\Xv5 %^UPmhoCXqӡ#1X1w_fĉf>mڹz{ˢKjfH       m Tr{CI Hhд,V;ȎR;;mVc'FoM4;'A}422x3dAYQQj)yɫEsh %]\ rw6qazzEm? "efޘ       Xڼ[QWԻ28b<`ℽ;tqPs?|UV\Ӳ0#MzŲu       (PIvBUbbcGԾ TfE߻T̠7rpgw>2S)UՎˊݗ       X@%';.)aﮒ|O-.H_'')ڗ<z?*HM۽-~vgE]0RٷLmKګ>j6>W11jĖ4C@@@@@@@*Nͽ诓DVeK{=TMV~&tppef_b؜[bvlٶ@(D7_hƭ$gwvg5        /PIZ?~#|pocjwާKլy;f]gz>:ă{eE3#/Ș@@@@@@@*$;At!sAJ>Skl-$O*PƅiWjΞ1ݷ7$L=]V\G`zvBYIss     / )]h/Q   (PbIBzH.Gt{ȫF؝[/Um0Ejq5FhGv/.҃$Mu/]Ksc}۴ Y17=i}?m&Nʘ\i{nr_g]'h̫E5ɞqX; ] cM -U޾x,`  PVTsKįN%%e׫qprvmשka771G/{` v(rU?^H^rb~rW-Zyhݲuis7C 6&PyvXiL+I릍v/l?\vi7mN˛ˢ98j[Z~nUf HhN!ζ?>xQސ]/S\e@H?w#׮EY"D_oҴ#c* 6,t`; lд ! p?>c:´w/Ɩc& zm]uQD@zcw=K[yuǟ߸N3   T~XL^}CyZ]U?Nv.L4޾fʨLoآɢ v$?˸ y){a}qEj}bCY4.YTG:̘wx:88Ȳ!+m>ڴ="׮TStV vt NБ `s36. * dm>61[2vPܮmA@N./c&謥}׫eKu.QD@HϾSN.s?w7ളgv?k!rl=q&FAƬ8@e'?ȹ[7ɍ}A^Wj&ۦ^X?\,!NE5h$I4W76$-1e~eQRS@+(HMGY6 & m{V͆;cKrsϾ%5%j@._W{RSYVTGe2[@@@ wS\?gBg=ռUn`y'%%]۽M=%Gs?a 1w#VtYHUO|>z놁/ٰCg{a_%Z}@.Eeohe=aVc''eM=}GdFGu'yI^Z>rؚ"xpϠ&L8#"|üIri;[8V|So߉B - ]liu@)p䭗E484vgPcQ̺t1|ة?f{~pƽ6* V! ~{թ_سu~rbF7jL|k˂9   ;yw͈ٶQgy9qgNx]CV џ}'V-{@lq1gUw/Qpo'Ͼ$X 6 v/Ql~XNGϾȵ _#ڍr 8pTG7-8 X@iAAƵ'?וGq@jҹW yIuWI{3{{T测NR# `E>\\-'ݲͤ_j#k|Z_ܒt`QFإWlI X';h#'n𿞍C88vy5:jkEF)/1=& 旅w5b˖55A^A~}B=tvՇ@Hj bab[C#>Rf,եWgl;4ymO5T6C9wvB ڻSmi&sAi&.Agfw5iF.Uu/r-R6 9桻[pw'd+b (7W, B~*GoyIl~,  `E׮T7l712foTwkʯNHG.! %Pyx5%~u''^)HM;! >mڵ?NnnjwSRʹC :̼5zz1abrfbVmYGzrkFY>sQ%ʿT$64md6xz8wVӷȉ͌Msvebwkl&r#^Qaƭ1[7h+/b159#  ,})|h7es%5WD@Gg@S6?Ub@nQLw}g}!.Y$@@EkyR68ϲcGxأڠ % 1   `M ix7eGk8x2!"F@ ~UCڹ0W"ė*݅  N00W(PrH^jB~j+j@@@!4˿U@I#ϾP:GA/m+eQ  `d'#eekдZ4]PJv-.!  6"suӚ# =/҂8EmjY ؇ -rL+SԤe]Ntߠ4?$/Wg(f-G}mukhO OoQ6놑؃=,5Z@ѵ Nn]\+ :tkeLZ`2|XW?Az՘?AX ԥߢum{4c;ϫ]*M`4jX%$&8x9Rl [2Y5+o nO ] `W۲wsU[gN&ҥK/Fz ۈYmZ PuQWg:}Ӿ[xy1J xMY$@@EkyR68OϠꪊLNjGT b@@@JMi;.K\OYϿفOmC m 4;`2/Sv\,  V!@vU<&ۜgk2M\gnB/@-#  X@̶M?ub˽6gߩCG ء@:ξ].\SV|,  V!@vU<&ۜK/26\ ƹ  X8T{KO}KaZ['_-4;:]l@  쭮:+Z$F@,_ mX30(+7GfE_kgl!  -GþL]c/اu[@SkӠYџ~mP[|KD X \eV"7+vɉ1Q-[Wef#F;{x"    D^&-A{%0U@*Pox/M(H|KZ$F@,_, ;̼U]^j`\rzD   X@fdĮvtqr @VԽ`ˋGL\ij)g`#H X lybNrV ㊂_kr섿c@@@t߇ի0z͆`M ` TK}G_jHr꧶D3t  `!d'Xȃi8:K.>vO\jP^ZzŲQ"   fzf" 6,ױoPy}L^urso:>A !@vu<'eK lw^vt|=2&@@@BH@IDAT"ȵKKGn,|Š&T@O-\69?2>`yYhaZlv OOY$@@B*f$mXɀ]{Ԯ1ȁ.tPW]VT1[]z@'@@@|?I618;K|7߆&6 #0wbwl֔jˎ4 |0{]\<,  "@v<)[M_rT"#׭J = ݿ~+'O̶]UppRYچ@@@RS_hzLJ-Zbz{Z" `!~;O^YTnߵG@.f^xh_4e-b@@*NduK<\g,"QzT   X@~ʕ+(SD@l}%jӺy+Ǐ/Y(vC!=YU@@K0O%O٪@eJ<ӯ{>X-i   `Y.ZĘ u&h>mڛ~GVmo.D@,Jzv=η=mޠ>(4>ja @@@,\@lUm3dz ԁwv?]xg_w0 [r@dNvcws oƶCgN r Rx6nݢOgأݡ`@;x0ԎW@lY@$wn!,=^ ywّv0=M|xxۦobF!}<<* @@  ;B=O+[aسkG@@@@pm;q%R@ONvΪ@@@@@@@;Κ;!       `d'sg       ԝ ug͝@@@@@@@Oj@@@@@@@N섺N       ا Y5       u'@vBYs'@@@@@@@S|@@@@@@@ ;       )@v}>wV       @ Pw @@@@@@@ ;>;F@@@@@@@N;k       } 8h4\y:::zŊN*..ןCf _o5ǎNm۶{҅T4mXIU4O`E2_?#SfϠ)J܆'hOǔMQ6Zs Z|xUZγL% ZSx5ѻ}+z9sxK΍[ V\9Q@@@@@@@  ;Mk&`OI!      @ X\tm 5B .ՙ : )._]G@@@@@@8Nv„ 7-n6lذo>{9)VC… E@@@@@@@rrr7BR[#G)MNNCF@@@@@@@z7Ywwo|FK!CsGFSEݻwp@@@@@@Ho;o™K.7-5kpB___{Rʕ+ϟOB5      /0s+VX4 8[輬mZ_~˗/?}tqqMqY.fFF&Ĺ7nբUI[d}KbY #519MJ uj((.*ҹT\'zVҒt짘75?7t}f, 2T"  `:R"  X yȵyeg]?~UI^f@; | r/ɚK珉V<ڷ      `״=ΨM~#rJ55Agy |ӝ3s!Ӌ" (7| vg]Se      ؤ X2̤-.)JJcm@΄竴̴]6UR1     &@v< &){5o5tѿ:wB[u!gO+ǎ^,  PeeezwyyYUuͫV@@@@@@hv;#o\#bԸ_tm@[и.w,X7mLaZG7ɀ# f8cUJb-w0`^ƥ$ۡr2tq3trrҩ     ! ]\RүSכX+SdfMe| -: }kفiw=׺cHzϼKz:-\:{N%E@@@@@NG4r#|*:A[%fm}Ԧ:쳘w1=%a#f~M=jBhRbҒ3S=4 h"<<Ӣ&#}sғ#|7kAl 1,))NMMPc5)+-NNlרi>:wy ?79ᒃcfmk2쌔D7 jO:uYչ&_ ;.st&{nz_i|p/FMש  ggg;888;[o333sss===O g+ #-,,tqq_ٵPUĀyyy"Vڅ   `(J"^Qaƭ2;A!ⶓ_~-"/0G?d32J}mٙ!2xLܢ4"UB|}/kkDÏǾ mQ3r5߽ƽ7flu::99/xcggzm,W68: ?}hӊO /[ս[uyOxgwCw]8}Pm^_?zͷu>Po?a:Zɕѫ-:gmVƕ8t˜Gwe{d:w"lnp׸ EBCTL?},ӫ4>udSϛg?RQSxߴVjNަ?/8WN.~5iOA@aݻw,pmJYܹsƖEm0bN3gt*۩H8zK겍xӿaÆ!!![Yޮ(44466V%DޢE=z\2^pBLLvmk|`FEE]t޽B  V*@vE?K{Ӽ*n!#6ۇko+oߪ0ƹYi$Z.6nn rDѯ+UD_8!~Zxs{Vձgԫf'aҒ"jVwV8!&xv՟uz k05:.PguS^eEn׆?Zw6>̴(ʔYKQapi'Aڎv[trrRȞ"7EOg=E']z w:t] τҩE| i~5fSojN™ËX\t7c05<ŽOZ n{-WjsV9 zQj0qpˎ'B)_bbm:R+@@ ;wN}?[[)}Y!Cg':";A߿ĉ㈝ ğ8~СC7n][4봵 ;x~@?}رTQ'&&V }{9x`}Uv튏שE+H8uԍ7ءC   m`= yA{5z높| #78W.9dBb/^⭥7LH={D3#m[~0t[Ӳ]J۫ %O5mW~^nVE ~yͷ#w1w'}o$vbOV&=+uPjr|=sx?XѳE\m ~j{/W3($YԘO5>8u"N &{͛,i/!\o4Wp)bGJmHNQNHz@@曆m˿˜9sbIII&.زeHXo߮a.'O&L0" ֬Y_(ؼyZI  $p9ж0XK۶)j:tlVVX#v|c&mzVj?o7%5Av@-iɲ :┘|EF7RP^V*B]G aNKXΔ]ŕ&h琕㷈 NIp rS>}вNcݲJS]|Gi8\:GOM/Jss339͘N{QOVFJBNG'g>(^zUzQz{{A)*ҫ4齗IB@HfvrI'ߙggggOV\Ki/Uو$  @Ȃ&X`oS7?5Ad ZU)HL˹3f̐%,Մ9j;5A;Qe*@@$\nfgdo\/O6B&-+7OWqey3ϝI-e^6t0>u'nT[9]%:v  Zt%MUs$5!0>"iU$Esaьo+}KtCGl}GCoPwuL y`zc4OBnwSxv냖r7Gx|<-hD~|knxT*`T!  P2˖Y ׭;]Tvj?e+YnΜ9_eDqb̙th>'q-@@p; n&7Ątm^ebheۅa3[{uwq.=}Jw6BB>7i6{ Bju\$+}ۺ%Jϕϛ7Rj/˟:o+nZe5;a9Jc*:C-HpHhͫizp쐤QFtO72$I=JP^^ ZIDt勩) '.=Ac &nx1n7ٰyg۷c$<^Vٺn΍rtf%D{پ8,dwSz|{d'L޻*S6?Rz1;p"NiF@@Яs%y m۶-њOȖ M6-W Ξ=aÆÇ+9r^zeoUʔ)#aaa ǎӟh) ζmۚ7o?tǏ#J9$$$--M4  #@vT2yi^@+NH;}e'nһu4հeo{d/iqKbēqJ32Goоk_䑽JcYxUooy]:$Xޮ6f'$%;{ZO:zd6%X.u'sKN0NNO;x?؎]8olj;;!ϧrE0^  ڵgZŋV8wI`L;8 )C}Om=`<ٯA[ YymߤI;F;ql!SV\~}Fg͚5JKB $>}zʕ`ژ   x@V1%ťgs (G`{nH&oY>9C{ gi#(CB~4vb-R\=O}w&.OϦO,%ZM7w0֡cϡ>>>\jCYxꝩhwH ƸJk m}4" w~o rH|ȷ6ZA?6Y{J}R׬+_.iձ&HDZ~1ct?Z>kr'Y2so^3(z>l5+v.O4Q~S(   PZ@n 2 o8I6}ol鐈,T`'**`S6mdlVNZ mDWݻwkȚ UV +VW. ֆ  xk'=Mϛ`~y.&oI}{2s'vÿk'ϫipP˯D$>.jh_?l,~3c<   د_?%rƍ˒deM~rhe{c{iР~Ksm!jgddrJJ,`):uRٺuUV)G%#A|,AA9*Ud6ɵT!"   |3w)(k'/ܞa7HVzX|xqF{~xPνدNaך-E-ET7ӗ*ٳ@_/R[ߡRkO>ץ ٮ~ZuIyKf]p9ܮ UL/Uz2/?P"Z2rG~$A9FEޖ md*(%INRm rHtdve<qx Knу;}z1wDMd e% lм|/WIJiV\oL~86NG@@pUVo<]˂ rE]iSNOu֭VlOh֬>bAJL/d9QbN8~7rbMS䐤Jb3f2  x {+s232{osd!+Wa`R~xGdكzM uӨ̞-rqkƂdU2FrF Tcl4mvj4Ԩ5<-uZoWP_5fTFjZ0D(cvi"֡gcEB"m3y6o/((I3rTvIR_ML:+Ӳ?}W8k[cW/(揧5p;Ɩi)}YE_M16#  @1X[8ri0%"##%YRD$rʵk׮Y< )^Z7Sy_5$$;A$.Qoop*{F"J*  x {*NH1yty˃"I2q0TF dgm^3_|.}nKɳ)OM>%Uy>T>Og?hlc #Wo?vi<}ˍ+R砑9AeNWLA/qӿܰbvNNK ڏ!e_qPCVdؓOq8kbcgbxZ Ee/N0;hҏc  ߱W)to2kf޼< ֛lpOsƥL+ɳxޜ1][BPO  '}ݞ7|go @pTvg'd^ bz |ϋۙ=e6X2G7\b>.gH[\>oXz )|['_8 q]ޢD4_?t+7|:nKMؽd'DDU6mT(;gBnwM$҅>~QH9h)i?fD@@(|l_N:W]uU)v0a¡C/6a= QKNeʔ1W"D"  I ?ד&e\NGNH>g Rշ W_`:hgOxk,,o/}FynT6ʦ]>a㪹ʹ~VRu y'/7i}?nԣ瓓gfB4R"6ٸJȍ[ZN1< xxfN0!<ʤ;@3@@_J-vvcZ/\0slgY,+ӂ%;t1ӝ N|}YU!  Q'N5+&ַϩ$ZL=oxcvW Wo޿mբiO;vhZ977糗h֠KP[uL]/S]_-by!y7oZ5ڡHmZvgܷBZSlϘ^N6M߬cFmjm^Q;v0!J&߁I`IQjVJoل̌t?e֖jRɷ_tl-@@(@VVV'/İ tw&]pd6_^Yt'իM;ԂeZRHMĚK@@?~LD;j(Ϙ)-_ BT ֭sqAkӪWZj5W޺v΍di36NZ7 &Ivn5]F?סǐӾcҌKٶn>.eT]vu 2sGQETp׍ꪼwml\l*uגCvVqqɂe'XN,O ʅGղ_K6QsS^;Q%.UxʲIy}sQ^ $w1^2 F"  (aYP,9p ۰#m۶pQYAX6);/رy6&ի]k/_^Hŋr׼mUIvэ  lڴi֭2A1=[ > POt.ƟL9h:S]`UvD+VwCO='?G߫׬]ިM?3*-UW]*(ڲ!2}Inƿ@<_i\UYGH G`cpp6ε*/ߞ ݠo\r/[S_,msRnRqvvo2-5M:q@@+JyFF5s"Zš6mڷo{GFСCŊ%11Q;ry!I-"x[x[˲vWcY`BD@@p#N=>ٺ ySa\lUٵRHII꽯;deѕkusߊn"_o}đ}o?߸?{HT5m/Ko l ϛJ~~iT`xn㨚U!1.I+@|Ü nB6JR=.ɘTq;@@ 2RocÇ Ý4줤$Amhh,uo Zl)f2nNٲE]( @ ɘ&"EGGkT q[T@@p/I4i6f)nkZ܃ d'ͭҽO@IQ:}opګjkMydP7> NO\^eO^y>(e@-ҠEvm^uݒ&Wu"f"а1c(W;y7GYYUWYqfLprF{*k'[1;a)><87ANwqc>U)WN3m䒝ׯOCρmVk)~<%S(mܪ>#TM,Jpw=5KSZJ~NC1N@@0]ȑ#+WVNT:z$d 0@r0f'HAMjymPLI@@9s F8p;;-=`6#&nD4;ZJGYMEךyLASHMз_jmf+ ԪJk_.,Eޜ|V~r.{˷2KDо8ܨխ:]g}aoɢ سuI0NYy>y\,eqjv!屛+m#iM,Q3w7k|LLu3>}_@-KƫwL~&L|nʄiqO1/]/.َHj˜nV£a.nvHw ^XڞvP_p:궠JcTo{Mٕ,r}/I>{.]6%~n=o~uhOWyG;@7Ey򝩲M΢1  (pW9]yc9i[XϞ=CB 7ڵkK~qK߿!Ԅnا,PbEc4"7iA@@W`Æ ۷o7! ѝu;o|m?oKOm dvl`ˎ>0kkgT{ o}Ҹe#iS-Lk+JoM  5NaLP *?JjKtl-e",оO~ުӵ8e@@lSaÆ5h Iʒ rРAn,dIYиqc'cD@@pqI&66x!/MO-~/[9?]lkֽ M;cC =>X>ɑ|{}pӧ\LMx!'tYy(SnzRFZ8uֵvl\,lL94,RR$ѡyj7q'X8gm^v87 0BŪa._igشjކ|6!lXXZt=;pq<{%<=T><|D;f@27m|pر윮@@ *uє ._TЮ-'N8uTbb叛_TPRJI6رciiiR9**jժa\Ç /^( 9TcWD@@*`,5eK?t*K:>}d>wڴi7SN@[D@@@@@d'C5kaegL@@@@@@@͛Ν+-m |}}-Zv# [v̉1+@@@@@@+O ##.м_ܨ1;;b       n 0k֬ TY:Ž^"      @Au̧pgſ#;_ /       EHHH;wn!BA"        1V9K-ĉnq nq$       {hQ-EDǙ       xƍnZyʹCOwNp@@@@@@@I`En{(t: N[@@@@@@@+K 33sҤIE <) @@@@@@@fΜy"[z~؉ Nv        ~ڔ~p7bp .;wnzzzq7n4z!C@0k3Z|C5      i֞z<=y^^̙#EFF:7IMٳúsN;0o8w)cD@ϑ=     L81++!~QF97鄝v#/^찾@@@@@@@eҎ Np]֭#@@@@@@@شi֭[8^Mt`%;;8cHzz:uϟXck6k' G ?p,<26"GNI!    k&hHKH͛7/0\Wnn+!CNjI|{1N@@@@@@WgZd|pS|fffĜ>}XB'N+B.t*;;`(       n'0k,&)=`M8        8c[Usrt _GwH       \Awy-ܒ X{AfJvB       X߿cK.ղjժ5x`A/cf       @ P\@@@@@@@ ;13D@@@@@@@dN(Y       "       Pd'?WG@@@@@@@N{ @@@@@@@(YJ֟#       d'x=f        %@@@@@@@|_ϟ"3D@@@ _1{Z :ժnZH#*W\bZԮ^YÖ]?ݕ[~}g|&t5T ^ ?z¨1W ОOHSv'R<^mZO3fJ8gN[/?]TO3c+DWٿckdefXJ@@@dN(Y]̞]SJh3뚎@@@h99 ';Aڼk [^}c׬߲d+ʍHD T5-U*J.=}R>JEJo~CԄZ [>XIi_P?L/Q{{:i7=ojآ   Pd' .pp-5a   Kνab\`D +W`k޷U -_A luբ/M?:\R?7شm-k;q-Xs   vptW^y%qe  #|ėz\R\ у;\|]0(?C~g~`Uj5nֶ>r'S8ytPF@@()JJa=p/?qXwt  *p⪣c\ ?|T@o }լm'2s⇇nG(#   %^L_z#@@pamlZ=߅@uY:GGt5LqFp]7"''{/9cj   P K JjB篏.NMOhY;jJP@@@(~aWGϳt㛛尮@@,PJ&YMNEc]JdV?7f'   ,@vB1;r[7~فau էo  n) o3g.]@VVƞm\UYYSΤr68$4,RPc37O>sql+T[~g 'eݻ2"Ny%:rt`pHq]L?~;:f3r*]Vzv.333d3 Kyy\ɚނ_z977GeǾ!e#E,;WǠ޹p%;a9{۸ֆ   @1 P\ŋ F ̰twͧߜݻ1]   @[2f'm`l lOwۚ̌KȫQM[wGt6\2{)`]UƸYxUsP.<_WJRi__1{ʺ*Tjѡ5^Y_+Z &k֥fk=TЂnZذbLpӪy))TL,*C߾>r`>"廞lqӾ{sݲg [7Z=y!UkmT%d_d̀kde[ZVoШCy)87ztVM$xx7YJƉLO+]cڍZ8mL#|@څ`Vts<_h ]HJ8j4m{*T !w"Jגٓ>1ѧ?2   Np{Gm@F{M  @uM/|>9<~.i6;+ӴA 'SFu}82ڒ?W^fOtZ?B*V)O 8LE#_mwckhl9tV8~`?G_ǿ%C!nٷc={ kۻY&}bߛe-.a(Y>6|&-/lмm[QӞC{6]\N,eܽA$kԖ}[僣5\3v mV}VON~?4~$hӪ%G^_AdlkZT6HKy^J!ՂrEM;iֶ IN~ "  8[V2tT=3tBkG35&  z2-j}RN3'^y/ u&y ӣGt԰edl,\LMٽu1ީ0c{' mrxv-hO7{%f.EƘFR±7~d }ceS5cUdFR^•) yɺNZƣ@?ѕ YDVpu@@@^rv]ؽx ~K  8V l5PB;S[ݳuո7{j)':laKr*հv,*o E,H*wo?~g딠W'/ݚuyA{F+0o<\R=?[W4=>s[5B6{F+ߺ?{n {_6y%LHϳE='O]G, (GU+ZGr|e[xX;8   Np8;^t-ɗW41Q-lġ5  8_x ݔKý_4[esPՋrZv]kUa65 {iᄩ߼y|,0!8J?>%Gl]m4pC!:bTOy|{ YaڷoXk/RUgO=SJ$(YlJBWUKyl,RYGeH   P<s ybrKWvj99tK'   *T_G,e//vVDoNC-W,\gI}hޡϺe3f_w<-MM:!;A^|uۦ QE-K-h'5ăk]w%;7.ӪBxdlʹӦ+aZDֱa-TXMV|rҡ=[RT2}7očՌ4-[ak%V0Ky{[]˗WʒH1W~-wLm nQX1 yjصy}^-b)F'/+qӪ<7#b~v#O'oïS1I֑fkKT<7]ZE>e9*I[F'gZWxnF>ߴ9dmiKjY)ެ%3I^1 4)"^MNf   cxXOg`wre+Wu@@/ oҟ<_777{gkOB޴)?$YUKcJj}||nzNJ3Y~㪹JPVl ƖvFa^ZK }>T)/C&n%o^`ʅZYW\Ҫc?IM+c._ӿ?4Wvgi#(C<_:Gc'Hz[}jnyol,kQ"J|7PRm}Ș%5A2>Aw66.H|ꝩ ʇ<߸E2L6pɷ[Zie @@@b`b@v%=qjVw-.@@@~|ޯuh&%"՞5%??vἾJy_Y nбPՅ}mltc+:]k\jBG~ZNˌxGb9z6o|RmQ$w@ Zѱ5,^o]MHhMSRs'}){"cϟj))诌?0׶]wjY΋d'\ǀ7IŐK 7cMW063Fع3"̲$wƵ@@@ _Nȗþ,}|(  8_ 2ަ\_O_|nZi&̌_7yillID7wlXHNvc*ݮͅM8Otas/|MLShP22 )1]a.a e~C;6.5z[֙-!UsIJPT)=ȐsXk_x+MGzT]60^"++'r&I3{{z+\\몠gag#  BBt)N8wpG^˻?sҵ@@\Y tgfezk#Ot1D<={ʅSNk>޴u*K/?{몆-:kgiUK(: GoW:j, Wi %Sݹq~ΰJ0\Ts}Hfm{:IklYeXVZ$zY\!E-"Ԕ3S>辵CR-1DNi޾L_mѾwON-WF£䳦404VM2['yiԒ5eBf    ;QN';3sR-7J8Jt  -PVzfLK.bpx3 d =̝:ViYm}we?&oWX5N1;Mz[ɻcx\RvBL:ż0 &y?q @fFIlg'~d`S$Mt16%@nGJ5*Fqf'~T'լLcОHR魠mUОloJO ;NC!   ;7_Lشo-cǟ]ϟ;mJ )[wwh)K>>>Ƹ>"G W)\{1;ps   E+Ѳ>{O[4}SȗN7ox]Tko/[V  %+048`_߂%D-/4  Ztv]+@:HYf7a)lZ3_9J@U5.Ӊi3e|[>4@@qͪW>1!Kzؾ\PcٿC=#T82EX"en !   @d'KTb rsrkY;+o '$;Ivnm}6_)f(>EٜOv܎BP>7}`_]ORZqY`ҨB@@pVhtH   A`egOP²k_-mҺ Nݯ4]["+3]n[l\ekmJ=5ܿcs/<ئN6ZV Oᄃ rAr@=ᑕߗ0R<%"Zl2Hܾ '⴪d v+Xixd!  ) #'馓jxۈ*s֯98sָ+ie)G諔@@@c6ΥY^̞Jۈt5lU>lsu %XЪlEq?&| +A}u޴//]G,;kAgX QjGƏ   {j/:;~Z']wb @@'p&Q]8A\+޲!Ӹ,_I=[%#bǠD WmcvBܾ-Viٱi&}lwqp6_섳Oʗ2"顏ܥ->.5'/[4m]swx.ud%WYlBR/^>OxwyտQ=/l_ǀ{˄Irauۻm}NvB%])xV"N^7|_>O>`g?zLږC$LŅ},DsQ.S@l>ۈ~^vBcӔiFZfT@@@Gq*   Sdyc+LxsvH^lg/aͯ4wi!-"mdZ,gȩ߼t" ={6kӣFSl1W$SKUVw }IVZ]ݪu%';ڍSG۱vьoߦtju<||- rȈ^r܎1tz+{uQ9QKk(0VCxwGZ4eiGXd%#65{t%jZ/9pbjJpHY^p;Vcv꫖rCA͈   8\1;[]Y]R/I!|o+y0~'vG^wgݔӝWy㽳~ԱKHiDKu[[{^-A%;A>J;7ժcc2>%X6T@@@$~@@@#+jpBRW.nzA?{A&x)킱}DY@HQ7RG^AZ$ڃp)c|5=IA__Dr?8\ˎظſ'^LMu#23mޮq(6ؓwSQmK)Sc   ri0l@@@x홾}~Qiq )A}}cϡ^^^H˵~,~`g2icY;u71(KtƸFGD*&|PؾeǾO3f+ț#|kcbhVAа(B;6 ( <ڌ4e"Ƽ%U@@@ <[zF@@C J|n\AvWנ+V!5DJi:kGvܰ Hy]G%|CY tiyyc3o*#ҦYQ+Gw2ƒ6ZiU#K[zR @@pk1x@@@č Zt1吷uO7gՄmzmZ5wƸ{V*UW^s}āF۾a_^w?ϒҴmOCXo"3-oDY[߭|ٲӇ? HĽώ]^H=gt+QZx5H=NG{dڲR zXuʌ䧄"  Wnnn] !CNj|c  5 Zi{Ed;G}}ÞO3UqcY?t.}2   @P"\@@pu䳉Xv8%% o6b%|g#򞽏gE>]޺lOڬW/~pkw/+Z6 oocc    PP\@@pW7W>"]Gϸ=Z֑o2Sp3}o*酾nxE.;uU.;k܉9p5G(#   %%u@@@wZЉ2[6Yw]r2acR^ 7gօI_MFCaqP@@@JZ섒\@@p'uQ3+O'?}oz88$4K۾x6РY۞o{J?ǍWݴ|hf٨B|`p'ޚE(   gnX\@@ [_x>3#Wxd*i֓lT>.qǒI8~҅2eʄUޠI5ѕ7eWLպ/&@A@@p\.0@@@nra1  (ܩ%#|g@`|yؤ   IIw        d']aL       x t7        (@v+Ƅ       w|U8pB" vE@EPl뮊UW}-kwk/DwH~}sinnxsΜ9sؔT'lJwӵ @ @ @ @(:<k"@ @ @ @@Φt1e~-C4hPnnn$ 1bD Mg$@ @ @ @ t]T'҄m0ќS~Rk$@ @ @ @C LD @ @ @6! i}M\&"@ @ @ @v37dȐAm1L歷~y @ @ @*M+| NH}  W:g,s 80eu–v8 @ @ @v@ 4KL1 ! @ @ @ P JՔ @ @ @ @@L@uB CH @ @ @R@5% @ @ @ P @ @ @ @ :PMI @ @ @T'0 @ @ @ @@)N(TS @ @ @ @1 1 ! @ @ @ P JՔ @ @ @ @@L@uB CH @ @ @R@5% @ @ @ P @ @ @ @ :PMI @ @ @T'0 @ @ @ @@)N( N.//gs* @ @ @ !9rcN`^yn'OX퓎X2ebaתys? @ @ @ @2CI'd^7/M!huLvN(9w  @ @ @2a_="x[rXLlCcNk.Y4q| @ @ @ @2PP&%=iu }nc(.*h۞F~o  @ @ @ @@T'd|=θǙrWGi& 7l\z)&@ @ @ @Py8cTX(.*?vTM1 @ @ @ȼ̛sroMt/>YfML (]" @ @ @ꄲq/Y; b5w/6GPnݨ) @ @ @ @e":L;ϕun0{V1y+W~r%(].^5 @ @ @ @r[B*5koyڕ+ G&V`u۶ &a3gDsfU{uZ2 @ @ @ PVJ~=۪gÇ|^ӈ/ [z,j:}#m-j< @ @ @Ȥ2jԥ/ j}LEWO FB @ @ @2!:!yuFǓ;t7LU%Ӧ`! @ @ @ @Py;uϓU9ޖlݩN+xS&]23_!/ݴGI^' @ @ @ @P~$&lu=NY|]7uWs-x`TU# @ @ @ @ vv0náG3 qm}JY֯n!w钄a @ @ @ @ 9):*l۱QS@ @ @ @2/:!%=[n]*5kFb ;ěb @ @ @ a _-}|t.bℑ '|[`] @ @ @ @T'ϟtIěĵ[fWo  @ @ @ @@T'd|=NWqK %S'luxSL @ @ @2,:!q[G7:,&^xoǛb @ @ @ a _5ԥFf 3mțQ`ꛯFU6)j  @ @ @ @@T'd޼gb!\tvފLr<;f 99QS@ @ @ @2/:!qλ$je3|@yGDxvGKdz z|O @ @ @ @22a/ImՎ˛?f }wzwݣVwvժS&.n\2uR42=oGf1 @ @ @ȼ̛wU}谂uc?|Lʠ]:sR.I @ @ @ I;;dR{CΕ§Ff%?K%o$ @ @ @(= gCBS:~Ĕ]/jz۠c~=ɩ^z  @ @ @ @@f4JZ;]x'9Ox'gegWoظV-wպwֽ 4 @ @ @ @ Mi7h3u6!@ @3s hWA& @ : @A฽TTV|cZ<#& <} y6?ᴄ& @ : @A`Id%e$ @ @6S]6 @ @ @ ) v @ @ @ N\&@ @ @ @P)i!@ @ @ @@zᮛ @ Qǜu%aHh @ @A@u @ @4oUlȑ!@ @b @͟]fzURucneK._pE5kkشU6fpsg0yY4mԬu&Us&zռӪר]q* C`ޜK]x~4n>5jN/[p)y-97uΘ2vyfmФI󶭷\Qеj򹳦feerTozB @d @dZ/}{ի|uu -t9ΝogWMYޚUJ eM]+/}G}:8%^,adzgugBWB Oɶ[m{1ffN׎9?TTɬe׽?g3Ϛ6ܚ|Nr>ʌ<5 ʕst=EU]|[ᐑtwǾGO˶['t%4yP>O6nӮ*̄ e+!A'{cqn4Ïtz'$(a|ћ}.74Ce=}Љ7gL0ޑ?8G-Yc_;xԹ;:?  @ @@ N(ub' @ @,b;vP0o_׷jN8*|yo{5^/'o}au{/[M{~^r]w):! *+-JX[*0y_>p-ż_ cC ~KxΤ/ >?ڥGλ㶻&I @JC@uBi @W p=gMk׼F;( xYBAC1SŻΜ>+~+krW_y~?x1w\qlXm:{1³;8$PWANjb_:$TǾ ӆX$%]g fKN֓]{JKJ]_}ƥڮö 7cw\Pb֐&K׋ٻ/+y;i#?c+?ۑ\qj[j?^ @ R ;eV @l@xU^|iBt1_{E#_u%/M'_&|`})o҄hUPPCDg@ukNE>lQrްƮ{>!su%)M %7so&}noM/jyyknwUP8Uxg04a}7K '>E @l @s @@ Gd_?yV9k¶ ?[̳Eh0<#/)a”oG~wJ ϭ_ꎔ]CF$bo'' 3#>JרχaCx93nwU%}ՉY^̂_u>\̀bVXzeGZ1Gn=7,>~1z  @ @ NxC3 @ @@IoR9J1CyG?|mQYY{{g\;墻>fL2 GS}~^q^<g_=p`h]rS䑹W:U^_g[O{Y"1[M>ON㷒'l^.՗h{qǞC}+UJm~|r&TcQLfnzI~f<^v>/Gq{>eH*6}DžOi۬Vg{އol"p彃;wy¹G%ē!>xf̩K%ǟsգѰOsz(_>' >OvVlc?•F ` {Q&3A}%fN<]m03&IH'orpnvߟ9{C= C^z0/?tǤ=JoIf;$W'aGEwpןGl~GzqbG{?j5WYp73b:yU[uޱ}j2|9cʸߚ+3?N*#(xٻNS6ξp̾t'4ᐼ5ûl$@ @iHpܦ ܮ @ @۞yC  r_F6$j_.0,x>ߒwܘ5}FM @H@H96ن K]& @8􄋫UQTӮJNκI$!ӠQLhN{cvv?=sǗ0.`>/:p1)>% Hf|ru¸y“ ^ q&oz©CsW&'rrMQ']\zEa)v߿n)nlh) Mh @ @ P0m}M\&"@ @&!cRn:! OErW oW~omOD]Em욲k^y+N}^>s]3곡+/M9ɰC1#F$>yLr3vβv1_+,O{ ?IȄfcBCxB<K7L$$ֿ҄0>7=ay˖,1ylB24*LhҢ}e @kz mYbvvv{&;<[Iq܈v|O,\/|oyZuX(>m<^z7_>!]9g7p׽_nߌoz :",_ZF 0w}ptT:d%W',7+:$ g2j&ykRzт9-uL_FfWU8cbJ&-%'2a̼a Lr^oeR76HP @lꄍ7eP~TNTn @ 9⟏~Mޝxǃ.Jn@ N;.?$[;gp/G:Kr`ӨIu19 }鬼5$1!G4Mzо|„anm޺Jy3/~@mظec2vӓlɂdNNՔM$lҼmB&4SN0,[Ih @ @ !NG @E$GKҤa:ndiB~:O E(O},QJFZ'79Luw}H‰Κ5w/ڡ`yѯ,a7G֩[d'/5eF&-~%Ƀ2]$ KnV^e @ @@iN( Us @ @@uB~~~ē7]x7'ev/?ܕ2s{-*h7吰DQV @7Hy[ @ @@y7{o.o4mE<ړ|h< }ϭumzl.ժL~B489hac>yO8o$g ;Fɽ͔9)jծrp=ؿvFO>sٓuqSnuQ;[1vupzlW? ,훞 ?XjEla|N1 @(+ e% @͟vm^NNbsޜɽ ?uG-8늇O׭K\|]ns̜6/};j% sO?~Ϋ:Յ=BD1R>~UA1jW_= z!3wu f}=/ZH9C&K'/Aɐ uN)dʿ 5 @ @@PPn @ @" w LYEnzSS TD9na3Yk7i6!,a&<*/Tِ/mO…$0udRئ{R'VX6/{ód2}P&wU%ezDq8 &T'DK*V;'h<V._5 @ @"Nw  @ P1kN+/NffM<,M#O&y|<3cʸC<m:pl chvs8cMôJ1 ^wC0V]v*fZm9wUTƛ5  cJᛞp A#yS>y{Qo(]"aңwrR @ Y! @*@x@x;B-$_kx|y[E_RNXxџDǦ ֭{5kNl)uWV=!ҿCt-7l> ߳oe!xiRTEti9)㣓p .j`o}:9คLC(F}͗n>Q&|OE<z ^uߐ63|ӓK%W'[GogOMmns @ @r+?/Z- @*@37c|8hpZu8 >_`SLa\P J٪kNjkrLaW÷ix2sRC ;.?'SQ4a-^pΝ9%,Ce@Rnt`!Vz{6}萄~æ>q̧|и#nyxJPHq5'/]>}wJBf+ eO{  o|n]M/]<9l9 <2 @ @BdWUZ$ @TP% ^qjY'?C&4oǯ4|S<,?O?N >WX)V i✜*aˆw\qo=2E , ?vxkƍG}6]wIMy!g2٪6\CE$ySLN'W{o<ݔpHriB8~G'OV^ss4OŸ_bٺu&s,Iߠq^!@ @B*mH @T`+%CO8RU'Z#灻ʳOMU)W]8n_3!^4v"_z΍נɊe|1,E apNNծ;Nv;J$gئ{r>P|_FEnP8l=ܽw>yspZӖ{)fϘfu˜>q]Zdoz e|+(׽ SRVՊ(+Z-EήI @ʃp @@5׬^e)68!''t5j*|?1U?\$ͬ찣D￿:[+М D֭ZUNե` @'%}~᳑Se5ow+|mP>靶ּ[3sӋƜ*]w>K @6 VV-תg^7ݵ\;^ynoV̙haJYsoаSֽnM3; @ @ @9_|:a'ݪ+,]plMWWԨsׄa @ @ @ @ iT< ^?b94!yCxixohr  @ @ @HtImUM~ .ݺ8pưSuH-_ƑMr  @ @ @H@i$&bEXpōW-vSZڧf!d}ϻfQ4,m>ʊ @ @ @ .NHγvժI/=ڡ}͵bw]u:}bm*W> wժG|g @ @ @ FNH#M.7_-4~ &M ]v?;xjE^sI䪋Q9)Y @ @ @ @`cT'lF;sunW? 'oFv^0owc)q6 @ @ @8 Wn^2mt8߸ٕ+]pl(P  @ ^Gvu^^n*U.!&@ @6kxYT_6cZ|[ ]YTܰSxׂqěb @(!ǥ\3I @؄T'mбow]E%83UofQqv[ƻ! @ @ @ @NH LRNV{NydVVVAAʞ"*57)rhcɴ)V;Ǜb @ @ @  ia,IZڳ(\GB}CI4oWau7 @ @ @ @ -X'|kk.Co# @ @ @ @deTD.=wvVo @ @ @K@uB$+<_qgSe/~Q @ @ @ P;;Di6t~^z&~U;^xy:E @ @ @ > 鳬3M}.>gYŶܣώ5 @ @ @ @4 NH#fj?z5a]O:TR%!I @ @ @%:!]w+Gw{*֭ۻwr<)&@ @ @ @iPvr4aAAKW1aY8ul,!I @ @ @.:!esfs3?ts}+!I @ @ @JI@uB)ӇzW/_G&v.')rx^L @ @ @JU@uB>QRU8λj:QR@ @ @ @2#:!3Ι;ˇ;vo[œb @ @ @ 1 ĉ&\4!2a픳2qn @ @ @ @EN(OF ϮRw @ @ @ @2.:ii|/y}xBi$@ @ @ @PPi},]>QA j4nR @ @ @ @ N(!TyӨ%NVD͒۝q~QF @ @ @ @١$J}y?-_VWi} @ @ @ N7p  @ @ @ NnU'l 5 @ @ @ @`ST/B_Y׮;uB! @ @ @ @ xwBƨ @ @ @l6  @ @ @ @@T'dډ @ @ @ @f*:a3. @ @ @dL@uBƨ @ @ @l6  @ @ @ @@T'dډ @ @ @ @f*:a3. @ @ @dL@uBƨ @ @ @l6  @ @ @ @@T'dډ @ @ @ @f*:a3. @ @ @dL@uBƨ @ @ @l6  @ @ @ @@T'dډ @ @ @ @f*^w\СC [:ӗ٬#FHyG -3{|O] @ @ @ @ iфe"dqtP0g_?| Ѱf| y1 @ @ @Hw',](:Y?sI*RpPyF]T1K GϮR׍wF3 @ @ @ @@T',W'v8joӺMY|{W/%]mn @ @ @K,yV_kҐL4!Z|;79~gq1 @ @ @K@uB$r5K$~+olw|a^-zрcF3*j  @ @ @ @@T'K,\z[{MH&4mo  @ @ @ @@ZT''RN :vTVVVB2i`iWcd @ @ @ @F NHrqx*U*W_JÎ͢ݺWKê)O @ @ @6X@uӕխ_PměE9իn&]hA  @ @ @ @@T'K穿u ԪoWY+ٴy  @ @ @ @@T'Ki] Oo/65my( @ @ @ @t NHdd+X4xx٬FT'D @ @ @HYLzU)뗻9}[%YΌuo  @ @ @ @@Z~yLRV[n'ܯ)u_fn5 @ @ @ @ ]%Yt9" >P$kܒSz @ @ @ @t NHdϳŀCZ~5_ۢI~NgA~^5DxıQS@ @ @ @(ƹLUYϳ{ndQJ;vMxk6m1ƌ˳>zfe_2" @ @ @ > ,3nzuk..\ڕ+F}KKꛛlף1z  @ @ @ @ a遭z9۲$˪{ 6 @ @ @l s+G5Orٵ95kv:1b"@ @ @ @/`g7L g_Ԩm3ΟΠX:sfgeghҴVܫ]mgq8 @ @ @(ꄒ(U1Uç^u @ @ @ @&!`gM6 @ @ @ PT'ci @ @ @ @`PIFA @ @ @ʱr|s, @ @ @l6" @ @ @ @@9PPo @ @ @ @MB@u&q] @ @ @(ͱ4 @ @ @ IN$n @ @ @ @X@uB99F @ @ @6  mt @ @ @ @ N(7 @ @ @ @&!:a. @ @ @c X @ @ @$r6(/1tA斗i#FHL!@ @ @ @Q@uBz(M߿ڦ3 @ @ @T쐶;9lذe" @ @ @ NH۷o2 @ @ @؄쐶ٯ_!C 4(777m҆B "`{Gqtl2(^GX6^QbW &=3ބpCHxf~><57{ @ @ @B NM @ @ @ @ $:,J @ @ @* 4 @ @ @@6ŗvٲM @ @ @(@f 󥗉@^N̏?KƍY9onΒUedVoаQέzG4ҭ^)=mҩWFuZfvKgdtA @ @ @ @J)c[Y,;f݂uk-;uIK]?y[2͗ 19+⪋r+bt  @ @ @ @@jT'ֳ>3?z?ќXxwqc/>}H1ioQrs1D @ @ @6P@u~w_?޳O3_sΜ:詗W4']gSPy %'{ŸrքNfW6y_|f֬&ݷ]v5 @ @ @ @@~ʯax掸0wu=04m]i 9^|fN&`0ަA}C:u #5kll:|[Gfт?5mp @ @ @HRY&z ?/%WŔ&CiiiOkH׭}¡Oy0Q·>fXƃF+G >]- @ @ @ R )Lz siׅ݄]ե{8l{xذ[~U >>QZ؍is-<, sz4!GFECƍv}u0SvQ=zE&60&@ @ @ @P*bάhvvjrٿDs,mkh7avuy7wժA @ @ @R%:!U%X'ZYfVd&gOMkahwv:FGGjkp(o @ @ @ @ UZ: 4߭G[)̯ZvZZZ2sMڡk[߅PLhҥ{4zUCCtT @ @ @N@uB6hVOXlلN-^0?mNح۪M.Qahª]m @ @ @ ';fiimۅݜ%a;hi:-] N(F @ @ @R@uB)6}g+gVgAY8 5DŴk4h `v  @ @ @ @@JƲZ$8KϚ tM":C9NȨ^#_LV-dC @ @ @ @tJ1fM{arZkKFv 5k$խVAthmhW @ @ @D@uBJSȲ?q%?F̺O=fT͍F2}yyщ1 !m @ @ @ Pjd.L,@ʕ?sD'Vנ-;xZ4km4lˣbVl$&@ @ @ @)P,RPP0qs_oռ91u87Sͩ keGGi嬉R&@ @ @ @NHr:iְbim^r}b1ZME#9IW'\:!M @ @ @P*ү3c9e͢%vwcHȈkmꄵKW%(+&@ @ @ @)PR.MWpO*ժw;^Qn0X|jZU]0mŜY燣 @ @ @ * ,:`Sl!{`dڵ4:a_'3%ɞ>-̬YaaW @ @ @J =U Y_{)Zl1R&ncV:wٌn1y~f͚aW @ @ @J@uB$Kҩ?o8'j#^焑6:蔹}&l]lPۃ @ @ @ @ RYbR%mGms̏K ްqa_*m4m˃  @ @ @ @@*T'R3ɵ,Y5lwa[ @ @ @V 3Y-ɯ ZvYv #I67hX3I4n{6q óN ΌȬY33cf y' 6sS]  @ @ @ Z Ljy3|n.g]{cx{fua|[N_ٴ?9_~\nɤOLKߧ#ivD @ @ @R+:!_mՂ+?T׭~vYsf a7׭lm縸 @ @ @HꄔQ&P)If.mQڧ622{?zriF  @ @ @ @ K<=粭Nnh>on\{GJ!2D @ @ @wB$]'(5Mro=Lb/̯լy6mmq'5-;G @ @ @6L@u†mڳ߱mn @ @ @ @ 8١cOH @ @ @W@uB: @ @ @*; @ @ @ @|T' @ @ @ @/:cOH @ @ @W@uB: @ @ @*; @ @ @ @|T' @ @ @ @/:cOH @ @ @W@uB: @ @ @*; @ @ @ @|T' @ @ @ @/:cOH @ @ @W@uB: @ @ @*; @ @ @ @|T' @ @ @ @/Yq#>СC1.5bĈq @ @ @ @J*:!e/6(M8S @ @ @ @@epCG},D @ @ @*ꄔ޽{l-  @ @ @ @J$d8`Ȑ!I٢B|ԩS7{q @ @ @ PT' R⦱V>}T'l] @ @ @ @B 8١B67M @ @ @* * @ @ @*ks @ @ @ @ N@/˭ @ @ @ @ ):B67M @ @ @* * @ @ @*ks @ @ @ @ N@/˭ @ @ @ @ ):B67M @ @ @* * @ @ @*ks @ @ @ @ N@/˭ @ @ @ @ ):B67M @ @ @* * @ @ @*ks @ @ @ @ dV{|n5/77ou릥S\.X9JZz$@ @ @ @ꄐ<y993?`/-7f弹9KWRYAF;VѤK_ouWvₔ,k @ @ @ Pꄢd6^|}{5ke\ oݚE |i<=vcJ =!,M(\ @ @ @ @t饛fVJ,^|~ Ϋ'C㇒|uccG%/ @ @ @l 7, yy̏O4?-8!>b;pܘd"3ɔC @ @ @R('nbٟMh{N'޲~6 Ӧ,0ṇ0-]gs{dѹVRL @ @ @ B{'K7w}w3zuO/Ga<>Wv4 @ @ @ Pe} 4߭G[)WU;--->'>`h0knL;?/3O^Rv%&G @ @ @l Wi٣WCh}˖MxhVVnnL{n`{t1  @ @ @ @` 8aQoЅ`Ŭ:PmӘuSaZ?ߴt/:I @ @ @67uýOL8==?Sy9˲= o]aw=T\  @ @ @ Kp@O/=k/FtM>K^9~>'Fj @ @ @ @/:a'{i1VΝb^;]rU4mOx񙰔N6~8:M @ @ @E@uBf՗1yO=fT/.6%fPZ<[~ @ @ @ @`c NؘVʕ?sDkN<-rs=!w` ٲGh6 @ @ @(/ %{݂~͉p=nMc];&;U7GG  @ @ @ @@9 N(G/r:iְ~Vm;׀{G#→0Y>W1u  @ @ @ @FPsCx)k-lt~7v:h_& @ @ @(/';llU Xz @ @ @ @T'lliS6%] @ @ @ꄍ͟ꄍmz @ @ @ P{zr)|JS7 @T\{ @ @T' @ @`SF 4SƬ^rur5iѬ6-ڴoj[m}CV?#@ @(o \ @@A§Y2 |w]'jvϏ\aXp^C[ŬPQ?;&uҏO]?˜`9v:}I?~s;}D_ I->fe5m=묩_})?'7!kvU o]]v}oW\E Y w&#N @  @ PeO+dfV;u1}^7u11CjL\ ;u*V䶁d<];² Λ9ۡ|tW.! @  N)4 @ Y=!q@xaا7Ȳ brҩݝ׭O{IFŗT]׽oѲg j2;M.`a`v/j8 @P;@ @]`ެ)G(4ޢU1 S.]`YS&&<{̩c-Y|֮]vM-+S\~fN`^^ _fuf6n ^k75ji<ԬU'zэ^;rem%fV[6SG'P_;ykmWo]M @bT'Ċ @ @`sXp^#s|0>^W'iL/:!WŻS}pFMZvqȾ=wuc"y^P<7d5m zfuO5k9A_[D#YM[ #AM _X8s)t49^" i$jcm{ߧa'UZ-:_Ő#z?~:tscO6_$/_n.oK̍}[Yjy8w{AEPKNI!>?===9kVƌfk֮%@ @| @ D)-̘i;X$& ?&v֭{oCiYaNj>|~9ߓw\N|1 T޺S'DӶjcau[CW͉&l!Xa/Oa~_x_ΪU^|f42yO{ɄQ_DIϋ\{qxmkԊ]QſFW 4XvY|[›=}w=v'a$l(_p5wpVDNx?m_9j,|"%@ @| @ oE<;PL;Dbrbo1C?}%@ΚUw]~ȯ'd>xE زCQS=tukJAȻ;~cmjt~䂘KgC~[&/jʬ^ǭZ 鼝j>`:Ԫ& @ @ W' @ P@&-&z fu 殽#c~Nfb 0oI9'&s5?w ͼKaOp)M:kVԂaZ^?3QR)ا;\}Go=Y9%ͣDS¿bN#X.OI8.44EK?g J4?~ks֬7  !1VFLD2`6s)Zad/!6^΃rfbحU ȭ3sʏ . &.o_6uSw +//oQmvh&vo5%';Yb6H%,B @L){}Qֲ @6@z Ϲ/Y8'Gn{ځͮ띁Y9u\_y{zu}S,r޷TI['PA|'z~زM|_2aiB0_{-6J>}3|{^ A}٘`JsmաkR/>r1v2!Fu?yÂ҄`4!C?o|rȦv';!Xk: @*ꄔ޽{l-  @ @` WVKz`F{ ;zOy @`?l5O%;<<~Vz?P/8>;G­ҍY]6TΘ>ytLNPpcf9GG8bYt+O\oL-_~8jԪ{}l}Qg5k?%&MI#~M!@ @MA 0dȐ&K|0uԮi5 @6A=\Շ/'<{^`7Շ.ժժG"4">~?;&f失J7f7a-ڴ/梓~&~}o"=;[nC/;w(yN{M3:ngAIZZ1%vީW39ymem;sr=pxYnMp4 no'T5+-Su  @ @@%P(I力Z}Qi wA @h%pEw|qW`/b/޽_+HًgN?eCOF#wܳI̝ F +w?҄"涃nnEU?5d^02qWa;la;Ѫm`skVEV,[Bb`ڧ\៿=ˮ[דDY[ϝ'AD|0t:^FD/]?=8&V$>.B @  @ +ШI`߂dἱ?ç?| IV*|?;g椄42q ':aq5m%}W.v&Y`v|_⿯%QuBP]S741eemYטZ622i}QSoѦä.&BbCU'4jQL!@ @A@u=# @J)0YPdPXgbْം c ?!ދ㷟Zpnt\r# _n-9\9A1G ?~# ͌۸cUD @ @} @ @ ):vq g|xEWzVpYSfvCn6iޟo*~lƌmи˭X$aB:Ɠ f2scrrsDRحYΉɣ?z?12̟:!iw h>ڍoW祋{rEM&B @{j @l@:vkށc4K|@Q^ZKxAiU%X0~n񑂂Y^17Tii07nb"st%ffՊ`|L- 7f͉H5c"1 vbtݠ4amY6;O!@ @S{ @]`¹^ժ[nM~rd:4f5kǯ,h]7тiD.db&3Դ V._Rz~N81֩(~hGBiK0qe_yڞ5[2l2/uV;̛Ʒ+ۉRDVYAR¸  @T' @ @`sxՏ4mvݧ}LK # 7*p( .Ht}MÄFzzFL$C2>"5jYsW˳7j"&dN vҞ 3m.{<!z{.M.oK6/׼u227$箯:BxEekOiަCn=" @ @P͈ @6YۓN7NudܪcpBQS}_|uªΜ :l[Lva1D8T9 'ѬUS,5u``a78iO[3zeX[ }iV'vw~k׬v4x F~[M#32cS' o;]6QN§H2W]|QgE @ @@(P/%4 @ @B 4ItTw2ϵY&louFN턧,Z0;&-]F:!~?FfO;O{/ -aEYM[Kz2$$!#>!@ @ꄐB @@=`+g,ȇo<)vީWߵבa;lL!>ap,BL kN0;ټM'iİ_da⿒fӆX:#|YVTxwlVxV}f4اu\E`x } A~~~z˖.N/l<`Ez0/Qߖw'+៿s?s|=oۖ0)}9ǘ̢<$=ok @ @`PپzN @߶ XnmuuI pPP|{[O*i1 8" 1e=k?yc~QΚUcF =vFu9~T*9Gn-ʬZmE1w߻;Fhv}t]rwjpe¹*ɬo')J ='==nwkש?*B @$ @nW[y=lP=,&'f(^ǐYAIU0En/兒)"wno04!)]w?߯U^QSZi1{t|Q eV6N$ӯ.Rvݠ#8duǝ2270"$-L v@scoy|رg\cׄE @+:aD @  G$sq1gJO?o0>PFbm>^uaݗp#kme/OըU7fw}hłoxËo}o7l6Kn}&L[n 7 8ℋ+cem ~~N "AEBOA@V$L(*XNQRw!ĜvyNPqd7(~q @ l>OIK'ЧO_~9~n @ P9r֬<)OiV^|i^޺ (bhШiN;k.{?׭˝8_0}eK.[ wtz һuHD ??gs [nbm[nmrt4???~&xsE niKyq#>[% Ghv;ww)Ӈhݷ%7wȯwΛd~z5i[&Lz$ @ P>xҿs=.9 0kUYr^nnU-ſ* X3jQ8 @@B:3jz=O`Cw >Nfnx%ݷjjS) 5  @ @ N$i^N̏?KƍY9onΒUedVoаQέzG4ҭDf`%&,2qgRn:o>[phhA @ @ @ @tJYc[Y,;fтuk-;uIuLx鯮|G~|w޸_OݴdgF&@ @ @ @'$ >ϯ8?4!3A{h$穯O)MvāvoP[yc~ջNVZozO߮Cz.?/j @ @ @ @ NHgM\A~^%Wu=m{$t>nukD#A{U)=o;h#sx1=jهaW @ @ @P@uB 1Kāo~PM].]ϻ4K0g͢ FO &;vx©a|%&]  @ @ @ B )LvOfosԱ陙a7a#8!8!:ph7?/oѸ1aIvQ?hW @ @ @J@uB$Kӣm92-ݨcP!3+/lMNخ(+Ϩ^#&@ @ @ @P*TDoM[Tޖ[G%ڭӼezjada±C m @ @ @ dRNHϬZ3I2Ȟ>5֨vnp6Dۆy}vm؍oa<-=~ۤ$) @ @ @ @ I$Pn=zrOUkNKKKf#GӲv-8tO?WΝ%g~ɘ;⁻>nדիv5 @ @ @ @@ T'3٥Z|yk-ҳ)Y]EA{^7Ag\Si]yS-V}׍<"JV}~7Fs  @ @ @ @@ T' fhimۅFZzx[jeads Kmfs,^ =?<`Kc|g]a~ޚՓ^~.Өj}O^c @ @ @ @ )\R)ton*N^$X0qxyp;i;_vM+: @ @ @H }=:M~-%(Vzo`hv'}=O+"A @ @ @@)@Lf՗1+w>̞w>QjL[PPɅ}'Tt4-#4l߱nV͛tʤS'[*o_^ynl @ @ @ @ NHVj\=?mN5qKN' ƴ҄v:&UUh+Fgp5 9K}x QZ4S @ @ @D)aL"^stbJ:{߾P|i±}䠃~94!HVnW&n2_2iv5 @ @ @ @@ T'K7?'/DWimG[kx|{wE۟v6GĴj#VI 09˲ct  @ @ @ @ e :x`g (:f_i>xvUS^UoxϛֿBSYAv5 @ @ @ @@T'J4~yewؚE ժt'L4 o]ФKjbv3:j @ @ @ @ddN~{ѹm?d;߶]4?Gsw!-xO$"@ @ @ @PP:̚K҄`˄ng)9˲jf5vii&:^jM @ @ @R":!%%^dɟ\7^/ns0RF-'$Bщ;wv  @ @ @ @@JSEJ*嵗X۬yԥ "mFGŴct4Ѯ6 @ @ @Hꄔ0l5Kpp8ۅ?[Fj6iN\ӏӇviL{p4ؿaaW @ @ @J@uB$K7__[8!Zg_\ɉRȰ]2ozY N=4 @ @ @ @ e~Ne M~m`ܺW˲OIQAÚYM^1aks #gxО=D9a#ݺq( @ @ @';l^iv43Sv/zΞKLZ:mrj7objHҫJ$@ @ @ @PPJMZ:ʦ @ @ @*? @ @ @ @rPP/  @ @ @ @@PP_$@ @ @ @,:_ @ @ @ @J/:ҿbH @ @ @Y@uB9'@ @ @ @^@uB @ @ @r~.O @ @ @*J=  @ @ @(g \ @ @ @Tz {@ @ @ @ P< @ @ @*+ @ @ @ @T' py @ @ @ PT'TW  @ @ @ @@9 N( @Ϫn SF "PAE먢 mjqV:ku۪u*qT(P@2@B~룗kbO s{ҿO!@ @ @;@ 5j999^&Mwq  @ @ @QT'$͆҄={&m: @ @ @ @EI{GN\&"@ @ @ @;ꄤ=z$m. @ @ @ @HI{sȑ#ID#F9sfXU @ @ @ @@ NH;  \}UP>^U @ @ @ @ %쐒͢  @ @ @ @@ NHe @ @ @ @ %T'kh @ @ @ BReY* @ @ @HI ), @ @ @zYJ @ @ @RR@uBJ6&@ @ @ @)$:!^ @ @ @ @P͢  @ @ @ @@ NHe @ @ @ @ %T'kh @ @ @ BReY* @ @ @HI ), @ @ @zYJ @ @ @RR@uBJ6&@ @ @ @)$:!^V-5/7wʕ[5 @ @ @ @K?Ĉ ,2xًY ܽyf-j6kYy={ѸIi3;d) X.i*VٵNݽ7=NЩ'@ @ @ @PPZ$/h_O ̻79sŝz m9?_U !?oúeKv~p{pȍk׾@& @ @ @HY>~o/k/Fi\Gn7xnY49j Y3O:{ wkcҢN @ @ @HdInIޑje4VV'wT-[o/p'X=︩۝EQp5+tΎ]nvSCØ^cH\]Ӟ}Ɠ @ @ @ @ )NvH c&Ξј{=|l4!F2,auѤ!at衷5SZ xdxM1 @ @ @Hꄤ0$ ?7y9HTo/|&v_rڐ ;t7 @ @ @ @ )˜I6]Of'5 -oݵI~{oDS{-[GM @ @ @HdI&aoƼ'V^cÚfٴyjҵ[-kN/?MX,y( @ @ @(ꄒ(mP^JJJiB8/³3 @ @ @ @@ғ7P`a~]Nxkn3}JwUmʹ @ @ @ @bT'/UQuQ.ǽ|}Y94= @ @ @ @ Y%Y4rб IK]9wv,2^S˳,OG[QB_f @ @ @lG v{uф?Yd1/og[$*U5C07nMWWƯ  @ @ @ @v޺Mwz~ކz׳_ҋ(Y'c~7p{D\*tݟf"Q{_QO *ɨYdi @ @ @ @J̴m۵?O(t#.]kߡ>eoՌog|`/<1/ !7VyxO4!=%:\2[)yL @ @ @ P %QJ~̋^< ಎ]U%sW*ЩI @ @ @ʉ@G ˨٠ngV?J/<$k֌z @ @ @ @@9P^Dݛ}sBkoTf񋨘Qn>cǞPdf8~ @ @ @ @<8a{ʵj:^z7{wF/·RF{ٵ՞&Р4,f{?;|Ip @ @ @lG [Wk{_ @ @ @ @2pC @ @ @ Na  @ @ @ @2PP$@ @ @ @bbB @ @ @ @ T')  @ @ @ @ @ @ @( ejJ @ @ @ @ &:!!$@ @ @ @@@uB @ @ @ Na  @ @ @ @2PP$@ @ @ @bbB @ @ @ @ T')  @ @ @ @ @ @ @( ejJ @ @ @6j@IDAT @ &:!!$@ @ @ @@b̹N9jԨÇ`&M @ @ @ @P4PгgϤMg" @ @ @ 8!iorID @ @ @ @`P٣Ge" @ @ @رx>!ޱ?mTŒc9fȑÇ)TI1b̙3SeI @ @ @M@uB2H(PdX>۷* @ @ @))d|mM @ @ @RH@uB ,K%@ @ @ @)):!%_E @ @ @ @PB/R  @ @ @ @@J NHf @ @ @ @ T'˲T @ @ @ RY4 @ @ @H! ), @ @ @ꄔ|mM @ @ @RH@uB ,K%@ @ @ @)):!%_E @ @ @ @PB/R  @ @ @ @@J NHf @ @ @ @ T'˲T @ @ @ RY4 @ @ @H! )vV,Y'@ @ @ @X|e"d/d/Zfт7լEf-k5og57قo ~=bXΚje$R6m#{qr l! @ @ @ P L,R4q['&_g9[nҊizZ gcggm7v۽-z@& @ @ @HY>~o/&~V'uӦݚE VLS #~ѿ;3Տ: SqL_wɯwݣM3{oߠsWJqP  @ @ @ @ NHe&tVFCj5ouGn*ݲuyBΊeKy_.] U3z=\cOzBP}{~Nf.L2aχ]v;x @ @ @$EIa,$38Sw&DB考CAZMu$'O=xφk#G҄Rv}|H + @ @ @ @d NHd)T0;hb7vT8!JX'7F({жπY8hЩK#}q  @ @ @ @`; \2??;!ɝl,p\tFfM;"jn.hб̗&fu6?}i^pi웷G%OvC @ @ @N*߾Iy޽{תUksS1bȐ!SLY`CiBŊԩӾ}#<Oԩ憗~ e&kJKK jhxa9GD95woѬDZQssA3/h|hjK @ @ @͛wy%)=U' hÆ K,yύ7x '~X@ZJ4U'l״z5woKL_ݢuEߏ:۟wqIvA\ff.W@ @ @ @TXlٙg믗dÆ {w^xc9$*Guvxm ubz* UVnf"Xļuk=N @ @ @(yyy}}7 -_BwBKV:'LСCySuvxATw]E>‡A7&JHX +^55 TUn56 @ @ @ Pk׮SN &~\pQGըQyƓy: k.쓙?߰vLK?[wmGEY8?ռe9fNV.p\N}oF @ @ @  W5K,Y$D2ڂB}*VvZ4$qYxrgy r؟iN3(aΚMwz֯^=o[ou˗FSY^͏ @ @ @ @ߞ]$rʧG!STs';~屧ѽ;+ZY~ކEa U3f) 4jp.]DL @ @ @%>DfK{$JsW̙3'n:j@uBG߯0sf͞oVU;ެvxssqŪUk4=nŲ( @ @ @ @@IΝpQ3)A'TRhdChv찭_?\t]k4mv* \5wv{Y0TFTV=J֠Q  @ @ @ @$7|sNNN"3###^P.g}6>uwB nxʬycJ|gƼ޵ZfxfŌjff(/W7oܘ=gs  @ @ @ @3x≨kiڴi_{ &tʙp ڼΞ{Eܸ>g쯢fҩS 2ě}X's ǫ kN, @ @ @(7޸aÆDbƍ TA?W_g޼y/xԨQdxgJĪku϶[.7&,&^2eRjz.i쑯œ75<~ƛb @ @ @(FO?E?Ey995Tn*K @ @ @(,pwlܸ1џq)yO~~O?ݦM[o5'g.a3JժEDzP)~͍ztgŪU @ @ @XdСCP@PnݨY`sg=ؽ U 6\:a;PVbt㱿 &O>=Nԟ^A)jFANjwhs_б^q7m:A3`S @ @ @?//6ÇoFO )Sq7Fˮ۶]s.Oyޅ׸kpB}˨ r_ y:c^CnVD~O>CN֊DO?ze :v Vk(:,dW3o[fHKv}iiizD @ @ @ yP:]ڵ5Kw_uFURk4hP͚5TT'l7x?~5/aF\pYˮM_p&r6ɞ;7;2;t*>U @ @ @ 6gΜٿ(.UpWī;kݺu)Nv>Zfޯ[՞%}w_&v?wk5oU|Zj8`w$!@ @ @ @O>Q'j<2dH4!lk;^iB0QPIά{oNr j^3xgJ{}{?UV=O8O9br\"@ @ @ @k׮1bDٽ{FEӧO ʕ+>K/zvVU+ߛ߼3zԏ-_2ޣͮu6a֠aZ1#k>{İs^ -==#A59=լEL @ @ @A &Y&8S5\jժD~ZZSO=uG|xeNJ][;|5kyJM&$@ @ @ @N+7GuTYxa(7M~8a| @ @ @D`Æ J4uÆ ۷o5K<󹹹*U\y%iNHwg @ @ @ &NbŊݻw{')aPN&o4 X @ @ @_!o00aBwY`sOo @ @ @ @@* N8KŋZR=_uBA'@ @ @ @m'0~fUTԩS,a0cƌfHivY @ @ @ @ ,Y2k֬4!(D;guBH#@ @ @ @;@fff~~V"g+'INHWf @ @ @ @ T' \ @ @ @ rRY0 @ @ @H1 ), @ @ @ꄔ{eL @ @ @RL@uB0%@ @ @ @)':!^ @ @ @ @b-5jsrr2KI&9fִI~Yt @ @ @ w]eg I{;4gϞI.&Zן0Vj @ @ @ =4ѣG'm. @ @ @ @H@uB^f=6 @ @ @ @$dc9fȑÇIڤc#F̜9Z5mc !@ @ @ @ u>?"):!%(O2g,s۷s5Z @ @ @:!9fQ @ @ @ @2PP&&%@ @ @ @"  @ @ @( ejR @ @ @ @ PQ @ @ @ @2PP&&%@ @ @ @"  @ @ @( ejR @ @ @ @ PQ @ @ @ @2X& @ @ @Q.䒒$##~:t85FX @ @ @nٳfڂ?7pC-N;m f0J+& @ @ @vO>'|s=WRmH>ի7ҥKnݶM-T'a @ @ @ ^| <8==oM7͟??qkFuBY @ @ @$Yફ:묳tYYY~)S|{/6t޽{?)Ni6 @ @ @>M4رcG9|׿.P%r-KKKz()\ @ @ @ @8sG]JhS;6j .:!&$@ @ @ @.patAUN6-'W@uBr=?[nvvʬ]reg7# @ @ @vVnݺ}8;ْ+χe5i/[_|ьɚ5ۙWϛ[nl֢I6+BR& @ @ @;YbҥKu֭W^,&(0aÆ7n\dIbȆ !3VZ&MKESLygϞp0gf͚7o~Ƕo߾b:srrF>cƌ˗/OW~; ;t萖V-:aܶŨQ&ꖡo첩!Ygڿ[N_%.մ  @ @ @ ϲ^{E͏?#aâf1%\sE `W^ye}I4CM@<.ŃPOz뭳f͊'⫯z/>QFeeeEk׮}W߾5 9s_҄Ą'N袋?iӦ 8"KSN=.Pun}:a d٣Oy-zطG/?o~ L2^:G^nn19. @ @ @ @`+3&z-ZMf؇ 5ׯ_/GÇΎuYQ~za⃒ ;w.PowO0!Uƒ>xUWHޚFƮYhenbqR^κ(-fG[skŐс'}wh @ @ @;… {x1*UD 0;z6:4p'B{sOo\re"'GtIy yq˖-zԩs9;._|wP`tDNع!Lm6_;5O8ᄁիj/n agyws}ٝ:uz&P5ze26lJ.o]*o֣ױO \FbFFFٿxwu˖$'N@ @ @ @vH[+r-J?ݻC qĈVYfnݺaÆEͣ:qơ~ݏ~뮻Pgx~5e҄PSOgO!- 7Ð .`رB6M6EQNʕ| :iDa]w]"ܚ@u؏ۜѯ'NPg4_|>M8ujRʕ 2sߎ|)㧏?:0 @ @ @RH{7\pnnn=&|7ጃxι#{3όrrrBYC(-_W^uQ\ڠ=®Eаa÷~;(c w {'Bc=6~I&RDOJBqFj<[J|͗^zi3LdٲXu–ը%S&鷉٫֭3<nCP']7F׎"K Mvk#_M4҆u*V  @ @ @ @ .%Yy~wMƆAmpbh`9i"PFؠ~w_ ᙙoF- z@uĉ{nW,.D GX;t }Gt5kF^x?5ڭwΞҦ :{!9m@4y8"T: @ @ @؁† pxASlҤɑG]z׳f<ag?y1g@DiEaiӦEaՋEa>}Dz 6D̜93jΙ3gܹQpPF!CO޽ EN(etݯ?Ͼ~^u,p Q^gś eLe'@ @ @ @)vmaoѣGlp~?}PRjժ3>*,akEiii%܃_~Ѩ+Wfto?+++S >SJ4 \ݲ-fO31om=w߉xȸnÍf~W U+2Y' @ @ @ʹ@8 EXbٲe'OG!  s̘1]v:A. u СC[ '4Cb(pBt$AXF{ԪU+j8|/<#8"C{u9Zqiխ[7~b eg[W}3%Wt#T^we^:j޳$ÛvDTnmWr @ @ @ PZhQ`s  :uj"aƍ/BB*UCBq's%:k֬ucBBJⓔ<SM2%OG⃰D_Os=S9k֬/K/=蠃BBn=pC|Trc ܒ6q9Y+tcjM RߎQ\|١sw}70G%1r-7|s'>3Æ #Gť N"5jԨ;j<DH~ò  (ϭZr;>۷%%NO,&u%fwmDj6mUh5K* @ @ @vڵk?Slj❽zW^~D?֡uևrH7CuBɓ\n]^ l_7߼kgPOpfXSbʵji~)Ѿ yj4ٽkꄵKU'PN @ @ @;? b̙liׯ_~嗣 -V^ )!'(/={w:}Mg~(SX8i?";١kv=9+F^xF~ކ-yݛo׭XQ?3,&kհC)&@ @ @ @/NG$3t_Okx_?pCVVV a;hO0n|?=ׯ_7},YNx뭷~3fy|ZzWKۣ:b_ub=O=m-<}$ T-*:a͒E%( @ @ @;@puB8!vVHkޕ+xG 볾?$\dzxպM1 @ @ @RH`ɒ%_~e1 ^`A8 lG7@wQrf8gϞZ…*UDay%?>j?G|'?W_G=ݻw{'DDЫWh˄]vW\qET"{zv[N-;c÷䳼ɻth:Rjj]*quoiīΎ_wB\CL @ @ @@j g8RyB@TUяE ͚59??/G[g{]nݒE^7̝;7lдiN:mn{~^~Pٰpo6lFϡ&a 6_o ;1]6LպuV}>PP`7U'laBJ{Jf×La7n0;7ԥzFQS@ @ @ @E +VD~_Fq P>%ݧŧUX1TuOiIMn!ͯ6[WbrsG^xʯgFW۝YsP! @ @ @<ƍޡC?|'D؂GVhtnu~hq ?xKڰvmԓrr{KC̎]ڟsa @ @ @ @@999=Xt.bANv('Ů〼uW$|v>zƋ?8wfzmŗoz#~(-]& @ @ @2dȒ%K֭;`"tPP${k؟yKgȞ-Z'?A.Q @ @ @ʺۢKկW5 N('s*W~_n\S*T<vi @ @ @ @`X|C=t׮]{ҤI>iժUwN-{j [VGp^vtonMt @ @ @V^?Hk~E^Y"YKgs. -XM6jO?Z]dqFjֲvm١Lk @ @ @tyРAJ%:T\)\[ @ @ @ @ <@ժUT'ǷbM @ @ @ իw֭kݺ>ӡC.]lT'[f @ @ @(sիO*7H9S @ @ @ @M@uvwc @ @ @ NI^$@ @ @ @M@uvwc @ @ @ NI^$@ @ @ @M@uvwc @ @ @ NI^$@ @ @ @M@u@IDATvwc @ @ @ NI^$@ @ @ @M@uvwc @ @ @ NI^$@ @ @ @M@uvwc @ @ @ NI^$@ @ @ @M@uvwc @ @ @ TIs|EU^"EW% @ @ @4`7;-+)~ݕQiB, ,L @ @ @hμ-ƻ e#@ @ @ @':SxW9]l @ @ @ T'm-ތmҤ"E' @ @ @4` ns+**BiBM1.rƸ< @ @ @ @a Nw/X3IJrcY_]ea @ @ @ @@cPPvy9n);%/')AX9kzC  @ @ @ @ NGJ]weyĚN=-p}u3%N @ @ @M@uB=K%4>r΅/.rf* @ @ @ @Q N/۽GwOb5 >?|eu3U@ @ @ @M@uB]>I,%7`j"gK2 @ @ @ÿee|檒퉥ow; U93\ @ @ @ hT'[7z1'?߾"g櫒 @ @ @ü_I,ivg}_NnR93 @ @ @ @@6 dEx6ÿӮlb)ny>2\V]pI @ @ @ @@#Pp8pgw]X]1䲫2_M]|U2 @ @ @ @@cPpv.}[{ߕR"g櫒 @ @ @`NJe/~wNcv3\J]pI @ @ @ @ :05(+-~ݕ{v'=5 Q93\ @ @ @ @ !:0Mxomz]9o|7EEW% @ @ @_/̘s퉷h9 2\D]pI @ @ @ @H ?F`~ؤIE]=N+@ڴmS9_$&@ @ @ @ND6s+ˣikf<~Ag?1=NN/ @ @ @ @L쐉 @ @ @ @T' @ @ @ @ 7;dW#i9sxh[~!hީsY9_$&@ @ @ @ND6s^ti-7I 9JEJ_ @ @ @B@3 @ @ @`J @ @ @B@uB-L!@ @ @ @j :X @ @ @ @PP 4S @ @ @ @N @ @ @ @@-T' @ @ @ @5k!qu7ExW( @ @ @40g'4 q @ @ @ @@PPĂ @ @ @ @@P6!@ @ @ @N@uB "@ @ @ @ L@uBP @ @ @; nK, @ @ @40 lC} @ @ @ PT'Ի-  @ @ @ T'4 q @ @ @ @@PPĂ @ @ @ @@P6!@ @ @ @N@uB "@ @ @ @ L@uBP @ @ @; nK, @ @ @40 lC} @ @ @ P݊yAӧO2eJIII6JoVҫ @ @ @TO@uB1*&L< !@ @ @ @K3b% @ @ @h@b̉'ƖK" @ @ @ ЀfN4iڴiSL)))-iH4u˗׏X @ @ @d8,(83֏\]vVA @ @ @pCVnE @ @ @ @,PEe @ @ @ @ +T'dY4 @ @ @" YYJ @ @ @R@uBVnE @ @ @ @,PEe @ @ @ @ +T'dY4 @ @ @" YYJ @ @ @R@uBVnE @ @ @ @,PEe @ @ @ @ +T'dY4 @ @ @" YYJ @ @ @R@uBVnE @ @ @ @,PEe @ @ @ @ +T'dY4 @ @ @" YYJ @ @ @R@uBVnE @ @ @ @,Ϣ6ΥS^?|&9M۶5BYii^AAH @ @ @j-:tb >}ˮVQݶu_}ɢXxM۴i?`pŸ&㫟H @ @ @ Pk e%%ӯ2*M***3ս۶$ڷpӜo| 1Vݺ' @ @ @ @rc(a\3oi5Vr_=/|*4!-O/ï @ @ @ @q NS3\O;k0UKMI,ݽ?g!@ @ @ @q !.8mzo6iRQӤm GrNP㤓mzrSL @ @ @Pd y^w,ï#\X7++oӫO(g3$?k<)&@ @ @ @q NK2<d}$0F[[4u(>PeG?20)&@ @ @ @q NK2<֭}KH_0 ZQDS66lo:Xԓ׮C@ @ @ @q NSvʞU%ӏڷ{|-RtN4kϻF͟޾iQ˯nڶm @ @ @ @T'ĈYT|Y/&&8iq%:onӷ4wџ~ QO"(-*_{ߊs6;[ @ @ @+o:j*YĬm۝q}9,)hr/~_'p]ȟC{DTؾt^&ZgN^ğM>Q @ @ @+:!^Ϛe+Y8++'MmY5K G&lzēKã>hﴟ)? @ @ @ @j^F#ݵvUC.*sNÏ:)]FF_NHC @ @ @ @@T'.Ùw$+ÄazyYܻ~r7}*uNSjE5B @ @ @j)fZe8mNJe/~O{/ج] sVTT<yr}d`AC=h˖XdqQ4ٯ>< y @ @ @ @ NTJK_we݉n^N<}) .d~ԦwvsGe{%۷>٫?ܼMG  @ @ @ @@,nvfI^[漞Nwk6[5Ww$?9wSJ€[~ŭzo_p~5 @ @ @ @ F 1bV+f̹-'}^AAfV9͟=gbԑ.bF}uMr> Ə_) @ @ @ @ ١vn=N+@6ϝbl2༏6m6-Cѣf:B=aW^~.z' @ @ @ @@,baAhOߨy2yL%v^YQ?zQ-[F*'°p*<"@ @ @ @ |pUvYNÏJnVܶ*{D @ @ @j':vnkV%YEܺw䧹M1 @ @ @E0 Ɉ{jN++x4<Fqwh5ۢPbiN#Nn  @ @ @ @@,baA]Z MRuBΨ/|ҹ-L߲fwN~y1M1 @ @ @E0$oѥ[m]jF*X4iC @ @ @%:!.Ù'''$ů\_gOrOz<{~z2;K# @ @ @ @@lbFÙ]_F'0t?qlx%wX U=b @ @ @ ꄸ$zsR*Ttΰ+N @ @ @ 27/rrr&En_K:G?H @ @ @ PS 5CQ?o~ivUa~Iwߗ߼y#=%@ @ @ @!:;oM_SЪy>'v,[cge9;vnգg1{O{顧ɍ'@ @ @ @5PPS߼CǡW\5˵P @ @ @hd @ @@^z ;餓FҩI @T_@uB$@ @ۗ9CgJ& @ P#6 @ @ @ PS 53 @ @ @ꄚyM @ @ @T@uBMŌ'@ @ @ @j&:f^F @ @ @ @5PPS1  @ @ @ @ l @ @aطoΝ;srrڵk_}QQю;vݲedڊ]v{-((hժUܴiZCHX\\gϞiӦENe" @ PM2 #@ @@߿ʋN;Cq@g; ƍKN_SLCuB/ܹs ڵk'|rS'u+",X0k֬hĨP~:u4z!CD{/{[ =cƎ2q=ܺuRC3J+͛w<8} @ @ s @ @D |U: }/<|_ȺxΓ_qj&GDL:5[ 6)-zgk2*[oڎ; Pcח$' g'%nݺuqqqvM @ @  0$4aɱ @4i3fLn>7>̘1#jF;™UX%)/SRN4)lO޽CC!O 0]v ͣ>O?blذ!\>r7x#,((_y(Nt9wޢEPe˖_~92$ @ @1 !6JPl%"@ @'N 8qbriB01bرc1¿ t-3K̙>lzjriBd. &-Z% g6"fhCiBڵ_l1 @ @ ^ y`[. @ @ 4osK8ꨣ: +g^xqiiiza„ '~'ro߾hΝ;Q3ǧt&! '(pCpBlh֬YpCz @ @ sE W/]׮]CA|999}4hЀw!5Ϛ5W^Izʢ8 :!R1:u4wFC *} @@%T: @ @@\? ;Ӫ$\f͚3fs=ӧO CA?.8WzD'"JT:+ Q, @ @P< @ @ N~jk| .\x\2坕,f3%Z6m4ꄃ@ @j!:h @ @ >ѲnjsWٳFcϞ=OgzO4`ǎQ|Cs1舭[^zŊn7o[nQ{պ:!3RNM6u=zEJj€NM @ @ s @ @ _Ek·5)]vᨃ3T$T8BƓO>~CruBϞ=zhz" )=o’D͛WEuҥKH @ @ E@uB & @D{֬Y}|4-|y1e^}Ք?T# k߾ {챔)w^z< 6{"(\r֬Y)BA_ 8W'cVzTC\gNII @"P=@ @ *2{ѢEOgϞKRiKYy8r`ݺu)Q3}|xԵkh@˖-ӏ41cB=D X`A8"e& @ ꄸ$!@ @,߸S>d `?)Yw8W'*iӦK pB-ؾ}{8S!XbJ zyGpCrgw5}g}6 (l)Æ KbܸqVJ߸[!RޫI @(f1"@ @+ЬYT/7_G#nPLPQḂy2PzJ ƏHpgm63 IB]B8ޠlaLvN9唔a<ȔΪ;wz @ @@-T' @hzjͫO?ޫ97aupɓ[n]4(7mժE]T4 /lڴizp|Bz#ҞpxÉ'X# @ @@&23 @@˖-?y՟9??3 W T==eZ .GDC&Nx PO|b.PrCzӵkpxCrҧ:  @ @L3l. @hT[+b̙K.---M3fLƞ[v/3gwu?cZy.8묳 oƚ5kHL$pCBB8aaݛ>2T$1"\6Kҟ!@ @237 @@83%]vΝ{쩨j?T$-ZDw^WK.Iﬢ.x]:=z 6nܸyPPRRo߾( ?AK.zԩSLy@nݺݻw1nݺ/G:P3/rpիWZYTTaP0&n8P @ @@T'-fiS&ɾf @8+xsFכּeOFlr8!‚ָ///#x  @ @@f2l6fMsէ)3VVR٩K nmMT7kߡǟvYw9zT4^@ @ @ @H@uBV+=wwUkhҠ~=hu¼ǾIXQ^~>_71NF $@ @ @ @1 ƘK \V)w'.=}!4!}iO>z昵MO @ @ @%:!.)\suByYӟl͌+[MN!t'?~nc" @ @ @ @%_WǒW Z:1,7U^вK|o=N?>k-ubۢW/V|Ou  @ @ @ @@\⒬q]kVU%3g8Ň'wWԗ7G^' .;祛n(+ٛx՗=p+M,&@ @ @ @!$I֡à!I9?*wO7RJጄ\wMD=!b~1 @ @ @P@uBchrqT'ޭ-5 @ @ @ @ . qI8O W'Zmтh/47 v hJ+)&@ @ @ @N6I W.u<4kZ*yb/Ln(8tD %7 @ @ @ @  0&ItvB^mzM97Kj5im}$Ѯkb @ @ @ Xk,:݀A9nDruBn~A]U˓u<,)&@ @ @ @ǒE ҄YI%; ׽0p⭛COaGvvd! ZJjwJM8xoEcGJn  @ @ @ @@,^("a•ˢO{`̈O=VIiBTQ흷9S?}6F2^Dy:?]QS@ @ @ @PdXAuf=eNtdum7_p]V>h @ @ @TGQLQ1ֽj}m o|};wDB<ퟯ8{?-i.tx]]\,"&@ @ @ @T'gYL+&o֡ә}ϩg$wxﶭ3oi} <${Ky)\񿏽yw}cO9H @ @ @ @#fuSU\2ݶG.:34! hޱwǞdǶhz5Ƨx?]R0\yc @ @ @ytؿw_y’ee'}֖]Vn9ν[[zJ[GJ5m~~4O%w  @ @ @ @@b'=x‚-G̓Kn^X9o羑_\Gy^ҐJŠ?떛6nHy<ҫ}[vүI @ @ @bpCu07/9&~WI3>{uJiB!/sOiB: @ @ @ g'ԅj4EKnīOysݺ9En't9:$  @ @ @ @@ NS8wpuJŏ46m6_9_kڦM) @ @ @ @F@u¡q-)8Ҥ/tÂ*Q3Ξ? SL @ @ @CF鋶-~'9E!Óx : @IDAT_\L8?>ӟK @ @ @2 /Z S?yY~zOΏU}:cZuŽKuQ܂?<Ӣ @ @ @8,孍]G.ٱx˦FEyF0(j&ݻљs/4 @ @ @C_ЪUc޺jꓥ{DE /, j`mkW}QS@ @ @ @À{[o`uvsԟ׼Řo`㏔/MĹM쿥 $@ @ @ @K p1wK%}箵'}8V!eKMn=/7j&y0s}; oS͠Y-:w` @ @ @ @@5T'T*a<;~=k+zG?.#Gwy\=-~gޛ~[Q^lٵ_)jFoDOߨY[RF @ @ @ @NRc^qͶ% (,]5+ ڴ=5m:iMwtj @ @ @ @z":mĘo+߷{~]PRZvy qY(P?qf.2 c+ @ @ @Y)f6&@ @ @ @Y$:!6R  @ @ @ @@V Nmh @ @ @ Eh, @ @ @dꄬ6&@ @ @ @Y$:!6R  @ @ @ @@V Nmh @ @ @ Eh, @ @ @dꄬ6&@ @ @ @Y$:!6R  @ @ @ @@V Nmh @ @ @ Eh, @ @ @dꄬ6&@ @ @ @Y$:!6R  @ @ @ @@V Nmh @ @ @ Eh2]J4 @ @ @ @5ox[֛5غW>Lά%>j꓅˗Xt0+i랽{/47߁XC @ @ @t2w]5oթNX~?-t+m7|۝GL>'e& @ @ @Q1b8Ue5S ~)W]^2;,+/Xk @ @ @ @T'ĈYT+:aw{RVӲ{ϮǞТKg?U+R5  @ @ @ @@\nvKyJKw]_ЪGjhVa?ů}tDOa~?<4KH @ @ @bPeMZ*[cQ ㋷luQ^g#Gxf+j77//4֯X?o[ z6m;1W_2?!9 @ @ @ !P\f=+z҄0|;o?s~=mfE7D=mg=0n94!<*ݵg>t:3( @ @ @ @u!:.TsNJ66dA#tOґ%;PD[O~+WTTT:@' @ @ @\&C1ֽj}m o|};?(;G=hV"(ٱ=ٽ~3_N]zZviQ͚o}흫W&? ݕ[P0; @ @ @ 1kp:t:9ݶu-7-Q=Ay龧Kw<8:a͌G?zM>QϾݻ]~S{m:}g߉g;㬨G@ @ @ @pC\5SQ^ҶG.:34!qe-[;ѣ @ @ @"X%QG%7 @ @ @ @ ώ%$(hժGVM}tϞy`уܶhAtŗDջgE=K{_e%%rkeF5 @ @ @ @ . qI OGo`uvsԟ׼ŘoQ0뢸In!$oFco=y) @ @ @ @q NKy\xInAh¼rtº&ܗMg_3fȤ/]7Cg򵨫_) @ @ @ @1 ǘKj t>믍Ư|걇Nuqܶ-  mEyY4e~馨N}|tIDs:#G[y{s{wUu' =k˾+Vuߎڱy;igeZG;j[;uZgպk7YYe߷IH7IB'9=GoyFFFy @ @ @O@uB,kiK5thݚD 윶3~`6m*:3C1' .mOO]Fz @ @ @ @Nv5]]'[|Əx:c?0s+ZԶG4kOoTg1 @ @ @ @vj疆Y$I?떬2ؼ]^_uYU .u:/<[j:L NӋV @ @ @ @4 8!IӫυǙ/>{hCڸIii[ti^|ۙ6ͮ|!Y-[78 _۲讝-tmݭGI~I>R'!@ @ @ @iPv$ mgPUi3kUr @ @ @ԯWv @ @ @ @@u @ @ @ @@ N__  @ @ @ @  @ @ @ @+:~}e'@ @ @ @T';@ @ @ @ԯ @ @ @P @ @ @ PWv @ @ @ @@u @ @ @ @@ N__  @ @ @ @  @ @ @ @+:~}e'@ @ @ @T';@ @ @ @ԯ@Ve_`ܹs ?`7}#_ @ @ @Nꄴi҄ӧ-D @ @ @ @"d=Ʌ -D @ @ @ @$:!msԩi% @ @ @ 8!msڴiϟ;wnaaaڒ6D۰aCXU @ @ @ @@Pg 'FkFuBxVA @ @ @F)dF, @ @ @4" aY* @ @ @hch @ @ @ ЈT'4e @ @ @ @Q Nh͢  @ @ @ @@#PЈ @ @ @ @F):Q>6&@ @ @ @H@uB#zXJ @ @ @F, @ @ @4" aY* @ @ @hch @ @ @ ЈT'4e @ @ @ @Q Nh͢  @ @ @ @@#PЈ @ @ @ @F):Q>6&@ @ @ @H@uB#zXJ @ @ @F, @ @ @4" a?x8"@ @ @ @5Ȫ`cQt3ڸ8?/,3Y^&p˯̪ڻbGpxCپEN![N~.ԋ26#5 @ @ @xOfoߛi8g+?W&--.ۼ1{_;nT  @ @ @ @@T'ݰo~Kl~4շoxkOrۻ_}fɉƄQ3)8yYI?wI?}˫?u{ޜղU4` @ @ @ vg4m=w:ΎJt5cyOY_{ySD @ @ @*:!NVxЊ3wC5Su78 ^4)+?6k5&~IԹiσ @ @ @ @nX +swq~^4sgŕ]]:fUYiy!B/>ztqIOj|Uy=D8b  @ @ @ @@ҘK lY8/ӻ_3fe>;qJt,#j4iť'3ʂla̺G~?++ @ @ @Z@uBj?xW#n|F7hehVRcS>oVn&3 [pN @ @ @ Pkuj+ػlIcՁ_ŵǪZt~9hXXRQS@ @ @ @%`tI ώ/F3sz!ۺ9;v6kۮ9įV~RQc3dȰx @ @ @]@uB kak9mzl44߼Ud8tO}fc{FSАܢChV 7 @ @ @ @ -X$vD-7ٶ%ꏂݯ-_M=Ν]8mz7:> UhD @ @ @Ȭ< PxP4;T'{O\uQ Ѱ[#7n.++񞖝ěU-w_ {0ěb @ @ @ {'fI oupd֧oIVs; ռVm╿+3;[n߲ M_"nꄂ @ @ @ڹiV:a§\?yޖӫ\#Gg|ayGEQO Y-[FkP!/&@ @ @ @upC]j3I3hyg@4!i֦M>qӯt<,>|;~Cif4nIYIIz$C:!!&@ @ @ @t NHdu4nڢe|tΣ6iR^plhdN(:|(Tupd;Ǜb @ @ @  iaYm't2<ެ,jѢMGqvV-]:ߺ9> q 1 @ @ @K@uB$k٭ěU٭ZGWKhե[tik;Y-[ux¢K @ @ @ P uѫ.gZvYY\VZ/&8ld|d1gD͂;6oU^Y]5cY-wDtI@ @ @ @":.z$)]]D۷F#;:aճK!KfqQ^7߈.Q, @ @ @ @iPF9&ϩ- Ƈu>*7)Yo`ݣ(+-yjF? @ @ @H@;tfJ6={Eѐ%F %?QtUF!h=k-Oݻ|iL JOx[jݭ{ @ @ @ @4 NH#f R Me/WCA'9|;lNmY-ZDD0=/O?7{gC3F @ @ @W@uBz=/ ;ٽ?Nput{ߌ;qճf8wBcW_z ıcQO"es'7~(2 @ @ @ @@ҐC ddfNO]x`bQusױgu9UZwҍOmHs+ZԶG37i֔=+ߨz>џ:Y󪇅!Ի󅯝t @ @ @ @.ꢗK+Z"]~zъPyPŘҰY7|r΋<7I zM3 @ @ @ @ 8!ɖղcO<ɼ-ڙٲKztA间ӯFqU ^޷տGo=wO=߮!?UQL @ @ @N*:Dh@AW\K:s~ƄR @ @ @ @Z8١h @ @ @ @5PP,C  @ @ @ @ZN) @ @ @ @@ T'P @ @ @ @jf  @ @ @ P 52 @ @ @ZB @ @ @@@uB %@ @ @ @j!:h @ @ @ @5PP,C  @ @ @ @ZN) @ @ @ @@ T'P @ @ @ @jf  @ @ @ P 52 @ @ @ZB @ @ @@@uB %@ @ @ @j!U9T&`sV6<|^I @ @ @@#`#:@T'A҄ӧ-]cHaÆ1  @ @ @ @t 8!m .L[. @ @ @ @H@uBԩSӖK" @ @ @ pCiϟ?w´%m͛qH]ˀf̘گ @ @ @+P!NHS Ό #5\Saugqw65Z @ @ @`zapÇ @ @ @ @T N8UC @ @ @>>O&@ @ @ @J@u©v @ @ @ aPa}7 @ @ @8UN @ @ @ @  @ @ @ @Pp݇ @ @ @|XT'|XM @ @ @NS%> @ @ @ @*:}o @ @ @ pT'*i!@ @ @ @V '{ @ @ @ @S%:TI @ @ @ N>yߛ @ @ @*Su#6kݺuͦUotѣ%'،&ڶ$ @ @B_\jUW?~رc:5  @ @ NU,+-]{u6+ n&Wɽ/>3uXA|~ @ @Q 8q(iɡ3G @@v~W(qW~VLZZ\ycozw&rG'QpM3҄5 @ @ @N vJ3_iu&$sf^CMQݾj4` @ @ @ PG uIҪ{n3i٥[RYi3_;ܼ`` @ @ @ @@.Y_q-#o/|Σ;wl}n JDO8awyѽfU+,س{7iRV @ @ @ @ ;!}5tlPgMjڢ%<>_J¥=r~/mߏD#7<ǝ// Bi±}{3 @ @ @ ^ Aewıh…wߌKf<4lČ_!޳{͓o[>Ԇ'3 @ @ @)Eu:5yg4K\=+j]ǝi۞[囩c*ٻ|]j_5sO @ ](///##]vYY _:rHVڼjÎ!dz[n27k֬,$<{BRDsϞ=jե pFض!j  @ @t NHd Xb4: 5CuEϯ{߶%~qiIӟĔO8Ӎ$@ @.W {}ת?>-#I UOddTz a8 bΜ9M^|__g8'{9N #B I @ @upCk3}kimzl44߼S4@IDATUd8tO}fKG;{?xN1 @4|^ڵ=~x _ꇯaÆǟUaD8a̘1۷o֬ѣG(_gE}?vQ4, <_~ lӫϔ+$ @ @%зoo.;Y*.$_3ڐ|׮]wߐ!CMV;6u|MzY]RopzC8lذ K¥P*6={v|ab @ @ -X$G(NдEK~;gs&4kӦEWK]z3uFa6o1nޮ}4E@ @K bag*ƧRǎ+6X'l{PG0?ÉDI*NիW4 5kw9qχ&BQBB3ǐ:kȑQO( Ǐz @ @@ZT'I%L>;&DIȥιe%}+[qј7,>'}ozN] @ @@loKpZZ׮]CAa bBw?'{РA 1/^ΰKKJ/xC"T'? ˜N:̈ Dj @ @.uln-&ɣ?ժSol}f~ʏq=]Ɯy*&@ @F'P[E.j.&e˖ s= , JKKCA pر_ᜈS3N= @ @@T'ӳ$x'H2s`س(.D3eiivvtU@ @Q:T_vw?cƌ [G߿7nܹsg{ZئMwuuB;!g$`{޽ҊPTZ @ @@]T'Es9#>թN߾0)V037pzt`/o|h̄8CТSxSL @ -[J} 1I_]va3T$6T83CƓO>zC:!777ߌ'PSf !,)LdUT'[ZI @$ NH9͞/h٤4q jIoeNGÉ_' Vׯb N1 @* 5Pq^xرcIC3 :{տBԓBiC=4f̘PHh#$VZ6HI @K@uB$k/˝xE%^0g(Ke/߿qD7~Wϊ @85xދ'+ORi߲! aЇB j <T;$Rxg~BO8! <3!g([)fKL6lX1'N|wR\XjI$@ @(:!5H9~?it჉iV.{3G]ǞyV]kK7>?=[:#s?O" @͛0`L^k_OoaばKDxA'aÉΏaW   SL I9rŊIU4;w|*|\"@ @}N@>~ږ Dѥ?mލ!'ͯ4I ߽qenJ @\Тڧ}M}~Zi١n~mڴݗ4hPoHۺu/iCi__4k,5g>!_aOؼsϭN @ @.W׹='NEm~:2fM 6 @.ЪUO|yՙf̘z)Z]vY؜%0ufYf <ꫯ$,…R]‘^I @EuK܎CKoqk;}_:?0xhe @ @)o?OK֭+..N;:^:=pµ^tҕ+W;gqI+]tQ8_GT6lN U – V CEˆ#a$ @ @eeeu"C7?=w'l:kgFff.][ws}_ҶOߢpg)>`j @|N8uּGY Ӳeˆoaǎvڻwo(S(,,,** CY@.]ٳSN59|p޶mۑ#G; sn#jdNXdAAA!lj&BDH[T @ @,`==ܛoJ$җtwӍfZPKAW\k(  @\ }+@߲ |QHKM~OZIB @T_Iշ2 @ @ @ڨC @ @ @T_@uB$@ @ @ @j#:6j @ @ @ @PP}+#  @ @ @ @N9 @ @ @ @@T'TH @ @ @ @6jf @ @ @ P} շ2 @ @ @ڨC @ @ @T_@uB$@ @ @ @j#:6j @ @ @ @ȪP#  @ @ @ @${83~3=PԬ,ξ+ڸU'4e @ @ @ а~<5Zw?'re}`pm @ @ @T믯Z._溭6U'F @ @ @ Ktv3dN{ӕ_`ܹs әz7*\E+ @ @ @F*PFuNg͚u^!gȜޜ1[FYYi֡4ao @ @ @ @ |) ,[lܸqK.;vl4 NvHۃXparID @ @ @G  Oꄴ=S-D @ @ @ Ш47ҸZrC*w;wnaaas׼y6lؐ  0cƌ~= @ @ @4^:١gwޞ={W=:WoޥK n,cB:iK" 8;SF &@ @ @ @ T~///\r%=XW|JC @ @ @ $]1+Oz$ @ @ @h_|qΝ!c8]uB|(D @ @ @O ;;{֬Yu\w1I:>K"@ @ @ @F)PCꞡa©NhŪ @ @ @ @ ;vѵ^1cBZOoU'4cm @ @ @ nZqBQP& @ @ @ @d3gfee%Vf͚5 Y4 @ @ @4L]^r%X[եKZLlST'4d @ @ @ hjw@Cf5 IY' @ @ @4 BΝk0v;..qӈ @ @ @ Ξ5kVXfhJ:q=/%@ @ @ @F Pcj:E @ @ @,0vѣGW3MWsp#:>8&@ @ @ @-p 7Ts}Ÿ́ pP, @ @ @̙3N5˜0C4oH͚gn7NW6y @ @U_\jUҷ?~~ͤI @uڵ%\2{S1adc>WU'4XVZޙ m\WVݬMn {_8}WgV&>_]shۇֽ}k0(w8;, @ @'N(**JI= @ @:_I˜jcT'4'qW~VLZMiqQ5-ߙt_4&YVVwO{բ{ !~ݺLj  @ @ @ @ ]a_Ν;Wjƙ/ֈ3_iu&$}Ûϙy6?yxӆG/WnL*MH֤Iۿߞ=xսrI @ @ @A ;;{̙U$ WØ*|`.N8͏r{Ѫ{n3i٥[RYi3_;fIa.QO,Ȉ?S/!@ @ @ @ T}pCW~Y,/޸ 2F1_ZGw܂PF g=,7/جc|Yc>S/0pH=vx Z˟w^fY_9QD @ @ @4 7n˗/OdNc=oo3nߴEKx|ʿ&K{_^9oq۾Fnx;_^5 t.Of=Zmzlڴmᄑ/6rsK sDlD @ @ @Q *ON* Y,'D_qiԌ?{V?po~&eQuQ3t1z=df^c @ @ @ Yfee%lzBZ7$Nc*<|hݻK\]_uhoFq}(CuCO[΋nӻ_3fe>;qJt5ϑJ jӳwW9~i @WN\ U~뭷R&NZ^ۅ8T'-Zhٲeyٺukx?iҤݻ'MO4uى[EZjũђ?j§SNgu֐!CKw~vYـD3f„ I<φC3J+/_я~t @ @ \z饡>c6*ġiQ a^Jt7|> Bԟ42z\Rglӣgfv?lRed`)&@ @.ަm^F8CkËGհ#<\fEļyBŰaU޷f͚~:&»曡#@ Pc֗"z:O(&@ @qPX?s̟g>> 2+]x/+j?WOvRIgp!6c}32:! @ @ NZXeIIß~a{&D ljuY{ٳg-R%{ W.M&0¶ QS@ @(?! 9tv,~1kfVvNQ3y[7o_ym[◪N8pt Q35xgYZ?4k6j  @ @ <_޽{_{_y՟Xᤆ*'22>09sTXL69x5oZpO<rHVGPR!@ @u7nѣCg랰qepix^^[ݵM>MfQ~w߾?X*윶όsUq|gooos=r ^{3Ys{QS@ @ A Bvrss?~—a6l?~\yȆ1cƴo߾YfG=x%K6oޜl2tx g+TkBNNNرc@۶mOLgŊI?ٺuSG=mڴ9vX\;$ @ @i[&_p :!N`׎hP۾C~#PUɷǹIAvVS͓Dĥ?n'0dX>qpݚ-(i_:Wl @ ;/N|XpaԌC= ر  ^' 6mZO^BC8!O a3a~dҤIYY?رcG8"|ȑ#vIc.]bݻl2C۷oѢE:  @ @@f͚t%lDya߈ؗZx':!0MU-㑏Oy')W_Wj&?+˜ӫ?SV6@? @F[ԩS^#F^z)IëؾQAB[n'즐ZZ t e].( f͚QF%Ƈ=QIsCGaz233vzWP:^ @H@g6<N*S/QPZR?{?(<\^]M qowϴ_]\A @So߾Ё W~?VHZPPSphCj]vw}C ׯ_84!^Z1v 79ٳg7JL wINؾ}{tEaaâ] q(U̞=;_ @ꄺ,Cѣ'4m}aٜڴ'z҃kWG^LtC˳_i~ AFӬvaМ> v8~ kO+q%<4Tqg'  @ @ U, 쬐ZP_رc9Km g8񡲂(I za .I;BQBCꬑ#GvF=($?~< @ @iP$)KՖ0ܒZ% \XVZܷb˺ J\vIN>aa?wܺΟ?/5w4'y}4+p୕QS@ @u1i^ewy3gͭR=Ol߾=>FUq:*< ")CVs0H4  @ @@{; 5MѼmdaªբE^lےthtMe%'f[Uϙz5 @ Pk'N5oމXvN}sj.)*5k_I[m6 H4ȑ#I=N= @ @@T'6ZgW43u(:n:Ъk(0; ]:Hy* @>fw+4I9f)[vw?Ǐ [n "ϱc '/ZjܸqK͛7O3tAWC S̬j/I nz @ @@T'ݰ;=M;5+ JK1q(.;!hٹKYEܦWxSL @@xw^TT5AjO4СCQ|S~ƌؿ͛7nܸs -?M jw]ꄰwB(H"4ӽ{yBBԩI @]@uB k˘3sy թN߾0)VЪsר?Tw 'v1: @ @@$вe_☀V>{zZv(;8$}vڅPP3 O>d7|3BuBROa2˗WQnݺ*kn$ @ $:! T4{NIFf6ϟ3'sc2oUOsW?{w?5q}* PEEDxZ*zb^XmkYyb:3vsl6|a2;̼M6/3/?mQ,   s܁S^*NTmu0RN ek޼n裏4j}mjvƌ'}GJ4iҘ1c>xNPA=]5]cǎ5 d@@@g1P-BvvOxpc:'~ᇱW_Ԭj~V`Vm:G>φLL|CK7nҢ/︄,G   @ 8fGzmh|=XȠFTgS/2FiӌDίZ/f͚]h '|Ҏ0в}ݳ>;[qn?O?=C_?$Sm#FwyG)9ï'   IԪE~ƫ/xUbUAX{(G_5uz̏/a)͎ݾj͌yѢm-rm.ޟe@@@c~\glz f2'#GԠ\A}h|WSA=^zW \sMh4#1zhu`-ҩS'c={N֛nj.ZO_^jm/^w~IY2Zl~Yo\z>g{m[tlnE t{k?]_ @@@C`e]gu>#Ԭs-!ݥKSL?;Hfm7on$W}|7Ff)Ο&'?Hmժ;    P[Kж]!J֎RR4[8Tfrϰ{箇)   5k{yFFve 1-OӫvӦMsOuNPn[4C^J-9䐎;`j{br*dA ƈv!Jiݺ:oАOID@@@8\oK`U65 ա:~# _:4Yi-:v;zOMs)   'tІnظqcɺ뮫 믿j%Wm pv}W:=ӧb%h@ ew}Xc ?9.sS3թKuh g6E$tY4}\D@@@hP`ŋ7 ,?ʳOMyoNvK-r^jm޾CVZcrWs'?=b'Mz'**_mջon^Q)Q5꧝S/<v:)   @-Zg}7~~%-\۞^0cƌ3gΞ={?… _aͪڶmۖ-[_Zcjh hq"ȹM6:tPxDYOSL(ժZ5Yq_%-V%U   4|ZkL|;6xDJ^fe^Hi   ":8r"                R       D' "       @D'$ Jq        ``0        0(!       !@t,       $,@tB                 R       D' "       @D'$ Jq        ``0        4J:.n)FJ6m^#       U :!zP Q      Ԏ~je͛w7TBi kk޼" Jfz5&A@@@@@@ZRꫯ F'xWu-m3[ *XE@@@@@@@HЄ«M j!:dcǎ,2       @UiӦ=zH|JRgϞڠZxl'Oܹ3;F~@@@@@@!_~y뭷Nͻ曧M*(9vwq͛77EtROB|,      8S|בZ6zPǏp SAԩS)e6S       $)0vӧ{%ޏ< d@IDATHSV 4&5\3L{ 'tM^Evy.,        gqwxEꩬBI`zj,mE@@@@@@@*PtV       @] PW"       P*@@@@@@@+jsX@@@@@@@ @tBY%       u%@tB]mn       @N:D@@@@@@@NMc@@@@@@@ U@g       ԕ ui,       U : 5UVYůy-i&@@@@@@@xggk)-Fl:m۶jɯC=M        PB@dP)E2QZxqԼ{n̘1뭷^f@@@@@@ .烳gԩ 3i 0h%s)Pkh        j*c>C #;D"#       T$@tBEl,       NLEF@@@@@@@H脊X@@@@@@@"         P        D :!2@@@@@@@@"*bc!@@@@@@@,@tBd*2"       @ED'TB        YTdկw}W      Гc|:s2eʔ;Nݺuϊ$ڀ      %LPOb =%ԳHF QwO>]3g2d        P`=ԓA5PO -is2w\_}?      O L0x-E3kA@@@@@@@~NmO@@@@@@@FlY        +@tBn{Z       @6D'dZ@@@@@@@_wr@@@@@@@ s:r!       @f͚5`[vGtK4@@@@@@@{,X.#:6UD@@@@@@(wީVx9e5脲Ȍ       @%oq㴤t%E2D'֣       5"0x`i?D'{:@@@@@@@ ,\pذa~=4&NL@@@@@@@)0bĈ/ү i#       @5Ncv`D'l@@@@@@@| ̚5駟6%:7-~i? @@@@@@(@`p0 ̲!sϢE5*EFbgN(Mi}Kի?      O L0x-͠Eq(A_R/~FF5bĈmv&Pm@@@@@@( / Sy#.B6[`ر[lHx7/i҉N(̢-sb5@@@@@@r ЪUԢ0`nTN<믿ԧEJ':H[32@@@@@@@ D' .\}տRlrƌM4)0K%4@@@@@@@\ 1"$4AUէʓ:TRX@@@@@@@z;$뮻S Pi!SnV      @U!YڶmhѢB5j4}֭[gO;ַ G@@@@@@ȣ!C MPG9؀DDtB       (:xTs.- 9       @NzGr*5pT@@@@@@@ vPnD͖ZxqHF!0gG*I       PDVZYi…_~}M-[1cF&M/R[9;E@@@@@@Ȼ?^VhڣZ* Q?b(       @e4T& j?[lş'M簆T @@@@@@3A=\gueΚ5멧*k/Ҳ,XP)ǒ)Sܳ/u       XpĉރtVRR hѢ ڦl "D'fE%?C&L@@@@@@@  讻8Vl$:!"e~3~"       P3taRCzqU\U /N֡n       $pwƬnbV ʼnNH b@@@@@@@K6lX6.NtB7 UB@@@@@@=#F̙3'fUʉYH':!*!      Ԟ@R2u]jLtBCB|       @Cfzꩧ'|REZ;NmEM@@@@@@@*p.Z(کHQ)l j       PI ?`JtBu@@@@@@@a~{ܸq 6@ zQD'T}P@@@@@@@H4ʬ2 Ug       5/?:4fLx*jɳ^@@@@@@@"Nvctݻ_߯_?򸅨       虠 ^zzJHBr[ mSO=/sL       @ RZ 8a-?ߌട      F L08]ҐN!       PwD'&       d,@tB@@@@@@@ :69 F@@@@@@@ c2gu       ԝ ui0        18C@@@@@@@NMN@@@@@@@XQcu >y}7-j֬k䪒ɓ fk׮UVF" @6qf-+/uېwknQ++؂#G|Fs?{`z-yڴi7x_eYf+ PD'F\`v{7F.w}8~vH mԨQ-7o_z7o~v5n8d~O?=裃 zw~`=~ÇS <:,^8W^T<}ꩧ2Xow}ċ.G1?HL|SNy嗍bctHٿ830g)Ƕl͞z);b q) # ,\P縉'Κ5kM6mӦM֭wk(+/D)$ys !TіJNNv.UrD^- T̜9~tuo-ĨH\k۶Wfw߽_|{T뮻zmef>ҝƱc+ue]2ԡ ui2yɟH)ltgfvԏ`_|Qy:tp~v(D#駟N{E/_=F\jg QqI-yʔ)Fiz4Rjzv7F񣣄"oV!S&MZk@Y@ܫ'O&lryK/]%V;'mG, JM\Ȫ?u2T)ky9/|&C04k׮{W[T?ó>~+_wguVQzo_~M7T^z'4?){{;E=&@z :޶8E$XOk⊞={&Ytevm& Lu*:B2d'6lÈ&1WrxIX/sq޾S'eK3/8z5,ӚLT zXKm$g2I' RQzpN+WHǥ^:x`VJIUGu:AQߴrz/B7s;0]*!(V[mj_xr-0&V%:`PO>9レP+\¦{n\9NP/Ũ1)@zl`' p_yt̘1}y_b'x4S Z*^IΝ;p^Nva`JL ~vu &DQ7tB=zW-nSO2sψ#4F{i|ltN8!ϡ>R#B?b @!!*.!}YuXu"*w ç qt .(Yf}z1dX=E@Rs9s ?ンL;Cw]S3Z֞P C͛w1ǔW^E);a 7 T/{@ :~5-Etԙ0mڴtWtg 5貆^YWBԝ@G uF@ԋ4zE_ȯ.Uq~~ULǂ  @JzަM}7´S~W'jYukp Ώ*_}Uxj}jĻK.VeX/ P]F]=k!M-ZSU`-[4Z`:y _|Q}$8}ϟ?Ͽ[es5;sL>{e]f2l;_q}e=C+,jV+UO?]cy?.`b ?%o~zO3ZK_/kLJ J ZHgm&R p\JϖSPϨvɺ}/,s}og#}'c#=l Ģ&5*i mR*^-`>c=fk֬F+d0]{oi !={CVZC[wu#\}!7.\v%4Z0ś>ï`QO &M &jZ0rUmܸ(kr饗*z#43Cf۶m0V5$@tB m*WCAj̘1뭷~U6 (XBEQkLQd咿^;]v .οډi ׸˷nZ?XEeHVXaUW]ՎNce1u1矫z _`\*҆o8+]͞=[u?ٖd#^q W02:čoZq 1:ѩ:v1֒lRGM}+;$6`uvW_%ۅ38CfҌSO=UDuFb/㥗^Rq~6gWsBH}B=zkyArwa~Q!@4hpKˢG;zTTe=nGu4oB_=:GᳪTWxA=?|E*/ȧCtW(Jsh_/ o>| mՕ:(JI,g3#tySa~D"G$LݰM`F Kёꢋ.R{u]):U6d|={4"رc㕎{QnW@Zi:|+8.- "OpE *_`§lrJiE;:ACwtY `W&5O闘*:Ϳ`4}xR>uce]Cf7BQCzpM7o__H LVgpdsM秎sR%2xJGz+Xؠ=R]o(~=P9WٷRK2ބFfT#Ff9#ˣt!_"z2ʬ>~~6ibԍ`6mU(RF``1ZE+Jo-@uf-!CF!65]==}衇t vzY)zoC}{tdg9 |X]]r%ΥD;@OKh&[0hw} eS<ԳYp-.UmAK yTO?Tz4rHSV? 0SN{~1Oιojz(ST_|qY?|ky'4蝂9Kv]R;>_+2fgG'|riQ!ud{k4;ȦtIFbez@ϼeh5G7C "w~[^^K}%&r[Ats(EnO+zO{֛x6d#1⬳yeTOAS~to֐c`3;My9 մmַm/3ZȥIj%K9M<%{RKG˲N^Sxz{Eټh~pJ^JݛCRo;w؏:1Uŗq QWӺ}axzgЫ/mM/4<ԥbFlu]̯inĤf+׮^ Gg57tDzX0@6ZfEK4HO@o: ybo'^Ԉ *Ad|RtgJJVw9=R >,9tUC]uUt9J]wU=CD MPM46Cʪ"^&@ӳE 7wmCTV+4eÿhAOJAxQ1?U#=j ]z?vbEt`hJ͈;O!(VW*=#BI׿&x@Аx䮻-R 뮇i54W8Jó94E'O;*ϙelBK&ǟ6&VEjwV|7xc1P~r(!=gیyX/M)R%eJt"&WDOhurJ7nބ^m/`lR"K;EꭌgW&FXвוN^^I   (zs ڿ"c;,鸳@2-yg vOFYzP?9<B51X+FEs+sOHSjuJ_n'|rYΝ`c }#/Eﭪ{RUi/GPԘPHF8Z®:Vǒ*G[/-?EOC*M<"iJr+̯q20aB01ʴ"`ʼn3y Gl]6Q>Yvt1?gMNGѰ~+ uҡC#џx?1i$06&bz*ur(!=gیyXҋz(4ҹZjR?uz292+W9%yZ/~_2Ȑ٤~EoBtBwƂͱT ەlGZ,ǘvF!YjW{P#FdYօT]脪o*5,v3:A]=}:JVxKOE/Pύܢ/`N=ieUu%!珓y`B\nbW$A01dPhgiTΏu-RA*3,n| PPUl޽SoWiWp̎HX'xbc*E FvLkL*%pdvhX>jZD`̚l{>tb0`ýBF'#4(- ڽĔy8fɛ/d{|a76VdO_tLoND5)NNI5vg5ԯ>' ke*@}^zieMc=cL;/ۣ Bj٬3֭:ՙY@ܣz? =V=cƌ+'^{sqCᐻt+sH/ o~Y=|GD>}YgozV2>lV} h"wz4c23U:HXFZanyͷ +cŌkh=m{=5]BHʊ+yɟ^x?F9zB&:ڷo+1ȫ{_6լ(;;8#e/hyV[m5`bJ_~ѣujϞ=%oQL!b$/ҠADoVcF֭[kt=zWMh8N:#44Ajtx p qD .5/ѷUH-UtOjʔ)vN1vKhLI8_` ç?4'O;Z1lrx{2mw#d͛۟:˱UR_b^=~&{:K^un|gmr0V&{H6cd}d/=<\zܫ_$xLGz;Tv%Wv1Ay/=p?Fz{ݯ=["otdvR[mFƭ0xԻRFFec)@&ND%@ ΑF~Vd>zk=\eUep f{Qw뮻y%޴O<5X~"[lũ7mT7.}ݧ+p5x½BJjpW]vY nҸvHq{キQ)  Fz,D'?R?~7AʊN.3dns놠GuO(sEgu~70w *+$8O+p3|uV =dv/ rKvͮ95lx NW=PINS(t(Rh  >#AJՅ Jׯp\vTg%{"臻4ZMy\O+vzΜ&)>;*4A+҅^UWtbAҮWvRNWtX*E]2(R$z.n`C}c( ukuذa.b9g)޴4QPhR4ȅ"l^CؙL*t|ӷo_;"|FゞcM>m?̑jt՟zYWʘ1c."]'agg}>sI'ٙΓϔ_VS_5OjnVivq1@hwadY~ jї#Z!=g*&36SlQ!MN#Vb)JGTw WDIQhsJ򷵂2 QYa"毾. Nݨѝ -  "q~u`)y3\%( AȌP3WR_vb),ĵGrꉬAXW%8o۫H)E{ƍuqW:ЎRWWSuGo,٬:{׸zZiQ ݙ^0~Jn4=?~^{ /PQ~NoBoFoV;ݫ;G1P v=ٹF6*@)`ȠY5_ H$X(~ޘѸv9{g0Q$nkLԴޟ'?O^kruGß8'rD҈*p~{D s+97]˦th^gj`t./gUT{,X`YNpZV)^a fߔ(Qkت4y8V7o(?u}282ceէ9%?~bML՗Y3;t蠾 F&Q@JъduF'8wdKi @~b jTKkvI^>`V(nG'bCG~'ԵCȳc9^=nt€}O?ݎNЧzVjtn"u'[X]G =>{P ٮ];Rԛv܃Fwpe& \7}8Cv?4K&j#8Cf:tA$UןaNtœ]s5,Mkί%Grf*YNy˯Jjƨ1PQo6CzζUMXĢ/M;?u}2]:ceա9%0ع}E<W_f=:=N3JnjMgfVrɹHۼ2F@ Fvƙ @a6v_>4L ۷xN2E:NO=9BIv!LuھRHmΥf̘**LA!!΋( [o ^ޕB͛?O%ˠYꉾ_BeavuW %:W,A9"{uh'z)de MI,& "BSFvT`7DpVgyh^gj]t.Jl(;`+hetkO TmY}ï|p>+P!=gj&7A<_42p3:0*-Sڍ/6^QV} y@Sk|&^h,T=Ȗ Mgyfx yycMW(&z@2@.*tGzzD5G s߄;צMvg+:K̬xZcv1d"tMpȣFJհ!kTbwVvtB.]U/-Si^{R gS`\r=|4k,MoPZv;_+=ίWvDQQ<4~DUΜ^JUHz#͜9Sq7N* x98f_rp:gyhXgj]^U`{667]k;LU`JM?l[-}6^ RZr̟:T <s(i<)(}|l/牘mn_hx97uDoS(0^w߭9zeL:tYg%s뭷o8nb3Tխ9ks}>ڹ7nͧkuSLуF֭[7!hz#[`ڴiv tP_uWahQ#E ༃``7-RW5:: I|ZA!b??'I'T.im^gFVAȟL{1uT;|uΠwv{kR/])L_֟>#o'2FuHR1CmD (s7* ^>)&Q~ί2!Uiru Np~1@IDAT,'ĭ&> H1خ Ipo>{J)TcSMjEQ![*^ۓ:ZH꣘{EYm)NIv*ntB_}>K"zqQ;kV|*:A8K 3ʣye.п!CJ_h vQꌘ1(EZz&'YX_p=+V5XoaN(̦L!~ӵE^dX 笯]Sv6#yDw|rknt^7h:]J^<(|΋dkze+ `ذa={;{@|#eA;… D_g\QHxgF( xGzyW]j_)=^Jyj/Ti|j''pA3e-[j{fί%GS49: r:l8ˉΘϜd(NŪoptgӴ,϶:}UX/L;1j%|+8zዔ4*jGRm[:?"_ߋ<.MڍN](NGy]_|`o&Lh~^\)S/!\zӜd2ɉ@z&'ZYaz :r2m >xL)ԾBGns]ufSٜ=˦Z"7]Ei73cKn0P[mU9tէ}01 F6)U_yQPĿH [Bs=g N<裊uhޛFlUH|Hna5[n)Qruh/d(S&'^vg~:ωNy8V7osc$|J~KyrE)#n5?[7y؜3g~8oZk0 gHm,϶r/28*Z#W+*JG ӆ@hyJr} >~3xe14K闹njcT/$:A/^ f,gyĨ@Y]>g-,Vn*yГu$mRwNo0uΝ;*_-UOA1 Yx :52Kͪx_~;[)7^5W /:9pܸqWYjfksljNPuw tJT38!+.'+`5\S[(wޱ^mN:P-[D~UG$ph{9N"f,92US;-l?Tt{g˨;SrotH6'Ʌjy貼TZR%e|:)h|M_U9 aecL2XرcC0xB4or)vRzkjItvd, [riZ/ww+L_g}hf /;pyn"'|2$:aСv(jb_(&~?/UѣG(JSrvM5:Aojk~'Ep zۃ>8_KHpB?(FY}AM3 4($:ACv(/~KQƈg}K^y啃:(͟Vw?M覉#[Z?"9a BAJɐ S;O>;CĢv:`b-IΜ)ҫ~ o;sQ]Ɨ*Z)W+1w_t ^ŋz@SRptFzl/a_u&SʮR[1η}6xc'߿Ō>[{Hm:w3uSjEE< /fҋ %)0^۷'ʣFyeR7z뭿)]ee<_/WzrW8ZK*Z~sA9I@ټV,#̙3:^68b/+cY83Wsus{h?NRsM6v^]:6^p?ȩYE*@N'%FJZ5򯢻~]G(苧l)jU@m|=l0J.0t&+if͚uQvyip z.!@ѝ1c󍝞}~\veS@=O[o9+#g;]ۉ9*bZ QW ӧO32{=Sgnuq]wݥg '躌/weWnh/ 4`_͙3GgUG]3O"k}7X~?;MO8qvk7ڮ#u]؋GOqkNjXiԯ#F B+)s=JDj?;ڣ~;g:opj估ׯyhx(DQR!D(#VT<b}jn珿\R5>h#QR4DFNuTj#gaH鐞mx3ث |^*Z)W+1B^$e)??JT YoVs;r-g-7^rop 98{wR &{)7 #8XfӶQή}E@A9{ҥ֢Z?`tT[d:;T^|x!>}xKuwZ~e8(T(>j֟V >sz;?B5cΝ;zun6>9^g'2;JQ PTcqG'W:|hINy~^Qwnެ:׿eB?1?}!կR;mɨ' g@xYuPD)fBѲv5sꩧގ{6f֭SQwE:`XC=N.QE_y2TJz%Zc<b}r󧷓RJO.U|.tvo\U7;l[ulv/rJ]x*FzG~~g?)lh=%(7 nkzCt{^jL{::zr:tɟ0(T㥞iNe4ٯ'?ѭuଦub3EԩVa6§&13d#nh5J5*)VL: P$]ͼDcNz^\/rUӽnJ]ثS:NW+gΜ^w3a„<>]Rl"J:9r]=ןnwy_HLuo׆3^U֨~iuIva;?*0X Q:RO+ ڵ6Q,nۏmwBo'pzJ0ş?mLx/="ubM`3YÍ`d)\Fg!Jv.~bMI}r󧷓wԕVZIU,ί_#:\(^_Fz]* Ql4E<!<( @ *t颗F7kr4]Uyhߙ̴[OA*[FH#K֭[tGvQH^Qs6K$1>9IrvTʤ#.;C/*E_٪owHٶ>_dyJR{la.U )-SjA |@ROI$f?zw5&`a?&)}T 1TeSx,9{ߴ',+vs?O SQVP)=gIpX=ƲIΜM 8(Xc G,P[Զ={jyu_:E~y8u 6pVFP7xcg`Z?F=oRLYW_*п_~9(v픟_U<$OO)ݟѽ(QRQYJ-JزT unTF!AY>5,u({F]6lc$FSZ4t/n!wt3DHDlfu_F@HNmU&?*LA/3?7]ƭPW=RO4r+o̙yWkRQ,Xu_Q]XM:>ROu遇6h#uE(ͩ,wzڴiz{zԪޒGΝ%eQ@NWb9sv]=MWo PQ p}zQ 5ֆzC`9wرcǪsq@a*;w]w$hyTwTJ_F SҩS8"-լG%T=ro.V)1:2+XQȡ<+^Ŏ?x"JF^f0 ޽ݯQΉM415{Wkm;Kѽk=K_bgPi:n&zk[` I4ik9s,GD'g[N(=$*|(UQ O @Qȃ5!-ͤ>`zAqΧPlL#P:75ջz'-1I˭ (KH zY{kg}?뜨,:+J\cdžjtl;#1|uMY      ԹNXozj5bĈ` $"z`B| &:$Nuե:uj +4!.ipOd@@@@@Zu}+VsΣGA r)76E z&x-xuӳ|V2jٲeӦM{mHYFvm;ȑ#5 ÷~ű<     UP QHa&MCp >` Y@d3SB=+sUsXٳgۡ +fS%Nƹ kAk׮i @@@@@{vک_~zK1bܸqlD 5!ۯ&J~G*h™^D'V       _x|% :ԟez왇:O0 NҥK0iL`ƺ4삑ⓜm֙Fڸ2ägi.lR@@@@@@^7lQ|` T 0ŋ *.a, _|klٲ?ucXnݺ)humڴ1 sg׺_{^Z%" " " " " " " " " "Pc38[n18p?n @>c{ar56lتk9J/"ӧlF0/׬Y}ԩ ڲeZjJI.|̙vai'*K?jvTaH>#U" "P% yQ%O:%Փ%\kQՇ@?S_KZk-U@D^}UƽƔ`_vSO=Վ!{N<ٮsaSxۤLN9z@zv\jHnݺٳg7nxɒ%v/6mVXa!$hd-WYe? $?裇~/U 8ZޛkQ_"TEuQMX}GU5!پAjBU)N:9vB ͛?ީuСNpFiرcnTkT8=蠃ϑG٩SwyǖvBڄU@Q l'p¬YZ1$/wq00jG}C6mR(W^6wydize S W֤E@D@D@D@D@D@D@D@D@D@D@D@D@D@D,XrgxI'=X:u͘1}+(ey[nڵn]vӦM[nmS K;!UUpԋ͚5k_:#" " " " " " " " " " " " "e*X(ر#pwߝuYFѷo?v7|z^zai'rA_T^" " " " " " " " " " " " " a5A{0,ml?8{kGX%C ?=k#,Bt"ԡ*[Wީ" " xE[p`M7[#T4>^?s.Z^}QVmԨQ #rh./Yk`kժWҥKM4lv$h SO9x&Nhz6=z" "P|z|ٷzɲJ+]pk( " "P|.~K 񨣎6l]?`W_}.v}wGXY@8pO}#m݆I^g}k4S-aFdPzltN?_~t䮻2 誮sW-U+s?(6Bb{pp~W" " "7My[_X>Ok{зXwu\~75kf'(fX ŤD@D@D@5w>nܸjMG`N|fNdCׯ_e4&;JxVp$ErhB8GKg͚T]Щ=h9 H'ơвeC=4~MlOMn*|r˿k_~lyvСM6FG}Ajre O)׃>Glز&SNÆ IѢN(jU$" " "P޽{'N#G js[7iU=5|UD!P᧞z瞳\xv4p5ǞD§ w-Sa vyg, ˦j,?Y( " " XuU#z_> 'AzQi'V%$I?S9ZVQb߻UW]X7iq( >gET8O?&߸q=ÖSBTUT%u#q(*MϞ=m턯jT(U{T@VL,%" " " " 0Ձ… Sh)ӡƈD%.O Tl'4in0SN% T(NfTٳg-^q;-Zv槔 }۵kk*UBSngDH_~9j( 6ODa"ga? 4hĈF@vB85[D@D@GzSoH&0oc Ty ;cj46d3IO+h)saZߠP@ ''x.gW6-QXD@JH@cXSNAA>x#GE@D@Dx*a6ՊPKT۟SN $@`ɒ%gE^z5kLE𒇑/X`5/?,. VŸ믿^guo j&'SZjmF1"Ͳeˠ}7 +>@ Nciuɔ2Wy+]k|aJz)O?馛6h K.&2sҥ~-C_AKhIx@ze~9sܹsi~>OOpZHPTML?{z4'd_H][,B*1;{kے𤋮 (:k;#$0#kI׶q]uy@˚1-k$HՔ' *t35˘oT?pG;a„ ;쐩U@5Kť,턲:j@pa >SQGզMGHJ9lƎIr6l}M`ڴiqeM`̘1fUVe9dz^vmYz뭝\N,ByrHEKGLP&M2 ;Mec\,JGydNs4-=z4 ̟Xcqx,&dӒ\ƍc_5y:ut 'b~͙3gԩa&_prM[LqCqCACJJⷞ4_Mp '7սyahbb9Jt 7di{pwڒٵ.y)dnH52O~׾8k׮K& -C8ӇvW^V#kwy端j$0>3$nVc_x1щ'~WvJYc=^эdfDХu]8 r`+d mgzC}hu4TsپJTc[n bF۷w$BU'2t$xj"ZCC=7|A9 ĕ`תU7Bƴ⼚]Or#j56l7O381_M6 LGf RΝ7nL$GUڥ 6,/_;" " " =5 /cgr6mLVpSLW4={:4s^r]gS>/K$AVCpʼutd#d++A&.o72h [F3?.RVCF/fߖv>%L0nCL ae (zQe0UO@gc;ƧvJ+d~V ͲߣG?>! *+o߾YdJ!CtЁIѫW/GD s=qiRvv}7l3z!7iM3L_0"mI:Ѥ:y |4{9j(%\p?p%a@undr1ؚpyi$6gƌ\T QEs3<쳙7B;#F·~;+0׋|UW9s(NA偳:˯$}YH,be˖,!1ORiꝊ"iy r|뭷ZBg lS|xK.2"+N҈DcvDob</Wte1Y֥hjm`U`޼y,/>fF #r8f0н{_|1NL]ql}Gׯ)Kq g}؍pHFm<:Z~E-z1[S2sF,ߋ,䪶Ut*) +O` (22 <:8;2y0Y;TجQ۠\);Z\bf!A{,,G<(!3>4ʔsnvpdߚ}첍VM(=|W5VP rvBSbHVHjȑ#yReʏH͹f)d4pMW^A16i0sr=N0~(+xX̑I 5Niv4>PZ 5hgTXD@D@B 0Ah'0짟~:4}b=W#Ε%-Y1(" " " q"jBPx+SIkys*~k|sL?'dJ֓ |{mv ͔S5d*;&31)d'GaJ4Z5da37j&(mh o-)ñjBP>rJ"D&2ʃIm&ehIjiZHlEe0jiGfUM A5JVL]N 3iyD42ե\E">ɾ5aM䭷r:#qŹJh9\Nr0#嚘+]fx"0F&Prrm0u-kdǴL%j:e:>餓Xlr{c~ (&|e*"eȉ^{텱' JBΑWz=mx6=ӱoM;S" " " Ս@N+X"X4v&s*xA#]Ҙ93LعℙTdM2<X|f+*d^#۞э<4ibJ.#,y-խ_kB{ĉY&"a5Rt`(D,be=~QG ~RA;vlģs_N& YeJNS|kB}NNvO9rpU;MMaCGOa} ,Ț7 \Y+ M.K!ǴLIϏMKX,ԼP9z \s ;2T@_!uhQ8^iCƍCq**" " qBD?%qe7r%hӲn P#,fTIqZ/" ">{&W nY;ϴeUjѢyGWY0 A&M Żgjn4lؐfL:& xS;ӌ$S ڶ;5 / ӦMsoz@hb9Nb<1c@O1Yxb&}D 4E<>\sMp"~7vq1|G%DH`p<3=p$dϠz4Ԙsq8'd):WQ߭B?oRT!ė$ԘQȩ1Mr(`FxZht4A\tMWy9׉iN&ȫ)p: | m aӘ\<1vZ6m5lg=+l" " ?~pz5Z23|bT%W~ e%ao#pMܸhi' uWdF4hРjlxM#F`DM&ؙ/8& VM^`)=Ԍ$9_~pfU `v }1ޢ$l8cƌd=ܓӦ@$;3&l2GϓA{СASO=աCPLF2`j`6_xE7 RYqFy$Q8Jh5K2B~;QM f{'vLS|8ؿ=R3t,$'y[A>j^EQ!z6S>,TiM 멡eE'.&tr50reZ\*@b Yx's A;efM9fcǯ+_5_v/$aM[5<} A ΃agzC}&Ԓs9>5l8@(=eerUM)ćz| r!XS5s9gҤI/OJNWhrzF =ȘZjeoLCC/`,on(ZÕlDvm7|'LA%#RC~)D"^BMbXoLfԨTgW>uoϊ'?s|~ݺuc"ԙ1E4')@˯ 4uߘwN0덗UVY?Ĕ+2F7|s?}L V|db])I5. ~NjyO\@k6r$>qi ~KXje8((U)?e]'K⸜cFpſLg)N$%OWSŢTˏ:;p| +0c=U6?t&إKhf Oy$BA/ۉTTB Gl? 0 sTu}a8d*'|:/SjE@D@D@D WC v}馛b9{ppDGCԷi&¯9z}7x>Y%ep TlT|p NJ?:D*S]~b$Bq;QVwE4(-G}tj)Y)_~.[R~ٍ)0\[g/fIiJS}~ &Yh^'%vEZ8_xeT_Ht1OP>B-lquU _1-.o% ^duN(YNܟG֥.]j6qoN*">3>#>ѱ`Ed7ik^Ѯ5)@! /d7>H37gSH崧hoBZ)/ Q:B[fm_'x]&C! JATa:Dɂ:^~;'MYvҤe|(|Pp$roԨ# yrC!3)! 䧝P׿!PPJ5BCx.G?PߚBץs ŎLL*Oa_x&b:A' (%jmqe=A tՅbIDў_Mja$(SHIPQxb#` eC.*1U?ecVD@D@D@JB@ %JE@D@D .XI7Q=?_;!z8uj]4(Ѝ8Ϊ^b94o< 90yqir-AzC*}ݼ"CvyqTIHU5ҠGCfz684{&g24ovB1'{1ѕNb"AaB?-BD4G I5Z`He~Hعۮ];Yc{)7:?$)L]ix%CC;$q5> g""P@Xۧ所T:wI4t ߖDBk駟B0a,0V1v&oVrUML? )2d7|HnF[IEiwIoBZ)o=ȶ8Vl_,[|#)&toQnì򳖓`LSv\ND;Wa.ū:f!˖-co޽իWH㜻$>~7Gw$h"eOC||k ]ՎN(= vFgm_~)SX֭[^ǕGt-~ǴJsrf͚ $}6Ǵ)<]~li5gDD@D@DH;Έ#" " U2ܥYfXDlٳgΝ0#P& Sj)f7][}MO*/ /Ё: 4Ç馛^~eyCq ]u> 81ԪUOL#x&TQzܸqrKO]FǟTpt5p)*" " "P"" " " M t>C\%C}WBb_#kTZj޼y˖-:m[5k*,-ǰٳV~Ez mgܬӑsg_o&IW_}Fz^BM Y:oV:„EY#~iӦw̘1_|EBXu83yq&3opZuwg&P4Y{$Oh}&JbБkG"/Ydv;tpG>PR"tHW]ND X,kC >O9 LxxbJi" " " eK@ e{j0 F`%7ZuCU wQGu衇VD7umMenqȐ!c>3\ ~ޮRK y뭷̟? [A_~$ 6lzCWCš,T2Pٰ =/T*bi03h֘6Ya_}U"0Q>GqꩧFIPgzC}N]NLitڣWǠ~a>_ =Y.W*MMٯ8`,NRHENZO>G} &|B~2ID@D@D@ʍ패=" " "n}|/OG] An[< ۾t;:Z;gTQh35ksu"|! B]uEkLFw}w]vɔ`ҥ4tC,q O<3cu|رQ>!I|Loϩio籘팥<z!0Gw5|aJ lAtУy --Z.Sa(Q/Daѩ?>Ug1GȋF>쳬uرK._NP @!i'IQD@D@D@ "N;yNaN2)o{@J_ wO6s ,&v9[:_zOqmזT/fi׳gOnݺNX]0S $>~7!2 HSH\G) ipOUbҧ0ô6f|IS'OΚ_~]vV<@w6O.`R ACW5swޙL^ 80c%43;gPF\c;W2! -DB! 9j@Bi/~ט@!y篺* XqEΛ7ϯaÆ0ę_K.$t p;찃q*Qr9ġ*0p-r$%Ӟ* Isk'0<~_Ewq,vJXq@^{1\TUHFG!, &=?s`:BH_,j=d?KNװAɲB YHjN!)E?Ss"C$\Tqg`|Oe^Ok V_-1ӧ0-tjxu]/G9j(ߘ]a w׷o}ݗ'ફ$K'kEb^Bvcf)v+. &>fɧ/$=z /`Y*'5}NlItP8:j@&)eH)`,ݵk׮}e<5ID@D_Xq:_y0mн{w&Y$:,Q1cP.A{ Upf'=[oq gYԠLtM~CƍqFrvV٫^\:h7%7iNb .tr~wu{9 'eȉ\R:8g>`eɐ]q_- pVBGq|tĴvP carT-̶3zRe 06OWg5|6O4]Є1l&إ0i) 9=2 HѩLp> 4=Gh'ʄ8WoyI'Wj1ӧ0-tjL.ҋ.C+@ki c?iZe֭[ %=b& S5Z0elqY_9LD] c02/_eV0GfPØ8R x;U d;AA\dػ'\H~%o\c_#LaYW[oda38s6l3@.Y0d/N4t9W$)K̖Y3 O>u"1Ddkl c>Zrȗ_~9$~OKDg7>"\~Et6 ߿S( n砮믿>/ۜFA40/+.5k$6dnvoITutvg:5 ?5wr1a8,u$QNhswg𬍱^43>>4 2e:W>c+ jI{ɯ׿2 i As=5~` 忏>8}{N~@, \uMW]0+?)A73grE?-u%Cӣ"|G}(4#DՑ[Ps(*" " Li<z 5S 7)G f6lA.j":f'^ `سvZt^(2Ԋ`x;;{A `6Siȩ  R=+R@ϯ}'ܐXՋPMu]٤[ZȬaI¾P7NiLEsIw \tA)Gҙ%V` XcrP f\~_|EѬBT.]5IN@.]L4'NPvU_q? IP)==rp>jc9,beSr^!S4%Ar=5(0ˏe~L젦0qDaJs횮ЧaOwen^^AGKH̞R#PJ@ ed|;ha E?$" " )\pJՕX]>.ȥ݌xo jQNHn'O勀T&3u-n&d3KEF_fJPߎ8vIvy5;<9)<,=C_K_~^rGah mU sIs.!r$fw~My`A])1=鐟3Y%olޚ _}Tz?ЉQ1m܂bF>j(|gdJVZ(GElC#SGyi4Ryܤ9umjp Bc̬,? OtPf&>ny1 "-4oJ蚮:/$x 7"͵u:R:Ai\EKX {rZ˼?79D–>kuu9BG8f4aNÂ((p<3Y9ӘJqԵm۾;\pAƌ)/2;"fQM2 ToFREWL4.4.vĒ n@lȐ!6Xv޽kQw4iB7/6,:epe,|1N4$>~7~JejO8\Wr#lTK~UG z( TAyw`owu.Q)ʣkFʒs=Cg2(ꅻɓ'㑁N9A7}JXUW]լYdhR]v0mGmW_]p#(N&\z9tРx;Vz~ "pqqƍGOR|טR`vcܹdL-06mZX^rg̘AOYbGrkS, 4~'ơ>tAlj/HJwƏ?{lzuᖂˬ ~GI 崤Rݤ{_5_Pl)?vcN,%~>0qC+kqoP&WNysM@_y=gC)' Ltkk7裏X3Xx1j(@$@4>3ա>NwRz(Su|3u!曶N+lIh8{*%C0:١2851!8ɾ+>:ҏs(%\ytMWsj/%\Kph*88Op/~*ԩŽȋ m [@I&O?LV_lNÿʚho:AT4ꠝp饗&?I:k'k·" " " " " " " " "P!VLc0ĎDܾ2%ě9g? .r|\S5}(+H5P@D@D Ax8T?X `2jdĢ$VϟA$&Td8L*7n֬YتLnoyI%ż. S Vi֏J;g"@y>}N=Tsl Tg뮻8£69%K\y啾e˖0= ެ0cRMΝm" " "5jd<jx3Ry_|6{/9dPD@uoxAϢ߾G'x"_I~GkK\]tExUs9r矏õ^O$: l:uj9Mm]QXl%\"<$Guɓ9c='a)UVY**" " x7rlvZ?~/bK.}g-Z4kD̘1u'tRjBP{w)n}YtsΥ.]&|߳gOT gD@D@D@D@D@D@D@D@JCAw" "P= if5MVJ:kU .ƍ&`:T/6̙3{1&MbKX^3իW#& ?njcf ;_5G TCz]wE@ӢUV%Ep5B. :sqgB)@ GyѣM;~iL'HI{ݻw馛/Z衇徤w+\&X81`p@͛>뮻nV3Qs Gͪm` C ׯ C9$o 0gΜ/XYg;~zk1H 4iRÆ M.K_y=蠃xST:uнvFa$xݺuKS^)L' %_?)sРA+ " Սl}%pgbG:f“}`P3Da(k40~ǎqhʔ)_xZk$3g1=s7&YGh'g~IopZ<`;Y{*6mZ,'x믿nFC|(!F0UW]PhDP5͸袋0aRvB!WD@D@D@D@D@D@D@D?t뭷.4X+aDXXi 5XCN LLSm֬u2]D@D@'綾^ _Ŋ; g϶M㏿;Bsuh'5,/Yk¹`pÄ6 jv]o%B9>j1)O?=R&j֬i/b~ٔKD@D@D@D@D@D@D@D@ʇQ8 = @u&l>c!bCvjEVMY1@= q" " "&{{Yf٪ ?c{ojNci}|>S5۰AݺuofN[o„ 5j0n̈́}76(Zh7iMBP=jJy/}Ha(K.ũK@hԨUW]tbzܹ}^{u/iQn֯_O?55zG¤W@D@D@#A `z O(l&(Cq5 -:?%nlMC=4g >3S ԩc,(yÇN8^y1c7|s(暣F2v ddJ!8q?Gki%lr#~֪=YVD@D@ w}^{=:cv>0`3Q)Xx˄s Bڴidg;m%ѣGj' 7ќw}M40Y0/TV-4o>_ ۷Z:8∢\i'ا@($ʜ9s6pî]F%1 'C=4o<VXW^((O> ?t%|#<$HdރUVYN?LQ}IOlGFU-8_ifza7gO=z@N;BvڶmO;Wai'$˳*[_or:7[U&" " " " " " " " " " " " Ւfmoϟ?qUr}p4i ~ap0`@N`ر^xg &W!1퀞)jM41D8}Q3e˖aGW]u]wu忦M H)*`iѢEzT7E@D@D@D@D@D@D@D@D@D@D@D@D >V~*>Xvxbl~WN#a߄a뭷e]h'Ow|c' ?_zs=wmE;HB J;z+" " " " " " " " " " " " " "P5kf;1c裏6Bk,3=cL8%Kg{AYf <^bFiӦu5~/wn'h߾YhRJ;k [矃(: ?#Ya0BXhh׮ #K.&L`[n>~W|Öί" " " " " KSoXus?rw-Y9,9-WT!ʽ*IsU_xv4.V\}1dz >h͚5D"0/"IseB |7^uUq>c>l_`(.jv0%̙3'88:Y@Sv2:t2%o‰L4`} A{iܸq^lU ;=M6&\H@ S^l9aN{q4[Q*.'駟c{aK Lmŕ\v}m턯 kǦBŝ5XD@D@D@0AuTȚ`u 'dK7bAJDޘIhZ8L |]|Y#=X`K[lSdh0>d\oz!A~~LF3OE,+1j]LKLBN(^ˋ͔)Sf|7vDkժuM78&ԯ_|!k!Y1s0b)=:裯*z)M uea&!"%vmf"2FvB4?4LX lwj^04aD@DO&LkYsVyC }1 fj-|Ο?Fxd̔>-D1qHwfI#AJ 〢HUi?D͈C_:ApK\GؒqWKhJ-)Y2yMi\`Nd.~r윩믿.¸رc$ {W8?$" " " " eN>XL#O;4f~Ҙ+yH hu+?Ki(;q4ogם-Dcy]wNd&7@^7G@ƍ:,FPAę,%h98Jxb .N:_~xNFh`ĩԤҥ K&XQ@;7t9j -~(|0 C`V2B;-Aᣏ>b逸ʵm|0?裁Ÿyyv;fq&b^ziV䢺⋳/;140P?s>aӫW/Gk4Sfj{/m@G<#%M6}嗑vm(pvB"C)?@T=f߶C?I@gWfΩ)0ȉP0Ey18LBƅ} # 8]y啨6Yg__.4pO[˭%iM0fdP;SF%Wm֫" " " " "P}-}􉣚(D͆"Suc&TZSL )P)C#$5#ɽK T&gi+8%s=g\ &Z;! b^%-㣈2a*?vi''qqDQ3xUCM+2  ᱋́`r2n yEiW5۳r97NmGs4z5\~=٬-Z>?쳾‘Gi44iGjmB͛7kf-W} t)믿>l1 (=L6ɲ~"֪U9ZH^>g]a]vuLٱSFFJklI^ad,{U g͚|'Zl+n\,X`ghmXV&|mD{q*Ep6lSNKx'287n\]ӖĴg'ҹ.a|p̓%Y+e14ɞ8SuRVs26m<9믷oޤ!i 7ܐ}`;w9@_~yQҐWar#J 8[n5#r>;j.O:7tb._۶mل<#xD6 {/r֌}딐k˫+8 dW\LÇc~-G-Zk'~;{a!bGRW_}eU7L4\#8[0w'6QpGDQ ) ,xX#b?D269r$~(;P; z3ԨQ15 ލ$Rsqٮ  o}:uz2Yt-!0SjWVuڕl3pBt>BM<ܡʼnߛ)QC\I\G99su|%Y+O@I'4&a+b0Ô}4nBN`cs=yi֬Ѱ(ܧCf@ehժ3撷J5@D@D@D@D@D }9k S޾_vk,=Yަ~g?=]fOJLAت ̊2 ~={-gݎ;QM@^z3iSbcQXؑ+~b$苠&4>}E *v [54E!hg$,ɿ;&jBb} :(vTo&@?gsH\lh/w?0s~cޛx:̙3QUy7C\纄=B;ʷecI޿Z -)ɕY2@G8q2 S ZohΤoDzc'/f*DD@D@D@*@'MdoƗ+nU-" " " " "@ye;ud\0rj+P( =% 4Zk-V7^z% qЮ] _Z /"7'0h~3IB"ܛxxq0*"Yц4u {4w\M_K$Wf1Gw4a*0eP[/ȅ™=3 %([` |W} waʶܰrn&" " " " Ս {~}]c_C36Ŕg(tB4쬳~{d`9LoXqwZ`gC4ϖ9dENf\}7xxf緝>}ѡ eus"Y~>eܳ~:t/G!t_0QtFKror-3&!,ƹ.aBHCcNGL1%29ZS4N8 e&֋S҈TvM;"ZvB#PD@D@D@D .ʔ1${'C⃣zl5jZw}e`~Vq1}ߺuk<>dZ -$q?駟 pwK];K˾v/¡& s }0͡<㌠m\Z,r7|4'e[*ҥKm… uBM{YsD?e_g7 !0p#O6-<䥺7@GJ;%~Kۣ%h i,ՕY2' 1'~4L$>Wr&m%+TNgY}B/8vm^ -Z`i1o7^CȺrvЫ81a;cLZ]vY3 za/ZF1P`_2G'/᧱%bX:(E dr¾1h'Q\7v q,~G9~8ˡ95kG{R{# .!sMgK#|ڡ~@LKues xOg$[Di'dd" " " " ՙWE@D@D@D@*JW_}u=4wٲe틹nST~i~'?#'y.''o[VIJ&LƏ?d m\k恟 ?/ .Z)7hLO;!Sh"HU{3GL5*aBubj'$H j$,Օ=Ph:qb/mxb'=AyqRTD@D@D@D@0p52:vاO"+#Gl۶ /?W)CWY (vB7ٳs?|&D78s'?D8k,PΊlr$G=eXKhpo(R(t̪`-,۔ɞA5L@=zy%;b8~J!𔥈J$,!e˾D}%[-%e+eI"QRiBDܙ̽w̙|;owΜAj.@j~Zx`Q@@(}"m믿>=U¾C].m-9S^}1 6,xÄ^,O]MLj֌_v|B d2g'#4ݾsfRf[I]"kjذ[n5ӷuo*Hwur'^Xrz6soÑ:C)͚5(Ƕ$XU&\m m,-T.jA+܌gD_m8t9qe*dJg$һ]9  @'M$^aOMui5bty#s]D  [m۶_|E>?Pv}c뮙i2p ;t0~^zyڴi%EN~_>rtNk|ow.qi>"pbȑ7v͗9sxg2Րb7L* 4 rϐpSN 8 ,-Is4Uo.穫TSL]3r"qï 6w;72hi|CDge@ 1 K}k2SSq S)'Ȋg_   `4P8#/'%LRQM@@ |WM6uPg߿ٳ9KOڈɚ5kʫ ^}Ujy59Cy,veb..es=}&ȒՓ֡CUi~R:H{cr VyZ'H;ʵJ)[oգGJ1|IG뮻oW|'<7d#mf':|fjfTq\Ԃ % $6Y@@#@SD  Jyrnp}M6qNp~*}_{OXc b]/,H^Cm #Ǝ{nJ{wa3,^[;3;GziwuWo}7|SXH+]w#IbĈٙu?K}߀ ' 2ĵ'5UYͽ.b'n+;Cb/qNUulD[o3G:p=8 <2e.}|&v@н󫜣LI)=|;#mTe=  Pf5@@HjZ}]^hф \3ڵk[ֈSiQ~}bz믿/D޽7|OLQ嗾Q i>s[8woР,wZpB3ϔv*ٍ)ڠLKms}$/ի_⤦*ݻU6isgKbumfʤt靓,6܌QFԢE N!ڻk4tIrɒ%{w #MeJ"M Ih5a  .L@@HJ@l6޽mÇ{oZ-y-w~icB9k։']~ҥroFvr_YncKOWe;Nz}W t=]гsS%嚣H6C_+R{E${AG˰I߫eA[^X_LI,es0D'/9ZwuO@@@ +8@@0]@nr 2DnWP4= 5ߛUŻ.#H ޏ#e\,- }oy֪UKСkaih"'} 8 ֨QB#7dzyWvqG|9yyQ3U~lݺM5kشsS%JXY@G]'4jР+v:/4ȴZUU\)l>`z\sD@@|>?m[   tOhѢy?B:w,]v}ꩧ6h'tt2|f͚ 4ʛU 6ӴiSoDyyw~s +E?/oi \o|x6mȏ}U:ȫ֥#p|grV|?-,6tsT F$WQo7SNʸbNjqpvdjfݐ諸/SQ ކ>g\Jd1@@a2  @*%ƍoaҁ?lni9юt8p`{IǏk|w.qik뮾%WVtAjWKK0Sf&+Tpy}'M5Fr܎1⦛n}[(-%ѣ*Оyl͂'RFEEEŝŦ.qnG:8Vtّwuʹ&5 88M;2-%#r,e*.T &LpU4kk&   O6|1%K@@HV {I6mڂ yYnoѼyNoVsҥ}oթSG޲e˨~s_b4S7}^~7n,O ! K)S̚5kق,mMK#<& tܹҕꫯ^{ժU//cǎ]V~}7q KLe9$ɓ'KhhC[Qqʻ zشsS%.4u"|'NB~]y9qM"NӎL/WqsxIr꯼JzW_E~§`H+ }9q@@,xYy߿wޙꩧc exʸrmQ˦(   D! ׹%1Q;g29s>,/~dM{:,ƥB]0 "@+NKe)ybI^,nẹ%<@@@R+ }'lFra<Z&_( TA;}衇\Jc&LD@{rgYfrWGDӺGy5 ͓>dHk@@@rY\Q>9L, 2dHvgyf{gw5jԣG@@/7 2FS qj{_3f̰9s5   &pa5oY*?vaZc);*]@21bs;oӦs   R !X @@@Hzww8 =vI&90[~w}uۏV@8{0v vl @@#@SD   N`=<Ӝa[WG!mtG.GPJ{W0   *hiF@@@H_,}ѧ̔7o>c $kkmM2   :P1G@@@$jUTTĔ33QJ  @9frEb@@@@@@@@dZ'\; @@@@@@@ruB9"1        `Lʆ       @9:j@@@@@@@0Y &eC@@@@@@@hPH        ,@k!       PN(Z'5jX;r[3A@@@@@@ptMbOZliE8#       P~{{)#P+ݰ2۷ԩSnjөS޽{AD      'LХKWo1#R !XL{%K@@@@@@@(H 03{A@@@@@@@ :=#       qf/       T_Z'Tߺ'r@@@@@@@uB<@@@@@@@+@[D       @<NǙ        P}jUЉ@@@@@@@{+VT?ZFƇnM]tͯrt&+dɒd @@@@@@@ 6r!?|#GԱɛ7g       #ЧOM۲lpG|P      @ wB:4jo pe4hpByCUL^L6v+rƕ!      @rgpr0 A^"JY6M"?Bvrg} >se*!      PiBݳ cƌ{ォ=I)SڵkD}m۶-|=CנC+bKVƍg3      ''WX~F4#%A$R6BR׺sܚ      sl<>}DhacE@@@@@@@*zYvH8d;H6eFh`N]P@@@@@@@ 4hZ$2g#N0.(        @zCT1 FUA@@@@@@H@n***J,lASF \ V EB@@@@@@H@ڵ{Ube 7bN0R(       @*J)C[0 f B@@@@@@H@۶m[n]t۴i#[(zuWuɵC@@@@@@@R&pq]r8A@hPQ       zYV-ӲV^B,Ehj       f 4l(lV X1:!D!@@@@@@@R#P [+-(NHKMQN@@@@@@@tH/U/Dž´NH]#      @ڵ{UP`U*Z /J       B_P) -"r=B@@@@@@@dm۶n:fdIY>)] )[{]oqF@@@@@@@ /R}wq!7~ɐ4p+W4X@yuq…mы/馛XH      ̟?[n/nԨф 4ifF?U܇mذabi iX˿lٲ'nkV;fg       o[l=Б#G~!…ŋ{7Ě       `;RLK( /o: 2v Ct&￷?X       @ 8 :_qFԫW:uܩ!u!A1@@@@@@@\aÆ~ ~*C@@@@@@@@ 'a)$RPI@@@@@@@T :!G@@@@@@@HRPI@@@@@@@T :!G@@@@@@@HRPI@@@@@@@T :!G@@@@@@@HRPI@@@@@@@T :!G@@@@@@@HRPI@@@@@@@T :!G@@@@@@@HRPI@@@@@@@T :!G@@@@@@@HRPI@@@@@@@T :!kXc kqk&#       P6{ @buB)oK.8#       P~{{)#Pcʕ쉽رcGթSΝ;A8      Ǐ4i4S{#:!K>R@IDAT,'C@@@@@@(.>5{B@@@@@@@z :z;Q#       fO       TOZ'Tz'j@@@@@@@uB| @@@@@@@)@YD       @|NϚ=!       P=hP=띨@@@@@@@O Y'@@@@@@@g5        :!>k       @uBb?N:vsΑb6:       '(w5k&w ?J3.3I)ѣ>ڪUN8Q@@@@@@R@n [/ڴiӿ(ζ}'T:/63fXΜ9g@@@@@@OyOy"%xhs9eʕVqk&#       P6{ @buB@@@@@@@j'@jW       @b_nܹÆ 6mQaV\cƌIF@({e˖-\_~W^FZk@(A|VJ'd@K`EqF(N/)εÏ?xc$       Pg} BHJ K mM"d       `on+ҥK [Aq_{_wC r2      ~W;vX^`7Jo]׬E>s6Ɩ@@@@@@@]| L 2. U)Z .b&[hQj      Gnݺ kϖB]{!)f1Yܹsn_~Y@@@@@@H@n^x}]t]wݵ`}`14nܸ_~w ."'~@H>VC@@@@@@w>l0I ehV,9wqǧz꣏>?V*;qDJe]vb|̞=;[f͚o>=eUR dBԠh`(&#{j)P5hX\j`2cV{И( %25h@%Tj$DW{0Qv9eBl`do(`a% ov`@ X@^2?xt}zꩧZax FeAk'L٨0Jf.Rh8 3myjд)<`b,9uQJI8K3a]jЄZ( `)zɮ`Qs0*ɤC &%~$N5ﱦu;@@@@@@@@@tM@@@@@@@h`[0       :hCm"       -@ۂ1@@@@@@@!@l@@@@@@@lZ'!       Z'Pe        ` :` @@@@@@@t:A*D@@@@@@@[ c        C :T&       N-C@@@@@@@tllwԩk5TE}UnK߮jF*VՇV.ӵ*cLXmZnGi%<^_S-uy?gX]խch(V\Ek)fQє'طB;y;$RmwVu|nQ*ydtXr Mh TlӜ_ot?[B2]qr5ga1?3N]qjϙꈮA[X􍽋-YNML >>RZmj|cux.j)VrTLPW7~CUR_-QX jfUS4zeLt'5(rMG5j>c;$;Me7 _M7T{~qSo+73WYϿf &Fjڽ{gudWU+ KV#Gz؞iR#r ll97=( ZloLQ*"oy_oP!'f-匋'0Nm$E29$@sHwD`*rRtV9O.)4@gY&<hTΣ;˜LFS*# 4#@,((: cT&#@'sP]{(/f ɷϩm1nT<qPz yJ %CrRLESJV`rBj-;b~Sb<:dt:heģ»stc#r-yaLd"L$6@3h˜L dJЪiLhh ud0A@j$"/VRAnTwK oWj/wW}ܤ:nZ u~y \Y74M[j㔼%Eí͔4+Ԑ'Ֆs#ܵ)&/]MiT . ^%+|:\ XNdR){U}t7MѪJ&k0E? (2{e3mMJNKSbV FkRT<CrRLESJ4<)=5OK 09O)h2')VQ03ucab]FGadt+i͌9QeH&/@LvDGFe2:4*tI7'yH&[f"uBdGYM^.F #nT(vvӲkSn M6VgT좚l~]QvOWݕy;@z_SY3P1~RNIwk;TCenOf+a/7Osl+ 9Esh:tOվjjjI <+kׅjUE}k^*GNy*K,4fdZT7Z:Ϥ ))G{M*gJ3μ{FX.]=rbzjuLќ/F]gP>i_5kzeb**ז ] sAzujr $ᑗȻڴPnJBi[ +;-9OaZv >RbyJ 09O)?<%h~SbR<|CSb<hZΣ;˨LFGX)GCm ǻX1-<@sNdt(UfN&)@aYxd"ШLF%ݜLFS']Roa%@"cR6U[|E۹˰9e9-_5H[Vo,CvVڿZr;)yxߖ_<}x*ܛwYS :C}tRr _/ X-Qޞ0yah[4R/ߡ6ܬnw>R#y隼x%S7&Y4Mƕi._#Mgޝ:vְAݭiBẃjsԜ=3.fcۜ%͙ئZf1yci7kR#n0T0)k{ug@լ/+?{ujւ<]6 s}@Aߴʏ.[k_1m"6?$L¨c(%^$s4<)=Ȅ'My" 䜧S`3<)=@rMYd2t}S~T6~RG:>"ג: cT&#@s2LFSd24'6@3h̞nFe2:4*tI7'Ad\%a&q̑cr}I-o1GxOgks1U*gH}ψtNAx<\V)yEp V\쉇~Rnw-#bwk^v9ƚllhԭc5k_ZX뽗=w j2I'f 74/#T]:_43̺޾k%;.]&\r]ЉdҀ^W~(}cf_f?9d L&'QLhh PTs2->E@ha{ z2%kϹ+sEM^MVeY忛{c:Su>њ*GGmH9ZK>r- jm5&Mg{HG&d-7AOjp癦ҟD#&wpn xߞ֥݅ER<'R_W -|z(7H73Cձf?i&;Xy}6M.#KJV(i=sӀڲȿy 3DXɴ' y 0J*Q9OD`Q('My дGwQDP6GZ2˜D 9H&)@s2yXV9;QLhh P;s2*/,@:oE+ocEߟaK6#;g\ j|UA==.掭 ~rU-칌(%%#Z)yu䛣L;"?s.'}/S`J.AދSnМMLG<~ݫb2ӿ c _YtdÐOerM\}]Lnne6@˚;r\rt4w4|@ΓZ *#9WkrW@$yt|g[A mM0Fz#|ډz/@C2M덦z#@2덎KQ}O4f"`@U7M.{g^}3orQ>?4R_v{ge%bgctYFzw فaVMs8Zmӛ6ʉfw*}c]$CՌiz{McPVeN3ϝW9hZkfGF3kVY8"#YC Ѽ#s>28R~:. S# ^~[%' 9$9<* q$8Iח2*#@,HGaFGF_d24M;Juz#@2덎KQ's0\ UD3RaFrz2Fd;A e'aܽ9Z]Oy5?-#V74TȽ?qYhuBBag95k3 y3ŃMUO`;֛Ǵ,[8[7="ԛD֮mÖ_Tk/=Imܞ4vQUOUtJ8V] Kȫm>goW'aQ믫rWVןf藉؜'0Nm y '}dsD9O3cy 'Myt|g0{ExT!gP6C]LGadte9Ie24$Q}Qߙ1d2:4*<@2t2fO7C2shirz*]=Tvdb-w}uߕˮɃt>,j)oy/th3s0zTY0ˢIiOArMeNJխܥC.25Fg( ZCh6xIeԛo9ˤyǫ85:k-r<77 ԜE9=C4:A|cu?(f~}DfT۱Ǣ-Crh406@xy<h`mC4ߜrh400@rYFe2:̞qN0ucab]FGadtL09dt=D͉!QL踤0{;S NowwJ ?ȭϩ\{7ﱃ:h՝Ti` 7`s-Mu=wNX ۵7;=lilf99eVyyTkXvmi౗?WjVv׆i-R2휖,͔U6MMkևl/{2̘ܞ:aS󴨄'D!9|hx ҏ4z5:!UMZ>~PXzk1Ro۽[[58WTqe(߷TҼF(\wگcQ{Jb%yk5Ut2S?n}B s g[5UG^V}HWI@iGc3Hã2s)WU7?nG*],\v=i4Ys {W9 ,.tt#} <;EyE0gǪ r¨rWuy"2-<@W$>#@,*db0_o4hN&#@~` Blh МL&SMKiLZ&LŒ "Z'DVYT5yK3OJ;'s8@uEhUggctðN"nT5ȋ-U΀ߖ>WϾd<;}OS ~7"ur<=2|;$\y3Uj &N~]R8y cQ'_sYV |{9u˿/aCӹv(VB,0Ym_dOKmEZCWͩVi"kmѱI37WS>,^d-#>+?9Oqn1ECac<:T#fTq:Hu<(=|4{k:*-]%;.ט\dk'l'[naN+Ԭ_E9_y۽'5XDy@gr39Sqr+(9OYid P6 $&`3כ0כ0;&g2L7aLE&S%=-LZ'#H Uj'ꬣ>R?l}s&&[;ï˙dLyéen: Q✟qyzY`k R4A:58o_ի3t;[[l궛jW'Tdzջ)G5x ՋCTy&8/V_Sȍ+tO"]K7 e{ >7gM\s RAekFߦ&Ϩ: OT{Xb&,sL?e$7T.iy~]իL;OU)59Oz:<<1nQ'JM Ji;+L51mRG:Y4G$1כ"LW&SPi&| i~ `Lכ%)<X57d uB"w3T=^qw]g^A'BL"Urm8g4 #@,Bwaӕ`~)(4zSPgLכL7f2*8@璌#i)[ ^u:H/QWoO5?ĈK(wC՜SA󩫱BgL4nlq uZhy\sՑ纛&H#A9#܅)yD[:jL5Fw>RSO0wD mGC+TTT1;k9^vwN[4Ro>4AV٠b5.Z$MkqT3(xۗH72:g9Kه\\`o?2ő}\/kS[>^3s<o$s$q'ًs<y e2XX$ 8Kx`tO63"ɷJq)d0LyX:USBL]&ShVُ"dK 0ELƐ8;x+L$:!hڵM?ԉeJzMS{יﶫ|(DZ 7ȉ_s&&~9-~ԯ_;G_]&3cP2KPön=u% #n 3@ap5)hZBz@*s;N&HIQù(yZR\G{!ꭇT&ASݲsY8?-h<J"6躳5Fݦj:|/!K%p,挞n5 aGRû##7'IUƨ Oȼq/=zY̽Of顤Q~'u-UD|Ǔh`O 0I6rd4*;QJOΓl E$'y⾳R`XEr0m`L$Cid0L&C4EL5pD"GLug2E_Ӓ`S%0G ' Ho'3+\u2'2oĪ IXCEם˄_[o|5 05f6.]}|g)WB^tPږ$4{ce5=^Zànu— 5֚ F&Ϩ\I* #۩wk曨{jy#\{}{Jp9eYw/$Iv6gF#Í|{7o?_^[=42g}›Na,mMBk}ZE7OΓ`/<`9OƐ$Q9O~<9O5UΓl1<ACréTd2+QFMtUbkkNm~&Sb1d2 dJ3"L&`a>*1@3jdJ<]\%=L)eT8LEy˨C,-BQn ?b;n\&Xb 4Aރݙ45M-@kG#UO\`y_.S/ ?|uZC"I푳taku} VS*W @ԈW{_מLј-p4ZFBI'g-KA9Vל*Kd!{[L8#*gΓHU r`9O"ƙ$`qRgcZ F$`l9ORf]rTwL:twP6EϜL&x>-QL/.I5?Wg2GEOKLt1d2ŝj6;KLΧ)@ Iv.ie r5VOHqubi )fTTl^iz4Ndu¡JP}wUGwS;ӔX~7|/SS/ߪ雿m2]Τ9LX X]cm[|䇜TL<\ 綷HERe˕a4YU]?rAjK $vl[/m75)up5m>[kSݢat"y9]2F#5IS39HCSQZwLu :Ա͢*LlLM}ēɔޔ`@ ɔޔM%L;*DpZ'$\A-ڭ7_*iPMK:Bp9@p=N>]4DXտU69˕݄toNXhh 6fÉW,kjЪYNtc'uBP%6 ŕ cYH]iү9 b mRf_eyyC*Z'HQ'V(g227Pr$;yK5tM9O+Str' 9S#<99OhTYf2QXucE $^ݙLTMT}d" _o" зd _o [}i&nl&`Z|NHj\?][,9n:m6. 5Hw[onM1Y7,rH[S'VwՇUnF}n˜%49d!Z[l̰ѭ6WήWȡ.,R^xnZ!kOUZrocz@d9I˄iۍGӏ;%*ISPz>&q9S#<99OhYff2X"ucEUa&ֽbd" _o" `K<*@c*@f덦K9b:!rhlfd";,^DcFU2]vR@!Yacr&H 7uOP]^HP]wq׽ސCGPb699fI&mޘl賹JUUKmsrpMR:k%*rq9ƥs^"ifaK䋾<rGrW=@R7IcxrFe`&mPkZWG:Yt_o" hd+L& &}d34כ*gjF%ݜLFSU `@ymnUYRMe/$X2 ]э_xiUN*vKD`֗=MnWk?V9TMA#9kYA 'ى%z5δe>YhKT+'O+x\mߒZ!m f\y.ZqgƏ5m Ysbs=YTicuH 4|'gIroxMCΓ'Ly|<gDo%8SG:Y4Q1כh4כh406@9S\$Mzzmf2(gί7.d2ApZ'$YAόS_, }K?9jدc߯z_R=< _k8`7kdλ~=`e4Abqzð>t4}C2ׂ8ٜ zmѰy;l~YI/CN+̣HV[Mm=i+i&mݲKoU]Ɨ',273&ilod9ev6X39H)_|KɩoXu9ae-yIP xu<gD#@,Z)MMD)zyޫADLJ덦K9 s0\ چ'ο5'~GLV yξv\?qڟ3&a{$eHUƤeo%)~ƪ1?/V=4^b˧UJQ;ncԯٓ}A9Nk^'^V}/=d/#WQm]5V=w̙L6MUCG*ȿ #Kic~|ups+WZF9Op՛)9y&I!'eId&9]kΣ;˨LFG:Jpulh cگ7X4#дL&"FGރ-_o"дL&F%ݜLFSs9.@d*Hݵ-S'ÏSǪG9揸:K8zwRS}qNo$scxz`F:gl{cGҝI7G~n}Z^.j5Ibp޺/#oaw۳?kN'>7*->` %aZà3mQṶt.?c ~Py -qkepOX/vv .R Y5GM7'`'ՕH>rH<* $5%;eN&)@W5%8#@,(˜MMiEPœ_o4<ޒ&Md"PΜ_o] d<G|6/r?rYS_-<;}zϔt%7wތ<'yT9ٵMz4ujN ]vy9nҝ*% <5^;:j^+Ŵ3+ιQYn<,s% ]6iy)$c %ኴmҾdbUJ{T9K63zcre@wB>k5f ;C JόZ]N:XQY/'{.Q Hy꯭߳n=iXm3HA_T^5OD]}K,rTW9y8+ǩa89U12qJYڱڤ`FvLӹvbqw/0{VW׋]nDr"v ٽڮj"s}>_͚&LQ~._Nm!A6-.xա:pw6}KId63BG+;&-R}~Lљ.%FiJn#7ųSO -V V:Ee/ﻫ?uj6jT&Jeum\p42 GSCff]t%j΢L"/~4.),|i l 'y}b'59O>8בh2!`'tc3S_a F_axcXF_d21ZG` АLF_FznB&=M4h `@`>g%0MΓy$5%OIv)x&;@W5?#@,ZF_a F_EGMd(u7o z/@C2}Jݙ덾KzL`vh_3oy_( R-y/xK-@5ՄjmKN9X@1s˰dfv0^(rĪQnMؽ=A:\9u¡V`kgLc,4USRZ3<$OjB4A*AQyxHuE?%BGV_\#xA>ݠzLG^sʝj\SQy4,9זkbrg-85 'V֜'d3L|m0&z5#\Qk&d2ZVD`h ЄLFkFzl&c]hLR:eHb5suT'JgH:jMu}ذa%Α7?2J͘|ACҪCԫ[:!/MXԴYwK3ۖMԖV}KJݿ;3SO=;еEj$5SS_]]sW%?bXU/^xSI_-Q5kdߨ"B_~+*Cq~~5O͚rJ9J7ivkQIC=A92r)oW47i^KYrjJ\8ٜ³zV œ' .&)F $)Y>6h3ccLdGf2?Nd(Y˘=H&cUh/ l)|Ǻ!ͷré<9in`1%B@)y^^% 뤴-Au;ǐFi+#l*AZtد\+&.rbX'rXG/[/Yd7@&|P<d2y`4L&MU-J&[뻤 0:bG!ڇU@@@@@@@@ Z'$>@@@@@@@NNNM       $!@$'       I թ@@@@@@@$h:D@@@@@@@: ::6"  1n*1Pp*:ѣq :*AOrV6;gמy#1" @ @jNN @ @ @ В鄖-W @ @ @ PCtB uw @ @ @ @L'Tm @ @ @ @j @ @ @$`:j˕ @ @ @0PCݝ @ @ @ @% -U[ @ @ @ @$@ @ @ @- Nhr%@ @ @ @5L'Pw' @ @ @hItBK~5djna N ۴ @@ X /]7"}oBrޗ27 ]nṎ@#iK׍/Mr._1TW0XB].wV}nݱ۴ @>Xֱ~$tC_.zl^pR}0հ&PQ@/Q 胣*`۩LG.@_lݼL'sp qۅI@ @`>8ϫ ^@ _B  @}pW  @ >Ktj2ֈRv-~&P"@"`V @@}0HIE"%@ `B tBR  @ @ @  @ @ @ @(TJ @ @ @ @ 鄨7 @ @ @"`:!JI @ @ @ NZ9q @ @ @ @(TJ @ @ @ @ 鄨7 @ @ @"ԗ-IENDB`actor-framework-0.16.3/doc/tex/000077500000000000000000000000001341123343400162475ustar00rootroot00000000000000actor-framework-0.16.3/doc/tex/Actors.tex000066400000000000000000000555401341123343400202350ustar00rootroot00000000000000\section{Actors} \label{actor} Actors in CAF are a lightweight abstraction for units of computations. They are active objects in the sense that they own their state and do not allow others to access it. The only way to modify the state of an actor is sending messages to it. CAF provides several actor implementations, each covering a particular use case. The available implementations differ in three characteristics: (1) dynamically or statically typed, (2) class-based or function-based, and (3) using asynchronous event handlers or blocking receives. These three characteristics can be combined freely, with one exception: statically typed actors are always event-based. For example, an actor can have dynamically typed messaging, implement a class, and use blocking receives. The common base class for all user-defined actors is called \lstinline^local_actor^. Dynamically typed actors are more familiar to developers coming from Erlang or Akka. They (usually) enable faster prototyping but require extensive unit testing. Statically typed actors require more source code but enable the compiler to verify communication between actors. Since CAF supports both, developers can freely mix both kinds of actors to get the best of both worlds. A good rule of thumb is to make use of static type checking for actors that are visible across multiple translation units. Actors that utilize the blocking receive API always require an exclusive thread of execution. Event-based actors, on the other hand, are usually scheduled cooperatively and are very lightweight with a memory footprint of only few hundred bytes. Developers can exclude---detach---event-based actors that potentially starve others from the cooperative scheduling while spawning it. A detached actor lives in its own thread of execution. \subsection{Environment / Actor Systems} \label{actor-system} All actors live in an \lstinline^actor_system^ representing an actor environment including scheduler~\see{scheduler}, registry~\see{registry}, and optional components such as a middleman~\see{middleman}. A single process can have multiple \lstinline^actor_system^ instances, but this is usually not recommended (a use case for multiple systems is to strictly separate two or more sets of actors by running them in different schedulers). For configuration and fine-tuning options of actor systems see \sref{system-config}. A distributed CAF application consists of two or more connected actor systems. We also refer to interconnected \lstinline^actor_system^ instances as a \emph{distributed actor system}. \clearpage \subsection{Common Actor Base Types} The following pseudo-UML depicts the class diagram for actors in CAF. Irrelevant member functions and classes as well as mixins are omitted for brevity. Selected individual classes are presented in more detail in the following sections. \singlefig{actor_types}% {Actor Types in CAF}% {actor-types} \clearpage \subsubsection{Class \lstinline^local_actor^} The class \lstinline^local_actor^ is the root type for all user-defined actors in CAF. It defines all common operations. However, users of the library usually do not inherit from this class directly. Proper base classes for user-defined actors are \lstinline^event_based_actor^ or \lstinline^blocking_actor^. The following table also includes member function inherited from \lstinline^monitorable_actor^ and \lstinline^abstract_actor^. \begin{center} \begin{tabular}{ll} \textbf{Types} & ~ \\ \hline \lstinline^mailbox_type^ & A concurrent, many-writers-single-reader queue type. \\ \hline ~ & ~ \\ \textbf{Constructors} & ~ \\ \hline \lstinline^(actor_config&)^ & Constructs the actor using a config. \\ \hline ~ & ~ \\ \textbf{Observers} & ~ \\ \hline \lstinline^actor_addr address()^ & Returns the address of this actor. \\ \hline \lstinline^actor_system& system()^ & Returns \lstinline^context()->system()^. \\ \hline \lstinline^actor_system& home_system()^ & Returns the system that spawned this actor. \\ \hline \lstinline^execution_unit* context()^ & Returns underlying thread or current scheduler worker. \\ \hline ~ & ~ \\ \textbf{Customization Points} & ~ \\ \hline \lstinline^on_exit()^ & Can be overridden to perform cleanup code. \\ \hline \lstinline^const char* name()^ & Returns a debug name for this actor type. \\ \hline ~ & ~ \\ \textbf{Actor Management} & ~ \\ \hline \lstinline^link_to(other)^ & Link to an actor \see{link}. \\ \hline \lstinline^unlink_from(other)^ & Remove link to an actor \see{link}. \\ \hline \lstinline^monitor(other)^ & Unidirectionally monitors an actor \see{monitor}. \\ \hline \lstinline^demonitor(other)^ & Removes a monitor from \lstinline^whom^. \\ \hline \lstinline^spawn(F fun, xs...)^ & Spawns a new actor from \lstinline^fun^. \\ \hline \lstinline^spawn(xs...)^ & Spawns a new actor of type \lstinline^T^. \\ \hline ~ & ~ \\ \textbf{Message Processing} & ~ \\ \hline \lstinline^T make_response_promise()^ & Allows an actor to delay its response message. \\ \hline \lstinline^T response(xs...)^ & Convenience function for creating fulfilled promises. \\ \hline \end{tabular} \end{center} \clearpage \subsubsection{Class \lstinline^scheduled_actor^} All scheduled actors inherit from \lstinline^scheduled_actor^. This includes statically and dynamically typed event-based actors as well as brokers \see{broker}. \begin{center} \begin{tabular}{ll} \textbf{Types} & ~ \\ \hline \lstinline^pointer^ & \lstinline^scheduled_actor*^ \\ \hline \lstinline^exception_handler^ & \lstinline^function^ \\ \hline \lstinline^default_handler^ & \lstinline^function (pointer, message_view&)>^ \\ \hline \lstinline^error_handler^ & \lstinline^function^ \\ \hline \lstinline^down_handler^ & \lstinline^function^ \\ \hline \lstinline^exit_handler^ & \lstinline^function^ \\ \hline ~ & ~ \\ \textbf{Constructors} & ~ \\ \hline \lstinline^(actor_config&)^ & Constructs the actor using a config. \\ \hline ~ & ~ \\ \textbf{Termination} & ~ \\ \hline \lstinline^quit()^ & Stops this actor with normal exit reason. \\ \hline \lstinline^quit(error x)^ & Stops this actor with error \lstinline^x^. \\ \hline ~ & ~ \\ \textbf{Special-purpose Handlers} & ~ \\ \hline \lstinline^set_exception_handler(F f)^ & Installs \lstinline^f^ for converting exceptions to errors \see{error}. \\ \hline \lstinline^set_down_handler(F f)^ & Installs \lstinline^f^ to handle down messages \see{down-message}. \\ \hline \lstinline^set_exit_handler(F f)^ & Installs \lstinline^f^ to handle exit messages \see{exit-message}. \\ \hline \lstinline^set_error_handler(F f)^ & Installs \lstinline^f^ to handle error messages (see \sref{error-message} and \sref{error}). \\ \hline \lstinline^set_default_handler(F f)^ & Installs \lstinline^f^ as fallback message handler \see{default-handler}. \\ \hline \end{tabular} \end{center} \clearpage \subsubsection{Class \lstinline^blocking_actor^} A blocking actor always lives in its own thread of execution. They are not as lightweight as event-based actors and thus do not scale up to large numbers. The primary use case for blocking actors is to use a \lstinline^scoped_actor^ for ad-hoc communication to selected actors. Unlike scheduled actors, CAF does \textbf{not} dispatch system messages to special-purpose handlers. A blocking actors receives \emph{all} messages regularly through its mailbox. A blocking actor is considered \emph{done} only after it returned from \lstinline^act^ (or from the implementation in function-based actors). A \lstinline^scoped_actor^ sends its exit messages as part of its destruction. \begin{center} \begin{tabular}{ll} \textbf{Constructors} & ~ \\ \hline \lstinline^(actor_config&)^ & Constructs the actor using a config. \\ \hline ~ & ~ \\ \textbf{Customization Points} & ~ \\ \hline \lstinline^void act()^ & Implements the behavior of the actor. \\ \hline ~ & ~ \\ \textbf{Termination} & ~ \\ \hline \lstinline^const error& fail_state()^ & Returns the current exit reason. \\ \hline \lstinline^fail_state(error x)^ & Sets the current exit reason. \\ \hline ~ & ~ \\ \textbf{Actor Management} & ~ \\ \hline \lstinline^wait_for(Ts... xs)^ & Blocks until all actors \lstinline^xs...^ are done. \\ \hline \lstinline^await_all_other_actors_done()^ & Blocks until all other actors are done. \\ \hline ~ & ~ \\ \textbf{Message Handling} & ~ \\ \hline \lstinline^receive(Ts... xs)^ & Receives a message using the callbacks \lstinline^xs...^. \\ \hline \lstinline^receive_for(T& begin, T end)^ & See \sref{receive-loop}. \\ \hline \lstinline^receive_while(F stmt)^ & See \sref{receive-loop}. \\ \hline \lstinline^do_receive(Ts... xs)^ & See \sref{receive-loop}. \\ \hline \end{tabular} \end{center} \clearpage \subsection{Messaging Interfaces} \label{interface} Statically typed actors require abstract messaging interfaces to allow the compiler to type-check actor communication. Interfaces in CAF are defined using the variadic template \lstinline^typed_actor<...>^, which defines the proper actor handle at the same time. Each template parameter defines one \lstinline^input/output^ pair via \lstinline^replies_to::with^. For inputs that do not generate outputs, \lstinline^reacts_to^ can be used as shortcut for \lstinline^replies_to::with^. In the same way functions cannot be overloaded only by their return type, interfaces cannot accept one input twice (possibly mapping it to different outputs). The example below defines a messaging interface for a simple calculator. \cppexample[17-21]{message_passing/calculator} It is not required to create a type alias such as \lstinline^calculator_actor^, but it makes dealing with statically typed actors much easier. Also, a central alias definition eases refactoring later on. Interfaces have set semantics. This means the following two type aliases \lstinline^i1^ and \lstinline^i2^ are equal: \begin{lstlisting} using i1 = typed_actor::with, replies_to::with>; using i2 = typed_actor::with, replies_to::with>; \end{lstlisting} Further, actor handles of type \lstinline^A^ are assignable to handles of type \lstinline^B^ as long as \lstinline^B^ is a subset of \lstinline^A^. For convenience, the class \lstinline^typed_actor<...>^ defines the member types shown below to grant access to derived types. \begin{center} \begin{tabular}{ll} \textbf{Types} & ~ \\ \hline \lstinline^behavior_type^ & A statically typed set of message handlers. \\ \hline \lstinline^base^ & Base type for actors, i.e., \lstinline^typed_event_based_actor<...>^. \\ \hline \lstinline^pointer^ & A pointer of type \lstinline^base*^. \\ \hline \lstinline^stateful_base^ & See \sref{stateful-actor}. \\ \hline \lstinline^stateful_pointer^ & A pointer of type \lstinline^stateful_base*^. \\ \hline \lstinline^extend^ & Extend this typed actor with \lstinline^Ts...^. \\ \hline \lstinline^extend_with^ & Extend this typed actor with all cases from \lstinline^Other^. \\ \hline \end{tabular} \end{center} \clearpage \subsection{Spawning Actors} \label{spawn} Both statically and dynamically typed actors are spawned from an \lstinline^actor_system^ using the member function \lstinline^spawn^. The function either takes a function as first argument or a class as first template parameter. For example, the following functions and classes represent actors. \cppexample[24-29]{message_passing/calculator} Spawning an actor for each implementation is illustrated below. \cppexample[140-145]{message_passing/calculator} Additional arguments to \lstinline^spawn^ are passed to the constructor of a class or used as additional function arguments, respectively. In the example above, none of the three functions takes any argument other than the implicit but optional \lstinline^self^ pointer. \subsection{Function-based Actors} \label{function-based} When using a function or function object to implement an actor, the first argument \emph{can} be used to capture a pointer to the actor itself. The type of this pointer is usually \lstinline^event_based_actor*^ or \lstinline^blocking_actor*^. The proper pointer type for any \lstinline^typed_actor^ handle \lstinline^T^ can be obtained via \lstinline^T::pointer^ \see{interface}. Blocking actors simply implement their behavior in the function body. The actor is done once it returns from that function. Event-based actors can either return a \lstinline^behavior^ \see{message-handler} that is used to initialize the actor or explicitly set the initial behavior by calling \lstinline^self->become(...)^. Due to the asynchronous, event-based nature of this kind of actor, the function usually returns immediately after setting a behavior (message handler) for the \emph{next} incoming message. Hence, variables on the stack will be out of scope once a message arrives. Managing state in function-based actors can be done either via rebinding state with \lstinline^become^, using heap-located data referenced via \lstinline^std::shared_ptr^ or by using the ``stateful actor'' abstraction~\see{stateful-actor}. The following three functions implement the prototypes shown in~\sref{spawn} and illustrate one blocking actor and two event-based actors (statically and dynamically typed). \clearpage \cppexample[31-72]{message_passing/calculator} \clearpage \subsection{Class-based Actors} \label{class-based} Implementing an actor using a class requires the following: \begin{itemize} \item Provide a constructor taking a reference of type \lstinline^actor_config&^ as first argument, which is forwarded to the base class. The config is passed implicitly to the constructor when calling \lstinline^spawn^, which also forwards any number of additional arguments to the constructor. \item Override \lstinline^make_behavior^ for event-based actors and \lstinline^act^ for blocking actors. \end{itemize} Implementing actors with classes works for all kinds of actors and allows simple management of state via member variables. However, composing states via inheritance can get quite tedious. For dynamically typed actors, composing states is particularly hard, because the compiler cannot provide much help. For statically typed actors, CAF also provides an API for composable behaviors~\see{composable-behavior} that works well with inheritance. The following three examples implement the forward declarations shown in \sref{spawn}. \cppexample[74-108]{message_passing/calculator} \clearpage \subsection{Stateful Actors} \label{stateful-actor} The stateful actor API makes it easy to maintain state in function-based actors. It is also safer than putting state in member variables, because the state ceases to exist after an actor is done and is not delayed until the destructor runs. For example, if two actors hold a reference to each other via member variables, they produce a cycle and neither will get destroyed. Using stateful actors instead breaks the cycle, because references are destroyed when an actor calls \lstinline^self->quit()^ (or is killed externally). The following example illustrates how to implement stateful actors with static typing as well as with dynamic typing. \cppexample[18-44]{message_passing/cell} Stateful actors are spawned in the same way as any other function-based actor \see{function-based}. \cppexample[49-50]{message_passing/cell} \clearpage \subsection{Actors from Composable Behaviors \experimental} \label{composable-behavior} When building larger systems, it is often useful to implement the behavior of an actor in terms of other, existing behaviors. The composable behaviors in CAF allow developers to generate a behavior class from a messaging interface~\see{interface}. The base type for composable behaviors is \lstinline^composable_behavior^, where \lstinline^T^ is a \lstinline^typed_actor<...>^. CAF maps each \lstinline^replies_to::with^ in \lstinline^T^ to a pure virtual member function with signature: \begin{lstlisting} result operator()(param, param, param);. \end{lstlisting} Note that \lstinline^operator()^ will take integral types as well as atom constants simply by value. A \lstinline^result^ accepts either a value of type \lstinline^T^, a \lstinline^skip_t^ \see{default-handler}, an \lstinline^error^ \see{error}, a \lstinline^delegated^ \see{delegate}, or a \lstinline^response_promise^ \see{promise}. A \lstinline^result^ is constructed by returning \lstinline^unit^. A behavior that combines the behaviors \lstinline^X^, \lstinline^Y^, and \lstinline^Z^ must inherit from \lstinline^composed_behavior^ instead of inheriting from the three classes directly. The class \lstinline^composed_behavior^ ensures that the behaviors are concatenated correctly. In case one message handler is defined in multiple base types, the \emph{first} type in declaration order ``wins''. For example, if \lstinline^X^ and \lstinline^Y^ both implement the interface \lstinline^replies_to::with^, only the handler implemented in \lstinline^X^ is active. Any composable (or composed) behavior with no pure virtual member functions can be spawned directly through an actor system by calling \lstinline^system.spawn<...>()^, as shown below. \cppexample[20-52]{composition/calculator_behavior} \clearpage The second example illustrates how to use non-primitive values that are wrapped in a \lstinline^param^ when working with composable behaviors. The purpose of \lstinline^param^ is to provide a single interface for both constant and non-constant access. Constant access is modeled with the implicit conversion operator to a const reference, the member function \lstinline^get()^, and \lstinline^operator->^. When acquiring mutable access to the represented value, CAF copies the value before allowing mutable access to it if more than one reference to the value exists. This copy-on-write optimization avoids race conditions by design, while minimizing copy operations \see{copy-on-write}. A mutable reference is returned from the member functions \lstinline^get_mutable()^ and \lstinline^move()^. The latter is a convenience function for \lstinline^std::move(x.get_mutable())^. The following example illustrates how to use \lstinline^param^ when implementing a simple dictionary. \cppexample[22-44]{composition/dictionary_behavior} \subsection{Attaching Cleanup Code to Actors} \label{attach} Users can attach cleanup code to actors. This code is executed immediately if the actor has already exited. Otherwise, the actor will execute it as part of its termination. The following example attaches a function object to actors for printing a custom string on exit. \cppexample[46-50]{broker/simple_broker} It is possible to attach code to remote actors. However, the cleanup code will run on the local machine. \subsection{Blocking Actors} \label{blocking-actor} Blocking actors always run in a separate thread and are not scheduled by CAF. Unlike event-based actors, blocking actors have explicit, blocking \emph{receive} functions. Further, blocking actors do not handle system messages automatically via special-purpose callbacks \see{special-handler}. This gives users full control over the behavior of blocking actors. However, blocking actors still should follow conventions of the actor system. For example, actors should unconditionally terminate after receiving an \lstinline^exit_msg^ with reason \lstinline^exit_reason::kill^. \subsubsection{Receiving Messages} The function \lstinline^receive^ sequentially iterates over all elements in the mailbox beginning with the first. It takes a message handler that is applied to the elements in the mailbox until an element was matched by the handler. An actor calling \lstinline^receive^ is blocked until it successfully dequeued a message from its mailbox or an optional timeout occurs. Messages that are not matched by the behavior are automatically skipped and remain in the mailbox. \begin{lstlisting} self->receive ( [](int x) { /* ... */ } ); \end{lstlisting} \subsubsection{Catch-all Receive Statements} \label{catch-all} Blocking actors can use inline catch-all callbacks instead of setting a default handler \see{default-handler}. A catch-all case must be the last callback before the optional timeout, as shown in the example below. \begin{lstlisting} self->receive( [&](float x) { // ... }, [&](const down_msg& x) { // ... }, [&](const exit_msg& x) { // ... }, others >> [](message_view& x) -> result { // report unexpected message back to client return sec::unexpected_message; } ); \end{lstlisting} \clearpage \subsubsection{Receive Loops} \label{receive-loop} Message handler passed to \lstinline^receive^ are temporary object at runtime. Hence, calling \lstinline^receive^ inside a loop creates an unnecessary amount of short-lived objects. CAF provides predefined receive loops to allow for more efficient code. \begin{lstlisting} // BAD std::vector results; for (size_t i = 0; i < 10; ++i) receive ( [&](int value) { results.push_back(value); } ); // GOOD std::vector results; size_t i = 0; receive_for(i, 10) ( [&](int value) { results.push_back(value); } ); \end{lstlisting} \begin{lstlisting} // BAD size_t received = 0; while (received < 10) { receive ( [&](int) { ++received; } ); } ; // GOOD size_t received = 0; receive_while([&] { return received < 10; }) ( [&](int) { ++received; } ); \end{lstlisting} \clearpage \begin{lstlisting} // BAD size_t received = 0; do { receive ( [&](int) { ++received; } ); } while (received < 10); // GOOD size_t received = 0; do_receive ( [&](int) { ++received; } ).until([&] { return received >= 10; }); \end{lstlisting} The examples above illustrate the correct usage of the three loops \lstinline^receive_for^, \lstinline^receive_while^ and \lstinline^do_receive(...).until^. It is possible to nest receives and receive loops. \begin{lstlisting} bool running = true; self->receive_while([&] { return running; }) ( [&](int value1) { self->receive ( [&](float value2) { aout(self) << value1 << " => " << value2 << endl; } ); }, // ... ); \end{lstlisting} \subsubsection{Scoped Actors} \label{scoped-actors} The class \lstinline^scoped_actor^ offers a simple way of communicating with CAF actors from non-actor contexts. It overloads \lstinline^operator->^ to return a \lstinline^blocking_actor*^. Hence, it behaves like the implicit \lstinline^self^ pointer in functor-based actors, only that it ceases to exist at scope end. \begin{lstlisting} void test(actor_system& system) { scoped_actor self{system}; // spawn some actor auto aut = self->spawn(my_actor_impl); self->send(aut, "hi there"); // self will be destroyed automatically here; any // actor monitoring it will receive down messages etc. } \end{lstlisting} actor-framework-0.16.3/doc/tex/Brokers.tex000066400000000000000000000220151341123343400204000ustar00rootroot00000000000000\section{Network I/O with Brokers} \label{broker} When communicating to other services in the network, sometimes low-level socket I/O is inevitable. For this reason, CAF provides \emph{brokers}. A broker is an event-based actor running in the middleman that multiplexes socket I/O. It can maintain any number of acceptors and connections. Since the broker runs in the middleman, implementations should be careful to consume as little time as possible in message handlers. Brokers should outsource any considerable amount of work by spawning new actors or maintaining worker actors. \textit{Note that all UDP-related functionality is still \experimental.} \subsection{Spawning Brokers} Brokers are implemented as functions and are spawned by calling on of the three following member functions of the middleman. \begin{lstlisting} template , class... Ts> typename infer_handle_from_fun::type spawn_broker(F fun, Ts&&... xs); template , class... Ts> expected::type> spawn_client(F fun, const std::string& host, uint16_t port, Ts&&... xs); template , class... Ts> expected::type> spawn_server(F fun, uint16_t port, Ts&&... xs); \end{lstlisting} The function \lstinline^spawn_broker^ simply spawns a broker. The convenience function \lstinline^spawn_client^ tries to connect to given host and port over TCP and returns a broker managing this connection on success. Finally, \lstinline^spawn_server^ opens a local TCP port and spawns a broker managing it on success. There are no convenience functions spawn a UDP-based client or server. \subsection{Class \texttt{broker}} \label{broker-class} \begin{lstlisting} void configure_read(connection_handle hdl, receive_policy::config config); \end{lstlisting} Modifies the receive policy for the connection identified by \lstinline^hdl^. This will cause the middleman to enqueue the next \lstinline^new_data_msg^ according to the given \lstinline^config^ created by \lstinline^receive_policy::exactly(x)^, \lstinline^receive_policy::at_most(x)^, or \lstinline^receive_policy::at_least(x)^ (with \lstinline^x^ denoting the number of bytes). \begin{lstlisting} void write(connection_handle hdl, size_t num_bytes, const void* buf) void write(datagram_handle hdl, size_t num_bytes, const void* buf) \end{lstlisting} Writes data to the output buffer. \begin{lstlisting} void enqueue_datagram(datagram_handle hdl, std::vector buf); \end{lstlisting} Enqueues a buffer to be sent as a datagram. Use of this function is encouraged over write as it allows reuse of the buffer which can be returned to the broker in a \lstinline^datagram_sent_msg^. \begin{lstlisting} void flush(connection_handle hdl); void flush(datagram_handle hdl); \end{lstlisting} Sends the data from the output buffer. \begin{lstlisting} template actor fork(F fun, connection_handle hdl, Ts&&... xs); \end{lstlisting} Spawns a new broker that takes ownership of a given connection. \begin{lstlisting} size_t num_connections(); \end{lstlisting} Returns the number of open connections. \begin{lstlisting} void close(connection_handle hdl); void close(accept_handle hdl); void close(datagram_handle hdl); \end{lstlisting} Closes the endpoint related to the handle. \begin{lstlisting} expected> add_tcp_doorman(uint16_t port = 0, const char* in = nullptr, bool reuse_addr = false); \end{lstlisting} Creates new doorman that accepts incoming connections on a given port and returns the handle to the doorman and the port in use or an error. \begin{lstlisting} expected add_tcp_scribe(const std::string& host, uint16_t port); \end{lstlisting} Creates a new scribe to connect to host:port and returns handle to it or an error. \begin{lstlisting} expected> add_udp_datagram_servant(uint16_t port = 0, const char* in = nullptr, bool reuse_addr = false); \end{lstlisting} Creates a datagram servant to handle incoming datagrams on a given port. Returns the handle to the servant and the port in use or an error. \begin{lstlisting} expected add_udp_datagram_servant(const std::string& host, uint16_t port); \end{lstlisting} Creates a datagram servant to send datagrams to host:port and returns a handle to it or an error. \subsection{Broker-related Message Types} Brokers receive system messages directly from the middleman for connection and acceptor events. \textbf{Note:} brokers are \emph{required} to handle these messages immediately regardless of their current state. Not handling the system messages from the broker results in loss of data, because system messages are \emph{not} delivered through the mailbox and thus cannot be skipped. \begin{lstlisting} struct new_connection_msg { accept_handle source; connection_handle handle; }; \end{lstlisting} Indicates that \lstinline^source^ accepted a new TCP connection identified by \lstinline^handle^. \begin{lstlisting} struct new_data_msg { connection_handle handle; std::vector buf; }; \end{lstlisting} Contains raw bytes received from \lstinline^handle^. The amount of data received per event is controlled with \lstinline^configure_read^ (see \ref{broker-class}). It is worth mentioning that the buffer is re-used whenever possible. \begin{lstlisting} struct data_transferred_msg { connection_handle handle; uint64_t written; uint64_t remaining; }; \end{lstlisting} This message informs the broker that the \lstinline^handle^ sent \lstinline^written^ bytes with \lstinline^remaining^ bytes in the buffer. Note, that these messages are not sent per default but must be explicitly enabled via the member function \lstinline^ack_writes^. \begin{lstlisting} struct connection_closed_msg { connection_handle handle; }; struct acceptor_closed_msg { accept_handle handle; }; \end{lstlisting} A \lstinline^connection_closed_msg^ or \lstinline^acceptor_closed_msg^ informs the broker that one of its handles is no longer valid. \begin{lstlisting} struct connection_passivated_msg { connection_handle handle; }; struct acceptor_passivated_msg { accept_handle handle; }; \end{lstlisting} A \lstinline^connection_passivated_msg^ or \lstinline^acceptor_passivated_msg^ informs the broker that one of its handles entered passive mode and no longer accepts new data or connections \see{trigger}. The following messages are related to UDP communication (see~\sref{transport-protocols}. Since UDP is not connection oriented, there is no equivalent to the \lstinline^new_connection_msg^ of TCP. \begin{lstlisting} struct new_datagram_msg { datagram_handle handle; network::receive_buffer buf; }; \end{lstlisting} Contains the raw bytes from \lstinline^handle^. The buffer always has a maximum size of 65k to receive all regular UDP messages. The amount of bytes can be queried via the \lstinline^.size()^ member function. Similar to TCP, the buffer is reused when possible---please do not resize it. \begin{lstlisting} struct datagram_sent_msg { datagram_handle handle; uint64_t written; std::vector buf; }; \end{lstlisting} This message informs the broker that the \lstinline^handle^ sent a datagram of \lstinline^written^ bytes. It includes the buffer that held the sent message to allow its reuse. Note, that these messages are not sent per default but must be explicitly enabled via the member function \lstinline^ack_writes^. \begin{lstlisting} struct datagram_servant_closed_msg { std::vector handles; }; \end{lstlisting} A \lstinline^datagram_servant_closed_msg^ informs the broker that one of its handles is no longer valid. \begin{lstlisting} struct datagram_servant_passivated_msg { datagram_handle handle; }; \end{lstlisting} A \lstinline^datagram_servant_closed_msg^ informs the broker that one of its handles entered passive mode and no longer accepts new data \see{trigger}. \subsection{Manually Triggering Events \experimental} \label{trigger} Brokers receive new events as \lstinline^new_connection_msg^ and \lstinline^new_data_msg^ as soon and as often as they occur, per default. This means a fast peer can overwhelm a broker by sending it data faster than the broker can process it. In particular if the broker outsources work items to other actors, because work items can accumulate in the mailboxes of the workers. Calling \lstinline^self->trigger(x,y)^, where \lstinline^x^ is a connection or acceptor handle and \lstinline^y^ is a positive integer, allows brokers to halt activities after \lstinline^y^ additional events. Once a connection or acceptor stops accepting new data or connections, the broker receives a \lstinline^connection_passivated_msg^ or \lstinline^acceptor_passivated_msg^. Brokers can stop activities unconditionally with \lstinline^self->halt(x)^ and resume activities unconditionally with \lstinline^self->trigger(x)^. actor-framework-0.16.3/doc/tex/CommonPitfalls.tex000066400000000000000000000047721341123343400217320ustar00rootroot00000000000000\section{Common Pitfalls} \label{pitfalls} This Section highlights common mistakes or C++ subtleties that can show up when programming in CAF. \subsection{Defining Message Handlers} \begin{itemize} \item C++ evaluates comma-separated expressions from left-to-right, using only the last element as return type of the whole expression. This means that message handlers and behaviors must \emph{not} be initialized like this: \begin{lstlisting} message_handler wrong = ( [](int i) { /*...*/ }, [](float f) { /*...*/ } ); \end{lstlisting} The correct way to initialize message handlers and behaviors is to either use the constructor or the member function \lstinline^assign^: \begin{lstlisting} message_handler ok1{ [](int i) { /*...*/ }, [](float f) { /*...*/ } }; message_handler ok2; // some place later ok2.assign( [](int i) { /*...*/ }, [](float f) { /*...*/ } ); \end{lstlisting} \end{itemize} \subsection{Event-Based API} \begin{itemize} \item The member function \lstinline^become^ does not block, i.e., always returns immediately. Thus, lambda expressions should \textit{always} capture by value. Otherwise, all references on the stack will cause undefined behavior if the lambda expression is executed. \end{itemize} \subsection{Requests} \begin{itemize} \item A handle returned by \lstinline^request^ represents \emph{exactly one} response message. It is not possible to receive more than one response message. \item The handle returned by \lstinline^request^ is bound to the calling actor. It is not possible to transfer a handle to a response to another actor. \end{itemize} \clearpage \subsection{Sharing} \begin{itemize} \item It is strongly recommended to \textbf{not} share states between actors. In particular, no actor shall ever access member variables or member functions of another actor. Accessing shared memory segments concurrently can cause undefined behavior that is incredibly hard to find and debug. However, sharing \textit{data} between actors is fine, as long as the data is \textit{immutable} and its lifetime is guaranteed to outlive all actors. The simplest way to meet the lifetime guarantee is by storing the data in smart pointers such as \lstinline^std::shared_ptr^. Nevertheless, the recommended way of sharing informations is message passing. Sending the same message to multiple actors does not result in copying the data several times. \end{itemize} actor-framework-0.16.3/doc/tex/ConfiguringActorApplications.tex000066400000000000000000000303601341123343400246050ustar00rootroot00000000000000\section{Configuring Actor Applications} \label{system-config} CAF configures applications at startup using an \lstinline^actor_system_config^ or a user-defined subclass of that type. The config objects allow users to add custom types, to load modules, and to fine-tune the behavior of loaded modules with command line options or configuration files~\see{system-config-options}. The following code example is a minimal CAF application with a middleman~\see{middleman} but without any custom configuration options. \begin{lstlisting} void caf_main(actor_system& system) { // ... } CAF_MAIN(io::middleman) \end{lstlisting} The compiler expands this example code to the following. \begin{lstlisting} void caf_main(actor_system& system) { // ... } int main(int argc, char** argv) { return exec_main(caf_main, argc, argv); } \end{lstlisting} The function \lstinline^exec_main^ creates a config object, loads all modules requested in \lstinline^CAF_MAIN^ and then calls \lstinline^caf_main^. A minimal implementation for \lstinline^main^ performing all these steps manually is shown in the next example for the sake of completeness. \begin{lstlisting} int main(int argc, char** argv) { actor_system_config cfg; // read CLI options cfg.parse(argc, argv); // return immediately if a help text was printed if (cfg.cli_helptext_printed) return 0; // load modules cfg.load(); // create actor system and call caf_main actor_system system{cfg}; caf_main(system); } \end{lstlisting} However, setting up config objects by hand is usually not necessary. CAF automatically selects user-defined subclasses of \lstinline^actor_system_config^ if \lstinline^caf_main^ takes a second parameter by reference, as shown in the minimal example below. \begin{lstlisting} class my_config : public actor_system_config { public: my_config() { // ... } }; void caf_main(actor_system& system, const my_config& cfg) { // ... } CAF_MAIN() \end{lstlisting} Users can perform additional initialization, add custom program options, etc. simply by implementing a default constructor. \subsection{Loading Modules} \label{system-config-module} The simplest way to load modules is to use the macro \lstinline^CAF_MAIN^ and to pass a list of all requested modules, as shown below. \begin{lstlisting} void caf_main(actor_system& system) { // ... } CAF_MAIN(mod1, mod2, ...) \end{lstlisting} Alternatively, users can load modules in user-defined config classes. \begin{lstlisting} class my_config : public actor_system_config { public: my_config() { load(); load(); // ... } }; \end{lstlisting} The third option is to simply call \lstinline^x.load()^ on a config object \emph{before} initializing an actor system with it. \subsection{Command Line Options and INI Configuration Files} \label{system-config-options} CAF organizes program options in categories and parses CLI arguments as well as INI files. CLI arguments override values in the INI file which override hard-coded defaults. Users can add any number of custom program options by implementing a subtype of \lstinline^actor_system_config^. The example below adds three options to the ``global'' category. \cppexample[222-234]{remoting/distributed_calculator} We create a new ``global'' category in \lstinline^custom_options_}^. Each following call to \lstinline^add^ then appends individual options to the category. The first argument to \lstinline^add^ is the associated variable. The second argument is the name for the parameter, optionally suffixed with a comma-separated single-character short name. The short name is only considered for CLI parsing and allows users to abbreviate commonly used option names. The third and final argument to \lstinline^add^ is a help text. The custom \lstinline^config^ class allows end users to set the port for the application to 42 with either \lstinline^--port=42^ (long name) or \lstinline^-p 42^ (short name). The long option name is prefixed by the category when using a different category than ``global''. For example, adding the port option to the category ``foo'' means end users have to type \lstinline^--foo.port=42^ when using the long name. Short names are unaffected by the category, but have to be unique. Boolean options do not require arguments. The member variable \lstinline^server_mode^ is set to \lstinline^true^ if the command line contains either \lstinline^--server-mode^ or \lstinline^-s^. The example uses member variables for capturing user-provided settings for simplicity. However, this is not required. For example, \lstinline^add(...)^ allows omitting the first argument entirely. All values of the configuration are accessible with \lstinline^get_or^. Note that all global options can omit the \lstinline^"global."^ prefix. CAF adds the program options ``help'' (with short names \lstinline^-h^ and \lstinline^-?^) as well as ``long-help'' to the ``global'' category. The default name for the INI file is \lstinline^caf-application.ini^. Users can change the file name and path by passing \lstinline^--config-file=^ on the command line. INI files are organized in categories. No value is allowed outside of a category (no implicit ``global'' category). The parses uses the following syntax: \begin{tabular}{p{0.3\textwidth}p{0.65\textwidth}} \lstinline^key=true^ & is a boolean \\ \lstinline^key=1^ & is an integer \\ \lstinline^key=1.0^ & is an floating point number \\ \lstinline^key=1ms^ & is an timespan \\ \lstinline^key='foo'^ & is an atom \\ \lstinline^key="foo"^ & is a string \\ \lstinline^key=[0, 1, ...]^ & is as a list \\ \lstinline^key={a=1, b=2, ...}^ & is a dictionary (map) \\ \end{tabular} The following example INI file lists all standard options in CAF and their default value. Note that some options such as \lstinline^scheduler.max-threads^ are usually detected at runtime and thus have no hard-coded default. \clearpage \iniexample{caf-application} \clearpage \subsection{Adding Custom Message Types} \label{add-custom-message-type} CAF requires serialization support for all of its message types \see{type-inspection}. However, CAF also needs a mapping of unique type names to user-defined types at runtime. This is required to deserialize arbitrary messages from the network. As an introductory example, we (again) use the following POD type \lstinline^foo^. \cppexample[24-27]{custom_type/custom_types_1} To make \lstinline^foo^ serializable, we make it inspectable \see{type-inspection}: \cppexample[30-34]{custom_type/custom_types_1} Finally, we give \lstinline^foo^ a platform-neutral name and add it to the list of serializable types by using a custom config class. \cppexample[75-78,81-84]{custom_type/custom_types_1} \subsection{Adding Custom Error Types} Adding a custom error type to the system is a convenience feature to allow improve the string representation. Error types can be added by implementing a render function and passing it to \lstinline^add_error_category^, as shown in~\sref{custom-error}. \clearpage \subsection{Adding Custom Actor Types \experimental} \label{add-custom-actor-type} Adding actor types to the configuration allows users to spawn actors by their name. In particular, this enables spawning of actors on a different node \see{remote-spawn}. For our example configuration, we consider the following simple \lstinline^calculator^ actor. \cppexample[33-39]{remoting/remote_spawn} Adding the calculator actor type to our config is achieved by calling \lstinline^add_actor_type^. Note that adding an actor type in this way implicitly calls \lstinline^add_message_type^ for typed actors \see{add-custom-message-type}. This makes our \lstinline^calculator^ actor type serializable and also enables remote nodes to spawn calculators anywhere in the distributed actor system (assuming all nodes use the same config). \cppexample[99-101,106-106,110-101]{remoting/remote_spawn} Our final example illustrates how to spawn a \lstinline^calculator^ locally by using its type name. Because the dynamic type name lookup can fail and the construction arguments passed as message can mismatch, this version of \lstinline^spawn^ returns \lstinline^expected^. \begin{lstlisting} auto x = system.spawn("calculator", make_message()); if (! x) { std::cerr << "*** unable to spawn calculator: " << system.render(x.error()) << std::endl; return; } calculator c = std::move(*x); \end{lstlisting} Adding dynamically typed actors to the config is achieved in the same way. When spawning a dynamically typed actor in this way, the template parameter is simply \lstinline^actor^. For example, spawning an actor "foo" which requires one string is created with: \begin{lstlisting} auto worker = system.spawn("foo", make_message("bar")); \end{lstlisting} Because constructor (or function) arguments for spawning the actor are stored in a \lstinline^message^, only actors with appropriate input types are allowed. For example, pointer types are illegal. Hence users need to replace C-strings with \lstinline^std::string^. \clearpage \subsection{Log Output} \label{log-output} Logging is disabled in CAF per default. It can be enabled by setting the \lstinline^--with-log-level=^ option of the \lstinline^configure^ script to one of ``error'', ``warning'', ``info'', ``debug'', or ``trace'' (from least output to most). Alternatively, setting the CMake variable \lstinline^CAF_LOG_LEVEL^ to 0, 1, 2, 3, or 4 (from least output to most) has the same effect. All logger-related configuration options listed here and in \sref{system-config-options} are silently ignored if logging is disabled. \subsubsection{File Name} \label{log-output-file-name} The output file is generated from the template configured by \lstinline^logger-file-name^. This template supports the following variables. \begin{tabular}{|p{0.2\textwidth}|p{0.75\textwidth}|} \hline \textbf{Variable} & \textbf{Output} \\ \hline \texttt{[PID]} & The OS-specific process ID. \\ \hline \texttt{[TIMESTAMP]} & The UNIX timestamp on startup. \\ \hline \texttt{[NODE]} & The node ID of the CAF system. \\ \hline \end{tabular} \subsubsection{Console} \label{log-output-console} Console output is disabled per default. Setting \lstinline^logger-console^ to either \lstinline^"uncolored"^ or \lstinline^"colored"^ prints log events to \lstinline^std::clog^. Using the \lstinline^"colored"^ option will print the log events in different colors depending on the severity level. \subsubsection{Format Strings} \label{log-output-format-strings} CAF uses log4j-like format strings for configuring printing of individual events via \lstinline^logger-file-format^ and \lstinline^logger-console-format^. Note that format modifiers are not supported at the moment. The recognized field identifiers are: \begin{tabular}{|p{0.1\textwidth}|p{0.85\textwidth}|} \hline \textbf{Character} & \textbf{Output} \\ \hline \texttt{c} & The category/component. This name is defined by the macro \lstinline^CAF_LOG_COMPONENT^. Set this macro before including any CAF header. \\ \hline \texttt{C} & The full qualifier of the current function. For example, the qualifier of \lstinline^void ns::foo::bar()^ is printed as \lstinline^ns.foo^. \\ \hline \texttt{d} & The date in ISO 8601 format, i.e., \lstinline^"YYYY-MM-DD hh:mm:ss"^. \\ \hline \texttt{F} & The file name. \\ \hline \texttt{L} & The line number. \\ \hline \texttt{m} & The user-defined log message. \\ \hline \texttt{M} & The name of the current function. For example, the name of \lstinline^void ns::foo::bar()^ is printed as \lstinline^bar^. \\ \hline \texttt{n} & A newline. \\ \hline \texttt{p} & The priority (severity level). \\ \hline \texttt{r} & Elapsed time since starting the application in milliseconds. \\ \hline \texttt{t} & ID of the current thread. \\ \hline \texttt{a} & ID of the current actor (or ``actor0'' when not logging inside an actor). \\ \hline \texttt{\%} & A single percent sign. \\ \hline \end{tabular} \subsubsection{Filtering} \label{log-output-filtering} The two configuration options \lstinline^logger-component-filter^ and \lstinline^logger-verbosity^ reduce the amount of generated log events. The former is a list of excluded component names and the latter can increase the reported severity level (but not decrease it beyond the level defined at compile time). actor-framework-0.16.3/doc/tex/Error.tex000066400000000000000000000066401341123343400200700ustar00rootroot00000000000000\section{Errors} \label{error} Errors in CAF have a code and a category, similar to \lstinline^std::error_code^ and \lstinline^std::error_condition^. Unlike its counterparts from the C++ standard library, \lstinline^error^ is plattform-neutral and serializable. Instead of using category singletons, CAF stores categories as atoms~\see{atom}. Errors can also include a message to provide additional context information. \subsection{Class Interface} \begin{center} \begin{tabular}{ll} \textbf{Constructors} & ~ \\ \hline \lstinline^(Enum x)^ & Construct error by calling \lstinline^make_error(x)^ \\ \hline \lstinline^(uint8_t x, atom_value y)^ & Construct error with code \lstinline^x^ and category \lstinline^y^ \\ \hline \lstinline^(uint8_t x, atom_value y, message z)^ & Construct error with code \lstinline^x^, category \lstinline^y^, and context \lstinline^z^ \\ \hline ~ & ~ \\ \textbf{Observers} & ~ \\ \hline \lstinline^uint8_t code()^ & Returns the error code \\ \hline \lstinline^atom_value category()^ & Returns the error category \\ \hline \lstinline^message context()^ & Returns additional context information \\ \hline \lstinline^explicit operator bool()^ & Returns \lstinline^code() != 0^ \\ \hline \end{tabular} \end{center} \subsection{Add Custom Error Categories} \label{custom-error} Adding custom error categories requires three steps: (1)~declare an enum class of type \lstinline^uint8_t^ with the first value starting at 1, (2)~implement a free function \lstinline^make_error^ that converts the enum to an \lstinline^error^ object, (3)~add the custom category to the actor system with a render function. The last step is optional to allow users to retrieve a better string representation from \lstinline^system.render(x)^ than \lstinline^to_string(x)^ can offer. Note that any error code with value 0 is interpreted as \emph{not-an-error}. The following example adds a custom error category by performing the first two steps. \cppexample[19-34]{message_passing/divider} The implementation of \lstinline^to_string(error)^ is unable to call string conversions for custom error categories. Hence, \lstinline^to_string(make_error(math_error::division_by_zero))^ returns \lstinline^"error(1, math)"^. The following code adds a rendering function to the actor system to provide a more satisfactory string conversion. \cppexample[50-58]{message_passing/divider} With the custom rendering function, \lstinline^system.render(make_error(math_error::division_by_zero))^ returns \lstinline^"math_error(division_by_zero)"^. \clearpage \subsection{System Error Codes} \label{sec} System Error Codes (SECs) use the error category \lstinline^"system"^. They represent errors in the actor system or one of its modules and are defined as follows. \sourcefile[32-117]{libcaf_core/caf/sec.hpp} %\clearpage \subsection{Default Exit Reasons} \label{exit-reason} CAF uses the error category \lstinline^"exit"^ for default exit reasons. These errors are usually fail states set by the actor system itself. The two exceptions are \lstinline^exit_reason::user_shutdown^ and \lstinline^exit_reason::kill^. The former is used in CAF to signalize orderly, user-requested shutdown and can be used by programmers in the same way. The latter terminates an actor unconditionally when used in \lstinline^send_exit^, even if the default handler for exit messages~\see{exit-message} is overridden. \sourcefile[29-49]{libcaf_core/caf/exit_reason.hpp} actor-framework-0.16.3/doc/tex/FAQ.tex000066400000000000000000000032231341123343400174000ustar00rootroot00000000000000\section{Frequently Asked Questions} \label{faq} This Section is a compilation of the most common questions via GitHub, chat, and mailing list. \subsection{Can I Encrypt CAF Communication?} Yes, by using the OpenSSL module~\see{free-remoting-functions}. \subsection{Can I Create Messages Dynamically?} Yes. Usually, messages are created implicitly when sending messages but can also be created explicitly using \lstinline^make_message^. In both cases, types and number of elements are known at compile time. To allow for fully dynamic message generation, CAF also offers \lstinline^message_builder^: \begin{lstlisting} message_builder mb; // prefix message with some atom mb.append(strings_atom::value); // fill message with some strings std::vector strings{/*...*/}; for (auto& str : strings) mb.append(str); // create the message message msg = mb.to_message(); \end{lstlisting} \subsection{What Debugging Tools Exist?} The \lstinline^scripts/^ and \lstinline^tools/^ directories contain some useful tools to aid in development and debugging. \lstinline^scripts/atom.py^ converts integer atom values back into strings. \lstinline^scripts/demystify.py^ replaces cryptic \lstinline^typed_mpi<...>^ templates with \lstinline^replies_to<...>::with<...>^ and \lstinline^atom_constant<...>^ with a human-readable representation of the actual atom. \lstinline^scripts/caf-prof^ is an R script that generates plots from CAF profiler output. \lstinline^caf-vec^ is a (highly) experimental tool that annotates CAF logs with vector timestamps. It gives you happens-before relations and a nice visualization via \href{https://bestchai.bitbucket.io/shiviz/}{ShiViz}. actor-framework-0.16.3/doc/tex/FirstSteps.tex000066400000000000000000000025311341123343400211000ustar00rootroot00000000000000\section{Overview} Compiling CAF requires CMake and a C++11-compatible compiler. To get and compile the sources on UNIX-like systems, type the following in a terminal: \begin{verbatim} git clone https://github.com/actor-framework/actor-framework cd actor-framework ./configure make make install [as root, optional] \end{verbatim} We recommended to run the unit tests as well: \begin{verbatim} make test \end{verbatim} If the output indicates an error, please submit a bug report that includes (a) your compiler version, (b) your OS, and (c) the content of the file \texttt{build/Testing/Temporary/LastTest.log}. \subsection{Features} \begin{itemize} \item Lightweight, fast and efficient actor implementations \item Network transparent messaging \item Error handling based on Erlang's failure model \item Pattern matching for messages as internal DSL to ease development \item Thread-mapped actors for soft migration of existing applications \item Publish/subscribe group communication \end{itemize} \subsection{Minimal Compiler Versions} \begin{itemize} \item GCC 4.8 \item Clang 3.4 \item Visual Studio 2015, Update 3 \end{itemize} \subsection{Supported Operating Systems} \begin{itemize} \item Linux \item Mac OS X \item Windows (static library only) \end{itemize} \clearpage \subsection{Hello World Example} \cppexample{hello_world} actor-framework-0.16.3/doc/tex/GroupCommunication.tex000066400000000000000000000045001341123343400226120ustar00rootroot00000000000000\section{Group Communication} \label{groups} CAF supports publish/subscribe-based group communication. Dynamically typed actors can join and leave groups and send messages to groups. The following example showcases the basic API for retrieving a group from a module by its name, joining, and leaving. \begin{lstlisting} std::string module = "local"; std::string id = "foo"; auto expected_grp = system.groups().get(module, id); if (! expected_grp) { std::cerr << "*** cannot load group: " << system.render(expected_grp.error()) << std::endl; return; } auto grp = std::move(*expected_grp); scoped_actor self{system}; self->join(grp); self->send(grp, "test"); self->receive( [](const std::string& str) { assert(str == "test"); } ); self->leave(grp); \end{lstlisting} It is worth mentioning that the module \lstinline`"local"` is guaranteed to never return an error. The example above uses the general API for retrieving the group. However, local modules can be easier accessed by calling \lstinline`system.groups().get_local(id)`, which returns \lstinline`group` instead of \lstinline`expected`. \subsection{Anonymous Groups} \label{anonymous-group} Groups created on-the-fly with \lstinline^system.groups().anonymous()^ can be used to coordinate a set of workers. Each call to this function returns a new, unique group instance. \subsection{Local Groups} \label{local-group} The \lstinline^"local"^ group module creates groups for in-process communication. For example, a group for GUI related events could be identified by \lstinline^system.groups().get_local("GUI events")^. The group ID \lstinline^"GUI events"^ uniquely identifies a singleton group instance of the module \lstinline^"local"^. \subsection{Remote Groups} \label{remote-group} Calling\lstinline^system.middleman().publish_local_groups(port, addr)^ makes all local groups available to other nodes in the network. The first argument denotes the port, while the second (optional) parameter can be used to whitelist IP addresses. After publishing the group at one node (the server), other nodes (the clients) can get a handle for that group by using the ``remote'' module: \lstinline^system.groups().get("remote", "@:")^. This implementation uses N-times unicast underneath and the group is only available as long as the hosting server is alive. actor-framework-0.16.3/doc/tex/Introduction.tex000066400000000000000000000141121341123343400214510ustar00rootroot00000000000000\section{Introduction} Before diving into the API of CAF, we discuss the concepts behind it and explain the terminology used in this manual. \subsection{Actor Model} The actor model describes concurrent entities---actors---that do not share state and communicate only via asynchronous message passing. Decoupling concurrently running software components via message passing avoids race conditions by design. Actors can create---spawn---new actors and monitor each other to build fault-tolerant, hierarchical systems. Since message passing is network transparent, the actor model applies to both concurrency and distribution. Implementing applications on top of low-level primitives such as mutexes and semaphores has proven challenging and error-prone. In particular when trying to implement applications that scale up to many CPU cores. Queueing, starvation, priority inversion, and false sharing are only a few of the issues that can decrease performance significantly in mutex-based concurrency models. In the extreme, an application written with the standard toolkit can run slower when adding more cores. The actor model has gained momentum over the last decade due to its high level of abstraction and its ability to scale dynamically from one core to many cores and from one node to many nodes. However, the actor model has not yet been widely adopted in the native programming domain. With CAF, we contribute a library for actor programming in C++ as open-source software to ease native development of concurrent as well as distributed systems. In this regard, CAF follows the C++ philosophy ``building the highest abstraction possible without sacrificing performance''. \subsection{Terminology} CAF is inspired by other implementations based on the actor model such as Erlang or Akka. It aims to provide a modern C++ API allowing for type-safe as well as dynamically typed messaging. While there are similarities to other implementations, we made many different design decisions that lead to slight differences when comparing CAF to other actor frameworks. \subsubsection{Dynamically Typed Actor} A dynamically typed actor accepts any kind of message and dispatches on its content dynamically at the receiver. This is the ``traditional'' messaging style found in implementations like Erlang or Akka. The upside of this approach is (usually) faster prototyping and less code. This comes at the cost of requiring excessive testing. \subsubsection{Statically Typed Actor} CAF achieves static type-checking for actors by defining abstract messaging interfaces. Since interfaces define both input and output types, CAF is able to verify messaging protocols statically. The upside of this approach is much higher robustness to code changes and fewer possible runtime errors. This comes at an increase in required source code, as developers have to define and use messaging interfaces. \subsubsection{Actor References} \label{actor-reference} CAF uses reference counting for actors. The three ways to store a reference to an actor are addresses, handles, and pointers. Note that \emph{address} does not refer to a \emph{memory region} in this context. \paragraph{Address} \label{actor-address} Each actor has a (network-wide) unique logical address. This identifier is represented by \lstinline^actor_addr^, which allows to identify and monitor an actor. Unlike other actor frameworks, CAF does \emph{not} allow users to send messages to addresses. This limitation is due to the fact that the address does not contain any type information. Hence, it would not be safe to send it a message, because the receiving actor might use a statically typed interface that does not accept the given message. Because an \lstinline^actor_addr^ fills the role of an identifier, it has \emph{weak reference semantics} \see{reference-counting}. \paragraph{Handle} \label{actor-handle} An actor handle contains the address of an actor along with its type information and is required for sending messages to actors. The distinction between handles and addresses---which is unique to CAF when comparing it to other actor systems---is a consequence of the design decision to enforce static type checking for all messages. Dynamically typed actors use \lstinline^actor^ handles, while statically typed actors use \lstinline^typed_actor<...>^ handles. Both types have \emph{strong reference semantics} \see{reference-counting}. \paragraph{Pointer} \label{actor-pointer} In a few instances, CAF uses \lstinline^strong_actor_ptr^ to refer to an actor using \emph{strong reference semantics} \see{reference-counting} without knowing the proper handle type. Pointers must be converted to a handle via \lstinline^actor_cast^ \see{actor-cast} prior to sending messages. A \lstinline^strong_actor_ptr^ can be \emph{null}. \subsubsection{Spawning} ``Spawning'' an actor means to create and run a new actor. \subsubsection{Monitor} \label{monitor} A monitored actor sends a down message~\see{down-message} to all actors monitoring it as part of its termination. This allows actors to supervise other actors and to take actions when one of the supervised actors fails, i.e., terminates with a non-normal exit reason. \subsubsection{Link} \label{link} A link is a bidirectional connection between two actors. Each actor sends an exit message~\see{exit-message} to all of its links as part of its termination. Unlike down messages, exit messages cause the receiving actor to terminate as well when receiving a non-normal exit reason per default. This allows developers to create a set of actors with the guarantee that either all or no actors are alive. Actors can override the default handler to implement error recovery strategies. \subsection{Experimental Features} Sections that discuss experimental features are highlighted with \experimental. The API of such features is not stable. This means even minor updates to CAF can come with breaking changes to the API or even remove a feature completely. However, we encourage developers to extensively test such features and to start discussions to uncover flaws, report bugs, or tweaking the API in order to improve a feature or streamline it to cover certain use cases. actor-framework-0.16.3/doc/tex/ManagingGroupsOfWorkers.tex000066400000000000000000000102051341123343400235520ustar00rootroot00000000000000\section{Managing Groups of Workers \experimental} \label{worker-groups} When managing a set of workers, a central actor often dispatches requests to a set of workers. For this purpose, the class \lstinline^actor_pool^ implements a lightweight abstraction for managing a set of workers using a dispatching policy. Unlike groups, pools usually own their workers. Pools are created using the static member function \lstinline^make^, which takes either one argument (the policy) or three (number of workers, factory function for workers, and dispatching policy). After construction, one can add new workers via messages of the form \texttt{('SYS', 'PUT', worker)}, remove workers with \texttt{('SYS', 'DELETE', worker)}, and retrieve the set of workers as \lstinline^vector^ via \texttt{('SYS', 'GET')}. An actor pool takes ownership of its workers. When forced to quit, it sends an exit messages to all of its workers, forcing them to quit as well. The pool also monitors all of its workers. Pools do not cache messages, but enqueue them directly in a workers mailbox. Consequently, a terminating worker loses all unprocessed messages. For more advanced caching strategies, such as reliable message delivery, users can implement their own dispatching policies. \subsection{Dispatching Policies} A dispatching policy is a functor with the following signature: \begin{lstlisting} using uplock = upgrade_lock; using policy = std::function; \end{lstlisting} The argument \lstinline^guard^ is a shared lock that can be upgraded for unique access if the policy includes a critical section. The second argument is a vector containing all workers managed by the pool. The argument \lstinline^ptr^ contains the full message as received by the pool. Finally, \lstinline^host^ is the current scheduler context that can be used to enqueue workers into the corresponding job queue. The actor pool class comes with a set predefined policies, accessible via factory functions, for convenience. \begin{lstlisting} actor_pool::policy actor_pool::round_robin(); \end{lstlisting} This policy forwards incoming requests in a round-robin manner to workers. There is no guarantee that messages are consumed, i.e., work items are lost if the worker exits before processing all of its messages. \begin{lstlisting} actor_pool::policy actor_pool::broadcast(); \end{lstlisting} This policy forwards \emph{each} message to \emph{all} workers. Synchronous messages to the pool will be received by all workers, but the client will only recognize the first arriving response message---or error---and discard subsequent messages. Note that this is not caused by the policy itself, but a consequence of forwarding synchronous messages to more than one actor. \begin{lstlisting} actor_pool::policy actor_pool::random(); \end{lstlisting} This policy forwards incoming requests to one worker from the pool chosen uniformly at random. Analogous to \lstinline^round_robin^, this policy does not cache or redispatch messages. \begin{lstlisting} using join = function; using split = function>&, message&)>; template static policy split_join(join jf, split sf = ..., T init = T()); \end{lstlisting} This policy models split/join or scatter/gather work flows, where a work item is split into as many tasks as workers are available and then the individuals results are joined together before sending the full result back to the client. The join function is responsible for ``glueing'' all result messages together to create a single result. The function is called with the result object (initialed using \lstinline^init^) and the current result messages from a worker. The first argument of a split function is a mapping from actors (workers) to tasks (messages). The second argument is the input message. The default split function is a broadcast dispatching, sending each worker the original request. actor-framework-0.16.3/doc/tex/MessageHandlers.tex000066400000000000000000000106471341123343400220460ustar00rootroot00000000000000\section{Message Handlers} \label{message-handler} Actors can store a set of callbacks---usually implemented as lambda expressions---using either \lstinline^behavior^ or \lstinline^message_handler^. The former stores an optional timeout, while the latter is composable. \subsection{Definition and Composition} As the name implies, a \lstinline^behavior^ defines the response of an actor to messages it receives. The optional timeout allows an actor to dynamically change its behavior when not receiving message after a certain amount of time. \begin{lstlisting} message_handler x1{ [](int i) { /*...*/ }, [](double db) { /*...*/ }, [](int a, int b, int c) { /*...*/ } }; \end{lstlisting} In our first example, \lstinline^x1^ models a behavior accepting messages that consist of either exactly one \lstinline^int^, or one \lstinline^double^, or three \lstinline^int^ values. Any other message is not matched and gets forwarded to the default handler \see{default-handler}. \begin{lstlisting} message_handler x2{ [](double db) { /*...*/ }, [](double db) { /* - unrachable - */ } }; \end{lstlisting} Our second example illustrates an important characteristic of the matching mechanism. Each message is matched against the callbacks in the order they are defined. The algorithm stops at the first match. Hence, the second callback in \lstinline^x2^ is unreachable. \begin{lstlisting} message_handler x3 = x1.or_else(x2); message_handler x4 = x2.or_else(x1); \end{lstlisting} Message handlers can be combined using \lstinline^or_else^. This composition is not commutative, as our third examples illustrates. The resulting message handler will first try to handle a message using the left-hand operand and will fall back to the right-hand operand if the former did not match. Thus, \lstinline^x3^ behaves exactly like \lstinline^x1^. This is because the second callback in \lstinline^x1^ will consume any message with a single \lstinline^double^ and both callbacks in \lstinline^x2^ are thus unreachable. The handler \lstinline^x4^ will consume messages with a single \lstinline^double^ using the first callback in \lstinline^x2^, essentially overriding the second callback in \lstinline^x1^. \clearpage \subsection{Atoms} \label{atom} Defining message handlers in terms of callbacks is convenient, but requires a simple way to annotate messages with meta data. Imagine an actor that provides a mathematical service for integers. It receives two integers, performs a user-defined operation and returns the result. Without additional context, the actor cannot decide whether it should multiply or add the integers. Thus, the operation must be encoded into the message. The Erlang programming language introduced an approach to use non-numerical constants, so-called \textit{atoms}, which have an unambiguous, special-purpose type and do not have the runtime overhead of string constants. Atoms in CAF are mapped to integer values at compile time. This mapping is guaranteed to be collision-free and invertible, but limits atom literals to ten characters and prohibits special characters. Legal characters are \lstinline^_0-9A-Za-z^ and the whitespace character. Atoms are created using the \lstinline^constexpr^ function \lstinline^atom^, as the following example illustrates. \begin{lstlisting} atom_value a1 = atom("add"); atom_value a2 = atom("multiply"); \end{lstlisting} \textbf{Warning}: The compiler cannot enforce the restrictions at compile time, except for a length check. The assertion \lstinline^atom("!?") != atom("?!")^ is not true, because each invalid character translates to a whitespace character. While the \lstinline^atom_value^ is computed at compile time, it is not uniquely typed and thus cannot be used in the signature of a callback. To accomplish this, CAF offers compile-time \emph{atom constants}. \begin{lstlisting} using add_atom = atom_constant; using multiply_atom = atom_constant; \end{lstlisting} Using these constants, we can now define message passing interfaces in a convenient way: \begin{lstlisting} behavior do_math{ [](add_atom, int a, int b) { return a + b; }, [](multiply_atom, int a, int b) { return a * b; } }; // caller side: send(math_actor, add_atom::value, 1, 2) \end{lstlisting} Atom constants define a static member \lstinline^value^. Please note that this static \lstinline^value^ member does \emph{not} have the type \lstinline^atom_value^, unlike \lstinline^std::integral_constant^ for example. actor-framework-0.16.3/doc/tex/MessagePassing.tex000066400000000000000000000330351341123343400217060ustar00rootroot00000000000000\section{Message Passing} \label{message-passing} Message passing in CAF is always asynchronous. Further, CAF neither guarantees message delivery nor message ordering in a distributed setting. CAF uses TCP per default, but also enables nodes to send messages to other nodes without having a direct connection. In this case, messages are forwarded by intermediate nodes and can get lost if one of the forwarding nodes fails. Likewise, forwarding paths can change dynamically and thus cause messages to arrive out of order. The messaging layer of CAF has three primitives for sending messages: \lstinline^send^, \lstinline^request^, and \lstinline^delegate^. The former simply enqueues a message to the mailbox the receiver. The latter two are discussed in more detail in \sref{request} and \sref{delegate}. \subsection{Structure of Mailbox Elements} \label{mailbox-element} When enqueuing a message to the mailbox of an actor, CAF wraps the content of the message into a \lstinline^mailbox_element^ (shown below) to add meta data and processing paths. \singlefig{mailbox_element}{UML class diagram for \lstinline^mailbox_element^}{mailbox_element} The sender is stored as a \lstinline^strong_actor_ptr^ \see{actor-pointer} and denotes the origin of the message. The message ID is either 0---invalid---or a positive integer value that allows the sender to match a response to its request. The \lstinline^stages^ vector stores the path of the message. Response messages, i.e., the returned values of a message handler, are sent to \lstinline^stages.back()^ after calling \lstinline^stages.pop_back()^. This allows CAF to build pipelines of arbitrary size. If no more stage is left, the response reaches the sender. Finally, \lstinline^content()^ grants access to the type-erased tuple storing the message itself. Mailbox elements are created by CAF automatically and are usually invisible to the programmer. However, understanding how messages are processed internally helps understanding the behavior of the message passing layer. It is worth mentioning that CAF usually wraps the mailbox element and its content into a single object in order to reduce the number of memory allocations. \subsection{Copy on Write} \label{copy-on-write} CAF allows multiple actors to implicitly share message contents, as long as no actor performs writes. This allows groups~\see{groups} to send the same content to all subscribed actors without any copying overhead. Actors copy message contents whenever other actors hold references to it and if one or more arguments of a message handler take a mutable reference. \subsection{Requirements for Message Types} Message types in CAF must meet the following requirements: \begin{enumerate} \item Serializable or inspectable \see{type-inspection} \item Default constructible \item Copy constructible \end{enumerate} A type is serializable if it provides free function \lstinline^serialize(Serializer&, T&)^ or \lstinline^serialize(Serializer&, T&, const unsigned int)^. Accordingly, a type is inspectable if it provides a free function \lstinline^inspect(Inspector&, T&)^. Requirement 2 is a consequence of requirement 1, because CAF needs to be able to create an object of a type before it can call \lstinline^serialize^ or \lstinline^inspect^ on it. Requirement 3 allows CAF to implement Copy on Write~\see{copy-on-write}. \subsection{Default and System Message Handlers} \label{special-handler} CAF has three system-level message types (\lstinline^down_msg^, \lstinline^exit_msg^, and \lstinline^error^) that all actor should handle regardless of there current state. Consequently, event-based actors handle such messages in special-purpose message handlers. Additionally, event-based actors have a fallback handler for unmatched messages. Note that blocking actors have neither of those special-purpose handlers \see{blocking-actor}. \subsubsection{Down Handler} \label{down-message} Actors can monitor the lifetime of other actors by calling \lstinline^self->monitor(other)^. This will cause the runtime system of CAF to send a \lstinline^down_msg^ for \lstinline^other^ if it dies. Actors drop down messages unless they provide a custom handler via \lstinline^set_down_handler(f)^, where \lstinline^f^ is a function object with signature \lstinline^void (down_msg&)^ or \lstinline^void (scheduled_actor*, down_msg&)^. The latter signature allows users to implement down message handlers as free function. \subsubsection{Exit Handler} \label{exit-message} Bidirectional monitoring with a strong lifetime coupling is established by calling \lstinline^self->link_to(other)^. This will cause the runtime to send an \lstinline^exit_msg^ if either \lstinline^this^ or \lstinline^other^ dies. Per default, actors terminate after receiving an \lstinline^exit_msg^ unless the exit reason is \lstinline^exit_reason::normal^. This mechanism propagates failure states in an actor system. Linked actors form a sub system in which an error causes all actors to fail collectively. Actors can override the default handler via \lstinline^set_exit_handler(f)^, where \lstinline^f^ is a function object with signature \lstinline^void (exit_message&)^ or \lstinline^void (scheduled_actor*, exit_message&)^. \subsubsection{Error Handler} \label{error-message} Actors send error messages to others by returning an \lstinline^error^ \see{error} from a message handler. Similar to exit messages, error messages usually cause the receiving actor to terminate, unless a custom handler was installed via \lstinline^set_error_handler(f)^, where \lstinline^f^ is a function object with signature \lstinline^void (error&)^ or \lstinline^void (scheduled_actor*, error&)^. Additionally, \lstinline^request^ accepts an error handler as second argument to handle errors for a particular request~\see{error-response}. The default handler is used as fallback if \lstinline^request^ is used without error handler. \subsubsection{Default Handler} \label{default-handler} The default handler is called whenever the behavior of an actor did not match the input. Actors can change the default handler by calling \lstinline^set_default_handler^. The expected signature of the function object is \lstinline^result (scheduled_actor*, message_view&)^, whereas the \lstinline^self^ pointer can again be omitted. The default handler can return a response message or cause the runtime to \emph{skip} the input message to allow an actor to handle it in a later state. CAF provides the following built-in implementations: \lstinline^reflect^, \lstinline^reflect_and_quit^, \lstinline^print_and_drop^, \lstinline^drop^, and \lstinline^skip^. The former two are meant for debugging and testing purposes and allow an actor to simply return an input. The next two functions drop unexpected messages with or without printing a warning beforehand. Finally, \lstinline^skip^ leaves the input message in the mailbox. The default is \lstinline^print_and_drop^. \subsection{Requests} \label{request} A main feature of CAF is its ability to couple input and output types via the type system. For example, a \lstinline^typed_actor::with>^ essentially behaves like a function. It receives a single \lstinline^int^ as input and responds with another \lstinline^int^. CAF embraces this functional take on actors by simply creating response messages from the result of message handlers. This allows CAF to match \emph{request} to \emph{response} messages and to provide a convenient API for this style of communication. \subsubsection{Sending Requests and Handling Responses} \label{handling-response} Actors send request messages by calling \lstinline^request(receiver, timeout, content...)^. This function returns an intermediate object that allows an actor to set a one-shot handler for the response message. Event-based actors can use either \lstinline^request(...).then^ or \lstinline^request(...).await^. The former multiplexes the one-shot handler with the regular actor behavior and handles requests as they arrive. The latter suspends the regular actor behavior until all awaited responses arrive and handles requests in LIFO order. Blocking actors always use \lstinline^request(...).receive^, which blocks until the one-shot handler was called. Actors receive a \lstinline^sec::request_timeout^ \see{sec} error message~\see{error-message} if a timeout occurs. Users can set the timeout to \lstinline^infinite^ for unbound operations. This is only recommended if the receiver is running locally. In our following example, we use the simple cell actors shown below as communication endpoints. \cppexample[20-37]{message_passing/request} The first part of the example illustrates how event-based actors can use either \lstinline^then^ or \lstinline^await^. \cppexample[39-51]{message_passing/request} \clearpage The second half of the example shows a blocking actor making use of \lstinline^receive^. Note that blocking actors have no special-purpose handler for error messages and therefore are required to pass a callback for error messages when handling response messages. \cppexample[53-64]{message_passing/request} We spawn five cells and assign the values 0, 1, 4, 9, and 16. \cppexample[67-69]{message_passing/request} When passing the \lstinline^cells^ vector to our three different implementations, we observe three outputs. Our \lstinline^waiting_testee^ actor will always print: {\footnotesize\begin{verbatim} cell #9 -> 16 cell #8 -> 9 cell #7 -> 4 cell #6 -> 1 cell #5 -> 0 \end{verbatim}} This is because \lstinline^await^ puts the one-shots handlers onto a stack and enforces LIFO order by re-ordering incoming response messages. The \lstinline^multiplexed_testee^ implementation does not print its results in a predicable order. Response messages arrive in arbitrary order and are handled immediately. Finally, the \lstinline^blocking_testee^ implementation will always print: {\footnotesize\begin{verbatim} cell #5 -> 0 cell #6 -> 1 cell #7 -> 4 cell #8 -> 9 cell #9 -> 16 \end{verbatim}} Both event-based approaches send all requests, install a series of one-shot handlers, and then return from the implementing function. In contrast, the blocking function waits for a response before sending another request. \clearpage \subsubsection{Error Handling in Requests} \label{error-response} Requests allow CAF to unambiguously correlate request and response messages. This is also true if the response is an error message. Hence, CAF allows to add an error handler as optional second parameter to \lstinline^then^ and \lstinline^await^ (this parameter is mandatory for \lstinline^receive^). If no such handler is defined, the default error handler \see{error-message} is used as a fallback in scheduled actors. As an example, we consider a simple divider that returns an error on a division by zero. This examples uses a custom error category~\see{error}. \cppexample[19-25,35-48]{message_passing/divider} When sending requests to the divider, we use a custom error handlers to report errors to the user. \cppexample[68-77]{message_passing/divider} \clearpage \subsection{Delaying Messages} \label{delay-message} Messages can be delayed by using the function \lstinline^delayed_send^, as illustrated in the following time-based loop example. \cppexample[56-75]{message_passing/dancing_kirby} \clearpage \subsection{Delegating Messages} \label{delegate} Actors can transfer responsibility for a request by using \lstinline^delegate^. This enables the receiver of the delegated message to reply as usual---simply by returning a value from its message handler---and the original sender of the message will receive the response. The following diagram illustrates request delegation from actor B to actor C. \begin{footnotesize} \begin{verbatim} A B C | | | | ---(request)---> | | | | ---(delegate)--> | | X |---\ | | | compute | | | result | |<--/ | <-------------(reply)-------------- | | X |---\ | | handle | | response |<--/ | X \end{verbatim} \end{footnotesize} Returning the result of \lstinline^delegate(...)^ from a message handler, as shown in the example below, suppresses the implicit response message and allows the compiler to check the result type when using statically typed actors. \cppexample[15-42]{message_passing/delegating} \subsection{Response Promises} \label{promise} Response promises allow an actor to send and receive other messages prior to replying to a particular request. Actors create a response promise using \lstinline^self->make_response_promise()^, where \lstinline^Ts^ is a template parameter pack describing the promised return type. Dynamically typed actors simply call \lstinline^self->make_response_promise()^. After retrieving a promise, an actor can fulfill it by calling the member function \lstinline^deliver(...)^, as shown in the following example. \cppexample[18-43]{message_passing/promises} \clearpage \subsection{Message Priorities} By default, all messages have the default priority, i.e., \lstinline^message_priority::normal^. Actors can send urgent messages by setting the priority explicitly: \lstinline^send(dst,...)^. Urgent messages are put into a different queue of the receiver's mailbox. Hence, long wait delays can be avoided for urgent communication. actor-framework-0.16.3/doc/tex/Messages.tex000066400000000000000000000231311341123343400205400ustar00rootroot00000000000000\section{Type-Erased Tuples, Messages and Message Views} \label{message} Messages in CAF are stored in type-erased tuples. The actual message type itself is usually hidden, as actors use pattern matching to decompose messages automatically. However, the classes \lstinline^message^ and \lstinline^message_builder^ allow more advanced use cases than only sending data from one actor to another. The interface \lstinline^type_erased_tuple^ encapsulates access to arbitrary data. This data can be stored on the heap or on the stack. A \lstinline^message^ is a type-erased tuple that is always heap-allocated and uses copy-on-write semantics. When dealing with "plain" type-erased tuples, users are required to check if a tuple is referenced by others via \lstinline^type_erased_tuple::shared^ before modifying its content. The convenience class \lstinline^message_view^ holds a reference to either a stack-located \lstinline^type_erased_tuple^ or a \lstinline^message^. The content of the data can be access via \lstinline^message_view::content^ in both cases, which returns a \lstinline^type_erased_tuple&^. The content of the view can be forced into a message object by calling \lstinline^message_view::move_content_to_message^. This member function either returns the stored message object or moves the content of a stack-allocated tuple into a new message. \subsection{RTTI and Type Numbers} All builtin types in CAF have a non-zero 6-bit \emph{type number}. All user-defined types are mapped to 0. When querying the run-time type information (RTTI) for individual message or tuple elements, CAF returns a pair consisting of an integer and a pointer to \lstinline^std::type_info^. The first value is the 6-bit type number. If the type number is non-zero, the second value is a pointer to the C++ type info, otherwise the second value is null. Additionally, CAF generates 32 bit \emph{type tokens}. These tokens are \emph{type hints} that summarizes all types in a type-erased tuple. Two type-erased tuples are of different type if they have different type tokens (the reverse is not true). \clearpage \subsection{Class \lstinline^type_erased_tuple^} \textbf{Note}: Calling modifiers on a shared type-erased tuple is undefined behavior. \begin{center} \begin{tabular}{ll} \textbf{Types} & ~ \\ \hline \lstinline^rtti_pair^ & \lstinline^std::pair^ \\ \hline ~ & ~ \\ \textbf{Observers} & ~ \\ \hline \lstinline^bool empty()^ & Returns whether this message is empty. \\ \hline \lstinline^size_t size()^ & Returns the size of this message. \\ \hline \lstinline^rtti_pair type(size_t pos)^ & Returns run-time type information for the nth element. \\ \hline \lstinline^error save(serializer& x)^ & Writes the tuple to \lstinline^x^. \\ \hline \lstinline^error save(size_t n, serializer& x)^ & Writes the nth element to \lstinline^x^. \\ \hline \lstinline^const void* get(size_t n)^ & Returns a const pointer to the nth element. \\ \hline \lstinline^std::string stringify()^ & Returns a string representation of the tuple. \\ \hline \lstinline^std::string stringify(size_t n)^ & Returns a string representation of the nth element. \\ \hline \lstinline^bool matches(size_t n, rtti_pair)^ & Checks whether the nth element has given type. \\ \hline \lstinline^bool shared()^ & Checks whether more than one reference to the data exists. \\ \hline \lstinline^bool match_element(size_t n)^ & Checks whether element \lstinline^n^ has type \lstinline^T^. \\ \hline \lstinline^bool match_elements()^ & Checks whether this message has the types \lstinline^Ts...^. \\ \hline \lstinline^const T& get_as(size_t n)^ & Returns a const reference to the nth element. \\ \hline ~ & ~ \\ \textbf{Modifiers} & ~ \\ \hline \lstinline^void* get_mutable(size_t n)^ & Returns a mutable pointer to the nth element. \\ \hline \lstinline^T& get_mutable_as(size_t n)^ & Returns a mutable reference to the nth element. \\ \hline \lstinline^void load(deserializer& x)^ & Reads the tuple from \lstinline^x^. \\ \hline \end{tabular} \end{center} \subsection{Class \lstinline^message^} The class \lstinline^message^ includes all member functions of \lstinline^type_erased_tuple^. However, calling modifiers is always guaranteed to be safe. A \lstinline^message^ automatically detaches its content by copying it from the shared data on mutable access. The class further adds the following member functions over \lstinline^type_erased_tuple^. Note that \lstinline^apply^ only detaches the content if a callback takes mutable references as arguments. \begin{center} \begin{tabular}{ll} \textbf{Observers} & ~ \\ \hline \lstinline^message drop(size_t n)^ & Creates a new message with all but the first \lstinline^n^ values. \\ \hline \lstinline^message drop_right(size_t n)^ & Creates a new message with all but the last \lstinline^n^ values. \\ \hline \lstinline^message take(size_t n)^ & Creates a new message from the first \lstinline^n^ values. \\ \hline \lstinline^message take_right(size_t n)^ & Creates a new message from the last \lstinline^n^ values. \\ \hline \lstinline^message slice(size_t p, size_t n)^ & Creates a new message from \lstinline^[p, p + n)^. \\ \hline \lstinline^message extract(message_handler)^ & See \sref{extract}. \\ \hline \lstinline^message extract_opts(...)^ & See \sref{extract-opts}. \\ \hline ~ & ~ \\ \textbf{Modifiers} & ~ \\ \hline \lstinline^optional apply(message_handler f)^ & Returns \lstinline^f(*this)^. \\ \hline ~ & ~ \\ \textbf{Operators} & ~ \\ \hline \lstinline^message operator+(message x, message y)^ & Concatenates \lstinline^x^ and \lstinline^y^. \\ \hline \lstinline^message& operator+=(message& x, message y)^ & Concatenates \lstinline^x^ and \lstinline^y^. \\ \hline \end{tabular} \end{center} \clearpage \subsection{Class \texttt{message\_builder}} \begin{center} \begin{tabular}{ll} \textbf{Constructors} & ~ \\ \hline \lstinline^(void)^ & Creates an empty message builder. \\ \hline \lstinline^(Iter first, Iter last)^ & Adds all elements from range \lstinline^[first, last)^. \\ \hline ~ & ~ \\ \textbf{Observers} & ~ \\ \hline \lstinline^bool empty()^ & Returns whether this message is empty. \\ \hline \lstinline^size_t size()^ & Returns the size of this message. \\ \hline \lstinline^message to_message( )^ & Converts the buffer to an actual message object. \\ \hline \lstinline^append(T val)^ & Adds \lstinline^val^ to the buffer. \\ \hline \lstinline^append(Iter first, Iter last)^ & Adds all elements from range \lstinline^[first, last)^. \\ \hline \lstinline^message extract(message_handler)^ & See \sref{extract}. \\ \hline \lstinline^message extract_opts(...)^ & See \sref{extract-opts}. \\ \hline ~ & ~ \\ \textbf{Modifiers} & ~ \\ \hline \lstinline^optional^ \lstinline^apply(message_handler f)^ & Returns \lstinline^f(*this)^. \\ \hline \lstinline^message move_to_message()^ & Transfers ownership of its data to the new message. \\ \hline \end{tabular} \end{center} \clearpage \subsection{Extracting} \label{extract} The member function \lstinline^message::extract^ removes matched elements from a message. x Messages are filtered by repeatedly applying a message handler to the greatest remaining slice, whereas slices are generated in the sequence $[0, size)$, $[0, size-1)$, $...$, $[1, size-1)$, $...$, $[size-1, size)$. Whenever a slice is matched, it is removed from the message and the next slice starts at the same index on the reduced message. For example: \begin{lstlisting} auto msg = make_message(1, 2.f, 3.f, 4); // remove float and integer pairs auto msg2 = msg.extract({ [](float, float) { }, [](int, int) { } }); assert(msg2 == make_message(1, 4)); \end{lstlisting} Step-by-step explanation: \begin{itemize} \item Slice 1: \lstinline^(1, 2.f, 3.f, 4)^, no match \item Slice 2: \lstinline^(1, 2.f, 3.f)^, no match \item Slice 3: \lstinline^(1, 2.f)^, no match \item Slice 4: \lstinline^(1)^, no match \item Slice 5: \lstinline^(2.f, 3.f, 4)^, no match \item Slice 6: \lstinline^(2.f, 3.f)^, \emph{match}; new message is \lstinline^(1, 4)^ \item Slice 7: \lstinline^(4)^, no match \end{itemize} Slice 7 is \lstinline^(4)^, i.e., does not contain the first element, because the match on slice 6 occurred at index position 1. The function \lstinline^extract^ iterates a message only once, from left to right. The returned message contains the remaining, i.e., unmatched, elements. \clearpage \subsection{Extracting Command Line Options} \label{extract-opts} The class \lstinline^message^ also contains a convenience interface to \lstinline^extract^ for parsing command line options: the member function \lstinline^extract_opts^. \begin{lstlisting} int main(int argc, char** argv) { uint16_t port; string host = "localhost"; auto res = message_builder(argv + 1, argv + argc).extract_opts({ {"port,p", "set port", port}, {"host,H", "set host (default: localhost)", host}, {"verbose,v", "enable verbose mode"} }); if (! res.error.empty()) { // read invalid CLI arguments cerr << res.error << endl; return 1; } if (res.opts.count("help") > 0) { // CLI arguments contained "-h", "--help", or "-?" (builtin); cout << res.helptext << endl; return 0; } if (! res.remainder.empty()) { // res.remainder stors all extra arguments that weren't consumed } if (res.opts.count("verbose") > 0) { // enable verbose mode } // ... } /* Output of ./program_name -h: Allowed options: -p [--port] arg : set port -H [--host] arg : set host (default: localhost) -v [--verbose] : enable verbose mode */ \end{lstlisting} actor-framework-0.16.3/doc/tex/MigrationGuides.tex000066400000000000000000000203731341123343400220700ustar00rootroot00000000000000\section{Migration Guides} The guides in this section document all possibly breaking changes in the library for that last versions of CAF. \subsection{0.8 to 0.9} Version 0.9 included a lot of changes and improvements in its implementation, but it also made breaking changes to the API. \paragraph{\lstinline^self^ has been removed} ~ This is the biggest library change since the initial release. The major problem with this keyword-like identifier is that it must have a single type as it's implemented as a thread-local variable. Since there are so many different kinds of actors (event-based or blocking, untyped or typed), \lstinline^self^ needs to perform type erasure at some point, rendering it ultimately useless. Instead of a thread-local pointer, you can now use the first argument in functor-based actors to "catch" the self pointer with proper type information. \paragraph{\lstinline^actor_ptr^ has been replaced} ~ CAF now distinguishes between handles to actors, i.e., \lstinline^typed_actor<...>^ or simply \lstinline^actor^, and \emph{addresses} of actors, i.e., \lstinline^actor_addr^. The reason for this change is that each actor has a logical, (network-wide) unique address, which is used by the networking layer of CAF. Furthermore, for monitoring or linking, the address is all you need. However, the address is not sufficient for sending messages, because it doesn't have any type information. The function \lstinline^current_sender()^ now returns the \emph{address} of the sender. This means that previously valid code such as \lstinline^send(current_sender(),...)^ will cause a compiler error. However, the recommended way of replying to messages is to return the result from the message handler. \paragraph{The API for typed actors is now similar to the API for untyped actors} ~ The APIs of typed and untyped actors have been harmonized. Typed actors can now be published in the network and also use all operations untyped actors can. \clearpage \subsection{0.9 to 0.10 (\texttt{libcppa} to CAF)} The first release under the new name CAF is an overhaul of the entire library. Some classes have been renamed or relocated, others have been removed. The purpose of this refactoring was to make the library easier to grasp and to make its API more consistent. All classes now live in the namespace \texttt{caf} and all headers have the top level folder \texttt{caf} instead of \texttt{cppa}. For example, \texttt{cppa/actor.hpp} becomes \texttt{caf/actor.hpp}. Further, the convenience header to get all parts of the user API is now \texttt{"caf/all.hpp"}. The networking has been separated from the core library. To get the networking components, simply include \texttt{caf/io/all.hpp} and use the namespace \lstinline^caf::io^. Version 0.10 still includes the header \texttt{cppa/cppa.hpp} to make the transition process for users easier and to not break existing code right away. The header defines the namespace \texttt{cppa} as an alias for \texttt{caf}. Furthermore, it provides implementations or type aliases for renamed or removed classes such as \lstinline^cow_tuple^. You won't get any warning about deprecated headers with 0.10. However, we will add this warnings in the next library version and remove deprecated code eventually. Even when using the backwards compatibility header, the new library has breaking changes. For instance, guard expressions have been removed entirely. The reasoning behind this decision is that we already have projections to modify the outcome of a match. Guard expressions add little expressive power to the library but a whole lot of code that is hard to maintain in the long run due to its complexity. Using projections to not only perform type conversions but also to restrict values is the more natural choice. \lstinline^any_tuple => message^ This type is only being used to pass a message from one actor to another. Hence, \lstinline^message^ is the logical name. \lstinline^partial_function => message_handler^ Technically, it still is a partial function. However, we wanted to put emphasize on its use case. \lstinline^cow_tuple => X^ We want to provide a streamlined, simple API. Shipping a full tuple abstraction with the library does not fit into this philosophy. The removal of \lstinline^cow_tuple^ implies the removal of related functions such as \lstinline^tuple_cast^. \lstinline^cow_ptr => X^ This pointer class is an implementation detail of \lstinline^message^ and should not live in the global namespace in the first place. It also had the wrong name, because it is intrusive. \lstinline^X => message_builder^ This new class can be used to create messages dynamically. For example, the content of a vector can be used to create a message using a series of \lstinline^append^ calls. \begin{lstlisting} accept_handle, connection_handle, publish, remote_actor, max_msg_size, typed_publish, typed_remote_actor, publish_local_groups, new_connection_msg, new_data_msg, connection_closed_msg, acceptor_closed_msg \end{lstlisting} These classes concern I/O functionality and have thus been moved to \lstinline^caf::io^ \subsection{0.10 to 0.11} Version 0.11 introduced new, optional components. The core library itself, however, mainly received optimizations and bugfixes with one exception: the member function \lstinline^on_exit^ is no longer virtual. You can still provide it to define a custom exit handler, but you must not use \lstinline^override^. \subsection{0.11 to 0.12} Version 0.12 removed two features: \begin{itemize} \item Type names are no longer demangled automatically. Hence, users must explicitly pass the type name as first argument when using \lstinline^announce^, i.e., \lstinline^announce(...)^ becomes \lstinline^announce("my_class", ...)^. \item Synchronous send blocks no longer support \lstinline^continue_with^. This feature has been removed without substitution. \end{itemize} \subsection{0.12 to 0.13} This release removes the (since 0.9 deprecated) \lstinline^cppa^ headers and deprecates all \lstinline^*_send_tuple^ versions (simply use the function without \lstinline^_tuple^ suffix). \lstinline^local_actor::on_exit^ once again became virtual. In case you were using the old \lstinline^cppa::options_description^ API, you can migrate to the new API based on \lstinline^extract^ \see{extract-opts}. Most importantly, version 0.13 slightly changes \lstinline^last_dequeued^ and \lstinline^last_sender^. Both functions will now cause undefined behavior (dereferencing a \lstinline^nullptr^) instead of returning dummy values when accessed from outside a callback or after forwarding the current message. Besides, these function names were not a good choice in the first place, since ``last'' implies accessing data received in the past. As a result, both functions are now deprecated. Their replacements are named \lstinline^current_message^ and \lstinline^current_sender^ \see{interface}. \subsection{0.13 to 0.14} The function \lstinline^timed_sync_send^ has been removed. It offered an alternative way of defining message handlers, which is inconsistent with the rest of the API. The policy classes \lstinline^broadcast^, \lstinline^random^, and \lstinline^round_robin^ in \lstinline^actor_pool^ were removed and replaced by factory functions using the same name. \clearpage \subsection{0.14 to 0.15} Version 0.15 replaces the singleton-based architecture with \lstinline^actor_system^. Most of the free functions in namespace \lstinline^caf^ are now member functions of \lstinline^actor_system^ \see{actor-system}. Likewise, most functions in namespace \lstinline^caf::io^ are now member functions of \lstinline^middleman^ \see{middleman}. The structure of CAF applications has changed fundamentally with a focus on configurability. Setting and fine-tuning the scheduler, changing parameters of the middleman, etc. is now bundled in the class \lstinline^actor_system_config^. The new configuration mechanism is also easily extensible. Patterns are now limited to the simple notation, because the advanced features (1) are not implementable for statically typed actors, (2) are not portable to Windows/MSVC, and (3) drastically impact compile times. Dropping this functionality also simplifies the implementation and improves performance. The \lstinline^blocking_api^ flag has been removed. All variants of \emph{spawn} now auto-detect blocking actors. actor-framework-0.16.3/doc/tex/NetworkTransparency.tex000066400000000000000000000144461341123343400230250ustar00rootroot00000000000000\section{Middleman} \label{middleman} The middleman is the main component of the I/O module and enables distribution. It transparently manages proxy actor instances representing remote actors, maintains connections to other nodes, and takes care of serialization of messages. Applications install a middleman by loading \lstinline^caf::io::middleman^ as module~\see{system-config}. Users can include \lstinline^"caf/io/all.hpp"^ to get access to all public classes of the I/O module. \subsection{Class \texttt{middleman}} \begin{center} \begin{tabular}{ll} \textbf{Remoting} & ~ \\ \hline \lstinline^expected open(uint16, const char*, bool)^ & See~\sref{remoting}. \\ \hline \lstinline^expected publish(T, uint16, const char*, bool)^ & See~\sref{remoting}. \\ \hline \lstinline^expected unpublish(T x, uint16)^ & See~\sref{remoting}. \\ \hline \lstinline^expected connect(std::string host, uint16_t port)^ & See~\sref{remoting}. \\ \hline \lstinline^expected remote_actor(string, uint16)^ & See~\sref{remoting}. \\ \hline \lstinline^expected spawn_broker(F fun, ...)^ & See~\sref{broker}. \\ \hline \lstinline^expected spawn_client(F, string, uint16, ...)^ & See~\sref{broker}. \\ \hline \lstinline^expected spawn_server(F, uint16, ...)^ & See~\sref{broker}. \\ \hline \end{tabular} \end{center} \subsection{Publishing and Connecting} \label{remoting} The member function \lstinline^publish^ binds an actor to a given port, thereby allowing other nodes to access it over the network. \begin{lstlisting} template expected middleman::publish(T x, uint16_t port, const char* in = nullptr, bool reuse_addr = false); \end{lstlisting} The first argument is a handle of type \lstinline^actor^ or \lstinline^typed_actor<...>^. The second argument denotes the TCP port. The OS will pick a random high-level port when passing 0. The third parameter configures the listening address. Passing null will accept all incoming connections (\lstinline^INADDR_ANY^). Finally, the flag \lstinline^reuse_addr^ controls the behavior when binding an IP address to a port, with the same semantics as the BSD socket flag \lstinline^SO_REUSEADDR^. For example, with \lstinline^reuse_addr = false^, binding two sockets to 0.0.0.0:42 and 10.0.0.1:42 will fail with \texttt{EADDRINUSE} since 0.0.0.0 includes 10.0.0.1. With \lstinline^reuse_addr = true^ binding would succeed because 10.0.0.1 and 0.0.0.0 are not literally equal addresses. The member function returns the bound port on success. Otherwise, an \lstinline^error^ \see{error} is returned. \begin{lstlisting} template expected middleman::unpublish(T x, uint16_t port = 0); \end{lstlisting} The member function \lstinline^unpublish^ allows actors to close a port manually. This is performed automatically if the published actor terminates. Passing 0 as second argument closes all ports an actor is published to, otherwise only one specific port is closed. The function returns an \lstinline^error^ \see{error} if the actor was not bound to given port. \clearpage \begin{lstlisting} template expected middleman::remote_actor(std::string host, uint16_t port); \end{lstlisting} After a server has published an actor with \lstinline^publish^, clients can connect to the published actor by calling \lstinline^remote_actor^: \begin{lstlisting} // node A auto ping = spawn(ping); system.middleman().publish(ping, 4242); // node B auto ping = system.middleman().remote_actor("node A", 4242); if (! ping) { cerr << "unable to connect to node A: " << system.render(ping.error()) << std::endl; } else { self->send(*ping, ping_atom::value); } \end{lstlisting} There is no difference between server and client after the connection phase. Remote actors use the same handle types as local actors and are thus fully transparent. The function pair \lstinline^open^ and \lstinline^connect^ allows users to connect CAF instances without remote actor setup. The function \lstinline^connect^ returns a \lstinline^node_id^ that can be used for remote spawning (see~\sref{remote-spawn}). \subsection{Free Functions} \label{free-remoting-functions} The following free functions in the namespace \lstinline^caf::io^ avoid calling the middleman directly. This enables users to easily switch between communication backends as long as the interfaces have the same signatures. For example, the (experimental) OpenSSL binding of CAF implements the same functions in the namespace \lstinline^caf::openssl^ to easily switch between encrypted and unencrypted communication. \begin{center} \begin{tabular}{ll} \hline \lstinline^expected open(actor_system&, uint16, const char*, bool)^ & See~\sref{remoting}. \\ \hline \lstinline^expected publish(T, uint16, const char*, bool)^ & See~\sref{remoting}. \\ \hline \lstinline^expected unpublish(T x, uint16)^ & See~\sref{remoting}. \\ \hline \lstinline^expected connect(actor_system&, std::string host, uint16_t port)^ & See~\sref{remoting}. \\ \hline \lstinline^expected remote_actor(actor_system&, string, uint16)^ & See~\sref{remoting}. \\ \hline \end{tabular} \end{center} \subsection{Transport Protocols \experimental} \label{transport-protocols} CAF communication uses TCP per default and thus the functions shown in the middleman API above are related to TCP. There are two alternatives to plain TCP: TLS via the OpenSSL module shortly discussed in \sref{free-remoting-functions} and UDP. UDP is integrated in the default multiplexer and BASP broker. Set the flag \lstinline^middleman_enable_udp^ to true to enable it (see~\sref{system-config}). This does not require you to disable TCP. Use \lstinline^publish_udp^ and \lstinline^remote_actor_udp^ to establish communication. Communication via UDP is inherently unreliable and unordered. CAF reestablishes order and drops messages that arrive late. Messages that are sent via datagrams are limited to a maximum of 65.535 bytes which is used as a receive buffer size by CAF. Note that messages that exceed the MTU are fragmented by IP and are considered lost if a single fragment is lost. Optional reliability based on retransmissions and messages slicing on the application layer are planned for the future. actor-framework-0.16.3/doc/tex/OpenCL.tex000066400000000000000000000014431341123343400201130ustar00rootroot00000000000000\section{OpenCL-based Actors} CAF supports transparent integration of OpenCL functions. \begin{lstlisting} // opencl kernel for matrix multiplication; // last parameter is, by convention, the output parameter constexpr const char* kernel_source = R"__( __kernel void matrix_mult(__global float* matrix1, __global float* matrix2, __global float* output) { // we only use square matrices, hence: width == height size_t size = get_global_size(0); // == get_global_size_(1); size_t x = get_global_id(0); size_t y = get_global_id(1); float result = 0; for (size_t idx = 0; idx < size; ++idx) result += matrix1[idx + y * size] * matrix2[x + idx * size]; output[x + y * size] = result; } )__"; \end{lstlisting} actor-framework-0.16.3/doc/tex/ReferenceCounting.tex000066400000000000000000000200371341123343400224000ustar00rootroot00000000000000\section{Reference Counting} \label{reference-counting} Actors systems can span complex communication graphs that make it hard to decide when actors are no longer needed. As a result, manually managing lifetime of actors is merely impossible. For this reason, CAF implements a garbage collection strategy for actors based on weak and strong reference counts. \subsection{Shared Ownership in C++} The C++ standard library already offers \lstinline^shared_ptr^ and \lstinline^weak_ptr^ to manage objects with complex shared ownership. The standard implementation is a solid general purpose design that covers most use cases. Weak and strong references to an object are stored in a \emph{control block}. However, CAF uses a slightly different design. The reason for this is twofold. First, we need the control block to store the identity of an actor. Second, we wanted a design that requires less indirections, because actor handles are used extensively copied for messaging, and this overhead adds up. Before discussing the approach to shared ownership in CAF, we look at the design of shared pointers in the C++ standard library. \singlefig{shared_ptr}{Shared pointer design in the C++ standard library}{shared-ptr} The figure above depicts the default memory layout when using shared pointers. The control block is allocated separately from the data and thus stores a pointer to the data. This is when using manually-allocated objects, for example \lstinline^shared_ptr iptr{new int}^. The benefit of this design is that one can destroy \lstinline^T^ independently from its control block. While irrelevant for small objects, it can become an issue for large objects. Notably, the shared pointer stores two pointers internally. Otherwise, dereferencing it would require to get the data location from the control block first. \singlefig{make_shared}{Memory layout when using \lstinline^std::make_shared^}{make-shared} When using \lstinline^make_shared^ or \lstinline^allocate_shared^, the standard library can store reference count and data in a single memory block as shown above. However, \lstinline^shared_ptr^ still has to store two pointers, because it is unaware where the data is allocated. \singlefig{enable_shared_from_this}{Memory layout with \lstinline^std::enable_shared_from_this^}{enable-shared-from-this} Finally, the design of the standard library becomes convoluted when an object should be able to hand out a \lstinline^shared_ptr^ to itself. Classes must inherit from \lstinline^std::enable_shared_from_this^ to navigate from an object to its control block. This additional navigation path is required, because \lstinline^std::shared_ptr^ needs two pointers. One to the data and one to the control block. Programmers can still use \lstinline^make_shared^ for such objects, in which case the object is again stored along with the control block. \subsection{Smart Pointers to Actors} In CAF, we use a different approach than the standard library because (1) we always allocate actors along with their control block, (2) we need additional information in the control block, and (3) we can store only a single raw pointer internally instead of the two raw pointers \lstinline^std::shared_ptr^ needs. The following figure summarizes the design of smart pointers to actors. \singlefig{refcounting}{Shared pointer design in CAF}{actor-pointer} CAF uses \lstinline^strong_actor_ptr^ instead of \lstinline^std::shared_ptr<...>^ and \lstinline^weak_actor_ptr^ instead of \lstinline^std::weak_ptr<...>^. Unlike the counterparts from the standard library, both smart pointer types only store a single pointer. Also, the control block in CAF is not a template and stores the identity of an actor (\lstinline^actor_id^ plus \lstinline^node_id^). This allows CAF to access this information even after an actor died. The control block fits exactly into a single cache line (64 Bytes). This makes sure no \emph{false sharing} occurs between an actor and other actors that have references to it. Since the size of the control block is fixed and CAF \emph{guarantees} the memory layout enforced by \lstinline^actor_storage^, CAF can compute the address of an actor from the pointer to its control block by offsetting it by 64 Bytes. Likewise, an actor can compute the address of its control block. The smart pointer design in CAF relies on a few assumptions about actor types. Most notably, the actor object is placed 64 Bytes after the control block. This starting address is cast to \lstinline^abstract_actor*^. Hence, \lstinline^T*^ must be convertible to \lstinline^abstract_actor*^ via \lstinline^reinterpret_cast^. In practice, this means actor subclasses must not use virtual inheritance, which is enforced in CAF with a \lstinline^static_assert^. \subsection{Strong and Weak References} A \emph{strong} reference manipulates the \lstinline^strong refs^ counter as shown above. An actor is destroyed if there are \emph{zero} strong references to it. If two actors keep strong references to each other via member variable, neither actor can ever be destroyed because they produce a cycle \see{breaking-cycles}. Strong references are formed by \lstinline^strong_actor_ptr^, \lstinline^actor^, and \lstinline^typed_actor<...>^ \see{actor-reference}. A \emph{weak} reference manipulates the \lstinline^weak refs^ counter. This counter keeps track of how many references to the control block exist. The control block is destroyed if there are \emph{zero} weak references to an actor (which cannot occur before \lstinline^strong refs^ reached \emph{zero} as well). No cycle occurs if two actors keep weak references to each other, because the actor objects themselves can get destroyed independently from their control block. A weak reference is only formed by \lstinline^actor_addr^ \see{actor-address}. \subsection{Converting Actor References with \texttt{actor\_cast}} \label{actor-cast} The function \lstinline^actor_cast^ converts between actor pointers and handles. The first common use case is to convert a \lstinline^strong_actor_ptr^ to either \lstinline^actor^ or \lstinline^typed_actor<...>^ before being able to send messages to an actor. The second common use case is to convert \lstinline^actor_addr^ to \lstinline^strong_actor_ptr^ to upgrade a weak reference to a strong reference. Note that casting \lstinline^actor_addr^ to a strong actor pointer or handle can result in invalid handles. The syntax for \lstinline^actor_cast^ resembles builtin C++ casts. For example, \lstinline^actor_cast(x)^ converts \lstinline^x^ to an handle of type \lstinline^actor^. \subsection{Breaking Cycles Manually} \label{breaking-cycles} Cycles can occur only when using class-based actors when storing references to other actors via member variable. Stateful actors \see{stateful-actor} break cycles by destroying the state when an actor terminates, \emph{before} the destructor of the actor itself runs. This means an actor releases all references to others automatically after calling \lstinline^quit^. However, class-based actors have to break cycles manually, because references to others are not released until the destructor of an actor runs. Two actors storing references to each other via member variable produce a cycle and neither destructor can ever be called. Class-based actors can break cycles manually by overriding \lstinline^on_exit()^ and calling \lstinline^destroy(x)^ on each handle~\see{actor-handle}. Using a handle after destroying it is undefined behavior, but it is safe to assign a new value to the handle. %TODO: Add use case for the following casting scenario. There is one %requirement of this design: `static_cast(self)` must return %the same pointer as `reinterpret_cast(self)` for any actor %`self`. Otherwise, our assumption that the actor object starts exactly 64 %Bytes after its control block would break. Luckily, this boils down to a %single limitation in practice: User-defined actors must not use virtual %inheritance. When trying to spawn actors that do make use of virtual %inheritance, CAF generates a compile-time error: `"actor subtype has illegal %memory alignment (probably due to virtual inheritance)"`. actor-framework-0.16.3/doc/tex/Registry.tex000066400000000000000000000036161341123343400206070ustar00rootroot00000000000000\section{Registry} \label{registry} The actor registry in CAF keeps track of the number of running actors and allows to map actors to their ID or a custom atom~\see{atom} representing a name. The registry does \emph{not} contain all actors. Actors have to be stored in the registry explicitly. Users can access the registry through an actor system by calling \lstinline^system.registry()^. The registry stores actors using \lstinline^strong_actor_ptr^ \see{actor-pointer}. Users can use the registry to make actors system-wide available by name. The middleman~\see{middleman} uses the registry to keep track of all actors known to remote nodes in order to serialize and deserialize them. Actors are removed automatically when they terminate. It is worth mentioning that the registry is not synchronized between connected actor system. Each actor system has its own, local registry in a distributed setting. \begin{center} \begin{tabular}{ll} \textbf{Types} & ~ \\ \hline \lstinline^name_map^ & \lstinline^unordered_map^ \\ \hline ~ & ~ \\ \textbf{Observers} & ~ \\ \hline \lstinline^strong_actor_ptr get(actor_id)^ & Returns the actor associated to given ID. \\ \hline \lstinline^strong_actor_ptr get(atom_value)^ & Returns the actor associated to given name. \\ \hline \lstinline^name_map named_actors()^ & Returns all name mappings. \\ \hline \lstinline^size_t running()^ & Returns the number of currently running actors. \\ \hline ~ & ~ \\ \textbf{Modifiers} & ~ \\ \hline \lstinline^void put(actor_id, strong_actor_ptr)^ & Maps an actor to its ID. \\ \hline \lstinline^void erase(actor_id)^ & Removes an ID mapping from the registry. \\ \hline \lstinline^void put(atom_value, strong_actor_ptr)^ & Maps an actor to a name. \\ \hline \lstinline^void erase(atom_value)^ & Removes a name mapping from the registry. \\ \hline \end{tabular} \end{center} actor-framework-0.16.3/doc/tex/RemoteSpawn.tex000066400000000000000000000016651341123343400212450ustar00rootroot00000000000000\section{Remote Spawning of Actors \experimental} \label{remote-spawn} Remote spawning is an extension of the dynamic spawn using run-time type names \see{add-custom-actor-type}. The following example assumes a typed actor handle named \lstinline^calculator^ with an actor implementing this messaging interface named "calculator". \cppexample[125-143]{remoting/remote_spawn} We first connect to a CAF node with \lstinline^middleman().connect(...)^. On success, \lstinline^connect^ returns the node ID we need for \lstinline^remote_spawn^. This requires the server to open a port with \lstinline^middleman().open(...)^ or \lstinline^middleman().publish(...)^. Alternatively, we can obtain the node ID from an already existing remote actor handle---returned from \lstinline^remote_actor^ for example---via \lstinline^hdl->node()^. After connecting to the server, we can use \lstinline^middleman().remote_spawn<...>(...)^ to create actors remotely. actor-framework-0.16.3/doc/tex/Scheduler.tex000066400000000000000000000166121341123343400207150ustar00rootroot00000000000000\section{Scheduler} \label{scheduler} The CAF runtime maps N actors to M threads on the local machine. Applications build with CAF scale by decomposing tasks into many independent steps that are spawned as actors. In this way, sequential computations performed by individual actors are small compared to the total runtime of the application, and the attainable speedup on multi-core hardware is maximized in agreement with Amdahl's law. Decomposing tasks implies that actors are often short-lived. Assigning a dedicated thread to each actor would not scale well. Instead, CAF includes a scheduler that dynamically assigns actors to a pre-dimensioned set of worker threads. Actors are modeled as lightweight state machines. Whenever a \emph{waiting} actor receives a message, it changes its state to \emph{ready} and is scheduled for execution. CAF cannot interrupt running actors because it is implemented in user space. Consequently, actors that use blocking system calls such as I/O functions can suspend threads and create an imbalance or lead to starvation. Such ``uncooperative'' actors can be explicitly detached by the programmer by using the \lstinline^detached^ spawn option, e.g., \lstinline^system.spawn(my_actor_fun)^. The performance of actor-based applications depends on the scheduling algorithm in use and its configuration. Different application scenarios require different trade-offs. For example, interactive applications such as shells or GUIs want to stay responsive to user input at all times, while batch processing applications demand only to perform a given task in the shortest possible time. Aside from managing actors, the scheduler bridges actor and non-actor code. For this reason, the scheduler distinguishes between external and internal events. An external event occurs whenever an actor is spawned from a non-actor context or an actor receives a message from a thread that is not under the control of the scheduler. Internal events are send and spawn operations from scheduled actors. \subsection{Policies} \label{scheduler-policy} The scheduler consists of a single coordinator and a set of workers. The coordinator is needed by the public API to bridge actor and non-actor contexts, but is not necessarily an active software entity. The scheduler of CAF is fully customizable by using a policy-based design. The following class shows a \emph{concept} class that lists all required member types and member functions. A policy provides the two data structures \lstinline^coordinator_data^ and \lstinline^worker_data^ that add additional data members to the coordinator and its workers respectively, e.g., work queues. This grants developers full control over the state of the scheduler. \begin{lstlisting} struct scheduler_policy { struct coordinator_data; struct worker_data; void central_enqueue(Coordinator* self, resumable* job); void external_enqueue(Worker* self, resumable* job); void internal_enqueue(Worker* self, resumable* job); void resume_job_later(Worker* self, resumable* job); resumable* dequeue(Worker* self); void before_resume(Worker* self, resumable* job); void after_resume(Worker* self, resumable* job); void after_completion(Worker* self, resumable* job); }; \end{lstlisting} Whenever a new work item is scheduled---usually by sending a message to an idle actor---, one of the functions \lstinline^central_enqueue^, \lstinline^external_enqueue^, and \lstinline^internal_enqueue^ is called. The first function is called whenever non-actor code interacts with the actor system. For example when spawning an actor from \lstinline^main^. Its first argument is a pointer to the coordinator singleton and the second argument is the new work item---usually an actor that became ready. The function \lstinline^external_enqueue^ is never called directly by CAF. It models the transfer of a task to a worker by the coordinator or another worker. Its first argument is the worker receiving the new task referenced in the second argument. The third function, \lstinline^internal_enqueue^, is called whenever an actor interacts with other actors in the system. Its first argument is the current worker and the second argument is the new work item. Actors reaching the maximum number of messages per run are re-scheduled with \lstinline^resume_job_later^ and workers acquire new work by calling \lstinline^dequeue^. The two functions \lstinline^before_resume^ and \lstinline^after_resume^ allow programmers to measure individual actor runtime, while \lstinline^after_completion^ allows to execute custom code whenever a work item has finished execution by changing its state to \emph{done}, but before it is destroyed. In this way, the last three functions enable developers to gain fine-grained insight into the scheduling order and individual execution times. \subsection{Work Stealing} \label{work-stealing} The default policy in CAF is work stealing. The key idea of this algorithm is to remove the bottleneck of a single, global work queue. The original algorithm was developed for fully strict computations by Blumofe et al in 1994. It schedules any number of tasks to \lstinline^P^ workers, where \lstinline^P^ is the number of processors available. \singlefig{stealing}{Stealing of work items}{fig-stealing} Each worker dequeues work items from an individual queue until it is drained. Once this happens, the worker becomes a \emph{thief}. It picks one of the other workers---usually at random---as a \emph{victim} and tries to \emph{steal} a work item. As a consequence, tasks (actors) are bound to workers by default and only migrate between threads as a result of stealing. This strategy minimizes communication between threads and maximizes cache locality. Work stealing has become the algorithm of choice for many frameworks. For example, Java's Fork-Join (which is used by Akka), Intel's Threading Building Blocks, several OpenMP implementations, etc. CAF uses a double-ended queue for its workers, which is synchronized with two spinlocks. One downside of a decentralized algorithm such as work stealing is, that idle states are hard to detect. Did only one worker run out of work items or all? Since each worker has only local knowledge, it cannot decide when it could safely suspend itself. Likewise, workers cannot resume if new job items arrived at one or more workers. For this reason, CAF uses three polling intervals. Once a worker runs out of work items, it tries to steal items from others. First, it uses the \emph{aggressive} polling interval. It falls back to a \emph{moderate} interval after a predefined number of trials. After another predefined number of trials, it will finally use a \emph{relaxed} interval. Per default, the \emph{aggressive} strategy performs 100 steal attempts with no sleep interval in between. The \emph{moderate} strategy tries to steal 500 times with 50 microseconds sleep between two steal attempts. Finally, the \emph{relaxed} strategy runs indefinitely but sleeps for 10 milliseconds between two attempts. These defaults can be overridden via system config at startup~\see{system-config}. \subsection{Work Sharing} \label{work-sharing} Work sharing is an alternative scheduler policy in CAF that uses a single, global work queue. This policy uses a mutex and a condition variable on the central queue. Thus, the policy supports only limited concurrency but does not need to poll. Using this policy can be a good fit for low-end devices where power consumption is an important metric. % TODO: profiling section actor-framework-0.16.3/doc/tex/Streaming.tex000066400000000000000000000101551341123343400207240ustar00rootroot00000000000000\section{Streaming\experimental} \label{streaming} Streams in CAF describe data flow between actors. We are not aiming to provide functionality similar to Apache projects like Spark, Flink or Storm. Likewise, we have different goals than APIs such as RxJava, Reactive Streams, etc. Streams complement asynchronous messages, request/response communication and publish/subscribe in CAF. In a sense, actor streams in CAF are a building block that users could leverage for building feature-complete stream computation engines or reactive high-level Big Data APIs. A stream establishes a logical channel between two or more actors for exchanging a potentially unbound sequence of values. This channel uses demand signaling to guarantee that senders cannot overload receivers. \singlefig{stream}{Streaming Concept}{stream} Streams are directed and data flows only \emph{downstream}, i.e., from sender (source) to receiver (sink). Establishing a stream requires a handshake in order to initialize required state and signal initial demand. \singlefig{stream-roles}{Streaming Roles}{stream-roles} CAF distinguishes between three roles in a stream: (1) a \emph{source} creates streams and generates data, (2) a \emph{stage} transforms or filters data, and (3) a \emph{sink} terminates streams by consuming data. We usually draw streams as pipelines for simplicity. However, sources can have any number of outputs (downstream actors). Likewise, sinks can have any number of inputs (upstream actors) and stages can multiplex N inputs to M outputs. Hence, streaming topologies in CAF support arbitrary complexity with forks and joins. \subsection{Stream Managers} Streaming-related messages are handled separately. Under the hood, actors delegate to \emph{stream managers} that in turn allow customization of their behavior with \emph{drivers} and \emph{downstream managers}. \singlefig{stream-manager}{Internals of Stream Managers}{fig-stream-manager} Users usually can skip implementing driver classes and instead use the lambda-based interface showcased in the following sections. Drivers implement the streaming logic by taking inputs from upstream actors and pushing data to the downstream manager. A source has no input buffer. Hence, drivers only provide a \emph{generator} function that downstream managers call according to demand. A downstream manager is responsible for dispatching data to downstream actors. The default implementation broadcasts data, i.e., all downstream actors receive the same data. The downstream manager can also perform any sort multi- or anycast. For example, a load-balancer would use an anycast policy to dispatch data to the next available worker. \clearpage \subsection{Defining Sources} \cppexample[17-52]{streaming/integer_stream} The simplest way to defining a source is to use the \lstinline^make_source^ function and pass it three arguments: \emph{initializer} for the state, \emph{generator} for producing values, and \emph{predicate} for signaling the end of the stream. \clearpage \subsection{Defining Stages} \cppexample[54-87]{streaming/integer_stream} The function \lstinline^make_stage^ also takes three lambdas but additionally the received input stream handshake as first argument. Instead of a predicate, \lstinline^make_stage^ only takes a finalizer, since the stage does not produce data on its own and a stream terminates if no more sources exist. \clearpage \subsection{Defining Sinks} \cppexample[89-120]{streaming/integer_stream} The function \lstinline^make_sink^ is similar to \lstinline^make_stage^, except that is does not produce outputs. \clearpage \subsection{Initiating Streams} \cppexample[133-139]{streaming/integer_stream} In our example, we always have a source \lstinline^int_source^ and a sink \lstinline^int_sink^ with an optional stage \lstinline^int_selector^. Sending \lstinline^open_atom^ to the source initiates the stream and the source will respond with a stream handshake. Using the actor composition in CAF (\lstinline^snk * src^ reads \emph{sink after source}) allows us to redirect the stream handshake we send in \lstinline^caf_main^ to the sink (or to the stage and then from the stage to the sink). actor-framework-0.16.3/doc/tex/TypeInspection.tex000066400000000000000000000131061341123343400217470ustar00rootroot00000000000000\section{Type Inspection (Serialization and String Conversion)} \label{type-inspection} CAF is designed with distributed systems in mind. Hence, all message types must be serializable and need a platform-neutral, unique name that is configured at startup \see{add-custom-message-type}. Using a message type that is not serializable causes a compiler error \see{unsafe-message-type}. CAF serializes individual elements of a message by using the inspection API. This API allows users to provide code for serialization as well as string conversion with a single free function. The signature for a class \lstinline^my_class^ is always as follows: \begin{lstlisting} template typename Inspector::result_type inspect(Inspector& f, my_class& x) { return f(...); } \end{lstlisting} The function \lstinline^inspect^ passes meta information and data fields to the variadic call operator of the inspector. The following example illustrates an implementation for \lstinline^inspect^ for a simple POD struct. \cppexample[23-33]{custom_type/custom_types_1} The inspector recursively inspects all data fields and has builtin support for (1) \lstinline^std::tuple^, (2) \lstinline^std::pair^, (3) C arrays, (4) any container type with \lstinline^x.size()^, \lstinline^x.empty()^, \lstinline^x.begin()^ and \lstinline^x.end()^. We consciously made the inspect API as generic as possible to allow for extensibility. This allows users to use CAF's types in other contexts, to implement parsers, etc. \subsection{Inspector Concept} The following concept class shows the requirements for inspectors. The placeholder \lstinline^T^ represents any user-defined type. For example, \lstinline^error^ when performing I/O operations or some integer type when implementing a hash function. \begin{lstlisting} Inspector { using result_type = T; if (inspector only requires read access to the state of T) static constexpr bool reads_state = true; else static constexpr bool writes_state = true; template result_type operator()(Ts&&...); } \end{lstlisting} A saving \lstinline^Inspector^ is required to handle constant lvalue and rvalue references. A loading \lstinline^Inspector^ must only accept mutable lvalue references to data fields, but still allow for constant lvalue references and rvalue references to annotations. \subsection{Annotations} Annotations allow users to fine-tune the behavior of inspectors by providing addition meta information about a type. All annotations live in the namespace \lstinline^caf::meta^ and derive from \lstinline^caf::meta::annotation^. An inspector can query whether a type \lstinline^T^ is an annotation with \lstinline^caf::meta::is_annotation::value^. Annotations are passed to the call operator of the inspector along with data fields. The following list shows all annotations supported by CAF: \begin{itemize} \item \lstinline^type_name(n)^: Display type name as \lstinline^n^ in human-friendly output (position before data fields). \item \lstinline^hex_formatted()^: Format the following data field in hex format. \item \lstinline^omittable()^: Omit the following data field in human-friendly output. \item \lstinline^omittable_if_empty()^: Omit the following data field if it is empty in human-friendly output. \item \lstinline^omittable_if_none()^: Omit the following data field if it equals \lstinline^none^ in human-friendly output. \item \lstinline^save_callback(f)^: Call \lstinline^f^ when serializing (position after data fields). \item \lstinline^load_callback(f)^: Call \lstinline^f^ after deserializing all data fields (position after data fields). \end{itemize} \subsection{Backwards and Third-party Compatibility} CAF evaluates common free function other than \lstinline^inspect^ in order to simplify users to integrate CAF into existing code bases. Serializers and deserializers call user-defined \lstinline^serialize^ functions. Both types support \lstinline^operator&^ as well as \lstinline^operator()^ for individual data fields. A \lstinline^serialize^ function has priority over \lstinline^inspect^. When converting a user-defined type to a string, CAF calls user-defined \lstinline^to_string^ functions and prefers those over \lstinline^inspect^. \subsection{Whitelisting Unsafe Message Types} \label{unsafe-message-type} Message types that are not serializable cause compile time errors when used in actor communication. When using CAF for concurrency only, this errors can be suppressed by whitelisting types with \lstinline^CAF_ALLOW_UNSAFE_MESSAGE_TYPE^. The macro is defined as follows. % TODO: expand example here\cppexample[linerange={50-54}]{../../libcaf_core/caf/allowed_unsafe_message_type.hpp} \clearpage \subsection{Splitting Save and Load Operations} If loading and storing cannot be implemented in a single function, users can query whether the inspector is loading or storing. For example, consider the following class \lstinline^foo^ with getter and setter functions and no public access to its members. \cppexample[20-49]{custom_type/custom_types_3} \clearpage Since there is no access to the data fields \lstinline^a_^ and \lstinline^b_^ (and assuming no changes to \lstinline^foo^ are possible), we need to split our implementation of \lstinline^inspect^ as shown below. \cppexample[76-103]{custom_type/custom_types_3} The purpose of the scope guard in the example above is to write the content of the temporaries back to \lstinline^foo^ at scope exit automatically. Storing the result of \lstinline^f(...)^ in a temporary first and then writing the changes to \lstinline^foo^ is not possible, because \lstinline^f(...)^ can return \lstinline^void^. actor-framework-0.16.3/doc/tex/UsingAout.tex000066400000000000000000000016461341123343400207160ustar00rootroot00000000000000\section{Using \texttt{aout} -- A Concurrency-safe Wrapper for \texttt{cout}} When using \lstinline^cout^ from multiple actors, output often appears interleaved. Moreover, using \lstinline^cout^ from multiple actors -- and thus from multiple threads -- in parallel should be avoided regardless, since the standard does not guarantee a thread-safe implementation. By replacing \texttt{std::cout} with \texttt{caf::aout}, actors can achieve a concurrency-safe text output. The header \lstinline^caf/all.hpp^ also defines overloads for \texttt{std::endl} and \texttt{std::flush} for \lstinline^aout^, but does not support the full range of ostream operations (yet). Each write operation to \texttt{aout} sends a message to a `hidden' actor. This actor only prints lines, unless output is forced using \lstinline^flush^. The example below illustrates printing of lines of text from multiple actors (in random order). \cppexample{aout} actor-framework-0.16.3/doc/tex/Utility.tex000066400000000000000000000042351341123343400204400ustar00rootroot00000000000000\section{Utility} \label{utility} CAF includes a few utility classes that are likely to be part of C++ eventually (or already are in newer versions of the standard). However, until these classes are part of the standard library on all supported compilers, we unfortunately have to maintain our own implementations. \subsection{Class \lstinline^optional^} \label{optional} Represents a value that may or may not exist. \begin{center} \begin{tabular}{ll} \textbf{Constructors} & ~ \\ \hline \lstinline^(T value)^ & Constructs an object with a value. \\ \hline \lstinline^(none_t = none)^ & Constructs an object without a value. \\ \hline ~ & ~ \\ \textbf{Observers} & ~ \\ \hline \lstinline^explicit operator bool()^ & Checks whether the object contains a value. \\ \hline \lstinline^T* operator->()^ & Accesses the contained value. \\ \hline \lstinline^T& operator*()^ & Accesses the contained value. \\ \hline \end{tabular} \end{center} \subsection{Class \lstinline^expected^} Represents the result of a computation that \emph{should} return a value. If no value could be produced, the \lstinline^expected^ contains an \lstinline^error^ \see{error}. \begin{center} \begin{tabular}{ll} \textbf{Constructors} & ~ \\ \hline \lstinline^(T value)^ & Constructs an object with a value. \\ \hline \lstinline^(error err)^ & Constructs an object with an error. \\ \hline ~ & ~ \\ \textbf{Observers} & ~ \\ \hline \lstinline^explicit operator bool()^ & Checks whether the object contains a value. \\ \hline \lstinline^T* operator->()^ & Accesses the contained value. \\ \hline \lstinline^T& operator*()^ & Accesses the contained value. \\ \hline \lstinline^error& error()^ & Accesses the contained error. \\ \hline \end{tabular} \end{center} \subsection{Constant \lstinline^unit^} The constant \lstinline^unit^ of type \lstinline^unit_t^ is the equivalent of \lstinline^void^ and can be used to initialize \lstinline^optional^ and \lstinline^expected^. \subsection{Constant \lstinline^none^} The constant \lstinline^none^ of type \lstinline^none_t^ can be used to initialize an \lstinline^optional^ to represent ``nothing''. actor-framework-0.16.3/doc/tex/conf.py000066400000000000000000000226441341123343400175560ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # CAF documentation build configuration file, created by # sphinx-quickstart on Fri Jun 3 11:27:36 2016. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # # import os # import sys # sys.path.insert(0, os.path.abspath('.')) # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. # # needs_sphinx = '1.0' import sphinx_rtd_theme # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] source_suffix = '.rst' # The encoding of source files. # # source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'CAF' copyright = u'2016, Dominik Charousset' author = u'Dominik Charousset' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = u'0.16.0' # The full version, including alpha/beta/rc tags. release = u'0.16.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: # # today = '' # # Else, today_fmt is used as the format for a strftime call. # # today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] # The reST default role (used for this markup: `text`) to use for all # documents. # # default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. # # add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). # # add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. # # show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' highlight_language = 'C++' # A list of ignored prefixes for module index sorting. # modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. # keep_warnings = False # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # # html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] # The name for this set of Sphinx documents. # " v documentation" by default. # # html_title = u'CAF v0.15' # A shorter title for the navigation bar. Default is the same as html_title. # # html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. # # html_logo = None # The name of an image file (relative to this directory) to use as a favicon of # the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # # html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. # # html_extra_path = [] # If not None, a 'Last updated on:' timestamp is inserted at every page # bottom, using the given strftime format. # The empty string is equivalent to '%b %d, %Y'. # # html_last_updated_fmt = None # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # # html_additional_pages = {} # If false, no module index is generated. # # html_domain_indices = True # If false, no index is generated. # # html_use_index = True # If true, the index is split into individual pages for each letter. # # html_split_index = False # If true, links to the reST sources are added to the pages. # # html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. # # html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. # # html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # # html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = None # Language to be used for generating the HTML full-text search index. # Sphinx supports the following languages: # 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' # 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh' # # html_search_language = 'en' # A dictionary with options for the search language support, empty by default. # 'ja' uses this config value. # 'zh' user can custom change `jieba` dictionary path. # # html_search_options = {'type': 'default'} # The name of a javascript file (relative to the configuration directory) that # implements a search results scorer. If empty, the default will be used. # # html_search_scorer = 'scorer.js' # Output file base name for HTML help builder. htmlhelp_basename = 'CAFdoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # # 'preamble': '', # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'CAF.tex', u'CAF Documentation', u'Dominik Charousset', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # # latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # # latex_use_parts = False # If true, show page references after internal links. # # latex_show_pagerefs = False # If true, show URL addresses after external links. # # latex_show_urls = False # Documents to append as an appendix to all manuals. # # latex_appendices = [] # If false, no module index is generated. # # latex_domain_indices = True # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'caf', u'CAF Documentation', [author], 1) ] # If true, show URL addresses after external links. # # man_show_urls = False # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'CAF', u'CAF Documentation', author, 'CAF', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. # # texinfo_appendices = [] # If false, no module index is generated. # # texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. # # texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. # # texinfo_no_detailmenu = False actor-framework-0.16.3/doc/tex/exec_pandoc.sh000077500000000000000000000007571341123343400210670ustar00rootroot00000000000000#!/bin/bash blacklist="manual.tex variables.tex colors.tex newcommands.tex" inBlacklist() { for e in $blacklist; do [[ "$e" == "$1" ]] && return 0 done return 1 } for i in *.tex ; do if inBlacklist $i ; then continue fi out_file=$(basename $i .tex) echo "$i => $out_file" cat colors.tex variables.tex newcommands.tex $i | ./explode_lstinputlisting.py | pandoc --filter=$PWD/filter.py --wrap=none --listings -f latex -o ${out_file}.rst done sphinx-build -b html . html actor-framework-0.16.3/doc/tex/explode_lstinputlisting.py000077500000000000000000000022111341123343400236140ustar00rootroot00000000000000#!/usr/bin/env python import sys import re def parse_range(astr): result = set() for part in astr.split(','): x = part.split('-') result.update(range(int(x[0]), int(x[-1]) + 1)) return sorted(result) def print_listing(line_range, fname): print('\\begin{lstlisting}') if not line_range: with open(fname, 'r') as fin: sys.stdout.write(fin.read()) else: with open(fname) as mfile: for num, line in enumerate(mfile, 1): if num in line_range: sys.stdout.write(line) print('\\end{lstlisting}') def cppexample(line_range, fname): print_listing(line_range, '../../examples/{0}.cpp'.format(fname)) def iniexample(line_range, fname): print_listing(line_range, '../../examples/{0}.ini'.format(fname)) def sourcefile(line_range, fname): print_listing(line_range, '../../{0}'.format(fname)) rx = re.compile(r"\\(cppexample|iniexample|sourcefile)(?:\[(.+)\])?{(.+)}") for line in sys.stdin: m = rx.match(line) if not m: sys.stdout.write(line) else: locals()[m.group(1)](parse_range(m.group(2)), m.group(3)) actor-framework-0.16.3/doc/tex/fig-png/000077500000000000000000000000001341123343400175765ustar00rootroot00000000000000actor-framework-0.16.3/doc/tex/fig-png/actor_types.png000066400000000000000000010327661341123343400226570ustar00rootroot00000000000000PNG  IHDR6[sRGB pHYs  iTXtXML:com.adobe.xmp 5 2 1 2@IDATxUه{b`WF#&֨FQb/06l+QD {gr-ݻwrLg;:G @ @ @ @ @ @ @ P3f2P@@q[ųɁ Xz10@@ KD@h?B@(Neِ@5@`#C D IKE!@hf]E, - @ @ f 0٥g @ @h8H7!-@ Њ3ԩ[dE;@ @ KK?~Uz^ʩ/?O3gt3f(XRwIJX5*Yj_k>qDVEs!@ J, @ ꪫoڵko>7sW_ݝx>E|A_;|jܭZ5X3<}?=՟ a̘1O>n!M4ɧOi{=v/S2,㮼XN"XNw9bv 2$ˍ|[gu"W\tN,^xc "U[ם!g?/c= t{aK/{OO @ @32"@ K,)YjѣGNJSLɔ;Cg=9cc=E̢LJLdFY]q0sr_}b"i|}1A\01G}th2>~d%(ZO}?Ӿ|㍍d|5?}עLtN yh]kC@.Ӣ@ @hNG|7!裏F6hb|ɞ{t%uYc>a Y=OxÇǺfMۜk}79쳓6(^W^j%*,ciѬbYM6$g,޽{'K.dLWqv5W䛅4/y2"U5?`   7pdfyf|Gqi1w#&")E  @ Мo6Šw9"u٪sFu]w]b5\۴Mt-ib~ШHciAˎ7L /Amݖ;6cՉ5jT;~(6hРw):kǨ}w}qz(֫o`J֪/;['!_t&@9_b%w%8"=p FVXa38MśoٿEy&LprBzwygHv&ۿ?Owv$ڙ{XJ֪뮻zjfꮸ gևq[n׿|i41X&D.׿5 @@ ک21@V {Iv{W]^}@ffEQjsY;8cn-A$LAWZ\T;bҋiG- 8_?`OfҪRZUkf).r֓fFyc9 AM 6mE @D]w=#1-DM Ev9//WLO|;KY8*l.Rr\ Yq\7mڴLD%3fĴW^9ƛ#RZUkCB!7]ur@%P @@[ 0k[$s @m0.Q\E^Ϟ=݅^+袋"0s#i)}!ApZ`񋳻, UXIo3m袋|d-[q^,(Cs{CwsrתZ7_HnzN(gN^\`xB J ֺ  |7N>dgV?uE̻۷oȈ#2+` vtVw[^}\e%46F;TXxk믿\AL[pԩzu? ;Qruv ٍd5h!$؇ 1z1 @mme' @&,Ht !˅5b1']N駟zEݏH|Zwu=;m>}zlԈ W^Q\TSO=mڱcPI4]/8r-3r"sJ~t1~IG3tfbt49q{ @h`l˫!@.?Y򸜶`_ P%^Nr&O2R}GwyaV(FK{r a Qx.s:vcå\%>NiÆ s_|q\O:$;|Id$jo7RްChxC;J]j_%9Vt^֝:^W_9Y)@ @@i7 iI.]fGs+]1]uYg{m6Q?!Ĭuq:Nvbs"w}w}NL&ʅjǼP'։Sx3Kxtt5okbǞ"FsLfvf=<^ P@fQ @ 4'Џ76I f&NI7VhGhK+p,?s$K~ؿviʋO#vl:RxJWVjZ]P0::4ojyHH@fQ @v wXsb H?m{q1޽Kn„ CNJAN\^~e#Ɲ;wv&mb̙v&br˻Zt`/;nV(V` ~r馛fb,X!h=z3fw#;vX&fU/:V/.rcNGgm ewY@-!kIX @RNYYNP\N]B 0 2~@pH @hye!qqرeա0 @@"cZF@2nԂ f$c3§k@hT_@Ԩ @ @ P`c x  Pc]Vc p!@ K , @ @ 2 X M I0dl+ @ M uc:8 @`XsKƀ!@ @ r 0`$ @ @95d Zo=^(kZ/W_U9r0`9sgx㍖>lƗCYw!k^!@c3@K@@ W^c I%=O8__.|-2eg}܄ ܬw^/~_~)qԩNv?h%Bt @c#C@ 83ܗ_~N9唘}gz 1V"3fp -|駵2l @ 0  46z]qO>nUVw[j}G1 @ r 0`$ 6Kଳr;#qwsN^  @@ @O@wN6u?u>pW]u{W.nVs￿dM ֝4i뮻ܨQ[vء`tz)' u]ש޶n.?Fm~߹[n 4ȭ.tСCO?^{5r˹M7N> 5l0? .Yg뮻>wRN~q~~{nZʏsu-X{1;uwc)A:jM8!..j}\tE 6;~=ۻݻ/]v5\ƌK@o|_ÇcxWرn܁feP?K]L_*jRws @ @D ѧ!amSg3w_2sqwqyͣnbS|yM3+9C^߾}7=C޵^9NuMet;<>,H2bĈXV~)lbB52)*eo㏏F/suf%&1B v?bzs1Gb^|z?>O>,2\ Ӊ 6lz~>_e̩M2lw1e JYPg%{1]֜CYT@ @ @9 xa!?KnbVh/sDH6zOPZϞxŧe]2}/ TOBD VecYvT^LUN(؝>Ϭ=K󠝘a_a b[]rJگdV]ƜCYT@ܞ@ @hf^iRF;RC>ߎl;6$ ʺ/$X->ߎǬ>,gy|A!3|([g̴m.w}:oᆘ"A$;BRv,D`gGgc; RAD^}/ٳ!CdAԩS?wy'ӧwI\ G{E!3-ʈT+ݟ|12PU'o{ @ @9 h %X#vg^oj뭷K|Į`zB8ʜ p Uv(8 wA"-Rbޚs{d_=z:{@dB%iLXPNWCO<k}{:8p`:9%瞉+et5͍zQe;찘Ķb )wOJg߅j̹ <@ I 41x@ TJ U<,坊Qegm̩S:9s 99rwhGs"2,| &|9;&^BY9SQ0QldcǎKw_gGYy#'(K:[/e9L7h\rL~/fY0aw&3ș)K` %祙Ƽйsg'0ƍ I)g?7(#RVӕJ a*9&O@ #x,i j< 䂣իW^y*Tn:WG 8/=սnt!Oݏ_Vd<]^qaw_~7|Svy1I>}Y6T` wozqeS֮ wqGL狵,DÙ._i=>*gV]tnԃ @hZM˛ @F :]v~w}wf^tPN:'.2Nǩ 9[ׯX<~ܡKh<(7x#Sdʔ)4:OW$4Gi/6,S^/\% .BjCwSG7XsCu$=Q {hWAL I1~ꩧ!C]{>mi|W2{K/49}NLJѧa?)Q_`|C(LSs An0P|K37;ݬ ;ĄW|s]wM̡Ϸ#ĉ LĄ[oT'gު}jJ|͉Yc<'1̴Uf*RɞVJ ՘s X(&#O~؃@ @I@k/RFPM4 "a= 7.|!($`b,ݻwӎ&A Gb:3 X1BY9m jf݊=ET^"Z87*?~,={̴~ BO?NrFU;sa`=Ktȧy=JA"KNz><O;Yx ޙvԦ{."o([=ݟSws8h)RX@]usYg HSw*AGu,WYTDٷJ+eiɱY,cř^M>D%w:n 4?~}&pz{= 3+6yإ#Ν;{,鼆V1yd?9fI{ֱI&y?&fR]ӑl90b뢲:baӧz˳y\܈/Jg%߅F.MAH* *!*F@hiT`lio 馛Ys9Džüt\t;yH-7L@ 06{z %ظ}UVY%fw[}G1g/(>nذa{Cꪫsh @@3@`l&t @:[y!)>8߻s9'@s=z~7r-peH @mmMB xݴi\.]]bK/_~q{1b{Fm$1+[ou^z{饗ܘ1cr-:u9J+1YK;찃oҤInr>w ~zNq=z8:8,Rvr-ުI\pA:]w 4Ƚn5pzhH܏A@߿;xG}n6w=k.XKI,u?_GsWvcǎurJCd=?l01@ @@G*뭷oÄ\tE{>~~)ӆ #Ɋ+91nW2pLy_dEC_vY',L^M>6Ֆ kyզwɏ?W}6}5\1~;74B} N9o64*q w3W,!?yy .ȴLe?`G}뮻.$ŧ؄1^WDl7|XDnBa2~&|̞K:^SDؿPz^9ĜIJ.TOQX`ĄwMV_}uu"N |wI @ f&ؖ.d9  HB/1+/O$.$-}Q gj^`xsI'j *#͢,yꩧ> 1˱DՏDUW]51^ 曓%\x≙̒ΧkvIrw'+z3u*yZ{gyƋv71 ,|ƫ`ryǧi,6}D @ӾY%f/dM|Y|4ḾEb>]U/ 0j]FZ+f͗Uc#m5*1O>Okgz9 c;3+7˽tW"05oϼ&fC%fveL_f_婞BA4KU_>ڃZy\O%+/W8 nghTO,޽{=obǣyo{ @ @9 hu'&Ȃ'7HQSYJSĻB?%B)_W:ю&v0Ĺ{/w '^ztշ>ݎp#!g^Qy]5Y`!xAŬr۷}1y؎"T/|w<1/gGc""?1'9XdrOBuRYU#sv'bm)ݎs2$}c!v?Y;`XL;zўi5bGKؼH(w?F"|.FYtm!ٓ@ @Lmȏrƥ^`W*L!)je> բcwŴ۷/k~!Y}{Bvߠ/c腤vogw;*d_˒MT: 1r/&r7зoޛCgd(P!vWa^$Ժ0J ud X,s('חcva MȗA,t_N?tu+cX;X$+VP&J\(Xn|ɑcF[i$|I 41x@{uMr`an,Tiv3OrfUH ;G7n#Ιbv4X|Z!0jK!Aq9QtPYICg'grhi,-/hlvG[l~X L+az{9# 큰.*S|I9f1 |3E7W^r/G`GYz-rГEA{PʅLTivOc^^Hܹ}'rYOcrS[߯N LD[btv3+cgWFxgFvwHew:$R@ @@-Nlree,k]E'8` { &Fz#Zu Xw'޼v/>:c|r/fE'˪R܃>Qf#8yS Ǫ13'bboб✢ʊT}8}ڂ%O ' P32x@@F,rG`Oҝ}oAh _~3#0̙Ll+_Jĉ}+S2]G,Jo{)MHg`x;}Li跗/̣NnFdh23G2ELt 29YXjL!,RN4߷gGcp\{};#.TeR nV㏆짶_(W_*sL @@&تA@s8餓9'A# rkc>qM6'ܣzꝙxcABy\q * w^C h>:¬PIjGcR9zͣ{72ySLqGuw4ӻwx3S^Ruŷj6fi7 Ѹ :95JiqBSOC {3/nWvAX*<;r*syue؝y*vþ+ mW[ۯȳ8>骇~DN䪫D @ @-?Wa%qDZ阨ǧG}wnqG&۷=zHB.3<"MJ.Iߟ?1!)1O>8113J^KtV9V?z/6p8vءPdk8*mBSlDǥ?':&}DZ }On=_OJLyb[iwuՄVѱdۮ2v?eb°S{[n/e> N[T'̌{9qѱpyK?|Ѻ+l_yllQ>G>|1T%^*=gݽhAQ,XcwZS{_㗗n *P GcٳgL<u17+0#;h<. %)ݎ4?&mֶkV=T{ݷm\Ixݔc%)q%iqUkYfb-Xb69?{ @5M`= ~{[sÒjgBd\ǎ9͜9ә@^yx,2mPy믻{Ϸ*&6*FwqpPr۟6m?{LkҜx&Ǐw/R֝O0{܅rbhs^ ~O<ٯx AtҤINDzMp C:mVnW/zĿ.fz-WbV뺀$R/'UmUs#{@7`:G'˗_@@'Z1@@(@M%̣8Xn `ю WLMֻ馛Y:: =\pӽ;sH"~M ZSkj, A8dA@@`lJ-e;䍺 +5X2*8"Z#+FYM,g? YJ]eWSk1_3T@j |iM=A P+$x5E0woQZY15qQ%2\}ծk׮y1xvϟ7ŚbZ\5 @@k"0kk s @OΙ#gNFjk8N:9 ~G9Xq:" Ok @h0o¨ @<McnWޘ( @(J%E9@h`l  @LY B2@ @A`;kT @ @ aQ@ @ @dT  @ @J"JMOW @ @@n @ @$rgg}VҔG @ @ P,}d8 UBq)Oe @ @o)'gTJS @ @ dE29}QZ!@Q @ @ F|p]ǠǧU@ @ @3R: @ @ w1%PU @ @ lg`8>J`2*:K @ @(9lc#2ꨮ @ @ @m_lΕiaRm @ @ 6FG=Z2]@ @ nY= 0 膪 @ @@K"3>3jjCmM @ @ b{><<6ԖT@ @ @&Ap}oy 66 @ @h%6hJ3-@ @ 6jgnc׵MC @ @Cr 3%@ @ >{m '*NEmE @ @Z lا]礶ՇR@ @ @ ak~MQ@ @ 0؛RXL  @ @@%6:} @ PY+@> @ @ b! @ @c(@ @ #X  @ @@ED@ @ @bdH @ @%X/" @ @ @ 0#C: @ @ P/zQ @ @(F!@ @ z 0֋ z'X9@IDAT@ @@1Ȑ@ @ K`zKP oCܡB<`)RI Z, @E $EsȀ |.kk!@בG @$ :cM- 2 bL@!f) @ @c3G@ @ n5KD @h n6tuԩ% 1u5EY$y?nW  @5HK?jp2 /rc@{>駟G1ydyu1ԩSB -#={"+{}?ߝxUZ[ߚJedM J#mu7 @MN[nqݻw}6ytX]ou: @-G[02@j,+?V[g!@ PxQ &&0sL7묅]f( /\rt3f+tM4xuc O?y晧PviJ:חV&/&s9c'go}Λw@ P-oZ. @(@@[l?{ty=zxqlM7u/Zt[n[pK,g_hId r4"G%/c=|W9C_zk '.~7njO4ɧOi!Rxu4Ws{K/uoӝ0qDkg+qs;찃2dHh>v}w{[m[ /szrڵm]uUU-;_mosxFBO?u:htNCKZ8(" @ E@N^L{"*5:1{= +$|M Dˇfɘ 6,S+u[odfX7-0?^\z3mv)S'f؝Y4l+oZ`4؇7dycһw<ƍcgK 9|8E >h,BͤuQ*yˬ5=3ҥKbGcf׼͚2i~fHsӬ!>i)'@fE  @ МE@FH%\˜viQG'O"UG;}嗉u'(YJX u:蠐F^z=ԛc99-$0̴hGC6di1KVW_}ubǽ}v$[\QFǏ\ rF]w]?5\9nݺ6)$0ڽ!7ĺ<0Iԝ6mZr_yK16\uUc)hvt}wg{衇b\8"5E |I @ f&ԯJ!eUfN8bot:묘yeµ^رcCV|y䑱!P+0k"W^yeg{?;b~cCƛ+0Zrjp?~{"<@F|&}~hQf%-ݟ% \ :4WD֓!Or=y۽6,\s5cDt1~vu ^8"5E -J .sW 9 @-݇j,g,k_ !ޡKn=en6_/'/w+ZD^8v:əe]ޘk{7ysf~w '8=W@\s:w[,(QoL<=+ n}Ji|W^yř8_}G]y-74&1C!>B^$  4&CMG BY}S,ޘ%)eY&D3tՑgt Y7YDf㥱kNJZhLwucΎg5? k%bwH&Oʤ$⦃!@:hyoęt1$0Z/xV{wq yCvvdt;W*4g1bD]̼群)ɣ>ڵo>Xk|'>xhg1S#v;jYGnzgz޵N @ P@) I @)+4e^%#kc,td3]U{0Y- z)DBa?Y̋r|ԩxYW11ws)>aoQ)KC}g "5=8t !u1$; +!Ł:s?!=橼jonC $cSҦ/@J -0ީ .gϞr7x}{!smˊ.s:Rcy}K(|'҆ ktSӚO?mnx%V=YtSOu =󽓙;1ѱͅZ:Yt~zJ?N?t[oo٥-s>餓܎;rKoGy4UVY;\8" @ TD@VfDUku3cp&뭷^&Ď=|/9c2̪.k׮]&O/&|gw2&j<;11/#~5n.0s˄Ӭ:c l?Tvuɼznt;ұ 1 @@kYVeI @>,Ϙ @`>cz F&c#9@h6]>lãc@ @ @%%c R x R S 𻬅-Á `X/JC @ @)8yI @M I0ddmkZ,[ݒ2!@ @ 4ƦcMO @ @hu[ݒ2!@@i&N~aoV@#G3g% 4:ѣGZ}wƍ+N->|jy  $X  #0uTO;"knowzrw^N2>n„ nY3fO^O-3C/.ڰaFm=ؒ봄uw][|ݟgbA #а_57] @hZ"Zh!O3ו)B_8 _SN9#߿g$CZ4Řw}}wۋ  @@`l-+< @MH୷rW\qӧ[eUg@m8'|$ @@k!ZVy@Yg~WwG6at'#;wIjB ١@s/6mҥDʽ+NǞuj&ĺ\s3fL|(7|3< 2hނ ./e]mVns.hl;?O/۷ow򗿸vڥƸ{݈# Y%J9#s)o;íL:Smnskorxԩkܶn_z)sqw~,vGr4h[s5Kr!n=o[E;Q"q]o]cԾJjrf:UkwY%߭꿟:ߣG5,N:~RY(}wZk->? @ @h^uo>T*뭷oı:gݗUs5W㎋fL㏓ԀݗȗM(LƏ '|2YfebtNB䢋.cd=u8mݒ~)Qse?L^>`gJҵk׼65::>3yeo~|^9ĎƲoϯC:}Q}}~9k\[cuVN_aMƕ쿰~xGu42L% [h=MXNLl/{㏱J#ڷ"$7xcbΊ[y啓^{wQz1?6F{o޲Cdر>}喋iD&?I @ f&7i)$_}F~QH"Y_%f͒ |?sRWaVOYF&fη~5`b{>o]vL,s(TOBD V:N%h^ H#tb6Bu](bV;3 2I]l믿zꩾĬ|]1̢IԻDX @^`xœ/P q]oKSm5d.7ߜo&% !yTWm-P >o뭷T 6y=gM:v2Ck (UW}4t ] @֐O?G_n:2}1t3p4OK[9wQXr%믿yYR?d^" RwՙYUOcp Rr+)X8* {'驻 u wL\@ ,ݖ[n/7wFuԸ t5(Z%܇j2d@ Z!PiL' @D̂Hu!YdZbBaº#G:Hkfm$YDn9Pc]' (Bu 93F䄥PNgbyir(#9sw׸ܾjŸ^9t)U{=P99R;*]H%D6V(gH.QXW~]Ƀ @-cK^@U! *y-zꕗ,;OݕW^g,%H'+18{K^Ab[bw"+d=Znz!k 0.¹3],ȪKH0+5BSSN_MWOuB(/kY b,ƍ糂7b.1gb9UԷgͱ믿.-i @ 0r1X@h :b< ;4oGz wygݍt4,o0A珀 qsxmNǜe&qN"bZ :mזZ?:p8xvn;7)QhWi-%TkWSq%/~'7.RbݻUdcY~s۫~{(}W @@@`d P6^z)Cs>/N;'K+򊘗缴J$#n>} X֏>O/ׂ0 uڵRK9}BIqWcYNʊQsh/t]%JXgyr-ݬMƕTk\K/Nt<^Ǥ yl8k y;c^zi&!/F*X}РA>`Y" @-pQ < ^_eԷo_o]&^d<-'FABΤ^\xh!CDy3fx˱"].]|1c{xB!awI'?ϙ#r!TL2Ζ*]c5ZlָҾjq/'W>k ' H7d_Ohxh;pCu:bn?G&Mi/ΜdǼb  BnXBi@ @ PmtЌ*voKmOe쾶d=H.D}YS%v'֭[r 7v#O7Ą,3k _ǜ$~lY&kbw|;f3+D}I~'[oOS'|2}Etiu]n:9_+u&]/|ϳc٣GDc<wϧL{ٽ.쒨ok֧o򥾘닉ݳYoJ׸aXJ_X{@_w;ݦ>ͮ"Hθׄ>u6h#MXOv}&>v*q؞>s9'ab3]Եaf}~1':CKt6F@7 @֐ߥ$(D,h&LHD AĄP/-t1bDeB=:Y'wmL:D x)R裏{iO/Ad:묳TBh6n̫gh c(PLkHBck\lV5XJ_X{c=6Y`zj%O6-Ruرcʹv]˙Fx /fQ1L'.E` ePn_nF{ @5M`= D-XH[gOat_J+ +cLWXɓd 3NJuXG::k+XYA:9бYvg֛άzHX+0cW35kXs/ի+{~i+t xSrYAwUi ~_%o{PV9Y~w#3<_|qg.86ʩtxowqܦyoCj;6FBO@@-?dZhR RM7RQ]c[b\믿^v+yc YA]uXfu2lA 6L`6z]q޲pUVi,Rny6lg_|P֭ի߿gܾ}BH @@h mh4@@cE:tO_s:yG6PZmGq9j @Z,[Z0@hFNwv?GO{unĈ{uoٳm?GqСvm}B K/ur2f^N1VZiL0-N~<?[QGdu4?|'!z5\ Ko3jj*!)7 TJ<)+d ,1LT Ii~nssgw{>~8m]aB5j{G}#!;ꨣ2l6JKrnmqx:tl ܈#*ʣkVf4'5q 4ȘFEro;v&;w̳Gׯ]Im'3fg;kZ7w)c̪mu5++\ @ @(9rb29>}2;0`saE&`i΋L; e:^}}+Z{K-T6_t뭷 seӽ{hܹ)Lh yqs2eog S7/ϑlvQ;|j>!F7+!+ X'^ G&xMï4i2N\sM_߼bGM6j=!O>aȑqf.̹w[ @H?$ @jTa.F %3'W_}=ȴL.2ѩ[$G$3x[$L#22$F 8:6GmuQ;ô}7xญƯ:2͸K/e4|2fL.2Pp @%Jc^X@eZY]ݺuh(O#ΗŅeYfqžl㪫"L64;{t}ȭJ)?d0lޒCfk'̤517n0f<2:LdAb"'YI,/ D,/*e=b dQ0Զ @ PW `WuCZh!̼ ;i&IwɐMs0YK:]2?t~JUc&Ӌۧ~u^ũu7x՟+Cݘl/܍3$z-uO+mZ @(]Kڲ2@(￟QҮ];7vXg9|(_w믿z{T%cNo^gu2ʫ+Cs{7|Sۗ2u)? B-ŚIyǗb(gs㧪 @ P]2-WH @@L@8<\'qڟʦc,t6m|#FɱdROΝ;'ti1J.}n_%[ZN{+F[0a @t `,k @ wy~_~1c@$1IHQFv,Lε'&g4rݮ];/3 uRP@%O'/%Y  @l/)6 k;n{^ȋw% @X `,+8nmzWӧ{ǽ;>[8k I7 ::ü&ŷ~O| [n9wl5[ot/3nӧkٲe>$>37btEBl}~7nrF|a? }˭K@ $Y@(^l.k!@.΄t^P^м$;o]{v~7w9縁. (ͽy'ۉϒ4E(mLi&j_|;ܟN>do.gGi\4a49K2} 4}E:tAQ2dHJNlogە2Jm8?$LSscUeh…qYH̘1#O|?~h0=ӯń9Ce@ˢh @x X׎C@&FmYf5udQ~뭷Md+Ѷ!eՕ|ק~_?& ua?w +-ȧdkM/9.Ə>k>czvgw}>hTErt==YA ,%@ @̓p!9@Igٗ,r+kذaJ^EOL1iW_A 9v_9 W^U\ۅgΜh;SMs \?iӦrnɐo>JˡKЬY3mbmVPd A8*Adz0 !qz<@ tӉp@%O@Zn -t-#[˲ϗQ9-Ü46\KSMBN:=䓡Zcꪫ)L54N%=I `lܸ?O~gA^ ۘLo--B M4ӑ]N @ B jĦ $03n5I;/ߐmqy}]V[mz)7l0w衇״隝oYAkeυ4F6tS&OzZBAsT @@!\h @#dQ]v|xMAy1@IDAT2 ;OAimӧɸ*T_}ﯿfӓq: Yg_44 Sa}f \ɌM}ʔ)cj_ChݏW ` @F ӂ{M!@pO]-2VWv`oY=zoٲԉK|-uJd//!oV\PyӧO v# jrL @N@X'/; b!7p<~JM] 4}H/ZABɓ''-.X PPmVO1Ojl1wEݩS'_]kZ#C=!BGiq>wMO>[p@ r `, @Kxs3a|=z;SO=mމW{ /};vt={LK.^KI}v%>뮌sɸ曝liJH\znnwpw?r}n>wuy7nؽ;Vp@ @X!LT .iIsA+0+YcfϞjذB,g2^=h E99Q_~9ր .>Modn~c=~0\^G9x3f׶T_\r;#0C6 Ph꜀16mG94iRhV} qE;3g:in/u0q@ TA@K^;f@((rr{]Ps+O&Mb_  @(=h05eE"ūΚ!~εd%$4egJ%"@uSue @ I`W[" @ @@NX @ @ @&pՔSE  @ @*D՚a1V @ @@.>(*< @ @ JZgqEQi婌@ @ @ +z;ڢ4JPZy*S @ @ GZ?Xl(UZy*S @ @ I!)%=Q^6cdA @ @u@[A'O. @ @' g.q| @ @@ڋwUꨮ @ @ :N`W[3,6 Q]Q[ @ @ PG 4uO(a90P]Q[A @ @ 3m IA @ @nuukur!@ @ P+LdETbB @ @D` B,WP_@ @ 8zyؿ ֪>ԗT@ @ @ ak@`C}OM @ @J@u ZhYY @ @@umgmMC @ @ TCrSY @ @I5"@ @ @%B`W[3,65o4& @ @(r l,JWQcjl @ @ Pδפ`19&@ @ @u@l@ / @ @",2C @ @@X."*@ @ @e@X!@ @ r `, @ @  `,  @ @@0  @ @@Y0E|@ @ @\ED@ @ @,"C> @ @ P." @ @ Pe! @ @(rQ @ @(ƲȐ@ @ Kc@ @ EcYdȇ @ @%\DT @ @",2C @ @@X."*@ @ @e@X!@ @ r + @O)n?Mf@ 작[|/c ѢAu q$ߖVoEqg/38Վ'⯖&Tn!@F  @UD~\E7@UJE ;>o7* Pj_dU. @ 2Q"vL@%P^s,N KB pBҊ ,v5k3gtw}W_}>7gΜL][|߱(IBJ,4  ,@]#]q  "ǎ^{57dGaׯ87xýь3r1m~PZD{ T4$AV @Fc]@@X."*@4z]z}uQ;t܍9ҍ?>9d;llN)# 0dC@Q@XTx'ݳgˎsZrkOGϿX83OTƊ [gOr)nJ/tCuw{+֭[{ ?pm\8uN0 @@55kNpœ{vsi6SaޮQs믿<>Ve 0|Ch % /K,[O?TD_}oѼSqU_ZYg- @L6VXa'5r[n; wխns7ہel|Yh&_|=cNBG Z|PY$@ Pe[T/-[{M9yǏGkF\:q}f̘nΜ9 2&瞑iL/2b۬'|QbqOXgy&2Abqief#nog2Awʸ1=#s$;dIwT@e ,r ޼7o^tGWUo-Ih0ڕ'@ 9sݏ?軑qۻ=Ù1zȑg|~&\slAJ'x 7<Υ1x1ϖ=*rT[k&V[/ x|՗ƣ C?56ùL(KSúTgM7yAð2Ø:=I@@V_޽~yzf Э׽{wolq7,nd@@@S"4ʕ@Ypk=ȶ]KCQ7c "MȖV[E&e^ԪUyP<+2\\[o|%ʚJ |w yqK(F|e\pAr2F}M){gv 6~8_|mR1W oªB@K-jGJGY6<~X!@@ 2$)&e[nqz˭ {Æ i ʐqIWb- fm棜HOL{M;i]wu΄>_}'m/N:WLJ{~@zx's<y䑸8lU^tEs'M]\"_?x{gB @%B@ ~aW}Y=ٓK,Œ.K!@Nڞ;eʔx]v%NDfͼ:a_W_*n%tm۶ϕٳ)v"˜1cqwƍsKה-Zx6ZSO=>lk+K0(_箏vi%l)wRleA PZE!cR*VX!;iۆB?uuw'ۼI? 8 @?{W9-қUW]UϞNAbh3XB PH0o?sOg>\r8 %ȓ .>^H9O8!Ajݺu{ם!$\K/MXs\H|u) @uy~H[-[̒fD @+ȑ#Ai2q*aۃ>0,vV}um4l7'\s͐"-~`&auLO[Eo裏]venyE#@ ,K.鋋ysUVq?{\ƍkO[/?00p #om 6,N;>D oND*zh饗Ѿ|}[X 61!\:Zx≑ |? 4ӚiJFf0oΜ9y澝ꆨ9'Me%;"񨣎T'{00d }켘@I&<ۢƲ192{ &S'oM6!# ''ڱԂ]@u@-֬'vXyiT_JKQFu'MFi0j횟'xSN9U|٭<ƥ45v[_ֳꪫ-[Cm7`G99Vj9t={޽kҤK=s@ Tv(tRbVX{--Pf7B8s F.׍'O9昸mIVZi~q^E׹sȶZg4;}mLhYd8?$: _~#F}`/2/g_nۤS:,/mL|F%'-d}ݓх^})&0=D=PJYČU&Mf PQjү/{1o^ M74|i= ƪ"I? PtҽEV]o3Q͗KW_k_}COw_w 'ض8/m]v&HMeEZAv"d83zEƢwm7y58RzAzԨQ?ڌ,+05nܸ*C @ /ҺukogϞ^07XJw` @zo֭[y|[mq.!KJgMƗ4ݦ9o/^y啝UZl*N!~S9i9S$')`ށʓ:7{:}'c\_㫯l`HC @ WuE(.z֗Y$:"S"mm,ovK@ -B@׿>3 eQ} A+K%AZE°az Bӧl>*x/X!AC!]0J1cŶp!x;u䮽*zT4"͸3G.n7ۙ3' F>8ϖ/}vV<@ T^ו`){Gf3~'[wm> 0C6 P~i7m4'a^"mƍM$S +]аڵkى¸ښEf;xƣ3T&j߼O>n 7\lWL_~$ʐa=뭷K7; YTꫯⲴCז2@ @ mR=>Si]62f `@B 2'|/磌r\p{c=z5*!h&n*KK< _qn,aFYBU,k=}/_kRg2ٶ'+j r?@ T-)_<n]vQǫYWȦ:!@ Yc6YłmW:4"suСbdug>5sXbԷoȄ>Yf ▶]#5祗^:z?|ߤIȜJ؛M_5͝;ח4h 3gNJ} ;F۷o2bi&2 ьr2 3[PR s{oc,5sH O2tEXJԁ "C!+/l`g57x`C;0oЄu!+v$TSw[}uR\ǻ;klE hH?{zLLX?NNksFÄ>[mlȃ @@e hבlܙ,1=skO?ju Q6Cv#gwUgXn)nxlyc+ " 7l[kc޲8fZޡ۶mVXaژJ1eQK9Ym՜im.JNr̔TgϞ텘aklVJ誣zJ_u~v4 R ~ZJwY|/} '>,A% fF+{:6m?˱~$ʜ̔v,;wY Jlqk J@ћQڂLEt=ɳ6`xx]v_uX'N@?JwY/p #FϿ.kziʲEPOF <׳.*7Λ7/kɗpE>n$\ծ*)FkG:I78E'B}e[#y PJ4X#Gz\t?N۷oVw '_pNۣMSNq> @Dc)]M@fH)a3Ԑf;1;^ S}>f3Q$3G2md6]=R+$Kx٨@Fv1rz[: Dx 5ZBGy&@(UKʲ.@M@͡OرcݛomOYk׮W^^Gd;[|!K0&i b%X[r.P#fsxUL@0ψ P3ꫯk,j8c=ӗ-Dz@Ns@(F1g@u:~|@J`̙nnĉ2KDNs@(F1g@u:~|@N@%dꪫEb^SGNs@(F1g@u:~|@EB੧rhmSnO @ @ { M,ac @ @ pa.ሀ1@@]~o0`{o:ɟѣs=~;B @@8$ pDHp @Mc7ydJ+^}UwiUR "8y뫮pB뮻nݺQʖ[nƎ[]˦_@ *$۪7ٿoaq1@@̟?pn%p7xcWݧ~$h$dx7܊+6p*ϽSnݺzͽ ~͙3ǽN.j+7i$K/!- @j +g0sr`I!@ț@>}ewkԨQ;wqGGy[/Sa i &V(w#:5k]paÆnwt뮻 @J` 6 0&i @ /=׿N[o=;iR HOA|)Ĭ<@7n8'OǏwsu:uڌ @M`L0.r9B2>͚5˵o>E.W&~]v5əJs)8m/HϺzM8䓦v'p[mRɎ[nܓO>y7o<}-ΐ!Coi{k* ~pÆ sZ_Hl۟㊋b17| &~GO}ǭŦy7b7fTFppwGdԓýkʔ)n6tzj_^r%{oqmoN;1?TQ׵m۶nvs|p\__yrrg:iZq%* `ouO={WZtK;d =g;o=OsuRս /f% @ $l! @ 724lr |&T˿ky~L(>% 2Ƙ>}zdFzu4Nkq;a1ddUR꫍ ^{-2!eF #s, " 4;ꨣ|FvbB1_N/c⼐|Y3fCutGfz駧W]`ߦAqZM#]z#5o:e\I56'?~, V⍮l@}z~lepdZq 5[PR]O @. RVR\, `*C*&5nŶƂ!_J2IxclEA0v&mDZm"5lp\fW} 3mp{M:dc,O8(M5u)ub[#䡇MxMQdQ1agq>״C]&MRjv m3vE{W:}Oi`'믿R_ٱer+kfۋ]ӦMfImaʦaf\Q+_kcpYBBr-ܓwT_-;@ "xo\Yꯘd i@@ $Ms'm˯dS >KfeMazl&uTD4Rɬ:NQmsvșfw"'(Pm澎>X{r "5!Jdv9rjLz>Klw,p4- Y땗)Ķ=HhoӝlYTѴ }}9 !Mކp-98=$g3rb'mf9IKN^*A:9;6ܓTq+ @%D LL+K jj ۈ֬}永Ю]ttR2.L$^}U&Hї(-i2m & ,9SqAsk׮YkСC}ىOohǏwfcIuqҘ4駟Iьa;y:h=q/}k|JNr] I+֢OڻɵsOj佥| @@Hs1KAہ–ksVj喅yk9qĉ ڙjE !- Q6*BZm69J 䙖*0onyѱ1)~٣ cTt-]@IDATjeN!@@B 9 G@E 5k7oщ)6Ɵ4&MmkmFJ̛O m'4 ±M74C<(>(?9 L 1/NƜ=rN{⪕[ Ag tAMBC~{4( Jm6%˰a+r\t.G 'ӷ1 wKx#A%3'.;{F8W\ᴥcǎN_y>ijAH*7) Q*$eݝWkq9ydֵEmCy6=+/; F%| ڔqDO%۽Q֒=rw.mB @ $Piol+r&=:wMѴ|V72ȶ,G篴J yNRщm='==zmy#a. 6L*tr4 K_߄)O?L(c/X dGdzK8묳<0O[j{H^uC^eJUEx}aJ;s隄:D&hLnݺM@Q^VFE_ZFu-ޓ }_&4.kCY$WXedA@ oy엎sI@2> fVZqIײ(;,dQpyYs1XT4뮻Ι{6eԤ)MAid!JUm)\̙CubFPmӦMåa ]+iJSRy:kol&O5/[lo9Z9-35/Pr'J9fw.+"> j'ԾȪ"@@AL-\P4mK-L,݅^R  @h%†,@6پ0f#E ~&lM2%(ʗl7.NͰ @h1O3@K WǗ9 @ ArlB^xb @%Lc _\@nGy(; *-\jս @#  [ z0@l[*Ь\ W9Bȓ@/4I3@ @ @9 @ @@0捎 @ @F@ @ @ oKݒ @ v{_z߫Ξ= 0>nM62_:uj}znWι @y?pK.Y{l^sܡZ#kf@ ټp[A{.)sK-[zi]wur{キ9rd__͚5M0(q;찃{Wܳ>ve;tw޽{ }UZ[*C P / .1_|?~d5XmFaÆVZ)LWXa*N @:\r[q]޽Sz@YӀ @nw!u]7dWq-tݺus7o^1/2ڵkƎ:(' @KgϞA+41o@$p饗 SN9:U?t_~yu A UVYmƮE%*RX׮8 d3O6ddQFY,._~N6-WH5f7tP5ӎaÆy}ھ۱cGץK뮻-P-\c'z#نI'x}ᇾ6m8˦6tSwAeݍ7dO?ukoӧOײe~۱l]yn{qOop:thzB(C=x u~^8~gnĈm۶nm 5vmꫯW\ = =z(Ja-!9Ӓi{J\agykڴis|W?~{s=翯ʝtI)4{=1jΨNvrȗ#}G99[;^{|7nr?=zr:?ގFr>o)grzvNʬ?0Su YX:ClAL쟗FB_yiLzMXLC^ 6)2ȴF" L7hni?_30f !u.v(UvDpUz+@GBE]m@|3Hߗ^zV?2Mx%M頚Oj]eryWz!{wG?sd;;3Q:zc9N`sQόC/ge"`\i6}Y ,=-S=+զM6pdZ~~$yPϲuV|ItE|?ryԋX%.lX"|aZ,m;; @%E? T 2a„ms4hPJNlHCB=!E=iF `+%s-Y^X|if0T!r=l'Cxȓ@U`^}2\ףC9sf&>v8Os o8]Z\@ъkj~E1/|4@E% t /bl)HB*^)=G/~Kd{6>`#pNBM|9$w`r[pwww , '@ ;{h.AW=ܢgggvw:U3U} 6>5DW )gd3qHmGz?jԨ Us > #G(1ya .`Zh!O^⺲=h,')ff{!:M^>ڄ76r%"@h*tPm ii2MEZl1eIf%{*FbQŘ4N(-*v<' VaPUI#!=>ب&/MmbomՖ\ HBhMntK2Ҝ֎֪+(!mOȵHZf I3ݦY3S$i{eXM[%D~Xdx/־zb<8Ȟ3P,r*Ha0Z?`Azc*v$:N9-g/)6IʖEVW3^Ő"@: Qqe0V駟QCT+J*=(|t$6Ԁw2O?f+DoNԵ #/z꩝HKǏ~s:'j{!]|#ri9ȉ݆HR!~A Æ S~!qMֹ h[L EȻ/)< ]$DR4&++4Jz4D<^:An`r)[Rx^Eup"@ȏ@LX/hj]3q[%shж"8dSta8+q=0X1jݣU c1 Hثv\sm (+yMqJYEmp2ud/"@8UqIF 6f IdAC$68Z}1D{:QRG1p/Il%YU=#NfBl 6}~mӤ1eYc!1Lθ ͪ4 ҕOJ n#D[?;+Y̼륕_40hvC)0*1Z {'<1yGK+?kXVQ7h#-ZỘ~q8džnmqbK\5lZ9ih͑"{,7K2e$"@Ȍb#V"t&2TDvmܛd06~.H_Qu' 8D!TBp$cbgoFĶM223mc+ޢdNqB ?0]zTT62b"SPi܊հ("@(X+p뗕4tPMh7v@̲Fک8!ɜ8ܫD͆]=p%*h\wuz(vST Ĝ{衇tVJOkTk*Ӛ6p.vˊ6 ©D/o6孜fhD"@^1(NSRkٳZ4>gHaLN;;d'}]LAcn`b&XT"pfPHS6SO=E5\*H +*0a' /B&-<``B-UmL @c1"ЦcF1>3gZ4rlm` veezUЌs؁4LH 8q?X 2dHpcP%;َ?5{& 9,NgS27[q:0gq<{,6[2mD"@hw@pUVv$8p joM7`0;cn6^34S`Z[o>h{+NsAN:$+΄d-yU?SO_sGvQ:1.ԆJ26{QF'N«Gy&Ek(^8A?HD"6ZyחsPd1zf6ݺus\rIRY+ila_'Kdܥ^a |0oea_~q8N]@}%pjZᄏblk!Ʒ/"@  O~[qF!Ѕ ۍ_$S Sɋ-GM#Z|>}lFfmah0J򊔢ƉDe/b//?diDFDbN+5~yͣa eċB ^h^6͡9Qyp#<% /d/ޟ-2ʆYvbҋ?C0,5\{a҅:psaix, x`6^Nt۲g}67i<8Xϲ,6_I%9"NИ\_,m.k0$t}^s55 c=Y3Ŕ%Z檫W\1.ΖPF`.ożȞClzzԋ^h-m  {,8k3b+=Ң|uꩧG&^$,;J ^2boo?;N~"ATW/׺P0 0e=hE5/rzF[/^&{Fc>r!"@hte6Mhq"]gqnQ)k닎x#ie O?$1y:C}2jE$WVv|% I\d? yi 79ybM |Pv=7`0kOU=e0tZ[m*0"5wyg/U% /6]32{ƻء?Ep(y=( W~:oaLA@`R/2amn6'[y=M`A7q_xx\Mp0ouW^>bh%#ʻGf%R w!D"q&f[->lɍ1"^u5,v^z%]gyT Fcu]:SUĪz02e ]ȆΉc]< gO@؎fP JhR6r_٤l؊j$aDuť9jd[X pcae~u+NbjήZ3|m69l\xwݫꦟ~z :H j|S$ﱧCN>ތר6Geg6ȅXF=JZNLbQkm{̟~5Bqg Dtz@d0֣RW\D"ىjTaNSۙݥFz8uWm)0KbFy1} ~qyl:#矻>M5Tnop]ݰaO??poM6-{}嗹˚wy4L;3"@ S#Gt34[lڪs=禜rJri9_}5j-fF"@ D6V;;Gq8#;;?Ȅ07gJD 3wea\gf]wձ5\SK7j6鸴:`,2rGV.gϞWhKzG`W ^zz0t,dŲ7,^TP"@ DZ8_:P^~ew9焰Zn ɳ }&`-vꩧ.C'j&C@gSL&CU9k$D"@h˭:n&ki& .p"igЩe]Vv'tRY D%;D"J<~rK/tIs U}`С;tM7h\=O>#wW'|s/}S_tM 2eYkvaK/JovK.!+ʽOߴ20?֭gqҒJ裡Do N0I3Ψs_~eV fmt~%3袋t]'>7|nwtJjp28\|Nlɛ:oSyַkCm?0Jc]֟ۋZjÌn9昐'6[3t/Lr/*Luq„bK,iN;6ZyI'/8sKe}EyoIC*<AqpFPOƷǜy睽J$rHżpR\veei#\%dsWF:a 0C@?ais zM_EhR>Mw}˻ cncQȘe*xcko?cS]d:dgG/N^걞Ƹu1+"@@S!ZK{)Hz9rjE!0d$wy7߬+O??""A/ Ϭ"qELL4>EJva%uA$34]ErHBF6#V Hyl^{o/^$Eh4~w뭷zQ_ո5\bMEEkQ"A姙fF:%(c_< :`/X"IE 33oPO#'^E#H)֘;M$QK<sV^ye//<"K~g/ LccsLm c%Z?ovH"0٘c-XN`piEm7)|ZNYgcrK^xIZҐ(#<\6,k-=^{l{i<3L:0`P$COtSdOyӣuwc#=wx"k~iUX1_O9/R^$u/e F_>Ӑ5>]q >Yř!`*W DB@7.ԭ` 91mQFQ^TN5NM_%x41%`KhI ?1A 7od^`ؠ.Q-;፥LzqРAey qČGK E$҃)>4\ #dC5fh!x2Q.FyӨ3#+ex1ӁZw1 X`k/Y(3f< =Ah13ʋ` 0mVԷ74n RQ/-7IO04 O`;^X0ύ9Jj &n7.;PyY0ks|1 ]0?w)#;a/bz}áiM_R`80cF>M_d}+;,c=&)F!_⋐U'NY8AqE62gퟬ!`.Ar[p#Z JxSW0c>r!"@hte,zlCXmVo,j2 T0\y=#ґCLT;#UϘ>NH#lQx|MD4m!$HePN2,؃4}F l6&|#{76EM"4̤>|!Ch0l?&^t11LV)da>% /6$oʋS IB_ Mq gm*PYk믿"Y`pA8T*`DgLy FAmI95:=հ֊Ԫg=<ApXAyk _b2~Ю>o7)o"[5Tb0YP^⋐U|H#BQ6VY/oY̤`e=MaE N^ ^ D /j|:lE'RGb$҃E EҜZ #$Hgqo F_%4GIT'*]%pP 0j$!݀J/ ByC~ ư?l0u~7]X[AO#80ʛU  Jep\oShY*S5ο*\r;!x/wn'ېu"753CqGEb>fԄ l`lY) D%**MUpxG(ei`U"0]7eW|`TXVx ^{2HgD&Dxj @Vs Uvہ~zs@IgJo( /,KI%3`eT$ʊ[O[pMcܡ# ܒ6b[w֒LlL:QSƻt#N:Qְ"W$\>^ \$/b?։t2ʍXö eHF[0D;k5\D=p0:CG1e^%ʛDں$7)oZ׷k|5j]PvW,qHLMS M,3E1Y>z*f)iÚ5"@@;A!HjK3 $YVLi8HKS׭[7 ' 0TP `xswu2+ 0H-ILU;r^-蛨V-̾nN'hz 8pڪl|ktE%у10ktp˨kp?| 7j c[_(yqTpK^'*fVI&HaF8aq>I 3 uӲR:3`/L;fФ&UI8-È@="$pAP^wu $ŦzkY\no֎/ۧ?}-kVy*k{ZY-iyj ˳ɶe҉idҠY>z\id06kD Ç/@D%rrіM!`IkuVy`RA {[{opHfD`Yzlမn9۬fm`t*-F-LW"cB"Ϥ y03DEW*6WxAJGt*R dԇ*_&ahl4)5 P0!͌ +2jS LG!(vEkLL ]~N<)BGJm.xo^"ǠA2-@ -H&$-~8Z-*\jЈț^ŅrnĶť#H_dOyZ'Y4,Q޴k޹VF0 WHުlT>@bo#k D"Щ2,́Dg M1z$ W!TI5 GQϞ=T/ `h_ LT0U!qS.V GcpP$k! uXfe0QEH FhHl[- [~I2'dLU<7q\xs L 8$sm~4AP oA2CaV:q 6G*0TM~3EAc5D@f kL=l-~f8g}R`"OqYi ;Y?-1v7)ozWo8˲Ƨkay6Vyvad8J#e!l/%.e]4HK=나P5k50I*Ԙ7}؀}ʛ]ϻYQDc-P^[h9lJ[Pڌ(CE62ٿCދAHh3c€ {*Z{=xm}0|B"D"<Wi/~M LH0;@`:qa"^Ӌ)M/2EP.005K3sV$Jځ`lKh;lVk;`0~!-no߾C-H>$۽O=oP_#xI3/j%XkH$C./^Z@+ԏwy݃YN;)LYP[lib/қ^iUkVj܃>sCTSh'x, 2˚t. r; {PI؋*b/U'q^I[zq-@)o[5b&]1~'Tڇ"Ev /#1M6y7fV#k=E;I@4re7"@`*eMcؼZ"TavˌuUaUl] =b"0M`M6U-*PD[ 53a;RP3<(^Ih8 'UWRlT8;gfwZqY[,ԠO-}n饗i9:D"@@S!on@2~7?zh믿ZPz~qF6>:7xcmsw|UKƸ2_߻wo?RK-7%KSQZ?kX3读0k|5ׄ2xtM}WS9j@/J0(xC DyӧƝc=m>#w'5\e]֭nw묳|m SL~iI@G;S2dc9jq /[On1[n9_.]u]M5T[6l&h" /\֝w}R”,HXY;h@GYWb9DD"@hzjCv_G]uc59rdI;z)m0K$&dG}a+:h58+_|O6 `[.V.:H@* ?(ijRK.;蠃JhZ N^Ʋ""@ D F@6nrk('L$ IDx״ -J7avV^E@BCq7^I{}*"@*#@0"@:bCOj{I'-s>3g_2` pSN9W_2w_7sjx>[=ؐ7Kx:Tu$;a[jp 'p/mܪ6pC uQuG;sCuwyJFmz&xbe^q't"_~yy'pq'ó!r쳏N`UU30Y ]tEnĈ/N;o܎;NfʁQs9=s`Ygu+b; 3hK.Ľ!{߾}9_60 <{'&n<3NlQꪫ݂ .=\KVe>q sϭO?&pB}oҦ"D"wߩjHl($`=wG$_{MVZi%uUpGqwq>^ibzuW:Avi'7 B5uM1.'ڶ8-n6]C~s]vѽe!mcV_}}D=Y~؉$gqd)K=ߢ.&l8"@ DdC@UjQ0(*o/q0h^F^xZ.Tq'tRj]v/B!>kb3*ԋ#LP7|7`gipS iFW&΃{K~g.'XQz*xQJ"qx;"c`'Ϙ$"BnF_؃1>'x{7~`epI#c0WN`< up4F$Kt|EU"8&"\QHk?ZbtY`VO4@š88=C `e ('ː@k#`s^$"@ MnjY8m3Fv0b1f_Hp0-yat{?{-IlIIդRK-y˦5jTIC=TtIj$*ۚ_T˒;0ciY(@,Q/B4IDȘ +CxII:y^:Lc {0~{"׼_2`cwy#9$f#䄣$ϼGkUbXmQv!󧥽 i?ɤbNÚ_غnyj>#;Mꫯdz5#b̉=9)6bEJ2+Q88H>#*R?㠟"mUk|Hy ``^o$'alf$KSEasITD,kEA_fS +ZE^BJkI0K%2VFAIgT7mE74us6 h3zpqPkͱ?AAm`B"y#@` P"@: s13;볨NҊbǒU}!'J'jv)1$.B'Ƽ8$!( =z8a6PCF6 -C I֓ *l¼ HJRN!Y:ٰX-"nm1VeRlj̴€l5$-ҵFXԙ+~ҧ(&Ḧ 4 OFݒ`{b3!gզB0Ib+0I7`K,+4@ZEf뱭ZP"G+ - ]hbV$-r4Ck \۪O}!@c"@jIۜSSY` B0d` bljPNc!<'Bxꩧv"*K"ɗLҰgT#ki/@Ł ˖ؠ,KbuY@$H'XT:AZW8 qAP5is}IF9|U("RƔxdONV2V,#fWH39ݨf4%+ [p)1Ȳ/N@z@5'ab 1S!N3恊 ypp F] X8ʴ$!HXƶT %n ud[DAܧO5!n6s8ƒSO/\U ўIՆkYxA`v6"@@E@mԖ_CJ{IEXM7T=j WH.!S2v@)F` 8ac*ja`.QWVTt-.ٳ,9OjI+BjPK#^ -&NU*SR8$L55aESg6*1E^+"qؘ &TܠAE]Ԁ6a1'l N%k! $&0YwW>ğuYN|dXgC[ށfZEm8Sz 2iő[2Hv fw\0$q$%őj`ıJ1vX[KX㼭q{MZפVZIhx+w> >'$"ZZH"@@vj<;>3#&8N†?T|;BLX3HEez4lߵkWZl:M(7)O6`UbMG98OCI:5/ca!m1B< }{s惗$&U)sIhe9'Y'sPu~`'_O?tu3 H~"$bcNh̟JNۇT-~Ȑ!*3$8<2¾@)#XvA @8(I޶^ZYֽ?iuYI)J0 %TZ)Ф@leD؆+̞{90IqpY fw:680hqUW]V[mZa^"@ D45jZtɌgx2de#m&c88#}.]4\<zSVk^E,MYHQ nvZؖrzEzVa61'/d) C'/!WIWV&YNoҰ W$DS'1Nt6|sg. ŋz`YxF>8쑗 /*N^4 N=eqsa\=0nmFYw!/uKd 7 g@ˆ"]0++6obiHߺ6JCȡWY,LhGB .nHiFxMRk3Qy4xL#c}KKgaxyC1H6*SwrŎj$iH[2F-m *_2l;u7s..;0) `c\<@W"P?@nwP4⬦KfǞ'~eϥ&ygAc0&<W0*E1u  =Љ^ubRŒ> /~&+#Ю<ǭbы24}j5&6HXa3Mi+ik00 uw@#H[m!k"@Ep0(` &Qii֩E" /0BƟ D"fFbVkz5LE!vîvذ$6M"DN_֩.K Dd@68yLE@# Ur9F +gy@%ɐDr}mM֙k|"@ 2;ȳD"f@Z#6UuYlY{ڲb_rK'q{XC'g8qݺuk1A@u"@ Dc#n8c'D"ЮBsjCM׮;ъ"ԣo&-Ute6EMgM@ &n[wv"/2=+!D:#: DH{AkZڤDm;+%D4*ҍ"@ D"@ DD ƦVv"@ D"@ D423k!D"@ D"@ MM9 Da)_~q'p{;^G:h?s3ϸz._= dD"@hC`lCY5 DF ?8|W,6۸wyGkO+o$D"@hjND"PѼk2j?S7L35YWݒK.z\Ҿu]=7t:kI#Pm<z&ss1G›?_|VZi%]tqJB }nrؽ,5Vx 7Yu4\; D_`,&"@ @߾}z]V>~gwI'1uviݢ.JbX3c?" 矯Rd.VD"@@E`r6"@@+"ϻ~-nI'-\-n67|py.n6J-{qCu/ֿ;HN?裏oumzkg-rn \r{C`M2$ǓO>y 7ܠRV/mܪuGqwq>-&uW_CXo [l1S=zg]uU_~ni)I{﹇~X`P>#p0LҀTR [I4w:/HAk׮:oI/A-S$V\qEwf!C wro}! nSOx-n뭷b;yK85\%iUwH|` m,b`i_\ݨQthtMg"@ D"@hG@KxFITt a*_\2Жgw.)W/~Dɏ38yV|IIk<}Fs=7! "oVfKnF/ܐ7ay̙$=c~gyPƷuO>|HZj{-ͯ7޸8,mrh0_\h+Ң? /X! /Vd%i O&q\pA^z|:O67k{;"@@E@-5"@@'GZG} AyEZˋo4n c%|^?x"AgMfaLs}׋wyd.Hɹ.~ʠ?CƋGH#FxLpF"ŨuQ`)hzq(? SH~7^x[& 15\S+ z-Ҿ$>-ቺDԋh`ƌyk|T#˞"@YujŘ!D"S muزĎ;qnƁd 0$*3ތ!(2o6z24##N^,XCW$``"~M6)3 EeO0vWV?u&GI F$#ccVg'fi}Ø",R"hkҏIf6 dpܼ< sx,E`&GlAOTC_~e-aY i_>_y`G.MEگ3) Ds! +VE'/M3D"lV &CUsf?aD2-\mV6$Rtn]wMky ,tgk?<$@ϰB iD։jRm"O}gqO?}Z 3;1 /R6Ye^pcU7y5HۓKL(nWײ!W| þ%l{"%EԪ$IfQNge:Wyך}eYD"@'-Y;&D"A1>!~q: aApВF+!J^lM.]92UҘ=220<#x52\ma 1?[Le"@ D"@cgy"Љ*Tkcs?PI$3vȘy|(-v 5RpIJ^LiRdFs29 CЀT/]Hrc*?sJA؀ ʿ9j3;Bb7A=Ԅ-[n+w [5Hl=j1gmKkNSjTjZYZ 5~KYtD"@hf`le߈ D Ç/RNn;Ӊ×j66l-ɠjzu)sl]vq73GZ~ZoZtaP;$-Ŭ$^p8pʼnFg )>01,d d,ϵ{6 7P%ɉ֭uYCLTv-vaH<ܭ$9)[142lٮ n ]1OA|ocr{\-4%^T "@ DN c D"cHB%T^짜r;蠃Ԧ"F2$0gg hUWZTq%p3$>MD|'azWs9GC}K+*5 CvT Z(h>s'`/fq,%hu@ gAeԳgOpH~ Pq@2u\_ v3k!81};zJk.MMTzcPǦh"@ D4d06p3D"2$ }襗^h`@ Էo_J oѰsX An" Q}0fm\H.  `~h#Ϯqg[M$!unc"C91U_oqH.u mo0S}޽05|VҶLr#c)88 T{y+rS"Kmg0OC14i:߈D΁Xͺ~5b"@@~j~Hzqta^EI1Z۸+FTO#/Qy=ځq"]8iDBϋwi/j"ͦőOc]veeU<ݻw7y'Q1OEjыJmHg/xU`$z{HDB3`bcs=!]|믿wً|bs15H9u2 Ja+f0mK+?^$a%\"O%<:7Ins.{Oh^dŲjX w!D"qlӵe7daW_uO?3J$b^R<,n ed_U#F88viHAMJ/;Z`_xtť9tE3##GTl*]vU{ 0P8ۘC-y>4OPI=,5yVWR"xV* ؖC:ݬG6".H[m!kQD"Pw"SwWW\DjOB 6ansfxmKp>9td^:rs]- DH[`lQf tq#$&4M4{`"-RnذalzKDԖxQMvM"h7{<1v"@@ _"h&D"@6(tbQVy睧޴S|ɜCb"@qǎ-'D"4xvv(^7" {$"@ D"@/&~fˈ DPl"@ i*fur]n<欑"0/J06 ~VD D"@ D"@2oL#"@ D"@ D"0`lԬ"@ D"@ D4d06ߘGD"@ D"@ Da۰X D"Щ6l{3Ώ?=3?t[lm=N2sYgu2K=/6d׭;?{WΆq@eD"@(@c"@ D Gvl[Kw2'-pE k|A8ܱ9}GO8g} 2=nqK݁pZoU~-o&sV"@ Dna DVCs_;ꨣJʼK3vO:VI/n~ V"@ DX-'a "@ zB8.*U{ϝyW^Qu-pSN9e(vݠ6:DC=Խ;Pq] +hS ܼ.r#Fpp62ӺnUV ϽnWvmY 3h'Tx (ęٷj3TFO>dw߹/\~eQ;+bIx@Y,mEoֶz_u{nn mC駟޲lRjPÅGu~֭p 6 6쳫.p 5}a~a}HAKtYgiQn=$yh<4 zWNA2ꪫmyJ[Hy}K2` u{FC H5Vs,_S>]fa-x{I& s:t1u]W$iҺ7xrK\Н{Z:s=wI|wzq AdI'yf98YEgĕ[!0i1RI`D X3jS$*fX7Xפ Tcի,ƨ>+R3x$* K0ēRov$~뭷4$]mƒ~`'iԨQ3֍2{d9|k~:(D·,ZO (xC D?3SO"߻f$&%"`rFMo7tHC=EH߂='4{ &^%LLoꫫ1#P[tqHZoga4aIx#̮!ufbLEk*y3+Osx*Gl@IDAT%HT_|Gn0H>wJ+i0:O?]e D"@@E .v&D"#1,2`>)Ğ]IX'*`*:YcF90Zj2\Q@pa,(iDM6l2-]{YDق>mv,gUG+`Ck$R|N$%i+M )pF( $2,1&3-ҡU1f"28qGSZ~H<#5XC?SO=4V\3oVf3 =DY8B2=p QWx/Ҏ'v+#G,KF(Ɛ D"LLɾ"@@&U7)IeYg Wxx` sL HBs`C[`vaNTK1d- HL )4Hq"1Ry` /` Ҩ (5\E#Uii$1LS9Nɼy85fp޼Yó9 䩨edŻ}*s 6|0`P"4$oTZ$I#0+v85)~11/vJ˪#"@ ͆@~!D"@>?X1 ;H%L *QLɣs{CAmF% 8;qU$'L2 F`tH- #*{idΐ#d ݻ3׈Lj̘jU=I'ɠ}FwqGV35qlBZb~g*ɸyǘ A $hp .A.Ò@mŃ Kł p믪yVVS瞣$@ 0`w5B@S h?sȒP m0[)*"y:W `"-{o?=VTzQzee!E/VT)4ZFe ظ^Lms1~_e-'xO+CϖAY`/qSL1E9rAV2}荂Qϧ#Yk$?RK򕩏ŤD:}ݻ|uw+(U?䏕@.F@h*)>裠훲ʦbPI ^{--e|PkJ^uUtMChwwE؉,㤠_lj'84J)1{:ƈb-V_EmdҶp}t}>QmO>d1bW?ꨣ0]7, @ # G|??xkJ$ۛ2/9#S%#1ho_}UӜ͢?H;Ĭ2E)i v)^KV]uU/_dE>;ֶmZ\QeX,^Bm[jM1&om<|rS,?Kל,@Ib“%X"1Ĕ)ʼ?i;yfeO?|/W?dAnұl+{qmt߫I(LǨ)mYfi3SH'fefbhOELb`ϩ;->. йG/@2Q0JtΩnG.dhQhVYw% :W_ )ˊIJ') ⒘eb2f̘|IzdvM&U5*[׫`4?x>mOʞTR0Y%fA[^kΚX_o7RդÇloR}ρ .mK+,bsZ2.C1*.W`ܵ)m r~RO0f}I7z}o"})S\J} n_dѹZL(Dc|me@Lg@ڗ~zij #n fŘZ[uZ۞cm_3++kvWm-=EF5L\HЙ~h˩fb5WrSO?1ڶVOE~ߦ45?={B{8,VuS6kȊjYw@ߍVIfu쁒%^A[=,@6):YH:omV%R_ٶC@>'1͏- > %Pi?d- A@S 2e Ʀ;ϬƂm^?O_o>{>cP )f}S`L4?ZzO~_5!@@~P0l@@'h?dQVkȢͶv3WXd ׭Nkjܦe3 ,@tL%PZsGwϨ0 !PUC2 @@8 @LZk~rQXMSN5C E uY, %V͂1>uI9X` i{c6$ ߙ%:dȐ`;p, !PfҘ]wZL@(Bf7B@))B& 2?Zy5̍`Q@(btE @ @ "nS @ @@@nwB @ @`lT @ @ nnwB:K/}ݚW8묳've >:,a*VyG/By睛:1cƄ?AN]tѦE @Eckf@?pYgࢋ. ni᠃ ?|YqM1aV  lAS/K/{={ K.dꫯ>;n/A 4[Ñ^ @h)k.{lɺ$LҀCx¡6l0L35dE ze]ܔ\rQ\p G ǾvLg @ !! Frgs9Cv)S5XÇ=3|a}mHz0bĈLs~g}v?^ve믿nXt @ zP0=aF z*\~aW6[?̠yC.a r[i6r$̼38? j$A  (}f G}4yO?fb(6l{:"MC sg?ATd}QI_OXi¼_~6s=ze{|]{^vqu)?e'pBZ&>%?xov8#!C|ʿӺ$Io>G3R*_YhT^U~gs 3sO}W'?Ib[K+<̹6u]=i8jǪm7zK,DOfa/ӜmKpw1͟h<﮻J~z?so$7|sZS$\/i?e+>>?1Z;[Ɲp ^)WON[\UW]e99[v<i&ן#6t/fmJ+e7|OW9ZϖY26/}[o`1uv۴|0qz駟֍'M7:mHKN;*/Y2 ŊSGx@@ zRHIYh!1+DJ.1d7|4ge^x!1*T( 1` r뮻BG?/Ky馛e4O'X`=e' E@ߟ?v/ @%`X]~Q,))Jo)g|ę]x#[ rf}Y.lu=zts*3+`;VYGOG]ȿdL\c+):1͏' fu/hi]&lKŠ+fuV5)i%gcVna6\ bvklR[o=gh__.?^mKb_F L,bUGz&I1^X^s{[rׯmsxsejHݦ Εb f&|.e S{YwXGsZ|6UW~cb[!@'0vU @ K0ۚ닓7-Tu^+B]`]I tQeۚ5b2=W %fLQ`и~{ /jjl+sڏZfm,XcEdRv˔άs]mSv4Q%+;n&K(vT] d@g`anķ˚hhru.~o1p 7Ee)vꩧ j`P1i{R"i,d$UW]5ͷxQM򗿸EWld>ܺLT4ŗi ^ziU4f0_n hr5)n6x޷!Fb_I}I@IVnJq{_c\mv߸ 7-zlfG S=I$ԲXͯ|z&)W֗)ս(Z# @w+wc Ry`GrSr_KۦoWXJ?9׏ QgX,"c=,buԾEW 2y,KqR$*EcZ|}bX WZPWߣ|Hj<,"YdcW.""y?9fн9蠃|M6-*qiImR 2Y{[)G֍TjQJ8)e) 2,:e=KP+۪ vq ,ŕ|l3ъN֛JRV%)-´))ݯeޛlFITEXR +YozH$ϩn,b{og?GqDh'&ʪϗpie2!@&nt4 W}QEQ)]1I#Dz#GzY)& 2MtM=2o6?k駟(hL^&-, 'x 5Lښ~ee=зokK+ro֦q [ǵ[RJO]w5UJeZve|Lfs))Qea5i|L>cذa:=JXrE>3ޤ,jJʺ8JR*P Q[9ϋH}get\.IQ͕.*u-&Joii/@ @ `po "fUUs7=31{>S% 4%V4o۪蜘$1AGef%S L[o=b Ĕ5YP&Tr+ֶm~2/ v6b_VdZĶ+'\L6Z)?3sf֝i?Zˢ.(`Ԫ|zY]`wiߦLuh<әؖ`/y AYJ+c>W^ ?<gqb^fqrEZ))eؖh?1P>~LXĶ':])cn|8M^{dԨQ^Eq ;'ML oS2kF /)bN?v' @M&`XQ?,j'?d~xD=zY%Rf%Xb۠sm̊09cc(1ԇ(f3&1_^c6]yi;& DHq~&[F+{iYN O%Y'&f '|Zj)gp=ujͱSd[DjybV0F%8Nfi[M8XĶh]?|i)@S {?fžt](Z@yӎJlO~x5&|_' ~!C2 haVhK k{m/S)"( I :k|1*ڳ>r1d#QP~))rhGPޮ>Z-OiijM;}mM.*/ZVzUW[E[8{m 4|GwwYK.ҽf.:@Wub- P=CLXR,,J 'YCy 'f=| (bere@A^0: @-B@ad=UEf՘ih] tq5Cz @@B@h+K ,[9p w^|.p[{峳.Yۂ /@(闉4~ж]n@g(‚9 @F/ƖY" ,pPkNYA =,@0n) @@贿]niC@c@-I L] ~1a@5߯! #  h<_gJ @ ql.}9 h_cIO @ (=l^ͥI@jKz @ @ Lms>Qs {@ @@8'5t< {|zϐ @ @ha ܾWΕ2 P?_% @ @m@6##2չT:$@v|jgF @ @ڌ6_)ߴD\y*S P;_3 @ @mD Dܢd+S>T% (U% @ @GH[Rw۠;UTOW @ @@P0jTR2߯>G΀ @ 5km@Y/UjCz&gFԀ @ @ js#L]:TGuFmI@e|* @  09HY{ Q]Q[AՕ 9 @ t=l=( AՕ 9 @ tnuugc)߯Q @ v'\Ӌ, Ӌah #n @ @ [}faڪ>I |x @ @X?oYـU>7 ߯|Y; @ @`)kVK}o2_v@ @ ,e`*V$o*K @ @ OYۙ-4?k ~}b @ IY8 JWgp@ @6$ԷX$ $|f @ H`U[g&_}k 1I~ !@ @8#__~4&A @ @p{ؿ}X̎Id|:6@ @zM * {@]ꂄ @M`f@ @ @@@عA @ @P061@ @ @s `{ @ @ t( @ @ йP0vee @ @h:MG @ @\(;޲2@ @ 4 Ʀ#f@ @ t.{oY @ @Nc3 @ @: ν  @ @M' @ @Kc[V@ @ @t @ @ %s-+ @ @@ `l:b @ @@@عA @ @P061@ @ @s `{ @ @ t( @ @ йP0vee @ @h:MG @ @\(;޲2@ @ 4M TGzZuU@@): ;c)hgX0c,(;~D@/H@ H@dsY) @UU  @3 2`l[D @ @ ~P0=c @ @h([V0@ @ wϘ1 @ @Z ƖL @ @Gc3f @ @ !en @ @@@~C @ @e`l[D @ @ ~P0=c @ @h([V0@ @ wϘ1 @ @Z ƖL @ @Gc3f @ @ !en @ @@@~C @ @e`l[D @ @ ~P0=c @ @h([V0@ @ wϘ1 @ @Z ƖL @ @Gc3f @ @ !en @ @@@~C @ @e`l[D @ @ ~P0=c @ @h([V0@ @ wϘ1 @ @Z ƖL @ @Gc3f @ @ !en @ @@@~C @ @e`l[D @ @ ~~PvZ!K@ nd}M!t @@Ecgz @YrQơ"Y@ P=T~M 'q! #rQ->C@ 32|S @ @Lc;=@ @ ~&PE0}K/zg ?裏sXdE„N^{r=?ܛ6lag=S>SN9e{jG%@ owߝ0'uw'oV0 Uoj?;cgN:i={zZ8tP@;(:ri[\ۙvqG_SO~~] /p:'x"7|u'3SoWU[s5u]uYg׿vP顇JV)c'lVs@G)En0 CIGN??er-aWL;9V[mU_tWe7^}k&H)5*l^m R'\=J!Пg,06 eY&|W{嗇_PK@ t>οǬ`j @ @g? k*cbd:'@rS~,;M駟ӪڦQxq{GUA?5kЖzh|M뮁~[R_C zMW\uW^y%#Wj͐V^ypG۪MqgKWozŕȐG笸J/BXoObJw .: .)rK0묳'8hUW]53ݗ_~~߻ĉ&(L2$~6ۄ_|2ᄚj*ݒK.@1Չ0[Ȑ!ig-JJ9N;b[isn[l{jmzS !uM71zK.b&3<>O R.C oq9<[o5j2s}TP?񏹺B_{ :餓².~X# @S7xcXwu]_*\|uᢋ.r[~%o?YJ嗻72|XʶvXɲ{1/R1bK-TlG-$?O0f!pA˒^|nw@Ck~{QG59fd4$ 'զ A``뮻q׿N}? {b Һ9NLH۝r)i}SV%JcMqXĽNL9眥ƔumɵřgXv[oesYguהTidr34SZfA^rex`b8:~˵yw_-- /\8;ܥo91Es:l}}~iz6 T5!5裏6:7a7r-k=_$ daG!k@$ؗ,KdNe0u{ym^'B7-rW>w)>M@N$ǹX4_'Yyь {֍mt4kbVrm%/袥etꫧeosm@.m y27iy|:o0˸Ĭb\d{ W(?vULs̑c=6mU0Li&Yi{Sk+T6-ҹr{K,B,1Ĭ8 |<n-bN\t͟OcY,>(]8P I=P?(* ) 8zGqDvzb^dK}>u4n52|Q2~Æ ˍSQ4/\y啹~Wm2:+Sy5B\,+&ib0oH*]ΒSOufe5R)=l͖gۥ=_+bb>_$*]z饹s9'mx㍗g z4_V{\G1`%sϝ)7Ilo"J7ݲdm^-{`%I?Z/´l}MצvlkK2bĈ\M7ݔ;"dKeK {'aԶ`³Ɋ3Hꪴ'Ǝ$C Z FVe?}]Ǩ`|[ar;9nt1+_rv5ew-ij8D;b"~:蠴h< &}]qۦm9A.m Й2iy:s ٿ}=ҏ~p CJRf<)m&)W&RC1*b[WBV[m5\zznֈRfdL,+cIiM̖_/>rqql+dVI[4_ ٤"|61LΚ|f]wZ'O.pa)rfAbAeXknmCˑt1",[bvSk)rc)JC7#&J*7kxG>1ԡv ۪UT&˃<3()Pd\1H4q/2!X%hsN @@]]feO%˚e^z]<; 2S(P%g7BٹLL˫wJ5DFdb_AkW ?syؤWG^1: Ǝ,VlAL<ʯ:1\?z|Xsc]ޤ@5I(PTlұ,e#DKQWTHIh٤(vŤ}kИMۡ1[xᅃmN֑anm'M;Z£&/EN幷KIJ`>ٺ8-@._[]d3NwQMQX Wf 1Ex='viVoW_}5[Re8A.M 0@Ԯ `X&&Y]tE+G1dObgxlGYuŏMGmxg>[T ,Q9\[n%w/ӼwމE~h|!`c*.[8d;m)ejKjf|AjfD \RV<5EfN-Lw][oYgngiѦ7?D^Om(d ew9 @zJFirŋ.#=ej6ʓ<Frqt .>"J?;Fg<.8KEr4*!7$@3 ̵*TE`wz6έִuZcv$,2o2X@`BcQ{\T%k (p LYaSIoh~#L2.&)$% bYA- OEӎU#ZH^-cesO(-7*eZ*rQ}AJ3!a"jOOp[EYe}?\  *ѣG5G)̧_Rb/ZEI2ȑ#Ӭ%X"L8~הQ ?NhklڱRʣKۧ׍rq#(:{oYY$tH$wm-lf`ՠz1YDh?`smV1bDLF\*veӛԇLU?r9 SP&<0zӶ_< csIbx9QqWwYA0(~,ұW=#AT,jt[R[o0<󄧟~'tTGY62Y; TY3Xc /:_~yC/epvz,1Z4oRZ}ԛ?}US a):RvfRF`T9B Њ#\Pd(iY9e-#A,sN.P^H^AFyKe8^r#92JLwLҨqE~ 00x{!A`Xw61%tw$b}eք)6fַ-i~<1%VZ&pŢ9|ΕkKĬ*ٹ2L+ٖĶetPN'LLVĔdiY/{ӿi~YO<ĉMǹ^X𙴯tn[ R1Ӳb[]/\*ݥi18]d7/0i̕qN Sj&@5P*7-ƹk+;TLa6 ^Ʀ屏Ѭ cAڧm(ERF2|6Ω,+:LMhF ׮Eu^Lz\\+1Cs d%HG!=mUDaÆE .KF?IVz6X~L.P) \[qu >[!"]ˇM6(mrĭ$ӹR4eh}^ziPlқx ..[xyM!RiO[e!YO-r2= 3.Bi~sIN^{ Jm}IPQe*˘>6m9K﹬[MoIoeY)n1Z)"kx6J}@)p&J!P;4$V+7˲N2[nqcc-9Vd2gFkG,*G ;2Z]>ra+mS%E= L?(,[o7 2.!0g˘1c+ WiVJ·ˡ^JWm6)k1+L)7Rj JgҔ[Y,[%uj= L5TA>qz(_ا/^ ZFM->_+66Km$eYf榬|zʟ9I@m2/"rQmQ{@~wu7ܿHΒ\*=ɱ , %wI.ҋ[)2|wL k#\륾|6! ! @%dWk$ ZQGL@jU0~$܏ [olb;&CvH# P/2c4iU[嬛t6EEcH PYj/h6?|0?2QmGyY5 WC:82sz=& ~#P&?co!@ @ P0=d @ @7[m6:I'4,袽^(Bؘ1c 7ܰ}{^|E{giu_y_ߠA¼[uVX?믿3Op lG]vٰRKNƓGy$|U鶾wG/By睫jG%@@_o£>&|0묳=\"7SN N;mXgu~{<|08t׌2@ڜΡG}w5}wqs]b%z=+{WK.d3<o].*馛R:d .bkY*8/ .`ziV 'H}37%\sM͞=3|a} zܺY#FOjGMoJi&S-Ak |2Khw,uR֡mկ[l&l2u;ӭA[n9.PY( ~3(?mOmXr!AO9=˺~*g,ifoy.=Lud Vy 7s/ Ub+> @Sר794_ J/O{Yo08YZ, m]y/[n M,[r"I;Pm&`{̡֘$*GfqƘc{7 #+'զ I~_xeɔ;"/=7q) LmI7hDc2.-3_7J]G962]-/)\<߄\|Aktiy'?IL7y~_u:וew=Ob|; 7LA^4yYoSLѢ&9NLX䴾E(LL(Nu\8KɎЦȼ{^)K-B|ڹg/|폓DAN':T c M/7eҏfQ2wh 6s96lӥRF rgWR1_Ϻ)+֡Xv$AROـ.:nf֩͘EzdCO/^4(ywrS5ab/6nY˼bjm%bѢNEr֛v)Ko[pR!CrER)_d[=_Jb`8`I}k4Ө=\́xlWK.$?^fۄreٱ|TquvYsYcBKݿÇBY,V(m O\tϤ&$E_-V$E!}>zʒE`p eAocj&O_hsRR1-% 8fN=$򌔋EW_}5~/s/m,h\W٤z)5IY)I&W$@ړ~˿wi f&OAj O~}؅Y0AT 438û/<: `,Æ '߇Z[1Eˋ׶}<= }(,-}moa2yl+N̬59¶z^%!;}]Ϫ> 9Mї]F |5)EqN:oZYMGĶ˗@h:3V%<^n)e =}[)Pr}+O~mN$y׿P /$Ey<6q%ţ)V=^ @ 䥏"AȬr1NIJ̕If`ry (3 EH`'k+ p,rL]b)"$$)mK)Bo),wtTD:X%w-QAc[[<؍Adr BR\/2Y)AN$EW@oLB{KPP0Ѫ5EƜfiyۤ@7faZJ(EuŎ( 4 tJe%*udI>J h(H2 |K7/^vv\EYϋuYzȯ]t\.R\vߤ/=30\B Fz`PEl.Ke‘ިgN)⭢)>J8NJcƌr ]ҭ) IL\f1\_WYb*T۶.(g(erEoO=oFyT$@^lG=٤)ѥcXW؈gRf){z.XdQϵ[$JC1I " $XQ/LQF0RU#'z#G2Ņ^9`~c [)_GYKtb.^b-jzRR&WV0(eE\C z`ܰY}@)p7nVhYI(3|xz d$kmiFobc1W߿\e0Ŭ.RSI֞R:+a|/K zިG|[[v%^o/ap r-dgD 7)ŋ wcz8F،g!GUzEg"߾( @}E@,+U^eOAQܤ̣Ғwe4R,B裏zhADE+\^'εh(KI-Q~Qϝw N @sJ#t!!|\wuR UnȐQ֏R`{VL)#?8M(T_MRT*Ijt-&|7nd+M)) ټziƳNJZ=ݞ#{߇k F|tG}׭ -z!ljRrE>#bP ΘO,[%^T *rھ=>R} @C`V;?%AFo9%UN%-v{'tR!۔%[dt.%qJT%)vY|;[Z>\T+xf {+ g!;JѢ [ywτ OvO裵!@h{qK.O<|)s1d(9N֏|pr7?JQ-i˖[nA c`hhQ`>+Ύ.%%]/BcG@ڛ@K)WE=P~Uɗ*++ܩC:[Y֏IT\%1.ZI@?bRc% O>dX vi'Ӹ꫇q7W^wUWeM7 MXb/8W|v\f7d07RQ61ͪ{^iF> 1]vY@-)>z.>+b-Bq-}=ꨣ.첲Eet*֔A PB@^$(0]`, +>^ -T.cЌ~k.w7|l&B~=kĈLPL0Wd|aÆ @-`z뭃|0>裾BYi bvmn&YLv&R6aC~cwe6s_8㮻6WJnqj֥KYdj\)R5 r'|rk_} lK,C%кO<İV[6rm/PH R`*)_q} ڮ#Qi畺Lb֢R(YP֢{ Jl)zcW=4F? qYYf-by,*=T))n(H T;<۷ۈ2)Jȝ> @eƮJ^]/ov.tI"WggkTFr~TRʤ "RR"?+،;=zQo\JQX4_VQFϖs@@gP$?OX0guub'L>4ǔmү)sdvѣW).bLۘOzfږĔXiqf7A/ם )sP;S%&&;W_#GLq+3.,.1gb~qj/1?.s1mI-1i3y:i$SS;7F5j25-^m5wjkd/79ﮧ?ұqnKc=Bn lWzThnsh SN'gu!>mkXfyf/7k\q\ 0 Zi--'xITͱ,^_2).l'ad@ۑD4|{kk>Սt4牽ӅIe(2[0av1C2E+s @dd;_A<^+YC-^/̴NxESS{̭MW"kR~i6-~kgYmY-AAQ.67=AZvG@@$=_L7aRۺd?^xaKϕA}K l΀ڜvkB xUW-UBӋT5Ӈ @VtYi{_Qe1.P2O @kB;%EZ{ជr  Њ`lݜ @3eo`lpX0v]d  TML~Ƃj|T @ @P0p @ @ TMcը@ @  `, @ @Uפ"*xW˜1c A¼[Vf?ptIâ.}‹/y>{No<@g}Xc;_=`;zM  h>8|aذa]z/=o'R֩;ca֩Kd] M`)p?30CqNI1pX| ./_{> t[0>裾s 3.V/R0mᩧr<]wՃnu6_|qbKe]69gjϦ]HdmI^zi{w±K5\K@Y 6  /t'|<.|y_DV34S]0ߓN[n{ǟkz|7k | ʫ5JY48t_vA%h?[neXjamqsqt {,KJ"E/V[m=UW\q}=s 7tS|̓{ 3TSf~g;3\s5agS1ȡA;\ZmylIя~+oUqᇇ\m4K &[Z%{wݪK*%FjyrKP@6ȃm~{]ڿsQGyɅYUIU͎U^p}$a*9 W_}-:k0_)gAӽ[~/%WW쿑׿o#G>] K5ڏAaʊ0eG2#o*)+LKMXI⋴J+eYTN='|AkmS庍Nfv1HOLgqƴm)Mrc":(L$2P_{K,q:ط묳NbrC\wuck}suu] i8)J6X|q&~ R9Ws/J`OƽN\s=' `hN2_3>NЬ&6:1yZ"Z*] /T|Ҽlkx(  oUow/Z-)=LfۋsˮU2I b/TS=)|Y~g}qU2b~fw]b}5=?vZFI}eΞoֹ1bY6ȋ*4hPbizK7DjMn!t+&7R\#$-y7Y՗%׿KĶ[x +.ޖ%,\8mZ>V}*Y&fufq"Q7_"JP?LYIjo`? >Ǵ7C1 ,L$JH'f(j<)68p'f1}G%bVId[_}N$^?3ޟ:*HyLhooltp)b;'=3JbodLǪFX&=KՉϏ)e^}U>+ d(OzbgovGߝ#<2a$UII7tR8fQ|e蓵*ZoL՗4bGC I@|)\nj+~ċ))/*L)[y5ۥC*mim#9#͋'ZϜsY!I~JAlݓO>m41ϗhE)qI'rۚJWӽ:,ʲAJٲd<.Z)zby9ޯ"_i[l$P>*֧Gw믿>;ǗzPwi@ :+H@=wG/mYt'+ėz+lzX6X^n+#G$`4W.ޯ/ b)$WG'#F1+oeeZR\ {hPꙓOETniG Fݏ6̯% j{/۶} '4{( vLSKy$t'K6b)G|ϠO_1S\P,nصy_yСC=(70[.aR6;=T~gxv-e6S2f?#7L&E,&{Y3-ѣG{(mK(Kf3e!9x(陊R~{ʂx?}*K=<ъ~ Shm7SLer_1Ԙ]Q3kn?dI[@@ee]<9Wqd3+7}ñ_\2(u2Sb,ʩXzj]oe:;([gW\K2ꙓ|K&lUL{XGr袋|l?llfGӔ!t$ڴ(b$eJ9aVS1ۏ!2?{m#P0X8X`. %9fV2ʶFdJϣFf8EUb *7K3wfu2ʥh5KIWJY.H?-K9nt* ,4.1Y=8P~('\r?dot]Rbdo=m]U}y+?\)" D% ErA $9gA@("E@IJD@QQDQ :_ŭwvfw7s眙P*m)G+}end\ 7pCǢpgW7ن F,k3 cEێX!o8V[,B-aSLĚ8#$!0#)ɘ e2D=k~첐`.A˨E.]$؜61Y'iaWV;Ws*¥ d O*mҗZj)uFD;t:k{e~#9TA'wن" $*2L@A[ JFQ`^xA&ˇD(L.|PM /6!uJewܑo_h˃fqO>Y]h`XcLlnUj%!֭u&(w'"M1`b}+w>oGpG`\ |ͺݵXW^Xd-# (m{[nŠt>I:XYl ?L5?'"vǙ-YpY|S]Hp衇}ݷ%3߳8eam8dD)HMNja4| Dٖ NH5M+x㍵?xo WLY6k|uz`>Bpv]F$S,D!Oj^,fBw|s:dzYEMdؽN b8x.ӝs^GpFAe&bI뮻沚/yxjDC(hÂnSrUWSE3Gv~ c4<Uѵ( k,=`~C9$<y֦NLtCۛpIH)φ>;I B ܁۝u;믿%E /d!jsLgv>Ύ[MΉ tAʣ5=sB,;#jB DEnXmVvXxGZJ*^%㭬8 a<&d/[nEi(Gq= 2a_06GpQA U~!J4-[>`ձ31:4,8ڿnWSe~v&)'0?9#<,$O?tM3WG-D&P 0J|:nSN#*\'_17T2&wFi#8QR(Yj\DdKˋ1P&l=ħˊ\&>E鑉oG +dZ0` 4%o'+b^(2KIM7T냗m6Lqgb#Jn8kk'ݮ4Z(w1j&LM5|j3xkbْˏ:Jkj8 . S@Ɏ=Lz+"PfQ/ٙgaP%wEi'2[tE5]g=g_Zk?FU-Hyqr~.z]Z\Z8:ON@ct2>{i|" C" .R9{UV4d $!.TFڥcJմ)mXv?e;b!zm*.*@96)LV'GItLm(,Sm $V]7@IDATs~LBz/da# E#>%;2R-"1naI"mk;BM[_7p ,X`$Xe'ʙl_d; F[Q-xGp@]S'G1eL*?ב/EZy2lV&c7MR0b&UuY#)&5l[%#OS0{l]vs~pO[o ]L).m/~Q׿y[/,䒵zFGpG=L [c_W?ax'G>7"gg̘~v-/<@]t7?x~׸o~s?.|?y{/6@M+G?jRD/ Du#<vquLܓ?mo{̫G}\9|ͧr<\,agdS#U7QdL~zg37twkmZs15jJ+)7~y0N;lYfD7]mՔwQ?9s]Z{3Q.fp.:#0&D9ur#߰1#QGح#W'f[)ٷNvOS׼&j:9?>O'ʖ`W;[ mً_<;쮻j7~́eWN^xamo\rIf'u^{j,9T{Gmu{iYx[j zy?_rE'TGG`t8æn7,A@~p~m\N^y睷+s9w} 纖 #8# N;- }kfmZh~Uݱ}'{g|~yHZlxGsA,ϗe-erp嗇?oV<14zիZREa < &]vev)x_2~>Lyh";\MIhhGEs=&T=#}jNAc :8#8[lt[DugL &'|=Rh_yYHb}~Av/w("V~ y{tW\vۖ2y-E \uz/PcX0Չwm@y8& +Zj)UkO8D+c-n ( H(Xa+Nq;kJ)sڧ`kn2lkxgM]jz͋+-a*;*ANVX궕xeaϋ'&Q^_<|Uk7Yg=g-+sST_^?ϴnAXq,#)r)|R/G|[P>]s5偕J $_(}{\\ +sls=7Vp!5l69;[bJKr?od`cX^NFVqNnĶ&:,meYFRHO@\2 N|p3"pGUzD dI9,~6O87no[JnFSOz/?~AnYSց.Leuv@g}ZY^W81Pl*לwyN KO~Vtȧ"d5z܄l>UIȠ_a\ ,A|jjk *e)vAe[B9?``g"`壖Fq2(CL2wf/{ꩧ93EM(v[b[Y:c[3_5ikK>ɋ$t)lI&[ 0 ?!?uɪg&/a^Epi? jP"M)m~!>׫VNc%Q3@Xd\DE*m,ȋ(.wMo٢5gpG#~:nzD^6~`Gy$oEwL/ \hھ(4NRRA 0( ҼdٞB&S~̐8tqc'ӟt&yy#u#)/2Ple7UvaiG{֊s  ((Q_[o^}-ʇ̕8O}R@"S誫)tBbDQo}^gסq}W7{nLbWե8kw4cy'T]I:|MQ zǯDn6CThpΟ {͕żĽ_wh`Ƨ+I;UlҶ_"(b;Uʡ#XeLջ(Uqo&n//nČ=oQV]4e+zH+/+'*hHL|Ld||X3}E *گeP*_λXji ڏ 틕`l)wamTl\^&^[V52Y`pdkL<@\m {>!\ L+RUb[a+uM?x'1UL3tYt'G{ "5ckϼNM#/=C#"L`dlȪm&( C&mK)F /}Kʏ#8w{xEz2)^ 2u)jyPs]LlX$ l#V(fi+HVl`pKREW8$)^g #G@@1Ś袋ZR~+ļˡIuY-iE_}~لX*0mcX-Oqjr^4lɔͲ=xIU2{-C!O*Mnol'S~eP[OpGk34F@O܋LTyHY`eK{G2S(8B& FvmU,3FvG:_QJM>d1Sn1-)#3꩛a?P*^ +LϽV/r1 Z̙ybZ]l=' AP/s#l^:xᘢ`4#c=6Jy1A[B¸+=7Ez3.x =2揌.2 O)Jtgw8ۋ@Xa*#?U {!4꧂e=]w5r-Q"f) e\G(L [@" cfD~햔+QLf[yaJM;,ȃR>{94+Գ[-Gƚ K22eVكjumcjV{U0yD~3lٶR~.ALe(uX1OYQi馛 eLZCnصHbrim@[E#B1G98>:o g.48B2~>1Q.ܒfcDjyH14RQǙEq uj6`lkCa~ $O'* Ĉw=GGpG`L0* /p* Y]b6l3 ^G`Kᢋ.sYMgeuL}9\39P|YmGr6h4GŘeBqS8Lytן{&dPEDŶ_`~J@GQQ<tm(`&9PNMg&û,w!o~LA0O?? j2Ƭ^+ie RFu;?Y~ IHbYe*?H vŒH(iĪMH: "ʡhPA;A8j{q[Dۋ1XGC#K86cD CB(+kzd%CAX+0UT^[&}{'&VȽ`DN,ݨl,VE07 FE'jcz\C`&jVS!LB#8 o9D<"/ݨPQ%ʲ5g\,V9ybʤ/n_vH+V!9`DeAvD+*C!ksfh"* K^Hnks+_`ܫrg v?{Հ/Yx~e\/D+P}ڦ`Ř-2Nz}Wtٽ%-Z** /\"-@9ۏ_|O F}EQp+*P v#^tUڮڀY@ċ]"hXTAډߒU!WVo+~ <(ę8U4JDl| Z{XgI[(Y\%llg<\(B`EI;7іC~vJPb%kݲa aYYFMٵQIw5֦N#88 0SMNi"/z%/ԓ 5:uΩAvK왟w% c c9F/ЙNcVO?[Y])ʲz3ѭ̠0ZEf =|}'wYOBP%ȞzU el뭷?eX?0A+E|T7C#RM6f3m32E) 2+#ёu E(s_fU >|lu`J{F{A" ۬@(ŏOf-vaA|}ߪ{WJV YUc/;cT [eƝxZʞq8#09\YV5 @XX}W v--b}b U0"MWS/i59{Onrfyqd'R(+mfGd!JXtî?^}eb E5*;6lX|W2GwC#%8ad+*a1kxԻΠ~ CsVƷ1Te aVP3C6X)W!JDVl['Yeo9nZ'A[Mb;(Dcb7(@!JD7+Z( Cg NaZkkG!++kz&YQ/+rߡuf[]k)#c`VweiXpB(EB8专~1X9#8SQLJmbjwbn%-~BӧOWKE w'AJtNѯۤq_qދlߩ}#2ofdcn03l*JymSrH'd!UcE˧*iM{ӯg}ks6n2.M%d ebAcb_v?c^8weAL;F{ch?nR0g "<Mc!kgK-~PaVXg:@ %7yY+sA S+,$zpe&ۤ!G`Um֋#Rx#_y3?KqX +~YgiqGN1ȵ 6 nƖg^@ú1&/q~sN[ D+ۤ!t(Y0czaa⹽R ź& 0i°ihlH'kqIL|0jyQ"f.l=ȖZj)MշL#yķ^A~eGyd&/zM?Ɋ+'JLVR(2Y u&[d3BS(2QYB-q31mt=ɏb雬v"uQ0Yr~pb!'Zˋct.%WQ׹MFɎ=L^dd9%KYguў|T2BÝ{&/l"$~&w4N6tSMgh-3B'c89# Kfh^`/3v'RedPd-A#CVEf@ΖlM˺L|t,dۺR {63ړ ]j9?Dz-Rd*2X\j{;NJEe)dW>&d7L&ۚ[ʦjT|g3d'ʖU^y@N7Ô7;ZDgI}Gý dH5&?Ƽ|X$j:K~w[ Hr\t#+a c4c뻒sSg[k5cUtK+i۽Ou{GU=?gqbZԋ`XƿIA#=;ϒK.٦We4Ir('Фb^{iW bo؛ 3¢1GjS啬,\wu&l[֗QW)RZ$vH:9p*VTQB\ mq>d{JLk$t{&ZBѰN"Oeg&C"c}KLZ-jzPeW|cik&֐+M|sd{PRV&XJl㇗D:Yhe #t@ޑrtrRoj!Rsy"E^fY9Ld즲ɤU FLe[:t1+X`${SپJ.*NsV.ɳ뭷^Gb](}2w Q5E ؂!teYE}8eƼn#VYI"P~." K,c_q~*{%NqV|];8Y,ZPR2KOYˇq=O>dŽEU'{F\ߒP,xs#0u&'GG#!?Ss69 7(8'A'9߲P'e>P&)# ]5` ob;iyH/x[,u+1C@'zU,](B?<3'U쾩$*43Ӱ~΁n^"s9kрu/w% ku|WvjgPz uu?!8o}Yzw2(HT Hýs:LYyObad[|eE?]I$K8 :/l J*WD4XAM GwHCX Eo8+YST0ug#;>e{?|Nje Sg:6;U:5JYiƴζ#풣#GYˏF2?'RkL,uk2>&?e[j6zbD7rm2^Uy-og̘1.,O:>]i DZ-e>va0EG`遭l&TT%V1#g<.G:+'5(^&ФF;n$Caw:"wqG Nu%~tK:.O.,r輍blUe˪iwGva1+=*R#0-Ӝ̍rɈ}饗NUőy` l L#8#0 A9&(z->8zA"_BW. j+$~xE yfGX܂qbGpG`p ߼[0=4@ ?x-@"-7(YGp&e+'Ý>8#8@2eRre^p*" Ʃx׽ώ#8FL~-Sx@xGpGpGpGp^pczyGpGpGpGpG` # )|뎀#8#8#8#8@k^~8 /4[5z7"lfX;; w,:{QGYwu[?ޒc9vz*&J+85m5ӆqrae2K&ͼ9jίɜsΙ Dͻkg\Dᚧ#8@>S'G1M1=.Tɷ*)vVq?eyk*ZnX~χ>r!Zp_y[K٘m19]uoq".Kf B zZ/2δ~i?viqƤe8æn7÷:fڸ` ׽k_ڼ;o{q#8#8h">a=LfpA͇^vwMExeG` [FnaW,t{pQ0,k_Xs1DŽ-ܲ6'+`m$N#8#|[ +O>dZh Nœ(&Z\mEjXcX}s0~<Xb0>S/\zAB-*P}3 A4UtGp.|oupH k=s9݂ _5Ȇhm<|¾o;S(2\pA}ʈo; kvT+si|~>>{e/{Yr"_ oxCxާ[a97馛5\??O7vIw9x`n 5HFm~O<1|Zg +6pÖRg?S+nA)rXq,#x:Swz΋royK~պg5[7 l^җ5wVYW^Yz;$ֽgVX O&uq{nXl4!#Ӗ8`dq=72 Ǭ5] Gt,$قBYgmp2h^q@ }x@Z+;*)Gp@s\=~nN㎀lNd Ng&UQ}G©| _(~?p̓/ڦ _Wt'l->l"\bO~8 m]v/y]yU[E% M/\ekE_*]}:;aA`ug62u ,_y_zxի^>FMrlo@/|zU~:QySt<TxkP /\/zыJz?gYg <0'@p}WFMg~%w^XtE 'PVDg'x;Q|ќDєb-w$?_v(*.'}EPV]uZ׿u[M?dKY&Bf >sd䛘V&|s2,U2SYdȱ^:ҋB>2b>T:ًZZrbէ<>\vUWe_eU.&;U|Ј GF}{߫u-:&mh5]4ncfBI'd١EϏ<pdO|B#7/>(}LV3*9XݵxA5Y.o<@{k:b8#2$:S_*n(3Xժӟt̘ScĄ{uaڄT#8U !նo_)M /}KʏX#8}; ߷^r/3vO);2Q$C+LvM2m4M5T2y[*"r1mF.%h?+[hdzd_#kȂ1aLo|yr]MT<]q9vb _\JgG~衇62BI~W#Kl4)-Cy|' 9S<7#B$c@7f[G2m#~o{ϴI>ImˢUleA(Xep;?/{dn"^X([x5^ %ka]U+}@P$^,brȋuoYQ oL.Hy3[MRI@KңeQ%Zz86:ɼ)|oq?uq;w"a45q_J}LHK-T$N/Yy}€;'-?9@'O?M}Q#OO~0b> )B&/$[u]Mę'G*dxef?ώ4Aَn7ӬC-ٚc?#b2Dy`w|Bq7>sΟ>TB5 緌 C'pGp@|*/7'-_h {n#O}Y:GQbk|ڿ: K_vHC7_R@~`mB,ۚyeq:c9Xw4Qdcn᧝9FLZ2KȼI(X$?߃Om6HpAJov"ޯE_ >Gã_~fBy}}pPhu%'bגi2PԠ 8%/#Cb Wɇ(/\: Q,&j^ VuzS! Oܹ&Lпb@eن>c M8c ,oH;(!2.'>[.3,p 5\z?EB`# Sc1_8.:7zc';ٌ#8#0U&D^&X ن7#d4:8gfi0<nX5}Y rX&BMWD&Zt'B5BʊĪR7*K@Bhl!V B_coTK]EeՁ@RFeM*[ʊh ){g4dO`,*6Xo0y(c34)yGpI@2$E^6 y̬Tv:7|sU0b\cyѨ,b#'˖<{J OCEQvorYxeaSE`l*oa7n2,X.~c dmB(~©@IDAT*Q`iJ}twLقelG!bP=cZ@O F}ś &t+hEK&S+k6`($tj`7Lnd T:YVKSKSKHx>AX4lҎE"Yu)Ojv쵓-#æڨ;ۄ MGp N8D^M*#n -E6 梊Z頸+c9n?( |aZmTO &CB~Kţ Km6HP=& E>Evg2o|L综R<)(b^3Z`ȋ~wyg1?JTBA[/iX? u m eˮ/j~rXa=EJL/(QF!*6`#6Jee2)%Нf F䞪-T(!He[h7: q)#V/Yp%"%l>1o /oXG x|pcj~qzٹ`҄$/"ߝNyvMpG`\0U۾H %&Y;z"FKu4&)GS}?|J6Z,ú>Oi+L*Cy,.3b{1ؾ~'|N"T<ÐyS?գҞ|WWRcy睧ɦ`Tem{Z9#` ~MbcE7!V9sf /m |[-YW, ^i*x{-џvA4kNg[?pJkV^s-~~PuPZ lIit5`ъb  eLo3+8m4vv̈́eE!Gu~U!7 ҃e=hpGp22!,mqp4j2oI|#_{:qŜeK665BAҰ@O[;֜p-X1P]vYuOF.}4֎B#n(g"0 Q X}]nj25 ֕85E!VK/T?9Ôm+b˶N;MWgr.O?ݺZz4뭷^Xgur!"x%~Y@=\֚ŭ-uY'a)RVZIqgw[}vHTXr*Xma%%fV=(p;/bաODI[@&GpGo;s/>v\eyAV,#!(eMCN3 mL(8 U"-3Tt+G3p-y)/]w][~ďc&v,W7Q>(['myUᄏ+>2x/%9_TD$j^Kv-/MUuɊ^o^]Da@Ų1o&+DsD9BRzh5(ld=LV[ړV(3Q>jz̟&3+(%—%Eyd;O5YikmQ5QfH۸쬳ʾhXqvIJ@xP8 ۩; 3"}ڎ,SG'7sU7Yb?wN|tewsGve ZDѮ[LWrs3\~xs#  BCK  0s G?ReBBŭ A;]*Ӗڿ&IBS}:B+pn'#8@4j<:?##}{`$>5;ܴ2 *4u}f̫s&#_d{4*K. lqToGpG'=#wy?Np;Fp&?n8pGp: P!_rc8#82-'-9#8#8#8#8EkwGpGpGpGp&5`Է;8#8#8#8# W0_pGpGpGpG2{睛p'mo 6ۄS_7](0\s[.gG?Q׿Xb n_Ɍ3~nkկO|# oxÀ9Q^ׇ׽u j9"~dz1dS>~߇=ܳϧvZ_^׆6,,B-G _0ves9<.lX{N;V_}𲗽kY8#8TSGedB`J*' %ADÛQg38䓃X)mgdU-:=7* G_X$<ނ#8#[l `Se;SUz1Cea>9Do^#,b/}#2o6@ aR/6L<pGpF yG$OMSPprpܘ{+cnx]wGH~$h }ݧ+q=dR\pْw;L6--|ٚUў}þE.??֠{:B|ZkFyԧ>fsNx_>Xw X?g?Y VQge'uy"g{Yg ýޫ|&n׾ć9|(G8m~+2O1wI g‹^?;N9pw#.a78-[b~!)uY,?J+RHgWkVY֮iu*bUN| *na8sy睧NO8m'?I5Hx]ve=stg>9" ̫_j=}s3~^{8qyu'>cO GqDzGp~@|y7ljuD<ֱ'qjŏod%d&FM+3Hn UNh4`۩M _(TZE*OW\qEu.AvL/v#[2o~9rGw72UMO QgMh:vyՂ .riNcA>9sQf"RNd[|e?bI=>gݸ_?-M|_fe<h&cUW]v* A&ĚN9 ˮy~:\rISVv2YOMӭn"sPV5,9;C5?"񖧋UfF<#ȊFBC(K9iʓ=(m|Ҷee93i/,{3<-#.~:KQ0R/uv<;(Z0w7Am$.{l5OpA=rtrRz/劸QX,RyS䱼pAX`,~Sa& F,ydm R_ &[<մ)|M]\$xpcvXTQSbkD^P0r?6tS&Ѹ;ɐMeڔ06oe󍔹nӱ. sfmwvRnxb25%U<ɞXʟ} Fhoُ!JTHg-V9Z,y!Va'jT"yuRY&GKbf1Ɋ+?FhId/"ك_:l~*~w4)X5\Nx V"i[/2eڶ-2A2뮻T"TST*>qn3Kr^ٶn >(JQAWHP0cl[9ږ'#L ѳ,N@cE~/ȑe쌥*)XYulRɎ"#& R660V0j;g :;^|#et>l߳:K x.\vpSJRǟ[.e+3\2W|wzm[d}c}*ǜz "&'2':0NB%-![-5Ѓ5Rpw%ΏcH[ Qib;r4eVGt%Kn94TijӖ/qBE<5>*lC` RbV 0Хo(ˤY:jq.VWL5ODVReX1Q=WMMǎ:W@"I4hʦK99Ϯ,}_C}}i`.[2K[^}҉l'P- D Zr:y0&'HV4Zg"HZENAbQ)Gt\YhB|o0Fb$.G&΋Jٌ 5Gs~MIU/})AVHUTnl,_V*s"ס^YQ,mb٪]z=5QV:aJj^<kfofϷX3Gp@g dg%Wy.dy<,ٸ-"`&:gyw^,")p'yi^dU۱J~Xo(Yd}GԔ8͜%?2X[m|K4 'F靑:׵~;n0O~y"~%$0Q^,y'Unq;~ٷ(6/V@'#A!$~@ݍdjɯڀD`?M?Z?bLv xnٚN:/:V??x _cg,F$#ne+~qn֧|(\Z/_te֋eu#I[(ϱ]c5lw (dYz/hn[Oh :d+]PdO'{L]6-!5fɖcU 3|4.7~ɐMc'٭,Lcj6hh#kMgS6.Mh[z}zR0JhPH@ TҖf[^zkCp@Ɉ# L lm|@}(jP+i`˺$>\T"F|m.HGD^XT̓+Rb9*Qy:uLz,G /新շ O"V[%r'.+ B-81+׶  ? +esSvU$D͘?x<Eb{2{7}pG@gd];?Z.&O<"Xaen`Pc%צV'ylaɪfU ơ)LuYKƙ?G *_2=MVfcǞngϘ oW!lQj௉aT3 =l<餓Z` }(!SrvaiSԖ2CjX[ WLYƺ%">s9Kh=܈t>l3`t]wWqSy6-#V]T#x)@Iv&M|+o&x+ Ye/u,l<9BU1zYuMF]$ð>nmÎί#8h!`+"sL(cyd"dS%Z*b!ѐ*2˴dMPJjaʪk?i(&C*Ope;vP2'RHf؀~%Pd0?$4j%C/2e>1J ر6: ؖ0aV+om7韕q5? a6FH^xھ%Yˈ+7%򗿜_&~ vQ\&2QJZrF4$":SX'#~DZif1wF3R)c'-ߢ1'J^̉qiRgeߪ=o|4#UЯb[w+I|kfz$Rr]jƋ .cL|fhx(:0ߎzFe6`M+ׇ2C,u m˶nd&۸3ZAȃxMYkL,Xlb-첚.+Hl׾ g`_|Q2RAZ} 9PŠ(eޗw1c0}62oTQAiBEUn&>:3ϴneO LQli}T`LʟD7T)O;4-/[3ƌo*YR08y F,n0Nb;prpr#㧗QۋLgulWlP|]nz`LRXTIG!Y`P9*=5? v?EV)ŲH1M2>2WZl1J<s}'a21i|9bmN9&;ɔ(MSꪫiC^gUFdȦ2m|bctK٦c'ٵ]<6E1cq[E)S[5-S0R_ .Ŧ^h.~;nc%鋭{U9z3EpqڴiY NxXe|v1/e%Y1_|;櫛Ȫ ѸNꕈșDĴ:jwW^,{B.F|$”* Oa8J*VWdt JYO|^XliPX;ҳ(7 FEh}(J%Z&h>22|y\GJo+Ek zO 7ܠ쳫 MZ|t n2dS#LO Q5ۨ\5;i8mW N"[r1muI0~gU)S+;z?zZ}*ǜ_~ /؞l8&24U"Uep*|wxQQHN#dKhFRuY%O7mEd.ӡY|Pt|1|]%³<9=#Z'/oٴS٢\UCSϰL>OZ3<{"񱂿U&pFHV(Es1 Hb_,N2;*X<2(ױiSM?,YURAzwQSyķ52qG{mSAʐ)QygYݹnoӱٍ<٤|/^oOێ@\GF@jg)$u ubr& +o>ݎ~#ڼ>;m-Ai5`1Yaֈ{G`(ƺCXu5U\k^ G){22dž7dɤgW0μ?&&{p}{TQQT,^[ ` bFD`B ƨ{oŨXw{:圳g5}>ygBL͔ug/7gPWh;t;Չ=k{qĞ4 M <Uܨ!cfQY7P5jDWLnf % 5V߼Mꗵd;ZC'+;]|-ˁC^ T}_uIu9-)O5\;CKDf+?}p_nyb E;D͔K/ua4,@@ } C-@ /ys @@-,+Ez @hX0# @&T:j @@?3׵閳F`4ݔt@1@ E  n!@h~,k5®г[ݮ3k04OSLc ii0,@Z@>'/-:V^'@bh7' @jH ndfq]W@=OGHMe-}o=zVWサܔ)S , TR5Ϝ9ӝxn7vna*jꫯI'n;׻wj5C P,ˀGv R%.4{ PO!O[d Pe\r۷;C2Z1c>}o2K}[~aÆSN9Ԫ.w'>-E-Rgy#[uɓ'xN"|NuG]h#E@s[ѷ~;- +zn;z^ǧ{)MyG q`J|DgϞnVsK-TZڸzj;%^uUn7v}}_$w PvjcZv"c+NAy4O`K@]xݽ"u.k A^e}$M[?믻C=mfnWwlIؒIɾEjFmΰFlμ50`իS_?J3 ԚC8U1;(Ni<<.O}%FE*E@uGa5 u72Kv>7I]q^J_|2;xL|Lc&tojGc9_IP~?>2$XoCo֫\7&@jvo ,U9+Ipᇇ27-!NYvm }7IcBln**&KDLs7tS>fÇl0 dKI ¯P_|e4Y*XcP_~KU=eݓ$JU$>H|B^Q$f[#F??)o)Ѻ! Z=@@e$pc li)ĥ(ʨ, ~Z{=\Y1=#Dpo:hqSgVh6 @D]J,G$ՆYCcF6Q޿KeWW OKLsZ*jI@Ybe4`rΒlᥣ2ٶg-v`Ͳ-䑃;]NqflFܫe5/'qk\m;[2$3fYVʋ$P)}]viɪkun{޹* 03jQ(`bWen^X?Z6B`4Dv0X?f!a%!Hۘlly pv3/!DD o$j^m0o{ IfmBZ+v6dB, ɝvəQ2֠H$vqhNo^V i55[UߠAmvb"X&Q۸]5֙^x!D3fw}ݰaﴽڜ8YӗPzQρ|-W>NP,+ʏ!4'jT敃Jh@eTvk{Eh֙jS t {,^@IDAT] zO=T8N^'N[ɇ9{}E9D# hoyF3GqDx6 3HӃ૧`Cwu~lOr'q, q,LNz[bNBEĚK 0E".}ewuׅmֲb]eUbtUHmbڐ=xW[$y|ڮ/J@_oYXÑeKeUR iy(Y?"K@6h' EY2*DH⊰}Wg/<􏴓JY/^?| r|"+B_A[d%[\T|܊ԫW/W:=<{ ё#Gvh(kRk&OgU.FkG?x㍰x82gϞμxZg^J-ClOb9c- 0ϬJf׏M AeUGHH5링&N@6i??\#(0^p!*ۂNi[¤_vy ^ۻ^yva:;8',-1G]]]l£d{ֶoɽ<1+\~9}=݌3aua>ض\o7ԛլ mm?#DIoۋvm)IHĹPN};I}:t?製!Ne ͌[uH3KIo"-! /b4/cǎ /CмAg5~f2Cd~gvm}(t0 ~cig7&m;]4ܛH۶tE0h} @~.tLZb`EGB &y撑@ /|寄H9d鎝pN"$IPJ^f:\LlB[?B3dȐQU@o~{|#LGعI&1#I=zO%:JSmNʚ5s=r筷ޚ7]v7$Dno[Xa ١#· gGc}J`< |Țor:D Ԍ@kC׷T"h=h~b7"i`X?5GN@#F_b*r83/s(":OPW⋰7nnL9iĭ~k;;֭*uݩS\w}׭:TGՏzikvU'pӦMsr"'0m9NQ^m/|xQ sO?tp:#/:2 U7k<.l_zktE+>h}ە\n!hk뭷?|F|f̘|7M^}n-p'pBF<◙y晰68'>hK1j1q4;fa@ :' h{[Id+ xf]⭷r{e]Н>}Ac = @@hm]iv (P=ztF%Gq{QG Pc @Z*V[m57\sx$ P8A۠7|s +d k;3 @}R_ݡ7 @h-?/:wޒw߹뮻.aks uvٯ~+n\0{l~$ u/:蠌_|ѝwyn%ts _uwYg'xi{J[~6pÌ:0vXߺ˝{?11c\ݟg7|蒮F,gSN9ٍ?[c5ˋAU~i?C9.UM7fe Fᆴk׮yɥ^_mn-t6[:+Cj.r_|qB-Fst:)r-?m&P~Gr1ǸiӦ+:o^D⹂%PxU}Ȧ?{M arrr`1;{3":Sc5u]u뭷^6uW\gΜ*~9 inmEX q"$ެB5\$M7fy'LUVb򛕓?x<Ȥ($ʢ`n8q8bb-h٢YTl_bO>$+D< $vaT E4q0&QQxhW^yśU7D5؅p;C}%,O_馛flJ0f͒K ,52Gjט?|xf u-amǯ>xD1gD>͕fMW_}+ՎY {o͢ӛjhGic'k&,CX.{eYƛG m-b9cR i}&7KA9L:>> !@C@Y/ Py,3mY?4ە+L(@)}Ї/<]vYH-Iۚ"mqlR-!;l4iR'3;vM+t ?(0*MKjS/'REl% J "OdÇt 2G2Q`3]v̡v)I^$>H󓶴lTNP9`7<.ض;'im+u>zAIf'l%Ўl UےmvHI3@NԩSƤρtxgB~`,dk!.#)ΕDm7lAU$]~ 8y$B @ әjf{`bIΫ3-<{I|ه &B~Mo&2xv!;U9 鶳Uv9Jk2}m>.G: fᗤF90 p]0ƄpLL{}FcN"J#i[ٝ&LZ('-;+bF: SAuff:(ՙm?ֽڈ}7365/y:7юTI|NI7/NЙ fM =мG:h}bY4@pRc4@ к$C:ؖ?z/$nqvnZe[6K4ge$1u#Gr`X jo]vqfygA”Bځ("N>=8 Qf J&&7f98KC6l۲4e"͗).Ba rԣ|"b"Y?Ly }.e*_O[0j$ uz錄Z"l+t x>'Jè/(;4;)yf@/;d{tV^׬"q)ΎjHU/J7+IG}t' i<<Ǟ!@Zybhy6G 9Ytɲ3 ^ai E$fٶ!VDyh jg::޴租~:{%dX*J-LB=- c /pq,4v]] al{z]&,8;;b΋ Uh]*1X`+$G_Vwr!N@e/DtZs{֓QD̷Ҟf3}JS!}\OBF;2s4c5\!: X@ @ZlaB9jv$Xd&(YinРA_~Μq8sDl@yR*JAu)HT(FY^y|TtΊA⧬g-tvd6ꪫ:masڎy׾e[h+o }1-*XAkRNxZPE~~/u>Awm9;/r-W?˴3ݎ|G6Zޘ_xP,UokLq\APXh-1 P?g.  @@xrF< DH@(RuKXL-2e-d5Ƹ7 "zQ⁂38#ܧD+t\o; u)/"qΑ,d;6v/9rd8G0Vk>?v~zFh/QW!Z gd*A[垬 !DN5DnYNLN\YDk,Y٢ !駟x^h{yIjGvi  @%  ^\''t7;&+Fcfm:_'?Iѓ_oFB;VʺP龕ӗtYyU8r& N tKo\Զ8:Q{e%>I^EJ=֬e7~߸u_m+u>"oڴi .gErΐcǺl+eKϱ=+ N8!ݵp?f̘]z饃 EDȳq! >Ç48u-IޭV$!&cEV  ,7G ~Mg42:3cVz% uUVu{޶e{;ovޜtے0  ?3 *I3/iz5jTH7 ?n8{Yy;1ǟIykްCYbz(mL{SJL ?9& f_색vΛ uGL>~f;ӛQĉCn?BI'0#|P>iގcT=CZ߾}GMcnj2mTC)s&L@ k[4uQ+oqZw&%i_z/a"7Л^1!^HLWʍ~V 6d ެC7.Bu$v|צ~5oSLԌQjCڰaüYzj1ċe*?ΘH?#Z.X'W@x]  ˢ*5Si+`,Wo걥f@}+QZ\5Ej  Ǹl{n?pWsJQJg A1 df[eUB1D"[`) gg"E_K[["Zd[AH@ǘڼ0mG K,Zgu:c?oPG[ly/ebfIFv$٘-\R棣`D4}-gt3 6$ڙlqY՛ogOm9=bF2 AxwiosRY؆M4)ozmyt"!H}ax _ 98x;'O@:_dS3L8r&exoڷz+8?Pzbԙj:OpQ\8W^jMNեJܾчi^4W{Ϋ{q`7;_1ڲk{'v^kXƺ)R:Gbꫯ{.j}H~tįF:NltI3+c'rPcVli ,>۫D J^u_W:!K/ҙڢs@SO鎶z%f8VNs@ٲBML 2o+.Oy%G$M!>$`*K,($):Dbm i!?f&o|nX?쵳~}@1Pa:ЦEnuIY}7i;u'>-!gϞnwW]uU:)՜T3u矻Çݻ_-BnvOభ|In8{﹣:*#D'5\zDŋ.Ƚj?t^{m@@`۩c @@:-[m\sUZ 曻VX!cngq#꫻=zgm.3 #XwSB @Z?|E [&9'G" Zآ{_wzl͜ mIcǎ VSP_o?UW]mN[e? ~tAq=Px>ϰZδC6pCN;3<]qNp*yi/}#mI:o^mj[Fm9%;f̘~e vHGv 馛Bc5glA`2nܸ6Ŭf+\\2WGVG(=[ C{TN6ͽ;a^UeY&?L/џ@h%`B2' Ԛ@1k:켵m/jPR7t钤9ɽ#GLƛy7Ig!΃JPu#'SO=~4o%ys}N yMzY{?*9zض'kt_,C1?-.b0~ iq}yلƱW@E +U!aVr*mzSUTC |TQŽDQF>'u$;_|106O %hR& UK4ǡ 5go,c9[/\X` j& P'?e*OVyT#맕fceT)5B?|/U`mJz G`[C9kIGGQsH(N}]jn?OMb$E̶'q)u|mwWg?KvovI> l/r~x!+" kꫯ2RUBU9 vg86 1DQdo~LJoGk)sDG"t(? eVOSKB+Vv!t*Ye$pc@ 4ɧsɁm QfٗN!TWe&l:3l+q:)}ǧ3t^c5agbPb&藓lVuN9ɐqy煘?OnHU]~3,s9'9>;!gq:1l[A*Wr~K?:Wcs'x3+t}[0T:qWLIQEO; Ia81]:@C @UYe _ }݌4y3 3 }Xӧ;99{v(Rh哃 )6lϬZlxFZgۆC}g3 nhζTYGAm vd(bgŢ%] PNxZOf,mvb++tXpӏ}> JoXꦜR5Pl/K/a[v'+TY~O]>}FYøN/bMi@@`T4@ J$e t['lkE 6Tu9qvcئ;*Zj3mAw-kJmeP+q7hJϜk$MhI~Y)$1u-,TlVV,4rofHV1_>ŘZWʙ,4Tmկu-k5?Yh7p !D~,\!ƺ:@ Ь{챜I{ꩧy `N#$)C wg-rj!AuС%L"5%^veΜjۓJOԓu,̡Lm_G/'~7pꮻ^V/|H~Z|G}4ٺ2WJDVU[uv_-wtM6qrJl4O桋:W@^ ^_ @@iC <8YL>!+vPUC QoFL{vc/H6gY_ $co+W^N/m7r#ԑ#G Gm=?9:ܑ\<[1o"+54l /v:j1ؖ8EYGH< N'S@ @ PY#믿>N:hki\f̘|Z4dmOy䑡{78ӈm>><(nݺ%oqy>$׿5m %Z/wbQ;p=r|p=zt^.p?*55U\uTo{`طo8HNN>d@:ĉC~$gq@h6:`m\r vyOk?@g?fXrsCO>dIuviy(?jԨob7)~ܸq~wK.7+Bog2ts&?mCyMrc[t2я;_z^}]{Cy-8oV~mw^H+u|mէJweЖ} mެؘM7۹ބKoiFZ|01wk.cvc,8cTW7[ބdo[G7tgBzsa?؆1y~ A^`ތC]f2]tQHI|%7b窣5Qz) u &Ow$GuTHބlnysgg&d޽ǘ."!Ԋ>fB@ *ϴjdlW~3F@0/%vIPa$/ BySL񫬲JH5j j ~Z,%ŨuYc[lu߫UvO9yW b9/1+Ƽ]P?XNJ7nsVR^}SYXCN8z䄣 .SOUa=p^xk9dU۸D ':Zrnbݻwƚh\1ߎ-v:j042e{U#7@=ɳBML 2o+.Oy%G$M!>Y`,f05+B&lqN&-Y8{EY):BK⹁ 4*|cF  @:m..,X] ؙrQ`H'EO⸁ 4,͚mF;wh wSmrs_|q{EI 4 |m0â @:= 1ٮGt~ @`"  SA-X'!CN`X'A7 @ ,kÙV @ @ 2"2S@!@ @ PygJ @ @h-3  @ @'Xy@ ޻{ם{+,{M<}WI=}Q2eJM.3g?M4)7 zN  xo1 @rKׯ_?7l0w)$il&o߾^Jp !Lju3c 7}t7TJח'>hK/@Ϟ=﮺K c @@ {9wwfmn.-"nS%zYbz-wǺ]v?\ ЧO7p0  8g) @rh;ęoSL{gJ+TL{mGny8#{:r, Ԙc @*I n^h*R*V[m57\sUVDnnVh!Wmڞk38*@A1^B 4)<8h/s1N1^{E .믿=PfW_EmnرcC~Wuso[uUo.ϒ:}! :Bә_~y߆nvi'wg+vp Nӿ;wG>K,t^,;,kls22,U7袋@:bĈPcGY٘1ce]6s5֬ڝ6m{wu]׽ Iˉiq@@6T(jX?W@ ;%5\3OU?2lAR7t钤9ɽ#GLƛy7Ig!1[Wu#';?Sx ɣСC_!}~JڊmڣGobgv1 R߽{w?{btG.;'3#ivv뮻2V^y6dȐ{Saے~9(]}1/Iges?~EMʪ1+ G%@L@ \1~ǖ! ϟr*0Jؒ8jԨ$N_˺JK?Ͳ.~n%ISϛ[Yx qgl!mxVbQ},C[{'Nfx ]xAƣ2A7tӐ.!άTCO>+ěgbؾGq9%LuhQrw/b7>;06fy1(0Vgo,f3EQ@E@fB@ *ϴjdlW~3F@0󧜯 M3U/'l t7g-p'"ֹ瞛^MQRK1*6Ibm?NtSڪ+ }~՗0|ve$$ o7/ءP}óm_uN_~9QLɐQJߣ'14:J76a PC-FQLdV0qƵx@$1eg0F\!@ Dlq81Y_pf13gg0nFHӝщY{h"^>ۆ$ rFm&8Yk^J϶ohKf$@[oB9QX`5Xt]wsq{n5ȗR=%g%_Y.:;38k2e[dE2E~] ?#z@ $V[m57hbnəӑB#~YriKE7B-5<R}Xa!l uAMTj|wky8(HQyO> 0^VXere^ȗ+" /p\s)1i"_LvcxC@@`Ӊ[ @G@Y"ouv6]X#A qRց 4'0{tږjgv]}mn-ݎnsv[5ygvT;3yva8hJo9H2n6',I~Y)$1u׿5yҶK/mIB 72d[㦝af1@IDATΟ Qђ6ѽ,EƎ@u@&.@ {,gz)g{ e -k,AuСe).¯E .d-'PVu con_xqw}Y3fLpswygQzȑ-.;}Ϯ;,dӚlAXjvyLw?(+ 4vo2x ' T|Jr@Y\PǓO>YRvZ(;f5jT֭7)~ܸq޼{ے㱷3Cz>} ^Iy7?ǏqOrci2я;Y^}]{Cr-CqRĉCY9m֟wy!U*e]B[v6l?S9cfƤo1/޶>{.i_~y(g̛fbK/fg<4̈oؾw4>l?bogh/1yfmf cY`,f05+B&lq9&1,ֽ{&]m".r cۯ?^i  "O`RPI2A @EuBޓy.:,ХK`(0vF밗%Y0 @K3B% `ATIW漒#fT&uAhI bRAM:5cw+1(gu/.*B@ `Q5 @ ! ;mꪫZf̕yw=zp'tR%.@,k& CeTj Uif3κEw @@ $"UgM @ML&C @mV(˥غY?;9 @@ `,E @ @  0 @ @ 0 @ @#k @ @(c(@ @  0 @ @ 0 @ @#k @ @(c(@ @  0 @ @ 0 @ @#k @ @(c(@ @  0 @ @ 0 @ @#k @ @(c(@ @  0 @ @ 0 @ @#k @ @(c(@ @  0 @ @ 0 @ @@*!`RT @ho+x@- s: @T˂qQP%. Ԛ @ |۲A(,H")!# @ MiCcղ`!5@ @ @R+Ez @ @ Ђ[p2 @ @*ER$ @ @-H'!C @ @R+Ez @ @ Ђ[p2 @ @*ER$ @ @-H'!C @ @R+Ez @ @ Ђ[p2 @ @*ER$ PyJKy ^-.C @ @ 1]@sN&n€k М  CDdG@[!Pof@@aN-lU~(Tk' Lhd,# !b5aEYha1$@@g=+@ : @-M`mani  @Oi7|nیПz 1=X0͆@M@M0 h X0<3J@ @ TcUR) @ @Zck3 4YSNh1 @ 4`l hbēJ&K9vZ' j@5L*A JP@ @ (x @ @ J@`E @ @@@`lщg nȤ!:K'!@ $PC95@9(eд+s`8y) !?;Z?z@A` E7!@ @ PqV @ @cL݄ @ 1!3'@ @ugez&iOύƟCFPŞk?,rn*\gs]F YZ~_-Cs@Pdk- {W|/uKinj`Z@]rg@F0  t& xsJW_}͘1-W^97_N @:iL $Fc.𾨄k9rd%:!@ '!J'/" @ @ C-9H ~]tEnpӖV[mvC @NSN:#FM~He|931zm6ݨh P? ?F PQQE+2@h"h|nLЏz"P=Ϊx//\s_hBW_]nT(>7i@'|R#  ƪ`R@@;Cg: 뻮]y7qÇi7tS B @5%XS4@?}]7fΜ?}g3̈ @@$Ip (]w5ku/g}mv|ҥEca @@'ଌNOh`|n40p[jO /p|s7`WĨVm:󝊟!t>~t4>7moMTJH`T;=O8я5>{|_1cT+& &sA# Ps|9 B/"7h|n4,ǚWG} ޛ?OSm2ܨA@5%|Mq pc( @hxo[`K/8={N;6l?w~iL @ @ ! zZj)׵kW'n/:3St-[h_~ᥲaԩIf^{-IW>;(zB4 @ '){!#@ Qk*-f1Ǐg}y睽FC=߳~p$?pN>?#9F4$I@(@]QjyA@tQ;4@@g}ƎLX OtÆ ˈ @@$0[UiRV?^Om /BN@@6 j sO?f˺uY'ckt^kdv'@zc@MIZ_AOSN" &`ۅ{e x P/jZ! !R[AV%݄ @< @ "D!@ @ PZʂNnA P 7%TpVs$@}[w @kņ|Y@/vB"],6 <˪^xaꪫ2W_}ս[߭ZUn~g\Ժ'q4|,{K @H'7rWbX,"7 g׻w"k[oCG~{w;X#Gtƍ #` ܤI:ito#<~mVp .`6pQ@C`?}  @ sc&"J!pE[/vyRL`=4d9_gĉˬ @ PqV @ @N^d|ngw)%qߺivAeuVhR-3f9眳+^Nkb9(^瞻2Z?|A8ugXvkz/vR_%_|裏RK-E*^J*3`>j/ځ wߟ^c5\=gnC~GdV\qŢ7VB(3D /.$V8?12:/oO>9o$]x 2ow} m&n\7jԨpop?d7uԜsa5\u-nv GeFSO=5dѣG'yvabR믿/{oM7'? /}ݗzH2VFBg/;WZi%^{9Wo}9ЬB -$\~y{?>l/{#\rI7\s롇tdC--Ꮖ={:+_WW uW[m^ 6̽990s$NghᮻJt#AQe]6OYfl>}駟7>h~8{SNqoqѯ&LH~m@p/ aJX}gy@5{g$܇^n+Z~ 7 \F @aK= #'T=:ګWКyMV^y/IMTI 'R*#n#)Sxd_M.YyŞ2#I3'/eKy(#i_/J͚M0KpIzmLp JcfIlV!!T7x`ꫯM\J~sFv79oXvĈe172&yQ7k6˙2L^)<;Û6fޜf>m@[l6j~n;?mڴnN'ϚkBkk冰~Z:~V;ޝwmGk+j7=ҌbES\7xcE2@"?_±`Lh+K_>)+?M!_̱eb nmޭ~x: kmβ˶ڊAV묳N| _ Pn ڂ"Gե 1؛4ޖ|-8b0(ކɓ",bۊ駟vW^ye*h B1ɉ}i υ`7>{C ۊ|Сwqn!N*˷&YKI9Y.r-YU!wƌdòNg 7q^{?emxd)YmQ>:󀞦~5u" F&D@QP`BE0DTY ]ŀ0+v_ښCsf:T]]] qIPO/~a<va!M<ER@@@@@@@@@@@¬VY}|fNTMM#Z44gq=&7x!a='I' .0{IF4d#UА:RXwl!j<ύaвR F(@6G\3J6eRz;ϔ3=˅J.R @XiSN9%㎱}k}N40av!<ӝkbR<#{QjV6´i`a;xmtH}}gOTcx*qbd Փ́ RgJ6j** h#&dӟ4p:/cn#9m }9d:g,ZR^~/Gfv2GYio^ڊz~[rrr4ZhIUO*q{L)$6ڰw׃F{w vp{GB)ȥ8|̓(E%um" r'!uQf?kxS!u.H9i"#N -+fUzUtzL(<ßgz'U[}8Ðʑi7۳~׻}E\׿`J!A@p#6 wyI:Iu?J!u=P'G~v7y{av {[.f4fDKAN;̓ǎ/{93N ]i}p`dʁʁl,4馛52mG+~pf3nm7xW]mcSwkv!~^7{챱ڋܵB3ݕ?Tg]f'olyc7\#^/GT/**Ɛ̍ܪ*wN#REc=Hx_N"bɹ>1OӒf-('f]wnR+noF^L7ZMy-CFGd9cϯ|I҄14V tMpO# ̞!vm7v`eKqf6|#zq,D[%9fUzՑ{AEk}=>`L뛷0ܤy|<Ȯ3;d2`6ؐN){gHt:K[+*p Kuz1]Or`@| {uᢋ.]zbVIύ}[DYh4?Ԯ5Im,bYOԄ0׿ ;Ѥ,/+ڞE?F_7U\栂$ Oּ8fA%gSiPIޘ##B{C; s#~ߏ\Ez?Oq4IQkᘚ8X mXK<f>0Ţ u97œ: ~d7!vO6@.;6Z`6S5?J^B0l69ãI8ڽQv";~漑`j<(N=T3|N ptD˵"V'b2nEv,-L@f7]~mˆ_y8 ^,0FLF=IO nFBA h$)X o\+**qV h`̈́ (6mԎ#Rbۿ>>#8H>"4=s 65g%VƋY1ž5]idͩdY*Af,JW͞,G4͑9 |0C|8o+Gf]iIxssPx>(gN"v|xL6&aby$5ukح\.kJ8y fzk!uL L' A&6)ZVא0$4Ot+yPj [*A\$STH9'k #=-쮧R? H.:$%&ԋe! e* C$KSmܓJ׿c*cD3^oTZ8>gMҙʣH ഺ+rjx@@8{VsN>\ocIZNkn `9 olQL ,!SNSbSeB.zlL8|_ 혃W^:eir[b:1iֲ\w]G a+'aP-'?f ;"1J 0NjćrH8C- =c@*OO=Yϊil6Q~v/GxvI`(|Dr)]\c84ז^hG'~#;_':^Κc15Z@@p0cn$iNl|ˮ`zx<8T0/00ɿxǜ ?çvTAi<ND\J_|Sp?\/ ި%S!jy^rK7ӓkDy*1QNyyz~)JȖ_,_2jk PiA(glIG3g&uzi#yH1sgl$QṮd\Ls>1Г!uL`lyzCJ$'/]ׯ15΍s#s}ct)qMb@*0%s4xH61 } '+)- ?mAxLHUz,qH=g*x$qj\1zX$}_k.{5ʁʁƁ ɶ} i6cs'/ a~"͙<}Avd{88j@L#xOR'#xI~#_# \J\L$iq 4F@r ItOΝFX/**f@2tbK鞻gFS8px+R0xӣ?{a=I=IG5펎l4W=ś a7iK/~H4}^o@yА:zC$[,#&7K'R1mL(5yF҄#1}R1iG<(C1=mII+? _"zf (–wFj7EwoN<=a 0,JR?k:IvN,<)\n**V3dydL#y_kFœ6 o$i4/Ǿ8NhlǼGA#LHFݥH*~/H$#YH*֕pii!"|ʮaL'u S? 5qz~idjǣm(M6Ν&qUT@2tbK鞻է/jd#cnMj? 1zbLڰ*4IT9ij;=G&mt䤴Cqh9[fY],m!TXvN"vJD/OJCk,GMLJF"~R?-k}o(?'mEAM8xw,4cɛTK>>~wuT X;Ao~36o-p6\qM6L+dǒ"%c/eI =-9F5鵸CAb _rRla'_ʁʁʁʁʁ΁|+)B٬Mj+-6Ajo42.\d6 9TeYvl:{sykVSf_{Z][m̯5Ɓ?tMQ'\[90#pֹC4J,rb%OQވG4i؇iS 7OGJ0MYjW:%Sjz lD!v?z|l1%Y=X d:+;1IxcO6'WaKSʯ\;^rrrrrr`vu &AF2 '~x/ /:=]{:^xg}Rk&L~k䈦T r-(4K @ov~;xN2SdyTv7eY;YBNT@ [#xU{;rl/9 +]L" 7߼D$;ᨣKLF0qe;|K_ rrr`N /νՇvÁ>:ȸ~K^2Ƞs<+*5Nd/rrrr`#pU O*?y*/-\`zYBSv<,e1t !p 3&m$ ;Am>@+Dw`jWӟ. ;׸81@T/<'D&|k_3 PxYʕt!9,>8WVTTҺ`Q G'雮ƯJl؝ 0[MU9P9P94,–*_ Xc({ȵ9k{yjlljʁʁʁ9( \T}]%rƯ8Pک̢:OXOֻrrrrrrrr`( jҫS X*ҫ WTTTTT̅N\TTTTTTTTTTÓvnWnv3K-O\2LU[;@%?<;+?|;r-“嗿.gl5A@@@@@@@@@@*l$)zhxg__Uz}=BWr8p+\aŴ'?I n`~<B𒗼H6L*UTTTTTTTTTTuT`dgmpŊJYqPyZi|@J_Ij,?oxdW^W8w]ƊO`W6ɒ~w``f_޾/ }sMoEdMK9!]=nӯt+Qu@@@@@@@@@@@"=B̢{.mSRe}9 ͢/G? xH$@r TG&4tAxŢDؠLW@yWz`ޛSrr`sIwᕯ|eT>VoFZ38§?=/*7)$+m<4Mcv_ׇw"+Xb9m&Eyk[rrr`p`9Q'>DhlG]2HLo?Kg}C.c &Mo o[sB*i tB" ;yHwkxuk4'%P㏷%Ox_>nl|8/p>liN36 F&Lj(:]z+ާ~e.wqW~W 4xgD9O76S!o0ԕQuǖmns[V-_WgI;sË^p{qN~HF7iմIW~E o,ţM,X[x3 d|#>`{]$ԕIK^j@]8l %eix}{ma{mwRWբ#(O8;@Ym=E͑͞>.'x'gy?} KN:|T?{G-oJߦ:c{Nynj%ws.3=O-710u|v`I_)ZIEKlJ. cx/k!l+yCllظwwcKW"/wo+2Q ROoRryvmg2%~L \m:׹Ϊ555a@@@ 0^Z,GNEv#~ZZZyk9kj1_x~^ٹ40caZ65Rvn1ǩ(_jIZ>86@0jl5$xk8&?u~ӟnLHMq!{sceIr@Tl>R}-7{'ōGaG~@#'ItHjS) j4f6K@IDAT%"&<1$,*}%0MZ[^zO}ScW^(z ȱh5ѵpKv O$Q߭4oj@C i?򑏌ˡg.Zy1C DnA9}M^-$x(9r)1-qӾ5ډ=Ex~[CG=Q#I271@ϼCHN2u%6 )9晏/t?-е rfxl^Xӵ~ˌq\Me=6 ~3hCǪ/{v_jjκ6S `,AM5 gK?2?0T曔#q@5<8s̑%0lLmf]۳c+k=***V*^oXZZAa` Yp<MZp&B9]H`APTv^j9so|Y|c)-LF `IDc9&pb2)5a4LKH|+Ž<ȑ4C.$ed0IsZbh4~5he,Tec= I`z[Rv$lĄ:|_{GykėP9ꨣEg$yOL瀅 Wg=9c# 켣}ԟGR{W9ǕV# FRj5!j̓ڳ`"/6Fm$q##}3m9Q'I} A:x$/#e.j({,A8 N:ݒMKL!я~'#c| ?I4HM2nRVڈpRбٷӱ {v_ )=X؜, 4lHZ47KN%<u@-=c}HB4{Ӓeߩ+ D WWR]/IT#bEra`tNϯV@c1Jq_nV]9P9P9tj1bD =ޢ/ O0;f!6Rn"$3imΘM5N>@~ێ0dm>64 Ozғf1v&M8R.} ,^7lIzɲhS)Lo~1LMN'4 _ ȦJ쯹A;x>N)n@( Hc^[`=NO%6x6T[pPgw]:+ 6NU'P[#&M&)C v/xyG;Eتf7z=ęBGZ, Le ̎ylk$ /q1 6"9N<[LI,7M66:~uB[KJ"~#ޟҜ%6 z׻6, e 賾 ϣ횾{l7bIuD!5mo }ROņڐ_6Q`CJFF Jc,ft+-qIK>MSlsXΙ됖ccnK;!M؃=F0Ub/v-ilbGRc_Y->s۹ԅۼ3f͏:I 6̶3s#?ڬo_-B1Ob`z衁oujCY_3.H.vqsI~vӦ٬zfE)9_m^=]$b>5)ci XɱD([R>eld[KpB~<-e`ÚwOq-OL,K)/!iCΧ-3_W}MOۤE÷^6a6'l3~ȸx\[f&l1e\mzR9P9P980dn[}4iEHR+H+ %Ge, ):Ң,A*I ꣨0:!}Tb9%<.ꏄ#djϥ윅sU6[Sl@ACa3rF]=AB 2%M>j)yq[tH9t"RmMH^y}3.ɦEISեI09 T)_бWWoL6I_Jf—M3ZH56&Oƅ\ R'-`|-\Ÿݗ*DЧۈwS[=$NL Ie]‘]i#_7T1qix[@_ ˋ $lIÚ"k,;(Lm+>y~{HRLb8qk[y@#tiڴ<$\JM cu{Hݐw!iZ_4tJ$!H;|sKǽNMx}>vkQcn~Glp?q]" i?k:3Gқ~kvK0b=_U0ˑSߺ3M)g]V\Kܮ9cכvKwyHNZe=H4$MyױM8Ӑw}]:{1N}N=O}mv)1}ʁʁʁȁd]B[xmWĮ 6M|)_yv''a 8t+Ju&g'C )l9}ӮBQ.?_{_%$LXMm k~ 8{*.M#\=HzX L87!8& ?O}cJ ,6Xdƥw)")q:賙E^aaFv]㗤,rVrK掼ߨRi msC!^H5ؤqUo67`f$ϝ9Xh;2r&1#_xƳM^ ~e#:ll2Go:sh'6$ t ڃtPKy{ŷq*878Hy3$MZfc IxNxGvCm`Zg2iiywEb>fq|L,C|gyRcۆԱV. T# 1gB|$U/Mh Hˇȉf Lx!/atyNQ#.pfLtB6$ hh"r uroR?{E+%#,l)$ 3gJ;aR"&^Tv=SK4 AVE w9YQCy/qA]w͢qI`$dI׶t0L}A E:8PNA|Dw9Wƣ+d@|ڜeÂtlҤc/M=?<+z_lRGZ)M2:o鰦5 /}lOθzIMvZ`# xVoEɽE&!n80dTCGv:`N|#N?~" @+O alR6w}Az'|tm`sMERH=Sa&cN{ڤ[^fwPTY&';k%>Fi몊HdAL]V{>e'v&N(F\bzqBJ-"e OCǤՋJzxPg(ԛ RG|ɽw঍0srg1mP'ȽD#RO ЦLaIx.eA#)Ԑi{_.A!af%}4j;Ndf ulxExNnɂO<x?]|>>,-Hf  ҥ6RM~ͳJ]4?TEmD 5ԑgm$v07OF ) 0;uC%\veu=N3y{ViYn܂p/}C+U!&ϻu߱<4OwK=8}ڲ6F[i.K02OM4HyW+**Ƨ ?.J<?b\K45a!I%tXrwi$1hb9#Zyɝ~Z$sjq`8Hu0b^nDKARyahp#h10V k ‡3<$ IQWpxp<2 '8&A1W ԉ&v)ع@#' /s2 CbJwB"Hc,%pe,YM{_/x/b9 %/ňnzd>pNHeJZ8Y0 R9RpESs A>3򣎼6aK^6!y7cDC5/N h$Is&C8"31gQ #eu$@ ֜q(C5Hy* H2A^ xq1$$ɨb4mD%| I8Iʉ>.>m΢6%nI {G@ &bХͱBXcvN?Z7z$ a,lHm Ճz|9dc%mDp$ُ$Z$}ԘPɡ[s&Aڬ,u fT[E{c+xE|ϥɇB0iZmFjH4i}ǖnJ᥷m<佑i6mXT9P9P980>\ ^pYJE0X;V#*uPi]Z{!G,Z>LR4{Վyc!˟TPWY_$H!vR x7l;D t&ڜCC7,!|R`&i7r>3q6%@8=KbJAx2e LaB]r8p;cNxd-y.)pAK<_& ,՛gԗ%kch0":8q6Qzb|xR %TOVezsƐI$3}aR\|eH5bd*;1N,rv"!bɯI+$Bd&qMb' 4>K lLE68DRUa~}Dj#@`1$7,ԖۍH/@MRp/ɖR!J}R6YvG. /$Q-ed}$Tgp~ ?#vuY!m&BdaugF)8_j:PW'eH,c!/y}\{ @, 6d#1<۸o]G)= -%D0OʽэndOWKXH?]@n,$z׻Zߗ9+9T rb 530w0A}rzTlY>l# 8c_:F+/^o@bPM"rfR<])u^ʫ=a󃶶Q<盐+cԂ#0ca^{]'SmRBvɢ٘̑e5Ȯ[?I|cy˘07.gӕʀ7 >T*o=mc2nZgOWsc60iLt|VjcW9P9P99ۨmGNX07pP?pKHp,)a ^N%s6%l}C^Jؓ04Rvp<#!:Hڬ9#oV}IdPpwoOlŕ`} v<?9AZ-O x/?q')=S6:%Sy#M~}~ZȎR%;6շ H)k$mfB>4; 6R?631RV`$ &3`UF^)c& v( FiP<)#e? L۹: Jإyu1i6\,]u4Vk`]ǵFf,6YT 1I7k^_^wq${pG^XW8!=MDtem6> /v |nSrB)R + ~u eE7mv"EF&|F,<g$Ap VVXM]5f'00;@vJ2kaCB Ϯo=09 \ 'S.ql'0"NXIc Vؘ`|a:61˖MF{w>ZXiqg?TQ ^& ,Rm$Cֿdܖnƣ^?JI]5ݝY0R. Ke󸑧O~r3a$4oo0o{Js^ )p:t9%<'tj٘}F#~^"QD|ԢhZ.>$IK>->cF @ QN f 60`gJn1#Pg0$9 D+C2 `LkWWuQu7Q /w/FJC"2kj>L=<ƛyԛ_VQ6;hCm|yaJ#mG{w;C61ICX0 >WXo '(^J>ʁTd|&" z 9"1rb(j^FV=VT,~ݿ#PJrdrg[`bǫ]9g!b:-`1WQaA&]hZNv؈"/%R^lXbm4 ` b$}w ̉!`Do4 ^5l9st8袋,~ng.ehN@4R F[y)[6IyJ<hM994,`6}Izal,Ǜzx+?~6sJP91fS9P9P9P9P9P9P9P99PZT/kb'跿8Y .4o[Ub!?R*V賛oXծv=+_ci}qHѾUMy_Xj~zƁc1Û+8׾U[yy ØUims[[o~c}vdsmlxny3:׼fԼ***clj-lW;*GЇ>w T)OyJiOڤx뇻aw G eH`O}j=*do|o> Hda~7ug<ER^2pF0`7n DQs$B&_z{np+X]'Fv |zskr;ӟկ~$ ~i^Nzp@3$Тo&;я~Ԟ5p[X㎳_2\7ã~0~¾;nę”~[ڻ`bcêx]w)bN/qy{K^%L»;TQqr?g?kC9蓛luaCi*7&g?;%/YF +TnOv"?lCxb7o;|m3Gt@yV'i {5p >;L|'?Υ.}2y+^Vzg[s2ߘTX0nӗSR>Z6&Μ'FuvGv~]9s~ȹX|j"K#u{ݘ&-Oh#4 O1e.sx.6 i[8dW2R#Ѥw,O05_Hk>G?ž'6ni1_9h$ƴkve!yH1;4u~k_IOX> m7,nq[}8s[H;͘{7l,z[Yjz[+:5VS[;5ۢ1-9qTL>`}IgyYYYHm}j>>O29cuG%66Jj+>qԱ,颼k~W]j$H:C#E/I~J\0I5i$fi%Af%Ig=zhhTz${bWXɩC#}osu{g,'.B 'y@/ Oi3@TkI/HRVI`|K@P~N}FI~6rh/}gݧwA_CІ }KR }2䟒?%Bh׸~)-?'ȻoHmyH D:H5CRc>G$] ] Q#ȋt 6{^4yL%dßC78nw[#tKIo `F-oyKۤpC)}Xַic=d_DaMk?S(UǕ0R/ƚw}K#l3rml !>y0 `dMmrrr`spoዂԱ%3/|.ʻv|@D >7h?xʫK 0sQ* N)I2x'4{F)9H=$2XRm~ZT9}ov?mGR9 s qCمt)s_yP0=0$ѸD,|ԦuP_owEiMO꒦6iV_o Tg/yJ-o>CA*94&~{#vo6wn>g@rN>>@/LhK `;&=q&JGKK/xcILs=c6ROF c3v8B4fƂ]F[lk`JNھID9s 0.1B|V>rXJZ 6 Ȋ`+'y` zsx+}4gyf}% Oxг xf&W@dǃ:l9#i-'lv=~Ty-,5pC }Ü$h6'_fl a-'-EN^JV(޲sMabPٯK 2}4αӕ`ev> SJ~-)szMz(_W(ݮ燭E8GbA_Qc#l υR=/1$;~^BxG1fWp{;Пhlr Sl% XI@dxSIK,6?pX[Ecm2b'Rs}{}gIVKi#difaYy:ƴ& &f6 '`yh3b,9ɻ {ʄKbls[؍d8aI666(5lSwG1{ϒֶqD]mCywmb8Ǽ lcxDІ76nK7$M)<1wXGzrrrr``V͹Y}"˚ؘcC6}<̥ETnHm˟1'dda짏d#O{bzv/^kkv]-ێN.gNH5D|V=$K>G@]̒6{v%r#<l6#*KZ"Uv]5W\y$ M'%~$WxJإ8_ ~% ])ا?}G~ȱ9g<)*ʼ+Hѷ\M^,Sn.!NhB8Cpw蜐EUI*5v@O`tefM͕Fjf;S-䢔7RؿE]?%R?mAۮZ#{/X}>xʷO;<#e IssK$ڱo-HZ"N"ICX<@P'KoţU0tw 4'*% Ab6 bwD^|1cQy`j>mzo/W[G%:Wj, F,jI{[i!m:Lz?㋧`v-FUsY׾usP2w4v@U OMIE|>hHـS-I-L^;%^ uȞ,/@IDAT[}Ձh$2myyQH1;$D;I\Z42QO71}Jֳ]lz}C(5)a>jyb߬c>6moW1sԌ4}1פwq#|o=fy{zoi+ 0R>}c7zH6x'r'T9P9P99#]*ՓTEQKI %h4 n$5 *ήFq#A;dtjvOvZ{Ȕ5+y[5 Z@LNE*109Br5zC OH( >\B}YQ`jjjҲե~ t*] p(׵JҢFll |kҦR}*^r|bYZ S*17ipk-6y 3YT/{ :kԸ,sϵ5i %2Τo^,<ϸdhrO#ژUdyjۜP4T1MYڊJ3GIRzv̷nDyEQzͥZ'AXXxgP N85F֠ʁʁʁʁ9ໆ3f3VYPY$ҝŒ3ZkNDջ[q(5Rx9I\O`$MЭ>EC{gךڵ5iN}KP3vlF{eucзM^IqJdZ48/0)Sus)I𧻓㒾SNvy1; [QriI$ sHϳoc)H"ӿt+M[4:/" RS8aL 2uU/Lӯsok|7/ OP5pϲeގP@ k'cGzr^wA;x~ϥS3$h`_]ݎ;})۾.1Qpm<ܥXex;%Ҧ1N:r Ry]-oR E{9%]|SpH's8eifO28 * 3%rbw|h[=>Gˮw1sCi/ȐTXi7iА!]?wB<-c@@zcgS=v08;y8q))M Kv[H`_ޜHI|'"/8L@DlGT`k &Ee{ KF?ڮ?JGR \#5B1J]\$ѧ~\D8R5Wr]̥=ș7}4H s=YNّ\ #.5.4.Ǥ.A+>tɳG^m\ oγAIXV8H @4I$qb=0idpKx>JT{>8D }(wg}'Ij;#]0fHD0gZ0{xDJ61FLit$rT<4sᄏ7|Z0"siVS_F iR't )8Ңes|R-mlXݸ;J+ӓ1Οq =l+܏}o&+}5PgsN~˴$|~4`N\R2 yk)Mo}q6q R|}#sԐ DuRma.1eyƆp~FnA޿i;k(****.@PKpUf/5Ou$y`Q%LZ8E B=iJZAEA'BnJ7 O;qCy9I;pzXzdz$uI 4I稄"ӟ^{5)067O S%5`&xdkl@`$mseJ6WIʊ'x "༩OۦudɆ&^C'yG)q UH78ЗX,1.-e<aށH_bs>Xixl"_1fGc8(ed'U I3q#Ͽ^H7Qe /S`oQGgϤX b2j&|$go8`0&kzUfCdP?)~  c@d.F3"98MEԁĘp 2%|oHswcrW`~('Z7i!i·ϷoPg~œ |eM ssӾاǼqא4|{n^hC^WTTu\j7p%wǷbM5,5`aDjvEg@FJ/7vbϤ_j@Jؤ,`P{48aO9 -1$( 1HJp^"`'nE`}d8K+7cϩZmQz{##G{5!#IX+W)=LJ4jhgù@ 8-ސ@C䶤Jyl0ɈyZ7TTA; ?8ԵyRe% q3eQWjyqSm%h8T Ǽ5{%ٕcL鏾*4۞ݴÉX {EI5E\gybOwKG7&6ƒg2xWȇՉsIv<=J;- 5:54<{ON2--?Y5Cm= $Jm2VRms IU<Y}6ki?yrx&_mǺN6-ͬsgHcycdcph[Cq>؍f6OֿXrrr`=r:.l]x) dKjIh^W@I 68h$!7fr1l-HJh;MǤD; %y`XGs!usidI@5&“HꑍIjIiWSmL Ub| Їswۭ!UR pZaHT/I"w. Æ" 3>jN.da> lDHJ-B~3$]m!]i31g'0Jwy ]:=m>RSp`ɋ$},&LGu.H 6 %HZ6h󛜦d}FÏ1D0#-=-iU< <}+)FWN&&/uoo9 /s@}ٶ11!O{9 ?\yxNlDGhs\D62sy9I?ROxN'ĝLgX~p`D~&VcGy 1\sIiY#u~6MҐ3y#uq \b_&D]v%>6Qfq6SK 8hCJH.[@"&`.%AًzDK wMyʐ4 z8/rr`}r :.:`Y}"zvӉoy2a;W2cwʁY9BpGvfjUO;)y0 AXn~7r0e?M!Lzh%@,j+KǢ{}15h9{l(P>!eWyBY͈0asL8 $'1" 'S./(tJG,h .o1 p*H6 du@@-+ͨm} 5u$(>|/gpٶ)8/ F~@W=ȻIPH| #&=彗 u0^7Hl+6}<6mH[؟{Wa1!E1B!:fD0DJCҴ|YoAY***#{? /cVK HwtKۧ6L4[է'2jxZ*,&K1dïwDy0 HBMgX8C,f CЩI#&>x~3fy`dUEyv%[Ϩ3w4Wo$Hwp$$[m 0R~>Fy&Ez(Ywg.C1IZ߶ġ#{/Jn4W%/ـ:c@@Z瀏:Fx6&Т8V=)jUaC'd@/!z}ӭT{ CYk[ xco\m9 $6×W X( VqZʁʁʁʁʁ(M$fҒU1{"ɳB/vm$ 39j rcRR=_'-_dLQ>[55\ij}p9e^iիXbɜkQ93fW9P9P9P9P99PHl:ͩ 0Ή599 x`e jZjȡK@R[6Q)Z]Y9P9P9`\kkieȃ\IͨWӨu|8#¹k60gϱP9P9P9z9PZTq>Zʁʁʁʁʁr4XjWXۚs@@@@@@@@i]p5uߜ /0}p3cA af(⬳ ykTZͶrrrrrrrrrrrrrrr`es++^pwT*(JKHwHH#.)%DP@NAJ) 15}̹sϽg}>>ϬH; !8w&2Sw1]x5RB@! B@! E`E'SS|׿<0miYf+: ԃB@! B@! "P?kz뭷^{0O8t! B@! B`,! q,mu@<n2ˤ m-BiyI'tRBQ"B`!=~]wuCIOh}f_|E>Zigmfh@|W7yw )Cp->BGRwkER ! M(t 77|ž%4fQQG~nbK]ve^K/Mm]ZdEz뭗9H~OƯ}kiM7Mї<d5H/x?b[ sB /biwO/Bm>W^96li%pbJ`_Nꪴ;%\CUV[^8}N\pAWa>袋:'|r>>p uJB@!0^~ =:=^ow:WyEs ^nr%|wyHvhކpH`ɝvک.~뽧x'xܧ:VwS0(i+?Q~ƽUQ<#M~UXeǾH3vXC{vCJ+5ESL1Eq54cg/H05~JB@tk&~秿=uUW-r3HY`;AG>RXcXwu˴^J~O?xV =q6G^_￿uƒe; gmN_ҡE3l9x|9݄:D>60q'?IC:}[rutQQ4L h\C̐Bd[nqJ#Ӹq\^ :gKO=T2b; M_ɈtmubD=X۝wޙo>\zK|Fy=ۍv27iN^{mBz|a1bҕ75\H<>ϸdYYЎB@&l0M>}< 6$c\o>Gs5l 3̐Cx={O/ CB8Gr5Sf×d"h3~_t#2˲c`_H.:_W Q?ٵ{H7w}<Fze^|;LgLߺ6# oH_)O! FO[{i5 /h#MMXuQ6FN=s~}H{k9t&F%|q%}L=;~5h۳[2oI[Ɗ`mq'xYe8o1<0v4_,2U7tSBCy>!Z'g,&d܅oG `*m`i_*'yw_زof}^>X&hZ7u]ĺ#`]ڇd -V~xKQdg}зA*RaoIkg>Qzd55)orV ~S]a7n8W㹜<š?= q!\KOY/;,R O}SQv>; ^ %gf>x(; Z\3r]wYf%/G"~jR#Zys祗^)][ᅏG&t3Ms׺Q!ne]z݀ki/={|^̛SUcĥCT"m5׶M=խD|E?؋gf\ }9eSAg2Q-9!->蠃],cXs5rfW/*hTrr 4hAvEr[׺I3 uI%ǙʁM'08'l<>x]v)+cF}nx۪/n`ikgNQzdkYaZ9'>QA{ my:1hj:[ne)7,g'k5UYvb->;ؾ#r^1̅wܪbj$fhqM7Z?\ɣo :OŘ?u3Sk#`. <@5_~S!q]K\ 6;񴋖}E񷵵)6mƷ~'wf}wٮq6B/ce1V[buLbc<sK wCAN0֙;CpW]:Dk+eLգ [P՗! FٵvG{ [>ýnLrP?ʳ< y?i 6~PS14/>Lσ\BM0ť^I%`V!A`L 0푒x0+WR6L_#=p,Ѭ2l~5".σ?kO,4K|Pzy )?0U_C r E>JpyLҕ~qZD{w>L+8PDdhN>N-kUR<$Ɩ˷u DMH7k0|9Ο#n;W7UU*@jVC@;WW]A ҋ_mҵțn:]C{AƵ\̍ϕ9AX"|؂r6]QJ!}e[sG)q5$yާr7n@܉}ٜ 1מlc mQ`sDjvդ`{G!́A[S L?E| cWr >]vYB*fc**˄[bk`/jRn6|P/RߣzB@`>yӴHF$\{5P|!~-P?Rqe׍bsRs_1N22f/eZɴb҂ .VZi2=vvG'Ή>3sY&4R12g|fS+][xi&e;F,w{: q`&^gaf~2O<&}ga#Hܷen`T?f'2z]c76w~ ̴k>U?2m௓kKԵJH@ω~ H˱n⣒kKu>xx"^4Eӗi+8$G7 m?s0~/F;" hGuW^z-i_n_~;>n48/M1-dZ|C6ܴ| 79+;b}vN)"<|`s5;4usba_6Sb<wUSmcHE/ ty"A4C,S" AmhY!ʏ<{5+'i˴Nk$UUX7:Fp,>vWTLµ6 VsGQvEyV* #_sma3(Ѫx #R2_CxkxMI'7n`!DY3rekJf_)yA "4!M|)/σ }#DO{+'D#Zu`&S>!GDfyͺM- B@N (W'hWzk5rh1rZaA:I4:-E> Txf|H #$CP|#r+ASi B.v|ER 2ო:lL7un[0D<?Klns 02/"d4l{}~0~Vq=X'_|1ׅj1ż_Ѧ6d%@%Z ŌڌkyKhsu9C!(x@ ]}UOMkhn#H؋8K?kB@# B*^r%~D/1 /Bn~p7_L臯Y[ouCW'xsBK _*K5Y_i/Be|]d-ʙ%?H!?)I v~16LF<2O457h#72?Q}щdb.| OLr1ʡmCy|͗! DdUD/'+B2u!$"/y]Le_?oU73#u&yN>$FY"Z B%WwԫˋuDk̷^njtϐcKM@EmB|IDKc=lzq$ZU3L 1[}ͭѱB@<W3 k!"/hs2 xhԩФC˜$v+4}ZIH:چ%T'?wc7wӼcJ9k0|NW=Hy!pI!@]VLJXIkNF:UY~$ڬUv~ r9,<5a <86}!wN Bᷖ`\,J7/p3v" !>z{rK[! GQ @ې @E mBjM/X]qCpiv^D~ WZ!7 CB|aH91/FۂXh(bPW'1Pp)8IE/lU0@WG1y|n; u~Gu8F0HV!  G;\xȽ }^Ac՟W0N[Yho"ԁ+S2d]_d^^xY0Lv.-: xDZa 3\M9Np2G?v|\2ϯǹd Vhxϯ :)iohzz.h2|j۽*\C❆G;pEU%mUme< x^GA&hq<@w(|"hynik`_UsVN=+7A7[xaӫVY>n9aFW%XԞU!p+s___afu! H w y].h#|oq.byafmJ1E;~l!F!c /<@q @aIy^!=>"N|654)vDf@Rq*G+lI> :qPݗd F{vϱ؎ogz[ S50u] \p3"O}"'#k Dq LhpP5YI܇l+<o4 =}yX G?GEB` g>= ͘}<`#Bn̔3}tlHׁB`4!}8{1r6L˭Snf8LS;fiPהoD[<L3W]uՆ|@TK~aeBgU (XXP #d:r[g xEUmH `LMy$kk gy}8-+셿0^p s5FZa/e[`ގaRf30W4.Lqa/eSfPQg$LȞfla9eyv>pzn3i)zp%P-! _!=/<K{sB/F֎Dod~<HhEE*f/Wq~sʹgKif͔۫˚y^;1N FqDV4 ӈ+,/ݔoG7#]A7[p00K4[(L@ 3-C^ow c8_C%@ 0=%c>d! F^>cN$N7&*J'c=VExlƘ8!rL2 .Ӫ{Fx +n(jl0/^rt1qM} 碕it~ǝnh_z0*ALcߵI= *mqݘeYhޅt'HaK&iy|-l2_i5ڟYbL6狉7c{wobMOa0.7I_x֕=@IDATHZqǭ WW9Ӫ;Ȯ{Ac0;nz*/B@4#0\#.eֺL֥3>$ig jrOCH99 AC`,?|sB@ 4f*'4D-6qWj TA=3t .P$w3볎C(s#)󣟖! G`,B@! XC@ qhoGri5-7|b)ZZc ͏h:s""* ! tbWlN?EY^ԬB@Ri!PE@c ! Bf! B@! F`{}MB@! B@! B@@D0! ! B@! B@ႀr&4! B@! B@!08O,B@! B@!  "˙8B@1s=hoN -PZs5;ot5.袴˦>^{z<}?rVm|r%8v;s$ikL9iwL^xB@! @3(ՐB@! CફJ_~q+rjkhw}K/ka4* ew2_ B@!  "{B@! @<^yܸqK/MlCjv|I']w4l m_>AKB@! D0E!B@ Pמzzw}7mvgPIf3_t! B[&趢 ! B@|4&mXDȃPOS~fqƴ馛l{JJBV뮞~e;[9s H\s͕V[m˗;5\cE+jmMN8aC~؃|_2 A'mF5pM7%4$i%L,Ld}'ӵ^e9$UB/;ʠ]:쳻UVY WJ{;-r~nC;5*p K$d%uY ,@fmDMUR7um?'pB:#Y[! B@ + a5, F! Mss]WUoȠ0,,s{Y ^x1s׿U\|ŧ?iϳ( tIC90Lj z+&`sguYtE=ݴ9MO;(mx9'k_! }"^tAH! B`sKOQdvK0Fv6bu։$` E!feʬ YgUkc63Hr-4 "MyOn%3!OY{[oQ2,^ؓMfyĪU1 FokjS B@! :iMeB@!0P -=dBяFrӶ6 |,bM r4`8Ẓˬ?Ͼo~L0>h5bfMO?Y}S)M+A! m TD! K/ e]"i5QBf@L8 Ej"XIG{& 662ოjd`'?Y-pII0 F0FDnG)-< 2TNrԡSLM+єB@!  ]JB@! XE`fJQdєZfUmERzꩲ;sSۦ:tM k6yɂdھPN3@v&<&Km(k 7h7Ќ l"zuyƓ֘o]ViԡІlڪ? ! B@EB@! Ja>fȃ%h$V?zK.d:m>oy34ĵm{tzymT}s'|U?3~wB6mA]IIDb9[ȬZcn"SM5Ր΄B@чwN5#! B`#,"qLX~:aLerdQzh꫑qL4'{evd,rSpY$*,B{ *rHe]ܧ"ys9kIVGkiW3_ 0ԅB@!0 8 N B@-"0sϓ| '0A4^r%M?DwMHlҼ% j}r-]M}٧,Q; AH^{ߪni#&GqDCy4'O?tO[eU|Ky3Cz%Z|`e`G"tKB@!0q 詮B@! +h1 ;4и{g?0/miuM[lf7x0e*ƍK~@mY:wܑXb yI_~9-N_cҌ@Np&J{vA[o5-"yz[.deD"`}{>I_Mm}xB@! "R! A>"6n">Т;Sp~ɸC=4r) ٓO>b,2dZu]M|#BA`o!G`LY Wf}!sݸH=]{uVjULB@! hB [~NS%`~-B@ #`::鬳rfL{*#@p}K_Jw}B@х@ /k6B@! `LO<}i ~^:ꨆt! B[D0v ! B@"Wm|AbV2|x7q#F"B@TD03q ! B`#=3iw#[C#SL<ȱ5qV! TqPUB@! @@>GIB@! 8<΃F!B@! B@! F 25RB@! B@! Cơ\= ! B@! B@Q<i4}y!0&X,B@! B@ /KC"!5B@ ~0|>+"g-F=~kQ9W_MwќG]w^~ԋ/?evRzW?Z B@! z`hVZ@kkǗ5'B` 'G4 rʴ; /p ^Z(mHcZveN;v n^.]r%;\k6}K_J>4d"܅B A1! B@хO|LlAeYϟV\qE'!'%B?瞴r%9_~*w}5c>+_! hm"B@! Cz뭴^{5t?w߆t&x wqiXcr,aj';/RG?јDB@!kD0Q'B@!0` 0^fe?0=gyI'r)\s͕fi815?O>qƕ^r%L^z%f,3#B@t`GjP$B@|4oNƎ&xb.̃vL2$G|SO= Sc-|miEmBБ_k9t/~ Sxx`/}M-XZy}Q;@g4TrgzoZkeN;-=C&tҴ~N[c*;ӶnN8tY _BM-np6ƻ:kDK/V_}4sxUϫ*=:z^yկmd +uqM7y_S?7MjܘVYgn{\0m喵kwv'sͥZ*mFSTô,@$ νޛfqƴ m&M4D 8uY#< {>#HS%! B@ю[{GFt-_W #;:ngSL1Ea\؏mˆ)L ,}ܧ.PO-آ03㲬+Y$bV*q0F#ʲc37X0 Mu) 7ͦ2z# #^{am'k;rGzyXlMg# 0Ӕ;찆nUW]!">g00RӍmcDXaDkS]EY~ߕ\́_# @&ا￿nfm.L,;ЇcQܷ':S#='`/)L+I"B@t@,`! F*>Rǯq ! ~]챪t/FEHo}[__faZxs3Mȕ_r,LЉ#+g}^QgN>1 1GKy0-´# Ӣt s "24튿oW71´>1Ҟi1TcU`G?Z0*u";,L;hwLL0m;k9 r9glZO?]O"t#D1ȴkڟN8Gzk`0,L0Y(qꢋ.rr.zj{QŽiziuMrܨx<~=PK&@eI7p‚4UB@!7a[#xSЅ wn/FC0̆}zjw7{LU M`3s2;Fw[~Q 5x7"BjiVXNg&^zB!h[.f'7ɶ;c?;ZM* A`1;!0ƺ[7+f]E{9Q}A V3'?I7e;/Baq[L+8׹@/$7ڔ|k_1'x"*vm7[ve?t~{ڐ(kx=3GO~ϏxG4 :B@! Z"Sۖ /%B@! E 0lKii eYW\P"-UCtrC&XƎu~lg$tߺE?1$qIGr?b2dD63m:;ph*"?뭷^Co^c&g}5ADgӪKm]Su#ҿoghMFZ6aT胄_|V6FdMb~XHQ_F}L}[nɘy7Ln6Kq1\"LmS]/B@! @[(K[0B@! G4ʚBP ~CikCZɜsɦXfCyF̏=i8e;!JULГalA np53iRL3zȋ/L`pNz%U3WI4҂j%f 큀ȯ߉: JD@&N2| e7 OUNpY|f1kMࡾ1@Wbטi&Ӟ8?5N8r!21 H'M{ڴB@6H*"B@@`Jf [ȌNZ"Dt'g)x|Q7H8f 9JeR*ȿ_ՔVv Fz%}IhcU.x2Iy]{yf#Rr+^c/o_t[o XDwƈNmHXzAJv9p dK l%gO=}yh%VX8'/S f_؎D[OITEpT:Y^_t\ ?evB@\*,B@C`]vIA9z9< Z}o'c&_GQߢ 'u*DEnᆄ\^{ۻW\4+tYDR~g7Ώz衆AU .`5+va ۵k64pYu !zl]UN[pCs.-An /D! B@vukm ! _W$k1ކ|aT^4 + ڏmZ|ɋ#<] RFcCY0xNjG}0r"~/ME»[XvaCM4QarEЎ֢"{Y#ʴ|gYg|˓ 3 nǂF>y#ʴ|LjT7,O.-X`nWS1<-KS/w\e;f]XٴC'|Ӎxm_\<[^XcOmu{}~x߬92Ҹ!k), R\(úC,8|@PsUkC_`gd}aͿuY˘"wB@! ȞGl}Ph+A`Dq! @=: c=3&Lh66הSN~j8O9>E7,j6*h(qmH^˛o> 3P6B0>tM]!h4!mZ(?+4XEndo1s\Д#GcoIFnjt|y뚣hF͈gՈ ! %=%ʝv~Li|B@8RqbiiLI'.) ! B@ :ucw<}@! B`,#F48;3 GuTCB@! Ҁ?W!08TW!Ќ416)h馛O<&xd>ĕ({"B@4ʙ<B@!0J@[h"&#wGdB@! F>`P3{HqsXE`j0ԺB@! -`-jM! B@! B@ye/ B@! B@! G@cةB@! B@! `K@! B@! B@=v)B@a~ߧ;1vSU_o==ce?~2mvCIwOXx˜箻[oIvG@#sꪫ<36SiCg>Slew1u]LN;{udM{Np יm +ow׿?Xq|+J+TSO=T2s=wo7"SO-b ?uYx{хB`~s4K(#B@!+O|vdd!^z)^#b{GIA~1mzf;ϳ>N8t9H/w=Mo~MF6+~{lCz/Њz]3z7NG}t4Ӧ . *wEWjC!F@B@! @lI㎫|0tI4l6dՎ0_y?. Z.}k4}ݗo$ӼMi8M?^z頃JGe]>;+{tgK#" qVWB@! BSN9ekL3ԪȐpwMmݐ7;c9O4Dc;>si-L.h~Ӎ7/fv7DꫯN7]E?O&e?mIG^ ړ .`Zjfi$[omӁ# F05J! B@ _oy7_Iد~t'|2%l6JԧjE#zvBK.d2\e#:Q-/=PYjI'M}/_K.$CP}ٓs(D &xn/dIB -vi'a:sq=>^HV[--MIѼ 3̐ȅaYM_>^9s]sꫮMYY/.0)d.ӟt^gavx7g?ٴbW^9_~8]|_ǬW5\Jt\@JL8Qa{WZ5_{1oiKnvhg1' Y gڑ^O 0;:m-⡇*A 7pXb%\5v38cZ`6lH_|Yf7ogN+Z3ڞs9}-wKhB\}[>[5Zhn&RWH6=#M=ьo=Bϯg]| Zgy^؟oZk 4_n|?avV 5za4#Gæk k֫zMbG]4$-^ժstƺur~i_! pA !hB@_W _m{-ƍ^cmXd!18e7߇zZ5K7u:'4d3a^` [lEmnfey{9/>7՛uY 3+tc$O⋗c+yMkLnry#.pN?t/ܿu2u"beTbú\Mhe?/{ (o c`-"CUb|kfaH9W_\XrÏ|#1ڈzm~K_en_gJȯ5lY7Ʌ>.F@fF U'miZQ#~/ݬV)[kS>12XWysuWqm>:뇑A^::13Ynj.uS~]ԅw.682Ycq:ur~ iGo-Ph_Xh h h h h tJF3罁c>Wr-(TFU_\y*L{x ,L| ntiY\h{キvUx )LU[6irz )KiFD4<)MlO<@/C2RN?4cڃ%$2t玗[HqƦXB45}.,HaY&zxu̟>3ͬ´뮻M,}oe|;#!Xo}aڥ(LGYaz$0G}8 r#]Hb Rw.ݬV=[37*Yg`MCz| *y{ y晧i\Wwꩧv8⡽Yxi`eVuWLgsmڧA02VH&rVM}?'̺7SXi7xL+aߑ_hBV%G:'yf.YAK8pU INEq>?5O_ Șgi yW5X_&BB\AОȳ FIhLקnBYbḶm9Ww`\TM 8D9~5%B|qNCem(‡~Sǣĵ\ajnX&cv;917mHG !-6ȋMh+:_]V;BMg({ l??$;#<nUw覎wF*|{ᷫ* /s >Ϫs߆nE8#`ДiѸ_0)#) $\LC3r_w`?hU!> <1i`E.]9Oh͓|_H>_|Lws?ӼL /'.sZm9;4U^Od'D"V<1¼<Qd-~} pwt:=i0vYqc^f_y׿NHRFuW^i.|rW e&kC^'?ܯ%mO!/:َAB`8 `8^cB@! #y$Ltd/ɾ(3_~ iӖ*L$ƛ;'`bcNڐ*`?rN^W !G@RNP'@2AT&O" "Ll4esj.6Y]V4C Y ٗQ>Y盦 8B*Ao5 ,ncOVbN9oYsQV`orLVq~K~'kV}M5T?K3SNݮb7E5 !Q16AAwd&eJTGa!>m6ӮmVbk[ `|8t,7"PB@! B&GLrD:1WZi(R5ڄqf&P2hH3?l~ UFfh>FnD^nc̫em: 0HD&//7i` >Kny$vyWWB D;4Oj,`Q "VGx97tX{.J=d-m77bVX:of7[۲KT.] A7E^mmn{햃 ӀFCFBeErGQXr\ ;wyVb]{u}u8ztM7%Lv1-;ݤB0Ky+ڀ-hOnaRf3eH9Q&Z=C2힋(u [#sZIe7kUCSO]vo$4J]@qM8%Y0eZwBFMO BV D8I361D,Xo1kL@㈵a/<A@@ 1n|1sbZnι̗E_d3kW{ҡ5(~] t4hsH M@Di^Pwv6۬I{/F3fy|W᳅?HE 2ZZ-gR xA'hCyD\2{4B ..n{,dGh8mr!i]vq|y:ADUqQo` #G# 'ahB(ʳ\ 6%?wyNo*#/0N -2y %@1^C̋/VE[l1vz.R 2K¹ *o-&ݬ͡-i}u$ [h :|UB;  `Dp[ڵwz)kvJ$j B@! E Z$G494ZxE5NS$fhޅl馮\unh<~^U %6xHx& \#hDF?R2:&hKou~4`Rˣ kh @ŒboƆ.!? vÿe7z;0'{BOE>}hro -VwW^ycSD];&ݬhmDbί3yN="BwH[O's] ?m]CwApN;55 :HkJ7BDc=6]}յ;_ سD}0Sy}5M_׬m{l愸lLٗ(okȷh*3+f"*zmB\Nc76>d k ^ t+%yWa70mbV+ϙ?ˆ.4 aWla滅iF&W,8I9nꔕ1:ifL+[1fk4,*L˛6Ky0(k4gDTqAs$46ac#+/p: @IDAT)c|=+VlsbLs7Fqo_Lw8䯺erߢ XXР"3{y#׊e'31,;b]w-@t΋QܷᄏYtb|뮻nS gq5>0 ()F(h鹠rFb ^oq^/_?ڬ2N5Bq-2 XKkW}7I= Qp}a i斨Y~'c1_a.N;c^\?-q|,#Yv+"emY2mǴ˹i]q ^a~ZkyJos=˴1yϣ>%Hɾ~/C7k,_k[9ԓрlS/^`4LVsӞ(Yf%RjР4.l@QUSL%"`l (x0f߾<,;èE?ީQGK-K>ŭXgu n t_Ъ /|̫#9N];1x0榢̼C"^~29%SDnO!yEs=sl%(}nenZvz/QGa񀭓5X$|ȉilш1j"ф+rT+́wN>7(mF(^ 3o/QG .,:U`نiW 6g3ITjE!DH/{~X ) 9crmZ h(ꡡB36'Y)$'>c?S s^ŴC:dd 1D۞*Ž0atC0v:fe&y ^iy1Ia?dQ-i/}>Eܮ`lY@s1X! @ٳ֋ih r( iINsSeB.첲,#lIoėUqH`Zu1T2ns FHZ9hQټ ƅ 8,_!y@䚊hw`k/?^ n_¯M"S3B&`5 R2e"aZXdy@"J0ZR1@JFuOqOj ;-swqˮ&@hs l2S2yU15',XICEH^Lw^Z`L7X!6bդsW[md 1ͬ'2묳AӈE5mN*hnD! z&z KO2r0+t-$dy4dnz:lj?CbA*G4#!  '2>=<|E P=hɮ7nܸ<}EzaeʎdfMi3!'qژALYTvڛ/Mh."iJ`k/=/-'_!-Jh^.1z(Y'f;ź!'{.%Ck҂ɢmƻ s(GSw1 MnPT?A]*( h$14# *R7AK"HIR^z^Ai,FQ01kپ{rܹm}s{{gΙ3߳IL(:M2ry4Գ+ה\"IXTU .jH 7ܰZLqoYM saٶ 8U=.@ @ @ +Pse/c.r⻶(C2~2Z_r y.Vv'B\pe]f$RK-evu>%MF;0o wN9á~!B8K]trh?4guVkdđ%rҒ:򾍆%KC@ @ @ ycu$Tt衇 s9"H5\S 2mI,88$X.{G:sly/K|%QnDm/E3SN1{,`4[%ho׷ÿt7'4 y.XuZ\a veǺZk8i!4,K,Qgg5,~W ٿ%}f^ J ȚNM,8VNc iB;ؒu Eg#mV]*f'l9!Z@ VZf^Ȗ`ۖ -PϗXr%xrR}gP''4lqZ^H vr yʛvY}%!&yI/rpꪫڊ y>!3{̶+-p;/tԚVqЙ 2j|f&SqZa&Q_3v>W0&*N+dM+{H˝BEl)ˎ+T<;nV?2UxT=\(.S~aW;Zd#Ae^SRL.(o{=~ lMe뭷..ž2+m;ulD=0A@- F3s(~aO857HO9)yJINV |"U,JDQ6Ԇ10bH޳>lԦ`/qy//xC~_.ԼO_hr6⻟s4&z` 7"& Y9iB5.{A&7:%QgF$^lU&wqڛ'.lsL 4*ԫa1,cM)'`doFY~\E0N^&+mwrTi9ςeYdge_ ACQ=:J4תw?̆Fڡ?K`t$b["[~e,袉8DfI;0@eaʽ WjV(aH2iWxi;&iٯ-G@3^2,8Yve׫j ,`v"ٯTB]>h. @ 37l-hc~n&l>O'0;GydaQA҄pv_MX'tSEαcnvIw=SHy睗5mQZpyO>,}=f`8>~i+\U,N4tW&)D{Jx^pɸt7;Sz5A0c"Ӱf jlt g^HX W91@ zp: ivfx  `;>VF -՘p4ʸ™&2㎴+'i'V4I~KJ+~IԘ +0Nuj|7P$;#9r"N.zZVkOQъՐ|P|GI{ }8"IZe&mO1XB; 7`XΞkg$#IMDe㖏iޯ޵peؽ #%$On̸$I҈/yw8Ӱ`ԖEK̑$(NZ7viu`U$$is9pe98#=k?xmvy|k#IvL˹}Ic}gE˔A8Ex]weU䢷{-FI{ld%-KA^&73˕8\8$cgqCBjl&Օy:ל9/@o[#:8\xe?2myG*p 94,1h m?arb_~ي9{ u]ޭ{Hlg> GqX=!Yd:pB@I3v*OրO3@ -nxGz34;vdaa1W+m-QD,Ҥ&yZ ho[s ;צ!z!0(7|x;Qy~mo=(E!J+^vDp.h.wH'B TM l`;M7n~l7`ipYk{Ouaz);c?0>} @mNχ K02d%(?.(RH;_&8 |dd W]W޻9$OK}HVN8 9, GҸ(0L/ #W! FH;>^ iTH ,in_S|€6Ey\XAr 3" s8sa܂rҖ24A@ߐv9@fII9y-{s`mvPvy饗 mQ2 |Bs-/!!mhģ/ypnP%Ɯf7$FZ_W'a\.MDsd3|/||VAsv@l ؛TԣF)@9Vv℉ꁴ>+^|Ųi,sT]S&8AMޣL qv>'tRZo:NbTM`dW;&v3ie^mi7V/MR`M{.;<͜ BNn{>VbF0kvZT{;(ة< @ nDLC%Y*qmgdǁW' &y7@㏷aig^`fHN0B /K+)>"ۂ!":a9%y0j#Q>| ?qMr27N $iZ> >`lU옥g_,-8Avh4!eln">K˒wt¬.O0 r;/#rnt Zku 4 '&<\'!.&q܋*ۖ?{`/ٽ.iS&t#NϏ61X .tׯm)E"v@ @ 5lI(rʎ1^.m8 ^Ud 2)3ڍc *8xǡw2^5$OQsNPDKg&uˮK+)>0B:VP<ӖFuI}f_|O| -P'(8$Z%R sev 7'YQ/dFCTGDU0FXD՝N}`L(~&&M?ygNRS;4XQ屖~~ r;UkNp-Mq]֝{K~m{Lް׹xO@ G`8>CFݶq_Aߣ7nS!~yP/:(v| ]#A{I|9k^e{#H[Jazޞn q@ @ TJ nYgjp1^1&7S͠A&U?4eYZZ-O4ɓվD 1&GLSv )u9N/~ Ky :ϲd!<#½zlZ˒VJv|.{Vy2wW[πNB? &/y^Q+@Ҁx$xLF=2u>&?>sR_Nz^f7^e~6x<6궍dܸ9Y.Su: ۈ4 S{uP}ɳ1Q/4}'Y{WY.IFi\r%4gI$O‡~~>$c2E6,>~^u1G r2O-y5_^FݾK] ahI hyf3Ħnfi?>si'?}4jXyw$)'QW%` K kkcS6bjBhc> 򕯴'iXY,|:>@slm%c"oiGKחyc,i[Uru&f6 NaIu'fgVzV]8er3PWtI~͝H0rRc:;oh̰{$ `*"!Fq-H 88 m㼦MޣvܸqYm0(M`V4?&T Fy6 wM߭'ʛ8 rk<2sP,Д NH ^N $GNu!W01cBa*6ri'?>hbsmIGyipnwAM^=Зz[rSO=LFSi<*iלּ sYT˷w}-/c4\w߿LtSP4(uMV[y hqB1u  2鵱]܆%_9[׍\$/"6p뮻*2_b aI|`y'!'|\Yf!,eV@7-pX+p=8?eI#Lm`Ʌ (oLD9^ -;P^xi.; /iۨNyM2{̈́7'꾵b+K_+!bsMkyxC.}=ojrtM;{E4Q`B;sY+X>1& Ӵcu1\ b 6(U^NeL}]6XNi@zDOi]^> p4& \ok^mqMuiRkMy@vOMӻ<^8С i Ě/DY~&U{/c+ٝxi*:Dk.vqK_RO~9TZMM3AZ.iY)"@ܸWD23RCK/>-HG #QW+ϑ8il6hak\tEH"} ~~ _{-V!OǖGD^B6 }rc/|!M2cRu5,?Ҁʃm_GȈxVs)D`[/28餓 >@*NHZ2e>}Zʰ|G/<.p}%}@Y}:dDmH Ry5`!;s[o]Nx +9iir!-q8:wgx69^W9 \\MmQYǖd9sParg22G$= +Kϳ94i[Yvmmw!6}=Sljך3$#Dz@[iV5Mm&;G_N9*4}gU,u{G;vBV=elǿ5,O~`{OiExhr5Ә]vkdhfÐf @k",4K]H \hu삁X){x@bj&r*>q[{1hfQdkyěf3%@Aȴ$r&`(YsKs=;>@o&a R6?׺[hv#/ޜך_k'_ C 749l^ 5SpfZܻ[|ȖU]{KsēǏY'%>Z'7lYa1e^ǪZ08 i`&GZvU5t{}5u'fj, ׸>mbucLM,S%dnM/:ȸ6n,;^^4eJ\~mlu|ǂ-Ϥqu zeOJC9`u9ڪ;yx\pLXN0RL~򝞓t^iyqlFmLn>YQz7}C06Ŏ|p>}-~cleD$ R n!IϋΖZ"k@\/TnR zV4xoW- fX>c. si>re ̞UedZC䒆Y>##йhCeHeAF~S@q€p~ y.)5jshe/iz)k8E@iZK^ rALyuBy>`&-("^}ڟZ `"o?7@`x6df `τQA}$26f=s*+ ve=jtq<优󲶔ә(1B $lK y*/tlõ@f8 L`ʠI&|#6%Rm,>yU ~1^ >mղxWyqC42eR{0ED[|³{>2]wܯeE4lQ%CZa @}Ѯٚkc=Zm8pCX${W0ؑIC8 j[{:{-ӣw< |+s~-ݹؼ!$A1[2 WGsx)P XAd%xpfv ڀc+[$Y \xC.ϵ/IIEeȴmGp(cIO5GnXa %E6^' 4si>Zr6 /:Ay״0#‡2@wD!hl[hGȌqorUÁ8~Urer)CN(wИ Ip!}.^c?'}5/ \T[ބws4, |4^g\ڋ&c.r`L@0[ z,O:W22dž-[S% ƆL:ב4ofvm7ol@i~!xV2): !5(8𢖏=~I$olUy C Ef3O˯۬ v}K1!nEd +dɓ7'OAX,4C%Egl>H X.~dQ Ҫ盫{uaXU |!d'_^ ?He`!mKӍr C"D&ܫc?A1u|L$k1<* 9sOz=%xO-G&O! \&$ϗjmp-tǁ x_6df `ύA񼒖k]~LHR8W/gf[.38~|hJݥ\`ٍDݨ+R!ijI ZڭFl]j}pk"NhԑqמˍR7` L4(`bDHUkwg[ytNu\4mZ/'x\cZ4{K\ Tܾ^I$Ή4HMF2* n5)4 zOG2y[|v嶟r6σ&adrCe[LfIؐNlY2Q@uuc74$ji23gT(Mf5EIAI[Vc Gsuh C$hj]d+R̮."OjӤϪI"߿W II}'UEQZhD|ך~ f]C4 IV,IYeݔ$0i n\6H28pyqu/7IT$o>Ir|?J ڃm9?O"y۴D֒ʩKyٳm´#҆]'gmmrHEvjn-x2o2HL!LZ~%}Fr oi$IՂX(jۗA2#M4L4Z+LM`뻚.q)5&|ȯ?xJKd&޿Lʃ/c,ZƯ1^Zvn@ 03`y &~rLG`vJBن@caހ;@IDATGKVg$۬iA?{e@ɖ][rOOy+.bz{kK/Y6IJI r!2*^mxĶ{Y9@juTN '&{xS8/qZkarc};ߙdӂ=L\L[U!̴L4޸Z>'}4]!\*rb!4*;4h}vfDߴ-nivjy7`sN0B s=* ̶/'C\mZڡey@ @ @ 4&lj?oځhCA^[؍m)ɶ`bdU2]sk q}ISO=Փض5}A)4N癗@ @ @ @ 01X,|Y~-cdXuDAerQ%prI˭$yõ>mJ@@,|&!n KKoTgS2K׮󭓃:H:-TCiұq;xy8-8U] 'k&/V v5-9c{0_n]WV A3֨̔ZwS>H*[ۜ8&וcIK5~Tט%guVq=0k mʄ爖b:$2I*6R!彏yb?@ @ @ Fnӟȱy*VA2l mٴvu׶898ޤ-0i^x &NP!ۊwhV$Smգ7[z-e.moG|_5Ԕ)3y ipdGݖ2eqMwiY]\:۱K=/ۭʔSj)z]{y0Kk*m2i^lYqwyŋ@-._WZ^{GJ@kL/'@->яZ<sq,7҉X|?jن\ )Ⱀ]FDE\Q<}_t;dq\Scc 7|CC%8Y=Ⱦ#hhL|W7ﻜ? fŗGSOqeh16=YR}Jfmo{i-=vaE屬~S'mmNrn6cǐ%_im8^cΙ|I[R.6QIh 8_a.j rvɷCYuN<$֖9M;nи>I֕6@ h0Ø7_u+Ijy1!Cp Qkp{}RV3~}L0fzXuglD=IMS6@ LFZrH#"+58j/"ӴW!mhy吥%nvVն"}FhNiQc" _[?|}2BdXKڦZlekue%e]ԉ/mV^['7A3p yT}D`;"e^l'"=Y"K+/eXuSyW*E\[:l} s~D۷".68ui=ʒNba17m>tm t_zKZ"ΑbBeKzg_!Oې='?zW]1q~}J¦@` ;f0L/lhAR] SyET=.iZ+{\umJGr$2+ilZ[\xvX#44KxD zi裏ZE-Ɯ6&ڞ\FY@{n7_D~~N|Ӱs=7㢩>jpDxU$HL Qiֵγ!"&j Yd=kWaN8͘Vqܨ#@`#PS_`iAds &C2nZ%%{hz.OL$u/܉lh4#10Lj2^4ɓ){fS92 so_v> saNea.}Q_ Oaf׈}<`~φYDfC<C0QVw\5@ g`2yprDn$G-vg@m, 3JE@ \`6Zo!3  v;8d|Ru^헽| m&V楗^j秜rJz{)~ަ[nW8) eB@ f',X#Ѱ@`XH[c +{t5'  Gw-̾zVFSD!H?H<\(~VCxWʴ`m6mp"p}yy YtE˲^W" MYp>W-! /P:d)Z7̎ȢBDlY|W-\$H[8˯_BqҒI^ן'Uq'/" $]jAɋlCo}{oI:ׄݒwGF9k7ǐ,瘊,DTY}w'{eH//~8\i<86H~k9rac;yA~e]:6&8,@ iE {k^a?@ ^aUIC`ϨF& 78?S DAڅFHC9C9bEV[qr2%f䌢qmw/<8,ieew+ Mlܿ˿y eyUH#-#r/tx/4k!->H{[l 9d1Oԥ嬅̟X\NPҔdH몐U!'j &y N_ڈV8Չb\3 frVpi6hIFQF:ITޖA Fi .SNKSbGF !/[qS73<Ǔ|rXHp#˳ q/-A*~KK/-iq\s~kwӰ`\Y~*XzL-n $a^V.hdŋ/GپmqԕW^ٖ+vIZ8N.cox,^KN˨&yc' ێ6qB .'| O?tդNRK]PWZVV$2씷,'\I;F6x$;iOʪ8_O>#~9^-Ï]{rDt뭷.úo~k>zfǪ`$Oqј%^[ϗ<6@ @`z6rv"vGH~%T rYyۖ1;sSgm2Dxpr-m_L®^/9餓,~WkR˺-پU^:l)`fl)=IN_2Apݞ{AC@ fE02ccwFsF2.ôkKEN<$iΜ9鳟l_hsf%l$irM[O,biWզV2G.GtE֖:y;L2zޗڂ"0 BGik{$+f+M_ &~=Le /{N yZHъb)*])"Ha]u iu237y{m]lTlks!4qiU:[ηwTZ(ѶE7M`$w 4!(&r!!<~j>aj8@ YjnvXdP@`|_L?Q]C~衇jϏ ?1Y8 -Q'kttvu< '.uaˤ3VW+zTEn6-t؈s &yev:F gF!S~Dz}_~_ل8Nk7} hC0=w|ߜN=TMZsd0ľy{rb;'@ Ə@|j|'駟nZuߧaQzT}'˚f!&W/@ ZKhk :>hCajf 7oqff#2!Lb6K}${l"*cnvnzFǜ _mE~?c9&UYq뭷k.-?ATGME[=!؉/ȕW^֟(8묳UmANK/|6p׾65Y Rn &U 6O|f $D$ K;񌌍mL,rsA3o8HV[_ܖO^}Fq7@PrlZ=ڄ;r-F@z&R颋.23'FmdK{{1#ZktM74I:  V9Ul]GVo;xt?zʒ;̪\xe1M_y;[ 'tF%۩yr]4Ҹt `bQ&3~>KW-Y  XTfex㍶dSe: hۍF!7K2`&7RaY:IXbq)jIX _#Rɵwb|-\ fp:va6gi7 =R(uơkxXDo>͠p osA#:ygS SA03'jqur%=0>f| VoMpg`Hfmm&lbK/3B?g) Npq@ gx>Q?4>=}-kx6gG[TywqH<&{g}g1/ž/9)’w$תd w3p;O!9眲FHƤqWJʾ_/˅5[$tY|5.ɯ2_ۅZyq䓽( ''/̶"Ë=أKK iL+R[@_F˴\DZy睗~ 0+s4: Mp)/wuWɱ7]&mxJ}] ;q Չ&lvg" yK6TmZ!2xUܨSL8JgЂ&vjG< Rb"7%k7 !M/d׭QIؾ_1b{o!3gQhUH~~izƷljDjxK8@ h4gyqQPiC/t2lODH.8:wy t+B ,{Z`q,2! h2> y+ BH<? L&a`LjYBif sMK ikZy |Ҭz^  @Fmb孶j-y8p|- 7 )s *rUɱLzNi,m#'XBR>siJ0rOߔ7B4e|q()&5)ays8IUn6q_*lliTH7qU F0VE!S€!lG>M @l3U c 9[OS+Cqwl&N^"^,d jk PE$@ ?meFH@8) }:Bv fL/lAģh3%KA2 ^^S.N0AG@+s/y<[ZkQ_ˈ,֩nᐄmk_ZKR|4-ف{@Br,Y.׀`_U=P{EM[lE5O>iilgH@ @ @ PKܻ,:V^yenXs2{1;F31ދ_ ϵ|{9(Hy1I##>q;MyќG[ΒgU<Ϙl^zyD@ @`V^6i'Y\Y^ -k.D01mb!ێJXh#KZVܖOașBZc-yD7|s[zِ+A֒|c[6jy-UEmjTAYHlk׵nvK/mX^<f__-44Zwŋ>. ɖfumDZ- σ[҈Lk t|)Iv)SvFz+&#i"Z/B َ,ı)R1_c~/" omIؖsϵkf[\ Nf%~h23L'|irW6L8u"f$JBb-$@ nho| lUҌ-DK0rNJQ,~L3o~i4(G8Saj'S6vCcq{VNJ8W_΍&@ճ:' JϷh`%hk̖ӊ@ )@{3SӬ-%,Ŏ۠''6Q`[_}6!'1Խp,"7#&f0ȄKn1c$3ׇ>@ @u;JvHĶډ!8@32-~Ό]QG xoꫯB.Q[7vuK/dtt@ @tRmd>ۜs=GSptASO5AiK҈ @`"3:LFriVSa8⽍y HSs̱2pF Sj`vwԋ)׽u<,%Lu\uU9Xq*~]:ʖuemG.lĶNXv}uיKNJZkv W<|kN>ds(CcYll-mE r}X ,[o6sC?4xz38 l9=8c:m a~pGz39@ @ f!LjtA$&xk9g [欉>Klѽ)F`0N7p<.NN^p袋y_W6]HHnq!ru28s]/R@ #D$\:?og"|gh\sMv6}لC?a.K_we󂰏+_thOLhUoќy睦94$ wuW4%4 ɖ`wN"k71@4^~[8կ~e}`741qTV*|Hq=4ZѼtql>'rJ}'?Im7|OoY.9}_O8)ZJ;1H9hwVe6:D(DxlğL-qhţZ׏2D@ @ s0Dl@ @ D*6|f3n^{%[mID,n E#QSl8N<3<(tI~ښfm,i3zF$"u6 = [-6< oh!h+"6-OV[s{/xҒiI) [fo Ӳ$r-e4WъͅskƥnR>Q Zh![v^ACm&iUW$[-eamZMߛzґ˝iڶ\Uh .YdҢY dCLA^o?ԑd$]'Uyի^e\~ӟuD6}~@ @/`P@ @ !Ik5RywrCZj)x$%D\'2Ox{X^=Pyxg&~PZZl[l<2^?L/I{4 TˁroS%^??<뤊K5M|~Eq @ ̳lL$;BDpqqǙs 0B.D鳟pG@ @`XdE@`BJrֺ6d/k!s#8YnQ9뮻v)w}(+wN_A 4ҏ\c9M{:k0L8δ~եt}H[[X|}jv+@ @`F`%񊈗9s5E@y <:Zi%XSTm@ L)HC'w*؏44!%HPd,qh);5F )v$Qc]{ۊ̣7Zަק) @V):@ @|2Ac~xbYvkز.k=#˦&ђ@ @`8!~xGVts^hE| @ 8A0:)쳏y[EA7KB@ @ my{h-wZzW=c0rGyC&~Ļ7䶏C1V8yyAY=cިLnvsϤ?lIY~?c9L]s5Nh4c=ֈNm5=^+ #<2|M%Xy{>i0#@|pU@  B`]"=ьk}v'_B'eY>r0BH @ 0/#CO>9mfFi +ॗ^j?n8Aab'>5 }lO/i뭷.h uo {o9 BC8 j=L]ty6h#w p ||LO0Os9,2ɌzVfp!br5M)N1xqn!H:lG@ 3Sj.ZNaekT{ꩧsϕ2>nW 2IDAT2kY,HӠ]m`IT-)DnQW+jZccGr_Dl!Lˎ> D*hk_[#%cAvVeZ@ Ѳ8bui+2e_O[0}ZThT[<\[AY@ t٫m@KG?* g{7i4 M4x1&-øJ6 -.8[o-45&hm,pg,Ikz-%6EuM$?a!⳸{IN4]H h,^0R ƨRaQT @ 64whtɶAWw 4#']0vqPds!/G4Yl+?+ŽtA>-=*dV[m< e_B(G 2<,G  eCi־#D$4m(hy4^CŷBKu,}CKwy}Oeyry46-T8?mBfvf|ǛӟTc o<< {A69s @ $9*!LcYZFV- h3jIkQw}Y#h(zpIiys/젥YHDDn.N0l[28L׎ K4I%U6l-QNjtKx@K٭N:ǁ@ xm@I3̀iÚАB-W&erh @ C@C|CYEZK]BU֑f:x<^"=$lb/q]wm# ƴ*X%\RƟwy矿 gCx!?ys{F{yylɠ-҂s¸8 v]Dm99>?f-M<^"P0#v?#u6%-bNjT̓c?@ f18^dM L3ymlMgD@ @`: s;̓=<*MoJ*6`[n4Nl C=3i%0ς-EsR8Y8˒;248g$O8ң, s( xQDLvl?}0Nl*vX7 y}j[@ YgdŜ}S8NJ{V$D)δs@ "0d5h ƫP%37V츛@N -F2;5ޢF҆:Mj- ىÃ3eP-Ճe5ca[l1liuCy.Ko[[C|mP !JwqǾKs-^!DlD@ @ @ @ B`47%b*<@5hctya7t-f4_̲z(O^of s̱0ᄏL;,){m8?q©y{`):^u sʼnK@"-V4V] nڡn[ڈ @ @ @ @ \&`tƗ_~y j:ZFq3<% B\#oz_mx(9r駗Z~骫2'nh g#LFG2}G'?u#_Zx:rs=m6y~ߧܦ2Je SDLC&P6E0ŨR;E1*ܒE{}ַ[Kg? L6mmۦx? .ׄ$@$@$@$@$@$@$@$@Y@PGb,Yb 0ŠnݺTǂqǓ]ЕtKI&idDm>xY|k}yMƍٳ  Kҥ .\m'Nh*Wf2m۪!LXB8?^{w3gԨh߱cGSfMnź6[n^tgsκF.]hT]viG=zt` /#,v)֭_~Vɏ_|7I&Z/Ǻu7Ҋ,$Vڻo͚5(pz1! \!{-W )f^6-[׊Ί]|N~+]I\ӧOײVZkGPoE\"fԺ   " _;~  vꟶ[~ zJ*i;j 5]1:X :?QmQ 0i&3_Dip-# Q"F_ted>d\r~1q%)S{'4K.5W\qEL= HH ~K!7;(J*wpy-v8 qg C1mpҬY3xϘ1ۈho;,6>7 2$׶ d O}\8A8 at Ǖ N.6n, _I}Vn_ϟo $⏬.Q`t$ 0 @ DNyI9ޑ' ǞrV'X4Jt„ bIHHrN@\Kbooo5D$@$@$@G@y9RTRF?cpdHHrE|4'06lؠnWPMFkDk'ygnfSj՘a0{gʖ-c,Gx2pK9r_|+5gԨQz  KXs=g^yeZ~}ukT±Eum7on=$ٴ`v$2G}dyu'#~՝ t58_~Sk^۟X@$@$@$@i Ns$wS\zV-MfUzkMH}O{CS w׫W/\(ΟyA[?㽼,]O N~VHw^+>O>ٮX"7}v''b]{̺W,mŧbL?Qr1kVM-O4ȋox^ָF zj{{k#F^{ߺukK&9I7$@$@$@$\& ` ;w@ށpYQ=/̗ ~"̙3={-J,ur[b_pо;*J6;tPڵkq^-]}7,G9^kŚJ;{gȈu#Zʕ+XY gBR˱^X#z}.DEW_}e%h@=d@ܽ{'F/l?c+NFpÆ Sbl^^>|nnVS[(o׮3V(sIXrJ$@$@$@i#2?|Ik+Y;w߁߁ղ4 {^o\% Z;؜9sb!Gmu}:uFZli娰e]jҤA #Fh]nݼyiYʕ>]!ǫ]^y 7ݍ% nWv`ώ;*9Ne!N:I6lUM>]W2;wԹ<Ir<\ǒv1YDB$vɉrd! #%^;94]px%   TfrR8KAdi~Ȁ|m C@DE#bͻbZr-}{GAU1\Z[oC:|^娯9tTb ̤I4mE޽/[̈~ z$#Gi@W&ZuyF&} 0 PV ]֪U傚j}Ug|r \n\qׯvb~0dzvLq3J$@$@$@EFA^ -&  ELğ8NT|2 | eˑHk A05g.wb hʗ/o :1]2E9S##Ǯ^|*^z)P 9 o߮KP.ǝq1bUx? |ꩧ,4R(M,S ~@?W_}U3B x{$(.}ųf"   $@(rl   #/Ue]ߥK S }͞{()!3!!3O?T%H}*"2>{;wֶOe ю J\JT`tN1*ǫU^:mٲso{n ޡRY;W|s'   "!@HrP   \%pgeN#I@ hvܻBO/׼F b$/Ѕc];TtQWA /yLn_u$@W(mˍ45j04฻QR4rkgA)0>G$@$@$@$.E 6lOLo/CL$ lGj_{n8*OPԳg6guݻWFYA4tUj@l޼~P MŌ?@PU,aK>}eM ֑XO8915\{0AC=3txHxs۴`Zh%l?%X2)k+ 1 $O 7o6cn_ HDvZ-FpXZ!|"VR +WL:U`  Jb+OgAv` #ᨷ̛;wne*As(ژiwDr֊*T@>(?szDI=u=/XR`tTx%  (J.&    2²mܸqְ›>}㸁C}ݧ⡯Jݰa44D@D_иdsC@UbEO>|֭Z ?۷ 8P4:E~FMjm۶1cѣG;w 4F1cƨO7.RŋUSNPիW7FGAM6w}gy1-+ qzʔ)T#֭SVbS N8Jg)b3'}OP~8Z5ꂣR Ŋԭ[D$7>IHHH QC͸^IHHH(#1c.s?| P tҹb|SŸ$j䷳ɉIHH@ϤYU.HHHH A\ތ32ii9Yfsr#$@$@$(0fs*IHHH DӡC[0i=E ϴq=$@$@$@Kc>[HHH2/x3nmټ :c͛gpD~7HHHHH1I9 d`̠ d6`Ց @{d\0 d ,        :q$@$@$@$@$@$@$@$@$9(0fγJHHHHH i6l0ׯ7Loqw8t9rYf.eƋ;}w-p~   1q$@$@$@$@G;|͛ l&NhFa8 OrM7dϟ82gVzkqLҜޏc'  H$9 iO~XBڵk{MΝMժUuK7mڴQSbrHllE$@$)JdB   (&j +pZ$OԺݻw+zmf^23;vTK۷_J׭[g5j"ɓ#n )SƜyGrHi@v"  |(ɉ|HHHr\~9\~msyK/Լ1O^z歷2|~Sς \{? @˴Er=$@$@$@$m6nh8` ?NzÆ 3Fe\L _ʴo^-/1/9_<`菴j*s阰[bYts%ԪUK/lnj>l'i…fɒ%AJEx={4m۶@-Zd6oެԩc.rӽ{wڬY3sW}+Wl4h`K?̙3}\ƍMӦMu/./4f{=SR%}fim{1+EnStis]we˚ѣGߦO>B ^x@c unfXPc&Lw {E礓NrSxWƚ 7`oNjƎd{Q袋b `9k,}9sUWVZ]V{cϞ=vubsܹ7gp{#ސ  X0z/cx "JjիW[45"ƖZ͝wީ"";~x-wVD9o|7qgEdd#mƌU̿/۫W90O=ËX1c=X&Mg}ۏJu7o[cT{'yķQ-0c~<}܍1DsEZ(${׈[ vyenN7F5޽{+›O"{㧚)Hu\#  x|$D$@$@$@$?@%R.BbjլXO?B+0]  !A9[b),YB8pݴixK.ZAH,5Aoo]ǃ4sL+VaV5XbY̏g"nrME)C,,mյ=Br;_>GkSg/^lֵlқE bR!*գu@+VZyV\:Q_m!`=NDCr1xw_y- ToXpjj'%*0J0v7ް[}~ӟjݳ>XF76ڻwoo dĺ+X]+ r(/L*(K$@$@Q;\HHHH@@ E}yJ,]+"[R`Ğ(JrTٛo߾:UB/H%xG:Wx k׮ZשS'B^{YG'ɑk D+po~@|s)>V L2 ]!-^{dvܩ} py2Í`2d51_Ke0T &oCs r E^h=iҤz08c "pruU9~ѫe -@LHHˑ|e=9R~<(; @G.OǸ $@$@$@$@K@_|"*UJ/30]w]`(Yt ~I,o#௱0 > EPS_5`[nE}FUNSOE˾:D|F6N)i2}L/>I7Ӽys-UϘ1C鞯/JTs}G}T dR1\D 0d/-'>53|%} ڵK9>_y0¿ 9bSU 4kt#­gSTx"}w(Ҳe d)ye > jĺ_e @Y'5bXR Wt/NJc!KIj W%uHtf\K5͊9Ws[A;vA "E1M=q tE ,_qXehx/փ{3nnh/B VAz "фW_}EQ_mȜ xV:t0-Z)b为yByA tꩧw.h!ԋɘ@N'  L&@1F$@$@$q !JnTbY<ĔG@J"Gueaԕ4C>lQ/̽'/a 鷀 wt¬ WT&ljNkc)1OߔjUa0-qw#G54D4 \s[3QHrDuM KQ9mM@oذFG  TD3ejX(`!ލڱHH2L}2\ @FQH FFXŅ0(KDۉ?-T8s;3Y۶mZu\6&R47xpnn/'l'81|V% >͋/hy̫jpt8v > >Yb %g]uaԸ8.E믿֦?H##A_WGu ADu3C1P^ w,. u'  l @1H$@$@$16l$KL}Q*+*Ejw`m VoQ {~i= _guUN0 I"pGUi&#c@զMph"=*I`w^=#a ]()DFXB33 g!YetlxCm% .*'*nCtذan{َ$@$@$+b=>θ   a·DQ٥DUn1PX):zOE,vں x! trG!T_>rzmoGjpDSZ08bሣ!ߦ{Tۃ>h U{ #C>^Hŵ-W:uuJ7_8%ׯo$":& qJ*L$@$@$(0fIHHZ. 2!AK.# rnJT,7n\`8;}t-C$`˱QFi|!*5ģd|(LpnCňFΝdjo*D.FzgFi{t+ܖ,YzY3@Dr${(=֊ ,Q>?}'xBo ZsEwG}< Ś3f Tx`}/Y_yn*V Fk8Rxb n>|ޮZߩ?O#,Xѧ'~$:.ۑ @xD:QRlG$@$@$@DQ}QMV Tδ"'O6K:D"SO=eR {ǎB#!pfʹĉ=N+X5n̞=֏… u%XK8k,A82g\}F4 4hV.k`a wԬY@ԃ8#Xsn\=z07nܨV}Oqi&JݩS'o|{:?^Txv"Z5X|kfEbA'"Tdcŷޟ'GЭ{]_9lJ2T/B#ÑmE ̃k֬C`z"{/bad}PM#FXcYL+"vcѮ];-1=tļ" c]q~fL%  (}*2 QJAJ2ݻ ~`٘L܃|aU[=Xع QBTae"y#r3, s7jTp$xǎj8úK?E'qqQDaAWN HD` N1bnݺC8 ai9eʔ68+EX7] kߥx.իWWkF2]A'L iӦ9ƝV!.1 Z0UI$@$@$MhMOk)Ђ68\T) K֭[kП,7C$@$@9B ʂA$@$@$@$@$e`וϙ3 2Yɲp$@$@$pt{   B$@$@$@$@$@ItEZ0&͎HHHr 9nHHHH @LIENDB`actor-framework-0.16.3/doc/tex/fig-png/enable_shared_from_this.png000066400000000000000000002234551341123343400251450ustar00rootroot00000000000000PNG  IHDR:.CsRGB pHYs.#.#x?viTXtXML:com.adobe.xmp 5 2 1 2@IDATxyU#R 4 C"*K\"rI$+Cn)B̡Pfh T󶿟e>g}{>޵~^^Ze㏿ @ @ mS @ @9@ @9 @ @ϙg @ Gُ @ @x< @ ?x~t@ @s @ (w{ ~Nڵk~O=z_Cvaޣ޽{^:[j5hРp7@@Io^~7|өjݺ6m>_gJ`֬Y}]P`r;s0A @%FϹ30 @@VX5sbȑ*U2 @(x΅0 @uƍg6lA P  d"P 'Nܸq]t1 6eB5RS @(x΅3h@(tڵJ*Ut9&C Rठ @ < T @ $\J @ P@\@*@a?/wajժUZz*͛~mqխpϡ?C'}nv:W^eˤ*}]ǜe[>X|Uhz=<# _gEInRU7nr$L3m!@sz 2xǎSO;J7ms=S>QF=r ]?O?tW}Kwu=JMʔ)sw]r8CșPO>f̘3fYson#>1s9Y/<^z%sy-[ vCw/ҩS:=SyѢE7|>?~ہsyM7M0)oڴɖiѢ>=x@\9Sl }mlf͚6D 9 17j(?;ɓ]ͥkӉ-[z˗7) Q׮]k:IY+8VA/^UO?~34NAZy{g-n$]ZQ3m몑E{y.]TmmyWo^ڊsQ.o^N\q[ҧ<{lӃmr3e:ɪя?x}Q~ msZjFXѶ:xs$!@`wG@!s AoK._~G>hg~=zhyV.n:^r`FjW+nݺ 6\x'xwP}袋\姟~FnW,+m۶ Ny7J-5sv{^n 'p޻裏zCТzDTLciDѥ+ e*!@13,@gUwe:y䑻ᄏ*.\'Cȃ:餓͛װaC[jXizKZ7 ^{Á1ILS6۴jB ~i磃fcǎ>*j4hp'+^s[b.ۍS-C yjL+jGs)7W7ʕ3eW!Ld3~ѣG-2=ʛo+BAg}t @#r6=CH"oG|i!W-[R^1;Zk#\Jִ઄a\b|MW*hlb3_re[X޻WI^}U;\8nܸ_~Y&#G=Au rGa;~J~\bmVvmYF-iqFkACy{OF)hּN͒%Kla}&H'L[c_~끑ߥK9sx}jlsVˉٶ;V>c>:p  .@K;x[n٪Хs4hO]v0>mQ ʘ{iZ=?c)Y6]c7ʧ}U(d\~wɘK;Lo5(-(^:>q+< 3r8ok[D`C+g1Bӹgu% 3* @ txΡ#C@ s{{${Ui4mVeR>-xL2ťVc:p]jNdi.m7ZK>+z2j<¸=cyMf8W\i+uYSs;wn:Lv8z\pnӳLMfΜپ}{[I5 0Nt29;CH,yF5 HϝT(C(lTg#R9IgqvcÊRT*_բW);d'fcR~ݡ/E@.\ʯ?T*{ﵷﺄN;Mْ-sj[-v6+^M)i=#y) j$o4QRp]ϔ[qvuA9.w}}W:MۭM}IånF e(@@)!\J&3!xJ L&0orZ3^IԪUK8S޲+իg.3S'4TZv R~ >^BM[pqsSOۣwGXV]SSR dPEt0Hl´MY🩔MH+|}Qسv+?։΁VnʙgVNlEvzW @( 9b ;Cq͛7o)\QdRLdPySN6jժ鬩ȹ%<ۗ3ΔsW;} E+{Ø/rIOi+MlEKƘb8@(=85B(Z9H/]T;{*@W' uQvXrb<ڵkKY.=iҤ_~%!KAkm󎹫}Jm. Mmv M=wt>؇9ϔA%eԯ ף.oIJ/P?m[턄0[oUuι7I@f͚9϶+蕉&yҨ6jjeBgN:=6 eM?{*_vA+*;Ty7iC 2 m!@ ]ȳn@qkNW/ϗO/$ >HpCaȦ{oi&yf%ܪTRpتUw#xΊ;u{̬Ks6[UNO+Ӷjp_@ڳR]ɱ!gXFooU#d?n;!@@ Z& ( BITj"ER^7o^ -gV@oӦOV +nVtQ9[l?qGfտ#,k }ziLʯ>Gϔ1Nwe]GGz絑[lmz 9ƍV@#}9 )Bﶣȝr)r#E>l3|ѣG{sV) {J,dƖSR:˓lGxٲeAZ92Z6i E2[$Yk?SN[%?~KB+N ҉%xW&O>Nh#_ܯ_ԍ!@]|sE@Tj")#6'N4ѿZrjgvۿIy]mFtUvnl{Metˇ>@r57^{ZM}R N&m/+lY6R+ O @%EϹ3. P|?LNQsyىthte (M(@( 9b #-:Q`ɓ-˯_:J ׬Yc\P>dȐ:X"eӧO"{1%}1ǘGqRkr'+K,^ssϥ]{nn?9Y뮻^MUJ(*Z ,qz?u;]QH:؟'D{S@@(:O@%c͊]t9kԨY… &X*n] s+Ă5sV>*܌ *hW N[g\|rOxZՔR|rBaM~rX*ű f*Uzg'!M &~@nEL+:ZY6o,-_=FmLP `nݺGRR0[r}q:'K.Iסr3+Cպ;38tS [2D?=rqgY*}zEpVFu޽LB" =#[;Z0Nb~z5 X\V- 7l̘1^oN;y޿ qƦaƂCvO>QJ8/v:]0{$u7m1YYE߹sgFƂmd7n+1 @%Ehmє!*?I\8iErW J#e䌽)6XAެ94h@ ܭt:xZZL'`MM0!Ҩx3V>㢽rj?WR%]WNEg!Ļk9:iȑ13\㊉t&'  8 9I P\%KU;x[NKlI^ʊ v:FJFs-YkPE>+=, %\ 9$R~:uԂ.{ޖQb>}|gy]_" ۷oʕ >QsԊ^x#>cQhe]l2M_Vayꩱ4g}@qgo4 E~ %{v`rJjWV}L*MVaOR,~:XUV=CثvG-{Ky}VdL>5!;!.Yҽ~!݈r~m&J'N=zW^<ӧGs_Z eRU$df r5Q(Q[A PrZ1 $99 }A P.ԙA/@ @( JU ROqz[ @ q7e( @~t.l $ZB<@ @`9@D`… @ Pb1@>@&@vh@ @kΥj1r!{֯_iYj\  @I&PġI>t @ 9bYMqHGs@J9ruر]vC`͹N}1.}` 6@ 3gyND#'@clX @x@%\j 'Hf @!Gr M!29 J@Æ [lYR3. @J`ܹ-*V H9 ( c@@ 09i3G@ @(&x4@ @s)=B @@1s.@ @sL @s1&@ @@gJ @ PLi6 @'>Sz @ b"\L- @ ><# @ }'O\|y5 @s<EB`֬Y}]);|N[7oN)@% @!gF@+V:t9rdJ%@ @ 9 |֭[7n8s=lذR9eʔ1kN= @%-1!P L8qƍtb6lx7˔5jjѢ駟ާOzy%7lSOI=s^j @ <-@v2J*;w/ok޼y߾}'L裏]V5;찃sn @@gH@j֬٤Iw}W}g:u%ٖ+f];]O @1 Z; Qto_/_|mU +ejܸ/5-[SwuW;9~Mrq„ ۬uYt \p 9>i@ 9猎^:uT={^wu*/Zor?"Rjݻ_|Bo&NM6͕eZɦFQʇ~yVnkoq,MWNyÆ ڬ{=zԣG9ئf֟sPeTʔ9F2Y>)e54ig}wNkJ @s<%nܾ}~xܹGuO?ݶm[>;Oiۃ@+rtbg+d暓N:^L6̶VUT{Q{|c)Kr}*eB  @@<(P~)-fG_UiaKk뤔G}O? 0VUW](YOۀ[rg`3i41@  "g͚MʙTX:ZC6<`RUXzwީǮl/6;*͕M^+%9ʞZ C @A,Y1A,GhY} b=Krk?lԨQe9怬 @@LޛCl ʕ+TZj:k*`'lmI9eeݾ @b ln*VD_jr#vsn֬Y5i @ [ aÆډjP.2l">_~skgYJ,RnA @(fYnرcgDK@lOrkkM8]0e>4vYc"0 @ @EkY4)A;)S˫'MT&v\vcU,֜sFGC@ $b #ݿ ,p%Z׺y/"+"_S)_99 @bfK9 ̘1oѶ?6`0խ[ה/-_q @~xý" Q^tip8?ڵk| @ #KEN૯z饗ڒFk=S @ U,nvs=FR5jd.)@ @OϹ iӴ:r?G}d.]v\R @ а@ (Xǎ}&MSQ{iVX/7v\ruM}M7Z quY @ C 2fhBDw+:gΜ.]O_(իo6[lq{챫4̿0a„?ӹsgs-;_^q֭{Q^w}͚5%Wܛ7o6kK.\ mUCk֬Y|yI=r5 @s<knKe_1}?pJ|dڶm;qD#֟sije(@ @ CX< hyĈΚyeʔQܵ֟T#[J֝QƿB @Qs*}^dI߾}+WymmӦs=wuiWUHŋ>C]v \\B @%BhΠCVZJuΟ?ѢE˗/WvjմiYvmLU[c<|SQA @sh hy_Za @(2Gb8@ @ 3 @ @A @y @ @~p @ 3@ @#G{ @ s@P{gUm @ px @ԏ-[1P @@A Z % @ @` 9Ԡ @ <炘 @ %\Sb @ P bP @ sN A @@As.i@ @ @(Xx;5(@ @AϹ % @ @` 9Ԡ @ <炘 @ %\Sb @ P(DC`„ O<~WG3&@OȨQ̙СÀ¢aݻիjSӪUACmǎ;}t!oyW)iEC*p+f͚w߅dfwÌ{Cy@lx6 +jF9rdJ%`B7e( @sB DE`ݺuƍ36 Hb M⬡s?ʔ)bAsO.A!0qč7եK#аao\,ԨQ#e}X_}U-N?>}ԫW z){?+@  @s6((@ @vRHS[JΝ;S_ް׼y}Oϟ2eʣ>vZ,#cҌa @ 8i @@&5klҤɻ+WL Cl_f C8˄@O@'i;kժ岧lٲ:uzV\C֭ `siP @h#>f͚ن >vANv=e@@JDkB%P˗ov{> f"$zٲed]wC>nBoGصqqvZjCI8$Uux~8@ '4:Yꛗ}e&tmU&MeƍUΫL"0amh:u.]\`j zqܗz(?^ŦNjR߲e+m۶n&5t.7mdUPXVn9䐟ٹQBunj3c Usꩧf9wqZqs1w}̿3Cgv*WiӦ'|_޻vMn>ާozhն&SSz]ȄkN5-曵?אݻk6C^RhϞ=s]wpGTbfӂU$iӦq7SQ܃ R9x?HB@&Wbf:U.&ӰK[o̓S82K/ibߚ={)[ۙgi7QYie8.VSӉMGX^`{5MÅ 6:Φ2eAlGerV2 u|SB\AqnٲEo2eA'TMeVVH(ʣ 7ju 'F zV?xSaԪUjh]#{JOcaThp}'}r z߀? PPl22PxցJY/y7fΜ9AQPxmx~3d=ܓQ7G#t}r\\Ш9bHN,vmn:_齛UMD}3Z7)շ!#Ê/R(Qǿj:C{@%34FԸ]:(?c:V7ߔp֭/Bʕ+e'2E(v LhRhx+x[,kWE]R05wQѪfRϦ'Nr)& (*@ ԠA+$^u^{뭷SOC 4ɡʤiU!"z>-Ry6mF.A2?~ѣ݉ˈ(r+P|gm63kșG nEkz뭻Kn= JZ_ig[>Og| %{ۡ8 =\EV{%]ޠRRyeLI j_H$Hg!ԡCc F-Z2f:^1׿\bΥޔ}@cǎSU[ZĜ&4"APiGkiR6{{ӷ1{%UъiV,^X_l&SɪR.ʕ+=ҥe!hmmi4+5R ""@_zbO[1fF[|[m= bƞS hˬWN9RҩtRpΎYq/YޞV>\P7iM@:M ir5)_m_O H׳Vl5ĝR2 C'$9Tz=gz=+ێP3Zpu+4bRC\mV9D 78P}ӗ:4꩐ q5+FJOA%@ >O'@"9'bP25t%SȮg̩C7u 6])kz_֚&!^yܹ)1ڕl?)^LB_jG1ϼV3gts x* UsvW]umӳtY0B!`gEP@ ql>ej2 %؆UkiKD?in f;ԛ^U@^eS*hSItNS=:N%ϥW{*j.(=ض/;fTUy|AKL7╮^jˇsK^w]0)>g\תUK>:իg*|>lS^ZѭbO>D]g2pt&hlj'G@:J'^)ʕAg2iϰ-4{ډpI'e1!x%:!E_O,XPb?oO @ C٠HpA ־$TWlOM:J9̥OAɷLloid*pAi'YKfwLW޽%9+s~z{,'4mjժ鬩Mxj"9+9"z>)Q&=:|ܝ1cV\eΚ|j$ AFNF._@wݧ @*Y @AoÞiEi sX]t7l(4k֬FQgႲC]9T2s%m62iUb&K CVk6_C+(֐/puκT"q-n*:\'{Ka/Jgf푖D\O=T6i+7Idv)C%sQgr#%b SyGΥ>O!F.(#6kIV[ lUs+קȸB|Ő;#snTi@DЛ JwI.pъatC ʵ uk:L-]3bRТ %63eO1  QOuyldt>tqs+eAn=wƢqHv)]6J  9GnKv*+֥Ck}LX%l_L0\Pv ~+ 2>Z⋬ǀe&ED/G=+6+ŗbʹZU.:7`o=6k. Vs $sN⬡s J)#Fpnֶ^#l_x0ۛ>|衇+H& elQs˘ {el75 @!(ėͣ+hOr(ے_jd6fN=T7T*+ΐv1YbHkSqV:^ q LݺuƎ:ګmι@IDAT/BE2kϳ9駟uWSniIaT_T-=ua;^l/QsL%DK@)]3ׯ_HTC%İ wD5I\:}6)y> ؑv}rD}]ۇ[(hWvj}'k r#{n$d [{NBۢk/tu}\n9Z% @ ~DkϜI`7zM ]ͥOanV8F>pAz衆R=]uUҧ믿^}F@’9%ȏ>XaFDD/GݟsZjZn%?'fHʱtNB;s(iy޽{=#\h& 5n-ΩԸͅ6e@X 9bWc3f̖-[й2Jikd?xS.Bvj/2O8H[o/X^ ?C6e(9(NWJi],P&b_:K%ӕ#NyWgѩS'S\+ҿuEwɰav}wGXI&M(>\{Yt&4BȢUb8@(Kc{>dO?զM6WA)|b;*L9''IҬznRHM0!տF}8묳+cЍ7h(/t˨ Mh8ᬿ;>ʐpc#Pb/\,DD/G=- 8y9sXy5T?N/br4iV:Kso<"@sX$ hKɓ'k'eSiV.i0L3 rx<%\$F%8+S 8sjܸ݄&C@ڼڢE O)dJmJFAr ^zJʚ5kݕJ(YOk#ԇ -k:m qԨQt?HC)m6yBr#@ܸѪ4P/-fr)xi͛7QGQhѢ+_ Z S49qgС Aԛq%=mDtjڵ3͍Gyr(d+{/'؈45JdD]nB!#gfҥK ѣrni-q͚5H ޼yJ-\fU^zp*O4ID˰sI'Ö/\P>H9:OA(&Eʶl5vuTe4{z=#@^\w4*i>ND 7''ͿNCH7J~ٳgۭcN\nʲs)e$Xʶ>ҋu<LzWRt6m`2W:1^־[v9 C'Ķ. \53cAnVN'G=Π:Kln rI'`A 8uTUV h8(v[ MO@J}#Rȁa(C \PB>X.(Q+ENHGI>V%E, M s.Yo߾+W86mhdW  /&#,oS2BJ/`ٲeJeȹÀ 5F-"B  2Zm0`w Кc0hQ:B0\yJVZCE>kf:uHcNl -WA䕤mvc=_۞D/3ϟ?_9/_|mnF7} Q=˅v@%ghBx` '9UD2%:ү5,_S EAJ_0#'c6kxFIi  ‰ 8b @ `9qS"'0u԰pM[ @qs6cAHEM#,,@@B[@ @kqg<@O`…$B 9dž $@ӦM+B =cF @ $sN; @ DO9zƌ@ @I&Cw@ @s @L9ɳ @ =<3 @ $sg!@ @ zx3f@ @H2<$C @@g @ dxI=t @ 9GϘ @ @ <{@ @s1#@ @@ M? ̝;w^S @a;F lxɞ?7mK  @"@vX$+WFeH@J+=Jc7C`;vL@@C_FhPQڵk7siӦmܸ1 C@rQzLR@&lӠ< K޴1 @EhDMB @@cG΀ @ (xΉ. @ 9ǎ!@ @ Q5]( @ @s9B @@9'jP @b';r @ DsNt, @ N9v @ @"眨BY@ @s @E9QӅ @ ;<ؑ3  @ $s e!@ @ vxα#g@@ @H}*'O\|y].!@ 9g$ %N:5o[fի}V7d֬Y}W|jvygo{yN6oK  @ 8<ଐ +V :Ԍ7rJ*K  @qs6cAJ`ݺuƍ3Æ s64(@ ?L2bF @ϙg X L8qƍCv4lo4) 5jꫯZhqӧ^z^ 6 @ #sΈ@@@];kժҸlٲ:uzV\C֭ C @Hm1bެY3[^xg.vɮ @Bh   )S._|{g/iA)g-ur CmݪVZ~}%ʹCTq_~} =sf\ ,[LvuW;fODEZ{~mY vm JSٸqc7 tQ<('LҪN:K.U .X` MU DE3$ PLy O:d1)jٲW^ٶm[SgvmʵB^M|_|vEznݺ}}̘13fPY5zjJ9F,,Zoֺ?RC_Cw 7F7"t?.K=={ t]wُI}\YeʡmM>c͵Zoaڴiwq=h w}Z ?z*oVb2ǖinA5>;L^GZׯ\G̹d~=dtƍףG視>Z>KEC[9꽣[Nn.wD.G=E|R}2: Yk4:C=c'saƂN~~7%ֺu /Pr/ ߾j{;zRRJa 5 P ]g!ڠUVٺqruZ EfN48rv:o޼ZaSK,;^cW^D-[ׯwdW^Q[֮.ȩWҥwQfRNr)Fkڔ\밭V6Si-\{<ޮ=P eQUA WT@^{z8Z1d͔#-3V  QhB۴i5]vN9698~ѣGDheDeg/i0Sro]v5n}V+}gV\B@"Pd3ntZ]d.#`;y=#13zǵ㤈e:b ]Z_rI~ %U׿ӥ yֶdu kcy6/\bΥ˷WbNW:[%N3k mZ 嗵ՑC`C߲ro'ѿ#qdF+@ѐŋۓD>H5JvW\Yk.] UovYEk;Kw8_zN̶= WZ7b @_ bNtZ]L-#AdYr:aջ|BmkIK\G*m{NZҊUвַ]eΞqW*oݦ< ]\"u{`~1hE!G (!Wji` mڨG蓖.rܨBs#T®%->i@AϹϹfRPеy{Vn'uWu/]4Mli*Ox3wUxleKM䐸\B}fY{)S\:9{ΎZjN+"ZJzsءv8wߊIpuuc>|2AOcʤYa3got4nIJ-9;JJʦ(#3el @A]s(C(qz QCk>ft&\ҵWیmwT/;v4 ;eMUW{+ͷVL5|Hp!OmSq-c+勲jrJu fsX>HвO<ѧI[ tO}Wt@A+F R{2A@&po)@@i \f!H,+Zg;O\M+2eE*]):&()UUwwKF3z;7 s ޏrVD'|t2c!"t? ;ΤCK/C:tJQw,i1{ǴB9' dQ&?fpe @MϹ `~R2-sS_T9ƑiU_T+tݾ9+-l5nL:lES)|Zg(nUVMgMYlI99"t?)БKV|j.tܴHϘf9M@-?"(%#s׿4(3M/B! RP:  DA9 @`ҥnOYC`IY4Jln9GŚK`/&q5kVF c3z4v/!S#B%D't҆ )W+իW:u(m9N{%BYz +@)ceIU ",v%( 𜃳BNARj Gs֢>f5v)gx8(ŭkОM-:t>^+Zir_|+QDLxODBӡ %lCLݺu}pٷ"Bnl:f|ĈΥ`[N̶IeMAgvmfr%n۶<Ƈz|6E_2\kN(B$Pej(@@1s.;WpH߷~k{$F ]A15J'`e׾z]菺 pvd똥nݺ1}-tIG}3yO?]lnQL2Y|c pz  PLi6EE>I9Krʊ+(e;s˿ LM;᫯ ێDS#BR>?;v@1۳f2w-ss̱5| IQ9Y&;8Y %L x>p$ nݺ\Onjjv2z)+UW]e.} 1JtϹ(9|f !Ɗ* "t?ժU=z-a>1Fe˖α7/TS{~pdi2Pf:pd- E`&&@@Fx! >})njeUt?ޔUڵ=kĉo-HT=cn^3 *%iӦgA) .~L}BDB?3:ud*k\dذaᄏ#&M.=]-#L>v+e̷ 4 < 9 @T 2駟z꩛6m25zR>ucf͚@s9o庫s=WO?Hem +c_}N,HQF)Զ(&e PS1Ƃ B wxI!W:諳V *U*X=UL`wumdAp78~{-r)uX͛G:ꨣn-Z4~x;XfͮzԡQ[A]VyS#T\+77x_OLC4u]gDZbICUtk\Pϟ Ff tҥu=zP-- YFAܛ7o6iЅHI;M_7lk9x<_ U)gYg+gvv^tEz9y)cǍg{:{aoA %Wbʑ&rRt,|:jq 7r5,^G1nA Z_PG]or;%Ыb.RvشiS#2Jaȝp5Kd\ٳg1Dh<}˧.{lΝ} 喋\5"KE*?$G=!:NIlb 0ZV>hѪonjl%ᤶ #@3(!)퀒#(V0tMf9Z b` Dq'zN \Lj`GX}vEi)9VJEjU0pJ*iZ@,ȧQ>(S&4O QAaR|+F#mCk׮z:iȑRعtץ )e I9ywg<-AȓTt*͎kl8ώjPXidA(U+vZXRWP+";K:B )ϬaoXJ+lÇ+XTF35!r;,Yҷo_dW+ۦMS$]ws]z@.B}5rj.s.h7,[L99w]C'%?3MXg@G֋ɪy睎Ea;vl iKb[KKݺu~c=64sWDR å>+3Ϭ_^mWBPZJAzҴN:9gщr*OmcuOcZ EDtR4wf|r}S>isf6]zDV.ַ&YF @ #<猈 t1x%9γc/@yzxB @(T!DiemV)[+. v3ϛ7OZYAf"ې@ $@8ɲugoضQխ?qI'i1V;6CGZP"ZaΠ bԾSnrt9 ԩSʕ9n s݌γ'_1yZyigޕ[?{@ ߰(aa@&@vȄ}¶]#9ŝ(n;۶RץV.n]p @ kOJg{Ty)k׮:O%QAVgu  (2 .,20 F9yű8+AGy={;N!Pr6mZr32 @!@LEmWs;{ܸq2^߿N^U.3gŇK@ @9GH>gI!$SI< 6(q^{)ؒ%K"! @ sHy֌@ DLL4ӦM۸qc>&ϝ;wѢEN 6lٲe>vŊ<̦MBлxwygY-}|_=wam`؄!@ Pʕ+ױcv\?E#i=yz36o|{mE5xb=<6E;@(Hz(7gt'P(Zm. W)yy.4o[Qܗ^zԩSSP@"!+k$XI P(sBy0̚󫯾B35[nO( @@q8+ B<9ɥaGqYgkˍb%$}'x ws6 ؘN(@ uK@(DYiƎ(WO?oѾ}ӃiO۷~Hγ~QL[RЧOSN9r>th-@H~L B=P +Nyڵ9루lumιxmi i @ @ +xYN8OYkUJ*e7pIK6'KAI#g|@ @ BxQmZgEQQ^9RbNŀ9cޫl|?=TWu,ٌӘwyVʎ! mr F@" " " " " m,|7`6ks=k+; (`6+*;NwE@D@D@D@D@Z,z*l׺۲lк{e餚͊C]# ˹.Kͫ:sۋʎa F@" " " " " 턀,:ڛfEe4@ r"u]vTvQd6]+ѣGp ~zʎ:sƌs۱&RD@D@D@D@D\ڵw]-?лw}l TL@sȢ{*l:LkHw?D@D@D@D@D@D@D=ܞz[mh0a¯"JMh;Xh?:vqo,b-*M2dȭ٣G?>[4aiю" "d9zJ@|z73[^{mĈY+,Y(IFD@D wsGE O?_~&:p;ڥIfs"X#X)  " "` \Չ'0q.p_hoSO=5mW^ye,oѰ1J@^$刀@] r+^."  <&RK~ݺu%D@D@D@D@N@sӻ@ w!8e6vhfy¢.iXP(!" "HI[u@؟l6J`"'1Ky΍ZD@D ON;TZD@D@D@Dd9@q (Z}# N N{nN:3<7k;?}7p@휃|'_sΉ,ܹs8y_F>s1ǒK.Y/7nzȳK./ΚQ2iK/1 肩[dEfUS.©90Q '{ 9(Әg (epF{8㌥awycvm7TS٠VZK/D1`Y /;3<_a._ѭ_dMb(OYڵ(̩Hdn+DbQdZ6^{J/r˖[nyG=rcTtY#XlBkMwR>C&`cS$&E8[9U?++E}-￿[c{5\]fgq]ߑXQ ?ifEfi=|&?^OLKxR(O#KئbR~[o=%2dHka,koE/ƴo{D:ƪh|(D~* XF@2,GK6lXL?|,R .O?geFToeYbKC3f4ƶ#;6~ ꫯ_={O%x0/8.i_NZrvT$5UW%bn%U>iRj`Nb 4:{FW*7x#VW/'1> 3xt4#<)ä*]2cy}!L ODxגc7ߜɑTma,3Y(ua}U˥o{R;g֢F;|,'uE DoS6!o0!7#W5\.3f}pů.##E#X;|p̘^O?bo,_nF=n/W{}!Ų-+?xR2>뮋g֘??Pmҷ~{޸l~gbm.gwq'EwQi6{Gg Xy뮻I>X9i^J,b|.J@%PUO 0bk)GQ+n6>"5|'^z(߯CN9f:t`%'xwޙ9,qċoLaӉ1#0'xkTjUf[q~qȳ_'(ANc!X%:8qYlV[m5}#7 x 60|Yb2[U ,} f?,b6NKﳍҹ ?N ‰4G@1u#̰zʦQX̂Y;R1780jE?&̧ q}M0!\s5yAXb 3=^_~OT .DŽlji #4$8 c"5?&%@r[-,`}:`R-b9>m'tWnj}w ]<;7Uwc>9mSMTP/$Q~S%ϩ1݀1Rnݺp5sxx“w]K$s30ژ<걇ccg-; ά `3)D1UjBqk̓:ĉ5*._l&wꪏ Ϲ}$ Amo^x!O1$P .Nv$/cv_ cm'ˎm5.cJZ~퉲`}>%gnac[̞(KӋ [S|ium>j-tٳSL`4]eyvRf3H!6f6dV[q5XpGn$ 2Y~C1H^&^zD!Сt+p,N CP" "snn'@5Ei4 M˕m7:%hs΁}_^x$^ZlÙ\?Cvy'k'`qRV ke8Gݎ"(‹3--uKc "\Tv!@rJ7`sZXS٥ՒO=l6@c@m&F| #ʇݲ" `h%;doEswICaJDkG+ GA>^6LU$" $ ˹"H?̑1{`MCipW^yeVEPnlUd9|`,GNU֍=]aֵkW̰bk TnRN⯊832*DP:[F?skؘB>bF g2gG1C"|~E" `zXqykNs2dfXM\E]ڙt9(׏PvqB _zSj1O?49-lbw/AoRgL-׫ñb:uJͯ13 6<,g/  ^ބi`%fxac>ēob9l4ے1,179R# 9眳e2=R#sn:gGƍ30Ԫ`[,iJkldl.ܘ@՗a~%ݭ 2kYJ6VW,1.>#pF$Yg9rReTRVյS{p8'(MXf+#ɮW25Q=Ue Ç{a"( EkSR `^X*=bO>dE>pkIb^>yg2ʠ'^k39(トA5pv0Xj>͟ϼꫯp,"KWh+3%ʗe xL;N*cé=$/ǻ.I5c7ޘ=Jjf5ښm dy˪Z?xL* J@{ ˹=XG7iFԁ'mbSvejNڄOYQ-.[ol(OGދJȾo &T]o0X]0ç*V_ }na{xJZl$ZeX+y^T? gL/wVVlw$c-^֛EQLH{e|װ~ifHuFfOV" "Pp.xIV"c9Zƚ:q>I >Fs2K% 7*2Y-UT|;w-80wzk%DW_VyQYppcVٺe`-:KUlo,L#C%ފd:Sf-?Df-m L;MG7``0|=K 19H4ˆI֬L=2fǺ1DwyL᥷ǞN'2L@>j{VТBRKMKv[d/d,+͓=X $? ު#'>O52IcV+-r2S9M74h(+_V&S1oJϕW^X3&f@moI"k&©Y^{eYk2dh m.$g-G:CV3n:glΑhu[#FmQgCl>!eK.+w2I /}8LիW]wCm;'Y`SE `G$}Y ]SÙ* >5 mss1Yei1EY$٨o͆0onR ٻsX$Fp>{-r0T(VϏ;8̘hQ~N+m]LGt_Q{u*AD@YmՄeY#Ǫ0`@ e YDT^&}fuiZ8%1ݻw2H6:Ӭ:V. SN?[&۴BF&N?t- }O/}vw31h!.2I1VENJF9l72K͆dGZe̗bR]>f7Yu*U r1N8 *δ .AG+Տbcw){i[_ F2EqAnsb:ڦHJJwZgZʩZ=H;̆( BRR6lS.&̇B`˜ѲC7ư_a³:7ߜD '0Ԥ$9D;2,2Nꫯ#ky|ń+,Otȑ *͚m4zL/ FCNMV=5 +YLv$-qQGWcW:sgQJ#Zϋɐ)#L$4$'o'Ų0`r[|$`|p oӲ.k,4g'ɞ겒 EM'JЕt(Z,YmaAt)0&(""SpڰSg|p f>y|ꩧz#9,>_~DM3#0meL_=cDZIώ;H1Q*KlC۾5\35}l&Q-c%941azo$D|u*P8>&Mdn}P3U1}&xuY;vdʣC}r~Vq۹kDzIv30VFaxeoޚzP;Bc ¥Dx tk9-Ĭϒ`r>c ÇGfcζZ05~5^Y?Vu,9^)W 5`~boND@D@s.Ԇ h0&s]ѯK"TiDWqzYd>|Ut.5-sFsqO#׿n$kXi:ޯeʔJKhw)ݲy6ᗯϙUj~2y"& 1JI('D;+GJQJ'̛c| %۷Ҥ<xHm{8Ǔ(}ߓג;|,l7^WZ9M*u]~{c/9昣q³I4tT‹U{*V~GluKy~<ǻ,Ŏ}R&T"}eō\Ac-'ꪫFwU|g!oŸ2qPsTohU#ٵkW$(z+8j){LR tYtWX勀圊E"N7|&86?@D44S,1Isgc"ijRc|톝8l^Yl.~f0 馛hE[αEɒô;]EGؾ뱺|6ݪ2Wҥ Q,s-e;a#B9蠃|iPE U#2}kOcHi̼B6/6v=L&A8?yرRE,)HdA# [" " LsԽF㽹袋 4hPuUNuhnws _!D7~xiNq,"9srDʹ|7m@s"YG9+9*(g3/b46`"* k-{@v*D[+8À,Ž~` ;YAc: LͰ?|3a6v+D \ҨQ!lG\.8/ZEaB"d ;:G*,P;..(VG{қ8?%fTU1XVI Tťm2 ;_Y$i1_]S"YOlFؚP*є2vGr$&" 휀,v>|h"-iO\|<nl" " " " 턀,vje-b]T~)6q%D@D8-/bdUB@sJȟloR̨/1iҤvډ-s}-(!" " " " 9*DD~}᫯9kme32aѣ}Yjw:fiۥ" "PXV7)&" ",$)"39h63fLT?.搧d q٭yh'VZivR5SD@6EkUD8GM=.+lxW^EohCd9TSD5 6lwkvG$O7t={k~^5*E@D@D@D@Z[礷1K,g1`7~x3cW;+nnc=戀@ B%UEjEkN_ISf SD@D@D@D@D@Durn" " " " " "  ˹U@:}%ME@D@D@D@D@D@A@s3N! ˹uJ4,fPW" " " " " " C@s4hY͠:E@D@D@D@D@D@Z,+i*"Pl?Ä ~b)D@D@D@D@*&0uO/!CzU=?i/~Yر]*!휀^v>|% ˹uN46?+2~L͚]ĉ/2Ӣ"Dc@D@Z,8-"dOZfPb6y#.DE#AD@D rn" !@<nul6J@?]Z%mE@ AӧN;TZD@D@D@D:TșsDvKBf}9昣{;w"3_m^8eyMmxiTBjO[_Nk|fʨ*4{ @hs0xhG}:|29z/2SHއrH(i:L̀]+SE"*kǞEODOkH k&l$u]L#v+oxӔ!k>Lǿح%d'2N>d&MJe9씎7#g[ (vexTL"i/BX&*mfLt=12+2C#YBpR(){)eΧS:nT]H@AI]jӟd{G>gĉ3-Ow.7&Co bģb#ꫯ 1 Ō'GzLJ 0A={d-tSO=ee!4ϒ v&LwygI4xѭF<އoi,1>y}gm6BAh8s ʏJ#sm}'^zi+\b=MJL9fi;tk$og@bUhe0P,D25>~o뙉}%z=Qwm03:¹\sM+Ks=ySX"AYNE jW]uUc\ko /n6lب=|2s=Z`_u MW& I.}sIT`1V`EC"" "P@ü ɫ[n:, RGq NG$Fh7VL Ce am?rV ,0h1c\%ʾ<ڷef*YKc%0)1< Jph wgS yka蘯EI|dT)Q̶5wQG%-E+=&&+"DSy$UNH ;-AaΣl.Fi RmYve{HFDijXQzM75_'[Rrk-K?_~eG"b${bYցZl$3Z>RHanNՙ|FI'*=3!Ae&-u'jf6|1 #"ޤ&|1dJ 6X:2^ j將6d93[ O3?9{.%UX&/ƍYgy&&e{Zr*zA OCK(g3hFF$&"x\5Fveיft-#(#[dI{e߈b6Vj8Lȑ# ;l)B"vZ+ p_Z| ^-yqSx2x9Ws/I4h9{11̈́7{ycHLv[l1c$.0HrƟ } 7xX(k/*x/,IǎC7g xݘVKB7h#6i^;PXD8 bS}O/H :c :. 2_gt4V!g_#E@b8UoR8:}(43G-#gbK<PN*{'vm7va;%(P5䰼$SغުeAfl(b&oeus'+?p*غNJ}U{K.SXj x+S!~ nvbN+U'b@00z-1_۰еH˲#I&-_~Ȳ^xa9xb(fV;9g;=SM|M:%,>:jfFhN|%D@D@%2vo7j!_*ɦmoq]8SįKU︋d>%-%tg9=gSXnz+#٬D8flu2w٨)`N2Fl^q/T| Rŗ}9묳2 ɰY35>? }=,淈 "",5!ݣ_ 9Nٴl׿LO," 튀|ؚx㖍bAm3;-v%dןJ,XĥϙX7 ]-uIPXl,p :6Uq v;plvu5 tdL&r'T.[^x!8>Y @Xkw p%Y*;[Xҧ25=ؼ2>3oeIabLeyvRf3J!FfU<  `vd@{k F<:7}j;M' [cIt:]`[%/" m|mʗlAȬ/,gB<* [Ui8۾(\+/. BOBI:5ځR Q3+ cႜ{Ez|BܹsrBҔ!zРA@> bk:} 'VDG }HCSei°m!={bw_V^93Y:{1pnU_ s+Ნj|-C$jG—\r n.[([xW6d)pnڱ&ǃis7+Q7fKY|DXU.,FɊ,gn̳ةz~׌@4 Ldד% laG11""_hE|5cذa>jT}c4~dXM` 3x驝I/Q~F*D@D-Pv[Mǜ%LT2yY3Vu8ENͬ&h%ټꪫZ[0gs[~^\WY03ugKR+E̪`8޽;JR~.2ua+Q:E|d'+]Tœob9l?/OD2j1#%;1z3\s[e2=R#sn:gGM# ˹L 7r-g#,[kژ匁d m{#oVk5Ser拪k׮,û,Ho91>CJʔQ$9q}2DrɊZoo+P،lԘ@=.0$Rfk|~)Rɏu-'%MXf+;v…n喙5,gvjXժHD@6EkU'Oas,"st2[vئ. Z}n'xan(CH'A¸qػ;SNni0`/[ߕx$|OHV*!~a|nT,.#Ę}HNTQo R *J=|[/Y4V^gV;~1ؐo7f*׭}Xkq=OY2y˪Z?x+-" ",$)!YWFn8,gF3!Il jG!ܘp㩗ix{.nR[ԚdͷMΗBl3}ʄ׃dRJs4ôx>ڄ@Sle],037`H4S #o nH3>Rfo>ۺ/5RUCy4&0!H!_̹l͢H7&Yp^YUU;f.I ,Gd&ZTgnϽWC|FO-63O(ӯm&_ZYui% ZW_m^ Kds4#7WqGzXӹWaDtzۀv O5ZiVQݲ ,' IJ(+onYXRU3ۛ4A H/gw yџ.H†nyn%fN6z'r'Qa658=CΰpF_Ho9&=$ʪmH\HK-xsXn А!9;c2ǽI}dȑ:š͗ăd:ߵ4߯e)s'|YQ$8*)1LJyYʑ$ΉO&H/H$sذa~xI@LRTlye=`MVm9&"/fu֛o,AL0t=Rb1L,X0R˾5%Ip%5$4$'Ų01Ԍ_R|p /Բ.kdv4L{Z˯ lD [SCOUD)aЩTt)pFNd>}˱RŲa2MxyYc5bbSO=&Mnj`$|Xu*Sǎ'cGr k䮿zgacuL Xu|bGUvmxsmO&NL9Tws$]+:>mq*F0Ap23ܹ3x ozV#^iv: <4iү_?"H ޽+#hbG1T33u^z%7[s51}Ni5so3- CMqS~ 1{R]3t`xc/ÇGf,dJQw!x aX[BʲMtfx^@: BלwyZ燝M~?6tKD@D 7u˳d^^d\M$_ 7n)R±|Y䳌X!\c;)_*ɻ['X GS2vD>gϋ$E HħI;1rR1$~d^TYSb!P@=<KCD3j`j>aPSKK4Ő`S$d5d|Ap:.j]WAU(GD@A@JJ@bр<9'^|1O>|>8Q2Lފ'x"Wnrs;.})ټHfdX|]wVjq9mRY!ApEg<8]@g{OxnSZ%7xcW1UQxj+&kz?s"˦1J]VAq΋dEzTo}ݛlIl/d&,g(_t;'|2mCl+Wl΂-%$xÄ)0X 6v=L&~8?yرzI)NfMy߭@" B5AtVL7)pd׻,O袋"IBb 婤L^$KVN f9(Y#xVY< ?س 6 fD%"{ c5jD.$+%B|={",;R/ԐfF+"0U=17IJ샼 }1j(9^Bx ]5Ą'%PKap@VSZvGq͑@A@;~T+l-r56R[Edr!Yiҧ _!^bԀV Vq+Q5l6CapY>Myj(uWD@D _ΗJhksnk=N#j/$*!Kv^ŪFHڪKD@D@D5pu^dOrD@D}PvwZD@D@D@D@D@D +@!0zXTD@D,YeI@D@D@DXi]`]~'Y@D@D@D@D@D@D@Bd9rY!:'" " " " " " 5D@D@D@D@D@D@D D@s,g{" " " " " " " Yc@D@D@D@D@D@D@Bd9rY!:'" " " " " " 5D@D@D@D@D@D@D D@sB "  ^_~ev,뮻G4h=Caæ~rD@D@D@D@D1d97j6Bm3ϜZ/`}{ݻ'%ow+")YubEmp +js̱[dykyOk믣~[neС_}9M7씜XɈ@d9P%@`_n^z%?+ԛl)>aYG zy&E@2༫_|q̘1GuT.]bL=ԛmٵ^;~xZdEb\?*YDb0`?V[?u]i|" " " " "ndU p /~'SM5ȧ@IDAT[Xղ.KGcrI52<ޭ[w}A4j(V8W] rlw?#FDyO:$үg;/gyvaC=Th駟=?ed!JGv+~% 3@?{%Mήjo#7zz\r]*[o hȑ#/BEGAPJvBjTM/.F]~uV1GfРA]w_[%>3+2Nc3i$o7QίJg}؞ڋ4fkEw駟z pS#[fE]Ė]J/"QO9P^[fe#3j"1*(Z h{ost*BǏQAvʾW.]㈣Jk?ju(-" " " " "/YlNi-Hvʵ6W3/¦v3f@=(ZTYK/UԠu"}Y}oJ%6֎T\NI%ATD<[f96ԥ6 }<[9TSUTBtrUlXX>0 (Zv*pfq[nMnxNު(_WE~wҵ'tU U rV%YFm9_'=T(Zƍ3,kOL="GjD@D@D@D@D D@!:_|{eϿRK-U@}ح/⫯|-g+V :\'*(86}EkaA vzM7뮻[nR*K;lwge#<.}Crĉn}gVŒK.ٻwoTBD@D@D@D@D @@sn@l?Zkqfm}Gr˯nz补Ěor_5曏?x{Đ!Cz-+g-l40Ya>+Zh󟸝c iw>\sM0[s/ ,pae,14dëw%?@瞻ѥ@crn glᆋ-Np?4/HN:v髯>]CL@ aZ  |M1]c9bb2tWD@D@D@D@Dd9׃l/:7|ìΚlTSM}'tk"x㍓O>yWڵ 3Х@S(Z)Ui!ХK6ceߪjkM+]$ƍYg5&Jqb;wye LKU߸uW" "{_%oWzo\^(Wqǧdm{W"aA>`d .^.s5Wrb ,38I&8 3f=[}yEr?p{bwNY{΃>vە,Xiw"dÙgIb@;*V0Xali믿}ݛl )ҟ;W`O2痜|?L3;3U3jp/HtnFS@.K38Cʶ+LJ?if$y{=_?x.1a.Q#<}Qե `y/ /"3Xx&hjŰ(!" $"l˫*w}Ǥ'tx.T(: .k9峘g㼙T׈檫 Fa0Q@7{rJfiTlW匽Aep1bD2,\h.>eY0Xtkrg= V1@uy oޤd{bZv-2]wk^'˙7^VdVwYf W]bz~Eq 3({GdoUV s{,CoHX~ &_ k" "P@Zw1N8x9G5 [o_n.lC9$_/WXc@k*?Su][*'X~%>j,g|Mw-sĉ[m)oeV"z8R7|D,sa]X8<x~ÀP^\sMX;Shx^>Cle% '8r˪M{=[x'怳:P8o= Df>֗_~.Nkݼ޸p+WwE@Dι$^\lzJF =>0ZqXsqD`dM?O^0?C`Ux~V\qE S& _W͆dQ u]O0- ٓeDb$O=,fq@+Nn3 Iv3)XqE8ڳQT1,f"W.ѭ-3 j&# c$c|ɥ^ڞJ&0˰1@'x"ۤ>'㝂032V 8A/5jwM:;n)j|t`țxh}܇O{eX^7|?y㗟Ze1M'xvTjo8p`tf(Zk-bv2 ˷.< &Dk&?VK, {0ye] >SEDgوJ:tH77.(~JuKD@C ~RƕW9[oy>SGkujv8[U_ MֶH73)"XXĸqY7+wLk vaiLlxb2%V\lIX0l^Ҩ$'K|cSը"mq2NÍ[^&'0J41@[ ۗX 7qJXIUg 9 f/i:Ek[$b"؜+kά5M2>aB$ . &]޽{BlWX. 8&%KT<$&͉M+`*?5q_|1JK" "PZ\^(iw=;v_~(|eh_e-g8#邏NQqdՋ(P 7NR8 wG2xxbezi D1]ߍI>=,L~#D wڦa 4kŭmƺ \U; 79 l9w\l.bľVM&8cnbZYx^~ S" ٬SlO!xA]-#^҄WMJF9GuO(luX5p,_)h Y΍\k-l?٤-NQNz]Vr]^z(.XjLȑ#cW"fϲ;sn_ S^_DҢtrβ+}SoMjϝvuX./o;f0sԭ>|;0`É٨LJsߩ=%i9I)m!vl}% <#2n^7pM&ˇWS\nj,_*h+nn~Z7(Ӗ%(!0cm\1;xwwm7ܚ?dK&q΢ *g4=^EQ&˛d#ܗfK:-avP۰ng+$K*'jT(b{ ؀0jPa@YmKcɽ؝V S2(q1&Icͽ dorҞ((9o߂+o Z nZ8pOpx.U; -,.Z7lQv @# rn$}gKzM5qהZZo2QM-mup)e,ѥKcݻ[&E[*K+/SQ+^KrADtsaUiEmUgGm;%Kcms,:7)INcB= R'3cl_Wr!knݺ%]9_T;r\1ض#0g0hUp&ܘ7~Eڻ[㏮Q(ҝR(q'I]C%rK})9Tr\rDN#Ew5ﲚ{^?X{k>3Ykֲ< (8] 9;T{Z*ݳ,OR0ѠXuWg?c'+-3-B\P8R y |UVG[Оϟݹ'lt1^{mJex)S$\pW5^<5"M)ٮ:B sc 3exv{&0[=3W?-L]f4-_kP;Fc #N|]ƹUgsEf!.^tZ򖷄Ssvꩧmo+?Wطob9^x%bp,?٤<5`g`&muz2-^/lp\v8C*N: O}S+n2ax .:*dsh9_5< LX6qs%OUzo>;̱9眐u8Rq<}nY?P/C3$Mg~cѰ͒a\ExO%4Nf:o''}ݝ!lUt= tMy,[~-:y0^'pg=sp;. ?O-oxB"a9êOAhqEyT웦D2rKo7x#C9B^%4K_P?>tP*$򕯄4QMs;c?3c<\*$DZN|OE{ЇB]zW8 -Z(8bLV@0rf-Ds<#՟{tPK_sxGV[{}{W_*ᎿoZ6r, /4ZΨ׾ū$ZEk^{okߕv<(ev*%>QS.2pc gz~7ly| Lx6ޢ2CV<́V/~{3OؖW^9 ߻t*_t, L3k;]ؙek_ƙާ~:}n '~!WG 6_yLD,ĭ-?AXDM,%\RͿ'VzOZ5k LJ }pĄLJR@FNR^J %ڼ˜e`^Ad83jE1g0*$5/F8 P AGkwc.۩T߼lƫng(&/mʌٳf*S*2ӗKwYSC_L0|ʨס t fo8wLKgr-oNSw/x1?k-\}ϛX{ñ_.NxSNޯw bYh ]Yic&|ǷʣNΨ'-?%`6PsDd ;-\8gsvjog}HƸY']H [ 3-*N7co:Usʨl, G:@&C^:I[^o~ԼTL?TM{f^~Xۖn\sM=5gu%F|8{n}fyAԗktե4yb<-?\tCݤ)<vRKlHJ(8 9c=\f칗zfMs,1}T% ( ( (@n]$li'l ʹ\1w}޼yFP@P@H_Uo!%dh4k`8[]il3|wvv|]Fq39.yUsu(3^OV@&Xylss;3pYYNސdFn~әV`<#"D5/jn%~-DHSib1f ;fKZ(nvw1( ( ( <4;VkQ<00Nrsw1@y l.xILc+?ZhZȹi6g?;&N%F R1 ap׽uZ{y T*TV^AP@4fVx8=Qj]~v2,[\W^ysq| ( (%`<]|3(=Sqo|3rod)릀 ( ( `<4eJU7k}g.Zh , ( ( L$|Κ5kZiXiȒT[on!ZQp;/Bo|O|/_xq ( (PF`%1cƫ_2ͣ'0ɑ6+Ѥ:@ns=kV[y-([P@PSN9X k }wcWq`n_WL(:hܹS/+ ( 0-BZBhB`"gF41ϙ.\xI'oK`DP@&^&&m6gE_{%VZiA|;S9+{w=PoqhBP@EIdxCy_Ii g~ƷI&䌩3gԫ4cL n-G#l={vAR@P@*0㬑s7wQ`&0r6T Ϩ=c̙6㸯 ( ( (0E#){٨l:4;^}iܤ ( ( "` sNR9lFe_fef]P@P@P u#[hW!lfTF:=^mmiP@P@莀swں63*{w$`f:7Ge76@P@P@ `<g yY2^ (01FӔU$I=ܓVW[mP@('=%/y-B_ I x#cBPWȹ-Er~.b;P@.?z??qGowq?WP@0r5q@^r{w ( $|6`Aڡh_6xф (F>~oK6uO 2scg=Y~ӛѲ/;3f,䒤YL+8BO- >)rr-ӟf忯|+8qP}O}]w2OoZ5yͻ.^\6޲;vmٖ/~ki3g&3dv>NK[0#ȥ^.wj.sWSؐ^zqD1-o駟)>Bom2VSs9笿r}q!?_~G?QfL`GR@PanSy;D:"Yn+\uYATK}7-ޅ4s+>Sq"כ:([Kzr,ҹ~$ 枸wx 1vq|u> O&e&8c{So5:ąsDG,`>6l`~O=`8R-j R/_ z_\o_P'VfVB骈&/g\1;R9y@~y4FNbDCV/to诀I <2wδ `x'RIo[o5\S&yJϲ+NzlL?ahL> 2y晻k!Kt mcmڡ<]͗q$IDATDιa.ZoGҐ^W"(PɺEe7jZ{{@BMp.y9;e`]Jf`=|;dtMxr62?,̪]PfS@貀}d^$뷿mzGx' g?cX>0qu]"kkOG>Y'ʥ_r%|*ԅ6o+LxL3L^5!]>`}&#yȾb0'鏢Ooby8rؑv-liAv5j!)tÉV_}u3$ַuM7GGy$D@EdkDCz^Ck86یr :묳N=T-P:> Q.;0W-oT;;34A\raN:'|jGv/P@n $0DbQa!n.2n^8^/Ŋ+-~ap)!$`duo\4ȔTy–I,</@]ʌlbvPDM[mU) ^#cB5}ǘ8'e>ћ g+߹hTUsS\cs ڐC+oM+lGkfb6/gOȖ%/dZ4ǩkԇb…(ܡJՋ^{t{:l^037Q/Ev$/o28]=PHΰ o3.2OoRfJNE;% (-J\n kצ@A]r !+DbU#O4ișٽuaEލ-o)hڬHt3ƭ_Cܜ^zo-x{_=3-__W1. :(g7񏔜S `>=*X<P@1H=gFK2.^xL)-v ޻[Jc49pQAy6|o{~ǻas%z''^L ςȹ5ؤ3N"pv[HsCz^{oظzp GoO\F0.Y*9s&ocXqY? 9SN9%<ŠK-Ԧn:ֵ (i 9COL*M 3aٳrn?9h0V:_X*Sx27 jt%Y/T9ڨtGd}kVР0ӊ5~2 ҫR/3BY+uE̛/yK⍓A lFK'jBP ATFk'HcW>s3dm}s˄W6?x߆Mm1BUя~4fDd.hЉt`Hn2`mHK}Pu=ЏΜl̹>&ŽV[{\uUe/{Y6uO PP`Ǩ,̷&YCu]7Pm@(+Czv1G'4`$ԫ^()%ro! :ŏoV5Ə?+.~![6f;L39~%GIux9ԅqj+RkP@PFokꫯM7ܼȍk& '][[& 'bU8')Q/*3nϐ/m$B}CNN\,=yD>BӟtlDJ7W丹+c>2hc_BZ0"%\3D8X/doi3P rѢELvQ0=dʄ ( 8ZvR8CŸucB qWo7d2v?z^{TOGqDX_Š5!S{<GB'E&=ԋo'd1!'e2J |2lrR6S ꒭Jm؜ZYP`R'eWozӛ)O;`]&* yfDP;c||CN>! a}2IѷFf #پ~ſqA>o|[o6r>'nv9cVXa,3wy̼pͣT)9ԅ\$O (e#.uA#<2׿-"*9+'3N8!Ϟb;PVr> Jgt;2̘1[n)< 6^z=cDCz^%B6zqy+ &<yr8 fnObɔ0c\5JK)9AP@wG1e&t--̈wo6{^^mfc 7]ɛ}e+mݶo-PJ2([}n1n "~=5<3va9ٲZkl'xb<<+ hcs ڐC+oM+l$W^hӛ裏sh-ҫRZPx:}Cm"Ih,=_ nja˗$PҎz@+P@u(@ڏ `/:3㐘iX-v6z_rcIzYgb@,uqDžq0F#w ȍ#NwxE^( 4~30/7n̩R4[2{W_}wD4 #-MkrC{o <1Uخʜ[%>|s[PLM<.+"!la'Ɓz{/1ls-ؐ^zs/ydBhKfT.;*.0|(r )[P eD6Ř΍61ҫRoZ9o;g[A7* (PRo%Of6P@P@P@N>k2  4.0wܺΑ6zP@PM#6= (0[WAM.I ((hi ( ( (c `4ET@ZX`Agt ( (@F)eS@G`֚{VP@P IGk',JP@P@P #d‚( ( ( $)`dX(P@P@P@di  ( ( (sbP@P@P@0rN), ( ( (@FI6R@P@P@HF9 ( ( (I 9',JP@P@P #d‚( ( ( $)`dX(P@P@P@di  ( ( (sbP@P@P@0rN), ( ( (@FI6R@P@P@HF9 ( ( (I 9',JP@P@P #d‚( ( ( $)`dX(P@P@P@di  ( ( (sbP@P@P@0rN), ( ( (@FI6R@P@P@HF9 ( ( (I 9',JP@P@P #d‚( ( ( $)`dX(P@P@P@di  ( ( (sbP@P@P@0rN), ( ( (@FI6R@P@P@HF9 ( ( (I 9',JP@P@P #d‚( ( ( $)`dX(P@P@P@di  ( ( (sbP@P@P@0rN), ( ( (@FI6R@P@P@HF9 ( ( (I 9',JP@P@P #d‚( ( ( $)`dX(P@P@P@di  ( ( (sbP@P@P@0rN), ( ( (@FI6R@P@P@HF9 ( ( (I 9',JP@P@P #d‚( ( ( $)`dX(P@P@P@di  ( ( (sbP@P@P@0rN), ( ( (@FI6R@P@P@HF9 ( ( (I 9',JP@P@P #d‚( ( ( $)`dX(P@P@P@di  ( ( (sbP@P@P@0rN), ( ( (@FI6R@P@P@HF9 ( ( (I 9',JP@P@P #d‚( ( ( $)`dX(P@P@P@di  ( ( (sbP@P@P@0rN), ( ( (@FI6R@P@P@HF9 ( ( (I 9',JP@P@P #d‚( ( ( $)`dX(P@P@P@di  ( ( (sbP@P@P@0rN), ( ( (@FI6R@P@P@HF9 ( ( (I 9',JP@P@P #d‚( ( ( $)`dX(P@P@P@di  ( ( (sbP@P@P@0rN), ( ( (@NTJYf;( (c~ ( #N4s*y~PS먀 ( (- 8ZepOWK,Q< ( (P(G!_*0FΓܺ_3fL| ( #G:maIhY?[>SFy]~/JP@ LW:ݏ (#4T@P@P@(hp ( ( (#4T@P@P@(`\P@P@P@:"`ܑ ( ( (+¹ ( ( (@G;VSP@P@PsE8wS@P@P@舀sGj* ( ( T0rn ( ( (0rHC[MP@P@P@FMP@P@P#Fih ( ( (PQȹ") ( ( tDȹ# m5P@P@P@* 9Ws7P@P@P@9w ( ( (@E#p ( ( (#4T@P@P@(`\P@P@P@:"`ܑ ( ( (+¹ ( ( (@G;VSP@P@PsE8wS@P@P@舀sGj* ( ( T0rn ( ( (0rHC[MP@P@P@FMP@P@P#Fih ( ( (PQȹ") ( ( tDȹ# m5P@P@P@* 9Ws7P@P@P@9w ( ( (@E#p ( ( (#4T@P@P@(`\P@P@P@:"`ܑ ( ( (+¹ ( ( (@G;VSP@P@PsE8wS@P@P@舀sGj* ( ( T0rn ( ( (0rHC[MP@P@P@FMP@P@P#Fih ( ( (PQȹ") ( ( tDȹ# m5P@P@P@* 9Ws7P@P@P@9w ( ( (@E#p ( ( (#4T@P@P@(`\P@P@P@:"`ܑ ( ( (+¹ ( ( (@G;VSP@P@PsE8wS@P@P@舀sGj* ( ( T0rn ( ( (0rHC[MP@P@P@FMP@P@P#Fih ( ( (PQȹ") ( ( tDȹ# m5P@P@P@* 9Ws7P@P@P@9w ( ( (@E#p ( ( (#4T@P@P@(`\P@P@P@:"ŸLIENDB`actor-framework-0.16.3/doc/tex/fig-png/mailbox_element.png000066400000000000000000000500621341123343400234530ustar00rootroot00000000000000PNG  IHDR!/sRGB, pHYs  iTXtXML:com.adobe.xmp 5 2 1 2@IDATx eUUǷB&騨%=4 J04 o ( ! #!J婁D(! e)Vw1k>s={}>s{^{^!dhdYksP@@@ruiAڭ:P }@@@@ݢ 79o5Wy睳|+~JZ|110˿mݦ\E[ dVR[͂lMя~d=YŌ0ؘ_Ok-'Z1E]%moUoF*$Ϗ㱶oY!hO׾>-"<zֳœ9s®~Z} ls~pyhR^?L~pGI~1^jBg?âE¿;#"1 ;,X~ӟ7''}nn¹۩ȶO?nᆰ{[{^+|߰@\s𲗽,zg>~/}K1w򖷄.,@Adb]*2߅@@!vN|0K.-N:ƽ%/)뮻My?RQϚ :5OTOJ!QۨC|_׋5\3{k^ShweiD8c8ey晥]ڝqVh]*Kyi}}{KB[Km]MK"NcXLK|vp.馛,7\t/x a yW]H ^Q"ӞR)Ro) [rF% Z{tM*~.n bKy;R^p'i F)sK KoK69>u8."ͧb!N"ivkū_R'% >^ӰE:S+ugn*گi7S?K@JzO?=":3x-B~|ڦq~{{A%\Amyoql#-[~b8j}g}<ʮg믿~g"pgskUk=1czJqmRr n}-it~\U ^:N N,e|maO'tҧB ڡEY=bk{)H0}0 +V)T>Mǽ VhMU;tƏrddj ĮN x@I yV>9vP%h uU^u\mq"ӷ*aw w 0L5sz/^X .\tdEj Wnqi> /bէO !]m5<*Y?p-IӶ!.qׯ8ߴ׽.l&MY, :guV:umdEyUVY]^ii _ uj< 13쥧77te+UiQw_z~;+BR&¥bDy{cԗlr0ؑ?èwELn \a)P>;0|s?z*"q3L:?U_Q00y;{'#?x i,s\ha23+q eddtfnE@/n|n? TEv^])cpnDFW'KhqR}BV 7ԧ"Kn#] Ycf[V!;Tk)վjSW5mz\ď~&_iIaWf9c,Q'\㤐FL)^_ ABN%1~g+Fc\HK'֫IЊ: FkbզO(a׶n9RyLǸ.7:?:mO^NW_}uxpcʻeq'?Y]zW ێʋqel8"%(PwH"$wI0t_WF̐oVەYI+q1#|%HgXV͜ . ˖E4w8))e4ё =!BF`;Br*X=iHdh-RVFV }qQ.>)7~AF=9h'oqlq|&SO9`ad3ֲ\06i.5xA (ճoHnj7M AKU1NU80xCGseե .K<c8]ȧ O7+¾pCm0s1,JL3@jgRL͗e L 4,|o/q,rrZQH[eΉ3)a쌁Q1дcQ1g d d 0 4fX?sw22221PyЌ1110+1(|EŬDHt@@l@"c(u9J011111P@#+*?  ,vk?T9Q@@j@1&֜3S eԽљܷ!LV=m T1%1m;>q>ثτa(f d d Lo d0_n}@@10v~#;}ۥſ/ͣ8CYz7)lvE[oՎy=GLi Wƙu oR}{k ~y Õo_4m'? 8~fpՉ3wLj-G样7ho7I}_qau׍^㞬?GS{=ܳ=B΂L91hןٟ9 ¹w~g9*w` L* <}ﳟ+Ưr6X66z:> w%MdILx{AkT `|gɭTQ;ґ߳BNFJyX{-^ }=yƥI'^6UA!"cKϽi+'YVݴ{H_fӪ>MȅF2& weyɗus I>9)ӘW3k-y c<E<0 9x"r1Ӟx/Xj#_ԓO{҂zWG,ePXP+oKZG% eIHqmLfrdR~]Mqmղk5ZCXU\+H }r`kc.&|묳N=P__|-)^Y.WguVjF[[#YxePUv)c09Sp;a|^?s[Hb[~Zl)eµk+B~2b.+ALԥgg"={>b~X\@4%2)p?l ,^pC{okVWX?7U)N.]WSCڢm/66эD=,aWJ| W=MF.c^Gy$ [ Avu˄NYyJ?ԥt>P w}6)UWi-nKAS> <@,SNOjB.(-L3n 'rQŦ岴'/~ uv_xJxN܁~8?ꨣ޺*XgbN߻J {F| b,?b66JM_ Vtoi}"G% Gl3 T'_VX90I;2^v |#@#\ഞr,ypt^wI C"k]Uv}>3Y7+AL`M|ΪL'y3i|aq JLIc:iHUȟs+:D.&XJ :`K;M8۸uk xѵ# 2gZ&_{ ZeQA]?}݃A+ɀݝw9lVWq*Т8SbJĥF;3~ ^ 22)MWD`U[*C[S|]+7 IGkF{4MRGuֵ':m0/ }׶혦|"xsws9'\zA;X_F4Őƒ1m9s޵E<@Zj 2oN '6u+10a%Jp4񱰒CmUw UBƥzh8A Itqr4m֭LcdrPl_z8e:,nQAŸ*ln̼"BAcBrNo\J… sJnh +]w5\uU-ue֕ŷ'6E.(a҈*}iY[0 #=#K `#HސFgK}?@NxB*%+VRp@:$FOc'C}Uç}^0ap;\WY .,,p?ϋ *`?1.`W]9 xTb;3>%F&7>=UkG'?R$w<e28U|MH]Vc̙ ߢ/[,MKo^ cx..첞j_Oŕ.11*̻e0B ^- L\ȍ`o-oyKO-dc1YY=CːmN̓Ƨ_QHMՂa ;+MjK.Ă2abfzCZcXAKWܲK>˃P'^;SJDmœ]#{˪0U@~ U -;@g 5Pw NnY{t۸NO:$fuĴ}})ow1XK8I)C0nkp~}4:053M`TuU.=蠃O|fͩpu&#F!D t5ZV)a>V˛Aj(a}b]X6}f`E\J]ڧՓZ:懵|[}U~/6'qj0B# ԆV<\q.oyCr5UoCfɒ%-2TM|fH 7޸p5hTy&m8*^Qe M86V|uRߨ$WռaSuUT ~q~v=5mm8bK 8*aJ>_°tҞVI[4e`Y 4>bӉ<]7̇Җ0t-wWiХhMۏp-_& Ǒ_9jK]0Ŷ13b!K° BWLuaq/\XPh؉hiٵR>XȮB=H d UUNʼn0tgQG Zc2RcW#5ZlX 4CA}kʗǏDD J+0~g"8QMNt"йIF jCn=DϮ@J;.fkC>l[ػ!Kx1=@7384-0WX%3"e%D̦>%D 򎡄00yL#f9}lcw0 ԱSr.e1дcȄaDox]zWp=~*@;2Q/3a/>Wgi0N级de^*J22a/)71c c c`*1D&y*@& xɡ0W;111Pݮ/rB1f1Nci!8BX5SfN30ep/*XEo&ӫù+00w xBci939%2@ wi330̈;1110񬤽Vp:q њ cg&܇.eh&nIp:&U9R6U2ӔXtMwNץ.FoV;~ף뀶viK|h#lK6=.;a{!/m|sDyCSR9rxcR;|KK op,}=orNx͐10S10骣:qg-xȞ0q¢ɶ8#zB ,+Mb恍<6l3 O=_qLNkr^C";ۑ_Wō7XmF!bkzZo@KyڦA^X&}dU8&?:xy۸JJˏg??콿ؑƚycK=^\u4l9]Tb ú66n\vgw EX|k/s̲7}Uke1AÅ"aWonmKv/! rn_ȹJMµ[0MOqr䀦\<.Pv 6R?.?0/h`ĂwI\0?ucqIhvԡ (/LK\& ]0L5+~Kص" jb|KF}rPRZVcXu]Wgĝ!?&A?W\qMRGyz%uMoq AH2ͩ?6=:HpH/| W]RBV|mv.%h/LUʸK~֝g L+~UW7 ?6~ GA~xænĒIx= m$U6l\9ӭ|քSolٲgz45a!nG]66=刘/@}Q#N:ND d]SHryY?ގNK}3[M{1P(|j۝F?>PKOL@}FX[/1>+6MO0s=Z?@XR/\s!mӈ-2w? cJjbOb5U*tXuPt9,c`10a WHLZSᨉag@~}$x6qqGv5?%As[n p/}K pXhY)=X$[s wqh{UwqxS~eאBermFnFپ;7c`uc`$ ~+vA&dX% +!{Ql_6ŷ :KӯkP=QzJ^Ļ˗/7|QFQXPĝ&]vmBu_?$gG6ӟR++FZN{S9n5#i~z aA4jb9n6ӵoj7EpxجVa͙3vm~jrIH:RäB!!/}{_P a1B;qZGg @{!v*L⸩1?g [y5Ƴz ͢r?>mG\Gda Ikƒ|fvghЅBoe6D ac"&yU@N/|l;5Ct$ Y6M xe`?YۋE5'y@{jr DM,Љ袋B "]d@묳B@V秞zj9O$g}La~;Vһn+O՝UW]U0j9Tc`$VT7v\XtM>66ȼylqYGLB@|YMYˊ:p$t鍕,G4vVڙd9B|7$ #A#o6=DY\hhA `'&vڏ&]0 _MRD[c!_|i| o~hp(;N3xj\1.7,rM5ʤşy1kG~ӟ.tj,r1҄YhrpMLܮ]WhVԅ& p? r MVUU!ze]C)K!yD|i'  1RsZmdɒB #OI%\ba|=]TMcGrNq=ƅ r-DrNZ1aݮw ?8FkLzwQ]e.vUTvFQ uPhꒇ%W%;tF;vh#U69C&kLVx5`%_vK8Bn!c`:a >KC0L8ʉ8o ġZu\dImTמ6eMaV m§>)"4+;j=ksN,Fϐ10[1w O@uba5 +f뭷6=|dhc"C@1дcȄa%$T@}(eN10XN?[XG'cJϕe F d0zs@@@ 4YiO9*c c c`c Y?2222Ȅ11101f@կ~5p,N;4З,AK 6YYDbU<'b%a` pFY^5Rb`FTsyD1p5& ZhN8o|'ֿ8^C+̏$GÖ m6_Nj00YI $N8U+7H VM%:#\ׄb`F&,ߦ_En&]ӡ!{"؍f-Ȅaimm̧ٜZ/Cl e~ߴ O`]9y __w8w0G)p|n:=\;v:{sπc:/mXe on@q.߹]N)"߁ Wo&{u]3 r,"nv}җ4n#Ia 68Iӑ';7m9膺q ;!rf^#<2f{'5\ccŷj+sPq)kG?ј)w׿vkLpT^8mu1=y}C^htUAױUWV0pvi"`6:x6|C0Dc{gDj} .^yc盼g߷c0t1).pWhkVdj͛?~)kՕфQhy1 f+p@#ԓT 1.iWQ&ڶh M\L'cA,t:iL'> ㎋iE|\F>-EJemq:Z;KvTqJ%>k("_<&N*zI79Y{-Վ p j؊ yjc${B.j$y6b3F+Rx޻DD -|{]0Fe|G 11V< Jnx-|Ln nƈכG1qZLO@!wŷBZ*a`%DNp N ᓢNpӦ ajd~d=^h7 /n]&\6pUW'_l8 &LށDqe--[õ0 i;Φ܂Z4bzn0Եx9*|BNIЊ@> azg?B*Br+1ul ȅj|;JCO0cbp<7D[=X+ .(v ߖ '  < f?{]0*a @0FR=~ z3TWʰ0 Fj\a" OHR#m_Ga~SjW*6|%C)M|L>3Fr@N".b*$''.pÚBς#ܡbbĨA;g"LR{r+ye@n$)aGy$E/8koD,Nk */1{&{oB.ߌw]ՏJē[xY5~}|8 Q(N?>=)a -`+ɡm_=_kaگL+>'_XfHl|<;x_leZw,Y _UoQݖP q̘g! u &6x6c¢n.*hCa zV?::;>}W+%^6_LJǻ%IPe bO#0MAuQZ!DFMi}0B4 6P)?n 02Jq/* < AewVWam!OH"6R]T.„D.X HU.N=CҪC] SlAs)- Rv $uY@VVV\jJaPFc8Km:j2ZcU&űjU9:`%;92xvVFmd<@8VԥS\iP6iqQ'}qVn6Aױ=h7Bӎ4m!;0vr-Vv%c@%Tt::BUS "8~?M8Ꙝa~?1GH X)rTQENW#segX!꣫FEJkb}5]r;+"ѡˎ*N މ& YOI- Oy첋EɪhJIƞ.[L{u[mo>M ˗/23s9'cuAdoj~Z(ssf6dXUFW5^4:4AX:/ߎPi+r}esgX4H㟓tǀA;Zp ?zZ%Z>{& }eBzX1NBl$IfN.τO<PB- @DJ`)JP Cե aƆv@fN'q|C{キ껂55{،mϰ0`QYIX0: c]`}γUq&a,YBmoѢE5VͰ!0R7،pȃV<+#*~::݆:BWt ]c%m9~.soTjS~+r;](Հx P}:YB3.t4 Gm W7Reƌ4R`%ѿc+0A/a<~qƻ(|CdwEP LSݠG}0nM97a@еQ &UZ°tҞ1hb 0ܘb`hkW򕖏&zckiEV7oF+NwK_IxmbWq"VƏ' W J ,^00 >E 6oź*KK1s4:<;<)ˣ]< Y]!b^.)r:C _ówa|pZ|%֔1rfip +M:LJ,(X0ġ1fŦ*@ M%&ӚJܶ߰mg $KM+=hDՅ68!(jUHKr#fm Pa0Dڶm|U{a*^ + V1mǖ>NmU3d dlhA1̐n޼y WZR"Qə3c#<(N-v 0Լ]$Ģ:Lj@[C)'" dd0G),c'9d1 <ט1110h" e<̍%Ȅa͌a1 ð222f 2a/ZfNDݖO< 3ǹkSN8aTgӑ9`C& -G.Bɀe% #"N7dQ'ȪHQ[6L{F#< Ȑ_)HJg6ZTґGٹ1oA:`6 Nögr3^:#ft?K2a.oE;9 _ 8A/n+<>B3d d d a :LN8x㞞pqΓ!c c ckɤXqǑİ<8_>9Gi 3[Zcs1w}w# 6n]x&x;uV?3|x;"cկoݖcґѤ%N9?c6GKD\n&7~0mxd< ~i85#9N9nieCFl Nű{~.^\}\1vpW5R>ön[W|p)v|8-0r?N@4l]3qʻy \rIi s=׎kM#'EADwx N wu51tjqk1xe#_m{߸s8oEy<SxGu*[Dx̓}Xb>8˝os.ޫõ^Wb:ՓƫotTTͣPG*BۯT -,F! hSt8hKv-R0pt>2/xwU% ]pxVׁ`HڡQ Lҽ/5C^"gXGWWU`%xm |䦠! x K<^`t%焁|LUp<6O?Xc kZ)dE@n&F=0g焁< # K}{^ m rǂ#|A0;@1Ɋ]ebxp/pY-a >mǭ;X0t],to{ ]3*aA]MeU!5?Q\U x~vz.Wv[4 nN? l|UO׳['@8=]V3t)N o y؅Q!P}RI92Hh 5NMbT&&_ hGT䘜6 nB5WamL' M)^/8yŹIfS;' W^yUnDq-'ɢ5_JS>p/}7j]1ŕ,OKM#!Lz]!♛ߙ(GvaѢEc b5Y.ӿEƦvVNM i76^F"ܟ;t]KH.mȳ eBPqKVzÂKO{`Q2KQרPoq* ܊cIڪ+.nw7qbOX*C][铻oN:5lPatUUjVU-*Bu뮻./_n ۃȠ.|f|D حn`wP35{=_qauWwuLK @ U@:L5/X'9 vT;'U"Sxo7kWnw z샺ZZZpqXe`!1a+Ž$ 0'L3d/XXUU `Az|GT g[R#ā.tOXdC'.-c6GJ(c^nW2wPw5Lїc2; eUC=d+(uێm˥1RMn-KmC: ^:Mux<̺豄v LXDLt?$΀/?í&MR4Kn_lYmq Ҿ2j8UR׶t5#c.e}"kcqn3>&1TLUpT]S`d " ]pWWt (n8vb֖ fWaX:^Y78` :cOwNצ6P;&b"eQR3BxqB 넁$?bjV>< `iYȱpMK]Ո j_Ӵ܏.#f *0E]dC@I߲ xK1_'/%jʳs)H#+,]4 gcm[ Һfҽ/i 4-?i]UFfe$cl7?. ţEevU:hM/T.[nc7@b šGO=m(R%ՁDMm -FTMbK,I3ktM]A)xpXZ*Sɇ, {*.v 6uj7\<ĉj0?0,xWhw'q@0u˨z>1RNZc\U._{|"^>' :7C ڡ䘾ғmD r{2bBxƿྀJr bQyxm;>(ci20pa")[Ph˅^֎*aj]T/O|{UZ$>Եu: VP1> PmF H/nB؎# 081Sڅ>oUe<*n^P#CuYڠgl6]fㅸ0N+˾Þ~kS{ 5 2 1 2@IDATxyc;"P,%!kERʒlݤ;Zl-K՝m6$KB$BIYB-Du7rsΙ3眙sfy?k'}el޼/|@@@@ V)@@@#@s   @@@ r@@@@KKc   9    %@1@@@y@@@(uc  >s8:u[y@.]6ll8zz`oѢE-@V9XOJCG^{w]-[cl&0y;e+8ۯӗ-[7|;B@`D H`Ŋ37CT$ Q r] +nݺ#G4h@@ "DT@7nƍرРAol&MԨQ#~v" " j @ڴiQTҡCN!3 T)T @@@ BDT@@@ D)T @@@ Bs͠* M~-jVZժUWD.?Ν2v\z(sz[>~6l;}'T%KTI1Uu7oӜe[*E>hVBӻ{&M_>JIzUUtAJg\Nyr" PD%{i8xG3(:Jݰa /[nFt-6lSO=U{3tO8{)eʔiܸqΝUGa +T")S >|ԩJkZ4ron&5GѵS_pիf͚fw׿+7oK.ԩw a'Mܵk+=n]U~饗!g[o3f_<͚5OfC=lxL&>ٳg33?vئM~H~@B!> .1x~ a&N:l*6(Z޴iwQ|y3iB1ڵkM!IuU/ jƏ?=gmv: *mWNצz 'ڣs7=ŋ\=`7GuymMG劷D#=c SL)$~ ''D9-ZkvNN@`w 4cp_^K/'wyemذ;c=vG+Lj3iZZnIg9/nݺO<oBzƏߨQ#!S='+꺺zv" ?ǃb\?oN;Ԯ]#8b]wNEsy:yA|ɳfjР9+1D ^aObYՕ}駛=vB]=SݲeK;V%Qo[ڗ07pp];]uE4 Yѡޜ{챇~80{LB9%8jZm\CUo:?:o̠jׯꩧj\m7A>@An9bŊl*Lkor+WΤ] ?wuJM=fZQ2$@JDȹDn4D xf(2+%QkP+t>fmbNU&p&=dg}̦bvĴ ]`?NGo`4ۜkHoVأw'ʶJl5:uhI6~Ft{3ܤ ;=F^{iسi<-~ޘ*xBQT7g^mZ9^^ E)@\F!@Z>{Q<>Xf"3ȴ&^T݌Wǻ[ikZuFYe QpkTloN{\k7fp -y;w~\ySuӚ|j:jZvujck@JGRν K@Ƶ2/^ h5@Wo>#?,dSxkjQ.~ &]B+xEPNѴռn-m6Mw_;y4Iؑ&{`Vx":a9{)A5^]ʦ_G5_Jڕ֟>~k3$D/Ӻ;4_9WK&' D8BRPP4c vj:;5HQF#د ی=f}H}aI+9t"=*=ȟꐖ!ef͚'wlyBړ}Tר&8 0rS4Qzm ~knfWZB5 ZB^0ypMhᴁ jE|wF`\s>{l$ROYy+ءd=|4X f-UR%تUӉ5^ɣ;(afi'n:s5s^Y;lpřbףxjZvufZM .@䜻!% @q h5/uN:U+$Z^S͹U`ס6'(~N0*ZZg]{#gʟݦ9N!ZO+metb3u{*}R`iŲ,&$=jOsjHe@@Epi%E4$[͟ԼJ-Mqof>.^/e5kV:ByqZ"d}4tQ9(ZSl?U#Ȩ|' _ѯ鮷Gn)3qq?g'گ 0SN} _^tq]qzT<*C/&rG.v@N9;7BмJ} io^V w+F /Uܤ 9%VpnVVY'-NYf;,Y,'zͲ[ $gYZWϨ߻w9W h=ZOK}BkuO!(QMxUTMDK;֍K#"]@J-MdDJt%G*ڌ7Όե׿5OU3%N,ߎ$usdun#< UZdkvxŐ5\Hk֣քy?. g%m_fQ-U{Lǥ@PD΅ E9cRUT袋셈&ϩ~]^;IȥBt)_FRg17ui0EȣJj16%k3vi[Vo=sLMjH*QiPKSRi6Q@((R@]Ψl`zw)G"e{3ش']ͦۛt~e2k~"ax뭷6lWyӢE S6i?C ujrѪ>EMNM?f͛7g{ִ>N֭[h}=B}zsl씦V-jڥx NG@CC Pr5VU t:9wedAnGꫳ\=Xl޼J͵sرfON 5F'⅚b~iQ~Y v)UׯB K˜g ku8&vSM;fX^DdWO*ٛ٥oVsoQ!ٓugqI+1d?kp{I-s$)i,HBU?o<;#M=ZzٴZ4ӊ#UQBjV\ϤI\Wu^|~O:$j*)_|SKKB+n QxRK^ҬRJ=\⛐& f j۸qc͈@n}ZL֛uSxR z0Zl٥KURaB걱=I]vYF1>p@kvR8T_+l!VO8z^^߆7*ntYȥ @No?@[@anѿIv!NZbr&fHc!Y+U+45eM( >|xbo֔; l~:Ȝ6PCSh"-ɖ'_{쪝]7JfNm5._jƺsd*߯_?,:jMmo4i }ꠚ>& @ %hmѤ@h?o0EG5jZ#KrTZFXiK`Mf ~N9 ׊ٽ{s2[˩2EdzgVb f1cƄ:*\+UBȚ^}]wT(g֋Nǻ֮][y;~5ue:&OkUgjQ !s^d$/tz4f>:]\P8has9?>I0@OHϞ=+WXig=?Z#,X)P#ey_qK,hCԵt?\UKt@(ʢ@(4V5S+W/WRnRŨlI˪^qN˪UvarX+͎K4['=K,[LD%yGP?=s4k9q!"qt߽{{)SGS3\.SU%.POfBhӰ/ G(J"碼4 @ H9P DUQ3 @@@ *Z $7rT_\K=U,  @cw˨0 Ku8c,y@(fFkݥm    眻!% DH`Μ9 UA@ r.H#@+u=#  0Z;c2N@@@()KvX@lv}z9gVZ5"8@,PC|;   @9NB>}ɓ7nU(@J\\r۷oӦM;|JV>璽pm۶-@ip# BX𦔘76Z\@%+@\ b@#>"B 4hРy慺:E@bxWϟ_] S'٢.yĈQ%C@ ݛ9n7"7D@@@b r.I[@@@ rޔ@@@Iȹ&mA@@^9xSJD@@(&"b@@@ x"M)@@@n@@@7D@@@b r.I[@@@ rޔ@@@Iȹ&mA@@^9xSJD@@(&"b@@@ x"M)@@@n@@@7D@@@b r.I[@@@(|+УGիW۾-Z?#FL2E'NX| A@@ ?Dq*ӗ-[lcvqǤ~&Mҡ?#iv"  "8sXb&СC+Ud6I   @ ϥS`ݺu#G4ۃ *yeʔ1>:  d*@䜩(iqmܸћcǎ&C nf4QF _tifz A@@ $"`)hӦMF RJ~W7muQ={gϞO?~ڵڳvi4JS,y@@]9wCJ@j֬yϛ7Oec u-P|͚5DƇ  @9laG_z0VZsʖ-{?C+WK֭&   9gK Er-_|EӦM_z^wa{?i@@ h< s Ν_/_|뭷VZꠃR:W5,Y.8$+3Fsuz:u/^%\okser"  Y 9gMlj%'pO4iv׮]o6u~.UvK/M5[oU믿ڧkiO6{4Jqf駟ME*TPZj2eçNtDw:rSso6#O*]'O{(߿ґ*A@(?Hi&Y WAs+*xRЮה<#FxyN87UVN'Nc{?lo.ZhΞM6)￟wyZf6תW}4:~{z^Oe_y>@!ओNNm   @0ϹDn4 ^@]̓ J6[O~`?^|)x^+-J˖-Dr{1-~Ъaׁ@@p a UzԮ];͙3gرz{Лo{Z^{zMF2eʘ*VΦ:miV[ÖGs(1q 7]:STY޽{;ߚCի^MbY9k:ND@@O(L@~m׺ꗞ5kVCe_f$_u1pνpJ@@@ 0ZǠhׯ?uoFӞ7o|d:ڃ&Y0խ[פsO-_q  ߹t8VZw:/^_vll%  ! 0Z;$X-rK+>9mL@@ rC2KBnxex$   r=k֬!c.ll:˫x׬Y|y]wr!SD@@9Ǚ@6mw/\ SG[>l۶>ZR%<[7n햏id   `8s"P- {4L2w*Uxd!-֝6w E@@0PR0`… {Yr6o֭Zz9̉\{4{C iԨQڵ+T&  Da#PV--5jԨٳgϟ?]Z5MZaKFMUk|ϲWi*7%(@@| 9Sk)0@@JX ơ   ș@@@/"g/!   @3   @@@ r@@@@KKc   >g srWZiC@@ 9R< ܾ r)@@#q   @d#{k   @$#q   @d#{k   @$#q   @d#{k   @$#q   @d#{k   @$#q   @d#{k   @$#q   @d#{k   @$FT3fSO=ݸq뮻.Pj\ 6l̙TvzZ>[Tˉx+zzj粧EϥL1bĔ)Stĉ˗/G(e"R>I&;ia|B{=4V^=*'9/HrvEӧO_lY@m>y㏴ɀ -@lkF +V8pСC+Ud6IN[F@@?D~ȃ@X֭9r)}РADF# nhu.b͛7)S&m}fK[@Xȹo.MC@ qmܸѻ; 4fD5jҥK5kvgs9Ob3PZߧGydvfwuOk 74(yo6u}KאΝ;n>6$`ukSh׮]s}NbO>Q87SƎ/gO )ٜ4c \{Hu>l9ki NzSSeO**=XŊ]MTĉ{c̙C;IJv9JI2;sΥt+w93^xMmLTΌZ@ VgN< 6гz 'M=vZh+FS?Pw4zF48}=@o`zN2}ֿw 43g9<^]JwB~!mՙ{i29K.L'裏VȦC Y9]$n:7xۙx4=!m7|T zYE d55jHcO4 wsSɴ ]KWuuuAӞ3^+*s˖-DrL?,ZUgQdC(eFk/[~ڵkfM$wUV4iD^>/R'L`b0:u5k^SMtJT4 Oj?;B 7sϹvFd3(}…fիWWx^=CS#ׯ_Q__]#5o߾! ԨxGOohӧds'N~fOnhEyHTtͅׯa/z7{=T맊kVIz&Y%B QO"3oժ+"buBd=?bv!C7CJWQȮ*>6]]ki3Ϗ/5Z;i+@JK R=%Xrӽm{<@Mvwm7}O,P8> 4:1+ԒTy^M%Qӯ_?ukiN33B)jj׮iF)2t}|9?lћc`5\S]u#FKU;jlwCCr$mi;6i&'>ze9'x"1mEHztzV,X@&dS ]y啕+WKVٱcGɨ(Fk*3f.D hFHYq$O{O$}"(,/ħ[ ڤsV5NUBIoJ$ Qx/v씯' HUzj;inhH~-bgb?ą5#(V ]KcRC\ VY5XC %ؿ| u1M4rv.6),)"}#)b!@\ĿŹ܀Tzk)6i,Aצ(Z?g Jk xV~0tOqEK6tM>䓉ejOH74<|>!󫯾ީڻ/58Qq]iӦp]B5(mjDvs9k씬:U"`gE@ʤ8~TM C1nCUnsҽ{v65U9Jh0ޫ/ޛ檯&:@\eӕPo{b)䲩ȍ KiA,l;ۧ֝zZbt%^ըW:1NW >:&q ͛CMt͞rkiOђNÆ 3k8mL7UfHz>:ۛ}Yy|5gDs5<Ή{キ{{&>{66dOgS26sW q~]J@@C'60 6z+>> X6*Z}ϵ\NSS7\pAf(X(-e4jWͦGb]wwn0{{xVZQsh}1ҥK4 ͏C1B5?%hD~Sd^hֲvɻ}S5A~K/0^{]tE_O~mZ ~z~J  r61N9Ƶ/DյW)Gyֈ2 -eș!Ԣ>Bi&|n3Us&rVY ;*owp@;C.i\ժUӻ|LSZ@ht.o :W'JF(?S)V r]/66a$6mZF0Jα`ڮ5̵hlLv ͏C>[i/}i k(r:^B f-zW5E晰Ysjj!gy&a͢ڪΪoP:3P{@V>`= _:岛Vg^m6#kz'D":qgxм9TwSujh?i^zb+4Z߯^c=ֵߵ+hn3ZP+i^gWZcO4\cXU-薏M8p^FQ[@X96ePIzl'9f?n*JHk/g+kr9 W"X(4;u!"ۮK'n*׉y=Q9!O3[e9죞(b I&o;<8h^Bn `լ={Fd0٥;v3bo=sv -hmoR@ߜҠTs0aBNN;yQ@+WOu`\\xMUΟwgE$qC!_+(S)fgDHz>*zY4]o7&6CX4aiZviXhv@@ $"`)5X]K_ZAS/V}'VAj,kΓ3OE_fh,0)$`T ^%!֚5SZڵ>ţzծC=9ٚS1@8 9Qg_Z0Y >s,梋z檙~7'([6S-ҷ;F#ᴒ٭fEsUݺu߬}ԓ6G[Cz5dslE~x衇4ٞL GyDM8&TBmѫ.WV (/6М@%W[-fcBn/DPt{bn%Fi s; z&g91 @IDAT}]wkH^t)NN+ Z0u*z|>}4Ysޘ?3&d I$-0";/:. ?pOkٝ3@("碹4$\H:Р{crꍩNZ/Iի. JRl2Q&z']||s%~6G"SC QwU~y9zjglzw5\ ]|MW.B 9]|S4d]?D[Zm)7J@ȿoc)~z뫛t5)S-Zl1M ըQ#㠥ذau]g2hGEpm{䝰_baҙ I/G[9ZZ5u9~ǘmS&dxgބt hy=>9j M5T=U[6jVj2sY9c/=|M6y_Cђ& '`ESNv'qΝV;ꫯLݻG0SۤtzR; zhLI/G=U]:?sWШu) u]Z<5>\%U+M54檿ZEyC(e"R=}Yk }&-f+%|skTa~srWinzRn>cƌrBi7SZqz3׊A7|9EkJ ; go~޼yB +V+ͦDHz>>ۢlꁗɯyӦM3i$&~P?i :+6lVTTCSUh‰ d' aٹqV) h/uf~ZJo=ꨣ#Tޜ4ѣGk 1M/ͦPoF#7 8PC͸|ʦ9H  jڵZgX8WKV~-Zdh${Onh:+6/;j.]h-%YF+s(hf3DHz>[Py„ zS 1|_YaKsQfOPb)Ӓ3ͯ+: ^զ4{z%@ŅO.bs/ή&ݥ {VAnްjnwBC:!IUŒ3ƜerI:$c<ʖ\B鋵uLERհaÆ]\5>ߜ/ [KPxMh>V'Gg+^Z,v T>>kD~\>(y]eUsUD_9U 7Bm#@ER 0"2A+wxYJ" J/Q jժfI@9[@Fk(cDS5B_W˟.X`Ȑ!*THZfw %իZ'xb*% m-[(oh\+\paϞ=+W_#nժfAoMN̐Ş}}O>$b2+T?:QR%d-e/1u>OԵt?\ETg @ Q?u.ƅz}:5hĈy W`(4\^@j*0gլSظ`f $EvevM.Jץxh4yZ#`Z/@c:4_ugû}!|%+VYgU'"(@q"@ ZH(0"u JC|4(u/k97}^z>A^+a$m ;@)7#   9v # L4)kMXA@)@OmC@ $  @]@|.   cp" g9s\@suC #аa\" `v$o B@@sdnA@@s$o B@@sdnA@@s$o B@@sdnA@@s$o B@@sdnA@@s$o B@@sdnA@@s$o B@@sdnA@@s$o B@@sdnA@@s$o B@@@Ԅ ڻwd@@ A@1JNȹny6xOv!  @]@|.@rr-@@|MEFMȹhI}%^ Ga:`vtmڴ6mɓ7nܘkY Pof}H# PD|wKm +M@@( ϥ@@@b @D@@@ (@\@|.   "$   P@"si@@@9&QE@@@ 9K#  @97*"  Pȹ\@@@ D1IT@@@D   1 rM    r. >F@@s nUD@@(s4   @ cp"   @ ϥ@@@b @D@@@ (@\@|.   "$   P@"si@@@9&QE@@@ 9K#  @97*"  Pȹ\@@@ D1IT@@@D   1 rM    r. >F@@s nUD@@(s4   @ cp"   @ ϥ@@@b @D@@@ (@\@|.   "$   P@"si@@@9&QE@@@ 9K#  @97*"  Pȹ\@@@ D1IT@@@D   1 rM    r. >F@@s nUD@@(s4   @ cp"   @ ϥ@@@b @D@@@ (@\@|.   "$   P@"si@@@A" @ƌSO9-hܸu]^k 6sLv;kA9i9oH=V^YlѢE>@3 @I½K̵W>[@uSL>}ٲe͑w18@K A`Ŋ45:thJ& @@'@@ \u֍9\cРADF  s 7nƍgvdhР7l6&jԨt?;@/@ߊ  @6m2@*U:t)dF@ J   s l   sh   PBs.MS(z-,4o< vl͞{^{ժUlo.]]v٥jժ}!U>믿Ns5{ ,YDb;SҐ?cܹj[o>tAJZ0xCEp@.ɸ#@1 cƌ4i[W5oꫯnݺ~w>3_}Ub z꩗^zi=rG}l>^xw#^t y普ڼ[@gjgh֬C=Ըqc駟Mō*TPzSL>|ԩS֞nݺ%q0)Tbv?߻ꠟB:w[Yn]ס7C QnҮ]kGλ?G?ٳgO;iӦ_%p" @I ; \|S:RHv, . PߑGW=XŊ=r)= Tm 3grN8qw4;&Į]U_4s3f&~VС~6;.j夃r+e/54 /ܴiwۚIz!~vFFήRPsN< 6ص1N(SLF]-Z. r @l4L@`տ\?~w?3gzdVy睧~Rd9rd.]{]+:Q.-TK{T]͊]XnboQ f'$o!sߚ&=Y'~7jcX}DtQ]Z~' @Fk @\4Ae˖VФI5kT__~駟N0:u4k֬#6æ.\hXzuc=4Zzׯ_Q__]cӚܷo_gLkfتCoPӧXsN~f5/TaZ㍷ϟA˕+gJLp =\~{ONTtUׯ1/z7{=T맊kVIz&Y%B QO( 5oժ+j6Nqwu7?ցRp *@v`wm7B\Rߌ;iIJ+v4AZ+wiاSlڴGk暖_2*#F҂a+XlNs]U7iyׯz_{5MguxGC|Gkj&'>ze9'x"1mEtNM}6dfQ̜$Z+\]~رFdT]ں.ٶKP >@f@R:1| (HH!Dd!AcPkh{٣WK/2L{J+Ttw؁ K)16ֳmWg3ȹANZ[nCP-iMۙ9kbv;5}=U&m+ uԽiyki9K54Fkp~Ҁ TO"g.꩒jj@ | z)\ 4|{N*VhNMw_sT^xΐ4m$lYC=f)$'|Uu4P]ͩBrՒ1띉󫯾4p~jVD@Pi|yd6mZ۶mMNBxl8]`S*p5uUUm p@gw4 e}zSC9f+>aevjsMT -=e/ٛSe~ ysjktkbA+ʏCMtBI˭=O>;ɦ;Q!6&&4_s^ZvI'%LG!4CqPּ ] m! U`Ȑ!K;Ѿ*&!f? @ r.#K;lVFfy?]t渚ėIkn6=^m2UR=̦+QVѮUTa9jO@dKpb,gyZLlz$իqWYߛMZf>ٙ*ѹsgG䬅휩\PƤʜ~MMgV5X`TloMD!zQ~dsTt5~zݴ 1圢t 4` ?W )*vi*lPPC5JMSC:"B9J",^l M {y2ZҫnLڕ;]ٴi5jx\.WnwS2C QODZ'|/br{u޽N:Z6ϼNsczg ^ ڪYt@R38C-`4 @ ϥ@ K;\@K\aRFk]]{q@22W7}+G"m£ QOlQkټ/ߵG#=XZ9:Y/<΍򦪭ʫ jYYP |GX5Y r @DaR&(kF@dT3oWL\(Sb uvI&FsHt?u&b Z&M~py_IЊ3f0+{=hT~u? 5A Qs(5ʹBM9 @9M ʕ+K"7nhgv>4m7AHҜ9CV])io\Ht? g͚&Oz94RQBkZ,iU3کQn@f@ r.H+(!WGrlkԓSBzSshیl׀e&DJcFҜ+lg,r-*֮];S]7sZjwuSy697o W^e ]к=zLH%T1UOTUUanj⼒ZMT  @o@ Ws9^R{6m.To¿& '`Jt^=kܸqsε3$Mk$Xcu3c(>ɓ'ioVRd]r%f{$B Qh}謳:==6 \uʠAvuW'->`w z*>U*_%$F۶mvʛɉ PDE|soF=Qb) WPC+M'N.JzZ(q.L2U%fI;JPuT/B?쳚"a ukOX+eZ)$.7l0- ?z ]@R %E`z>ϨN5˹d!۪O7j.VRtGX?ѣ%Ě6mz7LB%4:Qk׮:ÚxGhY]F߳y睗_~yѢED%t{BM{Sc+1sʗ/jb+#mT`_Y@ǎ[l٥K5k~tp?lf.G*O0Aszb5f[Kprj3gBe 6ZO; Vg8Ӓ3ʯ#Gcusj=S=bɌ P*J_|yԔή&7t\F[`ɉ@=;N(&nʻB}p6ldV7W<vnNQ8:j6J̘1dS^瞳yuv㺹r*NsxljஆVKg*!Υ&fiUv ̓ׯN=v}W}*j2>O' @ 9 i<0+xVzׯ=(n1'0`{LK:5[)(lΡUR#Z+6st*U[]Z\:'MY14ShtUC QаiTkFc]Vkv?Φ3]P5Ty؉ K¦/'xvzoƎqZ15Ǿ.@&| (i 8IOҴ~cz۳ʹ*THZbfukVM!oC S5*U=sF,4P1… {Yrz=oV4 Z!=!lZ>} ɬS]f3DJ^%KR@9Q>s QB@2sǢ{{ h#L dq]9+p5ϮW-/ĚPZJC1jRk:u^GolVPAej]vevS^ʰAgϞ˗/o|4]5<YBho̜]<\"q @,GE3dA뺂g>}GĴE">]| iQeO>BHt?4Izf]4H4v"@0#ӊÂVd!YArg͚ O(JD@@ {YV]=Ϧɥhpk 7  J\`ҤIA MXA@"gvQZ[FqdDdߠΚAIR $`vRvf,`}ŭmQ@@}Q ER?=Ϧ薏FquYZKQ%"0gΜi)D@ 9FN5[o#PܵkWM6&аaʦ`@@ HFkIY?loKoXZӦMc-n   P("Bu/h!;n=z .,f)چ  q r]as :ׯGnݺ2Pe@@(9]ꫯSt&Mz+QOD֭[o՟huɓ'oܸ1ǫp:  !P\۷i#@)VwrרQѣǾm۶XZ ; so UB b\"$R,oB}O4)5J  PVM] -@;QK9k n=")@%1_LdB] wU4v(}}9;wh;餓=\3{쩕r)s@@@s$Ψlu2klSI..@@@ /Dya.d6;uVRR   u"ߡx/Y:,u23*;^"  P:DΥsCoiFaFewI6cTv   @D9q%?lnڴV6-?   ]"ޛǪP  A:ﰙQ٘r  DI9Jw#uI@@@ svH63*ۧ@@@ .DqS+l֨O>YKnݚ#w   @^ j͌.#  PD%qm63*;XUJC@@ 9GDbwy~8uTFeGQ-@@Z9hѢ.oƍ{n~4@@"`[ܖw"  E&U    s k֬ٴiSeQ  @Ι@ ~QF?~ɒ%|͛5=COh#Z>^bR=W\QCN9XYṚ (q#玓A^|űcdžGuԨQW7n\1l@̓B2/PF=ww 7x?q8FvXyf3f i &( xM\ tUȹn\h,p-L -e]6s%&P@P@.`* (Pu|0>AUVYe)>OV\#,„ (@/{P@_y啰԰9P DCN@_P@z#{^P@}*a&V@P@#Aˠ ( ( (0ܺd.@'?y'dfigeYH<̓O>O;+ry_^x7>F<9묳oHI{94n\{g}r2sg_dEzĒt0[",wU0P`>3τN658_`+,5C>hp~rb;9Ž]:9,B|q>a.!+]9真'8'99gҗ^a\ (S Gv!7>dw/__җPwqbѧrI8l\s_?.h;ZmolS8^+wy9#cHS`ފ Bz[/Ȳq:z[-׿u_,l|+_;U~bmmrx#mcOGRuWF=|M#Vǿxhc?ߏKs}n=?m.[ h.ܦYf|N5Tů wZLc8cyTzqk//|V1M :+x;ͦہQL~Rlf𼀍y ZkſfmؔJ?WHNwO6d1].M<| 7db-ː#n).|5.-={ t^iB&R` y>znмw=,A, RY'-6,ݑ/K sk6N=IY5p>x@Ck@XBҦn noBhig~ĮĹ|Ss-uZfgŜ/aR( Fs&.a﷾\U򸄩 hm'p Ků<[jO8b_] J!{_4Wfv9[NR/ѭ5osc's mM5ЂM1Ys?OBHP/lcuBc9&r'tb0Lb {Pй:.Mܹzhw7|%(N9[̸.h.3,! 'N2'R"玟~s>"^}C]?l$nf-skfn9_<,* y-4OgD1gq,4/ltWaBOdN ܐfr y1܍=Wv6ud;T%ʹNaF+`oq;KŎ7f4MOew{45k&s)$AWk*ܛWͬΠӸas$r $(!k D#l%fM6 f+z\f"C~ǿfȹ_,-HKl/hB~z{5ҥs>wӝf9J-Q8sJ:_3s1~H7jԨzB1OkGSJ.4CAW-tnRRt ^Ѝa3_ mRY\/S**ek&IZU- q`@K)1ak.~7g,^DE.C_) n18f(ne_>x n.τĊc[æBѼq Og Z?]v%gKh.rXZoSO=5nM7ݔlO&J W,9 r7tSa5/9OᇗO_abݐ7tGGlXoB ' KrҩؒwkeUXw1W1|t@% ?qSpcJ+}!s@~Bҋ>xt6=8J0s5<8|_㰙_ޯv@x9{8vb0b99xA'l<ت@{pj';oϑOovw};]-W@_6#K8L{㏧_ M,$%;bcF_?H9K'ƍ`ȜU;1]vn\! aN̖G:u!Ll'YfB/%Oy4| Kqzpst5=^`JBVXl!dW){$?>f^"E&tX{y5\Fb@N`S1z/5_?@IDAT=.FT"PЏJ98 8]  mCQMfhG04 Jǝ+D?dRfu֒]%d?1.]RC,6g26$'ai{^N[\ZE=Nl|pN#+]/)hH N=8y[X\^ͮfv'(6% ^F $Ӷ?"d '!AT>01'0CKr;gi!åD7%zkgWdd&:SLxٳ#P`R, .W%1c H'g°:9%șƼl7vV̾rcc49昃0fYXK7V!>-쎗~f:tf@;̉+g| e*!d/O ̲8?31zyU g0ZN\az'#(hUx≴ҳw:8χ ǎ{Y$ .,ɠ >SN99u1n֓'4ro;xl]˚m gLJQhzqxml54L59B[~GJ t + ɞ_hI6}FQ^ŴFoi4ç}^H~sE|r{nzl f:kߒar0̚F\ޒuޟ~5 6ۄ=XZZrv$1,|G6l82Kpj̉ E]QBhCH^l>͞i픇,4DžӃy%^ LGωWm۵[V@\^AohXƆ1.9cn]S{ge3iSTw7SӣWunS虀m=vGC,Lr(UR2Y "k62}T2NFaRIVyYNB9_6_vs>lIlY~.^c6\4 gt UhçyP1;{>{x8Ho I֯~կ zUGo㎣abO=,4 TY6*׾Ǟ*@Z֫.B6/})7_XaL%~ x@yW #'n️e710 k&?=JrSpO?Μ%az+ 7̀m3|(dGqhG,e!$3'dIMteӧ3Za-H֗NcB놯)~])e`*B6ST:U `Am7.`<5h{!@3Z6k]nanFfzs= עf &tu0ʳzō ,分/b0O#xBpIag] Ul3ӏZ 3QڔΜ_ ]za9ӏ(%'Sj3a![W a y\s͐q!s7ubY6:3'g>޺ޟ O(p@X]wuTHUT1MuS wP@ `<*CTSM9a7GqDE8᧐`@]H(ՃF8Cx/l-@Q-p3V[d?<g _+wݰ^xaV76GAH{8#( ^on~]vÇ1*2~sfK8XXiH52,|=֖6!G *+ 0%r2PtAT>p yec'px<ߍ\%)W$H2ːjrb*:<"W4 ()Gv!Xau/v}PS$ꫯC 7:(̍]< sqlak1M`袋z/bNA=tbN8dc՚yr >t@}sˌ5a38cHsfax>w5wzW32/Ŝ)b~`J[v;M_Bb8L%jKH뇜!{5ҍsbjG͟ob>¢'].+ɛR'šLş7iɻ],O_n e=%J*jm*gF=v\rU[ЪLPDhfOцr?&wo [!<> 9V2';qL:d0q+wZb>l:&` l[(I>&vo~cś]z %]MG?Zm>0!ć32,ᡇRlڤ<ƍPDP1u$f5G-ԧ_޻ƿy &QT++"qɄJKYgn빃 M]#Ctη \o"qH`\TRK-E8? ba; {|) B좋.Zy-bqֳ5kZen a5N/{\tBdoyOx OP;R@͹Ϗ6|NXnfh뵿eF7iiչ[Z~bn|iŊwmRc݆m8S\BI~bH^\fӭZ0ҵ^RڜY_gۜSz_\s"s&‹ٲ%k$[|'|4PTs9ݼyZvt%m^6B%汗/d"EgYxPSYTήn7*0,s51@c-e?'=(oyle:t4ERJS']iHHb릶*Q;\/Tg .`h's|ʛ1{wL&iSmJ<?JO4,3/ Wd9Rr!K,Ddhs>sMg4PWs1 )ۙs8W׾\2B EQq6rP@F5Y\@mz=#W]uscMx@gԸ5ΐ1&𣘧%gczҮOd:oŃUFH&׿{@O?ȆtƑsngq]Zcf^]v]lHk~jkgOPog^ s;1GN66sv)TqPC Ȱ񱷟&f= jn zhscw#d?O~'9u@&ZXؗ=$~P)TSO=E"*d (PO`<lu'f;/ 'Ѓ]WpBP>/i3'cpS }S CfeZs)/H/@S9)- iOҼƇ{{1 Oaʇa< /7:{s4᧎$fz$^7EͅPg`O2g?zoX |uEV 3 HEX 3Df%31E%cfh𐂢Ҥ_[8hZrb'%gkyokEG~)6'p8z\ au$nl (@+~x Mh M,׶~'t+fKh0P@P@*"`\08^5|b1Z*Ͱ P`0x[ %Su; ()F)JQ@ ]mm'?Iy̤ x 03ӝ?~ם:P锤Q@Zpn\E:#V[ ]r%[n;ĉqmLn6yL( ( (ۜ;FP=㢋.z'8 ^̫[o==3-3Vywqq5w b)>Մ (0زY0P@t#t+s*@{VYe?O?}<wɬ`.{&6/KP"Gȑz (Ȯ_NA7xce y_& Y>P@P@$`<*CQ`8fks=$O2$/gc-yZP@P`X=5ga ,G}GP@P@P@Gyxʒ* ( ( CȹSP@P@P`x, ( ( (@?>P@P@P@Gyxʒ* ( ( CȹSP@P@P`x, k]LK ( (дM (N;K.$x*N=;'|g?'xֺ袋Bq. $^ KM* ԔT`z+bK֓2}o>?^bj.U,d\ (0FCQMRN`ܸqŰyJُcǎ {>ꨣFP^ ?<|^#;K8rͳ6ۘ1cdo86r&P@TyH+b+@nPZ.{ ( (#Iy$զǢxgabUVr)3O~dx&( PWW@W^ 6l& D#EN@_P@K9W}YZ>c&V@P@aF#B=P@P@P@ [ànNn y}=?L0yg 'lalW109۶g}-O=tO>y=mO) ?ڵVoa9e漥lb9'>e=1'p=\ rP@a2WA^|djwq%~ytA!^{6ۄĩ}/[N'[>oBK!׿vq[WN:SNy嗋yo--P@:)> :I$ø-j~鉚Jկ$/d'b{z%h 9k&N?z[ˉ9h{ú{JZk~ҌO:d&kT"Γ& "`EB<DlY a;3/nq]ptnrܺ%_?%3e+ɹ;TSί/ t2SCfzuQk ,N4Zf1ngiE{2ni"1nycfi@ j蛐L狚8i sh8?W_1[UhefqUqS Mxlb%̟o}+wuq%4h68%WW1-R5Q1[gYBd}!{uzyQ^U@> {N?}oq;ԋ j? w w6.fiz !zqc2_l{FZk^}C矟Fb$nf-O!Q~+?1nG""bn;%257q9D@jFYYP;4u<ڇo5/) +5 j>Ɏ0Y8*LF#g& _y%@SpȐK: \a;̡Mrq;aI.̦?)=A=sď(?9sNgO,5ː[HS? |^E;K@QATSx \j0("Mz/`{٣/ˬ35 ;sgwut哥 jSdsKT7dpHS†; i@ I\}'H\Kdk%r& x,]r+L8f#^q)K9+!M%msDLC7ӽ9n0/__qJP7|#A醇_I[%9Ӟe98C.M/8%E)ɨQJN,? 鯛+UW*qIsypt/Y'pCd?}QW*kHnT]4\8ٯݚ ǞV@oUes._ix'`\q43ob뮻.,3ЖMy򪸑*'6tSfa K[%aL5KrLQMM*5W Afbl b!Cg<`Z06K_5~TMZ5WaoPF>өf.)Q\qA\|p<7uKf^oS,]_a琁7~ӽ¸ePR9W=ضr6ti . d$r~)͙X^neܯҩ;3ӱgO3i3{Y o@!ngn;] NS8b][¬KO<'̏+ݛS~CKOD8 [lk溇?@-e4ç^̸G"tW/ /=k?Ā@UqGqxvJdJz$QT='AnQP@/`bcܹrglL@Sx!rvvC3/!SU3o< Dt&؎7EʽS9+dO`@L=}ދEJ9 K:#硫2 O|3vAwֆ҄ș)-2:̍D{l~ܭ斴9sG5s06Maޘ y*i;CN޸˼Dkgs$: ~NIqs76?\n|)Q،_cqȦ^Y$;9?P_|;!}9dW&fb@eB3_)#[#~= )J D;a9z윽f\tdaC܎K4-`h#Zr%ï ޠgff6/K'ianf)49#Xy}- gݱJ}$BQ͇tg^0Uw7,MFdCJ -_D!Voxy8@yn'L/l6Ą|*Ϫ:{f5~=G< ezoXe?O.$^nZP ]9ʜ [ 93JxS.rf|o90Ijg俹] eüGͭ^+q'=XqMQr':жLLΝnx mgos^bawCXfӘ/bEMԸ)lhBDŽfDIIMY8.Y+)7F*'b2Kf׏fʼPԚ9l!43nkݑ'0`Zo-ge! ̫װy7,vG2𔁙%?q^iƐō(UvkcoEfk2-13o[la<%a;D71 ,m҉7[NqakAiE fẍs[8[liXΆ&23  ^=u; ? ’gA0l?ŗ|u U {"Ohm>m6ED`eV; L{ !a29z,~5**8ld#nT@\y+ @<o@_E ]9Dk 0Y|hc q` B\$A-!OL,0Aю}H=sv&}J4,jCr? W2eI4z1=I<4 gۯZ&i^s 7<$u|WUV0Ңԓ~]%)~{388 88%=U0rZ{]D9-aOL'Ɓ8t7g ^P % FS=Y/bux%~"7_3DD5; J6LЪuj -Pʌٹwk7KuJ, _% J~ ;9,KI"Ҧ%^f_ve<`9d40c-H#VwFSqয়~zX!p!&/pj&+S'OftҎ;zAE␙)g0zXK03^R| ? tq;%hKYKXuV[lVa>c8סH6!H3_IzlJ)sFA@uAPq  s~2aK'pIQ 'X/{_ ,㿟T+KSIiP@ O> .I$ø>]qB-3c 9CfVJ<}{^x*W_}uҠ͝VPfni i_y}Tn* 7vaS$x7U1[Ⓒ/˔:(r_ {|tWkd\ä@.s8͖-~)^~p[uXӄ\ϋ / BS7&/F Xyj8,xGMB RLW,!].+؋R`G3 lB j(FTlڥi{l(P Wlח^z)-q6餓Z70Ɣ08-$F\Vdz븵Q1[tNu;:rͫw0ZD8?wK-&gfVc҃a{+9)IxS1+;Cx9Nӛn饗&, K<˙# C\M)Kߓ{|8ߘ.ZGH]w5zv yhed\$~P5wo;7OP;R@@Wr7P J2W/.Hq땖1wrZ/sn9lN+etm%.毷_6^҈~c-P T6g)I6d>ڜI< 3K0^ζ9w21YD5@=Zn㍄tېÖD'^tw5͛ Wznq7vZ%^zѡ{qm.I@,ksނ@7Z((@7dZ&rY͹W矟wqzdq,M2Y)\}!O|q;\FCtܖSdʾB*_yO5̎kxV毝]ؽSΥa2O+GDuA=faYs=7xTǫzi1b}QG̹ +jk_\}mXʢʨzu (@WGE7p.O#% KMk;bʮE#aZFg'}ʘz7(ieIu_|v)m}t!y>҄oNI6UN:U>#W]ujo<{ͮՃuJ0LQ.Ro7E-) }r7,UyQ* tVڝtk ( ( (#M6V ( /+H,ٝڬQ@襀s/ݗ ( TASSnG裀P@P@P@@6!$ (=;{Gw (0F΃\;MP@#0zؽ* Z, ( ( (9LUXP@P@P@0rjP ( ( (#`<0UaAP@P@P@Ry B) ( ( TQ@P@P@H#灬  ( ( (00FSDP@P@P` Z, ( ( (9LUXP@P@P@0rjP ( ( (#`<0UaAP@P@P@Ry B) ( ( TQ@P@P@H#灬  ( ( (00 LI,#V` 7|;vb-6b[oV[n=ܳtk ( (#[ydׯG7W_}[oe2 I!r);A ( (0G|xI't& ⋴oeGuԨQW ( ( (.`ne$)b]w%[n9f̘ua?> P@P@0rn̍;n7g4B -Df4L438w-,_O}S~xZ31묳\BP@P@ 9דqygu{{>jBnkMtMZk5P@P@h([,xxY_וW^<;w]GP@P@蓀s+8x G?}10Ubc=fm6o?1GaP@P@Ps Ï餓N9B*7/ל#<Ӳr-,zg 7S>K)@ફ?9|]aN>Մ ( (%;*.sv8s=\ܼmh07n6l5k?⊧z\sU3[q!n?|P5[BS>{dsl?~'Cf I䓟d/*wIDATɄ ( (C'8硫a-p1W\Aj6]wU%?>zas\7+nH;vI.r_|9=ܹ/kh' ױ~4sOsk PܲKP@P@m! @z0W[q[k.g^uUaĥrK1l&SOͬo}\O2?Ű9˰K}!3?O/S}FZi]KP@P@ cpwoZO34ӄN05ׁ;nfQ%x'qcr.O-3AwxZL0btΤTYP@P`nwq dQeq6hZ(O 8CXkIs Fnzs9O:N_9/雍'N_+LLEƨ魶j:_{{zpBP@P@ۜKpz+|22SIb;c>fz;펷9?9of 醉=ϼ]aΐ/ 2xig?&0݋ ( (FΉP]F̧;ߦf!tQ5{RY_}ܜNa8}kOs,l!0\hDq]o7|)5^33ů.O}/@S5 ( (=0ruw4Ӑw*l^eU.'\8x[r) )ُ?xzE[b)"N[J+,RwuW͜-/{Z.+* ( (m#n Y|9m)4_gyKa3۟c9~R#_-<̝w9^>t _ϡupx/!P@P@P`RF~ 7h#f>37^GyC}=;}饗5WdH6l{n-; {ztn\P@P@7t 63`.묳NּLܾMoa03GQӿ[og?FI^hĮ ( (@o{]63w-`Pt;-ϼ~馛=쳇%%wVM)a33UO[P@P@P=cp"l<~<6#\&kIW_=묳J2Б V_}xG_~z6hW@P@PFν7fze\ps=+[lA #]r%CIN=Ԕ 9?Ȅͦڽ~'^-( ( (m{kw[[ 1l^%v衇2uaܸq}}Wۙ3. ?5\O>, 7o|dB/8{_C:78yï!ѥy\p ;5 ( (p <\5m6+{wd .!^qWXa[b%ް$Nr!o/,@{E ii׻ͼ9*V 2K<;^ː}RN;4:%\Rs.T@P@P`(lsjB^uU+{5{ߣ_JHW_|̘1t,b/Ϭ`a2]CcV0 - tMi l̜| l fGYK/eq[nI'4liidْc>leyx",ԥP@P@P`fze0of;&m|u}ՙ-~jnscK"cR@P@c@+b)}>=(-뮻ꫯ~w ( |#66b(@5Y ( ( (@Ş ( ( (PM#jֻG ( ( (*`*e>P@P@P@j 9W=jP@P@P@T#T)) ( ( TSȹQ+ ( ( 9JOP@P@PFլwZP@P@P U9U| ( ( (0rf{ ( ( (FΩRS@P@P@s5ݣV@P@P@H0rN2 ( ( (@5Y ( ( (@sP@P@P@)`\zP@P@P@RŞ ( ( (PM#jֻG ( ( (*`*e>P@P@P@j 9W=jP@P@P@T#T)) ( ( TSȹQ+ ( ( 9JOP@P@PFլwZP@P@P U9U| ( ( (0rf{ ( ( (FΩRS@P@P@s5ݣV@P@P@H0rN2 ( ( (@5Y ( ( (@sP@P@P@)`\zP@P@P@RŞ ( ( (PM#jֻG ( ( (*`*e>P@P@P@j 9W=jP@P@P@T#T)) ( ( TSȹQ+ ( ( 9JOP@P@PFլwZP@P@P U9U| ( ( (0rf{ ( ( (FΩRS@P@P@s5ݣV@P@P@H0rN2 ( ( (@5Y ( ( (@sP@P@P@)`\zP@P@P@RŞ ( ( (PM#jֻG ( ( (*`*e>P@P@P@j 9W=jP@P@P@T#T)) ( ( TSȹQ+ ( ( 9JOP@P@PFլwZP@P@P U9U| ( ( (0rf{ ( ( (FΩRS@P@P@s5ݣV@P@P@H0rN2 ( ( (@5Y ( ( (@sP@P@P@)`\zP@P@P@RŞ ( ( (PM#jֻG ( ( (*`*e>P@P@P@j 9W=jP@P@P@T#T)) ( ( TSȹQ+ ( ( 9JOP@P@PFլwZP@P@P U9U| ( ( (0rf{ ( ( (FΩRS@P@P@s5ݣV@P@P@H0rN2 ( ( (@5Y ( ( (@sP@P@P@)`\zP@P@P@RŞ ( ( (PM#jֻG ( ( (*`*e>P@P@P@j 9W=jP@P@P@T#T)) ( ( TSȹQ+ ( ( 9JOP@P@PFլwZP@P@P U9U| ( ( (0rf{ ( ( (FΩRS@P@P@s5ݣV@P@P@H0rN2 ( ( (@5Y ( ( (@sP@P@P@)`\zP@P@P@RŞ ( ( (PM#jֻG ( ( (*`*e>P@P@P@j 9W=jP@P@P@T#T)) ( ( TSȹQ+ ( ( 9JOP@P@PFլwZP@P@P U9U| ( ( (0rf{ ( ( (FΩRS@P@P@s5ݣV@P@P@H0rN2 ( ( (@5Y ( ( (@sP@P@P@)`\zP@P@P@RŞ ( ( (PM#jֻG ( ( (*`*e>P@P@P@j 9W=jP@P@P@T#T)) ( ( TSȹQ+ ( ( 9JOP@P@PFլwZP@P@P U9U| ( ( (0rf{ ( ( (FΩRS@P@P@s5ݣV@P@P@H0rN2 ( ( (@5Y ( ( (@sP@P@P@)`\zP@P@P@RŞ ( ( (PM#jֻG ( ( (*`*e>P@P@P@j 9W=jP@P@P@T#T)) ( ( TSȹQ+ ( ( 9JOP@P@PFլwZP@P@P U9U| ( ( (0rf{ ( ( (FΩRS@P@P@s5ݣV@P@P@H0rN2 ( ( (@5Y ( ( (@sP@P@P@)`\zP@P@P@RŞ ( ( (PM#jֻG ( ( (*`*e>P@P@P@j 9W=jP@P@P@T#T)) ( ( TSȹQ+ ( ( 9JOP@P@PFլwZP@P@P U9U| ( ( (0rf{ ( ( (FΩRS@P@P@s5ݣV@P@P@H0rN2 ( ( (@5Y ( ( (@sP@P@P@)`\zP@P@P@RŞ ( ( (PM#jֻG ( ( (*`*e>P@P@P@j 9W=jP@P@P@T#T)) ( ( TSȹQ+ ( ( 9JOP@P@PFլwZP@P@P U9U| ( ( (0rf{ ( ( (FΩRS@P@P@s5ݣV@P@P@H0rN2 ( ( (@5Y ( ( (@sP@P@P@)`\zP@P@P@RŞ ( ( (PM#jֻG ( ( (*`*e>P@P@P@j 9W=jP@P@P@T#T)) ( ( TSȹQ+ ( ( 9JOP@P@PFլwZP@P@P U9U| ( ( (0rf{ ( ( (FΩRS@P@P@s5ݣV@P@P@H0rN2 ( ( (@5Y ( ( (@sP@P@P@)`\zP@P@P@RŞ ( ( (PM#jֻG ( ( (*`*e>P@P@P@j 9W=jP@P@P@T#T)) ( ( TSȹQ+ ( ( 9JOP@P@PFլwZP@P@P U9U| ( ( (0rf{ ( ( (FΩRS@P@P@s5ݣV@P@P@H0rN2 ( ( (@5Y ( ( (@sP@P@P@)`\zP@P@P@RŞ ( ( aXTPh xݵ&@ @Ws~ @ @)97wך @^#@ @]k @x 5 2 1 2@IDATxyU# $PDH*SKKʜk蚇d!5]"s)D.+SʔȐ}>9gQkMy^Z~ @ @  @ @`93 @ @ap @  @ r=@ @3s @ F9 @ @X@ @@,0:܃ @ `93 @ @aj N?:t6lX  0"*@ @#  D'P~& IwdM|ɺkHTj-Y @ :B @j",8 @r M@ @kg@ @N9:+4!@ @&T85~yխ[I&묳NӦM%Ƃ >O?t޽{Ho?oQFjm֭5k%˗j" EÆ 7l31OmsV[y[okS+˥IEٕVZIߍ7޸`k_luڥ{0U)/jW\Q5Fm۶oEQJ+(mCF@| T1~z}ݾ}o믿KeOzHt˖-Zv-^իVZ^9xeq-w\-LVk/͒Qg}ft{=. 4A;31Qv<{-FYp3]wDrbO%gAW(t/꧞zJnQٵ;K!ciM`Qq͍"haSN>d sq̙vhj&[-#l}!*_*}4@Ƽ[ǃ)}hȐ!A͌)'O*t\~I%zBF{Y}}7\Ɔ՘Qm=#Vhjɒ% t?nݺce?O+-' Yo+9nZ|s6C~ zRСäI|6|87V{ f q箼ʖQhРq2U02B!@ 9i!e@YQzl2[Z{etqdq+gرsjȑ#'KR2 2:w,{&]/q}gCttK N=TjͻKG)YK]v՚|\E ѱ[/n6eK)^HznDw$X,1xMYt{yEMQ.#{AQ (J@% Sfܹs-q5הoydJ??x:z|iӶb /E˿l2ɾ +MN+:u-py=cDߥ6vj wqӵ[0_}mIt>矗+]'pw~lL_Ư*o|UeԻNR\A+}%c|dMn;L5IyA{ ru]M9iᨣ?~բE ]/[ /F,9H+;J[OZ~wnjco%4{oM6mxE3ja)u$n27tO4EuKc+Q\L{m˃֪P.n!@ T8- /k3dVt+r5.Y+,]/?۰N:I˿=JI m6^pHbѢEZ]Mv֤vIbUш#} VԼKYndA &,w5=9QocǺ5꽃uۦfܧ{иqcYt>].\pnԌ>7aA 2E(86\־e^'h^J^l![I '>  B [CZ1VniОεQ3CDnj}3|뭷Z:*:eJ]y啮[^1,Mr?SB8ȳmmyh,LeJNrݻU/2*Kq[&h]T m-/ݠ3ԉ>7 嬽nv;?Rϋm!C rN`T@ *5#j no3zFk0CDAK֨e ٚ*A![s%:rp٬2V1X6]/젎OX,z` >mIPzk 긯T* ZF:NI[C󽥖(ecqG©O.T =j(lv70l0w:ͥ l}:!ꎭJR;e [lrFA ~ZS֪ۥgDX+>]n͍)mq%꫗sTRs4Wr!ގP $Gaɱd@l6h#EW838C>2H3|G*X, e}We`Wgy:)Vu}y7o.olϟopM7'k.է]扨1{DYVn:<ޏ(hvk6KMB֙[je2ee^Bi憚>Ejs%go*[nYgB}wwfEk￿*if MM+Gnf)&(V]WmT(VyM C }L뮻_^'aیՑ@!y!pgedb%P9EZl֬(g̘O)/vdU':nRtzIꫯvW(|eC ٭[~)0Ӌ )}s]?|}6![yV G # qY2;# c2/mɖ X.,X@CrVgyg+}kty#[A\Y2M3DhРٳsE(k]v zꝯU3}eĉdύ¦7ܘ!H[=z;CxٖBx @KoQRI@{Ǐ- O%C=47l0"ӵL-T֮HZS{&Yddڲ}EuQ6l3[BrZX~GkFR |yu)x7rs=QJV^-P^Kr,%߉a}(hY/&l?[.'R9_|ft@@s )@й>PXz%hRruĂr"}xb[h!S-SL\Y.{geyj5Xr."-V uGYr3f:mv-gwpmfo޼|./]Ƞնp9#.ek'Itԗa1~M7uMV.yh˲57,=PDJDЗkT+,Ɨ d#PK@jĠsU jQkZHT²2ϟf+$Nɒy֭m8@YJC[kh G֦L#Oe (^.(D>z-^ot{D.:Lޚzâmv+Yh4(䳐Q?t _GM/DpOi~ӧkӸ6뻩~k* ,g.!@ 62\eK{iPV_YAHn>C ,~)̵%80[`jA @K5@ 2dر׬o];(}G۞O?1cK/$zUW]sϵK Rs/+cTB @!uS=fΜ{޼yѥ`L۽վ}{ 0F8(4 Ho2§j@)#SvLҽ{`3:yҤI:(O  @H֜S4X4@ O>[o5z;?nݺ}ZtPI`umݺwBB!@ Ej4EES!T_~e j?jYGڵ)@@H2xꩧ&L|2!@juݻw*Uo: )& YR@@h sFB 6D %VK_)5B Pc QcC˙9b8ixh: @ xHdCpb-tRf@ԩSg͚Ue;@%~|)Skqrň#&Nz& s"B)&o7. ( yWl66m4ƞ16WTrx7Ǻۿ &/O @(-K˛ @IXoj_]ֽ{wdO>_}UÆ - lXsFt@@o{fΜy7oׁڵkO;\ph| \B sF,$BRL`-K?O?=~C9dUWuӑ!@'v8B ˗+O?VZi%p Σ9㾽`>@-Yk\̸)A[EBvlԨ:묣]͚5+}N65Uߊ'|Rn]nf*Q)q@PNQ~We +ʶmJC%T/GfЪU_±/jbS,y!@5@k b\&MqYtrg뮖he]?h5QٱcGSfm[RfF%\'^{OS$]@)%p1؄\^iUvU"tAӾ 2$${kn^׻RnOvE,g֥h@ ljnrs=K2ؖqƌ=%fvɒ%n9]sYbU#1w)zbРA0_y-1~*cW/bg eGVrKמ{[{$譜MrR2v!pzow!` ީu`RV_^z%2eJ|u*^'䛱4bG!믿~-&kn朚0r~LdtuY&/=(4X:-5r].]TfE]y$D/ީGq׮]n4 _$%\/K[nw:uh{6)@@NxkDB )[~:d-61/pԩc5>Hcƌ1L{=mڴ6mxjm?=u|']"|y=c E+l;XM<֪믯zIe˖y:Z;裟yy2| 'x*x-iMoUVy뭷z)l5:p-d4Q !۬M7Tnrz^y30{オjղ\y ыwwekzag+$9iAӎ+BW^yki &P5n@½dh^Rɍ7#~@2p@jjA X뭭SZ̪N:I =6@Z(IxkJVS^\[Sʺ -)y*}WE#FpCUP|jer(3$cO Htm䭭㨣25O;vlPS)9{=UTً~[o\&3D&v H y#c!#B| R!dfܳ*OE-!_-yҍ^C[!EuLP`CKGxЊ,G`^Jgq>i??[iu뭷v [Kd i1͵r5rB\=ZΨ܀&! @nv09|c"H^S=K>)6 5he $G y#J)4XΕ6"'eW=bڤ(yT󇪜(E- _VNfeQ?J -X-57#Yv*J&lb %<9N e`,_YٵEGTJBRΐ.3j4uS֑])y䑕f6GR/$]7aagqsd{qݼys9xr?~N|B4mpڙyt؅^)ϙ3G}g2xz.h^{%OA_y߾[g' `9'j2Eʷea#.Cr=0C4󽥰ۧvZJ/($6kvw[b6o߾f9K'rV`lnH6[t4iy4i";Es^sBQ?^3Y0'xbK@JFoJV%N9ih6~vm׬Y$J.xAھT0sm6`[ ZL2|@Káh«S!9\w7!zNu_u@쳏k6+1Sʃe@@Xs.]fԢ\v\~9dvuאoOɕ`ʖβ'J!\)/Y`[lS|< AD::X┐-Rv9/i^ Yыq{Mr&R q߭nI_}\B 4, |:{Ե>~4$L!j QڮX+kXΆ' ?흪dWuRf9aAK+ܔWK!֢Ep]Wx-SNK8#r!75@%vx)<VYe<1cƸDio_k%W:!V/(6w~2U!߷?> ыwgk8mڴ>tt>tq@@rcK$]//֥ Zo}LXu<,-o)J\|ߕD)?^J}Q^cx9 I^S=[/N?[nE¯ƍv;+]"@ PX%L!ɊCnm|>eʔNs"vӦM>[ڵ+qE,H%owkÆ sf)BȀV%|D몍6(`%D/ީ;:cK/ni_l7@@*;>S~"=ɱlKv7NGףȑ# Z^MBWs.wק7Cr^zӷ8/Y'D/ީгgOK>~a\B ,RlE>+I.[,Jir)^.tQGU@%j 駟x5/kΝݻ֭[뮻\5M&'D/ީk{xRGA[x"ۯ{@@rN-%W6mX.]zme0qD۵k(ƶTԶnk鬳β?sLAn9W%/(\p1t ыw6iꫯv5? m2 @ 9Xɱ"0`7^믿P(ķ&W/]d_}՜yAT¬:])cI&Ǿҏ=XjfTx_nY!C `9'ǖ>l{ァM?уEZjeݓl_9%RnѣGSiz[{gp\reQ\O<.qYߑ޽{!ʊꫯ~ieD!!zN}V|'K@"XBZp cw2J*<9]WmHdY%d*_|z"'ܮ];kkcǎt8scj۶$-$7"fN }Q_um땎^>xzF[~G~AMR @bIQUN@!ٿPwQO;찃VDurҬYFbå/"tN:tɸ^zRӞŽr(/(vwYPK,Qaνwa׺K/3̙3wStqY/>C-;뛲{(TX~skꫯtKo/XQhvxzT3f&sЄ @ _XCF㨞8 s?y֫U5mߵ\ZǻhPLo!bEclXza!S6NB h8UDh+'dѣǿ J^S= vW[v)̽[o۷β2@%hR駟~=(mjZZ+ QeÆ CRz+^P:[+CAuYG˕%AK,耦CNZ@K=eY-kxz V˖-},l|!@r)V? nں,^6v-2XS~ /PgH~v+BD3=3%̃ vߒдp2{es;Xc+.hkuP;#&S't]"@ /ZfoVzz9#F e:>w\T_|jֺuklժUݺu¤b+Nl -SAQF7|m{eBaUAO}ӡܮx(#Jx(cϙ(Б>EQ32 J.([3ȅj8hyY mTӔ@@+rA @*k?D4@ 7.:WQ@E˹\@q5hq@Ho2§j@ @H֜S0H4@ ̘15R @dXΕ<: @yo߾<S+ @HxkW(@ @X34 @*sE  @ !\1CAC @ @" `9W(@ @X34 @*sE  @ !\1CAC @ @" `9W(@ @X34 @*sE  @ !\1CAC @ @" `9W(@ @X34 @*sE  @ !PbZBC PS<" @H#qkܐWkg/@ @.#|.@:u- @ 2="BF˹FFw5t ٣e$vSuwON0aŖE~@ Ve6# w j&\ͣ[?` M!@ PFxk>UC @@ `9`h" @ sS5 @ s &B @@ `9>UC @@ `9`h" @ sS5 @ s &B @@ `9>UC @@ `9`h" @ sS5 @ s &B @@ `9>UC @@ `9`h" @ sS5 @ s &B @@ `9>UC @@ `9`h" @ sS5 @ s &B @@ `9>UC @@ `9`h" @ sS5 @ s &B @@ `9>UC @@ `9`h" @ sS5 @ s &B @@ `9>UC @@ `9`h" @ sS5 @ s &B @@ `9>UC @@ `9`h" @ sS5 @ s &B @@ `9>UC @@ `9`h" @ sS5 @ s &B @@ `9>UC @@ `9`h" @ sS5 @ s &B @@ `9>UC @@ `9`h" @ sS5 @ s &B @@ `9>UC @@ `9`h" @ sS5 @ s &B @@ `9>UC @@ NAi" @ѣz!/cǎsçLګWRA{K3R5;!@@ x7ǍWv+V]ӦM㪷Ľr#@,gf ? |CaÆ5h.C_ŃK @r.!%@C`ҥ#G{XFǗA$@" @s0݃ @ " `9  @ P| @ I˹Hd @ *'@l*`J&o(>䓕VZijذoܬYZ|_O?Tl6o޼vd|MFYg֭[#P}@uݽ҄o(i:խ[Wsi@IDAT6d,90%!cK_^}UZs~W\wu5۶m+9J@TO%C@ Q:@ Ȱo/"Zjuرo߾rH&M S&M4zq^) K.gy殻껥.LUi\;T\W;wUW]#̛7M~'xbzw-emoKY#חW 'Nkx J9K`9ԺbAΞ=+|%\sw߽xb_z{rh.uY9Lpv)fͺǏ_j #}57h#߭b.BTfPJ?Mx ܅ 2C8clHN{whuY(F6iC\9TTH9vCzD8dS&Oksꫯ]we͜9rUW] +)Ov%z,`SD%q!;1c u}jQ%KV3LqqpߧO_b@;hР_UʖQqzҘz:=qM[ns={U PB%?﮻5?k׮Z QӦցc^zvmʔ)RwGq슯:giZ,Uk؞SS^ qcQiFIt4չsg{X.#SbHB,̾tR]tw$.Go^@IoZ$pQGɱ&l3ݺukڴk-G^RxFh=Yjir6*SN2[o=- ~G1c̲ҳ{=mڴ6mxEiX;3=Y[lԽޫ.$.Gr5e]izÆ K@hN%v/ cǺ-{l-YkZvΨZAoܸڃ .8p[:"W^nP- d:h"Ӻ:.]7?[;|I'i>`XRE"[piG~#1bJ$w[(Ôom3Y[,J,-rrƔ>|xxfRX頾ITׇモ jY7XftI=dM4 ?x@_mU=m\+\K9+x&g9>l mu7>Dzeknec1Ayԩ9 g;\EBx ^9D T?o: bV7QåkڞISè>Rѧm% %eEZѣnUrCp5JOǽT*g,˱#- "+k;tpPȔa* "ov[2;5\ ײ]BT鈜K;>-^{d T&"U*T==z*ކfs+DniUVv)c] (B|\R MJqI҃uGyRrbGZD͛7n xK?~PȔa*"_@vmK݃ =9s{;)>ճuA[Bd$SwYV P^XO)dlCzxڹ6bV;Ov"nu yK{MGK' }5Y:!Byviʉ==v%@ Q8֢L9L%`)ФI5.V0YYdҼM-[5^Q>29|)^Ƌ4tbvL>L1]55~q›xzG=a„M7ݤU,@@ BX-@UotV]9Ct>4Xt\'Zir6lۻfU!d 7ɲ*,=vA0 pȷEh"tbGBT43;udzpG,[R @ ES4X4'p[{wNСÀ.@h:^… [n^7=9yn^]}{ 7ɂŤĎ4r\yÇ*9uZv_9ABb!8pi>` T8+|hwܡ#jte֑-$;Yaܻ!oKkS!I҂Wٍc:W=՗4QyƎ4|r>LU!㛯I`np,اz^~^z^s5:^,vv϶~e$*kΕ9. F@[bҢ7ިGIVv)٬BVYeMZi>[Ƃk ,ӷ{Se]t/7cGZDЕ2=|C8V/oBT5ۻ1٬K}ncj϶X  @RFB cSGɃqm).O?iuȑVZE^e649ٮjzr\BHQaa+'߾薳JN]SgϞ>}}=MdIA| J&\ɣC P=l:(fy,KPqD -? mA5_4uR(w룎:ʧҍ-O? ڵ%tٽ,;CTT׭[(@Us5rBbƻ-/ŋl~ڮb  P֮y:Ug5[Ozmr6A!5)W6m,ҥKo6 &Nhwv6}ZBuYv"9c Z9vՇ./*9(B~D2MSy9Y$.n !ꫯvQm2 '\D P э jՙgnHk_ Ϣbx}M.@{Ef9˹+ݵ:($BXUi!* xUry3g dҤIA{͙=!tO=v͔S0dD '\D P Zl&yY[OP4ݟ٧>{=mZ-'(*-ZתU+%MfʱK9dv)qO\r%eV8BHӅ(;RwBy_8SX}u"]FBTOG+`r˓O>i P+ythLvYg;.]A0 ;J _}Zp -]j='riuuVx0L2~'^zǎTt4(KÍ &+m۶A2Ď4E|(EwM$Yg2eʔ]wնJG H]S=#`zst?#&) PiVi#B{ P􄭃iow}k9~,N}ƍwyjgy?^{iXի%*ėp]_;azԨQ !fjmE]d5.`!:CU[=zjlcW e%KdweС믯E9EG{g̙c%R rHS(wR!J?Y_=C맰[k^r^9ɝݣl(tBT5;R1cx>Z|-@'9L_.ڌ&d]ءA)r}إ8ydS3a {Q\TJp7hc=*;xohQȓ߲ 4([C_0"ۧOl++09=zhDƖDE%1Nֱ^G *N9@`ZX~Gsj+yשSR8(%KY WHlذaVfʹ֭Eڵs{:ZSZS9#M |>!K (NsɖEL^s>T>Ճ-Ϙ"_ >A@`9WpT3͛wZr~OX_ZBǎS n/7tSKt咇ech½qo_x:Gʲ:`*=̦/YvϞ=}+2^`*0]*8Dwyk̲+./zT7%!tOR4(1e}I'% T ZZ fѤ <n[{ĈyeG%&pY2 Z/RQ*fUkiӦ[ۏ{mv+0w\ET:Z_nZ/[jUn݌'fYj•5jԨqj=򏽺;CT(T g>} (0 DV/L\ }  "X)MrΊ @&Um@ @@ϦrN `:++2s\EQN%`nT(@2XU6t)tn\]%E\$+F ̀ j"v5&} @ ?SJ P3f(A-TF̍4m '\D d&о}7H5~ 'vL) @s5&} @ `9ϔ!@ @ϹF&婧0akb3 @"PN޽{w=c?G=i$)1nݺHK9cG"G @% pUW=onSFf 2 @.%mꊙVc. @@vٞ=-Zd^ !\5CY;vMu @(lݺuFL % P֮qb-t@ /SΚ5+Ν;Z/yg. .X/Zfz @ sZεkӧwc9L\xkW2@ {ュSLYd]"@U@˹ .@ @Ϟ=ի5⧟~?~|D@cIa @5@]#1iT-,Z:@ PJĉ.e s\$) @Fc=V\qEe&MTqyT,Oz@ P&5qr s "] @>믿VDh P4,R @~'^{  vsC T-[mö@@ `9}i? @@p+h`h #\?rC @!Zٳ@Z `9uh7 @@h׮]-a,; sC Tw˹ↇA Xa# @p-3f,X "@j`9fh( @@*tyֲ>#&#@)%ҁ @Jv}m( ^X;Z@ P\)S,YBJ hqB @ ,__KX'UA@zY^=ğ~iqNY@ `99BDvڼys=li\IA`{ jD#t, R޽{wk ۆ)%P;+rn \V8-[m7)m, 2lFt@ oլ%2 TiM_ `9ѧ @p-gEpw$[1C[;VV?ͫ[n&MYgMJ(1 |~Zkս{uBO}g|~<٬Y,oJ%|h4lp6+lgŋ̙ټyz5ֈؒ"բ믿i!]FmJ+_Q3| Kaѩ9bfhh~jblƱL9(\Hhk¿,b*^7};, MRQ UlᆚٚWʟ٘1@vZh?^`ii<$|NcDo:O:ѰBo毿:ؑK/TƤ㬛KGӻ?x^jժ3\&ˮ>gۭd5X"$&>֌YfyjT"+;V/]]>:2|/c1c뮳fHe`ejeV{{ - ݒ` A;EZ:(nI}vekN.rv eg𲁏>5\z a6w\%?_W?>e]Օw(F1zꩧ#`AJ{;K ONۊѣGg+ evrv^r[HD4"ً8+Ck8OKJM]H.}ǵƼ[Aw!CB&OUivWźO?1=!|=>Ϝ9ӭ4(ƶ>f|L75 jՒ%K)}Qn\AYg2ݕ얓\ GyD+֒l_VJF`/P!EN?2'ܺ-XkC9$RV~m_]Gr 3ׯɲ}Y1zԡCRtЫxWviֲ:WxK5iҤIn-1Yz9qMp,deDLtn>,|}Es=~7#РhhbQ3ϸj dK!"svǐ!F@ϦZyǽe˖Ʉ q/oL=%qʌ9#dj]+\Swcǎ-:eѯ_?Yˌܹs ӧOWQe*9\ZfA#_~exu0` 'nLl5.T67]K]v*X蜿  $F*L~og6K!ʺ /j9Q_|0\ͻ&nSLQGC/7 -rz f lR{Ah4L,\ #sV 2]Oe@I@z+i]So*3@ڼ,OG6m[lhC>.˹w|UN((wy=X0MG;na [NhzVe{:PyX2lVfYZVϷzKN*2uVe!X ZuzҥK-Ek#lvm'#^OAn)+D+P@nꮦ[׆W^yEfmkTL˔hzr,ϪHH;ͭp@ij;7,#ejQZo\|Gaüik~z^7aB<_}hiӦZ5}a9# +tAvLTek+*!1cK.4)^~$kFa5jW_Z4e)'~KݪCdzݪ(^( ^OwV=ʿA &d vjO={ꥉz-ԼKgeb~{k;֝EzAE`G"-Ҽ#Iyw[?p&vy曎 ]|S֥|]}M͙뚫iPA)R7ֻ… e&Y$h fm=|C% Um_!N(X| ^;`@&K= }VQpJ^_ Ⱥ,Aw nRgyu !kULA* Ϲ54(eݘݚ1c[Zk63Sc+j g,[oulSvW^yk֫W/h K3hHr)!(\6CKܾx'pN,!-n%d; {ζEW:묳zޘjp5>e.=Hcs=Էo߂!# Po2 $Z)MԱ.]zKS…݊EPcv6cJCzO.=\7.GBRF1+V r[=Jꋭ VR2oZhw-}k?nl*j[]2-]ۛM(};16Zy\rIHtKk}X)59 'ww &XHf9%xrm<ʲ,=P` ]\QXo+uʄ2~߭ ,i4VfD֠[:Bܷ]'N֏ (@ iXI*!pV l}Y( Oƞ <*5L+W\q],=3MAs.B㠂-=,ᦛnB/E&ݻdvp5F'9JCLJ%OmgǷT׻$R9Z okF9.[^w5~QriYN#]uZ/\Nڦ}g~Lr&&hIk^le{!RqNTi4 ߨmsynKJ&>*MIڞS0(~"_%kOW$m:Ix7g{}SRJ9GKM@&O#y}6=G n $+3LIR!ٍTy^b}Fu}K=y֢E a-&1LewT S@u:\3"6^ʃZ2Zڵ1cj%-,fi:W_In:MK 58E9ƫ7#]JyCVZJSQ=Kx_N5@ଢ଼$nX1uN7ZpO.vn|\})[ˣ;jf,AK.{Q-cb&M26=B U~LjJ{#张6xMCXl֦z78Vx9llI)JF-U KOzåߴbf2Xp]uU첋]߃M*e[p/hzD Q֦.n۶5mC'\cD +bi=M#iÍJk\J- 7|:sF5wX}j_u͙9Jq= ~~a[^ue~!C7R_\ֵA.EYwCFJI˜ϫS9})vpK:Fn@)֎N84HKvQ{ƶ,QC 0vXx.Y]a˹ǚUDI݁Kd_ KrLU<-yˢwR6mZ^k|n^-]jݫFN *S\iASNZqc%ѕk]i[{>zᦩ&&wekžW`rP{2糡+,]/)܌Zxw/ ]Gt={z˳U 8jڣk{ud^ls|s659}֎w&vp'YZhjWoW (Ce!\TZ=ެN3R&m:9Ev>|k>^-%^~QY>9 ^sJ7K_}Ud -j zC*V_kz8n4ꫵW7i'Aq6mj_VP:]cgjG&¡hHI? h M^E nlm{ƛ 'ٍ*BGqVW3Kk׮[`-;c9̙@SGo  \ZXiOpIĂBvˍ9l=ۚtH(ntn#ZHv 6mXn`pK,Pw+T}|9YlҘ^i7ٺ9^tmUqSYuYqE]1b@Ŭ,?#欘s,Y`bNg ittspT>uY6r-[SxBe[yDN-_^=[Ck!6 rlQg*<ݢm`ENns$9S!@$J}هSk8ҍ4>)'ΙM!Kغ ]r% Os}俤MG?HSo?iRט%%lgQS ' ps1LQ/??OLf̘0Bthԫ: ly,`v/9lWkB@䁀$|8mjXyAf CR,+`Yt 6ȣ_/&D# ɹk6hv܎ΐcӛVl">JZaz5vm+Va6I,ᆍlo~j*`:4 zy!fof$1'4Хi=~Fi8 TCjdx6d?C !X`8p-!8E*W77~xᏍ }A6%Ѭ=g{Y>4o fYtQwj!Q5omPEF@sWGc+ 4#FsG##p3"g~_X`uu] tiYj"6{%XİW?/`90#PT<@uƄ-*1WJuYo83@p3MsRձy$O&r)p Paò5ux#NcC>O9<'|rN,x&O8Yn}樂 5%-@>n,‘GI}2~Yӷk6C:SNx5\#G4xel1Sׯ|ȪޑUa̬"1؄,j88 C->{05(@YZB (4ǂ`oeCq y8!r"=~=%)_OY,v觟~j7`5_!ZϹʅ@|G3D9=IɃ;t9}pPhҨ:1Fΐbe= I׳gOB-R[n'Wi׮]=p4mŒ&4 "+M=j$8x+En$KԀk*B_AѰa 5܉߅C&M2 )j[,C}Nwf  a~1>Gs8 o lpɛ"FDSd/BkHk*NF Dgs/5.6C~vS ApS/ coNpеG-3ohK?<;z!2%)Dh^n1GMy+*r$WS{Be~JgZ!  "d!4CyM%Ā9*9T1\4#>/pHPQm~~ZJ3wXqᬍ|m,Y Cfbxf m 刦rlGly @|D9~;vBѣBfd]3t(@] ]$J%\B:^i)! i\Çv#tB^ vGDYK,@mZuB@b"@>Uj,3Qܚ;.@9$9CFB@暄3tsW&Ke8c- 0w:_,Ժ'g59Ŧ Bl?gQ$K/]j0B@d @u]kw&xb[mpw/FxD! (8D>e]y5w!d=#Fa^{-If D}_xjm34Ӑ!CVBGc jgR3 9VJ@IDATc`UiB@x$9{4D !P&/l0nܸ~8[IQHZPm@=dfxə].5B@䄀sV ! ?%eICmvZB@#k\w}wᇬ vD@s;, l[vX9MOZk]wuǏ P`B@ԃ6V>p\Su@~Z;?lղU KOJ-\&MŸz#R7WXB`0{č:kK@I5C!BL5T ~И5T! u"0 ?#4jԨ٦ !-O&B@! CSN> OB!HrnD! B@Gm{8f̘nE!P$9a4! B@Fo߾,{I5(&B@! @!0s&-mB( B@! @[# ~@\pB@! ~ټI8vX!@%B@! ]t֭!mB( B@! lKrֆB@sCB@! h_{틅f. $-#B@!Юt޽s6{ BHrnhB@t~篾JP;rjB@&!ΒV@`e*B@C`wuWٳ8\?[ne„ |N7tn#:$5*{Q0R 8H\pA(?\0Φ! $@B୷9rdR5y嗷vۿq@[CFB k1嗡8p`GB@4I΍\= !?rCrD1/Vp駟wyg"٬ۂl r~G~w}#(0\W^Oh@!3Xm§{Z*k庰rƫ;elt?iE57 j^n0*)`'Xn_ve^)g?9(@Ȗ={_Bcm矟-rm+:POyB dB뮻 W{Gn/~yrJfݿ>+/z뭑5\1  AH*ɗ1`\pM KJε!y뭷Z~f#YYɝwIm #<2l0Bp_|x,vWK|׳ >8sAc-⠃" Z?sa+_efN@R_ZW^y嫯j%=CohY#0AoȑDVcYo"2}}]v٥dodXXcI&brIM\WYe%\~Uׯp,xAƎЭ>;_|_juw_yЭ>ođ )a;1C৔#d!盵3`,I ]s5ZrdNz3|ՍzdM7<і]vYc_©IO#XSTDԉ h͚:M&^|E/nd3n׍Б@ɘG&ֿ%N(7P裏7?1:O97n\F(GFZ +dL md^i" [PG#y8 @n4^!!`reM6Ἤhɰ7|%'0y4j~}#~3/4hF|lݺu=saT"@ɇ9!"?mоeYO.c z|O=zp1nZ|#誫ڽ{wԘ"c`-x1W컬b ; QhZk-t &a6_tzu] 38n'0{۩Is-F}fÄms| ZÒs6{gYfk?W"-A"%1/U$ف&E+_Fd!J`ko6ؾb=h*Lg97V`+KK/c"Q,HV^yec|.k1/7nwi󪫮:v >]'Ь_m lsDﻵ Q ◃Vd2B5RXxO<0<8:o^ iQ~4ш(IiGj/?nwxP?aڍaCP9ӽ@oO>avĈ ?q6J:'~gFrszĒvXzG\QjKW#&2`$Ճ>\@1h-g 3"d0-Q3qȣ q6J2|K0Ȉ Yr. ޓN: ZjaG /q[`k]w6!ŒEI6-"q[!f5olWtkic ]vE;{dD믿HHDAkf3G2^I)+ G$Ugɉ3.%f%*(\'!P< 3B&ɪ* |3A"1<߸%x6Ӕx9Usn3[$aJ٫OwoƼ+̓+4-`  `%=t*lH>?o}M7y/ɜ^),̒u?N>@ Q%baCz4Sn$$<:3,/Y%d/5A"]X{`qYnEفζ|U"! @@"B,dUvquxC9묳Nq|>r&] 偁>$J*J,KP(AP7jJpo6Βj"TJVB,mF % h l#gd[TAfˤU ^;\b;d˰[yu%P8d݄_vi嚢\ [OG?~6^S*yhԆ嶮5F›n+zN-_~ YY.]`7V*(T+9' Ո&6 K]cp2B,0{OL80SD@k!a^m3 z3a|ćޢQ)}ģj0/SҬ$6Jqq YF$܈[Qr!Sd#rL~J s$"a"JGtfQ3RÃ{mrC%ė=}96ƀxI+uP` yN?jLEBOS0/FZ`xc9!08Eh`a&hBN|}aٱl?I@0y`rc'oӵzB# GCHB ֊mR$g"-|RK'i9Kr%oi[_τc[Jt&6jȀ9WCwO689.ʕu?袋DZ͢%fs=\֭ѿz oK^k[FC44=4=4v+^ 1W/ ]oc(&"㷷İG~M|0YDXPp"EglQCR"]<`sW !٣!Z$!+_S_$gLw gCj.NCu }SV^}U+ &ZLI%fvěA5Ͱ,` @xFɻ{R9X`r4I Æ 3Sʱ"B#8ɪK$OǛj{Z<%4fAO"u#oVieUb>4RlN5 @KM=/iE "hجs=ϢIhp*avoG b#V : 2kp^\x)8?+Ԭ\ v.'9#*̯Y}j+o١" +<_R$sYrح&'TIx|HL2?|饗2j{v%bc,7b_B'*Ɯu}6s-vK$ *~< ]D"'&2CDEa ňcYYo8ommhL#o9 ^pRޑPsKtqS#BV~#86 b-9+lՎHc%N!0qS8),#$g;<߬$3mqR/،7iUr`b+lsA@mL nYɒsHŒ3Έ֝NZX*|-4V~TVK4N%l_o`kv=l㈧"2y+5?*|Àf O) o3% MrƮ\`%\24ȿ]3qZkAQiH6ݠ#"?jϖ79rpMĥXl{Q9Y=+I <"4IZk#ʛ[q jT4 m-܂5E Lu+ϖ|c{ϱ9,B>Fzl,1 r{`c=2?c"j"3L˘B ?$9燭Z^d@ Ffm W"DAh j/XFEGY./]H}N],R1~[r@nY'o"s$S@PQUQ@"{IΐqvW_Eyo K9ːl'㌔<2[1oc1Dc9& >?G>/ 6Y5zU'#zBhl-!;o|˜t`hB@4I Y]t4I$3kmږ<(2@Jϑ6GDIp|ZTӧOB#"_iH#,SIk"V?K/&bvd?[b/534kKKc=nF>x`c$g/a|W\&F[ロq" }N)US6 mSY{x",(.Xng Wm6FHrnrh톀$v[q7l5J쮿+89L R3Fݽ{rB޶OL:rjfQMi,kkwa7تFf E2Q웶?rHźF[34qK`آ>㯼=-G`!n;oPVqʉ]Cj1 G_IjȐ!d u &9?X^4ї4nSzS~6^Y>4fYS=B!%g曅#:6;jv 8dFx^r%kBj:xg_ zСVBSN9żX_s5VBaeR4 $p6:<$r!F޸+Y=Cbʄh2~B[@u+sxR&WE%PB 8yvudv>vb%_Io=v1`N#9(?x*A/PTIrv8aXwl. I9`Ba+IY,',;R;wt?ɺZ}tO'8#G榿%RN?1S=+W%GwfOKV=zNQh9 ٘F_+飌M^{LW+|YS#PRxS{7M 9v%p!Yc$_n;L"̶BɘGo#apJ8MX^:묷~1Au=b8,9Y6H2H.>BL9IgKSG3މ#4.P*>f`ޛxy൛fRx}R[yU/]4dL~@,(Z0T*?p%Π! rB@Y"D BNLH+r7x#zit:ubxxqq(``M;p|0 &)] (ke4C$ӏ O[ 'n ,|Cz5oy<?w3-&i3H;8,Hw'3X "SWr:ۛ3~x?;R"V5s/יx%M@)B '^lOj&=.F,H$Qwz a[yavhe ~50ߔ N4>Y|}sO& ;=x`G3Ŀo(9Ij(}&z+7n#4F^{>R1Gʑf6&N2L#p-v\ 6{ ԭ%-iC{ZQΙB$ SN 'bsHP" [s["#2妉OAW2F@FF\l-b) Md9f$ [K>`o@q+ 7p,ݽܓ !=x%)_ObX:{W(ԇe>U5HU9_%B "րL9ǥxr}wڕ,aF9/ 4e?q '@ȣznQnGe(. 4}ʣFQI踤!Zɧ%0.(ziƌ+#b(Q.hmIV)oNJ2#HՋ>1A58U7p2MyߓdO}AX X,qE*rund$[E[mq #ykjmE8TF,\sHl YGxZh!L@i,,D˄J={o|#1!:P|yY!Y81|wヘ6(8 ssD*zwN>d·>"zYCh#331&p[yt,JXdT[! /ixNYv2_8;lsL4}!7FX ! IVVLT;~d'B ے B 'djV! B@䅀7~˫'+H笍 B@(/bHBHC #"YرcBihHrh+! #УGQ B ?ޭ[_=t$VBdm B@! ZozЈ@K! ɹKB@! #%{70B@䇀$UB@! B /w޹sgk]jgBIy6B@! @x$V퍀$^^! Be3?㖝.$碯'B@! J"k>6Z" 9[<՚B@! hSO=nj`۠!2G@s搪A! B@! c=_7cu# ImB@! @B` 7a„5MNSB@sCCB@! U!ЩS_ߪ`۠!E@sx5! B@!P1c~駆v΄@{ ɹ=YB@! w ~:QMK4ID_} ! B@:s9{e`۠!2D@s`)! B@!=o5aRth$9w䄀B@! ~,'M4vX!@&LI+jD>|]w*s54RV[m?GwJ+TM톀\+@ ХKnݺal{A3! 9?lղ[o5r L5==z4BBսګ6T"-USB@ |gB djB@>o%A ! Hwu~|4#@JsN ؄hy/rƐ!Cfe!B޽{Ν?0 ^z閞/ t΅Z F! B@ԈW;+7U (teQ 6`gοCh˵ 9_pa/ vIk~BAHrnF@ኗD䄀\NY! @AXc5f}/28p`AƦaVG@ڭB@! 7SO=njX`۠!G@s! B@!Pc=_bXh}dk4%ND\ߧfLc_|i\9y&>oV^yeΩښ^8q"EYd┽AV[}ws9<̃zVF0ac#Վ-'r9!f-n8 3㏌Q BP@ahзfa篁 @NK.2x SN9eϞ=;qP2tÇz׾Kqnk_D\s5o?J=J3cHdOzFy4TS1zEytW_ϪyO{.c?ѣ[lqA +?W^ySN13.?4%nmG#͊ghD! 2G_~A2ے3Y )|juw_۾Э>o{V U;SnFz+t(euY߇f2{キdˑh(B V7|sQJ+!`[ErBE=裾o?yJqq/ G0;cq;^FZB@4|o3S;DžB@^խHB EN}'{~7SP*V#<C⊜91Ѩ4c~6x< sv 9oȏ=C"1`|Ρu]g%E Zh.A!P45VmhEd݊17 !l?Z?\sͅ +eƎo6wygr*Zg}v6ouPhclL?}ͬx#&u#so_oV3$gyf%d^qDM 6馛@pA/gQn/x\#|Va~ꩧ'pF6\S RB@#@^z=alo&'Z);-gD #+j\fuVό9ΙtvUWtf s0kalMbT">I&aD8#20gMO:$=4|^xa-zk~ڛx|_~O>$8KV[BY4{#is9įg+^Ԉh+oK%ꪫk׮G^tE7x/ymJCP4%XeRK-e%F #!>VR@NC޳U2a)1>Vb +‹?vcI]VU3 )bqqízI}1=؃e6[*yB@C_~Fs?'\U! ks" 'y6Nki`$PE""ZI@lqA"WIHs\@#ιhFYkO Q ̓]πe-Gc@fqr*o38=-0>F0w{Iس#>Ҝd 6Qm-nHa@ QF 0Ea "Pޅ@2^{9O34< +\Χ(MrA+6[sR2dqjmn-ݦ'U6}-0f#VRrM#B@N:aw=Ab-ɹ륱IE^@ 6Rݦ-UX|ō';[,BUl9>L0~Ǎt$v`ܝd'NҲ o N֖+8B8`m1c~駟8H@ aRg3Ɖ\6>}]79#QVz϶`_}Cǧ&DW_f|[޽W\n 2&8 <*bZs m9YB@TDo߾8"6N#A$g!P"T i"]s1M@>_uU+H#:2YyCrR .ߒBJ;x6d%8JfJF9ohv%G`Zh5u'his^za۠!B@U%6EK.Ĭ2U{,_'19=: N<?%{$$7&'XHСC(RKyKvkg狨\NSO=u]v)ǖ@0x?}2zh4Xrq̜S>8YfnEd@8hYtV(L~˅knSLl HeK/t%y'(69OO/9rycf G?I$gAt~G3FhoΪs9s{[(I@IDAT}˱bI{ϗ㩪g}C#F$W$t.֨Ix>=+"ϼPPݹsrs<39'y9H9(ޏ?3 70HݶĖk9T5`! @s졈o?O9r묳.V[m/&c;96~CQmu~j׭nUf~x*XfrD*Z6TSUBtoqޒ;φe($iJ_r%=z XV4luΡlC }׮]mʞ ^[a=;6NIË/*B 3sV*F4Kms\QSB@F"fO)̼#v^'Nw1#I-`(4Ι8d[#^'tuXp-.8p_FaÆ,js&S N+BSĹgycf{ҹ袋N?h{nƀs$BXNhJrME !>4{#s<@s%Pv }s#/>l|+O y4 > 3 R>+k7f$nn+hb o/)*+@r(ʧvUh.+0|KZ4]7'W|8`17l#7Xú+HGrJB@ Mr~.gFWDPyiD,'68Q9I0:zǫ 6ŕW^I~j+?Fjx@zu'"'%ԬB@! MGo[0bte|C#*19i3'oultEy%4!^bǠ3G@:!UB@ HQmE;vB@L_뮻.F. 3iٛ^q%&Vf }JB,fPnc"}V(s6H8r7w ⮻2ykw=/=a?6 % 8P^qBX-DZKCB@! #@.,C}QFj2MpG>}I$1 uQ{qz5EK@p뫔HzPk„ lS_iׂAL$'h'pqgF '6HO͒Q3cǎ5 0`E4rG-AHrne B@! @6`m3ۗ]vitk`ҤIVk!;@ JţF]s5(0˝fĩ*)EbDRZ5x`$IxPtM Ox9\ -W|k1 0ऍ6Ɂn1ƶ*>[5%,_}ՔWs?4{.B@! @#@r{#*D{:+ft "4D"^Jg_ xh ;?Kأ"ExfƉu~7htڎ^r%<)KFJ(1/F&D[vpB2g_7BFa<vG|+ɹȫ ! B@XdEH dFWK ;P,^y啓N: Qy aH ]gdS%<"PO=JZg óC"_]™Q Hvj !P7J| & , :>ja֎/JB@! @GFT6x d #."c1[Db4q  |WWTZ:[mk~)QĽfR"P]t!rxٟhXO?tqQڣ~jnt21 ^}%ƒCԄZQSB@! i@jd0Qd[Nl(1TFnwg̔ӟ/ M/Vx1Y)Q>~8 G@X­qx.BB`-G$8 o񆗜z- էOr2c CZK #uv8vHl-WK *4u!窶}X8J^FΤW\q 6`*+51UՋB@! (ܘѐȷD~ZoqH?'H\1Cx-ŒµGB:F!w9g>jZrrˋ.~wh"lqm2}{M*=%8&?\_0Ò;qLZy$ɹ8k! B@/|&ItLJ$)o_q$s87b 6akScr 'q‚ } 7 9xܿԫj}$*=iN:{9gFpTdMM9Y0SKآ 蒜KB! Ç={jOnsCaos.h`m9FTG)lhytцm4lmc5e! G`ܸq>NUV3] 9zX: Z=ܾwOr)Tmf -M{${x ]wI=sP tMfr`cy 7` PСC3q1<$3>5\cO `490^c$H9s/!ĺ-2aE^M! B@dW8c]~8}{L]5N}n[@G2<6 f  #J $oݵѠAmf9dZhy-ɜ7l3l$B0*3OZGx {+saFB@! !% a|H_i 1 U.pE{^|E Cb""춀\5 5,YT%|qҩSpF'8C ܿ)9PG"ɓC 낫9Bl/c! 3׶p2,xxb2p^x\XFP_~Y:?9axi\uѨB@! @fr h3ԝw޹c1W=w1a~eU5q‚lb-dbֻk_2][2-cb[[h#sYd~wQ*jdQN;i9‚Ӓ @^Gh3ro0&ʼ 5 ~iI2iVdlyD!P_~V[mpr-5Xdl)WYe%GyT~0| !Bm8;,0 ٳ?-Y%?T9Y1-0x%Gؔ`itԩB@xSmI* Un],*9qhnC!WI;8 ݺu[vegqƷ~D)mFvT>,k­YyNGxK\_Bdk9DxJ+/^x̿{7!"z_PyK0 ݻwgX/2{;y70C9Ć,"?X5#+hs8@AtO.҃ 4ף>/aT|NME +i"nDT3t 7E6[W_(2k)3%0i h{۹sgtH89nvV6Ła-۹5! @#hFSɨx=Zpn)fU1?d7h!Đ?mt*DAKi[w|wرc`%@n%F:H쳏T$ i*܊U3dƌcjAM0?C~93#8oUD~+x'Zw'pgVFxG%8f%~K'B/*Im4Xr%Qz!-֐!Cd%cAӒgfGHY%Ihd%\|Żk-}RUyg;+OO9|0mv +Hf18!%v66,7LA! @/9T;OKD>#vJ8*u$pH$!Qn]gTVHgSg'֘ %5\sm9cc1Z^?Dx{fH‡ꪫ&Ol stM#ϯ $y$1`M6Y2+i, :B@DZ0aJr6(@Xq9cF06$K¢B!P9W`b_x>#S;zNJzEl""Lm}v@p1駟P%˷W<'v@<. =ƬB pN{K#A?ٛo9PoE@s_B4LcxId́ ?`IlDJ;^1ÒL _jCB2m2ѿ%P}ᇭ^zLxs"Ew! @xY <VmRrk!ə5k 3 Ǟ-Ver~ DT;3d}i_,8W THgmq;\,L-! @m`|Ir F$gBx<**c%زO oYvaCD̪۬qAҥ;D~"*Ӹ/MOL4)=sVՎB@T, 'B =N8H _:(WkaëJҮ` CD~VN~pnh,ZB@!P?To߾.?$ ZI-||GF ygj*W_@ُjioPq+) CS$`I3e! @|WO<5+SmBYk * |ܹi:!wfU ;TUb#<|_uUӌ3³"DJp, B@8#G4fa׏D\\bC$L"_c8?cE3`WpőG| UC--n[qaLPB@T{ 7ԩS! v搪A!-C[a9*r*8FjS¼ZPϫ5fH ! ~T۠!A@s=詮 o^{m#kT>6'٧VkaCKf,`&d AY./'TQ~d>T5(CHv@]+bs94Kta:묳k~q>ꨣl W_mOoV1͔D~؄B ~{ךA!Bԉ$:Tu!/'|u0ydbcJĥ^z'K :0w >$[ f8J]vꠃ@*Z_O9Dh+>5\c 0D~4~.Q!ж<_~m &.E@sx5!11^{mk^[y_}U+ '> ^Q pf=:Cwn3_~ĈVb~8SsGѭ[7 D~b[w h>3+Ę1cPXjp57kH~YB@\bkwj\J>k*guֺ_ sٳ'>rsO?7noF!0/Ҫsv&7޸嗡(rK좙J+ s /<#ǏwUիW9 |~zꩈ<Dc\| 7m2 uSOb3!"%gj o7npkBVXaD,~|P߯EnB1$go=M`\v!Ȯ|衇b,wQU2il뭷f̡ H(dwq2,SaҰ)#! @;#I  I!P?֮C rG\>l+43c"gk1,$BNgyF}gNf~vڕL~+i.,͝zB@^ጕr-@cՋfoK`Tfmw~뭷vqǒ ^Hc9橧_ҩSAfs=1p K2D Cu'wߍU9V~-٪Ɣ`7.Ь`i֌ԯBMmf29kơA_Zw} VOk-Tm'{iĉ83hy4Z߄v >n9{Dq{N;b£PCѲ^&M?٥KEXG0lKTkB@h 22pũwv+B:shr5t9 3d:?T&0U7`nB@J`d,s1GsݲىMA@M] ! B@,}-+ejK9jkB@#GjniVM! (,q)'\ؕZIέvtYM,BR! G#çs؄@cvcpV/B@! ?uk?{g:γ׳@IpCuDC(jz!PXs.A@L>=m&c/ TUV?ޚ'TP @ Fx1¤*@vjwXWb.;#|rG; kԨQn:uԯ__BTVf*r믿^gu6dnv 4p5˫WVH7|ߪBz뭵ȦUTR>PB&m&6#R`z'Pn\SʭҼӗ]y٥i5*_Swꫯ4s6h#W뭷^:?O?T3MsZ#Ql1b6m>pg曪'[[CEH@f̘a9 ~ I;38w'Uq~ժU3ЪUaÆ(a)0ƠNն;ڃ<@P-oܪ: kE©ޭ,K/|]\&=cȐ!L74a„:j 6zLRXVᬧlݒod+O{Yg5juMgZbEH ղeKkQ.:N:٩Bix=*Ήͅ(;#cva6,Nx}j㎛7o[?|w(OYzM9{xZgӷo_ABTIvK_~%C  PT[HV[VweG+D_m~u]מiBKE-+iۨ~[C7Ƚ,oPAQVԨi?補m齻_f[n=qD_˦+4iY9rn^NkjO7\VKR?)WUrs%PqNXx9fi UZaP?+x5hYs8(aʔ)֢+6nVaT>]ed@ #h 8p ( BY< w?W StzaV^}Qr!T׮]Gb*Lso jΞ=BQ CVҭ駟N:餐.n)}wm}scQՠ˄o7tSDBرc׺^~ EUv!PȩUh!UȎ+q7-WS _.9/ڵsfYr*}Yx -zj͹ZeHrmG&gϞ[l!ۧK~f=حZm*⯿SjJ}jtלu֮5w{_}$BE>+4snر^N_}a]s;)?SvP%E2&ۦGoKyBJ Bn%%r@0. d[)?v2Sf7<'~.F]׳_ק<M_kD=\ynsyȝ;w66meJܥi=չ{gfQjVsnP!{IRsFgɫ\drZ%+l fO?*]!쎈BB۔rP99p A5D/J6OPhb"fW_4)&PٌT쒛x?ثW/bRkj%(.ڧSp/٭M>*d-&ʾg"pKTj>}@aMOm@NgF@ HkJɢ:V~{ϑG%,%AG19((Ya^Y6]$FMWD9 [=8jrFAq_>5mvq*Uiڥɫ*Xg\>rխQ0p@7+ާ^fe5PiLlB&L<+8d|G9trrF5PpߤRFBvWH.&#@DO/KL a<:VDUi<.CV nOVPmViE !1>{JɜKP!7RhݶAnOv7rn2^jym[r]wʣJej&P% m{kx:?63aҾgI^0xP LlEjk]:t(lo-V٢?J8 PzuïJEK5 +.SG am̶_ԴI'k_Aa7r|6l+I2)-WٍzPZ}xG d#z΄jgD9&@v҄t(^zذahm67:Im|l[c R[jm̵%nՖ-VV= ˖-Ӷp#G;Bz,kAY\G>t֨𞳶adffU/4 9ˌxP'vl㕱9# !(E9?<s :Wْ2OA}B% [z]JP]x&gb*c)ԞFi﮸QܵP}[ :^)|o!9]}waӧ\x3 )މ7W󫄧 xgn޼9d *!@v`t l}t6N2E{=?ԦM[n(3ogϞiFHz}%x% 6Y{7+ԩS(BeRDZ4e9fr$ rir/e\^[z44޳'6s8÷l(.LNlY:MpYqѦ@3.@@ V"RA@ N6+U 6OIkζUIg9UQx)Ф, Z{ ^snR螳vYe >VٶlLD97[U/c wb7kkυѣ]uur@0 ÙVM@ONF~4볎l\;PWhٻk4%'g/-Ùj?[Ϊ!DGݵC0 M}.b܌!ł_@IDATo&DٽlG '7;] X}ܷ$QE@6n~()&@&L@@^N;d̶ZܵWbצ`NIYTem=Sk{JBV '\Rg5۳;w69wn{Pj.]z}u%/kN9첢NG"0 ]vRzxΉNNl'g#5qDyv"ZGs,D[Xdr>چUBϹJhhj5IF6ll(V[m?jg}/8ydK.ٵ^:fvzW9OI*3/oAǥ?p:Z'oiENv5+>F[b׊HEdk֭h㨢ԼB%\%V-+쳏{オ{uSi3E+My蝅J{$-7@jK+G_ۺukϜ9S^~9s-HnIˉNb oR_jנ륉>o-:] 4xz T0aҖ1Nuw0@Ju@ Vmb-*?uZ}]֑T=XNxwY+R..t ([' *q/g{\'g{$Xg?k:XJpY;|,-*:z뮻2[sv]&\3I! B7YÆ +cRP ȑ#,e-P+]aX!CtNf[ hn-bGY`SԄ֫3VNM*cv߾}"Qс bjd6BxUG@G輨^oETqpk{J'x]ʙ~MrV=y 6Tv*9c%rhX˞!FJvg1]b,7YO)B[}o%LG]}Ղ)(YXTC=4|fKbm*B-oٳg|[\BțԩScw)xZZڎ.*Z;P4tЪVmuѼyς jZmҤIf6JʰݫM"`yVȯDi@*>J^y{D,wTG)[HBJVFAolrf|2^<.Y'Ɇe˖2 m{yT*moF_ve}^}M0}O2OeE7 =ʵIJ: *!@*N@@>qD١g-,jתlvjaSw}JŤ0Rٶ} CUJl;Jfb՘ < @ H=P J P%֮4 ?|Z M-(nLYΝk9 T-֜?C/Xx;~F@'x\I00+9L<!wY7o^2s &QF{^MD e7"wk׮us( ;p@&̂s&BAj]5iF@٭B.u9%RJҁl@j ̟?ƌf@@`͹ʇʎjTΡI&+V(?OYЊLB=@ $<ΡPL{HsT9Sҁ}HBKl@N \{ڵKq003Q @K,2e TP @\ E@ۘ _n7m;#Nݐa0 Plt/YUf:r&\ΣO߫@:u/^;,ZH[wazU) 0cIM@pC;vXV2A!PrX0 lf c8҅?*#TP @HϹH3 @ʗ /__tR,9sQ FA 7Tm۶:zO_!x)$L @(aۘ1cj < , @(GSN]p[n&#@EBϹH3 @ʔݢEƍ) "&\ăi @e@ .$ah@ 0k֬sZ_ sQ @ wYq͛7/[sJ 3!@J9\#LJs $݀ @HϘ1s6(6kA@ȃ믿>jԨV^}o裏nٲeCHѣM7t}K@9p` @=V\1`֭[ePx#Fxgڴise. wy~W~'{w7_~xKZsr@ inv׮]UtG9?n<$0n8s0N=;^|0vo)o>D[ (%KL2Ś(W#oyz @eI`„ DtR4RC95C(a)5@ݶm[IS(*Dkp`  @@ƌc$TP @h 9` @@i:u… oݺu3(NDk`UΗ_~jRz4h뮻Jί'w} YgM6Dq\mjί~ٲPT{J(V^@ըQCvqǼ7K/^xΜ9_}@ NÆ [hFE:̙3uL iܸ[o-^;?L?$$pϝ;WF{ѡC+G nX([*[dtl O.zי7W^yȐ!=ܢE|dtl=&Mn\O뮻t*Zk6mڨc9nݺV.<+"Ք~yyU_?b϶v| ~vIg}v뭷>#rw} rUW<ۥ#FƍgGkzr pjJ%wq:묳D/XgǎXy<' fcDbј^|x`jng NŒen8Gt̩#o^۔VJ:(< 4@p=.`ʅ~|I;38w'~>}8pkÉ) fW>(g5W]pBUoR5뭄v=ә>}x≜ ?W矷o (h\D~嗛d_Uޥo;c2>Pz`[Beuꦛnyh1aw*:uYVY xG3P@# J}]PCO}.dT(y?s3K.=C9:g=+ Dn)]vZ񶒠駟#G ZTЯ|p we+g+w/_ukA- -;kЃ V(@KQZ|뭷>ɓ'T?+Wk愙6W> @H/wYq=͛7Oo_Chkz'-{w}VcӦM??Ŕk6c s]zzc)ڞrSO=U!V"5|Z_o.QRPj# ')WCةS'V?k>ZVXUo>쳞4o޼Ν;GۓL Dst\ar}we[?.YfiugϞԺ]J";^{jժh?ƱQͣPz5|ک.x- V?^(h*pڴi͚5֢^ػJŒ}6_qnZ2 p=gBS7|\Y s=(gEP'Cg"wTy¨Q*QuE-fԔV%'?FipPsɒ%r]MEk'Qs-w}vb_{Сnn6% wfy^ԺOY喻\hm[5N].Xwޮz"m!0ݔc`>me2кoS-5  /xoE할x6@ !Dk!P1g+J)͕{kwhيJ{RӶv[+qyr,VYQt*JL.Op!uO߿~mlV-8 ?r9vi"l~6X Zמ7JvZʶ^缫s-&rhk@0n%&(Bof”)SL!Sn= fsZP^4+X] 1SN}P !T!ѣG[?ev3/f+ I@ M2#z7v.E ڵkȿeB 9mEY.r1ytər)Pk֮.k^hCe6AՒ9cs!-.%Mk>z>A; pqgK,v([L'smEV}.f%=;[nsr5 )Vv)?Z'o.ۗwͧlݻw/b{3W7 Mиy׬'393R_|\BH#e4/l@9s.Q[3Zղilyv+?hbҴDX") 9(Xj\-ٞ+oӌ-Mna{tVaDs JE簯Bm2QjB.!;TN 3PmCTsN0adktJu#*9Yɱj9z:79E{0} 弬)ù3B|//aUƚ(t= =z*3 *S@h L0ayeQ Ppr >U#s^l6,bIKY.]+.zxr3ٳ5 s&TF PQs(1!/j~W"dW[o]mv2eJH |%j5TK/3鮻*m&\S_z饈_ô|x6 P f͚F9à`*JϹЇ 2$"aÆoweTtsv+'jxj5oA =Pn%WsxI=j~2{7KF$ CS /`jڵS9WHbk!Arⴛ7o^&a PQx%>M`ܸqzĉ-vZgyYΘ(~ިt{ڞ#lrt٬-pa{=h~ee;:crsnSuSO=e:rɱ I؍B@UKYpڱuM9otX9ի}ҙr,BBs8ۨ@1=zS'.  v S=kڵk{LNo\Yz'FboV~TxPN#b;c*M,"ōVZ&kYR٤㎳(Br5Gi=^uYG SNЂk=㊨v8^&X56mQG@ڲV>vF2$QNZ P0n/ f A%BC+ Fo߾wygg1tb0!{ q%^7E{J3kuWLcVZJpV]+Zټ>_&[yqZTt{U(hڴi˗/W[ڬ]v+ [JJ-#Y{+͛\;t5?c4hې&UK<C '[SvNSo/cv5jd{p螎|:kҕu( ƪUK@R{hˏ@H)9t0ȹR&}*i?K(3'k}GL6Ĩx}2Vlnab3ZBx~;1VV  mO.]l2sΈB@ ^ZKI-֖+(]z%ZVk.2 @%j߆ W(~x?FXO@u);sd((븻Bۉ3Q@r? 6i'(}~@h߶sKgmWBD@*֭@ 9q԰I'd<31T.V +Vѣ[a޽e6@(gnv-r&,gV @v* #! oԨQ}Wm d"?3f̰;xΆ&x@ NժUj'J ʌѣ7% ^sNa9 @@pCvײEg"A'\qf<@ L,Y2eC@@ 9} @X;NgU>,˰/˖-lԩ#pܹsAVR_U9//_5רQnݺK%|6.*,]x9s+MQ٢E6ڨd&KC^ӤI}*Y3CRO@LI;38&w!|K/t7 k{1d9Qjt&LpQGqjժRX۠AzyloFB9guVFLnժյ^bŊ[-[Fz?ߩS'TgsVK/tᇋ ˰a~`3Y믿>SJ(|Gy=~AξO?sɓC5=ĥ^s1"zͮڵPCQ x Js "]N@1qL}Qʵ&7Mnݺĉ}/|ҤIgrȑnO?xN;͚5˞(V㎳BOHs.k+|'|]( I?}IZza$_~JA]=ZQg~R_C9Du;z=g5\1 hB@`.2 P~=zY~`s6{lYۜsx$9A 8/>J?^hu:rDb,}wuW^y%\pp5j*9tmѢEVQ 'p9dwX=cᄏs=^yWUՐSjZh1B @eHp.]b'pꩧUmj!N[gUvke7OM_Q+(@Z/\-T-RZOqUӟM֬Y3Dk*OMQV^mHʀ?-Wwk}{ҾS_~rN;C=>M+ƌn̛7x^{yqz0OG0;0y睽,U܄I.]j`5wa=SlSAM\}r6An>WC[T5Ҍ3+j4'?|+[{[s+w/&~m袋=޽{I4M be^$ZǗQFm[~v%iU0gϞn[lnk‚ ~f9`a{9n|UWi̧wr5%gۿ:u.>|,SV*yy뭷qw2]r54LbKl> qƭz'gRY7[av˄ 9{s.AKa!>n͹UfMZ&j#"M' ԭtekEno}m2jf-0䕇hzBFY;OqBxR&vVk!!@)\>Ð2$Ts*Tj}/zdlR@IϹϹF>" QPŸPHk2 [ڵׇZ3), }%]d\u="~-5읯<.ٺ5ۛОL$fkw+;~xO9w_Y^ ot[dy ,׆rK<A% r9Jmiذ&Z9?CLhuk+,ô.#e uDQ5uV ֜aV_Hy}4C'9Re'6n"᜕+p+|xw̩A9EACZV k?R.#9~zC4Z3,uOqPqiˮBЖw}תs-euo;M;}:JƧhM 9]Pf>W o9j:IKY4AʫGlWc $A9 U Ϟ=[5\V]Ϲ`Y9se5 +[S @7a3@IDAT\EiCP^=`|{dM,|K W23[3K,iӦUhMPT0c"7|:\vü}z"Bk|:Q.zkSs3~icǎʡ]8qvqs;b? s]@XRY#[n!1[ky׷GWז~pkJ۳g]O8gmmz}H,CrKp,)+@Go.~={tORxgg޼y^OmZdz Z^dI7MXNΦ\9^}%$SrG<(|f7t\gԝ|>}.!@T TY/@ <J4Y\Z ^%nR.jK};3LZ j .d,r-,k˨VDoIh*[\Ц" gB٭>ʃ` ݒf͚٥ +*lr#ciDŽ=.u "Z+O eW\꠺Ϊx* PyxΕgH @!g\(b'7JSkh/?ywuݵ==W으mAe\ʹ&B'~za(tNϔBLt*=<J.3 l5}:wJ}}i_oɓÐS!ѣ+ޒx 2D|e:ߒa2OFT̯.#:Uj 4sNa3ʎ˓GԂp8&vSj+=1KJl:ryӟ] }wr֣Qw-W^rVlNrs[lr>M`&1K;07B{J6*xXݒCnyK]풀ѭ(Ю:p@U=JּysL0A&0gCdWu0  '<?_yб@A_Bn^j*VyBVJ`Gsvϋ-[YC&hgmO:8g\mNKZAJe6 4wX2g5YBtLbj]s5Fok iiop[%$hdPM%ݼeʆQ+-[th|#VqWYKAM1 ͨDEek'pc4 +)fTL|h0{l+MP"+_NK_\Gy5ǍnqYr83jʷ`)y^3?k}j !%^x,4##ejȳ܂ 2$ÃF}UZryCMc/׿jtCꇾWV-j.D}Ǝb OM;d i-Nf͚VΛ ~g}ZQn 1m}WnHRרqfelV[/6$(VG*N9sNsqudvWY+ϹK.v+QAΛYtR׮]8ߠA ]yݪ**k(?ܨQf9:gs zw%髝3ūGGz:M箯^)vqgkr@(ke̚s)= ОXzںבN]<,w||0|+jz~Ƿo>#ry Zzu*֜պ\-"hsHvGg P邙,ռջvKV[lSE/nvuW)MBVrEwyn Ћs] 2&A@y`.2 PĶZiA+c=r*KA#GR.]Rn! [ZAShmWBgՄs"WsO 7LYzc=6Z`&7K.guV6P^y6mgnwtmM6Ul.3^J!< 5jw:iיh(#jTL Mr@ 5k%6t'+2ۏl9~x`3tk6Ne˖iO|Wd+B[AVse*S?MY=ל_]?efU" ל=3+ u"YzS]3ʩ,$r)W3z碐xm=Poȝ[蝷d}܈PIY ŕfY vkW<@)%>gσT^9Æѕ ߻J}S^Jth$jNvoڭ¼y|M@%MaT;6S1X`٬u0 ^g5)Yfhj#1V.Y`4 ZoҤI}\6T!Dg ^KFz-^6fGP{ݭd%GCV7w\XO. jxΩ\ H D@K{)\B3?R  @.D#@@ U`=_ڲrsU(م @ȏs~x @ KVWԣ}:P8(lmv&jB P!x…2 !R}U7ז{{ 5\ra{V @@~8*?n<@(N:ɚygN8UVY+XGJ>o{Ζ.t @B5(Ё PO^*.oԨQ}׳x@guQv=+Rak(z-ճg6:lv@@e9WBH1VZ1]:)ꠃ5k_Kc eq ޢ <4 S9sڶm[8h  P.A P5k6dȐA}ς Y~uzZl%1ts1 6E'0a„qƭ^:#hB(IZm.~) իw9㾉"3 D 9'ʓ% YYsm!@7|M<3 P\^"jsn@ H(a#!V*-  ÙV @ۃ%@v}u|woJW &0eʔ}@ 9W|\6:4ڨ xdf@ @9 @ @ϙ9@ @#F{ @ c&V=C(xƌ~1l_U _ #B-*_sΑ 'G}\X\vmDHjT FBsHVڭzǶnzv|1ԭ[7KZ>|=p@E  @ b#\l#RRg{~~}衇>DqԨ@ <"P6Yf/cƌEqEf;@ @rk3'9jfȑȽ;+G\ܫW9s7|߮:7z6lڅr}sΕ%lI2]PZd䦛nv5h Nv/4˖-lԩם *h&49DS54vqGL$%!kVƊwyG֜_ulu]%c,^S=R -B/Z(γ׺EuI.t׮]]wD L'N1bرc8Qo/_r_JQަMav[|wjՒ,^Ə/Y%j^!Ϲcǎ?jJ aÆ-\0XZkv=e3{޼y7|ѣϟﻥKmWŹ[f]$t(4[q!:ÕkE:tʝ>L=#z3@ﭮ*%_.UrNKyȐ!Jh"_za&|&M|*yاzx5Ej k&6pÌ]p ͚5}0(1J*YRI[^CUO<XaFA~~2>e2c#>>vӧoCs)zhd*ԋy5գB+ʅiJz\2# @U(~2X">g5d x+/(w]Q7x~BL(ͽ[|ɓ(WTG1r|>X}%ѣ?,>Js_}UvMʱE'?f3ʵRIv+)~4cG4ÇkRC<|ltmV.(iH,||ҥr ~ ޭPIb9{A3T+A  Z;uCn#m:)?DQ^xaΝ6[[O۷o O>?iڴi͚5EKmdynm }>z>W\knIȧzb;Ee˙o患(n)kh#WK U]omdl&IP_+`^w%?ťN;BݧX}Iv5s9^ڧ8j՚zN09X:ݳgO0/]1Jw}PӦMA![Θ1Üj}/R c==U!! zO=RG4/% @YjgSDTѰm߷KQ}Re[ly`޽{fV_>gLdPJѩSڜ|yiQW_Z=%0hQF}{駟I megW\mw U$i]Mɷ~Oͻc43֓_aHBFk.ж|_5Cո|% U>52UQq q-< 3)Z[˃ޑsO?H^S=g/DoQ]&30] {#]|eB_@Wy~lEG-k)ʡF}^z饠rzv* `^IyRo_{+\6.ZRVݥi=O=cݑfiM7.R==1J%ؑ&!PtdVܑ˵ѿt8DgiAY˃ܚFhs" zO^9 $%tY!@h6Ch 9TAy(J]VqU][sʈ>WX!Q`YwW%rݴ7pCxZr)IOj;;찃 gaJBP' V_IHC!m mu>SDUhPoqsۻ﨩3%vѠ&KCE+**DEXGX*,0vQl-v1A,D $h@ųþgfΜɞ3yf32);@܊/5e(>C\ +Py[u$-G3ş:DSy^aɤڧTJз"} *E_B64$uIiF_1w&qEQ}GyDzn y r{ez6sZG=4]Ps#ak0wiCS!|&& Y-zw;7SjJyRg_V7MI4 ]tN&$}>d;ތ4mjAA[om… )Cp%PSY')D3^e7o}g2^JMJ_S gyڴiUT@2+@ٮb;0PPQj/nxF=#i;0ޣG?Xm sK*Cٟc3n^C/zV1BiAUW]պuk˦s۞@(s:1gM;lBzi]&^M6v~#L4oѥZҬk]u4@wuWmk'RgG H8zշtSܒXoFNQ^2/Q!jID^5^z5Ʋys+]! w~;+$P_ج:(-tU@׵;ԢEצoTnn׋[lҦ$Ν;ٵVYyw"}Z 5SdxDao]qM C/a)هrAx9_ evy S"v\.]kج հZzu(s=UCs0(+ҴN8!]7ko0a _"uv}*)|Y7QgϞRIGT_a…Gwa@g͝^C/򏺯Dڧ~]ќ>8wwZsH v5H(>l̽{Ѩd!l˶nk:Zkti@bڴij^ۖ?KΝ;jqM8)uv3ctyYr5jeДDΑ:D!ƍ=X3kd^05a7V0g!W9} 5+[ƴc=ioĩVCW_},-{m&Q}m[wu-])qVzISg?AfE3gN@Əq;U-0 >B:bT䩧E |)ZV]Ћ!ʣE2럂:˞@ȯs~.756+85WÕZbS}<-֢eDlW| mm|wYfe#g߯e5.LS1yߢ}nm~]%^]b'uvMveXot= C/zȶ(F`OvM+ UJ[Zl:lf/:u*Ѳe{WO=UoK?C￿bjY:*&]돎jvmw:7\r43̛7#}6k{% IE]~C|bkjC=TnmF}^G.™gYЋ^e/6Lg(Uoζf" @>@hʎ2lw ׌AgV+TԳ>U 3B혳bVjw]?hxi=EvZ~ra-yV:zӽI#'iYt!79k+,۬tZR&![G=d+<^ }#&TX9M @hfekF'tֵ{Qrh:wr\ԯak7pÀ zI?p cǎ֭[6ξ馛j4o^}o86- (?9TiYa7# ~'f78"P/ioC@ GD9Tf7T!hjf9 W&j6lSF-] mMZVmeEM}|/B̊<&ڶmYZie[iPKvxݜ".^J]UNۯR7)fV4y{nTm QtyqT;s1Z__?j\ե^>|Xf}gS hq|՘f\@aiJj%sڑ{ĉfRq}m-t(vgСk|e˗/W XxƣXv=g꬈t̙쭅{챇Kub*zڪU֭[ٷCXiy%rqqпf>ڕ@{:h^T_d^0 !O}#9wKLUd1R, 7,P}^#:ZhQ]܂  dV9]C@=RIQE9Y೑^ #@8}MK@ :G7JET)FF:j 4@4;a6D@@h@Ɯi2FW^M]h|6@]ȹ?,N;ez-E>)  (lt   Ps XdE@@h@"t   Ps XdE@@h@"t   Ps XdE@@h@"t   Ps XdE@@h@"t   Ps XdE@@h@"t   Ps XdE@@h@"t   Ps XdE@@h@ f n֬Y/EZᄑzN d„ ߕmUVnT-آ]d@@ 9稳*M`>ת]5h-֞Gu݌?kU§~*pg,o={en޼\0bv Z9G@ o)S݆&~ҥ=zxPn}'?&}u] tŊ{'|rW  e",uCf=n[haOI ) ZܲeAmVa޽3UϪ9gƌ=_m  PVȹ, @x뭷<{)a-WWYK.eniU/>܋^   "\tDb G?*f#+7ްWvi'Kבׯ_MwmOMܱcGκBW_=D@l 9g_4"g=%`[:f͚iŋ[[Q@80 @?RAojEZ! @D5@@@Ȳ;-}fǢE4nh [o]BZ]t8G}b-ܲm۶Z9^p*_jj7ܺ[䫶t(ZS믿ck3-b]S%ߐt"5A@.P ^B w n_Wiбk׮Y5lIiWzɓ'O2E/ên{ᄏ%=tw6+n}mb%xW7? Jh>X֮暥W:w_{W̙Zk)_MvWO>]i]9-r0`|ݢ~:t_Ƒ#Gs1U 9묳e;t԰x`S;CY}ǯk;0hHq@(sa$$7ߜp w}+"?}0aO?RNx*M>K.:Mo߾nNE׽biZZ U}./p/?"*q_͛W_y*}=[o՗Ӟ*lvZV`iLk&4 nWYe˖ޫvݢF 2׏,Nvj8bJ$@@B ιJPx衇~a?z5w\/i/^{ϻ?Um5nW&4XasoԇRlu;{`kMGI6ֆ@Ȉc>cVWVPԻw6mlF 4[^|E4zyG+vИnM֭6luP q[p̙3v[[ώQl%ʫseYxwZ9 5kѵu߆.]_~wUJ;GjNkUiU^5A}wa^{z't{\s= Q ܅ dB@Jy SN:w-}ݲoe˖nf ;鋦Zn4|qǹj ƽKsb`Ey=-V 4W-Og7ҿo}ټ -G!-=34 /hKhU+SF?LkVkV/ZaZ0LھlzՖl8RڴW/v9T ^Jh&HK ~{ ë odT|+o@T`ҤIvqm:uj슛y睵ؽqHP@n%4}M7a3fXWLvٽj~?|w{UE?#Ǐws9GCv{لF齙*A3ҟy2l0믿ݢZq=̈́7gKL#J P_-jYyk9i-tww0~Li]pnĈv#(o+rM׏huK@r*@ӎڙF54tu]U?e6[HTmk[ow wW`KX=w09)&G4!Vh9.jPXb$/ȑ#-]tf^̙3H  @^89/=E=3'm*):[5Uэ-?SMT[RM.X+iGިd(2.3> ^ Ԣpuy{z<:>ݚO@r$s:fB/Ԗwc:W{nZJ5^xƨ#g 믭FVv1 W[r5rd(Tj!C{VN*euM z*Q\Qy@,@ޡnkڵkWuYK.G}߮jJ ݗܓ}[i5rM^]ȹ&2'GUwvmZ5M/*%h^s'wd @0[;y:|pB+ׯo߾fIq&lVEii kDZh"fGi{byZ7:fh{?L>[ny^{Fkkɒ%{jJmg9y@s b&%wJZ@'v< 6 mڴҴd$4GC^n$l+%|oA޼yn~K7XW#Wuf>#hW{7vh%7s,lvm?tMɯH  P"t% W[nY|Z8sL}31u)WYu=-ZTwܵU ԛk soM?TU$CQh3fM0L?k, Dl!J@@C^~ekF;wlO+%,XP%]wm>:' :){h[^5? Yٳ4#Zj( \͛V}t'j=VIi!e͊=~$@@ _D/jҥKΝkfqMijoiӦ٫ZEiS^b~3ˬͨ;<{ŨQ,fg3rlͬ+%[R^>OZlv]u7ް&  roQAzu׭Σ--C,P+vt Wnߥs̩ZݱtCXcFeNyRX>r]cBX@ rN˥@ݽusp3tx*+|(l>"ͮ%琂m;§Yfe#g(|TO=T+_qСCW\k'K.n2ocO$ɓRujwRj P޸g"oI^Hod'ޔ]@O9>[J.BN:Y{EkO݄c9Ugټ)[u]6;UWUQIDAT{VHi3tꫯv+ͩH@i` 8wqu\Ql۞)(ĽE?+ضc-VջwnAj''Gן` S%@́16U@iһKQGuwy֊MM&[zL2o霪>Kks_#Zkzup =j-.zPƓ&Mr޽E]dw Rj4z믿^S7&Ɗ-*V>Svy睻tXZ3̛7nTB +J_ bϟ+ڥI!Ũ?lN3 U}5j 9+-*J`zJ!kVl:}R$,=YO;>`ȑvG_BӼ.Pᄏ-uS/JFe!NA5vYg)tW^ZZ{ijML9a[-p ." `v;*eQ@?VN;fiرcݭ1bĝwdjͩPp@ƍp 2^:Lu+햍7xԩz l&:t蠡rWO'{iN-WG  @x"Vltm:W\qoVK]vJf7FkEaͅm. ݥښ.]vKio_x:HݓK3{WT6W_.M0`@rv]'fšZ_v Kg8p`j^ZQiK dP&fZT 0'|ĉZz׆y]1mCŋ5s. GgΜX'V/a#m.WçkkB'6 .T]朷nZвu^[ފnA2=Vh /Fi+8h~V) h{[@no]anD8X*e\@{5Gvj-=hmw7FS˰Ui)ENHe^BQY(@OR2 @(m#*_N299Q +@/#pe{*̜6j#   ۻ6K=vvyoG@ 91@HAg͚MRD oCάv$@@  @^Zl{xp5`Ŋ|1cj+=j믿~`e˖/yg5?-M@r-@ @tvmCԆ_~ytNUvA`p_3dE" @Nӎ @t6Dܷ={J.s@*s^{z#8믿~5׼[klkO{UW(z߾} tZAm@@ @9@bhӦ_<@S6 /l   dY9˽C@@@ rN   @; @@@ }"   dY9˽C@@@ rN   @; @@@ }"   dY9˽C@@@ rN   @; @@@ }W 3N>(J @@`c|B UȹQ{pp͢A   jPꫯ^܈ *wZȏ@a ӕؐ=ܳM@@ %{"@.ZPx'N[! 4ڬ_~ճ(@\^M    0[;:KJB@@(s{6!  D'@%%!  QȹJ@@@ rΒ@@@(@\^M    9GgII   E r.b&@@@$@@@" 9Wi   @tDYR   @ث @@@ :",) @@@DEUڄ   st   PD""*mB@@N9:KJB@@(s{6!  D'@%%!  QȹJ@@@ rΒ@@@(@\^M    9GgII   E r.b&@@@$@@@" 9Wi   @tDYR   @ث @@@ :",) @@@DEUڄ   st   PD""*mB@@N9:KJB@@(s{6!  D'@%%!  QȹJ@@@ rΒ@@@(@\^M    9GgII   E r.b&@@@$@@@" 9Wi   @tDYR   @ث @@@ :",) @@@DEUڄ   st   PD""*mB@@N9:KJB@@(s{6!  D'@%%!  QȹJ@@@ rΒ@@@(@\^M    9GgII   E r.b&@@@$@@@" 9Wi   @tDYR   @ث @@@ :",) @@@DEUڄ   st   PD""*mB@@N9:KJB@@(s{6!  D'@%%!  QyfIENDB`actor-framework-0.16.3/doc/tex/fig-png/shared_ptr.png000066400000000000000000001706001341123343400224430ustar00rootroot00000000000000PNG  IHDR:.CsRGB pHYs.#.#x?viTXtXML:com.adobe.xmp 5 2 1 2@IDATx{US'"PB*SKrkID$&$!F.22DBI{()wBT9{3k'Y* @ @ilj@ @Kϙ @ Gُ @ @x< @ ?x~t@ @s @ s=@ @3 @ @@y܃  4?v83u_@=6l\6wvߺu'A%.Oz oSզMsL:uNϯ3Z%0cƌe˖&D  P4xEC Xb QFUR\R @ 0 @euƍg>|8A x1Ԁ $ĉ7mh׮]@F:sPVTBC9>s& h߾}V*VVK.Y5A CJIA%@ @<M@ @@ 9pRP  @bD}1 TI~t?fmjԨQz5k¿[o>u:v}ݷA9d/7뭶jwT?z]tT>{\;S|:{o_|Uhz]wm޼yMT>C Pf 9٩p@ 3_|qر'Ownڴgݻwl=ŋ='[vw~']O;.oWjR\C9{?蠃uB|JT'mC!@?@pGq57M'nbŊ2eA>ڵkM') u\*… SJ`U?zꩦ)H+omR+rm]5HCz/:%KO?-K[1}.<孷ګ]r)5+nKgΜizMvL'Y41O0ʏmN֭7(K#Vo$ @ :sN (#|X~<^x!7|nذ_:#䞥_zYdz- ˁ]zO8{7Sq?󮸺JN8p޾㏵(ʔekN)RK]kޡ׭[w^s5n5g*=͚5#?bK#j\.\)P @(? 0C@?No|Quvԩӡ;R^|I9m1YJ:5- d3+o]r%F~׮]g͚*Z[}j,'fDZ 2-@@ v,gn egK@^y>}^|Ŷ{G-x*X+cji裏[`cf\62vAD+]WYrpi{+Z%c.s1B=g?F1oA~#^19y+]/&OZU4W>c5F?+i(=Q @s)B&` Mۛ&٫NC笤>n(Kiw)Uh;\ZY)d%K vRg>}Z?O0nF^Sj/|+W ~i 9Ϟ=;z^;m=S.PK87& ӧOСʚEk'yVs!_nyqz<@B$N*s!Y_qM)蜤SN9E1aEZM)f*̯j+֔N~iKu)?uٗ"f}K^{t*[~ww]I'l9I5Jͭ]vb;MMe]f/禔R󞑼P5m7(Xgʌ-h:? ֦X0b#Qq(vw @(#Dc& }rV)ABrP˓t~&+:uhg[veͥ|Sv Ĕ\k.a]ʙ>5:kRi.n.} r{+Qʻ=ؾkSJ6sY~T 0:;۹0mSg*e= #c= m#裏tbsUVM9 2-N/WtQJsIN+FAP>$m&XkfPdMjQ`+UgΩJc~Hڷm.(msf^2vOYclge5tTNڒr|gչv+>h~Mpd"Jн{wa/rIOi+MlEKkp Pvp*Uٙk,Pr\+5^dvʡUN>>dy腵k*)(i]zҤI?cVC(JDے~msWv\Zg_;2DlY{!v}rNJˣ`?S6k?R*_" ^֟~~7*Z aZ7tseo3 x>pErfΜc]>S*؉.VvfʹGTGI i>wssw_y#X9w|UW#Ҁ閺|]v:yosγ ze"j4 G=grFZϳBY=\?.v}r]Њ ەa^ypM(qڰatyB[@3<;n{]w)]szA;w|}i%YoA2o E6m}ON.76+V*UsVZ+IsVlgە`fi{{ȹFMgVq|=gnv=v OY![du^VvsI ?< PK˹=2$y}]jT{n?/\u+K ߴSzGQ\ɕZA);+M%ۥ9N'ʧUoi[Y5S8/ TY)?SޮX3e,aX"cs4D@(Dk$b %aRH~?}JM?R^3gNB[μo7޶m[%!Vݬr:&ٸRCͪGY/,ۑA&*_+| ѵ)GCc:vxQQ8qymG.[sv2 @ 7xιq Ph_~NdBо;e9rzk)g!ۏ3ʴMY߳Ub9&3`d Yf;K. ʑѪIU(z&Fj_[r*^'ZIuyN(]mP)k- a-*[_e58Ime Zy+ݤMVY$d]C C 2G@fJr3"0˧N;픱IZpSze<\ʆGuqQ~K/4{15ݺu399 ~RkcԩS{=cQ,:ByvH'\z}}E" >\9곅25iD)Ĥv 2Ќ3tf4BȢ @ȇs>h ʕ++yjȑ6m2) O=]i86vSflTɾ̭|כ򲮹Ц[׿LI'd*1\Jn2LA6ˢd|wygt'r)b.(͛}iT@rlI-by䑦FhO W]uk?]Y{>rtU (gՎ;Rf͚v7=T)ŢTka\'_p)yV|IviDew"`SJgmmN  @ >!$vnR7+.WvcUJgyD:$ckv̭ WZx@r3*U]+2eoq˝O>yqiUSNHŊsVL%6C2I79=cZ3SUR駟$7I' j{!hGS1he3ۼu| s1]CJ*.ׯ׃ѦM=zHIÄncc뜤 /0]ʑg̬6LLΔ uO2lTU~ǜfëmH pVF[t޽LB" ]v%[;Z0Nb~z5 X\V- 7[o}צȳ576 3*;]/VJ8/v:]0$u7m c4ȵK.F}(o4V:Hc(@Ehmє!*?3I\8iErW J#e䌽)6XAެ94lP ܭt:xܹZZL'`MM0!Ҩx3V>㢽r ?WV-]WNEg!Ļu9:iԨQXgN MOJ*!@$\Hڌ$B-Z]+'ފ%wXb{M2pX TVTVy5 V2*kZ*YYeQ(Qd$d΁@&'= 4PGn.8;^eNN=T(!C ׯ_ժU >QsԊ^p#> \/xҥSciO>D!h@@9-v@(IOxoʕZծTjT>jMVaOR,~:XիW?蠃ثvG-{Ky}VdL>5!-[&D%}ZO|>=Qn[o_ՉB»G:]硇r}.1k?V˵[PL#=̌^\hif@(Ix%9@a @+:3@ @ T Dz+sX @#眸)Ca@#sngsT B P.6@ @ȟk3@HT @$94b @w @Y Z;kd4 @ 2E525 @u]4hബ^z.] $(G$OC @@Xs1DJ`ƌSNݴiS9 @e@ :wܾ}2!Pf \f ܡCR @Hӧ<'a CXL`\ 32KϹN})Nv)"6@CwB ds(@FZjU R%0{ u$bq' yرq @H9'm Z;|@ @DϹf[ @ @ |x3G@ @(%xΥ4@ @s)=B @@)s.@ @sL @Js)&@ @@gJ @ PJKi6 @'>Sz @ R"\J- @ ><# @ [rk\\B @ :xѱg@ k=rO?Ev^xg.ή @  Z z/\|[nVzոqc oXtN]q8k&Lf5Wޒ%KT8͛9IC@ L9gt4,s.)S8fꫯVy7pC[իw .HZ|EtZOvseV|Q!b.:~^R%uVӴin{Nex;vBD{Gy2V>HФ:um&=x`c*@ 19*:+yV*hkرcxc1j*ӡt Z4k~Grׯwj~7~38Cm1,A>}8tR^zwL}8-@ s.#Rӹfu{\slC,N8mqoh6mڜ*TPᡇRJmu@Yց!@ " F૯Rۯnݺa7{ְaOoOmۃ@+rtbg+d?^L6̶VժUQ{|c)[{xm2 @0 ÙQ J@r 6lؠʰuRJ#8§+f/wdm{ڧm[J-I9CLLD  @E$;3fh73-#5dӁ p.믿6\իW~xRnӡ\)RR1Yʡٚ< @ sJ)d6+8 D@Kk5}{΃ 2"ҏ1r|iP欳m 1@ @94.M\O+Wӄ5j謩ȳ%<ۗyvK.ɳC @>}"HۏNBl[}թS9ܢEZj9 B @ a5j-!tDYfmς9>[;<:x=Tz0Gp=g>r  @ȟs $yر!tDYa9۳ZN$LY=,r׭[]{c} q @%@v|r&>JAQӓ&MHlc;G.;ȱ*s k9! @s yk]zΜ9jg}/׫Wϔ/@ <%KaÆ=W_}mϿ~ml=gazkL9BO @ Gwn?:+;E%K߮]ȇ9n)@ @ Z;"t[⋗^z)-n3e@ @ xQP2Anh]we$l7 @ saL L:U;3*Fa%@ @ 9BØPֱΝ;?3M4I{ܭ\%\b.B uօ4_jb}=%@ @nA enٲ>製fڵon]p鎒Y[lo9>W\a_0aG}dҥ A @p ~ׯ_/M6=z_;fݒp_մm.Bs*lVZd6W 6;]vŊ%9f̘8ՄK@ @0 ÙQJ@{.Hi?#;tVRG]v'N4_o9VF @ Pd+ gF)AZ@9r&c^rwjժ閒ug @@𜣠Je!C-Zԯ_Uzmr-۶m^}p({…#Fh֬Yݺu+U @( AK@:u|;w /_5jhӲNY*7[Y%]yuAۿ!@ PHx΅X%K@ˇo@ 2L si @ ?9@ @9 @ @ϙg @ Gُ @ @x< @ ?x~t@ @|poV:\% 4mO q{׮9}~ާox`ն&]Sz]eB55 ,ߺאݻk6C^RhϞ=swpTbf{т>U}$ͩSvm7SQ܃V9x?HB@&Wm~98ssr=$Ś2O˴ҋ.ȧ}k̙v[;PnϧzDeyΦ=RzZMM'f7 Xwzr.{rNmn6 ϟ[ۛʔU&^m)[':D!N s)zgoT,s}J١ʊByԃ[unذA1z*lZn\ 4o$x>@iiL:J O>O[nA!P C">g?!;U̢믿 4f "BؕlF>\PZl?3z}wb讻(iƍףGop r8|P.LhB1$`'Zj ]nkFͪ&"z>-ꫯېa)_~E55kL' ȟQ2cAciDѥ36 (cx iWB [v"Sj 1@(.˳_&l[uȺui6kժUv?͛7{O&g),pҤIcЭ[9s@DjӃS|=|UW=Ӯʘ\آ6a_hQf͚rni>Rhx򗿼+x[,kW[ TT֣*Zuƌ4^zMhE(t@ 6TB_^}7|8T1tPM*LVY""řmVk$/bDl.s.蟬Ǐ3Fٝ;l"/W.RWyvMnk?)H[y~oTM7ݴ;3 @l x!n'? y:t`=k磹/]vEuƉ^(++cj7HMdf- 4H /6@&A?N:KU6rm9֒1)|7%U?s.Md X3זo;vJ%\F7q򄤴4J;ZLۛ}߈9{+VDDOCgb…Bg3ϜHVJv%TZYf׮]/UWvYEkkl۝H+(YRX8޿w 5 Ae ˁ-&> 6Ui 17Me+nZ^JP9;Z:gyTgjz{vj2KL^XꫯN[pAߤ64$Ռ|9=g>) ]ZٳwJ&4"APGM`n; C#/&hED}XI1r%YPV%ԿB]O_sШB3pi(=E hPo?@ 4ohBmnk/s*&eA]}XrkMEzrR^}B <0Tgͨ` xۧj"8 zγgNѮgH@oEtB|eR =y浚>}+$GkE+UhBn3tm4J%! ?+*'@#>g?1-kT=(O-vU0`s'-WA̷~^]zsի٫l*]v*Ήq'Y)dTJrc/C[XmEܹs猪*oriҝCҵUԫRSsZsn)+gτC&d\'n-ct=ziL3"z>.KmP&6פI}ePPkB-jժEy.(;Tە_O%3Wf#j.]-&j ?PH5v/`kswݍ^Kg]*mYYR飰3nHT"ɓ'mH[,ͥI: dl<餓d-O .֜moZpmo[jwm66sꄏ^ڵUDJ=^"(,>RV֩uS8@Ct"5>Z049+Z lH^GCȨstB|ԽVhHu;*QGw]K?sL^ H:NϮOVY' ;W mݦJ(?%M6lOQh @ 眈iJmֹI8b]x6 .II2託35x.(Ecȕd5Rsv^2NMvxx㐎O<{ XT6o^s.!3As `Zծ~$jne94sRzms΍* @|HzsҡAs4i;]waq 0z!ڪ:5ޖ|&$9dBILSLeBD})zn,+7)"z>P 2D!\)kvVtTozrqwɿOoˮ<Ь9l(@I$YC@0Yyh­>g͚i.L5k4foX(_>[-G=$][3c LhIr\^{4Gg9ҹXzm~zSlo&?h('Ю`#ĂEG.cղP H /!GWОP%Vl,M})J3$g$]vLoVe^$ӵ8+YGD/Gcǎlt 'dcGR I@ \ KG@IDATUa"YƜ~OIȺ )0&Ucƌq~?Nc3j@@s.Đh "uP3IuHRr oVr-[l$Up&\z*`&fbG" Qw)onn)C^کQ'uW#*ȍc?_~2l}: 9oCTЁB!rݺusTj© @ѱ">{ꦄҧ0m4suAm#B5kf8(_n.} 6l+R%s.I7p#}¤ ^?n5jK*O̶c霄w$d;)P}F8n& 5n-ΩԸq2 PKuf+dvR[oй2Jikd9S.Buf/2O8H鍊nύX>}!hP@+׮T(zGl%ڒ QOSN9MsKݭ&Çya%-{4ipwg̘!44եEX% LϹ,>gA@/C5 >cmZ駟L>zozE퓓$iVT\Ezy+&LpR_WV~̕13MX[:eԅ&4qpHΝyaeW\%\b."i^N>\f,+yT' VE7d Mt8m\?@"I)}ZRĠGOPI:\>))a\;磏>j+UH{':\P^xH{djLA/,g &GqF&Bt,9kj˖->++}-| "z>)!x+k׮ tW+ShgmrbSO=$FR2B}Nr.hѣG" &-EWjU#n۶vAoMV{r^z@?|m16Nk.s.TRE.]4]v; PciO>D"!`+ @#PN0`XcFd]HH)Zj" #kBUy%iive׶g-Q.˒sU˗+_b:_5M_D}ԣ3?`rP8gŒz4@7@2=]E@ (ё~q0& J!:A'&Qesӯ0#^H )*۬q 3JJ $N[ @ $kΉ2 9)S5+mrX @($CKB vA{@ Q!R#\j3Zܹsc!@(.=˟!PDDk>CK}ӧO:uM @ =6mֻGz@LϹg,ئ߰0@ " Z @@9 @ PDxE @ x $T @ "s."| @ sN$" @ s34 @ $s& !@ @!@ @ 0I@ @E$\D @ @ 眀IBE@ @("<"gh@ @H<L*B @@ 9>CC @@9'`P @HϹ @@9 @ PDxE @ x $T @ "s."| @ sN$" @ s34 @ $s& !@ @!@ @ 0I@ @E$\D @ @ 眀IBE@ @("<"gh@ @H<L*B @@ 9>CC @@9'`P @HϹ @@9 @ PDxE @ x $T @ "s."| @ sN$" @ s34 @ $s& !@ @!@ @ 0I@ @E$\D @ @ 眀IBE@ @("<"gh@ @H<L*B @@ 9>CC @@9'`P @HϹ @@9 @ PDxE @ x $T @ "s."| @ (QbO`„ O`ʔ)io}74լY3 lEXj{!3fXlW|j~{ow}yN~W]j @ 9g$ XbŰaxFR@ PHx΅XXnݸq HG/W\>@s @&Ni&!vj5jtuי˔Zj}-[}p  Ц#G~-ZUynz B @ FXHј: v[m{h}I J9ko[HjWN;Tz (P: /kTh6R`ҥ";1~"([ojM[n\PƍݸQQ@z0a6Kz-YD;o޼yK@ f"CI@曕kWYM6=/55'p\oT֛-^H:ߵ_/~P`Ӏ"N9#pAΥJ*swMv뭷>s*w)=P8eXX` 7ܠuo֥t]nnDB]4\zJ{i;9W.?CڕCl|GkԩSo6!({*{{{@>xoQ@:/{yTΡM 6P@}@Q^)|:(CU\٧+S] 5)V^闼[#[ug}o#zkS3G OXzpC2۸= 6ZYz1 [֭[A__>`RЁO>JI=)JR@e4SH@qZ_rn^u%5kg8 ^}sK(7GUqWs9]Gq=W}(Շ{׿H9]-5sv-{GYnB]{]zF+96d$uB i_t Tf͎oĜc=hE5}3pB}{gɶF.䒪U=}ڵ"A!hmg}42RωٶǕ!:J+F YM!/sh 6Ph ha,uV93!4.kOd̥|$-Oَ=o޶tu-~\-:h}%\9HVmΣUKIΕ^Y{+^vVDNB pb0ϡry. zWp>i)"΍z*90HU)Q2MrV Psǂ9(G4@tmޞUrM[{]}Y[ eT9$.1qYmED㏻:t.sԜWD]6SgϞCp>}dƔI24ӧOС)hE+݈e[;,()/r̔< ?v @~z|`S*hMXٹLk^;wlwNݛ ^!2WRom^ѭ^-ѥ/D> Cd24c.A(L=@(mxΥ=X㏍viKB j~94ހMC2]{-YYmte{/qc g[-JӪ|FV5tTYl_#B :,`jY˧2HAMK_)oD_Xc.+?Y@i2/|A X2 <(' %K^F>eՖR&et+ik.킽lܢEZjX>GqKiB=%+9"t?^J$~oܸѾr^}WGZ_"UkAW2Sd@(DXN:$!JQ( @ 9g$ PP; QK)l)+YN^Ge:USKy>Q ٴ ݢCBv޻/;|EtuQʄ~U*+B53{߾m]X,eG(,> pX@"cđ~F=gVqپ(*!Ns. /֭ڡj{ Q7Š+L"͛z} 83֯_ojR`̙Wo6'_}:_ԗ bl L  xI)@"rJ`;]i&[u^}+eٖ7NHJɢW{%!="BcN*3g⊍'w0nn,K9jʲV RU "m9 sNd**4޵WNg[{k &0*G٬'y"BŐ!Cnm[bvVtToP`uɿOot<Ўq@x<@ l5k4eYG=a#j67/n}}(I>}+"t?ΦcG\Vl_tv7lo&WRvc|g#_,e~+D%\ zO>d[m%Yp2id."8B$Pe)@@)s.'fc/]ve+W6PlDG,[/S~Nq/'4#Ѕ7Ǝk;P3]oAK={7oެYc{³yk`NoɎ9A",#DI7!@nA$>׭[w=K´i֭[ovYflO_~)lذA K\n3GcEJgAu5j3ƖT0m#٪U+Xc)P}F 2GF4(3dw0 @ #<猈CNSjz뭿*:}G1c*tΞ5qķzHYV$Ξ1cԙJԩS{lNvyg?c>]!"t?w՟r)G}scs_PຎVÇΎ{M4Q|PZ!2GF|2V&poG4 < 9 @T :~25ozR_!TuK&- *H#h,e@xi5V#o /PqMcjjLAoAΘLVƍLnxGM9B87V;Q[lϦlͨJzjsWAr]菺1ӿPvmWYgwrUgzJ[$]}в/>M',HѣG+Զ(&e P/b@q wxICX"wܡu~(S2zk-Xd]:VtaiXK-X`v -Z\s5)C'ƃZv k⡇:WFo̯/xbP zW5rs~Ұa*?bŊW;T@8Q٧~eg=]vmӦM=vK k֬-}wP8jzD6  Qn\I&whMU1Z|ރ#(orAYm٧3m:zܸq޺w.( Szs=̨9I ĮZ^Vo . IFCk }ut-YΕ']zWE6mj`RUsD뮹T^"#*̜9ӈ`'B{[>p9[dt3n(\ 媹\* WQ)hE&!> qqJJfS*A 4uDSVV}sS#`+)f'L1@( A>0yR6lu?}'ۇ$0dȐzHj`kEGX}vEi)9WJEjU0pZjiZ@,ȧQ>(S&4O QAaR|+F#mC֭z:iԨQ\gv)\:R[˄2TB@$\6=_W_ +=餓L5c|Ǧ}$ X ǚw@گ| ﻒiϒɴ*UJ٧|f-+x[uS D]`cu1B2* ۹hѢ~UZDgmVj@5 Qh矯ϠFX]e΅*U(_ҥKsN1s5zRO>QԎn z (^\ p;:(zرSr_k=\ ^!zj \@(j:jժU ԓ9sNl -WA}*N;.[m{e(:'s˗[iO5MDDB#2?xr\`U`2 ,}:]| @EϹXKyܜgAٸqqwqvSE2)l @@9 @qs( *q֭[@ @ 9'igϞ=`iܼy^{-Oŭ?xmn׮[GٹNiӦp&XTꫯ[Q]tє)S".!@@jtK}Z@ 9}w ֜z…7x/R  2M bez1l Z; %t+o>ggf;Ows6רQVZK  @ J4 stE'@r 9'`<Eo].WJ3`zZO{cǎ @ȁ9&(1x%6q1GnNcGEe|S&|- @ < 9 )6;QZdVlP@ @  , DeݻJ*e B @q'J~9͊>SLTvm!@ Pv9ҬfEewM0 @ <<"mnѢ+lE@ @ ;7 ,LTv&U!@ Mr.fsaJ@ @ N4 m&*; @@ x)P@J @B9)3;=]n?xj׮c7[(@ A9xe6]L @@ \&9\#p @ [xα*v7?;`|R$PH HG@z/"iRB@ PBA# =ҤI EH}dݻwnnS}y晱cr-zetK$  H@(sD{ & 2Q:8 H@$  H@E6_xW$  H@@p$  H@$  H@Ps.I@(;#y?lB$  Hizk7$  AO?5jԥ^:nܸlp "#0z諯:{e=ꨣo -X,-j$75YB@ wPq~E੧Ր V,y(YF '\8R@.ڰaBѓO>yD"V@Tb>  H@m&fv'O;Ç9-q 's12,F (LHH%s$  sKڸ$ }ݡ",r3Y7_!K.thњg?#*eq&ЧjZ;+OO\_Ңl,HV#O]|_{Y,Z? <﵄1_J5@` Dꪫ6h{L?bNSe` Y6[rHU#DS*ϥ^j`-shZ NѸ=#d}4LBr˝r)v5*dW]?~0$1S/B,ɿ3Z+k_tA*ץPs1>^Cf9_r%N;md%!;62*&z,c@w}8jתLc=C{G۩7 XΎ‚$@կ~U)V h:wNYgiJOj)jW.x`r)ct4ߞGo}[K>9y睱q:=G<9/xKD^ Lk 6HUiZX~ɪ23~RXySM5sR8'G`R81aoCY'>")FˬBB`]oF /0QԘ]wVvIr0Ҳ._ ZĖ[n&8j*[}ݷ⋣o*G?svfcfdMz(;~-%~z袋Ze|Lӫ*V8tKq ! ~'.Q?g{z7x#X]̉9x!?&+Ę1cy$sVYhX*|)x衇`}rJ G=f+5^8ta~e\itMӄHuUY6_~ev.`]g;L(F\oe(yOecH<,?>rnn~7f] H@@P2K;g3Έ"|{]$n%q,FNJj$3~ӟkVp߻ޓh&hr! &2׸$Zc ZbY:9rdaH*eʝWM7T5Ry"XPh묳MRYP0AbegQ* ־+U!-ҺVx 2߄аʄ+*q0Y*bk.ierRfyfMT|Q`$%ZXY2g~9TPS`I PyWW\1K#,V^E9u= L K C&z衕+}1:4 t;978 m\9 qjvV}M-9[SAT l?j/$08Rۨӟ4rbJeX L)iS?UKʰLjy6J9C a8 +e'h΅/?üF߱@z s bwh$6MS snu=#X '?IUQV $c U%.vʒ}~ĺ11/WrRj6I­ Uc (hTm'22qv ʘn˺#&i?dBYKu0ssZ=x{3>U^zbm-y\L&sx)$+i܍aRw*)EpLu6Ɔ5BgDs rcJH]r-|(PsN0nmc{U+z,3PnΣ9*h&|m #P/^lBy٫iњO-xIʙdrZQ3eZO1H7pZlҎnINTXl|b-Ē!Ir+.x-HM&kСwdN\8U˄@O$iH@U-R ĊRtn*o{v`/?Sp*%v+lM*.fbv$$*[CS!nX2"#=?LYBIpsbBIzQF澪ovij 8&JjUJ.t搮{J0v[X6yT#Fdb..y3cF PzC:g'xw4fZB,$>%$%qFlD 9KNťZ|I 1 *$:Z`w1}Lb%2D3Lz7! H@ I! !{0>IIY^ElPA3u\42S}ꩧˌGqJ8}ecqno7^B>s9I*ZiZ,Ylqb$g4nR>bPVT˯RH(_U/k-pqN6y3&8Yl@='1{l$J~"5e46&iNaҙzˀj1l_@WӤ'5q ]phJh-JhjРAǮŒ*-b\gu<}6] >C C? !D6XT>h腽evz8\/i0/D9ύک߆5iaz_ͮjf2TCǪa$l5,B>3QpP4w?vģKҶ4QM oxE0?H83l󴐳 rb9H1/d6Xj^=&+BCI" ]~d&e.ާ+pmq"MK@Ԝ,;4< Ŵ[ǧ4)Mi^k4%ք7_ͧ* @^HZ7 ;pr 0DMC>7oUn[F~:ZQCBݲ lh8>{xpC Bq;sZCk M8t~Frk&=aٴtG qX8]=ui29HwDH]wݵu]۲$ [xDr7=uqZ ^Fí8pȬ-N-9[|+$t>`/:[U/T,T#͗^z))Ov90T& _2aH/^,$6tY , ˣɣZ!mJ@hmmCmG]LHlb"&% lS ?o96d,u} 󞚎\g3>4,L:.!ӄ$ L@s}Ǟ6ī."qPZMl-N/[d>.3}QG ՚w<YL|Dڡy $Y6ҵ^G"k>&٭N;֑BXy]l FfkvۖFC6,6N2;/t^U?D"aXaj58Eɗ"!mg#8"eeQ*Cj슜FPf 6Z >?Ç8Ą[b%p+RI~0q Ra??#eD5_[oeD2`hI7A4ߝ-H@j=0vZbnNǙhi!Cdo$Ј#BwPe?[lQW?>4ꫯ굂l3 l *3qI'P?a8-}Lb1\v]Na*+2+K&9D672k} t˚Ť|X!dQ2>ÅbֶMlѭѱ:d? LM,>?G|3D& ;oI@6?mApVk,#ݲ=/_ԭ.]~P fk- UYl4w}'nrSCHxͧчv4j^6:v+T&A8?yܸqZe^U̎8>|8gͳ(6[$h2ޤ.=B33‚D+Py2ʔvgȜާTޅ@g7 H$VP#>&t|WUT1h&0#bү*m2Kp/؉b/OtњolUk)_ OL.0Z<﵄ətlb95~:FPd%CRp+N}TLr0GWv,i H@$ ~B@͹LÔ@pP ,"Z9*P݄$ r<KE.Yۑ$ <ԜP$P<5 oV̤_ٚ3A&rX;ϝ.~( }]@MSIۑ$ck7*@1 wy?8ĉ?p-$tsmjeLH@$  Hڜ h#@#:+O*_pQ^m۞ L|3z5;>zÇKJK?bM$  H ?5,) Lom%Z{ǎ4/K9䩲Kq\vw69@?!K:L H@M@oޞ_G';qYUf۶v۲L$  H@zsMC@w~njSO|,ɓO>jv>sJwT%  H@:s-#B r)'xgFmٖZj)nw8$  H9wd)z$L2ח#$  H@zkw\)$  H@$  ts'ۧ$  H@$  t5+%$  H@$ NPsu$  H@$ !=s$  H@$ jΝn$  H@$=ԜgT$  H@:A@͹S$  H@s̕J@$  H@@'9w}J@$  H@@PsRR H&L;|S$  H@&0i5  HF}W'W.QG;~Q.qƍ?/0`nxWEd*3%  H[9wL)H੧(Y[dzᇷfg}6 رc@?.jMXj1_sWLBJ@#VͥkÆ =| &$ % %ܽs@' p )ks̱2ˠQ_d;ÇWs4LH5  HK 9w)$aw}w`EkgcB$  H9l: H}|ahX{f/X\ $Ԝz^ |зjs@aD" /%  Hxsw͗J@ SM6Y|iZ$  H9؄: H@$  H@(9 {_|W&t_wޯ~ tMk42 387ߠAh U͸qXZkZ"KV/|ܼ|guYfeg'*٩˒, }饗^}k_0Gyd:я~nĨQ~$hӟ*$9sW_ͻu z{ZU=>sx2M4b-~~{Bc }Fo~')6y3r-媚sc$/pLFAb7G 9o.#G>Kr饗!TerYgpkW?sefI'4zD$+r<ſYZD}N;4($w) #o ss?ey睸SOMc9M5'_G Ig}2f*gn6]|&Hu7$qkfV_]v٥j/l,믿^>3,W-^3@?_~j_+J@@x+LZJ6 hagi& wqPFmQ[B<וּ K` %&P~_j!s紛a{CT⠃ lᆩ%f[,&U".?B٠"N<PD+l$_Bى|0]75Z_MSf\6$PktIZ\r%N;mvuUbر!;4jpy%÷~{&Fo}[KZ24ƫ^" vgR6`Uef:<'.7|:{`R8yalm{h@6H@m#>¼+_m>\.UmI?|QȤ̾&[!j;~Wn駟n]tfFp sͪOI#h;.rb&V \Awf-dv_.VxVe>[ȒH }]wK?ԭKX8ᇕM"cͦDmnUM@[WרZj& T&"?/2^2,2,n7ʿ+eNr:|&a&&+_$  $vNPZ]cV_{wb^z̐&+]oqbĢ# +,R1qE2]8*qnB _mj9-mR{ e#4n,C'kCap|W뮻.Ib f1^gX6F7O 3mM\s oIkxrnfsϢ.oi%8AUJL<0 5Hy8V_F@e!)S#w\2}W~f|_tOw4x7*|bŘ1c;J+ľ|eyxCa yR"܅lg1(/rKe{ypfml馬wi駟N/`/۹Y'qifw X$#C${@`i٭ mD&6vuN&5Ļ!m-U 0k,D?yU?l 2߄Ta/:>hQSd7D\XU0Ycy\U[S؏ZXY2g94`N5R΃%%@%ߘV\qŀ5X{e0)v2 CMْxW 6*휅 =y;OoxQ j}Cx⥊bXVSK4[^ְwz ,*˄4M-lwVHd ? 0Hn3KͲתN2; ^U-+[`:üF߱[X—]ץ+F}f勅* x+5gʄK֒CT%.xx4PVC;Ƽ\NI[fB4sbUm'22 q pY^E39u= IGLSɄƺ9 }#HO@͹A m\9 HD:y'y_Fͫj#CdJToSԆL hp*,T=?U $v,/8.JeZ8HZ 80c&٤_7%U%.kv,6i#<W.>dH:SQ_J{^`]Mh0Lq.q[R8U5VT.1t;$i6g>o֐ɑ3CnRPTbnr)AIzSMۛCɪ tXIRJă~IPCb| ,sgjp3.On'iU.v؁8TX\U^ ÇCp_7#_FQ)9 =%3cf=(!3Gxw4fZK74Bb7GsWRvK.dY7rjcP $J9'^5$:Z`w1}Lb%2D3Lz7! H@0BXݶ%QKTB|[&~8+L>:alY@"͹_Mm@X+IAs&2o^xa$]9/%؜ypTw.qx{&k= <_MN@AognPksKfݱ>aV& 'YE.ŷN3lC`BV$&g RZ-K@yڜ{~`axs>lBW9㪝`yPq|hIuQ0ˢjFmNF [uiz0\V&:WIgYG ־$  t5箛2$%X"km&h(H3Zx3 b#aoc9­$j*J͙79眓pX+aNL倫_~@eQ Jr.qel͹u${?8(n@qb3s K_ q~t\>|UL(AmA\A^EukVw'8A'.LfspI3ѓguni9H\_B=+>J>-"ـhzdc! bݤYLFC'ͮ҆%QK\qZU| qRnxř_,':|*qk&{t_gO2yun6vSEH|$s~V4goR3{\$BQ>j' nT8TiX-ރO?t8BԆ'|r-M|ǎd\Ja7d ȉômm\RcGSlz뭃cB,߆%! `5Zɭi[UJR/b>{W^Q š<Ρ5&~Dlg(̹fr"Y0WOQ)v!@dGt8$-5\iƖBz H@y{#ˋoR`̤.^xo39ep3~ݵ#-BI'ސn8q׼b GDآk}ЫbNNX1,'[chK"tT+n{!'#<2(|+~䃮ۧ Egjݛ|B5|饗"4E vf!D {> l!!v%ދ2L4, Q'V 6%  s'HJG  (!bps8V_2$6`ˤLornF}cu򋵋l$}sN nnZ_Eؓpu(D$s L (ɯOӃ8 (47҇^},W^y*I^r¦;[}A3x%1 '#8X&lxPys #ѩo9X2ҩ=dnŧ73 eb`I:, 7jmobuHZ sla=8'@:MIB9pHz饗&,X󴨾ze4B,_q"o1:WQHK24g~Yd<S끳ZpCˌuQKsU;ܒ?0DP&)ã%Va_{| _dbtD}N9UGѣ ;Ʀn.$:瑭2L"SɄ2Ln2ͤ3,Aٔ$  @@e Uw;7&NUK-U{+aVd"bîpzvXCuXeŒ/0`gG=Tl@D%x{G wk%pL!vدV>M8 762lAHJ>|8'%دAL8`oE/S:_y"# 9zs|12}L"S60L4ͤ$  H !J@P6d >8`s<9EN 9Th*X$>V, bN̨Xy#{r? q (LSF'2LtDW4- H@d kn4OpׇDʩ53zWV$?;ӫZM7kyӊKbA 2"Ҽr|T(7ʄDl=א_.4EyP*̉]U< $Iw)spƣIުZ/<^a&*Rl6TV, zA#p[ukBb馻+BY>tcb!PP!V}> B)UJk^Y,O&4oH>. ,

u%9~Q$i*|IԲ9SygĘvZڜ[$yL ) jZa mȡ$g9 k j>nPKK8́N+ \XUǞIJ>7a:3YLdVo@g7*@+9Wɴ f͹R+^\{wq>1g&i \Yy+C%9Njv\!:4xEW(^n!>(ܪ :.Vb3[$p. QȌ+#(Q.XmݒK.$#ɈTQX;&S'ۙSyDM]vyOP Ŕ1q5_ZJ@͹xm /:8yMm\ՑsB }&舐]A#!\sH||8uqeOceF.JLĩ>q#q!w}cu^1:]ɺĩg]w6ݸ`{<[$TOwq}T>G"; 8VytfV&(> :ҨyU `An"O7n=jyW2;3&yp`2$  D[GOJȑ#{r%T+lSĐQ ,5C106>i6T;NT³Ht?vc[](d8^`1;땊Z̪ pg+ߞ6Ķx2xqUюеZBThdR!sr#{Res:{@}@6% `ޘGGяkakrƎ/O;,◧dw)dC zk|83 .U8dGlJӑO 9ս+ H@[X& H@$  H@F@sͨ㑀$  Hy|#I (E5k;$Njm_$  tξ.JPcEv$  to$  H@$9w$)$  H@m&G$ 2Ps.($  H@!Kwc{$ R[ӢP$  H@$PjΥ $  H@$ RPs.($  H@$  siBA$  H@$  HԜK9- % H@$  H@!\P H@$  H@(%5RNBI@$  H@@i9f*D$  H@JI@͹ӢP$  H@$PjΥ $  H@$ RPs.($  H@$  siBA$  H@$  HԜK9- % H@$  H@!\P H@$  H@(%5RNBI@$  H@@iLZID;o]\ȑ#of/)9$  H@h5p [oW^)v0L3M믿[}YfJ@$  H=Ԝ^$^{mذa'-q7pz8ߴ$  H@@@o6@'Ï<<$gx iE H@$  4L@͹atVw:믿>V[muǒ~'N9̡oV,̲[\O:$TĤֿ:QO9x)/})$YM7|~[n49lMМYg I꫟s9Tg}hĸn3$?'駟뮄i港?['|&8Ί}?C&lRiD$  Hps?hY<LÇ6{m7O!,ojs})z^V[m}ݗĀ.BjQ[-K@$  H E@s EA,|Gb5D&(Ԛvi\b4n=nU&9뮻2sO j>SO:w㸔Y$  H 9w)|ƏY콋,Ȝsw|%PM6:ơ^٬{|Rr-QCΰ/% ,@T̪ '\rɅ1- ]ve/!bsONkL$  H@h5pxo1cƄoq(!4LsW\td+2e>6,6&WV7g=`o0fqQF~Шq;9sW \ H@$ Psng{i74Z{;sW~k *dTC&eCa;6PgyޔD1&Ysb$  H@ mv-b ڜtGqo|X \[s *@,bheqa$  H@@9KoV&?}KlA@{wrV*|Yg+_ vq%9PꩧZlYfw'X$  H@%\/vGmݽva8-'~ydjYSy mМDy.Ps&!SI@$  H@ [hm^&JGtdq_~РAqi H@$  HXj,5g4\Wg%7RZZ6! H@$  ڭڪ6]tQR.lC;>+c@֮hhY"v"sxK$  H@%$\I)jȑ#k74$lfk5$BrrRꪛ]Xs6J@$  Hyzk7JG`ꪫj])/2[u/3wyCĤ9\$  H@O@oϑ{[ona%%"Qʶjpwi=Ce0`@|{4Nz7B /!C¥ H@$  H soI[y9jׯ,zwlF~:kgx?W\qQG'Fφv6pC5@Ä$  H@ 9g{avP [7|34;-T_ܹ?P:e*կ~#s8jذassԔ<ӗ\rT/%  H@$ Psng{5k ,pA10 1HNQ/P_PP$  H@$Fkg{AO<&1&k38cF1n2-xW$  H@h5VPBC}gve馛r̓L2kq7{a,駟>Yf9s)LR$  H@;N{ 5jԨ'xWqޞuYٴL}ku Ce׊e wC  ۗ$  H@@; 9},+}:0 H@$  c}{c8]$  H@$5g$  H@$  H sI@$  H@Ԝ]$  H@$ ,jYt' H@$  H@Psv H@$  H@9g$  H@$  H]K`fҳ2Kj$  H@sOⷑ_ء]I@$  H@ v)A!$  H@$  HԜK;5 & H@$  H@ \iP H@$  H@(-5NI@$  H@@)9bB$  H@JK@͹S`$  H@$P jΥ$  H@$ Ps.($  H@$  s)A!$  H@$  HԜK;5 & H@$  H@ \iP H@$  H@(-5NI@$  H@@)LZ )BM;{鍊 H@$%5~98'$  H@$azkwx hu%  H@@]| %KԜ{i6X[o~7f, H@@9,[`XkƌsM7M0v+ H@ `mFm#w% ^%ܫ3_?`_&qJ@$  HCx$  H@$ .!%$  H@$!jo$  H@$%ԜdS$  H@:D@͹CV$  H@sLbJ@$  H@@9wJ@$  H@@PsRL H@$  H@5[ H@$  H@j]2Q) H@$  H@"!v+ H@$  H@]B@͹K&J1%  H@$  HCԜ;n%  H@$  HK9wD)$  H@$  tsۭ$  H@$  t 5.(Ŕ$  H@$ Psx$  H@$ .!%$  H@$!jo$  H@$%ԜdS$  H@:D@͹CV$  H@sLbJ@$  H@@9wJ@$  H@@PsRL H@$  H@5[ H@$  H@j]2Q) H@$  H@"!v+ H@$  H@]B@͹K&J1%  H@$  HCԜ;n%  H@$  HK9wD)$  H@$  tsۭ$  H@$  t 5.(Ŕ$  H@$ Psx$  H@$ .!%$  H@$!jo$  H@$%ԜdS$  H@:D@͹CV$  H@sLbJ@$  H@@9wJ@$  H@@PsRL H@$  H@5[ H@$  H@j]2Q) H@$  H@"!v+ H@$  H@]B@͹K&J1%  H@$  HCԜ;n%  H@$  HK9wD)$  H@$  tsۭ$  H@$  t 5.(Ŕ$  H@$ Psx$  H@$ .!%$  H@$!jo$  H@$%ԜdS$  H@:D@͹⋶uξ6(;$  H@$f?{7ヘ6ڨ(_~fjuG/ H$vi~XaV]uՃ>6mM$ #)C5jg}馛kfm[7[$P/[oW^Vvi&w%  H@,o[n%meڧo$  H@5L7橦Es6~Kmf$  H@:D@o|ɷjs=//PMO>cK H@#pL0!xˢ.:bĈ .] H@5;挊[fDJ@Zgq 7ܰ*$  H[3N\I9bi. H@$  H@ 5玭NOIn^yf -wllv, H@$  H9wl2wa'QSj3mrFe$  H@zsǦ3Ɣ`hx6T;$  H@zs'g5ǫ^Rmf06;9<$  H@$Ԝ;9G5tWʹVW`%  H@$  [jΝ`yj3xs $  H@'<æZ\Cf/%  H@$  E@͹(M|d[hjV$  H@$лԜK1;%8ׅ$  H@"\Vzs<9?+KJ@$  H@sZUwfj<+ H@$  HW9e&kܧ|'" H@$  H@hs3 ؁̍*Xt$  H@$лԜK4;גck1_$  H@@QԜ"Y@;;Wcb1S$  H@@Ԝ Y@S|"ڄ$  H@$ ~F@͹\^\S H@$  HG 9kb:c5yJ# H@$  (5Ml~%K7H$  H@$=ԜK7W9v͜I@$  H@=J@͹v1b-:9Gq3X`VZiԨQzq^Q$  H@(scbq:Ƌgi6- H@$  H 5,R?f礷ċzq׏$  H@@&/lߴ{uYp]to-wOVCcR$  n% Psnpfpi՚#͙MO?駟6ט%  H@@ V,JģWG:ak4,|`vP>M6dȐ!}Aޖ6$  H;^ H Ps(NC%_j3^;FfkV$  H@s떏.M7(kze|n@$  H@hsȯ6/Il#~&%  H@$ Ps.tdyfhBU$  H@ 94L7BN:thze"c$  H@$-ԜeJ*gڬWvIL$  H@$ : 9 +zeGLJ@$  H@@@͹f#cHYlk+#3b$  H@@9l7Xa歶X=>O$  H@s&ƝD+{wiX`&$  H@$ Ps. MN;mرr^e呀$  H@ZD@͹E`{ & 29* H@$  H@9Wb^ ոi$  H@$ $0qoQI@$  H@ "\H$  H@$ %ܣ$  H@$  H j H@$  H@Qj=:K$  H@ "\H$  H@$ %ܣ$  H@$  H j H@$  H@Qj=:K$  H@ "\H$  H@$ %ܣ$  H@$  H j H@$  H@Qj=:K$  H@ "\H$  H@$ %ܣ$  H@$  H j H@$  H@Qj=:K$  H@ "\H$  H@$ %ܣ$  H@$  H j H@$  H@Qj=:K$  H@ "\H$  H@$ %ܣ$  H@$  H j H@$  H@Qj=:K$  H@ "\H$  H@$ %ܣ$  H@$  H j H@$  H@Qj=:K$  H@ "\H$  H@$ %ܣ$  H@$  H j H@$  H@Qj=:K$  H@ "\H$  H@$ %ܣ$  H@$  H j H@$  H@Qj=:K$  H@ "\H$  H@$ %ܣ$  H@$  H j H@$  H@Qj=:K$  H@ "\H$  H@$ %ܣ$  H@$  H j H@$  H@Qj=:K$  H@ "\H$  H@$ %ܣ$  H@$  H j H@$  H@Qj=:K$  H@k׎M̢ @jp3b 0#ǩ9h ,g @ @`Tr-V, @( X%H @ @ @~W8\ @K~XjS?G1x{{|1 @6\  X!3 @8*k-^l @, @/6 @s @ XG @B9rF @G,ŋM @B9#@ @&@ @Pr @ @Qhb @ @@(`9P @ @਀|x  @ @ C(g @ pTr>Z @  X!3 @8*`9-^l @, @/6 @s @ XG @B9rF @G,ŋM @B9#@ @&@ @Pr @ @Qhb @ @@(`9P @ @਀|x  @ @ C(g @ pTr>Z @  X!3 @8*`9-^l @, @/6 @s @ XG @B9rF @G,ŋM @B9#@ @&@ @Pr @ @Qhb @ @@(`9P @ @਀|x  @ @ C(g @ pTr>Z @  X!3 @8*`9-^l @, @/6 @s @ XG @B9rF @G,ŋM @B9#@ @&@ @Pr @ @Qhb @ @@(`9P @ @਀|x  @ @ C(g @ pTr>Z @  X!3 @8*`9-^l @, @/6 @2+OIENDB`actor-framework-0.16.3/doc/tex/fig-png/stealing.png000066400000000000000000015505371341123343400221320ustar00rootroot00000000000000PNG  IHDR 8PsRGB pHYs.#.#x?viTXtXML:com.adobe.xmp 5 2 1 2@IDATxw%E8a $Y J  eɋDCRA JXV@$(0.A %3J90sz}սǜOܮݣ&OO @ @ @ @@FkGC @ @ @@ @ @ @* PVn;#@ @ @ @j @ @ @U@vF @ @ @cF`„ O<#< /|GT{:A`,2/ҋ/N m0$.NBt!qD] @@ttαt@L:~ꩧno;ĉ;h t1c]tV[mܸq뭷^;ZE& T4#`ьu @ IǨɓ'hE8sǏVԯNToV;/;S@ . @C ;@h:Mӎ @mt0P}guֽ[# Й+.;8㌝B"@@;  @uĭU3j$`Q@'- TO;N:饗^ʋ5\ -Ptgi4ϥ]/oNz{クxW]wy8=3.%5 @m;t!qJ!@@L:Z-~t@L: 'Mt~oFo9.l6~WIBw}zn;xe}ُ>W=d @Զ/t!qb$@L:fN:J#A{o?㎷M7tM6Yj!@xg\wu &.EY!"Z'`H:[5 @@F8]&`eTw PN:7͆7R/GqĪZb$@ }Guc=v!Z}EOLiHE%@& +`QcM:~TM7~ۏ3ʔ @-8qyw'Վxmݶʑ @@+ [N!`ŬO t`i*Xi<ȡE<`wO!gyfܾuԕA ;+x뭷1^q饗6l$6.MCS~Nk P#C9/lH\QH @@g wq*d|QD(0IG;sѩ\r3܁D*{o-GfMɉWvmZ0$nʚ 9ĝs, t Hd@!O:zIs*J=tӝtIxh4*Yq嚒ײua5Px@"+ @@g wq*0k"j!0IGSN;{ oeYZ @,׬rU-+駟^-J @IC&F(`H܁E W&?wމ}S \rcƌv @'n=g=>vX2hRI( @@ w0L0p& @@0W#8B' @ׯq]sSu!A@3(Y:Y @ L: Pw!L:T'xbբ@\*V6nq% 0$("@ `i*&`kG\  Эt >_~ k= @^U쥗^k\گ!H/0$.NB0(¨AM:TuYUYg[Z @X\˪6׸*S}ҏ C>r @F5:XJ@O tYt&@裹tMWdG*!@@_->Uoe黚z\OVwx'@ /0,牔 @ &m@]nqk&_xᅪ3 -P 0LG}k꫟yLUcǎ]o6põZkiͬG>kvJgc^G:[Nzۣ @`H\ױ 6CӁ kigy:T_C;-'@kL:PvHGL7:@tT3n+bMi>_XJ+u6 'y睊/UZ?p35x٧1{nvL3M3Z[瞃>xJV^yen=WzuKzl} Cּ0Ci {⧽7x-yUQo-җI@zuKzC& 047XZmeӍ^>W]uU~KG*|[7nܨQ\ *^Gu_ITXCx7oMFӽ[{[o}}ҽ&?׺HnUU?5H?uAS;DxCD7cҤI\rFmtGD!J/|wk+v@zu{w;Fn0#~nSgSkr-A tW$~]-A`q#o|饗vtzhm=SL+?wHnU={j!~8hFvpoI|.NopD7l:>ȯҫ[MmC PJdcѳ~:ooIGzի:n{Cp%1X&K-&lϬwyEkO?˟=7p7'"o:6ұN;??_.?!bW (uW\"@]/`<`;[o508m N%\2ީt^uUnirO*'QI<(͑&@VӍn=ۯZ뷿J+4X$0!d!{IWQWiUz6h*'@x\LZ - {[o߲tM&Lu4Y=CW^L7$"5i4!T&97:>jm*n?" @@'wQK>x[>]̤o(]kS i @@W ntaK MC3mlB`j'N袋ҹ+ - +l^zi#eSN'ۿfm6fTGwLmJ @:GáQ!ebe͟O=T .OJsE]4]D4 @:azٱz?gB -4jԨɓ'Wx 3ZY?i3kM6IsVZkUɍ73w`W9mNL4WU;~KC=O/O<93rJ;mQ8Dꌏ" @szm<3i0o<3^{=eOuYNwi{i;!J"y䑫J(x߭zG0W^w_:]*mOo @%Sᐩڿ:ͪo?ZD K @@OM7:a>]_x EiȱH`=X1OU'l(+ӆ6boDvm/W_!V nNҰӴE'{i;>3izgf43lL׽  @hvx8>{ėD>lz2z衣G$ @Fuogs=t-lȱH`C@IoVZ0vtT:KN<9iuJ7.Uk eWE-MԽ-Q9 @`8=2)?~zƻǍH @t@L7>V{5yyWǏ//'pBC &"5t}iC꡹٪?gag5'M;4d{' 9眴?A^t͸?ᮻZeLv_I @:MG^!e} r)~zz;4G @zdQ߱S?㥥#sy_y &Lm#8"BS+Oy歬9@gVۚظ1cOچ6]PV|饗~j|3kV8`b5׌ǡWC|0>{7,B_A= @V4Kr<nuRַ~:={fGr4S @zaQ߱.[d]vx㍇Y LogB1ڦuboV5jԨV ;EŕVZ)ӱ*?9]luo  @p}HY7cxYn:ֶ @FMSW$Nl4"s x:DnU#O .qP+vwuW+.6^uU՞}t麷>'@ GS!e7R?fm{i8_?͔&@V^nnpս iX=znxov E G)é˶=.pc9Pɐ7ympvZ3`:^Н麷&$@pX}HYygy,]r%?^!" @@ t^cgZ]OfjI38رcgu֘w={bXo@0m7-?}'_>~O+is_O>qtq^{m[ y! @ 0ƺ){O~p7J;>S7 ;H Q0ݨX}j'F]?iZ/hGw/ln<А3W^yfVXaujj~WntN̺  @za<huR֢r6۬oz>sp 0ݨX=sԽ)":\,L&-ޛ.?p~07r3k꺷R @FJa[!e?#>=~/_uU|i @F<;hVhL3[o__W*U0qcAZCJ_,bՆM74P-!yVCޤrmHh@/CNnow} !x!\E @@O t͜luo3}I{5\3 Tknᆍ6ڨ[ouWUNzyO}nmIsF6] @/PpzH9`㣃;?pz=?9͔&@MO7wX}V|cTnqs⾯UKKx≃>w[t~iWtq駟~:_I$*]q|iшAS @@AC!K/7D[oxַ(u"@ZӍ9VΙQ1 O[?6ٱE\q[oSO=niΜsι[9SңGJVGD @w:a<ڵRӆ!`O'n hԨQ?N9唘 6 @t@'L7Z:\oXs[zY{跤m]?_gufa4o:B{s=E0XqLYG?QÃ5vi~l*&Ms{toz['L0(WuY9?O~{Uf-b$/ @pzHN=>V>cbPH @"0Ӎ0V{G }C,+l8=iҤ|޾u{wC0y/K/"1lM;oO>.f7tӣ>Y!ƌ/Ʈyw;쭷ުr{ď>tM7Mt_uD Л#>Z)[iÐ3'袋yo}(A @O7Z:\oX{J!PkZmnӧhW^/Kݫ%\~jDQx=)z\pm9i:LJz 'ffqw<<][n|4!og}z*g\4Q}&@ȎüCʖ6>p0o#i 6j @=+0Ӎ0V{{n#;pr߻^|vk_گ~^xo+_yxW3ܷ(rnN:)u]zV-[wec9&;p_uUqe]6euYgi6Zb7hKlZJ|ߍ_U ;  @=+0R 9c>r)6)K3NmxSLvV* @FjцzKuoƺC@9Z9:V @ F׽SB xwYOɎ'lcGoWݎ۔ؗ_~yِ^`ƍkwq%⋿/[:̙fO?蠃Ǝ;u^x'.ֽ}{$ г#2Z) j~X @@^`Dmt^O %0az /c\y{K.LqW__stxj!y0aBcSO=<'<|碋.Z|mL o]s5[,Ղ . 6۬ɀ}۟PD5rmh|tH?>J  @F-׽MV#ݽ}[^{viS1񦫾!0dxG78x7[ě?Z+o"WSkx%\2'M{$z+x+v: +T ?O1Dw^xAubO;QF muozm+_\xSo;~= ըmLmk|@hH_SS{J Й&y\ު6O76\oX]/0;}7ؖŽq7> /Ķ30)2`:֌;Wo{|7ح\V @@[!eP- @#(Fۆ-׽#x5"]Q%mXnV[-wG-mڱ @8@ @;L7pGug#>3oq)A @ @09{{&У_n3FGP  @#`<<= @ 0("@@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @NLze@IDAT @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @s: @ @ @ @@uqR @ @ @ @@N@: @ @ @ T'U! @ @ @{w%GU{fL@EY$,AP"OAx<*PQG" $63NHwO2Sݝ|}[w[_u9Vh#@ @ @ @Չ @ @ @q: @ @ @ @ qAu&$@ @ @ @8Au6 @ @ @H\@P8  @ @ @ @ N@P @ @ @T'NjB @ @ @Th#@ @ @ @Չ @ @ @q: @ @ @ @ qAu&$@ @ @ @8Au6 @ @ @H\@P8  @ @ @ @ N@P @ @ @T'NjB @ @ @Th#@ @ @ @Չ @ @ @q: @ @ @ @ qAu&$@ @ @ @8Au6 @ @ @H\@P8  @ @ @ @ N@P @ @ @T'NjB @ @ @Th#@ @ @ @Չ @ @ @q: @ @ @ @ qAu&$@ @ @ @8Au6 @ @ @H\@P8  @ @ @ @ N@P @ @ @T'NjB @ @ @Th#@ @ @ @Չ @ @ @q: @ @ @ @ qAu&$@ @ @ @8Au6 @ @ @H\@P8  @ @ @ @ N@P @ @ @T'NjB @ @ @Th#@ @ @ @Չ @ @ @q: @ @ @ @ qAu&$@ @ @ @8Au6 @ @ @H\@P8  @ @ @ @ N@P @ @ @T'NjB @ @ @Th#@ @ @ @Չ @ @ @q: @ @ @ @ qAu&$@ @ @ @8Au6 @ @ @H\@P8  @ @ @ @ N@P @ @ @T'NjB @ @ @Th#@ @ @ @Չ @ @ @q: @ @ @ @ qAu&$@ @ @ @8Au6 @ @ @H\@P8  @ @ @ @ N@P @ @ @T'NjB @ @ @Th#@ @ @ @Չ @ @ @q: @ @ @ @ qAu&$@ @ @ @8Au6 @ @ @H\@P8  @ @ @ @ N@P @ @ @T'NjB @ @ @Th#@ @ @ @Չ @ @ @q: @ @ @ @ qAu&$@ @ @ @8Au6 @ @ @H\@P8  @ @ @ @ N@P @ @ @T'NjB @ @ @Th#@ @ @ @Չ @ @ @q: @ @ @ @ qAu&$@ @ @ @8Au6 @ @ @H\@P8  @ @ @ @ N@P @ @ @T'NjB @ @ @Th#@ @ @ @Չ @ @ @q: @ @ @ @ qAu&$@ @ @ @8Au6 @ @ @H\@P8  @ @ @ @ N@P @ @ @T'NjB @ @ @Th#@ @ @ @Չ @ @ @q: @ @ @ @ qAu&$@ @ @ @8Au6 @ @ @H\@P8  @ @ @ @ N@P @ @ @T'NjB @ @ @Th#@ @ @ @Չ @ @ @q: @ @ @ @ qAu&$@ @ @ @8Au6 @ @ @H\@P8  @ @ @ @ N@P @ @ @K|F&(r?rUMdƏQz?f+쿮ȑ#'O~ 2d}nO @ @ н5}.(yݴ%7Y`>ïoeo[t6J+g̘|~S=lN;-v۸Mګa՞aU__795uE6> @ @ @@ khɾbUMwswk.;rW>ux.{źr[ꨣ]|ˬ_P'|S8gvիLd` _ʅ/ ^~v?e=Pj͚ } s濾gxQ%}X-ʕX*'bܔZ<\z!hPQ @@@ЧO0vT.^j4~wÌ9oϣ @ @ ꎽl/Oi&կ  P@0dXilko}mGo]F{)2 @ @ P[{? 6wH^a}݌l;iԈ͜p @ @ @@ ;6u_^dIlMz wkU ,jj9[oDiMF @ @$# NqYMvg3G|O+ aw]|O]4n? :l&&@ @ @T! ®?03|D棟 Fo؟ W7|%?;׿~wƉ @ @ + 婾ꫯK{>A~ܬW '7Y__Gj @ @ @]"ԓvm|OR;Ծ@Jyy|s~ @ @ @ Չ?cg}vt&e&}$Jet@p[ 9 @ @ @@ 1WO?t~¡J }rܗsvz @ @ N;p%,^0Wp+* @k2M 9 | _hnn.( @ @ @:S@P9s OOSZwJxZ YHJ L Qkyg  @ @ @N&C}3\d>sVЧO2 3'_7k??o'1 @ @ @QK[.˥](l3:މ}K_ҵ89 @ @ лz&zSgy;u&#@2h5uɝ @ @vTo⽏%80Ԍ@CKVF̊, @ @vTW}W\y饗>+w;}ojL`u.{Tc @ @ @ Q]w_ɇ]YU7'(+"@ @ @z[1& ùojOEjoQVD @ @XAuuyƌ1a Wu[9 @ @ ݲ3gf-. mi^R[ '@ @ @/ W>\G7 @ @ @RW.hj* @ @ @ @2AueNz @ @ @ @@B MC @ @ @ +sҋ @ @ @T'i @_8@IDAT @ @L@P]^ @ @ @ :!H @ @ @ @@eʜ"@@W˗/W @ @ @ZXt@`no]|]Æ=zt-i  @ @ @"`GuoӮ eQ… o'@ @ @$% NJ<+WdɒBY @ @ A5- @ @ @- nE- @ @ @t`MK @ @ @m vQK @ @ @$ X @ @ @ @@]ګ0`@obY @ @ @*TW派בGٿQ߾ڟ @ @ @ P@][+0vn?T @ @ @ @Z;K1b  @ @ @T" @ @ @ @@ ; @ @ @ @@P;@ @ @ @* Tn'#@ @ @ @A @ @ @tS @ @ @վuu>}  @ @ @Twi  mq k= e @ @ @@ wu LK5.^0Gg}Z @ @ =&l@.o{iNd< @ @ @u0 W,Zu# @ @ @Hꊘ .\x'O>=5MO50Ф@ @ @ @Q]Rϔ)S)uy}Vx @ @ @T# F+7o^a@lI@ @ @ @ xwP.ܟo gX>7;kZv#}wfG̟Z,˦H dR @ @ @oș|!Orb#KW4#OUaӚܟo{(x ՛>"x~Aڳ6qL @ @ # DW gygi[҇MJu%@ @ @ z#R;|S^U&G @ @ @Au%J]= 9z#ۧ/y-|T'woQ+( @ @ @hO@PݞzT fs7_[z{';1^J] -}-_0 5R$@ @ @ І@:Ub𾿦K>&mRG<N v}KjтJ @ @ @T@0w-K;ޅ Qz>ᓩ> H li槿8ygԍVn @ @ @@7Twg:F`'~mmF¹ en$>pwV.Z8u)St[* @ @ M8ˮ]YⅩeKRkVL  +sԬWŋ3өsn3:}3muPB[G/On֍@8_~{,*  @ @ @, wkI \0/wӏzϨ1ޠa(<5-|ҽo 0(st4[ORikIP QѨl-)@X\k @ @ @cj^&{on3WR>解-ڠ> ?ߜSapiK>@SӻYڲip[W^(6nuD @ @ @Au;0 T&Y7?^Q9e/RIi?\U_ uQAP=2LmDS%vإN @ @ @TpDp쏿*yo~!O "|Ԍ/ּ1qKsk9SFgˑA[MkgRi?̞vlo^V]Q8SrcvH8PF!ʡ}2OOgm9lntmkSم+͈Ξ*yTxzAwF3 @ @ @AuuDFV7=D zwŋ4$v.֬/Emχ97uJaqnöX߫?m'y1'2w`I6&liYIK͉sOt(NwPir7{ z7K%@ @ @@IڭUw}_;{v}S5tc?fJƷ%z Q3Kɥl\_v%77y-|tƓnB۵64q׶[ּ@G-,^* @ @ @$4}=yυ^)Xq=?S`q7쵥ӷ-|5υ6 ;RDX0+vt!j-Qr'2G%zyeC=~vq:s @ @ @ &L4=_<3U4 /x5ѫm^90(=ŁW/xQ)}aյQb99\ |$~k̗;TOX \z;wyGq t @ @ @$P9#F[*Ɩ[Uy`V5WicX҆M.UNM6)mV͟W^hUfLY-Z_ҥK젒 @ @ 93 sg.>1P._E*)vم/NmNק+=;?މO|!ImS,9M`^0j ŚHGn~˿:zUW]u=|7n\M_ @ @ @- cu /OO-[np*^)׾gzoVB o4߰&8z yIטOozc¹ ZuXX[ vACCį^ ~V @ @ @@@.H; iV_ Yh u*tqS[jo/W*[lҎ>~fne e;PApw,l6(O^ @ @ @rykk>,ݝɤ6DQ SsfQ\'ϳv.=lU^07_j?6ėl*W^h5!Լ@𶃂' =O;Ʋ~g>arN @ @ սQ0Lmz[2+-ۮ/_ rn(gT*kZsl)nƖօO0zɧtyIb L>ß}Ӽ;ni})⦦K.䤓N1cF: @ @ @ o=I r xprꋩ5 AoM (>r_8a{SZ{GuTpv/gJw?4/B0xhbswy91GY}w5jW_|!rG}2eJ  @ @ @o*DOzY_~SGW7*P:=tOVkkL])v 씟 k6*T? }{픲?^ګ4櫣X=w;~*K ,tmp՗_k]t_?nܸWr?9svց @ @ ;p7GAVon";W i\j˒JϝdaF\ߺO m.6xa7m[lzmFJǮo -٩Sr?^i}]*8` v/]sOԪ.lo)4O=p녚Bf/=?5{ŧ ㎿oO?e/8qԩSԁ @ @僇^?3p˩X8Te.sIǣ5WGT.IE~?D!G.my©Q\̉W];cn 6#|psn76Jgk~>w 77=o gxnA7"(>C:[|YtgСC7 @ @  D.( J5*DAso+y-oyFŊ`m2_f7? _xXxa)8}?=<|ÆcNWG{?D'klKE-acNMEyKG7dNl掟^k n]w~1~=wqGazh|O @ @ @@y{U'p**`2_?JWi'qni׵HGvh=+~~3/ ػΩt&xǻ3g']Eu _Wѣ?~…gq׾e˖u+p @ @ @*J:%йA~cN ?({R3^j>9^vh=:`rcgK q$^ڷ~uѩիJ |xz=6lڼ噓?3i7^jinc>}0;}ؤ zJO{oK.dʔc/o~ᇣMأF @ @]u]m$>Iz%zTE >h;rw ۩ϥ3|>S/ Woq8(zwjQ\ڿrROO>3؏G_Z$zr>4$~+;쓎's-RW,b`on׊@ccy7a„s9gܹzN9[oJ @ @Au. ht>9}c*=*JgH{ VZL @ @r^~.. w}tPȑ#(,Y2jԨ?~=v  @ @ @-  @lЩP޴BZٴF @ @ @A{]v @ @ @!Au K!@ @ @ @@oT  @ @ @ PCB @ @ @ w5 @ @ @ @݌QFö( @ @ @ @BAuPott׆a^ @ @ @@ kX!0|իW['>1{n @ @ @Tt@:P!C?+y'Nx7 @ @ P Z @HppjhlͱەKi{{VK˗s9~[58 @ @ @jO@P]{Ċ й࡙.?۶j=y566?'?N߬#ϫ @ @ uO[3 @@' uöI4¾/73fL١/:+_YdI: @ @ @]" bk3il{Nd[o5Z @ @ @, '8~e7l@߾}Qz4o޼SO=Ɗ+vց @ @LAuu{Ol~L.{MI7|QGUd'M#ŮDK @ @ IW^]T,+ @@' 0 .я~4|𲧝5kI'tYlg @ @ @NTwS @@r!SN=W_駟.Y @ @ @-l~@!C|߿K\4/lg @ @ @Tw  @r-|;˞/?>,YR @ @ @@ ;ִ Щ#FO~r766=s=w @ @ A5-t1sM7>eϝс @ @ AuF`ԨQ/<̆ W3TS7 @ @ @ Au"&!@@W˗/ޗ~AtI7pᄒ.Ͽo7zh#@ @ @T'i2tCpEg^֗͘1^AKa38%{}% @ @ @ck+tKr eQ F+-E?wcǎ-)S @ @ :F@'0~z$+ %K=n]wu'nV8G= @ @ :FX|XNG?ju. 444|_կ~۶wǏoI= @ @ :YOXuqu*l6h+zɓ7sj @ @ @Tw9{@~u&[lwڅ\s=+8p`*~wӧP@ @ @tCyMcu--ONF o?# wqǍ=p@ @ @t@>i!@`灧(ζT`(޴"@|F#@ @ @ EE[,+n vwu.4%2u2p @ @ @qqۑGٿ|}߾q5Y `G?lKܜfC @ @ @FvToD[1vn?}5^|V=<`mSQz!ý  @ @ @6zC#FmHB`]_77X7 [l @ @ @ @ 7X7ɟ,`;" @ @ @5+ [ca=M N7*k[t= @ @ @*TW DG`&`lNd @ @ @. ;d}=U NY)lέ`S/u @ @ @(Tj(>O7X^?}C68%/_4`3  @ @yY@wo'%k ݮz nxwӦM @ @ t| Q᪕lNt>kH6?_7ӽ{Gr)K.M@ @ @zT5F?|\=\BM u uYWޠUW]{D  @ @ @A }•+?ٖ^uO7gN?m?z5~"r{\:a„V} }T @ @ @' }wCO~nx\>5Z]\.YZ]v|n @ @ @@TW}aŢi +-6Xo lV[m=;~x9S+ @ @ … 'Nxɓ ֛@Bk7XH4˗EOhb ^xa]]]l6uw}|Z  @ @ @@TWwL2}gߝ/:o`T~ѯMZn-LW |bРAe:ʪ/(.Y @ @ Sy˖ P z'eKGwb@Ї>SOze}ѓ灗 @ @y[]T/o8(կ1W/[6{n/&vm.|_~a @ @anh}}}q@XV"P3 p(YHM 4^_7Y\gq?~]U>M0W_-Y @ @ ГY],+=ASKejh5|); /y{UW]U @ @ @*Oo4$IrEYּ@cFPMd2_y=ܳK.=S<9s @ @nbpMKM Q'#nJU>쳣ܺSN7n=u @ @ @]@P]9rdqyŲn"@7uzт(& غ_Tw"z /o]v){} ,8c?,ZfY- @ @ @ ycƌ)XĞԢRw5C U 7aKxFӕ~=>wEJ.}ݧMvZ @ @ QFyhuzך@~X8MwBGAދQ)AETT R "UC%dDtϲdOyϜٻoߝ3kx'0޽{MS@ʕ>ܩS}nOyx$̥JLV*Fu_)R]2N;vSN }wn'c     Wtww;꫁f{^3NFIkQ*c}yxyki38ܜeagO6ͦcǎ^^^*;pssSi0 @@@@@PG*fd>M{UFwJ-9$Mn h ` vi:ܤaaa+>}wyT     $8@?kjO֦ǁ$]8erȽ;2kMʸi\4 >1U)       @:Sxʟ-: Z@˘I˚CR4^:ԩkS[4h|tIҥJ@@@@@HHq]4uGBe\$IƇ\f 7QCReȠJ      Uj*P7s;&d|x_ܴ$^GG4//ɝ_xJ؍+dͩIMܼ -ޢsΝӓ F^@@@@@@ $cfv93mޅ?MZP!i6dFJ@͢IcHIchhx5ej(b ~IP`F(      $~%߰Pa mh>IJ􈀳 h^Zjkȫ9~~} d{=z갰U.]цx@@@@@DDuH@] ~ѵЯFuH- #!7Y3iiZeS]FR،$Fcݿ;L+WcaǪ'?RT):ϓEO@-믭c=zԥK:u\z(-     ēx%K.ZH"/]oƄҹک @X,j/%v`wȺ1>yl|p/Nn{;Qtt5Ԟ#dfvpI2W 5k.\x޼yЎ     @ È[ϗz˘1ܹsL2{P1ѿC/U)Ɇ2fVgόaAO; {ؒ$,TZPiGl 3;hܾxhDgl2aJHQ;m )RH:{odɒSKǦ9ю     7H1^<==pBR"Fe7!td,RE hyR;I?n7> ɩ'-MBG}f1FLųk6jnu,],;[6mlF= Db       *~[`ӦMSK^:=u[I|n~$y(13>^`|p_RO/ݻcܸ*t*ɕzͿ:\b78"F8̙3GN#Ǐ?p]qFÆ ;v_EQs@@@@@ [2 ڵkڴZ]?ZvqzxVeUlܹxՑ(Îkތ39!aaQvjyPKB+WYKĆUU"Tزujֿ#OG_n +P+%YҺN;) t%K67lܱx=O(_R֭[ţ $O|ƍ9l*̚5kӦMU &@@@@@ +'IC[Vǫ?~ܼӦ4Mqg尟-i-S5hwj5af.!q;ƇC)1Rsɯ$n@IDAT?ֻef=xKDPU߸BҪ1Tk yFI`]n H4zGƍ}+WDrҥիw}ܸq߯9     @HTLj+nTJIΝ;jժիW_|Y&v{O-Tx<מ“PCS/^Sk7V6˓V]8i3(WI4MȎh?ձRn4wXQ_B +oύʾUF̅D{x_쉨~ߠSbZj*T65k)YtJ`JON&nj~A=Gw1}grvؤ~` 9u˞=zVFҥKg:oShzxx̙3o޼JPBLchA :wQ?ZZD]>}|6l_     Kձ̳6{8qlFkn捑6lgϞϟGaJjfZ",/_ѣۻF ,+>\fM؋׍ar~ s}k7)T>Z'#JAjq~~ѥK~,:[Hס ons?x`'O &@@@@@HTG&C;8zKo-_4t9h}I_"h4n۶M,_jUpxpplY_oQ 9ݻw/^\=_f0     X >L  d˗/>uc.K52*)3[Μ9v;vT[PE4M'wdYZ`ZMy, H\X}ן5k֝;w,"`ɓ'WZ)Sƙ3gю     ռ@4hl)7NW)Zeho&Ν;7a„ʕ+gΝaaaT[u9re˖#iA@@@@@\DepE>,1TKM_el4'r[tٳ5k֨g)שSgƌnݲ} If ,H>ij+%K͛B@@@@@HTGB#@,YvOj{^R R ?-=6JiK&O\j=zl۶-44"*v(ТE 7\|Y-q2$@@@@@{p1@ :v/{eH}qOH@𿇷dls:m>ϟo9s&M4n8O@b x{{k.u@@@@@Tz6ĥoMj|}eIxl%^zZZzu{*m@@@@@@p\Վ{9ĥ@Z-v2]Jm͛ӦMQ{キaÆ"      !@:!8@%ԞPw͑kj”UN?ثlhܾ}XO8ŋT@@@@@@ QA"@ ߋ=IFOImR{[ 9sfڵ;vo[PE@@@@@YD=Ɔ ->}nݺW=Y/ҫ _S^:(J$S!޽O>RϞ=k@       `$0$HLmf̘Q!<7NZ*Gvyxt9sԯ_]v˗/EU@@@@@@HT`0 I$8p>'eD[L,cٷoZ`=f̘ӧO[Ђ     ؃j{ KzŊǴsypC&z)I*];l'Hb1O 6lݺ%K?~l@@@@@@H\Չ@4M߿>dk@br!fʸk;3ˬ72r#F8v'v-p^z̙ϯUV]!    JDu8 ]hѢM6gG 8WB*tA)Yʔ)DqpQF`vQPq@@@"{Hi8+ xzz&$I̙3k֬ds%Q7vڵgk*ŰX lB@>b-YIٷ }vfC !ЦM56;|"ڴ"@@@W{xWP_YQW7=o|JA`y7aC^nzϔ)ST;H"   +=+e@> 2=۷K5G5u۷nZmlm~rHƚ.f'ňf'    c =c/FJDJi,*K{:|e$]%rڵk7k,khEJ^oC4kC;0..94IЫW2mVT%IZLQ7oܵk5j|w׮]@\ /_|At:3gڵzƍ &@@@Z1x_@%T:^*|VI@ TDT)@:P1۱cGӦMF^:Ánk~_j"m}Adq%l"~ T AqdH9$ իWU_!i-zr)! hYsh*;O.W%ߖ^g'jIbj a|fV_͏,|ƉJ?9rm[Gүho-sHBhF@@@{xy Pi>S)?qw7MB%UZP}(Z(DSDu4b?3}&0sPI/dLt/hSO6M%{ 6EWH*ܹs,Y>%{>szlBBB҂   *z6N }*>i:*-B!:$7n Zn=?2g3o+%OiH':%wO)Rznaz?Ibj=?UN4ŋTxƍՍ1ZǗ*U]PЌ   s=sGfC _xhiY!jse6b[f+4몙_Ơ3B@~Ÿ:>Uʳ`j yx Jj :uti͚5,lu7H7C K.3gNʔ)m^eʔ5jThh`@@@@nno CT/< XUgD]&QO mh~ns41@4wCvok}T\y„ ϟ@yz6OWO:thr^j3@@@CېpeT@4GPBaeB92ՑĬʕ+{6ߗZ) UĬ@q ǻqܿW].4#/{`M,{Y֭V v>ӹ[oM4͎SJ;w،$@@@Jv00 yZ UP}d(D&`?,( -F̟,I*`RLLxDr֙f^nR|VFZ%efNۯ_J*;̙3 }nݺ]|Mg={~BٗZS j4/hE=+/ ɇey+V5jԩShA :AW/ETPg4E}pN$@DBXX3y-@d) S\WITy?n Q*-s6SVdȤt yW)E(`pm uIQf*˨Xȏ;f@ Q xxx1bǎ |:wlH@@@S0*P@% ͗4#Q SLުW)!kh *RIdJ4^`>i,XЬY͛믪uEBtP?wUխ[SLiI@@@P0$Z <]gfۤaQ Qm׃L'5mY>t8pq>MUJɦ EJ2!i[q>L-O>l@  x{{˗o߾}lGL;   ؕ`0 .TICSJ&2SjsfϞm:A+RR˕T&`hRTSYf2K2|F6jElٲI&vu\^\@@mV&M$I\"   N"Nr#'*uh9sJ$_Z@!zK,QLjMe  ZڛUUlӫb$RjI% 9>qȑ#;[Ђ    |w#CG͝Dud26/^lP"xP)Z=g^; qVbMaэ ۴iӠAs޿"*    =;F*uhg8&&N>}q ZŚ2pY-Y Cf?UJ4yH\c%]nΜ93vXz@@@@ޱEkJ,5o!Q7+RЫ@%m`0 yW)@Rs ?-=6Hi_HH|n׮]z~{YPE@@@pw;8@ 2bԦ/}Z]@:6ڵӴe5*/@@Dss74hKܽ,ЫD@-.PM:/1sI׺s΍7N-ׯ_e@     = 6TQMakF/a ʕ+ %0) ŵ׊[zR $O/ʰf)zgVZվ}:u̚5ݻqxqB@@@??[zF0O#pKȫHTڵK?'Y -SVJ 1m&j׳'Ǩģ_Yޝ'cH/$C~k]pa„ *UӧݻFu -    #s/ @x1Y S/}Z]@:7_%9L;4,ZDΛE?@)Nj}d z[ܽ,zW ׬YӱcGz̙AAAT@@@@DF0 xud۫=Mްz<ѫL [a*ͿL"$k֬͛7_~=;XGHDѲe۷ohT` ^hye@@@΍@N̒DgLanhZEV ӫX IjC>a`F~Ŧ5k̝;1c]r$?bm۶{!    # `)M|#1nOH^/SB  כ~#/UJ"-cJ)z% <8[lM4Q;?!:Pϊl?ZZ9Ў   6& `f)ŗ>lq?\13};LPP}T0ƄHJ*uN)Q<,?z٥KãFzjBٱ@$owztѣG@@@@ |M(@QSq2sһ۹&l@  5~.;*DA]ߊ_1\xqСjuÆ W^kk"liѢYO>۶m6# @@@@ /`R|#' Q3'O'x1(!@djlh,I!ɠo,I-bŊzȑcĈT]JJ9eJ*}'AAA6 @@@@Û(( _s~$cf殗)!h>I _^/N$QZ_`zd-a=˗/g*]]~+Wu -N/2e 64oL'(Qb޽6 @@@@|;M,G3!Qc2N@b*./2g.z;%;N.oud^)x%OZAٳgWyK.YPuzTR-\_~I&?~lٲÆ S{ &@@@@p.r&$fhZkSJn'c%{ia^rE= =Yd6%K~=c3@@@@@HT;ev `G:Mߧnh,ȎP#L׮]=ztܹkժdX[9k{w+ڜ`ppp߾}Uٳgm    8)'"SCC@ːIXKrb^(^I\'K wJŲ֭kڴi֬Y t9N)#G-[L4ϢEN6f$     v;˼@ UJȖQRr,?i*fIβc~رcSFE={:g4W^(]:-f]֬YStnq*     $].3G'^ }4䏩z# x&rX*$-&a47lмys??9s" (P`ǎ#F9.\~I     d$2wtyɘYo#$^ Kwn.o=7o~Z BBBchqwwC޽[%m޽{ڵSϊu`@@@@@ Q4 chQ}oʡz xx6zT*$i,&Xo޼UVYd۷S,:@ݫ/I-YDe-[f3@@@@@9lsd 5v4 Y^?I }~\/lC xyyeڪ\Ԛƍo6 @@@@@]DAƏ)`D ny,!m eH [>oӦZ`ݧO'NXoݵkWMlTKվ6# @@@@@ZDC>**G79^|KӉ2&@:͓|E,oߞ4iR+TO?9+(iҤ}ݺul:ԬY/I     $1rplJT'MמW)9j%=7˰R$Ko=m۶k.s={I [ӸrP~W)9@.UX߽{*TPճ>}3)St 2؜Zm3@@@@@AHT;c Zr9kF01MwO)B>(OK|:GhԨZZݸqҥ8    8jǽw^@3է覬W)@h,խX߻wo/[Y8wѣ[jM&O(g     @,HTS@80T+ɒ.+az . F/L ձ^`iӦ,YTRӧO葋93d0hРy͘1J*:     DSDu4CQ@2o_1}^0IцjyA|&UץK߻wu-     ؉j; \]@+dΪ+-OUJdzdR P+ՒҥK(QB~GO@@@@@ED Ɓ.. nAzjuzu(uKlUj̙3=wm@      %@:. `).s8eQ@ bTY2t[-E"3g|7-޿J} !      @:й$ N3q/L~Y$$`0H:e$GI/rСݻ;vܹsu-     $B m-uZCպzܱ5rh^M`qVbMX?ydʕ+RȔ)S޽kK@@@@@sqNJ + hjIzHX^@tjeei0F>ȑ#=zȒ%;ZЂ     @ ?[zFb#yyϼ~L6W)!#Rk ?#=6Hb8ӧs}뭷 *_޹s"*     !@:>Tx%]byuJ14)PM:/hcñczvn۶a@      q(@:1 MܚzrG ԫ@ R ;%o-ӢbŊ 8qb``EU 7o^Æ WާOs9*    8jLR@˞[+YVr^Ȼei׫[dij/CʴwoՒ܅ VV-o޼ƍqEU{ndyi=}tRd1#    -@:eB?͛7)R$摔@@@@@ QęVdͩwn< ԫ?$rzDlۋť={x5kΝ{̘1׮]jʹ`=xcǎ 4`q|").    e]8 `'5n]Y6PRB reUi1E[_Ζ-[ƍ׬YfCK TRennn6rB 6# @@@@@PDub /ZZ7wΒG*%F I*];l'Hbqϟ/[N:r9r+W,&ᄏ}ۼ۷[hoGN@@@@@b$@:F\##`X=1TJqpU@7LwMZ}'~ŬI.^駟fϞaÆW %a^ǀg3ؼy .ی$@@@@xuկnH @ h/sbXW)!>)BWt@r+T~zŊˑ#ǰa._l@5a|||M6ؼիW՚ѣG6 @@@@@^EDq. pZ2~$^@b (-mg`zd+i=ÇtJZ5 rʇԩSt5c [F'@@@@@ v$cY @B h^<%'UJ$wry +I.b8aaa1aٲe:tz[eBJ {RDZN 9M޼ysZzɓ>#_9ɓ}||lNeE:uH@@@@@(HTG!@N4OCV\ *%E kK{E:$y*X:00pĉ P}砠 ZD@Ӵ={߿L26;|qnԶ7nܰL     YhD]Pʧr8MRB=.U{KR7[mV-;vZo_37;v9rͮն 6# @@@@@HT[Ђ8[6@ɲz([@N1i,YLΝ; ۷E;8pss2dȞ={)bۣGNl:    &@!,ٴ7*C3W.W)!^R,NJ&֓P[);v̺8(V޽{o0ߊK.    /]"(`X1LrY0f,BrYA4W\jCeSǵqmۖ'O( (@@@@@HTG&C; Z .ӫp8o#eH_#9Nr;j??k,Xf.W?~tj @@@@WDusu@U$uZY^*3[S`1j%ZEΟ?;wnTU I$|fjq!u_~T@@@@@1 hFm>/UJعe /(_V} $xӤIӳgϓ'OnܸiӦTFZjڵϋ+_ YFf0*     d|d7 +  ˙OΟwKJ_W`$pil&{~gO"uҥUZuma %2enԨQǏW7D=J      S vʤ^U l s^ t<37;;ݰs;Ҹm%nryd.?O%٦dɒS[')D%    8z.}ٻymT}9 Ү+I]d;k[0]4liQF /ud>ͦcwFɣiCFq`Qƣ LU5wGꉍŅa,%ywT=^ĽBaM<}05j$_n޼y_yI D     z.-}f |/uu~̇iվr%&`^OYpYbjKvFd)zP@~iҺ pTh[@n>T3?I -eL晤    "`j˄'HT'"B({Yjqsm?|n5=r;-,`ty5Ūţ}DiH?/"&*j֬)۷Ϛ5k D@@@@ ls7U0BÂm[$M@;lS;f$˸Q8w ?i!nD6qڰR!|:o^? =%^@?Jrvaaa;wׯ_jՒl@%    +p56ǐ3n}=L-nAoRu}Yyɶp7Ui[4˸q*F;ZuMkG _ڀ8q@ #6~.~VD_Nr~+WӧO׮]s̙d*@@@@@sÖ{@@ XpLR)'TZ'RO\yB4jZ :K]$򪀥a+5!b1F cl1]Q8K%K;nذaǎ'K1`9ԩSzjLy"   v9SML>!D HTfzI-)RҩaIFa4l)ʔ#Gu{F\mmME"!pXu^6qwy;sGM܀ >|~%J{+6xͨA@@@MĝzFۖE"F S0QEU<0 ULvܛv?v%Bo 5"nF"0Mg1xX6ZD'8N5kx9P!ߺM)"(^v5k֘L+WL0J*WvlH @@@4K톢di5+sj~U$@ Hأ:H.4~ҼtA\,J9rEy38u8yԼt1gsq}+8y>*4q_M]L&2JiI #S&Ko&qD˷}ct~#~,Lr2'ݣG޽{wl@%) L4 ĭǎkذ??f̘Д{S@@@7=xzye2,!zX?zCX>:d[FI4  Qiy\<asY?%JYonxmԘO.3-_KeT"-P8G+:3JNh"Aq>",٪X*0bD"Oq_ņIY"F#+{۷m۶rG$P@jI6/XO8qӦM{ᇓlC%   K=>{OjEKX7Xp BoT[LՁy]l~6~N͛5Z%O loT%h FXToKj ?M{ټiJ[׮Sʣc"4ҺooY]s]yAb>)}Ul.&NrեK~UT)T"&n| _|7JD P|   @ 䮑Qg?ynyF;kO=&*A֙_۾RZ)lU)eqߥGl_O\$rMM*? s*l^_u[vϋ齓RWVm'OOR[*͛ܕj ?'R>O@@@@O]x{2WBn(&3Ӥ@2Q F]2CfegcDDØr1(-y r%6~Vo*L3y9Q斍PC.Ȓ%#:ms-mW>8QH!Ț=5Q웑Ұu'0A_(Wbos^>KϚ5O>)WUV D #=?4 ?\oK/d   /r^yqGmNQ#FDu\J&im,aX+uj-ja׮ʖn6ׯRe,kҠeOHcOK͘on ?VzIk`L!ac_(ji6]/1xM +qlc뮻zݣG'ـJ2.;wUVuI3bbbFp©S})7S@@@_?x4x4yº/q>Im|J PєS@"2[~1ֿ'W~#䫫:K}##G Kˎ2/$gfCv[#s'Ywv u:z pz2    7<]N͗X۽Yk-@ 9=-@/0յv\"F5\Xcf]])28`KDnSe+]}改C;gNЧΖx;]$%#$EG='Ųu(?OعD RHW^y ,hҤIF6NBֿxjV4hP BW    U=xg5h"*@:@/,r.E,:=q+--̔#U}PQ\B<~Tmwѷ=i#,}JR^b5=5ŅH6;K#Ņ#'ZNYf;vl%KL܀< Pl_~w͒%ӭ]jժ_Ӗ4@@@@?Ѓw)O͝W]/9H@@ ʤ.`WC--NŏZ4 u1Qd8Q]F#Έ3'u mۗ}5Zp*t'B1QbWN_&}EL"=*(7 0O<ܳg=䓙3gNЀ"X,#Fغuԑ={lѢExx4@@@@̃wI~KnJ݈͙D@gI 1#G✹JΟ:cǚó ñyǶ eěsgltbHqц?u(`N-#靉u}M2ɓ&L{7/ TRe˖-F;;ŋ+W,pڒ    O]*[WRQau̽;l[7"'@:)3y:Q ''${kؒ?yLvoCʗc͝6 iӅlM|94j%Bs|;O.I;WL"{ݻw)@ƪ|54To%E+ 7oޜ/R?C:upw@@@@ x.{,a9UmHU$@ R y32 `,r +*Ny'I'{g) 笟~o'ƭS /`d4iqbM^G>;&EǍ'_oxa]čAG|kРA.Ԍ3K.3 @@@HgQԳJF0]tky"%@:'(T4M5 ڵGUZ(>QmG='q`ۼ:U]<ۖ+B .nG7~[r޽{ 7o^cD@ eƏf͚;S&>}g\I!#F@@@_̃w9cxJU?l;REIDu ]M)X3ePtZooڒmnժyCԶ~&nDn y1c/#[v]I?FHug=+gIJѺHu<%gp%JT):u?rԌJ^ju֥1m@@@@<]N;e}Z=Ό( wī0 X$1gዌ83mFC')KzoN#Sq=qCe)WQW|%ҽzk?" )&J8qv۶9l->%@_r)3Ћ/.ZnUdFȑzUiB5   @/y{{jy--;ꖑl g""@:P$HQ"""֭i&UC ȕw١C5kԨei   r^}zjC w-ݝi_R`$_m;5c/IBETyE?<a_L96^1]=#<:u-ÐL2%m::0 1j7#{8QZ o 1Q˗7nj*UC ˗oƌ3g̟?)kժ5yd-i   r^|Vd˓E,(oM$@$=$-ivrHȬ&qAgN2s72=ہ~f ،8EoJ)`K&qX- )l ĭ~kך7opBUC o^Z-NjoN[@@@* _Iz{Zye{i[}ҟt אFR2gNp=*L5JYcSwsӶl>0$SJjŮt#ۯ Vɿ%(=iK C-9.6fxw~qܸqm۶UTUC )RdѢErj}uʳˀ)S@@@H>x3ʳ\Rwc͍̣U QWJ(TԾq&7U\!Y*0*W9suy*&~R5NijUۿ# d;,zJm~ҶI5.@j"v/~]D]1 )%TY _ܹ7|!гg;v]Slr>E@@@tw9S?{OC{t!zL=mɬtƁj_"=_VairG.ɿL̯ tMȶwmb]mqcUVMfkil+$}<}KzWΈu(2efl6OU ~-PTիW?>{M$,,,G@@@ w9e?{O?|p1KÖ7uL S'`$ ٽ}훉kӷ,ux:KV\X#ƢSǭfK]mk]48aQQ><(u;='ypu"Ԩ(巴UāLޛoQG|*@K ٭D;D ` ]{?b  4hжmz$ҥK$D@@@w9m>{czDj ?= YPl^02e i{ojlQyY9eaߣRK/mQ\OYd'MVQqGi#o~qaqβ&O8$.Woް}5DFXNqyL{/sCy׮mi۷KS/vYWLec@lr@7_pal9 }>|_uNw߽iӦ1cƼ111j<<ȑ#U@@@\%==FH\:a2 C$}b0 2#YΆgڥy'QF&ju\p#Ѷ>7ӵ5t9adibiFJr{lۢqKx'#[1&'-N:uۡ$*mkcw(oѥ]%X:7ވ=UC_ 6jԨvM0aYdiӦMsb   =xgS&5K] #$}B0 OXZ?e l-dlԨiy)#sd>6rnYby2teJ}O-u SFF~i}xbğ"cQ8si*S3zdZfT . _}@@@]u)e/ %`0eypmO߉㇓=qXNK*5mL Z*V/6-bn:~_),Q\șBI_Fe񧈎JLnYN'`_>w־D'}!P'`h\zFVí)~ѓ'Ow@4B@@@p?>x}"z#sX?}E  Qk<,`,2qnF_>2/7d9„\|Errk(uWHAfMtA\4 g\roQtj2@!]?uHǞfgуf yY.Ε(].njyE=M@,~C<Ȟ+ &$Wd´/꯿Zؔ    |w3 7)Sla)NR<"Q4g<::N{Ȗ㒥]޽\*ܸ˻ƍYKsG@Wϊů'?J#@n"svMaY`ڴi2W?dJ7u)    dP)=םȈ@vȉ9@J(G3qv.}s?LYմf͚վ}7ڿ@5"@@@@@@$]H @TV-ss̘GRU[> ^3o޼6mܸqvF@@@@@-$J ̙gу߹D[D'PDdɡfdɒ-ZDEE@@@@@\.@t@^˧0{Yu(+,R3[refͮ]j@@@@@pjz aaaC8ClD)p#bJ=ܺu7nj@@@@@pjb  ZX̒7Ee]$ H;׈6mԨQK.@@@@@\%@Ub9rϵsbѫH%!Dj~{ .^jZ;vӦM|/oG@@@pjWj 0w_ӦMt6Lg"Q UT?WU )k׮ӧ3~f Nf    HT@2dH̙d?m\Pe2E/yJ۷׭[7""B ׯ_7}3gsG@@@@ $3 @ (QgϞzz;Ku( UCMQ.z\NpUC@ M[jhѢ w`    [Du8|.PfE(P&.WݻeԩS |饗 >A@@@@'@:}n@9[.9C֋w)}=c'NP5 r-Z^ @@@@H4q:PE]$ l|%ޫ.T^Ǐp€Fy4@@@@@ $S E3@ H,+'X.@qU_V8x|رc?u&@,X w޼ys1    A+@:h/=GR+Pz\߫D/V&za>r䈪!@ gtzz6    A.@:> *gɒ%-Vy!U(`rC֊ՄdZ.3֪hڴ !5s>}O<}4     A+@:h/=G Pxq>`2c.@BbQѣG{ՇR5{͛4]t7n͛76    )@:8;F,УGB ~*H 9 媋WSs=~U8p@  4XpaNfM2'ܳg4@@@@@ HTEg @zBCC }"""6    *@:P,B( -T>DA%pk 5ԤU+ `(W܌3d:$$7l wRXtӖ4@@@@@ HTeeR {g>|p}5u(dz*ᘫk>|8$/rN>tN5._%#_~ՎU>5Lr[oM<@))|G    @…{Ϸo6WS >W}|^z'NP5@ڵ.\جY&^tiBrR    @ kʌ@ t֭H"_7u(8rիEjjSNM O|>S#]$ Z[U/s᪆ hҤ|aÆj!!!L>@@@@@ Ś) xW@]M}a,G!r8 GuE[ٷo_׮][P! % N0A.uV裏/"    5ި='FI`ȑz:ёb]$ f/t2ؽ{U;wN wy|M6dY#   w@UToߊ"Q0 .");w\U      @ +|@w =Vg߻isLw ܥ?=z/^j@@@@@JDuP]n&Q@:ܷo_}׊f"Q ).K+m۶5j˪@@@@@ xHTϵf ~bŊȝcn"Q +WJ1lݺU###U      @ 4@Od͚^g:wHP_J ^#T[liڴիWU      @0@ ȍ>}Lj3H@2bؼys-T      @ K@O 90޸"ٽcp>(T6\E֭[תU7X(^     .@:/0C=n8Ν;S>O@@@@j/sj@ d2b= Gt%Pa|{x!NڻworJ֮]aÆm:ԩSO>PD@@@>r! r_Oli]$B@ }T](2eS_~ATRXzuU?3l@%    ^ QE|Nȑ# È獫bK?gf>{DHuĉ_|EU$@R}Ϟ=ڵ @=     QysΈ@ ڷo'{qt.!`/PxvdVucǎ}WUxW111OS׮];* @@@@jsv@ 9rܞ)fĿyCѵjKa^~wyG @ @fʖ->A_O̘1#A=E@@@@"@+"_O&]bp1ayk<)MOQFM0ɀPw*U(**ꭷիי3g6    nOz:GfΝ;qZ`Hq.i4wpDF5MK~:_OB 2dʔ)8TƄo(P~+Xdʔ6oܲe˅ :mI@@@@'@} /%K#FhŊu#k8kZa]CAZ=D4{=}tUC d_~re,~y[8p C@@@@3gA]N:5k Ɗ'tèwl6[n͛j@ @Ŋ̙ӣGk$nvfժUjP    HTϖ@{wn^^rؿ w%1ޫgb$>*}fCccc;v|rUC"Æ \HF|Zޟ;4@@@@Ns:E@@ +WCGqd.WdZN!&J|V_6SA͛mڴY~!@$jԨ1w\ݎ$?MP)V˽SD@@@@}$gK  \rݮ54oߧvٳqƪ(L3X,l6]IG7oגּHHZ 44^2eJ…naW{̙^z[ׯ_&D@@@@]$%K ۯ_?]t.QdF{{>N{fC%t tL<:իM4پ}!@jժuϘ1C.Zm6Jb@@@@!@ @NJ*?^oog)TT)SL_|z9]Cn QҥK5ڂA@IDATg!@r9f̘?8_|ɵQǎҥˇ~(WW    \DI@ %̙31BtB,W":ObHeV/YdQ#j(cLuѠACHA@yVׯ_?6>2M󫯾j׮ݻ6     Q>7BHc=#W(.Eߏ;䫊jȝ;w^r\\ՈqlId$S=:uJfN8j@ Fĉ}]Wr8бcI&$טz@@@@*@:mbYyf6=Z# ƨ9TÇ[,$n.յzZԮ]{ӦM˛_[ A2g}2TGk;늄'ZV˽Beb[~ Z@@\(.+7{ki:$A 9rгc"@nPcw˩Z7ʕU)nENT\UPB_zF\&t d!/%kNM4T5 @…LkeϞ=ӝ;wifN[@@p*ûĔN@x$S /hiӣ5.?W\$sE_R|-a=0bF_]CnŀE ?e˖v#HN@=o޼5>kyQF5@@p*Ͼ e %`w+syk<>s^i3 @y$6|  D.ao=FB:9 ,?8c"@f <:tp]w3.%n\EߌvkhaTX1afʔ髯z7f0h,)UD nݺu/'@,KϞ=̙#-H.]J "  9| |K{}!hHT'"It+(]$BP >v]Nպ-y_|QwT >cor׿ː`rQq嬮!J@b W=}^ @ ʕ1cF߾}nVDuT   .pxBsxxZ==4DuJ,."|L:͗>-aߝ9%X*U24MuΝ~E_NT#Jշy衇6o1صLIN EW>|\q=q-5k֗^z~[n~ׯ?mڴ+7 G@@ s֜ , mS23ӧϬYG!駟ngĉw}7&   x1jNf'Qf79>jy.!~%`:.F!;TG8p>ձ?uw=BgrsO:Vp7nXkӺ,UIzFPkٺt|rUC   ~!~q$$%;HT=\/ @mw0yg7/',[WD]nobyl7EupS.࣯ CD cbbڶmqFUC   /sx߿FR#SS3`!Q&M?5m6U$@E@޻LΦ*=dʔIn..HtzH:V s~/h_)|$"1*MQg:͛7@@@}U<@ =OEu= qlֳ#>cr$cZ\ *#?{;/\a,_I P_*\3 2ᅲ/XN+(2+Q:ٳ 6<~!@@@@_9/_Ɔ͇ڐN'Ri+sx4  CxXΖ-[?C|<@J޵u&i gΜ 8]l^Nu˗/X+FuoڴtҺp18!J@02Q:n۶m͛7R5    <¨@?w:~5 Q~N:ʕKo;jUE@7Jޯ}LTGvڕ-[VfkB.S\Sr͛7WVMWF_XC9ʑO \) QnܸQ.j@@@@7xׅQ!@ ~>{#Α#ǀ'_V" qwjhw3U $$dȑz0WΈeu[i'̊)aÆ:uYD/ڈߦ .UTlٲ~#ʫa WWZŗEj3?@@\# \W/k "Qx#v$3t!䗹*T-5DioT\uh>u̙3HؿÆ =G-35h@}RG@@ϯxב) $~ ].bc>3R!ȻGX5$y1U`ذazhM1oEyZ MKf:gΜ={!L1w?®0*W5L_KHvZϜ9N /[˗U%   X 7=.<'NTZgэ#f}c!B|@@ޗID w; -!*Uk׮ ž5n,Y8l힑ϧL0=]OaA> Dj1cT$p‹/&|ҥ-[[$@@@@ $~ n$]p l1öh @u$N?yג.U٠w鵚Ŝ!^mP}=dʔ3h2:vX0~Z|NaMzLa|* ;:\>}E>[ɵ@@9< ~޻$]/W喢/s϶5KU𮀼#_ɻ^U[}{AXXCB?b^;*ӨO-)VZ+Bs=xN;H|ٳ[n;U)S@@6g>3j/^|ܸqYے]K/ 1y/w$ՇSkڴi#`փ\nvoT{8Q-ޭ[sfϞ];_/W"t Q*}m߾͛U VyN;)HKڕ?xpqk7Ɍri HV{Shj6lPi'~]@$_\zVoT:)RDD'>|D٧k$Quą 4ir8EB+v:vܹs;Tnhݹs'8mL@@6g@ =2jp sayꘋDw @waOywO 7նň9/xtv~˔)ѳ۝jժ7n,]x|=Κ5+q˽{~ljA@@?9^8Cx_Ϝ9/8c 4cìKfw' !!N"' '9#?.#.͡ vu_X[ &K,2 ӣGU#)f>/mWCjE"svu1c&L 2eL>}2er*ˆRnqƍȯlٲ%OG@@9]2_Cx_<<<\zwr‰'FFF:EsR뚥",Q\E`#~JО%"͓{UǛm#;v(s&M/_? cD8IשJruHHW_}7o^>zѫ"*Ry_RLMkV"~ R@ Vַo:uȕߟrW\_ZȕeB:oCEiJyf?@@T~z6#Cx_ 2zJ.Z+SN=|_4oϙ[/hd ٲDW*!e_+nDh38!\Nya}n:u$)Of͚Fm1b 7Nn+ʅjxv=vXkQt>ёg"@gJs }{2%d(PaGp@@rf_diכoܟ|P.8!coy@@Ed xTNd?@q_իK.sΕٳ'sɌԕI|+ mVnƙM~%~C%?<~]DgZ[V/ﯳ;?7mV΋WΈToE<֭K Ȁ@~^zcǎŋ""-[7$ߍˉoڴInJd?K.p7oիϛ7OS,\PZ-҉˴/[5SN%)   <`~K՞qN,ʕȟ'NoΝ;elZ>Zng%K=?,_7O]@3Qw[@NVxZS.֡Ce? Ĥ|5ׄWeAD[={q2VH@ ٳW2ɴ>s̳>+6lXhh}ewyǾR;(roV.* @@@ x` V»7q$xFf#sÇGDD\:qJ|L>mYS`ҥK,Y2sUڵ+~hKv9xOh;//&޺uŋʿ>+KEܪsyywƇjڴ\dy@4 ԪUK."N1cƯ*G?Sm\f[n[b˅:!F@@9|@^V&@Fx=K%DfN 80] &:~mP-s{Æ WX_|;~hB,b.S\18等n߾]~ `ٲeYf 3;|D gΜn ^ .<:::#   CD;T@C/~+ q~e"Æ Ŋӕg,2z.59s96 *yN0ޓX;rI&j,nӦMrʅǎܧ#   CD;T@C2 ۣG}=?u1ߕ*UxB 7n^8>_4 PLd˥|g) kZhpBhneZݩSj,7(YdrN>_~IS@@@@\.@t QiB)&14Yjk-y:n ۛ.zJ+zԯڗ_~A|.(\' u]ڶm;uT\9}%4jԨ/:    .H1Kz@- Cg9OD3]8*n^SiZ_w.+kzjTEwݿϧ}Ο??U\*СCyN{y\0{'NVZ>};ܹs (}J=    kVKo xLyUVէ[zN٭/_E'X@5k8,)&6Wx}l~6DjVU.,r O uMֵk^Vٺuk֭gϞ-eW;QB@@@pj) ' Ð;3F]\J]O}ZM!w+VhԨ1⟅(5M_U [jw^UC1b\ؠbŊNOzu`x:ٳgO1c=ܧ#   JD$@r5-ZlBؽ D\&}ѢEO&89sןA!]'JZ< Zp:-!yt5Q}СxvBs@@@@LT@:uꤦA/|_"Gэ@kKꤌF?NP&U6sbH$=KbZ~k׮Z\ݻjMqm߾1WF|8Y~dR88v^*9r!CsdɇbM 9JN5lذӧkIH@={hEFF9rD};{UTi֬_|~۷o:ӧWQG/iM< BCO[Q@@@@&Q 7 |GpޕI1Q}^z饆 >|%K\lYr'sׯ ON@@@@  0Q|NQe6jH?Sa=fd5Q]L7yi _b}%٬(PZNЪDDD4oZ_@fɓ{UWCԬY*N/չsw@@@@`-&*!x@~l}=d\95᥿sT NE$B{FV~Nf갖eknܹ-ZKdCB@-nxE)V ?zH!@8 ٳ'm0,,>Pg?4G@@@(@|J 00PNҍSqt]:ǩ}7JOˑ<[?t]$yj'uV 89Cj7|dɒqm:Ǐ0Aߊ>@@@@@|U@vݿ 6B*wLb?_'SDiذҥK4ih#&" ћk},'6z[L*)+Hgb9s|UY^믿ϟ믿! R^JppگZ=`^j݂8l\8N MVjՊ+:A    LTMEE@/4hzD8zevJqON*V^vUV5h $$$Uꮋ}eY9T,7 SB;A2?ioȚOz_Sk̘1 xwk#@2eT㿗j~޽[`'Vji?pɒ%3fi    FA jY=rt)SFSUPzkת Z-IC=?fҲꔯeɐsWyZA7~ѢEg!ӧ߯9sڵK=ܽ{>M41˗/><1zO@@@@ 0QqHu}M.]iMkX,ZtҏTg*U\u̙3?F&7v5;W(Yv_"Þ38_&bV'n۶zi} @ ~iӦ\r޽g͚X]ʂױM+WX&    LT{nF @ȑ#G׮]!"ɘպj_aGcVJ*9c?6CK<~?o+Ԕ?W;mX4\+U~-_-I@=QVOWO:U=i=w\Եa:C ?zҥK@@@@,Duj~9w@ o>o޼.@^j%voM@/ºudɢg[+H=ۣ8DxLj(f;m^gE+zjzqmC߿|;w\O-Z+~[UT-YfZ$hT{:/0M0aǎK.Oj׮={vưw^GM    `-D1 ԪUKޚrx+=db} }\;T~/|/!nEɒw/G!t (Oi,Q[~}l̿7z\r);;#(X)Jg̘giIHv… h⫯ڴiڵk?ƍ˗Ժ|Gp֒|@@@@&)@H-O=TӦMcۧ'+YmľBNWP!\&<0}suZJdlK.t-X!ik3g$@#槛4i2b5c@9rd *d7SN=.$    ;LTD@xwӧצ k_Z[MHXUj> l6sgLڹ[by+i&COH i?C>9"HN[ʔw*PA:C0ܩS'úd"@ ȝ;w jժ-[|׭[.VX~m۶2 @@@@hdj ϟ9s롡{4@@H&%UtȑCG?Axnݺ9趧_zWVլF<󌚫~Woܸ]]]i3M7] 1o98[u[K2']K-5ȯ}Ԣ͝;wrk#J""".\?L&NO]իf+##pnժULTΝ;wݻgϞٳg-[ŋWV޵tT7oޕ+WܩI.+m1 +럫DZo[eɒ%sQ/5AX;}@@ x p>,&- … ݻ9bOs` FZT *Wb]vW_ >%|#}&Qܞ~:E/(_Y>WMuCzZO6&nq5UBt,yqrlsͺuO6ϩ뵉eyG_z+f/cHͫ쨗*UVڴioO˗/W_GsxL]+5nfVJiJVKj551  On'DuN=;lٲ~M=~aS@p$r׊+Ty޼yԩӰaCt4O}Kn}D?*' f)ʕSjHtMum *͒Ww: EA<9zzRe.$g:ml8#GEU8ydF``& C#"u[RX{X~SuU8p?OM6KZT ˄WDXXfʅ]Vv . nl:K}DW=`_ǹE  @܇  p^Hq9Ç-Z9sM(@ )%|=cƌj~z˵;.yCGPiΝ|gf4 3VNCcZ!I1E_id5ۖstpTTD p>Lwd2Ǐv| J6- 9r:_kq{r@+e>y\B/&0cƌ2eZԺUVjEwzjcQvϖ,O>~-Z'cZ#=jիUU^lsՇʔbY${a)Ti']͗RrժhT5P\W2sՙ!!:'DR~F2pd(jQKm?]S=*}ݮ_C XytH"'$~]5UuR"|NъZLঀ[U?zekE(8.Ηz:eدFV?9EݘVm^,ݬ޽[~7nF&pʕv2uDPK,8CK.\w@@1g@ p>QN,;v4kL-6bszK`gOe_FrI]ԵH]3bNSr3YdI5W'O=I:WSvѡŲcȮB;}tӦM´RҤI ,WˢA#@IDAT{2%6 ,p;,b}j_~97@>{NB&| 肉$ rJ)Vؠ_"%L"@ AF]gFյH]uI!^z@@YHUVŜ*(Qگf^8eOmsv F?yLh :w/}>U=m?S ٺu;V$Xz增׏gpԇI$kwo;ڭI&ׯOC1 Pç7a!܄Oط6k֬DDXm#߻3VcK# `%3j9#H꺤NZz~cƌ6lܹs?^P! Ğ j\u޼yɸğ>VLV?"U'|/+X\3ʡZ t,+ t[*Yk3g/$)D`9z1 RaF0aºu>ȥsL@@ @r p>器N@LKW귣 eC~}H# \@]s,Ws q\7xVZY?]m]#ŋ|oj[zNG72m&Q99𦫶kp/SkYk[IAG-^XK 3f:t٬6~Y>f_q"I'`xN;ا~`-I >,}x~s95E N1Q ѝFg6nH/@ u\նQn BŊSs˅2L޻CN+(矋Vӻf۷U&f}uDu[qq65ضm[mJ$᫯qXl%#2dҥ9  {܇3BK 7 zرcǠAOX ڄR@]UH]TzeC@ -Z4\D~t鹨grZ rM\UXlI۩ڌARefk MІ ^t)vT@ Q8>vcmkmBI,`|n3 ^ݻ@1 ܄;Du<_x!+uwzA!EsJW.iE Zp!7> qZԫiiTA/WgY4>SK-Q5Tɋ wVUk-$8w\Ϟ=´4j% @0֬oL{ڵk5 '}ijg7DuZZkYjM]@]W+uR׮dH% VU,XP?ߋe|- $Hi7OuZxN>ZUT࠲_~ D }ڵkg1VD@5W$q9 _Ɔ7o޼ٷo_>CG@H^f1TR73Q77Vcǎ=|e(_Q=_% @ KꤍD]-I@b DU*TH?گ:bzUS|/E>jwy}Gi5. $GqѢErZzv8CgZkI@ %57<6kI@u/>>r 72Q4&W3-:QB)C@]Ir҆3}tZ>$fs6sIX-gju,w^Hb*nT-*uB)@qx4jذazAz bI]_똖$@ 6lț7~S[erc '_iSZ3AR[? \f4ɚ_n5ǜ \%,U'»tm۶Np_ \E_ q|Q\ίCov>zI @RiS@zn{#Db6Ν{1-z3CZHiTڨl޼yZ$(RΕK_KdBlUYD?V()B\×Z|,%{!U3HWwZ۰&M>}Z!@ #ƞ8gȚP(R'6#@| yk5z8r$ xcNn{3QMO0AʝI"@ E XTiC?~iI@dɒׯϞ=~+djk1E9q*N eխ3st2txVy(PHZ7n4hݻZ*͉"t$zmɕGMmf]M@o>7kT.MxvʾWpp׬OK )S@]J$@ iʔ)nݺ,Y;Pf%n>a7Ujn9R@1[9ǝOTJ΢0,@Ԝj7%ekj-ZDF&)Ng(VHnuRW-m3gT4-I@<쳫Wΐ!~sd;b69q:m7tZ,M5T{2ܻ4䆌MvN.lZ,Q:͕崒k׾{ZDrRZ&Ҹp*`(Z8im @@  p>9 \ pޕUV-uj-&@RU͛Ꚗ}Or+WLjCSE%s rGu=6ˣG<+_mME=p@$0֬˖-Ӓ  E܇7"7@&v{… JR jI@ vi㴾i$@ժU,Yoe=H=Tm}U:k.m6eS;d r%6^UEns"Vr}tmbݻw߶múd"YgD{~v\Zky`lXkR[ҏdb}[̑zѭ&y̚*R;yUڵk5 uXL,;.n5 @0(mxu'9 $*'.!@Rp>Ve&c%rP~r U1a<@kԵK]Z_ٴLLy3f0ZJ]:H6 p!{Y(˸WE=4A}fQj+cd:P[_?Q^/Z۷oo6FFB/;u0$_v~',H2C# @Vq>nB&|̰Jd_… /^r*k1 ]W0ueS7?1m~A?}ezHTLSWLZw/ˉ G=:yX6Uن6ɔivjR\ɭᄅVP>|]-Y@) @$0ϰn%9  K1n»~+t#u^觘!z*,C&m67-$ܹm81&VSOr{"g)/2uildlXfY*'(t[&5 h"WM(C #ڽ9n7SHMwBR(  ܧ>-)"n»~vt׮]Z.Sk 1뛗^z}WV'b:ɾV9i,Eϓ6.I粆H~RZ,ub4v4J=Jc rZ:t۱vE |׳g>Ӭ+JB>=7oЌ@-`}UV@+/b7<4=zTkc(^Z @oY_߼\ 0@=9R)9Ej^ )TɣF+yIr\媕E'e g>ŎZVUi>VuF]~]!@S;wF7Q}vGRR Oe}E@)`}&񨘨 <<8߳s rudr#0ULm/=pe=[^5?{lӦM´PΟ?7dɦ yགྷg Bç7SF e"u.22R/ȑ[@o7 c%/O>EMzGQ@Zi7M|/^#A]yVF$GW}Y'h Z}'ǯm۶q?@@}in'=hLU@ x~?)u @O7᝿LT;qTr=;cfCZUU@*`elr)t + 7wO8L/v9F/c.QóvsZ)#_KG\ձ.~R$fj7wIAL2~x-IOkqW B>U{ ;T$)>*Mxo,.p kBR*"ˠRIڵku}ݫxVn%o؛:HU]rU+2>(kٔ%fYl'JbO^<$ڈ{Mk+/gZ[hqI;&ֿX=%wsAyppN&YAJڴ됉x*ep}V~ѲeˢO2M.K )忆JDܰg4J>a2-9Э1a_2Y:HϏOfRo۷6lk׮3ƧWڦ_lszxT թm@|E&܇@ 5 pɻN`d%1@f6W9/>%kϯ]~bjq5)='>9KWNqw%SYeߒ1JvLwZǎS˧߼pC~/7RHkc¾O­g_zX\-ҥK?S-I _V \4H?M62B@PÄ5{,68_;Oχjh "|*UG}2WnNׁuUQ䱾vMGK)`檻.4z,z9 I']Xϋ:T%T  6MxŒ={nٲŋFP@@@`ڷ_@Ȑ!ի{9n~7z:0t[*g3b/˛?Dd/,vul*$`"{A<_m۶=qD@ 8o߮   +Dust@L sk׮-[qs# $3OD9[Ay` KRe[tk6q*YC7nX_!@@ UDFj   +Dust@X [lׯ/UaXOzg!7{*(\2 j*ݮvcjj |VڵSOWk9     @0Q,@%3g 6-ZTˢܑzNBE!7eܫrf[U|Sn9]U6jjWUѲeˆ % @@@@@d`:Y9( W O|ҥK$     LT'9GD@(XگZwgu{7|yk&Kl,3G\-[oee,@@@@PLTc ^,PtUVO^?eէz2ob syoTh{͘5Bo˝rzB"b'XNkƍk9     @R D?XX  @ TTiѢEv`JU(w/tLX@KUrr_ѫ's[d" ҥ뻲Wǭbf%e3M%kz?e'z2Q@ZygdȩuN_n$@@@@@Oijg@H6tҭXL2H#=UW oI dΓd 9!#HB* > uqf8k>y{:1L[>w.ˤk(4F@@@@%Duz9[@R@֬Y׬YSP!OloO*#q_%]V5r. hu1o%gK6%sˇ{%Sn$:Hde!К޼yyi:_@@@@MjlU)G@K OcY Իfߥ.ov\?WIi" v%`?8}t@Vc5[-47   sLT[ ! >lٲik cQyV81Fw'cLC3vqŗJ])!79KMHҤ:ѣǁ$ +`Ȝ/LqժUra   0Qco( U6o}A~T֋oKOr b_qB"#UnlZ`F_3gμfY!H%'N8|R"AN@@@@ &@  @ǎG)B[xFgv:D i=Rv@Zkp|҃y:s:`qQReիW>\KC5o|IcϞJ 9"   $A@@ y>@?OzbpHωOtɦ?8G.USZLppoωJ߹8?~M3ֺQjZK5k"##-i2@@@@K  <#Gԩ~w:r=!xwk!_Kz*}56$DkE 2?)o=&+۶mg4=>԰0=&B@@@@ ANPN:C@o7n4L%w9qm\u͑2\>tx}tB$xUiӭ[5kf3     q`:Nl4B@o7o^qZ-w8D'sЙrE I%%^wyl_!*ʭO8УG~@@@@@'SA@|Z 00pҥ*Ta@9FK9nqLc¾T͚TvΐCK싴tk *Һ>}?% @@@@@0Q="  dʔiŋ6DF9E8~/*upr>SKxNrZ [O mygfzӧ$     g&LGC@z9s[.o޼])?ugME㴙YjIrUM Yo7MPmSo;Y\G    &DulB# O ,Xp͚5ٲerOC=~d4J_>*9ײtZT,<*: X\wɷ~[K     q`:nnB@xW\.]:}%'ݏjʡr㢨܆#\#W2uOj)V/X`Iq\ @ >|hHHHG7    Du  x@ʕ.\ﯟ>rpt3WNJZuP{i,c~/>vޭ% @H"u9Ri06@@@B@8 ?lmzQ!bpvSM^qM`zL2vZA4+ivU5A˲?: kѢ۷t @vo{[n-Z(QA    8y/@@|@CÇO$Ll s܉$ p\!*!7WPݖZǥjhc rOw/Ǣ_gϞm߾lco4C@ BCCݽ|u   @0Q$@D_Ν޿!֑{wJgWT&/fiYzB\ykԢ (-e\:*s{Ȑq~Ay2-9զf<꼊WX|ѣ$     [Q@Rɓ֭2<M;ͱپE#9_͓QKouo)IdPcm #ߕIrMeO2|UElSO:͕>۷kI@@@@@M;lG5@@GϟwvLm)H='(w)E2獵cVVGZF'7E`ubl %zο7XOROOJǟM#""ZlyuO>    r&S ҧObŊ… eGWʼzҝ6Q̝f`,^y}@ҤJlg?{mS%̲y~ZEwR5ŋ۶mk2@@@@@ V&c% F\roٳgO~3=N*y˹SWvLcitJ"3|i ^DJU_v% @@@@@X   JJ(lٲ O'݉2~KhN#+ 5WΫ4&~cuUG햭ϜG3tЍ7jIȐ!> @@@@pWjw P_矍j^V{,i)tY:im5V.Yp+P]HnUz\TܪR<1GUQKiʕ+.ZP 6TK[܋^1f    Vw]q@Hd&M7N?)\~h&9nFsZ4!eZ3JL!!H2꺴*jjO_%YX=\G&ԖPU**P_ ի[t-R@bVZUa~~iȝ7q!   x@C0^  hz:wܨQ|WWl<>z Z?`Yo]|E%gq)D*~,}|Oj{/sD<W_@Nn˕o޼Y駟z S@9 PpbA@@@17A@D9rdV^o_;zNbDjnd7rf<#j#ev'\L6+al[ : ;JR$CK6բ~ {ϔlF#Fشi$@@@@@ 0Q퐅L@@F`0̜9zzz(yr# $l6[d~oRLNn {[%OYjQȭs=JMEяwͪ۶m{u2    6&S;" @ҤIx⧟~Zorj/fPy 'Ճ߼"尙rI6}5qH$Fh.]ԡCsbh @@@@@/`@ I(%KիW͛W?zz2Adz[1Gՙ)²Vw*Iri֫I:ZUV3FK     vLTہD@\ ϟ_fʔI 1]O3RjEn7gcqJm-APd+ ?A&-UϒLOj4h޽Z@@@@`Z@]\r .׫*'6DOguU{i[5\ ~fe!g!exxxV=     N 2  ,ꫯN8Q.?6'8GŹ\>*_k'`69.R[b'ȫ+R{өSv% @H&8*   @ &c !ХKղՓzNwܾXyI^@jO9UYNmwPwr|׹SU5ǯyM:q?@HhG^   $@@FٴiSnɍ%i|UOHe6i2R}-$[A&oʸg}ߛ2̨ӎ]|L/jreNs$]V-O>ǎӒ $S~=?|UYfUT)@@@ 0QL|@@ 0{+No:IOp-oϕr l*<||H,*x$ߔП>B&514jndUpDFȼK/1G2"BK儆lÇZ I,`(R$>.C@@p!D @@X-[V@9b(VimԫJ2KJEf9@|^FV/I ѽugd%F>ޑdwwgK՞rȑ~bP+'HYf[)kX@@@@ܻ#[   (;w+VdʔIsp5[O 9;pGꨪ4#ƈz:n9?fMmjGQUDL۽|'j%pZUƿ&j+kg/_4v[ŝ;wZn@ׯk2߻    $ Io  zwnܿHBRo&7N("}7JivNjR\=~v2dsg1;`_JskI@@@@H9q\.3?U0FK&^`ڴ|DTe/LcŹgg,3f2>b! G>uԲeˢ?O~/{ɅDHj~һy:L) -Cdz9i\qI.j"#G]vj$ Jvfkr"%[C5/9D@@@ !wBjҗYj_Q%|~LY$rlr,_A&=h3gNժU}']LN]M"#_=PKnXͯ,,kF9.,gzi[dRxi낧jYz l(o"Z]d2kYtN,|NQo9iR]r'k|J#KN@@@ &0G|T,"I,>}˗g5kԳa m&Ͼz.yl5x>_c;KDQ,?,3nRW)=W9:F_hc>|nݴ$ ,s# 5oZ`Z lV{Ms~c    -DuB>-`ڹ٧ϏCF O<+VȐ!݊!ռ=zY-tԄgev9N];bX_+;L?%K9,d#ckȽN+hj*[1ƘSD5IW_~姟~Ғ @ -\q_1͞ء   ,!H lK: @͛רQȨ2d/,+yKoe:M+$)zmQF8n TRܴ-}e8}k|VVBի/\paEMtE6ݫ 5/,jW/iφ| i9    O' H戈Mk$@Wرc"E=ǝ Q+ue0JіݯR=-ݝZWNHF=z< ]-ЋtiJ(| HQ@Dςb EҤ(D;!wML2 \=<켿ݽj nU8,עe4,!>X;+ /S:ͫ/2|pU$@rA\LOv!(HT@IDAT˸|~.ǟ.VEWzm\pZf4+Xgȑ>KE(LFTW^yWE@ GLt/VamPSrQת _0zdܹsg̘@=   %;$p*Z>); !$8NyMFc ]>*^97;^vJUTK#F(N{Lrvo'T-{,F|ԩSLLǺLD|,}\?t~=FyyjLs󘾇~~[  @6  -PHy WfN:/us'ĊZC ʡiV^+Ǽ4+ݦw[aP`1pb;vO>p9* ?yh6,Yư B)#LysigϤI)@,G9yW}tn"  `ۘ sG}wr1ŤųwsZpqiOn6DotQ|X55~ˇ?1/+M;+{M:@ lrk6Jx"TB@@@/*d$^{֤[޿G򞌴j.o.ƽl^V9c޵WG^[d'v4m.O T{a @VFѯ_qػB:Sy+XX 'N Kcb\;5Nf-"}(pnEl퉏=\rt 95~Q%uvd١g,c"@@@Ȟ ΞKyk'Ʀ7Jt;r5!\{7iRc/?^:)@?~ݻEL}BEEJi.TxfEz77x;J-oGUI<`ݵkWeinVf G6;uv2?v2D {*53\     wT{ E5<gN>zC;b^dFʢhq^ooT')mNX겂\\\!^ K%ߓw`6M9ơ}yǶa襈@L`̘1[n=ޢuSބ{x:ql}JٸPLa ɲ!*9Դظ@޲eFտ_5O; M ?5.>}_WG8Z&)#   `ZQ 9y˗{Ԇhָ.ÑFs1iZWw*Z)9q:{8$476/]r=\ڼVS@M ,,lΜ97޳'y?DQuU.cFn`2UQOI-{Gy6"*b'Ԅ #v"NMloٲe>{ENu۾톄X SKfyp<G;y(P01f!   @2@@?g,=qz:yqwGa=o}b:q)]鶌X$Wo@(Q7|S@ݥϊMKt˨DnOiR.ig,s~Z>iI'qqq=Pll΋(w( iߚ*W Nwx3IH׺+ovlآ6v4m    }oH (po;fTab72m'g.9{>qU3&:h+9h.!cxԩe KL|@ٚO\hRsE2[8-o%~TS+4V|7۞SشiӀT n^{ͷ&<ЅǴ䲾?.NwǸ&?}=q:{t4]O!B@@@_0P E>sև~5j;jːSEAFd2#WMJ[v :Tw©x?xuPh!y-R﷚˽j e)UeVj3L\P|mY жm t4!*V]iRe[ȽB   >`'4t.MoniXo/>FHG˻t mxYhi&o3G" Kѭ U]z73T<6[\s-ı7zV~)d>z=z􈎎>%鮒1=M3V @@@@  TgߐRvFnd}Ӭ^(Ҩ}usSp4:v:@&M԰Xl^"ft!aZ1V|p8ìTB^-o6TsrXoZݡC|IU$@OnGx9S;:rjk\U?#1o{vH@@@!@u6X4̣TF*8(V\8Z:e -RLfM|@A _|_uҖCb]ޖ=pgT2kt{:#ӧO5kVN@@ j;4s~>/յO׸fY=@@@!0X6L u֑O0a9u.ha`Zpa* @p݋Oݫt1х36ZL1pzWsR"1޽{9¯$n"Q Qv^L@@@@  TgEVI7JQ7QR\LdfZ6bXi "ЬY_ڋGĈĦoZĀ_DT%*N¥EǏԪ?ޫW/U$@\t7Z@ ;%U$@@@@, 0Pe: bQ ɜNsY#{\:&B~g==}@ \)8zvڑ<9l˜O'扈BI6z@4蠺7L2E @ 78ݵ(׶ΟG"   dU lY] !I.E9;=$g:y`QD kNs5ڳgOJ{+6M;g5nT/E[<Ɖqms=z,^OzG7CNw(TTِ{cTft&OS,L!2O j԰t<*@@@@&-$B O۾p>'-VMdi5T#jR:S[2i&oHT&ŹZa $Px9sDDDNO{L[^Fu--WK!G{[Ѵ%KƎ Z"aB"'ρ=f'{Z4L/Is㆖*Tܹ_7   @ 0P?RO(1;7CbZNv:EhXjzZ9dg>M֊F*ڽ}r:Zg#@ ƍy^d} }SmۑQ[sSL|yܹӟKC% Xf$x{SsώMFIQ|hIN}0w~   ;}C{:D³S~kW{l]L;2/Ź;C\n=?,,u5"@ҥSO={[|Q]z7]2@@@2'z-sKS0J\ZL{wjay:yQQprI4'OTM,0X,NEFf齣ZTobŊѣG"ANȟ|ᇳ!49̚޸ ˹<#MBK2TH2@@@@{f Xo1t.\"j qx* t͘hFS.[6'Fxypo3&au1BxֺH f*Wwot˨-}ڏūɧn1R |7rK1HnfpqG_O3]=Œ~k?7%  ~$`;Gϧ?%ߧ_ߌ9c/ Jy"e T_F; kJ=}rtbҦi&Wa:,qCK$MD+\#&3]y3Gih(ŭgNͽyZ$zǾ-.S淧I J/ gJ7qp*y^@t$خ]X tꃹ \]/7uƕD?ܰpa7u;TsuA@@06\lcɩbsjz 'B 20BBuu}inS^u2j7%sB> ͪ -cDG|[g%٩EıS>rWaTf\Q(%R]벢R5RLPHE;{hՍERFBBOzѢQ.i"@ 5k+)sb\;1p_$sTn<-J\hժUo /6@[O3\jy$]]ookFFrt9PyHuHѬzee6e@? >Mj Ă!$Qh:Yt${DKNwskF݆^w8oq>QW    x5Z]SB|]f]}nBqmf3mW7nwfX4\#m qk]kNf_ Y aծ4nnnY@">{ 9"o_zw%ED$ O~zy_B (8~38yʽos|\%ˆGlG|)@@@վ=0*TvyQc;,?'O0…Y>UF^lըXٽ)s8-bΘ 8O*1ek}BIIֱy7<~q|x€wdrWV'&{z.U!A$P\3gzmIDA Sea8>17|꫃ lH݌||{NZOO>*ܨY,+Wωi@7o>rȾ}&u5ބy*No6~aݻZ*Ļwj4 pMR98-oΙ3Lu   mM  }yuR?CϵkTܺuF     ( Tʖ  7n5\!VM?A?QuС[nUE@.pn/_~,   y%z@@L ˗o֬Y [^:ط. ' ÙDlllϞ=^1@O?y_?+VTi   y @uJ@@ UVOb|qᴞ Q▧U?Ә1cT@FU\r @@@Vg  @ڵk3ŎSbDmUU ڷo*  \._tI   y+@uv@@ +oƵ^\X.C_t={?      T{  Й3g/^\j.CTQ… ?3U$@@@@@`ڟ}C@(_u8OܗĄE4oeUfO?cT@@@@V ʦv! !ЪU_|Q<_|Yz|EǏT'N      Tc  @/ުm^, `#>1cܹsU@@@@Sj. @J@>{ڴie_CĖe^-lJ' Dlz}iU$Ȕ|o]M%@@@@@ TB6@@(YCBB`'SGB%}蝹8pSEL tرyPV=[2,@@@@^jﭨ 78|1GĎ͉n5,j?~? ϟرO|ٳD@@@@ S Tg  0M6s;~s_`+ %&jfϞ=/\ y#    (@u n5 0 cɕ*U3-]!ھܱcU@@@@Jjt@Ⱥ@ѢEg͚܄)t{Awޢ *wy?PE@@@@g[@@ 5'ŧۥ;2 yHr=nI    (@u n5 )лw;;~ R5^RYY?TE@@@@dC @@gƍRnb ]}tQ*/x!U$@@@@@`}@@|)_&5j~.ڗ綜1gΜׯ*     ?0P[>  >hҤɫ=_|CmUo.=1cҥKU@  T-ZT   y+@uv@@  вeKŏoT/^TE@p\{(%-[<)    T{  @ Ø:uj%tQݛ*۷kH <FA? *U*x'S@@@ D@@ .]zr:X1kz*ש.۶mSE@0BB]Q1,,,xR&S@@@mD@@ nݺ_~zÛėO뢽#9BXIR>[>$g̃|     Qj,LD@#7h@bl]wTEwӦMwnwOƸbّX@@@@NK  MNO^`Ag=E^]wtQ bO>/^r&H5"    `W @?ݿ ' zMTn~U @llc"@@@@|*@O9i @W]vInJ`.;F8vիW"    չo@@3fLժU [E{G/B'(i'=Y    *@n ZPB_|EhhhRæ[L,Ez=~^TEq˪gk׮U@@@@rY\gu  @^ 4nW_=8_|.;(SGK/%HF   @ 0Pn# =ztJt+sEG?*_!(&uKj4 )wz*-^z%U$@*ӧO@@@ oKm/X;  @^4o޼z_EG՛ƍ'      T0# ~-+ԭ[Wwq[b/h"4b~.o߾6Ε@@@@7m@@ WçNV%&wj'de*5/_/TE@@@@Qs@@_atGEG *      s T--# # hoݟ?]|ݻ~mU$@@@@@`:li@1y SEF oVɽS RBRF@@@sǙ  .PJw}Wa1q]qt{p&w{ƹfw]@jeX     dMꬹ  `C=ziF'l]kTJn?*[PZ P7-}E@@@5s!  0~%J#]6Tr}uݪlPɵFd`K|@@@@rSf]  *U?ֽ=->멋v m֭[7aU$@@@@@ 0PsRD@[m۶1]eUI-3#)@@@@Jjt@#E~ᇺC王EFQvM@` QY@@@ o[֎ @;t蠻fk]eh-3#)@ 8Wof   y@@,wO-ΟNg͟ūX}V b@ j9ԤSLiڴi`u"  6`@@,YrѺ3ė-0qpkf;w@KRɃ7j(Mo@@@{ 0PmKv  :ut]w~$6-E[F W7?ޖ^iNF^>)    Jj_I  `gc.\Xgc"./2 mVllITAtt=#]#^2c8SRC@@@[֟# !P\#F辞+j,ܩ2O?v f̘}0!!    @0P4 QgϞz짱b돺h˨H:a裏l5cǎy @@@@վ5@@Ǐ/P@r\eff͚{nU$@@@@@, 0P90+^D @ _R}OSS @dʕ+%!m^E[Fm|\QF2KThhڂ^ a|$ @B$e: 4&[n!bl@E{95<_bz]_TJ[n*/Hq t~b! Ξ@0  b: 4&8@2P@ ,{{ʂ"@n 8'FDD$ti۝[ϋ>P(V T%yz%tLeoVe0p zE_O>?.WUi7UǫҥKt,=L2@`:|0nurFk,\njǕ+W֕Ξ6c/"  UST@2cɱŗEzm"g5ݻΝv *VӑZs!@` T*/ @+T\MORlV0B N{!LB Xcr&rː@ n.]LD&*1c\tIm/_0 α#:&BPt]&ݎ?e@Q p>@u6愆ʋwjy` @@M1 y%0bĈbŊO-."9|Ӂ+UM OqwmR#N?~χ?R< $89@:|l(^ p>&IU8'x"%|f[DT:@ΙS*_@ ])~Y`]@N u*'a#E%x+_W\95ý7 %^`rf})i`%Bo@ oj׮ݿ݇m?&MG1cRTRm @7VZҥU@\~x)EN;C0*& @$<qͯ=Hx)0xʕ+stfQʖ*ƪ=?*MTE@ PNwWzԊ@@^:|l5V.[5< T{d`w߭k>i}N@¾I{65N _|~sL,7U?~|6K;{x:GW@@k5+{FE .{FCyPTTn @,M{z*PbŁmA6*5uR9M8ܹshꫯ^|ketHM=0Ĭ###c?M|@"7۝jo<ԉڵanXcܪ ? kʽܧ" {RJ9ϊ8[=[&ӧN BBBzV-k&Apoln٠r֭[xx*  @ p>6]E T|P.[Ur͞j\HS܏ɽ* 9rn>5]YtEQiҤI111hJ|V(itHl/`y3T%Jҥ*  @ p>6F.{ojR,PkyOKSW@ž~թ>}Ƚ* OfkٲnN]Yt!7>sɓm_b:O׬P4,ĖO\@ߣ_叨T@N@^ׯt-@Oa{+5叹jժfmܫ }S^=XǎU{ZE1Zv Sh 24_+l }KQ VV]; 5@K@^:|`m2z@0 p>S[Lqp8^~e=5>5#3B;}W={0SE@W Bl+^yS/2ej[%%@rJ6Nt:_}UߜZ" @n x16z@oTr='%wzu릗>v=S4"@~Iı#/r%`HV@TRY}.)*shJhڴiϟWE;֫Z:"N L'qJ'tWi  Y?6"|6(Y@KO?mk_7#u% @ ;.Ƚw" s7xC7{t~.,jzS|Yl_b:o_]-Hz'-s$)hYy۫W/U$@@pᳰ}ZE+G)ƪ揋/TE@ oITJc @]vm֬nWE ]S$owJhҤI.E Rʔ+G,)Ttz~֡3 d_79.g͖ꬹ^\rF Q3 f1V4@ HTJ^KM!@rH0{O7bZW7jÑ#G͛6 ,[|WȤ̳16ˎt@ Ϟ={ѢEW\ 6:6( `.gyS2Pe ^wuur͝{2& r#BQjvB`hܸqN6]ST~Jhĉ6> |r5iO}e*q@ ZVkժW`  \iaGL p>S\WfrO; 7Ȇ>uy16덲$ %IX-(R{,dQ`I /bC:~Zl[vj!W M0A6 䭊ֻF3Y!bׯ*I@}%I; e.gκ V o[W-q~":h`W@IDATHC@gFsGU{$_bZ @. ʔ(QBtγ4uNMתU씜E"?lذԧ5] #>mZβszE ~(ux?(t "74>Mg;622ROwϛ5ܹUO$B|* 0r?#6"^}#oJdN@ٳZ.)jA?~miO?y݋r|eאT@/n.Y/Z/zC'@@ /`"o0P[Ou]7{zI2:INȞܫ}%"GN$Fr_G+zNrfʕ6mRE 6/֭"#]o޻3t  @̓'[6/f [彆5#CC*K# @ p>7! 8\ωm@uN&Y\Sv-: kc]qodݩRD'7RoXjA{!/J5"  =W,v}D*8q*UJhzt:ٙ)_Bx$VbȂ@uq#\>9o[F,"  `#hc (E*8GyEhhZj%wyf-?pQᵎ͌2s@Ck3*NfZ^~uS@\뮻Zh|u.zM\]HChhW}>1ŋ+E\]UXXXqF6?"qMӄs@t~ҽo{z_#ZGO!B@G9"EaM()=r$NJf͚_gΜI'_( Fծ4_eB(mDKQ{A;lkndn"bRL}`ӱcGgf$7ȑ#MLQ`wXFBB[?!CulI>]N6mر'OՙS揋]?.k8{5y8|<_ܲQ;Se˖8  7"|68Y@"rĨSNm۶&O|'Ŝ1\%$^*aD"oqޙ3gʱǏ/ĮeF6_V6/^4ތj`FF ~ް&_|Q(ҸQ02Ū(GX)iOcrh^#R4fV)ASWf|yżp>b|JYs*RH޽:@ pުA p>cgj]ٳss̙={v,GΞn)  }ˁGȟA[`I3.\HX0Dt]RnrK.ɱy|,5` ϟG_~eݦQQ;b.x)ܟ17OBZɳ}yG*rU>H8?ssrX<̳勺~sk3C?1+_Vln\}QrҺuk& vӓ89'Ee:`kV$=g۶ms]hс[y 'rqw}w=g ˗1"s>eǾfOKf]e{U`4@ˆ!%ٹs,Xo>94Hȹxs]yK7έ9ffWV-o}eɰRZ@'Nߵz߂,R',nמ:|uk_V#ո[JrUvM73ڵk'Oo@@[{+E=H[ifվqZ+rlI[#?~7򥹬u@ 0SUO:u6mڬY3F% R`РAƍ;{ߗn1%UlQj9@ dr\9yq.]lX&RJ?Rf!څ .칩 ^?zv-ow5y9{I >^) JS +H+b_Ym`hhhʕ7F5o޼L2)r dIYbc!TepϫM!'v:v옼%?ϟ$S@7kv*T1!@DEE=3CMJ9bb#_N4gȁ"]>X]ńZ#G˟oz)mꪶmz=#jժxo:ŋرcԲ)obbbo+2VXyDWo3:Tߏ|D…nŊCBLV dZ&c.E<|MrJz"?gPF@" ?'N$%4vIΒ-Oj9|[o2гV=Ԗ~|מV*{IXyo_Y˗O.Q@}NJ @,H  "##ukY|Գnj7 TNb@@@@\ @  @  g=zR^4uQH 󣣣U@@@@`:h7=# y,:d݉t6QEHxb6qqq3f̰Mf$    @2 " dWSNk֭,fÛ T9~.]RE@@@@S@uxx=h/@{ Xn֣&;Pp 6Lwbl]MԢJ-RE@JS⼒g ^U@ZztTR *j?^ CztY XڵW W7?s  W @pJ8ۊ"o Lz @ x#́[nEѭZJ ֢E@O#`'zZj:Cul0 T*K,VE@rMS\fE @\O߇ +͗O8u (GTPM$@p:/^_ŖtѵT.]4g{E $)qm,^:77 "#嗎4;;Gy͟?_  TStCΝ;WREw:GThJe̙i"  )q. @KT&@\/iT:t蠒7oVE@Q@MzS @ oBBB>lAM5BիW" 9-)qN > Y gV ~(tr;r <#H& @ 7˕+u#TR={ @iNsZ@ XNp>zGCt7P]vkF7yd  c<#] fA@XXXu扃=뺫<,Y IT+ @ R]W@, x>j=zNXbӦMH @` ȣ<>[qj"c=S,y#9M: Ghb2/^. ? S~ISbEA䭀u,w\@# Tw޽TR7ƍS1 %`=ɣ<V-A%P@>}.EDJzw<̙b@rNS✳e@ ;\ώ"@td0P/_gyFt5k֨" " _(z+n O=T:KNfKoذa۶mj@HS⌄#T _: 4ٳg+VxjիW={vHHHK1@{ PѢESP!!=A>ȑ#fDWwHDKp8}0]t4hP ",q3 `/,|j#6LAɫSNUE@_@(+(o5z? K߿c+S427oޥKT@ pJ[OZC|.ux  @. dKGwTnwƍ׮]\8}+2cu dA`˖-;vK\AWv82V" s{lIFDWE|4 @J(<#هrMs:I=#~0V+*YMTkV4g  +N}%I; @N p>i@ ëj&M_^^֪> / Sh%YjX&hH/PZ:~.-. 뺫$~'O" 8sSu!D ;_:C -ZXto߾]p ^.N5@rY୷ޚ={Zif>3}kA-Pzc&1(RNTl]LWߏSe֭[73S@8%NOy _ p/7 BHS ;_:Z<44ThѢ#'O0a*  ?%S?%bX @ԯ_uֺn.zQPԿG%1o<  MN  @p>OY) @#ղ+V1c*Qږc)@&yR#<~ɣB%0`c_ &Uׯ߷o*  eNLǂ @ p>7@F _:2UZU)pΜ9kLL_oH @' !OSN}bt"@v*W,o5>tPR#'zdAZ6iO5#Ѹm_ Nb3$]vtdzZ)RdѢEPsN갰05@\8wܠA稜xw{=au sHJM+J\ѣG;u7=a /)qoC2@?@ᗎ TKf͚[=/^o߾dɒF/^\M$@@ lңG5k֨5{(u߾}\Zjϟ>}:)'E7=/PL21qSn馒%KC@8%H @ p>6E@_:8P-1Fsu݉W_}.A@ W|mttZ|/|7R+] RP?q'!w)Z^~"""nF{dF #)q8@ @@N|03=ˉK.}NLTܰaC/ YP6l۶mc?f̘qmY'#@ ={B E=)/E˗/w:z. i pJ s@p&4@ȡ/{رoV몫J5" >شiӸqWTO>bŊSD 8JJ$4WA^ )*TL0xUI{iA:TT^;"(V ҕދt)ҋ4Bd&l33&oػgk ([Y؉eeP :pAZ 1ߏ~vʕ;uTL"P-'6nܨ^jSª)!CƏvzM 'OΝ[No 1wJi֬رc}gh@%v)'Cl#T$_3#7mԻwm۶Eϔ)S BCCU[菲@8p`;{l/^/(]t؃$9u%(o'|dޗYC#ƒ:uju @po]a@ 9/#vÕjejPԵZcO.*!EY ,I, NaaaGٷoj0a.\pzBĦH;T_b}؉ ܹgvTo:pT^ϥտ5 @x̘1}-?0vw/9\qFU BuիWU?7#egϞ"E UN4)+q@?PkX]~])9~V3fP˷j; @x 6E;v,\c oܿ_P}"S$T#22a Gq  ؤjMUxyf߹sG{@?j~T؉&0aɨ! ]Rm0 @W#>P@ xkBJ~~СӪvڭ[!F֭[}>s˗3R!!!ɓ'W O,YϯZC(>[l.]Ԩ6PZGd#s^nйs瀀@Vڽ;|"E*WЧ >+[b {CsZWIu yV: \?:x"BU>c  &Mڽ{w}7뾖c~QVVZlYjUgM$\@% ժJ[ℓr@@@(èAY! r@@@ jz[We7=E0VL_~b@@@@|FB\J @Μ97ny'rix -_U @@@@ >s)  wAٳ@ߴul#-ǏkA    ]Bݯ # +PRbUeG>bϫ5 @@@@P3  (`z29G6BZ @@@@ >s)  [Θ1>rթ7~ m۶:u7(@@@@Po  BBBz`tqEߴo$M͛gߡ9    (TG7a  ^xᅠȌoƩv>\P]AV(@@@@|CBo\GF O>ٸqc}>c[Gտ㏰0[@@@@0 P6j# RO>zgɁ}u$QpD7o\t}B    8 Pva@@~ժU+XoT$䫢 6    P@@w޺9i}ӾQP-ŋk1    vPm+H  ;&K,^\Q?'OܳgOE@@@@}@@ B UTm۶5L{wMFKڜZTQ    ]Bݯ # D G옫o7*T[}ɒ%ZL    (T<  .sϕ+WN^7*W\yM@@@@(Tk  0Tw9{C*PC#FԫV    "-@@-ZO>jQTٳɓ@@@@{ ~+  [yV>_M$iZ-e˖i1    6Pm G   C7%J$ʕ+8rF@@@@(@ڨA  M4I.]HIQm+@@@@ P#m@@XBBB:t?~ܽo129r1;@@@@(Tk  #`Zi5cRX׆M    M(T‘6   *T|ykc;Ft-q     M(T‘6  #L7U]$N<ذ7j_+C@@@xG@@[ l2eʔ߿'뾶0 wT6Ǐ!@@@@@vmwH@@ NI&m׮u=}vѓEhSmF     PM  0}hS]Y˟տ5 @@@@; PU#g@@8 +VxSOc;Fտ׮]k3    M@@eΝ;1[n\7m孠|K.i    KB" Om۶'|M S^ogg}VDdt 6X*;A@@@@ n3@@'.]P= SvQ`(e~z-&@@@@@^u@@ տsyArZ.5 @@@@ P%#a@@ ԭ[7cƌkOcEBMݻg0    JB5  >.Ծ}{}}뻹jr޽{M@@@@l$@FT@@SSN+/ReY[ @@@@j{]/E@xE+VLW6ްa>("@@@@#@>׊L@@ йsggɍ+"C7+wE@@@@ BB5   ~!жmȡߐm?uعJk߿&    vPm+E   H>}hh~M^Q֢ݻwwi@@@@%@_@@ر>ԿWɥI$s-?S @@@@j\)D@H@ݺuSNu凨n^\x۶mZL    ](TJ'  @BBBB7oewzl({1-_(@@@@l$@FT@@*Ю];'wȩ="ջv Q    Pͯ   TR%[l7ωD{سܮ_"@@@@Pw# ,ЦM]`ri(I*IGKտ5 @@@@P˕"O@@VxTuq=|ŵn۶M @@@@j[\&D@p>[pap6];Z;gQ!E@@@@q@@͐.<EݻC'4    HB 9   }ڶmUGvA,OQ ΝpB@@@@PE"E@@ ̙B 1v瑠'd٣    X_B" ^@Tt<}CߴE(dʯe    -(T2$  5ky[dB3Mޜ@@@@]ɡ@@l#1cƪUnYe)e    -(T2$  Zlt|}]ߴEd(TsG-I"   h5 @@hڴiPPPo6a3g\xf.     P@@H>}jtۭ!&믿@@@@ P"=@@7 WMnd.?t@I[;C@@@@ P"=@@7 4iD_;NQ7UGP    6PmD  nH.]5q)TGI_@@@@PE"E@@ V޳Pn^s߹\QzT     @  PG~Cvjoo!   }Ŋ옭֏ m9b|@@@@%@_@@iӦ_]}QZ'Nb@@@@,@W@@<$иqcLaU#-~H@@@@@PQ  @9J(Fɦ}I-&@@@@@|u @@sM4Oc[_dI,KiSQ    XYB! xTTRYE_ٳ쓥ɦԩSZL    e(T[Ґ  ֭uM j﨟7*    XWBu ! x^^zI^!뛖R;     `Y Ֆ4$  ZjG-/$S&P_2    e ^@@R)SP-VP_0"@@@@{Pu"K@@ Vc6=@@@@\$@E@@WLG^,y-CzTk    VPmCn  ^(\p9[o֯    =(T:%  'L7U[oCƍaaa\    <@%  >.`*T\#7Xzӻxq@@@@ PE!%@@/ T^=$$$2{zCRhOreu-Q@@@@?P# ",Y*UZ|D$qR-k׮i1    PmBV  ^0gyP7UG\z5*    XTBE/ i! xWT|qZ @@@@j^C@O?SOX|oG    PmkCf  0T{wyٹ@<    `- ֺd  `S hܜ3G    PmCr  ^ZjҤI#W-b285wT?@@@@%@Z׃l@@#Rzu=+m(T9!    `I Ֆ,$  ` {ɽ{+Zڮp-&@@@@@y] @@BK= M؃    `a 8  m9s*TH²S/    (T""  L7U3yة)T?L@@@@,'@r@@,%PF =6u"CΝ;ɋL@@@@QBu,D@@ RbŊAAAwouVIHxx3$'@@@@    DH}?ٳg ⏧/ F&P|ĉ߾}ۑ;rhlNL $ϫwω']ݻ1=}^-pJ8I$ɘ1zG+Wlٲ%JS@@"&jqI&L:,xQTJ'jޑ5kV&ּ^͊Zk=-toݺuŊ# ~ +@IDATЧ7BBB{2eʔ-[O.7 PՑTm)T{1N֭S,-ٳg +% {OYdI'\r5kL"E_3@@_ttlڴI.._,M%J0eJxznh#efΜ9o޼SNY+9A'nݺakذa۶m|I@xZP^z16uϟ?k֬ \p!F@-Х>U?pj QF[N6kNQ@@k Iٳ/Z;YCj4㤣ZjjѪU+&'ꚱ?#vP՚1& ˫W@@I}_4]"{뭷^~]W_}7ߜ9sjӬY^zUTZ   :58qtpP9qP͛IGŊgm ־>qN9;o޼WHԒ+M*B$Yb Cx7%\%#G)RdȑKՏa@VԩMԳP>%Ed4Yy07n9Hr\i%UaUTP_nxK|xK|#5j0  `+[M:8N:R'L:luI[jq#\58~IäC-t&jVΜU]%\zuџ}Yl%R&)Og@YK?"p԰cQ>&ca' `wʕ+#GQs4?KrlkD&SLԩ%HΝ{W>-*M*|K;i\Nc˪CrṆU}Gu@teNۤt.w93QDjQǫ(c@t|jq%K3\)1ywj&D(T{uxb׮]GY3 . Mr7 &VɹkgH2 ڴi PS#Wm߻ IRy4CȍMVZ b?޶m5k8' F8W F@G+ur%ZC̙3O6f͚n<=F@ p15XvӱդqQǤ|GD7 tLZä#K,jQF 7CGB{\yիWO8aiJC-o޼ٴ @@J.\]S:MAJmKE.-&;&d1Anhjұe^6,,@ǐ?S|ްO/ꒈht!Fj$i˗ׯٺ0 }̅MO\Q$I-;lsٲeQ+${^o%F/ .k%0cUM}SLbb@M`jP~U:6#FK.[˫ϛ&ǏWo)ģ G=ǽ%d7RK Q'k_, `1uko#wްaÚ7of|I@ BuyP<^쎧 ikT:w}y-ā-OܷBPY?DrzuV.]K:  ӧOPgLS e L:4,'&Ⱥ0yfΝ r,ZBXl\^=ވW'מz]nH̵*np̙e˖=tU SRl C gΜ^_۰ߌ1}ׯ_.ғ)e YAA(qC| ?5j;wδ @@j/w8Țso\Ή@|J唭åS}'5kM{ٰj]C:)l}I2#FK O.KJʦ$U%J=΄ x\@$VNwyxyEҹ@jұdJrʕjұuV^6$@JWÐѣG2#jC>i\^ݠN`DmY[z^tIn,$ LjQm(T;wTZtW[9Y1P24#F&[ȴ$X6e5t"@;Ԥcٲe(/ LL:(A (P>m)S;AzeuŊM"j+]\/_RQ;D݇9.) /X,zڪeСC[jEjP}bܹį_3wTʕ;|64ՔZV} `3e͋1t)=n`՝:u{O]f e~'506N(_Ҕ2Dp@2EqjY7:t(-]8ǣP8j}ͧ~R|B14v-4GCzy3Ȇ!9Sf1f@2BKE臘T߻ڎjՔ^kٲeXX6ՔZHݳ|S@2L=7//B@*j1bC"Rw)Uy .9dptߩ6gz O ܿS<7oٳiӌ$szHL}  qڴiZj `gTR`](xa@$Ix!9jJݦMŋ_RrFb|\]4S>[mͬYcl  PMդcɒ%וtܷфPkL̙3ٳ+fˆڃSE4vR7,"P6KVG~{AR'ч@~@bAAAŋדVj;7޽{wR]ДZ"BOTOcWbEY0L@p]ԤéJݍԮ8G@M:>o%S-=ZVweJ;WtŊ%KܺuvzՔ24TG @ryhlY}{8X L٨hpv:{/-[СCZ?܄Vu{Rk$&Z;=ο~- USÇkTeR[& %AlQ߸q}Æ S{<%@S҆|gj9WۧRP Pj~@_TCٳ˗/^6@!`*T䝤lXV^-ZRgN!HQ `9dpbnYM8\@@Fjꫯj8ȒұzSI6 "+Tj5pjY{Ѳڕq>8S≪)uN:j˟ѱwg C2$2|meǎje˖ #G*`*T]sݖ|rǍg*K$# dH!IJ/_\5޶mi/  @L.]WSR.q1@F5//O?EҰ)T{㪽ԩSlPD6 @^+{ZV_pN:#PKmglx'6նzϞ=W-2^ed@y2q1YKqǎSsӧ5 G@G ޽[M:/^l|bײ{00#Ek-{}(T8+Wޔe.M/ä:dm۶ejsG̙3US΃R{@:t@8K^.B@t:tHF5J&)FB@z8n׮iY33PNݨc5kq1 @IG/sj ^} : ծv'NTTo5>ZX6 )& #ʼh->裇@<"ssSoz 2 (sM.\h|UrYS# ՟61ub}  D4^hq]8&OҔڈB Z䶦jeSZ4HB(T'T0ׯZD[lў 2yJ#@$PO}e24hqƍ8'!G mڴٲeӏn)… {q9׬Y7LR @瘺ǵoߞq '0srR'/ZiJ  t-' q~z۶m_z%ZV'X7P%{5j85]ޤ)uey9~,tF8T|˗?z0t@>ĉzpG ժ?oԔ:S cN)@8߼ @P_iґ9/ڿ@-rG޽{mZb*PkgєڈB+}Z6VRCt{\T^ ٣& .4&ݭM 5LjcjY}5th^lPmHիK,yfWj='єZC!@W/"ILT}Q@O -jh)vCg6$Ib@-j1|FW-˕+O?黈/@:fQXfM%6mqS˵d~%@$euC;w 0Cv9ELꓞ9s)SHP"_3ԚxD {\T[! `gٳgI B5LnGSj|X}>Bu<0׮]Roܸj^:q1 M8wjYݿ;޼yӛqn@LmOMa,Tϝ;W}`_iS5L Ok@/ <{ݻwG@ [UShRM?j&_)FBQAV ,)LZj5bZV((T?J('VV̙3Q;$)ۍ$ XC &8D1e3m4ղ㦽l HT>EG0o^lXݪgИ1c4iblJ!,'D p@lիwE  kԤcԨQM65N:2&w4Pյh ʩå\.ӡz-5ti/Pbư=zիWxx[5^?D= @%2)בC^[nU+C\Ұ@5 tf#:UE5 ,U;NbGE쾟#EM,Nєz޼yƳt,-k^i@ q=|t"!@?hJ=|A2FbtLj+ZZV:tH-7c Kl(T?b[Nza㓆ה^),-23I޹s_~;weB$X _|+B?P-j{DuWΩ)M[Rzr$p-@HܹsR%5o 90E<'Ыc='-[|WiY@:Vʩ)u2CSXx,*P l* -J*Ѳڢ׌@I$ə3[W>Q]yy)=Fjc6nXK5^O^ @!@8{\'D35Pk}7i$zSÛ"-ål.HƏ_~}ZVP  QjJ Ia4/ @$ZV)6޲eKɒ%WZe+ `aٝu[ GiDn*T*Q9N52LҔZ'@[ DtnzڵVC!Y@|A@M:5j4j(㤣t 4+G'Sʁҵi-eIİAڀ <}tժUj)уl)֣*{H=sըQ?w!}rG8joZ(ѡ)u} TʗM>C8]KEK.=o<8:/J4} Ԥcr;jet̜9fq$gX~jJ1a5dAoIԸ@qˠZV۷K.n!_T>WWR{;TFc#,?MdjGi$ `od@"= ԗbWcdQILJML:4 ZVgNڵk͛7hYP5&MVwTkTSꟻ5D8i( `e0 -lɔ)ST'N Byuoʕ+kq޸q{Ʀɒ2z@ D.˔Ll  53fj3dtdH.ɠjn8D'P!l}I4eo^|ٴ׏7A߿ĉyɜ̓} e1VQ2f/ 8sL,Y;*is.=$ok}رhѢ.9իW;v8gъgs`o 1;glZUMͫ)RėFX@*NwPI}[CV*Mj+uS7}t @դéJ*w. gE;&0>xt̚5#)X$^ްaCɒ%׭[gJCBRE@w?hYeuxxx>}vJj߽ (?~g6FB?E|)}{eZGIXG@qaaa-Z{^r qyII5LHSj_ N[Y ~e_'O\JSNiInRk$ eaR߼7|^n] VZ͚5S ybpn "@|[Tjt+g… K*g^6@@ njѤI#G'դcT}:nY  dM-Jײ!-X@9w^^B3gTS &rf5#FH Q"y. ={zN0"0]aŋg`To i׵+)k_i@?hYYLfΜG @W8p@5;w`4ÈB$ZVOn'47VҨ?N7nܨn\vQMHd} ? 4eZ[n_ƌ0ܾc}Ҡ~S7RXw)L+Ч,`jY}ڵ͛='9 @ϟnܷoRՔ&2#W_sjZZVW:Ʀ?tHI9e  @8 D\utO&Kq:OBASKǪ~;F>:FǰTSA}1Գ˳ٌ@k-ɔ)ZB !`>)S惦T}a!@BT eF7_~Уz@L7U_p;nq|펜mJȺT}ב!@"}jnY" ;MJRUf$ Z5|lnYSמ:GBM7\Mє:dVhl*OS T ݻweBrʥpU 5_;lhh%X`Ԕ?~-з1{jY#3Hl} qP-R-ZV9sF5I8qb@pjݿi~-Z,[̙3i]Fb@ >1wS-ٳg@<@_P)S%i}eM{-ΝD5jﵬB7|Sr'Oj'INM5@ EtStI&Ѳ$@9(mv0#~CCCM&}dvL@x mx)d@Pe7h8PMխbCiJ!*?X%dvoѣ5jt}#'h6]v56ΙƱH[R>XJ MRy) 6,Yrݺul ~)-̅}=~_ycOʖaR~Ƞ@M{j&L `/Քy毾qlVGAMu--]M:^MYΛ7Of~^;oMΝS:^x-瓟H}P9՞1?gY>޷TxOrF OSawp,SL0Ú߉'OJ ¨@M@3jժfHlE&E6V~>}:;:ԸqݻwOѪ|ݎ徍$>8!,/U'vKzIDžJCϽ{!ʎr11}%K*ɝN9fnyOV:&w鉦Hbԩ@_8x7cHM ԖI\cƁh mtLrڴi 6^((ޯ 6oܴi'NSTUk"sǸqp>-OlS~g5IԎOo+򅩳|Uݏ v~pbR 4JTݳg-[|'h' .TQu-ZԶmK.iɨpo6X[`XvKz,& m$vKU^)N]ǥeqGUDCb9W(FV  .TrjVCf^u.@ *ϩIoԤC6fjaI SLQMUjՔzzGUjGS~3 TsFՓ'GQJ刾C{ԭww>,ka=yвy9ى'VZUg15 \rGIHWe|P-[bc;ԯ_XVMJmDxQtND1*Iw +3~Cie tNikgD  x뭷BCCUj5Xԇ*u]y9 '*ORܲzԨQ\mAqܹ3x`uӞ1;Քzv)fTG"#mvBOz%rNԆ2K2>hVIOY1zEfwܮnb<1 Q@M:ּh5m_-Stϟ_kȮwT5jpRW{Z Jm_Xu'.uFP>*+֗{-|]Q7y[s8^HHi$?udվ꯾+)qR@Yf|J6h ]t>|X}ȩJݲLeOx;:_lwT?cjtgW\y|A@5|L _cs _ :tHM:ԭ;&T7A#7ԤcZRiұҥKz30JQ{oo^ *Ҥ;Fs 8 $ / 0&z/J;{ 1&K&&J/BVa Q!󶙖([hi&y oy(C @ =tt&Bc-1tAf7wЮ5ג95*LBEhW~z~,11? , ӨƦ_W\RʤI:uX0& -^ծdPw>E5?iJ۵(Iaw2`vM5kehƻ$6,Yldnf.@IDATS YjZ2 =wM,&ƚ9zܬY4h\xL 0&qƲoL%^:ڲoxL $h{&~Kcǎ!d5^:ׯ<={`RTvRIHc~ FS.M%$#zjc/{<>hU:ujX޽ӧ:`L XEI pfćJUMYw8\?0 F`P;?tԀP)_Mӳ6ȧj-]ΥAHכ=.?A^2`L ^Z/ 0!лA%λw6lp~3gάX:qB}o~M\(\%GTt̩.nx=}վyl'ϟCV;ϒ[0&T;kQ}8"֌[>GFP[nBoZa/Ȑ¤en5erJW~N;V^7* eʜ'H_=`L 0"CJ3JO#ϕ 0`$P5?G%%L⋦M~jv}?~-R~E.c9 ^rĢzjz]MO :(Af*ɡx.t*]GQa_δt&E(uR;LmEz_ONǯ&!wzJrG4CG7h~r5ov,aQj[Fm[#Z]K3wt&{&yNj/(aQ@&G+S4f̭[OƢE0C)e 0&XdQ-SgʔiܹpEzKXx5'`h=w*E4g7Jn~E_jַٔf֒S[릖v ѩp|dV~?Ҵ9+bz R^ ;ŶgXŔ?#]~H2T*M uK3UVqȷdɒMP`L͛'[/]L`L ]{ko'z.kY'\c=3/":U)~h?фhr>[JjtKXT8YB.k1JLCJXUsXN ~5C9EY {K E;2y-L 0A믿8p%jpxdGx堇72dȀܤy E1&L@&Pg2:&(:4uD'}w 9Gh:BgNWitc+Ŷ&9[cz/5)胊ԭeԏ-x*-=n&Wl|.zWM2ٳ%zL 0&Ξ=ԇYmtZ (;8/ 0'0v=[bI*^:QW>{޽JKݳ22+Ȗg01֚Aϸi!nӰUԘ(r3MFɚiYbr(Zjvj9z"XxcoM2RczڜҠw?DZuQYy@lmXԩS=8du|D&\RF|i~G>0 oT׬C^͡,amdT'`F+Roh%B҃Hr}-5ЕZr@tg/m>w=?$.bL 0?'fx/~VYNrkY=b4]EEY%Rޖ&`_Ae[U@sݴfofO^9QzN6Ù؎o 謍IǓh28:J.[*mC{.Z5gkO6֑k=ӳzEoN^Pc!Ue dųӿ}kɓ'WV끼r^`AIϟ5NB˺Z !C7%ժjR=ݭYu琕m#;)U'ϨgtGՓ,5Q Dž0>B;n:z\~*0&@5jRߺuK@lݨMQ`L Ȧ<&&?o֬ك,AF^|KQԽ{~w?~, (?=c*EU8MDʆi 4x`N0Ɠދ-8!ẈTvj9X8ڦ٩4ab8[GL'SHVuOYx˖-YkGV9QVc-'lT8O¶O 8D@%}r:&MjUb7MGS[ ~ ʥ۵΃khf3=eMyAJ=׬owIR0& Gn>{L0X$饣V! ɽ2& M.m5ŋԩSV/;Cꈈ5k~I<{@$^t]ߔu[DG%G ֲ16ǩ MAUDvj9z[/笒L7]HNЈ1iLӎ(|rʕMsVnwuĺnVvlp pκM]Щ-,Kf-}֞vvپSm@D4!~yyƦcǎ-[vr:K`!pܹ7x}S/2`L/ӘV/GKNJ+|ge }d*kҤYp~X5ew>i5qo~ [kN=.JZ1ѯޙ΂$,gKukFTNʟ2w ӳvTW6׷\ % E$&4 'S;a|ff>Sͧ閾O,,BT)E<Y"m^BMGcK!duǎ;nܸ_ KeL M6AƒJ-9]\ⅽtjգA[²KvM6R5$!T:/>6˷^:Co ؝E0q.Α1 ;5*}m.WUZArU{4ըx6j5"Z։q 46lؠAœ́`$ÖZvic1&ET";scٳgwYv?A8>I޿5zG{Wjf™f;=QZ{\sX][[+׾KwE-E.p-{o,Aސ ԲAKv!˛\4dCzwٟg5胊Rp5U+s@gFN4ϔ)0 0&dׇ:<<ܲ7X\'UbӞ겻o .>Xv+?Քn# T>$sLs#t:ܮ&/i&jZzVQ_.siNFmg|n# ;9+k0jaK뛸9aNϟ?G8\Sn%L 0&'0z(iR'5`LTg9!d/ɓ; ݫ: pp۶me-uԴcRc p֭`x5id}c/T;z=̪'ĺ8GI8Ay[ۈ^iՕ,/D7+>#%\!MmhQ3m2ݎ$kd*Oߡo)ZjfKM;PBoT}Y@=蓪V ʕ+wFVzaL kaeX<8^ m;f-^/M_P!ج4!ߑ@;Hϟ/_mD L 0$`~`ϢzHz̼L|qGOuZ՝J/PΝZ12^E=xs[rbQ$L Y ̝9wV<JƝ;i&DKe {e7ք#6ۤwCK.<^dhlU'4R)a;jzTzd)a2l0E g+M-ZXreժk&U_QIDԷzS᥽zKLݪ6c8F\4Tvr0^3qn̪뼪uvG\=u2Bݺu7o\H KgL 0 ^z'>5,b܌ 0&@/uAD… {u/GQݣGŋ#lR,0C\%e_50wfXk *eԿ:E7rp9Y+BO[K L|%8 '=t@TTTF6lPuīfL8yvb{ȉ lK.BKoS9[]AovyA;VL;\I|X.mY`oD[n߾]fͭ[e;&` 0& ٪U+YK }`g`L K'V6c#,, ÇOb|nQȞ <3-]!2|  4Θ6ѮV.^1ЮLy`.+0K4FB3Æz O%?#푸4 >Iv~nYq Us󟊀yqL  86S[B& !xaHe-1N%\[y%2hBGV7p$m.!N"p=*.jE1ѧN*BZo]r`qz9O{Z=7\\БUtv=y[`L 03~aڴilYK-h` RƩSڷo"yM:uA%6=UG,03=¢zZzHV I ePڝ G',Ρ.{t8z b]$cAV Ƈzna\.G^CmC. N8.Քn?ٳO? Nj&@TGUdYZ:@Dyk3mе ;1gPȶކ~4Uo]lY_bfL[D\dg+T:,3&$p}G۴H1,|Ǧڜ[Tq@oVSPv1cwJh G[Qp_LܸAHu8qŋh&@ʔ1fdE^(M$,0ۿOc=m#ˆiV*tUV121%Md՟70an!2 Fxip.,0&%ѣ֭[GEE\.ۊ\`LR%(ѿ]vy &LذaXX˒ԣȱ ZT8Qײؐ]?u^Ȓ~(B+zw83N.܉8h Ƨ鮎uVTkk"޽{"`L H!m5Ջ+ɨ[> DNۅEݮAzm)C\%@F5:ozPwy&$/:x3Ν;Nvՙ`L  8رcb}kP"`L 05Nyxi.]={|BtƍC96"%`39o}8~R=̈́.ή5[-31;LHluxhszl]P+]J\!xBZ-+z!Cƍ<xL 5+(KV@8'&^z1 4y387ڽtv @KD%W[:~P{.qf䜘]z{ZqT5{RN@{=v(FK >GPy%U%k;=}sTL E`;=XF5fr|h'?o畵&:N96ۑNWrPokz78 b4qC&\ro)K_|mO KL 0"`SgKb9e)c cpem$Sr ^mpVUj5Z昪"y#SW<p;rJ@X%`L 0Õ P@d<֑]7l>HSSMj(`匟ʣdj9.D\~9_u`JJWT={vbɌ791 ےЙ/i}G6pftS+0|K3] T)]*lPJd?"GWYEÇO.Хк.*l xVU~#WigqfuPf<)[_(徣գD#rsA(燮赦LOGtm&p$FGR=Oh*+ huς@J:ˆ3fJ h&@$raO(Chdc bh šIOegj4ujF vmDӘug~6%KDf֖xs craV WV-9ґ la3: tCS7=3 r83놎;4:Y~DO-֭*yL {na2U-k"(4c~DZ-l9SBXE;kh`NaX L!).sd|ڵko[Ɓy̙իWP!."""s|s<,,VZNvI`޼yq"Kjaԝp_J ]2*U݄sla4U":" kѹ j"ɡqͼ~KZښN ݤXbas 6ӛ.7,=dY7^:ڷo9UTSǝ%ࠢΫc]+:0Y@r6Vc7uͩ'.^ۍ|ɩW=kh0Qf;f+. r'gΜٶm[僜 / 0'`eQ}n'&A7D&f11J#o4tdSl[ؚ6$"LKdGU^aRGUf(rvK.e.X(… 1$\BFv)4Cr= ڵk'OΝ;TNXh<9<Abj q9>2M@0XxY`L uc)&yEZ*j9-UjJ톩%΃Wf*5XSbt#uJ,")Ma;+3ܕ,5̛ĞYfv ȯ[xs[+0&^.(xX-KL@6 u dT/ZM5\F/=n$cP5S[-| \=;Qhv+=E;qNLpB>`!7GRx޻w (3{%J8} ̓ B N@͚5w!{šsyp6t6mjԨk.> ً-zdBGXT)3n.bbM[ TF)iUMPm&l,H8ߒz^4q6˖pz-(\oxL6C4e cUU_r9 ⒜pS|e/Zw݄|˖-'+QhBkQ ]N@;cJȎ:{:8~FCVܧ8r69l:%L`EWi;a_zf”2t1kJ;˦{gFc< hJKnݺ6mZZ\8ѶJ4m10w%b2; $d㤧2ZS+7suLcZ[z#ZHW̝>J]kǼ:Y"-a$Cna-ڨQCb>J& ֩Sƻ1cƻwB' 8[lcѲeP,}GS63``Kn9.,x"۷O(UT9RgȐ޽{f6l&r A9s/\.gCn*z[ %6Xϲj | iޖC&V jrd`?6CmJf%7;/-=?%Md UGi& ܬ7=#ZsLn=Vr^y>T_42k;oI]ju.d ejt:NAHz~me}EWr81صRwƄ?v_ħ6ᮙqʘoFu6lPk$8}ɩXz ̹P,&"oQHaT8)8Vwf[XUL . O[8q㲩ۯMC#u̼sKZpt~:bF?z;\ s玭JɅ>1qJK]X1Dܹs{ *@W"E CeL1ݳgOÆ o߾]nI&Ʌ,:0EAph۵k'3?ƍ440y,w-4Ǐ YVQOʫpˆ@n߾}Ŋ=O2%f ;ݴUhG(w(`=A__pUdZ,d\A4VUR,K|K?lR=i_Tf4۵a}2c6~FgQݟhUZbPzs&- 3ƋGyS -]ͷWޞŘ< gHn9'&jN$GgȐ!C Zp&|LR^yEm:> 1@ G|J$p=5"9:w5@t"'篿ڡCZ-O޼yS fƍkݺP~PZNŋ٢AfRC9*JҧOo̡|@7o^-q/tAܶm[Ǚ6|iMnYp; ݞVTc! @\S^Y3ņD8: e6:xcشhn?4(:RZ޴~hF :>BL/jO!n1:9M}w-Oj,/okG>KhfUُO]v/:WR3D)' [ĜSp?pŜO+kopcTh9fGd0x(NJoP-o)ǎhoyqLg(  g> -ռ%v3\e-5L/].u;u\r0yԩٳ`:;m۶!vpe-5\V9B 矮]>XˇQ=sYK u0ϝ9'^ynݺM6MM*UJ^KGڤv/]? Г0ɸ~cpZX*v\ )ۏi*fUi9EKG5$Ksk/lF\Г Ap[eBh!/tLj4+5UKᖼD:Ci?1OWG/*%y%]K{/Ҏt^X'Ք&z[׹ .Y59%PT{Sj90 \!@'&`n! 6s 2U 0 ' o"uNjv3&xK,1+[pe ФIaĉg͚Gʃ 277kaf@.tMK>xX\vtdDBhhoVP[A# `sa ;v=~#'w D}1?|1ǎ6չ x!9ca GE[jFB{V xTTo:s,JF?KNhh]XS~͇~&-;b C*y{:Y|T";!2vG(l$]1.QjD}k(Y+-u4-eMeU ^Q1!+.UcUMqrT}%.l39s=UT`͇eL 0! ;uJ y!L  yK5MiMa|"(. 0&r ;-[(b%K"4kZjao*pI8beaժU ,/ZtgOaDk-8e-O?ݻ^tv n䗎va5)L5 6kzd EfR}siۭԜdoEk+Zj'b\ٕ61iEm8up<.)-D?Ms>8c]*-5&0#-5 T&e]ZCc-ӏ=7y 7Nq_qN=J;Z)ahR=7?3ep->w R"!_;P/~<z9pUB]k[N0-:=Æw5&K US!Vzh 5)Q.opN~9F}+^+kUU)45:jT?1ڙgRK|Wi<}DɲVO"1}qD`Le.;wѦAe& [rc 0&Itt(JY3ؘ8p@t??!!!3gD(nwԩb`K b̙Sd"$L 7a+QK~vŻvKFٸԢJH 3c\!CDUq' tuG~ܧ=ra$5'D}u(qkڜ^{T.̪Sp78Zub urÆ >ԩS7h`֬YSNn%;"8KG˯_KTF t)&XCujiD7@IDAT(}rKh96<͟QJa(QzSs-5l>z7zLJ[?A[hV# X8k%U%\tрq8 y:eJ%>]SNL 0&CI={r/L xo=dL 0{Ҍ#I)f5re˖n֭v3SsUVa}Ÿ&̡ 05k p2Bj^9nc xF̅FP7]/"/c fe^!YE BQ})9sB90Z=e)KQlT%?5:8nt/\+ `L F4wŧrqG=0&!!/NL 0&E@>3>C%w9|6Bv |ΝK.̙ӽCQoa.߻w… y#JwתU ^><|z!.2z_:ܗR^j֜OYdaNos=6+E~Fɭ\cXJ/75͡g%%9i'\wC"B0V5e#E1)4]*s pҁ}G)ҡO+1&C.Kr m5JL 0n~y@&\8 )]tBf]/Yt7o^!WȘ1^7ycߗ4i[V e>i*E:kPM# {9F%rA ]5B}SF.r*tm9NΕ䗎\\;0 *rOb*L 0&@2Rxi-pbf3&@8+ܙQsn)7nHD2;ױFmt~IոHvO3 U`ؼXf:tg繙Fit PTJyp3&`/S9KL yKpSߛ"ψ 0&E4[T3LV >P\5 j2/_\5Uk}mzVCO/YMFU)[Κd~,47{T4իP3nӕ2ZU:އnZ-RԴRwUI2+pΉ txJQ/E/gNjeL 0 *Uʃ#qL 0(P@<\~b++fL 0`'u)J,dXrh%H@QOr3KgbҦM(Tvr#nL+,$ŏ?cFҥKnXMTTTDD(h`1o ۗ) O9 ṣ_W,+'~'O^hQ3tA.Ȫ3tς\ThsBlf^N+5e5RJ+J~vd OЄ^Eҵ$eNI7D}i%H0.ّGGkM?U;҂0#p+_AEuժUŤ7Z` 0&@7<ƜpGbaQV[S>:I`L MUM_mXXކ ^aƍEJ0aۿ&u͛7?{Lv9r/Jwoݺɓ'+H,'{㗎 u^8 eL<`poNElzFڜ:@,Rw>Ln ŰviJkZ7ݲTU JVH PX o xb$Lߡ<dJ%&/6IS+t2eʤI-%w"_:Ѷ  M=ʢkRdIgWgNpQ&`uMu^}^4>VrISZSJ?o5ǔm$DQ{L)%mS)x5Ef txPQ #2?$xL 0&;D҃t6mdXbL $DhZx'gɓbL 0!pU&Mi=rɓw?T̲A%N8qQ/?&&fҥ[yDQTL̙3JnK,#BNJ*?^:KGܙDo ftr[J> R('ըde* -g==}F}SsT_ *Mэ2dt%JYK@~pʎeͽ,)[*dg6y[S"Y(ڦPf:8kpv-5ʌNsiV:TO5Z< >nC)\ d=XVc0 [EM~R)k!{A{􅝨DymxC8 =P!%X`AAe{Oɰa0`7zϕ`M`:v]"o+}~q~EW_}%`>tҙ <̡t@>荙Q|3fXz QoQ\t2rH!v 4ś[8/nGUT5dնU]k-5I#SBPR4 id;p^03C=*YDKPzϹ 4e e~p e2H|hA 0& [4ʔ);CYbL 0\;}m׍e%`L@x(VX54q[g}&ڼy3Tz"a_6.L[x0`X֭[7ٸ,"ťÀinߧW}&X`IT8KU¡f'O֭[\xٳ;;w?d422e3 &Q]o߾ʕ+?x̿ט/]77kerݻw\.]5jTD-5\ -57nke/oNo~81N I"rgKHu:dA@ґ={VZyz쪝"ʈ>hcaYYs~>]/kE'MMPS ݒ8?Ws;Xn;wNXq"n/@PL׋- fq *%ޏvNFOcu귔 î2W{~BG)!X*y녙2gąʕ+?{\)Y|С2su9f.UoVf04hН;wrM̙7>#ȢNժU6@dY4ynWy{==&`Bl ^:ʔ)HCPT#ڵT02ϪIl:\䠢1ގI*`+iNߚG Eǒ$I#si0&"h8m#tA)x8x>k+EЯz? KTS J^6iG_֥%)u v; INE*?~ll<`c>}:<$`0:lذ0\X`:::zÆ }ɗ/"ȁ \CۍCTpA ~x0Y5oڴ .~wϝ;'B+`$_2߸૯sSϛ77oׯ_[.ÖzժU«y(r+WG ӧO%K~b].[n=o6â1EI_r$=p޳gO ^#xkhѢyDJq͚bL 0L` )m3t3'/YTc1e˖0`Xչ zxOX@QʺUd=[t*D69ANZՏ:a|z39g_>QgR~o=(S,$¢fK WvRkmT4= T, lZYka٠Y.r۷sζ0̀k׮ݵkŋ5իW߾};kpw^Ck2GjmZjǙ)={@s 4WRe˖-vk6o]Q/~8X`L 0N`h=,yOQ|嗕+W+Zv9}:uzJ5 [I#޿7V/R`K>[J9>$)Ewvrb\FS)*ZyW{0PP,1&?{,1)["B-q,/UЯ"Y跶@|pmG wQɲ62N>wܹ0 J2uԣGՓSءpI+eʔ駟~:~8}bh~zDXL2fט`޶m[XQ;>RJƍ_u[qMOo qbL 0&`K` jgґ4b;հ% $;LDi;Rc! ȧrX'\s'9@uTS9%;lj(217\MP}ƨ<dK |Izm<_&(O7t%MެQo3uvE6"z9 :/$jXuL$QFA E!4`N UP?Zđ#G߿Ν0o!ѻZ u؛[bm˖x.)Փ^{ˎ}#5 ,5Bw#|GzR,ٳ%5RddsqSJkNΙ3gn:\eHf `2eJv0O&/L5`怳\Gs8s=gq+V /Z/=^:pO`L 0't|mE5V^B7n8:bSzr,KDηq"Cl_UQhIƹޚX06PTSaT;A6C&mm*\[ze)ן&28[u&l,JmJZM a+[QJ,]C_=$C߹%XMcON .X[NJjM0AT8)wyEYt*pRt04hX &]{o@"[bg?M1Cmp(YS9 #RVJB^jUMyL 0_!:矋 Yoz~HX`L EV/ժU1c"zxWcT{TŃ hB&NJ@ZVTB(S~`\玳MWEdJ8rʎ)[TF٨ha]e봨3%V~oD>T]-gQHprgAO_,Ӭ˗ߴi o`L`8*G'@^PN}쾰Ƅݸ%C9ldE /:+|:͡X!.ak0&bQ {U좢tkq;@o?>wL72:s y~u;<[["VғЁȟ9x.u_ɛ][up3|/nʖ%Í]D,9XԺ$7|Km)@@V>+f3DLmFg<߲A aىE7zI$<ܦ䚳lk_c5pJ燭 xvik?Z_ޒ#=:NN\OM"S:~!u=QݚQM#|nԝW'Eп͗zgɒeɒ%]tN#@…7lؠkUѳfi8&t5'N%Oػ@@vk*Xut ? U@p]wݥAfl_ˆ .Kqq#(TׯZ!tA\{K(CܟO'/eEme:[ϻ#RZG<iZM8yzϭͥ+*;.NZb.7d;Zqm%{p]策c7HL:Q]c-pg1wUá\r[lyG< @` Nzڴi:N'_jy\Vm2HQ4 Hxg♓l̩]R.pTFqԣF:F%  {iҤ>};cv{ @;噽iZGj֬AGF/x|︥[o]{ҥ:b8sIsEޱ@`~{u^;/9ffy\a|[<ױںJt6&HWeͿ^䉎J4:wɟR=4kj E!jQ6DVזvӓo:7"^CrW2gD֭WZ+W.G.; @ xoڪ3W2H7k?w>kiUR{ڞOu>v]pFܹsӧO Р?:ut@TCR`N)ֵk9sKLش:⡇ڼys-`a(:J5t4p.Rs*v-ټ#vT4:)EJwN5*8uGuyhU/g 2ӯV !tƖ=֞#qq\ yI/쬐jĈɒ%sI!-s|:/zE tzV 8byXϏNJADѕ텊2) v]nDFl6IS)R7nܗ_~D3,@T^z:﫮@dE㥓NKa@|S`zG9 &|n :B\(3gΕ+W>Æ 7WOƌNR$G'߸zeum1#"[ʑ3)t}uƻ!fݕN2/$ ߲;OhsM[pgAsF553"I_A63<=Jblʺ&n:H#` |Hޚ%Wy2eߎUVH!\(Vƍ/Z$ odjǴ1Q>$#qr3>W:R2ՒÁvrG˧i.]ڑ q/pwkѢEyYwV~/S:, O h4fנT(u|"vQO4СC5N{._.0}c?!E['{O\cS$7/!D{y N$=S}!uTdۍ~gDL$m̼%^jUD=o66]<6uDEyzL(Sv̛7#@iӦ9so駟ȓ;=F˩XGIfKyX?ĻyF/-fH258kOK|ĉ3fe@_gϞ[o}g=]-V :, /hxjU\tzR/Μ9.HsKV[$G ^SkV~{O2Ip̪Sh3?z6pj]l`tiurbT2tAx$6Zx7kw˴SmMzo3'l#K/.\е_ .E3 :X}q :k Y{g (؆pӺ`7T.Y}7^Dli4x*|fotsz}_?wp::yx6|S9+xWe9;IinT$n'MIun|}_/kR|v.)@ 4lPW+Xuʥ0 mM]Gx$p.|B#<;AN*K^a$MHPo}.|dF٧O}6sI! p7^n]"II @7ýeύIɓ'=z_#u yYzuNԺԟ3FnӺOi$ڱgJՍjXWoʹZn]*,o2mW*!ԳzGǏc Gb*PDM6t:2d'R$_Gp|B#};֦k$_[WYwixB7gKȝ;iʖ-e@(Y7XhUVOQ\?j(]7 >l<ƵwIDCLNI\~vNIHz?;e $ښLk7֙6;n}|&u#9ϙy]Zz^&˼g1[:3hVٲ!onn Ȏ1̺&/I2vvˢR#AR@;wnnݾ+z撝As>X'pfӸyX GěvI~rHAJgsHtӀi*V8iҤ,Yb[P~@Ȑ!üyvڻwoȫrԎR.G@Xmӡ/Gatj :̅]M^{-D'Y}@ (H*˩_y{qoo.P]P$_'i_oOCS%sD:FQHgwIV,}D gC :m:⼵n(*e@|K@'k/íTZFlPZ!Jo^j]izEz H"Q^gyfRCS@4իט1ctUKK2jA@ ~ӠWzї:ժUGJ*e n~l"f*FGQ$Dœ{r劬vfeC‘d.ӑbwtZMĜc\'|]W?NGYcI[3R@lO ѣɓSrF@ ׬Y7=ei;Z^"=9mh×.KQlRBdvgy6U%R%MtȐ!}ĉL VE֣թm4 %0aK$AСCi{B[I&ODox#j+#?ٸz'i"lu='?U3nl+לey{u$N_ՍT4uCc_<(1y@M׾l:z=/D@[YjѻiӦ9ss @ʔ)yU?g<Ү8oVR$ՋF!!зߙY2}9VXѮ]; El{Gʕ+ I~rD!įo͔f\}9s\駟|$#t3E&LٳҳwW( .YRمpj׶>c\ڻJ'Eٰ땒i=QX΍ge%C|}6_b:.ZD*䭄o̴D>2)ڻ= vt,(Vƍq; @, dʔIҥyۯMkSJGyiھo*FV> 8qN /tزeK   t,Z^0 /?sGI#ĩs5?YC=/_ޑ#;vG.o9gΜtYYUY| ^D1mb*ٟ=zHSaQJi:i|1+F-C>1bJ$/U?4If_vZYk>k%=K}@epc˖c$-ǯ-\N:6l뮻n|@:7|3bĈd']2v? .#-?'n̓33_ʼn߾˳eejlj  R :ÇAcP/ťeX A2OԱcǥKnsVfM]xϜ}y<5Rtf6 SZEՅ9J%qd?7+RUe_}RSαRau瘮R*uJ|$r/9nq:ѝKv;f?9x1SzD'?n296<4XgM%Js}O>=uv.)@hݺUr岟r·Jm\͹ H=lk#iC`OrWa6H=x$Iع@M6m茲fС6.otfRjE?_+Ii40`}:#)Tiiu|<t@ȆYj71{TLT, +;I$EGuF-n~4:r_^ɛA~ol̯ 1{qex7Z8j;=큶$XM}$t2ʾk_ 71m2YBv,<'1ZLP#D;GU1?T@(W+ۨQ#>bB'㟎K[ķ YS~}nnMV$8z+oNk5k)S{qxc. @ w}:W{=AGV @mwu@IDATXР\2RfСC5xcf~9VTRic>zczFMj':͝wenIG "ѡ:KdB?T,!GmjUɄBj.>v^'p*[^q6>q#p K?Vp3ff&i@xȒ%˒%K^|[[g靤$-%x$eՠ6ΧoC|$t+m3M9w>"E@7tvY]ZGY'׌ @ 64iff N#?|ɎƎN3Ϝ93M[URFAXL"jGgdI Ə29h dt[DZL^4lxM*[tMksbo4]eSBR$6iFRQoo Zd&2g2` vWfZ~{KjkGvy\`)8[nfJ.#@xh߾}p%i2Tޙ%>. x$N#ѩ+_]ڐzذaI&sI! :tX|y٭ʝ${s:, K!:tgСt$ʶ+SNjJKz+S;eC K_s\$S*ɒJtF]ZYOtӢol0˖Ʒ-7%V( LrFE @ 8аau+4Ժ[ƶt~H+~' ]"X .s'N\?֘:! 5X~y2MnF=5XZɓ'WX1fr~QϖZ& M(  J0ye|\O@ӧO/Y+L@t钮 3{V`$ p 3({Ge@Р2dYWQg|e @nC@#eώ-[vڴisvNp"JUV-UԜ9sN?2zhwuYG; thesG}t…9@ |,Y,ZʍYQE[kxon>/ay;YQ-[j/uL  tԩSG.^ :jбIg"YCZ"'TVV㸢N#AGƌ#ի}#ԅm,IBH D%y${O8yW>s H O`պ@JZ,֢D VHar]>}OvjgB@ PVZAǡCJt|P[ީI?b.0wi>\N8>W_|~Qpĉ͛ϟ?l˔!D-0rt/.g%O\tZ,R ػwo 6mdN ZҰzBL%mcQ 2L0zꑝN (AG7olV^)NfFDE,GСC5VZ$gQwTkc#o3.gZA3H#{yb#@ \pg1bYҢY=ݕ# ` $MBc:^  ttyȑdzG)LaF  :-Y"K֠#5):H"]H;wnhh鋞2r{r;]@9rF q[UTхN ,e@BBBtMt-YZ=Yϒ%sW MH@ vGʒ7nܸYdv ; ::mڴfq{9gD`y;YPӦMgΜ9sfGĈj~gznǎV&T^ $UVM ?zeqB.]z!#@_X|9r*xP" yQVHH Oi2T)>÷z"  ,[I&ႎ5x,CU`6i6,|CXڮG7.+I$sj34 6Krdɒ߿M6*B@صktغ1T2)IjK@ Y.N'uFc֪U" 7РCnj)a-%%ABUR:tO~ܸq5j( {׾ksfi@ ®[ŎZʕkԩw#@8|ŬG RfI#P43CRb>\…L  sڷo?~xtt< @` $ɘ͎Z/^\B 9r`' ֨׎:[W͚55œ7o˗GO]ϗ7tv@8~N}/^|]w9rA}ĉ7l0eʔK.zCzF'}վnK`qW3gN  4hԨQu&p33` }շ8cc6G4hAGl#tݻw[9x|VW< _:ٹsoV G.; %hѢf͚;v̪Vp"V x+;֖(QӄI@b*pB :?n}P+U  @@[Π{nQ?nܸ+̿ $cJ34 Jr]$IWH!!-%E34 VKS$]4iҌ='H! ?tZ-$9ABWﵠ33fO<῕uZt^zIdLeZ)#+\h^:)SxG.; ~-p٧~zҤIf-i%_F34 oC幉2t^E-e@@@6mN5t! :f0H#&A3dG4РCCGnZY]v޼yϟ=zgBDph q~%wbŊJR @ \:ϐ|rkN˘MR.g1rRQp0o޼\xu w(F&MBBBt~S;8%du {|+^8I9sU2FT7ngg|dB|_@밣&۷ׯ \v@I@ä-Z8qªtH|Y_W `їrM{7?C}$ +0gΜ-[YDH l) >{ALOѻv駟(4#%E7_A*A7噇  lРc֭[={t&Vj"uy 6Ǟ(.cHfi@s!!!_|K/dgB@ 2m۶խ[Wא3@6,YmFw _/LRHbС $\R  Xyt4$!fi@CsAGʔ)5hҤ˝/^|g fW$L(ED!nd3[RgʔiĉUTqk) N<ٲe9sti< .ɫ˗oKv䲃  $AG-ΝkkAGv4R@wiRϟ_RJn)kTߢ%tС̕1cE]r{ѳ2j.EFPEi9B])F')SF?`@t]=˫WJ,< 'ĭUZUc|ȑ $͛7tRĠ#ᚆ;#-'ˤ'V^]}A֑NFTG Iʕ+5jtax"5X"!.(pI <98XA)Sڶm{$]cAp{ }Q$]/ v䲃 $1>& iHh189jCj 4UVv)@p/AǿkGwC4$荞e$:HL]@"QD8x…;= #r?GCo˫iӦ;vlڵ,R čN2ԤI]f¼|B2df84ę+lıȑcԩ*0*ܹ0 %p :-s,['Ȕ* }@ 4xk|ء3gN :ʗ/e'&Q&NXM,>xZFo{sK#+p!TڏvbJ]X1]{q5@"H"EVN֒z̩dR;T@ .]'uk4#@H 44^ׯy=oiFnGyi5Rfl9W *ANj/ؿt$%ry@8ACY*TAG+s;7 7ٳglԩSUBwyA``ڵǎ6mZG.; $СC{/ZIDX$@ yP ml۶~O4iRG.;  ~/]Ѡcx+iDMOSmy?9nҮ];}#Á;tTdžbd?um۶VM%)k(@ zwxz/x>o,AA,=DB_ 6q7o.ӄ4DS`a '/اիK.v)@$u5lf~Lz.Z :lR4kPov :UΠ㩧^3FuM~[vzPm,IB< uͻ {k}e@_XfN~ADޫ%גDbC",C$gv)@@UtC 54и2!ߤ9 :⋗_~8qbժUщ:]t֑zK6#L(y@ p.kӤ @޼yun2e8rA@.^3 >,7ܕ#+p#~pZH?~G.;  @ .tyȑ]xH& iXEO1qtt%wX:%{޼yރ/ʨM#rN.@#g@JNu ( T@BBBի!Cŋ[9Yd1yT+Kr|I&3gԅ'   hСӧO.%K夯:220G^;rA@/_=OHz<.o=q N`ɟt=gW<((?~7,R  @-[AǑ#G5 y1+mts={֭[YtT'X#;vLWT,(KfiqX9}O%K6`֭[D$ @@ ޽[_ܺ1V2)I4 E4-{t.aƢҥ7n\͚5# ڵKѼD22$0QH#ΠCg_РFZQM,Dt2cF"oΔ/8+WiӦ+WΑ ~'p:;֬Y2d-4~-p!T:ћef̘QP!G.;  @ 4h߾vD+AG')#,p'Q%J tQn3; %/_=~R2xV`C8vV,Ton<Ȓ%K34 ~)8q NZ]z}3%BUeS){KG+9wlٲ9rA@b. :RLtR3З-髎9)@v 9 ޠAٳgt8P}N  uCUzdFegQ:*G  &X>yR^ ~(r4"UK(Q}]Mع@@;XhQf̠#8|ZW^vǗ bKCǑ~o6AG  pƍX,PdB;ɘ#~"0y-g/I$I~t&"; $c]=6+^RR$1H#])/MWIfO>E @=W_~żd2$'0QH#/߮W:iӎ3*v=vQ߯ʷ~kIJ2H#o \"Α Ȟ=ԩS~G.; ٳg~I&.H/G|[b<;AmpԢH">\ѢE  *AG۶m'Ol^$o34LΠC :4QYES ԪU+_| yϒՅ2I.**EA8y3 <0gb  x:34ie˖Y<-7J<GRQ'xBc9s:rA@b[@&M˗/4$i H}'F?uԙ;w.A%wQ-7nܨK۷}R1bS  'Ye@34$8IBeN:ȑ#/E5tT)"$44K. 0$3:Ifipի<1O%͚5y$@@!p֭[Qfn2NoF y8^ƖB _ŋ@W@zjƌf] :rt(p$Q… kqw;rqkT)"$88Xҹ,X`-Y} EJl>@Ri:,Wrw.J]D WB! ]iӦAAA+Vt$I V p2gG!kԨn&Ԗ`+QxqQ6m?Yd\v@@fjժթSSJH@>^SnݺS_Cqq) ֡:ڪ_5*tX$$pj :bbnoLa0MG %"߿_ڰay\2))#n"_.vBBBv)@mtA?<]2%LHB;[z-+8)R:tNࢂR@@.VA.\mzT/"CZHs2QH# :ޙ-AGʔ) ָqcTҸŋ{9͂% kIG%M$hYQL2M8J*\v@@ 'Oqճg6?:|U_:>dFظSڌmι˧Õ.]:G @@4hѢܹs̓iyy@ 6h1J<(I5(U# F[[&Bt fݺu3gμhѢ+Wx]ɼ႒9Uϐ.;&Ce1ǽ瞥K)SƑ D@h֬> Zܥ0! KV6 H0i7FqZjF\v@@7 hѼy˗/^*ΘAvU.Da@ !4Ё᳎b< .dX.nmƍ܎;!AҨVM1I#@ $#6xz>:B^&M  p[oݺÎ_Buyyz[C p'ɀ5{ݱ1@@xAmڴ9ry䉯we1I#@ נc|" :1bNtTdžb_Cԩ!Ε ɫU(Qă @<%߭Wsᯟ>} w&p\', w} ևa}$T8v@ vurRʕk̘1+V }@@נcٲeኩAǓtTaPt Y'g#s֠Gs:n\3g|wnEHNI)-Ar@ v_ʔeDt_|% /XF!@Xz_p.[T<  2LYtipҥK=RN  Oh1l0 :=OtD!РCUf$О2 :Rb}C+Qqps}G}D/Y ͻe.YGtHʕ+ץK(   h/CYQ:T,x{ :|m)K;%[v{_CVm+J*=KG4TЎp" >-coqrd+ި[ MqCG :t 1 :*^CG(;||8p۷c!8q:utܹzX">6H !gϞ}܉@ɛ4i<\" nؽ{7\Nʆ_ Ht~Yf'O>}x9B@\rEW\ĺ8p T@Tʕ+>RLr@g :֭[j*nf :'O%4t>gmQ ؛%JEUI[Zw-SLmsfwW5A@ ZGa}*޻wܹs:"Z椸8oHsz{u!#q9nr|@k :tgΜѯ :\j0E&B΁Ye ̵-0Z?VGRe  o d-[ַ88pښ" * :t׋[o@_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       tT_R#@@@@@@@tTy(       !W%իWÕ./U{#'G@ : (. pUQ0|mx:Ln$Li+F %U( @ Hk\? `։GbS4 D_#V@t騎_ߎބWS;pZw@{[ Hr@bA$84%Y@|aGb DG#:J@` tN_.jko2nq< zY}Z幃ڍbqkŸvkD}NSD^Cs'OZ<;`}%g&G@eH QYE47=*Q` ZNGsm9vh>\t擰Qp2  @q8h<<^EykωX?ox6=Ǯ#~2tT'@kFTH;(g~_p}yE?9Yw_ݽvm[k<7[_Z_߽Vk?{HrU&杍ڜ + !y66 - I(# %zsxwNUuOOUZ=uwν~?M 80ο-y1[4|.q,P6xn?]ylA `x tp8ĠgJIB.f3W_Ѝላx'O{Jʿ-ߠl7m: %Fu `0 xM?l?oDGR GG=Q;(}hDG6"{~5מ[ԅ%'g1/Hp23 wTʧd1sMÔ7\☆e5{Ѽ/,ZgFaI䉉.^Iֽ6.JԴuf̒QAu=>'2QQEyOf6A `0Q@g"P>a yڃk$M l ÒCc6ns GLXsՆϘwA `0䉀{#*$C GRaǥQ3ENdZݙu-߯/}.7L:7vsf䛨bwLܣ8$i4G0s5ri>SSoV(oX㆘_lc:ny-d8 uS⌰`PniNgӍ [ǯpc#:奲Yqny; a`!`M]..Ǣu0l|Pbi>fg0  fkkX^V "dImV&|xP\DڛRAɃeC=WUth8:-0Q" ߆>LǍ耺bwj^#{"NTKVx})U͛;mjyIQ8m:fq7"7=R"wsE(Fg`7eϛ7}jeii$k>D<840c7N zUexzc9x spc?6$ch9fΜ\QO;gZ5 _{~ys͞9"JvZPRn49ָ޵Qzi`|5VU`m+"S)8?mlo|ܭ؏ :fmc+czL/=cYi&O}`m[녎,Ӗ]XOn.vqNm/,>u93&O'}Ѕ6\KYv[8 0rchA `0^hi?S(t辽T7fJuI i<s{so<)Hl|sM)+8xi,pLbwBMnZ{z285-lT +KKV͛֞^PKV͟xIx#ЇxuٖW̭Y6^Y=mmmsj {umm#\bFz+08A `0 i@`S*WF=sDGEsݍ샓h̘)šHgr3S88`Y.5U4={fuyxG_6ć[wH@_g-Yqx K>샕fL,=sَٜ@ #˴2%`\#:IT:z97J\7*?MjӺ S<5Νyb G9u=+`*12&Ռڨ7/F3MO./ꫮX 9uڷ]C8/V r2-#>^{]^}ՊHgX& 9P{JwF`Kޚ1vLb]W]yזk_44϶4BMI؅uHJ|8 .[._l]]c;2MӮܯYlD24a0_C7\ IdЄxpoO65t9[V :do\׿gUWg3C;>v:46PS{e?"|nyӧ>cs?ЎmOud38ae.j8f. `0 o,syQb-^laMo޴b,ucw>sp/8E,~G®Z٨Ql|o6_p![u`{v>wW$>(s8eFl}ٵ} 6.d(Wu5 䛗/bO]g6ݲjUyII8F{>kWWׁWe@g`S.oXCo/ww=w4fdC`S,m6/{7.[F~e1>#ʡZǴE ,^^#Q6Km(5d>4 A`L.tm6$:ݽك h>$D7[ Kt`޳L5TtHTDX軯|%Ê'mŁ]r{z}{9谲$Jtזḱ}LrR7^t6-c `$Ft #M:/b-"[XM8 윐Ä?ַW If3ç}d6<31f&^qpӒ8OۇްLBD!l }{N', `u[amfC;l+·>qOv9>pɶټKu3kI 瀆 v `ƴo}m6e,x{߿:(F4[f뵖t]dWeV,[QpFw0 AuK6Rbp+ҥC1il MZo*`?&%V6^Y6~g~˘lO? 8lǷ;ni'}}^y"n{^?#38¯Gaͪ߶|.93V[gB8v3 {#\`X􋷿Ony똢O=È;(-n0|?򢋢#7^;=tdHޗ CUtqo3fdz!n{ߞ}/턣7[сE²lex|yW.MK͇?x%YBt<x?36]̛6/7m-2a#W\s&",WͲؿ޴'UϾ֡3쟧E%+nN#";h^ݶ"kPG` J#ϟz{ͣ0n[.x\@ (A71Wo}xh O6^}^3*r*o=ZMK |[O>`YY4v;QV4z-Y(ۏn/|vEm~޴m6 mbk3S_oe) m6,Z??ߙSntMYpچ?u'-Ӵ2OnDNZ3NrZXq!}.sd0 *u+kǨ4 0W_/4khL|e/9c _/%?a_˝,Ӕ fhhiqi'ߺu /wxgQv{ 2팞D1/ឭo*+.5`׬\{U 6^2xh EW.]u݆NlyW/5*+>glK+O6u#OwgC]9o;7^U!l\ >5 j}IϞsk;::[^J-LڰЁ.?Ċog_,#?c7LǂZ8~),,޼c5 % A ((Oj3˗ѱjBڶ@Ki4W?7}~;\2{].O޼esjFcӖ`t|[Aص>+QW^Gҩb8VMzM'{n8+6dzJeC_os_U^ /7uHl%tYIѽp8M޼~cL+'wpS}`{?}#}ǭ{maedLsdK OU٥dƝwFjܖI^=),payn-]['>1t%ICp˗#w9 aҞ# ?U'ĖR;jDvl,Co̱A `0^oK0zˆu| P-3;OĢ68k+!@-}m% uƑ _s}]/1v>K@[7 Ųxp0O,_|e2<$Mݴ:Uz3#gnq[.l3т ƝV6l$6>)qY/o]{y,>|A-M w/9G߼߼<^ 0kVÐ#u3ٸRpzh&#jCGG `0 1p]tuå󹊎s\dSgޢC_!3foYnשE%8mewV͛7|yQ=2u?w   ָE12 W^tȗOÈiU޲!g, сe5[0Jс)[-oYt<kmluםkW] Ď^DņeX2nBFtޢ._M"΋?݋c(Tc_ɓ0i'!]L`v3;*8.uIykN~/k\QYZ;Ȯ#5ivO??f\Q׿prڗ\zCyS8]i|Z,r_uWdT,Ll8%39cL˸c-T_9:z:viVvdV?{-7=#x}&2Agi |ow9~f:t!Az/:)4m ȢaY;m⒚y3'M9gvP 'Q9X74t `0(V %V U˗"`4wÂ7zc,őlz6X /zv`x4 ƌN綛R9 $6.,Aɉs6R,Hs!U3;AeY+/uj_,16N Dn~͂1<`Jp,sG#WeO|\iei`7_aNbv'q),i K-maAos̳t x\fxR@h1K7]|0'sY_|$¡ү9MߢW,bsڅyn67ͽU#qكcύK9s/钩3> eǴ g=:sR5Jޞ `0 bsQbxM\׾2}R>7SfTl:C^jwc3x 5Xbt Kw~74F5S=qiT)1w?6,DϓǾbٜyNk6N3˧>:T*u,%o3ٸx S{o %T6ͻks[Y 䪯Xj] Օ_Y Zc#[o<[NǠW.Yl<&ikKCY2ܝ/_dảM)A9Ye`׭ZuȢ.dcqT{Q!g/$bZZ䪗}z_7A#\":8ΜWVt|y5s)9wж-МI c؞3Hk6}ϔhTH|=-\C3E.LsOs?8znuP^#{#tO4je74Lw-% |ጹ ]ux|uK܄ |5w_ G7l9}2zz-?1; X׭?|N~rϛ8Rkoh'a, _?y5nv?XIhss(AӴiiSϔу;m$Sf-}$Jp M(K_*/ q/.MrRl]]d`^Z<{Bŕo?VeokSK WP"y~f\:&N;m5|sbs:{8Q̙? A~0aK9|}[ _(b\r@8H+2hEJDek.Kfλqpfn+ImnRHB,y v6wд5Lo^[wPS*:j6fݰh?I266$ͮqh w?3R⒚)Sib^| ^GOy&ry;ONNfumg^~Br+g(?KmOa?DIP,$[A `0rE-WMkZ/M+vÉ/~{.Xt̚_~LQBHoVA)3{:{rx7wWVS*Shmz*Al?)lx|O(:0,d)#(0aqJg󳅊 Q-:U-TDǒsw,Gf K_ךiRyV:(((m"e>[]kn\T^TU(0AWIA_[.!: Y㪷M(TJ1]F=Ġu2w\[.iVudVK}izmU㎉a_:g$dYt^E3MR++%EPżbgZU^!_nI0,Wb&:Z *[o:%oϾdK-ӥ>ii~˴ A@뒶m53-W\ojרqj9Ǻ VEm]f˪ՙ'xRyջ-.K];--&f3 A`|Qb pƴla|w^va IފC%*~} QK;t+>pS4M[l:QRw>?ۻz{uEJ9!lGۯi2!i6Nz&l\ÇpN:m]wSxIMijoGQ-ڕK7-Mٸ- 6Gܺ:uY"͇`=Zb$hxpkDBQ `GuX 3A `0! s|歮#^v0PB a 9$dž=~-+*\AY6uk#  bWnX0c+MyZTWzQò˗\x++J+޴v 8DY3vek8#V#] x,!FM7f!Ylnd㢼qd22^SsD'qeAʦ `0 @ FDK͟6e!(-:Û% h֢U_tsM+Ja雖2Z": BrZtâEXseecoݰXK> ':P)ewmqOthy\Iz"0sLΏNh h `xj C0DŽL :hR+KtR$!`ծA9'V7hqA%xzcσ;\5}ʘ- dn œN|^wM_Xf,2c#C)yb5sW#mXDxi_YNaGȊoݓ=ol+ck(RӸ_K(s`Ьhs]b$xYՓ8}DGVbδf!%)ų_RgU^:{R1;X#Efgr[]RU{ʪ6,Z9q#sΐ.=sA `0ЮS m薻 kDO8N قy3{ i,9a2||iͬBGW9f`E6GPegм5 A 0cz1]|:a,Stф .*7W :Aڟptм) c٢'Tt|h[ {g敲n\:KgѳTsV,ᛙYg):$]>g 2^s/9 ùml0Ì-i[)' v2ȭZXdJɔ/HX#{o̟'xƆ5G~ʕ.hܶLz"'mu'cqj*7Mϛ4 Xoy]%CF움U\zj9S$>Xvcdx2V|uz]Z\tI]gG4Md rX=d2h`AKFV 8nem5z _4.< 6qvNzyҒ"7,;xZ7LNJΓ1)'C]4Pb6A `0FG,lf  ,5{ץs<3hR^;AuxJtEiKtѿDx -%cAA`VAY@[YbųL*' _*/?}d*"l\~n,6ǧmx>ifMdu=,GUC`GӮҲ%nia*J JL63I1v象l\96@\5oYG_/.0aegtu GB0_6 A ):Lڢz5KwM6RdTtxb,iK;*`I Sn]t$wf̸drY1(B~X&1y֬Ud`tѡwwyIYsUtE9̟?n c΢P#:hp ׯqp\#NH!Ɯfl, eq%VEywk4d0 )Qi[['LxC0d twqe㑸?F8VaV58nz]m ^'21fdq5Huƥ'CQqhI,#R..9^Oi ^}*\_өq]++A `0 W 5nGGK :*Jc#:&O1Rstс)mMh} QZW8ɩ,18H$Ff3>l桢[v )N St@b8 )Ye7b$>N}aM|üTt 3_;<j G*òno%x2Q)wrEx83b4^'plejy >N-bK,:?q렼 #gb,@L2F1vsT"6 %IƔ^ԩMr+X|[ٸ39h6C'Iŕ& %&:/-Їٸ(_Z !6l\c̨* M66/ E Ƶk#w] aQ6ع*́A `0 i*@vc"R`NttQ6r,с¤':47g'Ht#qAMJPiBvaqxÇMԶv N6QBO`*Qyvcۋ4eX6!F?`MrZP$z1}("S:)a4M3 nQP fr4AKh sW G%;xCc4Ӹc֙B&qqo\t</Ȕެ\iP KHNRV&'(tA1O5U- ˃9UoCnqHD*&W:F׉̈6[׊F `0 q"Tx\gXVy;oy±8K;9l1̑ÖbO#i*pgEȐOqaJ\F)1Ҵ2~k۔)E8v1zH5G0^CB>/K6:%N;6ePb 2$u,6P6xw MA `0&[tSnJ z$,,-:Q iw_tFZx\Wy 3z&s A D}zwP[c-&]g0a--=ݮFOAτ 43T6JRdLK2ne2%(ظ -O$i׊׀&Y|I> ǹԱ7Z2  L8y8I*]Ө;V7]VÂV1< lM#E YQ5ﰉ{]6mk4/*/f0 A5(ʩFEGCH =LU,@~mGaؕ\sP[6>׎TBug>mw88sV؝s:M OyAz&!= Lh-;.;-$=Zt~5D: ;F.' `0 q""%ƈ3_bv'nq-8q>bH2؂BoOuMDGC+[x{\ Omfd3BAB;y %d8=ϟuq@E88c<pk1Ṟ&՝pfqADO:UfxaJ1CA `0 "{̟cٰ>O*:2d}Ë5Ű^vSt0v];_x!`BE>Νivy&fk)s~ym]{$2Dxf1N(:N'3D;P[2臔|p10ꋉv:qޕ3vò{I-p DNxC5lkf­QOjӗe]ˠ ̅48$tz׎mLUӑx;^,L̈́x%,go $'Ԓ8':Dž`NsKn@* prY`[Z~~0FQT],L2)u @KkA `0Op8{Ʉt^XxcZy Nwh|@G XOs<}ƝI}kOs`|ю2X 0r{;VC֞ڤq)lE |YS.sظ r\%|WaHֶvw Y[|1-l|NlehmƝZwRS A `p'rk=&L&GϷ5Uw JHLj dSÞ'\1<t߳D[&J!RmrgQ(;P%:)"@sæ<{5mSsK߲,>>W~e+pѡ);Oit4V MA-x-驸 ѡ۟}9[kVGJpDۈNxy%7^­!sbr L#/dPxoA> m 0*[xd;M.O{< xSoa"BR#Uv)tK7x8'@OmWtfm[]xa[H,$YYwAqǏ?wp.%h2խt_I>C 7<lH if-+h8J8./j=ݏ~pcҼaٱf0 XXTŋG'];lJ n6S{m b,nHS˶i: 򀜁YLOtHjlSGbj^@eZǥ_*(w=E8ީk=ڪnv}Zƺ:_srz+"<^Ry⁎gX|%46 sPCif0Ag?$ӍÐw_+o Agy'h@CǓx/Xq]6oI4J&;Ԯ3'S_PaRU(g{3-MT!^/6>,QI4S`=?xM#i Ĕ!IByy2R\p3pCXOGi6Дqe!ҞCN0RܽK8<%7v]["x6 D Z0lx/i䈐 `gD[^z@ACu:q,/f&&a{ A `x- D};v*Tt4v>C'pC?SW ٴ9΢+9BEG[ΑDl)~@{z.8â·mEj- ,>7ADwE5RqE >ro#Ǝp9KtwRQ$_]oR$ic~oƥYѪe'+Gu'R}yhH c&x)jY\>888`_P4l6$%fufҒQz %Ϋe A >VΚ0 -G+P;Tt#D|N2{!xn.|8)Tj.MpL6+Ϸw0y)Ĕb(@+ jJy!BqۯukjXF l<x=%RC%p\)ci6+KW%-E:TW?}^pPTO*),Y=Q2iz{wh2I|Rpb ̷Q38JFy%c9?Ŧ(G.s8#LaÍ#K@iR!Z'I=nU)>4S~Oz?|wcⴁp mOcfq24fq]s#TxŜ\x /S0Hq:%lL;t:\=Eh<-ξm`  (hq8ιAW kj[AsaZ88IHa|8!͵mg K5AX٨?4`q%vL PRA@cP[Z@ٸzmq`Ze-uY856XroMA+<)kKJJ %g3_3 A`$l͑kT%&ZwnԪ3K :;i9 tHE0hҸEǁDGK##>IA 308Tw.d) n=BH-q^g/_h<u<_+:yaEӪk Ct4"0~3BDGIX D"0M]gsG2E̽-:Fw(:N,:ֶ>:)t(/w@NZ ;r\1+qh(<#:q_1ꋉ6mA"PS3}<1o8{η?txڤfM"O푞FzO݃ܶ!m+}s҇Ɂ8&W덝G/Y={"S}c @~ܬq gY]Sєۇ<0v$/a@ҒճG&yt} wd'ae.#"[) I!.m`=й"O9wچZ{$$Nm;nMA#1&/5en u-r{z5SkJJ6<Kxb&oƠ2 >IQ9zMf 5gp >i| RݴE'XKKӾ A>o<tLUQZ9hg!4$x/;j5x|(}3{):d8. 0,k䙕e%c@k+皞 8J# Ct:eգTA `0aț HN= ƂANֵY=mjQ"]}ZEAk0HHS9  E#,r lܩ'UOL =͊IP0% `h`nqN^kXop`ueɳFgZ g,&Zڒ O/CJYŴ,CfIM =-kwWΞR}0@T}:Ndq~m@ !Xbb'/+Lm=1/sX 0#-r(*/uAvٝTBƃlO5- úRbSus֔:d6j~㹁HXF bb6*гd#]LsA `0r@`"DFlܲ `]ك;CSfa:7vaVsntD2)T%=oᱪ?l=x~F2>L+g @+pmPmu shN|J4Dkdi-KVq} dXbŨTP< FZA1Euu a]qp\(K㸭@ܹ֞7Lm09ZLk, \i|h-гxaP + j8^T2bq}a=H83p󷵭v5 I)Ymu:,k8u/2j A `0 -Ŧ |%aȡ ?pP<1BJ.; Gg[wwbK N>ZX(ya Pb(y.JRK`,?xT>aH*%~hw 6@Փq4ƌ:%>ufq(z in:v0R a{/E^@ftB3grzƈUfMYlA-nfs-'tz=qc+pw?}` Յl0uZJϓ*%Vx `|vGlB9E#d30'+x)IΡ"dJl5_c,#8Slvg:B= ~Aq$xƻ :Sx[@:~hQDeRa" !`˟l\ۘnm9pl5.Qظ^"uAl\1!LݳiQsA `HѡPh q0Hp$Qsxtb+ 5`׊34IO6":3qT1;22`:hL#HE@];DGۓmxG2gEtH 1Dt=Cp*e8ZtEGȢ閮=>;/0)1u$ UQ^^a|JTttS6'8l\Pcww_qeh .^\LbL$axNÑ8GYlu4I8!G~:dw^ r8l_Z AuEp2q[ M3 J{UJxe;N6+)A.hZ9P{L8!~+kJi Iklqabx++K}hòqRl\(0l^s|pGLBNSK3ÊcpҀb0ac\A `0.ÊLQ֕%7i#K#@jf=":^;N SGdGtG4lDtTz4CE9St8腽H.:PH-k;"0zG {"҈ O%A=C %p(^40IvAt#@PxNCEdgGQ%3H^gg5e]_Ft\;kfL5('D|N3HbI"[) xa|6q^l4D|Ddq/`ʖF0] tWrf*ASP:yPbcsA=1zŒ i4~)饘UiZy88`Waș^!tQC.t(?`VeF'q'≑-w5kUˠ~?dX /eC?ǓEQ<.g`Ť5TZd#3*i8k!hH߃8U0,򣴈0D{8;*MŎꖺ[,Vv 6ƀ cŒ 6.&?;3[v0 ؘl3,Ys+V:}ܪW/%zU[usν$>崄 AuAhVY#Ȱ>9r5@QT\VƼt -`cT4aPH&įh9h? eu,5 $fqr0V˜3$p NKC`"h(s 4,i+l$\v*@XzD-a ,5 >.D#73+'ǫCh `3a5p!UV^Ge X, P*{8!x"DJv"ŃUtС%p,4RD#ϾxRġ>,0!J,C#E8ӵHSSPh WZP5NB ~DՆШ'Ty!ԸSF̈j)j Z1Q@cq8aHL5hU ) VHh-yyOFq ȰL5.a8̳8yShqУn;O28G1{8rj\+Gt24/H`HS̰8Yje־w#gPh09f&ո+N[\_3I8la 'U ,ˀe2` t0TXӡJ%Nt7Er:"qF86NHrS:py4@ !-i!r:$6Kơa98J#&n8#H@YssEpfe&pp6HWAhT&2Ӹ `Ȍ]]DuJ&ͤq*D5&ЛIմL(j Ls!E,X "F9lccJnl+2pўrf̘Kxa2` X,@ rXKhR}hu*,nNB 0r+W%e,j3#\Y81)!9- X,@q 4 ri貥2*4# Q!\#ĩiеC#ɢ$ևpT& Tt 1!JY|B=C,֎ j#t@j$ܫ9lNd7鏒Dۢ:S@^cvAC?/v:T/oxCſ:9c5z#:!^j C3>+u:L:ͭ5oAl:/-Fa0VO$|+ 3trl b.5ɷ1K,0|g0"kF F(vdY T5pÈ!Wlf 33y 842/({fDIrCDhu[|{AQ=#0g'"N1Yj] )N]c ̀˹T:QZ!@ ` E™&bZJcFukV[5,wq1KWeBP6o/0 2ըk=.ן Ҽ9\2|\^bM/ˀe2` Xe+ID#6/"RP tŨTRGɒ6ΐ> ?W$␹dnB(}UJT Tƙf̒*QBbXFL,C ƱBՑg(\ZÊj\p+&iqZZ88 q2);Uwżj18@Uۥ=@u6iQqq-(4V8 P8vs䲠Pj耔Ɖ^hE6KFVI̖3倡Q²} JECS pU>N|j\[\B۪bo_ˀe2` \ t5("3t DYF!*\t0JN,r&tD#CfPB*gOVp:H8 G'X#0!bɀtxFjs:x8>:5;t /4ç@E;f񏂕t`դ_NGu:.kNl:}H$I-KqȌS$\ IS>C"'`dE4cX= el Q|mT'zМb+Ds%iDu' 92yEÙADvQ`F(Xgiu Gu$Jޏ! bBce/)ψNYWFh# 4C;Q'Hl5NWWy= X j:FJ%q# Ċ B|qQbu#@sxb8ꞂUxzj } AliG4Ը44 TW5μ @MTkLx8<4PϬkp8Hf/ˀe2` X, iӡ[`EN*|)j4#/OJ 8jN TCu:8ϰNQ#S^bCSt$'Wˤ.W@1N'^I6ߑu:ƀx8=KrLXtH>l7q sΧӤrU3GMB(h Q37vؑ]Gia}$cܸ5u $r=5$XI^ށoá-F#VIS/4d&OSUğYF\s`Vl1Ww #Gb84RIԟa5z[+Ρ zoe0 mDGxDBN*h(Ih5\{JMK1ܽY ` rSܭn.!$9Ьnɞ b$C^N¹lY `(_ aT?)NV qkjFQ2#UQ 8E)3()V0j5ԸZ O=rFxx#Upq#ebjɢxZJ3ӨksmiN&}eq5(F;ëqV45j6Ըl5Q9j\{}c?ˀe2` X.T~; Rz 3J9T pItഘz #I$Ŧ?,uSPt3 XV *vEd7)wdV4ӡqӺ#t63l}^0@ZW ` {DoXIqq@A-=rD$\MHIS%3nК/oF{{фOJ"B8`$,'%UhQ01e,&@%2̥P‘ʀ<y3e D|HhbԔ yFjB@a4R0!4^äٵpO!=ɶy xx߁F6"*#'2W vIxRbjBF3AiA8vIKv̺;Ĕى'@2-M&3Q(jԵ ό;^ʡP( btԲɎsF&.VfIYO63I=& 2` X,bE$ŭe 3ז= .T|](D#h$*qQT_Z;,ѥPtq8eU㹎N5wE9E8G  J7QJL5.gCYũxh1\&-@ j\ژj>Hj@i`FjSk&J# ˩nl*|=KR9Є/ˀe2` X,RG9$SpIgT.? ;ɡXB j033/'laPT~ҫj<]eq6|ОnZ,ˀe2` d8( t:0KFYpx()!bSoBAZf)5 y Y+VNZP /N*ӊC^Jf\IzHIt\0J 8&u:.]/MT_u4T G2K7y͇95ɨn J! 7pF,3ùW2;nH.fɾe&81,9\<4N6' iJV ѰW3)t EK5:)LLEpr&cHQ-.4c-p9f @뭜dYֻ! WfZe,"X tb2&7_LCu톨llwl&Tħ!RB :dPd -\Z2jC,I<{R*M X-ME(6`2̦WJ7%lخ R!Xl<ۺwˀe2` TĀ I-:u>b 6}zdt*זy%q"Ʃ.NcJPǻ$G@$bڌdXeeG|آeFM+8Y5x8Q,4 AG  Ej?'G@8fU3+KRy72` X,ctH\tH4:^GN\ZC@YLoӁ NqOP̗t$.:wjݠhKwwLm2 z}\$0‹c[>EՏxvD()" dY~4r/"`2[->($;F@P̈́N)@ hQ4m`2Ӳda.p C$0GiRB ߉PZEX2,* iXhgaXZf~Rbh ,s+c &vKಅS..F6#Hvq%HJnj X,ˀexLMåk`TK2 ?Bp6u%B ʐnh½6w(LCƍCK*NJXZ/j\m=\#,5Nz8Ae~5.yKP"ML`?g3T%YV7ȨqC j6ٗe2` X,ˇBNo XN;F?C0TNtx)ߋw%7Jb:" Qdh=HCn/ӑ}@AEdް.S)<)|n D`OLޔut*IEɩ8` RkP7!$upϡ_Dį ѷI\7&'~'C~8=VT.4&M$8 -?qO2e_RʙPDݼb ,ZBEfʻ96=P5s"L&±(ϧ%ɶlƇr:ƙȏH@Z@r3Z"BK8 Z±lbOıcܳw#`8g<* Vzqi,K,򋖜,kо,ˀe2`s%^tP,@k AtOٝ6ЍZ$͎FbDdi$Ԯ⏄'j\qйj\L`7?Ij r=!w Zx26}9q>Eyyj\43a G`쏖ˀe2` X.*FthK~/J} BN@'8C 䱠w t2"aqzR0Y(EI|Nfk omraNʓ0hbVt 0o &K#'2iF.\ڏKʀMT_R}G9˒'b>C6U ĵygν.x4N@"M(8}D4ΆZu؎.7* &M )w5S> ih.iUO1~[&L(Z 'B@x <KP1Т>ɰP ?|8O%VcGΪBp ^,4NҴ;>1Y'4cae@8R|!/}U1V$Kմ4Gô_II tqYe^X ֎-x|mLMn3ƈ2z9w4ٜc X,@ @K=D-ltϔ%X(9@8?w{$1Nj\05NExO<0Gg򠁑PRj`#)Y>DR5V"{Jp;4G*$Rӄ󒁑Q&Z*R}-ˀe2` \$q: ~Q򇵒}Ht@t0u:t Bn.q}'@ @t\DzΊw$q'.WH8<}l1UUgrC(a<5 9 k10r^AϹ$CGL 4B`g`44els}uU"?qy N@#NPffڐo!WݒPDx6ۤ1Sǵ4T'Γ;6AF>'4>Z@|4u88atôq:q 0/,r@AP?s1u=; Zȕ 8'f)6D0d?p*uĤm153'oGuv:Oxذ;q>" \Vw-@== ?u;煦.=(g hh&2sQ 3=}ȶk2&2߼puhvOe X,@Y hM!#UTG3Ək3:Cqcyv5~>I,9$7CEQtYe$΂TP5>c\ )xUS[UGΎӝj5J*Wꃨ^5i4qiZF?yjX5^#UǏk?y\WG@jaG GcjHHaո r,SG 5#cghlFBˈ&R敨qP==Ö"َ8Ϻ쟖ˀe2` X.-8NӨNG[Kt<܅ F fUQ > NM%E1l u:$" kR:ûti6nlcm thtS#tH `t}-8{ّp:C-1/NSt Kdt0ُ: 8| K]gs:eʀMT_3ljbI WZ[}ͪVZ3w^Cm$.t'm|]1cȇ&A<^ dq:$BWEBjkVb~ӨQ^ޞw|^Gq48e\Gp"ߺd^`ѣ=}[{rvlH hВS ZqAzZEWNjnBb;xz疟o߯`TAu_T"ytCljL؅F|-? O$v=̫[rGON6kė'n) ^1^s㒥s'Nd9/ێ>n~!Q)Y88hDd4rګo^lᔩ<헯閗iWhfjs !7^M/;X7@ ǃ&v㱗x ,1A!sR2` X,^]<4j([Wj䉽@==mˆC׌^!GKKC 8JE3W_^|eo{ݯyq.͂'At`/m|nv@(?^JMKwk,U[}j'wlA,5 ]U_7\ 51:@5~xS{rx<)#P5>s\}"^X"W06‘jgɓ>p7.Y25G?k% uԖf#_9qca5)SǟsgjD88 }85~ X,ˀe2pz[W=&ٗؖQ~:wH NǨ/Ag:5t 0 e8Z)uWq:6훞[AYEU)-[NFHMOܚt$*]xlAW R9N[~hS7ӱb̻^qNǫG>Ƕ*o /cI^׽qs9NB'B8k0~G)8wn^|YNޓǙ0N:^#ˋ͔\^e. iIyz{{ʟgI㎉`E#o 6a̘g@F#JBr%H!v* I`.{gFA$ޛu-Ɖ3#ZRE4ৄ-x cİX,^w5ʔ\8?MRPX\H \13Z!sg>p^z_ŧcIs' ZeC=ˌT N~Ѣ\8#/="l*@5aw^uC,|'= Vژ7C7jnӀf`<;7/=y6bHD,֥--nҭ,h :m3sxp}u4Zvcn?REA VWWW[[[SSS]]]UUWX^ގ@IOˀe2`EkYjg5UOmt-33lvᮣYC#A8RAGrX簒UUG6\7 }|W*CQe]|ϴr[εC?V@SL߸/u'{rg~-/(W˻^>kV.wKWow~@\%(iGy\G#R5M */P̷w :w+ q$x槝=kzyFZM"LG'HY>NUOx虮.hf:0j4>$mQve2` X,%10BN"]Gp:e;E"p:a~Nǁp:FGu{;uµ_~賻8ctl仔MK}ϛ4ͿVc|`̙?KtLu…t a'_H7%űMj۲mnpr$_=pN,'3ŅdCUG~0kU^uW,Z1ko`Arh&F!v(<3ЮZ~f~-t{{'d̢ U_3`IXAbuʐaFJm_'gn#y뒫vڴ4|zk˽,\E&4vq"eŒsԂ٭߹bݙ3:OGdr 4yw&t\hD ti2taPG?- u:;H~Llj q:t|]'?1sBB^D{4Y:c[-{bO_ uP2Տ]I!9v:@ڇo[o✎3qU˾(kb/o)XNt7kMT_̸Y㾃ܣӧd֩gz`H *))ЮtnlIqI͍?/^=~ISZ&bC&HLKXrćXu*4 C=fT;W, z˜x>X =AʓN-H? X_MF߰hվ.uIʑP1p/t( = M38a#q Ꜻo`zm&CP=?xڪ W;wI58q1<9ֻdkԖt@߫vߪHSCG,5ή6;xr;p \%ݫVDKoF5Uq+ԒK\;mlZ8uۂLɍѹG/YEL$!U(5$g]װb-a=D&4'fgf=qՑ|3&vm'bfd T)f 48GxߺB㾹e{ m%.J̕&+@n7_]g+3] T7f]ODNcL3O@ugt30>%-4i5@I8bVvW﹧YQKg.]8~8 48y?lix[/_tU)y)j=mQ8/M2WSfʂ X,v*XU#QE &O|O< &L6n<(L RpT(Σcw*~ I@O)bܲklƜWHbx:s ss< ˡosa1*L9j71ftm*-U}M-:  MU#W#O;JL+4yK^;ZWոE?rz>[3hPNDTlo"s}︽$Pݙj|vU5.Ҕ@+A8XBKІ{(8d=mT 4%&6Q]vgˀe2` Xb_cIJlJKԱv~H: u:0NG1K{qtLt4_'(@N잰/c͜dHCx[Hϕ ԭhp:.xӟ(uTBD׎7S7~w~ z>]Ӂr2S.+`n)n'- Tw1wcth,^q_K|^8q:%wn2* $WRHECXcpѴie0yL}ힶ=~BnOfF_\Fk+y*[55Li0?+enJnQ Nڿ}YV)磶v$tϛMֱ ZF2[no.UĂEn޿Kɼ9lŸjB#BtUX]?XYۭ9<W\:xj|A8㿗>Dtl]Gv $p)hl:iSJƝUEӮjOwl%&>Yu/!PU$8m\w>1kd!.2γj,wr0UbgT/ˀe2[̀?X06V!`T^X219sP$1^ *D%b ܇4s)uZF,]moa5! -J$jhfKgLѰO)@xJGKhr Du>Oˀe2` πNGc]5Ecvt` n[Nnxmi4܈pV*a(D,p@_{Ŝ|^豍-msHtM̝$=UtD#NaxQNDŽ1VtV6n{"Ur @8xS1 /@;WuBNRDuږPqu:١1MR\i =p{90dq3޶杍GՆkBU|WG1fZ1FB5f_ܺƺШp]u*\׸;^T=i~󲛚`5 j{s/q[M4ZX1nRScC-ECX#k⍆i# ͒?zۛY29p洶kB&A^ƜkyB!juMe\a Y)y-5-p5!bkj~U+= C&6MfUk5u X;Vgs j̛,PiԘ[V\čmx]<{2` X,lIh7ڍ{h8zʛ!JZZPyijZϖwg( Tmk 3Ը@gqF F{z*8*DR ƿt{UxS/{[Ө(Шڴ$>*?j?Wnh]5.ШqSיjwcL}}ffjY&xԸRQ{zC7 '/X:cW㷭Ztƌ,srT㼲p]Ҵ(=2` X,@L4hmo{[e4ޭ7+2ӱN4t B\u$XD5- ̚`x-yyN b t,a=)3?oM(tON깫fćId8~'?*Y̵}Kf̦n ه);VZ2}{Li~R!9}NGp7YzѾ}Y'LB.Djtԩ$qBW\Ҏml|U_4{)d%ojn08Ȕ-@xfڹW9V#Md->~ה¡:^`ܯ92ztϚ9^>eT>nN φ+qP 4#ɎK1W}k\a([dޚ%%GM/k\ nuHHYj|]Z-<۲Z,ˀe20$FP ~ #U/ͱ赩((T8P ֌ml0kœ[]-$q k-3˕?z’iD ujT*efc/koeX,ˀe2p3ʪqNǒ'"]u.]gΛ1nBaʟB,^ɗ cZOIMH>;u:LƽEmm\3g9'2C/O tLj}k{"UW/X]Q;t\+w:}k _N 7u:c k5s.n MXíMT_V1LaВ\59lƢgRKMiFF1j60j77Aȑhp15?-ӥ5{-i5~Znj1T3H2q"\r| ھx:PB9lTFOr2qYjHguܸtqcmJ/XMI\Sl@)rT=/|3kqy:ƫ|q4F fԖsxie^ JTtL#7#8+AZ,ˀe2`IzLDG%oj"x{WsAceE;;}XxS~t$^D 97-]P[:T;Ξ:v_г'u:tKz|6e,VTOn>!d$.˜`/Sycο"3gtrc5s߯3%sG$%a$ڧYZҩc~Bc%:s8mEd/鍵Q Dp? 0SpdCGkGK`aA~v?V𚪺') U -oRzvႲTI3ay z&sd ^`>%(.bPj][fh$W͞U[Ur`$ܼD5޹7Zc,ˀe2p2@Uh?e~̙f;U u\*EF1TEVYS#mKEÙ^*@IDAT}xYHTp)35cud|n5nt0Vcsո3lS3V.B@fV49Jqi5uzB?ȜI3j,qet9j_GΙu&:Ըx@̸ΐ\۾>V=e2` X,o*KÆNp:Ótc)5Oq:*;%8~*iw:U~OiY[YNƧz|OmXNY[m.t\OLPCr.n\#g9~Bc5:2&XvwSj5ӹt8<2\xFirM͏SD,^s&3Ǐa{Gy:4b ͛JyQ5վ<#-1MZ[< PsɃ;`ʿi,: d.q-26UC̛R I8ҩ댨B_ GZ 4WChiCc#%*"6);zbDhC,P X[Ae2` X,C1@IUDemh2y4"DSB-Y: jơ$Ul@9r2?eloknv8$qu$ -Je>7<_tHukS39MCM5ࠫƑwF2KMMjoI<JqYdmɑLAhm"49jum 5`2SCh'Ulf2 @/j c?(2` X, ]rTƴӁ,X,CUq:fF,e?*@~bSSCPX3!Q~;rw$)*:T2",)Ӂt[~OCCTUr:FHg8L?t>4\0uD%ݣ@pqBe2 ^pn!KMT_"˂e6Ljn.C`Tc]{BK/x"6 qXyȳC&Bs s fykiaFLk:GΕb8s>>и]0 Q 4|@wR$\1Xd44èj/ab šИ ,& ot&bR1b4P$ ;*LnEWxw'HŦu%GWj X,ˀaϊC -~NPW.KiŝT:O64PA(z8=y('5l5[ BYxVʹ& ;X͎QSIñ:tpM 2NY묢DuE]ă)DKVWE.Ǵs(X~X;И;$eJJd#GhT;f֮Bʌ Iӎ}漦 &*a`D "Hjf5XWuseT1NNLh`f8UUc5j@X: F22wmDs]f HF0g#:Ec2p1o[{GX|f{2ˀe2` 2~3䃓k*96EHbgl j?U7 hj?URh0iU5Ndt)]N}@5֥: p=)]$t}FƄn$FBF1r(jU;!Ը:ԇ!(th%@uS%F}niYjXD^U^5.VraJA^(e2` X,Ke8GG : S8<d H2 NǨjNte뻗vJ&΁2Q:0OG]Mz۬ZOgtpΖ8#кTL'ޖ:poKl6Q $r э 5qhfD Xwp(w ; "½aP* 4l&ע@,Jܳ4b| >KEvY0c1Ykhl oA@#2uMALaW}&܁&a ߠ4`QFSG!40Pn{Fˀe2` 1z]'D)Bቜ` BEDW^5\E 2f^#ES$y(RPi`oBz aWw05=,>Ef6G0jS4$Ů6xgKs8p{$uTknCnq{6ˀe2` Xe@w&" ,N:'8nZ 8+Zu`:O]C@8糗7 uP|!nȿ}]V DeU >qDWq%R H{4#br`'%O$O,v .Y; ޯ= [o+}Xs?&x)(nWUOBqh/;%KHHz#$J ) @)tCuXO=Z$>]|㘟V=li-i-Yzhz@9gmk0NB0T~5g3tW)C8[22p-/a,ˀe2`À 6P˦LvFߍΞכpndpESPPQ!`p ?~\< w(4˜2olLJ$\ hDdq_u)"e=s؂Q|V= 0IA4 ;pi|8Hb&BMn*Z?Y o#@1j6)2ڗe2` X,Kπt@tt)zLUE(3~lUt7*??~j8hӡbF'/aBc#j04BNRD 8~Gq*i5^. T93bV7qi)kzx/9ʲg6qnsHt h_8ĽJ^,~z N[e{ȳM=m\Ʌ cqy_08@o1n?:]k.A ')[$IJȀ݇!R-wg wP@?]D2` X,yw^{D"u_}hBv~I h3v+!C"TF Z$|8$w(bф}Aڰ5U\qfod ~?!40$O5nk$j6_ٻ;JZqZ} X,ˀe2py1ٽN":6U`a0k |AUߵ3>0YܘC 򇿣B9xοݼ^g0xj0+~wX!YږMxo]cr`W_4Pu::! (nuKb\> DS񭯔v{#޹ +'w2 c[|YOw*@P4ݨ.6.9`H5o OwG&%j/&8Ok=[l5!Ob;L}b튃s%ewy`W_we.HtтBh%X󻶺VLgI1mg[-ˀe2&a-#v.B7OXP)F%A#:QDa,·S##i..M>N(D! \g^نKLWS GeX&W+ 䉽'|[짣T'ku|ãQ{^bT{(e |1g5[/C3X,ˀe2`SNTCj"Wo5¹oa.1$;<_洛y:įzl&SƲACMLLwl:0_|p:檝:Cfdr^{O?y;wg̢{R“^7m~`WA’'B8eMT_PL!KWv;={c)<޸*^(\{#+縂 [޳$d܂E??D )j!JySۄxt㯆0J8gUKSS{z3jd0T맃%Kl}O{bvξ"mL:'S?U̙d+ɤS t7_&?zl)sKbMR=lf_ˀe2` fAo|%tm%T(%%xz綶sX4ۇ}NuRMdcKWW8;{B$ [m&ܘϞy@ϝ@5.T (f(x"l~h,9~c(4mYN- ,|g|ƌ6 Γ 40Q4}m5al5ֶt?qe&^SM[|מ2` X,ˀ_ NʣۧODe &4^S;D@C1>I\22~Fq㶃^;z>zɴtTp%t;KٳgA!\."@@WO6ՉdoING"9_ttlF3 ` MKe'h1p) ~q:te-'2ؖ'huӑ;#)xoM#c!uxb0 3Io.&"iHa_{^ܕpNp+w4F\?=h, G;t{ mLVl M3O\D/cX<'4|0p ^Inܩ5"Jo@SZ oWRtָT7m2:wubK9q1V@ wL>h,3e<|/ Jzۏ.m43M1IXjGV^ ˀe2&b30?rd.~]aեaF'8Da-]w={P&G=ja) EB_IR)fA*{ G۟ qaH5jQ< G#ōFSQk ~uh$cnQP0Vaa<_=sʭ>}npTVRc:DpIJN]UOjY9GA 8{܅lʧbI8ig X,ˀe2"N= v|㙟V~F8G_tC2O$!+vāH×N{6%R~mn^)3% 0^t뙮M纏H]r-ИJJ&1܉#g|WO-&b;;fM\P PI+:{?W!tOcg69lͭSH{ ]_,_&k?K䜕-۽kkBE*7+\$pԓ  U\Q96djvvW`48xgɴɱ$ &c5W9*xG;V ^?D y)۶wd{e2` 0݀qho<m7ڑI"Ź.E tBF![۵Bg='Œ Uh1j\i,Cy ;_>}rT8u]zU$FnoSQ!tGk;8 {3ʀrB?Bwn;pPhdD;Xj {FGP zӿ=j5N,(R!^?Ս'z:[s4rn2,#q|G)#w*L<ԸrN%Zj\Ү^{e2` X,u:~s;Wbd[J0R0-|F>sCljLX8eG^zBVtte9TNOG$cT{^K&0] viNǡs[T li:}:}SGu:8( yNGkǟh'*Kt>tC96ʣߩpu:$쯎^:^pȄ1Tdw8RIq>zxXwmLiݟ n|PbނwmR!H$o@,COxlN? Re>I"`.!۟ڹ~Q6t,~~GƂvrir "gJ@M7xlh,6}񘢛Z3q8V,N֗f$wW\~`.?ÞWa4 &(m 8>`}$Xm_Dž7IP`8¤T_1VRhxdeC_ݟtv7JʟNlG_]ʆhߦ)>(L K[N?qrmrÂttp:DSƓmu"ٽDCjBn;w?@ӁF/Os+q:|B_:dۤ$Nxubi _?= /\x%啐W<>4 C@8 p(b禽;/{&uvHD"2D1d"-ږ-J}-ymI^v[%^^˒@QbIJ%"A$N M?410BCg8ʐgs'@SBs4}ކឡޑۮT6ڻ88Q5q3i:1P>nNLJ;;h쪕3iLeilx2+msXf %FBSӽnMX CB47&Ȃ:[vhkBMbV7N{Y+[lQo*meO C0 倀#L@VD;@V ~=7jhv#/v\zgpRb$ qp$ iϓ-LIJ̥Q_nsEslY֮G{&'0 PbhRy5l |ڼvCƪh_JePAdfqqˠl΍vnZDN$50G9h6EX04RkZ57zUn,1.*6:M{ =#ylTYۛv#Vv}nxbl r,6Nf6>B{÷]{#8z%hK|q`N.BϣQS! l<sx"XTtWF8<\/2R J Ɋ{bQж C0 C`6t6}oh\t`h O":D)8|՛޻yjdhնǜP eL)H$rW':[:CtH0RR$9|U6ذtg+EK|0,<@U2/Nt_մgUO^DjsnсF.:o9dߴk_iCDP'a&#^{C#X᝸S`-:z{?VBZUV3YàXtm+KT_dqp[Q9=zǔtf9gٰzUvY lzS.Ex 34Ɛ r 3dkXUYgCGjvo` *g$u=,5z#ށۖħO J%42D RqRۑصW 6,5 r'=l\xJ3bAÙ.?10vb6Nn$iil4H#>qe21zr#t~i,1Z+ ƕi|%Gn:gC+opw[xm=? }Q3*#89stiaeJ^hxцbHYYlU<;4ח;t=,uQ+aXkPfĊ;,fTf a!`!P ڸDXCnN #$ :郭/oZfg%kʼnYU_wM%3ۺ,5Eɧpd `>dvmcHKW`^,:kJݸsoLh]b5 ^PtŢ@י37W+_t 0Tj 'wR &/ {h ёlB9>k y]1Er.He/EA 8ŝSICp&;~پmWlZTj2Nt}w wM@~ , ͥaMм)[cdPovvܼvUK96u]!ykCcҀrs9ڸ&/.I}g_;ʆk6X:67:s/yc\yb1]TKܹ4~d_Vqd=}W\'O>~|S(F49_#2G/h+6m]t7L{ɉD\G3I .)[`s[_ՆZ:Idm3$4d\LzbBc((ڛUn4 Vm:2^ {Oo_t>w}1бt0TRKzRpfOL'tJeƷRW[Fg}yp|+JY1dO{I(kͨv8?!`+|U1v0mI2DE-XDp1,&x< 5KL+.DϾqڍ`8T>|`2N$葵_'lt2;}ӽM&S`b@q Emq>ȍ#D{M?G>-%L'RgPy;\_%8sNko@[c ro8KT_\]r[$ (J8YCɑ;mSkSklr,3|1ܩb%Cv [h|JCrԸsIW!E`Tnz~848zHkk\N^ڳuノҙ|l\(gcGZ;?xl\P 6Αmظ vIk=}\.Q;{z_i~l1,CMB;@Au0#,b)8*,eTrճN?(xt6+lgGFK -= Ds`NG1N2H8znё /)\d"ԽU_|cmgڵP'D<ʚE, &%Ctw3)Yj 2ѱҞg.mY ,[2n ^:6EjhnlP>>]`0"n4aq ifV&2}-c &hM:T#c;TdS}d]SSS}]4Ari܌xcbhZT:f͘b  W4B9ܬP4,f5V {[MѵMm\O_HM#hBt12DO$(z:8#hOs2rXϊC#O{{6"kj"8öEQL{tb+~YQGt!͡⸉],?{G'~_Dsi[X 8,5ȆҴͱ7s7c2;#7'iNπ#{E3 uk`yx04*/U B+4=ML\o-i8J~(F'p)[؀9%!ɨiK8[ 'p$+̈7 RLsdgtQ%egx7f n0a4[ƅ֢`csphdϷ|6AҘ:?nji8UoboaEL#U Fl1Ԓ ddĨ5vÍ9SAe*2 H`G^=wL8W B$r}!K6==ׯbɊyy1m!`!`iC"*9EG}JE,)l;>QxѼngTtجf+.FHH*1j0|rJDGOķwb>,`8U#Һj%jѩg<ш4’}#0 c5|Ss|(1#W耴SxȜdyDwpKL@cH%:\STta>Je1-rF5g)1$&)dc5W42]sjY|ULb EpP$Ez4pFCpr5xմ ihB@wfC\] \\~4*UGנv-Ņ*9N]pC`-(Br6C0 C&3 ;E LE!:L6f⋣{me 9\*7͑i`a3`(?uX9Nl M 3PH{lO^hZ(Qc*80x~LxH> nyJMa%3Ƶ]dh~60J^QEl\Mq dlUA˕q %k x7()02[4PqN6.㕱qd5ظR8Z*8+kM/hnep$Spl1Yepp^;bm!`!p-Dt Db @t,WB`󋎤0]p*z'sgf|с)rDh?$)fVd AYZ* ŀ>H S=A͍XtL%g\%D\sLK~O]^e5;!\ZDpGg83.4c\]:2yDp !#0d!8w Xf7Vcy8D` qSU4^\|},Ә\iޯe%0'+4,xb@3m >xGdP@d:dTHjĆZcB"}%2Z j l$@c%!wY@IDAT‘,Yݙ%xX$0Q=i`juϻ?8a&1 'b:i chc%czuocCbok젹5B$H76CrVI ]ydyZ7{xi,Z@5Q]4q3]D#@壘a]MsOлZc'co[%4F8z侅eack1y)/21/ʾY"ZZ3$')T5+s4 DE Zs]nTq1Tj723`4-$,Ywh\1&?_f7x'Ug1 Cl#a&"`= 5KsEjh g?cҴKٲ؉Td~4w&h\ip9YeE=Mxxi"\^jfS|mx140+K?4]e<6O'!^F@Pmmh ܼTy P Rpƙm0 C0D =)zPrcC_LeG(ػ-QIסO8/^:6C0 C0OtfID/P*xqD&H!VY{UyAT&>H\zAPHt\ L#Y(CҗOt/WtP\>*L-:;0_)mcH-%EjoQJtܬeAsI1 TjKٽ:MIO<z#8ܑ$hfQ5@ܼ7dLLHd Ŧ[|v!!)57EݝKL#?Jc`]A$7+NC RxDM#8UQ4ӌ(i&)Ӱ+@fHдlĴ̲e-[|u|8hMSBnj#Kf r&Y#&M4/>Ŋ蘔k`UZ[3*(6P+aTꮦQ#<3R@P{SմR)[5aY)EjL3S}`FA",!S"K|ѡ;ruqxK&:EV%/}80j::EgJTNIʱdtɪ.Q "w,{ g `h8UDjS\b}EtQP-˔mZxK5D8,6'.1 `| WE8K#}ץ1F)P\Z+{޾] ܆}p*)z-Pf&pY:Ks2.&3k`ffY*4i Rx։[`iS-]ik| JwpL6Zk䗣XJA7đva6C0 C%2jd̈́1:o e,E0NM~Y۰ p$4?UBLhH8YJl Uq\Jt6)!'4>8 9"N{l[PktPW2F٦IPaL6d$Iұ|]6\B[s!ĪaJ6ܠsR/Q_4^V>հqU^@,*`tl| c`hl8M\Mx>U9`UqOƍg C0 C` P@|L,o) 1ށnJt>1aPXJS?G ҈t J$*Nq pnXZAUVFit+0v4yc˱R~"}0ZCP2y3Eȅ)xnn]>"ikgaN8H 2#!I9yt̜bˮyn-y@gbbZƙ =z)sXct#X$GʈLո AcqoŋYwҦ%2 E,5A.dӨ8S(ĤH,uQ?Ai12 ͺ`@d6s=me]QH Q}8.kԐ3 Ώ9< Q`D~n-M<64MD[,K[тt]ؐ7?8xQf|0"/#gu<gzo־i+ %ne::Hpt&Rݮ7C0 Ca)3 vwgd3Y"(%vDNN V3Ӳ, 9s[^ddL7B'z<eq38.+[iR!g0DRL6 %d,O*BWkweYB@p`]#ppl\- 8rö3M t8̲fӄO+gL6N$d3ٸ!`!L(Wtk2\RBQ/D DBH$3ڨJtuUm¾;XtT<'"$pE8Np)@K!w^xP[bH9cH|RnH)^@1,Q@Bɴ3'/D0:)5LU mBӍa)Gfܶ 4:[_.(e,VmQ5I%ꇥMc iK Smشp:CMK撥'/7fR⛵7]e I[i\)L2Ȉ|ю8f:™ҳ!_KӒ*״XwޅE"@ii٦( F"ͭHpZ},<*|.Ŧsig, Ȩeeɪ!So7sUC^]C0 CRΒ\5v܌˖~dTGuֲWx9Lc7q vaBaG9' rq$ Cs6 =6.*ɣ`hxoqrGJ=`7![3]/6Mf`AqbJ8N}6PqCa^l\{Ql|Eێ!`!`DTGzMEQt@j 't̿8tay2/: zRNB')U8CߞɎE\Q:[2x3@m#+KLLtrݵDrmHYě49hah0CSsJD"J5w!9B"mmKE<Li.liإB(paӴ%jؗ>2}h8Yk)m73FEQg\-]␍4Ւ.}~Ӱ۴w]%#LLh> b2J@`Xwmf9ҢTn@i(|nmxZ9Riqyk 44gL&sPB(eţYzj ~Yk|Ȋ9pmgsoXIh}] ԋ gQN@-&hԳ c!`!`,bJtKAv36lH!G`pm1zm|>]zm>{x48R '5 #!B [ ]A Z5ҰqM+ճqA4#'JUqOtZhJ g{,\bB4 ^b {C0 C0E`'}0Qq#9PMN%zGe%: "&|DGjWN˛wNfҘaɐ1AtEn昽d,n1r$<'y5޸]Q2CrZS5 SFi"ËP4%,t)|EԚsgDdgu2H%C-آG@Xg/+_k5 s!`p2kM2oaU05uYj3Ћ0MwL1[X3>â.Ane:$e_}6sz8gƳٍlsyɯp !ζ]=!`@E8JLAG GJ]O-6kS렴A*` s4_Ѹ:!dSʴ2w"B.E4j1+&9tl@Qkl>K(8%j={.guQ8lS|CElbδ&ԴR1 i'dZ":aN*`yD *rtE4-?-N\Ӱ b9{q"(VBeFFV#) AAPsLQ3eQ @oLM,݂izZ/RLliPMf(0}8\HsU@c'GGuV`wZU0EIԸJEڕʳwC0 C(vѵs/A#HVkOxWst^iؕ2,`ard$5)1=LJ,8*"DXR%Z `4Jqٸ E R6Mgc*Or삃0nRb|"Xi8dn66".K0 C0 @)Eb ^Im@Re\ beLt,ϊ/%W@3f a5qA )K/>a*-{Vbbex)%z&jRbRLq}4''0-GiKܬ4N, bq1]ʢ< vf@"2;,?>rdeCFXPl2-]ʼj,21:״pŀ %؂yE'trGmx|+vr\lX6oiyofkt5vQe2|C]Y.J..6C0 C(BMN$gwc^`ltlrZ)1Nsˍ/(HBgEֶZ^:6lh8.2LRKEpBXk I+Ika2g!`!pq(*D IH|>V&-Nt,F\ʂ`@(:>f &Fc+y(:Af ^,ii{KTW2<^$\: Kל5mM ;78σc)tNUV$9b8`l3L+,} Z*R a*HF3,ҥoٓ~c y//4қeWq>[d)k=4**5O"/씹9'Sp-~?uAğƨC0[x1];Czy]|9RLgd*"!`!`^^=5)5FJ ^}9y:JO*a 8[irKn<`%MBo`șX.;'ju46^XuyZ1%fL| n7O)1G.`KɋM_6v C0 CX8>F&ϥ=AS `@^A0?i>2wQ7N;: W|,_ܢʚAx~[_9"SztXz鰽8g[nǸJqAbaC)`C,u D*?6ƕ޼ 3ya8 q98>=zLj#[׭k%RLL 98 ,XD W]\@/ CxQ\jѥc8D@/i :| ]qfԤ" CpLob}IF[ (+FaX~mSիjx|pb\Ms1v1>bZ]c!`e"0''_U_i횺ښPb2)r@k5d"^.PiA*bb|3] Kɠt+ICY7C2L[Y[2k׷ZFMA7Y OaC7xMɹ7e YRAM6l|ê&q8*,CC8l,^M_C0 C0Ә2}`>T~ D+Jd 3O}yuM #Ʉa>+x՗uir`7{]k6o+f[o9ȡ[pCA" 'CϱÓ29< $v %K a0J&aWwlق?Y ?gNHiZd5  [KhFY,O3=E#zB}o[o}뚚}{cSSGt<O S{"(~NO7zec\bMu[o=gի}ӓ+gN?sG^>?:/ , N咫9v C0 C TSw}7o_?E*>yٓ'@/+86rzmRuJL +suy믻z&6O|֞@ظ_9w (P`]:!07Y7v~M0JHǩ^9#t ijPPITŷɫǷ3MC!>]`7߾{&$݆aGOw|c8rh,ZC1(E6Kq!`!`2P=p-:{#[2}o}-:Z:z%@i DT`ck!:w?uǖJt\L[|7As$wLtyK}6D^ lژ`P{VlT*L&x<>55SeT5v-7;J`~';;@!9g˨a1;9w``Z҇޷سWϞ̣_]LMxv~脑N~/bJ ] RdT Sf!f X9{n}3۷0^h=GUlZ8ٸo(qi0ΤV7?|G}mm 0<Կȗ[Mtʾf2k :~E?~ _x7&ɪR&:G?O.`dn)2#230-.>'>i͚mֆ(n@ 걐#\N{q`nښ?mX{ݛ֬~L fui`gN ZV zǚhkD꺒!9Կ櫯<{~hbX<\Sצsn+o4qU~Y/@6O]睚MxG^c!`\8BFk+׭ooYs[mL\M $q$شnWIC,/x͕9M7FNtAb>_y(R,KXDk[ݹwO'&ilK:s#l9;\$:|!Q9&:.Dn :i-|?}_tF7_m_j{ Ovb%,k;٘+ aۖ'~}wݩ~]{Ww|Nu!\"wŸe[ KHȘߗKME }/XõMs:DM~͕L:r7kK(+[tl_*kٲ 0(/4&:u 5lC>z߻#XX׼o^\xXsCij 1 CXH*޹Gvl(<|nݹ~u+g^'),78Kq/xTPBW5߰w,΍W^ʗڎe&`s>\L?ηl-Xm7}jdbkp!^"]ܣ84ZG=;dدƌ2Y[o߿ -5@97:/nc6`KT_YtɌŘH_aoՄz:4dCQsx4g~5Wj=)ĆȄ檵_c{_557>_p+d5y܁Aښ_O\\o}띭Ca Nwc@e.}k!2X$%f-bҺښ/o/ݺk<>9-2hEoq_lG߲o_ #G gٸ_+)3]l B D}wX<7R&jÏy 9?t"6M_5bՙƩsT¥y 4__[f!`F @Q'~g߶Uj֫F'sMܸ%.0.a]_&:F4q`5Ջ~^l=4ۧ !:lp8f:ïԺˡo2?|m}w{-#MHc]>x_Yp 03,!; 1\ku=wٷ1*0@XMiBb9KvQȧ?3kSں_{Ͽ[X'o4͢ /8Dl>|-~zG~j]sms]Eyo󥴰ĩ+C0 C(B@|~EVkV7D ĵ䥵Q E-1 ;;s-+~$Qa6.D.fF`[*tuKbBs1FkV%n(܃rNϭjh(>U _il\$g7 *a!`!<Dom^H#?l/ DLJzٻH{mV(Ayˏ&F/J_tHi.s 1PW+Y@t1ѱ^:lr91F?xȥ}?*襼>KQ oM z{W7DV5 nE$MbC2y@}D|*ٻn᝕<|}:r[Sѐ3r@n(; ߱w= |˺M?|=3GQ ;G Ԩu# C0 78كmj{x #[hŠ1#@`NẚoZfظŃ}ٜN ~Ou<Ψ=Qxa %D^2C(˳o`#8}793,۶}7fpb01 C0 K1':57Ώ!:>{}!c5h͇:St`ࠊ(A0v]╀N~`_v !:jkB`Xt֛5}m7&:|׎%W{.;&CRnݹqc_yni؛otvTL16|݋Ae۱aW9fteVG-XEU7*wͤ4JTNsu X|) btS]T1= dnvU4%kaa!`xu*%{"{XݵM#ð6RT nV87%۫{@oyӮWmE]mUaA[;:}C1H {۝!W- :ɕt!R=x%e\IK8,+er!`!p9!P$:޾~w`EwݾE蛆صiFGu}DGUt"R TzDS}xL< y-L4sVKY<˿ԅOGn:w99wēx6@.fa{>àz<ϥ?Lvz4Q\&d#l6|B!eW~i͡kyAWob]аl(ˋ3Q:y(y0N߶Eo\;;+a4E9 gqeY|l0 C0J!@J̜ ~ 8J\[S{Ǟ7}K;Eɇe3(=Eї㿼5 =%F{S+qK#)qΥri}bJ]=Ћz60 C0. ,r):8z:;Lt\>h!`)1С('D-6`#Dtܸs{ m߰)2gHtHDGhx6[;@0T 78'pq TaP$տڎ!`!`c}ehDG2f2uEGiuC,IHt4_/1Rpc#6Φʚ?8|#J*;|}mZRܬ@8e&E-QdR_;J ML8wK"ssiL#eMT_h<%󱚜#9["hKWSŚ6q4ĂjH bQ:CuAb1LXOH4džkKEs C0Vamg x &zJvNi 9Ũ;k79Z!6LS9R`K^s+E:f7_:yyxOI'򐁁6\[ظ\\ҽebo_'!`!p&:c5Q_tD)eGQAtǦi_t78ay.!ƣgs٢#+VƝ'bbhD%v[z>d_#Jfҁ&Ր]] 0X IbdSTR|)ʹE%gaQPo^}W/yMi]Bozh%Ӂ{ZayyuYgt\:: 2XYjإ{QBŽ>7 C0 i%f%.;g]x)n2E-V%\%Kg(bcU ט'sd2n.)--i~0er)JXˮe@MgK/Upm1oLЛX2_jQNB99L2* 'JZ%б C0 CX,'):;0@vEGmMDG NT&LD0OtpR"5D2O\,:uJ7 3[tH(DG $'gT/ KpRhod(Xl2N#u(cLgy}[lv0E%+:3E/1!pwt82pd"ĝ8 ]d~bTl$XӉ aֈP#+5=Q;!`!" R ;pLI]W0pFJ"s Hhl SS^)>ɫ0DrX徯Q9A&;ӅאsѸp?Ԓ*t"5ը"h/hN`)Kpvw[ԩDZ NT'](F»~z&̙~&ycAƚ#j7Dbp~yec!`|б[p4 uTy)x9xwߎIA4&G+{_hꓝ Uߑɶ|(5#U .0:jSbHiP5!`! v,0/UXqq!1-P3|A&>P~d;o Nt #ԟq~u̩LO$Χ3E.,߽eȋ{s:v?TOJ cqs!89G^hkf͓D&tqra>Z{VPu9g/\Gz~}內oKjidڲ!`o4T0Kp$&#潓)=8<8-~:H\8OK|ϵ(dgXn{:RΞӚsb _t̼]\|'Ac!`"xg-Mё&:P6'RbCc,|<~*&S&N=}e+x`̿o}_ؑw 5&:3[zyK&B\zd*hෳ|+B|(w [m)'Z|=0 a5ee 퍃4zٓr}'{DZ89<<+N>K•}Z;=M'#x5ʒ +K\Z\'勇`!i~tj>:rErN*DTn3d>6ٸU6J΅2B@\K2alulc2Ɯsx0a*548rٸ7~2j +!`!`lE Jt<;[tiZT& $|F;@R20ձ[kW,.;B|{ulꡔU}Zt OtO/TspM#%Vǟݽxv Duh.x51H G^8~bF^fL. ,Aw>&Xe^l{[׆'Na7C0ɆXX_?aҶ7 tnziRp3|ΆWnF?ډ⃿{ѩy2 ;F ,Ɛ0 Cx!@NByԅE";xj9HIJ!)u75>Bxpx?l*wɈ @//kC ?{_]^L٩΁'2xٲќJ)3t4b{stj1as.6.Rp>u 6C0 C0BNg8۵R]~:/-:`taC_~>Bx`{~RCс:[dC_?'D Dt B9XVT|!:A&DԗbDrRKT/)U;Jf K<^L> i Lf{q~<Ŷ3[D¹'hT4&9 .S.7 Y叀twفO_ЛTW97},NB&j ̉Ih fZW~hb?L:Ucg̔#%NF~h!C|X:O ߠKM3ϗ~teV 7Fp:^* ,g:6_ 1tAx?RZ3>0Eܯ?YJ6g9EHX U--^Z|;;fx2"BUę3%RD%|2;HȋъFp,gt M&StTϙd2" @<Mc+nliv'In'o|~Wiep¾'F^w z`gc2F"@||ףSՈ1NjE]~  }$/FUO&:=lc |>(kM6z{!CUgDӯ'St@YuMtTѾ' fA)Hb+s>c7i!`#0h?}L&!:G9+$Xi uFMq C+O~3'W!Ы=_TA*X +| |yF!%}lʄ": \ciEb (O}ӏmU ƛ(e/O~Ӟْ0&[VltDp(D?*(w:v b %΀⩞e.L&YOsxOO)z tE, ý|Ӣa8yM$<29|Ps}l˺-Ht 0z7ևNw<8*MZ 1yT(q,z΃;hY8k!DaB!tw⃏A~BMY(Li:y?԰hLs=/<'5KM ŠqRԴLFpm2L%d{0 C0A`D ^zͫFt+ :$7y':@bv":U!:0@QDUɃ~2^$zw~DG5U%x<ܖsf/>=P} (:8 z(ѱcsYt@ qm t#G##+F֫G"9?y咕\ry551Kgۻw?!Cd+LphOhgrH;ht),"G\3}ͳ(>H2ݱ}ؼr/_qvt&wgwgn+iwA(AZϔ?\,GMn0<+$N[w?{޺uK.8g`޾Ա7ں_d{-L!*5|bT4A_7=PS/Y]B( lz?[*c9 E4?Jĵ '|ߧ=1 C0 C`їQt{U !:Nw?Jo #A.WE),"0XtpÍK3' j DDŽy :@xxPt]#0(E5;HE :īo[e-Eҁ)_t01>UIKT׆ZƦ#\X$+cq49Z[jN&h.WF+¶f2,rA7`Q$Nz7[csZtcC],NTuMcpeTu uc+0\X/XcdWXT:DX-pD]']z7lm͟5gVs vH*"l,1-> w -#K%:*}hj]X&2p,{gv\sC|^V9ETV;yQ+vXt8щ#B'GXHLsJpj|tq9i!0),Hc87N>NJX^(qٽ; ^:o93Z PSbȨX;0JR踂/t;Gm6Aa q|Dw8xxc4SXöݦ>`p^Yjn|jzg_)pܖ&PHNprLIrK%nn٬NQb_y"'K4(h' {ϙ=l<If3N`㸾|6.| C0 CpNtcNgΜ]W?@lԑ踈VJop(EtH<\A"2сGv=ic-sfͅh@60WM\NJt6&gbcAm|8q cŘS`HB\GmL8 5ؓP`kÕFZ|c5E[rUh: q?8@j6.;nv r>n|oo1QA }98 rL bJ>F{g+p?k.OAy5& ʋq)a 5rnڧ`qϗxZD%+ƳSM 1a8Dln,ߔe7G.囬{V/n!`!0pEEEGgբCgmUtx|H 41wVzK5R@=bpR> :v)y,=сh': .:$_J8+5# jM#ܙS28"I;fz4LTK"ӜAh1f9<6\-bY)#fD ȒF26c7fX$M#Ԃm#2udb]fd h遀[@0`1$1[u$8) gPїͨ7y- u&Y AW'/YvOXDE\b8\iL_cϒǻtiL]^p#t3A@uo Vx5\8ag`7C0 C (&%&Oy8.bhNbB#8>VvHB /22ԥ,5iGla~TMCQc<M ceQ`d #n5p$H-)ܛF&w14 '&ƻJ@Y%q0 YCΊg[hxE6te(E8|Mq`A6N>,X+q1BlZ)v:!`dGhDIF):@}!fc{?gW!:XQt#/eE-(EGNrL#d @9D;*:*8lLrYDp{i<4fԐ`P-hz9͉b2Sbgc0Lq21v  +C2/%|x>h`֡ %Ha;;dKEPz#uF^ Kա?HbtDrv2 48"$p3i}j ~@>eh$LfHN~C> 1'R:T`0 Nj !À㴕@Z\au2: 2xYʃy|`!`MEM+gXm9\4y>R]GX@a&#9TX;GmZT'dXDZEY[l-3Md7DS}:o<YJGT1$A&IM!N*Q"Lj (1k(gEQ͠^Cx/0[%6.;fNq WUޔMi(EVl7C0 C0c境d=Fp*EGZEV+:`DGx8EG&p%$:)|сt4d(H3#`c `w vx1CFOṱ Nd=~;0!*'+X3,Fka /B~K+hwb y @,%ĊHvHaJIFF( #p. 0CDdqN?'b5NO< Po߉OhTSm&%Nw4w2y_b`Z3լ(%%ֆgC\P\0ָ3% 뫳+ J j 秓e.IԔa.$5tiH9j(q%զObl}}Ks5 C0 zF@R58jUthSبE sUgWc JtHX$: 2#:~ DG8%q5oLGs\= FÓ + u%Unml|DǤ-6BrzPiB5Ͱ~Adސa:y:- >:j~! Lsg#836' kYj/}"ݠ8!j/l 1s Gޘ.њ cLr6cIvJHT Cgsuo ,5 >ϋIڅSkOEIva)j$ި42`ƴ \](@vU@̽40 CLR{lMl%grx)0Gm1:cMԨc`F#P L+[[\uA03ylls_Шظaٸf(&3,| 'Dp9{k!qE^c879*HB(1iT X6"l\Xq9i0 C0qd/:sZ*:P; HR0.j$:4}#A@th*Y:AOq;0Q6CD(C![,7oʟy\R@4@#x4~0 :3]2^rd4Ǧc3-Ϝ;MG1$5qe8yT mzW֒HfvN,eaC\ Ӏ qcI 4 @7fÐ1{qJE ɲ눀ýiڲn!`@(1((kP=ex1 ^BVl7jcC @V>![ ʊ}J\ƅ#D4iU264]#jBX*[/ėČx*A#+/) +pjŗ:?bi%l %)4A,in!`!`gGt0>ZсA&\E tR ;Pt$ecr|ogcc+6"(b!ftc9f!96Eh`S?%ޥeJo>LC%#ǔ(^_;gT8μpq(덻U)gѫaYvx ~vJ!`"Qbwg:8CQba 2XS%d.U`ʐ#ܞa8q'6>Bj;/~rDq>h#xiev= lJ/6ɖ+\6䱮!n‹ Xzq b A )fr"Pc9̯fur, ߋ̈́ 6/]NټS|v/OFóq4*@9);jC0 CyǺE?u'`C)ک!P/:8qqC(Φޟߩc\\Jќn1.[ ! A |(22W yh4&aTnô&a:)h #'Sc|rZ*d^c$| Ae>ow!.>/;SC YVgYa3B+c ꭟcH9#*ePHTU2.,O74 C_8h#d(qPaM JuVMD\0]Nq, Bq5q8 6>Jĩ 7#a F`K\:xw^ 6FiŚjQ49vb{pŮzxǾa hk!`!04:jb3x*em%RX'NLJ!Xy3秔78c֝Awբ/QuSPb8(SUҬ)1_ =,% fXVYo:c,Uldz}v>!`!0):.T虉ڱB@ZDD!: 9:s&Vt;`&KTOAʋ:hІ0y0~oŘ'Ԝu:zFPPa?ܧO 0M <qPy5(P _3M$$+o2#FOEh #ai#a$1=F1>I"9膞]<γoq$j7WQ~^a2 C0 #=FlTH JɐSYaRb1G*8%"x$|J 7RbN'%C&80`ZTY61mo!`!PWq!4h;p?#K]萌'sdGJqN$Cs:W95y#"wyOƤTYMS PXGȪ[[`!@Qo'ԓ]%:...n(u[qNt߼ŷh 0!`!`,KF %GQ zlU ɆHhS !+ش ji2x0 C0 ɍzW-:D!EhH[_ f3''..|=/`R)rcD:ŔN 'YQ6A4g,Xӎ-lنn)!R0Դ@A}!oiL4M;BSXQl&[)gdcFz}O<4&b1'w)$*bFN*'zO |΍Ff!ga^JJl͍d,֟MM.·O?0h'.9cߟ=1 C0 *8j7a4%x%p,O%nVJ sg㍉x Ӱ3H 6^%8@9%vPM pL6oP^\().zXZWArgbO C0 CLt÷`03_t`DBT٢wZ` fǪ50xΫE"UsGG`$Ή[]s ˖ii>CO;^8Ձ Ptd/2hXg߰V4.{{W,'Ezx0^ǂ eT'5Kە+z͆mk֮Z)ӹ|p??}4Z*슇Oe7r8v6f0 C  J/^/rݺuKlnY c:Ğ]bgFsy|(17_tq瓝{zwwƧ7gP(qsC-͗ZbD>?ybǾ3o&XNRUdT0 6͛`}+}6<}o>O];!`!`g jnzuk/.V ˖Ξ݇z=xtwS pæ Yqn/v<9r qyw9IW#B<ӆNgCgK?Kpۼ֙Wz7~Ǚ/iIfs ;~q؈@D@GGe~7?yu_x+;dx/=/.3Vm>?>4Ö86ǐa4 C0 * %o{߆ZٶKo?<GW핁+sЩP0g㗭:~q0煳~mg{N Mn~oev?-#ހ"o>x|dWy.(1k.`m=7/;t2Xx _y͉|o?X6_FxTll!`!`@ :P2Xv`A{y?wx7QLM!:}='::LteVBeԶ,@:w7nzǼEGɽ?zpEǯK;CLJ)J8k@&4̆rìr-SV;:J-__9˵K}k3}o8Gg3H?1b?(MN%?XѸ{?|7/X|C-\+I#{Ñc["EEJh7AVU,sU虎U~6tU& 7]%*f^b|~>qhlrƷmxס>Fgs0 tX{ ]!E,??>|7lDSDTn`W0H9[muwO-.we {!`!0p 1[@1@b׿?gBم+{Nv>~zej!y'l9Wy Gf.%K;yx(6.6P=Pv&9z7և=қUxaK:³ƢZy~ۚg۬3ntk)BP-ъ?2[e"+MBt@l(p?dKt q :޷m눢otkwx5.:6,[^wmkUcjw/SYt&q}~gn c=_W^![UaϞ e` ^7RBacVM*Xr[_{ۑ0Wu.]˞i /doe~,1ʱC7]OAVo #lXwWւmOmy8tTc0憞6Cͥp3tb`޼r=_//NljyS]>ZM]FlP@Y0 C`# %Am<Y2w+ ˆDm]E^=򦔗IO(q%pc/|%/_١^G7\t֗aNǃVOzVyqUJզnvٝ_‚Y39y]^fHU(6[\/'(1_Aޞ: x߉NwsiO C0 C`.:Ν Z( sŝž#oJ ZJ>++16KJ|Hڲ#POM,U~C0 C0& }с|K'n|DGk XaOn~oE*gmZ!0@tKc3- dDMՈ+׭/~~l?V~kIoKӏdlC;/+؁ӂj0\=[/3|l/{fZL#W^Q={c$I#nj0@# g/|nH :d<|z9sf6Ә3N*KZ:qP jj@}eK/km (A)@ GP{ C0 C%U[̺K*|>vݻpLRB$lQ[+(n'?}͚TԻ\˯omm> {*AJ~o~תbUIkӌvǯ.̰89<T1X@zznzY*/,.go}W]P7W%1C0 C8k %5.:q iDmkVo۶_ecN cMt|f&_t TX:w?&:~_9w` ugKT2QCz huo|Z4_՘"SNtbn:MxX.{Ou{sυi%טd$lW&*rD Xl'4Qii7}h ydfI5'&^8>O&_|f5 9d Y2= eh!`Lo`?yo۴F@~/3Cb70 ( 3R6U+ȊߵeGFӿ|3Ou>C%6nF'.%g>9M=녳|KG)\_C*3]'1gf|bUoJL5Оi+Pi0 C0E`ۮ2CZsUt4ë`+:J\An_}_֕,:4MLD|5Es|m#W(k_t|`g6MDD}4gD`&KTOw0#onqUG#Ͷ?)x-8kXb %?elL_c.;uCD4OHpIcDDpS1mj?{מ1/袕l]%v%1ӜgT9y᪅ >yeß-\$:g@`ё+'=&!`4E@G IԖՎ̦\vn\X1fKSYe%]MJʯFeۇYtallC`O= ֭>?k7^f"tb$kUyU~Ύ֯K=]x5A67-kfan!`!`hilnKՈ%G Kt4$>|u9cR&:j'Wlt\x/: =?fڛl%orj7fq8&:jy`Bv<xś-]Kλxڂ1&uji<aܘ+˯xA(W/^uS 0 Rb5I#q!POܻ$+}1ϼ Ttrdp5&-H8^ ve7 X3jD> m!`PC C1~+緶rlr^k# ( : { Jorњښ}KϛC6ބl\j7}Ц:o dQ%-ו~oi8)`cat*뫜؄_(߶0 C0jELt`Z(_sDGC5#v0zW-ZVoY6ovEI#8v‹;/hY C4դPS݇bRppڛGnɺsf1Jl\b+a'!`!0QhJ6]*ѡcD`Ad)DDD K]reXGDn,53gXJ^[Y-)oB*z,8VD[]Fv$a,-9sÙNfZ "%Y,t磚SLbt@OjچD"A:e4:9Z“=w"+WU&ǿyz7™pow?Xo~ C0 (1%KW T-Q^8 lb̼u ¤떮EYQ]KDbMdK!%+0F[75_}I'=Oljm\oD]@1l64 C0 C D|1q!Dm=?b8< $:@G!q]aaOwDt/:Iqk/*Cqok`}XmM?*..XVU8MtԽwZ"5.憛H[8{ i2@"殤݉f&D4&ba3۲`vSRf Lyk$bVyMGt+ ,_ nt.Z"tӞӴ6 ԼRQۛ!`!0%rs#]i. U9[ 'GHWA7X g(j`D_Qis&sTB:#E$hX.Ɲy5=cplw*^,Ms@ #9(Z%F C0"cy9CĭM1dgrETF&f8!G~<l2)eMpHJ =J,/[HtͶ)h4µW,4&UdEh͍X>0c~7C0 C5*:f6 E goѡDǂ`sCkkc"@C631jEy!+y/t@t (B":YtH 蝒WoDu~3 ehmj~/lnMS91SD2ewȡs-M Z}kS#[RYL.➈5`!1 D |e7^3JhH{n dS2:d_o'2B]d1ιԍb2$crqII"*gpvۛ!`Cc%)q1KĒ(&[%N2ddSTa`M},Ln˺$X Fqʖ Ͻyo|FNޔlJg ^OVcD3"Qy!EGc)~LV9&:W@2tLt1m ERXƂëerWWg4eL8E/ˆ~q'aoH4nAØ77㷮a+Yq9kfCk;+z)Ɲ1hd/'eɄK-tЈ;&XvbqgVt2WtW:ۍ vq7&>^߇!`!P&*ۜyi:#Ib2i ,ӎٸhi)''6P8~G$ΐح;cu/2a/'=lELFH*R+1Ep!`S]cQ-4GEtoё44;iR5h6u_EEGGL=CΰEMD;!_oDu~7)I9֟ _K`jhD̏Vp`8 hXglhE"clXC$o?waL!twؑpOKLb00!`)XSN?uovfbx 0 C`#3R|pϴ/}RRwHiiJϝCNaNGMcUJ]"lm~7|z{}sRMO3<!`S wȎFz:<u%|]HQFlR>I@!%&'Vqrc!ڳ]+*ptJ}#LU(ÓY)-TEGUZ uD92Xrr^P, ל0 C0 ZE:ud-*c R4Pts/_y-":jdjllCVŀm;I鍔<}0?DGwYJ_&:QtݵĀ\j$kag }':΄u] Dt6q8mv:tå./aК7]ˤ0 C0 0G Stt&L + %># z K(ƂO;;RoBtx%C+"6pWܽclgItICXm?a!`감 jopOx"$dPqS>t:+lnN YmP[ tO!tǮTg,|B(@Og,YJuw=CxM_<)ۭ{eڟ!`!`y\>ʁt*\Xmg?ky"P`/ O iO B lOAΩ%_Ż|84Eucˢ',,Q2Xy}yǡX=hQ~1b8XM@BMI#}_~qCn:vs< &~>=@K\UܱoOC?땥O꼖pGyRMۃ!`!0r(#x=Bؙ1>˨ǼcK@? cg+%V$>!,XLEHTj{vc  53)`xP`^zn_d2Nwo^tvd =!`!P#'br;xGDyH ڗN":m*NhF"}Gۺ;k?Uth4^$6SNtix L"EEt)8;/e@'h{',Q=Nnq5a-ݧsx:zvb5l+`b.ϻW9bI?aO_{F=o"`F9ܠ0hMn5'lk&=|l>GԽDK0GI99zwgR5BLʳːx8 ꨩnd8憀!`ұ=v3j| lÚ؂Hώ|G^?rضgGgaB1/d+qPrќm^0}^t2?.2N߯S+v <bo5"?}c"<Ø/ F\@k!`!xwzW`e GWtI4~|7見}DRMK,T얈Y'j;4KT{SxOiýQw}*|HWftSZ;Lt%斨/dc*uXkO=c/uIe:`&W"l1-dr27W2/fUOX_#mcoɵuQC aD/rСY\f#l[x;⩎G:zgf"@gkϣ5ò|"T7f':989F2o"]^V3ƶ!`C xڝJUKyYOcgIH+/y&+?aY( Lgr??tvkHe>S |'*JxBl6\,xW~1vޞ6Q ؍6n uxH.\S|tr0 C0 :@`DGEt`fC:w}goO9(InBhc O D;?ɘODDǏP1 W6FMF)7хjm_cv= L!-➖Hl1FD{x׏wp9޲Mhv3y='sV ք}~!@*$7Unӽ/<glıg] V LJ0tnj/Ξy~αsuw!^Yr]:9Cr`) V!`4D@'KS7|sla'M;)1->3[Rֆ!ȑ37\u:sLxv0]!%.qZ0&KMqw,&5|#V?ÙaOU]Kt3(Y9e1aŅ==q?ilr+]eir 'gm=6m+C0 C2сG;N!He#J&j":Qt~o,jLT;xt5 *fc _$$(:t?>1z(uf|>~460Ow>z:6b]MD7gL'U͔m5^XzR+25c.-ı?/]l?S5&<\UkQAd'~C!3-=_;]|g]&ݘW//f9*CIP@Rg 3ʎ>/c6:9N0,\zUG{>z8/.aA 2W-S][ɨf!`D]J!)"nFLy?Ov}Me@ҸsfK恇/!ILB1}ﱣ_ԡQ}%}{$ qrc#a22Q< ?X!EL3|{,/9/=O>ݐjX#vR==w?7G}HSA6NNq|?嚦¥nz퓆!`!:C^[x}H}AR$Ơ5Ttp<B]c!:E)2A*h#t'w3Oۺ'chXDrl596B9w=o=G):~-@_&/IL3Q]|R$o;.R\>ui[.m)4<\\牎Gں?)y%#6'IkKFAdqN-{͗ߴ坭M37|TΒtWbn*1-2?O2ݦ:AeX1P'v8WgM~y7ՎQ2Dftu0m1Ȩ ; 7J1bp97F_>/}ׅ+8Nlo7uЩ;zOwqa̫sH^A 4Ç5 C0RbdžF{mp͆kFgRbPRydrި%B0 "lpۙ?_roƑxljۺ_+Qbq 32 Ӳ>$+`}geN -׍G7p#4u}}'޼Zfs%շh^=j*~Ŕ:>gӢX=px +漄GwxlmIqlE%WNqƊf]C0 C8  %:0JDǟ߶Wo*qpt#C():w:':NAt{7^8!%|TBCIwgDŽ{):zw=`ݬ$: јnl]/:}Zt/:$Ὼ{u u@h&&ȴsyzwg_d˪]0yAYx.{T]}Gph)@^Y\ -)EEh{ٹ؟!`!075-*$㠗ןb m?kA*ξ} H %HT؂PL))jD'Lx *2U8};~aWl g/#W.+q#KaDF 7{} jN/RX?E?Kݶf۪Ef4*;Ttgm;3tQ*/DBcx36*Xj7EyJ ,ELW6mmzV/^}ͶՋ疙6ƙl!\V`FDr QZtl!`!`@EёHWo?3?qźm]X )"%(+:X-R"4K ?+nݸs*x#=cIRR*:Am`{HSY<~c':^tT+P:/%lBt#օ c%Od2+o/PH 8TL874H<uxg;<3aќsgjL&ÝlGTֹF@sx D+8`@Msh,N4d󯼵cVs|ќsjJ68\НͶK A1A)2y:68W,LnpHdQD}uhSۃd(U< +$2D:~7uЩtPFn Y|F:h|3F#GttNK˂[g$blqqer\/.`Wdۯ3_DFkZp[iqQxxߵ}0 CJ-d!aJ`Ad$[p_yO̞Ѹx9g6$Qf;3 ؂Rl!\JL^ Fl24$|^O6x΂9aH"sbZ=BJyCJ" x,ƱCۏ6Ι5kyqlЍ)ٸВ+fnXHuVc'%hl O.ȔAkӏ瓍/hin/FRJl\y+ Qѡ8bZ媫_!`!`#C4֖9 E'z>>Z>&R٠ !*@t`X< N< :Л25L YjF)A ALtUNt&CttiiAtu(2>DNd!Dq :$(:8csfEǙB_Qtbֈ%klne%q5Y腨\<;X:ܸ#ƏS N2A: cZ٘6$pFt$~<|hodd9L_:X xg&Y Zo#7B^prCr Gż/I5&"ɸa;h&Xjyqn4GSGG:Q]C0 C`"CTRbw|^RTpsC1J _öeP=ifRZalVapIظK?)l  <)nFelmXOBg!)XJzZd2 ޢOj(yV[!b %+&95Z)$UeU^pp.5a6Nӌ x9j6K<R..^v3 C0 C>pEXx#C@>`8n*:At0.MJ##i<ЏRR:|ϩFt D&U#&_&:@ɰC~g(Tt!"=*:{@eѡ&qxh[$tOIt< @Pt±a+7PItdeBL,:ﳄ  ZuY ܘ!,c2yQvd!'}qopsZsM!bHu`5`RP7De=!!a=f΀3"?[H`a%.TW.Hp vRׯ^1iiK@61l"< ItcH-Wyay8nx;@yGU*Ը!`'Fv;..F4hy$%6ta|8/}n!`!0,:P1/:ThE),)si0s,:"Nћ/:X+Rt0cmĈ@5!B"vMсxx*1j{y 4ZIt-lN20*сE yQ&:ζUiUU'c1^èxBq,f1}DV3t(zfd'Z{TЖQ:D<] 58H?)M%}i]ZJQŒ5+̝;~>Դ,a5X%nƝE,eVK+e1uEĀ99CrZ!sGX C#Z1s6ggJ^h?(AN ^;PbөϚ_!C0 )KEJKaC4IaAt';K9jsd-%ؤH!,5g|$/ahH6i-cƑAM`6.TmvVK0= j% eZх2郗K^o^RE]M֊a4gu2 > ܐu(i2ntCg=Ksj q@kh6 ӲԂ=!`@= PAtxB(DFC,(drP DG=Y>r~r!rԧzũT Ҵ{fP&:βUiUU/ӟïH6 $!z#p/siJ4p'}B1`'t;%du$c6?ui θM% HӸ3jHPWfU -ag8fc40x.5\ sI |&kꀛK< p&Pc33vpiN.G|vô.uYfON]^e:] 2!`S_Q#vg1rH/ b4R^J,3>KlAx2j{nZk0 %.8dGƧwh2<.%RS| E,n p'$: KTSQJ텧X"ZK1`c% l3pTƩZBVqcf!`u@%ǒu/:w+e 0qXH`*5U B'$j89uPIthsS ŏc%nŸLt0$1h6 eBoad f!r#tt,;m*$M p|FCf}d.`)B0F }-XVpܽ-lji99s/W- aB6pR=;`d 1\N{TO#!H WËX#ʋ+8`_d\Ņ>3j869q׹Y*?,Kߚ=!`A@F^K%#Kin<M%~9j l$WŒ̄*`+嫠c` Zh Nv8Y)IB)F-@s|,X"IDS+A%Fm֔jg0/@Ӣ7 G!Pb,.U %'+S{7 C0 @#Ӷ.: )Sޙ=!zDQ:CzlCT_B47Ѱgs23c . ~ $U` %ۂ·YO,EQb{ӌz ]t@IDAT"OCin!`!` DmbEfAэ>ґRY@`2RPE/ɦ zBgdcm7*2` q0Ӊg%KTs5,C40kD4Z!@7$Oj"p^`Nrx;t \D Ŵ/ p#h*Iqxϙt(G@bp^`N iͬ`xN4GQ90`d*URAƲ'^Q7ãxxɇj\je 'ʮM>)u!`i(ve\a) %8pE7nNȪUX8v-詄i&{{D_i8Lr )g݉1ƹpM'p2&s;u@O~,:$q; 9:C:iډⷣca׮$;,$WgLKcˇ?y^T1pa<9q6iQv>D05]lZٸWF~m8\{s)_F d㐣p%Frڥ4.ORbuJYjE5=Qmr<$ C0 C` P@,R;X!ncQϷ(ET:?~\7QMci|Q{0 Iɴv?#;i\Ff9btt>SDx7x$W6YY4Ysl؞qc,`cL.?ݟ%/9a&h4J=:%ԥꮺS}s\GX=n虆regcZ3 vyfbW>ǺٲW_|"("d (93$b쨱;zjr ~D*~iKȺN+"(@IPbLR.  kHa86.a9w6;> @ 2XPba\lIJ 6L A#Rbۙ[lnߟlW"("(":m LBKQƭ։#:!ԧNڳDuA!(߰d)3g̨3rHuQ0s];}'z#,QXa?F| >猓 5JK[4Y3f=thq0 ;|=_xw#ց#XH%4,Gg۝霾&,iwsu9n'$s7ȞLKKT? ;nKL8b䐲2َlohxeۦGx;b-FA=P2]zxgSFذd)S'95hlxm|6ý]2J.n"(@7Qb` cAjicF -ܵo>[hJ,T׏^L^;ʹĵ,Yzuu# 1l|7gěc]q.3 S59das{76i"K,:yy'M0|Dei)𱖭 ^ڲ_޼o?L7|S( OḱlØ3p-0E Lh8Γl@+[7CxE@PE@1Gt\dѪSڢX{C Ƴoo?1ccƌH8#/tѱbڔ-4x.:|1&lѱps.X:y҄#qNۖ&k?;J7_pRTT7Ukk'CgaURQ|%izDU.SV3^lE{8|ߞdL#>bN c:gI!jҵ G/|p 3xКgӺ _Ы/!}tx"E[bs&YU]Tc9]r eE#NvYvh8eW^ýq]S $OE@PEOX5m,)fՏ _d Z0qҵq7O>'m G$7(cvP6f^gRkxɅ-_xކ7U6 ݱqNcPS׃ةdY{^ O5*+JJv9l-{mS5blH2%.VLG<m;n\'%u5Ĺ޽?^3h\TE@PED#):fv-":W Y0(DozD1cZK/Ft4@tTth)YD5kVBt`V5DtHN ?wsƍd:EtځLӣP_-s/FlqbEeD"?{.ˊ!$'=W7rĉB/^jߑ{@ 4*ٜO4F@Xo֝ei}=ve+V7ְe(61$79j˪opdWGn:Gds'.F'{FVW?w#tBme9-4mcaK9omRO'ÇWvoN5tKKZm_괠lh;6ޥ)"(E9[)QrG0eSgh閆1 2 x߲6mk͟\0aBlNrѲ{w1Ɂg;l)͝lWO?0GYN1K=G 7j**8z{TuWzuۘ*I:)m8%k7 /޸I˛ 73_;_N$=\de(M)"("kIt|Kr LVZT\D;C :>~/n$:B 'Mp=8ics ΋/)''TlWatoe)O3Vwq6Ddž'>ށSS˛? ֏Rսi.X ʶw=a&#{󧚨>΀s2mKfq(y\k"$TtAgM@ I,R&R|qɰ O9oxe63.4-|r7;M'W'$s7Eϓ_C[wm˽F]`[;kjkb5|N΀?t66N1bh=3gܶaC_| MaW8<.A=MTE@P;6#'QFJ\6 .\ڴn b&aFn`637Lɏ}|9˴s-loޜU"Mt6C˩)͝ԫu'gnN>Tj=e'OwM19 ^f{M<6f¦trs;Qםj[57c)"(@q?}ŪRYAtpYS):~?E2H@tg#/8qm;w0&}Ɯ/nz#ڞ7~_@nΤf f& urJI{?5sL-vo7&w9po%˗us7oXC drڔ;?wKUiio/gLpC+%.򕄼6% [BtUaޚZQo]7&g6[ "("(@()?zF/FE^|eEٰdqo.-t'icw~3HCtL&: Vt;U={7ϮWBzGՅmɹ"j`bʕ`>_Õ]`qe4<$Wmxbr&0G@Lck9W^*ɋH""&өjxUy=7.n,򐲒oyhyӌtueE%_ccH{1<䌭 3m˽%sC_t0U81AFQ\;;j]5+"(@XZ>S&woO|+NİQL!'5VI㥱]}ٺ z;弳-pظd-J m6e;C;^_[[>U 2k*T*K|,P/ +6+5KZ^[o+//.U7ZJ#7}F=JPE@P~@ Mt#\8Lckӟ,y Xj+zGkC)5#M>4;C2OU]#Gn_Jw'U|?sg_Q_[UY*i"/~rP#>Ҕ_'V2e䈯]uEwkO=~;0'AY5WjXTTl_DYAO@%Sa)a*nzzrѹ)+.E$U.@i}HDPU玫("84K/t|@߽j++K\-|VX %vS>q|L؏jLMaAՆ$ٸR<.S)G7\Ms]wsU)rr΄Ro^{anXЏsIUmilܪǖ("({V,Os:q7(*:0r|ZX3srۋ^=#y(wTt B?*]t|>ק & s8|i794EǷzlmm>hh6\۴;VmKu*/C%E%W>b?ELTcFR2433]}yRwu~. b ^aL"2vL^W 4*|p9=eM|ꢹƓ eRM nOcM ^G~I?yY?Y+p_)"(@{mOq0󭞄ʡ-; XmN=XZ"GG/6^VTY2xqMW8΅Jx٧ϙ5%Ϊxe+:I& υ_U^1m1ő=.=ֲ8fLE@PE@P8$WwDGͅK'%aL!:\I`8͕,!ձLtAHeTq¹͞[pxL.:ѱ`ثV :VN_2Vkq4Qݟvogi&Mt²K0> %[ldf3눕Cl3us}sU?cQ2ڏp R,uq2yL]TkKJ1>u:󹱝 ł8 7g7k:X|=R s+X!ҬTG!">S}Uj"(I(1zOI1ƕ>c)e!6lL 1#)hu}2ig?+-Y]YXKfe|.e5x#Vu2zhwz*sbnZ 8S;K_Ǜ- tgeDqfX sy6("(i#:._lС14(BP j Esf7+-9{!Ux#iqxWNcm@=]L3ju A`0gljfB2YY2k;'YCTm,>'[Õ'Lp[dX 6b0[LpgF0y9ێw5`/E@P0f߫O԰˖b7 pjL, ĘYajGUוô]6:j8d &Xtd*s`!` ܦחYKȴR@zh?aȷmc%q0?tr:VỰ^"("P9~WEPKt0'CrxYDǸa5*: ;ݹ 1ޝVV&  e уr @E%nإ颏a Ç{%EUEX{8$.;KGyv8fh}3"ëtDtDh= L^1^6H0ekϫ3~N>b(0±}x(yui(;b!@XMTT4<=ox;`JT#0SMPE@PG ??{iei5t$%F]^; }h mQ4+Mu6^V\YQ†!?*GaRb <%?"AF{sk*Aᘧ#B|Ņ#TqGV s48UDD{03lL6.Ψrz"(G ]tJOсi:nSʊ@$Q1=8^綧u^EtԺw8 MTi?2jPQR⺕▎p;ԡD7-NɐV$|XFK@I(=rqD,f\Zsy+J=P %f>7 co %80]`1Vn a J}rt "i%b)%uZmz8<')mnJl6s7}1\5J7("(8a0)g.1-D\1qᤢc{c`P1RcV[0&s8B$:riW\UDiX<ϰDW)߸$fB&a3Ú~/p4UlLu4Zee׬ $pF9v}'sGY3y7ɂ /]h,601XiClF@PBAgE@P+qa μ IPq˖M cn s6nl6G am"`bT1ɽ.{16pbdH?`SY' ч*SbOE9MՃE@PB@ ):0猫[EWD|(7u]~;xݜ&g@}D4gjnrqd:Kb0O,),FfwMx+s+gEJ@éM&Or>>Y[DX}Acd $+[\vH xcҿzN"(t@LQҔB/9 O tۇb6>-KM. Xt]C> ntVx?6΀LkD'OeŔGڠ"("䅀׹GI[7CPN$8aX@t0Pi&pB/]tv @!u͘*C śbTqQwD!*:ŷZDuA? 3*<F\qi>8z'fȀ"Mă-m Gh:mI$:Q %1oEmt7Iu4ҽ '>jRa`$dǥYwé[[SE@jg-{MC2rU4mRwQ!sTh+҈l ߲yK䥬|BpNH 8=[4gNg("d -ۼe>f2Ipuk ؘSENa(-&S(qP"]MrT[*: í5Q] يFol7`dr*\Gqm"/mym`L(fiEG@I7{Gvp IDD]y}w<Լ]%uvrnLP?w;E@P'BMyis蠋ԲtTHK IEm87ѷvnsմa&'16=mj"alvSy%]f,~JћR>mqRb,N}TRE@PNN%sqC.lw-::፻hNt):`K.>`/,:MmIZ$փxuf+`W.Ӛ&~n#䢑o3 agr/l4}EYp]*S<ٲN>YAq5x΃ 57^; _[#hN<?MPE@PrF@zU9Mh.ٸaNXź䦔!I 13ܶ=o3ʋNW7Qϭ \-܈`JN )$䕐aE@PC̨D1KtxEȌ0OxaIс9kSdsZ!:-73bw սI0#:~lGn5Hx}֎vWLZw&D[z8,ʓoppƛ}3m>LS0uoC=98 "}]>}Oz% #&;CMꑊ"(I{*g?Ժ=|5vj>mE vE=xeALܺ@S^Ӡmy͍:>cG^L3n]("([SqDǦpיx-{-smH8[s0!*:柎QwEqTE8FOM:h9= wO?Гj OL"Oq"Hx_aC#x#?zom#FY/ρ/I5l+uN7-_ޗ^}!Dy%fyq- a:^Ĺ'owx֍aȸ7_M<E@P ҃'xj{=,4 /EO-^;DZ[xM6LZ.E؂U ԅt8~%3o{{1 px_CG4}-[f;wXqE@PE@PD4E℠J;x<4u#:d6Utii7RWx mc vA=M;x;}[AEG& KrNc|ڷͭj~/HDch Y+&$;fsow֎] G^L4aJ?"0DSvizT"Kh{! }H4yf|9]f.Ǟh,GizGãm.o1Kn"("PiOб94˾ܶ 6XHa Qz]4כZ>ܼ9 Q!WZBbA8Ro} #}$wcHKOCHv5E%O܌T^p֔y:NBFd̟[뮃ymUtKX*01ϫ)N.:L8vhD_ncn| Ut!bGEG>c5Q}vŌgB|nios衝 G=H"M#h\IO)%x W/5hΆ?qxN&Ԩ\~?V}>S=!ۗb=y|`7c)fj# x?؍II<˾=xL7+sgɝ49|vy[IX08cE@PBBwбcϣh/cDŽg )53ZlrT!*xGxY>#w4UxqV'LXe} @fm% W$]+/<ʳ\Ï4 1O)ߤ?Sc0-7ocPsmٸ'ٸl|鱊"("@':vn|0㱚Gp]m#`chL[@ K/H}wtG>:y5f0CULOi/S{9;~r/dXˎ;ێGɇJt %8`jc-əSR;OL0*@ZbVe&Gy}ozmyw{ysaω 2cm Dg, sRE@P&wS/o򋾅:"5uD-Fmxڢat<|nVmh $8l<LU)B;Сpďw_ە4}j2씔ؔ)cTM"219uäĿ~_:GSEPqc8l Z5Q"(" ;-~p/&: x2RDHjDx;I-ڢd nڻ;C[)::RE%oM*hJ]oaMίWvGw trxaDCwxxWOЫy3262;psGiv}FށW,-v׏=+Km;uSH#Ynfv$1ٳT![qWLwD04G= ؒVa!ݹ*{.z:C4GxwcGWQ(G53n0BUcIT|L|~1Y"h{_|p4ixoC+n.z8>K9NZ 7[xt^;+"8Z`OcCyӦ^r-{{-o #g^dT91#n7cCnͻ~ԻU:vl#l!l̟X"uBH|AT&,B0/?+M}># RJvQãQ^0`?]lwxbӺ@Er2> q6l\JaZYqAy"("0XD wJ㩍~?mnxg߶St@n2&:$ n4-|8+[tWvlhn=):@%XUt hl#+r@J>):ڣYD8-:Wx1Dy}rJOxqgP|MeWlޑ'L.zMv?Hh+ooXK8o鈡l ȅLDL "ݮo_y0LyG~o/;DuaD%M\50P xeC#: ~-< H?~`[.޻u߯w5>k ӽm?M fűh]Cr1z#g~[H潿ۼ؅QyíQ,%GUϟI>"(EHJt)6Hqa`=ݲmi3vKF%f%iVb(j&- wzSd?lxka)bveyL dپn%LYE.w^E3j ? pGG xoy.t@Q-_;ڲ ;Bhy8^[IK K5>eE>(XtXƦ6 ~s`<1*WdL%WF_F"("dG}McQN3Q zm8xz㫧V7* ڱp߈Dd 䥤KJJ;CND2C6'xKQ78v8djQ3drey$0*Ih4P׶oœf/d0c6ܶh89\ 8jjјPS-1@IDATkii ф'Û1~oGO[:e:qh͇[cm q't&:W*"("p|pDLkKMzg~|մ]]qH,St[`h=">FJ&:ONc[Zogyj͌3V@k)RtR'٘ hٟYDrOGѱh%SNBt{լfȦ4HT!EeOZtzuf,QMTTd;x+;o? $Çl|xDՐCG ),=H43$wK#ďY4#fRT7כGQC lo b[ǃOcS#?VY9fTuِPFc;811hh#21͘$:1r!ykfprtA =yعi-%QëjK~‘m/oxr2$Z,ތt5TEd 䤍Ic:+p\ۼw{Ñ%QCFV +/.Q;nũiWĝ!YgnؕeeF}CR>("p @1Ma辭Mw`'Ի{ZyFU׌:(x9NJ631)PMR64\l@a'e)'}l|Ԍ*Jv86XLb9? ߲PbW$/m}c޷+KcVYSV\ J>9N (49qCMv &**~N񅐑@spoP85l6pHV6AՔ{Yl/h0 %6k? tdE@PE@PPsآqx9Vu8%vpEꚑ颣}?bE&p^X5Ca.ٞvM /!eCDH b&zJd_Eǀ~=DG쥭oڻϢC5E]J1(:rl( 9ҤTtG5Q}ޘǭȔ-nf+[^*xA<Ёƃb8(3uᦶ%!_qWd߉ȅ|`0-R7ݤfP;*fəOZkL1F46t${MJTpeQ&C$g3 M_ p_p@ B1X܇o{/yqcHawѽ%E>TZ~p 7NC6FAbq>\QbKÜY~k'n t{\X} A⬌#;"Čh hcfw+/KOYPE@8Q6Ay<v1~?llxcJAOQ{^Vb],BJe' ?BHHH-py)яG|,EݰqPM2pK()%>Qv2.*84{"x {2nv;$ IPbQpN&ͤRH]KINRS=G3ٸ}a^.ٸaņs">l/~V"("dA Ut`b): (]"ZCt7с9#~ta8~֣wr>]""GKJ#' ַ92pXdʺ[9Yt@w`iv3c@E@vfMTo'ܜ1:+<|8F Yjq#%VИ)#bɰf$91À3\"1thLKiu>$ȑ֭Mi870KCGՂ):G̬OagȀ |vr `Uc ] zBfƀ3ėeITP3O3Ǧ5b 㠓KT 8& Cq} 81|}p d<.>cm \c#Q͐ %l708vw6-tr|z"(@[@Z $|qİcUi̓΀B̒"e@2KkErP 2SHKJLF3eia$CHfqqk iryMaW$5CrqQ(/89A)Y,*N&5qdo2URb&IaK!F*c]NQ`n(1]Y1AE@PE"!:DCr~":$NсU8%UL݁7 G$E`d^)[tR$>(p! ZkJt0!Ic'΢E1": R}Pq|v4Q{N ȨS34tW`"4H!LGw@,S@GȘ5!3 G8Driv-\K>"8d.\㧍 &18 fg@05Qb,4i΄9r25',Odbfj sa"CH8& BlWFT#*g!;DzcnkA*f( T ; rFan+KV䵟c,5Бxq@jWBp.0c*LL(!81w 'wש("Mfy$p ]mَgg3އYj,#bQb4 sAA22VRr2Y.N a Ӗ)뮲qLv6.l%?@u VI4W\ lLuEU(>dsqIRPb/\$ܡHcã(',7 M!JLqOFl<F +f˽blEY!W&G㚨.ՓTE@P=%"; &.:@[:{E+Dٽ@0H \$J)pP6e'*U8C @Ď`/k @ؠwnzE~9tӔi;yD鹤TtjAsA^ dLnx X$`!Q9tiI'3*}\5~D09<37sih%`cQҏXK҂8%1`>gթ R#K2i cz䌙&GgNn!>xD2gfې]#+3p~L2vs{s0`T1${!ax0NF\nRL$Q(+ЃRiRKĐopK1 %k71fڈ>ÄKNK!CWR7i:9C6VbISٸ1YE@P@C3Eg!Ζ E EOLpjF Hh.5ԕ_tHC2>":$%a+&:;p/:n( DEa8@dxEDr8.SES  aLD>RLTp7 y)CBvI2&Sp.dl ;"`ᕟ-|.,D5LsWk5}4@J48U;ICt7w;'*Ԩ0dx Q s1 yt6k' e\ˤ2Lh7CLöP@ǎr _3{N n ssd߲^"("=EPM(uc%YD$(2͏8ז}C eK7!xvk[Xzm7Ab}haX+vS8p>PӃ /D -J B, N}ITB %&5|(R#Nn}$R@i Oah}87HάWl%=WE@PE@vI BD/Cj0[t0N%::K 3H2VRNtL, 7z'֎פ:RHQCαS*:R}`D@&r>+#krdR&#p̋0Ki7$V"lfH!D4$342;,79K{!;=am%}q7v4~1Mn+^ x$XvOg 1㻧!XypxϸYh;{3<$g0IdəbqrPraBlAhM´C:Kڕ[-[cp.[ 7nIPE@fu:TzcJp/8@(~+ffEƮ2;HC^$RbKq4( #VA^l\8CFs#@jj<Wfx9Pc-rťWe)ƱആRgQ|9|_vu2"OniaĩN5wLhE@PE@8Et Z(3Dc!tWt'9Tt`/;O.":7k @Eljvke@Ksƃ% [AVWX,VadvY ;lX'%Ngnc)"("'!:PY hRTv @EG1It":]Vt*:e MTge+-t2yy}S,br.@Ǚ#PcU~F"-=$gPI$'m2&Ƙ"_i3ƨDFgYj/!9/XFF G]ngH9d!K-KJcWf2Jna O%Ǜf<-. NJ@p<waЙ3J\~%'`V(8pc=E@PӃ7颯һ\ׁ7IY: Jg@k3ۙ<3ʊ笽68j G؈>i/9IMI̓edž)j,.OD_s{S%0_ϱPT;qTpF`qtv˩"("(CT\BA!4=jEGs 0g'Ut Xd]2pYSDw(:2)?[XhF7}$a7LT."w;{'9/eb fO 1R}974sp0M#K@t0i7 rczK?#przI$e#N˚iCsFY\8-θcvfLxB\灷rY駊"("چS6%f,$@^#f/k;[vGaKNML.\%蛃DB" 5 /-5tAk|X){حFllܶ 0-gj&ʊ}RE@PC$!DH.*>F6F.Kf^x(r* GYl_ó= `Y8q?Gt<٭7Ttd. -Q]XWeƍD07f\`ßAP?ß "7HGC_R4Ϥ 4ǔ̀ T񪗦SB_~,O3 guoK%qAp E_?c׾l8xxVڍ؏ގYpC}b3OE@PE ;^[0_ti/<&2^5&&"C ]xs` h̘&!C08eu7;ou \/0g׼L:?YA7cc536{C:‘}G{M2;)DZ/Eqc1133x+uQj+is[lěo| X!,'Z]ճ~RVE@P)i6_P⢳^5}1cWU݇رoJ^;IIkѷ6v.7val|Luu#8l;{g#8Kl|~zYHRbaa k.xҤ#FTn9aK[6=k[ZDy?c vPb" CcdO7g4-vGWW i1Oo .z8?2]'n'P0<'MEϙ73d\.^=[,̈>y䧻U[2bͰ;ng.Xa?gs /e7_Ʒ`:g@t̘3e}!H韊"("iZ6-λfcfv[/xݿx{pJ ?kA}[!IJlxMEMUK!]uo:]ꉇSQó΍7t3l93?sg|K&O|jHG^?ȁ)&{ǠP]&k.M/<m8kl|`_Wo}c㝯LQE@PE"Mt\p50_< DD³02#:^0uU?y :0ϩHG_w@qYO|DD :^{ Ӿ=eS&zD%W"ok۷v#: gp!_@{'32Oϧ b]|wmmeE[oW]׶oHϑh~ fr\u>XWSӽaU:+W?晷B|ia"zb"&ifu;YHRW}ګ;˺!U3fqK/oojmSEbHT c/3 FuTivw.tE7]1MS_>ԜjM6ݽTPE@PȰ<<;/_qYsy1yԘ_k֜;~y~a! \^/ :1sPfUQbԴ]ru.0]W3Kӿxcva*bMꟃYIa_kk];Ysc?ñH4yD|!Ç!)ߴ\jFJ};eul|9g̾;:{ƻ8TPE@P@qYKzSF52cKC+U˿}5=a|?s\D;^5u?-ZIu =o<zwG$_{*Kk^Gq̹kf̹;UttU§~po6}`-'rT;d žu߸Ң.U/Zּ.YA=$~>ˊKΙ$KlܽǴX椉Φ{h9eu Gv؂sNIn:IfE>™stEseGK}=n؈-}}G[1>bOªEN oohtSE@P 'ĒÄGo:P JaC/Z}G^?r;[ @oA;_$R66N[64wsO?0G9^CM=shҤ3;q崙:0̝B:IwƿTj&7-V'K_8}lgY7hĹ8ژ9 uKVB!=+"(@O.:JBi Q5dBtQjVt+/8rd{%:`I6)4=!%a={#3twgY#_3w\_|‰vȋ9(:XnCeIWn.t(C[i}1`=|X}m}_ L G>3y䰊byeť8TW+AlW􁔢668 a 0bl7|[bŚ63!ݿ`H ;/}qСcß]]!<(d;IMd6/6uޚ>3iDmlzGrւ("(@"):~s'/^&!:vGΚ3():EtV{~膳i_|eW*hDݤzkH/XD~QVw׍}@tL5G[;n8Ƙ6z'H$ɥ#&w!j`&c*SpDlekf@d,J"0tT8g 1Abղ/\|amɕbY_檙)H4mec=&R) kkvC˫~͍*ToLsd>L`%d@Ϭ|LS]MeyQ7P@c4ioWG)"('1N^ry}Cs!W6Zn6d:Ki݇\sC~E`m.kA\/ktwJ)u_3}:ڑC+K}zڃHLǙX ruC|pTʏc?->hWFh=R,=gܸ|.f g]>lNn%9ckG_A6nFtV)=VPE@PHgϛ}YМz6|W4 vEM5D^U * D>>קfzŪ3LSoDWtf}Gc NkK›lӠZ 4Q]X_ہ. w׷*"|]]'z+W{EU~)#ff0#EX\oe ߗ6s|8Xt9syQ: `EFFR2y96*zQo\{vsFW8gȞP3Di!:ֵ.Wm2*:*G c͌.]u]$dVϢcQ>MSt!)bǤ$#nAn#ڟ ǟ2k+VXa,!)r)^`wKW,w‰TpA"scEkaG^53y:x#R |,s^UD!r!*TJY:e"fTo.9ǮLAo1T,:yŴ8uJVё4qwDGq8]t耈Y8St``)W1}WJ9?+gۯY*壼^"fl|+* 2ߠ@s,p{WX"D9Es2,\,:'C^p!) /^ssͩ(0F0v?ȒPgLu? yʕn6mj ,\tΝ'R vE@PN9Myj(!Oe7 mVig[Wdbx8KSg.,2WEG,'ich )I?^t.rc$9y -K;C*:RZXj 2rĸa`L YzbP5 ^s37"("MЃ̜Q6g KY&#O)d&v~ϙsdR8(6NJ/} 0D|3]tzʆL1 b %)1*P '!竦O-/.vt(P4n#wظ5;@-ڎ"("( P`4q,DT%Efgufѕ0QJ_GEG5tDsp,Kې G(:VϘZq\S3*ҥkf\C5s팴.`lLr ,[;Evo̪xX(#'=ksǍ.1dtyQC>tVJi GN]8Xf֔Dx&Nt& %:gK3jdv/#2(bobXqTnm޺)"(?{u oE.zeu;Kb[~rrcK<'Nww[-K$TDoΙ].v@ݙ{{!06%J9**Fg&[`S̊찅4Q͍3L)N;eIQМܿa7}޶fA\f'cJ8&ap) k=gl:xșxO70 C0 FG8au`tUr,ͨF)MӚ=]дEXX9Fb cBs%3!q0:U8K?rs] 7c)ehU3x~tNOUX2hKGX(Kc9"4G̚Tiߌ55'Dt KU|%b0|%eL.uu4}~gct  " _2ENlk2 !]c4@n<M`l`t )?1 C0 C`d4E2qX;%Ҡ 6%[`0bdP¤{NT$7x$t(>yy=2:\[Z=K#8B5)9O@sJqPh<= gȟ#fck!`!05:{mt4ot{nCXjD~| ktx8J؂Q[$cL@ Z[ +^Ǫ`#C[oh8?ۈXςyc-u 5UHS̩gZ=07z6[b&dor{8 5+yUhx3~8~pjhu_$U!'>hcJ^ a Kyny<d!=B9a缴"T28S)q7gEf;DJ1QP6"Z7R2JͽxZ eمm``,5WCs[VA47+9)1fw@q7dCu%:GRr,"`FGu~9TVs'kQp2AW`,뉦6zݑqbx0ςʐ_8,0ؙcGAD"Hׅ)-1c qJIatAy(MJ2\K -4-n~ d$ARX%ZB%SN ՆdвT:d?!q@;f!`E !$ HD7PS0 ڜ(u6)Nɐl{Jl*!jp _ +.x}+>1k7|B)1X6!ȇ44<< R>SQ˨fJA.Jw8F|A"mcU|=LC0 C8dtIo)Ae F(ct3"{1:t3:(mʽ@>D$ct@N7:4dFU6+$ǻ tVz\?YT 1D0Nd2|zҾ3k8[R˂t07=jN<;m~(Ի.uVͨc??%d+y,'r5{u P<٦o+0 CF@՝}SxOҽ} ٱqIĞT*2cXM gCH8$^_y.&z8X^9%r8ΓS@!`A ctx 8T#:v};D34.әxpjoﳕf!p#@b$FvܻU_@IDATf ` ԥeCoB4{Q_UTA'_Èa- oi>z&Ď39Tt̙^LLRp\sM!n*<ʵ C0 C(EFDѱ㨷FD'1T8cXplMtY>v{mQ#ގ\3:&Zzߠl_e+?U}@G;-pECaYWHIT33p@3!D// ec8޴w,w,95\2ND!)xl!`!`CvNt~!%aJ C.;xt%>}CظJsEدg QL)%=^*ɚKԍCݧ{6N:.Jn} l0 C0\ZNx9L\!E>!CIQ`+~xSX5?M {$y@ftx8fqwL+=,dVyYGy342[.t0=%RI;*d8 :zh1F6ݽT 5RV]~@ߦɓ(J78~ C0 C{>ʋ\1ʹ'Sn飝Zoᗽ 6* D"e/\/(({go xҾxBɡHV|?T8HzǼv@{NX .Nq0 C0 8#1:XnA8aF  a>ȁ\}FNϩKYbtօZ=ftէ iWIx穾iq!>i)VL$Nto8"9 \=A-ǻ9*V{o%pԦd*r2tC0 Cȏ=O?ҿ؋Brt߳OްHDW^TRzI@,'j@ǩ,%Fu[5<{u mMr C0 C`)HQ, sE1' "Jӿ2:\X,+ar!nK  3WÐӏO?cːt'doϏ|S)_*OZ1Kbc_:_.cڐHR)1"(c Խ'8} &G;wF}eRwPBq^۸ءERǞ<_) dWɽY֗/J0 C0dnTA1AB3|nO-5IU8>gl˲q+g@Jaʹ 'pHN%R:Kq&o`!`=0wS{#e6S}& )MR2]?8YXϲbIl) ?0x4o=|FY"y~R>5Tϡj\.|Xx_4zhD24Ot C0 CFYOn;FK NO8p3@5:P|ܑ<}Ol5: 1:Eʚx(&FGW׷y̚7#ϔD5qCDԱ5rM"yčPf+qA8<$30𵻿UΔdގb _i/$2-qtREkcَ%vL:E9OǓ' ":ΚqՊ(VƔ+v!o^xs)~]}0v$Fފ5ILew?rDww̓)uxM0 C0C 9ro>+ Y~)|8ÊN34'PZƻo36NLk~7n!;cC[xדlض~wPbK8P 1XTNï epEbqa@񱢎sZC0 C%$2pɿ{u;F 1:(QƉ#t^ѭFpTѡ F1gr\O<˩ObtijYbto_H q{]q1Q3GG"jz;?06=ԩ|ޟ=3b%!sonJ='nA@7">V Ch|\'6C0 C(% c|o;xiKD:.a djJ-&)TQ@J)Gf.w*@U gfoʈ iLDBߘ@)dPH ۞/(xףJ(1p'jg(_r/-\S%U{J娳G~G6Neck'!` +1;o!jZ\trX8#i /w>.5:x!3:Jv?v/8S/4yڨcG}T_$MzHgՋК"ZQ빦Sfۈ<{:~ MFR=+I2D6gPXk0"y#< Q>9 z%~xSϭĩC'8,zx R덦{rdfkxqUhJ~'vjUWU?D_=h_4 YDEɡѤ>\ 'bMol!ق- 0 Cnl8 U I}أ>M3Է&9cEcqe /%_UɡDj:d0aba:ۛb'{G67+Q$aՓi`WR[F`|`;3:F;ё3p̿1& @88XyC(rY3:&Ztߩ2:Hã W#|]G7WWk 'zN)wo%59!D]TCR/}偷W.޶C[T 4M +N$;{_Sc4pXAr  s4g^1n3%BNTvm苜n5=x}??NIUrƐX쩤]'Kovn.59z]?seH?qfiy!,7W C0 31Sb&CkVF2ʾNhpcd.'FZ؂#wٓD88FB$îN$cxewǖp=uܟ%͉)B)a3P1{/?0u)3k*a/@.p;hN'fr \-Ml*8G'eѩᲖ32-!(L*B8_ԆmsZZkjT?z(@ pbN,Ld0XftNt<ǼѸ?LUĠ]G67VnRZSY|t* ѽCx/FCGu-BOި:#Ue!-br]t.a_ۿM5yms5#WұX?r{Tɥ蚑")lABhX5^[p2 =AS 6> 6&oY먱Bx<==gHL¨s8sFy 6JנĴhyayABҧ]O75m0:4% 6(Z J,YhY u_2DhZ^Q2^.pG6>xjskm!p.h\li`ax!ϵ}!`!`Uw@QQ/%IQB(>6mCl Ew>5:@v>Ё@OXSctĹLk@:Ed:UN>gJkliFǼS3FG,~/RnˠĂFD|F<;On}Bv.5HMЉ{1FLǢ7c*L/,P=AnD1ފl)> } &C4w|G>y2PU #)4z|. T88*^<\\|wt4\Է*o!`>[€n-"}^Rⰿ"Cp97쵱,3ۜBd(ebNC4258G:?/wEkDř3@hFN r7O.?p󣙾02Ԕ352]&"p$_B@GCT ..H&bQ,e I):a-5b8p6Qjy_M!`!`C!()A@0p(Wѱ=%+3~a!1qR8yTpX!7i0:bӴ Wq׾޾"X΀L1: pT$DgD1D&ȟ 7j0Vfr3(Z0PY 3:*FÂ^ @p{k 3e$KgKWƘlBDiqn817Z7qp`w0#hl@cCNeffͲTɘ[ƛJ< ߊ0سadcdUpP1Ap4Es S3t+ XTuhcE96u!L+ 0zH?jUNo 2B%dzpʰLH,s: nm4 C(a `\ǬȤ 8JOS%PM€=yI9$83tTiƅ; MVPrVDG@'$ =,Eu/ $D=t>RS4OmFn"Rt?1 Cdnyb@s!8Ahe8Y17 c1%jJꆰq7pƊ'vZ C0 FG, O7)pb>0rXbt 0P9!ebrԖ jtdAG!C|ADEw`2:+3:JԑwOKgO*pI4[ƯtiEbi1?C╓u,5` 7"MJ kU<;#GptpyPx+4 Nq-D*+ ]"0E2\N:_G^9jag@% N$AR8:c4B JΌ *ye4M*%\gPai},3P %(BG kJI^B6_ a+Y\Wҙ@t_, T Y\撛$j4 CxJH@PII-|@L!ȳtzm0Y17RJMgzY4/BSp6‡ITfƱ\Eb%.N Yd‡!2ۈ9QRd 4L㡄L(I" %iq&16 0H)MՌQ6|XS1dRC#e(6Y h6&' JƊ35 C0 FGLǹxitjt z6$06@xUj‰/ht0#^A#RPzA 7eFcYѡɵb5:2 7ci@琎k|}g͙j;F0v@H"Yevb?T#- )K5KDC2~1A,.L;1k4ދ$ A_ :!8G\DocV 5 ז9,U&`# N"K GZr>x>" UT%^9ljN(bB7 DùL2 ef2"Jpj ~eIsM>V&,.) u9NbU2 C0&Eل_#^[7e-s5*zhqiE3PPbgvBQV,Ti, ,l|0dS`6KhCKU Ir0x8SE%hZ8"Q"ucTr54K3 Uʅ:F. QE5S%i>՘V6&b0., +cI"y9@$F1VOB5I@e؋j|9_Ƣt[K*\[ôչr#JOsqK<\Ϊwi٠FC0 @@@MIhK#{7H!MTa)MRbElĹٓJ)`6L gV$ %DR=S3ΌJ( A+h#@N -Xd,"4 g"Eg8P3gfif܋ eBȳlUB\x6;i"89d+*i3 C0>0:0օ"8.(HO d2IT5m1:H45:ftEYzn>8 ~ƫ&Wk!>am15qP_`Ҋ\{:tWHSI6e}~JdL`S t%KcE3Vp8rcNx+rii\ cK)\ J ɇstA0uK9qb4Cqpm끺j8^leB:0Kl:D.ԛQf4t.SMrC0 ĵp$b'HӄGFơ&I)~s@3V Nй#Mzm-*[x)iBk3*Gg*ADP*#eKHÏ#iD"BA;@{, ~9~Ke vt&'5p{ŧ4XXf`ʊ!TAdEaa㚻W,Srk!`!0x=wȓrBB cсFF5:d`$hL5:*XBftx1V q,XxduuA704J3ITwpi@MӮ3 $T1`JFňj nƈjĪ-/1|DLxI谓A/2Z;g\r7MF6t!r#E-2D՛u 5+(Md!`#084FѰ4?87C(ydO %e TPS4̍R /3wB]c!aHg`/Gt8ƪ3-`2%F^}X8Ssr{ƖqIRb(hz3RX1 S++Z'U4f)P606r7s"8[YqFt!`!`a9ab,DgdtyقFY=%R!& 'ѐ!ܠ3_ TO*BP<_Pr=3G@ C0 Lq&/qvfElnM+@"y)b Q) F c̨ H2h]2D|46~v垚&E+ =&e€4& P%w-/ȽP킞S2j'ΥˊgXqN`L>_i<\[k C0 C`#:ktu=F,3:&Lht$anetVLZ5:dOL#jFdV"n"h1ݖ q2)qR]c:MgX拣 b,ɓ?JvAEc4H2Id8ADᭀ#")WྰA49ޜa;a{s̀gcÐ͙6aw 7p8>R[O-<+W=t8AFrcnswdEef1hUrVLfdž!`!P ^]tJM!dR @PYUНPfakS4$lUbl,*.ƅ !*{\4Ks s9 Qɡ$ :97P R aY~Jf<_#q>_Y6>GF~5 C0 C4#CNu"2WZс09]\5!3:D2X4* 7vh(ojAi<^g|ȌءE߼ⰍIT ! &SL%ne&DJt>S˙%֯ 2Z2%t5Kɒk##*oF8Cs$UEɡrqz!Z C0 CxR,]66Ĺim/E-ekgEk'E(!%0t0%&g X… #,!ώ7HIM i.EGĠe&PbvW|sir2"^sw+C0 C0&w1 A/比LX`f@i1f?pZ =΅͌ C#W?b耽C+[ڌ[ xh7c/ vopY#z< J/p:D\#CL,vV4iV d9cWP+ʔ o8'l+K+rRCʞ@ˆZd-R4atV@XJ4 8bEFhzWi5yܜ0OD Z B !."zr,~dV+DȺ(/o2-s Rd{"TRLt{ VE[htʯL !2h<\ C0 ChJl%a 1Lf.!CDO "Cp i8I%H- pa&JJYh=P^X9* 4³E 3a=E.)1ؔSm9qG>To̹ݥ]ߛd<3'P4 fEQSE4BGR4^% wƶgX15\~.N h?!`!p)ht"`mdm`Aft!͌ԗz~=xnQQaPv4mDW;dt2Zי';4JR|!'3jNsF I8 +%QwGt Q1nxF1Fe II7J a%㗬`1{Gzw7')EC&,R4ʄ{Dmlihvy[M/yy&?[d:\=h\*:pth6ٺG%63 /8Pq7HFHBݤs'"|\^G 8zҥ,"VBUT>| -Bf{C0 C(&U`W^b+$M8g.%-DF"!\` ;SH8 p>dipn)>PbBPb8 < {(!(Y@2A7Dn&s1jH&TʼnFq\LR*کՌ`\@B4^l$C@ :qћE)K>9@-l)Dg47^r紶UU'c;zf'n̸PT:8 WZnym 55Xdo#۹;diru?m;m{/#U/Z8w8®]lK$PEقh*^Iʊ+V.pEӦ5»߿Xݻ޶m e>\M谗O>A F =/jk>Yכ\lK,>g``v~bfcI:N!V6C0 C F_W/Xe˖ΜX E#`¯Ԗ-ݧP&`T#z[zmrB!HJ!b (C!9a5Ɨ5szs@4r?yCG"'౱qGƉ3_u eU4rS۶ (8 2ٓ c4mSKWϝ6^SI6~sۡoRy*$il|攦V.?oSk8|Yj4cްֆWXdgoώÇAş5lU_6H6q;۾=@H%h%6@#(ˊc`W\F6>}Zsm-ǎH6u lie| x6>so!`!pZjtѱ|ٲ38p>e.TpsA`yqI .(qe3g8g,r'm!{:Эe<7ctRFs̓QW]O06ݓOtFpo`t ktv@^cѣ/$B̄F1:$%!cFG!5d[zݰ:ڪ ӧ6=;ȯzEz $X+)[OQdx0m!)t- ކpă?}=Ru|! *zLg໏^H?ߺxKg/&?x쑻z<OHà /D#Y!~BQ\+fϼo=|\V ٧/:%j5)w8C S"'@8q b7>X;NR [@t60 #7ۗ]\WWt,xӋ//hV@~Qrl_!` 奍5 Y--y/Üoÿ/SɉQ3 3 N?3TtuE\7^pڴ;ȯ~%a$h=G!])/nn9Do9{y7ztOtӏIix6.@Il bBlogX2p;n5k` m 3{֝o >eG'1xKaj_ra{/BB@VG#,}Ǐ!l%-۾4 C0 CB`(ok['Oo͇a{~C]K5:>x,ho+_nܵ!G^ctct iG!]9sfxύ7_7^ASDc} Omt{ n35+at\|وFsw؍%xՅ] mtHJ9ׯ+dttx):5:Mk.~I(dE/-.[,FHd``k]w@+mX0`[즽;Gqd:LH2Um.u1dnmU{%v9w}(7-`ђ{uV4 4|6xܓ s'1j=\3F@IDAT3OR Xt]fҹE0nc oC^LB1~}?xh9F]03tfP"[o㖛0,Q Lc_' 4ʌ"z\k$C|kV>pGww|%C?TWWWUUUVVVTTe V C0 8Q7/bx|=-=u;EvEQb*wzbD{;(cǕϛ?nޢ*m?O.8e%3ڿ~.*0+zvnϴcaZ׬QXשyueb8 CC6&6Hl|J]_=BrG잟>+6^WU'ym\] 'q _mFG.LWZYo;ng x7E4+f-飷q-OiorK8|1-*DQiUa N?0l)cLq{/wc|6uuu9v?YM 2MguC㨄{̳Ԍ޸vO> kaѺ.F \ A9-1.EK_X=onQvl- aZ.mpRV+fٗpe+Vok}~k3Bȴ":`iѡons7=+SH"̝Η1Z) 9MEs wk3jwb4sܱ!@#[tx4`tYCD;}7;gͽvyzm 6ZHm 鹕a;n*Ld4uPi!`L4@tb97̰\o'B3b(nд+r?x븲Xq:!{h˾ߟ,Wko?{jCe[֝w?=H!iqT|qTeKϏ0||hdqM{ g87w^s3Ssf)*WXUf*kV_p0t.Jqi,p5ϥxkcݏߺbUQN;w⋗,fǦ8;_&k%&"!`A`λ]q yo6 6njt|7cVF斛_t!1[1H4.(耽ӹcPYC?!VOa,J#踁FGl=+EP˖/KWUlڷuaz+_hɒۚ*\q9Ξ:][`t !Xˊ(t^/Zŧg6b_,8%| \>k[_DQWheCHǜ+'ɈRϙ:% Y̖.}r U;#Weh 8]P§ )=D"P]s2CBB?̧^-ȃںkW}fˈU;\ϔ#Yz!`'X `x)kW~hSJ8qt9=vS)Q?}moWl^H#'qPըGon{f[;dD{v=“}pBjMA.8o3Ս+-^ۿcR>6јJ} B\9 jFnrظ֊CfJY.%v[ WϝX)-6kY9lL\` k]р BA絵Wu >Ī;*mvN-Ƨ6=c5>"Z/[xql)|FE"l!`xnt|#}G:W1:vhggX >wo}sFGE( CG;it~N*7xHFǮ?c0:.[?ڳw#m_xE?VA0:*CXCрå.qew} -k,~jFĪՄ-ZQ*!+% tE5Nlʧ 2:Ddz2ft Ytߊ;A^q  xY\dփۺq|LkCV/7Y0Mڅ8uL=t=㵥]#YW@9 "]OZp.ݒ3FّCTwQ*}Y`zۡJzP~gGvϹ/붦(=sJ[[cæHS/^h7n߱{]WUDDw?iѴlhۋF5 w[XpWJރ>Y (6Xڇ<#Bh7>z{I^]Yu,&8TJvH̴ %Xڅ C0`6%zo~lp!ekb$>r(Ver c ɔC9F1`lq89lV#KMU|#qոe,Z🟾R+.IDKO>W[Y96ы;F3:N]c/qjFǔWnQá1lB Kg_|Y Gq v|G7:*A_3ob~bt@ftxO7evAӅmOCㅵz'l@E}w7x-ώC5n\".JDC0* utϬ "ұL_Rgz޲w4g(1 r/?'U+f-~xkWޗBeO).n_hZpڜ]:N19͖M$*]A y ŭƭeϘ;v\ 2̀uiwԛn+^`ߴ7UWڡ\Heqעw6#_K ?qWm>o8Y=Zf!p#Wl!po|vtc ͚6B_K͎/;<6\=w[F9-&FBnol>jKff& !'Uύu^3o/19S6Y0Ow}1NT9m={b9^M{.&Hp6't0Ckgc  5xy*0.?[}e , !ߎû8oPVu` Ti!`# ¡[FKa O0:Μtѡg %J{X:cVsaF%Ont hz>S3x-Ds/{j3wlhFVc+~Smч$#XOILq0cnq |"pa^+чo~kcOw'J5:}UcfLt8`iۢNnnŢ刞0%L<2ё͌a-P}oEA2~1 ~3gv ;vxQd:T}S+0+ |2EcƚlF<t;-+M?y o2E{*ҵbԁ.*։q =3݇>nT3=}zB(H;.; 8Uis_ܽ1v?.hfk+w0=u[Owd*. eæ Vlo!p#Wr(FO̘2L5FN<$䐅I, M)"kK~l?rY]WUtGd#DEse0[,[Zpe}M%t?o]Lѡ`hgN&!`e8kd{e2Ek6>Zh\N6l_ 3*)l>omKf۰mCR&J;N hܶjMDF@qA;ʻv!`!`8|{,aB7gw6_ZXY|h̙,jb/.\&4:+,[nyBe=ƦJ4:>p"E: VόhtZ9!׮[R⿇ Pma/ e`ѱnܿX@}u"P]ᯮh`NO;:O-S:g^WPc|jki552W&|c>(&Bj-PS4T {7^W~)e A^{-hcVW]Y8! wm_rü׼aFFX0 C8Drteruѻi-UITzq97A}μ9v-pߐ/Ϝ+./G{%.91q4s׽ѽ5V-1}bʑ^;mEKrXA$s](?rŊuᥕyظPbyTڪνrBMq趲q$+*ʖ 7gظ<_ظ Bl|C0 C\5<)ܴ5:jtT'\X3ouRv͕S3:t̖2gqy gbt4TW~#O+|Of,hn\C#2:Z^bmCF'TyםGCl⌎ ˁZŤ7 7  Q>R ̓gROKVB4Cg;.ȓwD#xk:,>A/%V( N<&Nu9G.qUZ1ĉї,[h9tم 5EOR!1 hiS/Yqi5<*|$t*򾖎YowSmM^s_|'</ξj&@09po]r{mkm jFH~f8̭9+77w TB% Dĩe!`!`)1NR}WzUs1|X) 赙a$e#WxA`JeNe6&䢊=p0 6Ysظ phyݲ~ms]ݐB'nʼn@6. Ӂ)˗/"k6N,qhpᅌqTxeC8ƵC- jZCte8N q594V<6 C0 Cshkl[9gQ '| 0 tw]zFDzuʁ1FF[-!Fǭ:b cECGʩ]kt!3hW58G4:``6ԕgn/Z23\L ^,&+IM#*nE!`!P"Fٳj)5:K]~w{ eltplo^v'0Ln܌)TZt Hc̿zDǑ# C/5:< `zEfGrXi(cn-P=nvD\m몚t$x*16}sd)hnd``xZss"u~1ȣqT  ,t  j^} t4'T0 I:\7K_$*?ypj!S톗)'9T[@JEE!D>"?nkM#@;:hf肤^>aJh5E^')47K^c]*4) xI"RW.#3w6C0 CzM!-p]613b0 DB) kF.,ė/1i WECC:PQ6>٫Uxp)^ĂA,S"H7ۇ˫,P^;HfsHs]P,V#'atE8N0T R~3H!ެ[ƚ=x"])025DZT[I7`h2@@8YkK%DWD0R%AhvVbs@#(ttFܫ@;US >bP}D` S8\tMe5fA&DӼҕHyܗd>D Q@ еh1!ӗMY!yl2NjOx_/;0 C0 aDJ%V!j0Cu / ǔ-fǍMgHxoƓj06:Nl+F>)3wUyԺl| qM%L0p)dT8{ "G3}S)xǢka$Fe㞷:\HZԔ0AT59l<6aIxm3 C0 CuG$ctxVɩ5:*htCAFjoq@:܄#rC|S}jt7;:耩PS[]rי脛ps`bE*}vlKO-AZu,'Y%K3LH@ r 9NϩsgKAߙ>usH@q;K$ ":GNSHsXF2"ixaSCm^ `q{[V;H+YM3MmDGSÛ@<34crwY z<3-nFy m+7Pn4 fȏ"Rcq9r|b58`xJ $K 9y"% 60U@8Ώ`F$%2-1&țM‚Y pkEiY <_hvQB hux#,y9'+AvT!Y,E"PDHJޓ[RUC@i)U^<ƥ ظh*l\a5r8)1t2l47Є bظ<=#OCẊBq褄$^6TE@͌03RȲqfT}*Txk Ht&UhX,E\kMܔ* ]LqS*y̑ck7 Q -1Kl DG7tPT*Sʜȁ42;dOj֑A F3ȊrCVt45lV4{<Ly_nN" W/,"Nlex"E)I2y|<;'tW0-qM#(c(.;*22hbRkަ; |gҔLB ua(2*ZbMS+5Nl:fDIbָ1K24kLhjA:kH#(t^Sak KPCrYe.ڳY,EMNL8h^H'ѓ쵕& Gg37tIc$ fX[Ӵ#TRbdŽ!jEReMٸ u>!$Om0/Ͳqk(ax>n09Li(fK: D/Y׬h}6.C\46Tp|c 7'X,E~.H+:UF+:@# f4La7(Ξ+kxt5) C@$n샊qChӦ8Zt?̟RcuJ9̿hXzG,h?VY-*ɦT*"mLZx@-Sr(twˋMT_$`/i)޽ёޯ#IuHwgMJyǃT<"a))j!pdfZ_pS`sXzF,FHVJVFH7k:n5<@8U4>.v5®ܩ ڜ?[g`M'Yp֜ jh֙֙:6c! | T@&]#}f GSC7BQfjܼL41]#jUlfX,7+77t 7pl^H;nB$Q!I`]#ÍkM640`& zGXLE3X7 NRa.?U~ҽc# 4-l||' t4gsl4X$4sQx)5 KfhZuYmH@SJlsNEdxqQK<7,E"`ԁ+:@.4ZtDbԀD ]N':n:ĄpH÷A$H^:45ꀮO)yAx7>V?8@dzE^8:ON"hFp =]S3u" Fi^qeY,E"`,, GK"侊EG#ȻHIr7?AVOErcuq%4W$:}(:E6O$.V @EoX%>ߐ8@1:Ţø/:bPt *-:ং@At020O`@źV;mN!`s:j(jD ;]x3_ EXGT:>:} 'Ѽ~̹>9Ԡ%&Lw5OU\5<}fe~025]y8A,xЫeT0s5?5(MTx%w;S'F.3؟[,Ë́#c WW_n1o"XL4h(a*6^/<><5Q,Z">;S;2YCWΜ䕏e㕏ķxÍd3Zt2 ģyu]AXB{E"`X,K#FP OB0D¬ÝH4dt'*:FV_`Ty%/3((@.ǻ/j6) gwdj&Ş=rW8x4'{XɺƇs6|1S^bls LL[DRxDECvC/8I}L4D2FDG̋<\(;,Iٰ8׬ ;48_Vi©qiGbs8-V':cuVthcs)8>с^z.m.-:Rins SQ0zԻ^oΩPo.8Lg)I=C'b899sK&F8}CɩiZ_R#LD:,4龮JT*7[]$^z{( 64O{1:Mg&Stvպz-=NkE g='}v Q ..[A6V}w w! (*]LK|,l3S`9u:cBI/ve3cp)%Sᾱ=IL$B?+:) B;sYt:)tWIV~cTT^&sYOMDсFϩс!#q,Dt0b9]]Ӽ):D=w휽iXp9/gi 69U3tSǃ۳yzq*ޙI)L{ucdz5{(o%-A{|.gQA=O:[33<<:}Z0fKr i":'(:(`K4c/F8VGMcxWŎ r"**y+:C\@gtp6c:'P :8È:8[ 9xmW_Gq==#"cd&p^"-x⭓ĆISo&ZLcir/xaw%- )SL @IDATK4J܍&Aq9;N>%D%/xye3uNd~ 85<5qXOTSgB^rfu%52@*=N5\9*yFLZZNAJ{TqLuDb%ɴ9LK\P/̡qM RX9`k5<0Xetd;23*qY[^ٸfX,@0Ɨѫ>y_~8$ u }? R(9kshP1t!{Ŀ>s?Slod"4ƅ0^H adI&w?n#?8L !Z6-@ȰX]Ɵv8.gٸoXIshh060N0ϗM~oSwo"8rkr-< >0 2x&MJ]t8f ^Ȋ !b~Ѯ[^Rl'M>26}NLd`EL1cDxmìU0CnnNy˶kZ*cǟ`"O4ߝD(3!#&H`.q^v̼0W\|mC_!$waH<ֵv"1J( O š~6oo3`o>tA_Pt}hX\ι>\FsȚD],[l~g X+vX,r j :|]vS9;p>\JXc`h H` HBRG ^JM4ӥ AAzC7m鬒w܏r8HXț|ɗ3hc(q#7<5?}˶kow@!YWdZ4dpc@ml<|h8ɡŴQ@R6r(12qhOtykcS6.$ l< 奨k&G~_lw/v85j8"iujݦW_8r*xk\6^9[8y30iud*p,N>Wu:l\9/1'oRж[,E"PVu>Ot41DqDGG:Yt$. ݇`#^Q}BtDl@dc-W(: KޙYt ܼX|E1RIp*OMt vܲZEcÓ'EG_x萬mh{Cɞ7oCt³ D;JH0H$cHܰr^rE eE%["NuN`.W\ܮ'eE&DUkcRK r-g|n՗" YN hZ4 M =i庥 VtDCS1iz;26uA"PLA'Gp%uo24~Ⱥe+W.^YPkР&kq]<":f>Wip J˜yD7 <`k&{ɵCb0!8DNr ǒ:,naņjL=#akhX |Z*lulgPĉ|ޕxckwM(ь) c;&0_XW2IP6صKxb[Woi7h: ?90tQ0 2P,5@ RLsN R֎֖ر5[ďzvGE9^䄑:9%|)zlľc:3ؼrKḳ"05jhⅎ0fCCĻlnHN/1i,EM)1HVo\8oMv =/ "."toU)a Ē,'#U^:<5zͫ-?3Ƨ$HV$lA+CT;FITƃG/ް|ՊEUq,u5ThHɡqR#+C+f7_ÝW-^viU ñC0MFQ4q24 b(/&"d7,__AmjMWƏvħƛ,lc{"H &8Ȁ9]A%*wDM`X,HVc'8|d{F{:jL=R :HMT\ƧJ`vF149zͫ/ߑOP!.-I䋎cGStT5IDSap`(BAd(EǃCVVt49])Ot1@܁%W':GNWIс vDtooo^Qc'>dE;2d @E!&\|с9r18J^WSVW+:&v=oEnj7MT_:rZGr1C,/b$*yH"r)1NHk#E/d&NLO<>8y0c.CDMⶅơ8WRzD*vh-,D>?7bܐDRSd/ܶ4:Hl0 R7V#IwsK//9 QPBFwܑᵱ˩L4b%AdXssV5>;pLy 7KbA]c}CuBZ'`H )z3>Ȍj3#C4,Ⱥl Otji.]\(|gI@;#Q NIXM'ENJ8ٙ/H;skߛrX|td1"x-5+k"e Qچqr/%jKM |5-OLN=DPHB1I."CI N3`"E NtO/ײD206}>. mZN#:%絉-EM)b^޽B <}y'63<3xS3ĒY)Yd.A S8'#)qx/j/Sxf<=+4S^C@4!}XK A3KT# ڑ)/<50w&3I>mɂexgKqkWuD0 U6~n̙-MK 6;8\8F$5`̟]a!' 0lSxkoق #O"  9psC@6lO4{Fvo-XRfe4>:<&R#80鵰q2GGAŁy2KyaMnpW3L+b6n>sfI'R20&Kbk?X,EV+: 'T/:0P2X+#:4>Z$:B;[}IIY4SS,4":6s(:(DDǼvdJ,"#)p@MC7$9@v=?B0.NT+: G]":*-q%RYѡEPɞCMe 7KhAt<=tIѡ^S2碃I5PAtu:ѱt֒|9||Z4miJ57y Oݷt~ێ5-[,&FQpHD$rډBIt\^.*y>~(^{ts w]#C{xǶݼaن% 5zcHV]La1I0mN~p<(` A$pDV^#? '&vOn]96(yJcX0ҍ)΀~iڌb&UC\l~q=V4޼м<|"<&d >yOpWnF1C#x0KLDZ~((Ĉ sV G0SAKn h`-qVFv7\eզ W4Cb<F+C2sH*_ $Emg  =~p%upq5c{_x׫k.ߴb˲+: E0 &Z6*-yqaR(31/C1HwfX,@Ymr}/{Dҫ0^O;{TϑKl_u -l7&±Pk&  $Q1I5hzFfN$ 1Iß`&,F3P牎+n6> %ظBRSrMdqO"&l{S߰hHN_`ގ5[,[h"Pb'HNGb#hC`DOr:j7`x) ߲n:'A/A aI6ADx /u8t`P&;l0C]w >CK}7brI b"k&l5 L%tq'ݿs'ްl|qTV8 F{rٸKܢ%^[bhy,om@3%&˱qʐ\dwxqJd 07 ?{}l^luXb<C\M4lGYQ^`8O6v KqM3^j8 }9, 5=6a8`8Q;ψio6nL+o!Y%9iu9QF-nJ"6~{\}l)[(a/`ÄjJITty镍 Q`dl.O4:wpYظ43R'qn{`lPr1{CpQ~(k@_qe`"`ciƇ'x6Ԗl<53Xl\54xq MSlh`HMWҔS@8l"M"`X,G"Tu(q!i#C2EYd)c8@tx8PYVt$N^@/+):`}F~V%-W;&':fL(xX蠲fS*+: mZc lF.~Ld*OF,)jy1zc6Z'r6宋>Ftgq>&63#\pa l,VGK1Z! f8I?hi{&[ɑcpFň$/5R(,%}cx15C$NwXtQ\Ӗ0*\2(7M YqDn\PFBᎾ9*|xnKfluV҃d7eKzO]Ee@T5~S$whq@<0h-Q9Odpư;@d/&6pg`\ @Ƈ2sQiZ"p<x~1A _yĴTtb@p!i4~K=pr"D30(#`w&Hj p$H7fQ44Y[R,%|(vMHNaԄ}X,E":Z)1q04,}~/:q[ѷck#1`k#*lXFgӀpX- 0`!%X OC'8y.CDu 6R*аq3vK砻B9:cu%&/U!Gx!Q̪&1^c*l\sդ&}X]! lPHZ(*ձqcZ78h a4lQZ˲qN$uP8HZV@Њ Q6) ֖f2>4if:B ;|8'G^)-`iӠѐHB Bx3js]%^\hZ ¨k)\6Wjٸ 8̡9Nײ⊷?E"`X, D C(YPU~K5U>F' 2RbHtCC":tU)4iD5 H'Cwj5pfgJ$H\)aZ%L; Ne`Xx19s84`aLŀ, "y˜. L,k̍@5Y/pc#5_]4y)k#é4Ia09'ܗ>S6aPbƀZ[r:iV\ bҶ9SC#G(Q/P"5ӌ_:$0̂I $*0SIc`AX_Twv*$ Bmb=#B b"~yb)\rb˼"N],%In@f8{uH%$,1dk`4J-Lө@Aq$ J1WKe Q9ne(LX8V&)y[hVE"`TFChT&Xܲw@E"`X,RQ TCAP 0̪"fCgI #+:4hE`xQ @tKҢ.,ڬ 8!za"ёDTGp :rX(U=7 R*!:cZTIlDԒ F#.PhDjRqfrRM %ZW1`E*덾D%\øA`C Nq1~f. ղ*2.stfs/Y:%%e|J"DŠcÝw,2h3'*ߑ^׊ōiRe^ LpB?! ǎ􎉃厉'#GSHJƑIL 1+>@8#o[ .(PcҌG̔$MM\I{ :4{)2$/HfK&Ŵȳa;f?1M\Sidd}tM#}˝5YU5=QfǠlq~]s5$o rf,&2뚾08RN*}N"guW6 sXKKӴM)F@ ; 6;`{C3S h2RrP'ͨ(?f:a\fW};w-ΛёH gu)rL[ /+WX]^\w#\Vđ7ؖ"`Xa8zo"L`G8&>@*vJ`RȊe1|6ؔI}4T'l\y]62l\2Uqr3Y'kZ QdATc.7.MT !nN4p(A5c.M,7K16%!R֜a/|nrt8X Fږ&O &Rn<-´GVV4=4^NB14s1(N3h!tj"\b#hyYzCy(_ 8NrjLPd1YaP$qs;J% oN6|8~hZfNv V8XpϬ+6E8)GC ɜr"kzhʻ fP̩n > rqE>#4j^T&eKY,36 kp儰.@p7pth̑QqB;c y 7!hڍ;sHd튯edCk vqqaL.1SiWiTMYjku>tnE"`̌@>%6t % 3LF1l6 peЏ+=C#q<^Vl4e1>66&6\A_‘2I JB ca,vT:'9r9R>G$iUPbH*q<]HVidXw( w"QఞkZY )1El ʊƅlqb6.4gwmGyZq5#ex)qUlcyܡ>%)x2/wNZ `>T9-càXd)iӔȨ"(iDpfFpPN,/:%X7z5&. 0\Dky('^L`l)q@$xiYgv#a׹_)Ne@vyS$uA>2Tnqoa]p H٦f rG],0iS-Hh_Ҵ .-0/pi©Q3(!kZB@PbֲtNL؛.*/RA l seCH$7qNL y3?sdNJƼv :ÜE"`T a#=%ђoHOC*C#/Ū3=),9t)ti)kQB6ir|!D,'%%8ҳ2l\HYVɈL^ Ed$aI`#ٸ8n2l7]6Nۂ<'GRfdh$ ^ĹF[K%ƅ e\63q̡k( i4M^JyE2,6`oҒ<d8 +"(ajҦuҰX2[͉W6X]&K٩`E"`X,ˍ@DR>OβP|p Im+: ) 5S0'f!ld02~8c/lIK ;yBi-P!:q9Y%2C'qBal9\p3c8eHLG+f(LT/5;˚~V.I5P957x39je.t2ZRmޅB F8qbIᳺ4E"`X,9R/:&?%8Fkɓڂ"m uiE#"8* S[רzXbKt(.):rMiDZ(vvA3I8g3.Ɣ Vt́,MT_Lt/ڹqu qC]bm_q*fTG5K֍=75sy5ZᆇŘgh  4MK ?U+ r+eWE]v(鲘fG%|Y8Z ̓9O\tVK T2{"_KpYj3g6kKINR6$r c#5oFLk>T\ wjD`9ijX  q6_SnL@o "ȇtb1FekZNz IUƟ#dsL -Ƙ ז+y^OdJZW4ӼaⰀt #(t<8T%ۘTp.!쪗"`X,چn HN)nc#Z-FwLJ.[FI*)msLFMJ7U,K|Is?i3rKaZd 8G^ rgg]lɑ2 3>_BJSbP@oԥ8lהƥRbZ:8ʐ!ظƕ$gE"`X.3P,Zt@`y)#M"W`)JT Wwr钢Cf Ƥ%7DuiM+kZ+]-pl\ CMV2__`:t֜D'R6gr5bܔ} j";sYi] *"`X, plL&e(A2!;1mnٲ'q&8*VueF$]J\gY0%5=6Y;Y @`ne .}`P2B0Lz&k_&6e0Rq^j-dZsfX,E` e6 "0 q7df. jYc}؁PQJjQ`+2c-:w K^^O =)rs&`5iSD_@~)_5P[63LaF|M~?n4lRm ˼e0<ė{{R1K <ŴrFĴy WbӚ02]-3M‚Iϛ/M)1 D44<-t c"gLql cRl0g$ $潫iS.Sqf/Ȉi~Xf<}8S|״F LH,ͬ*RB̰QUVEf6-;TL"ZzeX/S2 |e'nN]E"`XBfEwq'Rb&Qw8yr-+`%jMQb.@!8O.yܤte db!͐Rt\@`C @Vhܑ&PEu>2I,vSn;u0dIYc.!aqlvNK̅PqK}_)!dMk64+gGژ9ԘFqd0=l`g_K11j i D9QEӰlidgIK b:-S3k3-7^7&o4P4kZ1$^㑍w4C$?L -x#:P>4쏭踨)D=Ƨ蘳ll:v$E&(@ ĉH^yؑqGa_x%]t:1Y]Ȁqzf4 FqVt&ni hxE4K,] 5jFXPr~Zk7\L#F1`Ufk?4=l8NXk aa_>=eeuEl OWϘFԳ䵚F͋AX(]cC4N#wjg<_`ň$}7b7E"`XVY~ڇs qxkx!E츕~zmR0qzM+u'?QUq@Ӥm@B1p}H4jr(`a x;ث4Q E5]wa+9ٸfX,E` PBt ܊/;B;Ag!:\SPo\\;?VB;z +rD`6LFpPMx2@b8^` />>v62Gi0,g^.'{<' M09l|6qbo=-LTĖUQh$$¨Ec" -' 7E"`X,sD"Y26_(4FX2Պ?DP֪Ij{3.<1M]>mP %^.f+: ~KwDeχ HY\yƍk-iknz?D0,Soف%1 X[Û)YheS-k~˖6:LjZrx/M:3̵G4N-ID6س4q+/hkI$CSwyxc <◎i AHuq44yՎ[mټrydrt:14깳FٹH x e굠Jomq۷mݲz5Lc&D0x~hpǹ\)ZhdN@̐)o.onݱ۷^d<7Ѕwt QpᲮ 3uF߸e[رc횥Hp'{4Z QvVzADuePf׾;֭]`F#ё#:u]GS]VM//]̨vpE"`X,3!^[lelZ\uu/niGbޱ݇/tD S)1ߖ~h`G6 C9siCj]lk7lP6s}cczƃјk?)d q͕oڴnROk@!U}lq˦ ˳lpcxKv[nٔ '@.`EB%o}ͫV-׆.Eo۱۶*Og&`rM_ 6~֍ob5k.X#xСS}bY,E"`;((!:ٰ~EPX"ҫ`JBB ;k,n5KPqPg сUzDNJ>L+rEGRK)WO$E?]A]mUzV"s7o슎s`Mt;3vE[ѱ)tf"@rie })izhr}/狻!`JyjOeߘ8lJd..`^Sy5kJ;귞?1ah[5" E"`XJ#enijo{mJ"E9|[=;00zjtІ>lFIR6kkL~o{ۮ$%Oxcal7\+_>}?w (Y)6.t.6%7Zc$偎yG?ZIIҪdRbeo6n-Ə^8l<Ɋ64UkV;ߺdF!p/K&t1W,5˖|CZY#gҋlʊ;߁%xK}qD ˊX,E"0g(!:~jyF=r𛻟=WJt 4͹ KBqՕEe(:c]ݹ2GҷwH>{uݵ%E{_?{~,EH-C0UEdv?VFt@GSE~ŀܓ_R cq{{Iӧz :yukŢE%Mw =E+At x{9сi":vOhlcT&`EGQ}>)oiH RX,F#H8~WWu\q/qŎj~cq&B{&L^ոqO Lwܲj{ 7Tcճ0 &'˙fV/B2j~wTcDO_<39cq##:}'.UFgs],,,z?1ߗ^4o޼֖fUފ e?X,CXB6޻gtع@4| _1vUDrcQ%K Kf ȁ}33=߶z%~)+gNC#)\6zKo/ecT Ɨ'0~v1 %p51'wxaMlSտs? 6?>*l$Re6DTb`?jX`{ï9^9^?./@$gvuqӟ[J\"`X,H_UXW_dr\T':6o_2Cr ,DǣBgؾfʧ.4SァO76N"-P$r!Wt]$2Uٱ?;u с%]U ?@(lS{}|O5Jt|'>}J=LDǯgJ% ǧ]\j\5f5)+: \Y _QaӤuR6djiK}w?{[V8f~[ tN8τB<Eo?!cS2G7ȗ /_7>049k.PN,߹?|-qŶخ?}mS~9b1('1%@-`j??'_D4 Ɨ.X[̤g.kTw~Ә׻qҝ?q@ҿ ;>xrf\2XIۻUMki}lZ'`IKJ&tYq>K! i_蘿;{v滮?w+iҾXrMkiYjYfW?Ĥp۶_uW;{ /&'Stl;=Y,E !Y?%K|?V|):7l~Mp*4iq%SnWgqw>{JR4>ڶf݇rǙi ?TcϧB*Ȭ-7=WעlXꣷ3?<5VӞKZJV߾ j6P ;w^6~uɗ&s~,g(lzg*?UZv|ja/hk>}lnQ64}&X/|zGl7e;OqaRʹe.6'+}w?;`[ulsk7n$Bo'Y_|^_z]`MK%7E"`XAb~C___xi\a=7ȅˉ(:>λ-d hu孯 w v@)yR]G#?庙sz+ :3ڗ+:$T‹2튎?Et,Y1+-:[qvg"=7[V-_*E"I69;{?%j.9ii\QUm 4HIx)Do胥͕Dt܀ԁ+:ye՗A~~{~-x 1t1|3>2'[ՌqbI\A NbQeOʚFk~fr-Nnbz$GqGyoش/e~1@,hm>uXjWo٘]l__YjŞU B]y+^;w'qec_JEN*Oɗޱvu7rva/wJF\/|7螳ʝ+V߾㪗_?$jbHrٜ(ķhHd۟wUi=le&N8ڮEPSt& Z,Sbf?ٟ^ߍ#Wȸ$kȂ鱵sbPQ*Ip[`X`RJF~Et63wy%d['&Jq*\j&(㚛`Pol-/]43noڶfeg yCsr8߱A0 7lޱn҃'p{|H|3ͪ2_x_Fnk%KbƫowhI6,+0zK3JgVm{Ol;E"`XF+g?Y@ȅSё]/=˟CtsΏ&U6_Qgl0gvUNr+I\pݢ_\]p,pa歛 :oףjv@&艹<cFѱu5EGO)eqk,9tdݢcO~KlYt\nU7Miv]It<ϿJVM+ܺʽLUI#׆m.%9M^kVtTRi՗Ywyćr~07бuMG:baIΙ@ n9;FQ~yvLFӸe Mb-o[4n&3bN7T+׭~p޼:L'nvpr`}$4WM N̒,Yʙ:ŻnvFz0ڹc:`T~c:/U 5O['l?A%_&" P5e lݲU:SZ4.uĝw~ڳjz{@Iv]:M1D QDZrhٖ-Oϲ%?{=YֲrHREI0 `@AL쉝s{oUwWTW $OPS]s{s7nf|էm=u lgjtngG_|G*ػGy Hs$yѐ K)oήNl<ɷVd=]߭&_Փvܼh6ͳA\%l3/|!<ظ*_}563Zb# vHWt܏? ?^[?t": Œ3:\tWVCt@tIXe;ob#G W/):E ׳WG޼ѱofR6lf@tLM.:.:|Z}g9ѱe:n=t3+:>r⟈k}eYaHhDG~Ugm;6m9g'EVXD :1$wGqGD<?XFc^ww^~c O_|ez?~퓵˽;}ZBL' :cpΈ#J+vu~'k1.cPvjmϖL9 "FyaQ*.cORfm6o>~UY6ۉEϘuy%$K:~koy݁}_XڂFuڽɓ*[ UK@htž!QbA߶哿+][h#OXRd1-ILCW_|jj4m=SgSSܤ '-Q)̰ 6+o9hԟzS qY74՟D?'wYz_;=>R]u ò`ٿvěwׁçZ1dvQS8s?荶9+ルbP{?cmٌDj:v7ބy n!f8ǀ@@ ֈTok~Et|T)AxeO꯴xn{'F>G,6xꖾm|.DZ d)VKSo֊NНZ{hz_;?ɫgw}WV~O^9@3M׊cbѭQtKٟ};䒯C?혌oRe\1 uDx~l| |_y#kt`SJup?3MьYʂSU*unp\߰Fӽz'.&Oq< |C}=^igap9'kESKE8(V__zO41A~ ކi&m85:EUh  T/I3#*wd?McߡN'6*3368R2N?ڳ| 6΅N^|8Jbtᓈ{ #[w39H{O`[ׯ?b#U;fXo{۳|`;> x7C鈍sm?'{ŀ{E4O&l}F]{FoA}Qmd/^ڼwٶ19H{O0'˕ɾ v0:"$9|+ EEşm͢c!#EٙXQtpСE-7F.@d8DqDL̬Atg{絛;K'gN^9qGO:Ks4kK_Ut8ű`8ߗ'v諏-\?J|I/?鈎WC${\zؽyG> i[ûvn\_w;%0%͵\֚vw;[czúʱ)7QBj5s\Fxia|۳eyu.kbs,pQG|}k'h8%?rl\H[zkLP83/]5H"7x{;;43ܺ0x>񎵬J)QݣcpT:71@@{M+P~]w}CN'?wܴXttudh@owSnEb )B88Tt8|ւs]DMt(.wсO/ѱe@":C LY,,nxϿ\7Fl܄4I^/a߻{#}aT6qhlGo{m56w}霍܊"63tvpǶ/hԟƭ#6ʌ%uw73uA{w"xE䬯U`Y"E6ѷlR.i+n{÷@@ HRcDRDǻ6FD8E% nKŷ&gT7޷sӦiEXiz+tсbaoaWŢ"y蠊w8m.r}c?PHCHtuУ\ZDG%oE)vp}1ECckmlQslfl_Mi~-VZѡLbN&&tͶUK <[m$/u|^ߵiA8ze"ﵟ i1mo ,٩W`zC;0(wnuˎ{,Dus.:r5FjuRA?UqЮ] Eڏ{OϚ/ =[۶[N(lX}4˹SAt$t=ڳڃ (sJ{x`J5WdJ|)vJlWmbĉtrl}[oYߝT2JrT42>Sɥ"6MoY5[}m{+rV^+ΕUD*W1T_tO׺w,u+kDB\)bn[J䍦}}pxJzU%r.␺iqtÓeu7P׊ZS\+Y.?]1}dmgFZC#ܑ*VT0H:][> |n -r%1ۥ:*<@@`1̘06J*![v(&/*,UCRfh{s\sI{޼i/ˌ6~$m!k8B5b l|ߗD!@+dKN_Ql@  CL$:H5ULcnB )&aLL5Φ>D%:mt-vS_|i%Ϊ.Q򽠙atMs-}}cr~]$KhogDzs[ĥݝ%r19Ryv u*0jR )3CvԷP! .mcT{9>350Yne6{ieJq+D"6 iÍu]ظ'>kO)L|y:ڕxB6qfYmKDWpTkf%ma\'abYKZ@5@@#`:-i*Bt;j.:XE$L*(2 eM=LDl%4At,&f-");)^&Mtt gHtEd#ё6 :rӘr:'>%>k}j5f,:@YqO5 rf hHQOQ˝Mi9koOS7ݙ'fA.Hġg)}5MwkrZ!P,N.Qq=k ww(G~#Y"#֑szz Fy]/YE vWmlR4CTo`^)AG'کu{Tͱ9zu9I "<3T-aO;L+K]`ʀt G $މۖ$O:gU:*4hioaBsCSɹ8q2x)~>gՂYT:C544HU1C@nZ`|; Fѓ {p疮H-\ U$,a k"pP}TŲN H)] :-cd1?+u4^֊[@ Bё2'uݵDGW'_pt_s]Z kLgoe\j)oO/H<{w_kѡCW4,z?uID-[Atc eg% :n9Z0>RQ\ljnCNǹlӥVJNXTNS+ݷ,bK[b7+M+nn2uY)Ze;1;!|)D=GjxbxM\'R6ͅ4P}.[zY}mRJu[Wk\V_sw̫62{]03(A!9O/c,{]´dކZbctSk@@ i))\SdGV.=5âICUK\$W"d Pg㢈ri3s&Yl!'d3[kKX0N/L^K6n 7U]M7qŪ:r- b̟d]56uR6:gSk:qy\83K8Z@ "鴃W.:_$:m~iP>WBPx6X LDǵHd3D)c0o.j!M8DG5b@kanK8^&:ҖZlJ Etǒ@":&ߓ0GZq^ ꛮKVnrZL[ ~ʂqvڲ݉=<91W(+|Z-Sq0M:) jBiϕumi (yi(RƼP%&DKǜ<.afnz8n^{G|,ǭShR(Ayd+hÊ /*^k*2טݝ>f潯gw,R7\a@@ 1NŇERNJݮJڦ㐓F6U|[rT LqYߕjR1zTVYLw*E0M1d?i°*]\6eUfn)09G!qncgO0t=_9xmH=y>վS o_MQ\x}0we~㏰a:,% O0T;ut+'ras34QDO&^;6s3xPlU(f^<6Ŏ鸊N* K5Lh:*%zY@"69nt)1 Y#T\;G^6aq][ qu 6Ok lNtBM|`# ;}4L=|3t8T@  ŧsD;J @q %6f(3S-m]tgSڥS_# MO*5ёjXxnH1p+uёiDG8HtDDEH7蘙,-eEGza36:^oΥ} 萰 kRUzNky0ω~XwM}"':[9Zض$~1]'uFVDrݪMX7_z! wcg}$V'M.9P03lnQF1g0/yva@1_~˰>+Rjs4͗F" 8֓\xѩIƭ\=.v#?tB p;}bfu hI]ƈF;Na}Ln@@ ,o:;/_sct5R N|Go|B /p`OxP L8[&lH剱`PrĜK-ǣ<5ym4I<9B>]6>> _,Q=sEnUSsjQ7 1CG!?K)?8WaIrs\l,9s3"6v~tqB6gi @@ &DS&JcDDș0 iȸQjc4b_bej":hU{lR05AtY :dZk?_\ۺG;]m0DvEGdS˸UKi" lڞמ;sz"M1; :dAtvM@ofg|455:9ۗ}PJgj<<'Q=6=b;W "HM++w @IDAT&VaS^i+rhr|gV>`Ljgk+rtE+/=hky>2uXN2kiOn@ ̓|q 3O<!fV03O_Z|u:|ZKX/}é탽*6BgϨR Mk]yM=⳩ kMT_HeVr9' HUt M]jI>)Ufn )Z7&fөEPiӧ_0ڎ+h|*:h_|~)s{eU^/hI跾>WLC\}G m,3?M }dlzvq߱͡m hsݣ@@1{/? c@RKE"23=.H"ӆW*Vhj%bh&0LO}t"V#S˳FľS+rGʥk_kwr,6{^VD?5<;abR3jh@CbZpa቗5hnl5[X2+O.Wt'BfLt6QLwy} kO+3GU" vowYq2=ᵮlf _sXTj&xĜpC9{xZ˚WRȢʹyjh-SNUin,sl# }r;ן;ZL.\NL[xW:ySZL_:F8Lhbs"[@@ >A@<3/C_\gRBdyDETTQE,{qt?}k1 /L\xq1OȘ$ب8̿G~n8ƣjK#68qK#_-L6qOt=uR?Z0xxr \ l<<;:Z.%BGhrl-G:l\j#v,0?3˟>;-"6rje_ƍ7b\8MoK+ˣJ!F8 뮛p @@ pc)1Z1Z~5 85F&]_Z DtD|̄R163}w!kmwg ySMDTBсJDǗYOV3!>4618쀋ҶF 'U8oxc3}hH4Ht?}nhMcr\t[KMkHuklÂ8Lj0'n*B3@Ndܿv쩏~s+|m8-\~pbJ\+jceO9ui¢c:Uk7ͷxtt݂L{&iSݺ]?ں O|{p8d]w,ff#*<0D61{f.O׶L<3ڢcWTeUqU4:}[Gɹ61=aѐzdܭ-$ǟs?n s75䬻 23j9CV`ibiUyn*W'l ~g&ۜ#KWlTY ~Z}ٱq߷hKVWos+l~bz~P8 UĖ0W[pﴹw6>;CGTŔ xQmp 瓯;_ö/M(qđl\EH#!N\ {Pǀ7ʁl`]L\_g^ǎl܆YTOQAClc=49ޯ~pbAn/f>ԝv#Vف?iq8:-Xp& @@ RG`k /1(:*u5"F%)̿HKNMt|fr!ogƢ#bx틎/N[*:pB=kxɗڊD 9F'[+WƞX$:`lݨ ctz}])7=ꅑoޱ܇WcG-틎ϻ/z&.{t7F8?1??fP<;)f .+C ώ߸&] pV[nR>2d\6eLG>k\GG3*¥OO-Vg Bez}Xj\1:۴A@kFLG.ّ0ri|z5{F80~lP-V04Siy>bUL X}|s^!64c 935F*sE Y"S\.eu>;1;qk{9CM_z@;㩻<6ue&y-Qʜ銲&w Џ}=MM, gdpƜYLpޅ*1+ 2͐pμp6.g3' |rkUwwf"A)+(iǩ8ipJu𧆧NaF$mک"6ntNbF/ _ֻVKWF08Ե:F6Afzpb7el9/ Ƨ@(qA4 $[]m~[||fSo:|Oj8Cn 6> 0rXv6D5] 7l`sϿ^yXxD/bZ16.!FDṳ{W)W%U<[(͖4T}%0֯7a͞>]oݶa~_$ψGB@cuw8=zo~GWWWīB;|8 \ޮ{n[jkWLt||lr -DٔW[Ftdw_0ӫE Sscz7\{G]qo"L042vCw,: *0KOvq# cqهՊѩGO]$:\DBX 䍢3-̼x%Lv[ͥoF益rсiO y{DrٳWN*)P< c65Eaӧڰ[f]\A5Xj Vg^ KxStk:H5U14yd/ʴ]l:S:#+^|-oꫂ>UFch=OL̎D;2VCJt?74nGt\yˇW':>1:}n耂Z/;soˢc MFAsgݷmM-Kn0cձ,OzzǦM{iEtϞ~rrnh-+\Ld]h"q$.ϙ5UmQ_k!AK^ZqX.;}7nup[8=7nH;Ycu %/սʛ*y -k>@2L5FxSzoۺ\Xx&fbuy2> ǵU8Ya꥗Oaݺ/WV*OL>qnsJ[A@RQw.lhTXZLL^;qmv,3.WfI=(# Yz 5U욤-6'ϽlOg~ˬݩT Ξ3Ahmh']"6MXVl\c:ډKz+A+ $l'~^]0[9l\B8/n]W~ۆԱ Oے׶t^sDxŪih5$m؅@@ ֌5#ϜzZ߾a{OW5cM2P/:VVRŢh ɹqLJӭo%Vh%7$:燷߲~ݲ{.^%mvR>VmlόN]޲~u+I ܤRi $`IRؙͽ6)5Ŧ6xԟlkTuVqѱq]+s{"YZ҈l'.(ѱa1C lbFˉbE.:}邥6Xn#:?37<~bݱ^G[+'N|l?oǺ>R3'fΕ*،:5ӏ(]P%iÛ3 K=w^߳6,Ƨ8dQE6ȅqr0+Mu. F6.rQyij/_xamGݵiwK(&fđ/^t6Wqr[Y3_+O>klNL;;Cl!+a-vn^ " *=d{.f&My5qdȉKW~;`[a[8/_ZAXP E 8̫,Y8A#svh||[߃޿quT S@b6.6]@e/-8ڍeO= l}nB aPb;aZ?lZU p>7 @@ 0ɖ|kǾkvѱc㮾9B]t<-Ln.: *H /=oݹC;7/gK虧\tcY$:}g:-0x3/]8ݹi׆v%Չ bѡt&Ix. 0zSD_q&C[#:T(:ؠuqd]7޾Ⱦ7n+t)Er.."A_0ʢc`oOSX@ cR@R# jeDrEQt\!Co~pPae!e7VyAtܰiCEni+MJd+b.ox._(DkJ<<5םte;% j:Mvmfhq 3Gf9rFm\$e.O`:әې&Vb!E:tlJPL9rM9eO~/qjG me^ʌM=uM{f<.!<VTN+ h6U١ْzW(nGƮw/…l^MRaZ̍뻖֢Ok[b4*5ˬRM^ٹ?y%z]W:E9yEʄ|KE^GA"b&CYS^W;JSW ۝tO^/0M w,eHRYqv(݊1:J@͵'KJVzS> _xվF475[_g4 ;r l~>DO^>sicuFK岅8=$!"U4'#2ƫ-~|֊}j[@ -! BK JlDY1R'" SW. _/YyQb$K1xiLcD7eּ_0Lt96a %mcDEemg֚qv2mXU=iBVgdZ [g ql#a u6 l©gzWƝ,ż\w[ 1lԄ Ɵ;q l%Nظ_x% ,jAKgϼpKٸl\e хi^M8!B Ol¹NODM]3 ٸhxK(:x^>Z8ֻqH% u ^I˴)S~|%΀C@@ \Ƣ,EKSm!vWpQwjk0:<>3(:,l تb[D(`6nH|ebDG_4OݬԲڂf>ߋDfY=BAi/crqq AęsaB/z2C)S)bf(n)F!eݮХfW&y" 2RO_pӨX#{nَn~TQhؠ :[#™Dʖ<XlwcRʥY1f)%Sl}yb"v^՜]ҁZQ9vpQ`fPг6Q黸DR1ӸQ‘h,B5RZ==ob7`]&L+kk~d-*g\NdEu65Q 1.X*ZI:vi +iSEԺ(e͜C)D}])FhCj\O LmIE%^'\q 2>4œZ'2iz14GBrgFTX#9TBq) J~\"6n^*f(5a_trlׯ\CK|ӂ5Gq(q-q.cZ j^K4e3^ wQ,KoM756nURV @@ n,E+y$= jkpk+:,Gk|̨xq XzL>'#ؿc$`VwxUaq0jUL8eL5$A[JSbXAtx$?@k퉎ش{)2 :{S zUA%}b!m?AXЎ~S<'xs0kOtcD~D7-$o~i*& 1:ȅHUW] _+&wY,Nڗ#g4}F9l5̅0p0EQ˥Y撓?9-Nֲ΍1Z&rc*qKiFdCe=x"(LIP)n:ij2UW=k6ɚXd9vdvRw?bvᴅw沬شxKљmSѩ):r9M㗼Q9n.*=oH>b6gՄ%b]:7޴l)z28bX1|ךx8DddŸ9VAHgfm]gefiY5]vZ )_LP]4ydGVNTu^\k8k`0j1Zq"vhE\vC(WjoqRg4ّ%׊2ˡZ_P"sYʢ΀]`|9!Ss" ?C3stk6K˻0 EQSIނNpFB5k5q]Rq*㨍ظm"p|!~%8|i63l`hV3ٓfy6ioƍ6gr۸pٸȡ2q[W!F@lS%6qE~᪨X_ф51q*lʵu8Iiz8#͋~PZAB6l:J!JK"w`JH-s3n"66ZR*@W@Nb$<⫝@@ \.-!: zӺʢ5!Mm(:. 3VUEqHt4K :j5y_U"D-dB`%)iEtiQFDze4Ew"сA5ˑ}{GFY}О뺀)E%v&:<߱Ttz9۶mCwCb.Ήb7LY2Ҟq3;? d 0z6dnd㸮4,bK,xVl E˞t6^ظ1lf6񲀍n:ƭ2@ՄK8 Mܵ]6nyb"j8IV^g`n29kAc6>y.s 8} 'Q 9XZ[1Qԫ9@@ pMhUtXJMEt瘏)6ۘXoL86#mk[tj#6EAmI55.#:G-<&% @z kz\Cz^sF&H4qF>,b>QqкO;Gbz%Ƅ3rWAY6_2G# "f FJ*FB"J 9;L1-RM84 Jz‘*".fXD# Fqc8-eXw!ӢU- 6Ռ:.8SElAtNWN(:`&:z`˧RU5N#&Xf)(8ВZq 8pSѡ,6"˂%(*_[ ۄ*DVjՙ9GXNt`+Fa lUD$@5]9QܐE-E|ucuRAtWn!Q]g*4؜o!9r?,&lҴڒY-6~ktb-lEO>$\#vR.Y6o%u*b%fkpLRUd]ghŦR ۡsn^{Ҕ7?,g㳧!VX ѷzq=0BɊhЪ|9Ӷʄµpܒ$ 1JԒWL0:k^ycm^D^7l1K# s^NԸ`/~CM,R9U+U꤯iIݴ.2/fs]qwk 1Sɜ 33{,`@LP}g&2m˸׉ijiEZq4]i3}6pLK ~ Ŝ% 풕$.ۏPㅶ1(hK/K̮Ѹwÿ@@ iT,Ĕ麿znR WGgm> nb^,ԙ0X i-|%^i3LcvE6h-q1]4G ͉xiY2!E8 ;W4&6!'l\$,bYH 8TC'CӇRfHilr9<'G^;YCqXO Ԩps2!hs6#]嫱tTa ˴;`VɏN3Q^q:1g<n@@ 4":f8TG*uĜB[PRzLx)YUcb+/VaKz ӱPי?~;{2" x)ٲG*UEqǻDmtϵ(d)k*:\w o3LhHc]LG~XQ錩@n5`/p h)"z m'+;#Dg;;钎LK eYfa1WqDul/I |7 $M|@NX7 U5MkD/N>rH-0:2-(-!Z# GRGk˛6B屎 Gd7J&c4B9QۗD5KTHs2 I\ˢG y)J.36z4th'yB\d鸅صML|'M#ALcwiuyF8jnsӠΥB<8xf^9Q ;z̔:EY75u.W6zfDûnl.@4ښR$qjvFJ`'Y״D3Qp@a7&a]_5X60Hi+&rJUZcqC75!iu|I^Xc/6꧘;\IFl\ UJ:3Ql\\1'n=ƕ \S56a Z)7AM\H5nnN׍3:ϗ`5dHZl0@@ nǢPa â*B+!&5:M/ ̊/apEGC!3ZF l[tQGÃ@`xj3>YtHUiFtz7I&ƑИNis.i8iJ҇rO[3N^#GŤ"ga8QfW1 Nxǧ ح2df4mYb8<\NG(S{f2G)[}f秕L+"XD3b2ݡ0 =740u4 pCx3Ӗ GaPc Y:I1غ2"}uCu3k4Oo@[ =\ IDATeR۰iU,>[_aR(J1"ӌ+ &MMMxWDz GF1Fxl1* pv|Y^x@@U4k7M2icբj+MJY*<ႉl֬-R573l\~ 5MB#qձqh$ic-z..`}-8\ LKl#*<1!`kƗvc6 'l!qx5&Gpq,82o>@@ #:|ݎ1RcQ\L8R(zjEząISӐE#>ṏqxZ;,Wܥ$8 0[6ϰ˂h&I!ko!Q]u H4h%,kjeRŜX5tsWQ:H/T)#>qxn,&`ZZ-qiB>aL[̬Shaor(ӜOMDLlbSlіq/khq"}ObS^\ԖJ'HՉ%^v|o#-[W"ZS//5m0fXyW4m0Y鮣Z6J=[lȽ|'mh^t̗1-hQ+~YѬV{buԪezc@ #P0/q(z&Rt=g}r]IbISZi]]vbWq33"y{3ņR!*\X=otG#QqЄ;b\}6n:`_jhY(z=6nFA(zM["6NW6sYc4̌۟+.@@#󿑢BPAa]\- ,.H"Hɐ%)#:$mQfIɒ$b1D >!Q}@O8k$Ϙ-eg!҆- )jݕs~ȴɔibXri<#9Sb"buS],j1(i*7uX(ʻ7.ݴM͞7eƴ%;nKd==LX`Nn҆FIw|txѬ4>iVtY,]'y&̬c,.g:( kl)G^>T2^pbT4Yq8Zn^vy7=,A`]3ë 1&6ni@ -!`3uŀj6jWfI-L>kHMܢv.?k/6"_Q[ ߻loP/HK8c%(R6+>lk48;f"2c"2-86#gqք0O)56ҏ?|( B b"7o+R"#xQr @Jp R 6E{@ af3%!':[ X~XQ(>uniDM4$EIQXzXe{e I*:gq[sb3uE(}h; U(W!<ȴit#~򲠍o*]m+^fDS;&7-yqiMLcю+n]6:UxMЎL#-(9b<1Ϩ ˙ۥ [|QhJvUmBx5 Ь-$g9,ٌi/RNHS-i3iOͨjkB@hm+\řҲlNjL%ڄ+^_Y^oqzAԋti/^'B`-l-Fc:r l|w@@ D!E&#qAt|wK E+M+1=сGvXp6 &"K1(Y1h6BSt BxE%8ɐh QNRQ OUh/*Z#&|SdV\SܴM̖LX3rA0JM"v,-({3ێC\˱=IUhCk'VL!nqǦ4f5#ۙfQa=Njhdn,Mf[v>gq #[fR 9j;qj;vV SSg|G]ƘVAov˥vaν~ex=$PDD@D@H`jgmHbI)Il6{ST!L-<')QZ8.5g*t)8:Kвc&ANc~ex-UD@D@D@F LI*QqE>s%3Oj:xPl+kZ@czႅ޽LN@ի#-Cx-{8$vp C.лGa>c2e\bo"E#u=0XM4kڮ]/kk~5˺,4^#auiGŨ\t"1 ~<$U-V< 4 ,0Yi<03,|3IjсNsE>PgnkZL@; ??~~>-[d2KA0۹acX+o3F׬Yam2 :;SZxyy AH>w$zR~I޶,iƣkgvs%璶eߗzLf:/N, p>|CQT%*TgIN\I%z\5ҟ4zzfugotP7q}mBs,L#HTM4 z]2:ws5}Da7b$]XQ<LyC:s$X|b@(Áe:%$q`ؚjopkRkDʀkѱANf>o[dx GX5]8wc_{'ֽEW!D@D@D`)oq.I +K8$ " " "pg踳 "@Zt\ꑍ\zIENDB`actor-framework-0.16.3/doc/tex/fig-png/stream-manager.png000066400000000000000000000432211341123343400232110ustar00rootroot00000000000000PNG  IHDR}+KsRGB pHYs   iTXtXML:com.adobe.xmp 2 5 1 2 Ү$@IDATx硉4إ! `7 FE|cFhc7j7X(FEE;*`Wiy+{w{w|vowv;1FFD@D@J!lA!wlΰauoAFH"saNl>L !,HjC`aCX> `ʈ_i;ҳ|f;n.'Jp4ؗa+#"P]!|~{9,oJ~؍`eD@j@O5o>V S!'΀vMX$9w>|eD Crܚc2" A;{>GUj#0 j˸+">_ò=89wbrTldD.E&rޓۃ&X~`v@ $ۅOa"+#e'<ߔ$ʎ^ @` U-(ǜ5WS8 `{!e8)+nK#% ND@ `{vC@9vyR3QE `vD& -0T7(MmV@CW^y+B =wܕ-[&k)+bcN82u-^N^ܠ]vGN삼w7o+Zk[WaY*VZ5uyvYh]̣ʐ)N{uҪ$$F.v\<.K,٧ˎ=뭷` LnL6Qło>\f̘guoU z1aȐ!XhZKK{?̧~×_~inǏoնm"[78 ~_ "ɫ$E$/.t:4^~M_}^e }Gl>}殶j/q/$22玽n> clG؞Ȉ@d"Yq-.& LSX[⋗`~֭GDV["a?S<NjymKɁWOW78gEQ,'xWc Mjɓ-z,+ 1㢢e>+а7 ^' >|.q+xXc5sϵlIPW^+KNrިMOD^&[q~[DmX9y睧TE͖N4Rep7;`|[N|G-3J5۽|yJ}Cc[x8Zp1mQXeU.Y{!ЛTpK0#"r>a&gs׵ KdlQ"QGDE\m -oYy/1=e]f ,,^tZ b-8|i1cQ׿'tv]vW]umĉT\b>l/vͮvM }5ta_{5ߝwi7tSד~>jx 燊B'x}q뮻tj~iߍ'r+tAvi~c[jN;dbgΜin7pC*Hؗ^z)-\?|Nn& A^<7H!5tUWW&,X5Jq|V6b#t N;C㎳-꒳ߤ~Y̧,َ8' xN;vT۝{~q,s,j9HtrK駟n۠k-&ӧۗ_~z. L ,櫹P3wGav5_,@1s_o{l޽]{i12n̘g8 s慼67 1Q[".썚%HХ: g0BS^tEW`vj1D}N8\p?رc] 1Cb2ƞ ԰r?3X^^P7)OH^~CqG'?mOGkR tRwre۷硇r{=Z>|nq7zK%Z!ސ&/gKqq+୮]Vk~ƜXO>ɧzߠg sya0|_ s 1^`5:ݹȁ.`0 o2 8C Ã.,Ϝ9s|˼C87z7n+']}ga HҒg}\xjܠWN>3R#W>|~sz*́,Hik>T[Hmqo4H k wbF Qq!eA7@0[Z" z 5lK7(1q =z4NQ`a C4v4Z3jS ;;,ͬYOơoiks yCw&K_*S `ܱ>|~6 7CB*?piTf0.U|Fo2 t[:;Ƿ&w0 _|{$hwn>${@[o02N]w]w(t MfO<᯵譹#-{oÆ sgyX6Cis܂ ރz*]rMIHy]٨@+,oo1O-8XиV1Xy74/= |W1ȡ4RHAk@Q@]y睝?|G2C}1_jo?ɺa=C=g ļӼ.+-)z19֟gRqwN1V Lq=|9|U[)4㈇4iC9*Ac :bH1a4O>}+ Vs󾰱<|I8s38,tl~muߣPNP12(e)h(` Νgߟn&c>h8ʞT c(1 EzqF/eNJfQQ%EE/ S :ԛU%Ȉ8_L~mɆx,0d?yRsC5p_XEgav}_jA~x KurSːqnR܃"똰쫠g.CrF2}~/1KUxjQ3ԂdTq zlK|~#.DMSj+qTf5|/4YBC9/znmaaݞr)vڴinB&٤or(|)ؠRU7Tht-C+@KrH3,zFCc[ǔ S¤\Kd9l}2/dld.OyW6F<e;RtZ;@V |"2J(dMDYy|y CoRe8 )0Ky#~YTaFq ͥ|,W=,+x|g"t@=\bw[Šߊz=(qag*W=3f$zr[OKwmu9+51ؐ2p^J_LCXgˆ@b׺ RiL1ZER=1WXoiSیE]tij`-i '"B[ʷG(,Y~E{;E&G2 xdx4 . !Ũ~qω Zˡc }!{UI {uѣG4ڎr)a! GO(Ug9 ,TLmzX‡]1A9t*hK4Mg [oNn lb,YR"r-7B5~T ڙˠ+Dܕ7'c}.VCZr ۊ41^,$k?-e'{T9]ykVD@ysw+Dۙ2/\r[&7Vr3j'cd4NaݻwoգGo׹s+ rb([]L֥P 3{aC b ց۬@R8aEW' Ac!#fb]jrJ3,_lWlAu ֦?Ҭ6PIb}`8B;n~lV#kɿ}ȰN-^@c!![q ©t;S+Xyd  /&uD(:*oCOS`''8<:j|Re]tF!5\N8]Kq; U,Pt(7 DkU*yK@B*,Aw$T`8 G/? yM(!Ul)m5M%THK.!)κ,8U%NUТI@ Hm`J 0Mimnwmض`eꗀzR{U?"7rrd-~`mxp2"v'#?:%v&2"~\ZC2" "@$ )| {氯n+#"PMd+R3.{vE!Ձ rT;PkE.e8 R BEs]jx=̫| .zL5W1/ې`il6S ?l7 eOí[X@ra cb a9Qtuso^dPA'J:r  W" "  HHXu]\ve3a :I4:hz!3cƌ:YŔ>M6vRgu[] cNxy}.!tRAOʑo9. 4v^{ٿoG{91c؁Ν;۷zˏK.s}[omtbwa /xr衇ګN4ɹwѮ|ĉi~)Tf+y y_  7wvW?Os=uu5ՠgn 2}.nݺٮ]Z_~GgOO?uu='{u-؂i~Wn5Q6 ޚp0~4e38Ì1\tE2˖-_> ?a;8\{3k,3~xt)ZѼ `3YeU  wꪫQguM } {cڵ3_7h=o1ov:.sicǚ>YAٳ-VųGsg…^@x]w9mWG6Qd{9^:c/Rdm۶v~|dSNu׎?xg@]vn#<̙3Ó7B[5jؓBe;Le伝NN7:<<Ӿ?$ٝwˎ=Ó .wlu /Dv׷s>̮ /t,瞾;O>C_]1MnSqDdFT2Kѹ1=zϝϜ9ӿֽ{7VZc=ְWwt" x] %Fi>Wלгԩ` M'E@BFꫯ$xSowa;~DTRN}Q=U; 'TBoL[DP4--XE8]LkFoMG"E?^x5/;i.4\u$*˿S"SOVZ x(_/*gdu")ky9c^ ڡ&1W_}5%ܧJ>fp7 pbи8uL dݏsC>jIWuo@e@iӦGh_;-:勍 'BCt7& PsjZ:F ?jQ~4P7>aƍ羅R&W{ T]!U8wꩧn3a%+L0nj RPFtJ/E^"D=cv_!&jA׿vL=%Kd@oQ뒪݇bxlK/ zRtjn;`wꨋQyyN7ρsn; W?Ѓrw$ Ɲkݺ4{UWieco1Үzis8Ǐs=w,Xr=>iby1/[9+iNPDQyrow#o '|bSt-ZTs-PzFS~6X`QGF -E 92(,Pz)ż*!Cϩ-乐t|qDdFey_bOⰌͽ\:lgiZhFoC+I8 1˴-W>N8DL\˹Z+;T? 꿇5[ 'P01m-1GʎK7h76˽8>7E 灭`XFHYDQsHiӦŋz{-2ɜ 0 I!'ex_Ijk-=DJ g}-t"E0Dm^Rr{u5KvE;SLzU7l\U-!QT=(!UP3|lhٱ[3/zᓪ(pue2g}-tߪsܙu5xi>hg"?RAYdY-m g z ;d*TPyB&?1LmZhGcΏ\%`nNN;fC-=4d !⌎ '`L$r:qtM.N?lI$8{[8K3~9SOIlWTli+b( 7ග:u F'UF@BnXJ\7E{'ߎ$W7f[n.[o󌫟Iʪ 5(!7~+%hR*R/ 0vakqK!qc:N:䖈?1po6r#H[snL0meqdD 71\owhK&a'_r(f}1rHCcO3;JHU=Pȷ3)?$]R|.-R4ϱԌ¡l76skM;U)8]p0;As=G~`bywfm9Uq7`l1֣aÆ޹: A'8/,UzsD-!ΤAv,׿'ܚhӾ}{O[=-w;ICu&}O89CӼVj]e|[)8"F2PO*%gʵ3)w:wp )S?~*2"ICx&{uG3'5{lUNTQuLIF-dlVD<*ݣܣl.I~%v6 j#!U5jyFM^|;2d"EbwsBEIJ CZƫ :sCo)uaY%Pu?[dgR)(ew]N/?^sޔg?|LQeؔ (Nܕ/NR^=C}K}%TH^hgҠQG70>tt&װJ8^ 5jrŨQV-9QF %ᾄޘ\)s[r3 v5]v93]weܜ_U~S|=#X>r TԋO~A\Tzڜs9FTuq =tP$f[ԙJj|а_߹ffRoyRZ(_6$7]D@ hj2M3مHVf8'ŏ܌؄? 5G@0̚uv@R|ry\/! FE@' SZWX8D !`M74-{]tmV8=ͼfr>/eBX,+5|Ex26!?*al$=>UkPɭy:R7l2`62G/yvlVAOjt"8#{Qmâ'rĒ wVkqf5whz-M (UͶG mbG6?^3.y^@ԤQ`;|AX%" 2 #*ZT]%v5M%qe;~vVFYۙj*H}ġyS hJSD(5@Zt`~zTUU J#FS(`j6`EE;|վx&#xÉO~vvk[1T[҉@P;^N" " " *b$TxHHņV% !‹F@B*6XD@D , ^D@D 6RU" " a HH%" "  "K@B*,ATlh@XRa *@l$bCE@D@ KPE@D@b# !ZE," "TX /" " *b$TxHHņV% !‹F@B*6XD@D , ^D@D 6RU" " a HH%" "  "K@B*,ATlh@XRa *@l$bCE@D@ KPE@D@b# !ZE," "TX /" " *b$TxHHņV% !‹F@B*6XD@D , ^D@D 6RU" " a HH%" "  "KM^@`h(C:EaZOwJ*!U7β`-T4D8 M*N[D@D  PXD@D NRqU" " HH§" " qE@B*>TtwU+lcO8ͥ^j&L`sqǙznf…fȑgϞ{lvK.o߾K.1:}SS0`?~[͠A#<Չ&@nɌ1 2xf50Æ 3?'8u3f3gz˜|N`mW_m;0'nf'9s18e˖97f2ݺusn 443g]m,KZbre]5,+s]wklv?`{'^{;qDh"/J+{/_nM)${$ӒI%f[rB{Cp˝`5kZgu,aAO(ڶmk _Hxi~čTY ^dŲEGNE`ɮ{Wւ7z>}L֭[|k};޽'ڵ3뭷ym6AFD  ,Pt> t|ҤINi"ª.*N-[Qi"K sW;r [Ԛk[*MP/[E$WV?4/4su~i#"TV,X8 GmQFgy̞=O93x`Sn9 xE 3vXsG:>#bYKnbT˞>hyˡKҘ7o=myoذdNʼn<0-?DEY`:tpqQabСvڴiΫw}e?˖.V@M ȇ?A9Ԟ2Ȁm7c Ũ{! ҥK_m BPVSa4 U#`A5@>¶}>4'a$ʼn0f SmJtk`1x n05k>No>m>.l>n|ll>.j>.n>.i>.m>65W{G&mu/wl|==zpu/^1WL6x Ir*m C!~xws3S3ݼ@{aދ˻_=?n?ͻOuknvm[=zE Tw}"^9ӏ?V~=1(WrSj2!=WcEq8g{7x޼b0-~ iRLeZ滥/sHLya"LBM* ~ H[h{ۇzB'x>|^RW^n]۽{wFY,nݿw ׺xwyg祗^rN2瑻~PSNSOukΝƋخ޹rUv* @78UYj[쇣@Jg?w(3\rI^QHqXlPA- 5. K!pBzIM66b;찃'?Lowry9"{W(ʼnQ=z|>̙3BP3={4C 1ޥ#9#o__wuݚ=sÈ#̦nщ z*#./RVW_l(h((])dṡc̙,eenݺni5>}+tJ6 뉀T=m5'w!3n8&oxC|/2؇̚5E:@1ر=sS?E6> iVQsx {5W]uݻP߄rpaόyK5{gS/ ӷo_oSYq𫯾DꑀT=u2fu|`~_s8El8 7\xYgM?c%}ޕZ{{q}ص׼fȑnJ7E. HHmW3 Cu86p@N;lozdذa[o5G6T~ʺS_V0]vYk,暜a B文Q5T"ZBt.!XA{_/t4/M]qq/N6淭8MsYTldD !gQ>߫(- Ȉ@;{>2"P6u\= XG2"P#<\kLulSg+v.ݐ]>/ys[&F 1ƭ p[a ,G`?; #"Pfm'ްִ ,a/إ21pmGX>=a{2"PF܅{Eq,9v,2e&XwW@IENDB`actor-framework-0.16.3/doc/tex/fig-png/stream-roles.png000066400000000000000000001103121341123343400227170ustar00rootroot00000000000000PNG  IHDRAs=7'iCCPkCGColorSpaceAdobeRGB1998(c``RH,(a``+) rwRR` ɠ`\\0|/” RR N.(*a``K @ [$)^bdo!`5 g ͗f3K@l 蘒򽆡&~ JR+J@s~AeQfzF#0Rþ9ɥEePcRJ pHYsgR@IDATx]T>4R "RR%`b TDTEB$ nFBff'w'^|۝nλI.Dl'RT8viL2I֬Y.bɟ?(P@}͛WmEh9ɓ'd-d/mlټ-+䭖IIIc 6E^Ç=sdΜKBjy׷y䡼uaF sSVYm Y3gN":M?[Xmq9 >vҸqc > TXe'-NP~`QKPtkUx8@ChCDc+ .LVzI&ҴiS\rYgD8bY?E8q jժj!yo n7P>c+/Nx $"@@طooJB޽ۋ( _}-&XA Ȳevҥiq! ^ߖ*U*Ѭ"*AÓFǏcǪi'4dXÚ߃m۶U#Zev'07nӧOWfzK5( `V!XYݿʕnM[(IDX! m5+!6ׯ/7pZ$W\b%bEַ3gTp񤫯-o!!@%fcԨQ2rH1c v`!M2pe1PW &Bcǎru$DX||w)kυ8,ѴZ4Lh+|J-oO˒%KJvSNʪ0ݳ9"@#FPk\XkXnx,Z-obZ۷WL20?@B$;s,HM&_|Ҋ{a) ~ĉqUt"s)݌  GVh? B EpR`cǎ ,vegaP:Cy, 0lk:u*yۦMMw,}„ 2f@B)bXbʶ ǔ-z Ag|+T ;wVB;rN'@ =B7o^IEvo Xu]0A' *((-~d\`HB믿.30ㆅ_@![W/P.Õlٲ(PC2|pZC?[l%''$1EJ _Woz؅pС 9)|ᣏ>mX)xID8@bQ 搷[,Y U*m~Zz![L !D<p7TJg ̍7ިM7ėw JsQ.3څ.>rɚ5k-HT7AN_y EO>|"}g9rDL/u*KX_;g 0ydyWUBo]ɂjժ9,?Z݊gGyD`M"D@1zhyT:n8Gr(f=5sN8prDHPb瞓￟-@Jpx㥗^Da1~})UDa?vi4PٓAF@@ϗ_~YE悗r ހL1\77ސ͛7+naaGFO #@ʏ>}Z =6ϟYpf[o%vRE`˃>HFX$C9 W^<( \׮]Iu۝(T<D=X|zFW,{1ub?0Fj(C/^\#F֣GR#m|Ovء:GKV {5Tzz?8 Μ9=.~l1(O^u֩ȼ;H-I"@̍\1`i rJٌHL,Xې;X!*!@HJm8b8-[QFAC zpݻWqp 7(yKL Ć!eiwa-ܢ4˗El3S9d@uϒ)#E wH%طo_&'O|=zTq,3%`X^#;I.]T"EDǏy.3CX˗/]M @%C&:#Ä?$"Ϟ=[5s5(MlF2,Ero1"NylD (yӵ^_͚5(W1>S"%]d2.#0m4yeM*Kʕ+Ǿs/ؘEj<aa"D#4` /pKܹU@ҠexݻwWSJJΝm02X-R\c̓!Ζ-C$+7 v qй+ Dp?X-#+ɓ'":|b1$"@GyDEGp7X.>dz[*צ3gnuqTn+o 9{WV-K.U}B ZYdZ$[]rm)4Pԭ[W/_NH6I{0?,//PhI6-@&tERtwŊTrE3>}J\pIUlܸѦ#氈y@jU~'iƱCAgy 03.E$tM$b *#m6u-ZHeBܥ^zhчڔ-"-^`;FD@XfvmOX *29ȑ#*w}X[ΘFI%HDp٧0Rz뭂WF;Ç+!K$"@24nZ~ʴيUسgR=q {嗭>$@֮%_.?d2j !axAFP5tSc#7| @&UiSIC wuz@lD|w$"1BرcRzu:u0c0jml8`w/gs\,ȋGVVP7C3g ƍ We,^ԢE BC"1SGK.D~7kI"tؽy Vurw:,oTA\2eʄvDJ;1DٳgWYcG"D@Sؑإ^v║^ol K뮻.ͱB6+WJɒ%Qti[py hTJD@GTDF X`!EHAv`siV }ox!p^R wxQEӧ3B`yM7ɴi%+jIֱ̢EhѢ2sLfS'h,_~`#d9#D\d1@Cs?#͔)ʫ d}ҥmS#4p$wuM=eawHYV-9xreݸqe'D  4\qA`f:hT_+Ν;Uݻw; JMx=T\eB&Ml4:% &,A` 9raYaBK.*V#{c$j&ٯ ,1 ~$!KT\rN! i&u.P b8p 0@y[jeqfB/| u+|tIDI[F!YdQAvo>۶mSAS#N"NB'PvpE`voEQFpYjʮx$"@% )pwFҷo_;m0*;\~iFN>mVv*_ꫪ!CQ퀍`g<> pwKjjG ~%EޓKrr|7E̾@%dҤI ǏWٹgϞ&,"kgQp-l<K~M ڷoʕ~cȑJ[ns@;puebԫW "m6oެ2?~\) #(V-[Vƌ#sU1U(#l2n +{m}gq@+ *+S #˗d2|"7|LU|z*T9svID |g*"l# ,EJhdDB]d x#oʋ/2͚5K)#Dȑ#F-Z8dؕ'x#SOxyQP {Nz-巶pBA4H=|Jsd%6l\z饂hѢvaAڶm+ƍz̟?GA@Z\.nZF ŋK|"ܸqc+lJd3g8.c(V0$pj߾=F +C*v";*@:QkIdaTM ? t}A昕+W 6HAJ%;u$ЖCNȮ Ȗ-Uǎ$4O? G!9 ĺAzFo! 6t i6^#/kӄl%"ӧOjժga" `ԨQ9sf1b +BuU~)ID,*tH^"իWK˖- 8lScǎjq 5kִH9,#8 >c!,HDL ]36rȡ L>^In !˥x ო`@R V V碄+ݺudXZ`O|`WX!ӏ%k{G]tQ:cnoyU hԨ./!oVe@u̸ q@{CdFD.nDvA%H f~gΜ`C"fD;x@ZJfۤ#p4ᾁLE ?Ce¢M͛72K8"?Hʕ?,cj^ؒ K/jE&#wܡ^(gϞ-5jԈ q@`J:tHnq] L} Ul7:ॲYfw^t^NlhƑN/P ~5Ġ'6\5 \\9uxϞ=eꫯdƍҴiSɚ5g~IG{LY)CD U3+EHq@,e˖g T}T%=vR.X²!$"`Vr-K~Aú/7++ N ҷo_fLgY!@ grΛ7]V\?n*gIjjԩSGq\><YvpxW>X# !g믿\7߬gɒ%~LXVZl0K%GDXLʯP :sk^T|RpAj\#+ owީ}x6miF`6~MDiâDv/B<R@e<0ڵS;=7NB/˗ /na'܎IC)rM,-.A,:gx H/xb炑nZFv 7%RZ;v5|gI X8C(A|&YZx>S(Y5kLX䐈{eĈrʂ h D [b=, W ˗/Xqǝٷʔ)ܼ#!aeʔ)Vc^$"ptW0k5!d2^յl> KEPzt2OX ppOrծ][իWrN2Uw}7`9'0\_ܘ/Nc 9rPw}gQ9g0%çWTƎ+%%ń%">F\u=V;w_%̟?u饗*BPf>ت>"tÇ_b&$D 2D] pO"s#KHykrdϰU&]@r.#-F,&W]%Kt,: gMwCfbŊ*GC"E'gΜ):uÇGZm&ժU3<#OS=f3fpMSA2PV-Aad1vx4zՎ':F`@֘ pĉξ… ˿20ɓUlٲɺuD7r36Ժ˟,Ԁ,p$ An*@L8?d)}&EiŖ.]FZ qUU~[/_-9s9H-j( N7fd }ᇂt٤xGVUھ}{?@"PݻS+"`bi303 &v#^V䚌]CFzr]w R3zN/رc#!PLp=BH`N"vAEҤI9uLY X,ƒ]@@jp˰l?̶8tbGvC"oDuڴiV!X xaWwQHŋW߿_J)!űcݪ؇R.P7;#UVQFɋ/(+W[Ό}i.8!a|S:tH=3Uc m*ӊ>}_l'WF'|,/$l / L>]Wr\_lW5kV1tkd XE3v(aIP@T*XEb߱psO#&Ft+Vշ]+[X7@KsXL-򕭾=,Gz>Z|v?.F^}ƍƂK2,ێ &ZmBյkW*@L4/d%Y/\Fض@ UU\PF-o|w4 YL""LsڵѣGKfl{z\Kc$y# nc8Z#6ȦM5\9L(D&,#_Ǎ';v}W^QQ=z;cݺumVt`˗Vc`@ >|JS̗)S&,(`1bɕ+Wve˖N?dϞ= F<@숀NWL7;bb1Q YAvZqѽ{s@TRqwdv_i05<bĉR\9R2v>uV?~uqv'q+")0P"Cj2@?J&MpW)Ro;\xy;c#^mV6@j?b 15F3^{8u |Xnh,%F)0ꫯVZE^9c]V}ҷ9g pZG-+]ܹs;XyrTy/\D ڂL2"FG7AHˀTR_/5Q|_"-B }?l0ҥK};.CΜ9U-`V9z~֬YrIË5F[dQ"%*A<!$"@vժUBy/";mxEjbŔd̙_/.U\ {'Fcvב%D D[&M%H}?Nݲ"`I}tRqޒ C6aгc "孾o,8@u®Zyhzm q\;$"@#{ySNY"sϑ藸2eHl5"E@[ZYv ¸IX *1aTaV^zC"` }f`HLEO۶mS(Q"qLg"`1g9s8me!oʪu.ٳOíҺ9 C]Ɣy"-o*ARSSe֬YjǏ~I=znݺI֬Y1Ƅ/r}'!2@,R6B%"!(AlpۃS k*KJg(%\"9rOv㯬-YjT[Pͱhym4Qe[vG@O>,ǎܹs}Ȧ_LJ7f8ptE.3<#իWwgL1%2Qd(ɦ^X{4-ūn3W\?~5V'[NjL-A۶m[ؑO|ذa/˥A~A_z_g=O50E|FѨN-\QL+PU(9e'AaPΝc =lvvW:\.yo|9kMG2QFry饗FRe3ƍeŪ NJO7{R:Py1U~Xnfi֬YF5j$K,qk|X7LKO8s~7 R߿#RF<9ڍ.$UՋrT($5MlY ԋr}$lR1 eVGBHcxHfIrG pAfE\rH#naI8M3Sh}PކZW^Qm%}(1\W]zfyUo˜9*PztI.|- {(p<Y%T" Yjd0xTkUڌ en CbvU:3k6S d`y;{a~۔"F苞F7Ve#:׍=GQ )v]F!ƻbŊ4UAoȽޛ\F$T 1`(A~Gٻwh Luŭ/v3m^)_~UVj!Jɒ%e˖!_Ŭ]VϭZ/_>/AxIINNڵk))*[͛U2ex]sy|vϟ/ k)M/H{X7-[*˧RJ` 9 .T)RD@ x:!Ŵ^\(\ܬR۱̲M];9Uz"gS꠱KTYKY 2eߎ:}kt&=24Guw !`1% }?lڴIv)ǏW2[n(ҥKEEcUc\㏻Μ9o#2im NҥU]>ax~>}X}>4귑e,qHUf[oիյkW}߫C֭6-#kرl{Μ9jvcÀvUi3SoΕAPo;N9vʐ32Sf޻wo~!q r_y}aÆ.`d(O\j O<ZeG9Ǎ(y࿀*%+f2xpg^]/O>^٬9цVc@IDATYVz*̙3]-+,Ƨ ֏jglX~ESj~?}(g߾})*Ы6 ;PpW D Kñ#h~ҥK@Mʕ+z2de/yFGFhg̘i"Mz k &xڗ СCE,x ?ЍR]|:Ș1cE7>rb\"5I+iHy#ER5aߥ \lJ:]nCdr]yWrISΜ9%}8>m4Yޛ7o4'}t-}PO}Qn"rHb{qK604U\yOH!O 뽛nm1 Զm[:=t1iѢo:x3!iqu,oÝLٌpr}qoFTOaS(AjԨX[l}H?$nѤf/:<4D/XCȾn%a#/MCP4iD$(vbp)AҼys_[?*Cu]';wz@Hp}U\Y)('p`BV$bKك^p@ |Y8I7FPLF Sq~TmO7>C@SP"sU ڍa}%v D_76^XɨL~ו띦qƹ,U_~ Ȃ 2~%6d"]` wBAwQ֠ 8qoߔn("HGU6y5 N% {\?L@K%k׉m$3QI_pGٰJOot7H ?SUEOlL@ }͛j٫ԤI"~^H F2e].^imF4M}jGB M ףG,@ nڳR(TR%[3vPԯ__iN~bQyXC=eFڵk w5\#)))8{-1 < ΠaׯfJEtl]?$N8%fky۹Eyi 9Νt2*7fmYM72YOv 7xYdh^=w͓( /NJcOzQ;ߺ'8XlYyU|6m(Y;'͑#6F*r%BʤeJ)olMs!9Q4+:(^$RapVmnaRo\#FֶI\uUi& %*ol>'ousa@y#yf.e_3H Jh) ?-8*R0DOπ%믿^ ]ERNb&|0C҇Qfi y /E,U˛M7SDZ9| MeKoa]${a^y%1R&@1[L ('1VXLa!6n4S͚5׀H]4L9'4%O~7=H^y_A >Δ=]mp vmlF߰ FT~Æ Jc6\ Xsl"h {,L!Xb6w=FuayQ-`L~m 9J**i"·p[.ZTx1 X!UVhy_<2(je)96A軘hT7Pr ѐLڇ׉nӫzLNψ ׌ dʂ\rCPTM%J_~BI|嗻U{D#Qd]B۰ſYdy{P!#G󆔷 9畎lFc$vmnk=&"WN]Ǝ{!b;Zq h)c#Dc`fiC_b7 _+_B { D\ m!I: *6Yγg3oE D۷ow*TJ}$/h{4I}a9CSjmܴ5mcDt"moJIZwD_'qFer$\@=:d> TCF,(aCS7>GP o}^-kRJG䇎t.$E&;+fԏ5 K}&Z./컩Q GFOdADaÆG -o?X3"CQ(B"d"/oM 8x@2ym&v3S^=3(xG%MX " <]`Yγ~4T7Ў.E& EPh_ܹM=#F̦M66- %H_NFv!ylIG)Ǭz~+TthF}]DZǝL/dҩ !K*nuw9O] )sۑ o~*ߎK5 i-(Ify4-]Fvf)q#fƤV#+쿷ޠھ[n2`  Q?ߋjjyt0~$΀'2]"1pzT6i֌B9X &衇f' E F""h.+MJ , oug* "3f<<az]4/p3^FHxˍIoƦ^nca>2|@&i Hx+0~{1*='/>l;hp1|w|0m]OwNSnE$Z"xɆʵFV?dLU]&iX'Ir:\kVM{%/#3%*:׍h)9|-Xyo2O>i~N0ض2e"8,ܭ.V !!CTp8GRB-An p#D·e!K5k̟MB U)"07|7ͮnpgϮsP h.g9X:z QFP(%J*4tMx|'ʊ @O?*kY^\҃<,=ݗ, HUA1>񿸾vtK2g_O79q= \ЯJdA=+1֭[ \ z?p4G9}Q$zw *"%Ii(L[4m G[}+s3^6 7tPÇW;kZjV>:EGf3^|A"zwX'lޓ>@a;x`[I_GU/vcCB_}3fp ߑ#%tw_/_(UT YjV`} pC&M䶚#M+rڡC=?0ի2ؑJGvcۓ +$9vB'ͰHxje^\xuƯhdۄ0 H;}7k v{<3bUrɒ% $PrxR'F"O=vP:4?(ұY9z6+\ }&8^4e0,&5JS7zJZ44xq%eĉSGKq?ޝ/.#>Ǽ?#6xwg͚5]ves Es}.×]s;v̋7dvf?P`9'~aq.cX| W;aN w2*.#Ϲpq.M7̬ +uΈWuߏÇ An˰lqeT.}es_ 16_24ʕ+Ahgze(v\h_C"ȷ5q6c7R]o9*Y㴫~ӮV+c!0^)Z2w}n9cdR2ȰP{.(#ftU#~[.C.\L"Q(kM|yֿ`zmX? vڹ@+釰sƮCtkTWR5Okւש\A Ű:pv3ǩ- g:ϲp_!|1w ]]Qj+TOjE ߨ6 kALP_4"̺Pv)b ,PiN?Sc*n%Wp/24Qo?}%X_XL*8PNL{O7aߥIJ{[{N iDd2bu } |eU!z)%gzU[%^>:}/B 5M4q mOQDNȤ5iDf_+paKnؐ Jvgd$SG%!t'Hf:Z9>c]q Lw7p1dܹS :4 $(Ub8~e/]йsg Xv-߷}e9ao "Bा P8"+C *g@Pq;53e g|Neʔq˜>}Z֬Y#H@xb E҈aю mfNUbiq_KK,}-< 5kV8`D,YD?ɟ?-[ CS"-׷2e̙#.K|+A%HaÆ=+"`-LƢ*{bܚ[L11Z"1-ovX; c$TNə3޽[VZǞzԦ֙33rڸqcer|rٷoY$OD hy۴iӄB~^qA;<hyC!@%H(x>[lR^=բ<"GiqN3(XTZUݗ2Ή8q̝;WqEykɱ;ʕbŊ)̙3-=%G`׮]zjQF=DJE^hP ]\ٚ=Xx pT޼yzG0(o=;3f̐ӧOKҥ՟X&&FēCތA:qIGJ8ρ69>}qs#0yd HqJ"A@_~E`eD"D&MR?3F"G@_G9y A싀z]bߑZgdTy*Wv\œDƌ~jA~#D 82G֭ 0-ZYw֭p{lAo3T$`.ڶmz;vlzgDlܸQVX!H۲eKs2I,絤l%1B@/d5k A|7( S%ZjAd$~X{J'*\ ~!F@/:S؎ιs 6ٳc['&F`߾}SRޚoItEwe & C`ʔ)sN)P HD{ェY+>rQ+~V``utqBzۑ xT$pr *裏 &A`׮]8]& zvorz*ܦ{LoLyP\rRn]+3dBBʕ+eڴi*8<=})G'{Eի'W]u;vLKBB2QwqoS Y֭૯Rу'qE`РA*P%WR%}[39vRqr 9P:uxg!mV+G2Z or6Zs1 V爀}0._|}fP lР\}r :thaD ~SO>ؓ^@>u9y6mڨ{w}GXc8xݻww̸5P-G\mD|B/y/BTc@ &H!+21@1d,)))&,#QQT)iٲe;pz T>ΝI?L=vΏ>V爀U&uԱآ>ʍJ Wex u"y@ɒ%Cj]k]8oD iiӦ6=ð(3UV ^uu돌# C/^YHNINx +)9ΖeS Tsr9}/=@~{,W8ӆq8?\p)3է?Վq0ϥ\-Ѝ=M;4Wu=wM5"AjWCyX qr ?O>O[&g6\7!Hϩeg+#pY;׮qXϿ9kw]&O:>uv<$W?9,BիY,ML@Jپ}}`Fs BMޞ\@n(w|R z' fΛ*{o*IE nOHb}vRGo5XTPx*UJdԨQDTbZꫯ /2f hDp4L闒ǸI8Qo9l(A/p27zr^$oF ],g}V=r]u@(@-*O \efđ<*G %Hrϧ,Y7/)By26{{䧟~ &k зo_Xvm`\W=; gϞRP!Yn 2D"1_T@)L Ž?u9ex, /ʕK͛'}<@C7P Hf2a7%@0aL6-Z,F̏{X o3Tlrέ||a^E"v@ޓ;vHɒ%1 =c@۷> pҫW/U%; RecǎvRp^PJyʖ-+?*O:ʦ5Yl[dBݻ]t|]7C#fG`…2rH%g!oIAJULVj&,cǤf͚r_%#<[[-lr6]@3gΨIL"D~FشӋ(P-ѣN0Fnݺ)&Xd1\tM?gkAJ@Pf̘!ÇWZr(ܻhAkzQ`g+D{FID=Z&M$Yfw}תH,ZRdx kݻUtF@OTLo;v[$ULf2 bŊٓO>iŋYfD lxx-9ld I(YwyM(T<4vω7 _'KN;Ə8nD u}]֭w c )<ȑ#vcȢEN:I@ ٲ+V|&Q%п4hW5"ٹաH,#soTP5, K.^jrV2eČV$KlԨꫪ: rUO(CYBD@Z Y21ݠ*TGT089&O,H&%2qgW\p"_|Q"\"JӧwV@ PLv$x ۣ>$ɟfΜiC FPz,w%JC6Pկ_#C@`ĉ6n87|L:ʗ/$B* GRFq'z~x%DK[nڴkκvz''k6 ")">"e$%ƪxgS&PJU>܄{ax'?< M6-\i&p!wi>Ov&F>sD5jHÙԥM֯_o999?a>B@]9s/l 6s9'zđ&gk֬m޼4hn$Ul"PZ5cm)ՏXc`V$@XF]vY-lц7ZPbԈe6BȨ}EE|D?*؉d2mҥJɓ"о}{2er)F)hj"P>S Yge˖-Ӄaa92BĿwmvg0LE,O~#*y@7\xc #pO.ZlV뮻6mI ^ HR匨̜,( &;^{m߾]88*Tr'vƏ 1x8=3(u˖-n#6 Evc9]߲}d~0Ԯ]̀رcmС~0S"?ScxVŘ0Lv0x`#9T$d;dU1&g<ٳva?c cZ" iZtI{7| !r@:qwx׿/bO#Bf͚eK0J& 0f{GyCbq)a$@Ր/Zz5HAȑ#=U0ӧ ᙋc`aNZV?>>u&5Fuo6rE@IY'Od5B%0y{QB@ݺuXb 8$Gvѿ̰aÌ & #H/./ ϝ;׾eKD HۺukR>J"wTNliT#E`]ءT  !a?;(44?~{ÙjO@%rl˕+~i[nmذn#w0Hy2"J3*UZjd՞(˖8¬:vhouMef*tɱ *TkҤI$(Q$z=Էo_8p`! @@F@ !+Vz ɤ֮]=}) <۷Ϛ7on>VR@!Z߷-Z衵![NG- | '.]2DZ LY`F-ڀ3Xȡ XIwWgm/ըQ#&0KuЯ_?:tB\(&==078l=г[$8q" _Cs6m ;Be3q` nڴi>zz7 oA`dۿoF1*Je| n.82aw_;7E@׿z͛79 t5B$@}WcȑֵkW(?sN78km۶y~e˖W3vڵkh! #H~(ewvb.\.åP-"n4زeB#DJ<śM}ɒ%= Sj" '{gQGf,9ѻT"Æ ah1PNcK.msI$`#ܡK.FH z:u IYSVěgi?~ӟgݺuyrl@{=h#@U%KXFӊbQG'ׯ_ _t Q4+#Hᆵk#9h 0fkР{aYr57nlX&6S޽vCTx]G_l˗/ . ^ 4ZH#`SNnl&U:C5eƻwn?m߾}~LM H'^!Sge7n ,?@0&"$dر'LK? jM<۷ٳg@1l0/#D sƏoT[:xU\b蘹(3(wVHC;%/y J͛7UVS$Nѣ4rBuq^xW#e'JתU %Jt.WMD }Asα7:w IF.[W zd̄Sys^ ]O>zĜBxXVb 2dVXтxF! ~/j ;h @R~-r9 W5k~@޽:tzWOx`D{Le:56 L3.rVZ:;M$&ĉ/'N+2;Q@PFo$NTU={رcێ/xT&!pܡ|Q߉x` C?2GZ: {x7M馛<15tycQC^jE y׷X'۶mkMGĦEP PsblѢE[o=D%,(ɦN.\Oٸ>}'-p:0v )?SƑD(1rxGב]h3±I+[Y6m MHD Pj<<.% I+O !1>s$$֥KcÈF <Ӵ5jzÆ ) 5 d^38È_JQQF%J 4ȪTv4$IoD pɞ9s{oJPk4V F"{ǪVV^7 ʍH,Ne~T='8]97g(w0C¸lb`S[o^j0\dD0!ԴiSSU ƖѣGۘ1cU\4 RG@+ƐK!C ֬YlfǨQ;A' 7<`tR =np}۠AHH)QLΏwk1HǞ%ŧTw" #Hޤ%Kl^WbZʕ=o"T=P;2v ^y?~sO/ 8;j" &0w\/ /uZNN۩o@=YfK#6:tO<1=+" J1bwVn]׷m۶Uސ~sϹeܷ(Q9+v ^tl@&]v7p@ǎ;u]'\yw*C/wZj%\y <&Nh~#a!٢E ׷\sWPP 9?mQsW^\c#te*'(p7/hy?~‰:uB㙀u-5:&i& #H{s~篽Z !BZnm͛7H!|ȩ[EZj%7" "JPb3wIz׻%~\w֭[TՂO2e<UVʟD@Dvi&Mr}$Q*%bue;WZk[ۉQVXng{5A2A=䁟/}_JɃw󝄾_~D6l}K2cƽ <D@D U0{XΘ1 K.$oիi+<03^^ ,H$8eT"}F'O8A2>msà.A$>A$RJ|v[bWmr>0YىN,;ZGhW #A:uR?Z~n߾=yHY!Ffټ{@F |gn@߾KqH!$X^|Vlþ_c˖-K[=9C3s*%g)@$ &,S"6wÈ@W*U<\)X׮]?1p’3A?E@D 7k &Dښ5k&t.UXXhQoEoFsƐao,u@&};o޼fy(ɝ=Evؑз}ȋ!>&Q #Hf)2{ 3|W6Jl}Uð@B*-QkFҥ/%J\ă/0/ȁ#+)Pyy^| >vVUb1/Z@X)٫ϼDwn1е\Bз@=$<'еD߲È tnE۷/S:=.*?1zp.5+ׯ?Lbh`=U W^ ms(έoѹ]y-y56ѳE  |'[+#/H^}IxuyCKD fz}!8/H:(z-.iEMD@NCno7~gcFa5-a-իWO@≭&@@FlE `Uu;ywtOޅ=$.eTR`g3˄OJD@D n#Qk16йַNrN8з v6}';QOkDH C]DϢs[.еDbN^ߢoֵDbл Lз|WM <@pnt$aIENDB`actor-framework-0.16.3/doc/tex/fig-png/stream.png000066400000000000000000001646571341123343400216220ustar00rootroot00000000000000PNG  IHDR,''\'iCCPkCGColorSpaceAdobeRGB1998(c``RH,(a``+) rwRR` ɠŠ\\0|/” RR N.(*a``K @ [$)^bdo!`5 g ͗f3K@l 蘒򽆡&~ JR+J@s~AeQfzF#0Rþ9ɥEePceJ|91b2 pHYsgR@IDATxE뎌$ $$J%**L %9'AH(enwoϳzߞ멮sIHHHHHHHHH #P'$        E)$@$@$@$@$@$@$@$@#@Tгb        *x DSCϊIHHHHHHH=@$@$@$@$@$@$@$@$1TNE =+&       r @P91HHHHHHHH)$@$@$@$@$@$@$@$@#@Tгb        *x DSCϊIHHHHHHH=@$@$@$@$@$@$@$@$1TNE =+&       r @P91HHHHHHHH)$@$@$@$@$@$@$@$@#@Tгb  ˗]$@$@$@$@$`sTNټ( 2~MU>Æ IN}Jɒ%%K,SjUE6mLFAnŠ#e$@$@$@$`HonqHHlFɓj*%wRf̘!SN1cƐK ҠAYr[v-'nڴI6ov;'{1ۿD;>F IHH zP9=}ɖ AdѢE֭[B95fS1+W.{oӧOGϟ(Q"  ^TNEo߲e$@$@'zj} D Ɯd;HH޽{65m D*7  "r!) 7HHHHH D,HH?+VѣGH"X/..ί.\ s̑;wʾ}̙3'O)T믿-[cU<-[&ٳgWӧ@3/NaZ6dG`xB*Vj?#k׮ nݺUqR;wn:tHvء!U AŋnAr5/oܸQ˗/)S-*ݻ%}R`Af͚Ilu'"d;gOϟW+UA .KѢE|RfMɛ7o@%KHbbz˕+gʄg~RN58qB=C?w%\sq/M3˗ŋgrrmg2/|r6 d3D$@$@QA0 @X W5`s- 3˫.]rU@3rի2=neJA9(ۚR䶻v횪Loy<0l={㏻]$jڼx>`(>|>uoim2:ChPLz)")"dq gCYtM o2^)ה)SRDHeΜYɈk VZnr8pPw2=ny=ߍgޓ]2ثLre6߿e(^xl+7HHHSv  x Ƌa#GoaKN9ձcG3~̚5˰(p6n <y9NK}ޔCڰa˰vrcVPFxC)?_!ae^nݺ+̙3<(E^`ƍͼ۷o7qeB|eXј{IʒK KA;ӽ"y)(t;ʩm۶[eʔeXĤI k9 GȆSi e־,Yxw}7YyHHB)$ ( ` Űz3f;Zg7|ҊěrjذafYPFp{qneӧO>S^H yL{kܹcUL:k4h +]aqMydG*p37\!СCݬ`;C@RE'q/,꫕#]tJBL!rp5<)-}󇺵R֭[ڨSN~[)q.]<=֬YcZo ڍ{ iӦy6g^uA8b93@]P2iy V?|lZ$]   rƝCHH <#bݺu]xK.(oʩ y\z7|lF3 2SZXdkRSNlAF<.6\ׯo 5KޒvD=:/ .M+bOpK.}g>Kz$hV`>m.#Sk V^CZERp؋/xy}kfZA噂[yC1rJϪ~L!?5HHLљHHBO Ua jmXs_|bPt# 0R)&\Bap<#^FaR#@\>rH38_- yj_6UbV2a饗^ImJm?럹mXz\jӦԮ][#kǃ}/:z!1<}C"{yΈdnc#\}VcX[ hժiGPt$Mnݹ뮻[njϰSAuP=?}GPwõܷn֠u2Sz$@$@$HTN9(4 8N'X pIUX% KZ &bR2b꘧%s۟plbܹstFN:eU ҥYf~U|~D7o#nXD.NRlY1ܲ&_ɒ%M6_~esۗ 92g ܎~a5jѕb p ?U;IXb#YuycÚz=ꙺ-:\TBJ)(tL1kVj5kk:e2~x1Vc J-"RR^O{/%ppֲC>o۷'O׮g>4 ؖ-l5H ! }j܁Wm*)dB`B +펤u'[']"J;|׮]*xj!N3l lWG}T,Y"poW@RV-1VCSqS_ i׮ (5/\PUӦMF )]Uʟ`ߋN &N<)P!sTR*& 6LTbe#}y_<$@$@$`GTNٱW( D!0yVEVc59!jΜ9CR F;.fָH)mg^_VpCi.}*Urf_RNA֭[MŤg)]7\^(,p4h`E?(.X}/Z9YYܶ^󅛳7ߡ3OSl"V n8j/N|}i  ЭώBHH XcM00l2T׮]STLٳF TNuV8:֓5Vḵt̙3(b %Z9MQpVSrt^|9R>f=kV(ݻw7OAO+8*䰞*`uZpg>< ؕSvE$@QF2ڛgsg_߸qL50q̼n@^wwW_YO_&MRǡBqoI[)!0:K T:fNiXx&(z!=޽۾Ue dwgPBO>DYۥt=V|饗jg>v ؙSvF$@QD1cC%<`ـ"M6#Wn(Q<75`2ey*U1v}@!@@5{VVYnkɓ'<-l^tdt8X}p(^S 9~KĿիyΪu3o6$@$@$4? >2\n\J1s\2^yk@h`.erF2,wTc{믿e{G*WB}s?*_sc5 f18L._F pr\6lp;Uvm3ui _7y/N'qxoxSKC5yHnكg=Rȫc}wBBo4Λ7zOo]5PȺgW޸>| <;y;'  G@ &  ոqcJ\y~ϟUh*BPtkt;]wuΛ[y={͵vZ|K|*ʴ\޾ ,ڼy`݋b'qUY`YjAU9ǎsB#kժR0:ʛ)M$@$@Fn}ƈHH | ۘWve۵X"]v*ޔYq\ K+[g2P(=ǰp .gdU*hXZYOkY[!/B{6B +j廫:U5k&Vt+VjEJr.}:W^NVV7b*֕5[&vu/ꪜY`Yj_ rɓG V ''*Tk=m   wqƹ b@!@ɓ'*ojp{ -x1LGK 7 Ŋ<~Y03"fӶmԧxbA}*Mpo|o>9qt*{Rcirq0EKq*f8[eNvy/^(wJk(}IN}i# @$ P9IHHHHHHHbb`IHHHHHHH $}M$@$@$@$@$@$@$@1Nʩ|       $*"Iu d…:Xp P9v,HHHHHHH2e$ΝeJ>} 63Ej}1  D7sJfr뭷JNm۶#GnCZGC:b NB)Yd͛+EU $>eMەTN&      pOpCIǎt0Dʩ0f5$@$@$@$@$@$@$@'JKF?M"|TN5k"      Tn(*ǚ5 ؄/ *-*4|S9,HHHHHHHQPO7ScɒHHHHHHHF Hu4ScɒHHHHHHHH Pn*4Zz[^E$@$@$@$@$@$@$Μ9#{˕&tSEQ7M$@$@$@$@$@$@$@$tkz߳/e 4se׮]r%iܸqLH)̙3K׮].&#      !A/˶mdѢETLwC,Y˜St4O x'˦!CȚ5kg(|LPN%6&        \pAZh!gN1_r'=92wt)ߛɜ$@$@$@$@$@$@$@$N Pz!ر.]ڽPM)       W1E8Sc˒IHHHHHHlHB߁TN1k        _St ogQ9^ެHHHHHHH BRRLm/BbTKTسf       0HN1E0u@ P9"      p>O:t :uj{68l E        Њ H͕BAX`` "      9/@Ҷm[ɑ#%M񨜊~gIHHHHHH Y,...҆=HIHHHHHHb+rv]BHHHHHHHH vP9;}͖ P9e.@$@$@$@$@$@$@$@$;fKIHHHHHHHv]P        TNN_$@$@$@$@$@$@$@$`;TNٮK( *bR       *l%HHHHHHHbSl) ؎S D$@$@$@$@$@$@$@CʩkHHHHHHHlG)u "       !@T5[J$@$@$@$@$@$@$@#@ @r*v-%       rv]BHHHHHHHH vP9;}͖ P9e.@$@$@$@$@$@$@$@$;fKIHHHHHHHv]P        cl) @,HHHǏ-Ν/}ҥK'3ft̙S#ٲe%Tl+ @ \.:uJ)N>6=W]uSʕKi^" E)$@#pٶm矲{nٳg}9vD0 0§PBRH)Z)]\s5HHHlB%%~ws<}|/D˗)(0(P9c%JHɒ%fL$@$dW,`IM`߾}tRY~lڴI}v 1..N fzŌ&Vk*(N<)ϟ *T0?ժU*UHL|HHHKVO+V5k֨ƍe˖-r5T9S`aS`eʗC2eԘnJ*I5$_|\<$@$nd#H :E)R8(0&=ڴzʝ;ߦgϞ5gIaw^]vU9+(n[,XЫ}zXtM,"V 1Ŭ drС+c ٰaCSHHH kr޼yjLq=SbŤzJѣ-#V u8+W[XVV1wwkz$@$hTN9(< 8aPL]w]pobΘ1C+!tB0u)~0>o 3*;HYfɇ~ff.a%Ժuk5 SXNqɺuLOĘm۶1 ؍SvC#׽!Cg}fI]t]J%֢ȉ{EK_`/Қ IHB;UҥKOz&.e8nG)e"1X0 L$@$`TN٥'( 82rH3A{ҡC#n5fD^ǑX+*VT"rIHM>s8p`=\rIΝXbF>raL$>3ʚ*gΜ̫HH  "LE@J7|SYJaN:ҧO;V6>9y+*~T E$@$LG|[oV ",-e%$$ĉeEZs=R>% r*-x- 3gΨ+ΝS-[OZ K_t@ի+b"  '4iKsN%6V>R2erRS'+bxeÆ J|1?.ӧw\(0 P9>d H IRСC. "!ESN)%A葰ϠAdɒ^A   KJϞ=eJ$L1O|GPRM:U ЖTeʔQcf͚[G$',\Px ٸqVti5`{S@~ZC/( " Y 0W_}. />Yf0*#Fz"L*& *Au?~\{fͫ,PT^e55k l1B4ib/A) @L8)p">>^YI+1ه,S!`ֻwo}@r*Z{" `FA1a`]tQa&3gtMvڥlժr DMEUVZj$a>ؽ{<䓢'`9 HH TCU0%pq7mT|AŠppTLٿ/5j$x GnC˛o%$ 2p@RRLeϞ]M,[L/ {̙ &o.WΞ=kPB G#B@p L6Mv*G̙3?cܚXZ8_^'^ڴifE;B$HSiViٲرC';X)zZJjnݺUի.]i$[B$@$QgΜG}T&Le̘10!p jQvL8QEO+ Hr*RY/ Ḏܹsj8n8UV%bա$~nH_KBY-& d͛׀gϞj+M(jonݺ1ɂ&*ǒ% \xQzAXцb*O<vY[ k֬Y @LGyD`9+u ܹS)%׭[|M5[Z `j}ɲH_ڵb*>>^^{5D0S6 ֺukY|ZoO?4ȵ8  h'r" n@15kp#;Ҿ%JȒ%KT*ĹD؀VZ)|K6n h93*f$شi4iDv-y ; J& 3|^xA~m*Mb  'W|PLoKҿ2O#G~Z.\ իWN%ϐ  @T;wReʔQRb"FW-ZP.Yd!  JV͚5SV2e/B~yy0,^X^9zg:k,PBlA`kIDʩ4$`oF'xBTJrΝBS@`~Xv|jHA7n'ӦMDPR۶m3gN4iq4IH E9"$V.]bꡇ~)vg$o׮̛7OxTKwސǂIHG`ʕRN*],])uc%qɓJQQ& SPbpW^yEo߾2fɘ1ZAqE3jZX1پ}RPaHH~7iР;vL< }XD#hرc$@$`rD p>3b ! 4H)u~؂P(Yq8Tp`" ]P2}݂X\7v_[ ѯJ:w,Xɯcǎjh_g> $@Tl;[zdСj?PMeBDp믿JJuօ6K$@$`gXq{g*,Ζ-El6"/XůGj@}l$!E!D[P@eذaj)ѣGK,:ǏKFdٲe?~*[lcaIH fOҴiSXܲƍ'2d% P~GF$nd#b/,R}Ҿ}XG\8cAp *\/Ry9 ,ZHNe1ժU+oė|&Tqqq**'Q_"AʩHPg$DPJA9+׾ Ϣb\6n(PL!&UL$@$@I`*VZkܸL6Si"DtdĉҢEJII){ "4[n*!CgϞ>]L$+K-Krd… +<# ضm`VWn]3gdΜA-v']t>L"8fwqŦ|$@a"@T@6ٳgKf*(_~呀"gz$5a%&  pQ[dΝRF A)?[+U ̙SFZBIyH"@ʩ@g$VXAVZryGj(i-ד@J6mڤf8mD$@$|ϟW1/^,%JKJ|0.^/RhQW_m[y) @xćB$,P+@1Sh1@ `VsҤI>}z;v롮 ܬ:u$PLΝ[fETxe}=uT)S޽[9wɐ 8*b`E} V8֩P$HH[>a7es[CɝD ]bvH  >SH!#˚5kϘ݄> H{ꥪܹ`%?&  7P9Rt^+( t)S&r nUTL$ f%)]`3Gu @?nIN8!=z?Rx ]vtҩ1.Vd"=TN^$rJ… 2x`y MxժU+hBxFS V^fMYvZb!Chm.?|;`r:DrI$,t IC!"KV)( hy0ş2e;~]$@$@!Э[7*PL8tk JJСCҦMIHH] h'ʩӧOG{}QN|XSGֲyN"Pzu_V/;NΞ=+/_2'oXSXԂ)隘$K, ;W\h"3Z̃!!Q~nɓ1Խl ;V0_͸>N(Ӗ-[ŋ0@x뭷/Pӻwoٶm[6BP+4L(ԫW/ [&9} i|r'7 I SǏW )}'Xb}H駟V"S},/e]5ȦM {`ˣܬ/]$EUr}rho:p.KpjW_ux(~h۶<ʭ^Xe" Qqzn*?5Jo߮zA*^ Hn<=?˭*ZnrR{iԨܹs^+ .qɜ9sTgڴi*t.ÇW^YfU2eDWٚ"U$+V~oaGEU ^9em6D 6L^|E5y7媫f6 D#䩧lٲɺu믏LR#O -ZTYQ55b_fT\fCqblٲjq~Xj>E/u/1EM={49sL _6`joi=m;X!:_/BB fΜN! 85k&VJQg}V)bc&f-pw 6O&O"ES"E(HzI  ,( P fL$˖-ORRL7o.K,qk8pJ+Q1N`A#%k,YƌA+@( +< RSLA5SL+"at&Ç ̕H3D -Hܓ#;VرZחV_xQ%$$1%+1@ ʽܺuFJ KA!U{9U A@*֟E[zj_GeWNըQCumۢ(gu VD@],KDN'.]:ѫ :TY:M? L>x&N+:.TH8D R@eȐ!"3$#ꫯV*0$PsΙ)N&Ƽr |FS߲-!FEX5vHQL4iD}D<5*Y"JIXštiXO1@ `={japH g.*߈kDv%o?xEȦļr JٲeSP&7W^yENҢE ]vg}$RC xH={R˒X3%'`.] @IDATelM/&L%i&ב tYFeضm[8qza0ș3o&6xuT;zX1%-`Ə#VG>.޽{ µ@ uw,BSOEkS.Xr x +YvC0wS&XO>w^ygf&1_DX,VOnon… nS۹cV161o9%UZUVZ$4۷+I&\Dv$NtbPyf)SŤL1LKx~p5AUƌc*pѼybhѢTLDE@e*BH ` HÇgxhl hŊ}nB1TL/Kt&-[*LPj 't ;1X% ؊@&M+oݺ)[ ! P9;+$ `vF!MJƌk߶mۢl /gϞŋKʕ_K$Ȟ=4lPIlE&&@TLw?U2k,Ug8Au8@Μ9AJ\ZO9(' @ o)"n$~F&!HS)YH3_UN>V^zc$M7o3shjB$@!!hϐTBIVg_v8p-$g@`ܹ;SP# 뮻˗/SN9GpJJ$@ zj%W\RFH*I+ժUS}d$@$}2)& wEҥKKBB,X$HHj^zB$wH̸SzM$$@!@s:#GdݺubJq`3(2 Vr R,H I9 &@P g㧟~ԲY @h P9Z,= XM'1N'@Rtyţ$@$BŋDz@͚5%[lr!ٰaÕxHmPh ofԯ_?6@Hԭ[WerBIH-[&/^C,Y͡$2dZj8<$P r*HY G`ҥj8L$@ ȑCʗ/Ng{N% %9{-~F3UE$iTNEX6'[l ~F8 MA$6M$ L0d$@'@T%rJY…PB1J&p '"]pCҿK-' ԨQC-Fc9zhʙyH6MWPh#gk8e{BA@?'+VPT2IHvڥ:$\"*IkD1ZM٬b^b_cJ`ԩ2`TKNf*r%J͚5LECғz\ mbG`Dy$ٲgjxZ%)1*ż$#$5c 믿ԁN:ÈvkرrJuI߾}y06tRP5M(y{,g$){o'vJiro/E;l1qc ߺȑ#j*2{*Y̛7OA y4$fsMn/]V؅X:i0N2R*TNBא@ ĉ*5R1 $-RZnM唟g}vEBB3Fzv|؉SfX2Q읤n/\Jt Bגh S9szC$XmڴIen׮TXV3r8S9rԔ .Oo)'teTaX ӂUr/"ڵK}Q"+L$Lu_K " jTLS0ߴ%s'u\`a$0wj@5$V%3<#7V`~w_Q٭oK.ypCzei}sK/L?$ fDϞKrx(@L)il|HB !>|XN9N)`49a6$~( # 3SƗ]HK .rb|2.Q-_sD+?`<&V0=V1+*0oTʔ)#7|o^M5JGUF?G>'2ƒ Ó]"jGf2 1'uM'\MSkՓ^DH Txyꩧ~LM3g)eG?Sg\$ekϧ,9>V;N9uK{,_>@Vo Mq'IY4~~N9fҧOr+VL-,%mٲE4SNg-[&ٳgWyuי0ges(j0@̄M_o͞5k䧟~+kժ%˗O]m6xHvN60b eX*T6&L0c@BMb1DXd?~[x nOƘxÌFptkkVgڵvr9@'OpQ 3e*0@8 `>qxBpLw)>>^ Eϟߌ&c)?ih|^*YfUVZiR~}9w>qF1;:Av VG=zHU۷Rqtu9VmڴQL|#%KT򂅚Np }іshk~7$=%k_]2pc3:()nU[c{=')[fϞ-^GB8%J_ͮfpq._v!jp*Etxg\7 B@$?@ʰ5XW_UdΜY߰510~wL%ܸqd*o!sU4uTC=o(ƌ ,(,_\8x3駟3`ZaeI:;pK\#7dɐ!R8͜9z6{ԅm B!W^ju*&ܱBСu5\p3ESؖX%I9UFwwq߹[%>IsHdpZhZL͚5K:w*Câ!F+ݢMlCGRD]9ILl޾}\+/I4Y6Q)>(f&?:4qΛ7ϔ[ X!=s*O*UdEnv7%}3f0wor>6תK.JA/s .TT֌Ʉc-ZǛ -+]Sʕ+'͛7e{O`9/oz-1 QF{nرc%Pnn]vJ馛8yG?7_3@ZSpGNh&JlK B^aGS?]t&2@S>?CYc3={V8 [nUpzJO'<}k(pIgm,~W!1#~zu]jJk)O'N1 +xZ)~7&`=a%HJɥOYdK"6Vocǎu%së8Ix6&zS:u3zތͶ\1EJDv'XpLXƊ}PZ ɕz\)c<6'p9e1d'3*v]ny yNFYO`Ĉ,Fq1b$F%"_X" YfҠA${)\% *v%6liӦ.oʘkԨan'QJ3[_m޼ټ ]ĭJ)]6K!fl <{n %(ߴ{#\E9"OLWcfHw.]r{Aŋę.gR{xƙU)gH꫓(/2s<y8p阠gGUW{cc[ |BJʳ1=rXVMWح&+$>owyrb8сM}k Qf$ȑ#XB:u,VX`rw*+EL[j1-RQSѢEfP:av<tJ ڷuZ%Qώc2<"^Dٲe9r[?79rd#(ȗ$ή}⌘|m4-D &?0 8B'Rs+UԩSG}YG`ѻwoAP''+{@$IaIM`FXOv_@ &`{@R3t2Äj)2/% #S 3wp+V<*7ʇb +Eه~l q|IPPyKe(IPJxYBXo%5Yǝ9M~k?+$ WopWD=<^rOfwu8sP>H]c@?ܼWn,9&F W\7)4κҲIL>LK&q8 -KB Yە+W*Kd ǠCXWŐm*)Cp* `W)Zj"E(+zj rݻk6"XZÆ ҧuܹSz$2â+/7t䬺ϑI  9,pI듔Kٳɐ~߰K.TP_ON9I[쫮2/wh xh8H r7JӪp-5|KrhX*Od"T*ocA(oO6hIteŒGmI^DڠbNCG:u#I /凡4hrG[d2nѢ_ŊspC*S*x~P(d?y~ÝO+Cr-U`~#nNS& 2 1C ׅ3fH˖-ϑd&5KԿ-N꒯%ʫ76hP+^>xC/yc4T9NzɓVS1DV=WQ4P'c! 4Z9{ɉ '=eor2qF I OHk;v͕/X1E*W clctr\A^@I}L}L-?Nq)ݴ:ejP%q H R>&L =z{L<<۪ }oܸ̒ hܸqf^ύO (cu xf11J)NSzPB*'|̋lj饗^R;wzɑcǚ;u]R?c*:㏦k>o#OyIN8>N r&M|!65^VI/ ]ڧL8+jϞ K}tZ9XS0`YbqyAB&0@0d'uH759FU0 kq`_xL$izy sHHXE'ւO<5̲aw-*vE.FPژ"Э[7h(`'x)|0.c-(˰2?~`(l,%Es2M]$)־zkxk~)Sǻ?L$`;EQtRn E 6-o-]s5 y 0%+W.fX>Օ.pjE)@C#F'&XK!(ѣuk"$\*v5ltՃSpXTig͋A'e 0\Sǎ_X:3&~@t}0 3)kR_Ba)AN.D!}$]`'P3''`eoX2DYSq~(#er6dRwNǟCbEQT bQ*`Vw_X`CEc bi*" p32&gMI~|wy23[f;r󰕲)篔'va2wgX_S ΍A:(Z;ٳgۡ~wh`j-wד|vv fiͷ߇S.C_2CZo-ow,zc9Ft~;թsu=嚢Ƈ 0p+R暂n )$NC坏f2Pw+_; A _h WâAIe3|U:˔t+3$/)kyA- z&&*LһjS)v\@CoE'иQsRmoƬ|uqu+株([eK}^ Ok\x]PPT-Ap*#@IYUT7{%;gg P#S5cc*pʷ #0m43g4h@:w\:  @55Ÿqdٲe(M(nwݽ{n(CNAIp:ʕ+U9j@Fik{kڰ{@ m۶7XK$[`֬Ygt R^^ pٽ{ PT4\x?υd>j%~ԩh"K{X@}͚5~IƏ_\5TSl@ N Pg}I&=E&NX xgm. &dAJ^N:ҫW/>GKp= weiٲe{@! *ģF Nnݺyꩧ T͛zFCU}n:TVZUͤ]x'm^!@ 6bs(H Z|y7!Q`Ȑ! {!mYƼDH޽ي_}䕼B;;vK߱[b9$zKM6D.\(/bkKȮ#mh~"(/?gWć N2gΜB>E kJXk")BB`oPO(ǽj/}@ mtAVX!n|և}#zKfΜioh>孤@ s{Ú]@nKk~=C uKi"YhS73S!Zw}lٲԈ* ;zH~7_5PKB ^iUMjjN8A^{m/^1c2}gTi,(P).$|-6K6tS?H@yyu]׿JٴN`2s@F䤓NU;T5@ԪUD^ٶm۬ P5 )VXI.;|\H: c"Pvm.$crPFN.+:e*';f'Љu,,9#z95}zxԐZ ҥKE{ck})|op |O3)"k|o܊lmfpi1/Da=m9>gy4@ L-ZHڴi#p@`"Wt?xRy;'1FM475\Q#w?~ J1/Dv)5t .Xn}j"p,fͪIQl@/_.'7(`{n-SWsRnRs}jY߿˟S¿nvyt\mmzSL{|#r PkjΜ9ҢZc7࿗U%3~xrg~ſAsyL;ឧ+vnSsAۻmy~vC{xdWd^+g+=nl\Gl"`= }%RG_@4dv%҂/-M+! >ѣKV`|ֵd ¢o= ,DgGqWyg q4!}fKzo6(դNH`ŊҺukCpeҧY]&eUyM+P=j5l$LpFD{̠hJ50Za;ߗu_{9˞n]c۹ݲՏn{ۏ[nzxyBwZ ۯ3n]m;v=]C<^xoCCƍ'{gȂ@a ^S}: mݷz➯~zPh)*q!6vտ׸e}v.O6v4^k{G-l_'_uǫ}yy>w^֙e^gKukaZo{Ե_a<.{'o-Z+VOWy2ML3)xmȴoͦBmlsۄ>u {Ѫο!dn~32rM7ɝwrK!P8? Lmи|IFj~uR EynU{;Okۻ2cuK.꣮_BCm=K_nn:quKcSۇW-=Z@V͟'5$9DyRIsYGY]\v@:f kˠAK. &gd)*0j(+PKN˖] sveڍ$5׍8RֽRI8u"]vOoQj"˵^k>&ű-YXb ] ]2ȱUW]e7qD6lXȞ@yyIz:,iI`*{ؔ@kjdR@x&`?z(&oYΝ+[lI P\EJ]\njn(^xm^H% bxGdԩҬY3+ITFʑ.v+CI&eiT ̛7O֤klp?xqM0mp xcCZh!|}1!UBjK.Rjڴi 7pv֧5ynO58Xv@tz-ᄏqLI  N PS 4lP:AY@p rutH (4jz'+f` $t뭷PͩjI VLWo߾ҡCYpKg~{.r-D֭[ nBr.ȥ^j{yɢEr^v@:?O>}HN(2ș .'OrSVZry" "oF>þ>izGBk5O}]p ¥(Sl6?_\t{N@"8%Ԅ.3_$RmDV)'e֨ ț;á>_~5@IDATŽ>(zN=C_UɟO ̐˥VuV^UUʗ,̟$ǏS|=$ E`Μ9Ҷm[Ydw}ܡPK_JYRIsTBmp*Dɂ@,9{l믏e=뼞 @+?ڵxv {ȸqQȉ@! *ģF^@d cǎEfX=z_~Ν;[E @й,zk{w7v}IryOf͚QN?ydiҤL@ ~5_u>j`ǯԨ&M$_~%`fmV`X_r\h˗/Ν;{'+;Q,uÆ ޽{gCi PD^{\uUҠAt ?2g?!O=T@ r N ١C_3ϔ{:Ű  }D CȱW\!_V^{5ҥKkJQoN:?,~K@tN,0w\ر̞=[o?9r$C xBG%t\R `T ʱ+:JM4Iڴiy#"Pn&_~1c#kP$"@*HJS?Ν;of/*q;azijl ʒ%KNG}4l@ ,_\v*2n8iٲekJA@[|sM̷Bi#T"S vΟuʓO>)~z\J XO>_SK(Pu@ 719s j ,[LzeS͛7W^yT5 8U|ǔ 40Uvm48J45ݾ[nw}wy$/#^`u֑7xCZje[ׄ=)Gq=Z7n,;J@zVF@wu#S1c˹I\s5 Q@ o,ohB=g3nJ*Xjʈ#aÆ;s%[JMTq[:wmۦˊ4*7_}2k,޽;Bƞ |mu]Wܜڃ@u?;}휩)m@Nu%$pgmf[ҿ;~*{|Ҷm[Ez@JG@?_u PuEtT-usL 6L405tP;zTSw+Ik_8 )//OSAR,CTS"FH=PfӦMe„ B/,ь*nŊvR, #w?~pBc=V< %6x7[la?$@ 0JA@tI& :\K/H,_Y/'|ៜ :9ѣF߾}E+\%PݻwK bN<%w`j&@pf~l@t^@ tn;}`tXFΝm0nݺ#u]'eee)%#qM44v,^F'ʿoԠG-ocJd+(U&D/#OKN@o{'ۋJm^<5jTrW_}U;8Y`p|gd})eڎ P 駟.uo_ؤP.Gu?p]q2`~*Jȳ<v@.9Ej۶GRq _ 6L%xqwZdS>޽{;5h@ $'pB6wI1x뭷ϟ~DE#& P +ģF9cMMfڃTg϶@?38yTsZB@'A$կ_?ѻS`ʕv1&BS۷TqnZ@N9Snv@|ϟ/{R={x@[oTX駟 F-ZH\sM#! NsꐮUVIVD{Qrb 0}t;5{gksI'=#׏A= R)믿.rCe^z%Y4c9:v(~S=  @ |CW^y;!xƌw KD'&5k&:gC=D`--@ 6͡"OO>ASJhϚnM4E*<֩S~a;+ծ]C@ J~wovo\P V/SwnۢE !Q s**IAԻ+^xԪUK "[oEL C`̙v·#8ڴi#'NsC*cH-@Bл\/*>Ν;?OۓW*oz6l(zS/R9 h'Tnzj"WD+w^;D'<_tԫWe yXp\tEޏ]믿홭I3f/<{sŷ  ]TA@t2;SO2azkP2}v״{}'k @Əomuvm7[EIk k Mn~rQGŧVa}E{hi`Թ+zٻwo{AI֭n~lp@afSk#<"k'()@ *G_/:oҤIv>ZvC9X`rm)ϖiӦ)!@9Uu3@?_y-[[2R4`s@]rt> ct? @8 FN@mFqzmŶGCo=Zt A kS>쓽S2 ATV!@E˗< 7t̞=f_:g^T6nܸF,ɓ/?ҡW^yN fC@b w0`۶6ړ_~ry1L=3o<_ՖC ;|O"! 8/y@ -z!￷YkeTļU_7tPJYV-9#mP]vy;F@ aGkd_I}]{MS5^S^Vߖ-@ :SYR%)A{vϬ^|v8@tbMR#{MO+AN P( HQO \aÆٞBzg \Cuf~z酣:zl i)ŗH S@\ ^WT ؠЉoJwzh" 6<t.5\[@PNʑ… Ťڧ,-]4u:iNz+7 FMz"лߛ5OaI?qӧO3 Uщw_W&lR! @@ :iӦy9Iһߺk 3D"aNzO?z]G{ҡCgos(SqiE#BIù6RUЀӤ/͛7_vw;]ꄩ:4@Nz]uh[`Μ9e޼ygZ/2K*F@oN)qƌUSl^WlF:]Ѹqc{=?\Pz=_Ssk p7(Lǎ^_\gH @ *#K(U/S_ݯSI/WQ ^yyy_%ÖմiS_]̵^;lC@<]5`z+^a0U/}Ԡ^[T5۷VZU(#-@pGtYfy/OR{b bAi~!-Z$_Ru  z5 }e-[CBko([pP  cS9gw {53^ꯕ\ذG@ I@'`OzBkp ^Tx+r"   D,P+(@@@@BS@@@@ jSQR    @hSȈ    E)@@@@ TdD@@@ZTԢ    ZTh*2"   D-@p*jQC@@@-@p*4@@@@ 8(!    8    Q Z@@@@B  MEF@@@@NE-Jy    N"#    @<@@@@BS@@@@ jSQR    @hSȈ    E)@@@@ TdD@@@ZTԢ    ZTh*2"   D-@p*jQC@@@-@p*4@@@@ 8(!    8    Q Z@@@@B  MEF@@@@NE-Jy    N"#    @<@@@@BS@@@@ jSQR    @hSȈ    E)@@@@ TdD@@@ZTԢ    ZTh*2"   D-@p*jQC@@@-@p*4@@@@ 8(!    8    Q Z@@@@B  MEF@@@@NE-Jy    N"#    @<@@@@BS@@@@ jSQR    @hSȈ    E)@@@@ TdD@VZ%˖-8A@(`S|: P,ƍw뮻YEю(ͯ*W\qnZ4h`us:ꨣ[@@S- Xx_[Jج\Rw_y~g}&' >\9ү_?W(  P$@&裏z&MH=d%Kĭ'F &ybtl  Q R@@ P>_~rxy  P9Uǟ# Yfy9C#zow6mXʏ?(_]OϙtIϭ+VnځYuO?Ԯ[guyϨꫢϜ9Sԩ#zh|s&ɝjղ>SYj,z_?)'|"zGEM;vu?Y۹fɮ*z5\3it/j0m4q狫=eYkn3e˖.'M$=նm[onok[oyRQso@Ȼ%! e$rR=nܸ gS >6\iXGoFo\{ SO?=a1^^y}&e"a96&Ya[`I}nUo+ͨۙࣷ>&08zT7sCwez.yfr2k׮83&W`m>?iun;wN*gܹ&5,тg@b$ 1 UA("_BEJPƍ':oYWO<)aÆJ/z ԀN5h az$Cvm۷o 6L3 ni4ޓ'ON#6ZVP}}R&~N= kscԠИ1c*TX+/GqӅt/]s5r-C- Pzq%Lo۪(F3-a.Ç',X`'˯  A)3l&V[y#z=Nn_K}^x w4~{ڋH*fL-ӎ=W_}t`B{.^6fHdɒ%ܗ7|3m0, i !@6~6C%iO ڇ[fg%Fei/9{[q)S)RCW 0C .vр;n{~nqңsG퍖zlu=/6 0Cc+NzI۾*O9upj>3:[-=ϴ7?pT3\;?H5r瓾IۯJ[Gy= 뗸馛l7ϒ۹L@8 Ѡ. @tIޗ.]$4Dž~S:\袋>^ f&E^Ҡ{wž>i^ h% W7 ^SnݼuLKn/߀*d[:'(yf), Mj^{ä6SW\q. yfI:$k׮^^ *UsKyA E0IMz+[Cr.=C^s#_3_T ua`eBrG *:B>KgR  gH  Ӧg-M2<$:&=q93KӫN^֥>^pbɥ.=PoNmzO̰B}dSh$Dʔ':K:xt 'nE'ի̙='Q³%-$:qky/?]=Iӥ:JsO;j=m:Q 0wūJδ 8>$ϒl @b&@p*f .`ޝKtG4_3>}xAtO>do2=O}bz.^\n ar/+ Lo wMvDYv?2K! o:G(.㒿W[ؽ{?/z[LIDuֵ=A6f>,[ѧK%3L= |g'$ J01s-[p(yǃ.^XZR֨MRY|\r":ݣFVk4h }*I^.`'f^+KMzDsOb;0}4 Qf}g"(D{x9pVO{j/3|՞[ipYg=ϒlsB@b"@p*&j "lơ)gye\ve0O446i&+"&LCtSuqi0@&MQ֣i& {ݸK.ҴiS1 u)ͣ \x|bH5HzJsJyw_~jnfO)iAY2LI=X N@_> \_O}ϒ۹LJ5 u@9_\ HɔL䆃Uy6Vf݉'(>m`J{wF `{。V@Y&T#?B^7V{sG[4^\zhPI Ji0͙Zvn_˖-m/'|RzJiPKs9ҞW~\%a{vl.͛7=0!f2z[1$v:@bT1]چA@ѹ]4~YMWs[%[nRewL7hE:SC>hcJ_ui׮h7DMT(E}l[4)C*K%>5ۛ_r)2i$ѡ{&ܹ;Ay"rzr9O'։Ǐoۢ2 TN[ Sk_k Ef5rm` ZuT%q|o{  *+Ţ  @$eA@BzCK:g;. :پ N!};CR]4_x\V / ju 9:D0Boy]$A;ʅA@'ϒ8Y @! 0uE @?P5/{ <,tTnet)S"N;˛'Ql_?7ד?Osv|=7 N\^7Or?kJ{ùu.>>rwJEjަj&à2O?4uO?t-JA\-hYT%q|oe B:Z(g 75yuWJ4f;N<6>$]^]>|pK쿰=2Wu@@e^2vQ*q!O^z?jog}[c[<ӻ% i*ICn>^zIm..?WM'o;<" P Qo@ z7E9smoGk@z+%]vm]btN?_-'O[nEvi'qhܧ+;[;uum7zwY iܸ[7f:|Q'FdAeK3ݺu38O.4s9I{ti֒Ϯvw^R;йm]o*큤A,+ J: +C ه'\TO=G_~e;ז}Pʫ߾Fe&xqx{_{\V'EYvu<@yH D.`J%:蠄ߺ뮛4h| ˂ h^L/ +B9&Xe7C*/0!o?UZ_Wӛ[o&NI}4 $$L )޺w/+3$Э |4镕~lA?,'Bpt?^4Cl|A yG0=ּah f?|`}{ZRM?Kގ32# OzN+ @sDhύK:uv=EwpsJ%eHyѬY31_T{=AѹW3Kޮ"@țѳc@@ >S!5A@b`X_Yڅ   8HT@@@(VSzdi    P QE@@@@X]QfIg_&d.e8Gf7  y䑲;[# LՐz VB\.MȐHe5,@@@@T5s")zetBX&f '!0U N6A@@@ 8U}= 50uYzL3@@@@rSa{wۛaBnSHX    8@4l/ G !   N ecʣ     PmNU6l/HT @@@@ dp*창 NSA*,C@@@'PR $02@@@@Eΰ NSA*,C@@@j&Pf%jVD(WLWGj   %z3ۮ#۵-+Wڢ Nt^%VF@@@j$о]}Wʕ+UF67 駟ʷ~+fu(@ 8Ut! @ 8P&L`uG*8UlA?He D',) @@@@Fv@@@@NEgII    U`Ω*E섿̘1C6pCi׮31&Mri֬m)S7ް$_{ҤIJ^ dҥG| _|l;M6g: _}Ud̙RN` UV֣QFS˗/#G7|#gϖ~ZnFr!ض+:mseUx3=~'믿,;v~˖-Sc2of뮻Jd5T\^Λo`M}ٜ9ssΝE:6N?{챇} _u4m4_lqx }ﯵZv&l"-[σy8o<-m}zF&tjC=b\pl6n&͛7Oj?|6~ߒtIۊ+mV^{:~vhM6U<ֿ) ,e鹪Oe/l[m&' H@*``%0_S¿[/sϥRlE1a'3w\*yu=q'jժT&x0_HmA> ݟ L%>ğt:>g}&XnUۦxV$e xmҺ7.apzm]v3H/)⼉ ښ(S1DNMsαY^&uX=s<(Eqq?A}L@;K/yy.T,&juM`Z{JӠA& Le;W#MD'>7]۽2oƤl59zv-t/L@n7͏9^\v@ HĎ@0*۷.kQ!`z% (h`} NU\I_ۓe_+44f̘kIڟ4xd~;.az3¾}&KְaÄ顕Po#bFqSE駟r`I>]~!DUyuaQs-Ghzx$jz&-ӠG-mSSMT?_G ^{uYƍ]w,T:\|Խ빨~7_|Enin/{y~x`>]xAyyMϥ|59M)wOOU|/4yo/(~!vy]v (-tEyD݆~<֠>z-$֭k]9Ʃu2CmFd}_9OQS>F?4ȠOhGBNEqNGqV wݦUVY?}ojŽ/j;s2^io7fk%UX ӧWn-]t's#>Fȍ@+엽 E/"ܗNK^! f&WThysaСy nED0%ҵkW/[![}w}^9:l/]z衇BK.ס#^ 70`@laۦFu+T"`?<餓f{w41Ss,&6Dut2qA!mRSTur^醡j(C=A.] JOW.>FrjzNGyjATGKngg ̗iuFmܰLwy5薚nW^:iO}\aWGj}x WR/{AZ@_$WMuYޅ{9 /ڻL.0y5ՠAo!SҞ0&eOyg&_sOePV5J>(/Nö-] _uȥ)mzNigMmk wIV{./OQɕJ<ꫯaG{IeJ^p] N\| uzjҞX3Tf" a֞s?7W@?x뭷.7qD/]t)W?xDȽ@-󇈄 EޡI52ލO|`nVx4=T!Y.\̯vtLv;]NZyh M(5uNEjz>d\J;fm. ;CffX^; ￿6[oUaW&8f]>|(cO<8=o. Pw_1wJ{dzmz{Ԃ|:b&J3Ml2-[;") 8%_^bzjW1Һu͒tϛ!cnLp(y'f x6K*dN ΰ o0{as_ʞ9R9ez4COfyDpp͐>1 3hQ7~3nvac/2@KJڤ}DĚ4@֡Co}~x;  @N圜"@).^3b*I(K A5z۴i=%˿}6] 3Eg&-o}B_t~fj+Ȅ zOcIږf~0ْvyejr̿;"L4D.IMT^eQ-L c'ly X٣5 ԥK1s3On.8y4ipJŋO|axzj+]yl-tkeOLF>~$U Y=@/n(v/IdEig믛$m|y2kٲE%/Gf1wA*̭6ң 6_r|A[E {r+k[:0;ak&[{@o'o|H-ڟϿ?OTmk>kӫW?dCȋ@o?y;EKܡk9jR4d*/S^,,o&>˒R.B%Wy_Fi\P>MZW^p$UֶlաhaSra~2|Sմ Qs 斥>p>?'(EU-<d8__^5=T>: L]p a=]v)8ۻ;ǎ1j$P!‡+ @4@)HZ/J<$ KCmT hPR $!ę̮޻;s3gΙ{={y^ vxSq}]h=u?8{{, EL#- Wf@!1ZMntgxr?xEk*iO53~]wݕ/_f# u]!j_%Ԛ5kzi9w?1O4TS]֛^C[^9{gBih 3)Atuw3heѢEivSxSV]^tZME j_6^10… b}=VGydQ}~lR  02Q+$u]K;&O.T=c&]v٥<p=榛n.Y Qߴm㪐A7s42ϏʷF, Б@PBc ~N?Y'@ ̋򇓅F aÆ\>f<GP|cA4Op{fTj?ܦy+(bc\6*c6ӪWeĀ/Rw}S2T>CR TK~pL;C1W0v@2!j}Q1rPuNۨ?1U6:f_KWT?k0V c`U5YmoNOq!qޞbfxS6;0(>?>  @VeBF'0Q`gtg0f5D"{;cㅾ :묔[5? \r%n(7+Nk 07n &@ D }٧l- Uֱ!ZNYL f\bExM*jY}{] 0@W)~acK PEsMyL2mts/ Zt@тB @R WZluiz=^8jzիiٲei|C&q;r,/]eɒ%), @@pJ @|%gK/bقj͚5)τ>;Lym$@K2믗?oz&J[T~>8!7 Ѕ@4XtiE(XJnV)fs=bgCF(b? 1UW]vm@Ǐmw37[߮Ky$}ͻO @ @- ?MziNO~4/d9SS4yPS?7}g @ Х@:WLwzZ|ߧǟk.SBE趷o20ur @ @3On_eZ|?hlRlWIn{uTt[7I-0  @ @`F P'`Aݯw1 NmO/i1Տ6 @ 0#& P}u N'WK[bGa @lQu&׏_`m @ @`4@U^n9^?y~* @ @-O`W_yN׏Z`m @ @`JZ*T#b @*^iUYu{+SϦ` @ @  46ͬ NMX @ @.`vKeN~V/?2NY @ @V l)^- ̪Seni>T @ @7/m;=mw im-o>+Sʵݗ>@]C/:5jPIL @l&}/xgS>ѭHӂ]5|⁳>8Ub T'RbCkm+Ӽ[| @ @g6l'9oOr3Ңo;K9tKZ'@ @[SUukTm*  @ @'0l`JNUv @ @-K`n{S}'@& @ 0& L7'85 d& @n{& N hOj@D @ @fmo3݌q N~ @^`L`*8f;vlR&$mwz7Ln=\&R @ @T9 uzZ|ii.,NM@pjjnUu>/Gb- @ @(6|>}讴pomw"Jnj䱓 @ @K]f.o @ @MSM: @ @t* 8)  @ @t#@ @T@pS^ @ @4 N5G @ ЩT2'@ @hjұ @ @SNyeN @ $ 8դc @ @@Sʜ @ @I@pI> @ @N:9 @ @@T} @ @ Nu+s @ @&& @ @:W @ @MSM: @ @t* 8)  @ @t#@ @T@pS^ @ @4 N5G @ ЩT2'@ @hjұ @ @SNyeN @ $ 8դc @ @@Sʜ @ @I@pI> @ @N:9 @ @@T} @ @ Nu+s @ @&& @ @:W @ @MSM: @ @t* /fIENDB`actor-framework-0.16.3/doc/tex/index.rst000066400000000000000000000011301341123343400201030ustar00rootroot00000000000000.. include:: index_header.rst .. toctree:: :maxdepth: 2 :caption: Core Library Introduction FirstSteps TypeInspection MessageHandlers Actors MessagePassing Scheduler Registry ReferenceCounting Error ConfiguringActorApplications Messages GroupCommunication ManagingGroupsOfWorkers Streaming .. toctree:: :maxdepth: 2 :caption: I/O Library NetworkTransparency Brokers RemoteSpawn .. toctree:: :maxdepth: 2 :caption: Appendix FAQ Utility CommonPitfalls UsingAout MigrationGuides .. include:: index_footer.rst actor-framework-0.16.3/doc/tex/index_footer.rst000066400000000000000000000004331341123343400214660ustar00rootroot00000000000000Version Information =================== This version of the Manual was automatically generated from CAF commit `903f801c `_ and Manual commit `a4604f9 `_. actor-framework-0.16.3/doc/tex/index_header.rst000066400000000000000000000001351341123343400214170ustar00rootroot00000000000000CAF User Manual =============== **C++ Actor Framework** version 0.16.0. Contents ======== actor-framework-0.16.3/doc/tex/make_index_rst.py000077500000000000000000000014041341123343400216170ustar00rootroot00000000000000#!/usr/bin/env python # Generates the content for an index.rst file # from the content of a manual.tex file import re import sys def print_header(): sys.stdout.write(".. include:: index_header.rst\n") def print_footer(): sys.stdout.write("\n.. include:: index_footer.rst\n") part_rx = re.compile(r"\\part{(.+)}") include_rx = re.compile(r"\\include{(.+)}") print_header() for line in sys.stdin: m = part_rx.match(line) if m: sys.stdout.write("\n.. toctree::\n" " :maxdepth: 2\n" " :caption: ") sys.stdout.write(m.group(1)) sys.stdout.write("\n\n") continue m = include_rx.match(line) if m: sys.stdout.write(" ") sys.stdout.write(m.group(1)) sys.stdout.write("\n") print_footer() actor-framework-0.16.3/doc/tex/manual.tex000066400000000000000000000106051341123343400202500ustar00rootroot00000000000000\documentclass[% a4paper,% % DIN A4 oneside,% % einseitiger Druck 12pt,% % 12pt Schriftgröße ]{article} \usepackage[utf8]{inputenc} % include required packages \usepackage{array} \usepackage{capt-of} \usepackage{color} \usepackage{float} \usepackage{graphicx} \usepackage{hyperref} \usepackage{listings} \usepackage{multicol} \usepackage{tabularx} \usepackage{url} \usepackage{xifthen} \usepackage{xspace} % font setup \usepackage[scaled=.90]{helvet} \usepackage{cmbright} \usepackage{courier} \usepackage{txfonts} % paragraph settings \parindent 0pt \parskip 8pt \pretolerance=150 \tolerance=500 \emergencystretch=\maxdimen \hbadness=10000 \pagenumbering{arabic} % custom colors \definecolor{lightgrey}{rgb}{0.9,0.9,0.9} \definecolor{lightblue}{rgb}{0,0,1} \definecolor{grey}{rgb}{0.5,0.5,0.5} \definecolor{blue}{rgb}{0,0,1} \definecolor{violet}{rgb}{0.5,0,0.5} \definecolor{darkred}{rgb}{0.5,0,0} \definecolor{darkblue}{rgb}{0,0,0.5} \definecolor{darkgreen}{rgb}{0,0.5,0} \input{tex/variables} \title{% \texttt{\huge{\textbf{CAF}}}\\ ~\\ The C++ Actor Framework\\ ~\\ ~\\ ~\\ User Manual\\ \normalsize{Version \cafrelease}\\ ~\\ ~\\ \tiny SHA \cafsha \vfill} \author{Dominik Charousset} \date{\today} % page setup \setlength{\voffset}{-1in} \setlength{\hoffset}{-0.75in} \addtolength{\textwidth}{1.5in} \addtolength{\textheight}{2in} \setlength{\headheight}{15pt} % include paragraphs in TOC \setcounter{tocdepth}{3} % more compact itemize \newenvironment{itemize*}% {\begin{itemize}% \setlength{\itemsep}{0pt}% \setlength{\parskip}{0pt}}% {\end{itemize}} \begin{document} \maketitle\thispagestyle{empty} \pagestyle{empty} \clearpage \tableofcontents \clearpage \setcounter{page}{1} \pagestyle{plain} % directory layout \graphicspath{{pdf/}} % custom commands \newcommand{\sref}[1]{\S\,\ref{#1}} \newcommand{\see}[1]{(see~\sref{#1})} \newcommand{\singlefig}[3]{ \begin{figure}[H] \centering \includegraphics[width=.6\columnwidth]{#1} \caption{#2} \label{#3} \end{figure} } \newcommand{\experimental}{ {\color{darkred}\textsuperscript{experimental}} } \newcommand{\cppexample}[2][]{% \ifthenelse{\isempty{#1}}% {\lstinputlisting{../../examples/#2.cpp}}% {\lstinputlisting[language=C++,linerange={#1}]{../../examples/#2.cpp}}% } \newcommand{\iniexample}[2][]{% \ifthenelse{\isempty{#1}}% {\lstinputlisting[language=ini]{../../examples/#2.ini}}% {\lstinputlisting[language=ini,linerange={#1}]{../../examples/#2.ini}}% } \newcommand{\sourcefile}[2][]{% \ifthenelse{\isempty{#1}}% {\lstinputlisting[language=C++]{../../#2}}% {\lstinputlisting[language=C++,linerange={#1}]{../../#2}}% } % highlight for INI file syntax \lstdefinelanguage{ini}{% basicstyle=\ttfamily\footnotesize,% % columns=fullflexible,% morecomment=[s][\color{blue}]{[}{]},% morecomment=[l]{;},% morecomment=[s]{<}{>},% morestring=[b]",% morestring=[b]',% commentstyle=\color{violet},% morekeywords={},% otherkeywords={=,false,true},% keywordstyle=\color{blue},% stringstyle=\color{darkgreen},% } % code listings setup \lstset{% language=C++,% morekeywords={constexpr,nullptr,size_t,uint32_t,assert,override,final},% basicstyle=\ttfamily\footnotesize,% sensitive=true,% keywordstyle=\color{blue},% stringstyle=\color{darkgreen},% commentstyle=\color{violet},% showstringspaces=false,% tabsize=2,% frame=leftline, rulecolor=\color{lightblue}, xleftmargin=20pt, } \lstset{ numberstyle=\tiny, numbers=left, numbersep=10pt, xleftmargin=20pt, %framesep=4.5mm, %framexleftmargin=2.5mm, framexleftmargin=5pt, framesep=15pt, fillcolor=\color{lightgrey}, } % content \part{Core Library} \include{tex/Introduction} \include{tex/FirstSteps} \include{tex/TypeInspection} \include{tex/MessageHandlers} \include{tex/Actors} \include{tex/MessagePassing} \include{tex/Scheduler} \include{tex/Registry} \include{tex/ReferenceCounting} \include{tex/Error} \include{tex/ConfiguringActorApplications} \include{tex/Messages} \include{tex/GroupCommunication} \include{tex/ManagingGroupsOfWorkers} \include{tex/Streaming} \part{I/O Library} \include{tex/NetworkTransparency} \include{tex/Brokers} \include{tex/RemoteSpawn} \part{Appendix} \include{tex/FAQ} \include{tex/Utility} \include{tex/CommonPitfalls} \include{tex/UsingAout} \include{tex/MigrationGuides} \end{document} actor-framework-0.16.3/doc/tex/newcommands.tex000066400000000000000000000000001341123343400212720ustar00rootroot00000000000000actor-framework-0.16.3/doc/tex/src/000077500000000000000000000000001341123343400170365ustar00rootroot00000000000000actor-framework-0.16.3/doc/tex/src/actor_types.graffle000066400000000000000000000074551341123343400227350ustar00rootroot00000000000000]{s6;L4ŷqqlvωHIh ph7$ilGg,X?.}u5 >vԧ 7ۍ^nt١2HȔO۵dZs; Q{<16ij;S8t Y@'8`'P6dqJϰO]ⰗOv= |qpjƟB"ॺ[g1*9΄/OvC+w'ÀN'; wk3f7w:ۆa)ڼ舅){!f鯑sΫ]n2"NL6{i1_[z|,hd9=3GZsYy (Ij*9J?eVػ4;ТqS̿%_6 gJ+H>/Px!Idaޘ-]hp>\ԛ= WZ+Aݞ 2'.UVmYo\w1ɹ?B aY> 'n;+Ԯ)W~U% pzRȂ@9B 3c6nBІ3A9hyV2 sB|\Q#\,%1vFcZ@˨YDUyF.8(~q;Y׷hf࢐.KQSXq턵@)4s8B.L7^BP*2TI7o9\"?=9G8 e?C\gǂ'BA^Vx1z6ª˄5GP]N:hA]*]itK3/PJn/IvFRǭz*jzYJ҃Gwփ6@h/㥦77EhR{&ؕRkV܋忣 ϒe?:_19*cYwfTyIWv6кp&CMCxM8ýYW7vgujw^0yR#]`F(H_tKߛbUwˮ,[OMnP)HLSX bkKpİ?@~FIJn*]g*/fo| 8xǯ:_M?yE!{GPFʺ|T}@꠾#Nr>w %cB^Vzs4C9]/gs}2wYN@,{E1GHSE".lE$yi,I.~qNy[ћSŸڠtv3 J)rdoJP} ԇ^1A@R%.:ylT Jκ=PXF!EC EY hlYj<̀ 4#k #gKq,Yw9X8Kp>,ZJRO 4ך-E >E4($ ڛZʘ`RO^^\ǜI/t҇hȠ ѣ[LA 4r%3P& GD?7 7OC O 1/YkAyA9hszGtK,ʐkN oq$6Xc& ,퟇=| WPEC/ hZM[oa4lk;ZSۀOYDFOJ) s[V-*}[5mnߪa֍)y"YQ?0Q4*rQ > 4?AiPakf=+]9]pweU4}1.$U8;SlmC~n*n=̀uh6vfPiƋĦ0{( 1Y\=K+{ ?7{^HBsVK%'JD-_a5Ֆ{&K}w?)E ¼ Q+T d˽oW$: _%x oKTU#%v :[XT2w\ؿ̎w KaPI\d0V0T,8r5a _4(*/,DWhcCt<ތ6z bǻm  ڑjEik``ȱ^ F`Z0T-z!܍*rۍ vzmHquuBry`zlvO9N O,d×f"B1CC1ڸHEER+r*瓍]z#:PBᖋx1_Qgkz81fcW!GA$: @P$;+jT(Q~Y^ѹ'O}4NM}%5N1ޜMvCI`қtLBs"sN^ `P# ;SE"2OХ? &l)W=^Rc%XCν, >T*pm05*FyQ@J7`TW{>)4ZN!]bX\*( Ɛ3ڜ@i)эxpgS Gɳu !Bo0EG<bLsMjce>/M=YɼX;=VcG]7aLN`tL\ *gFI٨P>;mTo6T݀"W %,˴l3<=;A{S qDB]2s}y۪7MmF˨+ytu|@'> tH|w: iÎ 3+5ty-gk[@ƿYy"wSpYQ G4 Q PGN9^R={'M}}>>{8nFTKsp~>G=H?:/?S?͛+rᰲ3s J]JѶV.΂j.Prb~QA5mCl ,K{|C.Qs {NGYqc=F]/ǔ2-0x=Aa ;j"пCXŒ#Dd9\b߉nOLqb/x!> 5rS8H|">xr(ߟ{EK&TY W䃲&NYr)_(x<->oV6$q t hY'⦭-Ւk{~,![N=f+n Q e6oC-iϔ6gNyBgHxRRz٣Ǎ:@Q^n3actor-framework-0.16.3/doc/tex/src/mailbox_element.graffle000066400000000000000000000037641341123343400235440ustar00rootroot00000000000000YmS8 ǧH,fB%nRE)hQ,L`ײ5U*=nw'>-PܣÑ}_FBܞ]^tf4QW\^ G h6{\\V ,Q /$0jBP<_#wjsWt<]AKL #O'M+ R_ OՓv3tS yHN'0f$!,,lOg!_>} tʈu\Crhd9 M54;9inD'&,o{/#bpG@_0n[/~ h3z/![5l1[ r송1-Gw,V#u̢Ҕn߸\{? 3#rdDl47wC wne7#7C:Yl9ٌ!N*"o3:+1z`D`vC7(|Ţb"H5T[Qcd#SSN ay~/OC$G] ?]*!᣸ 归ޗ|d UarA|QNԙZśp$7E1~i3F>J)i^~nV*)zneZ\f*m,:[wl%yNѐf-@Eزq@`3#$ aV;Uݜ9UF~j2EHqX lOas_-Ze+ͱWtH5efNe-/R@e*6قǡ1#sD6v˱2T#-'c<6iQ4@rN7"c@Ci9f–8ɴT_,[^4͈/*/Ct'F 1B1j+E : O K'`f(cw* Lل?=F$TXm3)Ooߢn6ReiV1"6V1:V*?U ?C[H(wJD YPpNYPXY(3@=S$>:V<\}c.8;VZ${Kh -kҌjk=ۓmp'{jgLk8e]LK𧼾;.`Z(]u+Hf^yX;=-՚nWUK O>_l>.GK>\8)T{9x>Cu`9~wB/v:Ŗ?>È0«U5^*2V*|_w!.v3㎒՛b8X˗b{}ȵ[ . ]~En[Kcx6KxgԯqQ1Ɨ%/?MM>cx0Px@w L|ܖ=d3? {sft}Z9Bб[)A_8쾦~(O6hKr:zv|ޞ93._\0w:nDOǢ{s8D9wBt"垤Egm;>#}8m㷳.y{޿UM4Y{[e>9cmHھ﵇_ቭ:_7Lşq_?F',tR+Gidr5C5,]3-Pi9JeytOjR?aod3ă!F}"cKqCۜrWBtGTT*9GQzlm. I z{\Y`%Mo}uIF ] {Cþ;0G5z)$z\=kq@Rɐie%G?:#D5/dc7|DK,,Y ෆ練/ҧZxȽ!Ós"TYV\?oȬa# ,]qCEWQìqDZY;̖6o^ dm?@>$actor-framework-0.16.3/doc/tex/src/refcounting.graffle000066400000000000000000000106531341123343400227160ustar00rootroot00000000000000]YwF~!c/9Zع{{t 0"+>S R$6RLqd BDBO{0JS<¤ǿ0}ۻ ׯv`}ty=>fsqqN}'8A嗯 (chfT{;k/},|暋A?Ğvp:Ȳ|tggМ$K[8) P=EJTY QyڹNy8i|,UDlI& |M*Izݴ%љs@0|rpuYn=I^]Q'arQ/NgaΛV 0:^]U?8 wsh3kљQr6fg~ N0wB&u&"0:7 &Rk;tKsnHz{J?=z!ނ;>?![>>d^|/v~q5 Yp^`#bh^^f-|V8 yi˾\ӨӾ!(97G'w]TSà6/6d-jYџ2^%ӤS@ʖ޿χyqTh;9 0d':Ta?'As QC!V'LR jw`V^GӾ5-z;w;"~FPyzVdvoqS ӴS ?Ȋ\=ITwZI2 >ZlI{ ;)6~,&p{ n8x}GorXyΟ.U2MM+IVeih!'ժB/0oVX+Oorל:kU{ x4CATz\ѕ|gTEGZ~8f;u+5ʼKݞ ZhùtAUFΌR/m0ɓ٠'S;U*)bwi)&ZbZw\оpr+uʝiEeY9:j3 ZqʾeL "$^ʖlT<ӼnQ<{0NfAwURĩ>-t-7+og\5Q)}K&Ǭ j7'P 8?DJ.4pL%QWe,L2e+_Yf);,8c ". a56&o[]l 0 ǍpC 38K+xИA؛8ȹQn9%WQؿcEu gp!!++u>dF ky#Kv+Q@1A5\`یS>% ˏA OwpB7:4p33.G198N"]9&N< v8@,1)N0LQ|7H w_JYC8y!m!ΠKBDiqFYYu?.&A7O3QqC&1,[i 㫞H+-Nf.`ip35Un0KԜ:l FYB e,/c] -oׂڦSh^Жh<7.\]ƇGq=mwsr+eY D [o #ĂVm4JW80h]oiW.Ҍ x%pB"RelB"  " μ,<nzA\a"ύd󉧕/)JĚBCC3s;9Y9ҵ+Kw3YՔ@-ߐqzԫZ: h$Џ JH[k W4QDH+}iz1t%[HDFI0 "t;y7 i'NvQPh p OmõPpIe+]m+Ri͑(XH|~A|m%QD4 nu_d¯ph {!؂\j+in?ON_4oXXar4ìCh㆝/Ap޷q\j;UI^܄(lcIkq.}X wtHtD:7y3DkZ87 -[5sGr-_X;"+k. sK4+'Y.TVJ VQT{T _ /VZ6'm\G11"(ƴ-1s^o$ʥ*a(ᘷyw;!~#c`bardTT~ݻ ^2>:3>cllfṘd kXDE}rvzG%8Lǜ=TPMD+ ei dt)+1mv%<ڔhYzq滙.KQq8ճa2roy*ϸLfW2]CF1 쬘eBkH$p qr}3!rL03r+\LB&$DqBD*;Bsa93\HVYj^|3/5vM  TkKg,k~ jAwesTT N͚-(A"##/)rx ꠼jk|9PDM/I{a[W}kḾ111|YZV!.S2\kF]yA9nK0s jg+q:n]l Tn؝m}5}5謜 j}3^Sp[ V[ɶJ<)'B_E}5 ' HVQ3jWaqcHN U1"jb"%Ak h*Sj%y 5|# nxnxlxF%lt0UQއ[y lUiYA UIe'3}.(S8rCγ :] uO 酽5鶍3|Ak^/w$u'n]1P)8f < ;1t ҼtG/CNʪT ƀ:}xRk'6Dvd0+|r'*,Zȇhq=B: ̯|.$k7=LF;h.7c~bQAactor-framework-0.16.3/doc/tex/src/stealing.graffle000066400000000000000000000174761341123343400222130ustar00rootroot00000000000000[SGǟG>)~a4-ydI#diAF)P.\%.M'e8 U9y9p1+wyndQ7ϯtwq=z_>8ˍ??xͭGGlkG/=yAilm=~~w<֧O4JFaxȏۤ^wPvo<*r1{~Ίӽ-=O +gQ((-)7#E>. z{T$?(yA~(IfNBsm/NՂlo%=+IqyuYd[g!ew~<:vBgw㻍߹ Τ㏅'q;N>smDyhVEgvϓl̳daxQ~k^/š=O:<~$a:(,UfUZkuފON'iT]*Q:$Y:'IgAe^4c~xfQ&Q:iI0l7qIQ+rJ [ӣ|trMf;v qBG]Eq>/ϳ4ӗȧ~/z]|> ]M?L.jvs5B͂[ 2oDqS۬hѤFɞhŒh\+ފ֐OU)YDﻅߏw^E]l]P[s ][7$?jKЩ[yʸؕTs u4N3Dgɵ$M3dp%A:/*րӎ<@PTǢr64;˔Pog6 EBΪٞDg@PTnTuTkG*RT 힦ZU% HRݞy*'甲 z;dbVIzHJoH*yݤz8.F)gWє))gL(6 #o&+žzlO\ښF76m@6fwD0;Qi hڀ(Yp`)2[G hڀU3Z̵Y hڀ cm@Emsmhڀ6- mCk hڀ6m^%:.9#q|wtD+mhڀ6ߵ\%d1Ž+.6m@5 m@[ܾA @-vWN*.D  -9qH% ϜPg hڢH h 9NruD6 hZ m@[ g hN$6 hY l [0_ hHL)Ʉk6"m@@:hڀA @-mpFڀ6-jtd/lq @|6 h p9 EQ$_ h6Mhڀ8 Rg hڢ6KH6 hC.!UpFڀ6-mCThڀ8 pg hЦUxŵpگ#m@[@6 h:~h7mqWmFڀ6-!MhڀA68#l O6`ps~ @Ei4 @YmC8Chڀ8  g hڢ6?46 hCpFڀ6-mC8Chڀ8  g h6@-AO;Cr8*` %ļ%}>-Nuזݔly XL4ʓl1 J񗆐Y:VOX]0^QJt1>Bqa]R[iRd hڢ66{l6 hC ڀ6-mk=6@-^#`K75=6@-q-d6)B 5 h@6 h6hڀ~qX΄QOJ mFڀ6mABqLI'rEFڀ6-j~'&8Y&mFڀ6-jth7mq>@6 h;rh7mQ+@6 hZ!m@[ \hMc˵D6 h[!m@[ o hVH6o hVH6x#m@B:hڀ~0)5qf@68x#m@AXmFڀ6-mChڀ( Ro h6{H6 hC!uFڀ6-mC8@hڀ8i(3^q-k6o hnm@[@6 h=~h7mqmFڀ6-A @M{OB˙wh<qFڀ6-PaXmFڀ6-j@šm'xx#m@!6 hCNp @šm'8o h6?7mqhm@( ^'<ҨTr9[Fp"K/$յ~ 9mt?_^ymhOmVPO<&nD*iHY{Շ>iYkxE,7h ElNտ!gjҢHg䩾@7R)=fe@ԖlO{6-˱Uӹm0o.eC-fⰯ b'WwѻeB-t9m0ѝl&l%. ׊ غ(6h Ҷ7։$^*%%c6QL {1%)` 5!S ۃ)f湔FppoB 9B(0PTT]ԚqʀS8ugScOIJ2½\5N/<޼(?i6 `آ ` `LUK͵BA̱Zl[0fpf lq`N,6-lc-18%#i74q6 `z&D҂6nN6-n(:`}l<6 `[.O sL6b`<6mɡB"!0 uVaLY8k(J8KL8@Ȏcr `آE68l*:`s&68l(:`E!p ~- hLI&\C`E ~-?6 `[xl[ܢ `آE5k5%a")-%s؞wl[``8~Em:8lT`8Łmp<6-lZ%xW\ ]?`k6xlw  `⮁yl[5<6 ``^)cta\yl[̩EC0xkZ{x8l?C08l?C08l?C08l?C08l?C08l!6 `IX%B9c<3oi<*-8ATVH/$>l Yy}d>OkxG{~nKR,&I6vk%RKCʊ,b{'-8vwWԽz]pnFP$6$!K0Ry{+-tZKrQ)=fe8blO{6-˱U{ӵ-0oN٫9KLpGgVԎ'{m j5֋:ٸ\TH}6,nIq\ѭwE-@?NdNO)mj>%UW˴Z*a9tpy9ܬ[UݢO{ZݲX2&9$f6@ >M而';Gy g8>yG}}dwOw>-m,=(vlOh{Pd4|x79/QZUξutN}S5QXo m[PΙ9.@9xiS2'4s'Ѱ)g$4 =LkŽ 1ƨZR22,6NY/=(UP Bh;TY ᅟ_[;$EH?~K̉"|ר]^72ͯ|ͨݼ\3mo^[C]縒M x'rXLizgVSTTS}{j5:cqIE+˗4k̙TImwB6 04+^{㓎TEx2-ˬ4'5*MF9!TDZG*U UA(vcx-;.iyRs;nXcnCYqDr9敢6QZ80^j? +!im؊L3}O`vfqKg:b)^q 2Ί%?J˴˗9`Z(U ښ-8ߚ*n%pgE- D\[ER4ZkJpf$q7Y!^%לYUJYk UZnYIerbuNbFIFa/ p!3$U)XI\*^+)HIJ)--ƲY jIo 1PJjhSXa~֚I I(mg̲b87ԡĨ$K͆k%tw]v}R9L~ӮL)aJ SJRѕO=  @h}57'UJI#0$)l L sa~k/1v*hݶ蕷S0ݑ:[G7s8_'ʂ#:cav 3h-h- ׭0?}s:HAAAAWB*DR?C6bIآlK'VY:wowL9NC- }7wTM%JJJZf*_'T̍OUrì.sN1I}8ƿB2-W*RE E E E EH +Ҷ҄"QEʡHHHHH)JEzzх^^BZO0K˅̅ͦT >WwD3eؑ(i+nc;Aȡtr)q** }{/Tf-33nƒ`ƚ3CST|nqp`hnQ 7 .2Lׄ.ɫ4'oA8rm&D/@b6[o|l6*qyUUjG L;۝^gwvlݙs5߮cg :hM |C5>V.=֕//lktLˬ%?Ѹ?eCdkhv';JśϮ#e𓪘ZeVa`ٳlzP[%<@^l-# V# X~ʏ+_@T}=݁N#SyVg|.?{}ҟԏj-}`\m2)JoOV^UBwQ~8?l<|qV6c>lwzQiPs]dfpPC}8^!l=΃,ß҂J0"=Mob>xBoM $/_i<hLwd~eɏ,_>=ӝ3'?_޿{fr?|_?ӷJamˋ,/z[(+ۑOgtsN0c+yG&f3eƑ=w3udUT%ﯵ_Gב"x1:zWd뾘N>_̔Wt#6 s{԰#m=Lc0-ʪἉvT?bU NGYdܟ_Oy>Oqtm%v"??xag}*|߿Íة5qXc_m^^M@֦vW~~9(ɒhla Vs*Jx ;.t>7Ndv}ӯEC {̒4l~31>\P4H@QnJn$`8aaw*?KӉڵK~/3PEB3\4VϬZ.\|R54ˆFt7NZIkՉ&:1>kT:?YXMA2XMحOMB2J>mO8M++k:DS\|suC ; !$Nk>[R8\O eQ8fHb6\čޱѹ__Y񤲲aHo5|hcS>ĆSB0XG'|U؍,]Ɠ_ַ %B낢r0* 29Y.g?eэ3eRͼnoKwq@íݸO/糯mÜM-l0Cqj1mmicdn2ō|lkPIm-Q/oGٳIFI|2oOc:u 0ppa̐5,7>,I K=?ꏛTYgrˢ:uw>F <A:dTSSMTx3Vd@D38*B)k^Ҋ@?6zǀEX`6@: S0Oh3yL f C`Ȍ >0f (U_0>;b U$3U7bUZ̴|~ @vAhJ&@ij5Vt#Ag3_b+u0`|8h[Kp9R͸Np?2%s?pH5ac?jmZ2\k`b0wI+>XL̈Zj>FE 93M5,t2Efn kDGPu3KKd|dBG vR?0Y%c IubvTΜ9Xu K.>xm+K$XPRXޒM?ز,~aQN޴#vVUwҘ]}^Rv ްOf[A~db ɢV%Av2-86$+rC0S磀32؈#p[#"\l|ܺ~GĘUCRi=ZN@C՚0-W5v>NO<;&R zZW|1Ԉ;N=Db8]3co:Gh`Z PfQ%{+xQd.{,䲉 J#3u` mA㷢[aDEZA䋺>D\8s|bdkOBܫo/W"-`gK@v^ǡ4])@%idsWyB@6II Ւђ- 1jK4OX XAgz㷙&e=C0? \V#VIdR]U1t4&t_DX7v֛͚݃ mTd^aߗe#?!q.؀0CI_ɹ>V .*!l2Unx0픥Al;! limi&*eþZ|ؑ׆zW"5\ʇ !b1lH8`>mVG8c%)A5u"x-g#F%t.>Lcv4ɚoǥheQ.9tg0-u(JǢNj]kcdkVPe0DL_6g:\i-׍]/1 Z2$9d '+nE59,\CIۓxq3\KvT$.SNѻNn;|7%1nTun0}%hKa {e:CG&iu5ƆR}@ gr16E] {3BwZ4M3n[!੽sDElg8A|4gzޛko!PY]ZF{,`n>bbh-P3cV*6Y2REMxlsFͷA:6gc,4~bm/&nͧ6&Q1r6{rÖUr3]T9QyXCAFέBfge]XKrM,z=O$4WM:c@cԅn6#ekU)Z6i16rx;8Q 8<]'lk}%N@dF Cs9Gvg;z% ٯ&dUPc%kyŚ3iMODF#HE:.~<֌9A3SǸ9#z0^/ip>Yl _drtI4Jݾmǖ!٦21 e ަofr7d-ў҉$wX,FoƍU?w:G|n6{{v($r/\ulq w~鋘XT% oݮT([ʣš:DivK3 2 AUX ,Y5yXp{Dv= Qժ_v,s@әR:vcn|ےEGw LrC;cZ&h<31ug͕UFﴻưn+˹+G/+5N}ev }G)QVVk|4#'}<0l iJ_zAmg3u:=鄫&)G]С9bz6ط!O붊tTϼnco1)GMZΒ2y—4>Xm-nw]ۋe9~m?O4s9vɜ Q׳=風Kw] %(9Y,w5~Ժ\ʽfn皞_L-sUυd-?%aFl`ٶ(QcozXޖ-˜mT\E_OO|AD{[2zUKCmE_e-ؾf[XgZW 4z m?/ZA3I|tNSAP0y%;ucd]1C?L| @+o.gҧؓe J/E/̾읗'r/,YjP0m^ENֶ"GWŖ"ތ粔BeTYtD&̝}^# Ɉ|t6sSAl@@aWoY~{P;+q{e_F W+<%KSIZ`YuAqErrOKeE›gYq{.N̊S} G:A4Ev1 k_|)͢_7pGF`0&q{~NG`:"I пWxӑ8k9y&b1cw>"/u:Kz^ k5A]sݥF_^E6zykT w/nh-5ۋTÑOouo2 ++G/c_b~y`W"D-ȶ{2{s=L{f3Cr\ ^ )=$7E $:#>4It=NR$GF #sML Ln0ꧫϕK]2JŗO}O{|c.xo\v`Wf;2R4\06b$9]?")tQlB?%rD~[!tȑɋw^:m;uMF~=#do=P߼=mmo垤EFYaD~xCwhHH!6$T9ns;m7zK)ӟ8D<򇠙Ymk}өK }-TwWUBW$8Ny_k$6#~biE~W <][p.R#~ o (pAv)&:]hDQb$%zB+Ԉw{5vW;žW­b =}7Ȼ ni;L%܈K~%ܩ7T=1J.yxalGCOb\DR)ӥ 4J}%I@? ]wv߫A>Am!uoM~mr:ق(EiefMغ;EUϵv'vDpov9qD#qc^~?n K`f:G-`x=P dHz|ga=O7ܩPϒvQ'tiD0M #R'xjw7ۂW#k3gf>fq9̥ok!oWRۭiqF6BOsw!3!''R~t&aLIIOٹ[[t{0{!~( Ȋ|0}C"WvиvDϯk|~]?_+3D|4D|_e ;_'@ Yo5K/1)"F@~U=eݔZW/y;u | }o@`C))2u3 x=F65;4N DoFWk?C`װv2[}1'h@a~d#E&Ř;N|R"X=s|wWĽ79xD.=Px eaF=_gX!_ɿ{`&(QM}''܃.A!ڗ úti(8}'~P#%;$I4t}NS}x>G<#M@R綬$zu1ᅿv0!)K4)1S|H{??bms}qp?ڇBwx֫⑱<cqic]Og?+?>vh{^n7a>ȟc?4".R? }|t?G6ՋC~}$ZD;? i􃯽&P^{M>vaEPTD~}=*{gGy ŽG8_Ρ{XLBXu횮pf-fNp>UmnR8BN$pEa̫{0QݰjZOTQS>홲nzݨ.kVvS#ȉeı[v dv}/\F@*4DhM'hjMTp^_[.,hY $qjKYG}q9M}_ |!ˢ*ܚ"Wv'Ō )q;YA|X_[ʉRY񤲲aHo9hcO4”9 Vﳐ(;*Ƣ4ؖt2Vh]XtU6&eIʾ*S32gyoKwq@ϔpka''go;8k?Z`*c1ܜaYhZ`;}A0lu9zSUgJX}BZ{mЋ0~Mr5DindZ{"]1-Bf ll,kPIKۍx;?@ȞM`\#|$ɏЛdZzLAe (Nl밄!kX2桳$14f/=m?n>` hNj=CC0*Udp2P*Щi'*< C3qݪ p|R\@f @Zg>{L.8T ` #\&UA[U PS)DT1 fĹ)LTa 1U,|+q2sL|1vHg4nKiYGX.-vPxVz:v^ e# J @`1[Kp9R͸Np?2T{(@;R}\KUEh1 Ԓ ^DɈCQ'-F2f`{02#jibTD8QJ@ϙi&ha1#)2sKX&8\2 v^?0Y%c pubvTΜ9Xu K.Dxs]Y"%B*le9 ; s*eEQN޴#vVUwҳj+o~6[8ȏlU{^ EnKdZjql6T9$})7CL=9Qz> 8#S\8;RNU{h4d[hܖ*}CRi=ZN@C՚0-W턛c}?,&Pv69LU /ra8Ut͌ T#Gc0l(a 3HfD)x6Qd.{,䲉 J#3u,5X>9np@!* "_O&'JqIƋaf5. {? q.Fr%DY;[$N?J*I3&WyB@)ɼZ6Z{%a2fZmq^F+?a9^@bYAI#yYCGr&aUJ" U6{`XzS?Yss{/{[?YY,N }9CHO}Hܾ 6gd3䐏+aHh0bs,VcQf0;ȝm'DZ[J2ŰVؑ׆zW"5\ʇ: rCeXqD ÖUr3]T9QyXCAVR!D0ȉ(k(t%֒\(? pOvsIjұdڟ.t,^)Z6i16rءĈ:{ }<]'lk}%N@dF:>$ys9Gvg;z% ٯ&D*b͙Ѵ5In4Tc?u=5cFzn͔t1nΈ^0LKQ&Yl _drtI4Jݾmǖ'ʐlSX_6}3앻'k~v{ab7B?#|c'oY﮽[¡@(/|oKfE >h[cq;|엾yEUb!~$|vER-/:DD˴Vӥvp\QK{˪qp?Ra J nHҎ7*ZK8;Pqq:SJb-Ru[4蜽c02Ii9A[5WV9ʘ91l[J%r fJzSs/)[K8MrZ㜔Q{d'9kl iJ_zAmg3u:=鄫(uA>V昋`n>=*P}<; ^Ťf-gI9<[2"5nkL D 89@@+U@kyUl x!z2rn(RDF+#soN]EmΠ@wܬR|qV>pu=6d/F7ǰ//¯wǼz̻7P^M_͌ߙLkwE/9˩f!{l[0 qΗ֧mE^yfK%}Dpw`߾Ыޢxo֚mWN@&vQ*QC Ô J j׼7ox'nS?LfR.zK2Sv^Ǻ4F);-l~3ϭKηb.ԫ}dC?F #include #include #include #include "caf/all.hpp" #include "caf/io/all.hpp" using namespace caf; using std::endl; void caf_main(actor_system& system) { for (int i = 1; i <= 50; ++i) { system.spawn([i](blocking_actor* self) { aout(self) << "Hi there! This is actor nr. " << i << "!" << endl; std::random_device rd; std::default_random_engine re(rd()); std::chrono::milliseconds tout{re() % 10}; self->delayed_send(self, tout, 42); self->receive( [i, self](int) { aout(self) << "Actor nr. " << i << " says goodbye!" << endl; } ); }); } } CAF_MAIN() actor-framework-0.16.3/examples/broker/000077500000000000000000000000001341123343400200045ustar00rootroot00000000000000actor-framework-0.16.3/examples/broker/protobuf_broker.cpp000066400000000000000000000135161341123343400237220ustar00rootroot00000000000000#include #include #include #include #include #include "caf/all.hpp" #include "caf/io/all.hpp" #ifdef CAF_WINDOWS #include #else #include #endif CAF_PUSH_WARNINGS #include "pingpong.pb.h" CAF_POP_WARNINGS namespace { using namespace std; using namespace caf; using namespace caf::io; using ping_atom = atom_constant; using pong_atom = atom_constant; using kickoff_atom = atom_constant; // utility function to print an exit message with custom name void print_on_exit(scheduled_actor* self, const std::string& name) { self->attach_functor([=](const error& reason) { aout(self) << name << " exited: " << self->home_system().render(reason) << endl; }); } struct ping_state { size_t count = 0; }; behavior ping(stateful_actor* self, size_t num_pings) { print_on_exit(self, "ping"); return { [=](kickoff_atom, const actor& pong) { self->send(pong, ping_atom::value, 1); self->become ( [=](pong_atom, int value) -> message { if (++(self->state.count) >= num_pings) self->quit(); return make_message(ping_atom::value, value + 1); } ); } }; } behavior pong(event_based_actor* self) { print_on_exit(self, "pong"); return { [=](ping_atom, int value) { return make_message(pong_atom::value, value); } }; } void protobuf_io(broker* self, connection_handle hdl, const actor& buddy) { print_on_exit(self, "protobuf_io"); aout(self) << "protobuf broker started" << endl; self->monitor(buddy); self->set_down_handler( [=](const down_msg& dm) { if (dm.source == buddy) { aout(self) << "our buddy is down" << endl; self->quit(dm.reason); } }); auto write = [=](const org::libcppa::PingOrPong& p) { string buf = p.SerializeAsString(); auto s = htonl(static_cast(buf.size())); self->write(hdl, sizeof(uint32_t), &s); self->write(hdl, buf.size(), buf.data()); self->flush(hdl); }; message_handler default_bhvr = { [=](const connection_closed_msg&) { aout(self) << "connection closed" << endl; self->send_exit(buddy, exit_reason::remote_link_unreachable); self->quit(exit_reason::remote_link_unreachable); }, [=](ping_atom, int i) { aout(self) << "'ping' " << i << endl; org::libcppa::PingOrPong p; p.mutable_ping()->set_id(i); write(p); }, [=](pong_atom, int i) { aout(self) << "'pong' " << i << endl; org::libcppa::PingOrPong p; p.mutable_pong()->set_id(i); write(p); } }; auto await_protobuf_data = message_handler { [=](const new_data_msg& msg) { org::libcppa::PingOrPong p; p.ParseFromArray(msg.buf.data(), static_cast(msg.buf.size())); if (p.has_ping()) { self->send(buddy, ping_atom::value, p.ping().id()); } else if (p.has_pong()) { self->send(buddy, pong_atom::value, p.pong().id()); } else { self->quit(exit_reason::user_shutdown); cerr << "neither Ping nor Pong!" << endl; } // receive next length prefix self->configure_read(hdl, receive_policy::exactly(sizeof(uint32_t))); self->unbecome(); } }.or_else(default_bhvr); auto await_length_prefix = message_handler { [=](const new_data_msg& msg) { uint32_t num_bytes; memcpy(&num_bytes, msg.buf.data(), sizeof(uint32_t)); num_bytes = htonl(num_bytes); if (num_bytes > (1024 * 1024)) { aout(self) << "someone is trying something nasty" << endl; self->quit(exit_reason::user_shutdown); return; } // receive protobuf data auto nb = static_cast(num_bytes); self->configure_read(hdl, receive_policy::exactly(nb)); self->become(keep_behavior, await_protobuf_data); } }.or_else(default_bhvr); // initial setup self->configure_read(hdl, receive_policy::exactly(sizeof(uint32_t))); self->become(await_length_prefix); } behavior server(broker* self, const actor& buddy) { print_on_exit(self, "server"); aout(self) << "server is running" << endl; return { [=](const new_connection_msg& msg) { aout(self) << "server accepted new connection" << endl; auto io_actor = self->fork(protobuf_io, msg.handle, buddy); // only accept 1 connection in our example self->quit(); } }; } class config : public actor_system_config { public: uint16_t port = 0; std::string host = "localhost"; bool server_mode = false; config() { opt_group{custom_options_, "global"} .add(port, "port,p", "set port") .add(host, "host,H", "set host (ignored in server mode)") .add(server_mode, "server-mode,s", "enable server mode"); } }; void run_server(actor_system& system, const config& cfg) { cout << "run in server mode" << endl; auto pong_actor = system.spawn(pong); auto server_actor = system.middleman().spawn_server(server, cfg.port, pong_actor); if (!server_actor) cerr << "unable to spawn server: " << system.render(server_actor.error()) << endl; } void run_client(actor_system& system, const config& cfg) { cout << "run in client mode" << endl; auto ping_actor = system.spawn(ping, 20u); auto io_actor = system.middleman().spawn_client(protobuf_io, cfg.host, cfg.port, ping_actor); if (!io_actor) { cout << "cannot connect to " << cfg.host << " at port " << cfg.port << ": " << system.render(io_actor.error()) << endl; return; } send_as(*io_actor, ping_actor, kickoff_atom::value, *io_actor); } void caf_main(actor_system& system, const config& cfg) { auto f = cfg.server_mode ? run_server : run_client; f(system, cfg); } } // namespace CAF_MAIN(io::middleman) actor-framework-0.16.3/examples/broker/simple_broker.cpp000066400000000000000000000166461341123343400233620ustar00rootroot00000000000000/******************************************************************************\ * This example program showcases how to manually manage socket IO using * * a broker. Server and client exchange integers in a 'ping-pong protocol'. * * * * Minimal setup: * * - ./build/bin/broker -s 4242 * * - ./build/bin/broker -c localhost 4242 * \ ******************************************************************************/ // Manual refs: 46-50 (Actors.tex) #include "caf/config.hpp" #ifdef WIN32 # define _WIN32_WINNT 0x0600 # include #else # include // htonl #endif #include #include #include #include #include #include #include #include "caf/all.hpp" #include "caf/io/all.hpp" using std::cout; using std::cerr; using std::endl; using namespace caf; using namespace caf::io; namespace { using ping_atom = atom_constant; using pong_atom = atom_constant; using kickoff_atom = atom_constant; // utility function to print an exit message with custom name void print_on_exit(const actor& hdl, const std::string& name) { hdl->attach_functor([=](const error& reason) { cout << name << " exited: " << to_string(reason) << endl; }); } behavior ping(event_based_actor* self, size_t num_pings) { auto count = std::make_shared(0); return { [=](kickoff_atom, const actor& pong) { self->send(pong, ping_atom::value, int32_t(1)); self->become ( [=](pong_atom, int32_t value) -> result { if (++*count >= num_pings) self->quit(); return {ping_atom::value, value + 1}; } ); } }; } behavior pong() { return { [](ping_atom, int32_t value) -> result { return {pong_atom::value, value}; } }; } // utility function for sending an integer type template void write_int(broker* self, connection_handle hdl, T value) { using unsigned_type = typename std::make_unsigned::type; auto cpy = static_cast(htonl(static_cast(value))); self->write(hdl, sizeof(T), &cpy); self->flush(hdl); } void write_int(broker* self, connection_handle hdl, uint64_t value) { // write two uint32 values instead (htonl does not work for 64bit integers) write_int(self, hdl, static_cast(value)); write_int(self, hdl, static_cast(value >> sizeof(uint32_t))); } // utility function for reading an ingeger from incoming data template void read_int(const void* data, T& storage) { using unsigned_type = typename std::make_unsigned::type; memcpy(&storage, data, sizeof(T)); storage = static_cast(ntohl(static_cast(storage))); } void read_int(const void* data, uint64_t& storage) { uint32_t first; uint32_t second; read_int(data, first); read_int(reinterpret_cast(data) + sizeof(uint32_t), second); storage = first | (static_cast(second) << sizeof(uint32_t)); } // implemenation of our broker behavior broker_impl(broker* self, connection_handle hdl, const actor& buddy) { // we assume io_fsm manages a broker with exactly one connection, // i.e., the connection ponted to by `hdl` assert(self->num_connections() == 1); // monitor buddy to quit broker if buddy is done self->monitor(buddy); self->set_down_handler([=](down_msg& dm) { if (dm.source == buddy) { aout(self) << "our buddy is down" << endl; // quit for same reason self->quit(dm.reason); } }); // setup: we are exchanging only messages consisting of an atom // (as uint64_t) and an integer value (int32_t) self->configure_read(hdl, receive_policy::exactly(sizeof(uint64_t) + sizeof(int32_t))); // our message handlers return { [=](const connection_closed_msg& msg) { // brokers can multiplex any number of connections, however // this example assumes io_fsm to manage a broker with // exactly one connection if (msg.handle == hdl) { aout(self) << "connection closed" << endl; // force buddy to quit self->send_exit(buddy, exit_reason::remote_link_unreachable); self->quit(exit_reason::remote_link_unreachable); } }, [=](atom_value av, int32_t i) { assert(av == ping_atom::value || av == pong_atom::value); aout(self) << "send {" << to_string(av) << ", " << i << "}" << endl; // cast atom to its underlying type, i.e., uint64_t write_int(self, hdl, static_cast(av)); write_int(self, hdl, i); }, [=](const new_data_msg& msg) { // read the atom value as uint64_t from buffer uint64_t atm_val; read_int(msg.buf.data(), atm_val); // cast to original type auto atm = static_cast(atm_val); // read integer value from buffer, jumping to the correct // position via offset_data(...) int32_t ival; read_int(msg.buf.data() + sizeof(uint64_t), ival); // show some output aout(self) << "received {" << to_string(atm) << ", " << ival << "}" << endl; // send composed message to our buddy self->send(buddy, atm, ival); } }; } behavior server(broker* self, const actor& buddy) { aout(self) << "server is running" << endl; return { [=](const new_connection_msg& msg) { aout(self) << "server accepted new connection" << endl; // by forking into a new broker, we are no longer // responsible for the connection auto impl = self->fork(broker_impl, msg.handle, buddy); print_on_exit(impl, "broker_impl"); aout(self) << "quit server (only accept 1 connection)" << endl; self->quit(); } }; } class config : public actor_system_config { public: uint16_t port = 0; std::string host = "localhost"; bool server_mode = false; config() { opt_group{custom_options_, "global"} .add(port, "port,p", "set port") .add(host, "host,H", "set host (ignored in server mode)") .add(server_mode, "server-mode,s", "enable server mode"); } }; void run_server(actor_system& system, const config& cfg) { cout << "run in server mode" << endl; auto pong_actor = system.spawn(pong); auto server_actor = system.middleman().spawn_server(server, cfg.port, pong_actor); if (!server_actor) { std::cerr << "failed to spawn server: " << system.render(server_actor.error()) << endl; return; } print_on_exit(*server_actor, "server"); print_on_exit(pong_actor, "pong"); } void run_client(actor_system& system, const config& cfg) { auto ping_actor = system.spawn(ping, size_t{20}); auto io_actor = system.middleman().spawn_client(broker_impl, cfg.host, cfg.port, ping_actor); if (!io_actor) { std::cerr << "failed to spawn client: " << system.render(io_actor.error()) << endl; return; } print_on_exit(ping_actor, "ping"); print_on_exit(*io_actor, "protobuf_io"); send_as(*io_actor, ping_actor, kickoff_atom::value, *io_actor); } void caf_main(actor_system& system, const config& cfg) { auto f = cfg.server_mode ? run_server : run_client; f(system, cfg); } } // namespace CAF_MAIN(io::middleman) actor-framework-0.16.3/examples/broker/simple_http_broker.cpp000066400000000000000000000042351341123343400244100ustar00rootroot00000000000000#include #include #include "caf/all.hpp" #include "caf/io/all.hpp" using std::cout; using std::cerr; using std::endl; using namespace caf; using namespace caf::io; namespace { using tick_atom = atom_constant; constexpr const char http_ok[] = R"__(HTTP/1.1 200 OK Content-Type: text/plain Connection: keep-alive Transfer-Encoding: chunked d Hi there! :) 0 )__"; template constexpr size_t cstr_size(const char (&)[Size]) { return Size; } behavior connection_worker(broker* self, connection_handle hdl) { self->configure_read(hdl, receive_policy::at_most(1024)); return { [=](const new_data_msg& msg) { self->write(msg.handle, cstr_size(http_ok), http_ok); self->quit(); }, [=](const connection_closed_msg&) { self->quit(); } }; } behavior server(broker* self) { auto counter = std::make_shared(0); self->set_down_handler([=](down_msg&) { ++*counter; }); self->delayed_send(self, std::chrono::seconds(1), tick_atom::value); return { [=](const new_connection_msg& ncm) { auto worker = self->fork(connection_worker, ncm.handle); self->monitor(worker); self->link_to(worker); }, [=](tick_atom) { aout(self) << "Finished " << *counter << " requests per second." << endl; *counter = 0; self->delayed_send(self, std::chrono::seconds(1), tick_atom::value); } }; } class config : public actor_system_config { public: uint16_t port = 0; config() { opt_group{custom_options_, "global"} .add(port, "port,p", "set port"); } }; void caf_main(actor_system& system, const config& cfg) { auto server_actor = system.middleman().spawn_server(server, cfg.port); if (!server_actor) { cerr << "*** cannot spawn server: " << system.render(server_actor.error()) << endl; return; } cout << "*** listening on port " << cfg.port << endl; cout << "*** to quit the program, simply press " << endl; // wait for any input std::string dummy; std::getline(std::cin, dummy); // kill server anon_send_exit(*server_actor, exit_reason::user_shutdown); } } // namespace CAF_MAIN(io::middleman) actor-framework-0.16.3/examples/caf-application.ini000066400000000000000000000056461341123343400222660ustar00rootroot00000000000000; This file shows all possible parameters with defaults. ; Values enclosed in <> are detected at runtime unless defined by the user. ; when using the default scheduler [scheduler] ; accepted alternative: 'sharing' policy='stealing' ; configures whether the scheduler generates profiling output enable-profiling=false ; forces a fixed number of threads if set max-threads= ; maximum number of messages actors can consume in one run max-throughput= ; measurement resolution in milliseconds (only if profiling is enabled) profiling-resolution=100ms ; output file for profiler data (only if profiling is enabled) profiling-output-file="/dev/null" ; when using 'stealing' as scheduler policy [work-stealing] ; number of zero-sleep-interval polling attempts aggressive-poll-attempts=100 ; frequency of steal attempts during aggressive polling aggressive-steal-interval=10 ; number of moderately aggressive polling attempts moderate-poll-attempts=500 ; frequency of steal attempts during moderate polling moderate-steal-interval=5 ; sleep interval between poll attempts moderate-sleep-duration=50us ; frequency of steal attempts during relaxed polling relaxed-steal-interval=1 ; sleep interval between poll attempts relaxed-sleep-duration=10ms ; when loading io::middleman [middleman] ; configures whether MMs try to span a full mesh enable-automatic-connections=false ; application identifier of this node, prevents connection to other CAF ; instances with different identifier app-identifier="" ; maximum number of consecutive I/O reads per broker max-consecutive-reads=50 ; heartbeat message interval in ms (0 disables heartbeating) heartbeat-interval=0ms ; configures whether the MM attaches its internal utility actors to the ; scheduler instead of dedicating individual threads (needed only for ; deterministic testing) attach-utility-actors=false ; configures whether the MM starts a background thread for I/O activity, ; setting this to true allows fully deterministic execution in unit test and ; requires the user to trigger I/O manually manual-multiplexing=false ; disables communication via TCP disable-tcp=false ; enable communication via UDP enable-udp=false ; when compiling with logging enabled [logger] ; file name template for output log file files (empty string disables logging) file-name="actor_log_[PID]_[TIMESTAMP]_[NODE].log" ; format for rendering individual log file entries file-format="%r %c %p %a %t %C %M %F:%L %m%n" ; configures the minimum severity of messages that are written to the log file ; (quiet|error|warning|info|debug|trace) file-verbosity='trace' ; mode for console log output generation (none|colored|uncolored) console='none' ; format for printing individual log entries to the console console-format="%m" ; configures the minimum severity of messages that are written to the console ; (quiet|error|warning|info|debug|trace) console-verbosity='trace' ; excludes listed components from logging component-filter="" actor-framework-0.16.3/examples/composition/000077500000000000000000000000001341123343400210635ustar00rootroot00000000000000actor-framework-0.16.3/examples/composition/calculator_behavior.cpp000066400000000000000000000030741341123343400256030ustar00rootroot00000000000000/******************************************************************************\ * This example is a very basic, non-interactive math service implemented * * using composable states. * \******************************************************************************/ // This file is partially included in the manual, do not modify // without updating the references in the *.tex files! // Manual references: lines 20-52 (Actor.tex) #include #include "caf/all.hpp" using std::cout; using std::endl; using namespace caf; namespace { // using add_atom = atom_constant; (defined in atom.hpp) using multiply_atom = atom_constant; using adder = typed_actor::with>; using multiplier = typed_actor::with>; class adder_bhvr : public composable_behavior { public: result operator()(add_atom, int x, int y) override { return x + y; } }; class multiplier_bhvr : public composable_behavior { public: result operator()(multiply_atom, int x, int y) override { return x * y; } }; // calculator_bhvr can be inherited from or composed further using calculator_bhvr = composed_behavior; } // namespace void caf_main(actor_system& system) { auto f = make_function_view(system.spawn()); cout << "10 + 20 = " << f(add_atom::value, 10, 20) << endl; cout << "7 * 9 = " << f(multiply_atom::value, 7, 9) << endl; } CAF_MAIN() actor-framework-0.16.3/examples/composition/dictionary_behavior.cpp000066400000000000000000000027351341123343400256220ustar00rootroot00000000000000/******************************************************************************\ * This example is a simple dictionary implemented * using composable states. * \******************************************************************************/ // This file is partially included in the manual, do not modify // without updating the references in the *.tex files! // Manual references: lines 22-44 (Actor.tex) #include #include #include #include "caf/all.hpp" using std::cout; using std::endl; using std::string; using namespace caf; namespace { using dict = typed_actor, replies_to::with>; class dict_behavior : public composable_behavior { public: result operator()(get_atom, param key) override { auto i = values_.find(key); if (i == values_.end()) return ""; return i->second; } result operator()(put_atom, param key, param value) override { if (values_.count(key) != 0) return unit; values_.emplace(key.move(), value.move()); return unit; } protected: std::unordered_map values_; }; } // namespace void caf_main(actor_system& system) { auto f = make_function_view(system.spawn()); f(put_atom::value, "CAF", "success"); cout << "CAF is the key to " << f(get_atom::value, "CAF") << endl; } CAF_MAIN() actor-framework-0.16.3/examples/curl/000077500000000000000000000000001341123343400174655ustar00rootroot00000000000000actor-framework-0.16.3/examples/curl/curl_fuse.cpp000066400000000000000000000320041341123343400221570ustar00rootroot00000000000000/****************************************************************************** * This example * * - emulates a client launching a request every 10-300ms * * - uses a CURL-backend consisting of a master and 10 workers * * - runs until it is shut down by a CTRL+C signal * * * * * * Schematic view: * * * * client | client_job | curl_master | curl_worker * * /--------------|*|-------------\ /-------------|*| * * /---------------|*|--------------\ / * * /----------------|*|---------------\ / * * |*| ----------------|*|----------------|*|----------------|*| * * \________________|*|_______________/ \ * * \_______________|*|______________/ \ * * \______________|*|_____________/ \-------------|*| * * * * * * Communication pattern: * * * * client_job curl_master curl_worker * * | | | * * | ----(read)-----> | | * * | | --(forward)----> | * * | |---\ * * | | | * * | |<--/ * * | <-------------(reply)-------------- | * * X * ******************************************************************************/ // C includes #include #include #include // C++ includes #include #include #include #include // CAF #include "caf/all.hpp" #include "caf/io/all.hpp" CAF_PUSH_WARNINGS #include CAF_POP_WARNINGS // disable some clang warnings here caused by CURL macros #ifdef __clang__ # pragma clang diagnostic ignored "-Wshorten-64-to-32" # pragma clang diagnostic ignored "-Wdisabled-macro-expansion" # pragma clang diagnostic ignored "-Wunused-const-variable" #endif // __clang__ using namespace caf; using buffer_type = std::vector; using read_atom = atom_constant; using fail_atom = atom_constant; using next_atom = atom_constant; using reply_atom = atom_constant; using finished_atom = atom_constant; namespace color { // UNIX terminal color codes constexpr char reset[] = "\033[0m"; constexpr char reset_endl[] = "\033[0m\n"; constexpr char black[] = "\033[30m"; constexpr char red[] = "\033[31m"; constexpr char green[] = "\033[32m"; constexpr char yellow[] = "\033[33m"; constexpr char blue[] = "\033[34m"; constexpr char magenta[] = "\033[35m"; constexpr char cyan[] = "\033[36m"; constexpr char white[] = "\033[37m"; constexpr char bold_black[] = "\033[1m\033[30m"; constexpr char bold_red[] = "\033[1m\033[31m"; constexpr char bold_green[] = "\033[1m\033[32m"; constexpr char bold_yellow[] = "\033[1m\033[33m"; constexpr char bold_blue[] = "\033[1m\033[34m"; constexpr char bold_magenta[] = "\033[1m\033[35m"; constexpr char bold_cyan[] = "\033[1m\033[36m"; constexpr char bold_white[] = "\033[1m\033[37m"; } // namespace color // number of HTTP workers constexpr size_t num_curl_workers = 10; // minimum delay between HTTP requests constexpr int min_req_interval = 10; // maximum delay between HTTP requests constexpr int max_req_interval = 300; // put everything into anonymous namespace (except main) namespace { // provides print utility, a name, and a parent struct base_state { base_state(local_actor* thisptr) : self(thisptr) { // nop } actor_ostream print() { return aout(self) << color << name << " (id = " << self->id() << "): "; } virtual bool init(std::string m_name, std::string m_color) { name = std::move(m_name); color = std::move(m_color); print() << "started" << color::reset_endl; return true; } virtual ~base_state() { print() << "done" << color::reset_endl; } local_actor* self; std::string name; std::string color; }; // encapsulates an HTTP request behavior client_job(stateful_actor* self, const actor& parent) { if (!self->state.init("client-job", color::blue)) return {}; // returning an empty behavior terminates the actor self->send(parent, read_atom::value, "http://www.example.com/index.html", uint64_t{0}, uint64_t{4095}); return { [=](reply_atom, const buffer_type& buf) { self->state.print() << "successfully received " << buf.size() << " bytes" << color::reset_endl; self->quit(); }, [=](fail_atom) { self->state.print() << "failure" << color::reset_endl; self->quit(); } }; } struct client_state : base_state { client_state(local_actor* selfptr) : base_state(selfptr), count(0), re(rd()), dist(min_req_interval, max_req_interval) { // nop } size_t count; std::random_device rd; std::default_random_engine re; std::uniform_int_distribution dist; }; // spawns HTTP requests behavior client(stateful_actor* self, const actor& parent) { using std::chrono::milliseconds; self->link_to(parent); if (!self->state.init("client", color::green)) return {}; // returning an empty behavior terminates the actor self->send(self, next_atom::value); return { [=](next_atom) { auto& st = self->state; st.print() << "spawn new client_job (nr. " << ++st.count << ")" << color::reset_endl; // client_job will use IO // and should thus be spawned in a separate thread self->spawn(client_job, parent); // compute random delay until next job is launched auto delay = st.dist(st.re); self->delayed_send(self, milliseconds(delay), next_atom::value); } }; } struct curl_state : base_state { curl_state(local_actor* selfptr) : base_state(selfptr) { // nop } ~curl_state() override { if (curl != nullptr) curl_easy_cleanup(curl); } static size_t callback(void* data, size_t bsize, size_t nmemb, void* userp) { size_t size = bsize * nmemb; auto& buf = reinterpret_cast(userp)->buf; auto first = reinterpret_cast(data); auto last = first + bsize; buf.insert(buf.end(), first, last); return size; } bool init(std::string m_name, std::string m_color) override { curl = curl_easy_init(); if (curl == nullptr) return false; curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &curl_state::callback); curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); return base_state::init(std::move(m_name), std::move(m_color)); } CURL* curl = nullptr; buffer_type buf; }; // manages a CURL session behavior curl_worker(stateful_actor* self, const actor& parent) { if (!self->state.init("curl-worker", color::yellow)) return {}; // returning an empty behavior terminates the actor return { [=](read_atom, const std::string& fname, uint64_t offset, uint64_t range) -> message { auto& st = self->state; st.print() << "read" << color::reset_endl; for (;;) { st.buf.clear(); // set URL curl_easy_setopt(st.curl, CURLOPT_URL, fname.c_str()); // set range std::ostringstream oss; oss << offset << "-" << range; curl_easy_setopt(st.curl, CURLOPT_RANGE, oss.str().c_str()); // set curl callback curl_easy_setopt(st.curl, CURLOPT_WRITEDATA, reinterpret_cast(&st)); // launch file transfer auto res = curl_easy_perform(st.curl); if (res != CURLE_OK) { st.print() << "curl_easy_perform() failed: " << curl_easy_strerror(res) << color::reset_endl; } else { long hc = 0; // http return code curl_easy_getinfo(st.curl, CURLINFO_RESPONSE_CODE, &hc); switch (hc) { default: st.print() << "http error: download failed with " << "'HTTP RETURN CODE': " << hc << color::reset_endl; break; case 200: // ok case 206: // partial content st.print() << "received " << st.buf.size() << " bytes with 'HTTP RETURN CODE': " << hc << color::reset_endl; // tell parent that this worker is done self->send(parent, finished_atom::value); return make_message(reply_atom::value, std::move(st.buf)); case 404: // file does not exist st.print() << "http error: download failed with " << "'HTTP RETURN CODE': 404 (file does " << "not exist!)" << color::reset_endl; } } // avoid 100% cpu utilization if remote side is not accessible std::this_thread::sleep_for(std::chrono::milliseconds(100)); } } }; } struct master_state : base_state { master_state(local_actor* selfptr) : base_state(selfptr) { // nop } std::vector idle; std::vector busy; }; behavior curl_master(stateful_actor* self) { if (!self->state.init("curl-master", color::magenta)) return {}; // returning an empty behavior terminates the actor // spawn workers for(size_t i = 0; i < num_curl_workers; ++i) self->state.idle.push_back(self->spawn(curl_worker, self)); auto worker_finished = [=] { auto sender = self->current_sender(); auto last = self->state.busy.end(); auto i = std::find(self->state.busy.begin(), last, sender); if (i == last) return; self->state.idle.push_back(*i); self->state.busy.erase(i); self->state.print() << "worker is done" << color::reset_endl; }; self->state.print() << "spawned " << self->state.idle.size() << " worker(s)" << color::reset_endl; return { [=](read_atom rd, std::string& str, uint64_t x, uint64_t y) { auto& st = self->state; st.print() << "received {'read'}" << color::reset_endl; // forward job to an idle worker actor worker = st.idle.back(); st.idle.pop_back(); st.busy.push_back(worker); self->delegate(worker, rd, std::move(str), x, y); st.print() << st.busy.size() << " active jobs" << color::reset_endl; if (st.idle.empty()) { // wait until at least one worker finished its job self->become ( keep_behavior, [=](finished_atom) { worker_finished(); self->unbecome(); } ); } }, [=](finished_atom) { worker_finished(); } }; } // signal handling for ctrl+c std::atomic shutdown_flag{false}; } // namespace void caf_main(actor_system& system) { // install signal handler struct sigaction act; act.sa_handler = [](int) { shutdown_flag = true; }; auto set_sighandler = [&] { if (sigaction(SIGINT, &act, nullptr) != 0) { std::cerr << "fatal: cannot set signal handler" << std::endl; abort(); } }; set_sighandler(); // initialize CURL curl_global_init(CURL_GLOBAL_DEFAULT); // get a scoped actor for the communication with our CURL actors scoped_actor self{system}; // spawn client and curl_master auto master = self->spawn(curl_master); self->spawn(client, master); // poll CTRL+C flag every second while (!shutdown_flag) std::this_thread::sleep_for(std::chrono::seconds(1)); aout(self) << color::cyan << "received CTRL+C" << color::reset_endl; // shutdown actors anon_send_exit(master, exit_reason::user_shutdown); // await actors act.sa_handler = [](int) { abort(); }; set_sighandler(); aout(self) << color::cyan << "await CURL; this may take a while " "(press CTRL+C again to abort)" << color::reset_endl; self->await_all_other_actors_done(); // shutdown CURL curl_global_cleanup(); } CAF_MAIN(io::middleman) actor-framework-0.16.3/examples/custom_type/000077500000000000000000000000001341123343400210735ustar00rootroot00000000000000actor-framework-0.16.3/examples/custom_type/custom_types_1.cpp000066400000000000000000000054351341123343400245640ustar00rootroot00000000000000// Showcases how to add custom POD message types. // Manual refs: 24-27, 30-34, 75-78, 81-84 (ConfiguringActorApplications) // 23-33 (TypeInspection) #include #include #include #include #include #include "caf/all.hpp" using std::cout; using std::cerr; using std::endl; using std::vector; using namespace caf; namespace { // POD struct foo struct foo { std::vector a; int b; }; // foo needs to be serializable template typename Inspector::result_type inspect(Inspector& f, foo& x) { return f(meta::type_name("foo"), x.a, x.b); } // a pair of two ints using foo_pair = std::pair; // another alias for pairs of two ints using foo_pair2 = std::pair; // a struct with a nested container struct foo2 { int a; vector> b; }; // foo2 also needs to be serializable template typename Inspector::result_type inspect(Inspector& f, foo2& x) { return f(meta::type_name("foo2"), x.a, x.b); } // receives our custom message types void testee(event_based_actor* self, size_t remaining) { auto set_next_behavior = [=] { if (remaining > 1) testee(self, remaining - 1); else self->quit(); }; self->become ( // note: we sent a foo_pair2, but match on foo_pair // that works because both are aliases for std::pair [=](const foo_pair& val) { aout(self) << "foo_pair" << deep_to_string(val) << endl; set_next_behavior(); }, [=](const foo& val) { aout(self) << to_string(val) << endl; set_next_behavior(); } ); } class config : public actor_system_config { public: config() { add_message_type("foo"); add_message_type("foo2"); add_message_type("foo_pair"); } }; void caf_main(actor_system& system, const config&) { // two variables for testing serialization foo2 f1; foo2 f2; // init some test data f1.a = 5; f1.b.resize(1); f1.b.back().push_back(42); // I/O buffer vector buf; // write f1 to buffer binary_serializer bs{system, buf}; auto e = bs(f1); if (e) { std::cerr << "*** unable to serialize foo2: " << system.render(e) << std::endl; return; } // read f2 back from buffer binary_deserializer bd{system, buf}; e = bd(f2); if (e) { std::cerr << "*** unable to serialize foo2: " << system.render(e) << std::endl; return; } // must be equal assert(to_string(f1) == to_string(f2)); // spawn a testee that receives two messages of user-defined type auto t = system.spawn(testee, 2u); scoped_actor self{system}; // send t a foo self->send(t, foo{std::vector{1, 2, 3, 4}, 5}); // send t a foo_pair2 self->send(t, foo_pair2{3, 4}); } } // namespace CAF_MAIN() actor-framework-0.16.3/examples/custom_type/custom_types_2.cpp000066400000000000000000000022701341123343400245570ustar00rootroot00000000000000// showcases how to add custom message types to CAF // if friend access for serialization is available #include #include #include "caf/all.hpp" using std::cout; using std::endl; using std::make_pair; using namespace caf; namespace { // a simple class using getter and setter member functions class foo { public: foo(int a0 = 0, int b0 = 0) : a_(a0), b_(b0) { // nop } foo(const foo&) = default; foo& operator=(const foo&) = default; int a() const { return a_; } void set_a(int val) { a_ = val; } int b() const { return b_; } void set_b(int val) { b_ = val; } template friend typename Inspector::result_type inspect(Inspector& f, foo& x) { return f(meta::type_name("foo"), x.a_, x.b_); } private: int a_; int b_; }; behavior testee(event_based_actor* self) { return { [=](const foo& x) { aout(self) << to_string(x) << endl; } }; } class config : public actor_system_config { public: config() { add_message_type("foo"); } }; void caf_main(actor_system& system, const config&) { anon_send(system.spawn(testee), foo{1, 2}); } } // namespace CAF_MAIN() actor-framework-0.16.3/examples/custom_type/custom_types_3.cpp000066400000000000000000000042361341123343400245640ustar00rootroot00000000000000// Showcases custom message types that cannot provide // friend access to the inspect() function. // Manual refs: 20-49, 76-103 (TypeInspection) #include #include #include "caf/all.hpp" using std::cout; using std::endl; using std::make_pair; using namespace caf; namespace { // identical to our second custom type example, but // no friend access for `inspect` class foo { public: foo(int a0 = 0, int b0 = 0) : a_(a0), b_(b0) { // nop } foo(const foo&) = default; foo& operator=(const foo&) = default; int a() const { return a_; } void set_a(int val) { a_ = val; } int b() const { return b_; } void set_b(int val) { b_ = val; } private: int a_; int b_; }; // A lightweight scope guard implementation. template class scope_guard { public: scope_guard(Fun f) : fun_(std::move(f)), enabled_(true) { } scope_guard(scope_guard&& x) : fun_(std::move(x.fun_)), enabled_(x.enabled_) { x.enabled_ = false; } ~scope_guard() { if (enabled_) fun_(); } private: Fun fun_; bool enabled_; }; // Creates a guard that executes `f` as soon as it goes out of scope. template scope_guard make_scope_guard(Fun f) { return {std::move(f)}; } template typename std::enable_if::type inspect(Inspector& f, foo& x) { return f(meta::type_name("foo"), x.a(), x.b()); } template typename std::enable_if::type inspect(Inspector& f, foo& x) { int a; int b; // write back to x at scope exit auto g = make_scope_guard([&] { x.set_a(a); x.set_b(b); }); return f(meta::type_name("foo"), a, b); } behavior testee(event_based_actor* self) { return { [=](const foo& x) { aout(self) << to_string(x) << endl; } }; } class config : public actor_system_config { public: config() { add_message_type("foo"); } }; void caf_main(actor_system& system, const config&) { anon_send(system.spawn(testee), foo{1, 2}); } } // namespace CAF_MAIN() actor-framework-0.16.3/examples/dynamic_behavior/000077500000000000000000000000001341123343400220235ustar00rootroot00000000000000actor-framework-0.16.3/examples/dynamic_behavior/dining_philosophers.cpp000066400000000000000000000151511341123343400266010ustar00rootroot00000000000000/******************************************************************************\ * This example is an implementation of the classical Dining Philosophers * * exercise using only libcaf's event-based actor implementation. * \******************************************************************************/ #include #include #include #include #include #include #include #include "caf/all.hpp" using std::cout; using std::cerr; using std::endl; using std::chrono::seconds; using namespace caf; namespace { // atoms for chopstick interface using put_atom = atom_constant; using take_atom = atom_constant; using taken_atom = atom_constant; // atoms for philosopher interface using eat_atom = atom_constant; using think_atom = atom_constant; // a chopstick using chopstick = typed_actor::with, reacts_to>; chopstick::behavior_type taken_chopstick(chopstick::pointer, const strong_actor_ptr&); // either taken by a philosopher or available chopstick::behavior_type available_chopstick(chopstick::pointer self) { return { [=](take_atom) -> std::tuple { self->become(taken_chopstick(self, self->current_sender())); return std::make_tuple(taken_atom::value, true); }, [](put_atom) { cerr << "chopstick received unexpected 'put'" << endl; } }; } chopstick::behavior_type taken_chopstick(chopstick::pointer self, const strong_actor_ptr& user) { return { [](take_atom) -> std::tuple { return std::make_tuple(taken_atom::value, false); }, [=](put_atom) { if (self->current_sender() == user) self->become(available_chopstick(self)); } }; } // Based on: http://www.dalnefre.com/wp/2010/08/dining-philosophers-in-humus/ // // // +-------------+ {busy|taken} // +-------->| thinking |<------------------+ // | +-------------+ | // | | | // | | {eat} | // | | | // | V | // | +-------------+ {busy} +-------------+ // | | hungry |----------->| denied | // | +-------------+ +-------------+ // | | // | | {taken} // | | // | V // | +-------------+ // | | granted | // | +-------------+ // | | | // | {busy} | | {taken} // +-----------+ | // | V // | {think} +-------------+ // +---------| eating | // +-------------+ class philosopher : public event_based_actor { public: philosopher(actor_config& cfg, std::string n, chopstick l, chopstick r) : event_based_actor(cfg), name_(std::move(n)), left_(std::move(l)), right_(std::move(r)) { // we only accept one message per state and skip others in the meantime set_default_handler(skip); // a philosopher that receives {eat} stops thinking and becomes hungry thinking_.assign( [=](eat_atom) { become(hungry_); send(left_, take_atom::value); send(right_, take_atom::value); } ); // wait for the first answer of a chopstick hungry_.assign( [=](taken_atom, bool result) { if (result) become(granted_); else become(denied_); } ); // philosopher was able to obtain the first chopstick granted_.assign( [=](taken_atom, bool result) { if (result) { aout(this) << name_ << " has picked up chopsticks with IDs " << left_->id() << " and " << right_->id() << " and starts to eat\n"; // eat some time delayed_send(this, seconds(5), think_atom::value); become(eating_); } else { send(current_sender() == left_ ? right_ : left_, put_atom::value); send(this, eat_atom::value); become(thinking_); } } ); // philosopher was *not* able to obtain the first chopstick denied_.assign( [=](taken_atom, bool result) { if (result) send(current_sender() == left_ ? left_ : right_, put_atom::value); send(this, eat_atom::value); become(thinking_); } ); // philosopher obtained both chopstick and eats (for five seconds) eating_.assign( [=](think_atom) { send(left_, put_atom::value); send(right_, put_atom::value); delayed_send(this, seconds(5), eat_atom::value); aout(this) << name_ << " puts down his chopsticks and starts to think\n"; become(thinking_); } ); } const char* name() const override { return name_.c_str(); } protected: behavior make_behavior() override { // start thinking send(this, think_atom::value); // philosophers start to think after receiving {think} return ( [=](think_atom) { aout(this) << name_ << " starts to think\n"; delayed_send(this, seconds(5), eat_atom::value); become(thinking_); } ); } private: std::string name_; // the name of this philosopher chopstick left_; // left chopstick chopstick right_; // right chopstick behavior thinking_; // initial behavior behavior hungry_; // tries to take chopsticks behavior granted_; // has one chopstick and waits for the second one behavior denied_; // could not get first chopsticks behavior eating_; // wait for some time, then go thinking again }; } // namespace void caf_main(actor_system& system) { scoped_actor self{system}; // create five chopsticks aout(self) << "chopstick ids are:"; std::vector chopsticks; for (size_t i = 0; i < 5; ++i) { chopsticks.push_back(self->spawn(available_chopstick)); aout(self) << " " << chopsticks.back()->id(); } aout(self) << endl; // spawn five philosophers std::vector names {"Plato", "Hume", "Kant", "Nietzsche", "Descartes"}; for (size_t i = 0; i < 5; ++i) self->spawn(names[i], chopsticks[i], chopsticks[(i + 1) % 5]); } CAF_MAIN() actor-framework-0.16.3/examples/dynamic_behavior/skip_messages.cpp000066400000000000000000000031341341123343400253650ustar00rootroot00000000000000#include "caf/all.hpp" using namespace caf; using idle_atom = atom_constant; using request_atom = atom_constant; using response_atom = atom_constant; behavior server(event_based_actor* self) { return { [=](idle_atom, const actor& worker) { self->become ( keep_behavior, [=](request_atom atm) { self->delegate(worker, atm); self->unbecome(); }, [=](idle_atom) { return skip(); } ); }, [=](request_atom) { return skip(); } }; } behavior client(event_based_actor* self, const actor& serv) { self->link_to(serv); self->send(serv, idle_atom::value, self); return { [=](request_atom) { self->send(serv, idle_atom::value, self); return response_atom::value; } }; } void caf_main(actor_system& system) { auto serv = system.spawn(server); auto worker = system.spawn(client, serv); scoped_actor self{system}; self->request(serv, std::chrono::seconds(10), request_atom::value).receive( [&](response_atom) { aout(self) << "received response from " << (self->current_sender() == worker ? "worker\n" : "server\n"); }, [&](error& err) { aout(self) << "received error " << system.render(err) << " from " << (self->current_sender() == worker ? "worker\n" : "server\n"); } ); self->send_exit(serv, exit_reason::user_shutdown); } CAF_MAIN() actor-framework-0.16.3/examples/hello_world.cpp000066400000000000000000000023241341123343400215370ustar00rootroot00000000000000#include #include #include "caf/all.hpp" using std::endl; using std::string; using namespace caf; behavior mirror(event_based_actor* self) { // return the (initial) actor behavior return { // a handler for messages containing a single string // that replies with a string [=](const string& what) -> string { // prints "Hello World!" via aout (thread-safe cout wrapper) aout(self) << what << endl; // reply "!dlroW olleH" return string(what.rbegin(), what.rend()); } }; } void hello_world(event_based_actor* self, const actor& buddy) { // send "Hello World!" to our buddy ... self->request(buddy, std::chrono::seconds(10), "Hello World!").then( // ... wait up to 10s for a response ... [=](const string& what) { // ... and print it aout(self) << what << endl; } ); } int main() { // our CAF environment actor_system_config cfg; actor_system system{cfg}; // create a new actor that calls 'mirror()' auto mirror_actor = system.spawn(mirror); // create another actor that calls 'hello_world(mirror_actor)'; system.spawn(hello_world, mirror_actor); // system will wait until both actors are destroyed before leaving main } actor-framework-0.16.3/examples/message_passing/000077500000000000000000000000001341123343400216705ustar00rootroot00000000000000actor-framework-0.16.3/examples/message_passing/calculator.cpp000066400000000000000000000100101341123343400245150ustar00rootroot00000000000000/******************************************************************************\ * This example is a very basic, non-interactive math service implemented * * for both the blocking and the event-based API. * \******************************************************************************/ // Manual refs: lines 19-21, 31-72, 74-108, 140-145 (Actor) #include #include "caf/all.hpp" using std::endl; using namespace caf; namespace { using add_atom = atom_constant; using sub_atom = atom_constant; using calculator_actor = typed_actor::with, replies_to::with>; // prototypes and forward declarations behavior calculator_fun(event_based_actor* self); void blocking_calculator_fun(blocking_actor* self); calculator_actor::behavior_type typed_calculator_fun(); class calculator; class blocking_calculator; class typed_calculator; // function-based, dynamically typed, event-based API behavior calculator_fun(event_based_actor*) { return { [](add_atom, int a, int b) { return a + b; }, [](sub_atom, int a, int b) { return a - b; } }; } // function-based, dynamically typed, blocking API void blocking_calculator_fun(blocking_actor* self) { bool running = true; self->receive_while(running) ( [](add_atom, int a, int b) { return a + b; }, [](sub_atom, int a, int b) { return a - b; }, [&](exit_msg& em) { if (em.reason) { self->fail_state(std::move(em.reason)); running = false; } } ); } // function-based, statically typed, event-based API calculator_actor::behavior_type typed_calculator_fun() { return { [](add_atom, int a, int b) { return a + b; }, [](sub_atom, int a, int b) { return a - b; } }; } // class-based, dynamically typed, event-based API class calculator : public event_based_actor { public: calculator(actor_config& cfg) : event_based_actor(cfg) { // nop } behavior make_behavior() override { return calculator_fun(this); } }; // class-based, dynamically typed, blocking API class blocking_calculator : public blocking_actor { public: blocking_calculator(actor_config& cfg) : blocking_actor(cfg) { // nop } void act() override { blocking_calculator_fun(this); } }; // class-based, statically typed, event-based API class typed_calculator : public calculator_actor::base { public: typed_calculator(actor_config& cfg) : calculator_actor::base(cfg) { // nop } behavior_type make_behavior() override { return typed_calculator_fun(); } }; void tester(scoped_actor&) { // end of recursion } // tests a calculator instance template void tester(scoped_actor& self, const Handle& hdl, int x, int y, Ts&&... xs) { auto handle_err = [&](const error& err) { aout(self) << "AUT (actor under test) failed: " << self->system().render(err) << endl; }; // first test: x + y = z self->request(hdl, infinite, add_atom::value, x, y).receive( [&](int res1) { aout(self) << x << " + " << y << " = " << res1 << endl; // second test: x - y = z self->request(hdl, infinite, sub_atom::value, x, y).receive( [&](int res2) { aout(self) << x << " - " << y << " = " << res2 << endl; }, handle_err ); }, handle_err ); tester(self, std::forward(xs)...); } void caf_main(actor_system& system) { auto a1 = system.spawn(blocking_calculator_fun); auto a2 = system.spawn(calculator_fun); auto a3 = system.spawn(typed_calculator_fun); auto a4 = system.spawn(); auto a5 = system.spawn(); auto a6 = system.spawn(); scoped_actor self{system}; tester(self, a1, 1, 2, a2, 3, 4, a3, 5, 6, a4, 7, 8, a5, 9, 10, a6, 11, 12); self->send_exit(a1, exit_reason::user_shutdown); self->send_exit(a4, exit_reason::user_shutdown); } } // namespace CAF_MAIN() actor-framework-0.16.3/examples/message_passing/cell.cpp000066400000000000000000000031721341123343400233160ustar00rootroot00000000000000/******************************************************************************\ * This example is a very basic, non-interactive math service implemented * * for both the blocking and the event-based API. * \******************************************************************************/ // This file is partially included in the manual, do not modify // without updating the references in the *.tex files! // Manual references: lines 18-44, and 49-50 (Actor.tex) #include #include "caf/all.hpp" using std::cout; using std::endl; using namespace caf; using cell = typed_actor, replies_to::with>; struct cell_state { int value = 0; }; cell::behavior_type type_checked_cell(cell::stateful_pointer self) { return { [=](put_atom, int val) { self->state.value = val; }, [=](get_atom) { return self->state.value; } }; } behavior unchecked_cell(stateful_actor* self) { return { [=](put_atom, int val) { self->state.value = val; }, [=](get_atom) { return self->state.value; } }; } void caf_main(actor_system& system) { // create one cell for each implementation auto cell1 = system.spawn(type_checked_cell); auto cell2 = system.spawn(unchecked_cell); auto f = make_function_view(cell1); cout << "cell value: " << f(get_atom::value) << endl; f(put_atom::value, 20); cout << "cell value (after setting to 20): " << f(get_atom::value) << endl; // get an unchecked cell and send it some garbage anon_send(cell2, "hello there!"); } CAF_MAIN() actor-framework-0.16.3/examples/message_passing/dancing_kirby.cpp000066400000000000000000000044341341123343400252040ustar00rootroot00000000000000/******************************************************************************\ * This example illustrates how to do time-triggered loops in libcaf. * \ ******************************************************************************/ #include #include #include #include "caf/all.hpp" // This file is partially included in the manual, do not modify // without updating the references in the *.tex files! // Manual references: lines 56-75 (MessagePassing.tex) using std::cout; using std::endl; using std::pair; using namespace caf; using step_atom = atom_constant; // ASCII art figures constexpr const char* figures[] = { "<(^.^<)", "<(^.^)>", "(>^.^)>" }; struct animation_step { size_t figure_idx; size_t offset; }; // array of {figure, offset} pairs constexpr animation_step animation_steps[] = { {1, 7}, {0, 7}, {0, 6}, {0, 5}, {1, 5}, {2, 5}, {2, 6}, {2, 7}, {2, 8}, {2, 9}, {2, 10}, {1, 10}, {0, 10}, {0, 9}, {1, 9}, {2, 10}, {2, 11}, {2, 12}, {2, 13}, {1, 13}, {0, 13}, {0, 12}, {0, 11}, {0, 10}, {0, 9}, {0, 8}, {0, 7}, {1, 7} }; constexpr size_t animation_width = 20; // "draws" an animation step by printing "{offset_whitespaces}{figure}{padding}" void draw_kirby(const animation_step& animation) { cout.width(animation_width); // override last figure cout << '\r'; // print offset std::fill_n(std::ostream_iterator{cout}, animation.offset, ' '); // print figure cout << figures[animation.figure_idx]; // print padding cout.fill(' '); // make sure figure is printed cout.flush(); } // uses a message-based loop to iterate over all animation steps void dancing_kirby(event_based_actor* self) { // let's get it started self->send(self, step_atom::value, size_t{0}); self->become ( [=](step_atom, size_t step) { if (step == sizeof(animation_step)) { // we've printed all animation steps (done) cout << endl; self->quit(); return; } // print given step draw_kirby(animation_steps[step]); // animate next step in 150ms self->delayed_send(self, std::chrono::milliseconds(150), step_atom::value, step + 1); } ); } void caf_main(actor_system& system) { system.spawn(dancing_kirby); } CAF_MAIN() actor-framework-0.16.3/examples/message_passing/delegating.cpp000066400000000000000000000020161341123343400244760ustar00rootroot00000000000000#include #include "caf/all.hpp" // This file is partially included in the manual, do not modify // without updating the references in the *.tex files! // Manual references: lines 15-42 (MessagePassing.tex) using std::endl; using namespace caf; // using add_atom = atom_constant; (defined in atom.hpp) using calc = typed_actor::with>; void actor_a(event_based_actor* self, const calc& worker) { self->request(worker, std::chrono::seconds(10), add_atom::value, 1, 2).then( [=](int result) { aout(self) << "1 + 2 = " << result << endl; } ); } calc::behavior_type actor_b(calc::pointer self, const calc& worker) { return { [=](add_atom add, int x, int y) { return self->delegate(worker, add, x, y); } }; } calc::behavior_type actor_c() { return { [](add_atom, int x, int y) { return x + y; } }; } void caf_main(actor_system& system) { system.spawn(actor_a, system.spawn(actor_b, system.spawn(actor_c))); } CAF_MAIN() actor-framework-0.16.3/examples/message_passing/divider.cpp000066400000000000000000000037151341123343400240300ustar00rootroot00000000000000/******************************************************************************\ * A very basic, interactive divider. * \******************************************************************************/ // Manual refs: 19-25, 35-48, 68-77 (MessagePassing); // 19-34, 50-58 (Error) #include #include "caf/all.hpp" using std::cout; using std::endl; using std::flush; using namespace caf; namespace { enum class math_error : uint8_t { division_by_zero = 1 }; error make_error(math_error x) { return {static_cast(x), atom("math")}; } std::string to_string(math_error x) { switch (x) { case math_error::division_by_zero: return "division_by_zero"; default: return "-unknown-error-"; } } using div_atom = atom_constant; using divider = typed_actor::with>; divider::behavior_type divider_impl() { return { [](div_atom, double x, double y) -> result { if (y == 0.0) return math_error::division_by_zero; return x / y; } }; } class config : public actor_system_config { public: config() { auto renderer = [](uint8_t x, atom_value, const message&) { return "math_error" + deep_to_string_as_tuple(static_cast(x)); }; add_error_category(atom("math"), renderer); } }; void caf_main(actor_system& system, const config&) { double x; double y; cout << "x: " << flush; std::cin >> x; cout << "y: " << flush; std::cin >> y; auto div = system.spawn(divider_impl); scoped_actor self{system}; self->request(div, std::chrono::seconds(10), div_atom::value, x, y).receive( [&](double z) { aout(self) << x << " / " << y << " = " << z << endl; }, [&](const error& err) { aout(self) << "*** cannot compute " << x << " / " << y << " => " << system.render(err) << endl; } ); } } // namespace CAF_MAIN() actor-framework-0.16.3/examples/message_passing/fixed_stack.cpp000066400000000000000000000042471341123343400246670ustar00rootroot00000000000000#include #include #include #include "caf/all.hpp" using std::endl; using namespace caf; namespace { using pop_atom = atom_constant; using push_atom = atom_constant; enum class fixed_stack_errc : uint8_t { push_to_full = 1, pop_from_empty }; error make_error(fixed_stack_errc x) { return error{static_cast(x), atom("FixedStack")}; } class fixed_stack : public event_based_actor { public: fixed_stack(actor_config& cfg, size_t stack_size) : event_based_actor(cfg), size_(stack_size) { full_.assign( [=](push_atom, int) -> error { return fixed_stack_errc::push_to_full; }, [=](pop_atom) -> int { auto result = data_.back(); data_.pop_back(); become(filled_); return result; } ); filled_.assign( [=](push_atom, int what) { data_.push_back(what); if (data_.size() == size_) become(full_); }, [=](pop_atom) -> int { auto result = data_.back(); data_.pop_back(); if (data_.empty()) become(empty_); return result; } ); empty_.assign( [=](push_atom, int what) { data_.push_back(what); become(filled_); }, [=](pop_atom) -> error { return fixed_stack_errc::pop_from_empty; } ); } behavior make_behavior() override { assert(size_ < 2); return empty_; } private: size_t size_; std::vector data_; behavior full_; behavior filled_; behavior empty_; }; void caf_main(actor_system& system) { scoped_actor self{system}; auto st = self->spawn(5u); // fill stack for (int i = 0; i < 10; ++i) self->send(st, push_atom::value, i); // drain stack aout(self) << "stack: { "; bool stack_empty = false; while (!stack_empty) { self->request(st, std::chrono::seconds(10), pop_atom::value).receive( [&](int x) { aout(self) << x << " "; }, [&](const error&) { stack_empty = true; } ); } aout(self) << "}" << endl; self->send_exit(st, exit_reason::user_shutdown); } } // namespace CAF_MAIN() actor-framework-0.16.3/examples/message_passing/promises.cpp000066400000000000000000000025761341123343400242470ustar00rootroot00000000000000/******************************************************************************\ * Illustrates response promises. * \******************************************************************************/ // This file is partially included in the manual, do not modify // without updating the references in the *.tex files! // Manual references: lines 18-43 (MessagePassing.tex) #include #include "caf/all.hpp" using std::cout; using std::endl; using namespace caf; // using add_atom = atom_constant; (defined in atom.hpp) using adder = typed_actor::with>; // function-based, statically typed, event-based API adder::behavior_type worker() { return { [](add_atom, int a, int b) { return a + b; } }; } // function-based, statically typed, event-based API adder::behavior_type calculator_master(adder::pointer self) { auto w = self->spawn(worker); return { [=](add_atom x, int y, int z) -> result { auto rp = self->make_response_promise(); self->request(w, infinite, x, y, z).then([=](int result) mutable { rp.deliver(result); }); return rp; } }; } void caf_main(actor_system& system) { auto f = make_function_view(system.spawn(calculator_master)); cout << "12 + 13 = " << f(add_atom::value, 12, 13) << endl; } CAF_MAIN() actor-framework-0.16.3/examples/message_passing/request.cpp000066400000000000000000000045111341123343400240650ustar00rootroot00000000000000/******************************************************************************\ * Illustrates semantics of request().{then|await|receive}. * \******************************************************************************/ // This file is partially included in the manual, do not modify // without updating the references in the *.tex files! // Manual references: lines 20-37, 39-51, 53-64, 67-69 (MessagePassing.tex) #include #include #include #include "caf/all.hpp" using std::endl; using std::vector; using std::chrono::seconds; using namespace caf; using cell = typed_actor, replies_to::with>; struct cell_state { int value = 0; }; cell::behavior_type cell_impl(cell::stateful_pointer self, int x0) { self->state.value = x0; return { [=](put_atom, int val) { self->state.value = val; }, [=](get_atom) { return self->state.value; } }; } void waiting_testee(event_based_actor* self, vector cells) { for (auto& x : cells) self->request(x, seconds(1), get_atom::value).await([=](int y) { aout(self) << "cell #" << x.id() << " -> " << y << endl; }); } void multiplexed_testee(event_based_actor* self, vector cells) { for (auto& x : cells) self->request(x, seconds(1), get_atom::value).then([=](int y) { aout(self) << "cell #" << x.id() << " -> " << y << endl; }); } void blocking_testee(blocking_actor* self, vector cells) { for (auto& x : cells) self->request(x, seconds(1), get_atom::value).receive( [&](int y) { aout(self) << "cell #" << x.id() << " -> " << y << endl; }, [&](error& err) { aout(self) << "cell #" << x.id() << " -> " << self->system().render(err) << endl; } ); } void caf_main(actor_system& system) { vector cells; for (auto i = 0; i < 5; ++i) cells.emplace_back(system.spawn(cell_impl, i * i)); scoped_actor self{system}; aout(self) << "waiting_testee" << endl; auto x1 = self->spawn(waiting_testee, cells); self->wait_for(x1); aout(self) << "multiplexed_testee" << endl; auto x2 = self->spawn(multiplexed_testee, cells); self->wait_for(x2); aout(self) << "blocking_testee" << endl; system.spawn(blocking_testee, cells); } CAF_MAIN() actor-framework-0.16.3/examples/message_passing/typed_calculator.cpp000066400000000000000000000050711341123343400257350ustar00rootroot00000000000000/******************************************************************************\ * This example is a very basic, non-interactive math service implemented * * using typed actors. * \ ******************************************************************************/ #include #include #include "caf/all.hpp" using std::endl; using namespace caf; namespace { using plus_atom = atom_constant; using minus_atom = atom_constant; using result_atom = atom_constant; using calculator_type = typed_actor::with, replies_to::with>; calculator_type::behavior_type typed_calculator_fun(calculator_type::pointer) { return { [](plus_atom, int x, int y) { return std::make_tuple(result_atom::value, x + y); }, [](minus_atom, int x, int y) { return std::make_tuple(result_atom::value, x - y); } }; } class typed_calculator_class : public calculator_type::base { public: typed_calculator_class(actor_config& cfg) : calculator_type::base(cfg) { // nop } protected: behavior_type make_behavior() override { return { [](plus_atom, int x, int y) { return std::make_tuple(result_atom::value, x + y); }, [](minus_atom, int x, int y) { return std::make_tuple(result_atom::value, x - y); } }; } }; void tester(event_based_actor* self, const calculator_type& testee) { self->link_to(testee); // first test: 2 + 1 = 3 self->request(testee, infinite, plus_atom::value, 2, 1).then( [=](result_atom, int r1) { // second test: 2 - 1 = 1 self->request(testee, infinite, minus_atom::value, 2, 1).then( [=](result_atom, int r2) { // both tests succeeded if (r1 == 3 && r2 == 1) { aout(self) << "AUT (actor under test) seems to be ok" << endl; } self->send_exit(testee, exit_reason::user_shutdown); } ); }, [=](const error& err) { aout(self) << "AUT (actor under test) failed: " << self->system().render(err) << endl; self->quit(exit_reason::user_shutdown); } ); } void caf_main(actor_system& system) { // test function-based impl system.spawn(tester, system.spawn(typed_calculator_fun)); system.await_all_actors_done(); // test class-based impl system.spawn(tester, system.spawn()); } } // namespace CAF_MAIN() actor-framework-0.16.3/examples/qtsupport/000077500000000000000000000000001341123343400206015ustar00rootroot00000000000000actor-framework-0.16.3/examples/qtsupport/chatwidget.cpp000066400000000000000000000101561341123343400234330ustar00rootroot00000000000000#include #include #include "caf/all.hpp" #include "caf/detail/scope_guard.hpp" CAF_PUSH_WARNINGS #include #include CAF_POP_WARNINGS #include "chatwidget.hpp" using namespace std; using namespace caf; ChatWidget::ChatWidget(QWidget* parent, Qt::WindowFlags f) : super(parent, f), input_(nullptr), output_(nullptr) { // nop } ChatWidget::~ChatWidget() { // nop } void ChatWidget::init(actor_system& system) { super::init(system); set_message_handler ([=](actor_companion* self) -> message_handler { return { [=](join_atom, const group& what) { if (chatroom_) { self->send(chatroom_, name_ + " has left the chatroom"); self->leave(chatroom_); } self->join(what); print(("*** joined " + to_string(what)).c_str()); chatroom_ = what; self->send(what, name_ + " has entered the chatroom"); }, [=](set_name_atom, string& name) { self->send(chatroom_, name_ + " is now known as " + name); name_ = std::move(name); print("*** changed name to " + QString::fromUtf8(name_.c_str())); }, [=](quit_atom) { quit_and_close(); }, [=](const string& txt) { // don't print own messages if (self != self->current_sender()) print(QString::fromUtf8(txt.c_str())); }, [=](const group_down_msg& gdm) { print("*** chatroom offline: " + QString::fromUtf8(to_string(gdm.source).c_str())); } }; }); } void ChatWidget::sendChatMessage() { auto cleanup = detail::make_scope_guard([=] { input()->setText(QString()); }); QString line = input()->text(); if (line.startsWith('/')) { vector words; split(words, line.midRef(1).toUtf8().constData(), is_any_of(" ")); message_builder mb; if (words.size() > 1) { // convert first word to an atom mb.append(atom_from_string(words.front())) .append(words.begin() + 1, words.end()); }; auto res = mb.apply({ [=](join_atom, const string& mod, const string& g) { auto x = system().groups().get(mod, g); if (! x) print("*** error: " + QString::fromUtf8(system().render(x.error()).c_str())); else self()->send(self(), atom("join"), std::move(*x)); }, [=](set_name_atom atm, string& name) { send_as(as_actor(), as_actor(), atm, std::move(name)); } }); if (! res) print("*** list of commands:\n" "/join \n" "/setName \n"); return; } if (name_.empty()) { print("*** please set a name before sending messages"); return; } if (! chatroom_) { print("*** no one is listening... please join a group"); return; } string msg = name_; msg += ": "; msg += line.toUtf8().constData(); print(": " + input()->text()); send_as(as_actor(), chatroom_, std::move(msg)); } void ChatWidget::joinGroup() { if (name_.empty()) { QMessageBox::information(this, "No Name, No Chat", "Please set a name first."); return; } auto gname = QInputDialog::getText(this, "Join Group", "Please enter a group as :", QLineEdit::Normal, "remote:chatroom@localhost:4242"); int pos = gname.indexOf(':'); if (pos < 0) { QMessageBox::warning(this, "Not a Group", "Invalid format"); return; } string mod = gname.left(pos).toUtf8().constData(); string gid = gname.midRef(pos+1).toUtf8().constData(); auto x = system().groups().get(mod, gid); if (! x) QMessageBox::critical(this, "Error", system().render(x.error()).c_str()); else self()->send(self(), join_atom::value, std::move(*x)); } void ChatWidget::changeName() { auto name = QInputDialog::getText(this, "Change Name", "Please enter a new name"); if (! name.isEmpty()) send_as(as_actor(), as_actor(), atom("setName"), name.toUtf8().constData()); } actor-framework-0.16.3/examples/qtsupport/chatwidget.hpp000066400000000000000000000027231341123343400234410ustar00rootroot00000000000000#pragma once #include #include "caf/all.hpp" #include "caf/mixin/actor_widget.hpp" CAF_PUSH_WARNINGS #include #include #include CAF_POP_WARNINGS class ChatWidget : public caf::mixin::actor_widget { private: // -- Qt boilerplate code ---------------------------------------------------- Q_OBJECT public: // -- member types ----------------------------------------------------------- using super = caf::mixin::actor_widget; using set_name_atom = caf::atom_constant; using quit_atom = caf::atom_constant; ChatWidget(QWidget* parent = nullptr, Qt::WindowFlags f = 0); ~ChatWidget(); void init(caf::actor_system& system); public slots: void sendChatMessage(); void joinGroup(); void changeName(); private: template T* get(T*& member, const char* name) { if (member == nullptr) { member = findChild(name); if (member == nullptr) throw std::runtime_error("unable to find child: " + std::string(name)); } return member; } inline QLineEdit* input() { return get(input_, "input"); } inline QTextEdit* output() { return get(output_, "output"); } inline void print(const QString& what) { output()->append(what); } caf::actor_system& system() { return self()->home_system(); } QLineEdit* input_; QTextEdit* output_; std::string name_; caf::group chatroom_; }; actor-framework-0.16.3/examples/qtsupport/chatwindow.ui000066400000000000000000000105151341123343400233110ustar00rootroot00000000000000 ChatWindow 0 0 800 600 MainWindow 0 0 0 0 0 Qt::ClickFocus false true Qt::StrongFocus 0 0 QFrame::NoFrame QFrame::Raised 0 0 0 0 0 0 0 0 800 22 File Join Group Set Name ChatWidget QWidget

chatwidget.hpp
1 sendChatMessage() changeName() joinGroup() actionJoin_Group triggered() chatwidget joinGroup() -1 -1 399 300 actionSet_Name triggered() chatwidget changeName() -1 -1 399 300 input returnPressed() chatwidget sendChatMessage() 362 547 399 310 actor-framework-0.16.3/examples/qtsupport/qt_group_chat.cpp000066400000000000000000000052011341123343400241420ustar00rootroot00000000000000/******************************************************************************\ * This example program represents a minimal GUI chat program * * based on group communication. This chat program is compatible to the * * terminal version in remote_actors/group_chat.cpp. * * * * Setup for a minimal chat between "alice" and "bob": * * - ./build/bin/group_server -p 4242 * * - ./build/bin/qt_group_chat -g remote:chatroom@localhost:4242 -n alice * * - ./build/bin/qt_group_chat -g remote:chatroom@localhost:4242 -n bob * \******************************************************************************/ #include #include #include #include #include #include #include #include "caf/all.hpp" #include "caf/io/all.hpp" CAF_PUSH_WARNINGS #include #include #include "ui_chatwindow.h" // auto generated from chatwindow.ui CAF_POP_WARNINGS using namespace std; using namespace caf; class config : public actor_system_config { public: std::string name; std::string group_id; config(int argc, char** argv) { opt_group{custom_options_, "global"} .add(name, "name,n", "set name") .add(group_id, "group,g", "join group (format: :"); parse(argc, argv); load(); } }; int main(int argc, char** argv) { config cfg{argc, argv}; actor_system system{cfg}; auto name = cfg.name; group grp; // evaluate group parameters if (! cfg.group_id.empty()) { auto p = cfg.group_id.find(':'); if (p == std::string::npos) { cerr << "*** error parsing argument " << cfg.group_id << ", expected format: :"; } else { auto module = cfg.group_id.substr(0, p); auto group_uri = cfg.group_id.substr(p + 1); auto g = system.groups().get(module, group_uri); if (! g) { cerr << "*** unable to get group " << group_uri << " from module " << module << ": " << system.render(g.error()) << endl; return -1; } grp = std::move(*g); } } QApplication app{argc, argv}; app.setQuitOnLastWindowClosed(true); QMainWindow mw; Ui::ChatWindow helper; helper.setupUi(&mw); helper.chatwidget->init(system); auto client = helper.chatwidget->as_actor(); if (! name.empty()) send_as(client, client, atom("setName"), move(name)); if (grp) send_as(client, client, atom("join"), std::move(grp)); mw.show(); return app.exec(); } actor-framework-0.16.3/examples/remoting/000077500000000000000000000000001341123343400203445ustar00rootroot00000000000000actor-framework-0.16.3/examples/remoting/distributed_calculator.cpp000066400000000000000000000240201341123343400256010ustar00rootroot00000000000000// This program is a distributed version of the math_actor example. // Client and server use a stateless request/response protocol and the client // is failure resilient by using a FIFO request queue. // The client auto-reconnects and also allows for server reconfiguration. // // Run server at port 4242: // - ./build/bin/distributed_math_actor -s -p 4242 // // Run client at the same host: // - ./build/bin/distributed_math_actor -c -p 4242 // Manual refs: 222-234 (ConfiguringActorSystems) #include #include #include #include #include #include #include #include "caf/all.hpp" #include "caf/io/all.hpp" using std::cout; using std::cerr; using std::endl; using std::string; using namespace caf; namespace { constexpr auto task_timeout = std::chrono::seconds(10); using plus_atom = atom_constant; using minus_atom = atom_constant; // our "service" behavior calculator_fun() { return { [](plus_atom, int a, int b) { return a + b; }, [](minus_atom, int a, int b) { return a - b; } }; } // State transition of the client for connecting to the server: // // +-------------+ // | init | // +-------------+ // | // V // +-------------+ // | unconnected |<------------------+ // +-------------+ | // | | // | {connect Host Port} | // | | // V | // +-------------+ {error} | // +-------------->| connecting |-------------------+ // | +-------------+ | // | | | // | | {ok, Calculator} | // |{connect Host Port} | | // | V | // | +-------------+ {DOWN server} | // +---------------| running |-------------------+ // +-------------+ namespace client { // a simple calculater task: operation + operands struct task { atom_value op; int lhs; int rhs; }; // the client queues pending tasks struct state { strong_actor_ptr current_server; std::vector tasks; }; // prototype definition for unconnected state behavior unconnected(stateful_actor*); // prototype definition for transition to `connecting` with Host and Port void connecting(stateful_actor*, const std::string& host, uint16_t port); // prototype definition for transition to `running` with Calculator behavior running(stateful_actor*, const actor& calculator); // starting point of our FSM behavior init(stateful_actor* self) { // transition to `unconnected` on server failure self->set_down_handler([=](const down_msg& dm) { if (dm.source == self->state.current_server) { aout(self) << "*** lost connection to server" << endl; self->state.current_server = nullptr; self->become(unconnected(self)); } }); return unconnected(self); } behavior unconnected(stateful_actor* self) { return { [=](plus_atom op, int x, int y) { self->state.tasks.emplace_back(task{op, x, y}); }, [=](minus_atom op, int x, int y) { self->state.tasks.emplace_back(task{op, x, y}); }, [=](connect_atom, const std::string& host, uint16_t port) { connecting(self, host, port); } }; } void connecting(stateful_actor* self, const std::string& host, uint16_t port) { // make sure we are not pointing to an old server self->state.current_server = nullptr; // use request().await() to suspend regular behavior until MM responded auto mm = self->system().middleman().actor_handle(); self->request(mm, infinite, connect_atom::value, host, port).await( [=](const node_id&, strong_actor_ptr serv, const std::set& ifs) { if (!serv) { aout(self) << R"(*** no server found at ")" << host << R"(":)" << port << endl; return; } if (!ifs.empty()) { aout(self) << R"(*** typed actor found at ")" << host << R"(":)" << port << ", but expected an untyped actor "<< endl; return; } aout(self) << "*** successfully connected to server" << endl; self->state.current_server = serv; auto hdl = actor_cast(serv); self->monitor(hdl); self->become(running(self, hdl)); }, [=](const error& err) { aout(self) << R"(*** cannot connect to ")" << host << R"(":)" << port << " => " << self->system().render(err) << endl; self->become(unconnected(self)); } ); } // prototype definition for transition to `running` with Calculator behavior running(stateful_actor* self, const actor& calculator) { auto send_task = [=](const task& x) { self->request(calculator, task_timeout, x.op, x.lhs, x.rhs).then( [=](int result) { aout(self) << x.lhs << (x.op == plus_atom::value ? " + " : " - ") << x.rhs << " = " << result << endl; }, [=](const error&) { // simply try again by enqueueing the task to the mailbox again self->send(self, x.op, x.lhs, x.rhs); } ); }; for (auto& x : self->state.tasks) send_task(x); self->state.tasks.clear(); return { [=](plus_atom op, int x, int y) { send_task(task{op, x, y}); }, [=](minus_atom op, int x, int y) { send_task(task{op, x, y}); }, [=](connect_atom, const std::string& host, uint16_t port) { connecting(self, host, port); } }; } } // namespace client // removes leading and trailing whitespaces string trim(std::string s) { auto not_space = [](char c) { return isspace(c) == 0; }; // trim left s.erase(s.begin(), find_if(s.begin(), s.end(), not_space)); // trim right s.erase(find_if(s.rbegin(), s.rend(), not_space).base(), s.end()); return s; } // tries to convert `str` to an int optional toint(const string& str) { char* end; auto result = static_cast(strtol(str.c_str(), &end, 10)); if (end == str.c_str() + str.size()) return result; return none; } // converts "+" to the atom '+' and "-" to the atom '-' optional plus_or_minus(const string& str) { if (str == "+") return plus_atom::value; if (str == "-") return minus_atom::value; return none; } class config : public actor_system_config { public: uint16_t port = 0; std::string host = "localhost"; bool server_mode = false; config() { opt_group{custom_options_, "global"} .add(port, "port,p", "set port") .add(host, "host,H", "set host (ignored in server mode)") .add(server_mode, "server-mode,s", "enable server mode"); } }; void client_repl(actor_system& system, const config& cfg) { // keeps track of requests and tries to reconnect on server failures auto usage = [] { cout << "Usage:" << endl << " quit : terminates the program" << endl << " connect : connects to a remote actor" << endl << " + : adds two integers" << endl << " - : subtracts two integers" << endl << endl; }; usage(); bool done = false; auto client = system.spawn(client::init); if (!cfg.host.empty() && cfg.port > 0) anon_send(client, connect_atom::value, cfg.host, cfg.port); else cout << "*** no server received via config, " << R"(please use "connect " before using the calculator)" << endl; // defining the handler outside the loop is more efficient as it avoids // re-creating the same object over and over again message_handler eval{ [&](const string& cmd) { if (cmd != "quit") return; anon_send_exit(client, exit_reason::user_shutdown); done = true; }, [&](string& arg0, string& arg1, string& arg2) { if (arg0 == "connect") { char* end = nullptr; auto lport = strtoul(arg2.c_str(), &end, 10); if (end != arg2.c_str() + arg2.size()) cout << R"(")" << arg2 << R"(" is not an unsigned integer)" << endl; else if (lport > std::numeric_limits::max()) cout << R"(")" << arg2 << R"(" > )" << std::numeric_limits::max() << endl; else anon_send(client, connect_atom::value, move(arg1), static_cast(lport)); } else { auto x = toint(arg0); auto op = plus_or_minus(arg1); auto y = toint(arg2); if (x && y && op) anon_send(client, *op, *x, *y); } } }; // read next line, split it, and feed to the eval handler string line; while (!done && std::getline(std::cin, line)) { line = trim(std::move(line)); // ignore leading and trailing whitespaces std::vector words; split(words, line, is_any_of(" "), token_compress_on); if (!message_builder(words.begin(), words.end()).apply(eval)) usage(); } } void run_server(actor_system& system, const config& cfg) { auto calc = system.spawn(calculator_fun); // try to publish math actor at given port cout << "*** try publish at port " << cfg.port << endl; auto expected_port = io::publish(calc, cfg.port); if (!expected_port) { std::cerr << "*** publish failed: " << system.render(expected_port.error()) << endl; return; } cout << "*** server successfully published at port " << *expected_port << endl << "*** press [enter] to quit" << endl; string dummy; std::getline(std::cin, dummy); cout << "... cya" << endl; anon_send_exit(calc, exit_reason::user_shutdown); } void caf_main(actor_system& system, const config& cfg) { auto f = cfg.server_mode ? run_server : client_repl; f(system, cfg); } } // namespace CAF_MAIN(io::middleman) actor-framework-0.16.3/examples/remoting/group_chat.cpp000066400000000000000000000115761341123343400232150ustar00rootroot00000000000000/******************************************************************************\ * This example program represents a minimal terminal chat program * * based on group communication. * * * * Setup for a minimal chat between "alice" and "bob": * * - ./build/bin/group_chat -s -p 4242 * * - ./build/bin/group_chat -g remote:chatroom@localhost:4242 -n alice * * - ./build/bin/group_chat -g remote:chatroom@localhost:4242 -n bob * \ ******************************************************************************/ #include #include #include #include #include #include #include "caf/all.hpp" #include "caf/io/all.hpp" #include "caf/string_algorithms.hpp" using namespace std; using namespace caf; namespace { using broadcast_atom = atom_constant; struct line { string str; }; istream& operator>>(istream& is, line& l) { getline(is, l.str); return is; } behavior client(event_based_actor* self, const string& name) { return { [=](broadcast_atom, const string& message) { for(auto& dest : self->joined_groups()) { self->send(dest, name + ": " + message); } }, [=](join_atom, const group& what) { for (const auto& g : self->joined_groups()) { cout << "*** leave " << to_string(g) << endl; self->send(g, name + " has left the chatroom"); self->leave(g); } cout << "*** join " << to_string(what) << endl; self->join(what); self->send(what, name + " has entered the chatroom"); }, [=](const string& txt) { // don't print own messages if (self->current_sender() != self) cout << txt << endl; }, [=](const group_down_msg& g) { cout << "*** chatroom offline: " << to_string(g.source) << endl; } }; } class config : public actor_system_config { public: std::string name; std::vector group_uris; uint16_t port = 0; bool server_mode = false; config() { opt_group{custom_options_, "global"} .add(name, "name,n", "set name") .add(group_uris, "group,g", "join group") .add(server_mode, "server,s", "run in server mode") .add(port, "port,p", "set port (ignored in client mode)"); } }; void run_server(actor_system& system, const config& cfg) { auto res = system.middleman().publish_local_groups(cfg.port); if (! res) { std::cerr << "*** publishing local groups failed: " << system.render(res.error()) << endl; return; } cout << "*** listening at port " << *res << endl << "*** press [enter] to quit" << endl; string dummy; std::getline(std::cin, dummy); cout << "... cya" << endl; } void run_client(actor_system& system, const config& cfg) { auto name = cfg.name; while (name.empty()) { cout << "please enter your name: " << flush; if (!getline(cin, name)) { cerr << "*** no name given... terminating" << endl; return; } } cout << "*** starting client, type '/help' for a list of commands" << endl; auto client_actor = system.spawn(client, name); for (auto& uri : cfg.group_uris) { auto tmp = system.groups().get(uri); if (tmp) anon_send(client_actor, join_atom::value, std::move(*tmp)); else cerr << R"(*** failed to parse ")" << uri << R"(" as group URI: )" << system.render(tmp.error()) << endl; } istream_iterator eof; vector words; for (istream_iterator i(cin); i != eof; ++i) { auto send_input = [&] { if (!i->str.empty()) anon_send(client_actor, broadcast_atom::value, i->str); }; words.clear(); split(words, i->str, is_any_of(" ")); auto res = message_builder(words.begin(), words.end()).apply({ [&](const string& cmd, const string& mod, const string& id) { if (cmd == "/join") { auto grp = system.groups().get(mod, id); if (grp) anon_send(client_actor, join_atom::value, *grp); } else { send_input(); } }, [&](const string& cmd) { if (cmd == "/quit") { cin.setstate(ios_base::eofbit); } else if (cmd[0] == '/') { cout << "*** available commands:\n" " /join join a new chat channel\n" " /quit quit the program\n" " /help print this text\n" << flush; } else { send_input(); } } }); if (!res) send_input(); } // force actor to quit anon_send_exit(client_actor, exit_reason::user_shutdown); } void caf_main(actor_system& system, const config& cfg) { auto f = cfg.server_mode ? run_server : run_client; f(system, cfg); } } // namespace CAF_MAIN(io::middleman) actor-framework-0.16.3/examples/remoting/group_server.cpp000066400000000000000000000026071341123343400235770ustar00rootroot00000000000000/******************************************************************************\ * This example program represents a minimal IRC-like group * * communication server. * * * * Setup for a minimal chat between "alice" and "bob": * * - ./build/bin/group_server -p 4242 * * - ./build/bin/group_chat -g remote:chatroom@localhost:4242 -n alice * * - ./build/bin/group_chat -g remote:chatroom@localhost:4242 -n bob * \ ******************************************************************************/ #include #include #include #include "caf/all.hpp" #include "caf/io/all.hpp" using namespace std; using namespace caf; namespace { class config : public actor_system_config { public: uint16_t port = 0; config() { opt_group{custom_options_, "global"} .add(port, "port,p", "set port"); } }; void caf_main(actor_system& system, const config& cfg) { system.middleman().publish_local_groups(cfg.port); cout << "type 'quit' to shutdown the server" << endl; string line; while (getline(cin, line)) if (line == "quit") return; else cerr << "illegal command" << endl; } } // namespace CAF_MAIN(io::middleman) actor-framework-0.16.3/examples/remoting/pingpong.proto000066400000000000000000000002661341123343400232560ustar00rootroot00000000000000package org.libcppa; message Ping { required int32 id = 1; } message Pong { required int32 id = 1; } message PingOrPong { optional Ping ping = 1; optional Pong pong = 2; } actor-framework-0.16.3/examples/remoting/remote_spawn.cpp000066400000000000000000000107341341123343400235600ustar00rootroot00000000000000// This program illustrates how to spawn a simple calculator // across the network. // // Run server at port 4242: // - remote_spawn -s -p 4242 // // Run client at the same host: // - remote_spawn -H localhost -p 4242 // Manual refs: 33-39, 99-101,106,110 (ConfiguringActorApplications) // 125-143 (RemoteSpawn) #include #include #include #include #include #include #include #include "caf/all.hpp" #include "caf/io/all.hpp" using std::cout; using std::cerr; using std::endl; using std::string; using namespace caf; namespace { using add_atom = atom_constant; using sub_atom = atom_constant; using calculator = typed_actor::with, replies_to::with>; calculator::behavior_type calculator_fun(calculator::pointer self) { return { [=](add_atom, int a, int b) -> int { aout(self) << "received task from a remote node" << endl; return a + b; }, [=](sub_atom, int a, int b) -> int { aout(self) << "received task from a remote node" << endl; return a - b; } }; } // removes leading and trailing whitespaces string trim(string s) { auto not_space = [](char c) { return isspace(c) == 0; }; // trim left s.erase(s.begin(), find_if(s.begin(), s.end(), not_space)); // trim right s.erase(find_if(s.rbegin(), s.rend(), not_space).base(), s.end()); return s; } // implements our main loop for reading user input void client_repl(function_view f) { auto usage = [] { cout << "Usage:" << endl << " quit : terminate program" << endl << " + : adds two integers" << endl << " - : subtracts two integers" << endl << endl; }; usage(); // read next line, split it, and evaluate user input string line; while (std::getline(std::cin, line)) { if ((line = trim(std::move(line))) == "quit") return; std::vector words; split(words, line, is_any_of(" "), token_compress_on); if (words.size() != 3) { usage(); continue; } auto to_int = [](const string& str) -> optional { char* end = nullptr; auto res = strtol(str.c_str(), &end, 10); if (end == str.c_str() + str.size()) return static_cast(res); return none; }; auto x = to_int(words[0]); auto y = to_int(words[2]); if (!x || !y || (words[1] != "+" && words[1] != "-")) usage(); else cout << " = " << (words[1] == "+" ? f(add_atom::value, *x, *y) : f(sub_atom::value, *x, *y)) << "\n"; } } struct config : actor_system_config { config() { add_actor_type("calculator", calculator_fun); opt_group{custom_options_, "global"} .add(port, "port,p", "set port") .add(host, "host,H", "set node (ignored in server mode)") .add(server_mode, "server-mode,s", "enable server mode"); } uint16_t port = 0; string host = "localhost"; bool server_mode = false; }; void server(actor_system& system, const config& cfg) { auto res = system.middleman().open(cfg.port); if (!res) { cerr << "*** cannot open port: " << system.render(res.error()) << endl; return; } cout << "*** running on port: " << *res << endl << "*** press to shutdown server" << endl; getchar(); } void client(actor_system& system, const config& cfg) { auto node = system.middleman().connect(cfg.host, cfg.port); if (!node) { cerr << "*** connect failed: " << system.render(node.error()) << endl; return; } auto type = "calculator"; // type of the actor we wish to spawn auto args = make_message(); // arguments to construct the actor auto tout = std::chrono::seconds(30); // wait no longer than 30s auto worker = system.middleman().remote_spawn(*node, type, args, tout); if (!worker) { cerr << "*** remote spawn failed: " << system.render(worker.error()) << endl; return; } // start using worker in main loop client_repl(make_function_view(*worker)); // be a good citizen and terminate remotely spawned actor before exiting anon_send_exit(*worker, exit_reason::kill); } void caf_main(actor_system& system, const config& cfg) { auto f = cfg.server_mode ? server : client; f(system, cfg); } } // namespace CAF_MAIN(io::middleman) actor-framework-0.16.3/examples/streaming/000077500000000000000000000000001341123343400205115ustar00rootroot00000000000000actor-framework-0.16.3/examples/streaming/integer_stream.cpp000066400000000000000000000114071341123343400242300ustar00rootroot00000000000000/****************************************************************************** * Basic, non-interactive streaming example for processing integers. * ******************************************************************************/ // Manual refs: lines 17-52, 54-87, 89-120, 133-139 (Streaming) #include #include #include "caf/all.hpp" using std::endl; using namespace caf; namespace { // Simple source for generating a stream of integers from [0, n). behavior int_source(event_based_actor* self) { return { [=](open_atom, int n) { // Produce at least one value. if (n <= 0) n = 1; // Create a stream manager for implementing a stream source. The // streaming logic requires three functions: initializer, generator, and // predicate. return self->make_source( // Initializer. The type of the first argument (state) is freely // chosen. If no state is required, `caf::unit_t` can be used here. [](int& x) { x = 0; }, // Generator. This function is called by CAF to produce new stream // elements for downstream actors. The `x` argument is our state again // (with our freely chosen type). The second argument `out` points to // the output buffer. The template argument (here: int) determines what // elements downstream actors receive in this stream. Finally, `num` is // a hint from CAF how many elements we should ideally insert into // `out`. We can always insert fewer or more items. [n](int& x, downstream& out, size_t num) { auto max_x = std::min(x + static_cast(num), n); for (; x < max_x; ++x) out.push(x); }, // Predicate. This function tells CAF when we reached the end. [n](const int& x) { return x == n; } ); } }; } // Simple stage that only selects even numbers. behavior int_selector(event_based_actor* self) { return { [=](stream in) { // Create a stream manager for implementing a stream stage. Similar to // `make_source`, we need three functions: initialzer, processor, and // finalizer. return self->make_stage( // Our input source. in, // Initializer. Here, we don't need any state and simply use unit_t. [](unit_t&) { // nop }, // Processor. This function takes individual input elements as `val` // and forwards even integers to `out`. [](unit_t&, downstream& out, int val) { if (val % 2 == 0) out.push(val); }, // Finalizer. Allows us to run cleanup code once the stream terminates. [=](unit_t&, const error& err) { if (err) { aout(self) << "int_selector aborted with error: " << err << std::endl; } else { aout(self) << "int_selector finalized" << std::endl; } // else: regular stream shutdown } ); } }; } behavior int_sink(event_based_actor* self) { return { [=](stream in) { // Create a stream manager for implementing a stream sink. Once more, we // have to provide three functions: Initializer, Consumer, Finalizer. return self->make_sink( // Our input source. in, // Initializer. Here, we store all values we receive. Note that streams // are potentially unbound, so this is usually a bad idea outside small // examples like this one. [](std::vector&) { // nop }, // Consumer. Takes individual input elements as `val` and stores them // in our history. [](std::vector& xs, int val) { xs.emplace_back(val); }, // Finalizer. Allows us to run cleanup code once the stream terminates. [=](std::vector& xs, const error& err) { if (err) { aout(self) << "int_sink aborted with error: " << err << std::endl; } else { aout(self) << "int_sink finalized after receiving: " << xs << std::endl; } } ); } }; } struct config : actor_system_config { config() { opt_group{custom_options_, "global"} .add(with_stage, "with-stage,s", "use a stage for filtering odd numbers") .add(n, "num-values,n", "number of values produced by the source"); } bool with_stage = false; int n = 100; }; void caf_main(actor_system& sys, const config& cfg) { auto src = sys.spawn(int_source); auto snk = sys.spawn(int_sink); auto pipeline = cfg.with_stage ? snk * sys.spawn(int_selector) * src : snk * src; anon_send(pipeline, open_atom::value, cfg.n); } } // namespace CAF_MAIN() actor-framework-0.16.3/libcaf_core/000077500000000000000000000000001341123343400171325ustar00rootroot00000000000000actor-framework-0.16.3/libcaf_core/CMakeLists.txt000066400000000000000000000120371341123343400216750ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8.12) project(caf_core C CXX) # get header files; only needed by CMake generators, # e.g., for creating proper Xcode projects file(GLOB_RECURSE LIBCAF_CORE_HDRS "caf/*.hpp") # list cpp files excluding platform-dependent files set(LIBCAF_CORE_SRCS src/abstract_actor.cpp src/abstract_channel.cpp src/abstract_composable_behavior.cpp src/abstract_coordinator.cpp src/abstract_group.cpp src/actor.cpp src/actor_addr.cpp src/actor_clock.cpp src/actor_companion.cpp src/actor_config.cpp src/actor_control_block.cpp src/actor_ostream.cpp src/actor_pool.cpp src/actor_proxy.cpp src/actor_registry.cpp src/actor_system.cpp src/actor_system_config.cpp src/append_hex.cpp src/atom.cpp src/attachable.cpp src/behavior.cpp src/behavior_impl.cpp src/behavior_stack.cpp src/blocking_actor.cpp src/blocking_behavior.cpp src/chars.cpp src/concatenated_tuple.cpp src/config_option.cpp src/config_option_adder.cpp src/config_option_set.cpp src/config_value.cpp src/decorated_tuple.cpp src/default_attachable.cpp src/defaults.cpp src/deserializer.cpp src/downstream_manager.cpp src/downstream_manager_base.cpp src/downstream_messages.cpp src/duration.cpp src/dynamic_message_data.cpp src/error.cpp src/event_based_actor.cpp src/execution_unit.cpp src/exit_reason.cpp src/forwarding_actor_proxy.cpp src/get_mac_addresses.cpp src/get_process_id.cpp src/get_root_uuid.cpp src/group.cpp src/group_manager.cpp src/group_module.cpp src/inbound_path.cpp src/ini_consumer.cpp src/invoke_result_visitor.cpp src/ipv4_address.cpp src/ipv4_subnet.cpp src/ipv6_address.cpp src/ipv6_subnet.cpp src/local_actor.cpp src/logger.cpp src/mailbox_element.cpp src/make_config_option.cpp src/match_case.cpp src/memory_managed.cpp src/merged_tuple.cpp src/message.cpp src/message_builder.cpp src/message_data.cpp src/message_handler.cpp src/message_view.cpp src/monitorable_actor.cpp src/node_id.cpp src/outbound_path.cpp src/pec.cpp src/pretty_type_name.cpp src/private_thread.cpp src/proxy_registry.cpp src/raise_error.cpp src/raw_event_based_actor.cpp src/ref_counted.cpp src/replies_to.cpp src/response_promise.cpp src/resumable.cpp src/ripemd_160.cpp src/runtime_settings_map.cpp src/scheduled_actor.cpp src/scoped_actor.cpp src/scoped_execution_unit.cpp src/sec.cpp src/sequencer.cpp src/serializer.cpp src/set_thread_name.cpp src/shared_spinlock.cpp src/simple_actor_clock.cpp src/skip.cpp src/splitter.cpp src/stream_aborter.cpp src/stream_manager.cpp src/stream_priority.cpp src/string_algorithms.cpp src/string_view.cpp src/stringification_inspector.cpp src/sync_request_bouncer.cpp src/term.cpp src/test_actor_clock.cpp src/test_coordinator.cpp src/thread_hook.cpp src/thread_safe_actor_clock.cpp src/tick_emitter.cpp src/timestamp.cpp src/try_match.cpp src/type_erased_tuple.cpp src/type_erased_value.cpp src/uniform_type_info_map.cpp src/unprofiled.cpp src/uri.cpp src/uri_builder.cpp src/uri_impl.cpp src/work_sharing.cpp src/work_stealing.cpp ) # configure build_config.hpp header configure_file("${CMAKE_CURRENT_SOURCE_DIR}/../cmake/build_config.hpp.in" "${CMAKE_CURRENT_BINARY_DIR}/caf/detail/build_config.hpp" @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/caf/detail/build_config.hpp" DESTINATION include/caf/detail ) list(APPEND LIBCAF_CORE_HDRS "${CMAKE_CURRENT_BINARY_DIR}/caf/detail/build_config.hpp" ) add_custom_target(libcaf_core) # build shared library if not compiling static only if (NOT CAF_BUILD_STATIC_ONLY) add_library(libcaf_core_shared SHARED ${LIBCAF_CORE_SRCS} ${LIBCAF_CORE_HDRS}) target_link_libraries(libcaf_core_shared ${CAF_EXTRA_LDFLAGS}) target_include_directories(libcaf_core_shared PUBLIC $ $ $ ) set_target_properties(libcaf_core_shared PROPERTIES SOVERSION ${CAF_VERSION} VERSION ${CAF_VERSION} OUTPUT_NAME caf_core ) install(TARGETS libcaf_core_shared RUNTIME DESTINATION bin LIBRARY DESTINATION lib ) add_dependencies(libcaf_core_shared libcaf_core) endif () # build static library only if --build-static or --build-static-only was set if (CAF_BUILD_STATIC_ONLY OR CAF_BUILD_STATIC) add_library(libcaf_core_static STATIC ${LIBCAF_CORE_HDRS} ${LIBCAF_CORE_SRCS}) target_link_libraries(libcaf_core_static ${CAF_EXTRA_LDFLAGS}) target_include_directories(libcaf_core_static PUBLIC $ $ $ ) set_target_properties(libcaf_core_static PROPERTIES OUTPUT_NAME caf_core_static) install(TARGETS libcaf_core_static ARCHIVE DESTINATION lib) add_dependencies(libcaf_core_static libcaf_core) endif () install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/caf" DESTINATION include FILES_MATCHING PATTERN "*.hpp" ) actor-framework-0.16.3/libcaf_core/caf/000077500000000000000000000000001341123343400176635ustar00rootroot00000000000000actor-framework-0.16.3/libcaf_core/caf/abstract_actor.hpp000066400000000000000000000206661341123343400234010ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include #include #include #include #include #include "caf/fwd.hpp" #include "caf/node_id.hpp" #include "caf/attachable.hpp" #include "caf/message_id.hpp" #include "caf/exit_reason.hpp" #include "caf/intrusive_ptr.hpp" #include "caf/execution_unit.hpp" #include "caf/mailbox_element.hpp" #include "caf/abstract_channel.hpp" #include "caf/detail/disposer.hpp" #include "caf/detail/type_traits.hpp" #include "caf/detail/functor_attachable.hpp" namespace caf { /// A unique actor ID. /// @relates abstract_actor using actor_id = uint64_t; /// Denotes an ID that is never used by an actor. constexpr actor_id invalid_actor_id = 0; /// Base class for all actor implementations. class abstract_actor : public abstract_channel { public: // allow placement new (only) inline void* operator new(std::size_t, void* ptr) { return ptr; } actor_control_block* ctrl() const; ~abstract_actor() override; /// Cleans up any remaining state before the destructor is called. /// This function makes sure it is safe to call virtual functions /// in sub classes before destroying the object, because calling /// virtual function in the destructor itself is not safe. Any override /// implementation is required to call `super::destroy()` at the end. virtual void on_destroy(); void enqueue(strong_actor_ptr sender, message_id mid, message msg, execution_unit* host) override; /// Enqueues a new message wrapped in a `mailbox_element` to the actor. /// This `enqueue` variant allows to define forwarding chains. virtual void enqueue(mailbox_element_ptr what, execution_unit* host) = 0; /// Attaches `ptr` to this actor. The actor will call `ptr->detach(...)` on /// exit, or immediately if it already finished execution. virtual void attach(attachable_ptr ptr) = 0; /// Convenience function that attaches the functor `f` to this actor. The /// actor executes `f()` on exit or immediatley if it is not running. template void attach_functor(F f) { attach(attachable_ptr{new detail::functor_attachable(std::move(f))}); } /// Returns the logical actor address. actor_addr address() const; /// Detaches the first attached object that matches `what`. virtual size_t detach(const attachable::token& what) = 0; /// Returns the set of accepted messages types as strings or /// an empty set if this actor is untyped. virtual std::set message_types() const; /// Returns the ID of this actor. actor_id id() const noexcept; /// Returns the node this actor is living on. node_id node() const noexcept; /// Returns the system that created this actor (or proxy). actor_system& home_system() const noexcept; /**************************************************************************** * here be dragons: end of public interface * ****************************************************************************/ /// @cond PRIVATE template void eq_impl(message_id mid, strong_actor_ptr sender, execution_unit* ctx, Ts&&... xs) { enqueue(make_mailbox_element(std::move(sender), mid, {}, std::forward(xs)...), ctx); } // flags storing runtime information used by ... static constexpr int has_timeout_flag = 0x0004; // single_timeout static constexpr int is_registered_flag = 0x0008; // (several actors) static constexpr int is_initialized_flag = 0x0010; // event-based actors static constexpr int is_blocking_flag = 0x0020; // blocking_actor static constexpr int is_detached_flag = 0x0040; // local_actor static constexpr int is_serializable_flag = 0x0100; // local_actor static constexpr int is_migrated_from_flag = 0x0200; // local_actor static constexpr int has_used_aout_flag = 0x0400; // local_actor static constexpr int is_terminated_flag = 0x0800; // local_actor static constexpr int is_cleaned_up_flag = 0x1000; // monitorable_actor static constexpr int is_shutting_down_flag = 0x2000; // scheduled_actor inline void setf(int flag) { auto x = flags(); flags(x | flag); } inline void unsetf(int flag) { auto x = flags(); flags(x & ~flag); } inline bool getf(int flag) const { return (flags() & flag) != 0; } /// Sets `is_registered_flag` and calls `system().registry().inc_running()`. void register_at_system(); /// Unsets `is_registered_flag` and calls `system().registry().dec_running()`. void unregister_from_system(); /// Causes the actor to establish a link to `other`. virtual void add_link(abstract_actor* other) = 0; /// Causes the actor to remove any established link to `other`. virtual void remove_link(abstract_actor* other) = 0; /// Adds an entry to `other` to the link table of this actor. /// @warning Must be called inside a critical section, i.e., /// while holding `mtx_`. virtual bool add_backlink(abstract_actor* other) = 0; /// Removes an entry to `other` from the link table of this actor. /// @warning Must be called inside a critical section, i.e., /// while holding `mtx_`. virtual bool remove_backlink(abstract_actor* other) = 0; /// Calls `fun` with exclusive access to an actor's state. template auto exclusive_critical_section(F fun) -> decltype(fun()) { std::unique_lock guard{mtx_}; return fun(); } /// Calls `fun` with readonly access to an actor's state. template auto shared_critical_section(F fun) -> decltype(fun()) { std::unique_lock guard{mtx_}; return fun(); } /// Calls `fun` with exclusive access to the state of both `p1` and `p2`. This /// function guarantees that the order of acquiring the locks is always /// identical, independently from the order of `p1` and `p2`. template static auto joined_exclusive_critical_section(abstract_actor* p1, abstract_actor* p2, F fun) -> decltype(fun()) { // Make sure to allocate locks always in the same order by starting on the // actor with the lowest address. CAF_ASSERT(p1 != p2 && p1 != nullptr && p2 != nullptr); if (p1 < p2) { std::unique_lock guard1{p1->mtx_}; std::unique_lock guard2{p2->mtx_}; return fun(); } std::unique_lock guard1{p2->mtx_}; std::unique_lock guard2{p1->mtx_}; return fun(); } /// @endcond protected: /// Creates a new actor instance. explicit abstract_actor(actor_config& cfg); // Guards potentially concurrent access to the state. For example, // `exit_state_`, `attachables_`, and `links_` in a `monitorable_actor`. mutable std::mutex mtx_; private: // prohibit copies, assigments, and heap allocations void* operator new(size_t); void* operator new[](size_t); abstract_actor(const abstract_actor&) = delete; abstract_actor& operator=(const abstract_actor&) = delete; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/abstract_channel.hpp000066400000000000000000000070251341123343400236730ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/fwd.hpp" #include "caf/message_id.hpp" namespace caf { /// Interface for all message receivers. * This interface describes an /// entity that can receive messages and is implemented by {@link actor} /// and {@link group}. class abstract_channel { public: friend class abstract_actor; friend class abstract_group; virtual ~abstract_channel(); /// Enqueues a new message without forwarding stack to the channel. virtual void enqueue(strong_actor_ptr sender, message_id mid, message content, execution_unit* host = nullptr) = 0; static constexpr int is_abstract_actor_flag = 0x01000000; static constexpr int is_abstract_group_flag = 0x02000000; static constexpr int is_actor_bind_decorator_flag = 0x04000000; static constexpr int is_actor_dot_decorator_flag = 0x08000000; static constexpr int is_actor_decorator_mask = 0x0C000000; static constexpr int is_hidden_flag = 0x10000000; inline bool is_abstract_actor() const { return static_cast(flags() & is_abstract_actor_flag); } inline bool is_abstract_group() const { return static_cast(flags() & is_abstract_group_flag); } inline bool is_actor_decorator() const { return static_cast(flags() & is_actor_decorator_mask); } protected: // note: *both* operations use relaxed memory order, this is because // only the actor itself is granted write access while all access // from other actors or threads is always read-only; further, only // flags that are considered constant after an actor has launched are // read by others, i.e., there is no acquire/release semantic between // setting and reading flags inline int flags() const { return flags_.load(std::memory_order_relaxed); } inline void flags(int new_value) { flags_.store(new_value, std::memory_order_relaxed); } private: // can only be called from abstract_actor and abstract_group abstract_channel(int fs); // Accumulates several state and type flags. Subtypes may use only the // first 20 bits, i.e., the bitmask 0xFFF00000 is reserved for // channel-related flags. std::atomic flags_; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/abstract_composable_behavior.hpp000066400000000000000000000032141341123343400262620ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/fwd.hpp" namespace caf { /// Marker type that allows CAF to spawn actors from composable states. class abstract_composable_behavior { public: virtual ~abstract_composable_behavior(); virtual void init_behavior(message_handler& x) = 0; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/abstract_group.hpp000066400000000000000000000064251341123343400234220ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/fwd.hpp" #include "caf/actor_addr.hpp" #include "caf/attachable.hpp" #include "caf/ref_counted.hpp" #include "caf/abstract_channel.hpp" namespace caf { /// A multicast group. class abstract_group : public ref_counted, public abstract_channel { public: // -- member types ----------------------------------------------------------- friend class local_actor; friend class subscription; friend class detail::group_manager; // -- constructors, destructors, and assignment operators -------------------- ~abstract_group() override; // -- pure virtual member functions ------------------------------------------ /// Serialize this group to `sink`. virtual error save(serializer& sink) const = 0; /// Subscribes `who` to this group and returns `true` on success /// or `false` if `who` is already subscribed. virtual bool subscribe(strong_actor_ptr who) = 0; /// Unsubscribes `who` from this group. virtual void unsubscribe(const actor_control_block* who) = 0; /// Stops any background actors or threads and IO handles. virtual void stop() = 0; // -- observers -------------------------------------------------------------- /// Returns the parent module. inline group_module& module() const { return parent_; } /// Returns the hosting system. inline actor_system& system() const { return system_; } /// Returns a string representation of the group identifier, e.g., /// "224.0.0.1" for IPv4 multicast or a user-defined string for local groups. const std::string& identifier() const { return identifier_; } protected: abstract_group(group_module& mod, std::string id, node_id nid); actor_system& system_; group_module& parent_; std::string identifier_; node_id origin_; }; /// A smart pointer type that manages instances of {@link group}. /// @relates group using abstract_group_ptr = intrusive_ptr; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/actor.hpp000066400000000000000000000151311341123343400215050ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include #include #include "caf/config.hpp" #include "caf/fwd.hpp" #include "caf/message.hpp" #include "caf/actor_marker.hpp" #include "caf/abstract_actor.hpp" #include "caf/actor_control_block.hpp" #include "caf/unsafe_actor_handle_init.hpp" #include "caf/detail/comparable.hpp" #include "caf/detail/type_traits.hpp" namespace caf { template struct is_convertible_to_actor { static constexpr bool value = !std::is_base_of::value && (std::is_base_of::value || std::is_base_of::value); }; template <> struct is_convertible_to_actor : std::true_type { // nop }; template struct is_convertible_to_actor : is_convertible_to_actor {}; /// Identifies an untyped actor. Can be used with derived types /// of `event_based_actor`, `blocking_actor`, and `actor_proxy`. class actor : detail::comparable, detail::comparable, detail::comparable { public: // -- friend types that need access to private ctors friend class local_actor; using signatures = none_t; // allow conversion via actor_cast template friend class actor_cast_access; // tell actor_cast which semantic this type uses static constexpr bool has_weak_ptr_semantics = false; actor() = default; actor(actor&&) = default; actor(const actor&) = default; actor& operator=(actor&&) = default; actor& operator=(const actor&) = default; actor(std::nullptr_t); actor(const scoped_actor&); explicit actor(const unsafe_actor_handle_init_t&) CAF_DEPRECATED; template ::value >::type> actor(T* ptr) : ptr_(ptr->ctrl()) { CAF_ASSERT(ptr != nullptr); } template typename std::enable_if::value, actor&>::type operator=(intrusive_ptr ptr) { actor tmp{std::move(ptr)}; swap(tmp); return *this; } template typename std::enable_if::value, actor&>::type operator=(T* ptr) { actor tmp{ptr}; swap(tmp); return *this; } actor& operator=(std::nullptr_t); actor& operator=(const scoped_actor& x); /// Queries whether this actor handle is valid. inline explicit operator bool() const { return static_cast(ptr_); } /// Queries whether this actor handle is invalid. inline bool operator!() const { return !ptr_; } /// Returns the address of the stored actor. actor_addr address() const noexcept; /// Returns the ID of this actor. inline actor_id id() const noexcept { return ptr_->id(); } /// Returns the origin node of this actor. inline node_id node() const noexcept { return ptr_->node(); } /// Returns the hosting actor system. inline actor_system& home_system() const noexcept { return *ptr_->home_system; } /// Exchange content of `*this` and `other`. void swap(actor& other) noexcept; /// Queries whether this object was constructed using /// `unsafe_actor_handle_init` or is in moved-from state. bool unsafe() const CAF_DEPRECATED { return !ptr_; } /// @cond PRIVATE inline abstract_actor* operator->() const noexcept { CAF_ASSERT(ptr_); return ptr_->get(); } intptr_t compare(const actor&) const noexcept; intptr_t compare(const actor_addr&) const noexcept; intptr_t compare(const strong_actor_ptr&) const noexcept; static actor splice_impl(std::initializer_list xs); actor(actor_control_block*, bool); /// @endcond friend inline std::string to_string(const actor& x) { return to_string(x.ptr_); } friend inline void append_to_string(std::string& x, const actor& y) { return append_to_string(x, y.ptr_); } template friend typename Inspector::result_type inspect(Inspector& f, actor& x) { return inspect(f, x.ptr_); } /// Releases the reference held by handle `x`. Using the /// handle after invalidating it is undefined behavior. friend void destroy(actor& x) { x.ptr_.reset(); } private: inline actor_control_block* get() const noexcept { return ptr_.get(); } inline actor_control_block* release() noexcept { return ptr_.release(); } actor(actor_control_block*); strong_actor_ptr ptr_; }; /// Combine `f` and `g` so that `(f*g)(x) = f(g(x))`. actor operator*(actor f, actor g); /// @relates actor template actor splice(const actor& x, const actor& y, const Ts&... zs) { return actor::splice_impl({x, y, zs...}); } /// @relates actor bool operator==(const actor& lhs, abstract_actor* rhs); /// @relates actor bool operator==(abstract_actor* lhs, const actor& rhs); /// @relates actor bool operator!=(const actor& lhs, abstract_actor* rhs); /// @relates actor bool operator!=(abstract_actor* lhs, const actor& rhs); } // namespace caf // allow actor to be used in hash maps namespace std { template <> struct hash { inline size_t operator()(const caf::actor& ref) const { return static_cast(ref ? ref->id() : 0); } }; } // namespace std actor-framework-0.16.3/libcaf_core/caf/actor_addr.hpp000066400000000000000000000123201341123343400224740ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include #include "caf/fwd.hpp" #include "caf/abstract_actor.hpp" #include "caf/actor_control_block.hpp" #include "caf/unsafe_actor_handle_init.hpp" #include "caf/detail/comparable.hpp" namespace caf { /// Stores the address of typed as well as untyped actors. class actor_addr : detail::comparable, detail::comparable, detail::comparable, detail::comparable, detail::comparable { public: // -- friend types that need access to private ctors friend class abstract_actor; // allow conversion via actor_cast template friend class actor_cast_access; // tell actor_cast which semantic this type uses static constexpr bool has_weak_ptr_semantics = true; actor_addr() = default; actor_addr(actor_addr&&) = default; actor_addr(const actor_addr&) = default; actor_addr& operator=(actor_addr&&) = default; actor_addr& operator=(const actor_addr&) = default; actor_addr(std::nullptr_t); actor_addr(const unsafe_actor_handle_init_t&); actor_addr& operator=(std::nullptr_t); /// Returns the ID of this actor. inline actor_id id() const noexcept { return ptr_->id(); } /// Returns the origin node of this actor. inline node_id node() const noexcept { return ptr_->node(); } /// Returns the hosting actor system. inline actor_system& home_system() const noexcept { return *ptr_->home_system; } /// Exchange content of `*this` and `other`. void swap(actor_addr& other) noexcept; inline explicit operator bool() const { return static_cast(ptr_); } /// @cond PRIVATE static intptr_t compare(const actor_control_block* lhs, const actor_control_block* rhs); intptr_t compare(const actor_addr& other) const noexcept; intptr_t compare(const abstract_actor* other) const noexcept; intptr_t compare(const actor_control_block* other) const noexcept; inline intptr_t compare(const weak_actor_ptr& other) const noexcept { return compare(other.get()); } inline intptr_t compare(const strong_actor_ptr& other) const noexcept { return compare(other.get()); } friend inline std::string to_string(const actor_addr& x) { return to_string(x.ptr_); } friend inline void append_to_string(std::string& x, const actor_addr& y) { return append_to_string(x, y.ptr_); } template friend typename Inspector::result_type inspect(Inspector& f, actor_addr& x) { return inspect(f, x.ptr_); } /// Releases the reference held by handle `x`. Using the /// handle after invalidating it is undefined behavior. friend void destroy(actor_addr& x) { x.ptr_.reset(); } actor_addr(actor_control_block*, bool); inline actor_control_block* get() const noexcept { return ptr_.get(); } /// @endcond private: inline actor_control_block* release() noexcept { return ptr_.release(); } inline actor_control_block* get_locked() const noexcept { return ptr_.get_locked(); } actor_addr(actor_control_block*); weak_actor_ptr ptr_; }; inline bool operator==(const actor_addr& x, std::nullptr_t) { return x.get() == nullptr; } inline bool operator==(std::nullptr_t, const actor_addr& x) { return x.get() == nullptr; } inline bool operator!=(const actor_addr& x, std::nullptr_t) { return x.get() != nullptr; } inline bool operator!=(std::nullptr_t, const actor_addr& x) { return x.get() != nullptr; } } // namespace caf // allow actor_addr to be used in hash maps namespace std { template <> struct hash { inline size_t operator()(const caf::actor_addr& ref) const { return static_cast(ref.id()); } }; } // namespace std actor-framework-0.16.3/libcaf_core/caf/actor_cast.hpp000066400000000000000000000135051341123343400225220ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/fwd.hpp" #include "caf/abstract_actor.hpp" #include "caf/actor_control_block.hpp" namespace caf { namespace { // The function actor_cast<> computes the type of the cast for // actor_cast_access via the following formula: // x = 0 if To is a raw pointer // = 1 if To is a strong pointer // = 2 if To is a weak pointer // y = 0 if From is a raw pointer // = 6 if From is a strong pointer // = 2 if From is a weak pointer // the result of x * y + z then denotes which operation the cast is performing: // raw <- raw = 0 // raw <- weak = 0 // raw <- strong = 0 // weak <- raw = 0 // weak <- weak = 6 // weak <- strong = 12 // strong <- raw = 0 // strong <- weak = 3 // strong <- strong = 6 // x * y is then interpreted as follows: // - 0 is a conversion to or from a raw pointer // - 6 is a conversion between pointers with same semantics // - 3 is a conversion from a weak pointer to a strong pointer // - 12 is a conversion from a strong pointer to a weak pointer constexpr int raw_ptr_cast = 0; // either To or From is a raw pointer constexpr int weak_ptr_downgrade_cast = 12; // To is weak, From is strong constexpr int weak_ptr_upgrade_cast = 3; // To is strong, From is weak constexpr int neutral_cast = 6; // To and From are both weak or both strong template struct is_weak_ptr { static constexpr bool value = T::has_weak_ptr_semantics; }; template struct is_weak_ptr : std::false_type {}; template struct is_weak_ptr> : std::false_type {}; } // namespace template class actor_cast_access; template class actor_cast_access { public: To operator()(actor_control_block* x) const { return x; } To operator()(abstract_actor* x) const { return x->ctrl(); } template ::value>::type> To operator()(const T& x) const { return x.get(); } }; template class actor_cast_access { public: To* operator()(actor_control_block* x) const { return static_cast(x->get()); } To* operator()(abstract_actor* x) const { return static_cast(x); } template ::value>::type> To* operator()(const T& x) const { return (*this)(x.get()); } }; template class actor_cast_access { public: actor_control_block* operator()(actor_control_block* x) const { return x; } actor_control_block* operator()(abstract_actor* x) const { return x->ctrl(); } template ::value>::type> actor_control_block* operator()(const T& x) const { return x.get(); } }; template class actor_cast_access { public: To operator()(const From& x) const { return x.get(); } }; template class actor_cast_access { public: To operator()(const From& x) const { return {x.get_locked(), false}; } }; template class actor_cast_access { public: To operator()(const From& x) const { return x.get(); } To operator()(From&& x) const { return {x.release(), false}; } }; /// Converts actor handle `what` to a different actor /// handle or raw pointer of type `T`. template T actor_cast(U&& what) { using from_type = typename std::remove_const< typename std::remove_reference::type >::type; // query traits for T constexpr bool to_raw = std::is_pointer::value; constexpr bool to_weak = is_weak_ptr::value; // query traits for U constexpr bool from_raw = std::is_pointer::value; constexpr bool from_weak = is_weak_ptr::value; // calculate x and y constexpr int x = to_raw ? 0 : (to_weak ? 2 : 1); constexpr int y = from_raw ? 0 : (from_weak ? 3 : 6); // perform cast actor_cast_access f; return f(std::forward(what)); } } // namespace caf actor-framework-0.16.3/libcaf_core/caf/actor_clock.hpp000066400000000000000000000077401341123343400226670ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/fwd.hpp" namespace caf { /// A monotonic clock for scheduling timeouts and delayed messages. class actor_clock { public: // -- member types ----------------------------------------------------------- /// Underlying clock type. using clock_type = std::chrono::steady_clock; /// Discrete point in time. using time_point = typename clock_type::time_point; /// Difference between two points in time. using duration_type = typename clock_type::duration; // -- constructors, destructors, and assignment operators -------------------- virtual ~actor_clock(); // -- observers -------------------------------------------------------------- /// Returns the current wall-clock time. virtual time_point now() const noexcept; /// Returns the difference between `t0` and `t1`, allowing the clock to /// return an arbitrary value depending on the measurement that took place /// and the units measured. virtual duration_type difference(atom_value measurement, long units, time_point t0, time_point t1) const noexcept; /// Schedules a `timeout_msg` for `self` at time point `t`, overriding any /// previous receive timeout. virtual void set_ordinary_timeout(time_point t, abstract_actor* self, atom_value type, uint64_t id) = 0; /// Schedules a `timeout_msg` for `self` at time point `t`. virtual void set_multi_timeout(time_point t, abstract_actor* self, atom_value type, uint64_t id) = 0; /// Schedules a `sec::request_timeout` for `self` at time point `t`. virtual void set_request_timeout(time_point t, abstract_actor* self, message_id id) = 0; /// Cancels a pending receive timeout. virtual void cancel_ordinary_timeout(abstract_actor* self, atom_value type) = 0; /// Cancels the pending request timeout for `id`. virtual void cancel_request_timeout(abstract_actor* self, message_id id) = 0; /// Cancels all timeouts for `self`. virtual void cancel_timeouts(abstract_actor* self) = 0; /// Schedules an arbitrary message to `receiver` for time point `t`. virtual void schedule_message(time_point t, strong_actor_ptr receiver, mailbox_element_ptr content) = 0; /// Schedules an arbitrary message to `target` for time point `t`. virtual void schedule_message(time_point t, group target, strong_actor_ptr sender, message content) = 0; /// Cancels all timeouts and scheduled messages. virtual void cancel_all() = 0; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/actor_companion.hpp000066400000000000000000000077141341123343400235600ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/fwd.hpp" #include "caf/extend.hpp" #include "caf/scheduled_actor.hpp" #include "caf/mailbox_element.hpp" #include "caf/mixin/sender.hpp" #include "caf/mixin/subscriber.hpp" #include "caf/mixin/behavior_changer.hpp" #include "caf/detail/disposer.hpp" #include "caf/detail/shared_spinlock.hpp" namespace caf { template <> class behavior_type_of { public: using type = behavior; }; /// An co-existing actor forwarding all messages through a user-defined /// callback to another object, thus serving as gateway to /// allow any object to interact with other actors. /// @extends local_actor class actor_companion : public extend:: with { public: // -- member types ----------------------------------------------------------- /// Required by `spawn` for type deduction. using signatures = none_t; /// Required by `spawn` for type deduction. using behavior_type = behavior; /// A shared lockable. using lock_type = detail::shared_spinlock; /// Delegates incoming messages to user-defined event loop. using enqueue_handler = std::function; /// Callback for actor termination. using on_exit_handler = std::function; // -- constructors, destructors ---------------------------------------------- actor_companion(actor_config& cfg); ~actor_companion() override; // -- overridden functions --------------------------------------------------- void enqueue(mailbox_element_ptr ptr, execution_unit* host) override; void enqueue(strong_actor_ptr src, message_id mid, message content, execution_unit* eu) override; void launch(execution_unit* eu, bool lazy, bool hide) override; void on_exit() override; // -- modifiers -------------------------------------------------------------- /// Removes the handler for incoming messages and terminates /// the companion for exit reason `rsn`. void disconnect(exit_reason rsn = exit_reason::normal); /// Sets the handler for incoming messages. /// @warning `handler` needs to be thread-safe void on_enqueue(enqueue_handler handler); /// Sets the handler for incoming messages. void on_exit(on_exit_handler handler); private: // set by parent to define custom enqueue action enqueue_handler on_enqueue_; // custom code for on_exit() on_exit_handler on_exit_; // guards access to handler_ lock_type lock_; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/actor_config.hpp000066400000000000000000000036741341123343400230430ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/fwd.hpp" #include "caf/behavior.hpp" #include "caf/input_range.hpp" #include "caf/abstract_channel.hpp" namespace caf { /// Stores spawn-time flags and groups. class actor_config { public: execution_unit* host; int flags; input_range* groups; std::function init_fun; explicit actor_config(execution_unit* ptr = nullptr); inline actor_config& add_flag(int x) { flags |= x; return *this; } }; /// @relates actor_config std::string to_string(const actor_config& x); } // namespace caf actor-framework-0.16.3/libcaf_core/caf/actor_control_block.hpp000066400000000000000000000212771341123343400244270ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/fwd.hpp" #include "caf/error.hpp" #include "caf/node_id.hpp" #include "caf/intrusive_ptr.hpp" #include "caf/weak_intrusive_ptr.hpp" #include "caf/meta/type_name.hpp" #include "caf/meta/save_callback.hpp" #include "caf/meta/load_callback.hpp" #include "caf/meta/omittable_if_none.hpp" namespace caf { /// Actors are always allocated with a control block that stores its identity /// as well as strong and weak reference counts to it. Unlike /// "common" weak pointer designs, the goal is not to allocate the data /// separately. Instead, the only goal is to break cycles. For /// example, linking two actors automatically creates a cycle when using /// strong reference counts only. /// /// When allocating a new actor, CAF will always embed the user-defined /// actor in an `actor_storage` with the control block prefixing the /// actual actor type, as shown below. /// /// +----------------------------------------+ /// | actor_storage | /// +----------------------------------------+ /// | +-----------------+------------------+ | /// | | control block | actor data (T) | | /// | +-----------------+------------------+ | /// | | ref count | mailbox | | /// | | weak ref count | . | | /// | | actor ID | . | | /// | | node ID | . | | /// | +-----------------+------------------+ | /// +----------------------------------------+ /// /// Actors start with a strong reference count of 1. This count is transferred /// to the first `actor` or `typed_actor` handle used to store the actor. /// Actors will also start with a weak reference count of 1. This count /// is decremenated once the strong reference count drops to 0. /// /// The data block is destructed by calling the destructor of `T` when the /// last strong reference expires. The storage itself is destroyed when /// the last weak reference expires. class actor_control_block { public: using data_destructor = void (*)(abstract_actor*); using block_destructor = void (*)(actor_control_block*); actor_control_block(actor_id x, node_id& y, actor_system* sys, data_destructor ddtor, block_destructor bdtor) : strong_refs(1), weak_refs(1), aid(x), nid(std::move(y)), home_system(sys), data_dtor(ddtor), block_dtor(bdtor) { // nop } actor_control_block(const actor_control_block&) = delete; actor_control_block& operator=(const actor_control_block&) = delete; std::atomic strong_refs; std::atomic weak_refs; const actor_id aid; const node_id nid; actor_system* const home_system; const data_destructor data_dtor; const block_destructor block_dtor; static_assert(sizeof(std::atomic) == sizeof(void*), "std::atomic not lockfree on this platform"); static_assert(sizeof(intrusive_ptr) == sizeof(void*), "intrusive_ptr and T* have different size"); static_assert(sizeof(node_id) == sizeof(void*), "sizeof(node_id) != sizeof(size_t)"); static_assert(sizeof(data_destructor) == sizeof(void*), "functiion pointer and regular pointers have different size"); /// Returns a pointer to the actual actor instance. inline abstract_actor* get() { // this pointer arithmetic is compile-time checked in actor_storage's ctor return reinterpret_cast( reinterpret_cast(this) + CAF_CACHE_LINE_SIZE); } /// Returns a pointer to the control block that stores /// identity and reference counts for this actor. static actor_control_block* from(const abstract_actor* ptr) { // this pointer arithmetic is compile-time checked in actor_storage's ctor return reinterpret_cast( reinterpret_cast(ptr) - CAF_CACHE_LINE_SIZE); } /// @cond PRIVATE actor_addr address(); inline actor_id id() const noexcept { return aid; } inline const node_id& node() const noexcept { return nid; } void enqueue(strong_actor_ptr sender, message_id mid, message content, execution_unit* host); void enqueue(mailbox_element_ptr what, execution_unit* host); /// @endcond }; /// @relates actor_control_block bool intrusive_ptr_upgrade_weak(actor_control_block* x); /// @relates actor_control_block inline void intrusive_ptr_add_weak_ref(actor_control_block* x) { x->weak_refs.fetch_add(1, std::memory_order_relaxed); } /// @relates actor_control_block void intrusive_ptr_release_weak(actor_control_block* x); /// @relates actor_control_block inline void intrusive_ptr_add_ref(actor_control_block* x) { x->strong_refs.fetch_add(1, std::memory_order_relaxed); } /// @relates actor_control_block void intrusive_ptr_release(actor_control_block* x); /// @relates abstract_actor /// @relates actor_control_block using strong_actor_ptr = intrusive_ptr; /// @relates strong_actor_ptr bool operator==(const strong_actor_ptr&, const abstract_actor*); /// @relates strong_actor_ptr bool operator==(const abstract_actor*, const strong_actor_ptr&); /// @relates strong_actor_ptr inline bool operator!=(const strong_actor_ptr& x, const abstract_actor* y) { return !(x == y); } /// @relates strong_actor_ptr inline bool operator!=(const abstract_actor* x, const strong_actor_ptr& y) { return !(x == y); } /// @relates abstract_actor /// @relates actor_control_block using weak_actor_ptr = weak_intrusive_ptr; error load_actor(strong_actor_ptr& storage, execution_unit*, actor_id aid, const node_id& nid); error save_actor(strong_actor_ptr& storage, execution_unit*, actor_id aid, const node_id& nid); template auto context_of(Inspector* f) -> decltype(f->context()) { return f->context(); } inline execution_unit* context_of(void*) { return nullptr; } std::string to_string(const strong_actor_ptr& x); void append_to_string(std::string& x, const strong_actor_ptr& y); std::string to_string(const weak_actor_ptr& x); void append_to_string(std::string& x, const weak_actor_ptr& y); template typename Inspector::result_type inspect(Inspector& f, strong_actor_ptr& x) { actor_id aid = 0; node_id nid; if (x) { aid = x->aid; nid = x->nid; } auto load = [&] { return load_actor(x, context_of(&f), aid, nid); }; auto save = [&] { return save_actor(x, context_of(&f), aid, nid); }; return f(meta::type_name("actor"), aid, meta::omittable_if_none(), nid, meta::load_callback(load), meta::save_callback(save)); } template typename Inspector::result_type inspect(Inspector& f, weak_actor_ptr& x) { // inspect as strong pointer, then write back to weak pointer on save auto tmp = x.lock(); auto load = [&]() -> error { x.reset(tmp.get()); return none; }; return f(tmp, meta::load_callback(load)); } } // namespace caf // allow actor pointers to be used in hash maps namespace std { template <> struct hash { inline size_t operator()(const caf::strong_actor_ptr& ptr) const { return ptr ? static_cast(ptr->id()) : 0; } }; template <> struct hash { inline size_t operator()(const caf::weak_actor_ptr& ptr) const { return ptr ? static_cast(ptr->id()) : 0; } }; } // namespace std actor-framework-0.16.3/libcaf_core/caf/actor_factory.hpp000066400000000000000000000144261341123343400232420ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/actor_addr.hpp" #include "caf/actor_system.hpp" #include "caf/infer_handle.hpp" #include "caf/execution_unit.hpp" #include "caf/detail/type_traits.hpp" namespace caf { using actor_factory_result = std::pair>; using actor_factory = std::function; using selfptr_mode_token = spawn_mode_token; using void_mode_token = spawn_mode_token; template class fun_decorator; template class fun_decorator> { public: fun_decorator(F f, T*) : f_(std::move(f)) { // nop } behavior operator()(Ts... xs) { detail::type_list token; return apply(token, xs...); } template typename std::enable_if< std::is_convertible::value, behavior >::type apply(detail::type_list, Ts... xs) { auto bhvr = f_(xs...); return std::move(bhvr.unbox()); } template typename std::enable_if< !std::is_convertible::value, behavior >::type apply(detail::type_list, Ts... xs) { f_(xs...); return {}; } private: F f_; }; template class fun_decorator> { public: fun_decorator(F f, T* ptr) : f_(std::move(f)), ptr_(ptr) { // nop } behavior operator()(Ts... xs) { detail::type_list token; return apply(token, xs...); } template typename std::enable_if< std::is_convertible::value, behavior >::type apply(detail::type_list, Ts... xs) { auto bhvr = f_(ptr_, xs...); return std::move(bhvr.unbox()); } template typename std::enable_if< !std::is_convertible::value, behavior >::type apply(detail::type_list, Ts... xs) { f_(ptr_, xs...); return {}; } private: F f_; T* ptr_; }; template struct message_verifier; template <> struct message_verifier> { bool operator()(message& msg, void_mode_token) { return msg.empty(); } }; template struct message_verifier> { bool operator()(message& msg, void_mode_token) { return msg.match_elements(); } bool operator()(message& msg, selfptr_mode_token) { return msg.match_elements(); } }; template actor_factory make_actor_factory(F fun) { return [fun](actor_config& cfg, message& msg) -> actor_factory_result { using trait = infer_handle_from_fun; using handle = typename trait::type; using impl = typename trait::impl; using behavior_t = typename trait::behavior_type; spawn_mode_token tk; message_verifier mv; if (!mv(msg, tk)) return {}; cfg.init_fun = [=](local_actor* x) -> behavior { CAF_ASSERT(cfg.host); using ctrait = typename detail::get_callable_trait::type; using fd = fun_decorator; fd f{fun, static_cast(x)}; empty_type_erased_tuple dummy_; auto& ct = msg.empty() ? dummy_ : const_cast(msg).content(); auto opt = ct.apply(f); if (!opt) return {}; return std::move(*opt); }; handle hdl = cfg.host->system().spawn_class(cfg); return {actor_cast(std::move(hdl)), cfg.host->system().message_types()}; }; } template struct dyn_spawn_class_helper { Handle& result; actor_config& cfg; void operator()(Ts... xs) { CAF_ASSERT(cfg.host); result = cfg.host->system().spawn_class(cfg, xs...); } }; template actor_factory_result dyn_spawn_class(actor_config& cfg, message& msg) { CAF_ASSERT(cfg.host); using handle = typename infer_handle_from_class::type; handle hdl; dyn_spawn_class_helper factory{hdl, cfg}; msg.apply(factory); return {actor_cast(std::move(hdl)), cfg.host->system().message_types()}; } template actor_factory make_actor_factory() { static_assert(detail::conjunction< std::is_lvalue_reference::value... >::value, "all Ts must be lvalue references"); static_assert(std::is_base_of::value, "T is not derived from local_actor"); return &dyn_spawn_class; } } // namespace caf actor-framework-0.16.3/libcaf_core/caf/actor_marker.hpp000066400000000000000000000036321341123343400230510ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/fwd.hpp" namespace caf { class statically_typed_actor_base { // used as marker only }; class dynamically_typed_actor_base { // used as marker only }; template struct actor_marker { using type = statically_typed_actor_base; }; template <> struct actor_marker { using type = dynamically_typed_actor_base; }; template using is_statically_typed = std::is_base_of; template using is_dynamically_typed = std::is_base_of; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/actor_ostream.hpp000066400000000000000000000105161341123343400232410ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/actor.hpp" #include "caf/deep_to_string.hpp" #include "caf/typed_actor_pointer.hpp" namespace caf { /// Provides support for thread-safe output operations on character streams. The /// stream operates on a per-actor basis and will print only complete lines or /// when explicitly forced to flush its buffer. The stream will convert *any* /// operation to a message received by a printer actor. This actor is a sequence /// point that ensures output appears never interleaved. class actor_ostream { public: using fun_type = actor_ostream& (*)(actor_ostream&); actor_ostream(actor_ostream&&) = default; actor_ostream(const actor_ostream&) = default; actor_ostream& operator=(actor_ostream&&) = default; actor_ostream& operator=(const actor_ostream&) = default; /// Open redirection file in append mode. static constexpr int append = 0x01; explicit actor_ostream(local_actor* self); explicit actor_ostream(scoped_actor& self); template explicit actor_ostream(const typed_actor_pointer& ptr) : actor_ostream(ptr.internal_ptr()) { // nop } /// Writes `arg` to the buffer allocated for the calling actor. actor_ostream& write(std::string arg); /// Flushes the buffer allocated for the calling actor. actor_ostream& flush(); /// Redirects all further output from `self` to `file_name`. static void redirect(abstract_actor* self, std::string fn, int flags = 0); /// Redirects all further output from any actor that did not /// redirect its output to `fname`. static void redirect_all(actor_system& sys, std::string fn, int flags = 0); /// Writes `arg` to the buffer allocated for the calling actor. inline actor_ostream& operator<<(const char* arg) { return write(arg); } /// Writes `arg` to the buffer allocated for the calling actor. inline actor_ostream& operator<<(std::string arg) { return write(std::move(arg)); } /// Writes `to_string(arg)` to the buffer allocated for the calling actor, /// calling either `std::to_string` or `caf::to_string` depending on /// the argument. template inline actor_ostream& operator<<(const T& arg) { return write(deep_to_string(arg)); } /// Apply `f` to `*this`. inline actor_ostream& operator<<(actor_ostream::fun_type f) { return f(*this); } private: void init(abstract_actor*); actor_id self_; actor printer_; }; /// Convenience factory function for creating an actor output stream. actor_ostream aout(local_actor* self); /// Convenience factory function for creating an actor output stream. actor_ostream aout(scoped_actor& self); /// Convenience factory function for creating an actor output stream. template actor_ostream aout(const typed_actor_pointer& ptr) { return actor_ostream{ptr}; } } // namespace caf namespace std { // provide convenience overlaods for aout; implemented in logging.cpp caf::actor_ostream& endl(caf::actor_ostream& o); caf::actor_ostream& flush(caf::actor_ostream& o); } // namespace std actor-framework-0.16.3/libcaf_core/caf/actor_pool.hpp000066400000000000000000000125771341123343400225510ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/locks.hpp" #include "caf/actor.hpp" #include "caf/execution_unit.hpp" #include "caf/mailbox_element.hpp" #include "caf/monitorable_actor.hpp" #include "caf/detail/split_join.hpp" #include "caf/detail/shared_spinlock.hpp" namespace caf { /// An actor poool is a lightweight abstraction for a set of workers. /// The pool itself is an actor, meaning that it can be passed /// around in an actor system to hide the actual set of workers. /// /// After construction, new workers can be added via `{'SYS', 'PUT', actor}` /// messages, e.g., `send(my_pool, sys_atom::value, put_atom::value, worker)`. /// `{'SYS', 'DELETE', actor}` messages remove a specific worker from the set, /// `{'SYS', 'DELETE'}` removes all workers, and `{'SYS', 'GET'}` returns a /// `vector` containing all workers. /// /// Note that the pool *always* sends exit messages to all of its workers /// when forced to quit. The pool monitors all of its workers. Messages queued /// up in a worker's mailbox are lost, i.e., the pool itself does not buffer /// and resend messages. Advanced caching or resend strategies can be /// implemented in a policy. /// /// It is worth mentioning that the pool is *not* an event-based actor. /// Neither does it live in its own thread. Messages are dispatched immediately /// during the enqueue operation. Any user-defined policy thus has to dispatch /// messages with as little overhead as possible, because the dispatching /// runs in the context of the sender. /// @experimental class actor_pool : public monitorable_actor { public: using uplock = upgrade_lock; using actor_vec = std::vector; using factory = std::function; using policy = std::function; /// Returns a simple round robin dispatching policy. static policy round_robin(); /// Returns a broadcast dispatching policy. static policy broadcast(); /// Returns a random dispatching policy. static policy random(); /// Returns a split/join dispatching policy. The function object `sf` /// distributes a work item to all workers (split step) and the function /// object `jf` joins individual results into a single one with `init` /// as initial value of the operation. /// @tparam T Result type of the join step. /// @tparam Join Function object with signature `void (T&, message&)`. /// @tparam Split Function object with signature /// `void (vector>&, message&)`. The first /// argument is a mapping from actors (workers) to tasks /// (messages). The second argument is the input message. /// The default split policy broadcasts the work item to all /// workers. template static policy split_join(Join jf, Split sf = Split(), T init = T()) { using impl = detail::split_join; return impl{std::move(init), std::move(sf), std::move(jf)}; } ~actor_pool() override; /// Returns an actor pool without workers using the dispatch policy `pol`. static actor make(execution_unit* eu, policy pol); /// Returns an actor pool with `n` workers created by the factory /// function `fac` using the dispatch policy `pol`. static actor make(execution_unit* eu, size_t num_workers, const factory& fac, policy pol); void enqueue(mailbox_element_ptr what, execution_unit* eu) override; actor_pool(actor_config& cfg); void on_destroy() override; protected: void on_cleanup(const error& reason) override; private: bool filter(upgrade_lock&, const strong_actor_ptr& sender, message_id mid, message_view& mv, execution_unit* eu); // call without workers_mtx_ held void quit(execution_unit* host); detail::shared_spinlock workers_mtx_; std::vector workers_; policy policy_; exit_reason planned_reason_; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/actor_proxy.hpp000066400000000000000000000035511341123343400227510ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/abstract_actor.hpp" #include "caf/monitorable_actor.hpp" #include "caf/detail/shared_spinlock.hpp" namespace caf { /// Represents an actor running on a remote machine, /// or different hardware, or in a separate process. class actor_proxy : public monitorable_actor { public: explicit actor_proxy(actor_config& cfg); ~actor_proxy() override; /// Invokes cleanup code. virtual void kill_proxy(execution_unit* ctx, error reason) = 0; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/actor_registry.hpp000066400000000000000000000107431341123343400234410ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include #include #include #include "caf/fwd.hpp" #include "caf/actor.hpp" #include "caf/actor_cast.hpp" #include "caf/abstract_actor.hpp" #include "caf/actor_control_block.hpp" #include "caf/detail/shared_spinlock.hpp" namespace caf { /// A registry is used to associate actors to IDs or atoms (names). This /// allows a middleman to lookup actor handles after receiving actor IDs /// via the network and enables developers to use well-known names to /// identify important actors independent from their ID at runtime. /// Note that the registry does *not* contain all actors of an actor system. /// The middleman registers actors as needed. class actor_registry { public: friend class actor_system; ~actor_registry(); /// Returns the local actor associated to `key`. template T get(actor_id key) const { return actor_cast(get_impl(key)); } /// Associates a local actor with its ID. template void put(actor_id key, const T& val) { put_impl(key, actor_cast(val)); } /// Removes an actor from this registry, /// leaving `reason` for future reference. void erase(actor_id key); /// Increases running-actors-count by one. void inc_running(); /// Decreases running-actors-count by one. void dec_running(); /// Returns the number of currently running actors. size_t running() const; /// Blocks the caller until running-actors-count becomes `expected` /// (must be either 0 or 1). void await_running_count_equal(size_t expected) const; /// Returns the actor associated with `key` or `invalid_actor`. template T get(atom_value key) const { return actor_cast(get_impl(key)); } /// Associates given actor to `key`. template void put(atom_value key, const T& value) { // using reference here and before to allow putting a scoped_actor without calling .ptr() put_impl(key, actor_cast(value)); } /// Removes a name mapping. void erase(atom_value key); using name_map = std::unordered_map; name_map named_actors() const; private: // Starts this component. void start(); // Stops this component. void stop(); /// Returns the local actor associated to `key`. strong_actor_ptr get_impl(actor_id key) const; /// Associates a local actor with its ID. void put_impl(actor_id key, strong_actor_ptr val); /// Returns the actor associated with `key` or `invalid_actor`. strong_actor_ptr get_impl(atom_value key) const; /// Associates given actor to `key`. void put_impl(atom_value key, strong_actor_ptr value); using entries = std::unordered_map; actor_registry(actor_system& sys); std::atomic running_; mutable std::mutex running_mtx_; mutable std::condition_variable running_cv_; mutable detail::shared_spinlock instances_mtx_; entries entries_; name_map named_entries_; mutable detail::shared_spinlock named_entries_mtx_; actor_system& system_; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/actor_storage.hpp000066400000000000000000000122011341123343400232240ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include #include "caf/config.hpp" #include "caf/abstract_actor.hpp" #include "caf/actor_control_block.hpp" #ifdef CAF_GCC #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Winvalid-offsetof" #endif namespace caf { template class actor_storage { public: template actor_storage(actor_id x, node_id y, actor_system* sys, Us&&... zs) : ctrl(x, y, sys, data_dtor, block_dtor) { // construct data member new (&data) T(std::forward(zs)...); } ~actor_storage() { // 1) make sure control block fits into a single cache line static_assert(sizeof(actor_control_block) < CAF_CACHE_LINE_SIZE, "actor_control_block exceeds a single cache line"); // Clang in combination with libc++ on Linux complains about offsetof: // error: 'actor_storage' does not refer to a value // Until we have found a reliable solution, we disable this safety check. #if !(defined(CAF_CLANG) && defined(CAF_LINUX)) // 2) make sure reinterpret cast of the control block to the storage works static_assert(offsetof(actor_storage, ctrl) == 0, "control block is not at the start of the storage"); // 3) make sure we can obtain a data pointer by jumping one cache line static_assert(offsetof(actor_storage, data) == CAF_CACHE_LINE_SIZE, "data is not at cache line size boundary"); #else // 4) make sure static_cast and reinterpret_cast // between T* and abstract_actor* are identical constexpr abstract_actor* dummy = nullptr; constexpr T* derived_dummy = static_cast(dummy); static_assert(derived_dummy == nullptr, "actor subtype has illegal memory alignment " "(probably due to virtual inheritance)"); #endif } actor_storage(const actor_storage&) = delete; actor_storage& operator=(const actor_storage&) = delete; static_assert(sizeof(actor_control_block) < CAF_CACHE_LINE_SIZE, "actor_control_block exceeds 64 bytes"); actor_control_block ctrl; char pad[CAF_CACHE_LINE_SIZE - sizeof(actor_control_block)]; union { T data; }; private: static void data_dtor(abstract_actor* ptr) { // safe due to static assert #3 ptr->on_destroy(); static_cast(ptr)->~T(); } static void block_dtor(actor_control_block* ptr) { // safe due to static assert #2 delete reinterpret_cast(ptr); } }; /// @relates actor_storage template bool intrusive_ptr_upgrade_weak(actor_storage* x) { auto count = x->ctrl.strong_refs.load(); while (count != 0) { if (x->ctrl.strong_refs.compare_exchange_weak(count, count + 1, std::memory_order_relaxed)) return true; } return false; } /// @relates actor_storage template void intrusive_ptr_add_weak_ref(actor_storage* x) { x->ctrl.weak_refs.fetch_add(1, std::memory_order_relaxed); } /// @relates actor_storage template void intrusive_ptr_release_weak(actor_storage* x) { // destroy object if last weak pointer expires if (x->ctrl.weak_refs == 1 || x->ctrl.weak_refs.fetch_sub(1, std::memory_order_acq_rel) == 1) delete x; } /// @relates actor_storage template void intrusive_ptr_add_ref(actor_storage* x) { x->ctrl.strong_refs.fetch_add(1, std::memory_order_relaxed); } /// @relates actor_storage template void intrusive_ptr_release(actor_storage* x) { // release implicit weak pointer if the last strong ref expires // and destroy the data block if (x->ctrl.strong_refs.fetch_sub(1, std::memory_order_acq_rel) == 1) { x->destroy_data(); intrusive_ptr_relase_weak(x); } } } // namespace caf #ifdef CAF_GCC #pragma GCC diagnostic pop #endif actor-framework-0.16.3/libcaf_core/caf/actor_system.hpp000066400000000000000000000543211341123343400231150ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include #include #include #include #include #include #include "caf/abstract_actor.hpp" #include "caf/actor_cast.hpp" #include "caf/actor_clock.hpp" #include "caf/actor_config.hpp" #include "caf/actor_marker.hpp" #include "caf/actor_registry.hpp" #include "caf/composable_behavior_based_actor.hpp" #include "caf/detail/init_fun_factory.hpp" #include "caf/detail/spawn_fwd.hpp" #include "caf/detail/spawnable.hpp" #include "caf/fwd.hpp" #include "caf/group_manager.hpp" #include "caf/infer_handle.hpp" #include "caf/is_typed_actor.hpp" #include "caf/logger.hpp" #include "caf/make_actor.hpp" #include "caf/prohibit_top_level_spawn_marker.hpp" #include "caf/runtime_settings_map.hpp" #include "caf/scoped_execution_unit.hpp" #include "caf/spawn_options.hpp" #include "caf/string_algorithms.hpp" #include "caf/uniform_type_info_map.hpp" namespace caf { using rtti_pair = std::pair; using rtti_pair_vec = std::vector; using rtti_pair_vec_triple = std::tuple; template struct mpi_field_access { std::string operator()(const uniform_type_info_map& types) { auto nr = type_nr::value; if (nr != 0) return *types.portable_name(nr, nullptr); auto ptr = types.portable_name(0, &typeid(T)); if (ptr != nullptr) return *ptr; std::string result = " struct mpi_field_access> { std::string operator()(const uniform_type_info_map&) { return to_string(X); } }; template <> struct mpi_field_access { std::string operator()(const uniform_type_info_map&) { return "void"; } }; template std::string get_mpi_field(const uniform_type_info_map& types) { mpi_field_access f; return f(types); } template struct typed_mpi_access; template struct typed_mpi_access, output_tuple>> { std::string operator()(const uniform_type_info_map& types) const { static_assert(sizeof...(Is) > 0, "typed MPI without inputs"); static_assert(sizeof...(Ls) > 0, "typed MPI without outputs"); std::vector inputs{get_mpi_field(types)...}; std::vector outputs1{get_mpi_field(types)...}; std::string result = "caf::replies_to<"; result += join(inputs, ","); result += ">::with<"; result += join(outputs1, ","); result += ">"; return result; } }; template std::string get_rtti_from_mpi(const uniform_type_info_map& types) { typed_mpi_access f; return f(types); } /// Actor environment including scheduler, registry, and optional components /// such as a middleman. class actor_system { public: friend class logger; friend class io::middleman; friend class abstract_actor; /// The number of actors implictly spawned by the actor system on startup. static constexpr size_t num_internal_actors = 2; /// Returns the ID of an internal actor by its name. /// @pre x in {'SpawnServ', 'ConfigServ', 'StreamServ'} static constexpr size_t internal_actor_id(atom_value x) { return x == atom("SpawnServ") ? 0 : (x == atom("ConfigServ") ? 1 : 2); } /// Returns the internal actor for dynamic spawn operations. const strong_actor_ptr& spawn_serv() const { return internal_actors_[internal_actor_id(atom("SpawnServ"))]; } /// Returns the internal actor for storing the runtime configuration /// for this actor system. const strong_actor_ptr& config_serv() const { return internal_actors_[internal_actor_id(atom("ConfigServ"))]; } actor_system() = delete; actor_system(const actor_system&) = delete; actor_system& operator=(const actor_system&) = delete; /// An (optional) component of the actor system. class module { public: enum id_t { scheduler, middleman, opencl_manager, openssl_manager, num_ids }; virtual ~module(); /// Returns the human-redable name of the module. const char* name() const noexcept; /// Starts any background threads needed by the module. virtual void start() = 0; /// Stops all background threads of the module. virtual void stop() = 0; /// Allows the module to change the /// configuration of the actor system during startup. virtual void init(actor_system_config&) = 0; /// Returns the identifier of this module. virtual id_t id() const = 0; /// Returns a pointer to the subtype. virtual void* subtype_ptr() = 0; }; using module_ptr = std::unique_ptr; using module_array = std::array; /// @warning The system stores a reference to `cfg`, which means the /// config object must outlive the actor system. explicit actor_system(actor_system_config& cfg); virtual ~actor_system(); /// A message passing interface (MPI) in run-time checkable representation. using mpi = std::set; template ::value>::type> mpi message_types(detail::type_list) const { return mpi{}; } template mpi message_types(detail::type_list>) const { static_assert(sizeof...(Ts) > 0, "empty typed actor handle given"); mpi result{get_rtti_from_mpi(types())...}; return result; } template ::value>::type> mpi message_types(const T&) const { detail::type_list token; return message_types(token); } /// Returns a string representation of the messaging /// interface using portable names; template mpi message_types() const { detail::type_list token; return message_types(token); } /// Returns whether actor handles described by `xs` /// can be assigned to actor handles described by `ys`. /// @experimental bool assignable(const mpi& xs, const mpi& ys) const { if (ys.empty()) return xs.empty(); if (xs.size() == ys.size()) return xs == ys; return std::includes(xs.begin(), xs.end(), ys.begin(), ys.end()); } /// Returns whether actor handles described by `xs` /// can be assigned to actor handles of type `T`. /// @experimental template bool assignable(const std::set& xs) const { return assignable(xs, message_types()); } /// Returns the host-local identifier for this system. const node_id& node() const; /// Returns the scheduler instance. scheduler::abstract_coordinator& scheduler(); /// Returns the system-wide event logger. caf::logger& logger(); /// Returns the system-wide actor registry. actor_registry& registry(); /// Returns the system-wide factory for custom types and actors. const uniform_type_info_map& types() const; /// Returns a string representation for `err`. std::string render(const error& x) const; /// Returns the system-wide group manager. group_manager& groups(); /// Returns `true` if the I/O module is available, `false` otherwise. bool has_middleman() const; /// Returns the middleman instance from the I/O module. /// @throws `std::logic_error` if module is not loaded. io::middleman& middleman(); /// Returns `true` if the opencl module is available, `false` otherwise. bool has_opencl_manager() const; /// Returns the manager instance from the OpenCL module. /// @throws `std::logic_error` if module is not loaded. opencl::manager& opencl_manager() const; /// Returns `true` if the openssl module is available, `false` otherwise. bool has_openssl_manager() const; /// Returns the manager instance from the OpenSSL module. /// @throws `std::logic_error` if module is not loaded. openssl::manager& openssl_manager() const; /// Returns a dummy execution unit that forwards /// everything to the scheduler. scoped_execution_unit* dummy_execution_unit(); /// Returns a new actor ID. actor_id next_actor_id(); /// Returns the last given actor ID. actor_id latest_actor_id() const; /// Blocks this caller until all actors are done. void await_all_actors_done() const; /// Called by `spawn` when used to create a class-based actor to /// apply automatic conversions to `xs` before spawning the actor. /// Should not be called by users of the library directly. /// @param cfg To-be-filled config for the actor. /// @param xs Constructor arguments for `C`. template infer_handle_from_class_t spawn_class(actor_config& cfg, Ts&&... xs) { return spawn_impl(cfg, detail::spawn_fwd(xs)...); } /// Returns a new actor of type `C` using `xs...` as constructor /// arguments. The behavior of `spawn` can be modified by setting `Os`, e.g., /// to opt-out of the cooperative scheduling. /// @param xs Constructor arguments for `C`. template infer_handle_from_class_t spawn(Ts&&... xs) { check_invariants(); actor_config cfg; return spawn_impl(cfg, detail::spawn_fwd(xs)...); } template infer_handle_from_state_t spawn() { return spawn, Os>(); } /// Called by `spawn` when used to create a functor-based actor to select a /// proper implementation and then delegates to `spawn_impl`. /// @param cfg To-be-filled config for the actor. /// @param fun Function object for the actor's behavior; will be moved. /// @param xs Arguments for `fun`. /// @private template infer_handle_from_fun_t spawn_functor(std::true_type, actor_config& cfg, F& fun, Ts&&... xs) { using impl = infer_impl_from_fun_t; detail::init_fun_factory fac; cfg.init_fun = fac(std::move(fun), std::forward(xs)...); return spawn_impl(cfg); } /// Fallback no-op overload. /// @private template infer_handle_from_fun_t spawn_functor(std::false_type, actor_config&, F&, Ts&&...) { return {}; } /// Returns a new functor-based actor. The first argument must be the functor, /// the remainder of `xs...` is used to invoke the functor. /// The behavior of `spawn` can be modified by setting `Os`, e.g., /// to opt-out of the cooperative scheduling. template infer_handle_from_fun_t spawn(F fun, Ts&&... xs) { using impl = infer_impl_from_fun_t; check_invariants(); static constexpr bool spawnable = detail::spawnable(); static_assert(spawnable, "cannot spawn function-based actor with given arguments"); actor_config cfg; return spawn_functor(detail::bool_token{}, cfg, fun, std::forward(xs)...); } /// Returns a new actor with run-time type `name`, constructed /// with the arguments stored in `args`. /// @experimental template ::value>::type> expected spawn(const std::string& name, message args, execution_unit* ctx = nullptr, bool check_interface = true, const mpi* expected_ifs = nullptr) { mpi tmp; if (check_interface && !expected_ifs) { tmp = message_types(); expected_ifs = &tmp; } auto res = dyn_spawn_impl(name, args, ctx, check_interface, expected_ifs); if (!res) return std::move(res.error()); return actor_cast(std::move(*res)); } /// Spawns a class-based actor `T` immediately joining the groups in /// range `[first, last)`. /// @private template infer_handle_from_class_t spawn_class_in_groups(actor_config& cfg, Iter first, Iter last, Ts&&... xs) { static_assert(std::is_same, actor>::value, "only dynamically-typed actors can be spawned in a group"); check_invariants(); auto irange = make_input_range(first, last); cfg.groups = &irange; return spawn_class(cfg, std::forward(xs)...); } /// Spawns a class-based actor `T` immediately joining the groups in /// range `[first, last)`. /// @private template infer_handle_from_fun_t spawn_fun_in_groups(actor_config& cfg, Iter first, Iter second, F& fun, Ts&&... xs) { using impl = infer_impl_from_fun_t; check_invariants(); static constexpr bool dynamically_typed = is_dynamically_typed::value; static_assert(dynamically_typed, "only dynamically-typed actors can join groups"); static constexpr bool spawnable = detail::spawnable(); static_assert(spawnable, "cannot spawn function-based actor with given arguments"); static constexpr bool enabled = dynamically_typed && spawnable; auto irange = make_input_range(first, second); cfg.groups = &irange; return spawn_functor(detail::bool_token{}, cfg, fun, std::forward(xs)...); } /// Returns a new functor-based actor subscribed to all groups in `gs`. template infer_handle_from_fun_t spawn_in_groups(std::initializer_list gs, F fun, Ts&&... xs) { actor_config cfg; return spawn_fun_in_groups(cfg, gs.begin(), gs.end(), fun, std::forward(xs)...); } /// Returns a new functor-based actor subscribed to all groups in `gs`. template infer_handle_from_fun_t spawn_in_groups(const Gs& gs, F fun, Ts&&... xs) { actor_config cfg; return spawn_fun_in_groups(cfg, gs.begin(), gs.end(), fun, std::forward(xs)...); } /// Returns a new functor-based actor subscribed to all groups in `gs`. template infer_handle_from_fun_t spawn_in_group(const group& grp, F fun, Ts&&... xs) { return spawn_in_groups({grp}, std::move(fun), std::forward(xs)...); } /// Returns a new class-based actor subscribed to all groups in `gs`. template infer_handle_from_class_t spawn_in_groups(std::initializer_list gs, Ts&&... xs) { actor_config cfg; return spawn_class_in_groups(cfg, gs.begin(), gs.end(), std::forward(xs)...); } /// Returns a new class-based actor subscribed to all groups in `gs`. template infer_handle_from_class_t spawn_in_groups(const Gs& gs, Ts&&... xs) { actor_config cfg; return spawn_class_in_groups(cfg, gs.begin(), gs.end(), std::forward(xs)...); } /// Returns a new class-based actor subscribed to all groups in `gs`. template infer_handle_from_class_t spawn_in_group(const group& grp, Ts&&... xs) { return spawn_in_groups({grp}, std::forward(xs)...); } /// Returns whether this actor system calls `await_all_actors_done` /// in its destructor before shutting down. bool await_actors_before_shutdown() const { return await_actors_before_shutdown_; } /// Configures whether this actor system calls `await_all_actors_done` /// in its destructor before shutting down. void await_actors_before_shutdown(bool x) { await_actors_before_shutdown_ = x; } /// Returns the configuration of this actor system. const actor_system_config& config() const { return cfg_; } /// Returns the system-wide clock. actor_clock& clock() noexcept; /// Returns application-specific, system-wide runtime settings. runtime_settings_map& runtime_settings() { return settings_; } /// Returns application-specific, system-wide runtime settings. const runtime_settings_map& runtime_settings() const { return settings_; } /// Returns the number of detached actors. size_t detached_actors() { return detached_.load(); } /// @cond PRIVATE /// Increases running-detached-threads-count by one. void inc_detached_threads(); /// Decreases running-detached-threads-count by one. void dec_detached_threads(); /// Blocks the caller until all detached threads are done. void await_detached_threads(); /// Calls all thread started hooks /// @warning must be called by thread which is about to start void thread_started(); /// Calls all thread terminates hooks /// @warning must be called by thread which is about to terminate void thread_terminates(); template infer_handle_from_class_t spawn_impl(actor_config& cfg, Ts&&... xs) { static_assert(is_unbound(Os), "top-level spawns cannot have monitor or link flag"); // TODO: use `if constexpr` when switching to C++17 if (has_detach_flag(Os) || std::is_base_of::value) cfg.flags |= abstract_actor::is_detached_flag; if (has_hide_flag(Os)) cfg.flags |= abstract_actor::is_hidden_flag; if (cfg.host == nullptr) cfg.host = dummy_execution_unit(); CAF_SET_LOGGER_SYS(this); auto res = make_actor(next_actor_id(), node(), this, cfg, std::forward(xs)...); auto ptr = static_cast(actor_cast(res)); ptr->launch(cfg.host, has_lazy_init_flag(Os), has_hide_flag(Os)); return res; } /// @endcond private: template void check_invariants() { static_assert(!std::is_base_of::value, "This actor type cannot be spawned throught an actor system. " "Probably you have tried to spawn a broker or opencl actor."); } expected dyn_spawn_impl(const std::string& name, message& args, execution_unit* ctx, bool check_interface, optional expected_ifs); /// Sets the internal actor for dynamic spawn operations. void spawn_serv(strong_actor_ptr x) { internal_actors_[internal_actor_id(atom("SpawnServ"))] = std::move(x); } /// Sets the internal actor for storing the runtime configuration. void config_serv(strong_actor_ptr x) { internal_actors_[internal_actor_id(atom("ConfigServ"))] = std::move(x); } // -- member variables ------------------------------------------------------- /// Used to generate ascending actor IDs. std::atomic ids_; /// Stores runtime type information for builtin and user-defined types. uniform_type_info_map types_; /// Identifies this actor system in a distributed setting. node_id node_; /// Manages log output. intrusive_ptr logger_; /// Maps well-known actor names to actor handles. actor_registry registry_; /// Maps well-known group names to group handles. group_manager groups_; /// Stores optional actor system components. module_array modules_; /// Provides pseudo scheduling context to actors. scoped_execution_unit dummy_execution_unit_; /// Stores whether the system should wait for running actors on shutdown. bool await_actors_before_shutdown_; /// Stores SpawnServ, ConfigServ, and StreamServ. std::array internal_actors_; /// Counts the number of detached actors. std::atomic detached_; /// Guards `detached`. mutable std::mutex detached_mtx_; /// Allows waiting on specific values for `detached`. mutable std::condition_variable detached_cv_; /// The system-wide, user-provided configuration. actor_system_config& cfg_; /// Stores whether the logger has run its destructor and stopped any thread, /// file handle, etc. std::atomic logger_dtor_done_; /// Guards `logger_dtor_done_`. mutable std::mutex logger_dtor_mtx_; /// Allows waiting on specific values for `logger_dtor_done_`. mutable std::condition_variable logger_dtor_cv_; /// Stores custom, system-wide key-value pairs. runtime_settings_map settings_; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/actor_system_config.hpp000066400000000000000000000345351341123343400244470ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include #include #include #include #include "caf/actor_factory.hpp" #include "caf/config_option.hpp" #include "caf/config_option_adder.hpp" #include "caf/config_option_set.hpp" #include "caf/config_value.hpp" #include "caf/dictionary.hpp" #include "caf/fwd.hpp" #include "caf/is_typed_actor.hpp" #include "caf/named_actor_config.hpp" #include "caf/stream.hpp" #include "caf/thread_hook.hpp" #include "caf/type_erased_value.hpp" #include "caf/detail/safe_equal.hpp" #include "caf/detail/type_traits.hpp" namespace caf { /// Configures an `actor_system` on startup. class actor_system_config { public: // -- member types ----------------------------------------------------------- using hook_factory = std::function; using hook_factory_vector = std::vector; using thread_hooks = std::vector>; template using hash_map = std::unordered_map; using module_factory = std::function; using module_factory_vector = std::vector; using value_factory = std::function; using value_factory_string_map = hash_map; using value_factory_rtti_map = hash_map; using actor_factory_map = hash_map; using portable_name_map = hash_map; using error_renderer = std::function; using error_renderer_map = hash_map; using group_module_factory = std::function; using group_module_factory_vector = std::vector; using config_map = dictionary; using string_list = std::vector; using named_actor_config_map = hash_map; using opt_group = config_option_adder; // -- constructors, destructors, and assignment operators -------------------- virtual ~actor_system_config(); actor_system_config(); actor_system_config(actor_system_config&&) = default; actor_system_config(const actor_system_config&) = delete; actor_system_config& operator=(const actor_system_config&) = delete; // -- properties ------------------------------------------------------------- /// @private dictionary content; /// Sets a config by using its INI name `config_name` to `config_value`. template actor_system_config& set(string_view name, T&& value) { return set_impl(name, config_value{std::forward(value)}); } // -- modifiers -------------------------------------------------------------- /// Parses `args` as tuple of strings containing CLI options /// and `ini_stream` as INI formatted input stream. actor_system_config& parse(string_list args, std::istream& ini); /// Parses `args` as tuple of strings containing CLI options and tries to /// open `ini_file_cstr` as INI formatted config file. The parsers tries to /// open `caf-application.ini` if `ini_file_cstr` is `nullptr`. actor_system_config& parse(string_list args, const char* ini_file_cstr = nullptr); /// Parses the CLI options `{argc, argv}` and /// `ini_stream` as INI formatted input stream. actor_system_config& parse(int argc, char** argv, std::istream& ini); /// Parses the CLI options `{argc, argv}` and tries to open `ini_file_cstr` /// as INI formatted config file. The parsers tries to open /// `caf-application.ini` if `ini_file_cstr` is `nullptr`. actor_system_config& parse(int argc, char** argv, const char* ini_file_cstr = nullptr); actor_system_config& parse(message& args, const char* ini_file_cstr = nullptr) CAF_DEPRECATED; actor_system_config& parse(message& args, std::istream& ini) CAF_DEPRECATED; /// Allows other nodes to spawn actors created by `fun` /// dynamically by using `name` as identifier. /// @experimental actor_system_config& add_actor_factory(std::string name, actor_factory fun); /// Allows other nodes to spawn actors of type `T` /// dynamically by using `name` as identifier. /// @experimental template actor_system_config& add_actor_type(std::string name) { using handle = typename infer_handle_from_class::type; if (!std::is_same::value) add_message_type(name); return add_actor_factory(std::move(name), make_actor_factory()); } /// Allows other nodes to spawn actors implemented by function `f` /// dynamically by using `name` as identifier. /// @experimental template actor_system_config& add_actor_type(std::string name, F f) { using handle = typename infer_handle_from_fun::type; if (!std::is_same::value) add_message_type(name); return add_actor_factory(std::move(name), make_actor_factory(std::move(f))); } /// Adds message type `T` with runtime type info `name`. template actor_system_config& add_message_type(std::string name) { static_assert(std::is_empty::value || std::is_same::value // silence add_actor_type err || is_typed_actor::value || (std::is_default_constructible::value && std::is_copy_constructible::value), "T must provide default and copy constructors"); std::string stream_name = "stream<"; stream_name += name; stream_name += ">"; add_message_type_impl>(std::move(stream_name)); std::string vec_name = "std::vector<"; vec_name += name; vec_name += ">"; add_message_type_impl>(std::move(vec_name)); add_message_type_impl(std::move(name)); return *this; } /// Enables the actor system to convert errors of this error category /// to human-readable strings via `renderer`. actor_system_config& add_error_category(atom_value x, error_renderer y); /// Enables the actor system to convert errors of this error category /// to human-readable strings via `to_string(T)`. template actor_system_config& add_error_category(atom_value category) { auto f = [=](uint8_t val, const std::string& ctx) -> std::string { std::string result; result = to_string(category); result += ": "; result += to_string(static_cast(val)); if (!ctx.empty()) { result += " ("; result += ctx; result += ")"; } return result; }; return add_error_category(category, f); } /// Loads module `T` with optional template parameters `Ts...`. template actor_system_config& load() { module_factories.push_back([](actor_system& sys) -> actor_system::module* { return T::make(sys, detail::type_list{}); }); return *this; } /// Adds a factory for a new hook type to the middleman (if loaded). template actor_system_config& add_hook_factory(Factory f) { hook_factories.push_back(f); return *this; } /// Adds a hook type to the middleman (if loaded). template actor_system_config& add_hook_type() { return add_hook_factory([](actor_system& sys) -> Hook* { return new Hook(sys); }); } /// Adds a hook type to the scheduler. template actor_system_config& add_thread_hook(Ts&&... ts) { thread_hooks_.emplace_back(new Hook(std::forward(ts)...)); return *this; } // -- parser and CLI state --------------------------------------------------- /// Stores whether the help text was printed. If set to `true`, the /// application should not use this config to initialize an `actor_system` /// and instead return from `main` immediately. bool cli_helptext_printed; /// Stores CLI arguments that were not consumed by CAF. message args_remainder CAF_DEPRECATED; /// Stores CLI arguments that were not consumed by CAF. string_list remainder; // -- caf-run parameters ----------------------------------------------------- /// Stores whether this node was started in slave mode. bool slave_mode; /// Name of this node when started in slave mode. std::string slave_name; /// Credentials for connecting to the bootstrap node. std::string bootstrap_node; // -- stream parameters ------------------------------------------------------ /// @private timespan stream_desired_batch_complexity; /// @private timespan stream_max_batch_delay; /// @private timespan stream_credit_round_interval; /// @private timespan stream_tick_duration() const noexcept; timespan streaming_credit_round_interval() const noexcept CAF_DEPRECATED; // -- scheduling parameters -------------------------------------------------- atom_value scheduler_policy CAF_DEPRECATED; size_t scheduler_max_threads CAF_DEPRECATED; size_t scheduler_max_throughput CAF_DEPRECATED; bool scheduler_enable_profiling CAF_DEPRECATED; size_t scheduler_profiling_ms_resolution CAF_DEPRECATED; std::string scheduler_profiling_output_file CAF_DEPRECATED; // -- work-stealing parameters ----------------------------------------------- size_t work_stealing_aggressive_poll_attempts CAF_DEPRECATED; size_t work_stealing_aggressive_steal_interval CAF_DEPRECATED; size_t work_stealing_moderate_poll_attempts CAF_DEPRECATED; size_t work_stealing_moderate_steal_interval CAF_DEPRECATED; size_t work_stealing_moderate_sleep_duration_us CAF_DEPRECATED; size_t work_stealing_relaxed_steal_interval CAF_DEPRECATED; size_t work_stealing_relaxed_sleep_duration_us CAF_DEPRECATED; // -- logger parameters ------------------------------------------------------ std::string logger_file_name CAF_DEPRECATED; std::string logger_file_format CAF_DEPRECATED; atom_value logger_console CAF_DEPRECATED; std::string logger_console_format CAF_DEPRECATED; std::string logger_component_filter CAF_DEPRECATED; atom_value logger_verbosity CAF_DEPRECATED; bool logger_inline_output CAF_DEPRECATED; // -- middleman parameters --------------------------------------------------- atom_value middleman_network_backend CAF_DEPRECATED; std::string middleman_app_identifier CAF_DEPRECATED; bool middleman_enable_automatic_connections CAF_DEPRECATED; size_t middleman_max_consecutive_reads CAF_DEPRECATED; size_t middleman_heartbeat_interval CAF_DEPRECATED; bool middleman_detach_utility_actors CAF_DEPRECATED; bool middleman_detach_multiplexer CAF_DEPRECATED; size_t middleman_cached_udp_buffers CAF_DEPRECATED; size_t middleman_max_pending_msgs CAF_DEPRECATED; // -- OpenCL parameters ------------------------------------------------------ std::string opencl_device_ids; // -- OpenSSL parameters ----------------------------------------------------- std::string openssl_certificate; std::string openssl_key; std::string openssl_passphrase; std::string openssl_capath; std::string openssl_cafile; // -- factories -------------------------------------------------------------- value_factory_string_map value_factories_by_name; value_factory_rtti_map value_factories_by_rtti; actor_factory_map actor_factories; module_factory_vector module_factories; hook_factory_vector hook_factories; group_module_factory_vector group_module_factories; // -- hooks ------------------------------------------------------------------ thread_hooks thread_hooks_; // -- run-time type information ---------------------------------------------- portable_name_map type_names_by_rtti; // -- rendering of user-defined types ---------------------------------------- error_renderer_map error_renderers; // -- parsing parameters ----------------------------------------------------- /// Configures the file path for the INI file, `caf-application.ini` per /// default. std::string config_file_path; // -- utility for caf-run ---------------------------------------------------- // Config parameter for individual actor types. named_actor_config_map named_actor_configs; int (*slave_mode_fun)(actor_system&, const actor_system_config&); protected: virtual std::string make_help_text(const std::vector&); config_option_set custom_options_; private: template void add_message_type_impl(std::string name) { type_names_by_rtti.emplace(std::type_index(typeid(T)), name); value_factories_by_name.emplace(std::move(name), &make_type_erased_value); value_factories_by_rtti.emplace(std::type_index(typeid(T)), &make_type_erased_value); } actor_system_config& set_impl(string_view name, config_value value); static std::string render_sec(uint8_t, atom_value, const message&); static std::string render_exit_reason(uint8_t, atom_value, const message&); void extract_config_file_path(string_list& args); }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/after.hpp000066400000000000000000000040071341123343400214760ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/timeout_definition.hpp" namespace caf { class timeout_definition_builder { public: constexpr timeout_definition_builder(duration d) : tout_(d) { // nop } template timeout_definition operator>>(F f) const { return {tout_, std::move(f)}; } private: duration tout_; }; /// Returns a generator for timeouts. constexpr timeout_definition_builder after(duration d) { return {d}; } /// Returns a generator for timeouts. template constexpr timeout_definition_builder after(std::chrono::duration d) { return after(duration{d}); } } // namespace caf actor-framework-0.16.3/libcaf_core/caf/all.hpp000066400000000000000000000326631341123343400211560ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/config.hpp" #include "caf/sec.hpp" #include "caf/atom.hpp" #include "caf/send.hpp" #include "caf/skip.hpp" #include "caf/unit.hpp" #include "caf/term.hpp" #include "caf/actor.hpp" #include "caf/after.hpp" #include "caf/error.hpp" #include "caf/group.hpp" #include "caf/extend.hpp" #include "caf/logger.hpp" #include "caf/others.hpp" #include "caf/result.hpp" #include "caf/stream.hpp" #include "caf/message.hpp" #include "caf/node_id.hpp" #include "caf/behavior.hpp" #include "caf/defaults.hpp" #include "caf/duration.hpp" #include "caf/expected.hpp" #include "caf/exec_main.hpp" #include "caf/resumable.hpp" #include "caf/streambuf.hpp" #include "caf/to_string.hpp" #include "caf/actor_addr.hpp" #include "caf/actor_pool.hpp" #include "caf/attachable.hpp" #include "caf/message_id.hpp" #include "caf/replies_to.hpp" #include "caf/serializer.hpp" #include "caf/actor_clock.hpp" #include "caf/actor_proxy.hpp" #include "caf/exit_reason.hpp" #include "caf/local_actor.hpp" #include "caf/raise_error.hpp" #include "caf/ref_counted.hpp" #include "caf/stream_slot.hpp" #include "caf/thread_hook.hpp" #include "caf/typed_actor.hpp" #include "caf/actor_system.hpp" #include "caf/config_value.hpp" #include "caf/deserializer.hpp" #include "caf/scoped_actor.hpp" #include "caf/upstream_msg.hpp" #include "caf/actor_ostream.hpp" #include "caf/config_option.hpp" #include "caf/function_view.hpp" #include "caf/index_mapping.hpp" #include "caf/spawn_options.hpp" #include "caf/abstract_actor.hpp" #include "caf/abstract_group.hpp" #include "caf/blocking_actor.hpp" #include "caf/deep_to_string.hpp" #include "caf/execution_unit.hpp" #include "caf/memory_managed.hpp" #include "caf/stateful_actor.hpp" #include "caf/typed_behavior.hpp" #include "caf/proxy_registry.hpp" #include "caf/downstream_msg.hpp" #include "caf/behavior_policy.hpp" #include "caf/message_builder.hpp" #include "caf/message_handler.hpp" #include "caf/response_handle.hpp" #include "caf/system_messages.hpp" #include "caf/abstract_channel.hpp" #include "caf/may_have_timeout.hpp" #include "caf/message_priority.hpp" #include "caf/typed_actor_view.hpp" #include "caf/binary_serializer.hpp" #include "caf/composed_behavior.hpp" #include "caf/event_based_actor.hpp" #include "caf/primitive_variant.hpp" #include "caf/make_config_option.hpp" #include "caf/timeout_definition.hpp" #include "caf/actor_system_config.hpp" #include "caf/binary_deserializer.hpp" #include "caf/composable_behavior.hpp" #include "caf/config_option_adder.hpp" #include "caf/typed_actor_pointer.hpp" #include "caf/scoped_execution_unit.hpp" #include "caf/typed_response_promise.hpp" #include "caf/typed_event_based_actor.hpp" #include "caf/fused_downstream_manager.hpp" #include "caf/abstract_composable_behavior.hpp" #include "caf/decorator/sequencer.hpp" #include "caf/meta/type_name.hpp" #include "caf/meta/annotation.hpp" #include "caf/meta/save_callback.hpp" #include "caf/meta/load_callback.hpp" #include "caf/meta/omittable_if_empty.hpp" #include "caf/scheduler/test_coordinator.hpp" #include "caf/scheduler/abstract_coordinator.hpp" /// /// @mainpage CAF /// /// @section Intro Introduction /// /// This library provides an implementation of the actor model for C++. /// It uses a network transparent messaging system to ease development /// of both concurrent and distributed software. /// /// `libcaf` uses a thread pool to schedule actors by default. /// A scheduled actor should not call blocking functions. /// Individual actors can be spawned (created) with a special flag to run in /// an own thread if one needs to make use of blocking APIs. /// /// Writing applications in `libcaf` requires a minimum of gluecode and /// each context is an actor. Scoped actors allow actor interaction /// from the context of threads such as main. /// /// @section GettingStarted Getting Started /// /// To build `libcaf,` you need `GCC >= 4.8 or Clang >= 3.2, /// and `CMake`. /// /// The usual build steps on Linux and macOS are: /// ///- `./configure ///- `make ///- `make install (as root, optionally) /// /// Please run the unit tests as well to verify that `libcaf` /// works properly. /// ///- `make test /// /// Please submit a bug report that includes (a) your compiler version, /// (b) your OS, and (c) the output of the unit tests if an error occurs: /// https://github.com/actor-framework/actor-framework/issues /// /// Please read the Manual for an introduction to `libcaf`. /// It is available online on Read The Docs at /// https://actor-framework.readthedocs.io or as PDF at /// http://www.actor-framework.org/pdf/manual.pdf /// /// @section IntroHelloWorld Hello World Example /// /// @include hello_world.cpp /// /// @section IntroMoreExamples More Examples /// /// The {@link math_actor.cpp Math Actor Example} shows the usage /// of {@link receive_loop} and {@link caf::arg_match arg_match}. /// The {@link dining_philosophers.cpp Dining Philosophers Example} /// introduces event-based actors covers various features of CAF. /// /// @namespace caf /// Root namespace of libcaf. /// /// @namespace caf::mixin /// Contains mixin classes implementing several actor traits. /// /// @namespace caf::exit_reason /// Contains all predefined exit reasons. /// /// @namespace caf::policy /// Contains policies encapsulating characteristics or algorithms. /// /// @namespace caf::io /// Contains all IO-related classes and functions. /// /// @namespace caf::io::network /// Contains classes and functions used for network abstraction. /// /// @namespace caf::io::basp /// Contains all classes and functions for the Binary Actor Sytem Protocol. /// /// @defgroup MessageHandling Message Handling /// /// This is the beating heart of CAF, since actor programming is /// a message oriented programming paradigm. /// /// A message in CAF is a n-tuple of values (with size >= 1). /// You can use almost every type in a messages as long as it is announced, /// i.e., known by the type system of CAF. /// /// @defgroup BlockingAPI Blocking API /// /// Blocking functions to receive messages. /// /// The blocking API of CAF is intended to be used for migrating /// previously threaded applications. When writing new code, you should /// consider the nonblocking API based on `become` and `unbecome` first. /// /// @section Send Sending Messages /// /// The function `send` can be used to send a message to an actor. /// The first argument is the receiver of the message followed by any number /// of values: /// /// ~~ /// // spawn some actors /// actor_system_config cfg; /// actor_system system{cfg}; /// auto a1 = system.spawn(...); /// auto a2 = system.spawn(...); /// auto a3 = system.spawn(...); /// /// // an actor executed in the current thread /// scoped_actor self{system}; /// /// // define an atom for message annotation /// using hello_atom = atom_constant; /// using compute_atom = atom_constant; /// using result_atom = atom_constant; /// /// // send a message to a1 /// self->send(a1, hello_atom::value, "hello a1!"); /// /// // send a message to a1, a2, and a3 /// auto msg = make_message(compute_atom::value, 1, 2, 3); /// self->send(a1, msg); /// self->send(a2, msg); /// self->send(a3, msg); /// ~~ /// /// @section Receive Receive messages /// /// The function `receive` takes a `behavior` as argument. The behavior /// is a list of { callback } rules where the callback argument types /// define a pattern for matching messages. /// /// ~~ /// { /// [](hello_atom, const std::string& msg) { /// cout << "received hello message: " << msg << endl; /// }, /// [](compute_atom, int i0, int i1, int i2) { /// // send our result back to the sender of this messages /// return make_message(result_atom::value, i0 + i1 + i2); /// } /// } /// ~~ /// /// Blocking actors such as the scoped actor can call their receive member /// to handle incoming messages. /// /// ~~ /// self->receive( /// [](result_atom, int i) { /// cout << "result is: " << i << endl; /// } /// ); /// ~~ /// /// Please read the manual for further details about pattern matching. /// /// @section Atoms Atoms /// /// Atoms are a nice way to add semantic informations to a message. /// Assuming an actor wants to provide a "math sevice" for integers. It /// could provide operations such as addition, subtraction, etc. /// This operations all have two operands. Thus, the actor does not know /// what operation the sender of a message wanted by receiving just two integers. /// /// Example actor: /// ~~ /// using plus_atom = atom_constant; /// using minus_atom = atom_constant; /// behavior math_actor() { /// return { /// [](plus_atom, int a, int b) { /// return make_message(atom("result"), a + b); /// }, /// [](minus_atom, int a, int b) { /// return make_message(atom("result"), a - b); /// } /// }; /// } /// ~~ /// /// @section ReceiveLoops Receive Loops /// /// The previous examples used `receive` to create a behavior on-the-fly. /// This is inefficient in a loop since the argument passed to receive /// is created in each iteration again. It's possible to store the behavior /// in a variable and pass that variable to receive. This fixes the issue /// of re-creation each iteration but rips apart definition and usage. /// /// There are three convenience functions implementing receive loops to /// declare behavior where it belongs without unnecessary /// copies: `receive_while,` `receive_for` and `do_receive`. /// /// `receive_while` creates a functor evaluating a lambda expression. /// The loop continues until the given lambda returns `false`. A simple example: /// /// ~~ /// size_t received = 0; /// receive_while([&] { return received < 10; }) ( /// [&](int) { /// ++received; /// } /// ); /// // ... /// ~~ /// /// `receive_for` is a simple ranged-based loop: /// /// ~~ /// std::vector results; /// size_t i = 0; /// receive_for(i, 10) ( /// [&](int value) { /// results.push_back(value); /// } /// ); /// ~~ /// /// `do_receive` returns a functor providing the function `until` that /// takes a lambda expression. The loop continues until the given lambda /// returns true. Example: /// /// ~~ /// size_t received = 0; /// do_receive ( /// [&](int) { /// ++received; /// } /// ).until([&] { return received >= 10; }); /// // ... /// ~~ /// /// @section FutureSend Sending Delayed Messages /// /// The function `delayed_send` provides a simple way to delay a message. /// This is particularly useful for recurring events, e.g., periodical polling. /// Usage example: /// /// ~~ /// scoped_actor self{...}; /// /// self->delayed_send(self, std::chrono::seconds(1), poll_atom::value); /// bool running = true; /// self->receive_while([&](){ return running; }) ( /// // ... /// [&](poll_atom) { /// // ... poll something ... /// // and do it again after 1sec /// self->delayed_send(self, std::chrono::seconds(1), poll_atom::value); /// } /// ); /// ~~ /// /// See also the {@link dancing_kirby.cpp dancing kirby example}. /// /// @defgroup ImplicitConversion Implicit Type Conversions /// /// The message passing of `libcaf` prohibits pointers in messages because /// it enforces network transparent messaging. /// Unfortunately, string literals in `C++` have the type `const char*, /// resp. `const char[]. Since `libcaf` is a user-friendly library, /// it silently converts string literals and C-strings to `std::string` objects. /// It also converts unicode literals to the corresponding STL container. /// /// A few examples: /// ~~ /// // sends an std::string containing "hello actor!" to itself /// send(self, "hello actor!"); /// /// const char* cstring = "cstring"; /// // sends an std::string containing "cstring" to itself /// send(self, cstring); /// /// // sends an std::u16string containing the UTF16 string "hello unicode world!" /// send(self, u"hello unicode world!"); /// /// // x has the type caf::tuple /// auto x = make_message("hello", "tuple"); /// ~~ /// /// @defgroup ActorCreation Creating Actors // examples /// A trivial example program. /// @example hello_world.cpp /// A simple example for a delayed_send based application. /// @example dancing_kirby.cpp /// An event-based "Dining Philosophers" implementation. /// @example dining_philosophers.cpp actor-framework-0.16.3/libcaf_core/caf/allowed_unsafe_message_type.hpp000066400000000000000000000046441341123343400261410ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ // This file is referenced in the manual, do not modify without updating refs! // ConfiguringActorApplications: 50-54 #pragma once #include namespace caf { /// Template specializations can whitelist individual /// types for unsafe message passing operations. template struct allowed_unsafe_message_type : std::false_type {}; template struct is_allowed_unsafe_message_type : allowed_unsafe_message_type {}; template struct is_allowed_unsafe_message_type : allowed_unsafe_message_type {}; template struct is_allowed_unsafe_message_type : allowed_unsafe_message_type {}; template struct is_allowed_unsafe_message_type : allowed_unsafe_message_type {}; } // namespace caf #define CAF_ALLOW_UNSAFE_MESSAGE_TYPE(type_name) \ namespace caf { \ template <> \ struct allowed_unsafe_message_type : std::true_type {}; \ } actor-framework-0.16.3/libcaf_core/caf/atom.hpp000066400000000000000000000146041341123343400213410ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include "caf/detail/atom_val.hpp" #include "caf/fwd.hpp" namespace caf { /// The value type of atoms. enum class atom_value : uint64_t { /// @cond PRIVATE dirty_little_hack = 31337 /// @endcond }; /// @relates atom_value std::string to_string(const atom_value& what); /// @relates atom_value atom_value to_lowercase(atom_value x); atom_value atom_from_string(string_view x); /// Creates an atom from given string literal. template constexpr atom_value atom(char const (&str)[Size]) { // last character is the NULL terminator static_assert(Size <= 11, "only 10 characters are allowed"); return static_cast(detail::atom_val(str)); } /// Creates an atom from given string literal and return an integer /// representation of the atom.. template constexpr uint64_t atom_uint(char const (&str)[Size]) { static_assert(Size <= 11, "only 10 characters are allowed"); return detail::atom_val(str); } /// Converts an atom to its integer representation. constexpr uint64_t atom_uint(atom_value x) { return static_cast(x); } /// Lifts an `atom_value` to a compile-time constant. template struct atom_constant { constexpr atom_constant() { // nop } /// Returns the wrapped value. constexpr operator atom_value() const { return V; } /// Returns the wrapped value as its base type. static constexpr uint64_t uint_value() { return static_cast(V); } /// Returns the wrapped value. static constexpr atom_value get_value() { return V; } /// Returns an instance *of this constant* (*not* an `atom_value`). static const atom_constant value; }; template struct is_atom_constant { static constexpr bool value = false; }; template struct is_atom_constant> { static constexpr bool value = true; }; template std::string to_string(const atom_constant&) { return to_string(V); } template const atom_constant atom_constant::value = atom_constant{}; /// Used for request operations. using add_atom = atom_constant; /// Used for request operations. using get_atom = atom_constant; /// Used for request operations. using put_atom = atom_constant; /// Used for signalizing updates, e.g., in a key-value store. using update_atom = atom_constant; /// Used for request operations. using delete_atom = atom_constant; /// Used for response messages. using ok_atom = atom_constant; /// Used for triggering system-level message handling. using sys_atom = atom_constant; /// Used for signaling group subscriptions. using join_atom = atom_constant; /// Used for signaling group unsubscriptions. using leave_atom = atom_constant; /// Used for signaling forwarding paths. using forward_atom = atom_constant; /// Used for buffer management. using flush_atom = atom_constant; /// Used for I/O redirection. using redirect_atom = atom_constant; /// Used for link requests over network. using link_atom = atom_constant; /// Used for removing networked links. using unlink_atom = atom_constant; /// Used for publishing actors at a given port. using publish_atom = atom_constant; /// Used for publishing actors at a given port. using publish_udp_atom = atom_constant; /// Used for removing an actor/port mapping. using unpublish_atom = atom_constant; /// Used for removing an actor/port mapping. using unpublish_udp_atom = atom_constant; /// Used for signalizing group membership. using subscribe_atom = atom_constant; /// Used for withdrawing group membership. using unsubscribe_atom = atom_constant; /// Used for establishing network connections. using connect_atom = atom_constant; /// Used for contacting a remote UDP endpoint using contact_atom = atom_constant; /// Used for opening ports or files. using open_atom = atom_constant; /// Used for closing ports or files. using close_atom = atom_constant; /// Used for spawning remote actors. using spawn_atom = atom_constant; /// Used for migrating actors to other nodes. using migrate_atom = atom_constant; /// Used for triggering periodic operations. using tick_atom = atom_constant; /// Used for pending out of order messages. using pending_atom = atom_constant; /// Used as timeout type for `timeout_msg`. using receive_atom = atom_constant; /// Used as timeout type for `timeout_msg`. using stream_atom = atom_constant; } // namespace caf namespace std { template <> struct hash { size_t operator()(caf::atom_value x) const { hash f; return f(static_cast(x)); } }; } // namespace std actor-framework-0.16.3/libcaf_core/caf/attachable.hpp000066400000000000000000000062211341123343400224650ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include "caf/error.hpp" #include "caf/optional.hpp" #include "caf/exit_reason.hpp" #include "caf/execution_unit.hpp" namespace caf { class abstract_actor; /// Callback utility class. class attachable { public: attachable() = default; attachable(const attachable&) = delete; attachable& operator=(const attachable&) = delete; /// Represents a pointer to a value with its subtype as type ID number. struct token { /// Identifies a non-matchable subtype. static constexpr size_t anonymous = 0; /// Identifies `abstract_group::subscription`. static constexpr size_t subscription = 1; /// Identifies `default_attachable::observe_token`. static constexpr size_t observer = 2; /// Identifies `stream_aborter::token`. static constexpr size_t stream_aborter = 3; template token(const T& tk) : subtype(T::token_type), ptr(&tk) { // nop } /// Denotes the type of ptr. size_t subtype; /// Any value, used to identify attachable instances. const void* ptr; token(size_t typenr, const void* vptr); }; virtual ~attachable(); /// Executed if the actor finished execution with given `reason`. /// The default implementation does nothing. /// @warning `host` can be `nullptr` virtual void actor_exited(const error& fail_state, execution_unit* host); /// Returns `true` if `what` selects this instance, otherwise `false`. virtual bool matches(const token& what); /// Returns `true` if `what` selects this instance, otherwise `false`. template bool matches(const T& what) { return matches(token{T::token_type, &what}); } std::unique_ptr next; }; /// @relates attachable using attachable_ptr = std::unique_ptr; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/behavior.hpp000066400000000000000000000107631341123343400222020ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/none.hpp" #include "caf/duration.hpp" #include "caf/timeout_definition.hpp" #include "caf/detail/type_list.hpp" #include "caf/detail/type_traits.hpp" #include "caf/detail/behavior_impl.hpp" namespace caf { class message_handler; /// Describes the behavior of an actor, i.e., provides a message /// handler and an optional timeout. class behavior { public: friend class message_handler; behavior() = default; behavior(behavior&&) = default; behavior(const behavior&) = default; behavior& operator=(behavior&&) = default; behavior& operator=(const behavior&) = default; /// Creates a behavior from `fun` without timeout. behavior(const message_handler& mh); /// The list of arguments can contain match expressions, message handlers, /// and up to one timeout (if set, the timeout has to be the last argument). template behavior(T x, Ts&&... xs) { assign(std::move(x), std::forward(xs)...); } /// Creates a behavior from `tdef` without message handler. template behavior(timeout_definition tdef) : impl_(detail::make_behavior(tdef)) { // nop } /// Assigns new handlers. template void assign(Ts&&... xs) { static_assert(sizeof...(Ts) > 0, "assign() called without arguments"); impl_ = detail::make_behavior(std::forward(xs)...); } inline void swap(behavior& other) { impl_.swap(other.impl_); } void assign(intrusive_ptr ptr) { impl_.swap(ptr); } /// Equal to `*this = other`. void assign(message_handler other); /// Equal to `*this = other`. void assign(behavior other); /// Invokes the timeout callback if set. inline void handle_timeout() { impl_->handle_timeout(); } /// Returns the duration after which receive operations /// using this behavior should time out. inline const duration& timeout() const { return impl_->timeout(); } /// Runs this handler and returns its (optional) result. inline optional operator()(message& xs) { return impl_ ? impl_->invoke(xs) : none; } inline optional operator()(type_erased_tuple& xs) { return impl_ ? impl_->invoke(xs) : none; } /// Runs this handler with callback. inline match_case::result operator()(detail::invoke_result_visitor& f, type_erased_tuple& xs) { return impl_ ? impl_->invoke(f, xs) : match_case::no_match; } /// Runs this handler with callback. inline match_case::result operator()(detail::invoke_result_visitor& f, message& xs) { return impl_ ? impl_->invoke(f, xs) : match_case::no_match; } /// Checks whether this behavior is not empty. inline operator bool() const { return static_cast(impl_); } /// @cond PRIVATE using impl_ptr = intrusive_ptr; inline const impl_ptr& as_behavior_impl() const { return impl_; } inline behavior(impl_ptr ptr) : impl_(std::move(ptr)) { // nop } inline behavior& unbox() { return *this; } /// @endcond private: impl_ptr impl_; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/behavior_policy.hpp000066400000000000000000000032211341123343400235500ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once namespace caf { struct keep_behavior_t { constexpr keep_behavior_t() { // nop } }; /// Policy tag that causes {@link event_based_actor::become} to /// keep the current behavior available. /// @relates local_actor constexpr keep_behavior_t keep_behavior = keep_behavior_t{}; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/binary_deserializer.hpp000066400000000000000000000031361341123343400244250ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/stream_deserializer.hpp" #include "caf/streambuf.hpp" namespace caf { /// A stream serializer that writes into an unbounded contiguous character /// sequence. using binary_deserializer = stream_deserializer; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/binary_serializer.hpp000066400000000000000000000031321341123343400241100ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/stream_serializer.hpp" #include "caf/streambuf.hpp" namespace caf { /// A stream serializer that writes into an unbounded contiguous character /// sequence. using binary_serializer = stream_serializer; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/blocking_actor.hpp000066400000000000000000000330041341123343400233540ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include "caf/actor_config.hpp" #include "caf/actor_marker.hpp" #include "caf/after.hpp" #include "caf/behavior.hpp" #include "caf/extend.hpp" #include "caf/fwd.hpp" #include "caf/is_timeout_or_catch_all.hpp" #include "caf/local_actor.hpp" #include "caf/mailbox_element.hpp" #include "caf/none.hpp" #include "caf/send.hpp" #include "caf/typed_actor.hpp" #include "caf/policy/arg.hpp" #include "caf/policy/categorized.hpp" #include "caf/policy/downstream_messages.hpp" #include "caf/policy/normal_messages.hpp" #include "caf/policy/upstream_messages.hpp" #include "caf/policy/urgent_messages.hpp" #include "caf/detail/apply_args.hpp" #include "caf/detail/blocking_behavior.hpp" #include "caf/detail/type_list.hpp" #include "caf/detail/type_traits.hpp" #include "caf/intrusive/drr_cached_queue.hpp" #include "caf/intrusive/drr_queue.hpp" #include "caf/intrusive/fifo_inbox.hpp" #include "caf/intrusive/wdrr_dynamic_multiplexed_queue.hpp" #include "caf/intrusive/wdrr_fixed_multiplexed_queue.hpp" #include "caf/mixin/requester.hpp" #include "caf/mixin/sender.hpp" #include "caf/mixin/subscriber.hpp" namespace caf { namespace mixin { template <> struct is_blocking_requester : std::true_type { }; } // namespace caf } // namespace mixin namespace caf { /// A thread-mapped or context-switching actor using a blocking /// receive rather than a behavior-stack based message processing. /// @extends local_actor class blocking_actor : public extend:: with, public dynamically_typed_actor_base { public: // -- nested and member types ------------------------------------------------ /// Base type. using super = extended_base; /// Stores asynchronous messages with default priority. using normal_queue = intrusive::drr_cached_queue; /// Stores asynchronous messages with hifh priority. using urgent_queue = intrusive::drr_cached_queue; /// Configures the FIFO inbox with two nested queues: /// /// 1. Default asynchronous messages /// 2. High-priority asynchronous messages struct mailbox_policy { using deficit_type = size_t; using mapped_type = mailbox_element; using unique_pointer = mailbox_element_ptr; using queue_type = intrusive::wdrr_fixed_multiplexed_queue< policy::categorized, normal_queue, urgent_queue>; static constexpr size_t normal_queue_index = 0; static constexpr size_t urgent_queue_index = 1; }; /// A queue optimized for single-reader-many-writers. using mailbox_type = intrusive::fifo_inbox; /// Absolute timeout type. using timeout_type = std::chrono::high_resolution_clock::time_point; /// Supported behavior type. using behavior_type = behavior; /// Declared message passing interface. using signatures = none_t; // -- nested classes --------------------------------------------------------- /// Represents pre- and postconditions for receive loops. class receive_cond { public: virtual ~receive_cond(); /// Returns whether a precondition for receiving a message still holds. virtual bool pre(); /// Returns whether a postcondition for receiving a message still holds. virtual bool post(); }; /// Pseudo receive condition modeling a single receive. class accept_one_cond : public receive_cond { public: ~accept_one_cond() override; bool post() override; }; /// Implementation helper for `blocking_actor::receive_while`. struct receive_while_helper { using fun_type = std::function; blocking_actor* self; fun_type stmt_; template void operator()(Ts&&... xs) { static_assert(sizeof...(Ts) > 0, "operator() requires at least one argument"); struct cond : receive_cond { fun_type stmt; cond(fun_type x) : stmt(std::move(x)) { // nop } bool pre() override { return stmt(); } }; cond rc{std::move(stmt_)}; self->varargs_receive(rc, make_message_id(), std::forward(xs)...); } }; /// Implementation helper for `blocking_actor::receive_for`. template struct receive_for_helper { blocking_actor* self; T& begin; T end; template void operator()(Ts&&... xs) { struct cond : receive_cond { receive_for_helper& outer; cond(receive_for_helper& x) : outer(x) { // nop } bool pre() override { return outer.begin != outer.end; } bool post() override { ++outer.begin; return true; } }; cond rc{*this}; self->varargs_receive(rc, make_message_id(), std::forward(xs)...); } }; /// Implementation helper for `blocking_actor::do_receive`. struct do_receive_helper { std::function cb; template void until(Statement stmt) { struct cond : receive_cond { Statement f; cond(Statement x) : f(std::move(x)) { // nop } bool post() override { return !f(); } }; cond rc{std::move(stmt)}; cb(rc); } void until(const bool& bvalue) { until([&] { return bvalue; }); } }; struct mailbox_visitor { blocking_actor* self; bool& done; receive_cond& rcc; message_id mid; detail::blocking_behavior& bhvr; // Dispatches messages with high and normal priority to the same handler. template intrusive::task_result operator()(size_t, Queue&, mailbox_element& x) { return (*this)(x); } // Consumes `x`. intrusive::task_result operator()(mailbox_element& x); }; // -- constructors and destructors ------------------------------------------- blocking_actor(actor_config& cfg); ~blocking_actor() override; // -- overridden functions of abstract_actor --------------------------------- void enqueue(mailbox_element_ptr, execution_unit*) override; // -- overridden functions of local_actor ------------------------------------ const char* name() const override; void launch(execution_unit* eu, bool lazy, bool hide) override; // -- virtual modifiers ------------------------------------------------------ /// Implements the actor's behavior. virtual void act(); // -- modifiers -------------------------------------------------------------- /// Dequeues the next message from the mailbox that is /// matched by given behavior. template void receive(Ts&&... xs) { accept_one_cond rc; varargs_receive(rc, make_message_id(), std::forward(xs)...); } /// Receives messages for range `[begin, first)`. /// Semantically equal to: /// `for ( ; begin != end; ++begin) { receive(...); }`. /// /// **Usage example:** /// ~~~ /// int i = 0; /// receive_for(i, 10) ( /// [&](get_atom) { /// return i; /// } /// ); /// ~~~ template receive_for_helper receive_for(T& begin, T end) { return {this, begin, std::move(end)}; } /// Receives messages as long as `stmt` returns true. /// Semantically equal to: `while (stmt()) { receive(...); }`. /// /// **Usage example:** /// ~~~ /// int i = 0; /// receive_while([&]() { return (++i <= 10); }) ( /// ... /// ); /// ~~~ receive_while_helper receive_while(std::function stmt); /// Receives messages as long as `ref` is true. /// Semantically equal to: `while (ref) { receive(...); }`. /// /// **Usage example:** /// ~~~ /// bool running = true; /// receive_while(running) ( /// ... /// ); /// ~~~ receive_while_helper receive_while(const bool& ref); /// Receives messages until `stmt` returns true. /// /// Semantically equal to: /// `do { receive(...); } while (stmt() == false);` /// /// **Usage example:** /// ~~~ /// int i = 0; /// do_receive /// ( /// on() >> int_fun, /// on() >> float_fun /// ) /// .until([&]() { return (++i >= 10); }; /// ~~~ template do_receive_helper do_receive(Ts&&... xs) { auto tup = std::make_tuple(std::forward(xs)...); auto cb = [=](receive_cond& rc) mutable { varargs_tup_receive(rc, make_message_id(), tup); }; return {cb}; } /// Blocks this actor until all other actors are done. void await_all_other_actors_done(); /// Blocks this actor until all `xs...` have terminated. template void wait_for(Ts&&... xs) { using wait_for_atom = atom_constant; size_t expected = 0; size_t i = 0; size_t attach_results[] = {attach_functor(xs)...}; for (auto res : attach_results) expected += res; receive_for(i, expected)( [](wait_for_atom) { // nop } ); } /// Sets a user-defined exit reason `err`. This reason /// is signalized to other actors after `act()` returns. void fail_state(error err); // -- customization points --------------------------------------------------- /// Blocks until at least one message is in the mailbox. virtual void await_data(); /// Blocks until at least one message is in the mailbox or /// the absolute `timeout` was reached. virtual bool await_data(timeout_type timeout); /// Returns the next element from the mailbox or `nullptr`. virtual mailbox_element_ptr dequeue(); /// Returns the queue for storing incoming messages. inline mailbox_type& mailbox() { return mailbox_; } /// @cond PRIVATE /// Receives messages until either a pre- or postcheck of `rcc` fails. template void varargs_tup_receive(receive_cond& rcc, message_id mid, std::tuple& tup) { using namespace detail; static_assert(sizeof...(Ts), "at least one argument required"); // extract how many arguments are actually the behavior part, // i.e., neither `after(...) >> ...` nor `others >> ...`. using filtered = typename tl_filter_not< type_list::type...>, is_timeout_or_catch_all >::type; filtered tk; behavior bhvr{apply_moved_args(make_behavior_impl, get_indices(tk), tup)}; using tail_indices = typename il_range< tl_size::value, sizeof...(Ts) >::type; make_blocking_behavior_t factory; auto fun = apply_moved_args_prefixed(factory, tail_indices{}, tup, &bhvr); receive_impl(rcc, mid, fun); } /// Receives messages until either a pre- or postcheck of `rcc` fails. void varargs_tup_receive(receive_cond& rcc, message_id mid, std::tuple& tup); /// Receives messages until either a pre- or postcheck of `rcc` fails. template void varargs_receive(receive_cond& rcc, message_id mid, Ts&&... xs) { auto tup = std::forward_as_tuple(std::forward(xs)...); varargs_tup_receive(rcc, mid, tup); } /// Receives messages until either a pre- or postcheck of `rcc` fails. void receive_impl(receive_cond& rcc, message_id mid, detail::blocking_behavior& bhvr); bool cleanup(error&& fail_state, execution_unit* host) override; sec build_pipeline(stream_slot in, stream_slot out, stream_manager_ptr mgr); // -- backwards compatibility ------------------------------------------------ inline mailbox_element_ptr next_message() { return dequeue(); } inline bool has_next_message() { return !mailbox_.empty(); } /// @endcond private: size_t attach_functor(const actor&); size_t attach_functor(const actor_addr&); size_t attach_functor(const strong_actor_ptr&); template size_t attach_functor(const typed_actor& x) { return attach_functor(actor_cast(x)); } template size_t attach_functor(const Container& xs) { size_t res = 0; for (auto& x : xs) res += attach_functor(x); return res; } // -- member variables ------------------------------------------------------- // used by both event-based and blocking actors mailbox_type mailbox_; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/broadcast_downstream_manager.hpp000066400000000000000000000263141341123343400263010ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/buffered_downstream_manager.hpp" #include "caf/outbound_path.hpp" #include "caf/raise_error.hpp" #include "caf/detail/algorithms.hpp" #include "caf/detail/path_state.hpp" #include "caf/detail/select_all.hpp" #include "caf/detail/unordered_flat_map.hpp" namespace caf { template class broadcast_downstream_manager : public buffered_downstream_manager { public: // -- member types ----------------------------------------------------------- /// Base type. using super = buffered_downstream_manager; /// Type of `paths_`. using typename super::map_type; /// Unique pointer to an outbound path. using typename super::unique_path_ptr; /// Enables or disables output per path. using filter_type = Filter; /// Function object for evaluating filters. using select_type = Select; /// Container for caching `T`s per path with active filter. using path_state = detail::path_state; /// Maps slot IDs to caches. using state_map_type = detail::unordered_flat_map; // -- constructors, destructors, and assignment operators -------------------- broadcast_downstream_manager(stream_manager* parent) : super(parent) { // nop } // -- properties ------------------------------------------------------------- size_t buffered() const noexcept override { // We have a central buffer, but also an additional buffer at each path. We // return the maximum size to reflect the current worst case. size_t central_buf = this->buf_.size(); size_t max_path_buf = 0; for (auto& kvp : state_map_) max_path_buf = std::max(max_path_buf, kvp.second.buf.size()); return central_buf + max_path_buf; } size_t buffered(stream_slot slot) const noexcept override { auto i = state_map_.find(slot); return this->buf_.size() + (i != state_map_.end() ? i->second.buf.size() : 0u); } int32_t max_capacity() const noexcept override { // The maximum capacity is limited by the slowest downstream path. auto result = std::numeric_limits::max(); for (auto& kvp : this->paths_) { auto mc = kvp.second->max_capacity; // max_capacity is 0 if and only if we didn't receive an ack_batch yet. if (mc > 0) result = std::min(result, mc); } return result; } /// Sets the filter for `slot` to `filter`. Inserts a new element if `slot` /// is a new path. void set_filter(stream_slot slot, filter_type new_filter) { CAF_LOG_TRACE(CAF_ARG(slot) << CAF_ARG(new_filter)); filter(slot) = std::move(new_filter); } /// Returns the filter for `slot`. Inserts a new element if `slot` is a new /// path. filter_type& filter(stream_slot slot) { auto i = state_map_.find(slot); if (i != state_map_.end()) return i->second.filter; CAF_RAISE_ERROR("invalid slot"); } /// Returns whether all filters satisfy the predicate as if applying /// `std::all_of`. template bool all_filters(UnaryPredicate predicate) { return std::all_of(state_map_.begin(), state_map_.end(), [&](const typename state_map_type::value_type& kvp) { return predicate(kvp.second.filter); }); } /// Returns whether any filter satisfies the predicate as if applying /// `std::any_of`. template bool any_filter(UnaryPredicate predicate) { return std::any_of(state_map_.begin(), state_map_.end(), [&](const typename state_map_type::value_type& kvp) { return predicate(kvp.second.filter); }); } /// Returns whether no filter satisfies the predicate as if applying /// `std::none_of`. template bool no_filter(UnaryPredicate predicate) { return std::none_of(state_map_.begin(), state_map_.end(), [&](const typename state_map_type::value_type& kvp) { return predicate(kvp.second.filter); }); } /// Returns the broadcast states for all paths. state_map_type& states() { return state_map_; } /// Returns the broadcast states for all paths. const state_map_type& states() const { return state_map_; } /// Returns the selector for filtering outgoing data. select_type& selector() { return select_; } /// Returns the selector for filtering outgoing data. const select_type& selector() const { return select_; } // -- overridden functions --------------------------------------------------- bool insert_path(unique_path_ptr ptr) override { CAF_LOG_TRACE(CAF_ARG(ptr)); // Make sure state_map_ and paths_ are always equally sorted, otherwise // we'll run into UB when calling `zip_foreach`. CAF_ASSERT(state_map_.size() == this->paths_.size()); auto slot = ptr->slots.sender; // Append to the regular path map. if (!super::insert_path(std::move(ptr))) { CAF_LOG_DEBUG("unable to insert path at slot" << slot); return false; } // Append to the state map. if (!state_map_.emplace(slot, path_state{}).second) { CAF_LOG_DEBUG("unable to add state for slot" << slot); super::remove_path(slot, none, true); return false; } return true; } void emit_batches() override { CAF_LOG_TRACE(CAF_ARG2("buffered", this->buffered()) << CAF_ARG2("paths", this->paths_.size())); emit_batches_impl(false); } void force_emit_batches() override { CAF_LOG_TRACE(CAF_ARG2("buffered", this->buffered()) << CAF_ARG2("paths", this->paths_.size())); emit_batches_impl(true); } /// Forces the manager flush its buffer to the individual path buffers. void fan_out_flush() { auto& buf = this->buf_; auto f = [&](typename map_type::value_type& x, typename state_map_type::value_type& y) { // Don't push new data into a closing path. if (x.second->closing) return; // Push data from the global buffer to path buffers. auto& st = y.second; // TODO: replace with `if constexpr` when switching to C++17 if (std::is_same::value) { st.buf.insert(st.buf.end(), buf.begin(), buf.end()); } else { for (auto& piece : buf) if (select_(st.filter, piece)) st.buf.emplace_back(piece); } }; detail::zip_foreach(f, this->paths_.container(), state_map_.container()); buf.clear(); } protected: void about_to_erase(outbound_path* ptr, bool silent, error* reason) override { CAF_ASSERT(ptr != nullptr); CAF_LOG_TRACE(CAF_ARG2("slot", ptr->slots.sender) << CAF_ARG(silent) << CAF_ARG(reason)); state_map_.erase(ptr->slots.sender); super::about_to_erase(ptr, silent, reason); } private: void emit_batches_impl(bool force_underfull) { CAF_ASSERT(this->paths_.size() <= state_map_.size()); if (this->paths_.empty()) return; // Calculate the chunk size, i.e., how many more items we can put to our // caches at the most. auto not_closing = [&](typename map_type::value_type& x, typename state_map_type::value_type&) { return !x.second->closing; }; // Returns the minimum of `interim` and `get_credit(x) - get_cache_size(y)`. auto f = [&](size_t interim, typename map_type::value_type& x, typename state_map_type::value_type& y) { auto credit = static_cast(x.second->open_credit); auto cache_size = y.second.buf.size(); return std::min(interim, credit > cache_size ? credit - cache_size : 0u); }; auto chunk_size = detail::zip_fold_if(f, not_closing, std::numeric_limits::max(), this->paths_.container(), state_map_.container()); if (chunk_size == std::numeric_limits::max()) { // All paths are closing, simply try forcing out more data and return. auto g = [&](typename map_type::value_type& x, typename state_map_type::value_type& y) { // Always force batches on closing paths. x.second->emit_batches(this->self(), y.second.buf, true); }; detail::zip_foreach(g, this->paths_.container(), state_map_.container()); return; } auto chunk = this->get_chunk(chunk_size); if (chunk.empty()) { auto g = [&](typename map_type::value_type& x, typename state_map_type::value_type& y) { // Always force batches on closing paths. x.second->emit_batches(this->self(), y.second.buf, force_underfull || x.second->closing); }; detail::zip_foreach(g, this->paths_.container(), state_map_.container()); } else { auto g = [&](typename map_type::value_type& x, typename state_map_type::value_type& y) { auto& st = y.second; // Don't enqueue new data into a closing path. if (!x.second->closing) { // Push data from the global buffer to path buffers. // TODO: replace with `if constexpr` when switching to C++17 if (std::is_same::value) { st.buf.insert(st.buf.end(), chunk.begin(), chunk.end()); } else { for (auto& piece : chunk) if (select_(st.filter, piece)) st.buf.emplace_back(piece); } } // Always force batches on closing paths. x.second->emit_batches(this->self(), st.buf, force_underfull || x.second->closing); }; detail::zip_foreach(g, this->paths_.container(), state_map_.container()); } } state_map_type state_map_; select_type select_; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/buffered_downstream_manager.hpp000066400000000000000000000072641341123343400261240ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include #include "caf/downstream_manager_base.hpp" #include "caf/logger.hpp" namespace caf { /// Mixin for streams with any number of downstreams. `Subtype` must provide a /// member function `buf()` returning a queue with `std::deque`-like interface. template class buffered_downstream_manager : public downstream_manager_base { public: // -- member types ----------------------------------------------------------- using super = downstream_manager_base; using output_type = T; using buffer_type = std::deque; using chunk_type = std::vector; // -- constructors, destructors, and assignment operators -------------------- explicit buffered_downstream_manager(stream_manager* parent) : super(parent) { // nop } template void push(T0&& x, Ts&&... xs) { buf_.emplace_back(std::forward(x), std::forward(xs)...); } /// @pre `n <= buf_.size()` static chunk_type get_chunk(buffer_type& buf, size_t n) { CAF_LOG_TRACE(CAF_ARG(buf) << CAF_ARG(n)); chunk_type xs; if (!buf.empty() && n > 0) { xs.reserve(std::min(n, buf.size())); if (n < buf.size()) { auto first = buf.begin(); auto last = first + static_cast(n); std::move(first, last, std::back_inserter(xs)); buf.erase(first, last); } else { std::move(buf.begin(), buf.end(), std::back_inserter(xs)); buf.clear(); } } return xs; } chunk_type get_chunk(size_t n) { return get_chunk(buf_, n); } bool terminal() const noexcept override { return false; } size_t capacity() const noexcept override { // Our goal is to cache up to 2 full batches, whereby we pick the highest // batch size available to us (optimistic estimate). size_t desired = 1; for (auto& kvp : this->paths_) desired = std::max(static_cast(kvp.second->desired_batch_size), desired); desired *= 2; auto stored = buffered(); return stored < desired ? desired - stored : 0u; } size_t buffered() const noexcept override { return buf_.size(); } buffer_type& buf() { return buf_; } const buffer_type& buf() const { return buf_; } protected: buffer_type buf_; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/byte_address.hpp000066400000000000000000000112121341123343400230410ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/config.hpp" #include "caf/detail/comparable.hpp" namespace caf { /// Base type for addresses based on a byte representation such as IP or /// Ethernet addresses. template class byte_address : detail::comparable { public: // -- element access --------------------------------------------------------- /// Returns the byte at given index. uint8_t& operator[](size_t index) noexcept { return dref().bytes()[index]; } /// Returns the byte at given index. const uint8_t& operator[](size_t index) const noexcept { return dref().bytes()[index]; } // -- properties ------------------------------------------------------------- /// Returns the number of bytes of the address. size_t size() const noexcept { return dref().bytes().size(); } // -- comparison ------------------------------------------------------------- /// Returns a negative number if `*this < other`, zero if `*this == other` /// and a positive number if `*this > other`. int compare(const Derived& other) const noexcept { auto& buf = dref().bytes(); return memcmp(buf.data(), other.bytes().data(), Derived::num_bytes); } // -- transformations -------------------------------------------------------- Derived network_address(size_t prefix_length) const noexcept { static constexpr uint8_t netmask_tbl[] = {0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE}; prefix_length = std::min(prefix_length, Derived::num_bytes * 8); Derived netmask; auto bytes_to_keep = prefix_length / 8; auto remainder = prefix_length % 8; size_t i = 0; for (; i < bytes_to_keep; ++i) netmask[i] = 0xFF; if (remainder != 0) netmask[i] = netmask_tbl[remainder]; Derived result{dref()}; result &= netmask; return result; } // -- bitwise member operators ----------------------------------------------- /// Bitwise ANDs `*this` and `other`. Derived& operator&=(const Derived& other) { auto& buf = dref().bytes(); for (size_t index = 0; index < Derived::num_bytes; ++index) buf[index] &= other[index]; return dref(); } /// Bitwise ORs `*this` and `other`. Derived& operator|=(const Derived& other) { auto& buf = dref().bytes(); for (size_t index = 0; index < Derived::num_bytes; ++index) buf[index] |= other[index]; return dref(); } /// Bitwise XORs `*this` and `other`. Derived& operator^=(const Derived& other) { auto& buf = dref().bytes(); for (size_t index = 0; index < Derived::num_bytes; ++index) buf[index] ^= other[index]; return dref(); } // -- bitwise free operators ------------------------------------------------- friend Derived operator&(const Derived& x, const Derived& y) { Derived result{x}; result &= y; return result; } friend Derived operator|(const Derived& x, const Derived& y) { Derived result{x}; result |= y; return result; } friend Derived operator^(const Derived& x, const Derived& y) { Derived result{x}; result ^= y; return result; } private: Derived& dref() noexcept { return *static_cast(this); } const Derived& dref() const noexcept { return *static_cast(this); } }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/callback.hpp000066400000000000000000000060751341123343400221400ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/error.hpp" #include "caf/config.hpp" #include "caf/detail/type_traits.hpp" // The class `callback` intentionally has no virtual destructor, because // the lifetime of callback objects is never managed via base pointers. CAF_PUSH_NON_VIRTUAL_DTOR_WARNING namespace caf { /// Describes a simple callback, usually implemented via lambda expression. /// Callbacks are used as "type-safe function objects" wherever an interface /// requires dynamic dispatching. The alternative would be to store the lambda /// in a `std::function`, which adds another layer of indirection and /// requires a heap allocation. With the callback implementation of CAF, /// the object remains on the stack and does not cause more overhead /// than necessary. template class callback { public: virtual error operator()(Ts...) = 0; }; /// Utility class for wrapping a function object of type `Base`. template class callback_impl : public callback { public: callback_impl(F&& f) : f_(std::move(f)) { // nop } callback_impl(callback_impl&&) = default; callback_impl& operator=(callback_impl&&) = default; error operator()(Ts... xs) override { return f_(xs...); } private: F f_; }; /// Utility class for selecting a `callback_impl`. template ::arg_types> struct select_callback; template struct select_callback> { using type = callback_impl; }; /// Creates a callback from a lambda expression. /// @relates callback template typename select_callback::type make_callback(F fun) { return {std::move(fun)}; } } // namespace caf CAF_POP_WARNINGS actor-framework-0.16.3/libcaf_core/caf/catch_all.hpp000066400000000000000000000042141341123343400223070ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/result.hpp" #include "caf/message.hpp" #include "caf/message_view.hpp" namespace caf { template struct catch_all { using fun_type = std::function (message_view&)>; F handler; catch_all(catch_all&& x) : handler(std::move(x.handler)) { // nop } template catch_all(T&& x) : handler(std::forward(x)) { // nop } static_assert(std::is_convertible::value, "catch-all handler must have signature " "result (message_view&)"); fun_type lift() const { return handler; } }; template struct is_catch_all : std::false_type {}; template struct is_catch_all> : std::true_type {}; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/check_typed_input.hpp000066400000000000000000000044031341123343400240760ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/fwd.hpp" #include "caf/replies_to.hpp" #include "caf/detail/type_list.hpp" namespace caf { template struct output_types_of { // nop }; template struct output_types_of> { using type = Out; }; template struct signatures_of { using type = typename std::remove_pointer::type::signatures; }; template using signatures_of_t = typename signatures_of::type; template constexpr bool statically_typed() { return !std::is_same< none_t, typename std::remove_pointer::type::signatures >::value; } template struct is_void_response : std::false_type {}; template <> struct is_void_response> : std::true_type {}; // true for the purpose of type checking performed by send() template <> struct is_void_response : std::true_type {}; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/composable_behavior.hpp000066400000000000000000000070521341123343400244030ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/param.hpp" #include "caf/behavior.hpp" #include "caf/replies_to.hpp" #include "caf/typed_actor.hpp" #include "caf/typed_actor_pointer.hpp" #include "caf/abstract_composable_behavior.hpp" namespace caf { /// Generates an interface class that provides `operator()`. The signature /// of the apply operator is derived from the typed message passing interface /// `MPI`. template class composable_behavior_base; template class composable_behavior_base, output_tuple>> { public: virtual ~composable_behavior_base() noexcept { // nop } virtual result operator()(param_t...) = 0; // C++14 and later # if __cplusplus > 201103L auto make_callback() { return [=](param_t... xs) { return (*this)(std::move(xs)...); }; } # else // C++11 std::function (param_t...)> make_callback() { return [=](param_t... xs) { return (*this)(std::move(xs)...); }; } # endif }; /// Base type for composable actor states. template class composable_behavior; template class composable_behavior> : virtual public abstract_composable_behavior, public composable_behavior_base... { public: using signatures = detail::type_list; using handle_type = typename detail::tl_apply< signatures, typed_actor >::type; using actor_base = typename handle_type::base; using broker_base = typename handle_type::broker_base; using behavior_type = typename handle_type::behavior_type; composable_behavior() : self(nullptr) { // nop } template unit_t init_selfptr(SelfPointer x) { CAF_ASSERT(x != nullptr); self = x; return unit; } void init_behavior(message_handler& x) override { init_behavior_impl(x); } unit_t init_behavior_impl(message_handler& x) { if (x) x = x.or_else(composable_behavior_base::make_callback()...); else x.assign(composable_behavior_base::make_callback()...); return unit; } typed_actor_pointer self; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/composable_behavior_based_actor.hpp000066400000000000000000000043751341123343400267360ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/stateful_actor.hpp" #include "caf/message_handler.hpp" namespace caf { /// Implementation class for spawning composable states directly as actors. template class composable_behavior_based_actor : public stateful_actor { public: static_assert(!std::is_abstract::value, "State is abstract, please make sure to override all " "virtual operator() member functions"); using super = stateful_actor; composable_behavior_based_actor(actor_config& cfg) : super(cfg) { // nop } using behavior_type = typename State::behavior_type; behavior_type make_behavior() override { this->state.init_selfptr(this); message_handler tmp; this->state.init_behavior(tmp); return behavior_type{typename behavior_type::unsafe_init{}, std::move(tmp)}; } }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/composed_behavior.hpp000066400000000000000000000047531341123343400240750ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/param.hpp" #include "caf/composable_behavior.hpp" #include "caf/typed_actor_pointer.hpp" namespace caf { template class composed_behavior : public Ts... { public: using signatures = typename detail::tl_union::type; using handle_type = typename detail::tl_apply< signatures, typed_actor >::type; using behavior_type = typename handle_type::behavior_type; using actor_base = typename handle_type::base; using broker_base = typename handle_type::broker_base; using self_pointer = typename detail::tl_apply< signatures, typed_actor_pointer >::type; composed_behavior() : self(nullptr) { // nop } template unit_t init_selfptr(SelfPointer x) { CAF_ASSERT(x != nullptr); self = x; return unit(static_cast(this)->init_selfptr(x)...); } void init_behavior(message_handler& x) override { init_behavior_impl(x); } unit_t init_behavior_impl(message_handler& x) { return unit(static_cast(this)->init_behavior_impl(x)...); } protected: self_pointer self; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/composed_type.hpp000066400000000000000000000147651341123343400232630ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/fwd.hpp" #include "caf/replies_to.hpp" #include "caf/detail/type_list.hpp" namespace caf { /// Computes the type for f*g (actor composition). /// /// ~~~ /// let output_type x = case x of Stream y -> y ; Single y -> y /// /// let propagate_stream from to = case from of /// Stream _ -> Stream (output_type to) /// Single _ -> to /// let composed_type f g = /// [(fst x, propagate_stream (snd x) (snd y)) | x <- g, y <- f, /// output_type (snd x) == fst y] /// ~~~ /// /// This class implements the list comprehension above in a /// single shot with worst case n*m template instantiations using an /// inner and outer loop, where n is the size /// of Xs and m the size of Ys. Zs is a helper that models the /// "inner loop variable" for generating the cross product of Xs and Ys. /// The helper function propagate_stream is integrated into the loop with /// four cases for the matching case. Rs collects the results. template struct composed_type; // end of outer loop over Xs template struct composed_type, Ys, Zs, detail::type_list> { using type = typed_actor; }; // end of inner loop Ys (Zs) template struct composed_type, Ys, detail::type_list<>, Rs> : composed_type, Ys, Ys, Rs> {}; // case #1 template struct composed_type, output_tuple>, Xs...>, Ys, detail::type_list, output_tuple>, Zs...>, detail::type_list> : composed_type, Ys, Ys, detail::type_list, output_tuple>>> {}; // case #2 template struct composed_type, output_tuple>, Xs...>, Ys, detail::type_list, output_stream>, Zs...>, detail::type_list> : composed_type, Ys, Ys, detail::type_list, output_stream>>> { }; // case #3 template struct composed_type, output_stream>, Xs...>, Ys, detail::type_list, output_tuple>, Zs...>, detail::type_list> : composed_type, Ys, Ys, detail::type_list, output_stream>>> { }; // case #4 template struct composed_type, output_stream>, Xs...>, Ys, detail::type_list, output_stream>, Zs...>, detail::type_list> : composed_type, Ys, Ys, detail::type_list, output_stream>>> { }; // default case (recurse over Zs) template struct composed_type, Xs...>, Ys, detail::type_list, Zs...>, Rs> : composed_type, Xs...>, Ys, detail::type_list, Rs> {}; /// Convenience type alias. /// @relates composed_type template using composed_type_t = typename composed_type>::type; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/config.hpp000066400000000000000000000310621341123343400216430ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once // this header must be generated by the build system (may be empty) #include "caf/detail/build_config.hpp" // Platform-specific adjustments. #define CAF_CACHE_LINE_SIZE 64 // Config pararameters defined by the build system (usually CMake): // // CAF_ENABLE_RUNTIME_CHECKS: // - check requirements at runtime // // CAF_LOG_LEVEL: // - denotes the amount of logging, ranging from error messages only (0) // to complete traces (4) /// Denotes version of CAF in the format {MAJOR}{MINOR}{PATCH}, /// whereas each number is a two-digit decimal number without /// leading zeros (e.g. 900 is version 0.9.0). #define CAF_VERSION 1603 /// Defined to the major version number of CAF. #define CAF_MAJOR_VERSION (CAF_VERSION / 10000) /// Defined to the minor version number of CAF. #define CAF_MINOR_VERSION ((CAF_VERSION / 100) % 100) /// Defined to the patch version number of CAF. #define CAF_PATCH_VERSION (CAF_VERSION % 100) // This compiler-specific block defines: // - CAF_DEPRECATED to annotate deprecated functions // - CAF_PUSH_WARNINGS/CAF_POP_WARNINGS to surround "noisy" header includes // - CAF_ANNOTATE_FALLTHROUGH to suppress warnings in switch/case statements // - CAF_COMPILER_VERSION to retrieve the compiler version in CAF_VERSION format // - One of the following: // + CAF_CLANG // + CAF_GCC // + CAF_MSVC // sets CAF_DEPRECATED, CAF_ANNOTATE_FALLTHROUGH, // CAF_PUSH_WARNINGS and CAF_POP_WARNINGS #if defined(__clang__) # define CAF_CLANG # define CAF_LIKELY(x) __builtin_expect((x), 1) # define CAF_UNLIKELY(x) __builtin_expect((x), 0) # define CAF_DEPRECATED __attribute__((deprecated)) # define CAF_DEPRECATED_MSG(msg) __attribute__((deprecated(msg))) # define CAF_PUSH_WARNINGS \ _Pragma("clang diagnostic push") \ _Pragma("clang diagnostic ignored \"-Wall\"") \ _Pragma("clang diagnostic ignored \"-Wextra\"") \ _Pragma("clang diagnostic ignored \"-Wundef\"") \ _Pragma("clang diagnostic ignored \"-Wshadow\"") \ _Pragma("clang diagnostic ignored \"-Wdeprecated\"") \ _Pragma("clang diagnostic ignored \"-Wextra-semi\"") \ _Pragma("clang diagnostic ignored \"-Wconversion\"") \ _Pragma("clang diagnostic ignored \"-Wcast-align\"") \ _Pragma("clang diagnostic ignored \"-Wfloat-equal\"") \ _Pragma("clang diagnostic ignored \"-Wswitch-enum\"") \ _Pragma("clang diagnostic ignored \"-Wweak-vtables\"") \ _Pragma("clang diagnostic ignored \"-Wdocumentation\"") \ _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ _Pragma("clang diagnostic ignored \"-Wsign-conversion\"") \ _Pragma("clang diagnostic ignored \"-Wunused-template\"") \ _Pragma("clang diagnostic ignored \"-Wshorten-64-to-32\"") \ _Pragma("clang diagnostic ignored \"-Wunreachable-code\"") \ _Pragma("clang diagnostic ignored \"-Wdouble-promotion\"") \ _Pragma("clang diagnostic ignored \"-Wc++14-extensions\"") \ _Pragma("clang diagnostic ignored \"-Wunused-parameter\"") \ _Pragma("clang diagnostic ignored \"-Wnested-anon-types\"") \ _Pragma("clang diagnostic ignored \"-Wreserved-id-macro\"") \ _Pragma("clang diagnostic ignored \"-Wconstant-conversion\"") \ _Pragma("clang diagnostic ignored \"-Wimplicit-fallthrough\"") \ _Pragma("clang diagnostic ignored \"-Wused-but-marked-unused\"") \ _Pragma("clang diagnostic ignored \"-Wdisabled-macro-expansion\"") # define CAF_PUSH_UNUSED_LABEL_WARNING \ _Pragma("clang diagnostic push") \ _Pragma("clang diagnostic ignored \"-Wunused-label\"") # define CAF_PUSH_NON_VIRTUAL_DTOR_WARNING \ _Pragma("clang diagnostic push") \ _Pragma("clang diagnostic ignored \"-Wnon-virtual-dtor\"") # define CAF_PUSH_DEPRECATED_WARNING \ _Pragma("clang diagnostic push") \ _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") # define CAF_POP_WARNINGS \ _Pragma("clang diagnostic pop") # define CAF_ANNOTATE_FALLTHROUGH [[clang::fallthrough]] # define CAF_COMPILER_VERSION \ (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) # if !__has_feature(cxx_thread_local) # define CAF_NO_THREAD_LOCAL # endif #elif defined(__GNUC__) # define CAF_GCC # define CAF_LIKELY(x) __builtin_expect((x), 1) # define CAF_UNLIKELY(x) __builtin_expect((x), 0) # define CAF_DEPRECATED __attribute__((deprecated)) # define CAF_DEPRECATED_MSG(msg) __attribute__((deprecated(msg))) # define CAF_PUSH_WARNINGS \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wshadow\"") \ _Pragma("GCC diagnostic ignored \"-Wpragmas\"") \ _Pragma("GCC diagnostic ignored \"-Wpedantic\"") \ _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") \ _Pragma("GCC diagnostic ignored \"-Wconversion\"") \ _Pragma("GCC diagnostic ignored \"-Wfloat-equal\"") \ _Pragma("GCC diagnostic ignored \"-Wc++14-extensions\"") # define CAF_PUSH_UNUSED_LABEL_WARNING \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wunused-label\"") # define CAF_PUSH_NON_VIRTUAL_DTOR_WARNING \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wnon-virtual-dtor\"") # define CAF_PUSH_DEPRECATED_WARNING \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") # define CAF_POP_WARNINGS \ _Pragma("GCC diagnostic pop") # if __GNUC__ >= 7 # define CAF_ANNOTATE_FALLTHROUGH __attribute__((fallthrough)) # else # define CAF_ANNOTATE_FALLTHROUGH static_cast(0) # endif # define CAF_COMPILER_VERSION \ (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) // disable thread_local on GCC/macOS due to heap-use-after-free bug: // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67135 # ifdef __APPLE__ # define CAF_NO_THREAD_LOCAL # endif #elif defined(_MSC_VER) # define CAF_MSVC # define CAF_LIKELY(x) x # define CAF_UNLIKELY(x) x # define CAF_DEPRECATED # define CAF_DEPRECATED_MSG(msg) # define CAF_PUSH_WARNINGS \ __pragma(warning(push)) # define CAF_PUSH_UNUSED_LABEL_WARNING \ __pragma(warning(push)) \ __pragma(warning(disable: 4102)) # define CAF_PUSH_DEPRECATED_WARNING \ __pragma(warning(push)) # define CAF_PUSH_NON_VIRTUAL_DTOR_WARNING \ __pragma(warning(push)) # define CAF_POP_WARNINGS __pragma(warning(pop)) # define CAF_ANNOTATE_FALLTHROUGH static_cast(0) # define CAF_COMPILER_VERSION _MSC_FULL_VER # pragma warning( disable : 4624 ) # pragma warning( disable : 4800 ) # pragma warning( disable : 4503 ) # ifndef NOMINMAX # define NOMINMAX # endif // NOMINMAX #else # define CAF_LIKELY(x) x # define CAF_UNLIKELY(x) x # define CAF_DEPRECATED # define CAF_PUSH_WARNINGS # define CAF_PUSH_NON_VIRTUAL_DTOR_WARNING # define CAF_PUSH_DEPRECATED_WARNING # define CAF_POP_WARNINGS # define CAF_ANNOTATE_FALLTHROUGH static_cast(0) #endif // This OS-specific block defines one of the following: // - CAF_MACOS // - CAF_LINUX // - CAF_BSD // - CAF_WINDOWS // It also defines CAF_POSIX for POSIX-compatible systems #if defined(__APPLE__) # include "TargetConditionals.h" # if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR # define CAF_IOS # else # define CAF_MACOS # if defined(CAF_GCC) && !defined(_GLIBCXX_HAS_GTHREADS) # define _GLIBCXX_HAS_GTHREADS # endif # endif #elif defined(__ANDROID__) # define CAF_ANDROID #elif defined(__linux__) # define CAF_LINUX # include # if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,16) # define CAF_POLL_IMPL # endif #elif defined(__FreeBSD__) # define CAF_BSD #elif defined(__CYGWIN__) # define CAF_CYGWIN #elif defined(WIN32) || defined(_WIN32) # define CAF_WINDOWS #else # error Platform and/or compiler not supportet #endif #if defined(CAF_MACOS) || defined(CAF_LINUX) || defined(CAF_BSD) || defined(CAF_CYGWIN) # define CAF_POSIX #endif #if defined(CAF_WINDOWS) && defined(CAF_CLANG) // Fix for issue with static_cast<> in objbase.h. // See: https://github.com/philsquared/Catch/issues/690. struct IUnknown; #endif #include #include // Optionally enable CAF_ASSERT #ifndef CAF_ENABLE_RUNTIME_CHECKS # define CAF_ASSERT(unused) static_cast(0) #elif defined(CAF_WINDOWS) || defined(CAF_BSD) # define CAF_ASSERT(stmt) \ if (static_cast(stmt) == false) { \ printf("%s:%u: requirement failed '%s'\n", __FILE__, __LINE__, #stmt); \ ::abort(); \ } static_cast(0) #else // defined(CAF_LINUX) || defined(CAF_MACOS) # include # define CAF_ASSERT(stmt) \ if (static_cast(stmt) == false) { \ printf("%s:%u: requirement failed '%s'\n", __FILE__, __LINE__, #stmt); \ void* array[20]; \ auto caf_bt_size = ::backtrace(array, 20); \ ::backtrace_symbols_fd(array, caf_bt_size, 2); \ ::abort(); \ } static_cast(0) #endif // Convenience macros. #define CAF_IGNORE_UNUSED(x) static_cast(x) #define CAF_CRITICAL(error) \ do { \ fprintf(stderr, "[FATAL] %s:%u: critical error: '%s'\n", \ __FILE__, __LINE__, error); \ ::abort(); \ } while (false) actor-framework-0.16.3/libcaf_core/caf/config_option.hpp000066400000000000000000000103431341123343400232320ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/fwd.hpp" #include "caf/string_view.hpp" namespace caf { /// Defines a configuration option for the application. class config_option { public: // -- member types ----------------------------------------------------------- /// Custom vtable-like struct for delegating to type-specific functions and /// storing type-specific information shared by several config options. struct meta_state { /// Checks whether a value matches the option's type. error (*check)(const config_value&); /// Stores a value in the given location. void (*store)(void*, const config_value&); /// Tries to extrac a value from the given location. Exists for backward /// compatibility only and will get removed with CAF 0.17. config_value (*get)(const void*); /// Human-readable name of the option's type. std::string type_name; }; // -- constructors, destructors, and assignment operators -------------------- /// Constructs a config option. config_option(string_view category, string_view name, string_view description, const meta_state* meta, void* value = nullptr); config_option(const config_option&); config_option(config_option&&) = default; config_option& operator=(const config_option&); config_option& operator=(config_option&&) = default; // -- swap function ---------------------------------------------------------- friend void swap(config_option& first, config_option& second) noexcept; // -- properties ------------------------------------------------------------- /// Returns the category of the option. string_view category() const noexcept; /// Returns the name of the option. string_view long_name() const noexcept; /// Returns (optional) one-letter short names of the option. string_view short_names() const noexcept; /// Returns a human-readable description of the option. string_view description() const noexcept; /// Returns the full name for this config option as ".". string_view full_name() const noexcept; /// Checks whether `x` holds a legal value for this option. error check(const config_value& x) const; /// Stores `x` in this option unless it is stateless. /// @pre `check(x) == none`. void store(const config_value& x) const; /// Returns a human-readable representation of this option's expected type. string_view type_name() const noexcept; /// Returns whether this config option stores a boolean flag. bool is_flag() const noexcept; /// @private // TODO: remove with CAF 0.17 optional get() const; private: string_view buf_slice(size_t from, size_t to) const noexcept; std::unique_ptr buf_; uint16_t category_separator_; uint16_t long_name_separator_; uint16_t short_names_separator_; uint16_t buf_size_; const meta_state* meta_; mutable void* value_; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/config_option_adder.hpp000066400000000000000000000063051341123343400243740ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/config_option.hpp" #include "caf/fwd.hpp" namespace caf { /// Adds config options of the same category to a `config_option_set`. class config_option_adder { public: // -- constructors, destructors, and assignment operators -------------------- config_option_adder(config_option_set& target, string_view category); // -- properties ------------------------------------------------------------- /// Adds a config option to the category that synchronizes with `ref`. template config_option_adder& add(T& ref, string_view name, string_view description) { return add_impl(make_config_option(ref, category_, name, description)); } /// Adds a config option to the category. template config_option_adder& add(string_view name, string_view description) { return add_impl(make_config_option(category_, name, description)); } /// For backward compatibility only. Do not use for new code! /// @private config_option_adder& add_neg(bool& ref, string_view name, string_view description); /// For backward compatibility only. Do not use for new code! /// @private config_option_adder& add_us(size_t& ref, string_view name, string_view description); /// For backward compatibility only. Do not use for new code! /// @private config_option_adder& add_ms(size_t& ref, string_view name, string_view description); private: // -- properties ------------------------------------------------------------- config_option_adder& add_impl(config_option&& opt); // -- member variables ------------------------------------------------------- /// Reference to the target set. config_option_set& xs_; /// Category for all options generated by this adder. string_view category_; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/config_option_set.hpp000066400000000000000000000157211341123343400241120ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include #include #include "caf/config_option.hpp" #include "caf/fwd.hpp" #include "caf/make_config_option.hpp" #include "caf/pec.hpp" #include "caf/string_view.hpp" namespace caf { /// A set of `config_option` objects that parses CLI arguments into a /// `config_value::dictionary`. class config_option_set { public: // -- member types ----------------------------------------------------------- /// An iterator over CLI arguments. using argument_iterator = std::vector::const_iterator; /// The result of `parse` member functions. using parse_result = std::pair; /// List of config options. using option_vector = std::vector; /// Pointer to a config option. using option_pointer = const config_option*; /// An iterator over ::config_option unique pointers. using iterator = option_vector::iterator; /// An iterator over ::config_option unique pointers. using const_iterator = option_vector::const_iterator; /// Maps string keys to arbitrary (config) values. using dictionary = caf::dictionary; /// Categorized settings. using config_map = caf::dictionary; // -- properties ------------------------------------------------------------- /// Returns the first `config_option` that matches the CLI name. /// @param name Config option name formatted as /// `#.`. Users can omit `` /// for options that have an empty prefix and `` /// if the category is "global". option_pointer cli_long_name_lookup(string_view name) const; /// Returns the first `config_option` that matches the CLI short option name. option_pointer cli_short_name_lookup(char short_name) const; /// Returns the first `config_option` that matches category and long name. option_pointer qualified_name_lookup(string_view category, string_view long_name) const; /// Returns the first `config_option` that matches the qualified name. /// @param name Config option name formatted as `.`. option_pointer qualified_name_lookup(string_view name) const; /// Returns the number of stored config options. size_t size() const noexcept { return opts_.size(); } /// Returns the number of stored config options. bool empty() const noexcept { return opts_.empty(); } /// Returns an iterator to the first ::config_option object. iterator begin() noexcept { return opts_.begin(); } /// Returns an iterator to the first ::config_option object. const_iterator begin() const noexcept { return opts_.begin(); } /// Returns the past-the-end iterator. iterator end() noexcept { return opts_.end(); } /// Returns the past-the-end iterator. const_iterator end() const noexcept { return opts_.end(); } /// Adds a config option to the set. template config_option_set& add(string_view category, string_view name, string_view description) & { return add(make_config_option(category, name, description)); } /// Adds a config option to the set. template config_option_set& add(string_view name, string_view description) & { return add(make_config_option("global", name, description)); } /// Adds a config option to the set. template config_option_set&& add(string_view category, string_view name, string_view description) && { return std::move(add(category, name, description)); } /// Adds a config option to the set. template config_option_set&& add(string_view name, string_view description) && { return std::move(add("global", name, description)); } /// Adds a config option to the set that synchronizes its value with `ref`. template config_option_set& add(T& ref, string_view category, string_view name, string_view description) & { return add(make_config_option(ref, category, name, description)); } /// Adds a config option to the set that synchronizes its value with `ref`. template config_option_set& add(T& ref, string_view name, string_view description) & { return add(ref, "global", name, description); } /// Adds a config option to the set that synchronizes its value with `ref`. template config_option_set&& add(T& ref, string_view category, string_view name, string_view description) && { return std::move(add(ref, category, name, description)); } /// Adds a config option to the set that synchronizes its value with `ref`. template config_option_set&& add(T& ref, string_view name, string_view description) && { return std::move(add(ref, "global", name, description)); } /// Adds a config option to the set. config_option_set& add(config_option opt); /// Generates human-readable help text for all options. std::string help_text(bool global_only = true) const; // -- parsing ---------------------------------------------------------------- /// Parses a given range as CLI arguments into `config`. parse_result parse(config_map& config, argument_iterator begin, argument_iterator end) const; /// Parses a given range as CLI arguments into `config`. parse_result parse(config_map& config, const std::vector& args) const; private: // -- member variables ------------------------------------------------------- option_vector opts_; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/config_value.hpp000066400000000000000000000442161341123343400230440ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include #include #include "caf/atom.hpp" #include "caf/detail/bounds_checker.hpp" #include "caf/detail/type_traits.hpp" #include "caf/dictionary.hpp" #include "caf/fwd.hpp" #include "caf/optional.hpp" #include "caf/raise_error.hpp" #include "caf/string_algorithms.hpp" #include "caf/sum_type.hpp" #include "caf/sum_type_access.hpp" #include "caf/sum_type_token.hpp" #include "caf/timestamp.hpp" #include "caf/uri.hpp" #include "caf/variant.hpp" namespace caf { /// A type for config parameters with similar interface to a `variant`. This /// type is not implemented as a simple variant alias because variants cannot /// contain lists of themselves. class config_value { public: // -- member types ----------------------------------------------------------- using integer = int64_t; using boolean = bool; using real = double; using atom = atom_value; using timespan = caf::timespan; using string = std::string; using list = std::vector; using dictionary = caf::dictionary; using types = detail::type_list; using variant_type = detail::tl_apply_t; // -- constructors, destructors, and assignment operators -------------------- config_value() = default; config_value(config_value&& other) = default; config_value(const config_value& other) = default; template , config_value>::value>> explicit config_value(T&& x) { set(std::forward(x)); } config_value& operator=(config_value&& other) = default; config_value& operator=(const config_value& other) = default; template , config_value>::value>> config_value& operator=(T&& x) { set(std::forward(x)); return *this; } ~config_value(); // -- parsing ---------------------------------------------------------------- /// Tries to parse a value from `str`. static expected parse(string_view::iterator first, string_view::iterator last); /// Tries to parse a value from `str`. static expected parse(string_view str); // -- properties ------------------------------------------------------------- /// Converts the value to a list with one element. Does nothing if the value /// already is a list. void convert_to_list(); /// Appends `x` to a list. Converts this config value to a list first by /// calling `convert_to_list` if needed. void append(config_value x); /// Returns a human-readable type name of the current value. const char* type_name() const noexcept; /// Returns the underlying variant. inline variant_type& get_data() { return data_; } /// Returns the underlying variant. inline const variant_type& get_data() const { return data_; } /// Returns a pointer to the underlying variant. inline variant_type* get_data_ptr() { return &data_; } /// Returns a pointer to the underlying variant. inline const variant_type* get_data_ptr() const { return &data_; } private: // -- properties ------------------------------------------------------------- static const char* type_name_at_index(size_t index) noexcept; // -- auto conversion of related types --------------------------------------- inline void set(bool x) { data_ = x; } inline void set(float x) { data_ = static_cast(x); } inline void set(const char* x) { data_ = std::string{x}; } template detail::enable_if_t::value> set(T x) { data_ = std::move(x); } template detail::enable_if_t::value> set(T x) { data_ = static_cast(x); } // -- member variables ------------------------------------------------------- variant_type data_; }; // -- related type aliases ----------------------------------------------------- /// Organizes config values into categories. /// @relates config_value using config_value_map = dictionary; // -- SumType-like access ------------------------------------------------------ /// @relates config_value template struct config_value_access; /// Delegates to config_value_access for all specialized versions. template ::value> struct select_config_value_access { using type = config_value_access; }; /// Catches all non-specialized integer types. template struct select_config_value_access { struct type { static bool is(const config_value& x) { auto ptr = caf::get_if(x.get_data_ptr()); return ptr != nullptr && detail::bounds_checker::check(*ptr); } static optional get_if(const config_value* x) { auto ptr = caf::get_if(x->get_data_ptr()); if (ptr != nullptr && detail::bounds_checker::check(*ptr)) return static_cast(*ptr); return none; } static T get(const config_value& x) { auto res = get_if(&x); CAF_ASSERT(res != none); return *res; } }; }; template using select_config_value_access_t = typename select_config_value_access::type; template <> struct sum_type_access { using types = typename config_value::types; using type0 = typename detail::tl_head::type; static constexpr bool specialized = true; template static bool is(const config_value& x, sum_type_token token) { return x.get_data().is(token.pos); } template static bool is(const config_value& x, sum_type_token) { return select_config_value_access_t::is(x); } template static U& get(config_value& x, sum_type_token token) { return x.get_data().get(token.pos); } template static U get(config_value& x, sum_type_token) { return select_config_value_access_t::get(x); } template static const U& get(const config_value& x, sum_type_token token) { return x.get_data().get(token.pos); } template static U get(const config_value& x, sum_type_token) { return select_config_value_access_t::get(x); } template static U* get_if(config_value* x, sum_type_token token) { return is(*x, token) ? &get(*x, token) : nullptr; } template static optional get_if(config_value* x, sum_type_token) { return select_config_value_access_t::get_if(x); } template static const U* get_if(const config_value* x, sum_type_token token) { return is(*x, token) ? &get(*x, token) : nullptr; } template static optional get_if(const config_value* x, sum_type_token) { return select_config_value_access_t::get_if(x); } template static Result apply(config_value& x, Visitor&& visitor, Ts&&... xs) { return x.get_data().template apply(std::forward(visitor), std::forward(xs)...); } template static Result apply(const config_value& x, Visitor&& visitor, Ts&&... xs) { return x.get_data().template apply(std::forward(visitor), std::forward(xs)...); } }; template <> struct config_value_access { static constexpr bool specialized = true; static bool is(const config_value& x) { return holds_alternative(x.get_data()); } static optional get_if(const config_value* x) { auto res = caf::get_if(&(x->get_data())); if (res) return static_cast(*res); return none; } static float get(const config_value& x) { return static_cast(caf::get(x.get_data())); } }; /// Implements automagic unboxing of `std::vector` from a homogeneous /// `config_value::list`. /// @relates config_value template struct config_value_access> { using vector_type = std::vector; static constexpr bool specialized = true; static bool is(const config_value& x) { auto lst = caf::get_if(&x); if (lst != nullptr) { return std::all_of(lst->begin(), lst->end(), [](const config_value& y) { return caf::holds_alternative(y); }); } return false; } static optional get_if(const config_value* x) { vector_type result; auto extract = [&](const config_value& y) { auto opt = caf::get_if(&y); if (opt) { result.emplace_back(*opt); return true; } return false; }; auto lst = caf::get_if(x); if (lst != nullptr && std::all_of(lst->begin(), lst->end(), extract)) return result; return none; } static vector_type get(const config_value& x) { auto result = get_if(&x); if (!result) CAF_RAISE_ERROR("invalid type found"); return std::move(*result); } }; /// Implements automagic unboxing of `dictionary` from a homogeneous /// `config_value::dictionary`. /// @relates config_value template struct config_value_access> { using map_type = dictionary; using kvp = std::pair; static constexpr bool specialized = true; static bool is(const config_value& x) { auto lst = caf::get_if(&x); if (lst != nullptr) { return std::all_of(lst->begin(), lst->end(), [](const kvp& y) { return holds_alternative(y.second); }); } return false; } static optional get_if(const config_value* x) { map_type result; auto extract = [&](const kvp& y) { auto opt = caf::get_if(&(y.second)); if (opt) { result.emplace(y.first, std::move(*opt)); return true; } return false; }; auto lst = caf::get_if(x); if (lst != nullptr && std::all_of(lst->begin(), lst->end(), extract)) return result; return none; } static map_type get(const config_value& x) { auto result = get_if(&x); if (!result) CAF_RAISE_ERROR("invalid type found"); return std::move(*result); } }; // -- SumType-like access of dictionary values --------------------------------- /// Tries to retrieve the value associated to `name` from `xs`. /// @relates config_value template optional get_if(const config_value::dictionary* xs, string_view name) { // Split the name into a path. std::vector path; split(path, name, "."); // Sanity check. if (path.size() == 0) return none; // Resolve path, i.e., find the requested submap. auto current = xs; auto leaf = path.end() - 1; for (auto i = path.begin(); i != leaf; ++i) { auto j = current->find(*i); if (j == current->end()) return none; current = caf::get_if(&j->second); if (current == nullptr) return none; } // Get the leaf value. auto j = current->find(*leaf); if (j == current->end()) return none; auto result = caf::get_if(&j->second); if (result) return *result; return none; } /// Retrieves the value associated to `name` from `xs`. /// @relates config_value template T get(const config_value::dictionary& xs, string_view name) { auto result = get_if(&xs, name); if (result) return std::move(*result); CAF_RAISE_ERROR("invalid type or name found"); } /// Retrieves the value associated to `name` from `xs` or returns /// `default_value`. /// @relates config_value template ::value>> T get_or(const config_value::dictionary& xs, string_view name, const T& default_value) { auto result = get_if(&xs, name); if (result) return std::move(*result); return default_value; } /// Retrieves the value associated to `name` from `xs` or returns /// `default_value`. /// @relates config_value std::string get_or(const config_value::dictionary& xs, string_view name, const char* default_value); /// Tries to retrieve the value associated to `name` from `xs`. /// @relates config_value template optional get_if(const config_value_map* xs, string_view name) { // Get the category. auto pos = name.find('.'); if (pos == std::string::npos) { auto i = xs->find("global"); if (i == xs->end()) return none; return get_if(&i->second, name); } auto i = xs->find(name.substr(0, pos)); if (i == xs->end()) return none; return get_if(&i->second, name.substr(pos + 1)); } /// Retrieves the value associated to `name` from `xs`. /// @relates config_value template T get(const config_value_map& xs, string_view name) { auto result = get_if(&xs, name); if (result) return std::move(*result); CAF_RAISE_ERROR("invalid type or name found"); } /// Retrieves the value associated to `name` from `xs` or returns /// `default_value`. /// @relates config_value template ::value>> T get_or(const config_value_map& xs, string_view name, const T& default_value) { auto result = get_if(&xs, name); if (result) return std::move(*result); return default_value; } /// Retrieves the value associated to `name` from `xs` or returns /// `default_value`. /// @relates config_value std::string get_or(const config_value_map& xs, string_view name, const char* default_value); /// Tries to retrieve the value associated to `name` from `cfg`. /// @relates config_value template optional get_if(const actor_system_config* cfg, string_view name) { return get_if(&content(*cfg), name); } /// Retrieves the value associated to `name` from `cfg`. /// @relates config_value template T get(const actor_system_config& cfg, string_view name) { return get(content(cfg), name); } /// Retrieves the value associated to `name` from `cfg` or returns /// `default_value`. /// @relates config_value template ::value>> T get_or(const actor_system_config& cfg, string_view name, const T& default_value) { return get_or(content(cfg), name, default_value); } std::string get_or(const actor_system_config& cfg, string_view name, const char* default_value); /// @private void put_impl(config_value::dictionary& dict, const std::vector& path, config_value& value); /// @private void put_impl(config_value::dictionary& dict, string_view key, config_value& value); /// @private void put_impl(dictionary& dict, string_view key, config_value& value); /// Converts `value` to a `config_value` and assigns it to `key`. /// @param dict Dictionary of key-value pairs. /// @param key Human-readable nested keys in the form `category.key`. /// @param value New value for given `key`. template void put(dictionary& dict, string_view key, T&& value) { config_value tmp{std::forward(value)}; put_impl(dict, key, tmp); } /// Inserts a new list named `name` into the dictionary `xs` and returns /// a reference to it. Overrides existing entries with the same name. config_value::list& put_list(config_value::dictionary& xs, std::string name); /// Inserts a new list named `name` into the dictionary `xs` and returns /// a reference to it. Overrides existing entries with the same name. config_value::dictionary& put_dictionary(config_value::dictionary& xs, std::string name); /// @relates config_value bool operator<(const config_value& x, const config_value& y); /// @relates config_value bool operator==(const config_value& x, const config_value& y); /// @relates config_value inline bool operator>=(const config_value& x, const config_value& y) { return !(x < y); } /// @relates config_value inline bool operator!=(const config_value& x, const config_value& y) { return !(x == y); } /// @relates config_value std::string to_string(const config_value& x); template config_value make_config_value_list(Ts&&... xs) { std::vector lst{config_value{std::forward(xs)}...}; return config_value{std::move(lst)}; } /// @relates config_value template typename Inspector::result_type inspect(Inspector& f, config_value& x) { return f(meta::type_name("config_value"), x.get_data()); } } // namespace caf actor-framework-0.16.3/libcaf_core/caf/cow_tuple.hpp000066400000000000000000000104701341123343400223770ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/detail/comparable.hpp" #include "caf/detail/tuple_vals.hpp" #include "caf/make_copy_on_write.hpp" namespace caf { /// A copy-on-write tuple implementation. template class cow_tuple : detail::comparable>, detail::comparable, std::tuple> { public: // -- member types ----------------------------------------------------------- using impl = detail::tuple_vals; using data_type = std::tuple; // -- constructors, destructors, and assignment operators -------------------- explicit cow_tuple(Ts... xs) : ptr_(make_copy_on_write(std::move(xs)...)) { // nop } cow_tuple() : ptr_(make_copy_on_write()) { // nop } cow_tuple(cow_tuple&&) = default; cow_tuple(const cow_tuple&) = default; cow_tuple& operator=(cow_tuple&&) = default; cow_tuple& operator=(const cow_tuple&) = default; // -- properties ------------------------------------------------------------- /// Returns the managed tuple. const data_type& data() const noexcept { return ptr_->data(); } /// Returns a mutable reference to the managed tuple, guaranteed to have a /// reference count of 1. data_type& unshared() { return ptr_.unshared().data(); } /// Returns whether the reference count of the managed object is 1. bool unique() const noexcept { return ptr_->unique(); } /// @private const intrusive_cow_ptr& ptr() const noexcept { return ptr_; } // -- comparison ------------------------------------------------------------- template int compare(const std::tuple& other) const noexcept { return data() < other ? -1 : (data() == other ? 0 : 1); } template int compare(const cow_tuple& other) const noexcept { return compare(other.data()); } private: // -- member variables ------------------------------------------------------- intrusive_cow_ptr ptr_; }; /// @relates cow_tuple template typename std::enable_if::type inspect(Inspector& f, const cow_tuple& x) { return f(x.data()); } /// @relates cow_tuple template typename std::enable_if::type inspect(Inspector& f, cow_tuple& x) { return f(x.unshared()); } /// Creates a new copy-on-write tuple from given arguments. /// @relates cow_tuple template cow_tuple::type...> make_cow_tuple(Ts&&... xs) { return cow_tuple::type...>{std::forward(xs)...}; } /// Convenience function for calling `get(xs.data())`. /// @relates cow_tuple template auto get(const cow_tuple& xs) -> decltype(std::get(xs.data())) { return std::get(xs.data()); } } // namespace caf actor-framework-0.16.3/libcaf_core/caf/data_processor.hpp000066400000000000000000000417421341123343400234140ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include // size_t #include #include #include "caf/fwd.hpp" #include "caf/atom.hpp" #include "caf/error.hpp" #include "caf/timestamp.hpp" #include "caf/allowed_unsafe_message_type.hpp" #include "caf/meta/annotation.hpp" #include "caf/meta/save_callback.hpp" #include "caf/meta/load_callback.hpp" #include "caf/detail/type_list.hpp" #include "caf/detail/apply_args.hpp" #include "caf/detail/delegate_serialize.hpp" #include "caf/detail/select_integer_type.hpp" namespace caf { /// A data processor translates an object into a format that can be /// stored or vice versa. A data processor can be either in saving /// or loading mode. template class data_processor { public: // -- member types ----------------------------------------------------------- /// Return type for `operator()`. using result_type = error; /// List of builtin types for data processors. using builtin_t = detail::type_list< int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t, float, double, long double, std::string, std::u16string, std::u32string >; /// List of builtin types for data processors as enum. enum builtin { i8_v, u8_v, i16_v, u16_v, i32_v, u32_v, i64_v, u64_v, float_v, double_v, ldouble_v, string8_v, string16_v, string32_v }; // -- constructors, destructors, and assignment operators -------------------- data_processor(const data_processor&) = delete; data_processor& operator=(const data_processor&) = delete; data_processor(execution_unit* ctx = nullptr) : context_(ctx) { // nop } virtual ~data_processor() { // nop } // -- pure virtual functions ------------------------------------------------- /// Begins processing of an object. Saves the type information /// to the underlying storage when in saving mode, otherwise /// extracts them and sets both arguments accordingly. virtual error begin_object(uint16_t& typenr, std::string& name) = 0; /// Ends processing of an object. virtual error end_object() = 0; /// Begins processing of a sequence. Saves the size /// to the underlying storage when in saving mode, otherwise /// sets `num` accordingly. virtual error begin_sequence(size_t& num) = 0; /// Ends processing of a sequence. virtual error end_sequence() = 0; // -- getter ----------------------------------------------------------------- /// Returns the actor system associated to this data processor. execution_unit* context() { return context_; } // -- apply functions -------------------------------------------------------- /// Applies this processor to an arithmetic type. template typename std::enable_if::value, error>::type apply(T& x) { static constexpr auto tlindex = detail::tl_index_of::value; static_assert(tlindex >= 0, "T not recognized as builtin type"); return apply_builtin(static_cast(tlindex), &x); } template typename std::enable_if< std::is_integral::value && !std::is_same::value, error >::type apply(T& x) { using type = typename detail::select_integer_type< static_cast(sizeof(T)) * (std::is_signed::value ? -1 : 1) >::type; static constexpr auto tlindex = detail::tl_index_of::value; static_assert(tlindex >= 0, "T not recognized as builtin type"); return apply_builtin(static_cast(tlindex), &x); } error apply(std::string& x) { return apply_builtin(string8_v, &x); } error apply(std::u16string& x) { return apply_builtin(string16_v, &x); } error apply(std::u32string& x) { return apply_builtin(string32_v, &x); } template static error apply_atom_constant(D& self, atom_constant&) { static_assert(!D::writes_state, "cannot deserialize an atom_constant"); auto x = V; return self.apply(x); } template error apply(atom_constant& x) { return apply_atom_constant(dref(), x); } /// Serializes enums using the underlying type /// if no user-defined serialization is defined. template typename std::enable_if< std::is_enum::value && !detail::has_serialize::value, error >::type apply(T& x) { using underlying = typename std::underlying_type::type; struct { void operator()(T& lhs, underlying& rhs) const { lhs = static_cast(rhs); } void operator()(underlying& lhs, T& rhs) const { lhs = static_cast(rhs); } } assign; underlying tmp; return convert_apply(dref(), x, tmp, assign); } /// Applies this processor to an empty type. template typename std::enable_if< std::is_empty::value && !detail::is_inspectable::value, error >::type apply(T&) { return none; } error apply(bool& x) { struct { void operator()(bool& lhs, uint8_t& rhs) const { lhs = rhs != 0; } void operator()(uint8_t& lhs, bool& rhs) const { lhs = rhs ? 1 : 0; } } assign; uint8_t tmp; return convert_apply(dref(), x, tmp, assign); } // Special case to avoid using 1 byte per bool error apply(std::vector& x) { auto len = x.size(); auto err = begin_sequence(len); if (err || len == 0) return err; struct { size_t len; void operator()(std::vector& lhs, std::vector& rhs) const { lhs.resize(len, false); size_t cpt = 0; for (auto v: rhs) { for (int k = 0; k < 8; ++k) { lhs[cpt] = ((v & (1 << k)) != 0); if (++cpt >= len) return; } } } void operator()(std::vector& lhs, std::vector& rhs) const { size_t k = 0; lhs.resize((rhs.size() - 1) / 8 + 1, 0); for (bool b: rhs) { if (b) lhs[k / 8] |= (1 << (k % 8)); ++k; } } } assign; assign.len = len; std::vector tmp; return convert_apply(dref(), x, tmp, assign); } template error consume_range(T& xs) { for (auto& x : xs) { using value_type = typename std::remove_const< typename std::remove_reference::type >::type; auto e = apply(const_cast(x)); if (e) return e; } return none; } /// Converts each element in `xs` to `U` before calling `apply`. template error consume_range_c(T& xs) { for (U x : xs) { auto e = apply(x); if (e) return e; } return none; } template error fill_range(T& xs, size_t num_elements) { xs.clear(); auto insert_iter = std::inserter(xs, xs.end()); for (size_t i = 0; i < num_elements; ++i) { typename std::remove_const::type x; auto err = apply(x); if (err) return err; *insert_iter++ = std::move(x); } return none; } /// Loads elements from type `U` before inserting to `xs`. template error fill_range_c(T& xs, size_t num_elements) { xs.clear(); auto insert_iter = std::inserter(xs, xs.end()); for (size_t i = 0; i < num_elements; ++i) { U x; auto err = apply(x); if (err) return err; *insert_iter++ = std::move(x); } return none; } // Applies this processor as Derived to `xs` in saving mode. template static typename std::enable_if< D::reads_state && !detail::is_byte_sequence::value, error >::type apply_sequence(D& self, T& xs) { auto s = xs.size(); return error::eval([&] { return self.begin_sequence(s); }, [&] { return self.consume_range(xs); }, [&] { return self.end_sequence(); }); } // Applies this processor as Derived to `xs` in loading mode. template static typename std::enable_if< !D::reads_state && !detail::is_byte_sequence::value, error >::type apply_sequence(D& self, T& xs) { size_t s; return error::eval([&] { return self.begin_sequence(s); }, [&] { return self.fill_range(xs, s); }, [&] { return self.end_sequence(); }); } // Optimized saving for contiguous byte sequences. template static typename std::enable_if< D::reads_state && detail::is_byte_sequence::value, error >::type apply_sequence(D& self, T& xs) { auto s = xs.size(); return error::eval([&] { return self.begin_sequence(s); }, [&] { return s > 0 ? self.apply_raw(xs.size(), &xs[0]) : none; }, [&] { return self.end_sequence(); }); } // Optimized loading for contiguous byte sequences. template static typename std::enable_if< !D::reads_state && detail::is_byte_sequence::value, error >::type apply_sequence(D& self, T& xs) { size_t s; return error::eval([&] { return self.begin_sequence(s); }, [&] { xs.resize(s); return s > 0 ? self.apply_raw(s, &xs[0]) : none; }, [&] { return self.end_sequence(); }); } /// Applies this processor to a sequence of values. template typename std::enable_if< detail::is_iterable::value && !detail::has_serialize::value && !detail::is_inspectable::value, error >::type apply(T& xs) { return apply_sequence(dref(), xs); } /// Applies this processor to an array. template typename std::enable_if::value, error>::type apply(std::array& xs) { return consume_range(xs); } /// Applies this processor to an array. template typename std::enable_if::value, error>::type apply(T (&xs) [S]) { return consume_range(xs); } template typename std::enable_if< detail::is_serializable::type>::value && detail::is_serializable::value, error >::type apply(std::pair& xs) { using t0 = typename std::remove_const::type; // This cast allows the data processor to cope with // `pair` value types used by `std::map`. return error::eval([&] { return apply(const_cast(xs.first)); }, [&] { return apply(xs.second); }); } template typename std::enable_if< detail::conjunction< detail::is_serializable::value... >::value, error >::type apply(std::tuple& xs) { //apply_helper f{*this}; return detail::apply_args(*this, detail::get_indices(xs), xs); } template typename std::enable_if< !std::is_empty::value && detail::has_serialize::value, error >::type apply(T& x) { // throws on error detail::delegate_serialize(dref(), x); return none; } template typename std::enable_if::value, error>::type apply(std::chrono::duration& x) { using duration_type = std::chrono::duration; // always save/store durations as int64_t to work around possibly // different integer types on different plattforms for standard typedefs struct { void operator()(duration_type& lhs, Rep& rhs) const { duration_type tmp{rhs}; lhs = tmp; } void operator()(Rep& lhs, duration_type& rhs) const { lhs = rhs.count(); } } assign; Rep tmp; return convert_apply(dref(), x, tmp, assign); } template typename std::enable_if::value, error>::type apply(std::chrono::duration& x) { using duration_type = std::chrono::duration; // always save/store floating point durations // as doubles for the same reason as above struct { void operator()(duration_type& lhs, double& rhs) const { duration_type tmp{rhs}; lhs = tmp; } void operator()(double& lhs, duration_type& rhs) const { lhs = rhs.count(); } } assign; double tmp; return convert_apply(dref(), x, tmp, assign); } template error apply(std::chrono::time_point& t) { if (Derived::reads_state) { auto dur = t.time_since_epoch(); return apply(dur); } if (Derived::writes_state) { Duration dur{}; auto e = apply(dur); t = std::chrono::time_point{dur}; return e; } } /// Applies this processor to a raw block of data of size `num_bytes`. virtual error apply_raw(size_t num_bytes, void* data) = 0; template typename std::enable_if< detail::is_inspectable::value && !detail::has_serialize::value, decltype(inspect(std::declval(), std::declval())) >::type apply(T& x) { return inspect(dref(), x); } // -- operator() ------------------------------------------------------------- inline error operator()() { return none; } template error operator()(meta::save_callback_t x, Ts&&... xs) { error e; if (Derived::reads_state) e = x.fun(); return e ? e : (*this)(std::forward(xs)...); } template error operator()(meta::load_callback_t x, Ts&&... xs) { error e; if (Derived::writes_state) e = x.fun(); return e ? e : (*this)(std::forward(xs)...); } template error operator()(const meta::annotation&, Ts&&... xs) { return (*this)(std::forward(xs)...); } template typename std::enable_if< is_allowed_unsafe_message_type::value, error >::type operator()(const T&, Ts&&... xs) { return (*this)(std::forward(xs)...); } template typename std::enable_if< !meta::is_annotation::value && !is_allowed_unsafe_message_type::value, error >::type operator()(T&& x, Ts&&... xs) { static_assert(Derived::reads_state || (!std::is_rvalue_reference::value && !std::is_const< typename std::remove_reference::type >::value), "a loading inspector requires mutable lvalue references"); auto e = apply(deconst(x)); return e ? e : (*this)(std::forward(xs)...); } protected: /// Applies this processor to a single builtin value. virtual error apply_builtin(builtin in_out_type, void* in_out) = 0; private: template T& deconst(const T& x) { return const_cast(x); } template static typename std::enable_if::type convert_apply(D& self, T& x, U& storage, F assign) { assign(storage, x); return self.apply(storage); } template static typename std::enable_if::type convert_apply(D& self, T& x, U& storage, F assign) { auto e = self.apply(storage); if (e) return e; assign(x, storage); return none; } // Returns a reference to the derived type. Derived& dref() { return *static_cast(this); } execution_unit* context_; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/decorator/000077500000000000000000000000001341123343400216455ustar00rootroot00000000000000actor-framework-0.16.3/libcaf_core/caf/decorator/sequencer.hpp000066400000000000000000000052101341123343400243460ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/actor_addr.hpp" #include "caf/mailbox_element.hpp" #include "caf/monitorable_actor.hpp" namespace caf { namespace decorator { /// An actor decorator implementing "dot operator"-like compositions, /// i.e., `f.g(x) = f(g(x))`. Composed actors are hidden actors. /// A composed actor exits when either of its constituent actors exits; /// Constituent actors have no dependency on the composed actor /// by default, and exit of a composed actor has no effect on its /// constituent actors. A composed actor is hosted on the same actor /// system and node as `g`, the first actor on the forwarding chain. class sequencer : public monitorable_actor { public: using message_types_set = std::set; sequencer(strong_actor_ptr f, strong_actor_ptr g, message_types_set msg_types); // non-system messages are processed and then forwarded; // system messages are handled and consumed on the spot; // in either case, the processing is done synchronously void enqueue(mailbox_element_ptr what, execution_unit* context) override; message_types_set message_types() const override; protected: void on_cleanup(const error& reason) override; private: strong_actor_ptr f_; strong_actor_ptr g_; message_types_set msg_types_; }; } // namespace decorator } // namespace caf actor-framework-0.16.3/libcaf_core/caf/decorator/splitter.hpp000066400000000000000000000051471341123343400242330ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/actor_addr.hpp" #include "caf/mailbox_element.hpp" #include "caf/monitorable_actor.hpp" namespace caf { namespace decorator { /// An actor decorator implementing "dot operator"-like compositions, /// i.e., `f.g(x) = f(g(x))`. Composed actors are hidden actors. /// A composed actor exits when either of its constituent actors exits; /// Constituent actors have no dependency on the composed actor /// by default, and exit of a composed actor has no effect on its /// constituent actors. A composed actor is hosted on the same actor /// system and node as `g`, the first actor on the forwarding chain. class splitter : public monitorable_actor { public: using message_types_set = std::set; splitter(std::vector workers, message_types_set msg_types); // non-system messages are processed and then forwarded; // system messages are handled and consumed on the spot; // in either case, the processing is done synchronously void enqueue(mailbox_element_ptr what, execution_unit* context) override; message_types_set message_types() const override; private: const size_t num_workers; std::vector workers_; message_types_set msg_types_; }; } // namespace decorator } // namespace caf actor-framework-0.16.3/libcaf_core/caf/deduce_mpi.hpp000066400000000000000000000113061341123343400224730ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/fwd.hpp" #include "caf/param.hpp" #include "caf/expected.hpp" #include "caf/optional.hpp" #include "caf/replies_to.hpp" #include "caf/detail/implicit_conversions.hpp" namespace caf { namespace detail { // dmi = deduce_mpi_implementation template struct dmi; // case #1: function returning a single value template struct dmi { using type = typed_mpi::type...>, output_tuple>>; }; // case #2a: function returning a result<...> template struct dmi (Xs...)> { using type = typed_mpi::type...>, output_tuple...>>; }; // case #2b: function returning a std::tuple<...> template struct dmi (Xs...)> { using type = typed_mpi::type...>, output_tuple...>>; }; // case #2c: function returning a std::tuple<...> template struct dmi (Xs...)> { using type = typed_mpi::type...>, output_tuple...>>; }; // case #2d: function returning a typed_response_promise<...> template struct dmi (Xs...)> { using type = typed_mpi::type...>, output_tuple...>>; }; // case #3: function returning an optional<> template struct dmi (Xs...)> : dmi {}; // case #4: function returning an expected<> template struct dmi (Xs...)> : dmi {}; // case #5: function returning an output_stream<> template struct dmi, P> (Xs...)> : dmi { using type = typed_mpi::type...>, output_tuple, strip_and_convert_t...>>; }; // -- dmfou = deduce_mpi_function_object_unboxing template ::value> struct dmfou; // case #1: const member function pointer template struct dmfou : dmi {}; // case #2: member function pointer template struct dmfou : dmi {}; // case #3: good ol' function template struct dmfou : dmi {}; template struct dmfou : dmfou {}; // this specialization leaves timeout definitions untouched, // later stages such as interface_mismatch need to deal with them later template struct dmfou, true> { using type = timeout_definition; }; template struct dmfou, true> : dmfou {}; } // namespace detail /// Deduces the message passing interface from a function object. template using deduce_mpi_t = typename detail::dmfou::type>::type; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/deep_to_string.hpp000066400000000000000000000047571341123343400234160ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include #include #include #include "caf/atom.hpp" #include "caf/detail/apply_args.hpp" #include "caf/detail/type_traits.hpp" #include "caf/detail/stringification_inspector.hpp" namespace caf { class deep_to_string_t { public: constexpr deep_to_string_t() { // nop } template std::string operator()(Ts&&... xs) const { std::string result; detail::stringification_inspector f{result}; f(std::forward(xs)...); return result; } }; /// Unrolls collections such as vectors/maps, decomposes /// tuples/pairs/arrays, auto-escapes strings and calls /// `to_string` for user-defined types via argument-dependent /// loopkup (ADL). Any user-defined type that does not /// provide a `to_string` is mapped to ``. constexpr deep_to_string_t deep_to_string = deep_to_string_t{}; /// Convenience function for `deep_to_string(std::forward_as_tuple(xs...))`. template std::string deep_to_string_as_tuple(Ts&&... xs) { return deep_to_string(std::forward_as_tuple(std::forward(xs)...)); } } // namespace caf actor-framework-0.16.3/libcaf_core/caf/default_attachable.hpp000066400000000000000000000062111341123343400241700ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/actor_addr.hpp" #include "caf/attachable.hpp" namespace caf { class default_attachable : public attachable { public: enum observe_type { monitor, link }; struct observe_token { actor_addr observer; observe_type type; static constexpr size_t token_type = attachable::token::observer; }; void actor_exited(const error& rsn, execution_unit* host) override; bool matches(const token& what) override; static attachable_ptr make_monitor(actor_addr observed, actor_addr observer, message_priority prio = message_priority::normal) { return attachable_ptr{new default_attachable( std::move(observed), std::move(observer), monitor, prio)}; } static attachable_ptr make_link(actor_addr observed, actor_addr observer) { return attachable_ptr{new default_attachable(std::move(observed), std::move(observer), link)}; } class predicate { public: inline predicate(actor_addr observer, observe_type type) : observer_(std::move(observer)), type_(type) { // nop } inline bool operator()(const attachable_ptr& ptr) const { return ptr->matches(observe_token{observer_, type_}); } private: actor_addr observer_; observe_type type_; }; private: default_attachable(actor_addr observed, actor_addr observer, observe_type type, message_priority prio = message_priority::normal); /// Holds a weak reference to the observed actor. actor_addr observed_; /// Holds a weak reference to the observing actor. actor_addr observer_; /// Defines the type of message we wish to send. observe_type type_; /// Defines the priority for the message. message_priority priority_; }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/default_downstream_manager.hpp000066400000000000000000000046341341123343400257640ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/broadcast_downstream_manager.hpp" #include "caf/stream_source_trait.hpp" #include "caf/stream_stage_trait.hpp" #include "caf/detail/type_traits.hpp" namespace caf { /// Selects a downstream manager implementation based on the signature of /// various handlers. template struct default_downstream_manager { /// The function signature of `F`. using fun_sig = typename detail::get_callable_trait::fun_sig; /// The source trait for `F`. using source_trait = stream_source_trait; /// The stage trait for `F`. using stage_trait = stream_stage_trait; /// The output type as returned by the source or stage trait. using output_type = typename std::conditional< source_trait::valid, typename source_trait::output, typename stage_trait::output >::type; /// The default downstream manager deduced by this trait. using type = broadcast_downstream_manager; }; template using default_downstream_manager_t = typename default_downstream_manager::type; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/default_sum_type_access.hpp000066400000000000000000000061131341123343400252670ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include "caf/detail/type_list.hpp" #include "caf/sum_type_token.hpp" namespace caf { /// Allows specializing the `sum_type_access` trait for any type that simply /// wraps a `variant` and exposes it with a `get_data()` member function. template struct default_sum_type_access { using types = typename T::types; using type0 = typename detail::tl_head::type; static constexpr bool specialized = true; template static bool is(const T& x, sum_type_token token) { return x.get_data().is(token.pos); } template static U& get(T& x, sum_type_token token) { return x.get_data().get(token.pos); } template static const U& get(const T& x, sum_type_token token) { return x.get_data().get(token.pos); } template static U* get_if(T* x, sum_type_token token) { return is(*x, token) ? &get(*x, token) : nullptr; } template static const U* get_if(const T* x, sum_type_token token) { return is(*x, token) ? &get(*x, token) : nullptr; } template static Result apply(T& x, Visitor&& visitor, Ts&&... xs) { return x.get_data().template apply(std::forward(visitor), std::forward(xs)...); } template static Result apply(const T& x, Visitor&& visitor, Ts&&... xs) { return x.get_data().template apply(std::forward(visitor), std::forward(xs)...); } }; } // namespace caf actor-framework-0.16.3/libcaf_core/caf/defaults.hpp000066400000000000000000000056751341123343400222200ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/atom.hpp" #include "caf/timestamp.hpp" // -- hard-coded default values for various CAF options ------------------------ namespace caf { namespace defaults { namespace stream { extern const timespan desired_batch_complexity; extern const timespan max_batch_delay; extern const timespan credit_round_interval; } // namespace streaming namespace scheduler { extern const atom_value policy; extern const char* profiling_output_file; extern const size_t max_threads; extern const size_t max_throughput; extern const timespan profiling_resolution; } // namespace scheduler namespace work_stealing { extern const size_t aggressive_poll_attempts; extern const size_t aggressive_steal_interval; extern const size_t moderate_poll_attempts; extern const size_t moderate_steal_interval; extern const timespan moderate_sleep_duration; extern const size_t relaxed_steal_interval; extern const timespan relaxed_sleep_duration; } // namespace work_stealing namespace logger { extern const char* component_filter; extern const atom_value console; extern const char* console_format; extern const atom_value console_verbosity; extern const char* file_format; extern const char* file_name; extern const atom_value file_verbosity; } // namespace logger namespace middleman { extern const char* app_identifier; extern const atom_value network_backend; extern const size_t max_consecutive_reads; extern const size_t heartbeat_interval; extern const size_t cached_udp_buffers; extern const size_t max_pending_msgs; } // namespace middleman } // namespace defaults } // namespace caf actor-framework-0.16.3/libcaf_core/caf/delegated.hpp000066400000000000000000000032101341123343400223060ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include namespace caf { /// Helper class to indicate that a request has been forwarded. template class delegated { // nop }; template inline bool operator==(const delegated&, const delegated&) { return true; } } // namespace caf actor-framework-0.16.3/libcaf_core/caf/deserializer.hpp000066400000000000000000000051561341123343400230650ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include #include "caf/data_processor.hpp" #include "caf/fwd.hpp" #include "caf/raise_error.hpp" namespace caf { /// @ingroup TypeSystem /// Technology-independent deserialization interface. class deserializer : public data_processor { public: ~deserializer() override; using super = data_processor; static constexpr bool reads_state = false; static constexpr bool writes_state = true; // Boost Serialization compatibility using is_saving = std::false_type; using is_loading = std::true_type; explicit deserializer(actor_system& x); explicit deserializer(execution_unit* x = nullptr); }; template typename std::enable_if< std::is_same< error, decltype(std::declval().apply(std::declval())) >::value >::type operator&(deserializer& source, T& x) { auto e = source.apply(x); if (e) CAF_RAISE_ERROR("error during serialization (using operator&)"); } template typename std::enable_if< std::is_same< error, decltype(std::declval().apply(std::declval())) >::value, deserializer& >::type operator>>(deserializer& source, T& x) { source & x; return source; } } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/000077500000000000000000000000001341123343400211255ustar00rootroot00000000000000actor-framework-0.16.3/libcaf_core/caf/detail/algorithms.hpp000066400000000000000000000114421341123343400240110ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/detail/type_traits.hpp" namespace caf { namespace detail { /// Like `std::for_each`, but for multiple containers and filters elements by /// predicate. /// @pre `x.size() <= y.size()` for each `y` in `xs` template void zip_foreach(F f, Container&& x, Containers&&... xs) { for (size_t i = 0; i < x.size(); ++i) f(x[i], xs[i]...); } /// Like `std::for_each`, but for multiple containers. /// @pre `x.size() <= y.size()` for each `y` in `xs` template void zip_foreach_if(F f, Predicate p, Container&& x, Containers&&... xs) { for (size_t i = 0; i < x.size(); ++i) if (p(x[i], xs[i]...)) f(x[i], xs[i]...); } /// Like `std::accumulate`, but for multiple containers. /// @pre `x.size() <= y.size()` for each `y` in `xs` template T zip_fold(F f, T init, Container&& x, Containers&&... xs) { for (size_t i = 0; i < x.size(); ++i) init = f(init, x[i], xs[i]...); return init; } /// Like `std::accumulate`, but for multiple containers and filters elements by /// predicate. /// @pre `x.size() <= y.size()` for each `y` in `xs` template T zip_fold_if(F f, Predicate p, T init, Container&& x, Containers&&... xs) { for (size_t i = 0; i < x.size(); ++i) if (p(x[i], xs[i]...)) init = f(init, x[i], xs[i]...); return init; } /// Decorates a container of type `T` to appear as container of type `U`. template struct container_view { Container& x; using value_type = typename detail::get_callable_trait::result_type; inline size_t size() const { return x.size(); } value_type operator[](size_t i) { F f; return f(x[i]); } }; /// Returns a container view for `x`. /// @relates container_view template container_view make_container_view(Container& x) { return {x}; } /// Like `std::find`, but takes a range instead of an iterator pair and returns /// a pointer to the found object on success instead of returning an iterator. template typename T::value_type* ptr_find(T& xs, const typename T::value_type& x) { for (auto& y : xs) if (y == x) return &y; return nullptr; } /// Like `std::find`, but takes a range instead of an iterator pair and returns /// a pointer to the found object on success instead of returning an iterator. template const typename T::value_type* ptr_find(const T& xs, const typename T::value_type& x) { for (auto& y : xs) if (y == x) return &y; return nullptr; } /// Like `std::find_if`, but takes a range instead of an iterator pair and /// returns a pointer to the found object on success instead of returning an /// iterator. template typename T::value_type* ptr_find_if(T& xs, Predicate pred) { for (auto& x : xs) if (pred(x)) return &x; return nullptr; } /// Like `std::find_if`, but takes a range instead of an iterator pair and /// returns a pointer to the found object on success instead of returning an /// iterator. template const typename T::value_type* ptr_find_if(const T& xs, Predicate pred) { for (auto& x : xs) if (pred(x)) return &x; return nullptr; } } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/append_hex.hpp000066400000000000000000000030041341123343400237460ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include namespace caf { namespace detail { void append_hex(std::string& result, const uint8_t* xs, size_t n); } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/apply_args.hpp000066400000000000000000000065121341123343400240030ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/detail/int_list.hpp" #include "caf/detail/type_list.hpp" namespace caf { namespace detail { // this utterly useless function works around a bug in Clang that causes // the compiler to reject the trailing return type of apply_args because // "get" is not defined (it's found during ADL) template typename tl_at, Pos>::type get(const type_list&); template auto apply_args(F& f, detail::int_list, Tuple& tup) -> decltype(f(get(tup)...)) { return f(get(tup)...); } template auto apply_moved_args(F& f, detail::int_list, Tuple& tup) -> decltype(f(std::move(get(tup))...)) { return f(std::move(get(tup))...); } template auto apply_args_prefixed(F& f, detail::int_list<>, Tuple&, Ts&&... xs) -> decltype(f(std::forward(xs)...)) { return f(std::forward(xs)...); } template auto apply_args_prefixed(F& f, detail::int_list, Tuple& tup, Ts&&... xs) -> decltype(f(std::forward(xs)..., get(tup)...)) { return f(std::forward(xs)..., get(tup)...); } template auto apply_moved_args_prefixed(F& f, detail::int_list<>, Tuple&, Ts&&... xs) -> decltype(f(std::forward(xs)...)) { return f(std::forward(xs)...); } template auto apply_moved_args_prefixed(F& f, detail::int_list, Tuple& tup, Ts&&... xs) -> decltype(f(std::forward(xs)..., std::move(get(tup))...)) { return f(std::forward(xs)..., std::move(get(tup))...); } template auto apply_args_suffxied(F& f, detail::int_list, Tuple& tup, Ts&&... xs) -> decltype(f(get(tup)..., std::forward(xs)...)) { return f(get(tup)..., std::forward(xs)...); } } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/arg_match_t.hpp000066400000000000000000000027061341123343400241130ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once namespace caf { namespace detail { struct arg_match_t {}; } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/arg_wrapper.hpp000066400000000000000000000056001341123343400241500ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/deep_to_string.hpp" namespace caf { namespace detail { /// Enables automagical string conversion for `CAF_ARG`. template struct single_arg_wrapper { const char* name; const T& value; single_arg_wrapper(const char* x, const T& y) : name(x), value(y) { // nop } }; template std::string to_string(const single_arg_wrapper& x) { std::string result = x.name; result += " = "; result += deep_to_string(x.value); return result; } template struct range_arg_wrapper { const char* name; Iterator first; Iterator last; range_arg_wrapper(const char* x, Iterator begin, Iterator end) : name(x), first(begin), last(end) { // nop } }; template std::string to_string(const range_arg_wrapper& x) { std::string result = x.name; result += " = "; struct dummy { Iterator first; Iterator last; Iterator begin() const { return first; } Iterator end() const { return last; } }; dummy y{x.first, x.last}; result += deep_to_string(y); return result; } /// Used to implement `CAF_ARG`. template single_arg_wrapper make_arg_wrapper(const char* name, const T& value) { return {name, value}; } /// Used to implement `CAF_ARG`. template range_arg_wrapper make_arg_wrapper(const char* name, Iterator first, Iterator last) { return {name, first, last}; } } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/atom_val.hpp000066400000000000000000000054201341123343400234410ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once namespace caf { namespace detail { namespace { // encodes ASCII characters to 6bit encoding constexpr unsigned char encoding_table[] = { /* ..0 ..1 ..2 ..3 ..4 ..5 ..6 ..7 ..8 ..9 ..A ..B ..C ..D ..E ..F */ /* 0.. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1.. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2.. */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 3.. */ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, /* 4.. */ 0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, /* 5.. */ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 0, 0, 0, 0, 37, /* 6.. */ 0, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, /* 7.. */ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 0, 0, 0, 0}; // decodes 6bit characters to ASCII constexpr char decoding_table[] = " 0123456789" "ABCDEFGHIJKLMNOPQRSTUVWXYZ_" "abcdefghijklmnopqrstuvwxyz"; } // namespace constexpr uint64_t next_interim(uint64_t current, size_t char_code) { return (current << 6) | encoding_table[(char_code <= 0x7F) ? char_code : 0]; } constexpr uint64_t atom_val(const char* cstr, uint64_t interim = 0xF) { return (*cstr == '\0') ? interim : atom_val(cstr + 1, next_interim(interim, static_cast(*cstr))); } } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/behavior_impl.hpp000066400000000000000000000153231341123343400244620ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/none.hpp" #include "caf/variant.hpp" #include "caf/optional.hpp" #include "caf/match_case.hpp" #include "caf/make_counted.hpp" #include "caf/intrusive_ptr.hpp" #include "caf/atom.hpp" #include "caf/message.hpp" #include "caf/duration.hpp" #include "caf/ref_counted.hpp" #include "caf/skip.hpp" #include "caf/response_promise.hpp" #include "caf/timeout_definition.hpp" #include "caf/typed_response_promise.hpp" #include "caf/detail/int_list.hpp" #include "caf/detail/apply_args.hpp" #include "caf/detail/type_traits.hpp" #include "caf/detail/tail_argument_token.hpp" #include "caf/detail/invoke_result_visitor.hpp" namespace caf { class message_handler; } // namespace caf namespace caf { namespace detail { class behavior_impl : public ref_counted { public: using pointer = intrusive_ptr; ~behavior_impl() override; behavior_impl(duration tout = duration{}); virtual match_case::result invoke_empty(detail::invoke_result_visitor& f); virtual match_case::result invoke(detail::invoke_result_visitor& f, type_erased_tuple& xs); match_case::result invoke(detail::invoke_result_visitor& f, message& xs); optional invoke(message&); optional invoke(type_erased_tuple&); virtual void handle_timeout(); inline const duration& timeout() const { return timeout_; } pointer or_else(const pointer& other); protected: duration timeout_; match_case_info* begin_; match_case_info* end_; }; template void call_timeout_handler(Tuple& tup, std::true_type) { auto& f = std::get::value - 1>(tup); f.handler(); } template void call_timeout_handler(Tuple&, std::false_type) { // nop } template ::value> struct lift_behavior { using type = trivial_match_case; }; template struct lift_behavior { using type = T; }; template struct with_generic_timeout; template struct with_generic_timeout> { using type = std::tuple; }; template struct with_generic_timeout> { using type = typename tl_apply< typename tl_replace_back< type_list, generic_timeout_definition >::type, std::tuple >::type; }; template class default_behavior_impl; template class default_behavior_impl> : public behavior_impl { public: using tuple_type = std::tuple; using back_type = typename tl_back>::type; static constexpr bool has_timeout = is_timeout_definition::value; static constexpr size_t num_cases = sizeof...(Ts) - (has_timeout ? 1 : 0); using cases = typename std::conditional< has_timeout, typename tl_pop_back>::type, type_list >::type; default_behavior_impl(tuple_type&& tup) : cases_(std::move(tup)) { init(); } template default_behavior_impl(Us&&... xs) : cases_(std::forward(xs)...) { init(); } void handle_timeout() override { std::integral_constant token; call_timeout_handler(cases_, token); } private: void init() { std::integral_constant first; std::integral_constant last; init(first, last); } template void init(std::integral_constant, std::integral_constant) { this->begin_ = arr_.data(); this->end_ = arr_.data() + arr_.size(); std::integral_constant token; set_timeout(token); } template void init(std::integral_constant, std::integral_constant last) { auto& element = std::get(cases_); arr_[First] = match_case_info{element.type_token(), &element}; init(std::integral_constant{}, last); } void set_timeout(std::true_type) { this->timeout_ = std::get(cases_).timeout; } void set_timeout(std::false_type) { // nop } tuple_type cases_; std::array arr_; }; template struct behavior_factory { template typename behavior_impl::pointer operator()(Ts&&... xs) const { return make_counted>(std::forward(xs)...); } }; struct make_behavior_t { constexpr make_behavior_t() { // nop } template intrusive_ptr< default_behavior_impl::type...>>> operator()(Ts... xs) const { using type = default_behavior_impl::type...>>; return make_counted(std::move(xs)...); } }; constexpr make_behavior_t make_behavior = make_behavior_t{}; using behavior_impl_ptr = intrusive_ptr; // utility for getting a type-erased version of make_behavior struct make_behavior_impl_t { constexpr make_behavior_impl_t() { // nop } template behavior_impl_ptr operator()(Ts&&... xs) const { return make_behavior(std::forward(xs)...); } }; constexpr make_behavior_impl_t make_behavior_impl = make_behavior_impl_t{}; } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/behavior_stack.hpp000066400000000000000000000047441341123343400246330ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include #include #include "caf/optional.hpp" #include "caf/config.hpp" #include "caf/behavior.hpp" #include "caf/message_id.hpp" #include "caf/mailbox_element.hpp" namespace caf { namespace detail { struct behavior_stack_mover; class behavior_stack { public: friend struct behavior_stack_mover; behavior_stack(const behavior_stack&) = delete; behavior_stack& operator=(const behavior_stack&) = delete; behavior_stack() = default; // erases the last (asynchronous) behavior void pop_back(); void clear(); inline bool empty() const { return elements_.empty(); } inline behavior& back() { CAF_ASSERT(!empty()); return elements_.back(); } inline void push_back(behavior&& what) { elements_.emplace_back(std::move(what)); } template inline void emplace_back(Ts&&... xs) { elements_.emplace_back(std::forward(xs)...); } inline void cleanup() { erased_elements_.clear(); } private: std::vector elements_; std::vector erased_elements_; }; } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/blocking_behavior.hpp000066400000000000000000000100661341123343400253100ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/behavior.hpp" #include "caf/catch_all.hpp" #include "caf/timeout_definition.hpp" namespace caf { namespace detail { class blocking_behavior { public: behavior& nested; blocking_behavior(behavior& x); blocking_behavior(blocking_behavior&&) = default; virtual ~blocking_behavior(); virtual result fallback(message_view&); virtual duration timeout(); virtual void handle_timeout(); }; template class blocking_behavior_v2 : public blocking_behavior { public: catch_all f; blocking_behavior_v2(behavior& x, catch_all y) : blocking_behavior(x), f(std::move(y)) { // nop } blocking_behavior_v2(blocking_behavior_v2&&) = default; result fallback(message_view& x) override { return f.handler(x); } }; template class blocking_behavior_v3 : public blocking_behavior { public: timeout_definition f; blocking_behavior_v3(behavior& x, timeout_definition y) : blocking_behavior(x), f(std::move(y)) { // nop } blocking_behavior_v3(blocking_behavior_v3&&) = default; duration timeout() override { return f.timeout; } void handle_timeout() override { f.handler(); } }; template class blocking_behavior_v4 : public blocking_behavior { public: catch_all f1; timeout_definition f2; blocking_behavior_v4(behavior& x, catch_all y, timeout_definition z) : blocking_behavior(x), f1(std::move(y)), f2(std::move(z)) { // nop } blocking_behavior_v4(blocking_behavior_v4&&) = default; result fallback(message_view& x) override { return f1.handler(x); } duration timeout() override { return f2.timeout; } void handle_timeout() override { f2.handler(); } }; struct make_blocking_behavior_t { constexpr make_blocking_behavior_t() { // nop } inline blocking_behavior operator()(behavior* x) const { CAF_ASSERT(x != nullptr); return {*x}; } template blocking_behavior_v2 operator()(behavior* x, catch_all y) const { CAF_ASSERT(x != nullptr); return {*x, std::move(y)}; } template blocking_behavior_v3 operator()(behavior* x, timeout_definition y) const { CAF_ASSERT(x != nullptr); return {*x, std::move(y)}; } template blocking_behavior_v4 operator()(behavior* x, catch_all y, timeout_definition z) const { CAF_ASSERT(x != nullptr); return {*x, std::move(y), std::move(z)}; } }; constexpr make_blocking_behavior_t make_blocking_behavior = make_blocking_behavior_t{}; } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/bounds_checker.hpp000066400000000000000000000036351341123343400246230ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include namespace caf { namespace detail { template = sizeof(int64_t) && std::is_unsigned::value> struct bounds_checker { static inline bool check(int64_t x) { return x >= std::numeric_limits::min() && x <= std::numeric_limits::max(); } }; template struct bounds_checker { static inline bool check(int64_t x) { return x >= 0; } }; } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/cas_weak.hpp000066400000000000000000000035231341123343400234160ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/config.hpp" namespace caf { namespace detail { template bool cas_weak(std::atomic* obj, T* expected, T desired) { # if (defined(CAF_CLANG) && CAF_COMPILER_VERSION < 30401) \ || (defined(CAF_GCC) && CAF_COMPILER_VERSION < 40803) return std::atomic_compare_exchange_strong(obj, expected, desired); # else return std::atomic_compare_exchange_weak(obj, expected, desired); # endif } } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/comparable.hpp000066400000000000000000000073601341123343400237510ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once namespace caf { namespace detail { /// Barton–Nackman trick implementation. /// `Subclass` must provide a compare member function that compares /// to instances of `T` and returns an integer x with: /// - `x < 0` if `*this < other` /// - `x > 0` if `*this > other` /// - `x == 0` if `*this == other` template class comparable { friend bool operator==(const Subclass& lhs, const T& rhs) noexcept { return lhs.compare(rhs) == 0; } friend bool operator==(const T& lhs, const Subclass& rhs) noexcept { return rhs.compare(lhs) == 0; } friend bool operator!=(const Subclass& lhs, const T& rhs) noexcept { return lhs.compare(rhs) != 0; } friend bool operator!=(const T& lhs, const Subclass& rhs) noexcept { return rhs.compare(lhs) != 0; } friend bool operator<(const Subclass& lhs, const T& rhs) noexcept { return lhs.compare(rhs) < 0; } friend bool operator>(const Subclass& lhs, const T& rhs) noexcept { return lhs.compare(rhs) > 0; } friend bool operator<(const T& lhs, const Subclass& rhs) noexcept { return rhs > lhs; } friend bool operator>(const T& lhs, const Subclass& rhs) noexcept { return rhs < lhs; } friend bool operator<=(const Subclass& lhs, const T& rhs) noexcept { return lhs.compare(rhs) <= 0; } friend bool operator>=(const Subclass& lhs, const T& rhs) noexcept { return lhs.compare(rhs) >= 0; } friend bool operator<=(const T& lhs, const Subclass& rhs) noexcept { return rhs >= lhs; } friend bool operator>=(const T& lhs, const Subclass& rhs) noexcept { return rhs <= lhs; } }; template class comparable { friend bool operator==(const Subclass& lhs, const Subclass& rhs) noexcept { return lhs.compare(rhs) == 0; } friend bool operator!=(const Subclass& lhs, const Subclass& rhs) noexcept { return lhs.compare(rhs) != 0; } friend bool operator<(const Subclass& lhs, const Subclass& rhs) noexcept { return lhs.compare(rhs) < 0; } friend bool operator<=(const Subclass& lhs, const Subclass& rhs) noexcept { return lhs.compare(rhs) <= 0; } friend bool operator>(const Subclass& lhs, const Subclass& rhs) noexcept { return lhs.compare(rhs) > 0; } friend bool operator>=(const Subclass& lhs, const Subclass& rhs) noexcept { return lhs.compare(rhs) >= 0; } }; } // namespace details } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/concatenated_tuple.hpp000066400000000000000000000062141341123343400255020ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/detail/decorated_tuple.hpp" namespace caf { namespace detail { class concatenated_tuple : public message_data { public: // -- member types ----------------------------------------------------------- using message_data::cow_ptr; using vector_type = std::vector; // -- constructors, destructors, and assignment operators -------------------- concatenated_tuple(std::initializer_list xs); static cow_ptr make(std::initializer_list xs); concatenated_tuple(const concatenated_tuple&) = default; concatenated_tuple& operator=(const concatenated_tuple&) = delete; // -- overridden observers of message_data ----------------------------------- concatenated_tuple* copy() const override; // -- overridden modifiers of type_erased_tuple ------------------------------ void* get_mutable(size_t pos) override; error load(size_t pos, deserializer& source) override; // -- overridden observers of type_erased_tuple ------------------------------ size_t size() const noexcept override; uint32_t type_token() const noexcept override; rtti_pair type(size_t pos) const noexcept override; const void* get(size_t pos) const noexcept override; std::string stringify(size_t pos) const override; type_erased_value_ptr copy(size_t pos) const override; error save(size_t pos, serializer& sink) const override; // -- element access --------------------------------------------------------- std::pair select(size_t pos); std::pair select(size_t pos) const; private: // -- data members ----------------------------------------------------------- vector_type data_; uint32_t type_token_; size_t size_; }; } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/decorated_tuple.hpp000066400000000000000000000065201341123343400250040ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/config.hpp" #include "caf/ref_counted.hpp" #include "caf/detail/type_list.hpp" #include "caf/detail/tuple_vals.hpp" #include "caf/detail/message_data.hpp" namespace caf { namespace detail { class decorated_tuple : public message_data { public: // -- member types ----------------------------------------------------------- using message_data::cow_ptr; using vector_type = std::vector; // -- constructors, destructors, and assignment operators -------------------- decorated_tuple(cow_ptr&&, vector_type&&); static cow_ptr make(cow_ptr d, vector_type v); decorated_tuple& operator=(const decorated_tuple&) = delete; // -- overridden observers of message_data ----------------------------------- message_data* copy() const override; // -- overridden modifiers of type_erased_tuple ------------------------------ void* get_mutable(size_t pos) override; error load(size_t pos, deserializer& source) override; // -- overridden observers of type_erased_tuple ------------------------------ size_t size() const noexcept override; uint32_t type_token() const noexcept override; rtti_pair type(size_t pos) const noexcept override; const void* get(size_t pos) const noexcept override; std::string stringify(size_t pos) const override; type_erased_value_ptr copy(size_t pos) const override; error save(size_t pos, serializer& sink) const override; // -- inline observers ------------------------------------------------------- inline const cow_ptr& decorated() const { return decorated_; } inline const vector_type& mapping() const { return mapping_; } private: // -- constructors, destructors, and assignment operators -------------------- decorated_tuple(const decorated_tuple&) = default; // -- data members ----------------------------------------------------------- cow_ptr decorated_; vector_type mapping_; uint32_t type_token_; }; } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/default_invoke_result_visitor.hpp000066400000000000000000000055021341123343400300140ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/local_actor.hpp" #include "caf/detail/invoke_result_visitor.hpp" namespace caf { namespace detail { template class default_invoke_result_visitor : public invoke_result_visitor { public: inline default_invoke_result_visitor(Self* ptr) : self_(ptr) { // nop } ~default_invoke_result_visitor() override { // nop } void operator()() override { // nop } void operator()(error& x) override { CAF_LOG_TRACE(CAF_ARG(x)); delegate(x); } void operator()(message& x) override { CAF_LOG_TRACE(CAF_ARG(x)); delegate(x); } void operator()(const none_t& x) override { CAF_LOG_TRACE(CAF_ARG(x)); delegate(x); } private: void deliver(response_promise& rp, error& x) { CAF_LOG_DEBUG("report error back to requesting actor"); rp.deliver(std::move(x)); } void deliver(response_promise& rp, message& x) { CAF_LOG_DEBUG("respond via response_promise"); // suppress empty messages for asynchronous messages if (x.empty() && rp.async()) return; rp.deliver(std::move(x)); } void deliver(response_promise& rp, const none_t&) { error err = sec::unexpected_response; deliver(rp, err); } template void delegate(T& x) { auto rp = self_->make_response_promise(); if (!rp.pending()) { CAF_LOG_DEBUG("suppress response message: invalid response promise"); return; } deliver(rp, x); } Self* self_; }; } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/delegate_serialize.hpp000066400000000000000000000054531341123343400254660ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ // The rationale of this header is to provide a serialization API // that is compatbile to boost.serialization. In particular, the // design goals are: // - allow users to integrate existing boost.serialization-based code easily // - allow to switch out this header with the actual boost header in boost.actor // // Differences in semantics are: // - CAF does *not* respect class versions // - the `unsigned int` argument is always 0 and ignored by CAF // // Since CAF requires all runtime instances to have the same types // announced, different class versions in a single actor system would // cause inconsistencies that are not recoverable. #pragma once #include #include #include "caf/detail/type_traits.hpp" namespace boost { namespace serialization { } // namespace serialization } // namespace boost namespace caf { namespace detail { // Calls `serialize(...)` with `using namespace boost::serialization` // to enable both ADL and picking up existing boost code. template auto delegate_serialize(Processor& proc, U& x, const unsigned int y = 0) -> decltype(serialize(proc, x, y)) { using namespace boost::serialization; serialize(proc, x, y); } // Calls `serialize(...)` without the unused version argument, which CAF // ignores anyway. template auto delegate_serialize(Processor& proc, U& x) -> decltype(serialize(proc, x)) { serialize(proc, x); } } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/disposer.hpp000066400000000000000000000034101341123343400234640ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/memory_managed.hpp" namespace caf { namespace detail { class disposer { public: inline void operator()(memory_managed* ptr) const noexcept { ptr->request_deletion(false); } template typename std::enable_if::value>::type operator()(T* ptr) const noexcept { delete ptr; } }; } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/double_ended_queue.hpp000066400000000000000000000157461341123343400254700ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/config.hpp" #include #include #include #include // GCC hack #if defined(CAF_GCC) && !defined(_GLIBCXX_USE_SCHED_YIELD) #include namespace std { namespace this_thread { namespace { inline void yield() noexcept { timespec req; req.tv_sec = 0; req.tv_nsec = 1; nanosleep(&req, nullptr); } } // namespace anonymous> } // namespace this_thread } // namespace std #endif // another GCC hack #if defined(CAF_GCC) && !defined(_GLIBCXX_USE_NANOSLEEP) #include namespace std { namespace this_thread { namespace { template inline void sleep_for(const chrono::duration& rt) { auto sec = chrono::duration_cast(rt); auto nsec = chrono::duration_cast(rt - sec); timespec req; req.tv_sec = sec.count(); req.tv_nsec = nsec.count(); nanosleep(&req, nullptr); } } // namespace anonymous> } // namespace this_thread } // namespace std #endif namespace caf { namespace detail { /* * A thread-safe double-ended queue based on http://drdobbs.com/cpp/211601363. * This implementation is optimized for FIFO, i.e., it supports fast insertion * at the end and fast removal from the beginning. As long as the queue is * only used for FIFO operations, readers do not block writers and vice versa. */ template class double_ended_queue { public: using value_type = T; using size_type = size_t; using difference_type = ptrdiff_t; using reference = value_type&; using const_reference = const value_type&; using pointer = value_type*; using const_pointer = const value_type*; class node { public: pointer value; std::atomic next; explicit node(pointer val) : value(val), next(nullptr) { // nop } private: static constexpr size_type payload_size = sizeof(pointer) + sizeof(std::atomic); static constexpr size_type cline_size = CAF_CACHE_LINE_SIZE; static constexpr size_type pad_size = (cline_size * ((payload_size / cline_size) + 1)) - payload_size; // avoid false sharing static_assert(pad_size > 0, "invalid padding size calculated"); char pad[pad_size]; }; using unique_node_ptr = std::unique_ptr; static_assert(sizeof(node*) < CAF_CACHE_LINE_SIZE, "sizeof(node*) >= CAF_CACHE_LINE_SIZE"); double_ended_queue() { head_lock_.clear(); tail_lock_.clear(); auto ptr = new node(nullptr); head_ = ptr; tail_ = ptr; } ~double_ended_queue() { auto ptr = head_.load(); while (ptr) { unique_node_ptr tmp{ptr}; ptr = tmp->next.load(); } } // acquires only one lock void append(pointer value) { CAF_ASSERT(value != nullptr); auto* tmp = new node(value); lock_guard guard(tail_lock_); // publish & swing last forward tail_.load()->next = tmp; tail_ = tmp; } // acquires both locks void prepend(pointer value) { CAF_ASSERT(value != nullptr); auto* tmp = new node(value); node* first = nullptr; // acquire both locks since we might touch last_ too lock_guard guard1(head_lock_); lock_guard guard2(tail_lock_); first = head_.load(); CAF_ASSERT(first != nullptr); auto next = first->next.load(); // first_ always points to a dummy with no value, // hence we put the new element second if (next) { CAF_ASSERT(first != tail_); tmp->next = next; } else { // queue is empty CAF_ASSERT(first == tail_); tail_ = tmp; } first->next = tmp; } // acquires only one lock, returns nullptr on failure pointer take_head() { unique_node_ptr first; pointer result = nullptr; { // lifetime scope of guard lock_guard guard(head_lock_); first.reset(head_.load()); node* next = first->next; if (next == nullptr) { // queue is empty first.release(); return nullptr; } // take it out of the node & swing first forward result = next->value; next->value = nullptr; head_ = next; } return result; } // acquires both locks, returns nullptr on failure pointer take_tail() { pointer result = nullptr; unique_node_ptr last; { // lifetime scope of guards lock_guard guard1(head_lock_); lock_guard guard2(tail_lock_); CAF_ASSERT(head_ != nullptr); last.reset(tail_.load()); if (last.get() == head_.load()) { last.release(); return nullptr; } result = last->value; tail_ = find_predecessor(last.get()); CAF_ASSERT(tail_ != nullptr); tail_.load()->next = nullptr; } return result; } // does not lock bool empty() const { // atomically compares first and last pointer without locks return head_.load() == tail_.load(); } private: // precondition: *both* locks acquired node* find_predecessor(node* what) { for (auto i = head_.load(); i != nullptr; i = i->next) { if (i->next == what) { return i; } } return nullptr; } // guarded by head_lock_ std::atomic head_; char pad1_[CAF_CACHE_LINE_SIZE - sizeof(node*)]; // guarded by tail_lock_ std::atomic tail_; char pad2_[CAF_CACHE_LINE_SIZE - sizeof(node*)]; // enforce exclusive access std::atomic_flag head_lock_; std::atomic_flag tail_lock_; class lock_guard { public: explicit lock_guard(std::atomic_flag& lock) : lock_(lock) { while (lock.test_and_set(std::memory_order_acquire)) { std::this_thread::yield(); } } ~lock_guard() { lock_.clear(std::memory_order_release); } private: std::atomic_flag& lock_; }; }; } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/dynamic_message_data.hpp000066400000000000000000000063201341123343400257600ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/type_erased_value.hpp" #include "caf/detail/message_data.hpp" namespace caf { namespace detail { class dynamic_message_data : public message_data { public: // -- member types ----------------------------------------------------------- using elements = std::vector; // -- constructors, destructors, and assignment operators -------------------- dynamic_message_data(); dynamic_message_data(elements&& data); dynamic_message_data(const dynamic_message_data& other); ~dynamic_message_data() override; // -- overridden observers of message_data ----------------------------------- dynamic_message_data* copy() const override; // -- overridden modifiers of type_erased_tuple ------------------------------ void* get_mutable(size_t pos) override; error load(size_t pos, deserializer& source) override; // -- overridden observers of type_erased_tuple ------------------------------ size_t size() const noexcept override; uint32_t type_token() const noexcept override; rtti_pair type(size_t pos) const noexcept override; const void* get(size_t pos) const noexcept override; std::string stringify(size_t pos) const override; type_erased_value_ptr copy(size_t pos) const override; error save(size_t pos, serializer& sink) const override; // -- modifiers -------------------------------------------------------------- void clear(); void append(type_erased_value_ptr x); void add_to_type_token(uint16_t typenr); private: // -- data members ----------------------------------------------------------- elements elements_; uint32_t type_token_; }; void intrusive_ptr_add_ref(const dynamic_message_data*); void intrusive_ptr_release(const dynamic_message_data*); dynamic_message_data* intrusive_cow_ptr_unshare(dynamic_message_data*&); } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/embedded.hpp000066400000000000000000000040721341123343400233720ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/ref_counted.hpp" #include "caf/intrusive_ptr.hpp" namespace caf { namespace detail { template class embedded final : public Base { public: template embedded(intrusive_ptr storage, Ts&&... xs) : Base(std::forward(xs)...), storage_(std::move(storage)) { // nop } ~embedded() { // nop } void request_deletion(bool) noexcept override { intrusive_ptr guard; guard.swap(storage_); // this code assumes that embedded is part of pair_storage<>, // i.e., this object lives inside a union! this->~embedded(); } protected: intrusive_ptr storage_; }; } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/enqueue_result.hpp000066400000000000000000000032041341123343400247020ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright (C) 2011 - 2017 * * Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/intrusive/inbox_result.hpp" namespace caf { namespace detail { /// Alias for backwards compatibility. using enqueue_result = intrusive::inbox_result; } // namespace intrusive } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/enum_to_string.hpp000066400000000000000000000034361341123343400247000ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include namespace caf { namespace detail { /// Converts x to its underlying type and fetches the name from the /// lookup table. Assumes consecutive enum values. template const char* enum_to_string(E x, const char* (&lookup_table)[N]) { auto index = static_cast::type>(x); return index < N ? lookup_table[index] : ""; } } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/functor_attachable.hpp000066400000000000000000000047701341123343400254760ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENCE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/attachable.hpp" #include "caf/detail/type_list.hpp" #include "caf/detail/type_traits.hpp" namespace caf { namespace detail { template ::arg_types>::value> struct functor_attachable : attachable { static_assert(Args == 1 || Args == 2, "Only 0, 1 or 2 arguments for F are supported"); F functor_; functor_attachable(F arg) : functor_(std::move(arg)) { // nop } void actor_exited(const error& fail_state, execution_unit*) override { functor_(fail_state); } static constexpr size_t token_type = attachable::token::anonymous; }; template struct functor_attachable : attachable { F functor_; functor_attachable(F arg) : functor_(std::move(arg)) { // nop } void actor_exited(const error& x, execution_unit* y) override { functor_(x, y); } }; template struct functor_attachable : attachable { F functor_; functor_attachable(F arg) : functor_(std::move(arg)) { // nop } void actor_exited(const error&, execution_unit*) override { functor_(); } }; } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/gcd.hpp000066400000000000000000000031661341123343400224010ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright (C) 2011 - 2017 * * Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once namespace caf { namespace detail { template T gcd(T a, T b) { T r; while (b != 0) { r = a % b; a = b; b = r; } return a; } } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/get_mac_addresses.hpp000066400000000000000000000032271341123343400252760ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include namespace caf { namespace detail { using iface_info = std::pair; std::vector get_mac_addresses(); } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/get_process_id.hpp000066400000000000000000000030021341123343400246220ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include namespace caf { namespace detail { unsigned get_process_id(); } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/get_root_uuid.hpp000066400000000000000000000027371341123343400245170ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include namespace caf { namespace detail { std::string get_root_uuid(); } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/ieee_754.hpp000066400000000000000000000120121341123343400231400ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ /******************************************************************************\ * Based on http://beej.us/guide/bgnet/examples/pack2.c * \ ******************************************************************************/ #pragma once #include #include namespace caf { namespace detail { template struct ieee_754_trait; template <> struct ieee_754_trait { static constexpr uint32_t bits = 32; // number of bits static constexpr uint32_t expbits = 8; // bits used for exponent static constexpr float zero = 0.0f; // the value 0 static constexpr float p5 = 0.5f; // the value 0.5 using packed_type = uint32_t; // unsigned integer type using signed_packed_type = int32_t; // signed integer type using float_type = float; // floating point type }; template <> struct ieee_754_trait : ieee_754_trait {}; template <> struct ieee_754_trait { static constexpr uint64_t bits = 64; static constexpr uint64_t expbits = 11; static constexpr double zero = 0.0; static constexpr double p5 = 0.5; using packed_type = uint64_t; using signed_packed_type = int64_t; using float_type = double; }; template <> struct ieee_754_trait : ieee_754_trait {}; template typename ieee_754_trait::packed_type pack754(T f) { using trait = ieee_754_trait; using result_type = typename trait::packed_type; // filter special type if (std::fabs(f) <= trait::zero) { return 0; // only true if f equals +0 or -0 } auto significandbits = trait::bits - trait::expbits - 1; // -1 for sign bit // check sign and begin normalization result_type sign; T fnorm; if (f < 0) { sign = 1; fnorm = -f; } else { sign = 0; fnorm = f; } // get the normalized form of f and track the exponent typename ieee_754_trait::packed_type shift = 0; while (fnorm >= static_cast(2)) { fnorm /= static_cast(2); ++shift; } while (fnorm < static_cast(1)) { fnorm *= static_cast(2); --shift; } fnorm = fnorm - static_cast(1); // calculate 2^significandbits auto pownum = static_cast(result_type{1} << significandbits); // calculate the binary form (non-float) of the significand data auto significand = static_cast(fnorm * (pownum + trait::p5)); // get the biased exponent auto exp = shift + ((1 << (trait::expbits - 1)) - 1); // shift + bias // return the final answer return (sign << (trait::bits - 1)) | (exp << (trait::bits - trait::expbits - 1)) | significand; } template typename ieee_754_trait::float_type unpack754(T i) { using trait = ieee_754_trait; using signed_type = typename trait::signed_packed_type; using result_type = typename trait::float_type; if (i == 0) return trait::zero; auto significandbits = trait::bits - trait::expbits - 1; // -1 for sign bit // pull the significand: mask, convert back to float + add the one back on auto result = static_cast(i & ((T{1} << significandbits) - 1)); result /= static_cast(T{1} << significandbits); result += static_cast(1); // deal with the exponent auto si = static_cast(i); auto bias = (1 << (trait::expbits - 1)) - 1; auto pownum = static_cast(1) << trait::expbits; auto shift = static_cast( ((si >> significandbits) & (pownum - 1)) - bias); while (shift > 0) { result *= static_cast(2); --shift; } while (shift < 0) { result /= static_cast(2); ++shift; } // sign it result *= ((i >> (trait::bits - 1)) & 1) ? -1 : 1; return result; } } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/implicit_conversions.hpp000066400000000000000000000101341341123343400260770ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/fwd.hpp" #include "caf/actor_marker.hpp" #include "caf/detail/type_list.hpp" #include "caf/detail/type_traits.hpp" namespace caf { namespace detail { template ::value, bool IsStat = std::is_base_of::value> struct implicit_actor_conversions { using type = T; }; template struct implicit_actor_conversions { using type = actor; }; template struct implicit_actor_conversions { using type = typename detail::tl_apply< typename T::signatures, typed_actor >::type; }; template <> struct implicit_actor_conversions { using type = strong_actor_ptr; }; template struct implicit_conversions { using type = typename std::conditional< std::is_convertible::value, error, T >::type; }; template struct implicit_conversions : implicit_actor_conversions {}; template <> struct implicit_conversions { using type = std::string; }; template struct implicit_conversions : implicit_conversions {}; template <> struct implicit_conversions : implicit_conversions {}; template struct implicit_conversions : implicit_conversions {}; template <> struct implicit_conversions { using type = std::u16string; }; template struct implicit_conversions : implicit_conversions {}; template <> struct implicit_conversions : implicit_conversions {}; template struct implicit_conversions : implicit_conversions {}; template <> struct implicit_conversions { using type = std::u16string; }; template struct implicit_conversions : implicit_conversions {}; template <> struct implicit_conversions : implicit_conversions {}; template struct implicit_conversions : implicit_conversions {}; template <> struct implicit_conversions { using type = actor; }; template using implicit_conversions_t = typename implicit_conversions::type; template struct strip_and_convert { using type = typename implicit_conversions< typename std::remove_const< typename std::remove_reference< T >::type >::type >::type; }; template using strip_and_convert_t = typename strip_and_convert::type; } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/ini_consumer.hpp000066400000000000000000000145321341123343400243350ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include "caf/config_option_set.hpp" #include "caf/config_value.hpp" #include "caf/dictionary.hpp" namespace caf { namespace detail { class ini_consumer; class ini_list_consumer; class ini_map_consumer; class abstract_ini_consumer { public: // -- constructors, destructors, and assignment operators -------------------- explicit abstract_ini_consumer(abstract_ini_consumer* parent = nullptr); abstract_ini_consumer(const abstract_ini_consumer&) = delete; abstract_ini_consumer& operator=(const abstract_ini_consumer&) = delete; virtual ~abstract_ini_consumer(); // -- properties ------------------------------------------------------------- virtual void value_impl(config_value&& x) = 0; template void value(T&& x) { value_impl(config_value{std::forward(x)}); } inline abstract_ini_consumer* parent() { return parent_; } ini_map_consumer begin_map(); ini_list_consumer begin_list(); protected: // -- member variables ------------------------------------------------------- abstract_ini_consumer* parent_; }; class ini_map_consumer : public abstract_ini_consumer { public: // -- member types ----------------------------------------------------------- using super = abstract_ini_consumer; using map_type = config_value::dictionary; using iterator = map_type::iterator; // -- constructors, destructors, and assignment operators -------------------- ini_map_consumer(abstract_ini_consumer* ptr); ini_map_consumer(ini_map_consumer&& other); ~ini_map_consumer() override; // -- properties ------------------------------------------------------------- void end_map(); void key(std::string name); void value_impl(config_value&& x) override; private: // -- member variables ------------------------------------------------------- map_type xs_; iterator i_; }; class ini_list_consumer : public abstract_ini_consumer { public: // -- member types ----------------------------------------------------------- using super = abstract_ini_consumer; // -- constructors, destructors, and assignment operators -------------------- ini_list_consumer(abstract_ini_consumer* ptr); ini_list_consumer(ini_list_consumer&& other); // -- properties ------------------------------------------------------------- void end_list(); void value_impl(config_value&& x) override; private: // -- member variables ------------------------------------------------------- config_value::list xs_; }; /// Consumes a single value from an INI parser. class ini_value_consumer : public abstract_ini_consumer { public: // -- member types ----------------------------------------------------------- using super = abstract_ini_consumer; // -- constructors, destructors, and assignment operators -------------------- explicit ini_value_consumer(abstract_ini_consumer* parent = nullptr); // -- properties ------------------------------------------------------------- void value_impl(config_value&& x) override; // -- member variables ------------------------------------------------------- config_value result; }; /// Consumes a config category. class ini_category_consumer : public abstract_ini_consumer { public: // -- member types ----------------------------------------------------------- using super = abstract_ini_consumer; // -- constructors, destructors, and assignment operators -------------------- ini_category_consumer(ini_consumer* parent, std::string category); ini_category_consumer(ini_category_consumer&&); // -- properties ------------------------------------------------------------- void end_map(); void key(std::string name); void value_impl(config_value&& x) override; private: // -- properties ------------------------------------------------------------- ini_consumer* dparent(); // -- member variables ------------------------------------------------------- std::string category_; config_value::dictionary xs_; std::string current_key; }; /// Consumes a series of dictionaries forming a application configuration. class ini_consumer : public abstract_ini_consumer { public: // -- friends ---------------------------------------------------------------- friend class ini_category_consumer; // -- member types ----------------------------------------------------------- using super = abstract_ini_consumer; using config_map = dictionary; // -- constructors, destructors, and assignment operators -------------------- ini_consumer(config_option_set& options, config_map& cfg); ini_consumer(ini_consumer&&) = default; // -- properties ------------------------------------------------------------- ini_category_consumer begin_map(); void key(std::string name); void value_impl(config_value&& x) override; private: // -- member variables ------------------------------------------------------- config_option_set& options_; config_map& cfg_; std::string current_key; std::vector warnings_; }; } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/init_fun_factory.hpp000066400000000000000000000101601341123343400251760ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include #include #include "caf/fwd.hpp" #include "caf/detail/apply_args.hpp" #include "caf/detail/spawn_fwd.hpp" #include "caf/detail/type_traits.hpp" namespace caf { namespace detail { template class init_fun_factory_helper { public: init_fun_factory_helper(init_fun_factory_helper&&) = default; init_fun_factory_helper(const init_fun_factory_helper&) = default; init_fun_factory_helper(F fun, ArgsPtr args) : fun_(std::move(fun)), args_(std::move(args)) { // nop } behavior operator()(local_actor* self) { bool_token returns_behavior_token; bool_token captures_self_token; return apply(returns_behavior_token, captures_self_token, self); } private: // behavior (pointer) behavior apply(std::true_type, std::true_type, local_actor* ptr) { auto res = apply_moved_args_prefixed(fun_, get_indices(*args_), *args_, static_cast(ptr)); return std::move(res.unbox()); } // void (pointer) behavior apply(std::false_type, std::true_type, local_actor* ptr) { apply_moved_args_prefixed(fun_, get_indices(*args_), *args_, static_cast(ptr)); return behavior{}; } // behavior () behavior apply(std::true_type, std::false_type, local_actor*) { auto res = apply_args(fun_, get_indices(*args_), *args_); return std::move(res.unbox()); } // void () behavior apply(std::false_type, std::false_type, local_actor*) { apply_args(fun_, get_indices(*args_), *args_); return behavior{}; } F fun_; ArgsPtr args_; }; template class init_fun_factory { public: using fun = std::function; template fun operator()(F f, Ts&&... xs) { static_assert(std::is_base_of::value, "Given Base does not extend local_actor"); using trait = typename detail::get_callable_trait::type; using arg_types = typename trait::arg_types; using res_type = typename trait::result_type; using first_arg = typename detail::tl_head::type; constexpr bool selfptr = std::is_pointer::value; constexpr bool rets = std::is_convertible::value; using tuple_type = decltype(std::make_tuple(detail::spawn_fwd(xs)...)); using tuple_ptr = std::shared_ptr; using helper = init_fun_factory_helper; return helper{std::move(f), sizeof...(Ts) > 0 ? std::make_shared(detail::spawn_fwd(xs)...) : nullptr}; } }; } // namespace detail } // namespace caf actor-framework-0.16.3/libcaf_core/caf/detail/int_list.hpp000066400000000000000000000075641341123343400234770ustar00rootroot00000000000000/****************************************************************************** * ____ _ _____ * * / ___| / \ | ___| C++ * * | | / _ \ | |_ Actor * * | |___ / ___ \| _| Framework * * \____/_/ \_|_| * * * * Copyright 2011-2018 Dominik Charousset * * * * Distributed under the terms and conditions of the BSD 3-Clause License or * * (at your option) under the terms and conditions of the Boost Software * * License 1.0. See accompanying files LICENSE and LICENSE_ALTERNATIVE. * * * * If you did not receive a copy of the license files, see * * http://opensource.org/licenses/BSD-3-Clause and * * http://www.boost.org/LICENSE_1_0.txt. * ******************************************************************************/ #pragma once #include "caf/detail/type_list.hpp" namespace caf { namespace detail { /// A list of integers (wraps a long... template parameter pack). template struct int_list {}; template struct il_right_impl; template struct il_right_impl { using type = int_list<>; }; template struct il_right_impl : il_right_impl { }; template struct il_right_impl { using type = int_list; }; template struct il_right; template struct il_right, N> { using type = typename il_right_impl<(N > sizeof...(Is) ? sizeof...(Is) : N), sizeof...(Is), Is...>::type; }; template struct il_take_impl; template struct il_take_impl { using type = List; }; template struct il_take_impl, I, Is...> { using type = typename il_take_impl, Is...>::type; }; template struct il_take; template struct il_take, N> { using type = typename il_take_impl, Is...>::type; }; /// Creates indices for `List` beginning at `Pos`. template > struct il_indices; template