pax_global_header00006660000000000000000000000064133542217040014513gustar00rootroot0000000000000052 comment=3e6c86305b5062f8cf8f9143a528878f0234a795 astroid-0.14/000077500000000000000000000000001335422170400131045ustar00rootroot00000000000000astroid-0.14/.gitignore000066400000000000000000000003321335422170400150720ustar00rootroot00000000000000# I use vi *.swp *.swo # I use emacs *~ # profiling gmon.out prof.* # various tmp files *.pyc core* \#*\# # generated from tests run in a chroot tmp-* # Common build dirs build/* _build/* compile_commands.json astroid-0.14/CMakeLists.txt000066400000000000000000000350231335422170400156470ustar00rootroot00000000000000## # This MUST be the first line # cmake_minimum_required (VERSION 3.9) ## # project name # project (astroid) ## # don't use obscure build types, but only Debug and Release # set (CMAKE_CONFIGURATION_TYPES Debug Release CACHE TYPE INTERNAL FORCE) message (STATUS "Available config types: ${CMAKE_CONFIGURATION_TYPES}") ## # generate a compile_commands.json file (needed for ninja) # set (CMAKE_EXPORT_COMPILE_COMMANDS ON) ## # make sure the user deliberately selects a build type # if (NOT CMAKE_BUILD_TYPE) message ( WARNING "No CMAKE_BUILD_TYPE value specified, defaulting to Debug." ) set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build." FORCE) else () message ( STATUS "The CMake build type is: ${CMAKE_BUILD_TYPE}" ) endif () ## # where supporting modules live # set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") ## # version number # if (CMAKE_BUILD_TYPE STREQUAL "Debug") # debug build - retrieve current project version from git execute_process ( COMMAND git describe --abbrev=8 --tags --always OUTPUT_VARIABLE PROJECT_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE ) else () # release build - use hard-coded version string set ( PROJECT_VERSION "0.14.0" ) endif () ## # plugin API namespace and version # if(NOT DISABLE_PLUGINS) set (PLUGIN_NAMESPACE "Astroid") set (PLUGIN_API_VERSION "0.2") endif() ## # cmake -D...=ON|OFF command line feature switches and their default values # option (DISABLE_TERMINAL "Disable embedded terminal (default = enabled)" OFF) option (DISABLE_EMBEDDED_EDITOR "Disable embedded editor (default = enabled)" OFF) option (DISABLE_PLUGINS "Disable plugins (default = enabled)" OFF) option (DISABLE_DOCS "Disable generating docs (manpage) (default = enabled)" OFF) option (ENABLE_PROFILING "Enable profiling (default = disabled)" OFF) option (DISABLE_LIBSASS "Disable libsass, requires a sassc compiler (default = enabled)" OFF) option (DEBUG_WEBKIT "Turn on extra debug options for WebKit (default = disabled)" OFF) set (SCSS_COMPILER "sassc" CACHE STRING "SCSS compiler to use when libsass is disabled (default = sassc)") ## # welcome message # message (STATUS "Building ${PROJECT_NAME} ${PROJECT_VERSION}") ## # check for required packages and libraries # find_package( Notmuch REQUIRED ) if (Notmuch_INDEX_FILE_API) add_definitions ( -DHAVE_NOTMUCH_INDEX_FILE ) endif() find_package ( PkgConfig REQUIRED ) pkg_check_modules (GTKMM3 REQUIRED gtkmm-3.0>=3.10) pkg_check_modules (GLIBMM2 REQUIRED glibmm-2.4) pkg_check_modules (WEBKIT2GTK REQUIRED webkit2gtk-4.0>=2.20) pkg_check_modules (SASS REQUIRED libsass) pkg_check_modules (GIOMM2 REQUIRED giomm-2.4) pkg_check_modules (GIOUNIX REQUIRED gio-unix-2.0) string (REGEX REPLACE "([0-9]+\.[0-9]+)\.[0-9]+" "\\1" GMIME_MAJOR_MINOR ${Notmuch_GMIME_VERSION}) pkg_check_modules (GMIME REQUIRED gmime-${GMIME_MAJOR_MINOR}>=${Notmuch_GMIME_VERSION}) find_package ( Threads ) find_package ( Boost REQUIRED COMPONENTS filesystem program_options log_setup log thread date_time system ) find_package (Protobuf 3.0 REQUIRED) set (PROTO_FILES src/modes/thread_view/webextension/messages.proto ) PROTOBUF_GENERATE_CPP (PROTO_SRC PROTO_HDR ${PROTO_FILES}) if(APPLE) # with homebrew, libgettext is keg-only, i.e. not symlinked into # /usr/local, and it does not provide any pkg-config information of # its own; hence we have to locate it manually set ( Gettext_LDFLAGS "-L/usr/local/opt/gettext/lib" ) endif(APPLE) pkg_check_modules (VTE2 vte-2.91) if(DISABLE_TERMINAL OR ( NOT VTE2_FOUND )) add_definitions ( -DDISABLE_VTE ) if(NOT VTE2_FOUND) message (WARNING "Vte library not found.") endif() message (STATUS "Disabling embedded terminal.") endif() ## # compile flags and options # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14") include_directories ( ${GTKMM3_INCLUDE_DIRS} ${GLIBMM2_INCLUDE_DIRS} ${GIOMM2_INCLUDE_DIRS} ${GIOUNIX_INCLUDE_DIRS} ${GMIME_INCLUDE_DIRS} ${WEBKIT2GTK_INCLUDE_DIRS} ${VTE2_INCLUDE_DIRS} ${SASS_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${PROTOBUF_INCLUDE_DIRS} ) add_compile_options ( ${GTKMM3_CFLAGS} ${GLIBMM2_CFLAGS} ${GIOMM2_CFLAGS} ${GIOUNIX_CFLAGS} ${GMIME_CFLAGS} ${WEBKIT2GTK_CFLAGS} ${VTE2_CFLAGS} ${SASS_CFLAGS} ) # # default options # add_compile_options ( -Wall ) add_definitions ( -DBOOST_LOG_DYN_LINK -DBOOST_LOG_USE_NATIVE_SYSLOG ) # # debug builds # if (CMAKE_BUILD_TYPE STREQUAL "Debug") add_compile_options ( -Wextra -g ) add_definitions ( -DDEBUG ) endif () # # release builds # if (CMAKE_BUILD_TYPE STREQUAL "Release") add_compile_options ( -O2 ) endif() if (ENABLE_PROFILING) message (STATUS "Enabling profiling.") add_compile_options ( -pg ) set (CMAKE_EXE_LINKER_FLAGS "-pg") endif() set ( GIT_DESC ${PROJECT_VERSION} ) set ( PREFIX ${CMAKE_INSTALL_PREFIX} ) configure_file ( src/build_config.hh.in src/build_config.hh ) include (CheckIncludeFile) if(NOT DISABLE_LIBSASS) set ( CMAKE_REQUIRED_INCLUDES ${SASS_INCLUDE_DIRS} ) check_include_file (sass_context.h SASSCTX_SASS_CONTEXT_H) check_include_file (sass/context.h SASSCTX_CONTEXT_H) if( SASSCTX_SASS_CONTEXT_H ) add_definitions ( -DSASSCTX_SASS_CONTEXT_H ) elseif( SASSCTX_CONTEXT_H ) add_definitions ( -DSASSCTX_CONTEXT_H ) else() message ( FATAL_ERROR "libsass must be installed: could not find header file. You can disable libsass with -DDISABLE_LIBSASS=ON, however, that requires a SCSS compiler like 'sassc' which can be specified with -DSCSS_COMPILER=." ) endif() else () add_definitions ( -DDISABLE_LIBSASS ) # the css target is defined after astroid target has been defined endif() include_directories ( src/ src/actions src/modes src/modes/editor src/modes/thread_index src/modes/thread_view src/modes/thread_view/webextension src/plugin src/utils src/utils/gmime ${CMAKE_BINARY_DIR}/src # needed to find the generated build_config.hh ${CMAKE_BINARY_DIR} # needed to find protobuf files ) add_library( hypocycloid STATIC src/account_manager.cc src/astroid.cc src/chunk.cc src/command_bar.cc src/compose_message.cc src/config.cc src/crypto.cc src/db.cc src/main_window.cc src/message_thread.cc src/poll.cc src/modes/edit_message.cc src/modes/forward_message.cc src/modes/help_mode.cc src/modes/keybindings.cc src/modes/log_view.cc src/modes/mode.cc src/modes/paned_mode.cc src/modes/raw_message.cc src/modes/reply_message.cc src/modes/saved_searches.cc src/modes/editor/external.cc src/modes/thread_index/query_loader.cc src/modes/thread_index/thread_index.cc src/modes/thread_index/thread_index_list_cell_renderer.cc src/modes/thread_index/thread_index_list_view.cc src/modes/thread_view/theme.cc src/modes/thread_view/thread_view.cc src/modes/thread_view/page_client.cc src/modes/thread_view/webextension/ae_protocol.cc src/modes/thread_view/webextension/dom_utils.cc src/actions/action.cc src/actions/action_manager.cc src/actions/cmdaction.cc src/actions/difftag_action.cc src/actions/onmessage.cc src/actions/tag_action.cc src/actions/toggle_action.cc src/utils/address.cc src/utils/cmd.cc src/utils/date_utils.cc src/utils/gravatar.cc src/utils/resource.cc src/utils/ustring_utils.cc src/utils/utils.cc src/utils/vector_utils.cc src/utils/gmime/gmime-compat.cc src/utils/gmime/gmime-filter-html-bq.c src/utils/gmime/gtrie.c src/utils/gmime/url-scanner.c ${PROTO_SRC} ${PROTO_HDR} ${PROTO_FILES} ) add_executable ( astroid src/main.cc ) target_link_libraries ( astroid hypocycloid ${Notmuch_LIBRARIES} ${WEBKIT2GTK_LDFLAGS} ${GTKMM3_LDFLAGS} ${GLIBMM2_LDFLAGS} ${GIOMM2_LDFLAGS} ${GIOUINX_LDFLAGS} ${GMIME_LDFLAGS} ${VTE2_LDFLAGS} ${SASS_LDFLAGS} ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${Gettext_LDFLAGS} ${PROTOBUF_LIBRARIES} ) ## Build Web Extension add_library ( tvextension SHARED src/modes/thread_view/webextension/tvextension.cc src/modes/thread_view/webextension/ae_protocol.cc src/modes/thread_view/webextension/dom_utils.cc src/utils/ustring_utils.cc ${PROTO_SRC} ${PROTO_HDR} ${PROTO_FILES} ) target_link_libraries ( tvextension ${WEBKIT2GTK_LDFLAGS} ${GLIBMM2_LDFLAGS} ${GIOMM2_LDFLAGS} ${GIOUINX_LDFLAGS} ${CMAKE_THREAD_LIBS_INIT} ${PROTOBUF_LIBRARIES} ${GTKMM3_LDFLAGS} ${Boost_LIBRARIES} ) target_compile_definitions ( tvextension PUBLIC ASTROID_WEBEXTENSION ) add_dependencies (astroid tvextension) # Xcode needs to be explicitly told about the header files in order to # show them in the project and automatically display them in the # assitant editor if(CMAKE_GENERATOR STREQUAL "Xcode") message(STATUS "Xcode build: adding headers to project") file(GLOB_RECURSE my_header_files src/ "*.h" "*.hh") target_sources(hypocycloid PRIVATE ${my_header_files}) endif() ## # conditional compilation based on feature switches # if(DEBUG_WEBKIT) add_definitions ( -DDEBUG_WEBKIT ) message (STATUS "Enabling debug WebKit.") endif() ## # pre-compiled style sheets (instead of dynamic at run-time) # if(DISABLE_LIBSASS) message (STATUS "Generating thread-view.css") add_custom_command ( TARGET astroid COMMAND ${SCSS_COMPILER} ${CMAKE_SOURCE_DIR}/ui/thread-view.scss ${CMAKE_BINARY_DIR}/thread-view.css ) add_custom_command ( TARGET astroid COMMAND ${SCSS_COMPILER} ${CMAKE_SOURCE_DIR}/ui/part.scss ${CMAKE_BINARY_DIR}/part.css ) endif() ## Build man pages if (NOT DISABLE_DOCS) find_program (SCDOC scdoc) # preferred find_program (RONN ronn) if (SCDOC) add_custom_command ( TARGET astroid COMMAND ${SCDOC} < ${CMAKE_SOURCE_DIR}/doc/astroid.1.scd | gzip > ${CMAKE_BINARY_DIR}/astroid.1.gz COMMENT "Generating man page (scdoc)") else () if (RONN) message (WARNING "Falling back to 'ronn' for man page generation.") add_custom_command ( TARGET astroid COMMAND ${RONN} -rp ${CMAKE_SOURCE_DIR}/doc/astroid.1.scd | gzip > ${CMAKE_BINARY_DIR}/astroid.1.gz COMMENT "Generating man page (ronn)") else () message (FATAL_ERROR "Neither 'scdoc' nor 'ronn' installed. One is required for man page generation.") endif() endif() else () message (STATUS "Documentation generation (manpage) disabled.") endif () ## # embedded editor # if(DISABLE_EMBEDDED_EDITOR) add_definitions ( -DDISABLE_EMBEDDED ) message (STATUS "Disabling embedded editor.") else(DISABLE_EMBEDDED_EDITOR) if (APPLE) message (WARNING "Embedded editor cannot be built on macOS; disabling embedded editor.") add_definitions ( -DDISABLE_EMBEDDED ) else(APPLE) target_sources ( hypocycloid PRIVATE src/modes/editor/editor.cc src/modes/editor/plugin.cc ) endif(APPLE) endif(DISABLE_EMBEDDED_EDITOR) ## # plugins # if(DISABLE_PLUGINS) add_definitions ( -DDISABLE_PLUGINS ) message (STATUS "Disabling plugins.") else() if(APPLE) # with homebrew, libffi is keg-only, i.e. not symlinked into # /usr/local; hence we have to tell pkg-config where to look for # it list ( APPEND CMAKE_PREFIX_PATH /usr/local/opt/libffi ) endif() include (FindGObjectIntrospection) # this performs a pkg_check_modules() pkg_check_modules (PEAS libpeas-1.0>=1.0.0) if(INTROSPECTION_FOUND AND PEAS_FOUND) # # GObject introspection # include (GObjectIntrospectionMacros) set (GIR_NAME "${PLUGIN_NAMESPACE}-${PLUGIN_API_VERSION}.gir") set (${GIR_NAME}_NAMESPACE ${PLUGIN_NAMESPACE}) set (${GIR_NAME}_VERSION ${PLUGIN_API_VERSION}) set (${GIR_NAME}_INCLUDEPKGS GObject-2.0 GMime-${GMIME_MAJOR_MINOR}) set (${GIR_NAME}_PROGRAM ${CMAKE_CURRENT_BINARY_DIR}/gir_main) set (${GIR_NAME}_FILES src/plugin/astroid_activatable.c src/plugin/thread_view_activatable.c src/plugin/thread_index_activatable.c src/plugin/astroid_activatable.h src/plugin/thread_view_activatable.h src/plugin/thread_index_activatable.h src/plugin/gir_main.c ) list ( APPEND INTROSPECTION_GIRS ${GIR_NAME} ) set (INTROSPECTION_SCANNER_ARGS --warn-all) gir_add_introspections (INTROSPECTION_GIRS) # magic happens here # # additional source files for astroid (plugin framework) # target_sources ( hypocycloid PRIVATE src/plugin/astroid_activatable.c src/plugin/manager.cc src/plugin/thread_index_activatable.c src/plugin/thread_view_activatable.c ) # # link astroid against libpeas # include_directories ( ${PEAS_INCLUDE_DIRS} ) target_link_libraries ( astroid ${PEAS_LDFLAGS} ) # # build gir_main executable for introspection # add_executable ( gir_main ${${GIR_NAME}_FILES} ) target_link_libraries ( gir_main ${WEBKIT2GTK_LDFLAGS} ${GTKMM3_LDFLAGS} ${PEAS_LDFLAGS} ${INTROSPECTION_LIBS} ${Gettext_LDFAGS} ) # # depenedecies for proper build order # add_dependencies ( gir-typelibs gir_main ) add_dependencies ( astroid gir-typelibs ) else(INTROSPECTION_FOUND AND PEAS_FOUND) add_definitions ( -DDISABLE_PLUGINS ) message (WARNING "Required packages not found; disabling plugins.") endif(INTROSPECTION_FOUND AND PEAS_FOUND) endif(DISABLE_PLUGINS) ## # Installing stuff # install ( TARGETS astroid RUNTIME DESTINATION bin ) install ( TARGETS tvextension DESTINATION lib/astroid/web-extensions ) # Install man page if (NOT DISABLE_DOCS) install ( FILES ${CMAKE_BINARY_DIR}/astroid.1.gz DESTINATION share/man/man1 ) endif () # icons are installed in three locations install (DIRECTORY ui/icons DESTINATION share/astroid/ui ) include (InstallSymbolicLink) install_symlink (../../../../astroid/ui/icons/icon_color.png ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/512x512/apps/astroid.png ) install_symlink (../../../../astroid/ui/icons/icon_color.svg ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps/astroid.svg ) install (FILES ui/astroid.desktop DESTINATION share/applications ) install (FILES ui/thread-view.html ui/edit-message.glade ui/no-mail.png DESTINATION share/astroid/ui ) if(DISABLE_LIBSASS) install (FILES ${CMAKE_BINARY_DIR}/thread-view.css ${CMAKE_BINARY_DIR}/part.css DESTINATION share/astroid/ui ) else() install (FILES ui/thread-view.scss ui/part.scss DESTINATION share/astroid/ui) endif() ## # Tests # enable_testing() add_subdirectory (tests) astroid-0.14/COPYING.GPL-3.0+000066400000000000000000001045051335422170400151360ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. {one line to give the program's name and a brief idea of what it does.} Copyright (C) {year} {name of author} This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: {project} Copyright (C) {year} {fullname} This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . astroid-0.14/COPYING.LGPL-2.1+000066400000000000000000000635351335422170400152610ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. (This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.) Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. {description} Copyright (C) {year} {fullname} This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. {signature of Ty Coon}, 1 April 1990 Ty Coon, President of Vice That's all there is to it! astroid-0.14/History.txt000066400000000000000000000331271335422170400153140ustar00rootroot00000000000000== v0.14 / 2018-09-30 * Use cmark by default as markdown processor. * Respect $NOTMUCH_CONFIG and ignore configuration option if set. Otherwise fall back to option from configuration file. * We now have a man page! Generated either by scdoc or ronn. * Number of bugfixes. == v0.13 / 2018-07-20 * Move to WebKit2 We have now finally moved to WebKit2. This is a big change since the previous functionality had to be moved to a WebExtension running in a separate process. The IPC with the extension is implemented using Google ProtoBufs (>= 3.0) and Unix Domain Sockets. WebKit2 is actively maintained and consequently a long list of CVEs in the old WebKit no longer cause worries. Additionally, each part is shown in separate IFRAMEs so that essentially all received content is sandboxed (some metadata like addresses are escaped and shown in main page). This protects better against EFAIL type attacks (which I believe we were not vulnerable to anyway). Expect some instability while breaking in this new change! Important: Make sure you update your plugins! If they try to use the old WebKit GIO bindings with the new WebKit objects astroid will freeze. Part rendering: * Show parts in IFRAME * Toggle between parts without re-opening * The default part shown (HTML or TEXT) is now configurable * Optionally show HTML part if no other part Images and EFAIL: * Do not allow images in encrypted messages (#499) * Show CID (attached) images in HTML parts (on C-i) * Zoom messages with C-+ and C-- Syntax highlighting: * Syntax highlighting through JS has been replaced by a syntax highlight plugin based on Pygments. * Add filter_part plugin method, which can be used to modify the displayed HTML depending on either the text/plain or the text/html part. Misc: * Logging can be configured to go to syslog (or stdout, default). File logging is removed since we now have multiple processes and this would complicate writing to one file. * The configuration file is no longer written back by default if missing values are found. This also means that values undefined by the user will be updated if the default is changed. Various checks for merging older versions of the configuration file to the current version has been removed. The parser is more resilient and the old versions are old. == v0.12 * `mail.close_on_success` configures if page closes on successful send. * `terminal.font_description` configures font of embedded terminal. * `terminal.height` configures height of embedded terminal. * `mail.format_flowed` is off by default. * Make hooks undoable by providing a field for the inverse command. * Do not force throw-keyid (follow gpg config). * Allow GPG to be disabled with configuration option. == v0.11.1 / 2018-02-20 * Automatically detect GMime version to build against. == v0.11.0 / 2018-02-04 * Move to the CMake build system. Meson is deprecated. * Allow HTML parts to be composed using Markdown. * Use color to indicate whether a message is marked in thread-index. * Always throw key-id when sending (using GMime 3) * Bunch of minor stuff == v0.10.2 / 2017-10-11 * Fix build issues on Mac OS. * Gmime 2 used weird timezone for sent email. * Add Meson build system as alternative. == v0.10.1 / 2017-09-24 * Fix compilation errors against older versions of notmuch and gmime. == v0.10 / 2017-09-21 * Support GMime 3 with backwards compatability with GMime 2. This orients us towards GMime 3, and support for GMime 2 will be dropped in the future. * Attach messages by mids with 'A' in new emails. * Colorful tags in tag editor and in searching * Tags in the tag editor is now separated by spaces (comma still works) * New configuration option 'signature_separate' determines if inline signatures will be separated from the message by a line containing '-- '. * Configurable query associated with account can be used to select account as From: when replying or forwarding e-mail. * Default clipboard target: CLIPBOARD since this is the only one accessible by keyboard in GTK. * Select target for yank operations with '"' * Track focus changes manually == v0.9.1 / 2017-04-30 * Support old vte3. * Support old _st versions on Arch. == v0.9 / 2017-04-28 * Drop use of old deprecated non _st functions, use their new names. Will require 0.24 or newer. * No longer support pre-lastmod notmuches. * Catch missing content errors for messages, not fail. * Wait and block R/O database opening, not fail. * Defer changed_thread events on thread-index while still loading. * Do not update tags in thread-view when not ready. * configuration option thread_view.expand_flagged determines whether flagged messages are expanded by default. * Better handle poll thread. Make sure to clean up connections here and in send_message. * Polling can be cancelled with C-c in main window. * Archive or close thread and then directly open next or next unread thread in originating thread-index. == v0.8 / 2017-03-17 * New logo and icons by Elio Qoshi ( http://patreon.com/ura ) * Run hook for thread-view (Hugo Roy) * Session-persistent folder history for attaching files and saving attachments. default is configurable. * Remove duplicates when reply-all'ing. * Handle mailto when astroid is already running. * `scons --propagate-environment` uses environment from build environment. * Show pane-focus with blue bar at top, swap focus with M-space. The keybinding is now located at 'pane.swap_focus'. * Add optional drop-down terminal ('|') which has session-persistent working directory. Will silently be disabled if VTE is missing. * Delay sending of message with configured time, in order to be able to cancel wrongly sent messages. * New --start-polling, --stop-polling and --refresh LASTMOD options which makes external polling mechanisms work better. * All notmuch tags are added to message CSS with 'nm-' prefix and some sanitation to allow thread-view customizing based on tag. * Reply-To mailing list. * Fix crypto and performance bugs among many others. == v0.7 / 2017-01-02 * Messages are marked unread after a delay (default 2 sec) in thread-view. They can be manually toggled with 'N'. * Edit drafts using an external editor (optional). * Filter thread-index incrementally using 'C-f'. * Use Tab and S-Tab to jump between unread messages in thread-view. * Yank raw or decoded message or element to primary clipboard with 'Y' or 'y', useful for applying patches. * Cancel sending with Ctrl + C. * Yank the Message-ID to the primary clipboard with C-y. * Make id:Message-ID urls clickable. * Make Message-ID customizable, and User-Agent optional. These may also be customized with a plugin. * Use Boost::log for logging. * Some hints about usage are shown (level of detail can be configured) * 'c' in thread-view composes message to sender (or receiver if sender is you). * Taeer Bar-Yam : Allow any key name defined by GDK to be entered. * Thread-view: '*' toggle 'flagged' on message, 'a' toggle inbox on whole thread. * Removed MathJax support, since it is not widely used. Can be enabled manually by adding sourcing the script in the thread-view theme file. * When replying, match encryption / signature level. * Open element with 'Space', also in editor. * Check for missing fields and for attachment words before sending. * Kim Ebert: Make sure all messages are loaded. * M. Dietrich, G. Hope: Fix buggy quoting of arbitrarily spaced '>'s. * Close thread-view after deleting draft. * Hugo Roy: Improve attachment, mime-message, and url display. == v0.6 / 2016-07-23 * Use any editor (general XEmbed support in edit-message window): Emacs works. * Plugins: Python and Lua plugins can now be made, parts of ThreadIndex and ThreadView are exposed allowing extension of the user interface and advanced customization. Check out the plugins available at GitHub. * Crypto: GPG encryption and signing is added. Decryption and signature status is shown in greater detail. * Repository moved to github.com/astroidmail. * Thread-view: Search email text using '/' * Synchronize maildir flags if so configured in .notmuch-config. * Signatures: Include per-account signatures (either included or attached). * Saved searches: Save a search with 'C-S', then browse saved searches and stats with 'C-f'. You can also browse search history using Up and Down in the search-bar. * Colorful tags: Tag background color is calculated based on MD5 sum and normalized to within a configurable range. The same tag will therefore always have the same color. * Thread-index: load all threads in the background. * All actions requiring write-access run in the background and wait for any reads to finish. All read operations need to wait for any ongoing write-operations to finish. All write-operations are therefore asynchronous and non-blocking. Read-operations will only block on long write operations. * Tags can be modified on multiple marked threads with + and -. * Modify tags on single message, they are updated in thread-view and thread-index. * Keybindings modified to be more common #171. * scss: fix #82: make all variables global. * C-d / C-u / Page in thread-index: Page and move cursor in thread index. * Special keys like Tab and Home can now be used in user-keybindings. * M. Dietrich: clock_format=year option to use clock format from this or previous year setting in thread-index. * M. Dietrich, G. Hope: Background color in thread-index configurable. * M. Dietrich: Use correct reply-to address for mailinglist-messages. * Gravatar is configurable. * #103: Drafts are saved on force close or quit by default. * C-v: duplicate and refine query. * Mark thread moves to next by default. * ti: set cursor to first thread if we are at first thread when new addition is made. * build: --disable-libsass: do not depend on libsass, but use a sass compiler at build time (-scss-compiler=sassc). * Quote lines for reply and forward are formatted with Glib::DateTime::format(). == v0.5 / 2016-02-06 * Startup queries are invincible. * q: ask to quit, Q: quit right away. * C-f: Toggle flat or indented view of messages. * C-i: Show remote images (cid-type images are not supported yet). * A-#: Page to # page. * Add gravatar support * M-p: Toggle auto poll. * C-j / C-k: Jump and scroll to next or previous element. * thread-index: C-Enter: open thread in new window. * Add popup menu with some actions for the thread-index. * Fix #23: Don't crash when message file is missing. * #25: Load html and scss from config/ui directory if present. * #25: Allow some parameters of the thread_index cells to be configured. * Move 'expand all' in thread view to C-e. * Save drafts with 's', discard them with 'D', edit them with 'E' from thread index or thread view. * Edit messages as new with 'E'. * Added a dinosaur. * Configurable keybindings in ~/.config/astroid/keybindings. * Show name of pre-defined searches in tab. * Tab: jump to next unread thread. * X: Force close tab. * C-s: Cycle through sorting the thread_index (default configurable) * Configurable sent-tags (per-account and global) * Allow messages to be sent as attachments. * Hugo Roy: Fix licences to be correct for borrowed stuff. * Franz Fellner: Fix some long standing annoying bugs. * Use ',' as separator for 'for_tags' in config, not ';'. * Hugo Roy: Refurbished thread-view theme and move to scss processing, your custom thread-view.css needs some attention. * Franz Fellner: Clean-up coding style and name-space pollution. * Hugo Roy: Made a tour of setting up astroid in the wiki. * Print message with C-P and print marked messages with t+p. * Run-hooks: Run user-defined shell hooks on keypress using keybinding configuration. * Franz Fellner: Integrate with notmuch config, read available options from there. You might have to update some of the affected configuration options. * Thread index: only use bold face on authors of unread messages. == v0.4 / 2015-08-15 * Mark threads with 't' or 'T' and apply actions to all marked threads with '+'. * Mark messages with 't' or 'T' in thread-view and apply actions to all marked messages with '+'. * Show attached icon in thread-view. * #18: Fix display of & and friends. * Configurable quote string for replying and forwarding. * Replying adds 'replied' tag to original. * Forwarding adds 'passed' tag to original. * Message is updated thread-index after being sent. * Show spinner in main window when polling. * Show status icon for message sending. * Indent messages according to reply-level in thread (configurable). == v0.3 / 2015-05-27 * Poll script only updates changed threads (if notmuch_get_rev.. is available). * Show number of messages in tab title * Escape means no * Poll-script output is logged incrementally * Got a desktop file. * Different color of font and border of the first levels of quotes * Configurable exclude tags * Open attached MIME messages * Auto-redraw thread-index every minute == v0.2 / 2015-01-18 * Allow math to be rendered with MathJax! Enclose math with $ or $$, by default we are using MathJax online, but you can set this to your local installation as well. MathJax is enabled by default, and can also be enabled only for certain tags. * Highlight code syntax between ``` markdown-style tags as well as patches sent as email. * Partial mailto: support, check out --help. * Switch tabs/pages using mouse. * Double-click in thread index to open thread. * Paging in thread index moves cursor. * Do not load remote images or resources from html files. * C-m: adds 'muted' tag, 'muted' messages are excluded from non-explicit searches. * v: refine query. * Tab: Grabs the first match in tag and search completion. == v0.1 / 2014-11-30 First release of Astroid! astroid-0.14/LICENSE.md000066400000000000000000000123541335422170400145150ustar00rootroot00000000000000 “This program” is Astroid. Copyright (c) 2014 Gaute Hope This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . See COPYING.GPL-3.0+ ------------------------------------------------------------------------ This program includes `src/compose_message.cc`, an adaptation of Ner’s `src/compose_view.cc` under [the GPLv3 or any later version](https://github.com/astroidmail/astroid/pull/44#issuecomment-215941539). Copyright (c) 2010 Michael Forney This file is a part of ner. ner is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3, as published by the Free Software Foundation. ner is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with ner. If not, see . See COPYING.GPL-3.0+ ------------------------------------------------------------------------ This program includes a portion of Geary (referred to as "this program" later in this section). Copyright 2012-2014 Yorba Foundation This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. See COPYING.LGPL-2.1+ ------------------------------------------------------------------------ This program includes a portion of GMime (referred to as "this library" later in this section). GMime Copyright (C) 2000-2014 Jeffrey Stedfast Copyright (C) 2016 Gaute Hope Modified from gmime-filter-html.c This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. See COPYING.LGPL-2.1+ ------------------------------------------------------------------------ This program includes `cmake/FindGObjectIntrospection.cmake` and `cmake/GObjectIntrospectionMacros.cmake` from [the poppler pdf rendering library](https://cgit.freedesktop.org/poppler/poppler/), developed at freedesktop.org. `FindGObjectIntrospection.cmake` is the original version, whereas `GObjectIntrospectionMacros.cmake` has been modified for building this program. The redistribution and use of both files is allowed according to the terms of the BSD license. These two files are only used to build this program, but are not included in executable forms of this program. 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 copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. astroid-0.14/README.md000066400000000000000000000131661335422170400143720ustar00rootroot00000000000000astroid logo > _Astroid_ is a lightweight and fast **Mail User Agent** that provides a graphical interface to searching, displaying and composing email, organized in threads and tags. _Astroid_ uses the [notmuch](http://notmuchmail.org/) backend for blazingly fast searches through tons of email. _Astroid_ searches, displays and composes emails - and rely on other programs for fetching, syncing and sending email. Check out [Astroid in your general mail setup](https://github.com/astroidmail/astroid/wiki/Astroid-in-your-general-mail-setup) for a suggested complete e-mail solution. The [tour of how to install, configure and use astroid](https://github.com/astroidmail/astroid/wiki) provides detailed information on setup and usage, while brief instructions are provided [below](#acquiring-astroid). ## Main features * lightweight and fast! * fully operable by [keyboard](https://github.com/astroidmail/astroid/wiki/Customizing-key-bindings). * graphical interface. buffers can be placed in separate windows. * display html mail and common attachments inline. * [themable and configurable](https://github.com/astroidmail/astroid/wiki/Customizing-the-user-interface). * built-in [crypto (PGP/MIME) support](https://github.com/astroidmail/astroid/wiki/Signing%2C-Encrypting-and-Decrypting). * editors: [embedded or external vim or emacs](https://github.com/astroidmail/astroid/wiki/Customizing-editor) (or your favourite editor). * [syntax highlighting](https://github.com/astroidmail/astroid-syntax-highlight) of patches and code segments. * [python and lua plugins](https://github.com/astroidmail/astroid/wiki/Plugins). * and much more... Astroid (with embedded editor) ## Acquiring astroid Get astroid through git by: ```sh $ git clone https://github.com/astroidmail/astroid.git ``` ## Installation and Usage ### Building ```sh $ cd astroid $ cmake -H. -Bbuild -GNinja # to use the ninja backend $ cmake --build build ``` Run `cmake -DOPTION=VALUE ..` from `build/` to set any build options (list with `cmake -L`). Subsequent builds can be done by running `ninja` (or `make` if you are using that) from the build directory. And to run the tests do: ```sh $ cd build $ ctest ``` ### Installing Configure with a prefix and install: ```sh $ cmake -H. -Bbuild -GNinja -DCMAKE_INSTALL_PREFIX=/usr/local $ cmake --build build --target install ``` This will install the `astroid` binary into `/usr/local/bin/`, and data files into `/usr/local/share/astroid/`. Refer to the [installing section](https://github.com/astroidmail/astroid/wiki/Compiling-and-Installing) in the wiki for more information. ### Configuration The configuration of `astroid` is kept in the directory `$XDG_CONFIG_HOME/astroid` (normally: `~/.config/astroid/`). Refer to the [configuration section](https://github.com/astroidmail/astroid/wiki/Astroid-setup) in the wiki for how to configure astroid. You can use `astroid --new-config` to create a configuration file filled with the default values. If no file exists, the [default values](https://github.com/astroidmail/astroid/blob/master/src/config.cc#L116) are used. ### Execution and Usage ```sh $ ./build/astroid # to run from source repository ``` Press `?` to get a list of available key bindings in the current mode, navigate up and down using `j` and `k`. Refer to the [usage section](https://github.com/astroidmail/astroid/wiki#usage) in the wiki for more information on usage and customization. ## Patches, Help, Comments and Bugs Report on the [github page](https://github.com/astroidmail/astroid) or to the mailinglist at: [astroidmail@googlegroups.com](https://groups.google.com/forum/#!forum/astroidmail), subscribe [online](https://groups.google.com/forum/#!forum/astroidmail) or by sending an email to: [astroidmail+subscribe@googlegroups.com](mailto:astroidmail+subscribe@googlegroups.com). Contributions to Astroid in the form of patches, documentation and testing are very welcome. Information on how to [contribute](https://github.com/astroidmail/astroid/wiki/Contributing) to astroid can be found in the wiki. You can usually find us at #astroid ([web](https://webchat.freenode.net/?channels=#astroid)) or #notmuch ([web](https://webchat.freenode.net/?channels=#notmuch)) at irc.freenode.net. This project adheres to [Contributor Covenant Code of Conduct v1.4](http://contributor-covenant.org/version/1/4/). ## Acknowledgements The main inspiration for astroid is the [sup] mail user agent. [sup] provided inspiration for [notmuch] which is a mail indexer. astroid is using [notmuch] as a backend. Some parts of the user interface and layout has been inspired by the [Geary] mail client. Also, some inspiration and code stems from ner (another notmuch email client). ## License See [LICENSE.md](./LICENSE.md) for licensing information. [sup]: http://sup-heliotrope.github.io [notmuch]: http://notmuchmail.org/ [Geary]: http://www.yorba.org/projects/geary/ [gmime]: http://spruce.sourceforge.net/gmime/ [webkit]: http://webkitgtk.org/ [GPL]: https://www.gnu.org/copyleft/gpl.html [git]: http://git-scm.com/ [C++11]: http://en.wikipedia.org/wiki/C%2B%2B11 [boost]: http://www.boost.org/ [GTK+]: http://www.gtk.org/ [glib]: https://developer.gnome.org/glib/ [boost::property_tree]: http://www.boost.org/doc/libs/1_56_0/doc/html/property_tree.html astroid-0.14/cmake/000077500000000000000000000000001335422170400141645ustar00rootroot00000000000000astroid-0.14/cmake/FindGObjectIntrospection.cmake000066400000000000000000000037241335422170400220730ustar00rootroot00000000000000# - try to find gobject-introspection # # Once done this will define # # INTROSPECTION_FOUND - system has gobject-introspection # INTROSPECTION_SCANNER - the gobject-introspection scanner, g-ir-scanner # INTROSPECTION_COMPILER - the gobject-introspection compiler, g-ir-compiler # INTROSPECTION_GENERATE - the gobject-introspection generate, g-ir-generate # INTROSPECTION_GIRDIR # INTROSPECTION_TYPELIBDIR # INTROSPECTION_CFLAGS # INTROSPECTION_LIBS # # Copyright (C) 2010, Pino Toscano, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see LICENSE.md. macro(_GIR_GET_PKGCONFIG_VAR _outvar _varname) execute_process( COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=${_varname} gobject-introspection-1.0 OUTPUT_VARIABLE _result RESULT_VARIABLE _null ) if (_null) else() string(REGEX REPLACE "[\r\n]" " " _result "${_result}") string(REGEX REPLACE " +$" "" _result "${_result}") separate_arguments(_result) set(${_outvar} ${_result} CACHE INTERNAL "") endif() endmacro(_GIR_GET_PKGCONFIG_VAR) find_package(PkgConfig) if(PKG_CONFIG_FOUND) if(PACKAGE_FIND_VERSION_COUNT GREATER 0) set(_gir_version_cmp ">=${PACKAGE_FIND_VERSION}") endif() pkg_check_modules(_pc_gir gobject-introspection-1.0${_gir_version_cmp}) if(_pc_gir_FOUND) set(INTROSPECTION_FOUND TRUE) _gir_get_pkgconfig_var(INTROSPECTION_SCANNER "g_ir_scanner") _gir_get_pkgconfig_var(INTROSPECTION_COMPILER "g_ir_compiler") _gir_get_pkgconfig_var(INTROSPECTION_GENERATE "g_ir_generate") _gir_get_pkgconfig_var(INTROSPECTION_GIRDIR "girdir") _gir_get_pkgconfig_var(INTROSPECTION_TYPELIBDIR "typelibdir") set(INTROSPECTION_CFLAGS "${_pc_gir_CFLAGS}") set(INTROSPECTION_LIBS "${_pc_gir_LIBS}") endif() endif() mark_as_advanced( INTROSPECTION_SCANNER INTROSPECTION_COMPILER INTROSPECTION_GENERATE INTROSPECTION_GIRDIR INTROSPECTION_TYPELIBDIR INTROSPECTION_CFLAGS INTROSPECTION_LIBS ) astroid-0.14/cmake/FindNotmuch.cmake000066400000000000000000000072011335422170400174040ustar00rootroot00000000000000# - Try to find Notmuch # Once done, this will define # # Notmuch_FOUND - system has Notmuch # Notmuch_VERSION - the version of the Notmuch shared library # Notmuch_INCLUDE_DIRS - the Notmuch include directories # Notmuch_LIBRARIES - link these to use Notmuch # Notmuch_GMIME_VERSION - the GMime version notmuch was linked against # Notmuch_INDEX_FILE_API - whether Notmuch has the notmuch_database_index_file() API include (LibFindMacros) mark_as_advanced ( Notmuch_INCLUDE_DIR Notmuch_LIBRARY _notmuch_version_file _notmuch_version_contents _notmuch_version_major _notmuch_version_minor _notmuch_version_micro _notmuch_prerequisites ) # find include directory find_path (Notmuch_INCLUDE_DIR notmuch.h) set (Notmuch_PROCESS_INCLUDES Notmuch_INCLUDE_DIR) # find library diretcory find_library (Notmuch_LIBRARY notmuch) set (Notmuch_PROCESS_LIBS Notmuch_LIBRARY) # version information # (unfortunately cannott use libfind_version_header, because notmuch.h # defines separate macros for major, minor, and micro versions, and # without the double quotes) set (Notmuch_VERSION "unknown" CACHE INTERNAL "The version of the Notmuch shared library which was detected") set (_notmuch_version_file "${Notmuch_INCLUDE_DIR}/notmuch.h") if (EXISTS "${_notmuch_version_file}") file (STRINGS "${_notmuch_version_file}" _notmuch_version_contents REGEX "#define[ \t]+(LIBNOTMUCH_(MAJOR|MINOR|MICRO)_VERSION)[ \t]+[0-9]+") if (_notmuch_version_contents) string (REGEX REPLACE ".*#define[ \t]+LIBNOTMUCH_MAJOR_VERSION[ \t]+([0-9]+).*" "\\1" _notmuch_version_major ${_notmuch_version_contents}) string (REGEX REPLACE ".*#define[ \t]+LIBNOTMUCH_MINOR_VERSION[ \t]+([0-9]+).*" "\\1" _notmuch_version_minor ${_notmuch_version_contents}) string (REGEX REPLACE ".*#define[ \t]+LIBNOTMUCH_MICRO_VERSION[ \t]+([0-9]+).*" "\\1" _notmuch_version_micro ${_notmuch_version_contents}) set (Notmuch_VERSION "${_notmuch_version_major}.${_notmuch_version_minor}.${_notmuch_version_micro}") else() message(WARNING "[ FindNotmuch.cmake:${CMAKE_CURRENT_LIST_LINE} ] " "Failed to parse version number, please report this as a bug.") endif() unset (_notmuch_version_contents) endif() # set common output variables libfind_process (Notmuch) # will set Notmuch_FOUND, Notmuch_INCLUDE_DIRS and Notmuch_LIBRARIES # notmuch_database_index_file() API presence include (CheckSymbolExists) set (CMAKE_REQUIRED_INCLUDES ${Notmuch_INCLUDE_DIR}) set (CMAKE_REQUIRED_LIBRARIES ${Notmuch_LIBRARY}) check_symbol_exists (notmuch_database_index_file notmuch.h Notmuch_INDEX_FILE_API) # GMime version notmuch was linked against include (GetPrerequisites) GET_PREREQUISITES(${Notmuch_LIBRARY} _notmuch_prerequisites 0 0 "" "") set (Notmuch_GMIME_VERSION "unknown") if (_notmuch_prerequisites) foreach (_nm_prereq ${_notmuch_prerequisites}) if (_nm_prereq MATCHES "^(.*/)?${CMAKE_SHARED_LIBRARY_PREFIX}gmime[-\\.]([0-9]+\\.[0-9]+)(\\${CMAKE_SHARED_LIBRARY_SUFFIX})?(\\.[0-9]+)(\\${CMAKE_SHARED_LIBRARY_SUFFIX})?$" ) set (Notmuch_GMIME_VERSION "${CMAKE_MATCH_2}${CMAKE_MATCH_4}") message (STATUS "Notmuch was built against GMime ${Notmuch_GMIME_VERSION}") endif () endforeach (_nm_prereq) else() message(WARNING "[ FindNotmuch.cmake:${CMAKE_CURRENT_LIST_LINE} ] " "Failed to determine libnotmuch prerequisites, please report this as a bug.") endif() unset (_notmuch_prerequisites) if (Notmuch_GMIME_VERSION EQUAL "unknown") message(WARNING "[ FindNotmuch.cmake:${CMAKE_CURRENT_LIST_LINE} ] " "Failed to determine needed libgmime version number, please report this as a bug.") endif () astroid-0.14/cmake/GObjectIntrospectionMacros.cmake000066400000000000000000000131211335422170400224270ustar00rootroot00000000000000# Copyright (C) 2010, Pino Toscano, # (C) 2017, Alexander Adolf # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying LICENSE.md. # # Sample use: # # include (FindGObjectIntrospection) # this performs a pkg_check_modules() # if(INTROSPECTION_FOUND) # include (GObjectIntrospectionMacros) # set (GIR_NAME "${PROJECT_NAME}-${PROJECT_VERSION}.gir") # set (${GIR_NAME}_NAMESPACE ${PROJECT_NAME}) # set (${GIR_NAME}_VERSION ${PROJECT_VERSION}) # set (${GIR_NAME}_INCLUDEPKGS GObject-2.0) # add more as needed # set (${GIR_NAME}_PROGRAM ${CMAKE_CURRENT_BINARY_DIR}/gir_main) # set (${GIR_NAME}_FILES # # # # your source files here # # # ) # list ( APPEND INTROSPECTION_GIRS ${GIR_NAME} ) # set (INTROSPECTION_SCANNER_ARGS --warn-all) # gir_add_introspections (INTROSPECTION_GIRS) # # # # define your gir_main target here # # # # must build gir_main first in order to be able to infer typelibs # add_dependencies ( gir-typelibs gir_main ) # endif() # # # add_custom_target(gir-girs) add_custom_target(gir-typelibs) # add_dependencies(gir-typelibs gir-girs) set(_gir_specific_var_suffixes CFLAGS EXPORT_PACKAGES INCLUDEPKGS INCLUDES LIBS NAMESPACE PACKAGES PROGRAM VERSION ) macro(_gir_prefix_list_elements _outvar _listvar _prefix) set(${_outvar}) foreach(_item IN LISTS ${_listvar}) list(APPEND ${_outvar} ${_prefix}${_item}) endforeach() endmacro(_gir_prefix_list_elements) macro(_gir_mangle_as_variable_name _name) # Transform a string to something which can be referenced through a variable # without automake/make complaining, eg Gtk-2.0.gir -> Gtk_2_0_gir string(REPLACE "-" "_" ${_name} "${${_name}}") string(REPLACE "." "_" ${_name} "${${_name}}") endmacro(_gir_mangle_as_variable_name) macro(_gir_add_introspections girs_list) # set(_gir_girs) # set(_gir_typelibs) foreach(_gir IN LISTS ${girs_list}) set(_gir_name ${_gir}) _gir_mangle_as_variable_name(_gir_name) # Namespace and Version is either fetched from the gir filename # or the _NAMESPACE/_VERSION variable combo set(_gir_namespace "${${_gir_name}_NAMESPACE}") if (_gir_namespace STREQUAL "") string(REGEX REPLACE "([^-]+)-.*" "\\1" _gir_namespace "${_gir}") endif () set(_gir_version "${${_gir_name}_VERSION}") if (_gir_version STREQUAL "") string(REGEX REPLACE ".*-([^-]+).gir" "\\1" _gir_version "${_gir}") endif () # _PROGRAM is an optional variable which needs it's own --program argument set(_gir_program "${${_gir_name}_PROGRAM}") if (NOT _gir_program STREQUAL "") set(_gir_program "--program=${_gir_program}") endif () # Variables which provide lists of things _gir_prefix_list_elements(_gir_libraries ${_gir_name}_LIBS "--library=") _gir_prefix_list_elements(_gir_packages ${_gir_name}_PACKAGES "--pkg=") _gir_prefix_list_elements(_gir_includepkgs ${_gir_name}_INCLUDEPKGS "--include=") _gir_prefix_list_elements(_gir_includes ${_gir_name}_INCLUDES "-I") _gir_prefix_list_elements(_gir_export_packages ${_gir_name}_EXPORT_PACKAGES "--pkg-export=") # FIXME: reuse the LIBTOOL variable from automake if it's set set(_gir_libtool "--no-libtool") add_custom_command( COMMAND ${INTROSPECTION_SCANNER} ${INTROSPECTION_SCANNER_ARGS} --namespace=${_gir_namespace} --nsversion=${_gir_version} --add-include-path=${CMAKE_CURRENT_BINARY_DIR} --output ${CMAKE_CURRENT_BINARY_DIR}/${_gir} ${_gir_libtool} ${_gir_program} ${_gir_libraries} ${_gir_packages} ${_gir_includepkgs} ${_gir_includes} ${_gir_export_packages} ${${_gir_name}_SCANNERFLAGS} ${${_gir_name}_CFLAGS} ${${_gir_name}_FILES} DEPENDS ${${_gir_name}_FILES} ${${_gir_name}_LIBS} ${${_gir_name}_PROGRAM} OUTPUT ${_gir} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} VERBATIM ) add_custom_target(${_gir_name}_gir DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_gir}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_gir} DESTINATION share/gir-1.0) string(REPLACE ".gir" ".typelib" _typelib "${_gir}") add_custom_command( COMMAND ${INTROSPECTION_COMPILER} ${INTROSPECTION_COMPILER_ARGS} --includedir=. ${CMAKE_CURRENT_BINARY_DIR}/${_gir} -o ${CMAKE_CURRENT_BINARY_DIR}/${_typelib} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_gir} OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_typelib} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) add_custom_target(${_gir_name}_typelib DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_typelib}) add_dependencies(${_gir_name}_typelib ${_gir_name}_gir) add_dependencies(gir-typelibs ${_gir_name}_typelib) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_typelib} DESTINATION lib${LIB_SUFFIX}/girepository-1.0) endforeach() endmacro(_gir_add_introspections) macro(gir_add_introspections introspection_girs) foreach(gir IN LISTS ${introspection_girs}) set(_name ${gir}) _gir_mangle_as_variable_name(_name) _gir_prefix_list_elements(${_name}_FILES ${gir}_FILES "${CMAKE_CURRENT_SOURCE_DIR}/") foreach(_gir_var_suffix IN LISTS _gir_specific_var_suffixes) set(${_name}_${_gir_var_suffix} ${${gir}_${_gir_var_suffix}}) endforeach() endforeach() _gir_add_introspections(${introspection_girs}) endmacro(gir_add_introspections) astroid-0.14/cmake/InstallSymbolicLink.cmake000066400000000000000000000011551335422170400211160ustar00rootroot00000000000000# shamelessly inspired by https://github.com/bro/cmake/blob/master/InstallSymlink.cmake macro(install_symlink filepath sympath) get_filename_component(symdir ${sympath} DIRECTORY) install(DIRECTORY DESTINATION ${symdir}) install(CODE " if (\"\$ENV{DESTDIR}\" STREQUAL \"\") execute_process(COMMAND \"${CMAKE_COMMAND}\" -E create_symlink ${filepath} ${sympath}) else () execute_process(COMMAND \"${CMAKE_COMMAND}\" -E create_symlink ${filepath} \$ENV{DESTDIR}/${sympath}) endif () ") install(CODE "message(\"-- Symlinking: ${sympath} -> ${filepath}\")") endmacro(install_symlink) astroid-0.14/cmake/LibFindMacros.cmake000066400000000000000000000247171335422170400176550ustar00rootroot00000000000000# Version 2.2 # Public Domain, originally written by Lasse Kärkkäinen # Maintained at https://github.com/Tronic/cmake-modules # Please send your improvements as pull requests on Github. # Find another package and make it a dependency of the current package. # This also automatically forwards the "REQUIRED" argument. # Usage: libfind_package( [extra args to find_package]) macro (libfind_package PREFIX PKG) set(${PREFIX}_args ${PKG} ${ARGN}) if (${PREFIX}_FIND_REQUIRED) set(${PREFIX}_args ${${PREFIX}_args} REQUIRED) endif() find_package(${${PREFIX}_args}) set(${PREFIX}_DEPENDENCIES ${${PREFIX}_DEPENDENCIES};${PKG}) unset(${PREFIX}_args) endmacro() # A simple wrapper to make pkg-config searches a bit easier. # Works the same as CMake's internal pkg_check_modules but is always quiet. macro (libfind_pkg_check_modules) find_package(PkgConfig QUIET) if (PKG_CONFIG_FOUND) pkg_check_modules(${ARGN} QUIET) endif() endmacro() # Avoid useless copy&pasta by doing what most simple libraries do anyway: # pkg-config, find headers, find library. # Usage: libfind_pkg_detect( FIND_PATH [other args] FIND_LIBRARY [other args]) # E.g. libfind_pkg_detect(SDL2 sdl2 FIND_PATH SDL.h PATH_SUFFIXES SDL2 FIND_LIBRARY SDL2) function (libfind_pkg_detect PREFIX) # Parse arguments set(argname pkgargs) foreach (i ${ARGN}) if ("${i}" STREQUAL "FIND_PATH") set(argname pathargs) elseif ("${i}" STREQUAL "FIND_LIBRARY") set(argname libraryargs) else() set(${argname} ${${argname}} ${i}) endif() endforeach() if (NOT pkgargs) message(FATAL_ERROR "libfind_pkg_detect requires at least a pkg_config package name to be passed.") endif() # Find library libfind_pkg_check_modules(${PREFIX}_PKGCONF ${pkgargs}) if (pathargs) find_path(${PREFIX}_INCLUDE_DIR NAMES ${pathargs} HINTS ${${PREFIX}_PKGCONF_INCLUDE_DIRS}) endif() if (libraryargs) find_library(${PREFIX}_LIBRARY NAMES ${libraryargs} HINTS ${${PREFIX}_PKGCONF_LIBRARY_DIRS}) endif() endfunction() # Extracts a version #define from a version.h file, output stored to _VERSION. # Usage: libfind_version_header(Foobar foobar/version.h FOOBAR_VERSION_STR) # Fourth argument "QUIET" may be used for silently testing different define names. # This function does nothing if the version variable is already defined. function (libfind_version_header PREFIX VERSION_H DEFINE_NAME) # Skip processing if we already have a version or if the include dir was not found if (${PREFIX}_VERSION OR NOT ${PREFIX}_INCLUDE_DIR) return() endif() set(quiet ${${PREFIX}_FIND_QUIETLY}) # Process optional arguments foreach(arg ${ARGN}) if (arg STREQUAL "QUIET") set(quiet TRUE) else() message(AUTHOR_WARNING "Unknown argument ${arg} to libfind_version_header ignored.") endif() endforeach() # Read the header and parse for version number set(filename "${${PREFIX}_INCLUDE_DIR}/${VERSION_H}") if (NOT EXISTS ${filename}) if (NOT quiet) message(AUTHOR_WARNING "Unable to find ${${PREFIX}_INCLUDE_DIR}/${VERSION_H}") endif() return() endif() file(READ "${filename}" header) string(REGEX REPLACE ".*#[ \t]*define[ \t]*${DEFINE_NAME}[ \t]*\"([^\n]*)\".*" "\\1" match "${header}") # No regex match? if (match STREQUAL header) if (NOT quiet) message(AUTHOR_WARNING "Unable to find \#define ${DEFINE_NAME} \"\" from ${${PREFIX}_INCLUDE_DIR}/${VERSION_H}") endif() return() endif() # Export the version string set(${PREFIX}_VERSION "${match}" PARENT_SCOPE) endfunction() # Do the final processing once the paths have been detected. # If include dirs are needed, ${PREFIX}_PROCESS_INCLUDES should be set to contain # all the variables, each of which contain one include directory. # Ditto for ${PREFIX}_PROCESS_LIBS and library files. # Will set ${PREFIX}_FOUND, ${PREFIX}_INCLUDE_DIRS and ${PREFIX}_LIBRARIES. # Also handles errors in case library detection was required, etc. function (libfind_process PREFIX) # Skip processing if already processed during this configuration run if (${PREFIX}_FOUND) return() endif() set(found TRUE) # Start with the assumption that the package was found # Did we find any files? Did we miss includes? These are for formatting better error messages. set(some_files FALSE) set(missing_headers FALSE) # Shorthands for some variables that we need often set(quiet ${${PREFIX}_FIND_QUIETLY}) set(required ${${PREFIX}_FIND_REQUIRED}) set(exactver ${${PREFIX}_FIND_VERSION_EXACT}) set(findver "${${PREFIX}_FIND_VERSION}") set(version "${${PREFIX}_VERSION}") # Lists of config option names (all, includes, libs) unset(configopts) set(includeopts ${${PREFIX}_PROCESS_INCLUDES}) set(libraryopts ${${PREFIX}_PROCESS_LIBS}) # Process deps to add to foreach (i ${PREFIX} ${${PREFIX}_DEPENDENCIES}) if (DEFINED ${i}_INCLUDE_OPTS OR DEFINED ${i}_LIBRARY_OPTS) # The package seems to export option lists that we can use, woohoo! list(APPEND includeopts ${${i}_INCLUDE_OPTS}) list(APPEND libraryopts ${${i}_LIBRARY_OPTS}) else() # If plural forms don't exist or they equal singular forms if ((NOT DEFINED ${i}_INCLUDE_DIRS AND NOT DEFINED ${i}_LIBRARIES) OR ({i}_INCLUDE_DIR STREQUAL ${i}_INCLUDE_DIRS AND ${i}_LIBRARY STREQUAL ${i}_LIBRARIES)) # Singular forms can be used if (DEFINED ${i}_INCLUDE_DIR) list(APPEND includeopts ${i}_INCLUDE_DIR) endif() if (DEFINED ${i}_LIBRARY) list(APPEND libraryopts ${i}_LIBRARY) endif() else() # Oh no, we don't know the option names message(FATAL_ERROR "We couldn't determine config variable names for ${i} includes and libs. Aieeh!") endif() endif() endforeach() if (includeopts) list(REMOVE_DUPLICATES includeopts) endif() if (libraryopts) list(REMOVE_DUPLICATES libraryopts) endif() string(REGEX REPLACE ".*[ ;]([^ ;]*(_INCLUDE_DIRS|_LIBRARIES))" "\\1" tmp "${includeopts} ${libraryopts}") if (NOT tmp STREQUAL "${includeopts} ${libraryopts}") message(AUTHOR_WARNING "Plural form ${tmp} found in config options of ${PREFIX}. This works as before but is now deprecated. Please only use singular forms INCLUDE_DIR and LIBRARY, and update your find scripts for LibFindMacros > 2.0 automatic dependency system (most often you can simply remove the PROCESS variables entirely).") endif() # Include/library names separated by spaces (notice: not CMake lists) unset(includes) unset(libs) # Process all includes and set found false if any are missing foreach (i ${includeopts}) list(APPEND configopts ${i}) if (NOT "${${i}}" STREQUAL "${i}-NOTFOUND") list(APPEND includes "${${i}}") else() set(found FALSE) set(missing_headers TRUE) endif() endforeach() # Process all libraries and set found false if any are missing foreach (i ${libraryopts}) list(APPEND configopts ${i}) if (NOT "${${i}}" STREQUAL "${i}-NOTFOUND") list(APPEND libs "${${i}}") else() set (found FALSE) endif() endforeach() # Version checks if (found AND findver) if (NOT version) message(WARNING "The find module for ${PREFIX} does not provide version information, so we'll just assume that it is OK. Please fix the module or remove package version requirements to get rid of this warning.") elseif (version VERSION_LESS findver OR (exactver AND NOT version VERSION_EQUAL findver)) set(found FALSE) set(version_unsuitable TRUE) endif() endif() # If all-OK, hide all config options, export variables, print status and exit if (found) foreach (i ${configopts}) mark_as_advanced(${i}) endforeach() if (NOT quiet) message(STATUS "Found ${PREFIX} ${${PREFIX}_VERSION}") if (LIBFIND_DEBUG) message(STATUS " ${PREFIX}_DEPENDENCIES=${${PREFIX}_DEPENDENCIES}") message(STATUS " ${PREFIX}_INCLUDE_OPTS=${includeopts}") message(STATUS " ${PREFIX}_INCLUDE_DIRS=${includes}") message(STATUS " ${PREFIX}_LIBRARY_OPTS=${libraryopts}") message(STATUS " ${PREFIX}_LIBRARIES=${libs}") endif() set (${PREFIX}_INCLUDE_OPTS ${includeopts} PARENT_SCOPE) set (${PREFIX}_LIBRARY_OPTS ${libraryopts} PARENT_SCOPE) set (${PREFIX}_INCLUDE_DIRS ${includes} PARENT_SCOPE) set (${PREFIX}_LIBRARIES ${libs} PARENT_SCOPE) set (${PREFIX}_FOUND TRUE PARENT_SCOPE) endif() return() endif() # Format messages for debug info and the type of error set(vars "Relevant CMake configuration variables:\n") foreach (i ${configopts}) mark_as_advanced(CLEAR ${i}) set(val ${${i}}) if ("${val}" STREQUAL "${i}-NOTFOUND") set (val "") elseif (val AND NOT EXISTS ${val}) set (val "${val} (does not exist)") else() set(some_files TRUE) endif() set(vars "${vars} ${i}=${val}\n") endforeach() set(vars "${vars}You may use CMake GUI, cmake -D or ccmake to modify the values. Delete CMakeCache.txt to discard all values and force full re-detection if necessary.\n") if (version_unsuitable) set(msg "${PREFIX} ${${PREFIX}_VERSION} was found but") if (exactver) set(msg "${msg} only version ${findver} is acceptable.") else() set(msg "${msg} version ${findver} is the minimum requirement.") endif() else() if (missing_headers) set(msg "We could not find development headers for ${PREFIX}. Do you have the necessary dev package installed?") elseif (some_files) set(msg "We only found some files of ${PREFIX}, not all of them. Perhaps your installation is incomplete or maybe we just didn't look in the right place?") if(findver) set(msg "${msg} This could also be caused by incompatible version (if it helps, at least ${PREFIX} ${findver} should work).") endif() else() set(msg "We were unable to find package ${PREFIX}.") endif() endif() # Fatal error out if REQUIRED if (required) set(msg "REQUIRED PACKAGE NOT FOUND\n${msg} This package is REQUIRED and you need to install it or adjust CMake configuration in order to continue building ${CMAKE_PROJECT_NAME}.") message(FATAL_ERROR "${msg}\n${vars}") endif() # Otherwise just print a nasty warning if (NOT quiet) message(WARNING "WARNING: MISSING PACKAGE\n${msg} This package is NOT REQUIRED and you may ignore this warning but by doing so you may miss some functionality of ${CMAKE_PROJECT_NAME}. \n${vars}") endif() endfunction() astroid-0.14/devel/000077500000000000000000000000001335422170400142035ustar00rootroot00000000000000astroid-0.14/devel/get_keys.py000077500000000000000000000047361335422170400164040ustar00rootroot00000000000000#! /usr/bin/env python # # get keybindings from calls to register_key # # Author: Gaute Hope / 2016-02-07 # Author: M. Dietrich / 2016-02-24 # from __future__ import with_statement, print_function from re import compile as re_compile import os import sys def stripper(s): # bad hack to strip cc string " and brackets for arrays if s is None: return '' if s[0] == '"' and s[-1] == '"': return s[1:-1].strip() if s[0] == '{' and s[-1] == '}': return s[1:-1].strip() return s def out_binding(multi, key, function, documentation, ): if 'UnboundKey' in key: multi = ', no defaults.' else: key = stripper(key) if multi: multi = ', default: ' + key + ', ' + stripper(multi) else: multi = ', default: ' + key print('#', stripper(function) + '=' + key, '#', stripper(documentation) + multi) def main(*options): # pattern to look for: pattern = re_compile("((->|\.)register_key *\([^;]*)") # quite mode? quiet = True for option in options: if '-d' == option: quiet = False # detect src root src_root = os.path.join(os.path.dirname(__file__), '../src') if not quiet: sys.stderr.write("source root: %s\n" % src_root) # walk through for dname, sdirs, flist in os.walk(src_root): for fname in flist: _, fext = os.path.splitext(fname) # consider cc source if fext == '.cc': fname = os.path.join(dname, fname) if not quiet: sys.stderr.write('checking: %s\n' % fname) # read whole file with open(fname, 'r') as fd: txt = fd.read() # unify txt = txt.replace('\n', ' ') txt = txt.replace('\t', ' ') # seach pattern for group in pattern.findall(txt): # only the pattern, not the inbetween group, _ = group # split args args = group.split(', ') # strip all whitespaces args = list([n.strip() for n in args]) # cut away function call in the beginning args[0] = args[0].split('(',1)[1] # detect args in first arg if '(' in args[0]: while not ')' in args[0]: args[0] += ', ' + args.pop(1) # detect if mode 1 or 2 of method is used if args[1][0] == '"': # clear thing, 3-part 1:1 mapping out_binding(None, *args[:3]) elif args[1][0] == '{': # multi mapping multi = args.pop(1) while not '}' in multi: multi += ', ' + args.pop(1) out_binding(multi, *args[:3]) else: # undetected second param print('# not detected', args) if __name__ == '__main__': main(*sys.argv[1:]) astroid-0.14/doc/000077500000000000000000000000001335422170400136515ustar00rootroot00000000000000astroid-0.14/doc/astroid-compose-code-highlight.png000066400000000000000000004232611335422170400223540ustar00rootroot00000000000000PNG  IHDRnc]IDbKGD pHYs  tIME! s0D2 IDATx{iY<pK7*РDe::aj1h5$QgF':蠦Z1VDdJu (:[_{ݾ{own誳Ԯ}^<>=MtS|kהRB)eJi6y?1z>99 !!ڶ~d!(DR"IJcf\D4p3K)qlf1,ibJRsGŹ0RJJi}r1㨵1v]svS16MuY4J)|>gf#1}4Q),#.,qf4}oZsJ9gI)c0vk1,|G!D=oJ ןRjv^rX8{ovzRJ~⒬Ƙ3hBl˗/u]g !CE"j9iib朳1{/B !p/)*u])5 kfi0ZqONNpGmN$Z{.9gU-,c-Wf4 j5n>O-efk-3+!aAb6XJ)Za콇@]CnZ` iOOOۭʀ]0Ma,7 ˗C8ZB9o+W㨔)mBKM1Ɯ{J)M4˅v&\:(7Mk`gѡ5ֶ-3R (k-41ݮ{k4y!s. C1ڶž~G*cJ+PRJB&(v5Vs>BZTJw1ò^!렱؏iV% J%<~n6lVJB@)%X9 ƈ=s~*cN= MáƐ*BsF)e\9XJf{MuzB찱)%v`0f#;,qlZװb:4cvffa`\3+m JJ́PYc 4A$sԶsn6R >όf@]8ɔlx۶>/#V*}Zkv7l5"g2񥵞ɥ=0 0/Ji(!,|>v9cm BZl%LS70cR FskR*z\ZJKιZ`5 RJVJD dfzøm'''"4l7mg]5uXksF>iW4)Ecb1}׵M#p8U(9xִ0KAb1bӶ) 0l1fbQJN8D:Z܉1mKJ4 $4 [QRJ1J!lDs:ۏ16I1YmqJw{&R64mK)6 شfr v].%LL$J9;)Rh>_ڶ+|FfcQBJT')4VC;7͸ҵ۷1JK!NW'% a >m2ZCqX URnF%ec-DJJ*%8i)FIB*Q)Z*-Ucw.65F ɅcK\H0[csrۇmZt%hM1/8N1RF qEH_J%$dF\nZ,F48hRb]zW)@*cZkh ᖴ\k[%mZ(`p|-$MpO1 b)bR.iuff !6*D%唂B*r~*;cd*Bpɩml)9H%[ڶ !mn t079g!Ii!$i# %\8VBpLJ<#1p4 cti֚RrJQkI̹dbo޹  -i-nd)TRL1 !FHbJQ)@KR|^ S)RR֚\R!dܨZsBJD\Bb;}߇6 qp^9ض(Ou s arO}5M8{4VJ1M"8ðos"")LT,PɅ>ĔK!) |wZm禾kTyysnvc7R5]?;[| 821:@TBm2IX8~C̅ڮKl7;V&.K"lyBLJi*c*PRQ B!ĒgB)ۦ,RL1rXz?]kF`)ػz*%픔0T >XĐJ!fal|0*si Z%`k`JVX~WR4R.,TCJc )G]XK`c463Ye)4]R.)Â(4Z5,s9Fɜ7mKFk%&)LLчi̅cLp! $# 2քiRZBMP1&v-B8)ڶm6R,wNCP-9%"D'%g[QK)mp l9SLCp0r.Bs uaNOO&,HcLmy0 R )nEXR1! hYÚÇ۶+uuRʾjɥQ>)M1sNi1D`VRzTZ)%`B\apXCleb%H!4M9mp5ِsuaK8NX2k0s/nJ)Z=ww:n 0 4MGZq!iH j1< rv0byc.n1KSJy64so;DQp*Zv  J_AC*mD)%X xXk#˅S@q kK.  ʆiVK]3lmw"lX`)c lRZ}7M1(ع˥ODJt L[svOBH 1im2\=q薈TJi"6‚%H)K-2\RHk#t7MB̹HRʈwSJB)Em `eT(iX rXzrx61%\N &k0 m XVX b )qbئif&$1= BgDU 2BcCv\CӴDƖa!"!F0X9 8KgLu"8ȘR)d*-~\Υg1ir 4@9! vlJMYm*)\r%&}lc}u?C!" *L!Ő"KRhy/g~wR~P/}Jk!_k~uL{U6|9b&bCM~"rYkǕR)e"iY`yr)`LSJĬn|f)Bh buS{\LZ)..jZS$V)cZJ%R6ZkRNJnk۵s% Mk9)JK)q 12ֺRJ Zۦ{c Os['@BVBHb̬I@#*U1s]׵m;M$xfz1ƮcgRF Rg(SmӀn&Ȧ:3Q!;l\*.x $9 -hU5Ƈ@PD!hnN5W: BklZ)*Njl`c-LLGg+\,v=)#GvcXr4 (윃B-ap: B_aRᰑoG?4בb뺮 t= Rʀnm}l*'gB aJ>ΒsN)#t 5j1 lX"9+%pPaJ)a$. Q RRJmjpaIp(|8[) $%;FAAiT<ń![h=t A(U8W-###@X1@ 7]a6yﻮ;v;?$'ų` 1y'qH8 mB3BJ9k0n0HDƘv  V l>@Pfj!Ā讦89)%PKqkDYb1l L"X@D&A05kv\\Q 2Gr2Ppa0 *)A(4{h VRZ14Bzs~vrYkc L$)l1i .vO3BdI)zj?99c 0~z%|'rlY'6 ) nu޷M#8lOz#sXiR,8  a#M9sR@Z5k 0L , YCV 8)f}(k]׎\.vAYRCr)p넘O~XGX[OOOw|>_HАآc'"} "4`T;]@o%ȝ3s4H #{Tm? P)J+ZkҰ˪6Hp4dRM`M*̭cUUbtB,T!Kݾk{ ۶(Cؤ YjFPK jA \.J:#&R ! X#>$uuȫ,Aԇ4mJ龟4SXRJJEf .7a)rQ 6R*"ΩPa&C1c|7M+*j!E-A&YQ_dKZ7SZ=n8§~snNsI) !źۣgJ(#\Ѹr ?&di+c̹Ęv}Ja7MJQ*E`dKCp`Q CPad'rΠ+68LRj8x >E@lȱ|2vLWir8*m`x+G(>~b]*14ͮ_jdv}Ua`QavI!qa+r8qT}?Ygo? pP!Nt2(M90;P$$J.ŹIK>xt"X+TfY?;HĂSaߴ,XiA[=_,RHInڮ4TNiӴߧٌqrkg>q5sGd0FRJ!9CړsVRNPȌ @YBw;M!lmcBcEAu ;XKeVBjf] NVBNoik>y Jmy?CvEZGs``!҂;"P\]"r.]Kr*B!D!j]Ӵ9駦i,`$!ad@PӴ1&ڐDmIyB7ׯ6|@q,mqr!&ѪZ.=p4 1qdHirبqelrBM9cJ>T.e\9嬴!A}ۦ))mcS9CnJFH9/q|#@iVP\Hބc.1,>@Mk4D:!ފɢAa2 H-4۶I)#5aX)naQǤ,pXJ>il,Kzc vxZQ8qQj*$|Cqr ^K@Q !@PbY^;qM7 E@bGZ}m]ӂEGq|]مf` Q su]@\K3RBP>|T1\FnօF;??ԫ*/8Qʄ(UCaC%paxP5ypc!  tJiLqir}7R1 &!䡐p|MmTf ;*,@r Z$.FC(SI9a-azҫ% Zb(ŐRgq!ɲnAV+lXp)4VL38~RdP2BQǔqMCg'%,{eDP3W+Ajb!f)Cw١4FcMH-Xw<]ت q5\| *e!8M*8rR3[:&irԥ%;M_Z>*s*fM)T\).]ڬϯ\c4]#Yz7JoؘRkw*Mrg*,&,J9[YijvƾN/_G>ϺfvvM[kmX\B BJ/pVJySPPx#8~`@`+FJ^0mD"gs)\lJۢvۦi#/j{]{κEv,!(: ZTH=fB^ #l6Jjal::]kk@Rņ]czuB8rq=R5#\.Џww舆YD"l1aC7ty(5S̕ꭔ #`ֲMe}!0 *ZIŽ'# ts j☈bX\jЂT{*J+BHtV# 4w6!OWsIt  vt)tڲn-YP-3~EM:bE" ,EDs"Z6 IDATp{}k )j:$Mg9dQ.Y!jm*'D&1ZuU#@s\ .`6 /Wk͈K*=99A6_cJ3z d^XVb> 5qN)ECɸ)Q\D8]HuD8Xs R1tmĥ]9)ONNsN0,LYb*qh/vD$$6iW0w}mlkb.D%SP9$R #3 %Y>ɫa*v2dWQJra>k0Q!ັ1CtQ"/b'#[-Xr*`kR2ݰYOchMΨ%R:VSӮ6/FcLi]v@Y:KךhR|6ݍ1֘øc8Pt}׻mBL$Xhky E B zYT.cy]T#u\> ͰJ)fQ`bR04bjp[<M lLBHӬSZ*eM4ڶ&ZL_-b&EDčǰu1D|iMrWǜXsl]kzF! qz W w=Lb~AJJA}?Ckr(Ȃ!WbE) ZއCg~H QˊJU^䜥0hhmЍ:fXgDFFkyD"nl#B 5F 0B_~?hmi$V/} tCV4WپcG AR "9[mA-<atp +z7w~ol(|>_c`r>=L֐RIQW6}?FNK΅ 3iagg`mDCR!fiVA'+7_\sئ!m罱6ẖ 7SicLꪕYomT1r%lևB*_ m6<9BLB "k}Jsu,Dɥָ\kJm]?;!n*a/TZIV1%Rw]lK!$ȔVViv-1Mnx ^AbG[t1RGB y?RJQCs0BSQ\ dePZov[mnES;MbưBern&r@$D)j#AJqn )6Ƃ >%s,V.rRqwRэؔR4\̬|+9 !w1E0t- #L 㞬3 -tolK6)%8W0KInWB )6F5EP i¦R RVJJƦ%ffuuhQ7@mz玳p;Wrn0RA(-j f4ŶKR82ιᒴRRna>ib ~+I9EcQs.QHbRR.#| %M9|YɹB٬k0M%S1$TZE@"VQkETwR fb&%c&c>JByYQvJ[262)Ŝ nFg.ciDŹOR~)٬Zm!XX^[]4]KR()rNBp)Yk9="!CY ATVՖ1mΠȿk;t~$ =wO FJJRsݼ\`& :R!8;GXc9%DtLTmڦ%a4ILYr)R)}mSz&jT W[=(!oYPrJv|l~v+c{W`&Pj)»&CJMDR`C2ZM㤕B1h4FJKD}6ƜoλX 14R X( q m 4_,֛`f? 1BBRXph|1b&b)V.x~6ۏ~NN/ !'S:"bL&Ԛ& 4 1apQdtM˥pcv%2 ]|iݴouY9B,PRcΔsv>ڦSJL‡0;F!Bc3b-c)g5m;:% bFg&$RJL>oN%s))sBV-Zbz䬞M=,Gz+BBsBXkTp-6]#rЧO0xP{+DU)kQskR9&#0QIYRLdJMRQZ1)5FI/֭\Ά 5 T۠n^oAG<!3d6tRM,%fK*aH9g)TaHz9Juu@mcma?0Q[rA.f4 526☈:aMCbBrWjsMJDE)؇dBnFk}@VybUFe8LTm#K F[#j`۶3Ǝd<Tc*)p)"R1Dܬg}0@+Z !SZM9(XJp$P"8f/Ňo)  @Yf)])f`lq ! Qdžt^#ĵ'x+rR׃k-Z.W }J!)Pg &uGcŀA8ME)eP` A;[7Z!0)==l!Z\k05&[Ǟնm$sAWzbcm@ ]眃%4)m6W}t1Tءb JkmBT{c!ra!h hmcPN0[E~u9ȅ,~;;;_NllTB:R!Ѝ: i];w쐕>j㬐?EAHZqD9`ꗒB  '&qhl($. b118r)mюS/f3 8PڨIi{TEm )0z&*QBfJL'*)vQJ]ADm&7?㙏FF>.ӀD5{]kkBicBKmٰZ^OXG!Zf =$}BTW qv"5ȷ6s_X(ث⧚!u\ᨳ=$%idj${kecWԢZ_k/2oMӁtpZCh[q@FyqFb]A+Àr5#x@ 8 bZy^kŝwi= uqGmǨ/BX>A4Rf# aA bݪcalq$ #.a^hjQ5tZ"#0" u]N MX$*N8 5"5O++1ILq$A5Y0)jz raZVh`5#9Z@\>jq& q=+Ֆ"7lqcp05UZ&dOw("7W۶>b?=4> hC7=tqO-G5c,C,^NKT-˥e V` qCw 3ħ =&#>,8H5:&{L%K)+@)U}74)V*Ú+:*Z}*8;!-3w¼m-䜔<0o;kMX,ƦkbZ6ZB$ 7ǔ 2df!RJ3x<#>mMdX'ԑ!PGl ՚R~H9K)#Yyӡ8X Q'U'`ub,~3BVf:k׬՝uz| @ qrRO•tVpVjh^m~xRNaZsw0i)%,Pe6 BQɃyЏV#V會ES8}^€DcT#ʢ iYk.y4ǽ']T" ~43 BhrwuCP ʪ8ZBڰ]ǯUZ8e1 A{k &%3ְ0㼘'istoMC6ALB5CZ1/UcV\̰R1RR8Fa+?WJ!clmeF3\dDjAhKTM9pWav>3x G>{ :7չ)qv:ɂ y2ZkTPY>I00u#宥rujrZõ_~ߣлf`/Jb9ƺ j۹G䯛;*dy8b0hBDzhm4WYu3B;^Lj+Z֩`mPԘӅ"ցUpy4a? >k5-㇘&tvvV]*:5-ꔅm!dP>'+0ĺ2L^ֺZYH)(S )@!9 A{NY?X, kG43+V*DغuTa8 V뺘Bez^YO}_ťK'B6Rk= BJI1]ӎӾm[Q(Fxs4$&"AZׯcz=(wjݓ3ѣ]7y}M4A2K8'zR"9VQsn78<0ZㆱiZu]O)ι|^՘~+Hשgggycj~@DD!ZP~n!w`ȟ )&}~X)?b|=!?r'_OOOt4c|J!P/%甈hG%Vg}?L u 3ńZӣRH֢eYV~K "Iny0C 9*0T``9 Yz9)Rds̜˱lGuY0 )ElYHc!T;_sGOݓ~w{^~W>{/푆Ûv_y+^w~ҙrzrzrzo`,7a -WBw\:)%7G?RvQZ5,q)k!}H9'3\Q\ d1lw9bцs!w XZlF7l[oZc/!qa5QfOO^OВ7C_9J??O5g,@:z ;]$O#_C }k~9_~RoOL>5A4tjupS3P3T#_CϾܵ;_'tM#_Ͼ~ɷ{ 㾏k^ywAĬ>?!>&'w<g/>m7?m@.^mWK7<~g&*#Wy蟼.0:7[v^Bfun'}3V<}׿w仧t/9'v|cu*O]cy?'̧9wo0꫿g>p/.Iw?nyOۥW~/LO'?+}obu3/~~.w>z?]ݩ<3)f(3]tirpҥq܇[kJ)<<8Ga)9"LOAqaԘuRQazso%NG?\߱G-Ԫn;w >dOx W} C?i2K0m~ۛO~o?~G5hE2C|__!W.Y?f ot~-G>qOO-#=J3? ^?|+k$~/-CU^g{^x?ﳿw>_\< E!so^c-gg|櫾ۿ/Ǯ)^/N)o?{W -O~kIw^=BpR]>rƏ{S_շ=|;ͯyۧ;_?j1W^K2WO{gw+'/xs7f[׿˙xӟ򪯺}}'=ϵC&{'5y;1y'%M̏>D}ۅwn; }!Vvf{.mܨ&: \8g"*\(\f̰B;X(Y()c89XϚ>>gXxuuh i9aw]'GcHѼ\W3D,%>&NSQ3t@?_.}W> ?2I{ ni]?[?X='^io7~m۟͟pHO__]MOyٗ]oI~I>ٟ~gW7{#o>k~ٷѸu>F"{ /=}z;=\]} v<[_~]cIX0џ$^/)w_8omp٫?p=/ߦg񧷻/z+q+o|o~+iym׼7wO^pKSwgu/eoz˿_r9Z?M IDATV_p-_on߿~M煈걯GVٷ>_S,1^Jv7_kᲐ?x导yٵ3x>;O] گ#omym?wJ?wejnzw=ٛ/Vݣ!%qG߯z/DWGʏ[wt[#'ߓ. wGx"MR! wG~ZəX/i)7=or_}wŸ+<ٖ??9m9sm*L&S][Jێd292! !b0 U0'uAKmۖы" ?/&ťQ2w)Y .IddpuݠhSI]IG;%юuz(mZW> !9;-bN#O'o1=+fuUA=i}թ^Jᕑ5|_3/Xc)goCݡrcĘ~>{f"7y,U:cO5ЦO߾qv'z` =bLvzyO{ލZC@2TzuA]j1b8~vz}O{lM:&%7 T8~o溎^5,@3b:_}ۮ73 cyv#߱ݔOzb %X8>]7s]GW ! [޻y{aOs.}v]f|/K?kS>=TfXs_ڵ̝<7XYMA5/׊iy+ܟzG}Xhg^cQY!~8]>~0:?/c#ڱw_|~Lǩ/Yu?uڔ߾2bϺ}kZWO+kܞ7p!=aD_`ѩx~K9cViLƀH{5@& K48]M=BwG `@nCQ4{tϱ߿YK~o{Oh7|(jrwY1B5.\=:yF7gt(^]>yfe9mHF5%;YC ^|l[:h-2$9͚Dg`s=W.&nqYu1LfUuN<'6Q4cD`11 Nc2i%>TQQ!PāJٸd*Ht0 èqRƮղxݟzYܩ3f; us%6C ;r}#z'' R3J ~'ke;ts_;.3`k&raqÇ2 j2Yys.(ncWbHz^w|k⋎٭_/z&-6 'BL ꣺(òy"ڶԿVIsBjz^Yc Fd}D`#]uAFzJ=j@"d-Z]<h`:K OLiY@яy-)aB[% ;h֭ D2u`bFnm@WٻԿZOG ZS&/SNa;|+N|pUQm+[F k^~])FHoWowRotAh9˞ފZQa\".N."=pC)7+4+)\zm^#.v~;XX]E:+n[6.|]0Xv씮Z+ LA nݵp!oPXh:z-!"VK}1]߻{BސCV}Jj$CkӚ#z/MeviqZs !m[%ze|/@iEfT!pG<ϲ,KRR#38\,c !QA]󊊊B -d 'S1Q*[J !US>'E~{y1T I@Tgjj]&[-=yRAa&M. a}{rw}ϓv`ZYc x( s_7yBM>a~0ჯڔݿQCwgx9)?'LhFht~_0 s7q;Ri*q凟jmƞ˾]If{X[nV+HCn;#wRS!5pzU0&@o7)Q}hl!ciC XAE8yÚլڱ b9Ʒ#vYr!T?֫R^g?2Wvczlr ^'Oݜ5Yа~ƅ.icbPlso74hW HIY,E Б_KETq]nûpMw@}!BHJQF5B(,y48ȲWLieUY8A`Eu,Y'ӡ#]0jeƣ5m 6tuk9j@ "!C6+ 8GsM 5y[~YyV*-3ɤl۶mPiùP4U4F kA"v:0`A052sNa8gU7U jh| c$l_U$XԻKetZT_ylSpО*qN~֌[vZA{e iwsҎIZ DcGwN;pwy}~h\'{W*sdɋr¤EILv'4}kt y^]9VC(m:dҸx Gvzze_:zAқx}0=v/r[7aq+ }aݻ\1/\ĕ4NZ3g?z7gL}Βe#;ovcFsQ{ݭ{vYFDD]o )tO/5Z1jk>m m>Owq"Qz5I'lS={ԠLFW{+yizD7mBvYA/?T=_laq7O9tx*McXG{O#ZtŠf:\)㧚 mިvߘq+y  g_˿uw"6z} ҝ!~9R)!PtmۮZJu4U㪪1B19> cd?||Ā'=e=8~^}o92:wUt-ꟴfu똎_>lғ_u=7 ԋϽ8yOPg]P'N5/~⧺feZA5E8ɯ^QCZK#S-Mx8ɯӃVGE V'gu_ϑ5qΜqS۝n^k|3v]muS>{<^/h8OSGwɫ:_t^)s_&7\zOw8˖⟀D3?>mG,_Z!V){Y/BPm4,>of MwjnkAzս6al.鷃W_zc0Rgg#O!sݕȍfĨl© v"x9OH×+4x8];|r+ yHV?sb{0Z-`/:_`/XHӅV=,-8x@W|ϧݻcp[GjKkҔюK\Mߔ>|·4I)r2#]^Yr xyy` Θ8B΄a` շLU o4VQ}NGiSE\W(iSpHag-M{#FnO]a9sٷhhbg>X`kٝ!X,zyjf@(ҫ|AHopkE_*X -!lx G($j87f>ͩ5޺a -"M> # D(._ppޱgm_F[cPzVT5jMιɭXbrrϟafze@h_5E3x4fBM1x-_?.߼%Ww;sɫ ܿGpivm/_jsĸR)4cUUp9pis$ c\a(JEõ B&cQdeM8.?F]u}\xpU55S_[ 6sުi?.?lXb {,]b@K xǦ<2 ՗\V'o|||Dzս72j."~ ?57aYBiO=<j}b#sD29$C?ëhÃ.X5Es!KRq\ծ-f d^yLbEQH=էqڶ](,*zn&QUP(T("fDQU݈y*ҍq+A#*B`Ԇ-"xU.)xgz͏s/mP4gjx dh hs ŸfӍٶ3WD?W\||M C.jBiֺj~w_Nj&q_6O7߳3 m7h*Y#8ȶ N 4M 8mlMLHN 338F'N)4P(P C4B.#ht:!!Pu;fYӴB\&@QPҲNzҺŪCM$C %-@&Cdh wE!Q(JٜlmYY:|6#4]1F5CgB JW(Lӌ8 E1AG0(!4b!g3sc4 PuHm $H AS ss\G240x -WWi߮8qAN|a2ݘBAaF̅i1P+8 C0m#P`#c1qਔضͣ" !$aaƒ@a(sai4M@XT-++:y&g#'ݭ[7T@%'2A $H^H.!`YQBca!E N)u-)RnjRjhzJi.s0aumbAG lBdm J A lbuI߬B1Bl|'"UU++}> #"M!2F@eJ(;1(2~ts 4=oF.SU5i-PB$H AD1!UU0T"iwxmڴreee1Da(@q@H4/u*,CCQiUql۶B kɋc,P„$H ADŽ8%c0dHcLUucƘ4(cMUf],`<ϋcL5Mcy^eeeXXyN8H8ŢqeꫪpREQ0ƜB) àaXQVz&T$vB $H A EcX)Eqsu5M 0rι!F)BAs5MnaX,bLd隚4E B I)B3mqbǜs@uMDZ,"ZN<4KyM A !I_RM]Ø:y17 :nYFU%L !Ą`,A D)A8f,J!dx9Abq IDATP4B PT " 4M]39LCֈ AeBQׅB!A $تӊgLR"R iP?PJBQ0B$Q0XsEbNH(Fr;Ns\#ZA4)Skjk8`ar$H A[;/XqMmSFF?FRq9O3_4EQdMA:vmQa{ZC+,5(̝հB[,<`s]m _5'ψ}='zyk&3QВÂoBlk6#Ug +0j:vs-v4)hi=Y4Jm-:A"DԺ8 V6,Q?W?bҵϮ;w}R \z E'~c_3_8m)ă4'PhmwYGێ<on"J4`6! ZŠvjs>gn19h>;ǡ;iM_(W^:mʜe5= ȎS?dtװAs@{E~ȇgپEP j y z 譜YWu_ͳ{2ͷJ-|Hyn;%Cll1 =7g_QӢ?‡n;[(E5謿㏖XEvC8?-YzQ;2Fmb?zwU޼i妻 ۳*t=9?O}<7qCX!m.ԱcIZh@-!y.Kr ))Wei X,f2!Dض-3J-Ŝ+ER[IKɐ>籌IMq"8NH)MӾKFm$bژ X J`&ZGY|@-PP!szV ls{BK^2si!ݗ\._X-E*$Բ^S}ɕuD6bO6QlnwlBM Z~"b;kt4,Zx??ʷ2͹/3g<;=],Tci]L #ĂEE xG:p\᪯_. c;C"ٹ Gu[#/_.9xS)wZe{K$9ۗؾm-8uUǐ|S'^XĀ֞޶*JhOb ,悃ba,4E L=:}[wWm g=:kDym<1@&iaodڜw'.쳟 oA|{BaPOG\7z_S&\~K^}F~hfzݱM zx6jZ>g>? Od)!#*WdC+Ff cX$%5AVȲ\%3Ƃ0hӦMAP^^.1+b0|>/mk/$1qd+)Ad:wl۶ ;$n-}zSu̘dҭlg+0sW|n+c. JjRjϫӒuL)-D1_XgMLv>`vؓ $Xn-%ڷu;N^4ЯW^Ы@Xv;Bاjc͍Y\[3w`O֘mxnƪ?גnj=e]o_Dw=/5ʄōg}k]47IO,I\hV|%9sŅ8!Bt! F/9aQ.ls[V%KJSnyے<>JIՖ0dEEѤ+ (8>qS'dBH㔕A82Z40 ! !@J`P PU qaPX?)>xܝNGuPUSg,s;v~oc]nVNˏ9zt/cwޢ4V"c 9>.a鲊qO֋ݫ-ZIv5%X/N>{UoJ%C{睇N{52T+e#;@N5'],e#mnCg8қo OyMs<³_Fl tF.Z8z5j^G5Q#ڛ4wԝُ<97vlKX#!:L1>F)EȐu)1,pʪBd\U0󥅑t+"B X2GbH4[B T*%hq_>ꨣW [ts/*Of`>p=FN`YɹWH<"4CUp0p'IgFZmt~$غ^D;mǟNfw/jz?$4yq]PP ![Vu8c]Өԥ(*/// mK/C EBRiJqYժUmoM([Qք$H y& AiŊMA!EQ3$ CJa2ihIr9QƊ.VZu!To*I#*ʜҊHR")iMӔ!0ܸdd@d`M A ^B@T _=T2 <ز,ݒQr99}?]0@dh]"a2dDι$4T*8(kjjcCxJW@Hpo4*r_r $H A ѽ[WҊMAiB ]7ARE#u TŔlֲ 0%DpnV̙nX24;,cT,"]%﩮w1KOq&SvHӄRk7aJ[r$H AUUۯu]dzW?@?8"B˲E}t]b$2Tl !eAX%J-B(rUUUiDZr9PiR-Qr$H A˗Kt:-%Z3MU!4 20c,BF A !!"lE 1#,P5H/LK$eZJ(EqQ(q A $h]麈A(L5/s҃L麞1ESMf̘tGB@%LF&-eBN5MHܐPaHo3R XPM4YL A#\&I6!AmZRe_,mf(FIy]ڴiqdʥCq-JeB.O9Y%#0fQT<0dEB`"AEsy**B8ϗXEH2\( $H 6V7du]ic4 X&@~+Zm;㘅teYRU4 c12gG&@*"x)g)VZ̙3+#AÞ$H `ԩ{JiEEtUlC00 CT4<' C@\r#)ȰLB!S|N) @!]DZ,Kf×cLz떕IlƎ\ $X7D zmqba ERvC) Pz} ;XuB2!Xʶ)v]7H71XRiq0c̘4 E2K#B>cKO6H$@ $H AF.Y;SBZ0]8~(c.&զi9u]1 `< BVϪJ뺬fB:@RmYeE A $hupeh>/8RO ðܶ2IT bqc*AlB I6#(^HQ(^hd*B)-u $H A-^* Ԃm2#^[[!&) -$,bQa*8TPLX#aEs\$)HQRLS7OV $HՙL4F\}))2b)vt) D(c !㑈+F/ JJ h׮]MMMuuueeT!cgYM1M3" )S-ZT,Hmö~V$H` @Zq f׹2aXXT0c.ih!Srk뺔RJ)bN(PۊJ8pn"%HaU7˜_y2eJuuQ.2AmaN<2 A-@L !j,NPUX,cT5%eEhi09\^ܨR)[!$ЋP9j2IYǜʶ5ShѢC9s.VRXOn_9o'L(A[TkH3e8i?1&m۶aBjjjEQb ,0-sU}6ZQV2!Dq,af|^4q&ZhRl Ü_9d$H!%J_0UFQd&B1~]ń`)ܑaj"( "NqJeԂ8m;km۵l@u!fٙX,4SWUuɒ:tpMhn;Am !N AHl3 }ιGQ۶](!]78皂0HQ(,m/*TfYJUp]Wuuq !8犢H;huE!B>ckZS8,M6cU!4JP $Hк`!ڰX,"VXTU!a]|j1fY[p94c9ƸspǶSZX&kGR/*G|d0sd z4_ 09[ɯ $Hu1!D]@&(Y&Ӫĩlc:ը aD00 8hDZj؆9s0^]%LbxEGQ,"!L(aB $H A뢤}BDQE S,e!iRAyyya.3_ahFTr0M3T* m1J[tsieɐ2#FT҄d#EQtBo;9` ?N6vZ[͛=z wھGr6h#|76X0G nӱ#ǎ9N.ͱ  $a2xLH"i(PR*3ǀUUmrBʲ yq`Bhys\eeeAQd41uʲ Q8|Xp H-OCW&5aw/c e'kQ++;?ҫ*M̞:) ;EAvF}ΟYp~9:]6u^MR~Uy?[o|i9'nn{m##)iⓏQO×x6K`ߚʟR\q y]zB0٤l\2wF7=|^o(3&za#Fnq.[hW 5nyi8;̡vQMyѝO{*XLn^_zޗ q:^337s'o8 IDATus_~ɫp]}>,S;벛4% eB|ҸsYJ>8 J 4 DF ciiTJ&ORfR( eSL|S@DOHQU`<|XN0"Ql؆yaMXSuddjIZe=:T y cv]Bْ!qU?aC;ow 90b,.>y<},|y q#/|B8@u4l}N}ҽ*ӟ؉qvF}7j{naċbsWS?0*%͝ENَs"M!v8]1W_ωw/w{T~,Ql 6(C`u Ϗtx ;D@>d[F}XHh q!ΪF4n}ƾ'W{7էc +aP暔o,~ǟ~G|^u4,ƃї㻟pg]rpmҰq=>۵=˗֡vL/4w:kFhu '6c}Ǿ0;.?w#<;<3O;< gt 67@`\Zu˲(;Kchi:EQBm.%$"B(!UU}߷L "sJBr]WkTMQ,9]c2xJ)m[j8jW{}}cECn0x_z v'[}7. A} ozLu?]rݐzfK/>v-z.g ?7_}yMw͹v'>zpMNI߱ o>Umw;)+~17we xg,v:[Ձ3 *8(JFA% *YE1* AT)3 MwW '/Ewu`駟[N眺uWnǖ;;=uO]}snaKod*v^xiw㮻⹊[B[kz_;^{r'N=[>~/?p_W8[[ ; TJޓR7<{.zL8焈0S+$(P(ɿ'R?Ya,cZ,kI4VJ%I x1R~Țs~}xkZpN;1i"XT⬕&Uccc@%xՔQABƀcۺ*Yp$E!8FROnQsoM9b*(8w'V/VAwY^1r[/<f}^ 7_Cs}8m{%@M,.e1EeIDʺm޷{.՟YDL0:92nFUUYkAnnb~5kV4ؖҍJ),$չ.]98k~_X)'6~!-jԴ;>k7ׯM '2eY*ɣOn{?::jN4c H:.֜) GZcn6c n/ˊ qV乔Y()$DV!DhEkHK<'RM0̥M M̙=͝;w# [==XJ)*3(KYkg8Sє*mt$ <&8!P(#^9lZIg un H`(8@ 0Ei;R+pZGD$q !J)\$X QxQ)ES43ƴ###^4fs&? !yWl%=cLP 3 Z#=h1Ei+6B$eYFH),Z8o޼p+S1&cy֚axdj%Iβ {.sazB:s ZYi:Rx0JgY&9Zxs\YӨ<q}cL$^z9BRBSY1*I2y]5Mblp @ qyc nu;`\cL)/'Tą7Mn522>) Ykx#2IkDDu] 4!d @ AIhssBaZOI!İi*lO8>n[׵1V@y!.at= aceX09l@ 98hbb"˲iRt@(X H*gBbe a / ̣uZuhmy#E Ӂ@ fk-:׵5@ 4Xk1322EQga 5y(X]6Q%IEu]W-cTՆ繍@D5[&I: w}C=6+#TSt|B6[罷3Ƥќ8Ka.^8˓(n'G\5Z$l*ìYdy]qιAp1q8"ȲZDUH^t鮻+C)u뭷2@ BHQhu a/UM`0 11AEeYu]>Nǀc*JiXlwzp{.45񠥪7|$-`=ձ;ŵ@ X3$NQQ1 ~1P9gEM$ld Ƙs R4VJVCh`ak=EQ$ƄZk,E)9P'/S4':6u2 R11kmכ3w0Z4ɌQ1 1ZK1J$I974LR 8ΒRdjvaG~$XQ)(1?-^?Aze6o 8[8}>=S4sq3-V((*3 $v###eRq}QXGX* 1 Ƙ,No,FC \VJYq9YeLkc !m j^826N?g>Eӯy`:;6x^ϾC/>[ƶ;n\lp|"s6OmUduvulړb&OzmzуcGx$2 g&IQ,Xs.˲(O9KUb5R(xtp4I,˔RhҁZv Jl:Q}=q@Dq`(]UQ坷~{yϽ:ɀ{Λw kgv_Wo*Z?|r/?e?sxޡ_|O"1Mrn*SxdrB@ L!䜣P_UU脁^u Z,c쑧c[e(6ʲ,"c FXئ65U].?uRQZ-JiO|lTNTs{~w}a^~p~>GݱQyr̲mZ.٫r잣s-~ˁbLN晊zޠ|z_|8ߟs;ߍ{qg6oiwmqwz.Kw. <|nǝ`w ru__ _տgewu=u]KGwWwL,p|xfrIgmӭMsM{VkO|M7~kW: \1Kݻ 2:_?#ɏ|>31UqdIdYeY]7a֬%a>`|tǖp0]Dpˏ㵅[ec8~9NcO󋣿z*N?q A=)}`!7[ _SrMOLL摗}=Ȕ3N\n0΋ew ;z|겓V6}^{'x{N# vF.Q_uY腯w+tkMӼ}{y/@ L~`C2tbb32:M(FaHJ @xcBp9!,󉉉)ja吵s>,`0 HmRN97 8Ң}a7?}Ŝ<7rNjM\WnFw=ʿ :V3=Huq_- øa^_} cwqJr^^.Z|^Q4fxC~a[YdF'8Ust ę1Uۧ>ܞ4ҤUM=ΐi<찊AMw-o8<[~# O{MgQl6mlf߽ 0 µ@ 4Mc.eǀde\5r88 uDZ( , TxD\g@~nZB6ieF ?> wY'~ۏ\!>t՝*oޱ8{N˧}yǟ-诖QӅx"Z1NVㇽ|ᜆ IDAT{o O:d:pv^rpUi5 ҳB7n}g||??Zb2\sO_\ z.gg xmue,7wǹ 3ie{ꏯzVFO{-G]U=#qwV1ty[V4~^CCX_]סb:fBH_hQYsA !DUU-9!bBHUUZ[kRJp m:SEki!Z+e(9BhEƸjdSVE5;)$Ox\爓½v%GdE6{_bZhMWhtŃ65G}O_}ׂ?~=&=q~u>vxnTkm0o>lYt9ߙg{F {ŠI}zNZ},]u[z>}exwN`÷-oG7V.8|}×O&{Xަg^_Ήt߄3y'>;ᒹٟ+̦.WWh_bp0޹/?os//@ x*>X8##D} sycsI[UrE/P4M1 {qX^U061c `k}EŪ(ϟȕ:X惇'|~"g Nf֬YW`u-eEsU(Y҄Ӳi2J[88Kd"愐A&3,>Ow{W8Ezb ̎~ۭ?c)ݽ{B cxLyQN+M^)(rΈHV58VvcEeIDʺW>#/ P1u]3Ɯ=gxB ,v`W$گHUf)^JYuUU!^hQx@`fYhkgŋUUqα9$I,KӴaseB~z9eY5qӪAO1Tղ^3d,PK1'5NHk=>>ޱ@ YHi=`f \`("lZ67IQy;gke㣣DJik A)ͳV]׌ J#ѓu0`(R<&'syeɚ@ _kUʗ.ϫ2󺮉ƨXDq,)c(XkuSVι8{,RJ ?Bj5v:ƅ3((jf04Ms7 c@ fVUUtllLJ?(0e3 PsB()eN >.*i`0Rb=R cc~_Mug?kx1W 3gBuXEZk5.yc]4uUUK|!֔Ң($)ư,KksPmk=&k$<1nquu4M`GJɥOA.147SJaZ("yXp-E1 BE O\nsyOzW__r9_8~ONvaqV?Zw]{—bFbG w}/|nxkXSE c ͙571A T)Um #7pB,ydH.h#+h[ !`;=X2QyKӼZ%P uD(m(1eG ʆޱg!C?j/^/>/\.ؓ۷q7p7~7Q?~gƒwq-{[i$iӌO=okDG)ioNERwQYJ6: \͌s>, iAeEzjJEQrX:4Ux≿~ᙧr=xŧ=Sp?O\K'|rG?KpN{"lpGf!<6z6Ñ]q_',xZ4F^n ]mx~m%Ikƾ[hݗnw͟ODs#wo,Zoyy ⤳^mwo8͛e>zʶy(h/SS_S_o)M>k=\@eZl׾y`>F/9j`<~+w1߽zOlAe{-!ג_}65VJ͠W,rbbncN* FQ(Бsp Mk1&Y&w+RJ̏x? ةYguI'uY>q8;bcڕ?|_J0wNg 7iYÊ);hmowZ'g5E. sZR#ӋXέ#ߥyUo\{n.x1+ǜZ׫Ҵ^>v :ϻGbOtsk^kgP~xBKD?'jmA~8_nbGɴ)nu6!>{OOZ=?ثUy.7":'yB'ںҏǴwJ1LuW٩_3{| ;O?=yG#ߚ j`F*)1&MQ\O=Y !uMUr9OSbycMOQ B A#աw+0~¿n&y.߱g9>>ͻz>F,L~xZ f>g}ڭ__p˫Gw|w\򘟍}hFkw^v><۷FcSێ{wo?k~_9K>=no>tyUvu/!Lʿ]΋6^3iE}MkS'#gbK鎞:s^:w괧rO?y}[-+oYڟZ_fO=nV:?/^ȁ ;!AťKbZhr=Ҫ8ΓTJv9KN*eT=q΁'~ddEٳg/Zj))e#<9pӽuB!7,aԆY#rj+uw[wmwhV:yo?K5WYz_9'dIkϙcIb1M:c1 3i70ODc]404FbkmǑYf)cA-βg;RUՃva}Xݪ~dϭ@|5 Lg_=Z[qIdJW<i8J L<ϗ,Z22Ҷbglbuf͙IeJ:Uy&sul =msBO"A)[$I,qF5k zv47Ng Ny : h,OA$8xk"c)[m#uz6x Q`ނ"OAU'~׉ ?E˵[O;8%w7m0%߶LW;wg>6+.]Eyl~)s;]le4ߝULGF?{fYQ&W&UeX bUI 8# ,2!  ( 쪈P`E`"tTG\{Ѐ yxi+9}b̒WE7Sb͚t'X(m6Qke7_O.Z@ luukӱ߲N[q·i[/z5?h7l|f2i>!}bxAUUY@FcM79gT,XX%Bja(*k0॔><*($I$ c 4M{uEq,_ =kWz>Kzz#~s07;U$ygKw>_itiy[{o'{B:vk¦Z;?eCuvwWM&.|imnbsOx6'>!S͓&l4uSJ,SR^=R@?mw`۱'t܊Oe:=ԋg(Cf]!VO3i%Kv:iYA56oy3Xz{_Q.gҡ'h.#)|z 㛬_{A?!5?vܯ]w^~5oݺ&ݍIi ߺg-z/osߛsy (jf z7@8au5QSe#9'}B&'. B2޸n| !˲̋GBQ-1ƘZc͉#"M Zu*QkrS95l6tӋA>{}ǝr-O>wh&hfx!~_?pև_9q~[RywB!)&y${tS!J/;gv e;7U)5},՗/d{ځ>M+~$KFmk.?tY^ѧbNsn6lfοT7]r'^~|/R\֒F%Wa\ti}N5r7v '|\OfQ: K-/0L'RV1f``l"!DJ$u>FepJxYRhI):^%me4I)8Giv/{xL\fg<|ѷrvdx3a>ぽ>Ϳr+^>'i-|˯?}Gx۹;tcni2GO?/=[g%]>Bp.:+O}*^KFY|^hqLG}[‹8 b/4xЕۖm<7ϩU3 ow ѠOb9}g#sc,{Fv4M>F5BH)圫&`;?iZ}u]e#uPxA$dwc۽  Q-d]~vuGy{g>;HL^ޔ@`cBY׵ X cQ5ͱaJ)U6NbngJq\yZ㸪*iiZc_uy((1/[Yk*WJ) xο`0>`V~Q4ldt:sGb)FFyQιFHJI!0Ɣ1,eS)5D@kmaIXkBRJ+B(k5?RUU%W@ :[lBNBG)Ej%2u h:6u]GQD!M>5( DeIx!c됼KdRJ!Ds;-qOy-g78׿?7ghJ3o=1BV^3oI{dZ d,ˊw>@t7tp̓W1c-|dddu]!gkPje !,BmSJqZ])dx*p {Yy8^1電^\Okb7]m>٤=OIҽ/%]!0{9@v[a7tW>}!OF ѧ~7mu}077COS+mk1tzk!#IK,.|i;Mi@%Eȶq7ychv>|gZ) ;g(@HvFAsojv!sˏ ux5ZsEUg)Q1ƍ1EQEe!VůssK;\+/]տ8#Yn)Ъ׽#?Ksפֿ^&/~zաd|q6yz}>VgN {}cMe[ꠣ~2!cQ嚛/MiÚFJ)uGhJ}}axyiwm趁9 FQ,K+{aE^9!1cL!2zcbU o᮱鲠EKo_+aIFφG-%𕻟.ک/YˡUg?Fao_{D3еw_ĝڠ }zොNѫ?r7U,y?CmvðCO9Sy oiiej4,cJuiZ}ңcy rJ,)Y5 n>|Y֌1=c7gy\!Dq !ZJ),ᅌq>F""+=4pWcbv'9Mig*Fsp!0_@9nD2T?шǾɹt-?›E/IB|k_t ZsCԷ=@Lo1ײdk&-ᮽO/~FSzF@`&]ː rrI?APif((lhh4Ҭ*iVUIfxyW1=iB RXc(cD ,Kp8 -'ׯ/ʺ(=/|}~#V?z.5GWNnQ~_>'c{#_=sqcymOycr?~ħ?^m_޺r}M5I4M@ x)zX#I1Zk-c$(,X@_eB~QRD+`4Fs$/'x"-vCozu?`;v쒝r0j?\'g|F7yr+w[kMo9pNj[- IDATg\קi~-}Gl=v6VT5w}'뮰K;}p~wOzr:y6R?Y7Clmų45;Te{63 }[g|O~G8xC]7xC&s=)j=K;ĭ}4^2'\*¾ZQ(,"Jk͔Ң($BfuZ0:ZJ%˜$IimZM=RB)/G)eQBEQey%u]0nr]Vx]9klɎg!>?<_e:WU{֊OgmS2BzSz.־^gý:p/,!Bs.DQQ,)Zwd<XQEhu]׵BJªr!U%w˜PAU8gʚ(DEYA14kʜ Eja:wW4~;Wv\wg|F<~/?3?{Bn>c'Na"ny)v[ }ˎ) ?[=+˧nsxgٍ㳀}h&oجw_`q'֜fĭ{9Z.l:iWKfeg.`xؗ^vٱo^μݲb`PsxC״Unqup_yW@3'_7|{K9gm?{ڐWQ3T~p>+>w={u w_[ٮ+EwpeNjg> 1uWl9? .sT5'9[<)WxᜏTUS V7X],4YzjRN2In(kmÔj֍FKQUBBȒ*k-59 !(!Qu] C!0~Z#=KN&O8S>uN3ɧ^xߌe:u*s}IKO?kg$A1KZ#p}_f]l~X!\o1@!Pd*+((Fä5g\F~SYf }͋'?kNڪO8ra:@>!Sgߗ'Nv}u-N{g7dLդ'N!K48͊&}&;LƩQeN au KrheN}N:LK 9.Ҹ<3|f&.sCzh'9[<)S3ZsDz7sۥSk-h4<D)5ef[iJ)BBst:yϙ3g!RZkIBR+GZkXg"Z BZPJ+!-u 6޸)]] 4`6A9ˉEp<sB2E?"_l섚Ss7v#_!u_^N?6h77/Ÿ;'Փޟɓ6 93\4MVufk.>{O˜TO"+S~Bd`v toގa~N\ũjNw =@)HIcuiIӴ*o$IZD1RU3kPa3`8m)Rkegf-P Q,J E)% 0fZb0 t62pcY_ށ"|8o|f&|mG|?)!S12?@~yykw #’+i|6ώF+Wnxhm SӹT̰̟g?oEdvAkB9e [S8#&.v`5"tY0c c/s c1Bx#1ƻ@D$cRZUbE# 9rݧW,?o#Ey+4r׊˯:胻ޟOg2/}~s^}?s"o9Ջ[nחl=bUwlEO!n&31^]~4sޣ'|I?:.8|?/ܰ-jO<`׌pȱ|ܐtEWm/|.駺a&]e߿Z\oR^u۲Yyhg>wݐ_ &ˎ]gM|nxio:-x*fXsOȳ|^o2I`,eIRtIZ| T>TPukk^R6ZJ)%8M Z!B<Peɲ}, =73S+~?`*w~vwFxHQ_T Ъ՛oYw(0>Vw(hF)!!Тhm@Zg(JkM)$Ycι֚B2"|XE4%+nR70#.gN8^#^ ʎB4N|;!Ei>/!p \j2ai Q˫8I[k9eO=TEQ@$r]ǫ&B1a5}k`SJsZkRjE !|h8Ni=XM BpB De*/6ioƳf͚fj#ι,r듰BJ5kˢ+R)ჵjm@RL@:7z$I8eYz;@`hƗNxg؍@ @h#hqhv Z,``@) 0#TQ1@Uc뜐l2Q aBN''㜃yqWfsBlN^U( _"@}[|=o}W>>PYtd@ Gkҍ4p(!1Bkcֆz"4M!wB9/2PJ8.!Tu#oZd+R)üsQDzcWkėLLONgq,;,4vTB191( _Hk]1!9qgk)*QL"o_(rUkL HjXj62mK+׈Do=ߗ8[|_طEO;?rK@#̋,A⪪1޷Nj08eY!J)\___EYXkb%1atP(fO)m"nB8烃yYqQDZ: 2X8k:xȡjYBݼ<x{B ԺJ!kE Rn&Dv`IJJJi%IR˲f,y,Rࠋ꯿mMצXaɥ^ynU;y>; D Zk@EN(*hB8YČ>㭧9i# G1iU !T#IeYZkYčAGq `J eLމOk>Y8@ KYB1B0(k,,V,1D[- E>GR kך(Zw:/^),y{ŏ1N!XIH]Q%ES_k u]=Aso>qY} 8F#sT,BJ Z#. B1lc,>5xllǾSJ|.oNc$ZB>Wk8@ %|.TXEn,˲, VF9WB0ƒ$vһGI歛TQ(U-Z !1rV*Ŝu>&́`1@`aQJ1>R*Vk6Vi9;c(!*!wd-(&`B`z{yYB@Q>1rdlb8ε;fRZ+eY&Itc###fG@`vF*-:H]b&xSC(I$IRUjQJE))kYK]ƸꁁF 5qϙ$@\5L)C)yyDe%&S @ 6鄲,h!nW)Ij)F! V(r-HIPJc:ZFsNԵGќҲ,squc$]jU__1smc|)@`Z;g0e!XfY0Ƅ`CsDB XR`Z*Ut:,.Bk% ;RV2(k)n\cR+lYUUA` !!@ .ޅ˧w`B8'Z*|!)KJE4JEY@fq\PJef/  ʒaHN :k*Qq%ka1kTfi0ZfiN+Ø`"DcQCtsqR:HajQ"!zjl!_s[=gYŨѲi`,Jg-HӴk)keT&V ZCTUUeVi#r9QQtBN( t-8ByUUQ eY}l8;NZ7 zHkm(ʲkX2y,@ :!-7|2w]Wcs>Ч[ss(4k !"EBjLe")+ʋ "ZYthkxFHej "ڸf?d` @ 0@gfݎɒ9Xk8c4!82kmUUyK)Zc]” !'I!O8OW]ιnռ+$Μ4iP»( c{0ƴf@8@ 'v:F(t(%s0DVӅai(P.jKQ:( Pј0gZId&ZTF\[`BY*΅tT@ fιKBb 5RH&P!SމsSJ4țyR-l6G~]nh4(*2ss( !X)e_L IDAT[kY@ .uI?ޅ'G:1;!eGf>*_ N1t$ɄP4mg^%d:i@ ]paa>Q0Jc7d$˼@b$i!9B/Ic'!YkP磣QQ(0"H {g466F){ԇ @ 0`0\-J n^ѡVh5R &Q !6 Pe]>E7.)eѰ֖`^T*R0(˒RlRs!%c,V Yǻg%I5R?ޑޫuaһyz)%!DkE!a}1ҧ4SJi0IxG|PeyCRNǧ{v]n߲ @ 0Xkm{|DT|D7$BeBR 0cBg4c\+!\+$ FhNӯe b,)8QJ;0^ZJ1pZ&@`,Y$lz u#L)cso㜣*(_RJι5&I222jV't!(Z)eEZkXEk֬Y`R)EC;E[%̻ 3M0cR13^qycMc̫CQLJwPt4s"LXLj4tvtGGNJ; $J)tIl @ 0x 7>@t^y)2Ea@,˪cZk֚ 5v.](AKiO9O+|מPf@ fo ͑DTJyG7􂊏SUUϺC,,˄qyJ_MdAi4L]I⨒1$Y*D#}n2@ 0Xk/ BzƸ0c/TU RZ%QR@Q]WYZkѵD(ɴuP" 屪LDp²,IR,XrQ:u8@  bbQp΍1!眒h1QQ80j&IJBBqR_o JF;meM^Z5##c9VqA'@`17%U;YU{iZZ<ڧZip'|sC !h~0?VeYB$INjț u:^ '5 4u:fbuW}@`vq !|DJi](9`|0o@5;EQC9W8Y:iKQw:/.ya1ƸϷZU1lfYFI k5M 3 @ xF\>1_ԭQR X9c)&2/YZP)Ƥ !D+z$^s/pYk8%o,KA\֊PNqeW)U'V Yxx7| yg}8uB("s(4mdGVs& -pQ("BK%vZt:/wE)RM#7WmQu۞;lƣ>nͧlp02'nsyw /܈?/7OBo}NA}/,^e*Q "3j1UEjf:%)"u:OstI /RTUqAVsvGq/NRIYf޼y}2-q\kޒ{WB7 !!G: Bip{{_"4::z}}򓟜("hxӮ;/uG`#r>EV=eTHd,d4NU@\@U0[5U>G}N̹f.apˤ"rxENɓ9M?w޹%E~{82wN¢rF88ʎhlJgtP,&\6(3 n#놃JHn{tʐt:M҄W}[Tw=,իop`1&(E)kY$Z3a@]l6BpSJ5tl4U+[a Yk(*s.Aiu ȭt:,˚Ɨ\O~RzӖϦUȆoZ00zcS=;tOPBl|=Qt9oOե[tgGAvՄmm޷YƘ-{")w"KbNomQ M1Fk\B9ffEQqjLK7Mg1ZkZ&4\79e]'XJieƘI!{g_ro;6'_N~Ǟy~K?瓓b='^z[m-g{w->ӟ[~7ӷB+Ns99M>!A|Λ<1&# Zk0NJip^ko*MSy׃H)ٙ!!1F+@KϊHc DRJc :QUU$Zk(JA)|8z}ݷdɲ}Bۢrgvc"bN4Sf1M35F(! ,Z8պ2)#|wawnDim;=Ve;1*x&hY֌ c4 c|6ݮ:ʲ97v W AA1f-]m[oM7Oou]&dIpV0V #PJ[`S9Զ8mAgNSAQ۶N!!s&;  R >E1@R)˒s}EQ0ƤY !i-8\I+yBB(k]d򙙡V8MSc :Jp(l6VVT1ec]uce  )BHӁePuAxD)m۶CZ9gE('YrIUkkA*Em˅XEQk(J8w{9\J猱,,s'AYd ׵ CHJ4MQƘY+kin|qmQW2(UU9aH]mzB%'"iqhm̠`\1 l7P('J)MK4M$!`Ef @(Jiʲ !t:9:禦p,h ru:H=Ai([Q`u AAEWA R:!{c,Ip!0eu'N82Q4s(PR5imr66ޣl|wPZ~P׺(*u׃!cP M  @OtUUu]C!DJ)BWUU5Y)XSi }k%9qY+|nƗLeY B)eUUB,8ؑ :'• zur&7ddzj9BHKBHI,+\.AANjr.PRL&uY* NSUՒ]EXI!X۶Iet:quq2".e]5eB9'1z&WQB9o{ʛN 0Q cu`1#_б9ZCt[ckΩsk5#q6Mal)˲PJR0EQqUckݺ\`zU"y"yTcYM#i}֜|}1z7&Wr֜OuɊdI+CXgyg7M,|3^_҉^7wSG)+NX6VWr9Mu! yzkvIf_|O~˩S=7Oi|9!<Ҩ؆`lSUU|*!9Ʌ`\V;O ܑ ʪzB|0n`B4s E^BuS{*D#$tm[Rz?6銏G&ȓ_7z7U_ ۸9&>ns]y`=mw`횗=y ~K:lLc?y~Uܷk}JoΟ~7>z_\/MsB Ix|xտ0xn.%AdgF!JiEhwmݮsZzH Jʲ,"c)%(MOO9!0sQi(MSpȲ &98VJ9QZk= 4e9r0smAѭ;ȯe\])5(JBߊ+TLY;.8TVp+mjAw!.ӽ!>7eO&+_1F ?9_N (8\?%R]$`1!d0dY4 缪(cXB : tģ=#,Kylԍ$e˖A 62'}~yT=06K?\_uvW.= 7c~?X<%ɪݺ V#'cM5~q?֡~^H9ˎ&sk? !<^7;qa`(pZ8sZsEeYv8˦m !LEQ9IβB}ݫhT80'9.:W~= ζqxhÍ=U!,y)/7yXq5z! ;BNHP1=ְq9yrrrmۅT5MRjiRJ (`:nbXUUB8!!LNNJ)0`yB25'~'/\/K>V7lSSϬul <@_2|i[1qu b,ˊ1{gYkgff)`lTf3p.)y#2BWUUI)a,ZKB@eX\93X+6ȳG +_ xo-ﶡ(Ԇ_߶܃N%# KDk*8UhBZk-^gg`( BZq\65EQZh+J)@J)KJdqeY4 Ly^% Dt6EAB$YY;Ήn4M7Mc !K'ʲg1:"Bu8n[`02a<^k ReYv:6PJ`sTYU{k2U# vZş@R)}Ƙ$cq >0lBs*Ƙ$I J&˲Q3LiaAf&B0c33PBLMM)Rʦix!Aa ci$IjkTkwݲ(,$(xA$@!ԃ(333 XUU+q   9cb!SJ%QLzFkTm {d 4@ UU6JԆRZZ)%BlEQJuϲ ZGIV#rF:ͳ]u] 1AAウrвj4Cp(2"S&Òq4*B4M!%bp(]ٓ\ AAEb)˲̲*=$T~ ifcpT#B4Z^m[CB1&"()`cZkCBAdqZh( 5hQی$IR# BHۅ&h8\0NoBt: ^}1sJ:2(q j   ёRPE_8Gv-CB*J)RyԠ7ݶ-{@Iic (3E3+`%Imue迊  c5Z'IJ !=ki w(BH)xЬ4M4M]0oVUp8>,8!`͡f 맔nK'\-AAf~hqNӴkHcfff*3W <fffm>4Mccc` MF!4MG>[9LCc6즵֎\ڶWBAdB0꺆8hkp8LTcgˁ!rl 2 RY :sKeYJm:YWs6 ŻWY^]s7W;<9c΍;׾5>`J,sQTjBkv:nK֫,BD(rï7v{;y!w==BͭIgGk6~Jǎv՜s9ʹ3s&]>1ߜ]O=%9y!XWWdo\_k7GGx~.uIƉ''! t-GQ4tALLL@35*Cy4MA(P!@0U%Xt')> m Iu!@<9Xȯn^ و<2_ ; {xv\F߾;uM{3&7rbx]:};^o!Ϻ{Gv=]V V~o-yIƉ0t0 dF,,9SўZG ^  ntCg}Bkaf|4޿˞n5߸grEyս_9d߿ⱗy)Q{¿>Gmܴ"3fp/xz]<7ω~yûSK>:_lx|Jy~\L+ѷz~A{ry]kdޅ®:ǿœx-[Hf7% W_ⵛ;t9e/:~qߙ{l}?w>Y tϫ9odQ~ǟsyP -7bC^z .~]:aO-OZ=S9Wo9'ɺ穅m/BŸrN[3Y}97.&?vo8eũEr[e_KBȡ\7]Ǣ7|})>u%!䚁~=7?-SN<\=ų+^wwcf6oKZ,@&(Ij@*Ƙ1gFgOe ^c(v}u}x\gZ4>n(%Bݯx+=?sNwyʕ+7;uןp_?}.7bJϛ+{6HwFЦ[vm >|S޼em)%A3ynmEf7ɼ]nRJKg{5ƭ߁sz>Ï|.?nt[9O7?pǯh\mD˔*r̜/yFcOsh\9^v5*ۧ5k7M_[ +?=|9V|e0J o\>bN7^,=/3׺/8_;WWw4!$7> xۮq;D;;oԯ׫WO}QBPJ,ZgUJ"&Z?Hݟ1F8M V/$I@6z||`+f ;YY:TMOOYE~_)qLL_xk+oʽbQ>tQߌOo_Xj{BBp6ڲjU3x wonOJŔb}}w_/Q͘:_+?_熿-!_>vo+T:m~ozw;ꅄh8g[n6;v3s NG_{X=7wI <12#I BҥKA[Gaʁ"=Z{.\)R 90#  dӑPǐ(R03BWkN⅑>r!A\bɼfۥ7Yn/jޱ aW~w~)^>~Xxr+›~݈zɞK- ;0<5x5_me[D=h|}nO[>tT.=7[~^o7K޺/ǜ{.=Y0̅,ѿ~4;C[[|Sn-+dۯsS?piat]<9#^y !9}xo=5:p^ya۷=xܲ񭻤MDBH۶ $ (*BH܄ z 9w'繵Vp00gB̎!ʲINCJiqAe4b/}B;bn,W'-o|_}~3+#ZO塏뜇kyͫ>|N=>o/C4Եm k! 1BIe5LVYV5ei!!D#[V׶( ;!iD)2%w$1;ߜ_cJ} b}1 [K1׹E>!sǭs` R>Ƙ8Kw!T8q !2HUUI)u]q >1b5B W$1m)c0699ep8,ˈB6Al2|}+>'ک/i'XA8 QJ%IvdC$110GfǺ0PUUZjBc\h'A6h'ck[h$jzBVFԗ/Av|08]quUuƄeضme vEQ@h4w|Jx佱 %cdSi W42ְEhyoև\)I@|ЈDi \wvJ~DyIECΥ;6dQB㽲jZgZ5o_JY:` UAl%ht:w"hJJ^ !'l{Neh Y>RocHsz<آrAAb6333EQ~0!z.Ĝ$p8#p8^+Hk   <hDQ (H$I266iP,y䰩熆ہ֢rSAAf@{E9MS9!8Ș1&8!( W`0`TUen 7 I'J)*Xs@b# RJQnw@J\H33rϭ3?W:ndVfΑu),*f|jAABJ)1gEkal Ub  1P[!q+ dۆB4 cC ,8 xc”!%ˎ{aٿ{u}Ogzؘd~5/{;g3|?VrG&BtɊ̛?z[\3\Ff d3֏xLAJB!4a4vgqv,}d IDAT11nK,%\Xk!pCs$ spi@$4zMF6cyVBkלuKޗ;/:hi͍߶܃Nʋqϣ.٫\=9sӯç˶ IS=\;o|¢8U*/麮sA4I0 !K;(um*Yxo{`sdQu:WDAYD` !hi~꺶BX8g`:0)(B@9f b]E]RJz,KZ[UdpAY\8`;YEQh3Щ<-0iB0ƀ`0t:Mz@{G‰P!5_φvpymHAAE!Ƙ4MCmz!i.%I4 4JC Ӷ;eBT]M;f$IeYyljR!&mzHXMOO=  Dpя~4Tl5rI`R8aifYR@RQ ;,B}- PDzzz(.]K  Ȣ F^=!kn(c h- !!( ʲ FѶ-j Xu] n`2⨪ AA,(1C738eYΌAB(EH1i4M iP`TQywllm}%B(s,ڶzp5`K  ȢS50նm焐i8VJ5MO4MST]B+eYRB $Ic8>H.hk붅Yps^+>(8[k \,R2ႚ陙..  Sg aԶ:"L*p8LH))%*!,)!TŲpx/!1hhZ7&&suT, a^lɒ%0D9ZB8y%I\0AAJrqzuYyG+Z[0ݪJ \휫F٢c'n h"'GAYD10& < X8tٲe 6>>.D0ZWUBp(t:N4 ecـ+L+sEQm+SU!$T=  LL7 BvI@5xBX=;H(BM 88.2$Imt`sS`r֖e9WJu] H4g;B`q.pAY\ _ޫRB\ʈ13z!P:k/FIYY'g#.k¼$@.] Nf)kmӁ>i$ |!DZeEAYD 5*j=XQJ!lDڢ(DUUR*cL 0BLjRmN(B5xmdɒp  ȢeTUUQuhǗ@$TUUuMf$RZ¤WEGLp9!h@:O(BIyq)!^ f6K$y 8t!WZ ,.eY¨#BElҥMYEQ@49m„; 5M#R(Mj˦&dU뮻u-0Zssy+ؽBО&@ :,BAdqOǒʖk)IUcTL)̓aݴVJ)Pf2|ll"ڵk !!km9tʲRjԂBPJI)4W}44M!  kC*iBHI546MS~f>333Ƙ<ϋXlY4ϚwRe̚A `1VUB@ 7AYt1iBLLL@ssҶR( NPGUUQX۶M}˲,e˖^fdPVJiWJ£,QMLL!BZ ,.Y!>c, !H) zixB.!IR &pgݺuszBP# RB,E)Zs΍1SSS֭cu  < cqCZ m<0oYysNaUJ !4M366Fx  @R$IM!`Y{&I9 k1&Ih` AAdiĜh}riATZ( ;J.-,Kᜃ%IzUU !  {V0Xˬ's~tȮcI2!'w~yA^}Xfc>c>ͮ\4#?{'WU6ۧn5 (@@ !JDZ PBE "I6;;Sff7,{=gKH2˵tRr{!DBK)+AyBQK(pFRm;8 C UI?Bt (aqiѫ3PVߏ~/4+rFtnrsoLr؛7;X=VG 8Ap_{ wujox}+|򁫼~>_ o=fo% >o񖓏>[q;{<[^O<_{wW_ֵ-k:4*\Z$Z]𣇷`y;oͱz!u~'v713Ç h۴#m^zn$:|. ior}skn;iXUѿv6jYD(ޔ|-r򋦎`XuB3ҶmAe7PRke<}Ln?iϣO~[NmVm8zdR{ÎelCҍ/]-Witϳ7OZMSGOiv{mF;ra}|ܫ=s~s6mssIrgkNdu?д酾}>ѝ166~V+ /q{w9AQ8,t,ħzN[7 $5aX,O(fH(we{# BHr5=Xǰ*,ÑFab[cƌ0aBs/bOJ_8qbOG\pX329 SJNˆsag[9CVݳJج饝o=+xdǖCh_ U^r&#K^xLf7vp]n?|u\yzw^Wz|C՚-We6jY;XGdpJ8R̽-gx۶#OstmtbPU]xC+wʹWwf{}-a"u.#jkw\tعns4Ov.?}\ˆ}Liɛary5 C6piӦM>s'R{~(sƘeYjiynYV&N/h*#aESEq.~PDA-TXsc饗9r8q3Ћ(5ʊsnnޕ+oysF/3ҳ.P>#+mǜ2<+bo.cO{﫩,{D)x]m(yV[Cǚ6\v#'I%&˻7fGo4/yjП{76NӼ>?:y|uWy~aw?F*3_?i#ts6wzgOոnm˯{ttBm:GM_ަ4 "(b RͱhyƁ  zaE*(hfRbiU 㜣Ԕuf̘[oa濲,3Ւws*{36wtFbj'\q/rnGgԲ؍gۥ̒6{UOLτ*w[vs{?'q޹6{y|[A/?e?2uyB>9?GX>gR>}啎c/K--69ɿx<L~;NcYZy!k2a;$3y<LhzwYـdݎ~cn4܄&rJ},ig0,B  :m- gT$IhJrdYEQ^VXy#"Xww7dY16۵֘R=8i~h.ْ|MIx[_ym2m&ύ<3Fs|56ڸ^?io];׿~ao[NWeYo0"L?.M$}L)^G2 /:U[=Ў=]-wf=5puv Ń衋+-3 ×T6eϏ6٩sΛZkF%Ԃ tww.*0LӴh`23 `0 "Yqvt Aj@Y&<y&c¢(7" ~mcR CXf"A T7m]]]P,1Uҭ9d`0 àgiǶm'iq©%5KJXEy.(ʅ*B>ĉs M_i%,hgi IԢ7 0Q+2 ei1PV#$vl)e[JB+R~c:MS9z Z:DcI3J) @J)L~BQ2e0 ap+ XJX\KE8 ,585I+̬6bmYEQ'MjZcXnL)J(!F0ȁyQ QRJ'd0 aq1@%BY !֤qȀqN<C)EA=zatPQ(,˲,@2 `,P_8N؈8΄T(zfR1I3Ej.-'[V4<ϱ;!@gg<`"iJٳ^qIg͚DZI)8ZF'd0 ˑ(Vh&vBB=P(sB96&&O0l4(uu-˪BP`^zijYV`СrkyefE`0 ADaYVmB,][N#RY@X(*ވ4 v\P4R$T*% _MPBRj̙BiPH}rwwy5bY{[Gc šna ;vlew>xfr$}|zoKpkY{FYW|SjC"@s׆MD@]~6'|~̍4o o~xm?no[舽"]},s3 _3QVsI)Z,kKV*!u,J sƭFav&c,5GM&?L@͚XȆhBHqK).Ȋ0497o?ۓ ʠ~}U&%]wX_~2:wb4BcpI? ϼU\/w~uv/uul?󜛋cv ZDRz)n.{%25H;$rN{lzjYW|4,ON.`0 c,R(gRTYNeY.=s\ű81 4 C7(H)-ᜧid9EhqXYp$ [EᜧiU0^s9z0iQ!亮٭ާ>8CbtC߿{E-\y(n~t ol>/82jrsE#wɦ;> }rG]/'[\'.M o\Xkz?[6Ku+n ÇJw<5F1qcVIZ56 Dg]9o GHڕ{Bu*GxK7G|ƾ*gE WrpR9ô?8p|e#F_}7 ,J)v]Pk5l0CJ$I\0i4B(f͚H8GQ9m^cŰ<a_Ș(EFMlSI,^ хUXSgI+qPPl qs߸#Z'oeYzp>lN"? Fy(+>Hc0Ȣx!9?'yAaPlɿ6Nxpս)'? 8сuTE_:V\in3zQq5Y(pNc΅'鱓SZ&d۰>N0gC?^tn?beeuy?|e9K7rJ$ic L?@BZ2ưfYĸZfv,Rz"1>NlOu@?3HK}߾&O`Coj`$׼ɉ 1^OP~03ω h|O*-H K?]B]w~)rsJ(XXp}T_ RYC5i=9ШKZ ?u◟)ώlqH 6.x Nwu׆ 5[jU`q۲ٝ]gRqͥ&&Bb9 QJr j5/tuu (^uthJz8֪Z6(miH)Tf5bCH oB?NYBy~´},yI<3ܰ{nCc9eY=}k9g[D&>f|9}{'f'7[~<֩wAS͏+6Zn<8-w sZ?*,~%4䕐ߺgK} o;4jqM I3nX*";QW|FYVT΄RJQ˲<6lڰǤR !eq=lCBzf9,+I4M]By`fzx-+ K;yO>y31U'R~?u|+Cue2۸g+N0zMIHCo=c!lɇ+Sj`/d[eΎ^yOI C ~0pǣ{h¬}XwVOr"Wcgt"W'`)w߅vyK⑁>4~BCCaɟ$Q 10Nq\A$Iggg< (6 tv]\. !{ڶ{+hs]%Bj5LAdYVwwR4,V_ 7vN7k=jgLPrڟ=RcJϑkoo?x 0 _.耚85Iu@{lV<<[r֩JЕױN>е%Cm}Q[:M^}SO`yþP]T:ɓjk@ܳdgIκ0l[Tx(hS&nTZGO% t4?۰}/`0|;5F~e aXaÆ5$|ߏRZճ\ ){BkЎ㠙lbâ(* <zHeeyWTbX nEgq;cƌ0aBs/bOJ_8qtc |0"7=[o?/Y[&&B9Fu6piӦM>ocq, @-˪j_@VfyBH#βg9OR!Rq!fB9EJk9Ep}ɛ>!)ưc &IDZRQ*:*")%+1Y.8N왥R #qSJ-B#Z0BE$I۰<O xo^[>yzgy|ez~67,:`$s+T*UJ$I 2\ (ӳyIZ̎☋\qz FeY&,˘]4MX$I?m7dٕ~ޛx_y'+I7=??u-oT^zu-?G}|O܃*XC>zOqo~/w2d/}nx~c~Փ-EάzZ,O(ժ8mi,es|ΩTY \s$Izޞ)Tk$bOF0J ]1 pRJL`Кfve~G.z䦿3{_z_7qKɿ%vp K~]tNWoF^_n#C?ql|%rU87/H[~V{?r>qY|y[<ᣯx!O``Pko9s>=e䔗gjϯ=>tL~H:6`<^͎}/]iՃ;C_f,ʕ,qPJ3C Ð9q0+R)Mc\y!fβ,tɲ ma񓦩8jP(=!eYP29S0 IDAT8y95׿Zr|NX怟}jEڭ~%[6͖~}=/>rF~D3 [h3ֻw\ # 12R啁ǵ/<[ k^{_]&\w|_[y{8ཏ>Wݽz''ԭVU[cY/P n܀Ͽq-e->z[~5}'Zg7|L^ۄܘ]B8gZ-dq-;w^5iTZO>|gg`I'.h"^xI~%6{J 𵣔m60eYJCR4m,4MGWh۶Kq9}HD)9WJaht5ʲlذaJFJjngByLآGɧ?I`ϔzo:꡵p ~ [?=r=pn <׌PחJ ux =ϖ}WaX[~v.D.8d㍆l&װ)-Ok9P+#/Zs;{P6n@߸WԲϖ[^us{r383OƷL^ B^͆>S]l[ WhѬ7νJ[-pP>tƍ $\c_+x][صEAR bqf&sn۶vZ۶-ΒUJ!(EJ)VJaP>&Dey纮h,VٶOXD\7+@Zɇoz3w/Zt-h|Nnwe^f#.~\Wx_a5뭽[jӎ[hq+>R${0z~S\w;{j&Uy6SsâC*LQ`8I8R 9QQF\JLNZJ)ivttq5CB$I[lyELtm~B;?x/9s=6iL4_u<#>3gMwnK9O\\bS|=G}}7(zSNj@_kV7qgMVZSy)aс jVQfQJ<הY$ȥĘ0%nф|0-sw ZfY:( iQcꯏ3f„ ́^xd*ʋ/8qĹy[ ٟ/[2D.r%b|-9r>EstIǎ_7"%wyFjo_\ naiӦOGg"Z1n3ƔQqQJQ$Wmk))U&sev$2۶9ƳMǘ\FзSV;S(zEΰVؐR6 [`胭=mȲk^p_A)Yꠣ3sY"ԊRY0<À, !q+M8iڜSJ0QZڶSejXbeaX(0mak۶eYZkqyaZzjkkCv-BĴs"| hD:5Xewl'ʲLHM!MY$ >Wa<"A ԲIuGhaXSLqdB8X +5(aX{|RA2Sr`0 v=tq:g6eJcUEМe[.m[k-@iSx1,8ZM0*JIB|ZI S`0 ×A.eJ4qǶFK)=ϳ]Fz dIJKC(@RFQm$R^k>yZ#%q?QΪҖf盦)"JU4"BH]p^x, Z[%H/ ҃$C G0qkAAͣx 4speIEUN cQniaBJu͂ hVQJ`3㚌0W@0?u研ymƘ,8Z l.s?hۭk frʉ8fePn,ǵғ4RzMQYF8A]!u@HZ)! 1Xm>R$Ic+Zi AAd vzJNCmZU#d]6Q,1F8nUUU=77$I \͹ԺI.p{ mMSkFQMT:BEԓRzoP"]/ *ieY 8A>sGQ`1缪UyE4fͲ WůAl!, cJ9<)JdOJ<.*m2L(yYW Cc1Dk[URۍu]<D?8a `M~]B@|rKȅͷ3 W-}Qx4'<8C,u=|?аiu߰@|U7^~3o-NkrNnu/B"˯qw7zfp>X;VmN|N<{n=纷yVK|r{Ip e~]*OwGbt}\̒'/`ݍgOwxGD^Y?{WueH1^Ϫ߰}㟥uO课y?֨}Wmtt wސu9csVoglۊox+|v?E 77*'Ml]EYwffNc-g>ޯs׽w>|{{՞z?Y_=s{'|ɥ~@;aկ}}0!SaύѺ\6vOZu/|Wxh]sxμq{wl--rk\ؿɄGsyCߺn.ev4㪪\HG4/Ur/I$/*2B(ʲl۔ \ !(9Ä`ie9L(x!պXy~꫋-g«v0Vrb~y,7 )~UxUc%l_sk*ƒBn%m;=bȾ;ȝ=A@Vg>é{n6~g'-Ǻ4:Z]4~unX5)7nu?uad~ۂ}?}ǚ*7,xy^ʟ<_;ӗa3p7<]ǂ}w_xDJw1iVxw^>;2Wh7!PJӫMpÁO>yoSv̜iׇygFx^Iy53~i;\jKc%6x?]~F‧l{uo6.?6C؜HHⵣwinS~;ð*kc li-=6TUUU5,˲<).h<}ٍ4 ,-t?!ZEZ9=g&Ad֔_u]ϑu7UPx CB_Ewㇼg~t_Z;c7OWxc? mW?׷/q!Ί <ǡ~|_v#|WOvm'\r)Z5eY .<ZI|l(\^^O >[Kx48u9XL!p8)ɦezAhd\6d{Jo~^|7&~캫~χJWA&)N&3Ь .r˲,F 1q&AO[C h5h4U&$Ijpd]"~f}|4 Hs}P}?rfem xKIAud,P犢 dLyEQPJjdQCJT[)%&IEn[kh FAD(bLdE^JC6Z4 8ֵ>v<+0d,XER4Mc0hk@&筵9dgAQ`Ί.Z 0tc'2ԲkY)#@G3e<뺪& 8c~Mog Mwu7[ybtWǞ ._a~xk9 qHSpBk3+raqX0obrj{M]c^L w;Ē}O6:ё۾>db]HOeKZ/G9 <8xiiIJBZ[ Fu]OQJeEt0 32Xk[Rjiiij(&xIB֖e!0VU5@p 7.&Nqy\qi6ۉL/T;AyvMߧر(S8BQ$Ie~@nc4-r))c;6LUUU4ȑRBQ2怍pe󺮳,|H!ʺv=OKr~i|0>ry" +gff&2i &x Cyx KdがLK)aBl އa}B"ʺv=1p}w윾y" ɤy9MQ{2b9u@RJ)nZk8 B"!NUU #c灚5-BD:0GR8.4^5'o[/o?\yN x/i]o?^zlGA] R6MEZ6a0 $Q'I9L^:^UUqȓ`NiUא΁䐔Xk (PikAczRm35'EANeiY#]׍(p(ck&82s%̹B֖2ǠXuۅx|34,˦ԮJ)!3B EQֈ9 7B+AfG㙹0$Rk͹:M}m 6: ƘJ(w1Ơ9,KpZ3J8&c(RJ%IB'cHA5aZ RJRz! xgK+6EDaG)fUe!֚0J),K0N*MSCAq,^Sc08R0Y}B0TB 3 A0>ְrs/4BAy<#a+m8Y^*12jas)UV eBR.ʺDp@6Š=R >4-ti4cl8Nc)pBq M֐Q2䂋{6^<: wdA|8r쉅;Jev,jKc)F#qcd4Mx`0~[VQ` Os1u!$<ϭRʲ,!iy^yWU庮ǔR0k{'&Ugʫ AA7 #W)k}%;VccyG0Л:je6F4M,:zkmAQȓzLqΡVyS (c0_I<ϡDȅM !{)zťqNV-}Q!߾p AeU}AjuAY }|?f9Z몪wU@iu]Pֆa89Fk^q D)*@b ,ƪ p*9'Xpe>ZZĝOC_YɷS,}O.ǵ[}FAΓYC|Y֭V \JI s9L`,sjf* DP #`'A!<<˲cPkC.~E0:mAg ~꫋Ʊ|t~ʟ|;7ro& rhKWVֲ4%fY,p=Ni:O:>Ʉ%0)O]u](AZ aBW5Mb`8ey``,MӲ,պ8>1u>/wCݿZ<񩁶$A &,se,eB4Zge S cL$M0qsn֠4MIL&(@}ne #  !p8t' Chڛ85K_xlq(e{. ^JBEAdt:J)u8<$PBt]R BiB@wq((`","i#h M}졣( ò,ыBTguYSJӫ?C ȦPֵ"MvW$1kuǓu]bՊm<ɠZ+䨡iv,`|l 2cІ C0D6"Ǟ繮K\ SMO` k` lJ)/gw0zY5JB!lR@`R+=~@>1MS)eev"}ee,0 !3E7 8x@/  &z^Q1nA,--G ZK !l ɲl0EssReu]gYq4ZE(X,8y$eZqA\0 9y*ܶmR*M'^<0 )Rﳪ3@*䝠5` T1HQBʲ,˲iP$Z;377  b2׸3sEY'jArGk !LmkI&bZ ~]UuUB@u&@?1u:yhZǸZ l.U6#(2I_醾. fͰ?s1FiTUծ+Ռ{",(Z-h|ypix UUcʲ*c#kL9 äAA6|DQyrnn,˅<΋8a/PFQJG "JO&heYՂBX#p !1]Zz=i@ At\UMrWqA /fR ㄁-F!q M`7F1/p$I@rBr֘BAdZcyQϖ-[4 Cs! qι1ƑTr"\5Z*L|$AqZʲ :\@Ya rEATU l:aVeWJEń֎n[Vr !ADQTeYNkoB'qA\9(@kTU庮 |PѢVU%= !z`0fYo&@=i 9,zRHqcP,+Ü  ?OM1>fj]X];6ɡ-~aJī^q{dy2m?|ͮWmͷsO>01~wq׺~mEo{c8}w9K23G_;?gt;=FO=G !W$o,rO:%U+!k_s O s4 huuRq^NgR[nY|(BJj\-nʙVwN` 8Գ`+cԼ M]`yOihXh&Z{wRy]|V'ƫ#/yg~ǂ}w_-[SBwyڟW 7/[ M!ڒU o y'n_G30! r q[jEQ?B"/2;ǎkd{/]YZv{r !+k"MSp&J>L뺮cB"Oa$IQRJHw0!]oמ-{٣5?:+=Ls[n:83ټr3_YFrlF#?ѣ IDAT९'~3etr8P r@ jm[l$ Ȳ< Vfg{QĀ|ߟux_@k3!qBSk9g45MEdwq] gPt:`Ak>uWWW;Ne=\ -_KCX/ ¯~nB&ZW'+kGzH膗~L/MlOx?v?w]7I옾`ydɩ^/~<;9Cy5߷qv%qmN _vSvbVtOMSCCO}Bďzߏm,/.k A[YnE2yYc8ʋ*O3/$ ~Y-۾m[5+Y!A4*Ji✇a8FޭPM[\\vi6A*6v:$IpXu_Ǯ A `QZK.ʲt$ eUqh,L&]v/L0Ɩvm1F !fXTTQeUM[<(ml7ʲd5Mk.HA4! ˪&0 !Lj! 4uɬ)qp)'yLZqEL]I޵e2ZіN;nʪBHUǫZRȲ |߇11MH)!u4/rB# } <:AA60B@-//gYTkUw̫ pem,d  !낽x>iְ35MGFycNAgq@1F)58\0B /tݦ.'F//3@6Gk-ÀAY0/ZKiZeYFQ>gLǚ!@tӑRN&);vͦw`h <%P, ѣ8-iwܾm<56p=MrQUƘ,+( 0{T`BJ)L7MC)TUURJ(e {t`EAdӁ!$IHp.۷̋($%v2l\TۍZIy^q p؀Oe!y<ᜧiy䁠Z MxAd2᜷m5zX=GFBLq91-tbF7$|{~񚙓LaO LEXc"K'r1uYu 4Eމ[xKwyn(J0 !FP+VO;(崎F@ X',8b5 E庠W-:':xčF_>^u)l<1n<9AyYЙ)BBxx2z_ݺ0?wN@Çe{$Y6M@3fff8qF,u]h|D!<e|E$ J5L;S_]|h!>^v]n<֚ٮ|8Ĉ A&!a%0.A~{ńgr<h~aKJUUܫuyuJIh-!s}ߑV5a"0fuaqݵ{bxᣟ}oqx;쯽lQχSMaAeivk \!rnn7ʧb('/߻ou? ͊z%k1+b2! !SahI(*X]u]i ]At6St=8=m\pP\y zK&gظ.}O 'geb{>[3A:sG9|]c0ƶocQf;VYycwDMӀ몵3??iBsCa4 c0@p8I)AgЊպ0R^)7opowM !!<|Bs+r) sx~`qщ[eYZ[k)j~ac=#Ze~2R}y# XM~au]{eH#Zka L&ubiz= sgZp.,6btzˁ}K:O|Φ RJHpΛ\PfBDQٸ:MvnsW㸽|?rQuEMӌF RAXkv4SYEzboH)! F056 QJI4z!l \c8EQxWU'n G}x-o}S/!$`u)/$6JC !낈5!z`7eJ).( PS : BNeVBA6H4P}8 cx۶mʖ ǎ 9F*BȎ yY{ChD} ð$ʢuٙybDpG5 AAM,vB0Ɗw:cLәL&q$88M'[lzA$IuzQ8MӪ RCP,Rv:8=hffF)5 TU!u(aUUBNCdZ l.N;!S)9!DJa^Q8"}j;v$Y7Ɋr ڜ=t:u]$I{RN&,BvAJ<ZVEcX1BAdMnxV2JYBHq)eiQ  &"XjʲL4M)Ѱe )Gq<Ѓv{8۝$IDݮ DR0>97W5tA9ZbB !á4MvPV3h  fSU#Jyy])c˪i̶HR~cGh]ʲ IZ4Md84Av1Z4} !M$Iy$0 Y˯pA\zlO)aGEQ?d !~ZQLTNQjmߞfy1&aflA2ZE!^mi 9ҥ'I62Iy^>FB l:*h577We]׽!Ceh4AyBaCds4 08cXJFU%plT:R *eQSwSוe7M,vL# \kCh+<FJ.4O3S֝0hu'%VGQJIN4 1! #NP˲uBAdsaĴ I0 A#jB\!•wժEqij)aRrGRJV GD9iBXcbPff<k4Xs$IAP5̃Pu]E  :b0,,,TU533x<&pΥ瞔w7U9 [x Y^MU0p a"-$I8nf2mXUUEQ4Mv9Cu]y!RDR0պ{6ͷG?{{?}['4|wrA6jL;w\^^rV%8-X5\]2NՋOzIlYM]וhۓ)Gk9eYJ)$t:EQ Xݮ4M4R !4-`4s(u5ᆱ-wu׉hMȑ#g>v8r]{.9k^>hLpgow=Bo$9.A̟l>^f>prguo?qr/IXq[rɫ]w铎ٺuKY3Yp8f#;opϳTw}6O9M97Bӭ/z =?oݹm5z] rJ?/~4 vm'~G_o"[զ< =8 ΥQKrq [4-Qk^ۺ0EQx8tI+4u](1ƘFhQ׵✂"R>R*wNAA guݛݲ܏KNi,/ł+k=,Jv2,7ԍ /Jcp4q,/ʪa\U]Rj3vVuu]a8N߇r(MgYk  enwܺ a vmX2dIgxy^{nұ0 \N,5x@FHJ]AeAzZ SJi+zTu<ϨOoHHjq7:<OZw]rʲ,}q]e?wv{8m1R2"?~󃿼:V4M !DJ MMQVF 7usCHjj.w]r+}~ӏnIΨZRR0i[&bs Vk)xNEkw?. 1R*MD)I6 Rlۆ[5J)J)q-1Z;7p܅v_.w]u5 %lZ:sN5c*NӓP2\k i-8zz^4O P|,1ւ2eYH)e"hPt_.w]ut+AKyRJw])0 or)dQZyyAAr4cι \v]9g\!c&.w]r(^?|ca9uZ^^P%#`ˏ?}w>}p7"1S9Ԙ91 R\." 9˲}Z=gEr.w]pgя!cDuw}s^ו}ϏO>>O۶-Rk}~~n=?~f+>.w]r5 ez`)RqK)8"zyyqև]J-t: !sek Q#D59iBqڲ,r42 \Ҩrt:!IC]r._W۶ 89Y >yj.!^ 6s5@vTDtu覈{B3!ι1mpXue2k|vaLD!dac^+>.w]r5 !c{$||̓1Ƅxz}81~_vC 5o}Zϟ?KP)%E!ᰮk#BD[pٲ,_}_.w]_RL0ZNSߍ>t>OB{cr:^bD#r^秧5D9M!"HK)d0h"BniDdEom۬RJ!o6yL:N}JiBZtpr_c #Gm Z, cLJN}{C:k"J)9g<*lZcp:-mB!ƈrg|+a!0p[;~G%\vÇ墵ph ^kuoB5x;B)s1Fkm0>c΁tMŋ`H1 JBuQTBP2sim8 ^d9WRB;Ж*= E}c{uRj]לmOOOMQm^(+K)^l#f"[s5 IDATyPX t%ņ߶ʔr1ey_+f1k؍ؐ U۶ m۰u6H쨜3 `V8)?8`/_MZc89pA+9ⰃVB(uv(hNuݶ-hooeYu8J)/`+2ϗwD(%cR~gΩnfg [su~\ddrh.LC)D8%䵼wY6#I߶jKh߯~r,\k:'K t1g !؄XVm":8n0MmF8j/ ,B :"V !8b y) .(u]Qju] ct9Vm ɲtF˶PVdΤ6㜇s*BY-KbImbN[D8R2a|um c jsEqoT!VJZו#V81k<9GKd3t4Rvf)%Ǣu-R Wjr\8ޯ9 6Zj5Ǐs)h^r:Zk}τdV_eYTes&.ॱiuBq]WϟarڏC?w٭>ڮz1ǰ?:+!9c>|?7i]s0,e9~1d=ϗe/XH^k`I 6k&cɺ۶=<<"`E {^q=vz]WcLXj&g7E 0aUha6nr81Fh^Ƙ FRρwGVPoH5{{){m{~~ƭ@f0 =!މc8yfDnX&cC1ƾq 0ʋ1 cQ6Tk+ Y@$ @+ba6H[<~'Vv& u Zcn4WwRaXmۤ7"Ctk$>l֦8\؄˲6i@u]aq~Xe蔦[2CUK)~@<tZfGñuc.tQ E?-.\@Hw5̈)RKdؗ+_4O8]q1:夅Bx1"uΉS;G*!{g%1LJϟT tJƿ|z8컮{y1E?˶m{HIQr6(eݶs;])n\\Q CغpiֵT-1fCFXh5I%j-ڨZ1*1|2\#6]NT)֚3Z9cZkgl+\)\R%X+)h68RP;88ЍByxɹQsʕ9ccRp2JMS˪fĵ֥V}6BȘҊs.TZ1sιVBH!RaJ1'\II9_..6VjM*ͅPZ]1Ή1cAN)i.4v / cU&ݹb#ǞZ9jZaTP؄x_L2>c߈n`R*S Hv`EhO)_=p9Xqm7€aZuo`]oӭm8?ngc uǟ\.< hs!OQ˜]xߞ1]˺Ag| 6C1ūH!J)h!3(rք[r ۶$qDg#Dh.V?~ſW3asV2̨:k1TJh%ZkJNXuY ^rZ8T,DŽ)Ş9K!ձ03 #QYpB餕z>`!1F_V FIz]7RJ?8~ۤCZKε$!R2$p0Ƿ.(*lp_kEQJqypf95_ZS.ؼK@ )ŔjRY T+YwBR+TFjcRl稲"RJ|u>fC'58MQ֒s挧6W:s(dh+:r*Yhey.*=CTe:dx!A`[@Yw;SpcoHз&7'DXhB1#`Ķ?- z ` C r`C &"g,^ 8$`t(سC @ ! 1n۶Ze^uy6ZWʥZKw3ub›N5 L19*ZeA-5m[1qmCqJ);kcZ3B{paR*-SJkuZI~~)B)9JJ*8) cR-ylk)oAK!b•"Xb!D-LaDV #/9\X%V \O)K9Ch%8ZJZ@GR>lDs.h0T=v"XdHQDm!-Du ,)>9r,7! .tq)BxY*cb&]5iߤ.\C.c\Q "J1ƅJ3CB*!Қ1fy9[NvUӸaFh-!%&j)()A=- |Z婵2s}mՕ#1ņ2T>|ΙRps;WjMT+")䜍yp.vöm_^_1\pӻu]E%)x)%SR,pH_yfIp_'wm9RmJ?>)bZqu6,~`ׁQJ)E+CGat?h-zGe1ߔocG[8 !(;DpnE@38n+)SZ2SRs}mK1V%WKbȉ )R1%uq6q\K`u}||L@|.Vc 1ZU*%RkKpVizl}/J9c\p.Dʅ1"ì><<tw )gu@"i`h7$B\u H9 )e)4r]~ޖs.$\緍3.8G<`1Qc*v 1ahaPǏq6[ {7b˲Yo>c mt A9,:6 sL8FZ֥fb$PJmFKABƅ6V)ϥ !Ҍ1FUJ$B;)+\뇧ceJX)D8dgQZ1F8`BJeRk6ڤey~|CPw]H1HRL9l9Έ1/)ZB*-Ķm)&b(%PrJR|qw>xgL%RƜ^_]qN3 VrI)J){,X Uf%"L|@W-42DTT!n[ 7uPkeꌥZ9-)&8~g%ˠ|tnK!S%>?7D@J)T<9St7)%x_!zk W./ 7x4BTyJi۵ʲ, A5_J@H:A)ޢZk2lLF+5#rY0<2M.60?81-@0 6-[Fo8+w9 ‚$_ݬuQAFrA(R\(- nk t@Y!@Fx;l~ XvJ1)D'a7HN)q!0 Ɂn6`5Lᯃ9L L XXaC$O^-`A[u'VgЂHG f%Z2~e688^ jK) 0UZԜsY~\R9r~ {iP61O)mw[J1Dۍh)_7li01pbfc"(4Z !Cmy}ιlR0bBRJwYJazrn7.OZ9cRpmB0.O!{||R@ZNm)S2AӬZ:I1@sSpьHJQrfQ\.I^kaYfẗR9< ΥV†RT~4NsN+Uk57NU&ϥ8|Xvn\0 !1V&IcTP i yak)1%.d Acuiօ9Bn9`VJV䜑Iq5Tr)p:`,-tEKS;8Y8@W`*t8RJ|QK,zA]Xk`[ќ˔b)eGj!K}_RrJZ|J19gc|!n~[fι:墍 1q!@8Ӳ 6׻*'eLZu?rRm]RJ9 c?B~П/bJ!EuDauV69-;Ö[ luG n[2tؒ0+aPJA׷w+XP cx~] 1D |;P]J rpV>i[x}EW BP0Fs&p*|Z,f;!x&z ijۍ)%di0hN%oXq\Ҫ0 Pq \ p~0Rʡ4|#iUorAK0׈f3j$b@- 0Ysicϟ/kcjL|<:@auZ c(^MS)YTZJ]uk/X9g1%p8NmۢO>T#svVj%cZ+gs*9S1u))V9E 2M]A9728[܄RvhK95&[!K╜*jaĮ^(l2 }(y/Zsu:SkaTc 8r)kmْڹƻ14!9oyZQDbJi!x 8VFB]?!SJ1kN-I"DPu~H)T*"s͵pD8DrRF:7|\9gN  1;sJ-uK.8__FrֶUx;h )%/[lhsVN!D΅b8)yRJ%ecӼ/==l*Z2]?˰1b\=H\"cZ/8_=.?N \}M:y;4M߿9|\pj?lRI!mſAYoC͸(CzRm)AV7cۃy<o-%뀋`wKi?lZ)>Utse>xp- |V e-?cDy:VBH߅M-)e"& Lx9ZeAl۷a}LD2J[Tψ|]8`aZ0KHh)\ )_NlTc1Z֭j4 ҪhlV5~~Ԯ1nIHWStYisZ-qRZe@;VEh@z5N Rsuph'm`A曉OUKvKXRiRqga0(3JC.KY A˼(!뻾$kH)R* !rLHZ RJkư k)xA+)5墔ZR?o%͏Cr[=z$!ݰs.йC5t:/K)Ňx<*Ǐ?Z)g 7LP+Fu]''q ɷZS%!8MCTJ)hRJH!Z(|<CůsNi`!R %+p m۬1ZV*xυI $I˄¡@%#Iܢ*`]W}eʬwJBRK)kHsƄBk}1~+co3H;S )T!R8[LvsBr.ua+r3&UZ7] ߦ742=$lMZmFSee)eJh]%M1F]9/)_.Ok.U-r|Ju@TJu]LY*^k51b tmRi.s]II !sJ).B2)e6B BuT3g">|O6֬~!0cT{_k}p~ႭE1 xIٖ! z,rfE?eY``ވ®4P[8V~ {ar#{Y! IۺsPWLIRҪЭ!ɵ\ ;-t8m0URo߲Al=0{Z+D@{Bn7neKȵB;k)5Op7@{x?.=]Z$vGݪ^[G}#T.L{I ہoyT>0%AW;9x<^MoHcNyH&U-xȵM- [Q^ cV ߶hh6^LaLͿk:h YH3P(KR~+F휽*ykΜqFo36}N9[e[Z jm`hQTri 4~Xڍ4MZie4c*mZ{95h;ĈR:Q.s RJfIu5Ƥ1"ɅֺVYR9cmeĜ1] j.WB4<4]kx-q&V܌rPJ)N b^u*cFÀBFr|Q!)]S䬕윣" R,l1ZV۶jJV*@D& B5~S,ZJ-0*nsB0)ZK2$D]U8rY|9}OqV r)x1+*#%VR1)R:^u]iVFZcO1_rk-LK7Bׄ[g؝V k>ƈAޜھmiz=<>޽V:_)s :nu!6JmĆa\hS(0 ۶/C ~AG1DT]bZksf[=U/U>׿10εqӉ1\ !>5QB[)UZ+Zx?,@ʆv[3ܷmsB>?&>ih:ﭣ `>Т09-+$B-C{K'oM&RzhaRJhB@'ϟ[@{f]juid^#!Ndf;lEm`ݏGC+]n9I-km[y4$rcJ pVeC#B[!,  Xbl1ķ 0xf+plBZ]XKoo-hZJP- »k$5Eq`+b(5WZ}-YaopsV|ukX.pRu]#8cPJ'"1XkThc)()k)oշ6ӵk+E\RRc}{8rΏpwy;i:"Zʸ8j۝ϧ0c6ZTcns39r+¶ p<ZNs)%gkJ z w`.8R!K)RtMMq(Q]ZۋR:'B-!,kDT̤m])sގ@9:IDlemoxɥZ5•R5фz"7*|a]WLe8;x|y|xvFlnu)gku],u=E:,NBkn۫x7{Tgk{NCF'a9p`37 C@;5n}Ji-@@e`cCD* nB!ټ@C[[k鍹F7B!~:0Ih%Ll3KoDh4, sb%pǮ*m=ٍC &h[f4PE,z/(u\뀿ie풇$VGV~[kחR )[>V+mmѮvLS,`Of-O-sPkm',A ([3 ;Ȭj SK noEWe[kʆq,CףhmpZ*Ͱm[g][~D쿔K"n<_R|rRBӺ*h9Z5~RNZpj2;Vp6bBt hyY).a~ֲR1>l9%)$]9(Ʌ1zY<ϵ)DVL)  /F,K))ƔgDD.h-[\Ô2M+aĴVD[/lo(ĔRCۼZ9c* kC)g!d1B !ĺi8&BKb4Z[c9cmmCF@P7!Ƙ9S197NEQ)E RZs)1)看Niu;\֊n4J)*SDZ[mY)Dt\J%$ g{O8\ ")Uʕ͹ΕRQ^!rDԹp1'-Dl%J-g]?>`kvWkZ+J)r|2}_f!Oѯc˺jc>K""Nu n訔74!5Dw˗/Z)ė/h,<_fuJ<O_պy4(vVqwlXsd[f4 -Fw3S0.(",?k]\Oq./ xl)x4yN:m k2ڹ3 sY+GvʙqRzÆX!LQأc?%hvUN* ?o8ksfĴ6 "VJ#sڒn}{ayD1%kAJ%d yps}߿`[ւڇ'i*#b,8>.I |F1! h@[pxK>X [Pߚ68x:c`ImPs#ֲ-u[r:jV aQ[*/)s{F+Ug,Rd$Rcl q'gtaFqJ $*{9~J~xtz?T4=sN36XR9ךk!(ƘK*2J,Ĉ_u~[1디FK%x*QR!\s֑J5əL0}ΔBژ5ѽ3k%=bkDeݖRK%b8Tǯ|؍w]L91XFל`|2FZT2jY7hQ/91j#kLkZ+eTRK͉Iyp)ٵ൒}1*ęnaqR Fą 1Ve*Hd21RpWeZT:!u΅`BrXa 6a 9G:Taͷo~lBR)q7f/s->\*"QT׎Cy/ 1ZV*ZKuRh;֭䬤B .FΘlggRrf !ZyOS%qYi$p@ X>~-,1U]]7/wʈzm*7ƬmO?+>~8o벤\6R8g뽟IJj }TE rb9)%ھ]^f6J n_}mQOOq!w1ӟGbc =1Ưp Cqa#3$G+Ou!1m)2(vH"`~{*1;  dϟ? ;d,sFPMy;sQWJI!Ǥc7y#=Q0vY\5!_hZ©X c#FJ[ ŋK pWUU%lUvҮN䬍dbB /0ґac <j𦠠D^@G L|H"|>3Dx1@; p`C6hd{CB o 1hЖXμs2+%)%V?`чTa^jX,kS!&:-r>"8o+c#yCwm|:N4͌imV2tzhKF2 1d]URb'0whJkݶH)61km !x*R91&(,?Ԃqm8Je#&v2;%%t{8$b)tmctn;4M%bk@4mnSZNb*(q,RThJ,3Τƚuی! i\\rda,rZWcRlNvڄs)xRY9圳sڀf|) mN)-\RΙ={,兓>Ru]yS>a8q@J)NHslyNi o@ymrR%Ua33*|hZ94x}ᗗBq!B^9(ݴ֐[\i:N)0 r߼<_ۿ/H!cؖU wg9>|s-Z׵},}aWeJ)%0"gM "pQ Y'S)o!N1"E(_&J&UE% Rhc6 /\ S0\RN۶g)1ǦkD03?| A +:W օhԋ`0;SqcJR\v&{^]:HΓW EOS7@j5zdT1QavCJ(J,X0 p.նt>A}<) >&>u]ki齹44 `'oF V,*Yq^SxRʶm< H(cJaTHeG㺮w 1}G|2=H2D2)MRre+.Bwx8-iP@u]ڶ]5,8[dgMhunFI!*c ،ǻmǡRmCnV:{'&Jԑb!u-z_W!41 K]WS2F)*pδ04oҶ9as}v;蜗Z[H=ӡiqDTJ4BI(n 嫯>]^+Vn5:ŝʆǡwn}nBqj1{P(NQ )䌥Yc64W !\o>x0a$-) SТxVZ̊"RJ)3Vsmq ǡWU5c>cZ(e[K)< )m ƨ004 z 2׀'_Q# wVVaU]_p@(b*k///XY{G48\rZYcjYus)mQܮ[a\𰗼#|Vޜ>aއQݱNCv~w>VU, gli X^Ay<&l,Wh=I0z]vCMRN#?\ `QPLC@=11uϤPCW MM8xz^GB vv 'v4!I+ q3a+Ӵ DjD=w *m۾!BW}ORj$⿐~ONs|Y6M%sP%'# X4V$0ZP1% (2ģ!gWƒ gr(p;6q3*-ad$l\x`yU J'%'O44a@ׁI J>6~ 3V)%$81XDbv1G O$S2q;}rj1䝃wy&RJ Ks1zPnczR$)H)*c[c,"|PПWDZ+[BJJ%6ʻ8M]sLǡdžR*9*G$I ١nRJ#+ Q$-Q:L>|:u*9WJJ!˲vs)E2JBu T B5s:1 Q<圭и *Zۭim~[6$( JC$h9[){c-ls.E rpfN!eUM6$Ŋ }Y"Mӎx1C߅6-mo~ݼ̩pU ]Ru]\1vTJ2Zkwm7vN!"ļHuyy2M}?i?~)].zcRӧu1}cv.u A~!Erb,DcT0(5nxy7 9$QqR 4mt`I R,h܀x /Td dˏ,cDd4񓻋tà?ID&!,($+n73^ӟC"ڸű.(y¸ݻn0 Q\"_E*4^D7_q7㯓؊jS].<{#cFTub,e}b\EqZ%2 *!Y[iCA /0 QT,<%4s(hEW26D3#A()cmk.Bxb4|ϼ9߶t:)8ǚB>46;u{hw!!:9 fqR# zk]Y!xLIp68)E)0}>JHCET Cd(~Vr[RJَYR?mrL}9)%eR()j[y甒FiU]rTBjBd,iu&-ضVU)9PJi)cJۦ;XݥcAjsai)1ƖyΖeQBw) 䤊4>ضw[Uպ,B tz|]W ӭ9mۥ+)c״9&4:?i~?Dg(}CnҪ0/8Ƙ¹2y4,BDLʘg)qy!DT6Ztf n#+O>ƄӀUkERkcόqn>7Wj&-Hઝi {y8Y-^ve]qJ\.׺s[m䶮߉ZiRA|Pa?4kCۮRb\.J9qo 9šm }v|w;x<}B|}IENDB`astroid-0.14/doc/astroid-editor-emacs.png000066400000000000000000015225351335422170400204130ustar00rootroot00000000000000PNG  IHDRۡsBIT|dtEXtSoftwaregnome-screenshot> IDATxlێ-I#v uDHOz }~?V$3:;yDS-.v](f___8+ ܰVBe!"9.0K[o,` 0ƀߨ*3Cfu(zU9Nƈ 0GN`f*d 7?s]s_`L-~WNx8J; Zת/"0=3^.^kz sCD p3548b(@UaUae{N> A9 +cu1>c |}}L==k}).xfV޺Kカ>9 cwl}5\ׅVqMv)0L K203d9'%'3 o~Y|puͅ뚴)F;f8c];c9'fY !pU"ʶ4sJ߶Œ>e%[6[\3dah9Wr-c a @eጁ\k@Y8e0+X>X0s@n(de H+)mCy0 Aq,ڤ80ޝk0>݈!{\%T!:||T&R2gf y!1"IZGXM]'qwX.:Z wm3a0m~7mu]0yP1=(s\gVvp.ڼ Yk-h#(]wnSiiBJʬXU0 hO 0(K:aJ\`\s"F F`ćfr5ij.yεf&* _k7hE*5wpـ5p7 nxȼcasPq_k(J\8C:U8}]KveqMN42|y\%5>t3i.somG^C# 80Z\8_1_D9e#~=O_Z|U|?fµ7ךXex'L\_2U s¬ d8(0"x 3Ϲ`+0À_ \_]9u_Ia@`ׅ?( 'u-b*J85a ϟXqJ$!+ٛJr8QqkMJb1/+ǁ0|3a,kZ0G(F'.@Īp%p!a#6.) >:tcc_~Rf҇+.۶uND ʸ;Jp_=>l;5^s*+qG@/Xk' ?~5Go_ i‡9 ~v؞1I*̵Wd<UZ k _{?_hk8`0|e@p㪅~߻N Ɓp~u݇9OݹT92:5'pF7lOp+ 39{wq"21EZ(GNh<ƋyF y;2圮x,+1ˆ@f1v A],Wَ1Jy1yP zf?3pEs^:º\n7YkC}\ZB2Cc31sSwNǡwb|:_I}c^9dʸ s-X=rJ3@kUA`-^SS)L넻!Wb/ .samSsւ)L!3vNs0ޜ1W>,57YDu4;W+# <>vjvf6-ȇOTr-@5qZ9S*^/Lq`~}@m|>8>Oݻ߯, b~~fpƯ罾cZЎ-6]k/̄~޾on+7=XcoGPk= -·^sM[sV"!4uA54& W*#h1p lCu]1%ܙT K%d! 'tL[Q@QPfNL0 fbvL足>/ Iip{N.1j T%85:pG6@esa:U\@ߕej|ôI$wd[v=\^&f,`_h 뼯:lؤ3WqGI@*ek;/9pǩBV1grzvN"Lϐ.T͌Sw,Dƒ].(czuM Lě~gn_v 7;v?uւ WkQT`_dC{?o$ڜ Vqb^2Y9"K9k-X+eg{51E8j[vrrtĚ?쿍^ql_'q4Xuw8{6$%Y168MӚ߄JazWs#L75u'fXI<ߞA e?s~=?ΏZxt}捉~[CUϝTd)H 1Nj^fvZ8TYL*CpXCթfFr&84ʵͱͺg/U "[.̇ɨ K zB6RlhX:b ך XD3[A< BԪ$pm7֬fo TDt2UzSJ Ľ bqm0K)EfJw#CQ$keeu;gրl߻M(9؎.p0-҉a ~k yW>܎+ ٭`Z۽|kEV$x-$)c XΘ,N/YJ\JqlrF4 zJ $n ,5Эt/{TW؎I s5Q.H * _́~|Y˨n sN5Y xqϜx/v w Ȉ  /-0 1bt&K,a__9.嚾1e2µ&1-k?k2 ,v(eA;U}W7ȮP bڜ,*MYM0so R`;rc٧yIgqpM:1rK>5Y](cgZF`sdkތT~s V6wnzHN$ $+O$YGYy̝[5cwp >`Qd*uu9obܱ܈PܷΑ| .%@|B"߯Q,#`;5'K/d' Tg|<"THϹ`Aݽ\xjzO :u1ȰwDK(9Q;?5ۯ 3$ĆLɍO?oz_D'̦> !*7^Ad^M|Kv G{/9GZuD.g9A&x?&9"ԭrr&2z !ᄋF?ڡq!&7۾Qa`+W* MxKW;k% N)J)x=f6vEL&vb^g1|'zXĀ3@9@6HI o1ƃ]!]6zܣd,~Ur*Nշ,aP-Y7}NF1\d{2`ٜ~RцjyUb Ezn؍>UVzJk= v5 2$/|ܺ@{` @liXdSm.͗;u{ȏu`+at+KN$H2^΄.˺9 j1۴ rBe}{t5$gC纘cJ_LaJ80'֠a oohlGt0^ 5b[`ʹ뀱)D!,!Yd>Fc%\emqܭ@wtݟ ԡ*m]J?1#W͘%DUpzW>n;`)iu-f?'[L?W_:F2a@CY4Qc҇qH3!6c zqY"Z0.Pf 'n14per_CJ7DRWsƢsJ׉k`8Gd Ik w >W8hV̂!;n/xX / ?iݱ=M# o9cfi[zw 4V8һsncwډDHA>ګ`q\lwREM Tuu/zJfU{|IǢm#ч= ,tǐrru``{Scr۝p|+x%^lJrq+>0wL]^sM|rؿ# %}+aqP18:Ͳ7`[+vXrg1[~Ϳ{??~qBj<{&W1Y},mbA Esw|GHWvX N+)9/`1ss+ k%dȿD(n,2 NݷUx"ٌ3dzmhGH5|er8rlnx_H(O䥼 _b {3H|ERZkUG0ﰼ H; sTmևL,3>Ixf`D/g1a"_.%b q3]$Y%E]L9KcA>p#(1@ML# pc^pg 8sn]N]FcʁLq@(25Kd{qsіZqff^ngne%fYK9KRaCKr} uN]4n !s9e&49JC"͞ bQSwD,8:ϻ l0?eGg Uџ,\91xLou8?j Xɑ= e3 LG1:NrQzJǺC]JcFw- 5BEfL`bi_weR/Gn;`pN/. IDATX$;)um@qιIHv 6h!90lV7x-UucT7h3oss߱vm~oP; ݕTGIޝ}sKKר^Illo/Op{u6x;{1o^s=n{!;;ImDPd&SuBKkۧm s~}!$^k[5ogNZ=J< @k ь p5, ?Eκ 1`ڗ~wL8le7'KAaR pfEW7W% Ƅ { ݢduZrVLt9JXR+l'Ts.kFfY|#rkۄJS@4 L>[:9!87m:3w2r h> XXɖ9mg͑H1N/gQRq1%% p(.2`cf֜b%SA ʖU["oQV>Y`'TJ31xVao=Wj+,6 LG\&`D3y:1WU.twK" , P!љT֠Vaꅅf&^8|`jwo q՘ع2LC38|̩X4FbSBŤ], @2XȼL%fiz G?XĶ -.zlb Tf;fX8R (v] * ȫ F"kApç| ||1db#2@25A1BvX80Id0Z /guw8$YЙ &g׼X@k `[*sJvM Vq~؞iJ\WFwcqc NWg4V/@+&: <_?WY&@&Ydɿơ11c.jt '?xȬWe|-'G=tbԅœU>Ʊ4b*0qCkg,i&$SVP.oB1WKs{yXsɈ+L8N+s3|';;@2ERvN"8p*!fP uv F#B"NQڥe*W: S[w6g7+*DF>vXT1y88t1 %ұe Lg&?)5b7$]S:]P|m?t~=V4F\sW ?vMYxR>f 35I=6kbqR'f?r㉍= F{Yq7&EkEei0%vDm;* "@|s\dI+۰ɞbf?Aѳd: |agZWJh^qdAzhABd*oS8uxBP Db;gU 8%?Qɯmf݀4fh+=wvj(<'9Bvdnk {L@~!RhNYw@Ec K -?(bhfb!Ϲ @ %k@aSd Vz(P>Y ?,QasMsP\IW9y^dLx 2cW}w`E2bCAXc`&@.EF!y}Ky]#pT+}s]kXE2Hw3 אn42~g.,DBNp+8acp{^\09 ̺]Pf3kGJܰ@yw=Yf.v}ΜNj2B7|]o̗}10Km)pNP;"qrs<W2L|ȆVL0\K.& 1p źšSIy/ @ȸ@5;Š, hЛ'4g6_"p,Cj>Pα_:s /;`K#PϜ<$3KdE=9 MNW:`B_dMO9 p,㥃3Nk`!}6L۬84AsM9\䢺Şx+=cpuaj\T| 2\h.)*0+ Jk߻])Vl EfPP%Tty'Y}!qxv"D#jX87waWRk b&7Uݱf o$Yf$q7b8BS}.»&f><\YGta&kII1)hC@˶G>d0Fc:΍=)Td7`?Mfqa~wBY}*zlu9Gtm#xuM"iW=.Xs(A+8ʙv~vb##Uӛ8[[ 3M>5;c8JqU`,.6agFl…bJ̑5"ĝ$>.Ѭa>C8˱.2g"v>Uh{7КZA ѝE,\8F3c |+?lݝ7mt'nAwQẦy<3Up:l^eg P W%^`ar ~uώ,#c15ѶьV0t5Ls%s|cS:ϰ .bP{ G`01X7hȚ;tZL,dho[s登҇z!Etܙ-[d9懅!z2O!yRǏuu3Ad9/֞;ùbƐdc V=7f0B~0 ϫz8+B}lAY'wU: laB1)ac`kʞPB  ,K>n7%c 1k SO?]jC5YxvPEqI%#W| &n7p<+AҬ#+/D5K%46;Vktd߇Ǿ?RSI} 5nO{.e_Cfb+۝^+b4xpDqH+88O ^E֛vg|)>;"S={c`:*zuvc兟u6<ʋ,tHӝ+6B̸rxfV9^u?} xcP;9Wy)@h [eV)ck-Yœk*8cf:sļ>0vcPVU8n0ypiz:yXs0ΐl|=21'No 8SʻV1u81!V@S 5ݶA Ç BavfцU=b'^t0cЀ:Q]O{{D)rA[+isv ض qk7ЅX@ D!v,P<p>z`;Ӽ/(؇$J_ , ejΛـW ||p'ңbgc8J>߱u!bL}/pt,$@C3H7qv{,M XOa86,<e89/Ƥʵ9`3_z@1$ec={rzlI=AW4[86ivvm3Y ;Iۅ荵Ά )pp.A`SWF0OIF{ݶ?=ZV) k*6ݏ=ާϦ?nPyn&M'cKL%&pC8G-jacG8T1튩?~G k?30Lnt0nyD:O(?ǡ9%G n@;/o[ƚ6 MZ |L 4H]n+zOz{!'ۙVbd%b? |-djdm~_*V4n1R9{daV}(2B`оf5c}׵gD*8Ԋ;BYU`v82ڣc3Yvsq؁pҙ /{&x9d5#<64ٕ9UÆwk|ϯv71ʀ99>6+@=pwC 9*3gis5B֜0;L.[-J2{{V*r >,6sx;GlwUqdm,zvV-<]3S>@Q S/Rk' 58yV_^F*4(!=+{ o'"nfqVhj_o2dyݲ 0&) t+e.,3 :_k |wAPd;+/yw2Y˖{pI8p;g뮇> mm;U9ƀQ& <ΐy:`,G8=Оt%xkQ9Q Deu؇V׼1b p;);tQfb ۋY]Ɂ)gJ8OP녙FfLǎ}Ĉ) 4f<^(l  N6=39"k>}Rl/Pz'm'XzGÐpG<ϝ ~WYo*d5xlB4Ç K?sBF"+49ycSwAOp*Vmo8SܝB} /%?`|(O}Pp(B{}.O>H+uǭaLگŃWTT.O\Lp(R8S%5U,꜇@C:SaNP\so8_]eB5ؿbZښ^q"G‡3uv8kKۺ2$kMpD.121ox1E`cGP0^7P'819mLv_wQd7Og 3qs[] y ڮ7BEQy#N,G`d4‘8%X?Tž w8ַ^s ;h#ȞQ9oPeyBCp97a0=j;Rt}+;G KlqH7GA~bNۖb+$NI[vѤ `[F{z%RN߳G\v'“kmtxGԽmJ6 @c!HF^wިX{]ڗ}~w#6C&^Ҙ ( NH>ӬB|&~~|힇Ƿgxw#J? W:5ژSnln^vE6Q4v &nkonݣ}Ȯ  %;}H 8Oƚs| gџ8871lyY+FtdF3(m'\79G! Zt~@S^:`f@y&ދɼJ}vwDtKi_ϼdP fi.l1nx<x>X8s5ץ3qFkMDy^LF1Q8 B8RkYܠޡ$,6s{!mm}U5&xlMlY'>Sdڀ9;36K]478۬'3cAAf0GJ#m\"[  +p淺[rd ш>43a&yIcPW]bj0fA`b륤73H.pmRAIyyq!o)##?V O?/Śdkb衘s\x4bW)^o*jJ'd}#ŃλyO6ss *DD6- syqb3 Nw ~ \xpiu wu:y1Fl'R]I,2pq`ȯX;(+&5M:1l?<]hy+Cc/gG~h8a瘂'XxPugsc"diѐZozp l>}-Rs6Ff1 :Oj 2{pl522`v]JS[Pߝqv_˽o63so@dlXջ$x'zϳw߾~\\ctt'PbPM*ohcJ 8bTTN̾PJ^[zT JTOn\`pa_%ԁ뚻 Mu*5'yrh~e&dM u#x'@ˆMGh Q؞uu!cEhiNR`a|ǹW8s YTxn6b+.GmL@/&ҁ)nTq`J"p!iy%]^xMs6V3j'qVA{kǾ;H4Vx7xt^+x /@sIZxQq$2|',<˹ɋ]̈#q_LIoNm"Ð]  t҂(°LFKtv Su6e-WV`Nj'3jp(\ɍ\lURTIJbgwɍ<J!Vb$17:b\@ދauj2bOȦ b䁔Xƾu4hɋW|Y \7vmTe &zջ,g}ϖ$BiqQfӀpSP!P51uHqFi }Y{w`Ώ=zLs8@P5 fw1[yqn xjb\k%yly:U')āj(17& 5t7&``uUZ+/l{@o.Sמ{pTdf}AAM*`-qtmJ1s I)n=>5/-:/X ToKLD$c\T \&b<%g[~Fp3oU\$צY%؅jMbẮL%YCj0@FmR^?%Hp`fq'k,Ma oʛS! HBVyd ?hN2Mc3yxZ49;L|%U /u$;~r 48wxJGoӫۯ/1>ޙ36LJuIVеKgJ G"sy-[4}68{N\fXx#p!/CQ}t#ЍÕS  ?wY6Bb^:Bk!#6 O"_D7g4Y98:<~sw,Vh) _Պp-R X)ZL僞_s"q zVS}-= {u>t/ݯ 04^ X>#p 8(ucM޵ Ƹ`d\gڴNbYS 9H\SeX C9f-oƵܶ@O 0TXI͵7n+pt48(0ÿb  @q7VeSyVFl30{>WEEӊ[*rG8GIq@N0.xkd{ɪ/e>;&\囻aNʧT,o7z8e5@ zyE&NT7/UewrM/&7>.@d3f_5%`T6Xa>1de Eb&[DzY/b*͈ 3㓊G楊Rp3AP=C9|*cܶ kj@ +S|ps,,{K'٠$:Xo@L d"0_jy#I l$dͅ =uj}ιU6e[ jD\"Cr,ϡp|V gAybLW~0CXjBT_8" /{知ӽ5ᅳ.5ξo3( ?m[YUo $p6kpGwM=t%zTJ7L`mP7k7KLy)-vA3%H%BˬCٽٽCX妩Vz&zd W;ơ\s$icQc1Yc8@f虐iQ6еfߋlpÝUyƱ> k%Z= ?>0ʢ{'Q5kKFGI(whYllhԀz>7ه>{j GȦX%Ʈv{}oݳ(hL9NQ3@Pf̍V)^$*E/<Ԙ6hۄc~^ſ~. {]yA Z0K%ɩwYN-k* LV3~t8>4 c-?fuG ܱ~I;o )=t$ S@qXM42ȶ ,غ񘃏ld,[b+`!o=5W&jcRG)+nvJA [ckBY/L޺AL Mɇ@8c)7') %ekUHwS(r$ROyV׻4&TYcJXD^}='k w,qu],t`(q([)PEQ"Aǵm2*Ygs!ny"F, vz)'k^h d0d3۔2:a5@'SYV.:H234 WN|i[|Pa1v'lRP)vYNSEW!0ʡ5v UhY1q8Ρğ_8NLն€_k X$N>h}3e!,a!1ڸ _d#18QCj/&Y,nkrZc}<Z*Մܣ WLe ږ J \歱5p*ЂMX5 iѓFߐZHp?K>մi0t7_p%oלdA)y*29#WhAjɳy4ûw$Zrxds>S+:!9s D TƫаwZ5 ;ؔID7;fъ0W.C+hy&~_ׅ\Xx9րt|E8o)k@k+d@?_׉>_lLK^3zn;b_wt *RƁv*C2xDG%ĕlRa@0jH8b7͸f~zYG(ҹu~-P)M9y!ֵ#N:?{:\k]6s&́M7 hi !Vg 6(pT8Cy7.sm"ˮTcղ bDUӨ.(mvy7DŀO+6x†;-5㝸xxz#/ !w`Rn~Y9&] pΰsV_/\a+n%xg[}4aeEjRHԻUؔ,V1'Tܹ3mʕndsH}_< m= J{F̍Sހ qHku\ս'\|0P S?/0e;#.Zkgeh 7p&YR$G8d[5f^$,Z;w IDATsIts߬uh_z/֬m%0Zű;Зg((00d`%dYK O2lKn6Hȯ NXM0)j$[@o שw]705^n|?t?}`+ik k*)kHW,73xxl+SJnc}uMf`'HY Ēp6Y*Aos-pF]8[OLm ^'YӸL q37s?|B gl!wr$5Uܸ&HIZ;654BR(<9A cvc*;F䀭 Yˌ,n˙jε$U^EKXͦQ 8cN^0 h_FdIJ:=n^iLঃw=ס6 AtQJ5%xgi{-|o[ @}O25PWZk83p!~K{^"ۣfR$oxVޫˤѪsN}M4U!6iň cx;_[yD`c_y'֕Wr*^Ývl&}R./U+vZ " m$Ki k𝉥u6Ö [!0YU\FA=(jFU $cs峉9qvfԠ>V|^ zF2D]Ióz:*Bq'3CԙnԨxJ`5?>y],R+8`Ӯ?xyrK:z=WI ctƱ٭w[&yMkuT|^HD=V~tI|JLNVW,m7"ȼ&+,6ݥ 0ŝ [Wy5Ypqa(_Lܘ:Og̹ڶ'8aΉx!c'<?x[TYfr !}C,b 8KC ׿\ _!L~_>[ HZsO<հV-y 2q 6Tgj>!xb=l\0m9:5jeO ˣU>+ rj8?)y/Y/8#Cduj±P7͜ O? 3k #>leGzb!_5y0\kR,( aT~Rf]h+f.VLz&&\DX́uZ*_lRD 5Pntx9/ szޚe(6luwc F`x;LkꞀŇW|j`5lOZ;OVM3'\͘,Yu}Ҁ - >{`I2f6c:^5SYt)T |hgeRFX3uZϣ祄KeYTh^~]b[H SUP$%qOC˛L^54(ud<5a^덍mk03^k"ciـR}x/q"l&v帽\4spe'o@wj ZINTj "rf ){dʦ:nYDS؀c~(E\ ڈmɲɎU=p7_[mm0՜{/@RTk->ӚH;ne۫XCR1c횑YR S#:Qse\dl'%YtpafnZ()moUr4o63qtOIo†j;&x^4 @ y 4;h˜amT1Ɍ z LEJ e5oUA!,V.2myYMb76S*VVml{"{JQHk8!cvPApo_*?}p'2K꺚L# 98@ x)5}5@|O!Ug2EKy8]im^A zTi3yY"Z϶/@ֿ%^&l$p@ Ŭq8 xQrlLw 8n\GG7{ \fO=fY2.&,Kup<:sRx-qϵhm)LLf*RvZr x_[uJ rH)A֩@b@3Ts,<~`noAa4({+li[eJ$$R4`7i46P2K 'ɐ?jLsp*{V@Xsr[dL Sd{o8ENK!60%^d&T>=o:MK:˖g=uH׿A$0LPS~i95rW [WӬl\b|j.>Ts;缟>#8]_Ep3 ]M^C!xhiƸ^\>M poE*LzTQ]gUzŞN]WGc3;&>cqвrU{&Zkmаhe4Mi)?eY\K3Z|ȋ.{c(lT86z?Ay$PȂ{w o zwUCaגw5EZ}!U05\3Khw˅ӵ;W< Ux>YABw'sw>~݀8MʢXM]sm;7=;;{غX~};߮3?|vCNup'܀f)/e?Ze7 CՌwv;[[ue +%; j%)*VrLiۗҀU,j(Ǝ7YQׁ.U2.Ƌ!X+ƖٗςMnoR ؄}; <g2hOW24WX: x B2zkn_4Si b؃o7I5q}H4S H {mQkbmۖ߶qZ\V2SՍ.r <`~H{m̄bSšKTZz+Rv2&VTN hO lV&rP$lV}hf*g)v[{n5,/+Z!F=@# #QVd8;qM?ްFҀ&0`n\wCZ8|3$䥨}LxIͮX٬dމvouѲiIW.̘ h o%%ӭ3+eQo@Ӂν``c Ǣ(!?㚓,Yd^&sb] 5!jNRyibi/q-~FanbSVpeJʤP 8&vsKN"cO߱_@+|<E&.,;w5C;48ϥO)*[:` ^>5pt5HWs+K>U Z)F*"9푌:ϥy4Oq52 7 x!ܞnTTn܍gӾcaYy@wYעb>ÁN \+XBĦ=u4"qZVg@CB>(rƵnp*"@:76=axAȴ0׭5Ii 'Kb| -_~4n-XH'9~5m>R70N|/Za1h B5sř^B.oRHW,DX\#aYE.«1>OY |npQAu>)"Tq*/Ū1Z8s~ 4mC fy΢=W6uʚ[![6O5\G"]U#00V\@gnoY2t|41;t]֨@{ $7\CLcفT13?pz|k-ց5idGpuם99=Բ) {>3 zrN^ X^Gf aD2~7~t;4^h5^ _q >ϚkцԘj_q¯!dQ*TBM5Vw3\G#Pݠ^c,ƷbXʒcoivԵϛrhڕl+yYFbΓ`dߔQI{<d6{ꈪS`v:Cw!bI Y0T쫠u߱npj,߀`n|/SuMϊݶ{ ~m Z=bvkhvl]Df&qa#@CկSu9z:v;e&Db6a)T3 WA\+m+@TdwߵEAURW7n"(tP~By4}ã&P 'w߁C#52w,oiEY+/?ys/o`gsyfߛ&B}Fk&-VߧL_THL%:MHwD>N]EQl_JF2p@b(3"j!HTx"*ٴ -c8-o$,aku@fal3uMB!Zq{xPM}%l1:H+pAyt/_] ່aZ.5"dQ3VMAv78|H0zVwzdNt[BL" oދS97[}6*BKmptUN \+63V]u//">91m08\jwwoj e`IwdMnvk,1OANJε>&&/69즹c4vEʅ1XhuaSXu)ץ5*4C@#Űˠ/sy?ֳ*8ơ`+0qeyNCk@.OIJ͐j,.ʅbfzp[F3Z(Kg9F'3m-4a`U,uq +Λ Hh{RocK|G'7@tʘB%Nc;=ɒo.;WgH$eсL|A0m96 @:~F_ʦ8əKȝ X|AcplC{Gw.Dkl6pgA. SI DyC)F {F0p|3#j.) ~)C[ 10dZ5necSUл!Vl} l>\Ϲw*V^_)ix ^F&dxF҂7I vaaܧu@ P rqx݅~!O &;38=x"n/9~lp k&m`lx׺ ͅ^ሖy8cb>[wÕD| KRC_O)ـe09sF>_knXg>qoƚ k]/5jb8hFΉi0SLVJ!mXt=3h|G43>s_xa.hXj|T f ,ϭr%i*:^"Lt\D: bp;k"MaEYw4|a`bL \x8j e nMuꤙN;֥S%P=ׅd _<X3|pF+ߺa]~3 $sWkd%7 r  _ab , ֝DM 9Ѻo&q-[X6T:sp:ի?D.dq.ez,F9~Lmk Qgj\g_C+Rshx9,O3sȘ="DGY4J>:]CXS1n*AvF'_I)pa(D ,!ƈtT A| Q`5ymrJ\UxܲXdKR^lF8H32BNdJDnu [n5`Ȅ[3S!RbUAINDD@PKT$ψLZa띍+0^KeeNuG[6kN2 ?wk($5TOo|Qf:B lڑ<] IDAT錙7TC] Qmt[NxmQj7,/q(a7/uU+;oGaKJ {}7l6`(T/X%6s03$%<&v3aY>^m[G]Z0ɐZZ&9+*Ҟ|c]{@+ܾ{)<gzJRVT('+~,h6j{(صؕcF2`9U K#)﷽.Yp +֎|~55Ok%R|zQhCϽ24)6wI43>`+nR5C:Ӧd:)&1Q}`8Ah|G!+֚mQg֚J*Y5\kq'7:pXQQes[4BY@<X#@l8-sĤe/P4?p+V~&H{pҺH0i}i}15zBIM:>ǁW1md"t-d&l 9}CiwF|d8NȦ4z$: a͈O0%U;2}b{آ9v_17qn:?rT.-ܞ~uTzk<x_,JYu3hcpؙIߣњ⚓9شlӵp]Tg{|֎o6MkDzW<@RL)c 6t|om@a#.>^/1S?u*LzVW ;@ 5 p}~|:lx9=a+(€s$-"E)*1D2dvzs6+U QuK ??>2\ <[.*T UR)46EŐ0UPeA2j ܇c Q8x Y؉Du{t.`8D !,h˓F`h"{^ײŔ.K-w>A?n6js>,@DNI!}+Ɇ31а`L35$K]Ե?9 l 74ĵo,5A󑰕̷jZ)ˆ ϵ0D@eG?Tq3UΘ{v,je2,pMW8v|/ ༆ >S5a  \=vfxa'>@w .ʅOiЃwl6UDfL| Gjh&ə匝RNd$慣75Tl<ИqsbN?e Ȳf:IyĨgj :kՏt5Yy?Ձ(.ܖI%\CkMά]5汙ln3G4[]:7՛Nʓp 1U |p߬g:+8# GOzes[&xھ~ӟ?<!~_}ww31qZ3;BoubwͶkdLbdofi@Űo:|x`oֶ.B ֥9wcT5#HmFҋ:zυ[|_>tqyG{zA+,,mjNl"26Αx&2*fIPuf ޷[ܿ}"7p}?s@57{/R$.|0W=y5.|Pφqw,Sooh_ H1eL_ͽ_)+0sa(*^/BF͎=7&oR0TvC&MtEh 0 2I%5^9!nz$ V, Iu> T}B}'BIlOʒX[/VRs@IS.ɯ9ҷPS=|XbR&6].Hn@Mw#ށeXTRDQME U!\ *l]o1Y2a^sm fR6{&6^5wx3jYg윙AДX\!ݒ7NF ]q %cp(k%L+!)}=J5E dbS5O+DŨ(;xõ\1=cy8*K[CS}ZZۃ* ~J%! X߻>4l:os-Vk )j(6չ-Z1szkRC=֡7788|WZ5sx$_aj(Ux)vflO5 Q:䉝F Cz> Ks1XR; H\Hǿw&|m4*ÊE=Ԯ.%ŝ{|10ĹM e?Ty]{.Y΃ҥyld%l]3=hkEQ1:,bPCm£u0l +o-'Gq[H=q~pڋ^Axxk^3u,q=4Ϙlr٠D(N]n*F> @144+SH5m Zq.^ynmw1+ s}hj8 ygoQ8Je0hx 3p4\Hd2 Û@ Ra-P3:XI5'|4| ENo 36}1jp0ZLJsTǝǙm||іZm3eϫ|y^V6eJ\Fv:{_p:̽p׸b1 Ӛ,KL :JwTzkRP9U x$s+0>h$PhR=/QauO+{3/k8Wn{3uC?;_.zʑZx/εp 5׼qBmo֔9 Xvsfanljb\缐:'T=ʻm+<ιXȍ=Rcf&!">b]$|U}C_n)yH fݪT\}s1)|F$OC}N弨j۰Y9V2@g@01?p2ƈv|c1|PϷ+3-M5Ls DpjzF8$B:#vŜX9sTm'kRd$E+3=g}l!5O":`F˸6il-b26 f%Pܿ?ka2&F>*s8:y'ky\qdz;(݀q-ZfHAu_})h߇=}nj7^w~40`Ÿnm9˖% \~;&>޿ =ޫ5-ɷu~7i?/kNX\ ww(I;8RAqAYk,fe ұ&pX&%>yƮkϪajRPqofa{)VpPz]'v?ڌ4#۝H` D')=fUT-Fɷ56]@\9 56KyVq[`@Q峬$߸By?[%Ad .\ C&XG%Xِ{=|@[1C ɏs-86U PGdzz񈙮7p^d,k035>@7R"q)=4!1VԹkVk% #\3ow^ŢT1kr!Zh^EԻ8S!*#brCbQC,ڬsfDy綿abQӜq*Ek`'m𳿸8ۉK5-];3й՚PT0{ _k❺}s! }KsY@Z%C"k}eQJdT/s7rQ+]4p]'2???7_1|xXZg]wW~{G{W)qlKV :(%ysN6Ԝclˎ/g<:є^'9,nB줶dx}?Ѝ2sjLi]J14Eu׽2 Lګ3zG8 K}>g}$W|?A@sie|ϵ\/:<ߪo0|fjpbW0ol;,s9=:΢T6sTQbaU5c" hC46eo<ʳ9:fP[u8%fwZ3kPܫj*x;mEH)5]ʯ $7C4;&>gpTve{1]~gb,gĞbG*@&bCe.h'5^H)1K Ta7, ';F#{HO>pbsp2APQqdsMqʿŅH T}PA\|PLY{ \y֤x" CgD㼯 'O47o|.>/AѫR! 18Ɓ>: &4~靝wP#fN$x3W5=I nU F"f@Z۶8d^m%VI1){ T'LۂrC"!7|t 0ÕK pwVƁJy]ba\ >ƁҖ/{u(ѱl^ HL <|8;+"sG<_;odMV7}^M;SF{mնʫ;hG|wI$.;yƟk` PJkλlj;ϕTusyHZ 2N…ᱶeI}0u**_C2¢jJ,QK*$PDܾCi٨lD"%hz|a ez$ٹbߐF a!_k"qjg:l랪% v( 㲀v&IMZ6zޭPm5eʣ `̀랊I_&Uc\_ڥHpnh-yf@еV3y}W.*D;Wu_8}׵vgyjʸ?bתP^9Qb5ZsA^qZŧw}; x޻ F Tuޣm:orBD+kxMs*J@g}%ܣwo5 Oh§@-W!5SSz}fd֙zkuktxQ1.P4`R Ik4vխ7q-s`8@ ޘ29->c X7YzgILIEl6Ȝa߁\@~s9)K&ϬYhD[@ 9ɮ%v_8%Eb4}\RZ\4'⍤6 ){3C0]%][=umRFb®Qj[:B#JvGkHs'Y:ո!PM Mev[Xh1=fKq>60PlaW,S@\+9 p xxG32%9T2Af8؅OHߔkxCzFfNhJy^cӯqqnp)Mӝ!(єm4+RW[MmK44s}=2M8vd0k6'rwYihj}+Pzm4ZC[MڊKUfI޳:5yRl/Y"hXVs~>% Z`R&)I |>o>.ғf$3. sgbNO6HEt:nx N wI0bcZ_s<sw^v3&^xEbJP 2V Du91z"%d5] x$V^qkNDiBrfX&BrPSlZഔ4M|=Sd|dk{ϛ 2smc !?3 j^ͥ0ͭHJl O|^h:ƙPb5Igk)OjCC169\ȹ&uL̎3 '\ g}@6f!pWӖz\I3S{I7\ȌR5 Wj6PM˟ fpnTe=+%c":1_orzQ&lʗ!&5\?~ sµ,{{=W~#>iEkISO>P> 8;'9i_wЛLukF{_近47vCydpչ%qM]z~!'j]Zw|)zپM}~Clo{ h8P ^uϿ IDAT<&[nI68:%\PX4@*,yR_DAh?hBAs.bv'b9}DPRĪR%|ޤjN&nk@V#6(ΘwH(*ˡ4"(a@6iĥtUԃ$ UFɕ,yk l6ςR&N&+`/ڭ;SaxeiXZG auԀ')Lr#@}וtW \Y,!H0umi'^L`r0onD^'57"C43UZ CWBP$s56lc[+o}܋ŪFtյBk5s~) {34{rM9zk>CnfwƜ-8jzc@Z;.v|<,Ads87@A&]F/  DK_~|?'Zpe5tV8uIn!!Y7#!YGSXk:\*A6o6yzcS\`ѬeEhg[@ ŻģygCa43^bSvj_|Ol9 WPvѺͩ\ĭ5|jI69/cNɀ;.xہ30&< p1_I4:GJ<%ucP)j c-214tǟ$}T5X?-?O!3xK 3$%r+) T<S))2ͣu|6\(9sju~C^C{-N/ͅ5 )l'9~;>0gs.|Hėg0gwil5qʿ Vy|p8 4"Oݙs941þ+"3eRaJY85 /V:]1 TZp-׮Bl[5K_tNI9{XO/.7:{~b>au?|h 9ekd_PơuxkFc8:M2aـUӎ 91N/c@L|3$DKug,<ǎ1u;|Ke,\zgPQ7JG6|1 &5rh QqD1`9 /5(-BL_$˪Ly󶾟6֛kg:Sj1v@jVqkܘ܀'Xk @MLmb0sI{w h uڷD)#[:saF⽦@Jlq:;msRAgj=mBJf~/uprbЌ֨A*8rʐMs|obLtk,硢I οztW>v ^WV\,fj pD|-ʳv˹)0 hx okr^z!{]ڝjdM&Bwiώt$3U4#Ӹ|*^LF@ 81 5 YF@@{9a\K }f |ɚ@ye}IJ51 $1<'{N N#^?yr)̵Э|'ڴۚ7 9eyնex|o>D]Klcov̷jRd|ٍdI5xB .0K.+ܤ΁=5-QSyG,,ybX ܒ/P\%QP:AY +I[a r 55e %Xv)xgϡ #⒫ ! @"kujr~@bt2#־&~SCf1;>|ֶ!y9/ec=dv.>%Z_ܯLu~[\'k1?obSMURM`q4U-Zǒ:2 Cv@t&89{7wMZz.b 7^؅q{=`.p߮_`0pM_ f{~UҸ~US$op}T}n z PHw~ ^;nxҜ 9F];dI{+4mKiJJ!"ҴM:vm˛efpdAxMQ6,#rl#x+I.2z iU2}r'D1:5&` 3w`\捦|@z|r t\R$L!o#FȨ8KAfR3̳7x3#Rvf[x K(Z: /zf[U^| ClzJ"̤O8`Xۀ\dk?ja9e4aeұeVde =U7 z) ${`Vޱos]z(X:X[8+MjAƗfWq2a-ۨlToמIa.}rk*c|]мF&o +(555Λ9l%jΘaDIyŔ:&֏b֌r [BISz^iv8izYXɫ }-[2l4ND+YU7!K.2$I3Lەa(*Of5 ȮCc&Vw]"u6n tv}Lm@$?۶e:`YSMn6 Ʉn,޸sg7t7*h5\!qFiVbpzck<ޙ!SScJzUTt-Ļ 'g1*OYISC`s8gE X)j!iVs5.ʑ1skl` `? c"k nczSGRCXL5%;_(+@?i@[ajVgb톤)7w)7x&p:B^2p_qGZaA8j.zFn8:*=&u3zOK5ǟ_/`7<)#U$ku"Z;q!|MAqpI$ G'p|&u2牣ǁG31;~}N@q>mPvR=jϨ8O5[A)F'RS"l6/sT,ØeXr"*ycON*oI$``hwfϏsѐ)؄b$7t! XF;PPRK8lA$/xz'7H!jT'#<86nR&4g 0DT% E3]7@Z@FU(~W}y+%1M_5ʛhfs3mW'v)^]dnz%͒+dP i`o l(:TnVQ8A>fE;q|{&7dHy~fICMZ2+)28Z]s@k1/CZ{bx5qP1d49O5MW9sgv)5E{ ^o6䊵5XQ3ַ& RYl SRX t[9J}M%`s4:avtA-$[=O@%e-]njRN0[)g8p25e ) rcbM~IO @-Ulyk~_@z%ر4mKVcidgqSL#CKˆt$4F԰4y%hC b9ZnrIjԚ 7HdˡsRV'i؉i$n U7[d{K И+Qc\9!e:Wl$r7*Lb7i-Y3 L7^ ź4Z a>X@#$al^{n ؆s AdmQ7@^pכXa%#FmÅDf&)3;>aҰVQFDu[ pa6ZgCk=k\f܁f4fxe{GNyu2ƹsErz͕8oJ$p+ym+~WXHrȨ[[ 1Nj53<ǀlj&5ťu-N(><}#oz>S2U < LMLX49 ]m:J7t0=ٖ=Zq\K}`\4_̅Ư's紇x$kW!|245ը$)vyhd1r=t|@7%F ?dEHX!,@uwc8*Rekh 9Ry7 3~3Y/8 N\1h)޶Nl7er՜V Ur;DUg^{X+A:֛Et]F Xa#4hSn闃Ш3&WI:O%6/JԮ|+o>BIW"a6Ǯf:top1$Urm #^: ) Tkj Kz] <*"JuG_]ۥp1 :͛laMcn煮f>.[қ17WS߻ק~Bll[sEj]? $H-ŭnkՀ k]k7꬇~YsoAnVT=׼ﻊ+jM3ݰ}krOkyn~Yՙ›n7p}61ͽ?^tk԰.mf[\N`I' }5-w1a&/J f&%;{| IDATdRNfkyga!8 |Psݶ>9JdH]pMFk ,ix{\c&w:aV;|]b w{ dkU3H-i%[U%jKR:Hk{$6-%:RMbζeH_Rmrg&3B+pKh+)^g 1jmd"+$5YX뙷Y,F(d3x74N4@QWa.2ݐtIvnBZSmo@HuoVFbk.ɋ?_IfTtweSPI4q,p #Z:MygLx#@bp9;Otk{n3$!q45+຺5ܜlٸ!oƾ{|ی,n\1SgI>Lcd ZwhwsoBsIߔ  !) \>zGDZ 0N1k|ͧnƿ+\21:Ki"tW#@M:<zb\?MI hPz!ZϠu6\ωbh_wغDF1nbNwXVTc\n4 ѡ3rV#෯mG3o@7 b0DI|9vr~$WaMR1h5ZrdTQK :w뱘]|^4=@w/Tc3>jϠ,lk=FJjM+ jV>LC ٶsyJww51MZY1jBgx%S=* o~GuǏ9yg`<60Net4cupݑ`sp~!3p468r \95T-7S;iBlvυ $R.}~As+źY_xZcS-8 й6273:9k}Kya{$?8@Ӂopxée3c$1Ɯ)J_rf`Ip 3)炤0óuRd\[g &P1/Z4_ ZIk fG#fr')YjV8Nڷp1Ao F wPވ<4؊ E٪s"u ̘T$,Byrcq1=o\=_%Wjhx q7ВnʥqR][Q[ Uȶx`o=j\+bV[[FI}ö;{tށ"/ܷp.1,}@kYPl[Sdtm]U.v^:\MZ=߭mXfqV޳2^i,jbۥ:9QR+peR6yP{N`X#.&ިF_7ދ@8ĤH_43ͭF[ >LRY,: g,L5@èܬ2ŭhi_ybt fK{k(| ˊњ{t7i`*I; Lt6DsjNCM2nQ0P!~(Mw3kIBuAJ( 9:%鍕hG%A64*G#7It6?>/hcdAs0魅-you}/y?ss^K\tcK3H I _kCٞY"/d rq2й6=EԎx)pZ 4@swjtN?p$寞29pv|oN͘4J{7hrMcNJT%@1qlp) 1\ӂ!QdH\'ןp\KMow^Yl$yngiXso pZ f,{1NHKyN4Ca:"> Z`p<}%~=x MA_$9֩Kr*c[-Ç܋U+P, OsJ8y5}tdMy;~{ I5_%Ç9l%hERJzd#[;v#'`xC)]")cHA9;h:Ty!h]@AƊS~fė0ήɍWLx_o1yͥkjӀ[hl8-5[w6W`ۦ36p@M]R ؿbN"R` &/F{b5+gTȬI:$(zkmRaMA5}'֢iaa,M~> QlcTC\Yݷ֚ua`%ISo5?ӮEQ7ʊ ^/26˽j:ꑚQRS=so{4$3Įq#h.fmy1c-b"\Tw:;- 53gdEx$7&A9gk7$GȲܿEm*Ll;h]5Cd-h:/m.^1~oץy1=%/xĠ\^7@0E)'̮ڕ>j`1~m?_aVbgEV _|q諑rzT$2+pc &Z@stG9:kFnQn`Z+NrjXA']Dpʗ<W͒=`7m^h5zԟ$$u55\_b0ȎFeIS )\PVfKX@i_E` B辁kUu5M? 4$u `I7v]ߍG< %&J42}x 8d6TF#XxNͽgc0v, Ѝ!y"V~7n:nCP!p5 NBaW38-IGРjWɚ|oH ^z_~-UHS]Q,ZC bDzǏAeoSF&՜4 (XwbAWgJ $;@ P,4SFpMxs4 !M@ .dtئ|KGF^FkPKRp &!VҏaLɋ&%a)[bq,$@5>׳ٶ&=S}QcCuZdhrPSf3$svȌ2kDKj|CPHGM5 tIm+iH=gT|`Kn(eodE[> 0 2çֵ:k |D*\Ԝ jө? 5i ?Ơ,jc\2iPOf5\1FW3yx5t]d'12۹dyv=(ʕdO7l|TjA&"L5UOfc@rr^Kss bTxx:[1:q/\B`qzg$*OtOB͋z$/܀"Zvu劋y6^'5%֭y7h[׉=A-2{"Cwf%+ˋZTs ykMkb5u֛mW.mg 3f ;!n?h^@IYaV;;Q(K` ج(C-tnWѺ:{)`USNȀruտL*[363.Vh9&WJ; L|;6?%;s/- zYטNCqǦ]f}76= {ID]͂~<35u8!.Rq&)O஢<].(ȄgqT7Hf@6 ܆`ւ33DoUYyl,7hvw:ҝ $\ŔA~ϻ8XU7WNMAYA@yD28ͪˆ7D! {L2먩Nh1ASV1T5IR漀k&)|k3%yzl9IZ8_5e\_?y^ćJ+,ɞ<'bR` qŽA>JT+wI i`uDdXiaI&&d =Tߚ8Gˀ0ٓ:jDF.[_h90/soσb"#2wC6Juh̍<7xuА0^8YSn]J&'AL{\q, lbR&Np* :[9k hA3`micͶR6 &J]<'8o2(oqo8Sb-UEŐj2s(vXL1Pj+.c4ܭX O3~ Ɂ-6cƖ13 >ip=ejd1j:i{V+ԯZy# OxNB uY? k? ;XwK%}}M"y]lCPFђG; g6<8Ll,lƴl q8w֨o.Fv5E9E')S1SΔ=% R+HBuD Zoq^[Fkѕgn8.~KyJjlnIKvDxh–]6&ʏoys/cc p|X Ow4ks2gyg.5Q8JKfS|Xgrٔp|θrQ qlzjj ܓ%Q ,A@C5K5nҸ T;I|.2IၺN1{WsZD"m0p -S_AMjr ƼuY~nsVӽX%\ 7c&lCVnu=Fɡ)6>V%WTF5|x_~q`d[M?G W,):-_#RW|15=k|r'#Y.n9Bz[f 8ot'$ ><H{T IDAT~o&=kY&Ur[fwY,[7]cQ(1$q|~\6#{`Ub3?>\ev sN44M5 ~"}^r%a0=ۂsɹEYZ,"A>hI 78v06~뒝;`3|%hmaO! Jrm)t+Vw\dӺ}W7Ò14p ߒ蝅n yMyQ͇jUpi G9 }p$ñUaڷ`"IB1:"c&&)$P@B LkgнgLowi%{2&[S W5ujMM? MÞDʹ csSmeL 3y:u|Goxp>ϓ{5\l/mǒ$IU3U}i,D,%@LWeq(Ḍ:B"񋙚hs^ܥ{ܘ3xu)~q~(.Hm??>`aig^TA?V|zh >gNe~Ĝ`8*m×ԢxWZ:qN` V]!YEGL|- ~hX7BȎ7Pa-Jr MN,Ze_ waR"(Mx/\b;>8)~Y='C"m&98'Fp8z16S` Ŧunj)Xqcs +Ȳ6% ld d@W!7$(U}ӛTų;߿ +u];$Uu؎E7dʸ~ϋ %9ʹtFd63E 5CĎKflc&pu"UIl[*%Đ 0J%@`{.^0{rPl Cn%(!8R)e)nj @@<50fGZ% {L6'9"aUZ ۖ2<y/yyI42n~NE 7=,>}M \CXblEZ d ̎E l]6{&%{prcu,d4p-Y!,.+Efo sza 0"”۷5bwz &v}9|G9G Av)Kk 5mմ4j,pG1%EZqp!brXz4NcMЧ%08φxfS2*stŬܿ ͑$?2]1g' lfU /0|7m Ł;~=cjcц{GN[0p,wȜ3ιS[!yȳbeCM.ض6*5\"ZT^"<'|xY S5x!q#@zFl -$J\@z1s9yV4jҖpoiߐOrъ󥆃Ai=4@u-^kLJX3K63a3<]zݘE霩QkVp`S>F~6ѳ[k u8C3V3fx#H+֘hd\sMV+01RQl}-bQKfۖ%>C3iupYLgR}&P,^6XsmJS{Ez2!k-'?_AJ2\2ꟙ^(cXζZ$6ؗH¿[TR{4^%"xIp^ "2}f!rE$Sym\;r.Ck Üqb"C,kQq(pm.T*u-J/4:C;r`{9䃓'-h~@bAʙUD..- !y )W$Ppk{'R1a=:f>^Y l7 ԆpiO^jb@*baԈ\^p-ZTP.žن Q05k?ۅW!,Y9ΧTh#kQ.~~-Eb-U㹯 /Ћ 5|" &mhkbUϼ+.~^ kWiV ~/,~S#$ .gIBA&7>wq9`MK㼛F@1m쨔!$h9pNq+08^O4`xnQLs26/ AlBzO'&^Zk*l>d,Zܶ^/CXbՂýRx`hf\mMl Ɯb==~DK(VK\ed̙$h[܌a|p:|lqW'pz^'&X"Q Ji3U#|gDr{I* xr6EiJChFUڞ#⎡yGmG2K3sٻj6V{7kMfj6Ϙ霐 CDA z06&n%f@rQ׫9-;/`fsOW*@e}庠Zw~`Qw3z .0@jC6NP*B\zQ[M|s\؃|ee2vy k[we-yK]%hse}OU <c"˒%K$ufޗ*3խZCm''yU 53R fb3/\CB9]%. enQM97,`E{[K^Tt;NDwk% k\y3nc9|bz$*5e8'wZ>ɀxO<>%S}q( U̱FZlg|~Ͽ'0@-.g:TO3`MQ.[,CLIg-oLN!3hk3&3S4te=pͩ -"΍`]+be>K1n9>C'%ڋ t\62u`K-p:J 6D2 HRm96(x8h\~ ye,yLcnpJGf-̙ T{UC"}"kjR /3|e(iG%k( ;>~UK9<18PYy4R VkC@ĝt a;إa lC z @$J6쌅R`gFAQvWqByjlXHW@ZWH6ZdZ qRmiT'F0m+e,aMh=T7~cU lް.9w`waқܷ|T,tlm); ԌE@ܱTE+Uj>1Ȣw~llVHQew`xh^poJe4uI,&Z0d2۞^*Tj/ y6?)}] ߛ 0k!ŏ F/j,A6^ `\2ǏN螉!ejk+p0"$%5ۓ`t9%Gqpp- >O+w].< T|Y70ȳ$G & ioÍZǃsշ%?7Bq? WiX5GV1-P4h1^ߩ(j 025&C'Gmp jP[Yt=EiV>A1kY੎}̀>K@,71,%Lg.<sdl!4%]+FYO`+.2~PTQy~񑹘Or P)j7vC۲kNe 9;zdctOeIǥƂ2j\.|\Uˢi-Jb@Us*0$ xcVÇVY2poZ0I^ּA)UhLs \-HZ󬬜W!zo T/X#‡};M ,pȺWk[{}U@MՔWc:UT45z~R7msSe$x0ƄQ@ʺIgUXhnV XxfhQ} 亳RA_Pki\ F Yt5 :TW\Zcaal,sU0]hU#8Ѫ.ʕ+þ=;Y5w3آzd8ehH9sV6'yoȚb,eEvc-̱h#^#6Z匢s kBxe@ mXPNn浵T3TusV֫k0GC法܍0GpK/嶭`pMͽpp !+>@>^9| ,6M15d9&'K98"}`SsER"<jIrK18O20+h*KP`bܷ=DÚ^AdkCx"eNT~xbE+u,CVz)A/̲WҖ;;wH]85@cZY|kHK 1A0`.yڧ<{<9٪h*("3.wz3o!Q8+}<9O)ӻ1ھu#8pT|4xM`>+aCg8C@|;Aǎ\^^izl<4RBx즦? o)):==WhxQ0䀢5F٫C |vU"Tty2p 9<;{J~8H{Ƹ +akע\ X ;ns97z{le(J>_%~8i!޽cL촺Ȇ0 %V6$~~C,uhu~w&l[l2bPV <`=?H+E9)5?]7?{ͽoYט z6IEH6p`ơ!e?r¸uU,cll%$BV7W,5bkgB1 >Ug̎L$L [&[z7sԪ<}R"6.v.O&6#GJ.V̥&֏sQ&kKo3.@ R`#Z"Xe23@l'$@g3va+yJM{3T6s]HX>}fIY30u󝔒ط_[AWs vm^@_d˺ .{&WluQC2#&:2F,p\/|_:sOҗYlj5h1^DvvcWT#X`3 CW?0QyELlT% -7L5O)^cj_J30UsŁ|<xO=O^,jFOK83{#-12;uƒrPHR9PQʸҷ{- {='JLVTq2ÀkV^`J5ygb5zO#c5\O5@vYw}]4)`Su.Qj'E1;SXjZ#= sBv{`=~e;BODxkr&FB)w11 d?4#bR|lXMj{ &I5Ic۩H.V X2KXc~rVO$i}q·glQ众lRq5Z92ֱT3G`:9 vL;E -iYDK{pD*ޔe6sr/s ,2/9ɡf[}9mwoc%]JYm ɓC ĹXS佯ެ _ oK`ӲpTg1enִ2Y:)69s׹ȒǾu,v]Ӧ`!]S&Ͷ79`$ f]"6a~~k3&ֱ~ʭMr|:@x񪀜s۔p~j|Y96pWsYsI|wR k=ҟ/=>'s ؾb:O2~I+ϵYߝ 6m3knB)!-`aN搥s~ۂ OI@U%PZ@ 79$E &tS"6As70(_fK GЍ|0@q^|y+$O^E@ _l5Y<0GF+alB퀻Of0I,wL9 Ip;||;sQ;Sa>WρczpNCز;Krze<2.?Fs&ek&)fZx_nV,K:XkַeWn4&-f;bX &YbV ȄCcxp&w0&Gz' N ;o=^M (vG/ȦÚS^|vX)M-LjQ`0'h~ޡ .FY6,2X研|;1loِMvb|61' 4␛ӎ9EP̷RB>bvǛ/d7}t;W̝4y@^dv9l;[\L1 cS"|^\؇6Kֲa%.9YLesE 4,P.]-c< s"wmM@gb>K(ct`,2TC`ɌSCzDsxI۞]AGbjd3ǟ*>g)OXDwrs7w ڪk9*6V%fg=i$|%kz]f*4O␊|OT0ΝwExP<>\.G؉F+"BzW^2NzEki5BoV*m#S/MAVuZ_φ]zLgQsK̕x&6RSO,RmK$;{Ⱥ;eU_r&/s{^v#)cT6Bbsv15XӣWJ}s-k_ ߽ZŁف([ؤLTj-E/x]Xca^ */X)x«V6o ڸM+"HPZ_%؈.Aos1ck Ii|/glxEqfg8DZC̹YL8_ʅ0 ]۵>J!Ͷlʼng@Ssӷ0=%]kXY[,|/R_(U;It)NnM{.TӵzEWcdfo Qzlg]-WIMhDMjl1haͩ(NC AI1q:]:Ǚ:bNVZ wZum4˴69A'gZFO9@"θ#1 ҒzR]_ Z1 >!-3;L N3>v]n[Yt|oSKJbۇ]'(- جD+%3z-8}YPl۾/'3CSke3<zb_fw?{M8Ĭ?8:=+ a3HI:k/DʚϵsaAn\|_wa`"郙޾|(6aZJnwCH?<m{m g#՚Y{oP|h){<ܔx~ jI&rzyU344wGknp q=xI_)>N?p@.L 6e)+}xfnӺԊ1W0+bK#Žʍ:j+8e T;ӠZJt[Ydzѷߵ` _<20z2$+TJ>3AHnL {Qa/ΟϵW a9\!5ުFs`I1q<5N"ܼPxL@HEC4p6=,,O@ϰ$A\uBI$uXع ɃA`V/;t+(a$I&PJ\ECȂ ֞)i5GY<쑴0@eE;# s!%8%^H۠"T'ȸ1'JŒ^/ 1;BCb( 7e/yϴɊh#쮁e;C;s%b hq1>lǻuUfiIZq&cͦ161 O@m/+N,s=<ꏤ/˳T<8*~nwv '퐏V$jhJD9y.,9 ̭ г*FGh whX]xU63wf_edn֕r@TGY EV{@&#hZgF[af<_` ߉y~ygD]?f! 8Q׳);&3kU YHV]P%w^|N/}0,8uµ6 m!}-Kz~K}M+Ə!d%A|^Y]OsL) w9'٠4 WX/w f ^F,R,T_@ BUBM઩*^r(ϥKc3V *sBl>^db0 t/ ?MBU]09'dw[/lҎsV0$!67̤ ?A_mpV`k*N9bYt&/Y_ZA_JZU?Vm%Bu&MVN|~5'>˾G﷚EܝWmxϐ׫k-ʯF9qA(/vU\yHZ^0fm:73yX HH!؞!6S ?6,r%2sW솄#U02Y'e,6< })*RBuyN볶eǷw9c:D[M.gu&sxEtlkF^YPRwub ?8U6B_7!ьmb#3^vQ b.2q9ܞ C= "܏>kX_wkuAw7g?{G~‘= |7p1WSLqyc-?gzLNfps~YT4zˈT./S7AFҢg(ԗ:JLҡP "Cђ)8c\66b$" ߃Lg2 9 (YJ<ܲ[k3᳸Gg(U?z3v73z,Ǽ}>·UO1sӟLK8DY?י \K T;L´$2u6fBadLu1#aU sop^{kVV͆v8\:붯oabDeyXkM Sv\"9*,IkdUޣ#4]ŸK*h]t|ED7sMO} x?'F!u E)hbsu'mAJCދ.tPV:ʿğZnd9_X$B{Wrnia#X63Ww4cwݍCo궱8 _pa&P|Ξ h),2ZJc)N@3`It(yAX5L?d3ɢJbljdgeĎHix]c/c[iJhKcPR0p *Xv0ՔѸ?<2*" ĵXT- ?drsxNb1H ?S8{܉&= P瀽O3v1~;67\vd-9h)LP=x c t eI@=|=EuuףYAu.`a'ENiURsS'.7#PCoxpV Qz Kb3I^M396z`w(f ~8@Q­Pnb iތT l6Sւrǿ*8a-U( 2ȯΪT1UU ( qGi."@)ral\^q0#hĕMB 4=/s 8{缥Hkg[0`S~bC3l\Mo(|a*ad-s,3MAΉ O g7!;Rt6Zsik¦CGGkLMR㲂;&~ԂpZ_:BZ~YynKg]'|EgPu׊;-0xIJI (՘4N{loj9B!@ޠ수^|P ~ ͼA̭\᰹8UtƽU; t[! x4 7~" cN,4PXg!qd6r刅j6K]nH,( wD&Y {P䒟As> 7r͜k;.#0ppF*%0 ƥj$X%60Hqynbh',CzUz PP=* L@h% orah)Dw YKWi(s O`;IGY<2gA6%ოj80ATs+Kr@p-0\UV":\cL郹X:S d3Ag0;sX%}d2djuMLp]?l`%θB;.8l!&}%jB3K;>8;g@Z@c6+"dѓ} cd2M+'̀rEypYdЙɖj1*vrD/TR Fi+d8VRPh3i:Tg{+;4B ҥkh)ԳP:亷/XܧGsv RaRY'~ SXMY[erdWp%pg}-V<6O)!P29Aw4+bO-`MgFߣCq}r/EBd 0BuCp\>f1%TZsi`'da]Xm-|+pcN:bcc#3~r-0Cl[hRZQRMps*Na+~Q,-YE XO YaydƚUXfO_m 1)0T ;p~ߨq+Wy`|ʶʁ|qՂoq x5D/R{FC:x c2 JetYki`([J|΋n-Xb: )+XYx)X)3uF6LޚȌAZ=ڤ~7z~ >8QosV ^."K+jz ҄@8ց.IOv6/,XapVleTRi];9>d4#xa$@ =sV,rOUA6*JB kg7GPIBڂb͛W, |3GTQao50 >>0I i;Z5Xr & QI$":\"k@ڟ$#l֒Hx{G,t܌ ^c&;j7յƫ lr-r}*<Y MB)e̕&Y4M5Rw7ҐD!,GXe?.M 5 `-qXː-v $&p|6h\r(e] XjpMU:UMx ҕ!׃}c790ȚLs^-E&Qag\\|=/'f(_ yiD&"Pԅc!uL dCAKen 2EyHE "ega<@nR>${[I2 m39R9]f]棸'EL, P=U*?s#3%f;g`zO`uxڶP Zq@_bgJ~FˇҊ댈Pӫ4cG6"2^R-IyBj۵EC@iw#O^J VKLbኰ ܰNTsؓM(+A3t \K-\SSD`@d~iymx@Zfj2ؙjë5t5r^}Ρdr"PgNuc#O9pՊWk*OLơρ*OZ<[9k-y~VS~s"-eWcS{L3vs3R>;JfdžsȈB䛱Z@%ei/ DdKA5 0? >̧|7 ?.PH.d<ω*lj7X'IqĴ5p7Pf`0)x`L5HSAoYZ]MD.9p9(9h_ wLtV^"L^$BE*l(@ITXl,3IWƵGn5DdjmRj"кUo~ ߃,Ke@{N\rಁA)b$J;&q (0kVB^n䐍=~Do헅wA?-6q/*KC#0 rzB+uall i>>snu-*AZ*uKx9[td&6&}y}9e6|ܘ G:UD_.'qq˚?{EgtxK%rى 녱">bR9kQ@$L9]Ot~O$h}ѳ k d>AxF 9-ۆRoTaᆀoWkhWl᥸D׳(#{J6M|<:a/wMpS$z9D}8b=>Cq|3Wmg Y$ĵt%^gZD (,bJҮ]oB_0\PCRĪS&bعKEmdor6'=E?NpSM 3lC85y:M&Ά@65?ar+/?){{o1qz>$;mϤԇ]JG dP)w6+;'KLbq+hkSX]c,5x kd!0Cku9]O>┓=fX'&vaÖ`/@D{j2g 4`<}Nl b΂6 x&PdH{٭8̎K驀 p٬{ |b.+j1`.m)s>{2YYd5v'١]KS$5K8XdqiMs gIU+8A%OZ$v&Ԯkl+g,pt8$"vIYֳ㜿o a!`Kdv)R ?O* ?wL oOXU!=ǀi-5ܔXX{(la >;LH!y@B<:ƃq6tU4fȡj<@@a3bg^147 T Z#GfgsF"ǚbXbAAƏ^[b!Ӱ7B eToX+.`4l(1'ɼri?xY7z}`aal)6D"m)N)n]pir l̀\C K1`by^䵯b?R2&a(k)[gaÜ^僀93V Z5ATY*3q\ +RU#}?1`ih;ңtLP0BA'&~vX ]gbJO!Ɵ h-d 3}3U%t8'%Ss\Ά(]ćDa Apz^mCWlFicsAd0رo )M>ܰg]wH>Gi/< R)>] g{Nݿ7ۀ)@k0a"r9RmC+~>7o&*rr4:F`#4sxfIg%eZpP*ʱb6WpY5$!ٱ,PVlxu~|xwt3<}KS0RlbeŮ9d H11־|"gbK c%s7Ձ8-y N򁥛H2(`r:{ --f!+V񻾫(]Z?{} ՙɩrTP\?D="{.<~Vb-ݫ#,W(\szOƧXm늇ka.w{4RD6v (\[먆~X{m^~.;0T"՚v"TXq5Va|$X7NY -ɽҼw+ ]?`Ay0GE(7}T&J8kdg.F(6+^=]JNf9nzi 5hXTw96m03fLӦw WYV/wkt1ٕ .&bo\#A:[j1Q|kpehv묅{o-(2lIןϕv9;@_N#`8vh1'LQ4Pl]>'{@,f$]o]R.P[#O جZ`y2xӎVunfn~]=쎡I'&e&*E3uO9=ЂPc4D˝&VvmݬZگsqL 4bCմvvLԔs[櫐RjNtΝ*.4(- Ꞩ߶sfbS35%?[9꽿mbӀ3l]g AYrK#Mj ]_~ .PV{D@ȇ4s!Ϣc}7Ox<#к}1Q*8:=@7NˇuP:Z{n(Sr0SFgi.@L$D FyPfcMȵ [QVkZi\lYV% V)hW :ç8dV3V!L_iS 9S`k"w>oLVE($k^*pZ`ow9|cm?W@  ԻԜڏ ;4Xa$ =/U?W1G?s" DD֞qgbB},Vqܠ/Uf!=%+N֠5Fb*۶M@u*X)c'4kA2vC7i'1N"dAER`(īwHPB>h@ݨ>9D&&LچX쭣'/C-PxN[zF6<>?g{3(n0~67|6L7<†E樘՛c6џ|&iYuBsqMM`a*~h,9ןF6h>nc0 ]gCһי\IFآ;nhK?bA3 \SgfOJ|p^r'y"ǴuBJq|Y$X7D=O>\b׿ZO'%>l1ѻس*&6vk`6sku&"Ř?h9%jುgFC2C]jh 9)b^:s쿫@`lb<8/&h/d̚; D9wRջgwU a^zsf+^V%/ɴM,@y|l"Z;͸'!B^ _yD"U1b.e}cY9pY%sp۶#N8yO<xD`V[n{փDd3>C$瑩\_baCH\XPk\/Μ'ܚl"iw^s|&fTX]W<&׶qNk5/e/Ν 8rVv5齶/id ף%[9p88U9gݼM_S{?@ȠJ Ve$ >n1Tc<%1C̚,Ng9txdzAiX@9&2r>Vfcb DJPz \9ZmǢf9 4C,H.Tu7{u( lqC&J 0  ݶ; IDATֳbm#fzf(œmxin+p3bg9WQRjzdwSGr:#4ǭ&'5EIMbJ9Ն?CbwVu ikH =ҜY@赧牍iضGfd PwUG+τ$F-$ UlVGofZQ֒5Ql\ dL>< [8m`uy#٥RMߒArLL )6"I&Nol%X.(TՙiO\Ax JFvLo D,vH9';xBL"[ETF;E ;]At\wUt-%X [csJa;CRMsE؃U^  I%iq\M;ZpUvNZsV V~CVZ`ws3"k|e1dhJJʟih]!q uIj0Ȯwfʍgגb uDN'K^Tm/MEs0Z:h_R UL\{Ex{[2,|I*&ڶ1//3Ob5Tb\,}#cT)9]d oŸdw6`dz.V tUkhc<ĕT\#Cq%z 3"VSin&ke|Ӭ=qBՏbZĒ+KpM1qXCH yxNsDژHə#wkA`ž"@mK>+) $sұФ~E:}1v\ΞE}ff=xS|]`:8d nw`&IιN}y%}z4M4`c*KmH2)sG?lyc3Hꯟ9x;m <#jxi /x qhy3;~ό[rju(s{CGaros`+HV|u <$+2;AVs_{od7S9 w`D?I(#][S u iDpВ;@}uܜCƮb/S.tdH֑cb╳&G4ˈ-JCb+oFLZ&|I,b+T,oۀ8r"UΝ`tL*Gn +`{di3)LGFΖ޻o 0ZԬ*4dOo}igyu5gp`Q_}P^h?͕OG& 43<ML:,%b5}uC;~X dK"оŗ7qFel"jGEsxI(e?`&3^Z2@ &3{k~PJjM'֨P033d@~niG[3كj&7[EGhżXJ:& V 8"?5>'O#B)Ym̈#QwAjI&#` ,AWb\W@Of V>y1j7MO޴" +NvIҥGdC%偭9Nbn#/h\t 8ɕ^kqU]d~? s수'Vaحm5u'pKWwi6X g3SP-_ \b@~PDySO%v`jۃd!J/[kCI:P\멬aoH`{}bAWY\*41$s(j[,逈K^a;/jobgWZ%|fgYû|O'nv1ʎu &h^jUF|˳uV(H 1Ӏ` x1;O.^Eˆ:}'WD˯+@v}\8@j.EC6Dmk |W')$ڍ} @~o'7g;bęgCISqadrP`R F}I{eei {9p*,UJAɢUhK:tybA=Ԍ .1=n7j> =W:Q3't W1Sz,ww|@ A(+P73(w"Hi()ԩ|5f屾@N{Ld(H|wV5rb{aPnc̩߶(w olj@huHmVgQd~6%R~.mXt-Ccī0VkКkVT(ݴp-mh-Հ5SA9 TWϥ@ݚSV1 !V@@5DjP3šm$$¡r: Cjw1SĀoSӂX?)Kڨ@]V1X<*!|g+7:yEX]GDZ~\D}xki?Z0\?E"WduB>o]g ӽkKa+ ABAs}/_& @DaωMWK(v_M1^nM:_ɦ 2F%v5\u)91Ř@lN=kKSܨo@iX L[L-Ў=\R a. g5st HYOXQC܌:A-g}4@Kw!"v0\ّTHVTJˁ:Id >0poTRrUk-E#Pm&?7Uz| лasS O&%h 6Xb?5HϤjU\ϫ"i:l{sv,[iD^ >|? -J pj^Jo6<ELm4ޟUV p ܎[W@pm`EiX):m)cV0KS$9"R'G Hpgjժf btUSLҕ7@AWLwn[7I\V ΍#jgV2,󝵦I`}:2*' ,zc`o M8UE+R@V,Ў=՚s |&vc x6[Wǔ#{%n[;dWҏ ¯x Hm6u._lGy3%ֳAS̀@ jpēb o4- |>8D1E |1&GxpN@Mk،ց@k@NۆLyw̹|~f39{NBcp3] IUpKy@P)S5hi6 |&j"luL$Q` !YCI$;),")j`Ɋ K|lmwՙyPR/!PepCG' ( ^X$m6ݓDO[#72Nvd̒A &~Sɢ- /}Ny:Ӽ)./S_E[1,XEB}y&:KvP2Hvb5 % %^Ez$W<P ^s {Y?&u)iHujI-j\,: qK 9 \1/dpD;pL ,=k*'ZH~6 p+cǶb]aqWßm,RL3?*oxnԕ0zF^f;Hcڠg+y/R9(ZoͩcZ'Ŷۜ,1wޭ3$:0Hv1]@2,gzu`lVZk B~ԅp ʣ8+Eb*k2+%^o /rgkfPy[ת#b£G +Ҏ ~ǯryn`.J⨰I+_7!b:RyI Uee>`f׶*{B3?\Y;bbLW^r.F<%xܑ,uO$|s$"&CΉhll|zp9pJ;A]ASU+ .ܕ WqwPR}) tۜ[0H|6#6kxm|%dUszĮnj^IYzZu ΍ tE욊3F61 p2u7̹: 2J~kt(U%51ghHI-Ly,rWlpĘ⮁nyLbN/Fm9᦮:€H@^].|cXW~iM]G즩ݹ dnm((U#[ԡJFp")Msm h(CBu wގ}fᑁ$C߻/Le*~(cru~ίʣg vg$LN\/)+!Sy\ +JmaϽ5XL|r ~r73kKfvpc UḺV2_80~^_?`!V҉1l7|&댣;ZI*Lz::H!ȼsoTSlC6[5 ce!/ݬu[Zj/=mhfCҷ.`~ʹ՞*uk^ .܊[ /.[׹ 6Yd~}~g ں}艃ed4'3&g-j4*.;3h{U+cfV=>8Fܔ&9NFXպYL%hxJ l-z=4Ÿ8g1›W 32q%g1!O YU2&tKk. ʹ5Ƕ$r96:ؔ4 j]M$cJw1qo ۍR$ZҋE]=׺_jkoB @k~F*n_SMt5qD`PRu3 LXϰ|aAĩĺdF\E̝I@pZc밯`ziL# .?UU~z@ (ܽب*%Cg#zUL6jDh[,7F*' 05P>zbhW7sL,b> yO{X3s/%EP SC#ׅyNh3+CjkerL~jfaU~FK`As/C3Għ7ϳXF\Q!ac 31 iM9(|T!J0VbPnO(}ųygs9Vε*G1=JN>gjα".a4jD8'Vޓ"Ufa̹<3jGis)P Yg(+00%[md6;0%@ [*zsPM'sL`Lβ)Xh*b= }W:C39 y+xOhA_I؄aq`ɖLo**XO$CD֝Ko$&hf`)aJ@`|3?crOxbjۦ8@yTť5`: Sa`Sc'V1$"i ; ([S:lp9p>` 8sI0 *7dznFy{-oq4Db1s"9 k, %WxOLgSbߍܽ!ާ%^o{}??L11L}摃d8X^ĺ9 =ɗϷ7<%*Fpc Nd*+9g8gg{(AbZ Ӛd9n!%:Qqٞ- t3F~TIgDwA#ƪҮd 6x]:Pȶ2%Ү*@DN:6]!*lsn)Nb!cuH#h5Uw|L8ɺF:!=r"P\r#'[ VEPojx 9JIPArU!BtV Q띚cS 8䳂W%pw Bg!,+"CF{\>,M רkf3֐)8w;1ՍmK{8-E( 32X# c!KX=sUc*6Zz7zF='g3l\(꺓k=&BA,T}X\X$ 3'Ip5A&$Ӛ#E Y(UohRDZwd||}\Id6r-uv>?;Z! < 81vXyC= G7O0zz1jeR&䖀e 虘ρO9)d'1Yh3s=#=x`ħ90r3gS | "q#lAv&1Qfx>FR DWdHb}XI`,p/;O9as?ьT4CFwo*a\v2kM$mTg5cw=ި[Ɇ4͵%"sPi'ጁO4sZAv@.yWn9pw0 tX2^g>c:a;1֑1po`Pwvu(8T JnB3԰n->@"RqDcu+RϷ% * ɽն$nRPQjPxQG;7'sӛ1fW -B2^aw,hFg"ŊVyALX:it3F,Y&YYRZP'/D'vs6W\u EU,TL["b|¯nN [U?N1ϫ=5fzTn1ħO#מs ϶L(&j o+FaG7!Єo,bL7٪@T*h4Ę ܀&vv۸nNhQA>-׈UEmr)&Ri<ڜd}-QKbXՋc 8&U zÛs^<]LRe`֛j }ۓg0HBVek!IXq&ȏ،`Tե)!{ ̎#7k|%As)[E1ЧA& 4*.,sx⸵S-dѸ`gkĮ /d|LRNZ8X>u)&Շz#&vEuKjϘ@lnҜ@ 'riY~Q(*_ח=\lck-p0'3] f'!05&P˥)VŨ T .Yq!_mu"w<~?4_=' AP5ʉZ>G'<37iW]dE5RMSCF8)b XɘcVFN%,%ÒC|{*5TPj3Q|%<%ԆtdxiT$`ԯ,Ѓ@`hxٰX%[ K Qk\ڹkgpߕ&C $1lnkj5$L%juP,}7"C|%JiC,&9yzdݎ1-n7(Adfr 1]l,沘QC*#'[6Dk*n54& OP㡠.b qhd24aŻ@̓o}`Z.Y;լM:Ǽ'$UުdUz' q F,~;F]\"}<+^,7HZmF&>'a 3'_22YLwtN1`d%X``_AȷMlfr)"ࡳ .8sE" TXQ`?=&{x(n9,׃ᙦs'r Wo1xζXc [ۏuu>jMY+GdIJdm@vӏ ~:O<:ʋK)U xMo 7Fo`A ϯHvCi^wľ4hqLpsjFIaG`fTЎ۶!'vu>LJodl΀3NI|SL_|G _}<Mg9ۆFbρ1fO wɢ\G!X@}>1$;5{1,x> XX?ƓI:V(y8W#;S! C 0]."`Nd|=g !0x@O{(hbIm`A9>4-#N+Nt. ٳń;R*!4 >+A_j$iۆcܤo=_._,48gm&SZ99Ø^,QIٷ A&_vwt\d㐳:2 m0k5s:z0F`DC`m i*@'d_ve]ve]ve]ve]ve}1`>_1Ɇ"C{Cq5@65| g\c\S*k@s?p9'"9wk0  v zcj;ż8-Ujfqe ts}Nl!)a ֩]]"]ve]ve]ve]ve]ve_U~;ĦD9v$@7%mҶ,I.)0>Z6%a^š6ut7)wG. "0m!Z)BMF NĘنtl@yÈ2m^ve]ve]ve]ve]ve_?;- xn1 *94  ۂC!wMHPL3yoMC%#7Xk48:74g7oh0`68dGPE7nc"}{7 1&ұ\fr|^ve]ve]ve]ve]vel/~ Ĥ2 3.ͨ-lme@$.yjCߒ~`8aωc@|--1'&E~sY՘q34s^ `!CD7şZk@Y{I\ve]ve]ve]ve]ve}Vd |4]XbP̝ukhY ە >#3s"XwnD}#GPh,| ʍ0D>\ve]ve]ve]ve]ve]?Hsb|PbYk;"(+2)C SBJiH 7/)eE0Aи9Ff~h;⼱A64P&P@ օ1R۷sL<'%FiH[FU\ve]ve]ve]ve]ve]u   &3_1'f *oLLF X8\r;q脰<9kȐ_ԩ 4,H44wzw1=_ܐf}.t=23ج!!H23u.....-&Su 9Yοo ؓ?$i;q$B @oφәasݙ^ȸ=hEhіDHk sN4'ݛcu,6,QC$!M}]4#c,.....Z-,d,lHa3, ' IDATE,t%=]'R#5qށ8N\;JB$ZGH!/TDh% pH3:)tI⨉f9c lw'i0L> Ѿ..oG;ra/߅ {y??{_w:_lF?/e3_--?| ??//K_"nݿt_gѿW__~-o֟˹.gAhdJmð'&@q@Hz<?;r ևr0$( SR"Mputm̘ض QW^TsKX&Zxuy\ve]vOp_ wK?'?7}7t^e/?[~wgii7~ݟ{k~ ޿}_7;>3?ŷ|7|7>;;J?o=?_~7c>wu_a㤪7s.K]: " vEDwE&1͒hMl1&K%Dcb41cb " ץKYܻb<;=e޹wbֵ \Zaɒ|ٰq#M7Ya~>+V`I&rAP~}8橧 eyYZk4ńq/N ogϗ^7͂EкUkN:8uyUo6Ͽ'c6mO/EEEXt4iܘF j|7v;on}=#֛w-ZC>cO<.|;@ ㈣{^qM4j֮[ǯnq'տՌ3& )]tIF9Ee;tm*-l11.-Z"k+h,yq  %1QBl7c2ǃH'`#}%KK:H'j;!`1ZcPd!rd$d̅LU@ /ϖ,aS\Twۻ7ݻuXΝwz׋z︃ǟ#uO :vd\~{;w}Ν8i{NCm2h@N=GuK!R&ke3}L.24nk/ǟx2=1'_qFAO\^ ư?C_Ѯ]ۭ{Ï\^N[XjG2wr3oΝˉU?" A:9N8>=ϮcqפZ~cƎ#cxqbA'Nΐ37`ĨQh`߰q#)qt%}'gq:W^S9o| ګy/f͚oW^~S ugAay x/LE៌_\x18{naÇsݯâŋk_r^{+4(ַyWW^+~Ǻ:N=$vmbG_rm1{rA߀#!CWmcSu_}G'cVK ,\~U)W]sJiղ%F} H!С~ =W`_sQx4`$@;m4uܺJ)QJE*\tHTԝΣ(rYZU/)֒BAk"@*&";dSN<|kWϽ>?" 6e͚ۻ:cz7RJf̜e˸[^]3Ozǩ_|y^y5:>&N*2]2_kb~Y}4kڌ;6sŗ_I3ڿ@)ũ'D-iѢ9\ӧΜ=UVdR,ZTU /-(d^ ߚޜqg~ 9n]<c4Zb̙ٯW/uRea cƌz9p{y¤I,N2+c">j><5<ȣӸQ#ozIlтE^A~qׯ_[)W(s}bzoTm۶'d}N>ӛuv&8gY3,ZjC{? >3=;kT_!y5Suխkz׋ק@Ky{i׶ sJ2{N)-[U˖;|\EZgթ3GXc0q ƿ Ɗcc-*Ua@*T`Iyyrr\>C[e"FX)LBb]4tzB!NaA Vu6bx!\AD#ZefkZŒ|J@@ l:4 [ Z>b7Dٻ[7~CuԡScF˻wM-r}{,O|<>(JcY p$8{֭㓑#Yx1}.Zf)W]K12gNi8䓸KS[O3g}^^V\1?n\.SP_MQQ]:u*x?iܸ\ UE5 65q@ٻ{7^y}(s%YDž?Ose̸q\q5̚=gV`3xPLRz8*B޽y5z4}NMpPnFڵmKΝyqQGU;wZFu杷L;/xmቧmM7o_12"z׋<11|z< 8+ӭkW6m )[͚1f8(`2 ffFyy96mڮKvƍ|ԯW\KV\U~}_:}yrЁݻu!g_OC"~m+zsJr0bԧe3T_@P|;ラyۅ\yyک ߟvm߷ߡ+~|Y:C:7n6mĈx7Yj%yP9}vd]ۗ&2eڴt.@ %ell&S-HL@jhvq&dgN`+ŊX$Df2W56xNV'rkӂZk ۃ;`REJ TFXZ)ub-J)8ZSGy+*NQ^$h( T @`gкU+?0 λhZB>g>=뼪"U+ӟу9s;w.&MKN,X1cDzzZz™ݺUk(rw[!Bpa2\ ٯW//Ii;AGcᩧ!1fv+ 4;dO`yy:lҥ͚+xyzuo}s=j(l~?a>}[R\.>o.Z?RX YoP\T Pk\.u{&QUWoX|>cX^gun۫}E`B9 2 Џǟp?"`ϝ+Vиq !8y7;n={`yY3%TH`ҥy4olbvm_==͛7ҫ3yxGy9~H6ŗ_'dYj_+Ë.$c>1vq?_wҙlg\ZNv:d>+3t.߽4&Ʌ#qX9_/VZW]üӌ p}p=th7IH"G|u\ v%cgDN$ZƸk)1xgp7=LSJon""縲PR힀S*>TRߓrҌ(+\sa(m%ɸNָG*"GZgyŗ_^x3N=ŽWy,O=73?a"Iݒ|:f{}w/mscmv0=fLO+xa:uXo?ZMG+ޟg 8kGa…rǝ =$ؕmW~fuǩi^r[)yǪ{oM7UVXjZoGu}򱭷W3O9/nw{Mx94St<,]~uOdc C7dqlܸ?vpo˖-);kצD֩Sw݇i[ Vc

n/XU%;t\!lz-|>vEE(֧iEB`cҧ~hk0ָ(ikh6R9aFBƧf[\H֕ry̤6s W4TQ&U˥@_Q F(sY, ! ]gRd"I>X Rmv ;O9kV*fWݒ6l79vm1F׾J:|8K.odY))Cǎ=x5z4:v:0|'H!FfxŗxoUYk[.gu&R4i҄Fvjו+Wqmfռ;x|MS~bo_FQȼXkk_ yJ EEEit̺?O_ eRJ!gUq:QL6nuWkֺ5-26n^z,/[QoV(ⷷBV-w]#F./;qNO>E?#9Ӏ+W$"FN̮cܻW/>1G5z4Ikz9gWioռλqiҭ[λXp!wqb2,ql6K6^6e+*+Fٯ 9~࣏8_?.܍5Jvm۱hg,_^>w%ԭ["=26iş}yW^ABu$kQm@ٳڥ y{~޻=gBRiRaA@`vi2\FiN9I:JG -Irk)}D!h)0`\Sd&Zb!2k탻w\K!!R*[ŝm|N!%[P"F Bl>.|\_ 5|//Ygν<矯#u ìٳ2uC<tЁ%%9 ){"ͦSO>i-/+Efٳ 4`޻[ !h֬K.G(eq l6}ߟ>+x.'Lĸ 3w.j5.~ĥWgqz]SӼ:;wbEy}kӆ >62Lݻ1}L͍tԑAGaR w-"F E?v[Mi8P~=~}Mу#I!޵+f77BfXth,\}|WaF&NLF(W^{{|^̮=w q[RB}{2~DYCV-sY /+NYY%%%|4c2Qw/v߶^Uڛ>c&o.%%%[m+N8ǟxo~ᇥ" ߟ3fr}ȑd2Frԇro-+Bk-[`iL1QRR~{*=Fq0|"ɨ~) t4y^f2ԭGL+\>L6 u+5 w걦M#;BX%Ei;v).p"I>ZT .\߬lxloL>hQtCEiAƊD$"UR`~-p։X A$We7߯}@  /L>7Kǽ^O[?8r9攖2q$1r \zEƌgKеK>L4iߟc gv*ݺ{ᥗYa|͚6_e+V0h@jߞw r!ww'<Կ%%ݽ;K,a¤̚=6[s%sոM32u*⧜r≌0hެoMi K{ѱC2|4ƍo[I!s֢ys_@ܹ,l T:V-[rPA}.4h` >>GYg yᥗY^Vƹga=7oK/gKr̠_VYcbA8RaL&Ʋ7asgTP[t IDAT״kߞelRNƼ hذ!]:k-K.c̜=:u9'?NaW(:v@ lR&O94iܘ!g~~.FW w>gffWՉ@-kW(%QΘcDR=D"x9N;.:ř("4;AzC$< Ɛw|H)A?m4w@J6ƐQBT8""M\ĵcrrHceL/% @ P[,\?ǽwޑ>>}L.'xqwcwW_w=F+)'Xe۞8/nj_\?~ /G:vͿ5;t]#k_,\č99\zŻK@ CiP)VH̀P΋8ya@JΕ##Eq:yW1unc0ZvXX/x dTD4ocWRzґ"}'7J*UZ\5Zk/@;C0!$@*I[>K6R[bF@  +T5~Dy4uUοR:ox;u#wExa U5o݋.{I#/;=񼶻2m?gk9c.@`Z֙]#Up1@ Aǩ:ϳF{wtUJ:7".vZ1#ژTv'eg;ݥ}!|Ƚp9g ­ Cb*hTrh6 _%mK*$|N\aMll}a@ _=:u?2oMtAvI3]cӢCNy\^·Æ_}ir3 jRq r2o.-Z4]#k_5mʩq f(@pXZm@H:]Wr&iE2A1|ZymAJT5ւ1:b1@-N-^i- wRJƫ+EQZCJ/\ 6)ƺFtoON2Ɍ6 nb:fsF6C_g @ @ 4q4N3 TcXPcl*T+Td2No>,T&c}mϿƐdj%V' #jEJ3M#i6DT)jfQRBJa6^iX$(RHMkj,@ @  :Zk@k(,R)%o`ױV%|fg72㲲e$]6(cZ+ijtlC[d"GIG]$"[49X宸nuvʶ"m,BI5U򶓾)W-@ @ ~!Q*B(. @ 2(%]׊jȕ7vJЃs( k@dN8)莗Un:܁*X.}WK!6ϻ){{xh6ZI򼅩@ @ `,(TEX0iD(E\^dRG5 zspZkw O")Ht>O"UkwE%ywo+*lL\R%"w'8q[XUd2-ي!PrDŽJuao!kok1#@ @ @ 5Xsd;Vh" X 㫅Hu`uE1G^B-*hM.ú!r9rB ^,H)ڎ+Z#D):.$qrg)%\Obc\dm8-ښ `eŊ @ @ =]r8:' Ai>x]XEHDokgD8X2Bц\>&{ %*}] 5[):qfv} eE{Z[FcA$k;w7W!X!$7oFJ :+6)$ˈ#vk@ @ {0Ew搜"'`K"Ev Q)EN["h\>jDkRNZ|>h]*BHŽ5:H_E| $1EII R L)`w< fXPo!%]H ,h %J+,QFMיLaZCCX%"q@ @ J B ]21ʼnXbov6nfA./EZjʻ "D 87,*c'N$";tPIw{$@ @ ;I$.Zgn'tH%Jcqi+jHpA&M尾1ƹK(#Z"!-qFtJ!"FX3rhTtOߨ T- "5Xm n*1=9cN.+瞫rD@ @ V@h+,Hζb1NDck^lFeERkQkRZ]J;$7;0qrq@lc ";vp!µ+$YnomXL㟗}[\J>,m@"R @ @ @ Jews"fLEqm]ϱFJ7$GQN2pBd&SрuER1moVL6CnS JaEǠe eAW%Ƨ~DRP!\;9#M= ٶ+oOR*acz1:jUFyrF@ @ @ ؚbvcBXP>Cb3 'ֱ!@*j.kH7,꼉9m @kC֤D}I´3J(Juf.D!º.'[@o!RIt#Difv4z:!:vw9+D/..B-jбFIɖzu@ @ @`k*;>?/gkT++LjTDΕ"T6 kqI ֤ܦe|:'vbc2$H%XrJeerSEߋ3Y,.; 0>[F OaA "!$/[ @ @ ;%Q* Mj i5.3;qk696 q%)0`syڰ l&"?1Dla݉:_g:i!`EIJ).1"HQXS@ @ @ eRa/h,bvg^ԨlqےB>e_ 2d (BXV *R8#E$TD.Ѹ,4Rf^TTRP)QU 6 2:ϧ#@'[K.ܶk4V@ @ @ P;` I#`* ˻l/(%2ޖZl8jDdy q yRǷt;V!@yd!D*>We8(B̒8MEpmZkD>3X*R)*=OFHITMvFgEzCfugcsy9/|wwKz`sA;ɕWb;~t[{LG~B:lڤ Gv(8{Hw˄I{Snzo*3}LΛ_5k:N!7_Muۻ[6l`YZk ԧ{׮4md:ݴi>Ae xT텴˗q^ȹr{kbul^q˵ZS ը/Xŋذa#uԡmt1P:} 52|\l4SX#k'f+EUtqXW!R7ʉ@9mD{ k("***$jF!(T c9%j̀V>;<sQqp;J6ww .dƬYԩSL^hҸqm)K6uVH)Xr%/&ߧee+8y2QѪU+,++cEcoߞ[1hڤIFr*&N-ZEe+;>p'9sfn !\,\D>ӷ~F80i23g&Eվ.M6~z|9TMIb:7lCB`{ڡ{:[nGv( 4 5f ׫)'߾Ү][`͌;^={4!#]أ\KѵKZ?{7 ˖/go{׍5΢ʻ^~{;ϣ2c9I#G/{v!5`EUE+{ڗmrЁ,\e˨[.}{G-BkMHيԫW{SRۦ5甲dRr9JJJԱCΚ5kd(JJpᇣ惡ð2WZe8f!׷/ pm>رC2ƌφ/tp=' hv-˖QRRڶ-_֚6+. >[.:'k0bԧ,/[uKػ[75k9׆ ?S}>b$3gͦMtZjEmz\kʹ3Y^VF.vm۲߾=2sl>[\.GQ{޵k)fz׮[#OuKcƬYz={GksX|Y1Z3~$Qn]T7կBƒ|"z14iܘ]:ӨaǑC}3w.ׯmۣG:{79͘Ίܷ[u֥>{זּb,Yw^V1jڷk޸mG>&1: {Ϝ=e+r).}vt!=F!GM뮐} y?i< [5g}lMbR|2r><6l>7o^fѬ[9-[N2m[=jٵ`ݻ3ֵKA۵!Ŭ]3gUV:ohӦ5˙8y K-Qmӆ7Q:wK1ݺtQwr15վ][3o|&MʔiӘ6cL+D^4[R’K1}=UF$ZV8:ua\䜜x[lIN2m Lft\q) קqF'_wfp"kۖ:u)..{4m8ݧttͣ6l^ۥվ=ڋ ܚ2m'ҦMr\z%N,uvsP+d,&LdyY קe߰1caq fvmQJ`4m1i,]FQQV-[;!ڶÂm5N6D:ifOiwAaƂn:[ ."Emm gd[k[G!6ks{5'a{뻦S,@Ǽ{_o3#X:Ó|:t )%s`Ŋk֮l ,9t[j\_V[Rȼ25ѥS'ttqsѡ^??c ͛7tcزdtvuZgB5-Yv-/&Tf*SZ-T)B5*+s.ʑ't4Xk1}\o#uYa]U 3  ~a)Hbu F͛5$ &DK]6 DJ':[m3݀!)HuF>8GxmAVN O&YjG`\nW(jd[kۖN;<֥ -[اReN׷%%%ԯWӧt2Ztӽ˖/g/w$GyU={stK@LIB!a mlcH"Id"t;(\qnwGU^ޯ>鮮~:t(3g)mOFaØ1c:+Xϝ3n^| r0>qv3_c޳.\VteQ]M7S2ZZZz[Xt <ӂhU}4'c Clfu}ԬN#,l47mm9!Cظq? [n ƣy?f3hb96}sg7/y^Z};3z4f_wu.:VN̊U%˖qw/{kׯ{_/}):TVZO>駞KGG/~70ܦ/Ⱥ=z4{Zq/:\|immeܸqQu9:;ロ|zY skܹiAgb[͎{  4׿X`>f1׽̚n ^xy/aC8Oxjmٺe-~V]uci4:Z."{,y.]JGgF{Bw*&Ni7ŝwͳN;Ͼ޳4:îy;8aq'/0urky<J`,wt:oZ*g=Q 둽9/ܛfbf}omk[o\Ѐ`TJww|~Ra1GZ0wnCwtT X#XS0wl<"*رO=na8SẒ'?y1{ڵxxyβM8-LjZ&OIֲbJ~1iUZ*%|9c:[lagGc vn uuckXR76ngȑ5)+>k/}¯y6ƍˆp6;N#G`gGlٺatŦ[f8+h4Eb4qc9F쯹9y6v쯹}$3nXN>D~nκ#F0lX۷o..c6u*?7o)lk)Bnw :??~<8RuR/YR~|>m*Z̅-VkXN:o[ضm>'{ﻟoщכ_pRX?裹'd#pک0mK- >Jꫮc҇xO>?|S4|s7~;g+4i"?ßO\xs=-`ڵ\/Py:f_ncĈpAf| 6al='Onگ`QYHyhD3IhjG,*Ƙ=>k{oaZ[~ɤ9ڶplvԲz /Kڬը$aahGsP|ڐu$ !ޓUX$i6Fddkj⢋/qypd[sԬBiӯ:uw΂ bBg6o{uXB!bC(wOF}>d_e cTm/;lk~wQ>(Z8<'fIR~~{ɓO=EK졇a̘1}VM⃪7IZ+rI!CصkW||(عs';;:9coEׂy3 䔓O*BնRE_4~$ahh0~6nB)řg<֖|jyB+xQ_`yfmqj_3g`!xٸiSU1kX6m̄xp k׭cʹ{hޛ~&I|ߌ=vvQWn@T\߸ݻw3z(6Z$ԭìvL,J\厝;O0rfߛfgFj0h 4?aΝR,:ҍ23 g)ferɜ~jY;Yd SL)'sk?Q/nNpCq9g#XtIL8qPmݶm iorPg?_+|?/}H] jT*DGggfYZ+Wqԝ5{,cш$IhkmewW 29:Ig 2-[gM91vxXv-cF.ZZZؽ{7~ 7oflظ. 6,2dC Fy֚Æ}{`1ڇ2iDƍ˄Yf Gbǎl۾ӧ1A@ѱ9h~Z[Z9riZaSEេͼ{bal߾?HKkK@0c4-_-͌СCIbdThCw7Ӧ6vuuu5qcDznz[Fdtvv쏹4C39lX{6lڼ$e6Dqzw=|k_p)O\{ɧ?~1"LL[[,~ΙC?3_pݨ}l clY3g6|\)Qذq#_ַ\c>X̍_T45yVx,?yt_.Ѳ؊Us1MRp!s_|S&O>(=>m*k׭_*'//jIY3gO>˴Syiq҉'4unyA9׾oQ|҉;g?1G]1+w.x͜1??~F٧KKÏeь0~aa&vvrq N59Fexq 3z4lذ^0o.3gZ˪kf}~DXZ[[Yt҉i֬YCk[+/\Xwq4͝!C줭L<ψfI)Uv$ay3#͌6u Y5c58k5cG|4slGÕ]yU~,bMkt}Zcڵe{ww7k֮eڵF3-lv݁ozȹya3u@4Ip0~8lʺ>|8.:.GF4#i {{]{4^9a4 6j}[a Ox.󥼨p%KU/;C͡8o<G$¡Fq8B֒9K.]A$I1jr)sǻjD I4M]f,ܩT.F"_A ; Σ Z{bI!1լ4?;H8)Sp;b3>ma/P9i `7#$uSP#ZP s9 8BqA}rrshxcԏ]jmz:BamCFhژ2[ǿ=zoH]ƃDtwwSTBu^Y]L<ABҪTڭ=Q&vuhgش|3"    Ѐ>cF>|#~h0)i҂ YGq#M0. JZ[Na!FW{1ZcMo-:j̕J,p׵S)>rcJTtw'(DQZOOeMZZC'X{dC_y!7xZiEf-8gN.     ΢C~7(S$:xGZ1tg!OJB5lw(MQivȤ2o Y6b4XG(A3V>σGf$qpBE/B0݃$1IJ*蕲'kcCxܻ i%% {AAAAAy<e;-I҂6p>fg| |gF"@BH$xux#i[ŝkl=&$$ >jZH'8 i~սLJ):V=zmrK[[ "vMIѲAAAAA5Ƥx+mBqJV=$Xb5 i8kQII$MKӲuo4^:JiH2Ocuh艾V"Mp!$)ڪ2CeEqi{P*dW :sk\6R(jZZk4hq     ,QAZJ*1 `>t1i0:[. {Of-·!Q.hIPs83"mE6Nhm).U]ȑݨu6^/<܇!Zku8h, '-    ()b:FC(Ĩ{񻥵%k⠋Rg.&*JmX$!99|(Ydm!;Pi-iZ &ޑyȪqb`-O ǶQ`61$f$iu5.*󎐍}8d6'UIY${;[ (^+ p-P7Ai'ϱ  `LSEZŘ}.kJc]=qyj7.Y+. Ck9WZe"Z69NCFhmyMBb)#FttWt!:1YskZW7s4EK ᭍ov\nC]ާ   ?r$ Gubց!T*kk-imi-B6c4<6"q9щRbL˵RQFXz 9Mys;u8X $Gy[ΆmDZ{@(,[  tu {9MA҄iim9O5HBwIJ%Gt=kx5`HӴΕ1bԒ5 ]Y)(IMYL.$$΅,wLr^Zi<|H.B* YsWѱ`$.eˠDnQ/  T,A p7 h*ux(C``FT0 gYVxȽ'I149GeH<#ژr]EFTu)dAR(@^q^1;v;E IϘ"b     5 h|ZXxEm-]uA'  5"c|Nc=l kE &tXPp.:ZM|OxR(bER-#, Y)mOɲᗰ={T.     eL8l̯N$tNv.}x CAGhy]jkٹ4@ 5i5--)srIͭBׄ6X!.-y5C`NSCxl֒^#1 ^ʐ‘6Y#s":SQ0cKZ[ʇzQ֖FT(X,L":Mb`wu62h֢bÊ*\ڪ.DAAAAA.:w(mT*4YTf!h㢃Y 4vӖd- ]YvJ֥{ZEcw I%<$)cbTu:<19IRDj; -JyCΊEv.4;NKt.mkC> J$dh+%1#      "Qr{˼R^8G2AAAAA[u--9r[y0*k2 ks(c{R(7A6r hkBu(T*d52٭SF?I]ȸc\+P] Wv]bc xnM:q֬$     ʠmp^e CDk88tΣ46 s!{;IF+QY I*p1{1R`6XgqJS-ۧuv~bs`y-eEJ@8Uz\Z+Um 6AAAAA8 ?~˴V$h8Ȝ#i]l = UI0Q.l"GXرԍcV1$:1xj1&dpQOz\ jBхms-j㬣Ғm ~$ZՋxJyޓMwJAAAAA ffG2h,'Ou$UhvWqaL裷KѮ:p¬:Z2TAά9".pk})bҡأs.TT:Ug6'Ix]qe1Ib*]T.L)     JVXiS!5pWgyX96$m@ A.>ƄZZ" h~lp"swhnQIB$ 9=Є+6\P,$ jEܻX^ڵ'kVEqɸ/Bӫ     49rm6)=Y64MCzFMEԆHm9>ev.Ύ K\{,ä Jކ:!%$)DEA9%e4(:<:1:cc4H~]Ȣ裢yρyFVfi      IL1Y_YpfKPIvyN`usL),Gu;UaB҇w!I!O/mQҝ]XŝseCAǠL"tp+,xPCfw>T(6bwEadAAAAAu.QQ&zZc $4!sL,X$kIERXC\"a#*zW5^)sa:.jAkėg_amz[[*hI+!pxX9W`U8"k2     YxPQ[2 y:}8kI "ZC'dq{Fimpskr[\Jy؎VB$Z.Dh V2Zc"w@uꘁR9.lPcaO'1I.o gҝe$AAAAA}@)Pd BSmutisT%Bkb$iЈE +c V됧{~qJ'IB^ATOҐg]8!DY(!:8ReTOQ1yYt҉$&iȭM_Dy{[o\k8g_R|≇eO_ӦN)7s7]+^Ҧw _r~Z   C+C*҂eU$%цjۜՂښk+zJX$IR:DXvGR*D\FbJ,<'stxllk<8BqHpGx;V5}!^"M;Mh[q[/>n!Cpl׈̻3fq&n◸7qUoߧm?`ԎY.ork.v駞R'{,Zn_~@i_z+o~[nت@e~   B-F2};OҒbm5&v$xpNAbPhpvĠQq( f΋V$ =^}T${RIStuwCA5dUWx@hqyЀt\(][ݲP+ ژͭItksk-O ?Z[[1|x}2|px˛|esv"r Omj}ww|?~L.;䭗?{m~. ,   9hNHM h,PWic=;2|",GwXmȲF0QϜE$TPT SIq9d6;I0j 6' Ba4M@9MK .Y.r h|yuVxw:~fU,V|[7'غu7~|g8v~Wo||~]ׯgʤzmItwwmr~:j7xvݶ|\O8k׭_u~ӟ2iDtYtI|S=Q4q"_ G>̖[}ŋ?onS?O8n3<ȣZe3c]ˡpr/嘣gmiTJg^{{{nZ%TV^x&/9l^ҿ?!juPmżK9c:/~nZk~Y[9կͿ?nfPҨ_7W-~>Z IDAT97W*vAAAM644eHR=2TͮREYYZc"X2 Z&Ԑuq1;AWtΑ[W6D3T;3cqޓٜ9W9 (k,PqpfIspu!;IA,*\*T]cF7!_YgY=}hG?/e+'Wi:vvtdHkPɎ;hع"޹|3q)8j֬ԎY5wHp3pQ?88Ʋ`mW7-[kǟyOvʢ5z]?_ovƎiX84J^r Or[1cJuxoAAAXUm4baDj^%w8lA;BQu>hJ fUgdvއA%נYJiHA7ͱޑX1FJM\ܱCkbDB)M.mUV,9G– 9PkaØ0a^?c{"$>fxf_w00z,V׼O=/[.} }7^z{Gcym? fC1@)P@cqn⨙3yhǬ_~xI8vlu k_}q ij]Zu   Bx6>=Urrou܂u*G,`m y&89Gww7{$Y-:1aAE33"x&8ȫ!$OŢ@4ޅŒEnu(w\ݹeyU^XVhBH]a۪f5fd_:t(-RXؽ3/mmmtwW˿w5T(,10 dzzZN:rٚ5kiTtvvfH[۠>8wŰasϚ9Y3gpǝw\{[p.4M[gg>mz_!ތ:FcԊ\W39fW=^ϔMo3šQ?wvvo| կsa?PͰ{   pd(mP8Σà`NBj,8ӕp YHL܏*MY*mnICFO6!>x&<(cHmP xg)EEC`!Jy2@b J|NxЉ)$Io\+*:cJxs?S&O׾-6m'_>ؾcGݲC$ ΙͿӧbJ_Oki /~+?\vEgc̘>M6/ċ< { SI+|[ ItPm;C+Iǟz}eW^rٜz"6}・j5ČT*q5[[uکlܴǢw{;VGXc)h4SL7&VYҵuL`^w"4F|;W,}!n8p}1{   pdu=ʃ6dZtBv!Ek%g>T~t9*S( ^CsӖx6zK(A|NKlPshuhCI$$)eB& ޓ& &.6̗E!1hB!BimI4$Epm ]uL4yʕ7s/˜v,{hy^F͂   R8$w8>yp r"B&jw7 &i Ъ4mIB TXJ _m!Zz6TL2c] kk| BM ba21+]XF06NW!cSu.S4b VeFw˒AIHJ@ !aI-@:9Cq R@I @,΀h;m"˲҅ӿ.` g]cLĠ)ZmM$1K(#{V=c1&g2L&d2L&d2LwFR,à*4&&ؔdJCjF} VkvjXuߤqE-%pH)h'ĈUQTeRbmcę*wS9ӎ c-,ƤPrM !&5 8k! $Gv$9S1bIc0ƴ/"] JVCn)#L&d2L&d2L&c+E(aP,CuPaStЈ@:jkiLI&׈Q訡GCĀg4K& 1(^}w-Xvʉ`ŠSH@qx(lI%gH!Q+QC5R[#>vf2L&d2L&d2xfΜEGŚ lxBa:0cJְXm%h<1$q\5tD@pYc$Qaxxz*c^>ͱ҅U'"2_]$A*nIN퓂%e8gJ UFVAQ p[;؝GtfϚ5Qyι^g2L&d2L&d2 DQ P-hJĺ-/1iO"UEHIݠeI vId&d2L&d2L&d;>PSCCeтb2XUPGZbpKO Ka Q#ଡa( G S! bT0Xi*ͶDm) bIƥlqH (M_ۛ-T D X$FXŃ 1\9B*rmVuf 2֩mFƵƶ":@rtd&d2L&d2L&d;3 dXvADB(SQdh*}TB V,gbR bVIKʎA!ڤnrrp k->V}@/wmgX6{G,9aŤu{L&d2L&8 Pzø[EO CSǪX1@((#V1fY@2)I=A D$EZG@CZm#4C`ѝSljdԈ(ԤQŊ@TFCפLT#:nLY& m7mֶToԘBrL6=.<4 mw~e 1'AntwwsGW'kRۨV-[7qj,h.ۦ7󂧾n9p?8044q>Cڵ}vqlm[Po{=޳w7Íw] NfL9sz,\u/kBW׌x\p׺~6'GYq59]g/gJwqn&d2L&!B0F/)D@i"@81Dz:: @$Rc, DRTKv{1%%qP|Iz!`RJ$Rjń@Z|rଵe1fL~5xiT iUvheEo"*qUcDi; vU%(Vx*Cl~pvN: 71$y@ӱ,3{i9LދI)Ǐ\O}9dlOi/}ˎzڸѰ~N9cHo .huC}̕ys`f#<1h]8i"Gq +Gǰv-?v?dNj4ڲmc8(igg`/}W?q`BٻwSL}ı;… q`_o︋Í!-Y}ϝL޿F_I%eOi˔)SB`-ڳ/.>?=373yɇdo?s;+&Nsgsݭ?oo՘5m't3{.^W +(d2L&dPiO-$T}fI,,Qh51IӅn@_FiIijFKЈ EAK51 4`pDB1P5Np[sm0Z*ǴKp6ŏR-iZogvT Z:e/ۢ}/}IlJY~nb>:g˄o,ͽcJ7jjz3kJxUx1&OǴ9m{vd2#"8p8kցMwH Q38dꔩuם0~}\+ظi'x{1 app5p_׾ϘY˒`}qE@?]]wޜ8/6/3f”xhg%>zjdL:︝ɓJ٤w-bxx}n1jۍ QL㨑)8l'`Apap>]hh10?YU0{ha&C67o>u#Oms?9s'򴧯fcß73WӲC;d2L&d~ BHF$d+Ĉ؂䌊kG3b$%#b-DD *5/=bm2b!Y\; !m jbe3iC1:DlJmC%b&w#<)WDH:U6 Q*[nh[km*81(~PbM"b?I@2c nc|r} ׺'NcGvkØ:'=9Zl۱}10g*f^+8gn:.) IDATw?Lࢋ/`uY]+>iyǹ>{v1w\Z7cEAb*{O {C L&d2L&a\ HGHXhʩPd>n2.jUp(VrFǠ)M* QIF1#QŨR+,Q0H8=EQɭnŃ([ZUރԌ18PEig*kēzi|+q!BJ!"߾-WvOfoKs*jNfq'hC{uod²e0eY288H 񠉯Guo`ʕl۶K br9p%`|-_Ζ-[;g.GqAc/=ͣ(Cי5cSM,Kٶ}0_~Yf|DvK>s0n&}-hdlk SNg 淿g?뙼yc_{Kc'" 7Yp6m`ٲ͛7j*ʲ$^Ϙ1sk uCPd1e'uhzRp][U-`NO99sf3i$zs 3fLS7Uӗ;d1;d2L&dF#4GjFZ 5 %YB\o RФP bJPCIY6њ*Dz0`P\2P@(Ē t FlTL*W-D2>D:P| hHޭm&*"rj* J&V숱 #f% '=зL\QÆ!g1ӌ bwn|3@1)7-<_` UvҊY1;Wɟr>~ؗ)K``җͅ}zΒKرc;K-ED ,\Ȋٺu gڵ?Śx{SfZ>~ ?{AسCGs`~[whw"d2L&d`ycs?6qQ\DUGcjDlt .B# 5(uqDǰO$'q4M(GĀ7BYzYbPjhҡbgstMmMNQ1$F *Reh'ZԱs|N$ FXȝ1jat μ{W=ʢJ43pE'QK^=àDK}D>~s0?Y{ػwo\nʔi*#F C8k1rتL6741h4(}rf&fO0=.UX|9;vlguPeElۖr~x6oyτ [{ϖwɄb"-y\ߗ)fYo N?}m?}%V&Yd 1\军nF|Iw}>ug>^_\300G/$zB| IOO}oxDG,ؠYt KqZQϾ -˂?ۗE˽}7:m*ud647o襟䗿#to}yC3ص!蠨Xh ֯GuVtԓ9ǮݻC2^i#҅*+X|9/vLҎjrutt2cqk+t>~zb?EU8q2G~ҸpO,c{Ͽ\x1W}yk_)'6*ɻyꩧp>ͮݻ""|磗~yyazL,毹g1&L>1/y K/'rE|Wp{/u?-[^vŕl޲^t'~O\v9|<a⥬]K/1<$j5֭_ w gV\}P1,_ȴG7ws}غqGnj:29h?"7S:Z g]*Qѭ \nD1יL&d2L&L!T@T `#h&ҹX PjRTtP`w0l0%uk@,=b*sUUF"8[&s@a-1h\ !:Vʩ݊pZ$AL: b۱iA 0ĀZAcQ1QnFl hl*g!,KYEȹqryBz7]H˩OEg4~BMWo!`Ph(Z0q±'=eI8&$h4dQGPC;9G^g`pº^XŹ缋/ZΜ9sN1L67i&=]UȆQcC5 i{GIiͽCfXg14v4o_O\WrGp҉Sœ9c5FU.Oe!teh@SVLV1,Ҋ(;Aj4ă&eHM"lZlLQl,єi(jFLiel+uf?YDZ'quə&f?zg?hlC\|EyyݢuaGE\UN˙=<{z(\AQԪ) ,˪IKq@^E 7>;vlg{._@K.wK*p=(8>y#1]y-&s1af|Dgv9g_}XO$'e> Y}ܑLٟdp[t3skXW0K'{?:ccgf͜/K_ T#۶og޽L>)GB`y̚9#]p0ُT<"f7xA&WhYh6䣗+)%9buQ}Cwtnv3v3^d2L&d2 POI!NWcX( BX4D"YK] )z 45B"!HajkH:H]-`%l2AkĴHDqD!ƈѭ|ѮQb%6K۩*zsmxzB{szNcXD9!M !$1SQ+j2-nڂx#Qbvdy{ŋm98'sGތ`Չ׎<#1Dz{=ٸi[6oeY̚=z΃;wyfV-_ɪVS\x,^Eeϟϖ-[P u/Y\twMЎ!g5?g֭Nwޯ kJX;p-?fٲegx҇#w9gtXx11*!slܴWe̝3Jf͜ɢE [ƛawuM^1{, >蜸#ϼۿBV>0f-8ʔ>C-{>\N\-9gln6f{244ٳݼ::hǼ=A&bMv'ߢgkO!kײ_]LY_vOOyUE㑿3sl߶VI’bx7Čh}gi{*yzpfrR9|͢OXsXGCլݹrxO;a!܃L&d2L&ya.i22 QjEH zDM;uY XIQM"e#J X5D@IS&<(51@lӘ21ʠY m?v!-Th%^o3ln6jcp6)P5onk?:Ǜ%SWX2~KY3qE)H ؚ/pm]3.1bFc,ٶu;O_U_<7nj}U;x}8hbv?^.\Ȃ ؼy ,dݺlڸltRl¢ QU.wA;HɧW^~I?> 1cѷ0u|,~9a{):wg/Gޙgyy?q0sg?O:jLoU+blܴҗƼ~ܱ_*C_c0G|?I'dbNCwx-L۶+V};w˙WQL?᫏x+WFs'}=-q:gގKKO1|3ˤɭw㎝a˧alu{60.-mbYCL&d2L&AB$51Q̶l0R>D)$*VzՓ9 &Ii QQIFR6& {lQ"+0֤Ucp-JcDPYGJt 1&<:uFekHRTpU4C7TQ~#*K%`Dѹ7>5L^i-=)1އ65Ѣ3OE=7^qo+VFK[f׽Fc=*,Sexp>h3wϟϦY`!7ld㦍[ށя}Kyf.XH/|7_cسgsm߿o,&fcǧ>Y{2uTN{Sy=oz#|E_QG?_B+S] 1.ʲs9Gwg1NU\p׻'/fyX뱺c;;+OT{ 9o{+W}ٺm]w1?b V1 IDAT~^7pW7'.m瞇r'7~ƁcL; wܑ,aU[ۻ{}9Dy'e?(6cSNew3)O9ۢsҷoh' 0*e˗)3.ik ?1SHֵg쳀'3`r.yټ_fzy+غ=w}1lcgx&W앟5C+L&d2L& ҊPa8FX cpĈq: .\RiHLhal)Ŵ.A0E0QT1D4z+(5b bMqδ]-guU(Ѻ:1<*^Ĥ`1nIYWVk"FRdk*6Y=p0qUz?aK8&tEV2лfxTtL T׌[V얈]-5ak9|nN٬>ʲIVgCw=c劕 l6 8Uoӟq:;wd޼lܸ 7׾׿O^ b,Yvde\{w^:;;|H<}4 ׯc,_yn9>J_@WWo˛y[Ƣ G?<7 eKᷯ}===w'!ԯ# N E4?<򢭶v SX_s᜷e&ȍ7yvU=YɴR;=KOs6ni]كus̱^_3?0ccsvˮu!=NեNbj+W>LjRp:}ݹ;q]w{?:W`ft)|዗Яkv߭xŬ\rxg=r;ﺋO:/|n_u‰|:oOD~ d 4O ^z#u]$5#Vij+.&!szk}BU{n5c7d3>o"]w8.{GT%.LʻS Ӣ+J;(Aǽ2}[ȩ-$w;\Sb}e=v\яvGG])'!~;j"[ts9{Ft0 Tbt2h*UwrnJsc H93'JD4chץURkӥӗhJ7UL%h b@U=njvfӺ/Ek_҃@y?Ɏt.gLm#ܗ bBqƌ`WOyd u1Yf//َwݳ-K>Sy g` ?Μn=uϤ3G}#pIX)%<|Ml6<,f&} Z~nOGDQm&˔l93>>Ngb~~g ;~x1/ H p_o:lY0Koi}&&&nF>q;2'Wŗ|wes9sO6A(Ƚ>MJ]#XK  ͙&Y%"Z4 )cJ5'*Q,eDr΄+P[& !xH!P  SCA JfFUU4MƧV9q,f*u/~v#z~TؽXbRJc0 y%߻4l9Ϟ 3VZ5|cc8L9 A(s'@̪U3gΌT###,Z_rzv]ϟϼyFFFxG !UU122œ9svw_´GW=ؖ;s<}Ƕn;+dSa⽨~_fHӡ*]]w?cx1;#ixtjz! ه  nKb_{/g=qFGG7-;gz?>_^}78%vnۧmp[Ohf;5LLLXz5cce[߼?zJ{N\o|~(9s9Դ֦dhU5Rӣ"PeeL#I Lr Uo $eSc)Ts}BX* #ٌ~.aͣ"2LS*YUKgԮg#[&hYjmYy<,9QUmE{@zEP̌xcs _x̲\2ƊիWj1*-Z뺼# .dܹ4MScOַS:wqGVZŲ˦/̙36r|SuTn;ko^<ĭf?_AU-"UUFFXpЯ~E˖zɝyqwc?훼pYُnoϼ#OaٯXk{?瞃3*r)U 6{sYSD*UUR)7`a&+Ռ7fs9smN Cڄg_VQ*Q*%#%1S;1P> `ЯkT. ̍A&7$A TJ &40R(}-6YGIH2Yh4= eJv=hWm̆/ՙ=)-b=b6!/^<+/EJˢEXlFG WqVcccà}ߠΜ9,y˨NxUUm{^f3n3 eC+gSD #M022B]uMӬ9c^ĿxUxls9ܓZ4#(162ˆfr6BUѤV2{)C6bDQrN5 S<@"4MDH5hF$XFEK!:'zaC!膈T"Ig(ƴBd Hh;J޵Pih;JtءƚЃ..7[|Μ9Md?nqnNN[Һާk:"@UU7`%Kx/.s9sι'@׌  &GB2d2D]134XNJG#},1;XuN9,:*L$@@Ȁ%&cз#U@ ҃,OA㗪\ ˩yܝNg2BuЍ]vvjg2h2;_;7isd(?Yub'Sտ/>;s9ܖQ[F%yTtBlnŪfnN O5P:7:Q+붮i֒MJ %BYTuyX2Iea⨂HJGzyJ=EHe?)%*dˠؔؑ5mXn2M):z?ޅ',?n]9s9@u&7L TԹ̂ !蠐 0T˂!IX IXyljI(BG*F(^JD1o3A0(yOFxLkdzri]ٹVߵL[HnsgILh0"!}*jcs9s9`)}.hYm0n9jc *Hhri`6^hL~2B;iZf̉\f/APAMb̄jK{%vJsN8(\aij̣͟dX~l.eιK\vYޮR*=D9`;9g 9XƔ9s9s9_cJ&a)щ4F*Kz^HɌ*#""H$ AWȑ`Uld#h~$Ha6x8Ċ əL }1P@bb H r4)SihobZyۖ0,XKPT-C",rJq|PPjHs9s9s+Z")g$eF5$DɆVD 4fa$F*~bcvȚj(4M&7 KVL24(5m B7 `9if4+&3˼GTՀ mu -.\:Ch6(>O AK'zemZ7oa' d|;s9s90AK}WMs")dˆT,ӫj QfEFg͙ʄP(<`}!1(ډL!*|,~F@0Hs&g,TI!cTQ%;2L32m-2]gPx6 \t^O _~i9a;\Sz-9s9s96X3U7^*깪F6#c9+RN$6uC sF!P`RqBjZSӔ$jEOUM*j:kzD.&LXGեCɼaVmg[?:Edy>mk\-;s9s9p"%$IIֹFƠ4c(](}5&R1]2 g ]UȹTҩm wAj2 BD:5 $wĒI]U0uâdȥ;@aq̰|2-{xݔ萩ePdmBBR"s9s9snØe#ҍF,4JN~B\Ȗ2_$ <ҌG JW. mCs('5P JZ`^ B-SaN&U,Sj2;J6Z@@J6,h*`]:KѺĉ RS&T f0q>5'[dzs9s9sιCiV!F:]BHdSPEt B$h2 bXt;֐7 "$!`&XɰkAa)!X ɥH(1 1LL4b-eXcԊldVPي*:O)>y(8mƙܴ.v-' Uv9s9sι d4jX iHHTєP ~j@r[!!54AKqz03@0o ,QHo24 HȄ鈐Dzc1F27Z;1TlPuGXfyp`R8uh ۹'ob(ŋ79s9s9srzfѢEk,K)|Ϛ!*u4~L5ݠ4V-&g!DDkN)ID,V M] Cc@RN0i cuga3"t5zsQH9cDsncᶸ]RvtR>zfM}[ Vx* AKf9s9s9[? ȢL6*1B@b\g Z*MJ)_2ѤG*r6&z=D\d3tbE҄5%`\c(Rh->X@2j8(Rw鮮J !f$[3zP1Ajy)3I9s9s9ܺ/BN E Y҈L7Dz_:C Ƀfk&kS;Tqk+AF`ˆ@JQ Rf5T0DU[3Ec:C`PNa==H٦nYs^.[B]ۈ=b9s9s9lr黲l`M24 TJIZ 0^(S<ĦiH)122vbO4Ahb$ҹsX-`nSap|~򓟬q݊+VXlv΍?9p]:Fr2V4%ЫbBT%Q:UAP!.! E-]t%3?H de"evV!%,,J#!RҩJ\XP*5b21h@,@Tr&Sa'iCtpkB#9璓KFm3u#V鍌#m{wߵ^6l6>|Ajַt?͸wg||ͽ3{gy&ԧ8COGy7 k7qυ^b vaٯ^GUU_s9s͌;kX. tURA-TV:j R<!PņE)#fjjA6L2s;{Rh0k4JNԑEQdlF@P)'CBvg) $m75`ڲtGsB5anvjv1 ٰO{m6gmχ:>{Y/g '_ͽ;3o~3_|1ysvm7/qrgPU3 ^3_Gwq}k袋78s9sOxicuBR@SgDbI*KZGntL41 xͻF\IYBA3RGXʘeԔ:1DG*3r[N9Zr$zM&e@HQbk[NC)m'[N@:vF akvB$ɮ -O*9nDzۿe=`llC9믿~8Ù;w.x|K_ZcKySO /d]we;\}y,^G3Նƒ\|,]s)Oy 9眳zsp 'uuQ̝;wޙs=֖t~m IDAToXȾ뮻8C3gԧXp!?φFǜy\kD<5M\{(K,SO]؆l+y{cllC=.l6l߷u=gu/yKxӛ#<2c9s9s3G,RLl4ɀҨ\5Xf5H`TTɐPQM`f%$CDDKq< MԥMJ~ӐEa-E dK1] #hBM.u$^2Zm|rPZTHIf^k,(lڂvN Pd7y݃oo7}c{|gŊᄐ/O[6x+x ^W^W_'gg?5};{{O?{w#8wkݟG㪫<>Ow=yx!'poϙ)?s no}[kl??8glj8.r=JSx㍼կ~5w8s?λއ)o믿/| ̟?? .`ں.<媫kc/9^zF=S߷='sVZ^{W~9s9眛YBRghP Ԧ$kk*t v"d5.CM ",tLG(F  QBcDQRI!PI`D#(%eeYɠA1Y %7[LPX}<PRT1RS*\˔Grnid IP7 N&5PXMi]D.\g=|`niy>g}6|;˖-[O?}v: pGpuO-jҥ,X^=c{,\ % x_׆x38#9묳XwCwO?}qoxG86͍ }Y׿o{~-Zħ?i~׿~|g]wݨs9sι0^7"A1bR"@UhD2*eTK8hxJIHh643r(5DJA0^R׈j"dԢ-V53č :cm!pgC2Xn%vQ^Chۉ"%Kی,L ! Oa"d۰ .ϛ7OOG>hnzi˧ꎍ^{ T{7<<Gyj83ڟ??`|[╯|%7tw}Fw? ox]vv:nmϛsoMu~m2N?tnk\ďzho_mu=kSUs'tG}4;j@s9s90FU%DՉXNX;S1eA2j *Tߦ jK )ӫkrh2 AP5ȘDBT3F@Љ(HpmMJ3!#0*S+KuF)Ei dX@G+#WH!F+#'%N^k+kDJ./yK]^lfN;Ğ{9m٠ع|<`ٲe<.w76;w.~^GJvc~c.b;ロ:9spA8s9snv(Q)\몊$r0[Lҕ0~Z#f55tX&2@%ZDUE3MNtJAH H&1m3G2!RUK;TF@m Œ Q tcـ\EN2<rT1҉* gbPJ{PB Vk5::gwX[ɢkn~a9FGGw}׿uZm|813>яnжֶ? rs9W3<|pfNyddޛ|3\{XoC38GyǼoo׈Y__MӰdɒu݇ 緮kqsGӟt9s9,eM&$ 4) !Q0"JĈtl7 1FN`@DB_!}KLuG#XLJ5 G:DNjȖ1+9Y} !1Ff풛hPh2 !!%D\&A(^6+0d ( {cfx,.EJiؙt:kOus뭷r]wSasSO(Gx_'ti9񉁁}Y;UW]şٟsײ;n~8s9snf Erݦ HH YF$ЯDUa!R)lW*z=QmMɉ\r)?3wt&r1bCHm*g$(uء3jȹuNl֏Mh2$V@P|)/ QJK`X6:$L HBiR-ҥKw+vډjFof뭷f…\uU3%"?|||7kYj|xNusG7y礓N_E<ւ ?Υ^ʇ>!>hnv~w}wnv&&&u~=_￟O_[m|0r Ї8s71m3< ێc= .`ZmSG?>W\Gs'sAq뭷tʅ^aƗܹ%߱19>M;7w[V_)tcccr-k޸>/_Ω{?9o~9ꨣv^{CꫯC}+VprꩧrM7h׼s9s9fNH@/7F]: fTmrE-f f 9 20ҔlZ.F )4B@BN-`) !eH%#@"SR=NPTRbDT!K)BK RW+m#fX%LAe 3)'mYkټe/+_ sf}哟$'|̒%K38|<\xk{g?^㺇zs=>x>.v:,naÆ{nƭ:#kBMoz'pFghoi0^aO~9BXcnf>Op%|r> vozӛ6hSe/K_Y|9fƒ%K8餓x׻{sÎ;o-zߪy0s9s96e$DIЬLXbŒFb-K4ȹdl uB(Ҕ,!%4*h9䦭G@@bR:CP0UPz9ӱ@'TLztGhrB{ͬtd 9g*FDa˜rʄAN نE&3#l MJd``_}/xiqim;;~WU׿{i|C+_ޕYʕ+?̥^/~ ̌ޚ8ĸFz:s9s[}sr!_?ny#anjkPCR͹! ` g,jP>"j$)"% Dn KVrԩQD~ ^ݣSE*JL`rBLP N N̟3^'V'CecXmb,O%Zp@tfY*2O%4$"݁(BBNh X6mj;x뛦Ȉ-M]\tEm`;<;-ޖ[wO_s9s,hB21@TKlHHQ#vG zMɰ"edtP43uӐR"V#,0K$3Xa~ R[w*3_EGO1F8@AiCir*UUhєJI)t ;v)eڮBcH px8_׼~ܮG=+V ߰d^mݚ5Od9s9{bAc`un4AihjDQrjAHCX\Si`Ą7{j:fthF@3}NDS""(-)ѝS7$ d$)yjFTa=(\ $c0m&-Rd9\*` ؏LJ>Ny[欳A"Ž;iƹ瞻r\s5`ܹ/''}s9s=16C #.*B@ 7lFPE !@DL'V`thik!!bh66ls@R;`uSS[6l%fdP(r!´jnt`,SCEqDQ)A9 %[yT˗|ͽ+ċ_b&&&6nl2Od9s9{b &T Vb?\J%ÌbEJ@PBmF@4=Hj&9(M]33BF?E6:%0)dfQÚԠH`_k[FYҢH(EAwaJzebUжnD'ps9s9sͺh!L]ץq2 k9Cr`)%ȥK#ӳLF@K)F FH9X։ 1hרJBH)MNd`۝bl3#VڎɁB4BPATѶ=켞"S kjAys9s9sIAU&Y ͙NLɀ@F-ChJ%Ҩ1HdUL<,*%4(A rQtQ DA@RjA9%AƐ))CXYj R9"X.圍'9VK[8da&.tvv+1VjFI%w[s9s9sn(B * F"ͥ6טX*Q$MbBT%zm$I ΄AIuM5P4:Tĕҭ*%#R;Fb`$2,iڨ+Rdu1"25Nc)g4("*(Л衪RU%PfX0i9s9s9֗9B$^t:@* mtЈA3D2B-TwC -)Si X!4Щ*ܔgb H )ہY Jm:KiVdrHA NdG241>QD1)euMu)F;1 Ǎ+|dC}lԹuy{> }@D87㞭׿um6Mdu饗ԧ>u8tS1f=dvXۯXaŊӖ?Q9s9sL>[ڠ+ 1*FWAJ3fƄ%~L1gä9{JAٔEb-*U .( (DG)$&f.QB\AQDD GELt3 &O?LW]}ΩN~qaaiv==-ZSUUҊnEe,4p$RqٶWR*u\/3[H hd=, z^8~vN& WѯFJW'[(gυF Ҵʕ7 JXfNyi׵0/^ѣÂv,ˢO>TUUQ܈6 `0 `8hpȒXX$p \ m ]lIU(墅r=k)!/B rĄhRbK8L,x<P.B !4KJi,!J㸮'-" خ~020##JP){ -$?.jV޵r hn[vq+Dh+bmPU'i>"_yO~rAJҥKƟ `0 `00Zt]l#(.(I~H,K`)zd[Z#؟IIu|Yl,ˢئ@ˊmи)qh/Ǣ=GkmK$$dJP=0-%ʕh?Z ;/Zk8Z@ƓAHΗ3m;ȶ-G'e!,<|˖PV%%л7Yl&M j…?2+V`Ȑ!4mڔRϲeիW3x`8:ujkC[/ IDATOзo_:v옱/7FtܙZnUW][Y"ٸq#Bvc=Fǎ)--_~[.k-[)++޽{To+8ZaÆѼys4iBnݘ3gNV|`0 `0 xH qiaI 'AMb AmcK+Rp $ClՊBqЖ.St{-$.1)qe/c5?fI^ _WQ"-$1&f@MۖѩZk(Z ARiQ$U%JkFB.%IX岐\|1}6 ]ނm<+=Q3Yq2{l6oe]FUU'ON=z4k֬aŬ[G}+Vp7'NdӦMlڴQFqeσqe˖1l08 V\ɛoù袋x精3f W^y%/2SNGeƌ9sɒ%\{YE &ӟǬ['|f͚1p@***<>?0;wW_etڕ.D"fK/qsg+o0j(:rh۶k9ؽk 2=zb ֯_ܹs~I&3`0 `0 H# .$ 5e87\JJP: BjD#pcccwBeғEHEIh%}=nb%(%hl)l|x?w}d{衇`ٳzoŌ9}O,c޽O=TN=z:yӦMi֬_|EwyYzСlٲN\y뭷`0 `0 ūfŃр:~ث1|i,žP:ЯF[jxK8FZVƒ$ǯ(!RzlW²$e?Ka ~^RXvFujV!jlrklnh J@Rp@n`u2B^fu%-[zu!XnѢo2?Y[lΝ;ӶKee%Z}ÉTWWghݺ5ZkvMiii>+:W⥗^ֺgر\| 2}{-O>dZVv0 x{cBT6 `0 `04.Bx4G1*ixjl&"&Tj,KRT{lۋ۶dRm tIqJPZ ` "iJ I_۶pT5׸ KRt8HPHH$\Tans|72wu<o&dǎ7vѭ[ ~Ν; pe=66fg㏧uDs2gyHfٳ'<lg裏2V e`0 `0 'b1/V+Z) \b&nپ"洢Զ(b .RaaiV_PT%8ʥ?8Sٍqa6 Bb!4ĤEIe!]]]Z3\Qc~-cc PTr]|j뉈+R%8*]L:T%< IDIEsd&LeK~())k׮|guD/[k/ ZH!؟HH&Rl@Abd Eoyi~H*XBz| !.!%KԌm!j4mD)hoS(lq}vyק8Td>>u6?1x` -"gY>Թ|9PvG}ĪU]MMQQ={gϞ}ٜr)TVVf(D}|šw ˲hڴiVpm0 `0  ŏZ#k*l)\b%21վ޵-}=l<ꠦ"D1e5%B-} lJ "m / Ix2&AF=aZЎ \4ZxRjZג_!!I 8Ap; ̄E{)6 У/Wmᨣ=a¶.離*'0oM2Z !СZ*nz߫} rу7|3c5kQXx1{.{l6Q'LOf=V8NOTz_8+h۶-G9r'omsᄏA5 `0 `0ڇRxIqv8^BԎ\)hq)\РgA-*VaAI5⸞A/$KR)%:b(4 @a۶i- hX*ٶ5J+ >ʡ&7*^mŅ"B I%2.JJslW^3`_v- oy&6믿+WR^^UV >09|p&O̼yKp]_|%K0|z!bݻwr ~;Gu}eƍ̟?I&ٶ#G2m4zj^k&)Sꪫ(--eȐ!a&Le\'G.lٲ;3|k>}PZZƍ5k\pAQ'*SL/s9۶yW1c 8G}gmڵKo; l‚ 9r$O=T6 `0 `0 /bvJ,1mYT')-zQ u2ŀdHbR"$< j[Hg 8&8+)۶cJkl)W2HUTZ{ޮ%=&5tOB}G}^UJ-_Bx~;]a"5 [0p`ۙYfqs=d۽{7SNe^x{w3fPVVƅ^ȟ'Xz5cǎeɒ%a0뮣'|Wvi<#o߾޶fĈ!ڵ+#FH ^xQ yg;w.J)vʢEUˡǡCm6ϯZ>SfΜ޽{֭ӧO{L81v `0 `0 vFE %$mWQb6d5R+Fxz3ZlK*BhHKh)Z#W ϞBZB$>1(奊{v YAtݲ,R8nKZζ-cQﴦ!m-ꄃZ)a(W OZF)hQbG(-"uĶlm\h/b5`w\z*~ڗ$=PZ{ҋQihv2eN b x$)R*FzXRzQv4 +FJ C4k,M6дiآo_|/֭;M1 `0 `0;aY0!Y.Xj,HH ܤR Չ,֞|5ZcbWqe6#^Y bJ8 -.q\)pkif !BYutj0[)Lev`2 KiǖR^QH| !񳶽6I!qܤUC]\|̛7^zѻw4m>3g֙maҥvitH7`0 `0 `8X -RhL`Cj  Z{ 1i\;ࠠ'@Zkz:ٱx'x1dOZm<PUCx$IOG۲ߡZ֎놛H)44V HejF=ya[ %Z@m[; L2n8>䓚q6m0zhNz[ydYd Ǐ?0 `0 `0ڋz1ZHKv '5Ňh.ҒĈ(E"8n۶Q+۲aFҒHOB MLyvx<j/x4EXQ"5-L{E(Eϵ-jH R.Ѹƍr]OP'RJL”)StS_H7`0 `0 `8bh4-R*+f!k"*eW0n\EĒ6ecY$IʓV`K Wi !*옍xRD;.R FǤ(b[R˒aZd^@id`{!"ke&]}o)"SQ`0 `0 `0#UULh1*TP▅VW)b*uK"@+RPZ:.v-q;$nAAr mKH,;АHV{E!mIe,l`J!|nҮWR'$Cl5u RPIrȾԞ6%-hioݾ4a9`0 `0 H !b 4,F܈JvHVA-,Sm ^׶1!:^-Jkb3=5Ю!I\Hl)DXMRr2!o ;zJ)/ܶ]|AǚIn(aaIꙞ$Ĉ`0 `0 `048B gm*?= )Үim[!QIuB]l˲p]&MP[}nޢ%m$(˲pBMCmB`,?,$Z@@Rh\`R(UZaGjkikɋɖ-P-"pPz`0 `0 `0AJAPgQipma,$]W)vQ IEh 5fJIl!j$H^ 9N ]a 5a,X{ 5qҏ;jyhA+QaSa^J^_~[oW0;hI}\qGY]aÆQ^^NYYgy&J$Iڵkǽ[M"`ԩtܙb8餓0a_u}ھ};BoߞkrSO=!ZھoNd}ݳ>ˀ(++N:1yd8ae<_!x\!jO. h"zIII tԉ)S [5-w4i҄Rw#_&6ؐZaÆq 'ЪU+zҥK}7oj<$$;wm۶ڵ7pQM{σFFx_PmmzeF4rÀ3saq i9HbՎnʫ෴ذJ:Hɠ@h%R)X~=E[JՖ|} mۋSD8`۶W45h/hHB;2m*JJJmlڴ)|~}QUUU۱cжm:m}] ĸqmg};^x7>S')S30o}:J)bX=]v؞͏/^]wŌ3X`L<7>>x{Y۸o>.bu떶=ߨ \sL>3g2p@b6l`[_|1;`ҥL>38۶Yv-_ŧ~O~4 &?yѵkW.&MO>g?Y+|3bf͚#<۷s '4PϨr*4̇2@4 Q6\u~+fJoQφη =|S_ =_7j }z=6|?_OJBGqײo>nz_$9BbY}#Cb Ҏ!l–@ I̗~|,KnZvv,8 @Xƅ~L ^[ K[E);G Az`GڥBVZ;FMPO;ؖeybir#B dMvjǥ\H:NVS&=l۶m?.+;vm駟>b?֭i̙O?dw^QQQ_^z1{iݺ5?ꪫҶ/_ .EF#Xl۶~υիW3`׿2h ?}8XիWӻwC/}"uWbȐ!i~m.b֮]1noټy3/R(PC:twڴiË/~4{^z'ЪU+vYf<|OKٻw/xix|c_HWc>(ɑl]DG%PߢC\B߾mQQ?F]4d}7c*4Qo>/Trf7 IDATo^7ӻwoy-mwz֭[i[ &q 78NI^}> 60fqN;#ݜzy'ׯ_|_*}'gc҂')iiqX8 \MܲmI"D v@ĭOC)Rl۶줃%-/dg`'0ăEB(pA)B -eH Q{^k")odYVCJSֵ@kG`!FݽxYRPa޼yviՋ.,mƍB{n{1:vHii)cݺuYb BӦM)--,[,{?Xl;iӦ5g_/eeeu~[yI'5(Sm׮]p ?olܸ1o{O?駟7p{dN?̪y4i҄nݺ1gΜ:'J"`̘1~~ڂ)++caɵ;$/@߾}ٱcGZ`(͆ XpaFA>PHoO>|xƾ=zPTT֭[mWƶ팅/)w]^}pہ:u*ϰڵ+u?CR^^Nii);wfڴiu 9W;wnxYn]kdnqk׎N:$Nv]DO |b_hL%*7d~k>hIC\w^Q3\?E|۟D ~C7}]TgC\|\qF]?DBWQo_Dm?_Do^(SYY?cG&MOJ94K,G2 {,RJ&MEI4iRhpB~g.YիWOo)"ƽ_C!ɧQgÆ i&{P8p&MMg˙2eJ֟C޽)%͛7zBK/yiK/Ě5k̳>˵^ شi6mb#|hIDi]>y=GOOo=D~GE:6d}Gu =_A[!Q_Qۨc>+|i]w bmۖ/"kM<$;?ϸ{={67of?.ɓ'LJk=ĉCQFqeeq3fJ^~eNʣ>ʌ3׀B+ Ϗ_|1g}6 oFcO<#F`֭lݺcDzsN>c 7 6~t3<>~Il!!Ie[ĥ-d4*%~s0)4VhpB pV--;fcdrs k`;^6xhM IڦFȓKkV̅[3^QF5͛7g fΜرcmݻwg߾}L>=dYYYm֧OfϞĉ3*XK/_\r%i~f͚}/"mvZ<gx ԛaT{^Ml}̚56mp) `ӦML4V'{wk?vI'ѭ[7s~׬YÃ>ȫJQQ!ojժP;O>8ٳ0aB}O,N`Сw}}ᾃ")S?ݻwӺuk.rLeNͦMxgYjUƾ|!J(i6rJ}|]v6m_yfN:4={R]]]{=-ܒu!]H5k7p<@K.ztЁzc=6o(m޼ya裏(UTVVj*֯_O-/}tԉM6e|P:@=pg=\UjJ}!DA0Jϣ\Q3 WoQ?G[o6{~s=}3612_g =_AX!Q_Qlw=sOrJMr50s )… 2e #Fcҥ3~x:vf/j~h"G5k89ۢEx)//_m(8qbyɗE>Ǐϴim={Dkٳ;vlaРAY&wܑѦ|;g?^n`<裴o߾A}&ƒ“vx!]\vF^ eY~ ~A@v:59 5HT7gJaa6.q¢&+J!puMNɴFm) %]Mkt.+II3B4yx teY{9M6Yf7wy'?|}ݬmݺuc֭Y0j(?d緿-#GLۖH$8x`S<K_~aUb<}>vms= 2"8zb̘1̚5+z"M$\s5q'9sfF~m۶۶nݺzjϟϻ3~_reѥKz)/_M7c={dz6/ٳ'}7ihsN,Y°aя~893ѣ#G_D"uk 8o_Vi(7 -[dǎ2cǎiQ6QW>7Bg*J{O0*oQ~==>2?O}zm?Djujzw>u*!*Y~|r?seϞ=ضMӦMm56Ca֭A͒;8>?z00p@Ceeeߐg:thСCٲeKS.]¿KKKҥK,--WJd]Aѷo_フ_&cI+Z‹:ī(4RHlKz!ډI'&3k/0[/ R*bbڏ/r/aQ"Ẋ߀p+(PZ l?8 J{)u!TvT@[ KB̎VUtÆ tM,[BYO} .YѺuk޽CI&E}]y晔/r饗^-[d|+گ_?֬YqԟRm6\ N:gϞ:ZÜ9so~c=FNRGQQQӾs]$G=3g !٪nw֍O?m׿:+WYY=gn7zEYn=zElwc̘1YQվͅ5kְdVX͘1#c(䥗^bĉ 2D"SO=ޅرc1bd?|u1eʔ4Bgpu}.>\X'Q|s~֦Pi}}a>Dꢾ7]<=W\ߐ0 ~Nr:Fr=;:_l|(|P?/%1W1|_--[dΝi\ץVM%nzYY!ٛ/Qw!cuJmC,cҤI\q :O<+ю "Ҟ*Fܲ*"Vv  }%/fqiY$I8J fo+Jyw4xu-iP<)߀!@y ^&9Rb+Tz/Νȶm iYau( 56Jȩ٭[_~70 v'D7)%_~9c9:-6m ׯZbժU7xO?*4?( o.̛73grC1`zo{,K.۷o$`w?묳88sJ̅9|x駙1c6m:dVNc| QW>pg]9_Ҟj>lL·ٮ\wQ|(G7Q_$B߾m\ΟQ^'Q>h|(|UG\_Q$?_\^_EYYD"mLIv_-wu?Oԩ={ 'ڵk?# 9_Bl¸qhҤI^~&Ɩm#ډ|\W9hM(!\۶QJ$N˶v0$:kJ+av uq$f[8ZL&Dhe /djRaTkO/=@"?-}\x *BZG[4oޜ˗SOq饗2bΝh1yݻw!5sJKKo˝wޙaW[@(UC,>o+++Ӿ%juqǦ-ZhAXzu:Q3䱲üyBŸgW}ǎu~;m۶4Y+W۷QCvZZhs qVXW_}Ok͖-[=\ւAEBmqvڕ5?p'oʟ'̠ArZFO#xF=_Q Q{Cu~lz:GޣgToQ?jOT ~QϨQǨu*uBWQB/П/zlU6҂ .?1M6soP!ԫd>>0󫯾g\PFں@_r5~~/3lc4D&+Wҽ{wz-֬YSgvd;s=:t(~a ѣof5kPQQq/_NΝ3+׿ue˖ 4e*! SEET^FشiS߿?[n;_|_~yW|ᇴlْ͛gI$߿Fic}oߞw}Qe3tЁ^{-m{UU7|scj=xB~_ +Vжm0|\s5=9s6 o:Bxr &Nwj3o<@E,ncԩqN?t$oӦMcƌi>6m0rH&Ỏ'8lܸٳgs)0dȐzG}DOSrŸ袋hѢ~)sΥwiդÇg̛7K.uyYd 硇"ѽ{P)|xBgzڞ\(I-GEGޣgT[TϧQϨzmrFzjul0Wo>(P ?_B~J1FR9~ᴘ@ӦMcmU!k֬ |z7J%]\2kUV >j9r$ӦMꫯFJիkT[no稣o߾lܸ3i$4ۆsOo)))sm^yf̘ ۷ӻwo*{j5Vhiy|dI"|JQdYqX׳ IDAT uO>Wpb~qG5Ɏz2J!- ˶lqI'I,Ƕl/$ ?k\°ܛa+[L }ޭ7{ ;[*>???OsKE6߾@}v|[+9=pkvk>} s=Iw? _B7;vҶ_}Uyuuii.))'|%K'|*ݺukm۶.**:tзv޵kW}!O^|2dn֬.**۷7|lo~a}r^~eݯ_?ݤIݪU+RWUU髮Jchu>gj?ڐDC?[]ZhԥP_BVkĭKHDD{cg\̹c{Zk{9ywm7_WWkkkN;o&Fo9O8I&5GeҤI,[]3gN^`1Gϙ3󮼍Q!G%]ԅ(]ՙnF<xpleXyOTEqL$Mq=am 3/M.:=N9wQ\El J9LQVF)lZ2(R&DEQ;AAAAj!ZkNԩS;l AL"hPGkE, EpG\Z[JDY#I]S];0F)m7j$`Db2Y1&$(W})Z(F(|61q2[kI8Ru=?0h6(ź,@^SAAAAA;i}BO"q6ә Zk$#Bq2lDhq*x1L'I6$~$q J -xOM!;OT.<\7:S I\es.aTAi0xyVFd}kޑ;16xDAAAAAh=ch; J4C}$DQ",CJcǧNks.O<(aTsS3dr ;Oo빽`Ý{f O]͆j+lѳ(AAAAAFHfasS]غP?Q)x. ֩ >EJk\۠1+M!*`Ŧ%֦j,KJ9!U .t4[k&dk:,JQd\T4ɋH TiWM=' -Nd{5_.T5Hg{Ѿ'     0Wi֡naBH˦dMރX֧:rg 26$ɣ$8簄9C llaP)(LK vt))맼Jqkm^ѤԆ޲O:oC.m.Đ-    §2'6498}*bgBupi{9t!pGh_H4>$ŽuyI6.F}v{"Q"Yxw|k]PJû=Zi"ciK\^q.vq_N>+ZkHP:{AAAAAI[ ژج1*<#FwI}dB!HK&fdc (tZ13OGKNnD62Y)`}IhVd" KPQp&^.pgM I-sf]%: <\AAAAAq}Uj>.%vƅ\m <$)E̕lgQZitTRjjj0ZZѡm)CWT* ƀNGa '~PNV GP5`8`cW SWɻ4cڝE>y$ft>lޢv˦LlƬ;DAAAAaP-23s3FbTYZKbmttY!HP|8_ѧ!N$IL](,sB}X%(Z+ej|>"B1YpZ(Sk:(Q.?"mi޶O@ (qow(@;T71tQ@daC }U*ӛ0vjb՛͋+;nv\ɻO.    P i :@5r,E`}-a˟UKAAAAAtSr(*!< o-3;X҈=eHaSvEhI(*(s=mYRJoƒRNJ |pYH*yuF".pxJy)΅H)tDXux1lф1e5txWEWBBԵOw&,EZ=];b8Nц[hl."d    $AAU%؃Fa`Μ6s1:#?L8r4"v6]/3AgDjw&:{1J;Ǣ(B08i.%]b!uuT6I}՞PLR+MV1S,3Aܛ2g$e_7L7>[kx{SAAAAAT~6h+iԙ[:33g$Ir.Mȝ鸥9%Io.wp " {s(@됑m @*TXN:N)";,12;*Q G nAAAAAhA<"C)CAMMM$䎬MKR.dgq֥jU[k ;7C)ET0A.G w!W[L     8cVtјB; nMЙ֗DҠ\["ub&hQ\YXg1J,3[]0GR($(55ؽwrom8(P[&$mDlMP<$*D&:AAAAA9O$#) Ӆ,RERvV{"47k޶i'3/{w=ZVEtn5mJaۼ3)* "eP]jCk]SHʥuTn3w%]SR,6ĉ" ق     M! "p!V:KޠQ:FsU)C :ۥH$IbtŨI GUZSQit L*QJk8S_@CC$$Mzdm84qbbBbB174vZSVdm'\C{ObI .qI6Ah3" >~m~_S__icq+icvc=AAVum =B)Ru#&A(/EQZ'Qu(Q(M-8y2޶{ێ^x}x ϞyfwuIߺvرc/Q緡̝;x66O>og>Sm_~Xkaf8fСl֬X/]K.+4{.tMmsv>va-k<ߗ|X뷣s3b|_f̘1\s5Mg l㧞zmf}q9g̘1ѥK ԩSYfMwz  BGHΩlMCGV1sl[簩)<( Մߛ(B?iQFϳWle]㘟g 1[k/SԠon~ B󸦦]k+۵_AGq>7x( >GͩN!`ʕѣZ re~/Yfq)vaN;Cjgtz  BGŐFxRz3eF細*s8QmaڵR[SM,(Wo{*2yFZyC[ D9X(6(<$a]؞ؐwb=XP vAEk)& n8F4XKѹcImBU؃׆ħ$H#F4W|+uņԿlX+|ue^kj%Sg[<7O.cСѿ>fω֬OG_ӵkWv}wkẙ;w.{'ݺuwޙnٹ7z;?zbM6aw3䦛n>ؠr-YVj=ݺukS\@5OB9sڽ?,Y#lmA)SO=WU{1RMU뮻2~9?`p@>z9.[FZ^v&['ܹsmxGx98ø['f<#=կ~yDž^kƂ WGڵk{,O?47x#=W_}5n\:,-ZĢE8#9#m-xNk|[bgq/袋x[ѣ{']vY'g?.>(K.eȑvaŊv?'N_2ƑGɉ'ȍ7X6;c=Ƅ =z4c̚5kfS5/| \{m[oM޽Ypamҥ_vqVϽ{2vX~~i."i5w̙3 ׿m~;M^Zsf3~)8={6w:ʏ<-?1&L|,Z^z9oYt)wy'n:Я_?^|E d֚(*rmߘ\OAAA DZphFyp 8/yLhU&ԸuqiP^+C Z(OKxf&D@魵c;!/;5r7VMXBSP@1!%I: '^ڤH܌y](ct)<R{lQ޽>6~={tm-vo-~sm$PCmub#`hYÆYëW^_Re:euA<4a#M^ [7lt=н;XdQ69m[7̙39o5jWfƌr!5zhzICCƍy뮻SrA[r7ӳgON; ΂ ݻ7C ameȐ!mݻwo=HdQ)Y믿yNqpqYgU?8oGqD}Yn;3/ѐ!C{9SߚիvZ.gϞȇ 8Ә>}zm̘1x 9+-gϞ]v88O~onq{6X:3PC5Kk̿5tϣ|+~^xldM|ڵ+}i惦(>|x^}U֬Y[ݾ9:b=AApniqESW휣P(h=I͔YH&vgqmPZ)Iu`BxGRޣ=4eu0"c.r{9Uf4FNΛeo7\./>OυƎeeKc/V}gw_Vr[j[̙FoW~^x޻.}D}}=?0^x!GuTžgyٯ |<|(Z%cXիWw3Y,Ymݶb[]][n%/ާOL65W6){rJ/_nF&MDnݚk f(FfZ1S{уb3<þ/oFq)O<ۃ,xr9Ǝ;W\ɛo|?O cǎmӼ=y&۷~{& gTsTs==3=5UV5~[s}UKg?lϣkϻAEۋ%KzU'|&lwe|\նAANCMؠj0B덢(P2%:2M9LT֨RBT`" Qz&df{켝f~b1(JƢO>۬,_UVoEk׿LnhhhqO>MBKssI''xbbP{r-T@z6!'2[OJ)N?t.T{g̘1?{ h1'K)Я_ gCקdok }:a}?sOw[KN㌬;-h ˖-Z1k֬?n+O?4w6l `Μ9-ƁT۾XOAAA<ҲM@s[{_;r3sE \ɴ]jZRXARaєz/R k-Q*QDJ`#h== :Ty]<{Y:MnjiSƿNlwGɟn_;3W^yI@v΍?/āx/fȐ!3+Vp0pfb}shѢ]EgwA~c=ZlS̚53{lf̘sv؁:N;Mx!kՖ_ s {.>`jϷv)|Icc=׿u.\w6͹׿gCק3ߎ:zИn"61kJ]]z5kеkV_f kp饗2sLN8JƏιU۾9{=AAB3؄(ͧrrWUg&f0Ĺ :5;t.$(S/D6NҥITĆTxyJb `!Y1!e9'>ʖb,.m=?Λױbv;y;;d>l :ꪫ2eJE|_;l+qojժ<׷W^|_䮻jRLg;}+w 7ӕݚ1p'r'K/ģ>W\?Νw؞A.]wOfjϷێbȻ˓O>7Mb $ /fmv}:s~cϿ XյK_2dK,!Ik\y."the˖q2o<Ə[SAA:0$"br_2}h˨5Ph6ڱ,SS˧e PnW6?˩lfC  o-zJ]]W^y%'O#>c 555vEzAn`ټ꫼Mxg}k6l}ZސumWŋ~T>e̘13/ >˗7 E555|Pb ]c޽{_/d_RѣGpBϟu]fmkfm5`}Ofecy6|VGU>yBu׆Ж5oLg}y2ȸ}{ny@'L^Ĩg}޽{o0]mhAAN%BkG$֦1$P QAUiFDݝFP])N9&ͣ(5fK;6ӳcLBƉ*ZktR.p?΂³֒ؤ"#|1>2A;۪;ycH5?(NJ6SOUpU#m)}gl_p!WM1&իy`=X͎uVǢ|x1sǎѣYr!{sg47zh&۟~i.|ݻ7zGin(b5kְvvҥY!'$&RAk׮]o¶n?^_-7x#[lEm]8[+2ac6t}e}p1&UW[=86;hMXx1BϞlUuT>hvʄ ҥ /"gqO=쳹C'h-tI<#ٳɾ}rpeC.R?pw}̞=/+BQr{~:n)ƍW^/?sOs4iӧO礓NcAk9իWޮ_ Z̙uv}x LOSN8vev+\!lqj֧ZN׿uWBE+h~+WWl8p`EASN9)SУGƌoW\I VgѢ\6vXL~oE]̙34֜?ӦMcĉ ;0z[oŬYy6lXTtۖkCzؐ3Y?z!FٮN(?~<=լ^q9|AO>?l@e6l[mAA"ML 9Ѩ5Or!3%bsiD㪛~j7T\}G.yG栆`҃LvP$ok~8|[r5>sn(ʣF@a&?t "TDݺmw5`?~wA :&[W'^#F0d&+cGx׿楋/擷BEv؁]>m*_c^+^ ӥo_t&n^˒ntۗNkq.}7EķRw„f^Fѥo_\Cw٥ǹ>CN=T,XiӦqi?wyt֍C=xnݺ1|?xfϞ'x"˗//?dر?ׯ> stJ)FAT}k׿?$ t:U>_ofԩEȱ]j9C;O~¬Yp1rHkI0hР&}{~N8z3gj*vqGf̘Q8묳Z=dذaL0ɾjϷvډw}h^{Ō3nsr2k,:߿?pӧOo|-׆RRΆ\1y4{l&ON{mǑ+䪫G?QŶ~k_ČK.Fn IDATQ)   YZi$I0J{|*:*ISZSwV\|4-.a2q>)B E'I7TPkj" j1&vg9'x[.7Z"\\ؙ⮕ƺP Ƽb8c5ܨq9cH(˗/{s=ǀf~7/"W]uK.;{=AA#q.ho7`R Ġz(Ltc sdYk2w5\(rcAwDrcs^e (̕t]xe䝺TU/;rGi‘CK 8_m)~Wq֚S2uNg l)G3t :A1tP.No߾?1;  Q6!&LhY.mJlJ'IR!>9T =6 V.&t@ZAAAAAZVCЃZPeБёp^cK}CuGE*%x"8oSJiR>X`qB=Sb "CJ4V$IR@> . 2+sM_ ɔq"(>*bAAAAAheQι༎"\f(2ŧPPJ$[ʹ֖őt]Ut&P2-Xa~Μ($VLB\B7|)$k])&$+ aߪe=F8BaxB#AAAAA6΅rDZe1yd!Cz,ڤʁ8gSӴǕņ SSSG`JbvgEQU*.+1JҼm5;P˕L֙:qiv(ci.Bd0(yŹUgP!"+D J\b$׸G%ĘI4+I46EQ$*3GU9g3 /ϑ9ot y^:Xgq.     +/J&RFB .mguhc*Dx|δcc ڗ\Zkmrq<8=wA VJllh\Ym>c4F+ h,ʥ:˲V8Ay Ja]E'1b6b 8 BF)j     :|Y&vy+Y< "M47g9GiBD2XQhhކmmIJ) !h=8qk(1:JөS+W-Ho1*AŇNRgQLEWJcɅc=΁1(RAAAAAvTF:He4HGjCȬ"1Z$x(Jcm{,X;k2C.㳨μocW ;D[kΡΝ;v۲aغ:j ѱ· r01E*emb1y. *mAAAAAh)Y"s1{eY3GBko|؏ŹR+ŸѯjD $@sC@*½GrSC`[ǪU3{K.ŘBlB2z8;aĘ8G)DLln3wUhY"     T">TJQ5 #C*6w 6h%ǴGr&<;o+c(hIi;4Ά}(@AŞxOup_ q# mEֲb]I!tԨpP:kЃۻ5T.jgmsAAAAAh)J+ RH1&hQQ\,I8)k\&y2A[ލj4S>B,;}VGФ1(@Rxk<MŎ|<03NqNWoObI+bAAAAAh ޹:t=λ<~DAe HvgS;s$4K;UԌ N n*,\0lE$j wqԐE~ wǼ0&ƠX-cCH_27S4{1ڀlbvJt heG;II w֡"&Jņ9l]ŝ-    J2uyROhX,"xనr3sГc(Tg2:Bhm xQZ"I"U M,Z+yJy&ẗH˅puVQ'Ƅ<~o]^AAAAAh9%kq֖mr 6s Z-7%p>V M.&aLwFzJsش1XLm)!C<ٍ ̫tñ6a[&hEh7";1:~Ph21t\S4SAAAAAhރ /i}]{ƣ$FUЊ5V$mBa%%ӖkKzXJyR ;v c{IbK(Eb]4JWxŇy"Uh8f1[ہҥF]ҮRAAAAAh%e=Lȱ/s6:ƀRvu43s%w\]3w!BZ*dvgžIMX DdUy`%uE6.Pq.|J%q\ vΕZmAAAAAVt1&Kuyc?}m]ȱ6EYQ2){mγeʄj) \m\}u6:TgZe I`/~ V\٦u\s5\r%\z ͛%\œ9s:uj>vܸqGy+#FPWWܹs xV_K.BaƝwO~.zk_̼y>}.QAAAV6']va}R8oILo7'g1"ڨE+ np'I $[G{ﱩ-Ƙ|'yQd6Ɣ'P*M.JkH}χ*~b+)I/Tx" `-nѽ{w^N;uZ֚nmr=z_+mنڊQF` @޽ݻw{_ַ&sO/ϗ1gq/bK._檫b7Z8;g}ÇgM7O>o߾-:bȔ)S7/:t(]t6oC6^ꫯ'l kirgr7}/_>|pF[lYaa    |AM(bB\Iޑ"h @Cphm4ݱPoy NI ::$Eêb('8ƭc 򯳃-yo-$‚^>.?i1&½]r 댻ロ &pGpw7:cӦMc̘1tܙM6ل/QwQJdn&j+:wѣ3gNwlHsyw裏8nС7oկ~e6I<裍C)/+.x;blO̚5 !;cw>h _rE1f̘FAmmm5o& o߾_89묳e]ڼPvqwpgү_?>`jkk4h#G7lq=2k,>38 <#VX9ԩ[l{.K,i0G1\pA~4x51c guFΝ3f ӦMk)iM{~ Ƶy-;j/AAAAh)L5PHhH.wsc3*eU_3}9G/p IDAT$ 5x_?u0](($X(}3#䎘\)Z[Wp_?뿲ȻجѹwR,̲%\N\>.@E~a>`ƍǬYV+s=wO?+gѢERhS.8cKYs2#[QxbzҔK#$IPJz;Tf* ˲X+~f۹rFNge]Ʒϣ>ʮJn8I/6i88ݦgϞ뮺*z믿Έ#R I0|F׽kXv p}ϷGѧOٳYj_Tj*,^'%Kп&Lĉ~ss˶~{\ve>ӫ~Zz_   7u2RxBJhJFΆZhqօKS)9s=Y:'s^x هΆyv:(ާ6P뻨mti۲hpL0n8nvn&^y啪_O?e˖quuu|savjzqذaם;wfذa3s,[ ˗WZ l| [m555|'^C}f͚h7MΝƌCǎ+^M=wf͚ž`[ohK5OK    lOHx]-ƐwhBL1I nlumI%zeXEpkmp '&ΓFTDX UxCm]GO(G lwq̜9I2}t|ٸq8餓/ѣGҥ 9;wn6+\+3gdʔ)̘1 2zh&O@o{?~-T4ͭ 9d6uK/^;6_뮻2j(ƌÜ9snZN8S,Yp!o3g'Nlr}g\z\r%^OkhXN)GWݛ˗G3<kXkm=п,YE翜?Ol-Z@/'.VXѬhƮos/AAAAh-yu"(ibVѩiޣ2KQFi㜍*ʰ6(Z}xo 1zDE\toEZޡ1!ҚJ#fڙsl3LPeqi5tB!O#@kMi`"_-is뭷6|I}H]]nj:W^y%^z)'x"^{-{ũw}W_}8ljСCEٳ+VQnݺUGf6o1W^ mنl馌7vءEsΚ5~j=i-x{7&g}6Nd&Ô <6ٹ}NZ6l3Zk׮Mֳ:WAAAZCI6ȍ*,yQik9- G2 ͍vޅlT1q_y!h5&DxޓL#>ln>iR4YK1:S<̾VJ|X|YvpBK ҐՋ23gnkm_s_s?<_e#˶棏>?)3f`wzG}}3yݛŋ7~ŭ-kjj*2F:Ƥ)zy[,u]2f̘jkkw}QJq]w!a[Zz?m\IC:tP@BdHFN*>2{l~r2z{رc[>3k}-|WxAAA?V86lez?3SR*7oe|[ "6B GО= +n:KZ?!b$Y'FiVQvYMRQ`V BK(N:^˻W? N1i1?)հ..TM}{< 4b]nݸY|y.,Zh1Uel-x {6T[#XbE>S{=Fz|Pq{ѷo׿'xbkmۧio}~gsq5nȑL2v؁}kmROk*܏ >Q+RH>}:{7{W7PSShN\555q'MIPSSg}`ݧ~ O4vxt   B[kN>Z.{!2!Z(V]݈ e"K%KBw$Bvp@h6Ɛ$ I%A΢?t'p #M"إ9ˊ1yl}3ЩSB6 7ߜ|Ys= :_>swzꩪ?N>ɓ's7xT[>}knf lv:t{mfٲe*Ck{-ZĂ 5dlٓ'x1}aСR 0C`ki-_qvW^~ }<?>_ֱc\-bhb<W\A1w5flvF̜9hOn;{g̘fmlЬy~Zz͹AAA-P5zLph&aka \ q~Y'[Ρ=(1JQc 8*DrTef/Sޕx1AO osQ;Ppl'r |g-Zk;sM}~Mo0aB38:ޚZ~a~_pm7x#/`XO^jS,+O޽mh"|MF?穧oQiIW^y%{'IpGb/lgU8AK>|ZK:u_ '[o1ɓ'syѿرc0`Gy$^x!o9i2|.2>足gfҥoTC{ޏIPfܸqу7xɓ'nUx\x\y~Xk:u*SLꫯkP(0rȼc:,6`vygϟW_\dmGy$_|1z*s Zk^xW/'N裏s>tؑyqgOeL8 &ЩS'$gM~˩i%   SڄʜauZ:nε`l.8g YthtphѱdH5LAgҸwP(iq;s FCI"8O g{>̢F]#d+BT6[,{cǎe„ \N:ˇ/KϟQFqw4M[{/qv|KXpa͹`s=R߾YYd =l 'tRO5{I&Fg}mu]~e=o\}9ЧOz." 6/O>UڡC|A&MG͢E00`: .&ﵝwޙj*cVTC{ݏk?>}_뮻e˖ѿ&L_\1v-`ҤIL<]r!0}tv / ')Sr1OfW?gvnh(׏Gy?ǣbĈ?B>C۹+8q"{w&OkMr!u]\~\q81b7|3GuTTsxAAAR1hcpxLR <>$Ӎ!Fd^K}A .wt{<֦Q jUl4}V CD@bMh@}˳}S 1:oX*R sBm]VAy-}yTϸ>[PC>$BI.NJc81FRAAAAAZ%]̎BsJ4w OH!u66"Fhr!:tldו!xJGw=hJ$w8q.غSosXJB>}̳NQf1wΑ>IJ]03xhHwpf     XgQ:Q+tbPd:N4d_ RaasYוzp ڱˢH\87,XX2#-)ڠk"5Z6.Wuԥ)Z%]墄s6f ʃCȞ{2sXmz<3Aqb*V C<upY]@.cwGCkL'SfkǃQG:VFyv3quu$AmGYt|fobWԴ_qWӱ#c6Çȑ>@>>_pUaE H?/ży<{QlzlUth#P~{S{s]ܲXxk׿лwAAX('6J"&I~]1qp|ޣiZ,i̥킆lePKɁdJϚ7 SO{(ڔ0`Cb5 :%N&@yPI0_/{&"JyVPH($Dfհwxb޼* wޙSTҚoӹs;U&|h1ۖ[C5XCѭ 'tlUm]# To{e@l9Gf+&DZ`|m2  @+wm)ED(T+p6[QtF) &[+S$!qY|2圫xG@ÜmWmr48(,m3=Χh(S?ҠZ;xJm ゃ[G_*7_+HRoZ9l~1w =.]ZnNb3(8o-lUŲ~Ĩ[~7XK4S~;@8TF=, n%/wÇ3-;~]ŲwSg7vɋ/W䥗`vlbK_s oZ}3G?н{G|9_wK^~9!lu o7{k S̗|@MϞl x"=%|>s&;oU1Gy 3uy&_;>?xkXKp =F?E>=䀹sIvm|Lv[FZz4~'Yp|+xk6x0[tdKmX㏙>fLo5|>{6_wϞKS @wl՜iɢ3y晫u9by{^?y:{Oϖƒ"S IDATٳpTzl ;pq oKv& Тͨik͡%WS7c|p,V}1݇ cK/ l\o54j>ןżyl4#ɾ>6҅o;cZ]g5K5ߖ<AAX˨ǚ.G:8 "Z+ b{GZW$1EЗ!ͣK$4,ޤ!>Dh\vI1ZtYI}<`pg!#<5IB4y9 >g0g1Z1\6sXeo}هW~K;'M߁V=1lloO גp) -N9'fѣ©2hV€ x2s+tӧvKg?^+z9cg{.uK0򗿤c߾|_9k# /0䬳1|8,`9eO~Z̿jv'we,~i>] vb>|A0'伦cGLk5(dp\=ztI|sOtM <8WW^aբE^o|z-N<\;ŠO^sٓNv@뽧&pt:hSO~'MBÿ}'bWbGjc{wV,\S'}]('x*}1oرYQ= :D]x!Ors?Λnʾ??]u;\{mڟy7j篶no-cgtʯ?N;}f@ ~zz[-}\_>VØZmĠԩMҔO?͈ɓхs?%KiR6Ϫ~Aaݐhzz6E'&F̄䡓U.9hjrNbt.w]{UrdN)Z۴@YgI;}&(>NP} I,B;J)lYWJJ(LY-г'#/O^4m.Λn9I'1 WY6+խׯ;]_pA[m`gF\tQ/_wqD/݇ #]׮vegkWqc+iϑ#WTWg95ujeMyh2|;mbxoϰ9矿F[seG{7XwM7g̘ wم͏9f^ƏgЇ=Ħ+?b\S' ƍéSMF=hT0lLnt{n-ZpC1=[oͲ?w1:} :ݶ2끖]?ͽ_ \Zr=>|>㣿Cz?>,=.g߽ӛYZ6Ϫ~Aa`$` VeZ#B&!DJs$ !i,guplRu  e.\6"ʹWiZzg.ezOZ gb+ъNsMIBj5ڐ(M4mH )11SEez#{> Oz( nW,jΌ{Eҽ;̗ży,fls1~}e髯bWlڃ/A;Dq2>,_Vӫc}BO?mtA'E"a˗W nreP*H/otj0O{^=ޚe@q2|},aբE,{5zlZZv4~Pѣ{|=K|ΜFg[Ҟϓ~dzGquu?67ߞϺxj)~ԉtŊ|}Kڟ܏v*/\V{W[FK ]R͚WKjaK&ǟť)<$}{ |8m:(hڴ&Ws%>AAXG(Gᜏn 2xEgq\)84lERƣ{e(PYfAK>8Vsx@kQآ #Ju6hqi!0[N<4sGM}AiPA[nao}\^]}6q{K+ۋ륾h$*hCs=V7›=cIyGO nt2[w@m lr|4u*] j6q>{nB7raeyg{_=Fgz~IJ_gJ[@ˮ/Y 6h0C|ؕ+nk&omE{>OzC?TDKϧO|rc>y&ַ)Tw?>3a_jԿ?xߒWW_]ኬՖߦjimkb}R>~aN’_f~=t!bdҤ|Y=dP\MYVAAxr+-f/-q?b')O8f7u^2Jq%2M4HP*8Ƴ9R&feT+oDQt>DxGij! $PJ( >DlfY-xKH:wsۂM;W]gټ̑G6Ukeo7Jk kFaÚ75ཧې!|x챫˙ }yt8MW%QTZr1{u#kc:KΥרQe}믳yGcۻh&"aÇzǎm{՞zVWx+QX{c1YPKmGs{cK2p [r ٦x /6jTrW,hƌF_)u[}z  :c m}1:7?眪- Y!,d! "EY*"(D^""PzyPw@YY&t9ǩLBg&\+էUuD½)x im%V˅p%efh[ F,;?Hox:X-pMXI!Jzg=7Z(DmKSEVpNcqgvdEC uv'vbܹ̾r6vg[u^rt}4.o^r u=_P!'̐O lX5¢{a믳mmv[Zs1S(W7iwr_23N; Ԅb7I]5kFͫVQ?s&p1˱ZӰx1wW>:2:̎Fcx1q ?0c6C]7v-Xp?ۡ寇C9+OwX.z^ئgȇO>z1{;x<O!J @ }#鲲ZAZz$Z|g뤤bs8HMB( Nni)pZpY Aq'TmNKΦEF p· 8:8R(bmX$;l瀦%[)yݶu:C8O;`ÂK( C5޽3A>]_76vx۝ C \G?O}>ߩGAԎ_ /c\ڱc;~&GPXfΠ.u. /(xM@e~|izƅ KnԼj(; S?{6ŋ5Am=P8I}}o)rv V(EPSnkGK>Y5cջJ~*|pzlԿRhGv=lUK7|=}XˊGe_Ҧ|УnH6??uxwSƫ7E)ц <6i jycYm_[,oy7?cECNZ 3q%͛\r ÿ}&Y?үCMiZ%όSNIX6^CVTeHW ʧ6Lnx<OȲ &%AIOcYbD"DRqJEr%[5utfg~A)T&vBH $$YԈ[Xkd[3wG J(!@H]c@$!UV$ը<$Y$@JIG_-;bw?y+o̱Ƕ{_ц V˪ j9 Eruu4-[Ƃө0]<\޸BTUU֜l;0窫>6d-Wӟ[dQG19u*xAxeo;ϴ|=x<g#pMӜ4Z(EZ hDaIRXTsNFdHu,AmA±huܶx[B::4 ZcX XuPiom6n~NL^G؎cp+~r5ONf_x*w9=﮻X0}:'M|~8;X;O7Ȃ~R9`s .`5G׳שߟ!'T^o8`itY!9j&O.u͐!2wMc0k:Б_7aam-5kХg;]DwRvK}=P*O0;ǧ+>/ջF#h\{,Mt>:/wwi=]zx<϶'lE)3QLN#؜4Ludi0m-Ȣ>NSv7%$+mhq},,Z?f^܉@m@ !1Xc1qĈH-¶r.ĉ ̊bzy4ZEE߾P}S8﹇e'ַ8ر펽nfr p: !hZ%}cĈmx<@QG >hI!l˲4#Ɖ2$P"H8齘ƏDkIP:zPnGDMP(8;k :Nc(ma@UUaE0RS)+ !$4&j=V ~ĄqJ{p7CHgn{j ~{Vbg~Ujvߝg-o=͎~}0ӽM1oO_G-9b}'MC`I'ux[=;7AxbNt <( kpC!6px0᪫Z-:ȋ Mx<tkE4Nmr+,B$nuZE;+YHMA$b$]d=!:qyMMM PZ76QXЀa-ƚ['HgXKJP0C(E !娪 ȡY+,asH~:/} <(F55/ɂoo/;f1k=N;1uބXQ7M7[O<@q#orw.79KE !ӇիqٌяiR?4s&Ad-0G&N1wnYP;v,#;ҡRJo[{Je}=8|xRٸp!O},}A}7+5f r.K9+ȿoSckYvÖ^hX;4nծc{o ,:aLs3Fgy?gK/EHɇO>+fv2Cu:ߺ| 9TvҗXs-4fz޽^L>d0kys0,{Jysz㢋(3q4*xkYLvk*S/Ur)u|^9l}ՋǼg w$e׾%#bi< :XjǏ ڰY_eBv1+y 0+1|8\> ;t']E~ *G$ƉMSX1qG?+@!o^r zruu:>ϋ$6G|2K]1{_ECrxsu<OcJ9oag˖Վ έns1߿5O<1_-<^GOthqP$fxB? ϧ28t}뭎[1cwJo]y^2inP>˭'ի5KyhD}|Jyz*Y73{\wfxr{Cˡ6rꩌe=Fȑ<9y2/,0;r<.`-=<<;ݿMO8J1`jQL5;}zvnF̽6bvW^O}}U(w3fP^ٷz(+{lmk_c[omq]weʳs||0s~sↆ6B[XcX#c݆x<.v^#Zc! $CZ$XM.S]m9R` :PR&.lEu]*,54H]h6 %g l%Ŗ RV]/ @)!-RTBaED2׮aJ֭VXbES}ᐿ>s;3ۘq] )}ݗhÆNq&oq3x67.]JJ*ank5{6}߿50$nC#GsvS\7g<}'Mq;P}}MvX];n(דC6̛&K~ݜ93go:TS󭻝rtn55=zPXC|Zr{38k C!ͫWR?r끭?]|,R枿5CWb9ߕpה^[P9qFuf`c?ƐSNi4-]fv=$[}0Xۼ\{-? jEߪMgyhZՇ*xBB$Hp,46˻VJueg7b,:m4.:G)I*%$rJR*Kӑ]4{t ! Zrq.@' 9INhc(ȅA3@ aƸX)1dy*iJkmR%!ީ*Pk&N a"ML!tsǛM `90cxߠz v=[ }4uјBKWMUY)YCE߾[ss_ufq"pcj)wک{:-+Zc%ljǏgqP?kֲWxl?vVO@emƪ0%ZC_G.euՉ|;ʆ/YӅO끶ǿR|K\CO;m7^ܔmq=h#d.G11#+*_ҷMn"["u';:Vk12uj!0?&ڰ͇]8BJ*k7vSV<(ޢfP{,CN=S{x<x?XщkR B"I F[R-Z֚,{/fX҉Rh[\6kЈMA ˟qR]ɖN ڙ:QS68Ƕ B)Xc*EX hQ,aOJP]M݄ 2|NwvX ̿f gQbS3t(K7܀{ceg:(t'jǏg}Ъ9ޟ,޽31{ k/xb:ËNo|Pπg7{\ۋά3v[߮č% gǾwʹCN>!')ذ`k^yEÚ_gn:6Ǻ5cU9N8~uXiX1cdz+')޽Mf󶺞t'u&*+Ycm3QćO>I+{5h#dD4O=URj8>M˗76n1[84?^z<x>$",$Cam]C趰K[2aR@I~4xV;kQiNw7&XMZ;wuq}()8NU,;y**( (Hk[kA;KuWcs#rEu6:y_̩SAJgbNPŋߣ ЍUTvTʐSOe/ĉmۗƸK/m s3ڙ3;״d swOtoظp!oL) #=;UYIF/x#.<9?9am-;Mƅ Yt݌8>|6zvsGjǍqs:>ء}'nͽVn>ǂog#=7.UUE@UTwsU:TK9tz:|ٚUkewˑGbaO3nTA@1cׯ}(ewzʡCmǫ眃vѴl Onz[,>zŏ)YH B\bsQ[+tF dmMYDlRih1mlA( IAdmA(j!E&zr`D;(jim"2Dh]v' *PhkUv: â&2!;ur L DznS- + ?ӦYg!Q <7Vk<E_x*w޹߹fv8Qh_3g?c_u'R9`>[7f0QO|WDՃ1_e36v2}nwnӧcQL/_nNz5 ︃h:jǍcWP3xpu9_Oc0k:uӼj;5~̻jǏoS7`t_Tè .P-̷RWWӝekW5Co˼cM7TW)pϚś?1{MF2RwTʹ>:~8u Og)0ΨkndzzR̠cw2쳷^)č̚:^J.[^9`c.mcH~;.z+ڂ IDATVדx}R̳u0䓩Ӈwż T$s .PGaԩA6-[[o-=>KAuwۍ#Fиl}kZ4z$_t)\_TxVfkxi4DM"c0)K,vR ٽ&Y4wLIi#CDhvJxĊ.:J2E# %򵛣$NcH35_eW\g#dyTX+zy|A{< L}N8a`FqtiK=>|)޼b>=zlr<x<]ȽˁEƄ{v~Q-tk{} Ed"ѦH<ZHiȖufdIڇe'ZrC"1IT?RmJJiY. H75v,ʰB ::.BIa$ y’7g!4~V@=+bnO9xuu|YTeM-=lUU*꾬37/~K/d{<x &62v"*:Tb B hk@LO4c)so A`&v$lF i 8!,N$ۧDR&j9DQ\ҀĄ"U]gu$0 Љmk).@*tF; Ď[q`#`wR7~<& >h^7ݴYS*~y<{ 72Iۻ,OpI{-SLi駅B}= O=3x<la JI K'l \SG  e%Fs [\GVTlj'իZߩ8p{x<0 T@.&"&֚8m Jtk'X#БF I8I&ըpj*PX 'kJ.EUHm`]@w nfo]-SmDEȭT@ \4O;J%nBJ9#vyBr4[x<x<x%njdk0I2F )4!iHAr.G;)Vq!1CKkPRa-(= :)nrB7#Hk1Z;Sul\fv`R[1.:HUt:C:Q[!\a|m,Ҥ16H5ٺ@$2hК0Zœm *PRlx<x<x<;6Syj" eHPUB5P*5A.8JX$Hht0C KN"1"$ FaP$ % Jab6! \Sօl'bR(#튴`-H)BTJ :?rf'\[|ֹ 0t:vƍ֢"#a@ )x<x<x<m X$ $hjXC.D+FS k%C86BE ͅf. "?fk H"1RHMXAI,!$Z""Js?gQ `!#cI7DwLBulSJl[RB#DHm]@Rx<x<x<1֢AZAA#HDF+ (;3eҐ[4-4QGI!ƺV-\FeN6`5Һh!06&]*k A\h& B5a=X58R BM6ِZ11A !1JX!I&weEu)9ĭq'x<x<)!!@"-T"^+mNL8Ll1.XPB&m8aXE7iDa%6{dض. #,=lZ ku"j$D@DQ:!B hm2x" PE[Sx<x<xx<x<@`10Sf8l$.m-m7 :с-J8ǶMN R*@bLn %%gt @)q;1di Ioz*dDZq9A@.TI@i$IL߱qNl!nDbS)d'6x<x<t!tPX!bKHƴ8!1XK-b(-iIGDlR[fk )ZH %Auu%AP((S *ɱ.SWv(rk Qe Ӭm揆(JbF spDZ3;V* vZ3x<x<x(R,"mƒh lp3ĭvsv4`sb+jvf%VTHB =, uY !",h&.#;*2+%JJ*+*PR[h`F)Dށ@n86Q .7; ?|S3B]Nx<x<|2d%61BZh X(\(0¸U1V6zbV`Lm]uK@NR"q!RH:, 8į"\-Ch]Dqj|.WC*Esss 팔 aq I BQ aG R bm cx<x<x<Va&& khPι-$$-Fc1!ln;Z%i${ u$y'$ycM2^ZkPixؘU )8 `@('pQ .+)Z) 8X$o\ɤu;1>=m!IآѢVTQX8 _ < Dbl"U/QP5h%! ߞsZ/Ƹ9ZOh4k9y1߾C{Xב=dS˧)"""""""""id amP:zc1t8[hTQ/mgי'b8f>Sbf-I݈ gsȘTV0C 39iQHʜlֹ)b$B[WRl~..exmng6bw̝XcܼtEDG>Gm =L.zPJg!#IG9QRl y9ZУrŰ$$j5Ìȑ#6+8ܓ0?l.d}b9`^Yhm1ʽZ9֨4ŝ 1u&gͨb;VɺD;nrlctJe])^!caq -;V h9>'H1g)븆|nce,0m<@dRPXR8sk>"Xו>ٝY =@]d&epXy9-yd KmHv%x=zFZJ&D2SAX8f͌ xnS[,˲k'`B&=Pouflo_{0qNqNFrqqA)Rѓ~5:TQqw ,0۽P{ c>.`у`) Q*Nf l3 6kG %"s^]F Ț+Nݦ7/{h1:Rb]o eaY"]uT,c#˲{~Wu&f=گw $\DDDDDDDDDDQ(sF^BQ3mcNKlh'͎ls#2d5 Yì |9۲Č 9>B,g'2bLf\xyy9FZ)3H^ڨ Y+WWX&T8m׵99mFR: 3>jHqJ-i<quZb8z)>1:A cŝcVL2PƲ9M5#=O!8ʒL ʑ=Ǭ;I{@.8亮t|LlFH&m]GMދmvm"!u[J1^sS[ 0FcJEDDDDDDDDDR z_r z#HBgc P}$/D6H0e̘ ۔gRb$+xyٖ>nrf۟d;,w8@+:_̮mr[P^k]_Lj0XfSeBd~""""""""""}rǖrQ`:w(8n183sTҒBf5HoGsG`dScaY`Lzootwe?AF厥@& aNfo=[}^wͱR*"""""""""YgQ{TT=Yjsa#q/`A܇ d_x69m/37j)imddžu[>ƽkD# ?_{}ܾn!wu$>, m> ^>}j{&kk;REDDDDDDDDD>$Xx dōFuLc-VZoAg ?bXx=aa:B $, :MGt`IYs2I\__sk+1Xx}}Y{=(5(m. qyyIu8 k){.>@n,qqݝ>cf|~_|vݿwe_ec|d4~Ff)h1H+UOZqدYEIqGu?ҲtDGZ?rE#1LeƙI&{Dt܍Z+òO\__ǽ7OR98wzp|l 7...%2F֨8|g֔!>:V"4-8޽{c|}d@ Vi#fZ8,̡͍NZ\~cPyS;9]r.ܪE0<L,gc[θOG}ݴ>'˲p(un,~~ü9_u_y{^κ9:ˌ9Y`=:Sf?_u7>1_+w}ַux|+o׾%Xoo~#x~7^^Wxmo{o}[׽ud&??w|w/o|#7կ~??˛;5_T IDAT7|?G{۾n|򗿜W?!|Iſww-wٟYk__ˇ>!~t |ɗ|ɍݻO<߹_a|qqUǟZJ+:,Vp ̚Ksp R) Ff/bq82z}5:Mwj]݇Á8nA&,RcP@[W;zTܝ;Fɦ%ǭ;oU#YoG>~]7s}}Oݙ~կs//g>< G>r;K~y U[^MJ'hK,NԑyAF4 OSww0nמ?s9'k>MR +勥YZ}FAJ1...HpcaV0RAѧmg ]l\#&s.x< sk$κ3`99}6Af7FnkD3vw"qdުB}cd~Ÿxg/5ss }ٗ׼{3|&ófc>h} i"FƍZmלwjoi#D&񘗂S̩e~ku|H2)A1xx\#"9ԅ9^֨Rht}*֊ya]L#./9D1 ]>z)[{_ ]WW'++?ȟܻw>7Ɲ?g|~o|n?g/O ~~Ww/B7wF@ ?gտWu{IgLA8Ջl[q7'oLro$[ٮE\=% ݈ ubv`۩ x<,0۶@cIWw2F'!7GG!z)2WU|˷| }+~~?8??ǓO>y~xoŗ|ɗ3mo_KsO?4=[Vw=7__Og"s2:#p>]=/}pݠz,M 7+H"m:5_dv_R9G9R?wJDRq7sYuN_z"YR^ rtmo/\]?ۿ9yOO|{{y[-/d"""""""""^C7߿G}Ww?j첎;!yp |QLfʾt٨!s)J͗>BNh\s1垲G, 1%N<:r+x??Ϸx_)ԅ뵍*빺t㑹;O=O=ԧ("""""""""nLLs>tm3xly1v`żOR~lw=b_i6G9ZIClv̉ﭪbԑhǕ,Qy>EDDDDDDDDDd,p&-B>f߶qb9_}텏7%ΦoדXp8Pكh}NTmKzlְH’ǻ;6DFwiیcLnocŝܓXCe=;!xl>OPéFϯ]7P|dl.x]D^d[gY̌-t8qjKKP*-Gܗ>>f!!"q3.]\PRDDDDDDDDDDm#ecYX}-|}zj|GwrާhnF+>F-svFn>&0?JcÁlU/RX[ÎSK![E@@[W>~yqLZ4[qYf("""""""""+ϰTp 8和u7Ɉ[Ȓk#twgmA歲伎z>3S 駟Lpj޾'J踏xsi$~]1=?nkc-/(>JVֶBƃEDDDDDDDDD!d{ \-,FvD[cLi?w"ȓT`2<]{oS[E VØf+j;z<%#YcLlryW!H#F1. '7J8K:+F*GaY泞d#5B,""""""""""&-, "[e|rǭ|ZئO]{^{v>cD¨"1wҌ+VbSFŽqX. 6Dj[ cuq|aNoGq,\ +ki D*yInkCNV17^L 8ukcD^ͣ. g'ΖON6:DcR4qM xBđ=;qQQ#n,ˁˋKw] 둋BFYJ""""""""""Yo!sޫ=fҼujg&d ۝h~+=aDpw{{YfRmlo+= ^ ZHk6ƺ qLX]PBFg)>㑾rA^, f9 J_3ٰqd߭q=lvK"[kw8}O?I=ۙTF,V;(F2Gjqz]QWJ[@FE}'-횘&\\C)$K<{}Q~?""""""""""{>i`{mRPagMiϯfg/{T6\^ḠE34҂;CώeHҠ&xB0֘% ։~EJ(.5V _8\<ŁW\#ɺrȋcs飛VZ1eLdDxu\Zx\3ОSקڐF Aq$(^ܺy?uR?kvr3,,vA)u:V# ̉@q]xZ^yɞ9{Wz$DDDDDDDDDD>7H$2!q[GBU"d㴔1K!U${6jfm;Aʼn}n_S}| cInQ- F>W2ìS b`nmps\_]s\IT+Dz=r},kO/ODDDDDDDDDsŖeB̑3%9.Ķpv0xޗ>c;Ȑ˼Y(}e |jsp EIjcFrx :5IxeR0>zANq+qxrryP޿:yzg{mj*Eh)TF@>#k]m7o܌dB-"ΆEdvx%3Y5~8RG:AJ w"ꕗ?8cF }Ywb EDDDDDDDDDUν Ϯt22 czLsR(ܧϫGTC2ja4"ٶVBٶ_7KZk"f>!  '=_DDDDDDDDDD>09MCnLHo0dϏxTXwjϴU%qFm٧sBX&|-[ft wHDDDDDDDDDD^O`Lh=No:γ綵zةߺ<nFH ;z`6ywpk?J1cþrc1|-+DDDDDDDDDDDMdң|[aho>h=D|w;K ș䴅JφF)FI01}scs=ϳm>_f<̠mvȱݙ>.Ϯ|vt`}fF6ܜWru)mx%H2;Ql _^'wlN`o[y6Dn EDDDDDDDDDVq3ƾިh9=RȻj1c xq1%=;L|VtmsofV,O  O6B^K!z$~fJEDDDDDDDDDs G|now^o"kGnN=sruMFRͱZ${Gs卂-K'?>ǡiЂO-2gw%zo 1wֶltu1f>OGɋaU#FO?]yhǠv IDATc g51Bq f&guɃL9g=v̅3A-VF*>kUfԹr¶JI1YzTn39{p%3oc[7nxpcnoיX&>By}cY}z5·y{j-Z*A' Ŝt2y8w217]v8g=~ lLn~ l.~~4':@""""""""""h6v5dZ[5 % +٨XHd}ƻ1z##(P!sDvlNNKBĜط@n?}j{Ύo ~lG r+=Տ؍%ٮq1 Z BNHJ#k }?Ӎ>;rm'{45B>ng09S87f{a%)$!Go6@XGiȣۆdܜʾ9B[l{{ftW:-5f>v9eP̍;~ѱ֙[-9FOobo{ڱz`ltwjYȄ}C{aw~""""""""""=xC}3Ŷ݈D9}=c"-N+aAFc̀mhF>cS#A~R ?vKٶN: {;<n,{}ܫgJ0"sý """"""""""/͜U>Myq yK QYAǜŽ[Sp+~ 9iL|91p}}MFVه22c{gPۇ;'LSaK{=9la9}d9fwݷ4M\¸}.?)y:𸉝͉lfO5fF]e(OTDDDDDDDDDD` rn34=isu;va2HͷyK{cz^f|BEUٙ=f.HLDDDDDDDDDD^X7hX -bx۝c3Gv -澉iy<Pz&ػ_=2k1 )}QE!>?G2?rz(x/+,^YR""""""""""q#ޖ'rti4tvz@k#YJfv%T[oO"i`N(-r[̄ޓuXeY(VF/6e c4t""""""""""| SO60*kDK"o|z\{ݝlcyYx%3%FG#Yg;A?I/\ԅTg8[2EDDDDDDDDD䥉YyMxwk^A'/AώYd&"c*. B:b% OZO2h8LQ!2kfdU3&-iJj0[DDDDDDDDDof쒻/:Ƃϯ{UI^3)fDƨqgJ^S ̠`,R$,Dv)u~`͆gũ,T/T a`nDq~NDDDDDDDDDDN.Zx#ߺ1mT׋uy{# \g1T;nJ-TֈܝѬf8УIv_7HZisǹ}>;'*""""""""""/֋<uoyD"i-3p2.:F7 NI2n>7G>JFx)d6\ႾFpOȧ٭<3>>WO {XcfB$5:FN'mŭ`ft5NRﳍѰsU. TW״sywlP[Pmyl2swljf#KBOܜA/plD-V ӉϥGywoKIU3sGd,iy\dUMKez6{}"-,%يaT<)eb7+oLKI2u"k+b6[eV_ i%vMP_^u"fHzL&#XM#FQ "8|.}!= !g>>3N95 0i߷ 3H`_f"G-u(d$<?xt53܌@Lhe1g2 ÁFkRc8X+^A/Bߖwc}ГIXpץ3'C EDDDDDDDDD>aU8sJӒsMhan+k91O~B o#3c2sRaf2c}a%=7JqB ?֓3~9ғU*Vqsz$ɼCjksג3pl5Rq\!Ypw6A-[9΃9s_K(kIz"ךKkvBİWk{jN D j3̤L F8 b1[mX(pADW.fue_y<8f+v/ק2"&ijXԿrx`*>Y:bP<"ŏ+VOvIA\:1ӂ$3q`g`x^'u‘sxbuwD߼Z "Z[S{d'1#mf_sDf;FI#ȑN+FXG|{'q%ϋ7X%$_udŋȏGU{F:ys`Is3BwǯGs5YRqs9D`o+xxÿģבwR xiAӧO_/d$i<\[,8q2\[/b$cZ9V6y]cc&P0I,al z^nx ( s(RFF-9a8GvU(zc+1 })U!ɳ+ۮ͎Ϊ6׆J>-""""""""""g k] \x@z))iO0x9#&BD2ǁE<ƒɌToǪ 1ؼR)Egv\zO_lj`}R0lf ?{%~[c'v-/nxq 'ml;۹N}@q8c#;̼L$r0b:puBfA-OO 9I(GEDDDDDDDDD(~B׮BV "W_;'y˧ODNb$q: T";yCd0$|cP0 Xck;cy>6s ~jqszfO7{rퟰүFDDDDDDDDDp֎b[aXy\ʸ0P}ѿw6W\{ϓ6 <9 0FbD 캱!fqξ?$ +&7cF_DDDDDDDDD1WIy,ʫs 4{ "s+8_ٯQ'V>;2 B`ỈR s1b+fi98+9_2Xif t{4z#kcK+҈1VckՉv`;nS wzN̍l.8Wk-(ۚw}%q9NR 3&bDI1qTV6Zi ~rq`n7j`̵$m@DDDDDDDDD/pDU%X+(xqJqQ̹jH2Wަ?@ŝBCIAfR1s҂u4F$憥`w683'P祾^Rcм13p?1EDDDDDDDDDgs[LF{ %iPbuesǝ͜dL|89 ւeσ`{xm{'/ԶkLFs`a͍rMk'$Crm\n~$$X,iyc'ǫQ[ұ(2[DDDDDDDDDe&i$ rMjy_Wmq#2`e2"93NGb޼O*#dcϣ?B3 -s1%{֋:977;%I`x)ol^BoI?H""""""""""$r^-W$yBIA/dNgFA1{3:{ߚж+?LfRd U8$VUbA9f+n^a|Mr_ѶF8+cJDDDDDDDDD&3cre rZǨdĪ!12)zc.s2$cakb:I0cuo\+"]6оhkZR=+TȜص,21q/CIz#Qje`239GaS+]5#dB͌ V FFf$rPʠ`W} "߇_sŇFD^E.į璤]Ei.(BrY@2p7]Dn+LsDd11a@DDDDDDDDDD~L\hȃ3F1N& մIZxotZkDNzXL"wg'. F:P*9s|ݘ+NZk]ޅmWf ˠcd{uk'kaW=CfՊB]Zgg݈zD&cJ^~fNV{W, h -AH̜1sضm8sܬi~[n2FyawJi}ٍAM#݈ՓH5smĮ;G_oX\U">εZڒ& ybHZmggIØs7sU;Qnp^8BX-N6̝Z+۶3$lێdN.ƭ5p缿1Vvl8"F1{eI'aNXJG唏l9H\=&i ̵Pi2q^ \M,^8x;$0 2czLĹgo_qؤՆcn;qsRZ1s@N)+)m mpK2*f<8ϓ6ji󤘯kw#WFpe+62 RqQ9Rsf|,^\U#8pZٷ{Ȁ UWDƈ贲s;<~L5#""""""""""?j[fƘ׷;fmoX-d*8'~`8fWP~MrGk>mgo̘\Yk㪚vX !\?8$|tm\iH*OoZx;_9Ab fFcl<ע N0r228Bo3cJcfG9iՌU/]q7mgA+fAFRڍZO^13Zk\#'A˧ھ{uZc ^kmk@u`C#$tvR*XT 8xε0<cUR oUdUnNFp?_dY|M}erEDDDDDDDDD絲&m1dV.\Jm֘sRJz96D7ܠʖ#$2(R2V ɜ<(c ALc|$mav^ Fgt8ѩ`='T7;? }`;N.c}dbDDDDDDDDDDa^x-mcΉ5ܼB̌R9۾6'cL(>G]kc+>ؼZ8āR*=֮ŏaxR id]d2+w3(" g0`D`L(e'I r *@qȏRH&_}O?x);c j-W}p/R F+f~V5,WH]'ɼjWhn5fkщs>:F95ĚffbL,WӶabo1xnI'yYa5=#m(""""""""""?IZr5UvwZ|_k٪s>?ܝ(n󕜃V9$80ilsd+FVwǹ$OFX:m#9OUWaJsBcuMlZۆcRv,s$D9ҌʶglMj?+/6VMw7ܝiv8AmZ+< p/93IڕScA(~ƖTz[⹶O+^K9:3q "{xICp&3ΈuŒזMQɟ֢ IDATIsUC&jۈ9*~ә7{ADF)R&5`0"wJ}c O}f38\3+Pdd2H"=õ1XJΤZ%1c[ Lގ7z fFǸ.a2Lյ=r{~Q?(@¸8ՃZL昔D$ֈ8<;1;PosR+q'2ǯW@gxʎgu#~ܮ/40gޣ=#ȤW ZݨdN3&3}mq}})o#q[83q3ZIFҼ;W?;uiA:}ND2n/tr^?qw8WiklMtL RU3̑\01{(T3~_Dfpc J&x%fnRq$AI (pck٣qp_VacR@aȏr_S}t(Ů}aoI$y)1VM /q|a6^kѤKaαjN0 f`n䪪6/Bo9Ʒ+q1IOƄA%d|OrNZH3&g&iF̫{%!sډ0ZG9WB.""""""""""?1W}v2 cU"d0Flۍ9_6#&n;K#kG;A cңNv+zqڶA f7٨mMa_ FY+1>'01"!SHΙLO"+mgUlfJ ; +~X暸n~{~so+-+Kgnx)B)+ܩŨrAgՑDU3}5yRm{vi3y.y;޾*.Wns6/{$" {LP' ح\gy%fW\998]EDDDDDDDDDP\% -Fi^߾1X'Y!ҁ[ 7ϴR`nĜL[1qes 1qw 3XYk+ǝZc龊uvׯ&r02qkRLxV?&' 1+7ֲGd,3ikeI'T3""""""""""V_FWmlϷ~ى8 [UоuC9mpѱRGgœ\9cSqsfypn̤Tqs{H}~TwJ)cت1zgL$W?ܼ݈I^gLjĜ_3z͘in3Wwm;o7yܶɜ` s2HIjyT /1ܨ_|Ḓs NNj+lmb|y 1 Ͱ\aqcF; jT/|gU2D1&+q';ӴRDDDDDDDDDG=3W&ċǠ @3mV7yjV' zLr^u%5";If2$oc` f&i39c$Z yMiOwA `Y_FϠyLoNv'=\" [̙sc$r2I, 'RVI+""""""""""V|MhgnIv̜s3N7yPn/'gcP?$X3p~Ǭ9JaXu$9 "X ۍR+ή߾c++L4Wqq;ި)2 iN趂lwgdՉ9i’b39˫$X#1_(JEDDDDDDDDD~Xf$޼ҨWFk1߿}99յm'"'9'1f&ōի=I"_cv̠}﯐^ cI_nFuq3NzWfL޹#q,#hm8Ou94}N:6B9V/~WWh~ r5w{bm%Wfnd1:cxȷWq}bIBf&Dv hy3>OZ+q6ol^qΓ9~MgeDDDDDDDDDDǭ#VEzN( 2xkso7֨mg?9w/Uݬs 5kw*պMDZ1kv^sLJi|{9hKp:11!'Έ$hQqRgY̾.U_T+9)Va+SwUqbfLsUz}N+kcmP1#qo%'w^W&11OqvT+&V 0ޙ ۭoLJqJABIKٚafZ>?FnF\ͱkFfPcRաɚNJԭa׌,m :'7"be5t5<L̍|dur_O?Kam'qޙ9כ" 2JrBRQV 5U}?Θ;̵%3@5|e@jsZ:cNZ̄*R kB;bΊLb^ //LFt\ 1Ҍwy:3뷯k|D9wFv $ÍͤzzL}]8V 13Șx)X&~6\QY_2bWt9I5I9g?dɘj{'s31n;I*э8 >RH*%Zsж J|~y!#H֠;7b "7ctAD@&axy!dx;3g'rMjo>|T 0c{ȌId0c/r}LS-"""""""""2ce3hw2Z+FDvj{nmJ5spp3;/cDvYÃPj)#LZ;$~g9ƹu"r&U?[vRJ)RJ)R#Gk Ѩ(PF)Z+wװ5J03*cr)O:>ױnl"lorYc"P[]4B}FXE aw4VgvA[@P lls~`ݹo|x⇗OxL"bǗ~X/_[VZNVcՔRJ)RJ)Rg#f(8S23措Pm"5 w֊0GgDd=JэR<ڨ*nm;sLjTՕk)N 1he/{~px` (;wjݨ~Dt^>wlj>Q]ʹ du@}RJ)RJ)R}R)RpjaHi9XCז )"k(eՉɴi Jq\ujmhDf38*c Om<}_AR:'G?x/Z1wٙ &pAnOD3~w_")>\(B~SJ)RJ)RJB㠨 sǚ.EWo!*BZ Z)g@m U3m#VB?:e 00g89`MuG0wjp4'bo> ~!}PJ1:[Nz+H0ƃ5n6y}~Ɯ;h01b&߯43RJ)RJ)Rp-J)Jˍ>>9'U+aNeu^Ϲr\_߮SKۤn7G[yAS۶q7"&9mDPKW)?|ޑS۬IYu!;f@ƸSK](69QZ z0灨2d^ZE[ŎNZpOϨω-E9˺ʵ"1ʅZ+1_\<+$7RJ)RJ)RTh^@Fk9$H)y)D0͹^}MJ~'b;fFYAV w%Rʺ&Bvnkqt}U]Ƿ֨8xq_۾Ĝd􁧏|O|0'E!˜nPmW(0cg.ȗgo#< QoRJ)RJ)aUI{RGw?:><0ֆ`>:U>&A ̃nctk1$\.-Z1&B|Bmv{qV x00GkY+Ke>ξRhmCD1sDЭs4 (Rh"@q?F9n^dِ#"B7zSJ)RJ)RJCx0ݘceU®O?RTUTEΜUeNg~ck;mJĝrAk}"Բ^Rj_VI:Udê R+RPq~ʇ'Bwޜ4Px8cQ8nO?71p<Je(=:&% ss+QY=+r֌GןuRJ)RJ)RJ801X'#> 8"BQ-ctz@#c#۹PҨf>@e5913!"9iLUDREV@) ܏R**`cX+>}o+p@n4QBw{p/nWB0o8RJ)RJ)Ōӌ k 5v[" \ (= 8F`(q֊`èEip7@0s<.y08FqFLi[#B3fm<&܏;Ad_wa0$K|Y]*,N)RJ)RJ)ە/!Ds!9-BPaA@Ào$ &AвM6gӇ''1%P8?o;zӇ P].E1;(՟݂:Jms; *zQV7ۅ~ABƏo2RJ)RJ)Y8"PJ=0V~n=?!2`T(e[ti"lN;8в:q@~Ԡ(X?oWɜѹ^6hGѹ_qD bb">&s^wRJ)RJ)RJSe 9+xvGX3fF5c/ ]ضƜ80lN}gSZ#DPEjAKԍty\iЏsN?pٟ'nzl(Ez=!q0;RJ)RJ)~5U=E'~ m8y%YG *j]EpO;ToPQjVǤRPcnO7b0et$ x(cNsaТˇ+^>sJ11J-؜x8r&Dx0_W!yJ)RJ)RJ))쿆7i9g.l+IDlްzREhR8b`8mIafJh)RV|Llk fNmaKklp{x{Devg`wgӺޜ(@E ( `F0l8E,L)RJ)RJ)E/'wy~ J𹞷 jwD`y0Rk=;+/3^>{zrv71}響*/!"\p|C7̌Z8_ T"xӜieO34ο+A >RJ)RJ)RJQ}OߪB~+EPQ<a]QVV 8+CB8ĺefgH ʶlj͌z}~3ƃZ;_)e'木 0ZV6X"4- i;GyB/)RJ)RJ) 9ߚK1gHrN :B#p}- m9'Pm9/?W?>s|Kv'# 'nx}u˅xzz8X FL> $M iRygURJ)RJ)߯ (aNg鶖9J@[m;Ny f G]Hk1E!XDUKR Z)" &F!1qWW~\D6'JUcݱ1~DR(m=x9S|}bw@Ҷm|}g@-J*s2sJ)RJ)RJ)vݮp EHY=ӌ@$8!-4^8*RD0)*RXut{0+A3lPjܩ>qߑRq"펈ph(Ǎ?om Oqٟyo;s5\Gǻ1g.OTGPT(T`0=X@X9toޙa(Q*'5-RJ)RJ)RJ+FD}!RւZ S[JV*M UZ7a̹:CTiX8{)O*#5,v0砖B"D_U&]|x T1q61p^aOa\SxPUq/Lao+5Z-u'18pߎRJ)RJ)RJ鷋cm9':z;*JVq7a/OMqgk;.A);>|-_~Ԣ(0b0xL'dCBr@nr0;RJ)RJ)~qw'+')؜;BFDh 4^V.vZmkZ!©q Ę)qU@0Uܜm)2ƠGgNJxP;><=bi}GGRx!1:ٳ"AU _ ?HlRJ)RJ)R܍s#HEUض K@}(u+;3̈. /x+-pQ\Uc6G=O4&4VqPkC(Ry#!aqw_(R1hZ+?|n7T d@e6.av_&הvH+GD!Y3RJ)RJ)RJl`QKAuUFuED@uumZ Q˚Άu@6H ZeܜV N]/zv1AGJJ e#֛R鎌qGm*DbmThQlWX8"X8AED'_oJ)RJ)RJ)~۶l Gt.'BWxnx8Rr{,gu5!BV'(۾n1ۆ٠ζ5LsJ-sF"iRw8 );֨Zx˭n<76h]Pp'rnȌ£W_Jz ?kGx */|)RJ)RJ)/_?g_=ovZ\5k8(cj] 4J*J^ǬZ\0'+bӘөM5#[5Ak١RjFURTV=&{0Q^owqej?'Κ/o'~,&scJ)RJ)RJ)1ZpJ1рR+stb)t02HA(X-As!I-1-1pF0}\@A XsspډpJU~`Qjpk$(f7TuUQ{P=>OC'iKp:"ޟ#/Dwt*WPRJ)RJ)Ru"R+"I?:կ!gSkE.kқJAQJ[3R);.NԦnAmgeժVx+ƾ=SC*~ B埇̿4ZO:+E-373<`O)RJ)RJ)ۍ11*Ewg\xn L x3n(6jو0V% g-Sˆ8`fZ 071Fǵp[%= ?+~ VZk+&^$SJ)RJ)RJSU'0FkCVq--;%D8ee+3ww:uMik%|Ef¤vY9R u_ lRW@nnzQ&oQ s[)RJ)RJ)w@8PtMV˹8:D9s A>tE+A)"PKqJNODE"FJ)q*OZ?ȿd+Ք|iBm@QAU(EzS_NJ)RJ)RJ)_88ؠ s=+RRf8kH}>L{) tOOup<%()0J0QjimZ]ȿTRJao rwj* ")RJ)RJ)O!1avn3lUE "暾PDR*ÙVX8U sN(qǺN[ڄm 4@hMQUD/_} \$@;uywpژO.RJ)RJ)RJ/ j)sYQ0PRMa1"`f=f0`Xƥjľяv(R# b_67 y' KvO֖RJ)RJ)RVUtqvv+δh!ܩ !uCzւ*~n~yBT)bs{km"V1xnaf\3V&=}&/#JRJ)RJ)R({*Gݘs5"PTw);-ʴ;DUaZ+&VpqwTZ*c#sRp+Wl&5#AlBdV!OU'~X4ߏy9-ϔRJ)RJ)RJ, `-sTJAT6&!.ܶqΰh+90yCP)RQUc(aA~H@yP< (r2v_%ې>&"ۿ;RJ)RJ)"*RQ3ΦCz5kPY'c"R7?{hcvJQ\ת`.׵у]Vu8fwlhi :p)T-ւى3>%fm-se}1}?𗤂LKD̔ajJ[fRJ)RJ)ҟԂRPd5}QB dvUX 9] $>)2$w;Ju#P*c,YplM%ٷvdȏnk|, @I)RJ)RJ)](PJ9Bqwܐ8qqTs3Fԕ6D 0 JgFAE$1`szatulGZ>@f%\Kas}d8AWA2y8E ":­J)RJ)RJ)܂a>[1L@ AFAA %P*Ĝ% T6z?|."rړhjAʫ?iLcϜ߮H>~?U3" bRJ)RJ)R}~P>(u6PeAe<,<Fn!R , (h1l̮Z*$VܜRŘ'qqBgvB1ܨ"!s9c7WǬ#>B{2՞OY,:ZtNf.fRJ)RJ)UTѢpHa6zll8Ez?>DDE0"(R0b.7CBX4psP9:CHPꂶq ;pډ|jT wT f3v̕v ̮~!1V+žc,k` \{J)RJ)RJ)+p$`Oꌧ 6B`XԕJpr N?Q),F`O7|.BDU3̸v;2$NF,QD 'BQՆG}VXNPVZk01s 87T V@0¡ւ .>~\\vPK%"033{ T?E>& s2;RJ)RJ),3UAhK!c!ZWD1:耠z& c`Ye}YkM^l*k#D( ASR٭I>="h1lr?߇quc?k\(aƗ+:9 NNC;uE ݯWGRAUN)RJ)RJ);E@[YU 6 8Es *x'3GR 3j#ȞUA)zUc (;SC3x2"@U?ClAٗrtq,+:Em@u~I{|Nn_iG-HNhRJ)RJ)ҟC*1Y 1Fhj̩RXn L` ȯWUkٯ&ji g+6Q6<^H~NPsMI9P"3//:kDjuA<=Ro8'11~@r-X8Ҋ2,dzSJ)RJ)RJ)ñctZ氱2+f_v) '|00 Qaֈ\oLp-c8 (RFqc@+d_}>'D0㢙#AhQT >>:*2[)s#qCR煸PKcmwsGbe+o2΁R?SJ)RJ)RJ),2@sjC_!1C] 8ab8Z;f]`8?\9,]jkBo&f7uAA3AmՊ\x%M*k]|{~%‘p4d,J a8T#nm<#)RJ)RJ)dspqV_; ?ϰz>񛇡16(F9H`NHi|ߧxUP>XRqv"o':?*jO" a^Ԧ+E Z*.scX jc'G1\ 9RwgAI)RJ)RJ)Z(|QfcC=#`I O# \Ъ >JΚ9i&5GƂM*H̑rvԂ|o*jiE)i0 ʱ?0BkRk-BB? X~RJ)RJ)RJ?j6s, -FOJGܷ ?(]?=wJ(s{U(ί6<*n*;T A &l w q̲REgJC>/ΈBT,hc)bA  hPJ8o]J)RJ)RJ)_{ᚖtD?ҝC1_!mAU",xB}֏p3j89?#>/HU>="RtF2J`EmN~j0ZYo_(PJ}>ĔRJ)RJ)R[sz ~T?l% ̅NrɭR pzx?9A^ۂUsv݌&B e ڨaϋUVegw^^_o7,O)RJ)RJ)#/; jd?.߾!zr 2QR_֕F`(Hd 2;^BE "T٨ ``maJ*UJ)+5ȵ}wRJ)RJ)R}UX[cC?ϯCmp$ Wi!xPqbV p&Y֖%Z[Y;}<;pe!p~iaJJ](Kcx>۲?˯vURJ)RJ)RSZSWt*xoy*%t6kg#?LmvG" TQì(( [)<XJ-RhB[Nӆ@8Uvk Rps }pp1ʗRJ)RJ)RJ)"OF5Jb_Ԑs BSecd_E((KXtE \R|NcEBʈBvQKǀ`6*Kk"kj϶%̸7a n9;F8\55i8`8* V N`;붱m1jFkB3F:IpD]h!ђvJ)RJ)RJ)Az-Ͻ/+ ǁ'}XȜWcE ޶6Ds'vRo FUaYF!8ZR ;D[v~>X (cwҖ -J'_ V,hdHJ)RJ)RJ)Ⱦj6]hީm7;N P~To +ۗaXn+"m/;wELޖ;;?Dm RAPZ5@p 7ja+uY ;RJ)RJ)"/3֏cSZ"B'.ZǓ1::EW.c SU~R9AZf/vmZ9wݩKE"ѥN)eNT/ /sa>q0cf-Ex<3WJ)RJ)RJ)@Z}`>z*[]U+rۜޏ7,'p3lBuwTmfh@/<޿aWǺ-R wX3l/p~1N6Qs^֕s )<'RJ)RJ)RD ?E 19aYֶfsՉ0Jnt#p{4Uԗܝ ~zRy'n/7cq3g{g]J))UW^__YaF)jѩkUa>[]G>NJ)RJ)RJ)?EJȯ~w? J+5VYhҏT3h Vax| `_CV EE(DNjk 3CU/8?L3<< E1f5Im,1G̟'mc6v8;AB+<*D9<(M[RJ)RJ)RJW?>+ylT)'ɰR˵  e l}l) ${_"T KY7# UeeY*AЖ<8z> `flۆh)8q@U)cdž, s~іZ*}jcp9x{'"(KtRJ)RJ)R栲~ -n6劰#BF*G~ZXJc)"sN{* !J+U8TN#Xr^T U U >gg<,+f牅x;NsWe +˺ Z9q\]ص9m -13;RJ)RJ)~7 =Qa  Df, *3;.x^ey}mPDb6}D06yv A#~ZoQu'a?Q줾?4~̅s;37RgnPJ̮ׅGInw@U?53[P{fRJ)RJ)6GgŇJJa>f5*4׶QˆvcMC4Rimvp nu=3D`]^_'9؟~_C*"j8ZZ?D>6EnWHs|>e[?vw̝ Zinl۝R}t)G R ;AH_RJ)RJ)9XvBɞx8"R?|օ '#RbaHTZ[^Y;A)"k]1eua'ļ|8 B 1C|?;_|!c3c6V-톻]Oq\>nQeߠbŎ11w xׯ_=Kō9kH^__ ya|F[W(g=P-Dma4uܝ ERJ)RJ)RJ (u)D(0,,m7rx}aX6m @ Xr[RD;ć:*B XowTξ?y>3栳CYVM`Yy>Km0z]}~7̌r%.$>_'t?DkZ[Z c9:X`qMc]"ۛRJ)RJ)RJD"X׍R,qf|2l "8y1GK@-mlJΰYOaמEP:{Uf_q9\2N[6D*_~q1q`s1Q?kC`Np;c\,f,ZZX9q<(|**ÝRJ)RJ)RZkܶۺZ&fy` R@t0|Fk v"PQ6^no7J<I?s0: A"Bnl/1z|uٶr ~g^__y<3 _^ʬ qwDj,8;-WE}gk:+ηoo Vw/<ޟӷoRJ)RJ)RJ Tuk,(qF'1pimq^lw(U@ !sdA4YY֍0sO a!Rm#̩lwt֊ueY}.\ו#ޕmm~~'D`/|6L)RJ)RJ)ı+ui9؏;!_#(n1x1a.DP4E ~yk!"0-eC<8X86;<电ú,6CR ND0Ƙ*Bk˜v瀻sU h\#rxk4I|}1_+Ns?+V/m7>(8NuJ)RJ)RJ)~玢|}~ـJuzv_vo& IDAT(0׹LrFA>vz@Bx8*c jmRPB>ٟO"f7j"s:??GmlpS۝nr,_Fg[EaapEQ{RJ)RJ)RJ3 9A- ~`fXPJ/6l8U) Zhegm?؏Y@23^'ĩqV+-o/WJ@aN-e~// _03q lfF)\fA)>:jYbNvMV'5n7uE1e]h-8zv'qZRJ)RJ)RJ 띈ypei۝\ 1s7再wdcNR_:~ P цoA?OA'!Z8iũ5!mY9EjK9}'oooR{+gˍn֕Z+f"",w8ϓ> xGB8ΓV /_c)RJ)RJ)~9@l6+lmH[ЏN'핗/nԂB?p̩lcDQB^^n/T%Z " 9f=u)Jm ?mqr'q>&C( P RQm w8vwjAKe]VUvF-9mŨqR2)Jj"a`cp'^aw܍Bqt(OBkʮTeYeZ}}Rѥ8A܊RJ)RJ)RJj 2CϝP [Y֕r/q[A|LG8וZ {RR*H%A]@  yF̮c jQ|βlRhR_~n8c!Z x~_^º3>ܠ'Zv̍xQ6v7:RJ)RJ)zRZa[7ݱZ w$Xm[eA(Jiu ǡ,uaY`Nc02p`]oF)+YumA9RJ)RJ) t7J) 1;zZ;> lm0w<+*@۶a6VP)UB26@F<玄2eYWJ]i*13F{GN?Qo,JH~0BcPtNJA -J- >ܱT~1jUzCy}}h)PkA|֋ SJ)RJ)RJw8svX]ǁ:'2F}H8`Fc>Cl𨥠̓ "s:wcg e 憅ac4DZOI9;߾4 }A-n;;Xy;Eehƺ;۶qݨq\RJ)RJ)߈p*XV$ (E+V<m]XTy2ID 6 -A)0nu:0<ac^WDE@ֶ0\۶Z9RJ)RJ)͉kpy& fR3i0!9=rkfAcVJұ XTywhp\BT8 RjDp e&s|\DLom]g׶;㝶Hk^^ض3g{yżӴrKZA4RfoUED )RJ)RJ)W8O -"> \5c}voZi!Wɾ?}sBEU|l\%iaq8sZ|A @ТtHՋ i>?*Up6rSk/'nu^|keY03 h@-xg E>RJ)RJ)RJ;Ǿ#K,0#bN?9t 9fv]ڹ{q۶?|>QUmEUw<Uh9ϓVD@Z1I[ncaH@Ak,|1 Ҝ~7M5UzctL b`jH@Ao_  fB3Ƙ$Akyi2 Em@Qw=)Ge[)0SJQdVx,gs[ j1;clXs$=}LJSKv{)RJ)RJ)D@U.p\3)Gs`y<60f`M(BVc[RVj)ω" 9ݝvTTmmtP(Q@?ffe D R**B]_(ZXs,|:G>bFԺٳZRJ)RJ)RJ 8ۺ2Ơ *\JNݮ\W?X1|NLpjhyl+umA JP 6&s Dfl3^ sE}PDnu,+|x0hRXSew3`9Iq2J)8lYg PkAͰ8d(G?RJ)RJ)Ri":;lR }D1fR*겢-ްn5"Vw;뺢DܾRJ٬bۺ˗/ J1>}pf/βVZk Y??, ׵Ee]9'2yW*{j_keu<RJ)RJ)RJ?+N3A"cP1CpѰPhx²T8ւlb\ֵ8AX]n>3,Wc]WZk\hf$Ol +ruunHsRX:/QxDGgYVL;*w?d87?vJ)RJ)RJ)G"`PU(h1 8@ND ijp 2hpw}b{=hgv,"㠏~SJ@Doͩ\d&V| ,A,R 'ֵ}mmf,+1sK[hgK;>[RJ)RJ)RJ,3s4KA#(lmǹ_mFx;bxK.dcP Z?Zxs:"x jU0PisӤ,sZBA>;rܰ- n c8}}*x/63vVsJ)Y_/ 12N)RJ)RJ)UT$ 'P7*w1+r}~qY7v A00(BCg dIJ2{#9P\,|b,ۆC. AYpdz>ܫQ׷o;me b8_ٶRgcOU 18xw5c?]N)RJ)RJ)߁"s6岱l|?\*(ضmi g},p|E! RbccN 8z, ̋ˬ;9mƺ.(2 f|:}8K] ` #c8vj1 !?mND;֦RJ)RJ)ļ}(X VCF95[#rr)~0QG뼼PK ( ~ ]:Kw\bfBmQQ6m fj1β,;3A_<J?:;²lBp?e)sŅ *r~,ˊ?>e')RJ)RJ)ߛ.G`Ũ ];P\+,ۆx<>' a|Lp'pliPXJ` /pNN5>\(ru1>}nY?gGƹuYsdfc.`:֥9**2`΁o ARJ)RJ) RuL@E6>u8@b\ }Q.B?[ ="B%P 7fZ=Z'ƀ)p@$>~|}gyQD9EM CZe]y4RMϻn+y2X(se̔RJ)RJ)RJ7C(fF  Ǎ nwDގ9'8ĹmB~c]W|C殶R Yi-,VpZDDf+*;6(벡>i.p~{m6Ŵ`5L3$qw.wX ;`϶@8Fc}8α{RJ)RJ)RJG)R+-X1ScUD˕Z 8|>Tȇ8>|>),cMuaY<iq:uyr/,jU cjVFwnwq0zq\H8 fsz]WDI38J)c083C1w \fbϬ8RJ)RJ)RJwno\WPZEuNFOAo Uw'Tƹ6#栵:8νRJ)RJ)RJ?#p`b =C}r } 1>F,  aR3~]ϯclsGୱV̛,HR(V) LޝxB޶ϟ?Skօ;o_!2"v,<Y??1`~8DBe" SQK')RJ)RJ) Sw1(c?ǀB Dx1V0Um ; _x82[ݽ3zQ̞EN%p|vv)cvvqº;|f]WP`wxF V p,vxp\89'̌v4TR "VUܿFBfRJ)RJ)ϒֵb|ԊhuYُDpdtL*FZ ɐu};ŜZ;Ap_͹ } z3.oCZ)Ÿ\V.וRt>";mol˕e[)"VX~s){g/_P`l0o)F)fE3#)RJ)RJ)ھ#s%c]Xʜ.+A,eA{P1}l8 j(B y `t& уE"xA>pznZx}}ӧWz'ƼX^6Dts{<\fsOqzE4wm q߱ڹ,D1%`y2RJ)RJ)O(@~0FJa[Z+o;6v`07AU(jD)>wA3zkg NkV{>`Vdm}q8P^?uº" ~PJ/w㍥1yG!̌wpg3a{ƶm\e[خ/ֹ~331Q, 3Fk˲0Ơ{º,(eewe{d_."n:澃 A] (ZpE(xA>GJ8VIoqJ)RJ)RJ)NpW/ N~8>vx)h1z8 IDATzb `0lq5hՊuyoa(j G4n"y2"\Tت<xn`e^ǠeqnfπQU;͊nk}/q|vۍ8}^8"i>RJ)RJ)k.x b5R)9'x8ch9-g{!A5CR  D $8mܕvΙ̛9cN 17{ouV1_|ynfO13a{E>u<&ue.9J;J,ct)RJ)RJ)~J3ԮRNo#D@;T+2i bf9We]Vֺ#h8vg;P BR . }N[G{,̙PkeY g\un +} B`c~ۀv`f>C<>/[*?ElFZƒ؟S')RJ)RJ)~@Nhxt@B)1@ 0|fφ ctbCҳ F Gq0b~"g>@<ڥَ^}A"ϠYu])phlT#;lY;jrnmD8Ʋ,xx8'?RJ)RJ)FǼD߉ M\؊:b691".6" H13VF4yyya w9t27LUtU.<۷oR轝sE{GTQ0 o߾ۺ~;"B]VZRJ)RJ)TQT1v?P4 " h 3&ώ;& T07=cs;o ĹZ+mc]*~nX0GD3:k1fC88NʲP/1;ʲpƘ`8J,ǤRJ)RJ)R͉3x>ٳ><綶#hd[sA^vOg}[b~~xaC 3h}3 ۻg=Nm!bnۜaN|2ۘn7u}Y^pB {^, Zu"E$cI)RJ)RJ) sG13"*GA9a-x̣=D0d0ϵVJ)\:OcZ>jw}NJRkUA/Gԍ:cQUe6E)qB1/}SJ)RJ)RJlU;AU,1rq>s8rΐε<>Z3ۜaG!v}nS_.8ُ}y gezfJ1Ȝ8>QRHg63&~y # %g0[EL=P5TR+v~v?XUC/3e]i;SJە˧_!#b 7DUE\c`|[R`tcGxy}SJ)RJ)RJ)>Z![m"JmZz ilyntQlY?NɓxU 1y8*F2/TG>G;_G}'~V)_;ZP-J]keq ӧO|@P1!PFe3;RJ)RJ)"%ǹwzjq_>Ϗ>bmwC?|<0CEuhwo@csD,u`ޱs2ù~ܶVURpZkRuyr^c0|̊}81=gFRJ)RJ)RJ 9?D1E ݟ[|ҳsKqP+h0]!(qȠqT;9T51X BXahQv""g=(eNǃu]s;q{)ÿL)RJ)RJ)ËϠYnH`xC<(ˆ'~Υ.V hxU_ߞAyJ)!].r>/]:A)FZQ]Y9=xضuQID``؏lfRJ)RJ)Ifƾ.Zk v>?btڱ3|r}e\@Z;_mp.+c0ceRK?O~RJ)RJ)RJF3p0D>xnfC09Q#W#3#?~ H8AZ+wֲF*5FRPUuEUi ͌p7߿"p mOD j5;>>Rm]@Q";cw1RJ)RJ)~"0ULA1V{#|ڞϥg8.}~473lpD@Q4b6E(qPk~#*vr1Wm3vgAk}?nv=>r3;RJ)RJ)L@EQ3*Й#:bOP<9[`+H|7qAmwGPFA\qeYKߏ@ǁr^Yוc J)\֕Z R늚(붡e>l_G+(ӟI\W.//RG`lfRJ)RJ)2Q1"B`ǹQ /A|g!.|s#lgc |! GP>Z { 8ǺJ)R8̸ ecl*$ =Ͽю5CD"2m9)RJ)RJ)~lgfuq>S揬cBd11<0=(&J$`^XB겲m"1>03~ c u8A [L 9o_RSϴ熶s[m+Me;RJ)RJ)RJg*!tNsAsGHӊ@ Ͻk P1 ;A`|.gaHi@C0$1᳙X1Ԕ;JonwXBr&jR?nBk~3 Ԃ)~`<(j?M)RJ)RJ) SZpG!Nw}Z#1fN-9r3lx `lY sZMq9`Ej9zyG&ie>n~}g,)80 5^^_5Ja9sBAl l_hGg3;RJ)RJ)~V!sTP s$P:CSfsFPtot@T@!<1?f q-rEqEc>AHs1QFeM+fq0mRy Nwn߾xܩzxUE)'g:/Pja\(}QS|8 SJ)RJ)RJ)3c#~2;PPΆE,;sc #p3b#0̯f=_W|oq0b}(轳mz r3;RJ)RJ)~Vt"ḃ GY#Ȗs̠-8 'B#&!+{?>olb37cļbܿ3c &ǃ~?pzjĘjV. VnR=Fp}PK!1;a~Ǽ)RJ)RJ){$:$Nk ΢ܴn>g:~9?0;S_ݎ0E8yg-G&qwZs;[tϿCoβl!m(>fo|􊪲, 0`o ۷c-˙֥۷ƦRJ)RJ)H38phNޝ<(-{tz+~@pqj-nX|"ߋvL?E ضLVo-(`&*JPkeǙ| ~*qwwm nn7g]W {'Ƽ9_i|[SJ)RJ)RJ'vcցⳭ=ct:U%otxrFf {6Eb F*JVu޻VQԘ^DcL|&Bc15h ^7p5MT@W1 q? r{^8+mbXΏcGݎB#4U@օ-ګ>-ȕDp|nZVZjCXd5|F0Akpy  sfvH[p+K`H0MhJȉZڧK)s9s9s?ǂôˊ!!1~P3ZӭZzpCnPSVݶ9&S*mQ$Hϖǟl=kNhX|X(Fa )2L]V*p8̍7@RȲK9, eUbJ}\ZЦZ)@N<\ބvs9s9sιM@d$Pm"c bhm=L C Ч%A$(T5 aH3CO`&rȤI"0 rU|w8asԇÁpŭ[H)3k)䘸_Bk 0RJ aGa{6j4 Ki ;s9s9s~ =(d$" Xm;XjZyXEĘjZ?^GCLК<MeDI8Pz c0e!*>j0ri_X֕u?Şqٍ#FV=.{4B5l-bD,r,Fjٷ[s9s9st1S㤴Z_ v| RHaa1Ͻbz 1C$}lN׵ud1nAQ4fDBRij 1sBMI9pv AX{!L֩=۝]3큵> ) Z**>s9s9sL^끁)^YC- [ݻ7%[5tvmB ܾs/jh:b`q#9Sd94' F) c1Qzwxuͭ=3pZ("zE#"дBʙ"%F #8Q+=2B=1RjN)q9 ,u(ZX׵Jcm+PMCm @J(ˡWʲδR@:s9s9^h"Gͱެ݃@k`3AKYP1TǦJ$- m#HǕq[P5rTJ.!Gj APZa8;1˲3ȎfƵkHC,nS)erN5g*0b\^^2².};M"Y]s9s9sDI"9eL+)$ցm n"SMÈkEBXC`U*(p {2-l=6w.*Ԉ@EI׮#XוZ5(x=>3N"0 yZid<0 ,BPbR: !ʲ.V)'"8 (Ls9s9ss9Omj`WǤ{lHJ CUC410#!c֟cȑj@͌4 e)=F\,lG]!ƌj j=r)ˋ RH1R[۪He]vy,Ba4-8h<2 fFm31gs! IDAT9s9sιmnU# )i*DŰ-I-p._>%m)FS57A$Z+P[s+$"+PSk0q8h$FaLE}ck Co2i+SJ)jü5DB1gІ0f1cĀ38ZN9s9s9Ok+-BBJ!F6J[ϝOGX 6j6Ѝ!%r`n- VN8"'1owm_RJ{BrqqѓqǓnB-,=\$*VZkj2Z+0+׮]c@C׮;FK5e-+fPK%hs9s9sˌVR me]QzۏT+F>0LOQ#ؖbֶg #Ն^cqnh&|FkF rZ=d1fRLekg[0{=HUb8pKZ؝M9?߁nr&pV3ֵQ U+˲PJc&Ýs9s9s=sj-4`61XAFzBNє0VPj2$bd0V V–˶Xm EOy6fR1y٧HDe駔@-v@ 5%g=6#1D> uE)%Zk6UrNTmS:s9s9{6j,낅BئORI1bLv-=ubM+,E6&޿Vq"Զefg2u&!a$| #E8dj-늉0iȄ~1C_ZZrRwq׭[)eRzI s9s9s#H T(pBƞ\ 9&`eTQ3Hwc(U+F T[9ɩ6r劰m2[tR l[اoܸA}d|ψ)L&}ec[!ÁZ+Mf4Mٵ !RJR>]kL+ 7|s9s9sݷ(iCm3C_ݗ4!$ ,b$DS(Ca4hڶ"r{cOv6mrg-#&ԲRꂪq8u4})UTGF.)M_6~u=-b&P0,sjXkxs9s9s=lH΍Z+=zUtH 1TI*M͌Zլ۸aF>m"J͈>)L!uEQT-v;B 8;;ìQKnOSBSGѴOy"u%<z *i0dxӕޣ= VXwf;s9s9jژ="J=N!0 BSzth}qc$$kV1ETEۖcmX} }8 @L$ 0k$3c-vMI9zy>(l*i"H-Ψ`D2y90]䜑 }_DsSiL+s9s9s% ڻ+f>BBqXfjiLykB֕CL$b6il"pBBcnǾcQq*<!8VRJq8Sf뺒sf]W©[1_8??ggri$~i)qȔu%JΙ uJq6 !Hkqm5ja$BkiʄѴ^DOxn#H&{mJ1}ۄЍٝZF]N[*zw?; 5eH)ѴEOh@0eRd?r9D!b%lj! H)uA4m!BۭܲZҴۍȒj-ФO\l_ "r>mU"oOm)b!;FLJIjB  @3Bg1L1%jRUb%|Ib U9B`?_"ue9)uED(ň))Ps9s9ssH 9 4my`i fh#(qn 倈bZa mFV)zHĎnQi)d,s5%F6mǸy&I!C 2#)m[/w R ˲=]hkڃ,pI$v3Z=yX/,1>})%̄eY1nu!~n%DJ 3TuJVyՊՆ ucĔaGbh(ke;mR Sb]מ웇9s9s9wVj[ɩ=401FHMbJV# Zu- CsFZώCBG[N+idf=5eAkiN!4\-`Y$afJ)늪. TFV MbL91fR1!DĪM{;s9s9{RH D\V*Pu 0UT mp븶SU۪DN?GUDHf @J@UBFsbڡZ+F*<ܺy !0ݠ= H)DAŘ^IC,8r`09s9s9bJ+3T mONjd9ύ0#mkPk5붅WfUJ֫٧mu_HY;1 ǥi aPRk.03@yayK`X/U̔9y A i,Z-ԵPB+Y(s9s9ss2U1 Cq cA1RZ] Pkقm:CȆb?xtM$$l[OI eY(2,LSeaE)li7EHJ[t jc]reVs9s9s~@HN OM@[cH2C[cF4ٺ؟ mRWbH!3M+00 5jz+c!-)\J =1pvc]g1ce;Gdj-8[Jnw؝}6>/s9s9{^:fP Qm/ B@@ݽ*F@Pc"CMn<2-˂)5.//mjZkI6bJh41S Z-ݸq*SBP:H ޭp8)2g8j<ZFw9s9s9`pif(TjjhC a'SEHiiUWkDk;_C*m-X#RP](+1@]e68s%f8g#1ή1Mmގ1j/uleeFrq9s9s9衲M_q dQzORWĵ!ٱvBm[,l_9~!ۤxdf{!@EkaFZk,8NueqIU%9FL8v#)gԌeYޯݔuYE33ya*ln9s9s9'1Zyme!FWjHt{#Lrko\ vB^q"&$UD4XYXB 38]?U8C,ڸ ^p3ϗ,Jʙ3_*j p`]ZׯƁV{ _/h>s9s9sA1Ծ6_"Xbȕnwׇw=UWviz[ޟhmaj y @5 v;Bk]8{RJ ӄBkRVbĘ~:)'<[ZDv/8gy@qCM#e]iдQJs9s9sOD/ C}*bwMW_0;fOw|>pG.)x0 Zhm "3q!EL6̌// TiwN02 4Qˊ0#ÁaCXt0M!F}9>{0s9s9shF8rW%H8qWڻo9WA-Wʫۭ1mtM8^ANZ!0b8Rb-+Џ AzsSJ-JmSmwTRHUzZ)˲af] z;s9s9smҺ|zJة-4Ѯ!iÝ=wOb_կX/Ttf;#LΙZ31c&Ah(91>e=!"4mܺu0B }9h߀8rVZ9e0eem+,q9s9s9%rF1&(J$6X( Dv!J^+Q/Ha<<c]ZH)JŚ@;eSb]ZiD!Ь'jZSZ+0֌3S`.3{J- !Fjls9s9眻oW䫕dqĴq(L73$HqNavSW:-Cw]֕0<cf"4!)Wz9gPH1JCRke&:sfi̴VF9}vTQ!, 2ϕ9s9s9wk#l6%H 1Sb=ۤ6" X>r. `{[x%pk=>iw`D"^= 0`fBJHky !PJ!灐BH?4D)Z "c;-"<0;ϯwemV*z9s9s9ܓQs3cm95F!obcv;>/ۢG=umkIG\E)HV+zKK)a`=ڧ%؏ Y'"q, 02R &R,J iDOf;s9s9}3Z: (*,ZQ1e"D "BXw!b OaFFpdE fv O)^/+V<)ZmGvgh1SBkJJzX؝!@C1 *e]Y˲%JB) 3Y$l||9s9s9`BB jJOoU`=RH$ -!Xނg5;|Z)BB -WfOSB+UD`w#L@6B L)QK=ZA[6MY/18Mj]ASpԺS~Q)ejc83"9s9s9sj#KM [(HA͔"M$>] 8Mb7ӴlAO&,{T L) ݎ󈉑1QƁՔ0ߟ49*#9gDFahJ9PK2Mg3cGBfHH\5s9s9sOR# %ZZ1дMI1h4SW+%i cvޞ)b4~Eϧ֊j#D BFr8pǑP3u 6, :,kՎZCB`7PkcFZe42#F`qqs9s9s9 IH m "+=Ю(ڧh(#q页l'aM[_J=Ih0bFĭo4 yB VHĺ`Liy  h w`)&$֥0#RW[~>s9s9s$BQhڇmPVQnǚ'a={vwUlFFւӊx{f錵^T rPBM;n]*Agsr RJ@K!B11ٵ]1BΙ~L>s9s9sw""b4ӐV51g _[M. QN$ i[ CCĬw{ySJe]V qЎV1zdH(th 0p@j ƭ%c"DLĸ;g:;#H$nzZٶ"qs9s9sUUw{qݷɕ1ftחO:}iYڨ!A)늩jZ+&I"בqު"0cd?r^qJvgԢa Xօ@d)+ϔRNs9s9sιgN t>EqZ\(֧-[23C<<6Bb9̔'@SI)HOqZI)bDJiĘQb @dH)D p (*)gyFs9s9s9̙Lp~ʏ= eA`BHCQZN{|rTBRbaL1%RnAc/5$FL"1 0iHLdn"EXʁuDJJ= 3X..:s9s9۪@LT .HDm9)Xz>^bS6(5iT+CN 9 ]AاK)ZǑ!Z)Tiƍu͛\^Z68dJ)a HҔy~79s9s9Lijm lm|@@'>烆)CרR fBι׈h,3k}Cx6Pm4S, V. H4M,}ocƍB@45bV{Jji`s9s9s=IEپv6* S#[ ||{Wz5$ߏB0>IinMAs "Dʪz l*k$IB)qIW#<›f^7$s9sٳ-c<:>A@H!B$r'@UEN9nC4 ^B!@I(FK{gi#$2 eֈ1Mi!TRݭ= #9)4{t^h1M1%JԵc]{RWJR9aQC~fgQJPb0˿ߞy>(o~9!__|_bwq%|;+/x x+^F˾쾯۾۶g7n<??xx ^^2^_wOoo ox__pЇx??cpu^җ׽}?7?3~~ ~~O~O!uOӼu˿c|GEUO?oW|W?߮z?OgZ}/?0(_ż=gggO?Aַ>⫿Oo&y{xW}Wq͛7yk_7}7|MV򖷰, ןpLkWw--8ozӛp[V;㞏yx6o6/{8$=û.^>[}3?sr=Ϧ-ofOu{ |~~è*/}K'd:S򗿜mg~ndtXs}O6};GTMخg ڣҔ^UkAUO !s4)!sIM֣m(M 6j)z60MS?N0!fr};%jk=0Wbc~>v;>?ٟ~'oW2cFzGStZ_Sp/؏)|'>~w~|=φ~Oc裏裏__{~eY8y{ E_E|''p}ӟ~W~ootO=z׻WE/-?Áqǟ˿mo{/yKاzޟWU|C??xы^ķ~>?龟Ϸ9|*?s?>z!^3#'x;~?<>"I ܈ "+.xz좮XWTADTDsPQ`TXNA<@Q3L2 3 Nzjk{>ϗjժU#5j /$m+Mt?~ 1O>9ײ֭[))SLRO СCZL'?e+>PdJ?~}0h ظq#/6mKoo.o0 .\СCyСCSLJt&2*tߊ// &~Ţ*HJ)xG6AXJ)_Z:v@ZSX6ᰁmb(ȩf"\%l:ێ (BC1#"BBg1bYp ޢhʦQ#xYx5H +\`>ONܖH0~<}VM>KFQV-?:`Lb޼y޽qq]w0o<>Z0 w}/5/fgڞӹsg)*r=Vs¦MһwoBgfҥDQ&MC=TRS^=x׏O>ĉLǟ&t|K$NLYXx1ݺu;Lz]|9wy'/2vAw!HkBƍY`O>2Wad\ZiPI}6mw.32*OSX,ƴix衇83Z{ 6۷B*EIK`lBu᧟~*U޹s'aP^*]R~ie_~ު^{QFLRPP),,䷿m6m7t^zYf4jԈn-[{D_Hq7nL 6l{VZ>F^#7xiӦ!=z4ƍ+w]bPһ*LLJE",uH\.o~MF6@+I&b0mN26 Ҹ"!B*C:͆f!$hEa,iz]Q<BICJ¢ ! LM,-_izw FybvyY{~f̀a /5S,X… 1M!C3Ϥ%mذSpeo,pB?O]6ӦM^z4iҤ+Rn(-2-?뮻4i­ xq֭[翾3<%K~/^엱,ݫW/>l?a),_~%'Oo!??jժѢE .r~oGm64nܘΝ;ӣG+={$}~Μ9̙3Gq|K.;?ڵkwܑt ?cK.+)4^zlg׮]+,[{Rz塼c&d>%̸p we˖\y啀8۶mcʔ)X;w{^wQ|W <f~my ѣ;w.w?Xb?J뫯ZjSItWd2d2)i5kYYYvm%6N?tu{ǠA0 ׊nz>S\ps=~|KH)yXjuꫯK.I:n&gUбcG>c֮]Ggzj 6oޜT>+'{n֭g7WT<˴^كeYL\XD xS%~gL2kעE\wu)ŗϙ3?_;wҢE n{Exy뭷RFu]s5\%peէI%)((`„ [5krЧO_ĉYz5˖-cʔ)_M4+ϯ̯&Zj;vk׮A;͛7' }@̮$֭[m)[n믿^gGcY>h>eʕܞh%P%\¸qشi'xb&_ӧ_ҽ*LτZj߱ûdf5R SV@/hk/z\j"Bh)@/ ۲laϞ]h &1E Y95jd!M)uQ]CHkDSXp]ov)jɑ5㐕 :gwA ̞u_P /pYG\gĉ0g<Y{Pn]Zj 7@6mL|8lْkT!0vڥ|-O}ePN~jիWezj;obtQGAA999tԉs^d`NRtRY)| C IZʕ+Yr%C Ic,[o-o͚5YS2}C8cƌa̙e˖3Kbzk u;?O5U\nvoۻw/˗//s(Yd>s_SN9/(d|سg'77^rssˣe˖xl۶l^P9s&:u*hGs+$ٽ{7Bi֬YZe?ݟ+ iLg^^7nOǣ{sb&_~9۷?dӦM4mڔ믿O>~_~]RNF @ZIl߾ÇW4[uV rgU;~> b'|BǎS?zm6^z%֬YèQʖgvK |t֭e˖q=pUW1`,^aÆZř9s&J)Fi;aÆ1eoK(bٲe%&ׯ_ݻҥKէXh_|E|aƍvmx|<#ԬY hL05}-O͚5UnݺL0!ed0*ʀܹ:uk֬w~)Lw}G$I9yQfM4h~[n_ҽ*LτxT"5Rh}@rh_l1qRm7D{BaH@h T.h04p]׋V$ #Drr~L-P۶ 2G+B0X Dz-N8(tUfL/iʙu]l"V-ADvm>. W_=߽nv1ca@(҉Gf”)So1MC<BlݺѣG_`Y5⪫Jz-O}K/b^{%閿曓"[nͅ^e]okԨ| ƍoao'E<?h4ʜ9s={vMrs2mLyWqp8̐!ChҤ }9}$1{ӵkW dݺư7M6% 1<mgu<(5qҥ~<۷z ۶HHٳg_&Mݻ7a0uT֮]˖-[>}:7px 4b(5k_i,^Yfes(Yd>^xa;ʙ}!;ŸoȰamݻwCq}xnJ&MhժO=TgG?xc$NС>`bsYO+S2mL7Ȭ?dZ>_AٲeI}1YYY 2;BFANشiv[R{e˖,ZLϪ[n<|~=?Hw^k^y5jK3]pb^{-O=v/>JI&q'y͛7Ǘ*V^=IX0`o67o6MӤk׮,X`:wOVE}[2b?m۶tM >=n8z葴l㏧Yfɓ+m-[Dkɓ11;?C}vrrrhڴ)V⬳bǎKg<.u׏1cT Geݺu̘1QF ,`Qj͛FS%bYB/̧~WݺuW^>hтjժav|&q2=K4Y~=eѶm[UƷ[n_K)iР;vnHUdr|&J:+;)Rh@&L5jO̎F 1 U hbhV0C!(J.BDB$Z L$S`21e,/eB (]EM&iiY:xe`U^ywax>}h֬YZeYr-~ƍy'Vs!͛O9hL'rI'Ѿ}+{ ^{_M8Ns'a_$ӲeKڵk2:)L ,_;Zj[oŶmJ$HASNtԩDnK.eŊ'>wy}kժ =#UEF|7^|d_ZR.=0M{UKIAIB_ґu]G:u*/"v]tO9 n:1m4bXJ_999_wߏmIqInUէ*ٳgDq5k_׭[G޽Klر#cƌa}E,Ki32^#?ñ?ZSO= bvY|?Sb[پ}{﯑ʴ+TPg,YɓpTNХK."]ɓ'qFkܸ1gFkaik'jb1ΝKVVVET W^Iڦ槟~bʔ) :{.Vב82%99&. Q($v,CĤB iUhF(Bvvc @H0 %AVVRdeg8.,4 (rVR6 Bm*4R(Q IDATA)! -fn.ۆiL./nݺuFJ)vM7݄ &?'Mt9s /L,oFrss)((>`֬Y{~/BR̘1-[M6 8|D˹뮻pN:q%`g޼y{%Dtsҥ%<⢋.J)FH`9s&K,u4mڔN;-iE9nJ7N6Nbwⲫڵk|)dz*e2e{I'.$oߞ5krbvq{;CS& 01:$1R*LRr2|N줇 4cȐ!1˗O?GPF zɓ#_"0po>I,N\G_M{1Э[7°]vij?FnxiԨQG}Ą غuAG:CMZ믓_o O˖-iٲ%zb޼y<4oŏ1zkJq+3]R%ʊO,X,X@.]|7NUp"{MW***CsVW}8KIEvC|riҰa pb̘1g}|OΤIѣz+ڵ "竐$-!N۶m]6_ugr~CP*ė^z)⫓2_jN`;]בL !7~5M iQMRrJ-JkL˲paܑHk)ߟ {>YH@ݴ]墔u]B BB9^&L4m58K4a)Z֩Zf3{^B_?CB!/ OˆpB!bP(ỈD"TV<I)dʆ عs''tR{^d][.۶mcǎI ټy3 4HH|HG-N.pZj}vmFaa!g*߲x衇X|9RJN;4?oʕIQqr-\wu\o+VPPP_͸qJMViW3mq[ntMX: .G1k,rrrhժ=zH|p!>^nHի~3^ez*A[U,H?D?nܸ1irv,]ԷɄsz(ʢ]vXW_}C=9r$?0m۶MjMH֛ax)V*_p,XEvF}绊н{w4M,X@KKexJ'[^z֭[)((Wh5i҄oP3 6EU5Ƕm T=۶!(w"]v/3bڵkw(P(k׮Ff͚InwRs¤Ce_)Uv[TuҤlPY O/YO7)hOKAiMČ 0F(P(Ў4CތK~>ۋ5%BI$* Hjy!R# OR" Zp] (@@b×Z{˝8z_W_wށG$ɇsυ^S'HòaÆ<%I֭˰a i&lfΝԯ_x4'/_>|RJFR,vGXdі}w5kgJǴmٷFIvrٞo߾YPP/;=IV^UHEHwpEe2%q;qÝLgڵZ"2-O?4}ݜ^QafΜ֚H$W\X,4>sWݟ3%-PIo|b7 k׮/ //>/+Ƕm=XK4eĈL0!ߵk:|yϪ@FFXN;WqԮ];eP(TU뺥FթS'p|gKv>ce)骪>PAJYB *(0 LL!dp Vv'7㏓ĪSO=%KPC9TɑNϞ=~1tPZl˔ 6Pf@[.?sUqvY}zMHfz~6mJ4M577;wV(Jw]uQӧOg…=:v#D+$}7_#W+Ş tq4JR=Oď-@hO5ZYxAH6Ka .n(A$²,tpVďv\ײ1a:RQ$d+,q*QePd]"88H1wL?ʩ0a}€pKR<touH[.m_|5-ܹsgjժ='1/$ܹX3o۷o 'di|VVz*9h{]"difCoP^=WΌ3vݢE K[Jw6jϴ=ˎ;Fb1/^ J)&NHǎ9Syw7n]tg}6͛70 V^+7Nb?~<-Z`׮]wqx~q7رc),,4$Dڍ7[lo߾sA8Q=z47nd1+JE:d>G}T~?~Ƈ7nݺĿjբnݺI}9l"'tk׮%J?>i&ȚxʔL[&[yC3q'~_~|Ov5nh>x`ns=ǎ;xK~W9B0uT{.YU,E8N3q֮]Oڵc%ŋi۶a=A{#),,O?ꫯNޢE V^]bXn9W^ye%c4lؐs9UQL5kСC뺌;6e-Zr} 6&[c޼y/k׎ѣGW(*x駟r'@_ j*^A *XxjՊP( q/_NAAAI7n[nqx≔2=jբ}̞=m9shԨ7N{r[laضSO=w'+ž={JLlذ۷'pgZzq%xԉ2BGhk4(DFňaE\K$- ]BVZ#ј&<^6'nB%hT#:]Ry~)%!#iؖC̊8Zy ihmcYLRxZ+E "3RRJYfro>~[4K y啐`uJR͚PzᅦN˽(6m<_UV1|QFKB)ŤI.rٗ^z)|}7n_W 4Hϔ)S7o^||q<w~z-l۶cRzuF 7P:'Rcض]j:rEy睌5;Eӷo_/f>UA޽ZpB.\~$I)v;dz2%Vd?k׮M:uꫯp]m2j(fΜɏ?H9ӹmڴO ygrYg?dڵ[\p|%Gk׮dGSp3dرL>s9K.eܹ 87x4i޼oɱuV&m+76j D9s1 %Kkc+s9wy}mےƍ:u*5j(ޫW/yСp~>dXy޽;wy'uM,.? /PZ5ZhO?믿yLJ~X|^xD"q΄ lÅLoe;+V$Yr ۶m㬳Ϊо3<ٓ&M`6˗/gʔ)}Oyv?KbuRZkIoqj֬'d 8D"zٶmڵCJ_̈́ Kݰa"f͚5)0x` à[nH)YhSN-{/z~n{wcDzdiѢW_}5]v%//<֮]xbχ~ȪUعs}O?tzYw)ܹsd3k.}Kdgg2m4?aÆtܙ^zKӢE &L} e- ;)%իWOaHdΝ<4oT;wfĈ]__n]N;4暔3?t|;89s&f+m۶F+>|8ea/H);馛p]'|cǖС6m}8 4Ud<o~c=Ƹq|˕.]SOڵk>|8CN:K^Jgɒ%3f<3-_bI'ēO>3gZk7o?p"''#G2w\>&OLaa! 4[nիĒ.]p2uT?Tz޽;}9dukݺ55j`޽eUUtУGvĉ)((Yfݛ͛3f̘t<ԩS:u*J)6mʐ!CR&=Vv8cU5ըQMV82;Jǎ%(۴iC ,+iP"By矑Rr '?={VMo߿իWSn](Pm)L#9H)PnGzB``]de kW)8PYX ֈ3On c(W AV0LblDy6e ge* Dal?sYh;ۦ0Wdg v"D" qؓx뮻.Q\p7nG)R| <5LZV[U(3gv0Rf 8hٲ%SLa|ڵ 0S͛7O;Hgq} קAݻ.>S꫏,׿6L?"<[#iۨQ:~ͥ/,j>koQUm@@@@*֯_֚?OC ?RP(,B!ZIV pRuZ(PpxBGA @{6# I($/\;D-$4L/颔׉ĢQlFEj> b!! !ibQbHyyX(%+;P8p+c#Syf?Yv2d R/<쾽Z{B9% 8Jn,5hG)Bar IDATHGx%!@hRs:Pدa1MP$iX1|ߏa~aX:H3r <] BPXXazY)< YH!, CJDak;h-0#\qm'ej}GZkxduD ҢH.٢I1(N11T")X<]<\k yN,Pa"a+ja;.vµ\.JEnKhA!ec&т(f8(J.i`"D)HL3^-a lƊp(%uH@@@@@@@@@@@@@@@@@@@@@ 2q/.nTRE<$nE['X!0^[h<$uI|lb:;v((86 ŒDple#48֚P(TmnQ(m!d{ @ G"h]Z`FDŊ`b% ~Q@r䶎G*𼸕'`k//JDIjرm;v1B!ЂiG 8S} `H^Fsph|QLDieY'a1@k Đ&b, i-2+2'm5h(g"(ًx"a(ߟV&"++ 5BD84øK,u'di`Y`, cPXP@AAXƲ,\<ܹ35k֤N:tޝ3f>FɡcǎKIoҤAU& 'u,e.mI4HWiEv%1 b nF Ak6h"RP81 u!MiHiPXBv=!$0 i#:Jc8\墴ˢG2i~zGy;w2rHqWssalǸ3f ?0b|G 09s0qDB!Λo)r+x={h"ݻ7 ,2oT=tHLYX 5P)R)0HIJU./:qCGC aXUj4뮻9r$ºuJXdH8Zh] TH8B6sUsv1 / R  ]SJ\)2J8`iFB86Z2@\#0 քBkq- 8C(F#G"5qdgCHaaA#䔫|UrSV-^}Uߓ:w5;sK/kv)?ӥKog=hݢ(/_7tS_M7 H&n|F(KMuu]L3v-BREAapXP@i-(ѣ-Bf}|D7nL֭ӮG/3sL֮]K8T\3SP5Z$[D㘖Ѯ@`PH)1 (/Đ&O)7ih\(1 ) a0@+h"d`6R0BiBLm !ЮuTFr)Tj&++[n#F%f'r3{bv$?0oFG)G 5Ѡj$,Li 4hWY}T'ƐaL3Hp-MaHL$4( J{꺖Ƕ+'M2QlA9N*RXPZ6CH̻3>8p g͚5)/+IΝ;i}ygxٺu!w@@@@@@@@@@@@@@@@@@ч+[?BǢЊ-,\r摗+f#Ya[V{[W5t|߽9 $HpȲ$H ADnB% N86;gw1nPcε{͹>>Hkߵ=Ǩ?O=U1nF;'`ŜfIJlƺ6:j&jR?7~7?ÿw?goݧO_?_?1ۿ# .\p… .\p… .q%8#]q@$Q늙LlPM s7v|$ 1N3z[6H9O7Q9fF)Mϝ{ Fo ?W_ӧϿۿʯگ/2[?Gw>?W_~OOmKĿ7O_p… .\p… .\pWdrn0N?'˿o?o~_u~wo=WW?W77wO? … .\p… .\p… {RU\fZh*o_|0`-o,9y}rځI3 F#+玤r{c]>>>hNq47{v2D?_߲ .\p… .\p… .\Ÿٟ//h djCI~9/1Ohяx813u%)Rf@5Q9 ՄyƗTѾ{u… .\p… .\p… #dIJ,g{.!"w D> [kdqj}g? *>>f$1D4SvQKA1$w}.\p… .\p… .\p?'fDUa qGDɢ\ډ0u dF3LrSic{GTb"e(rN.uy¸.\p… .\p… .\RF'"BPk֍v:+@p<Ɛa#v`(9e̝ᆏAJwDZqdRJt5ḷ&Ͼu… .\p… .\p… 8vCsFRV& BFCA81DQkvw,%'J]*؃pps:S/Lq8 褾D@I1\#b(dwUC/D8c- UudIIH& q}{I7oP2"0P;dPܧ&@UФR+ZkN* )c n : 6.{޺yeYIǠ'%(r{iq%G1MvkVs'׹170(yvPU4%80G$c3%JיJ|0{}/4%mgf%%r9SgQJ3N=,&=(%>pwRurAUhg9gDqJkc\`jϜ3c"ԥ\Aa03ǃэ\2%gmCT䌛Zc&&܌aK=ǣJI_vq([CTsJ wa1Fg8s@4 %l9㈃wݙ`ya5" j]Xsܫ;Ì>5eRN`Y.2m" xBll>P UJBΉuX'֑΃~݌Rk#mӔ齓r~ys=͙ʘvOZ;*BJ U9Ʋ,TM]5d@əR*qI5E5+" Us&͜ǃcg (K MBo'} rNj۰+ʲ,@t(6B фY[a{>}LŦ-L +KN1:ٴOk<ƏHs;h=gN v>&e\C1zy%sQ I魅(%I1Cs/ѹ{gAưx} l[v}HqKԥryRy[4/AUXsOht4)*J]*[ܻ^!;(l)f`ƀ96̽db)׶*q?vz7܅ę+)rBRm>@ܝg<_ d^}pG"hW}1۶|z.tc5lN)O?kq~1)Ϫ$mCu&"9mtӖ=y =F7NQUF{{lN}¶"&w̉OSR|nE8[#v9[Γ8pw2׮{+J)Am> hxG'/=Ki~61a#)k!ku #X}=q~Pe]>@EUiF@iuت8"5i->á÷3rXRăK-_vahmi}f)Q7<#7)K~_> Ĭdf" TctF^SƠgDy>֘A[DNcbj9,wMIQ" W<lnt\(K{8;$$F}~~Ycw35 ZňD5͑hW|fO譁iR:Z \Ya$I W qcJ Qq|چ\y3 >F1zygB7>"ФzfaR3h+ǸH)ymf W ;/D鎤4c6cX_̜\D}ƩN> ǰ.Z26"t9p#~МHYfޜ4[v8trg;Y}rY~ػ$u0rUUA4hm>WA%(uW9F  1iI&zl,s"0*NIyv\c2ɼpJOBH&6ȚŽǸU@PWRg Mft:(jFCA=(X h)Ԕ`dQ RJ_f''ga)BX6Ơ$}lZ*mCE-Be͌惔#hIĻJ7C&0cyL2>QEcl¶! | I> EgҬB?\L ǟw>X3r'IB=n$gA&d`Crd= IDAT[WndV$TZk8Iڷ$WĝL zdyn@Pk<@#,5c 5f. $Z^ G{? J,Q#3fR+%͞dqOwIJʙfm.Avɹ nA9\PΠ! eJΈF04z`K, :fy#ܖ5D74fVwaeΠ\Um||3? $o+VeymR;~嗑y%gV+w,H՘6N-e]q3RoxÏtXQHKRγ87nڳ>[ʗ_Ľ5!VPNoy6;jZr$M*k(X= ~]̍2>gǓ3^ZjE^eANUe}A cɭgW#*egq?h= IR+ƹ|=IQ,\39+;bgc ީKA$²FkV yg["tt"uʺ{CTzg"ꆚC7Xa('n+u)Ԛ1s)q#iNNDX ,D NTS$䬩pg'ܿaʴڝ>f|HRj^,kÌ,⤬`{}IRK$QlT4~Y_ƫvu¢H$UU0Dh{[1R'9 Q>+ IuxmfA<@"[ImӧXBA)RwΓ yrǫ`YJ-9 eY"wb:D7L%;Jfj((:H@Sq1|NRĦK) i+AlaN;Uz?o(~87HU9x)<$"ž9;|$wp oopXK |ėo?SW+zd Üay0 uYEbWZד4Dˍs LN9JT)5 c 1 gZgmoÖwxKvj) ݂@ofCUe! [h,KA- $%/ ~P ݨ\: |H43GlSx'QvCQnd~*MR0=ϝ+ARFVrg:ܨ|&f5=G{Sa~:3HD3,t5o9Ɍf.ンk}CBCqA,l3KɊ{(V>hg ɠQTq1FEI 'ٜf$}IZ ,H uɸ;K iu ר<TOx-ifL\^BړMDFMff%%W<|x`_%=&,?Œ"O̿U-i\S&'D]>_?̵<셟L SvqKTqW̄l8BPh=*3h\Un 3%%kmn(. ÒJN GUgDb2n°6|g1LEmV88@~vdA0A+ȾoWFOMgh+ȈDQ0/KY5SsB,Ce$|*gWf5D9sTg=b#~ I4,q3hѤѧdͪa}E"8Io'1YTy9~ 4QUk'qDβ,X)0TئI†}rn|;,i!kPkc k-1^ÎR5>w2߃P-SʃP;uIINJAZ#~jH{/Z}*ĐL8ZYj "]l0T84+nX>9%w4%ZB2+G} KCS~jR5q韾&T*y5((i'6܍=[j$q'B"g֥, ye*œJօ۶ֱqg58)ʶ,˲p8P#xf`əe]^Y;݌sIA(7?~lވ/;ӽDf΅уڦ1xD7 lPLu 0X*Tn5gܶ]^>)q' xGAj[7rʬJ]~奾9[u L%yc}ײPJawF$^ѝgPeD"JS >Ɲ+].ATRhRL2_q03J_5oӟ&2g2 Fhm(R̹yIKFxPy6}Gr~% 5 l$zITC XJz+6;26URH,x裸Ke]+mK{"Tq%yԲЖ>՟Ƨ>ɒvO>0I"~aL1UdU\Cak'ׅT 0Ƙ18*oJv5' 5b1g<{s~m[1$JmPWشUux.`gm`4RKtLjERMZI(ۍv٣ D7dJ7˘ kU+{Htv_@I>zSeJ3^.Jw !̚]M6Tu? :%:ݟ6w}$Im[Jة i?vSZ8[Ht?}g6oA9 ޖZܢU {#RsbEm# "q {'oakyMsbfA TJq=B}[tTӝǃi1E:M2euL}p~n7FQ]* kܖ%)ܶjBM%O5l.QJ.``qXL=za^ZB]"lʲ0>$^ZW<5oPi(;d+I()nAX~cc p6j-#'0{g=8!xh9]Kw?ӆVR!l r5T bm߶/8AN0{*e8NuQO#WPZѣh0잘vcQNZU-<Ǔ:D"~Q=3LѝSHЬ8o#ZtMr [{Xz||ӧ -:$)ٕEc~\ä^㤺gINʓ4D(yHtC*%9F\[}8@)q)Q8m<{S,1~:%+k]xjdA-WDai|ځ稸UZ9ReBB$Behp\O&aE3z1u N=ʐ_D^f 9-І3A{0?m"BUsOnܒI wٺ3ccHPIT;I$#/2#>լ2yٶ%)CfkR7@IyFIt?ڲb!|fd^3p*N?,F3F=RIJd"15CCPf+$$>IWVx({ĸ_͎ux4z; Q`np]A m% #Toc~g~sKaٔi*81ǎٞ/"6"eN̍smh Ue dH98F2knwg[LRγ e<}1 tk- jͳ#w=B($NAokꞳu 0MX~Sc4Jy\fjpz؉R U6eYx{ۨ%+׬>:QKmȚf.9XgΈ%P3y#9|ha"2r*1NHe}uM6cRJYs-q_ag2 <(R봣KYSfz{* *P0?geQ.NG -h98KsruYcvOգRm>JJ]i}@fax{lAbD۸Na@PU+ۺ1|pFoԩ^/޸s&OyZ?KeoNYChg"/اk<ς?!BǾq{+:洁g~e}o}|ы[;Q(6:'Z;4WFlWJU(7hS w(Z'?,*D#̒rkO@t~45f)&}vSi|%r0bP;qL5 S}W0I)xTDfD+H1{;0b1kQ1Sg[sD_8l)&D/:G}U-_Va>=C?ϋC>įct*ͪP4^-tzo<|wM!1|/,eYN9D5@RJ(g̃}ΜJ1 'fLHqǬ:ݕTg;Y9"͑$rx=CZsWKx~2Kݫ])gBUVFǭSFUFdtŗ̉1)tR1 K(gbpx>3j> 6 7O:aRⱼ1"G/ M%22`l@)q[- c ڴ"ER0XbаDFk|tsDnCG3muwr폝Zx[,1-Ų=\(g2F RM|'~|;0fEtްąց9?q5XWKb'&WT:R,|q*8J,H/{+qavfDgױaV k'tΎc? Dv1fQwˤMlRRo2qg @6^Gf \DVF-þ?mW[TQ]BsZg zxѻ^4a,ͭڪ xŠk&Dߤq lˢܵӱn`<^GoC,bȵ;"CJ~@#+ >X>I> "R(GAk2f@K'^Q8cp;4ky؅0*Z 'מeJG RBj ]:²ـ8$!@zC;~W+H6,nuD[YaƊ1$MP*qS<{;fе&&O%z4$0SD=!?~v!3JFtN l@G3%xٱ]Z}h6QsVd:0蹝\2ȳ.\9b\4AŜکQ%@8kct5{ZqL;yh0`w=, SȕV`,S_&U,W;O2^`0a{]&i :YU:r9C1E?2ƨqJg$gUź.pSC;;7/o/*L-uI9sk:-]&_|^)sln2pOеaDϏ$,˂֩M|[Ŵã(̆ȘSՒ+c5\pawiI p7`I2n.I1R߾ӑG'0<.{(9끚 J>F+:~{eL,se19J u܍v.뒔!j Ơ{uM 4Kx(zzo/w]q;sp{%:%ݛBām u Ie[.'bށӢ\s"YԚZŒĘԝNTK=gw2ELYP*!ɞR.L y#Z$笹Q2jhMp<LJ~<(b-K -R29a7Oεzʱ>0iȲ$a%OY^^6X-?R *79ʬQoF߃QB@^zDz,a no7ܝ÷o6:T 1 G8yZ =% &")XHFVesN4c*Tl];h;.tqP. k-mCJ((G&Kc9n8:;;x\NXWˍtGMȐ,Cf"8y%%ęeKZ[80cGiJjB^3p {m|Eum% 43k)~,M)b6\[bV!-Q.ya2(bW]>'Ԭuz"H1)#ֈs/,8R=&0 `̂b jpS-Ю hS0D| Ddt'9.x9R A%F|~؉9+JyWz`Iu,~}lBsA;THG Rխhw\rf4a:n~e >X0gi}EJLlEtTQ;)L:='q4lz^#P~65_`yiC׺!?yߑL1DE9cqTbJڀüƍuD HhqH 0I.L婝+r~gIULkNZKu5,_`ׅ[2X@ ٮ @K5;S>k<> y?tP?K.}V_L&X0qN OX'gXT)pفF!C0m]tgxpȡ TfQ4jűy.e ; ef8INcхLͬlBi#2"MnTL:]f,JQ Fx)%8KdΓSb(5 b^ m-v. f" ATfsbb["]ABp^l3q]Qz`E` 752,ZcPN,8]X1FU.,͵W.cy ֪fNƽXBҷ:*H bpkL~:?mRx}} phP҅.[]HEiwrPQIv<ݶf5x;бADZg)|~c}aV3:轣Yu+C`3:&.J\ohxpأ&ӽt\!irz-^q'srGZ#{fR{Ǻ׽B l+8=OnL J>;RVNX+~1&X2<,=>Z8vr)zO^On&#bz[j*\(<r#RB,?;,}oygɽ|<>/A0 R _`ߟ=(rq(svZ(r;\Z >]H/ύZ븗ֱ >Td:`Zo<LjeP+ItsC^#FG)Mwxd1 ˟6l֢}?gօIst=ggEF@0ZH 3? ;l31Z[#|;!2'sCQk,ohx9#.g1v|ۍcH1jZJA:j⻶5{Z;wsXInsΙ]] 9=#F'&>u/d{}.¤c\,g4I=;u^5؃:IPJƘ,+>??`]{Pwyls{ aˍ]hK)eYpXy#- Zx<( S|1W\psø/+5䌮e벪JY@K ~W"}IsQV}4E cx7|||@ ,]ޱ=X\1M#=W K^jci}KBP(YEj*1(BdJ3];a=~dfȭoN4<={m`zXBJ8* u]V'Ls=3+6`8! sV&y:a\^lթl0{ g7?1P}@C8Fd +gPx ~3z40\F/\䞩ԁuMX^3Me4Ϧ4gR sx Yyu%";x}u2!'C_ϝ}R1F7^1wWŢs*nԪ,liҢhDa)W,&sfHK*w'ԲzL1@o#‡Â'JCCq)ɒ@u8XfU|5~@~>!8h✃ESZ((CH4ΔiNH$(s;/K%X?Ǖݩ=t;Ũ=t+KH;t?<)МprNNW :!hXȈS8"p|0pGǔ.D`t= b%믧 .5 }Tw"p&@s1ן}S{^Nbjܨp B6 ]!Ȉڟǀe.g'ʼnC)D@"f|P7)z.`]P [00aE1:3fkhEa X RIrqi弟賣z *nAwu~e&/uI"eGk]1TcD,֣ubM\i R:ƜMU'D1^Ʋ)C[\fYz6dcntCs0駢ut1,0^^1":`X 9;De[ M`š9e兮}G 1' rAӕg vkWt5QZO1y 1/.h=])%-_xr^Ucau2U,??1׽m;K wdb8:*)@)2j7dAtt˺}Q!DX+U mF1y]֐3z"xnqY-/XQxqĊXK#DRMhrAs"/ ]x`? 1BVVsxB みޑsv=3Hӯq{}hݘ6ef1x}}C O??њv XWz#G_8??ׯZXh# 0vCL S#3B wWqU~uY7w>>ڬr8<?5;{@bR5ÂpMc! ^UkYv}?PjŶq|ƅjDt >?"O6U|Nܘ\{V+`L)@ \Gc(Gm KZwkxo"94l/bΎhBι ))1Ԡdwr5>v!xr.{u+ne0ĠN#WA5%g١ #vS9[eUnh-yͪ/#Lm79Ӕ&[Z蜭t9{yp; ޣ6RRX6y <;{X45#ф>6qEk-L1$# QlTS0,:Z7[,]`#%OpcPKF=xo)Z^-a YEnT`,Ιɇ }{}3^Ԏ&E8hOja :, t^!z/j4]ϲV ,,lm%-EOz$ę2(_HIzM; Lk!%͎|H84Q8뾺dB1n+zk:lMgO?8 F Fo fbsN"d^#~ =\=qj$6qM~whX?}4?1O_ }tɷ\x-8pc^}HvAr b:%zt>/GN>0άyA|ŃKO? m.aZg? *}bSJ?cG?#w^E ޯ!DXЕf8x}!܌QG鸮S91EgaQ8H bC%w*"?-;.N~u`iZ볺mb`!mcr1*E7o.}iMZV>RP.e`l=4XҲ{Ow9Y:wn7bk̓s,9VДEtǓNyp0hEJ uk"믿`Ib7H1.g:sWʉEnhs8L1Xrԯ n ~Z)9k9h#|deQa+ITJMY<SK6ύ2YVɸMc(ʆ Xs:?U,=Ӓkt{Z)a]WĄlۢEZE2 P.&'?/'~S,7\`]}$^b :3e2'\~Ow'mD_8xL2e|~/i|w2;Y޽Cd ^_˺b0a2>-mYWdsdQQGl}k(8&] \{&H{|Ё>~hc^`,;R 3[39G\轲UVa8cY8h)(xFOD $y\w1R VkEz.Q\V1F1(|}}~q=ޜ11!~:"kw[r]7b] Zp.ĈyO#R2CP\E}mUE:E^49P8Ґs֢΍|#s3LwXg:JE(">@C'C~>0f1ӴY*~7`ƁU Sn]]El/`J}H)a[Wl'{F q?RP^hsJ ! $-m !<3S{ "[NP4 bbxD;j9f"jA:A % qy+c-yý?q!N~9H`ě<^mZrLXZ푠Sžy۽wEɰ{Zhե>$T1{C=2ʞASe)Btyc?ˉU \ϊh iV-}XC72,85)h/ 20`Y/!dBI=g yϣw\JC+$>a VCRC02` *貟u`- S<΅gYʦǵp)6 L|ghx!^*Jg~UUb8'nKdzSD١qOQzqu 9P@4lv36gP9܍8?szj/>j ZzQpr+"to*Wv48hɅC:IX9Br>[qbvNh*O5B_gj@~}@~g^QGkӡ_Ȅqq>Nf'hu19P80Lם3)F,qAb$M#}tn APɾ,x_?gcPr{AUVyޓ%wƗ']J"2)sb7|MY"9@* x (2z3%#gF]1$^º^FƵs"qes@Ѻ+ҡhԋ3QnV 9W_W+r ?Ms Ggl 6D,Jș<0N 'å @kx Xn!bRϦWd TW7@_*$zJTP|I1"GȬpr9m]ؑssQʎu.ٞ.H9n˂~%Dž|?;'0(V1GARzi1X(o X|FrPͯNb*˒\8רR&W|J\"1n{by͝ESǡV#s dY R]G1ڈ !=?Qdؼ7k=c`yEdCtSZK/xyy#:Va ]P[-_?C>Xl@Dٽ@DZgxk+> wcT\as`"F#7/<͞3ӱ82rhu%H >S?ˢCO_D}0Am >%QՁʮ N9kŜ DD 45B8ǎ9Ü))Fmۏ{o2r[w kf&P,_>tMףɞ=syn|۷uŭ6 愦hUg8|%$K0rBJ|ֲ'F_32ARqru lY"n rnz_BDjzp=5A;GW1q]Peh?R*h;I q0fbn0+uY`GɧoC+*3'z{ށ&0VGGqDwL/W2&zD-ʉqp0ͥFְ$ L땾3pn}pOn 3L8׹^?`/Q_1pٶxLLP94(58?7#xAvT8dށ1zɼV}0bm.b Z;I~ '&DY9 Z؏'cm/3L (_Fc)ta:l̂6#[9ȭq= a8ȕf^ Dmp4@1LGAWe> KDJ (F  (YP>e-jQX+!8rC @&Q2ӂq4y`f@pވmk;n״1?0DRuC#L4u \;DcICMs8X@hJ> ޢ׆9x.޶cY< fq!?82cGm ۍ1s2R☨^6G&g)SxMScE PV;F0''u3ťv^GsPw4R^mN@Dl*c*AtY|iyzTD ?}fx|הE,MFܘ:IxarADF!hv.}V_ KL99 ld캰,> yM͋y +nCɩ:o8Sc&ETpK ST 1`5 ebC'd2QXt|`Rp5CIrZVCK(1.8;Ͽa5/aAV]?}Fs"Ƣ`)N"Y !D8N͢񺱊8X8/ xQjLkhQ!%hUD'W9ZJ>y,k3%S'd+Zرuc)%e[F[i6i)y@!hɅu2X-LPvF_eV>FX k=ȥ(.N:Ӎ-'/Q,n 7m dŋ@+bsLY2X`醖vZ &@ 1N!x"Dd  ? {H)N.ˍl>T7aQ4FtZxPy{{vۮ+,礸eD3b>@ZXu0ZbLs8%dBd 7~pࢢ~ OB-Y c~e}tڬ+`zYV]#tN5d9955Hfg6{ ޾8ۿwXz.(!Jdhǔ]mCL_b(; bYdK[O,G2{ko/tbJeɓ8ן3o-'ߖTP[ 1 _C' z^{nO {C Qy'JFi[zN}p?+˺\(6z`)9"J.D@UQwWU-::C-|=mV~ !Pk~DG&%EƗhX_^F~oQAQk빯ωNҁm]?-GRzzw  ŠB[y?02KnV3uy@.y>p^Y6We,˹*b@]EK_% rT:PDް2{Dk=ͺsODzdO5VXeD3dlN&p]6!)l7;~%J,tQpg2B#!*55LnA \Og^tǎ}߱nmqF君< *ZZ|z6ޣRYLng:dcrPjic S5>'9A(Ձ}RaK& !b?G4yZ;q!B1 tbvF Z jr g<p@WhX#bwcyhs Z% uUVcD0eR/q L]MuӀc3chZHפ.1|s8 8KT_: BLQ?sR8ؿ},0gnV{Šc`Tttlu|M:Dp\9بûI1;?z.tQss)r )~tT{c<d& mGU'6:)DFk[>l:]~ ukvb9O1;Ⱥ VP{%xrA:y5I֗X:Z0& 0k]BhF],W?K-]>1*K11p.EB`\ hV im^{~}\LkXjGs Eq]`un+z|qe;[ȝFQORWD P|qOpj\d yd95lR3FkNDĐo+Bk ULȅ8NܟcgB|'PUQಗKt;?kUYXt_yu] k.mI= .]Ho^v߿&gP3uk]LMn7ò{AWC-UuuS uE @%^E _%3.1,;9px En'O>߿ IDAT8Ɯ?Õ+R3_ #Ru*GW'B87?@ax a%́NJNR Ak|nZx>2G^wJ)nKɜh۶g׆뵷βm!jQd޹Z6i=5q>_?9LʰqLI@ U/KLp %JK,Zc abBc?<>(O?dN{|J\ [iF8'GfKǖ՗rȴtϟ!Qp,3/pBf,=˺hn7u*~#Z3B>tR\oEw ~`r8p%ѯJ;z:4bX2oxJA5~~O0LTw7mQ!-A!Ji`0+P;J&u@ɞ&VE˲Re*2p^>T|MDާ5)}DTj0P-!KFCxZ̕J)8H)W )%fIXC5.;!ZOвǓqBLH)# =wzuٛ^/x[w\ 2@}s`.%cY.z43yŋ#XCjċf1 iz.9acо[yڰv6֣UfQ*h %DYrq(H$|)X\dܰlZ4q%nk7$ero[AOR!WzAM"* 3ɿ73igW[RO( &m)8mm bcc}ȟ@4diD$pmU,'z,²QZ Krc-3}C{GgB=y[eg_Y`’WE("}9.9gV!JCA#p%ឬ;+A-@ %E~maGAF,dUklVĚxMn&)jմ= KL%x@[i' KJ2 ;],AYZ(@\w$'P"Ca]^Q*Txo1Mn?ZkSk$BDR+g,BJ%Fq[Gap+)F?'2k)XMg6ӼNhm%a Awwlq`ˁE n8aVdd.wVX;PK%tp,ZMC۶ &VJ$,bq#!# vgB/v;ZC4ʐD+' @E'=EX)>η_PC,RmJjLP.29|BEi4Om<X3k1"'.3D?yiw h!r6ޣ:NT@:y*cur/ooxyy<@j{(@Lnw`4<{}(wP-큔n֚!Ej aKM.RSoĺs XA殖5LoA,(4Wl2Wa+ٔc<_byVld (UbD mR*#_;;i0sxj4YM}@fc-Zi#;!;?NN ^c`Ȣ;]y^.01\,%}cGIaHhchs1'Tjf2 h4;\.L RPTtvHVȹ8xgYYJJWPkbcU^p;ٌc NgZď*T3U[Q|Mr^*C [%y-F,y<9#Ke1͞ç_ua gZuW&}@:I@ akA5P hv?I5}(\}cB 6ESTTf0{o[SA'!5b.̸b]v#0L @YCeQ<^.Cwk+4Z^ jJI5Zurd0bdmi|k %ه\)E!p sbw$2J{քH&#=}:񩡉CHh$M\FOsҳa qCQH Hf*#?./`e{caF1o'P;֧OLߝm# 5hzJ*dÍ0 4}G6"E^NRў@^>98sNGy?{isRO{ Л&)Z{UѮЍp_[iles-\(c_^IT B#p=C R\kA764ZaE (Z/u~ZXeT`uCm 9)$X4!jPA*RjBSxRմAy:" 0B) Z"r´^\v𷖄ZeJmiOa] M;eIuN+NA5JO!a|zw?>tgێZx촚JEB5!׷?t!Ô<Ύ?"j-8+u5ARpU`/i~OnijuG ! )c(ɟ`\@A88jO?Q@m(siڜǞ*ZL 5r)CIe4 g2lJX ]!HMT mhQM)78H-õbvY˻E0p/]O'@qLurbwK^ 2 Vbj1/1зܶ 10f49Tza[Vv8nw) Y%" P,j+e/|9eTwvumOJmc}Ϡ55x#}fe6tZ%|O%9l÷˨F,0$)%$TgPBs3ܛCiUa95k/xl;yFr|4ϟw8rFyAy¢ZurHE\o76FZ *z| .ON4+^^^ZvuF C7Z I/\F_p:-lgЕ/PI9h#eU Y&!ki5N9yNg% {40,;pChDgX=" bPsEN#n1^B ) 8*sq y@KK {@Jba#7/'l7(ݠ,$٣!Qɥd=R ѐ 7OAeέV; Tc&R_'<W8mwp"',cü\+imPrug `A4@k¾}<ޡFΑhJjP4hcL+g- hPAT.=&,4TВƺnA<;Rj ӂ_1Q`4`t Nsܪqm^RHL2MTi&rÊjъ*MنP2J] 3$aFW(t + bZ1~O:7 dϽ֬-rmBr N`g|gI_GzӭT,LbV o^]Nj߾gRǿU(HЁ-*n˕r 'cxRhaZ&%"uۛaY cA|Y8FXCOPb06~pcq G b7OH\JT7&fL:xAֱV<n;;] S᎐!n]>UQZ@Jq)l@ToeDSTJ-&M@wfd=ILFmfBlTdaaxOYp=g7z\L~; ; c?Fed99Յ3, (Q|ωÜ4k|c{ H^pIJH (r|> Ӻ`=)Yu:D<[tv4X ՛%P<Φc4pc?~ם}Zvx qd9}aQ~V8a(`|X'RJ%Z+TD.4bdfx{JΫg7:y&G@|Rn秳IS\T]}ѥ\ק˗/ckjan[>;(lێ#\Ghrr-2*N˰< <{܅U}|3\*]ZVa'[F/^Ed=j f`A֘/X.l>}ôxgoqMgPrb-W+RU ep TL 4b0t2T 6n51sHY ja unVdc10[ mPGHdϵ bZEٞ0ޣւ#()`X&DR*'RТJ2zڨuzWJL^[%&nyF,5e2~ t^GpaԮ˲q@qq<"./xU uUpgY"u]cpdBU@KX_a줊e&s[9J̹I@gZ&]^^$=]Y9$RGRg?|zcOiUbs}WВӘ8,IJ^dt }l1"Os%Zg5L (CFADC:Z\ l&  ZicxF:,d -fTPxy"=7#Pg0Ԍ( j^Z? ,3Μg B _S; Oޫ-2jeXjB 2]RH6ҳP10ط@ܠ 06)Lg8&J{ڜ8똥*TIT"w4`'U*D\ dl)J# E2([ӠFŴ趚~M5&b W\2H_sVqNPX+LDœx7o@s6jjdZ$s #81y߻lE㛂ׯH ;H+ڤ i 㐩ȶΕlm0QЪf&@7h rB;Bk tե)Nw‘ wfVoJc^vtHم9b I4kZ3rLX1DnW#; @(`C|g6c ҇"ٞJ';W"r IDAT|2@ Zˈm yRDZl2R, ` 2sZkC4!* W)%,4v s!_)=`$Q_;۟&R=)%Z,!Rm5݊A)_?3>_}wxϼu?LiSrۗW̓C 3L~HpC"2Z TVChǀZ}P[胈[ 1p։LO1foܮ7VR 5'7Ѹf?cY&2JkM!f(md+7tw-̈́Rr>sypr~ Jvm&h4Oӊ~dc¾xhd۰Tz{bb <&ob:0Mb_P0|KNȭ@14/f~V qz]d6NVt$j.Z gs5%a[4P12ix7&;5ڊ(n+( cTQ6-|Vй khJ|Z5g`<3dӌ*w5 ҵZmm) mWw,ԯUDjljЪIVd0aU BQ㵟O[,3n3I9i+\e&& 68~?~ǿ>#v!ԳCw_+}n2~U&]~0 x뀒P8 ,ܕFgp.s.o4QdֆTR-ЭՑIhPb2۸Ǵ?e?2ib.dwI}&qX}.訔¼,xUXp:j`^&Q Myx~ȵ_qN$r 4>ar~i/e=1&R1.C>إ!ֽNu9'f–#.jJsRcC6 ~U*MU@@RGHm(0IczñEeO擏p'ӪxF\13:IR,&e4dk,^_^ހ :+/dG{*DŽu]}+!g=65G3~|`)鄜@ہ~^)뎀T9 owk _$PU49KڮejaEi>DZ$gH>hCOΒȥAi- b3V~}f ~q:Pd#/? AZЧV)%Wo;mB${w v!~-̉Z("޺a7cfq)5NӰ9^޾`^a@P6> h]Faؙ%G<9;J+ ԇd2NEa}>ϫD/4=qgwO|f4`LD)ڰQ 8WCGk-mQ±x<6$ /y%8,rpȢ#elR.bRY:b)gjF;r+9晃 ܖj)9b=-0Z =O~"FRP{z+VE)9M!F2&op5;xgrBL 6Qvx;h7™u>GLπa>ݮUTuo}z))a2oGaq\}I4fuK)2_.Q_*Gzp=2sض)hp,X tpr0ƓdYh$ang#KmFaaʥy^k2yԆ^7և!\X(C;Rx //X]%9'ʯpa{lX%aw eW5p/{/?Qqs= UTfY<ĈG??) ?ύq !}DTRĈceQ8dZIlp+BC !Ž>k1e( zAݮ/po@SxZ^^^i7 o;J$T8ڱO;%BIЕ)%E~șvr<9etco-q TⱮg3{=[E?Pjve8@ߚYy% 1hă+ 3wRuJc55l`PZu@#_T&. b@W C85јfvfSҵ)a¶}R¦Z0 0-RNhM XTQ0QX%ehk}nr0(h9!l C XN+%LY;yBVZbg'F6n` zRh`24bN@SXIJ*N2hӴm{  F9#'$hYgbXF" \#e| D@z+X+-ZퟹB+9@|gY˟WL$HAm(FŁY5F]uW[@F+ha+lPt qŋVh0p? ;WA%߭5۳1ky1oLI~Y~ [Pyk[*ٿrYIEf'ݛrXm? n?,ߓ Ks@{^<<׿}?Y=-bHIp*!4ux9ë4 s?u=m9vr??JiYheq!m,=@܇5gZАw2Toz}y@֤8HB/Zw840*Jra4 @RZ$xd<X~KrJ#Sru1ѰtbB )#bu5P_0SрIB*lb\+MOK3a/p~"\31,g,:@K![TOI2Fײ.LF.O`1``}#C{Cc|u% ]:1. t>*_~2US`Laq "e]GqP^|> 2-t> ~n0ǰI;TE'DՇVhwThЏv~M!, 2~kA24ᴞ8TQM?ץ5Vƚ,_rAN4vqPs9#炯_?pk(%! HsqV O}xl࠯O,4 HFH-4l܆g˲ y4:'~^^^zl;m 3czE+|4XE7bv J\{pUWݚ[$1k' !Zʬ[r= Rjr=2rH_#{8ǥw9_~?}$:续 jaH>-krڙͰh zѷ1gIiA.'~BB ZdhLTp ;l0C@N*&8dMI,jlY= ~ JiG) ,[;0 2j*$5y 7X/2M8$ pgX`&+6Y#<Du g P&bƲLr%\o_,~__~A) h8DI:=иf1[;ke\wc{NHJ%k 'Oeڢ[(KyF 5ھ7L%0(a:ISߓ"yck6=a\u%cZ!^DZFOԚ 6] ci@v9u1TX2LK]8o;n>>nۗ7(p^ v[RA@Bޏ_~[#Q*Vj 8Ȥi9e1yn-!RJ7wt?@‰1JMw1~/Вc 16&ݦ#hAn4e/ rB Ϡ;ԲrbPS&I5+~ ʱ[,*d"6CEHxv?g| hL#Ri7X<-cPKEm ]_Ps@d {}n Ek rbf<캲n2GtAAbz_uþd#b:0O iY3JT!T Pq)3s` hPD@0 ;q<0ֳV ¡.ysD j=XBh׸0^03cc ƍi%W9e;8Cf`VZ3c,3 ЪB `vdKLJh Zs ʁOukcAs吁,ZDx};pTNJq^ks`Q^xRNCo/x|qĀ ,~$(ZIj۶1/)W\F/C(U[֬[ë kdd*exA\>Woj?BrjQD@>6 hM{.2H DBsޚOB(X_C wLiW eA [D;Z R%$hhxTΰ( $[AFYXJ>c*@6J@kۧo~_Ztq~N PŎ`eV)&(Ba+p)l@& UL֊-lxKCRےW@KȠᔙ>=Ή\mhu8+jKi 6%9AVY8:pgzi<8]PJDܷań}ߤc8d a 3 :BH1:\ħRz  4 r w92ns |0cdζF@th8"k6Fc sAX2ӂ X&  ccZcaľ lŠmydw2eA;;ccr?Jgg(Ǿ#ɽnX"j iqz1 ۶a?vL󄗗ܯ7C{1lqT@r:}yU }d>}&yfuY}= CT2ϙ9ZWˌiM QNgC! ;ňƤ|}{, WC%o0iJ)2DkdoviVX"Q'̰~=fBB H}%C%'Xq>pnmye2w ޟ}` !X://3=e J [@{}YJEL{3˛hR*JӱG 5gaB (9c&(`ZkՁ}=雵FJMgy9gbAvɬ0ZXkeq=8{3#!zd t VT!6gfkw-Ze#hwSS2ђ r/+!X 'J)Zi2()KRABsN0=K kjIWpЪM0(>󊷟 9lc<"DfKlX?e[} CQ#Vs~V|=0Oz>}[ ϭT=)cpA+J!07U֣ZީY+hdo0';>?A@JnfSM}ͨ`M5cCP6XZm=T2q6DZ"Aa6L5xjp< RXTQbAn(v+y@Jkyf0?> ΁j %FRo;RH86*`,whyT()Ҋ |攵95!o+ReXw8vGdװ[=9RR̘Rb3!\"r%J+dq?v֨< Fnض 4z?-[pڄKJJ8]^`2Ga5١ZZahհ=h5a,Z0f:5DeҴڶ;R#ɣi,湆5MKa~ZNșN&m{`{\q62_%9Pb=Ch#H:I ,ˌ?q yv'P3yEkN70x*w9֡(!7@@R;TZ1zM "$TE@sw(B+bI@3Ue[_"Y[CEq`lA.!jaFMረ1n`09UR8K+ߒŢ{VPr$4Ԗ6 JLgi 50uL 5릘r;2Ϸ ZQ%tӰڊMrkH_?_߃nOs^[D.h,?#4躟}/=Jh"(R(b`H0~ 03'㐡Afv?>ί{~oAzjV~><(P~@)gP"1J!h"7,i4("n`aEAJ\lF \@)xO* pׁzj]鱝ꤹo|bhQ< C!, OL~Ύ`O`6O __JY='$(:*"J@&YR"e 48 3hH IDAT %C)'sg- e=G)G˺' Ξ6pxRk|yԱ'aa!p>P:SI)yYd* 'R?;2sْso0b dŀ~A~vsAm`eP\:Pk&8w@(8|@og-mu 3F2C"sg@׸ge#'Sڏ4zb9l`\X/p#yyVRv0 |mh{khS}R;jc4@I8*4=jyƐm&w9cr+CyF˙lxlerMcxL><3A_gMӄOߨ8Iی׆->5s:]Mq`6, #5qӊgIh-qN~벢5  ^Γ1ltY§jY{24U60"P1D˗/aL#DeϵsrgrnB+T{`)n ༁1׿32A U!J9}tPcF6䘠{H+K;WD`RUfmc3~le:7g.6yq5OV!&y1E5/_wnο Ϫp1?~^y?xf*$`*LQHuiB77rf%Aߤ12ZK.PQ,v>Vkpx̙.ܼm VwuL'C\qrKTgdܿ_ltx}}:˷o?ĴL!U,%eǘo?Pα.3?gu(R${*l]CAa|1rYOg]!iﻈQ%㵋!QRt[K;re@eak0k ?uY 9OPt̓s_[f{+ qY9[.WqمKC;iJqwyf u\AO,X8aVz9qYg}{|6Dx(f-kQ6mǚ= R%kq^\WFpxz77 4l) N"xag3A\fz5ǿ,3y~zy9Y/;7ZQGNR鄟Rhm˃'w+9bO`g]/\.OX+2u_c5kl<9ƾORz(p#Ю ~l*L|giESI: .m W6^Rƥ1'k9APH1!p!=OQ >.jhjD9]٢N\ׅ` &n#"ӽwX+V;wgvsyD4sto? ~1&|fzkUr#ʣ{|EcNyqX"]0Ww\.W"+LJY݃tTzrjbX !ZNBZt֧ OW_x~s\&Wz휩MjDm8ct>S9`Pj2Oz sᅥ:t2'. "kTg$R>(Ye‡g=9KzK5UAkR<ћz{.g8t@Scu~8 (ݶ$l)ڨ% ֣wv~.$ò΂k5^NC ƅyY' l X )ȧF3X UDd3]tOoѐtu|H;kyk{Gю4cNtfbF:&^w2]qU"ݡsfsިlHe.fp6J0y?0&2U1zU%GҊaBp$ ʦ:GARN) NQ֬y]I_#40Ic8FXYVD CXYÂRWwҬx<ЬYT+ynwqI+Ϊl'5Ɗcy47)j(EVBGA.jaߥZ:沲.>Y<{)gcE}M`0ʞ~c0H֡-3 BdqJJ"b}jDE4pR 5gev7.~70_3P9YU7Pȅ0E]! om^/nmCrv8`0Z>lA6~N:8M0!{"Ȳ.8o)EL+׊,U),rIǓ)l۝ uegqE6@.1߷eB8 ,Nˉtl(b#IQUڦ~LA6Fn(PZājn5AS9.OO,0nfd -蝸x{tT6fm].rz-1 rqq{hQo+J%v1t|8gYօe](%q9eYh*-/≵:^|<º^co%Kǝۍ_]ڐgqho6aKtOWL c;20,G{}t%h:?ǨݏCєMuV+޲Nr0_.j.i"XdpDﯯ4Omy n886α4q}g{qb|" }8?ٽCP)ߨyVqp<)gJZ^NpXk4}6$XR܎ogq1yBdOL4c|!Fq, xmQNII[kL7ԊFKv(5+*m :s]ք1|NN;e? ۵8X3Ujzh|Z=L+vt sXȘָ0ÌsZ ;.׉S |p:Ft!Dn?~cͧaE2P KwCId?QQ\}~!- Ƞ CiU\ڹhs;a6v\pIV+1F.>ǽmCdgjP;G;N‘^8e)նQ:shq5儭egJG1,58{JLA7Œ%ϱwbvIPy>>>gq]WO9(iiMm..Ʒ;Έ NR86e:ז)':'5L)xp㼴CbjC|>#c+$b  0')Nt)n ̖Gf*ʼ=nA͉2\`1r"4YY#`k_e$˅_J95QiMXxwY JN^7X}P˦p;6 gZR9MYי'9tav1X}eMFJ)"7b:9m&d[n؏I:EY12ʴD<7&ި .V~[JqIcF0(OlL@!Hqj^s*RØsyѱ̑y \x{#gF cƢFuuJKl8 JTK-X֨iۉR&Ʃ !XRM8^Ԗ0ke}jx8ܪsyaVUj*FuC20NI"Ek (25m{QOK׀\5= r1b4bLդTW00?mV%c<8)91R<zs>ʼn^*U]m#u` }wz<¨[߾RrzcE&ۧ'rV3BZկ@%DX) {jީCԍO !BSX['Rz! Oí IDATŬy×.U3Wq2u~tٍapbM_X3'u1~iv}߅<$a R6j֍~k(,>1Q=[BѪ;%_(o@\?Tʨ4G[G5'zeljR͌vl/I>HZvZO1ᐶb b`͎ ײ\-EcB<ha\N4%0Iv367pr{v9{r[jXh2yg T\=u=گ 梭E1Pk#bgpw8$C)BH^/2k_ܥ5u=}3D !|} ,zm:xp۶cal v] #w7Jkp$9G4^^) 1| ozU}C|ļ'groטgas?#tn/rN_^l.xIp%}UzzWWt ///'}³]9qzo*8ybWj2iv[wD7rNJm2wVpU=^󬁪2xCn";q$S_0ooo n8nиm+u轝^>s )yO/Boə]eSj;ϡWGpNj9$?_pc؏k{ݹ?23p1cP+ɛ"d'Oi#<,9'YZ{nXqxz8פ'#5Z h|~c(X1HN@:6Z-?3/3=V||r@=;jbWqyḎnYWv餜p2OR4:RZm *!>81S0mBUN%ґ1tMȗo|M #<aZy7N[-TBI栽wWh4DZ* Byr9e0y{̱c֙ǑWa?6lo&]{YqwR{3/ZSea2*kK0^]*/DOՑ=c'#gcQƘ(j0)Nqw $Bs0E4ICNZqyyWSBܷ *{3qIt~DNy2Ey-hJ#aMBN cF9c=~j3rp\]JKtn"{sq & c'C:&A71sIR #H7\r/TWyhDM 6VrazJ+tri8۱3ـjǑQu뺞{R…v$8qCO=rӁw\26<TtZ "qc? di#cj-Erb<^;wZ:.ZTeblT,5W7caGc1D/ŪZR71aQ=S-k{s ]GBNpl]05_c_ C>X|&XIAbA.$.F1տ_?`JN?~wu$>o{ RV*o=sۥbSeGkw64\:]!4Ap?9`>n=gXC٬il*4;+V`ЬVGۍpL"|izsӱChh*9qh1BQ)ؠbdls˲`uDE""ۑN1VDDEtg0j=yc b^Ds*OqZc?q3S+*̋LtQ8="dW0_d]+A^E]iikΤ쁅t$yi lmU Vm 8ݰ ="`SwIWi\W [*OfYl_ FwΉa^gBteJuN)z1PQZgw)HftUEIǗ3>^ wy9,Ԓˠh{_b\8 ?{}(ވqgbB s̚0vc?e1a]EZe|J!5ͯ2{kˆYd/&8_{Pkm8휺;#q<sZyir}.4AN)Iࢥ34v'jEq*Fr=q2l9]-1'bX?YZ(Fysq߹?n\ӟdMwJ![lNټx;!.\Oc?_+S.V ={ Vl ytّcHZz!L`rK@aE6M3)<h ']0z:-v4_|  bms!|Cº^1ݜ&yY9ٽKH\k$ʑHy|#sF˲b26[,rڈkćt֞],$гལJ+vyd%'6֑sǴ"{h#OB[jnn@5t~䔉ӅHȬ!7ܱ9DP(دPqM9R S \#y˂2"$KF!ש( hdNsHPwo8CJgkQt?nSc`ijVgmJ3^ià UE>2)U-ӤE4eO8Z%ix㝃"ViW\mM?^\VXEE'tf{̉1}_Q#?` AbxQ3h=n ؜ģ8}=l4(N@Ugj/0ߍ0/azA(*}m~Znׇ7|=}xSMç}={:$x?V[AZlt.Tp:t>]2V[kl\"{gN*gp[Tw\蝓p77 zHIa*I2t03XJe`HR'KSֲs}BaӹPk~hv* {w0%pN&0RÁm|ttYJH.lIĜ;<뺊ʪ[8.>BmΞw)ѪWr9µRc8^rmU94W7ǻ aCh671Oe-*,P >Kc%|* ȏM =cM䔨ڞ?]ZsIo]'~up =- O/kG{ϼκ8XKˆ7>zQƞQOxgzo^,r///xqΗer03 VCNyQ,h@.eE4_{.PGu<e./?8򹘘Y[sũrҹpWgp^Ι_~ȼyp{,ׅoaqz ,,)7_i3EݥHECǾxI]h!P:EFPl" uS>Tٺ^/E%]رe g1k(S 919j`v-Ȭ !1ƫeYNvHZěӿ,v/!9v>g `AZB,R]s$~:FB'i1A` N2heY։U<==7Dmq#5FO!b"ޢ$)l;'^+ic>ՎHӀ1rR$5C##{b1xcyqq]9b|ܬ+XK. T[0T- 8\c8OOObJMR$Vn q -izy"N J@-tY/u [\ s):Sj#F5j DiqW "J.}Mv=H`CQ[NϬ4g3IޓB,")* 62xt- u- g~OP؟WDpO2;$8өcX}dQۜt䑿 ='bFRk|jiȆ{OP?_W8*"69>EgŪ D\ i_ >jՖlFoO3=zz?K'3BC&OkÜYh0W9П "tW^{34Xѻ=7:'Z-  jEhl`k9.I6h&kޤ<%mB#q{Bޒ;I(Jui >jUz_֟N*{@"`cF|YKt$oo=7wi{yy?|Mú<q>??|}=  si\/,~6Yx<>n|+Moq7?]'uc;x{ N`}y 㴧Ch& Ӽχ5+JoV;bo;{αeL$u9MK姫PzNEa:[E[Vpq.^^YI?ukyz~6 Wq!ΉV֝yfp)Eh+&b{%tJw]66X VA\W̽όw"oE;&~eSh l2Zف-//W|BIkvy(n: )L7ʱQ](Ƒ>]Q#eXW| t^~zhv`"zHGS>=3Bp,FGωMŵyx~k~&\70%΂c8ZF:6qY+Ϟ-O2́9VR499-A6gUqz1lagӋX-GN:t?%XY91ߜ(•{ z=],( FjҨ`z.Ip7dKXJmYnq FOE朆"u¥͊gbjpcӠĕӕ83=);^6"lӘr-q #g-r uK-}ik<Tb%·Iǧ _2S@0O|rv\]j>:콶2*0Atv#c@w7nEϺ>a#C+9]J3~{ox'E<8JIoXb}SIxUIG#3=C6: p1?,0CpFX& HΑo\Z# UMJu'wI1 rZ< h}{XzܩX4/eJR9ϴLb;)}tNh%˞C\DZ!y̮Et˕0]X~Â3R3Y<ɾRQc{-O&ZF1 7CC7jʒ2M\/rb}sB3y` :s1H>Qk)=W7 ԥ? IDATU!kHYCXiGpZ3> ûu([fntt|+Лӧ؏BR)^ޱi2񧟿1@[^utMvc[MxlRX^۾ r| W3xgdksт0P?ڕN|b^8Tá.ZwqDrw=%;p쮒¤@|b-)IGUѽa]x?iθ3RqHgGt*VXD\jgbiǃtC%,.|`;gq4MBt)Hm8Ν"dm]o#ȍihxJsfG#t#7:Zh*^0]q9ɟK*hGV1Αz#!&сЬMwꝄHeJ2K[!E)Βfˑ$W槫-@DŚg&ۢ\dW[dDh"%t ඨϿ~Yʺtg@~{]Yh]Z:yKR=](I9-n"Œ0SlSXc{Wq[/*ݓB_:Dc${gk" 8$$?Ҝs:Kq#PكU5lKܧ1ws{^Z&e*!6֪BIV@`0`tVmt*,l8gƲm\uHgXbvqV@$'L/_^YW%k8.I"c_G_<%81 ˥?({'ƙ?ϟϿ#Սe2؟mzI+^6:$Q33sΜgya;deD/r{:7+3ooo_?ƙv4^^0-:#_#^k\|˟g8,a٦aEzKժ2I5P:R/H'm|_oR|w3BY3%u=O4xai"Es6;ǙeYWR: ^hQ4|Hߩr;ˉQK$,///Ҡ7m˫vJq7yҡ2kEPT*wyw8 -_~۝y/fbkҘ yibr^5G4PK %xcm#'+>D/2 ӕ~Gmcw3$~_#0 x~cZ">ř~hָljƘaUF=o UHqjq%ho֕~8|ljZ*';}O BdcKUa cM]u9Lo0QC38?q [Z>UOJ._pc]9Iw^cMkŖC 3NM߭fo8|H'孊ڭ6ҹ[Y`^_.J&7i^t;5LfL@r)c#S,V( ښ3diEEE(͂eY,Z&8 [қw)XJQrG#NvP2Lcܛy<:mɈ!DNɅL*y%Ysh"9Tc=kmv9)jj,7i\.L\i+UyIUzX.&頜xq^_^.j{<ԲO 7Zψz`]c?9ɜ>M3'DZjQ9MC#ÚFqe7\l#aj#"·;ɒjUFs/Ż=y4hlj Ʃ6)g=ם"wt_lZa ? 5+kM>?;a6f+ Vb>]d X8۴UrqS̀/FG/JA9|һ3gD`͐8iu.98_!<$`ͩ Aa0&4Eba9g)mbG|aO 0D絸LIYfŪSJ%ä IHz{V(?wB ߲֑0-Fe %2c>q=i ~ lXSɔ.FNZj'sfHG8_^M`~W@|KiYj}Vk pw8~v?A'F*)~`2FT?">VY$lEۃ_ vJBB<scnߟ5sq]d46qYJ&熙'V/ ,elZ4 "ޝTtcYnWM,6\laCT3G(e[Ө"+#5'!bo|&h/E|{X%%}Ye ^4ޗz _eq5O4+AT1eOwRJLU8-;7//Sex佛%xپ|9@䜅:Me3VjW1o O҄,(gYg9%aWp.`<0V%ǽw^@a y߅eu"gz?3r;)kй$I$1ƾV5\8V~$E֙˚ewcL8W3rg6 ?B[Î}Q? )_p''T䔘>`r6Mtp{qwc gQ~rǀ&M+…ȳp^>Dw2Me{3X߿8y98N/  [9^QJºa xyjlϧGݫ|c'Γ{ZOE41&K;YjI,M<2?X]r䔴6" {y P^+]Dh(5흮|nYDyUőZ+;8U)xYHi(k2n;!8i'X˙35eO3J'3@ˍ}{gjpl'o;g{\~Vm dHNjӼP~q\H3o}Uu1riU&5} }UHD7o 3NZYlW8y]H RHgOYW/uM^%~9cÆ@PfyԲ $'N-&cEص~/d]ֻym5% **vl߿+IV*B&!Γ|Ș2! I kDdto}9&z(A1[Be찎&/.@o'*MLZfH![ ]Frdeӫ)q V*t2FJ&*<S ހܦwVc&Ϗv<~u+2oރ{3Z8:#й9 :`:Iw7l.zMJ?Ht46mL,{T܅P)HapES\Cm9bBv4M(RO"tRM||g3󠓔vهﯤK1; X>`i 0MZf- 1肊&: Iܩ_M "M%ǣQ4/LbMR(F`d+2Gi(g.nf{J㒿$ Ni_t \+&lͬ- |Gɼ~ן~RpVg:)Y{v\Eؿ)sI=HG! |&6_hqo/Hgy\h\`K7}03i8~{ʲƈ.|9yr, . &\EXq8wDbrj',UM.w@є%e ==m%' Ԩx+vgefQpWWZ}Ws;ep"]}^tcWzQi ҭtV C[:GVOtC0;FGeWq vl_^^+as>]Lz̬J:ϫI$"_9Sbb1Rvm"FcRV1]/OLSd?N}{8d ;/__0xq6e r8y^^Y/ZW晔NziWs<ϫ@*5{0xX|YŒnI4@ݩ79狝qY!4CtC0M{1t?Bu(LI3gIb!aeMs UÙ݋ z+!z4?Jw@mA=-'赾|c_%ZYc( =ety# ԟvJI:#\q4Fl^c"0v4ah4jbJ{<]&s$m)+FEսCӂsyrҪ3)0@I'1x9'8KA-ZZ~;8" . Nt^,˼л4罏Ww jդ3Ʊbh,}?lpr[WJbV֗G{DzL4Tz/6cKy/ˊīQ)d{./sf(ƾGm()uzxW 2gKPşW ue{kfřmdm W1!XXպq-S =LNBO &ia¬lؔAEYܵt,?ñ BpǶGڡvG7 JbO`rT DLRE`g]r?Ae`=͞RMZj"$hp8qSϱUHĐt}w~MBΎ7BxXdmKB0chvd+18-w ӑ@͔<˾=eiC/ "#ȽFb\H%b;F>d%T5)*XQR1M )'Z>1} XOc8  bJC h I"4!GbZ.bW*F ׆ǛT; K;2Y5-+[~8\ӿkl /!ۿ~|[)@No'n `Vw^^Z 8lfFRP zW.2kE`Ù&0o]#-A~.c\# 4L 7\XtqI1Rz[1?`ډkh){9m13 h7O2D⃄4KE:1ұA*ASL) sй+֯Rʇm஍#)`3R>B*r؃5Gw" !=A6Rw d{#̤7 {f ;+ 9lXr0zp0<-eʶo=IVa-Kmۨބ=<$ksV<~om?iґEJG Lj<9C*gmgnhY(VL?w}SWq=[j)!W@wꖥqލz@wFf}0e3*FCa*kWX11^cik><>03!X9nج;hiВ̀q/"{:.`j^Ba\O,z4P:_6/C '|mD. //$_cvhJ8tq9Ji\^ޗqR[ibt#r)Y$Xu+:Fan'_|{yYhU wy . 'a]xU }ZA-){O= 9@ 1W DzF8`^jz9a?t^{˗I+()Re;G-Z\.uqzZ|P;N" l-x Lmu%\6(V:cE葦 %7UUvJmg[u[5%7JuiH5}RKn,M{3h=s(8Hg8r{a+X4ijIS'LS}j7ճXԌ38ߘnq=b6̈́[0 b71ԮV)]Akyi [;`tȝeU9I˙^ Xf"{EmhdZVv'( OIrq8$7櫓CNwl.N9s9: ¹9J!;7y7/zN4 f&6ZxdTnB6+%)Jf[a>hN') ` =0..繉H'xu^!%a/kLXۄTW+ʘ]:y;. 3<>||zG7}b.-*$0*{<3{,`f0o!`|.zurN$Xa]nz|$G5Bi BЗt&:² tNE~knleZeFSP{YKo+;J+RiwT*%P't;iPVe{5r)⼀V\Xdi:݊EHNel2JMV4u <(9I\mxOTF"nM@8[lpJ.M VyxAɴhCsUGuǨ)J@.Ę"@q@}"7BVlk ֈ cߡ$8I7Q3iĢg>Gz;Kjnvd&-C*%oc0jܴk"tVDJ:>:4zՐ;#Yc6]p%])B;'K/gĬQwM'{M~[>Ve#úi?ha +\wr+Ns?Ï!3!u0FBtS[>1\Atsh;R&LCB*8e ;im4NdĴ>#岆H]*_s^YVƨ}:0{kR8v1bay^f sTyg1(XI`vgk.i5[9i BN@J'+B@yL$U.Y~n&SJok|~XgpNd9bY#Ќ}FTƠt@æ#,;>+Ig4> s4kPo.bC,7xPJUHΫDQXaWޕy.EǑ}gσ)UJZ3˺p/`=l ^A4udJXo+V63#v~9V0FS O>e"Z,] 񸘩Ǐ;|pm F6+Ņ0qO?yX[+!ENA$ 3dOSs4y4|~ș)YmU%N<e,O0 2jT6;GH;->2_^^xyyag|pI>N`3؊ãc1\5_yYy{meg kclLRs'??=_DœcJϔtub&`9HԆϘ?,H:ϝ ױV;#%|\6Z|;|˝ׯ_މK 0 s}0AI"q<3DR Ң6[}fgjoN4c_`h[}=9`/ IacƨIyݔ/3T#xeY%P}0Fe(vd/`Ug|3^웲=w;v8;gU5`X;VH3{#* BêEf!Mkݯj ^2^q ,D<),߄[%Dj w40n7UW PcBac ,]mpkDG͕ȘAbڛ8OIs[aŽ7r: Qq/cI O ^:2ʩ$9!ডclhm|q: X+[\"c [۬;UZE6{t*;i޵)h]@ZGp}hǫLξ?e$:.j=I5эsVwQ;x$)M%C@P1F֐Rc*IF8l5 P[+ӼHjN.P ~} yCN0yy,T|-STU{+:xӉJP뺃EytDUim֕!GP7`(K>1B84NeZSBK9MZ}BEc--'Z[ $Ub%q(n4!'+ZW0VY!m5uU2VÔ :G\%A @Ɣ`F1'ӕag@Zo n8cpizD4#ZWLr]#v|cQ`.6,tVU=SJ.n$o&F1fk/B?w೽cxGA. gCk'ab1e3-ц[Ǚ-b_o13 {3[/BS2x F&ok,jfCፓnHXwe6ve֍L"n7Nr:щZ `'NB, a$ʶFo+`-tr| 4E RčsގzO"&ocxn7FE#8z i^ry/&\+ vŒ3F6!Ĩ.pD^)U$,bCF+,*]q& VUp,i jـ ;ACz&V;+!p1LEBN_|E LM18ޕYpxx\YbH,@LlUJ7/wǟ~L8c5Jɢ(Xi. 8p!%aD)2Qny*މqL i|(/ ]j֚X`z+Vo^J U;V~wx'$m .bR ަJkZ`a?]uW6yY).7yg t[IΠiCks>pIUZzǺiȭк׉^fGqf0 W$[%/F/yYICmKWm<g,Idˁ5A@BF7¼>P[&n 4ef^V#o`e x4cJԜqba+{\'%1OTƐΙaqN+Isgv?q瑴5gQuDC VL>o8')g}x>WݎJ%gjKb$(14ZUQ, R  #w{^+UJzb`Mw/{giܯJ{bѭ b) Ҙ&Gͅ_o -5JlRX.>1*A|byJ=NyRl.-QR8Y=tgqr58˼,Ԝ(q[BT?D>%el"cA SRSF!F:2qqMc`w 7pnȞ:seU6|(6d a b,NVrf)dmuj*= h=PہcFb*x{]\ BkKTOU(wHR9]$|dK&n,^kCW`#DQ'YiU|׵=%6B2+5׿s3Ŵ\^:[gv0UVJs hœhPT/T5A O h(`Ut&1^*pƳ̷ d]B|[14gtE:s*4'S>6!xqq4:hx p,!|x>-WK؜9CKŋ|LUXs~_ "U<]T\f b6@sjacR I@_j&'!HCcbڴ,Y7 hFei ZqV)Y?%ЊW[, *hWVA{y.^wۍo~OT,)5U@2{/a,/zX(pl&*Ѹ(yDNU7 IDAT jZBk׳ UDuTfGH %gy`%%c?%w{f#x${LY ieQ ^c$Q}{<A/36~WC~s3¾Gf\h`d)wa`ք03L˃.V4R<d%gvp~7*⍗LivJ+<^Zk C މ7e]C D:޾~WmCBc|zv6ߦi.X9Qjfs86Hgau>((r_8xrN?|˗; c3-TO#^wQZH kg K$ꫦjQ{Al,JBdMTjL8ɵQSV GFji+C/^~l8z@߰f?cR)]#dPQH@<^_#<abH(x9o톃>6m$wBJZ;`SZSƯʺߩ7"!PܮM+Q19ǐjFrYVbLBo*W/Rc?)#SɦZ ) q`N鲀g$ [S0xcFD;mt19g>}$6"YXmߙX|Eo-Ӽ's\[g`k` X'ۺoY} < %%Z+@78bˢ,qp ~w f8h\EC~Ʀ6@RsF=ŹyZXQ¢HNNRyy9;1 OYw]+߆i^ R6`Y4Y$<âcHt|*`xƹq ǡe8;\f88ۿ[`8?e;׫k,\7XK{g^14MԬuçK8ZJX'2>71řep(;@R %Xf%{#(l7%ӊ4Imf:;)W"M1S;5L)+YBoEDZ?ejcK0eӾ 9}Up|*L],EiϐUaP/ESJJF.mCm\'zo)2*ӎh21z^?2-O+> T- HAا%9#9C=J=@ 8M VK<'6<#Jə&8{G:Vrڙ_/L<,>ʬ3KT*T= !p\7VKBW2Qg`ly*Mq9[kO`T6AU.ew7:$I‹8Ay_G#@ٶmcu;e~bx_lO#* iyVmXNQ% ܻ0'"jg3!%ATgk28j3Qft]Gck\3 SPֺr}c Ӵk-ez=8j+`im41kZ*cԮ7JA:6QnMpd48^^>#(q+zC֮ć(i#ƀ"S- !dқv{g l-ANI۝O4]+ZI1\{gW3ygOIr$k(XrY06}$Dʹ8瘗mka"ƅ)^⼥!\.Wr҇uԚc@8xutdqްDCbA%|8{bІkԖX8b ӉQ2ґrlƀ©5֞9#ɤ- !L-rǫGVFJnU ׹ﰭSxҷ\VѺeL7xx4Sَn }GMY]k}U@X߰Fr()e| DonyF@mc}{XG ]BiHx#Z2+tteyl745i-yG9gzC5nY}^E~kz(*>YlKyG#J(ʼ~&GIdit}O Ofjf]'nXp(F^2ISڶ'+#ZPNc ֏Syx#Rmn5P 2鲚`(;ΞSj oj'6Jm>:0$,#sR_~@:rjSUg{c]tcYWr)~-$k$vE<GRO*e#!(BT0yb6^k1j!NS3RE-)o@rz^O!dq(pY0^WO@<5LIy,q/=tYzvY-P12r/$>p$>|M6. %⃌DjdM:+l`01< #}`"2΋Y깛4Z@m9i*rrТ k ۶IA ,Iz*O|*ze^煔 s {F8ɶa WyO#,lVxnYyR޹3rŠ.<Ϣqzް+AǞ1u[I9Sr!8w FS ,PjaBrq'~ `-^Waij*1B3^qᜇ9@t]qLa5͑ecɭx6ʾ+={?_1M^VYNB=]>\g)"ؓe{ml襝6y9kOo&&? JT)18/~^>@=ɑh^R:X.  &^W cTj=~޸^.X/;Y.J#dfN;!4Ii4\Z˗/j9"j&N¡v,3qYy {:_fOPYY8 @]c# ~W~Ss UJ¤^1 V{yye'mFՃ Y"w}4vm eu=?J]rHswcӧO#3|C|&4r*BNq^ةZ% TqYf DC_Jn9Ubgp^N1u!JŏtwY/]s)/|-lV3NYױe\ A2AHZ#+nenA<'"dio;ח+]`IE‚,Ӆ\D,)yS0ΧOn¢r$!aY?E^^fmLmqdJ]X`n'i>-}1Au}%+=z5 j:QhPJJomzZ]H>1ԓ{d-iތs;vjsueUa$JSb$[|Ue(t퍔3{ϻ*,Q5Sj"'9kGGE4Reۻd)iإޟ3M (5׃Z*wsbis$Xi|˕9䇥4/ i#FТݥXv /4D9t{ 8늨K2ݐS".vG D eqhA0.ݽDgkjEz38$0zyZPl*`QLo(vNʸi:zEn Ɉ@E\ yJN Tol I^!Ϯ<o̪?rz΁z=/-@*-|L|xH㪣_2ƈt'C6_fQ0ϿޡWc'$2 qz jk0=]~(>ܣmǦa"`kMJ_K[c B[M !Z_MM¬;wIj^UPry]%Np\.#ްWN-Hlmk%ƅZsvߎƑ3 lwY;^I< {u r9α%`]^wN@i%PX9 |&~pzR'sjQ2 8tAAYK&*K8\>CV ԧdg0C!kbuXwa ]~M$s%WC27`)H/@ۈc9x0&olR>$@tX.WZmb5Dr2DXHY@ڛ3h/azZ+rtK{v~r+c=NΛ(P,iC]2bT*Asxl1/c!>^Z?EIS%$EkCMlRIE cL.Z>"j"ǡ 齋nLĴ,h]|/֝y^pnƅ =.JTZ?bt .jӥI\.lfOxxxRx{p#pr-X"'+ ]޻'{+C}Ǻ7v5ұSr&mZI8HhC<2+ygΰUl^g.Q~?|ǃy ˍc%\*9ZbVNHT\HZ4T og)M샍޴ʑy0lj-{Vy>-mgA؀NtJm[v`wXhxȳ f?Xt jMPN*s(.?>jP\2ӴZ_0 +*_;ﱽn9-rwvzE`;tp32a}ڨYIjC6֜O.0|yi,ayZ4rmDPd=+ۺ2{eKq>rt㭣p.XyfX3c,X6N|kX 8ϼ [HVYo7Z}]t%q^;&rIjcdLjx{S8V0;6G>K8 b<騸%ULE'!AdʱK˕j i[(!&4pRӕ <7l;[Ic؇ `ث{b_oa+ ĈRx #9t5}No9jG# A׵TjO}e_7ǃ4 ? I>0 bҔ,8OX קIVYz&bXi +ΰpYrƄ1 \2QsoҺ rZ^./zV~cR9J^,SgFR68-J8s%HnO|k,Bm 91Xt4pN4TNq8[IR+޹؉Q)^(M% ɦċ8ZfqmӪU+s!X֊YKi m,%Q ~lgm64 Q~ԶTq$*a[5i.dc`F9[#ܳq a͑zHӼ,rĐ+9b"Lv (O5FLGԯ jv #Ժ6ժdNӏ)?g5 \ yь{^~`~Cap{㟧G_6c G3xV&a5{N6_kQ,ڈ5a`4U`7 R.WQ5N֞MIWҌt,hdvd1M:t~.I 0L$p&%XUk9L^a86e@HZ "V:#0If,!Q vQ[!"C=|+# IDAT;ǝZ*߽(dKT1$+]I*Qh_1)Lvyxb i ?Tz=؅¼gv)3CLWWs΃[=Kz̳𗪀~D^__?69rY.ć%`]W'+ooo怵l#;2q0/ ʳl`acژ9 "D&cb۶66A_.}?!9<9^lR8x}}.LeTHEdvI tbO>ǥU9*CjzzGkx*c0/[)XD01Ϻ[&ְ!2F!<`!.)s4M] M:$!(f`~hvc?yO/C:vaygq!׫H)2o|`"tWm8sn7~l31UW8O'.s_JiдRxN B&0S:qC4x|R7kܰ1 c ܍Q^'Ӣx"%D-ϯAJu>%,@޷Ccس9=C!3U`2=̉e޲r0+Ǿ {"#8 q) u58<5wı ))+O2ybX.W颇2$2\^^>^^kRwyJi<֝~xƓs9mF*DSk)]OK2}mp$9|0aMi[JQ.///2)Ad#c}7QE"~ˍ2X WXZ:ybϟo=_~e.mw' XURKPg)%̃]jyp'֠[|] ~Fc,~pv@A^hꛪ@x:ﻪd d;N3iK5! 5j5dG"Qje^fܾQo?BiԪ>z3qg]G\_)rn\fuV7{Q8")GnɊ< !C-5ZTvSy/+,Տu aӌe kUe-ac(V6Es L8U R:h8ϸIDxۺ8Kv j3œ0#H}WkW[BԎ1D3x7-^y<6 JO.M$,~dr cٚQQ.3F$Oʱ%Bz%86x5kx.aJj_m4ƢC7n V(攻zazciv`epzr=mwȐrto4#uh|(&n6 XBT !IBB;/T`'jbU+y*FMsiv~Tf@ %߸ fO \t18lw* A|kJSqgH^[Չc1(E]%0GgfHhʤ߭usl`<' ݻ2SKw !v뺞_rJ"1p$I=5s @CVLqXULӌOAН2`M\hj0\/y9 q4-ɹO8i!59"!+桾^A1|A9TR; !,k5D'Dze"3X4b{m1'x>z]ο86C}`KYQ]ǭ5謏Hzu~8C%??x</vz?<0ZK>ךYֵ8˭8GBu~rg 7âkܳt#wF~?3U?iݺGe?DBʢ=Sx ۶XRҰܷ YÏjtfk=Oe=̿\1 6"zΜ% j8%~׃:󢡲LE%T84##r)%5Q{'0[J~v=_CߘB B.t3OSeQ uKM=_.8(`hкӫcYS7?݃]bli( 3^ cLGJ%j rX/b4#~W"F17G1b!ˢ#QJAP' 2SxoV:S% HHeMR?{Z ;Н%Ha:0ntҁ|7B@b:j (;WmNOSveT4M2=bamfgQKׅ( 216M3!E;)%i̼̾,&IYض5;뺞E`B @RZRX+iϧga E-64~(05XbyNr; A=%cZ_ 4@U')B)PRJ -n:d$--`[b[`w@qdۜV6Y`2@N&ld'K1FۥKX x$8M;GNu;sZ(Sa~g͡PLy\-U+Xi^h][/( غVMl=5 5O `|py==JCUzc S=/WHcZgET ucd (ae&מX%Ft>.e|,v$Jrlzڤ t[ZG- t^^d1V KP_l ˋΎm̓u]Zwq\wt%./g.DNfɀʞ2.\ӎ1@:cqx6\{3$??ÍO׉,47.`r}ժZsA, z*F Q )S5VƩ4Z%=МqzWNygH85}<-FjMʹn&5fb5+(fm*HV2uJP5yb]VĈv,/e!Z:X [+4+m2Z;-1b`>F_߾HcI,|웾ӫP ۍ^E!&V2rduX'>Ɛ!6XU3e`] Ήn[a+VYYêzeX*6)Zrao{dҾҐ]ĶzD}L+颣]F^Xy i']EZ'?sKk*1>lRJB !tīƶn%`ēx`=KVV ;v\u}?0)EcMm6bq;Fˆ3[p1L#q_43Q+I +洏3yumdAxF8M'Jړib]7.ruSy6t_LM!W(:bGS_s#qts 4~{Oe͟]E[RF>?HG+;}SPo+?Zu2 XtMt&DMX zq+KUFj)phf6eߐtrO\WHEA$f3%ᥠ5h5gJNn n0]{;X'^h Q1ca4YrPV7&@`ic"9GњnUm?`HА ֢n0gk,֍ ʪsI#6ptN¹D8x_k,w8!a3LqfXM e90]̫QcRěi=` lE %}tWzeY4ք1sKR:?Z*6  p1i6V`Sr^s\ElXˮ>޷]X~]fUc;) t l8-)g;_|ae4Oc6˲ V\3F;e-b<}Gse|SOB1M*tY.\^?2 76ici:ע1di5<v4.cwu=7E؏*><(JHb+Ѻht1|؎qDZ[~۸wO?y< }{/x;͓>İVxZ̟"8DI<]ՉC.Jr/#qx~G,U {ؑJc8Rf%?N ɨnK%ֈJNSƴL|,aK2֯Z$hs<Ѱ0bp#a]\&)(~u$KL>!dưo2KҮ͗9(٠sg fϠIc{qLY'G|)Vfe*9@,B%v;JDQ  hP֙q{|Ɨ֑8@pBX%8ܠݮAŢӉ]rB|˕eV E>H2zuc[4 {eXU. 0_{뭜-HIv;=W8y? ֟~v*f N6<%~_-d%z뤍;Bt֬rEݍA?חWek`9 3nz M<%l 6ZDYIk B,Q7۱ӇMOk`Ʈ,3ڤo,g߷;󆉁/ZJz1]Fq#bXd˗9vǾ?yo.ٿ0xBR)vz&N IDAT[&p%I6rХҭ40HoVZ XN0!i]?~nvV$l/~ވQ5h8oEntWZwF#J2iX+f:z]SB4[XO@OԖGYfҙu,Ecg O' Y1wL\ v|ifߓtWtQiO?}2`ٕZ[HX*Zʡ3n3 mΎLo$3fCHa5|]ɺt`]%sJaYW2kźʀ`OR Zac șWa_ Ձhi>Zk5Ie`tr6VrX m4%kF:N߾ؖymkX˺у^ ȓjúm;Օu#EK;=nSJFEJPJ2~oO0jk]<ۛ]-mdAԭa۶)g2է IR&Af]$nzz&4\gJkcZ)R"S5`Yو!lLV‹XǦY} T"`.w{ 14#qwI8\haY%Ck%̞rF\{۶q ΃A0n|J@W5 q8P_~ly9Tgu4aeB>Ig3ae2yd$j WaLG۶/JFĈqowJ*Kw+ >ho i )a5m^К Ns +{'Xn#r׵ aM Lֈ< g\5p*L鰭!X6y秏7ֹ+q o k-!ZZ E}FJ)/ncxyqY avLq}6a]Qj1Ud?fmMDHV cI~C=: &Ҙidʠ+ :, :'_#J˷PjOqxgO?a_nT -aqPVAc|XTjk龾B@LrrhDcsU#(|~~~dްo+#k } TZЕAuᗀ7 mmc%%t EԪBi3Mh>Sʨ. 8ۍ+ txܿFxsaudZ>ΑD : ΃a쭡et5y[PuJXYMe<p0:+Mƽ1˲CAMIm:,B97G8qAg|3kߡ}?E0ޣWl5J^ͿZ_yph"7 ^@Lٜ0bS3`VF2J γ00{0~KVr0BXOF\+Uj/IX&w"@yOu$ a ;eFm@+xx%4ޯ @!^GZ:zAX`:'+,єUfFY ]Q{2֭L#YJbRZDZ;XC86߱n RsTOڠ"wVqR<;qxtq` '`7NªMPZu 1PpaAXvhboxCK,;+#=Ng5jjU 6aBN'c{{G*ed6޽fRz>hvY6&5 ΁2TxAmQjDS*h |)oX'8J>Ą 4"xVV!u(j=7mCVk, %U"kAS!x Lr4jB﵁fvWVk'ҳCMunTUJw7o$ :oq-SbN\MX3I~\.H# ڀހ Gޯ5Zn+EI ȕA}8<8IȈ$kN26NYr„so9\|]7s~f/- =)8@G@>w8WA>'\?-z,c aYu u an@u-@2Au7¢2e)'￰9IrI(hz؃A0/Mha'~m ch (02^2ia4oBȎx"r!(ϕnkE~٫8DGմH5I"v |<`:M& F6Wg bcEٮ kT ԙ+"^Q5iH0-ְX6R!Ee,u]xS7>OpdNW.*&Z^|O{q_ׅ2r{$klO`_:xe{ T0u4yl~}HZgycqZOEZ{y_Q1h!gZGMX'z=\A,ա׿ګ:“oL{^!?ؐ2eJ)d#!h~z`.Um, 5MvXOyޟ2 "[۷o߶֊%6\c><[*7|_-Ґ@}u>ڛ5p- cX5xQו0rU+" :Ho#^ERBn \" O8o?[Q^1۶3zm sU'6)]T KBe|ׄ8:"3kz "zZYo9 -燖A-s@띇tel@WrX̂n-)`5쫕)ѓ\2h56cJTd^/w#vaGA1l LeZYk8Tj Te%heD#%h"mC[hȶc`ftaiܱf NG8}G*b+:cr!3wY鿔SFk轢kTAgI, / Ij}VUi1dL0qdSsͽ_V snoSJH`O>X4KOM%kJ`hx!/ JpEzf#=(^e| U$uJ)σ &T e_hb,. u[u`.% Ч CнU0LU": \G)}@ݹus^ӯR fYX3&<9W81|u=~uh9 rq#ܘh#6V Kfc5P*j(`۷gXz&^''0sFN-ضmFmZ4yc,2yt)La֍ywI^kuis A.x8+m'0%mó^sYJA~YVlR_y;b`4-(9nވ6@X52a#eWhx׌Bn()SV; 4Zy9/7 13 ]apg))V8d/01Efhgѓ 5 ĦBn~ee]K !8SD(81?(&ZqZxP;Cz 4Q9$VMv4eRmPpìdq,]iuDiW GED rM+wd/ˊ Jq@#i">+P;,:Rj4.j:e 17t$ƈxEht]) By>zn83g|_k=ڇR9it'C&>>IƟ?[&5]¨{R/cR@ $?ko#Ezi2ڸŚŒ-m7JJ%ߙB:؀`(o:eSiϛ\庴JlNmDlmZBqbZZc$T,Ci@CÇ?!S:= 2 йBi ŇE5/%#NC-*ߛ-qh3`c7J\qBG!9E\``$ `#> )ࠧ]FPhYN/cp#[LPJAd)uMXT6"npR AR V{(gkOb- :Za;ǩV# ohu0N5T ;VOFpDuHlo2_DZse4٣UZAP2dO {/uJ!G`xݶiّs>}u9lM bYYw 9J)NS=m!^)̰9!O+cG 5 ܛ g!d=l DK d攐`]wxRkM`'M(87Xi!H!MX;! | [04J&E?z5sY,lS W J*&]fH-#t\{kPEu=R2׶k}=kv` _~ci3$qqC;+lR}>BËÞ?k#LR7'Q 3MOqύ:"ޔEֺG)u:Dͽ ;}$3˲{!=,Bt @F)lj;=6}4C0c 3&\s2.AM롦3%wPA5.uQ2=5;eTq(ް.|Vӳ1g}/4U)d2tK 0d|GͽD)EeYlۊwHO@ƶXm[6^Xg*,}BzQk#!{Ɠ9,9<ƘqfbFn7:#czKGWFLRHtϕ~²:OQq``f?v_U^CPK_> ?DHp13jK!Mu44ސ+p#&\)N 4#rMH [ђQYZ^fNy_cL5 5 Zϴ2VW(^(چ2i*$Й!C$m-ZXO?e40yPH>_"?{)Q! ·U F#`ٝh1KB²PHWu|9Zdzz;0}O2'M/h9k#vAkeC2XV‡<֊}ʹJi߱&lrn+`#;f,gZ-FòbcY;aFp|Xm)^5!g( Ji8;eŲlXmֈ wa -k-h%V XWd˶Of3Z z~+Zcz IDATm4h[{xВ9Z9ԕ 4% cً$2 ܢVQMe:PAKjM2Aۧ8mIڐNA]we^S™"R{ţe$=";joϢM =!i`അ״u+Lpo na!e4wm%Y3;b3RF{YgŶd؎g!Gў<^ W1* R)u8ọM?Y/2{Do|{E+֞"ciNR-M6lмkfLd[@f,TH5 8F ~FQ;z#+ڰ`(R "4.Yzs!r$R vܢRؕ3;z[+c20& OR`5lwE5ej:Vѻq?Q =k(a"@#%OޱYNu/rxp ecfh9"u]3|& D&زf@"=ZϦ6M9@]O km6C *C[4uICpO >RZ+ a*aJ Tt'4doض vgĶm$a '|K+wOm, ;x/()YZK۾C-)#jqVzsq5he'[{]WI?</a8pܡ5m4e\u?mv5<:>?x(`S[R W& 8e ht ٔ1Ed$t<%WaQAAwgV%]Ib5(i&MnG':F0'[ RNP#l+Ra񤴖F뾑aJ_UZ[O\6ZˇؘJaǔcO#},1}ϱ -(X -yzLʰZ+}%Pe4ϘҪ+FNv.)餯dod*4uV#Ph226Pmw: ;eAU(x/<22JŶ0Q{`~`MkKVuoUT+9mòm R [prV!`VXY /۷om&K-lx=SNC%*? ^iև/J!ލa#\i,qv gu 8'RK ¤L߈kFBO!kEX#ы{մh?cbJO_p^_8Ʋp ZCsSǰJseVw J]1Ӛh'(5(!X]dK":k*.ǘ8v>O#j_'egx4YPaa,\򬩇lԫ:B @VK` _VnJT; ΉJx@[+^2"VJ}$%_ o3U4c[kZT^ 搀k)&NKuq$KT3('q 5 #&wtAFmJ^j PBX.NxPr,Mw؜@\|jh}H8CCͰLL@vJw8CRLZP"ODZiG. ֑z2hs#JSS Sq(ЫКFfaN1H3 U;z2Zm,zk<7u tg;x0уABℱ>ٕshmp'Z w'̐86`IOiu`ACEgLPwƊ 4`FaɅ Do3Hd*~ pFmyccuMᩬ&f0Сr0"cJSBϠ:e0`L'fYUڨ4T|}݅JA >8 ib#tu,aE*ְ3y]NFk8`88pBX3AVrF @Nec0-~"mgj .un+Pp['p y̱>jFhͰPkG4`#--0c,X*L\)C9^|,AôQ &;x$֑.t1*ZZ 㘊;6`y"`6 v+V )% nMu51I ziN5uGu8(8bx6g314]P~24,:Fi! h$S5/DsbއO1ZJF˴Rۂ.!X٧(bqz`KϜ  0L=ZVk*ijoOkT .Tk*-p!b ]%7ͭ4ϔZTZd9ejaRD)P'y}-%PNǙ2LVL${xǞ" 5&JG6͢:UE1)en7`\!dx2b !zOhR !NJV +:9U\g^+R- Y74t|u 3ӷB ZGx=Wj CZu PʉuYm~ dkKb-mE {{q! ghI!g5NƜ V1Cxc'h3jQπ3~"ڻZL'q;Gy+1ajĶ9(8_t+:~Ϣ2Dpް.yhE( ,_-%XDk@a6܊u!-!ߚŠiRDkM;m/l`~1!ȹ#ǩW\;MKC0GIRgeG63O^I@roZTElJ{oߤOU!q<ǽ*t Ѥj3" ﺢX8#mnH%>V}[ ڈz>#1Z#W` 2(%#58k īk,z wJ0Z-u3E }:bZU6 *v$a>۱w) V[D0BnSnגz* 3JdZ)+Zm8 1Y5]:BxO dx7tPU}ZK .=*9dZ(I6vNŔbɂks'xui3#x9i\1@keK, O7Ǐo܏&&>q{ب+î; 9d{GR^+7 -|*v@#j@sy,xi)rM@ɽ蛖QFȢuXP,uELY ޾8l>8q 4zUgb`Xm i4ͩ[XI#PJst3hJ&;V  ]f.;jmWV ,2?X|Hî~2JNdc ra;d +ŘP+>>>& uϰ8P`[kSE hҠuEPa/q.ey2%x z{N #G ɘ1 P|);%Nz.)%[)5F~:8hk9o<xOhSA7 땓U׮B~ƞ}|}kͦzYVX/@6ue(u 0F7٭xJmShdn7X%f2ZSZ#UJ?&TdX`2A1y Ka#ZJl yOT >=W H@!vE]4܃Rcmь8k+J#ߠ$P֊\E*kg p=@|>u>ng :a[y0꼗kQ+퍼X$c  ضmຮi34DV m#uf* :w6R'0;T)%T=u/*@²UjⷲtJJ3!:K{ OIJs2k@Z:X]:e y<7">ΦS2E,?ϭd*ɦ9y|ݡۍ=YpiP"q "mڈ U r~W7Pq?xQM{ *t;mIxqGMBl~jeoY7Z) D~eػsdsؤ,pJH)x NFVŭX g,qZ]Mz' k&@ 0uE;jLSFuC?"LG<ZjMu2;[>j&c3%8l[@-,7(coyL1c`OCMbs?>U6z9#Œ (djEX5:`UǛ?u1HmSz ưqg+Jieq&պJfi ,sIDATXX{CHԬkZN{B[e=6+of`j*.a5uYKApVsԆj^=}hh @P͡ZNSASG P{fP(ڐq=H dm_ܑsm29I!]. 781eX[X# fWS.JǞP WdUZ4uH)qTJI)ɇj*)sn61V"ж-cl\j(LDDcᚅ45MBk8v]7MS۶ZR)VkcZs·afBYf8r#?XUr$#!ޞsZsιq,W+\1FkR"q1z}æi{\@DUUYkx?\U4M9'sq/1Ɣ{4Mqcj*0JqqGu]O9WJ9.)%膑59kc8oX,Vq-il&h)cÀ!pn䜕R0pc9 {_7 bKMxpp^Pi d `|~0u8R`R54XUBH)qαwָ4M,{AiihBsxUU^tn3 M1s1XƘzٴmk&9֦9(F]mێHRJl:90Ru)AFZ0e)c織{\2ضmJcqaY.F4Xǜ4MzB>`VUu9g9cs)`]v ؃)%c r!c4ݭ4 j b GYkadc_9;paki˥1b1°s xء~Nur\vb{{{0\;B̮aȜcJub1Ơ0 H)1mNa>Q]ڮeygql( =1†u}$ !`bJq۶].J)l gvݰ0bLRj&S۶00H)몪alVcsc֫g]SLkeq.)tv;獮?*!Ĕ1)gCU1n-6!zRLu``j-ԮZ!dN#圪hrs19<:F<:RRJZ4!JU1D4NJ~+ҁ6sL&Ʊkmd'y4)1"xFBʘuVJcʙf=}]79^s^֒ 8lIp>Q:8Btκe6}m*-36b?'č2yZ .ڙ#&1Wk2aDR90S]ՔH+->d)g%Yh-`*mrL,gheLl61nZJR>hebH{abmѹL,̅J4`֎Dl6bo&J+ qZ)%%o9X,` 2(RJ)ED ^,bBjqqꪆQR|cf͞`"dTmptʼn{7 FJY0Y)e\UU+]׭V+=)-}pRcα4QsJILi~0N)FsS+sJ1PNTu]iw@8EJ sAJLѺ10N=PRsgrNIJsuG@[iZ0SA)Ar [k' WF0笍sfpS9 "1.B3b68qb 1s1)S!6jR)cJ)q!23Ap܀n{_U8Q$RJ)6Di[0l!8eJm딂1iL*#Qcv2)E"sΈ2,9KYLJCL9 1q!]6J+k@pZ].Υ=vSYe ^WfGFYJ e]]W)DqA[盶s>Lu֫VZIbRRr$#MkfnZ4>D)eB̉B2˙9Qvq)UuUsc{gb7wnjhe) gNmR)~BRE9oL|̙Ty*e:sηM-gD{њ3RRXӾUeB2\Hew>|!u6N99ڮa{rN36cdr06UM)G9Q$1Ɖ1.D&)UUm6(E) R)X⬪kbL+%r$8|UU9beR`$s0 qj&@>qR)SU7eQKיlƶkRL1FH8w cFIÂ9)"@4M0 (DHQbYX]d?A.lzXIv1"is]`p]7! vdr4mۡq?`}ߴ)gx'"%缪*"Z5J>()9cRgRI) .r0i >T0bRHF[.hf(4FN§~J{@Q0+0iv'8i,.1R#;8笵D'4 f!apisRa>o6ap1s63$i(~L!S͆aZ xza|!!B #|c=#τSlp ka,  ʆZ U,l7c|ZkmP{R*4M,!?ϕRX}"B]@MجfZ\(!Dt&R6<%bBH)Ӫ8xIom];XBLJi΅jCJYcBcdK)m6qÖ˙r.=(1 z 6iN |1f8XVX b2IqbkmF$e+CBHx kv>ù bX"}pC朋aZ狾&bR*lƸz|3RDD =C'S!m!qMA AgBBiɦ۶ !NVLs!@Qa:<<,1TUS)NvJ9eJbd!#SrvrA8"RBc`3VĘu vm? Yddݦ|1%T 1Y՘{(i`lE3s7u[UwA 5=.11cq30y8<1&hdVJiA%lpŔs1F*b]s)%bH)#ΘT2J !\JctLQ ٬MezBRD{8N#T&1dʔI)ej{xS/3Srec` n1jm/Ժii'U N,4-H`tsQD1B机@*MLӄlɭUf( d>K)1;@hsZ@%M @SoS9D` f.^ 5FnM0DBwKiXH) M, x~!6iD8r .KXcUUAJ)fnDDm *3XBV4MAL)aB~C;x,G4ss#JY+\>$v(5)ʍ#Fsw`4 ,kB`p: B_aq?]U瑥j&xݲD1&`۶]VY@v` 0 9mu vgI)ŘBS86,K)I)vxNb !a0Ɣ< Q n+cbpaIp(|@YJ /%R$Fk-AAi:![D5P{@ڡHd|pC##@Xt@VM۶%usiw݉n,`8),1A,AK$.9de1Ɯu]CvArJ)-K)%0n@DpZz  V lqCPfdx@Z!`GqkI#1-0ZilnqF}䘐H)iMBmJήE0ªĔJ]¢h]9码XYDhR*yu fchfusg1&Ђ Bv{8ͭyܵnQDZsD ι}9D釮m6Z)dn6cbZ7]J\]U[Vֱq &GF-D){c Y2@Q]R0*BoK3+3c ImSiqazBi R*$Rΰkecnr{{{zM)ic ހ"e^}0@_9ϟ߇[s6D=j5MbnG9$.@O۶ba oGGGs8aEUUW/[/p?k % O gX4Bf6-KKݖ6$Y{/LH!v]$iG.s%F1SFM 55mCE%G{,8Gւ qh2RJk'SJ(* 0 䜵9pppb雺EXM.dI)뺆Eԁsm[T!*Bp. X#(`R o3ݦIڶǩf1 S9̹R1A!`tňǐbL.SJ !X2că!D ߪ9S)&;%q$"O#X¦q*[*Հqa4`qR 2C}JEJ9Ĺnv9uFԩS7܀{,[!BlSӴ0VkcSv$4Ak-V00HA@mYOlp)+,AR#| ,ckDt ;xO< {Ñ(b4q0It{c] 5 uQaV̦ M i[2 !UIٶ?q$HN е 89ld9Te8L뺶YPq,}UB08qZQޕ3I!WU40 {.fJWu=}L:"&`SJRH{nC;Rrc/irǘBHhmB8"-X1ƺ[.9gxL9'Tmu ں뮻J`<8/V NL \()BxRE>4mTcZ)oQSRYۡи@v`MޛĔ|!F2m)P( ЪRX|T|GlB9Ar6t;\^@>;KH7{ ׼7/R ˸袋S@ £}"eC̃.Jh=(Q&-K|Zplu3E8@s5MD[ʰ8cȪ&`R_ tXZ ? R"dqP[)*І *\R((#R) 8MmNgĹVC,.HГaCaO) eOQ@䜝 ۶K)2 IY bFutq/XW0D RCP݂" Z,d( nm:$H!:rFNFC#SI a-aBq镬R*0RG)bEb^^,ذcYh0qK g i,$\3q ڑs"J:n!y 'R}Ńbbo68meym ceqR[3йTBn ul2-!S14h94ݣ.bG ͐f3lUbM&Ι];4Mh1Fp{o!ֻ J1/:Ɣbnڲb98qb<:uTA7`96j^ʄCHgϝ͔I1cMӦO蘓P2d"Ƥ˺ilO}m,W+shgf+󦪃\Hb\:SK $t,Es8-+,V>ouHut f)߁wfa Ft>kKp)%ƩJ9mlt?2xh(aKy|ҥ-n4'Ǧ3Fo2C6RyFri)̂:J(ZsB,jk)]ʥd[x[ ~Śa3R!scq ` Ѳf9R,|-hE,s|[?,n9ǹ@Vk)EZ :-ҝ,.[k/NEJjp*6" ZW5XID 5g^ IDAT)LsC@Wy1\ȧXUAc9gd9D7UЁwM-D ˜D8 R"l6xiS8\7)wOyͰmK|ޏ4 쌐M40 [F z|S7N,纩)E)AJq"Q9nڋqZi4|ǻe*ClĈrPRf@|O<+4K`8P,c]#%cVKs!A(71U _8XʢFaSJbvKI=n P>xhToMm-`1Y=k۶us+gxX@7唤mj~B Χq+J q J άI !&2y>| V6`A)%c0R*d R鰳0.Aǫ5и4N]F9%%dLrLfb?t1UZ 7C;pmcp*%Op[wa6/m{Ƙrb&8 ` Vp*0\۴{{{W"r%(׈1?m;4 D ZsیXL6v[m*9` .|JIpR=A5a#P UBUp&"p> È4D|pORn[   4BJ%gR5J)%4\,{%ZH*%!.8z}eZ188vBH) ;|IvhЛRN)SfaSyXQ{,MNb~Sڪ2U'LUY1>$dU($"ؑ2H)bbġJNΘ b 1ŔCLcaL١02U]ǔ&k41·qD!N;TLnyNyRRuӜ?RCYΜq29QJA>NwV>hc1SR0ƔV,*rJsxܗ_i'W2 .b I.8ce*-{vp4aWP1xrRR =Z vf$6T3}4RȘ->$h̙꺉1e"SWbJ>be=2Q$ʌ s )g8CS0];SZs!!DZSJa!Xɞ5#K p6!tR*a gJet]^aq]/ &lbW1 kۓH1 !~!RǐbDԵq䌝88|)S&8sJaLUc!Ll.:Shvru&s[)ske#16hPF"]lZP9%Fg xy@]MS6g31KYJJy()au2Z/k!tL(K3E-XJ9pA)r(LQ*.MS9dm&ZYb(EBDYH452 l`k㨔$Y!8cVJgm])y(Ɖ(5M٬@ɉ,j*s6ƐRPˆ]7kb !xJQJA2$ g`jlZ)^8g3qSFeUSR",礔ļHLRİk89pY*Ku]Bo[7FiaH%,t7k2Ec Ise.i] n{!akl40@J)g-l1LTjbFmd]u>zI9 )s־?(/a-^W !czr7`{ J nmDgW)ʨ1F ߰lK.NJ]{A#ҊVhLzrMxT_L! 1 9&NiuUϙ${&R^pnBg{D#e^ft~IyĔf4}-#> 䉠 :8qD͕NNB!b67kDDl/QKNJIpY"W2Jx\bhYJti\/mYXYw3.8zF7VRYKK,f 8<7cU3!ΉQJ;?yooq(jv1"3-J/ p)"9 yX SJ9ڠTT՚sQ֫>8"P^!xU&ʔ7}vbʌ DJ8)`ñjRJŸmG[m7#S&8$C?U-:k]VsQ;CQJTUř@I`&vw4s7rbcQ,a}gL .d;j7ǔQ01;Cf]ԕ#"S ιCTZLJU*C)wVJ4H Yxk%ryĈuD9c^WRʶi02K/R(R]9R"*9J1Pr= c~X Rt +Z\TiZۆ˻ [* һ xlJ+tiFN|>G8dJİq͸lu) *N$~24mi)71[ϪYߒ45J4vC8,X9q%}f0Ź0 X)rE0N0hT_-Rvpwjyw*hQJs|&sVPƋ qXj]8z,v|®5F~Ivc(iey(K\kd.\ P4)F`hFb *@/S0׀3c'K`O/y,"B6j"[4 m;"J)e@ QU*=,$ Yccq[Sl/& &eXk@R3HR-C}Yj P ,f$X{PʼHgW) Q$ηmfaW2#t ^&<@dK؃a DF會`vcl[SJCʑq" ŘwedKSf^8@%2q< 0y)hp^TCItl~6Np)pYWl{(,9VZdX0~(sqR ާ]}[ f)`cmCf߬rV}0<@l1l6[7h61^U&XB؛cVZ1Uq΅5$c̱N}yi'@ɡb1XΙ+sJfEa(P(E;hˈ"2 _1L} 3ea)Q,c$^P4#SyT~`J-ąV0±rۉ;1bʔ@P > ־@*T*Oe ~  ʽl05I(I;,3ʳ(jeʠ̒+!mľWa'gDP^Pic11|w[+U$+ʏ\!-}eV!&w<Ԏ&voo#K`Wpq^Lv4fz"!T _a~~TafJԈ19Kw0kaJQΤ) 5{ïH8'Q `hZJ)툶-K&>!ΰd86b[y1ԥ)LH1ύõY85Ll \;Z)3U ̊ۆ1)vAtÀPܥ\t/Rm=K@2%l<%.L+TAA밝~D H$.cl--9G >{!T^:@!ĪсQe5ːF(j- R<2[>}DeTcFr"z;T:rӊcBQ1-9+ι` q}j7*ל[H+4rUJ1F9kL%D=e&b 489%=Rx'i, )5M8I^^^^^^^^O~0m۞Eg9s}75yl?l[.KD%&8``޶X,6hI4w9~4h&?L~G3f?#!agΜI)ff_,1!:UjL)1 EHR Sq!ʳ~ڽ9*n!|1svH+OW?p۝oy_sC5o+g5/fn~fnfn|o0_f373_,RJeO?s\Vz;ьKbŤp>ng MƘ~Lv0vuӘj\DF2M]ſ9UO[ʏkyw<2%j+cտ>O-gt_:}z s;]"$C_SOsr_Qo>7?7KUWsӢ/̩}\}/o!7&>?]?DJDs狈gH뺮 h@N)୵w?]I!M;/ ~>?MdO_?l8{;Bgo|O›>]w~%7?)?~yٳKW>{ oi"b'_'.pmd3Y]t+{"曦ݙm飏_-LL^c_m|)_ᘿ +ĉ&g)e?'Ncs\)Fo}b@$0i;#o'+,HRLv0=/G(sJy(R/LBl x?)Nc$&Y\x/w:ȧ}k{;^qGx ^{9g_wӛG}ŗۮWϤ'=}1~9\_3?v~;9;䧾_zo?UJ/ Y{ƝxϞO?u柾h8wx/7~]ǼW>ǎ o} ]?O⛯o}o޼? 3Oٛ~?<}Ͻw>2F_ĸdϼ|z '\ϽgzYeTd./g>?{ozڋy緽hs>>?/[o2MM.o{?cd~O??O"g{{s7~+N)MSM[71J+cdGvkbDD'aʤsn\6MoFvN) C4,Qu芋Q#|}c"|49>l"zsno9#7꣟`;ΘX~w>[]o?O}Oře?/yOſ??wG:NNG󛧯N!׼kN뷽]1C=#.#,8ꦣM|^r71.oȜGcd;'??xHbqy}/uq>}/KW'3?O~?GH}*/ee[gF~g|y}'wgL &vz$oom>s-sʬ8+/'ǽp+^띑77wsѥ/kdO|^u>wm?~DuMړr~OnNψ%_zKkoƇ^?눮o":w?_ua]o=y7\,;>‡~W^7&2]O[o MO9\?}˯e"⋇o믹+¯3#;>tM|c_}ќ'b%/G}.[nH/k&/R \YܭeȤw8_r"L̻KMǯ_0.q䧺(&:wT_{~=fbܝ_O=\-7s\a]t_#_' !l6Ƹkq IDAT`l>;}.Q]vmW=z{fWL8qӟ|߿}WIo=7蟿17]y>T?9^t~kVͣ{svq_>~ᷞ'k.~>zg/>e4y5':+ݚo}\^Ov9FN_j<ccTSQobnޅvbǖ`ջ%x+soئd.܆8#bě{Σ.y-|͗F;o3?DG^~tڲG?3{G?;ΪϔSoۻ,Rb&1R5XIlQc1D.``mٽ..(yx:;9s=syygVZ袯uPAᗎ/\z{Tƀs溟ѦljWzҴ_[[;'N:g% Zz g 12Mg1lUsS_ͥI"o?I h9}hڵk\úu=|_{=3V=,[Կf͑c>{߮[2~x?>uRuBOkl]+zٟo=t_ 9RDK3VP0>Bqu̢$యx趙z^lgMo<6_jFJUo9/\Wo] 9gY”斊l>'Qh*}:#cܑE/[daJ|ًl~S>Dz>8D;ɿ8{϶}?}wBjљc=|y;7J-9,1Q9F/nk0FۛևhPv&xꍭ[Vo9{hʏ9n5bs%Zc;bZ6q gXD %~dI66:eކ3BHCC@!=E^.^uAFљc54(Iё`C||ܖY[?{'}5 uw-Wj\uyi6`?:"-6Q66vkoۆQ}iy @!zД2|c !l0{qM`}Qsxw3,/^I6t@! @rykGO%GkjtH˼?-;HkQMiy'^ݷRY",~k݃'|1N? ,t\Ꝧ-ˮ65j=UL5qӘB,l(4$5^{#Kr!-T>%v!{-[J _3bieˎ9o]S4]9q%=CpktO`M:Ϋ{WM `M:nbWvsK0#0v p.}5Va~o?[|&xoWQKn.mgBy4mN$ Ei>fT!1F3t) dRqMM( 0XV>vPcΆxx۫TH@8]pi:AU8)kHy;n~񖼻haÓho:l7' >@6;^y;~-+G{`O;Gupf$pVl_ `@X䟯^~k@r@+;;D{5Qe qvgIi#: ;$<֥*!i+kE"ڹc nQ(7t(Yc2.&!, j})}/t2 F ;9:6'_R8j|S]p>@!'Yw nsdB~EM .r>>qL|+98)h±9g",X^m͌5nӥ?狨>C7=YCO#:Cw,Ducw\3@y;o{֮ES4x[݉(u;poUoZ>l0&΂Ę5~º ;-~(nCyñw?Ù}HͼM4f 0}ڶe+DzX{{{III:ݮ)*p!@pX 猃f$F54hQ/?rp{o\a9ny%HɏJ̠o']lԿ[ßmYރ{fk)#u?zyCFhIŷ.:,BئΨcݼξ~pxڬPy|UuXVt5wޚ?Sc +9hEQ9Xs筹kX`ay: 4GϝYTbU3>?Fn MP>~m0Opb@YCBַu-1((& .ZY?7]ӫb+o~꜃s=Iƀ]^)*5IGԸ^9alЌ)3U{Ms.*5I3Q[Y vu%FTTvU,8/q G\1WT/#5w;*L8r2wvN/nSD|̡C7y;W󼆎v X6_{;5ߟ[V6˽zlI~tEtc`^OഊqƔCm[}.*ơ'OHx^;t/eI:{OAK%V5~ZעeQΎ6)*ڙƀGt+ʤO :ʡ鶝 txS..gVD76lhiV4cC۶dhh M} bVpӸJY-v]篝篝[ Aqo/r{oҳmO=i#_ M;ՀFsmS>|5B|%v֠y7ng⏯PF3Hiy]싗]zKkyG^jޠw(t.?gک;Y|m՞ *#o 0&Kˡ|^_V>~lIShAo6%Fưnҥ ~jS~$ZL-Csf'?{m s~gO`W{x0+d5"m|m6ӡ@ Uo_8[7j#?_/xyf!:o޼lf7iJD!q*nHz~On; S3YlGMu B{eC&/|}oky"wzbo6U3]=`7Wo; +zlgau5#(Rz'HNh/z㟹EIUWt SOu5'# ssQ{tf>}e_m)<D{,yr{2']3|k&|7zZQH*)0ɢFx2ejzUUyW+>7Mu]AQc̲,\1Fs#O~ǵqP^>q{vߝnZ0JA{y7V!x #!8B ;\X>:{ޡrY9wz*S EG DF͜zݾzlut* ƽְۯ^vϯ*wC/IUT/IUruY#{<{n֫YG 5aijaN^@/ U<޿'؟W}fmsx~[^qး(c΃cXq JJx{{)*B0 @Q`y^D7<APPB\㺪 !lc v Pіl·K}ġS;AѦVB0*O ԿCgUD{OiK)}c鲟_{.6]v՜ꯇDK?[ݝ+~'hRc6[m) |ߏF 28L4MES G!h̲s`1,K.rNEEE{{{"hoo%r\UEQuwxg%ǷqDZ-t/wAdT|D?^S3"T3{Q߷&n?ر?[܋Y'{M͈=FF~VjFjfo)*P]Q4>XQD1DBH$F3\SSH$bY!pcr{dHjC5*ѽ2b?T3bS3bl >$h/.gٝsx"Fxkkk$jRm"L:N XL&1BpΩ`O޷vy`0rHk[3,fvt2BBNri1Ms8ږzLjf6BvǮ_ؓܖhl`A7ҝcs}.c/= ~|ŧT3*r9UU)&r:)k6cs킂L&UX6eeYD<#(49}s=ϓ2ĕF 8`.)'۶`y݂,5}dV@k^G Y ms_hrb%qݳ5 HB}y8\+ Һw{_j׾:z_JUe/Y䏵uCf7ܣ!+X]v_F?b"`~/0SCOWfER5\ZZ꺮¶mӌR9$T&!yyѹ[teprHX[:뫑MlPYbe1HWvVN_} iѢS&K]UPwdSfT^f)'5m!L 3r}CFV`Aтa.Pr ,АUcVkJyŒcƏNx#};muYǗGY( f^bkS:(0~܈A'¾|spK[*^uۋe2do_Q1jDo#/*~nEO IDATL|7hɬo\y彵u-YEcah9[I^qolKw쵻ݵl!8|w4{<\}9~]/`j)ֵ-ZWfYI'̘x֦Krg0\eetZkyL>j֥ 6lk6nٺ =Nw.ZrsATe>[k#c>~ ӭϾⴟo7{Ӳw~{Ӳܺ=f3̭qAګ:k'?zجN:8Vؼd=Oq[p岡p(|`'׮mROSOO&ёUǜݳ޾X)pd" H* =>;s/~9}%[ٺN|Dlz^\45k̪kQ1 z0#L#s"Q#ke|bEI#?8D"!Hgn0_Eox"ksP;̤kƬ?*~vtwd1P-7<1oU۲SRuPByKP..x}G]_{k'jCǟ#tt:a͆mͩL}5kݨ0dov.?5D5V|@xnf++O䖗.yË{<1@Ƿ>N00s+G}ޞ]5w{+ݟvKo /{~'Ȃ_;nzzSl~VZ_clRs[rFx>nr4t螵K0ƌr 뺀u|ߏD"c[E<`[\\ͥ]M& ,Š\$ 0!0ĠAѨy|0zxx-[ؗں^¡:Xm!U#Tj-kH\p+Ӿnه{{Zle(y@_=V֯Kq:F-Z6&V[;ÄJq~ΟN9rR.\FklcS/_5iYؗ GhA+8/ Sm;)]e̓K=zyCN6Ky0T߃v{k%>lrrwQ("AQxjysò' :W Hz di8pr1I!#{+MPo`ScO'r0(tw\xJ:%.#OtMY(KX<ޯlʞkԨyv敋>pF kݫ@Zp!}5xںݷja}|*3T8jrf-KޯE8Y6xܸ?~E3׿ɗy/|୷=iD&52PLhV >;擿rHЈ֊|!CO:G΅?άW^Cͳ~åW[}e_v_˜=7q ~~qSվ27JyKw4#6h!g;u *g˒+yͽg;~o}Ag_03:fw~BBW\ ELR }1A1..*d2D]SA ,Mdȟ4b BA?3Ǎh"opV`K# }.H̤pZ&$EV_Ka{؏}?D^K~@e# B*D>r˟zC'Mtݎ21gRfd)]c J4BȲa1*`b0}ߏΘyE\.wf~æ#6bcuLHg&> Ϸ3’ϱWx'ڶ-rB u]y:80]lQEzPJ[L,U\NjnnF{p;JiNeԌcJrBB! HCc1X!EQPJ<ϣ!̘xZ*XF#HaUUf44MMd]{vR佀t!!!!!!1 I_=R9& ι3q$r5r2\\VUyB`L^& c:ɐZ9D04:4MsO&!0BHecYRaJ"***4 0r+f˘HDm'Pz) 90(+--;кp}mFF~&Iu=u] x<}JH4 |_TT,+"}mBD # !!!!!!!K>54M [W2jZQ߀R*O}ߗBLӌFmmmH%q\<G"iF]}C +r@K<&4M0M3q}ߏb.XDT` 0U0R`pMmۖt]%qóA "ܶmBpfe绮y4ȹ+ιsf'V}_ s^8s}g,녃sskq=NKç^?zVf?oiӟ|=6tZ:4||PUU4ĚB)mooTJFkιL9INBB\-gKaBif.db5?oz^s{rЛCjW_ CC)KاKq7|Kd8_o0+]XN{IO}W!!!!t:Ƞ0,`#ҒH$(ﻮkFt۶ǑAh }j&fL$Ш@<NAPJ?L|rf7&dC߸ MۖKt]}"'; Drv#گ<ZZZ5MB۶-DE6p,h_ey @?ۘK_xȼ\)b #AceZc:BF2s ]s)>N=J(__UmCp;V\N+d3ϗXD3{[?\v&I/|X9\n^|FiےE?\l(IUvSꚏ[Zkmh\Hmϙ1q5öQR'+t{wGehю~v M ".lRzv]OVFAʡe:ú>ʵfA&6,nVF_Ų|ҖqePV psj&s Q.wOo #a8Y {dOv ^zI Zrwxƨ!q/id]㳝ɧ۸յEndqkĠPd-ߒ[բ1cw&L!!!钒&M02\Rm8 % , % %A B0 =go IDAT@pY)e6oFC{0\G;SUW F@4ԓ d@DcԢ2w?kDClۿÃw;ke.,1;DŌgsny0g E| {gFi{ЮP:2qΌ?;|V6 +=)hv Jo"ZLCPQ=phu/W"UQ-b`P#cZ͇]`/[?g7EQM76n2coml#i[ѶsZqڎJ6۾+Q1!YVebk` 6^hFJ31!!!%h<y@p}/ hf2ߤiib=ϳ,b@sB>hB3bL\M~ȑ_-72i%reyE l2Qu)tUϱt53?ɗ^~ 'Hu;Eڈf0:v_"QQޛU.𐧍I=oqV_.WSxbzE'IQPigc+'' O3J_\M}1*OgAmKDIҜXB3wVRC9'=!#wIFO}EYaS+9o>EѐMgzgo Lq J۝:ub*+2=+1hy K\zǁQOեSK> {dtY÷T`-4\u\y0 2FiRIfdI_J\-M8HDi&d.ꈲ'xR)2lO0d{g^pAj*0_y 7ƌ|1{N5>rIqx_^i1F\AnhͶ>fV"QCBB0Kaa׊|𩧞;~RiH(J2bm۔R\-Lr80')lۖRD"!BGfڶٷYpfWpWo\J#j\t|ߘ+57Pw[wbr #KCBB8H\귭M.^yWuHGHu4FL0C\r2L.4M4˲8H5ifo2-ၥ I慉jO3N$xz+. @4R0 &۶c)gi9F 1ijdt]˸9犢ȅpoZFFL߿iuh4ɂI5 1&}v.3zw}6IX * ,AC>wPWeYTPU$$@ d!gھ?fwr'~Od]}TuS114r9cu9qcqLmQie}X,%5a1:@)5 .ぁ,0 ƚV4(B(B2)w)UB9/ZQK+݂n4Md6y;KH\,E;ݾEiԿ)#i_ sϼR ڧcꌺ X2o'qk-ͽ^b٪RJa !ebIA i4EQ8,SR:ʢZ*:a&/Me&u@th>P}_K/up8kjыcKc4ю݄J_]Zz1{֭mj28K&rux{/8m9|{ulE|唝pK?]·Ӟ%2fܿwh06z-e},bAH\f2!|;r]#]yy;93npƌ[%/=' 4Yd@v zrq>*MKQ\aKcy9+;? _,60u dfpԯK_\#ݽɢwv(VGi/q<;\PߟM?& =;ky7%yK:VUW]&XbH/0c1/߽GLO'RwXb qxzFP{ZUuqS_,k-wg{ZUlڻc|%z)'O+-@ZIwZFD|5 u[@9wf;7,5ί~\(+^?<v}ްmp R.\Z >D0f+w:uUG 6Ǭ.~tґG{~y(}nZUЊ11ITm}AblKt:Z~U~n>A;HFk- E|o{{tc:wﮗJ]VṞ֎}b0滮3f̨>BHjD1"q(B(Ic !D0BKQ!8J+0e'1FEQOw_c/–ƎZ!z^R? 5V{Hr[T"1vO@xVݎ]tڇ~!g~ B뽕@?_\O22yn= ]x!Ɓ1mP\Bm/PK s@-?gu;Vy4q>cbq\ᮝRǭvѼW&:p+O-[֮i[h}&ꀚ4c=~ң0X{486R3q6Ke˄XZ+7nڥʻnH= GKw%e-ZL]ɳZgLΘi',ƨ(rgJk-&SJY+%MIBqWWWz.(LnE ZbVXҐY\`Pʬy1fqM(<3ŵ]zAifBs)(Პ3˻3tv͚R#Ztc^_Fٟ5e,by#@XWku !co(Ͼﻮe1GQTuPeb{yv (/+8_kL`id6/b.{4 5_ N_qQӚbXl`}g!q$J)J)L9!L=uMa,+}RX.–+W{hǁbX,oQ0Ɯse=i-=7 \ijkkU@}T*eYJuSYe1dYER)elt ˖wAKz.%!bEɲRbz%5\ J)BHAV(BƇ>c̤A(\JIi{o>\qq:y(Siݪy*+j=?aR W{H&bX,˛SkT<<0}_ߟ繉5a4&Bb1Zk)Igl"kc:H༉r?24$O/htܪ8;v绥A;KyK ˝v@X,Bk<"0c BR$da5<ϣ(ZScLJ)Syɏ'0K^y4N^|%!u#!GyX,-A^gظ^@JiᙲIBRY@es RR8yEQijrr'"[NbX,Kikkܢ6c8L=&)B0A`eq#L1qjVbXTEggY$sn !<<ϬfM15&!{$뺮hanbX,ͥV#$MSyfRefj!zu]ci)!c!)cRZ3ȅJ"X,\# q,+SGzTSR& ƃdij"0LLAɬgVbcYdJX,b4՘p^qlx1bKf51 4^c;wv\,L=ֻ.?(Ir_(˺i\?$af*~g8̄ IDATu^2]{Mr]#~{h~߸-_JtˮgL-y~Fn9˒IYM~4jJ13B!bB1XoŬC2YcpQBƘYEaʘ3tYdBKeQ}=ﵽ_u臿uu`φ\x~߉stXÚZ&\9gC>k{Ěڙۮ>;k滎uyfsm|ލlf%y [>r~Z%^qS۟=7׋$G91elq?!;?gڅ?f~e w@~@}sŹ+3sCp׽I̽?75%gy~vnra͹DW|3sw+.=] w^C }~8(ϑ͢Mihv˿nxϝr޳=_k|lq5\7g<ܓ޳<՟do̜ku8s}o־~ ѝmNogr ap٬p C}9NT)@!DVZzL1SFALedfWιI8)qsOnز[;<ʀn࿏7#;^05x{st/ÖmVm06g_tZEݷeÏd43j쏯W^s'_.][6pd ȟr7&{#7'#}n4f.cVu]%{g +<+ac0 Z!kVʕ&>jvgl˫5/5Yt8O>/sS4>{c=EpS&IXcp姍/3u\w(^`m O'y՜cfc>ƸdW  ,ISqsqA|;>gd/_w{oz_Gava0Uǝ}s*~s1]e@d2[{"7s]&}~ vn|}* <]õXws.{vὟެ7W_&c[6l8V|!8k%N[8;ކ?B}6gqX?#?{bjT gy~jj$)ЊHWEQ՘hߞ_yT2hxMW\uμ{w\{>o?;Q\B`b%O8AGܘ֭?e?n4ac&qҜϞ{4|ϺS{}܉Ç!Oq)_=2In#eI!M&nn⨏}!Ggc7,Y3N_uE߼??݁Ix?ĝx\0`A׽.no;wkai,׻,ʍO)L޼jsk~slK-OyY%~`~ Yfk~׷Џ;ކ?B}6gqIp4~5znwZbEi~oooVr u]7MJ200P.b}gLk]|7ݪ!~<%}ox)9[W]~ڎCtqx"}f׶[ޓ>lo6:?z]㯿Q25.u9.͕Yp4W!o.%⑏pI}-Ei'&jkIJ e䞧+h-߿s8 ssi? {ܲB &]R1La*0B$Ibޙ(0 h !R1Jigg Z3Ƅ&Ƭij3c4b@duwO8Y{1g^q-Q6KzWwνSx/}*g0N;;9|>Q_=I-zM1,J U>q/gksݘN@8]O`V9gWpY7]q~o>ϴ:=8`jrZ~O]G(=>`D؄&X3ÝWW_p{K&Nqގo\yW>3sn8o-/}7rk#gvط:tq\zg#'#. pl"i<Gί]u?1cY/2=8| ԆpzN?#gsi?>gHob Ӹ !<ϣELscp0 W[?Sל~``澺u1 j9| ޺ St?}IO7~h">rn~xXަb}Gاm$8,[~GH mmmkr-wuה]&Norx 1.RJ H1d̂&*?1eu]BHeJńA&qۀO^mdy=p[珧^wV<RΝinoK\?vXX,~=vw3J+TVc]]=AH) s:aPJ` !J Bc$ɚrKaj5znJ/!8`⦷ǯ )qMEo~h=&}n׊ےw~l[X, hkk˲^Rmmm&&F )`M-IBcJLs5]߄`e!#?J4yP Z"o}YרŎC̏oǭ2Iut Yԫ5ꠢzFJAƽeRMJkl&igMUbX,8NGGZiZ.M ZuLc̸jgS(,Lp)efbX,Kiii1RJXɔs]~/T^'P`#86ř 0c&!I[u[,bi.Y%I!\T>1Q'sѫ2kI)io!H)kBynasΓ$ UbX,",BQ&IbH)Cez1EQƦ&$Ic9cT*)B!Ƙu2Nl\q_bX,oKy.!DrajY71jyEQI1y]7Jd5ƑqTAk0YbX, 8Rchk`*)B !RZpu] ƸVa!d<<<Ƙ)ô&}ceYF)5*-b4)e8 J* W-흜s1!9ec 挑RlzkNT c3ZbX,5eL&1c$Ib|6P_)%ULHNfVT*RJ+/"Tet1u^wX,-Yy4q›mwZ,Ųa Sf%I ;vJ)8ynˈk1q?2eRj}L*M77w|p mwZ,Ų! gAXrAYr%Bhɒ%jT<0\BY^pYEa/PJ$HB)B4ij|ZgWٶ;-b0.3)$}R(Z pGK%1Z5YdL1N+Vah|5y+LS&xgj/}9سwNbX5<c\)Wi-EA)-}=!D-8Qb9+W$cr9UVb&7Ъ>鳣OBbXeQBeByiN0A1G\.+!RIq]s\JAD+WvA$R3S Q Ngj--b4\H%}4J:B}ⶎs3A\Z(IӔP |!"83{EQi8̪bX,Ks[,⤭l"w=b{zz )T ZR\97KM̯TRoƘX,\.|0=/rlJ/1aFQdkhTRJ/HԤS9cV=QJM&BH$ 1zeX,J)zu]4P*i !ZZJ ^cPcLM^׬w ðas(^SP!TV\Xu[,bi.QEE!|eI` (14cBIyYaRZ)%32ecA>xlJ<8QbX)8AXa\G&j)Ԕ^qTI)ijRЀƠC\RiAn7QY'OP]ebX,m 0q\$1ZKArR^q'j_?ฎ;VJAy8s)Za5ae?mwZ,ŲA7A IDAT"(\b"X,Ų-eYE/(EQKEQ}Rc1&p08Ym*fK)@km2!4Ɇvv>e;bX,mJk^a1u,Ioq'ki!ei*PJ.HaX0|1˳4ByF i:UoWж#-b6!;c(b``g,O !Utfք`) uBcRV6E <3n TM4صO>^X,eE)\uRjfWuEQ 0IJIPѢ(*-,S2Y~J)c+ YS}vm˺2둱X,eFsY%AXKaʂiMZ10 BA" a\*AFau2-\l]mX,6Ms.BN9:#="вI=fԣ\a!Zi9ZWR1Nu]J)I]VbX ϳ2i J(BEr¬XT Qsc(2u (a4 SQjR꺮UbX,RVZMK).zzZhQ&g Bȸ^0ƮqNӔ1_nbX,UJ[(Iu!8H𼵵5IEiDzKVBfYF<7~2(\5RaB$ajRTX,\ƌ H9.,MJT \0?˒,K:;;͂$J.s"(q!dEZ$I|G !L=nbX,EzBpxaRB)^E)gLK9~آ(0@Zea/2qEaL(|kdOq쉧;lXX, c&0wTG"I%eK˒$I(W\Y25 !R6MJ($I0̲(Fk&;t,f Nj/f`n|kg1Zʲԍ:Q;1K;}a2cvdnO{KX9kz퍔Iy✳zlHK?r6 >f}B<;G_늣S@mk?[W+R.3o-3{Y4fN:&'ŲMRYfq[[['yEAESuk*cQ\Ss1u)!ʅYa61{qP45 MSq:mt07L(BiGg*%ZGu|nO|k;?n vD1]O58Ǘ~w ~[?=0-V>νBp_,/9w|?zGky6˖_]_'G@x>O>ys,=p٢_~=̺ŽUeB)8NB`Zi:8+--z={UZDQu=RRJ)t Nϟ#&,Xu>y2qmz-Cw?gl|>z]~>o#D㢛?wWD[ =W}㎋҉]}??NG⑭?zZƷpтv9;wae\#"9 gݿko,%-;?[> ʏ߶aavo;U}xm "߽<N%OϧM-?kYz' 5C8J/d^:9IYNH$"`Ff^e^*KJ49K妦ز,F!hjDeJ!DuI5MKӮe*b b]psVD~2[> 5U+'~z=rPKr~qM]DwnU?sY?sP/-0W lw߾&(?OC1:`oa_/k>u_mҦsvڬǾ>n?~;;?zLu,Je!2tK&PI4Q-bIhh+ RAMι(,6A.B(Q]u.6w4=E J鮎W{Xx)ɍ녟ߗ_nKNs.&7\$mLt8qV{w?uuE9ܕ` O8\jW&?rk9ʩXnED |:~PlVgzа%\eSc~]~]\{ğ*3U44/3~nhIk~c| dD_n/vc[ 듲U{_|P) ޼@ nz>gž=D?)r$uܚqГqle,۲ 7Y2 u ٜ"Ic(BšٶmY8X{fu%> " (0WH$basƘ5T,m[$z2HXfhq&86NeI˳2=ݣM5Kkd3JecOw> AJ떮W<%>+?-5_#99NmZ +tʝ3nܜ~3W,1ƿm_ Ou,]O7w}?ypg/Wrz)D! ~WǎD"ԶTU&R BAI\FD6'k*lXRYe{Rj7!B0Ɗض{Ý}"/D_}cBQYdA,Kr( <ٶ],eIEQ$RurIE1HbbI􆌇߿3$!DR`Ŧzb;$ ̲.a'b]}m.S"G8(SMDH$9焐X,,˒rl8Z4B\r Mt"D!XDDP*mQUUbbY)QƘiD1 ^ lr 0!뺢(zz+<ށaUUCC"Ds 0h<QUU*qR`ReXĄ$FY/ b =$CA( d8I;"D!B[hp]J)M&#IQMuAJR&ԤdY. "4M_阖3!|EcRkZ=\+lkWv]iCHŴtZbe P` mrs .医X@iF4%;1jH\*H2Ƙ^6Ad2%Cge5Rhjj ]p{t r:o=-^86pp;LFWho0pwl{;n<^ٜќKUmo.wXxq}Day!<  yo;FL&cF*fXUU a ĦP*"pL&9cccH$I,K$TI.su(йkoai!' \0l556eu+93W~O2ce\'KvtΓ.fwv鎨D:'`=9s{{GK dr򖴄̎=sx4oy$6jACOw ?{;_w`}|P>vYj_~ M8'wLL K;v$ov^.PQj3oZ\wB'uEh:/Mڢ4Xڵu~{]Rsߖ֗5Dfaz~XWk^0ǧC)H-\ !32EOP7FZuQQsCKE.Hg<7 /Xм)>\z⌀ ]Lh5b_qYd"خ_%pc9,n}CE׾-|7R:/^ݩbt?pfxB٦Gߴ8k<87c%IBǑ$ز,Q㱈h4]fXeMRDEYtc,I!0D"z4D E!9ԛ-HQߡ% /D-溄&LOψKARe\î>X4Ks>㈺1ӑ{_6(\ɩZ:١1R;h/]`d?vE.)> 7헶yfAw^%Zc" m9 Sx5kG#hduW|ֽniv ǁ*Oϩ5sG9m؏B>c>1K]>E(^va-<ڦ _UȨ1ozda@~?V5k,zbƥm# 0RO_9|s#Cۺ+iRJ֩Y$rh־+ {S>m^#.ZfކW/#:|x b-Li;01۟_ٔ,y(?_q ?OV^ۊ&ۖ^?g/iIoCnSZ׵4l*+ _Br1s o= FeY.˄i)۶@"#XU#` ,sEAFiq]8qKǯP bP"h]>1KR5XG~Iݵڸ96bc{ϟ+ڷ]Kj}[R0Vi1$gӏ䙐|0wKq̴sж#B*&PebYc}\0?yab1c, I֖-ow#'ַzv=y<̀<ȸ]7*8++<~[\$Jat?$(+5$ӆEEB3(fMӤH*h<^EhT$)Ec(BGm1(*ƘEDRJ#8^<&ALcdž%IU@ yӎ\ZꥧOju^3sv#Y{V5>7`Rut s%bI:nL΍ddgbrtEd3fB43rR=w;:婕s&i_ )wgl%T^gui#f?~ KKHgO|fHaJN ? r-wRsbDŽpͥi}+6Kz`[yIIκݝͧ3R7FxカX}K.l9BDاk}@˂:2Fhϖwy'+]r9צvk<;N.QOϫeaEEdkldZ8++<~[\#h2b樶B _]T!ĹʨJ;kYh4Z,ѨiޭH$$hDՀqQ-Ćn:6$IEAc42J4E(( @ET1g^VT bfPk8W_y3>(s+#45#wR›Ox`Gla%,3Z|r[sP߱ö[ \=ӏ1M߰~>st`hVIhQ۝aeI< &~̮ݝͧ4'im{ d&sjN6<;$Aզ4Xn|HAIw\>@{FusK/yD[Ɓ=Zz*Fw;++<~[qe*ig1TZ .*✡crF9爹9q]$1EE,DZaۦʎQ8(1L !+˚1{)Bi>s͏ubxPm]w>(fj!*xly7B{gCOO;'Rɋ5MHN@ {ֶEԚ#M-<Yrw/֬l|}Ϲh|Sw4]}XlAs}`'?Ä& O,P߅\߳}c _=㧏*1@O]m6]&#~ Zx!©O&ubgqE+WoE|5u ^W,KE>?Њ?r48~=Rw< "rO8ZdEg-O*Jcc E=J+rmm抅ӿ0`P(;~X^~67Tb]NjQ<8@iaD,FE"zF$"Ƃ$Jdi^%0З>ao/v( l@l6%v8zM7|'%Ϳ5jKfZ-8zp'oy C٣)^&"D/@:}]wuwFF[r 먪*mۚyך7JdLޢ8;ia (+cJg\.LsNx97nX%B"qPŶMI$IJ$b"Yc.qKg,iIΎOp"2AN3cd2wxضT*e۶8Lqb]6C<["KW/PF!^c>vwxxC-Ϥ/qC.V>D9Q'R7hѢ &f||KA<=%u/s3a}+y YDK` kQ1 ˲(a(y*mۖEQL&S6tp'I#%$,ϥ9뛢#G&L,|5v@/ԧ[R y]yUM#k=2;\ޞ3oZ\wB'umqxx>Fqk3gwdH&,oIKOΎ'; ؽ@T꯻d's XSJ.6CɚUK2\z>kzR:/^ݩr׵& 6E8z )?=PduK20fݷ#e 9Y՚W55/ڒY$o_x~ n<=ܺ/JOE?3;Ѽo,ڨM?'fY\'ϐ&ܓ;&&tGե ;RRշ*͸rʢgdw_R (w ^} gj*@~Eݾ/4d^xЮkD_W``iҎy20W~ϣ / ?}ȯ'E،ڎ(∦aUEcĩCQ4L HUUYEQ.gK8 ( 8B$)6qiDeYRBH,#uۄΡ k'۰U:ߡ% /D-DpDImmh}8rÇǠ).)> 7헶y!(^va-<V@V3c^pIׇ>; 1F} ~rm\~YMgzk9ݧqD]~Պ=ZHkmxֺ6u]Kӛw$#7K6-F XK5~k/@?~knٶ6=R5Xʼq6HX6\|O£MY>*>w`Akg9Y&+ aB~YEQIzlǥ ^~vo;\ur=ylek܀'/vd3rR~rt܉Wޯ5LjvvlzUO Thjm]Y"5(70+cPΰ XJNDMRV^RppY# i6F+F̼?eLfthr*EZ8b%m~zLKKH9zůʃ9%,$r*3Ԯξ>'_~ʯ r0@-5'vL\:QՀv#ɩӮk`a?c$J>-5rp9~2  1-J)(,J^T<8"JJ. sʪE]QPX$9a%iz 3bMtGeof0LX*2&/pI9 !q$ڐ޴-xxERSq%U;5$Byjf`ir6F+Y/" jMf}MB]6`d]*Us߳=вθ>ڳedaKks?~S _ڡ8:ڹtr+;~ʯv?O!,{:]_ h׽'16Lߣ6R&?4CL ?}U_Ofo!*H`2WasbڄNYc.Ս"6[TǥeeM5čmJ(eQ:geFyiMDuGG2[ǹhʫ׶/Ԧ[.lΡ˹c=='Dd&ƞ,ɦwRx,8uS']v-8cb#C1ʑ-›jTvt˖Ƙ[˂˜u.L5+9hڔ&ˍ?u#Fmw %5$Ǐ"3Ҏ]ǰ=ŏ|ғ2scd|0g1Ǝ*T͌ޟ49 9,6wDEWSG,"뻫X}*"@}֜ 5N~կ]3Wϻ|7O7{UK&a.;vvkO*sؾ*ʯ'3ZA8w9Q/Ȋ1޷rH$t]fu]EQtݻ zbK$ugtEw1.et50%dxxH9HUU芮gx#j'׬l|}Ϲh|SgGpj}bkfK0rD_ikwzX47J(@iپo㱆ů@&p?SljTuӏ& pִb&hZIϋRw< "rW SQBޜlf]+iZTEQ۲YU[[;44F9ޣ4mwwwtM7|}Bv_JvBK{AW !!B!{3kVmG-Z &N/}u _*^`sƘ:v4AEoIo|=m- J{LK1ءM#U4UQZyho/uW|ֽnc yT,,zbƥm# ó; ۯZ89>gUkghE9.)> 7헶)<Ě5BsVB Ksř\sˎζi(7闢(Z;>~oV_քN~)`)ᵮA„>c>1K@A>2@ḼGӃb5k_{]8?8|s#Cۺ+iӏ_iUVW@XFYIɑ#$Is۶(aDl]EQbٲQ$mƽ0N%oQ=q$qx)NM֤V,m{k[Sv!e·JrYCR=e-wea'R-}Z˟I䩈{Ֆ: eqY@(>UQ[ךTƣ\M5s%%!~r*KM]Rے2ƀNÈ!1CrĴ)+Qr D;:f4dBCqYBs[K)o,.r<:޲mEtٟ-Z;>~oV_3F 6z-E5.3]PFF^6nz>+ٵ?]gBbg܅.m _ܯ*c'ǯ=VW~r[UBBWeq8$I*ɲ 2Be͍MU3:$ DQ%ƘT#l.xT*i~ xΑX[sÎN{9yrNQ/V'4>'/vE\b6aKS5LDq'>}rʵDMRV^R6FgzVr:d0-̩<55 vnc\СWRB.;13S"北hf8-oFWe?Ͼ}W[jUvwf]yhQ`8j8x)IRTB/ `YKXɭ\_~kOj-kYn|]v-8cb#C: I~,8uVmVD`#uodnI՟A3 YQ_;O˒yLLׁ{%1 6ɘ~rDd&ƞ,fj;>@SS' ,iyZ]riǮcXΈ3l-*;IE}W[jUvgq>V"̥C}n&@>GE9c#_t`hVy.|vg'~ֱ]UYz~9z|׿_MxyD1ᖿ]n՚'&w?>Z5k?4?GBBHDZmmۆa0ƤiRJQ$m[aٙ$ ԶmιD(ceBH!3}pߧR :C}9=/7̊or\2ϫ@mx@&h4s(zY}'~Yyb2˲V P&尋1VM@"΅ejRr.ZTnCR 4ICIeXxH|qA )ɻ(7RW?/Q>Fy#P6.8VVyv$j4F9'Q9ORVc4J6)QQJ* ye s>s8Wȟ8e񋋖98dž471E!Ĥ|bT1-'JeYa('p8N2]Uf0F4IӄVu,ּf̎??e(F* xh!8DwcUT2 C4MKY d(cJ.&I4zFe1-nFh4[3ι8,yDHJI4M!3$qaIlF!G4 1!!Phjŭh4fkaaP/eRq"J9B2PJ9/x)J6U6F *ɲ,]Vm2FhUk([Vl۶M1@P*Ulvԙ`YVQ!q*S !J9Ru% Cy&IR&E5Fl1J9'T@ 27)'\!4 $Ĵ !P#zy!V7ŕTxyTOk*[&Ji\FPFh8Uz8NirΥ`vA1溮1Zx1 R`ժ95|>ShL\AR(4t:1T`b0ΌVj4FFy4M49!99zu]Pt\.9*eYI$y_o T1!%0J̛^|=;zuXMrFh^'V%lK0 )ؐ*{*m6cV!i@ĀF0d= -M8嘔Zm\ƄaX,*MNxgW+^+!{QFѼDQ *Y*!r`c2%1OAL4m۲bh)8cP:V"C=3Ms|nx,sw&lzh4FӘ6cH,%\"dICϵ-4 Kb("0NRA }n(0V|߯T* *5͋鿱m o/g3<_]Zd0?<1Fh^ThX $!eeYQDcaf2q$iq8fh4r\EBBi\hL:[ul:[Ӭq| T|y>iYN8%5FѼ88,D`"K.J !Q#qz>cL^T~f(ڶFGW>3J<}=;3L3Is[Ξ9Sۯ/>!_Z9_FO_lP%8\9ۺ͈uxszjl:ޞ-W)˷?0=-cruka͕H7#uIryL%–kps(:= ItToHR$Ǧj!L6;oGDSׇ>8ƻl:'ԩ5 jvj۳̒Hm ln?Н&rX Gv)Nʕ[8F&Xe !LiPEi38j5NתT*E8H&OI0"L₪1n6134 469]SsNb?=k 4x"8wo6g:9NǷ\$^R[:ǡŵő_qMc3C} nP-4i=+qvj8%?wj/YyPLLɘ<2sx̕kC;;̠4wwܽ"&X4;9R䭝Iǹz3۷m 9}DŽxQ)3vv8~qྜྷ N}q@Ɨg;z~/mhttSp{i%2׋aٯ5OD cBefR<7l4,HJAҙt- Z&;w{eYJEBlӴ $*4YN$"S3[uōfL6sûeT+3e'xqZ;[ dZJo{zGz@Ҿa[әkUZx;{o`toN-v-ZLv2,]ۻuhyv=0=ؘۏ8:d!wkB;sg.D'b-xgہ%s{sXR3q~rK]8Moʟhg֔?0lK`=3o ݽu^/ *5SeV|w\?.5ͫlQJq( r6PJ3B cD !#bI{BlVYd*JE !Tu>!}hTʇƴ̎;gFMvѰl۔ Z}B8OG}AwDwh -l+/Z|c2/"uLTlCһE6\;w}sΟot&ۓ3bIe\DL.{hGk=6L?drg]@v%bV1<35ps{TB*ѵY*=jNi2ޥu~{K8ybDhMo“:s}O׸ӱ _FzC^/V|rl=lhF`QJ=vl7ܶm2 C6]6 #Q$u86~?wU&4M aNm,裏>J._ E/dﯻU>j#mzݿ59Bw'|駟? JcaȔ  B azW0MMhDcUJ w5cjYqRd~P-cNBѮ{B{&FAPOhd[$L!cx'Xrnb5 )e I'@/ƘX,Q! B8^:J1 befGߎ~-FѼBT%TJic!$IL&9)`f"}? C+q˲07j*Rjqk4FZ)Kq !0ƪZ\ 'LZ(0!h4|O k%B(Ji5Fl-Ţ:aT0Z8^SJMTՎp)T&U6RqBr("XĴq 寁?;ucNrxu{o\/.?|t%jFjZTm1EQ0MRm"e9IlE0&L@_ٶ8a B,svvO$m!!Yب sNG [oheogGwtvt2sEgBIJߜ[\l$r -*r?j`5:{zZP+Gu[D nܯƦrJ˷?0=-crHOփJ=f?<97џ/m"W{~Z3jSc_ϧw}Z!͎Q0Q0w?nH}}/{K__< @߿m~r(ۻ@R1ŸZ|#!7?Cȳ2~!|~׼֓[uVE$ Gv*Q'J-tgFy!Bj( cfS1̤2 .81F#PJ9cKdrs1朧Rz\@0%f00{n[ܵF:5W$3;: 3()4x"8wo6g:9NǷ\$l@?V'q;"|qmqddn\ZBO>wKߣrggSXsVRo[ozկyRۡyО#hrh%" DxNp蝝+WyR䭝IǹzkqsG[ٳy{}Y8_߿HD_;yN/.ܷX/Μ<^_yf|m/پAeb 5]'[ kk_/&zwfZ?4kXJBMBQ!T8QQJU᜛*.QJB |TȓQ^[oYwfN+HnY*犧Lz;颜..>!Vzc/bIQSnMglUjjGVҹB9صd(3hkvmֵ=Dvჽwlඵ.Ji"-^lN']k\xgہ%s{sOX{ϻٕݸGzmswߒ>pk@KK ,]SnO]'[E\v;?1?3ʡmTD+Cz\?F5˅1FU\0:1-5˲ccKr8]mmmj LJ!1tnv*na hX6mǜ Z}B8OG=$;ΏK^zG!k0ڹ9 zqJYXۯL 9!U -=GRq:=i*܁"uVs9`M&m,\?^|R :C}7a./dU>j#m/Ż~O|׀5}P4FPvBw'|駟߿;A.`'!y^Zs8Wȟ8\[ 6*\\oj닾k6h4& 0T8I8]CkU P#/J*ѤYer|!Z T |};Xh4o.sv8FaY8sqh@qB&Jc6)'amFj5uU-}_kqk4FZ\U{LF1&8W@EIa8iR{9sBe5t:q$`,Z &OIq [-?EL|ryiNǕ @cՎo3-î' _Jz:_6N-^~z6^gw[6TV9ur`G׷whl_ }~_GV \VMGoԼh4B2Ii&割PTŠ)])ZC,圃aHVk qpL!奃 R9ELmJGy#?{޿wŵܩw6Pan<:gyU1Ck&^rc}.M2Kt蝃C7K>9}|iEzevb"쫱o:yUؒyh^'Ld`ˊs]!R w'4}WLqLR;O"8!R9OӕJEU_+-)×WgGwtvt2szdt>'b+7>.#Cor|T"C}u>n?"=6=>W 9dّ}; &/ߺt4: ln?нTtp&9V>\)]o@Ҩ\}0Sܹ{!EW'?/6rmV/ܜ_M۳ʕ'v5XatmfĺMY落`g5d\yqI#=[* d"lko7b{C{3ds~3v ?TzduLћ9/kۻZ5-k]U$ux|eVfT*nS&)a j#T*[paܶчlOo7BƯ؏p&o|XOķ?[pggSXsVo|yvs7FGA2RLS~W6:'wJAiW>{%ݥ:Yu?/C<<}nrPT˧.M~Oŵő_q LϿ #4̚_o\yqvh9'<ґwDzygN]ozFJɟVaʹ[6~|u:ir_<}f΋FEQeQ-JH*JH)I^OR*CK#l4z=a&l] B]Kj3|. RyzxΤ͞ؿc3vlp6^Lkq5֘"sw=,+gvv`IGC\21˸fmM]n#=ݻg\{wW+6{Kڑ["v,o~#}s~sjm[әkMַHjޡ6q:5qӿzr^o\4a'Gjvnpk@KK'<[_ǺyN!B߭q>R4?ƺ]g4/>zu͋F`RD@J8VT4MIܜOw=|ȆRv&-Cr;t7Ymپd/BV S<)ƵW\mk.$oo?Jlx^^ SytQh-ʰxqKsIYWg^`?UѼ61i6 BxR {%Yr#$ajL&$8FclYJh4RB(c˲eB"iryz<=_E^prosLG.͓ls6mUfZv4\/[[Q)#} U̮`6q۝ϡWΏ_ -d4NOWܝ־NS4b&/r[؂ߚ,(m[<)ƵD> IDATWXbεH'B EnYvmsgt-kڟF#⢍IYWm^N8Eym$"41E0%v )@tZڶ,KJT8*IUF~ҞMd@{餏۲cJԷ7\ot9~+,DeW)*IJ٠?N#&jƭ;3Ts/Mkul=eëB?ԸI=xp,\aI*'cіs w7^%Tp&t>\Kk.CVzn"! {|K7ZO8e. ;&T*ջ4slr&2#ۛwfPצ2zX^"FdFⰍx_?|UY*Zph7WLg=9*E|u[Optܾ{!b|.;|xO, zr^o\yW ͐߼?#\5t,°5裏>&* \/i|qpxԈs7oiZσ WgvEjCySC-O2Ѽ p@m)>O?8MQTv8ljHӑTݞwvN͕;;̎*Jj4Fym[KcF#2MSu)DQK)(2[&dIGAahysJ}T-췇|s~=47%\6-K\I/=^FHPl6 3&0$X$eY\0Jeݤ&* Rn* V¶m7 Պt-w"r-Q:95ogԂԓh4˲ V1T2¬$S0*Pʌl 4kc>[YlQ\+OW,LFѼpΕ^bY뺜Lc+3L$6)*P)(ʨ=*q8挩jخ몢ل06̃Pot,m0ŵR^ё?~'c뢲FѼ>|]'olr1|Lwd^W9fH$seՑRI⸮2RRy ?^AfG[Va6Ēr~a/ғh4 v]7cBH&UZ:A$Il!ibʄoT* VBFC;*18tZDZ-.>o|8_Sh4͛rE9[%9GUUq>zG \81`*q/[X,i9pPylK_ݹ2Z-L,-U7<ݒQOqi~1uu7Ru@o~9q?}kj0}'7SO?4xV,4gZ\p,Z$c2Z}z7^z\; [˫n {hooO[m3U<u(G~&ycP5aͭ-bL& !DZj.fHD B0C)國DaI׮%7?`O||N5ͭ>:ΖD,*]>v=Ӽ=9|]Xۺ:r9L;hf=`>'Os\62zAu̓TNW+TjuǍD.`<0z?7??+k偡) }6.!aϟГ&u4orTE2tڭ #|AG[ a<Ӣp_*9uyQ©Bȶ3R|_AF鮤*f܁؛i"`?$wvb8Uo]j*.NN-|*RO?:V8wx' 5م]Ɏ䉕i ѣeGsN_B̶3RpukK*t豮]ɎwMo7 '_\Yf`F!R=ssn6iw^e$8@\W2 [>}+/Z:/렾jnٛȩ3=RoN.?_6-Xk@yƵ2 -Gus5=)vz ɎL;h]NԆE#\'%4C=;`&۾7ɛZwitEgsn&f3( P̨TǶb)OBIVpPJUUV2 B"33C:ߖll2VcsK$eNy kZ; RjiE>Oxy){!kNYڷcU둷2}v ጭ,_gz[ hf#Z鿞zyxcL1hŭzJ acKjn~9J S,lg`erd}d#To8cr Ov[ne\ɕ;oC޺8+~==ktBrҮi~mMR9l2jHY80m]70Ji"WI}Q9aRTҩHKr4MqdF64lfvgo8gԗ:ՃI::,eP,zl-ٝ^O 'ڿxvRf(D @UX,k>r BÂY$A~w̱V`_"H${B1- RMS8\ BH)yL1H1ŢQa-4Mk{`Dfq<TގTs0TH)-W'*?^֎yʤgSkKKf >1,ȑd)pv-b0͏Fg׋>':c'˭>?=pFtvK,ܼ]o8)Jܯ,2{w0Ξ<\*[}HOwbLjbCzڬ]Fag{_g_&H$5Q8*D"ut:1nnnJ%BH:!E]Q:}?])jU8b(<۴rt]'{`̦A#oKcka*BMW?VW"ȧڴ NZj%ruIϥ~S24x8a~_ϖn Nh}yqNصS>=~&G-.}sgB;gd_Np; >caܙ8ů9?R)H$d4[cw;!]Z/4*|Uo:}vAd3MqNC;g{bgv^z}C5{:77ǿq?bdZ5@mk| QZ]YHZ3دh ƖܯFi7옝ƨ\_ׯ! &&VAG[_q$ ONu6ty%:/i롞׻/S\"H: `8J(!&s8!88c( ݰ("3*V*.S>49vb!wQt*N Bq~%Y;4teO=BF$+b||=:{eUXJǓā՚@:{ǎ?1wzw)\O& 'G/?|[]nt[*h/M]5$QEӟ/>l9IhO",`#͎OoN6N Y=xX;N>=%عvSѧKc}]D p `iT?by|`L  ӯ<0w'urn{1V~xbwcl66{rVPzz;ޗzi7D"y q]ׂcH$8Pu}MLӀVUqL@{Ų,db9Gy'J*I#:U*qqݶdbe5eJJq~\rϮL B=X-2e k3ZWOӻ7'PGWjavm߭ d=wNN;R\Rsc(g3|d>o0%Jܛy|SKb5Yk W ;xNߘw߻g+nicwՏno]=B1(POow/@oDu2;iy%@`syV5]5?4Mb!aDiH H'\u$Z4EQ$mRc?e̎bV0,n_;К>+aģw [_xW17RgעPٙUB0חnH@mToO' Tj]ckNWAݹݍ6:kw7,i:({vǯn.w=n Xzޢ6;V{Ց{SN{ogO<7s;?C ܜZr=h_ h˵߽R==[eG:.H$oQ0 EL&㺮`ӶժnjB8B"WTjPx^}bco*fLw?9.D"a~ע@ sy"zFX&RBiaH)m}w *RD<=CüR+Mlق{SSsޅ3Zm^]zo8}W%_"H^W\&Jmێ^a D9D"1V5-"Ƙ"%JH)8bDu?=;r~{'.5iW_ꃀm< ڥ [u?r_̔D9<3eԗO[hl_o; %UɗH$Ɣ\QEQ8PUxRtITF !s˜c0%Hxb8碅Eys0o]׵,KgsLKOUG׼i<sc$z7ˑӳ)`Օ3^ẰN蜓FgHp#<ӳ/=F*Jÿ}K$kBHU md{1&Z* fIE"C`?"ڪ(JX}qK9y;%@FOW9Uz}@k@.U#42P T<pvKzK&7H#R\bὁ9 ?rrԺa\O\ϯ~?R XS[E/+c P3#.а:hq &G::߾o7WŽ>xV,4gZ\p,Z$c2R 'Lz7\GUd=oN(7rr!8ۛ>S]Ɏ%mB(ґ( +#NBSJcX10 4L'T5Byah1f{8os95e.j[)~{}VuZ3-1>v=Ӽ=9|]Xۺp6:9w{P»؟;u\:#忍L_ouԩG1<ѷP=2W.^;9]#7o<6?S9Y^\{SR>J7i0zp܀>8~8[ 31ڔx+̵[+;Km/7.v>w v\ (D.H7P\rgpudקr}]>4X]vD62B)5 #"]U)2U# KRfiUDl/RN9碴L*Jӎ0Sy\&C [S t5A6>N ;'NuRk}z<U[UrȀrTwKLW!Ldn}}]ICU̸aDf|=c+ZY'QO_*J<ՠ^ !QTézMEVS1uqrrh9 TՕzձ¹sGz7:BO.5u*j +5QTwazk&BX-&NLmr9}} a2Hv_Ncm ]n=ֵ>QD" i&t=nuEЋ("lw2(mU]W,꺔Rtʀ(,;*!2mޫKF{fpTaF EV_|yw0.y|;{ ^@ђ43]gL 5-j#T =[[cA[j>QK(8Ӭ䌭F2^>9:nf'jGW"Ea?\l!ᢢe! Uju^_/E.d#]M/cbzk+-˸FtG28P c <0_j(_"HB0Ɔap9ca~*c(F8S @UEH3!a{!Na R "<9"FK"f9_niw /+ղbǻr=0]tb_Ʒ3zs~ +]b.n/l"xˑ}<(/Z:WHЖs@]l6;ƞ$7Ή.cex# LgϤT=ϗD PqLGxQ`}6t\ME'nޝM,"lS,7wyH5)mH POD"!zb#H*Eڳ<*c18wDR[/.+.̯VnܞVx>1~w&_cVU=`]0ٱ%<%ۍ)p3]9>RbTo8cr w[ Xu}N&oOMN{>㬴d8|fuʭ < ɥ]I=D":Gڶ-ҥ(0J|aZoBeM)eh뺪GQ$̝Mq3 [ r -+r{pHC?I]{ORDٞ箟͛sg%(L<|vhWgJ,c~nÇ$`ڳіM25a)݆79'ڿxz^^*nOEI7#(}ͯ.<18oغ$DS3Y(Ϗ?O?.I(Q*`N@6aJ5MSD/*r3[X0麮iiaضmv"!ky¡<9S1@=ԓ/H$omW}O窪ZJ"L{ё.BZ1{'>#)@u$ Jj-5e.j[)~{}VuZ3-WQyѾ/|~o݃_Xۺ4»؟;u\:#忍L_ouԩG1j`f IDAT<Ӣ-PwKe7ZO~Wr]=rU:a[3:i )Mڣ9`$ܭݗӨXuX.z%-p( Pi݈`'Ô@8T3tAUSGcEBhmmYt-)WWWp`L탗w忛uz@jHFQ"@ؤ3[HhYH /ČhgUpQ5۬V 5R䒩O1Jmzau\+X h2n <*f؍ЀC=DB)Eq]״ccUʨh4uJiD\ׅ24MKR"I0hPٽeQ5poS7zf,avTy5@HX_)ί;ޕ\yLrdf:'󋱖 ^_{ׯַs@],?RrD 2cgY[*FkV(ϸVc$8@\W2\YUۻ?gKP_~~Rzٔپ^2-ov9RzsT[xDz'_"HBEx'n7*id:z"1c@b۶-8"} y4ϋf"fSgR¦Xw[{25,52e_f_oK@./[_Y6,oe':s[I\/üSϽg6҄ kQImuWf﮸3Zq{Zѳݙ|%bъ[UdudǖTrl7C֜`oǪv* ʑRkfaJ\-kZ;.wbH\]/sm}Yi}pHͶҕ[ yKbɗH$Df@5MEkāk&z!E$K覉0"ײ,Q*X,z,q0E_u%-g;T#龞ܐWy}~{iˎ?tN6n޼_%0N;{(Q{##cg{^q_1?CxSFY~hW&谔nCٛC_{cbi/c~v;zkku]\4,l]P7&|N#ɮe"B=8PkyɗH$m:vZS!c68뛶V‹I۩T-FKU0'nae}yZŪatuu ۍ_y2pbK{>?=pFtvKy?WgD"`FP(BH "5its@7MqTM%Ú?q]E1 czZX,iotժw}12s}b8g̏d(~uQQuΝ4r\eh;ɉǻ~g|(T샥+#oLvҮ%zH$*yi~Bjz2¨fabHe<ϋ0*Q )JRj(!L&%Q½R;:qƋ {3rȭ'6' (j{WVꏿ7LϜ>ؔ#XX[Ė\n1@%IW8x=K$m@UUE7NtBn#aJ  qZ#J0t]e۶UUݰPJN9x=|⡦gU'q5ْhQ2(-ߵDKBֲ:rBp﯇/C+}v8he*%_|=K$ FWECL岪F( Aŏ0AlVnjjZ__b1a٨3v2yz`aMStj0/+/䥡;^4^>X|0b~s)xٴ4ޖ|[]ntLVS]9 s͟7;)|=K$FQ?,*J Z܈24ÈVis T*i X]]3bQSJ(bjn澴hb1O'Y KҺId㩝_]' "K[V(-]tr_ fa?73vsOoZ-\c>?%D3 \uLeBR" X,(CU]EZVA)-Jfz*zօRy)NܛV=G;T,ίWˊe.48`r9! kȸ|Jd_}҉\j@[Ɖ%<>u!ΧgD"B4MB: haݴfR)tETÈDAhvz S0 KRXL$aBm5{3e٣-g;7 To[)8\o__jףU8sͽ]ɕۓ˘-36;.v{4Χ?XD"ypcA) X7 ,ULfXN,'*\W% ٶ( !tG,BQ1uݽUYWВkn=t֕?4NC/bpJ݁]_&uޣb@ >ݱŏ˜P-@WS;#jNM7;~!>Χ+ѳD"HTUń( )H P,(Բ,D놡*约j4M !$-$Xd0i@vݿ61[&,\\߮OCE?{fK_\bN_:%zH$c snf#9\[˷UhqTݨVnFCju,!7ܕl1V7j{LR.[7{+VBWv`EV.(dYf6PJ(jIjjVQd)']1jU^\]J)}P1ޅ~zJcr&<=h;w6_k1ǜWp^Å,:5 O)U+GR! ތ/ZVU(hjYu4M \m[aR*ͦ8mcB1xr~XZ]lx;9>?1[+l&+KX%&|[ LaL?z+=K%vƢUf7Vs쁎 }s$n-ǍKg)uC;]|~iꝹzJT8vh`0 ?!W$cQ^+lPcbUU˲q \De^赤8bX{7//ygbSVP-)lQ'7V?Xoܺɵow3L87wczġKw.e>J[_G&ᱷ~z}j} ?`o_>crD=#'^Ԩ}ve+/w㑜8Y2`x^4m 90#4dێEIqNԲ(8"қ !cuuh g‹mޭy|#ŎRt䠪Vk3OGv❙ {F kG6";߿|7-91O(;V;L:$-$Nϩ"|PsRNe;@T+&k\qс=`0 ;611Q)-YRRJuBbh*HBzycSdc77{ú31W9?ݥOՁTR]BzfZe-ר_^k(x3ךJǻKّlbʫ_<{lϵʷ1O-H \t,BQJ8Ӆ`$JHBIv],ByvVt%)ev̲Lo_3;wE݃]y^I[Rfk3K gn"di˓qDrwb%royyS?3s^zuxSīr$k0||-!< aKO3`A!„dIfYVf"~-c~>'-!9'1gJizoL/Q:2T/,_soWwz;:=\p^(·x^YTtf';H/%ӵvlrSvTP,TJ6,/};{'xew2tz[&bzᵛݩcF.ͺ;GJQͰeE7i0 aviq {^FƘ`$\H } ) RJxnL$I7׽j͕G'm_RupϹIop+{ Չ[Ng7z LI޵eA-J7/`z>HIzns%ڐ.x߽sLe JŷN1`@8!rj8*I\1I1}pq=:bYV]&މ-ۗ,KKzs0ƴc0 I98$IPqsP(0,&Ji뺺Kve +I2BqK!iڄ`0"$"umqqͦy7!lJ)KRVkf*ə$f"jq?Yi^]N(*fF `IjE:PjG8rIq0I",q $.[$޾en̤+FQyz0}34]L*%ۉj38cK]?>YidL`0 ?&V쌳$K4UJ~>_q8'XJ^ / C۶ !zQJ8Aya/S/ ۅdqWw0kQ`0]OHqٶ-JIKeNw u0 mڶM(+J\N4 Î8c&IΦ/O {nή`ɥ[۹2ŎRt䠪Vk3OG`0 &8KL<ǑR.W E]kZ!&i4Ķmݬ\.q$c0o:~, IDAT;sXԧiow}ʘ`0 ?ҔIJs|0 (`q8u}9Dh&Rq*J>GB2mcuLBq_گE݃]y^-<٥cm]z6XYj`??W>{`ijL# `0~If{zI,ڊbLZ&<$2@8ITcB) q]W0Ɯs@Ecl׮LtdP_X>mbZnU,ڴm|uwyY7 G&vƄRܢv!_lZض%%ԉcdYVrKzgg"I)eJqql !\וRj]pz{ʣk pOǾa]owwf `A)8Ä !0(R8דRBeN^/ z+χaH|׫Kkz1VJI)mRQqFh atim0 O&!%r^# (0"J (8(jiJ8fAEQR!R9ODj!ڡr`0^.}fggJ0:[saI0 `]!8}!1,cn`0 /JieRB@a)t$^$FBs!v]l3c)%42JmZD)m6`0^.cL]RB S$Ħ A8MSj@B}I!]$X7VJql `0|Op1a !BRR3$$M8”RYA Hce0^rZߏ͙Y`2 I6R!aڶmَ(a11ĎT`J2P&ca5i<ϓR"F,S_^>/J٭'%?U8?V @mBՙ,˲eYl69 !t4MrԹiڶ^%o}OIeTz}*)Ҋewp?yewnNέfɥ_xbߝ"r6y`06ar'"˲BnBe!cc.YeY%iX\m[w,˶mƘq|>HwNG9:?ԟOa}z_ɿr/"||?s{`߫^M}t$)~L߷'}+{۟S>8>8yT#j['eEl5 ?Ψp9R@i R¶Bj^)()˖'a]6&2ERJGb$m1IDQWvʱ^Uo\3M+ltwG OIVXk:>=OUBJ~7ZS)<4N'奌ڧݼx ÏV1T!rrreVWjLJTu8Ya]*F{8ֻ@W!2sd}3367CȎ.z)`r|~bE!~yae%,=4oDszxZts޹/ObuڌkNMiKJ6vn7/ی`0q{7;;rLϕJ8K,T8ӛRs m)#e_]&F!kQF]~|'x.ܨ;kߜPoyOOa-'V;<~c:࿞}m{1őC/wy#&Kut*\˥Il<_[r'Kߝ =Qu߯?8x{vhX9~@o`=qC'7fNtx/&Xco4\{s/f# e;Ѽ<潽s-YǴK`0BbW*5'W/.WKl%iWWJq]eYRVuH&MShڴ[kB6W߫Vߞa/nO\m:P )쿻%|]˯q)36BrVN;3y֞LMR^yGiڈ|8'l B鸼|sѾgb[cjYqh޷-D^%y7-k0 qٌb-tBI%*+mwZCN4 I ?lHZќaqz8DV!NysmṱS#vߝF) vvhD_sYJD:Tļ ,QLVHn=w1.V@7W.Xx)[cjK׎}9%V:f9(x VVSӾZg!DDBRƥ,DR~ ضm{=W;.J);IVU( ݍuvyxR$W=!g?;mmz6XYj`??W>{`d LgϾxto?:wyϛ=*FTɼͮLUpa)uzroqTŭ6Ԅ?;Aw2ɘ/-d^9w-< aKOk'{06Fϧ;6omvT\w('y \Krw'v> 3smŸ&C$[j!96!o9Ѽo#A*O8Nb&yyr]=j r51 @U,kFXkEBzF+,K8˲|>hFZL!)eP(v(9u?>h6r[]1? iߑ2Yt/'>Rҗ[ mlS({G]뻩Z¥h޺s=#޴Y*+WRVꥻ+f&ͰemϤonw{vhOoW):/=ےXp"LF Մ+)WAǂmŸ`Oޚ~0:~@[cjK׎}9RKM&|4'6yyrJe޽:r Q*R,xلf rtNiMBZ0]'̲,8;:0]nzc=}=0\yp}g sDY<%nszC Ly9~t૛xCAz,0Vґ1#_;9z|4r{z`_9T?_}s\3 VVu){6 8q}?"u$Atca>G5M$H)qQyJ)$ތ!\.گ\N:,r`0v ul(oӏo0QgڇK/?Ex}j[E}rf0~: ,l]ZZ¥:n9m~ OuݕZ&>!&\,BX9+IqzAqE:=8c^ҵ0,\o&?sfhTΟO J(~S;V>:{tnWɟxl, Y ++af}c% _#<1}z!巳`O.xmߙZ{#p׏'(Ffudnh?}6p?C+)O?ky$%Ю3LUKFro0 rwm,q:;(”VծbGŮbLDWɣD㸻{yyY>c1fY0tITbebİw,lX];4xe7S(;JGj6X_,th:i9mz*F ݵGɽe9 U}ם/[h_v}Y Dv95\jwf 6o4˩L<"#c\ȗʣtze`5Q㪏8ߐ,½[6鹽}L.. |g:@s@+j)=ad)ڒE'{^=r`0^5:c\bcLZc"Ԧ B{FH0BJҒI4 [H !їQJ{ú31WOȑRZѭ qH',>gjWV`!We+5Z DduU6 +/6IS$孂p/.}Tqgx~sY~yңb^wXR~/Hu+]aGݭ\豊6l9_o0 :Fu][VAu$I(EzRZRVkXP zK(It&Ȁ84MSs93z[.{p+Ë7"{&-kR#\`:[<۷@P]| hzV&C$[j!wFj ;.U׾xݫY8!Kk_^grk:K֘aZByz9swӴIm죔0{;=og5 sN{12 |@a Rx-d^9i-k U#MSBB#la̅JH)%vlRie˄P}l۶RqBz(@]|>?|GW߯ncN;#c=6r[Eo}ѹ{|RIg'M۳VeB5JʕŅgO=EzkxML&=kuYw5#·rinRy~9]Y qy#lwjօW&+LJ)a˲".;vT7鹍}G>VDGX*Y_Y^zc_j+$b*< a mlS({U-Wu.=֧6 ëXӤQRmq4Y$D2# 6[ (1 \I^ ljX'Xތե7׽ʣ6y%Af˕wK6r~yfKSonrfx{rP xo8*uTpT|Ԟ믯 g?IP;=Y]hvfdL˓>Ǐ|uo?~P_x_kx\Kr0ܹ5۔xި˲:_--Y~3v0 /RQJeYAk!~. Bu]BIDW}_KSA@$ib ];熻rM10*&SurCOt $) }"8^|_c>>,^abo_m=N<x0 2u ő_,`fo\?wcq`^x:{h] qޮCd;{ƷKهg7[vw@dd;[) *"(`xH4MNMMT=kZeRJqc!J).K:!kwIJf*ə$f"jwP|r•8C]P}'^.d2/G&Z?漲w ^}o-G)뷧WL/oz ͇}c\(-ocCp:q2^oɖ]d @ XX^BM?H#;/g6GXz\fu߯=cks]\QWZweXleٽkAau,\0`x%mbyJb?2dYs8IB$(Te;ƥ۳s׮UۿH[WףTbGDZCk6KBEO->)~ jܹ8xߺ+w"qrm.o]Z w8RϕV:jo:0<޿ݐQk& U!}JfׯߛL>Xx|rgm c=L|k^pn' 7f ,˗4 e\J?40 眯:$R(RRb8֫Ky$X7],%"O0+މCyK!k,kz)+( vQRnLO8Tpwc qW1-hG`Ik2:}x쭀+^{ot32~t}8Pg_.MzX}׫aȬɍ1trm;#/L9YF+S4_xΆo,\o]5Nd˭><1e?{F➍}ùYk~d{^vvT_=_z*W6,}a=]WdK5#nشHZuJq)T,ɵ}G^7n?Z&Wz WǡVP(ضNzDd,IV<"V&88R/uo%8vmBHoXJoޭcl~8JE@{7^Q*vTjmf)X|Ж'o']c ,nZN}tBuw+BV;L:$0w!m]m2$Nϩ"|PS_3S806`ψam_Ne;@T+ko58S^ ,;]K*O>Idrqďt_Th>'iQio!*'x3F^i|mwۓ 6%fR]%E3ɾ?8`z+wPޟn}]3,O݌]ɇҜu=ɫ? |>1v̯`xEh4r9Zbѐ,fYe6\H3r4#Mi*zA<=Pb_P@Xugbd n>Rgljzih/m֟OʤU,1{X\^yMDr0[e<^bbÃ/p  >zr4zMzkEZ%?__;E_3J,Lmk-'\9+[ Rch|+>NO0>/Xv4 SJkrRP | -rk4tlji$^T1]s\`uclue,ͥhm_;Rfk3K gn)roq<>f30h!s;(\a2D%r7}ui+GOF/*k_O,8uv-d=ݎ֫!-p.b6鹍}cooNyn}-ʄJ3W^GJF ӳdhzU!C% G|iA\i[ _w 'L=w_zT)@{W+sni0^J'İk"\7ʘ' &e(Emc0%7[gtL.ye](9hC}R޶thOwڬn#竻Ϳu?=_vq)[ L >;h"ݞ*  WR,.|=N=~)[&UؚfjϓK(eoTR;-|H)/yLMЕP(.=vv9n]{e̤,&]$fgRV>&=O=^%'gIkW@S{"BjVM [OSeltcqqNjkB~n#>cyQ}M[^K"磟'~_WpKi8l3X^]fGmi0^IP任j,mcj/cA6$˲|>C2R]p&2]hx"LX7׽͕GI}]>8SK ^.Mm3was;zs3Wn#ȐjL8\xQ ]>ӫj':qUg7*Q<1:y78ᕽޝG~OUP.ц\uYFM-f*SP*ujϋܝ'z*}x'Aloguuڙ2&G0֝R76eAU.b҃H|wkc>rU(W9v"կַuv_=><'|ܲ B dIuWfA{^6b.xfŒ崰׮X2kd3i@2_-lJQ(֬4Y 2M0 ð("Pʪժ4PJ8j1Hұu]0'e*$I,˒ɵ-Bwma;3.;;BVƄJ7سkcCqL1nYӏ)g.GAƉi{9M= btj}kVQ:qr1d34T/2,<"<"cu5˲%Hi+yqf-9;Z<}NP(;Rʃ\j<5Czض+c$IiDbiJeV4M @udtnZ2zBP( 83\'Bl[[GIH˲dty3,00} =&JmJ BP(ƝTV .ZcZi1BzulF!9C)MxV86 1h4\וMD/K-\S"NU( B8Py^3I`qca[&2MSu0(\cdM*ar=cA`iQeP^ o{;Hi]~s;bxiGP( B$idY0ByDe ΓFA۶-YkV,5dX6XV]e_u'Ҟ)Nq| Mj pz#|}}b֌Yt ]=7#rKuĞb>!̜1uv`h칗;$e meL9ImkxnyB~[n'g=p6΄0v B12A%3na>R!l6[Mӄ\.ʵ]<2s޲Ýڶ Ѩܒ9sYf8 Ahf"oL="W+`/گѻٚCJr4WX[D M*H{w}qnNcjGP(#$ʬ׶a+ 4L0]8IpL&9 T3 CΓN3R2f4MŽOѿ,_8^zu 8IQ_&w&wrƫ{cA5lP[K}}p,s>s, @ū5|~='t _Z[ gt.zy]omIs~aKO.jt>H{/y~n~sN*p{wX`>Vbb.M+C\6NO׶ w%S( aU7 r67T>o WcjGP(#iIRuE"V3a!AOOfT*a9T|>/cd(MZbd;wh} uY0L&+_M_|~{u( CX {&*ꪾCp7=yz=#;aSWЍM7;ʯ,&3s=iJ@wyRL[Ε:~({W{oZgvYc/x3 @iP˟_U9ˤZTO.ճaQ#EN2Q8lsľ.ݺV!?K@M=rڐ9ν4Xl!tv>JgGӥ_mp<-3r1a966[^Z;n0jx/s5^I1¼2ZלZ [݋#Ow!M)$ay\ aQlYFŕ.X5I;Dh;|pGtnG,y)0_=c}sL9bva>+5r8 CRXӷp[ڎBP(Fnlyl֨~19Wt3UVR8@Db>c5Jt皲l\e(錳}]dlzrA7@=?ԪU}Uudt<{* 4YxȞ*SM;ovD.'_P]p1ʼn%DaKۊSw>2uޘ4DK_:[uNբ_^ޯwnivF_u+-)EϬ'O hCe=ӹqDһakQ}tjdkSsݑ񮿛Zmx[cmGP(#qB$];::ZAݽzZ0(tt3HKE򬒦:JrSIHIF4l}^sZmPٳǟ G_U<)9sšyi jbVTəfkUon1 ]5 IDATY2꿞PFS4Q57j݅+t}jܬF(?njy{֤o,;i=:s߽z07k";3I X^Ԙ Yt}_+4i+Ys6SA^\Z~ȡBP(֟[͛7q BqJ5-b]3 ת 1BuιJ4MAu8d 0M3J)cL5҆97 eQ2偸1p SefkcoP_],[0{G46cۢnjЎBP("? vmr_( k۶Ƙ<99N]*4 h48LҐ`Yl E1PGyR*N$Nki[*gZ#}( bzKn !jAْKmͦ |װ[!DM8OӴ  !eBeiy$3oZ+U] Bʸ22]afj1sfOӴs`MaeɼTZMn8M|>-}߶m0ưQ;vu+gN?kLJhK.S2PfT=7T(iyu-ϧT/sA(j*^olđ'TG|d%uevI@:BeV( ByIh^9]5Mt]lcyI&1M^Td:ؗbv}1n2Ҍ+WWUa'|Km*WNϭ2B.ߤDIBK#?t|@qjfn FB1-$0(}_h.j^ut Qh"74MgT]e7)Z~~n,Vh8C7k2Z0&8tEn'g&4nQ"LfikJ@u3Rq8irw1Et~n#?j.q W߆{ǚ,g7Mزܼ\Վå'[띇qLqGoY~ |'#B#˧-o'-K?Ž/`D^x~jl. /ï` #}k[qBǼ>fgep]}Oiӽ#>Z=+*}_ⅵqY7Q7Xzkj*Ffsr!&I2ş~zYBB!& D(ʃûKq΃ `yҩx;col~wW~s#q+hSηGKnFai??b~S88|e6\ qzێjo / 8=?Xx~_ٟΑGmcr\}|oo7&Bx'O@Yst\t ,Z_v'\ދrYT7q^}۾]S>q^Mf/{ԯ~Ktqow7?72FXGƉjV6<(78&TkyR# K.=W3CoZ-Q\m;=Y0n\I,N:o /`sQWyDOat|pX.{תq0 V''oW.Ӱ\{8 _<m6:po˰`xӲr2|bL? }s ?`Jq'$v?]^\['E3$}ဏa[B Q?L]Ǐ~اBPO?/6 .~oѦ חc?݉|m6Κa 絵囿܌$MOȺpVΞ1zqz.w߅v \qѦ.l~G1 mk~ud,JDZڹ;}t!Xj5MS۶caaE@&8i0ضm'<̛K⮍JM8r~nOOx4>۞R>^ݍ|__`bߵ}=ȵ"cwll8zW`cJ/:~.Z~[)nx竺ޞxZ"<}Ft/o‚.ΜǶZ8V'%N|!|v*y~r&d60/sppٟ0rツ #8Yo|zs _S&s ~ +5xiw$O_*0xƓD3;}AЖ#7L ] okӉ{ܧO~cO<\vY~'q֧~E~ޏcɝt´c}Ϝv,_\>.|/N,|K,}{~鿲:;ν{G.=WGqMh&5yMG\om3v#%$B8zm<ń:њ7#ܖ9ws~]<gx'?>nOc?<̓*<ƝwٱO+4d|a<4sxh1{'-?yدo˅wqѧ>?nG̙WX33>Ws=^0ud0uV䲹V ^p0 ;Jt1O;:Z&Ԛ qtjhq,7ժiQB,u]a@6!L=Ǡ{.}n}It9V/]ƽ>yGbXGj\|F+oyPZ_m z5~S}F{CĭEt=:>8B}՟>[װblL>/_^A~q l.?ʼnwct\^<;h{#z!lߢ|S\sPW'`o[Web@-%xN_ZE|B3z6!#x^24F򟽾r+>`Q>EV#1ſ ^CB}~Ïܿ2B'!R>>\xٹ;/3]·rAW?;co:O8纤s{;ME)G>>E 3~zczNj1Flmy0, dY/ BI2aB׊t]riQA[.ɀx25AlV%}ߗGID2i3g Ν7\N]ĭ2%<JoԙB1q.={|l mhc:wcjeF ͞ks.Szacw0w^i]JA|mH8CcaR)l'M3/x6N_oe\q}zW=A~3:t]{ȼG@&]!n?W 4fdpVTdi re'.~m=?ﯽ[+/\z;-O $@w/S<$7<∫n8[n`%њco~}h##`6_ @g4e2r@{Ad5knެk3f]kPQUg̠24 8&cZcMH뺮;*{ |m{rn {( Y;ǶSqUԓ6Nz%>S8HOF .ކ5qԷpԙ]FbJ|y4} i pwpڙCzmt-||n^ uOGgCql\s|z*6\׬ۣqg?yU3p IpƧ0ò:@*\Q6.;- ]{˜q\ /A `mBW6u2hߋK;zMgJf|}Gsw4O?. E2գT ѽmJsmmל6ar#nnS{mB?\>.|Ytە6)!GI>@8<؆,`;} zx7u~~лzG~o;[{?uGe4eR˗6(~V-tOyS7&Bpqoq9-o> o٧uptuCq;nXaTA|tGtpp!6W\_C #j/y%n*B.OT<2VP,+N 3 h767]O%μ+q!#=M'g7m'~sFW(|K(ss2. +虄 m2K7f<P'>݂?O|t[ ; lg9?əߙᜏ/ȥ'=w|(MH+^}Xj}Gce\1y >?kx;?9|l WߋKlvaklm?t]23!JҖ8voE@_{{o -p].؆_$oxIIƏ@, ALr)gqkB%bпw`>?JR߼8'xmMۮlseNrETlc2dJp-2o޼x燌14&,MS+ďSr8H$MSG7MFudmMf}q0Zm6Mh_ỷ_ƚ{?t1h x{)_Fx?2q½gfr3`^o؎8`|&褞6+Vf)qǑI}ߗBh[Pw=A7;P(v8V3ͧi3-M۩ǿ{` /{n>c*k׬BP(;baE%#BakP;ʢ &N躮XI,&ye%d%Q]}ߗad뚦6̆&[<MXpj'͟~.G<[h?8-yS#: nz>ϾEM&BP(^{1jBjՊ+䙮 Aӵ0F- * KC~)q+ B_ C3M]#ȺH#ڭFYl6 F(Z.<-,.ȱ3auBPBcF+XBP(O|>剦iR P(l.h4dfU*ǡmmmI(L ik׮}RaiZPPS( BG |Vu@uu 0Mɸj5i{ms5kVyn:6Vb(cɳArL&c۶}߶m( Bw8mq,r2MsŅBa^M0,ԙFahmR>@|fSu/ce,`BP(% }CMSd&yj ˔94liBxfj:u % !4M}60 9rI.uh*ZFeYiJQ( B1,]}&ADQTjk)djUqJmIi4:mk2!"I8 cĶM]gԃ P( b=us3MVm6uَI -D׉}QTf@>[xq$"HQVPJsL$f3l6;ĭP( b|Ihq8eʔ d2$I x^T(r1"688(_Ϙ1<EQ\޾i#+q[ 2XP*5|8cι8ˣ׶mK RQV( B1DQxb* ir9X^<L1${&t1fiFi[T.e2P|^:\$I"O=)q+ Bw8^j|ƌYqJ&븭VQ*8tOT*aLTk4 jlBȈyQ {'IRV4Ǹ BP/V\>sB!EQ&q]00 sYXgcYZ%{d\.G$ R6FQ$~ppP:ȘVK[P( afE͗}kmpǶZ͆Z5TpjYUk܌CSJ ÐGI8#[*<ϓGU\BP(N`ɘv^I:cF@ن^(4M+ asλFn 1csg <VijBP(=l6㮮Np1Rs\$Dl A(rB!]a \2 0VeyRq)+ BOf\۶RZ>O=FXu_ Ð1&O\HF 0cAl~RBP(u5kW:SBkk;'B\5 4j7>ᅚN전m1JgiZ#0qB) Bw 7jsnh^0"D&QH CIPXQ0MӲ,@FKDfJ BP(ƗJA$GA p]R8uVI$j6k OQƁ?d1My]MӔn2،t*,K* Bwmu2oe2ιܵyG{)ɬZjĉqr˲*G !Ǒ6y:MSM!ғ&IƘʤP( B1T+.a4QZ24qd2`yuoOOOałժvک |G)~cLFVV( B1PJdDJ`]*$XI}^^jkZTӴ|>/cXE)HӴ۶쁁0 5M BP(!NJؖZA0BDZm;^zT*r|.7MM4md2j1!LFQ:^Ǧ BP6>c `0 uJFiYe%Z=W |> M2Rqu="!D!2y7KTOP( 8r;k0Кd|&z1懡iT#ZqRMӆcLٔy X%cA`Yi5R 0 OjuV+S6MJL$('I"# a(O!$ 2\Բ,!q,#aE 8NR4MnQ4MeSiit&q]eک (d2q˭7MZI)8DQDIӔR:6Ve M4-ݍF0 ˲ZVe0 )^1fF^u]@R1aǖeAd+e91h4do@d$Bd( |Ji:Ӣ(r^y/]R͍l@v$ \2Զm1K? P y_^KS,BH$a:iZ^w]Wj۾;iA6r{Wu9 SW6>I94rR9䌕s1&iWN?eɇ+cOlJR(X>캮BTdL<ϲf8Nx2d28'NJ6+oV$n4 F#Vqm:e'i&qLzR7[e"m^q!D>-ǵ5B(2 # CkNh,BRJMCB(e\]ב$QhfHXǦnX5XvƵ4IʨTǔR!`1ƤKFCEEi(a^)o:0LDg!Sϋ4Ki&eP۶z%6Xox"،$  )OP!$NBBc, #9 m6z.7 69l0F!W$ Y9CT68d9OVeq85Cw'QQDB iqs!!xA`96k0e%ca\s g`p p`Z{4 6ƬjK`3#dm`sLqBs009ցcpR: g\+)qƬ15 *li0RJ6}QxYkrF*)egSJ$޳ִTwJw g).|:v] ,8oo۶,JRZuYmsݧ[t8;L|Z 6y[11Պjrέ18]]q6`1p!Ҳjn*%9g5Ŝebq5զ4Xksc.U SJRXVbq /qfQJ Rs֥֚5gmDi}SΈ95 cLm<*BH\RJi )T(c0HK*IRiRƘ)mژ\:.:isƘ ]sΥH)c}KEh!lJgk==g~\~\ HJX%],#ɂ[1+~^ ÍS l6ƀ`]׮z<~`GB.G"om E==ZkLJ06* ˵0 'iG6L=A !>cq8%` c_G2Hx95` Wv8n'ȱgyƱN  ߋIƏ[Ձ#ZVA`Jiho B^Fߋ*)%0])䊽6>v#<lSuRJa)FKƑx`( 90~l] H`)LEΙ3S_ įRaH1!T rW}16b^^^0]~Y7!scÐRiѭU%eY@B89kq Nm%F%Bi9q:˗_OO;{:RJa3ZR8k9k-fVRcֵd,5V5)yIS=SJQRacaf {9c)Q׫f!b1)%_N}1s8aC?RʰmJʡZkVRkUJVJV=DpoGCQk><8BV*lkDKm-!T1K9r)J))Uc Ho!%ym<̙h V&x1UFTcT2Weafs&R58d@c1j)EpK:sdXB %Wy!:p><跡cJm-yU+rA 1 }7SUJUk=#kl\6s7p_|>/ڏkr&8$M y߻㟺㇃auEO3iz an`aǚ)% 02p8~ؔYJ Ax'[H$& #i/Nӄ݄8P &fH#e9`/``ň}N;d!`?0[X)bZZkH][K, ᜃcE `"d!F)VO;J2/@1ľC@4ǔ Rxƌj+x,GGiCQeܼR*o.Z[YrRҷm .¶ ]'X[U)99q8R>!9FYi]1Rjg!VJ nIK.Ro"|ضZ!M)aw]c„k$RV+psZJ.RZE- )߾slRV[a[k5%4R ucM$vJ,G=D$ )ey0GJ L ę((R\Dd%mm R*BR,Vyk !I9R*m15$BMcE9!&|N,7\!0>}mj}z~ٶt@߃v  Yq/}XO"a^),& ,Up8D'ۥk)RLsT-wݶnr jwE;"Ep{JH)dN5欳,,JFgqB4ƶkֹd.:\*SA;?>-`TJkrĔm >i]ק'$8I·֬e]R)up~WFB !ecMHSʊsQ*xXU*Bt;wZ4N>A189ҪNH)%KeSz=DƘmY;KJwaR$@O rgJ)s#aca(@Oyc+TB|gR6XM8 Pn>\2*1֔~n $lyEG0MȩĪFS[a))q[5J2)-X\ڤTJ.qkIJ.֘wϭ9PJ8딒q)Ei)%]uSJ Cc<eC9֚\IaVRJ.a 9FPbOOg@@dd8 !cz9fPJIPSkr6gc4kه",g%XZSJR8笵֪,hð,vN} Vk,;sFX*H c)֎c,!mpRF֚}1XR>ĸ˾K0ĘRָֆ1nV) !VV \REVkaֹ&d|絵u89sBHuVkږR &bށs^r6k))a+3`‰<t9Z"J,o\8g[5BSuG/TZKF)kK)m!Ƹna[f!6&j) )!}~:3ƅeA 0RׯZev_㡔֕sVk=o~ơMS )瘓UşX Ĕ\}@$M !;R`7kaIz 7!}u1DuvOOO+e9g!J(鈽x\"|ynl۶ׯ?Rh❁4(΍FkY)jK)vkLV!3*99R6xtcKz8 9k\',j+Ԓfݳ~5 r<Zkwuʘ7kmkRQ( ]A\[b)Pjp.5!sgR Hev-m%r+NZ\1csŘ֥VK^Zi1v: c8ԌX&!3R850,8(}-9C_K9Rq+gT? oKx2C) "jR$,1lu)N'@j!5Lc{ιbY>/ۧRe]Xm톞18B=hTxJ2!?~z?8^OtqZoo~[cS]I! .ϟ"8OS*B&B #1p__ =iabB-1 9<6qp dT! 9gxj(}k!+"՚b[kM!B0F5R.xt+HG$M?V&1r), 5Atan!1A0p0hFu0aTi>@5 wrW7´`  i/B'XDL;X1*=j\你1-؊Tݞ}~~FX}I},oItF˲P)N X;b$с_"V dx2~01}c"lky\j=KXp{j,V7CksJey6okRKQRƤ˼h)뻾Նgr"K9R}祔%eH͌1Z#ι7EbKkRH\6H[ f)%sέ3xZk?tºu9ڤ5\ SJ)*)1tWq)K)q_|>\5Ƽ!&)UaRkk\B θZKZ;cJm!co~{8Tn8$w%w.o=jrs*yYj!g$uG(%cL`"&zhb{'"-  4[CFk4RA@ '< /H-N* ǴR vrDfnQmx4D$)<9`^qu$+3lwG5<_pҞ1(4>?4. r*^'8% 1Y9 !rI)@_98"YYI@C~kJ.*!f~8kc[&x}l' lf*S' (ݛvQ+E h_w 5C bƘ-ΘwnGEtRmRH%~]m][5kZm"OZ*qx*|nf y^ΜsX֡sEx5XOSy8g^Z))uqƔJں.FklI ۶3EU2a:OBe`{%|RHl'C |ك%hւi yZ828g!c0 R11&ou A; U,TK1Zu޳R&\ZRlm5F׶a`9-EB<8#Jtr9k\\u*~8pH%K)3Zc\Z &9R tE8-JIYvmmlM(ɘ12S*ZƙV6SJ3ƕZR:ݜw.Y[ZK1" gO !Z-#;C;lU{@uo9c{˺(zsom;ww/oOOc;\0|7/r 8nz60XcBV)6 ðmmگ~%k?~vbEu>k:o5켿v?7Z.rr_S^է0ԖcS~{ (CwMEQh rZ*b;J+(M=U'Hd@6)[ >j[.N% 8o߾QR{07xQ2{ e'0B0`/qOTG:HA~Z<ϝ}:ZVxcp]`BnZcY xh-9ߧIH6 rs^|J)ٺ9gر EBB kκz8Xc)Z.z c%gk.ιb){lE#PJIT缬A6\/W\2ƏJu݌AiaN'L~W*aԫDRy!>]#}LUKry:FK^Y'C4===!XB@/c ZhqÊXk|O%6ZR1J&*$)aDsn4ڸnoùdi>%N`_] ;Њz#CIt` s鷐a~$|nlx Zx/2t=J jM%%Ulm:c}= ZK6tSJkd-տ.O/19'l) ۖK6j̄}"v~I!qΕRsRZ#he9O!l9^6ĭ9KƎ]?n9cZ,SժlZ&ZwORJ_jJj6F(iͥRj5t%ZR86m[kik84ƠLp!ƙR(k]΃R]kPP)e15Ydh%28TgCbPja@.T| @^;֚1JRX,޻s7?[VtO?-2 IDAT1<=uy91]B+91&t㼮[΅C|^CjMacB^s,uI 6N)'ڏ?jZ~{Cy0e0y>?=ݺa_sĨJq!YPY 6}oooXnL~$@pkk3y q<Cˌ`@6 BrQ7b8rL M'J2D$s62=!J)CC ^z]ס^ )j(Ozi%#YK 嚵!l1Z,%ז[%')S`ycS5F 98/.rA+.hL]b8/9D9뼏!pƶuE3ƚs+1λ:߽5Y-ѦQG 5)h_\S˕3>ORtv֕jJ9+%K)kk]k/9ska߅mRJY1e-ŸHRRpy x[+3֮)6hY)V cuݖjc ޏlaOSu)B8c7gM+EH~֚֚T^M t3˲ SJ*u׬ں-W2qE2/[>:0{ Ѫ:*Yvp[ܤBZKRǔc˲5.mRse)[k6.ƅ*RR*KU9/5+WIwQjfBH9_.0J_VC̥6!e cYZUjN̥h1ښ6jkyZmJJ\lVKJ+Z)kJγVkg19߅Vwoo3_~~vf a wNqi[?|.KMi#j])"0]Jꬽ_CoRpV E)1<Ͽ}!1!goJ n{?mQ/4T)wc1~;?ϳ|7xvQ&`HNK,wH\O Vvh7朿;ו(z<uE U}#.((z|c A*I2?C>.Ip݀ct p0'4}z#> M4ue, R!I V{]A`@%8)@$`(ZΠ2{jAqE(  <`|t>@HEP@$/mxTb?T+I9iWX>bULgڤ|[ &Z)G13eOe]zQK$K](% .Rkt8g8ߧjy:ywό5dZ9'ֺj~{{=ۺ朴9)sY+vU.ЯYksu)&d-)peO [k;! Jf .586挝q[ΚR=dqeڊpRR첌z8)Xr%Ðsa뻮V[)9C~8Z{ym JR.,ZJRUƙTXn&Rf".T1Vj.k̹(muWjmRʵG#oRRkWRk͖ң6Ʒ[k\m Ji)bMVjL<m:GZ.?*E'6fRk1rb hCvzªZ;ѴVu%7O7:羽¼x+rNz>᯾Ur!nv>c>z#es!+^ZkTM[Wڦ|>Z?o^Yw?|_o|$*_5-0՜rH!_s-Zpkp uׯ__^^ME}!h %&] (A@ XkRjHab;cg`Q A$Toj|${/Ru13G HP=ݎtֱ=x<Tt]06$MZi$XN; @(.?5٣s萐PFTU7=0'C [e۶y|@+ nġs˭ ЏYLvwa*sx)Sӗ֚i:8˺!$qG+%1uz{baRPBܮNU؄6m2MYbt<%p[V뺆D2ߵUP 5:8>c 0)1B\J`Q\ڼwϡn3F)jqδhlSܖeV9|Èi q[Qj3y]7MpLkugk4.! m_|~uBup⣨--M)OCMuVkp0pbLFZN )䌕VYc6}v֥[mB쬰sN)SI)ig#CcJcSZkmbJ+TeMrI%K <8jQ]C89cwT~|]*֖mmYH dwRVd[)>7B2w] z4U#(@He{~B(ZY|>9k/BO}jZ˧'ityۺK)j{Ows[3t?1>iZ[gb)~1!l9x<x:L'o___v˲p&9iOO_~c(oĆHQl5p?B+)pc,uS @!t9ceclGTKD}iqZIJs [µ`/R ?ҫn^;4ȏ!B t0B4Á*rq $~> ǒ7c>qy0UTuՁCE6{d%)Fm@n7kecMSIvF81Z֝Jq6Rbx,H! F ]H-lG1XM;rt48إHL?͆4x0y%|:`pt8rK1~f]Ȝsi%.ҕ$uT q89V+Zk?bIR gt ˅H)ʘ#@OsUcYK)*)Tڨwi:K51zRJ䌵ڴV5V9}u>ZSR*%KάZZBk+ZSJxy~:?ՒuIɹRR !X%ר`.%3V*S)Uw4jFRj-)XbE2&b Vk4*jYkl;n۶xؖM)Z9#klYC9}i]1yBil$6bO4Ε1T|mL(hx*{O *⬋ 7B7T)UJbaƔ5kcRicLi\jRB!, 92A].j0hT[}K+.}HS7zޥK<"8M+#lEm%#_utN5o1h)ƣv)nyKBI]WØSJyYmOOOƘU5J)uUFkaVk6ƘK 1o1$0R~v~/o~=o>R^_z}}ۺc6ݞ\m;7q9u젆ftE ΃t-~h  {XXPjPRQ>8W٨a 5E?bPU.ONnB4z*jLz.m닌Z( `/ 2c:n 7ufh 6:#唕n-HԐtu)Ɣ!̤ \C1-+3w1cY{]Ǯo5bkLJ~J̶niHa9OSUF{ߵVsJcs)6qªr9bLlMM)UjYoK-E)7i,!ҟEwc-yFgwuuݺ,R \ SΦ!Lw[!,罾S@)nM&\ӚNF%jk)e͜kъ _Z70Hݛ4Xg3V@!}s. dX#"TJ*Ykm3w]+sٰM9%.lCm|DB SI]tEhu^OMƬ۷?~@i8LVt-I%7efgv]DhB:2b?B4M0A]\!(Tѷh !DC3#<+|ESJFh|ֈl!z)qS4aSkUZA"Z~EBFky̘Kڝ= ۂKy8RZv<I+Uw)%Ҙ43חV8]?msﻒ3iB`RI@%na朵ޫkhUIi&V V58tN:v.)kaS Эm!﹩_f؞gc @π)==TI"j7۹{]NDk?1u67qb?cOF!9zѐ&BܱWnς.Hơ>-ي89ei~4U`!|"Jd0HPcrC D RQPNm]_tb!\'(K)FnR.d"KDpE sd;1-K$)LlD+X¾ؖEK B2B`u?Z3b._:Rι-n9TNiT80bRt`iҪc֜m3̝?|%eEdY -%1{rme&La1lw6TkQl;s2w{3qMyZ-93;kQZK9j-huy]1? (t!z{":O1rQj@Xy^9CjR({,d@YtEM9069>au9gU 2L;} o]kXN s˶>sk`>Ks|lcJ)z笰2.~41BS-l{8FkpNm .JKn!da6p`ko0 eG>j{9;Tj3FyңZCĵd([8"cv/jIfxk_C?Ma>_/![plm&kv[R0raBuN)5r6I9ćIt:Nx]Y)]wތ5T9v{~~^Z "œcY[Oy 8 Чf )@ eA|~] +o$B(G8 I_* \8Mk CYg$7@JL$c#B`&Xn"]jVvDmD'"R<\@9]8&-h5tzyyyAWcwMMDWKaur1\. TJ)R\V/my\aXDyVB8 ?s<-ÆA#E;BIYdͻ7I#j >Kض֚ZkP;cL+q c{kZa()B5ռ,ﺔӶn4-ҴS 2r^/~mŻnLJeqܶU+[ƹP?l[yLJM1ZH+C .QsֵTk Wk a=5eKJiZ+9"HVb . ю2n18wOU !TSu0Rهwx<jse]K)%"r]Wqܖho̹mTB؜c癘K;4ҥuyS"fb5#6U2T4)nUiE [ۚz}r^P+i]ׅ $jl5o/˒Ju#21uݚX&ӔjzlAuk$nU zd6)ƘKkBat .쥵 :IDAT#/n2qŵ PuATS[c!l*u݌!ćaJnOHZk ܚ 5%%egq6#p3%v;ۼkKYD߿tc)~~~9KD\ka<==5p\?iHR!%LI5`#SM9T\pŭzEv+*RʙSΘs.z,u CgC:0UM;"&$=$I`Ĭ N0 `f)STKxeZw%~ l'Jy@J)C[kψlIkbrΏ4ϋac祖la11k-XؒKkUJr%犈Z8Qbh rXGaHE9,&f~{{CٽY¡PG&k\.䠵pyuE|gTB C si+nE?8 [6,f#vNx []Έ]QAeO Sh*4YČ 0RpGq` Ow(4A#B#xpӟnh ;@( :4lvё{,E4߉E{t…zc<ݙqi)hiӪ1aI.)jD'#A5e,cºbL){Ҕq଱ཽq:sCuz:F6?==ݮV,1ZM)T; 'k4Ւ現)&%Vjwʜ1Tj& 39 "1foO0]Ao!TzELΚVj5d ̚<;.C8}KGƒ]|U4 Pھ۹}kbI99ˢM0󺠞vwxM 0oSf^q:6˺1)TUJ4q*X;\X""M kmJ)V4SJhy}ĥ6cg-$M(ƖZBy!K4iX309] VLq76A!?ro|v? s )/tDDp 'լ-TCضyqJ˭-v~PPRnX23tRn| !Nd4_R|ۖ?eqo㛢bIENDB`astroid-0.14/doc/astroid-full-window.png000066400000000000000000010447431335422170400203060ustar00rootroot00000000000000PNG  IHDRJ{bKGD pHYs  tIME  ̀: IDATx]w>7` ,7D"QDA vPPTT`A:Klol{[yl,[㧐;IfΜ99'3g2 b!1KWBW_c,<0(vQaY<+A,˲,]~Z:H~AB* 0 R'$!(?]L(qDVHoj RJKu-= Da{Yd"ktuRWHTjT7Z HHo'OzWz^2ͤ.XlV$9AGwft/HJ1HXZ:/ $i H"ylM _fوHnڮnZȓIH!#noRad:IXCX#@$nZuiQQAb刾d%iRhZyudIwɦAO i8i/˲AӑD7DDĴJHk;OP)U^ zey'*JO|4IJgFvf)UH6f+Z HӁdb Ibi&P˲ 2VlJmƄLDVdH`0L&Qm6dOiQj1e"I ^齒%$yZ够8U1%@ϑi:2QJަ5~Rg%UINsg-R,%csƽFːh-  )L8tE/ 7DZzJ땒T}%TEÍT!Srd)=*JO,LݡTGsrtH""4E**V㤗z)U]!j/[OӞ4'e{qe)gL"ѽI&6(Ti-j@/dJ\ѭhdmhW@N(gg " @nmB#EՑrzRJ.Trg"R2BgU( 4;(4Me>YE0 mT6?JOT]GҬh%T]#$ӌ' " r:O\-7ͣ2 6TEI d^ZbҺ{gݕ^L"W΋JFϣ("h閒UN)Q$[j cW˙}w<%Ҧ="2cG7 E٬I#pXd⥧@pTmUaY_ |1VV9:Wy#Ml(W>-~h@"j(gzC.@>̩*EPUI&Ou DZEl=_MM=@dӞx}ɤdSm0Wr(~JLcd\qH^ *s\"$M<Ȝ(DˇpNdE}MPin@dBw7!^R"ʒBg v M8=ig*p &2eܖ9 B_E TVR9ߨƒdK U ѦZ?GHѼX97(}dLgjdVlM2G:|=VHզJG=+COgAurv$A!'=FU|(`:-IzFlEf U,B~3mFedݲ—&H}QΉMWvFY}IKE"CEUsTUE Y~8s :ӄ*cy2ERi.*M=q)eIbNR!ɚR\JSNgtۉ)8nRvyi I]FV 2YhX1fpt ˲ү7aN2j耩l%K,2TY:`깕Țs.V(_h?vQ[gUXRr_V[BV飒YG5"T#MJ(!KC U"pܣSr&vFd|E[U&z}/=Y _G`2jOAXg*>mi}9qe&^](ҏ+W9Y}L32'a)i$DhϜ,OFGyxr2 KjGOB Iv)=2w,+H'B@UeDtHrX)SMd5<קGKzN[-iKOLԞp饚*m"yoʀLu" Zoi5 Җ&z=a2FKWфȌ49%me YTQ;{|s)"TI*2QT";NV2>A;Toe'eTE暒[^KdYP&OC KbH\ZIF n:4m"ex"ʨ^tHoU)tbҹH7D]b)Y2+> B+ժj,`sE25[6`e o1]7ԐIrIGȧh͑%rUݽt~$YArȜHh.K6JmQfS:CޫL(T~R#Hx1md3,JT^i E?*)-L|Lɕi '#Uݴž|"bQPk!٪6DBZ q#iBk E0jۉ/5ZI|DN-I&{lM3P:GFr_ui:;VQFdy<ƪM:Ksr(WTɥ5V ΢c(Uwj%U̫SZ%z%[U(JjUT W 舡r:RJm걫R:TT*ᲵHsB߂(-*T^Kե-lˈj:E$eobBTC0WT@ad~/ZΒ pwv:J{'>!Տ[djvX2hEU&G2Fi-c @(4ՐDJ9+WY2sfe<+A 4hРaaP9] 7IV 4hДu,|̻|To}Tt=vCuTB#ϋQ=SP}܍it5RmC=5Zʢ2HnQ=''5B$~oPy`n|9qoiڤ ƷŜpbN 1'ܴnZ 7-愛sM9ŜpbNΙT~$TH d#[a5Sݾ&&|kۤ}NX9S{s'š 9FsRGg藛"y-|| nkqbNz|Ni1'ܴsjI95dT>'z[?Az@a8ʓq> nGsjF븠y,<}Ϥ]92G/YuC?5a- Ɖ]ob<&<0E/]/v  >Eg$}?D- ]U?-~<]]<'t[8|Nd'_IJ[T7UnLJn횡\b WQڶao5#UFlL:wۓ/ "&¢[0ۓJ^>l(bj//))"@]ڴל85 t[{ScXQAHI׭}yv%^q1,0H#6/_4t߻ήL1̕v&%” w\rLL#^;6jܕA1ѩyCn=;\}!ŋ5͊seIHUZ1iy8&vLZM]Du[yQ'\&Lj/#fn]WL!<9aLD;/$_*u=Դ# kh~nX>w3E8˰{3<1@;s1ڏ~먇; tsӗb@8&E9K ٺ=X Fk^v3P_z}A.~m|qdё?,lxw1[R.2Ґ]ק"y2PAyE19@spIγ9&O@HNy Yıznܷ>1wGvZL1aL~:3"@'D7K U71zj߱|z#|+paҠNmg.a݅m`}z6[G]ۿqŚ| ISYh=⎟+lrэveKNv )ȰҎעWš|źnqrE[ T~EƠcuؒcØ 0ѽüu%^;s(K˾1>kʦ֧uB"YLD]>?''Hyl1!`E?Wgӏ۬gbHuDm* ȷu#x|5!|fưt [TQM$is~?2R#fYa , W# VBxގ|QD {}ϩ oԬؖ a{b Cۮw١\h3xBxۯl~s-OH^aE{6[ߎo(!ݷb&>ĦmGPC&c9ċIۮь!Ыl"`7z\!#/}t-'ѦK-i>A8XNE1ctPˤ\te\†3޻RVd`3y6F RBڱ>?7 Ÿ꓏$ gmګG]8>oĬ1?-+*皬gHM0l!NͮL_9gb@^/6{ί`:{՞>v&kɞ?/|u\)eY罧n&ob0.>9d8y׿|m^%{F[t϶\[֎EQ*J 3"yu* l3] ߹olHi1 `<ŠZbGWg;S"Xx`›<?rdX!AF3J( 1!l/x!Uha PV˗V)jW[][VT iֹ]HPʛXϘwNh;UKss#ӇrJ%;Ts" !0 t4tBGAWTdҖ[˸h]ӈ!ݤGep 8B 0F El%ec+VcqҼ;U*Ǭ0ĜYڶiӑ~t1+?S qaQEX E)?#DmQ1U4λoTɁ<0\ >$du_fNJYh,R) \icQH"M1p};!YpRd𻻓!z!IbNʬ%m[tn=~|!.mPBDАLhXDh=Nj]9x +Xr<\Y'"`MAJB -Y|EfYҳb#[6]ʛ|o&DVW}#&MsD`q|$[/"cKxä pk\3>;袏,BkS0_#"!H:|oxOϴ wNj1_x&gqehPj-ZXuauV52ZԞT/m$9rtGDIw)\?\s :^7Rij?ns+\}SZr"{# Lh//`97X͙W+$  /<$C&T\bƈs\Ŵ\=F^%5E^5,@M5e-|s̵~wOIŷ9Nn<]sB&I Eg4)[JG^"r$@]0nmWFsy C.\)fEvp2!\ h IDATaf֋YV~W|r2=smu⋅xrb[#GAZ&~۽Òie\R``pƉK0ff =W"8< )7~jB%+  S?g{)B;Ym\4 FLqܡssӡgi||3.\-A*0E*phP ]zHNs_8$0.wus?7#$z T>!C &8e@H܋:[ctChWec` <|~XK_nyd˫OePI?'$`Cp^GLPHWŲYT F?/[ҭt{' .]6{ey߮ILaLCtkׂs+yϭFEʛVBm+=@$#kOq"ðR-/N?lKZr 6u˴: g%njXTZÌ{vѾoÉIT֟p1?-!clG x3 [n]<J]$X3nCxq?Dh߷q"ש8{}~ ~W&syo̻`NЦ9w{gZmY'Ziws;}3o!L$[ a q‹3iVꭒ_r>tgRf;sbcsBAsB=Nj^t߫׳&ߵ=s_Ͱ"0,ؑeTq0D߱qbEi\x%%Xk0L>G#[gӣ1g314S9S?8=CrԥQrt,<]tJ,{#Au7F]M63 'Η;bofպ%#ʂyߑ2U|NnMM/ aR-:/}Fo9ỉ<ɷHw0'.u#y CU 3VO*tFo?sˤnxI ; GoDb>Յi 7f$6-nHv̮~׺DZt%n 7f3s7̜Q$C`" 3V ꔳ%RN3M">4hРA Hs!y*GLf#u&Y 4hРACQr[Z:MGoRAHnN$A 4hhJXbe$Iڏ@v/qT>M&OʴM4hРAt`W+sط2%4jРA $HNJo"$ٹ SW|[kРA 44IH'HDHLpW T0'6iРA oI+iexKS wLjBNiv51y]~`Fׇ r,bJ]5N-ǑqРs) 3k&TF"EfU>7SԿ8~}9j0ﷴ%`!q;g YsδqDq:x~nf_MAF,9z.Pڻo^YqGhѧh+?~iܛhΥ~?ǽ[uʒW6\~2W\g"߽ÿ3x~_רO=]?]Hc-4 h44C}gX <`H^bVZɔm/0xFW[sqM((ߒIcY8d!=(:NV XϞcopvOުCtI`ٱk/ 73@YNꥄ2 bmD0Ȝ}t_t!WOL-mN7p>vsB]Թ 4 nBۺV5^ST4;nϺbJy~=v}s n1+?~棗^H0?`Vr)S?t{K?2נ/L?soXL||TWOOV i!Wz޳VcOfSVfs C:cU\:z1A:n\۽nld5kŜ1:V4prh1˅y aXHN`{gB<Ү ѭL]EV5Pw.o:W԰0-\&=os!dphmȀ.`KVPhQ6Q!M]q84!ĊʮtFVmВq)!̋3 Ew;x>=&`?[Vϛ>}=tq6k]^,V+Rɇb8wgj>W̕:CǼsg~l 9>rVtMt:!?AuMvf$r&gh=PЅ˗:1M#Nǝ;߿I:t.{*$:r nnTpWTʜ PSXEKYd7'YkduߋC %b+:O}d~\Yf'q1v]3J6?\=Zx?Z|q̧Wۗ,ٸeYxMysPG_W]Օc:؋OżuMolgs/|9;2ԏ ;JZxgt!<.oCk3hlxM&c%yo}>+yh-Sucۻ_!ʑKWǮ1:>س\ CYψ~…'Y};j^Lpb4YQԵ`ʰO{kңܯO,hֶGQu,BS([֋iBk?pM9;TIwԏY{(U1n A7͜ԝEvPI5M31W 2j}e0p՝)%Xf"0 L(юuܑw43.aݻt Ah*ҬciвBrO09"̀=~8QSݭY3(~V|T9\[g/K((I:Fq>2ṽ"3,]v%l)ѩ@y'; jIޭΑwۉՎb{w+;5&ҭ&+$Ч0|]}س30k`Pɚ}#\8)k"6sfX(Lڻ7|M8T[&mZzpМn gRPpqMn!ne'l oӹ{VWNxGfOG?bfY7$`N 2$%2A>d&hMhkH;A¼]TWGϷi/}a>v|*ڄ/ľ⤞<4ήp0Ý!_g:\hs{NglҙzD5+jo yϪ>`/=kZε*ei{% R5>[s _b,>x=aNRsVzw_LL?u Ja@W*\Gơ gVr᫪~v"CޝN9(@tqbY_x\@]ܚ7ounT"_gK;.%wvo} ukYr^5QH2cUNueԋo3Ѵ&E <ϲ`pWeHɓ$jug\BR:pEfׁ`03=:zvK<[أY}#޽ʏ ^='䋏_;q /{EfiV'rqҠA 4hhzI\y9nN"H N ij)u4hРA M*BX+?N : 4hРAÿMtNLnm"v נA 44"sqaaiKr(`Bͫ>~wmI+(ԃcΞ?el6_ty„A@}R ˲2$9hGTDU1{&FWg3E?M2`l"X(zjugf< IDAT܇[+ ~l'Y%V>8Vޞg(7-Ƿm`nˮ|3osvݳu̚E.5ңA l" lco/t(Iުj'ǟXɑ\G禴3&\9>1?lyn^t`OD>oƾiOz0Ye'Y=3 i/O@;z #_fk/I:3k/3v%zO/ö-.Wt(tuI?wq̾^]#>L]<+])„ŖnnX7$Q.]< )7c&v<>UZS{W|]Κ\ } 6*kNni'z{ky xZ`_so{o9};mj?ﹽ>>0ij3D~;[o;XGЙ¤s/6h/=闯tqw.^v,sxv/ՏpN_d! _n -<sKz.9C4x2o+|8?צٽׄs0ÜKNsm?/W7zfy q8覱Ӄ/jWZz!x&WxˣWWg=068᧖]_} ͜=0o~8TYrnǧx]Z,V&uxY#BVzuޗ<2Y}"> k7^)aFG#Z0'l2ښ+ u8Ѯ`/͇{mV ̘؍E;sM:t,Lqmׯw=wc[zI/w@gFYƑm({/])IfٯFw1p@kti3zU*{3Ԯa`x&nGBw)[{5w7 b pnE9K?&2e#”ف*ϩekz@hc__~;y|ȗј *0`~gC^Z[X"qOʺҒ>>^u>ʓ_?o)Ww~@WcĨuj:F:״P@.z4.xҏ]X=sΞ8\juL8 XZ"=uӻV%색+3_Y9wתow ]vJ8ϜsǷ0>}煂n|-ݺkU=.նVk:~&Ob{׾_sshn=ϹPtiG64ת<K'}gkljՄݟ/M~uOo#`ѼKw}ˎRGC#|;gܻ鷅E"vj]NX9as& Gn} _GzG3C/\]a^mpK$ 1O2o3o~*m1bo?zw?/͵4 ĸiU>6;q,/lNi'ڟ鬞*Ϭy~. 7dd-UdU([3y^<&>>6?ZD X{?:;{+o-8Û9Sb{@pH՘ mϝ-Y(C'9H28)LPe՜(-E:֒)G||.@T[dAHn.\;|:بs9{1؊Zn:c>U4R~ݵ,LG_yqg #>vbZ2|c5U{ȥ]yO飾,+\k~J?uUD{-1[77B>=Üve"ǒAF~mU%Ewx*@{fJ(_߫cc6zo)sv9X>>d-{xo't-w: .%Ůr5T7:SZ)GʬYG]myI7q0k3NU5oQ-ܤIE_ÕlmR˶ݹRv|;n=|\֜Y=LlqƘ^eCX=,zxߚfa~F?.+82Q6~x]'#?z`0w9BZؾڻO ͂5tA,fxeWz^z4w۵[{1tL@7fgʼnq=ѐ~CjߖՆWj-fFg"%*K%]uo'T1(b yKt `f5],#BAǰFE琍tW;hTG@,Y-g!1D8bX^cvo>߅, .t.3ta]b8r/b7ݖR{q~T/|K }tLL{GbN7܂k ` 5 ,xjڃsթ]ѹ9DJ*A5u6۷;n`*9|xU;(_k*)p͔'ɖ>SW[g|ab}SZ08y1o\/e'rU5lQ-橫x~UJ_h}?0`#:;> p ƕ]5g]YS\`!zV!Ͽqv/zL{r%]v 38l,ufԓo{2D1 ZNz2V؁UCLўW2X^)AJ̞%ו!=2؎P>}!&BΣʯU[tC*_c,3Y]cP4Bg7fü-vrvO?YWGh28} ,fB U RJF.;:R[ҊdBi*W6DM<Ӛ/$E|ȸiُ|]^I ՠn[Vqo2h[~b !C}t@QOW}k,ߎEs!/zrs;Cv9g3rwԾgڍ^e+]gM-r̚@vJݢ=zV}i*dKA:Ikt&/}Whޯ̘/ۓ/}䪙?N oS,Bpˤ7s/9u^kkGĜmwF1xrҗBʉ߾(S@hS4mS/,22+]U Rf񽑯~8Q>N']c~X_'h.XBƕ;?+^*G κlZ*|B 06^6 lh`w.'_X97T^sef:'²f'K$Vb^޾h>mT%a~^`snrK$cЕc7 <ܔDzOWF,=r"w]X[KUE= Kw ؁b+nnA[=nQ@R6op]aPѷ_??3眹3sf$|[DV⬘ YDQ;`ɋ2~e`=*Gp42M\N̍r/yJggHȴW'(7ʛ:1i3m[?w;wSs E$7f849vxԢHYc#ҔFp+h#)^ART@RZdϱ>WJLRV9Z)s=DRț᠙کQn'f,y%_oCm4uS+_ȕz1)0KSs2<]UP`&x1-s$IBŠMQ͝{_gt>Ǣ/w4۝Y&4v㘰$JI=׳Mf5`}caFDc^d{0_A`ͽ}',%rq=E0x;87YhQybSfKBQm}n? A5jTws5O`ʆ!o8_^ߩwWqvc6`-:L0%{gip5_Sm–nj=`ԝN#l 66q$Ŝ f.FY/C][fP?<\NMi嗫~pB4D=E" L '& ͼǎ3W?k%赙hP`} jܤupUY澷_5&/Ah1xԿzi걠#]Ş+.ܸ"c:p119W?Pkյlg`Gx$nN<֭[)AvQAdػ4_9+2u4j! mJTߺ,=Fy/h0OAe?I |p9"rkg[<|prٍy-z7*xF]3.c܌u`Ss|sI۩LyzsI.3LJn9v.}/VGjojgɇ}_ؿK.PnpE]uN<+4XBV5V7 I_,8!VڕIK*~N9#ude\r\.gp8<i G5jxH*}ˌ&}8!"FU6J }U#=[7~ m/tU |,ֳUdiG-*]ʜ^2{ K-?]FMFɬ!-ᗙ|(k^EB|ۚybe&ֽI5o M(bc4O'<(8f.4e&jE%, Ik̉x_]Bk՞;WF&]=pyKOG5c[2c0L&Pa?4T;|MAcGzu8xinAtAIwI[jKڠSņf$"F4"IgQgbW*JRQY]Wұ6) @U+D"d:w/oҎN 9X>炆Oe,&Ҙ.]}_˾/?=8pq?R#3)>K%Qj—?)Aqgﰑ,&KWg΃Ma9y%-N~WԾs7!\ޤFe>WZc؋oARgp)\A@?q̤_kJxdg;c=}K>A%X}-K ־c_,vF[w_?m/ֽ(K \A!+J`3fhy6FUL7 Y1}|"U!scJ.Ϙ|pqٷXlɾ ѲZ9y6#`0r(9\8@1*(U OP5K̪@}ȵ'؈J45twԪ.fߟh~ʁiZ[sKQAZa @B g|[7UνBwÛ'R:@t#~̩G% ^0j=M~3*LL% "8x38gbcUXZ;W1}Q̮ӣF9pj}S>27R5{sԙז7 {S[We^ccJpLk)үy`f[ul $;N]}Z `Me 2cO"MpCHDg~Y#˟ '=*5Ϋ_yV=7Cd_C3sEz:MntL01^ :yڏ>Vᤶ̜BS"Y2B1~;1_-mN6(rntm4*sF0t\z ?v}SeOw^H{w_^Yo!pjխ@yiɪ98Mg,?ߋHΔp-gNixs$DTb:q ]  -W@I X]$gHzݙ;9q+^SͪPOLcWNeJrFDRl]G^nVFbڊJ#EB0NNVFUD2v|nVghaک&^a.M9Ťg*n yCCI IDATҟ/z7hҤcRcât7οP}4=]-xuΫ1X嗮u:Չ|@+__ զymyfJ]]hC_zmP?eRUV%L݆e1og/ԣ|ӆ E mX9le. Qކ j߱ƶs3F7aB.^O_>JSCc'd4ZqlNFp;..bg=*=%lc%[=%{ΏtRY-vU7RU<9;VLt]-&Bft|,SmX<"bVj?>/|[c1-ԧ𪱧 篓Q|>g2\Hl ;u?]Ֆ)z\<;k (cG0. a}c,fWtw6|+p4kl]{"~C=9{[idx#oobՉHy,EUfֶ*_vzeXBWøU|rn<%u3rY=U侗HR􈋣>3ێYnfv09VFb`R! MUg=8-9i"݌aSSy]H m4G [ I$GAp'OXuL૒ LVv8} _ N"-Y#z]RK9zVie V<5# aۇ^{rM- Hy,sQC]޹5ݭaх QdV\,2CV"53e Ʊ`(njE(EPZIkjgH n3AE{CR1q5+yI9(+##1q/l_>W5bbcիՔe?.b梭ZԺi4#*u.t'$p{ InOza,4 qGAHN-G."BF}v]o?.>3/9a,3) &xӠ|2tsгiChe%<T6HܘNMI2 FyxTehkC%Ҕ"R++'wwW%)GziX$4 QJvOK|q7ONқJzTx>!'Sߟ:vwo$<:`лo+ ĒܦՆv6"cVj_WWzwl7fv&]_Ϛ6Yi׀Ň/.e`oXyʎ<@uo79ᓙ}g-̨/[ʅEH@Z4*>uH,.5̷/Wg, F7dsA-\Ϳ*x}W7T$M~tj.kLbk}yګ>)kӽ( 2=d%,!LDSdb?1wl=vqsO_Hq٭֗MZWe{^oGhS骤($]aLvƅOsԁ@Ω5AZneG^?6)\ 1W>VyS y/f53:ɵ[Sz9ujDq{GxTYh,Wξ53>ĊL&Z !!A۶8շnh,(KQ SPtOª~ܸ@3=|prٍy-z7*xF^3.c܌u`Ss|sI۩LyzsI.3LJn9vj ]^fjh&H{b$/<~fia侟 #v'B;n+s87M/._M"R>E3i踸t%\jP;nE]lX&҂N[r_O,s$K=g=S&Uph/elO8-'wO]ʇɌ\u) Ja'51'U9G###cƍ޽311>|{<_VԾs.\pKě-BۻZ^'ٷ ^_*(eqC742d>,pD1l)t|3Htn;_g&|c|HH.Z{dYߙ}lBVHSvOͯ/)I!yh@P\lbWcwӲJI @lVqv ~De^ (OhhZokN 91C߼RݽM˫r"fhXo_"}\LP}g*<\Tp\1=CG/ _ܿXjWgc#-ԧ=V$8|aӹ{O>yjrϿ1dG_NWK۪ӇMko[6~> ף^wE栾]n_%75Խ0q0@%:xFl1دH?p6!tם}ƞ9tUt"0jӯe +Me&^]˘NZƈK+73k( V62,eּ{ə)m .7ܿ}'r_>}ճ$_1סVWx;̀W.e bor5([G/.*Ukֳ7W%4)b͇԰("O9*0huful$8m_xMY4B=}O3_HtuiG%:.ܡGL:TKϒ6"O{xLRgN ݷdvAL fLY.}]P؉ b V :H;Ͳi\n3mmkMcT4^.=CkLl PVbK*ğ9sʕ+J I&3M*}4M?[ ctzmy_)/3=E7Z}|:L=;&399*iȹ6ͳIhwQ33brWfc)mIW?eRMdksC%Opz &VCy6"29G79VZ:D:Wm>s'fEm/EBMg_yߑچuq"63c ZKS3j~ \,ylOgڋwy27T4{qy&w5l<`5|:u[i3RKeA!+j}9ISv16ۻie>y3BBV_ԿݛT^^<O^0_'g7$Mҷk /Π"N tF\'9RKsy}x}'͚5䛲J?7\BvZ)6aEݻgͭ~EU]jEK+ do>NUj3FשZzjsj=f ld:H߇Lk?m]G]\VA!+F5t"(dEdy>>##n'__S`8XC] 7iMxQ9 jGs2I+[9Ž3wR\$FWc&eu<*˷+KZ,!90N B_%eJS·}Bϭfϵ13qE;߱:TWaztRY[*8qjЗYT;<`h۳yT[]= J#P96eL  D`J19 (UOtd\`XSSy]H m4!=g\*j7OzdIW%=yOOLF4kD9wJWb-%Ҁ2S,j e*rD5eIwS^JԃaZov[vMzF}'WzOM>?+5yJ{ʩ3܏4M{8lyyKEde o10wAӔ2X0cA 4%]2?,m%jOנUo )Lszg,{jM:17j q \qE[.Ʃu1h\NH4y浖S u׷CqI8"e~9 <i$OycUDbipZwk/Ԫs*߹U+RfGJA%)%WW#)~\5.jV=vۤ Ũ@qOl 6il>t;w&iSobfp8Z 4U`@4R*i6ǜR>h@_ Xϝ;Qm@_JFgnZL+:)}Qa]1ٴp&;e$Rs<3&Wk9߰y_+wǷ 2/2Cc77o[x  K /[q6ҭk{*Mf(4S0Д4Q AA 3XkQnCwq9u+i6jNX_`b9iJERb JIG@Ё&I1O>YoX7p62@q,b`W5"@eqSU߀朼L9˘X@ŷG/K=F}Y 7{7ԧR0.>3ϓ7w~YB ,4 qGAHN-g$2(kjdgcLB-Dm"#dg ~Ec,3 &xӠ|2t`&aK!)2]T8pzmɡ\ezms?iUxib˹/V>y7 I4EcSߤ:3܋/!whѶ|oLa|cmo ػvwѹ"S v3HuvL ;jmjQD1҉'\k{>~'cFzw5=I)#oլ~DA2_w-#4ݔOsŮ݌._ؗrEY()BOUQ?~#[Afy|5h\@m~HUomW~eҲG36^S߫q;!)q.?[ƽ5-QAWuҝ[~# UEPvX]{+%E&G^|)z g0ɻ_KN%(2-,y%+l40=KVvD}2v羽aL@MGS$2 @RZP"̣/׳ƎbcT3tdb:|8hNL:U^`?ݺu{ѣGuv…ܥKxb_i+')8q_|}GH}_fH%;7NnfM5m0Ӯ xMO'Lݫ?]rB0x;Y&}0>y`ݗq"ȌZa89 m_>rx!@Z4*>uHñ\A\.[~Y6APMNNϩgyMmrG)v{avբ2;;e;vZ}kf|:M@BCmmqb%o?XPD 4駠蒞=#aKOfr-M5qZ|rם|fv9C^--=/Zw e8*xF\3.c܌ʧv m&5i*paUn\ GDn yϿv"ư+eEڠ_ g^2, Wiַk軡gY.ǝj)<=]ܟ{}`M ]k Ֆa#uq_\v_u^8hIL^v?\}SA|( qn'R!.C|;±%'2;D _ho,bvxx>v<6ghݢHv;9wZ8"NiZzJ'Akw,1 ^.3yXшI#`#d~`=!?\SPԇ7F oǭɳfJLL0lĉ>>>.R&[H`/FRWْ2ㄈEW*5yYԟ-冶C٠K: g2~m3v,UuB;wn Ebz_ʾZTd}:Fꈫ:蠃:TpEzy>$!9'ؤT /M(< IlU :蠃:Gܽl&$)OD6qoUUtL\,B.ɌX#?gIM;!W]ܕ]ea#/ekicXO9At@<޿uf/f.}q<]  ~ iBCT\TEJJEidJA1!Ub5ƪdaLS?:H[_G>j;"9rO4/NvZ܈ϩCVM~'\u_pVu˙ EzqgxRQ(o64i%t7/{wʝD(gO}N: Rؖm^5xݯ}&5a {l?'6 W62>F}UP_I "R6o֤EQ1RdbLLko M mjLKv~:Zgzxק.51mq-h7g3@9DY5zz|GjOMM&^-ŒAnIۘ64ި_* כGIr)۶3OOʒ ~\51tqkiͣ398.3=f67i-k Rh`q\jY!ֆC0Ĥ4EB9Ă5u2鞮A,E|׻lXh2[I((G3p0LN^&|CsUIեTA$&/yXP%"LvLA S|ջ w+C7OfVs$ZR$>x@+tUGAIHy&r38B=Y밭M)$ѿC1*:1=}}֥k(m%M밿 <,>C&mN gt}!]ձZ]_lѨg6Ļdw6h~j^-Œ#kfIr~9ؾDM1KiwlOW ;+Jx e1gy&o񲠅9PTv՞HzBL* Z %^6iR-שZzjsu3&kZ4H9၂(0וф)"xgo!\,(@*T&*69$ `LɊ]&3VtMuX='#  Ań6 n dt¨F:(&h p! q)R9s4UaXq}ZJ ̐<#S9-xt踣|SV\Z\{8.R(٣Li0_5Z[o\ͬMnlD־L2LlRKOójQI?jЌbeoݴs5E)n7'\nnc`eHxgtal g0-**tZe&ϱ]:AenLUu=xS#R}ڗL>/JRRW7˸^P h"؄3[bweB?+r.|T4בȩsi5ٟN#!SyUE[u7>"qB\+ WZY'\urr)g&_[;Ǥj GL^m02CViՒ4piIX;!^~iɖMu\=K:p%{%٢)M4xER% Q6V`p|YrVb+ (T#&5/4OA8qR 4o%{6¦JnVufp*a˴K^_;JQ4(IV~@hޓدH5 (yF4%urޯ¸6mL93+%y#x#qӥ`0 Ap Z"#4ui'4 4д!U_-Q7E<"%Wcjۙ)S Ԭm]M_qwLԒV|8n(<_G<>+fb.|Z髮L쫘 ҙOB̔KæKV=UQH^u.3EP)#d] ^H0 8yɩ8BҴ.WAkڌSW[l-)+-Pw\ zD~mW\ʬ虥A/V*ɫ d$8iVKh׶n]}xkO<wyhGm s&gIy^]? /5BW8}*')WlsT+68bpbd!@-٥bLBSߵ8O}SD^p* ꦾ+ ʴ,MLRPnnk4 יh@H"9զr/avdARIȑ*@9R%n*BN4%%Hfbgɕ\#zzj5uD־Lr-;!Jl9n_v`&.(5\y_naJDr.|%.ށJroRRFm| ;b$ye3ґk^ v>b!RJ*ҖОH )͈OM#%"Ё53Nl#F@˿fDsm]*CS ŷԽUNz:6! e-/w=7Lɷl Jiw5ӞBQK3,+GܔSs$`z~&Qz5cRp3 1?h<}ÿ??7j>ӬOMݡYJr, u+gg~'53V6ɉʶkh%7!fU+b.m s%g-|rZi|H4ic}G+0LJW+Z:dv5 D;;}RR׏EJC[z :u䝲xp$i}j?Cc*n11a Bᄒ.jovtK l?KOFg3~]˄sJZ(y~+ 0IV"쬋 IDATw`wl0 헽F򃍁i ZJ2Tqk{Ѫ:X^a7`ڷyA @PcnYIpQGxp pUeI h eڮ^Y[`Dl}_ziggFX6lPpy.b2k$Dͺ.̸{uN :蠃:E!ꩿi.B[DXUm6UouVMCSV^' 3Tܺ&-s3 7yq0c^3j)X;ӵ0iS EwtSQ3ո6 FE/tae&{W"hoUƀ_ PRp }do- +uNML}bcdfP\ O# ??䅙@he.ՖcKE#]{OD>9oQ 99I4kL[9LRt}v%;IeE)-3ʅ7uRmxFI:蠃:-M:?!I׶]'U:NI=rI\UR7h6TtAtA&٤^nN WvIi[:o:蠃:ƍlWyXұ^Xgzʏ23><6)깙pAhkY;u˩\ntAtAt7a `r%#Pz*3t[ś ƨ/Fyut@uכc߯ c 0+r`Lݸዡ\& hR9w.j_x;?^ʅu.T ~;_?S۪ѹ%ߚD4~·*~vXlMq~]~Ƕ%_' jbќRBu)H]Kk/^ud6Q%D"\.ъ$u#RЅ+8xӊS Qb:zЯ (H՞`5h'FnHx  HXJ144>dRtW}c} G}r3ɸYV:cr/fmZ^4[ eǤ:^crnzqjvǵii1,bU[f ~Pۈ.ZZ/D\ RE3+um6BJt&в @S32&]i9wyIQԕa;\*4O\2{~1@;6A.T}1_;-ޱ-KX*Ʈ@ Y݉ݧW<}xna|/#f@R=< qt Y:C;3*p6N'_t9PPNr6! t _O @ qӐme,M;Y\Vs];/J͏iQ2\lܞk.+ җeriiEJvNc1y0^(WV3 lc_T]*F"3΅$Nu\`mC"eZ5mփ;/On**YZ|eɷg 8fmW$&rl8hFB;S\~;N^td+6hS#UHүJ.69˞Q=n*Gg8_Df7s6{ 8-nU/ G~='L\ua(!XqP3~+;ĵص惺紈 ĪL@Rx)bcL3vEu7 Z~oO6Q=QJ-(bO9:Piɦ&FDmnI<'} CV&N%1Vj=eL~⤿gls+167xD60è`>wp_{m h] Opf &h>rr-ޝq< 9=@&L ݺTk5bȜ` Gވ;pGca~K^X`p{13?B lݽF5)E#ӓ_X,l  [!{iY׎iȊ;U[u7!dů:Z2o?p:S@8T_xdDHz<hتCHݎgy;;#Cy?!zfCGf"z&{RjFkRա7#\߻r*630eepL-88 <7;kjAlDQ*kI=u*%JF~ C(2*[%ǒ yPl_?N $_WLm(F.6Ȉݿ7.P!(,Oqۻ)RLʅ-\/x5T>²y#jdK= {B)t=qT(t'!+Ǥ^l^V4/qΑOWOs6pLǤm_|Lj|L*m380hޥ ;SNK9=a]m~+#i_OJT>?6ϔށ5^c- I,R:ΘwmoW<h 6&hV& mR(&m~gGqq*c]qv$U0/}a'~ Awύ*9{عtGHksn1Scf""V--2=.9k`{Eư餰Ua~&z6'4|>pj^aC#6?*_NEa\k@\?G_OTs7金jN9$6qL[ײ?g/޿R% m_8m{iis#|otڔkԼ-Uھ.Щ'4Zz8sE \N?[+b E!QIʑFy5ͤȺ9=M@ۺ wf0̀h:4.֔a`[%5꼴ײ9l FAnxZI20rtc ~ZmY5܀io}Sᆴ2Q?|u%҈AzUA`N:^)aԳDp8Ľ5칆I%'N+}} cKf}|2ޯ*nTIs{{[$!am)>ɛ{& s{pJc2.Q-f>͉ڕwx\ߨ+|+|8I˞^ ĨMiRaMq:eF-( m[,$% y.ަl̺uXCΖD ]Gzca6"{uP`fhkPW1C 'aΟo+CN5H ՅaM%yc ;o\Vl[RQ6+Qgئ \ȉ'Rh`7&ƷiޔhzE(!#0zMg_5HW#8 sA/u0DJ% #6W[Jh*:Yyӂjs^_z0B"+~VIx8-h\Mr 7jR&>wg&W3H[z}B]7Kź±KߴΞ\ؽy?q"3-kFufLy'ak=KϑZ¶ҷuX~|I JPB36Cpֲ늩  $uDdܷm`051stK$,g9ҾiϢ#+%Y 9gX水dbd`հs19]eU;@1Aqu@(DP4M=s36,WBhfB[rXXkH]e6(5k d4l#c;47,T6puR}qͷ-ص2-3XO?Qc >_'MO7&4gTQUQ2$yIkY'_!6$)ɐ1[1-%%oFLHH#ܗՒH#J`7Er}[=cX/fTNf ˸ӑ ( do$ 8c6;D9A M/ vȞX-(G|rіD?t)_E Efɤ*)5rGx?262:dN7t2_^o5Zt^s`gC禾6\ {)9+AԋP 'vx;F7 ܙt}30-ny V5SM_~l=38ccGaGMbn &֨^}lg|co5MoPPH%7>;mԌFP3' WFUĬ2!D6]Ń} ﴐn ϰxnkoU45n-)#bN<(v"tYdf Gwq2X98y{g3',5+E4}ݻf|cllq[Ol$'IInIӸ&Mcb0xc>mo 􄵮6$oȣ9/j blj?KC=|Ys4>zЕ| j#f,tV#"zr; t۶9ihAnIaDav 1[ìIKP$"4"lnWV}܇W[4nDoI$qnw`b)mۖHocosXV݆LT0pv\dARto]quow5sKi?1k ұ 6V];8|zB)}p F[pqX1p%QƼ& &?uXԕ}Ǵi}ЦyZ~kO1jF C-WRI̚B_JoecCTݘQ:8) 7AQ,'ݤI=<<1P(T>*r&f\5tY2}bDkoG͈|ϏMk+-Wl>{ EqI?+Țe2Xh;Ϙ˦ q-kA}n_܁r/23nٲE6&uAX,$I 0 DI|*3zp͗뚜f\8o_WLt;,s^~\Щ\ʼ/HTTtAt! VURQ(8C 'U pS:÷ /=)A}-| 凖m2`N lm&:T >Nzl7h#\'P;tS:蠃:RT ) \RD{T~&]ķ:蠃:FRyh}M$Pf 0\'U:f\tAtCŐ&!DQjE 괩2t.rÏ R9+QP( e&u 0:`8N[Xߗ<x*>p׹S6t iYNsq)ź ؆OU3sK5Hi@U4tQ[T-I?R i)bm_&(\ⷦ*ʾbќ-\ KcҐrCn4OdfxSRlBQq&IgVR(m6d2$Qգ"@mOu{G655ƴթ«3[.kjp*%E `cϭtyiGnHx  HXJ144>?3K8?b&]:ѫ_>9EGr/fmZ^4[ eǤ:^crnzqjvY3[ IDATǵii1,bU-f'_?6ԽD6yADp㰈UsT2X^}>wJ/3v'5_#`V64WwӠ>> WWL?AWٔ-|-zC.b^RueGަoy\Ii^(Nr?"cw%wRݹ0uB~h>!mmYP7v]q;>zgJ<70xXg蠃u1,]  \.dtNpPK?P(pzW@ᤊRY9r 8iȶ2ruȬsvQڪZxWzyv]Q[N#/[&a җeri_>E|{lÐ!1 ~.Fؙ B:._Q`J2}KҗT'7k6%gi> m\r8I L 8pj8yyґӄQN>42TRZ|eɷg 8fmWd^cEk42iq 6zYh=RuS.L\ua(!XqP3+;ĵصO#m":W FGw2I᥈3lڍŚ//h uP=QJ-(bO9:Piɦ&FDmnI<'} CV&N%1Vj=eL~⤿gls+167xD60è`>wp_{m h] Opf &h>rr-ޝq< 9=@&L ݺTk5bȜ` Gވ;pGca~K^X`Pppsb@03[wl @.x~(xJfܡψd9 [CTv/ 11ݜbc^`Y#qǓ Y|Fup2u[@YUQNg ǶĻ dH.ɇw2}[5@^>ٷ){A#!,U] +[_վ=uLDϤu=ZXj{2/)) DrQYO9?*WU]=z$X<8-qB- S;Z+,=ϼ_/z۾sKwF576]HQԣ^Q{IC[rvs0ײ~ʹv]d_Il!޿ohkzZx](]rSzjXzaBHE鹵^{w-!(DG)N>zyfݧ(jGgd«gWTA56o6m{/BYy_|mXʠ+Bn9}cOɖ~{6<reRd{bPdy;ikuG1v<[=׆D$6tsdӕ 1;4t^R y.L9:/^)Q?S{.zװ{qKw0$Hiq8c޵;_YL5nژԣ]>Zk5I)LYŵ+pyS;Qw7pT_²OO/T r sK75!"ScfEE [9][d$Iq {/\2r`K) X5aIa"VM'mNhy}Ԏ† #Gm|aTn3"VOaQ!$jpM%~sIm.ekSC?= ^{ iT]Eٵi 'OhռNo۞m~)=$,4P,FḼ̌ DŹJ' Ց86U9q\%SP4MPvnD^rTLhuA&p>WpCA؋B#[:vkI򰿩)y>sL8ڭt-}KH-4'C*ے-/ɨK{- SaL1rST?#z%Ѡs9R|C ,@ nG'O@Gp;񍰷ER8'ysԐ~] ſ譇1\gdW]Z&{}Y+{8Qk?WΩc-Wqp=,VcԦ4k)o8v2`L-NiJ``1J&U$z&/ A rUuUxҫ̀]ӴLiE/0E/PܨAَ>4!@jߺ;ꔇ|7պsMꪰ1ǖ#/0W2LIB:r mGϰZ8Cз!Ssc3坄,=GFP'eQC1YJQhfmU'ҷuX~|I%K_,g9Ҧ<ƴg(($Yf$W{AS[Wv.l+&V[ݧ8oi<+`\D{E5sP bRNP<;oD )8qb̖ ݧa<9gX水dbd`([-KWDG&RrJBIڑtV?3oYjaےy2B9-gnVFٵi[)>C/2HʈylJg8$404L]ftԲ,mE|JRϾ\8>}/008MHEacapTnfL3o7htI [P*P~a;L^m_Hz:.{я Z:T>_'MO7&4gTQ5V2SRRr+Fb %2% dx\ژf9浱]c:썔$g`f綜('4eAٓ'hݡo:H;[E~D^qc$[5tlO ِ"9@Dah©DSc\Gcڊ^  6d+F mJsS5`&%CИAIǺ7b۟ #δe]-Rn.IuqYc(y<0U#Ү&t>RF4SG&z).V|L1djGJg%3ʻ$6 d.j(;]9xrjccLkap*2//|@*:HTUU7 ze GQTU//pl ,S )nԪ^NZq" ''#rC+al'T51x4cSx=v#a֟>AdқJB?x!SZ %nf vwϐLdzxܱ? ]JQD"LS#>FQoVzfF,;+?۾Eii9uIJȮn#Q{? I* ]Uv^VÇF)UsoK+a^[w6ǙQ<គ<D,'OI%I'+&Zo?83OoP5WL~ۂ  L>.zWfq_7+sBZ**Ï9%O~Nl0z{-T>pQ7ڒ_u>|bgӬ7JD0kW:i+e=~VN2 ~+iYudvsb I'H׬˯,%0V)F)[w&CF( <,3=Qq1OWI"'bɖm]} @nuȅv6%Hx;k밨WcWKdDŊ 5s[w5Q$#$/\TY腴(B&T0Y2l6*g8v+WT7h#I7Wy.;#xYaWA~G':d/~q>#xXLJuM}m1>er4ΘGg*v"ԸSp}w^웽ki3I{T]nlq[Ol$'IInIӸ&Mcb0xc>mo 􄵮6$*ytў?EAZ g|yt^/kWgv=vR3:Ohmۜ^4 SNX7m0z0w-a֤%(}[Q>CC+Egle$Ut8ŻыIo[V"}Yw瓧baZu2QEۑs͒yINUDw=,U7if ք-~o&FC ௥'HǶHZu&0[{ޏY@FP3BWCMUߡ^djF*ʮMK,޹w!s%.[8cQW!Ӧ{WǦ2Hsn]Zrlgi6'"tطG +ETM0H0ixr<ѡQZ_r&f\5t^[2}bDk["[dSW)[\%a|U$Xw<#.77_rYzwb Iw1Tpp}.I>Ky4h -+v˖ rPQNP((cA/59'ᓏ͸ >э t`{Exn }/]R7PQ kS?}"*[>~R(82( QEQ >2( )(:蠃:PtoeNKTYzH> N:B}OJrPa _Bm9TM:h5 >p#rNt>p pUN':b\uR(ݤ:蠃:0T(&IUP6\G:ItAt^(EWe9IPr]AtAt!DoթTU$UVTN:-C>o":Pmé{,DD2D[N,:\^B'cCg:u頎c>ҭuU3sK5Hi@U4tQ[T-I?R i)ѽbќկXPMJQ@ |oMU}Ţ9[JW^2/<4j*|VfT8=r*B@ P=R Ԣ!iԶ_Jnjp*ץ6wZ7$ 36zݎ*]y҉^ ,ɫ?WqC2RNyEݬM }sQyLѨs5~;v-;fwz\"V,evk5x͉maLsd6[0}UJ"H{]Ԡ)הEa%ﮋ>IBYZp:<\e0aiUfmRr=Uofx?Eߟ\aqJo}$uɃ`5NDܶxǶ,ᷬ>7j|s uF:="~a- oǑ}FΛFP!ϕ7o!i^d˲\摺 pg282?m9ZOk\x\bӟl/#a>3/>|k}_\@Zxg_ˏPc㖎lv/3ڱ-NM_%nOͺ- H_}9-,)? lc_YH{p> f\Az7}GA'?i'~24kp_r홂%Ά,Yk!(Ӫi߷\#ޢ5<t8ⴸW,T)&ߺ0s`~n,8(ޙ1WvkksF<8EtA&V-Gd K#gٴ?.5__I7{J;ZP6rru8ҒMwsM yN8LT94JTcl1z˘%,!IzV*bhmn`o;l>avQ}L[?{Ѻseᤱ'OM|ZJ!*;my6.s{XLu(jĐ9?ةwU)9pZ85 ŀ`f^#[\P"COMɊ/,[s^bֵcڭ9"&Ǽ>G'gVdYƿmwJxm {FwiL>ʈOmV}foSjMF47-oֿG٫"Ĺw';fX-pI>K#cOd(C\~5NaS;wuoN;Cskz89aɔ Be)Nh8Չ;X%ǒ dy 5xO89VUԎC9&]ض?QjmfX78r[>.ƸZ؅0 IDAT3n+VFyV4JQdIߟ߬UuI߼*zY:ɛ{&e6B|\0ҘKTKo_f3 ]y̞ߋZrN]ΧkLjeQ۔]|-ٮSfR`Z߶)@Rmͬ[5lIT ug=fh)"Wfn(ŕˍ0O~ٷn A]]fޤ [y[_.Vnea]|*ׄ6`NFN^K|\>12,Ar8"3D ߈&!x]N(ۖqe%k>~'Y $20򄲭X~ou㸃( .rIEMoPA) K塈rK Aog.l@1-}:VH=6<A qe[2WE2 Üv( 3Fka C)9j$H:޷,{FPLP|BݐFEuLR1̕a'$,bUU)G]#FMw,ELDWI CFQ\./pÖhfa);*`c}kR/Nml L^m#^áWq*SRRryZ$k}x^(3pRzm彰Y7ש8(PO?Q"Fb %2fr~),W" (Lv, 4;Zy &Kz_| &-#pO쵛nL iϤ'ԕ Pj\% HHO`7R1r M/ vȞRF4S>ʨGbQȔC()ԭ g6lyϲCBya ~]:6C({gW;ĒSx=<5U,o|f]gb)tD*Y$-OwY84%rPBNAwUJT [K!۔+.#tmkϹ \щ; W;uje|ҡ涭5TN+fɦMYsO ^1Az*yӛ*ֽz}^'[x'J\|WJFYkZ뉠::(Q.&t SZ37u*U)~4t JE&66']-<oԠ9; |Y.:%l̸KK; k :xO\LmX[ڽ)5}}nH/O~ N>IyY9QY>kPY=\Sr]3>jl} &T;^~z`հu1OK˸줣J;9%3+%Sƹ;6y#gw_1Ҏc5V5=X:y\oM=x, 'oQ ̸'ڦⱘ$Έںzs=nSljWAĪVGk#*Fzm=B>wjGx':&NQ3S|}'9*pI.fD&-ZhPq}6, |' H].Mi1ltf̶YKYYvh^!\uY.mWY&A>gȔD⃽ltw)RhiSD&Zd"ȴBLV==lHr]c'<s`\T\M~F,Gնԙ;Mv3:K Iiz#c] e&;y8:?5oUo+Su] 7rϮ?mc-BM([IWt 6pVc}*<]n@"¢ mO< Zt f=& S9gѼo;vMZ#mx,7cz֓FA++9[ߔ7h l_+8gX뼖B 2ȤN+X|g@SNR 7~]O *HK%$]Asčk6tf\+ HY6%K9/^‚ 6ڵlKU9җ\0A[u `0isy.~܎4g -v?4Epsn ;|-بtFMg9Mr?8`FR(m Eѷ01I3- =;D˩V:QN?dC7 4hШ ^ڕ~8X߲>VTJ͜*`0 A #FUդET*erC:4hРAƆzҵl4БnL&dRgvA0Hh$\T' 4hРA㛄fo!(ny]qEc l;_n Nal uexr.b`>w ,ng>Vʉ20t;wdmM'$=gwP'2+LY) B,fż7MD3JQz,GEnp1=Q%9|A-E6`K %`znCGwEiպ W^vrc!6 ˶uIi/_{]&f7k9EB6߲1 t/xʘ!.sבr}I_f[ⷮ(ѐZe\ycSԽUf ZKعb1Ӧ^ L&#a0ՒӑO83tHEy7s}v_*k{Ŝ= \dN|+x~­kϞ_`;9ן Uw99G׀%>S/>k5hOyS]&ۇǼZփxykWf3 " IUM0H2B|4%pqd\?ѷT RڔEv-)>!} muYUƒbn7M xp8|bNЏ!63lh`6 Eg 3Y\_O[pfE{3ldjBFaif.j?gM;S#3Qsp qY>=uc]Ǝ3˃"o<"VYawF{:ȬOA5kQ³mPN}ZIk#7|JRR`0L&S4Nި(Ɋ0 #O43Q71 ö}ߍ8}3fz,6<eYՔ$nSIaÔ?v>{{L='دHk2̱(* >^K/ +,֎Dk] Ft0#h}kM; HNLL G-8x `aYyۑ]69PryϷ+}; af#E,r-{̚us ߪ3)%׎ %? Řv.}u*S Qymmg? _;v t9|F@>PaܾP º*S ԰*P@ CY[2Yio-L8 SN-t6d3ڳ kkjz3w@KH2ˍ~9`Tr>mXfj` |%ϫ-ZebsL̙HRS=9Q=ۥ1ސ*d?. 3(o+5vF]9t+A0mH' 4εapku^X-\:*r Ջ!+A9 g*Kzw'B' X(*PxqW[UI $L]+%A~blܫ9|,DqŌ}{y*(z:5&P|y.mO`,[6RMe'8A@aoWý_o5ww[-bO-J9@ (S-ׇkfĮY.ngA˔3߁ø(Q5j N*cP! ºBUyɊϸ#um2irE9,AGOg"XF>CCژ( /r NHS:>H?=S^ۃWS&ָ+PH.J5o7k8W}Ə]7_ߔ31X-ReTi`Sw>f1MwV;^+eJ jb?@Jr'E ;w6@&Ǟ}!T|Ζ}LJ:Za(~<0ǰ%oY9j>RU:h/јL(U:&ⶺmo5US=kmQݪ7{W{DT㏥nT[i# +- :Mo_#K:kdKv"6 ~v\*,!\͞z/],Rm^jġ + D[^"<biaAޮ=2c׏R[GZ_|)qe)?_-1im%4A>ꫡl-GbD~v IDAT=|]_),!SUIX,t%Sm+I2T]孥7i,Yu]K.MzC))+񻠒n&XmΘM$v]_Ru"QGq'gf~x_UKyQY/WvgW^}J ]3ݤhͺb +3_4#U%/T n+2ټy}eMzTn_@E'<0W+A^/o~CJd2A~ڞIHZyʏCC \B .%dO.TYmyY\HŀM;ZKضU#ahUuje|ҡ涭5TN+fɦMYsON7V ,&ԱjwCp;8EL&aX{7˄( DZGL&}W-x\|N 3}N+BDŽ9$5SFvo/F'd}_ӷgOR^VNq#xdi` a9-Yv %S7TxSzSOBR2ec7rv#8[CkoU [Cf@ڲ>S8{) V~ӊǒp&]MI}#7A۔]<Q[Wo}`:gm4#8q*Xhm$@w~\ŨQmGn^WO|D)x6j0qb$GS7ŌȤE =3nφ{ɷ"pҥ6>fΌ6y)+#ˎ#- Ѣn#+PCإm>#H|הt.%'qc7mDL}bRѪp ^ v$gb7s"r޼Ϩ@7(Bט;Mv3:K Iiz#c] eVsp>t8mk$ =;/{V, 6ٻy}U&0u;yHy\EE%0yB^A0-2>5绨k+ZE/ &VX$O37al6d*JBi9BɀԩiR*d*_ W(%'O4+]Dz9# }z2le;Z9ZN<ŝWځ4ETM_ד57*Ғ} I`Мş+o$$5& <b"8a+lr,{_+,߰aUs+`p\6QV$u*_'|GU'Osy.~[p+4h1ƺ.vnL"=P (k'o @@!ɉ| D1'6ѠA 4UPn$L#T*dHG_{V eRzX&y&E4Ϲ>PP[ ѠA㣀Aw' :nTYHD2,iEQjA7) 4hРA[M$+u $LjDy/U{U&f`'4hРAoI(ڤ7 iRFțtՈݠ4hРAoF"2-W7ElJ?GYFlA :A5|__E4UMԱؒrFI&ғINM6Pn7%T򷺗ebhhbȸw?uO3W46p٫`Cz~.#u6IZҒ}Qsb\B!AxBLDL@TpS{BLDlԜ '>$/>OX˯e0S#QH3*6 UPm|չس] KDZ)$gÅ3[uJef_ȿAe=g`-S7K& mfgnCQΟ1i|<=<40RC$Ib£l̔]~|%mWMN!Xz=XWY;sRЈ ?r0RM(:nyDhZq >sc]LFHCQq&ܻ^M@&,Z帰 Kc #?KmYP{o7KٯDP KZm(0[ǭ?ޝYzРAK;1;_k6F7W *\5^Dٟ9Jf@K*Lɓ3Nomi>m @&:-0dיۨeKF|kܤB,&,۽r\`{W\>JyOϚF3דW0AY]ژ1xzvS]p⟗ з @ڛ4ꂲ /(Tz,*D~p5f|5>׏Q[$vKoe@G23"ڭ+.Ge1A8TWܚyM]'Om ݃tS[sܒRC?ϒZ6ZKQZ3_b6epҪ#ASO,`[,{Gƫs s|l`q[?RNܹ#lk<9<&) <28iYydrϊTmGOib5/1o&bAV =ڸЃ\g9/bNw7ͷŘ陏*Q Wj)4<'\Zu\(3v:(N;T̮MKW QT^K"Mx~21KY)=`En3)]G U]|'/~]'nߺZ>dVGCzjYb+S/>kN=7i>J2߾.VSG紋C}۶j2VpWfT%BnG]BE.Wh7r@Y;2_xiO]#[5!' ĀKv__av^^l<= p~F Z*fkT1/< ^Zw,|s~;vpgjf25 R|E&M h7vr-UT86k]K ϼ;h+G=h7tH_Bp+ ~nv[y,8vVd>ĸrS|.mH͌8-.Bfs?=#Y~q^e% ٢?FXÿn3Y䦝) hw8@,`ı.VlzHPcGg AcdqzjY+J0;]Vս۽Ε8)uYpch="G6m~88ԿQM7~X5q&*SkԽԌM261gb{Mo۲ $#ܾ}djFL*f#!(`0lݸ{H7?C.o2o38?+]QMK~H6ɨ6Lc7zL=:VcQT|XA_Q/J K1z2|W1=*GZz{<(ҭ*z&rFV-vdM`D\^{ߎaش_ca,aacﭛ[VUI)v\(i.ƴs SZXVwkm8H<߱S3 ކ: Z`]V7'h`p\5P`̺ݒ J{n `aZun![HўMXSG_DtS;#ZD^x yrGch$OC38ً:/uL^yP M9LJ]խl^ YʡIeIXDa6_SkEś:VIR aZ|XA&. cs^1dO%.f_֚+w{-WFQ&P|y.mO`,[6RMe'8A@aoWý_o5ww[-bO-J9@ (S-ׇkfĮY.ngA˔33@ 6FuԨhk7RJ4A@A⬪KV|1s/hw(H+ʱda ڄyOzF@.e34$B+;N"7A8٩iVoQDɎśe* Jp`ۻyw7]H۽:x\-XأR9X ӌ<B̪C"AX J(Y/T<ߛhm̺2fcPe᠈ T|$ͣx̭d|]; h޵JwZQPFĠXid"4SYQ1|degږvg;eSET8.-=@PИjM3BثdU`ddJNt|j3 ih}LqW\/jn6 q6:n<ǿ.) ڄ{"R<* ul1=cwrsLɵVU pȔ?UI9_\c(|y63X7$WԡcrPG # E/Gƶ6-:GGJ#R)q>BJǀUWV⍢fjg-3 f;yt l,@ -Vruzn:&,? Gz|A>S Vs׌ؤNy/`0L&I9@oƹ6l2: TX*C#F=^Xۼ1CVWĽEx7Ғ ]{#4LAri`%U'8<}}r*{ iJY[@~yrem; n~?OHqeէ ~5{0M֬X!V 2Hs;rXUBŠj(+W&݁]ˮJ Td{ʃsEJyM>tD*Y$-OwY84%rPBNAuwUJT ?۔+.#tmkϹ \щ;Ԍ!ʼL+eCm[S=kV "ciɛ6_5̀/?yUwOݨ> e*i٫'w)u \O\$WKf]IyY9͒~YR {jXO)bo/9R%(Yv %S7TxSzSOBR2ec7rv#8[CkoU [Cf@ڲ>S8{) V~ӊǒp&]MI}#7A۔]<Q[Wo}`:gm4#8q*Xhm$@w~\ŨQmGn^WO|D)x6jY0qb$GS7ŌȤE =3nφ{ɷ"pҥ6>fΌ6y)+#ˎ#-3 Ѣn#+PCإm],#H|הt.%WJc7mDL}bRѪp ^ v$gb7s"r޼Ϩ@7(ږsnF]'yq7:m\od!Vݼs'CfXMгmŢy*nFg¹ml{@)s+I.~_rA׷ZeSˍԟUDXTiGa_59GBî}??'fM&޳?DǤuao~6<أ2TUZ*tř("Cxk2'&bpW*TZ:Q!nrmU$WKH,Wl\y#!̬3WA! ^a7OM/fZaA Z"d20 :չjxa" 9`\r^g >\C mpsn ;|-HԺ@3I#Nf|Kl4hРAoTm!y6G'N}qLJ $4ϤhT9JhZhРpPL& d'wKA PՎ(DhРA 6mBQ`hҥ0MT'w*:94hРAoJJRɉ$H aQ L 4hA]REP*$mb3A(и7GФS= 4>q|A|h6@"BS%8 dL)( EB!iߤP{YF_+h\Kf%QOc_T}0d\WW3W46p٫`Cz~.#u6IZҒ}Qsb\B!AxBLDL@TpS{BLDlԜ ']k{ֽ?;>ԩ: A`XLCq\dR\>LYРA5>i(Cb㖓FLl0\ IDAT&]JDO.6c&MT* 2T媃*G&F5?' whi3Nomi>m @&:-0dיۨeKF|kܤB,&,۽r\z&ƿw%_i~ZJ:{yշ7|9)ڋd֩ee8([MPXf+blގ8uޚBVf^]\7AVvv% |+[zZ,֮?m̘ 1-)M=,Ek;ο%<91.%fS'}0[M0˂ ߺ ʲmz91p; x+D͝;2&ϓc;(VwN&Hvj!^ ]bm"d r㨍=Ey"tq|[ p堖"Az`m0@sґVB @Q~wځfvGn•\lm]iڧ^Y}(/7@Nͷ1xL7(:K632 u\eŧjunnֻ%~jY 9ZUfmř =f85NqZej}޽nn!54`Tv r-lK>aUʻ豀gH5sҒbLB1.ߘPI%2 c 8UHnRr9y Gy+i&cC4i&N6aW޹e1|v0ك "pڳW?q`NgBmNz5`@:}K_c=R@iӴ^GV|a#:)kenӰw+;wNG{7)/Eg1` [̭NW$(O4i}S Y|ץ;=# BqDˀ>eԳ^H :t;mHQ QfWrŪOJvB|AVXov\MتZ.!O̜jST~@(MO cF(+{GSO;: s"wv&Ya⼿Z}dzi fL\mf,a` jԠ>bVںMuɚl#hZe^g1,l7'})NmVAj)#N0g3kS^Oٵ̻@l|ԃvcO%vj՝cgUKʟsKM8 759B?̸n@soܲ,y!l6|8gq=m=™UVr ϰ- ɾ.c}u'7Lq\`DgDÁf}&uztfC;:LNX.%ClSZQrgg 8"lqp'Y;F;pV Zuk߭SzV1)=aW3yyaݎǬ (aؘp7lssȄB܄+e2NUkT*RIS&(g q :@ygv% HT#!(`0lݸ{H7?C.o2o38?d+]QMK~H6ɨ6Lc7,牙z&uǂ(o[_vFy2Y iP@X˱S[e1wnAB-x"͐29Pu[kdCr&o ia)V/v\& ]jDNfw`#|-#[<(ҭE*z&rFV-vdM`D\^{ߎaش_cabacﭛ[VUI)v\(i.ƴs SZXVwkm8H<߱S3 ކ: Z`7Mͩ'2 #Z3a Tc 6nd+H+ޠ[pV[lV+gg6]fjf<*e;xp~﷝PA%˽].ӆafHO~X]W:bej[~+6Ĝ::K$5ճC9] 82>Tn(EF ccMZߌsQi}h] H=>u7)=:ּ' uGy?x5'1J+VzA}.Wh^BWq&lMRIPHRD"r9yFސco;a4YX#̃f/vױ Z>t`3yUB)40)Y.h^ YʡIeIXDa6_SkEś:VIR aZԷ0l^uBAsHzzLI>W#v8Eq:jo@%87*-:i1U|AE&|^UQZ2 cٲQl/>{ p"~#j}jQʱ%N@n>L_3#v 28tw=; Z (ߜuElQєv=hzK ۫/YU9b_^&PqQc ]ghHP1WvEdV)[m{Q~ar,ۇ8‘:tS}L9[^haE~ؖF{??e]HU頽GM\R  *n( n[EzTZl0@T_f;yt{h!Ʋ˜ 7qyѐ*Q0:\"SUc۴J/ /StHkS \cYdN @1\ Tׂ< 6O&fNgJrIb9cO7 S\t=vA~IՉD9,>OEHy}RV).Fg_w\Y?۩7R\{{)17Ȃ_w>̨gw5.VU?|6܎_*VdP1Gw +m.eJvk*=i"L\pzy&P"S HGJׂ'̻,T~Jap9(!{ry|mλ *D*䭥mݑZ:ƶN]z ̈́D:5c2o>SGYPsT*BtHdSZ|򦬹W{DL e*i٫'w)6J`Dѹ3{@ߍdf¨+x俈ۖ"J)AJiGKJ$2E *qp8Z<%&Ցkko)ac]׼}\IY{X0@{₤fjMŨC^~ypIi>#ΒrSÚ"MLנ~{|!̹*@Yβk,yPʺK˸줣:fAҭTO%J[ [/yOf[;LmN_O޵q,8q6yd8w&o+Fqު3̀e7q}fqR%SMF77A۔]<Q[Wo}`:gm4#8q*Xhm$@w~\ŨQmGn^WO|D)x6jY0qb$GS7ŌȤE =3nφ{ɷ"pҥ6>fΌ6y)+#ˎ#- Ѣn#+PCإm>#H|הt.%WJc7mDL}bRѪp ^ v$gb7s"r޼Ϩ@7(#n-̝&w%ljߤcr.^Zufgϝ<N۟m`7*C^pM.gן 綱LV뎊"i5a3DI0b| sVT#)*NŜPT0)gVDA +.u~=鮮S(yj {SM7emN1pjx7r|%IO 3ѻwmwQx/C :}o B:ny ejAz 'OlAԢ^Οl,T)K+B1iAo(S141ħD?3ݚts("^{kM%C:Ar8߮]~MۓI&* T{ĥ\1)u][:ku|WnFnO+b=u=%BoU&W ׿[~?DryU_跿bV»a.͜7]rl3u\ǪRpzPdb)7ni?̋G3”(*QÄ-6Z7iy}j3}=dG|S_kA (NϏ)CӴJbjHDT5iD*& fІHelW`rQ2iZsATN*gbJ#Ă ,XI 4MQ$EQ4I7ic#r ,X`ӂָ*1.P:\#T!kiZ;bzkc @P _6wЕ#*i$"P(:h_" B%XMУke|ˆpʯJsW3|B'zkn X6Hc{BtPTTj_?ԒgfN)!wXdYA40tz4;8XteEs)~EՂRd0b#q8(JESA}ps*r9iqgx5\sQS_HArFMKM;\̃ ;_n#/+OoM-\ aNxljV>Ú|*JYF&8\> az3m5l|.cWޛP{d򅃑jDpe'ȬYTv>'(ܧ~) zN YV}E5QQ2@'ES"IPCH$)$ "(h2woZ39y)ު:)֑hN7 ~Mm.5[)QQ*i֮7y$%~mZK?8XfX`^̡gmH2s6axj!J?A0q:8MERYIޝgU/9' qC@+1Yc #־K@ZL|JS)5+T6i򓖤5/:ϕޤM,ؑ0f)tsDm}"(Dzdu+k|\:شl+KȼywުNȼ4+>Ϫ+N;Upx lXp~֊GYc 5 3r5%?"ɧ5N<ɑ݃M^' sv:9{=òg9D3PC$~>AE5z_;e-IھwNd \ o]:i]}F>pl 9s. jQ舶biV`MNḱ\gʲ.,ZNdVwА^c<Nʍlt}y]JϺkMtf"bl1ǯwuaFg}ΜڗDA^@{4 '4 [=id+ȅ4'n-ד26xlײ:ԯ氁ף!k^6@HWMC4 >I{hQ%ӑ,ͣC} &{B_:+v~53oO։ɓv ipD@oE^>Bnnc!Ny)9rĎBI#' ň>B-scW/rّR#Ƭnz5.^lZrT >`fU suK=vϘ 7q_߿~׿\8:U2r*D6PM11xȜV'+¥uo7Ny IDATȣ@€G\Оκ?pWm0ڝ]򋙺*dBøͭ8:pz/8}uVAGPbgkV{.%[j݉_ϒBuS=9 ?H %SjihiڮBmzVNBGGAMQ &7Q !sE9aJ z3!hvqP3R>IsB@J4xdʩ\q>MK'REF#W5{k*X2fc)2 \p"`(KjgPP` AebH2MCj":Z*Hc*:U3RGbT*( =x4T*&#gib 1^yt\$_ӡc DAc=(W$GiX9,gv.ViJu`>MJ:Rm@չbcVW0y̿jŐz\\X#h d/Zw/G(e8+KY*t5#G4EޥO9>1R "֢?GבT'i 8㺜xXEj\4}O*͙QjQG(e޿6xـޛcѢ$8&M% 9al&ԟ/c"GLhOG] G &4HUaZVWaֈ9R_ml[9|Gkl*=(0E%ԝ~';[b(a\f0go޹I]棜*4%#(1@v@9U(uߪ2U%UR;KQ]\{(ޥ{Y[c`4=Sp((#Wٙv*Ih,chRKa"RP(xKMӨ&khϤʷbcW(9Y`bPW}Ȑro{2*ΐٞ<;AJtDE ke4 #Fv֒"֤3F >a~9#h"B&b,81䅌尖ۯ+ #>qq'e+ȼ䨃+VeGZt32b(Mh (xysoV*7nGS$!K)Yie֎g=x告"??Pu7"Enpɑ{IJ<6`%ĉʯK|l3Sn?pQdE_*Iy^s{.KO9r0>%IoJ9 ;P$WiZ!TCDAӴRF6(JPT*R8a4Mk$' h?uبO k4: nf{VFk{ m0IeF1vSV! 5k^p|¡n6<<ٞku'|3&JCu?Ǐp57Y] ZpfAYC ue+*HI/G'dvȼ cM4 !v<оIy2N&tp`@3)jںc$ݻ{f|)4wf[0wYtd*ܤW-Z":>Wb1fo?@)+Vї첡Gun Ԧo[f]%ZV/'V^^lßӝ2[u6oݱ2iU $ /Uݼ眗"s1k`H@Hǖ6 J`2taJM:\ v o;z)p{"&h{G: X4hmO}ovocd  +2 ?`?xް&F޻ocӾ|MY۩&p ܼލ\>_ISŒq'i~Qtsh=м[.bfS'G^qi5X*N(9iOhAV?X&A&8A8ӄr?Jb4EQH.4Ai4OWq7no׮^cۓI&#T{ĥ\1)u][:ku|zx{Ju)*e_-e"#`SB&Ţ\2C)f2,X|ֶ`,t(8N$̝9Ica\5-#aUt,X` _ 9Fr@4)kRCE&`$,X` ,eI:. /}4& >=P` ,Xx1EQᒠ'Mm͍98FE(z4 a YV鱫WMH=gv2‘3i"i`Ȳٓ]K*L2V,H*>xӰCT(-Yq6hZoѮ՛q\sgvV>9},!-'i}X 'cHwPszڻdj>ش/ǔeZ)D 3uS'R5#WR=TN˄͟]WF: Ȧ,9G̭Ӑ罤K:ԟwEv|I Im2-wϒy5&4s=g.#bc4Wә]oCԧf͐mvݨ-V̿'ͦr4!sY N_ɐ"u=|[W/T*U)pҤHabk2i~b*\q@Fl7:ޙ, @/ڬS|oκ7oݺ{z7S>˿:|Kf7UvBόm,6&ZXٺİVת,-/kLs3ïat 6.c&o:Q[N_zVÔ:i>8ăwr1u0|Otm&>IS]^}53_L,ͣC"MtVԅՏkf>ޞ'&Tᆗ'V/j&<|P g(rsTǠCRsVۉf.FNzsA-9{9'|ZH^<%#;GYbj\̩`ٴ娂h1=dFM;7֛?"/T74 w :ߊw$CGζ1Vkc7n΋sF87V=X|-ƝƌhhgQ)W-S=l".3VZ˄XHn:g`{>[ҝOF=߱ysד^w.!6&m﮿TiKig1ǜ/l)<8Ѥ$gߺt-+2j'&f 0< Q#'޵e,[1ZZBn-8 [qvcAmO_x87h@/eDoyZ6Ґk}u qXڵkl[]U9/mGp\URwYqɄ>FfW > lL#Cg ݲQϝ(3|K13kV3'vl'̫]$339?zu`3 #S ,ݭrP\kPϾ]w`͞D*+sbeή|LJr;y70n#Qm܊:Y8d%4yDB~M+3esoC.&}!yp7ҹTӥ\y럛K:ԟwRAOZ8qh;vjx4Kg}l).{W<ܺ!ɍT'MfwR, sP)ϼ7oأ3)y|3F:OEMAT* )HbqTGiJ+6u?rG#5h:&t1KPzfּax\!:JR`+:pz?(YYE@A@۞EZuumsepÉ_ϒBuS=98{y$EiȔS#7}:NىRGPqߚ=UHLq,QXpТ \ UtI,ےP` AeLWWmgȡ!d!s5+[s"t?*Aj[h{i#0oޱ rY㡚MU0F[߭OnIa(P;8 -( ,iąu$f&ey>f*-|<–|^qID8-i; ;Y2ߩ]oC183)B21`J!(k5zҞfnK2S22HM_eRȨq#Yb2( >{GBI~eoԧ.'{i݈|<I'N*NۑU,Ccn?-Sз*H)c??9'MSPJoa:jgOP ȇs(?L>QhƂSD5祂b9 hJF#PGi˛{|Gv}:EI2F@PFb<r^y>qu]9"jȽ$z %sTR;KU~m^C\+yƹ{^ IDAT^Ս~8KW dD+{#3Ȋ/U\ʕϻ#l;wp5\NPD{TE!/I|EPv2hiB^8&8N4%YJEDPa}my+S37 =>C\nUGؤv,L_7i.!{Cua!QPdݭӓMu^8p3fj{PܖUoDl2NIn820<$UUiy\Cv'Yqmx8+Au%mu]zي ܤ:i߳]%q; c/='dvȼ cM4 !v<оIjw?k8UrנӼIQ]'3#Kϸ5cf~cUI)Z~QEfu|&c#o~SbW6 z7B"ێYDLN96Gޔ:iͫ$=5 Gj}9G֕m[1lmcQS޻9x4Dh^ǭ}1G2`S5r@Ԟ}K.(yYq-nG8K&C(K;]Ϯ6޹W{v_YREzҬ[{wAco8 JQ?==ZF~"Z$`Zjɡ(ʤ[d(jR mڶcxڗ4's3q|vQ*ߞdM lrb(%ÑrPrXLKMMH'vX` ?%Hdbs8Չ 34)ZF>OY` ?BE1hV*AΈGLKMK`D-,ł ,X`Sd҈P\ܤӄ@Qg#\+ܻ#p\AHd 6A1h zGek^#4݈i?0#5>$zؒ#z&m#B4Mk~dk?a}s&(5ml2RL8|W9`^u>d=F|$Sp^6|)!R=́Ol:(*IZ~p~YH(>w@]p,|Âf'+36Mf\|9'VJFah3a0 Uy5iB71ޯ>^ryxgx5\sQ|6\傍&8RJص=+pj=l;\:}YAu^gz6aG^VߚZA_*c؞L ~N?Úh0 * C'Y(22Hę:5GJ$4fFۈ*Bk*0dYǮ^7" Ѧঁ!fOv-4MS46JT*qH#t?0:uu3/r0d޴НgrR½U[uNQ;V8$ߖ3G,!by6둦-GEY;q[֩G5=%c,Xՠ*F&ܒSC1ϩ3(M&e/0%4n}+!$Nh$:|(rnvm"pMl][3VOu4Z8vU# j ݧ,S܎+%n?wP8u$³+D}&lbe^#jA (ƫvӵtLm--yB~'yf4DyVmaIe&۷OTeز%{mS(.Oa/_ٳ;n $kLb%?H "y(Ϲ0oa..Yk=|G/`{3&֎8xFG:tdY懴<کϜKa8żmQ97q:OoUk”PcNS0e^b`ڣ7[WKw'o^oŲA흯dI`U:ޫJ=r@G9ĞzI(|:ףYvaͨvc:MMEy7le:Kvo h=lV{{9bք}'6t:[h{#i4p\q{K!f xmIPuY|\HsF-[ǷGpwuF)y1wzcO캺Q-kc8 $Y>=|wOO{A}π+׮TOn ظ{(m<6F VHkߵW^4(sDm |՚/rbiW1/j餩^0 uoݶtu#v>z'G^R;u,U@ Չ%))oSSޥϐ*?5YR tq\@  Sm"&(J̩TBLщ-:LfkyeǷVw랽˯sy|/،ܧn_5;f,L NoYwo6i^v7T?8 )ʞS:+ i}<'Vu0?/y<q$nFzRfēg=MޥizGu>!k^6`\<tnM%qT@,lY3g(¡ փ^x,˻+Qۓb@S^fo]$\LA,$hnnC}&]Lֿu=#/F&j={9g 綿:|&^<%#/vd% N_L&~aTg*V^fw65‚rU/YGu\.U'KS=mKc/^gY|EEKҪf7n8{wȨ)MD\xG1<|qs|NsQfer]f:z0$Ef#XQhbcPd,0(th'wndW/T`.C`Ȳq,0dv;#gϝb thZFd(Tz4yظ0y rZ3L;ͫ%SRAȳ)HPrMUk31?/+C[ᤉO<@$ Q( AӠAp( o: d[^4Zv_B>ymmkk62*g/RrH:*9ichOɽu1wvk\|k 峯pP緛t|LKq4x*G.I.7ۚS= lL#Cg ݲQ"txuW_g,TcZ۵9g>a^mscfn39?zu`3 #S稼11x88A˛"֑ȚymMEs .Txɝ뙲1sqܒS 9b17*XRԷ W3!^6nd'ΩfFsoYÍy bDE:L/(^~̘H7\b5c"ti "K:8o8qjW$`Zͮ@^ɜ[غnW3nWVչ9"= 5RN̎ol5g߮;lC*+sbeή|LN*dBøͭ80"ydJ4fk.f+o'H&(TS߆UX9 GsM0\%AS}M.jFԋȿZJؤ9y^F^!Ih L9u>r9+nާqD0-+{镭\%XtC20%er,8EFA JYJDD o$7PF|Y E H x#]iר4μ+ \$_ӡc DAc-~[x4ts(Ypφ7 9Һ,p} V|irgGr<GzUltl}#w^RπKҀ } 8셔T.rѾR Gqa 4+T+[}*.}Q$hY>T98I|(/2PCUR~ǔxPnΌ:0Pv8D.G Ŷ񟤩Ϭq8&M% 9al&ԟrj4)}pP)Ԥx瀊9àb=Ϟ&sT ̢qPDpM)rT`BW|տՃHʏS4PJ_&T72Ъaһrvo~SU`˳c1aa7ZsԐ}fU:*?8g.vƨzV'/>gdPMRD'# ֒1bu%!=t{U7wFýLPpC4˶$".Z3noB/$d#`-<qAA*l!jg?Uɡ?G|>u9KcF,?y=:NUY/#Yk6ݲZo -URr~~:MSPJoc_|DJ( |8}yƂSD5祂b9*fX'hC%۵IsiO$q/j6j~)Yrd-de*YΠiSSޖXxr`Hbƿ:Aihiv!IqyӴ#ie* >-WT2ϴ/{;)q[ssg$^vQٴuKHIIJ+S+i͕T9ƊIʲ{8{JTPw{%2OZ ;q-[Ae%G\*8R֢9ėًiJF#PGi˛{4q>z$ \  B M{(+vg?C+Tه2(rK{MRPrߖΒODU{iZ("_Jsy L69l)p(JR1| J"ICK8Qm]e/ìEF : nBئ-awjjҠ~-kw ۥ$!Tke)<)r["z"Ѷ5gnQJDF%& <w#@^8c6"kdݐ,&7ήx. K{n/"R_7 yΌ)4p Gd[deMc͒< ƷP-_ۻUfg\́o[G"{M6w uzV-I7G'dvHʉ1]5?)!R/Lȴ]/6R%r=w;tסA`@S:)*P%ݽ;^>4XW=W|Yk]65oMO1QҞuf>3pu.|=|cg~ƽ%pTN̉IޮΔ] %cD8ճClԦ1dY&wNk<ֻGCe*Y> _N=޳7fcӐ9ٙ;ݷ i32t.sՙ3n+G*29s& yטqF (6X:],:lVTޙ=H#s?߭zonUoã/'VONV `sW2?^7M{ +`jt7f1l:v=[lU!!/{Ln\1R(Xs7|I ]_pe스 ϺG-_=|cގFW,}Stʼny;O<8ق9~ 7#8o@#z\ٱx{|A ܼF.KP )?25"XHMMKRbPRRL&c$'$Vj+\i q]zVboO&وJr+&eFu7 Ї:ï6J150W~}5JP{g}ۚ aUBo~ȏ\E}8luU/}W*\=/A,,RԔ04y z E0 e4HFxi#j>|N+tQqى‚ oq`Bkk#= 3uEq|:pTP h-,6b]A { F]z;`ݙy33y=:P Ej54D0 ;)Jm qOE ' IDATc | A(3&[Ow806l]_U1` ܺTm MA+Ĝ6Ca8eդ900`8EP*}(J~NwPC$I`1 0` 3aRC(p*ѴrwIQx\6Ӭ 0`o6Q,%3Qh)+E( ƴ)Rv@P!j/*ZA̷߱3h}' AIIR^T*.Ƥ?tMY6v^ôw%阠_g;o)mqHٿ0pMsz]gJD-=ߗTdyCB)9tQOty)FDߓ&[Pԑ+Chׄj^tȮ-q<%ucϖKѾ.uVmڳ<ʣ쟳aHh36ib'£Y1i@}SúK)N"k ΠѷC ;ʱDN::_kgv*f[VI64l9~J8 py̩'. [8y93ڰ%iUg B"ǵ? R˪OTRrP(PZFiRwN u $ӍT|X #K9K_ٗ G 'OY;α*m;/2;O!$lС`ZҞ;.z'ʕ 0W};kcoz ^|ijA,_~~%&sA. Jxg_y^}\to߮=FM]1tr;M:+ _ud݄V,~ZUbї2/L[)SE{'Vg6yTS[/eZ IO-6%^1sw3F?sQЮu@tܼmuf(/>LeTF&#(ۺY_Mb>Fv;˔Q= 56h"UGvT⤨K?C ׹8gwR\tmk: l%AXf֭FdaeZF(1-83G`G?xm^>tڙ5WmKL{/0s>r0$2V8r~/ƿ(X 򇯪fmw-bl pnGї ue57d{pҙgQ3uQS)D8c[ikW۷yX&Li4zح/QAKk"΍m> ُ $CR7 7_$< ~{ -MHȦ=q; C&5/ QQ4EUIJG -Gг^[yukc>H fha:`T[[CP>;rԛ|#ˆlV(r 0oi+Yz'1@6p^_EcR>8B.]CeN8tdލ\fڡ7Rn#\CS²{ѽ ՏS5꬧<!9q#}S픽+ܪC]J5Ry޳-4 H6H('Z(N3/m E_ Y7f% ƪG}<"_6LکkWLp({o:S޹=k,U_نh&TaBYtakʣ*zڤ} UMt_=&[/;[²>'K";N=jOޜ[vP'OQZ<o ;*sSDsT>պO§v I.Ih?Nnt~NA*#-\ɑJQ)-M& i2{u|(ivrx~kz"w6/t9OAƟN>7lzoX R\.\x1ջQ+fw^}"WfRč^.ogcOճ+Zy4g@ࠐwcVmv'?Z嵨۾p+A嵠!ZKgnv{; Nԑn(lQKU͵&&.ꔗd~:@hxc$s _Юn6\["kdXHFf܉)n̨6ZwN?'mb끗!oG9F̚KZJ gq;ϻ.\m!<04> \¦FmIAz51GkڠԤӊ%~7o Hճ*3)}:f٫ 8#,Ecq??Q0\.rMqgXpǩp+8EQFsm8q:qr͘%[g(GD\mժfw6,N&0F.yw&0Jʷ+>V>S>ѻ]Y{RU _+OY|'&RM1`*]6}ܺB*,߿Ooqś1=E@%K"A@$$I:4,ƃ >\뻧l,p\A@_n`;` ZLHAPa]\3l\ ؙVRjH-~j&$I $Iڶ\)Q/{)]^Е'&է(ךUk>㗿bㆅFML\){Em( $jF("齰}،I1mMu>ek-yZ(!2TJߒjI~i"U7sKA]Z3մ??waNA @&w|+{]&V;8IFP1Vler0%%ʲ`HQW*(X6^MЕcco  8ܜB@0]%7wbX,$Kr, ~JBѾ. jۨqooػT[A[AOΗ<) jz! vK{}iIt"=0R\eex˔5ҋ56|3u(R&YB ,R#'JR&oJDrJ ; LVYS0yy۳MC60`SB5EH)~>j0Ԋ89vtVOmlv0)n;^|G o?W}W#-YȊ.F$QR[&[Lw~3[b(uBB?v80F-#%-E&:$!-PBLo3]!5AQ_"},GydiuT±$_UT|j*0/[`e2463P+sK")C HR(#0(GP0M:JD̠ ~[Q7)d\@0g1|+䈕;~Ih+{'tleyg3|ѣ6ֱFgeDazVߎ M("}?m)˙0shS/+rαN~1nшWe*و ۨ|'*3a1"Ap/- ;qϨ#.VIsTDE|%U+] Ms-@[N vfJ"ΧE}igUEN/^'7#EKǻJ+ PB9JX s_<Œ|@>+´t8]/c^dW$1VKT{0Ӯ?lrHg__{u^Փ~5%l+Ͻjs7GNߞG[7VS֝~VRHAa'W>vCny~ ;"Uui;N.V)  x];q3&W+ۃ+08{rlbL]qx Rq6_+Պ+jdDp>wbrK܉cPURt i-q0d$//=]u Vʗ _"}qq*??r.?73d$A9I^T, I䠈L,l U*J)W* PU RE Y8 %1)Kp8ee!pm 0e 6hv2 l{aY}Q 6(w'AG'XE)=_T'ޞs˘y\V\ӭ_HR3=Ѽ=嬯JWkpOJɩ6@gMtAʪDqW>z{p{ކc{Qz' %йf+owljQgD7{]:ϩ͛2q NkG49:CZbfmbtToqI?jI߿S [';\׻X"a/]}6زo\@mFMXis!Zp~sⶄAS/[N|ck!Z6r0ڳvB5AҷcˆqGh6l  )_n.dA1[qpERZOyˠg{)c}p䦽tmJȮ"+s B"(BWY 4,ܐWPWP!Dc(5?hm $h0 CQP0GZOKѴyBAL߯WtrGk? {hn]B;/kiwYR!r%@滔3piwJgBiזX>aw9i T މv̰[ͫ1  6&BbDh h.ۏ~L4[NAQſC: 0`*q8P7~Sh`ZGiz 0`7 фBI;P(PS 0`#NP-ҦM&v:AT!R&e |>͖oM'3-ʀA-〠0`Ae(OR"E(yNG0鿇RСN7[Y/Ma6Oh\ӡ[%%  [O$:tQOꈐtyYb; dߎr0)T ԣ>͵8&=lw+%A*JIu&R4K2>?3|+p]wsM۵ǨÔU+F.BnǰIwe!V´:imϟ~p[)Q@ko˾ ==gϯgNvxj9//ijxɕv6byȜRvh[g &ʕ: ˾^.ʬނG\/1SYePu r:Q)Nھ$3T`M~s6y?i/Hؖm3ϸ[r efj-@&)AZE~mM8:&iM~|ۼ|3kIs.^`<|䖡-Iω'`Hdp)Q5q{}Eu,|v7F { ٬OQpy -4E=I.z.WX쩔"кhGc:qNo%wc~;YvM۽Pބxt/CymM:3r@ɉjU[gK~ٳR/o#kТlqnHgq^]t^Y;v_1aVKK˶΂F~i =iɪl\} IDATL_uB^pլ^bc0m7*~/[y}Nte1Z;Lv;cKgJM&L6A:J\^l'!$8g\D>*5yߚ=^ȝ 3B-SwO7w,:4åT&"^mbnL5Q+fw^}"WfRč^.ogcOճ+p:'Zgȫ8QA%9on^}l3[kiX錐uIuX<&f;M6<&q^FB#R%+$!U#D /Lb|JTT*~ZKqܾUG4'v~=\g5m ضcu-4 мTbL3smt˵AV\eQD.K+[W%fqY|{ E_߉c X0.\\TNA&,Ź=>=z账qsUu!0dqO\۱0~gϵ//:}#9l ej>ᡤ`W |: *Q ]sX]06F&2oZ :uqΤ&^I؇ۓ_7 {-Sk*u\ӓZq»Gs6Y6ۜ+(R|/]%jka&݇ADly]hi`h$ W*2i3)}:f+ |ddfPُ̯*'?ܱ1C] ؘdr=ٵpmUjO}UdR8jL_ћ>((G q}T~/i7NJx'QJN?bZV*݅8Z%3ʊڹ6x88kef̒3W#U" .jAӵ&Ʉ~M ߖ,X*qijÔŷFn׭Cփ%;ie`JqP_`)F(PPJI"ƀ{v_om<׻{̐U5qQE8PdcsPT$($IIC"hmȩQó~:l:#ǿ|p]g`P9`l o9Am.n;]Omlv0))w>-"';5o?W}W#K8IdԖ8d*c3~%.?oFc+S E.[Heqr(LKH.tKh}uHBZ"8 5X=UP>&H@ J_=QYZp,ipW'`,X\mV,%Cf(브tX}e~+|VX>ҹ6Ǻm$uDBfUm%e*{QW YJ132$5ĴJ%uJG$ h͇6Ak{qB&CxGYHX)J{3T 2w@w͆XwAk##EVwJ͈?<_oq Eouͽ cj6⟌*W+nK&|U!l]~RR>9#71XV'%k|Hb9OmoF#FJ]άU Uԗ1G|\\UrUvRkq?]TA q8CBBJ !̄u钨Zͽ:>.GM]l9IT󙳇Ogs݆L'AÆ^F{.[&H6YYxLq#n݆Ͱ`6tA1]m{ţ ;(}+NHjU3O`l` aܴ}$Ȯo|{L?{dC߼Y? 9cg_ܣ~]+ [Ī|n`w`G^;ν:b#|ۢaԕ4M:y⃏],4y^| )L8t@Ole 0`ۃv4ue)j NѬz&L 0`A &mOLXa8mU!+P71`=q@P  'LB 'Q_G_}_)Oh,U~u^=yKNQ J$;p迹jp*2Hty,EVxM(ؤVN#6K$xTRŵsq5CkI9;7vurؐ<բG , [y.bQ \ާ=iKVhaB6lIZٿ&qk[o RQ~XqTiT^/!;?-L(巉2w0mdbq+v_ՃHI(%qX<}D4o` }l9 xUElfGRcZmg_y^}\to߮=FM]1tr;M:+ _ud݄VU(T\Lma^Pr;Lf3';<ۜO@{kJ;SO.w*W7,z(f{ qQ|AAjl/DD8)jPAC6un"z"]b[ڷ<[n)Ducw4jئi:EwJr7y_ nts58#oά'ͽlsXb{[W'='H!IIDER@0C [ّçdY65xd:I-FJaSS?)Js&\Ӻ6l]Hu!Mʆ-So': m.N_g}vޘ0Bnx:I|2k]=~2ENݺzx4KVޭWy3*ǠKw =&[/;[²>'՚5o=9 xsnYA^l'!$8g\D>*5yߚ=^ȝ 3B-SwO7w,:4åT&"^mbnLM.Q+fw^}"WfRč^.ogcOճ+p:'Zgȫ8QA%9on^}l3[kiX(n94YƋXh]KTdqc[ۼI 9'*bb̢OjNg=uY.^_WA,?#Xy}=:pulW%}-@/>k3w%b"J~nά3# ^۱ŶRGe}۸9UL^]16~N# Im ؕmy=æJ#D}!9jڮg] syqN9fPfP%7@&ual)sqвpKqܾUG4'v~=\g5m ضc^mb8ܐjoMpas7k#O%{F7.p/Aw`/a# >S Eqn鷏?|`:iܫ zwgk *Ya"v,s-!ˋNFfeڸhdx( 66.@ENvnܿ1~W"Q1lֻ̛ºN]ܴ3E_a,D571 W+4L( c\SByXzT>.Txh0˦}se:R參^m1ݤ0(mԔ5B- LdYE&>&O,{%QNA1c;w1wP ˻6,,o7fƄڹ Y_]%~ ٷic}/8ɮhcůQSU\xVpǺ(ƪߢO[v[J#yzR)N|9p L+5jTI]DNԸfHCL{woڹ6x88kef̒3W#U" .Ul0Lq a`eK!Ty}=;m~էM㝻7:|AF VNlb| 94(hc=U M;EJ/N_ҷ}lfHIJ{x¨캢xs3mϡw˒H`#$ $I ·Ϧ#W)'ۤ+ˢ/;7WEP"efn"uX6UukET5oJδUi~Üb5ADMWnL\wp0.?:OB2AyƸzVlet eƲ4(˂U@(FPRIgPz,ׂWe윬 =-ET٘yE GU\f,y\jE:IH#f.umt读I(0 Ty)̓mp'&}ZWJQ;Q;\߰wҷl,A+Yу5NΗ<) dv`n:.e;Y(R&YB ,R#'JR&oJDrJ 2BېSy'guـuFN⻐rji5 jrc;]v!0@ZaYS&=SJ;|GrJQӝA?jMgek6IJ xSN)agSNݞYܡ)|7e?}UV9VF3M L%;1C`uٚX|r&,F$nbRa:>-YCy}zh}}01}k4ؙ*ᾊ>;9ӂϜ˗r_>:{_n15/Ojm3nG*H!wg(ԅ#yy;Fg~jÜ$*y$OoQaBUyu׮1/K2B++a%nqQRNLp_ IDATR3'I;CVIe@>8<ɇ'RUyS=Ʊ}FPgDv5mrO<[M(_&Ă~Sor*??]\~(oig^͂5tpyydW1 :yH.z @ե Z`{#IP \>t-_VN!,Mq?v<ˢyfNǾ* +UmRæ#gKD9IbQ6Q%{iwe$k_A+ʊ6y 0e 6hv2 l{aY}Q 6(w'AG'X,A˻1c [6Y;M{p{ކc36~0@ 0OA`KAߡsV32,Lo?^olI Ui [ubC*uvw:51:mF#+#p}ӡYԴksTWF~7w7= ;w03 te1{цe[ 8=C`lvl |r)C@ Z%Q{u|%\xrt'w3gL[ Dπ ]PMm0oG8Z aB`mbJkG75:vPoV&:xsԪSg2h5A 59+8Gi1](k]tw/ `|y2N/ j,ݳ1b槩z =}7o֮Bndv}6{t+_y}^ ea{¯kEra^CXUmæ#,*$tk`B8E(D[.iW%d qܕzHRQf&py~H!wijf=YLGRPf[PS R Wp ,<_#"6\x #BeimhAxy8|u+/0RFH߶m'gH[+Ѵ qW8eP(p hc&mbUc%A)<{m71qr @}kĠz- ޤfYR!Ύ/!ЕL*$`  +2p(1â|[ҿI Nݩ+e%7@8M6vZw9$7vis 6/.Z8¬CGŕ{Y2暚W| b@$A>y I A%L26Z3jrnqG|AO G9gR 0Љib.56O *쫖%ns;qePMP6Ka|("D$d6iXm-Ӥ@r>뎋"i5a3,*0`|`@0qf1EQ & ÙLg:1b3" 9ycqv b@}LOWuOUϭ2wՐE\ Q>~e yrmE5`z /"Sλ#}.?&_ױs'n5^ Φ8pvQZǙ|iCN0*+O]&uIKb Ƿ;q{L5bg~O/i=g~j* ɝy8v_{q$nfl]>T6G ޷oG$5MMic!mooc_ȩ6EO1+kީONd߸cc ikPHe4]mib etܲ1!Kj* vU\hG空:Q>sjy8۴peGoYg6urF*] =b[lZv5V/|Pmi߃V[?9RXچ.hjulO5)׌++NќzIjdTforW.1A -^Z,O†-~_ŋX(sz6\LS̺/CnA .y,rsaa4r=.K=`ZY9EV | [Q x,N06F̬:Ξңں/hRΙsa,ۖKve\O3s3C^ʑPsSO; K I"l 3i˙+#Rn\؍ r:M8\CSjog#~/TZ2iřSI|gؘĪ۪>_ Vn@BjQODYP}Zk)۝ڷ6ȹ de{%Rq=a/9bhuj1e7,Mq-]B4i۫h#MM\q7G+3[m2ͻa/))ߊ/+ΩpqӜ![Gp6~T.bi}f-p HR<{>5,_bR ];e4mQ6[{B2VL̒y w9YC(8ǎ"ۆ 'D@$$IÀo÷φ{؄K֟=&7WNP('5` 3B7l^ t٪24 A2֯DuG DAP wl\ nV]1S1g!(OWVό(@8cPe* lpa#`()#5ճV(N9ikīϲkZ.UXj=4E͇8Ц !䵨{mWuTv6MJ=d5z8=SU/9bu`U͈=CZ{e׼kj*}Ǿx77;'tGAj@.cS?&OW!S}[m1KҮ_jܻ߯ $`Ov0Zeuu}H[v4x~w(=0"fiu:iŻ?Y(R qT,rы2,~B"QXs0_"3f+- 91;><' s zsoC9c)$'$`(o$8c;r!0o(kz`4Dg<"c'JM~Y/w<`[m&jfw݈$ 3 bՕ\`%B1{E)עljV!*1I G C? #B#Ӭ+MxdEsTܑǁs9?!1PK|Ѣ*V$]N.mTv#KϾݲLj'KjjP5!Ŋ{`+KmUWVZKTKՐ1 t,Y59 .Mԁ9E)ΤP(CGۖ}:tPo;"ڣb8   az٥'6:TvwO[IRXA=*GJgWB(5mK/,UYi`38g^g*d%bBIfhSw3$  |Q]6^ű0N_KeO7֫ފfٜ56$ǧǷ{aÿWg+oE=9!;9}{ SO.ȋs_{jb{̌)HZziyx_!8ICOkoN\'k eR0W jRz"h&z/8hvTv7IOw7p!n+12l} )埙p<~X(zHFv^I!je+}DEfTI^I5mEGu%R%Og*gS<}[O;x@690rC/jd?pµ >,٨qk%h~@訅^ڿfM,^ihΗ7;dhq_R}J V뎹hɜև\(6]#}y@E90OA`S> i<,cb 5~N5MgPmz +,0l }ۺ/ 3\=tĉiM)S+=pMgj\ve~μu7kϊ|o8f^z0t o?g t1#hMK 4Ԛx\orZꖖ$wjw?fS4q$PݝN<5:h"=jz\d d1n߇#4:$y%a`ol|l7xv/;Iص")2J]T-oEyxLW#|æ.z 98N!Vz_sμ,Z+j'fЊwˁyCy/񻣗dz;W*4J$oev_4sAN!j4/)iUb1 kbHyxSn=('*E) >أi7i>}hӍB&g']}'RFU=) 0h]M@#q A$ åp\NS Dwk 0`eMI(B"@ @8[icuN5< 0`wǛI]qՔ:НB Q) 0`;eBQ'% pU'PqR58a&m2`P? ً**NQ#UJjA< o~fZ_~2= -aw\D웫N?D⼣sC):G ND.ߏ 8:CI8rs6ny011q B?G\[0q 7d:XU  B|anϖ]_bo ^ B|"X[L 99a뚚[Cۙ0 PL4s7wmwqae3z;$T_CWvWD/ : &#1q->wDZ(ľO p.(nTK> LӼ"VFε~ڪUT@*Qqb)nz<)ע/6r76Ȋ>xuFmÛ: [Bl. 2c2N{I >>#41^_^;pN/28t:Ha֛Rvdž\m¤Kctyo٭j멶*盲c2g8OkMURbIL@x.=wknV[mJTs1YEuKSm_oge!N]xuQf'ӋH7hy^Rx79ĝT_)Н%y3AP3eɮ:E!UѶ$r}ږhzE٢a]f܀'V\>(2[N<2{o{;w˩HEO;|- oLMHxøxǖ-bogn>+RMY-"E m܎|}kn={KC}#--OÞwܟ]6TGɯ?}/{nf?锔G ޷o|ևHjߛ̍Ӭy|;6e$QU)֚Jh]~<Enoar$ga2`]S_[?B!GοPje :<{F \7lVpV:uf+[lipE^F70wSY^7v_=3.[U($^鈱|帴c_is_^v`CBjup"rn [Z9I 63*btT=ǮgkjʬyI]oe!4U]mrXlk%\l!L6FN5/_Rxbl@<;t"kw*j4 ߖ(g:*&$䥀Y%d tx&(?RG`PLt0Eqim ʎ=Dm*UzhŶj76ؒ$n{kZ VlyYuֱs6&z+RSmq>{rΤ jO X,~ǡ!G>L›E$.y,rsaaoYR|T9doH{{@ ,Ow+>խ(yvL[̪)=&I.?/OƲm9dWFa%+#;734X(^K/@j+`ZM{7xQ}\Q+QŬsi׷ӵv8M'41}!~ڲ@jyV8ZX ")/-W\\+ai>E$ڰjs9K,!m@ZrqY7RE[O98cAZ.zI9Ệa9INdH< am 7 /6rѯ|!E"Gw&;ʲm8( rqIo$IIm18 6|+lH<|Ѻ*Mdors r\v<0#t6o@gfB$J{=[5H7d($M?sqז $[m`[;ݪ 1}/ dYŕ3cc/ `tAȲ1 FYFja#CIBqʑTN_#^}n}>$Dai&V~D!j$aٿ@ʡ!\$!X&Rvj;KEHJSUq;>=m1^>$QE tD)M(cR%\5%N'-QI5/u[it[Rkl{t%Z-++>@Z4_mWkDžg'7[e%@Zh!8+ީ6BPT?.T?fzc)$'$`(o$8c;r6 eM|9y:GqQd${B98ršk/:Da\acR,5\N=g8c(y|Pc;@Qʵ=/@$QMDY$!*B|]o͘="H@ d92ͺT* @V4KIp8*)[%m-QZ6j%jﬢ({'2QHR6!ˮ3\.]('I  rmi4RVXjWGT N[rDmBQ9S=㻥k\@0g4tgSl_kHҒqjRY=ao%8/A~}3vnBxOV4?R=7t>u@"/}ysKYvbK13rxޮ* icl/ˊ` :(Qof:vO䒒@>f:E*.uyG.F k.QA"<.JJ^>[~J9~߁7R\$.âc+{X$`_Knͮ,K؃7 B".4Km"+}C\+q:ߜUBpAr%I_)V"YhUjUV*ڽ1}, WrBzL6G-{|X9^3{hY]rr䝿׊-C]A5+Lryfy<ávhk*N(&FѴ>G 7yqj7lv ls6`tp_~k('>,٨qkF\"b3F5m`ƽ0{2Hw5jj#{[zZA e ڿդY%-f n `>{mݗ e#NLCmMS4|*Vݏ.nWw;M]wfWc&1X2OUƌK6-w2@`tQk6>r)S @iq[ZN^l &^V꺣ө؃Ӳ8]MG@m[/;Wdg< ?r]PX:DAMpe' \$T[&\<[B_񘪺^*Wcؿ6u[ȩD5mS#ڋ FuSS3{M:;ۯ9c]M({)i<вDEPr:!駂t%1`BOyfg[Ԡ|gHPT_E=z-<*6ZޤIF'BS aIRU$WX{T|܏X{e<8F(&H'd:RQ,pCYw0wrշݼTҌ-[ZRV$~Ds&*)KR;HT=zGǴ( ipyhRZ-Z[Hhȼa0V4׸:~-uH$q9(ߛ0rr5@Cu6O1ʀ 00h֡l&GU  ͦ2 }~D$:84nZF KT'ŀjj6UFD&!uGs&iT 0` *nS={v8%PͦBgYiS 0`ʛ\]mL-yiS^ȿݮ%;<74xbWȅ՟ Le:[u)aD#&1ٕ|ljsPo)BY]Nv䜯 2㢢$uևZV8W1 [Z{d9ѧUQl85憒*#q˃9|ZflxL uN䊘ÀY`>VQ7 US9Q/ rT[r>]}[Ё3.>Ll|Aog=ߝ#Tne#@G!]d"fW^=ǽ΂H~ؗfE3zվa7~3/֧Rqvv'MSmߢ p.(nTKjSig8r37SW7қAM5fbG4(k8 )=VXTGrҩmM5AaJ+۹/*Mں򳧨aA:4.zeJkt={9-3&"a9jS_{C_ v?5Ȳx],e<߮ct4?ѹy\)~-ʽdcX|;73='KA ID-yb٠M7|/dD׬뼹>^ Y?_zn bY!k_@i2K_ {E(EY~|7SsL-i୛O=KF` 49f%E4.͍vڌ^֚s"@0m#+~#Z[i'^gv81OZxa%4N ;܎*,ct?I9B#]u[/יݢ,΁C3vm+%owl8Ֆ>!L4&MZjˬ Dٱk3K,+Di$&g <û57"%M_oge!N]xuZ^HOts`bfYEq@M'&W0 NŪ7aT91%wX7 ɵ!׼z&xD84L9־S'_ޛ|E^Νڕ5TYe&x+#&s㦇4kpila/B>Il~3sRE><%qCm>Gg؅ YcwL7zyױ%pP/56ԥAԲiV[=#au^o6`cO^+g8U+Q&ųnjhEd߀Vlt'=\uOl}r}AAR[ջîCU/)Sj6oͣ6^ٸ݄y7K3?k>72y.*`٫eJSEګc0$yאg&$$3\Td']ߺgKs(2:&ʲ__P'qQzN֨B! JG 4UJ¶PӮ3w U]Gu{NŕmI͌X)4:mϱ뙭Z2Db[k>}\D*zL.d6Y9,j_VɕTEecW٧CEhIU&j(L?ͅ;x|IS9h!z\{@# &8r> ޭ,T7 x,N06F9DYu=Gus_Ф3EEX-gu(DuDcl94շȬ=tŷ%?J.u[z|ܠE~fk^2%9_ItmܖSQ`)@\w03!7pY܈%A)#<9!Rzs;#J,G%g3"!}iޠ$?*z0&9dw6ne떭ӄ54e&Zz:"M-8s*O,{ QiI^~2W[2nڻƋyJKv};i1]kw$k P2L"H$L&ɨt8ŊgT KfMNYf hs@Ғ<߈ˢZ-RE=dǎyVk'||+8g㯴N=H>E-#F'9“=5*$i߯E-M- $5K  GVTEk2f&;jcpP(0H$I;bp0mVِxuUpq  xaFmګߒ=[Z&&!W{.~3 k(Qa)`7RE$I $IZP(7/YIeУƭLU:k@\Q9n;/:fH!L$JZHtU bQ.uPD^ChzZRHHB66ΘZHjUZiITE$Ys-U\P#E)%:7E\.N$:@ep:e=[m1KҮ_j߯e $`OvIo\xvr"qc>:Tݧy~sd>Tv }܋PQTiM: 'Ɋ{^/v%)mރoyecH3-6qQPAt] EHϲdPN!9 C@!}#!ܖ)0o(kz`4Dg<"c'JM~Y/w<`[Z>vD5SnDr K\׀_s>vfՕ;ۻ"r PγU G)~]'H@׉xsFϛxoŵ6ϷWԠjI{ p0PdT;as#RE&xRvPvDeP2& Q(dH|]˘=RV#,zVa<%Hߜ5 -U<ƶXPjXyMZy! BAeIHj*_zNJٝR)eP[ I6m;"ڣb8   az٥'O:TvwO[IrA,΋Eߣ=:o&|IuJcoGFi"ݐxDs&nQvj'#s *G[TaÞgEw %@ m'ŧ)R;_(׶|{:Mts-?[Ek23Љ"݊C} IDAT=NHŹ/O=cwn 5%Lli=fFU$-u´"BJ{ar{bϟ%%e|+f:EU9<΋ yux̄5S;u0|a2EizW{4< :^PKtO.K ˊAvNȓ( sjmnUq埆Dp>W[H|.UE2@>X 9FEUZPd8Xv3T/4K=x d/An5ScG6>x_agS}ၤ7'{BK* Z}-Lf޿JAb2iR(F-!8JDD ,reRڠ,٨qk.\"bcT;_ޘ^ͦoaҊx1JsƛŔϝ:H9f5p3A-,07ts{nye=B`}coKO [ tZAu=`>{mݗ :4Dۦ۔~3U ]ܮ #ԙwcY^ LKxmLt}2f]iIcZ1oKbZN[RDRe#})Gv}J+FB7*WlCQW"ώqЙ y,@m{)A6`٤Ŋf#&u/^_3Uv%x'~G{ UQ$7Yt8٫MDˊ )t*,yAwhz\d d1n߇#4:$y%zol|l7xv/;Iص")2J]TխoEvMsL5I}|߰KޚM j+IK5Z-`9%P˓tBHktd'O<.{Ҥ}x~HG!wܩL|>J4~Mq-YnTBϣ./}CQ.*i,m6|Drqш7ܥKG2{L xD ҤI=,8@2Ӷl.U%O9U9XUhA<.|U-⪽m/S 3€ 0n4jhQoB"Z}Op 9Q \5&"6U LoO 0`$I)z!P*gRFw\F KI1},+e*0`PwHR$e2T*/8N}pYmVqHeEKFz.GkGڍCH57 Wu{>3wqae3z;$T_CWvWD/ : &#1q->wDZ(ľ|Q /Usg\2)ڛII^iQK-pS yy {̍ާrEt%)'4u˹cfR[Sig8r37SW7қAM5fbGoYJ7pcT:#0%zܗe Q[]~4?h_ƥCٰJkt={9-3&"a9jS_{C_ v?5Ȳx],e<߮ct4?ѹy\)~-ʽdcX|;73='KA ID-yb٠M7|/dD׬뼹>^ Y?_zn bY!k_@i2K_ {E(EY~|7SsL-i୛O=KF` 49f%E4.͍vڌ{N:&\Lʭ߈V +zz:&oj̓^X,l ,) :%-xz$D|мHW{]xyuf8mt)˸s"][oJsO.wg㪭2deǮepr,9:=6>xy6ֳײc:Y@*\nfE{[fYc6> \zL4]T YqVFaiSwP[RT"'mŦijK eBB$*ժC%wX7 ɵ!׼z&xD84L9־S'_ޛ|E^ΝŕQ4wM]m^TS] (l GQ*$•Mjx>S@hx/w#s Ϯ6Y4[dXH:Cw y;kBҘkl:3HEv{4[8"/c ;Ω,Kub /ua*pt@s]%ݱ~N//l;!h 5:cqW8PuuT--^\ǫQAٺz)J=>Pl^C`\[}Lwn ßcW٧CE*WY"r]mrXl+^T @ e`hlFJrrt Nj#VQqUmU0OaX=5?< AQmZtz?AϬ3f:{D #b~pZhڍ d-1ߚeWp(K-ciVx! ~>%"׌++NA%E+R],]IoK{i? G91XJT˱VxZvLb\X*j9$)>y*2Dҷph?= ؄VG'@ѻVn<KS&Q23nn s&(\=y˶n]5hqM9g]:^ɥnk1P ;o~W[$+Mqr: Q@ CX5_6{4F.$(y1t1DJ}nz3s3C^l9NCҼA!I~T$ٙa&Mz9sŗsoJ^m0ݸ(-[ khBMuEYەSI|gk\~FRoU6\yBd׷ӵv8MP[%9s wD*ι5}A^~2W[2nڻƋM>+#Bck@EGiHcIƜj*_T!<ԭo1j^ %wIyE{#h;Y>Bԓsa _V\GoӜ![Gp6~rӎ(]2H#EyZ)o F(jP=CqˋVZRJA"TQN4YqfM[IjTA@h i2α4ƶ( $Q8`=$ $Iv0`!E^;(6g͕$ p ,6u"j*Q8aF$N)^Ι(js[m1KҮ_j߯\ Xh|]-FHjܩ( QVǡᮓ_VAOLo0S" K8JHH (S7!)5%2#kuN^$acQRxleƐfZljveFReL`l;䤂 rf:cls[NVВп镢2'OиC'ݞ}h#V8dO(~7drmqh DLE8If&8/r]~%a|mWWBd`B9ϚW1 Q$Bt EN]'=o@]Vg<߲Rf'Ns枏_>"̧ 㘻Pr-jϦ6 zCQΘ$DrB;.^?J0v#bĂ(?bAY"X"b7 X(Ƃ-v]pWw^@hۛf޻ߝ7o Wi>қ*ʋU[?Qv$qdWN&-tmIj6TKthU,SVfߗ_{b nx M͞T7U)P h4"P1:rێV5MC'_~P. &F|P$/z-QoT^krD[bJCU/ĒTA=pg[p"\/)*Lz*3(ב7*_)~0:6zƳV$OFq%)U.o( 4s㖌D!I!0xg]vL?<Jj5DJg?|g›B)Ra1e ^T*jk]ez)Cu,H'z; z|g:qR\9;6Ŷs^\A272|.E_;³'bB\ k+:S+x_\`y1ό_>;AFy7^++E9ٗVIyr<;V*Vy,W>jVKYŲd3~=Tߴ]ijLB&",#yN^-*ë #c-ɺQ44+ aPB~A^ȔJB1[1w×qe+Fi{yZ2nYDelJ ݓ}uk./uWgݽV&maƭӎ-㖤agt3!E5{Ҹ$_N˔as.Jj3]mTIT-‰ z-v[I:agOtn1IPdAf;,EGN _\X]Ò_$}<};4E0vv: &&Z-C3 M;EQ,Xq[9S5퓴b?VD[|a/^r: A`c^?𚷋9xÑA0>oOЬH>zX[F(ÌF^ߓw2J*p!CGVuv59dj@c !6}gfY9X2ԐEhmBqdGh42 @?mZ_C'5`#rѽ6n\֯s]i&OlyzrERIzr=0-R ʲ8UW]{ ,_j\q7vyѯ . 6*T&gO`Z ]Kpy-7'{m6JR 7EASɐi_tn6jg̃zZ?}\㧅"X1X.NZ$7uB$f^ZjV3..h5;x.Dk-B -^3ctI & T׿v\JSbN!}*VCdZh'M$HTU4Lj&=RO`ZhZhm'*KX R j 4kyB -B - 2Iݽ yZNݩD^rE-nOwZhZh@ӁZ28Q7Ql.B mj  Zh %"?˧knkjO ]l=/hW|7FBGM.;4ILI8M7Xqaz'H`Yq.g4ad2Ad :1> ;| itDHEU#ޖ7Ҍ4R=T*T&Ko?I5DUJcن@(&Xo__aeΔs<~=ImC o}\C%r\.khTGb>vFv^թGxTjٌZh Qp}?fm|P(r\Pa.zlt52?лcF9?۲;@ZrkoP+o =,Ǘ8fRk8av•e[YC=dJ٢+dxOu1igƔ}4?y\P]RޫReqi=Macy++Q/.E[_x>jD뽢ZHp1{r]9hy02qHJYs7+%`rB X~@դ fge f\5R 1q ƌ8981%KN5hĵm1k rʙf6^U_6{˭ۂoOkXvm g`XZ ]G94ʬxx.>yʶ7R qۮeZ:Nl2ы-N>DFI3[N𹖜xV"Antp3%`VwyٓCI_Llצ[&<9:˶{yqߞon.~ >9|<#79dBw{=Ȼv˅w}"νeJ^䕊b&}Zo(Ie\r9}cԽ"^\(F={Yצ&+6,;ú6BQUcm:AE (k_>3p g^H*u⌰}Aݫ 9{$n៭H/UceJx)0,f(RↄvSnu+y).$i>Ktnۍӗ95h'3ij Aweaƕ-6 @K$.|uWm81#c'=e5!wD 5S{EFLv*yqnpC:j6' Dž/^ɉGNŭjp&ϚR61{WʕNC5S:Qp0ǓAKv#"iS6nhvI+溹lݖ0$htgB|֍VJ !s@(B)%EȐÐJn&C(DڂCQNzuI}o\DIil AQfӾߖC0yk& S!88_C-tV.?FXҗ_myga0 [t]# ]rvg9א>Ei3w׆vFwe*Ivbҹw&Ba)-*bc8o 2[3Aʤe6Rbl: iԨ2ШIARv ̵3XMSZ~dϢXݗ6őPne9׻Co9˾)8J3f `\LgJ*>m;T$ Q#eMg_ ^4ǥ:v^ϡ? ;WIk)-:R ӆFcu1` VpIyZRgfl9%gsJ=11Ko#DtG0c;W3D( %Izc>m'oPJ3ɼ:30̤ gBvV@mL)7ѷI*kgC_1Opڔuo  уȸA]LLY>o@p K X> KtF#]MMd`8A B-Ӥ0$\,9~7 j.E(JYtZ>2hxх'+(gA[;ʜJ5T"9ŃDlf"9|N8:p0=K,Ovq c8ZpTz4'b2)_)&~U)?d)F ]&,ƴ#[0 E@!I'p{  laȷKG[QKN{-(p m~Nza:hґ{jL!@P)MEYk1XSF’ohV+/ ګYT,[bPQ$Meh܎{O'>@0 9%/S'M@JKꝞ"m !vPX + 1Ȯvzu i~Ά GS{^*33y!F7AIҍʶ0@0A(s$טݔu/%]atͪ޴ uR)+bBnA@&*D !N)uKzłh5d0xm= /Vf2t:ѹ%wkNGR'%2]{d7>hڬWJA zǸ;/['rx򭢎o$jy{\h: %4Nbv[9J #.Zd6bMAH6Krdߨ!ke1J0Rc8|ZF-m.x?}J;tF,:ڊ"?NUN_7N(xw[Ө&Gђ !}Jq0ևkj29 G`[&#dJ _)+9_l}qʅJg66E1L 뒌]xOr03Pd҅8aLs\ߵK"uf^)T| 2%GO= ?PV^$]Y ##C:kOA.'V-Au@B4fi4ưρzOu+ JI@(nɤ sЁ?iD$uڭ["7Zu7)l:>rTnj7y5C"yImzr X#gVz!"2=2cg~MyVafb :%ib͛W*gט8ͼM(Jqaǔ${QɄ‰;+&wF"֋ÀuG5*aKv& }UUzBQYxS(@3α?Jm%jR^k=Ak}Yx#+(I{2ugET(8qxNAM`"Ww5WLt&Xw^3_OfЫQJQNUkRީ4Ž˕+NRbYCe2exPJoZHE]sYH!Ani'KBAvku1d(Q|JBY(!}ycʕ{{GsdJED  Ә-{XYg;]ˏ串ه W#fܜ&JZ˟%CNTVk^Φ=i kWf0b?x[{qrLYgKFѸ$_N˔as.&QJ7Wd*obO`b)A fy:TC½cM=a'-$C 7OM59%|msciwiK~!j}|WxZl'ݘ @0=9!]Ls.3V?omdw'X|wo[aF#f;L_?t7Է:Fh%.xmQCC2͙\Ro {J-4^IcOcJI fIn͊d̎We:i'iŦ~l#2JB\}Oٺ5t@3 2d)kOT?=kLt ˂\#۹Ӗk`LDL䶭nW\GG`8`I2hI:KuwO+j)ptw:t,g6j*Նo 8A&!>{=LO1 *H/?]]4#عnՋih?5NgwW˔X=z!3շ¾kØG>w!Cפ,ZLN;V$BxknԀ.C8Fm:NgDM+i4~s_′tdByB`rxϜ|I}pIҥk7LPnld0mZu'5`f\tͬ9\{ c:u_βWO[\eYQ *HƮC}\˯r5EsW:6*T&gO`Z ]Kpy-7'{mID$2%f%#f+Ծqm97¶}~M˲~Э}w!2klQ^<է3c>)̠ӂVƅXi?U)2۸Ԟ&̥f[8W@pF)p*}ؘEw\GR'O/ucn"l< 9}̷G.c@jON|~MrJ.˨rQz>A-Z?G+Qz;'7\nצAe m A'mjo?c5t ǂ/25P5g>Cť,'WͫtCw\C16nk/yLIy)F>qF[,»r٨W}rF&g e<~Y!.X0Ǧ6o⃣־AQ'2+uB\r;hkYEΡC[L"b˦O3QQ!=`L|%<@=F,^3H</4&\%LI% t@^PW<#ǵiƖ 4l^fܷ bydO$+a{^.rtrfso?GnҮyXǸIV[9ugiFuhS.ql7Ͻl=.e34%l6{Xf٥D8p  2;БG۰qڙ5ΚA;L$R(q㙚T*W]oeJN%7h4ǀS_VplSF="ס0e`7g]5$ϺDhc^ClERr*k7[sDʵ[c^U$>!J| IPPCvo` w׷1Bg9w{h)P\x:D%"a唍taw+kee7t1(5[TRj1A,N2Fܫn&÷Ba2z/ow'ava{A%mv1nl*xŦEsgX&uT܃Q@(*ytҬgI ]Ǩ_ &n1 Y0A|}eT!ݔa݊snJy4x D/xn~ϒv2%eoD 3Ly<%r'{>7;Œ+[vmn>"/42I\ʟڌqbGOOz1{ljBjbڍT atmN Ww''8eb>#Ùe+o=+xι{ ğYSqko~n`Rw_z ؔGf@ٻ\nQ 4k,X # 3f `\LgJ*>m;T$ Q#eMg_ ^4ǥ:v^ϡ? ;WIk)-:R ӆFcu1` VpIyZRgfl9%gsJ=11Ko#DtG0c;W3D(M gj1vJ=e2 3i=ș%Py_.zv0F>>Pe[5edJGMty婓.](?_Jkk6{:pe`|.<,uy[W-E eb:|ߜuyGܩn: l}=3RIxl/Ih%ɤP(rB:/qr+MCRNܞ̵RcxSР沊[ĘE_e*OˠE0Zge@Wv\7sjʱˋfų @eN%]Ǭ-ʔl 6f"9ǿpN8;QAq#$u`N$)_)&~U)?d)@mUd桔eҘv~ ưa'D$.`AAm98v^yA;~~icNP@ϒω^3L [:sV)d7,5 Q#a7R^R4A@AVUoGU% >V{4;` e3F݃~;Oa5,H.yA XY+ᵘ&/x}: E(\#{Ɂ1y` ; 쵔 ud9c 3OT3(ŲOOuN^yc^шEG[[Pi8y/=bka% J/$ =CN5aԜ-`mͮlಏ)-|"mmO\0 ű>++eGc<ۼ05K2v=9CMK1݇w({s9~.\sﻏқxPi(F|j7Tk׫~<;*HȐNwsœYY>z%$J!|9XE+ dNr@)GTU^uFDz:*<"uMٰyeR 63ȟ%Y/p2`MH}kW[iXR Ȱu%:B&K; ]$g#3kʳ 3xO)7Mk޼V$Mx+#-B,u E)0q/*nhb:TJ2雜AqcG<+PTJq%)U.o~JZOp?EPu̓D/^vGW^OOZ;t ?+REʼnsv *%ljmd n6U;e80\:7ma=vgO iX\3^Y֙2E];4vz%΋~fk) z0[ZX)ɾjM;AرR8c=U|I*U,kL=OJM޵kN<)dBq9 (=7bR(N:z3nI֍ŧ^I 4җ7 ÷:GTTJĀ0⼇u1meH+ }Xp5bk&i{yZ2nYDelJ ݓP#_a}m&'*(S_;gxqrLY2EO^ING|9],SJwX9wjVe1BBBRV#jg (:D zJ醪>j!1æϞ0cΡȆ&vXۏʱ4ƻ%5 HHy>f=v3~ nrecgxZl'ݘ @0=9!]Ls.3V?oPkhk;1(pF(ÌF^ߓwc]ҩ+LZ.(m=%ϯ:fL؍NcO~x$7fE2fGѫڲ 4b?VD[JE [zXpR%Nm2|@116MG}G^{ݶg!6}\g4POϜ_Z>U 1jk@3_ǽ|1rz,9.jT9S'jbNڥ;5lxԚw[0+mMKM}JO3ׅ NcG~.EK-G]nW3.-w*G\4@[C4 Af6hHeسtO},x5;m)DDnv|k>utA]땩4W%ݦzp'hgO7."=djұۨTv.Tu&L{ﱗ0n>AtVG/ οtwф'`]W/(:=:M\.S#bhCWlT Zt &=+kUջScKpvܾ'1@;6A25 KQB}f JJyc4$QtrI0ͽ:ɢJܼᲧM <+}>X2 km3ve:׵fM\:/g @A[\>mqemGu;[?/p(")> Yq/ոnڋe_A@lT'LzϞ6keDz0YMj\>x[nNۀ$0@#=LTAhղ4i5Mй2 >x쫹_:o?Z|`xFxVcwZz *N;Qd/U 4XtwZhZh*g3Q ,݃8Mnj&HWBvZhMB}OJjPH MtdZhcyR*d̒FܴӲImZhZ|àPHT酢Q4JNtZhZhŷ * ̉Vӓ^N֚ZhZh7 rTTzJEjF׌sҺТ)C>m/"Z| LO6(565E.Q|XmyPk,Nj./`MM#\o3fD`C5?M:&)g{P|SKR|4:"$:"?~ ߱QRe#ebRk75Sب舐gBu D彤P{QE2$ ?y~jN6 ۾ːHT+ȱPβ >߮kGE-_^ݳ5|T vq0//]AaXV-h4:N@-6P(4nϩ״Ӯ0kmgR/o0#Ko0>ae٤]{+pyj,P3G}!ۆtN1myҷ켾bG<.2bkZhա~ۊ}8F5~ˣEЄrQE)0OȚ*WUvKT&KDN9l˶?Lriɭ.>@ 즯H^>-\b_k>bКIЩ?Kg_!)˲~Э;zW{S~Ц= 9}̷G.c8}PCfm뤠QF=s ߺCHy[i(^q2TR'=&k&^"(üO[Ni<d9_MrJ.˨rQz>A-Z?G+Qz;'7\nצAe m A'mjo?c5t ǂ/25P5g>Cť,'WͫtCw\C16nk/yLIy)F>qF[,»r٨W}rF&g e<~Y!.X0Ǧ6o⃣־AQ'2+uB\r;hkYEΡC[L"b˦O3QQ!=`L|%<@=F,^3H</4&\%LI% t@^PW<#ǵiƖ 4l^fܷ bydO$+a{^.rtFso?GnҮyXǸIV[9ugiFu.)s86M}?/2˅b߳5y_RhgPWܸu%ԛq^3Gܱ,½۳KqAk3F55~ 9C(03xF6(Ci" + ט( {rfui#_^up20}H~ěz gy]|DZw!^~z̆6Oo \6OGg}%GVY/IaW;|i0ҁǔ*=oWciE^$,i>"dՕ?_韟cؖՄ1\O>S2٩Ź 騩ۜH78ON<7p/n}FPs3yؕ2ٻRwjd։ uo< P^ZsQ,)}b4{|oSu%-|x g7mjmj1h 01(8l7qfzAd, 64G!(Jlrh8T&o{Z9Da<$;?6UkKK .ܶyFvcw!iEh>n`Rw_z ؔGf@ٻ\nQ 4k,X C03f `\LgJ*>m;T$ Q#eMg_ ^4ǥ:v^ϡ? ;WIk)-:R ӆFcu1` VpIyZRgfl9%gsJ=11Ko#DtG0c;W3D(M3Pc3z*d^}fz3KrR[ g' cUeZ3YFtDGߞ'ɫ |9Q:ݵ) <E6-Rt;$dO,7C1z;;n]=>$g Ж=a.[vqai: R!"(/((?P3GT7 A J"eRwOQšaHʉvYs,o \VqP wU=U8 Xta"yñ:&?ʿG^^T=寷\tmXTu>TOEG2ƶ`(OQ~*QhCdlWL@Yk=*) (7 B߄RIcڑc0Qt ζF|d xtuM?4'@{gD-ifF TƞE&A=5j$,FJ Pf" ª@E{ɂO!M299HEY Q/aA?|'0l$ NMJKj⡈_[Գk J{sNO|`ۻjWflL_l=jRq5mbt҉ҍU A Jȉ 9knʺ7cY( ȕ* 9<uPvXlsaocn3fa %к{>Z?sq<oڌzlB.LsuDT6ߨSq99I'I d/zp@_l dtsK֜2J`OJdvs<U+w:NMY)Hod{U_${>i8.ɑ)uK `"|.V+R IDAT@%oJk&w+֚C y-^)G /'u i A!Ԗ: aP!8Xլ5 l!ostSjݡWޘt4bёV4q=r:Nq2@+GؚV. Kђ !}Jq0ևkjNwer0e@PfW@ pGȔRV^ @rR7jumO\0 ű>++eGc<ۼ.u 3 E6-]H4w;.jO ,UT AE=l4 S{oxVDDς ((}G.E<5?!yof{y3C S2dR;ZxkL&D,2gAidQKeπ,m?7b)R0M<.-g^gg;I_ϒ`#9f\(G l?f@hۤM'+4@r%QD'p&_ZDc(J3Ц&RT )`bPW}ʖӞl 54Ucu8=vUD~oW[EXwA^i$y{9~W:_DǾ̷]ff/ӣ۲G+e%jSg+WrA^3Q1Q_KԪǧc!MJV Ɲv< YVZ}WR]@ s]?Lw@><[b-cNW[gP0װ(-(ũ3-l2)%q^#J<pDB#ܹ4m{b̸gOjEߚB+´ 겂wX|uVs5L۵1!fd_[;R[e@-3o/ndtl;75F0xQvzc/qqʲ㑗d}6u.Ӟwa?(=gփ '`,j7 ?xY/ bN͛8˩F{<3?SB̼ mrtحV!GI:}a/4nu+BuuFȟ붅 =1 19yfJ8en0\YJςGKQv]\g~]VybatTN*O}DD:5Uhp䤣 uȥM_լ.Ȇ =yW"-,%PϰDO[pkK*d?G,LNp֭A]jhAf FC'gU!?ཫLϜI!ዶm:59 Ĵ}OӈYt,{"lWr̾Y\ck> v$}s|ɨ뻹"kS-( [LWv .`&F=ǒSC+ZY:u lwV(cx膝m{xJ3pT:o3v =|ϕ }eiڋ 6iR@JǓ$I8:0FcW1Zn ƈE毧9e+zM]ChB;4*| Oⱱﺐ/ΈS oUN|{ GJY9ґn3$ r"V[KHuw.ǟȕ1ӌ#nbpѿu*:u2#@[>ߨ(Oi:@5A}g\~^?"ޔI>BM&.ۿdh#h+⹇?jCF741QUoi˕ &+}2iK3.{l:g폔qWf2g!'"UoKճ_`;wsem8ũ~?TmgwA"]"~Um98}+lP5t qM˟ݽU[Ø6%۰j&6uu&1م6n:lxLOGs_ iQ}lD sV@H&ݬ z{t+frDn OH{'4s4$f@#kxqǸc?:68dʹvƽ(Z+@-~[~[y g b0;w@;} t68lS=h*r!Oaʹ\v1EȖMy  lc 7lǞ=,\ս$w=l75 2@0C:c§xY`di߹5J+.۟K[tlz;!K,u7'RsEm}y85["ͼ{lf!ʟRvCb.]B@A)x~;eXFH^;C ;󝡥5EH\WPkdl/X,v^V)=KDljWC7uu<,0'7dE~Ŕ{cyɻ۷d%澂}KY7⛍ uzؤ| Wtپԃ:N<#~>86Sd ݑWWg#[i#?o6 [uLRgzrqm3O uն4$&Es;яgj#UDXسCn#4{??=_& g_D(2gd[}~Huj1+utQ"7t=2Gqgﱻ&wM9ՙ^ SQ]onL% ,?93iu~o`O3\Jb2('eww1n`C<~s6`;}鰳 :Eo%oxӱ ,"&#&u"sO/!_.Sz3:^FK 6hg48%ťњ^3y`mG}ƍhfg$=wc\\9|]n|hV':,yc̺56T[+ B. 6sm|p#SiyػA"A:Wz%`\f!}])x{zQ3Y=[ja{VҐSw(&A6:Bj\m_6O!7w]JӤlCɳ⩊2*nL+KL֮+R=xl=TBe?JbC ؜ƽ.Gw<j6f{>Ak(`;iz}NON1?'L{1A+\Qtt=p mj=ޤ` El]:aw 8bXi;{rri󜴠AΤ%\ȗۇ$(ޙ)8GUDˍ#Jt&eލkoY  Y"'f3WsۚF5̚veSFm*r.TԐ5<`u,}9讁><ۢzIF:QrgHfi潔eit1ȥܧ]\Qҿ+,turtU{j_ ; 0N1jd&F2}tV?w:Ž_{:ө'0fjɣdHVB.fPaڼ蔧n:K;@}Vogk<>VA5Q]>I{:[m Ԣ(fmaz:TM+tkj*,.K,Cot&R]IA'L0 UpQ[.HھKIlaSyQ'(+ *y7 ?Sv{ߍ[=s0Z>]3'QZWIo,+qT)) 'U5ZX*Pnw4d:,5}njb{}ƣ% I8HBA[0x!W *הm})P5y!Vm%3Bm*_ (BM*/lsd8a![gXgT]@*0L1ɧ:wߘNVlGƵ=0]1-C 梻w-IjBB S uPv BH#[UJ?_,xdisT$羁LZq_ؕiQ ƶ^p ouNzAD0]mV:b)R0$i}eʢ,3ORV[;oSvbi %f!(  @ް)`bPW}ʖӞl 54Ucu8=vUD~oW[EFR3zTvN#bf4Ԩ|+ədF)G+ \y}9Ap/aWjǨݯւ%j&%kAt\NkX,X-˾+V. ËήB׻F s-9[Ƹua-&d̡|=}Di!(E/NGn1%of)H)iW PBr̷%Z53=@>~( . a:#N^׏][*3mER\~mŪc4FGH+3Uhf5[B{--OY6^7"#{֬:DKAaNŹ\[V)+a~|QCIBF",csKl {bd(qL.C\ cYc\ƆדUcӜ[fI=xعѩw$K>z6ٗ(5x/_6R;%l w$?$^{@^9:Kqݜ,xէS_~mb%pQT.Q$ћ4/OP$}RqqD"d BPr\NY>)aM_cR+A8}[O 6 w @6=?ut±55A e5ǮVӌ<?]k7{Njk\);: F>땡Nqʲ㑗m2\?g=Q{ A &~OYfKn~@_@056'7qS%yf.N_6y;.鼱[6B't' _i\Vދꌐ?m zbbhsS͔pZ`. qR=;+K m9~TA3毉ujЬIGm9K[A4Y-]}M ={֯DL[ `ٟܻK"=&aK4sזTXpљN} 3<@í[&L3n%ፆNcϪB/~ IDAT{W}.49!ZCmubjhs@)j:O4h=OIU?I'P ~uIugogO[{Oah`ce< dwNF]Y{ jF`eb[v 500O?"ZҩM`hsE'DC7|h¾+~6u?E :uqPq:ʻy >6+EΎ]sseeߴsg6Mdo`B4ϐ/牕jc|d(R*gN)@UE[Gt*I5'L۽{ti+ ~u Ai M*mk6)SE(39 yT=Zk2LqRU7:Y2*Qkn@'F:{L>D Ҳ ]jTK͛Qefo޼M&U6Ѯ:*>UGLm|ʲ0e}f)Y_2.1B74zd2lZ6- /sϴ7Xqu#>^O^yA3ظ,2l-[X$lު >h >$/fIdV=zOдo/TN|JRRQmKBjCZn3$ r9M:R?v+m4鷧v[TX󙿴Mw ~ld݊b7Y9̿[A fdHxSe !&FNc-KC$=S#[ Nnߥ"I8ʹw%#{7?>2&פ/"S).,Mt<7]t:RbXnC ujA}g\~^?"ޔI>BM&.ۿdh#h+⹇?jCF7eN,?: ݒ.0t|58 9bs>t2ỄLv\a`qjNăCf^29z:TZv6"i9+ k$]nv=pu^teW"7' 358cܱdDtrTEZr!_fhQdzu @Uо2 ,;Ұ_)ty@s|mSo'dNfwU<=D|Ⱥ0GcxfK;AK38Y;ݾPPxx/Cm&C:5ǦN<̗auuӓ" Il)5ү>tw^UqH'v,oٵ;0j3ksk)/؜<;ygcƴ{߱xpѬ ?wI-=B|ݰ_ߜ5jMEW gxdN}K3xmBjaV<˶U¿Ċ"v\ݻqy^VM6qr[f$I-7Z(r8 JF7uu<,0'7dE~Ŕ{cyɻ۷dB{⤘JXqo?SNr_}Vה$9-J$+?U}{Ez|1UEs c.0-#^FӺG~A .zdT:w Rb9`ηY.dIdn~$OK Hx˜Rs̊A6]2Bg{n]fSvNyu”{zjyWSvɴ6ˏwLZ?nƛ9cSqa r9"]ٯn\yp GyQxk1}pR$ݗ dm,ЬKH NhMDtGG}ƍhfg$ͨ`̴k+؍-zSGe"qlYj{E <{S ?ةy#!٭>8NF5"G>K':/x{zQ3Y=[ja Ĩ!kѽM>:ɑ5~VqF'0;;5 8@/2G罷4%s._auj7^Jް"O"jW3Ǹl8.} M=xggmkxEö S%fvH Tmrtw)& / WTT0TX| AQe״ӖC@1k=DQg4=~1qRG 4a!ԽR~W+ZLeH"(1S["b}!2kBYre?JbC ؜ƽ.' l~;6}հfUTs.}p*nlLЦJHQtt=p mj=ޤ` El]:aw 8 Yi;{rri󜴠AΤ%\ȗۇ$(ޙ)8G_ fi潔eiF㚎=֋+^?*Twt`e`q{Ұws2d/,ID0 ':RX$yKc,lIl/4kme=RocӅD8pSq8Ø8kb|V72!YLq mA>~U ^ J72[%܀}2UV YCA,\KP,e8v\<$}:I@$`_N}6$luG&]\\5AXMo+k9_{ZjZ,9X7s`kZA;'|-. 8 2]޹5Fj1- > A, yVytlmIPpP`!CIJ(He:^q-]{ $U=1\D:IȢ6EM<d*Ԧւ2fk8⡈z/u'͑ޱiرaO@mV-^C^|jf5DGF-_(|_ӂLw+e&p)ﰦ,4anӱZݾl5[@QCT1I NbBIH~G;H2o߱xo%Fu U]mVJR+GU{ǨXmߥ$kA (0@64_i` J$% % 4W"R Lx(" B,QeHA$!+g(?^5Ԭ7ZqHnyzj u~bXs8N| `\1ͧJ Yh>‚|8NN%={ѐG:˰Y$ɹow{v'z-=N>{[ܲ ƶ^pFeDɫ`R2`Ư6o,9F9rcf5P/HH^Ww0!%+62ABǎe֩&Q](RBD/1mb@Yֺ8/GM|G.B> @TMkU lkm4n!<"vmaA-Οw$IT;}U/7l9tGEJy~A. 4Uߥ%'ۂ M-N]!QV AףlFmN VJfALScKV(pm#ȽQy&H>.Ks*)M =\R%v[QsYSsQ_KԪǧc!M*>kW[gP+װ(-(ũ3-l2)%q^#J<pDB#ܹ4m}b̸gOjEڦʨ0B,٘qP~?JTqK硤\fKM&Cer) W?_L]҂qr_OVxeOs0[V%9 NSTy T%Zɳ/=Pak*kKorxPQJ6mlzT/Z \}=1A&_N,8H׋xỄkv.ڥ {nN#t&|{fn_%Vf.Pmk28,zqfv15hQkwym?[g)pu꽽,۶".k广p(;Hic+̿DE8QU|TJ'a:/FzjXiK(æ;E}1, WЦ(9v}|JHa5F>r?t'z־=f ] ae mi;RƬ'yw1(Vdj;fei3^y{XzPa"Oe &~OYfKn~𶳀s{ _i\Vދsݶ'!v<'O18P2V7pLςGKQv]\g~]Vyݴ̝#Z7IEI1cȘ^ tԖ@ @iQն%{"lWD]wv9}f,Wjjh`ce< dwNF]Y{ jF`ebj[v 500O?"ZҩM`hsE'DC7|h¾:c14wic>^D`ЭS7fS%??W+XM;wfW*}Qs4zgC .+~"_+/X*x5Ld!Ss^-'~V׫مĜQ~%f)paNiG٤,ORW 񦿎J"̶l>.Zrm`9FmReZ|l2p$I4jA$魩JS%ĵQJ"nѮn v;DڊxN2V%?*PFqyѨ57u'81j f$'H'tLcª&6>>.p"ߜ~w~vef@X~SfF 5Ub8LIZo:$3`A3[q6hpaڹDrl͝o>&-88 $ t ID(H hۙh= 0` ~`>7*I;$\6ZaTv)`ZXL ?$I1`'ौEUA6oqL:@( 0`Ga@QNNC,t:]8es~c PR(UfS9*?8 X pV+ 0` `@*BF(R9 &ڞD@+o_0`P$ (&؋ZJNAI)( i |QO(R)W61:X~%m0x[ȿz2wG.1E_#yѰEMuO 2$yV]nYAޣBB7_|]]@_o+"煅^wb+7qx*JR(% qR) JqJѕZaҮ|y~nsv߱﾿5&nO/AXsAH5bafwVqIAPm\wd3'n3Wڋm$)eŅY6WxuW[Ui!pM$\>cVz!~ؔ+hO%KTMe(|yTW{*{e´gߌ#Y|^ykrDW8_;dӾomF{RšV&@ma &qɁ. hhI90l75G%+A_?N}ģT0`Pu+W17uښN\OKqM:(KU#)URm*06p\.aXvĢh5NDAUHULf*@PuC߶z :>ʚST9?/iW~ piVΕ1c^c*X!+38c.]?{ò/h32whaok>k<J)C{S&5ul"ld*:]B&__qZv85Bgp2z ^s:uplևY =g`g޴Y{1}Q%IZea?OQa7iS_? hMvmꤳ̓AMb mft𘞎 Ͽ!<1-Ӣ1;؈|tMY¡y<ɧW̖^Nh2hH̀FxqǒtmpQqkuȅ| E^C[1UCN,0wH|ҕ`sX]%-:M%r:͛UY)"붾<}ܚ-qcfmtfލ=p6whO])~}!K IDAT a١>^ۤ-Lx:f{LՓ<̗auuӓ" Il)5ү>6.]`ѳӫO}Hw*tl__Z3$Dfn>C:5Gޥ ^T^#)SJEo_)b7ac E{DMW6T$I~cߣalk7딒?n=1٠K` ƶo6xg}/ O+4\ (KsdƸcA.>2'׏ ]9f٠+OEPI~-0S@(cԀ3F- Le謤&;ޯUux|ikv#%Cv[OB?];U*aߖX۱@j% !][ Ajz^"R*k?` L2dJ{*fA+'ZV*jFW(FBj^.~ìi>IR$= ?*u8[V*0o`5"TL%η#<6mlڪiaEzn_+`S?YYpkׁ1E@-O" q@Q["pm!eۮ;h6r jeBP1KC{^+.u6ƶ"zQ$B*RBQ4n ~u+Bmjc75.RPDM%RwӐdN+IB>ZK>ʗq1P84.Ra;R*:pچ]4>-ȯջuL#O*ERR .K,DtHN$I8qjֶmHB|nܞ! 8C1N %lJ Z\e1qŲ?L~e[d)^PfȕT1h6%xPԽ67d_?TWIoT~[+qT)i 'U5ZX dg;mHH,1c^lX>x Y# 5n\ml&8GUU.)7f)""Qb\kC S2dBoD9e XMX( 0yjG (*G_V,xdisT$羁`R2`!E%|HM0BMql0…3n,GJ<(SW%Mp+u]լ|j>͊}>OMݚePp{:nn,Is2;RZcu90HB+YٙOJ'^9J shbKQtrL1GW&R]@ s]?LLt_E+oA%\-?5Ryg($;g߯>[~jh)c;#}to1h嫾KeKTiO650}x, ~VnZ~bW[gP\Þ>g #e7vpFCy Nd B8"JH\Vkf={*U+|4Z](T5,[gc~ɋrBѺRp=Q:9BH%PRvln:aOl %ɥ|\'|2uY!Ƶkl9|=YEY/>q<,waQ$M&l]rTfQ f(" pr=E=N1Y,((9-yg10 ~tutS]]%pK=|OעtJgʭ )jԾ[HCig ooL,ie4j:*dNҕyn\ߤl uȢV`Cͦ^[۬6*K^ON]T́I+Aϯڞk%H9MV}🰫{8"+WoS kBv?ܹ$ʋ|h=GQ( jZP>8|}VXuѽ48xe}vnߴ 5Gz|q?6W!|]z~8C%[1yQnߦdjcy&;6rD9NyMW6X"k.^.MwTh+G=3Hs2RH@zl -ZMÙ4 N AqfŲL$l'L۫Gu_MHe W+S!7utKR e$Wg [wz,)chAغ˳` [(')&t_Ձ". ^-F*?L%3Tk@7 n^ 镒y6TT)"C\VtpBIQ**TRM{=^k?]WMwژ_4"i~vOpQH_dGϷ;GCB+ _p$a)倦LJM+rŪ=lq`HPڽ|^9վ+Bs\.ŢIQaXZ_|y}fsvl6ϱ'E<&nTzN8ܘ"N%lgch˰ϡo}wX7(*7&Ƶ(*Y琪4ӷp ާ]\XK{Xs]L_[$S1J8yobS"Կ1I^i""W}u7~6єF1G ]Xq~}pf_je4; fᄀ迅DNQՌJh0bTl;_qwdJ `WWL}h47zW?/Kz3bodd6yg}J;epDLGGtA[16aOf!+'txf/޳$IjRIoD /淤yb* gEPU}E[ogΏgb/^vܮ>}"ܧn]u*KVXw3"cV(}Tt̺ii^°[4/qEw/z91*jihg+t ZC4W=E㧣,Z8P%y̲㴻VqvBE)>^~9L\|xW4Y寒B|e3K 8"*ݥkNtA!zUr.n˘B$.bؗ/PA~֏i[W+QD7ٵG26٘ ,c#|7q4yΥSLkZ$Z>{ 09fNgossFO%˺tCOc!6ndo{; 1'}3› UT|堍7|7Mrvb`:'`-,k4~fG`iΜv 1sw>Uf O% XI-9oiQa^z ڲT`5lP`@[[=e`7.@=/\۫$+ζ㦕Πps92@0}SN}UދNKw0O)bY۽|ivnKK.sgP8}">5#j>Ʈ X])wn_|NwK>9iV CzjY*=v5mz\m8_(YR#Rsa]XjͅFү,Q^p*xX'F & F_>mV?˷žs~Fc5HW\ǹ>K}8ߩuipdTŃյ1#Ӡr ~ow}0.e2 2 nv\2<ɼ=kӖ l䞋D;~X[ħȂMo3gL-MǃRx5f.Q).Nw߱;'wO.yrJNKuM >X>5c Eó͆5٘c`tjT@kУkn+7QWugc6>Z|}/APӂQ B-2Ehys=~DTJ"?:7uvMǞ!K^6; {&]l8{8|Nᡋ{{'Dy9.w{yh3# PDF-67Z0"o0Iw8E]C]8cńݗ heP>c40)ͅ#[`B-\‰f訣ǍlfW3vcΈ[72iױi-je"|㞍UVo;r?@ 9pz붴:)[7 vZR4sU$?s pv|qN.梈_ Ԋ 볨d)A1(2_E<JE$L3C(z@󔝦$IџV gJq$5;ѕύ"i_c =oGP!(w25Y>ό?NEioYrl\5jj s-ouocS˽}Oܸ\0opO-<:Hs~QҮeDo{Y5\m=(,FKVy戸B^{\SXxV~׊23Awh^'go뱆~Q<{{rYFnťkn}|<}Z/ZMym8tG.-m͚u4i~"Τ;#[ԯ;c7م_".FD ~vEI}GdnB.ӌs9iC>nܴk_K9嗯U"[p8m6yZ%( 5m,k2]MspmBE:0`5 4A$C=:tD(X8z qꯝ0 *Hxܐaz4c3o֫$wvƮћopM,XP*+$ęS.[Ue++Fl;T|\-y ֣Y{unsM5@lLTMĺ& }1[7ȿ< } @\L"Q#(JݘMa8x(^,x1RUYkӵ3<1]IP"KOYl915Eaݜ;J{`2H]YF&LQƷ3?o{%mvf,cY~,"z(pBV8,\r=+w)u))ʣ//|;7QYE<"BD~'Slf"}%+?eqzێQXG(:o}>?-0pm{(ClťgR$*z$ۢGߥ~ek22AEx!w7`kTN*v#BԺ^EY=m.2/YRV^&ljQk*)I!ȫ$߆&*,h1֓)j`_H NዾE?lRO7f )AϨ36_آr0([0#(/&z IDATqK6:W m˜^Q)hED(FPJEV !ÑDNKS^UֽB.Ny2\1&L =%1j5^%b~D̬jP/w[HM{. '+ ` $pP^KoTe+wwǨ#af| ' fɲf=>[&I{QL9m(tbuz.+Б$7qfľz!U+ |~X y] xK9/' (Zʯwۨ}[oK Irҕk}*4 (0@:ԍl!J:uYeőҳ$QJ2 <.J)ޟUd wJB-Kl)Oee5g}$_*cw2i'皸z}-JoY@SIJ>l3.IWzVW ڣnLl굵jh{6csnȪA>K/6CQN!+ &n^Wx+T#tFJ,@[i S[|B0hD2`s& LgLX A۶X[48ȈW:-i=SIR?Iz<8qki) )T́I+A{{:wY: )4YI®ሬ\MY( S@_t gzGpC+/.*XzD^$iAa8u;)~uѽ \9[G+}ؘG^هM;w)Qh$۱f6=v.LP6'#gF>DzKh^iQMpg8kFlݐƍjӦ&\+&ˣ&2ūlF%yXneW/v#vS}t>yzjZ/\ؼvp@*ТS&U 8MH,M&%(Ij=rr5{":蠃: iS8\ުCQgdN U9RrM]v^zS74t頹'C1hs}(Cm1M:TLLK: Iin1?'6頃:蠃:hI| &Ȅ1> L:蠃: MCs&IY8K:蠃:IP м󭀆{f*\t` @P 7j@~Q™Xt!Nw(Jp2@Zֵߩfr_*^tDѵԭ?;mȯj4?~v'u8\ۨVC$J/mۂj<ʳ|O/8WJ2Ł_t:VpڋU˩{œ lKJ ܏f0 UTJ T*K0aUͽZر<ǖdQ]q85vSTpco 73j l\kƺA!I+?޾Im._'9eԓ"WMWHO`Vٲْ4ӷp ާvq\XK{Xs&>*#!`ݳIU.;1J8yobïF2ff'ob]]_ \;#ՔF1G ]Xq~}pfC5ql6p8\.bѮN, UjZbik=_ S7? v. s>';hlGO)=("o5~^eNi)z3"V[S%&v'{|vk؟~1I}e6yg}J;epDLx렃Ucm8)5p *, qƷ.ǙhI:Չچ"(۪ˢ-Ʒ3c~k@{ /;nW>SǮ:%k+љc1+S>*P: f]K4ʀ4qlaXR~i"Eлuf4]3~ߥ=ۉ.O,3 MSu7Lhxf_ =8>ur~{"eؖ|`޶yG!2TҙN׌M5BEF[[tS|&5r2zF?, `ӪW9jeLJeaVAǴ+Xr(mԣVlCU8r>j񛿦m{;1t05d?ǣb04gPo~x;qecp*ާOҜ{L̴0pL@/k=PJmte*6(0-2^UWp^X`Ptps92@0}SN}UދNKw0O)bY6۽|ivnKK.sgP8}">5#j>ƮeX])wn_|NwK>9iV CzjYH鱫)nTM+w/= YR#Rsa]Xv}+ )J|Dzy.3B,f5gy2,;ĜOJqVL,(HMXXӣ\K&yLT&$f 'T{3in*KfPE έ;{|{yhqn/{uf!RvSҽ[s>@ɨQ^#ͧ? qb;fu]~ŭm<o?g'ob//xygrr_f;3FbIj~fE믗Jo[u5|[,(Jghsi.{^쪿'ɖJdssƛ=X%EK[D!0hG܈K" 6mo[Ac.mzH?V-7Mq5iα-W$%NF%Q~6>⏵| :>{},wVپWRWe{ֽ?2KEUؚF訣F̛ ~MN1c?f KJ#;ݾVZ=,Ol\t}Խ(Y=Ooݖfβɾ/FVoϋ{oASFt|rq1Iy>fS6gg>s~Ӛ@fVf2qL@&4sc0iCeRpj\c5>9p8iKR],(&M03{qU9x'SX<D)KDdUR^~rvAfN9ZҤ\K*?;ǟzlQA5X˯uocS˽}Oܸϼ{Ŀ$I gON,9mOvZyJ.)\y,AZG<+kɈ=j>ۢ{DQXO));Te43 XC'Oeކ\m}q`[9yV |-K96[K#U)ҦݬݾZN31@ {rdua,f3 RרhϮ^{g+ O3~,a qӮ}-_V̋o±C8iTc ִi| Dwyw7 <Ìը3f~+W:X8z qꯝXfB8Oչ!hȕfj߬WI&-0]7-[X5`zByzV8s*e`{Qݽd{%"zp0==kro.ˎЧ3u-,pLoUú9wheNRL"8f)߆,YZ<3wTLkBf,cY~t2,T!<LEPeD+3Ξֱ-5~s"ۄ$$ wӆ в$;d3wV]Jce1 M[|P&v8( jyEu(>qዶ=v!6ȳgeI jo~zzmѣ 25hZ" ґ̒Q95$jXK!Z׋((l޺}ZߍBr6ddW6.\+6V)'чCRl#|o(XOz(}"588A"6'3IgTQ/PlQNZ9-ČigPddcs`)ж!QmY,$A JY!8icʫʺ%ZړP&Q, b5ϖW40 S]')@zVjeg3 '뀳^m^W*8ƿ"Υ XjĮ-#EwwG4&^3դG EI إLfqa۪2UUZ=0UuH\NRkzj;XV NJ)Ґθ߬_%(;Z%y񷇭:^:AYZ(޸(e*7Dgb6omL(sЎli+*0P\a0"t0f'%x%m$i7u pIDŽ4Vlyv }HK#T\˧Phuw[r̩OJ mYJbnEFg "1[%I!k;}W{k%B?*J%#ZNwHROe3;#[; t.<1jWjYB^t *:32݀3$Ohm 8W^&ebf,ߧ(1\:?ɿ*ͬja RJb]$eH ()ŒEĺ^HՊi. 0/\,ՀrRR}Gڷ5I]f$']YاB#ysDvܥ)^m ߎX+ʊ䘸:rrS7_V({- $ޫyH`>bܑgX8sÈ #Ow`cmWJ&[{ʈ1 IDAT779װW_Ͻ|Kσwv+]|!sec#4jʻ=u tI䧂)9GckND^.rs!obG FdOZ,Si6xP{SyX麡g k[AI wVgj8`܂u5 i\=VnCtz? ?1ѷiqR39zϔEz48EҐw.}3߾4𛰇YL,ie4j:*dNҕyn\ߤl uȢV`Cͦ^[۬6g ?xϬ?FAZ cY8,]zIv YHT8qM|,wVGL9:r镲Y[v3"A`TZeK٣ك 5-(Gn>Es֯.,yRcc>ye7ܥB^+TKYz'A4^UWEV϶G2MdjV槧f"'t\O:٪'F83x}hֶ c{ Laje*x5ۥQIֳz/j5hg݂qȚRq xeO7 ]rbU5_]̹EEryѰu7WoxY*x3xh5XGIʼô jRS͛mQ("-%š"yܒv&ͳuE&dbLU ۪xxSwtiAL4O˦Hde_F, 6.8\7P5IRMa/)/mm5Mo$cU mb>hZ5N{yHScCtGtA~5d$gBlKPt HEIӍa^^چ"(۪ˢ-Ʒ3c~k@{ /;nW>SǮ:%k+,YKvJ9eӂfGF:i11`4/qEwkmsw g4额6..{|8۠}6 <4V ɧd/u2flPov.7zҙ9wL:x1j0qe~\!zUr.n˘B$.bؗ/PA~֏i[W+QD7ٵG26٘ ,c#|7q4yΥSLkZ$Z>{ 09fNgossFO%˺tCOc!6ndo{; 1'}3› UT|堍7|7Mrvb`:'`-,k4~fG`iΜޥ.*"f.^z\,xz!D+4m73-j4 Z7A[6z hk =fGk{ՕdE7T>'=\ LԦS-l@Rr] oS/Xs60yv/gڹ݇RY=/DOሬڹhh~630FiʝO蒂+뒏&{NZeRzjUSC}#j58O'6[1BlX2m֒|VI+t}+ )VoKiOTeJ @hgLMX X(P ia T. b}3ƣ¸M4J@<^@hֽOs})ƈǺ]8JwnV y$?6_3 ?`m5 m<wMo)|҇ȸ-IõPpV] 8֛6 )ja\Xueʧts}ЗpSzq 2 nvA\2<ɼ=kӖ l䞋D;~X[ħȂMo3gL-MǃRx5f.Q).Nw߱;'wO.yrJNKuM ލX>5c Eó͆5٘c`tjT@kУkn+7QWugc6>Z|}/AUQ B-2Ehys=~TX—7D~two^䧛=5Bl22vR*9Mv p qhn凣C#4N~3s\UfFhmn`6EDʩ?`4KqbvMqǴ />*ʠ}l+i28`SΛ [G֙ZNv 4'訣ǍlfW3vcΈ[72iױi-je"|㞍UVJBs?x5{ԌڦOcHU-!J^{( uʕ?vv1W[S6ifBZrP~zV6DqT\dmʕir!ئ/WՓ g7Δ'MuIjw+wE~:ޛ'ul=>iL)R8RI[S?zϲkU'c[aib^֞ʼ?Jy؍5 ~Kq f{ AߛZ!ˈ=j>ۢ{DQX/(;Te43 XC?Š2pooC.ͿT@qͭO[ m%ݑ*cc Kv&wj:M_3eXfvD˯Q%r]gRf_9P84\΢/k67;oTd^|Rǹ&O"0M]@@&˻ 7vWHfF&vG0SNh[P7; ,=J_;8yaxHxܐaz4c3eZMR <[anGo(j[kbB TYi qTVUY !FƷL]ݟ}QG clԽ4T~PӡO{=6f`&yՒREPWF lN/ F:RP(`|+[̼T,oՏ>pm̩k=OLWdRsxط9RiRg ntpҖj?96|U~f)'.~C,cY~h,7Xk{/QܰVs=?$k!"Iw2fK+қק:ǔbLM[ʴP&zcqP8EEQ}>?-0pm{(ClťgR$*z$ۢGߥ~ek22AExq7`kTN*v#BԺ^EE4-<g]d^wЭܽM&<դ (׊Uju_$wAmwoC EIE5/T+D{N7f )AϨ36_آr0([ﳗ JGP^lu,n eN#P)2Q*B#>{P̷IU) U=S24`rQD].H(8pM ɴ,f)Jp8, 0ƐP#:B^̪\*(˪rY{\ܞ!碈 HyJ_A쵔:,o[weʬLtz0[S֬};Y1/BOg'->mL9{ݺ#9-*S[>ZTݯ)k7 A49^ <.XP$( $ 8!npnb$0TKUr^iǕCݞuh#mlmp5~p^1#7Hg[E/^igצHq01x#W˯l1Ʒtm!)O\Hyw:IЃRų=rl7;;l,ζ{y]9T|3ciȦs~8Vn}kcˠ(R&V"%7n@Yfqa۪2UUZ=0UuH\N򣴻[rd)ᨄ#oJt/*UٞAYZ(i,׌UdbfbJELL(U^QUpaԹ$61aDaodc%x%mo*\- i1}\v#2rDnYzw/Sy6OuͩiMBy_FFye:!}m*g{,;.Q ݟ#kX4$ „3tf5tp,XQ,lzYelyCpD|ۂM\'VkդVlA.J :u:Wzs; %a|3mghXW?IE;y$E!JJ0c=nFR@ e0/\,:sj[y9NxE)RT~#Fۚx]wXIӯټK zb*QNEOLQ%8=SΜ0bB=#"6| { ~/wB ssېJI0x/Ix1G}u/odHG`}JJqM+%ꎚ0?V$lSm@rr.Tâuh׬IX%6L:kMYݪH*ѥ}e~[YiWy\/(gχ+]x K@\6p+H")9{P̤tRMQG10T 4@ 4&?:U'Z}~N 4hn @?W@ % UMTa %P}3 ' )U|BYxZageH MhFC&~S~㰥QDHO>j>?6lQkaRN-I1* 'bB֒;:baTPp1GG, vnN*Jrs_Zq!^,FeR)UKc.{^I\0@gK1^$^??/ؕwsC'*Kfm{lEeі ˪GoUkG:\("ك䈄ynߋ9yӋ6O?룓zXG4@惂0Lk'dĢQki2Â-ɣ IDATX%1`2289kץu>=y=! gYkeK:Uz_gr;O}p \-ALyڛpS閝|{s 5X T8<e;͸qv1e kҒGDFw?S0/TpeƩ%+t|[4`[^u/;ϰEɁ}M DeNy3Z ̒2ތS拋/0zQq)O7&]pRKg#q, V0M}\W^9{[ޖA @eѢ1~VU7/"5 _pR[gqA;H*DiAv.2i~a`Ȅ/öo=,嚍]&zߍ</Vnn ;[*6p:6˟N<:gl=`vFlg`[d2/۞U!zeJ+==t"#79_~\t>prܦURvצ,mٿq6ă;ROuB|5m}󤽑u 1w?Bur?|}:/-=n[Vh$'OVl>$3a;hZ[ԶK :#KR!ndQ:H6"oيngV?_XlCY)zOi?l(-v?I~`g'yv+|hb m0tk!ʭf>,k0㶃ڳ$;9 wg+ cռe2Y&tXKז'SFvmδ7n6RT4:? @TŖMS+CebZF~lɺ^h\kT  ?MUƵbR7͛a2"9Q|αdۖ},H*JfIN?;?gq&4`y;̵ FᘧE~ʛG:^j\+k~^C E>Œہ=Ol |nf⮟݌eJ:2k񊆌(5dѕ3coOle4 %Lc +&BNm$I I#.#7=9|ruT~aEo =v=O4'r04tň{*bB|Z_-vXzh7…/jC$@E*>j9v'C= $:b얔ze1F-nA%`\mɮWϨSZ_#H@j6J~LX keCcX=[c} ;S= EXL4s6 }[-{SBZ)*Z5g-WCc;a/뜄Pd>`ʯ?EM^ܨܜ+6$R< 9^&K/ϓ{:WKd ij,3.}F/vBL EX}F󧞺^"9Gu%V˔[}T4b(IIaPRցjMpھOpX"䃦i?:ƴAq98Xp1`"-iopB"5 jmmuʅ/IV^&W+dx+^VuAսpvَMZIWE2\"xe^EBBJۤS)1 2 Bh|YѼ3>{S//qցl ֬-VO?B|؂}Z!SJV~k־Iw3M=&zv]Aۿkc_p"oW@>'X,0QFm簽i^N͂5i:/} 7Ґ (WϼϐBag{w)ČIˣ6:ܒ3/ kҳƞD.6ΨH6jkC}ǝ2 c /s.CMͷm51%46|{@Q lWm%""s3r܉YU_3扝wmGKr_2XxX7{`d{Tżz18ur[0_U瑿 Byc ]eГA\vd`0rM1%o-Ӭ N-QԔ,wo#zfV<+z@u]"WwWbn>WVu*ȘgG \eNݎ Afjj8a461-tErs@;\OC cbOu[oA6&޻۽C[KntTJ/6mx_'Hm9ȋE_䛹QXR0o\v& ?pU' >,$T['е% hz5+ϙp4:P `QDLwZLhw<ݦvmSNϚS}LN9r<~cι|fZ!٢w$94QX5|,[qR@:v*^M5ZMN&,nU$Ҿ2+\xլܫuKXkwxF5]ҥ֭7ҠjLtNB9S'0$6Q"U*X63&o0E kHYy_[snhhA)!Qe"AIQtLT_HQ*j$W*j0ih<d+)PW┒RT* 5@S{Xդ Zu@ 4@ 4,(3TIHNʨ@@%jX&JhhA#8%Q0 (Rv: 4!V9Jڢ!:hhA3{%<0rrR(42I)*J<5@fMhC4oUpՠ wAC\igqJ% ('ku5@+%%{\xƨO7cVa2/ `-͍"B~Vç9 ]G'f_ [Wo{-3ueK]Q')9|B?aȉг$ X#Y'(\Bs =:badXsMg]ZWL&R/rxW%QN %wbz;f18v]=U@qzGg+m3Qɗ?/ݦ8U[F~FMje|ex䅫~ROK?|+=%<Ԝ:eda22vWۉ-8_0=K7mb́mfE5CWx >5.@ơ W6qU:^xڅAXG-n|FNL WYs}ezJ J3%*rL&:R=E JnAW>[*ȍ$!fm{lEeі /ڇI3OU::`׎|asfΛ^9]~Yb@ 47`#-_^bbñ3-1ٞAh(.*Ÿ:_2L*J$H$b1}@ h8.)?(PKyOe0kmC2/}N Zh=[: +3N.YڠtY.7jR椥wfO?x!g3mMҪqQuRE7B0=nKϞV|7l#,y1=wodC #]߬-Cl @Rz1jSԽ<&5狊7y.X9hk5ló3KXz3N/.bsTZ;[Fu0ǽ$?ߘtI-EQ<'\z[4r_!xwne":Gz[=?']EYVaVܼ0~Im&0nZ#my#ȤEZ  ۾ԳLk6wapOK4sd~7_T^×nh#,Nj`ZMhLN:Qà72JL.?գڛ [ +ҋ?]R1T)άp?^xD+l zv z ]gORcTӺyv+h"ǿ`ׇ{EݽJۨKXf3M獦R\e\峻{Ƽ8@fs޻z,nAâÌG72CN!Sg/14+]@4!ʭΰVߘ@*$9ڼ8&h ɷџy)a딡K3BQɹ+1/1СF7nլkCOջ-9Qeb-ZhQ=7<[nkC\AN##^\ qӞGW[ !hB5ux!Q|ƅ?h*6SB>ޚcF7\q¥~9;q2Ъ=c.1Q2̛1jPc')m}[Xc#21SUA&}c֝S}&?3N< YQB{Y5U eџpo&cnT Œkwo"/k!Jf>,k0㶃ڳ$Ի"ȅwr\Vh)b2Y&tXKז'ӧ2ڜi'K}Zu%E,=#H60GdҎ2 %!QqI)_~ פ"uӼY] I(Ϳt=%ضsldvߞ><-W<=йOڪS4 8yEQZZvW9, VOJmUm,E+K|X&|\C}~-t2^ѐT?U!,CǮ߳؄2iLJVL$$'I@$ic]vG]Fnzr6Š3+ zziN&a2h?1U2,A&icˢ(^=)j$Z?pK$ $$iѱj^^2d``GA]D\ݒR,3֨[вGI" =%/IdojY'I޺̪%"^<__$S|@g=[$4W1[|{"!I8E~ oOcUO՟7J @`s Γ ~G]mtĈ C E L,ݘҫ)B( BElfCvsiEY!,Ŗȫub!J3(PBr&,DL4ʘ D}t W o .7MN Š E8@Hre8йr) L"DȡN7; Pk֭ɩN kԻ8 >gm9ʦ'?霶4K[21W)7䪭jZ{YGjMARe`hus;J*i"U+!lpI \FJ@cg%Vv~~ڔZ-tr–aiACR/m8aK @]kG ߑ GXi$!xi(t9)9Ƶ8V;ox + r %zb@>Nik\| EI(ζ^0a]xJҲDz22 N&,nU$Ҿ2{\xլܫu3GL@:e~?Ck6s 4MxҾg{Ʒ2S`yGyolkuZE1-ލS|LJCZ:CLKGt:*U͌ɗWN0I:Y4@ 'roϊ޼C T.lssZYCUtmm[F: 4@ 4Gt(MUc3Q)JU++hގhh8x+BP\E)FyOI 4@ 4VAUfVES>XUZRN 4@ 4FS ?"F&J)E"B y @o,)(wU(PqW~ZBDA.ocԧT ߯} 5@C&~"u^;aKaEsh5|}mBщ٢6UZcaa+d =[K舅9Ru5.47ד舅a}? Aө%#JQ 2BP&65&xg}IYXɊElLt}OK)#$=۱5CVsc}#?~a&U]2K2Jojiv7ELtDKaK%@*JWG,f]ioDZP5RRfSP$˥RT*RP ws$OSD#b *;Ǭn,=32K޽=cw RfQ/wY:{i YR|ITn}U4wem<R$!p[qPy6GCOw@K 3_ ]?GJ])Y|5qf\: /=~ʯ=6hl4 q$E+'niBɾolv#=Xb: uqmroǟ<#fCBѪjCZ= 7˛LI ^xk ry3 '-_Ǖ3WCȲDE L{2oJīAMv17xaƵu]@IJ[ *|}vQާ%=uJ LJLٵO8*8СBB騉pW8OJ8>e;ʹ 57.z, dBk;TO5u։*AlioPQAɵVkfD,_)sb!9S9ޱg(gR[,mխѮLTO^ִ A t$%PH++,=6LxʂRH?{EQJBC8F|r4L\դ"te9NTH4W8hx T:ZIo.,)рKQmq9.y5vif˔%L^VcEvyQOY=o¼F)V璼2Y1[t{RT qa7鵁 q=)ߵc^3ZO'O1~~,[Pk`S:=VpGv2?5Kh'a9ERu25Oe2BvTl;[;ϩLԟFV2ڕȼ%y\߉rzc]M〡J_:E^IyGXN3f7`qՌn HM,Bwh9ҫ7ˈi~iz3q1EK^IҪ[܀K3|g`qAYKEr׻1j2xm,:jkk˓kg'SFvmδ7Rl߯t`[no1->WԕĴؒuEYۭ?ӵѿ_\ں' U `t_ !SU(\Uj%4iF&e;/ސiެ .$ɉZӿt=%Xض BQ}˕#;goލ1R #O=cG= ӵL?SIQ=Ykr3۪IW!L4Z,?d!~C*J Yt=Ў]˿g eҘ6cX1Qt l dƺ솏x|;AQmg).V$!/([!@  %dml*f33 hL=񌨎CM: ƾ=԰rHBmX&&6~tXzDw=sO8I ں:(GEPFUzF@yH)#f67HߛxW'ktbPӞ" $2\{& DЯuKg)F"֨w/qq2@DGu)nܖ''ӖPfIqK&*冖'=TyX ͪuEHeՙ(UO6$N.{#I춓55JryORN.5?Xؒ=,-h(T[E'l (x;R,I[њ$1 >5%Ǹ6j Owr0a@@dW@ g)-|$5% &,Zxߵβ1o绀c K2v;20TC+S1܆s(Ϻ{K%ՊԷ(݈$'9:=SQ!X[yvjg3 kRۏhJnpx4:SPPt)09F7[tNןI8tH,fRҵykjZT))H[ (gr?qo(#.+R\5r_ⲫ;'H8F1/JILR Ї tpN?RϹwd{^eW'/G,"TrCd"~|DޜNuw '4TO~2x2<.T:P k[d" g7l̨ qmAYŐ:/ G3~=bB4ߝ?Ed}&odM$ v IDAT]!:-1N]&UT=TTA2%׉V9%r|.%Z=;"RTȇהW}\QAc;a/뜄Pd>`ʯ?EM^ܨܜ+6$R< 9^&K/ϓ{t~giYCd2;LKlpyP!*AvHqAqNuő2f*U4Jbq,uZg72\!pgEu1~fDN/=3\ \\4a78!~:QYmMwaU]ދT4 * DEAC6((bT" P@z}w ދ ho<Ιy3^x mid^BOK݋J,` x-E$%/$\)ˢ5tv7~2 py~X*4}lrqwA},ZP(@)+ ea{ڙ`gmuo>~[xFJG+4ɪJKi3*Gp?⠶wFxi#081+&g=oNj?g9=OR7_6Li+댻hVo5oMGiI9OaB9݂d\'FZjڛx 9RNm{6`,(_vȤM5;2(rIw+ݗ ١1LDӲz+3hMg#}>IuњgMܘ/즧1(gC' >I)f]iBV`0tM>ŷ~88j&$&}4|_虵9״bԿ|RT5byM0N>RaC.:nHRhukP#e"Ȍ=,==Kf ՜)KP$242lV+QM~C0y ~%h)()"lՌB]ww8XFWmdV^6Z;V-Y$}SxLyhkfn>lVE,(Tk~`hLKcݿsIٛm=U l+Cd89+4Z&a1CXdTLݝ ל3;|<&OL:tlD`ЪCsTvu/S@XQoWN_RZP,S [S@pYet.A@935IBBh{8;w2eb}5!dYl~؏} 0U~,m3?z2ErI7/x!/K^{eޢ9|#A4>kJ&qx٪%Q'n޼.j}̌-[%'?(g%:-G]g~QUi6^< }W:4:lcZ6Ϭ֞mC? |yEzIpZةvAxApmWQj.K!QMP,$)+hy?LvL{2`"ѡ(suYY4D8 Z>t 0`2ed%SEtT<$Y ~0Mπ 0fQ:yR$8B :ǜ,ߋ 0`@%0 U'@mBяSI廙6e |b0Qћq?ϊʑ >eNt 4@0@9 Ԑ6Q&*v0 &r`  5:%QcioSv֯rKQ"ID1!䨎ʐu,TPX}f e r;L]/]@@ޯ$!%+˿DrJK'L U0ѱ.$tWZt,_zucA~\{NaʒQZ3 U`ӏ?VSbe[7K*Rj40obKvC?s &Ji D痣y:_JZPrb|?#H۱J$9g^[п5bɀ[{1L gGvtE7!90HyvS '.]M+( >J'A&D;8a1`ܽV 'QIegEԯ\WG{^PPN87/@!r:e7& sRаZwޫ"嘵˯&w5O}AG9hۀ_kq/>/Un e %;&r,h^|HҨiSLKO?ػ4&]L;>AW^ѴǬ{o靓,fNg3uEm*6179_=33|M PVU^Co~:wT9Sȷ];w'=ު4[ҺǺ9y:,ACCYQ7+w>F =͛̿>+jh;L[%~Dys[+uX̣a@*ަky޸0&pp; GG?r uFW c^jaCe3 靕~:/7r0A'/p$v][ڄȋMNp徺qUaY1R*=>LG@}Oy/.lݻ.8Ds1!JGtNhg$-朸X_،]Go|h?Be=UY- -ʍ{.58@Hgz0m!OBYWѿK8m">y @?߹uS30[>KE{"D T*XQY%QCySJ$2 *, ERw,$Rں{7vҶ.~_6#*i jS}DQʿSV=:/|¶;߉9QήK"=Sxlx&Y(֍[_@} ul m~4-J)c ߷3^PqG%29fܲ_krXS{ W{K qZry&lXCVK-VWZ2i̩NCuDOK;s@{Zlt`:B(o+(\,bF~ly*b!*T-ErQM7 sB'73qNH٩ P("H>F.Z[seJ,M.-ƪ&AX,a,%(r\$=G''|O{ z7gMW/ uH-޼i$hk-&dE4PepqŬk/M{E)+G* ysK*&`Dq({Pz=cEQPHRHxD[ IH$mJnwQ /ZQM)?{M~ XAKgfGl 8&.3B+%Z! Boc^ %;8}AnqN Iyb $Gg 1V*gT*blcJ ٕ  A8 JIuJNvU7@S[@Q?52 JЩPD)2HB61lOBUta]-:lBn$=N^n1 x|#rV=hq5>R[ծٛ*TZr L (X,:m,:>A8c‰&R +w㖧Chp"8@H2e8R(Ex=q},: d4q̑?|ق>SLk.ouh?NRkow$taf,?ŖX|{r^l>xu .9XDnD/Du%]g`g% }hwvm%Rʃ6" qf%:M(ۈ?"H@ yrm(π~8~H`V*..]z)(ъ( EsmxQmTȟUUI*Sdۅ͚E?Q3"@̢.3oYMK/xJZ9S9}/EXJ|*h1@WsEp t1Q/DoSڶTT pK$)z$ Ark}jB}w|׬2gGrA "NL71ՐsO:*O'QN\9}8 V\KAo%ͧb怾顧NI/N3Ze';o;0; _vgQP%pZ(Q~œw es.?{*RHDE|ܔ MJϕ(3zN׏]Lk.Q]BL",җWٛ&S+ \C(XQ*q-*'9|[vaDP/zmU^Kyq$H{Zh5:kAԽx.Z &;/q{D%lF~ HpH=k+fMURd۹*!1#mu/GɈXu 2eI[$=[ X qjy"BVrNs'ss7ߗ99|909B4)b$@tXq:o]ǰv%Yj[Vx+axyV>h ̓UK{ڌ G__/͟sC'og F,>{f'3ƻg̲E mL YT~[vw7( KR^#"m}6١1LDӲz{;/̠5-HFEvzD柦zY07K)>YovrO}klZ2dPոiG,8 hO8μڱ*WW3n uTҾc9\3ae/, FF"nO!U ʨ_nX.Rw{\vq!ok[Oe[crN aoXzP5k Sw5έ3q}}Ậǵ<&OL:tlD`ЪC,DU{"X?m!5P'{  l.9o1/ec?lk2}W.vĽ-[;MC=OKI&-MΩ҂˙c49`ʤr)*ѿAdو D-yo; mLؿgc_MYkJ&`n+ kM o̿23l]&ř P 0T0n4O/mg?>cx۫ktBĀ!xz^a^oR5/vj,] Ԇc>sNNpMOGT*EAН2gS?IWs>ұBG\d= 0`FCE_1K*L ">AeLq.2 ;p'3.|w&ŀ j\lvC J%#`RO*+IӦ 0`2rIElbXANEʗЗ}M 0`* rTxAXUr$IR(  0`M$I8ABAGub)S%*T0 lvƀ&A0^ 0-hEh$`;O: M|<+ߕK^SQr>&X卮ڱ6֣D#wKeDcBΩ8;$+V_lhYC٣Ã"Bkꏥ^~N_<[7I~2S@!9e%xK9,&͙h EƸw>^qL}Qsi/Ƴ$I2k1gJ8-8!K\Zhv e~笑_AK]"2^Xd8wWj!yqD4b S1Gb굉^!˔[+ŜܿbS͉ݴ&o,l 1 ~$&A.贚Brٛ?rRQ/PL2{MEPvLR6U sUbnx6vlfIh2$'Pgmױ^RY)0`Аsk/f5AK, 3vP%%/90HvS '.]M+( >J'&D;8a@_.."ԬB/)PezDӪРJ@i j.W[{UV~/(g~ r{ Rv x=1sާ]m]c1p6ָ4dh9J˴܁K=oŴߟtM{̺v@ϟ9RKZxoWz6SW$.ݦbwsUO;3޷AĐͱ ?)q.ST|а ]Zn̆x+1.mwmgAm7 [߬Ml @Rx)rCdrzaN0o |9Noi9ḥs_Z9Oi#Fm ^t4ŤL3ԬF:֚sb@0MfGo Uel{ȨVF|Yr IDAT] ]/ 69"VɊN<]61V/ @.sVd}eݻtV n]E~}A aܣ^iTSe.Bײg7Lk{,!m;{˛r1\tp,ߡ^mM|o~Ym*,9TGbN3Xt߱4ܽwA˩~Nfʬy$,_d8׫rE8nSyuC: Y͝'/r2P[OA*!-Tn,i$^zHga/+O. 5A8='J$I^ZtV".Q])zcxErjKbnZ\ O9[DS@*Fb$xbKS(/ԧ]灵Q:iˉ l='Ml}G:Myߏ|{޵sn~ᭊO+{yd ѡnبimwO&ϊڦNS-VIŢ$QeޜJh+G|^"7.̲ ?ܷ8Nѻ=ϸ?C˜ZP n̢.GCzgeͦv˃ vg%#\Duז6!9("@aDn\zjGwXdouG2P&mSvxC [ g&nxLܑD櫓ϯl}F҂ gΉuƇ,TSEբRL/e&8afiW?>~zv;wn.̶ʫ$ov7@uZݬYIsD@8h6]5ooQDN#,ՔY+~G{wN3jot6/!fId2@TX`5%W)N X >Eq!e$ Gy>$* \NE+P( wb>PHT7[0W.}k[Oi~KO:l6FV?{v_9/])M=o1iTSݼ{1R|DPoIɁr`lLsڸ/% @YquLl=](8 \Q̻gkך''V^B8-z@D\ 5еՒdճ;3: unȲ!Y۶5叒Q\LèՏMy>/m# y_ 'SA5e9=9$sP.6`7MݤvM2k48$R\e#Hشw{6(ڜ.pADhrA*:Hr?a|n@hd7fC"cUr&I)+ɀ$eP6)IF*>OB I%(mEu8sa Osd8 yrB7- ,O?'[Ͽ0! x("(+rſ7q`7Q{(4ιMB(eY\Jq,( I Ih $IIU) .W!E~;b^\7 b.۟%ndHkfD46aUlmy"ЫDuGo>-. D8 3\rhsF|LiFAPN){^$S!<cS(ې]pP`!CI9B܎,{ A?`lcqq\Aȅļ֛¿:Zif)糴`B!l\.J@4,HAz fmS7UUwDNGoI}}qR M0(wR6ƑRA5\QD ]m /=~ q4Tpl%).m,A`&,D!I)I (PkSn-wP+Su=/S7_ G6~5dryam!?-XO s*i q`JO}\}CO.*J_<4{g~Nv4v`vEI$+62$r^-!-B;漓UL ιH!-qj+QT7{zN׏]Lk.Q]BL",җWٛ&S+ Z\C(XQi?hr]KxW5n"laDP/zmU^Kyl%$isO F'-9w_*ŋ* x-E$%/$\)Լ+%AXz#F+q[ Lgw+: dWt ?{5yqZ /yj2Nw׶=vٽoW~)`\mwMwB"bF8M _8Fa8d&)E%y$Ka&G@! X*iS0 na{ڙ`gmuo>~[xV>ZA{40OV-ҴĞ6#;5 Hǁx-z[2.z6I`xlYvQI!kV%0ⷻFx%VX hKG}ݶg"=\ЫЙyyei9L5Er4.}$,'54uիϚ1/_ MM/QzN}S^dӒ'M;b`D|opqՎMTIT':%%E-]qS꘹ |ܿzhXd!N0vs| (XPFr wј޻粓7y[z,<WprVh M>xcJXdW:;a爖]}9<1бWA~ְ44, j0aչՕz y,Ψ+S+!N?Mԕtܦӱ!ۄ`YE+Iqht;4uh(j6>&@6Ut@F5%3vƻSdR1X&&w>޼n+KRE"6WoqPR&WÙ>U8D LG׹)l !bI%y.*UPMrI77ek[46I/:պ$GܴwKeI 9&|txPcp/GEn9&e_ۻrˆkşBXO*2eeVf; B&I$X,J)&J8Z% ͙xroZPmLH4vڠ&zBV+ϾusƋTV-[r8|ێ.횳vXD哊C,f_zޫ#_~UV_sMTOC7,A^{zYGǠ ^% ].%MfB񯏮?Y7u?Is{b-!%5GkXd업0hi_]^J\& h]l*rqz7}Ax8GÚM stL̵tԬ_YD\.ɤR\.PNEGkP%@{s[3$Qxaf[~.IZ/+m84sKjseyvIVIowR$8+"ãsw}5>6Æ-ΤN9sx> T ^jh3 JkWgl^~HOE&I9- uajkyc֪/<=oBNbo~AʮC=fnTVR+x2o /s{3GS/lLFou4egڤ?d;iXW1{3|ճ"q6T#ڼUO;@FNK>ʾri {7ޗ=zkTh6jXP` 0cGߢ-LXʪ'[_w saV8Hq}{Ҭf/Fx}+%&0Sȷ];w'=ު4[ҺǺ9y:,İq莃oWGnڨUWWn{N1, S*E*h囍,M:/!莃o([@CCYQ7+?QM_5M Z⭒E?i Hl˼9-ԕ:,0 oSWEno\e~8oq杄w{L#Пq9~ƫӂ\rjaK- t[6KѐY)'rx)t YX+oS&TM b; `;?pqv=+!Â^KuvzYgA*F`壸u󀸲q;I;d>|4NO۱"D-w7!^,]kLdxZ>}I;)mܵn Dſ*6~#8 =  e4v?Z_ۻqImqg\ Z!V`Ц. $塻|X¬[R*9ӈ5jU&;nܒjy8>gxX KÀ2l6˽BQэdHz`6hKPVEC[}gpG%29fܲ_krjy Ы%qZJ8Z-<6jkk%g-7TSi:7d7< 6ҚKVMIMq!$,>Rmՠp}ܙp䄚ysV ^r~fa˯$@^W;G>:ݧCw-+B3l >~0WmMߥĞluTHh\B\PabUaBPDEP6 Wɋx&ڸ4X~xImF5L 5kCfcEQPHRHxD[ IH$mJnwQ /ZQM)?{M~ XAKgfGl 8&.3J)dimªnBM?lM$@dv!J6^@{ IDATԸTI8ebq:~;O~=p_kIEM$I[U҄[1h'uo;pzk6$5cW1_)a$$.j? -xl׬r)oo>-. D8 3\rhslS}!F|LI埃|Jc){^$S*@.6@نJ , `()'ճV(}{8אߐelQ("jHU*'M(r#ymkIZ|׼nt`H 5x(R$S[h//+%B\׃bӋz5-FݺfuDԕ+2JwVMmu [P{4>wh5"/{DMe#QTGN86$N.{#Zcs[NVHh0Օ|:IN.=oߑE],Pd[Cbny7vʉ܌XDnD/DbBL`O}LxY[+G  ʔ7Pu$|czqGQ[clXg[p"5DlR^>xJcL!##.ˮf7g=;,-.[9 >$mיؙa(yBBf>h;@kq6u ]T~/4 XAhPȒڈ?BI(X/Ht,K޿K>^5@V2nܒ7 {֮>uBV,*Ex݇hgO9g/wh4L u{¶;\!/.+P7t+y_޿S/>OyNΔ8's_:]8Ͻ㲋0 1|JJ_ޛ_goLKD|nr j[ Z9t-UN9?s\ T`` ;4e}'ϯ'zSk)/]+ɽ@Be))+P|N <){{S񘨐L B*D"X̪8\9oO{ڙ`gmuo>~[xV>ZA{40OV-'-͈*A닃8X6~$zގrP[c6[8ض}߳8m}q̈́}PCB= i l{6`,(_vȤM5G*aeeQ+jhdu7K !jTuډS'ɸNW;tP&li.Hq:IWc ȠE'߭pv_*DPWgn[3MgU ;/̠5-h]HXh'׭ODki꺫W5 sc^؏b 죜l''$ݧvɦ%O[vĂЉ6 >l~[~g~0ʓ_/qYF,o]oy_]G c9lE )VW߳n cLgڀeS6guO^B,x!43e DFmv|%iux^uSWΓdYt?q ټmLq99!ZbM KX 1cGmjg$VlDmTǸ_<@-+FOX~#駉սY^l"–.^͸)u{wSIepu܆MkiecՒ8Aҧ>DŽm`F`UĂ2Jս[ƴ>v;$lySe2DBuXh3)mcz]NkJ&_\͛Bޖe˶4&!l6NI9K =PU6A{^]8i9׿Yf}#V*/>t0|~QېA#{y6s7m ϯO+,N;5.oT)' ;7*UUcxb+K g:p!krY\}wlʹ Tj<3&L0hԓ"I,% 4onE#P:GguNNN# 0`GtOV*@'e)XP(0`%Թ$ [tXpJ Ew 0`CX4#YҼR.z61` WTGYT X8Sqq*<UPC|n `S(*g@) MPPa1r\.cS@^ƨ{3u6j{ V+SBFDrӭ&XworKD8,O~;ؗ^m^)p䔥YQr[jz#wKeI 9&xtxPcp m0P-]t(C.d2D"HRT*r嬿4âS:7Ƶ2}1P.I_x*Tyvߘoל"rcb7hԱZd~@ Sکcqdܢ[&zr c~G6$vHlks{u n)Ah-nog+Qgd5h7}W `GJI7gZSc^8^Xԟvf\a%f|8ihssx{sT08b ɟJfC6){w]3yA 9}Yz1Z]ΉX\ۧ08RK.E6lo)?B $a[6yrG hnj7%G(zwgyXw1uYvHEȲV -yy:&6=jf̒.-]y#yvDŽu\#dnIˣ'r\Nc:-ɟ gK0۶>䓲O;6fjK^&]<Ȓ:S%* lYey{ `bڥ n^P6&SdjkI|#Sj*5[(ݪCoeꨯjӜ" pYمU^3zw/IȆwl>+WK_Q;7My~Yc77o BN=>%CKOG}jLi L,O:;/\)v~`҄&*KvSN|[|ܑ) Gμy}nŲ3t.#s{-]X'd`Bn%6Re|Ӷ\He^!t Ұa&}6C//f6rϺC|/Nn%@evRWا WvX1׺8w7dݜ76cHs3} y|/^+ ri3+ژŎoybx׭3% 8ޏ&GZ,شMFށ^(1fG CS/wOBn9%jfJH?_떊: [ &l~ W7d;惻8J>\ʬOC̗3r3fN* g6tNO8pҨY.N0ݳoyC>t~.aҗEA<;ʇzL)$l綵Wk5 G\aKCϮI.!4o ϏDPZGq:̎ x NCE ݃.={ڕ@ ܫnQqQqʹlSEƆI;-ݷɥ 8 s֢+O t; PwW$vպ{::UY% /5Gyz{ ݌s 9q5+Z72KreJsP705|)Uμ3r^e-lL\0 4ށ.sj Nqe! xiq%Yei݊Fw/~r)д U7_L34;ZѲյkɡy47kVR &gY/.꤮0/q\6cm$73QPwD\-ǒQŒ?ykxE- UuQv1!lX4AگMS* *9\ڭ5蹒ť䣱Æ1inBbqb|+ na|KVN)b)Aez}nS75%g"Y첄l^9%lnER")y2g~/kz3;jYAzlA˞^f_:߉u& oF2ͬ%#: B -[Lk]z2FSti̠4lյC=QNIcjwZk=1tag=N |$x|Avw5dQoƊP$(XݎNe_[zbd -|'Jlj5ͷ7ו+8iħB1ilj)JW}/?Ȕq[YS(&]A9Gt ) 3ҳY vLZm35eOv1Wna!x^K @ }jr uʋU9i"+깾tcÜȕ`Kq5}v#TR 3efٖßc8e['N?X0KHd("(o{,\lǡ= DmIIBVdĤ)O˶r-FKEx? Ũ]dUXeKP^{-ک|Pf4bLBig%5`L $T-i;Э( 2Q N ֦x ސzUUTry'>px2:xaVnk o=%L&ICP)UGvLXWZ~[3aR~!BG^̂K}&^Uu.YVCr2KdYa T_'C-MA8i?蠈wyn᳞m;5,9Ʒb2QaN W( t&BYa^> L_ 2:{I `؍urB%mmP[[ݪ+1f}u¥-7)o%`Qqb&ͣLH>P#.HGPGgPhH#V}fղ h " W*/ٟ*oԡRqțtD>UDrzI̻c7x)Hs-:9(p\%q ` `uA~;w\z79&Y qd^Kz籋Me)V+q5倠4Njv1}cV <.YqTVhIg%rBi@xOħ1(`b*ӉBwIéͮ|eD'tRݹ?ʒ"&ۑ?v?@#z-,oiTzc}a&T t .%Ʊ>_U>H Y<ˊU%Q8=&"BcD׸Q[ӘT5Mբm8sZ @vꅮKGSoLeD$$9UhFTcʌ>b.(Di=`oOAKBpmh7&l>XVURfLB RQȖ`l]Շh(>iT=GxDEsԍ)~9ޫJT.%_Dy@hff&Y4 gsA(lQ_ KQ!oTY1 QoVzO"$׷}]9E#6^DIS&!ƁD'(s{ :r~:f2z,mX7n#֙t'a"yǨPYFGp_Zbۂ?#>Ve\a'Oy!AoFfu:i}/>?DOeC k{:L&̻hn? T u GZdNR 3f9[,=}d_e3bۡY,J ?zAfau:{f*WO@&.ud\(UCeZ|?]wY5V:]sGÜ n 0~Vi(`)WNdK;ʇJ\p-PR:v_0?ՒkV~ΗIxR@Pe7g[bWy5Uő2e-V LL++Pk7`vn8RIgm;H7wrB:ז5BnGziwRLr9q{ bF{~Ȓ`2Hץa<V)1 mR}sPuuC*.}s#sN$4Vw鉸/{ ?J IDATKE%BV㱇l  q]~}E1*As` nHK -f|:ȧa!}z[051ysa::(%vGہwqS݋zŊosM3ڔ(%÷ܝo?RP졮l4XR(qy/k|6?WGn7vr԰;lx_.Z+BaMjZ5UM7 6`NFkh, /8 ]9¦<鹱o: 9C :3}rGf}uf.:\_>N콽n^W{~ϖagP׉%AvuINAMޣb տ>xuyvVe^{o1+:OuN g='5եF~t1Y0~yFYN:}1xjwwN6fߓٓHTXc3w_zUL2uMII~^yosҮmmLA0h9޺_bxT~;&&'GqO6 gc$j]~Yסnbj9x>(]Tw;C,{*h9u$6޶:oV. *So,?μp`DC`eȰ'e;E~Ue؁EY31*$֞ +Dpx|eWFP^iWs Q<."] dH&ܼ%J9Y F# VM'O 8pI6(_,ңb'Mg<̺^5k;Mjm+fE?Gwq4TOIRu\%aUpY]ǧr*cx+BZxsϮ+"02sr]7oʌߖ\9 T?+Mx@(F?2}hWkk|r:8i7Yl_Z,xtqm@ j{Rzx8;kɥ٘_;MeB_y?E R)+(R(TPDGLiF5:sRfb 4%`ӿ[ uqF *BgRʺkPe (NW-[{ih=jtH[ 9(?d#stYB(JM<2!&'hhB"TV70 #f($ȓ;U4@ 4@ j X GmP䄢t8@@hhHGحxA*TJ@c; 4Р~B6}KhPt:]08.p']Q*(R!?5Rxt뺘?J)ey~Lk{ޏ LF]"Ʃu' n㦼.g=z.+56]*CFL[x{$D"Â"Â>ɓ . <"8<Ȱ$P1l7G NSTjfyGQrrӯ )KrI:m7N p\9n@ 4@*1h^txTA܃ã☨w-WYm"cXʹKvXXAhu˭/COOe|!do =^%oW/x$ci6_{ѹ\tRqɽʾr4ѶjKM;G3.gfCV\A!ɴ}y@\`{.g0ljц.C:Ўսi:biK>{U"X{v#j tcXnM/'.ʇt*R-=Ut?ބt|҉<,ڝRJ!@=֌Ձ-QQkF8=uI-&⧬X1Ѯ^o~ކӿa7<mCO'_ܽ&#\AW?e?gnδ/gWDuo7hϲboOx/*ҩb anjixoNm3>Ţٟ}˰.'WQǵs;C:u=;٨u1jɅœMq ?YIJoCVi>ѻiq华>8!ϹO=k$ZyzxW-s 9׀g?ȷm{"YS>+N5x ''}ICF6o炸򳪢w}ϴ>q` Yaӣ ܿuytdm/s ]"O͊_ƓE^1go_ly~d߱6rGW$Ufe=ĺe.[vUɻJT>T)%(J=neϬ#LyˢBrr U#>WRHH C*RmR)[-.ѻ{%dûO6+(F _ ~*O4-qiA3Ew5>lj>!k[.$̔vSN|[|ܑ) y|u@׏ny i>-ţFYbW`݃)ح$l|Vj49!ʎ+Zb'ƐlࣛSc&=8~ӓw in/9!=9!]b}ZQ`ȕK;ߟY1(vw|ˋûn])n~\79bym5ԸG1>ZR,Os𵅡/JV3W%jM: [ &l~㤰v)n\vw q<|8Yu.=//g5lg+s8Ua 'mp2=Q-N]]ag#׼GEK4x@.c)ώ+SZd'a;_Y:rW ''_zv}Lr٤y[L~t څ:Z:̎ x NCE ݃.={ڕ@ ܫnQqQqZJaREƆI;-ݷɥ 8 sVv:a Q+*Ix7gQ=ژ.]%I*P oiz>9PO٭۾mdjN-yCT&u&E~ p2/;Ѕ~NG w)L#$#Oo@C'(д +<̐B{^iƔfմ Qv1!_/mX4AگMUBz.Dn䱶wyRUBi U)Ck%.hhYڵ<5+N)4N":3hȯٿ ԘNݚ/~K~ZBrpEF5]D%KCQ=WKOGc c-kK24(WܞӘAi`??kz 1 7z4cPn+z3) < AH jȢ5jތHP|D{5¿)bd -|'JEIpo8\OK$>ݝI>NLQrj SneMЛtuQM j)mPn|(UǻJjDgyCݸ49q12O[B1tLT o(|1H=GUu" g{0맾tcÜȕ`Kq5@G,;6\J?lpݗݶ?S%[Z_ሗäew,պK/䁸YBYM`r1^(=l&BVl= dEFLطeے*2w1ԾވM#ХB.*pD-AiT~uRɦہ&ukЯ_ҳX^:Ec窅\S2M[3Pd `AAM)i!e>;6O|((d8t:qì 8ݴגAN{6JjL\S|aǤ.~59%pi_?A@A-gm:b\4v/wɢwiN]"[E $}8#+D" .z3yW{sO:iE'O6(p\%q ` `u`-xzW{H E6/ 3sJ>^_kSH@ulLB RQȖ`l]շP1.}*|)^7:k`zSfE0at:UT#: IpLi.IhNJܻ?C E@Z7F,Asa0Ц*ű7 U`qZ7?77:k"TMoO\/`%^+uQǻJjD'P{ݶ'g ]M/'Y=WQ Pν"Xgݼ{7';=aq[q'Kqȶ4epe ]df~SY)0xmoqyƍU TqT{nY7o5bPCK:(EE.mΕ n>b ˈWGlAmyf[2VQ'L;qM@p),ϻ݂}̞@¢·mu=6mh~U1L&w_~'o;^8/ؼm,AdgK~St pCq79m'z Fרuq{]ƣ&}1A◍tF6Zl'vmZ,F8M;x[2A$85w2IAΕKB0]c#O-5w`DC`e2r_c ;pbNm}ǚtg| [p`^D,E_*I>(ܱbv7ՖEUǻJT>TGpE|DǥTrVkO +H0bfr]*1iBґsjm`dS[ $& 0a&@lm?;+u(:;prn"Mr *͇wgOˊ=>Kٸ*cxs<"X&]fNՠ3:iFdcu ;+3>~[F'ҊDӑ !APmK@Y=B?eЮv9.t&qro|[ٿ;-<|^:wp_x 4垄TN&mZyj0ã뿠EjFOD"Q؉H$LV! PBC"mSS6&&6v"Zi31#l[#f{XS?6.sDX JH;W$aQ1) WD(hN 4@ 4QC/^)&Ŕ IDATT*F#B&|Z!VSkh1d9RܖSD%q qؤP~(hh 2:Gq|Ny hh[(G)t!TJ:9)4Q+' %E*_3Jh@ 4Р:d@ISL8(JF GUq"&ZF|< +>KL]|~oZש[f9n+CD"Â"ÂJ/]pAM2buBe.׷ެ&##Â/~'d[:"Io?֓ގW?G8^A#Q $D"J1J7[@*\U_rNV<|t(sL:۾ǁgEA@aZI^#ߩM AkRi-UtNQqˍk*,Wpto:\'B pR6HVF-̨~xlsH.98ObI Ov[$"tͦsԫ;7.[9Ͽ[r7OG 0bDBIny"#Rg"`*'9~&:'&7aN EXoo>"IN 4Ƚb3ؒAшBZXfD')lo>cFd~ˇe:_CȹtY)9^>}>4Y[f]g>ؿ%'Z눋L9էe1w6׹L- 8;f9}L\9u[⡔vW/QNC6wl܆-vmcC-6 M @Tt%jCl&jl\ #]9Lkj=` ά+,dcÌ6 mnoOxN< CbS'wV](B656HK^>p}vMA$KKW0E1F;}0'GRhɴ"׼ǘvfKg0{"Ⱦ̶|/idžLm ܤkYScSeUv׳f9Oޫ$J. t6&0WO7+];:;!N4n=%g/b;{|[e7_hc|]&O:IÖ ݻnNkgQpc[kaZ辀*x(6JC]rQ1)'vC:n7fGuKeW|tyx񎂼7o6ܑˍ>yQq5Jy=.\Mc/ Ǣ_o w 88խ l.uVTҩ*Q|A?jB5In'eg-:ࢋvUS#FV2qak1"lc|+tlD+oE)ŲAV ;u{ ޛn'>{F4g1x㎍L tnLM+cezNMǩnU/vZEcAUS^K$u_E(rsyO᧨MPT~HSy7UϤ ^T߃^"4ށ.sj  Nqe! x*ݨ~S>L-~\]Gscf)`aᾡ[yvYNJ }@hMǤ[4ޗeыiP93=/j4y_  B34wZom:LBpр, yNvYB6B1f伩kj9o;X0qOw':bҴS/Tm?Ȕq[YS(&]A9Gt ) 3ҳYCM;w&u"ګ޽ ;+d!Վ,jxYNѵr(SdӬAqID/:bdTE˸Y߆[ot An:JŹw *6eTw(2gb-ja9(X 㢇IqYƣDNȄ}#wZQ~Pg %RORܖS(RoLۛt76̙jߋ\ F@W󉾠HʲcS: gvHL=foR8T`4*V>{,\lǡ= DmIIBVdĤ)mcQZ qM ՟b8S]Bf(D)8 [R8-0xCV}vV?d d8<vN0+rN7d76JjL\S|siǤ.~59=2:{I `؍urB%mmP[[ݪ+1f}\eR)o%`ȁK(4ҧʽk: T#PPBJF(x4f>^K*zztQq_^Vowr EdMe_KҚX8닾Kd06*Da00bFLʋ<4U]a^7YxuIHK84].|Rce#cRf;0rIgwl mTJ9H-)&d*_Tt7pٱI̻c7x)Hs-:90Q(K @@&|#H ą^w\b{$zMX覟>]hmZh՜FB~4`-&>@A|NÅc8Ւ❯Lv ޝ{X,(2n._n}cdЁ[o--JoL/2̄J"Tܣfټ$0w0 6 χEi.p.l U}TҌqS\/U/+utVa<9AAUsHb%} kը2٤iw$+i;dtI]w79P…*a/ u]Le;OJNuգke];N>cX6 RZF"οa*ն? .^}EH]s]%:N?MmRmR$UYB7_$Йq5PKJϮV(C='_cƒQ%ƾd)J0 Ayߡ4ά{ >uN΋<nf m~y|iQƋm XeO˧)HOv^Y(\]I"7F\3;KL\&(cSqDV]w*uO]SE,vBe(!~wwA$L(լ0b r exK#S8s!!KӺ! 9RGZ2JOr_Z.=7x*HB^M._WhmdY _EF uWMe`I>u7hzć5vrZUx=E D//Z,9y{z+Z.noo/c8Ht8\7mOa,DƎu2VQqt&J:_yEݛ#k3{\2gß0g*-L & ȘT(?SS)`0pwCZZP I|؁e{r|lGjbfa:؀ZOj ҴïY3CKCYl97[}l4BV(qy=>}6V7?0f⑨ݠ 4*7wO 2)^(fjnD։5D=ntDf^-runӦGwVCUQ%] Pν"Xgݼ{7';=aq[q'Kq\q2fYiA3Ǭ<Է8<*8l'vmZ,F8M;x[2Rnge蚻|({\$ m?S˯ap]PX9s^tz1M_1q۶>LcMTY'дZ{:?NX@3ÖRLJoZ{LW> Ux*I2ss)Z}Pdӱvjn7*ػ0oܱg4!ȉ!lf{-wNrrXHhj[ Vbs"N5;D#*ӫ::L| (U|Ga{~,X4v 0dz)??Ep'&g1ی)׭ߊt+1P^ S'OpwW\Mc544-IRU$W[_5WΟBIoyD'L̜ܫf0uYͱJ`e+,]S_ZI?oX}bbTG Z|=lη2㷽~VRfTAma(瑀z^}<eЮv9.LhS;M&>'L-f̛[ivRM9\8N[9 LziowR @ 4K&}\5>`V!DUBwYWLv]/CgRh/q VE4 *\#c}Wd ʖ TFhho HDP DQHI6!B^%WM*_ 4@ 4w"oe ʭMAP '#nXwרMhho ҟI9)U2G%AſU/Q4РBpedl?uHIRr_Bz| UUؓz+'4CbkܥH v]ylOOeO0Q:9tc4s|T#;n㦼.g=z.+56]~!#&Gg|-<=XzcaAaAK%]pAMbuBe.׷PMޗGG_#$Yv֧,yd> :E"T3(TV0 6n5!Ed㝬xPlt}[ϊ~4 4Y8u] ¤0 OV\3ɫ}Қ=SQ5 ~'y\65Ij]B& _h~ dB*iN~h/0c+ڝ£/kOM^ѽuˑrU?<*.8yueŒg?y~FU aTDn̯)̼1K6w)Hb1N9Y} BPI2:'&pۯz*ƛ?'zׅ"^VԷSя- d~vlkԖc뷲/*67MΥ~I{d&hA{g?f%wXE.Zrype{=ǂmu! :- d S&ZJ'ozY$>`QOپ6x*xF(Nj%bDvc1e|Ǭ2֛e%tDyqh¡mPN󲪎ao`JZO/.0qf==y+#ߴCoHCo;"O z׭Q7$:`+{;OiA M-si}anoVé8Ĕ|r)zxG.>sFkav}UMqtk{:%60efP?#P_B -Ob GN.14jBfI5]d ^jܿ;rKLK ??x2-kuRO[=Iޞz.XtRb?y~8wA@Ҵ6z9w?9WzG6!ot7iEK*˥monYU'@ާ;p.ٲ$&!%Ywo`9o/O[zg%"E.Hs{Ey&[n`b#N%?+Q˄E [[5ע9?2[PZp$#~Օ`ϥ]~Q_^弍 XF54u.Xi$&^ٲK{f=vfX o} %lzgcTots_ayO ӊeE7Y*l&"#p0KTO|Ja3I o\,\6XuMR@?i(}.nip3:D1)οF3ml;g;ΞWOA0& ah ˎgwQ|t#6nl557.E.HnXXsFaCc,'W/w,q[ڎ3xMUjƚ;@&* ψڎwHP|D{-g 8oD2@qy^Ôv!NR*0Cآ|RLϽ1DL,)5ҷ㳎*5fuaAaK;k|=<*F& caDE KOCr QD) !NR5z6GG?)($)iv؅s7x+!(ȯ\SӆαbhmefJʵJkvae%6h \.XHOJS"c6Cԭ~B6%ęoS&+2W@Hq ØV,("KFN(ƺ Fb;M=r_k ris'H Jd$21v~x,4:|(螵Y&!).e Ҡu+F5m<( ($gp/Y0֣&9 㴠ݣ(ۜk5{gy;IE)4wzKQ\,y5> t;b{@c2Q2gф`CD%S0 Av98\avwkSY-4qd`?5?hZO(Z]NGePguZIˆ(GX]"R\gƴ!ħ 0;1Ob;`Lq*3JJi/>͜^@*(XȲ=[Z(2ϖp䭾w3ru?9+gȒO2HgȭD c<kƪT l*qZ*ݠ/){Ko_ɋ_dŽ] δz]/T+Nfdẗ́QjqLtWBBS>i-_ SDPS'aCpN}8Cm+rg!Bf),8 >e4#O ͗V/Qu|<;QMN|hl?]'k`h30_|>ܺuөH @FReIGJP *@rj (Y10u1 rd=\9YDRm+H&JZ7S1EI ͓$̿m R3~ҝ,#5} f6^=]]VW MގZs$/-x35yq? r'缐 H4Ou``qc"^˄yJuwy׵+xm]l`j(\{N k!!eeO1rzzh|GOWcY$/ drA1 k%L4|ugşD,ɦKn%j@0 2ʉzL@2xIdbQrDԥ|Q".Q(+M-tס2B׶MdS/2I `kwf()LcCtAMyxEwd8w&_&-)/vӃ͟s1!M>+Vlnrܬ߶G z:3οKD (RH!8F); ˒2HHwe<c;mR$S!H} k ;KT~\R~i(cq+:MN[b'?Ni$^KH J qIAQ_NPZ["le<lPd`2ZDdc4؆#wdenoGot9譫o5@m^::濓˴0%G)M 3y W<hmOq˽s7lz);ۺ 銳gQyg|l֟Y5ZC ee?8p;H'W.x>kd3} g/IY;|Z/:֒i6>VI%A9X-|&~x|I1=#߲(n~uw9nwb5tR3x{c52OLQ>V#9y!W=Mz~\qwGIG6kҁ VHDHcsG_/f5L2s2xc<ٗ;o~䘴gg3'm`Y ݦZX$3nFN=}QҍB1) 8ݘ vM  k7Dupnyxk:(hRy9CɥΫ +W,t:e{N?s7f!|qxHr_~ lE~[rcI6Rg>Ф- nCe$<:ruITd s`AΘ͸y]pn~ak)r8l '+kG0d2 }+O ) o[S_MHI6*_,Ǜ)Yj?kW!eŶڡ5l\CqQuѷ%pWݸVG뢯,Z6o]XLg43Ӵ̸))Onճ ^OPw1P$I}YŸ>;gL?۫탛 cZ>6fvj} 4|_|@Wvt6S`Fu;C坛 "7 BN37M:26h6mfOklWͻxbf@ 4O`=i]!Lm۲E!4HRl|+(G@SsR:g!hhͣM@]z$I8H$[0 \% U8 4@ 4jZpP XR igT' Tkhh|q\Y=W:Oݮ&hh`JefVM$I) "ki14 *a|]O@UE"$(>EQ !D o?8EY.&0?ئYߢV#g=R&djOmrٷ~K~ ]<ԹDCCI9|‚2D=iRBZ/56e‚C.{u) (k(DyrPUzt&ͥYtOMg\s̀L)3N:Ŋ~w1= =ÿ-B^ m9歞1ҺkNʺ_ۤ7߮Yƍ.;2O?|0֒ۄE~X{0.،Өfj\Lۇ TUi"AhDTC su5E8Ii2pI)P壊:*rTBxFE]kƯ5D=i|l-sRw/+:=Ϗkحd/1aȹu5UsR{]?Y  4@ roĬG+Kh 77C7 (YV_*of#(Ӽ] 4{s#Naʞa|$\N^q@K)/XξksU.Q}ooiӗ|W׷E`g#._z}+⒫Og-\^`[h`N˟`mg S&*.?gCW63&Am%E,uJ(l_9k53ַW~^GórȞlj᠎[JahiaF *(#۸yiY b]6xg?v(,jĤ'珤 f^HXpy喈yN:9>6x*xF(Nj%bDvc1e|Ǭ2֛e%tDyqh¡mPN󲪎ao`JZO/.0qf==y+#ߴCoHCo;"O z׭Q7$:`+{;OiA M-si}anoVé8Ĕ|r)zxG.>sFkav}UMqtk{:%60efP?#P_B -Ob GN.14jBfI5@\xH- ΃SgEC%Ϗ&L)bvVr' V(.{.%ly-vakK&ڐϒ0kQ}Z>Ҭ uEշ+%α?LUf3`KtC[K ( _;ƹ0,L+Zم!Ǘ>Vg2dZs+ ޹cé|e\;kUXTnofV%#}]Fɰ{6Hecm~ȷǜIq|uțzG>~4`OJCօK_;'&R|ԛWLLt,;t|h.D."˷_0euT=#x%{~m(rg˒lKd=p^كsMCxI \ʊ?=йm^,w'q~*Hi6y?vp璈;c$o:-%}[ۘԧTvqBf,bj!G]l=DK}O\&N<\bd7.m7=SwPhĠOc>׺Ssc}f y~3 V"1ސ-^]R;wuQ肋3˰jTCF>=Xfw%^WTzRK 8<JI»FBD@+Nrt;)+S7*_@ erL d2TڸIxj{. tf3K&%0*5lg1uCm_u6cK˲E}W^3kΘ(cɗ[kA1#%|5f:]4p~*5Xԕq{m?sq٩h>a`1@-^HҏQe=x}qxKivX=0&Fo,{/=9ZVa3Ʉ 11g^z->V IRxd:<\׮xGnҕNFsqNa՞ZKo:ƶqyc zvw]OGx 1b]C[sR֌5m6t@=Rp~rj?Z1X8sTٸfl d{ =8q8q7I72qq |] m7"8J/znc{ S܄8IģLu`-H3e<.VlKMib2P[-}[Q:>븡"ΞN>[cP}D 1E1L A@PLZUkJ$Id2R5'q:yh7]]8wg|)Yǣ+HOv ,TxKI`tP {d2qɈgSqTVS:H "Rd%L5 }znU& YWo64&ĠI~N+zpT}n81xϳx& ҃mj.+4jOISVluE =FW?#B;CL 1fĭ8u&-6Vǹ޺BtdڟNJ83wRF +$MVSqut͝(l_\N;6eꏙXBPB#7\稚ME/N]^DRmEUz:*EQN'fBQ166QG/wWR&v#?nk5Aֵ9mV' {OYn1Q[hTBWY7*vXS;tk("*<.MG뢯,Z¾*օHʤ<Ϳȭ[׹<>Um&DG8AMJ:xR3QU($q9c^ol&`ry7~:?xY5@:T&wm5l6ppvV;7nEoT$) 8㠈&I>$I@M6]Y5٘g<዁K 4?0;wu97gZMh@gE|? FFF*&N H@ ڭ[oN 4@ 4QCGRѦ ATQ\E߉.K7*ijjh,ԕDF( O*y@h,' 4@ 46hWjY9ڊRpP1UUPI 4@ 4v&ՂpR5pDCD[[ 瓦?5РB6o>hP(s&[Wᠸ}JUr>i?ئY"g\>hDI ?kŰS&v[DHnc26MV%Ve 厮S {c!!$I >_MQuaAb4)Y!-ڍ2RuaA!q8Nߪ&mɋVMr<'iC{r͍_7~2Y8Uo0n}, ;#{3l_)뾯*Ɔ_yg oamj3>Io] ѩ]^xe~|js/a% Ӌ6U_`\QIe.?]9XÃV o4 4"*ߡ)tCg"}MT٣ xTbҠEj̦>/):泍_ Q:uO[eQѹ;ǭa|kحdEcŠ's3dhc種ڜMrC!hhP;>YdaPB*o* T,<)#(Ӽ] 4{s#Naʞa|$\N^q@K)/XroDI~1X9cbQ-E[%-v^_4fJ\R@l1Y]є[:lH-N s:t j`3smzHZqXr=l%Wg<[ @c:)|Ve%E,ubjl_9k53ַW~^GórȞlj᠎[JahiaF *(#۸yiY b]6xgeMZb . #ϰ [t0'ܦOID_Ȏc,溼OU2zs߿9/Vu^8J@iq^V|0,- z@pRK&ά;oe6w t um_< AZ9[OxU96rF6DlPt'nZ ZҊJSqMߕ)䀑Sn.\|n<u8o )OYtJ&m2a55G>>ۿ/i[: RϏ$|]cb=hԄv8k6e]΃SgEC%Ϗ&L)bvVr' V(.{.%ly-vakK&ڐϒ0kQ}Z>Ҭѯ"8~-{|){l*|!L:r45=ΡGR/,* L-,2#Tv*z&ͤjj1hXVDQ)+?q!ˈj;J6ĒLoR9ro7\tKzL5kfqx+ڿܒ{l3num'kZLk)UHS8Cvy˳ (}HJr˟cfBl[EJND{sۂkw2eϪ,5m 1!.i뭡|y46=wbL+fR(|ۛ|>-$9>g޴~Ζ%6AGF̸p $ǧ`@r|zr|j W\@l~;6gJq*9>G]g%bP擰uc[o#>a꽓._R,|sU|jZ~?-54) /ެB^"\ٲͤux*"M/ٻ8/U{//q⏈RzǟղԤ&QRN]:Fzy[kH4(U݃tfecbcf{iֲFz+>8_$yưv\8[]R{X5ע9޸Yl׵:ޑt~ӺQ\ܰӠfةE8δp8{^=( -,;De=^CظEܸ '5caF! P_ܱomVk;5Uu6?kj‡^'do?#nܪch;N"AG.L5xo ZF$/znc{ 3ד8IģLu`H3e<.VlKӖ62e&Z:au|qCE=}t,{QOɣbdn<1غL\DP@Bz< l->8\՘o6z*5Z\]8wg|)Y֫Cw)C,!C^dNrlr=<['׀V\ IJR~b6cΚ3e9ûv<ѳ־g^.!Τ~+r4YYo>ղԤ&Blhƴb(D)Y2r-ozP6e`7rԇatlK-ZٔK+7;@FRP"#cI+G9|FU2$ AuMqy-U h˨ n,;/Y `pGAMsiAoQ9~lwaCc,o#5Ew./2JQrA!tPDSO1~wLq4T!" )Beo mDePS03y㼒r@@P`;~JKq)n'Qlj&ҌS*DJsp1W0YyÄe3!Lpa"`(%N({4xcNc'!ɤHad(yjQ$BQٚ"K>"!5dl0ՎR) DiQ h$(Bke:`'E-cm3^ERZ S8Z̛z5NF72] LIW38pca{ 5$l QڞGۙ`(mR?30bbl>d\տQHQDF(dK))}"izPQ׏؏ lrW'ƴ˗t!RH\RЦ@$d2"Iy(%Y mrzuf#%$w5PBp.R7w(L}%!dB &˘#y*0w?JI"ՅB ^8w)}u=:>m9XQVn-uա*8wZR$d2D0.%bDK|t'PIWP&*( 6wNyu۽n쭻o>J;zx#kanxEJKo3*Fp<҈Vjۻ__ߜ{k5i=zybl*I[@9v2X Cs7 SLKsjJ9IVGmGMn czA:+EE3gypTgfVc6f2TüZ0FDPIJm]ɺ XCӭCn>\D۪9r=sw 혳5 ,t,4538܁snwrˁop})~E7)gIIRy*/^uSdb0zMmo}wqIԐ]6xؾElހw9^q eqeS}3hݽ2*QcnT18?nǎD9G %:L^ևݻeL(sP1!5L2s2XcsIv.~3\,nSs%g.^Q{FNb.j\4yg2eX1$nĩk6o!ܼѴm~vOVcR Nj߅_?,Sfzx8Ol&׮k, ;#{3l_?g" f֮>/+|g^kF-ij_moׇB`t,NeI?]9XÃV o̙4 4"*]yUs1t 70,HDFͪk4#*5`&*ƘxFQ>azuy~U#L\gxwk^Rm~uVYϾw\N[\gy ܲtݩ@G~[SSh'!6gضyI=;ܽ]1whͽ=K8l=52'M:wƨ֧-ޒ3Os@3|+;ͱWN,|E^4SjSXC;3?6a&,1@Yu u}ÃO/IOdj=;?yݳSΙڜ|Sw[Md]5x5U_6 gSvGh{+<}sD֌U|ݽћKWuF4vMÿ[m3ཅ3Ow~zϧޛYr3zdcĈYm{85ջ~amwf-@WM>?y M=oi5ǵMxs7c񾤺~&_g܌?iۺ[wKKSG{[?b{.3hüxg^²_:G' tmH^MK ^t#Sfϛ W\иM&O.8ƫ3 yOZߺo|x̼]χϸpudprIx–Y%,?fOv]xB~?v-_Yz =i{6j[Rs'MP=a5x2Y5:?ٷyIˊnd<񯦕wMsk}RsCcFf:zǟ/4" ;VW6FNpqKi>hd]_\png\>x3oKыNSpKϼ;_o-6 4nx{eճ-+˵.mvJ^l.ؿ_X~Cpق'8ڟ[⑒Hؽ?\^,a~_0fmfӇ^߼Һ5?8韌kjX  F.`j?vII؎ol Ҹ5)&,6!w&&LH$RSqY( o!\<v_e#C-om6&MfK{4GF" ȑcǖNycqWTT5|Gݺ1#]]+Zu=ƚ=3dxהʊoތc۲NS_r/hΊ쳞RX^^N*"c^˺m{'wX_f5Ec/o8HdS=[+*yK&JI7xu}]yRQ&?lۭ M-^~RvϱG7vFBp8qhּ^; 4kDdvAAjdĬNkgiO}ɐ#~{_'Wrf 5l$-D"]Fh[3_eeÊ f1S&G\8y-+/ȟ=`٥gڗmC!}sS!lJ{}]돎O}WKһgu z(+5+ zUt6 {H.M:oIFœ CX{i+:Kjjj"3{l P8.rlS}]d~zΧ>X:!?W08hުm ?l ׬i.pjEAMӃ= ojFKyb6ϙSùi8] T/׬ mMktնyA(m?ܽ~ժ`b |/䇊9!+hD⢽ɽ[z{QxmSc/6Q_T00ɺ.M8햆[4 fB}8{룎5*6եo/ jZƪxOy͚f1Ȋښzx{>A@e5n]GiҨA੥}غյY'dnY&:ohC}BrbBFdF{+MMڳ籡h[W\u)NHkS]8<&$DߙiᙃIkxu555[7TT졙VTq{jsZ";,$:99VTϰl M-{JB]ӳss 3 7h&'Y0~)cɼī?qAy#]<¦iC+e.qվƽG@ygw/-5@[mʥ=lQ^;oŷ´k$7_$Ƶ-щj6o֖;kaVom]V紛p8ܺElјd, C3Rn]zhۤ^EsǕ=t-H19m}5uev3 ?ٰzuCC{V`6ضmJxgK-}ԲNw,~w_lhܶhSҼK߼ M?;6koڳn[3=ꝗkeJf`ˇZWZUpO<W\k`WkVgl^#*Le>9^suI,^Ur}eyEsOӏisJlT[~w;הPhEnjYSf)гBP([\dh[N3-U^z^^e'4Ώڶmo}QԶyWCpgo.p /+w ￲״xr?YC죶]]iH>Igo[fqy]y`NiN?ؾz#mTyy1 ɣO\cwM7-聮)=lĈ){ƚ€ߎcCpaCm]Gea׶PQ^NDvQ~3<+h8iyY00׵W '/quԶFJ}hP'{lOmEiea椳Mѱ-5 {M7|ȖEGg@k]ditoP:l(8<両\'$gE?]w|\.X)X`͵Zb{)-* Ǭi\[XaP=j6Lh.%Vld%ip8%%~)v%֨Q;|'|ɧ,c=n݆@ @%zNh4'8M/ϬO>O>tTa!BC~eb1z*TW'|'bBcgYV'W0p9O>OG+a`7BXXyB%ԺM>l'|'VBk% DeQ"iO>O>Md&jHpC, 1(N=ؓO>OG! 0&$]&0CAKW_#տS|'|ɧAꫯΟ?F;h0 nH 3OB>;qE]mml'|'|AёEIzSz]@͡IۙxL|'|ɧЪDǫ@@`&MyQ˖-;R]O?(:(0 , H˔-CŜEeYƍ'|'|:hCG tε{ l0pprd$;hѢ), ԨB9] 7-0]xޤ? 90j1*jA=%gKhzG| Wzݲv#=U6~33:u1L0 Qwܰ+hX@2y 3<AnV#rW:K0uزiƜsNI#|#VA77\y>7M3s 8F@ĂP +"_YF=pS>|Q +De-uyStg?mxoҒz)('%]@vӢ U|D P+gkXenP|-IU@ %%NΕ兡㢞F'+<GQ>|2qp8.M/./frA|Gyjeɪܵs.k:MRRRRSSI>bvI &!TzKiR4 \Lg?6l>qZೣn]S+_.b8`GEPtrȅ OU<qUp!B̵&M=ݻ|MLl=;3s2o_e:^oWrC#EQEވ8&k!UIuނ\m% ]FW|F3:+3~G0PBb UW;E-J,NbQ`Pu=vrSםw#B\X̴, ,]57x_S/>'栙+HNGQE cǓ qvo@9׉gUB:B 0-8]4T+4w<G '1@TSQ@WG EG(@eۖԢ ^MӴω}BFaQ4_9q2*pTOBBԊGH^(Wh⊡\5wSsiP* GL oDTqx JPРL)vL(64H5X9͞D:Ո.e)))PsE voLx8[v.a3+ {013?ɭ2,!ahoXwlliI:WUouP>XWA^1/HGװNrEq-Mԃ7J`nq][%CSBOIWó8{Y^_ﴔqKq3V8U*pȝP< 7 /+Q qUd Z8?Mˤj/P!8{P^e Aw!)mQ P2(I\U 7˾%ޮzTOy2Ksǃwvh3*v܊-7;كjIΒiك׷,BWBE8MAZw98 E9oJc,$y%j>+|Ӎ,ıMC,74hRBCkGWO*iP\\SWWIa[lVuU(.g;JNMQ$bc9B"`@gºLL:/9ZE<;J(s'NM;1iGxTk6?2q A•+@)N"M56Cjƙ ] )[UM:R[Ugq̓] @G q&"=()^ _ jk"pdnfETZCpuLDk鐄+U2y`&+ferD6peTxzCymMa1ITQs2y#Ixܢ4\lryHxL`}<(pQE^H cUcLb*t~⹸\s=W:7깓W.XD$lW"RDbK- #0P$j8е!Qyd1ŴFɑ IeDLڶmlj<Ԥ@⸖.|[y%W .go䄧11&EAU5(_)~ki@/^|KoJ~E/H~Z*r\ߒ# b@ ɕ2=HF3ɥL$e?'^+]B)b)-{qZNZE(BOW9ν7%7½q:BߊoPmoi> `ވ>q,|i*euozK֛ؼi;ss߲Ҹ޾8MWeܻ0M>/na\w&OJ4MҜG&;ȰiqOU;7͌0 vlaG`Ȗ5)ĎZl/#l{O5q8dዔ<ؼ{"Y9ijF>~gUU5M'ӉJ~ꫨtN1 Cltnr///;ؙ&1(JKߣeaWUfv%ڮAcL^w4ڑH(!N4}o9z{C77KqrJ hFC>pw#kS]X.3XR{J +8l mܔ-?م^ΦE ;sKG!1+"Z ;s47xK@&n;aZtZ%2Y3%KAȷlu˶:K},'f:v|[^Kz5vBF ʴa\Бar RE8n7݄[f!-fvqa;Ix<\kaSvD޲mN$,ȽEDz,Un暾N1ˋO_$c,5"X{b!KGY+ƢUgpG˃A\sKNlb3dF"-&n)# nV_ZSNgelԏ^+VԹee_:|-,_E]J,x58^/^=[rg2["IJ&Ť _ShthӮkra"ya-C$Pj,gn$ ؖsea":짭!2xQf't\㪝Y\KI6⢁3Yg`ǍnbE& _o˲ZUz땰:h} 뜡i9v2Y>+St~_J/.XqV4 #Yn>,u4}tl9Ob 9]p3ą744;EhKʤQ_5TMt褊.世͛p,Y4ӆu+vM^k+g)lC\f,VX XmT\qzYȖe=ggieUs 6j{of pAWƽMqQJ#nfɘ 7H߯%:42s9 ?+sO\^REmOiLT"ylѾZ&;_drڢ u6*[DN,Mk\ǰY_ךr*ֶH'̎‭VK8ל’Z?-E2{נT717̆S2K\p:[?С%((tݘ퇖n#KbN=T)8K!GT,$ײS5勦mEQKBٵY86'jlrݗ@}@T-2Y}G>sԖ}eZFߑ/4d֔pLH\ڱ-ZzЊ+zSQHzhl=M,Ir jPvľ [KϚiZ[KMA|t5q/QMDmϤEV9/j^7wh5Z',emaŲw__+n(I(7hf/׷^KŗKFqKGuKE됬%;Od6!o=%8E%eQd.,-Yhja)/ŢX)Z8?_KI%|9qEd<(uҰ˺Oz&+"=Xqe8ׄ)b%$ك- A{(@gڒ,,aQ!rU7pLYEGΛY"QN@%ߒʹl>-YYAV̠#V7W,Q'qkHvRfKz$P+ KQFY,y,PGŊg\+荎캂E kfI?_.izdU@I+T\Q 2Na<*8 %b\c5;-R-X:PfK2N;!cyy~s_FIVj2bpҺŁau(R∬el8>ldY+84pQ'$΋>gi1'*Smz3Ձ>:y[?!߫xj9ՊԖ8kqVueXV: nG[h#fb MIfゲeHM.\pHH%Dp/v6Κ-mId,8/.&%Ng8YpAjI$O.ng;5~KوWֵ*"yIGscReIKk(ݧb9VC4-mm<.-%+Nw+RIqIʖVS:[ƜsTQ3<[J O(YCj|PAٗײXs WLfK_`Ѫ+N|~cv+32X 'OHDog1P×+dse d">}"S ,s3+gDvz.E`pScfYZ, \hcVc ,S>Db*NOhc22U zrC.~.Dۺ#3Zjbs&+O䶘@2 ('i#3H#%+1\b Er,ڳ"Qrq4H17q 0<%'aҥ>k.TE32#jve/FȖ/ Oh=N?Fɮh\eveNReJ;\t=8?!Z~:XjcEW vmq- hLJY[[F؊o?Y KYJ,ټen-jf`b|ypvd\&Oqdi¶cDC0k`'QKZV\OD>SZeST_4O \CWK:783/ _1z d/-mڗi,v񰚂Ŗ}v6K84asqb"C\-"tV?b5kr5;ƲǺ$X ɭPK\|EZ*Ks KD;k+ZjKQb'bvQkI]sEL̉A2DcE_.P\[sLIɄB#D ܍2Ī x-zCΊIlGN\˘;_.Ybׄu#W롢Ge8=93,9\-8"en%:pJ]Y6Q ]Y'nE(ˬ%/TG2 ڗmrYz"n2ZiXUH$nt˗BXh}Q?.(Lvy>rvl,v Ѯ$+Ax-Ѕ]IX'q_9,!TbH7iqGPq6҄u(D/"} S^!FjzA޻ VN$ ;>m-f}EGC1D 2;q4g]e&'ro"cʼnްtl=<%䘮v$f!AEhJqb"p&qVTZcڞi]Aubd%o֗. wA gh_I _~z%ItƗh}po _/7xJ\Mk9_ą5&A:p?LNKbLW),/TdoYb#cWvZ32R2g`˚-0Ky[ark0+e$,8/ r|W4⇨5BDb K?M|zv1O=Xn$\gt_JL9a,#DR2Ti&2k=} !!!!!!!Q0hU`P%cLD.8r_ freիQ־E}(:Gy}.̍@eBqOGKm]3h9),+9e dV,bOMgJX5mj_ ٟXiԟ^M iU䥚eb\12ÙjŕW\qM1V6s$tSsN]KI8Wyw*Ll |e5Gӌ*g=ĠNib C׮ɢw<4u++ FFǠuy(WNJ kauUMc!#[!;x b9|Y2*{MeoLԞW6míٱZG˿~ǨL]m6Uo*Iu [yVDׯ6|SXc%Onn}ΡC(. ]Θt#Gj(Yw{:?*<>DG`ԋۙ#ݸ#HD\ZN ;2ݴdS"wemb6z[(YMeI?](  P{]:mXܕ$r7S{nWpzdzOl}KFAƖ[^VCΝY8}:@#>$7{jβ#ͦ)8?gl)y:C#3>ΊѦEޢb}Ex}֖wi7ex|#pE_]g}Cɛgmɥ6q5ANѿKenOm{JAE`d)~% @U1 V1 Wk{Zc\Ffz!+5"M5bxO%ː*ؗ{u?mOa(!W\ㆃ ( :nM>ΎG]}xfx[EJʬu=}MF OJYg}σMza.IӮ vUf rjVZbgܱ’^}"v 8N'foeŅ % [WffxT)EJ[`Tl(v N1V oΤ$0H[+@Ywn kRprqTDjA>G+Sڴ8qSԱgҭ @68*P߲r+@:ū?3ytAjF,yRlG2{S@ܲ\\!<< KȕPgji"E=몪ԟMa_o+! &YocӳiEW4J O*]Фnq鎽J*Ո?y5N#ZZTC-]tn J+.{qZ܎:;͡!Xo%RlmV[M1lݼUs>޽y/>5*p;{ Z @q<@ԹoQxNiV3 "7U++A u8#>j вJΌ& LgIJYnцzZRPG˩Y!wNܝS`o_(֗J[yhk߄7#T[TZo ]/s>=7`E'OӼWZ3N5KSgw(jƶwpuNlTbJu!ʼRGBjĄ&Wzr}p`eٚSYô>⨗t8h!tC)PC jJt%YIz~ziKD]Ij5-p [Ҕ[c~L7FpTq/?~DڶeeV 5w#ߴC#bʜ'G IDAT#ye -DZ/?nD}m:@Ǡ$eư(+҈ԟJ~B(>%oڭS%4tUQ/5izi'ɀ\ ro^|Bm1J=OexP'+=yΡPif 8Yv j}pn|Z??o`V{ Ҽyin RmQrRc%A4LZg-Q˖R'sΊL::ӚƓ<J zNKqqZU rw)-Els ;vFt A`VY?7dlm@wa #QSTJ]5\U{}[ݩ^b0oLW-+( F(K{6ַgm(%)ۓ[p(1mo ]UH) FцJ4E6m"TZҪ(c`֙Y?3dlcxG6 BrmTa HlSE6WUѥ7w.S¯q`L׏yìU7)w$7Sjm`rT?jc{t@.j7ϞX3 9v9$ӃMAPZ)Y2RcdwO yrgoyGHJ4$^1Yn:t]r 0OfNzxQ]]ֈMU4=BU0.-`4}0EtcnSD5Tմ~/AѪԓP@z;"O2*>,8]ֹRڞ:RVB߮sje-j;4^@hk#ߝɣh2KVo]S>oU2mJ@4ӨQi4lMZik368|#t jNŪ谉@ L+Q f^'\976mvz/HZ\Tm%'vf&(v 9FR3}hEm 6L_s0JTwj!hS.@Q#* !y<&óNjqi51gyD]5@b4=r?;duӏ}&ҒZҬ~ Ѭ)-a`#Oq|]gV}wI j^ks8gO]x}_WFI#%[N\t&6\I* y8KbPuU;QҰ&[3Lx(P ,-;H 56 E7BPXpZH}]GNOJHP'u)YZCqEk^ 9 j㳦&8Ey7)uJFſ/%Ҭ`iCyIn~ ~Ny/z\՗aQQ#*JY=s/p-&ͽ*kKN "U\@5]QJL[ U>O;l*h ۜe*B.Wv{MzC?D**}ˀ 7†=g 2YamO q5ؽ)Q#niR[գ(jW_~bL/)FyG_fdvhd$y.vL 6=kaS\zbI >A=ӟ7z.X>3y'ݔK-{ݾKmwG+i}y7/='J0Ƭ8zYe_S%cQ/1r; } |+`Phe,B<ꋃ? [js_tkz0!{{/ㄢLcQA0q$&WŖhFUI0i8=Rw cbgLRwPkč+/ |~>ِqߓm/RȦP6iV+Hex/>VuA =9eN5nҘa!*Ma+ BJ3AWWZX}>><&FHժSlblz3jzBĦ]l[бrLl:Rj0q@`mwz>' Q#rk`fH 1Y=o6жY^9 YyJnxdEn໧;nr'=‘iZe0_cXGaؿE ñcseԟtOxgvhPCDlL:OY`x|`xŸ*SПOeͣ:R9)99ؗYϾ,*Ͽ1th)'\ߕhsYW gRDӹvseԟοto75gXVTv6N?> Xv>'\ ~ Hc@QJ0 H>'Oğ.̻t~D7lyDbObObO' ?4[]jpIj2Q{S]/^3?E2r'H V BNIFMd{,ĉTE@ !!!!!!!Q@ÉĂP ,7fH MNe0S֯D=I{i]U L<il&x*sΜWdJHHHHHH'L4jjD2pRi5ca)`S$$$$$$$$ToV}E牅0E%(YfGܞ$ a-~bq z 7 !BaP?qM(Wo 'I$$$$$$$=mNUUb;lGƺ0 a\BBBBBBB(mb MBiN#vs]ER:񈻠ܐLBBBB *X>(BA?&X&[6y 0Q`⏬ԓ  h GVP=*$Wj0f?]o=#%ʾ$!!!!@|ye2m;~TUQF ;k_HHHHHu`yߣ>}Qfg?[oPb٠DTedّF39GIt:p:)))@fddDDD+<<<FQM)_'N]_;66wƐJ2y%K͛m;|LprrwjZ|ia=g$Ԩ<7ǜ&#<6d~7}`qoney-.ϚG{+luyyys]f!VO4iȑ{ĉ5kz$O0~wWQH22҈yGmńM(0gڎ}R˗.!!!QQXX駟ݻ0'0JJJ.]p8Ǝۿnٲ.'ŸƏC* j+ |1'3#a \ XgrEWA6A?˷Wf0>DFD˹lqqAp[C< +<"0T^+!$uu"MlIBQF&u:U& \,MZl~ 6[nN4c]]WQʂ-#FJ֣%+4腨cy¾~een~.DAtCz4C#NT#d.z%UEDJHHHH4(`5B'V$YElqԈݞ%ID~I<ŴT i4MHBBBB iвeMHnq.xZɚalV(lG8<#e%HHHHH4@\C~@"A]Y("JPv"NBBBBBBƎ :َLl|eq U, IDATB6:u' =\(v2nj/(N,$cVÇ"m.KHHHH 뺢(D&쎆SS s]].x<.E4Ditc; fV%!!!!`Q_ ;STS(`L{ ~"ؓqN`3ma<yop=eϗݳ{O/uF'yjG=1<0$^Q4YZm\" v8PE<Z6aƗ)i20\.I>~wȥW9(]BBBBBAz+vΚsW 0eKTsbS ҍp[ sr|늝e[yn]VmcNo2?@?߸7dG޼pnugMQq#]c=;408ޮ[Sz;r#߃u2{wuf3.t{[]BBBBBa'0y+'?),bYMQtUw$0$$ L?zhd- CyU>$k⎓3}sx/&]dkBHRxEIAQ?v쳔 >rdaă-;_v}pʤS!?w/WBBBBR(^Ǻ LԠ*8 K b`Èh9Г;s9V (k.^-T^+!/)w(vE zMvub\IFkX]BBBBBTU5 0 `Fۉ?XIx_CNU 7hXz?X$TU N4O4h&L$U) $!!!!!!Q_A=Whx:zCl6FӅzlVRjy mUkwˠ~ <9bsǺukbRD\ȽGME?lKpQ7y4ڼiT#!!!!!N{wnc}0eTyR4M?eg[bpc$6tnokc:c`Xg"4t۟Qx0Z;{^g$$$$$8Xѽom"grZh(J+ Ks#d3Ot:])y"JFĉW9]aw96+~_U ߞ|~N[`K:jHkxNO'_ҡy*NfO)p!׶m 9OZ7Ӫ*nٵkr({bFi x3^v qr5 +8Tܺl,v' sGhJIQس˟` cQej#9zՒ'L.1'_hݵ}gV]{Sqx2cC\֯g؂cGV\'<#, Y Q݄SR&;DC8! 6]e37 P2J,;D'EQnW`@yUOO9)ZDӈ@[` հfj@X``OKw㓂ljHl # zpvDܠƛ>֓Yvd@Tss3O$8R v!*IqBlV6Y5+-bM1bs.#!!!!a19d2`@#TEIwLP :e=NB^6in'r~G^1JQ8+͟#;+قi)r%=-0Ue'M5!Gv.6̦Z({C"}jn3[PH";D89ꮣd:7Rlk9LH7碜׏yݨLT2' $lUUFNƁ f18{_XthvVڂZv"קc0[u6?פ{$(wرu-m KENyNµl/D896 SnX@Qlb#<=HpƗD*D9e!t]gwoaE34r0] 

a6+=GBBBB2S:D7+AQ:T= W6;>OZvȉ&" dAF h JEuݑ ;Ot)F0E9{\'; q:[oG(sb)dNЀ$$$$$$=,U$եX1'6NVDO{o_BH#4XD-|$ƍJ!0' Ҏ&'숨K 0{#s"?Oײ.Ghh@~37!dBZW6uCwBf8EuO}NEWsû'J7n|^cgVi}2m3O9} ӵ:BW+=5s:7:??wdɟ͎nL`a !YUxN"{Ěuvu }$uٞz3%gߏԼ/`gWumbu^z]<昙gpy!EE4j1bg87ln3<'^z`tVSݯd[cni`Tfijtr)VK};ksIo{86=0};vc.״œS+Cx~NPڷpm>t:ay걎~?Yy{Ͻ:ksV9s? ]=[[V%w1{W_vsF6D=v::B x<9Q.*xVOF]&of}ϰQr'oM><^Vv/볭̻ o1W+?UJ}}IgʼR/;o/7F]r_{G@CDu]*EQȮ.tzby^0am;wG8.F^9Z:ivs嫷<|Ѥ>z iEH7n{_?/ v2I[w^f/_cegFxӮzJ2g_ӇBG\`rrߊ\Cl =c}|/=[QM:LWf:))Tzl_A~Ր#Ɏ;fvxpNnpgey?򾟻Vyǣ?!" ':FF u|bR(bnXi0J#ޮTnycꡗ|N yO˔m >WDvȟo}73?Y)Ƙ@mOz ڭwv:m8˩9P"=)Ϯ1My7<ǫ}{.Ou~D B]QcUyo̍M}߽ L ȟ7b\mxoxͯs/ߤ9 U/~kfvpt{sp/c^M'':cLJX:;4 a̻oӋ~lJG 'Ob1-_!ɓo fso55c3:P-pcl<{' O wt%ctYSћZyˆ/)#{m8s|<jp_ G=9<%xyZnQX\7ޮQsgN0ꗱi {OO.{ɗ77ξ#Xl,*-Tn⫕%F^7#eYN11wnѯ~xBHe9-wʩXgk_7!0z:Kw?׍'uL+~D0x/S[sdۦnbG WڏŷO:֡8]vW,LJ,8'qjz6Eģ<1 (PYkn"S8*ʱaoj;OQsÅcS/я_5l_Zn;~eu}8ϡucF2~p!} _&LPmnGEt²B›=yDq{a#M'~[R|΀7 ^rdkhD_BzGVuC]jwSo꿢:>#FAg qcN1)/3`3#3qW lW̺pm)kWyepC͍++e:yW:]0嵱WX"ntnlY]01o s"uMħWQڏM^ze6v޾za5A|ZMK/~iK]|~sY-zyۗ/-)N<۞^ݴ))%>Meck̸;}}oNVwZݹa}Y' [׿MryKVMo/1qp- ӪI.O_ >x;&_~]dg_AW=|waQuM|nlҩ (*bw7e*݁"tnw{||{眙3ܹs̄F,ծЈ)³] _6kj{8}OA.С}2U좏yDs`" /KZRoFdؗgԡ^U2ަr2dt)(Hq}Nc~C lAIqHY6w^} eְe<CuWRlr'E)PEGB)?Q S'rYxgsM(UqQEs;W\!3 O8%F]ݚv I`_YkD7Y?/AkĘe1;6f|5[WזLLER K[[2^4P+ZEƻ7g1x]Di%gc,3ۖ@IKխ´mѳˇ2]:G6[zZSdEР ͈+4D&4anF?IaD^H JK⼓ezռ,l[ <^&%:0|p^7ưu҆39U6 CDydv|ו{juY\ܨAۮ{e*i/vq؉dc ְhnDQ|ٸI5Zkª;0F p{3@3ߋd⊓K۹WK},'<͕rabY.lѕt{҂e<6Ƭݲʖɯb3P{3{(Ee|E=ѣqULjpD˥U V*Ħ]:LLڛb 6AoT -zi<P##fLηGHLe먈(NYEzuO10IZ/`T2U< jrZ8*Tuc JLIHR+׉{.T jt'>ϊZqyʻ>ξM6^#ZXڧ_"L2t,*bDΩQ)p   >4UmP΁JBIWj ,˄͠C4pRyANJ25dM ۇxZsb׈!IYvcڰPdg$}=$ $Ivy-c˃@٥!#Hȑt1''.w)Al3$Aq7s%LAͷ!J|!V@NC(Q)Wa* IDATWZ[+Mutt|SSvS"vrI9 rG1AvN7,"Rǫ;|=B힝TxwjهZ[(2d='q6h0Ը}vz-t\%H"Lnc'qKQeJgqmXU\[J I925P0 $)N $H@J/*d08͜wY`LהRR SvQ|ه=w0PdӂY8a,Knr?](d6R:n])aJ{Wf ҧ JӥRO 4 n~?]#K W#uln5KPiJP7˺YϞ+?PmX%l`3vڠ%2%O!E /m"Y x/hk=X.mHig<9Qxfc{ Y)WeW26GONqO=aKn<;Q]bvK 9u&[,ˈ;yhҮ|jZmہI需Jn!Iփm|,ܣ%DL@&d}EYs48ǽ>g "Bt%'BU"͛x;O /H|mŪ_Dzg%K;6SLs^CqƵLIYi[۳rF&?ٴYۄ$Gu[륌:u+S,}h Myt,xYwdcDp.we:kc{1I" E@{ Y&A 1M=]/<݅BLI{ rBF ~UTvi㔂Uv񱸦5Pɑ:6Ksa /#dq7h۾C- bBZU\itJOQa 8SQL2 qvOQP7PgcZFy&\VsSM2oQnYlgjq=(C!ʦ3ݦ|q7 bFwۃjMwk30x /kVܘN )'~IKt(Sרz}o=@  m% OWb8]Zߥwwqc6aw/=Y39͘3Gm`.ayc6rVz%mLi>LSvCxLNmn&#)^ZePVɦ~R0o1Gh.+^ È1{ӈ{/!TZNdRڴ;P'~~I3V <Hh5l.܅s˯S5v<_z4vpHROǤ5 6.zr8y;:}s*K߲uϑt~v+̒$}8:sheY5ބgw;6}gc8$OeJqu}sTGiyOLPِJT~N&cp'xe";4_M8+2\ -l귯gYN '" D$Ȥ3h#cw~5jxǎ!IfpjE.Y#-x\fBluMGzZdD>pꙊ.tņ+,EPYژ=#DyQ摥kn@ ˗'O45WΞAeKfҬQWޒf.f*ٞ9srm-Z"ƩP'e tM*H>GFQŃӰa[ limM_o9z&J#DZNjZh׀m_㚡6w۟ۙa˪~']9llmN ۴ [ 9P':B\yGA\&Q*CQc5hlw;8]bjZhEeǝ1u-}$lO^\p( :$\U8׽]xdVzPޥҢwI!JְqpUP;lE(e`Ѕ i &5B -B񤜒>9Uh^$6\+>-B -?e+L?) b=%jkZhZw {v;`l*)g8oB - >^kzY*7?oA -~D @/`&uBVِ`eCCv_K!CP_:~`nK->؅ͬmOׅ_s>ٴm{˂g[^ysf ?<^ڼiLMT<0ƴ\aY61.GxlRcu- 2w @ԛ2MOLf=b0 _yFνo k q|G} ==O*9*76۝W&,znW[M@-ZϜi;urk>l9%lhm/|RI3";`tdŎ_vbyuæw-NI@y{ΘQk`1G壾X #ec3YB@0]+Z4fm;r$9<Crt765G䷙5$)Y,=K@ʕ5[|> A}$Pپ [W0kYx IaԆlTISޓ&xs<5, U#uBzy :/{?tI板u2d1,o7$znVsIr]wSFOn8w{MCHXe v=\!)YSӪo+۳gXUHԃ _=-P?euWv_[VKn9Irl;Ѹ+;}8un|Mp-k٬˵)"Mn蜶֍XtL̾+`$9c>:ojƚu;ho%~wg㌰{wW N|JjW;VRM=t]-F3{< }" W7b7"6IfҋMG_vCteL2I3nckvK>Z_Qޜ2"~trDS i7Dm;gEbd>} {;3چFv#2>y` =sΊu:9F Լp|}G}F rַ$;a&G.]. 9o X b_Qz:*{9`z\Ff, G\{LڡNt: im3ZЪ@'0x}i1>g3etl984hڤnW,W4 o;owobΉ**%3 O8%uL Yqa/pVe$ ſy2vl 4/|m1DGeH1}8ܤs3Rw(9c) M"_jR<Lh-xN3cn=0SHzeKWΘhQR`/wm滒qS^ jk}6­ uyGn2|_ Q9-sp=}5R.nԠmW 佬WIS~齘?#]N #0UEc=@w#:cMn~`_SVݡ1Rg#^$Wi7\νZ8i$ wa<,50f햽PL~؜ڛE)Bu,+x2.Js "iCEvd2e01 :ډ%N}bSU$AU,6:g_;‘eנq.t>z2vBF nƷzQs;w@pSX7OjTt)’Lfdrd4mI y ]JPx[%L&GP=s\/bogڰU _^ HHj84WpЮԣ&ᖄqjPYm*{<@$0 c($޶ItU0RS("ioN8-'_N `wHK;7_$z k&bBDHS+F܂˖O4 cQZa("Lpa"`()%Lt8ը *^> WU#M1Wx0`0 TJ l$R`xvPLNC(Q3 n=նZ&PrEPTR_uӶ= :e$Ȅq9✫m}󎯛-C0)lcL/a[isOaQ Awuahۢɤv 0I+Q)lɡ>$I7y9N8qmgն,(i\2_|)cTNJښ,xwu涱7aHNʝc'$`%T( t:dԔ:^j»S> G!a6Hwy`7Պ$Jx Z$M&71􍸥0k\) )GƱ*34i› (B͏ Y1 A3$k|V0v85VH) V(>;Xb(i,j0wGFml2h[GVBS=dTfҧ JӥRO 4 zbn~?ܷi:ji@HΠuRiۍ*R<ڷ?iGpLz0`Z4+ն9>.b?͓3ůhFOul`3vڠ%2%,@z<̺qz?.Dߎ)>MsolQpĺ mT҆U<5pT@[ urmDJ*q1ms-K AZ(ΝD65_&L#%u {\^qHoґj,:\]=\r㡌9=nĐSgŲ&ȧ #]m;0)T-$)z͜ϙJSG{')4|kL/+&ςx>W)縷?qAD$Y蕞|3l8eyyAk+Vp< >-g>|,Yڱbz 3%e2nmg\d 2gͪo dA (mᯗ2ԭL<'sk24ұe%͒U1JB6JGxݳ$\& cp)/[X6tw^^ƪ_?<xݍP/[uT:҂):EikZ85(c[У_}E8y:mӹHH$@*poI˟[pEMGYSCzDt=q;uk6H Z V1r:vU0]Zߥwwqc6awm}lP-3>q'}MjrxCEL=`A5$w'y 03`q<ȉ_?%RzE/.Ho+'`N["7{o_(mW,ظ<#cX311.f;:*8jѰ3kJвa}-O) C S3-%6aWs[hg&3bEBu`o+N~s3v(mk+P]^! ̝Fyo2OB?ms]<8_4b=wv>u:Te#6tm;V.%'H|VqtKҳlk 3);, IDATywlX pP}w-:I5`#O4h9991d>>:xӦ8ͱ?w Y9Q/ rN.B"A?$e2\.6 $Ev#( +^AP@QEGޱ/hQ.TKj;R:7q I 4.4"MD)=]/i Szh˳TTnyu{66fQEydq!tթ's? `i A8]*3gNn޼ͽQ3:ț60 q6+8AQEN PxTvq7טکIi<%^6V+sb_hE -_hkܹnJog-r9IT>},rI\ɮf)- '竾SYZQhZhEU ⟠p/>TGI)NMf\+يUD+-~w~w(坯rRȫ+3-+'څ|lNٜ&:-E#I '-B -rJq/lM *PTZhZ@Q*CUՀ$I D%ZjZh%J,TqEq "B"d2Aen ;Z?֮ ,V}pQ ?ғz-b鏶w=iDZijLLKGy[4gQ]zL*LT`\1>E F/Y4D7Zí'ᔂ 3EUv N,;k},fSl\(y{GAVn'Ww1lzj: ) ٲԛgٿͬ`s]>} 2b\96*^ .mҥ͇ss~ͭ@|3ɹrrLHF8F>ԷPG3j>lg]\Ӝ/w.S{ذfh^lfwVXyuJګݯCTkrkaLkطRh |zV}%uT:TG.{%jmٳS[Z XLCsg}ĭ vng8پ [W0kYx IaԆlI1SXz6/M#LS북C4f<Su*T)ϲqi4D,fLIMNMpa]}RT&M<9))*.]$I>]n2ss&S}b{ֻ/3Hԃ -wî|Z#W0>%>$IB~U >$ޭFYN\+ /N7oq)nr'+jߗ>mVhQk)pDguFK}nOgO$܋QU٥\dى'sM((Iٗw,'aK!o,_Y{gvϼR5E/OvPD.Az%<~] ;'<^qˉXq[>CD@cv<{n}Pl͸ >1Nv)0o=)4bwg{q%;lܤ{h-gŭ=Ÿi\[{@Y,<,50f햽$@VQ6ҿ}c 1uP}]vY+h: 판Ȟkܫ>|/R[21z;qTҰaN}5z>V Kf̈vfxf2/νޥ>1jiXh H^)vnRvCC2a=_"JZ01̬N{J Ma#0zʵ>Th6N][Y!.I=köI?z#G](RQ+k(G؍y%QiX3e*.ME3LAT'PME*"*FDZ(_M= aKFJ0l?0Ы[-hk\'* 8p1xc JLIHR+׉ҞWkŕ,sbfckY`$ :e[BIWjRz,˄͠-s5\0M`J?YlzgDeIjp,%Domzh͉^#SƓyc O2  r1H"p?j$dUg)z>*vR+ l$!Mf0a%IB,b0W 3^\xmlH4M9?,qN8-'_N (0!S'4byi?3lCsyw_:֪9rqAfm[NԜA_e*yO -UGY꼾ʧfRM`Z*[G(DPRJT ]`b%`+̥[? ><ڻg#6(:u(.ϲ|i4 A|JJ([WR׺}!Ig/|d5ol_)=Lث4azMϸRIPxNem;*S.JSϞ=8V?ʔmuiqW=:%lXf,z`!盫m۵#L2~ 82a@N8jF߼fĐ:L9 `2;_ ŒAJ0eC]N&+ky>7sN0Pr DI`4dűj2U%/S @PIK쒛.L7(ByMFfNu\۹xbpl 9 9XoÙ6o7)p B4$RJl0aJH$t)AƬ1,Ν4%Y&/ Wr}KEQg6CM f>U$>@FeV٥*㐭ߪ߽QImBM+&5cp7;w $#Nu`_oϼѡ'+)}+6)^Ն$922%r> VjԔF5K6*Nq_LP5D.0WN1QL!N1%R''4, t=2jcH%IR"@ϣtiR9FHq&K L ( dm!LF}|I(UNPF{Ǔ'O{1z3g899ȯhƏi!ƅ1ߧºe@yQVv 3،6hmLpr )&&;?u5 jH&:t(b5|`w l͟toӠx64KMd;>oSe´9buc.ppLz0`Z4+ն9>NAZ_`>rb{ m{ic}U&=p[a0ѓӷFYۄ$Gu[륌:u+S,}h MGu,xYwde~[@Vlӏ2J|/"tT?<xݍ@y d\&E9]{5[YH 4ڮ{X\3͢GIr()~w_5<<+92Zz*2'W9vʗʣIr:]|y- _^^zXz-E"/omCfj"4HϦ.RB !˘SzS}#M:vKjg&>+i+ڨ:u(.ϲ5T: ض.:d,^i:m|s|k=vϾ$rP$\, PʠaQk2O1Ҡ EZ/[s8 FO aJiW b_zu,Ybxc:Tcu lW:.:F_#y[ADEK3Naf=. b'@+:ϐwG`A5$w'y 03`q<ȉ_?%9q?sw>l#gdS i;mه5 dž0/jb?bΚ0pQyni܁&\AyZt|jN}ŖY[Tɗ2c`stl4^qwtc3N@"B"Bmm}|k+0Đ(/MFIzyp9L]&~jqu8$OԷG?}غk{{zh9991d> O9AWϻ`w:`햵%u4y<:qigz,ܱr^w4h)ޥR6T8y_^l@&GϪv~--Uw^ }2۽2K6h釓z:9>ٻڔZY9՞R#UVyhCO,/Kϲu& , Gp, /C6IŴN%䉔o5k_ظ3)8S쮘ű '@|tϩ,}=G_ώcYrpN",ܾbu4Ǝ@10 ^)3A;(g2`RQPDݖ>j}ZaؤIMZTۑɀ]$$ Ntq I57i,ݤ?ڟ.tņEŠ-ϢZ fQ ~o7v, v|<CydqBgΜܼys*D JgXt`:7:r ?"0}} PO\cj%ZNOÆ=n1.5As~ k|/x+ľЮgZhZB B#O,b;otRApPBl*Q._::::::$|w<;V{ս{kO -B -(ϓr"eӈ )e!Q}:(+J/6u.~iQ8B -JĈKB7Y\e'0Hqq$q*67 pZhZhůA="GpjJOJGwE|w|ZhZhw`uf~̓ T8DA(ۨq6r|B -BOѕ렰l0]C'e[S+P-␘s;֜ؓێʹYPV]dqkHDi;**GWdTn_,QN?MJ^]۷6 p/ާ~9=IGl.-o}Uz{uF^^=B!G/G%[̑^J4'(߹0[XU|᪠$ɤd/BoI$TR1Pm"-$t&I1!R qi,-F_܎$їU7(ai8~#ּm;/T݈'FUw絋pZu:UGwoɗAsǴQ呃IŅ,mSOUߢ?C(̔W22yzӅί?W/m]]c9*5%_?Xsnj+|DʕOѐ ?\9'mB IPOH HRf':ztwBrF3|=4n4L_t01WZh{n՛oengߕn vZŰ_} ][OlHr~u*yYȣ$E5 )0 S. Jgk) )~ I@ )PCYjem< OOh5Ň|4:<'½ys>޾(k2۲q- raԪlIlF3ra1iґ؝rr-e\k"fz %E׍8ek|Vmk;w1XuYWZ+6 SpQ_&->%Jf2Q)Rda(!xa \k+59P\O}G1>q*xb0ig]u'^ s@0r8C&~jz*,G`3/~+ސ+Ӏ.u='vv}wlp}CCs[.'rŋD>Qb0:^G]AŖCay4p1֌ɻVC=4WMvRɗ\ uͼ6JR|8|p ևspJ=;[!6)us%qx>iOzi|xz(O1jE^ x<ةECW'(I!Ȕ1߈|vv7hRf]Q>bO] tU!d)%MxzHtA~y>ηMJ_d7wNP62=CNވg~ N{t۸c&O/+oS#w:w8ҩ<i!P#hZY+S͏i&[qv/ޗZ>Ŀ6yc^TE ni .V,WHO{W$r-̚u1%|f>ݴ=bh9`f/N $*,2vr2.ԴoO S*qJܑ7}N1֠EP\1pÑ:s5 |LwlU&Wu kgg0~ǽa)!'F h!t,Cꫭ^[Ehfc}ʴUpF\`K`*JNc.&}rD&m:2/\֩dSˑ_󿻯QwaMM|6)$@RA+ʉQ{(ꁠX@=`;,`ػؕ"ҤBf?69HX0an&j2f*IװiCONΓ },8쏢t-rSu4,>eBxi\fiIgnL+Mdj-lZ2^Wϱ :aMLTCi.J/dʑ:+X &Jt5F­o-'&j0xP*+(Ό1=w'}rȼ 5j>1Y,;{T#ILg]Ტ̬iY9 e?^Jws3|uHV'pzg20 (-u&NmMo8{Xcd6.oחxeܢ6w?wMGd-hu}28xxkEz>Ѫ* 10M;t;cZeS֩| $hL#OؾOOeڀ~S5{M6 t:`0t:4d.9AdתJPPO^sEW.Eg8]#ŧݰFf.+4!$ ) -O+H\| NdaCi~f5LTo]B&h5؝{3fmMaQzlWTR2ik`MHI-y|!(! Y=R: !zNxW|eж,~b3j&G):M)B V~vµV6Jj>Rib`4T%ܔ|y 8t6>lLTZHx~kH+&ڎh˞y2 s։ gX,K(#wE )tt BZWk?wۦZ}vVU hl_7 6AYﶏzwU. 2S3cC%ImηimoM q˪M/5T0nmBR>./ASY-Ԧ֩BeyVk!]2BH)Ѵ40& 2x!(N0ʶ"ا) ĿާqZj|MMyU -o2BoN tSc7ѐD{aC!@H>#}i$_p/wv!/s5-6Q@ \6 $aX2@7O$aj(ۡđL5a;J!j&Diσ!N. Y ;ի^[(UZ u, .[2h `J%W1Y,}Bpf/l ~@~|ׇs|\\v~leB.#H#JFSy]VP6tMIwɹYJЫu4ԠAs@cL\I& VPx^._dLO VҵFZM/ŲYYTYVCd2B8 EAV*y!!JzjP9EG&5 PU<i?O_/單9L#RHqDPDMZugd+`k!?/_=yW&^]]aә"r̶0{}X,dP,6NN(hکSntP,f|_$5:i^ˤ%}.c6*gfD5lEX*)L<7 'J̌}W(iˆzKJUi2ĹX@^V!=۞Ya#B!tӦd='*WDUO%^jnhl_:OM.18 HNyP,d6oDk;P gY7k^\AflmP%y5c3i,=azU([B(Rx.Ҏ dMmJowZQ٪ܵ1}{Gr''zUbj 9)=xôoOR= F[ʸjM¬LLO;V3שݲYITDChNZgd2Q~&1f$ޕ$wU^BYAO% AaT:2IڢxbLP&b}DtLf )^+#Нf>7qa`: hz~SJ5ve]"5qQ .F}7`?4tx}C7g[8+gy| ctAMYeWƈ.\cڞw'1h:g?oӿ\mi}D*ۡBLfh f3_fT nelYA6yJfD: rqYWltoh%2C,ms=}L`pէ|VvLП|K5\8k׿{"gersz&#bx({|AyH>"&hАGq"fq7 iOJ g:&Ml Ϟn\Q~Azta偓:܋(MLTXUwS <!ڮ'\>qm=bzWvUZQ20밲Cr$H _ՃVSzЪn?el#=IlWq 0nx.5V0'ZaoLe}BVƮZP+W:l)'R[\8]诀]k3=L&o_|6˸6ROG՛ h(oRG~0GV W,N&9 )HCrR!"̘1u;;@{]$wO om?W !z#5իw1 oYWŋzQԿ=˦H=,jFpkYcnǎݭtEtT* b4R 02T_Q'`ـހ28 / ֽWfo.Eh8K-5PC 5TC[D BYJL'(~G">VazSqdjd?_&HHˉd' Kh2vxA0SUI&ˊjjF v[R7p FII #*xqEQLrg8J=jjt:ʃoA%1 0Ld2O%'ETsP|:7_yRC 5PC 5#80 ҋD?" 5H;t5Qr3g\ 5PC 5PFP, NCq`w0LȁjcCff}&Q_Z=NLj6j};Rl^@&9Usbt4*2b1`FVLW\-nĦImi0O$iEߑ!H~:/+8r{[ X_:(hmݓK?n N/bÖ]*T^~ LN%HQJek7^d%ʜR,AN#L$0 #M%PYUhS#i]'k]{ӻ)2j~ ug%5*|3ZCDAG+nج^PMܷpGp HPj1tm oU[yP2ICijxn~36#m*h4UtԸ^[gM/gjh|јFQi\Wc,?mzז=($$FDNCC]tY՞xEcI<>(4t B$ڣ(% B'r#䏘T*%J!DHTo2(SeN#-A cl#ɔeZ/L+n@R6xRGV6bSn)?qՓ>*oʵ\gW6p[8F|ٷ|ΆkqK#ucn~6g/ Cg!}V7jFsN >Ku32 ؑe3ɶt:4pǨN,Pޣr ~~rlb/ٷ4o /=MZ:m93_ 3xECwnЗ@fpcȸ4r6.ڈM^ƚ,ί],B|Pwm&C{bs+Eި> ;eڒE.pR@66I-Bh V]ytzwU^]C!f˼P^ p;yD,\Zs+Ӌ]6(HT`׬#ןlfY=eSs  {Og "6t~|0t{=ff!fdi=wl/:+jqz̲o ]R%߼q :#]*]n?=.2 t}&F5aᵐ!3 ͻL,` =f6٥ciE,0G~̸mLii^GX|RQn<׷Q>0M<"oyI3烻iI~- O\.]ŋzZ0=bъM00|R:f+s?\>u/S\4@s7i48_,`Q'xގ96|F߃ӆX};^*jZ8B $ǢcSתʚ `Gp OP&}[\gؔB&״ lu ;~OmJ/RuY<ܦ:{%帀My!l=j!{t,f}Mm' L^T 2㎝xhwtׯVJ%TJ5Yj8_ye}o.̑L'|s):5ѐ?uR-R:wk8GDp*x 4BRHY Y!vaKx/PlT+w<~  V9Wћ=^{0r h5)d֑a+- _0V4kR y]'}mhfq$ (gmiA4/ċR IK/m:ϥw N(gͅ _b)\D$.3{/Mל#U8}}xÎn]skΩsk\#`miעR?qZ~$p]Ѡq=[VO1:>߀EV2 dۓLTz=J16S&#%Y6' }`ωJP|TZ|Ti9Pڕ@yEO|~L]38;+]-GK#J=y _G1Oz< Hs7нL1*T/OJ$[vO[_ݙ^,\߶̈́ۏxJm^d`W|_ϗ3r1߻z5adG3-*MSдش[NmaHPHxЊ!>haSWr-A!3봚қ?w%> nA~sWrxKD};j2:',]KRGpч"iGsNHS-|&3}R/ͻ7sȓ?Ǽ5ߣ3҄RUWߵ;Ǡš'>^uK+).P9z=feh&^{_:ljjtdA)e(&2Q ׄqd("S#BIyi(&PÅo1ÁtFۡ!cuxAo ɟJROt0aS;5~h$21H7b[6'X&,II#D=WX3khJv|¬"))5txYωy1?.O1b; ]Yu"ז#jk}:kg[cRɨ8K(cNwD/#eⶁ\:D%g}yzzf}6: :} /ʩ%Y:LC3eXt=Zڜg-miC,"`\^i׍ec5A*ܻFec\MiO XדAAQZSvgwaIb>Ofh19{Gݚ0QsQQc# Y(F#75c[1^m9T]nӤ=Gv`Qˁ,aL)ǽ2ZZV&- U3[2Yt0[N>Z kYMP=.B aMZ jʺNe+K`3&ձ!_84?ҡxț 2DzHPL4M^7tR)f+~d1|v@qezSjܸ7s;I0fLy=*'Mt>8@Z69ziMF̜W{[REyswpmSΓrilEY@4DėL&W#[xUF'DVO^X\\I*u4ZUĥi!N%lBã IDATB%ċ׎#ՒGrt-銧=8uxѻsJ$2 uYqqƴ!(ÊITDȊO ƺ솏r'Uˁ{6-Oϗ(=oc.*cjC5 o`I)kɗ[v; ,jQ=a*|p# h/hάq)e0wA٘2ϨFSrL1;1G= CgMt0S6A3b?i239I^q).# 'FB0Gtѩz&5V4tʝ& ]L8JIJ7"膵mOt'T3 `@AiD6MXr Y<\93 ,d cfl2JJ%H)hTZGVy<*U *FyH EQy 9?X34zfCSG/Lbª|C-etnDqR bw7j5MR!DCWq%//l6] `ϝbM`cZ;.<=禣m6n+@+Q~>oqsfHM%B򬉐͐{hʪECqLYفi/,y0l*҉/{[+} Hi\o"lٲ! uJFa" 0h}i p f5+&g41;O'YZ`4$yF)">zDZjGTv Yq7Px/kQؠl]/6V˟x0fbF aLQ^*.)#ORVBžYO _2n_t ưzcS m.LwѨ)sLP}>LӾ߈)p)R>;(QX"2ATh%: I\/Z22ч| KjfWl E3,aM/_а5DP_wܮQY6 LˀKR b{򟔍$wMA-WaǺ4 u6-=~3e{K%/΅.Е,Sgv34:OO',Cd:Fzs&Йllf-Lqwˋ09_}O$3ߙU{y'4ȼH0 t(^r~8pRy*= #6/b!osKŢ*&o>=I1]a" 1RG9Ǘfڽ<36k>RJ{m!ΆIdd'w}>`iM|$ KSk 7#"$ /%f.1[H̏m,< \6Mƿwer:vˤҲ"@: 8&ڼKL_GHqMϾMKe%Vn6WUwJӄSqP0(!`QnYK2@z e/UΎ2j1x).0 ~9bSO>2ɻlĤpqIs׊5]tF}zvVuye`m5cn$qaq+ /y$߈[U}؞.^5sPPP@!E(JV2P,=^g8w"SOWRH32Ek< 9z5Sոʽã݆f 2w30D_H@zJ:|mR~NT{>{ߚotN'.s-m|r8eC﫦?|<ڛPv>NTJ /!^Ե/9]/bSZNv]#}Y'}s'̷[E31m٦,ʳ36k<xDG5ǐނQ ܀>Zt06ߞ5ua)Me与PSz\H; dZdAͻCz9Ϟ'WN;w}*S@eiA]hz=;h';ТdAk٠zn'ɨ*cAUo=%QSmI˿Qy͕qԐOS+dDϴX/Rŕs6\σawȄ]'(Y@ZDY 0&:NP\-Y51P [5;⧨1ld2tb'EШd酢Qhv W\-nĦImi0!MnSL4}R7_6vOF@ȼ#(jY=U5茲6=T󪖰dp_p쒊6Vj[1 iڍW4אu+v\4Tr$U*PcH1BN1a?@#D" 8wvU5GҺNuw R&#õaipƦoFwP2 $|0s=MNV/~i;qMuI Aҵ1TETmY+!U`[$oM4mIo!jTFjP-w3ߦ ~4hLS[.uU16[k^"9S3PP&8&ub\_sMhaL/A8a uܑ +tL JWJςeJ JI;ǿyM4u/-y[G?Ue-ݾ픎yԿ]dA'Lbkk![Cgdw:eK/3nY7fnV&UmdĸVM4Wl;6sW~anqC'bbS \'tM;?@+)oGYGgp#=[įdFZȞ>,4˧.K)JǬ S7.hcHP:R*JJPJA۩o:7U5;.Ȍ;veZe\v&`ַۄ{|vr0ɴjj 'EM(ߤDZ[d,0Tvlô:שҲ2J/WE|}H $툋=_e_ H?_1iߊ+.BV=F{vmϫcl^?LFmKlOl=֟ǣӡ4 }\7zX=~񩝯֏k{ag~岫^|twt_'#oy+>6wY(fI$30җ<wTW!`vXt=eBk>'Ҽ{3GJƬ/j[~{cANTtyW%%xy/Z9{\'#w 8kwA׹CgOt{}&򽠪1E+g̶4Z EQ20GYQt:NW(8NS,/. A?m*Tz7xB()9?4 囸jrfwn?Ig2V$D;IQi8eh~kzeet-(}\eve/{ k*˄%)\zf +zk_',B]#pz!ŷy"bv]b0vэ.¬")5txYOIwD/#eⶁ|E%g}yzzf}6: :} /ʩ:Y:LC3eۗEwyҖ:""`\^i׍ec5A+lLї"cZaqz22h (Jkjn. ,IBb :5gH3{[&jn7?jt{5q6$ @1c[1^m9T]ܥ=Gv`Qˁ,aAy A E-zyBl-,c:HSV[-PEgm͈ R#DU^Ivh1PyǾ\EJ=.B aMZ jʺ 䬍&~(FgETŞ+d;Lh47D,)7ڻB1c \vqo=H0ff'Mt>8@Z69ziJ_<%wбg-5M2ۂ-)uŤpЉt8tޛ9F I&2p\'d2)5IܺhC2r8_$z[^^ dʟ4qBZhȢS&{μO2LT䬣Ѫz_O/pqƴ! zaŤ@*L"dçA@ac]vG|\Fm}yU tuՖ?KeKem1[o1]5¡ݳV0Τ5O- _z5䨞0~mΟb$A@A/$f̸؃2P㻠lLgT)hLh޺yQ#CoY $Twr&s|Ҧ!ȸw'yť2[?_ wFAh \S4a`QCF4RtC:M.[A A (JOd0;yjȼ V-ƶ|;pV)]䛰kE"+[&!,\$c3QScWyBhVp%!SBifZ:4qd.V-}n)pK& K%r_=XQy\7NB `Ǭ6s̒t&= OL$ǪPPB+;b)d_s 7'kdP"T*: فi/,y\Adѐb\ ~ph7!)q4VE1+( @D2`,Ҏ8j&iuWMi*cv]蓁KOth3lɥh=eR{GߕH+_SY5ʀ1)n^(gלe[zē1 >K5,5ʵcRqM4Tz-Jt kI}ޟdܮ,avǦ-RT ]£QSڙ4d%}B} K/SRwώ(,JMX*b4l嫉LL.[jTY# IGtWiV{VU]ZBK%L*oɣ 3n|OE3UM*1*NQl'cZƀF#eelXfQ"!FZ9큡7SWiT\BN` 킲Qeuʽ-u‚8A>ua$~_#|=O%w'%27-Lqw`F }R&ɸ?pzc&Oiy i arQqeTz&03(uĚcy|Iaƫ~[&[pݓ O).LCwL eMF 0;:mnTwXTƬ@*~ G &>w|G5ąx|HZ痒KtGG|M-$ZYPɀhd{W~,;c7-L**-+K3Dq'J0u4V,IӞmZ1ф[sr=A%e8sf>6NINgI\/2tnQ~BFc2 2yy#EOo'#7m<6/BCXZ=GpgU ‹3oؔ_U)MNaBiL@ [E#Dwz{ߚ/Ϲ|f0})[nxS>ji=Xx7o}IjD&VEzv.G FM'.G%nt4WQCl|Zega_ml M9xMawȄ]2#YHzmT:&5;9>ZL`nZ Yxnt"$U]^w|DYTܭOwC۠U~Uh: ru1)qTJ q3^x"IL"̘1խeRT*5V~[$?")[B;9ŶjPgmƣ=#?E{aun_hjV6]YPD׭g 0Z 8 V-ϟ?cnSfdc*F*N_KeOP^SQv{ @o:1%7Fe_uB 57XzA!wN? WzX"!m!*GR VA餢s5T`*mjjQsTr)CyPS UI'L-[5R#_u;*gjRlMO0B*ʫˍ }++眃D}#PC 5PC $!"EˉDĨij=EUjjt ֒bU ('j7 0:Ne8Q(WC 5PC 5/@&5Q H:OPX̊"/09qe?"ԥ *aK|G P㿁 -((TJ(IʿFuQVfۺ'Į}a@@)>6l% ׭Ϭ} ch¯!V-g8~Ւ@ŢYZTU1Hb=qNQS(SOhל`u[-AUT5} 7ya|筊TRO~䭞>W!IKa$d~d r>#mz9NcEr_G`DMܢ^[gVUI8\ufn0UB:TmYQ{+xEc&I<>(4t :tǓ _{2t^ 5peDS*EeKBeN@SgTX9]2@LƤ7y_o*H"\gW6GkqK#ucjSC 5{0j=ʂӧsN >Ku3KD$NiW;^!Ldnbby@JcS̾ OƌXpiy5GtQ9^\Fӳ6f6Н2=v_9Ե6Nn_ '6.^a҃՝&kw;$d)Ӗmٽk@kcezH}CF='~s_gXxi:oQAJ'>y`;rv>Eaڪ;Nntv ږg>tJ3cm[(7:('E\5l)m(ab>NGEo~! ,5qFyS2oxPni5l³K Xzϭ_[-a'qۘnN$:#hyo?}.axDgw>F[@hEn\ ΋R5`zĢR``!tW"!o3~f=(+|8w_i>psohq~X9Os])m-1`7@{?/ A -`cѱYEFGkDC\|e͆#8uaw1-(.z}"&6%5>xB7[Ȏߴ3t[rle?||<KRJ1wAZ!Jrq͛h@CYj8_ye}o @ULt r>GvpkW4=7w{t 0ĞM\!KF.^mb.2Ά(N'nVbm]~'-nl{5%9ÿvōdž..IH_vڣ_Xp0чB={ OYghuVz_nnП\C,2'eZ&{骸].r9}szzߛwkhUwu+h$ ܿ.BrKo/+-e2,u K=ه: 4}Ϟwevf$զ.3Vqerلt{򗅳-Ui˨)~MCn[eDK{N5{[N|ԜԸSVa aK0!nyEZ?+i˴ݶn@m ^|tOtd3sMW|;qħkVwc+n#?JG1j>DuxPɘ\!=E=m[>L{е^+ߴ?s0b~t~qI簐h{Ey[4-{0x^͝vYˠ!c67پ,/VcA!s#?ۼ I7Ց۠q{ۍb_ʮ[i}ذe.:.&9-A{ʼ&e;u3Kt*J8\?&彦N#ч"~(J^_VhWj\!t!{\ߔ%,RET&tY+Wؾz+oF/U jaJ1 N9(3Xڢjkk nPRr^i7q piaU~; A^ S#qɳ7dXt=М:. pa_w`,ePCX&,I:-I$&wߵ23Kdb5錶CC(fLlAGkBvu.& ! ^sG:mPJΞB emu()tى)^ՕS{Y:LC3eEwyҖ喓TRa.(qQ?viTVq9':m*7>"`\^i׍ec5AޫEv1E_&ia,ʠ(Eճ$1 m 34Ԝ#IHnM(لV, ۺj{!Ҟ#{;0PԨ@0@ Sq`<\ L1fkk-(s)]Fuy!d}md:}9 {gqQ)*hv[X"DQĊfXcb-vF((H9= M,h'|;ͼogg**_)NT ocn~sVmMR2jRuY*hT*:& $T*F(K[9Eh[LL&&}3\o~0L!~!6в|C H96{GŤM )JQBsQZw(ƚW1jYRtLX;خƏ=[=eۚ 9R{,ʖvJW= |'= 7.s|.]Q;+.J@Hŷ㗭@ H{Д=UK/pΝ @Fms Y@j0M1gl;vw| "ϣ Z{ P|#e 4HHE qrj=#1(r*g4ʛR {rWb[;ZBE?Ȥ2O!֞qr :S}sLESau~9wN$E@G31洑 q&l_=}g5ʥJyXnӿ!6tvBVXGx:t<0ޖ|@:G̾-#G?|S]Raf,%GF=*]#fFRU<áU5W~h\U/_ ?lII,h GQL!3^8D%/nXg/VUezyBF2o|J֜%fҵ٫J$jqNVln( OUYa[yEmirz:q@sٹvbB$)Ex݆ _M:|@g'jm~UyYW UFH)z|Jɟ\ٝ_f?N۹Z%Iyg5%Hc@qTyt⎔0V%┛ԤQjT.YB5SouNޔ7R5+SpxMZQE^ u_ΞDE_H^*部9kT\8T_qi;u12.A@cH .<\.S( BVPH S_$"(Y,F/Q7у&wAщ'QdտDŽ8/G͝N\4·sCaj9!.ڜT_>LNL%eDZ >f5ɬ__ qlHtiF>Ho Ig6 3 US֧>taVW\4_YqOn jq=Upx_5ҁg=am1!!] wځ{ݷ l\Mҧ*(Nth Pu\"@nҭ÷%ji}w)SM4;'tMǪR?"]tՂnf̘'O\'`^f.:|$v1=l 6 oG`;1ֺBIpڭ.>FD˼Uuۑ4 ŝFQZ 5/asn\E:AxԲI&U?JU1T=D!o|(7OK9o\*?6=˪%κ~7c-R<˒:g8Eg_䣞8_qkΚ?~+"Ce$e-dRj`xQЈe*ƣGmܸŦac(ӄ(0օT*<Eq89IGT3SUó?87^r1 vݦtnm낪V ǂwDn7opa/es#cx^IεjgrA/^P@iZV(LzL(3ΨFu tVs>$,tʄ5~c԰w'a 5i{dZ7>G=jJD035`ޠ\`bN ,X` mgmcGQ\.dcb#prZr#x3MPQ"*5<` ,N xEpp&00S̥婌,cMUP6Ugt2ryp(K>@yU߄_CWDFxuʳ&Bb:稶1 Ѷ$ZT*rD"2 e|se+`rAq=9k&w.欽d^2ţ\̔ux5q4MO](]"W_ש3%}?p Smn24EުY>s#c?DJ:ډ+ptU`Z3dҧ }NۥX4'J-Ւm E91ʀ.d$@ׄEIP-@^xmОQ˓n ]<.5b5aZ׼ط{J] ?i!e:Α6oY-cojۋs4v,YS/Žrѹ),v5}flW71A ?nJxfvC}pJVߘXs6YI 6|Xr\4*鱛yp4<,~|x5VƳ1ZmY'VcjzLNf +<}#+׼qmW@)}|ofAdfIO/^R`:b-)w`XL:c|{#pi&ySµJM׮d"FV=%-9w+=g_3#>~v1'4K +uѓȅ0-8~˥ [F6~ G Mm2RRʣRkZ ^. ?^(304(M<4¡QVnۗJ05oV?E}I3^r]dάt%t1lHrs4Xn)}5~/@qޔu-GmЬT~j"ߖ&۫IQd'ogL갘R=06C+:F +{WSN=0A 3vw*GŘy v鴢+SMwuCgrT|bɬ#9$gu[˽Ü{Wr"/$]0,U] 9:مN#uqLâqnf^8NL XsgCS jQVco-ۮ:N^]|GLtd~ ~̜x>}t (u^ƅM6\0@IɅ*{z#\ aޯSc_xlRHuC4:葭;ŭZqa L9e=`m}R~Ǻ<:!ŬfĮX-tS*Qpgw:MBY*4pUH^mSu_TT@QԻs@|N$IhV1Eqok K =rab@l'#(9_Bm [r{pjٓQm^ D%iL*.[1ϊ,y-,hZ_';[EDj .ǮVÇlNeRd5N4HkLedWs>;+.J@Hŷ㗭U H{Д=UK/pΝ @Fms Aj0M1gl;vw| "ϣ Z{ P|#eMEJE*RPl_ HmloU8sU‘/e/ D':vTR3)U5qHgącRTRb2KT*01[,~G']!|-]7O,̺e"kl'+m~!| 2vՉȸ1m a6J|JY&ƃO1Ƙ]L-hNӵq N)eH"c=rx7*iU(UfBL]r4ncf;wZV2V`63ʿ_v跊dQ!p+`yu)|d6s f>Z$W?>K7-}:i3=d(I C}rƋ2gޗ䥒"@}4  zyBF2o|J֜%fҵ٫J$jqNVln( OUlZm 5-eZ~kuddՇfU t*|5ZǪUҷf])T}e"y(%rew~9mrjT& kΗ#wkJRщ;RÌ[kSn>SGIPl+g L)J);ySIUJ8G5Q|tq:!SRERwⴉB(Mnq 7z1.7h::$ WEЉ 6Fun(C-'ĥ~[+vIIĽ,j-H8m;GL<5G 4!8EӌOY >e?%Ղz:7xju{ZcfCBA_闸|Cf>Mu6r5Il6YTb8ѡ7LCsIN!=L5Ѭgo5͆J;pw jҵOT QûϚ]3c<3s \u0g%I2*bz:,0mߎwc>u~ 6-u[C]}HN1yq#[iRŋ;,A=j 3sK**>s.:yh{|> tD;' ^:)Brd>.}5sd fLZL[6<j`cx .ly%-u<{/p("+ؿb%?gɧ?v+֞5b VDHʢ[Ȥ> "=qCTؒ%RU*%P$E2 E2E1'[ƛj/ ijAvVXogۍ,\KvVum,?ilQ(Ja8 λ&qig1`%˂ ,X*]ւ+$Ib&! (] 5vf~Ѹ(W m/r|'Tp`u& 0 K1J`8DF_ha. ,X`׬}ɦ3/7RIdž;$ RTkVHDU*336'gf E䘮=єUؔO0gp#!S `یâރͨ6D<ZL&[àF&WW4d u0g zSZ$d#lizpdfB02dNݝQ.kSjDp蕡-VE/̪xf,jtv%FbrdRT** ZC]NQ4)hWK/x+]Run'CmtmJ%. .öehGM}*Q|)(`ƛ˻1_[.Ɗ8NAt8P(+JBAhEV@VOnco>-@^xmОQ˓n ]<.5b5aZ׼ط{J] ?i!e:}U=Y-cojۋs4v,YS/Žrѹ),v5}flW71A ?nJxfvC}pJVt@kM5y҂ +=0Jqz즅gG߹8/'xlLV6sI39bZ~ OGG5o>a|\w$?~U3m7sJ3cnߛYP3rYӋEe~xKkx|kb]trވi5fZ g^p==dӵ+UϹs|`Ia3݊;!csGWFyȵO߹]I';'cJr:r!)L r)eq dQBtqS}񻔔puw@׶kJ m=nkk{>-2p=tT|Uƨpa=O jjif"|v}GjeU46o=c\H+ vhVHͥTٜhjAME4-ZbB}v :`XXrtR Y Fh7)D7Ef;6Vb"ή{81-cAΝ )wOqEZ=ԋʿhnV{ :yv1ёve&=82sbFYiFt'y6mrlE'%62g$Op%#{NM|2I9"ţ6Ҽhl)n5|x'7s[`A-{N ch8)f荟6#vJE@m)^hs:hV;KLFvo~hb.xy?e[}rۯ;GP-oGysvֿΨLs4u R@u) (MkZaL'&\;B8۷i`%my[9€l1 pM/6 9KϽO8ɨ6N}/ J$gS_GݖY4pxhmoa\KׁAc]-wv\M|+᦭{]Xs:iߞz"709ܦԑ@A0 mdjw&E56"mL0cW. _fa<59,FV{@mg.VhA`E~-x3ou(ײ IDATUF4e% qyfBPJZ8k>v8ݷC}G8YQ˾8>y @-Wķo!up1ͿmĻw~ِ?UKe4+ =v AhI.eu$+qmI;Z&,r(mI=5R^T<c6kݡX#Ac+ŘH~P ,@ Bwl9ճSᐤ9RudBqjl ܫݍ QDѾ襛yR5IDM9N%lds*ZEl 8ф"EUj 2^98bzאַ^+9"ߎ_V1 AST-@R";;w6@W'n\[ç4@RR2鑤9j5zoJUҼ"9P"!̌hܨRJ@iZq~XCn(VJ~١*fE5@áU5W~h\U/_ ?lII,h GQL!3^i8D%/#O`eXuXUUPoۈ2RyS~}/1^ůT"Qs:`s;@D]~@gc"l+?U-MYO'n/{[~##;׮>0SR$%ϠPI/բ?Vͯ*0J()\C)+,i;w}P2 ^(\sic\o ?U7Nܑf_AF835|˶qVPy͔⛯|7卽 8+C_JzZDwO(սqAoΧKjɪ n2bTI[^)ԵY/Kj\qL 6 I8e|7e ș\7z1.7h::$ WEЉ 6Fun(C-'ĥ~[ +vIIĽ,j-H8m;GL<5G 4!U DӌOY >e?%Ղz:7xju{ZcfCBA_闸|Cf>Mu6r5Il6YTb8ѡ7LCsIN!=L5Ѭgo5͆J;pw jҵOT QûϚ]3c<3s y9,`JdNU/t(X`<0h|Z &mZj8"c/V!&mGŋ;,A=jh 3sK**>s.:yh ͡}蠉 SwN\tR|a]]k>9̘ã#ly'p^$./<`%gۍKoX{v| )X*#)n!4d8zƍ[F@+\.(;S?@-Mj\4i ;+,X3m.lvnd Pc*RT\_&;Ic',X`9JEaZV5 hI[[ibʂ ,X*A+#T,X|a2P HREr,gvlIPo:6V&aݬ#>TtqA~@^L~zQ'qM~B++oׁCu[ׄ#$56I Gω s3EYpr+"C:ҤT4Wo¯!+"Cls#c:ܳ|>~%V^ F综&|—GW\k>R+ՂB`#RIP@J,q N\yԢ _-vP OFtMxHQԹd e tzH tAu+!-C?jzW}RKY o.|m+:9(2"z%HK);EvYǖSLAԧuj񡔧RD"HhI>T* EQ xb0UYʵOY_1t[ [z,-ѧ1 Ms6j8yy-EF&,߻z\`VR1uZ'-DP,W]Dzo4eLMm{)}~f\h6'.yַ/{klLV6sI39bZ~ OGG5o>a|\w$?~U3m7sJ3cnߛYP3rYӋEe~xKkx|kb]trވi5fZ g^p==dӵ+UϹs|`Ia3݊;!csGWFyȵO߹]I';'cJr:r!)L r)eq dQBtqS}񻔔puw@׶- `F5eZ8:yBtr٪`cT8Sm0]_I{#(/`ƫBкˀ1ՙμN31I{;W[ HM[rTjk9N4)I99ݥ~^ISgZ}dᄏߴ]QZY}HcVp,t>5i@J+Ut0 Rz4v8,D;y (ʓ >Ǥ#3;:u{G;By'z~£c׮^g]yןpuO~/#{X`;aӗpzs"t\ dejT~j"ߖ&۫IQd'ogL갘R=06C+:F +{WSN=0A 3vw*GŘystZQ) zMٻӺKi3atj9k>dV 3`:Oa=ƈ+9v.֪. څN#uqLâqnA gŽpֱ Ά@Ԣƞ E[4]=uNt~~; M291#|4#P꼌 ml`6"  3UGѽ_& ٤߇Zit#[w[ 3޵ͻrP˞#z&F}'uytvCY;z͈]R66{[ʅmUo'-u8Any@vo:G8: r;ր])NO AڽT)nJTC%A_V<$IF}qkI1*8۷i`%my[9€l1 pP}ާZdw'ʤ$K10xV}YCpֽYa.3'r #8mJHFNqYIj[t__3nn.t #=F{5b }n`Vh P\skkw d'&Zel:203w\.Z, )[dˤãh!T?1 P%z6 7k(F y`Śiy%e(UAHTЁ>=zzʒ54GѷmJ7n\o* 3l>-2wo>Bw9,z#(Q4iìZʊY lR!7?s](UxUB&8ב6a=E@%KHѐ N@QPE9:/m{O uY~@"SևIӣI²ߠC[T3"Af9K3!GuDCoV1ӚPPeZshΦd#įeHOgAMMoDJQ5i d=a3((R"KNU)rq0Ґ1$fK7Dj'sJx"=vp4H/vRAFfƭQ:|h\**{E+Ph v7D+Dc+" ޝh}?co޾2BD߲DNaOEJBB`/(WP)yIJ/S43U+pF̙HC6opӍT|bcȆ8a<[>C^_\s}йHY령O죜j4%-$(1@jv@9(}U*?*˥O˛.JuɮhaU}ySXX웿<x kWBT.bq(O:8mGn bne~Bs^2((E&(Uz7eU=},!%@>D6&E'][/\д`d~`XN̼mkwk_-YH|29R !RVvoQpM2ɳrm 6 WHz^J( %ŀ߸ݸcWdanfruŝ2g\'"OSR>J_\ߛ[fNٽ,IHe@>zxVɻRc</>TRgHͪiM4+R>VZ'*Ogw}M~8 IDAT45?&\L(HY;/U%Nd`(F6uچ-.206&_V;RpQ<آ@T_T)=~Qn@c. Q+g1VT/h]CVԭ"qAEק~ 00)}[2Viv ~O$)l^gW6-I1 8c+V_?pA&5E*T7Qz)%8 \I6 b܌n o.MKWgK&~3o(/j<v[450˾S׶19dC͂~X vuc'Immp""n7w˔N ݵfKУSc'手oVzORt8,5o9Mp)rό/~cW#KG뢤(j&,L8lS.u}ʥ54I-lhbo3.Gm|j >wShSsCI'Q?@Sc! =&<{a"ߴc71B,=[Ά(kr؆˟lQI7nD.ܱIVX<3%k`؏$' 6GMC^4oy) #m?a59F{( 1LT}x~3Z08X?-A|hNyhW୩0 0_td0gvSuSKHcW e Ta*S*A+)W <a&0](9QS|@EH 0 0*A(@h""M$@YP )gۖԓg[ 0 0M@I QEA,hN4 8!0^e<``TVyk&&'~˪I8BQ06[g 0jm?D 78A 1$~Mqmb]r6 w'9bM;۰13vH]i1|XhDQu~DK5XS\$85!џDg%?TwIz?3烙Ar4i"pɊ3U=:<("tv&ڐqqﲅ/Sdl'VRӂ8΄~rcr\.χ6niۨ+ti3OUZu=ÕYXF 9}Հ/xN|QukvrG>sʜEc{472GYeerok0{ VU.;ʳKO=R7@$yF?+Ck&,rE|iiiwPToRaK&XdGϨ>'<&]ɔlٻ'E.m/`MH'^Lq8ԟa64Y]ΓY1m(qOi0ohδκY6L!JJ)5if%?qk=ԓL/͕t 0õcZ<_ ̑h.a?A-I0q r0E=cT'|XUpW`igehxG|?73ߚ?a% 66b~ȱGl}.9bT )&sh甥SJmMDEE=Zt4v +7QX*p\i:f3_ (׶~m?5|๷(O}Nܘq8|,7?3k\lP][j w#<<Τs /L'ZxG՛{3`uKs}bmS|LF;7tuHsP9E±mcTQFLvS?;6g3`S7ݺx͙p^B03A^=#|Kzak|HՓ}l8t|%L^j5܂Fng硛6{l FM_gؠ JPWt[6k7s|n;2dتgMj/ L; _M(* "t6x\^#=LFM F$ڳxnaMxnAbjlH|\HF{#ͦEq?gI893zRd΄q7ќ4M3UE:k_%S[tIlp)ϖm|Ü{o'ڮm~My_b]\ ,FR-Mo [ `FZ Nv1hs\NGIĵݔmJGUdkp16YVc5?bh{: FsPjnܼgA"M{Ziz~jtc^b˵ITP끻Ws~dղm 5 mB?:6Jia9ށ\(!TɆOFu@@ƍ^6SB.8)PH¬{oYh1\ܤɽ秅ܪScֵ4e:})&딝;fouWkr1>Ii (Q^3׮apoKyo- q)_M=;?o@HhO]7V/@So3{dD8.ӘyY6$>>D,}hĹ {ih \ /ڥx}3&2o&=I1&-oh5=dNM;767";{TIg_܀+o|\ۥCGٚtmK =Aӛƺ̳սyјyWBa.cF=;))WG/U 3&5򩁦N=[l'#n],"寢o d oޥMg;6,5S"('Ɔ*fuʸW$Ʉ@Q RI~O((P82ȫ`8и}@zbhkcnu[U^r>[쌸Z YtkCzlndH8Ɩzķ+!3{ǁ1#.<qWe8vB"xt_5O <|}dvkj\3A]Tz H5J?MU)Ȋ?Px6`>˙' dyOc' CbQ/+-˼)ŘæV;7 siN4d}0’B%$ p(Ӝy/Afl".M݅sj̄ENmHS I8w8`\К-dŗ?;uVvM70ԧ){!#U>|zER~Hѯìuu}|,I|8`nAPַ\z]91!G-b`Qµ$יIc8j UwSR4!L2WLK2z!F*:.QHyN u(T* Lvr,~olk8cuޙyKP4iik)n}a9)g" AqǯJ\O*O6$9SihiVcե92S&z&G&:Q-rޓgAhyY*eiI/iQ%H j+o"=ǯ),!)$$ #Nx{5w2M΍R~@P)q.@6" ghc2}˱⠪E(EPZIkB(~}(JPe2ISҘ`(;n'&]WNLm Uq{0]8Eт6'(-OE3&6ȼұs tQaqةWx(iDok1:#VkF0\2jz7vVukKY!y/_pbHC#.I.OH4R|kD>䅞ZFD-4+].AM^xs"L,Ki#(B- K:$ RJNQ0ɍIYN`h(g{}-EFsT`#֏|ҁ}7_b].i *έCS ์0/ѷ1&t`#H UHeJ49/IeaZqֈ9i4xuxqSc*bOyvѓ]l1ٰ0'gg7@닫wo:)k4}SżTfTU}.6>uҀ.o_t(o'{E;c;4=sp&DqUgӔL0(rJb w: TweyWwy`%4f4JlGbI-#djzs!/? _NޒK Jz-yӟ<^]ǎȉI-a^ cQЯYHQz+a^f^E\JoL):bjl|b|G7#<3"o|S%IQRɨ@L'Fg(VUIK{Ϯ*+O#{:lԵƵGƟFu7P3M[ͼ똮U'k,YIo_:yGyTyx\#ߢ/yx߬8G!]uj؉rbn+? 9wØͽD]tZ5[";8\5O\|}VxB*`ena-$ynLo{fļx!t XX.hn>X%E>ǴU /4YdQ?`a{.r+S.pIoeC58v9bn6T [\yF,n(V]Xbc] 7o\MM{̪ɋƅ `O+t"Sd8}Bf ۲2ضPs ]y/h9WAѕm |[ٿ~k[Z \K?gj5`,ۆ Ifo}~>苿Ķ^&[qPX15 w(&p߉[6OASCMq΁='(WGsl`# BM;vpD%r#eGkf 5TI>g=U8xT^9&$Hey2Rmc4eOBM{{'X:o(,pD7!71NjID)'+I&8SFSO٣Ã"Bgoj4~I¢ "r[#6K0bWz윓1sND>ri$% f^mcD]nG]V>⌅&&Q 0Aċw>՜WzF{/ؿq+5?5g-(|0oҧD (PYzsO}ݺni~OUYǴJhsCW45ZS  Æl k#dd[h8:X涛1CaOH+O;o_lHߧlvè7('Q!-G6rX~s@iM\̑ |Whz?F:h" *6&- )2%`B ԏؘUG^Rߏ.. @ڢKjϘgӯOyl۶|سU>7vm{hʫdߌc.'[ToLumT+^tP]/ Aa0H15F7{=arےMk3ZF8{]\-nٓ#S]6YVc5?@+CC^!WˌDZ 5 mB?:6Jia9ށ\(!TɆOFu@@ƍ^6SB.8)PH¬{oYh1\ܤɽ秅ܪScֵ4eFb)&딝;fouWkr1>Ii (Q%jzd+ɜ˛vnl8oE'ϯwϾ?W),KL[!vБA* tݥ {c]BYp^¼h<5Ȅæ]ƌp{v~ST8zKCFdLI/{|jy[t,WBO|ԇ;붭sqp߼K҅vl^_%Y)KÅ~|>/m2nU˚rcTO>AZ4yQǤ/$}u7jnȤ4Y mPS}Tժq 5rr(}a͎[+2#4DN]b';XDŽ,zUa`8и}@zbhkcnu[U>[쌸Z Yt$Kiy|ݢ΋' $[.&}#ռ>FZ5+Ӝac-٨&#l38ќ6"Nv!H6dE(C`P/D)upbun|ٹ[ȷqeqM9TԧZo^e\zs1qf&إW/ C60j_yV_xKsIN_/VcǖpT#j^щ ;ZuC|]6B IӦ;@ɗF̹]}ͷl|ԫ3B_3FZFN&i\= s) E$YEWz&&̊l arך[4oǓ&j8]͸A6x]N{͈4WxT): R`'k>Ff;Ŋ:M?/]f"6Q)_#8ωa\!K¾@44M;9K_7 6A]3 c8*7h($(h5yӄ"R]{/s͛rF(T\,3+{s=%<2n~ݜ@B?2ęi_s'SD >(*lس؈4)s05+z7"\p"`(Y% ^3+AUBW5mȠB&MIc"Х\ٵ=\ b/;|B?QGu>F`ٲs񥃥dì?X4ʖo^ ?d1k󦻣kn!m4ĥ^ŧ眺=.ܣj}樤QeBc%I<_cNlp TivsVפqQW:vn?A5j5r3 c^ɽY[wp#_(ꃂJ(O"h4fsc)a9y;DʓH0H+9Ewø'7&M ?y?~3;ásqΔ:zo_:KhقBI[Źuh=AZ<B%)Kyvѓ]l1ٰ0!l (z}qB"e+$P_(MI ye+H)WoOр"@)?*6>u?.ot(o'|`QFr-xeǸvvi_74(nES"2Pd^pS4QLRԶ~D{s ;ΖkVUp[uw1֐61nM.˹myݽOE*~cZ!5EniNl@,0-1QEi^^^C./V r/)Ug<2*ƱY[;#ȃUcY^2 T}ΰZzMhNZπ*KTGK;!ugЬ#zs*'-AH R3 )Jy8c" b J8=B5LGWM?H ٘e,"t&.hTS2HD0FDMIi (-q}onOI_e)HB*Zr*@Х`</>TRgHMQӚxiW$|v)A&UZ{_OYz]8Xw}M~8u mʅ"FqQ㟌r.J{]F1;W~cLr4>) Asogqp7<-F[6M+KiŃ3_1pgrD4?0TݲY dSظv(MuYZ9>Az`n i`y'S`аUB5r;I<1C:mcdi]>v"vC#M{7[ôBn'O‰ aL߈Q".S:-tך-CNA{Nd:Rq ZYo ]^.s; m!Avpg=};3# k1t]|d.Jbo}i!_;iȢ~\ :2ZWOܧ\Z^CD.tmqgrDTo-*ZwcG2?Lme?cG_'8=G|pmM;dP܉^u~j$hvSuu l{T۔ Lo`s%K/\'(Jۭ*BI7n111gPYGRMR3U؃=`?4a59F{( 1L *RMAoAMV$:?QCY57״ KNqEJs̗j,4@#zP^:D?&gJ>oC |m\ GYo+;9wtxPWePIyKV:1cP?cH$=;PbX5q9.M:c oiۨ+ti3ÕYXh#:Xzvbc&\Y?;A ÷o.:E%_@9ind\?S~L /{^ ٫N26_g{on#%!x<}쟕5nŠz޴ʴ;(K{T&E. ]EazԈz;~o2г;\̕nO|P4vN)Q7{w>p)55iBԠ^׬wg׌0ԁ}O\bJ8.=лɖݪl7b ܽ-.Qy܈YrҁêpQ :c8q{u|zs~lfɃQ^YJ%䧌Z0~`?oU댢y 6>qUU&_ts_\q)&8EyzhЈa+֮)qRPԛsRE!ǯ&m\d(x):*"x٪5מ0ޝ[<~l'ɾmuWmKV^3/v'㢣n˴񩑦.Pċ}]u3ʓBd U9(EbEE U5_G^A'/2S[tI7ه,=8mrs_x0imȿ!Ovq~,K._Xճ2,clMO,H|2uGVBO4E\{J$ {Ex+ Iĵݔg+edc8m&=~zi{GUKRB4WpL' &ךO%Me~LbmU-Pn_VZ]045v Rry%P4UmQs\\m f` EuNA6< {+&-&K6Ǟsqճ?+/- M)h0'qӣeo^㛩 Oҹb%:,5UԾTksu:q߮g/R|/bTEVLLxo$?Z*E֤C-7n8u wR5{Ѭ}Wvq9mϭ+G]4RBbI||q@/eEFܞZ"^? ;j{ Ci|+[IMd1&xß[J+g@8.Ӱ v]J|F,}bܚg5\J?.:;ϑE-wQqGZȰȥaQC58syg_8o/+t\DžE. \:viA13@ݥuϞ5[{csT/)h2!ia!s7/hv GO.}uV5vD{kSM{آOeT7?Ҏg#u g`zj*OCPq7Ҝ-KG[s\Jl 3j12gхo){1~OzIclOͽ-1ow6|eq7(0wjNe~"_V>rW`[G{N@k@ùyf=:6"Nv!H"f,GAj&U)Ȋ?Px6`>˙' dyOc' CbQ"ޗ쮸[ yS"1ޔ6̜yN[Ҕ4d}0’B%:(K^$WDiù GbL|\[4.u>5Տ1xrq\WvI9bGo7k*YS'N䊄qQ@ Ckjhb _Œ[5 #ܘPj+$OKkѿ6U$QrE)J\N#Y`T IDAT3S~!bcLLJl!%>5%h"ߊaվ͋Tlz%q?)>b{OMmߚpdU*PYQ??8HYr`t횿S,M4K1JJX9kЍw|Vz3(ヂ࣒"8BW.BLE ,J:3 t Gm!`R&$iVbR|~)U&[/(QYU)thׁ@Rio34 4MN͂MgnA6?%( ZM4az ܾ0Ք3BJMwWs%`oD_HLdEyZI)KiRҹhU]XZɚLlA-GJR,L3t-J֤߉1.<.)KC0%G5L; %_CboHs> R)uѴZUov&jvbV:hRY\RoC3a}4׼_ ,4U$З1N4Oh.2n~ݜ::q&ni+nT7jL Ll6\YlDFr05-NJe媂ws@0V_5hݶLybr6#6l8{/U-jQ\QGd^^عi:ר GXV|s+JGN[jmHsSeK2wKRV́NzVukKY!y/_pbHC#.I.OH4R|kD>䅞ZFD-4+].)ښ| .Qie)>~K:$ RJNQ0ɍIYN`h(g{}-EFsT`#֏|ҁ}7_bV:[ 5saj!_XiRAIU4)}'W!PJFjZ1k~h(_Iq0*XE$Ԕ<_I&tϔPkjX=xN,ERP`:4Y$-8յ }e爜0+>H UHe_ (WД$U Rb8Y#~~!rN8Uzvǯ" zbcȆjz P뛅EZͭ#jj4%-$(1@rQU~TjK: i@7M]:7[Mղl>PO88 6`}ՓTAl54b,  X joRe~ƣ-~ 2  \U̼3<[9%#W@b57vcÈARZ!6u(}oֺ?_'%G\*[~ҵ5I4 O Z1xRDZsFl $IKF|ҭ<_ޚ 1(4+"#!A3#~(!97 Q"d#<{VN*.n!S13ͽ[᡿D,&~ 8yK.&(YL{ug;^ 's'#Yqƺm?_+5Wü̼2w\JoLSL1 ټ;e܃]=}}3]=5UҜreUMcn)vB)}im5-֬:P!+"\N?M8WTYkr;c!{w+OQ3IBL"8EI[q9%}qoeJX"˼1>=;ƱE}ZPf=?HvS \c( x^ʩ\xg2I^6zғEQpl6qոDT|#Z4Bs湈Pdp0utTOed߾~^c%É.xIzִ}ObӅNR>/)|(Q}\x|s!{)  Җ%LT>;lwTAͭtLǡ/O[6@GjG4}5vai;45.(#4-98 ? W54v$y7s:I`7v88x\$; oh{\Nۆ^uZ %*-~j\ mOKF T2#d-ç5ul!F.~Mπ 5 q=۹^}rF(PGEV@§npRJv;1k,A{v_?C5[( kM:--jYɛN*ْh pߔVj[Kc```````QNەrovqm%5QCQw17JA-(Jy{6Qi, A\}U6AQji;jP(e;(aI}we;D;LFdXPNG/Ks*icvQmf0ӡfȁwʧ6e~NX!)7}WTړ   ]$Tȉ# ~/UV3MRK l*){tXpxH]uz38BUlyֱ/BZ]pZȫ~nV'5LkwcujkC'Ogu^7bYZ%5[ChsW_5S=M7 X<չxeĢwU3ث腔HOR,g,15R"II J)OWPꤾgYIW| G* >-}. =[>CO @* N[`_N`Ԡ犊?oձ#7jS}'a-ϭ]?ot&㧔s>I'rLc```oȺ5#| 84b9 F,_Ylal6q($II8a(/a jVqSCθ}ݦnKwq6iޝ)^yM\dxSu"r[&bЪ1ͫ5;9mlAbYGo A}'9>vtZ2jvkvKU2wy58 ؑo |Lx)%TzN~yϩq{=vۓy[}Af֘SF9p}fnjh8U>-{s!ZgxP3CF5L?Sz,/ʅ)/ * =~'uÕvvo1̈́f el|ȍ}M@w)b}Ľwu]Ǯl/Y9g%ޚf0krc#;:7k4ԊKQ"}; qpSKxqkܱTB4J4l5?q,m_Q߹1pmj0u mܡ~|;+l+yu?m|Ҙf SxItjJ!K~wuJd!o:5*6(8 pߍcϋQVn$̉wz1_pjiulϞлRy} cwnO0;co8g^çm!Jy=1k]{ymd+QS/!Ā`nyCN3om&f4֋HrQJtb^ukkRb>xNQ"lI>dNHߦ͒]M&*$Ix3'hKuPA@*ަbHM(rkü #{Γ\9UbEiOmW*Wb]jdb@ni[-#eݸ6ܨpPjMfXU}>x\`|] V}+ oG=l9v~QC:ߍGd06Z"\ٰݸmsm:{+G:@7'n'l68hSދ [9_hBu1 ՗w51nT W<#;mflr>v=U_Ԑf>+2KP e&e :'I8mBܩےTǩP,bQ{(4|U< AQmwPgo}Y>\]3~tjǙ׶`+萺%Wk,֛RrX8F:;Kפ2w51z!7^٧ ɵʋ+Pkav_e=$Hd|ƅxؿjPT>0IF>QM x,AƦcNK- 5RNH ɍ滹0~{[,-:y3geYyLm? ظVGΧ@E߶+9{[$QcuٓWX6I hN qnܼ[? Uݨ1M/zC8c ֳnd+H|Fw0V. STte: »5㔔E-oJub=ppBM.SqΞ& +RH nDvlM7 m|'OLwUo{6>tl OOfjf澔(Qʠ`Pޫ\['~X(0=˟5oN W[bQg?(ט5Bu $Y*SimjDc+HP( T*bL&) \.d2| v'z+wN&Y:[\ijz;"ϔˢݦ7oR US!;i!LIϕs~⛇tjyqG.fXT,QIF_[b1H)8Ϟ =Eq%-uX:J{+d (HZ?kڪeɔ$|Wᣲv9Q^;J{ض$$ I@$iנ ;O=tѦrM799 n~Fz]gtjʙBupU7rD`cTII]/6$($ $$i\uhΪdIAJ4eTElZO ?H|Ml" Vԩ$Qz("blo$VFoSHq%KՎC$$)&V}~Xα,uxhLOJ{g.|d7wΠDx? AyZ2hZ(X(˔U"FG6rR[9D#8MyYjJ$NN ߱)h㴇RZzoIX ;Ofb K-wjtIL׮&~-njֱ8J,C"M\}.Cr2`Ț"J˔8ʅqR8(EJXƄ"Ti^F1AE=kJ{\ղC갩alΉ"QN`l; 썔 :clsO%ɤ&W w<͜8Ng\|k! Qd{Bev;jX% -AȊ$QP( &kL`m@L7`kCUkH[91Y4t$q`w'{ "$STaeE*(N%D%qj kd@0g:dKe yo]k[TtcIn" ~$b݈Vfi | ar?m8g?2 IEɗϋwnj婛KRQAPHwA IDAT$ Ib AWKBѩ _fL^s6+ɾp_ZFﻓJh,Ƌ tO~* B}zl;uEHlG;#( j'߈~sn.Ȇg鏚pM=io~huIc#-ݐqA=ŊEݳcK7l8{Nj;i+~#FY埴:B&{.H[lpw`٦#|l=7y+٧yeO^[|^wx;סӜ܉c>8-=ڀkg[b&wXkJ zY R%A?)+"8bq*x, 3B>4D׶)F.3:=t;*B:vw杦yw_V˗|ǀ {1hrOەe5Q*0n0 @J %ŴU-j&l[1l5t0¨vCPCMUl>WId#t|jq? d˖fD)ƭdBI[\D5ט,j }}Lnjyw]k2sBs߷50ٻo)dcuܠtր/:z/ac4nmI;z8J}r,js'za'Nt`ZbdXiYI_2j04epgkF:-,_k0~ dT箞ݦo-4yFxt3NEZ~/~HLGa/RpKyuDŹc^xuM\7jru]$\b*4}ɶ:lX֛ڀDogR(Sn{ocFC)e;$8QJ/;Kmݖ30000000`Ч3wPvGP(h_8g`vVJy~b```````u!z$I(JiNJR qu%I]բLPlg``````'uG}8/!ZMNj3R*```` $u>'P ,񪬟r r};Ny bm'l;ajMX>icvQ J$=tHDsZ"^G*&ȥ\bmkJ|m ү~6TWC>ިW> r>- _%NmW+}YUQCCI;zFr|fڣ3{ey=K6r5¿"}azl*5a:8u>Qn~H^%_w:)IdZÞٺB#k̤ظj0ai"QhZ'ByʈE类g haʼ>;_͇ZN~.<8fqG 0'\Ȏ;$yu]piS+*qwT>Am o$U''䢜=3 j*ٵsqX_ksrrz0Q1b%}X# n;ԷSF)6bpj.U6]VԐ3.>x_]| @wgWFv/:s]#ƟܖX.;jL] -i|:إi٭Mە6n/51ì9uuQ|[cM7(s+|N뱋ߞus۴Z0u),AuD9b'nNj?7YP\8Pnwf@ onZ,O걘('~AǶo$^~ Wb7۽4m.De#77Iޥeu (g眕@Ƕ5mz5|jlqΥ > 8%85X* IO%&7WZZO8*#_ϼAÚd< C^{7[=eOğHѷ9|Zi73e܎;x:PiƇRaC\]c¼s#tEI[r5ScNc2Бإǰ,U]}~腿䉱M;Fk"=yBe.c73k˽l}j̨li⳿|H_VxH .-mҹ|?U'*v/[xmNcXue˳c|יN|F󙻄֘@APjk[P(awP+|T;Ł}Ǿn63iז]9Hy~p$[ێ=3q`raʵ<$:|՝ov^9<|Ȝ鑾M%LU6I,D񦗟gNіꠘTM9vŐQֆyvaG(H{۝'wOsʫ~ڮT"̻ĀXbLon)ƭnF=6f|SUv3#NMaȋz8_]'~ЈnI>xMڰT")wG[&u{qaK: Yhp"f AqZX=I ;mflr>v=U_Ԑf>+2KXQ e ?./T]6΁")`lQ 'wln4.ќsya-fu(D5gL,ܗ8J}CԱTN~}![)}Přa{:s%?5>%yx0v~P"[1kRڛI>̩4W6YJ> Ft̚y~UW }R:(ƪ״ l< y/Uj]㲼G6h?J- "ZԆ<_r4h.Vw0ӈE+r.{X&|k^EPA@Q@ GI$b Rju'/y8K6|=,4XlE! l_ rS7_bmo̓|E=[l]Me,%aAXeGkcGۖD@{(À".QgŨugQ$(h7u3:=E t5PS4կݞQ%%>J{g.|d7wΠDx18 Ayxly ,˜ZAY% l %夶rVGqZjIB1J;ױ84byfHFf_E$9wsE'7߶2קFsnXh9ije"v*[mDXW`U=מI _Y?xoiԲWPݟSmKT IQ0 zoIX ;Ofb Km|)X}b$GfqqIfæ\~~܇-NP90RzRIRFJ9:clsOz;&˛\)4s8kvr,8G 8vƱY//<`K}Ɨ$*qvC(T(q ^HKT]S]߱S,05JXzPZC a_Dj,3(} od2# PgVr i@8 d0E3/W۹KK1+r/qv^O?oB+hik#یwt/?MmEK<+s6j-ɋ?TK:XK=)\}WE㞽wWϫTxRaWԕ%T]*gZ6aLL 75pl<  {< \.;4Cq,MDIz0VsmlUR^|3!<5Ʈ=fd)O,]*e׶\}F n$QH`lZ*NE BVlQ3i\S[af|`ʫ7Љ,鮂LCݾ=߅:/U8yxƮbjjkŒz(!2՞kf^~D'+|wPQީx̀y xpEo~%&$!&㢤學J'I&]T%"@~S#<>|-UN($fhYz7JB<)KZkX.I唴$}i}/Nv -E$SJ 2]%<@ 𐠸 ;hdHxOi2mk{a!n4dX[?ɔS[wz_]u}]e|[XܲIU _v/*4b(Ov ]!R7QjӞU%0ɸvZ;CF8}ĘOt78p@6>;utH~ฅkꩌLC|FKU#i]\c/7l8{Nj;|(y]ǾUd/#Di˒ .Z j*k6u3ggO/X> Gؘ,~zE$rI9}\\㶃W,9ΨDU1ޫhXܧٳvk]nwzƃϔg)鱠WjԱ{34uͻb^8LK&mFw}ڮ,3毉TqIGmPZW/ -%jQWD;{K)Ey[sRN1t4DuxX5OI􉳲xzr-PX>& wpג].Ԙ&t\Z۹bLIN6{zNQ_$^dֿ=&>~oĥk/}'=+x9*{}WgxTGLmmx]T,"::m1M~͍<9}M{9zD4A4\i`ǩnj -I7xLEv"e);tbXԒR ϝ0!wot*$gJͩ=rƶӒӯi,rbS"\#/s,ūY*)TBecSQvcg)E9Y$GAOw9tߋ^se<;4,!HN'tt!~qAi?on%1<}[ -Rv):NE VWJ9,Sa³XiYI6 ð;MꚑN WiٌP}Fޡ?СrѢKi0V͝~ulȏ'&$RJ-6Fѱh?Gt uM\7jru]$\v9 x c/c꜁ ^f"p٪5+){tXpxHj$WȞ%kc?VgU3=<T E+Kd2D"HRT*dߨ?Sj\.J?ܓG [.eZo{2 ׫[-2>Q8u>Qn~H^%_w:)IdZa(ٺB#̤ظjiei"QhZgyʈE类g hQc>~+L}ƩRDBvJ R*&j/\PP7bTRL&奌ODOlj*&mdTۻr`yrB.3n֩"ƴ_u3kk``P҅('O͉<)JJ_©%=︺qzT6|<5d f IDATmtgCݙ?eK7\׈'"e"Ӽ ِsyqze-/iI1ì9uuQ|[cM7(s+|N뱋ߞus۴Z0u),AuD9b'nNj?7YP\8Pnw= onZ,O!L}OPA֏mH';Ĵo{SOi&7ۘ] ,c#FnkoK#08v]g+}Qz9+=m7krc#;:7k4ԊKQ"}; qpSKxqkܱTB4JTMn9'5v7. :pUFyn51 .,]I@w۳dioo%gz])r$Dڧԕ+zMʐ,BtZ ){И Lv}uZqrh1k[8h̟ϔ ~饞^{bkk6 eeW'::ֵJg&o~˘̫\c}/zFe_?zyb~΃Q5T'kw3L/$zKif\PA W׈d 8z՗%ZsR6oO̤_[vP#3nm;vcqܻo{;ujPiw;Sm/;zlN1悟zZ&CLJ,t=Ru`J';tTm5TJo'y 5?^wzO9)}u#F+\CC[a7JlI>dNHߦ͒]M&*$Ix3'hKuPA@*ަbHM(rkü #{Γ\9UbEiOmW*Wb]jdb@,K_~lauzprX>éBITf]} QE|B^AcDٯ_zd[[hD̤-=˦li64)Ņ-q/4fugÉ/@Σ=ƍjaʖg$-(촙e#zV}m4SC(ȸ/:Z+{MdbEյvnΏױ!x1KӜܖSʋO >~V$uM#a짷lt:؅,xkFkP{%l~S*iNݵ^*M-qTDV:ּnS\Vމv:v^+봫u0~7P牶(QhH/jKZ<< AQmwPgo}Y>\]3~tj׶`+萺%WnzCt9&W0ah;]{DY/Mtv$I} a1Ԡ0i^9Pvr{\L'̺y/nuH ɍ滹0~{,-:y3geYyLm? ظVGΧ@E߶+9{[$Q'x-;̞ܽ²MZиDsR߃Օ_3\L,ܗ8J u콴O-4N~}T)}Přa{:s%?5/W[bQg?(ט5Bu $YE}ZyTo,{%)'#uؘ$lwocKB/; pecu]w}ckڣ5_\4K)& nc,N~.JF%3w)t: |Q:zlZ籓s"V#mڳ3hQ)NѐW6Bɫƫ|[f?ھ͛C#BlE! l_ rS7_bmo̓|E=[l]Me,%aAmFegkcGJ`l[BB$I IkP~|קhsG9ɦ\ZwA@vS?_?#|=ӳ_@g@M9STjw{.~#G6F7g+ DJGsm`;1}Y Y3Uų`ce`VMȳ19e@Y;FG6rR[9D#8MyYʎ32(墈BiҶ{Qai{ƭW #W%K#(R$1赛:Vr.-}v?4E%@HeJ` 8) "%,~cBV`pXnjS&[:Ćغ>ɑhykoٰ);!l0TmT!R擥ɤ&W w<͜8N뚝\|k! Qd{Bev;jX% -1cDsهCBYz K'IqɮJfBpSkA\쌴.딟]D z9r)W cY.Z4 g.˃=z{;T5+Oٌ5qY,8XZy_]M{ׂ̕pAȳ+JdӫpI(edPAm!A:lK!6aLL 75pl<  {< \.;4Cq,MDrrwpƁÿgiaL,]*e׶$F n$QH`lZ*NE BV87ktXr9O oOzC־o tb.K 7PGow!NKE9/N+Ƿښ03ϧYH&`}LYH[_¿/ SYOyBZ,7BݹBEyv̀y xpEo~%qQRV\\5'K}.S* _>79<ѧGbEy>ƱE}ZPf=?Hv3Ѽ!%p $ϓADʩV_K/ܗdfF*xX=?A^V$S}w@ѡ -E$SJ 2]%_RN!, r7~'ScA!"Ԩcpgi꺛wgż|7q ,L# ']Yf_1ɩ&ڰ1 ˡ_ZLKZբ&wv1RP=N%8>c`>h<=6۱2j ge3?[M5e2|n1e]M[#5 %' 6>\mU˩1M`xsBm]vȮ iT:#ǚus0/g'񎕿 }&k=xL<||ߤK^\4:6=7yY/v/5qY }rݳ2O7hm#5_T'w"o{#wg#;*Tbl 3wP3() ա;RXNmlQ(Oػw:t}3R̪5 !`J oKȳ,uv|*S=_`³,ܣkn@_'{D^|/z͕ f``tX ;Mн7͈T؞3o ,X>}r武DpLH!;z-N.+ j8E騻n5g`x6~);_]3iӜ76*7ќ;4grѢKi7}W1ӏJ N6&oosͺr+rPw줾Fw3ӱWcF-1-NɁFMK A.#GcyL300"q{0wX۸<.[ϲQ]*$ ̶qP|IcXA ;tbٔ{̲. UU&ÏPR(UI= (GRL&guQ~dID14^po@EQj-R㪀A#N۩)RaA?vY _ܬE);2tV{]dwݥȌJmٔPrEi823گ̎x[f铐5%FFg2ڻu5Όq{qQ;U{zj,/Cמ3V'zpOE>~jUp{5%ڀEFJxߘO5Qꡭ\w]Wz)vWcTd} 38&c/d\w({rgϩB Kƕ>f7XKkJ3yY,wZAVDo_zsjXm*c=#N~ցr<~K~е :Le6dž?1mȩ*uYN k͟ie:|“ GҋJ3Ϭ]-|sxr͘q[F3']HQ)IFMĝ `:Ǝw6Va#O)Q5>m eAU`_+uȸWZPx@Ac >+q zLpPW7nEoU9:S&6Ax+SULۻl 5rf]T4׺ye̛ȯBlNviB-xXjze<_{}EiKkeN%L[~ww=׾mX䲂G/XH͍_2nX -PLEn@Cn/[ j' dȞ]Ajr(~tY{$=rDžB@ 4h4;2I잝,s"~&VP7&(xvcu #`sKԫC񌋎ztũ{t(K] ιmvݼ5Ud(,?՟I2v5̌{_}.ZqmZIɓ36jArG#$y7lifʤ5 .tY{$mH>F#j8Z. k!oV)ch4skuUz.Di* c)Fsu9 6QU686ƚVeVUkSXy7"g)&o*32,qAͿWvS3~>V,Eq7Ҡ(g֝21Eʹ:< }Js\` ^B@G;:xQGk0隆N~US>Mdxb}XSƮXbY10b7`zes]bU͜D eÝ1YXq9 tѢ7<4,\sfPrӟ <20Lj-w+%bu60FޣZ#S[ZhX>rH>->w&޳ksֽ0S8'-+dl%LEA-^5H#DV\.ɽ~g [B+x-g ErD_U1⨆%+oD3"׾{}kl4r$#, ՙ $OҘ'rMf@&NՎj>p9q:y .%,ÉK l)utu*%6%ZqE o]$"gn[_x޶&>mY>/-s4r]Un6a 'IC|FgY!V4e JhUIOF%(,JXYKv uC_Ezz~@(|XNS2'(50UBQRpI qprzu4ryy EJEp2!vnX7prwzƞ 9 Gv L4Qӑ?go?/Kp`5%mp{Wsi8TY&O*>[8C h@P\+Q(8KG9tW2QD$ud p 7*|1ޫgȗkr;u.q {N)M9wWbUq%5%-s5; 3Q-R0gk#i#hIWM2'E1 IDATi ]m4 - +v^usـ޾tJg:a1ZCx^,P5o*;i-|]ԴEkkJ13֮*c!OgcHX e @g[ +qPB@}U%e%g&J<Գm˙Z|[u Cwc8`D#cX_vm%l{d w<䘃1 Ea!:'m{kͨ;ԳqIiHK5OjFMxzYkb(ubQLix'{t ^Tg|G.ᖊ$ 91K]}(DDDX Tl+ErHk*X2c,]:^#7JN%u'ђʪeڊM9w%xte̢GS@ORjT6\+7JuFb`( ծ&pH8ӫp"scNU2/*l_]9⟋<(ɦU9 ר%\(s@P:%?.[ qyU|'t>>1%TGo %Wr#Ulމ%WI X#Er**JXc3K\M~8ݿh&Hy/_+5HDV/ė+Y*{weW롩e'g0SeX"H>(ʴqهejZ{íT2]k|*Ɋɓ! %bH$B"* G#Sئgs&L\UPd~XFx:ӂ6:xt7z>1I߂n@ 7X=& vMl`[sl;aICg9x_TҴ/|Wo0CcaBKcZx*+ A`K~QVVk>]e糰˸+_)tܧsە')JԘC_u}N+#6 j6jq,M8ts`5\]B%W=*%; ???uDW)- ]m ܸ|aZm'7a`c^HtGO\GXm (yAFɩԩx׾;شRMs!e'fKe[$IXL1JPtWQ weUj!~g9W4|h$+fOApe}I`A@@ gGذ# ug`t)a}^8ˀ㮆GVoh= StTA]UWTM0@p!?QJ/xoIɰP2;pB`҂Y櫗FfKE.E׽7R}֩S#VB:jQyr5eDPX@? e7>,d *͈&5sqŌ>c޶({{SR ѡ0 A[׼,;  +S/9n5|dw6aJע:Rno/CA  ^9:F>1 9U. Wdm3LOxrHzQ Ss晵 WoOֲ3n˨v02*t>ը!B1LUqƪ ,{~੷9%jfǵm,(jy @wkeNwJj/((y~,Tb%A W?üE*ށCgs]=#wa It{<-仠Sr۬sթ:q#iuԽP$xXjze<_{jԔa#W)7jҞr=~ޞ_.-|w/U-{~rz[P..V>JdE|iC@\;lI:;o $ ժMd4C$zzwߔ4ٍա7< 9).QM3.:v%w&0+ţRco}xg]narsfzdf[-Wn;(pr|OՎ!OI9}dǗDvq75ܷv4Mn*ZFWMc?meӼuگwGڿݓnW?1 Dxkl=T6jK*)7DQ#\vLY(rwcΥƟ{֬q&[P׋_iND%לꟓ3m-WÚ6jD8 w\vsm2Pu#T忽ym16 NI߻ۺF#)*O 0PgI]+ۏ)~}iǁ -:wnH_8$;$Ww6k;^⤢,#&N{fn&rf(zz\ko*f{H;vZK_ٱ2B(D+V nܰA$r4j Δs-h|>OL \ߴgL?j?ŝӮ?*3Y]?Q2D<  r!`K 8J8HnEJ!<2(F3oO=[WgL`0lD_ys }3;Cyc՟xr*_wQMlǀqsTG)\R͜n[riߒNg:zOMo+P)]ENOvtuO)@F`5 ZƧ|4(ٍ]{B3IJUc`D9} fW6G%VIMP]6YuߏUSp{>Z'&U׳pUfP=O}lk5ЖɻZ AV:bMPCJGG-tU4,xl߹3i]Mdl%LEA-^|F7ljp59~={M⋅B{4nktD*}^!kL#54v jEc1^"HAq;HD|BG#PN& rt]KXnRPq0$еLkHk e0ѷKuve1RpAR5Rv  Zi>ފE'NC_%zO,H)^6a >8836eh6'$8$eBܰX Couf&CD4Ѥ/L*0lFMG(B,Jהs]]nZ0AiRثqcH]yE:W A  qEr6 2x(7gݛ6p 7*|1ZϐXhV!k>cHDr4jl`ݿAҩ.!LDu1:]¯XMBP?;?vR_xP@c8` И¶5m%l{d w<䘃1 Ea!7ޓxfԈIh^[1Z\XkH]p{g勉F1%2nD%x BLJ(.ᖊ$JE  (aPYG.c)?u #0Kέ9r 5\MgMԽYG["̯w0[ R?Wp‚Zra-^ۿὁ봾uV a5gBI)8F K(albqJBl:>Ɠr P3^#g;~͐z5Ϯf$}9%"2I~z}.<ؑn%Igk|#}3:HJJp2&r]A$=b_<1mE$; ZIu3'3sVk;-Ppq *lU$}Ia/{/vө|^%WTi`뫕e^(|ѷ믮EDd*kD.XL翹{P(]H}-*@>t>>.o7RqޫO Gm.X:ۮ%ģwbUR(H ʴV>X)/#~+WN:PC$o* 7Rb^iKJxH}Cjp5YG7Qofφζ3eTF$yG[*|z kiFyTƄ1%~ƧJ]qYM'Nܿ#2 Ft5jɧf̙0sV^BMcXO R,nG|b5:tuJS.z!PQO[‰@C8H<>2y!KȯjCn#1PRF~@KNOi!*m6lDմY-K7 VUq^xH}s@Y⸣ۀ ޼ai[Ocg]5xNJ$v17p-ˇck{܄y!~; qvF4jh,[7DR qLYyJ}GN''AU37s/K:r:"oSCG`]آ `ò;^K&Xi4=+OK̻z0)Mعv|6H GЇGn̒QtErxdx֮ R5jhw T,}>jƞg @vPZLq%,]VFLH8O#Dyӭ%|/aI,lH6Ip˱Fa2\6TA .%=8̱ g)~C'U(+:69"V²] )Ľ6 uB$m)j4LM\aZj{ ?pR"]ρüb4:M/TI7.D̅nr|)cה=d7 IҚra+]1m"4͐5~u{—f6j|3FMeM<;KIf!2?d[%LLԯ "OrUo,..7m8ECǵL1ZkgUvx0 |m]6R?|L࡞tK (Ȼs34V>V,l'dHDP!dlyԶÙ1s/?2jjA[ ߟ{T|ꄕ@>|?s}GOyw$df R*={kE5^tY'm{ p\8 I f^ވkg:WF] 1o+q|}koKa~{ϓF*`fDd" IDAT:WS3YNp#jM AiFB5/EN+ȃʔKx[ ݽMe~G؃sR/({[ea-C-W|%<6afwLoCNUauw2YnL+\8^TԜyfnÓ3?lƌ2>:D*J!Or5lDe8{˸˕Gn%*}#}{v#|s4-;TQC7I6+^Gq3EUq_ۙzF U@P:x3/QM`,FN8ut6 @d{;OК:| c8l|gcU=?rۜ5]ڶP^Z<U,0@>=2&V1-^0PPX©J.,Սۯ~y*ށCgs]=#wa It{<-仠Sr۬ 7rZ7O7]^[#E‹YG ZvWt#׶W-UMn=M0\ɜDAb1RY=ӻoMQG{W&;D SYQO]rC3w/77o)kM="p~&Ě'fƽƓ'cGؼܜVՍw6Tei>ѹW3UyWx)/M2n}zB}U;j^wO] DOk/Lٮ} SqҪ!.`LEz2pQFj1^d͋sC:f^XZz8liZ`CF.^/Z|:1W.DPi6n,:̵W&-HdNWov?<^hwo {zsյmFۚɜqs كr1^۵4}i%6Ǽ7ح(g@XD Xdl.>/AqǨЁԴFǍ~8Z~_a^nk"?զ*+oێapM>u5IyP9~J&_~MK;XiQsC© 9:!I _]'{5y\9Y'( Mr4R ;s-]F᥯blbL{+Fm:},,ʹiC("JuY ٞ0ܰq\$D"YOQ0"Bvf2(F3oO=[WgLFɹ`0lD_y=3n ! CFUf]U[ȉiCl)Wg ˳?FVX6*rJ0%kLG[t /[;/DK?ט:zB=QvP3ю#k~3hL_k`:e֔={@h&>Xֽ*>` n{,9^}XU3'7B1wpgenq~?VE\Ni5j"llZ͜E7G/Ʀq,:ut`Ѵ:m_p _gL[q&*1P@ C[_9xI н4C֬m)REwmYzj#v=;Eox"@i(u= :E6AOR&c0]L!Y"[gS c=mPRbjQ ] 5G"9K8ΝIڜuo 깼>+*<,A VTZԒyU"e%=UxY|qíT7yŲw.P(r|>_F<9I +, '.7>.*aI:t-H `8 7v N.>\Yw}e.sds*w#펑 ҬY.dq,ouM?q(6tIn4%sbc*(x)t88f`9}vM=rd:MRuo{~W Ȱ''Fz}.<ؑ]4U3ԯL[Id[i٭~B2'X{?D/xwV TI__UJJ$C[ƌ{͕>Y'cł;'dFzћqЋV'=IwPgNf%|QyG)  w[ T^;4(zL [ T{ij{j㼫/WU%|zif뫕e^(CS믮EDd*k%4{vvy2;'>H6OOTR!e-EƶBC/Db㭛OL JAj/w?*K ]S*̻Ţ/CFq Gh,e&=PXiN ]@,5TQ[1%TGo %Wrlމ%WI ضT8PVG+?u/=r5QtouX4vT nT ļ܇⯕4."+5x)RC\͐tGvg(a$|mG=2ry3|،9yڪCK(y s,#P iALc%A~:tօ- 0Z2JcԤYyZbՃd4VNm]εøA1>'8R>#B:U H"Aq\PO:Uȥ ~D9y+UIx{vRs_tA%OjX-O'HkdQ$BPgs\砇=t i>cui>Tğ#v;[e2l3)\M܉}Wgy\! tY'm߾ȭ]X}-4Rk6#"C[(ePObٻ8Sƨ8ygpL:^0Xn3d+Zn񘷕8Ƃ%0hkl=tݹj2p"&QOn(HںeiyPX}Qv#c̏{p.68ZCB[Zmp@-eB20a□+03G;!0e:;m7 O.I/*ajX mInO/EMԢ8/v=#o* |}(`&0ug o'xUX~pۅ t2@k `:Ǝw6Va#O)Q5>m eAU`_+uȸWZPx@Ac >+q zLpPW7nE{)w T{*x&F~hLrmNQuF\{!t@-Liͼ*Ħd&P[+۰$q_hQ9xXjze<_{}StP.Z)~W%úa4]9Y:՜$zzwߔ4ٍա7< 9).QM3.:v%w&0+ţR?徇g<^nnR֚*c\~~?[ߥ'^ejygј>,O,?X:}>_0iNg3LmKpXb뛂y3M:2HEqkz"w7/1=\o{g`iͺ7mⰥi~5x8j6DF]}͉9)169lݒY ?}u8kSFMZ/8 !&x-вp=~ɫkA#Z.59@\1Ack/i$:䱸I*\|Zr`[Oia/O/|<:b]pʿCS7Eiio} ynn߻]BN8\rT7m;Ɔ?7){9c[h$A)RkeQ6ů/8cEG d脸&u4|umK;,#&N{fn&rf(zz\koo3Խfh~i3Ÿ'Kroڳ{pP&y\Vj*36j7쎝.~W{vl1 P6=(zFĈܶ#hϧ ((i`ِp.56-y)ch4skuUz.Di* c)F?;3,0AUUtUjn϶\/g ˳?FXYPWˤ\Ipe7z_y MmXXr/`JL HT ;7")|kWvP3ю#a~3hL_k`:e֔={@h&>Xֽ*>` S{,9^}XU3'7B1wpgenq~?VE\Ni5j"llZ͜E7G/Ʀq,:ut`Ѵ:m_p _gL[q&*1P@ C[_9xI н4C֬m)REwmYzj#v=;Eox"@iH]UjGfP=O}lk5ЖɻZ _Xy?Kvla6GCmjVJLm=:jaU$gcߧϝIڜuopwzOOϼe6^{Ad> S7qb//+~g [B+xnATa 2n`WҢ[J<"H( Bb BDaWIBvD578pcĥ[TE:L:I:t `8 _!aiۅ 1KX^3oŠ;G#ЪU?aQL8 +Y , a ѪU JYĿr;.?q(6"Ү~5!Ӕ J1LPD\R:pqsr>b;xƦl2pwͦ\^sBRvL+a ݶg&CD4ѤƂI]X& Ԩ0|zWwaQ\]L,U QN#DET,(Q%%"cPc+Dc[#x IDAT e Fɳs;{92ެvAAwV3q5r9|QP%STZNUiBo^ {RF Â%lB^%Г\ R(bP,Z("8yNqELN_FĂS璶%ή^ݬҊ)׋+Fܘ=-1G'mi4&7A JH$T!,LEZ) 'N9@Mat;)?D[rе:vp@_ 58UvAL5QXӺ#qE+hڪw/AI*(Me=Y_VGN+h=S5D @.,Ʊ` <@cK^d nWK ,8*j&xR[VBy{/_pcHG :m]50M`tk(MFLB$tvղG?Å>=;0Qd4l7y¦E;V-qc|bh͋8q\$*N;;U =~'RQ5/cʼӕ҆zpsmֲ?{Yk)t{j_+ȿf]k^رr4c="*W*nL 2Ҟ ~ (}3ĕR$?% 0]/~2JYL=wbT k0`4:ưN~\V}U_u0y!Kf@NTf{ Na;6Z_*!:vUQT.+ͻ}RƘ.!(K|򦰗-87=qN4JR.e2ag](gL(6JT0.J3PKNKK6}Ii|@63xle~הN>=͸ŨQ`BM B,Yÿ̶߲ &ONM=592Ιp>UӾɫ6ncyOb@xj- W6eVN1۱{²ƚ׈Ǎl[3GcԳΦى:fH&'O7Q 17OG}C^{qg!}]gU[Oςu!*1pq.|ThI_={ַ Z`uӝ3V"SbN囖K u:jA'кd] ;8+c*>ƥF뢄I1#O)=T:?w* t}w+]|ER":֫|^ a۶Z 3NYrZ,Is:K_>[͝\c"b"os;4:*BՀ#i˺Oˉ柶.nZ&B8{x3v'ғ1MFNдmE29A8!>G= o  I/KX-^gԄ\&D^6*eMvҚp]2Syskѽ>U?+̡_ v\?pKm4b̸fjp߰=L L?|,>\F}ϞuQh8NّN&꟠Tm܄trîV<0166-p`Qҋd槣ޝ2 .42.ϊq6< i6DzuoO+oM7.R <ˊ#8Ug]<_j\};vyЯ R 6jPN=mz}'ӶlَcLe/T- \Dȭ:jm/"Uj|0 rzpuP>r>MꨝXr5$;֭I?Idf Z)WeN6֘vXP> X=~SqUKH.z`9"rDPCuM6:9xi3lIӃbZyWӯa~ ך#!t )e&&ۀɣ_0=NOs$5{EƬ o34a V )Le"nd ,2kc5}6F8~ mT8:"}iXB@ H$UNٯ،#$USʮ28F8_qV۟-rҮ65fŮeq^5V*vl{$r d\#>Kݩd8^"Ps5P~ǜMUC"H$*?ʹy"w&T֮^?d{}bלsw:3ADe7gpյ*e帎Ћtz|ٯoUMq-Xg1l#ܮʼ 9?vyC0#Cf/Y-v^W;s,#_i Klumu=/GPI[Nen6zW3U*$wqP9zA u|whw2NS)L*/օJk3s7Uj^|3 З_eɗJZ *^o^LˊߺG(𑉓{'zG:Dp!GJ]٪ypAMŕB3<P}s;%prB_S.$q@ն r{喖3ugX3OP1y9znyLI}#(J>qF$*MWٿzz.m0Vti2n™ q]pe}_ƇD.O*eV?77S ~YfpyLlb^v'#I3}ڎdv{ 2/`u1ICǟkZۡK\qazy=Oh q#)sޔ1&a oίz5r o?pRf͛RjG!ܰo;ݛuaJ AOT>Ǯe|y~TG<{[ԧ&=8ՠZ'S&O?tAn!s8_'cg%iTJX h4{RUNQE&Qgʢ}&6cĻVE]>4f ?k޽Q 3o(=cק~ڌN \қǻ>ssӼg䉐n\F $,3|JgXĝ=x"q6$ox82M#ۤ^Ӷߐ sic*dcm"&k(PEF\[:B#UlX| A,Ɋ:zn4jY $Wk~ t Md^ӱStKY \6!Iwo$җ&o6\߸:H;c[oӇ- ܣ3N_4zY=W/JƫajԬ|rռMm4ȞFwUan;Ӧ㴨{O/ 4w;-Ji%͆n/E,iy/>Y*\ؘzJfX҂S "wp>QrwBN8tG]bM}2%'R'{17[wm>")Zd/~~Fӹ#c͈O~1{LZBnM\`;: l_}v۰p=j6' Dž+/^)IGNh¶'5wؓg͍]-+.C-TSQzi[ǣLi ;3"*!Ew6dqY;Rm LT<ݹmm;볒J4v*"D,[pTK2L$IRrPu!H-<, AQ-;zh8S@OlI7r߃uebmŏ)ڬ ~ qѕLcҡ(~浣wn[2n|' h()w*XI_'47/=x?)}t]aAa6!I.AY)1c(PD-yqj%m9Kй]Yk7,\R,m\1ti9*$%mK35i (BGPBB&m서E n Gm'b=26$U/WQŅB٨\X ~v6^/ n-_rZtPYӧԻg'\|4b8Lf#W8&O4({Q#e(6!x Tfc-jѧc[nȾ *, V@.2e9(Bεfj ]h_iLkndFNQ.u`[c] E6/_D0q>]F,FjZխ+=hB*(elm'PZ+¶w x/8e^~ %Ț# !f=! H(-j Àt,Y2=?xgV"^"]g*.j(9 [NʣN'ĖR.ݫ KqϽ~>T̓=SKcD$殘Wcai: }81ғs\T<̘~} y.Zsqh2 ip1YɄ)p dOXO[5=FZC G-+i w. ߧ(ε203*IQTP|B*5c dK'~QZK8їS˞V*T.>'Cs@n^ĉ"iUIv9;Kmsޱ{(ļn5{rs9Zٹj(s?yė值_p9Zy+ ,ڬeʥ6S&q*Wqͺ ͽc|Yi_ %{(X b^2n6_{k4tI> o<~2?kJ 'hfb(0!&!_JSvoWfBh)! gp"gUv9N3[8ؒOw>i%?bvb/äġGh̔])zlNȮqYT:i ɇt[u熷Qyr@ IDATe5%5'ٶz'f8Z;ƊgB#Us'Y1PLoÔCijeb,,-! @u- 㬌uf4&gޯ"&]ƌ3V,.y{Bu\UxHYqYؓtGO},|ѷ;m9DDnv| i2uT. Fv\uu)?m<]nܴLp4g(;w&n#RmhZyZkv"NŐIc#7؀դ,o3jˆvL[wf"/O2x;iMXF̎ۇ.[9^FOyH?*蚆=gaM28 ~[h9Dŀ5ݐ量%\܇;8AD]+4Hc`YIy:uڎ"c/(Td!bll8mZu9QfS/ N{Yt\{g8V8TA)YjӖgYqd3*,ң'\oǮ0o\dZ }fO`^ɴ-[r.yfNUƒ:M2@8e|W &y_=QP3[5,qZz0*N=Q?*%I{p'B9O&(;(VUW"EPC 5PC 5=蔏AK8ydJ94)?UJP=9&KF-(|}/T8SC 5Fq! T&T2LOEJyjj|{I,+Wa\Ka xPC 5PC 5TB"RsRD9r9ḜdU5!䶟-$S 5PC 5P&sc*$Ae( s>a N|_CXiOmY5hP*O HU8h4J(H ĩxl:6kKwǺU261,l1ڮ:4jX=C'}oz⪖\6rD删>~mtrfx>~SKXz4:"4:"?~ޱQ G$֝kioQ #BybLuL&N- d<^G ȓjup3] Nk|EpeOKP2oݩ-ζ6$w]?2# AQv+!OZX֊1$IʩZjhYE4BVlW+B<}_µH] Ƞ%pGI 6FhsW4LC& t^1?.Cی9i}؂u>q SezAC ژ%yMgiMQqJ8Ȧ5+V,sUZ.|~#=Qݩd8^"P5P~Ǽ2_qZɠ- aVyRG*qF$*MWٿzz.m0Vti2n™ q]pe}_ƇD.O*eV?77S ~YfpyLlb^v'#I3}ڎdv{ 2/`u1ICǟkZۡK\qazy=Oh q#)sޔ1&a oίz5rl o?pRf͛RjG!ܰo;ݛuaJ nS/ϱk7 >k?6m+-heh[z}mE{'恖LdO ?БKy~zg]5ޞ8^"Q(:ɋ$X,պ#"6_n._aMRUtMgei^3HMүh䔅!yx&q~m9H8;&qYe起Ycm"&k(O OD?.w"U؈kv_gP궮|XuGݨMo$"6p_]?6jO8aٸNa{|:vtџn)^&՛;â>#BA5m>FZG XQ}g `<4y%9a{rbYܢkrVyթ ljk:f39z@p @[,_#7c} s 2O hV!Iר19K/_|,~ %mctظ^Ì/_LѻsDZ;8qf*Q@ C[wZ9U]sd[,"ߏhl}ޭ; ]gB)"hPi'ޫ{@0TKx7.FojlKj`PC -A}l+ԉn-YFB.-z}IǸf]]Uo]ʻw;iCk敧qjO2l"St.N,wCR2p\6_9xPkqMBZfQ\U*,x$>Fmhro 6c,?ls]_tvߞDбU (4bX2e@FbȬue)z\KLf7/ޟ)mGCHkHL#LO~~.9.> [b-O؋ zx8':QN74l枕9sk+El>X6RfŒއ$e77A@AH5&S.~3= dʝ 0Vk!2MX^M݃r7A/f.AvV Et-k yqj%m9Kй]Yk7,}\R,m\1ti9*mi4@GG:~6 U/1ZmuBFpq@뚪 0Bh* bQTw*('2ȉr5Q  x-R3Qe>!ZWl; /V r]hªu{\Li݄#< ~Z?=Z%(IWׂaלnExeݜ%E= Dۓ|C:j&N9PTq`;HH|YG4I˕#֙(RA =!V&7n-_rZtPYӧԻg'\|4b8Lf#W8&O4({Q#e5;8-!x+d zk)-Ʊؖ;[^WJ Rfa LQsಜ!oX e5^4vۯ45N|e}#=҈ajk:ugr."/" cPRM]###FuﻏZrATQ򽎭dJk%SVNR^G]SGB:UUFgnh.@ PFc4ޞ,Y2+[w"mO')ϓ}>N-y r^XXV^ F3|b,^* '$7wż-pW KvH(p S{}fMÌygR'5޼f$&OWWGir9Bb cRj&nE??c8'xoWR~ڪ sI&E03*IQTP|Bߘ},/L|iZKԜn`2|`jyJWeܒ瓖gh͋8q\$*N;;U m=~'RQ5/ycʼӕ҆zpsmֲ?{Yk)t{j_+ȿf]k^رr4c=uETr1TT }7FKe74Sץ=I*@PNjfډ+"YEI~K 30]/~2JYL=UwbT k0`4:ưN~\V}UJr[;/drӌ߶މl/y{),>{GCj|-G;}o8%yQL\ΉʅoDKUbY̋^Z'FIʥ,X&x{ #4gSInI$a D"X,@"PޥY-< >{k4tI> o<~2?kJ 'hfb(0!&y]6:AKϬ)io;+@\y}G!3M8P*S; BQY!~WnŠLٴ1;aN9m#eQWLx!@m=56%=Bc䇠-\4}OCQ:}mwbcz*[M^y?w{~%,-! @u- 㬌uf4&gޯ"&]ƌ3V]SFܑxO{_\+q0й^O۶-JLw"eMgaO=]Y>Gj}5 Q WFv\uu)?m<]nܴLp4g(;w&n#RmhZyZkv"NŐIc#7؀դ,o3jˆvL[wf"/O2x;iMXF̎ۇ.[9^ {>kMoӉ%8 vYG4~ fM琩量%\܇;8[ ix{*oQT"\qtr˕+W&L8xW(eyT2c)EKŵK: nKb Z:V8TAF.R <ˊ#8Ug]<_j\};vyЯ ( 6jPN=mٿo+fEsɴ-[K%@Sv$Qd\ycn"ٕzEqs2>x+_:3U 5r0u=#c%u5X3gʢ?/ IDATڴ{E4C_[UkOhkِY;ί>Q"E~ȹZ8&J3N*]nzL^_VgrtpY^*[_eIOYNQ2%|'eRE /+~6G&NَW}TbyÅ)vmdR6W"MϤxMCm@XWLbB3 }M![U.dF{>[Zԝqb1%ˢO*5hue:k #7]Vd>{빈PO XqUȠ g*@u1 |9 r>Y}l|/:L-eۯ32sX09ty[7xrLƎ\&i;jJjcĒuJRp׶kD.i\$%^XehklV,qٟ [#nW|̢ >]ߢy収yS269~c23/Ju7oJrþwoHE*e60^*tc2uo>`h^*#n-O/=2֦cߑC]騊·r6\>S/Axjۊ0SO.-9gj4H}${6oykR"): @oeD6\"H$Ah400II$R1|>}&6cĻVE]>4f ?k޽Q 3o(=cק~ڌ6'T9cY*\ؘzJfX҂S "wp>QrwBN8tG]bM}2%'R'{17[wm>")Zd/~~Fӹ#c͈O~1{LZBnM\`;: l_}v۰p=j6' Dž+Sj2mOj'ϚZ6!W]Z *y"@ݛG‹v6gE?pwܶ×t@η~X4SQ\!E7hkmYATJg]]0.&;qSGQ 9F8J/ad R&D5h4BK, AQ-;zh8S@OlI7r߃uebm&AkyF(*LѮz{1i!˻_Gxj ]L 1lŢ!=Rhv;ṧ!7!9z@p @[,_#c^f `\aNRA2Y1:5]7X0'q勯88ϑ~s1wY嫔)zwH+ptg:ΘLE0: ahkN+g*#w>70ulޒPq>»o#1ZL(WT6mJ=e{bf~Sx@_Ix7.FojlKj`PC -A}l+ԉn-Y&(*bXAǴ-9 $lh#m87A֭S@XzmۓX[lGi1YWW-,EU{؀ASլԜls]Txnk@@0jP39ZpB,=Ȩ/ePNA%TE)22Q>@h2Cf0H,# 2q.ΰ&Y>Fd(HYbD AVU`;ղ9A5 6?() G')stAÖ{9|`Y)38AFb0%|mF̈́ 2ެvie ;+ָ͙L> h()w*XI*4cZ]݃r7A/f.dtAvV EUK EZ kzZ&'/#obsI[tngWn i”\E{E҄kf6/9 **PTÄ9sE<$0zާ"3Q91 Y~2.x?x`~ʀqsPBM9ی8lSvB RBq4nk?S~mֽZdVC%I@Lid!`Ҷ{qRiDV#>SfÞH?ZYo,f~uzoo &*EPs4#D%r8O9TGeɶKoi-G["-N8p e` 亶_re>y? u:U=yE^lɬUomjpfq` 2(%/8l,HV\ KVNR{,w"]:w{`HS5U]5QT*Id,3qTVLihrp)$w?UdG c_[1xl6"L,N#e)q3JcA5-&۞8>).2DJlb@ȿLY\r EA]ٕͷ7z L9.0hǪU*MJ i@7MIr^ss 1+X3os2SDեgKqȕc.|A ĬޡfZ|!TRP\T-hP*7 EQw:gp%O[X.-(CCGPN _CSUWg*/ T}K qe1J?>`ަdኒɁh^ 3w*Ұe9.L3'Xy?gܨ/!O7\GK uFu tE!p:j![rTxr:<@ذlNy ku]wa_d(%9D2 11(ծjGl 'vJBr<ꋈK?-B8թó+摉-,uW3 Kvc_GQDG_w/~_eO}3RV". %4+JP̩wf8yQJ(>^Ye_u旘Qv&7*W>AeytP']9N5dy-kŎ[J\h*wS/ޖ*"q1 (8@pQ^ëUwJ\Xv@u(IHH%PRNl^8aol 9Hŀ|rMO$֎qrHVxˋO$-30[ZUz;PmMN(}^4CYVzߝ5W^gB>rbIeoAO˗~/hcb9^!z޿ W_z$[EefJw.wu@߼:Xo@L^s ѫ<GjI . rOSN˟<}\9UlxNN "̤̍k@鶩gޖB 'v' _yB=6KC꬐?oqbkc4#Ր\0\eT@kaCĨQauk͉~Z`8fzq0qhc4vD{AЧ*bVȘȾ rԊy lvŌ-ik6وc{`*ȢհA~I٭Wib#lYS}g.snCdJ2S.:~@!^zhm[`:Di{'tb|EM-xߚӅ&6'ERs`xHۺXZbTRqQDۉ>ri;-`L :4ઢ9z:>xz6ˠt6>z;WE. >qV>p2E!M( _BvoHc)¶/IkVqrfH MmQf'PTDM4.hY`)(`r1` ~\ ( @GH~,(ےɩ`"b 0@Զ*r4_6>c_yj0`{DXf`rygO0vƗ(jȑ_O| L@-Mԝ,:W*r9I*KmON0zM=dM9p1jd;yyM>-|≈߳R6~B%DA/J[)mv9oLXЬU6t~=8 9"_~~>>3v\]{:ONSzA/^]pA`ęb,mRWJx+JujL<9en+CF95Y]D|F,کpcբ?yoqPA֏-~Hk66?cɽ@XD棯NJ=1ߵ]8?OyQ{􌇼59Rܘ>6gܺ{Kyyw~qN77i2ԉmqxu9QBhagv-m>8ߩեm샂h.w&]G &naڶ$=v3fZ!4:}YXiSC"Ilqf:Z{A(?$AB6ݶ={`WRm1 kiO rx!>,!^=Dcڒ-e,i Oc2vv#SᇧW+Zh^+vMPT宁 IDATT(EaeiRYh' ERW,eX.]s+t9u׹GQy=RmlH=_ ˖;IibIMU1]RL+*L+b㽓y?ߗƆ93(Z\s4㪖g>A$`;zkz{N#FT?'E(<\٘]U\4zCsz#}I&(l+w²ro`T]NY<,t(cNJI…oۦŜ]kTC4ƺ9o^Y]Oҷwk!8s-%jeҭ9vn5\5)˽Z7~hb*qP@ C7htH碻xX $/~յԎr|m?o@Q[9%/{~זXQ-po'PP,Æe-u'SKA">.K~#Qja XiZ' :; \ŵv`05E@)M" Qv@wM1>b+ ܘ|Ut9r "%w8+l#ۣo 35r ~]jX`eTEjzlHx+Kg4%Im:4gYfjgOC*2>eTEyF;8$1;eB$JZ6HtQ)RC鿶v[sD%8A'olƹ˻\"9.T^H'"B|9B9 5M9 ږmFUmpP`!CIMj8H)6^-fEW\w^py:IHСZXC{jܳUkmLۍeV.LȢJ5ue6RRNSrYl62>V(u*U1HTGeɶKoi-G["-N(qr ,uY\׶GxIX[F?X?ѴNcXδS~A<!͐:*Jce$pPJ^qBY*í$(L k8IQu~c2ѵsywK4PSYUCEHɮ~9qlq) \NFv9c [Nk%ɔ&׊ w>Ϛ`t{s# E6G. Zx Pzc! zCDsGuHB"R,2@]e!UmUhKҀ,o?8 3gW+wgt]\c--~C{͵kki\\*0MeV*2b)b0czA@F,U=\;TCxTp*IST'UP5taKq7˥y`t7)U=khqzREeciA><adzn_i ȼ̝DRLΕsƍ\p|.} @PgTaMWJ陨qGï%K'c ! 攷Ё]u68EvRsO$RYH C} />a+R[q0{t,xp%s7<>3O 9}P,{u?Jab g}Bҫ]XQDKߗqkg_}L 4W.)+g]#N^ʷ_GW]%fԡǍ1xiF}Pl/IWg*zSj~+Y|yut~=ڼ]ԋJH\ t;8_2\yŝ1)P~2Ja <Wf?N.C+%R1 \SIc\f7 ÄJ ]J=|qmɩu?~\z(kJ\ج{],K3Ib9.e%^wPZ=9 |TjUY"POX"]qOMOGHrq\Nl/Rd"u?s}sb`x3GLKK(#gGv&22 Xخ~Zw9(/3c399ԕ JYcT;_5SGvur y.,O0sd}@XqW7{ ۫f!&BoBٓ"90<$|m]NDu-zx 1WRB]IFm' Xgă12DӀD]wt:}flEA:tm|lv\$}" ;|dԍ=\}.CQX62'6‘G=Sm_Z]95 l-w ̐(x覵4ͱEۅ-'?sI׮=`ٲ` 9Vjɦ"'?߼\U cٸt$,~!IPCeR/)p:8Һ"OG֩c2i^zKI{}ްgyߘ|](J:XHȸaXm]{uIᮦ_]*B7̕I+_3<ԃM7g)eIAm/prH"? X!gqIbks߁@Th :ΜԽ3?Tٳlَ,Eq#RIE ҩ)P*(GQ0}s-Rٙe~]a?8mp'kG:W'?lrѢߋCY8NɄMB]WhGL2PG-m*4uLA0` BEQ#bl6b(ł &3wH iǕG0 Q KŠw(m9TqƀB(ƒa7ˤ‚ԙ;VHHmb0`?*(œt՗k[oVQ-kKb}*}5JEj𕀐X#%]C>ּR)˩ OT LRWSP3Ә"6>WlM Sq[Hh爑go gMdn00gZKr pڻo k9o횔6yWm8|ŗs̊_.6& \emu%S _V}t=J2nZaք׹g]vqm>>_^D3ܴ<2lᆭ;dIXW?V/ [z,U!IVbF_z\tw&rS.Pl6JBE+`X*(m*ǐ^$y}irԑz}\/6^ҘfF^:l[VI񩰖i*c1`Pٷc1 !c=EYxZS'y0'lH Y(Bz" ބ8v*ݣ;Rns#}[ Nح I8±_cݐYakRvAɗ[NN(r8ryTAC>anm͉K?:`Gz,c! Orcv#@{}[g!Z=΅Hw76sMG: XXqz:(D|MՐ2ƺOE[^#l'64ټUyؐXr86Mͬ$ԯf_xo"`=|0\ϼ$lN_eٺO&XiK5DqW(Py./*Jm]t3Tذߠl {pn.kqwoãcrml2rTL;\ iZmN⼍V_1tn9S||B+JDn OH 4v:iԨ&BL״G١'dt0I\ti٪%,NF S$d >;w"cWߢHw;xu֫}vq/μ{lfnƗR~C<]S¬Sc e)s[4ʩJW2kUR"[NjepXu.6a:M/vwLT-w Rb6xwUvcCĈA{y3#6mf2orF$E_@%_Ξu~x]+v|Q"w6-ȴ =%ʸؽNS ]5͙RMw/W 461:rV azMs0~>Q >;H<'[ȫs缹yMNnûeůat@ j^ڱWn 6fuZNDi:j5at ˗׶ iE3fZ!4:}YXiSC"Ilqf:Z{l0p|bזM Bgmϲ>ؕc[Lv|F55 _4!cg72~xzo%c(3cgvvuGxF=߬s"M;6;Y45C,|X"oBz1{6+ژwĩ!>-n,M{QERz? OXQֳ`DT=-nWM;ƗrZ?—':*fl+7JYTPjTJN' !(b]n=$9qߡVr:{s׏:r<{ؐz H=BA! 2ݐ{w :us嫂J3\n1 is$Y(˘ӈJ/ as fPyXo`"d{7cӼ0PXyp' W6&h{e]:FbcYzNo/# ؄G.@чm@XV{b`,gޠܩ?+ǔeI)IP c۴UP+STu-UBiР]N}iHzeo};;s0̡3Oz5W)EtЧ5qweqiD,%nTi`,F5Ҕ nonT³OvǴY}fҭ됄D$Y(dqG C($\&g% ˛$9t ʬQkw/ޗnh--Uǫ`R2`̯5o*l)zRc~54U.L._}[kRI,]@Ec_uĴAC8s@>^x}^T\ۻE ]TLl&d|)Q+J˰@߲Y+s3 Ez_TqʶDvZU> IDATN(Jo"IR%NbKq7˥y`t7)U=khʀqzREeciA>aSNb\Qv2ҿ+2\~cJbuT<_TƟ*yj4ÌFC(fܑ]boRaHcê<Ny"W~Z鳅2eqޫSgWBM[Xn?8+f^2:8=lۧP%J^IX;gbD\')4+JPlwf8yQJ(>^Ye_ujK硤r}jj7`B*#ЁuoYP)qm^Oco/k!7^>g2NC/}6]6#|jky٨-t)Qo$Jkfe62X x>SM#Z85~/Wy;j;<0| (x."&2+FZw:HbaJ^ ]&F:ts查{t_oN1Mgh OUĬ1}OM73m( @[ӤQ'["tpiM;z:>xz6ˠ®kcsU g=n'n[t2ݔ%wot0<?"lʩL`nke'gDC7o}/k3\u.=#k9Èǟ9||}kמ\YMͻfN~y@Ʋq6ȑ]-uGM^g.g'ɎݖLΊܳe ^s*^cN u=Xbߒ۞_+b|!1wٯ#Y':8 p2I Bش+#NFXuJ:Ǝûȓ,j/ߦmGs&޼c8::?ו E[&M߫Wt)i,o01g)JҳHFE?I(J^p6,QR48sRz`:v. rV G5!q y{._ğ={j˖yU󪤬M*y0ҤnjPOL{3`w pMkNEZ~/fc9c7<Ei͟E'BEh)y&OLb` 0` u#D zώbGJT*C֩gK$eR1`'eL#Tp[20Qqg)JPX,/ 0` LT_(?4zL |!+:s]q~zI]6RuN=Ɋz*NRDQ*^=X2 NO5!n P 5mwD(zvh7zf6 oR/]Z<l 4ȴs; "1G낹=ώĝHXշh=>^]pA`ęb,mRWJx+JujL<9en+CF95Y >v#scԽxy襻 $XæzFq2Ƨ65-[hڧ)J*k;_-pICGf"|cW]kg߲$  .s#)JUZI[kK&RnR vԹ0UGBjMW9E&M~gӻI ?^4 }TH=*&E''D?@@o,sR xzq] ~EOu5$C;O<#v>84BQ|~sܻΏ N/6JkW_Zʱc?s''`nʼnb7QaWwԋm;t"\պ7G+p^64zWckޗ#PWG)o>(K\٨ٹ 1wMG;LJ*:1"yО)d^̈M'LƛD׹Zi+uPA@*SwuEٴ 6H(c:M.0vu״7g.J 7ݽ\!D/ĀuKg[q,[f҆ }7ݪVrF5pw 񜔛[woi<"0I7M:q-n35*WH҃c- T9J[|pSKb7Ѻ]f-'4v50k^E ͬV}4ʩJ$ظg^u>=p#ٍL^[hg !٫](E4NkЪuۖiVc+UR{ӈ}d^&O,* )h:Խ蝿ڽd=Qx.<{.⋦&&G'i̵?qieS a9L^_s+t9u׹Gs+[1'pm̟قCC)b ;!ܙAZt(Õ ^ESs!C yl#Kt%}(X8s^y=~O,Q ;geС9)%  $cls JveWn00G_KTA ٧'w\qܷ3z8Ws5JO+k 4449py&u٨D)nfݫ'3Ԯ7jUmt`VBBӕSQV!к cuB 0eBdx6B.SI^~J+UPr5$epYQѪqo.m]~z-ʔ{_{IRmYԯUzi>{T\HfQ,:BoNo3cir\E}8rN}ar(JnڱMV&-G8)|vǦKϼM>TX,ojTzCŀJ{eqm)q( JiI$$I֦xnL>t٪JMwyyJ;^m7ry٨3<ATv<֭<1XUQ#ɳJp1N،swmDr]<F>fFPK%9{Y(s&Kv6{Q)B RBq4nk?S~mֽ3LidaM5(XPDIVt$Y SdBIB^#Z~[IWskۀM4S+0^7Uq6*\S9W@~՛N\Q0*Z&9N*Zcks5Uug۽[p0jpfq` 2(%/BlC#'\^llk@y<w.Vl8Qˇ"U#.ƒ|18N.'#`1-ʵdJCEkE;gMu@!3wѐGܭPd$;EbGdbpmhB~8HBX* UרS܃͍0*Zx Pzc! z$>3>Qv> "-ZB EP*69+1Y4$q@w6s 1󿬋5dQPP"aKmhѬ6?J+6h'.zQlyiٛU8]nty2Kh^O8)Ç \]NSٶPi: }Tڃ FNzڻO1I(E,$>0D5Yt3pEolMEX0lRz&jg8J?>`ަdኒɁ&j%J+ĩ!|Ȝo:tٛ* Ҟn54Ueys0{t, ٻΰ(&\3w%GAf3 r*bN 0(NQτYO1Y,QP@rڼ3WE}{wꪩ~}Ewܞ%0ZCkn<; Ǟ9tlD^YJɵvRgr<;)Dg?e9&.$-S_%B@&L.˫M:ǡ6gŸkI㺶s}T F@ڜ5!Tq:(lU8pG^G[oZE(Y}pMlo_68+1 ONR)ICY+mwL>͐#,^6p71%N 2-7yN)E^K{a.oJ,gQf ݝM-zxdnh:\"zr]{sΒN7WT7_AwI2NUƬ+bV 9٠,B8uNtdRJ|kh2m1i@QC 5PCzOH2m:lLu@)ڏ*s!zt"Ϣ"GoRiʓ]o*vPC,<~? TJ#])vmE%yL)PC 5PC 5Y X,h剢FTq d*SQHo:E 5PC 5Pb2 vTL:IIUjj;@8d2\^a\.ʖ'm;u˪F݄:TA(:p*2 ]5i4fz\{:LG#D@QPvo"SXbMu [v+nf T]70q*9ƴ-W'dbrJF䋟`?Sm\ӄ՗6]-q񐠀{%_P>lY`+PII׬\- rS]{V-ڿzQ-H10G eiW(h^R$OJMޜү%ɱivY~9I۳_[0ZBL>kTݳ#BrcؖA&W+.Y5i`C] Mck@[y$DߩuM/ez"BG;8ܼ>E0{H`jv _nDEHta6QuC#օ.I9K>Y_M"#_?Pk/dHUH>PrG(Poۑ%9`ܘ1]K _ӟh =/l%+;eͷCG~3S:dv>aӛ&?g%]Ծq*O&%jFA4,o˰CLq}|nRHH% gێB110(8?Mm7֙An=<q{<͞@?ysv36cGZ3yZ5xO:w"<~dF'RNџjNS K/ QȻsQ:׿v^7X+eₖ5E?nMGjV IDAT3P~`Ic3:6NG&xƤQʉZ}յ&~ըe#7.9Ԟկڴ3WickuZKL>d_m:qr͙ruY;WweiyzvG ka oOO< ^IIF?Vf{9esG^[MEM -y}tmJǨ9"@k)R/E! k1jJ-<ߴvZq4@*x5̫Tg:+0>h'ޔDo?o,A/t@Miv +~yZFVlfȑ]Z<l RYРGwd Z=#-|y,TJVomt'mJܚ:^N`:YYw$KJ?t)}uo?!;un;z*YBxzˬuScZ&-Y^J[i00Qz‘cɩGudV&J+,T?'QYMU)H>?叾*[_"v~]-v-/G$9nŝ&<]EE%Co+&VRNsR !{q1kJU=&H(x~I5e%cx&nm5܋%2Lro?/_FoS,^ z&̈́Ž'w_=nlجw=’'n.x}:g MQ~LG$7|:v.m|%yqOs=;LKci $|7qg\U=+ a6tk~OqQ)Iݘ|hVXb\/};{*^OLvx؋\yAc ]2^iz㦿O$e~N\VJ}mϢV(qbq̤=:mݐIt:qD̲FZ=ӨY}}r]مdB[]-pc}Ws-9h-f q+*G}- e4* V+nd=ŽcO$!˃^8'{|V{yL8 ;jqe}jyyJ31O{4;XNͭX<"o40N͆1C{}u+Iz(56T&'h5,`]KD.\@g;éŊ&ڮǴ1{suk;3fGEH}I}v,S*@^ߖ:~ CXpv/n7Ř( CW*">: rY; 4qש(L24KNL``Ceb [Vw0׶ic0kRTF{..JQN蹈FLc{N2~1&{{f.5'eB(Qڑ~--P4&@L̻̝usi9s\(-ʡ1-,FD~I'd΢Z<: 7jyY!:\^^Mh)|2%I& oFLYKEhLFCZ5%7梻]t3-IenȢ5jw{f`dkp{bԧRLͨi{81WLp?]hgI1tej5e8K5ع3)C;ekCkFm?ܨ&\\Q!2OaجoC7՗Vլ54~>*dZi[@A@Mu œ"N{U؅v4 B'řSݡ(Zol3ciR\bT`p3:džK<#^zJ Э×G #Jsr` c~\s$ WV2D yt` :&*=,l2^Ji}B^`fPubFܲ7um:*gۘIEmVԤߕg;Y֤ƴd(I^4x AV%`;xȧ[a#-BlO~˓quY!pq+gY)34Aw6v,tQ-рՆ &ē  eMMf|!v/(͠qRmʤ!2[/m7\hnUHV:"_go?)*p6>c3]r`[; `]CM䟍mzY0io `S9Cc|QKc1eka V5҅ioQA:CPKsP E1 RS)H;m4l)p\!k.B@.z#~ .×wvMzNޚ4Xh!p|ίSְkQ _ϼ ?]aʾ^_=3y@'^zo>j(߳`jcZKUEP[dYbiW{BaZi=)hLkLr#& !i;Oj#YŅ;_}2Q垝LtwAu06D4?&f<@>o۸qe:1}cFt˵gϚƵ|}Xl(s,8dJrc8(BZͮ ռ1d==bm2t-}M5X/)=:D"+Dc PzA# !8@j3ULцiYreRU* i@T4M8|H@#kѥ_ 71L,tT|BS+YhX~] 䋒bWO |oʡ኱ *43^~:y!0u4lȷ˄{2^>F5u|E,')BH?LVzpȍb>fl֮"֑YN3Z M w#^4t2o)Ŝ`q?:kW^)0Ljc\g'Tg8=|&.TPOEN|R( 63*NP,ʩqYE1.O}k¯F?Lݮ6.bkkן\fydOr2S֯s;Nw--_ZS,}gV^1ɓ؍Td_ӯSri`kvϚ|V+K?xt]d^Uq4Lxiw ?@\%$+ ?w CB@.(,0빨ʻX-5G'p,">G994 N<77Au۪ʁn*<|\z,iZ_tn3-ҰҠZȋ$b/.Z( y)VQbKc~ebT%,[70P(_(r D7t.zڬ?x.ZGrkb{qpeSgn i›cy\Bxηf~g˼(em˦r7Y~!c!yymqg.A lL\Y%nLT-4\@h)ݍ˦}/8g[\)˰u#zvwr xL jT (vb.+yctVОCFhZvw6]lzxdnh:\UT@uQABTk{Yɣs߽7Z/;v$[S*c1+5z܂IH0@7ַiLdN,;]v#|LV)~F:N![.V9zKDc,tBrv9l۶ކJd"}#WMZ¡M{8.޿at+P$4(4x6SkQM>NÂt9UH0n>IwyIRi;:״9,]s3 OgM&Qдڹn 'g6nC]:{0PX246oXzg: >phתӸuO6T*mŭ],ňAatёng{8f 7oۤ GOF_ۏp9gUQʅ~^}ۉv[*@J'US.ΩlR>H17nM4ID"lmm5y~K3FZxqGu1ɋJ u0t+ojT,sӳl_="=8xXmdGJE^h6Hز@1Nu9wPgϞ޲e{֗P8OG/9u *ͣ|5.amE-w 6)7{[Z-~\(F[#8㿦5C%mKm/ WڅҰ(F$ū`RZo.MM=fZ7 (jj *K-E'lb)+ qו'DTjTJV@gjFAyRt tEbE`OjjJy*oޑ1(tETN1PC 5PC 5~3(lw@&@QNq&,2I 5PC 5AZܨ)NI'UpRC 5 ԡ **Q/B:N4)R(jkDY `*⶝jS݁Lڰ[;Dvc79RC5NՉ`"f5p?~v;R۸ /mǻRyZ!A!A%S/H ,?$ Y5~5u[oVnM\ L&U&It: ` U$I𭓓bomΒشw;,$Rj`coyíy-BE hEI2ݳ#BVzx8kl&׶gUԓJ"j3l|UpqYΪIjh[#Q=,aOHLjP⿣,:*zMt~VUGKphďEr#*@Jm>0pOa(FW1G ]Vs}p6F IL& iN,M@DPHsT*H2flI~47f4{LR`'~*.7EwBw! 77 xu~6c_瓦;BU@۲&" VPP!G]?:SޛӲ#}æ7M%J}THuwЬhꦨ IN'ft:$0 qwr4mtI]]iМ\S{Ѐ1;zu֪{ҹ%3<):pJȌkΤ_a{ΎQ iY,҄J涓ܟ3է5F-炢c#^]VR2AR%^F6D3MqW;ŷVÁbrgzo}\ (-Ӡ¼MnnδF?p$5;ڹ++6>Hӳ>2fX Sx{}d OOJ5af6%,[>zn*m—Od]FwHrFyŘuOӎMGؚQ&Sa+RU2yԽF\O|wU퉉KND8z#{2Qu !b*|ʅC j ]9U*y˃m;.7Li,M&<sD& $ Aq)bnaj_n.sR ڣSa!{L6_T\[ `J .`P25˾ܼ\P &#/Yڡw?=`_P|zѶ)]/J}8ꪒWE%+)|@+S\p 1gtS%e١6]| AO8XBuc& 3]N|]|)]ݒscGQ)&>{7=o=CHxS,[ EB w]-TI zeNj{o\;ݼ :Xlrߤ'Wozb\&m'ƥ&ƥ*fx`ނ+v?v.DQh7kw߶#]͠ӉqjTe`?/uU{<\0̉)ƂVzm*,fK=WLBUogvaaRO֣7Ɖ0dy+>_wvDA"a;W2wɣ8N;u˺aەqRNUfF/[9[8o4dŨ=R&Wph MP̌P0pl`PH} a>A~KVҁ<γC#h0 qǵ^hI+ 1AEH'qUT"J??P׷euPr=U]i{ݶ~G+;歨 ?N1N(y{=[ rыyIleU*յ1=rl /Oq A:(bq Pleg0 09tsn]絥S:'}Eo3u[д{>">: rY; 4q/\iBbIDzqIF~inB) [V@3 ؠU2@ì?_ۦ5ЪIaWߍe_GzbtLiIsrVɳSwvٛVYHc-V zÿ IDATKr@E7dۻEu%~e 4nguQYRrL.f蚹7ܟmb[cSsD ohG2#t {B И4ļi[7k#e \94U9=qEרhϲYik9zk|[6܄yeÆpz{ 4ʔ^~'њ0n3mf-1Q@ mhj4G8vg s$)c!v>"x N,o6k;e>-zghFMسʼnʷerG;K٤7-S)o@m4tlY"U+ vLuYr=Uݽr{O"#th6dzS5z@W &M…t &r.T*}\V؃M|ۚp@U;8Ɲ_;[I"HR+`p86b  :iajY)ߧLXd 4g/Ҳ2\Ũz6'r:džKCڈ޲;Gz;tÈf\.X_)ל++ɭ\2]snY9fe C0iSZsW` 4("(>;SOFPU)L}]kcBߙ3v2r1ߋdI+J6:ںCG0i*eMhLK\DE'A@amU|ZnJ>r٢*&]^}䇼<9N@N;^o gbwƞ9KSoL/{ao B ohI@y2NoUv~?E dm3he2i2/};8^_&~K&xghnUHVkf?8 b8w9n%o4vB 946rˍ&LڛB)mF(ٶ Zֶ:0@h(!#TճF(x,ǀSu>*S5'&M'pQx*{i3dQDN(V_K2?yYhEm*dB6ap*FS*ƗVɲכNUd0-251x%~s45&9@C~84f [NWН?LrN&;E:YQddAs3 aݠ{(^EiV,V_bhB-=(L.*|: RT1Eⲧem+˕KU=0Q4uXR!NwõR=SxKJ \y٦^JmzZ%;pwE}Ӵ*ѹvyRs2Sz 2V|HD#]45SQ@ qça%gGR;L'H0cT3`+b8!lMa' 2iUY/%P}J]d٬]ER#X7gGR2-_&>.<9|V{ 3C?I]Tj'vB*'0Z`=BYڽ=QI]gTAzėeim:bXR(^F^tM+?H1>Grohybk c䯹P$#W~ZЙyIGg+%Im̶` ,QP\ϥٟى_ Ra! _ VqڅbyUN=tC/m/qyӍ_~5`v)vd_[2Ӆ' X~ҕ~ޑvkiҚd;۰͐#j(vb.+yctVОCFhZvw6]lzxdnh:\UT@uQABTk{Yɣs߽7Z/;v$[S*c1+5z܂IH0@7ַiLdN,;]v#|Lʆc?N#JP-e7S*GoùζRHN>mPLobXQS8׵t7ӷ=y o|j-iiX. ';.8C?mG{8>:\v0g%]$<6uDCZk 0NU۸Gv}/oo@`]RؼaKE 3]N<ǚSL`h8yv#fiGGnZMW^q4!k~3}5cQsFNtm˾qǖSEVâϠfO6EUt' {9}c0jL~P<3WvήJB]DFB` 5f28r%bz=۷ 7 z5bBuG̛^s6xᏌ75 uz YVx鯞F""=8xXmdGJE^h6Hز@1Nu9wVnA+m8t8{-?gdQoAzSNݘ@գzlnӇuc1'`ڤde3oenjsl]P K/,\=PߏHdToVyb`F+s'Rrc8EwMM=fZ7 >jj_JF}+t$[͑_QYY?i4boߒJ >O"Sƍ-m;5PC 5PC ݛ)y"󴐡GdLET0M0IoՍjj 7TJ`<.m:E&,iK8YnS5PC 5P7 $2r t$ώ2X)I 5PC 5PC)tx _6x=;5ԨP*_DU*0*("K*ڜ(#USB&xlmح@:ius'DbrJF䋟`?Sm\ӄ՗6]-q񐠀{%_Pe5o&HT?uDߩu.;2K=}onέG*aNgc2܈:Pyf`JWTQ&B b6[$,e~m6P&;UTf'3ܡ(J(Fդy 6Сa] .{-w&w:۝ 'xA+#=;^mYoС-+l16!J]L-ܾSy5PC 5Y 5g&6S{X7DmՁS,H&މdKTHL*TSXXgBe6s\.F4{^ hc.XO=`hϘیk=:kU= [O~v!]Au_0;'2(e4-N[QٻݽE7"motW-ʭߞO5“|6ч5W*PRtmڙs+Y|ٱ5MW:-BL2ct>Eu_5|N/86ue%U($Em]%k4kM9)YR_R aMo7LA[cϼJEy#:[CM)>x~MybK?;.i; \d/<>PȪא 9ҢKם-!AT~="!S点}/şJ*`Md Y[?@)0ށCg31dI5/pM'3}mVZO2.a;UrZA+MލZ5sĉŽ2'nvC&fA1j?X2`LdM ^wf5 mwfSe7o.Zت_͵JY\7: W,T"Fl[:iTV*\z⃅3ǞH7Bj5&qjO"8pvxNN~0gbuivh' [woixE.h88`0+ c{r#'#WP0jlvMرOjXx]X; vS'ڮǴ1{suk;3fGEH}I}v,S*@^ߖ:{-/=vvcτvʍuэ|<];u^VLPU{ݶ0ͮm16CQ=6o>o;9]Ƶ/p!)H'D)z;Qk3w뼶s*\ٻMqf3n U˔0B'$7+y_0Mԯ\ugGNMزlrH+VYe)-@r`Wę4Vla 1*s4nQa iHq2݅N :>{{f.5'eB(Qڑt~--P4&^w;w4uQr$=P Z:ȕCcXӓ[YT}j,˙4OȜExtOnx,a ٷa/Ombn7Ԩ¶ 9Ekt 'řɫ;iΌ_eK1reQmN:$96\ڏ9&3w&d]yc4|+s͹OϫxD!bhZUe!Vڞ2+Ө|㿭P6ct{t5MT}B^`fPJ[w(/'LJgY;04% E@.N"l  *C>- C7%lggb.>C^'H@'7 ل3 \1;cJɥ)7 6v,tQ-рՆ &ē  eMMf|!v/(͠qFUmʤj!2[/m7 hnUHV%X EĿlROﳷb8B.mD0t֮Z! .FP6M7R0QӉrh #62 V A 4Y#|2K֖D-fZ, ;EYXH;m4l)p\!k.B@.z#j. N2Ӟy7;k2B)kص(7E48yh8gݺ6%Je=ֵM,vUp;~o͆(B(LvLv ^kq#u8r5&9@C~84f [NWh%FfW w2e=;܃ǃdaNGmi>~Lx;|" v$Lvtfc/"nj4x+kql15kCs Q$XpG pȔD7qPԵb1 ռ1d==bm2t-|jtSM)=:D"+Dc PzA]]ݿVeH(dJ1rS0eOV+SzVaHiƱCՇh)BƁ)!/)_dU^tD=iL3tɒY텗v+x\,fUe٤?Et_CPo׊%8S y!0u4lȷ˄{2^>F5u|E,')Dq~ V ֬b(ޟ1֫,I-3 xB˓BAo#:kįɲ~8ߟFٞLrϼ" IDAT}Veτ(5)SR{F61,uv\sHR,kyON[q9GH@Vb?}O[ZCkn<; ȗ"W~ZЙyIGg+%Im̶` ,980<-sir.{*rvBTXחfVqڅbyUv:ǡ6gŸs+_<.2S&3@\%$+?{WV}yD)*,J]ĕY"D n]C1.2EPS)qxNzߵZwoʾ7T& l5d 48t%G/>29KڷA14_ށ$)*9w_]G onWy&}s^TnB14?+ GX,fO[WҴ+ *}wn  .{w_ At:I aGEFA#EQ_Z+`w7JG`b?CuԵICԷ% In^>j!E)*TwZS$Tޜ D\Ix_=אiQ=3_W:•*,BUa_/كvs'/wmƔ-ܜ;6H{Z;785{3=k>Yn͚d擄yf,m&2d/mݍ 16>0)r/Ebv_B^4uyO\QCTM:ΙU3N,== C~4TCT@e#Clj,s{b_XM uV8h6fv_b~h+Gjw2 c+y*%U61=r?$l@ {5{W_EtZE慘uyu/ }vXIY`9X/}Ot޶-dhe"ܔqgF]&bS7={}\3WRۜs:o5QkE oi;Ƴ׽Wn>l⺕ԣoN3:T<ڰr 䉳/6u\T7t ХS`CjK'u;cWXH~S۩LػK^&A ns7~ٛkXz:kCfml;mMݪXMeodEM—t1-ф{Ng3EvgVL vv, Q Y'GGXS2I ?2C0Jܹ̙\]5?ElGʿt^Vᕆ[Ϡ4>;^*_ W=4L=LR-eUv!ҳʎ]U'G^LܥK)?:"p3U_[l_(*Je2|D"70j|ȍ/=Mxܱ-.iZp \̯x6,UB,-ψht˖uQZ82V9P EA$}qV E>&' OLj.Ww~ځsʁԧJ(JI*J%X,JksBR(vD$ܦTǎ?ǶJ(J(b.77D&#ߑ4sq"oPOLV'xJ(J(O h4K&\'lAW\;%PB %PB<6/șh_m)5J(J LE[muvH+8Od2rI-J(D2TAl!~PJ(3'2€| VPs EQ? s 7o3\caDVIמ7I( T){#vމ`ͷ\R$zL1=&;K-49e?!ޮOp,6L=Ic"CJVapM=&2$*㥑yT$%J(DA}T1L.ū"5xUD:uОU &ɒ×FDZ|ncͅ+ ðs[ڜAU+.cE>K]sĘۼ{(Uk{BUwx#m:nYՒj* q{;@|p_#A|[Sw߹ӗtWvݽM:)y8Mi|Ryɶs%~Rn0^ вG;DEffMu?{[рI̻)k;h ޛx/wns30pZ<Vu6  ,4/cZ_Aq`彤IaՏ~2qV3g$n^IM H/÷&xGN kS0zZjDzi6R t @sϔ ;XO{]Tg6dm޹5Np2ۮա* j,&xz8Xra?I},4Ÿ@+H'*Qs/JY'؃;_f/RNe6L~yU딽Ou 5r->uw4!qc/.?~K~XT'9+ot𢡊 f*cwW ˻R%%*qȎqQ߳-Mv7P e|0Dmj Ǘe+%-~?bO\76V7N^ 'kg^bL۬^:L\~ळ rsӒ"á.[{o3=b# Sc\訣AYy}ץ )NgM1_[Uf-U S7oB$#Mk=C-WS¼Cm]w[)ěnLdqNIݪa|Y"\ڔ|zVhI9sz@Ԋg/>Yv/VqGM'/YF)WZς>%W%lL;P#x ;f13>{u ɾ˟[F ؑ·o]ܶ} at'8&oOK>2}ыK۞[N:{0QNe6Z;Bٛ=(PʅM T'/Q3sZ$)ztnikɸTJ-f&mH[/_aO_զL6S*BRۮ DU(;}\tX4]#-5 ކImk9FUрRJ$ B,H㬿kkVJ0TNlXoKwʸ=LTFǁ>P[Z'&KGNSѴP}&2 ԉ^cZD}pRePtTfjBNn䤐ӂMޫ@& s2*m:ҎuEES{УT|H$OFDn7龌DrVkL qb ')VϨzBXƶPe>7_L5?H;I1H>չ8'iC1C8|ש to`KY{ۿimޮUwKsCqwޤưQ[kʦ.+e}~P'TGc0eR( ecEm~Kܬ ,=F[$272  >;%ΏJFmg&Gd\Oy`Ѯ D5m?ېPK@:z888nܭϨdN+Eeb v2dPjQ8Ckl?%UIl8neV#H[fFADmR/Kx(S瓷G;N߆M#FB\E*]աu^;4a P)MBUfO_]vkX ,tjB {mC&;ToJ06z y_Hܐ];ֶZjiEQlj(JR% Ԅd%"Cj6y/ܓz{w3 ?P JPs}bȄ/hQ#nt1DCuM~t:)t~V~۪-5kƚ76nދG{E>͓ڨ"5XRv?N֮Pk?SZr_fP\} tn7Qս0GQ7b"*.ˆʰ:xٹ:K;_Yݳ o.L=pcm V7nǶL ځ>P=^dڜKԒS9or`> y2 v\Q|Cר*!jX mhEE/\d¶?,sFp|SwXhQ)H%D?QΣ&:T_߹gR|EW\;"7˵1!O(P$A9]N)6anU_;0^4y8jt'{X'f6L g]b^PFTe^$䈰MuHKO- .C:Td„] 1M F%WO&[r9qo 2bRe 2aÁI=RJ,c!۞I"*}OX5P~H*^돨Ɓ*|緟wJ5<m=YIw P,[_-mpCdPZ]F?/ KnMu(}^Z{;nkOZXjek30ፌE3T^~dXVUVS ;b{3 I-ݣĀU`[e\|T W *;R7/;RT*d2BW$r ab.rt^:m[6 D)Vό@LŦ>oN{ Wo:f f ۷9[OQ586\Ѓi5QkE oi;Ƴ׽Wn>l⺕ԣoN3:T<ڰr 䉳/6u\T7t ХS`CjK'u;cWXH~S۩LػK^&A ns7~ᘰG| \v`qdl7X w_.@Tm^gsOیi&\ދpt:E٤ˎbIX,&)V ak Q;[Cm/wOᙚ̜9G_S0IXImLe^i J㳣u[ݽ*poJ4,uвYVu}n`y"=HLup ^mq2DH]ZtG"p3mZj3/-^ɓǷlٞH`GD( ,Llut:` B#OݛOPG#;v8?M9k[<,0 22چe=V.J(〥_}ٲ?Jk!)AV"ϗTMza UWR鏮s]Z5Y;?]`(i}N0'" aH"T4Ҥ$O8J(J( $>KDH/tF33>S$RB %PB %@nV IDAT,K~['f8M38yoPB %PB %~>, kїQCqi[2N&'+ժPuв h ޜ^aςM"OI"3 q{o( 7o3\caDVR]Jc9֛KZDS)dqƗ6U~K\U$%ۺvWdʎDG߮Or,6L=c"Cފfn<C#e rŲ޽j P`D&"8y@&bDR$̀dT?GfX [꣚/Nmqa`-z>*mWe[UsAw7/L2.7Q'Ӥ#-Y=cd;-U}s߈Ҧ옞f5uH߄)!8.gnNa%')Ss~nz40wb-aV%5C_Do 13>~_Ƒ!\4[8|M+"z]HM3eMgio/bP8<5k]Ojd;ERƐ8jGdLBbqUUUUUB3'?)Ojr^aԯ00oKN3U՟6ObM?\6TNݙay͂x;}fnm㩜xid+J(/(j6ƘIwTwLb=o5chB#ov"=D"H$4I$*Xu*ncͅ+ ðs[ڜAU+.cE>K]sĘۼ{(Uk;BUwx#m:nYՒjS E'5yTK_ʂ5Eo=u;}I?3M,Xab9'ޞ*[iPZԤtlP3Y$2։Ci'vϏueW.>{J߷#$+dK}lw& TX%B66o _NWP۶4FDEi .hN'Q9WVҚsbBa酕 sM==cIBc>Oirw;7 c]KY\|7.g5S AyV@ڄ2|k҉gy&0u|{,ڑ_f(L4'a@eBtm={?y3i|Ȼ2-ۍփC=COO 8H:7Y@+k=*ARˍϔ ;XO{]Tg6dm޹5Np2'ݮա* j,&xz8Xra?I},48bςFPt{Eqݎă,ULo`GB/d)l2$ +EZ*z}oB/,s@;kM8;hjbefS'T*%IMK DUc32ֹ<.}r6eoyqٸA3 Wf:(6g$ VN uW~^ckOUd}UPQA+h!x}[D^bֱwnk? \76V7N^\'kg^bL۬^:L\~ळ rsӒ"á.[{o3=b# Sc\訣Any}ץ )NgM1_[Uf-U S7oB$#Mk=C-WS¼Cm]w[f19_TP:%wvhboӇfpiS;Y 'Q+ŸN8{0^gb{]N\XK16:r5mdgAs\ hƥ~н,yҞzBdX2~\?b;L^W?9*@l:H5*؋a9>W;; 36BʺsX<.}D-ɽu.aeځvS%^xy5C}HD͸}?Cޜ#o;6ߺm,Cô}Np,6L~[!-vF/.m{?oA|:_;ӯ~1Da; k eo$(vf2 S;NVfZTP=";D"AP@|0t".I:>rH\oBrYԝw74A YN,:mI2.*z5aY2j}u 5'/|ty]UjgUߨZ,1)_ udxʈg .*2kg36A9MmC9_OoG=&!^P㗉D:2?F I8꘣Z2mXICO+pA\V8/>hܨ~V83~{ZZcS.,U1/MBPR3 M}&zw?|PWGoϯvz+қ;\E'vs/'TGc0eR( ec88fU`1݊0&1ya5Pl )-a8d <-q~T"6rh=39r&"u}ZͰ`Ѯ D5m?ېPK@:z888nܭМQHv'WC ĺR*eȠ69`>Qq~6:RK1͓pqʬF̚)BZzRwh?>LM/I~=/xBӐ^ӏzlg?7p\*QA(D;1 kϛ[~Wb8P,|+y9qFÅaS [V3J 0*=(9(t]zD4a P)MBUfO_]vk0YECx̋QWm;379ֳɓ !\""+ DYYDJ<1{RpnƠ"]T@bQ`B tOmF=nĐ:P*ƭ3kڷU[j~'a',MkL ۍ5oO:&+&L*ܫp~jY{fR\n`s)$Qq*Ʋ2l9^GK\/UVI7 _z16ӂxhl+ɛ_]7c[&vNL4F}z4*49%55rL=z_)}dlv&2%QU  B f:lŋ^nɄmY4-q|FtSZ1^8g@QΙk&[2nIp` J>믚nOc??)/<߮-rT1ZT r VcK3t52J=×"Z^DnfncB SQHr4uPm0Ú $_ـ! 𺦩V8l/_z+lg>Sܝ9;b֝|RCူ9{d0:0 jݣZpY0t4թhɄ /5dh1*}ω[>~L3*GEe|p`$,aRT&hӣQiQUxW8Ԁq6*IõS2կS#P!wQLDrnxG3A2ScpPcW˄%y&fB:i>H/=j7Q5K'~O[Xjek30ፌE,T^~dXVUV ;b{3 I-WbPQ0s rcq .>*|Ÿjg*e zC4+9+dy8/`7^C_W P~71< =Z!@˲/-teq`V ?Hm<{OUXw|:gҳʎ]U/L[A]ZtAK9}WD0\o@̡mw]'O߲e˗$="@mF$LK4!9"d>?`؁4~8t]nqWo ViX+tOr`7T7q̩a<#=kjt_ő^D@Jv1:;|"iVMOW;p.X9)JO`6?{x̋޴U%Z 6>_17$NDk9x`ضSB %PB % @n)gqض#|1 R4DBlǃOBUB %PB %~JM&F#ˉIo'<JIPB %PB?9gG'2x&' IzEAHE1%PB %PBB3'Q&œ462iE$OJ(j UP-@ %~n$Bq'9 剘[H (}e Y%Ju)!S;t"oI?N1b1{/MvZ h|is,<_U~ܡ%*;|J?iذ3$ y+FY&.+#\|kS~#e r?+UEQTJ2L*Rx_BRWt$TayXΔE|wdtmѯz˶oہX:>o8o(_(MɄ*-HKVNKEU7b>u1=BV#}n4ผٺ.Rr~!2?9+aqWO};hԝXɛêgyR~D;f>[>O|Tg42 TC %Q|cl̗i80u_**~$F ` c>)N'9i"Tvcͅ+ ðs[ڜAU+.cE>K]sĘۼ{(Uk^T~\r\׌jLmUzпk{׾!T{7歓,U-_+žΝkTx}V{&v b@1oO`{-HjRo6,gb`w!E|ڴt^~ZXҺ^ΫȋR~ve=pۏNۑ_uTb2qå>i;Y*,@Jkvy/D'F+(mk@#uAiۢ 4m4I+`i9~MY&l^uޱ٤IDߌX۱F\'_|_X4|W{;p띛y1&Yа gyxx ̏{ .%O ˬ~|.>`h)<+ qOmmB]T@5ij< pwHp_:wLI>_TS=mt/MYaSێčϔ ;XO{]Tg6dm޹5Np2ٮա* j,&xz8Xra?I},4c֋ςFPt{Eqݎă,ULo`GB/d)l2&HR<ߪu$!/L=׷K_..?~K~XTW9+ot𢡊 f ksmCK3WbKg)9'W1T؇s׏tCAnnZRdy8ԅWxkosr^L:cн}rry u4ލ_=!E z;b`|JԬe>jamUxDs[`g]5p=j Rwn+5H&!aEeS|jF/6}y.mJxg>=+wY9 jE3gKXloˉӗwI8FGۣ퓗,#hz+-gAtђܫ[wnAA^(oťmqrp-Y' vgՏ=F(l2D}UڿtUaZٛ ùM^ՊSծ[zZbLtm88mGK86X(] @j;2 qG<)>;<&(D:?aF! 3.$R== BrYԝw9A YN,:mI2Bavʤwv]CSP |y0|ˬr4eV~.k(ҧw}*tFב5*#+ʬYtAz47BX :=U[|wcV=뾁xUO|hZFTf:᳹P~]wLo.kfb3͒@ T@ -3msS-s Δ raSfvA9EKL4Ŵ9Iʮ^~-ƥ[q2.uɡiw2ҀzVyWXWbi:h,9ʠPvƶQUf'NM>gKv &aRZAw=B5w4BY4-Y>#HVJ0TNlXoKwʸ=LTFǁ>P[Z'&KGNSѴP}&NКeoXfi3Nn䤐ӂMޫ@& s2*m:ҎuEEmɡ͓S@Tvҡ:'GH''IZh4HBDi!X^^k4o'ORQα"mde.7_0G1y~|(1H>}a* }4nԿLB!] }D, )<4nwWE^,}uTZ(=n)xuYtrvs/'TGcFl*ÔIec88fU`1݊0&1ya5Pl )-a8d <-q~T"6rh=39r&"u}ZͰ`Ѯ D5m?ېPK@:z888nܭМQHv'WC ĺR*eh^Z\DZ^#gHE/q4ObqʬFK}I?'/U OOrgws`p!m؟]0i1Bakjz܀A}Q!~LZBQu BRv6 U =}u٭Y-4nhntzPP=ʶ]!ޝ}7@%oqLLo$nzh1ӧNUh{Ll>E p'aAd )NF2 \1{RpnƠ"]TgQ`B tOmqŻoW}{zi[; ۦ?ai:pF=nĐvc[%' Q&UKuM}3U.W+?;i57kfC Mv tn7Q=Z9*>@EcX6Tՙ-h3ʊ}5=;#K11QfZm?y?@zlˤԚ1q+ xe /E2 mN%jIqͩm7~9WJA<ۄ];ILqkTxÁY,6[4y"G[2a۟t9a|K\#.yK-*IZ'*yDg+;7 _k| y2LF" PJkt+$_ـ! 𺦩V8% p֕- .UxaD.[6[7^IX+) M;REC~udo ?v]ohd2+0HEָ9˞#v".vfs(P@ ȚE%\GjDX5Iq_3D (P@T3UKOWiCQ&JL)YH_(Y;AHU)P@ ~&J">K R)DB& v(P A6T ( DF'r(q]@- eZ(BQh5k?^!#fjSMR:l zul^i#J$(8TTTE#C2K ׬zGn&n.n.TCqSdkZnpW?<ɲ½ȑ&<8)I6 e#p۫}=xշ+C3#O.qjD5ό#}w SVL>Ob~p?>oeK$[&BBau̘,Z}iHTZy1(B BS ^?Eæ]q!^~ǣLز:u5csƒir˿s~!)NQy{W 6!ců546'QLE,Uu"ggp{?+>Gm"u? {[KC] OW'%zf.㬴TU'ODd'r*'

K=lecX9,Gh/@)& O4nou',,=s3fh8(ǧBnkpR|.L3e> Ƥx ,3u̢9I*.V9Cch ,.5B6C $+ 2sgͧ݇˪T.D6IZ a }a՘FcU1U,XlV LWILESgzќeoX'-~޹ NHsf:fsGEȄ=x,/m*۞M""JuB\$FY_-hc'(r_pX\٪#egS21LO%R$"7l߶vӕRaɏUf7њdyQϓNUJVԜ5O,>YFHg1C}Z1:njKkI X;qu{1zqE4("(.;._Qo},DᝢP \#-ҚFG+0Q"Y4f(H)8VO;xm;& $6K1L%g%.? ā_^ܿ3nncL~)ko?:zm>UTu>XAPU&LSR{!mCcZ]~Zf[^/)Ӭ mv{ZvȐ"Sfc=9 .豣vB[\4O.5Mn%j(=hos= l*'q}ǑJo !%Ң(C*%*l&x2t0q2&,VVY" ꪩ[R\}[KQ[,]lvtKqIiVDf(˗/fWLō]^"ݡHgVOF\GРQ͛5g^n^yepu(,QsD"vNV%K0 C5 H$X,d'm)\R!L-uU +*'Azܓ ;'Q(:[ $ȩ4.((HDdDr^R<(_pf>:{vY.?2|w#*>]4li=n[GŅv^+?7IşlWkF[HKLH IDAT<|jFsEBIi3G/#] v^f'_s2,%0Uy*(V~J䩍 |ΗE|٠TJ2.Hj lCt ?}II%ox]!Xй6 ;_N }H*29Z˸2T1&}ui^#ֆ^~{)&~u+K [m!.S% ca[g#'{=u2` +KYkٵSfFIӓJIWnERAG g}ŬK#׽JCu;KQYCY304jZ VĜ +dR8)q@k.HMxs1{uVlݝe]~IpYbH$P( $/O [_)'/6Asԟ>lPB5Kuk Tq[׎} '\'d͙^o5-a xݕ tQ-k2zyBOH^1tuŬ Nݶm?om}pg|pTuz6ʵR{[!1fӀB#a-6}>IǕ:.Dxv.⺕ă'3sYjcf _6.*EK1HNS=t:>6uKˈ]w=MP;yԁC{VL{SnPQ@FGm4WjRd/m 7\l'auêXu~]N3%=F<ղ6Uמ^blMT*)EױPΚ}bK0$]SOZAUtۦCo8G1"[ϩ =ۙb!պcU#UXp-}2L!FP,Һ"کS3 L,Sg(ҳTC-Y#7Z|=x}Lz!~ 7`n+-NNnAu0M{ܹ3۷{,q}#}$C"8SM$KޢܱnlT A5\\kR3l/m)]E i0o~KO&QM'jM6QW E9Ӯ^pBe_jS@ *Iq,^31K5(_$:xQA?LW&.) \Js:҇_÷ǟu&)2VIQ Ng0L&dX,ŬNh4: ]P牌Y3 G]}{sv)y3ua췒hRg&NTcx8byZ@w1kT;t+M#V6De"t芼1)XyVnjYjȢ5OٗDeJl&jxE[.m&TyhͲ/[![~'.`yf9:u5cXnZG&}:um*6,2Uֲs9,&蕞v\4Br`k0&VY{1Z]\EË~ytcaù]OF5LgIX5C&%Ri!E}? ۢ_Jz:~Sb~_~sv-޽ۗmq 8Qv nj.~bJygp3-^ (#[uiޛ8-Y^dnEs,GNJx]A[cٵ+Fl KӴ7!vl}x}yT2[[.VBS612K9xmvnA,u8˫]"Kɿ\=Ob>Se⡢NT8M3Sk !S6?CK=*vm9V=tǞ<̒2{qWuz-֥f){P)3Y%Y1#`uMZxXlmȄj|uitr,B"QEӸ\WM+ {qTlLj̺7Hep3X;x5R5%Ĺ7uDYۣVKak{BX|ak_#.-^HU?*t6B+X*%UۻdZ1ȋd8joT|x(pgb QLYWK X<煈!'i=ťOJ^<6ѱ,=7N[jۘg失$qZ{sHSԫCx%^}:}U vHn?>Zk2ijTn\;v~VNNS>1Snx;tJ5XjXUce|^8HQc.IO^;nK\?4X'39Z\EfK7 R#A̪yEON<};m4gߔ[f4/{w\D یj{{[qLAaYR)8O_KLܵX_oחwl@[9,vSQsGBq!'w1xu}K=oaLd3`r?un$rʬOjұ*e}3;@oi7<~nON>ců546r!]y-˕_J_z\P].ҋ lMW[>cQ8h뮭V ʬ'aS|$76=w68:lZ2%nN0'^P5Q~Dd <ط<+ͻ >->W|K$%BƥRlPZxBDP%\aX YbKw^7"?wUYl?kԘ9ws~]l,Ju1:E(tǏչVQtgE^ho]ef+;Ja>z%.)t5јCDL [5UR7ST(g}yϦݣ9^G˓މyM4Y?wb0Hʓ!hJ:a$*|Ƕ=|lC7 (VeշG9(3i۫n/UTf`:fAP*Ik3ͦx%V쿰W! r;tte}1r<â9,~argM0I? | T|q/u:(STjpܣ-AGV`8PJD;:˔ј, NJGM3qܴ])r;ޒzݵm7Dlp}~XϮ [npѫndșDjy36N>4(QÑq;ˤ|)fS_~gvw :/fL5zeWE"Г5h ]n2UA 4Y/`u4gLХU>E<.eXET?n2V])=lH^kp魣YivX9zt:vfӞ B~Z^"ȵ}e7|d;k_t֓0ʝS©]+ ,Va(?>=\όV-%eS5T͐ !,>p񾃷:۶cҐJLb>aHY")0xVBXH*^&  3V5GJ w12x8 "(*(Tܮ~p+˹ݵ/aL&I0 H$hjʼn(^V渦K0JnERAG ^Ց tq3G$QґǨ$/B||Ay}fHZ1F2H7w>coGN_Wn `,UGeUCƛ _8XhE Of~.  Xp+5OI_ NӉND<'hg!Oۑʧf

];mH+n[g GB,aTվQYNS2 -Ciq { AYYHlᖎsmp:?K_"<9@\T_{bS?़Sϔ\}zJSݸ>$B:6I ?y25ߑ1`1syS&+$@')zDK }d_P2qI!.je ~C]̸y`mhbwt0֑ &^-,֞^퉦4zJ<˵қ/Mwv2B*:}XWc&cuϽ 7 |\RTtMCo~_=;.}#l];Yyfh#8^\@G&|!%nLv,ݸw'6_%^3䶠nzkl4+}â/P[11~+W"2FpXM-庰gi?L!Q^]6 \}[Nn[^?1'墛ڭST< (PܻhF~XRqX &BP$  Do"\ID*;s"%l~W!֛/~[L}˞+~?<.8kr$.iVf!)~{9,b+;ih͗A~Ɗ LY- O*Yr_s&j$-;d|nw_w(O?F0uhIwN*CG-_?}y~͒h`I;O Voamy/y_:xŒʧw{G$|GM{d;rS0~gW%G]К?Ϧdʺ ^}<c!ba 4emC*f:R#*z r)UK-3U/**z~,TZN!KU$;35ȹkna8g?8p\vԴqî-GʢgnؓY_f/Ζ[Oe֪៸y^/į^B UOGWe}_+U R@"Ig@ӫvfkâE]2dG3eqɸ3#1䤴\?L/DŽ<#7ۄs4fL\za/OV 2t6Ȉ{u"Oػ]/AV=8E:䉧_շӧ_5plᣵ&6-FG;qH>^m}RƽMt,K/~+2uv.`SV/C.o+lǗDvu/JH\;v~VNNSo)`l7<:%Ԛe,L,űmo>/c1Qcy7p%.mr,`Hq՜{-n}rFaZjDOĬW;D7mӆI3yH^`Md,]|0mk%&G|p\dKÞjLwr{?zNRhcE9e=~ [:89&I\ߺ^YOH6'4x:cë OE]EӼn4tcp=avKnw{%Lyp(ߩgT6ӭ7VH?U];.|}yǁ Â`8(kVH;6d.x=oaLd3`r?un$rʬOjұjuh+W 7J_"|I2:$aj1~j[ {5r`3NqXc%fJ9{*pB}MhgZu,~YcKhm.L,<8R]=z>[W)N52҃oXѶ_.R|DX>R2UUͬ3A/zE)EFF}+IB7fN|I#&=> fg/bN+F,-.D D^UITpdѲ*C ]cBv4ո$rťrewF֯ǧGU9&+*Jz|HMi^|K rltQBٖ[V^>F%AtiEmﺼJU*$B|nD}FLR;:˔`41 E@"HQqq7mW \?b4tw-Ŧ\|| @;]/,݂1[ jaNIDiڊ^{aƦ烑F%j Z~!I_|^{7 ;Wn TMi|\^W&fE!([Ikvgſ CL =mĂ8Vu a>qܪ] Y {kߝ}N,u7I]5&dY~$R="qq;\: +9t~0hi|O8L`1%qjg{jáɨsFzLګ" h ]Bͨa@G& Ÿz 2X=9Yo1:CbX"Ȇs"ӫ3 ])a\X|}}oumǤ!DQX`,<+q!,$F,jMiۧ"g4CϸpYkd1WOgڌ5Pm^KGYhWҨ}Pi;S\:v+[GHe.S?Rd4 Hq! b64gIӚVlyhO+ى+->xft1yxgZHT~80J_Sb//P;Om\xsDX/"g"驔d\,Զs Rㄟ$$7]s+ȻXHެ*`V}Ul#xS}3T5WqY:Q5A Mk-}T6SumI\;1pmtJ4gz=;)-arAĻ+#νt˴隦ޛok7a dϷVX&Oۿiy̺Krn.N[uE"07|N|&7@\nl> }=XMCe#+YPxqfBXg~P0kgqؚu!Qf_Z;B)Fkg 0eۦ'Ḓ<&.sЉ!ը..Y~,ƞ ( Y6xpPO>wp qeEQopf#'Z-SF0cyڮ&lqƇi5˯a.nZDdO[u~cxdf.KMa \LUvb8y&?zt},U}wm Bj +{,d>v:pc#2͹ˣ")>?(R>:ri,m)77ki%3PM0' d.L![&9Ox f@z5saÜe38m? f?0u;jG/?&%17Ioҷ$[ʧ[Tzjh,+;uS?}zLRd6љƟkI"(8 ]}q2["e"7^_lac95)"Co]Νپ}')IWyf;:yPU3^-AEr~s7S:1'`g EzMNIO)@B }q6ltCȹ)S`kךd|mKҐFyH DRv xs]_9Y˾̢4 (Pvyaw8[ Bs,!vE2o;]]=*>O"$ԳglG (P@0ۥ>*j1tx&HUw(P@ ?Ʌ/(OtAUYj8a!ӭ FaWeDa~>6Lw–gԟ0ٗDyuFTkC| y C ˓$ yP+S5E8eoKonڤ%S2#~ZM%,:dqeF0v=w)zak-ڟOrM֩ M(PS"Zц,ZKezeaUjHQ$gjH^t'DHlD}"e[\}tY; 9wIk%1Ӌݴ8){M(uZUZRTټ_{'=Xe4blݵWI߱^ȹd1AE[1O9.z?L^[; }z2a:kMª*7+w6.YOs9oFݻ,oc^|jwſ-PX|cj,U5ש" 5ȏAqzB藅+uE4D@Q OEO DȨ"Yb )00G0cD1# HNwf?fY`A7tWUtWWWW}]o]%k<`&NM9Kj;ulS CcJi :L\W5tP䶛31O/I/dL;j0> [ ==>D2 LRTr݈l5|%,!ѷFʊ3s냻Ӽ 9.nX1R] ]\WTYz>d-GO!~N˭>7\ $[}F Ol=foJQָ6>5m'{vJ~}˦s'6@P76Za|*L4.)t8ΑMokdsoQ3 Iij=gQmQl.?,1>;k/-{nk GzYcbkШf8KW`E~=˂{txavs\IcqR Xf8ƒqFyb¦MGڒI&2d}mVI:+)8q=yV{1tA^r)SÛWTNBnd JߴEr~H8Sv'IR*zUT)PEJ/ѧG 欅 1lV\Qa7sU1Qk\zX3&<,8UYJJIyڡwߣz zuYI M֭L9MO'̛W\??~B=%`f>IM'.}y>.cdg_f>7{BBُqSӻ<_za_ UG،km+YBAh%+MGva}N1wËA X@[zwi!OcS|jx H nixlKrϤ'pzbl!-M'Ʀ&Ʀ*gxKޟ]5/Qbމ/V mggcSrQ̃%>w?}k$ɺϊGq}((Psc}_[XUkbSOt3ꥢNJqVÉ<љuJX?ٌyA7N$Ö2uIpOžy|9#2wɣ$3{*aMCSkO?<g덽o-FeQ_zS]ㅟ+U!x>ص}?ᰙ^5s)bhe%Rdc5ՃJj)Ј}[$쎑;\5`{\yL^!Q{7k69$<*$k}\:1OJ@}Y!Qmʓx\qc,jQ1[inZwo~QG:+E%}(+_yPsEyU΄mۿuT\jԽvr_M3gsa sg?kIY`̏]LQ%you ~~_ NMںO]Hd‡ ` 6szrKc3Q fZ4%>!svF_ͣ^9HaWPU)νN3ax3g6`LІMsqcv!ܘ$9#=Fca !Gn(nlQE;bnX8yxٸ_zl d }qpƭBqb o>hqe#|kymB0ch; P\nЫo>7n1\'ĩO%^=fŞ-JU ?HeȠ t_?EQ@EQuu)]^PU'鐁qқvmƬYZ\g ;D1 Kc9ҘSyhFo9n]NBNv8mS8/)DV(z=)BE P[fjjϹ{޼`ĐZLz Q HQ@L l3B+? t\rwSd4jS{@y'-_|c-RL ^kQ*ANUb))+(&0x\*5nSYNҒ>7%]<>8B(e3ӆ!( $$ 8c6sI<ͮzeDgvRݹ/8Gqm 4 vȨ@> [2δȢ/2Hgȭ:G)1 Ƶ|M\,l(qqʺRus›$(Bͮ yoOv?jgZYW/ T%J3d&_|ԩ(8L&'!ɪd74*3"(H /ڠ>h"['43?^_;H@uJ>1z),8 X e#OA+Uϑ::+1U4uXRAr Y 9UiQR1٢E()LJkZ`m;9IEqJVH"L#}](I8m;K/SɍWĄ"n=o'^WD2Q񘒆(ʏGi#Oyn{/gqhuqX7*뭳6uz3޻֔;\v_uϕc<|Aˏi//+ce~?AsRf<*v1S_fܑ'2 xMU6빾و᯳KeœEj 0y5D^ vԂ#)O,}tӂ&e%yow^)=Ljc\YHOt\_f/&AIK?)N|R  bLu.*=pN^z%/HY oSݪsT`td)vg_[giBtdԵ|1tۊK['ɖU+!wˆ2oݚ3S2I`kw5|1Q~uyŝ2-T̳tLZTZ ֆґ͟q&څg~^万"(;[e z%I 2 (RH!8F).2H!!dBN1G\X0̣ד$s!` ^8ē)}s#sN$|Vs鉸{#_j삪:kV^$.0WS9 H$"H$/J5'نu\˸ٞ:Io]}_8%n\7LGr줔t?.3 =O~`zq ]38t6M zʟҢI=z+Y⡞ pY~<>ۗu^[qƷVlu hXYwUWs-AREUTp8Sկwq} ߩwsqu M=}c'z\C ͇aUFܷysA, Y]ag:ch,O>Y{n=_˧b: 7;OόT hYЫuHp.s={_;6k}>*&ZK\<2_l;+hN 3x#&'8X c9'5զF~tb~ۡDgs-qDw\-u\3/0r`v|,^>r`lu"},b ;fyv?ac?=y) =4cp+ehPY'w7xqGN s&~|ztpo'@ge_n}rmb^-l]s4vM<0.HbP(|<!IkΓ'Opuu_$i+X*)IS3WNΦy4_7.4YʡvӳD?=M?>= )+6$=(u5 d>^kQbehLΜܻn+!LLGйs֕KKҤ( /w9"8EA2>:}h7k[,4'`ڤdf2nj5iH 4 ^MforFϞ!rXWv^hoTIἤ3(8Nϱ]9ka88`i2mՈ/$ <);/)o"hm$0%5EQ׆T\J(;eɌJJsǰv')I]E;e񿣕mz\笤 ^z7N HR9λ@ 4@J1h^DHx !Ql zmpR63ѿUG(̙r ]5Wweiy- ޞtx"D&)O*9nDj>ul[#eEoTDi^`Fr7^,f焮{.+O*,}~i?Ԑ ACMoo`j[ξJEyftj3v܉7Ek\BKOoASS[6 ;ٵ1 Sa-ߥqIqwlux[[.>~$k{Sf5HJSW9j7%g(xwwg9D15Y|@mlct[ mdWq +y6ٗY޷ЭPFqS4$}$겒W[ mBS5~R tRA-.JZ[DP0Vw_r-QLfGmf%B޻=oR4xeIߘ.2%SLGbе=<)ĭ"Pdw]uH+;_{êgے35sHKSDW.zv\XlFay'X5۶ lIM&G5Z2xo`'>+-3ѢBS7E|mQЋb> fM=? *dGn58˳YDXy'13ƉdaؒW._I3//g5bײ=W8y4xRcO% i{*5q V]]'br Ũsf ]sʳksJr,6sի=b.E Mظ,D lҼ̽??zBI-er1o1q ,Z:z`++$BV aN(_mf}{++s~lEѷ ٕgc4d.Wkhճmcg״0WҐJ:_boLb<Z"J1mY׻U.!VؠsAPv }5ݺ\4r0}6Z{R DcSsT opG[O 11:kEzS45C; ` 6szrKc3Q fZ4%>!svF_ͣ^9HaWPU)νN3ax3g6`LІMsqcv!ܘ$9#=Fca !Gn(nlQsB;bnX8yxٸ_zl d }qpƭBqb o>hqe#|)V8#MwS4H(N;zm݇-7ӓ8iī=LسE 2g[K c66 j_ tfb 쮃Pw$Uβ92U=oO"\XVf}o) 83|*lp×=6?SWZ[ሗäwݮk/r)Biu`%B6&K#dՋGJV`f(bŕ?#2bsBW}1Wn QzIc<("('*W!l:ap3Ύu ZP~i_X\- X1`I*βUjiBQ(h[( (lJnOKMG.7rUIIn<C^HFqfm"]<سRRdխw lvTW: F/,Z˽uu)]^PU'鐁q;ymƬYZ\g ;D1 aS)Rb` GѯI0DrU';VL iŤ:(RD(CB\? LF@ԂFP+,t29x˓^¼ ×8NY"o;}Dp&jku:'KK,tQ;7Zm֢ՙPc<,o IDATHp;^udX&8$G@&|K:T*tJifߢ{ǘ6 A! &I3jMm,mvp׫/S&= =x2dF):9 M J<̷'Emm3-_ǬAMUk?s?@fnAGRif2= LIV%;1ζx})9 P/@$Efz),8 e#OA+%kgRG|5pj,l:"iRǻJER)Kq>`@ɔ& sahѬjIwP(B#U( BZ - 0(.O%.T4Z7;KL\*(3)NP,̰s,9}QDRn,xVԀ t2}D@3үZs`4dOr2SIEa]K˗TN-xǡW2B 5ddߺ5g^e"A (:H7k[b(/*e+H[ 2/dۙg|@ץ#?K1!M< S>[ qEDQvr:90K/q;jePBp.Rww};!CBȄ" _-,c 빰Ra,?G'KI"Bfw#. ^8ē)}s#ji`#+Bؤ QbYgKu$Zt |~X$l[7d8ZyqדBTW E8y (E$A("xkt"OlG󻺜m8p?CZcFgns~>-uqc<.q0@b>-&_)q=l_'R/h3E0sw5Lƌ?_g)9m}n WËRVN<=36zR[w]zs={?';Qs{Q% d'%ImniR3~S7bb0xMuq͌k4PQm~dOcՈYCF_8~4r0|u̘ζTHGhm[`z*D&[69h9z {]yvXw<#ٓHxpxmNVf.݇Tc~ t)!ܶ7-X^@wv3u@}F"nj[m=x"]~6F7Dsꙸ6fĬ=~曉h-"¹^"FxM=-X}͝[?x2=g4dJm+O]'HkhnG=tz,]3a~ V+mk`LSc83M{/6[_ Q FQD -;W- ppu$ICu$ٷZ8j[jq쪅RG&M?zrרY}u+|жw' Fnۧ致XX44vGzv3Wv'Opuu_$i+X0 )IS3WNΦyqvF+#fڭIÐku>hҳCgh9z>#}zRVh?mXƕg_6D|_̟"2:Sq#bWD,o"!LL{f':I ҉<,n"+0yӧON:o 9 6)7Yl_V >uXZtH_x 4{c{ٛ;CМ*3$ܳ j^hf4ж%:B}Ꮎ:٥5ɵkvYhP5`lKr=5>c;5!`]Tcڥ9$mI[]sDv~Vw/viӎGzr[nڰdihкmϳ䫻6X`֝Ͽ[z7OV dX,`02Ptj$AH~&ľ( (h 2"=ޝ]D+hAF` 0A7OYWѡ7 E`5R1R? ^A J*5aŽ'vli,JI'_˂(mR>O>BQH:Pk/DPY =f7<撏E^FW?޷ҦЗ16U,9RG\`ȩ>E l[6|s{4WO5+]/cO'̳qkȧ3{OhuOuə$E9M}ؽc.n_6͗Yǫ{mkn!xP&CQˌNiwwc-[=`4Œh_$˥-rgOk!O%jx-(rwLcA}2?q۴\鉱{,J X "_ibGfv:WfƉ<7nlIQZ|qv#PDNͭcZ.g۸ o!yf[0u{rcO3G_G 4so/m;.h!4+ NE.T∈=g6on{M)Θ~e;hl7H%*CYgy"T\\TF bzpC&||+˘^wˇ8`Y rFli~-lјQ̢ArKضvTћE[؅йo='YBf?޼s]0K6B :].PąTCtj:N n{ sGnu $$ @jĽG9ttRi%/J)ZHd2L*JRwY$rvy<oDA+}S XV!DF毯hճmcg״0L{/.0'n\6zGݕrOh?Sq N^~.5ގq;?aqəhal,@.@<ַ8;,@ Zt;7i>uA2I&|x@x@ưj3'46t7E߉d(ԫo>7n1b $ĩO%^=fŞ-Jsxm-1٤0(㈩Ӕ6@mMmuDYButVS&ΝM0}]fnn6r?i˧mwbbzy J*4mk8HqTؼGQ#QNҞ´5ې}M3I6vCڜ{q/f֝tYUg'B)rFGYrX~+'9[ TV9#gIR(N@R2!d=ϝv^cm 6NœpVNL'$ )⌓$C<ӍMsf"-[BP+%|/rslXBR:QSO7Xq1lBeúşMBԖ>dlB7o^>pTHIFDI*βm|Ӓ %Qd Q6V%`7pЧ%[a#l|y'?H d$8|iV&Yc o3$Au-'FUHw:R@@P`;r\ƹ˱1(nU^I=׍2)FP.'ϔ) )&-0f"Lpa"`(%Y-|[^̘ASյu]r(hqaъۖϔ02h:mG R>c pƿy'3(w_nqvF7IUF)Hعjӷ)9ʓbKʼnI߿! r'q՞sy!-|F" ER1,d7\IaG;Bz@y'-_|c-jkV[q 2(Rr~̴!g 01Iζǘ/Ĝ)G<ͮzeD܃ǃsldȸɶ|ej;6 ΑQCn)ԷteiME_d [Lϐ[ujl6N}`_?;S E,OW̜v(x}? e$DQF=H]L S}x2ҧ$(4W^VĐTyԍcIrWeXzƲ|Abjq/j5jxH|E6ڝ(Gmz~ruض79PlѢY eLC.ƹ-OL)1૧E+)w|ưh,$7"$PFQ| r]S\|W۪אַxc޴w%o'3N.ֱ7 s&SE9^Җ(Z*Ser WZe$4ň #)+bBr}X: `+"(~xLQ~< OsCu8AY;\v_uYc<|Aˏi//+ceV~?As4[gP FdN? M >P(=styD<ór9^Jf! ?raz#I`tPOԺى_ dRA! _7S7bb0xMuq͌k4PQs=;<>D:zZ͝[?x2=g4duikI)nUG^y}/Ki1aJiw,G.T؁ iދ|.*V;6cW-z8MKʇc @%Ik/㽊lhG;;vE"n&=~kԬ]ϾeNK-;W- ڔi=SɑZlֆs45+S69IQ }w#G,[;x cBR6%O/*?X ;mj*UtAh剆٩LB;N`?'hN2g̛['ɔ)&ſro':BRv P6O)|adS IDATڄNs}Ӡ]×4ߙh 6/YP6AD+sUE%*K;N_oC%Th/q W+4 o)*T#V@o 4@ 4@lITiQ8mR0/WVn' 4@ 4@+O( Ll+-:۸0;)4@ 4@ ~o(b6aBJr^xŨ4' 4Є*(e'?uxO)iB*~N~h+,4)ڝC£/PHI}ٵˑrng_ɼ:|QZH6ƕ Oxhкѷ^VrR$i?'T*Jv&q\?Q*r7]b_SumW)EdEPP)"" Q<~wjokоhoeqU}PMoKtKƩi]yMe_{8N{."c!RodNT$H$CDMdJE#%I()J$N眽uYϳrxs{ϰzm}^wm=S3k]4ȫOe3/˸W;)P?v\sf}+x]2ׅQc }bAw^v)?kUv}phR.Ҿy"C :|lP9FY;Ñ&-_7Nf~Sο>]f0sS.v5|}xjZDo=% gfNXsO M3Y3; }z { _ul퇎$lҬ vN)Qƞ]X.w&:u#:34^߼`c ]g#|fbİ:W/ZeHg|ŚqS^1}ȸi@UI?2}.ui"3@ u־|eo̜~ۮu*P_/Yޱ'_}pIݡ`T?spÀ |P5߯)iḎ w@tdW}&-xnoޘ&wtkz^*oKmܥ-#oߺ[ |Ԙf-UV, ᣿?I-S=kN e}hS#K]y5eS[=pБ_Zζ]ᖦ`iϬ MODLΞo_}=Gj빙o$ bivwaD8όGv/T̜?wrۜ.`Z[ђJ4j۳U x[^ylHmv Uqu!M 0vW("FӸZ~tVKgvY `;q[>ud/NU4aA/Lgx #V0}iMY3wKeqDz/H 'vƵ[Z[1۾p&UuO48c[ڏuzG{K:~O+OAyFou&7joӧ<=]/.]wk*)ǩxf\:J\uQ;S&;{ =PnJޟ7tkdmya5Ɗ5?d5dofը=r)~,+k Èbg34P<`h9^,Ģ[$;<. V={oM 3ggNhɓ|{bFbX?xKWW8%U8i:nvk>~rO_2O),[iSVD~gH 2ZGO~:um@CZ%_'gttɬ*SUiClbhԣ~]YSA#%S/(Xd," B7DiޙO_rߓs_rG3K P/̤FNf9,v]us3sE2K1 Q׊0ܨQjC3ux}aRD]QK=sO%s3lKGnxy2Ne8%B̈́jg+':D6:vV;88S1&>7Ƨ=?4e<Ȋts4~,I=U!Y$MʚQED9PI4BZ V}tqpѤ򮫩|ݶhsһz H:OJrADn_sŻ\{O%y[x;; 8D'R!!jjZ^aP;vPK[z7,X$/L(c$`3< nw)VfB9 ү\_?e;c9P|`'N07! Dvx'Q.[ #E4 7e<@;#-iA 4CwŽ8Oxkg%=J%s?%1nj KW~FVhcN([>jNT报T3+I1v CD̊$UJr;+w퀮 V=-H2Cl]z{6X V1`SE2R\s8r袱+;:~ӇK{|+ '5>}_%YY2̴}5a+g ;D}ͫ]OEn33dErr`WJ%97 /*|MaڷsK5Rgf/OorI^<\5?.;VJ=~b=6ee+2S.%_l YyYϏDq[}q,dݽnSqD jFT&϶JgXK^zqFNg^}ŏi;m^R $KVХ{p뺡SѶ%WVqpNk\-`H`[._f>׻oj`]mKBɑ-϶{dG#5Faa.sio?p{襪_wԴUI.{nW/rѹsjv *P탭;I^?mMz_y6O2d'}[(8J֞ظ7U#lۘm'Ӡ&͞t)%jvەpgB~T3*%t}`Zr ok>{RӛŚ´ ,ٲwUtϏ8S{T>GӼLJަ♚vL7ֺI՝zJ)YepI:6āxqhvͻ)Rx]Cs:vWRԜ#~L)Sqf7x>qvϳ}lQӒ3ruu7Y- OآeڵfLDд㑧kϲw]Tvo&d'k)5vQv:Xl׾r-ޅ,Zs矘e;q&S;nzw|0!\JtxbACT-5uӫ0y]qDmǩSLiԱ Y1SM}+w*gO.䣹k=]wxsٌUh%k5juUZ ['ъ6jIqH#1$NKQLOOR\|p2qƗwg; $ ?ym?Ԭ|ߺ/|oШٸ;nts?j>4Yn{/z'/*_<۳ؑ#կ~4q,yޞ2kh?5K̺A2\X@g;eدMBy{xvs]' Мau1mr҆q}~nֻͪXQg}y jٻMFٿ}霦_.TUe־lZw;ڲ4=2?j>@Aі" O<ۤ T[Rկ2̗_>OrM&?;fe_4t&S%IudZҥi',ZiӦܳQ\AN_gϞysoFvɗg_3wH'K 8 e T,BW~AӴK/O>  ~Ba(S@ _4O>O>9Fm%6cqB!&I牆haMe}'|ɧsPVP2ş <ٶ%~9'|'|"-Q F 'E.OO>O>ӹJ 8-RS(LLm<ʓO>O>t0)+4/)C;r}'|ɧs,Nq9Qu,r'sO>O>c}~4MT0ϤĆh=re˖(B|O>O>CE/Yh:0.v&س0@R{-|'|ɧ)*\-aKBybpL7YnpRx>Z'|'|:IxPSyqSvF 剆ko)|'|ɧ)*\-0 QRTA ;qTe|a۶5koO>O>tц ?<;Ln#Yym[KMME7q:pD< BDž-sn6x5αMi@"8 b1A,Νhcx>G GNK^Z lГā.z} ,6of2{<~A"hhA8r01F‡iRa(Ga(yn80ZköH$B'64`0H4;uGrYo͆Ey@_'ٳsI#-o UwRP޲H$BG:pKiVS1Tn+۶C`a"2>YKn(AO+6~GNQbpH 8Nx^`z6 dy,P_a=m;ldV1Hzh 4qX+EMGE=Ύݲ8H$ 铩,$.-cc3'– z" ,p\Y ]ӛ4M  (p~~>p|!L IDATD Kׂ3zq:/z;TQF[E0AH>TY?1}I 2v쯌!m (U鱔GK݄VD?&KsYQA yޝDuGEV @)B'}QsN@gA9-q-F+R86Ub@J%Hfie"]+f@{Œ +>IK!;Q_)֎t\;XN;;Tމ^JMWff$a<TYc*RA&(o,ȥ̖Z1~*{!rkKLw: -۶:K zJlQ@T5ifȱ(Uts`3"H赋?S5rj28敐uYcSzl ٻC5 e7 uf? vbTQw)`ϧ*WO`-bfj,-ӘZL\ 6.5Pbװ\+;x7PŽ3:<4G"I|M$ʒ#PZD,/'s> :U+|bSefvOW᰼t5H01Eg$y](ȓrtJ`}ǟŎ0,ˢ!]fz3E0o+) )uV dRm2t pS-՟p11D+L `;2 'X/kHE"eϐ_V-IJQXf rlp`~̌Q^LdX #ހEb} XK4d.%]eV,>w "HN5QCg:Ird*ahv^&Pc@C,{NAc&m;RO2e8xZ` ]D=Yӎ8=ʔr`EDU, @Q?^+0mNݶ-xC3 SlbGJ*c7BJ"BIFPiUNձhS7 Q&G-vv 6RW5 Gm9ّ7-E1X4d3M^Ses!+^]%{m!h-˲^b^O8WfVo-^Q ++JuM!,+bYI3hWP;DTR4 B@0"O՜q49!2 Qa8Ta0 D0䈬C0lՑ9@y>qm`0PJ2 [lۉD,@.t|כ{n ?1Cl E{ڨ \,ѿ ďPTy?yg Ʌ+"ku(H@clpB$tķe;EAOQ&Q4qp C6l4P",?bv˲]%5uwolDZݫP-HD,"dun"[P>rpWvE H"PӖ>(1(2v9Maa Ex8(7rBjWPQ&ͥxZan-Pm^fDoϴlL5K(4 $^$A wʌI %dFr, ЊD‘w;Dr4 j6b/n%$mG@!l 4'8A +Q0@2_4? n*Txvk&Qb6ZDɲtU^ O 9Cs7&;^v&5Ѹ!n,-NƌX2y0r{+6TcJS!pWLGe:W(QݔeFDy; _  UeK'2Z(E)xkp8 䛈UCg@nPakn3t'WJT sxm8~C/)9FTQɚsm,VYB#uD+69ƕA7,Xc1fbuhmJplt*.0&&fmcTZb.^ńl4͖hq!5WHY`,Ƒ]!;2*xW)eFmۺfKI0)fvg\rj d` t%)C2$KFFRN׼eU^`DUD3mtVKE?7 rt8BlZDYl( 3?]_dw23UVD .LǢ( 9vJdg+=֬E V:jYbNLg˓eU(Q&$wSYi`!7FTe xQVAb& 1xʠR&RX4g /@*9l;)lSr2HUeUxZ)Ve\4d[MYNXi <"EKA2{Y^)U[.FeP RVS4<4OYZWދe?"{RYN^nʖr$ee@C Rs.5%.JyeQ Y/>Hv5X !a,1ެɣq8:#'+S+A=gƌ~*բHi:uF2񕜌Mv2d!*^ԼkiLWS<)*Ji2ᠫH0Ϋ{fl+xU*W+Y+9']٘YE85^Tz9+|#Ѫm#ԠY<;P-kWrڋ̷F+E ?̺;\Y÷ PrdT*Z v L)-@ݸuAˑ8nP< ^&[XAB,&J1[{]M1-S.$ ƃ$G'CiyĚ6 +5pMXr]ANM -Lu!_hxTU3{"4@i51Ʀerz5£ڀ˥N̗t1? @3ׯd'D,"&)JHW35Rv9Ru]ݝh&\ ɑY 'VM\ A@iҫQb,sYzM06LHP"RPB*rIgi#C):m ELvQeeTY˶Líz\IENDB`astroid-0.14/doc/astroid-tag-multiple.png000066400000000000000000011736541335422170400204470ustar00rootroot00000000000000PNG  IHDR  UsBITO IDATx^xRH!HB:(`WDĂ&(EPDiH- =K.w\%܅}fg޼yS7nܠ* N_8@ @J(?t:&;}7,@ @@ޠDv0A8 @ @o"!q7ڛ[@ @@D"yx) @ PxوEe B:@ @B l @/ZEw]  a3 uL釅bCdՂEe &&@8Io2p xBŔ:jcOqc1E U[9b @ 6}F<( @cěo4>,Ea@) !rPl4h xrQ{Rc$15+ɍz @7F& @ hַr Y`" r IKKA ГDـ@ 8펂=@ @= C'(f^7}CW0M{@7E !4;+s޸q7>5O31w :ez9SO"ko5g'+;'&6}^xnN{ ,@&PS[?TW+ڵmz:'ߣ'Z\cԺQt$!1l}KuFYOsRa7虗FxF?HJ)S6!<7ŕ*D lS ^r\!+r&*[FegKm.ƦfU7JQgM R7BC^8EY{韋w+bs+{/ v׭̳zY^^ʏL&>5摑Q6 ^m{nfi}^|u?R)-SoWTKMlFhՇˆzW4zѾn*ʔGwAK hً҅Bᝃ|Plfi3h@;"%^y;5Mna#'bspi+&ӑpvCu- w^>G#}q۬V:TӘ.l}۶]K)oڸx3w4֏\vu|}|3 d &.^QO%~ m>`:4K@ں Dsw(c/Pr|B  w;f5..`Nwts1P\ljXGܲB)RShߖKh [&SHY6An'_`ֹ=k|ZzƼ]xWBvkZDń3~ҩPjԙEzYz}ϊuPl Y=JǗ(ԇmDPڍ^{uʤx;w#1jqcF#ȣ9QK}ؗ[('Aҫ[F_iXEO9<ѡiAo^uCyG*ٶ q[žx k'[V,2g(5bw;vak4[o^8pj8G>xuCr:iV6Z>dLs4#2kcΎ;0eڢz 裏*Tuŕy|3Uj1wzu'DUU @}}PQYojjb23g<}4ᆅcqo,\)ǿVңW:1|~c^vtZ^y*"+nɽ6 @7`ߢ~|ِХ?3E l "o9ĽA%vv/H$g4 USXvt3 >eJ(-ů%2OˈT=m\crw}8\EΕ;cP e|2E %|sX߷~^3FGus|dGaeer_ }}|=Ipqv݆ dPV>?3޳9=9[u݁gu|yuBhێ]+D{7 +Piˎ]q HېV,]_y r%7{6sDAcѿG|w}7cA,[sm AflUB"NSv! p=I38 <n5L"g-H}T“ K*԰ljubRmmmmSC0D *@ *^D5U6?v-/WIy|^zeD䟶}.:Oߺ4BHrk:J]J-gA#ŏ]e;_#gCƺ3*RIuVO6JjoDAc:Ē/m=U.:oߦzVM͜vg'}񂑡v&,e"ooi1eFD[o{6M8u Ej @LSR`Q@"GEKr`seLzܰ=$5&&)=+'//:;nNw[8|BusΞr]-Y3gL8wCFaW_zQz2ஂzz6S\sJ%d㲠5 \X ^Xu -UwFAU%VD[z:Y]Fw sf`?źk@3ٳ177QCi Q]|v7m6fAw##ENʢ2(]ʐmȞ'MQv$;%4_̣vS9]X~X9݂)\ 4MFZ@Ef3+X˯ߧEԦ,GGt.ܽppɤ;X8jQy}K?ѣ>95v( sOdfjU.>Қu{勸UGU F٘ݩkn\Vśk'^7`r*yqJfxJ>u8䰬KZ3[iMbIXjCFMR8_6oOa~ckVS~7բ쌰RS]֘Ndei}݄vݹ{Oc#hJj*pWZ F,ZSvm':":, "N9Ǿա"MQsj+ v1r|*>2sJ:4Q-E멢6a,,|*e\ꔯBcDQl׉hu_}A$m/ )ix J߲on13}QVgٌ]?*>I׏iۓԨJð8ŪEPs""?Z׈4KG!s!68~U{otu_kn*x+]+TΠN`OW,;(cb7@+ʠ!-|>6 m~(H E'k7!DjCm*rg/!/lp7Q x܊̋xۏ+:kd~5$sG6oV^9D fi?{R!.>{hN#]YK[X\V!'H%-kN~٦g?niz.ZKwrxP]|0i0Zb=s;ȓR$͍ѿmYp_Z$|㏟ǠvUɀM[?FKp⢍HgDT?SH39Zz>W(Q]ϺR|尿s%H$p*sn`h}ȥUDX[sON!^!j+gn(̹ j$R1 y39\  '+P7%kQc~HC0{h%P}G[o1m1Wm g`i)՞u~c1* =fT}y`W(*Pr|!9ϯEzͣҘO-p,ȉN^~HA'MOu{:u_BCRQm𲱻XzH4o_Al-JrYvӦ}P?Xl댯G4_UjMZ$릞kmM3l}&W [8%ejK[zs9gXΗQV6qN(if'lƾߕBC=@'0ss m\&+lLo\I6 m͛`TWiݸc# 6p^ fʤ&.ϾwF/A=g7.”I=g7xW+1nXA~}Mh4O_[Vu>}6 Q"=ܹnŋz4y𰨥_Huځh4XhA=ၴ43ͼxɸՋ;q u#m:qr3D%?n%yoK?xە2_o}sV-δscA$pW,u+CB]f;e)7$ꋟ! $Xpla8\A t8mMd~/XB~To;,  0(!46Mey3aL z!4X>M"U agshւV@HŧA;E F=QπAj@8;( =J"˾iA>Nt1 Gpht< Pcp&@ !7LVY1$ƚΗۗ̕uN*3=5i@ LN X۾XtftrVAUG$Y: < q>Ƣg@ $I`cwp :/@wT١:zVOgա ~3.@DW!@ @ `!4J @ :8$ @ 8Fq@I `ͨ& @ 7s`% #nLwI`3Ti Wd@ $A3z3 a2D>@ <f9؍& ЋKP"t3j\\XCu@"dccd2(X x †'nІI!`Ȩ P Nuoyk* @h rak]80t0]I]Id?z:Zl  +@ VdC-nP@ @'>!#==':@ @ =|z @ @OB}=u3^ @ @' E 1N>]$ @  r}JCHޘƒs@ @ @ÃB}BbhV Ҁ@ @H$B`B|(} !' @ й9(<"BbEv.n@ 0C>!"TBBùa @ @ASCoX @ APw`czA @ @C}& @ AvqeS&wΒa+(MQ܌ʲ71WR903ij^7`qb8:H%{W.Zٌ Yc铬ɉKss_O'iۻ@s-"T*qڍM3OB eɸ7m]RZW^TPVYi%4&ս -l\F &H%-5FZۻq1%y˹KʼkҁЇ@ŝ7߿d*Q]Yn$ҵ 5 IDATH2]paf~ Y23:|b/zȧ9."Lձծb~%fUp"3+[/ߠQQ'yT.ӗkh|s-w6<)o7Wy;gm&TS[W[WW[[C M}!;.2ظP__Sa(;An5[}+|F14ʱnDL>'!\?c̴Dl QݭB\FM-rXp1ɡ6Ԥ'Dϥϭ{ v!5szE+ppW5t#}^UG8 9ؒ؟ ]ה'Ǵ$|)2"O@ r]݄rnۄFi8!{\(]=+bpoJc7k+IHiVcjLZo \Vl&>=ڂIy{}Eip,lۃlYO2`'oz&qOf?_`(!]HQoE]} E;nT~9M$@GkP/gZj]ݔoДo."s%}+oc[pLSK{{{;4>6Ճ&\ Cg&Pc4l0$9G >TE+e.X/Yxz9Zs+!%9,"ѕE'ë(D_i koYT0c#g斮M.YVRkY?ʒz1<ZYn{aıwz*(<]gvx`sݔERH5,Ǿ`U+sսsH,w;-potlF%7~~h#zٝuL F_s>"XBR07%N%æՓ1OB.mklp bd5xꔳ)f4V GL;]X .\qtC-ЯXU]XZI(4sk;/@O35T<*,C%T; .T/-,*pyB`[88xyJS&+5#=a„,PK1u#]&~pr^'RSˁ"sk$GIC:?tk#Y>PS*-$RšIxENe~BBR|JZAIE]#W$ZZy 6}H[jSuSrKةg (i-Wu+y(qf?3[M(6{ܢ&oȐ3G]ٱo{e~sz2VSriLJKfoUѹ(ofV ,7)ϼ:qJ֥K\^ {`iSG9y;TjϺsK9lwЧ}aDXw1)5 4Sk~<׊JvmXA0[19%lNHJw?h̸5҇Ƃj0*n*~Z OֶVR̩C䋗aE_K>rU~>J>(9hi,g^HTґII3U&l4SKs~|+/H)=MhJ ,~7E!AT5[Qo=I< X>]Y'Qޭ"`9aly~A}q1 vǎԺy:>+NNjl-S:֑x .X\_U}n8|Q2,- (J?#~(C,E(r_G!9~W;^yo.]su1[]MQEb]]!TQHyEg_S:S7Hg 5ĆI+*H %eE&PVb~],mKxeŵFm~zv6jˏ2HʒFP(ЙfNn>n;G і.nG7yih7f:t l7eI-V_K $vujȌI(LWDHo@:vaQňaV\SQ6f\X9Z*kѧ:QnµMPS^لd(0raiɅ#?(ZjgƫOb?Ңc]d/Cu/OPBHBc5n Z˅8xQ$Z6 ?,IPʷXBD6J37=-mV 'r J)u q #|j(x]A!%.æbgbH9]/@im}nžk7Hc:сNUYwߴϠ_'}qor}%#qF!Aٺ/whK/ëhW?Q_{1) g/+ *2r2{l}%X OLWxv[FINRrΛH[{p]e׫T~unWfT&/^uL˖-mhYV~Ac'L!ԝيNwPwE D-\=b鉚xΚT18P ǻsKɰ q󵪭Q\@S~7h7F|2QF4Qsu\lj-ɥM STTjD4+]ٳclɫ1XPu/VӐP7[%T6)~C]X^os[6&,M*5e`m<1&>v 'wش辊됝\Hx}B]t [WSSQ^[sjW7A=q5c!vë,qjmFg $*1T>t*=<#23TAaɊ t0oVO,kn*I*h'TСF}P"jI](OR ڃdU/?14CB =uqC39 ʘ. 9X[N۾1C\LYtaԼ]5Ĩxv|€>,:c@gs@2W0MgO,YT_? JY~ şL[6pc8&=j&:}SυC[<Ǒej;r\B^u<^D)Ao, B>)2do AtT>_(ɐ qdY&]`KV ɐU]mC( A7׼9͖ICǾɘٍzN3ĸ&P(Ris!)$S'uH5kە/{{'YrE-G ~ɷGW<(FBPE)Rhԁe1H4%hcPbauP0Q8T(Ceچ!~BUP_"QF4E2y☈"}mI%qo1eҤ#8މA}҃8UZ.ުh+ƪ`GyO(0׼q)/?X?j3s_d&;&n l#8Aܰ>&t:ڬfbn–O-YDJd41H&>:M8u3! tWUXҀFG/BfjY9]ٛB$ZjP?W)˶EdURM½kc h\|xoX)MDrLoR"sXd_s1E-tlsPk1ԲQ@A*AIŭ|u7aSr*^DymitaytNÞhц('Y!DY04 *]]Yj,ic4>(C6d*7:"'lڱ4;Fc="go*g?=/ROHd#d2:'[(R~ ?}W},hhWf$G"K̀T{4}OdG7eڳZV$]e忒ǿul= :l3t[*{aJyT e["P& \Q$̀ %XTjef-9&v6i6=u# Io>jI(z1l`qCH{XDIkߑ%ʈ}C_1SkOabT?Ä7  $’&4<.=<:ZoI% i֖VVVݿtJ&ʵ^M8…#`@51ƀFeOfFWI _bE;߮UfDdNCkn pk!R83*u/FB4叩Q@,G@BH/iH* n'íJjhtocQ*I%/16Ӭ?I&IT 0%\zw4"l؎pBWz^49^*_qZMs*Mh Rg7qBR,ĄaE4 腯vnB+$ЅUl #ߪ:Ka"3B\xt:1֊&ALQ4^a1veFq9f*ju\\i=p䌵n'HPXl⧳~7NƏ?V}EۓB}3:"7ˀJsBB|bjn;. dѯ%Ŵ&&sK )T5R+ΦS}TcCef.5P)ۈhķb쵫K 9T8P7+S Sm{S^W8>=c3\/]㢳CX-TBmJDDjKH&N^}M8…%`@a{9Ԋ%NvDHchP4=['8*3+јʁ(g~R\δ4a}LbpFz>Ůh"T:+CJ&R YшfB6`~u?,ѴP2"R壓h-4H4J'j β^IqKFC \ R#i/Qߌ Vi,5ЂPɦ_4TN̥@Τ`utXoV5ծāXŌ,h"$ak4];/u(lxE5!mnL=,O'+7`pӗZ`f@6%9kS #y`-9JSg lۑG.jocS5x^9 P2/ 2RO4T=#9}AcZ*הtlGov?iij3 (ȩR o]_5CT1S$kʣjͭ&eKFX|I=g'Pi^8h:vUB,pݵtuNwڮ&6K!g CWwR _WM?>.U%wyU|GؼAa欜dX7|P_J:GECRs&9E򟿪&!1vC-N[IEM`4T?Şl<>6ĂڿEk?oji.$Q8V> PH2[E1!G2ᤠMA&h̔'EnfKѨ`ۄ\IuFȽt&R8d+u&nHD͢|XJE~4{aNܩD_?J]#ߴR>M7m25#bo/vb~cMryDYݷCcHcPkQlPn]r .1['&}E_Q﬙+?1҄%s_-k]~q:g]'Ѡz*@jNZ.J7X3U)<,.Om7*j0ڊd:u`tvzL`4,p1h:<ʰsI 5nZ%cl0.,X]fBi-WV@/MOD y6`6#N,NQZUyb QsLd:ϚŲ&Y[FRUEݢ q ћ#]>\[TFS$b 4& /ސiC 뢛V)OLqR:)Q i`j^=~D`QXXB!Sl?I (LT›J۷vVH",M!e4LcAĠh1F=J %*˺oPJWq/KIܷĝP"5sjr3Ϟ"g]0ɲ\4/U~mDX|euFleFN`Mo'.ĥ9hnm!!gʼdnUa%>7/=fφO/ɦ>ZBz&杓wsS`(#dž)GM,-h w? M#ᫀԈ'u43c9o˪Tט%vpmF"bұ.[ 7܂Qh4Ú1\6~41,@Yr"" 3̍㎿4;ܐsV8<2m3_w΄2UտV]2b4kfY/$&Ghx5$b΁_ p -x*(-9u}ZÜ裩4fGsآ,\(IfYt$V3ۅDƣA`IÂj5B-0b(.ǦL-~eC"Zoi1ֈJ!*oflR鹕TmZKT=̥{:1ؚ7ܦں#uupmaM<*K]%aXocysMIzcKRx+1I9{_bFהG]A}c[sҔ/_Lκ+[d7מ(RZsg (krGtUZ74-ֶ6D  q*),oI(4 [o>~Y#ٕW9~әVQØ9Hbfi/<֪ja/<]XQ\:aTDe嵠S)tM뗚 bmFڄf2>p@AmCVuC;oᰬ'n Y6YS:aLٲuMt˨ڋEQV;qi]lm$quHyjnY":oyȨ 5=]#}T8TOFa]*\2w V9T{7oVs _ tSAӧ8] h5Zpg @gC=H·owXMvbg~P"aQ, S(N03Djl2a ?wg{MR_U}đ{5:hS # nOoJ4Xzl k=֏va3{q~ |s{`K)&"ȠhC >0dSH)P>W.Խ80:Q-eYMlgolV9RQo`*6P@O!=E1;׭u?6%#И&6v}D=5T "@8zv~F2H@t2TAap4} K) @<p{@ :Eb:.K2^89@ @77]  @ 8:% @ @o&ao`@ @@2h? *Q.>Dq. )bR@ rP/s O[ \@ $ /{F x?d/= B [jJA 66;:@!7o^)5*$  @ @ z1¢2i@ @]!E @ z1p{Ӏ@ C\@ @bƃ<0  @ 62@ !7@ @h#C@IJy`} @_}zݏF0(!  &ۃ'QKŰ;*:e~ s5VsFBT1t#43[/{8{ܜ'9q:P !O߈)Z8>khO*zh/NMHm2u:vڂSسgϜ=5>5]':6y֞!E2Mgp1 "K׷3J.K+P8)DtK'-1cNGW|t!M515zDxxmjFXvNnCGjIoD~]wi5w[!d}՝;1 IM<?4rTPc+Vcb6B'?Ҙ㪂HB]~mlΩ*k'mdqk-NR"EXS|^Z"Z?1%':\)AO݌{u19 5ڞtBbI1S +>x]JWUxvLÑ犯/!}ƯlS!(V^acUH%^ced>LYd=J%˕Q8n%43]¿vlj")ΉC!Y2Am:Z :uGK7=P.,pup1>RQI"oF\eOeWMBIsިe(> w+xwƭrư/hg*Mݒb0ikugҭ]UC"0@%W؜*RXj-f!Re!918S@ ^acq7%Hev<﫮ؓDU'`)p5@O%v .iwy eq)n8XE79PgP *ActWnFaՃƖ&Df07h̩nvMS S y;&페f1أ@PA%^{<gYWRZ߹.r -P=&o͈`O3=`?ά~|hGYTʽ;'y[a!4D9{ÞxA*ewD|c&1WihX{zȧe?JREd(*qǭ+E-R/_Rɝi1:$P%M?*dbS"6.ށ+o^GTNj*B6bs3󋛅RK;AçM._ϳpD&BeC]wlF_t VCmɖ['e6%vFOT11="yqoݏ/Pn>A#'8KDuNqoܾ󨠤enة=_V)9r z,/HɩQ=F|"[{x %u+/D{ZUD7 8}Fd>*(Fx.FLmwHLr 䆲ꚺ0qn^vʁz>7744O@,*CMwB#Q'DK(_IC?tr*V@ǘ?[V|F=ܷڰ=;φzas^ʽm+ߐW G5‰p0I{EMI9!͙%" {f.qgŜ効iG,K-[>s7Wo<ɋ>'JG7dR3O|^ZINJon!V\:??:qnFt1ļ=3]E TU: UiO)96W޿j9|̜-(JK{oM7HWmݾ+۱әeɲU xq>/+k,KUvW}_6҇e5ڒeaźiiD׊8?蓑!; U5v+c!hd=C_O^vQ]R`$ѳREoϗ @]sHNqÒWf^ϻ"NAlŵ5uQԹ^]Ɣӿ-RrSF^6% d] !̔MaZk)m>!zҔۡ3u%6P)n]e$F&Ӷ .櫙򸽐[%/P]ӿ+nn(̊/NȞ]=X_yRL{a>G}wpM$]<ޛ ]("`G,g,]X^v*MEAFIҾdIDp/ξy?y{{j5$妃1wkӺA!(,ٮW _4Q.jxR&vGL:pm#Z.Woy^3sg&X|qʓZrψ 4QZv1eъ1AP6"4#0IRRe)%[5[b)B!Kv/;BDF=G.dk׷kۖFl])+mܣp\0"ⲴPD';$xA`A7z~ynҵsvY@=ͬM%6wwumfcmdb*> >w祐_tk1@@{P8ٚMUg Ul8O]_[/{12'XGVIUɭ .(FA7]LTbm)/̎oȼj7KӋD |" IDATAپRlC"+zV9ާgGSKRQR6_>2܀6yeb3BSYt[71H$4&$Ӷ,NU|

+C<+}MF2)i0& Ny@6٤iHt!K. njP7+r1Щ kZgnȒDiչs4e}݌5l#9i֘k1*#h8AC,TM})ނM ɕ{/NfG#C޳YۡUg]$:T?Z7ww09:'Wƒ_pw"{.nc2jK50L4G{{}-K"i[lꊔ1EJcX7}F@&:l*nhj޿_cQ+>>FM.w-y~$7Ʊ\ץ#^KVh <2- YPUP<IO@ká24ZtFÛWl.NfT*ͼO4 J3uN\l;tjmgFҍmێkj_:Ml`N1̜:o6U8ݷ 5-5_'5051x|v9 껍DW *m7@hE Fص Ius +#0nMN$|DW早A}-4,ah?r(OWb 0H͚r45]C* 'Vi!];O;YpB|ܠ63gȅ3-DZkR%ˎ9|V\?4v̼%Zq-3V)Cl!I  jOX}cOI(mUNc'܋Itk(22,ڟc;BYC (՘L|ZǼM򟯁~kz[kmGΧĦYa[XdlC+狄UӇogIl M S @3i>eeP%Jak5_), [cro.KCj{q48 V=S0uW:q^޿W%iPl\Y` n 6bk׌Dpc~tőFhLD&Rmk oN_*W,pL&Hb: D6CB_WqֽVgvbRY{Ym vIZ)Y72%~-V!yc /oG{;KZ:ID6򮯭HЌIK[ ¡n ݆e $4(0h`;-mf,ʼ3B| d ~~Ês ̞޵2qDP6iV+,[xAlY7c$d(eoژmr0AaK?JmWu'Q_PΚ/t^.$ oM@(lʮ羀8 Eim0.3w4ǔ[XV]1*jKY;G"V3h4 k G+z8iKr-UX2ը :0}3v$J^v:pSy*iգSw"#P?X5XDk026: n)YAo [vܒVGF@V]O4.,Y04E|` Z^6XC?Rfamb":ukkm|aG#fߍdΊkf&lT A- dbt(ъTJewJ46@x| E*_qUTYOTJ8LS^kuJ=/@Vcѝ/e!<:JUgG!V_Gh@|<`#&xt[Zj󛽘U VrLW"9Olk!FmB>ks_a9F*zA2TP2RIE_{6 sСB k$C&TMАX{כT:=W2Wi,` uvVjԌ)XT@Y /CgGZJdKA-[]ښ鳙XTIOQozAD\TD$M{qˬ{ePtNP6EEU#B :'sn<<R~<huQC?,y+U:Qk!1KKGe="bMI**]4 "N׽Gpi]/-}0Z0.*lެy2€& .90'Ih>2qC!B@jM!.FUg? ^m1vJ8Vzށg9IUhZ;[huܠ DJgZ Z̊9st?Lp!FڮpR&<+N` ]d,oPA'CqO:%>ENSM;(e-/XNF6??KuAu~XhȽŊ;]wf)LB&zА(VU%qpKIS :/\}debPgc7p^K nD @Nx\9)lz7pvu)\dE*T^`nF`"M`ʤ |~՛*]a  mPZdMY405%ò45pfh{ljRU3UBZ]k^L}"C -\u7n4J>S]P.zT1t+ޟ|zKO++^Z?,fgijo<=`G)ol4YKw|;{LT憝4Quj9}ϐ瓥ݶ]^۪z1쫏VWS'$n2AjvP{-[}JP(ƿ|uԥY;`s0"?8m󁃥bԴ-#=, 7rsDS7U/-ڲqWw H' Q*p6 a 1f eN,6)Էo~3#MZ:@V OxxJS:ҿO%U yYǏZϊ@s8o@AK[0Uyb'3f:Keí`Oػxbh5lXڷt@*(xqz.s8ezljY|!?7)hVhnVܒ̛GȷˮR 3y%߄SWy saڗ Y&-M:z# F/AmGlG!`L4APl 0vTmzVv "/~+dPҗd6?|;=0BV~|hΙ =ZRͽO0>&FͮOGށN(d$< =w}c)({08y3/Hq?m~~JzVy8J[{wD^ ]F1znmp+]з Tڛ%>4 }֔F n& =e+>7UyZLMF}=៪Ԡ..A>jT}MX--hbf >|-!YErz7ꄃꜙ=ݡζ+"''ڿ3ˤ޿>6lYI5~(ۈ=]K0mA켤4^2;ZC: AL #$.5-v>-}k-_]z%]?u17*,`k:t}^7A_8J~{r2){/Fqoû}Lm0 m)qC{|p=Y|L;`Sbʽm5k4k+9!ՀC/]9TgZOY~cǯL >%XN(9y|fcdʡ]={Ď`} cALfIp徏 rҨ[) }rm4b2#YIW HF42xgIss@-z|<}XiAUwiG& ·/Px ]~cL#l @+@f.m-޲6@c&kWvi,@d5kXD]xiPzʬEts%42k;/ c}>c <_@[_vjk5 ghi[9ndB [ջEszLPIWe9it+fZP]+`l)]A>gn-E34 0Aee#^=f1$ Jcxn_•,K"AKj3m ,X_r%jJ7Xw"IH"#8924R@F@޳}&uCƑ|,:O5\5.޶T.Pd&L$1I72|s'߀{<Y6DDDslw82y*HP1%Q΢'"  h| PԭMI 66_w-"`H D,u- ;O^{5qc '-xВM#          PP:5F6%F"@"@"@"@"@"@"@"@"@"@" R!TyDDDDDDDDDDD#@*sɦ(CTC^#          hqȦ(DH$RH@f|tVn,1I@""@*m4`] AP.k2񒺡xYl.K]bNV7&w4~![W]C,$ _>7{6P sdejbF5_^:I /VN=VUA{~+\f& )}g{sxmYWLrAMVOĿs䏡,uta{+CՀ8{ wTJchڻ7]7g"V2P*c*I"@ʂ琒AI%T?''_$(K/,N"@"P_BʜsW9f?q,kH3 nyֱs|f{(1p_TKX0-g <ޅoԧȠ IDATZVA/K9Ϊ.,U_QŜʾYkh$:UXp|«d&A>>)[,";5wJ p t}}'zu쿉F6zq{1ZXYxk$S/ASƀH$X04`{/,=T ̇'_~Pl3vYċ nuƛ (6#w( N%\WKܲA/7b}VA *^T+ڨ2uHvBg6I2!eFA1| p 淪[ @K"P/ !ӫb3]ƝIrʜsb%ַzdRyN& -dnuȴrKa+zKbYONaJf$w7V5~>{SJITki ctVg1I#FV.R-8҄mBehwNC^h=ȣDu)2!e5qi"oθ 88O~e_>YgzsÊDl9xeGn?^ Aړ]jqY%iԮu,`<ƛk*E|I &`?3 *9#ϹrMۭc˭l-+g{-"/Ǥߝt~UѸ]F,DGX5^`~![Řy5~|rrNI1Wh۫K.[U$ &N]ߎO+Ϛ>ӖpSvo^WT sO7Zx}ݢ$아'"cBވ}QDhe @4>0ԧob^yispg ~J_@VLEpKE޾𶠴oӵ3SyVBK+Lumsk'htk&V 5LZuŕˬ҈@ mKf%4И\&];Ura֬e!}让N{UDTC آ$kѐy3Z˗zu٥ ߱=Dntisy%I7NPQ-7m:$s*Νrƍ'3sm=,+nLp#$?_0qn[QD@yL78ijc `NVz@TkO_V]ztU.5&( K~Z-Zm|4-I*7wr&3o%bIsZ\)@>pܼG_9~u ;AU]ũ4%1;s4D*)8eC af嫇sx̑m%̰s=R^+ҙ`ױ¡#g޿g<01 ذ2OHx b;zY(y'~`«"Q;vɾ~=;4ݑ?7ʥ-{gfe|%gQ̙{ܣ'wlfǻ~; TUekoBi{׼(EyyKzȪQi&V `7/.[* Oysx7^Edw֭58-I'uWrˏh)M]SPF!QϞ>bM7o2ip{[ wΝ%~W='eoo;RnQn:{sWU]RP+SaCy-lLplTzJ#/QǷ?T>D\[̞?ȽxW׿T{Ė_>!:l?n޵b^UQ^{94?q, Nuu>d+/|{;]*qad(qUkܷs Ҧ7$ˌ%Bو ڌ#$1f]EιmqmmrBt)-gC6@mpị11!Go\9TT`2M%OhG 3hu9 Y\vow£avuq1V,H{߃3ẃF4&{ e[zsPF:U}Z(XUf]̀oPofb쁵W<ٯ%>軁8͍d%guы[x'& . VүPBق487!'/"_V&cԎB9 2SRlDBW$ s6kyv+>k %#OA&e|`e狰 t(SUh 6pYp5B~)d&Y3mȂtm|ܨ=X(Co49(B[QLWm܄C,NoB(;k@sS ZyYibrZhmJ=Jxt_c;hY 'Kujz;g(4 4Bv3}Jp*AT9fzfF)Pv-ͫ\|56.q`nzlQgco:xe swkR>/VKeΟNUZ4O^}bmXl_t7܄;{]V1@;f]4}b62pfW󜗧-~,x*n'l>';[i"-#m-x?T ހ;.crŪ rD"(Q?jzLT]ξ K]=V1q P xqzznAHiF6<(]đSWer7Lꪶk3k#C}uWYQ;/_;qPDa~ṟ#H~9^xsǸ7O(.yٔ}k-2ME6B!Ga-`5*#Cy<;<ϑEgZu;x[i6M I1`Rl7T:FR/Zln 2<׵{!`nSC6[kOXWFjZ_?sQ`?Tx$^>dihuO:) ^0F>XūzqKs!ȏnd/KdUD>7 H/h[̓+>NX+C<+m'>B>˖=+ʍ sl׳)E%w2$ ~Xչs1 `ײn Vߑ؛ $؃_?UY+zY3&Sfc X ?DvP)ٸC ӺKcY,Ug]$:>83o29MartFOɲV']QDw wV $)[Ä #н>ɒHk["e~L+MТJ{XԊ2E;ph <`G"Z\\IҴu[z2Z)l 96o _Q 7:p>-A/ j)Fp E@Pk;3:nlvt7$\SjڌԹ:i)h$XR嫒 O[S:alg"p*UZ[$: J6q?^$|Dp ty &s_plĆ;l50ij4a>_]W yI‰ޚu _h@M4*Ská24ZtFj-(/7#HO^st+ҰYmx3s0(l_u0`cעhXƪnR*M2E:(Rܐ%ÍxCd?od#u ˡWOg W.@nj[r@BeA^9BC=; fx?A}{)†݇nq‹60AR8ӎn^Ԩ g^S+Ņ]uxV5YgR_׉\v.\GbozssC O˖֟,SOOyc C,jb*/9MG(?CPlEڮL 9drŦ((_> JpcKʢ7 0Mu jg2v9NT?(/{MM%=R6@*Ni5<KҘhu_WMUoJāpHSΗ\lancˮ Yv5Ϸ H%m8P{S21AsL LUm(L4%sD!ikl9] Oe~Cf',R$sai:~Tcs>z+6,pK_uQĆ :/~V3:]!ށ̆ѤHoG+#heA(ypkVRX F>Fǹ<^vu8J/tkNoEP|qŢqG/n<^*V*&}n(o+̼2h\U!6 q{&ciqS`^-EH`^<2Icc-j-kd% `.fafmbS6Njx7VOT0<ۙy8a}D"9ɟt(ъT+Jn;hY?{^bXƒ*=oU:TY6 i01Z:q^ @bL_-C~Lu4+ʎBʭO4Kym.Ҽ'7{1 :@!:6RuErxBJ6}  Rg)-BAr [*zA2)GH^ կ^k%qR2s@U^ȈB+h]d%ا@9(V$8Fp6+<LeD?Ǧ4|ןH?.c q).I?aO%oup "j]OhEcW6e7*y.]iي 0Mٳ)@$Iz8y&~>:Ky_l$̮( ScwFpȈгP& ͘w$^4[z-UP܄{EܟȈ5y|0^){\IRo1شFGaz cndYcN;|H*;[@uܠ DJm +ϬH 3=Gc@Gv+n E ɔ 2>M0SSѴ=Kܒrd"!g.+ XQ|}M#SIaR~dBBC"(Rۻ\*ۨXZNbxyr-qFګ'++3Aoh9d6rGx#8z<'+p,wFe*,UIW$(J`_ \X2V "Hy9&벍6@i0'_!$CԤg3 Lг_n(FK<Ɍ<*]`L l P,U%A Dmҵ=9@~6O -DpC4[£qfzW 9&IתACPj3EpY} 2)ardAM0ҴpL׵~ )7wl9+;K|wx>1jԱ4XT Fmn DysޏɫemOZA Z-K+T!Q2n IDATMC<h9&Ee&f-_ۭ*IWɜmɬdB-y8Zh}:6H&اѫ-J2JC B!%[9 /j^E\qou $3tEO%d+p;"(<miڮKq3xyr cs$~ŋGE\pliiǡs c^Ub,4먭xm Fί*;Ww.od'b\qʍIT#XfՖzFPjJYD8H|Az"㍡M[7.~ IP^Iխܒw/bϧǬߌDUWQeqc;a5lst<͜1\9`cs?H57p\~U|hg297+9{ߑ"_עH Ys\#×`du=lI <Ɇ@AKͱ@j?E;U|xyBrWes%U d fsd+- 6"Yf_Plݼ{*}:,W{oߘ /=q'q$2dP{-[}JP(ƿ|uԥY;Уs0"?86oudQEDzX Ř=b²*Y[6%M}NqrJf(ib;ۀjUD%!FVwļj0/}V_xWfE f>PRV|q̖  MH+]8򹳐mDD4$iѧz!>%8^UJ81/&E AKX}zb? 䨣7R0ࣚe=VCRq@ons%v{v}:8}|gf[^$OI*y-49>2sjD#VsL|*݅Ǝ.& 'l26ʻ7]ܒ̛G j-Xd. 7G2)xK"̟]RVW$8x4=:WͽO{cb[ΒWSKa/Ǜmj49G;-Ϻ6*`ѩ¨{8_=g U`[2?X]J V*[Y-fVtFऀLaޝyCYnb-Dz(23au-iђu1ra/ r>k #x7km~5` h̖HgYnw`Um|)⥚ιJn7Lcg&dO2uA2L8-հPA ciOaQW86j C9I 0xBk1?W,t- Ilpk p1g¶k+qd8JtFKQڰy޺:(]%&;u^G1nwqI.4wp_54o= LH,S' t>f۳=͖Lj8JtQp|ؾ [+ƃLby/vzAzBH^UQH)?>QEKBdC+O8祐{c}`5]9L-}J5R$Ak )FpACƚ]y_Wt#J834'M{1/|8ûrmm9-z{j~x|0HoL÷G+1OT޺Od0Z6hRޣ;MV,Ig|oQr4h]m<2~lc1p@c7/edV7ѧKODG.L4j=bE0Ȋ>wyXαT*x|ՀCo^9tch9-+OPO'8ѯl=>D˷N N$00ԀE4m[1uѥ̌{.ݳwSc]`ql{z:"ycOY rb#jԉTJԖ\y Skdk/tsszBM4aǁA"V ͵ vM70;U HEϕc 5Av??hDyIrZ9fCI9Scok9'$TjU{!h22 &+h#1 Om$`to' a2 1 R+3t _!Fص׿;8kЩ4]=Ν:<~&AON*]{պ6@621Y&Mv]1ʆO'( `sx8P rAݛM t3`ҨN..gYy+F h\Ð)赕P.?eO yBG؀It"SH,]3 `gUsӚYumi;V Ѹ* Ol"q tKqW5E끵-ԣv1ҶHB ń~f/4lx|Z&-m:D@Rmχ)FpB19I[|.e`ٺ ҙxqҸeAc<]u48l f.m-Rv6cijЩ#i5{Ohej%șFjkEc-] ZjLܭ%glną*Lj`6 Xմ*"@6Z~VfSz67cґ[g|oʻ^cȞ AY#*F6gGKc]d1͚_zqdk\}V@I$P-w')7G@/X@,Y z`{*~_:D= h.$:6LՁτɏ[W%:Rg8>s6-ڠJ$PԱ:: @qYGt'׳$["P %chbQ`g\ƴA ŐA%CVT;}Aؼ4p;;uG ݋ls՛8}n]: -9{#h zA|p>l Sz>ZuS/H3U~䬒*H׆0}`O6]{$C}#cg}-SbOE6-:dj WZDaAl{`ȓ!l k5ҡ7h,#Qh:WqΒ: *PFl=s ܗwޭN6n`B{D!P<$ (46T~1p]BqsmLWDU~>KByLG{J%|Fs4ṷl[8b␎aTHݡ/Mҵ*jB^ǴB߹ XXYhꪊ׋6Y?Ql =#3[Gv^4OYܷlZ e5jxwiM_/on}KZN]!b>ºe`Q+򨵜>&K*VW~Lo?z>iX}S$Uc+ " zu..CueɇwO_ogg۴e˧+J_b܃çLV9XLLYMXg8"[<$N0Sρj܆=́t~/ !EDcN3S;7b[1M͞Z*6 7ֺDJ$~;tvt/o ~qMl_O92xCfifo-̨%S7ެ^=tN!9 GŰ&SZt< [˜73644Q/K ;wiVyuѫ7RdKX] '4MP)rqEqtGE@@ U`AA콗h^Ԩ=FccAlT)"Tz+q7y3;ۨJf/F:8> 2G55ШpҺw, +g';:t2CfKqyWOe(.$7ɘjVuY GY>eb.P6}]BTdB[[x}|p@ru$/_@ޏ2S%u.I%Dr k6$Ҝ v*y1me;3QS;Rj6~< 9:yB$L}_K29{)ӗPB:J_HV2d H41HXxj?4TITsZPdMCI MKM9u_kNt L2>s&cmVtVޤMP *i *zJG#ϵ(g\nY7ݝz If]L7T*65L_abcV `̺cߧn%e~>%2OB"SeWՒ-\^zu?34ʉ*ж m s,gcEՅW1WMq\& `mތe8_>7Oo6Gn`[8T; څwxDf~t~/$m𰔂Ւl`$tWw ySt\h|=܎`Bv]0ė@ 4rK^" D-0~hޭ@bIdhp}`ޱ?֮ƴySFR "2)AӲr+ky^>]Eq;vPr1#?_IɨR t3q W Y9EJ dV'Sk>^&Mlj ^V zف|HHk.cdfeHc$!+E;jLuk?x]FE-KIMOԦAu-ev@.6 (;/!K:e֞Z6!B^_PƇ͖6TsN1m[!*r?tj)M _1i98r(̺sbי"uJ7O:Z{]|bN08H~pX)U&mNPlbe׈LJW9+ #I8 #p*T!|B \'< v{qḷs@{hF1Wocly~"$|ϋᗷyjԧgW m_Dtv'fֱtgʼn*xK)0䅥P$ӌ5o~x{.FE;.|Dz"hZb ÂY@zv34e>wq7g=z+i (u[͒HxyˋPVRQbm};"ۚSiu()M/=|_8sSU<.*Ԉ &"5>C|lnT ViPv z^Hm A#Wþ\vCiaVj>$(ȭPbהg~6FH)Ir f(VXy/sZ8 r&,5ԕ烿ԸVFƝ̰€a.ŅqVe=w*P] YYQK~ڜVFͧ 'M?Snͥ}*(%y1O/X:-AeQP[U>f GɋwL΢{uXc 9i_DL$^?A0tOF*w]h`E܀rW`Qetb{t*? )>o R[Ͳ& IDATN=4ݬ09hшwr*{jlP\~隱TNQ^FtHR \EDEfə7güqG&D6V>CF-_9y7ywۮfZ%9,6d}Jٜ*ybR":{98[U#$[ -K]O <Rhi:|(dRp:AxF)&yH!<~lAnlSNpIpmuMaO@_dB5nyտ'#ܟٳ~>G[p?~;{S"y#ʼn𒺹 <ϮO?\(<@\RT2 TB9]9ZY?gyxOvqC5 %U@;`񢶶\VPAXcQZ JWVE/^UO'BCpm4x@طWl{K ;IDʆx i6ƚEϝySL~r$vrQNX:~+Ǯmvܒ1 [&(!']Lu5iԆڲ/n_a=j=#g+y-zvﮣJy} ƿ@`pgpkܼ>6tj~y{-S*4'Ɋ҇~{̘so޿s(/N*OTi?:jd[ț{ia?1mAWOz["9YcOVX_w# ԕٷhvGeh+SONޞc)-RJD!bUpc35"U|c 8(v[i*gLh,7>2WWFSF86؇NO l;A֕X7gV dPj3掄W ^RpW^,)L;셢e1MQ;LWdBawp "SB[}c}M"M$7n[PN$;=Q/> 3u$xO!eWem a&(ZW #A)?:? O6ExfNjl)zjR qu $ZGssAzv&:$"IUj>Xg DR'P>Xf8e3w_o@^FJt[v}g&yVmPr_ڠôi=ԕfnng ao /.TggU>Ier]Dss?D rhba@&ug +ƒl(9I]^ x2+_Yk((^~zw4iCD~B[pJꎝ hۺj|r=gh<;tuR1sf6Z4@AȰAhOa3(O ` d/U#^a֓8j^jMuDEp=D:Z |*2dsA+j(jl˘}#cqT{ƆL~-X@h[$)`I~Jo W0,FASt`.P˷&~:Vh)ڈLU" ׎Ţ~![.PXy5 Oxdf5P$#-+wGT oy*("`5%}*ux<X DMal?TN&ၷ7kaxq4/w~}'RO.{)NiUկE'g*DTz&;QW Izdn (o@< DH$\K܉E2`K/\pYJOMK咽^:v'6T%[)--ml NuW Ku:znB_0Ssq{bwtu Boc}2B_-v);ˍX9 P|]]oMa$aeLQW0˞@4" QqڦF>[7}`ܪ>7X dMIA2NAs&]-4Ii Э,똶Nv)GeWbNb jDƨ4'7B((TzRN :2yHе3'sj%Gޕ$Y&*]Jp^1k"/"S, YzƟ ,X"[WN"\ [1ށ'Dl+}4 (?-cJT񣂐ueO]_-2S"?"`SWIjo捂F׍|-R!az\V7F1HhKQ² |` T|k]ԑKhm/C)סe 9% d>3Fe (]p0v b:9YW2OBMD!sao6T_LIBk缜qZ [& L =,l2pS"dV'߿ zMJ␮6ķ/RqY+W}XE4( _6_qh<象5uHK?In|x8U?/`If9 ,v$?l_*-9̬x6 *FqC-._H kk΋G ~#ٙcZT)FU:!W^Us$d Lcv%{pbd7t'6y^?`ʦ\wQ*#K[D&Trkkfl*IFi@+琄gS•, P%"7B(,}L]y* Ŭ(~{ѽ~ y.mϓ2`u֖x|$CגFIhWb:!N81dh$&.!*dh YhģW[?Xi,BBhnkXcĖ'%OlJUmdžCCmeRv7 =+e# pr+fd}''  MDHxI ,*4H[F転Zf&$|gt! X)$۸ j&h"wGlv:KcpA x@ x~ӼJ}0f42bl5-iVU2_~#q]#f hQ`HHх[ ~o,Q{Ǻ 6;zm e'^9xnVĉGV0U am,1۽s&ܔgNAB?Z; 8)N8'o]GṯrNuޗ,Dq^mNnQ,>=gL)7?]xR/iЇZ v$*Js>7X s}@O`4>@Ţw9-{b7>0^k$bŋ=ɒEmƴLLj_j9m3n-DaAGdϴb6' NejJWJz4YbЂ`•p!x {'=Zr9|vbˬ661K_5G) JH5擱3,ډ~;e=eCzb|2MǜV3;taS~6fv߰-UeO{*Wp$L_ʍ"]m>:[lt9={WKO~*ĤDX;<ܩ-]!gActj5ܽ vv~"ԣ^+0ߑwm4. &}?*5U #^'Nj.(/#Q* ~O:ZWt%`- ml?v񇺽]<y1OKUhf<\ԣFж/4-Saw2[@/;DFfjy:0]N|b@6*ȕYU/.cvT:1e׿O/ {Un{g'ģἏBQvqT[YRS"2@q\xzA'# j\s_W"Nc*J=2~}G) 'QI "E{hW^,WÛ0,At0ɭm~u^/_qL)۹L]NT>?ٮߖ YWF)f6C.C ]"QܒVn ~Nf42Y]d،IM´+?gB&Q [l(JN +!QG' 5)+cV*zTކ.H j H M f/$9}!Ҳ<' jǪ~KZ|1^=U Cռ/6ǒGmtA.-톭jތXux]a'U"INY?6L =9d~OC-%B {l\5{It`:I֓I\!\E~$$.YBGJ"**)Y.[wc;Wn>֥K'u·*tO _ IDATTv:L],hYhcUzt޹u`cpQ芿m߶}]u`7H?=/tr9x&(=iH7#W^D?LegaR@[9?i|٥"9~ w_F HVT6q:y©o3}LL[2kZnVoG$QܠZn%sg L:6=}f/CqT-ĻwO#]M 1BJ|AX)a!)'ǪsyYc0e۴%<U'@)*Z.̟:@9}lk :*z[I~ zCɐCt֠EMLʦ#~kEn($Θ7\ l.^FjLM#2q&$wQS^Ф*GS[{PGѫ7D+K|1X\$`&CL^ѳ>WV_A]ʩ%F >&_tr c-/yt!Xw`O _ fiLȍ6&}h΂9 YZsdM'fu6(c[խ~j 2 X./Vpen3o;p.K@!#ڲc;|wrv׃^4^;vO` $<"˯v+WrK@.K_u$ꌸ=74HР"K+e8/x123S|-$,V06ī-VZ/ް$E{i@.vg;ϭC(V*@R[J.r٫23Vyۓt]wdE,gJ xقJWmʱY"2)YA˙Gt{?mc~_dBkI]pؕ ~ ysI޵ߖe_ lۅ_h=2_4B1nX5m(GAZ[a_?󪠺,R@fW}j`SĮes *T | g˾[6w=@cjJ>jY\^:uh DפyVzoCN]~XϮ~tfiv]ݬ 2bD~ #z `Ȋ6-#h I.H@ HٚKIIyem-f ʼ+[ 1Xj {[ uYx)dH- k_9%L3wPPNNE ̸4nvЀ*~< P 9uD^K@V <*B*S#mpxfern=,"RT)aO/!ueAtib0%~If]L7T0⻰kD x ̿֬?s#0}ˊA[);V}VRGa3~߽N|: 8qꓐȔwU$Ag ^ E.r ?BdK;rFT_]xUs{ǭo2bЛlM/l,zq ]9Q 2$U2n{)5ZpleUսʞ7E9ӉD(ni_})R+y_\ݩg~4 Wm>[eq[Ra8ztk¶ -728T@lr~)WQc$ǐ*l9@UmT 2? -l P :pww <ӛMrAjA| ^O$+?2a) 3s% yj7 y~Y|lfqY-G]Ko uDk7kq73) &mQPCEZQ ~+>\QXQ䨪t56P[m y:+Y;[2ru BeV0)te=c| l؁A˙Vnj|-&%K1}Qo^%gf}*e7(i*jZL]xh4Nª)xVXZjEUM#K{gO[-Hj>$EguHQQ12srj$ˠy)׭Yw,%5N>}{P:&%5 M^cz4ކ Obk,ӽ }Npí"ܚz^"ڋ7|80F6< !suuu@'tuu%g^ڹp:Ps̺2; QARGpҙ.Բ1]fq~лm}|/X!d U!Befr xh[xB҂{N-)+:-g>;|Ta֝<iNMzdTdƂ^JVnr>1Ea. <0Rm;$mNPl.]-Lł8 XYs@&Ҫv'y2dϡ$6X:8Q(B C^XA2@pUmOϮn-S1+t*D~gr*5{:謋s`I)GyïD\={DE;.|Dzԋ"wq2PY=ޕ4{mr-]6&,<^"GDǾzt:~{G$1~[s*[냒& J<Vqd.x*S5\TLfEX kH}IIAݺ7.aS.# N35Y MaHհ/_*kT%=#9cHlTeF`'IBեrGuNq2|(ȭPgהg~6=v)Tx@ =Xa>xi({&L6ԕ烿ԸVF̰Ba.ŅVe=w*^,b3ˊ_bSe:D"] iXOp ҹoZ%$/饴Ku//FS(+^|8XU1c rD.Ρo$ 8X6YYx9c{}y3$p)K ! AH+A_ ]}@.XLwo`#ߣS9fLMuY-UԃKc 'ZZjVOgAeD;~@xhʡ-X8 7güqG&D6Ԁwoɉ!/@<λmW3-UڒM]w]2E9U9UyUlT( Et{rU#ŲR/&MsVm$P٘lFxӢH0)tSBl;48Qp< Ҧ۠i{yVgF/s:|f@fn}>Cb8}y N<uvjW9|R`[ @PT7s޳Fsō^BVntmWL]hGCNeçN(~tkg%? &N7=I˥) tNCE~\_:+w5RAڠǞ^]g9SV[dyhzF|7ʰ׆ջ*ueF(߹++u~ޫrX6 E/NRgnϮO?\(<@\RT2 64pص~<(!BmF$zr .xQ[[.+zZ-ו@zKxUӉ\x ^&-y4a:wr߷IDB•LQI)~m2q 41,  ޝ%\*M[Itqvi~} FϘncY]~ܙ7'Gl7i_ʱ@d}¤+GƖK[:w13TQj޾}IUFw \GW(ޣݻAΡ/\z|\L7)ĭ6sOVY_w# ԕِhvGeh+#FoJXl]uz`4sDd$JxFA^k°X)J6b_v6HC 6|ϼ;1oo~shG 2O玉Ti6p,[hm,jD:~2j,k~, bʶtߤƊe ptkvFχZ;{ 6.(x?DUvK{WChNCl5^ ܛTF3[k2 sG«/DrY@+ QBѲPt+1V H3tV|n1 &,5c4D߸mb;C5:D4fGpjF 0c(=.(3| Dn_@ {b~\iN0 )5T,3s>WcsHPk*a8xܬE+6۰}+Gw’ pIO}*~p'-UuU "6y!2:iQ1kFQ{tB*]3!IzVgl\Nm8hm@$: }l pfæ @NO]Iu^<ȽjӦ SWP̺^ 0(]:3$YICʩ٫0N@|\, DA|?U":npVQ$Q(l`9I]^pQy/zLόQD݀isGB ~4>>߂6yv@cΌ+ro2nړf``x2P[iӵaؤDEp=D:Z |gSUvE],4@!E'[72fa%n9[{"ynv/d"iUȤ}mثi7'',;^e5ځQ(wyl8GABsC/uxFDÖzDoJ|-|&X +=ђԬ'ۤݽT }U>P$P\ u]aXaͧ EmKGp6mURT \`M/jh J*Sw *X{ԄrX cLdV` =-M Lz_ƺ i:hȔh}sN9\64jzT=Ww0=BU:yp3$s];ԽR}?xkH&`GQdp%9h)W3]Ei3<;r#ox`DXPɴ.n"AMޣ1GRJ: v]Ҥuo5޹4 J͇pZ@BZ5^Y;,+ţؾMWYr$m=auaώ%eV-@ cN D1EEID;x84z5-*+5w/zLҙH}؍dqsG 4kH^c H|S|'y{C@9WOfIo[\?\2dBaAQyYgnF#4$Z8v]O8̃Vp`6h$ 2|sbQ@lq#QX@a(x\]P zz滋]dCYîא@)Ȳ +TPR fQ]i8~ ܶšW2³C9Dc88 +E5T5"y $%%̸Қc䞁j(*NP69c h2Ӏ&߮|y-1PU(D~DʭfWQ{ f7t/_etݺpj.j^2;%6iJ z")^ShV ljPWV5|į~FA^sC/Kg A6 |ǥy֔QyC!a2_lDs R@Rfְj+2.JxѲȗH`!K7-|T՛u*e/J%> (ļ$ 2urxߡfZQ(S 7b@a׊FwGuJ u=&[{pٹq1` &ܻ=a8[dw3 )!vsO4 $Ϊc[6bC6@wW֖^HtP'׷ ,rx\Ǡ?oY@a$1S"QEk&*+&Nf,/"oI?] U G6HS7C [9 /%M@Y" RsfTMh0@IuЦs)Qϛ*UrX;~me|pǕ,AKh]"+B9)U:/YvmUBPD 50:c}y}71eO ŨJ'ʫ*z uWi̎"uEoWwӑR!)C&]NXMً 1 7OVVg|].D;# XaJԕ䞭{ +tĞK  dO 07i3KY&K°%3z˄'|xh䅣b~8 A0C/SxTJp -##1;):eTa$1!l"lQ*?w@@䄗NHS5=p !pؖEtjк4>Rk=8qd e[gicB =[Yڗ7YNEz*Y!uo\2=34T@LyYQ.1{5t\۞'Q eʭ-!8 "Iy!.fC.Qȉdt ]j%SˠE-7Bղ864!);K ɁǚO!q5{۸ jr/R#6Zǡq)?v.aUp/Fg y{ K3JƂ cۚns^w+*??}[Z_[)Fȁvr˕z6 #" 56M+~bJUvB u"En[ٿq2FQ1&؄vŷy`G!$?p"NDFI(Ez32_ֶ&jvvaL;d}3!ɸs~S󛄉qk8y(,L3ё)I7W#(4Gb=gsx3,IƤ ъT*O<lg*8=!.DI ${Rx )P Ph݋;ŝ! qm$$@^|2o`U7; a4M: 'ÿ+2-~B{dm.NV. lCLrt/ue^?uŏA@"yoM:tCcp˽o)ǐ_Sv>&kHC3=͙Ss{WWP_N9FB"-5kc>ሯGb9nXE\_7nW.tb2H!FV#' |*~Qw?%4qL;D_V^J E?Bk*SmdRCjKhŞr/2Ls~|+BAγ#۟'nk1+e#U"y '\TIcZt1*9Y}hQu^ ]?麪1nq%W"4dը۪㸞Jgy@֣>r/<9)D(sUbp}ȕr3GԤP* "nO+27sƍ#]gݷu=`}=0uǙRiIpf4S\аM9& 6u⯨X5n$7v35jQS]hBc6!qH->tC{[tg13脭B~XimD)N&aj.ںz\Fx}JҸ~?q^n&<:{JZPlp E&~ ׳s{&`<Y;zt8m}T9u3kRhfF{\gAތq̟֮XlA*Jٓ nmnlAgq,lZ=GCYqlϞU 8LmBzMy6w{qd`A p 2qN6o];5us63wQi mç[mP=?kۓ2MC{x9렆mAsk7rFs#зbހM5lFX&,lpoQS*S7AH8$B fA_TTBl,Q kޕ2u1o:YBeZav:0؋d]رC A֊@E?vG7Ѱ5crɠh`|(߿\}._(#E ?r>fKޛ5āmBNMEQ;2fN1{G"c~NBk%hp`?ҧ @{~6̽ǥ0 ԫ+ 0A Z\FPF@YoEq{ֶۙD!,zӐ۴ݕuq\pã<޼KP7D"xn%X}TfZ "x@wgmDNQa>$`!D"|:@O-k ! !x4׿Q5H-H@ D"h,PD"@ D"3p("@ D"4AXZ@ D"@3?_gPD"@ D"4 achD"@ D"@EB D"@ ƀ1(u@Ks}P>6%6C"@jE{?ZLj4?Vkxw1!wBuȡ-C{yIN9*׾jgPQ}2 Kf>,ɗIe(]krOiAHy[R2cE٣pgyJa9h;m B@BG9YH$+2<> 6J)ɨJ4G}A5#ҧ>"OhR'HZ4(uev&\e_Ǟ&;Ӽ;l!gDF@VRVjjՔ{L 0Mrd$*jBBjg6&7)(MT!ƌ'5ց Q)H߳nPD"ԄPe2qh>|4C&G%)4^Xj3 ^A}" Qqte &DC!`7X\J̑AQEG3PI.rD3/) i;xl6,μơ*:ĭSo]Y7gj##x{/3rarlUAD$2yl WsN=ZZa-kY .2G}0ӍY6gcdT^iX^:WO* R ܣ}v_9x$|畹IA%nınf!Q8L:BW$,ɑJ Fn4U3?b?jkٴ/$ɼPYhvA 4',BO)RT^ L9WG6[))zY"*4 &[Ra:9Oanj&!㒨C"uyN*x!&&eod2:׵9 S r#/ٷPr# 94s1?ʜDQYTȗ4ākیktQ(,GQT湰, P֔^SM8P/.M?^D R]q=‰ w/Ng罎Klk&A r_JQ>3޹<*̫G# A?%dz5[X 5ORO75s,2J2XJ&Jq̌k'*Jx.XqmYz\T64~ Orù]'J$ڌܖbp[6u0ǯKg2XAO l9 w)1(0#< ?߿\s q 9H M^}ب-"+~q兂-{A)E[no3>EUs_m5uUdjp_?(3͔=M=]Ab*l)Lx _3JA ˍ8첝rgG#AQһ/d6[Sg)I7/%_~MI!هB@!|s{Q'bi̡Q'yX)˪r+rT/Mȃ 4wP!)#r&{Q̂r6!H/} nb$|} +rEY-z3gRRS=dEYq:bĂ$*x$J@ICXPsX!25H S^rq\\tGeU*UTTZ^éz~WËʱ0?6ܮ>۔!6*̋O99I2z4יD@Y3c~/N!{5$P=˜#EgƜ Ơ5XC2:覧#WQLB~E%Eyf@d#nJ1_?O==ܖ&9Hʅd5JOR7ot'` Mn@@8]ǘ4d\ E IDATIŎy%U9'Z=q1d{֠=tmYLJ n)I ո 3Ҵ}V額((uj RSw:yT>s6Kql+։꼇]8|nz@ ~| lpY咚uw~_kj 4jPS%mT傈 )6]voln*畃;mzhT »f.y*Iea~q2 &̫=ܚ*-H/5qY _vI*SPAYcҼq,I^\_BqDZ!` f,<tIU*$$-a:=(>W uFQH|ƶ T͋N}-rbřc" //^-*+-xPӌ]Cxt].*% $XW( %V(,>6:kJd[*O?Vt:r/ɏE wk^d޽8;LH}ir ?NJJ׹J ܉ PW&;O:^ ֮OVz\;]˙t&rhA>u9-PWPo,&øAeOxx<<ԪYų=FYz<*F7rlD,o?'B)8-]xlaNMI2,9j Z:h%`;Zy$H0J1iXlfұO *+*NIETa2B+Y%!l658ȽX4 ?k4ݨ{P#NuviIX^ط3ǡEęNȕa*ZUP ^Ɠ8KPgSuMCj+&+~KanT Knh7*Fy=4ѻkrƯ&!5iM/sJ/ 2&î#l6n\-yѸ-x,~C2t 6)ĉU"ėp131x$K\ \ >FEKҟ=oS;mɧ7ARG [QK(#-@ҕ J/P*ETTfcQSB1[шxp$Rc}crC)RUQ6g]S"Ut3ܠx[QZ72?AuFN@OFiU 4MEт9r.ɺ^[W^]UsqH `b]C 1+'V?Lo؄z`-vYb:])JfoB/m]ڔ$"U/0w8!D! .FsGBU2 ? LRJdeȄnoSZKRe)Jpc7nlb4T)Eұ~8[Y6wD3fՕ z`*D:q>B̴GfJ\e/yrPŌal@H1X+ZPT^ |U8 ]_cҥ.WfkczC}(C#)ܦO] 3oʸ2,bUc ih36!ZIWR JbJ#r#OB}rU@m:ԔI^(CM;h30dZE#<ѐVLI\n> p(=EWZ/{ ԠuίMI2 S)tVvb$"rP@Yw],DG L4eP4L-S#ڷn-kQDҼhڎs2&.|<(dbSYiBedr3SWZ92lt,BAe gMU3.@BRC."ȑWbN!Fqu"%)H=g W^.Ҫ)^90HMA}!]Pl(2`<:ȵr\h@dr! ik^6s9OP9ܠ]b*G0PD;ni[[அ2ԧBPI&T}Z @ 5Q96=—J,갩%1E _+gk,@SM5bF*mIF7tB{uuw_lUʅ}ldt"qnVDn1`Ҭbڡ v(ZJ&tKBV\r T.6"'`'.P g*WpQƮ،%_rC󑧏DH^8!v䢗,|"_(nbMT 2P!Fq誔Q$+O7 06 n] qd苋A*UHtI v !u㦿_gH^uSn/I'~X3}Eb|,e¨U}/NPb5 ,=39\TH8 rWKl{BX!.-|El6oϾXpJ7u,gmJgu`Eq)7UOmgV`]Q-ןRn~Mo(7HЏOP(֏ $>EЌU]iQE7\R).[qqrwY,XJ/8^b:vvׯŁ,ݬ:$%f'd2%t"nՉmZ J++@|DV4#!dEH9fR!:*Tr!H/ +ˁ?\T\q [efT1h!+~kiTN/]ŷI2&gJG#a&w3C=I~p%CRe&%_쉸V7jhhJL~&I ">Tgxvcny$ն7b#?vU"IKvl.k#|h~(ྣanͰ:YKrmC5(SQ%r@+ʵH=cu|Ba{ޛl-08tN25sS֭s/y9ʊkN%4y.;ua:G{ZD\*ttr fhᮍ`P͕Gc="K iG$doEVW+H ݳ2!PJ " ""43]C6$1]zq "yUj L"&N3ۜŠ2tdS?p@m= ZE+12Źp;"d֔ieUbdƯ"4rʡӨ6+JBYt'7$:yja[\@)րW (9&Q[? g76sEK _rv|D"r!˪'jHVY?ݴ_O=(d/z@quܡ KPw¯zpZz}lf#CR:$q9jOZ8uht˘Фy7q3+klJ`18l+OVcm9|YfvM*_ %])j)43؆NmxFq]mrnޚ3{~鑚PY~VX"\3@YM`{F7˲>];81Xlen<7o:lSs/٦Jc9wfg\FݬGSfYSpUkT*ȪyL:"b⠀+Hy x zq~h?f3΢[->|;m̥NSfԙ[mI}kcbuѧ[ ¾ 4ff[;qbA D L,6o&6jލf5f[<2B 2t,il+ a!YРGF'"@gr($DXSY{f¾"5 D"4> {L߯7>F@#P a ?Eoע1f@kSlaX'D",gDI7 ?Ao" -{b)AeC D"^緩夊y۱EA/m@4 weXEP?D"|S%XFV"9" ϱTȣW~ -d@ w@y[3\,LK"ɨIma!~G![D 4z@ D"@ \C D"@ @cA%D"@ D=#@U(Y$@ D"@ 8CZ@ D"@> CD"@ D1 PD"@ D"~H* JaӼ# mqCߑڐ-D@1?LÓ=@pRQn L FC-$YrdBP鐾 6X(P0G:,[ D<^ @׾w%ڵ^ǚ@@+P`86n7potg4T m%1^S `[ڻ9pѯ;8ޥX3B@P j1mVUX ܬ|] ^ݼyur3utk֮{_/EpbJcp-<;l$ˢQ҉JxmywPwĦgyצAܭ/?/:enQDN3siԦy1MxiljV/b\[nc(7q)iYۻl߾;<Ӳ g_t3'(NIy&%%T WkQHK#܈{_\`pLh"`=* ?p]uWwrTs mcAp}22('E;~Ρ2Ө\**Lz悺X6sdjDſ.O|_FR@sקK;(cEU)/zkvƨIJӀ$j8C\//xs;y&$9DZ'4Ђ3G O d1HcAW.f>}aw3fg/Iߧ{0*K!l=+oq"8õ% d>.Y>Ыɱ1u;7ѓGM:'r5hػ6<0}ԘM.XS.(~|i7͛Jǐ%&_H+gp]Mu7:|Uxop& X c/WcCXY&6Cd sw2U兙qOM7kζ/ !(Ju m5sww57O/R`ߕ<O{0TcP3}Z%k/yZ ztp͂BzKm?:m+jC}e#WnV c:zv5~hdO7ޗW5#:Kptqfxk9:`p}h bҘG4dZaщ w͈cDyBrwΊԚ6ihT߽Jʤ j/D q\#ڮӇV[22=u&~!4ԫU(NO :3 ]עc3L{BBމ+%*)id֢eq}xYF IDAT&,K%}p󔋹=oڍ>(L:/:9@[BU<}tAm\&T*CXi#ye5 sy ۪,eYQM$?Mt! sLCJQ(o\wu%M%<{W%,[CߜJľh;7{Sfqa~^^#5 <(gSK %QTh(Y8]b/'^z>ڥ3?v]/N0f!1?=#D3+Fw()j^٫%./~ ~ѷuTbE1Gˤr֣Mj^fO]>3uDfA:up5+h?; U侌},zԄ>C^ړ3bPuH?N2 rSJ[OWI?Ũ>{miK JF b/<}RQBUBI* W/uNKٲh9"ٓ|AGBENn,JW&iQ֛{Yo^:}HuU<2ZI'ʔB0qiDsTK^R(orjx,6ArAXwqrj.^vH 50cB?{ԭ gƆƇ;+;9eش N(ٓkwgEyoݾvxVFC|VAI (M܎O[+?c8ٝh - aöcsw3Q.V CF2AcُB/*A! ~sgRM{yT +/|fӐqiC.[K\Iszk{ z,$)b.3/%˺˗lS%s2{??cZ0n->tJIWF^jhPR5UAO%:AE\uq3ۥJ9GX{gglvLrݩg`P]BU[ |o\h2la=tP\X!e݊2mF])؝9#;3a);pBzz19jȐ]>؟Nk܄UM{gy/BeiRVܰjmBҺ`n:{hŒAW<}V\COfu&"ﳲ'mš^?qF^[w5* /t՗!}ƶokΥ%];zUڙDq>skJtbl[/ jn;VdcI*PkЩe>BL)RA~VR:aџIR(I2 ("kԳՁ[7wJ{<A{r(B~;w3RIR MuѠO 3Z+L12HT *TVś9Vn~Fw e;t޴$ZRE:hɦΘ|;[p2b[p䬳87JS~sZy;rt4hؔ1B58_[\v7B I}lLXS~S]Q;.ٍƅ4s50LO菻.e;pY,˽obe | vȏ$ xZ'PC+@+ gs,zN1_w~>īw&Ht/Yygš^aڎ]jjZw.2j)8#w2<2  b N`PTMU Aȥs%9+fLcebrLhنb}t\t%`Ҍ3q}Xtňyujj "W..9+f47H7@`ZuTO;.3; fT(O/r |ppŹ8:6v1ȫLƚCqGN&(` xQrok(dEBw^NF,aekkRUF~554x!et; 8eKan]8 Rv /Z C~oܼ%ެ ssx,Og/C@.h RH}ѧ,`b0M4kujX~2q1`cTk{\ta׉ӻπٵ 7sZX04ڹ dB[XDC]i=Z eٲτsMM'/ԲAFl&wЄn-?SCG|>u>{ z&MCǩw,s ^%Xi.A3ߡr5`5 ;,PduP@O1ր=h -FrII3{]/z9tG ƞ}wCc/@ZpQ*SzLT'ܸA UCEI×ndҪ/id />ԆMY- ]Nv♓C=[zΆ-{yL1-|ܡe]m%`ձŢE_ 6738n꯱둕Cx_tV]<ϧS [%9 " +#MWdH+SC bK ";zAɤנg!H9azELd\ڙj.3%qeN`PTMUY_Y+yqE2+/zT[GT:=3lbO>X]ƊȓEz`i f96\ndž/U7@,O̬~p mrȍ='Zy-T\b<_DӰWIi p3ʈ Pl:1@C:{+1CL81?)/em!?PA`fG۶:ŸHq4}&l#TO:\-f < 샴KUUuyZJl4rqU^ȓt>1KebQD].RKSdԎ=sQDTrZFirwIN#Pc-6ה-.MLtTd2aރk'vﷵ~e/|uZn 5F= Zm2m>[:.@VHH6z#в"JL}rzK53Z8svv&rQEګGkY{ZlBPXXZ:\Dn? ׳z/&/W sJ{p隟~Z98|.(T5P,IjoHx澸o\E5a\&B&v4t,(;K2W"=`^<8@S< x@#bu6r#}T#^%iWG_flS0 XTruE^ߚZEgYm]֜{ubKwTiቍ8<8NN &JT#!xp,2>!*qA&13.K9 &TC_B$G37!,lQS`J&\7Uѧ쬿L=q/3D]Xʩb`_օ O]A劆صF9>W(G$y:f#K+}0~s}{(!،E4ޠk<{M 2% ;W F5BsS}i `k;7H3[oLS;?@H0 NԐl,F 0H !I %I[F]s-4pK,d, M(b#H* c\|0;Z0Owc!\8ޣ H4Wy=+rKS&=XV"WTbʨTx'h#Th:jZ;d84 3!1ČqL[ LJ*qI^'=]mتk&kvj͵0X-GoxHB.ґ"1n]/GEGXks ~lsd8 M[eAr*(LBi{(wH]0u1lVH ykF(eN>^Bz! qڽm Y_Y+ ?aj}P0],T2,@jJ, ,V$y+;3(6 S/S|5!FD21T}j1:bc)n @Ne.2Ʀp5V^$,qqKΘv71]ZvEN#^-nԬ\w4["!F=U!vbқJ.IKZA"?va3J$b0?%!6]V`lkc1QD+>4 ֻ&ҵ;~wPUF5s9xRXNyQXXTXW$,zxqW:MWQ$7/zx߁eaH'ɓbxC~}:5qa5jpƙfNm չƬ6 :7ԠƪhfPd:0G/ n$‹hʏil۪;ksϮPͨ,(3X()w9p,L 2LmlΉEGT@72̉4MXR:]whdG3ֵ HTT{lm*+PCK9ek,oH V,`-UV’*}teNۑSK -g@Jk<~E ja8Qpdq^؀V2ք9:eSB+ ͹3C!yRcSv ۳)   BY0ZoE\e Ja8^"\z|hNӑi;=rL+a$e~q']8[CVdҮ#&LI Kc'K`Wֈ &1(Omӳ|𷝟 AF\j{$XU5wAЪ)V%K">*P텟-uA ̬JO(t EQl`yqc 3AĈd1k鲟!TzCe’}~4,"KHEʸuO8#I#A2D ' ~;\*DVXβL ')Ju)B/aH*]SRBI4r# qU&OD,2jDB($z" w/'NfAgg[PΡY(4W~{ X8Cf徺cgR'\~hGWITvށ~䥠&|cLbs:*]7We6q9M?tCžUSHuHy>%^ٙ@|:~;zpzsZR;Y|5Ms# RߠVh0P K 5uԭPGU! RI:+G6I[ 0M.E=Q[DPm)$ɴ ϱFRcRr4( X `+ĵ^T>OAMpʱ:cIEQ."k̖7N!shY@SG%ēO3C$;ځ7ʉAH.[7]wo݆SR,1KW||[O2K2DX*!wH2z+'oP hKL$d_̨ݗR,̿cqU eria-܉yzvqhԪwOD, t!^G7iAɨ~~%)u/&_!*v =[MkH,~va.j2vpு/?ο dhCo?47ھvi"_,_g]G7x :5CGĐȾVke*/!l,/_i¿\ލrTMqFP{'nB/y쾛w1JSDզ F9_"+HRlqQZfViyxJe؎&^r<+YasUcU%\w j^}1ݙcW|B.V<tj:=t)gRNC-Bӿ-e5̊I:pI@">AƴB;&Yhy! nsH$GKguUϮ߀6 8hqm:vst2>x#bbգhֈjG6́h9ڊiԤJ6iZgZ҄#րU1{hzĐ[~đcИU>pR#k& wʰyMMrTK9+ulL(8Ff^Y09E5&xqԽ4QdƄQZؾ3ŰjtmQhm;ݐ`=Ns ^uy/Yعv ~G{ Vhk8 cRRZwgo#A2<Y #|$uLٳux3ޯDf *M}m<;ةNeَN}ztm) (5^V=X"E4%v*s1#>ʑ[X43 vڬ[@5AV12Gcp;Vq"Qm#8U3f>cSJ9ft`0.n^O?51(8e\m9+,;1غګ2jy#pԮ)id}y5♹= ͵2cd ؁M02ygt Ė겾T`'6=]\룻KEnQl؅tKq;أ#swv77;oޛ.fP5.7˽=F<@S^gK^m.:$10k)ŖHKIcZ>F/ݕT6Z0oS1kW*'t{Ο<ĀJ&jdSe0M {h(+8T[w;yְ*֠%eTZ9 ^8_7cm5pWѕRĪ,fw"!jIUw7uUk}#^ !F˓=G-9v}rv:u9j  }gpkm@C :Ffn^#,)l F.ӿ{k}M @M]̣ߑUAP@9~ٔ)-6NYV-f=pa֭Tx"H^9c[胏JNq!Fb(N٧lҩ > )@UQ0Vouez<._=NtԒA@gYeYOC@VB\n&E@T^x-7}s3 GGGGG@ ?E#i(KXMoM B t @Bz򪟹]2-pbд=ՐmK##P/4^ ?]M/?d9ԍ! Oj  7gMeZ.Ȅ LpqppppppppppZArtGGGGGGGGGGG@&pP&88888888888- l9[########### A(\xaىK%8|=bk-mMC;.6@3A@YHvM\ M~# F`:)]t07f_۠XotYMU3+ȈBlP^͍C JY%fiag5q,FF)r9ʨը"liZkދk1Zn- ]k`pPZ>.y8-Wb0u:Ѵ_NԆ:v#zC bI` fE3cCxED< Xlo.}8;9TkWy>%;Ukn.S怃'ID}H䟧h&bWt8aY팷X.XEI Jrw`G ԭKF 3jzliVVWufitW"6V w`ع=shrcݴ(5}x=℉TX_:( @]Q6/WavUOl3(jhdT[]ez"; RfBc˲n~  o#_̞q5h䐉//їbNk28:3آuLE5{A>Q/ڙPXGxB+:˩\~‰SBes=ˆ&TdE1JWErTvJA)2蟔2M{ަs'R:&,= }ovY<;7V'2MVdsҸ\i?7u <0j,bVu= zSDWv}MYeyî#^O&*Zu3gPE/l`a ( (]\ousץ[-ꈲrJX/ d5.&gxJA_$iJ]bEWS4@tz1`̛(Gd\_99˒H$^筴ƚِ'зv*O\sY^#Oر퉯" %E ôn >D+FҲ?ZCKL.'с47u> |Seҵϼ:AS>NF%zsfOYGos=ǝϜw "E[OHDqS\(92"eHT6HZjX}UPp_31y{TL EF'.bʑ uP @Ikx:m2L.v.6:e?(O )=sQI\Ͼs^\F4aj/]PYq1loϯ ˃_!+EIT eW*,`pTTլ-ϖ}.)h/d<<*7kҦy#wa&]>K^tCʫyon`=Ka% 'j)\L.̮g ^D ;/Oᯠ!`"?l:t6Nm÷ 'M[[)1N|qur$0}LS$vYdq׼Deށ{]%m݄={<@%̋ HoCɃ M-YcfYʒC2+Xf6:rMAAЗ;]~׈/H.T ܅00ުJ8 i*v!ˣ^@}ANA~U|~t/4 TM[lTM_{ /hAqbȱp!DQ܉+!l frY)JNg_fjn7"wa[U@nŨ5U)  +@8:TDZ{lfGM!5H|xr7^P"G&TSEwcƭb$/x᠆ٸJ؜}[=TG%g(F~2q f>@99 /'׭Ës@l+wMytJNF x{[̛",HxR7W (3cgaH.?5.458|؅q>ߘ2Rsrr ZK *uυkszpYxfEEm  AP7?a 3G>D ?A;+.>~}~Y~3 gPj}7#cW춄%r~%oɊM5 3wy-a%D#[gff"_ޚpUHV4ϰJYC? q$)vwrNCSFAt.x) '?2?;An@*nmkH$S6J1q5'H:fn{A3;QLRzK>€D$[ud"U5R 5Vb MqV)4u?DVڙhUt-LM\r9!w3F.R ] .LE9>=<;6WQne"*RIJHWY56lɏn֠} [Es*1wkomX׃m%^!ވ(DƠ4e{2OpjI[=m4ťa'ǢS c"Iל4).NFUx`]z ݺISDݱz\$}HKzZB*da[u3|P=P!!RLLE/:|ʉ۶o^q20a ~Uc;;wk[X@kaaS#?P$/-/][oԑDiU栓'ny"8 n4豽 3ahB3+@ a9Xe#֝[շjc_LE(xI~ Q"?LesVDu¹RfaⶏkaIiT}_J#<)oπ,kmS9sVh;CQ =6w^z"W InVN.Ja>K,X-QY[9odZa7S|C`Ht+PI>}q4 lcmbCf$!y['H_A(-F̈́6 m R!+rإ!%H1ݚOb-UNS}wLpՃLkt=ݖ<.L2UЄY aGRXRC ] ǨS c;P @A6SS0\iIH=`r6v9='>T6ײouK\6AV0֎^4ՍK/#S Fj;ne+N~xi(!6:T25IQWUϿ;x>0=<훠W7ϟ O.r9/81Au$cg*\TMW$21@z/EXwv=ѫ@vزT,p)M%HȊ^U%[fڋ| Z^(K'R-@S^RϯDk@hKnYΝ@-7.  *7^3 e+n3zTm[cLf̶j3gcjg,l2q0JPl }:>Bϯ/mVs\\*%4$4)PFBLYYvp*֘ iV P诳Eqp #JLVU/]0WǎOA2] ҹTwUz0(C 䭝 #ȟ6zqx]dBbeT};Q>ܨw:LDfH߼4l$kߛ}^b$ᒊD2I+#de*]5W Z:Bvo)LEn΢dX~3vDAz~u~GB^#\_]I\V޲pD*b€uZK,EگxmRra=ne*K b3Lp>qXM;R͡8b~Z9*T4@(: F( p Tr@$2UËG%\F%,|lGlg苳ߠOBZԘڊ|+'MK|hw~0/TIYW.A4bIšޑLZmw.BDuCw- -)kЫVWԶC$TtKb9Vu/Zt*V(?:WdGPXߑ" Ȉ#57Fbo{Ķ4ZfШ&+/MLi,~PhEQlT!*&3adVebv,8CB+pʞ=ˏ]zee*]<e^Jnhta4G? .H4yk}_ϥ3xȪSUܾs!E[!E)nJxatr0Gt;t ѷaQY`֕[VMS] ͒ 1#SwZ2tiϿ0XQGz/"s[c) fI5@EתAYc;r/Y9a ۗ]Ht]P .mΔYV% /Y øޥ2iza sdzB<=DrMnG)E,sE pRĕA *m?ҵ &lei{V1h7q7Wkڍg39)?*pjw-u^.cq8lVA~^ԗg[x$NWXۛfHZM sDJ`H1N;ɸKYE83KZ[)>?MI-{-ȥ"IEѶ#M{mg/U=r)((j?s*؜˗.]ZhZ Nid7 \@DHa8lFԘ&!&#;)]8)atՋqсէa,NEi\ēX\r%6?ek5`(:|(O}wꄵ8]-NzzKs#S F>p )% U^DSCFӲ|ն Zy^ԾS%A2D/O=#v|݊xt,%X(j=ndݓ$9A? >eG.py~v;-(`q"ӱ4u MOVaØz)|3.6>Ex g c,+EWecxgk"65_@J&-PT:W?Ns |!nE#RȯĻRbISQiJ>5?;?uYz SRDأgu84¯wr(r0@VߴN17  Wƌ^vi^VyԠK;."< z}zc:]¿yy R$™ҿ(+;]Ð؁7/ʑ1+OĻݭL"h[v4]@[VUQ ysxY C!э$ܘC%4ޫfge#-gsʓB{',j&q ܍;ٱR 12x`iqWOLVy~bbhy3ʌަzTbf:nΪ{aQ/woQZQI2ojoܜow =_>DW)f=ɯ}}fDR6?qEȗ*R3A] 5IDpuoWDž贩 ܌mKo>sb),,1!e+6OjK]GEyy"]Ye%Wbۡ'DSV-̆nbL,H**2C*v$5O+gW+u2o N@clBW`acg޷sdKA큮CMgfvQ$jZ=w?w@*|rH*cJkCME* | J542aߓP07Z֓IRv}P1+B;wno{smE hekhW\/0ak5:/ɽu l:({%1F=] ֍jSRnsB-FA`+o_['vq5o" z}z8iI{~6.2I9_ ]W7*("`ݪq>};R >e[;0݉Hlz_P`ѭ{ˑH jFbo{ҘsTIIй9+NjB$ȓJƖ͑o7dј~݌u@%R۴9SOpjN!!Z֞LBM &4uc=5M0WJ*hٴ2|sB4eb*]t^0kb{6t*hE0^#Z`t*YYص'[vTvxWg# *㧠 B/M].E6uy/J35"m̀`etٽymm ndpHd%uG\mR"/Or%ip+\UU/藢blիrږQ+MxYms^)|?'[|ZY(iA "ӁemsihM5 \_7ِn,[Re,Ϲ:ư e޸q+h+-h.znKn?i¦G R` 9TMW75؁τBV~Zy%膃(*ֳֽn svdɢ?·&`b/pZ.5Ok|rK]珜j8 e)?JT_4q:8-epwFjZAjļgQfLj$|6=}I ݫmh{*쩌Fhh͜[kRkM:Kb/@/>,D(>qrvw٘eC6] O/,gs99in?ٶ *F|N.)gr .茺Ux@eMeY' Pi=tмQjnЌ׾Z<4~KjG hF;-^kΝ@kM6K@Ȑ1 )h\Y'GyIMD:o&J?h> n@[{ =|8888itn^H̗3>F728_FV }~OJ-,(NB ]ISŖ7& mIFá2+ݴ@r*ʊ2>Z0E$ds9/+D%icL$8/-ZEYa௽hݹo_U^œ$Sk3Z+l z'U\Vs?$PJ@40PUVׯ12pHd2KKKUUUUApa%%%kg>6-msBINa$Jg6)b#1cON@R8cYqAL9]rD?zoůUfSO^]4gqз3LVENZBث׬ 9,"U#$ oYH4/Sz%-[g ϰZlNDs< dj̆4icU6m{˻K|>{s*I uczIE׫O 0(8D:]0ŠT*'er}szCn^y卍oU~}+}mjdJIEA܍]V[999ƺ5B$q~hMTD(ca~j AOS,?)NF%zsfOYGos=ǝϜ+~Vtd]O:~͉Nf߾Ennw*\wSoէ?jiLֺ}n >>84FU1jwo TaW ܒrq.n;rʟ[P VwЍ tuuӁW[v, u9BqpbГSPlFlvvA7O(4 ;~~r姈2fgG&*'kCDcՂXźd`eȪRҳ̓ ^35X0wE5jfnaTR1ų|%M y3˒:N;@x{~Y8!Qu.GEaՇa U5kK=;rROVAϣ~3&m.7³jKE(-crN#|vVFĥ)Wl}_C*;ڟC˾,洄Q+!3$ewzS4aF3 'Bo(56~Ηu ja~otsO\vcM .m1r7 Z-WxF ,fzBw_85z\* >4yR^[ JmXi: J?|zW}/j̅.Sl3_?gg.na 3!ǔwh_O ^Jum6:7rmz2y ӘЕ-jVʏO7ɝ"#͹G}tGzoXeڻPx,_Ei EB?E>;0%&$OHtxgHiȼO5ƦG(*V䞮?&ʎmߧ/b,Yy:$4Ғ?߳6" t\:"2vF$%B*)g$;1V|C[G r$\ o_VWT@^02+ǽ~9f_2 ARЀNA,inlsX9CDQwU-d0 VYgׯ0ئTPO Ui4bÑ7YrCZEs@Wݾ\63/WkV%Cn/*%PuwdVja:O̢|dD\.1-%cnסgN>ǪLbf_EteYow v(| S6rZȋШ̼"]py3g1L~c,4 * r-[Y>hc19߯l #IT>1>=98},M0w@}Ȱ BCtʑ8F˹ 8쪬)84@"yugC/ugW9K3愐HU4É' h/~94~.&GcUϽ򫸌ɪ(K 8ޚUpIFKUbhh+iODwN|0h)f}|vE߳_׺uR4fǩ{5trϥRv)2Bɍ0a V+isajD^!]12+ޜ;~1*k#4go)e,fyIwkxWzYX^^*Z:?u L[vfź&APp 5H,_:;C &۫bwV^ 8ϊ*h,4yQw޻WzpdM͡W'ţLnZF|p|K}j]퇴`uAR+xd~\"z\Q2yҘ[V]p~& UcԱs|hMes]`eK$Hg6\Ny񜾛ppQ "xi^3o2" Ǩ/ϏI5/v\~{c-=7Ah W33VJ[ >uG׾ܻܵ%Krvvĩ!Kliu-R-ja.֠M=="IIb)/nԘ%h&Vut-o(efFTu9 5ǷL1_ G|vR(ǍV8r<֣pDs={GqX@Rrk~!=yWXTN g<.H1 q+(V4{J* 7/{_"y*HTaj)[Lr1QdSȼCAl݋KGV&hfyGBeJf(es:m (>6-XTChb&^Z[T)VҠSg!s {Zt"F-HYLLJhY\٘J$1jP~ JMuyyZV44n c 4'a _Q0Gp@ 6l7PF xl lE&VHըt"Y(z1U_Dp#Qd >cҶgc{1 'FͶL+8%div@/%JpH\5+' Z`0EF_Hko?sZYƻb": B -A3zc{Uʼn!M`gD!{"I\f Hmzma`X2f˃ C@?XƋHN4-on&&bBv^ FqIakǴ[&Oңi(.W&!Z*c͇t UX>H<*S gۜ*!@*|AfE{ajXeb{‰7jpPK-`=t񰓧2c;%R uG`wJ#yoFeM3FyfX٧a ۏRFO~+gAvhU 뫿 8-^.Ug=҂3J7uA?Az| LogC#rinlާ)۬F܉/Q^tW)\ƭv%BSBT|Mr/,>aLuQ A|d:ӺʂYcyOAb4VS jV9bc&.N>4DU]Q viS^1PI Sև!jF'B_cod";=| ˇ@|dQkSQ%If>ozZޓV;Nok1[r_no73ES>#$`] m8âS cGDH!>u+8FQT-1 JB~@3j;Qպ,SDB)7%O2᭝r^g" ,˄LO׬0u@u2,/ō/ [{1`֚ݮAH.̡B)^X +}4$+6jsl? .;*Ɇ9jՉ>MS"tnwpPf b}AjMϢbԂx[ꒃiӨ`1)oK=U 5e"2f< b b?CXx!HY~X1̣*YM\w+ i@(0z* D})^+%S[0{Co$ U t)o1p?FE[j+O SX8vvwU/N^5j``et،DgCg$k/N"`jVWmIr? 1YP˦=+^DB+.II{/}dk_zƞ^ur^;X2ۼr1z7uɃ|,,?{d^RjSNWJ?AOA3qHM4l:fkƴ@V:bP^grj z/x%f_pVT܆9J_aA7Axplr%CfV "jVb*UXc5CMh"^ξhR )6;GU:cx [SkPk3K@?e q HFI0Rkr\$ODt;A3BWFe)y3ݳ-2v#k~^#\dF_x+ܷ@TtWD&7}XY z S>!Ӎ2?bAAb߉ ,z <`^;&A S5:zn  [ K @l#z%pS(FL^{AwquȴIT_Yk us@V-HW=؟q" ^_~H77`j؊ Ua= IDAT`Q3̈́yCJDs`vH RL^XKEjT[{ggr#$54ݹuau: OlUݵ EBorUA/xREހ߰_cVEMJc>?>o&B݀0 $-ÆvSu4 !:$GM28,ЀZZo0377tHeN& NȠ~WF~pZ'4:]cWdt7pp)BP&tزT,@!M%zw+j xӢy> ܞtD {V-Y5a%m_,үWY]QE#ۯzPpZTzxC_`Vv`/R?9*4U>BST=M=Qa}]~u*).^ڸ_w̙qyrˡg.`hںWZ (/&37i1\4m JaC{iy%p+wy2lϿw~( MaX|L-wԅTm ED&!4XCmI{vOʄd`'م)XAެ$0z*pSA,Y$+e@plBccc,p,!| jUcp A@{SKkN9/7-6!N^8 mQaXޞuWj1>4Cw3Y *D.gkCٵ9(Cw1h'hN ve/8o2f,Qd/[#;ə"%4x9Z}Y[mNέUW]*b] c)Ь?yun VjT yȨal6`aU 8 \//.pVBvß\U(1ݿ3Gu[_|E=ƒcR"2&HTl87`?']eȪkZMӛcJغ ayپc.f"rѰb!* hd|V >*9ˤØ^\e V`&:^ysVK]u_JY>SQ[AxW&mgCUd B-dˠeUBƶU=aT΂/B35َ-%~UAZqbLaD)MtVqQUcN J!lQxzmL<׫>ݺnEz ؝ (!@&$}qa0F N{yeRSZԫcn&ҶmZ Z؋9%UD Ta` TxA;_VG$֕_rM;!*VBpCv,}-@)KߴkeCp@uᎽJT*\]U|52تdžϱ ВNω[T+mO: BUkf8E'1N>߽d1 ,sc\)HV޹}gޗޕ_/}gZ욶K[qwȁ[1$JvbԢ#Lkm!ܚ}SY|22{!N :"Nn=(˗; )Ξ7+ )ۚGJ&P)#!1؄㕘#BJ*s޼p25 *gF}Om Q0y7?CS2&1&Vm+g@|=j=ߔ WwzKd9ڊa\> 98*>R&''GIII[[[KK x^VFV{ٮF~;L crWFSŷgt~y氐#kWkLwy6"C`2-{)QU0}Jv|ijuE!t# ۹rqFXYɍ>pc>vƲmeB[XԜ4jp?li^DSz9` ;].^O%pA@P]N2=SVk|MN3s[8?i7}^[um9#&әvK55e/k1 0rd(-rŸ"Q({ls{xo3+mac||xP{9I䩩'c'o&zꄈC5~B+9CIV,^_A_ M@3L:::;n8jueq~~p_;0qU[QfdP.[ dUkW "r޽pE<(E=\\6ֺ+b+,aqbj@, iw!1u/MCHqY *iya+p3DX/izVb4ADSF Z o(nBt4| VYV+6.?~VOZ2ؖ=(jܱI'e77.>e,u) Iz E1<5ee|eީK\ YH(!B$Ni3^16E^kf1(<%f$f*1 '8yxmBew/ lGRx{Z+5rCW_0wՏyL==l ɯ_q0%,d0z$J`U>s=1ȻMGd3LKU6kdû !X-S7/`S] IUzX[XLV@{VG-3"VJZ;B 8Ԧye]7'78vcADZe,aB#v.5c*=goؓ*m1Z@#ЗH >scrX{= $? 7̣Фd΁d|>Jamo5„HB eĴ7Cp>lb iլLi^ݵRx96s|ͷw,ɰM4rQj#%ǗY VNe?^նy"iX;žXW6f׌kҪqSَD mzjh`4X^y0saeЀx skɃL4FWPs?o k {QP؊x=XUu<<t8Fޡ[ k 6iz$_W;+XwU(*v; ?$;"lS aea_3ݙ[oXUk835iDGR}ϼ)c-M @ fEQޱyv^Z0gO/:q7=%9p\DŽS09mτ +G~y$NFNàK61fm>K%kce vw- ΂E =lË ,$jhj-jच: d[:LSB{ ar ۃ1:ރ[eC8w@o'vȿ)䠃K1V?@_ /WJ#{/nHts ~<&MԜ@zӱMs b(^/Fu"PQDA6W# (Je%>mYO277AtP))G@`LPu in6%5r v6kHixb-r/&u[1ks.ͦ[,yZ"A(ЫMA HMV(nm'/nZWFߢiG?2gxspykٚ&F˶?^lIRN_ >bK ^Ac N# Lu񘣥!Pm"n{&:D{Krb6P^q,]h/k+m FV0{Xz~ h!9qš& ZVCgJ=Qቮ$h)nXma"V(p5(**8RxZ[[ i>JS 3uE-""""""7"Pu}Ա4^Mc K=N*AS G?@uaA6T$P>G?SVDuuv=w!Aao#TBvAC.LQPPPPPPPPPPnPnT{ UEEEEEEEEEEF5GG@@@@@@@@@@ ¿QQPPPPPPPPPnPnT{__:| Fm- "#-)tW+N\cJ/vCQDBؐwen"DCL(3N5⦷x,xJھ=o#<$hF;"ߎࢬEGC;AtE. h'v]<6539`Ǵ9 G:tT@"psʼjĭ'͋ 80KbjfEmDܥx$\9'.yqJaU4Z9` 7l[ X^ٱ4,$x5c7_WN|hI6-J T l1+4^3M- p/ۣkJ.[ra;}Y%[\f~qC'i&\ ;T[WNMQZ|B̬F"fѻ_?[S2*WyhO(0*!!4 :>DTRflfiԣ VC^,jL{zηRy=C-RF# EOD5VJUlbBVR$=kkJ{k }(wvB5!@· ֠FWL[]F$7=,h/N\+nOƸ veH/ }}kIAO?[2ܕV/d}┵̞eA<~<^^Vz*.5Lnx[WNM-j*ZZrn@Kx*#zSIQtu /1JdĐ\U r쳺,`1rS / ~L,ufxK"eD!4<(\[$Ve|o $r熄:-ΓA޳07wAi ,DvxT3*(kZ9ӿP$h_>-=MpDlayj[qd\DH͍5#;@Wѱb~Y $*`dwlDžY5-?4&h8ќ]I!a9EIiͮ&C[s ƎkVƤ*nԻꦯ$ƥS?|_Mb<}GU+0fS'yFAb)jB[k+7[5Eqwl/~zFI{ᐨƪgkߞ<f>ö<}X9" K䒐ꠈ4DUްgmyP"a@$iS1E`0,u5<m>t(`d>G>(!Hq5?9xB WW:,:K2oyi|]A[?JL?g#mm;3v]0A~eNA^)K)!*Q}$/|m`RcՋG*4Q Uu7D:SME𧠈LS M ]w@ % o%$$n/\M5 h, IAjT_gt6@2"33&[t\\ⶣ0g7 ]BOTUԭw eNW=̧%;ue!̀^J](5 3Hud*^V\~u %֧VRr9n|ʘQ"U}zVrp !1,)?NeQSzjLNqNJd[ iF~ay̽j2Ut%]$MP)ZҒJxIv- k+6/v0Z"Vbjf4b3)/N  L5I/:HwӆicG8 j5k 2RŸ xmfX* (68+y˺x=޹j$15ӥ#ne[5(UrɃiboEHT0sڥ(lm6aFwF:j(J(եY?87U"È< IӈYlzKB<*Twy(Xtbk(M+NxqQA˗ٽG1"We[Dhdyρ5(!)2fS/cLSVbȃc8Y7%9 \EV8FX"M$[pS1u0aV_v Pn 5ʏ~eJYgR{YbYdfn+5r&h}ޠI9sٝNS,Y2cɋecfmKLA(R2^|/Q'- >w};>p`~`ݬF=HTVTe[jŪwy@ $9S5;^Jh7 ^=<Yx(XSeߧ)% F%+!i,y%CUVFɩB+2C.yGB*NQorޱsɃnnPtv#Lo;Pxv>~);] `ڎY.qm,zTd;>fl7Z'FhR PJYR9h(%;Tr`ne[qrdx &7:1}͛'>]t0*aZJoőYCUR2;q Ym}OӇ=ٔ5f> (>'B+ `oht{7k b0 \hÄѣGGAs67(ʈxuã4Rr6's+ 8ֆcAoTҴi/øbɠ=bgL1=CL86+*S @\3Auu&$8#ALx 0~{ުۡRvzT(h8PXN87nZ\s.4$ȏIb7C^}zrL=X`btxYCȓocXF:l WIE.=+\4?_|Mڃ wSr1fH/,+5̳>\Ǯ%L:j[ZHt{@m\Jë6W)˪.TU|i/^A7!>jRPdr$4[1~SE8aa%l1/S b5,r>,Lձ>Aȸ)CMedw*"YD/D}3<8„>1FMxq$O%޸|,g;kmUE*6+%սNx]pD28@i̎s"'H{+A)/?ЈZ-r.&wen\gC_}8w2 U,mB:Ds6{)MGHfCp!BlQ@HX)$CSW:;|n JK> cMBӋTr9le"IKm1@tw 0ֳU "k$J# xח.C g!7'UX47/8> FW홗 ibk 3Iueq2BKG ." V{kF[$$M-~?(cQj݉Epa¹!gYr[>x`QR2n5ݏW&y;( PT?v}UF3 & Ib cÁ_j᝜Bx|YL,b6b @H4Avt9bY63OexT JrkE+YTKc1'AݴK|p ȹf K1]: (|i0X B98{H9  ?Mp8 dicEޮm hQ`$  Ĩ13yRYz SkREKIp%-E8":TG۵=ޤn]Bg*+$֓&󾯀It 7[S0bh(}ط_U-ZL)++/+-,,.oJqsbCZ$hT'8c*4V@#AEDJcnkPN hЇ$4[W5L-Va`i'JF@bm$Kۃߡ'A]آ5UE)Z b 4.&zY x_EUiO;LfG84K0 p!:LHӣ{K{`_ȃ-laGWiP{o j#eiZ9\P'B'^Tfds ]\([rEoUq$ԐFd>{QNtHڀN:L ';ϊӫdS¡m~t=1SGUDpl +鷚lX' \!FtN4ZY^2Qy4e#B?м"&#AhSKhQ!cywNE߃C&zL>̎k.0z^ِp-Ն9xU' 9ӆlVR]*B3` V~@lcE(l.~6M?#놗 Jo۾ExڴB5ؚEЖi"l"5;;HJ3`! !" )^SO{nlSt"t0`{X vYvB[%p*xK_J ts.cHEiً&9I$4lXJ| |6C!RbT(ċh7E_]m5ioFiW-YCe Ǔ/vBۣkv wOӯ9|5\L홆Px !7de +iKƛUJXK*0~)pSk~/u޷آjE#s*=.ܗORhydć+bTXUH0XZhm+_K`vsxS- Tr* bW Xʯ SceX&dӕl rlzQH;As={J-ACOym]^Ma:F!x;~m߱jׄTqhQ6C0<7ޑӳ12&!:KTU0_ LjԮuu~R2]'9)N]D߾(i=kCK!#s2TQ DJ|U` CYx "Vʲy:Už"!DKiKiX\?=%6lS pԷϡcKTJ}E'B^X-+49w?8B%e?iKP4Aiݹ0i=>] 8!ZWԚ!3?B@m:"ͥCrxT?=5GjTEa4zǠ)> Tsv @h96qoUjX4 ,?cCu]voc#*RcaR?pH=n*DI veQY6B<"t8k(u|gTBCuj̗G vLG%"5thOYU*m_j!ssWKȹmÏED B,+ >q֦uX 7~k ˩1Xs?!FurXt%1лWؙUdfhۄB˓ZYVg"@f,ifW;?6rE)G4X9,4u FH(c^I>2u%$2RsxɂLv"tea{]%O Uī)n( *lHJH)Oix +o3xcLHlJMCJi-=J3Υg_%d&,n'8rT^|_US:9:{Ehth nP3Qܻ~dT7R4*,ǻ{@-V]Be%[o(&3Oe\j"$3=lBuݗJ#MY߾un'Be0oy<1KBnՠQ7 {2񄶪~81GB!gļ2-=E^@H·H }quPU^tcMQQռ ݆>1s˿i~;lv3gk^{ަ6wlq倲WvYUL?wwEMV6jܞy IDATc6u+,vVgmhm'ӆdh,a9G/Մ~lsqۗ")i#1~\s$ZcI;M`;,%{3v$8e֋WMx&5>&Nx9፸XI,=}'DBn )ww|>{6CY=۹ vCӒ r4l1wA #}cJC2}nv[\3ӲP,Fd>v˃`^I^C>P~uT8, ^ ?BF4R<}ixQ'0hn'lx[A`1 _1|ՔYxmuW d:O;s&KO/h|x3HҥdHjW1C;|ccrCs;T1A8^rG@ZǴ BܐBNkwgXV? (sYRSYA (PR3xZ[_?FY'%-o0s~+lo-󬌴e4?T6+7>Ï>_$^z~jcrX.=muUu ;hL$%uϏ'FHL\5qN9HE$]FL;z?;:W0Q~hT설#Jjvs<67r.R)n?Wwm9^Nܵ;DA^p~IoVzԭCm476Z!d;PdvyR8<^Cڶz}{Ua .57;|;iԫ6ó=SGvSIJH*9;;wFYk81'SbڻZلy͗f>,?&s3l͒eʹ8|7K\lObJuqz6ʲ8)I,N[Ww!MeLu فifB If~YI!3}Nea'"=oTyUÞN̪m ~}/ۺe\b8qߡW]{ )>ZbL)?J 8.lrs] ·ZBH H#%(/D:˔+\d™O*:8/xN弘b-؍("˯R`e)Z#iRWi ,@!0l`0#9d@9*N\W\Qbj~ƽ, {G$ dJN[_2i{/DbuE_, Z=_ߵ\>☵GH_7 -\`JI+0ʃKP|PPPPPPPP: ̊IiY ]+Wg+.uؿKE9nAtTTN6FCƀPPPPPPPPPPP~Pwi)TN6F5Pj.-ʉ"""""""""""aC@@@@@@@@@@]@ ߥP9QPPPPPPPPPPlCu2i4Z'-i- Җ|礽mI 7 j$*}iWr!8k+;O E}枖©Fh#=΃ޱH1Ft^FTm7Gڂ--OQUd 4$xġSai*GA@F{b;cS)X=xLpC7$84SUS$n=Y%Cyf\ H* 87Eț; ^ hc;̟/Lxp,Uɮ/ӓP Ud90XPVZE Vpöc@P KS!"nƪ8mGB7T l1u4^pL- p/ۣkJ.[rА)E_Be74prʺLmZj¥ %^ -֕f%''fYXTRDktuv\6 ?ǫܼn4nAE{HHbeT{ %917$D B,E2[ |OiP&*.P ]y.Fƈ9/}L%QE=KqM(eI>,-1[F4ևuKArb X^s2 ˆ XeqE@MdsؼGv+v˓r$*Fm.O Jlj(MX8YNlJ#k@6bmh9i:N}14ׇ XjR*2yv$4L1.K 0"O?8č܂6`!CPS#&(כ~6ah`h^cm$}GҦ/t4Aaee5rd2%aA|&Ak e)4ڂKSyKw ֆ J,zXC/^2SSvG䱶2^`b+n_?x<fNє &r!L糜攆R?;.eA/me6wlA($W-dM4S+/ 4e~*"[/y.ҿCghĆ̤>G`Ƅ *EFT\?AÐ9 ^C֠^gHئڊN-U6eihh!/#M!d&<{rxP2^f`eL<+h&4_l݃J,{}kZ b&I'5@qO;#A,V֨Ϸl;i*_Y2$NFr d:sn\sU^˲]?jD+5ާpN馀#ɫu[t$`cR}€Szl&"QRTw<0}i)@Z;D?N3  Zɉ~{ݷB2r)XǮwK?=A}G췬~AK -W%ڸOJ%/x{b~5 ż"Qae%g%do䴦eKrJc6)wu-|7 lK<ۨ=ᘑvJ`|1즣؊@3{{] אVIc z)'R4a( ben촵򎸲-f]W7$*LђPRqȬٰLQ8VMKzJȯ8~AtrNF~d/:aֈF˞ڗusm2%G-}r{7#Ҕ[D Jt\N9sZp%W(b]'!osqʶq3knIs$P]m#}WEC\. q))J͍ οNȯ*9::n7Pͩ<3ļiS<ܺ7Wǎ.dN&Mʺ=|q+ϼs<]VSZ0{'zyYAK7 VZ#:0)p#soj_6:5jia2ʭ9}ZF}W TƥG|=<<&&qAbcMT2`bȍL.W ɪ9F}wY]rS / ~ufxmC?Iwhh*{uTNMڦ\db0/)fwYB4rՓoe`-k[_OȫX twJ4{ëNm~5IUh9O[11?J+HTIy%nƽ+IsIXsz in5F-` zVv穑+P\(yXI!a9EIiͮ&C[sioDHA#ܜxkD%-u~[^ȐWbcU$9 ㏬],ږů& PEO'Vnj+a/~zFI~M Z^e+HвH?7Na5(Hui, >۬o }ϳa3l#i܇/}2Xn[aC mm f2_V79_%boi͚$ &bMrgi5MIcqI(S>g8 `TwD+.$*3yp8C Fx MoR-Vi6k;G}Q_|w{^uil.~;0vZk䕊My /_ƪUi *lFWqׅG M5"b2}O-43l"wE%n6-\?reSM<+Z|aKBRe{4ͣe1DfgB]M̷踸mG7a.nT< [2 ϝ-PzO/K(:w ^$ bwQiiߖ~ 󇊗G_]nAγ+2cHUU-DnHj"KJ:i~YԔ@6yl#o?H )L7tJV-+o.+JhXqۋ%o19H@hKܫ&S5LW¶e"7@Rgjs#nU޼~{Q+'ϰqulNV()(%6zjo+ Ҹ|&27RMNjebZ`` TS^-A 0afx8W1̲E OK֋Hyzy s,*nZ;[)%ySIsONY#G?#[/J\~ӌ]J>wӆicG8 j5k 2RŸ xmfX8 (6b+y˺x=޹j$15ӥ#ne[5(UrɃiboEHT0sڥ(lm6aFw<}YnW弈,U1S[Zhq؅s2 5_U * mG|rjn^a;$VPa'{u؄R[c+x92j#1 ő`v97ɴ(WF&YւK/ȿ e)XA z2:)K\q#+ ]W4~ :ͺ!'[<i҂.i`$Exy^_ J^ٰ΍ruUjȈ ݭ * r.^4#{'PbʚR~cϏ )gi°{?KjdxxMvfV9sdVgB3q\2XKYF<":i\Oa.{dis٨8i5i`])p] >u5́]22ͬo *~m[ձ84aBը5`.4j`cљcF^)$303%;MIjE"4w3^Sw /(UEtmT)QDl鳟>(4*Jt.eل "ߊΝ9s朙yÓk@EM'ÀnVNAzkr>L>X`# 9s]g>L.|]Y\,/P>5U ,lm,;T'%1+xz)za/D6Feb whcdD}.(L5v2#2,-go<~J{"KhK;_쮟gxk[75)p@Ic~B~KD(_~gN{f/YO( h0hB#*(f/9|wn?=@>igJX8=G 4,^كg^=p8A稆*_s.YJ R7Η9 / Λ%/lgD3iG4-@jV :Fm6|y.~|LdBw @<::*~5gYg{{_kޖ48EmZInn=M Ȅ}ߵwgHIP !셆*oҘfc̨R;IF̴@A.&HEsz0aBþ=@4=L=-u_ܽf ȁ'-DP1q>evZq3?Auˑ3}Ax-7ۀ_}UNz#ju?{bXT0 IDAT  ꝝ jĀo@ -\yjZg'Y3< =y!aM)|{L_%eӆչH&VƋv7J64F d.9[{}FEޫ{tZRelQCUH aH\eR[)YB '5s; v[V\**L Yq/P=q++ ~(H,Ĉd %CTF2U jt]tFxQ(K;)s1G&'7a#X GZCH.fc6"2E,D'?y|K?k𵆝`*yk(B6a HANxs[Lǹk%DXu!H[AXLI|i4U NT@کknl~ 7)k9eC,4L$>Fo*wԝ9kE@j%RӰkrs"4r}WMISq|v j LURI"Rc=&r](v F4yoS٢A},:솂DEV~{ bz^3urB`?ȍgy澁 \Ռz 6 <+~FCD4x<7űsw]j˂\`aL[+*KCke"o V1m@Nlr z9"&L_&q^cR4\^*W VpۇGV˃CKh`3rS(GNF->;͝Fa> A-=pj_FE҉q&8ZYtFg%D"UbD96w[r`oɜė?z:6h``^xbU4 V^FvCKhcIc'uHZ!_wֺW;U>5d&u_ZBab5kǺ.Hv3H&^gԧOx1IfвܷpͶ*|/?Ֆc5idYܨH"LZv[MU(o,Av m8zf%z9є;4,Ыv*VX^UUREa422(Ծg1uΎߓc=VX(_QBT0ዮu2& (?`Ym̻p7QŇR6hJ- Lntv-F> w+h1Ly  s/18{ 򌚌l! A.xFZP4t@_@!+;`%FeCKoYCE6 pZՄE4YNynM׮ۼ`\/W;kp)#/:w8mb$j.SMd̚ϑtF;pHT0v冏6 e$(|Ovu2gO|,aNf7NMz] Olk`KkAkCF_A%bn5hvdS񰵶66!uiG.H̙xY`+#k H(Yro8 tI% ! Nl0-^_b꬛JE*!)T QK_!#͂s @:v8l2oHa`gG"yiRj-弓].]4ɻ{PqW53%ڲW _ʔL!HcAgqggr qO5iW:ncdPOcuq &w6>8/Inς灰4_m8t$Z)Qs/ K[ \)oLj5}UIK>sqxWrl3BډyLFwv`SFA:[tdhj1k%S]xz/Ʋ:[|W@d<9qwoZy,UTBX8E4Ѣbx!"\cpeYMh^rPva捕mxB>-0A tN0$ГO8df5 'HAf􍲐Fъ( U ~So,(>2cgd@5̸*x5!,ZIlAwp E sM07{01c)0.Ƥ}BLM8~C7EfpYXDRJ.jW<^l\׀QLI.,9t$\zqn؃i6wÌ'NN$ :{'>LDVkuNpds/sB?^^8{bK<]AbW3CB78JiW,3D[ոԖ߷(eW3J>RG,1Vr)e~m-Vd+oM l zzi 9ʼnбچ Au[U;a)yWPlpS`!$Q |,1ځ;7zAC.֊OPஸL'89\a7 A R{쌚HPbL.@rߙ ]Lo`fBMlueXtZ7:UUxmWOhom8i,60|HKq3=,.c-8^3ʢwiwv:#<ן}VXI,xrbu߭"dROP>83؊:j}QDΫ`Tg^0Hd}"NfԔd\s)Yꤗ/q?&9RMƒBCr6XED|!{SR$Iٟ۷cT%m4WT찡vlRb[h6K(A h4m#4X7rgH, 8w_}FVX4]Z61o7n\L.ˤ :b _o@ګsJvL2l`_x'%F z Wܙ_eto4>.)̻q@둋&j4ӹΗ15‹rW45tysáme0} x2nS!eêG`txq|w=Hr14)V<84<Urk}")یvpHLry5f*~}f7z:rj{i lRO ֪8@8~68<:[ Ⱈ兙o6!%z>+΄劢OсgN<u:R@=zjhdCYt?7% hEiQo^< %~1dKw˪AuisW#kDJn<[`ʤW'>EbeQ >y_} JKܠ{I5u~K6&M/g1͊ ~b Tsʪn,̙v6T\lp5<\g5L>vO-z{m>c,k[o:3ӱ[2Gr䋓*8m #E'Ju֣\y񖸂l ?Fgv= H&rWp &Hc+yUn UʒdbivK._wTgJ,AAntnT (m8Ih{$E89H|)%_^}Z[gӰ~'yh*P0~Ga sb>uxŗ23onBi"9:ڸYU rIH ɧ],fCN!ˁ w B. _Vىb@a: W h;.|aܽ(vii"Hq/`dWӟ6k#Jr#}#yu3b` ŵK* X.:\oaWA_ݛ0>:hMG~Tj^N]D8vry43=(7Lt[Ձ9O񰫫;/^Wf%?D~ '>,;5t8Rhf詉1?u>'o|]C^\G{/pCO&QxՒDQ0{Q9AwNԱ_{ZM$ ]Gyߣ{yoj9%Lb{G@VMS旔#([%3*`۪N]uU`5N}n?,Sq_wu%2ѡqLnO4eTNJ~yڷW7u% їti'#ҥmac&PUv@h8 2cɧ5bxDŽ^!It=AݴUTUn#Vu1tGZjʘ/kcHVmiēuH~;7qH=k!3*lE}r'48JMfѕ{V3WS$>t/ʢF+6JZgcQ_ SDu-A6,z lھ=̴)DvŗsNZeF} 6nW$qm >po1QenY7G#xZX  @'}12 }m򵯠2Tk񢓯R'rOߘ~,pe~-Pc!! nVzÛG!!JBF[IC:1KPhZ-.N<h2뾓-몋i!!!!!!!!!!y&@<؝!!!!!!!!!!!"icjc```````````!v````````````oA)A6<6 F_jҊPߚnjn롿> K*7/pcȪEWyL5 ;CάsvH ?L\7_)Hi=Dt||suDܷ & v-m0Q00p8 V_1E2nٽqSf th'c,3+z1micԅ˧zTZrg)3F_|>[b3g ID[ WHhjۯCV6tE/_ț0@TbXLzQnGw#B5ۿ-<_9I%hc!D%lM` *;gDT|AfʻWNhSb~,׳8'Ɗam􈡞}lXh B_\<{]⫃FK޹~~;Ԛ1Gdᇌ4qAa39aI/V7#V j])zW lSH+Wi_Pk^gMqեa~)uv6"?c#S$8U# i/$*4[3UE<&4 IDAT8;s\DXrk/Cעq PR~MqIŅa8asX`Ҷ ?4(Ӟ%@lè*t_` cmNJUd}H-3G 殰's*T]X~͗AWF6=oޓL,5QI>e0Ov $";~K@ɏgW1d>`_r$"@ Qv2ev*kv~)Xȯdݍ[\jҫ&X$=7V4tmTJͥ,t%Nf2L`GfPx49̚kx?pRW$%u\G _L5 ~ŠcAPQߋזFW:{ D˸:V>> fjm>P3nF*XҭO )Zts4Sirό4[ ?v)f6+O_$~ɬaژz [c CIb|4P VuԷ|{k+wcQ0^O :~pqШ0@\~Ȃx%ڝ*鍯ʿ,N|^Y@gzoF?uMè*cqE]-nd):aI8ES+ѳm;P0(aE1q]xfÐ/nK;D_΃ݹM ;l F[W_+~|[] UZV{tT\ QV@7"c3dOGZV0xYPvze;!O#R2ݻ-I5mZ֙ӛm"#/(OӬ_v|iW>82>nz/mLQjyW Y%$E;L3]}OFa؍_?}|9i.p۠mg?uIV}yV֝1oTk5P X=g"Qtޝ[fҲ~YѩlFţoF~SZJckjveeA(PUM뭃Eܴ;M .YGrERHZq{ib(ZyA?<ѶI]EPSP۔* ҲxM}S;ׁ.]y̸!ogWղ5 zyِբ<6yq;$:ešOE 겜1)_Ӿ2e5]zzx ͵Ȋ  S^Y‘TuM;Z9[pϺXs)H@qTC 6oV[RԜ4HSGoΫ+*ײ9=j0A$sUOb K|1UYA?PZov>7{¹Pؓe)I8ֱB )"`؀cX3ٟ֕.a.Vu;(ޒMKn-pl`2]wEςQ WDpX :Qt[ָ'ov%n .~sǼJ8s͵ncpGh;ݚn!鸱yA7p8>Ttnubb(eC,k%?ylc SM[WV9 *5yMi_G^w&R%e=`Ox’2L+T>U2zoa^Szdq?F}.|:~`bV'јa}Xg+<(־Gqp-71?g9rވ".}]YT q_akDVSNɣPUͭhz;xԊ?=ɥp\uP`#\*2ß]J*[4^5~YMVؤ{E# >>%w<_G8eU%F%D_Z7*Q`q,/IW,VzYʡyYkMyWP;vdpaul$lYfZuJH%+wL# 0]4]"b*8ȔE)OcyIka>6:xN2w@omDf3[ГAh (7\_6E}T1OP+YAI}ͱk)yqu؅Qb?nyNh5+eW-$NG<{-!' _9/ ҦG{s^80fθsW.Pĵ6=Y~·IGҾ1gG̾t: 3吪*T8@2h7% pe>YD=s]XJc*HyX`3t0S#>vq4]oؔeM=LO8'+wY̥a.YAq@s=u*(<2nR(ë[ػ>EM[ ,+ce~٫Բw_:Ykk4N3v-q5hܽYS0UY5'P݆NŜ%ܸ"?ֳ^m':xOrP$\\Rpc)|:Vfx@3Ŧ2rr<>~l7S#= U52)è=y?xuRp \az(͘2a3{vka+ ̏ҥKU [[u5IxvEIn̫/ ^ ^[]h; lJపʾe} 䋲DQv{[3cQIKDIZnRȣq}8c!l_-'m\FY{씹sG8DdvvIƝמziٗ8\Ai(=#*oW: N^ly~.|}||"ckqʧvMꈬ'L֞0i__2eiI`Q!B?5: {͢2ƥnpk D-M+iŚ+?CT9ӷGT6jo~,RzC*vV|<(k`a-\yjZg'Y7K~@7 JG\Ȑm)ǟ ,Eqٴauc$]bG jk '=.aO_D1=m&wVس臟̬oe .tL܇zV T|ĆzB+ FC%bR6x&G*Q& Qt0M#'i j)E9 G瞒cUyh jk苆lj"O_@8)!겙gT佺wnH %EL^$,q_m:j* `r,D5ԖAaʥu֠%|΂ quCVC(Ƌ.'~O\JcR& 5N;lns.'*$l `MM;σmZQ020x7^$E!dҾ4E fbp66ob1Sd"OeiwZg BYDjnϰɏi:o "2&Uв4eu8ܥONd0R l,8MAa{;m÷|4،rU[R$T+3aR*{uFsT睪L`uhyy#ȘzkPD$p Lh!5g rKBjz!qvv &[nkx]qN~S1~BZ3 ,@EY C]toZTA_c_pJ+  >#y)<8Hޓ7fPu""(/^nNBL@@jKEAh8kNBc5)^}b8uxέk7oX͛lf1Pw5;zb߾wG|I( 'D5HPpעȯsmP DP5hml^ 0SIVU,L'-/s^ϱ@6iRuCǎ#3D ]U-vА% C5GP5E WaIʖ*WkP |!֏@5hN9ξw]p($x$&5|W[<`GRᐐɿ~wwӂTWӜ/j8-:OE/`)Qނ~VOa7]N2,7#| KRL %2P AXrE7]KPZMEiS2 ok 3)l"H  Y -T)~7ƴjV^ )c|$̭)ƢĆ~|羰Rƫ@f뇢tHiMEΐKelu-i&;\tem{"e)ǀ4dN|YpHK_x5 42U4 ! Hԑxl;N& V?SL*oWyP.w1,Ճds"O/lģƬA@$4H"Μ qLMf0c$O1~rLQz=OћE)Y@I +PZ j_`࣡j\^jK_4zlTlW3J>R,1Vr)e~m-Vd+oM l zism`Kނ7ݑSMɻJfӆ_%X g\dܹ rVdAsBY_(pW\S\-8r:XTsņ_7FEyHZ ߫X!(r *h }_ $;0bpD`o_S6dGIBBc&)"XFѓeBdAC#0S㰪By B!Q3Sԭod(O5%R5{X0@ZBYLZu42>^FpsQ_if<?u=7"_{!wӑ: g~kw}fUg^Zzm7[bfxlb3 ?w _9f{X][V0-p;fGٕE7/H50"<ן}VXI,xrbu߭B3L* X#eoZ_A*p.*4AbS .NU/9\"7x}&)0F8u`- XI ٟ۷#X+m4W7:o&` ff|Yhv!0km<:͠}L[Mv i96|WAgY̒w_m vpsJvL2>`_x'dQB]A4|j;L4{炵<%y7]8hYeBUk(Y)(8nP IDAT͌c/=AWTֽI\.=^_qMqu3"xXAH6#U:\^MYBoٍ(i:trKn< 9Lzu^z+Y +X82S5ŢW}~z%c"/XBfT?P.G!g=.lI{^H7 !7% < |hEiQo^_=yopDΔlFq%3,ܬ`q=PōC|_\^)RCY0ηT`a!'J~wW]Yu7^߀dȜigLzk͵ ^#Eue_og1p악=.kҶtfƽcLe:夋' Usq|jYEjwQ^x/,e CMa; bҼ)uuC{Gzwג:^w' t=Eߙ!hcjгKE'a݊FШY@&V#0~Ga sb>uxŗ23oy"9:ڸYU rI*%FX ;NCcIS/iD݃0{ a:{zs7Ebw/]xZǽF8Ri ڈ@Hn]XBq1N'~~!UPX v#?k*xŎ R/m.";9xA&a:í@ǜۧxՇ*6|3N Ό?%k&T6ӓAwNݩWB!ͫJkSupwx z Z=b@}WkK/^䐙u>'o|] uybzɐRڌgXp~ҿCBxB_߁+Qbr}',&Ji>ƞ8|\wrCKhf˭S|LѨ`гAdM}d2볳aB.ҙQVpꪫBkiwutɔd5=} 8nD&R;:}3ѹgk[ק 2*m'%<۫Pύ NFwKg% Iۨu"ΉAn!7lcƊV4@1'Nq;O'}Yysϱ R\bRڝ;`"H }􈻘K4ڂGoSԖ;uB0iZ;ӊ2BjڨV퍕" UYӬsid&tm,?Mgm5e@t: & cjL44w4mhGzCaDh[n1@~Kjg vu'D2Uˠs# s`k3u=$M.:ҲO6.&60l|>UADj8{\כ$$*w w.gpeY+ckTUIQ7rה=RsrT%U9[>~A2뀪5겷rWu.My(&2:d4lv&ylz_ӡUL^0110@Go o,&lv,rLwI7fD mF0ARkaPaZ5dS6|s/NC2>G1kvEK1k|10ZMj} I$-xb%?u\g-c!!jXxM1s3Y~ēR'rOߘ"Rݽpae~%0]0000~8/.0h_c .CB [ewhZ-.N< CM($KMܪGh#5  M/Hĩ&ˑRHQ{:W%fEF%W(:֦߁FCCLX!           _lצF BT0a00000000000~=0kSL#           T`!*BA)*m'Po2p~%0]00000Z!}dja*,ߣ0f~T[_Ϣgҳx[Vk ol!ꛂKJA1(_/# kGs9 jv_XV6iA ~auD1a5DA}3Zdhw6}υe &(|џ BޝȬ+D%c3˞O3ة/ X6X\z{"|F\A[7ͫ-{e~7/@RTQ7jgn}c<:5/NM Temvv{@8тf UokQE}J9%7'RuXX:8tQ$0}jdy6إ Bx2b[ʫk+&moJLToGmsڪNݜ֭-L<2"p˷ r"ͬ./J'nWe$ifЪR&>rzkȗ5=.F7F ?2^ɯõ[wlZfD(1ޮC3EHc,8lzME~}x?w4- ~[ `sl}شW NƗ^S96{, ~olM!fOts@]]^~)!2UY.ڸ[Qr[(K,CI^G V1 [wlwH`!H8a=̔toV-w[,`'g4 -~Y }<fW~ A9 v93xg3H +ʝpW5j`6r-k2a0@2ziu9 kQ[9$- 84̲Œ׷GVK>M_0، "DE"fU: vDAECM 5+^Ovڽ[FzT 3)έG:Ns7ȗE0DNMնu[C]*]jLVˍ+H ˔ZxˁNkYnEȄ'YHc-2Ҡj4gL #l:L@ha6۬_KriT2]=VJdPم 4Fk5EY}x_=%@-ɒ=xom(*zcHUw3"dr7Vo@ڊL:|j۩5,9Խ@Rk3?º+AS]"dTFߊA":RH$6].k]FzZ~fFJ $jоCCKS$mc+Bf{oHJ&-O)x!/+t6om6{PVX_.ﵟ̱%Dӂν%#K7%}N/!RU Z8pfxk9|ĀR@~>&k7%Xq|ys$8+W8{7!5Ѧfέu%]hIػ p;8)Yu6yd pŤ+.I?P2 zQ./AD"UAc?T<ˉzӳgzvϳb`BQ;,l22"o$+I86mgM˖JPn Eu puąX#|:]~wLe2{*j$+\ʡbUvԀ2e t)>GRqHBrZqVjahҾ]/+$41% LT ֈa2 .&}<.0>AcJ_YU͇ݑkk(ƬiM&;yHπ 9-z)B^G ~|UtRrjvn>JRV$BltTf/:x7Sh15ȩ+X.=~>9[s4jRsqk/KYw3}#҄O$l/\:%)XRҵϬ#\r@XX .8< 7rӻ RQ Ȱ%gq+C^OC>H'<~v9 q Gɚ}"?Jx`lDoEN@IV ִO Ey99QV?}xhd+V]"I I mYԠ*sʢXGEg |-ZJ)>^U~VrNC4iFˀWsE?R^Yaۨw/<`$. wdҺL6/Hvr Wt.2E';wD%&ٽ勫،1I8IM]g&Hy$|,5ru'Ƅ~t<]NN9VVx礅(d/5zvuh:V5| Ԙs{+KӁZ質 'T146ΰw^.ʳBg ,3΄lxQ++OafCI*ջr44.%;I.O.ə{_nIziظts4415 ;P4;Ɖco 9q[젉y2{Ctlͦ l)^= I鷴ƺJFko=tM<WH4z%l Yf>wbl{n·趵icZ[KCŬ*/x7Gϖ4QwENv2DS^Y`J6:jJ4*UIb,!rzU~Ly.-xݺ1n aͦm{&l8`K"3qqFt#tԣMAMqz|jN~i QXH%ȿ#}sLd}rRżt|2l-;{3r@* g$>"(_AxU.,:жm IDz1hL[`ΦL~zS,!آN Z"@*˾ .C)lmM`M~%2{U,dܷ|"L&BŌ#L"ST qvCݰnE8bRWc61@P^QEc}7xj@ ,F6ҦQi*-̼W/h-IVL̾밉 $+`OOiZGe~6#▿( 2rm0s6գS:&"F<"S~&tCǤ#,/DkӘU Ekw*Eq L뇛v ]h V6=FWУRia=Zߗ%T_w@OKu7_R!F^ڳk3}<4Dɀ)f&א[t1.֦J@!8S୪Rmiɲnx-{m_'4&cjxnl]]NϜa5?ȠIE+ղ?ٙ 5Y4ĕ`FVnx(Ic}x1UG:K.Fژ\pz-vYE@:-\ `SV7G8e·ȳ(Hd&rWLebd$JcaZ~%"".'0P1 qbࢶ&ː~-W8A7n&KY ̓0&XLhK@2u ,Ă rOec&rŖ2^&"o(z$azΐủG|a$Po (2[)yS, kk2>F'yr0['$kU#' b>F͂C>"SI#kBvmz۲MD{ E+B. N+/ܶkoG,jWQ*;Ϊ,pSIJuEcHhÿX$=>z14l' GHxe;y t#3ogVf\[cw>=_.߼T,z7lߑEm{G'c9|v*e?@a`T\f^V&q@iE36l O _K7jCEذ.ࣈ L[X8) Ch(&BUI.GW&RY06Yj|h%fUsnzw꿭*U?/+:2 !bX >CWRdKƻQBMqNh\YUQʆ%˲!sːhxm2H?j iVwp#?~؄E6&BԤSOhC\WSab(ZlAr_QV$Y%bc{5ڭUey7b4#J?WLqleq4)>O2ZzolcZ[!s RwP\_oM0w>0=9iLuUMt_qZŅr׷׷w!r<&E1z84dգQdX-͎j5 B]0c8fl)`<0 KjKRw H$ruH`U3(-"cLZZc˔2X `6fv:;+U>DxxvNfRJGL*iw W~o@Ί-j3"*=JCcֲW2Og!K*6@]:RqPliR`QfMipkC0"K0lϞ W2XR9Tza=šT_=`Kϙbs@lMR=#9Ơ_F~Rc򶘥GHUUʮ ˽`&X /N__%8 M Y(3zsyQu@P5E>XߖS nOP'L|>ux0P"X?5~ћ hYnhp>*M"fܼW{[lUY^] ƫe~`gL KBm $7[(ʀ㔠+92SRn5ۊ3`U7PӄBfb= [v4j U}&M7k%'W+&'zY+ZqS'A u0Q Lߊ Vb!0 ,CZra_e !W4F~O qܓ"@M[鈗GvjL-RN 2%F L9f_kCOy:c24 pKM(%殲9u *t%Ok$PcZ[J_Nbe-OCتЇV$~5u2(cYRm͖$1l$q'o•PAa=|JxBNZu( p^,% m0ܣ7TUp<@(CfS/QOD@-F#TcVEml@^^e#~ь69 $+ەfpNh,E6ZHgP7env'(h:r%p1>c>߂XauKE!.qgus'< {&ߢ:e$ƽUYU>(U,#:ejTKnw))cLEV.' ^IVO൭.Z7͌NpuѪzLlA H&DXs+XH_!](咎Y쾚(EWq6R_͟`-ii׉'6VH|[`HũpǺ.l0s8H_, qGNؖyJ]佼jw@qwZ͟?OY#K/ww.pXQV:Ki?PmtA[<]]EE4k-"[~h+w2䎫 >V}\'Geu^$D'MPŨ>rd؂f-C] \.RcRL)Cg] *<˪⃠PK64c-ށ%4_D/a+'"fa8e ?ܳ`5Ms-'p) X븃2 |.8w - ©jJ&cOhY{`XYLɥwa| &Q",X5>D(R14{ŒiPbf[1%#آ/ƿc_8po_>=Gv PvUŒG0⦍GROqP3`0OccOB4uF}qÛM#HiypG3)ps/;4vOsrJs/㥇LGi 9 j!?*x/ X+M`NްdrYDdmH _}KPF*f+[f ng~)s9\0c-Vl$ _+j 6+Ir8i֗WasEe,+Z"bV6R=(*E?M(z{P>c6NQ,+ /h|~ XhoIʼn+ˋ^:(((<9Ў9Sd:yj]Q$Qfpт?>VS~V܁2:yȝЁKc Prl5,i;xtsn>X ń 0+"M%ӢmvIxzVtgUyڛcG2]i nǤIӁnPَ}<4 ~8 n."E\~eYb-{idhxyiWKxqKFjg*g;Q#k^FlO}>x}~䆯\f7z=]z]V*8q5 |M&xֲ^wU~k-MiEARƍ_ Go}B) V- ǂ,Mh/E1vݻ8CUbtGl HzS:*1Ŕ3$8dEFB.gjYwօy.>[6x*׷waZ_am8ZeR_xy,mV^pm;g;j\߸]7R)ѳ-27|=@b8yo}oq +-Fͭ<"-.Yrt8}/>G7E^FN=ONfƸ&t_x>:#KANAjC~v/Cr=(som- J-Fv# q5,_b'y/B =CK*-mϏ8@R ho9`82LY͐*v)|yznnYґ -Y< v $IIsL']VC8x<3`I KXcw)WZ 䈇Oyp_\JL7ANT3!&u nuPǭ´aq#jW-3ҶK]@jM^*ys圉]i߂KQmI H Vq[j(iLC& 4$]=ڹ`2z37q1ӱndϢS:O x9Iȑ[v= ?{c]mw+emC~u˂Z٦d"{`$PUf~Z@"EzڵPSy۔%;R,_CDDㅛyP֧5LOs^\M8ֲv02H#.Z;v._DhXx:!C=u5YtKQyԟWGJ#ST& }a~G&uQe5u-= Im流T6sbRSeX- Zzu^`/ϓ0(ɄxQ/(wZc9w~ Ӧ1VdҨ VVg]^+ qn&-=Ww\)tEou&L:XԿhûja씔7%^bT{o7gmN l}jhh{a+j [ s3$iFubZ2D3A֦r @߿e&E~c:8ytl@EBF *ZƖ}>mT/Ө÷23OWg}-u&EqKlu ڙ))hLKO갑9Ӧrڶ"*f'-4C<ٯ2v5ggO $lV€a>iVD*S]QG 3wPQǓ25 {-R7Ѫ-/ХlE6V#yo\C=4=nlN3':XQgRPѶt8{8 -RYU98cK,d9zʵ7dX-|7k/ΡҔr{62oK"@"@"~(s9!%X;^>mZ/ i%CFfM \ &/ѴA KɖF/:$Q}RpkImPV$$$ }YN#[xgp)9^ֆZq6 B&/@iF p/Ưd2dW0#jPX_)ns 8 ^oY (T:ED IHHHH^~T"78k`Cq äck "!ıJwQi="3L ]~-P֒Qak dD[@z"kFD%_s&     hQ}& 6&CX#,d&@G6>&[H"@"@"@"@"@"@"@"@"@"@"P#BX#,d&@GT-$          R!2DDDDDDDDDDD#@*ͿԈ\2DD# >dR 4f56&41FDDDI@D1-/~ ?Af?Uw1 )h;ʊ\V.Y娳<*)!V?"ͻVHͩ~Ϊ,}Q} ^̶ͩp9\Q6Hl@Yr,?TV.˼|柫 9n` ![}ŪWŧ| -\{Ũ dQo 4O$}d`b3sr,5m}s+AMAҚS8!}>xˣ(QJF&]4͜ (Ϊ~PB.j C9*gbn߱'9 {p"HSh̜vxM ا/S22K+,m]{8m*h1m@iNʛ7q2STZrYieBDvL`H녪җL;?T&ߩeKh `iޯ2^3/E*NOOn۰GnZlqe#KF;ji-+Mx "غjЂ{׵`4,i|c矡` L EslX(Xpo!-usRauUBƺ_F şS߻g'A=0ҏA|URgsMgv>߫,/J{9|o?ۖkX2bƊ¼jw9@ۦR!о=a(FyBӻ5m yɊ@?y|PTڀ?f9s{su6/ 3Gd>=B|F.tףG<5F07Tzҩ>^|݊!JX}$9됀4j^ʛc[e^gu~q~Ug> EM%hyyʿUAyݹn(R2?S)Mj6]zvs$4\#@vql2u5o2MÈSV= GHӑ:L;C3d/C^Tjm /^GOȪ1 rQfL:]?'%}i^=V_Z$$$|ڏ%eUP|*&jS R:|GaoާJzLyM[1^7,jtԘ ds˓Yإďys3KOoZJlgZn}m[* /&LW>Yv2I8ѽ#p=44&y9?M-exyy<`.3w;έH*簣tˑklr!`qԼnp9 *:g&3Yf?\`Y@jp4^,߰Vpǜ%-}^`T}( %~J+1v\wd5]~Tw9ld!5aoEe Tttݣ! 'GR2d&CZ^q׽_[Q`> >6bǛ{F_2U=ڛ-܀_A^E"lsLz{򞿠׃{e&.2өZ©Aʳ.n. KU"Z43㐄2Ф}GO6!JFcJ_YU͇ݑ/|">}uAfHt_PTUTmanųM[޽.L^ðD,\ɓ1Ģ$ϋ˯јK_M\`A7'U l:xyv0Eڨ !dGe깨-~;1LFboM|2r V%GGOEqZ ub{Hob?Gtra3,e%_;PHr<<)Tx2 iVB2&6}NFL;j^rW}xc>zv]͐$/a$%KJ5CtK +EBZ8xzQ]B+^r@L0#p“݃W!~h޽kr>ݼaǷ鄇RB֮0ķ?.(YOdW?T zl- h U"i*ݚiH~p /'44'uQcҷuT'T`V>]BQR M +L.JLugefhS$uĤyEƶk_xm![LɢxsBƫn&.2`\ϊWV6*݋w='V%ysnXLJ6nw * r2_̷PBƝ'O\T-{J$.J)N1U/H?i5~/7npyI"}]t#Am |Gt?$?1&C\ٽ쪧@ yfb Rq^z3 f!k'8,Ԯ-cf'֑`;%fP^yU)qՠBC'8eĞCih-[qNZHBav(C4q1 jB!qjW:chyZ&N`kK | =6íBy^jG-|>@Y;L#bPuj#~GfOOBm2}n3ĥHLFRb_㗤xR f RD'Ωcsz@W wQM5uI@oJ-TD:je2P%! )n(hۉILi $)|@Foͱn&z )6C'OCZ SˈSYG{h#N>'ӮPBHT;[p.ڠٽ-U7.^TDM tCصguQAʋ?:\uTp9؎BFAi12C_,HLeUMqirf@lr_D aHԱ}j6YP^aSЬᕐښ+/`S+n5G(ba* Pؽy97 `ی&c}>Lk=/;q[hװ Wn;Ꮳ N+R<Ƹ*E4v*RU5[,^J=4E}Y:PJͺ̅K NVxW=%6U.Bi DCbΘ{ ~x4(NqBNܽV+;h5Vg jQ@:s~V F%ln[;6ƭ4X̪wϮ^ܼo1yŴ *lOfʻg n=jNjٚM2R޽z4pI>^_KGko=tM<WH4z%޾v^vt_AN}EH3AO0:c6V-v6# @$`^9-x侨|>4[|"\WeV4m?!4}C01&iGUimiޭI~rNFhhڋ;kLFGMF*iY'w5*ήdʫwmt֍(,ukdk6mϠ54` xK/%[τVJ-)p )@/,cc""FϠ2I3#Y*FDzʰ,2pPh7HE&R"#(Oh֮e>`V'Ct!Sl#̽ɔoulje2.gSbHP  Xl_|]Cu;!Гk p3^_rJt3vtW`1E*}Ȳ-)ay 0C1T( ?[<{_@ EO"5LYEŜxfCa*(TDO7j]dH}lzb1Nc+ۀ׌pj>thiVGdJ3v=wPȮM}[֪{$t5|- ٰ>o^oGغw u'Z&1PcJR@̅EJ"A hFg @=\:@3ZǨdGůk᢭܌,.?}-A*l9rɪ¯tlCZˋ,Hy>)%SWS)~%CQ\eA̩훬\ۚR7xNCZ6~Ҫdl:Go3*q KFuGEIc %اpg{?{Vcd.K<ݱ qR6$! [ EL}[Vi,|/t r+U% KZHdKl=Vi!vm$ a5Pzw꿭*U?/+,s:2# !T[P9j5_ e(xtS8WVUEɲm1dyjK/}R]uzY8ݷ*aT);+Ԥ*6@OhC\WS!6P.ٌ?FR4GIZr9l+ n|t|t5W 5_AھW{{[ kzsTH0~Ҙv&:ӯ8B 9]c}=~@]LC^\C*wg$ȯTL~|*͎_kA aJplS?Xy`@Piq<ZPIXlϞ ']EGdZ):v}% W @6t fP*ߒ#GS<צ݁H__Z}qKMeq3e8D"Sqact2x5~ò Cў&w0rRJ90;2iJ^d1>Q=!G>jr *pHT3ڈ }_ΆM(/n˞Cm[a9Ee ZCir=#98Hu򶘩GH⧘UUZzeKa&Kncp A,5xACClfnPwCl a\_ߥƍ؟>YM܃h*J,74E Y{+Fam⁽g-*U$:33W9|4:p9+%-D"KbWS" hkOaH0o+_inW@UL|v?|^IX{ hD_A,#-FMp[>n ;NK9O>i)VLN!TK%j5W0_r˧NݽX, cC`ySeJf+ߊ"e^ z}8[.=D>֏"? |z2dq:M{u[ zv]mj:LmJG"ScOn x.~@@SZoƭdUQd߰my*s[‡|¢8lh{~ +JM W%)߇raaN(͠M`e;?̫8^꜂ol:x9CPQږ3(2b=(@^DN :25e\d@!l\+ix$l|Ouv/zN4;\T܇luϺ4̻!Y]xgQzg\ *,uz Lp 'Hdgf~[e+ʝ]z"芃-OCaتЇV$ڥ5u(jcYRm͖'@k[Ulz"Taj W&@wC2>=|JxBNZu( p^,% mJp cPW\MMУ/?Hl1 Jmp(.a)[( UAAO}9J$]:e$ƽ!U$__x|@aG^u\aKxYqkŢ% #+xmEh'պ~@%qx *Yi[3<ڥ]eo hƎ+*bz)L*F5S 8%}l_&DWe1zkjX{;(nVd拂jXq^IơH}5  \'X[E"MPm#/~9Pt'nQkWF?|>{y^hw@ 4R?.Ҕ5AD:rX}sÊBց l:,&t^n3KC;`h.#Z9)z$ Z4|^qqaymeuxT[o]/>K[*#W^Iv|`ʫ-h֢,+:`Tcӿ-rYłJ-|eϲ (ԒM+X˫w` -2{F;eXdx!ŨYn)NYo!lq;m /jl)z\ PǐwYkywPL´ps;Tg=9'`Pq2Νwz@ʷ haj#q$BE SCD6ّA" [T*KԦSO 3mlu:O_4.sM@¢ĭz&3s\Z IDATaɰߍp+^{ڄ+(Pk Y- nfrx~+}y&VV\t<)j 6+{8i֗asEe,+Z"bVF d'84 & ۠ u~ˉk.fҔ6۽ޔ V$؄fYъ @UG"_9 ;:"_7-_sr.俊}ڬqccY½y *m&xQ]W$Fz02kVO':"ݦeZ[u>LE۟gK=(Y^'l-h|~ XhE1'ҟ˯,/{OTw@;\pBN%y䩁kwUFD!h>[ Y7gEx<)S ܩ t,K{(:y` %6X3NK+ yy1 ґ'TD3ӱrr=LecW˛tRE;=ee=xV("z^TW%F'R{!/頧Ye \SVQ, ܼ8)=bY^a|]*vύ:v}ъ3ZD1>|NJ9`g&AeH:N'E<+Dګ`[8R6DeṮU,UF6H#G뾕^J'"@O EQߋM0)?e着Ceɐu2?H^ʸQz|-%űs[|Դ( : 77 _b w W:iK`uE)bJpdH~wݑa"ůX<3`p]t!A&[JY"րphIy|1ɧMXyBm;lv1j\߸]7Rѳ-!27|=#aoqpޒ]}o1jn,hqEj}QNo}15#'(#< 55k? ѱ_ rڵ\(/ՆF_b,zhkP3b북e ԀIMĚb|m7rܠWKr->*zqb* 0Rq&=b!^\sq&els\!3>U ySM{T@vL`M 5ndlMSX]z-Oz|o+dg_~ Pʅ:(Q^N*=w[Cd'G<k9RMAvqz~]12$Ky vqc(1(.7? Gc1\MoWu0j. hiO{.]Y)r7ڌ< n5LOs^\M8ֲv2MT_ $1xZՇyQgN+a~“vTC: :N~:6LnHԵ{'<&O=`tmŲ" ?aX- Zzu^`/ϓ0(ɄxQ/(wZc9w~ Ӧ1VdҨ VVg]^+ qn&-=Ww\)tEou&:Ms0Eb.ZF>sZ;%e'kg/Ul ^X -tz]]m mO:lSBm$|KaNS~$٘hV6c1ڴEV14swѹ"9~ԺF;3SS~;*V1qXV:fNuh,T-<'Fqxj*m{LkG'' TPaC/3mJ/m[*ӨrT:CI]LOZiDyv(44 ̪f#[ 7s ϝla2%":guj u"hLLa3wPQ25 {-AVQj=!t55VpX6!n Z)ANoH?JgUJB[\bIl&k#QK8\~C7D=`(:JS)2zplU>>ڲ;f],kS=},fЄ ɝDܵ5$ͦ+̆"CFe+l.AUh d^{csHs(,A~*NݿX?䋤6(z6bKIA |3hL]F&aJ5)|d a[}ߵl6]L& CF痾[5}??&%C[C ,?[C%s..y[ OJN"@"@"@"@"@" CF{Pi="3L ]~PIHHHHHHHH2d1nt!PVn"Oݏ$$$$$$$$$5"@zk$          hd IHHHHHHHHHHjDTk$          h ac$$$$$$$$$$$5"@*5Bf4H1BטKf?.ۯoNJ@"@"@"@"@"@"PHLUlWM4*+rYfljGLZ\hSoA_ɕ\8 .l#(-e. 9q|aDOYNc3SV.Xjs[h#%"n"X`~b[JXöaae !5nYN_KS00p__ 4oދʱԴͭ6u]_KkVO.&COyv=Y7l o6; ! q;`wv{ݝ7N]:w%G%f~SF@"+Q,|wFYrttGS&?:}cf>wSAʭ>Ky]}F~\E=y((֩L9)DF%g(tP!sVS*|||vd_6T5g산_ݦd'ۆ*CNI-j=¤އ":2%;)}XhD+rjK&CJ^;rkρ,7\}QE6y:oJ2o*WS@Nj'@~v0oฦ˕aA1ɹ%LMG^l\c /y~4&55dᘞ%,S3:@]$L66Q4/ 1,.0 k }%O!+5ȉ IL(dRz&8:g݀%L #+þ^!K10084)-LDS׎rA`mi )5\eM};Y[3qkUbj&,*mVu/q+*#Dm@)L"j-X%fb0?Xqt²JI7ld{IqThϋU5];҃u`1yk 'Sׁ§`TjB$<ԄYӬ&>Z1i9_=ab;>{* Vnq9=;ԍ}jVoDYLY)NsvCN;uNmeЃ+%{FfH"w;3V+pM(;6'%[=!vbzLtZx/QQTiSR35[G>{"򿼼J A `o3y4؟@8 yaPHp }#~Iwʲkx@:?ț7^GNKI9r'mty[\%5 FB.܎8ra.AUd̺+EpdHSTO=~$FHh^1)TT7s9*˛G )iA&%߁L2MwQC8ey=8sg.J<#g&Nj{;(j.1m8 d [;]/ʱ ?PԵ~`^_sFͿGy[\UL͹p*f!aۼ~ňw?;[B(G EY ]w{쓼W=P"'H]!4G=@&18rIhL2`20/7uģb'LE{îrƯ/-.08$zS?FhS1DorZtm% 7jm;y3y}|ApVǎ-9wҠI:*L}{2V뛇L,6m,0"Qo@+ZzBz!igt7 BVk~U$󴓉RuscݕɨYmBL| 4QkLZd0 &a&J6-@ZQIHN@tb/D_#PUOUYՈ+؈)Ɍl 'UkVb"8V3utI:p?XH6\Js3~zלy j5 %D)jPv~{^i} ;ѽdP0~Ȯ>fuP_@GT:Uw ZGS2jSC^~NI+,.aւ.2 ĩK'@1_CPLp`L#%,suĸ F|s\T'R~*.Ձ&G^B;@\ñ/pPD tcs2j@d{6Bވ X ĻWp3prҐEAΟ*YaB%⩋ê{Š_WW ,l.oDvvҴ]7NFm=y xi kQ4{Y~@8<ؖčb%/oP,9ܬFǗ#9) ߃.Dsxo5L4VO9@Xuؽ 7Hۺ c3Z 9OK'HH% Aн\Mj;!4t{;HS$?.Q&6A26@nCqD:wODNy)CE"K/-e%Z%0 Ҵ7TUqX9Oͣ)cpPsg /O$YLR喩@ͭ=?BX[ɋ1tཛW 7fEW:UL+fqu͗rIxbtt86zKo|-,xsu'^EIJu[8&>cbk[הDoFqN8) .ܰ!\&?]4Ҋ4f# ąsZ,5jzBz$ݭIDym"{̲&9z]>+%Bxdo6h9ԕ$nckxa@TkO\Naai ;)bF[ @BH:+k IEb!(lmY@<Ⱦ}\l^NH1p[0ԽMi''/t8Q$w:օh#)0Z"8%ZYVLى$JY6=^xp\Y bnF<,f[\d~ 2 Yō ik qf S,G9p_^CVcAħyXV ~M oV:ҴOaˋ]| m rؕ*b o~LכbԒ㩔rI#qEA*+ku*ܒ-\OA}.\R{6bcWWCM:DyZ$hZB崜'Sl<8$1#uȼrFꀸV/n%yiI1 Qј]iݘ:cr}0:D![m}.:8:)͆3+Q^ JŋbMhEd#W^q#-AE31*$*pUpusbR >2 :bÌhP4q 󆽹}>~H5QcI\AUۼqx/`'(^T\VIs_%`#R ]a ]ܦ$Ia@Ǩs˔tNrb BU'9S61 WɷY"Іy=]gQ`T4ekJ>8D]SXP yd9>]$(jH%zŀKե 8X+em~ E[t]y0 Ud]p~hAFZ=$+UУ8e)wŬ 1mp1ou) kr.++ndtkG#%|hSpo$YHYȵ 0(Ja(#b[(,Bxr6 ~}7PIk[(aWoj%JB:EVu!R̟i쾜"(tawCd;EG*K?~ѣ!-? ҽ%CY{ľ/ -C,pa=4S ܅/^F.9^+W8k_ɛ 6p|: w"\VoPscoC6:W=pԘ^GRYiY,0Ӻ0x}8ΊpFQ q Da<T `GO ?q*ДW>04;+:{ۍ/D:X,|h_和8pl,~[N6tRE>4C 7U:d.tDB/-)CBh-D֭@RұC$J*T b@_m3t=< Y2qP|`P`3^ | _Z.Pj ,Q"MkE Вal-tM*+nOf6KGz.{[7K)~WKP _o`I(]dT:Y:\ H5eRH˛6$^qA l*;Ļ|[-HX=r G{A{LD&}]Qz}p,w7@Z~5)ֆs(fdF-]ƜF%_iUwUp]@DVnst@Hݹ ٮٴ BNlgq)%5E!x{B`ck5??0ӨcWe痱k??syЂ Es<}Gtz|c+-Ȫ#N $Z&7W[Uv7s ɠ+do7Ȣ>pXzbK*+2-P~Χv f{A%Lӱ&:!K'?H^Gc*CʁSm/=Dj}Tb-^u&GY:Gk Țz] ފ:4wv.ԗף&$M;|`$hT(`dWW0Tz߱8o1Y,bv?}xImVv|'޴ RkBXRA;3ږoB"{rPaloQT _uxT#!ViFn{ߺ>a@[@ '3 UUɌs&8uQ)) _8,K ?Vn#h u}̋5ե].b^BXgH@qrNrڡdIZY.FjJ*l~5Hv&"0 M:炫 bh~bion^>K'-UF@SR1{RC{ }NvAb_6T!FGn M n_Z5T^MPrՇWZDn!F=m| blu2ӧ:~W *Ei9u@ l\{bhHD|ƻ.X[ LGcKSY|Kn^o o(?SKS"]`2D6>sO p[}?>"azsz*\;W"k^}tTY/?G_=YǛ:ΖҮKGR鋺mD&5=={`>`5%U}t6FZJ4Jyyռ'ё@rxq+P6|BA\9`A{K%*dmkt OWnue?6dy$0n3w;[F4pxy/ppp h씶RIVgQnVتχvSCQQjG=Mg(r}?\<ˎ.prH"2##########= [^j=dmwߞõeB68]6n!l###########\ as!h a =BW Y.@GWx4"! 9 @Am#p6pppppppZ\!l.e""]K2%eEwcdM#11`9@CS_(t3 w? ;,釁`DJ۲uhD^6{w ˥n3w)iJ8鿼 m45O6GB@ nߓK[||Am[*O^bă!'ER2h{¬œ;po&̒+^?rIl6>je9'ı|knZ[*~/UQtU'RƩID$Jx[%22uSTEGn$(Nn^fN^>Q)T;3U贬2MYϸS׾@]t <9̢]4z^6~*t5 Vzyh_Ȗ_"*]E]ơ@c eWܺmAR\!l HF*k9m"LEk}e9qCw<&BT1nut~ߣmR5Z5jVMyDqX CU<G@|d"_m+ήݼOzb >mZʹCkô++BT}MOo߼x&YHr^Y*9\G(JsN+jJ3>G=E6IW$dFBhhí@{$ep,fUx9zsn\N-+eEZ6~SVF) hEs[a+"_|ӟ._&):xƢpV0B(<ª~W[qbj#ve/?&Q*M5gVVp TIZU W8dpR "f`R>}!Zrb1nыVI~zr*j?\y6@ښZ68%1H*66黩- +mnFA㈡hMxtE-w:^j)n9TU\;ŒgfU*R?L]0\7W )vMUANr3Ҽ/."E9~qGq΅sɛU#{|R` !J2hds=8bYXƗ;Ƿ뤣J0Ԝ&\{ue.|j.u\(R@f0w DN/,=Վ!|y"$L=h13jHQqԖITY'ZPdM#p VP3\cb8>iAXI/'Sד ]SWXGo+ )jڻƱj-Sf&VUn<矔]ab#I|D X⹼gRRԍz czq#x>W,z Xzuo3D4PtN96( ;Ly uT^]G`"މ;b+Q7'./¯ U"cg72Yi+cOWoww7QremC2 *H{wv֓1fY IDATn>;6͗097CE׸(SzӃKTeGfYTm 7pdD:GYE\E=y((֩L9)DF%g(tP !sVS*|||vd_6T5'ia6(I$+?6WrJj fVM&>Յё)Uu--wG=Liu{B'ZS[6G*ux}r:wS0KwhCc˹=.pMFy뼑ZU]fM%jI2K酟],8)r~XPLrrni nb [<+kOc \SKY_RM9~hO_ YPRYC3 \vӭ3d=Zsm$ 8<#N<*&0Tjˠavz>8O9x `+ <"]u0DS Ҽ,*݈w>hk3tcnTh&x4{ X*rBS3*En>^j_C2KY9uh,IF⛑DxR:~"`Hzπv 7!4cl=ˤVv -&-XGZ#8cҤR2*kʚvnu_]LtJjz^AVLSQ2lo޳|km e!h{z ɊvVO2) :ad5rؗo?$Ws)G."BCW \B ^\oKbBRn[= oup&45!nZj}dDrz6q$ahbJq{NnDwLĔ3OWpݎ,'\k a+\gbmم_S{zoMj?`LW:gW3;G.DOqaQ^;:Ui 8)*qL@/iwƛ) uFS χ>7,ԥ*YG.%*RYwǎO]I1)[sѣu{ r<|% fuIb*Ѿ+ۃYlB YhN؋[/<@n_U )J@rKWu!тJŅK Nk*>I?֞MF AJf@RM<\ VV|NL'Ul|R8)jνz DGRm{q_3EMXcZX38ץTT 7jh)Y\Xo!6F>|ŝ:CHTaplZT^㷂X$cdڧwԧ2lfq^&ņ?o'd+%,U}qkt׫XIFBg zJNAdnRvg} ]WKɼxd/HeO0Vu8Hmuq~%DE]ZYsn)RCr #ڣ%C}`]@ɛρOzHe] ӿt;YAˠ+\K~/ jX\J^#Asf1}qaMJ: A"&9DS Br*F:O wG IR!|S 4{ k+ޟi$)mL4+\8x.ZnާW_`s{ڴYib"Bh=O AƶDȊ #,6mUY]]G BNyppWw4"/$S:o Vk…NW>;y3Y4V@RUY{mMEӛ7qXڃ:=Ap=Z7uB uG2@8Xڎ]2~'oDmvqW_,@ !u}, eYx-6ZTF_V+',F uLw?wq3=پjn.$"QY37 HdE}Έ!^ )C&4n~b/w6b6;MlM/z^]DZk]Y[GF°x/bƁA)8>‘Bۇg Dq2K;MJ885Ba.z $;8 vMފ@jUJI3кnӏU{ XR%[|ǻ(Rʚz"f eQ;dĂ\m\xg.0ΞpZ@t* ެ{7vW dPjS C mz]yi2E.z vt%80 0jC/ϭ~W5A5)N!4D߼s";#5:D79b?ӡ_e85cf E\RMyMˤ9PDzg'efYr`qSz@he46 Q0ٷn}C7O17W^pIe<^U#( -\z)=Z%l $uBEtvg=nHRճ1强 xN YcPI $S1V5Q), 6 L˰CZot+hJ"-Z#OBZ)r,spC5d9%˪+\=76PKak z"3=Em 򌭭;~S R_v鼬 nZ N}{XDhQZ?r~^pQ5y: !VMonPb*R,Xj޿UZ |!(P[4y]{wԖ [#&z [VgF Qty4=zʮ$l̃p!DEx"RSS)85y(9jR4@y!~ce)s.IVoߔ[Id)M4|Z7ݕɨY$޻S5W@>kLZ0 &a&J6(y*N@_t@ /G*BUD+uW81?|?OHJ(9&>,E5t{U3u 芓tlhQgxN 9S54j4K*gOIb>uUn;oL˾U okuc>`%G0K+yt KboGdY+bue@qe:<ogt.KSK%<)Po"^d6X݂ {8OKᆐZU̼Y0$)cB 8JSf#[c[БaڠS[v2SWfU`YHB83ϳCW=P C|{ ږվ HbF'V F`* ?ʫ _y-G9Havu Cl 9Ybn%UC:iG0cps__x¡D+ Bj'] y=+gKt5`? h_hE%" lUO[3WEB>f9ȁDU@ʭ/4jo9.i7{+iڇECjfRMer>oBZ6 kɳ'$])@t)&)JG͘GQq_-Cl,H#J2w@Vd~gCs.>80^Q1w.eJ]cIlm\c'A*:j(P6/ h¥- =ICw`3M^zq9W u@o1z>EС7OJ,)ϊx~hhS]6Dwoqdw/CAýhҩHT׊Ȣh0Fze!BTc_sq %"HlW%‚)JW%Hh!p5YBCг>,Ȣs׿o(@L{%V~3}4<̆z uX]E`J}'9X0BJPZT I9ֲ}K;? r$+8yq~Ll D HWs@mhxA)I]30Ѻٕ)QL)# V(GIWG`QJA zS;Ѯ<(,`si:=e}q" 4䡼g]3DQrZ%AG$(jH%תKAPb̃]RLREy>Z_iװO_zo_'\*PVԥ#|o4Ъsa:pcboG -1W̓1+qBk^  E(Kb6jJ4Rz5rqDv$6$^3Ȧv_)ptawC oXLwDQ~ݯ⽣Ē?@.r8HbwP'Z~hz}sV¨{(.pn뢴j+pZ܊BZ m2:DfȓQݡ8o`c _sp 'ObFTJ4Aa<T `GO ~L QPw}Q]n|྘:X,|h_和8p*rS T4B)sӢNpɭ(.|EtKAvZ2?J:vDIKN$cUm=wN%z( flQ`_"o |hzBcboGDY5 \N=kE'2,zdA'ϠJnB!;63%`NiD/$In<__:D׈%#|Jo-gսϳx ҹ\mRs<{][0)TхKc&<~s-`n GOeH[it&qa+xqLVuW5oш'26׊Pk79 .)aӆ|U/1n/N=>h9} ^lkK}R$!whȲ'3Y̸g@$nnNo:=It,3_oׄ[출 /d3W"0j#Cm~AXUR\w$ёh/*@cդ\R+T'2:uSY.pp_9œ{ԒvǎNYekفYˍDkvf Mu|~{x Uy;̶5lNQ~Υmד]5p=wmlaIhq֜{_T+/){:JVK}.ǯ2@y]Y-;-uAUcboGY9: [r4F n%k FQvi ˟2)0+cfņ*X> 486C\۵Uhߞ?a3+ s#%`G>J̩fi,9:ߒe((c;o^(xb9zN-3/=} <,U0ucelWV85I> j郎@޶R`HEA&@"wowC:t]=mht9AQ6H~[tZ Ryd2Jp%![ZœŔCGv  9N{Lh3k87z-\S!.)] 6& q!L}Tb(}UWz"~\ /T:c#PPR|XJ'"dB <@Om ш[Nɖb8"ļt;i:$=N~9`A/IG/n$Gp \!Ѷve QvVpoUw#Κ9w Bw:ouqxC;$Eyyռ'ё@rxe_X~ ρ [(QIDE%%k[ۥ|VxJrQn M$FW~IDWAbg ~MǽLP-]7m4w*Q8(t?sJ/7 :GB[ÓGl\% 3qcHN^[J ċ$Rx*}pݩ^FU>}=B^" ) Cx8zbCʅ)-nq@ 2|&1ne{EQBW5r67I5CӁt3֠M9iIΝԕDkػ{M]+(|~}zvho qI(kvp;{U=KZ1zaHL:jL)iƝ{Iao͖z,3\Aݮc3k)g :JKZnH2D4\VDqn~5nj*ojgm4{ g۵v[Քv9鬉_<3BǨrQodl՛]4PRȌmy:I!t9#3QW_]b$"%hsߢ`aRqg(xc8B.?p}h@*5u?6d{ͱw4 z͉yHe k6sn `pn 1*8?9WQmP®mS߁Z'PeIf wQpxy| %Y GEi?U>D6=Ju4 4n{6VPd|?\888͍bẓFDr SiT3Y[1bUj6Gи>ZS#wp8l+bD"x&@]F`.k_+!qVpppppZg è7eyjԎx9QHfy^Z0#!. @`3K*>.=Ɔ v5J2@S¦"N~###########TpqppppppppppSp;8m"+ME###########"+il4\!l*x}ww~Jk{YVI  lzuw#QnO& 0}qWlkTtuB7;Cb~q~D?$”6n+'m |F!P?!85"+[q8&m$%l 7+~O^}L),fiY;v=mi>$1֗sԙcx:[좜3D9w>a֢dyMoˑ>[*"{/t J(ybgzƩY3ni{;ò.09̛}̼}bd5<*\ծ}W (9"FLN}{RYx}h[pbʤj__Sä(w4Ti'y-jdNGѳ׽jD_mAljk࿪L Z_dj-UjR\2MUZ͂6jN %,x L C>HI F0#'WK \9+Y*҉DN`a~X QEUmsW֧*S_!\?~̿'Y$Ya?Otߘ/6lwxa\'kb{W@Df^1[kԹw!=w6m4>ލHȦi3EZ{}3kdf.c>qsW/ +8inxJzXAgZuMIߥ0bCk2{n#˹|Up#9nW26D]uiOWvY-b-7!i,%WMKXxgc~{|QP1>ABaeĴ!z*Lmqߣ9gXTF14}Ή^l99P^&eWSUz,=B>{)L7~|2,& u^?͆ϙ/W߄}UPZCW472cʰէÇ 0 m8Ӎ4 w )sϚi䣗QY>M9PHUJRH|ֹ?mh$"8_%Uʾ9* X0',Ti3Ы/(#Kjw/g`DTna@Q6joXXX%S]6p6iXYˇ^2p:ixA4qZ_[Q^U-GUhޣ;3)o%mQ)z:>7as,ⰌaIVݐNgYU[ i[7~˴"'߅h+@^p,e.QTӔD^eP??cHDc :P]r}[55i^׬sI!hOSB٥<+ԟbx`V]jfUEDxXTm6CG6F]NG(@P{Ͳق̼SGι&ÇAp aJ=c’e$TqSؼ׷084bpʪZQL2X+by{M,W:c|NcpT^.Qy5 91 oeit~/"`jRc_H"Mh }hVP8ىى L4Ʈ^ (/sKB}7od}a|oBmEPg'?1֨YdV wwp)` :/;t|/L`nz_oQ:@xQ@?zt:f( B1K1Ǘ$?5ywz/:&ЗiJX '-}a}exK"o `Y7 vŎ@[_;X8DS{AEzæ<3dU<ҠC[(d=sqr>"F|B5A33Nݯ &l h#ʒ 2׎vrͯ)~鰲7^A"֝4yݼ_yHĸB>_pkT8[ڡAH|F<|se. kwmD6#7x^qdf!I)["f֠<=xg\~'[#tT␰azHb8{7ٺ.湋'C򣀤dV$l Qqe/U |:(M-J.k4 `)6p;7۪=s:<,?Z_ͶFبz A9"u^Fg{OG>x]dZ DjzOC9/څ'>E0h41d S[NRJ*{ Yޒ@xa$6Qlg`٥*YWY7ק7Ob+]ݽ3L : WDa1 FpVS&兙i 1ၢb? CaS]gw|y<(c_srǞSPy)a~66;0rm>F=|޻Dѹ~_&0jY0اRcփxrN$2~0 HaI5lF#݅idynΣ<^ep{wSHdB.nx"Ͳ{ʄa=ytnIB2<<m O)tjp0ֶ.WAwRشaǹ+R$gP.9TEs:*i_!0LB؛ waT_vP6J5%ab-(k #]lirD帹p&~%*dShJfrDֳH2uGN:vփ)ViOߠ u$"hvu5+d5Dx@[B&ʑ*ZF}Ag;$;`u[<A\4RN3*-LQ4mDO{ ^:􁞙ô-TIʹS,M T2B66 d"x8)ʽ;ɓ̬rt(C.KS~O&0Y0اR!ح`-kfq)U*3 fNf{)Kp41z@GݻY7X0'obYd1XqGߣ>_R*hB6hBX s0` 0.0|'x,q% ̹ƶ$XԠQ0HcgG}v2j;n%T@%m"{"x˴*Mw!ں"򣟦3ZfvH.4bH 5lWMm)D8'QSAj'>GF&$D>rl4%%/at-Gl ) r~"Yy2$]&©(ݧ\QSM *4X5Ij8d(.Y2sTqtz A+7U`B[Nj.R~c~-M^~[8]5*Jdq{ةAM_qY#<(}mA+zÛDAq Nd8yb3&JI06qA>>),6x*Á)iOc$j  sI  *2ƹ67&/#0 ]9B+v} 4`qɚb;]M'fAM#% 'u ;u"*L5%ȵfEHcb JHf%I4"#7 #Y=xǔ;z]~=WЃՇ!}h>1 ~Iy Royinߊ}xL 5b橜 ?Lߥc? 7>a$0TCkEJtUY`/([,dsK8<=*Dt' IDAT4_ЂˠD[%/שm.ǂQ-(TDDtտχLKf(!yJmǁr`vsG '^2efFo0!Yy8oj;iyښe{/)j^o mفf}((6;ްr~Зe= c~>|L۾z- ZB0)FƆ%nbz03&uCKM}H* z/KBR|\tDLriZ##<79t:F֠Vi'si' <I|D3:7'gÅWï"SDr4I'оftRL5,^1|#xw?FZ "6ItRc45~[8,pR^ M* a)ĝ񖑂 {w!"8&7dpYE,._t*æfTE$lp04!èEb4Ar$j=6YO<)EUPwh\Y vmF6H}H8ȥ5|"< :MF4rA65K`@KT<A)L$Ky 0H+bz!T#n֠~C*V>g׎$k/`FU>gUNJ\jFFQQqQann~1,;Ņ<֯.AD|/<4]Z#-"*x$ d@{SVŲᇃJE EI#&Q0اHMMWaЀ2X}ՀU'MrTR*Kz`}| lC*A$Wld'0(}#FX8GyH.2I0пzk_/܋lNJ,c& G+#6^{fSz?t!bzkӴ۷])BZ2uVkqJT`2{HBczEN_ Ne02.D1}wF\Չ] UmNLAfwh4)V>yVn:,Ͻ,,JaBތ%;Smx$:[)bNR v5Ĩs*袁vjHQ% Bjy>كƚHKJ`pRKz?0DjH+9urb$:HɵjH+2UY iVWoSJ8_&l UJ$H ɑ ̬$QO|#BH%u]mar@B].QqPkş p6e`d O!Q ` %h|JoDsVoBU3$Ī [h s/15\ / vI)Zv㩦qZ5 &xgNRKU֓TT6\}ќ50~~~FJv`rNf~[LZvɄ~}w%a,LjoySΙQ  R48kl%Ŭ.X2#*N ?o\  $@ǝas##b=6 "/)S0IJ-!)FU:6jCs<= g-tVXMT@=ŷ *.~ 8B 4|xyזUqt]`!U.q >Rvla[]\ E"/S\I58܉ۡRWƑiE~rrő!b ~|C D/5{I.'`TU,O 0E2V+;x7 Ffdb"݄dAfQ,yΒ ($z $V2Uskޤv+KTAn0F IDKQ-&*O%Jkl f@M18Ճ' o8CpFAg3*C$UIygWp bMd+L*$OV!Ok,YS5mC;JL_/%!A"xH^zģCzUrٌcD1YoQCԡm0%tCT~ڄF 좝ʘ<6+m֎s}v%q9EEA!aG^ B r1iK$ II1׻EWf&3 }1 '(ޝ;Nb.tCdn` 2껠hiZ!`G +t]IQ0ſ~/㲓nr DɂJtyeLO{A8Ws:뭉B~%%n5oA}&Hʮ *}: ]NEW0<.8%6|G#+ 5,.U}]3΋'_j뾇,+Y] & %li\Г+=&cFCe\êK߲R{m }(JzX.dذCF1 `/S5SpCai'n-K.'CAaKO]=oyhgxkqEs/]# bM)j6s8?v:[99!C6<Lמ.9H,gm=hm]DP^9>oReX"A2tcS}d}(!/W72Kː´l .tHh Rxˈi흝oYBڎ(v_k'& $hiӵ>rЪqgV̌YGOϷeIU_ gQ$h7"Ehy#W9qї9kis7ڋX-˓g^pX._F,Enf9 B-|[ C`mUyC}5/0ES&.˧X_*䗦dMw%& BQX$%n>S71NZ_g~XcGx=ꮮtEp b |yTϮVq  :|h(Ev|3\oeX+V,ߏü9EiLv 9$t'Z/G>a MM&llU>>=n:0b,H U)GR4c}zs;H|wx:o] r9mMFJ[7Hcbkl %Q؟Lv!Q-q*%;v@xntENsVHNY]-OmHJ42o+vϳPo܏8[|=e 4îInĪ E|_&<pq*ѰSzu Ƒ_]Lܹa1Y;K&MO3-&݌uh$J[kv fEz}}w74aW ULIbH ~u ';+= %"eh>cOy\A,췌ߝmu']gmGTRxMcеu}`;C]AU F>;֯ zG|PbqܬL Ira߶j`hWCiϺ㡱z4cHl'w1mE*9<=u]G >9sI*Uf7քpHQbJĮ W4#UAt0d,t2(&/YtuhQpJU0r|ᶖa8NCy!H:\ @4I믶Q@*t NukGpZ-3/DNePdѨ]{QfTߩ䵿`IJ뛹tKc-QG],nX=U~<9}@Q$52׉ 4Ѷf޶]5UgE{ Wۼyz.vC&.\p&3Ck6F܄df515KPEۤψy 65KPYDʑt ]#[+,݇Y||t|ZCyȌ%ҷJ״.Q;iD,˛TXbS` $KʃW5PuTh MŹ<\<λj0G?{}qIТ<4[o(@|ӧ+tb|TKgOp 5k\p 5j7Ҏ5k\p 5knc\p 5k\?p'x\l\p 5k\p !>p 5k\p 5jʍk'ր#|>'V.:\p 5k7oȳ{9ߛn=uvT$RI/bgQ%;:+|iEk43iqpHVU>fd4k ;բOfch@0nDہ>1>y=K,*`sxL{2SyJ2d'S_Mk$5] <\#>DT  X~sQ_iY0|݇ュi*"G$+;q)nJ#JJ$ՖxBey.]߿Ԗ U;gG *`b7tEum}3 ;>J$9゚QT*\;V@r)\r?$"*=;E)v=.h(u)YԔd%~_PU]#R ͬ]ʹ!E ǤJWU31vG_Sm3=O B*2ê POSqz`yM<ioQGe1fg|΁ C%ٺ9(݅h#ǩ(N!wc&{Rg>"Tx9;TfZN?|D2F=۳?5`⏸"oq\BWոK3 iX/!SUs5"L>CnC:ǓǷ%ی(=1>_(`Vd&??6ڪ/*_k@STU lkÆkU |M{H91{v]Jӂ}徻 hynv:V.%wIlmQc겯>۶O'g\Dq~܋vO* *GG?'8fj.' Dߥa@kim!j25o-?fe\& >#,a!Uu: 9!]Qp4z\w>&eL"DA aFT2YCҾJUO;@F&RzzL^83e[\rDEM!Ӈ"ʾ'&#}{O*C h&N0SWWΤ*2+#ٵ0>ZQZl}Bs*մmx>gP,:ǟS)jƹp{Ue5TT3|*,D":tohF^ Ԣw_,D4|F7y}IL/%ѕ;vv7lMȥs?q˭*Iw'UO"7f2a@^}tO"'Ftl907F]# v5rdHB K/LVxT4,]e}k)|T r ~ 1!,UiީK `}kER1)8۲CΎX;~:Ssm]$᷑a4:<.mO|ɑԛLU7ކ{GdT }.(ԅ{`ѕTމ~;,J2D=c[&Z>U*$&ԢZSOES]i{EݞHCqV䘪%\xݢ~ Ψ;sw?e֒:scf8#M9fI7̓i!WYy_FT3y*jVf#Me'qw%Lq.WLPR1̭xJQ]rɢhcà'G 2+K"n-{{!G)"a$i}ZQ!;mD$\k`}ڂ d[7K6PZ2hܸIi5L ]IȬm'tvx\OcH~9Sc~Ia)z2V[5":*5-bˑiʪ&N}7زTPZ^ *]{v3F_v@ؚ8oL0W)jچz[)|rb:mYMLbJE-GQUս=aгRZ TZzbD8oMT\BIeVi>x[BTi+2}yRWlDn J A,^z{sF]q'Krؔ\"u,8½v5Q .ȃ6L1}t2;pi7PL GN*^cϥ28ږ!Iha%nZi_Ѹ4z;1}g ;RQ^ųөju{>|FXmj+^MM}x{ rObrc~nGB=h+`Lz9y?c B‘'Cz10ڑyl‹ B]ݤ7R}8\BHMalB\u0̳Uz5kF9-]F yg#f`VWD:"I~I 4)v* %C>Cl|FvQox M;I1ɰam ʥF|iq&hQj[5јU\UЕa! #}˩5_"-ܯ>B\,ʈ{ PX8Y^-9} 6(GM^R ]ܩJxy )ե___mUi_zWAVVbC7f|Ӏsɓ!zC>OR%|.RYvRNs¨ggBmUirl`J\hkJ<9w`,Lsا'($R5FxPnVtV87 `>rjzU5|:ZqL Zؘ=kdw M >=iFG' "  ^]KKigŽ ^l<@yxD7OُXk2E+J ~ΛٿLTSE$ٙ5ӷ=03Wy5Dlq%v\^UQ}*p!_9PV<~Ϋt MX霤?yvAY"= xͿ`Aτ&Y+24*7CXzۆi&Y//Ax%lAplK 0G &`68H*F)ٹd:1)sP(CfwinqP. ֠i#kZ^޿|`6/{nńѶxN_SQ՞g'\"7H[$^`(h86_Q3JXG B35YN=ZV[R%]=Kw=,;7_fzɃ7q*$uKczQE%53cM`YrIϞ5lSg}%rIaoP2x,0)IIEѶ1 %M\OQfEuS #9s'kY@l%hH7 /! T;&<wwF riS@]s^` fʹ2Ҩ.L~yrfnzi{\M^=^n5m^5,Q"udj@k>=y){0r5߳מU t3vp*t'7=! .'.keB'A谀JۢfĄdnB4IG'7_p!șǮ>/2cfI{\a=:fdêΐ m:].;>C8E2qKc(&i[v QI:9f*[ DZ#I0M ,0(SYeiȥ]K7"F׸;OZT#!UX>{p!|rde{!W%{qԡ:EA]0Bh"#u+@CT}]GYs'Q `-3MKQS"JZ&ӶP #dC0 0J_oTWvh&oOPHK >%\%: Jb wTa?G]}"0/M5oEHE=f"^P1ވ~ɿW]ͯUd rIciz5lERVV+c&U^M=F`?FO[}{*aTyY Ws?}'ᮂ2LZFDl<6"'Gݽ#]"μQж[ǭ^oVM А&X޽*H"k7\TPtNpж$BmrV W& 3 }zNȥ oԃ*?uS#԰E}Ǯ+3QDjYޞ͆{7ԺNWkb66x1,nM"Tt <'Y$<:`=ˬ@E:+in*w7 iRwb j̘1UWM`1kܜ  "ŬSGy*IDVT5;i&!L2oocct"b¡"d"YǬ!ʸt% .iG&Qt̜0L|^RV Q;ZX4@ڤ`V'(Ɓ$-͏ Hՙtu AжeɢXFy%F=t/I@}8O>u#SdO*a7Z0\LF'dPi6sa N,/)Jh#:ٰuV>ifc tAh[U^~ JLˮaD pހG/ c?"NGQIh䞶^lHV2NezA[G q ꩊYR7(m?#|MC˓YwtekU/&>8C..ٚ;B}Z. i=RrOD=Q"TWGUeX'E jhjD_`T ˶GSjR)ʑ+N*_=P6Ǩd<\"E{/i6&3ץ:s3;h`l'l*l 9UEN ly!^RVd{HЛ40 3>E&<0RܛGtwpȰrR$|ֈI9eᓜC7 e E֍28f|"` tuQ@xy \JlasA0&BX;KJ6KʊYx,D1$!˞q üݴХf9hYgJE[n@ $ڲ7%|oWe* dyK-Cͧn |_GR.aUpXJE=W\UK0$rNm#;bA0:e40h%YBjwme?iZ"ֵ2_|ٚbHe83! N$("^іׯㄪb9oteR[=/SPN puVPMrG*şNx 0nMFjp.6r7\qQOc#%yFj:$FV W`;ZīdMLE]2 eIe]++17Rk(Ɓ$D.\}=lȖM[Y1lހ1PTVA,7`2K#nP{>M`C*2ն 3bH05AHhǎ|7X"jc#`Uv/vj$Oׂ0 ?SL^N6T Edy]!i\62r` sJ2:+($zkWje^f`{/hS%_+rzq+HVgFܶFo쒊m6Qbc+"N87i (EDkYQL$)(ܫ6!=\8p\9BwG=e~p 3 dXP`fzTBѷF_w *: B[ i=i^Uo {u}I ()Aaդ | ŨHjS?AVPXHǭ`rru9]IH*֪OǗlPR[MKd "5h?F 9i %XK7/{XsuElVgUF "xXfc6֠Sa];H\~R2 [܉Fܤ"J0&kJR]TeG߸oz<[IoM+ &)meӖiNVHQbÄ-c~4E1Tn^E\V{,.$_>8!T_0ŕ1֊؇2( ԉȳqxa$ Y]dJvEnHP`W/dV+W\&ގQO@2˼wbp)hb8s@]jVtW W/cJ U&rfi$4Y^m({\ 2!}w s`"U ՟k{g{ Ab~]>}윴H4} e\$1r}_ $3i0v3ኮj*?أ4"UԤzA3{GPtkAe 'i[OfCaZhI@1:( \>MR|)pYU`! x/h(y*)MFR"DmŨil MRI^.GBRb;~ DVY:3PE 2VjqŮ DũL}l:-# В]PéMH(B$#yM$QY9Ϡ#$ h ;(J0#*[@6m>֦Ak@R%q(/..`H47 ڢ%TV|3<%FžU!q fvl$ղΒU?-oLom`2.W+~eeCDbӅ*0R1A[e2awqKn#Q!ː aaʛʭY0l227OW[9ϣ,QΛ- ;!0Ђ+%٬ /f|Nu`,KGbQ;NCwD YGH)کPU,5 ހ츓F4R79̬Hʆ: !*EײjrģRLU'aQe40yʫ9 ƺM)[{M}LlP9Eԅ^. Nt/SB"HZ^M~?y쪌4|# 9K1ڳNuw m),_ʬ^Q;r URs_@l 9k", -3(,3nl~J \fݛU&"o>=CS2o]z-f1NvSy\@m 6 Ɖ*]ӥ`'>O"E斥Q$tutkh/c.|@LZ8ԙn Sm~4LHӦ:h$$[:io^G58RQgI Ubz BK=`}a>"W釞@]Nsuh9ì(J 8G!nwF穡lY#Q+ .(Kw7N!Fޖqe-Ş ؆Z,"lىZ#rlŚn">Ċɸ] }JesY&MrrxicoS7ɫmTîl hđuueá;O^"bv E'2qq&DHX&Ie2nCyϻ_F#+;j`RH [imSK-Zt;F,Gi LƌDWS,%t@Rr-v4«Fu72.SاYEkfJ0(Ɓ$ƛuUƛ'x:i67l I ?R)]݁P KY#_O# Z5Zvh72jyc.n7[[U0(QgEc0` oЗHC;jcxWj T>OT!8+7bBD+GHc^&Ie%6>0{ccdL/!+E50y?[&`_'Ӵh%ɂecp<>wDQG1w7r@G޾-("L1j ] AC-ջu*|Iht: m0R1V`5Sk]\>W!.ǐjPӵ\ -F@zra:n1ﳂ͖Tb? IDAT ,bv:wl'5_+UʼnġhD%m+XWP\$fV1$F:>7WO%jh%ꧥ*9,kpjR/%HҰlu_qhl4MكӯԦ?v VA9Mp1_?;!.Gw# "`wݝ?g#v ("-y\go=ܑϹ;7ݝ7,OVvsr6S-'\YY 2dr*C|(Tq o -nF{'$odK dP C3ZCrN=W^rqj42&hj8-IŨsQc9Z`5Ӑrr7Ml̠d(y [q ĨBq{w2$Fi#klL'q5o oYcb7gS :w[hlO ;ly |k$ᖢg7#@E"ɒ7${F 13R ]qĥMjqs3m ZԖFLߩ<ITm^c}WK+`NM4IVQʩEH07Esy/rsTQJ ,t_+Psgand$ edz[4pJT2d'ĒѺR6~|ű[tT"n(C' !Ϳ]W#R%հA>M]b)c` /f÷2fޮG_d7  }wحY[pdXЖ^ʴ.('5ORaFۆeW}~߻y۵s)v0pd뮯5]V~H{2`J歮aS0ߨRT\MEaJ<^.Voi[3}=`Z%K Y GI84VD|Q~ j+ F%y%y߿9m|3t f \# >9dkV*N:S qTW[DD7LrpaJfUwӗuѓJ7X"\p7 Z! ?U_#P\4?shN{b~t.S6tvIZuw\Afu|·9~<[[K FݻvcH ~V [?#HR,h4ҏ1[;?ۻd_C(uhHe0zn'ŻPȄ[?cf:]Ay.א/K~~ ,T7ER~aH9R(Fhp*_\Iq/.?u_:Kf0C5H% ||_~ ld%T4>wUJՙ7τ-뉊0`cwpk.֠ 9zVPˏ8UOΜqX9FGR\*ݠ*ֽBܺR~hSm۪?;U0P_G>:ڀAZoh8þ\QNL@r%O?$O|dt+/e)z :~&|hwj98%dgf0+2렾HQ.W?[c"VE7bXw,n:spcm aE ,=$ PW`J͚1R~u#Q{ųJkEJBST*J}wmXDX22nL_=5 QNՠhdn๰&Ktoؘz2Qx+}Xf r8w7CR_-C^FMp37QL+cRX5:zc7:0MNaCYs{5yܪ~+!5mhYEzEn={]X67w KHɬ5LUn4T/O*eY2$inYQU zZwO4u#`ZmoIKaα7;,osC\D4R!յ? {_4:oedȪ~{;ߜ [Lp<4doB3g+\?S8f.gJ;$)W!cKxJ]׎F!22$oz2'w_2+XNξ}dWvu_>7l1"GCo|݂zKR@r'+sZCK-T 1kK%oAHPwՃdMM /u/:U'EH!`}5 bf{q½mOwj伂R~ڝS[D byۢIw|iJEhn+BEjwF k <%ŀg^MK )7;w ӿ9>0\advd8+A$سçI,%hk3j$.̆L \!j4f4aiTn(0{ixX9׎ 8{&1~b/_ѻ.׏W7@e(+9M; Wf'.e50C](y|}rgRRޟ40OQW}|ciMhRqB0zXeoNI" kHdr#D`Ji*H E%C_t.Ή|~+9kȫGN X Ֆ!oBù#ˆ˜OduUI?B#9|jR-9MHFlckUYFN4Ī--IG.^^hA}./( ˂Ī*Krxłwn` n6NuYǘOo?9F̬/@(|yx}zQs TGO he?*6#Sb=AU!Ba\VǗK( %=<|e.OKIϓ=k_p*M8i=ZL!=;yu{VdZzF9`9H(&AS 2E@$˼* NAf|- 6qPoW==68҂,L|T:D:/* ",cPY߇T_޸ ]Ǿ7 $04kRWVQPxj~yChkT_w/. s1O7pĝkkz;h [d&0tƾ::I-#L ]9jl .xzXW* KTs'|_;xM3ܫGWkKc5Eٚƭff.`ȣအr8ʬw+B4m13V_!A61RC5l>G1ܾ&5d3\Kn  ZQ&XUK694z='O<ԧ'.tb\0բ9YVyo}Jyp9D/z{`nkHVZu‘ gWK[‚z/ I U(iqϗsKɲGI4}չ]|{WL'ϋq}ƈon.b:Ҷted.YR6Z/K8 g?I ФHcv94-w$l *;[mȽ{P bۤ_y-!46^[Qp?3K94P(G Ln/J~$y#XTJY܃ڒwb>>X6]4aԝ=|ЛҚ/KNޜ6A [goQ YWD&"si #QdoNm'MZˮ)3Sc.Hٴ~.|y~}1hs5EeDat/^E?,uTA;(q95vS4Y02g|#hVQHC]UFeՔ~z}z.$GQ2l E__FXUOAUw VU)|,c&EsirN| =ɏ &6'0X$n#6w*COdLw ڴ{K6"x6 HE~PJa;njGM+5!dQ{) 4]'*>HN9/-TֳjDbw6E%%>8qu}Lȧ$"YX{#$Le^6t2{]]RUujBU 2PQu~H^]D ]˸ɋ.&v2>ٶbg[Mey(n4v5yI ZF8-y] 'O6KJ\˪tbO<~akKcUm[<ɩL-W|R/8RUD@VgEWUfJ9[M϶NP=]-XJXn)tóKFh(N}O?; a%fZ Vn 9x&59@|}mU(HE TPp9:/ Y:! Pd;,7ltĆ`$VoLN]߆vrS vt:"vmIȹ ;nd K!ʫj^Ld#^;K 29{ mKڶF"^,uˁ SO- nT^ 7v+|ګ2 39EO@+?HQ$vb(h@Rddzˑ1a C,Cnx+GKmPW:$dHIM;mD'ںC <:iEdNIڞ EDž IDAT-l=ǷnMUYaR|{}MDDdރGecA",Lx8XWADnHVW㓣5H$ =[]ϙfS\/<3R'i[QT`M"TX:fMyI^F2(AD  ]0&i}bw^X}񺵋;}p *RDZ"M1R7\܉d~ %̹dp@}/yF|FRS˔NiۭDN cPI2$Lji+Np"t!S?j{$>jHMS׉}<DJd7 [؃xelɻp~ȕue'&LnQ?]d(|w:A (5@~)a\6d.ԕio(,%Vqބ6f* `dV4nwρd\nk[[h%CG7WGt1i殣n^gl7>ԶC |Ln5+K[1BYA dTa&GBۑ^xFɂ={f;MV-vi*UBoҿUѻUefd`v={4(yoiA (ɐ#Ͼd|{ &S=^`| ʳjHrH, %.:ΐޥ@F8HcY Sqυr Ça*gk!sW81++c,I`Q5 Yr٧+؂גϟC|#k@a DM})3OѡU`OWȃ#RXJ=#pnܵu ! lH RbE*=DD a\TapzG2HPf<{E Ȕ!к]g֜n$&T?ة-mH>v@02BCfu[f5Mt6gTIѹҠ.Hꑪs% B5a*%3 GXv3&3GvGH3%lF%L N0~i %.t%'GP:a6bB/x]wϩDBb8?SaW8'*^H7 #JvQMGРj2*}Vʑi`"&U CRtRaM&R} Ѓ{FXNL2vM} b/`Ũ[YikقM}d$Tw\WOLw7)yvH>o'WGru|FZysj2^߻y߮{Cؓ-# a$!Ba@)9m?_yk7S:Kp[ v ltJ@&N:ЌF^{BSAE_z}u8>8؍X y~O2xBXm׺?T'p Iۣ!؞xV `vB1r8^Nb)I{;*S^?ob)Ui :YnMoavf Wn,5ֿI@gۖjVGirVPx M1R4?q`5!+*M QԳqrBN5w R Z [z<|t<2 .- 88 rq+g#Ffn0mu suLd9La3A8xi[?"hj'N֠zDZV;J bN ڒGsrRI17qJ+AВJRY~%,wiх4e/Pa*'P8b wN45i vVE$Uz̃*zc3p]>̪{nb>ƛ@u3 YYmn5z!*r1+!C$,2Oo+ĸU#?̓  G~MevʀDl%cVK!j[ mm߬BV"r9U KMjk@ }pAyso5`>w5oڽav-}x`0T˓ -d.oRк)HUZ*q[TZ~z*Cɗvo~yg-9 ;܅^ ::8 )EYj4\\'f$R"z"Hu\I xcА #¶UN:=ne;Md)Ȉw~O`~붡[+RJHQ3 g+?=iJn0~wMr%nS QdKPvۃs^E p:*|!]FAܾ|֜Y" -!Em4n.JdV;gqy-J`%(e| u-}gUzuNڥK@(TN~`x8Md;rx_#0 0跓$YT`O2m Y跙IhQK%lNq,YIu#7ƴy yA`tE5BC@bIG)Ƅc+~Z["at%;x\rM~;0V}N}t8.tE[xN`=e n ;<VCN"{Qfy"ɷ/}1J6 Ť dbL] >d-F%@M<`^/0T 3Ptb7FرW`F'CJ$95$x 0h!Rd"I4R ~}M R O`}mW^r3% 曂ARP[E`I|cvYr| 8Ro)`T0a~l^ RNgtPc:tYBSW݈EyX[پ]woNjw{TٴZ벙H%nH7}~dp!f7eaA-Ћn*4\( e;#@Q>4TSh5 H."'prn)/F([N>Ömd_] cc9]߉Z SE?Hk;2&2vAf!Yœ]Wç;ꝁyvJƐ+!fFiDIήIZ?e[}m5t+2l7O;ZFn$웙3l')͊ ZRIUoRxV{)yK Y[E<6 zɑ%NsK94ݮfB I`/X,&yN%]SЅGu_Q)tj;][*"/ថۊsz2u@'M@<(G UXtYp*-.} >:B褪BH4C Jl:bQ|ȶDS~bb=[ ΗӰ$TzˏKBhD@Ѱa42 gQg \JbE(; \+ag6,;~6Q+nSG6Mti#i8u)" ?O4nKE\M0jd˷\wx[:#`NQυR@=tH(H^NfR`)ض75i8Ue=ȲlyiӤgYϑ99Teމ܊#]řc EYI#+%HS40u5d0=G`at1Dzql{!ciw*G 7!5q!#x{ d2%xQNE嗂^^MYH]~tQFHӐ%dzʘǧzm4dzHQ%1yd+{xnd4Ma#oNeqR"~&sxh!f4 BqVsxVavr`^1u: Mo،"]h!%bRR]p|"kLWV^7k{RXYǬp|edD ⅉ[uhFf#{#{6>5eV}|~bZN ^(93S)%Ȫ8f>44o`k @}9zna%*t&A Ɩ6-K`UQLNak/N-WnXtx\Pr9Ғ,<"$hπLEv>Rh97tQmDdHaiDjvEqο~ThuH+Dz+PhRR @+Uͻ߯/!Z-`SI]M "<ij{"/[|.pK s.0h]d:%2d̍~MIpNkFv2ӎH/UE΂eϗEײu)12E@*,\7<}8~ W1<Mw`:ì*Nt\I4#JѼڎ&y9aqc;zVrv>P4pEy^АGG{=UT\z9AzW?S)x?=(#mi6ngǣsm1l&2։М8Czww=[3 .80OkS4WUJ> OfsXIϯ5~О1M!%35(H:Ƌ ䷮n{Ѓg/Rrj ][%.fNf4؍DAṘ'b@]MWBs7૶";#XB8/2PNoiL~FddWW_-yW_:myad6+JNׇa#5(471' RsO;'16Ɩ ܘC ͆U%c,"t~Nmv5Djsu?L&;/bU w0p?jжʒ:uv쀇X*74^ 8# 4K')_\~}] W622) '# :@C~"h ^fW-[sI&4'I+hxKC__e}K'[)0&`"O<=  . > HUt#w+2+3Uu!D@0vR5GNtr; ȓOiҊSи:7_ ׋b\&d/+A$4_-m"L1Ũ52UUrt6c쑷嬼g=C::?N25bv9F%UaDžײ}M T^)fm>U5YxQpa N.puKWg' _.Hѯh[mw_y`éUȪXoWvN"od>&KX >ހ~fD-=ya=̓K7 A]Q, Ȁ45I^Oc5{[XǹWnMWD4o3܄ ¬&FۊkNK$*sudZ Sbl)psl^+l:=o~agXʪ7%9JRG Gx[j1=+J0a*@FغoE G 7YNM鮟DQ" V6> O$<DƘ 0^TPlmk- [u(~7:/|]74 -* !;' odK2΃ux~do[nJwH! 7rN=W^rqj42&hjy|1ɪN\r"I洘xꀝꈲv ~}b()}!zi2&OhʊSb{1{G mhP{%Y w-$d_\ ;U4Xrxsg2T_k93,Aoc4 u[ڄ ,FmObpkC-Y&hn:eo9j4M;:V@> f6N#-᎟]';%SSb%Ii5DzOOO}s$VJDtSuTMO_ϫGM+fj= Kg@E~J=tQX  r&.G͝mk!G%e[[/{cIO+o0DWA!!iwU!*T ?]3)BD<.0:$N^m kF-F!Hr,1}PKǻ-P4 '< pKQV; z]6m`k3CYAcܱ_ 6Rn fNDA#IVN-+)2ӣ͑qtt]Ns)-2`N,/tMν'9fMֹFSB$*CU˨<Æ/X+þz8몫PɈ-lü (w3,]F]GGwj裃PLZ9n>t'|X.cdsȴ4# Nu1W?ll6nJWd3 4V hiMf-;Os#%9I6""in6rƪ0X*ޚNr1@BS6vʧc##i T ƉsxuJ o*@wĥ[ gTWS;,x%v:h-#?.,{̶Ukp|; sQoCu IDAThI6^.T +I@CF ^A,;fpI{H55[akz6ɟYqoDhk拷iUsppp?ODļ+e-jRc.C{a G! ޯBhTN%appppppppp]7yCS5c_5+~wMk`HfX=|d7W=pa8888888/Y }./+NB*C^Mƹ5Ytemn 8W| Opqpppppppppp l\q88888888888?=A_"\AA7W+OnWGGGGGGGGGGGm [+@"~㵡5n~+3afݚBnf/˘߬k57Д>SI-h-$*>uU\*Q:TʰM#ήl(#m+[Z8Do@ҁ ٰy7B7 JZ-[^{zEq0E[L^nȪI/s~8kX$L^ҫ, Jw(qj2Nr*4y%#K[c/fh`}cFY̲}<K\2! kJU2\VCÅ9+w#C C$3t M;x 7cT.G PSƁ-{*7un`.t9 SKW7'y׸?r-`8a4{a"hq$Cxʚ:2M^Kųr%1S\Pkd:, &zeC\NŜC?-Te_l~T~b̬*C~yNmDmkp0鯑o B!nT]OҺ&:]7ef\xSUWxa(2uaE,8%1HYtUʕdhmR yQxܠ3Wܖ.x:Y[M4#*VX&ZǩMVN7TD$*Uۉ]nyvK"CV`e{ܰ4aB(.nlE3mcp&LJtbQ&/UHØ{׵C+UFXo2U椞Kfq@ٷ |pu_:7l1"GCo@^En{ca9Od'[{5<,1E06X0w:UsccR Kkjj}G껰m~@].y UՉ)ߍalߋ˨9yoV SxAX5]"rҺL̓iZQ uu幗E%UTR4˭5%> ^Be3y& hRέxJ.`)l!OHe?^&G%Ҵ>y!Apߢ>JM(D5֭+su?"qަ5j|Ȳ6kVNF9sjSAv=}ӟK{8I@LoC;$.~w>ْC۷K*'!iL ]^ko{D=8p^QyeL=^C\{G18t`4ǷqiE%: kԾJu"aI?痔! M HI(olab"$&boI[*Q϶l9M,"د7JY~uG +^C]뾰膊[zqȃGװ唴p_Jڔr<}Q^ש: .RwE As/^U譶kݪ;O~ڝS[D4v#zۢIw|iB)Ehn+ o#;DFu3t+0X(n9{5-ie͎f@w ӿ9>0&J] fxzE1hu2V+J=o8p;-!e -2(Ť?Zh?A*h8c3I%pfMba%}®5H "*&rt 7 ҄eoN$Nv+&Z Fx_ mˊ LZǿrW7㤧y|i0M3GY2!rY8ttkj`)2bͥA?9)~FٰR^}rQkҊs< H>/Mx*֋"WG/*BspN[ ,> ]\Uyȩk2D[ЇsտGŅ1>­#W }aF9"l)]zR* Ԉr&<ݷ:Cl$&": &*8aj݁i/ Cj/WŶ0*\Rz۟b!N asylM^r^*cs;U^)Ν˼ N[#^Y9z<1~5sdjO|@BaFC<@=}h0%xy{yd25Թ%e8U}¬k/+Ӟ\EfiAzք@O0esq-$`+e.kڌ&>O,rqmrHCWtgGWHMο2_` R\bP{} :w^zc_^siϤE&/F+G킭VBd} }|!]7}Ic{jmi([SxtѸ yLrp+ +M/F-n*DXBUli&gۅףY{:A鍝|-ߺx$w$GWMA l'bwA{m+@v﫧rD8|YMUQ83~?֙ar2${UI pfIK%^f?I  إPMSU`*Ϗ@5lo"A&Hrjm|mٷ L\2o@{=nEϼ//M;LkL@)Kfr{#o'YUrPTrY%KAT#㣈5iulOF))tY5&ٛnBokύ+Z"qR1F=ߒs5tNg]Sf!+]9pp<>rIL3< ū臥0eU+Sc7u.o0۶8fU!$zp:1e-5*'sI:ϫă|$pyˈ bU?IT!'XV?𱌙t,zS5dȅ;h缿rz /jʱ1e߀G,ʪ)\vI'2>v6mKG E:s('Skd=]2x`OqшcV9& l%eaizmFD?^iblEL{8۩e^] 5' Sj&hQa*Ef4pJߕ  ]((ݹԺ4ȃ*542#hu _}<ˆNyy \*޿NT(c6A= U@*0 .T&G%RZN^t94eɶ uDlߓ,;@BW՚g#Ϭ^;K 2= F"vuˁ SOdNܪ^ -TF>UTęҜBy' ܕ|$(S jfh14 )22u L( dtXݐy@[mhNuթNB4Dߴc6zJt";tSVAJ%^k{3H<)/H}x1\ٺ*%'HA2uniFAE) )eзY)еcUE㙹XDVW%Ī;\V)T[K$f0wڍ;ϘK\5/.p*үa|F}/y|$֔ #ltHRԲ2Ftg$]zX۪/80!]s|{zi'ʪtW 2_AU}ܵg=]L^6  I;$C"˩hY8x9h^MhH>bdպdدi 5m^4LE]ADaUR${:pا]ϳj¤9{U -yWM?ƈg:H8$!Ez. (X@{,g;W һo6 Kfgg޼yodߊXS7B7uDu ]X݈ٓn`lw0DNO2HRa N,`RI5}Q%JըZ؎=sh?/nF|?oU{v1=x2C -`hF 0 ?8xnWľs 6&~ņ4l/~Я@Kz!m3_ܞ2pJTzԯU?fO"sH s!]{iwK_)st aH?, ,l/>Wv\Ctrt hk*EwU TwFd7a65#o+lKC.ӴUQ*y, lNMֆIA/@pETebފ?tà*H[u w `J !3L 'Qљ5'9M-a_dʼn:\t)ɢQr~u| 0jVHt [eRqEUf\F%gHfR N4 O*) UOlˉ5KeQmʼ\-Scf'ti&Psɾ+sE)퍑ر _h7`$D@[aLJ(p9e.G9f:-aۼɥiV` _$ \ɨXoH:" QRVj}D~@-k4`g՘FNpa.n6V&me, E:8 x")0#R>mYzB Xi)Yjh8yܨtMP*-{[\/X}CjUΑN9 VsTC5YA'xWz ge3 ή:).X}o!N?wBEx St]W>XPu}qֈ p+ޯ-\gf#nȆ@+ѷu9lb ?-TH°Ѡ=*ij,0,N`6l?{]ƜXq&p oB-^ g@EQzmuY0A.+Y"wD &:>@&[ j!_"*8ʳ:GH0%S ~Yu n 'C`l’?@#LPcDFn$"kL\`'It0dhHdY"vFhdV{DL}TmU[]hv9Ɛע (ðvňx B[$U -|h`vNݺ2{؀V-c 7Vae=nZ5)"26On[%deL$1 PS >r {LfKJV`##ƪV-P#!ۛHUS8`tqSI̴,- XCN qXx?0šCWO . LmZ@P~ d;;[c_ehUx h$ݔؒR=J ҧ_P8eMh']./Nބd̅& K99  jLnzOJ_6 mQÑ )NPbRiuaT4qot;c:|CC~ҠϢ[fwno x( IDATjɨ3!E_c̽NխQUjDiTΪLEչk1Ҵ;`@A{%?1'g\n#=na~7ovuʿQA^0д9/v۝ҲL#2Gs+њ CY - Dͱ |[tuDʮ>B"f_\8LAa u5zw@ϫѯFUr P-`D7? nH:yP~Cf /"K v73}[a,J_AI-ZQ k0V0R"LkdH6EE%oOb-)%K)H)L(u Y:rT6O#9`q2:oDbx7$VԠJAI!\@%Qз.S%RiiAcWȰzA豅`j㡋58x~.Ct5iC"y7mX#UaN*}Ux{FܡQ?W"'&RYI~p"^g /[:ɛx` !"8[)USjRfYi?q28 $:)A쇊C)](T$R^ u Ccڪ,5v^ĭ꜋{A.LPQ ՈL|Sۜʴ;L&z3y5VxXPîϨH(L xB: uLj f5_+FRj"E>-x`9^1036ri4 2T( 6|EzGuTUc3vg۝˪HI|2y{w͉^^l4(6YqY_|TVNӖ5AW W;&$0P1J.^[g&ݞ[ӀhLF"ӑBYkt0l/(vĢ_Y͙n⃰U%xʹ36gB:JjX@;ĈVy𮬼bģ%rb7YY< S'%܍CZ@j5ѯLAfH% *]tA^ըVs'["g쨁𗕒.]0gkGx0hC'Xjّe0icKuKiq &S v*>F|1N^H0Ea5Q]G?q@.FVnUa|24܄KcCPV9k O4M#RS`].U|5e/ (ԎN.Bfhv%yva{&,~|:u@w-]T=[8Ėb8/JY&fz{AWaWJf+*A=$#M @2LYfuòYEOXj8OKκ?3L > G- "^T2@$CWKT*)`SH45Kn}M_8cJ肽0s}%[lRl1%'@?0Ȋ> -dby 2A@ ӣqXSbدQ#\=k{O Q|>I`DfqVjc R/<#(]qVfnزc`[uuqu8k6SypfЂ=`=~ª(\Ϯ~q𠓐dc S1z+Y{A}Ϟ&?|/WW.D|j+vQ|M_&/S}7۫mȢ>0΍3 r &"0 (;y庋B;CJt^XXr9Ҹw/^|$ kC۶9[ ]wE΄u:>f tp_y5ʒ?ww8ѶQ=+pS)n ,JtC bmHz!DCi}m,<.FA^GEniQޅlۃ.!EjR+m)&^WY]X/Pp`W7NT; wD 6?!rJr/nVIGlj>P o~STٌ]&\7)<0o/_D}8 vxZĊBNPA09Ճ!!b/Ϟztê.)I|tJIt8-(ͭIyx:PSAÕ$@xAY ^)Hzqn!=xW]{uqm3 ~x0oA ~'-x*r /A}j" (>Kƕ g7a]^&籹”s( 8b4-j8F 1:]IDTWK_@opL~S* )>ld k .jTNm-{ ]1 5;+/zj,&`Ov؎U2$km]&Y,յܡ ^K,{dIF]ihwt1"0"]&Qh&4P ,!F_N`u" ^1B<ھ9!w2J%,*S;XYgh/ɴ> r'oºZl-~4"BTUn?cuP* H\?sBY8Nv4VǢn~4 ECtU M2!Ҝg{_2[[] ac 0rDXc$\iO~~y^Fm2Uf߆VRq]캭sV54jޭA>-)Ξ{Ƕ 墫\Q.m;~ې _w\{\}-D NAzJG& 5[$sDO EE2ҡKn"k栚 PYRz JٺuxjV/[] yz@v=/T&ؖ HD2* vo%$3i/c:X1i~Afb2doJ}=WT (i"߯Ԭ}F Ɨ"pgj=rae/2p^IXmWmYOZCHd*]Sѭx5KhN cgKMsu6mCR:,t/+ٖΟӷw+3uH(jZu6zjk7xy @ۄy>[R瑩OMP[Ji NLM yM\VM92Q""Ex̗@!PYe'vW[j;(|J;uV̀BU)熌4ꅬ|Q+%  u.GSUW_L1Kq{Éʽ?:=q޳ˀ4XQ7_ͤAPMv}'Ǯ>9ọk␭;v hcWெ4FA@@hY<^6NƯ[Vu g"| x T dEeE/@yN̂a)`_#:M>ZQk 7qں B[~:h"a2tRkfClL^EaZs~z3%]-H0{O ! ~ :! BC/ B9I!           ~ ! H !h=FK @ @ @ @ @ @ @ @ @ @ '$A@@" <}j~6GQbB {SS2㲹uf 14n!TrˈRĀ!hCeW: (D7>eDR`ݦIWHxP2dCnY"r YuleCsEVNsbBV"G6UfVU#Q 2I:Ra5ͻe(Od&H~rH3%!ӟ.AЃ[/aFJt׷n4*ۃ_+(dOVT[IQ625.Ǜ $ CUԢS#' %oa{j֕mMEEc`aޭ*YQ[fVD餥3D$Oq g _fUShzV]=;Y遲gi+jqJMI>&TPU]%)1T5 -;y8Z贘,,k|/$_(>_о뜺S&> UQSOUV32B.,4tǾ4͞~ sgcrާʚZ"kdiܹ=$HKO o5Q`ݯ-0MwX*(Ȉ-}4h-&%SA.`nm* A(|<.8-=|l+m&߽O>A&ڴ7țK˶̭T=7kW*N̄Mt,'k+>NO{Mp㰪J?}N[LFYr ^oJI~u3i}6[> ;tp.KO{w.F*Rxw3m?0?nMEQ&%džZ;LOۅ7KJNܒ_{! -x(y ®G5gy|ӥG˱q9~ yG 5޺w5KQW ߺCrntjyfO~m nPĂ~FQ zˍ, kq./ vu^u}ٻ3 2[_VdS6DWeX̓Pd; kfY)KK)VwС..zxZr9+'޿z7Ȗlan-,BN# AUEñǐo*&d=X; 5A[D!z3~ ʪL̪GE$%^*۩5lTh!QuV]$&^:s1-cXD7H͘5DJ1r;o1{57TQHJtvGveqo#Xz>TR-R1(}{BgiWXl@DvJd%>#ڀN]濧Osx)i4}ěWC}(%U Z7ժ^樭 Cɼ*PĈvH^VC@\YgTuqʭ3 ﶝ+`Emްlv]Ɗ.ߠ^=W5<ʞTOa8dצo͆RrK4-]m;tx]4*G9;.T,%MVٵ @蚘!5p/.׹GE/Ȫ 4}7ϭ61#ϮRR)])Ӌx}E{ѡq,>k#9yGaЇ`ȓϴz4me9^*t] l+Dj><^ɫ [1-c06d!K;$ غ,4Bm]EEa*dN?gy{]#yAY5,%EGwv4')u\UM}ێJ՗YX\ʪoPИZfn=,mz1.}zaKVIrC>y neg ؁g]v#Dޱ G*C $% !Nk3{D;A?4 |:A ‘n~Le8{Dm/eX'ga h"~"k QR"nBP^@RZVM=Oo_w[zZ!1ٳ$]:}`UrU6 IDAT\ =UlX%#Plam -"ř2v'ŀߍ3^IO|`Vlv99 8y\a^0b1y8VbA_Q:rڎ]f-4[֗N W@8Z`LciuluoDB<}*;I*—p^*` CiB3>KUF A rYA7O1q8ڗp;, yX|d }sbCϋPnKݻT[Tk "7U7~NFZٴۡ/nrL-d k}t;U|@b୞jr_C]`^}b?xȄ'S8@Ӭ+LUlBs90%W:U~,Tt u(t"C?^UR(+),y[1$=l}:> 7[*B\rEQPj2,VEX }ym]c *-Ww6IϑQ0 f-@%^MR W>Aza<#M)b v hMPzkOs}l3B1SQ6N<_uf;bb(9!V!5^zP$ T 6(brIVҜ27KUJIaAhԫe@jdn.gzGo)6TdzQ'{Q{{|F0Eﳼ}̺l[ e~%pVxܪ;3'+v{ ܰllt]F7bYGvIWIrnP8_$S MdgҦ0YG7uj6>`ʂtJ^;-Mw?eEc;s364jCmه&pe'NAĤ'Ai}vft29*Ue^ M0qvqnjqI0 YU˚BiY,taEJ~Ʈc&EO+]q?PP n+.?ɰTTlc`֧qsMC罽|Z G.hXp蕘/ 0Rt~fgfnvXVKhivu〉;@ /?:Ϛ7D_xF2GLy4 ybK;/e Jz.aCPM:=Y8g!o| |hPN=.E\׽zy;#s<8jI$UmkPς0?EqO'D8Yw=DJ/dqKo ٌSP 1YTf$}EQ^Ywq&iFmYoj-:8j(;_jtXYL;:}M`ٚkC&~mTCݼAU؏+?Q#вEAjQT$iKWA0Qb8T2tꉮ ,MP_6"HM,q0Rm}3 mŧ2qu^ xK4Jǩ(L{x>װ-%/qYhD-7kx+3ՠO)~ (e"#3h կ ܆O )uWo֫Ї FQ=8*l%6f8\et>ʫ6Sh7ͼsfc~q0!jzæ@GLXDѵ:/*$OfuWw3c: $al'v%%04#Ls2C0,>%+Z C|q$.KJC $%Q  y#BQ"׍ V7|-l'꣰ H8N5Vo\8MTeo\0RSB'6[ ȗ o6bK[ѐ&V2mfrEژhdMCV"@&7 a_p,pDJlr 1O,]{iwý_Ck|4VC5QWہ b߱Amp_j#1\dp#2ro'>iVǻF.&MMg@` P4mVybdXS}Y`3ۯSoR ǡFU4pυpR#AU wi"_ Ae"y*9_KA\ݴ3 ;:F1EҜ,/.Wwfe4OW둨&J"|h<6mX\Dn3_3$.hpQUF_˫P${EU(| ΁0tL&Q a<.jo .7dTR0@pTC>X_ tHk(HƮ:).X}Mo ``S?w#0< λo|&"c$#6t)\y78VUKL2 !~EM QiMW{@>VdfRg̮q7S.P, nR8pU/~7b Vwq>2%GBoC_^ T᫅,~z@(4U"a&SѩLʬ:7!0߀fR}K0A)OPoXF":s9ȼ ;a-Յ0pҳ D juшRE=">F6F-w/@m?fy- V7n00PZEU b-XPn3ISӷvݕ)=j|?@޽i:+ٜdtӪI!O(ctKYBH22CW,˄Y4ʽ>F Ud?=m׌1 ޶M9, ̅;78|GX/ HEJK]ᯛ1 P~ d;;[7.pVP epD[8sP%+l?~ BX(:p}$6h=(B*9|,x<_\#yH!}dnnXf &Mb-r<8Ws =\0JyDy<0cې~s YdP|=J(<n!5V:Q,'|VIevyM}DFtoԂQW$^>Ŗ#u׻ǜg ,fix&8o+y _mwgE^):Q)Hd*f`%:m{ޢ6UuXlE (< lPe|i PUjtcUqTetv"}ZWId}*)]lueO%]Uԧ†|vKX=O'o ܝ?ojFsqBqm[ai@p$~p>2 9;)u@hl Xzu!2FWuh8緪43gE`:&-4tζ;Ue5xqn 0Rɛ.oXh. PěRw)t k7$b̻z  U0#6sKDXJ/J!"67,)|Qu$9 z_!4KhB΄۸:%Mfн[CA`N@GWVʹňG7J̦b7Y14< 𐘳5'p7]rKl3jrG`Ap.vV|<}Ug5\Ɉ @;j.eKW,C~*j~ 6tY#6#d}d4JPL.XF>0U k%!GUѣqG`k?qBLCt:XU߫ 7B`eE@Xo"`IRH@))0CV].U|5e/ (ԎN.Bfhv%yYLXtq1"R"[ C%z2LWq-6q8 )7iJY&fz{AWaWJ0VV Z&83[{Ü^܁OHSҠŔӍ1Y#fc %$&8> p46Bo#SR)8,HX:v3l0'oFy78%tFs6hioe d?CPm%FpfPh{Pé9ZC):BnUPo+}K5~9$~WI ЋFS7B lY#!]+gY:xx6ߣˡ}~ͪ(sخavA=?0: ,j?ѵQ|>IDƅ7C -;]j.8s]l>lD' fgӃM SW\%Agf; >rInQ%ې(R1{9=WڋײL<=SM~_65` ~A:ʄ;3n 3  < cߍpj6s# D}UYl>)N^Pez݆C?ֲ\4.KI@ǚ7|ǶGVǡAbT+Fv0:8.+8]Y箿m 9zs;7Ym4؈ vmHzaDCi}m,<.FA^EniQޅlۃZE)=7Ԑ;W R (ZW7vb.: zIIpG`cBNIN͊8ȚMr󂳑M̘k R'-i,xZH~00<Ť,̿<{Gê.)I|tq^&籹”sSct(ͭIyx:Pރ< MΫc8~hpf5]~tU')9Ǎrx+M2=O-j检obP4\xRӐj"iۡ;paJb۽qXtvA < Y"Ξ y =[*"qDGN̆ Vփ1HF{T>9p&&4~%&%&xVpb>^kxoPj?|\+/Ԑ.-'z =ᆇ@31TPP1짐[r-{SJc594ޢkvV(})ZbNfmX0Qy |)ru-w(Clqyk:aFшf swl}*,!F_N`u"b-r"SjfɭU 3̒%DY##\D虝Ne2Bz"| MǂV߼ס=0aڀă3aرk}olJgeJD0D-pv_DjAGpϟ}UgL{u8Iu:δss;뭡t;juP<_6Hd'i&r1;Ǿ͖TRv=dQiCR]S[j;n" IDATiɯWQ+lKo&5[Qۄ6_!/@7U>6 Ex #wI[=ؒ@b:wj9'<r)Ӱ[pFϮɋ!Lն ȕ)L'kftaoJԔTfM;v3.szy܆.hԇg@ 'ol=;F#*/xH/Ml-k#K-\~ֆ4 >hƝ7' g1עQ45  ܎nT=jJ4݀ .G5R\7F?gs}c:p"kO~~y^Fm2Uf߆dtMHTCn/ccE͆w+b $B^?ٱzwW'= U {?c2߭.bX$vcH͐Oees#džCF-R9LQ3BYQ`t3i/c:X1E%ːɿLJ.rEMM轖_+U8 nCc\ șhN5TWd*]S>o8q wwUWaHUM#ϱ&fv[4{r'vL PRVӱ3c j*̶t{X:d"kաY}(WkoC=k$猅ę)չw7ZM-21t=ϟ`O\06a*wt Ɇ0z ݳE[c5eˀq O ފ͵O\VM2qyOݎÖMqFh:ou,(KxtfX2R^:ee=PH&TVىypkݷvQz,xv8묎- 4s=^Z?EܐFEٕ/ vtn@hE5 _uN];,h2j0j#3[Zge|46ᩰU=<yџenEe@ `lcW˜7KFC!jGS;FHF> _ iP構(@ @ "DPnw6Ptu}Ӄni@/ eD9Kes-.b iݒ B!J8 9` |2<"JtS ÊHlV۴|*X ^I 9[ȋVB'KXf6lJxِ]d(d$vl Xղߥv1!"&BbJ2=~@=,32׷n4*ۃ߬Qc?s*F+3Z[E+I"jVn[ G"PU74Ե imhc-y /jέϟ7B" ~&HEc`aޭ*YQx-W3+`"tN Qc3rj)4U=c+箞@A/m#@@@"@/BU8wvbmvUlQ[ hZLV]p^huU{W ]4,yBi<.8-=|l+m&2C'XM{ mݙ[ ܴju_qrlhqb&nj%G<&Z[_[)>|vim(>kUpyN$QQdܺ& 3Vd}|~dW.ܸOBi7>(pf`5Oބ].< oKUrEj}{: r2Uny?m8AiYqFDaS\.6Q^@L!:cj /XQ_]>&MuAŭ/!cF4Z'_B hH:,Ytր#I.(3ye.>̘7\ؼʰ$3ȜZ ָ8?KyJ }a} 4>%=|ci<%h|o>91i߾8 3/Twu,\v0cqmS/*j@L"A 6G,"?qs ߬ȩGVsVh8r2p]eփ%P3֜DžØxB~XYȻKy;CU?$nªKヰ<^ɫ [P@z&ӌnj-RUYRXttqj#U}=T43|H~՗RxJ:3Thj[u\lZzfaq)ABckٺ4l{]",<)9|{Z9x؛8&?18,2%# LBx$%sWcM" N"ѽzj}W߾"٤&NS.)JÓӳAgQl{ZKx˥:mUdK#JTS!uk?xcjE-[E]çg'vx^W" JbU֬,+DeH"彼{oI";.fğB uʟpvԧ?('ιлm{ry'$kc*_";o$>%A$zgڹ?6lJOg4LY_,d0˃ab q6%a'"Ă`gq*g,CG(` vZ Rw$*\i!>6_^$ؽoNj,? N3zVVioʞ.%j{hA-oMT)=kQ3N ƪUEtqئAJDD%l,;vbdz;3- % ;w/܅;sϜs?793}fPb5YF9gh%ӏ |=qHr%0g~FAi'3F!F6 1F]H)t#}*iyZBQϝ?5Fe-*TFMEnZjoF()tf-2u4t ,qf`U#HhV'},L-CNaYj y‹oKĄs wlfN9sR#C4|tġs]0)DBB`X}%WVbÃU{jѣsҲ3=J ;rsMxK(Ti".O)cۗJ( w.\^톬U},u H,M{11_UR P8@\V ֎BUY;{~^A 9s  CENT4ϐ6Xdl6,| 1uE\c'~ Os#Uz z3d%E];+7 /?p3 JeoG.Zf%:}~} ~_gT}{v0d }!LDU⑓%HYAN, n$ˌwVEc~ qR |ʟ}K$mzB RaNr؋+ `^:-3^(uЃ$BъM" 7o'AgJ][dg8ꎗ>s" j!v? Zν*JҿF7k|Y1M}$8qEpB.Wpi rϟ[9FE('6^J2 sc {KL-KN#{셒|O*AgiS\Xc79eř9v `RTERۮ*S:#Qb}SQsKF$á5ܥS4YWkVzQ)O)&sn%*.o-*-gD[0Yg~ױr%֬We{Ōtf@f%8=%UD~Ē[@d3ѤQ93VH;{MrnYƶ&-T[&R2O*+Gn$T6!>Éܖ6K=!}SxS*̊B25]̶I>|iLg:v,/ Lˈ5oT9/0f0BL/Xg_;hW{c\lMNP5h`ґ5qF}]|&y[o6ZayFۿŞ8xN{󹅐as R㎘=FC1XtS<6F}s֎hߥ;dR؏5u *vxQ ,3C\B J ;Nlע%۸kU{ـ`G7?B2=~[t>|dDԱBG}e8TP&jY]D0 $ BbE`DZ$j V,!,`2h zŊIc~ ӟ@^7x*<:1(ty^p>Xq 7[e1ggI{u̞ թ^3UACj-q >~05;3n9!5!4vQP~Y>kNiHT/1oiSb*96ŕXsS_1ؙTŗ;jnlBvJJX54E۾g"fRfQl#Ŗ) a?]VIy;SC9j1i*6\;m;hX)ms@{"JV1"CVl,Ly9ƂyKl[MpnmƢQ,vN!5_(>ķx =e¬A0R$\Rlq. s1~ jjefF<2 7P4b:vk[u 3PF;) g-e%mXq$(1q ez6̧g5pAgSo4)agY폸7*M-cH5~ x5퍯P)wESi+!_ ;h#R{SjUaYH+ЭIj۸ SO!ڸ}B42+v^F 1 n $q1GJJrک mHq+xBFcq1V; Ҁl쎵hTAUt -7Rl]llM& ɢ1xXt߻)B|U=j [tAMMܽڵ0QhaMИqܖQo#*࿈%RQː4k/q $B rKz}gpLa SUi*1V} "S,YÃNo oU $N=< 'Zzqm[訫M[y1i!~MoaYuSNP IDATAׅch8_BjsxuJ|m 9xj:8k{_ -Dgv\ M%X?٘fi6ʊ*Ǡ|fT[%[ I;zָo-ē~S3l̤>|_`";ǥXp TDCDP/*<.ˏٵ|Z'Km U#+UUM!ٝ}nENj6[Rb9xsVt ݖʌ.E ƞF!vЁeC>vjl?j>ҒJʴ.جsgĶi| uK1w5ָiH;;R&`i^J>czv (k E]{ÇUpPA+8E0U'J<5)@, ;̜_鼑|V`>6,0Js?]k1x7.7Ap)N ~žCGSZ_}*IEHM).ZLpRQbs[*AWAD .üFe8M?-xJC>|[VnZ ˰%3@۹,߾ټ׭GOc i"U%0@V~ Γ8nTCx7 .p =} P,;*,y۴#2YF^DnKUL @(H˲y) 7pLE} ѡ X?I.\]yOΕ=n=,`iLX: NeH,(j.S޹!Ζؽ)^ilH^X׷iYA7K>MTUM!-XAlZEGIrxeߖ7*rwE)]7 upI^encj+VAEn;/H>m=#Y,Qh!p+^^)?wWE8+'[z)x ܊O8]P8x-U2B;Z"F]j21>ED!@fSpP>7B_1qMD|[5NUR *,|&`c1iyydt1`޸LT0r.ӪCy\>|:ԊQ"ZMnE0wql2nȑ'Y)}+ń a6/EGM[Rɭ@Yr/BpHvh.e4& V,^{@2eA$=IJ#ovHM1|wD,*Ыҧe/܊/Ee5 i]>=U= qlP( qa+f9|탃:_a1o`3#@k}6[qkQ4)jG n 4UtI٢*Jr 4}rJ* ]4TO&۸\mZ şDQ&{/M 'J4Uۛ&P%ѯ(9?}Wa2iJ9LꙟKqǐfc{PA:I-#n 2WG,8Xzm<>W HJz^UM!1:hqk''9voK})懄EBC'(4zj 뿊.%JD>`.jB9?X{^bia1Eɥ`H C|Q|PLAhD5zcnbU)"Xx}4 ˁob y`[Cfo'!Q-3e؊ fVĨҦZArac.FȔn5]oITOGƝV5ˣ{"d ;VRkO0HXt-`B$&z>5,\y-YzۺmUm9kTe!{-ڀI5`EYT#^'9nKeF?[*=6Ys%kˇ^'fK[t_8_Y^y2?s -iѸ \;g X ETn;^?w&{X{'܇vjt<΀FX$ v+Yz'aSŢ.V8/\twޅ/.ϙÊB=K/80 U&\7^ԗy/ %K]"3&97R  V FcTu_(mb I%Ny8CD^⥹㫪Ufh1| U9lY``e]a)\e3Nٯl:<#dQϱu2( "5)Dfŵ)יӻyX,٪2ڸHx@06Y,.ɺw}Xm4n Cإ/X*l ^ d,-{C+.pq̅*aTv4~ V_biI'j8iV#1/[kWC)B9zsO4ſ:v(H0Tw{݌q*,ۯ ,䁨9 o~bKBG"(")-: /,_Q_'2( CSpVPR{le\y Aą 4VU0In]jR}h" /`y%C`^F\ Emԑ[d`/.|NA_bއ@@)U|yq)+ûTd,)][)p+Ie60;o˒M8gق(LMv{ 2o]Fl-*/nUāM {^GUR>`ͤjHsZk+ɪJM_{q,vbe˾-!]=:HQx.5⡹eբW-Aܪ 3LN#/X.څJ> $/B6\85s9n,q|) a\NAV\Tt 2j2o!y`pVvҭ3?f/8,-9ǥi,>)/93' > N+I, uރLZmW]nR_"|jLGgڡ r3sc:,M+@KgGofEm py3M0gS4ۑi8l:YEeG'V!)HNc{dc{>*Gaz5m j`Wvl*4YPb@dFUdƠ2UM8h"oeճ=)H}r9i&USўLQғ;CU= dȨ@ힺ=S |Z-<jin&W!!='~&朩puwc'g"`m>JEKνy|.?,#%RnbA9mzEzL&?VH ndE9DXWˮ۹2 :1Mwle+T ?QV*ޛle$.^4f_=[$F?xš?(]E ӵxfʝɧ#6OYX8LpJo..0v%/`\wÓWᘵC頵2Sq \Vy-ڸkcL|\(m5u:"WCn>1dhvav,҃f4#CimOmC2O>o۷Fl`̤~1&#Pp]Ϊ"X[`Xā( c|Q+[p9:O&ػ/OŢ3^gIy;i9-xzTsk1c1i|V·%:kو}ɖ& JrRe%Fiѓ󥘝ﵟ`qik$:c T.HohDk½4m߽E^_# ^z0sVI[ud bLpK<,[x;޳ON /&$($X\WO`IQP_𓐪Lk7Dnfȋ@'ZS/x} *l2ô 'nrkLo?xnkiua=Z~g'Ras W,LXYy۴ֶ3@"F6noK\H#!aAڇRK"~wK"8@6Ζ n2Dy?xydaUςD'Z%#Dńk,vl¤QX]LTxzwypwƺLianUwCpȗ{-׽}SmT12ook_w R^{?/GLM[߬+O9צ nHFe[ ZJz 渹9|Bǭ}"H`@9;vY86DT|%Ro|Dh>쩆R˕ q۾r[GCc2SM۪MyF^h$2G6Kj˅Qͼ$L0S_,";gɰvnmʠ6i9y*[ԳSۘ U͖&-( œ<$NpB/tkJ8Oy&ٵïtZЮZt*Xm0A&2:mӈuII2U6F#.<&"ޖ^3+jg9sVDr @Fj6&﯅1̛/5ե.؝ldqn87ZDTi%F@5"E\j *EUMf<]^qܰv͛hQ H*:ECt`q0t$.t*XWrbjŌ_?{ =DF[g[ˆ.1 [q%wkg#;6zt0(} \:lK hMqz;,p3<\^ On}(*M5ضE3 U2ij4hq&]YױmR[ٺ`ڵJ^^,gok\C 8jrvٲܿuv61hdZ ,t8٢93{ڲJB)MkVjUa~nHQy~ #]0vSUQVn3Ba-USh*\~JzjHIHHHHHHHL?=3G)j?z oy`WN2B+u$          9P (di L֑DDDDDDDDDDD@ A(2DDDDDDDDDDDO@4V&H"@"@"@"@"@"@"@"@"@"@"   E"@"@"@"@"@"@"@"@"@"@"' @n;'2YGJ{Q |c?a߯FAXπ+L٧Pʒ;m ևg2:g0 k߈Qo "`̺AVV㴳.tQșG~Zp9'RhW($Hl?hV3xZ 6\,C-G@"PcHU#H A nP2]:{ $[[6]!7|r ߔ)4u&fm;v>fV S1pIO<Ϗ@IHn IDAT$K7а4=Bj1d.*S,5}# +NթbţOnT35- J fyJI_HLI+*)1 MZ:vٶ!(+"5SRP-sccbc>$DD?OQ.+SYZz-mT(wma~mV*M T*_"Svekv'H@&Eu{5ըJ ;Ǧ| 3WDd|sf/m b^zM?o!~zY ɊDݨi)Qg.޲3q^*_qu&_ $eReUߣJ $7f̟Ԉ&_U8S}FLu/ |{ ~m7Y/9xX!2v8P]~,QNdCTi0dG3#_[m֡Ck2Eҩ]S#}e_X:T/X-iԌT3jS<~N:$KjXzQ'3] XlvѯJFs(j.N[WgWc=V% 5mN?0@h,ީ"$O31oVwNa2]DkvWCN?C H̡6 eмPtn9n-<]3%ˋ݈@|Tc,M4Z#cѳg0~$}9}z4կdՠM_MTYt kb=`DȪ$EU< &CEvk̭*)d>@!zjIuJ2yXZV}SثRM{{ã[uDAj+_޵tmno۷F:Iosظ*KݨivY9k4"P9 [Ǫ#3sd_5UFY+yMMOVQ0eY d+2Ѯo _zAMBf|V̎gw egބzoV+*{擑ߋ۹o;8s2[cԬ"u&]icFa% 7~&-hla7f]s+ @q MQ"|~ޏcRrZ..]֌v/B^T (-p_+эuΫ0|pϭ##coL&|zDŽnA@O?2_Ŧ+[XΟ3E!C /#JںF1+^a[w-ܞ ݘ2$xk+&D& "k7KhMYs+/I0nAVЕAηSN0{nฬ ʃȯ_3 9|M-VV{ugP O@ԋȤysGt\S1 <M?(ۨLar޾SѤ=GQ"aT(5`Xm;V}d#:8$ƮjzfUˊ8LOlhe 掦FHnޭ,0:M%q`_i1߾9tEN+Ղ*KwЏP&斶Ltp$\Es/'Ja= jDe/]1IQOlߜVص-ۉxKHJH6%^ߕ4e-j7e [ӟBK> HuC„0|lX7}PwW2=#)3̜b4?0;pu>i|`mr:=yRi^Hv<LO~1bAYڦ*Ui4pڪKm'1JիAQRהz@Q淎z}Nu?CZ$r) W_B;N#׷G?¾ii#獎=s~}ϵ8w؞q8}?.[0,7o-OKLH8p7 ʖa3'UZj~8A(s6?Ħ#",KiA$ȈWroQ+6:<^=Z1'-;#ѣtߠ'7ڄTZzQLfao(2^H9!/o}Trn:[BQg` TiҴcx_%Neş`(TuK#H_?EܠTmYȃpQg`p8r}+3$Ml,ۺ 6ʆh.ň"UUFC;[`Ґf4+xuz*k^ynƷ'W!]KeJ>SSt)An*#7)<Ͻf솭j[!o2e&_T IJ.EeHrQqQ^wMpy 2Ƿ7 =A01~TE SPwmZG5[ T<Q+:g8nRFd/hZνX55©#:AG{t% &n֣jINҽ-}GC ov1f:E^lwDEF@H,v|/W U2ת4E(QF3dM2F 8pDfQd䇧0CIJsIk> *ioxBq} u)S:QBΏiΞ? <@#sф_|877Cga;ΊՍ YS6wڿУ& .f$^qȡ1 6_y_ >ઓꄋ{Qw>j#jH%s0ʿ \&'f lճJǏ}]|&LKzFmˬ7{P-ERi^8Q骇wϳ~t]rOwgEm 3Q__w u&3} #uZNfF@y8[ӕ+2lw$k*ʶ.ˋP*bw vbxQt%7x8zju3͖Ec{)e[@[J5\fhv{"Qs@57o >S<㆘"Z[yaSYzJ[ˎ0sgz 6104i '0!O.' gNM5ُ͖bH'ˎ9 読U_jY' .t:n|('8t;8L<2*t[Ov#~TY2 s,|p]U﯍HdHU|o+\|;&jtSA4T8 6yv6USZ9:_cqSu$(1x`v= :w~[WNcBn7&C}0T*>h#mE8Kb`C }D2e{S8MW1e"1С[#&ԶqNJc;a)ĐPYϝnkŢPiz 2ZÆLzq5W%k _ 3E_ۦ.(7[84ʥRp2m\kL >@ztʋf=@vѪUr*Sz0FB)W0s1Ln5KނI@Kzd[3}*ih9d"2_X4j$MUTe*MMұ눩ӫ5u ◥x8 ]Iӵf) Gim\ ^ك Z`fF{Z(pI]_3 کc{cJM_rO2--WZ:%޳Co)lXGL i衁:7]P)+(7HF+IaBrV#ק{+qS|h-~Ԑh}%HRuQA3b߿ 4 M>OW\奘LZM)8\O(C.e"ocFU dQaF l9| [ 5,2[S[N:s\ե8|<9㎥a_S3 `o>F`+gBPE#ӵWi{$t %k _1C>NN$dz< S'lDsa]Mz~֚ՠ[y Ĺ`K!zWl>ɰXoX*;c7`rl뇛<=Cca]mqYd(Q®[:ɫ9M^"¨_ =`*=2B/XgHL!|lT1#O_ɽgH $]d( la~O[Ỏ$O{~/UjxxAIf9A[1 1o`3#@k}6qkz*SB@ߏ !@4-٘NSs*c`0WN|0EjW rÒLm7x@Mk4?V:p*-VCbPL@E CDeg% Qj]ԐX*t3K ,J.kn@F曜~ `eD F;.7Qk ;"*!H U xMƌFV-.S>ͣry NBD[f_A*cB}`Q M_*b%/~])+݄kޒX).;WZ?kG5DG]A&zR.$!$X6dF}bC7dZ7d$XIhPp Efʒڲ $.앉tؘ̔n[YcX55* Dž̤܋D/eEacOj:fئ5k>CXZ`:dyg F$L/tO wg@΄~/?1>lFr{{+Yz'a'iu ptsq6b6Ȳ+R5T /8(Sg28i.Ü=FmJamY]u/ڦ:VדF!J A}8G&jr!NC\7"bu"4R,y{)Ve}h….nQI8]9/Ne'N+k@tϘ.ݛ֣0ឆ2U 6Xڢ,R}uʓB_CQUmF/[.MԤR\~L< e݅)H=K"h?E5,1G4GN쥭ˠ=6qKB9FQdE)$̳#x]ӨKaK| N@ƀ2_. D#$coJk!2X m,m=g t?U 4ErcF~\7w7P-ⱻDtcA 5BRݰ}K=2F˥~\5(aN!؃ab·l8t&SXN݆ƣYFۺ"HU|Q&+(3WUmˆh+> ˍtpb&<8'BhOaT{QAX,DN&޸MZ}<[bI ĶSFlȵ=[5-^?:ǀ+9/,2=\A".0Nyk/\ [4O܃F=9Ev/[g Mhы\z֞e}.%rJ?i®s!ŚWy)[t L.(:\knpy߯زG~dҰ@MAƒ1,Ar6\2c덜R^~EJ8{R. +.*]C:UvnȌ<08+(Ovҭ?f/8,-9ǥ 5d|Nyq5=`66`D7Yy{YI0fyWU$)|rs#ȡ0in2iSjS v+2"b6z` @2\<%VPEgAċxňcU<ֽZ}D FqVnrU&bLh|ܩe yu,[nep|7?/72:Ǿ@qPAGv{tmG&-|15w}T'lhoa460'#+v9)"˟&bQ˩~з`Y IDAThQgdP,#ިe75msJ ݼ?ax+@;_|VvA[w"1 ܰ=*&ZS54)ܞC:( &]P;`v?'kG L;4DYm=[L\v{*$9#Z{l3D&.EeF\CEQv8І|8'#%;p){y" !9Ǝ_#hdJN8=\ >.aY+J~>$xUGB9Wx͒l@mӚU7(Eш+v;5?P dvOp`q7VOZ?N 5@OV>JEKνy|WlYGfK,g\ddPeN[wvyV^d09zLs?Vnp\јi>y\m^6R͜a (\Br_e\XI}\g,(@p3zq>L] nEpK?pEB}O2~J !a CH I!x{8ߏZ>n[Eń@ ڣ+%o<"AZA6%Rߒv+bµG;[6a(, .{EVri2iTm1W L|w~75 L#V̾uW?!lr4o̤Ѵ_:D9צ nHFe[ ZI։渹96qk_I?m,g. &X̷K>4}R_,LUhyEDXDm5s A3K#C~#Ɗ8M>-:t7h6fHIXq=㬤PǯLk`j4 U[GϵgO6 ZyzKwMruieƤ)+3Lcc]6.~VmF>zrA/1!]X?,sxصWcP)jj66 y\*uㆵkD[.\OERp;0`Hs0!cٽ"N] JF%FA`+ۼdn,5XtdB}<\n@<t Pk$њvYfyhNqA[6y`4Tj/tӠKd5v#oݥg{ubDSU jHjꙷr9cz'M`3z@I[G&f]Ο2mkKmuDB2X:v{yz-3w-j!PhtuGN_n)UkwV߮0hvL]+g Ae Fe9)$22WT- i j{Q]Y BiidtaQ+E,BHBʜzzx|=׆GYOVf:Q] ɲ$$$%Oa]+% Tk~a>jv a(ʄl}CJ2$dh @dY AP-տ5gj9U+O$͞ ْ BWn5i ʋIO"@"@"mjO;"dRD6lUmD>DDg@ ZuO ;J7+T?:i2{5f>3! ~{3pٌ;Y#?2dijlTڗ+Rgq&         =^5Tlzv;6X@\T HHHHHHHHHHHLHdIHHHHHHHHHHH HHHHHHHHHHHPHmx$$$$$$$$$$$AH$$$$$$$$$$$(A6B + #^XxΚLU~;Ց28kӖv0V_<8k=;{exq!0ġa=Dwy֣%ePqo-R.e@ݧެQMR=w 6&QEDd/dPI Q_)U-tV l+ g{Ud7^YqާpO` +E[\OZ6񚏤>d@H|w֮1RֿI5zBjPeԥG1|n~VߍsҊb<&,忸Km%[}` *u2(tʓZN3WSlԤ(2,bV 3:tqض>~pFJ+79}z6_Lu!fa73-5д/uun{cR,/j$κ$`:ʻc'M]v(˳ PB7P]Eӡɀ#GKv|o@~!\iEҀ2z(VU]=4*ө5duRMIPOFÃ1EcX,6HϜ=TNjۏe ü;QfTECObV?I,6hi; B3?Fpj62yzx f-coT2aؾ>ܐ2&p vLtp-IS{>ZX_JK~̽>zWX}?cS]_e}*Pͭ]zMӣ4?;w?AO㲊Y</ӻb[t@Th1[ WcxѯI">鈤SMMՂP]kMӭӂCq (7vTe0oD`O<%n"\rg@fFm=,I &g,$إb udzFW{y6[UKմ`g*/1084%#k/۴ٲs-GIo܊R[Ȥ۬[+q5QyP45O&~(`*iӦL"}|:.6=#U[@UTtL2Ɖ"xoCF/0ͬB$CK=OJfTz aU_'A1yE 4#s^C/GJbn i^&7%u5 g>co5pXA߿`ӫQ:ǧ<6Tw *_KMӷt\}Wϸ{rs#)+̺ eNHΜ4{tr68inb[H؎-8jm'=\餲!(Tu=) +t$)| J"<oJ{H'\aä=X/b>^>%8 ~3۫Ĥ?^8捸AHDR1Z3t=T+߅.7D!/.v U  ">qN0Q/+~^RZ*VPˇ\{D43=lz[FKΜjA  B!Z8rL2֔Ax`Y{TOI_A9pxd{PpMZQG>'s{Mx2֋bhs5 =!/9 k"ߎ~Nr>[BEA)C2Ő'=4LV"Ƽ-|l z#SXs:孥OXAE oseFcb*]=*)fΐ7ޡX.&h^IF kcPIQ'hA ÐūOjc$?#xmRL,œب tU`FJVرIAXr¦D$#t}Ÿ0w9qQE&JO KQq7N@kPiou6> &=sW_`԰N܊GNy[^3]l:PAdv' 7o-6ol/ HQ4Tu%> |:]>6)c~"kPu°9R_ *=(*&v+H;w+^AOQ^׌^ j N:!y-! [-WLtVM~9ky<|gg:ȶ706}ɕdQ2|?~s<T/~{Hʹ=5U)dnkPg~?찫+!jJ=5!/EKYܥm f:40lKo(j ĿI Ӎ!N6+KH&2w x3ДmW_$[DL|it2\ʔbmܻצ]ImʗĿA{XWTlD˭AUsj (t#;j'@_ =5'bpy,;2m0o 䄢[۸0ŸG*H4k׵)xw@w*bc\7JmϮQ[1uZ^2P(]2Pڎ2%؛BrX%5=w L'4%sE ;Aސ<>.c-3} ̐&S-Xeo SmFOHϯNä:s% MRRHk8/Av (N:W%e@T$>dT"_^@4ꪢ |fn*l i*UQe~W*F~`k")C)"HPk7ʜtD\l>Ū S}E3Il4Ij3zArQ D "K4,RY IDATi8N7+bqœYztq6֨\=+'<y+3Cw<00"9#⊤UaozXF3l HzYk&几lBW1֮tj @K@*UB{5vC|`AR!SSmc\Vg1LWIjnӰ,\˜T:Snè0E@2­弪`uN# T;Tf*&x/qXE/^x\+(ɯESze $kD"e'j! *AAk^/}[!vapH BO!a5\>l@jAbCf_9Bug=H(,gvEA35ʇG#Ub},"xRBb }0 a\;ԃ]1Vi ^m(?c` m"8W) D\RѶMnb9 9$J.ixPѭDE+LQqU>lH" @995`ͱX"]|̏ALAUwvĭ5P9xcT *1C2JS)?ͣ:J^>+Yi/`+E51[ZfZ!>i[Zlmo k\3 SPyt%!X<Y~l_= QΑJUMX)!w{|oS9kEF؞+bC@xU A՛`?L%.;IQl'/1z.|45 ~2DBYew#Қd?*ޗ'b '+=ֳ4e;Fyl1#9R` u>,ܦ.[?6O)8EmW*5 _qzA< ڢ  822zP$&𪭎|hNІ>F/F(+'o@rM?aIVY1xZ4*RRЌN,vĪYy%XܾW2]il^z1k:*,xjyIPH~ĉC(SDl!t vM  cHd{ְ ]LWrzÆ Geп&?;EVW{ByE/cIQ˷y9Aa fXu/z~{C8E3$n whTuy&5W?~V+8\mRz=~cyK_BsӡK/]74G Y[*)vVktwi*g3drVu-rUam$LјWFh0!URg-x>*ago]'IUkBya𹪤,pVx@&Y6E,4TQe T[,}_I6 JU!FZI"nA\CZ mP9(/d-Fٖ.j1 V|*z@Ϳ1|Gn|) A-|V3`?ČA?/I~ȵbD8+E !A`+w=x`ӓT=WJ$j¤f si~^DVSqkPbڂ8@3^Uɜ@ꍃsO@ N?J>ЄJe)dFR*zW5찐~+WROHݕil'zh</QOeE۲ +u 6 z.s(mVGSɑ>*a c10/m{"KsW]CG8wX}i,JP%&Xz,,*;}1$\e%[aސ]1-^.lJv-ꊄ{*"f=2{ڎHa[ 6r^pv> vxdWq$2u;_)Zb۟V/0oQ/lBiw6eȷ}(xzҿ O-F<@;ꋔZ0⅋>[VCDyahk /r^5`5@&Cd>\:0&MHLL+KrBNqnCGbExdShދe4{v/f~~vT$S&cIIФ\6SXGS͆G/#pEk` Rͧ,eĒLq, Z@qv>Chxx+. -LP5fz؊\+;V2 HW 5z&$ryk (3O"kZfju\N9OEb~_h[YtJD?:׬=9\pb֭ybSOM]<4wzߧ 5:rJ5]kBk=nM8X6ނ4L~sQ| S,(8}wRE]%P7/|x/8]P#V4K3[M+Xkiy1 5gaO5>V罹tM-ud:#!]<63/zDEה^qBV0}ȁ98#j($ċ5`3OZw6, dM3~X'&RB/z[`4Nf; s.e;tu0 _^5=tIXݤFA' ;te"o SLHո_CƢj6_R gv-5X)Iꎾ#ʆ|:ǩ|tG8( |2@ [a[ 6ȿlM 崫-fFJfyYOHUR^\5PGJQTQ>5w#ܸX2s[}Mddn3x/Wv MR~ TM=!SW&S|kQ)t]cѾSPQ#Ax7|1߭A HvA$|5$$*(PԴ-ۥĄ; EHڧsQX;[BM|C+|%RP4Z~Ŷg̑Fa[ݷ Lpw? NLU߼mˋ\V̼@M]d"]Yn̂ѧ{R{"tق`PTxG6ۍu˥k@fmcy=ok`1o>T8cGK@Mܝ۲).PtvR/K]"L~.׀\r 5 ׀\r 5 QRw-C+?_--4sEn#]?Gm?(k@k@4PMZVnyYҕTu L컻vkq[ba9Wr 5 ׀\r 5 ׀\r 5 W׀| WW\r 5 ׀\r 5 ׀\r 5:5 7[gȹk@k@k@WW\r 5 ׀\r 5 ׀\r 5:5 7[gȹk@k@k@WW\r 5 ׀\r 5 ׀\r 5:5@mlɹk@(y<ף",׀\r 5 ׀\\ߴ*gi@nni99}-XzN_0` \䤿>@QWJ~ ?Ц ;p!vV}puTF8ԏ)dZԹU9˨ĵP1Nu-ZrZ՗φ+U }x!9h|:=W=}>s؄ߖ4U2K$g  -7H^q/bҸx4LjW%=Y~׽܂*=>K7nC--}OIrkMLURhcfեI&vD+K9J3sę 'y?|VjwHv$طⷐzgIN5-7fk=6˂>8RkBgp$Fͫ*t޵F]1JWV2jۡN7If6p#bvrf\`ث9 k9JZmut38r7=.8:mvgl2ۘYwqh'<, BiE̼G}FEx++z=~+>pYߊ&JFyHtVMMOJl]q`}y~n^;,qQz6ǵb  \_SIlfyQ[uMW\Ӏ&e5sî-K]uxV##j1羏~KsgTִ8Zo+KlX s߸jGܷg(1 0( *gfu}-&y ' %or clIVg'G/7nX#ij.sr男/=fr3UmpoZ_cGQm׮Y$Aon^ЈY^e}- љeĵҌwQЭ? xo|K߶8miAk{9Y޽x̎Y5E/z/]%E݋%Tp@ԉgHuX_o6Rx쒑+5Hndͻ{pEAц? S˯AOyII ڪ1Aw:c݇e=\LC 6I MmxzmEot뵈*Ęw0%zҔ],dAaY>BN\{ :zװ 7I^&ޡiM IDATq%ZJF ngU9+%B#MӜJ:nӚ wgoHqYW-Uydkj9\޿-f"U?J`TeIޤ6`5Ha:fg/]eTHtZ]:UfE(IREVU]1m=:RT}[އʼn[ߒn]i"MnG𼄐}5Xsrle>Ntek/jjXe!5siLigaCooGY=ُL4QZW]U+Ukm_L&3?XٵCLS輸=vZC As.V_҂1}-_ouLזl{@ڶwRzSx*_߈bٓLT_(ʃ(M]UM*c6#%4TEwaCty\^a5|dC`RD} Lu)d ̄lQPX!1Y#kR)5~.-9T W|pKU~c1o?8U^acO_JLmy–%k>xm`n?Bqj~R]Q D[ UY`kPu K]7xafȆ(з jvM抸“N-yηlG,͊~|µwəeQ[}_9|K*lX?G(8V, +%vxܪK;V;};!3MӸЩY1|_ 鉳? ILͮP-\^&•`Tͽw MtX)^ +UCU>ò^@Dȍn!eu#gcx%3SExG9y-]i6A$5\׍T=(B2/̋7iu$Q}9*2tqέ3717z>N2OAgߵАwyeu$s EGEQ =<6&wuo| ܺ(tnamA\V%[A - 23eZO즨1_7h &njchuz(oึqiie,Őb< ^sw4.3ka1K*KNyܚ~"'1%6Nf/LnۚJQB4%ȓ$IǼ<8&>u0s/0q_L}x :z%mF U.2H~&W:d-P􌬂VmUQMC[LKtY/-IPDL^QMܦЋFn A $6CqSI۴Ȟ6(UQK=OJfTz a%ЉdڡhM#QE|_軍YAQ470S⋐lijz&V]M`3^&䗔Y'7;3ZxoCF/0ͬWRuRE(Β䡥kЃT"wH%Z nRsZ,ZHG 7>bK#;ʖ^4.P1 0SP&$ i'nb݇1&!?m\ g>co5yXA߿`ӫ# >I#SohS:.&>c8NQz!ϟd_Nű[ޥr]KFQ"KUze7HQbȻ.'`/J$]k`3D"OAWI~YAÌw̹kI#Ǚ:$NB=/xh}께='7< G__?3't* ^Jޘ-#{[DnxҲOA=X."=Cث/82'2XO˅x> opػ`T!j[VfQt+M~vˇ\3Ϧ Ne>ZLX9RXh,rđ PA>k Yq%x;<)~)?С(¤O} O>|djxJ6*%sY;+M;ث87${~u]Ζ.X己MOjEy˱I!(Ti7 ox9'@^@l#J{$L5 MP`&^L:{N0ڳruqֽLZw^4ш'_nD!M 1lD$Sr`_ ;/nIq"Zzoޮ˦ 6Ӣe=_>v­3ǵ!(Dm6 $R(o/u$ƼݧWNbʋ1{̜W |QQkLXEci7s/vMD8AMsKmԹ_ UAVAz9^Ju2V8r׿z}f{pIr%qC~$ܼQ\6Bi*lqJ|u6|d̼)> Y{繷W=wWեiKOߚ>pF!i˼7KUE0̥1lBS>s5;cu0]d /σ4-M{~cQLiM:p* ?8"qigSUfXrg:$aIIE~5oe^*ʊmE_< >`lBl"R.,[2[_MQQ]{g0/y!Arڂw0sdpG}Cmꃹ/#'bpy,;2m0o r䄢{ָ-Z5V玿xO+اHhk=lq/SjaRYrm+=r`Gm%9>j@q.Bf-3} ̐&S-Xeo SmFOHϯЛHä:s% MRRH *Nmd2EM]Kg_wWWadۣ]yLoTES0w={HoGo j Rl9P*h0Z _|=zlgbP7]Y˾T_2l6mԱԾa$z᢫L)up,̷$BTm44{t#U($/) 3P41-lѾ@hXu=fJQ>ހ֠ 4U gh1}($xTzD7,IAjY% Pk`HO AuA'ےTJx/ 2ȉYg,Xq݆+י ,4/!X>ŖF0ylxPdEӱmضp6 ,WEӛ[:,`㧮BFo#k"~ȉiX,"67HqVNEYPi1yi'.K9I",N}vCaIg}zywڐiSYhXd+l%Z}dǬcsEg$Aa Ӭ:A];? H-gPf foXQos3 [.8! K@^IF)+' %E9iڲĽ}qл*w]._P,֫ VTQvhE 3Eo zגHga=?2vC)ga]CZ7= 8 yՙ{R (P]U0g ܿ ԍ&M>PE] rhuT!Eʲ<TYy@0lCޤv -]jF(1|VGUАb c`haU&=QpjYrl Ps鯹))Xìy7#'`aT02\{i4h4$%eEU)Rl}/ǹ]&/k.ܧ]R!N"}JpeZH{PVFHJ,VM NkK3BÓ3KXu!|q.\dusGzv{Ţf)|!*h褎mV7B\"""% 7^ܻþuKSj+ ǟX))[: #QZDHQY~5+)#i"ByDvOآSkWSa,Lt͜"`cLp. #nƹÂI]D"B(K viTL$(Wg$CT6û|ݒ 磠۟coYPu g(,ǯD?I(t>ӯ"L ;|_g!CJ͓raO1kSO LB& 'aUA<u%r--;Bᄉw?uBx#8z% E$ <K$?pġ _VrH)Yx Zcv{10SChȿUaQ7En}ۈHfXuBGW.<7;3;35ͫ\8"^`)YEUUp=xas/S[bGnpJ:_we87|X8 ׻VoB&_?%q+zIBKV,} n"P_xtTCwK/]74X9(/@(8N=/ &RK`hVBo]4}O[=]DXψ[WSlGXt"ؤy`:`m, #fYTGzVW3*m4SJ(QR-S'Jc[aN\ە'ɹ`;J6(WY *i: |h]"Ӧeu秡^.NB>f:.H aP 1JZ=X4,c~z>! QJ+?1Nȭ-D}q%_ y=BC$DVՋabx @VT7tČ!KhuX<?oƉv/ 6ɫm7l( X#$VDICd{lסa/׀Ec2|;`UXdXCIgFI}rB$SM_AKػjmaU&} F Bjr ?>2We5lVyar|c;FO`+\Q{5H@څUDؠ#Rjٵɡ = aneo(g.,Gy+vL:~յկ5:f ) \Q UzSvSO%'ıTtF8sإ9 SБxa?= Nɫ_{p88 A*"R4 bPRXƒh4b Ѩ%,(&5*&Ɛ(5 bPXbޛevl7U /*>ټ:1+_ eQ].i9J-#o*(u2,I[H_ w~?-[$B=$k/Kœ# a'~v] RrtfyB07J rԞU9s5,~InֶlRd N]JڱM*5$+/X{(!ڳVYfxzi׶waɅ]{4{###^2SsvW=<5>+}Zbbi%,Z!c@FeQv3Ft)'7,|x2oBdQqAwOW7"7PpzX념y@i+}KL&te ?x.ɵ7D:Hzjbƒ3<΀e@zQ_D )ưJMbZ眾PCY>Pu0Ծܽdlz<Cd[١mӱ0Ғi;6W~ung>-rOjkO@4 ExV~;85݆Jb}63^@pTچ殞AQ3=B!ǺY,UU72?>1Rߴ=YPpz&>!1*$Mŷ4=tx S=٫ڎ{nI2 QgvA8FΪ(ЈCOb^y{1P"-RҶ<崴 ыǐƽgĻ+KC4*(vH{eFIFZJj^>b֚7_^R1o;0rQeI4e;pݥ7NVxÜBb*6{ 0 Á:ƿ"c7Ȏ@ږ|VNՍ]Ы}䊟p K~XkFǿ/Ü[jad5ǷTNfrB[o[(oWi=78m˞Tf(!&g|QGit;jM i = cMĆ%e5ӯ?"Ӛ¿CͻuIիE%hY `hM9g/-+w픅3#/ra<@伓hT$@H%JltNcVg14F@nRc!റ: 98 (ۉ@H eg|\,pTxF "Zo!m8\?V'"2OMKޭ5# y'! H $@H 9%{£H $@H b@H $@H )n' #RxAH x/ཀoi |K[%q!1@H $@H@(988ȑ(*@H $@H ((BH $@H 9%B9(6@H $@H@H $@rJ2 r*=@H $cn^iRPIENDB`astroid-0.14/doc/astroid-thread-view.png000066400000000000000000004475101335422170400202540ustar00rootroot00000000000000PNG  IHDRbKGD pHYs  tIME y IDATxw|SOVtIM[:(d! 2D8 WEqpYBEPTd\dtBҽG:ґ6t$MR |߯W_&g|zs9B!B!m|*B!B!/!B!&y@!B!<JB!B!ms8*B!B!!B!bB!B!P!B!B B!B!DB!B1k1̙6x 6*LZߕkakŋT`kӑNarQ[W,u)Dmm-U \gc-tٿ±'Q!?T1HO17~WH;o}1:kj0kw[YذG=8݃XzeKauUR"ǫ~~;tMwS{;>-=)h4ppuynݹL7_ODAa!F kkv-'7/F $]SSwp;.!qGK*#U*yt# ߙ iuu5nIAiY DWũBKR`me ײXi2lb_AhJ 0Z)(((Dmc#\=(eg}yBUU4Z-Аf YAuu @(Knнbj<={􀷷@q_Cwwn;f4 //E# 0CVZBvkﳲq;%B "#"b¢"dfeZJBQq1\]\Z\[דr!CQq 33RpvrBԀHHL`hwでE7'CqZTrt J%QXTkؿ[i0ZPT(N,lb[fջH7iHMK<%p8dA} #{k}%>D.bde@Ѣgp[P"N]h5ZDO5tAhZ9/A.C³Smb{q;%jݻcӓޟ1˛>w`ƫ`̨';K {t(fM{9Qp{x`'1ѡ2W]71l =n܄JcI==1]h]o2y bB* @"VjLe0I :]ĦL& ||=$޸bfv\v }ƛ1-lZPZGXL5/}-/<;'N3KEj((lJp8xwoTCl\<䕕AFfeAVChcuvr#{+rROOes >LJs_JÙ;w"/J ݃j5JK^R)3p;%YSᡡi1?́!;'EŰCȞeɷJZ)//¤qR,EԴV{:wP^^; [Lo8Ջ~ LXȈtEEpwg.nuq75 P)akk?&ęѨՈb١W85%Nk7~>h-Vl 77W&-EŸv/3;)/]#OE ak+d~۸g㹉Bٿ#3;[o}[/<8p~6t5 /Fl|<|Gu~V9wc[ϿG<kkkM(qj^S'#{Q$bܼ|xP"z"n&b.lkjc殮!-=6zBUBZzsGG|}Ͼ>>Hd7j!\.;wҒ.o//6A 8j 3eew7;S]cUjZ:\\j=,qT;hǕp8Z0e7oBZF<>ROz 3t3B *ũ)16v+@Nn.ucj|6n$'֝XYYC뫩ixHDo//]$]JE1 yMb|l8^{E?ۏ f'xB9pqqVEfv68"z# '{Z}|k ,$\$TUW WcbxMHb{p%:QfV%ކD,WכY9(Ə7r:dde*''GD\- [w|W2wYSGDղJΤ5?sraܓcPUU(,,Bxh(te,M#cq6b2kkҩŽ{`eeez.y{yAVh4'a>;[pivk++ <߽ CiY<%;hlAѠrfp>G\\QZVV"?x<PYUFY  Pxw= m兰x<BIsuqH$BVvCvfܸ^ʿ㢶HPPXШ5X*Jߏb_@Rl+NU*nٳڻ%N D,FeU5r9$bAGqI jjjnEGz-p-B"3k(NMAӜDܕo+VuwOnpwsm4چcIM0aUUY \.Kd-'QjPhR5꺑eАԭOz(|Pl$LR1ϙuA .t][+V(G}c?PYד)eRXAGwGkqwwwϺ4I7[öꨣq*b ?IH=%Wf.ΈK1`p`7t ``UE)j;|Rp#A0 <45s srrDeUPZV{{TԠDV eEKCAմ-sĶT{4 ]4kEii)* hPYYQ(X-X4o md( 6m^w}S 0ncY0B-P[-h_++Ac+gƩ)16vj>U 'j5qN *r ۷Csw~rUHOGJj*xF=Bq-.PAq7cpoX$&ĝ)q~z0VPՃDo861jJ lɦ,K[K"z#M\瞥g"Y98^@B*颻d;ƃ]]:)w;[[{n.x\T+r>d2h D`ggԴt3vFcqj#AeU&<۶4/7G :NDޑ=۽)NTbm4H<6\.x<|qN dRqhh}N>ׇi Cjz:8GD1J>m|( ƃNakq-._} \q T'@G |&\r 򂕕8Z-Yw@Q[*ڢ|><j v(--5kx#7o!{w`98@h B( <䓐HPHHLD`dJI%-cq ev4es^i8q45}$3+|>.^w7}R(i.rף~~;I]UUpcyaapeKzOt(,.B3x\rrsaogwPT\dž= kkddf!4r}B3.:6>~r9;ĩ3KP"+أTahFCq௿)𼹯7۫={ⴽ\.|~CDe=|>(Q]16vG qg(Vn=y\nWc볳EMM jkJ<]gdn@кs++VA( ƃNp쌢b=V~# AO-`톆@z[ .>|#-=>>4`et ./6"(0W7s?_/> v [+L1__X EFf&RQO`sgT&`?w6eJKơ)8h߫2kX cu!<裰zRs7; R{P3Ս|_[[$ovK;6uBixsN^~>\]\Z}]{Amm| rl8Cqkשˑ>7={#<ݐ_؄89:qD]L{"lcm啨ǃS(UoSR8(ƛ1b $LFQq18.KJy=Ph T娮Ga㾺逕<̝_o#3; ysry\]\?K7ׅpuuex"G8 q-6 sSOÓG_gLck^D"Fnn.\]]>|Ԁ5}|}ԴtIͺqOA]]deTdjI%-qQl㰣q~/L'G8"#"PYUCG0'c"? żr2cj4_P|fl:#/?ƻZykm ltތS֢D&koÔ=|>;_{+QT\ʪJD@pRi8>z QTT:i*tGB̬l.簾Jt MS>ee((,H$B&N`1N;GX|}Q__ܼ^zz¹I`oddf!'7q] WvX'v!B!uq!B!b5B!B! j< B!BAx@!B!B!B!zU<*)Bih5!Byu\&7 !BÆb(*)BinI!Bȃ[hB!B1L$B!BAx@!B!B!B!Q!B!B _v΀VFZJB޽-ы1Ϛ5 "_t Ƹ![,_+֡tݻ7oFrr2 ghT*VX]_nn.[n /?._.i&Ot׷pB_HHH0ZGVɓ'漿;֭[۷oC `ԨQرcGҰ|r_ǐ!C~zMɯ={6q˻Ǯ(K7o錄Bh"|NFqqq9w_0c \oyylݺRn2[rp,x ۷o5,tZ-Z-j5jwe'}9Jm_f{psgiM9~{skZ]Fo#ڝ~|M+YT*3'x[n@ ip9D"dee˵̓+<=~x|߿SN<[| }][,޺R~;͛qA=zTW_}#GČ3iQɓ'C ~![hΜ9cs3s;,]۶mĉi&H$= 0h G8|}?_|E gƐ!Cɓ'C,#<<6mj1˗1~xǏǕ+W2]|D=^4ӛ6qV Hw}d ::O?4 H0tPOzj\pwwGDDVX:M9v܉Aݺu/gs<ӧO{xꊫW_o߾pwwH$<==!Bl۞)//j~u[]\.̙3!HгgOl߾bSD8}4Pܸq6lT*obVVVqij< B:p 4iɓ'`su֡;w_cw IDAT[n7Ҩrc?^G/|7xQ`A'"** HHH@~0qDܽ{ \\^{ g\m۶1o6Ӗ\+W2;lSw]?aaax"RSS1w\̝;Ga裏~@NNvڅ={gD~ٔs{xw ++ gΜAxx8{9bvv6b1j5x ̙3C@Dze˰rJ͛4hΝ;۞5裏0sL(++êU0w\ŋ[4԰6Sk֬GGG+p8ؾ};vލi €ZB! "::RO=,vpX/p|]j,j<d9ȗ _<ݺ0GVmA]]q)`׮] ׮C.nŊEEj+믿BW^ћf >(Ґ?{Enn.sܹsL["uuuz*Fmtޏ?Æ -f͚D'O]4cpvv3>CX[[[9۷BVkaСػw/3_`` ֬YHX[[GIZ4}-gcvybܸq/_WW^z󑛛\L:nnnxꩧz[ܺu ...;v,ÇcڵH$-:,[E~O8ѡ) ;-fϞ ;vbq՞]z5 WWW`*,,l5cƌK B1~ xXz5\]]CTAhs'&Lx ʜ"MD"ﰵűcǐ #F`~SYYi( hxf[,C,cϞ=R(-{֭Lc?zz)ƍks3f#G2Y"7B)Hz D0322 H\.$ 222ȀT*mkϯ*&M7b#̦"##իW֭[PVׯC]9{{{&LFѣGQWW?~ݺuxݵ_L֡IRxxx}.9㪽 44zzz2 Myyyt"kHH$jq###>>>bT*EjjP*1cz^ +}:w^|gL´iӘ-P(S46ۏ++KoGm]B!&j$''C$֯_?;QVV<([L=^QOjfim%GhD> 4m4"##9,_̙3s9sVqmun4t@cmm{p ~-=zǃB@Ϟ=!O2۷VOOOx饗LɓW^E@@b z]>}ݺuX,Ƽy󐕕݆eܹ= @@@Ν;5umݺz͚5ˢƀ:<\S< ***fVBMM y1EEEػw/PTTgAUU/_"TWWc׮]믿 /h 88GAYY_̶͛6s巽l̛oK"&&555P(8vRRRL|l޼vBaooϼoØ={޳ӧvz1W7駟P(pE,] //'Q\\_h4]СC(..L&kD6wqDEE=BE!֐dذa***P(?W^zo0jt Ƭ_g쑅ִqַz ۶mC߾}! aeeP|GOؼy3aee,[ gΜ9s.|K :BÁW\%KVVVpvv{ٲeؾ};'''Ba޼yz| }a.M6O'$$b666 ڵkdcƌp233MoXX8sΡgϞٳ'.^_->|86l؀kB*O>ؼy33}޼yL:u gϞe>7J充~Í7nݺo_7={R~!55ҥK`X"mo9pBFkbݺu={63رc?#GDll, /@S"66VXr%.\կckذaOذaV\9uax"%%Giuǧz pqqaFm}+soSwիW;B!p8pNBDDf,_\scn|nQ'&&F{?g@B@VCRwY_rG/~|.D{NT]]t㏙ ǏYO<\j5&L'''_BHHT*rrrpGbԩHHHh=O;vh byJ'OáC@!.xrz"_veBoOVp8޽0abccPH < kxpu gx<vڥFZ 22 ]v ǏGMM 3 !BHWEWiq1.*4 8q_5,X˗/SB!>|N Ķm۰~zlܸJ`ee޽ dZ ,ԩS`X[[SB!ٵz{/ŋbHM2SL"8\BA!=@!B!灉fMO[}T|Y Z !B!zB!B! j< B!BAB;98zVB\NbWGo ,e)UymcYe >zI9 pZwB!BࡣW _>!O}բ_71D9'oZdB!BrYkߖG/Jgdewwsޓ.Aጷ>>!~TB!B~'fL7}x 󇕀wk;?)n;Σ'B!j< ?BYnx3r˰p*@B!ByQKR{ ɺ=-gg:\IL‘1;8B!B}^'CR{=i8]GMm܇y"D'^F qB!B0'|d0lt&  gM`ۥ?󧌠`!B! '&&F{?g@B@VCRwTB!BxxrXqrzlB!B!Q!B!B B!B!DB!B1""ٳT*;mW62-Z۷=f¬YGgzkO|c^k:RΖdlիWeJ1;?" D"=6TUU.]k}7oΜ9|sN}ůLh48dr9ӦMþ}/w:^ .[ ˖-{(.u=bʙt}!VVV8rz#GonR(0a ٳgٸ`ggNJ+pA!..?<&O BTTٳgcݺu4i~wPB!z<1`dgg._CB,#** ΝӛӦMƍͲxg ɘi۶mCXX<<<ЧOܹw[,^ŝիW?ĤI H0gf 4/^dwe}:"##1o<,_{ѴtwA[bJY/bZGP7cƌPFcޑ֘׆bP2l0=zp1-Z,ڵSɓ͛{_[g;?C񒘘_?"""0f\phZ Ճ!mŋ)eVt\ ջ_ddd`֭xF#햍ж___x2223π ,,S/5 EEEV+P< +^|Eܽ{*hZ:ʔxi;/R.mջwgUG{vv\m2i$ۘ1pABD!#qQHRlܸ9Qj(//gLYrBέ8|$&&";;K,̙3jMZg߷gyǬ =B]muGבxa0G4/Sۃ1˖-ѣ矷[j̸>aҤIĉ-=X:l^={իW!??xݻ70cW'!B6tP=~!󝿿?8R3gδj1bccta@YYs!&&VVV@ ;ItvvF\\J%8|0pAX,QRR?f)޽{cP(ؽ{7ze2۪?CemJK{뽣KGPt$-Y.1;$''Իז\@n*uVF'N`ҤI\.Dzeː>} ??Cvv67n`'B5XgϞ?ƍ~zHR,\EWasy#{޽;ƌ3f %% .ƌ o&nݪ3g"11R=덮sƍXjzj|̴5Llʕx0|p <,eaٳسg6l`2۪?CemJK{X=5Mt<ۊ`G˅ 777Z ,`L4TGwS! ŠYb{0wKoԩزeKkjjZ<x'1dxzzbƌX~==C7b | ^|E:B!3jhVRkDͫ)~ ƍtR ɰvZDGGѣByǃZ>y@:v;b;I!]P(ÇVĐ-[@p@!t2y@!B!܇!B!B j< B!BAx@!}vl߾]>!B!Ac<$~L8QCAVc]")))8~x[n^~exyyݓYy ^~0f̘. Տeggc޽xw"w[ye'ǃ9ЫW/ 6u>}.]juڀ0j(oҥ=W!ԙcF͛ooo@AAܹ_ {p* BH ӧO4 ?zӵZ-JJJ?@,#$$Ĥ9#G?~* O=U+!j< '0d?~3gɓ'1tP888p ddd1zhuX8~8amm` :916۷~U@s}}=8`„ H$o̺uڵkHKK;&N777VOMMӧ!`gg}bz˟2e ";v 6661bNZѣߔcS?zѣG3eLuu5{J"],лwgnƖoJOcgl2ׯի.\L,y B^^ñm6$&&wM IDATވ/܌ߔcS?@ ԩSѿΝ;ѣ?tx<^x <jYYY:LY9k6l 4 w﮷Sc7%~ħ1gl3}I_aa!qNb. Mc H|wť 7~>551eiJH$4}l)''qqq?~<*++q%L2 &?-]~>o@p\H$899Bo#G~Cb1JKKhPQQLVRH$VtO>  ӧrrrX>++ }- Jͺ|S4%l/svvF^ Zh4lh46x#++Ew^M?u^^^Dٳ'aooJe[>%W]ѯ_?,\9 5B!]= T*A@@޴zٳG;@?qD9s[lÁs2Й L˜ذI?ִ&)\.9b̙3eEko @yy9d2pP\\ \t4~K_}}^x6iJl/6kڒ.|rm|wL=999a„ z=;t}iC+?-Ulo2}liZ#dj,Ӓgk5O%oįoBrϴM㥗^j^yhZTTT && |M@ @T*듣\b̙–-[̷pttݻw.۷o<Q3eZ6څMӓ'V.232G|_{ۗ9fn@Dc+++ > S~olv6M?esW?6ϟnogT*ŵkP]] Jk׮/` u~eotB1y@cǎDZqFj1 <#z*:Lj={lw\]]ca߾}P(pqqܹsY a(l̙3֭FLkj5,YToVEhh(^}U۷yyyxWMXDxyy磤}eԟ)+ ヱcDz^Qpalذ2d8Т~;|Swx<{.'ھ̱Y?5e5{9ܹb]*gÚ AD\qj VZuiS2M.SǺ ׊u]bqA (ABX;D HzIYnr'[|{W_'[p|~8p 8+VO[>|n_KTtWw95Ξ=Lj9sSv%ڵ eNV-Zof&"_Dip H'. -USN\ǞDDDDDDD < """"""Z"""""""2"""""""2"""""""2"""""""2"""""""2"""""""2"""""""2"""""""2"""""""2"""""""2"""""""2"""""""2"""""""2"""""""2ND"kK5qOlW K$l9DDDDDDTk]]*8X{AB`0`0E3,ŰD"}יX,^H$D"H$^g"""""":C,C, =⚙ `0@, 5%{ߚP'z'D"xyy5Qcr?lKu"x`zQ! /9)"8 """""& kFDDDDDD{a1 ԙAMt """"""zuG5qO,f19 Y Y Y Y Y Y Y Yv,u?OˬԓV=y`xebƱOXDDDDDD԰灅 nqtCVUn𾏬Jb 2vODDDDDD ~MɺKK_* *MUw}""""""a DDDDDDDduƍѫW/rW^زej!J!J|6m$o>g tRtҥF7m4k΢2oժa6ݻ\R &Tk{=5ƍ5jJ%r9jS䷢򋌌DnݬWkoi1 ܹ3KˊJT*L&Z/**R)rssknݺR˖-Jڎ,z } j5EĐo*Uɲ.U.]s 5 Ο?'";;'Ofr>|8W_պ^HPn .`Xt)FdggWy{=5M`РA5j/^ WWWlݺCŹsX[WD"|W裏sNlݺ,"""8tG^^^&Wtz=b ƌcСC:>R˗/#)) Jt'O^رcwww4nܸ۫i֭C`` Ν R wwwDDD $$?So]ҩS'ٳNNN?~< b߾}{ͭV۬YФI$$$`ƍN=uW^ţG&MBL&Cdd$\\\O}PTxwТE xyyYfx7(l@79rJ\$%%A*SH3o}аaCwؼyogd%s ǼrJ$$$ॗ^BСCKuE>6oތcǎaٲe/};==Æ \.Gpp02o "<<NIR[7o^KRDFF iLblȐ!|JR̚5 ^3gꫯI&P(޽0t?>Zn u֘7oIp[גrl]]t77n7|G1Is)ÇYfӧd2N>moAРAHRx{{ ]ZL`)3 GܹsS՘8q" ڴiիWW\]YRgΜT*Ç-Z?g}___;////"""}Ł;ߏ~UϨI&ѦMr;>E޽{Xv-\\\ԩ? 6 䴓17oČ369!C 44.\ŋѱcG 2ׯ_a\Zرc(VXjNxO>[zz:j5ϟ/Ug{ׯ_Gxx8ZlǏ#%%'Oɓg!ݧ~駟uaÆ 3g+So۶mÌ3֭[Cpp0^{5\xQH\Nwy&M¦Mp !@[lٳ1|#)) ]t?O\v vvv2<~'"%%Vƃɓ'ƍx0}RKXڮ*S ,ݻQ~}="W둖V͋/5k@xx8qi$''͛4hIKJ:qT*N8X۷GQKD2ثj:StQ%*UjV꟫XF[(9FY$.??hР~WdeeaݺuR!!!R Z6>o<ܹs_5୷Bff&2331zhe`ѣnܸtʜWرcظq#222_x=*-QXXӧOeɒ% """P(pAFWWWDEE;w.mÚ6o gggDGGرcѽ{w`AAAX`ڶm GGG :t(:dl9WToǎCÆ 1p@899! QQQ8}CFF2220rHxyyaРA&+W #J%z쉅 BPشl 1{R=p@h0c ޽{m֮*S111CӦM!28qyT*Ѯ];ݻCg|M6Edd$\]]ѡCtbJ(٭X*bpqq޽{N:/Çmr,999+V@.C.cÆ Oh^VwРAB 0pr;atnnnݻ?[###ť>$P(LzשP(&A$X BgbM?(3f jfm*lIm)))+We\]]M<z(,,Dzz:_V^~U*U oood2n߾mvUn}||; p~Yq}a/|O^HR+O["Y}%L`YSᵭzh;wb…vZ=2̒m1cmi?0 B_|竐dUgte>D 鳠|8;;t… &>yYSWr.YoǏGqq16n܈K q =[*CѠm۶9r$D"<==ѩS'<:SrYڮl}uODDA8q5,Z#{ͷ~z2OOV=\a`X]%'0V={ iRRR0~Ju-y^ޅnɋ첶]&|x뭷j;MW2ݓTZ33x8+ZfnT^>4 иqTHR@TTTY3-gKL4 &MNիWc(..Ƅ LjRXX'''}7fڵf܎`D"YEd<ן1BDDjժ288'N0Y^k>.nj޼pj*dffÇXvpDhZ8;;#11&Eپ};#G;v;!D"8p* 7nWx蕬,h4Ohݺ5>*[(bpJJnnnfCz*jI:BgggCT޾S" w5  ܽ{5*^&՚>۷o kc <V~+[Ε!HٳgUV8v옰Jr[lZƑ#Gzڤ^U~2Lzat}ܻwuZ-222qA!00dNʴ+[/x0́/9/AU*#>C@\\6m ???G ZjDF#@r_KN}hܸ1r9L[n֭[ [ɓ<0008z(Ǐ{Ri.""¦pttċ/X J>|8rss` ''K饗p=lܸw^3״ÇѣG½{u/x ǹ5m{|WHJJ΅'[+-犼9s&Ξ=|h4ݻ ?VXu֡Yfpuu7ڵ &xxx $$ZU~DZZ6mFǏc̙.D"n߾C!//G}^_Uv܉CR’ve}j2Vk>bȚ"b7ehBYWXaժUС-ZO?+V@PPٳg#..&M2ꫯн{w8;;cǎضm7o^ϟ>5<<c„ ǟYl۶mѣGѦMiǏѢER{> ./BBBb a)Sr_q]-aZl_~BCCѸqc|wo0x`!݆ jѲeKt)))ضmfΜSb޼y6oe˹"ӦMBk…Xh"##t ?bϟݻwuVxxxx ȑ#qyG*fggc6m._\,?| 5j> χ\.7Ih"L:sAFйsg$''cϞ=eN8h d2xzz >y~XҮ]%]~OCDD5$$$s^MXY":{3ݯ`0@CAբ}6ُA9 lN5_*Κt5(//O>dBMpa˖-u9d:;>#4oZDhҤ bcc1rH\xT~L5k֔lÆ D"Ν;Y DDDT).\$ bM/c+ol{Qd*7ݢD"֯_ <ϟgP)[nE˖-1vXQFx7x{F"`ݺu&OTtضmD"ڶm¬aΝCxx8hj+v}_M3Yfdυ'OOO8p| N'OPggg|\UVaX|9h޼9֯__dd;SNȑ#1uT8::PgMzVkű8::b>}:+lĈ1b D8u @DDDDDDDfA5E F;62*tG;>QmĞDDDDDDDdDDDDDDDd-TJ/\ִa4V-+ѹ_mHk6>xO߉K)鐺:cQfϝb \|PZts6ISE' IDAT ֶD"<\!OSdq]LD0෕vǑHo7z%U^t,xiwU{#_FH8io+?Ě]w7Yb̉-Hكk k&e9LU.z&2?EXDDDDDDuuUOe~>6_t_tD^A!N%'vb̯g0q+qE G5Z8XcM_PoFpv1,6pGܙ(p6)1k1y`{Q,_A0IzޜХm,qnρ_̉lѺ3 D̏{Yox={,g`0@CAբ}U"""""".\;;;H$bl8,,,,#RTT*gLLUcV?ֈDDDTUL̽~mi+Rζd6XY111V9jS ڒK۷R/^$''C*b߾}5v>Z+ѣG9s&.\h~&MSLA\\ڵk Cؾ}LرchӦM`̜9yyyR'""a|TsFVrss1n8l޼of쳶ٳ1{i׃ 6~={]vسg`F/"22BzŘ7ov؁-["!!: ChhH,ZCݻKDDTC9U~}HKK/o111;w. BI& ˎ;Px{{K.8~ܯx'OD=c5T]vI& Ė-[,ʟ3WU_y[z5Əmbʔ)BPP_^TwAy:e]^{ Yj̙ &@U&ZU9o+Rڵ6hX޽{ѫW/P\mvV5k֠qXp!d2=T{A*bΝx{{{ܼym۶D"#\\\cpvv.////,ZJ6FDDD P5ɓXd w1I뫽\>c1W^SK`yZ._RSSC"TXGU-4wnaÆH$HHHVR(U=形mVSL1yoٸy&Zl ZP\tIe 0cرc 3eO2'""A1p1p ׯMfr]ŋaoo ÇQQQ9s&вeK4{l% <-ZܹsGx͛2dD"^}U?ޢbDhٲeѲe}Ž{,_yWQYW5˫ d25 ׯ_VX:j{1:R^o\]]quYTGUqtιiСC{aذa?-CUU'ڙ97o+ѣGpss+wìYqCƍ7NDDT9V ___,_\P3 ~<:<<<ʜHFbb"`ĉ0 Wf{"Ȫwvv~h4&uꯢj^,9F{y ^}>TdׯJQei5ٮm0tP\pC `[*&&mڴӧ!Jq%ʧD"A@cikC><:{ׯΝ+רQ#l۶ EEE+՚s?y&nܸaÆ!553jd>*O`ܹ3fΜ)Ǐǹs琗777DDDɢu7mڄVZuֈ/LZC!==~ _[hQG6nܸR[c~"&L<[Z`͎;Z^ԅ_[_eϴ4lܸfU[My`~>xxx(AZ s"''qqqĸqVw>}]vj/]vT미>t:p׿:~x5B~LZJHr2˷<ӧ<}`.]cǎѣի/^<ԫWZ&GEWIIIÇRP^=t]vz`hZ$%%Ç8x OAӧ6lhQ}1bΜ9?TeffbsѴiSt]b%㫨~[w^899ᥗ^2y_NC~*_ulfl?_p9ܸq 4!Ce\=GM|V%;>KʿdυjR/DDOdL a%7#Ztj qqqx^|EP*F׮]F^f͚ {yy!,, >>>HOO|0tMHZ.]o߾ŋ-Jb/5j:v˗/֭[h޼yOOOGBBC8q#F@jj*!+~ff&^z_ ̍7"88oBBBQFAP@$U`Νȑ#ѩS'ڵkhժ\]]͛󈊊*U!,, 5ju?fB`` qpqnǏ˗aQϗh_uGbݺu0`ѨQ#ڵ 6."m{d8u^xaَ; H믣G0 طoBCC-*sOcT*ٳ۸q#Zh#Fm۶PTxJeWt|Ou(99bM4)s[-/ˣGpmcժUHLLDqy4l UoT*h۶mY??jW+Z㳤۶m T*\S]twhyΝ;!Hok׮tuDDܽ{bXG5RyzzBV\.ݻwka ݺu?,322СC8;;:ti5k???HRi 4+Z@v`oo @@G!++ b*ǟ8;;!!!R\\ {{{#wwwԯ_GFAAA~7ug͚(DEEa̙ ۅq}ԏ{=A,CP] djP(G~~>KOz`gg;bڴiV}ݻjx!憞={"44jmǒ3W?֨[Ά^Gnn.T* MU͟%jW^7oL5Quߒ?oݺ:)=8l9a -- 0 HKK3` )jl6l0I_"%oʺad%דJ.ldDuؤ|$I <396H#F`߾}X|9ЫW/aCY#''2Vϛ[?)) *Jrl|{en\ 2qqqXr%D"Ś:>scooo@R "߇ZW7?ߌX5[_m??l_dli "b ...D~:w^xJM&`0پ׿ZL̜9 ɯ:j+%<믅ѥK>>>&#Ƿ!;;N€U ,=Q322pyL8QY3OJJ2255O.x[i~~~=z4 rssqYlݺo[?֨~~: qUxxx ?ߴZIp&ߺ|~_+*' 1'HLַ+DD5#HOO|}}^=<<#ddd@ӕcUK.8~8:dcP^=,\шƢEi&X}}}q/^ړ 3f># 6 7FTTz UV!..(((cǠT*{{{$$$ʕ+j(,,V/O}Tg}/t 4< 0j8w-[frPj4j|nnnVc.B+WJIII5]oIo󑐐=cʕFbbb~?CE%|ȑ#ʣ7jGJR|r,_ݳr""k`σ爧'>>>& xPD"<d2z͛7C'Oڸlؿ?/_N///jW'&&ɤlaa!oߎ . 44o\3***D" M(ЧO>|gΜ1l0{aoo___9RmiN:~`@-0fl޼oƘ1cl$D"AÆ 0 8+- >ds_Guڧ=^x>};wtĈV?mqXR%gϞ#>pyEr9;;;deeC硺58ۣq۷o6mWCE+`׮]ШQ#t ۷oWt~۷۶m39c8 DgϞ}?aOYtjOTӎ?$=Z&RPP۷#((/" |v%ڵ hР p H'. {Հ^xXl0 4iTjj*:uU{=j'L$"""""""< """""""< """""""< """""""< """""""< """""""< """""""< """""""< """""""< """""""< """""""< """""""< """""""< """""""< """""""D@$&TvuD"n߾͖CDDDDDDu>&եŸwZ-z=  [=X ;;;H$w bzD"H$D"z.""""""3b1b@, b?Q]S2x` uqxH$[y999&öT'(^/[y<0`K|"r""""""z^kaVhDDDDDDDϋЈxlN D7 """""">X\W yTb3e"[GcĝݯO=91/`%SIN^&f@DDDDDDO {XG7i5P Ț (*!*Km*YDDDDDDA7tk=2dQu'""""""i@DDDDDDDf1xPmܸz\.?z-[|ZRR!oӦMOJJz&배K.E.]jdӦMCv,*VZ!88f޽aaaP*0aBW[nܸQFATB.cHII9eI~+*HtjyΝ;/Daa!T*HRd2j"@*"77֭[!Jlٲ2Y!O1[ 9v}x<KbܹkFcĉɓY\vv6GGG|WGC$`0… =z4.]#GU^moMh44hFŋ[nСCq98::֩"_}>#ܹ[n; @qq1:Ç㑗Wk ~zřMۦMיzaσ:-׮]͛7Os*`0`̘1_>vލ:ԪS*|2T*MwIz;NNNpwwGƍڞߚn:bܹP*pwwGDDBBBO?չ%:už={dz@+'޻w/jű͚5 M4ABB6n\ uիW#IP(  "=ST*yh^^^h֬|M$&& +((|zN\Rx?77IIIJ* IDAT7OH ͛ѧO4lݻ76ol{6oCyyy1\ x饗P(0tRݸm͛7رcXlK-7vNOOǰa opaÆǩS.bR֭͛7MVEFF iLblȐ!|JR̚5 ^3gꫯI&P(޽0t?>Zn u֘7oIp[גrl]]t77n7|G1Is)ÇYfӧd2N>moAРAHRx{{ ]ZL`)3 GܹsS՘8q" ڴiիWW\]YRgΜT*Ç-Z?g}___;////"""}Ł;ߏ~UϨI&ѦMr;>E޽{Xv-\\\<9/v0'5mEH͎d///W_}wŕ+WаaC@DD֯_۷owŮ]0dFֶpBDDD̙3Ann.Ξ=,^۝4ip믗H={d'NĒ%KJONNƈ#p9#..ft 妹{.̙ӧ͛1c&?d… x":v!C +S;v,jVw ӧcKOOZ󅛽lG˖-qq`ɘcܺu qqqk/ ˡ;`ҤIشiN8!`˖-={6ϟt$%%K.?k׮VO1qDx1ydܸqO^*Pc KUewؽ{7ׯѣGC$aX~=ʼyf~Gvv6N>dܼy 2Ic5_I'NJ‰'}(j)HT{ PrqG;d]*Z%K ,, ...BMn]]]xxx`ܹptty/kڼy3 oooԫWcǎEMah۶- /`С8tM\Q;v 6䄀DEE&ȑ#ADޯ\OOO 0P*ٳ'.\BaӲ),,ٳKUڞF3 DFF{YLM6L&w233<ĉB""RDvw^۷۷I^5mpuuEХKdl!11QQ[Ɯ9shw ݻ)))ԩK/ <|&ǢhXbr9r96lDU={!X?A 4 йsgwvl |B0Y^BPb1 RSS ___R7?z̘1:tI'''媔%ֶm[ &&W\Nc;4vsuu5Y>x`zƢؿOX[yUTUڞ/Mޓd}UexP~~~(((;weEDDǽۇ#<<^=y-"JQPP`_jI{aXv-1xWG>_f{!͎nE3ܹݺuAۼ,:ܦo lȇq LV|sNWfH$ܐ> ˇI]t {([|S;ʔsz?~<,YgϞE߾}Tei4m#G7z{juj8T\]<2sp\|e{ͷ~kggΝ;cСU}QVԹ_j4`mG5VW;j$$$gϞB?R]eK^w["m _x1zſGӕL/GzL:<Ί4F{{{Foܸq Bjj*R) ** ʖ%&MI&Aիرc}]c„ &iy5t),,pξXf vesin`0@"ج]٢~K2O!""z^jJq'N,5_Mt8w|}}K=J&޽{dAռys"tժUÇvZb788jpvvFbb"233M}v#G //;v(wB@D"t :pT*4 nܸz+YYYh4駟кuk|6 "|BRARa77R^zj$BT*aoo_UwD ޽FJ/jst۷Kv^{51wHNNFz Y+-ʐH$ٳѪU+;vLXFR \-[@Vȑ#Mz= mR*?L& 0E_Ze8x h2DeڕxE{ܣDDDT9UX,Fnݰa\xx)"""?`ذa 777㈈s?̟?ś%ݱl2 !ߏ _J esqq?$xxxK.Œ%Kпaף...h߾=_pc1cFķ\'ƍ'tr͙3sE``\>}e{8wfΜ 333ΝcڴiEǎJ'ׯadd$LL-/%%NR!""z[?^f L6M,{lbС333~љ3gsMZWZZm۶^cU<(?gA}/>?s5Dϛ7Oe?D"mɒb߿?7noNNN())AZZD"7o( 2KRcf,WTT@,cΝL"""H$beyP|_Q?^T\ qvRD"_Bq9& U }v>lmm1x`\p3b֭Caa\Cxx8D"Znl`gϞŇ~|a>"""W7Yxtqvo2/\j}"022BLL ,Y#>>Bhkk_ ïŋ'''_N6HG*b2dƏMMM& uWb_455_/dƐτxED"@DDDDDDD qA-,uJU(d9^Ey@DDDDDDD 󀈈c 58' Q~M;ݩ 3' UXƸ5:(|*ym㓧iN\=m~4izDDDDDD΃NQq?N7w~վjQC-Lus$Ե'.P;|";T]y@`5:.- q<:41'=a6ծw1% 7CǰlbICzݩqjfC˧bQ, G{[hK^5:\,q]:'"""""biFElZ?~]Pzw3`L@"""""7;dg{^ʶ,}{'/@hND."R n7PnA""""""zmUJZXꙿϨm?+[q=hH$hbdX X6F+(.)ř˷0{u$ #}\$VWٳgq*W\+S(#::HLL$'' v>/vBaggm۶)?E(U_U[r%F֭[#((}R:RTW5TME^޴i0j(V[&TwUJZQTT^DTT`Ϟ=ڵRqPxPwEa*[*zjcΜ9066300@zz: sNgφ:n޼֭[C,CSS:::Bxiiivm`ܹV;q0o(RUyMZWU^)UQ5]?[naŊ*qW\Wͪ4mbϟGII ǃWfu*7 ͛7ₜxxxҥKh-YCƍ_bǎ2HPP6nȓ9Qc o'mmm|ܸq^^^U7qDwm"11<}TCpp0RSSQᾕ׿8;;߿/|M@$ᣏ>ȑ# ֭[H$KѢEzBzzR*KkU㧨|Gppp1>}QUmKUijyQ6RU`zzzHIID"Q*Tq6tͱ/&MJAUr͛7ͅ~`/bĈ8pҏ!l7nIq[&''QQQŋ 5T,T}SPPP?N8n8\x2e F TZm~MDummm^AAp]U[UU֪O̾.ˋiPRCuBBBFyT|YmC|}}z?;ʚ={6p)ҥKh֬YxbmxO"""vK.Ӆlmm"UZs;wn͛7q 0n“'OA̙3Ѐ5. qy)}vBaa!v;;;333ѣG#Im _M6Sֵ_u奦*eʋ驨R3]͛5kʕ+J*^u(999pppeoN"''M4ANNBBBp%(..瑚*sXBnѣGŋD׮]Q\\\6/^Yfg!V~'9s&>3|x$ϟׯkfU(kKM|7eʋYUyQ .011Y0~xaDEyJ}ʵ2Xx.!C`ϯwܹ3,,,0j(hԨ`РAh ċ/XXt)>̙̉39Reee(--EII0^ ͫO"+((@߾}ѱcG o\?Ɯ9spiDEEUF""IBB$ b1><iX3;IDƮ]PZZZ'#NY|9R)vŎ""ƑDDDDDDD!< """"""W;H!vձ+WbʕL""={SXX\~///hjj*999۷Q\\ ͚5Dtt4޽ 555XYY FFFu~Ax]߁pĉJСzU'U?~5۷SSSi&U*ya -߯:eDD !<0U2rHXYYA*ѣGظq#Iw5C IDATڵkվԄ?\… HOOlDFF8}4oߎ/3{G=5559r۽{70p@СCؽ{7>: |PפR)n݊={*Q^ѽ{w޽{QRR~UԩS|7 ˷"7;H❃ ݺu GFFJKK" :͚5ӧO[nlmm}}H$)lllp}899) ?77-B`` 4i+V`ҤIQ={@KK ݺu~(--.\SNþ}PRR={M6+,,mVJvg^f֬Yuuu!}sss',{Ç;hѢtF)ܹsӧO022BannTw H333ׯx1tuuѮ];{rrES۷Osnjj=ziӦBGrrr/V}Wg^YY?~ ooohiiZj8B" )) AAAt+V@~ ~~>0l0H$APWLxyyACCK.ɅR7Յ_~t"UL}ӴiS]nnnxfM(*eo/))Q*]&W&j[+JxܻwEEE>>cӧ1bpM|+:?WP/;荳gaȑѿN]tt44440~xstt4 T'Wlmmqʕ+hѢE7aaaPWWLj#hBX.33?~<.]Xq;eg<'''|w GEEA"`ܸqJؽ{7'Y޹s'Zj!CΝÕ+WQ9rz"::#GT*| 4k DӦM'\رCzz:֭[aȊwϞ=PWWرcl߾'O.N8.]5e. :H$իW~<{ fffݻ\'0ydFDJJ *툨i2k֬bG6|exxx Ÿ OOOпguLJ2GmD?H$8{,9R0N:.]_~޽{-՟uJ(Jeүwu韒aÆ!>>[nŰað{nܼy[U|Ww~[}_z/""vPU^Zsnn.=z@ZZ;Pi[ܹWWWwuu]vUj{fff8s ʐ HTLBcQQQ(++9#޽ ???!~ڵCTTӧOƍ T2ӽ{w1߲eK$%%hNNNv455s=h$L4 bXh4nrݻomڴܹs_ .Ç;vl˗q "EEEDPSSƍ!1x`@QQ1vXHR>|۶m㕾0jd>|0{WbjjI&~;ܥ8<"""0yd\U~utuuѷo_kCRR>:ߪʧLJ̝;w0h 3R\pASP5Lն.aeezzzBC6ڞ^vuq%"br RaDeOGC 4o\XX|q,TΈFzz:b1O&M ++ ? D"222#tw wYcrߩ A\\/_H+++tUpejjj5XW^Bܹs ˄}q_L wdZLL ЦM666Bz :Sdӽxzz w===qdggˍhPe7R;ҥKXv-FT2gwwwݻYYY066~-_ESCUouQ+sHMMMsuguW/,Tv\6]S.οDD<ʋ'{Yx>ÇP"ȭSZZZEلh[n݁@-pb*="@"QFHIIpUVhֆUU0t #sX,,,&Ⱦ{.Ν;ѣG v\Uu QFjj*={-[}ӧOcĈ8}4>J'b400H$BVV"Hgve5k/RWWRgffu~ff&N<>}UPy8x ]&<=>ߪmX_WRR"8M+~k[?&ڞ^vԠLLL<ߚ5k]]]̙3GЬY3BKK HHHHLLTyft^NfW&|777B"YOsssX,F\\\nhh\ܽ{KtLMMӧO#??={Dqq16oތׯQF]"Æ #k@<{ )))x>|;;;YCSS8tz}% |L.] OO j\|9222777˃H$a.HвeK#4nӧk.mY\:E*+ yBDD-ijp~#}vt??F>}WTRD"H*;{,tR|(((ǏUUoC+((@nga͛oT|"aaa(2a^2< CBc"<< RՁQF8p:tJퟍ RSSqTܱcPVVhiiа;ʆǷf͂ vaڵo\|$VqD3g"22/^ܹscÆ (**[XbBCC?bŊ};w0uT$''c޼y~m*l;)) ?BCCw">>HJJH$[ѣG5455aii ???$&&-7rHD"8;;ӧ:t(ammp%D" 년08;; (wkCMM "[lAVVҥK6m@GG:tKeQZZ uCF鉕+Wٳg*7СCX|\ed÷SSSѻwoYf+mw022Bqqeʕ~Y$aM׳gJqD4i@,*<7͡www_B~|"74>L:4кukhkkI&9~8z %:u8qBnم ZZZDֆ>D"JJJoMOɓ'>"111ptt5.^ٳgeSi=MDDD -( YFIj[2oݺcccL4 Xl;nݺ222b xzzbذaÇ#,, &MVll,ƌUVah߾= kעGrb\cرc5Ǵi*p9rzzz8::SNXlȋ""#fjj hjjvvv{{bb"455ѫW/@GGސH$HHH ?DF`jj tUh@- hkk wcoo:`Gǎaoo/gϞI&8q uVV={BwA֭ 6zmB*XX~ِJJhӦy g@^'ӧOcǎEj{ڴi˗/Ǹ|2V^] q N֭tuu DGG5 ###a֬Y:l^7n͛333! |֭[',עE ,\m۶&}]˥I}i:Wo-|||QBYYH$HMMEZZSSSʍ|2ѿ޽;BCCaaaQiSXX3fTsŸq`ff]v[I.Xprr N WWW*ݏ~ѣUvNQjp?ԩS@hhheuuu>kjj]@fff@H}}}dffʭk``P^*\֤0rH?7oĒ%K޾CɭS~sNNN01e/S@}Ebb"℉d ~~~o>vڅb(;v瑘-[B,ͭV0 F!##C|MXXXȕ555XXXƍ1uMXYYAMM?822ѣGWXW[[ҲWl:+oXt)f̘?NNNppptD___w???,Y;w7ԛ&j>zH𬬬FUGCtrUƳgp #^|͗1 zaa!>|W(++;2 ſ+_ <޷o_̞=8u#H$TX|cyj Yfرc._$$$ !!*%A6J#)5Q\:R*KUCGGG 0vX={VfC_Mҹ|3XnΝ Hm"00Fm۶H$1<<<`u][Hv8B[ZeV={ƍ022199FbbJ.D011 bqjXoNXa|##GM!1uT8qٸq0BCMzgNe~k2Uxȕ?xx_]PMYǏG||<>}'OW^3f /_^aYH|;FHR!##v!ÑJruF]dWQȃz$ʬGڵkJrC_>}Z'%%!<<RJMXYC|Abb"JJJ$̙3FFFgeb"##QQQ ݻ' իlق} _㴩I<`nnO?hҤpQ 4mHKKu&,_~߿_d&&&O[M IDAT[[ٳG.g }v<{ W^ɓ&ή.w]ŷ\/{hǎ8tƎ cNhڴ)?bcc uDxB&==>vݒU:9={0rHaݺuӧOU}/AKK VVV<Dy@֭[GAA Ʊl@U޶+W(NesssX,FAAOOOa7b*A'N)tuu'-#`ĉ8}4D"J*gϞȑ#0'L&kՔ&:uꄨZ#++ ?#|(ZЗex)L"77+WG};v 33X`.]d/>_Wi:Wg̘1qI塠vիWѹsg7oB"`ڵXr%/%"HÇ˽RQ"VR9_*|||pm_8r> >"wEtt4rsseee:thpÑG!""BrUHtYx0zh\~sܹsq-=M4Q9\U޶ {ayG899aڵhѢ4443fԩS?~}/++CNTI^xhiiҥK:u*Zn mmm]vX|9~g;vX>|7oެUiժ{{{ȑ#ػw/ZlYaݻ~'ȑ#޽{~*D*^V . fffXhVZm߾hڴ)\\\={ѣR/i:W端5 055O?EaܸqrƍQ\\ ///\zIOO/^*Q\uw58qx#""zDgΜI~T#'9*\u7xl,o}MbDEEUV4h`jj $$$\\\ rJnjJKKeM԰N:ݻ#??[la yUG(3@Yo={O?Evv64i^za̙~VXX bx"3Tyf̜9׮]5Ѐ BCC+OG* ~)&O MMM& Qr;y@DDDDDD!>@DDDDDDD vB< """""""$L\uͺ~#8򀈈b)"""""""Rsԡle$Pv1«"116mR̠AЮ]7>-qA*ÇҥKHHH=.\qƽ񭩴4tRǎR빺m۶X~}_XXׯDž ^r29%%SLQ\\ OOO,Z-ZxÇcÆ goooDGGrlVWjS_5Dx/T*F/@#""vۭM6hӦyժU(++C`` %믿 1t76RDJ ǏO>DXX]* Э[7|gXx1yfxyy}Uׯ:Nz-%ሊ!y@D+W5zchccԗ8p 5j(e9,, 5k]PPbccvZ;[tM<<<ooo 2{eQqzkܾ}+V@hh(~GXo߮t٤$O ERRR/\҂H$6!PRR(--;;;hii!!!(,, kh۶mmb?&  rJ\~],dcccw8|qy  }}}4k ¸T]H$BLL amm/b000@@@@0544l2`۶m ""v)###+V@f0eaaaxQ\<ʕ+Նi&|W_;w/{A"y>gڴiXf """-[`qLLL J!JT*@vz-Zի|2Э[ LL6 AAAxBBB0ydT/aaah޼9<==W6[l 0sLۇO>)[)5-Wdff~ CcܸqvUڵk޽;ZjDؽ{]tt4 0dȐlWjZ_U!!!ܹ3tuu1n8a׮]5kƍy`ff===>uT*W ,5`bbSJ_~8z0D dff@q+ ˻b 3EPVV;wD=z4FNNNƍhڴ)444tuuammde-,,`jj*Q#4w 0bĈ )_www$''cƌ|2JKK000gτ7oބ\PSSnܸR:[YYzAy(..Vb;캺}} TU322TGuR\;ccc8Ѻukt5O>Դ311Qѣ7o jjZؼyJR8?*'Ƴgj;PEU]mxwиqcYFn .3ϯ"))IaHƌ*irJ۷;w̘1?;wVl۶Mnlʅa]t,0Ua:7LQxT.=.Tא!C%%%TiAMWW*\UyёECVHE 6BoReee]*K?)=z$<_z[ػ󸨫 6 0lJȢ.\3PS#2[KV𛤑7kݛ !"(,gfAA_ǃ̙s|s>W^ {]Sؿɺ/ݻwq! >SNʕ+~N3-i\/,g,--7_CMLL{>]d2ĉQ]] ޽?~|~d2 V_6UwXXX1x@kkkܽ{W(Lw\ZR)jkkfQн{` +**~%H$ @qq1T["UK. ï ݪUy|m /ϟ???ٳGjJ qrrR/**z...022jvx:˹rСjjjGGGO1`ǞiR:ϧ %%)))2d|n )%i }?m544*QW.M@Zc„ Vtu<+DDD <UsCM'_uBƧMϞ=QSS;v555ضmЫW/ڬ }v) =DDbb"^^^pmܾ}_~%Ξ= ضm'$$'֮]۷~a7ÇGQQ֬YZ)̼=~xbѢE(//Guu5֭[]Yo|\N:~!:* 55:0a矣 eeeBUU—{M(**_TWW#''fzMtﳜ/g\r"?йsgbDDD<|h.o޼ TVVsEMM yĉ~M* 6mBqq1JKK&hԴӅ꟦ (((sqq1>#HRZKS}{."""PTTJ$$$` KD^=(-- z< zb988 <<.]Bll,bcc <<JYmUv\__8L2E>z_~A}}=\\\н{wa֭;w.  7|yA"`ѢEXt҄iM_#&&bXb}___ddd 33nnnH$Ftt4MSnٲEEE>M~g͚4i`gg:AFFvwwwc߾}D=_>33;v쐿9#>>K,D" uԴiӰw^\rE9=ׯG}}=^|E梲鰱i|hJv)ٳ8x i߱c233YΝ;(..Vp~H$EHHWO̙31{lH$"77;wT9ri/YYY8}4x$&&W^izu/xwEpQٓli3<jT4dtkN?Y[͛|2 駟~9o^~eTVVbݬL&!(("022bhC5>stvAgGXXΞ=rYه5sLܸqIII0uuu1b }vرcXy@wCCC$$$(؈$޽{?Qyq2220eVG@$''Cő#GX(044Dzz:|||0n8XXX!!!r#^iii駟{>|AAA90DDDu ֭Cjj*,--p̰h"$''l=[z5,,,k#dkkl#<<!333,XrssuZYI1|pXYY?Grr2=Ad21zhݻWGtTc OwTWk؂8NDDDDDc mP?^ܟu HDDDDDD:c@C3gw/  Ü r$""""""X< `p4Uco;#yለpD""""""v&Q{Xr%0w\,];wT*}d0}ttUis=1cƴ|w Ɖ'"66={*.G޽{z;ft5jM믿_~033Cǎ1qć:d2"..,<Օ+W///̞=QQQ9r$ك ||| ؈SN#F@YYY9[naHMMŪUU 00>>>8s _P*or;cw۷q,X@{m Xj~W m1x@۷nnn2db1:t___}?~J-}0sL̛7HJJ>TUU.\xڰaf͚8TTTի}:n޼H̜9YYYz\zhllɓ`իW!Id2֮]+O> ,@YY:___*4ŋ1tPt 8<:w@h]~lԩSصkl٢zoq1x@OLQ'O1777?~\)7`jj oooq%ACtakkѣGCxgh899)DbDGG666Xp!LLLaqaa!bbb`kk 믣[lo@MMCkkkqAK-?>annӧ [n}ף"׮];;;4ݻꊐM>jO>:K l2H$#>> AmM={X` T`dgg+L """"+AP>i$J}}}> C\Lt*R)6oތZ\v iiiJϥ_rNNN 200A IDAT._ӱϝ;ڵ+JJJ;ju\ooo)))m)))8p u:k׮j999Na|E[M#2bX2ӧ0|?^>ׇN|2\\\`ll,fnnggg+B4GryYZZ޽{Z_9;;޽{: """b{0 ͍P022Akݻ7BCCajjg};vի566,At,iFHOOG߾}u:ĉ PUVV$NtJ[:u*VX H ??_&^=L$''+^z<4!""""ҜE@홱a.\1sLH$f 044|d~R!!!ذa҄wRw'X7Nǝ8q">ddd@,Ǐ~eA[aLLLtᅬp1uTcڴiZzɓ'RYOj3C:tUUUAjj*rssƏR,Z娮ƺuеkW\R)MP\\R-Zjs=1swwǤIpy"::[n?#G988`(,,IJe^~uYmAo0oiӦa޽rJGQ___|Dzz:lllǬY5x{Z̄$ PH$"$$D}}Sm.^weIDDDѣ')CQ٪g+OɫM͛|e2O?&Q9s&nܸޗL&CPPD"addԮGcc# kkk|޽;q5OOWuuu1b }v"=1;ȎőDmLahh AлwvR"-- ?#>SW$''Cő#G044Dzz:|||0n8XXX!!!z/FPP""""zZ1x@t ֭Cjj*,--taѢEHNNVŵ>|8#99~~~z۷-vw=̰`'}(>L&Cxx8F{H-C|l H-H-H-H-H-H-1g̙3Xp!6n܈;w<~= Y/mQ]> xyyCСdvbDDDD =NNNXx1.\ɓ'Ν;Xb*++u둙)gϞvdgg#,, (((1|̜9~B^zA&)M8_aa! "77xPTT$O'PZZX$$$4{ܣG"((t]_~o~ׇӖ-[7Z}hc޼y­[PZZO>!""""+[oA*b׮]:?b[lQٳ|"ݺubcƌnoر#SNܹ3VX ͘18z(RRR=ŋѣG,X#G蜟BL4 C AXX4{E׮]obot={""""b322Bnݐ'&J%K`޼yXd 222 OSUU%ȑ#u9s?+իHHH@tt47nQZZSNa׮]زe ŋ:u 7o?[um̛7ӧO͛73g"++KO?aJg'MիW]&-Z<;wбcGeҥضmVZ\(--۷M>QRR 6Xv-S> 1{l̙3%%%ɓFdDGGcΝر#Ǝ An:$&&?dgIDDD=S"`ԩD"燋/'O/2aaa444ĉJ齽affSSSx{{kt {A,c}:uևn1h TWWO?UxԩSIٳg+uW[[ Hz022½{t `pvv)zx7o}]+- s'ODll,b1b1*Gth1h FΝ/ ///H$̙37o$"""zLD,j\YE"n耿~uر# یaeeRm3?31fUjkjjjvvv ---ʕ+ܹP4+lsrrRڟkb۶mXx1݋c7n,,,i֮]ECC>`VCꇮk|W8s d2|믿,[Lό;cǎ}<8pƍ7|@d2ܹ BJJ  >訰ׯ_W֩S'M""""br?w^XXM6@>foZ"PTT9s(⢷<3QQQDӧ1m4;vLat{5133ӪlqFL83gď?(k0h ;<:t耆ի011ѩ>\!H4}toXzV۷oGڨ 7lv~xyW?X߾"޽p~zH$DEEoT>bMf̘Ѫ󃇇F/dgg+?~xt DDD|u555022H:M<..#Ff466pvvVz|C"(,8QRR;wpssSuuttTؙ9s&~ק\+mܹ3vޭ:#=zF]CC.]]_[_u,\*_Ae&W~="88X8 c@ F˗ѣG 2DaF&*'lllAPy O&a ={ĕ+W-Nv-)'''*m/,,xIKR) t J(..ƺu J7k"vvv8wQ]]}S#[nЀJ)UUUa׮]A}}=N88>|XtYm%&&&o۷o/qY=_PP>'Lw"""EEEDBBvލVv -j044ñzj:u s6n܈7wQӧA>UW[naƌqnܸ??q?clٲWFyy9w!##~V[رcTܽ{w͛i&Ty&222PYYR̝;555*1x@B̙3sʕ+ajj T*ŋ_&MB`` V'@hh(v؁> qqq8x}#//Ǝ;0|pڂ&~ݻwG^^n݊s"<<ZYYY8}4x$&&j4;Xd|$srrȑ#[:w={ 77D^^'''yG*fϞ-I߾}ԩݑ7ġ6ZZmA||'׿>vvvٳtn2 QQQpppΞ=ˋ"Q; =z􉚾:*[r{ O^m6ƚ5kQF@aaa8{,N< """ңcǎ=cq999߿?DDDDDm W[ 6 yyyHMMea1 Q`mm Tʂx)|lbbbbbbb)v,[ CLL ֬Y?S}ꫯ\EE,Yŋ/ ..N}w Ɖ'>{9 DH=etpuuE.]pu?닰0mJwY+,, {Q{GK%,,L9]_.I"`Μ9Opk?Rccc$uuumieR[[XS[nA۷0j(|J-[ذa車 `ҥJd2"..lD &̟?b1СC\R)d2Y/Sd2d2466ԩSppp#PVVfs֭,--}yӵhøy|?[ne'֗k:t( 㚪Gff={PYY.Q~TZJ2ܽ{W&VBDDϟ\ro6x lڴI!EBBB$VZ_/B~FYgΜAnHDW^yÆ H$zdaeeHDFF)_A船s碤999t3SnnnT9oժUٳ'LMMaooW_};v쐿4S$$$ҥK C2U=77nE#((APP8H l=QF8p D;mzڵk9r$ѥKmRӤiS]~-_NNA@VV<==3g`ѢEɓ·6ES-֪-mۥ&KCtÕ5wYٟjI4mڴM9J45JriEr渺7u֯_={`ʕ022Rxoڵ>>>OOOӧO#** `ڵD޽[i"_}jjjss~-"H!C _5;羪m6 4?yzŋU}$ >#̚5 Xr%ܹ3gļy$?`nn.?^akkp&LP: PUUj\pA2iz,pE :ݺuCnn.Ο?Ν;#00PTؼys׋yaHIIAEEc 钒`(++áC0ǃD"aÆŋtWgĈ7??/<<ףSB,ש^>-Oj>,RSSeWi_ZmoxH IDATԦfff*.] [l#G}=+;;[i$.&b<$ BBB0zhcΝo*Նҳj #4umtQaH1&}6 'MYmʿjܹs affdffcǎ˗/ e쌼<};cǎ}duBHSSSkاO1~xxyyu|;;;:u=+WI ˗/k}˗/smj%%%ZOzӦ}t _6oI4͇FФ}h5GK~ ¡CM״^>Ojj̘1aoo1c|}Y֒k׮-LMM!d2jjj DDD ""wΝ;b=3ݻt҅7D PKA@nеkW$&&b۶m:2 EEE*rqqiq]={RC}}=ollT 248pc Oƴip1(BSk֬All,A@޽1eL4Ios*N466j(ڜ.iۮT&Ozw4ǃ@q/&K,̩ jZ]CږATT~w+-GU3@* --}2A1c 998|Cv5 [ /ݻwGuu5. ''' TQܾ=Fe`+Vܹso344D^1~gi񰳳Cii>#i}ݻ8tSbʕ:kR胹ʉ*++F蓦OzwЦ>6C}6=ֺ1f߿_zZ L_y6Mggg,\Piׯ_}U111iss1x@mFse+WıcPUU:>}Tx~{(++É'P__+W`*ss.^:TVV"-- 2 {{쉪*ڵ 555lj'0DgϞEzz:*++QWW#G*'֭*++qq444R&bcc؈Hǣ-Byy9n:tU/Lrxyy~۷qm|8{,`۶m/'SNŇ~C 555HMMEnn.=|pa͚5EQQ*0a矣 eeeBUUU3Z/Q]]̚5տM8={6JJJPRRb)M6@mW}7mۇh>.o!ҳ+}O-{K{(:jݽ{Wݻw(044D~rJ?~(//ƍi&<֓6=Xcʔ) BNNbccpB߿o $O1c ++ ؽ{7!9zh -- XlJJJ0m4F888 <<yyyEtt4v؁Çc &OB,[ 1118p^{5@hh(v؁> qqq8xR:}舨($&&@ff& Hh%<~ݻwG^^n݊s"<<\5k~bbb{OiAAAX OOOXBAFFvwwwc߾}D=_:33;v쐿8q<%K@"`cD"ǎ;tj/ҴiZ]~ڶ}gMKXX|;)}bڶ}Ѵ}]z ֭Cjj*h]][?}ZMMqߴiӰw^x TWW#))H |3g`zÇ`QFmkklȤQ$DDDX|9q̙~N2 3gCPDZc DDDDDDD[ """"""6"""""""R"""""""R"""""""R"""""""R"""""""R"""""""RK"GԩSذa4ƍC߾}u>w=UvrA1Dԫsbf zNLLT*Ŕ)S<^R_'SB>WWmfDDDDDD =f'sB*aL`?D47m3#"""""&IRl߾'Nݻw!ѫW/ 6 "bơCPVVD"_| ȑ#ؿ?JKKѡC]vU:si&d2;>>>j1'y^Xx]Ga\y ۫ &z贿3yߍqJ=<:É/۵+1x@O,8qo6qM^uuu ;u[o[nBrr2z___y_owcǰzjIF… ބOkdc8atr`qf|=.69Ʈw7R0!?/>LlĴ$̀%+=4@mD"ѣѩS'D"8;;/^THWTT333t"VVV; ._ kkk"666>|8)fff055utƐal$Bg{k7nf4R iࣷQlKs;/'YH/8ڤ~)WVS닜?[[[t:u¡C}vJ߯m :gWP|V0ʷv0޼ŊDDDDDD Г6mBAAR|Bz899a͚5fffpqqAppBǏǞ={ TWQ-{O`u> C /Q)Jqz1}}{~]Yzr_QQQ011ĉ42 ?^uL:}R%%%8s 6mT<>T*8tF)^_}~ZV"""""j5ڜ[8ȂL&CCC괾vppa˗/+9wbbbsεN30@gkCpE}8I:N%edLDDDDDy@mRDùs8vyyyppp%L 7666x$/022B>}Ak-h*fe E[ox<AGa)^r 7Eo{0n@bo2"GcPDDDDD=ŋ>>>4i?dxxxॗ^š5k+++ge2.\< 0x``ƍ(++ GHH9qyd27$mg7Ja pw20Agb;XNy/hk ūAYH/G>Qc*~œ?k֬ٳVMd;w.xVY5q;v#;}j011rx{{*_+zq1i$cbb0l0ϲ32 Ѹpq8|0˗/cժUCbb&J²e+++aɒ%P*:=w&MWWWHRDDD{^4yd8o޼H$puuŔ)SpQqz-,C.Robz𶞨(4 B-[Ho7!FzaooqFH8;; tIIIسg!J /Qxq{bDGGC*ׯ7x|KH?8q"acc#F 55ՠǥ Jm# ^mm-akkai|3@1k&f1= ٿ A"ǡ(Ʒ _cO]g֯y{\3N W|C|Z>ǎ۷5544ѣZ` D~~>qˑŋ K,oÇ _###1tP䠢+} q\-ZwyX|9O?^MM .]9s栢z@1+V;~b#n|o׮]X`V^zܼycƌ|2#+KW/~g(dg4Fb׌#1 xP-899u_|wEffCATj-ڵ ! 6@Tk.m<s΅-F1ct_fϞ [[[o i]+|mܸƍT*Ŝ9sᡵ| Xf `ccD;;vvֆk'5f̘OOOT*b z;tPg>A9.obOyDo/Fdd$an*oW8gȗqy5|Cɓ8}t FhhքiϮ^BT* گ8?CSf͚8H$ZWJg+ѽU✞k>1b b ARV]b[o1 @QQf%pEGs[õku뒉 <<<:| K ~lٲm]+|xxxj _|k Cgff&n봹MPq;&vĞGrʔ)Pؿ?J%i'mbcO8'%g4F}5F; &AӦM?O(JXtVJ+Wt܄ۥKZ_G*G{W\f#33˗/J3{lbǎ裏q^{ j( 5V"''JRseqf"޽{;?L~ۿE6uԞĎ:^655axЀ'N@}}=NaaaZ=SN  & 6,~M禦&deeugx7;wٳ0afϞ/OCzm|'bM(ŮPʕ+9r$Fi-|NG/^[bǎ^$v;[O,aabM;'->q2 Vy{[HyŞG>Vŋ1Zjddd 00Ƨ8[ }xdh֯M???9HOOѣǧ _n ??111ZOC2JF9:ȡ. IDATرc5u61 +0l0>uuuxP[[Z,_?spYf-Gll,nܸT477 ^;ŷΝ;HJJBee%e8qWUQQ,444@PwEss3fΜi! ibCX+v3~ƘGٞ;$$$h AAAغuo1+qQozx$o{D8wOM̘1_||---e&&&ԔUTTtرclرI$}Vu3cqqq1Ʈ]3g0eǏgR9sZ~z^~ev7l|||D"a111 :M>`٭[t͛dž $ J,<<_?>>}z0իٽRo|-!O>a bΎ%%% N'$b?kkkcVVV[СC5ST:>S988cDz'Nl͍-\˼ŋ5?:u 6˷6mb>>>ښM4ݼySg<>}: ێ Bɓ'YTTsqqa,44m۶͠z?OΜXxx8fc999no?⫫Ƨ *x q?c#l|jj5oq,77(Ʒ _j(8U '!oƚ߄/tBEOksΝci1d)?|+VH~m!--As/R0ߏɓ'C.1 ޽[ T^B1?#IP@T"33_~%-[FA!BH SSSlٲJRJBZZ T^BHC4a޽{1l0 !B;w"##vvvgX[[cժUػw7T^BH@-B!B!!mB!B!}-B!B!D/Z< B!B^xM F{7|'xpppi("+))/|||PRRkaРAҞn%$$hqd;/Q{_> q~qҘ_3鞙3gj<Awy/ jjjp5\#2T*c`Q9vUTM,Əg_<+1?z#ư}vM8q"Əy :~o:}4j5abb+++8::R`Db*CRoBѕ"K/>Igyΐdƅ 8888[SSS^^yiDFFNNN?;gC*^@ccb D"+LGj Rɓ'cذa/W*..Ftt4R)|||~>WDvʷ |G|q8|0˗/cժUCbb&J²e+++aɒ%P* Jmی66| g1ە!o.568w&MWWWHRDDDO>Aƨm|/|Dž/BX">+!oEo-ܹs ?~<@YY_۷oCP@VC"P]]۷o#,,w9d2&Mbb":mWyҥ3g***:,/_|)v7_bHH8vsNlݺ7n,]۷oGzz:둖m۶aѢEcѢExwP]]˗#11?QI1!ds|] |?"O# .]Byy9/_.h|4Wl|bz,v:u5_CqN{+!q׏b2K,ѣ!J1w\!##Ck355 LWWWlذJҠNk."99NNNprr+++ڵK'1w\bȑ3f ~g߉'Xdrr2\#FhҽhmmŁ4eeelܸƍT*Ŝ9sၬ,+X[[c͚5pss 1vXر:*߼<8;;矇%dxxxʫ}a@.իhiiB@YYr9 44hYTbŊ:=ti_U;uC&wAHH >G\\־kkkڵkO3f̀'Ӎ;1!dz_ܹfffHII;OOχ+q:.|߸mE8K_[i 777UW^BT* y5xxx+zNo١h7bbŊ˃Jh Fhh։Kzz:"""ﯕCNNN֊'LLvff&kOSLZT*Q\\LHsДdx"ꬼ /G0`qZyҬYwo:mo{Bƍ{ իW٭+ W`iu\:u5_7|·1WB7.}=~b?oe" ZJ•+Wt^[#˵NRTZvi.}ݫ.͞=7nDVVx a[=m4ͪ~[[233vkkkQ'ԄÇcɐH$x۷0r!<<Ɂ\.\ yow'f?ҥK5j5y])Gw cϽ[|z "F9y! oƥO1[irBajjaaaZ$uޤW3bƝ;wpYL0g_|snjjBVVN8zL:հI'ƚb`AV 4h(**•+W0rH5 999(**AOM܍N:c#>N ( M~ .4^R{_KNjjcƮ_!qs,q㟡K_ ZO2ęo\z3~=}0F=ŃֆK|||:L\oc(//퉽!!!Xb 'Oj#GDzz:1vXe͆ĥTgcbboRy{Ewin[ǨQpEn=@&3f?LKK u;K}}=V;2LqPUUJCJQbkH\d{3|Ɨ<34.]zco7$|ㇱ[_ -eůYYYhhh@UU.\Z^zIkNP`ժUCSSv܉A2:{Emm-/_FN޿ٳgc8{,܌ c:M ۷OiBr$%% زe N8aWTCBB%Rfff ֭[ Z<(,,įp9EEE_u PYY;v@TR{cub#>0x`۷555u됛 8rYEEfR(xw܌3glҥKIwNh95>V;헱qRSS܌7xsϡ~) ު_q{,qqƗ<$d~ŷ3߸vzaW{ҁsαٔ˭[ʕ+YHHd...lĉI{16vX$ b>S:iW^-bwرc쩧b;8qB'ae]ccC aIRuRfbb٭[t~?}tСCӵ>;y$b...ښm۶i1cxAVVV2WWWV\\FVoqrssůYYY1oooݑ={R/ҝ>}pvv"##?h9sV^QQQovZVVXHR`۶m:iWl|^bDGGC*ׯI`XYY8H$ڂ8 G!wĉpww FTt|ڟи_ggg|7=27!MqB!Q7ʕ+Q[[g"$$111Z ?~<Ik.,XWF}}=n޼1c>@YY~"FFFbСAEE͛W^yE_?222P(PSS}[o|bqB!ќ8q|Þ+W`ĈZgSSS|ǐdpuuņ T*&;wRRR;;;Ӡ DJJ KKK#..YYYn;w.lmm1rH3?V}"99NNNprr+++ڵKp~|mkkڵkO3f̀'ӍV^cٸq#ƍT9sC?<,--H$''h5֬Y777 11cǎŎ;?W899111Fު7B!B}ƈ#PXX+V //* ի8p ,,,4IRxyyP+Wcظq#OGֹ\Rʕ+:Z'*J.]QF\ڵk .G_Ϸ3{Ł3q![Ojۓ~SSɓ'C"onQy-=Į߾B! 97;wٳ0afϞ/BaaaZvtlvԩSBo…kaE_ !#fp߿Ob7jb`AV 4x|ꣳ577FW_/DžB! L:ϪPYYߘ"$$+VapI|||.nwuoV=<t}|e2](//'x{[wdTy bNBJ[3Ģ>|}}QZZ~cbbqx~|Bo֛!B-qRSS܌9y={6ϟgϢ@~~>FI7uT( Z uuuhjjΝ;1h oʞ{9TVVO?ESS`'ݝo>Ԡ֭Cnn.ȑ#[|'LJرJqǣjkkQ[[˗ѠA&fUTT ++ P(xw܌3g }n133CPPn*x|#>>wARR*++Ѐ-[ĉF?zm YobB!x@t76mҥK!ɰj*YFe ,pqq `Æ ;w&]HH2 HNN믿I7fk IDATlذ~!d2V\իW׿ob2d q!5k,Y"odd$>-qF7tPdee?{|x4~Gj~6mz;+/_777 :8s ,=z~O?>0ydkڊիW^Õ+Wmo} :ƥK0l0aÆ غu+? 3!qSBGOmAHKoB!w9֟ mgDMY ŋ}Yߏɓ'C.8͛pB?H !<N?ǎȑ#)(r;TtxYa9w,ژrvJ~{BNUVqH9W+Sτ`cO[sl06&p(ohū1 |o dW1V>5nRs[b ?7jPڀ1^x!&4ehgחꭳ5j?+++L6ByDѕ"ꫯpIܼocj[T Z'+3,w[Ow9ˆ܇zccNH}ޏw:X9w.5'=06Ba& |}t_^P׳n@̀-h}ґeh'x.\>PJ(U Vf&03Ѻqpy{K7}lݴ_UyYNro:,*=| jmEad5ʐSՌ*:ZaH7$ oT5a5V>5Ozh/ŷS1M4q@(Ǫ3x![&n,G^9VBH718U+P sLKSNWjknwσ}7_!@ȸ!V\ W]ֈߗ|E8xzbNZO:!kiScbcleP*RhBc!2 Jp/k?~F{țp.?~Qȼ5RŚ+5nSy#>3s;g};Pp05oOMHc޽L?Bb/O=:?iQabl}_71 A&1[_7]V,:^wFcw?Y!C Ho=g|P؊mn!fO!μ3̐A_XK rS޶ەWG/nCUc+@L ro1sobV6u)8!f9_WO~ op}텺J4'|Դ rWp_HM5x5Z`o+Q_"il%vC7r{1irĥaV ;CX>>\ɡ=Es  2,2^AƟ0YKUMxEhlUcC' CNZ W5b@[u7_b|;߂]!*j,9Yq p%q(`ZvAR^_c0gl{f&33kmx[/Iq-ǚ8r6NwRKӢV52uhnS0YMH} |x@! mAJgΜ>?]+8Bjn9#\acC]h mj`m f8u4'nށ%b9~H3W^D<&NVfp2EL}Eb nYbҔ"}l| 6c"bکU%1Rs792·U^ Mfܤ氱0Ab cb}W`ʫ S2Zm􂗭;YBfmwF#BECv*t{0 Z`T:Z"eZҔCqAZP'ܭxeμpH w9,+03Ъf2?˅1rhiS?W6ap)ȡT5<|2/A}`|sUt +p -C܇a+Cڟ?MH:ԩShkk !}GH7$tm nU֭3|wĮ7!~^^^hiiAii)|||hH!x@hhwL&3{)2&CaG-|t wka2g#wͺtMj w`kF bxoɘGrA6`*5|܄W:Tj#픏+4'Ru3^ϺMZtj|:,8_u(4_Xq1_ኢY!"~Kv:C=t6`Rf/},LЦf07ps0筿=iiCAM˽n_y.| '=m7n㣧`"֜.' ŃvvޜZ,9Y_ :?v>iB"TzorP(D&ljF.xc TE bhU1>ܰ.iө"N~h!54=QO00eImjpoLI7vo;k(w vY70k3F{i<ta'/Aꕎb߾W!13n3 ~$f\UpzUv`:C=v-/*WlQݤ{eRUS֥b]jy>Z(y#Tиb ?5\52k3T6j-R*,[sqGfhj؀Bȣy %%%mS&1CCZtĖ6t>08H0EźOgN/ˆ87u9Gs<ҩRFc(ǧ||j='.rt%`r:N] g3mj;^:/.ko;:#~Ut =WYmB:qR5Ӗ65kZ`z o)K $אv!vU>vl] ֍vU:C=UҠ"4_sە*n7KtFvD9:wU>]}B靻pJp^a9~;^צKxLN; ?())<==A!@ vllŎ[P*]U4"m4UC܆wmj̼Y70H1Ζ5U652ȯipB6dUq{fWL8|7- i(}xf/r+>o}UMmP4i=X] twzmj|_ҀGnL9({jjc%P3s;wUH:VV4Uc%Nܼ~!Sީ2ԶPۢتB|AN DpfO^{}hOȭM5'}eEwk_˷GbEH|wj#mX]: Mj̫sjo:ZDecksQ؊O/TUF,8VSo?[mxb5DRqÔ0/BNU3Z *{~:.py=_:_9 d]Ҕ_\T&(U um?xuLfh}dffb03W !QC#H^u˸v5cOP݀ɰztOኢ6&!ř1-wæ^&L QH ӽe!& :}y=*[U5aȟ=T] ^!bCe̼})qX˷>&::N]וqm陁X˷70OI{ZGy Xt5-4n86-u*p|C9mCc,Y_I55+Na*@5c2:ɷ;د ?0䏷+M!57845;roa7;őwhné~}?ǟ{hiB5̫鰽.$_@h?+.BS!.{Qv*o; $ׇn|ͷٲF (o|]Jc/}SU=O[s> \h/|)Hb/ƿ}x S6HM0<3Pyn)xMXrvžz@+A9`na%9  9siii4#Gw9֟ TǗed|c<ss>kU4|/owx-[ Dk"<<^?o3(i]ս. SCP(HII7Qooo=j#P%BHϢ+ol2g|pBOFdd$HZi:0U*-[???XYYK,RI$ٳJxب.;;< ! .Cĉ1j{3gqQQQ!88&M<&&Æ vP\\hHR`:iSRR +++pD[[[p6P(4eikG񰵵p6oތPH$bʔ)8zhg}}=^z%}Ao߄sq_#::Zɓ'k>cw{{{{lܸQp\zzq8|0˗/cժUCbb|B+ܹs4i\]]!JRB!xΝ;rlڴ +W&]~~>0zhB.#""QQQ(((0-]۷oGzz:둖m۶aѢE?u rrrpq8p@kbWPP#00˃'ƍ׭ X 22CENN***0o<+طom߾]sĉ;x;v o|ЀGbڴiٻaUdEEEJq!sI5ͺy]~Zu%"EK+-7 Pdqcgd߆af~p0%gΜs9ys ?? PTT bؿf[bΜ9P^^k׮aСfΜuAcr%5Gh\]/o粲2Ͳ8p'Nlv-$$dPT+ 1(.mر#ƏD͛7cÆ z6nB믘r ]L >8<##"""v)SW^X`-[ݻ㥗^Zg֭pttDll,w}666غuɎ{Xf kkk 0ǏGbbbb̙pttDXX3ghWT*EΝvZF enٲvvvXr%)S`ذaظq1qDc޽e Zb[#F=f̘J IDATKKK z)X[[#GDll,<<L&z[%KR <==uJZw.]7cť5s\\6m\\\ХKdeei:ϤR)Ν;,tUXظEץKD"?b+061@ Movv6<==9ҀHx <ѣu>W*Z'VH$)?ӧOӧ:Ν;uґhZh6tMGHL({033þ}h"Ԡ_~7n$ \\\0h Z!O6 7nD~aԩ4iQOR\Se˖ػw/bbbELsss$''C.kF&#.m5- (_K%ԩSw@cg>0awL7o<ؚ#$$Νk oSqut+L(_aeerL0d1QT;v,n;om*^}U(J\p;w\h&+WB뛘 )sbb"-mծYYYP %aiiy`츴rZ=y[/jOL*jMREEE(,,Ϻ:#""BkvrBuڵW\1-EnnαDDD 22ҤCXXpx{{@.o RUUUmRW%KO>݆h 7fS yذaamٮ7Gzla4hΝ;L|K{oڪ -NcRMN^77747 ;UDFF JKKQZZTWWk]Ԏ;W^ŦMP[[cǎ_7صkJJJPRRUV!%%p3O02 ˗/GYYjjjyft _|'tļyPXX*_Gzx޽E% aaa"::Zujѣ6l`GBlܸrMaڴixqITWWHOOGxxI$"11UUU(**ܹsR /\oBи<ڵK- mٮ<ŋ1`!++ .\y`츴r`>(,,ħ~8qsi\}(**L&ӚσyЮ!11G?q1$%%wޚFO>-T*˱rJ >>>ի222z 'O… Em/88HJJR)bcck-oPPߏϣO>pssڵka<3w{Γp!ߍuDFFB&=bOQQƍtW) |:u*RSS ȑ#cҥpttD=n:9s&MWWWbҥXv-fΜ)z}fϞC*"888|d.WBz.4.@QQDmٮ...pssP(F;.3v=ZcwСXv-VXTe˖>h\7R...;v,OLD:uJ}/%(cуMݻwcܸqԙ}_V ~m}DB͞=yyyؾ};ADDDΜ>}őDw^zׯ\.,W*ؾ}ff~"d2r9݋oo6BDDDtc]{ؼy3Nlgg˗cΝ:#=z4:twy;wD>}"""_Ht4hB2"}Ξ= < """""""y@DDDDDDDz󀈈bA lD333!""¤ GGGkktO:ݺukx7hQoɁ/v튜{6*WCHkzyڪ3~ cƌAСC < &ˌ3|РAx eypW ZZRDrr20fd6mGa&V݊޶.Ww{~^{Ν?z/^ĕ+WSO!""}NQ#H$pww[o 'N?S޸~:#}S/_ۚe׿uV|عs'%СHĉxGT{Lц[00vX# _}AѳgFN7Ne2f8둕5Da?3F 8;;cȑ_DA~pttD׮]Gi}~&Fjr_~% [[[t>,:dph8qG=?˗/LYWT߆lll燅 B.^c;uqt8p rss >>www̛7;v쀿?ϣZTo_o̘1pwwBCCiӦ֬b MGcZի5kSmuDCͷ[ ׯ_c={{F51mPhhp߬KS#4Syy9^x888}Yۍ+\\\?DL&tp%<#޽;ӑOOO1BB*??Ǜob`ʔ)EGdd$>2Ͳ8p'N-T:ehVZ\5jÑL 8F¥KL_())E0c `…={6߯Y믿|̘1M{5k-[R8< !ɐ#G`Ϟ=ZRB|%9AAAHNNFAA^{5صkA寵!MGEEfYUU:(+$BBBPQQLJ[[[QQQQr|(b-?? PTTh&TEE:v쨳>O?q/ƬYPXXc̙vC&w ;^~~>.]  <uVcՐJܹ3֮] \srЀ?C ^z%xzz"..NL8 {,KLLDmmɽmݺ3[n5ir9,Y#F3f̀GsQbر;HMMmΝ-V!Jo"88PPP޽;֬Y~ 㑘.͛aaa5kNNNg3gaaa:t(Μ9#:[lV\ 777888`ʔ)6l6nh^oOL:w^Ͳr\Dvv6 ɐL@߾} n:v͐ޖ92A"ɓo .Dxx81sL!>>^g݈8;;SN ;Z_jj։PnP\\$ݝlJ={{{xyy!##Ck{pwwZb={D߾}:0p@,&/_$_ 6i~xxxhD "Fhh(222dAT :61K.nΣqo?;/O8a492AVconnnZˤRH.?~vS7*ƶsNBÔMǭ kQ:[HH233`HNNFffGcNҮݹ[t` $"""vN0̰n:O>!!!:w\>V >BMM qQc„ -Jks%'q!zW_}'N@ee%N<ѣGcڴi/DoN&L+d2f;smWu-sSwޔϘTMh:pChYYYHMMEXX ddeeJ灱A[団|թS6KKVannΓ"""voC Att4/^5k׮/rJwT*rss ~NaaaC\\ o(T&?E~~Vj5g488K,A>}?FKꐞa]:6:ؘ:񊈈@ddI˟1륩!I-$$D€0h ;w2߁A[ۭxpuu5,cE*tn644 ''4m DDD>v2h6;=ظq#r9 5on^VVwy(--ELL (3~mڴixqITWWHOOGxx)ͱA`` vڅ`ժUHII8py'QXXO?5558q̙c qDee%͛BTUUa8zh3v3V4U}ݻw( \x @XXp…Vy`rV[oXx1rssQQQ-[/-Zdceرz*6mڄZ;v N!H,**ܹsR /lo[ ""bAlذNLLDRR JXL>]j111pssCPPRRR믿"00PNttyC!))I{###QQQ"L5rH|Xt)ѣGw!11G?q1$%%w&ۯP<)) }Ϝ9s&M+\]]tR]3g_1@ >>>ի222z 'Ot` Mr՜CbڵXbR)-[>@gBPg8a8<777]6l3<#U4U}s,PPP{&4QYY  P(5[Uرc8}44us͚5?q1b>,ZR˗/ʕ+uڍ>g!Jt>|ݺu.߶@DD2SNwlt7zFٳ۷DDDDdӧOھ,{L&# %(gϞePK""""pD"""""""ҋDDDDDDD;H/vPte*MS)F[=6z|z(SYO@O@Neo.wc䛱~$Z3.mow ^mZ Ug9oJִ&B)$+Nco~~q, ͨv Yy֜CI#u7ȀpXum@JqThz|;.b79د:!."rdF}{}w\sk["&R}r ^lQHnO2.S7}ycq2YyGrXDtBƶ x!2-l7g2Rw?U =z9Up+s ]Ąa.^ ȯR`ؖKػ? x| z SzRT9Zdt?^ ;KLzj&t@]@N֚eBBDt7jo`|`Gt67zx;Y}pmfx;Y1({)뛾[^xg'Y9 8x9S5{6@~<àR]ұ9XPZOw9U6htq%֍֞.]N{"DtPW8X9HD@8Q`X/j.BDt7#)SbFU. p;9 !l5[oglzOzau)Z{;f$]špĢ!Ek_&˰t2Jp2C^@gϿ5\hy`] ~z>QRĢr1#7)70s5r~NZ@A7A@V\?˛!Ĕ{}7{b)Q&W2$dnZ䇖g`IǧgN”q!"j y`p)~D;.ȩ%-ƒy.0HѺmR6R=ۣ#>9SݙeE *GN6w]y:ZL|$@n;`;o}n~:!=tt^"Q?6Q~[K3Tԛ)L'+X[}q^R;dmur*f1 }qZ ٯ sü07Tȕ8||-c> dB[ 3H-QWafNMΓT̮) 9kNaZ`J_)fw2zzAoՈؑ xW#rȫƺ>zb̸VRn)*56' !:ajTgn֟ ͎з^B~n]$\l-0=V=}ʀ *UjH侩$@R,ZLO5ZCM=RFѓ>ch95eΧMZ^*B>Bg8 -WWL\oNb)^):- u(TP0'=m^Ο74gRDnI?Mȝ-РRLk3h+*BL s07 B_C<0>eU$dSDž0ĸ5vavǗ_ uūPո RLK R'?TaSeaX?jb.SQC5PfM츶AK3N4k+&!GfyGr)Eqnn}s3Wm Mzil";B !OzB!\_Cp o`-4&+1U[~[!u#h[E5 2ugz|MWj:j5~˫ΛEv(n|᫕ivy2X΋ܪ%bC]?^=錻T׵p(?d5/epEзJ\BBfq:? M@ܮAFN! pO2\&7lo+V*t'ؑ]ZWiI:J5c[] %uڹr;nssɪѓ+hC}q^XRjEm7D]x _s -+!ǧ/.J^ǻ|S)>ߢ^ <AA\4=8hisL^.G G8*S>S[?)sɩj<ö?tȭGG_{< ^& ;3}PXƔ+(VjEAT+]zd x\6Dq2 jT,GzI]?t޶PR׀Mt(Tj|Z]>zf=5IVglDSŹ9cwՊzlJ-Am rk:'t [W~4`j[DKe(iAk["{uBe砰Zz֟JDhW&Wy(SNcyV(Ӱ c囍m+ %u7Ԫ R\ 3.2YhN ,?Q25 6)\I"&b륱ʳ˓:ZOF‰j9h m7? -B˕m.. s2)\F\K}z)&1lXeRx|GzƧg1h2Jdmp8f©ۍ?\*;Im?>PP[Gklx訵^Xr<*tCRdwAwbLo=7^' vB„ؘr]Gl|Wpo͸s<(\bv~& [/Um֎Ɗ{8#:Ǻ"(à ݯ ]OhZ䯐|><(i:YazN`.h}w?@qЙ^ɏlO0E{evV(:]l- G@?_½ =ZN{\`'|xW=Uէ TPHxz}+;2PT{K3tditRܓy[ƅn 9u=5kƇ}=q"53B<3U*}G۝Yqe!`jVcZ'|Zc\>}wCAs9"""""G/Ӛ|l.mj{/lbHz.bٯTRz~,+s z vh֑oBBBDDD*< """"""  """""""y@DDDDDDDz󀈈b"""""""ҋjlD  jCv|5@DDDDDDzo>"""""""ҋDDDDDDD;H/v^< """""""y@DDDDDDDz󀈈b}HV#_,rJ|ˬhhwcz}T,tXֿ+sXL\8pd{uMX}վկ+]SX9<G? r{ZR}vYs"bSN@u 5e%q_xV櫱2_CaP)Z Z̀PM |shM}6N0u>[Z2(w߶G߈qpWwawGE|JdKD~<؅!/̈́'6}qEoDAZyH4ٿᅏ7iz>ANi@"wHNJ@߳}|]bF⊷ Z ~xl2br%}6E+]3&'7ע8;6 {f5;¡}X'c>a`1Ӓ!ԯ;͜G禊[ e^DqV:ƌEGB+KM{gfHg S{eZD8>{Hc\m_8Kd{(3;{piSQwak NJB슙K?׬b~5^*2/ož#꣯5i26E"aUVhɫq=ep\(GڛM-91>g ]T\懘u/?a8̟LLQ[K?@EOl<&۠X 4 ±m$4ˡV}x =KH:Ք ߋ0X|@c1savMH$Ǜ (͹jpto>oWrϞx ,<  P}ɤxs)]횱i_H޽/,òRcIx 䦜}yY!&<7As(ɯ_Dj.Q#"v싃{`}3޾HI<fR8H;ek N݋LX;8'4 "3:=:t +;{ ~qqHID(ppf h#t\qBЀ?!C /$aL r\=+z>C{ʏ#Pju|5*vaۡz0yz|VGɵ8*?oXɧºM0hj۵ a@"4[S/J0hcY^p #_=E-JKQ|8T ZNm1bavg㶚o}6m/Bdr޾36pØSH1w[-SW {a éEscǏL-o?{?R~sl%WVeVv ŗ3tַw>iNkXϮ3ok8Ygۖ66":w }g&j.E'78vv׎ r 0P*eV/> KWo}#ƣoVbO {-ŮԿ{!yv(jKMoM̠upVxRӎ^hס ÿ/u3z=/vnZ7338yjI˕ڼо'n W.A p oǝ~۲?NѩE͖k3S7ڇzn;H* qv7^\Ҝ R*QIOf; 1:rΟֺkfX¡^ èً1*"&? U_SgDžhq`2(jana{ךɯX[Xb@$-'!÷;,*2tg9mlԇD"inMm޷}MRq0:sZu+4'Fۘwreikgp=7fDd$)?7o}aHIAk#1;9`sލ'տ;bSeߙ3m2(b{: ?*2vBEVk%c1loNY}Cfʏ#wD]e9B`Pڪ<^6-+őWtrt\gLzWԪKjmЮ;wbgmՎ+Mծi i_3W1WR*QqĎyӠlP`PtuGctM -ʷruߐG?"2y@t?u$!uw2E;KQ\'jdj+& CqV:zzM\]eyl.b8'4 $!%!ѱwERF5 }#cP[^ڢ|k.?}QH,Ax8D"2 dr΃|jJoFeq!N؈z9* f8;7d8v9j+ʠ7߃Ħ/L^ k"5qjJPSV?_0›KXBx&nt'Sĥ$B^]uq1V9V`\#f{c?'7:]H N'IMU/źpp/cTNE >|奨-/E1Fq7F]7Ӿc4Ľ:9j(j?YcT{sH$l=E3͖qWUb;PY\yu~۲YŃE<~U"TǾ8L}P*y>*R3Yј!< 2B$[ft{h$]1^9bExas5G^bzKqX3Ә^Z ,{YvnI7¶NƾwJǷoC$d;{ ΁~c#Q]"CeqA7I\j$%} \L? ׀@"Tskߧ#O(v(76uQ>MM`( ~bo[0V};(g߻]3 D y+ {PY\SVUĶk]=+ՠ )A5?{@\>y ӾM[7V+]ZĖA2m$,r WXO/[/l{6NO6#@Kz 3RurAm?Q된:uJ}/%(cHZu"$". SY|_s#afaҲ3yUѻ>-JE=3ss 9}!Əc?NuV;~< "vI"/w =ݠTP/Dž{qz7Ϸ\(CDm]kgçGBQ[ bџ""j:`8ld;m|>a42.w_Nx۾`v{Vsaae%/-,x|lc DDDDDDDtOc"""""""ҋDDDDDDD;H/yH"""""" """"""-^< """""""y@DDDDDDDz󀈈b"""""""ҋDDDDDDD;8ľ IDATH/v^< """""""y@DDDDDDDz󀈈b"""""""ҋDDDDDDD;H/v^< """""""y@DDDDDDDz󀈈b"""""""ҋDDDDDDD;H/{9qSk&""""""2ԩSjrOi"ѽ5ݏZ،a&"""""""}y@DDDDDDDz󀈈b"""""""ҋDDDDDDD;H/v^< """"""",a\ sVݯV]QC DDDDDD&8@?ǶzWbXf<HmkG7FyfKwoT^Q v '""""""vO/}Y~^'/niZ[ """""""ypۺu+777x{{cعs'''899aժU&_nnf۶m,OLL,OKK+P.c͚5,Z\M:FKVj5>r?VDDD-MѣT*qΝ;NNNٳ]k> ݯ6!'42f#CRD5kgΜɓQRRӧ3c۹<쳰ƺu]CR HV\ܹsƚ5k:V[[w|Bh ABWD0TXUTDz߫ (\AzSH@H%=[~|XnAvg̩3gΜgϞ 2ӧΏ?H߾}ٿ?Tz*>wyUV?)#BT޽{h4k.:tpqÆ ̝;bM@Ν9qgΜSN|ᇘL2l635khٲ;ѣG pݻwc2:t(...xzzR^*wV[p!ȑ#iѢ={<ڵkqqqaذa!B!DYӪU+֬Ys… dee/Ҹqc|}}iذ!O=V+,,T/srr8z(Zoooe>@Y KFhh(]taҥ~Q?ХK8G^^/C@߾} 㮍t,]۷3k,,/N~t ^zNXXzWgee)]p!gΜQ>kZunjcO>^|jZ|M<==\Y~Ǩ_>t1ĉiڴ)~~~4mڔ>bhxmמ|l}7mիSO=֭[-ڵ+[laÆ:u z=zC|̛7O /P+[zz:z'*{ ԩSՋhvIrr2GfѬ]VY>'== *FzʔyyHMM%11x :Nh4/2j(,Y®]Be˖1~x&NHzz:Gm۶ĉ888؝իW裏1b妷2^ʤI=z4OW^^+Qc{Uewʔ)Y~iT*_}-"--֭[`!B!*ĉ>gggBBBܹ3SN% V󦨨ǗIM^AA:qqqԩSY~}իʔɓ A233ˍGٵk2D!^hÉ!,,?6mʓO>IPPW.n HHHݝ-[Ҷm[7:trwD~KȍÊZ-k֬N:_dxx衇m]V+q)(( ;;9st+WPPPPΝtVgϞG=*iӦ u֥K.J8j# Y˗)))Xt"jHIIkoJJ AAAe{-[Z3зo_u\\\j.W%)X|8LOpm͔j*Nʉ'n+왬6&t1a7mm7^`ffJ:JR:oh,wJ_gsjȑ#;$7_lުU&o,aÆQRRŋOg}VR2x`T*<PfovTK۾B!p`̜9bYZZ5rhѢJիc7wZvH 8̣y7ҦjУk^X]w^tYY'99aÆUj썍O Ƌӧsݒ2(^7[{5ݍ|&fQvambY{v(8::*@>,QQQj0aBdz+5jFh4_rJ^~eJJJ>|x (mvРA,Xy5զng8fFSk6Fm#B!(ߚ5k$))h֬Y?oܡ&0t[orJ?~Wpl@@M4APPPGU&d[t)&MBVӦM3 00W^y'|8={N[ G]lٲz3f 6\SF \022Hm\MΝKHHz#Gt8;;Ӻu*O(wÔ)S&;;I&OˬCqE/^LQQ/^,w[2a.^H^^ .~SޙB Xv-W^ի|g=zTi 7?_Sl>/3n8G~~>_'Oٳgqpp`Μ9,\ رc^yOhѢEtу4,YBAA;wdܸqe.U*Ν&//K.;`2}ʪUtYYY厺^FlƍY_p}69s?DFeqgѡC\]]iժ˗/QFĉDDD䄗3Ǐ端M6xzzJxx8cƌ{?EET-k:R5BBF:u*oFcرgV+,_m۶ѬY35kΝ;Yb7.~Ν9s&SN%((-Z0ge1c|_غu7h~'OW_| ~-hZjErr2˗/gܸq |-/?5uTMFBB^||W^>pY'j n/B!B܉dB!B!!B!BX%-TR>u;]amiѨ'W>:>!i򹢰 ƫh*$uwFZk):oGc>UGEa !B!tp>dZ4iUNؚ#mu_/wVk,yvwTu;EE7jB!BH灸'u'}}CgꕿdѺU!ѫ}6;|*Oo&BA^2+-W+ Vo y:N-2aDoA#g/s898A8ϓĽ(1w4 Z,?vW--Zu"C{B!B<B!B!B2@!B!w <B!B!Uy7j!!!$$$P\\|9yZO㫯W_}U8#))N:ݶxcȑ9N<٢gVۭrJ>im6LҥKyꩧn>vgwt+{18~xƏP$ŝx,ɉkr}vZn{{鎯zM֭IHHs >V\Itt4d`7JHH`ڴiۗ5k"V!]AFMyxxкukؽ{7:t@Ƕm,Khh(gϮ/[&MNCowѸqct:'++Kٮ;ޥwϟkV掖%&&Mdd$˖-+߼<6ls޼yDGGO-oɓy۷/5JY}vm۶ܹ"*{n:vĥiZV^M䧵Y+#ky]UaÆ˘1c0aQQQ:uʮY՗uEVvV|V7zw>|8FfjWr'kkuZ}SN[ڕki< ,^zL:%]矙:u*Ga͚5K/1~xx7y饗m ƴꫤp[R6o޽{3go]髨luUgN>|+Vd6mJٱc͸X+k*/=u"Uk^?&%%shlQUʽwJUfEh4}:<.]*|.ls„ 74?iu7ݻ77gΜO>T*{1 fWx)))JEtt-gfRŋv2UM:cC ԩS Zթ/uU5ɗʽݝSN`WUoG:mӚ}+Я_?Ξ=kW:iVϬ9s挲ݍrss[no`x79|0>,[l1N>-'&B!2oF׳n:={rc6V<hZwNhh('OdNW,J^Ԥ$T*͛7WÇo#okLx5WWWW^AApݪ2NT%}Uĥ*jܜթ/U|?~<ݺuO?TUoW }%))>}z{k4k֌={j9reҩh߇xM㝐N!B:D:t@nx"""X|9$&&YsݻFCvv6.]&88™3g8}4#%%WϯJNNNxyyqA-J5Mh-<۷'''BBBptt8I(DDDzjXr%vmؾ};/_?:Լys-ZDAA-v:QUN؊KUS_KU`mˌ39v]eTrnumBUv=22Ǐڴi}E^g9r-ZpyJJJ8x iiiʣ?> !y n>[믿0{lONPP/Ra59A֭9}4hZ<==i۶-4lؐ ҽ{wɓ'G&Liժ;w.#8|0AAA<ؕ7Q"`5nnntޝ`^~eΝkW<={6&M"$$ɓ'g)n@&NСCܹ3ڵ3sL["""o9sfìlՉ*uV\CE/UϊKU`UL4^xA0ZUܫnzmִh^[ݜٌdh4b0,OՖj_pqM%%%7 v?>*3RVBwPPP@=hӦ ƍS޸P:u*{eݺu徑A!WRRh4ju>'#-(C=Ğ={thZt:o߾w\,XP摅{Iڼ;)w:WWWV^h'|嗘fV^-B!*2@!B! !B!B1@!B!VIB}W|Wm=BۿBy72m4ulOOO:t@ӦMA,}EZV޽]Ɠ'OqJ"Vd4iBӦM>^zի S~/^Lƍ0`deeqUNmSNoANh߾]?{·&**N:qa B?y7TNXJol777T*ڶmΩS8s ;vKJPP{EѠ9q}QҶj*|Hz聛rV]\Fر#f 6J}vԩL&6lɉ jZlisʢs<#\|C)-^ D-HIIaȐ!ج;vi۶m[7[vInn.m۶k׮\zC))_hjyvrr"--"߿ggg%پsss9w111̛7ÇӼys8@XX6W?==ҫW/]Ʈ]0`)))lo}>l{ZUVh4hڵh4jopUΏ;+vիWeee+'BZwjȂ< jd"%%2W$##+=-[dݺu+ <==Q5 \v|<==ܹ[ۊ_M())Q;wGri ,.̟?eݻw'88Z[jeS{XQ' PʷEXfvo///b'**ua2P5R~FF P:Zj}ݧԏƯiӦo<ʉw6m*.](ß,"<77˗/蝽W{:{SGGG}V꤯&Ν;p;ԥn:}a2ARa6rrCžfoذ!hZ5k g}U=cm⟚OY0܌ 8#/b`~if3999۷_~f92͕=57yG~ҤIʜՑ޽{y-]ދ*rppP`4-N6o>Yq][i?5r0s yuHÆ 9~84l''I[ZZ7ZUmQ:kO>jD 8vMZ\fvppÃSNZ毿Knnwa|FcQ5qҥKqrr]S !ĽB-Y đ#G(**;w?+'?9rB233Sz?Nqq1ԭ[NEnn.Fz]?[[#;Я_?իDŽ q'RT6;={6gŋ\LJJB:dQ1 uJT[m?>K߿< g֬YBMįYf?~cǎѬYK[xx8nnnL:I&1i$Mƒ%K(,,Cu{tR|oHAuמk}ܪwf8vǏ/xmo( &$$G*UDnwa|=` ##m۶[>}8oo~>72{lF#tMa}?>fƍ3ϰtRΝ;3<Ϟ={Xj̀Y ^>>><,]=z4*j6g+|[qrrBRkג|.3ئMvjuyf0,7JHHPNK/K'oȎP>(Wf̙DDDо}{~ߣG6mĜ9s][8:\FQ^ +)((l6yĞ+ra\\\,b kaM׮]IJJ~CVA=j|ڇ=髉]^= j[nE>|`|2gMv[VT7eh4b0{BvѣGy駕Wb hݺd]"6mDtt4111)qBVJJJFq!w￟tf͚LDiѢd]NB֭@!C!B!.t+GȄB!B!J:B!Bat!B!*<B!B!Uy B!B@!B!VIB!B!!B!BX%B!B!J:B!Bat!B!*<B!B!Uy B!B@!B!VIB!B!':T*B!B[qMp/eJܹsRsB!BJo{)j5/^`0`20͘fQB!B!zj4-=yV1LT*4 * $K!B!=CVVj<(0ٌZVB!B!57v^ފ'T*|}}6 !B!egg[\צ{󠴗d2$5H!B!=ի0Ԧ~|"B!B!.JoZ !B!ZX-&B!B55L!B!BJ !B!GX-,B!Bk@!B!VIB!B!!B!BX%B!B!J:B!Bat!B!*<B!B!Uy B!B$ 쓬7d%Fp4@QanqvCsa6ŔgBoGҎ!4kW4.Y, .\SI-;i4^dDo_bH!!B!΃;~uʈ f<\n *4fkJx\4fnn8`PGujzZGDqِO7UfEȥ˅4tIy߰h)!B!yp'i紿/OɄW] xLذF 9}$,i\ʽY\>Nڅ#ݨK15 \ ٣y / B!B:t#}yk[sB&i4 $VFa\"qt!_IڃW.#B&Z :ݝ4GSqPsEGs"N%>P䘮* B!B:t9̜senc[~>tf_:zofl3je_a%\.|C#mα:gd`4C1Pl2PÓkf r (Q;vw]jŕ ;Fs3ҸeX㛑VEղd 6(=zT%hڴ)cǎҥKw\Oh۶ oӧO3dBBBtߟ _f :uBë<ʹiӆO?"9 !BTܪaÆDFFb4xhZ7n,^FP.^L W]89|d-'ҮRv GEEK_#Z!s[HAs̟?<.p?Gs[6uD F#| :|ʕ+tޝgUZPP@Ϟ=f_ٓ}{O?͈#8{,Gޫk:;J>c͚5уliB!Uw^z*v#aΝ]y`'wFBIv,UH 'E%$25抏HJzNq20cVL~v>f z%\:\G坻޻S ?>z/GcRRRfy<<>>ٳGY/$$V˛o 7om۶S^=z)njNeۻw/}%<<ǡCaa+_ׯτ Xb͚5C1tPTNNN|lٲ~IB!UvZ㉏/ 4NGll,~me6y0L̝;;ԘrpmhI`x y ㆗Ɓ` n<8#Xǘǻ߾ѽG4.TΞd^)bZD7#[W+FR.Xp}]fϞMZZŅP6mS}&''}1bf̘Q#Qޣ [n[lQ_0͸н{*ioߞ ׹z*}#F 99_z".ZlǏgĉsQڶm?ON8PO}#))CѪU+éStF^|EFŒ%Kصkzz&N^W͛7OYo{HLL O<:u^zQ~}8޽{ gϞ;wgoڵkYYYڵuֱa7{֭[`9 !BT҉'8y$=z >>T>\f .~m^|E8Psʘ5k|g-v)DtNPWS(KYz}Hxst~_w{НmH^][ ;$:ZTW4\J £uIN@;";O>ŋ9to1vXquؑӧOLvjdB!!!v700f͚i&z!*"c9QzǏSNԩS#G2?78;;BΝ:u*L0///xqvvfҥqspp ## /={~۷o',,=zBxx8&L`Ϟ=w}oҥh4&O~~~L>bIA+bOjР ӲeKڶmk boyܬ{ڵ!Baի&<<}`0iӦ <zJСCM޽{-vڱz 䏧,YQ CI!4p%S]&u>5kNZ99:8RRь. W' 3S'6pTuкT+sUUgܸqR,OJJb۶mGJ'ٳ'ѣGU#>p}C * m۶a41LJGB>} JJJl(k񝗗YYYg޽1L["ٸqcyRRRʔZ& "JN:W)ObccINNf?~\622JᥤM ZNZxɗMRXXXYpp0?^B!P:ux֮][9NۛJ٣Çɓv*g`/ [pZmbq->GDPw4*B=ԨҒs7GKN0 L>8, sPr0\Xل Zbu4䓥ϣap9 O# eT*yFc>mfذaxb>Cg駟txFcǎj,kժU«N,ZJq:SZB!m.\߿3gZ,KKK#44f\|gW*iQ!1p@Gtz0ү!фw 3\f cu3jGN:RJ < {bV9WΦPp2.&t^Μ˾&qrr /DŽʉ\u:2RRoIol<7_dff[խ[c㢪Ǐfv]AqISJ5SSm3f嵺ܲeY73놢&fnb n #0#0 KG̙l99CLL ًð^UtfovhiӦxyyU{۷Ã\rY>P]VC a޼yV&fҋґEEE|5zhFhرc,_^xFQULL [n}RWq>SB!wUVFrr(VZŸq~l6:r_u/_ѣGkbvI[NNPTOzz:k==qgc\b`K,tp!2yyL\ϷUWs~劝7)(r!w@_z+2 |ӦM|rfΜi^FF׮][n?uvZu리\|&$$CNNJt8|MjՊ1c+Ugݻ=X~=PG }.oooсRYYY\xb*kذ!f34jHY^'88NŋgӦM~F!::'ҼyslR4BCC.ܹsX~=ᄅ)m\z5x`k{(=='''@+BQAN-&()׹ml' /Ny6W狃S1n*<`(1a61Hc_oB<}v&dkpAؐ|w ]UslXj5:tOK/ēO>i^˖-yIJJ"00Py{7[棏>R-߼y3aaa)s";y~뭷 @y_u[:Ν;ٻw/*zyrtt}5F}%55 ٶm&Lȵcʕ[.ӓ6mX M6M :^x&Lݻ),,D׳fN8Alll4h999̚54\hӺ9Wr5׀$'\j.j;gΞOײ}gLvXt)dggsr-))ԩS_R&c|뭷iӦrզMK|Z͍ӧ#k׮v{J`0`2h߾m1bnٳgkܙ?w}F1k,&OlTVVCe޽6t'OWގҥKټy3111İm6-[Ff͔4/BII ݻwg޽ddddɒ=0n8%3}tf̘A|||h.]ʯJ-hԨӦMcҤI>ѯ_?p. [iN<Ν;B!,11b*<65\]:yd7nL9|0+Rՠڽ{N.ld2a41 nݺ^s.q%"6n]JcȽ|gP vdf(c'9?\3qQ5/orrݤEJQ6˔4݃z-Z21>}K[N\d?Ϟ'z9s&l߾ PXX+‚ xW ܮ ϏTyO>#FUCaggŋWl&$$0tP_fooo͛mNh4ҿ<<mg\=<ҡ=W0oyCCCQΝ#((Hς QAfUVDDDɐ%J?@nn.g޽VH4 ϧ"tRT*-[V%KŰaQF 2?Su{ᡇ^*P!B![[/ ]=qPL^Gm[^bG Ӡia\PK(9j>-0kvF.>ݛQ9pnѧk'}t\й{nF[iȐ!?瓖\ 9::ҤI^~evz۷`ˋ||}}֭oV&p#///֭[_|ٱcG#<S`FFF?n gggz-z-=f3ǏgС?GGG@!Bq_c 97.!i(M&=)2d½EsMxf]iԽ8c7).gxyy)?7vo5x5،6=2ќϞ ݴSzB!B ә+{w?x_tK٤? ?4%jG 9F}ӧ/`*)"g'#1fNLf{i!B!<ݹs1Q8ȇ5$Nэj; $mɎ];yKo&69xx?nZޣ.>J9ͮ]{()1y^zmBȏt5N.@MzqJ!})ihݜ歑9n'~\K-B!<{"4`&"-ƒfOsa~߸K{%Ɂ_$OoYoPxՀNNN<ѹ;sxxa| #:+Gx)B!BH஡x`4q0sǎ 9nA{6No<(qAdz)IlBd{kԘb3ٗ iŨ ye [iә\qq&7 YWq񦁛los`-g쥛xsTE5Mn5o GTX OZ嵲زO1ߣ9|*i'У}4losސB!BKc26mpWbc«^zeMKUۛ̃thB!B!XQ^Zs)ϣ8ˈCIMox8YCމ#dϐ0{gwL:a0y/Jv5pRf:.:A7(ښKX>.jPkL\ɭhv<ڣ׊)ޝfH:javB!⮧*MOݢ9g1h8L~2 KoN NMԪ9j.瓲{;X{)~<1Jz%M~UYUS!_e+V.8N<׃]G(1} S筶 t3筪T=k;A(B!d䁍c񏉮rvv9MQHم^сZ6aw9K'oow'<ӇO~^VƸGY|~0% Z$/UmϚ[Wxi]iX4?B!Bvm `61LF [Vkpsvd°>RB!BQCѠVQrUԫ2~!B!c ^-2V*A!B!p2@!B!VI@!B!VI.jmsԩ^Ɨ_~oyErr2;weŨQ5j:uEմΪݛoڡ&|+aԩurlЯm9bڵhZ'j]SW+իL0ӧ[,oҤ cǎ%))IY/m۶eٲeg&-[SO6 &PP Bqg92ϲh"z꩛;ݷ~ˈ#nNogg[l!66???>mfQ۱c:uRRߴZ-+WI&Zi*7|iٲ%cǎeҤIsIgMFT_jSו֋v/7dĈ*DM۽&mUn~mZ/tܙ֬YC׮]m*CMke"ͣqL>ooo%=VŋjX={2uT9}4-[D舋^ZZ˖-ٹܶ|||1c61!Beǎ0n8>y,7L&L&Sl7`ܹdff3ϰl2~ 2e k֬!%%Ȃ L$??#GGo1⡪%$$m6fϞ믿^. ҧOSU|w裏8wg)6l`k},[ ҢE z֭[̋vR+Sz}Μ9_Fj5omqھYP4 `0lSj?X+{UiV*?3vہ&Nӧ"??X<* 0xxx+|reyifرOrB"!-eJ8;;C#p)xJ[\VLL ۹quue˕+] IDATWj7sLzEVVV͛g1ꢪ|N4 &JTTnӬY3.\,?}4 @R3|p;s FRuS'|ŋm*_emTU]״|?Lxx8<}Z^YW^A]6kq}Y6nhcќ:uJNLB1d]&??OLnnrW>)(,,DһwoBBB8qC?wY$f۴|*ܲdT*[VUqqRSSyW9rdmIrՆrGO[ ׭v+k#[DMW>oK^j.ˍuPR]'ZmTvUuL8p 0.NJLL ;wDrA6lXF}(}2B!$x *iԨ+W˗ft:[l!;;w}NP֭jժiVFU&}Ԅ-iԤg||w9rĦ6Ivu} '??znU8zhֺu8p ĉ9x mڴ… o>RSSGmq!B!-;i&~7>SfΜI`` ?|au9A9uhZ<<O2e L:>Lb7N&6yd F.]̚5F?2k֬ZYYU'jZb*̖RԴִ^lÔ)S?~2a6Iv>XcUC2gΜr =ТE |A:vH@@#F`̙c)1J'^qW_}O_~Ŝ9s8q"j_?;c uhѢEJ}H…4oޜ-Z0uT^~e U}^6,Y= Xb F# ƌ>^*Cq۹sIu;oիk}p:իGAѰk.,Y‹/ڵk1 =?8::#cǎr/[ƍӯ_?j5;6l`ԨQ7Uo͚5Oyf֬YsN-[cƌAѰqF,Y˜1cdgfEѳgOj d2qi~BBBpww_Tڵk899Q\\dlVWyUիg&--`2228~8ߤaB 0LlٲHt:]HIIaƍJ۶m(((O>aĈp%+^|Eܔ1 ٓVZкukWp֯_?~srrݻ7NNN4oޜ$СC;WWWv_M~h4⋕F IKK㩧n۽{:/VV?3f\iKjhڴ)DDDҿ 9w>rSN|jB;,X^{cǎxbe)S`ook\n:Μ9%u*+WXߨQ#x4hGeϞ=:u ___ ֨T*BCCSNեV Օ,ݫNU嫪333;㎎DDDl6[ZlIߚ׳sNRSN{U>X_ܱcG9r$*ڲ}JJJXt)'Nˋ+`]_ 8~~@m~K{JGңGBCCk]k֬ɉnݺY,_1<U?:?ѢE0L|SN0`*bT*j~ FÐ!C(..)m̅ 3f f͛7xbƏo -套^Qˊ+9s&M6 Zl迵F۶mIHHV?s#(iӆe˖YӵkW V+iWWWK۶mY~=gv:&3gPXXXԿ-o0r xxxХK:oWJJJWuAлwo-[}]*;vTctt4?Ö#(#ڵkGVM:ݻwc2CRa6tr3Ö-'l۶aÆzČBH@ܶڶmҥK/0'ǎiҼ$ݫLjvH֬YŋҥKDFFZSDQ2iҤRW*wiJֵuq!ZjŃ>HHHR^{{{erғߪs޹sgN]Νٽ{7yyy#nEM&=db5OW:,w޴k׮[^?Ų^ :܄e/h4Rj_}yxxпWU$%%1gT*AAAү*u<(((aXW DRvկ-oQ@ujҷnIQWGnn.999R"??_yl˖gU'|wDB!qqqq駟X믿RTTdS =={2rHǸM@ӦM9z(vvvϿj\v_~beصk>lv^p"BVJ"77WilT*MGwk:!UtٴlR9a\|O4hlF쬜͙3ggg'O.,vv<ʄmu~ȓhT濨`89QM6mc Q:abM맲AAA<Әfؽ{7K,^M*UoM9>s \y|KO~kSoC]=~VpwwɓV9vJϊt:O?Dtt4rr){4lؐ&M|ף׮]ɓ\vL”ۘ6l؀FQ_DEEW_ѹsr9s搕ŀ)T*U'vvvDGGi&s6m"::ڦ9'`fkɸyZZl6sa42!jR...D.]pppĉʰ۫WV}||8z(dddiӦrիOAARZ ?̖-[Xf ^^^<}R/$pܹˣ>VEV|AV\ɬYhԨ;v,L7]veѢEz3f *>}ȧ~hLJxڥ4;!!!b}=7_&&fΜ9ó>[W5ZSo|vɊ+<#ծ?kj_UWT*Uo@jyLLL~TޡjMTmٳ'j5jD߾}lo߾[ٳg+o[nw؂Y1}>M'TF t/䜰loٻw/#GҥK3F6w%#}mw@7LT*fs%''O3tP]ƥKj^ޛMӯ_?x fΜK,aٳGGǿTy*T*}?YbK,C*F!?v"''ۉm /]?@RRR׻ȃbf̘@.]8~8OsL2l63ΪUh۶m`9Ç t;v`26lNNNxxxиqwf?>aaaQhӦ ?_%{/WɉÇK!eZ;Ү];VZu^I&۷ z= [رc\zѣG7񸸸FZ>sѬY3|||hڴ)O=Pһv2/ȉ9s(8|0Z///ewyGY EѣGBCC {,Z/wnݲs(y3g[n3prø-b˖-|'ۗtvZZ B͗_~YC=DÆ 塇?P>Q;|N>jW;vg SkQzI&g hdɴh___Zh;c14>kK=Wݾ{>hܸ1O=6mX?gϞlܸMңGٹsź_|m۶VhZ NeTXGСC3rHofK}wڅVeƍiӆf͚q!f͚E`` =\4ƍ'?^B!Yz5}O>J.\!CtlْܺM4aҤI,[t:Æ 1c/^ťI.ǡ$lq"un/">e[^ (~ѣ0j(~Ο?Oqq1\_oy>}:Fb׮]撗ݻ5j3gάqGV.b ݻ-;rH>r8qGy={PXXHRR/rc޼ytؑ VNFFo& O:7n%99Ӯ]; ɓ'&??| FXXw~~>sUꫯ=z4oiii3ydb6kK=Wݖ.]?z-Ν;GRRR*]"|}}_f˓þ}h-iw={(?sIff&O?g ѩS'N:EJJ ?@ lٲ ݼyRQ"v>>bѣGO>8::L.]>}:Z7EEEL8\y׭[Wz=?ŅxXfMԩS """ooo @fffݻ7۷oWF!w+WEÆ &44:̓O>I`` +W,nDD񸹹Ѷm[>2BÊZ-VŅ5k֐½ދݺuSsʕzɋ^'77ٳgt0K.k_+~Jۯ_?|||o߾nwĈtЁ н{w%锔du=%dgg+9s Zߟ3g1̙3V]w< XɩrMٖvkٲ%)))L:G* U~X:,c2HHH4+UVޜ2oooΟ?_o ʿJ' ڵk\pA~BVZbD`\Ng˫7Ex.jvTv5ꐷ{0v;{H8ػ]_ʞV5S+>}:Ǐi eбlôo햽06B_rW]r͗hpJm_{SlyINN{_ul >,X}YedKuzZlСCQTxyyq2u[֦ukޏJ}_![eddw^ìY,>KMM%$$N ~l :?JZoW+{Ucm^~~>K.:))) >ZCe=ɮ(3goMiUګʮwʺ,Eƍ3kJCcoo}Y9s ZI&U8^]lѣG3zhF#ǎc 0buKZ:ҥ'''e2dͫp_]S2ٌF~U[V~!nj*HNNXŪU7n\u,*8*kTNBΝKff&W\WNv9pggg8@ff&k׮UYl[n6mDAA˗/tB@F Zn999zN:\5kFO?ѢE ^}?PUP"+!!rrrHLLAfC=v\o޾!WհaC222,"f 5jTn}ooo 7o 6;=k׮q z3\UVCĉi޼9[lQ>sttDNci&&&zi׺?oooыRYYY\x +|cf1DuU}/\TIyA!:u*<..W6L&Ο?O``Ty7HJJ""" [Y7oFA+-y -ZĔ)SPtA K/OVAsNtwKǏ>bƍ4nNرc9wΝ+7l3>aXXaaal޼}[7jԨz-#۷re <;C mի|2/_>ʾpsuUsU^x&Lݻ),,D׳fN8All^HHgϞΎٳg3|6m/"p+Wo1'mڴհ}… l۶ &WT? 6PPP@VV?1L]eŊdeeS [U}xJ!\r-[T<ܹ3۶m=33S9'wESOIeJ `Ԁ/*G*RYZ}y};w.m۶5k{LJ~\utل@XX'N$))ѣG[\~gLvXt)nɼ4j<==-8q"| :tggg6lرc-&*ko9mڴQ.ڴi×_~i:Rt:d^#FuVΞ=[FEEtR6oLLL 111l۶e˖ѬYrw҅Yf1}tiӦ gV>;vRo+6mRq(-lM/**:tX7nW_}_|A~G QQQk׎.]ʄ ?~ogF||< ppp'|O>ذaVX(T*|||m۶j'$1L={6LٳgޞBDDD< jjjcܹ;w.+,44,DŽL&?Qmذ+S_VBeY3퉈Gy@DDDDDDDy@DDDDDDDB-jswjui?}}^">}WuZkW6?x1H 6~2-lS+A~aVbUJu,͑PW'}KvDDDDDDj":f[3 pbwJS_!-nv1~9  C_,p""""""vPSӡ N[~b|힟1Rv˾ł_oG7gy@O!cGq<\Amq[w0'; y8rlS[cK1(.-. 1\dۙLҊDDDDDDd%bSF8KlzX\J[K5 9xv H8ͱ """""' GH487 3,/鍞7{uƲocq]hZ`;c$m;͑XD|-n """""',!!Ԕ3`2`4a0ѧO*=RRRT*P( !|mD󀈈D󀈈D󀈈D)V<==1c 71#""l?7nuHIIA```SwyFDDQ]ˬ66D7.[sC\K9HqAjVqkխS_>ܹ3`֬Y8~-[н{wnCtth4_E^e0o<„TSFݻiӦaΝxMݦMX7 .… Ʈvr\ FR!66{Fll,T*U*))1c0`̘1GGGNÒ%Kw^"99&M¸qߕ͘1;v,ߏf͚1`IȃT-0`1dЮ];DEEwڅ=zEpww;N< nݺǏGaa]MO+mڴ sέDR?___tvbK  777[lΈ|;v,ڴi/²_pssàApir)^||<y!-Vo>tܹJyOʺx7no ???̚5 -7.^()>2xkK1(vVr/^0 1QzKqk18pAAAP w}Jl޼:uѪU+aj7oބZFLL ʕ+B=yaCc"22ch޽xkbʕ_|of Fz9 aܸqo&bt onq/2Z-O/ZlăXv-T;0rHᩓt.Y_~%^dL6MR:ѣX|9ӱ~̙ "''ǜ9smOᇸz*n u={k׮ł $實:Tu͟XL!::;v@Ϟ=1b:ubZALMbMY/Rb&u-z#;;ׯBXGu[)Tbm&۷B@rr2z=<==%塮A,i)j?`֬Yf-\W\/Z-.֪`pvvܹsw^3k,| !"&-KIIL&C>},wEZZrrrGauJXke ^IIpݺ:u_]b^JZ>2&^jrYp!W_ժj[n2muN;v,RRRb`K^z̙3PHOOGSPHO"""vP `|g^^^سgq*7s΃gBPݻu= FHJJBvv6\˗/cܸqƝ;wnnn8qݻW...HNNFyyS5KSDb,**ĉJOOOٙ]$֔N1^^^طoʰw^tQv_QPP>^bO>ضmJJJm6}TGbKLXJK]HX%mY.+Wķ~ IuTz6ooohZx{{۴=4V;v*ZرcjV "==}E~~>t:# (.]k׮1b%2l2:th}O>iii@PPt:դ#F F{ׯN1QQQ'"""[XVyG'[t)z- :?Vw}///|wXj,D]Wzixky/uٳ .nmm q-Rm)S`ݺuU>AWgϞx1x`maaaXbZh8q0bGG,YSN 5SS΀dh`^7ZNOVWjfdff"22* :C.]Ld6mڄ*é""z`ԨQ8p ͛'-b8{,E"""RRRT*P( mJGPܔV~ /̙3pwwZ;RSS1v.7o“≘-N=o> zq"fݺu0Lطo;I""""""&#""""""""qFlܸѶo'z?QcOwѣͅN+ߙ^liLj#5999ؾ};ϟ/y;vGٳ'""" Rݾ}D^^r94 ѲeK2JLLD||^{54k ̙3G.],8|0^^^F7nC{{{tC A-EEEf{{{#88XP\\,,vR9rgΜpA 4AAA}6RݺuCzzoӞƤV1x`:tӧOL&Ñ#G0d,OkҥK駟PXXGGGs̙3#G1l0[RXb߿#G?NC֭K/}_r%}+b>W^0iÑ2k֬'''+'44gϞş-[b̘1q1[9 IDATܺu Ad{СCѲ?k.pYt:ٳYYYUo)Rz㏸pp|wwz_Kk}X{~STTիWcƌpss`3ش}8p͚5 /`c`0l1lvˑI&ѣ>M͛[ܿX>,ſk߶~-L֭[]vχ0aqen!!!puuf~3g.i0L _dΝ;HNNrq׿j쳬,rtaʔ)xp%\p=zl߾ݺuChh(PXX;wOGrL:GFF^*B``Yݟ:u Z oaӧQTTAaذasRSSOk`0X_KJ 񓘘{{{!lEEEvw 6 -- }ARRڷo6mX̟-nn.1zhܿBCC [ܿX>,ſk߶~ 888KR޹sG_aa!Ν;???'R!"jLׯ_\.^Yk XEhho߾6A>( @6m{"\y{{#..FrbHa*t({N֦gϞ8y$ */Pݻw.,{&I5x/I!Ν|_kM#~N>-7##C%[owww$$$h4޽{d0L}С/%l]vFZF^кuk899AKNX7kmիٳ c62o!"z)g2$Nt:fb$ DZn:d2h4Nloz=JBӠwww,Z:زe nmm۶Xh:.cǎL&&ʔZ:~8DY9jY-ŏn5pM۵~Wrr9FY:y$N8x{{W]d/۱\.n ~į56~u놃͛P(xYڲ}ݻ(,,+d2nݺV+tNIɟ-}W'eķ߯߯|¿зo_akC;$L(X믿%ݤ(Jac0 f#oL&ݻ޽kV0dBav1T s|4h^|*-~~~۷㮦w]-׵$//III>}P֭BX}2G rkggg]"33J]vVNNnܸyYuQD,?jKכݜXSRRhJB.]B={݌ٲ}+Jh/^F\.5vuT?֦ߚW*&Lܹs'T*ږ"'EtprrB6mpI@!)) %%%=<}G/"9ÇwqơSNXh^|Eܼy+Vk`4Q^^sARYq (ܼy ^\ϵ(---Ezz:JKKq KNXGDC#11W.6#}zBff&222ЫWz[˗#<<ሌĎ;PZZ*y?...(**B^^ ZmOCI(5~222Y]q[oh4*#m>,ՏZ_o!!!:olq"ĿgmH)_k5v>EƏGb͚5puuń w|+2$$$}`ȑ8td]v9r$OM+~!&&F W}TT \]]lo>Z ^^^_ÒaÆ!%%'O\.FU/+%~G}ԩJKKVY}_ KKKFRDAA0g}䯱ۿRT?֦_k}}cĉزe ѡCI囜Ǐ:uÅeO,ſgmH)_k5YBBB>Uʂ`^f&"N>7^[*--Ett41`RW^^2>|޽; G*OD$]JJ J% ‘DDOg}Xz0ɗJBΝѷo_Pj7ߠYf0`oODD6DDDDDDDMPC Override the default configuration path. Please refer to the *CONFIGURATION* section for details. *--disable-log* Disable logging. *-h, --help* Show the help message and quit. *--log-level * Override the configured log level. Level options are: trace, debug (default), info, warn, error and fatal. *--log-stdout* Output logs to the standard output, regardless of any other logging configuration. *-m, --mailto* Open the composition window, sending to the url or address. *-n, --new-config* Generate a new configuration file and quit. *--no-auto-poll* Disable automatic polling. *--refresh* Update the user view of a running astroid instance with any changes detected in the mail directory since . You can obtain the current revision with *notmuch count --lastmod | cut -f3* (*0* will refresh all thread-indexes). --{start,stop}-polling can be used as an *alternative*, but not with --refresh. *--start-polling* Make a running astroid instance watch for changes in the mail directory and display a polling spinner. One must call --stop-polling at the end of the external polling (e.g. by offlineimap) *even if it fails*. --refresh can be used as an *alternative*, but not with --{start,stop}-polling. *--stop-polling* Stop the polling initiated by --start-polling and update the user view with any changes detected since --start-polling was executed. *-t, --test-config* Use test configuration file. Only makes sense from the source root. *--disable-plugins* Disable all the plugins. # CONFIGURATION The configuration file location defaults to $XDG\_CONFIG\_HOME/astroid/config. The preferred way to configure a new astroid setup is to use --new-config to generate an initial configuration file, then edit it to match the user's needs. You will find all the details on Astroid's online documentation: https://github.com/astroidmail/astroid/wiki. If $NOTMUCH\_CONFIG is set it takes precedence over the configured value for the notmuch database in the configuration file. You can customized the thread view by putting your own HTML and SCSS files in $XDG\_CONFIG\_HOME/astroid/ui/, as explained on https://github.com/astroidmail/astroid/wiki/Customizing-the-user-interface. If $XDG\_CONFIG\_HOME is not set, it defaults to ~/.config. # NOTE Astroid is a *Mail User Agent*: all Astroid provides is a graphical interface to your email (read, view, write, modify, organise). Thus, Astroid enables you to launch actions that rely on the performance of other programs to actually fetch, sync, index, search and send your email. It depends on Notmuch for indexing and searching, but others actions can be handled many different programs: - Fetching and syncing your mail between your local computer and email service provider can be handled by any program supporting the Maildir format: * *OfflineIMAP* * *mbsync* * *Gmailleer* * ... - Sending mail through you email provider can be handler by any sendmail compatible program: * *msmtp* * ... - Editing can be handled by almost any editor: * *vim* * *emacs* * *gedit* * ... While all these programs (or equivalent programs) need to be setup; once they're configured, you shouldn't need to think about them beyond using astroid. The configuration options may be more or less tedious and complicated, depending on what email service provider you use. # AUTHORS Maintained by Gaute Hope , who is assisted by other open source contributors. For more information about astroid development, see . # SEE ALSO *notmuch*(1) *offlineimap*(1) *msmtp*(1) astroid-0.14/doc/full-demo-embedded.png000066400000000000000000021053641335422170400200050ustar00rootroot00000000000000PNG  IHDR zTXtRaw profile type exifxڭgr&ec(X`"YcJ@ݯp O!l^OӃ?Gr]~J|O|qA?_bIz~9(xFmnse2q]<)$YOI 4^;&$:?;Rs~+e9#u*/?'`;놚?(1|󧹻w{v#f5'N* _|5^qM4'_˅"}C;pyWX 1+c\1c-zA 7Vi{,=x7 \/|ѽJ4>|io" ̩}_wX&"ho/8n1-[9yUkv+P "m &$"KHJ5؈`18@0;KlR*E=kjxFa@X*MSCÒegfŪ56J*X)aԨjZ[urVZm6z ^zuࡃ[1ƌ3K'vePzrU3cͰO9i3:cy\þItg!fbzq*7֦/Xg%^m3nTCl?f4o3{W#yUx&pZej"̀pm |%UYNؙSW  S>w|>qFཌྷ<ұI"ˑ;ZjB3kNH¹{5W=ܱ8$^};0殧Ʉh͉pHRΛH-P>۞eǒ60gkMmbE6Yƴٷ]iC[;kYښFVM0(=9uȋ\;իs|2  ̒ngKapOz-AR,<~`ysZFP~j o$DǷnK*`is DS5P YgGUwHܝ:"-  ȓ٨(:lT<L.x^)wJkW-hVV%Jt+yKo臀R9̘C)(dݧc vu6\`-w[>VT?>#:@=Ak7S*wț $RF( ]w" k4HK>v0LAtru7czmT.'d܀  @N_4hC׊+*՚5*0X E3LAf2(tF"$wy:[yg/Bhft10d1.xpP>rd qGcYd6h󠾅97?'x )vE:#'bkvm,opV"/HS&Jy@'㭁U˗=lMfW0 *pGBY6&1{=VMTg.UgtS Jn7q<כr\pa1ay^+`?dt/i0~$[09s$E!q5S"]6~PWTmENq ~㈪$z '%e! ѡGHJjf@SJ_dd@R+aoH$ZVRۆɏ:qdZY$> Lfm׿)\96pk(p_`r`W P/i+dS p= __(}kgI/ՖM]\"ߜ;~Kٸq7L020zu}6] v Ў^FrA_"q֙3!t XR#lPc_" u<c ޽Q0txWL E $LIT" =kbA䁚EK/Hn'W=! e"ӡwb3|SQXWDYj%V "Um%;rR-4R\1\@@"<0.8Qx Lj`'K-AIo{[ċ!ָ 29Hc|Z"b!}Qcٚ%*Vä8D8)3$m,WqOj*6}`>wQGQOj |~_GKkPpa2_KOiEIHF(>.`?s`6.?OCV/`!xao0-a4`ryE"`3O`PlyIv-238êk\qS 5>Q %G4|+ ңFξ$YK0"m,u݂F%br6nP_NdO|RY[`^pB (!OyUDA_>EKT"I>;5GBl9ZɤiK5.@:$$8چ)`'?L)[,%|k}U')963pkv>SMT*?[ѩB2ʨqݑ(ah_m#3:r/OH `f O.-5b-씛*"\W_Z&Yp:ۯm)H6lñiBYe&K lŒ!z')vj UJ-JAGirxAM(A_AZȄ!)_i#B!! h Gdz jHSМ,W0i3)^+՘Ba ͭ6!!9RהAZ6\zk^ ip5_7kQh;Փ coka-+rQ"Qb183uEbpQ)Ux)Kl -PX+GH]1 O.Q술rׁIO D 6B%VA"'i4NZ1v G|cP~vYI5iIOiSKRq{Z -Ѐ{ FlI?/^r'c5CH\RETx:s_~^00jVr2iFV@&'"- H֐ҀqD:FкDꞣ-JSi/M@j΃#bv PZ¹!Z?F Yx: Qj(ƹY81.0!q`AވX @$Wɸ"91mVOl1F"*(Q:#-ik%^tڈT5B -ٵghǪ8iE/d* H趆Ќvfh Ig#^(e90Ac 2W+ꬊ84 (/A푉(]3:8 ԋW h|^({H$3b}]HoQ\G|I-U@{ӈ5(EpcS׋> U(U Dz"WRC0x$mO [P Q%d -3H_d?bBT^79p=g-LPRPAbVИ!Ut4c&C@V? dNfoL"ID X2NdԡfO6m+$ T\Ju&pZWY{o KQ7vpV; SjZFp:7/rJiЮ=2cGx3pWʫdޢ^M{VBUGf"yW@IMQ+OM=n7ejZԙ=dmRCN7Q"5iesaZV. VЫ`p%1!d7rߢxѪ*ȥT:qdk,@Bl saW]Luqjt֪%l^ke[;G1" TE LɴiKXT NG3e!ͦr5do`U~V3үC.1qU&WO#i'nseJ yd;<8X(@-3yJ 2(E ii*}FH@R+VmDa*Zᢙ)^pA=^&xa'E|AֆHJDiK|zGҖҮ Dsra *޺n!LID?)NIwh7LvS#*&kL[/r#c y(>4ky;5'T6߯Dm᨟:l  hF*gF|96~zzXbB`*-a I.YPVPj5>:^rj#RP?VKi6WfjCkk˖tvxyKj>Ok-* [5G}X+S3Nyo<CĮ )_FST +Z$}#ep}!3 T9 MkO7R K,$C*5Ŕz6Uj1xØ9o"~7j'̻]x!| wLnUmW"UK0PXTo^ " ,,[-]՚2 A!)iR_bJ(bw_BgVZBMGkiaI0#@c%MmHE+ՏWrxHzU۬@ZTeƂQ59(xr֓w}+ŕ, B5;__Pۆ* šUۦ߻hvlxpŸLqPE6pDPM"^'蓭^7ZELi[~D`)",iZx>mz榞9Oa8"G.fw,ڞ%N_.4q iHaT*HiA;%IG?QRtmB ,>ZTX:֡ߍڪZsjL2^` { :v Z?H]Rb$ȳF 4#?'* ۠F @1P9ֺQG :M$etKh ^XEmBh="|=\+5ԥYm#ŹKa Ew z!9~w}OME jV##kO,v[kϿ>ԬDRJ(w:*tM`RBSB0;kQ^P]dSUp)&fci'ϒyO2EFѤhg$&ac?ͷ@lY@B?-yśU[47OaAPU)ziv׍Mk-_|%kPrMB-i~MHƲV{uz`f܈,Z!K a}mr^6&);1#QFu;<Ցvg+CݭK(0V ㉠+86nSiPmQG ;bKGD pHYs.#.#x?vtIME:1] IDATxI$I&5_c}ʮ鞮9n{HaH  0 >d9$ 6{̬3V_"<<"Tǃ,*f{H7SUQY7?!fn11 {1@ q`@\2Ń:V6:D˿s|e~Z00D T_vfK)\Hh"$N؝FˑSB'*@ ƘRx.k2H;Sϓi>ƴSRh‡ltt;w2Qs}3o;UM]!mD ITvuH!"RݮjT;?AfCh LG<08nW2n1>u3]en6[ujw|,,"bS33VUTkDpK+5ZV|G ]I^Hk7khv<;:oP*TO:Vι>/ 1qj9O 4޿qxiP&#SpcD33 ?S¦U6.Xv%~Kh=(K c!Gaj9^+p09BbGqRnIgvuϿHwn M%pQھelne$/o )")ᛢz# %|k[J TתY~Pkq漯k?=GZ׹0=iEL{3 9>uگVfyjto~ld1ZU[M}aŝ& 98NqEt #W?EiU-U9)̤ aD2sw_.)c٣/UeWXڱ^ŕm{DݒŒLٲ-eG'n9=\ܢٲe[.MC[sL+X#PpfuPTU UPg`/fkpĻm}49sThG3Md<{#zڲT\C{TX3Z=-7gWiPU%8D ˨ۊW4x͚a`ZTW4Waj+w|jqsFDR,%,n(1A ܢ$r˭ &E6Aظ2~cg`)帢s6F"qLJcf Pq̥A",L 1BJD*")l  P>!UfBډJk+֞i]9(lcgL@rwjzOtD$ײigɅiRm\s1v%Os}SVa:ͱ`K(l`Uuf5"r$,#~%/\I?$3ǁ.ᬲ2wsS {_%Yj0U"H{!"4"8k+Xt^yjcw&MiV( t ǠmL7?Nv ;S)*r5 ZOk0ԆhƄmDW!2-y`kւJ0`CӐ@?Q B&Nմ b@ @X7 q~`*14ފ1XYȐ}d0*b8Y*>"%"&!(V6ژtV5"Iwl|#ȺZ%kT'6X)TqJoç bB;j_: g2%T Y)V]lO6O!Uږ4Ƈ#RĪVҖZa`Qm*fm-f '_g$sT $v@$( ._&[l8Qdph@"/dF^,mie@$aIb!T1&k[fFQEʈN(,IGmH%W[4`=iJK8]K\ܶDlei2Iջ1WD4a_N])y-`,S56-*qId Q [£ h [.ӻLW6,Å[+jvRY%nAqA$5) iGUXXB!1V#%4S"Yײjq5J*j ֯ku}J%.,jR"b0G^dtRP%JAT9> b'}a ,Tje>F͢05fGnTƵpNCa a%Z'+yx&T~sr8nթ7w*Z؞pUE`hSNi'Yb)p]AĦ6o^[*?K&glieYZ[eYebM^~'&Ҝ0!$ep336C~ n©|;ъkhY'iIn8y6A<# m,LQNY0u\&SF-euyuN\3Lw<<8ٛ]jyCx1-(u'/ ljZRͥ^h׸C_07W6/ӭ1?s}Tf2JEEN[XNb%YT$B++}zYA*$l n(n ~>\厛sI-%k!FnH;&>vw!u+pZk^xyijqrtDʋ/me:") ̮3;}ү :"b^}Wk)e5[)y .82@PR QPXEcdNZCI2DWwJz<% Nx $z:"e8V23^$Ud " ݠMनIXAFC)&yϫ௮spɇ" 7-8D6LBSMc|ǯ)}L:œt[;1 5l.*ؚŏDi4?X&q ۸Lk;<.xS9zanݑC~HgJXMZuZ%iAatˀyNg'pҬ?m,ۨc 9 YSŌnRnnG˜}smd*_,)`˶_$X;{)?Eꤦ"J)} z8qTRC M!Qw,;d6}xdFa=7X)"@WNVZF+q!B% UR7Ӹ0\am`K)]AL ąRuD]2e$@y4k/] kLHh`[zInNL&wbQdXaaEMq|39CB\{4t*DzEYw"jj-`պuRw`DL N/RsHd_Jle"wltJO5HlVyNn# ;0á[2뤔O xjxF*͈P:%5&FJTS@ aRTLZtpmٴLtg\Xw$%hފ'iKR*B+k"D%,  V悡,[˷Zp#`:=&rq4èg?MX*`7i^y\1/ځxNjMzg\ϸ(Qe!&ϹbhW¯J!T.Tp"M\R_F&bm5CXLZe+7)A2 &eLV]^bC*"lD0T5%Ò,JR}*:;IH#S*E mZ}m5w!jS^5_Q,0>Gda6"1 U3 &)+FNM-jWrdv5-c^upnjQ^ze[ ƒNjF0ðK rHfLPDD ?L5$ ui ('#HSM(IWgu!Myk2[hj*$/|(x\Þ('{(`b$S}4!VFx`s t [fx# 308nB},՜(lqɰ[dwȚS1uUKOrHʢ1b[Zkz(WBS wu> H$bea!C8(t6:/5YuVBOE12}BTZR#SEQ^QmRʸo~I _a_Jb}W]4ȳSQyt1յh^F+GjV~۵IP7PJ@¼[O0F' BTx~$W*%AsgN5Yf{]֑D0M $KG;[>Me%گ+d C!el*l}!0ߜ+E@/'TXXz1p\ $ @Vc̞2@1t#F꼻 ǻPZ ϴ&ƗU--~MIsT0bv%DŽlui)^g+}jZѼM>d@$23 XF계eĥr4JH%i8) lۯyjƽ#IC`(e_vnjn}\(eh QacbjP 3[ExUp)]Vn*R@.mFdx⁥uv1Ƃ]LkְK,_OSg H>$kK"F0^FUX>$,@y^m"k3/#nYQٲu9`ϖm"y8Kq!'lV<|S_I^j2WU360**O*f"l c$ a;|4K q.-F,=,WoS4ͽvhM!*/+3QMLAꡌr;3E) ·ѕ&5xK'E5܊ww,qQ5ɥ|uKP΃Q5]jڽK,z/>x] JAB3Ṑ.&-₼zNB EҌwª ʦpN^V.1Zh^J=H$V [tХHPrZ q TRN,V K eT*q5[_mKB-;oaɑ#LDqŭ+W]\[kh8]Ģ.4vu_mp¸ē1gR#RD}-Ch WMR &p2.Uus)9NfjXY%0SӴkCN ˖-F>F?:4.FBNC w_ *TÄlK I)A,,)İo$ IM%~ˣQjB 'ts,kF߭k)+/5OTtbʡ 4zL!xksV8r >H%O9p]%,xebį,شzH& ҐCKANaթZ]n%kU > èJY\H?72]bXj۬F+%1{r%̹`H@Q=]d!6L%ڲ,֖λ]h9H[#S^S^o{Q/,a:ȥchhl#%3-I';]Y!;W¿A R?ܕl S:xU-]DɯoB@! Uvnnrvy,sy] M h )걢ISlkh +J>̿<7>F=͇OB@ _Vw)`AOQOj(pFh="GaHvs"0Z^1GF'kNHNv82|zT6 b#[8p+=CWnMgPsHGX65.,f +x wj -@ TlZh0I"4 -qK8P]̝y%G}H]ᆹ!¿RYBRY mBdd5dGHZ\gC!S ap 4*8$ϥuXDXY$!qBpTJ3 .O>UՠoVb& 0[J.6S/̰[4`4aC)ڪk"ts+d_N契]ԟM3FmN|3-e \cI{Kޱ!LЩB>-q!E.1Yim騕A N rh-昈`gZ5,f2O\0U ,$,FU;Il2]5aIbQ2Xzu޳,Ef镸<#,,,D CcLÄ,+i@4r:=ĤIb̤$zB IDATR0kh"hD:&Yf5kls欄mxǟe~U`6\/Oh/(YJg,1΃n:!)$pC܃Sز/x Yxᩏx?f<Z4ct#zpYB 0Am d־\`:su,Ė*<*t#~?>9昮t5DZ{dPW5_EcZ%ʱ=<)A )Ǵ#ZO+bbP>}2V'y!/N#И"!0zjjei {2Xp RJ_J*wܰqC֣ɰI&BDr<؜ZG1y轜״3IbMP m+:3oזE ϼ25u\?0qME(Y)h엪 WE,$=Ffjn3L6\l;W%3fz1).C~̖oܸC#F^9f.sVf0d V ^T6K$”Ԗ`bվM$&{]X|Ơ,zUnM=Gc,MhD9&[qX%tg#W:C-v i8"mKbG RD@TT!uN)W;Go޵^AzUXZڤQGѴjm8+EbXOzˆˊ釥Hgb HY z)gu e#"0^Wm_P~m*T+D|2+jj9ÎDB3,(Hp=̏ '-}Ga #z!j&u-ՑA݁ `"a#p!*DU[ZNc<5Ipjk+7V \&;v)mnev#!ۺn`WZ̖-)ăvd,n " [_Ŭj}IodʧH URuY} 8Bc3Vf>.b2=eKUKyX악FLKڊgz('9н$^COs8t HE~UA)gE";lBoXLT_pH8BL")uȧL1ZH|+VN#(GܹiAgU%fk߭^=͙gfٲvBYٲe[Oj(C-kD) 2c?brUkjah%)`T_٧4Dȳ\ܩư \+r&-&:G!fOBLaBLl!+:X!%I: }J-r̴U(r`9iZԑiu0g:KxkЧZMQLܥ%S 5d7&'|>\[aiM3zXV$H~'/Ay1Y![xa I ҇.9 uKy_-7n< I&~6WtRQ%&x~OqrX) d* 15zF$ I#0j{Ө` +) dimUl_nFf-$ dtS54eL|(z&I֖֖HH\LX l&o,/ö9jmڰ2%d˶#IVKJQN.l:_t5\1{$1!؇;BOW"Ѳ[NQ,M7 QP1|x1V%D`4L?SUu0d>k'/&jF% Cĸ_,bXƒNO'S/͚f K`QJP22p} x=JUIUHT*,\J RVez՘ҫ(?EdRdVTTu:3MXeP# _ԩWz Ѡcuk{Ғ֊6u4hA&:§vʮG ;->`uv˚^8A:YyI2TIHO(ZT ,IvׅHx:bPL>ZaabTttg&%jIczU jy^1lB0o' 1lٲe˖-[lٲevP?Kma+1G kᮃNg,|cX .J2,G`,M{҂LxD=?$&&JbEX$dwdc]Hj"ɾ°ѧm?H2?q8^ H1FĸX_up

:3fp{ϪU9,>k<ԖmS_ -]ׂнnk 0kj'vLM+~S4 ]9e^O* +E8R?CwQ[AFI`+9VH.ZuPr>72gcX3D:c}7 t&|TZٺHt1ܮRLT{TqK. ,ݰ~7,5=c+IJ6ԉmOlqtq$*ۿpֲޭ~*vd딅7*oȶiK`yጘVUUVIQOyw2'ذtY/'9~u!9/\~%A^g2Zuur 3&9El |,'O-HK˼C5z-jb%Kf4Ͽڔ[&ܨa/V? /UCb5J_=b9!f g ЄZ/Ov* h¤GןWfшO,~K",*""98roU |mE ? ؍MY@"a!KUȀFyߤ'lmvQk9vz|Ak wʲ<em+MjoGV, =-Zhu;:XgG=ؚ4Sqo IDATHU5aഞܣ['ض゙K^~El-UwnUiwFHl~Z& djw(\{7 GEǴ$%rD5{ƒf#閷 Xk6Y.*l?6$$| D,z,_1>S &hjD:0V-QRܽsϪ3a̦A=+y戀cCO5|7eULib~|牻m˻K\##xJ=c?:sȽ [xȆsj.aϨYScQdžWPNAvjJU8K>aQK˱@FͱI' [V_)C@iI!81k:5 Kht&v1ͱļ$jE|]b >'"i͌6$:ɩmtmgoIĄ[4{(9;VسV0/3TV^SŸ%/<~^hY %7Oe+Kb+k~ UcobtK9wNvzpk,Y#.L&xt8PQ̞!CT?6$d5?QR',*"'o?}I\Lwb^;ߊ;;f l\EA^QӸO(;˛igڭ/>4cI yWf},m`vxW;$"Ȕ`|\ Z ˲ )DDEN/n݌,pY_vwAVUZuسº6@incM׹XoTjUg2ϭ&Svhհ򐼰_::xޕ6fu쎥1I{+].ILcl8boQq`SL|~y`MEϤuekm\~-\}.MOOO|_(/l]\J غN e>_lƢ، dizkb3w%|wC_Ai{:Zv|\u>W NyM꛸Gm2"]%z\ϑ0ׄvO}Uqg,GdEw8p3wF"br.kCƪE>n#V]Kiq>UIAj^Cqf-;5bͫ?ȗ1՛4C._ t݃)a.E4/%7@=ɨy7lױfsKiL6uFg-6sؕ1;Ԟs ҘC{Wry_~B:]JM+ې*CZO =7l=J^_==agD=Gz\A<>%%c_Jr ihjTjxZ@TJM)$j-Y#i0m?O[>pGK|`mX/]جd2_׈#{q$3 }u{a9=NF(;&xW%|gN_??߼PaꞖslĒHmT-k 9:֣W!!H~pj2pZxxgce'M染պ-f\8}6TW_Ħ4e nh{{NH? ֍17ФnI(55 yJHRW]4zV~Z[YϝW47Sd(GT‚g;j+( xEacuLunhlH~ѓf=p|L"H,n;wwf*1[ѣGOġ#B?HKNN& "egC&OT'zn_f  aOEEE"2?v)6M\ +ST\\ , |,KC#|7M.KMeRyF:1 |Ѣ?.[~sI /w 8]G/:eMe/?pezv|8#fUUU-GmySn ;6,(wr Ow1t-->rT%rIbw'=*|vgX/q5-# ֧'  22U?xTKN~[6 [\}9Ow)3Kתz_[_{nͽyհ#SoJ$KDDr6q\}Y;LF-`m= _ԧjPgqo󈥪ŗC|d$Sf.stt̘޿%`4w-W28--H˕ROvE| >~M7'nʍ&䄯emЩ˷n=i͝vӦvC];Asmzj0a@%tHC—=}IL;w'1t e\'1Q/j)͎)<TH#]e6WmVH? ؍R5s̲ @K&_2qp.4u/fLtK[?ǀɡyȠ?@*2-uT٢YiIIiyLUA6ms[`3xѭ yVX~WEVf=ths+SUN=fήQw[vđ[w~NZX~.*yxzS9T , + imX15 )tw¼FrݼEMdWrsĀ5<5}S<^h,f3f3I߅;naKwR8 D1;-˟=;dZWSgɷصbc;5fSΓ{ؚAw[V6L۶mZB~l^, + ~_U|!&+g5 P&~3Ottr֏-MiՋ6Wl?rWX|փghxKNԾs7< 77oA]>eVe~_v 9,uӾS-[2J%e4`7JY@:D4GRL$&*||h _MMmObCǧti#G2+?7osp'˷&R.wn%NG;OL^"qۣr3U eqXw8qE^-+HM&t沂W6T6hL:U;3:yNIAh_Q5.'N\߈%@ݏ|j&YW[͚hu~Z0h6ycH|cd2I!i86n~ƭz䶂k7>Լ1&c9l g¸v0 "o'5BJ_Qe> 9ۅWj'1|[?x]܏`ʂ'Mu9?!>l#Gyl?ŇDD~lʓ+}"c˖;e#Q>Y;=yAkֆ1=Y&rN&!eI̦2㭑TDDN%.ϔ"V;Bʽ^?@NܦK'](*¢XR>Su&leE/a$jEDEʳb)z_ݦdX|v e+͉HhXƹZ[ږ=v-eiaBҊ;30e*:SbEDDf(5x׆ӯe U.u_5U[kO]}L=0:Uֆ%"b˽7yhK*6coZTk/ lH+˒KmQo<|x*(U5z7rW%Xj69>.薓A>wiQ>yhfοE{//ZimZ\zwI}>-㶦UY+1jk~Õŧsݓ;0:tֆylfG<ϧTo`6;4wEDn*Cΰ4gܹ\"y!!!%·76DK\81e3JNf#r쐮rF*$By7ٙ.1::w-(e+7ouֶ;bxW-,9)LjEA8@Ƿeck;?Ԩ+y'BJ9}&glkd3/H)eǦj̱?5^UV6:ZGym,V'fҦ?iJjF&N8QFHrfQ~NE6sN_jm})y>7]ttdԩvttvQ  T었Hqpν~~֝uiIFC4q+o1*?P[]"ҕhutt.Fd5TvѸJ9; _%JuTODǏ?=~V xY/HFʛT|xdK.]\*w!X#23#dYqstGbav?uʕ+[,G9$Yg&jb" qz:NMojlXb8gf4.3ZL$}1w5ݯ*N&M/$S|gɩ["VwV:sr_:QJ1<벳DDMDC>(EKJ㻈k?~򁬮7M0aZ8J1>DoT׋yJz/N:ٖcw@̴򉟙 P\8+#bfWWY었>%#rr'{)'Kz=Z՗ODԸy~2-7S[3W[2Jwnؘ3Y9|:vR(!1Ȕ4[[%P_^c)`f'(T_מR'ܽHD WGqݬZkV9o<{;[:11^s dckSt;ǩW~},Yͥdq{:; \Bw;+kf!А, D$44'ij S1B^3GG4i@(_7ǯ}y&"-){܇Kv:^RV,- eZԍxC3UV@aq$IBrڷ;+f|6m\3e̺];293~sm *>V&[RS8e}5f-Yя'ss'_sDivjנnm8%?y~ʭk%]T2üO*i|JV']+5OPM 3'O<7]ioݸq㡈-|4@*5p`-^ss#skGLFD\lR~ՁX.'+IAMRg>2fmf\5cmKGn\*39x;XҊ˔m$26P#ءy֊W;mgWy܊IB$)]7AIonmak`fY H*U?>1##{{Ԫ?s>㎃+};&7WbDAu^Gwzx޷s15JH~ ,}*8׼9l'KoiWWj$dzDDb4zZpNtIpe׮)6׼1Tni߷^U6id)>&dF%A!6T^Z1OWl镫D+]e9<}5fbS?1Kfޛ")ڼn}/FdD.7᭵Q5Ͼ 4v̫0q5NY۽Ճ h *|ưRaа%ZhwѴ IDAT;ɖ/O>5)Yv";y X!Z(-Y2%6e]Q1*n@lggS7 3_:l{1mW}^sf g_ ;Ui::xW.j5']&if§f\kDK#s+Tec_PqjknDD<\*y%s߯~E'q֘d^xx{? qAŽo=9a3cKׅkjv&OΥLAW(iKAE=CfZtfV3iW$8JdP%nKd6W wl*8Jqe/.q*rDD$mT7a孍eW`r"R(]TA1^N$}܀(3<} -|h#.E˩.8)15|Mj{:'?kjhxv>l,>J[-ˑ9̉XƆ72CSuu<#]`\X_Ij{)9YaBfsVf *hl7`s_1ېݮ6_9̾Zܖ,f?^2i_Cde׉K'AFDDgoj$QiDT5>sUG̻ӭ8Ʌ0j,ge;iL$b)g`Ϭs^'1 m֨qZ,[7&|kXED8"")C`z8"e/!VrUmN"Z ;;t<*qS 9<ҽХeddI IT}ՎvZmMSZjhlqo(J8YWY ё#Os 0[<_Y=ƉIgEݪm@A$(#yϬgs^˘wC#yj9YĠg'>k.KaWW6HS޾[Y 2I{-6w6fhJ f jvtZr,YQ<;stejԫfmH$yqXaJg cWf>7{;qaKH;1C]kAڕΎ=B~8W›>^gfI[umh[q̹|oThضMf^9~R㎀%5cuZ*n?cɻuw'c컝8 J~qquGNmtKUr{L!^{K'nKOqv}D*\{Wen&n qyT>ec#+ 8xVF+|-ѐDo68ۜXQaDQʵn%˅vHЂfHv[""2&8<,[hY[7bśm/N(rK6mN3or]6V֊E}jd{ Ɔ G3=Ugd˘ݦ$mϮwYoDDw{2ƾ۩^BCE>K.?&k٦Z#cW=y=ޝ^zK_elk#Pyb?(u6zڛvs6HجJ[;to|qjPVRODexԘJꇨD]+ZZ|mQ;  ʕŦK߾yK֍K$+).? Y%Vp1߸:]mo=5V٧)TZ oAyN˗Gpym:y)I<}\~;g_uخK3UI:+&lt[K 6iWSJUC-wh`kءg;Ǩlw'2lacn 466syVÏ%[ңȋ[F~KZH?ssoM\/m#UJ2EI'IKGbav?uʕ+[L}N($YgD@tLh _ˇμjh޹w=ه"w w7<5c5[E\_`gDDd Gݗ/*44[uʻL:/?ț#Qҡ #[Xsѥûv}*'5'oގx~oU3]px%F .\plR%tPיvW7=98bMjH_eXpѣ >(YCѡwȴMP'+Gj=װƥDD2͛z}[PйW4s*?g\#'C"n葿=A5Yv挈L|}+%D&l;sh5KFJ׬QU8UXq:;$v,p?KRoBz{.rꎍ}+9"%k)bDӒĹ lSB<K""֫حĐCBlAIOc}|J="5{Y6D \%y3v棺3̙$4q-@RN/8pO;`TQ>mj?u2B6-<|/<<p-G#+d š.v8J9"rWI=Xph2'"J9tqyne֭}LuCwS<7|ֹ;-vM1yq5+5b H(ݵ5~tNYcj{`໊|ƯcLP}| .p3[:Y}?GܼӲo齪8"l=MT}LȌKBlf,b J\MU&[2/ArBRdȶ -٩_V ]uΔ{lETOXAIIJR988ǒ><3}V(8ROIDT9F+zUEETGU1QYf\ʹ1JE9uH=8F8=DdD+d#"Y?FDrpq@#MvbVi|lŋIo1.:[N.o/= 2Oҕu<{᳊ +hU -b٦׳we  5s6-syO,]/AV*T^U=Y YU&2+HȒ>{FdۨQlctޞe1sU&v贮+qIϞ,*6ꭵv&'2jZW|LLM)g_BLMqܸ}<{17 Gv53*bDOOvP_` όrtUuLT#גVR;ƖHr8uTȜ";1mShep؇c 4YGaXg͙`]{~˽R2-!^st븠v?[Oo8Ԯx1V Tj­Mem+Фʹm0g>_s/m EׅxVJ'粱RS+o,/U(ʑώC&V5_cwwWW=sfY=z9\ 7N96>j/rèb2D/n|K@>O$HyUҭ P`j(054^LMS#C #b`Dr!\ 8EA<119GEA2L9 T9FSOr2̪~8b11N9I&cccLc<1P[0x/qg^&S]r%?3[-8֤ӧo:SSd 7o_wǔAoUvgks1-NFRvDtcmO5wvZ;! Qꎊa6=*E3sϠFssm|HFwP| n},ptmYӾ*do.4B!svv&R<~p UR Oq8wUvd\V>"ƩIf#N=Vɪޜ*3lUJ8ǘ:Z]VOOF3+rL)t:Vp;X.VeuK-0.pJN-@2U_&P-L3xg֎9MYc6[;n+֍ǩ_ I {oےU/'5!+WǾ5*.lӏ܊K@nG:5ǩ)ͺM${_-[2?pҼaڥZu:ʟ_>;AhN09jSc܅ڶ{1FaFHqV@174U/?5&zpVx V1JG #)6˞_9dffFcYcժU刈SVUs r,%0! ;,; ]?yPaӧ*??$ LƗ kUq)xţtȮs&'~cߗz+lߞcvl0b[7E}+Fr* rŃˌic<1͙""gqBqDrN=Gffx18B!82]~dZN˚S̜c$'RV4I-SomrJNA LiƬ0"Z ;;G%m_t/tihRSZҚ$hlqo(J8YWY ё#rwgѭLZX/aQH޹d25),0[|ileMȘZ6s?rxg%eʈefؓ=q\VX2{Q=`qrVkuٻtfv ә|*g }HTn],JLn//*>mFXS@dx<΀O;dè%#2lOF̒4'TIYCj379"q2ɕ29}rC2.39ɦY=,%"~sj_WUJxr1SϙC:KR -CjeWea̷ x񘁺8T:UoslTe븩9:f}ID^pKFL)Brb9#ZfN,œطBf8y40e!d P22'&=}|br\<[ i̔:%'8jPUe6u?N 26iW+ɉG5l8%٩6kXci!󴣭zFT'jtd1ϴl9͵r2N 9@mVDqL1VZA|0h/SeG;ՊY*sd96JƜSp ZjG̀/;#"xggYiV1G7{4br9d$کވr>BrN!!LsL{_:w =gd-U9hYǩiQޚ{QfsaRnT8g>[Hj 1^9:šUeoS1k4Q&bӷ0gRNsndȈqqVUò*ZLRM1 rpZNNeęfRofV3kWdZ;520 TASiL6ZD| .gPnGb|cj6/:Y|V7s}VvzYmLՓ ] IDAT7YgY 1e春578N Ԍ%ߤQS8"#NUSd0'1]@Iٽ4ÍZ2|#I1GLj),[_6OY{+K[g:F>oCSQƥJ (46:Co)1V:>ŀ/Lד'rf;ƶ"vt74ޞ#^_VN[ }OboOZ9/| X[wtF"k{7koh+ޞ`%rl̿AX Atc@ p|#x%X6ג=[f}/NHYo{׶uITfʍY8c}ю}u1>>uߢT1 #W7cOEGGGG*F%2 2bg`de<,8]aLruU[ȑʈGrYø̷AX *F6&@ pjݿgc_VSV6 w}D(e guGQZ(qsC-""t1٥]j,Xjg hjpaw'LLD;m|6ʦ1>уrvefΫVzxo<{񃓻lټ)ҵa93+Lih퉈ȻF`~9[kwQFUu_wǧ`jjK"] )᥻\ot0n}Y 洫ĈhSo'{9Q{wlmBDM_tؔq!*e(@~HS޾[Y 2GL{-6w6H艵2Gb\HALOf<>q̹,-0RMJs38N(8Rp E)dKYD!$`!Ђ,,D$SJj Sz :6hPQ|}[wǯw&UR.S.ɿZERVʴ7vMn8fu4̫VD$'%%r<+ffm>](§w.[s5ul_VӷvZ(E)7?,Vŧ#89Zӻwo\7kj(l֬.}vFB~Oyv Wυ8>*;K^\xtZ|41FD<OL&#"yl\i;i'm;uz¬=ی[flkUV}[̊k1uƺ@o #m9[1cI$ܩGN]^7]7j㖤%$$$$&K@&(pve3?- 3-,-°WOA2>UuPQIag}h 4"S囸8*eWJ3/c +aseaiI)"U29>NJV ##1t^Yh@BK9GގxԩzMBArm|(ra7E{c˗ragjjj*Yڨo='Ҳ6YSjP(-<2QJZO4W q޷cGBkjƊ5.?ڻ)O6SQ3Ydc(.>H?'Xx|j%{^׬%=֫)QѣȺoL1@/cǚLsv_O@$aiSVҪu,y#=άbLDthT-F;U*-_e!u3CeR+7ol[z*4|OF7Q1!3/ էҊ'xL=UeAtc]Ai+_YQm +'m,ۯ\ R|"DDi/?7 2pt6*ꧠw@q^C;k`>|=jSl􌧏a 76Y"$Y[gXl7i6.5wTC=jźuytA~hf̍4gt̜fIn=g:M=N:|/dTaQoW+=֨Z:6|% ߸|vlr~}t,}| ٟk+s6㉨f,E25?8RsՖ3?v>x#MCK,}~QvT>'_6ъf١QzNm.-##MZhO7+~=ݧjb+n޾~[_Vm5_~-nR)R5<3:ro\?i.aQH>}fDp|Rd 7o_wǔAoUc3]ӈ1Vwo߭g/ys%ݓ25C;[f̑?y>%-qBM G|EƕIN\uo㹾fkq8k&%#"B jYe!ˁ=bVEs|[;0jBg)1 Cqg(w#%"y$_OxX U›>^g $_<E"(yW{,2ɣmu3QS߽DlXڡn=z>&h0wq3s!tk㘶Xڹ7Vl[P`0x桧ңl۔7\.]'\_7MYcWYNd}S&B眍#"<6kҖ>uT[&tXػ[FuFgM<%'4P`Zy- =ƈ; NsK|񱔈FwRݯ Ր\մԫF*k!xgԖMg?4N O 5гcԿNkۻ{6 ~ͱ }X7zv usй?7j:ĥN`n5_ݼfN^G90 z:RRYȈM}Gsc"J93NEBͿki.b5c=1ϰH-GS;9hE%8!C|v UfA\_]uRB,`A O;1C]XU{ zDsk{KnETml<@{x`{DDgTƆ}ro拽=ݿ%RQlk]V >zv4:wg:־oUvnukL]= 9yg/jyQռ{E?soո| /O>8Fku{XGyyQ.9ƆM_ݙߞY>|ڗ&* MCg^Mn4܃sW;V̻wl-"/ 03um""2hԣ INAƭuC-nKw:{*יvW7=98bMjH_ݛ7ЅGw54GxhOˣrqau^&${.H f 3.c;0.Ԑߣ'm?q_nNb9.SU렭g~Y#*_VP@8׫\ZW^=zU&DDF}aeVɺ/yF_z2&ʠtmlfos}׈~>Wg.Lﻼc7 V=~8~?ۆe jmYIKFZ.i;\Q1'{G{ҿv?'A1#+WV@…DDz,G{A;d&]  ϡshg*M<<9#"_D Z͒5k"z2OgϮhiOE~v*}|u.< !?Yf]6`D|>AEeH~Yٖ (CGy*ט7YůZƿ]oXWm}CJ# O_{ֶUw)@콰_U\o\{ /݇y6]o;QvV>n߷IڰܫOD&DTu3sZ> `WwCggC234󵵟0֦"#wոshadsߺu6 So6nfa9bccJ9'C`Kt/4,,z3];QDf T++ȧ)y1sc@@+"};w111?D")J)\*܌q7 1Koޞ^/mLSvx_)7o|'NDd3,uc||`W?^Wič/+י'jg/+7?Z_rpU6=Z_=+F1esdM_<]|iw 3asDz߿)VԮG[;&yZ:4s[up~٤O}Qnf_F1uwWCSf9zΓwеzS>3*uٻ#:;9x~lSZ4;o'&:21{oOo{"eRvcaOHKsBJFb3\HB#"277Ti*ћs3̛Vn;kwcK)l͋R_I+TC)@%|N r"KD?mGՋێUTݒ+EY)\83& cCV5#E-t=ʷtp$Y3+Z#\I1Uz)Ӯ#r2>OX#R]ݭO[l:siO){gL?oe?;Ey:~OoQw__Gѳm[6ӹ8ʩu}[MY<$(0_UȳΑ.&8KM""Zԛxƙo?nKVuTzVք(C#/}jT\V壧%W?fzo\wzIͯ,؈,ɥ˦Gzk:_L kۓO?w/CBu_?IO/9|/}7[#;޿}BKa<͈總- c"vDZ⦕Oml}ٻ븨6jV,B D{mlw׵W]{-lյ sյ T@1 0uƹsA6#HxyV۬O_n}""Uzh6kYo]y9>M]8rUåP@|6g. Evz݃mKDчNR̲-\zu,clfi%K:rKĺV7wX'S||\Wqou[dQXv+^ڸt`O~:*WAM{uI+߻~U%fz7 b4P)ƺz-g e#ſyC$;G}/qA115edL55%u)hIސȣU+BfOG5mdG>i[BJ3Af#g geQ}|&%%CSʵ]L]/_CTgoK@6v+H.jMp쿳aoFfoP{_2~h""|82i \2߮}f%_/|aek>|g4&RAFυz΅iQ+Gȯ8!'R^/?\ˤ< %Kj{͓M瓣o9_ pq .RM6rKHcyN(;+G0L+Lč 'TEYI()1>'Ť%W#06,+5m@k8,E&^_i [B5ɨ@%Z6Ԙa\ կUI`56Fg%"sgoj6c#Z;gV%""#m_y[ɟ>5ONh[sPw/&nx`f$hmmooV]jtkok|.R;xjʟb<ϧcmz%]'(ԉHn2wMqśo)@q{n;$ÑNuvJDէxнhҷo[O]x YwʫgG,Xvn 3of]1i\uΏ6-hX[Vv;4::Кk?uruk'nL0upoct} e+*A.V+ײJ[9{z옳'K Rպ]VcdgEk͘]_k6௱sdY[2-\4|~ Qʝ-?%@Ew݅jׯUH_=g>q(Sws-8|(2錪Z,8fwͭp99g85A*lKFn4vZ忲s\o{nj+8{6rCb(Kر <- ]=czjwι(<7!_;5{p+>}]J{^*QNrj(Ag[nɴu?ɛO2GfF @Ÿ~66ٿ)$6e6f* 7Tj Z.d=V]}n1帚 C^u;Jz#6 ,[aq[rwgYM8WzEv+| wT,Zv;PQϩqugְ2xm+9wYZh+fs}gU[L:t3W;L2G"+TS5]L,UO䈈C+{׊ש+*R[i7~t\DFbTdL!_zZ eDY2B v^pC GDU7[X(="VW۶#(i#ʝM>3 c[<W[9qwOŘK+2>طe'cryzh>swRfRKNaDkҹGUyQw_r?wk7, );[IUg*{w2!{eN{x-[jFwj48,,`f2}_$С^m}]C-jGzg]Wu7!1LPFW,%[i']p'7lg#4xo+<ϒi;S-~e59yuW'BF*[kcW2IX/bDĈ1ʱ F)w!X|+hD\r֪Xy \vyg2p/wRS߯wWvxzHtJA-lݮkW._Uy>w"ӋFK}e^n׾HV?2e|__O+ط-|sݽ.4~%3 `a@ȃvg}Wz%72yi ekbYǺBߜ=sCfmGI |\cþZ7v&5(mckk͗kGqjadhfШ~[/ؠJ|YARaX"}Ok,t㛎9bNulM Ͼ!tϸ6NF.k!WDD>şR^ҐowRxBUoJ*"(qH,TZ6-72c?zOitJ/n.W_=jЛMդ6b\Mք6el5'#?Ñ́uJ kkF|Z(zER/ͽ_h IlSM ЫG3\g1elٵ#x9OK>zxjs_B/եGVi}; o{|<-;Ģcnh #ͪe\s|+1I+7/_<&n,:0߽Mw|=#^ZU˽#O8"k3کw;κAE{t?V!vN@fM+}ף%>xED,bƘ(p#T6p9bE]]_;rRԬZJ!D:n!o%؎>;Wn~9l5jh8i'>ݻ6J웟|ZCcذGYsDDs`59ɍy7|^m!.eU?4wԭG޽ZPɍRJƆ:-NϧۀulXtjr?-$v44UgZjQF0yy5o[I_#ȼF}Fn_Ղ>_IU_fYNKGDj|ӎvfY&}ɓs_ Z#"S立^ُ8ִaE\~@1@>K!RkSm}8o?c5;MjFA׏5ݴh My/^~gח^$ћkcmO%]ibMݓ[}*M""v|ߍ#gq4H)1s kjl72{Sϊ6qJ+8}}"27 }"ף$I=ֵddhhqWO W7WcomeL?F̢"جRdt77~ĮS:z-}|1iYy,(l@Þ{+o>k ^,r. ?ռm;7QcnHza>'"?6ҧ)2* xWXP\և2ݮDZj nJk*XbY[$RVRzZL|o VuJ|V770qefeebDD^Sџ z_lqъ?]&(#E.عM \"63cDCe)D'ڦUS#><ӯIOsٽtZ|\_^ '7ilIDįamƦM% d,ɖܧ(sBY1}~s!Z56;l&\pR߾>Zz5³^~z#ʜ=۫z^'ɻ*9#ס Vo0o{>oƏָ#[_maH}k\"~!i7ߨ_>N9*D)g/ݼXt#\@ϭRM&wakAddddLD_3^#"#׉NwrlݡoO1ѯww_gkPz8:SKr\5PMV&xDA&1M;|Ca+KZ_u~[n'&w^_ӧSS]{jg3k8Q~ 8":ptz#+3ѯƥ&j4vqLgOHF]\l µG^}ˠ T310ND6bDD|jDܵh;7<bMErDFC(*ϗ#"QLJ2h3=+=xNI&SGAV?RR!檆 _u4X{>vgOБ)}N}I%JFa`em\4JM9{e?vrBݚ{T6Ɍv6cG(clv|T˝ۮ!@"֓P:f~ԅST%Lc)aKubĻ:.K;~zMICZvbpRO] ǐ_:Vd+Huii_jKɶۜ6%_Gm;h̤Eg:8 ;:ijsөҌƞ~#ĥMFv{̫yiݽKD|2239QJ)JxZj$=X"f;D36-WQ ;]lg9DOD&*MD)H9:xD Qvuj[Cܻw.,(#H3zxT@UcԩDDd7+qSlj70?J3ޛ?nVPD!+ x~#~jlޞZ~8_{>2蹦wqؗ:ZQrAD2qꬼ0._^M2M>57G)h/-5#C{ ۔(w#yL-ݦx8Ĩy[voEUi8yk+eG4+}j%-d3_NVlGd y"ZGӦM^]k5ij f P˷m7F7" =4{jwt--5Iz#6 ,[aq[kjN1|tS3R:[Gm~< @ve[_,}y=T*Gmv˯T]bO9# q*q,yLx(6TK;hVjۜt;\ZZZ>tyMkhhy''RKl@:'vlQ.zXjTN{;q>:v"<((m-*30##eܫJЙ3*uKaS>>{lT4~6F 62[Yd,טc[zp35 a)Ojeqըxz?=1,! 37} Eҩ6Z4Ç ]cit27|W|5*}α<֩ 5u9hE$yx)]ΣӰيrsBz>6CˬZ1k5M":lMɡZX'7:Rc̝ȍϒC/i0^&<'a6]3wɶSwÓڌ[fܒI}7mǭ6^Tr8L], 0HȶѾXǫbU[ж$J.;{|lNCZ:9799Qmo4>9[{v;xߣ,4ܺ߱ءC;=;4}Xe%RmVYC&"g]k]˾ZLz{3֣O%Vvj||VVO@ePjYrBdޫucL2n{4#"İ36Pz+%㶽\xu006uYh:Dj}Wټј!E9~~ͧCQqwdסEBnw{|z,¨9:ŕM=!E ϝ{@ޞ[r8'_9N4@@l{Tg&QQOvǎ.Q5G nF/DDļ FĈ{L:}z=rG{-iyi{x& k7غUv_T(QqPO^l+2hI(ݲ>|Bd֬2={Ez.b9"p#`@'ʸwT2UO~6iVO7P":::D4lF/+|>(==HQ܋C2oRE1"ЖP%f*,1!#2k;iZ{̼_ hGdJ#|:(3>^@diii-GɊ*cĈ8ɯl!rT8v*JQL(N~z ;Pt_FzUx~9!7`n+7h=uHM}i|Ds)S)iРwO>%}i*,3))4^L#bȴr.ʎe_炘;lvw?7*Nd7g0.\q9VTuvbP#(IZvDq^(Lɩ|ʫ6NjugdߧEjԴBR>JW =#cřs[BOkwsvҺʹ{:YQ>>h:`LF W͙^jo+;FPM߇| <϶Iݹ9ѵտu}e7KS(]q(0^.`p [B9V-׮r4?ۑ/q{,%T2+H]=}4ύo1xaYn?yB֫a sC*=?6Csηd Y7sɝؚ[94}-#Z3Sƾ~BXG"to0'(U 1`UJUp_a[ngblQk_Oy6, -O9 ;Sk6cyd[MvݺWj97d7yc GGַ۪>jyŇ1KYZCr!fȥ٫"q8T N=klݽ{՚ϺWG@{G1E[R@9~vՄ_vdu3떲 ^z'Z&՞|)Lhg""2ū=;$Owh:|Z/mpú Ų6tk9|GĿ˶~]T.Y,+:/9|ŽT?ݏGOv"͞ n2zۆΟV y=b/L!_Ęhyb3 ݽH(Ģiv|zoo?މ #քפ\ў:sfÐ3f, 82w^7rnfi-{Ӌ :{OO~Ʋ&ӁODn>>˫7Ҷjj+YTyS{5}|ךM'x|kx>JWcyH=x2aK+ q&j~-ZaʮMS6'ٸ[ZSvՈH۴)Q%]FF6vvv25ֿw]ִ}C{(g5lbۯn/7ehnnȗ!UX UhPυ2ˮpcrap Q++`ȉ!;|98_v2%O}$"##CɒqrsQT߷/)Kr Pq( 6 ߥ |qx(=#""]NT;bx;_v 4y h`| NxR~$JS=xF;v^%g"n>BW٫FӪLryM=uz ru%susη2(ѣt^mD+ {{.+7\kHHݰJukkG j۶[]s ʴ rEcy~Zm}F*ݩbdo DDY_c)ϻtrx/Pr޼J&WfᏛC~pXY>ݵɠ[ y{k`Evx!GWK4Ud&جb $zůѢqڧ'=5Z/ 9 ` eM̮u~]Ve3#}/Ϟ Yc3ZC{eod>;z_x!Û>RtDJ效LM ɶ)oyMMM-^?biZٰU'F,zi2{ذŅganFw$ P3".3tWF_zW yKu& 렅h{fq IL֩OMkJh1K((w~}̺n9san9W<>iPw]"ܽp9A͞`h5gG+̹e:Iq2?i+'幮kB(?3n$jЭʭu̵nzf _Qͦш6^kk[;q[d{k({NyXa{vĉ8Ot;aȟ 9gO(H7oϽψmgQZ{VAݗ_Ywuiu䞫P f1S- I><8_A5WR5rwuدbU J&YSggǭ1n܋7JݜfбA2LzZZz5"So""uڵ8dGpTYP9l#@Hx* E P fSd[*(Qq!g#9u@g/X|Dr-/+򃘥1ץ*~˴(gxhŤPg0Z%X)unyUH∸ %rw0"Uw\?bJ)\*YK8?j!"U3q]@A!f A^Sb27~oaE^)@1,ʥ %|/y&!ft)-b8R){W9CC\ZP~ذe10l!Zo2S9/,Nc"l n4@ h<˂3l;J拫T M?kV <^P<_ʠT(׋1b)xqq Ypi|8-WȤC1Tz0B(ԋqѕ0%2/V&Yx0">ՊϙTB uT%cs{4Eidc?ok#msYUTA&XE d.)UÛ4ˣ:O%#\YpVMm *un1{19PuCm9'0IKᐖNbNjkj-lz? ">},n>w,v#N>" orrmY{G):=vmk60ğcO{fRE=]]Zbˤޛi}*KUNx2uW,+xiFeYzt6Ē{⁧N?pcק7oQAVi>?.{{g`w.ku8㚎Ռ^ieSVY *<, D~L6NQcf*O[uH.K+#*\b=7T,8|ǫucL2nɕ'xKϼ ,퍆gWͻhGDDܧJw4;//:1{Uc>J5nۧ:!"-!ZkRW%r^(Ŧawܽclq Bn7{!>1ҒѢ!MEyufnľ+˿(5kpg^+YRׯ_E4<Љ2..xw0 ztՓ_ǡDMS33DDȼaC;6EɓHFFRAT"r6<|~v=\Oѥ}ssad;;!!aDzΧ'/j!+ʜݭ2 ]!|g.,֔; rs,rjmV'T O8.}K9,\ıx@H2477K>!UX tJ"244TYbBGdvҴV9יytTg?ݽ!8P"c+KVE'-z2Y)#sᙻ}?p-y*DDIA˴w>m(A)جT\_VRA7/KG\–@DiqIC6|3m[2J| Ϻ^:h!PGDM&C$Qon֠W*DVM*΋|wpgˉBZ IDAT7RMdd7ЧiP/v7ɡ;w6'"Jӷ#ѭUw>OL%~k.WZ4~}xikͭۧ=ѵedFzgIE|Jv7YXXݾt3(>d?_Mo[@aKw*@%]]#֖1@e-$ӱqmlvBQk6c>2ح:Vw7FiImc=>:ZOZ62Aa ;K} }<4]߿+<[tp=k_oY*+΍G&VzDT-ӏ=2ú LRݼ:N(D)_wy4>{pZtlU˔bw9L:N;H 1{4>WyxwAw|'`^>,߾I"M'"7TqomVCkʹ5N:7" n%]CCǮp.fl". O._{9j|%^u}뼹zt8SvܺNr9uTzIcLLxn֬ *}fCX+(S%%  U2XkYa. ,kqYq%S  KwEzyPP~~srKqj@g`FF('wOW53g-yN:xz.: *Arw2m.<2m0ei3{r!?~/\==(|S9 })9+P讜syJ(bvC*髧~yxL'zc:: +hGreZe6 -k-j0GE{ʜj{r#S8NLf27?#"X~=r0}7deDf ]aQ %UY“'o%$e0m[?6i+uʿR(Τd`ON&21VX`)[jngZJǕD+ q\ɄOJHNEr qMpu2ʽ1ѰY neIǑ8D'3QQ'q<OE# /Cat=8Q94IrLE'=9/q9?&V[qĘTl *Ę/8wlKpR&LDđ?IM&1QLOv00 y'`EgnL2{Fqdk,܊ίɈxʼn28cL2(;9N:8qLDF(]})L,14O-gLה@Jo̲la=L$W[aK(W]>O ('VfRw5ޓˮdVbf3J=f=/cd'$9(g2G8SzB\/Z ;*ǤAEAH;* :IRIِ(E9'd#:1$Sqr@Qc%]r|$#m)#B"NzΕ)=m0ZcS98`1TkNRqRtA=t9IP18&9 #P$_4g3QtPzRM 1L2D+IfIO7IGbj:ԥڎ"{ˎ+nN8%'8Qr I-GBQG]ŜvDɂL}~8(Z4j8&Y8q1.IE":n))NgSJBҎPh ``3,+uvOwҹ1;v@rfP6Kԏ4?f2҉j%S 4¢Hx%rم:RQPNҩDX‰:^~ ȤֺDy]2qI{$mܫ/Ik#ֺWh2$s0,협Su]J+&h+[h7Y  *H"QZA9`#/Nnc߂ID*˪29zI9G{ΤJkqH›&)˾H(R]YIKJtKj-J>>6+)/3P{X\Oa$R_/W ".MYqW-z7'~ߜm;)>Ulj2gՋkWdkT=i=3YR/R~&"ZG#$%HmH F" ZJd|kZPJ+ jorJtwCVzYZ#Hf}cDM#Z ƉI+y b0OA֥y?Bƚ%-HfYI݋Mwm2b\ L"I.&׾Hf2S#0LYp{kFl)v&՗A8p^5NU$""6E%V517Zn&[p:5k~-H$iZ&(r%-Na4ٙZiz ,%u>aHU: A,+ jw`Ps{?\Ϸ!,x#9 [l D^] +dY)SZIdY1gҙ+2JJx$+U`V+IVQIiliZkEhZWߢu9NDt+["%ߙvSQ8b%\AKI*%J)RK%)ؓ&S&b%s U[5/C04bRfvqyOG"}Iv:.WL]$٥&[oDJ-q퍙F4TqAɸTd9n"cLUHvnK {YE C%瘤@=4GҪ]@+]by$I0WZ4yeK"aky4*ϴ-樃EG#? I%iQTd]WO7"K^_LDeӁ*LQq]II alTϠy%4ob~[}jx?^y6a լ':郵ڵ1CT_l st,դQ!5bJDC?bQ’:tT=8^޲B !N,*ELٝ0QIb`/CƎHoitX)VQJeɩL9ɩL gss*ʹVε\jiK&߮*?BGdܢ#TKji\9l3-rr!%VZk#CT, =BwwC͠Mw_lDe\oo4N$auR9Il&>?7*ŋ#O q!(R8׀Q=]^a D.,N LBBᜒڕ4:^u$D6$M{:] %VƃW紖-"p04^x7Zwsn[ǗUӘ~)ϽxIW˸=;tQ.n̷7{=ڗs9yջ+8\v 8n,vӟ:-!'T#azSWj=h̏qcw3>Y5wFl]ya_=f/q=_~|HҚ%@)AnV)~UAlP+R)V٘c,<(WoD,e!ETEK Q` =Mut[GS2glt++V̬,Ye fJ){YZ I۞KuTg)E?ZkIy%ڪṳ-Rc['@cSf9iTFCMzv/n~xO;F@=Y_[ҵcֿpWN>%Wpg}97K_G _Aϻ.;Du+S>kEgӔ?m+zwֲ]Ϝvhă:]ۈz_XκsGǻG?~w1_]CK?>Gw}5^8?M}?}~Џ ]A%jV٤i4<6LIz#_ܡ9J vOӉLR g/dTRmrߩ2lݐl$ǶȸdfIDybW%U-3¤Y"+伎,IZT+)>+)hHfO+\IRj%#?L_I4 !珗h9W[FvE.j`njV$SO}ރw?4} \{:oy瓧oCDBgrj?1LOkzeqhˬO~]?ӿ{緞.s7"B@95e;?m6stͽϮ9bC?=f"уof @25>F7ҤMڎ}QBjBRoQ:)IL:t"RNTxSqRƈ)ecNu9qLا&\ ^PL͓"R™d,hDjNuD@Q1>K#:jsDy;I]mGkgmvb'VWjRٍNerEp( uK!;{Ԛ~%,?bQ{V"GD'N7~yOK\gi;YW8`z~t?FD4cnOr{_~A8{}jy̘@Smoo' DDD L%!դ*5_UTCLRJI'w]J#Uej4S:٫RY[i,L2bV.`3L29rS Dˠ,$Ok6CBQJ6elnx^ez%Tu))h̊ |kt0#PF%K0iko'kquykm7Ku֙\TLJ[jU_%9favgbǮzXi!"g91ꍨɓw"zޠ&nr>MNh=yCO> O]4{?yiJ A8 Du )jK\*bIZx?+8bW},W,%E NbXO}Ԥ"VbpF"!YɪL>fU&-*Wټʵl^\k&ϴfZZ3%gr-l2ɩl3YRH*cD%:*b!*bT-{bo[* ޞRow`bOw].vGR艊=Q[ztG{C^˥E %*iiIi%DGh-hh "o<;\BN/I(7Ǔ%ÛG=ѓ?/͚қ_~%7cv"z_vE^[Ys '17쌟H;>~{ɍ\{wOt%.8ۏT?qM_ |6Zvsן3gOג!?-CDmmCSϒm>i{)EB&NǖRiVLe\qB+mK%oqSr kĿMAEH"2^`YʱJRtɠPլ8kcd#HD}(żX5>j&͢%1DFe !x^,_klL,Rʗ (̷Kݯ4"mzÚ sn󕳦Oԯ-yx?Fm# 6Srn;Ƿf}R˛k-}k' Nҁg^)_(>O^Vo3q$ѻ&p~6<Ǖ1s~ӶoD?c|_vߖCfwθC5f˦N}tʦ3JbABtYb吸r%"DHtr"M{ <21WeYZDDj!"#x⮛ns#cQ =V"z_GǴpNoϴ?yCƬ^~snX#"7>çnʇ#wqbiݻ>9k{'7?Y/;%d1CQ38nL+o Hx BO Wag͚}mIHL!VSU$q1F3:g$SD4I$]H;8NӾ ugK#KNƍ犄RoQ~(sc-i%fm""Q_-*tJU:sܑ+jn=(f>lvzb n>}ƚ_uRzg~g+ۧ[vK$1cF7mr%}I㶼c\ %%YCَۤ#>E.4wfH";ҤzCBZm+ag2լc2B$VgЌ/3D$BJ I.5 ⿈3s™ ݕUrpgɰLb}W9a4udDJ0kf+M#np(rZD㊭:ɶ7CUqx8UQMruTQiReO"999tݲ&B.l"]^"ѴYF`05 ,ņrjjC2UP2DIBʘ*9Vp6 'zh6/sb"IHG^J#چJd)qȺ4a&utXԸL\pL5BX׻kXzd9v }2bXZs ՄBY6D8/ߏ{ǎy%w承'|bt dKhw!×[o)T c\9K‘d'ZRFCS% "qK(qʬ;VH$+,j rZQ$t(Q)Ni&K.*If))wڟ~pIvp* 71^7M]WZSņѸX#8uFPTy60b+'ڂSK.+׌|u,5뺊ܶS=K\at?," X-c0^a{l A* =զ4IEAQIW-R4JN* wj*JqJG*uT3K%?yԁ&sHq_3&'&zfl*$,Ij(2x$$kɩ yǭI {Wң%=̐,?ݬBI0f N4Jf#J%:Z-f'qBZ؄h1 f%@:`\$YUt^7MX%kUGvVM"\rpDs '%,{H]uɬ,V-d|,QuUkR QvD\)Fy"e9WnSˠɪ1dPv0܁f AlX*i(TL̬9$e&LrQTJ.36>Y"VJ g^aiGX t;vWA:ߤ)ɬ{+ylK``b e5)w IЊA.[wtZ{R֨$EHS4O4ŗ>F:ۧ{A+e| eS:|.Ln\ܜnTosym}0p,+T3}Uvm&OjT?@Ye+Ǧl\RJ簚N:lF*YrHDDԤd{SgDwiE" #+ZP4mJ֥@$#hiW1),)ma4ӊS.ky@/'td1⣸Ԅ suKmaӫZW\[2{J3:M+岱[<$Q`MݓJdgѦ3)p+Kѫ`^Pj)VYlD1„z`"7"Ɉ/ C5q5-q P䡫)0YYVPd"VZ)aEF"sAG0,Nz$JV$*(3*/%fS2yDґIY0V5]S" 9NB_̬|Vl5>xB|J/ZSMn>;o⡅L./;]nˎc?_};ncgÃ@FHEe#zgfzCdY )-~j u\-|mnhSHX-ΒV$Ԋhfĭ`fJRwʖs͑1QQ9~.&啕m@ŠTFiϖt*%S"?4b$Z.H#5i-:Imr^#>H$Qh\;Mjg2pS]\*xJXg̹6罾|Ai X$'7fh= ̈I!o,搫Hr+B?Yz_c\PH(:ppVO%]}EY(D"1aXR64ٔJda/: hI;PSu2}$,2̊%7 j/Nb?R I-&U+H^M)+"]{^qi7H_0F" R0UſlrS4._&ᰦ\ULǬ([JMw|83Y;Pi%l ETfMd)eqpɲej;&ĬX)jVV̤l*PE1Y K6+5kZˤh!iZ5u,\:X[W!j_YQ3N%1e4hNr8e[Sj"-fIɒTS9TJQJeND,1I` 4F֥L:"Fƫu5JRb̒ J-ǑȊ3J),),., gd"A XBҚtD:`i^mܫZ*m8u^-͒|a01"17'޻1-fYQn8X|iH+윬"6c骄bq\^TXWٲ$IocܬGbRYVYL%gRJ7Q\V :푬c2~%iƈ;ҭtiBm雎5Hs=Iǹq))uXթba 1Tq UewmEJ*W2o}+[1'WvTbg,JZ$3+TFW'SR,errd,y[뒦M8 hh*\6'IRj%w~lIegSAɋbJ4V}\ɃTieȊ520*r!3g^^  iԕtɲV[7JmdI?E6v(lV&Z$ , jR1$(!22YEȺ()xDث)iD%"%E`L'am(ԀUcY0a'C.@DC6:*ۘ:(B,$BIV~IHUGB'͒+UQ7QD 9z'& 1qFTT&SN]I+iIώ[gheܨbdD&]59פ)3Eh%i!g$ome=Ӓfܻ z)Fer2:U75~>VwK!˴uF&B>wEpz).P%Tc 7f""$$K賌`Xh !?u Ś%ǞQgy>I$ksFTVXaġ`I&SI2dGH0iR5j%YR؍Y&%;MN^( 2ݗO9Jp:s+%pjI% L|n#$c"axP%4GzݑcёT39RYNR|xlvXIqB晎$*RT+Oj[Hakj}c͒,u J[ diۣ9/I*+L̊k!S*XhluD4O*~7uU X̯y'_"ʎisDWxU;|^ @gQ /[ޗ^i+RA8 'D g :ۣ?+"d5F[ '?JʰR0tX&أ材Vgp76tI$J$HWKж+JFkmJ^IRdv"xV֢ufM;;8a u99 g"\6N ݠRi߁o0@!Ɔ}]ֽegի4?w Kƪsǝx+^{l'd|M4#Pϲ>ٲԶŜ ;\Z%p)2!i *YicviM?7aV eZp$ɫD$%"}HivI1e&㑔nやlKכ K;$}`3h &XMO2.f6Q2I@kd{NQ;q]K+۷qӎ@}iձo'<}AD1To뉊Wu%bɊXjBH>R| 2XD.kQX4SM z>5.B霗2űrQdD!HN S`闔(ag\eT{"D rW6fbU܆ۥU @?dbROߤiÞ>~_u=} 0nI-wW\gzKb#I$b.'3dWyEXg3˓FIDԭ:*ֱQ֦Ƥ5ED렮d:bDʒaIIJʬ:]R«NCJMI۳QX1xt(3&Dʥ)"x)ZMh5Nϧ{e !<ϲfʊ$mFz6R쪔RYV{!ŒPWۈ>%'eLs3+/QG.udOM>)I$mKm]EX25^(LJ!bE>^\K7iΚ]aM"+ @BZƜV .=~=%T>.UFlڧ{JBE qy d21drLK>Ғ-ٖ|~ʜO|W ~z:ϵn5q9'펗݆Żz&Ys~ڡW?gk IDATO\5g-+=sɞ}u_nnyUZt, }CsW*LԃLRRYVDJ[R3bTaJ":|)PmZ(g%"qTD2mjJj$Qd\Ė$2&G.+$f"DbMJʅg6@x|u>29ZPU "](X&'f2 !sʲ .sXWJiWٓ݉TWL궐e[>׆/Yf!/=xKZߡzwmvc=;w1׾eΑ']q,岛N؎(wpqgݝSƸԹh?⡻܃/[Ӷþcͥe'=~'w?}MJm,G\|]Cl$ԫbqӿL+@Jj&HDrMR)v%}p Yr|~I!I\}IMĤS-mJ8*.9qy]MJ[Rbt`gc]ǂVI JL\e`T*^@ɬЖ8R¯q#i62lT㍟pjISђdKٔ.4RX*P_Xk빗u3ᆯ|UK­./f}s h!"9hy7_e'\:(wZx彝s'1{|GtWQe=[z>tn?sr'rC | |I^þ`_3 }(+RV8^ SāR*E{NXǰoљdɺ^Ve\`r #ire#Z)RGZGݻ: L]I"(ѫҦ=4'%.{_✓B#Ll l%]9}O0$kgi*KF1תGj$RE MH)Jζ~Ѧh \9SRʤ49Z7OM?j+XݎԅW-YlmB9{/&zGަxNoy;<}":;S1Gxg:ZԳ.,z8;w= `HQ~pV%1ںҰ!!AA'xqRG$%+qRE29/sr2ֆR nbLHH)(IDHGE#%htM }%Fdt>ȍ^j=CVwಝ=T)qw}\gc/VQ`@uM0W!Bt3DcgϞZsϯ$EG,*{oժUD㈈9ĩ:o]uic\,mub#+| ̞Я}苇]ӕOo.g(PfɤDLx[vf&嶴HVRDfEcҿ$dvٰI8p-ybܨ2)[xWmB^HJBVԉ4Xߠɱܷ1G %6泬 F!úի#ѣGluB4s?tbwO8i7.:OwvOZ͵k5ф ;{"_;v.)@e59)LG84UV9Rh^4) RX$'GW?2FkK:W闶6S(q,S ,&BZR G-M]@N*Yv"R=fnI'}ї3?Թ9lS5n>O>p|=,d9㜔qtN*M{l$DJRrYXP:ܲEQQXEVZGDazY忊ɉePiҨV3M_2?THm;H?+MK~ʔ^Yt꛵L %kˉ_Λzc:d9yND>tĚfDB⭍^~ésio9_/ 4JZT%Ӓ|5ے|kKۈQ-['-ZF̵liђڞkm[sfGlfU62YVVX &"],ERP,z{{{{ ==ݽݽz7tvZ߻~yӵgz'v_۽nmϺeu]K=tWz+^)+" T*RT("]"]b]")EZt$:]XQGweQ,&M,3 2XsI/v) <퉞xh֔޼ӯx,>ѣµ+/ڢO̚_Xn8鄎egEĎƥKn[=ox[_-&xp~$I&+Rڈh~|Ϳm W9r&}YJ"b"LT.Q2d4 +1AsGjmI4i6UGTd9eR;q{$BB̤fmqa{k@\O.;MuVL'`޶W3԰,3b4%0̾;.:[N~?_9kDڒc6`35+W궣~|i{Oj'y]~wvb'xyu厙#&=_""x]t꯯3k?vv]ţzw?RϹaRSϹ?tu_?z(T:Q?[?'~*~dU~K?#1 (AbjhjNF:*JT""mIc"-(͌2UbzVD#Кv%k6OܚRv)jY37A5|ئSPt@F, ?>\E*~e]G=~to|5)>|ϤWO=۷`3IDcƌ7kr~{yrI|黸C"QiXsDk﬋EJ#eED$*RyiχVOZ$ıjV4`r11^#T<*L-f@5/M5k`()(DEґ381V.&K~֬#( 4Qcbd{<%X sکS6+{ESq6L{Y{b)Xtx0h>/RS uDz9.7Ûs k%[6{cnjҒ~ev{1:ÞlT(h ": QO#lI%[,1ICFze?~_Ub9xL*jV0]A@ rvcxOJf IM%o0|]fƮ{fYUmvz_:80ɖ65nK!""vw)ԣVHؔ$"W g` w c.r ->qRVhs_cN XLL8kH,L f<2;{ozdx;J zNahќJy5}g{QhxARE 4>787< פڡU9i[tbߏo[IS$G okW-)£WMnc&Zw e GC\"ْ5(MLdEGΡ$Fc"HiWfI}hf@^5ۻ0ؠKF@ZUxKt| {DɖTpJxn4}iϬ-r~8 +TWKz(KZo!''^4õ3$,,FAĝmvbB7!ȢAꥈ9R`kXd'9uv51qIX;n:PD6 YJa|T& ;0~$[WjEBb-ѐŇrtpEW%+URJ,s| zsgδ!`o2PhJ?լV&>f)ߖHXHQ)R,)fu̱T(te2S b%2\)V|X9ҘKm,aLm"4QR͔4pK熔 Il d)P͘H'aj/x bM[夒Z qP2]\>-~+c0AT [ )Z햳$IRX{Ǧ$ZMur_dIzUO%9%u¡dYJ`Ji KCuD"P.2 NiponFrJa=Oq{=~VVvoǯYrcUVt6T" ;(Õ.[_ dq>K|AA:cMT,n@~3>zQvN{?o#*ģ#0Hhhj-;%l6So:ݶ3/=^e15S Xf ЈW)U<0d]%sҨ 첧_Zgݾ>vh[0i`0@c'K>i~a\Д@lz4=|6PZlP妹_x4|2θ<6Y<uB%|R`3dK0_}'^X1lp䯞6oc4%pGa x 1&]_b}<4'{{G;9r$/(y|1o~Ǎ[w}xv|撩_/7+ЌlVri7~(jqvXp>Sm]FÁi4-_}.5%H S&vЇ'K1,E`"x1Z40kd0|$qDM*SPip q?£.ޒ֘Jb!~m1l}Iw\1 0b3i<$rۤVA57 HF+ x0@;r5"9b݆ zMysԘHZmF%1cPCOR/w0F`} )4k䜏iL[}9]*h#u3w7*kjsN/ w1M{1g\fC~Ϟ׎񡟸j.3ZW""z=D8yK֚4դwe<=>ۍl5aQxDD}v>rV l:Y CFtmIs_!/j~6]|؍fq\rn9G0ozw_Gܳn:a;Mww޶NvSe;c~slYOxĎ7z<'/=D4qm+ճ;q[Sv n=!3XΈw;/,l3<3\ݺg/ڏ7 \4?q\EV|o-Ѕ؝7 pȹ |vhާ.X`2K?˕rԖ{>ʾqo٧{WMU^8#y?|՗/{Vw?{2YR&UcW _K4ϟܑ#w;Sg$7{^9{/&zl??DDt.T'Zٹu=⡟iMSϺS5qgr};Ξ֖~#d"j9sOϮn8kL;qDoV?*QMf [?@EK!;{Ԛ~%QϢ#8`OMDV?ysS[͊:=K[qm._hg4#ڇx p63&Lۉh'.}(֥Cϛ7}WK7\pƷIqҤIDzʿT:6"_o<~UhTջҍ0P&g6 5zrZGmL{ww|ugiKB@B"ѫE@"rYԟ |EOP)z'z*z)zJ.-􎀈cȲ &I2|Sf7~>Sux~rd֐utݻKw~ 9hxólYy>ܰр/׬eә(|kRpbT؃}|-;j7﨤>uvӧKo&-"w޳M6- IDATrg޷mq!z}#78w7OS>&'DSy/`%[KXGJD)CVXߕweH)+f=߯U [.X)־"wwLZ?#8~ތ?p9yo̙RDibb5 ںIubռ¹-K/=Ӷzl ŏS=j^u䤵iiG3n|TC_w6li7yDyF|tZ7)' }gJͦ'v\.\r\z8.KCPP 5nH?ZWۖhN*6a S^cN>{#~{l6T,<9mꠜNY)#k<Êz<|DۖK*=~fwkeJ,ټ, |̐l)vUfmhV3qU<38өK=+yJX6633ӝKIMM w?R_V?l|&&_R6 Lz)g_^kZk((ԕZUP&Ln K?lAAA"i@J.fSS!m6W°YYYiii/_NOOOMM|rPPPZZrlFFFff>teee9άl^2|h<~߽/?=s_4@w^b_/ϯ*r6sb3 jbf>ViOjaijfIi K°4PXU'aZsW8N3###$$$((H:~V;owQ쉛V^iO2S9:bi*r~ByY,lI%lAxL%_JjFibQɪuV-RCYYYO'S*lLWzPsX\z8]xgR5jȉ#9ѓGuyoCEd?_޴M}\=-rL\-kM6?-p8U{T͖׭,U+NUڻyB>%|c'Zij*r2uJ-Eudb£24T3͊}ܪِۗp7:w2###,,3;~]aiy/1vԠ KfǼ+"Μx?s4M1֛ٵ99r &e?{nfO"?߳r"ҾK]zYSzjꍝn?|`~+7ldff<8U5Ml^BFr_|Gywx4N. *߶n]B]nOؤ4bHMS:fhG+P Wiu/ϰtSn[rr9E{bըYc~vh.⮯"r˗.ȹ'>|g'|#@u"rԉ1~߽rjvpj5ռaz{B^?m&P./YI4Bh4.mTT\"݁C}Vw\Ϲt:ovZZZvNg;wcǎ={׃g^)#lD!W!q6/^WDε~k i*j>ʿil}lc )xkI,g}x3)4tl6πYf͚5 ҥˎ;"""Zjh"ٳg].;W?tQπ/G?~㙁?_tfe\8WiZ(5,}%1Tix4Q#fZ$2P7;dJGg?==iZVRǏoРAlllHHf+W\Nϟ?c OgXfee׏S/~AIoO]9fY )oH͢*Xxݯ?lu`<0ӋL%dccc/^xYۻuVZ{Κ5+..n_x1888,, .8w{nϟ}͑[4q^士]=ȩ#7hޥԔKbNgfDM:m @鳗D=)cG.h&'P"&)͜زUS< W2 hu%yʒ5s܉iWJ3~Sfvdv7|{J_5+9;[.X >>>##C)k׮7._<""F^'OTRPPPVV Y\9= ?K]άyHÝַ%ٻEs垠Ƕշ" |c^Q1^?=p4\xJjmXM8@6^8OSV5);f9Z:,:deRL5)3֣5h^=&;ْ]l6ڵk?vڭ\rqqqOII,Ur匌 r\.WZZLMM m[6'+#NNrL|9_rfقrr۽f&ZF ٗL m7ePJwLL7\.-'}{;)BO^nիvCRRRr.\~K.3)333322O>y t:ӳd8ŋ6Էy{7/i&ef_\>gPڴhF#2"rɵr9;Wm7s%KM1=#5c|{Uko5]Ϝ9t:'NxArBBBfsfۯt*_zR_3KaQ1ՃCB#B˥\8$ԑS^<{}+3,UE?k=m>KxF @+Ɲ!e{R*444<<<,,,$$$,,flK.l6}Y˕yY}X=rO#^2YJθ\NgVf勡<_N:}dR/  ϵ0lx/sMִe]=tjR'T„C%zcެc^l7:({A cIC&E'7Ze`r;s;~yvɔz)aٜ$9Y6cQx GJ ?z*vͦ?222R+###==tfeeJMӲ"i=I?wawY!<S};簓+d6u*Gڰ㐗N9hz}y!>^mG mR-ٻU͊ᡎJu:wݦNr!z7%(W]_=;C|!m.:̑17Y^>n_ hJy<֮tXRVM3a M [*迾}^8#ȳYvOytO̵|1Al6>###((HiBBBG]vfPP<&XJN/$_ ܨ]gyoC;ƾݱ1;|7 |y*"]t96BN%M,ǚ㲑 [9η5RQJf ݮ#9NSD22r|>o>xK;mK9wCۧk;5o<דw-'}5 |""tK‚0i^;JV2G7Ǻg͞vφ}c#_)W]_~+~9k~cSl+U*4͏oϮ3SܻebpO'/jץFs&Ow{&-dО y<cYk[MZ%Yfg*HYԤca0l"If"/g kW벤وFɞ`&ML^l9$'?g{`HQ\yRUQ[ fu""oW!!{fl,1d#ï{Ƿvn+*|ӡZ>z艥(R^ʗ؂#"Btݥ]hLEd'64waK!"Dy֑&ZDhѶ2^G>]Yz14LkVX@qnڴM$Cxɲv'M_n5;uHeQ _f`Ȏۥ^Ş-ZD={xɸj֪ED*DDҏ=cǏ?qVK]>yY96jޤnb#`Wwe8iƉoICb'v )?Ξ=/(_>k2ٳD"*T*U88iu~=Aucɯ<%-YxWOoӄDv)~Z",$>ȉ6Ҥ;ė絍+W4ik2׺忦j޼Y D>;`41d]ouѤ 7c/=XӲT&_:ԦOj">xcKZ[SdջOҕMYߗovx&)ȵ⍇&Zo::gt@.[ݎs+8'?]ڷzd>?ҲO'C*cbl"wx ;?75cꈎu(+{Kh  EϮ [ؐi93_Elt]Bd0d΢_A{3f iZfU]t:2:\$#-Ϲ71Møck-{1ɦ3/<`l>hRm&}<ɨqBľS?hz hzWUQ:,Pw֔?-p8U{T͖׭,U+NUڻyBNxF<"ʜ˻Wm<Vcӏo[yS֮Y!ރj7'` 1KP/%-~qAYmq7o}^Zࠄ!f Kۑ%PbXVy(܊5U[uz6G\vqM(z&|'cv ߢWF IDAT9|]EMId4ͰtٔK˅Q0L) 3,2<oURzMG91 ܢu^D7)A6leN)_زe YhsR_n .hr53VV3"h ygQEED.P)))|IyFy, WX7nQJR-}f,ʒ&&ikLׁS#7G,x9)Mm𩪕( wmL C-TW KV+RӲ*k橲jM_*WdP(r-eiZ7 ^HV@Bϧ)Ig2Ъ8޶,W~Մ)MyLNc~pEf*oE/~:0ZJiϽ5eRs|Ovi =ҪAiV5XSZj*0 l@7x, b~p$ Bq׆-aȣh1K&/G@#f KRY+%GcL)ӅP2`^2'xّ6($`Y)ȵK E4^ʊ tgI)4>h^Öh)MT@X,Rx2WbH3l&Ϛ(w3,!fyi%oKX9Y. 2<,gUZ7OۤԁQv{[{nL,53wVf533S:R3|2ifB5Z)圈f q% L M3ۘ}53;DLҿ_+*:t)%%B&u>zTuJc۸&/g6cP,k+;3cV+VyCiZ4Ԍft.aMxX q62߱/s)SbJ%P(m<0}4J( /̳ X4,6AbaoeE`A_.l<5+:bwy2[?ٻMʑa68f{(Z^_^ȱϾW+eѱNm\Rߴ ?pk|fwHۺF#"]-9k#~daCmSW)oZ+"_RJ)ە:fwe`WyCa?. >utBʍhyv˜n6ԑ;ٙn c;swS^`7g "5O'OsoC+d[=lQ˖)WagvonLZ}lЭRU.nݘ϶9IB^RtGܰo66;n+8^$i-oK:vzFҦr0aú4.|3fLgA@sڔ}!-lh|Ͼ}9RNoΛ=MӞdT5o<ד>(DDD2ӥ٨/|y+DnIPs{ fzu^;Jh{:pNjsT*u}6K~;w?yy|O-?tO(5v9ꧦ}!&E~ -/˃:pzA4քg=]-ͫSј/ (e3w5|^ <*/k8 ^OLmr2//MD;t,k׮}"icn|9uԕ[/$7H]ߕ++Ti:ﹾUldddd9xi3O#u[@v-MJ4sG+64N5kִ>K@х֯_K|=^9|\4s^]R}@bG{qg9$$DRJտwҗs"Z!7=i|~ޓ}sZ?5pv[qs9Z@! (?=l[ rd)kVv|M"%-~qaZmwذBƑ}{Oڪ J`@>}lٯg[-ys۫s&kݷoMU>KW6e~_Bٙ0n`b ׊7Gj J8d}>{Y9RHE+SED.l -t qqq"}(H{?oֽ%q|C?q[Ӥ N'j9⚴kBL ;1kHӺ%4:ӑ"l 4|]~e mƅ[3oދM6yycE HlEcXuhB׿gݱ~إvr5=_ߗ#]{r+wӱuG;M*GހG;ooJg>дh#@Cȗi(}LD xӠm;O.vת҅KgoMk_i;Y;&Y}[D]?oƌw87ELX_ma"411Wkj6i^uZ0aF\:J]F}X%~ԯQS&'MH;}{Ev{竧S;9sjZOvW'Ki<ye6[ r6z^e=3gĺmJ7@e7L%e&"Cl3C43m T,蚉[7J?hBТD*R) h YY0UJkJ4J@:hOhZ?tƤH2Uc=m+b@L>6)S9y>N@,[ҮJ*0y#/k$ʊrP֝I)0Ec>Eޮ _)G s?>ᴈjC)J;nӲ'zߑKe%MyYiE,-kC/Mi[&zfᗹN/eP_Kxe 9yLsKwtQBc.l<5+:bwy2z:OnSrdhpX ;yy섙V*חrJ;~t,n7ufԡAz퇾59?zs|lPu5t6~_.|Rя,̱Ǧ1uR]{:=V s4~yӕ_ߖ45+9MSw\* HyS8U~6+*_77Oͳ~TF 4_\fixe_7iWekU[Qi#bL+h˻Wm<Vcӏo[yS֮Y!ރj7֏N0 c+];|)rv=D2۾ uNvf~?v>{\ݔ{/wM7I ;4}wOƋȸu/ݾꫧ{d88wiv1V~l/?r!qEpШJխ'"V]ms{ڡ?|}Џ۶9,fZT-jMMkƒ%Q=ouv_x FH?Iߢq\dDj۽r[߷⦶70 0d|b7ݦHiyxbg*ך7|pKk"""{l>ܴiHt^eڵO$mzruȩSDAKl}Îۥ]"hϹr%z"5.+Q7WRDyg95_: y)6 :r6ϒa£_P~T}3yxS$**{5#Fwcl8kcOyc&%픊$ +Rr?#M$&&K|{/㡗Ny{锷E=#: }63(SwԤw\>NY5mҪ ~4 ,lϚHI A/}*X.q8"b]Fu.~cY4÷$M!1a%ru_oyMK/Zt篞=6<*{?@R]ev 4c/1Tf%f^2wVԯ6i@4M4>ϒ5c]X/0Yt~2%>)~Z",$>ȉ6Ҥ;|pFDmp$܅\JI)}/}ȅQy!#t}Ǵ̭3h J7>Eү1 / ײOćي0ӆ&:b.=/UTI_heȅS9ᱥ &SGtlwCǗrA"V/ ,q;_dUihG=_k /eIDJ(Q5ee|W K֜Ԣm#l\P7}YC}/YU_7IHfKxsd-MLh0.ؚyK^ m˃<O.ZpGbwEcXuhBBQ>.7=wsrS V-Xbx׿gݱ~إvr5=_W38۸zy,x{熕o+~^[ }0* Xe)\Z ^ثdseAYḭ,go۶.`7CFD>|os{ff& V yjN{|"O `UyoR(\ز]~zA\{b+ 1?>o6l`HD&W\d<]DLγd[|eGDvE?0ͳd(eEaQ(hT g3IvX(Q P@!1_eKP̰S!-Y%S-t#eѰ#?BeDXTSIe#hY&v=QkMT5MQuWIݕ%B K4Ϋ_`D /,ζT)b*ӆ/YṚT>>ɚ쩀 5뭊ZjנI3 &&ZY3^HVu|yW5+E}J)Efl7$l P}4A7+̙\Cq"_Uf,lyZT~vV5&M~Śr,I`'y.*M;f(l),a P,3W %óyqO x7v6^ƳB!W+:/eG*Df0#yvatO_KWc:%*!OPZ4|2>cn( IEPic)|/γ$Gʹ4 pɘvIwbPf,N|d_,LQ6ĺ.? IDATʧja&}W)b5Ab uVD)+q>|ͽ+(%Lv8Xp[iak?X7f]ٙ[J*8("cߋJ IczQ/m,9fj@>@ ȵ5QU-jɢ4e7`I$onDR?o)G eoL=}8-ZP>QR,R k2`i5-dTSI7EjVuh,Ϫ=j),[p&"-5[1X$V޵w /cG~4X\Y56~,xoÈ1_eQlB9wx4N;{խk,\}Ê%5OPlNMꤔJp0c۸xTi@|yC %wE˼@"DzMhSg"d̓/i_Ңh$v}u9 #%4c8P\4 =?tVmսqM5OUosӦIabVǂXfPif5Lq" e- +P( bC;-fPfȒ:*Ѯʘj o ֮(:>?yeC=Pn#( "LG\4yĝ-jVuxdyr忟ݦNUv 3=TX//g͕߫wX^6.^)o>?C*ᑱ}oI/n6v`ǿT  &9eR?,u/R]9Oqpnז:8{[׈rD6%WO JE?0G67-Wm9>|XM ?pֵuX\ywy'kO&?[O~| n[ԔI!ܙUBoO l];E8}?5D.~MV26=y;y(޹dv9aD-0a„ Fvywھq?+f?Ƕ?ow:Vt[?<~sj{پosV^:fsy$eT1n~kGlz`ǿ@kҗMˇh"412Â34Ҕ~X*ȚKD4e8:fUW' |S]߰Vf3+k:*^Ŋ:2AefG7m᯳)M)L}|4֨4-3_WR97,kW벤وFɞ`ZLqΜkēB7{`H+WfX[2$ZNJ"wWK5DDl5wto[y_+{b090eD$M"綟i6R"FEN8Q<=i&7zЕM嚎1gT H؂u3Gu,"]om瘌7sX+;ly˚yb]K5e.㵚ٖ^٧R"^C<6TT̶4zhPJo@`iڕW}פ1kAW̹i6&ڵkH<ǘ>_DN:ua!%IӷK{Ex=uўp?(sDbڶcȶmݶH!B[yBھ}HDv H}k=&+WN|22i?DI}[\)4e.;,EM$=]t%nfxᘭII;=Ê6K/jyPrb+bZ*M$&&Ƣ?Y,>|*:kE @i(P6;1U2?D_5t'%i-\ED( .~y]=c/_d#HMJ _u{& -r"9@ǫ=(͹4i漤黤Ďf<ܸq}kcsڵ;E*6jteާn(!!!"RR,}/}?g5'rlÆ#4#cYQ]锳Vv%~4zNb_ӧȆz%ؒ7:g}YӟteS%tz) &v rx{֠ěCN&7-bkU>o٧>Iտ=qqq"}(BRHE+SED.l -k[OddegiCn1u%Z@YZ,0G߀-gr^I 3:OGs=S5=鿄> z :䞎}f͒x8@!DT>/223ٻ(o=MB !k0 "RDH T9C^Gs HS %t!^BM~?^\a33s?e&Ͻ Ft@(}~L|~ЅrXa6k/ivNgJ}mŢeW nvf ~o>%$ &V-_esH\*&Ka[xaxS?B~w )PgP}=&aXΉcy~-_ qdxO6nŇڅ_hU"gl󝎡W.\v͚\X'.v I8uYmTMr}<گheMv!T@!\ x*g)T zgخG bSR~ TfJkFF;{ aYJOZ~)4kJPag)Ԧ-󼟶dXiK-A.sB"zEu؎TT@KvL Wjhg=~LU_I]r @PF;$Tm13j Z \yKaPL~[BΦKޚW@_ MIىzMK ֠F  OI{-X6՜ԕo^߰&-G}-Y"ӗ-j"U{)3/F_#e Qᐈ_B/ĤtLUϗRR3R 4.#AT&W492 LBPӗ6ӆHXj Gju^Uuuj0DTprkЦ~|3 ! BIDxlXMڑOXUx{I=cWU~Q:+v n&Qn۝zu*gɐk KA,I}hN}"g]PUF-Шix ,oz,_57/ފ--GD6nۢfvUiǎCkcP|3 l75"4~)!s\^q7+l٩fK|,˲=gi0 4Yb E~>:R4>Ւ%6 Ye- iH(A$5oѬ5ՕD[.s5/xF'~8?̒rFQ$f63fDM?g$ejZlUelhQ1/ i7]YfphGެYP"SpT= .oŐ+~8_ϰ$d2L&̲l#"I09}9X"\x1Pn cY 䥾"g -^jN ^2R]DBf`OЦLgRzdvvMp:C̡wފN]6oUͦ]Gx႖ccUba6vzMg"Ct̴-#^lLۦd{zmx6W;o3󐹷#_#T mO7_ȑ>|G|փ]wȚ:Ԏ m55K~ÒkT 2DToo~?ce['ԀU+BcݕW?^TizY*mpvD?_Җ2ń/{y]{ fph˧MXǙ?>l*K#'vӺ䶍gφ?ڻ2j08I }$ID$˲jeYN|!0 AVgm_ 2@?a uێ~>9Q_h ;|jߜ1K}]2oۚfΗ?6seII!6e7NV V,9@JJ&?ñέSW̛òuīYjIO'E=6iҤIwĤI ڤI&`o[cG}_Oۙvb=(kҵ#-ǾM'|}ISv?X襮}˔'},$.\ӱʭzt_ogYȞ]Clgo.=ypO \mM{㽨FcPPl6LIJl٬^YB;Ff^%On93Y/$ k2ږ\l'(̓ 25zlTё/w9YVXMBok t:%eC[g<սv0TWx3g+pegΟ8($!}גf;M$q?޾xDGnݔ>Ջn`߿os+'NdG_ߠ0L&O3Q%QFaF3ɲjZ,/,1N(}D? E]$%ŗ5=(Q޼?+ŋèd-e)QĠaN?Ӳo!j;kxǎM{3G\%&PaaaDTPPP#-SҳD?qE9[#ӛ~⸑{tj۴^*M_Fq[ok":t0:c!IdYX,jl6ǟgGaʪJ IL$m޿>1"d_j#,ق(zǕ]Lj?6OWOVKKI9@Q% v9٦dgg{%̬H|=}ؗnph\6-m)6WWZ܍6"1 d23,iKYY¡@kV8Ճ!ܦrFU:UsBߏ⺁A!tXfKX#WfŅ Sf>GlHYpɻSjO$TƲ˜(++׮]#pMꑺmO|y #WL OS]YWdU%:h0fVbBdR7ܱ,Q%,]&o[!K֨낂L̒,e^^ A =Rin IDATyT\ARqf/N:`b/U͐5%5WS{NAiLXgETEn8')eU5خƠVz.  [XϮyGK.a:D>y9F'v{׋/Xsxr7~釩.7ǡ []W h=&D>yCyj7QlSD :0Qmq__yŧĢ 3 IJ,۬Vj)lHb<xЗohrbBӚAgX{$rFء#{}UF&5wrB;kTsSտzqIݶ:6]3{˷1i׏Ty;ܮu eٜԏ5ߩSJnN=zV=^5fY,EeIF%m1K eB)6" {QtN i]ViaYikW?j4~֮Էۖ^,i[agXM߼ûJ=x2zHr`"jܲuZ1uhYJIץyyX̭?_h<`a@\>Rբb7@:n}-~zh8;e/[R6TS<tVk^^~AAA%9ýaEOQxoXp%~RBѽa56YD47mt*}Z Z'4IF|7>8G,`$F oLɹaڄBaOB#HV$ʆپlK$2}N:W8dZ-bdfbwGXy&B|VD|N^!fXdM%C0h5Exy=vر*]:JI %._c,1=uS8YV>J,ͦwY9yVF<ц5͌]>o9K!?Hi]PVSEU@#ʬ<{|qRue 5p&,Yoe8zGf "cdv42ܾiZ=&㢘XPᣣo%C&NYPpr4J¡Є^QڡmhLu8i]inݩ.Wr~ Ɲ_cVʲlO,oUݬMh4 ^ GPO4I7zgIP6Ro)ܡP0sm[ 7Pxݎܷ;#rhwu$IلLD,I>lDt !eW 2w_I]l٩fK|KBfBbR񙇁[CqN^s!D#rV7F_$l,fO[̌y+4B:[J /eU+T uILYj#j8=!1 !,23ČeCJ8"zn8븵N}Ue>)*.YY BȲB&&&xoX&nWnۨ7O}{@=^ԘcOHUl'0+AsZ}?]E΄xϵXoF F/IwV Wg&b-FY5b^U,4JWḱ8kS'ٓ6bUWZ Y}1B &!هdAVm:{ӕ ?y0b꨻1D˚4Au{i@"pYHBՅ밌ȿۂO$,\LD$#9‘#W~8Y>:}Ӱe)!zW+tpR|)*Ξ,+:6 %f2#v oK (N,0($TfY///83'N:Px|@ R$NjXgo,z Foa DxBƢ @ +3g)H0•0Q0K&M'[Wzx_+ # vϺQEkl$߶΅ADU5 h8xa V:qQ*$3+jN u% uyz+"sHD|o[v\*TFG0IWE0&b}k@U b OF_-7YJjN6Y+`͹|)@Fe>u*C5:' .l MqMzk-+0.:Gil:}#̥=M*.<8[;]Eë58i[. 59l5ʛRjgMƄX~bBoJw.ҧqv|GA,Xz +__9 S[VÒa|:&,YHUT2l{g׶Umީw+{g9bsMޯt%^j NdPV,G*t(en2J[O/y4aj6"u/%~wnh.{Fu4uQbTl Ϳ%WMl6 oŊUI;dw6fXV>#hGU˳8q&uEF^Ь*mqaI9+6 ǽ5']tuO3y[&>qS{[rgfL>))צ&""PE:FE. WfMQĞ~;wL]1oH[<6v|fQ-T%ްEtU;dAuXjzhnjf)/&g7@Z_*waQ[qX/sfnR S_H(dث-ŋOPp ejب$#7^;^,R~,L$LIC\t|;u1w .|c&!|z`:NͶ@#\MY !TC t[$ @/jjbbLbYj ?Ի 5gRABfɿТ/_ʶ ök^{DyV*>T剕DtEèd-e)QĠa~v oٷQX,cǦDW=b[ʢ;C@g/!5;8?xSr0"-ˤ`o30Bdp养Z +K>]Φsgyx}]oBDD2}bcDm"":IumyH*e٥AWNDDtG__vrA֥+UB h^EFFlAs J.s'l]x'ǒWlr]mW7G&1 vI=\N@2/[q@=;-J><+EߘQS )571K+TLcD4xZBVuh";vа!_BCZSXe Vܭ vKr\"U 6x f<#$4M,Khh(I=|RyŏwO՞H7T),J5" wJͰ,ׯOK3,UݸLvikuDDeBByߟͩ+~ bۈ:^lӎ|,]wLwt$ ܾ9u`'<ݸ|)ϑ+L[̍%ur Gt~z#;K) WKZÒV_-KM=Y멩7sKnMXc0zbTZ|F7p\'58~r"*-tRZ0_z+_!=ox7YɉCsADMdl6#D"yM6j٠3>9ʣ--ٗ/_w-]mlBI8ю_}M[ϮyGK.a:D>y9VƼщݞ@5'w3'~Hr _:o2Z} ѦOPnN-<{x¶Wb$E썴%W1`V^E~_zeA:w]kQ:4?ʽFf׵YyWWx1!Q^w(Zʼnf3tهD5"4˃x)&"2Zl -rWrmnئ|ƁgbnZw4jSҼiT /v=S'+'Cv~{_Bg N,uO !饏Gjp}G6dK.&%<EkԦuo|w[r v&9##LN(v |տzuH揣6CܤŠ {Ll |RGJNU "+;)%w.UMd) 'l]yRݷIv[M85WEgp&Tv_Ԋv{wM-̢ g?p3oN,a'NhYWԨKU2Nrك {KϤ)-뢐t9ūyҖKsj{`&xtEuU{S9wE3e,thZ&m'Wkjvv3ʵ wG UUk5ם:;l_>:+mGڕvҋE7m6 ?7|xWx$ &V-_esH\nK&Ka[xaxS?ƵmufJFo7xYd|S ǿjX b ք`5XF*׍齟Ҥ6(TTewtYaMX*[w{t"^YQ_P~U9YMl ~y^ÙK\n|꒠DD\Y-kA ?_%Mkr2=GNƨTs%lDՈ*7+z`͹|Yx Y[ydݒ|sݸjx)Ϋ&eb"/l^A֍>יF{2nΚNwFbwT3rh kmq5{0{;胹q̤c&Gn}?x#]QIŰw {G! GQY*Kƈ]n-3 u[}^%սKKXW-C*OiUZAqnZ5|n곙`Kj)e"qnB2)E K"ԭvW 7K?SXb1vw 5giSy+,>E_`mAG=Ep?vPjا"CŅ}f# 7J,eqss/S~Jh@Mv,Xr!]D5DB%ݒe"Ndr.tWh\jV!fLt)*$b 7{NA-;0&[NkoE?2!5R"DXB?nnw &X γϕ޲HxA:˦׉ T* XQήKԡ>! )}_N4DU 1XppZr̩?z>tުCڒDCDw$QЪU*wfzF"eN/VY@9" ڮSmV&"* P2E#{XglDD?ID:]󇿱[v(|b屵ҠoxM}o\C%…:%EDGܱJw|`[tm\S4>H|.Yl1>&smd3<Z0.+~ ]_Pg! 05z}j#Ҡ> 7lWw_B鱢k(߉=|Ld1,*SDw4fL{JnTZ,kza2zBmbcXpwȵRHO[Swͧ[ޒagVv9[#'L<}Gw>]Mgs7dF-$ۻUD[ޣ,yjAVZgv(= V@GI@gy?P^!o+ԣdDzN~RpHKXfwWRnzl=Ano""{X<|JBS3l~į2Ns." 5iOɌ&I}K:/8D͐YtO5\Ho`a=j=#jϿ.>N2OX -O]c {FKg|rOԈZMOm i߆(SǍ0ȌuGArxް3o IDAT(kE"VR.v2 BM`#3C?#%6ݜ49 ~o-׭d)yJ~j.Co]ЊZ7(9:PrCr&tѡwhqWl.\9FC,QմMe\U 3Ds0w ûZy&*Ɛwr35z`{#ʫgdD<:VDӍW|^۾? Rm~V}ȺPS#ZjUjvk&Rv<:*."✥ㄥ<|f߾_bQppDۊCY/t-B'rPDLLx.\>i -_$$itO:LY=mA*G㔎]Xk[D}fV CvQJTed?)d`UIy*Y2T nR^&7Wj2 >}j1NJ܎XaB )IW)L4;siK%#cL$Tg qk{%:BgcvP&{{jk=,($sR%55[o!a)* .6~o8[qk(c̓ 9_.qOo?g?>f,*IefR1wAvIotUO=d阩K[͓Vx_J=N-?5gV?zfIV7$, .לX%'-D/ a Yڧdq7W,3m+93J@KZ> 4=8{EWhH K 15+ jޡ&{BĈ@@']>ev1;qIoe2ھƒE_e/k֩bָV(pvλ$4n6G5:e } Գ7|mo+C;70)g3__Jh)$zÄ~[%CdBc[zw%""kʷP;24,ՠw\.;Wj>Qkarug;yDR!ᱍ:?[6}uW}3'wcIP ``%VH!΀:\_ Z/R{9AUw$ʞůo-ecqS&]9fɬëz&?)ʅ+JL:ٰ-탞ww#7_nb(?ޏ-፻'rЦ?O3}Tҧj˕j4mT=K^\Ύ1뵛Q={_ڒWe/{>go)4p>tV9uqDVynX}7[g*+Nؙ߷ƎΟڷ3ľ{Qֲko.uq΋=m?ϟyrI|L03* ^j=tzEx^N+{!a W,R~qpK3sZOBBȰ&^}mv.^|O߼(gjب$#7^ ""r=͸vGzMS XDWN.YL1$$ Zsǵd"ݾ]Uϗމs?5fYnV,2@U`gO>uSkIuz'9sh)sd7Frbyxlݨ5F ̚DIhT:#:mZ/<7#,Z~uR ۮ]{b]̚~HZi-x"QU"Fo).y" 8>=qs˞>784y 6vt+OUDDˌ Z wݹ%Ƣ@qz{ߌt9eB1#aK*k(Xe cT5'Y#uw^@PrL,}l'\ȑ^) ?ywʼT{^<]kVf+^y;oWZ2mO|y #WL ԾOS]HڀoR-dʘQ=-~^n{0srrP Uy>?pJ_|VզUlW0$eV~% Xї K;-0;BzS(~yЅk$F[sumvłߺm>ވΒmm)ҩְ䮷zޣ&Lz_iGKQgZ}(Gn?nO|Vu5jTΝgP "A&n xU-㬔^Nw[̒QΒ6a-IB+*vcpԔ_u@[PgM$ Xh/>nc=1m.XmoNf\/` c#/lͷv]q9vzS%̕B DblLjQfzzԙu`K>⾃ !}jm{m ʜΝIׯџעcY7iQ ٽa=>img $z1$y8UO[[7B_l1)O,5дf-+6u?0v_IP_wרM&%Q-s4kMqǰDDѡ1?ϝ`=w'6۵.5#8anBtg}]i},Ν1x=ˬ[:vbˆWą]A@"!C2ppI5 P'0ʦҒVFuL0-vج?<}tVU;+oږ_=7mؙ+,u-~s7o FILD[Nv1搸-kol]&>vto/1~:?F'=oѣtd5["q<{?LéG8ƭ;SAm*_ݳfcA]&ݳVD$I[pZ\z.x,VK*گfW[.7t?1GCZV)Y!U Рx곙D47qoV/ MG}#~s*!8 E{׉O<[2F *J&w2XCBEvɏf*luujMq]h+jUxFBE#$ n^ kw ײs,RV|'5Qb,o].(joitZF#zy@XEf(j I(^Sݐp4zL =߄VJ G 4РHvsgmYQض%7rj¶QR(-d@z xrFT(jh*KPqU`/Ӣ29ĪcJۮ}URJYŽ+.B#,"ҖZ0!+?$Wzxx9 f~1f-3Ѻ%(#&UӭiDH=,sk¾~oL4^͕};z+0 `o#7H_yDO^γT}~t l}Hek29EN>c2jvPzJӉeڴA5egG.2Q|OJTRXғ~FUZ-uϨzmU-g>ue$rV?|S/ ) .MGyůOi:+MU!$iڎX{͚E mAw1~˗-?~ 7(N5:闕+f_iU~լIE[֤цZ (U?#fǎmz]'TgMpiwNGf߄ > 2Hh0L!!M˳X,Y?{^a%!D1fVP,7aIDLe@,߮Wξn#޽b"h ݁~.*o |[r bf`0LƠ ``bYMZ6jp1  , !ͷ-^YX=fݕYUC`Sr"ڂXrs/?UIB$%,bZVYeY87פG-Ot##c+ Mz5:%V Kgk֩bָV(pvyqaHhP5l ku[ˎ.hY169wY%9NfcשgoޔWvnZ':4$"a/ٟSz]c#͡Ujẇ+3F<3{sq;'ԀU+Bcݕ6.|ȁulDB0 \ֶJ g}jB  DdEB$T8?SiU }h]( G>za1훡R zRzY;˫g_{vy??ϫugwV?>wb?'T'1z`Ks:sL=)gM{:ٰ-탞xxmp ѱ˛o-rc݋w'&Ofk{!w׼:3%v{z;<+{rߓjS/_,䮯&z{!GyY>p,EɑEٵp2̒$Fh2 ٬Vԓ&o~ UIK8qumJ^Hʅ@X b3SPP=iEd6D4(V|sVgqŭ>JdiF E@6AD*Gq;DfUVj̪̬~(232vo{A`![q~ƻ sۻ/'m܏}C6}-DDGQ.}۷mVr.|?t;ۮ38l줧s#['[s{nmۿrٟqݻ!Gß; /7~]Oxp]uYwѳD;A&fKff`E lcsohV"abU0Xai8s;:-lf`An*Pv/FV_H~o9);'mzQoy?E/<{ҏ=_u!D?߄G1_hyǶmߥoynMVR.~|bo9oB{mG=R'=I~oo~ݐcq'=Emm IDAT_w$} Ot'μ.{>kop#d lL_ʀ=XIKc ^9GC0}V2Y10H[wª&⚛; Ae}>29P~'MS)h}Un{D=䐽Fn~'ю^l؏9MO>{QmA/Mo`7YG<Ǽ}\v/mA頃XX-GD?O87O>ukDDvw_4 YnEN2h QbeL2nƱ^DR>MV4l\I{>fZߚVzvE Ih~x>72svi?=Cs>k{o9zx>{=a[m-oӮ<4=6o-7Bc\`lCp;=* 7RUr7n$"r!~G7|m~}Ӷ}-m Nk/ׯ_sǡ7Dش6s7NGϟyǿ-^G@ hܦAp3]Vbmaf眵q Ic!"O`#BD CɸذC !˛(q$AFG7Ys%JE%^Cv%gxALQyvCU? chYkC믿k-+w .vvzQ[>6nzn7@|>p{O_t/ߺx|ckg{YwGo}!@4lQP>03fRFȘDQe8qe7Vh#s[fFeِ}PN-X,;rGS1;zw:Upy´M>?=6?xghջ^}ѯ]=}ܓ~+/M 6lHw{}='m+:|o|msϸVsx/i>;4M0mu=G ~qZ.ZtiH9<ʞ;HFJ5]>˩!*q`a)-gѬMw+):Ci/C˥seꪺ_%jƒ ӸeO^&τ@C8埻'7pu Dkoc{/Gs wzWkS2SWܗ}?i_n& ߹G<O?왏߅~;!,%;.z;|Os]\;ٰmwC<}z~knݭgr ͋}1+b0)gBMBoEKVQdZ(R콷֮q윧4HTi:`x?K^T}vsK(Bo9g]l|{t[i%_}x|Ev%}7Ga7=!|w;S]A÷ `FʃN4eH|>Se5eZỎ2ɂ) -{aӇ\V>Kɭ,IEXo9ja0Π8Ya/,a4(K%7iXrU'za ~KteqM7M4޶>oΕ5^ K/9'n'V":iǪ&*(s:ցHOV4 lRDiE:V+ZYi1b۱cO͒R"佄[%K!j^;πqm,Uc8C0ٕjմB=!tefGIP ThagzbW/7a 4{O]jwr( @ ȑ25I-D}5X)f1ژ("c"9n8d$Rcދ:Mh){8q7MM2P]Z򻏿K67ǝ/"M)qfƶKSX%-5Fbޅ69Ʀ1K8>ceVʴYfO WN>,K uXqcD4%[m{7ǙWDQ)@$9a!ˍ$id׎ՎR1_Hc鬍`ܰddIY n.굗ʈ OKYB{ژrra 8{a`^/%&o.oo|_ݿGE !wQ )&h Xkue],)ab!ck,:W$o [%m*3r+3KbAHfVJ>{!t!Щ4f˲4>j 6Y4L B w" ZIf0YfPZN!DJ,ъ{nql 﨔^D|JJ2%܌UjIDϨ;wju&o\K7Wtm1"ZunTI%Z)b#?=΍7ޘo-ŷ.𷠞*-!Kuk .,E)(5+B⽵Zx!":dfP< yNf2+Li$R/o9EIԣMW^*E4S=:广/zlц߾Mt䠃A} 6(nAOKT* ϿR pJmNv i0#.L40 SJD'm}}zok`^~,cL`TiR)e"JDκ8߿yGLq q&h:5d)%;5ei2i3)J J)uEQ1sHKZgUwQf ,b0LSWP/t2\5puRB>VJcE+{\q܎XD˥Pf`Q*K6b KcL0^6s{b/aXYYd;4 P[zC6P}?3wj{n8օȱI"'ZyZ5gU$ĆSMӔЅPW+/ȍs#RqE$3)(2'KオZ\rݡ`, .,98-v_]s8N/Tta%\0 +.Z0cl)≘V<,iTX"b8{]%ÄͲĎSR+y,mjE̖\'w#H7ΜVdPߣB~Kf44#4zC`"""lZZVEqF"& Gdܪ)fYIie) t:ΐs͖3f#W7m@^FQH9;l lrRjI~7b*[d]L :5'Vx PW3[#農X{饗@F!$lYqanveϲ8p{:PfEw ʸbռ1(JI]YK`=Ռ?B~T]҅ZO}+ h:Jژliű 8 옅rV6Ji*+6C#@Ǎ3/e$~ՕxֺՊ(Z.t΋bb w30)Gfg*Ggiiꐎl5cO9nH'%l`n\]IS%`1;~ ϭloT2L2eEW{^`&bދ0R̬ċs{N[+R,B"zM7jVZ)mgcg8nx&$iNB9Lxl.1pǫ:AƟsq_fugL}k#FV7*8?;qmnLHDd*3.OV9G_ȟL5RTFYk.dߜUsj Zg#usؘRsnmm-cg=IHwD{ ?2Mü + b_+%-h欖DD$XC(cnk:'"*5ٳcLLqex?/m uپM2)J)qY뜳y/sHjh|*5XP@lZ FKA0]K 3+4xﭵkkkD$+-ŬRk=dS%$)1 Yن3hfܙ6 -5la}0[9""RJHE1QZQ0Xqlޓtk#}7N|ə` UoT,}Ͳ[%Peh]Ԋ|+Iħ$ ޗvR2IiN*HOo/Oc,( 0r\ԕ̖ .5k1BjYFV+2F+Vދs`iw"¤: +av,ȫ\,l ,"'qdRăf -88X$XkXz%ltXk9fgcg)2]" ~te(ژ(,>mι2u "=%d5q(̯Dd-yΒ%yz/*#6[I)//di`AfX& L֠1gf'$IfJeRD9˦(fc *Y^Y)ŬMeڇUfˊ])cLr{筵qnaLDR?ەb7>Tn[͖clK!^_Tcj!Ԁ2 ]%j FIG%ZV&F'ZnZ_RM,hyo8$%D:&C۱H#S'Bκ6ZkmҎ|#dMƩ>BUpUVxc,痨JF wb{HGo%gn[EqoSϷs˸h=Y-yiͳ9SLʴpJ))*3ޘ.KP+ WLSv]1pkvE)Ju: N5b/X0DJߵ¼AeĭS_(0sRd42L 59*-%ҥLKW({c~嗂WKSQw6*Pƽn˹pR@6*p:W6 Ͻ\$'lHap+JF*fTVR]VB{¬L-<,SM k0cKR}2'vܚ"^+ŬZHGRF'|JHk3|ԣxMȲX L v/hыh=^U34?k'/9;qYrv-ua҆QrnF.+ڮ:g`Ʉ+O3z&;w+Oo7j>TcG˴K i;ISy*V\KiWvN[pSԐQ]I]ʺbpգ$"vðN FHQQ(ֺ8:'IFVLD^|=e(#͖Ɯu`݁3`_HcXBf ӫoߪxeDLֿ/v9q^ejډeIZg3Quf˥yjSL&Rp IDAT(%lc/'x*W*K0FN R ܧ$n m͋lXYhLFkm|:N&̓ןE5C 9꬇&s;N| ͖5P\%{iۉjZ{{ WW[QiBTv;$eT6/ k払tMhx XYKX'2Ef[XnPu ӄUĢYt J[Q}jnVf/B8"LDJ))vy(,gY\=¹e幼~'/\j#4hf1wD/<0,ը:}y؄Z+ctEZk"Zk8ΊܵFN*tdRDWV1pm.Z67h<&*aVze.h1ëMɕɤTgMP f.]CcfNR1bf&Oűu+2h2ZL˻D\GyyYj ;%z`exoZ BL1 OX2fX}>Mحㆷa\V1-dvJ۰䰌(""kmnq{)A-qe3C_yHJR̿pww~.fFhLiZL'LYAG\a|^ uPX7&(&*s?jޚ! [Y0;vNkct2&Ĭ2 9q=9q~[H/Z!7r~j`ց'u4?O4f%'EC \$=.N̬k[("cs{DZ9Es5MbLcde^#R#,F,k;&D&8.ukzjsk1b&Gl2PAPBTu#;("aɖ$!]NJVR wC"oFN4!N#zDI2;<^h<+7y`1AG=y6^[7_LL±:‡J!a[R{KK; STLaT|]dײZM&!3~j\-MTAȂ\uynѐJZp>پ 8XbϠ}PF5b4`^B|P3%8!vZ+++#gKvhdfK6{5}Af\:>8nosRL 6K*Z]] G;,t}eV` }$Ηr>P!dk+j[}JyUz*r3e}AyKy}nHgI+k>=SQZk!QES~L#uLW@a [<&QYkE1&tq,øT!A&?UseY*]?t&HF |x( V9d!:řN)IHXkwAEzEiD)DT8NrfE03@6 ixXΞ4 9]jRc5XI]씝!K9c fx\ wtТ}-&~,VP[` :HtuxA0): :'\eghFr8-rF@I&"/DZI6JD9ƭpd,YSaLH hPгtZѰLibQ!"4̤nq;c,|ǫ>ܸ#:ϗhd?_Epjz3{ +kr3嫭]I …y_C*;~aC1brň5"Ov-z-kPMG2U'^fb6nκ_aS jB#`'qS8WKq [lYߌQtbIENDB`astroid-0.14/doc/full-demo-external.png000066400000000000000000023354371335422170400201040ustar00rootroot00000000000000PNG  IHDR c)NbKGD pHYs  tIME  #s=z IDATx}w`[uaI$CEmJ,qfi'qة3Nqbg_Zoy"Ejp^ b$6!H[$.=9wwυ@Vd%+YJVd%+YJVd%+YJV{'kd%+YJVd%+YJVd%+YJVd&$=Vd%+YJVd%+EyywCYJVd%+YJVRv% Fjs!EpSÑEpq#1c#!cC!c!a0 7f'pv"z􂛹p3ɦp?fM0볛O73&8 73E 1)1:[d;"Y72$,]"E0 ǭ`ୃu&V&O͜,7^?fNͼ~Aa~ -g|n96smd?h3' [oQ6QM7oIDnj8nv8n}?l&pl(pl4oD 2p8ӵ*Oڳ' oSN)bcdz|ʞ,\K[d!ʞ,~l̞,YN߂BMn86ٮ@,Y7;>tȆB0 džB0 FC0ȍp߸ꭹ> =YZO7Bͺ mvY\>' 7(nn ͜[3SMG0zdpdpf77Y86Y86"7ȝ({gM3y {gf<8-C ' oI6od,n2 {g܂mV;Y7"Y75Y7;>tȆB0 džB0 FCfwoסlp=,-C.iƏeNdWhlp=7[t jy-Cqcc6Yzݔe =Y&zgj>v LSA{(+>Ѷ٦T{ݙ@/p% ۥNEݒ\޽}j<(~~5eL}M޷+nw'N><531k&z9 F Rl@+WH5е֪=_avl\c=PT%b\!bbk{UU{8n(JX{`dAzqǚd0] Nsw@Jn} wtw0?9JW :'gn_O~>ަ"͗3AUJ>{~d橩VKdA}Ȑ>ۜC_׉I7O.zy鎋Gը[E?ՓZT;s o:Wgۋ?SZ'3Qbrӽ 3 ޸𾆜j K&<Vgomxy<@f|D_˹E1r[gr6-jvOdT"=g.z'r~CAve)e!ј(l1;[M) $m:s)g 9OAD=K$"$),W+0<srBc'oV?`\},6w.F%ۄqewwJ<X~quCR+>z~o?Rkњ?d>žΗW%"{BǬc\WǂhjtO-o5)]OK{Te +0<778<9iiKk/^VڭWuyl(FRB SYO_*c=80ٕvnP5qfGT%rzurY _A> BU[?Az}_jnGϵ-CzX|RRʤ+9,h{{3 BX& ׏@+*p}HA&˕#q pL!iu5ZXWYB% 4GPk'N;zp9K^ܴ]& ]M2^yDF[ wuPhAcZ$kldnswn& 4G_Tɖu4׾p{}u994?`dtF]./I~%uL4L!Q=;Zz+%۫hdswaBiVq'1:e! B~[?^,LS'nvUmpon*UA )eHf.C6suheq&^7|gZxaIIJr:]T*`l%nuۆJ^8+\3G]s5]a^!\Fi4#2?6%Sױ)),kQce ڞSs_|AyJJls+A^# 0quS,9,RX:[]o<YNz)0qYi1O&^ëcYrFZ0QUj c#0",Ɲ-^^4G]:>;FER8& p^a5+m`0/VLRZd-,qNAM}@NLXIɐqL3O@fٶ+:3kvTj$Kn8tG̛ Ƒ1>&~W.B[ۼ9W*-Wh&5zMwrܜh E$楙H(ʢ FFpm!pI\o[:g$֒7LU@yM7B«Rc`˸K(gy N-mdAEaxʙ,XT-̓!C&"F-NQf_O}fwNS8%0NAbw ( 0 Bޛ~`kU_A*d{Aŧ{;: dwVR`?wUM} ^w-?]z.L X ܈sjQ0,n{ 3B~S9;(]h6Jo8e@8Sbv_20|"} 8B9;(1U1N !x=)J<}\֊Z?Zx;?SV 7$]e%wO6h6nTxsa~_Ç߿]ba P,`V__k׮ޓ'ODo 2Ζ!tZ<a@2|uiR@K6qdN?>2:(HT:+TT+ySovПH֏,f@@_;=mchbj@BȼqbdDkvx!@xFx9㗐.WK 3na]ܨy|E@}$<3 & .WKRT 󏌊c y-tE!Q4(V9VĵQU;=7Zs>?HTO_TQҎiGVgRWOx+&% dJs٘ey{f|hBg{A2L^X^݊adJ.%$Ì[3с&1#GHz ˦ɩyJoiɖ!e|$ r`DhaӀ9/@ˬ \eU. %9r%[ )ʖ!I wz㓱q*/;0Pd{/Oa`71}r]m(((Q/d )eg̬<Η?r@Q/t&mI'oR9{[+*ϡk;FM 1sݲo#tYv>sg~kXI Jq| wNM&~`)O%S̮Ή:];_O| &}+NHy?yn~-[J-˥Ou(mCe|FL_zz;spc ,5`i(ni+V&PyPhפRK?l?ʴ,!γZ- )“3IdEh^w?XǞl<ʝ/^0 \&)(4{a[^&6_@g$>^co4'j`IzHv&b"80I  p`no\n\\V#^Qtk~Oyߡد:{nK3k|G*I[b7cveL^,)3wR]#,P98t3%]jݻ  ǟ .C sOHG")A0$-)J %Lz[Lڭ7mպīӿͤڔݼ' G iL^w8ApB4J,!w޺'O ,c2lק;"1&_&"~>3h3M!= rs$t2 |^!*- nlEpKP1)5}NMxH,>Oq0dki S(eA65h,;oU2OqE0Oϥ>CCIMy@#e{Ymo+ܬv\8gǸp #mN?8T@K$2}/9IL6œDct/ tqCwIbr8,LD"M7`k-XƁy4OwU:<;=r^H$ $XB2 sϜx"d"z\en)}mDv _$H<.` s~ H /WJ}ȅ|죘,ß^?ȭ`FD^3>5\l<^Gx(!DKipFe,iٟB%"AL76;~E i̇3e;0F1뿦Z-{ dY݋m-VWVQL c=^wA(oœ^}HFXTXD&F[!?!Q_S<FG,WS\;aֿ-JvG)%f kC 8t_]F{ Ծ_T@NB@q8W7I'"`̤y0$mo{{bGE*:9}0Sb`y1rbE0^ W^ocl5q>w6( %Bjr@%r<9@E({YyY=J^cOp32Y-jw艭bDGUtLa{XQ]2wO{t7) aHk%FŖHRsߪ@NdT>/4/!͟9_ր7F{ ~6/ _,7 39GS"`A^Y~QUD&Vc=^nt %F"LjYk񸶨X%xc0epv}}=# j^`` caȺ,'†v^Jw Xh7:fpFW8T7zWA aɼBAO\| ybi6K G}J Y:ff~E=\"vyo7! b bkyj7BP Uժk$ibV^Yٿ S ޚ,{ъspM. TVT>;Ź`\>#8[,%О{@]F։!kU\'/Q*HU:?u!:æiQ{kd34{a`6 ɥav .vK0K(MV`w|-gچx=yo7jsn?T'@v!0Ic tzF[Otf&ձrlS(>-ǦzҦ\2ls1͸Y/}:>h ͕EFv7A'NđW,?DӢ}զ_sa…e{kcxQ <;F]QRas \dNn@kJyi'b/Wrneuy `Ь.&O#B.trIXVP[KqBbH. q9r R^mǙs(,knOF8i<ڼ܉dݻT#(aObS3" PNPs TܔfFKqJu5~mzQ<M+ğsIT\'eg- mˆ+Jrpo ӭ'sVTYJfk!*[4" |UZxArrrb-yW LzY2`'8I אF "P|}C jkmxKѴTF&L3!0F q|+M dou>:c7FY+{gfW~,?/WfҶ}8F1 @<_2rr'D[\)q9(TY DrRN!G^N~?0bB='4 0~. ;*=9r|06 ~S*59٧Z~xE?z0p@!gEڞ</WJI%}wJ8fD ?;߿3xvgYVH(hE[=8?>`鉑noq7s V.ѿh/g>I7ims`\q=:tcoZE?ʦƺ'u9'RvfHiU9xNŗ B&B#Z7O! \~J.G 4c9|d,,HK߬b,}F} {w3xBWl?C_صcVzg|s'h3?;f%sz*^ Z߷>Iy13{9 ynpvNvWr|TiS i@bU)2)(4c|ݝW|8v! |# s%=ږ|&?AA dL FZ.Kh%A=lқ5ʐ^v^d\dڻB@,Sq``nw=z;wj˜TCQ(^պX06.w^PEÆ33mZQ& 4OpS(8Erg,͌|Tm[Fo1aO8Xr͌IRX"LlOBt|IdЇ[ؘ%vՇ&k8L>`t[fU4<}j亳Z~ƯmZz?Yː`p"<_B]>A?'nD$`-?ee/UfhMu)o5u`[1@x|Id H0Ҩ=mut%ͨuKj[cU*Hզ*5;&g!6ءqs %Ź hO7Xn*j-o][E[\Ʃع,FJ3c*, FQaw]"ra|b\?$ ^㭇7%Fm)7iE’dZMYrEtDWdWջs!LXTYXutQ% 17.a{񽁴qA'Ǯ؆ZO}NKI\6Y&ԱLt׍Z/p83HP?"0N”0"K5<"'}%!c CjkdiA 2!" |#tZϭ%ak7@'--ٛ6Y(U?2O0s/S)(h=v\ǡ^}cCϞrw>"a#xpo q ~[oޜ@3˛9sJȖK>29ZhyIGbݯ8D<  }~7 [iIgwǠap(Wƅᙱ8Q,~c~md% (W@OO 8 9ίDIX S64E"/ N` ^J cShbK.0m./{|}Ca [9$ 7=WrbC;8*2yLR<ku1C f߿s/vo4@L̥`(049FQCZ$~ 1p?RU<ȅ|˺@-^[~},FԢP\WcϞN͉m7W=*@@xcB~C==eئ3Y9RA!}~  )Q(@X&a $bxa*ч*P~y]%-W[Y&T0$'5*$fzQbD}'3Yw9x ~kzLO-9!P\ρџ}ݓvv<rZoӴucp}_ pɃ/bEI K\cp$,f1n~FX5Oyz4㉷P1b#m3 K!.0t)}x Y{!`5؂>/y9Lh3!E ]@z!?7$߱e-3Ǟ)9Bp3dK F׿KwwqܹصUUUF_|78ieH׬!P `@lhpO^`Wstҕofa|y;mbF7jA\%1xVf(AL"<ør9g?Imp{H  jy2+hpM\Tł Wt1x%꛵mDRJw8ܢ)2$qՍ Fbu8_e1iJؒG[bňY% @Y$&U7;<И[f4&V(IFDq"?3h4"*PKvj%w=3a+ @K}S]tZf#J^ KZ,bL S(CNʄ|0F[zJ&Wfv4haHQ\3>JbZ@/ڵ.?bcIv6#߻ͶkvN }o>64Q j.w3oX4EP0ϐsp!NÑ(@~/(虋LKċ?y99St#SE1ʜN lSY0ԏtthXX690j0gV$82o7df!AeIr3a @)kA(*Dpky&{plukD sjR\uxC|N!@(@ !HL#U#4Ӟwφ, 6I3}^>^YħBb0R.T7uZ>v&Lb,S!uɔn!j5S "% d@7M~`py74!tM×iϧgR,IN J9uѼ׿9>u(ly޴ϥ̉s.DORG@h4v*j;߰ I|}:{3+VweHIGf"×LKdPTKVܘvB~k7ᚩ*FBEwi⚼-4wI:z$Zʙ \1h;^C 4g^rSE~P5Β5&,&(-~"sļPEy_ӟ7{~1VP //Rub$x{"io稗҃DWRSqdyE THtY) ~6*FP!jLmrߔp:$yJ-4˔웅R5t dSmTD%A.3!Sn4L2,g"R-8ȧU3%EC'DGÐXkՋ 7Iؠ' AdX^]9([ UKǞHJ>۷ƅ(iJ)t>|}k0TjAAA{?<'*6Ikq ]f!`Z˦sdJ\@R"8^6LP0L "HbK}RX,jwLWrO:FMU,FR~8(J,T2'< ݣL$1v$h0 ʛ}։. \J_csl63}Ebs}a2bL?,vKX>aip0@)!ȧccec8j^u#DW>C !k׫Օ "&m,7dp]']Lm &g(W@^4z0fLP~qex"qN\](_,LIğ449:la8*G >FSq\iS%D&`4E 2-hL&Cd)yE'![]$66cH.Tmĉ' IDAT˄^.NUTUE~ŶA!~`oY;ʽ,EhP| =LSmm,Y6g =tg{׈՟)tlZQ%U˨j%S{g?WU[4jT*X8\βad-H, A41WĜsZ/&h> ɜ8NDIȖ!I>Nw󌰦2Z_UeabIT0ϝUlH 00A$0d!Y!wso{G 2 wFqq&GaxJ7L 01Hsp&{$>TۻT#ؓ(-\plߢn̓kt8UH9^)*=_&\M| ̮qۙNYC(4leZ!7!".2>!- &EŖ3*W6A2ND(mQJ"CzYN  }*i)ld4 Y=Hn.AKq+W>b|N]Iv< !CHLOjފOt`L]" L,'Kv&uՠ_h2/F-{"Fq+#5Sdou_)W|+fwlK!@jA S"ĨOV(` pr."V= `J9kNP+R.>jktCT:eSi$2єt*$10>KǬDYC% }'w2e׌K0]oH8 Q*%*@#{J, B4= @XEÞOt>ɢ)ZYͨGd bvFⳄo!&gp1y}ɓʫKm4Q\ No7@N\cxrZTڣW|Uy}-wFsќ7B!U!"J/<XxB| R>x5-l~}t'W9YK{l7ZtWH.?+7S;҅j-`@`G>rJtm L& d0i0@ ˤק`*]G@Հ^c"LT"![Y 4fYfޗUm]kQ[a7I\XW,Tr,^z~BIkhÂC$܆ۏf|hq@!S [`A9͹ڦ0^yƼeلIң?,]In+"wi?~ ^K/pr= lMa-)JurC9YnR+UO?*:_cîWFw|+-Uvj"&{NQ1m] )raFI`ex$ `,}ʂIoxd 7+D{EuPPsޞueC(i,kY>'[*A (8\(\3), "lyK ϶ $_0ήJ: {1|lxOnv\W#cvbzZKl-a6R!D[H!cP8YɌuxgR"AdXZ[&fA@0M!J&Hں]&ԙbpmrraZPW8|w5Q,DZv(jZj;ZgU,Vsu]I^{HH'%_ % z lu/e[zK\ɻKiPAD0kٹߙsZ} 28d1e>=,W)Hujfg0,ͲLqvm&q˒K=:K/xvVm>=  mO_'AKC%dYPryY|=iyUY!͓P\VWcd3ڛ3 6Y*R_Vuk>F!3=kq!*u?D:fE.PQq&aH/Ra/iG.2^m_VC\IՁ"af{ Ü8qԩ43siN,\g6k,߱2! G$/W볌w:o?S&95 "! r< ˼ŀ"C]9xsyٹ,P}읜00o&%U;ZOܘ~ dE4@ȕ _4E4;Z +uYl1eM'Z)|$)ްJ%Ր!"+H q$暑 I6,?28x}fm17 WQ&-/X"T߽qݸstx:Ȼ ^[`j`汎}S=E6ɩE2:@$ݳ kSЬ3ϖD".AʊeQ,U3jc\wP-Ϡ6D^AɁɳxRdS:$! Pyg &ElE&> h.7qz 1RmM)*ܳr%KI3bg)eî }30 ĢT^`χh.yU ~[HވFBN C]"Y ):L*`RdX ƀsGGHVMy}^?J(^aHñ7hs F_BVOs_euaXgQG݄ɳB ai\jEI2ܺ%sbz{1E#(UY# n a\ ,nP\*`88mg0ݚg>gqbBܗq߿\_A։ Rlۧ-@3xLƗǦ1мo~l՞i? 3c`1r" |=|q#߃F+` ɼ-VdV5jXW$JQLF'PKqٗYM "Őex2)B?J%z>3eI4`?65`,??cBN*q?mn:#EnI>e !bZXɪݫ>~ H>0CF2Y\BDI`BF2Y 9!6ѴD2-_Ĵd@ɵkeN*s+h<6c-;bU:&( [`$;vM9G"HR(%r/`@X?cStrxZ,WgV*udܰefY/H,mMQ4crF2&4]nj-wZ~ԗ؇#}FCFKPYQE' es~0`rsįY+BrZm F|I,RW2ufo|"%= 6UXӷA5`(Sʣmv>iys!E+23'Ʒ?+NiWIt-EY\_5=Zs#] Ȧ-K q?8Vιq~%&Ѝd4&ֈF%-W*hqA䨞JR*i`MZwB)Y^xfg|~75nbhEAr%ͫrh`]6{x2"寤[ƒ_}OeV k?i .{Py۷Vq?pxؑp1 PĉjЊ.`f,B`rsXB8<5XȰua", zQl12rǿs׿%}ug1aƜ(P^vUn/y*  貔aY&N$s&hPwJS˥foQR ԫKceöPs רB-2}j7U(Nȗ23S k.hf^,Y继 EaWH&I]߽5\ RY#EQ4M36|?)aBl@KQDf؞a[SUy%T!s1;,8(YTYŸ] @KUb '׭ J&AiU:{sڂ(jD~{˗_ߜyNy/W#Ӑ a`f38٫x# mS#̌LY@tDqt‡B%khw7|%~-i380i`JT Щ [Ȉ=QUcnqicL+Ql߈=lZ$ZʴfX4JTH[V D4z﬍8 40bS\&W61e:6`$Y_%%XF# h]l4O zvu5/T9<` ㆨe: N~V|4K%_RFJpG OeNG5*oTTjEQBs<g:U!m *Ss$7U#vE e U6qiع썝67bē_ # p#CmKt0;scc̀тR}`ɗ,k|u4Ĉ/򓎤/˶+e[Z$<G:EsS4cY ,˦!l^z|RddH(`GGlǐuԩ1/I!+lAoe BH(`.H\RS"BdMO0WY]% (8~zo8oũZGʺ}fATBOM4"_ojyyˢ~}G(I)_J}-mO,W PP~j A-})俠"'$uK%(dལ}:G0AA~9ns>=}>uo|9;E9T~ȉE5ؚ!HI˪-g SUy;:;35*w9 kߦXN~?^X)J hSâ̼o*ޛP5 T2:V_Eڍ  o)ZRq72)'LTTEͽh;6oܢo(ϊJD%y*Bpt?ajƎCN,ypG++QsY#w yĭ)SIC&pܼ5' b`| iu>LjZh!.eD!G%|ѭQ\Q B B1hhY{nQXa5s-GZW@co0@Q =R+Zv Μ6J#N6 ͅfֺ| i vJ\Su)e [XL7+3 qT;iuNrbaU7ǙVEŃ;38 c ^M8X;ropO6 j'ߍШ^;lvgMu. r1OF,U)=c۾Mc~/ #qk2k|\(b(z-7E (ɟ)*!ǀ+Yhm76?s"F/-) :q"j톂"NOk3ɰܖ!fY^Hp >MY.gm7|wG&!jKR*\+˺X M򐓡"![k,.+TVH)Ҡi^?bqgM7ǫl1O8k?a'z8(Pu΁Ō`%O/ZA^ WTG:o}G>sٹ͙eu]>ڕXtB̒Y(WQZ3 sGfy]𱱩SLjZe<r+9CcɎ- !`rZ^ǒgvZG߲4$-i{^A:ss_WdQfzYZZyKbEk7UَO}뵑L1.aIJ3l/::6?Frc1L;Qne1wp̾Zc$RZdЉS' ~`tF4$+i[ I^ڭݦ^%y忹v$"u:KXR O_D-{)3 $ 18w; Ֆv=!i~Af{ۣlnf/}@ԁ]j-]'ǻZ8BL*96wĕWom͒ػr(`M!1af'5+.8lV_ufEѲuhOٽkU6hEÎ-C'FVʥ|:݌M IDATˈj醤a!]- >w5k<<~Ϳbp V/KK+n*oAq|T囪f[CK ǸF79[s ׁ5u}pf̏90Xz=BpiRQnbx7֧R-hQ@X~m+ve~hUnPuM-o2~),D* L|\˸iWUu$(zKP7^`iUG3:MD!b.`@Ue[Cs>/G(v8=AUˉB neiYq*:>d7"qPYvn.)ⅶ^; I+SDC?+ RBQ!1:8L+m:̺u͗~;K #g=x͍Ww Ox\AUEvczlu {ams.@dB)m&vi#BIN\Ͻ9 ya-oqm*ɔ5,mk  ڞ}SoZvH,qϳi?g˔0'&0maHY Lhg#'mnؽj]pz*+g3EHy^#זgl #>7_Oo/pذH)c /4Z&!<#fOwQ78) x[nFs.lqi5ʜ"o~dCs@Tdivdۣ-pXiuGz.*{v %S!޳ `\_)ܽLm◯ugN?vh=ʊ%\on*j,yuR-|y?,bwѳ Nqޒ{c@[?vYk79usŢrY>Z^isݓOm- 75gm|/]|m2iF{cV|hm`iiLh93֜>gV+i)|jlb\.F-T%kN3?<4 AM$f-?=+9R6rɟǍ\+u|iۍ17*Uh<\Y?o[dJU>M?5a?)2?q VԮ)*k_ݡ*\gnaXBA,3u&*MoLT&j_cMujV=3ï,,b,nk=_p_om92T{s^|@$vk:m^3px* ti[*hۃA.PQO|q]ԗɚ=uOז9u>),4}w|H#*44-iZՃ!C2 ~u$fU m|Ql2>qO$,鉇_fư!]58RwX hR" e=/pq9!,gyADi޺u_q&K,\,L\igejL բѷ" q굡i0NLB#.+)QD÷Y;2鱑@dbW5_szO7&L3EY<4챸U弍^#7L)~yRϩTw<HRn_nАF;m9;8|X_+.)ˌJgڽ9{nl:VJUr~5CZ'8ڵg'}}Ą^g4[Nዲ kUb:Abkݘ3;3FL3e$rۍq0nbW ʯ+i39:0 ˮh^M릍eue J+kTDRºj/WUKf)i厛}ǧLcp7RP"?VJZ`@-ܤLGTPR_6&lo(TK$ċqE.N#hfVH%&V\G)WFuwAk*eu h}SMMRcxwv~ÌXv}lks#ƍ;n *枞/v%sY۞~}vgO猚 s]ɮrjxw- RAǿ__|Kju>ds`pԹ hsT-]B~>LqBXFo(Z)tvGw>q]V}aFqID>߄vOF?m#Qo>ƈHRf[oS&sݚL*L~|/g. 5Ŏ }]rf}JZ`Jkd֖~8o\%i!'>%H^ !ä/pB"Ikԍ<<5K>w (8SD.`;X@-(n,D,ږ{'?=okBawҽ~PsHEEܤ(tEߗУg%&OxiHy:fnCۅ7*} $e&N>6cZ:~Ɔ cxwJ´ [#Af#Ϸ.dZ?]eٻrX];%x9ӚԽ-\QNċ)])v -owƷ8 멩6!dgOX`RZsn'ڑ(k#'yxm>Q`?mh*34J}.O﹡3mt[ZKЗ~5ʲv6k~wZ@s^Q1SgKe ~~yzԴ;?qCsH %>74jjxIP≀Ar\55U\p;=|hg#̑f<> =.k0B)GT@a7%)eYrSQ#ZNOguq+n\u(hEUq{+Њ,?Nq0Y[ngu:^ӧ:z.[__I5G&NaW w9DPyf!{~L9¸3KwL, XWnb3Q+Wb JG[_it%*?%Wܳ3g}$'B矘nѼL^_K^ᠾqHA Cg$ %RūJL0 L#D+ZD+]W$-nRD4HUAt2}g!KO8CqS\´K,DD_ɧuߊ^LAiW%VBBl~e3qNBF{C+/yΔp v]]Yót]vi,Y!3L ug>+_$bZi#4HԑnYyp,dgaY]f7i'Ffdg*/q^;Ѯ=*风kBZihpEhp &}F:i#4Hԑn$ i .,' H{,7W 01T"%WVZ_t)bb6.?^)M pqlO!y晫3 W:`ihpEhp ;V$H+ u/FVf+$ )0+!əYx>ϮJ Cz슜Yx슄!vÐF=bL @ ᪥NM@ @ W!R @ @ @ 68}@ @ Bxw=JDA @ W!裹yD@ pUM!@  ED@ @ @ @ \O!@ @ @ p5B<@ @ @ @ @ @ W#"@ @ VtB" @ \%d魥] a" RB@ @ 'D&Q3"" C@ @ GGܔ[+$ UBϔu\xO!pI8>ִ1QR-^JQ?Gc߱s;"'.\<-\&el+M8%Ol 1}^qzjpUs"MZz.{29M7%S|󷟽@#}ylIײ!?W3l!<&б $"?zf=f vU?=7ݴB=C K?wLx⇂~&'j6K8&@ !^t/\QG y-gvlI!Tu8,uayqTM= >LlkLGDKGK-(,KenŔ53d/h 93dUc*#vm&KCZ:v`MD2=񃟴< sjyOcMYs9O|pvw?y6&Ǜ+ Ĝqz< 2 jT imd4N @ x );b5,IJicC\qYun&p2k2u[ 5tJՂF Z<@UkU]2UMCEQ IDAT5-efg,Rrɻ/A(];>˂U*k83hM9#,PKg*tOzK*2HKp%MWUMg!(_܄?GetJYMj6a{>?:"2TuߎzewQ/{M_~d?`/_!bivښ#ݑ"- $h@ևh!dV" @ K<| G{"sxQ΍ԿoPLM._(D]XV1wh f?8leiY<ƬO?15m9ܾP(4G ee+ 2xT$ǻi[c:DB͛Je Gb>l^ۄp`H9cl !eiikj?7>9ms{B 2T9uM{mU%>[o[ M#SӞK/ƾ?o]m|7WCg{t/s?#*@L/ ʜƽvŅKy8xnTE^=74fԧR=T_Lso}uhXя9ʼm{oMpp)Ȭ-ֹ%>#^|w܄T5_z01p?|Lr$y(Hђ=\I̺:tG3|5;q'7's&hAccrblUCR7k]]Ѯ)`g9չ늺 AZT?lcz$;˔7]ɤ?TrQd1_eW-Nq_.LT0O%=:1oؐ ME+ǺY&eY(1`wNiLLje\ yPk8ef,C⑬N] MjJ7o-Kos-gPr׈./W[SBUUe6ԅhW`2,х}&BH_-Xs[)QAwuaG×U{_ Ff1KT@z?f"0{Vê=5K-ka;Asl{l{ _*WIoΩ~\!s.ciOQ"Eb!/3ͷ,$6Xe!,m\5frH, )@ ^eHj1rrbǑa7ᥬu;2MT*q`1ULoD[csmN6d?:v!JX.7SwY{:zAhw+|!չ.|>SV~v$+[W`-&PJcʩ8\LdG%_PW0rf2ϙs 0)K1\޸%1?";䡳P(Uf2D`g6XNLt8RP#xmξ^hqݚZLs;Sgņ{"M%kԙdؠzǦZϡ:􌺘_qgUf镎/|~4Y;У6Xy{j]_> '~R8Zǣaϻ˟^_0 /ae1:pO}m&d(Qͥrnڠ8~$_+76xM/o'X/.Uˣ1Nx>h3n QAF"6tgއE;I 7}[w^f5>9:V(U7rq1W$~2>JwuAd nB/nlW;g>d_nȾJ~M̆ E qΥ<1'劳kkTى/38 3:: 4Mc2337l Ɉ|p1G $7nܨT*E8 OEdٗ_c'q=M@3ф(>f}sǭK3y>,>fVIJh2 2q~x!Ϊjɞ FFk:ffQKr!w226ll3B~M^ Y[M'O!pi:A&I3ngmqTΨR,˪]4Jgγg+̙,nB\IYGg  GbU+ʺ F:9)BX"2%K;mSIne4,Uiɵ/MjK :n؄C^ e҃Gu`wo2hGYKe9ʚe(͗n]7KPvͼ^3M2V1u͆ýbJ9{co$&L|ٶKT0>.oY%!X]Ҥ*o!J(4J?{2+wkw\swܫ {Q|m2J5ࣉ;E >V).y }>uH &+:Cܼ}nE^ŪpD6G(_Ri+ܴT)b>/?\fwm3;3 Jiv*r#2)] eG ZZ|'2UN5)] i M 4fX$Ӧ44rZ=0D7^ԊbU `9KEha{ S2q~A|%P$Ӷ5$z7S ej`;tjڳT) V$39!R)*}UϦ%-웃:rTeu(.͋+͋]H=fűƴ  ]\ "%д*MFot+{| /轫<ђ? o5hxVus^ҫ:#2LN[myg-l6dPsF6޳&4s{gڄ%7 ,Jzi svczoڴ)99i I\.1Pmcӻ"5F֨;FvPM ޝhT_/>tszx&[eK!4`knIzC$tԗ 2ץ0v\RSɧVMj6 b.zԿϠ},m t{IѴ>`fD,.ToT oZנ0:Y<3FUq._ 5r\$₀*]H$&+1g7aaj?romvnX{.fFWZ;4p7 g=1#rI@'6dMp'>-/aEf<3N,ZEU,[L>{zkaiU=YFƜⓃy6gyV7dlZWӔ4ToaxR  rPM*J x̐~iڃJEi[oOWnu?LQ 2#KYko~#P]ϑTe [y׆-g_͒Te9ˤZwz#.刜;?ebZ.ǘp#'28{}O581f^}+cޛ3/K;4\%۳|sB 4%q$mŠ]s˴z)8p 11QRXVZyyy4p5F Bfb0LPMϗhO/\,:qRۓ?h3YmÇc'lU&Nc~ԶA#Q4%4vVmyyF\~'Asgz(b3HjZ?V{!N*PO/(&uHkҪwsIYc3(6\H_CrKף45dڴ3(q۰g.=V+)һ'U {RJx$w`wB2킭YbH 2E[aT <B*D*D"aPw*Y4x6ŞnI1o(U>ۚ$ЂD,kg:P._>ŰNY:˅ɞoM>GEEEy9 ź‘Syr]r*hEBcl2E3eF1EhehiJ!ZYn8H-FFNlVw\wi*8&e6sy=|)DWw1w p z/sb>ƐY^`qi2д*FnoFVt$ix==6默Vћy6w2٩ݣWZ(f$iV47=L\{!Gӗ'T 9g>N=ǟޠmn=3A~K"rNOxm>Wr}t6,9 o8-⹌JuX('#c3M3J?#+gII<}"iuߓlon>9f )SHΓX؈,0B%VTTaÆ$ _t߿s۷o644D{L ػв0%zn?`2YdnkYh.¤LcMm2ʍ%*qJmbYWԂ 2x*UYU*sS_HJk|7D_gWFQaleP%X c&d"oJLdzG \LR-+(qI])/˪oU) ͼbc2LNV1)Eeݝ" l{ሊ킬ɺ}˰nUƎ,A0}[бS/JVk eIT'KcO1g?[q3#玕͙HloZ`@ª ȸ&d%W$$Ъm{/g?e !gr+Y|3ljx`*SkD&s~h|*擖Uwb6qtkKъ{:2?D$~#F_i]cWʕuM8$xf;stYW6pˏf0P5YfjҌY5[ܺnlYlo[>p`Ό~ ^K *JpP(AWҒ–%TJ(c t@7L5j`o4A_IIEK!>R$#Ph,.Jǵr wѕ1H/CX;wƩ:iJZjy:=dc*#Az }UɅ MqQu2<)H hJ"(NtC UOJ*(M{uC'Q91q9%UJ5F.V *s27~֟O,QjEIal9m `uaO jZ(+HK֬<\*k\^DCl7ÁeUhUD ۢFM!2hT5rx *ʉST-Fr:1M{$RQ4%{Z kˬQl~81ǠvV ~ףshJ#ѿނN$-ʪT:T1]2QrrM7ǡCǖW2%X|X-0)SI^9cQ0Y#`'$>vqp߂ /9./mCd;w\@IB}t;PU~ڒwRl-wSVR̺"v]:I)Z#MMMfͰdUdXs|\lR+JKzaˢbO1|X817tٿGP#SfZf%DE֌g@jLoï>)l&o](j^$Q_!5Xn'kkӷ~aZx-r~ˑ5_\Ĵ>u~ĐcEӴFQ; x=ҧ(/Ap'6N$.sV,;w Eٱn}, ٫mɐ w#7{w\֟ݸ2~_-ÆB%Mw{afafYaUPDQٱHߺ8Xj,$*iurLd2Jr)eE1IUpv՛<{ts~XC5-(HRSS|R,//W*l6 ^sF!za;Xs`ID5M j[s6m>Y#jcتvo_aOV~vO ٟwn߉ppˡc?uMؑ:B9rȂ@m2УGk׮%&&bBA/ؽG\c*.h9s8ﴆ҄ ح;w+ʕmk_ֽK܂ H"S)`pxNN>^l Ŋʬu~faLnD^&7߇RLI09Nάo ߻;waffx0lD4xZD..W=\p'>HߞIWn?xYPR.+ X;  mIBIJipoQ@ƕ}Y̥t:GNnnv^~@,J2&y|[wk_VkC"\03J`\v޿_#V/_]P")+{[;;6aZXj,k*(J4ɰ gOywvʵgBd|G'OOna=! JLL $I1۷oήq)'o}?ڍ;F>[{ *z ڛNaR"y-R A^{9;x[Cpܿ{!]ǭ]5q[iK>jSo;`Lcd3kӬ^Tvc!\h>|pff.߿̙3NNNFxXSE[8iB$IzR*:~BϜV#G1c')QIs^{:Z^ Lp/G`9+CkWEktbzɢMJ̲ @<Ş)L<3]-OϞ}\3!Q汕+.w1Frϭ]vBש7ecLsqumBЧݿ o ׯs$iˆ.)4- B\.gXeee:una$*M=)zܿkdRtZ-d14`yk%yM*}|{GIF8utQ1ӡ t"yr.㼔|+NdYGT rY8X,yߕWfno~wy/l͂{x4R  Ff:]箱whGdR7nZQQGVj U*͞>}[6OCoRdY[TXmcbb(63ǪQS[ktQ#R*ϓ8'U[0z|Մ 6dbk&ə^puf~8m=xXU^P4 jn&Dsg ;;;`???[[[.]eeeݺuKT6vXzPQm=v5A'>LU#vfI Od`!?`2a'i c[hjt)XS,09n= 9=~iJ%%9bY;kߊC)jzg:o6 U;bɾBAnnnݻw˳o`6 .lvBJv\m r}ܥG*m]|~kozewB/͸J ݲة VN m{[(~ztD1ebV)KS ǷmUTN^>>}{Nm.,Rdnj\m_H)`8<>N>.! x ѣEq=dX9vvF&偽}[Mdo3yw[,&ڴq9ը )D/*RerBZظyٓXMBW+5N!jB8N!B͓96LjtV1{KW~lSB8զh9[~zpǎV~/MKk9|XXFm ы .. B~B!2A})'8\.B!Ћ"zWzr1!^vԌGC8w1!jM!B!B!B!B"]B Г\7B!s8A$Z{Za4B" dN|&MFgIWS8tpB 1@&/^ܹ^RzݹrBg:an г"B!B5#.M B[} 1&!B!BHH z(!30=KXSB!B!Լ01!^M=>B>B!B!B!ЫHצp_iKB!B!B!B/+]Ma+0HoǎMo[o[o[}qE!B!*#F9cƴ-5[bBB!z;wv0c4B SB͠bzpBB!B!B!^EL B!B!O BDaaRraE25J0kvTUиI Ba!@"B!B!B!*j6]AQD%}ƛautoiNE!B!j<9BRE3 B!d5K!r Jz-ε;~M/p"B!BJB!s4Mg/>jBSkn+ܯ!B!B!B5ij 7Ej>_B!B!);=yd/7>hM=sj{V}:S-ͳ 9=e*08Il~[)E1h!PI݃Hw_4Wg/g6Uc6qS wqX~s#CYQ$*o V@Oo^ү} EDZ;˦ l\;xsk56#̚MDj\B!^Mh뎓O~uzWSFloߚ?grI&WB!BLo5h@Jn֞SVzuTrD ى~uc;aZlȎt[gWӟ-+mgʫsMu鱥@l8=W=Sõgڄ%We%=Jzp4KMv=4iϝ}cHYYuTS xh~B!^)MӦPI5w+Bq`1W70C qA7"/ǾhA4z-At&OB!^ekÖ T/fT^eRY)#.刜;?ebZ.ǘp#'28{}O581f^}+cӕoݏ/(i򂌸}kgHi2]̽9jJU aYr=>Q4f@YД|Ƒ +v=-")ek>ˑ;vXn$b}֯)M@BW 6k.*A=ǹ ot!7&ޛ %x}k]P n-t=鳅%'V-wLntJѽo-uddG.i"n3#U1XB'k6|y4+wRhdwՕ S<ܥ54鳥LϮKRrNOxma l'L,9p2*ag '#c3M3J۬wώ%I'1gE$vhVf+zgC/O8rɁ5}l8N!mBvXxjYĈQpnA, )ݗg'0!K| Y[V)+MӢt76.,6> 4/m;t`\GM4UeOE^>oν:q8ۊ55j\ a+|2dv;}!B=/Yq4 s]Z!*+),* `x|gW7_oWV=̨Yb0WZ&VTVVTERBb6>n 9mZX@F\o`5Y̏1~*̘s'tJ@ʵjdZu|'dk{;`p_Mj-l蹱U̎~ABjiH6U] -X[q`wnV[)?@اuՄzb(tJ׎$D!Дͨ*[̀~}H%53=m9[Be5!PsoZMXˑyyijB;~`f-MMsx:=WNϚ2gӿߚ?gKyY씟W-ZDIu~kZ?i8 c㚯.]_ IDATg`sde˾YEŽV-jS>XAA[ $)vcG~a;+WgnPTM}ca9{ =CūB'M4yUԊO ,"iv}B>b|^g$Aέ7J]u߻&%\׿5~cъ#>Jރιc}cKԏq \m^{l<:t†S]VߎǶu<_N}Ǻo q2v.>κ.l­xl ]Z0]pRMݕ]>#YN.ሡCO__ +thkl;v>vA&A.OAs :DqpmZvy},KwwŠAm|`.צ}B<8(ϏuϞ7l'Q`d۾_!K7">Z\~oI~4wk`pL(UnmGyw:yx.%v)+?.C;{3ynSv;{Ln&يʜPY7Fwڳe)ItݪEl&@ξ>yrkcBА{a]gjـNko x7~kQlx+̉cg&~(?m0_~#Lr?'3}}r/glLe/~w3:_v6}ixG!^b$yP>–qH^3ߵzCU*u@=0mۄL$/­Z, ~>` t #W#tJ)I*Nv] *iN 5S<^) {kC/=̟>>n튨zů]NtM 3GNϼQZ;ƴ0hJy16{LhgFy^.SȺ%T@w[!sw?\Ry=gba㝽"vƻ4k 3Ǐ,voѲ<*[M?$]UŔXt_4w$ W?HҢt}r~JzavUI#W'jujlwVvv^K\ʫcϽה $NAO-9Ƕp4L< M,^\3qzH㔢ՙU_ᕱ`leҕGGvm/w3\7&/:un .; ,k=藟VOy?O>2+;z5Ig#@m6&LP{<k]  -IA#ߙ旯*5om:q0!O-a0a[4V<6P 5ߕs~;qû6a?%[<˟*4G~](d"ߑ[Ni7< œ8ws9;~5s8e;ߌ6V?~p|w_-SϬ^v; 1mUv 5LP)SSLI/;EYђMע7~h~uu=jQB=wj :ycPP(\($ͦ|(LP%nΆLAbnHOvORDdpx -ayF$ c'!-ؼEE=0PG>eD}5!ANPr3htj3ڗf5*uq.Ya |SV~[08^čtW;cWs[v{k%;NMj _gVYPA28ɖIk)|", 8PKdV{ύ^lN~>aKȤ\zgne_טVSmx]CDdɛw}_[$ÖSpy;Y֭/~o0|UʪҢ" w@++fٽ+MfP@{6<*} /dY=@t 9gاv+Մ`ږœ/<6g_؅mOM7}y.'=}z}bfϖ}x\7 By9ygz.ier*BC8AdLS#=.V+eEy<(MgSݺWV%VQKeOIZ{/4D]M0;^_M-&Anhw>^E$iox^,P!ISlt9CۣFE_Bs_Kb(L,~t% (n&feJ\Zx1p8>%pu $%λrG/ĤdW*KDi ŊxgxI=|G fIK1J\BKNd֘kwZTs7jJU^}stx\Ǒ l)GfܬRx~X ww _0L .oW*J..~#TN:`y*T_:vnZ%tԕQj\zP6s/gW"L;2M҈J3kMv!Ps`2ؑS߷/GG\ftJQH(Z*x0WK"oG&<-*5ERTUfdbʂa|M+O-˕%3X8K2ލHg]8vF6/KWy]x2YNa6첪\Ɨ YSڥe],X֣ܸ߮3|MեJضXetDGJ`̟{aw \X3amwٚӨ/|mgURE?ȿPAOYxO^Lq:ujptjh 4*]=q0.t{)ַRs =lEkIRS؂^Y-{e_R9keulf55eF޵kU٧ xsIUwߎ #IqAr>p5Vío/w䊓.6' K{(+Ivۈ=  B{Մe3;wř 9Bieꜿ(;&%)YbTs6?} B۶*ĕc*UP̄(N^VL:J@^\d] C76ڳSc"_rUI5Y-# Fv|vcUTdP4f5%ȍ,Q)@(yX~ pyoڶՎYs]ѩU-ɐ4M$7ܴvN0zu3;ߦ=S V:wZ ΤoW(Vih.-]+b6/GƮ_8$xfo$'s}[ph`\<]9h|h7mOɦsI{<{GZP;?Z_G&k5ukc,] j rWa(/nۻoWF97bG?:UmHٞ`{_gCǾreWmǯsZH?4;!;iۡz<QE&j+u붭\railLR #Hu]\[ u*Dq1)" GOӭ֝{%nje3K9]l$QW,ZayF$l³.- u]gMs}5룁g]Mj lԵ 2\  нHM=݋.Ӛւ5|0!Z=9eKs ޞ='(ɟMo"fJqwUE˺f sU/?wRy}s? iw#WgEW> ͥqF\zBEB{M3R5mΞ;wܹs<PZ3@,l[p/gmܲߴ_e ,~((HUݿo;_~(PR$tHi0{qA\(1z6g_ Q3uEpܹ[B䄷wB=sϷ ۴b$ݿG-}Na)UJ]25ErnˁGSvlhv pӿbHAZEt ˣF:crk|g:O1./&gg5説Tgm@헽86) ?ڻEK_ eoEҁr}>9l!,c--]h }Rm&ҝE2=}6U'[oc=C=Y$5Ӽ=^~G|s @}(p=-xy=]x &E:`{>~ta}ڻ80\7N=}rKyc A4ɴ:1Ϲ܀)?#$nC'|_j[>Mpo?ڧK+w{gpYpa=L \NJdV>\ι}ߑ^>s"zۅYY^qby*S}W:jn# gѪ)|Gpm֥]L#/M,'IuvZB9xrMݳkמ 5BgW0n^H}Ɩ7ɋN6P ʖ2ʌ8;bXD $KE{i !C%4%mΌ.Zc̀\ 2EuwD)I`ШJa~TX$7g2(OT szLrzaIH`NQ|%eT"LN{Є+|IRI9H=ݾ&~N3u!VSd*>uz[w35zŞd:仱|g)Q ku ?֘<^nַ:7}:l7`ݢǪ=V5Q%' BN^Jl‘Hn/\sד3 $ :.t)dqJ3Le%`RNQ|dz>6S7uq =0<~5= /;!^.o]']^N\xyo QUXdi\rsNxZGjyN!3;uvڙw;밨.m]K:EE󵱻;0^$;vXZbIܹ3̝;gLmM٤>cYq.@G;6ʧeh'фw]sjTV+^ڷz,/Qn4Z4LUT9\-0Ifw ;O^^^MwxcL]20u@.^\ N ::kFY[\_X# r^6]sΜBj1 *}#&ѹ@׬TJ[k1gW%1~Aᓣwc,O;xs;5PVGUN1T;O#$lvA cR>CY|] #ICQ5 IDAT(4B를Qbiwc#iB8lGJَ4r,P?D5θ*%,,(ifӞ&Y'Hw`P*FBdWg``{7NW8M^~H{2\wbͣZVSJ.>\5F-=T>h;aلnH [Jo=*~|idejQbrp`)/|nQz^J1]3se*˾̘"zVs!|jvwi̎z1D]Н>tۆm9[L9gT) ϝPtlM{{0([n6Jˡ2FdnçzMp0L |2$G`23L7@cé(ߪ$E"  WT.++V\TmdN"y""KYܒ"jȪ!l^+JK$Z뉀|Oʈ ,(70W󿤠|hH]K_dQk Ʋ`"BX\1%<ܒh^6!Bˣ.TFsTMF,)"Y LƼPhlvAA> -sTt8܂<&Tv\ D^=lHʎw"iBX3!pM y|lzbӏ>#TczL~zz`=>Q9?uMJK!U7} #0L!'oZ ֳn~e( yK+# R}ND|;ᱤM_-OƕɡuS-5nx}WeV8LY6V090#@i•K| Tg.m+sҲaGƅc5|(4!G%ؑ#>UG[q(ThSu-AdG:sxz]dyl \mrvm wvP+uZ >3loEĴXI^f`$eYG(4YHFʲTf9Y9 c3z¡/ށ:uɬQQ!oބ5V,ݘHڬ6c-%%"US)GZi+K<-L)z{ :7#g.<_lfr4^Je_EE V>N2  7d3kF%/zhR֛&mqxmQz[Ls5cX濔*n,;2U H*N~_d}"KKP~@~t:(1el)_ D!PNNTk26S I^?'&%+>$${Z|Ndqf6wyֻSԺmptre8`PvޔEK 1ELf{u<I)Pˢ3Rᙚ]3x?4.9=Cѥ%du :o ^v^4rAA>dd\rv' *jZʒojCNPl'SPT$J$eedd袚{Z0\cK;"E;JqQz#rXbJ6=g9‰JL""Ev[g{!Ɂ9E<9U= cV,0<>+a4Jx9F=nNcQ_HynC]+|ޏа5-Z(8N-))}Ak;-/k<Ǝ=ϖ_Sd[`sm}{oiQOHmP$UlkXj>  R{7R\CST U`k(bSƇ G+Hb*ՐYڃ:bDA6m;>    mNRC 0I?aڭ[ˤ_ՂU1w>)Ѵ1SWgv=E<y, _ nh)DAAA6)Au?/m;}{b-]9IĝA?A,AaYAAAA?Θtz Oe j斝m(D  ;nJ!"   H2ۼko  gF       _Z AAAAAAo-mAۑltKw5I% &, Pƨ      dAҋE\BFS߸G^zt#X(ng!Ӿpqq}/!~L;K-tEoآɬ4PJ#]in^1   '1QMcAAi#ZR8cɪ!kh[(SH^iFbx׷a']jhc!Cݤ:@'a)djXAIHKcoya3~l].0bQ     4\SXFǾJR@ ϔ7G$^Neǜ~i]G2AV$ UbN'UP  HKB@Z\  Kw-?C0Xɾ`W&grd9=ۙ( bRi|~ɪjpa#)#o‘ܲu%HJ}G 8L܀>fi ]:&w̞}IQ9hK_*pn<|Apt2eT5:沎JX!?@0;|:0]x7]M8٪ Rĉc׃buO={y=}s×E%;9 tGJ7/ԝ& v\cǹ,Zr"Yl+DTqKvvN >';N?4`Elܒ~R .AAVy iB2h"ϟA"&='h)"hg_H[tnOP'^9B"LvM4}wDk$,IfT7й2F @MB>tD"Ed4%sx ؞NN:U:PIyoai u pe3^;|WI/+x0$B׽-GL^ry6cUHU;M vȡ4"{yߩ AAAϟAA6klb &9U, - {v|W*WqkW'v AvI0[aJO= ˝Q?"ćIW ܯSqj"(bs\N5B' j\f^I4(Lh#Rio.ٸ}`^908I;M~t[ǶxgΝt6Yc,KU eWx|NW$*@V425TNQd(@$KU pr8"ʡ`X헩3qǟV%@AAAA6-e ^$.pw/^3'$O]Rc 0)EL`Yr@/щ_ƒ+S}=bWLVũQ[ |$^dЈPX]16a#]MT,18Ϯ3Oէo<ضVcld|1j$@JY=rD,THTa$TX(  8      -Z &a{rnN7?4"K)Qg [ZȭvZP $&Ce.}Q[6q)_`;XF땛5&H͹\wk-D쾘9NvÉJ}P$H1*mW\PdTTxC)4ireP     4ւ~nr'`xg1깫02iL<@ W[}E#:i"|条%L(ނ1Jck!HhB#Q(BW$UO[mߍ%cXj"@Pڄ4hW[y;WӊH4΢9}/u<9NkB ][O#A" xuuBq AAAA*b\N'lNakX` ^O :ţ uXB!H, % *1P%)%yeDeTq|{WT]fdg甈T]nIw7aPRǑ$rDPjwV:HU F %ϔѢd.s=تD4~v[W?*O3ش 2 %{?$N<&bAAAAAAeZ+KMddHltv;ͯ]tNuqMᝇ:2HaE o٣rz]UΡ#6P?@;{h #|K V"`eg&S5@ߞOJˊ*e;n˱ +Cun^W0E~8!%,,(?žRL2=Bo 3^0[mN=m4ٱ~W=2;[#-=T>h;aلnH [3\wbͣZVSJ.>\5D$֣1GPS񓕩De32<ӭJ; Elrh0 Q]Djf)=$%c?[uAAAAAAe,Kf>eVrNR>OtDODRVŴE[d;y%œU4Ft#KdMkX T⒱OH"alؿxˀɪ{y[_=Bd* i+Hۖ~|qyu170gڈ{/W\xŅe7 yXcS0ՏfХ'&3:q^;$6qe{ӦLz~UX{C21&{ i(Cpy==W Ch)Y9b@AAU ΧPf4D{M_4nZ (#Y\UP]J3 SΣ4P.>v9~"eЉ&;a)MǛRw]ʖMnֽx:HN o]p1wN(`i IDATOy'i}۵&i~(oyW>{6oX ^yc\,qql-&7v}ĺ#whܥ^#L{qjV}[*z6YT){:RH69ļcP[b'ҳϼ*+ E,'nվ:~R3LmGGyjzYBزYg!N$reR@*%&+UٶfY; 0G,  !R goإB%@/SGI^_-v+Cö6 *áa7wH RXaF*<1azuAAAV^͟Ϲ6`g ɭ'@ǥ7KcWQ޺SyQ|qxV}p;g3̣mI x%S*d?=XH" %-zAQ>05{{{wd5<ş *7͌ ͫ܌B_W^GI9XrfTBTRR%   Ha:o5';}O?0$1SG<>)W Lhg}<;@9#Lx!~n]$KR% 3ެx 8@_JܗPKF_7E9b|z:%k $7-(M{& l\P[Yr#b(-'C1\V;{Z骈 iNvytFO?ˍׄs[upiO`I@AЭsE*8í{T(CvtqqlN t..#Q   KR08w5}+?n﹯?ȲZ8k6P#6ϭ[>~).%&~9 QVj%|7_BKҶ'<焕d^ШlR箙7ļFdK6|%$l?{#S g(3{*/6'LoJ 9d&K";Q܊ '*1ofS639;Gg,:&=O="XshRvbҎ9uc`kÇiUٗ8C{6 L*׍ִ`0g`}%.L>u?xa0Kj %,`OQlƩ/ /ai%@nNcX󺶫p|垃œvު)^F'lq6rYR#2x.e`ldZNrninhnkde[LeHSRjly}J Wt&V&*z/-N0u&zvJ·>> 9 &ajnge%{Br~ U\HO{@oL8 :19ZhJ{XLx?K#.ogU_|n+7LdMMiNu U 5@QܷAi^7oâbJH4u7vf纹t80m֯UkNc}_%- rn Z AAA&Wd&xr^O6ǥI*;I 2'9F"Xxߴx_/ sNY+FJ9{&Lל|߾̰$/[^nlxbGkʻ]6?;j5;[O ҖKu!7Y+psU. {wkKn%=,Zj|r-&;_(W%\ g@vӛ &X׾ˣ9%y'ye?&d _6qbMH}aITŖ?P뽟c&D(&T]ګ0bc$*n韨'5lktxAv4o7i슦"2"b_Dćq7Ɨ(8x(ՍLޛ TLe&;.MfU2(V3pXeqop⽟8-+!yZI@Qksie| 3k7VBۓФO$P%Vz(@ia<+Tt/aۏ/k+,%"'۴REL[1Kopʺ> )}tO|iY1fffz+T+V GR_Wmc˞zwR~WѯEGt6"gfxkRlll>g>]ЂO0O =Ahxd\5 8s[R# VM؜|wgo5H89~)0|HBcvnY - |w)>uVh)DAAA28̍*ʚqiGSĐӛ'oxz jg|%#{0x]&Ns?>`ODERSo_ص6>~r24%|m7]W 7kyiӟx:JЊR<;kǫ)7l"_oغu`F}~8kS%U_/rNu8vP@$Q%!݋dBC]g6S?昋vֵ ,NEUsμs݋*c^:Ll(br)'v/e՞A.M zrܧ*K]%v;PXF <ԇk5wj=ݴPt$*_x8w1fzzy 7'k~SfyxN+nF)^R?T- ǚvԓ-wu8:9"U:eK -H )5>x9νW57Rbp s}[p'tg;v֐deg޻cڍFwZfRb*8F_w@k`v7.Ow٢"<Y:vLE}| ~]?ЮںSl3/^\dܣ bJCut(vw컫6>7oŚ@iECd1]V|P%q5'hwsEEe& t}ﳋ%6 aF}_CLwﳇ`bD}8CHE}34Pd}1Pgay >q?'Ԯ>PTWP^B93gZWaƢ,@WS++bV/}5v>cɎ93w]~!2esq;'P"eC?Se }zԨ4MZ ;\UOjVQCj}g|qթDKytE#zk( +3-˭~V6Ɣ?^lc~4`6A_ʩKqD ,y-W|&*3x7k\b>L*]Juꮗ$\v!+BWBU5k;WI{Qӗk;jȑ SO=V~Z0#wTbdI [Ϙ 3)E0ߖ~gI;i@Ѝ}豎.*,N{ 4I[;q'o+iim]c,)T;f;Mi 5 ^ia誯 П?u6Fb%{/SwZT1>!fR *2pjMEuAky:c+y+pPafbd1 ŞcW1D ij,D3%tM}^9)-Iw:DЯ>SI`~&W6גH2 *Eq z崆ڞRVϺckkQDZq7*@aQk[zYSITqi˾c Խs[K$'h+/hdcQ\d &*I(bz}Ebύ/ӡc(btC [uzz!ud&iqQQh8U, M%d^cB#Y/˝7ndSiଐ~\ՙd2E^utg^5@V$Ɣd<)T~܋EʓSuRe҈4¶ŲhRFOw6Rf)6W/:vEYi,(D5yUƊg:*rBTз0iE^8ɂ&tT$4퀡zRPZ[B O5FWEL$K_bʤ xϿg7#A:GKQJH*i[ST(@K!9b˹sΝ;OFUssG/s] 1bmE|Su[w޽mFă+'uQS )EkQ+{ZwNEGUJW3hJÊᒡ6DJJ^5u?h BB]՛92AMs!J6#_\pZOd"@X蒐q}9ELQĥ5\kgrt2qܒ]? ѱk"לz`_͗žn$)i4Q\5 j 6h'kkDY-ِAseRD6Smӗ۫Q7؈[F$Hko3(sA5/]e"<^Q +zۍ'Xu=4h T㢼Vf-kG骡 -F! V| 5{^9ld/6SZc%^GI9lŷ'']E1ExO'URZ**b抮:X?̻.[`]M%UH3 ?F ;rӢ0-OPhoYާuz\h:hWߟ,uwU}qrG{ȍ0Q>VZ> 6(MG.s1Ug?:YSEHT;K@؝Qy-l4v;DDH*8t!H #5KXkzJjT2#^?zL. WkYĴ%=IbUzS~[AULmBP5ҎR-k /}cժ *s[OByFf5U꽜$*WXujHaTe52ѷFڴj J>@wzӡnE.Nw+iR=%WwjS:@Wfa Lj^bTɮڨ|Kiޔ*=qrRʭ.(#o=l5߰[)a&wyh1yΐȷx \ѱn-EvЮ\.قVf{]2^sxs1zM]O;IR%%!4SްSRj|_FJgm~-:Na lz u/LOv};7W3_tEAt9T%1BlZrOdCIG_^,0S5y% MgYjZk6||]ZƤYvyߙzM{:+H>:W~1 ")\EE!I6_ZƨlD j#,r ֬); 4 Nڈ5XZ!fmdl$ۤ/':FDrm5 s@C^JPuKf5ʙ,&Kyn{vc];Zv>a"L<PQc?4-Ǒ PrT[O)Z:㾅}}?nElZ!l$e]88jYEz:P! d[0# >d|vQleT&Xغвd|k@8_o)+1}̀}/Q}RPr5j8)SiW?RJØN? J@RRsu \F6!yNQ{Se"oSWrDɨc3?$5jn%ovAVkh!Tl%ka.$<])T) eqKbj^i^s#["Zڊ"@Ʋ3d% liGFs7}4 Uzv7Uɉ/xUsVqnlf &MOUTM5t2UntE c|guJYRK(^MPB"b|,T/Q)e9䬙5Uъ9Mu1lmCJ0`JE۩V|^FRNUYIII]{SkfD~r%i% T L 5nFEIz 0jWKUk5B;aqCψOT>dcnpf6ZVB(7̠%~9Gxe[ />x(07kd[phGowG ZѡEDW"~ .Sst IDAT8ΊJ᳼O.>77_/k*`ńMڨ\4M>n[vQ|?NǭFA}2_R͙.nEX RZے *W>in2%-X\/,r Jrh0 0ɒlD j#,r ֬6(;m^ 6"u5b ֬lH롙h2@"-6ˉN]nk[FDx]JCT1K>>~_g;\sٴaÃm 4mBiJ [f("ɩC{QDx6? JWZo4O:t2O)̨MdCц Bt"_\T_6Cly-;/Bh_K+Jzk p6,BjXMuJߣ$*f_Y_9@b*97w[pYs)NQlhl_o gN0JKSZB"WkNMp\p\j@Hw,̼ Uj^3G_5 1m(F4Єo}.Eg߽@Z{HY߯ɩO f| ~):G^8|ѕ+\D)pUK,떴qݣ ϫeJۗ $N[%.$<::%59)& <[ QnۨK*7"X_OAZ VJ-V. fB BYώ1PeՌn w`{SYI:!mҵ? \7V%l\|$zzF*0(;}Yߗ>FJbj݈+b =O$kc=TKQʐ4`g:Q^(.̓h 41 S/c+OB@wZ F hDBiQ't  V|2?V{{qZT[J*ީسDf &QN:yʍv=㪧c@$KVDԟiP4a~ O QtꨣXONWCYLR5j˨O#`WV#>mf$)W_ctHWb=탈ERz`kP͗CihU͐dKɡ%68?"`j~;`6wVۼԦꮫkfTCZOn~.ZLBi0͗z$)Jj0F_U5UM {Ai@L6gߍ^[_i6w5!V L=ݳhT{ j[1Uɘ@ڛ^J=قqfzgBZ_1TOݥhfI{Hy+h0HUGk2y;yvᇠ6dTd,Ī6$.c ֳE_翈+g >7 歇@ sلſ} k1( I3jLgh8{x#&=L>̉%vbPsMLfP!Иr_AuDL 6_q5ToL@ d@2.b$ Ǝ_T@Gr8qk9wvH>u^P; ?`4J&:~d׻]\seH2>PW~SVZ0f~" ˧KGߊKT9S^yXs/@yMGx͎Cb;J)@qZM/Q@f(41؊j%֓Y A-;ix~/j'np۩շ}McwToهC,/Z2q'*x/a:ӵڄ{Fos9}쀗zuW֛r#}y.@ؾZQfQm_Zabm̮s%X:]K'YIvڵk,lN O/{s>PZہ`2H]ҧ̚YE=۰)H#!H(* v!* (vwVk'UTTLPAFj w,ydΙykΙ\4gnj ~Sw׼*>|wHkZ&h+9]b wr? ~#M#~?Ecg@G}_ [~!Z8-208 )$D- 6hH?NffDzVҖF֢MlRx"%.I<[=AǢk^NAn4% 㳷=/w(}m&Cs95RnF[@Sj$_Zmircɼ ֣t%7PY0L +j4SUT3XM;T3]O_]kGD,|9Bīm9JUMݍH#\5AA } rV*-MB ?? Uu[ ئ,h)B,X_/=t"My垞C6J6{1Gnsٮ:LX=QU.c). nk^y3K6z*xo;}):-S ~~bV?OHk_X٨nM>6|L@麹@1z.c dV "Tld}iX`a>KR5n=wx0>+?ڹFo]#хmlꮼ\:Lx튫[F^~6Z4[&Sw%w #vZ:uo]`*P݁P=&?8ԡ#9p*p{#U$Dd۴-M,% UoPi3C.3"Jek2*9\^2ӪYyd|N׈ga)=NcU [~!p:8rYg!őriQ8v )-Zw%_03wsÎL$/+g!)z])C升wG$8/:Hqɼ'tVAhiA_Iz{&ogwceV[SrppWA'pɈOE1C<:0<뇨 #F@Ư6ҝ$V=f P tM#C5eE (3*HՔlq2Sye# ERL,eE^dQc餩$*z|1f-[{MWsQDdV\{<"}S -/NQSW9g@{5y)vYH!ĿqСqx6Ctw򃇑NnfO/u.ͭK9mnEo2u9SVK0!HOY5]_bZ>M䗅-p>4Lwo^5*1襛^S>RzIz$xY<8_}uw#z^{m.k)2q8y~N Lq9+s]dCc#;?s#;8:`кI}(VY%Z# Rۧ}`4ekVx1ЯoM <>dxfWG\[jçgjߟq&'Ҫ &qđ208 )$ŕCE :qܢ,qE ƒH?4ʵma"$EHI( buсTrO><59s]iڡgV-/ψ>9#[is]//)ӳk/L)qyPjORB䔾]^T6!È7Vjn,g2K?Rk|,|<.ks+Sm=NC©sC8ɑ'f4ERv>uv$,jN[p݉u' z y%-.?ƕE ;]u&33Y8HW9Ê&]# ރ#nۮ~HQؼ۞y"f4Bb"әM>>֝{~fFkc8݊8 Ltm]ٔ QNd%u:6 4,>+61F6VR G lFMר| vbO&?zFP2z=\Z~g/C}esEIѧGޮ1KdZv֞Ss0b ]K&t2 2. I ۰f ʹR{ Vwqԑ)/f=Cgfc}[Wҷֽ&;tB{q{=Ύ(~ͷݺޖT0 }Pr"9m{GY fkѢ?"ͅ-eh2J\V&mh6v| a֎kæZ(TgVSTG>ԭ U-BLNU"M#eRI/6 E&'ҳďEY?! b"=K@ڢ(׺Zo"/I~!Rx,Jx5qz8XO z[[tlCT$S0jEnSٲ̹"S@$K+ivq?wpBNOr4S%e-{qp3F:~:$I;cBw7&w]ܓ)؅Jgj9(O&~=MVM>Yv m=O}J|iޤ4$]l~z{W'&$ %z~󐫳H )k:y}E-]u;{ZhKRHrcAx9tyk)I-UvL1cJR8xa-ߧYUÜUT$G766Q=qy;'U *J=Zn3sTRr(1κ1uזv1P8Qtp0P D)Us75Mmuՙ43BfM޳$H3V]LA[Aflrgޘn5t*"QtmܷRHdUhYK,,/uǐ Ӥd w"/pϵkQSJ! BWCW6إ"wuW MI4UyFǮ8horWjtIүql]hAA&Rr:r pOdƔ %V'n Sԭ{92SaPHJ68;~M՞NϏd݁)A51vhaSHP$7eY= s֐z$d@e5 w_>شYb#fz٘i1L*g9s$@HHi[ lek˜NkF4).^FiEr;gw3ú*Y? U-; ]hsiS'*6=[3#JY]lr5RQV͜j`"I*IcjּwͬwF/J(ܡSR |uVf:V8RJK p?2fr,8CGup?F c2J=ήخ+4~2ԟ`"f,2߭*DT0iLPG%Ϧ}?pú暯 ~`F+uՉ?s0343-IKg}7 8_ǛX.s&2jAʳNUܫڬnN( +۬ Nʻ.Z\-k#i";DU"@ Q}67'¿Fscl-Z d~_gГXr޴ v&Z",[U3u2͚>>(iu_TvȜrv' /Ϯ IDATOfmTyʔ#mOxHiH820" )$ŗ~QD:[DzqRd56'$h6Ig b"=K@J"r6A %)/DJRE&>Q bvը#\ spx{{9;."A*G37`Uy:ˉ"NUڸBa\@4s%s\iQMI ܀w=ѧ‚UcyY?Vo"1/1<3e|*hK8/oӢ֏-:/oLP(5Pe~{~ԡÇw,ضr`WiI4N%8y}HYef+2+@I<,XswA?aoM ]Ń[DбXcqFb^V .V=@BY|be},8m3*@J{`@4FF9fnGmyo^67Ҩ{_oԁNu<y7'Imԉm!_ .C#@ M!%a\ݜrيa[3ɋu0 D lZO#^\WFrըۼi0`=v+JɒF?QA(|=\AɉjBtq "# B#I _G-p?N~ ڬ@Lx|ALgH=T88&4("lRlI qRE &NQ b⸿HjD3/=+9Ä ً&l _.N>;'岹/lGÄAQҖ6WZ{Ƒ?})@ ~K8Ti|!D+g^xŖ3C^xڲm_K0'rNy]wD&Iֳ<0lry# tbMqr;Xl1˺Ti{cIrqn'ߵ|>aG-xYnt)CSJgT~5#7dW?9͟?߭ ZO#"c%²Y,a{}_hW>S9j7H/DS" 2,8_~ ,E#,1) qj!MAiiYH~!R"-Jx5['ALLiQMk)9%\Vynf@[ZS=,bGla3V&eުȐڃ/қ@ nknyWYQN np⃞X"o|ǙOn[6+mv-&bq鱥l3[^|bqʼn)E2z+ $̄։ɩJYRP3Dw.rKmӦOyDJ% 6,US&>gT_TMҺ35h^YWZTmlY~>q%b2d+x[z>jeO\RUȵ_Yq- i|ۤb .+i)DX~!D:rYFd!ŗr/p"xLNg'/ڬ@L1 XS8&4(_"B$EZj &F@ xoĔ$Qƶï-zoٟ]q;|>Ls ts"6#+j'l|MQMh^ӛOtBrēS+e,z! >h0NgD=aLwW9ҡhA:qQO^^?]B?1J}9 C򻵤QV{wu~;5t?^K0J5]ZHո{;;'<=s瓴S ~Z#n==< sոgAi )2Nd <̺<1N˽p rkUW]9|'&\Èk< RSwR'iwd{l{8)O8Zx%Q/<(oD4Pm-IFgwL{L@)M|2@󽺩.2|ڳdf:ZTN!l M3)7|H7x,w) ` ;^@6[efr(JC0.~akJ4I!B ~,$Ӫvߊ%t֖T}~4:Dwg[~!DJR|9,SHR|9twcr=K8fxGžq4(bR y,Bt2 _5P]J$HH)X9:t>Pn6Е& fe8ۮ&FfȫY99x=Ee ~ɐX2%TSO%R~h(PH2ӥΕryX@|"k!8$@ @ @ DS9@ @ @ ZS@ @ oR c*t$ 9e[i?o3Oo8uш U.+Glj}˾gtk><q@ ~OFQ{[ҍ>{򅗰,d8f*bB8sdϊ|+Fi^nv딌|ˤ3S4J 9wwۘJ;nnZʜgn=IHLȗUܵznڝo?@ףw7۞^r,C)†0r!LR%\rNo ːe^\qi nʌ kM_p_yt]Q0q8tjvak7QqGVdEٲڃqiYl|NGM]Bꨬد\m\zkİ%N&4bGvEZ'TI혣S߿tIZS_} :{q%ERPO{>.Xl0.h)ˎWTZNI)u6PQJvQqI)%$ r.ݻYH*=–1u coXWkU(ZV%m:@^5#'&A=ʹȐM!ذ[ٵ 9LR6F /o?+$[z^%F38eߩ>Q>ype*|2cgvV.JڇtV yI.M&~@ Oc ^Bq|YQ7LXUp`|9cEVjXVj a5C6W8pGik>sݾgl^}gAC_׌g -VW^)?V|N?):_] O<>\$~dUi9[ӊhKoyZ(8T(p󑜈-0>kWAx(ss.M9NnmsYm+UNoshN ԥN8|"6#wRDž>۟WY2tl\0~c˿\{&85>~[| ]; ;ww>iJfD/UMZaKKâ>E}|8l1OXeICKfqk^틊>}\ pR_q>ƫFiKd,'z멬sZJJ}z)lƬ =I nk(->"->"t܊{5Zff~IӺ)S談WK˻,}Ɇ*pxv8ũ_S"F,dw.S#g'S M(g T :HIf@QƗg_-e"c ;jD.$3VTNrk[-TYw .Ĉu>kۻʴ˯k>rb&dOhNZh!{ <>@ؤ:4R'2ҚNb,$#!|oX#<|ٰHiS.V04E 1=`" d@ zbuOgkN̳֞_ebPӣ?+D̍/guvtf]gm(Ɍ}p8~1;h?<YFʴ/z~4y滎ͬ,/c2k) E#\|˸<+/m_hHxskĴC}eʸ< y'9>[_T?ك#]jxbBkɻ(/ i6ֱ7 )Sˏ@ۏrcE(b7}$v׏w.nk5'ݛͽ6I%[j=~67<iCezxZ)h ʶ'U)D~thUhj$|_5y1Oni( amYiKK*JJG;V`U]jW~ʨԐҤ̜/t '@V9M_5<[(<<^G} 07TJ C^=\aӝTO}l49W|uɱCO>PQe2뚘Z%$MuPVXiqo|r[Mjkz>+u~Jr*͊zA +$y⋌ "ﴺ9UY&6Ϡ < eQ#4YY_|!Ku2N>N. ߼B7^zo F߾p%!f)~Wi|UHsնSnx:2_(m]eHS:mSȭm?ٯ)ѱcq4CP!p߼z:;yppR57z Y+a)/O~h!Eil1hO@n5B>DSƌ1AĦG? K_ث"] mfPhΚJ%Q6nc@}d@ #kdøv׸OrGw@c[YȩwW3`U۹el۳k$ 9N$^¯mGx%u`ǖWn>x3%N~luCWCF"I+jF@v IDAT3aBq;ogmԑN%eMf,ª] TaFiX-<4ܳU0,}oJk I2E{ֹ݃6Ft*EZAߘ9RKQ.gfVl>\KIB6ev%\{hR wRJ89_""=νE+{FYNCAeh== ɡWzO:cypl^1?@Yq W^hMP-VP" )q7cJP2&v^T;aX7;(P$O<_dIbnbf='o[f P2䬇xaui#QB0,^|fwPҤ =Ln#87i--Ia*w;H˳1#a50Ya_OϩmӃf尹ju΅8V "m5r;  $:> L~ 50$x#62־u^m(ISuQ^ D:Ĭpns5^9)OSB]ʒڻ/A SZ5AUhRiQnWN%8C3X$W%I*eZLچ6H*%^d?NnńLPZ3@UpEңXPpU=F]qtxkX$,7AmIeSV*HFb/K(b|NTt4h#NwR'_I_a ^^ ,Y2斶:5,-h2( `gy3[to c܏,pƩyr-`Dy2T9 3$(Z$v"/,0͕1ּ!#֖Zhz-MGq4G1!'n?z*h!4Xb_J? Z\vilIU8}x}Wu1zy`4 {Pq蘎 7 PaBۉ{;1o2KLnZA!a7KI2TW07|$Ю}LrߏNYL=#o6`)>m9S"x̩Mτ[;OJc+8-$ w8:G ^te(E Ufe?,sJ.~,1#ȣƪ;Zv9q.MQt(nt QWѠbkbo+kz " @r?Z'nj,5tu2k0@QzN$@)ex^TIlh0(%M$4#{6/~}:N֋?7<iCevb^TWy$荼VĪRO/Yc:5ȑRFx'*ê"}|6`sUc NZNv]:ˋE:Л .NFӿLPUZU~tc|Nmݭ%<:-)ȬXZ SeV%Д5БNYk++ըӢ a@GBPLړ+ʭ]U/0S<:m[pʭmNeq7R>= RCҡ5<&ӵyBnF XE.GdK(ڮB0ite[/ĬfںZ# Rۧ5.ylH4xؖ`޺wtv(0~ >^_cvOsa EoV>iq&Hw2 t6Tw(,ȡ 99,wjES‰yСC'.=*tmlY6D?^P %;ѓ-n t^ڑw\HcDxgނaYOcl[Zf~f6gsAnn]is;,zYC'Y-Ä ?euq~kM{iT&WWx>/--$91dQDZ{c0!Hi70ے]A%M #VG EFm&^>vT5=kpUCQgB?~U;VKiCz~}||q?-zY ~ /6ؒ1=0Yxw\χI v5יYY0IpIa՟ ת_ {$Lbeo\m̶g\P%^EU# 1 ռ4)M'pzV mԤג2!YIH*5ޢk: Bޟ=>zN([jH<;O\>IS'>7co0]֑EiZ R2C XP׽Ă섬ii\gn|y9ql1q *2,.M(eThV\T fgL+9?AnxeUO= 0 uR˭%{I˦Z[jH\sF{ ,U!@-R)JjH+ZO]f͊%˳\R&)#e4Cy%a>i^9l3w/8 Ps: 1V~X( Y  Pd)U)<:cΘJN]I#\z3d̯odTʭJ gO{5 ] _{䙯q-wO'DjE!Y0@KMQEo ~fJe|>z^N O;)w'E d;/:I:ÏQDwOUBbLel+G"`5݇n9v[A-0Y?F/@ O!P{>!ԡIz6!d`NgIPtY@ʍ5':Enc+1ʂy޹ISZ)KK0b.<+sKrYm+׷("!hޅT IM/@ܭlTv e<aآ~ P &}F5ւz"b&LR@IΓs>MG/WXBDkArqy@SR.VaU2X :TZ~~,3hymSz *Ia\V:CW,MSƖTvdRNPbZk*om !/q>\Cz6Cc£`hvR64RPԠN%@ 5c!%) {xZ;AAAAAAd;īwLg{K) k.fTrh<2Y<Y" "EI@bW#| ՅKh$=|p?(^lNiIUd!T=Rζ]X%F ^$>l "EX.Uz:L* Íj}4ҫ)cjT+ؾx (cQZ2rS@6>VM[xl (((4#P;[@ H* T蝮>RpcfN^ˈrcCGevW <(Y6gP*ٸo^eW||znhc,j|vKwHHH(b ݁ݭkw`ڍb JHw.[‚W{ef9g̝8C`pK\;"TP>W ܊'Nná>o=de@lXR])L,;7ܗ>][ލHRq"2Uu>ijqc ^ER![y\oI`͒@ Z_ 50 ðOrXH 0 MdQK$ȰITNב:wݷݾ#$7'c#&V< #-wVq'/ *\Zk:ntڪ@իWCxbXP+np蕛NlHK2R>x~J3kiuBSg I(Y^(mI*P6"&]rAXvZ 6 +uɃm_2q۲NGL8axL_$()JY&M u*dGHY.]Tjl^&t|"(6sσw%==+HF~aT #^ IqfJ$S.%3 @&u@n̻>>'N Iᱴ,=ux]6 4akORRN+-b]d8埸ຳ,Û_\@pLF֥{o 9ՙ%Oc^ڗ\Q&4MYt6N)_>xڊ=F_ji*-{1V`W0|ݚOoظrdьgB7lM,^ʳ 9kRPDh{+E>Sj*sb}`SqN tB_.SFfW UZ_ deī'^=)ղIrBXl՚I> _)VC+(c1  <Z v_4-ьp/>19^7|Xr?&RjnN .:eX׿} "BY}OJ,H1tB} 0P*g;ꢅpHK/O^Vt0έP R>NE #cT%nh~UmeܢELԀ3*d1#]*LڰqWKf({, >uA|K襁iC ~_PFl2t웄gy^zeŠ-=> ΝԙHi] uRVC)kBahEUt w+kG_^+4]eeAق AB!է<2MCfR|Ҫ6;~l|ŚF!ag\Kӊtݶ\B"=Lq)RF߂~jd.)^SÑ. 1;yN((#ϔgg&sVնxۛ肿DPF\0/.ztJ򒇜mBzQåuAY5?7}闉a~Lyt.?~h:u\ ΦK[=P_T5}ǀi_|40O5&,芝,Y\Iu㒂{vnj`qRL 9~&&D Dt*a 5d^*݌b7g[u.D*j4w'W8bD׆'*,%n<¨/F _;"DQ5>wG؛]uu\m4ːy/* (S̙BTSf0j( ͎ľ4{>Ie*k۴ോ]%lo %G"-RXB!0U,X-.OeťS,gg=?,3{&JL*Jpv0sI6Y\*F]\a$NsX(2IIYգWχkz~Ъ:i0$Ujkom NU~bn=DˠĊMkmc'w0oĢIl6-Eiwxxs\X)+0HUr#;&MݥNHd:[CqKzr6`WVfJl'^b?m*D19v.רGj\ӞiaàQ tz˭5"T:% ![ uTV)i8|֒=:i2Te±!Yݻ2E"5:zLֲ#o߾Sz4ȝ9fӰ)"{.[c-+^[}|^*@yh:b f9Da-_iϿAPطW/ %--i 7ooj;}}01E<8/j36}6jyH&.Gj+ZՆ'CkM \TI&O@Stzތz⼔dᖕH(x- K^ez -E6 {NF:Vz8+d:}MQ= Fv0bؼnD^JAo'\c:r[kARϹ;TىJd?x4( 8yd^#hHZNgpL_w[%x\Pkʒr3b8c;3ɘŸ9 KnE/O?8Eט,H ~|_"( +ևkk3ݦ4f= r)dp gYq6V#܍Uɑf`%3%kek_:zNLlRR5ԋ/,ZiSea$,$u6{D/;Ž>=Խ0{wjAJ.%cʶfmNe^9zcy\N5yۃ/Zm=CZH W7e=ɨӎ@ \Z4sc ݭ1 ^4!t\bcn X3)̸/&D493DE)iB>>Zn"p=M )C08A 9 f "ͦhyE4ַt޼(TZ. Bf[H ν4^e`d}=tDJF>KMi[6ڲ+tI3wgޅB 7fIpƟD^ĵ>(7et~_Ao?ye+%>?\F xA}Wl{B<êN&r2deE=H17,YY86, s#?EE ;F_s!0$ Ddе_h9nchuUIQ-AXdR5t ˟LJ}rϻ"CB _>ZO\}} Q0tZk.XtFfDEkOQ[wQ@4vVOEc[4F@Afc3Oе͐o/nKg$2{8zoQj/>TP@ !0U˸r7jT,<:sPZJ:[a!4!@ }hH*8 [w^|EHVS_tcQsoxd5~DhV. TqiՆ: @ D#qі#u\(ǀ6!Q+ l?Bh=A򓃿DITuYQw3./[vmԚ/c5=aVXMlĒOG+@ @ )D ?*WN#,`%|p'zѶ!;A ޻#@ b@ @ @ S@ @ @ /NNϬ% '߿D{Bf@{ @ @ @ 4S@ @ @ @@ @4:Ze"i!箧߃e5K}}XcRE< \pdK͇XK+yR BҐ ˇ {_CZcfAykYk*C{K[A;W.=KBw)|K o_~ӏw_,nY(wF'oiE3@ @ 6RGG_hz &,jV|x1hniu. F5i/1[˜{#u NZ"[Zj}≠"Q m"q-GJV2S0uI  As͟Ch*d^Z&J F nH/(*ĥ"aNTwG$vVaʍqIfhlF)Y\k"SbT5"wErQNI=ۿ415?/[*HxFZ@TѸ97eDш:N.;[$cc3-^BILB9?2X+6>U@{ (p)GR%MMơk_ca˵k|&1-֬CWr13#3U̎gE{w(/ͽV瀩ʌ蜳iE#5Xko&VRW!=RQ +_ K!+43wq=bj y)O8HM1 Zs$ ./Oj@[XHfu2ժbFSPvcu W]MZ-U\3 VdJs_]rjEKκ(~F\Rln_ʼ'F̤}O ^SSꧫ"2P@4.ąA!9 e$D#!V#%+x@EWhOៃTya׶dJ96m[6c^rL{Sw̝GM߳]3;uنtDtu WuUb : |r/|w\=b_ɆFMEEӢ3a yc0`ҤI&MjŦ6>{{i +h׊$R*Dz"\?N#+kjI*f);VG7Ha DHTzvTB߸|jN"L5ECZq#H)$>_StQ^lJqI׿(;1?ҥǂ )wӠYK qQ-HMOǦ8M9o#V4 ܰKgfLP:huv}wpيP80Ԙ7*:;#! Y>]߅|+ swn[pH>Q'2lj]b~5In@ԽQA\KffX]i +w1CJ9J-Zc1Iﮧ/L璙j^ZTzRw3`+YxX\msܢV?Oqɾaթ{"ߤ|>Fb{!Mst8aHڗJwBCSI. vK{za$f^ާ O=tM50r?:('(5 4[2qIfC߂dIұ8դu_$ ~zDBjݹmzU^? 18# H3p:7P'K)A/?1i\MCq^pgpIoӳd?ṢGnKV7w313VQQpXb~aVR|7QDaIyY鱟 +Nes-'Α~ 'n0s f-;8j‚>Igjж[& (#16È ǦДO[RS\ha S6o'fAw+}C%..O]noe@]K4;'Sx̳٤%c>hTCN }YtA&e?Eo/}\ 4uܭ )RqBRݷQT5N̬4J4I?757ee9l0} ߭Rǧ7ںfՊ56;z}h=wwl(l<~&Z EQ]bӀs1 LȎPvjFEZˤZws틜_:m }6m_ n|݈aX-A׶LU1N?OOC.I  9A>y9 ?%]t\Q-\.Ɏ)lXٹ@3YD~a XĖxD"%Zn$g^z^ZX(XU>,+|LvRH( _DƓ_$ܧQ@7CzDAY16aШT&9)?1o^tT P10k?t ap0eRPIXa:Mzv62WTT H46Wu+dAf7uJ 2̴]~R8FpkF!LEݺnإ*[`BIM!ilm/.vjN a9.l*榃tJA!Sik`dPH EC]gǶ^U,6wl7FOE#*N^? X6E]=[is2Fond8o+o;@UAl-sN qGR}ǐ8 :Br=4U];N`،C\~ǎj2bB>`j* |Qm;6X.y߿TyWvS[ㄠx)c {.qM.5% H*R7wpq_n]yh9޿V"iqW 9 ̰K:trlOqhn%=zF9jS$\LպǴcI|~o.Jg E0kBHtW7KᗄfJO/'_5trبGf2up%;4|)H=lr ӀԪ f&9gvS ^qjLMPfP$ҘD^ FХ@GV7 :E~f.2>4emXlEP۵zŞ3y0uQ -57yعE mU@4< zғ}/YNLlc4Eʌ9S h+nreW}7 Tv#)kAqfQzL< YK-ÉRWh=c^{?D)%CNum;+S4IQzNOf>IN|<_"Ub%<YWjMRpC"W%9~vF$Tf -DZfU7!Í-Ozanw``bǯtCok xYM$ 329Y3 ZݬKL1V 9ln,D.+f?N Z;1unxY~~!ib 6o>euiwwD% 49=he5uc[Guq2ijqLC}NE8$VA=|)+T6nc(*}/T %ä|*WUwO';-^_>=H0`3cBCC"Qǵ׍ ON+(&әf5`sӮ(bT}}]fFv"&59s$p{]Ö$u*RqQԲQ@ehbScDʆh:Q1H.jktrBCڪIk&d\KTa~Ts$T{]K>{˃?K:yىv? ~%f=o{#:H#*EB,j=+,Ee )ušl<};2y~ c\;|wMEn Ư/?ܠ\Pi-O@R˨&}_y9T5z:ܸCxԌiob.u!݀v 3i7jԨJ&V>!&Q|)'9,C=&\D_a>c0wbpopcgGs`LWuVF_8z#b( MK&M΄Hfmyڬ`v:kWɏ|9hݫEԲv^(]5#<jN~8r0%WDEkHDg IDAT3Km`̋+e xI415_pf _/q: i7_pqU4z{?<ǶLeh9Nٶxs0m~幌n}/yrE;7et3Tej5i@jE ]6Аsٹ!SC hj5{͆&X{c^kzoTJ(.jb6i'ma;soIgL6[Bhm m`?"b0D <1TV|Ć~k&{шǡ)L^? ,]=KRDcdE+rJ4\ M_I osBmq($ {;Lxu I{ 1쫼+Y-͖5%1Su0*Chrqd84+l. ]TX,2[Ꮋ. B4H݂x" Yɣ,oJ*eͦgD{RrI4 K UU'?=~?3]<ȪrWxuL s -AԳByQb~lΌt䙮Uj$ԋ/,XwH+.yTMI_~|AiUeHou-^C¢܄O;Qhťe&hԫ33c~R8d6p͐Yo|KbSR8m-踄tĹ)/Pnʂb|Cܵ)\,&ػ#\"sU".70406.DqVv/T92Dٞ*G&X6Z - ITUtd\Jj}L~f H:(FR+>]R}|>$ 9#R߆oP#%V Sk34I=Z^յDe)(((Y5dsS À}f5Ss3KPrteg1`R2?[/,ݫr2KNe.*r4x:/._<'*{@SX{.=Yl]2 cWrs#7 $r)dGP7x[zGsn.5Kne"H3ƜJelzm7n]&w<\«5nR'.=wٕĻKDR۶r,0d\kH [>8@@Fhh\gP:MxMO?F\O<].JPQ2Oڝ1 K{^!Zf4Ar1{͟&Ƽ2z%o}0n&uQ߬斪DK*t>qjrf!цiB bu/ u)avB %jL[](sd޻P`YϐHӝŦ}'p`ؓ[ܝk~wy`bJbz.EfU{](,+RM1=cV%o$ټyni-|[TE_+aٿ%)Oa,z0,(/FYg(Odc8*OY@AȭӄF>V⃸ۑ`n^>ʍa!w% up0eŠU37nyӜ͛z([d\P wY@qΣt ||Jm~~ ?Wy]\rB* ,۝D Ư(3)p k잽L91 ߯4Z*V K}} Y(AKC$ 7։H#LEB1Ezuu0=ڻ#hZrk/= LĂtљVyW:9Ô,= Wm?}Uœ|_t2$yWiP[E"\ R+yTeFt\zd}K7Q&2]=4ʖV :9qyײ t~f&(g4if=5Cn*(ݑp31h׆/^:Oz.jMnOǯK`UdrM=u 7m۵Qka{k{|?qZ{g/^|g~#Ϗ4Ww(mT; QTdL"J[ԐBu =kӘ@c^kz[5M"Bso7Lm@`85PAsٟ\ #tV&2w̥ 3535=391:czg#NʳhB( -4r[2id7oTncd3U|e0 t+FQP@LǂU!S Œ/$n` M{pWWWGKs:rHJIT5$WBS,8YO4buy ! [Yk MHvk&;F\c+懯hZ{B.Y⟿j/ dE{/l&/9H_3FKz^JFDp'ݻ&2#ѭTp1͇zO'<,}A&U%P+p\Z!Zf4A?oHrye J[ԪV7E ~XjF-9 żK?giw:׌'Z^ jH\n HJ6@4Zt﹖zQyCY$VS CYj'IaQ7b4t{0ȒڶQҶ`de~kY\%:}a!)\ZukdVi(C7q'*f % -wC:).%/Y_e&?@[CՅ3գapb`IŊd:rRJM8"LS;EW tq /аؼ|D@IKs+Zc -L44[uo#r-xjHy5VݾfZ#V6%b2w_zoojLEi;!SaWb4n!qGI կ7j(HMHnMD36J z |'(P^9`Vp=_QKυ/+tnw #.m<)N|^^N]P~uvy1P ڴr_%HThUSPrOsJ˫':}mf81q}3IDC#IEYBhߝD,$* p\ ,f{єhDRhB,訸*Xs:B| Qfx}|OO9!>ɔ-E:DP@4.膫h Ow8a.. ]pQֻ-.==lŒ].gu3f!_a 9(d]VIULhSSjdNRA@wi6jk>L1 AWzU 0iaFrbS4#eHT~ߩI;F~jߪRg8->N5 %.b\ PSȺ & @2fCPWO(H(+;/}dO`f /y\)6ק^U8%[K{v|xv|8F6pp0aзxf)NCK V:2E"Pǿyy8&4#\4H? ,İ( Kjt-ɶ1 O O,1c#W-fw~>N'OzQ5w kNnᒰ^tk_F_Ȧ2e>fd& ^@1(Yv0,Iu +( # *8YT>K/N5mG=n'(]Ú)yb^ꉣh9)~| BcĘvDc")9<ߪ9pZ_g ~yIr=:ӵR˜D&0R$XPN%8/> HbmwpWB)N0Q,)ܟK4n0rk' +ШȌHVy6v*PVYPR)_@p//[vL>( UQ.{_,)L Y:))E֨[wUVNJ֧i:j _F0ٟYw^͠oSME3VKz7܄piܧ&Gu( #Pax~9ǖN3) (%Rq XJ.*TRmeXwV,rΜIdfݹa>}'$[7K&yw}bNe}sNԲ+_cϭOSjԌIo!M/~:&+ީNl[< ,l f_F}uRK<3*ػBq-o&I;HO555]Uz$Xʰl-2%YT_H9E+ź B{*{u2j 2=n |xnj|E~¶aÆ Vت(W"ɤ2M{(ӉVk] ѷZf4ADikHc./WuQ,9W\JzcyԘ![&H,055w]6żէJ+ ^^5/ )BtaI_n3rM4*3*Gfg;2„>KqGRÖF*3t\:U{|\"(ߧR.ms]!HgZq0Mo"*urW^V6.xLs(IXYpa|NU;-HkşvMJ^jˍMzi|>FV2VVh GPt̢Ź7^[!q@AQGQ5hrEg^^*,.\$K vaa$E}.jZ,y\sۇZ8 Hq8?!ճ DX qˠs)ԅk}]ng%POUE&F:8apn&F: 02oiq~ΚڅtiB*Sif97ް[@&Z2Fu[5Pج6N0KI۾$ 'OQa40 ի<₷aB0eDb(i9zNPqI_F?/m1Ͳ&E!cb븷ۢGвjӣ*BRVVu8/~)"Dfw6`يÒR*]}J"t0&ڬusjebb1VWi7N Ard!CŴeN*LLeCnS sS_֢d`8hDD}Ԉ?goG;}">X$-L{S70ÁMEnr緈9zM͛ibg8C~91’[r/$FQ5fA1 R_zO$ 6{D/;Ž>=BI&ᶊYo6ى.q^ώ,ң B1Lޤd"`5xXӞ >:PijZ# 7r:ZD{"lw<zIOk[T_TG,ҍPIB^DUOGGk4m-+{T)ed9Ǥ *1dȹ>ͷ|qf]GEf{YS;E0[1 awؤHH)ݵl?@DEQyɇF)v򴭞p"'$Ҧ {JOcб^Yn[}/ZU27m<#yftó[& d\kIXXurv1*\<##h/fwM^*DSbZ'R:TsMDYܸ"Xzz} B䊾-ݝ?/I~2CzV˭\ L"fK35׍Ԭ1)Yy1I G'g8Kϰ:ϸ*+oWծoR#^pV&Lꥐ~2q̏s0F,&eqB]d ZeSn7~7W Ncjjyz\B'2m*JD~~Wl)sJtQ\өA8}/#b^ݽ_FoQ}ARW.T`w[E&ț/@$I^^Agy} \zzvٷ/_.!pgns' 1y e{V8t_>PԲ7y O1aty[]ڵERɱe _g5pvy{ѳoݾ&(jVfZ S?ڭŭTNQ$ 5\}+J%K-=x䄜Jm#}zMw 7fh2]cRτ2IYW CENg.]ƆEzEzgm,%cKM~KE_Cv#t]E]0whҙFYTPo~/o?$|h6i4;Wۄŷ7/x~pª6> }k)4 :TFV<.N6f̵ϫ\3)>CUitaw -ѱ{IB Ղ;2c#KKBoa#UjF>-)#,5+c[i0w@c{†^xtmɈyQ-ʱ TZy~ެ?F<,r,5kUnV_0v*}\av6sjO$Av^y*ah*Z d#o*HO'mJzQ BűwsଥD╧DŽ޻tre씫[6;50RV _EC[]ic72g|έm{Ih7/|<ҴފQlM UTReYqV࠷ܴ pסt5%YtRcRةA )_QQۄBT^[QCI'AQiYNAaTrc~(5uW%܎mxLڂowWTS!V)$_!Xު<#V۩aIbvF|zč:-:3yWK+GM5 I:EPS!ķ/{[l̕%F. "SՒ B?P{FjU ZIm~rk"?xիvK,#@=)kG\de<:Sgo9@nf fw=?F4&;g>J,\#•}}v8(1nG7وojJ=.;O3Fy޽~]!voУ+ mx4|>[lmhsD_J_XMGT&cujv?~OkKU,$CR73Bs{&SCv>ilG7)O}Yc!8_I | s6yEylIL QIg0 8TB"bZ|#X9H ESb@eIʹ=kzSW%4.ޞ[թ5l4yU~W%Eǧ FPbИچ=G|SW&+M`(ŤИzCg}W\Bi+ !VdB!S-В&@F)z"bSLAS'JPl4},:AI^N[oxMT Mjuz+r(ą]bf>{5G4tk9'WnoZr/[yޥ1]w(Ǵ^!7.?ַwajaepfĸ_*˰vcZ`n/!>gȈdcͨ=}'ŞzEk"Myph:F~] Ȗ1mGN]Ͻ IQeȄ{Q3oԪCwŒK{o\g!AK&K3ow =ۗ^=s;,SSYEmwȨd㧃dhVdB!/NCl7QJ؝.ݼs?<:GQ1ic,SiZ5 smpW5,UBzJ別 e4PU&M|BBFv.OU5nVN;W>*Y7R![ =,XT,N=/qݴd~w4S~8԰VQӜ[/;6ZtKjn9q€v,~階F#< Uvq*aV{tѥc wZ I\M^W}2)*jvGMHn~Wۺk|4n!B诒[nܱ4~ Po9mש1!g?[KO*2[   2wײ`.F ,m8idM'] >"i.-ZLa2Ř S|`{(CD·7!M3H9>f7xQm />YC{Yfْ%>[Q:///,'O%ֹ >oJeKWl}(8*GɫHGGYƒk}\pVgKzZK3,Ysn/E=b8'leڂEd -'-ZWoo$b`H\_xX.!u[\g!ecO`hwR#mYŭ$4y K YP=<,C^{hF w 8 HG;%Y/gs FRm⩏{Qxj5̈́@Sqe0P=Աz>Y7,zJB!B3{|ו?#@߱ǞN-,/~b_CQn LQ4fAI~ zB<+E QYv>6.Y8[@[? 1]h4Mݻ7e޼žL7D+OtƏ$+c7[ e{Y TH:uud\?BX]^^^V}'H;7{b@/o>XۮjΛ꩜tv'>wG 4|ɎLE^>' %۴M!n^Cc6dyE FdKli\p4hVcG^*pB%T\cDEd&=B!굿y\Z[I*wV4tzu/I>(dzo+},9=.o`kĤ)cz+j><:w֠o)N݆o޽g=q&OIcʩX8hJ=9>{sЋRjeG=`"Cq?/pV@&BTD%gWʸn_$oB#ټlSvXT3?`Iӡp{zkl|76%BEc{OWћn6<$s 9{3>?dO8@}ߨWO}z )G{o6ԝoNM+*IHѾq1K|gKBk -z*&}v^naI!kDޚI&&Qr*֭[ڙK| zҩuGլ_v埿>izZoW Ha,]2)[d4i] Gkf,Lzt?&!Lgh8ԖS o['Uo%ܺ(c&4ҳk.nXM3Éw*6#:H8u(}~QRTM5BJJ@fݧ@ *Â/JɫthJ,^"a.A&ٕ|FcR(>{/})[ 1}sl)l(dȭUL(+y|+QH(Í{|j)]]LRCMEVRTa6QʧfB l:ms< ?i;ڵzʹr1 XިU>T.A7hO+Kٿd?{!LV^ڷRտU?fŭEB^EE.##E̙ͯt)!~B!Pm} `ɂ0xk?(TWLX֤K\Ye՟̔̔[mZn.3걶'm:=.y|ʜON? 8}y[k>?~M֨w)^хNF py$$,M)!ι]#H IPd'IOސZNWi3/o+3Uھd( u_vQ|ùO/=M {z'Ģm`wO&I1/7 I yd@,!z8A7=Tgɓ'b { oe)G2ks6=Jzrq -O&\l^e|yWy9y⢐7!o{<2' 'qɔ),|k#z!()}7ꄽ,fR QdEq˰WQ!lDQ%b캚9 eqq1&zv0Yc'WYnIAzIAzʻX0d = J]-H9y:anYQʻД؈Ծ(ǃ^PJA*ϫ_MKw=]0Urk:ʬ 9$l'Uc\~#QaVY&5X }ՐOя*2(:O\5Ud1 ا7穹tHzAlbF94^QO*|i Rj5fY'x; 1)}nPL謣w#K}hzFω=W'G֎ֲ&HY'SJ6]b.[IQD d^蜰 ޏNsB{̑d'fM]ujꞐ<@/gtuR Y{;%qflLVdʋ\:vYgrun'gLѢxgrR9fFx!B~}epڃn}_j%3E mdv?Nv&{`%f;@j̈+}2g ](Έ}{Zo+s /0* MSo 3g н47=!^ŢVR4 ZU]|fK-ɄW&'OZiR!,7OnzO &GL ?h)>4-ֻG398zŤ-7iC IDATmIbrsnuk,K{Wy{6WyԮus:؛(\?싛  5sfw,ސT30MxMM#K"` y yFBW6f{p@`}pKJ\[fzêA2&kF(Sx찰E}~MTeUWir\|\F+?@"?)Iػ ..~:WOD\b`I͎ɮvZr.IȾ*։iάѮ2wײ`w9vh SRYO W^Oe[XnQK,/ąKghP9柎/IvQԋ?_"dTCEIpʊRc_r'၏m|5>iƽKy<ÀS,3t'|YCw/;yNKT$y>yJ>SŶ?mNQ櫻EliMo6*, ]T╞8s+(YuYQک!_ pUz̜fvnqsWRn \꾐&L'ѩR_i,1NLB3xg 4.$\WM\K~6URc\E6FCy 7BVA7T|%MٹcOm9*׎){Idc 1fD݊CioK(i7}]Ooz{ޓW- d;N"| -~~ʬs,OMha=]V[-'T*ny0['JG#YN qx!ءj42,(KX5FdWU`x&k#3 :,~`2{Qy !BGP0_jeUx{|~P$Z_V@^ݦM:=2_x]Zɐxql+7)ٮپV+;4$k_ziU[KvE YsdL r/Nr v}K|{Kߵe]mϠəw3aiS`;*oydhӐ^RJJ7I`s%5<<$SݤA1wq+k/z^{eq8 ě0G DGG4<01>4~ګePF\Z=HjrukI*T(xu|fcO.ҶeSj 4f]j))-{լғOfBGII)3)3, uew ^ϩ Gd:}7\.,Y$أ𫘌^1%k`۹JBJ8(fnzjRLiU-iU< l=G"hԽ*$O 42Pd]MXYR|u{~QwME~؜|r du=:!IK t_- YnMD+N}: fNy|G{SRE罸2T`7MQCm*~cTuݪ$_oo Q>͖S%1Io!s\= آJ!C& ez$̲N#+8i,qjIvnN(N[wpںEq.Zqw|O]*B }cN' ! *y7 {Al<7fA VbVSjTX]G}S>֜%A$P7l.OF}, \X2% N -Kk e lB!d>_o#C$7fW4;ԯ5/TA:lwq/xx( ty׾YSYiˮ7 ͻ^|]P\QJ;#z@jZ}_-H)#cQtM«`f~HO!S MyD5dR& ,j H-'keqDZ SxỶ,&-S{1XHd3@ӡ.-8֨Zwb@ӱN)= aEqG@@ת 1?=mXrv^Y^v;BbI̹ Sˈu .ύi%wZb@'z(^>t/ Di)2 )3K+x V c!iwo(]<~145]iuyC U)?#Țu=jgʺQ T@n@.@ܚHnȉJHI0\TӑnGc~N01X }Ր!^eYiA1W '[p#R6Ml)l:Yw|$rYV3!p__@ 3Z'QywzjgΆ2;>.\}\r =[*2"w;i5^c)3Zx87d>x2&[Hf͚5nY.; yI#ک4͙f-wݭS[Yp$X=_ҜiYw {Fg{BL6pGUpc܋Taۖqx.B!B ˶_k.M]J߼G0zGg_tiߝfjk5ml,,Z>^}YBPnWo,^aOmZ60?<TګKM|%K8{ڹޝĘ3 6!H;.4d Dǣ b-/vuɐI(L}0N/j>5a,%Q8L="$ȵۨޕ@ң#ӋA+9Y5k*uѢF|LPiI%0bz#whO\J\ = ̓i)hz8[[(~p497VOR@ZD\PQQU:(Li}܎;6I+0rP( _yO<*~ARO Y"m<XURkEAAתDO':>i$4s$Wo'Aa1&_L}i ;9:c d(QHe1hUҴі}呋StsÃ_ڵk_{|0t,L\V.:#oǘWp2|eƁ^;k邛W~bہ*.?OZr;6!/2PJR/͗֙k͢q-$KmݺҌGn:E[ƉBӢ1wr \*ܨ˸wx\k)*/ZLrjm7(Qo.2j : DRcE,|uV5WЧwXS0_P_6KB2.64ݝ4tB!swG.Lل| r]VyrDS{/qk< ~ܵs{/]z9rUwOq@3{xdw㦯@t?72HfeSڬu:kO8??Z//W+P,]O$1^|D9"շojBY-Kȣ5QKálx~ÍZbXI)XU 4P!i2J^DžiwV?&%^G[VJ&oT2䚥G{uyw͙2ǦR(_.ˢ",.lL$$9XXg'R=,i}zFĈبwn$='E4%ZQ'zDU"[S(9ZdPOG=wnD&`fm t9Embic""egĕbB~eyYYEUʹPn6jNL[δKozla1`X7=zZldلaU#뤫nJKI2/)k4I]B $9qV& V!r. $]]"M|[e嗓 y]4u fsE3g-/|~ZL׺uSΆGq+Kz ٍ][y]77t9ȍVr9.ꂯ2bͭuuei/N-0w\?]52%v]j4B!WwN}5M٘4xiڦi:Nϰ! >gY`A;udL8snlQg%uoYFfP&= ^AşJ;E<sTݹh0itP QaE@D uLJVEBy@0&%/!z8 /΍)It3 3ζSnC ᫓o%=@`֘DE5j/41-/:?ǯI@n,:7%@Th(y14c:/|HȊffUQH vJpK@Pe;3NGꒄbDʀԢ=\ Mز 'Fx-­T1m` }9WeN2MC`5Q蛠"R]U6Qf$.%A"3%eZ9صnggPqI\$4>A1i5os_&b9•ؗ#8|@Z:Wq/ؕ %#fҶ%o~4}澋6 xUe{V8t_>PԲ7y Okw9(=HBQi̥ذB $Go\ukN&-7ڑ#a5xܴG²2˸"(MwH,enU#M:\tц Ki2Y !^\tۏ߽,ig(GeqeMWnf~OAMϸW.s{\1[B!ע;}=# \vyW Anfc7L]X$W@o}|SKcNOA+*\gJSkRtC Mh s#VC=%sJs|!'pO>:_k߫(_*ĥIG?@KRoGHg$T:aOaOWoKFp++J׮ߝ.JZ͎$,ۊ~7 ۱13EU@,4ﵵdv,fru3E)7C3{o-j*M__ N8a ]kO**#/@BEtNk5(wG4I9Y_ԳòfY !B&jN쓏L:0) ?pXCdV7nyzcvmm>:[)HrRmTӥ[4f(o<8ک*&D&^;aGmocA<3wi%s낒ݶR^<V]{$T3 %( }lI-^[P%S͇ kgע_oi%A4ܼ}dB-߫(,L(;`*I榽qnp"4| Y~IjBY-(x1Dp۠2ط>W2H{i#oqOVJt{! -:6F ,QXGRMTwY)L;P_6PYFQeW_'j)Qբ@r(dv@?meNQ櫠ӑ%j%ZNz/UZx;XN'B z/7~Iғ"d6B88l1oL"X~'K,.< n"K|[XXX)*HyɡWA;6Нfr,kRodch]B!BM6e׹]jsl T@g?)ྥ_[p: 2vR䯝[heǪ'A53yngLBĨ֣>-Tn9#2/-5"Z7:ylˇb >>]n͖V>3?r ]0UK}|5Mͣ=$&UҌq0T͓K||kwL;,iBַ_Gx D>gm|q㠪ҪiQGkIx WS"_KrpzKL:'@MŤw333B=MqLR^ujɫVrLVBe7;WYxmm>K?!%r:3!{.)R:׷G D9qFBUT-a*M0%$]\\.IU Kk?37uvWeRT#w?ئ]Oi@ V\ ѷ8I  )rǃET,;HUI%RҲv6X$`›|GvהfP~I&1֖I,I| IDATI{kˍguSj(_xziZZI2H)dsڄ_>o?G'7t*A"Yr&}F/n`?0 F,v.o7edg3y) 2DcJir#R62c S]uBeHYM:B3oGMErCWUSTnj~ $2UFYǥ=EC/b N<37RQR`)$ %lh2pAn& @k ;ctc^X B!{vomm9V)s> *ؕ?sl!Fݏ-yk!#pٱj2flEi'j+NE^b5Nu^/oI4Z6+eNsVwc`i!B!Pcׄms>2<(`{̈́qAF.t^oSɛvj6"+Z|(;͜U wm0 <҆O!B!{bqLnLOcGuܝl+m'up8hm/71-Ohxg;5!Яe7gƁ&rX55SB!B_N59ܬr-8r4Ȧ -/`@fǗUbGj#1倄=qb B!B"HTUK<իEʘɱ;'o﨣*K4-:< B!>!B!(H @lsGX0l6 !B5 B!B!B!B!l)D!B!B!Bo-?艗;i¬J.MxO֤;"G%j|NAJ~ZBԔ0e7T +&IlyALcѤgE3t˜J~3KVT wl.^ B!BpBx%σ_E/&XrJz&6.ڬ߭\$,)]2WSoܩUj:v '/'Lyv?\8pFPpeVa,20q -{*,^8q)$?Z߫f0xM_J\ڷzsщdIn]=YѼ򗆻<U;[Y5?LvNK}ٳ<Ը] + =JK] 7nPgȈlwW8dc4~-2]c$8^ZgYU3w+~V]wYQA, &1,>gqȬa Lv->t#C: ٔaċI_8y_$xlQoC,B!|_nɰ,Fӻ[dŐhMIUߦp<]looJeKWl}(8* ~YȽ+{n^zN/ӫ>_x圯Sb*'׊vҰKzZK3,Ysn/EٷaX7}-U"a9nf+,:%dh_}'(lNP 8EB^㨣ECC+M<a#nl7bP Z+߉<,[Dž?0|Y3=%ij baQ"oVMVfpIZ Er.*SPY:pK1:t:h+4BD$3|~϶AxפĄ/|/Sr]Oе+?111k6!`޵!=^WkT,oR3[ްv3UgZS7AE/SYa f;a;ƶaU=YH"ҧ+aZ"IW,o 0< h)l\sDVKb=ϼ#e{mk;lP+G~<3r_"`]ߡv\VnyՋ7n"-Zz2_[E am:̶4S(dNQsbU:f"N3x@^놏~~`ٲeki18Ϋ y~yoJ=-X8Sᦓnq;atiߡQӖ=N't4o2/מI 06 Ϋ{5ͷb_՜eE8}%fcgϞ={Sְ}ϊ2pа>DU<-F/۟D4}͞_?اSEu MWJAlJ=:vSjyS:8[Mn%B[ZyNk>0d6KD94n :.~3>?"9++xg폡t R) J@*{]eJ_̟^<4>+l3r4p衷~3l JfXX ^ߋ퉇 ] ĝoly@yT)ND}/`9ùvzkZULU]|D`aazg5(WVݿmÉ'>P= ߼qnSSA$Ҭa Imϙ_$]>w቏brÒ¯jrR= Ww TMijnOmq.W(v|w qRFTݨ4*|6y_dnGϳ1g=p?no(rllv^'yb-7OcPsmބDCyhM/9+G&ErX>[$vc'`|cXu 뜡ߩ][)Kkp(z9-Ի$?LnV1+y20j_?Ҕ;O~26CYh2\_@h;JK=#;bv}rQz طj2frʢ"mUv9˫ayV6|NvDYUN7"rI}oT5n*,d2 G/-;mڴS&89y%?U.=>.yr&:VILFQQQA|fTOMܬr!6B>WgS5'j\f4`N: 8jt܎HP3-qwG| F{ʽEHU;F(6Y2S!+I&Ví{Ϩ0Ó*usQj}/"Z5H[g`Sgşz,0 Por  zjDTlUsW{aُD|EF#ȅ ԙOdq=wLvApMpˢFnsdIh6jm^4!fkV i94ӡ'w_dhŠ*w0777rT7777ao8#&٪4;AVxV|GLNծB]޽wmz^u5rb\w9{_#܋~6^{?R]JqYkweeQx9wfmj"}IOsVSO>>b cp/<2sg(m񾷉l03")Ih4 @]5 Fhh2/ކ_DCfX۶bɈ'o78:A{ E´G'ϟ⒒SR"󤹶Z'A O,:q)epbߏ8|U$pb )_5UޫD}vDp7,jxWOeeM]~}am1ŜquPI~n]Ҷf{ w֭{73)J+y&7t+^xJ )LTbO]±4R@)_7T ^ (MI (H)(}~ɻI2+0ߌm FQj {P{Rm/7a; cź|N;^_ Rb@ ~er`|O@ Ond$p^?,}f0*K:z͖ӭU]J)Jwx^ii،N1ҤS0tA_c-Yr|ŷHx߅ Z8 & >֟V` #N,@p#b8QmŽ)+q WHJbNez%T ^Nds8EI x%/99fn?c5DOwmϠ "_4V"\T0h^.=#6X}W a`D)JÑWozٷi`P?mf/=ak%sQ7[Zd0MȡYΏ!|~ _A4me;@\n5)IWY\~Ĝ?XV"7?K}yj7v 4l^hC'@Aۂ'xatUE^ݻ&vHޒ | $hWx*2/ӃWfzw̡υ}3;tK؀g&}M,K+[ts;S8˹7v,z͗t oB1~fa$)cvcD|(d87ggXro;NlVzII.(bL}C{ &+?m硟}/bSzv5i^3&Gzim;n1r eO>Aӊ=:>KoߦMG>=j&X=!="&fQk@\写)&im"jP"nGWߎIUVY/+>7Ubz^%PUu;93'A}?;Ey ~#='ZQqڟtYm+%oȏiӸej h/gXiV=O'z_P;Iuz}h.KNPQQo4qU-.V G)'Ht iE}],jra؂E tJB%Iu\bjnlWiYEB˸T͗>8I㸤 "ѪFF*7 {%)?M#t- ripc]$^#3s|Gqr&zZAZUW=^ViWhp5x*F(_JN`$ o984Q)$"ې$pKE[G'[1DJ7Cuhyt- P|K;E I֐5w~>3E_ _j±ǿӔ--Ef/=b0ᗠ%EfkV 94eg}0U-}1_~! ɬO t+jpnME'pwHhrݶo ^F3ԧ to 35b*Go,Ė DT,(<4ϖXHp* r$h7l{MN"+p$XYkMmwmoAniBvz>Fᄈ|QѧzYjk{?~4x[SK0uלX=1丏<$>4e-%$@ܜY~* {WJ=։5縨Eu;=#ws'v+eЊA!Q7mGieH]ً/F\>g²kW0%$Oگ|೓=VP#7^YQfYQfڗ$X<¯dõCW_W?.>G8i;b!WPq*I|KT\Jc`8=p+` :HIL(/7ξ\<öErk$JXhPp!7cqLaYr2F2 L"PSAh&kOν ѴǕ jSxa8~Lf\޸L}`P}kt[j+&RRoe4E/7+'+ A6L٘- Mck(bU`a_o7ZХ=I*45.ݍ܂WwOM^d붩uJy%uQ|~Y ˮT5egQg{~A:,DeS bBB~']P7/~cZ|)3_!]Le%$viQsN?=hY.ׂR8|)5}l-ե]'zܯ{/Q'ɏ@x]7G%} Wk6Hu0=š 7ڍϲeQs.1qE-O>_G5iNIw_VN\K\ǒM4Iҏo\s]ac:6p3s-N4~ы'V{}v[i-Ce‹ ԡƟe\ x ^p-guhP7/X+L/`use< }|[x[B=UIo\|/zy0u#4O?ǽ>\gw۳ǮhMt2Fp=N։$&oPUQN%qX%Wo>L ?_CG7 |p'ueǼrߪ;O~26C..|.Ύݭ|vA 5i_/ Ç9k(JrJ߆^|!N+kwQ}9籩=Ea`/9}=WݜW$vֵSe૔zcq_@Ҹ Fҧ* b)p{#<=/T!ⶦ.`[m>m,/v-%>8) t$.ZStFyK~x,ǭ#s^ot=vx 1CW*'pYI= jW-xr'L/ܒ3ؖK(v߂v*WvpmRLVC!2n+Wgʥ-ps5KJo7LdqCy(P9e͟_{&.8YOnnn +-sssH]1u59o<}0X [v*i:{H.0*pMkb;ta@ -aR E|n볗e)/ H.^kΑ jޫBTE«LWݻȎKq8D]Daڏh1<47jJ}?Kmy2nsG9v=~!ɲS'짡i ;4?׎'){?b^QZ*Ԯ9VeRz| +#i$ݨ%a`ǨKOev [_VHt2;ҦAZvLU~C%@1[i_IDJ-W>Ϋؓ]A)/Vm7~'N_YFBL I;[{b8?_T@0擝zhЉ)ީ#Y܊,Aa^TĩD̀~}JռJ~zP[Mi*(-4kꔡ>lߡ?YoN)1e<TBk?YGBIYu$u`+)1M\aUr8??wd[ļ~ڗQ$X穣(A$:Z~]^V Cݻ++҈.n4e]uJ)#S:LWDR%Laxg.ia,E!QiCQI|^~:L5a*CE߁J eu՟eDLPR׵09Ǹr$"ʔ30$pK_/bueHL / PТIt$DVX@کMTyןgbP[hOaT~z#8.%R[G00} 8m#_PK%6H"wunLc;Fvo/8av217aKrAβCU-wG=9髾*LMSYSϧ/^c)OĀ&ɬcn"Yp:6xj̻+7-K͈ tU=fm;ȦK'v}>e,T$w ]Tm3 Rޝ9{49p޷򨠛cO@'eQTy {5;Ǐw\=D]!VzVz,ԩSU?GS|kiOMBP6)뽳K\"1i4.L8W ?Ѩ]:;DK4-zP50ã ε:XIKw0T/{ff= 79M{K4GEɃS4aU[nzckXʬE)S$mKP_$v9d }P;L.Dz?#00ݎϊ +A"zYL+}.1u.#/yzfY\5 -wu`*dХ3)0{L(DDd<鯋Wֳ(v޵%^ n #4o8Ll Q06Abg?|Q;g|{zNuīgWIiW_e)9ÛρȺtP$YPVA}[s벧M ⮼ISG܆hx~g7:0gK)r^͵W;ߦ@iz{$$eü7/L<"DPvKQHyu^L Kჵ/oMx *F;MAMqv8@gQVٟATɋ(o|U\e:IKCFiV苼r̶ /OT?Joc[,h¨ ɉ,ԋS+K~ϭ_1,D ')LC1_ Dȏ MƩ46bC1b3})$:{:uӯ)/]~A}`\pqD|_ZYgk7'kګob"\R6njb!hj?~&:.y"PJ94HsoDs8.k`W5Y?QmɈ'MNtC?x)6bӝkL`*09∟%!1[ë%brjsVn`RBMu8qT'+;t.?$1 jVǚJx{߮wۻz3GP% Ys\-h5NA<Ԙ'';/ZC{WM֔rCX+"]"S>[y+4,A)S^yE>譓u2{hAKC )K);?wYTDf&=[B5"Oݢ3Ew,tb(jI^l]W9^HU_.>xt⧺5KƎ;y=Eb_K,6_~ <ͺ} .u0nڼ *1?j~~j:tCUpFˮ+ gN2rKXltγ(Qc+,tOfZ=Kz~kAEcEA߂U {PG@?0jT@dYL#@Y͐.6q_DpR@wCJR3<}!(:4$uvЛ3*#䇾~qDF|0xٓ}dD+ 餗%}Aٷ[jmK\H8cO: x6rYQ;S^ \_`bD9/,HyzZY!'nK:9{j73`J+7=;zyM3d oI^m* ~ uň 7Ki#^=sׯYߓ?E> 5z/UG4k6L-(Rz%O\{^crLh?Gjt!!մeeeXZ8f7m$ Xa? aeKVh :5\֎>^'%K^!M!${`4]_'(e.2s=܂Ex4ˆbo%0ͼy' B9ua).(ծs ;7&İuAǪX IDAT_o ]Yk'TgBWH \U"M&?zmݺe(x2|^#J>s_<P! .:99Kuֈ=$BEQ蘳mR_JA(xId) 3 Aq~Z#D#tUo+,0QZz+B&hgI'g>a'VUcyއ ycD}ʼn^.H2E"7YNPcpya;߲7kH|@Ƽgh xxySYBâShcfLf9I8 E5j!m#HPYZ10A%Hǎ8E‹Z_i$~z)Tԫ/^LMJ[@PaϠ|.ʭc!`Yv#+b)Atf ߙؐ Ojd"T{9:נMCSAʑQ3na^]|T'Og! >6D܂K !#3a1AEYn$ y9.B>Aۉ]Py=])EO:\5ǯ~y6&K1b \P+M dɲK%xiɓ w?졋a0\u8~qf…w[WRg< 8)zK,@^Oc?A$m7@(qOUNAFb3& jqd5;шe G |>7>6f UI1*}ݹYXq~QaG/L FXCyžp2?m߬FkǏTׯfʊ7+oSօW]~$>ܬNq ]Mp6MB ҂o}ɭhLTT=~gE0/c"k#;B\s0Msv?J,fqp${䓐}V-: W%GoEyem_"u&Gp5o҆3uH%' S*U~|xe_?<-#Eigl(jG$Fc =R84;"َ;gֺG&Pu^jF?DH ]RRxG5 ]f +K:pvUURzW}ڋP(xce~ko|}cUь>xZts zj}Kxe2i M}.sm ["n)<UwDw&-9 ۝b3'\-dyE- vm`^StVRU\?3S8P>Buٕcl;Fr,U ^Ira7jF`D9==,YXUʧ3N>1W{vz;41pޟ&#Z7E!ZТ@Ynq?;Ԫ(+F1UbR]K?WX(Mw51ӅO^yd R0ֺGŝJ\ )_~bImU (mH#Ov־T{?O,-͌ ~=~L,nI璢'N]Y%uRQVكQ:hrMRvjYAK< ͉>\ӽ҅QZ&jބjyEs[TLXY#;'MQUϽ'v6 @ 0kV$H2zvƾM%rbIy}|R 璈GiS*7bP(L9]嬮5,xzu~&xc:4})hb9<6 .b#HsOED<4FEI$e5GM6%Cy;{-($es6G=A5tTȜQ}4$ɍU+؄[:u$#!Fk;NG*>;XSL~wl/^lgՑI'ĥw?qa/}$>{vАR"!ge`kJz'YP{gطw5UI*H)˪u7[9rAVw6L_:X!FX:l\.L#%䍭͜v;QHeHkX Z:ѽ}L_gy'q1"@Z dB+R7{ B"ĵ&pke'Td_)~i52tұؿQ䠠;hO!@ @ V֥'E4:MNNJt>{]K7rZSiB@ _v⵫ JG?;d /"@ ~(ÈR6Ê}uӳT0"ι+ju"~QrfVnveX| !@bn$x@ @ ^i3 ´}fCR tYNA@ 6@] jH@ @d > 5ܡPճȳ2$4@ @ "4^YGҪ[ 4|Z\!zW\qL8TT:?o"rnN8!_OnAORk]L@ F`88zh7hEB@co=:gn3.A3+G5aHJ p RJC[ a-S+G{Er<@ @ hcL߇iʪp}FuBg9'#N=wH;zٙ]GwY @ @ @ A3..#T)Uf#$sH- @ @ @ f oyY%,"]\MEWZA/yr32QYx02,t})t IY!D-:|&bdJvv2\58޾mj>K@PJ OҊ=)?))V-c .J={%:0Ea0M ;R[CN>K) MAF\o{/2iΦcUnj{ެ[L4>!,ϷǏvS%z 6Rݾri\|N90d0{S7YJ~;bKwBQ$y=bᇂgXνD@ o*^1FÓ"͗aH8p>q'2Vj}pF8,/^18TVǬTaJ RHsRF=LU:3"'&!gѡsY+ fkJST}ZɏW |x33gGhLG,nz|  4A0&l9c9_ݸB0=RIvb\Xl/l]!e:r9[ttܬW6+|(xזl XMg~KVsmNtؿ<.؜wS4,ז( ^Z6     ?5f/ݠ$r}}?@uZ7F+&_md0];s+u/2v8Oh?I6wVłX^_/}oV 56,A@HHHHPD;v6/m֓KrjPiTZ%VUǞ8BE|B҃)a-){rM?M݄\6FT$`+ZTfE\e5qrK7!K@v`4X-*мO3' $5rRY0 rYMUuUUuUUuu sdeV}_YCg6vʈ _!d4Y<+ mAA`*CYȭf `ZOn-@ 9tOƲW0Hz.uj*_&v%Q)|ฅM?+HCE_c,Lm7JTE-;V=; c3JV.eظɱ8 vi)Bz滳MfRGM)/^̺C J^LPt.ʍ'mo;5b: W|eFSw}^N^_ÌzN8˦}e״|XAGNS˲ӓC),u1c8z&Z:c8l*o9<îQzϟEH\厞ҋ8R;ױSK0'0}INUoNzNg%(aquZGAyd_$qܚ>&F"eM/gdnX.ʛlV:   ߅U6NE],xIKiH|uahIl?v*X3[OolJ8a(/g~A{A aº[0^OMM-Ky{RRڭ)Z?ō[Oo`V+`PљAZPD s|U66(6%a1Cw);6`qB<݄噆TK1[Ы㿶7 @.92|JmXmYo^\.x>훻(Ne oT?it^hUeG IZ6޾npG)Gmf;SD1(?9 rX^V2.%na C֍ tAAAKL_Vxcɦz",bd;a޾UJT0^CkK9Ϣo~_j!O[9>Jiwiny†5A܏H{P4  24 %BTVҍI2Pׅ~L߶J.ꩴ8PZ +@iיgdM| ]4=t\sɼb~4D rSI{~˖`NpEL IDATVnat r(yxvu >N)N i9ٵ#xS @Dm`؏\07&iٰ} @ẠK^dwz 4j83][B'P)RqTR\Q` 8,/nepAAqu? ~󡨂$8}P&¤ZFJSGg>3*xj F9qwx Q3\3GEw Jm;L;|zϗk(MxejvN~QE\Vt Yq}Q)u lf7ܕC^?R/ΑyEv=[gx^˄q+lN $OYSrwu|7 b~H҆5ujg#3M!4Ĺon˻ּRFB^f}{.{( ͧ/ݴqK)0j"HbA>G|RqwF[|6g;V<-^[xƧ3,:UXü ye,y qmw,kwAW8J*$ L*gc* e%E= J-/(# kLc;o9y]JǑnP-{Qi%(;B%ɵO߽]UlFy߹'X^%p8kJBJ* ɂB}U f".$<𠔏ꉂ*ҶM\-%ϥGMiPsW$xta$}yŠ]P dALVj^V^p~x@bAaMQ@@[S}hk>mkK Wjy) jtgJh(l2`nȽ%dEtk7{*x&$޺#]f1˙7^(bHjٹs6\]-/)Ak;| Jb_ Y03<fR1e a}]Mݵ氫K˨AIs kV* -鱰8Ԑ~m;{wsҖ|J׭u\&~sЊs yc)(""3|'FeVWdaEuV u4=9Lze-i o|qk]i<]t\[K#kJ: "ĪKy/Z63'-)<Ddk@ G||_zELAl e u wNߘ2ڐٹFMЦk$ @|(#$ ApDȻwͨВ̏}@,:  !Fvr]OG?<һkυx}̤9w͉h*,FcvgԵfHyo>Z䡛oNTq|0zӺ.N_,3ɤ}ZjpIJaySnLm;E7r79$y) Qs͉) _z?Ak,Iw0X¶ I£>SaL%]x8HU5泧&,^@T M$Ggbtp x\:O皦6՗fW^,* m=z-oy-Ә=TTc~*GkC NVq͋ l.WaXƞBZ^voz0kI8`Wx78#צ/rpEAAVܶe4WX8##uXҏt6p˥ n{wru_0f 7=ȒS7\5~Ȓ-_1u¨}$IuEO.L^ T3a"pΎ;M獷2P~7yZduױ9ɑ|K>;ʚ3&L0[qЀBX{ /V YSo\5PcیPC^pS2uQs^k̖5$O@aY |VX{rՉ+'h rj/O&ҵtWkR(Kc0RSΐ%'-:iVQ9ci@!L~8p:̌ԍGݪg owp ]TQ{׬a4e6 zrd7e?dFMSlBNv̴ %E)z*5:.v׫l< 0-BKceq-. N9Zh|IuY&3CW}'>NXO[VQ[M38b*G[PUz9ƅK.W5_Ⅴs[@}M?Y *@]ً&i*3j<"`1+b{p, qj66gZȑ֯}](}Ůskp^^핕|fBMpwOATCcE}n֧o^:3q"UJi:0* MIBu+z/ m0P@OGQVB3h5Q^d4xb)8ħɦȘNo,# jyYIF›"z6ecԼ /,\1Eモ߁ Qò÷»e.ޗXոV^h |,lFY%~eps,s}{0O~g.əu 6=7s̱|(q_yw;qp(f )9ANfF|3o>[k3o=f1mH~;X-;gThT!  ȿ, ^kk$ oB?5FuSYD(x;j9P,IumKp%COB2vۏHg"ϞlQ]ؕokd1Epm-?* pxS7y?L_! 5;n5'^Hc: udznE\# *g(gvUE?l/XF/;?0Ҽ뜔/P.+\G)Dp!@|{z$!s{| ^;y@YOZ=$d-3ӫ '>ׯKyg2! i6~amL-Ct:@iC/yar;(16D)3   |RqQ-JhjK@qesN"=hkGRsMcel–#)?Dܺ|爻 Ôw}8 a <ԩ6ke')  ,vuQs&#|OuH;Via6a}(G'!RPxYPR[3*%ӦFVm' }J3-Vwf!\e3;<}:b"\rݾ"JZ( ﲫ6NA2Y0# /sWbEr$Ht̀v]&/8O@z:˒,ҟ%/Ask_ !*f6u6p]˓My맃 2, DxV9'w'lF &65k,OFa%Jk:NImN*(TBۮ =2z#[wm_mZoPQV NhLaϑpn_0+<@Xf    V.7?b>7mXm}QjM T'Vv`Hm~fj44TW ֲ6LFc2,ZKaeWP`d=*y?wKϢJ1cdmd4Sդ#kuy}gRgAauVRȼjr\n%uQJ[)?kΓ0OiqEIxͤvTXvb_=5{%_ɐߺ$u]0\FkW\E: ®~\Z+cL2!Ӈ~J,x?(~ zNYɒњQGNFR舥arr}ԔFZ՗S80ot4rUN-Rp$ys* xBvM~o!I`guE[]V5c,Lȧ4 2u>PVRboM!r>v9ȉӶY.45}< WS-j?\ru oSڔ@j_5_c G֨YXsJo|C \Vk6ey"&ũ" r *:?r:E==|Ĵי4:G@L0QbP    K ]ǽ 57&2r7qHgn_iWL:=k0 yI" VJ#_~j/bE&$ lz3Y> qqor c?9uk-~&S\:6& t eO%~-a1}i6 Nx~H)*.:ِ:] Ptkk~˹FD|@AA!ct2;-qaf'o>~i<9/BʾV=ٷ̌wZޗMqIp L]RE海E ^0&dT'(,x]gы@eb0%/J,թЁJ^eqmqk[ ))6[狀ϔɸau/Y/ze:UX9R@gɂ] t)Q%C<vmrZy >MB̫IoP.9r-U&a"Ҏ3JO>} QgO[u~N  >9'IH+JOj5+ }ݮqkZ(ֱqdSگ% ?p>&%啱U`[r^ƽT_{rmM\a(6{\O IDATX^cC~Oo6rYꀶ$PKRa 2j܈-*a$)T{,MZ树5~׊41c;C2nc)>~jS    _!> k"X]z뼡Y,Spw=OHYܶvS2k@HpsWA$=vQAW!2ܙf7R+~~{g0^`ii䧾Y2:-k;n۵;?=f)^iSEp2N/Ș't;YoY#KN ?oA景Jexmwjtu`}<*D<K/|]U˖Vt@e)H1xu"rPwݐwrhwM_ xqXgp"]F~E/(xT }.Kڏɞn3Ǧj|yß@,av*`'Yݛm6ñUKrzٖ% 3aYa:ڔcĵw/>{&턎=&:wO}RO|7' Rl0أ.9Gg ᤝtӜbBo!n]g3*0̢jډiA,Т3#6w]Y12299/88!Kt9'\:zˋS+iJ'[\r3^~MDַȌ:QUG[KKAVBѪ9\IUAH?L ,")DAAA&ij{^f#ywˀ#Mξmviծ. ^v'^bpmKF1Q,lY0$緳gټQ+⾣[D}}6kmzAS2$ϣ\; mFfOuK%Vm/yPLV[oӡ_atM%?j%mG,V^ywmE7VCymjog[`e늒<=d#?9.gM=vuEJWHs濰+N͒^̡[LZNNO~/Ӽ5o6708ʅ僆Ko{N= wzS-]ت>mFYͻb5i=+Aul/ئ|;lޙRV0+..G#f۲v/6Sݝe:h;3{sWӖx`Ѳ,-/0o[HqQ \$2+ }/m*r$jsaRb^ļjk8uET=:вq暃fEAAA&:w~", *:qSڌ/!#6Go+ܙ|qU?1As䶏bp/KVK(jMYy85ϒ+ظe\oWLH*Ɖ=P}iI.5\O ⳾Y"ifє$rS.H?7Gã~@Gc+.Gjo !$dUGN^]peN,哇Ɉ:TAxym"xӷWwEJg:ۜ>_X|B'J/n2 'uz:4?Q3f2<+ qju&r"$ОEID,/4PgfPуcv-0@_APjݤ+K2R"`8a Vxm {0"$3 hngSN 4E.?x|!bBD<*7f Mo]3R~0If"AAAAzʌ}UJg3ho\,+TE?`RҺ|0vCݱR}7*>cX緻?)T; $nnyM~ydd&$-yt]P6x   cpXgW>rwԧ {v-vEqwY4?R%q {Se ҳ_E{ɻQL<`,eێ.R""   H!}$AE-9N'\;T ҽOaO$ʩ*O7>T^f7qtt\p vo}P&u"?R/ΑDmEn5@jZm![[BJk]i]|&Q"ʍ_&AoQSک-8>ٯ%Id`Ho"z}P_cn|m x2FmԻowky%c|rOM+.vϾ!M'D6"5T;Oټq6M~O"   HO `rCoeϰWKz:%QzGGnB.+![^I_рUc5e֕z_ܧƑ5mܻղ];XC٫{R}yu?WⅥu[ͯ1y\o:<*`AAA1M0SI=7xJ_dq\n;V-b>zlD v Vސ٦uich_f#\.iCeQTݨ}ohKt݁ C=ScJRR6JF7!<"z90뒇]27+o{1AQg)۶pԼ /,\1Ew%p6=oS,.'ve"   HρR ;q,MQˠWIߥ{$fɡHػ}%滤Y_PYFMl/v#:cTWtcSByh[,Gkؓw=DtVa=Y[Y`1xto AJÜz6MDt/zAAxێO=:yИBAAA9dKk;FOBߚܻ+ۿqVȻhd;aD۷J/Nhcז>x5U_EKl]5i\+V(A\ߌ*Q~dOM#)DAAAVq48*/f0=0sޓO@eh>}馍S VWm7*H :,I-Q=QuEM0n6Ez-ƭ9)4֗Jhoß(y*=o(MxejvN~QE\Vt X3&$:,f]_sd !EyGlT{=<lpf$&¤ZFJSG֥>3*fWxi@s/kܖws}yc #!Bg3y]JǑne]QؽjUTYd}^6ܓt[N(5~ yY%UdA>*cmO3kV~xPOUDAaYi&#ǦT^brm [x)=2Ga5ygnZO{+?3sbltZfNiEyu-@QT7oeоV ~JSD%dXO9nZ*ӝ' xqM"   H[Fi4.V}hHx4]0FuxᏳkZ~eFo 9zÔ^bmIc6/ɏ)ɏ <,ZNJ3j֞B.b BIϏrh.u|./P^ȣt_A^uF!sZgCe}xv+-/vtZWͅqJgJA;__2ロћŬpɨv?3im\Bo9)fef ˛rcjS)ʇd?Ԝkz@]i >T q1 R>IS0?ݿD=1Ti\ׅl) f^BgBTTΓ+-'bCfq{O/7h'hRwQ|vF}}̦jL-O-OOW0W{zoِS >hq}zzZ$bG_qjJ:iqqiCnRy|Esjjӳa2?gmZ0*] mq`TW=gޘswX9II y蛌>ӲdatU/$q;(a)ɽ,緈TFϙ;jH6Ug^/:(Pzom|s۴;;FL(e@oOT*ܯ}zvx@k UlBH.͜ ooHJNJXy^kBry}L5H"Λ7K"-Emo&19bdԍh6"ҿgmU$::jЧ7b.)A_89^ g?dw#s&cn=,4瑏 3b%]SugV\i#LJ߶K^3Sv/k?x=Me/ݎLZS%㝬HBۧ69&7`Z#{v4QI{Ĝ^8fuZЙz"pynZåiXX |1nvv#JjLE; E5\ o' uwZa[g.IĎK v)2|B`+ IDAT >uyMtt[ u7oX|C ڏi[(&+j٨J^za2vBW9<)?#ֹˑ/?.3gK;#"kOA~wtԛ4mk9a"(/NVclNF @  8Jk}Ua>EK}w-0l^4VF)hXr?wO{\S :aJLSѱ}վK|̚]'KJp-ܢ} TY=z'g}&2|qf^]DwV g{o h3uСn9SOp oR;1FNO$4A!ߜ;y"][I Kc+e9!>U FA&PiNN.3-p?q,˜!}(;Ki/ҥ7y=}'խ䙊nr8.:[R*8xЉ]^da\,7GiPO[*һg6L(yuG Op5RZMH ‹ea_cޥ,T)$nSW:@yƉ )edɑӫk%G!RG:8p35u\̴R4KRI"a~s,&PWF0djG(WdTހ^&ڪd"F3\{nC"~n5r\njL@Wk{"X%\(7fV*$QNIu\y .b5F"5DqQ.Hk4JtsԛEϲ1m@w?ۦ(@ @ ѠU{$7'qj'\uީu=W\)=0`DƬcϣKX<惜b^Rzdڄrjð"ϥi AdcW)Sk3ZR&^^FuOղv/Ɉ#}y4 VmM:$7$SӈOޤUک|vmt:*AjyW);R9Vn`yar<0ݭ% ňSԮ_J{j? g\~swZ|ΒaM$i-?,x`,e>$c} 3x͐VeYg,pRxvh* h'Y>QW?{1(x$'<-&Utܧ\6'ܾSk E+eb &3O 3cSR;;i>T:5bdAݗT%?*QL"UJU˓JEb] J7QP()[i?Ǧ(R@ @ @i\)htw^]*)ɧIp\%]Aۚm]t:K z-: =>y%1y9 FCOV$ u{Rq2vޏ]엲{ռs ~${o $I/eڏߔN(j#NPiJsiB9L.7bNrDU H ;iT5O~NL0vNw|u <ڡkĨ#g>eHJ!DL.0럘VxBYXCj;1aIt d^6HBBnju*Vhmc`C=1rD [9-r[oj51nRZS81U&TmFk1Tx^\v7./Aɧ]Ȕ0Uu455u 8j+P'U뭉fryu#nFЈF)İ*0% P}dz b6EB@ @ 5_ E/CR>0MLGn]:iՊcoFI/~#G| G'i1Z@v5!'y1{S*>U@qydJ[B"=w=ǟR{o $-w:V&L4 ~~fo?c_7XbOm srdw)iU=[p]D>(7yt D Bw$I$ׯ}Ȼw91_윬ϩ1I"2ju-g)ΰU6 odAILPdyC?̦(R@ @ <{M%ŏKLTAdnþMm:Go˨kK!]ʾO7e|Jm}rjf^ 4km}eom5CK5Cuԍg.) iJ<$znCӢAf;l$,Ӹ_7iuUžo% lJ@ @ &>~ş#1oPZrQ0nor]}VEW^ 7,^^u#GxKI(y"[|+*qS;v8P<\~\1 QKVeMp˦{`/ZC}OI4Xy Ĩ%oBKP i$~(o{:?yk\W^J%wȹ_BY;ΨB0X 0UBz0"C&.d}:c>~Aז{HsApHV]4׌9拹WOd=lLJ{CoC 0 2̰.O0iݱ|4;Mucf%7w}:gyg8_h$; U#/K[Z^{ \!J""c6ܤup]q\2$zMd3_~Q^[!y\W/G@w_yٓ"@ s82~ 2|mj$NN`UXX\\KD"c,[`4iBy浑sv=PZ²ϑO]rٴz?_!m10r^dQM,,]tI_,Ӷ)i&G╽&cK,}|蟋fR=,#㢢S8jDjSm05CJr_&>~mǬOM5a 9ggĿJŶZ\lNHG>|!#'q1$+" Or_Xsȹ'ldg[E*.>rcNH,d][Lj oƥ3tiQBNW8HucI~(H"G,5  vKlvE @ #ܺش֧WV*ON/KrCwtP8nZ_Bo{4I!(CQp,y2h_3?w͏u:W{c砮˄bmm*iH:] oBJ 5>|ƻsqZ+yW|'+6RRsѥ)\[_,QwotjZr Cu^9ڵ|(^܌ Ap$'ҏqqiӐBhʻSŒ|bV{q鱯]zxz%Ozcڦiѿܜ..T5鸍8)ΡVܒ7|P0t//+Ծ;ť)udU[Q[?eĎ[[|/%fO>,(1QUzé1V|g1qK#"n-UfOWSu'J(/;~Uso9hU'$V|pu&YSTwyo mQaC96αx > 2/&^Dod) o JXNW%\:oi(@ @ *%nĠ)izY2/VRo%$GGK`hn1pҁ[Tzxbo;u&@$+jvs"$VH?T'}ʎ1&aD3L`H"TtGۑTZcIH/\C1/n"O$U4 FL:J6pww{c9 IEx؜MQ϶@8uΈFdBudD3e-dy/K-&Dwqq/ 0lcK+u%:Hji8:5w628cٷr3sԹ, iD׫^/s.nZ*t2@T`*utۺ|:'/S+=&c6wڹH`˷޺l7uY᷂ls2d2Dq{we\|߸ alX9((="@ hx?L"7N܎ϹmhQnFaB@2?E~e"mP^}f`B@ @ - sv.K'NBiqSG.UQn+@ ÄU(R@ @ %@P!@lww#5 /@_v+R/R@ @ @ r @ @ H Iuk[EmVF@B@ @ @ oE @ @ @ )D @ @ @ F9@ @ %5)kGTFD Ȏ./:r - N5kl=T@ @ @ #BDKOwz" @ @ @ e⡧7栥H;MOǣ&[|:ð?Y0 Sksk-v;[wYoF7W0LNoO/8yD6a+ܢ"a&ɲ#7cToK#M:PTswk@Xuq&3V,] OOoVSEP44=seO$;6 F\I@ Ha6RLĪmK,iD39rLc㜍&c\,#U,8e&cXͼ%{mw- vv޽綟ޘ}:;vUEN+[?E5 e|mrI<ضwћr~3[tMF!D q1{M]-Z+];0˓Zѵ̟+w4/y7|wI 9qn,my[qEV4yԃmڙE^<Ƶz5ovtVyONԗ[uTItFh,Y€_|$/;6 @J\I@ -1'm`A!0 sYV.nKf7EoZhT@ɯWHkuɷ]A١ٲn"$VnU DDSSyjd^x\!QB WG.\GJb"3:Jf|˧wż~&>#5b3꼍id7| uTPI}&flq/"㲋*_ܰbeZH+)@ őjMދy*A{[ǃiuՠX(%0;iOD [YwAZV>W(,/~|i2^$[  gLƬ3A^NOAm\5Fd^uڭӽXiG|>. 4Ybfc+deH4~JM[9C{G 2.N.&I>1HM>!&Y>q9c?Ĉӑj׮/0Omk#%E @80ݺs====G;KNWcmY.i" 9.~xUZgIqfrCoclQuItAo@ԌʒVc::$jFhiXo"?^@"@ δxgAS;E@f8^W-F ㆽ?Ӧ-<1ϫ6LXmxZ=8a65I>_0R(0@{>]OcUj(1ZͪQ6rAϑsC3eW'画H؍wgZ]b C*NƤ+kv8QZmk^ph@,95U =B40s<^2]^s5TU}폲/V15-n E+J.}'M*Nɇz?aD"Q ێ[x٭{]<1WL[_ NZ%)tId X o|,ss$n{o}bb t h@ Bذ[Wт,Ej>Ë |^+ -;0HذS]9w/C9qšO[: ivL,*#+Cɚԫ]GŔ\zʈaA ԕUX"'lcn+Y"ٳ=1 n {.XǏ{Fӻ_!YPFdwZwD9$f}ձ;fGYMq^7ҫӋ#>!IË{«3oz{:dy^]u}K7WyOe_ŏob'Qڦ:+'o6Żlr'ke!0[[z÷l!YK%~~|wRH{|fWA3Gg tKZq! R*Dv~m@ 2KRr5zǁ rNmp9@7q;kQUcg>[V"N+6N>:xM:78e=uX'ñEU޻}nj-a)H@ Ѽ| ZigW\INp.2Go/}9]An۳MYPyљщ]nVS._Qބ%%S`?Ҁ+/+S=Yq/~shb,}TFRL{٩7Few V9+5/' WA(ib(~tĢқ DHJ`$R-6,Ǡ%uB\;#+}cW̪[@_ FF Wn{MtZgrhU~^^R[l7=ò<9aB.X6;^W֨VG ݩ6?7рJ. _ 22LJCώXq*i}92p>F531DwK6%bgF*ԘMv\/6?:!)jnNC%YOb,dwZa[g.IĎK v)2| >uyMtt[ u7oX|C*sڏi[^X6=pV'g:w9EDž}̴QsiG`|qD2q₵Zv)ᮕzmM#'[$VwEcӠ@<}E@0aBm= Aj.Sֻۗغnߚ5k"^F=[קD$P:`VDt #ʍ2 @Sq4FXAqEI:ɄFJ ?IlA˰Vo?wꦏ/,Z.#_X SX7~Ԙqɒ!+yoK@J/W<+ű]k-Ui޲d~S:B*皦ge| üi?XVGa5:6֭0 (s|]-CtrzT>\,Ib~oT )@ D30JrcF5;?s$Nkfҁ`4tY+u=W\)=0`DƬi1>e粹<ĂrN!^0=6XΌROJSh׈dAxؐT%?*QL"UJU 6$(RXMFF Dtsl*s 1ҩ;!] o˄f4zBJbKUFo@fZN؏Y/xr(:LbA _:!lyKؘ)C?"Վ,"` J~n~pjБTUoH+2@N//6l/܇]O7<|5U}U;¹oY,q?pbes9ͳ CR!@ Hi\)htw^]*)ɧI+cUҕTviANޠڡӠ73<>d݈ Ghϫ87u]0b[%oأ !L餈2;6t0?埶)/{ռs 'pŲh= L.7bNrDU H ;ij_;ߨjS9'W`&4"C׈Q1Gξ}9+LK[R_Ce7Fóe\`?1K<X¯HڜRIt d^6HBBnjNX<r>ȢR 6j)l`H)njZSLǴMK dDHJV-SkP-btzqiݸN>F<ܿ5cQ[?j+윬ϩ1I"2ju} g)ΰU6 odAILPdyC?̦$DgHƎN NиXH9HOw`jWgǴK۾iJ'W+գKnůJ@rA}p;=!e#^'X*9ѡ5n=+V]&3Ywqaɞ>Qd2˄b"EyGo5fεQ9Κn?v*ǯ: %J/[X}T!.*ai:sp/jދ/L_?[pnŘ}v kx#%ϻckkMɸ66ޥf W{x 9Fl#qinU$F@ yvޓ<m*DDv>>웱ڧ}t 1eߖQ#֖>C )5\5N/ omADhvanx֔wۛgwg0̙)oʑQYD0 iUS{uOQ6r)/vH }}-ع>~㸩[ږ fޣxJG7|Ԗi֦['yyxM hP`Tg<|[TyUYX9h Ŷ'ӓBUj`yED7?8RMqQ%-`Vsgb`b _DLĥ}3Wz2PRN8hCSQT"h8MTgاlfhfhYSn٥3e4-prsZIh\(E2vj9HnYq@o}3J sd7旸n=0!Tm&xwǭ6=0 wW^pax[8OUQ~]?rSqgB%=wlYmtbRYv;J"l/dKj9m3v "pqv>d{P'3nT`/pmԹ&:{Gm +&~ z;;FvnGj?nz\ToJ==a]"UX_\4pvG~ ӏjMIrֻ\ўoU_^үL(VhJ#&`ooo{&+Dv~m@  &>~ş#P^ZrQ0nor]}VEW^ 7,^^u#Gx :ߚ1FH/ZEq{+`SΟCw+ܒѧQMP&Fs3մaBfm[2 ;tb`bcvߺkwwڽv( (( 10]~?q=Ϗ]rֹw{t͋5itjk# (AVE#&mziߥ. QhozXԼT(НL jR)$0J ^ސ7؝crIrW i|ة2HU%q;3]Xuv]ŋK~|/S+FaXQ1L)fշxcNT֣ܘme"mصt@ET&d`L#r'd _{ΤRC9. N g`Ԭ|I\CW[-38GB];hD0ہ)L%R{1~Vimub }ws;ʎ<حM=ַ1KcøpG]&ٸv;a6M9um\;ߧu+Ѱ|\Jy{,\p-ŗ0ޥ'\{t4bаQ#ju3W)+7pqʾa.M<9yV0>jMCGscޱWA*EF] >C/zgF۶qG?=0ʝۣSˮGG7{STR:׭~Z͇ջM.Lo{.@M~um:\lߦ¹ܳ%]{oEt1d1?y}~mڇ ƟXШNzܙC{Cb5l+{3tʵ \I@ ~+̚lʥKrͧ\BљwQ3t^7ِ~^f $!Iqjބ~;~)yCiKz/&eFBĶ?;) ^k 0 2-53N$d;_5@>c^|>!ET _>$I4&D eΡ4N3^` sg@x\XNa>{V/w.A 'Qʄُl]a՗DSp P?/'t6:V! aOH&8v;AI29ArIn$hPɐ!&AOrI*!O]>駊ݚi ig&Ȉb~C H?1U"rQ⻠.2%e $Dgر)W N:1CYQIi6M$!9}Ǵ\AH1˥|K9V,R}oFT)2U[)lW.TGJ1,+h7)j`ݏls7ҢVQ[2)HMޛ7k5gg^YqiNR0{CGvFf}@="k'we$I:=XQzCB^>7"T [ZC/8hbiYlP ?Dib8rUf1 Q9u뗤TvLZ}{RKR%?"B7^سWFvsoKfaPmk:e_B2gnas+,6t{ow͜2b9~Ŷ=,*cM%WB ?*^R)WJ@˨Lg,nн +&/e#,قW|.9wUYSoZAKT@ ֥}ֽ> ꎟκ7䦋[}p~8֗ FpP_yn% sĆ^Ǐ_n co~vGKWwySڮ>Σk}"_IXjTsOC*~;>ǖLגy& ‡]-*`⯓=}J jZy.twiYja rKGvhb@ʥ+zrudfN[_ᐋHS%7ĖyG#Oi7{;/oYְ X럒",,uU֝ty lvXY֥YEOo;_ԮniK͈U4]Ƭ/yʡ*(q:L-YX}M{ZO1Xa8oa^~{lc9p9SR /F_T{ ^Rm~;'W*8`uw'?{AtW۾bCżI~b/EXoK R?)8k? GVx _=ũK7ZS^&O ??Mϲ*Byڝ9CV-)7Ӱ?s:PÇz>q@¿hA t7mV N 89ʄ%mr+ |)ðmS`ӖkLG[˺O^VFnuV{$51c۫۾[eܗn`>jlL k-Z 9yk6rku=y/2ڋ #S]m5rȥ׏ͼY}Nd@e/$族Gn>=RM ﶿ x~g,ݚXm 3 l:~{S%Iʶj̽mPu-$*Rj6@ _kbjoHfs[a[Qvn>y^xTB sjjС^})6q }B_)yVM[{L|L'{JkFq';vzr[>/fTk/qeN< ϳ*$*Q,^lѕY'B: g+)ed!ecokς?d)pk5N}c{d̛ľM  c66=[7\}M[_{F[Ұb (9s-,sg`ؾUU[Vrx`ă"25pիom]7o? dJkP.&9U u>MM-m8wCl?ay ;CFNBcm:Bolj^!]ڌxj׿WC&*[2ƀjgIO߿~PYζ k_jo:i_=}]DTfPE173sҸu9v?&w<1C,pPT&?g޿'3xuݣ}YGy>&%=S ,= :ݚitɼ>?&eDE%eMi(CBH386h`\z5q e[Y~vEToodCRsU_f`p)֯_i&Q_}g:>Cp%d(r%VjM3m6E-pAJ@G Ÿw`ڴɽzy" j.wGs&vu~$Rdh~YJT3gg*TwA5? )~ ןUWwV>rqWU{3ۉE98˲!Yr9-_ EnFlö+4ˢFcݦ #Gh62=@ @tw̐J9<z,j5w$/~CBo?J"QUZ>dʛOw (/?.FZ@G @ ^4kns *VJk]IE{;Z\UsX#@~?QWB ]@ 1mֆkY'Nzh @ U bD 2C~ŋ@ @ @ DՃ"@ @ +%qoֹn%WjwY6KvG @ @ @ ~Gjޚ#s34`ى,ΐ!4IS)M[ F*)Ef.$ϝC~pʒbo1-íN%d\$}j^$~bC֪\b5z Jt$Y|4`:o QOeQ\ԧwͲe@ @ SjP׎j0-y^ [,S>*5m'֕~}@*D٤I jnTS" *s$m™aH"Ui\&`i%Fj FPn;3!S @ @ 4P2sػT:4ȩ;2'L 7 yh{0Æ>P -! rIC>ZOD-kPT#;Mbturh{h%@)Qm%+w{y@ KUH ':iR1k&@'2"~7V ۚӺo*'1(d*pQfgL7Tm?ש,|zXL"@ @ 4+g g^Ǩ"G1]ӆeM 䗏Eh=K]qZL-Zc]ZN8ue]eTY"!%&P"x1ť%}pW#42} g$$wug]cM!Tݺ WT6Ʌ6p$zj&5Y'¡u`N G rx˘yO?xx&R7´`Vo|K2;dPliz24eTڴp\6ϗm>.ːk7Q #y VƉÒJ9sh@2T Z:6NeNSJVjٶꭼ=RU`<\ÿeUz?ƜעikM8䄹*-ˍUPΞ5i(?A4i'o. OKiց96Ԉ.H޴6TppRy4XJN k"e0 @ @ 4f E)Rc"%Qyi6nL/> Ϥ}OfV}84a.(MQqxuQ2LSD^^̂ܽ*APDGIgH Ks6emɋP\#MBplIwm@Fka)=>tU[# ȶz'\]M=r ǜ02G Mh)z 8Rٴ N*.*_ -~* džD GoHpi鲖m־;٠/F3_Glc Do;4t#˨86Rd sd-OGڨ$ wf_?d5ɻ#Cߺ"}=˸m}eykD~Cɪ˿|2s9*B~y^Z~֥~ ֹr6iεM;|/Y4yn6~U^JTq-H3y, d^L.%QJt,.9h(qiJ IDATjW ˔,cԵE/urץ$}DnMnI_~XZuoɏ?E[0 UdV+6$w/%Dޟ= ["MzpBqTr՚rM\ IbB]sG{}USOo~Qe#rK6r»dYElJrm8hܾ Y{J~x֒jEkim0(bqTE22ˊ勖Es7@k z Ɏ=ZgFfGҞYffQc0/ފջl4P`K,w{*ө/i_6SX3o *Jt(1sʦR"dPIR)+VJꝦAIIؗQJ=L=֤9 5PZS۳*Β*]mK$Wo*@%WWRMxؔB+ h&By.=K4ñFIydyoZNԑ`~mPKLx{xk* ݫ9Q%À!/0{BrhBExj`Wb,TWM$n].+T:*| M҄;QXzϳu?!vyɌ 5Wd$zŏ,^}Gblߥ|%ar7I22SԎ28@WQőȗFm'4.ETsSC.җG ?,=gVj(lF]C}+}QB8n+Vo~_m17n$i{ }4ketUƥԮ;7d8$@ $p_Y{ $#aT)" Wa6 0 /qOAMR7_h aд̳a//glIrߴҝ#Qj[rC$zcO4Bjii>WĪGL%a]˕H]E&- WЄ.,˞.,*3+˦E  ,3/y?)}~<@yˑ }r^m,T//GA4T4 a|ugy'|-zRJM3n ܩ*Qz-y]=4UUZx @A Q-dc8r*/;DeQ|y|VFGm7הD($#hʼsl)cfV) r vKIeğvMz"[ڴzQ-Pn7d"s {U!x9)48G%nT|](cجIԥ{$h_=ov5X5[U[ X*Pv5KN@H"9߫wDIGn߿^c1BvjD}}ŋFSﺓV|YbjЪc~N)X puU!' 5dW35SB3+H"P|RI94I6ey̹sh.V)wIN\ec;mɯJx͍Mu0Tk+rvӢ͇_O3vSJµrefF=vGQ>& 5o?j?hZX3#\('Rgg q)| íg_v#Yg'g27ڮ٨FEFʛvaToYְġ IrGlƆ>]w#449-Φh)qv+AޯSt6~g~J-Of eZZjPv8s}5"cSeҼ[sGX= eν>KΒکA!#lTݲ3'Gw—1dnE)Ǻ;#˸׷j6H}J؛$9ۨm 'U%y1nǥDtu&53,5*֓7޾ɕɳU.Jv\\ymIq]Y&^ٵ3LQ,/ғwG)x13';O(1yf.-<;[k^#G1|342פu "%p2*Ky~U%$tE IUQKO͌ |٫Aђ}E^Bߣ y"):6o׳avno-O~8s²qrѷZst9{7Gh1Ws;G~`5֑G+޴o[HYA6JOelҽ/=5kFYZagĊ$F6?ЮTqRl9laA*iԁe_V3LL1H%SI0JD4 úP)zu&3x[M)QZ'XX|%$[𰪴J"K䳐VnZN ^ DZhY6gS>s8P5EWǑvaJV#J_T25t,u*%nu:P9 w#.toi]igJqy^Ƞfn+;OZ<`*wu+.i\ QAS]Xug8$PkKݦH*78LyCÏaψ >2a~^]yW &>Qsq,$mҮ6\Iuk$I8ҐSVkx:@:^pWߜ.S͓u}Caպ!MΉ lej|V+V5w6AupOqa}cI35{MQ`4ҴB3RAs.Zܺ(=̦I޹RKV:hNvml19?;@mkGVbkϢJW3>y6&E] W43!HiAoKttsf}3l dᗭt^н9G.> {TpպIr VS:drmsGi1aѓk ɏl?h*T 歹:ha=m Ͻ<-\C(蓘v?cצ*ox_yg^Y[7R.4kS|="N/=)|cVC'4Ƿsj6m#ys 'HVGm#z|Dۯ g8$J߬A4539?1+% 7Թ#[s$z͖yjkkMU^.v),xljdYzʀ#:?~NwD@f"/;;Q٦[;7nXܔŠ1!o<xsuE!-Gb5<Y1RKE+@pd^{s_nѳK\$'آ: X殃3ח秇z[%_V1 zX#Dg/#޻w=uYBv<5 AT`֤"է+Bٰ-YuY ɖ{*61XvbW&<,蘯Iy{cW!#E Kr{k0 F?)~ЧS0GKoؔi IΟh_܎ JdmzuT\tȫle}Ӫwr=|cΠb NUeVeej!ZFVg (3{d`eVHFs|[+ hEI(S;MG][Pѳ$i]Au ۴r%Q}8rR̲{ɝ;E;wrin@hCz-R0z^֘Jx?_Uz2>?v7tKC:51LYa AĮ G6tuæQFVM[wYҵqN.lj©ۄSw?^oh6No`Cqzs$+w&&^_?ԍF;,okg1o:ךRdg-5|)/%V84ԎWڴ{̈́Kg[[ӂGWʒ.fIt%pNo6r}gv-TSzƭ:Ą$REh[yF>}/S1קwgƩtM-i֓$1̯ҧFa09۞ә$  sTJ8*)ҥ4|kVyc;vgiĦߩǺZlTJɍ@]6bk!;Y izqX8oԧG-.z 濸%ଓwmqCSSקUBգǑY8Amc:52|RwS&!r8rzEfut6p>tϺ$I^\VøS57`SlK@f?30 Wѯm*TTWoz p%~'ˑCð XHwGjb)2I)mјjv|!AM=N#UlAR^ gt|x 7g f:m'O_H3eqoFLѼ.ʢuPΜ+psPxv1fݝmw)?1X<-EbOJ.lx(֩NFuKNCcEQJy lJeQ>IpuiʈXg+H8! {H@ bs(+GC/͙xeSX{^IeQ }\bqmv58_6>|yhz7+EŞY">3qws5l@ /e%7?4i.kS:Ģ~R,yZCjCXzg:IU4?n5|6* Ϗ|8REH/7c,En9|8 3x<5^j{ 1j :ŒB ALlkQxtzSWzȔgru2qzCT#Ɂi`Ӽc Uip2⅜aVJ= lq63e1axYrҒWLNܒ}z3ꁍr=቎})*ILҿ3pf;qIU`6;7u3P+{-٫wʐ%Kb]17C6ũeG8܂5՘U8!%ZzHy4vqUx`HZz6U㈲v 2NBu*7j{ .@Ml3>U>fzƮg?wSRNRyG{f"+˦Hm_psGER&{B D::B0`f>S$I̒.BKɆO~m5mڸAcGmf˩^Io3!~_衢yРϢv67QmSivO!~-W*RD9@l*UMmh8{5F@ۿi^xp9lDđsoxlaiִ^mm42tN7<,=[Lr@&օa鮧YW|Hw;P ƫo^{d5xZM'C7͐17Z2u47gndť}$$ZQR"_:[( οԆ痶9Ke>Y잰m3077Uߥ?f6 t)0o:@)(׍RV{j3jB Rd\ EGj7@n>H Yi=kUOԆQ nڄOoV{zhE>Ez5]8-X/^)ZF}Gs~:m+gb ?dm*ۂ=2x*wTeP'M?T@߁6qmx;E/OF)&?~ܑqrCF, cWv<ᢔ!}۴ @mz @-=D*|cZe#i,_8/^zK󶼋mK`VAWԞ=tm'+ѦߕT{iorhΒ,?1`Ws$8IgPg=uaˈW/ݺtz%KGc[Pɇp}' 'Zpj6%kk w?x3(L5j{eccğJ Pr:_. (Sojʱo$9M(J<+\&WT_.;#gr{7/ᚧ8Ξ4Ϡf 4uE嗊a*w޿{61-[/9g??J5(ɫ U N7^]rN&+h6-_c/cdbxi}rk\J4R_ԞIu 1i:<6NgJEu⻘SR>Gļ {{=9( _?g)T4,t?BLsRWSB)ڔ !V) pB^?0@C0 6s,mA8XG /qe8clJ"c3Ӑ*Bw45g0ұe@I[Kow2_߮ov}Hѹ]'.A~j데Qw4d fyHNB:S"E/]գkהVzNT{AD5+-gՇ񙩏6(.e8~ι鯖^j%98R/[BGzC=;& E֨eTװ.'uOk>CϽm$سSږ NFݺWOdpWϱ^=R=Hȡ}b@^r@R!0ƺBuE>D6Y~@?m* *O*A~H!l.^gWI#_ ?;7;7R<N\^x 7_k 3][+f50kPN tcɟp~$iuJ^~cZ0-/K- .2S$s+0@(w O_AtaҙywH(yЭXxpZb~%$r({ pl̟Ɏ|D >8R/Ȧ%! :2B8kWIJdZQrQ;/ٰW^7?e}*E$Q0,(sQ$I,((.NdkR)݈o]/(4̓_>sCGLEv̲E*Do<;ίF24 S?1.C*Ey:b|0Jm!H<69_ 3Ҝ5?I3$%*:XMWҾK]¦zXԼT(НL jR)$0Jeޛ!o oӱ;ܯ@ʗތ HտY`a +\3>./^X}`ԴZ1 ÊaJq u6 ӁsZVn#L.iî+(*w2 ~#d*rJ20oɠ`*Y^3v rS?Y5+_|K *NQ?Pz3Q0L%$v` El^nz(SЯF'+|b}u =ð NgtB) ??ٓPA-z=OgP"aH?pR@f;r钜ƭ{)Wytox] Mw6kB)IsRn7η_Jqڒ-^e BNyJڄz{ è +drS鑄lG֝>)Nc YIs E4P/IdL[gKӨӣK3єK[zfiwy{j4Rd]y1GZP^va>%m{%'Ty)YWCxr)H 3pkۛ~{" /k7T<6Y=|uƵ{6`RaC19J9i}ZOoe+?y-RsJTssEp(rrQNoaJq۾U+Sxwwb%)B^ _rPwk/#Q$v l q_L:tLiE3qlJ2v'|9Af;tz9+ ? 3 <.O,' e~=;V ˓(eGg 0ˎ)8ӄI( ȗ:ma?TYI+~Jǰ]To]ᝠ\ U9S p46Id ǧ~ |$y'ۮmSn4ܴ3wSdO1Cٻ︚?ݷwHQ2*T"#{~dD%*GEI((QJy᧐{{g~=sd=>8e>9s2ָG< 8)-+ XG+B2]CD4[>6Tqt}Y||t@l) nJ(%ǎ?~=0-ssR.&Z$b(F.?EH' jtD܊.mmfg8ZԩnyljUʹpÅ[~}&4Zå),Zp'[qij7?sfwW3XOEuU] â~{7nmtdP[֞RLuShfYN|Vj#S:cQGRIg}&|.4TUVJ"nwJy%j3wEm eN`s=׫BajmYZ6v6U߽iuLDѩ6*2bdUFQzgW[T!{žؼhL'EI "3e垸}&TTyk 5Ehe͉˷G=9 QOQAJ"~Xd0(qu7% :)"fffvc$IDO\gYgy)&L*)m]:M6E$FJPB!AP|-MD߻mA$d$%-;z}kZ7y$3 %&D"KH5qVf#>cIg5 f)5ka.R"42ITLW]yXȷ]-RzwY>ww Q:&A{j6 ltaPU9q ?qjfU4]veFr^[oL\t0cRҽO:yq5'NNClwАH$woo 0}`?CSSZ'?b''M"*BEZ>K1H)!d_ F7$ "B$2]TZCxu#G/諯#%ɣt#M{v!H4YkG)|ElÖ͙USAPzX,X2+jq>cYI/NFZx3V!B!Ԟzzŋbם:#_wxxenlI޸_w')2esLJaKvB3iNsixxdJH!\gv^=ixNZu3Apvqž[=5u3M}w/B!B!~oVOISHgx^홑Ͼom\c8LB=]\ci^_ڣm?)׸O!B!B!~o4z'~ߺR_ "y{\ ̕H»!5q2r#!B!홺Eݾ)2sR9KZ!P{Dblمŀ~EB!B!B!"B!B!~]\P}&Sql8MöPs B!B!B!H!B!B!B!B")D!B!B!BO"B!B!~])ޮXmQv> dV?pGF9!B!B!Bp!B!B!B?>B!B??,$ wc|W\]_+qȍDm8=U䳷XIIk}ɔQEն-vralj4,]予ã)M?0Χ%] AC=6kob y!|CHY6$`nv}`F["U -ݛŠ+Gu7Uر/%uㆹrBB!B_=iŐ>4 K_ ewY H?=Rp{ÄE+h1Tqe!';=I׬UX1a/썹r,,7uթXծwt&.N?t%'z'u)޿!cn[Y^Yz =JK]))D!B!?|͖{!z,fǎy=SU(`M,@ϼi<^Ǹ}>Qh2Q+ ? $yV{wą VkF'2 6[ZtqHq &BS/=?}QUeˮ/=Җ+ 5N' B!B!~(o!}uėof첝T >f7)Wpgmnzn +d)Uݕb²fc _z$quu l^Koeoʤxq6?\ګ2LRmi~ֱ6~L!BïL"Ӕȶ<!B!Ps H Gܬs;'HTsIzQb' dU*~DFw`ӿYRmܸ΢B+,8z#=?;XV5~ciO}sE"7Թq2 ҊݍL_~tzӣJ9o˸]En1";7`:ЮӠ)T;c(Fmmb w.y IDAT7 ʁNN5e?;Kң3uJ=<3Yޱa)2GB: 3>J2ðكK~t5"!>(: `oڡ65;dguixm1P%I2VYeqOH̽Ԥ !*EØRjPWwȺL#v^'ڗ\vz'"qJ|Ez!0r_J9ikO^gWDDt4ե3ABk_H}nZa kǨZ&npwëNߎM+\,4)=ݬ'Niݽ~T#MsOw',ő6q;e}ɔܴ– 8q-u"lb<|CR2JhL)uU&nkۏ}|D'VUMQ۶y]ꇙ6;ûtJ)L i.=6)ԋԆgyMەjM CkܸЀЧiYMB{_kAR5 pRCS*tQEu- `־ԽȀG)y$Ѱ6\߱5j`\zO6~OǾQl;}8U}Wd&huG B!Bj7zTo gi;q"\\pp{Q>w0,|h;,[$ ,啿>Kc 'cyN:R(PL+ě˔@[ +Jj nBGbe;ҋiJu+O?\](m=5(m!}-v ngm*GOb (|({ywͱU;뜧_+Gm fUMcĊ|쵠U6 Nϰ[_]6K7ʊ QeNaO&&n'ӹUyIN0zb={_HqݠWwBe=V =3k_Gƾ}}o̳:[TeEQ뢢 I`ArR8i6G"UQZt?0FfWג/c_D\ĵl)`M~%yttAs%;Nwx򱶂[l<>l璭דCbmGid0m9a&R}LTۉvqqeiialqnEjcDŽe>9̨QQ«_d=:*P0oqi?yV^],/JONO7_8}vq>;r㕲2KYianooI@kG>ޥzⴖۃ!6w5a\ *zyv)=_OO{Zؓڷs᪪i( =a1꣣"$jN"s2[^],ea{N[1\wi9FY#U J/sIPmjy`Ro-IJbB܆}cܱ;(RRUm~2zݿwкJ P6 '澻[V`4&&&3zX}t e%vIɋ'CأfkZσK4%+7ɋ7.t&V8/$^BV}!={}Z;(42fBoG AA}% r8‰{ҫkc\Z5[k?y48Y_xLy|,dv,^Ov{sZ;Ⱥdr1ɪ' q|ܲg*I*s^AC=>M+{%@i={˲eh)1,~\/0p=`O\B lǙReBo\ {ly]^-[?MO)(<ˆ%{Miu*V)~ED^^WUEy&)/NO 95],.`<~ pJbf+S6T->PzbϩwR]K߉n>zp?cEi1> ճĚ8O_/ Zk(Jr_0&Qnkgѥ]X,c2KH^RLHȫv=CN(,kg$#*Mbsol!%oUq>7/z/vR"tj| ۸rO&i6fA1`!rb4l{iʴyl;*t1]dEn66gXN+:qDW%Q*gbP(6I𓊝Vc&SVd SM*ɿSJu^|fQ N0ַ=1H(zߊkuvQ V>/^ 8KPaD2j$ B~di]/O+1;)R)=pČI4v2vL陌% ܒhVA`Rge ,"2p 1_U'*t3ç0,7XARD)j:B\;]DftPu)&ULT.eLna!L3CSSB!B?:u0\OWvM#7CVp #&vMG*:9WOK3Z+X dpc?xnm(^yf'cM0j;S e)e?& T1-]Aavm(ߦ窺KG-&>OJ*y7 +"m-Y-DUQ$4@rqe$J^=5&=>u=KSr;O<7W,,]Xo A [ʁ_rI5csff.aI{©ђ p@h5-k族aKBN}Qf^~-(n%O_yl߿|iZf' yKzA^h-wRFSXeO@jzy'4x$eN_[=ina>JA3~H@/'L+T.E琉)L/@EoVj)tx^ ЫƪpQڛJ^@OԘѯ>ffUT-n_ʮ ҐQ7nì=^ a*D!YЫ?N >T7+j"JCe ?ALT:bbȇ"@-/6KTi~S8RB!B*F,G s@9KyPXts_׆[ysɱ[){uSQfR9Y2i)}vP&nw>_s;W\;CSqS864yu#|Ԇhe'ʲԺAPoGnqu!Ob\Z!hgA*MY(b7"(7fY \A0=abkm.$& VIzvmt%LDǨ ޕ@ꣳڏk* 89!e; S|p#3`xHG6U1'.R7u.լM{t2MB x,9=1,oZteːt^["Qx.naʒ@ڨB̈́8v6Y=>qvn)jtQTVl0$6LaZ EYMָٵhArq|veW9w^]MfJ< Y%EEE] %bU] ƛ7u^YNNTS":2(F V KRM咨$2&lmG B!B!^ fov usH4%χ)+}2&+q-#bN/9&7y'2K)&& fM3Χ2qեV:NX_>呷kgޝp|O,QW19*.t;`V^#S1eiXYY8_#A r|∓)y~yF3ůYa[\ʉϷ&Gfz_ -oJ))K:]aΒiޢ[sdFQCJJ& }"qw|x!+g1WZeJHSjG"t 4T-K&R4m-ȒNsN]|ևW)B<>xym6ȚR;巽jVݹ* ۳kgiq2n^)E zYvco޿&qSW[H}Cu_غ"\6D [Unm)'iNsrNq!B!)O3sBr`VÂ`VUrfrGwV# jS'o)z]0W7_iW@ۨFǻLՀ#oYq~͌`W\}Vt9x~k;oDz>?K)mRL@1_eTk{$p;fG&aVV}%hH&[<-!20wX/Xv;O1^COBP+Җ6 U<:t@ ~"᫫kr K.&3|'C {8=:J%(厐WY(NGP@ߔM\G^F~,u0a =^s̕CmtA2 >cԾ/MQ`2Ϫ_g>~fAo9nrݪJs>O\W[4~Y/M.hEg(1 , /Y,LrkiYUbwh_(w;bP$@!B!@;}hKHxswIRHays`ҋ4Ċ*EvFa~}f,Æcemb6щJ\: TOC+Vᇇ "-(T E #&(a\%_.A"m\ V,{u(K Pq2a6iTQ2T*d@I J7 4,ڢ~3O䶬]gc@gFHt A¶N.]YJ8SmSM#DVMih1{zy0(PYR40A%( ?2_ȖN"M[A^ɷLQu, 4aOs@Wq 6ʠYoR(C">#4F\WDH'iߙG=nA4n)B!B?B}=h;}gX_{p5i]w{]iV67B^V sk掲6䙁7$:\ EO@'GiRAP*X-GPd4$ʽ%Mձfw|Jn^3h<̙#^22Uvį6AtnUF3:ϼ^qċ0A7O?[T^?di8Wgc(QK%dԗwg$AnvPȋYyQB-Y-ie9/Z=/ņFYh Ef(7r%1vB |>7!.vGX+i*gCveVB> <2ߋ6É 9I MAnsDeY}v#wY{?MR+o_6'(x1e8qOB \Pu̙Tn)C3ݽ.Tqt=k,@P}E2YT-j"q؎7,TT xŹ"CܲiͅFߟ^"64?kְ\ MYx>1,n+sm6iP*>D|aeO*vn[=IPXsn!%ENĉr%Ɯ?pB^QIvDnYN,;2*3zJbL._}xtZ}ऴJP((cet k]ʳnڜRM{H҅g6+э,jcк)Ţ*hd;bIx:vrkݯGM/0BE@ :mGՇ_gY>;.Ѩ0xuM B!uWjpu~MUt3ʨ"io6w<x6x[噯yhx2ӫr-}I7$d1@;+űUCY}sۧ[Һ'ݙwEرFK`Su) MwPr&.ARMW}~y)-:a㚪UOM|Rr̬=fPM{ M괢K\:"o½ELUʧi*Q[ճG$ƞշV^kurkk,l<1C&ҴWr2r3]=~TuPBp͹|N.S?9{Ǿ}(Iѵ3/հ0 IDATKh[Yk<u[4~ޫZUr.p_ s6VDpw Vn=\{ 'V}uql͏i3768kUd?VSEQGU°=&_89s}x 7esY3Tvǖgk6S]M4g˓[OV9/J^yfW-jg|FwmJ \(!Lqo8YiY]O8QO&MA3{n~-1\Hb5!W>2ԯa G5xUܤĝŬ'w\iR+sj3gCXYQD58%5Q 8k39ouDL<shwe{FTQ4m c!kgH`{ΪK g uļV%yDč9/bÎL9k B!B5 AYH)ZM_/Ӿtiqwmշ.nޑ^lΣcژ`TI Q%;ҜpDJN:3sO<vTYD\FuS+Q+pL?lH܇R`48AYq&"TS12*a=Ƌ-Žb_l^4$DQՙrO\>z <"4ۣC٨{' I%5=9lY l`zuS(Lm4B1u5[R9촳* } ݔ$M&͒&~b=SL:K1d*]UIhgl/)"i4R* GF{-\1H$LeGZbMk;qdf$äHdq F=w9.j"lĻg6&|11Ef-ECJF&꡿k2 _ UBo.'!!J'D:hYsTF-8*'N2g9n\mlNQM˞ZbL*C\I'/b3imtD3u 1,c~jtPUbGLտ䄛UDE(H#¢wwi1 1%仛k&p!ZTDTDJkn~s;}uD2y.cd|in2"dW63kH#MB{ز9j0h*CSKW-.'r;+59Irsŕ007ϩSbԨQ/8xfߊo{a߭Ӑ:Va e@!B!Szzŋbם:#_wxxenlI޿逌_Ȕ֎+)oW,?4fG$4{@Lb75[g4՟]7;d g'칿5Nm\lX73ۆ{_9&J&=\=9+OJ+tҩ"4|aSV60;QhrÁ#7> !B!Y>%M!yygF?wVQʶ\._Rsѱ>x!B/vuvpuv8꟎z}>h%\O_չ:豻AX״ AQ};o:|1Wq߿tЪэOe1rRSfL1,Kܶ/l!B!&w]ܗg}u$ Qr=62WBzw|"NNB!qrٲkkJnzϷW1-װ=DBA~3b*g :eO1VkC>V̼pvLvvȵpB!B!d!tȌI߽-GSBe.,6"݌W:bmEהF}szS;L]춹v,qn`D}|bBB!B!B!Of-J*ݴ7z7n#6#՜N},YYPvf-K%B!B!hNsB@Nn4 BR);Y&tݤ"gӁhP6lt>iٳQNW B!B!B! {z! \޲tCԬԐ&N\Ɠ;?{4瑫4dHB!B!B!Z'jH@bʌ՛4ff; # >0rJ -HB!B!B!Z'v]c ~V}PTǑ>,#򠹑W11|.յV3B!B!BoW,?綨 i;2vR##Ӑ~xcݙxyaBE79L٘X!B!B!B~B,q%@㙇_mln؅!d},$K.s;X2h;gح(Mx"I;`-"B!B!B!Z )O .aq[o'ݰ~WrfyglKB`-"B!j;?,$ wc|W\]_+qȍDٶ|'JҰ4 vqޒ"FZh4P;ڗt~G*  `94|䅜 ~#enېٹr{WnYǎT>k'#wo +PVQpcǾڗf׍b˭#V]\( *}.Mۚݧǧ9嬜w^\86~Pa'-^VVŽ8m:*@(auB!B"`z|gӊ!}ti$AJ{`_}TzWY9i9ŏGl70aQʩ6*r *U\Fd$o#3:_qmYhf['WGAR6~,D[ .)NReTZMA &BB/!j':;\OdQB!Bv#xw'KhH#G^:u)hu.) 6_=]XѸ¬.?}p-FFW^Pp9=y l5A3T:RQc) ¶z=d a) 3#D^ AWbjqWsL>؍we➤kV*M,_[|9TjW;SSd gv{NxŔX_ĐsbT7í,,?%.딄!B!j7S5[{geйփ"_er+J^?n-YɊe2?{^Q.X<|y*yq{}VedFVjec@)LI"A׭P AYֆQm w8")fF]w\8RB-Ŕ0xﵹK!38Ew_z@5rٲK% Bcnx8!B!j?{_}Tw" U)GyEG?\Be9ʒM*  rﰹ$h+?(Ȫ=dxF11?? 񎫻]ٴ.PIoevil6>]YշRoKޖv}B!WL`i dkq!B!zn}Aq)h6un~Id`2cㆩ+KvtiZ]GXd?g<헛Ŕ%O%royHEח0vnӷL Q爠1Y쬊,E9ooT?7hq;4K3cOHaꍥ9>M}Ȋ8Sn%O,`J+v70}:=%N*-vt܄ NHCNnԾrsP!=;jIdyp NXr"th^yai9,AA׺MW)3>J2ðكK~t5"!>(: `oZ5;dguixm1P%I2V\(*s}BbŦ&ef Q. ?Ri= |M(oտ25ץEfy> ׾ӻ,8IьwVpw/ !nַjTRI]{*=&"9vШ.  })"ii-jPa)8};61rCF{r͗W_ӤJjw8muQ4< x|rY G^Cg 쌾;,ԐQuŲ6Vؒ@vԽ'ENPĺ ^~O,vvQgoHJRFI).jcD^ {_tϛ脂J)j5ϠK0fqx7Ζ(M~>)7Vh5=j~\nG>ypҦ4O, ^YΫs J˩ qUMޖƺ*kQjpPpBVI9)!-إGFz"5zqٸ8Oz9]iRVIahmt\4-+Ihvkm3Hf9nQjHPp|rjQY.eZ_CuwڗT>W(S6T66ҦQ;6fW}=Ki9X9" mZv*W T3$NH!B!B!T&[ AmY x>Mx8NQĸ^C|k/ u%s^""@ܓEZyr|D,;  y;?$ 52e(ЖrsÊ9ÂlPl"XYl{zmm~J58h׃dwty Jf[DH_}cuKr>/77>pk-Y?Ef`2~Ն0yU>n%) f&yU/+2z=s)C3ucd z'Ұ'aF7[\Pv*ļ]R\Z=D1f /nkb z6&{ng׾,-)}g't e)^~uC**z]T:!,2H[ '-H4JxW#HZRe7mZ>읱ɯ9.7:hxO>V75636""~롕 ۹ds=&:}ۑ}(-L[NةI+/pb;';vif\Y4mZl<ۻn[s{h1aO3jgj* nߣS úouxk糓=/)7^)+.Vv]٬w8ڽfJ ݟW^.*-!&=[{Ļx $%6tKI3 gpGhPp%[UnmG͹GH3Qju#!B!PՍvVzS\ܾ"k .0p]xlO-xwf!{v-wЮ~,+}sLkBIVBBm/(:8z`1N?xLYk >΃M6g1~]˲v(Pqsdb[u+ZdEm9? vbH+۠8,?߉ o8'`F]1AoX6=Fm) 6\ڽJ_],G OK]a8͓1zᴛZǷ3z.8o\(m~%9R(6<0$%1!nþB])6BKg|g;wXIM zW@PAP{g;} {.{GEDiRIo^ZA@ܑf;3fgˊ40FLXj- O0Ӭգ052s[;-u:F/:OU+w^*us4~YJN߫re%ijoG&]޽c؁ÞWn(ܰ^Hjeov.&j|7̽pNKm*\L^{4ߩn˜6=r5c~;u#3WS5|T[Sw||FlpSvIA7Oz|y~ͽ wT%ጠ (w*Ld,fm\8T}ٞ[e&sbQuuAN+ SwbW`_MiQLHRntBͫaA{8wo{XeG/z9AӄTQU&X7DRѱjekHON%x o~x2JY$uG0 7!uL',?|zbϩsOh/]ִS]4R~QRtHbeO(zFo.* zlTVuu/Xs UIO{Z3%zͷywuϽD?7꓊w w+wJMՏRDg94:}@ @ 7 bf7ؚh( ;)IRv!WJ#Tu{_0*gAPt=á ihߵCWoNl&Mj01ѯDgc[K}rlYDa'&?oD] /4l &ah?]{ݘJTWxuDIMd ;j2lncMyR!"fßգ%!B=Gs2n}m" 죧J dMWg9HdmӎkΆNgHE.|DnPPJeZܚף Dxjk O^'wsAdggNg#5V1ΦJYsd2#z]{lgB!bzO7-Tp\z]*8m眡,MUהk\q\}(1d݊LK(jNnFOHY8}|Nq] hDFhgb3{Т8׽ȔV>s5k T5g'88s'Fn+;t`QHT06TTRf FlmB``Y8\VVmthnE&bd۠k?Tw0ep/#m5@ej۸ nbNp[U&@D F.cRp)atQy+O$%[W]@9M`D 4F4tURnNj%HR΍W6w[hO!@ @ OӑkfԶЖ#_= p9dΨZEQgk ak{m̛/ s?e mZԞBާR RATśgCIxo_Gyq}ΝnLn 4tNcޛ$nFY: U IDATSD{:"6JdUo n[֏'TIMnWfV*fl͋-n24y�{庹Fkw3ʫQ`e.^}[7Xvz@,a> Č7܏\L/Ͽ{_SvaAJYշQoȭk=kn+w!`o]JwBxk^"}:]'&(,I;\e!i u˼&1ZQ/ `[~m*$eP3f;ބVd$7I>}|ȠJDJKOxjdۈOٹ\P*֤_  *Kِ߯M܌HRE7ɧp8<Xd~_-X1D&Y3$(˭( )K5l~ϣS)D @ $t{Ը/΢G _@9wyWIW̋i֜.ǟn6jֱHϩN&fU)U"~iRˣ:idJeMR; 2qkswkrSAaŽwhBg䔉&L kDmŠ}F" :)TMŏB٧ݪ&saŸڥ*5Fݔ,ѵn|JVXQ zj\lINPsN? 7d@} 7cTExPDyU9#3 s#&6GN>)8v/&v=OI)5;+NS5;<J֍ 5c&qstkɷF캣պEo߬իC.N@zHU6MF5Lfp2\(:vT7AeS䧇w=S23l@̟@ֲR0Ahz5/ofW/ aZc|H5"V"@Br dT^Γ4u"@ @`k?ൽeZ';qi5Ew= |׮^}+j p ]ͺwL4O$_ -Ek* fnƃ2F ^QtM,ޯH)&SO<`n~|x>}ZNd{c/ԾH`hGB}j*2%R7B e0GA 3-<蔐/O]}m~Bb'X+(x(:#2\oFCUH f!kZlǏ9Y) ^=mmYߡdMS+In;rPj>mmL(R@ @ ˞B.Y0QMr⫱*wҾ\w8~cɫf~<ΉeCˉz.k Z#p$wHaApT輸=L~M|k`CRjd1(*L+ϕQuB&hkg0YQs`ٱ8:|z\iD֚Ix.tӔK_bmU y+=}; R8nѿg=azhףnb j Vr ~k#JDvAD#7-KkK-sF@[b\Е+_M5$ x2f8垇3Mrhmݘq"JiI I49dB) /b ,900^D@m ;f?uh:-`X?Ay9k^RrFg$`TIe,K pT :EB@ @ t3)]mT,c{鵛xՖyV줃̻LDEYInkWtP*c_?\:DV,hׂ4Ve½m;oe6w׻y '|xHZndy:5a}̰\yS1"$;Z=df}v?^$JewuF}IE/D."B[2-Ue㸿*Ep&cD*Lxuex]Ll ?$x&J ӢL%uOl@˴5((Kq<0/~TÓ4u7.X q)(8,rg>R #ꦁ5^*14d~#KOZo927n܈Ip oRk̵M\ySpYa~Ή3g8RB76SZ(JtC8VQZT?uilLV\{JDD"cFchYj:sjY 'DLR5]H +KeϽwo 0„%5i2Iɲ"YM|K4>82cesHOnbHKm.PQ%5cϟ~q\R}{WP -K(k@ȏb).qb_9zJi'{<)='㸌 wT(É*z[܉N˓ԷdU׎T\?ǜbLggy L궥a8TBWǥ⼔c˭nGK_Xx=>@ @ FҼ{uŠ-؞_Sj;},C {uHc5 q޾o^vǷ*~ Fq̻Z!.{GQuO oP7NY~ojJ#Ֆ M}潝ka3O_x|[ZvvunMyݜ˺gR]}{k)/yǬoƵyr99rjS+3vZxV WBvٻyͳ$[):΋XA1F_tJ :YVâL0-OFIk1~~'lt[81ONXԭ^>Yy'bC>&fzy? ZqjXpw".Mj`rsz*_de7#~f¥Vvޅ;iGMYӧu,J"nqOJ'WY_hyŧdO;85;5Rꫵc3 #tkٔ?umۋo;Ɋ HxInns3 :?,i4 #>~&=8UQH#?^NƵk5GÇΓOX6;_$-MQMjG_ˏK W~_^s֊Blj:F3}Q֭3{nU=Vq?Wah-˛Ȫ.jbK7NJf~[:`ȴC9珄+|? *27mާ8|M4!+T&s?h䣊w:u"EInMaAi;*RfnBh,?[M+贳K@ @  oJxvj=AUayLZ&_g}wGkM5Uu#fې+u5R#*6{~^\ˬ0ۍ5Ji7᷏Nj$Țzw34=+UBnN"4NX'.h3[` i`6vWop6}LuɄZ(iYʶT9laoӣ; Sإ/B!TVk3):ٲ)C, $ g~wf{`vZ_J0uvkg:0LN\gk6:,:Hvsvܴ`5TQwFq^5W1@ݻm^ViDҿߓu)Yh[uV_N&j.V-YkLXFcL=Gޮ5KB$0LV.SЬ v~ݢ1:VcPVfu瞉f52=lZ_#mUoa;ucvX=ׅ'M`]kغNrlYOg &LS4pɋRH_ZkP)vr4mj[k)t w`Wc#u*Hhwmsؿ˱VL`P!5^GgL#t: ?kg?iPJD*Ci+ֺ1oV۶,{6R5-joB$(tUKSqԭGijN̐F!i{ct=_)-Wr 3j؍:tܹ%}1f@ @ ~f>w0w# Z.&䝸*pK)GO0Pk+ikqi]+_,7㿾?қCK{jD؂Nj\R|6 !y5=8YSUiKBqS&YԫM>Hdz[Y{aD5ukhD%s̰[b2k4{hO!@ @ S$SrL.K]rKJR勥fsaR^ Q.-lײ34Z(17دj)D @ Ѳu)ij]T@n.$DKH@ @ Wд:g^]LY$*èUGk@  S@ @ @| =qIK(3uHy\z5Wz@uO@ @ @ į"@ @ @ "(R@ @ @ @{ @ @ D%g¯ɗ {x|ȨM>Ѝ_ @ @ @ AB@ @ @ WE @ L0 ;EhaxvK -U:0mOZDDPK'0epu]Ͻo~DPܻw ^C:[(@൬ߖm2Ov]Y->G lΫ-N‡7kYob±crE@ @   kDܹtiEi;AcW]bNi=La_Vo-3QGD#Br ovk7`۽͆?S54cWKsێx?yWLRձv>i3P!`"ssj ַ&37 !! @ ӐvoZOa.w;>ʵoܱf}qV̆?x+%ijR3$fdQP"s TQU&X&pRO9~ mZVi#mRa-[tGjZ(R@ ?3\Trs+khzj)@ @>_~}tY\ic F սK;s#:&~y{餹3fʼԲd~+6|1.u0l!EiG=G=*v;-ԝIay=ec#ľ ut [Go;$;(7C˥Ӓ5H-2qFG$*Z^pgqtha,>,i7KmSvap^/ǎ-&I>gUF:m&U;YƲNvb~ܨY$S&:Vk =DZԋڗq{,@q|'fQYK&ꨴ&\H,0u}z_`{dԝ7`Sե]*RYGtr@ "hy6Hb⏒<10[he]%꽍LXbA]i(h# =\[h: ̹7ױ_-q!$#ܟ={' \z9l2qι[O_VN^#7Նu;>{]D0lc~9ӡ4Vj UK8RY,OҲTvq;aҴZ"}?d,!N2Q,W^zt; E3>lQxgobڹsJs'Ή척 nk'Ayl]^so[V,<_)ȏ9uqӳz4wżaum^RMK> 90uSGv|曯DݚioՒIn}qMB|.GVLFmk ڱ'?y OHE?$$0CNI|[vf_#'0W~2| CGwInV~)x~ϰWYI{b znIYܿSC (j.Nk'u7&*4WY^C)Zni`KuǘCG ?S@)w_;pnTbе Ze ^'ejdiҧP,}侳"m4kc=ܬS}Tk D 7 IDATbE$fn{_pٽ,BghkȤ%w_޾>"Xdc=]δk'giq"͵gyqxH~z^^\{\~G2v.V&[^q0\|RHͨE@mg㊪e ׄ9k5r"_E-*YCu.<Pb9qs 1Y.b濳Ekw^d tͶnC=J͋O_TXR#Tu:;[6liij)ұߐ8a{^W-SsxS-KR=ON- Ts5ꡅ: EٝW1t:ДuƷ~*oLtª̠G] (igvVܝY*hlB01y֞{+L$%&JL|:Ċ &{&N,GZq3]$0Јas];y ^\?s8Ce&-{JAԨ7Ǣ޼thkrvFrEH<%2"cۑEJ-/Ը%D㖢ЇWEk"cHWtcaYalYalzT<۩:$$yl{`*cF䁌Ƞ?Oy8dj+g9_J\׾%m?{ti},+Z7dU}ؖqؿ E*V=mj?Z?R}赐{o}ENScZ/ߏo~ԋ2Y]Sw =Wcޖ6@Uz?TvNJTtm#}Qc.+ܦW!<=!2cO JKRM=ġ唥< Sؔ!1 eYP]"!"~~l@p/n-Y#g["R̈>^rcjCf{FS̲bEĺrFViK߽X_KZ1[vԈKwAݾ yյz~]unkgN'9ЈE'_c.SERn&/K{^ѹ,]r]$8M XdһVz Q;u&KXlDWs林NiM哋w/Fq;]%MF͘74;~p ̕>Tͻ-_1֔$ļݺ;/<[1|;{׎q4);IO"ϯ7`0:E~nRŕLRE2ܬ jRR"/si .],Uu9j.iYQ~q ۧ}'vtĈ$F'zݼiZ y7F񷧍]y׋c> :M ;=NE_`uN'oOxy՚LTŒs>ρ@6k"ҽNX8'j?w6v'N$ h:ciO>%޾05lWp­꬧򋒢CMp1M9!E}VQ*TtlZڴ7ӡSI"^iF›k&ŨQƷJr}.?ฎ]}\ k*@ ߺb_b]aE~#Cou^Ve,m,(871oC/rU2%b-qOaR~~Ņe݊4|J5S,. -做3e9l9{Gju1ۿonW8ln~Vi]a{Ia)"[(I^Krd$y'vHI?HLͳ=v})r&>f?kqpEܹDZGWSvє+ΡkRVe2ώ= &J ek:SFSّRo ? m@9~NJNKD>ׅ R6WQ#h(AIjpe5,TDyn/8H$U!Xt.<-C&Q{7eP'&{KeLFx+7}P۞yx97I8gh\h &Si]M7GR ē#o&8e$㐆z:#&!h5{ܧOq,/° jY/sg7f#|ٳ9 m] nm]XD5>soA?9Pպ})znL_w cMaZ? rranoSȋ5KBJ4{-jD ퟨe0f>z:@}uƙIi5gC?<]tYLy֮k+{`{ tLLpб aydzu*v(H~A(2-nA;Z]:Pa'wsX'Ɍ.|șnbϜJ dfIMIe{U%2`Q~'}˓) lQGy`?ˣ)jmjma>921>*vP53x "p[: VIن+ Y{/)F'.*\J8Τ9pwH5ڙh3Q)WF򙻨@Rs|<[;qӦ;7t[1ߡ<"1c73 #M+}^o?Kh(`'FT5kΞ\ nVe )N,=_~}'uzci,aҔ_6.j=Tw`\ͪ,!=ORu Ġ2X}_* +QP %[ͼ'fM03s8`בO8lFT4k!$Ņ^QeEӝt%qɴ\Yx5nS0vfJH6"[S`cȊ$Zn;Nx#_ öd+MJ Ԭa6yA€Lܬ?͹rƉi0HӡCN[W[u\(NkA“%牽eBrJH1:kVH{]uZ1d5 NjXO _$z~V2okNrk xƵI6dI~)yi@sG|]qL0K; Va:U6NYEkyw wʊdYi[ޒ[V*8S#>Nr#|#LF>HXSޫ( PԩrSFBc=p87'i@~4乸*̦NelAy*ӄHMɑ7H2MhgV>D;0V(Em m; 1,4zQDHVz*Ͷ𡝦Hס,>j k?n`1z6Nz]Wߜ nfLn !TIMnۓfV*yս7/*6:]y+CD ˗waJ:e9||6G( C )'##0+Thv7JUo.Iy]*oNwd ߽I!f/ߧ2q[rPƌ|e[X,Z}\(0ϕ**#_C8~`57=fWQ7mtKt9FTnhɲzѰVѧxl:T-K8I]j(#7eU`ՏLZ!K+sEkNIEM'EI%?jB&iQ_ =DIkQ,հ(73`}:S9YC Be{4%*2:ܔP򞼑(M='Wf:~:y:5xiBCz?&A&43aI(.wU>R2ϹWF+TYrkCO7Yl5ngookmuT'F3Q̋۱g@菳QX".nǻ7{}7X>%voZNqD1ҫ{{S#h6:ԜuR :)TM~عŏB٧ݪ&saŸZ d!XVnsQ!Ǩ> Y˗=rbQ^UN-~&̴ǟdɣ QӇl ί݋]e#O\ N;S;h}W8Hɨ}$\!5O@жaSZ.jːvr}AJ -JIQm%Mc1GUrD ۸9:q[#vjNТoO9!ReMQf{xKd@%nzֶ?}! $ ?j'0fE !5&00/ytO*2{1 _+<' ȭ%ck{VxY|*O8GɥwdP\X[ܔT=|zq|'Wu- oht MS Բw 2`jJ%L"7+EI?S?Z){4%6ܔnGj([xi7'GV=?$OgYӜX\-c. bѣv8>f!:{.yGJJ $2mRSn; R:wW<|˓\1t'1Kŏ %2-DZ}']juz] n I%e]+EON*ll33KU{h^aesŻŬu٘~.O8R1tp.n(GKXgnif~o3}K{&_˴-1b~s!v8Ij<+ v xWX&eg5c}rq1wG"Ky2$/5=K$2ZZÄ[X Rw?{gEgv.EB@ =;SYwvzv؞ݭ( HH)rqvA~ܱμS3>oΕ%k:p~>IH'~ SlX^7IƎ(<,iF ?Hu1x$doN+W1!mytioeAJiċCzmX1G(u]T̈ Y7d!N39Q٫?0 qo-'uCBP$E{d#[UcOe$/==&엦NK`9gl"F6n͙$/rbRzR\^1X)ly/,)K IevV`NFYɀ$|]͕q ;t~sž]xֲ_ko/_M)HDkϥxF~{əb9Aiɇ(I:ʠLg92^&l8[p#OXsy\ SEϏ=(g` KUiӸ1Kb_2J =&<3)^ sH~|6s\I*d¸g˿McN*g4~5[ʩ7؜+.?JJyjLY'XՌb-x[1HB|YJg'=+$OF:54Ï?dJTbh&`X 4k/gHRS Ք-z \) hQVEY$$X3tj!.l%-0H" 2GVT cc Ȥ,̊)Q7qaQs)Gp&p> rra@vrBrS gt(nB\a8&$IZ*V/hz kچ޴ k|+d.j^֫˨#݈FSy}NtRj@ F5qauO.kurYA&f.I,L"e͸o;0ށR'qٰoQ\_*R'8Vy%F٬ˎYi3O+c+K;"ytZ9]n/Rv'pɪrϖ2WAXtb~Z196=WJ>{͉i0\ꕥvVE]^rc*/{zϷS}N~YjgGl9]1芒vNu;k碃'j=i?\uiKKtoiׄ1] Ȝ Z"Z$Ygu٧>n}͝?*9[r (uV,u~+Zpn/P OK=C(y`ԿnzhnԣRghgD.?w?7cE-;nO/ovxS jɢ?ĨL/.aԴ[^}xiw[I4ksG6lyA0s?_颁<3v^li(㙨ruK)8S| L^ZVk)k]|7Өm[jkAGBk׫W.(o0hܮhO\vr}A%Lq] r1vk%n!U7zife73JD sg]'S}RjCO"xMn(,/ۿ)W3Dso֛_ntTݬRF@  `ޕ]*O頔%0arMMD_H0QiX%s0@5'V8:j ߗIT0zF(BG^׺VeF) HE4HZi[Zn$G^_؛UTA4AG!.ݝDug7{8sl}c~/̊I 7"Onw|6kФeSw'={z;9Ygڠ|"y6B"#+]:e{7K#=Naq]zxSvzrx5i bԇ;{9ٲTC [Y^l&_׊{\sڡ$ Jd=ƾ?~Jwy|hX\۳nQg{tmrq ЬۨW^P X5mHC3=*jhsζ02fKǃTV޲fj)ag/n *ԩe α>i6ώh8ainkcK/sħ$a *W1{cEh[+.;bŤuvܐEPp_%z{-MtmdgR0kpw;7mϦۦu͋\DwZ[lxr嬑m[6s8m^߶mߴmm=?1Jc۵dÁyMZӪu38],gvGΣא؇|y0 wei+mƻܺVz :NeZYuh}Ǣ}+{ql팅[aS#e{gȕ {Mw)NЌ='ā|v@|l茩[50˝l<\8oVf,Be7ln1u%1mieR0 ouRCmeWl)q?'y4ǤSiL^ݧ1ʃY;:67q Y7v2a gS]۔۟z7)8MԦɿV u]vߓ9nˣi6̒G&}ʘTV]&\PHP qtt&u69^Q90̿ow9 ~ztĶ[yJթ}ĕ5C5[Zb;YA~k港c#w-^\Bpΐ} 9w[Sbl_Ƿ醳':?ӂU1L=G2+7nES{qE,G#-T4N G-F?/\8tZWo>_ FujQ̜?Я䑙o̬ 3V#e0[W4^8rji|FA?+v^si6rj1ݡw6 k6W\etڱ]ո۠ T[pҕǾSVQjTcʜ>-F)tBS-m nVG jjcDͻki|N \ fn])Tdgq o);\'3:1 kkގܰX'yt2-_M;0هf440 cpn,TyzvA,A ON,Q C'oDmTѡZ Qy+ 7i$'H VɈ3et12$PNoEwU6cI^ H!Viu~b4`4Aa؃ +9Ce_v q~2[$ QXbCQ%*e_̅fL'C^ʙ2ݡfuZj EM-}VdրjkEa`!N!Ž{Pnj:Z,wb_ s;N+75}F4"i :oujAy}YzFsHŁKGwg@CG vhuAU|m\\[LsR?91ɕzBf@ Q'}˜(Eja2,u8ҠseipE8 )]=F3M[ơm^>zQ$(#I;ъz6 *}O z3X)7} ioH߅*^*Xzf ?gً߹, T4Ȉڗپ:* sq3ץoeT.;{LQ~ث7hfUfЂr2v'E1'_NNz_P>W}r zVٺ6~4"Pãߏ Tb,Tg" RT(0LߔscH/{ʝD).ȸ=,j"&^o:y[2ȈKMֳ9? C @1$]m2!19(q.zM]eQ֧:1J"e!OC@ @ ~$PѰhm@1-Պ@ @ @ Z@ @ @ As @ @ ďKH?'ڢ? Gw|k?Ў 4@ @ @ s I%ykyZ ϜW؏L`^Eө|>xJ$M яecuא.ȼߗʋ>ZmJtoipSit4ϒsd`ȢQom,†#xF~ۗI>|* Tf I3s˚ԅ@ @ }La}%ےک;NǁBT9gN՗_E|IX a҇ @&|bYH0pﻜߘU~'dBl"$b~ @ ,['M1 i/oqaYBJI}vi##fs(Sa=:V熴2[H KwM~>*$QϾYF[3`ЙT{1BzՊOfm ojk(:5,Sv3sL'tuy]1Yb=4\@ ?oܐGiFen7Y|@ 緷,ݧ=B0n.hϟORs[aftk0 [ϯEyrw,gX}o瞈9#@ ^W̿]'[W&H ӴSGmIs c$tO(-.@ P- Ӑ@(7=B`ޜǩ,|H<"͏w @ ?/6 jĨr12hp:;'IJS~fC=i5&ޣޙx6Hϸ>$YJzG[g7݅}[vk;?3)a\EY;Ik=/`ȅuRͤn}4IJْ۞ͫ_ry]N{xOͦl]CW Jiu{5Br'A@e6l_'uZ2I!HeF!1š}ӜR#'c,ga-KaV׷o1s f|pf>$d䂶F߶h6&JAz[yS+D]w|A[0 {Br@ hkE\Idèue &v-hLLS|شkQoȂo_Hl^Tsĩ DoMu@+CswFcђR& z+Aѻ^lR_I[7Ka+׺2Lȑ8bewEQʔWSH:ւ]~5&LZ.а%I$)R&ĺyy1 JkG(Ytmb~^+. e)^RL;%{r\1rJ3o9LӅ!2mBvdzMh)~ضkHP)$ Gދ! q[HKTz"/Jɨij-p 14>F}Lյ! pbY,JTdeg5G5oK *) ѝJx:y6@~$@}ZqvcMlҎ.=6NDR?Zj,z5Yn'gtOko QXg/8o޶ж="D QPJcFdtuw|XcB-1ܭ7+7-9DLbEKN1$w-ƉH,xV/I?fɖ1lb/NxIXa1V,5GSX&#|NEH$XߑmR~RVr"sZ8#tUgJ.x7K-bМmNz~+JҹW͖YlIn(+ϟ]p Wŏ'[&Qk6hJn /u$5^uꦔ*N0I5¯96љ8M9G㷔G5+ |%9i?d055HrZf{U5$% wTӐԌHGKmUf15#:gSʔ^Gd׷1dyyOgQDdd:0AxHH,>S@ u':LBw0f۾#'6x+$X \\xt2Wn2.)aP]͘ ]'ӭ'Q%Rh{8..Nuv[6˾:/jhJ;_ي:^ކʓ o@M&GdNyADSoy*^~=/IyS9%kŦ+Sz&zN_vtV,Tk{uvKJN=qΓI,.]N_8GM[xhÞWcڳdb7H s4SD#)]ft_T`%ǭ[H,o{# q "47oبl1mj[Hcژvˈuţ/_tImv7, 8w ,^)!xñ?qxy fx MamZ@@B0yڷY>Rxф=^{+vc{n^^ܧEzU@<'fd,.VI/<ٛs K+װWܲ '1ym{+m9O|De DTЬim[ {aE.i6hiJT%ž{2>9m[wSp<'IxtlP38fv.Z50P`w7l{Tmdb=y5EAaY5v77. uL9ñǸ.[gC>M`ǣi$7V ^UQ, V'uε[vV:/fn堛L'Q`אUk ڱS{bazOO&"D˝eMKE,ULzx>7s޲,s?-ҬN"Ep))/݃t G/W@Mq1ۊWo4T irD仾IBes٥]EJ/b:-V'>ys~olְ)y{ҵoŏR_wK[䁚~{$LZwf ?_ }OJMETdggF(xZoL-T-䮈 -Z(Mz/J}| pG6,^aS2e| f^i\/ȗF^΃G>y0WeJRېwP|}ܲ[>-{w7s/;ŗ"cC^y:kϜ|l]jjYT9#+xn saFpZLkcyy!~x<\=w%%;үA/%zv48ӯYMG^O/v('!]BnոR}`סB)?EmMR_|U8ӛ{m,=e _!ʍ0&^(7S>Ązg*c$)?vvOWNFr<һt Uyi$ÂqHIީ5،*mڅrqX؅}'~¼(*ʭi *zP)n% pl!v*|C4jVYlx |K p`rZc4!;ƣ5e'2Tٵ)0݌2-!*`N_ Bt-1ʦBx{oP\xB8 ,̵i$7-|JK@`exeY-U3"-ePŴuJ?]_P)߶¯Rhɛ @$!לG33fKSoNѹ͇ػ4y[&OZmiLxHܰs'uli 䈈1tu0kn\KvpxEg@5a)`V1[lHk>SH*s^#TvC257յC'ϔ*9haX1~ɐSN`;BfݒLcf=b`[<0#ŭã}π xTqswowm|ң\駈ɕI^HIq~mkG[/לIYگؽ)U)~߿=n |<2,e󒳠մzt/Ү*:.zNLo{zWgk$=zDs;3r]efԇ Sm߫炾fY^ӗO _oW/#{|QfKW=O9sۣw.Iϧz87j: {CHBtn:p̨" yr`9 LOI;7_Z4rȅA7 O{ I~#t4R8{1l0s? '[cN:cWztՔ:u h2o޹se o<(IG$'>ǣo2H(LI GϲBU[ؼbc۷ pgy=GjYq1H!57K`'KdHsI qªND $pv,쓘X- 5 CZC:uK$\u>*Ci2XY񚺲/ץ0 \_.1g5bVFn E1*@^)BqKՌHGKmU~1m]4= BI aFZ9 @ "rH9qڒŲ#WA8 ИE`vvإӞRp'Kd`XϱC=:\~Ѹ%Crh\O;sNR9cÁ=Sߩ/mj RfH}7;MZМWR~ 8G]{ijEb¤q\4`ڴ^v<S)|~6͟mX{?ya 2n=} &'>g`$FB5QOu۟JnK7o}tiFOKM9EDc]_y4kǎpR[(WT޶ĝ)boV֯G._{̎ɖ6/8aVd5pd G2 30%t)g_1i~jNj=G."-߽{Ge/yEX \i߿OwnZOϯs@Fpiq eo龺֫fݲ>+G֌eR0sOՈ0z,MU 2.Jͣ럞>> ]ZF?ڔ,_9g ~)E\YrA GΩ+Kyy2KFE`5d@C on79,t;޽uaLjq ׁʐ eK0=v8Pu6;#zEHIm4V(z5UNދa`ff-ܫ%4n}34iZc\&˔65#H$ҫ~i-ޒf쒐4;;R $edOl ey)1Sӟw_"*@!ܨ,z!OЏ[wqM.C_#ʪ}NM2jjF=c/޳Ut 47JWma?g լQ`sc~Kk1$|z f`od^@ ҄E=0Iy )bY>p^ͻ_R |oߙ-̛[4rغQ!8ݠ; Ke܂ RA.P W~2~ u%l IL. Ö(]T[ͺ `\jie̙GLa#y#"W]:tu3M,׳Х/w뜂Ki/L5[( "kǀW}Z+`:M{7ꙛիBJO:SDZXLRm0U IR%ᖲC&T ZQ@)Tn?[+7@H? wsoRuZ˒ /$ۨ˥KtzQAT8'nM1t_g\ @RQZw +J0zFg&݌b#LðTHY5K NYF1 2Ձ"*?&J+Q:8TF'$ܤМJ)Q?;LCT+Fͺ[*7ป4I;6RYEɵbZ1jE Ѣg}pHb +z5%Iiv.mT!@-1e;YgPCDQHe+1Ϯo\1/_V+n%!.#\}#><0Kӱ`ɪimJiB_ZE[N4\V^(Y Q5k9ӌ:*+]nwJ:ʱo[DY!QlEFK+Rd(Lk?Pޜć^i8Ξ6~?pz IDAT_ԪϧVk/N]:rυC;X0#C?;wkȼmTE6T~.S#ZNpF*&Aj~빚uS1z'm2eޜL81?86f{#2J7,ղoKo}NUVmZf5ږyoʤ>ݻ7a?{p#jr46 6!5.? Ul7)/!WtZ2x_Al1f[£T T,[΢asQpDT7:Fe1U? %.>/o r9/CMXf4*KfУS0 *ԃZNb~9 k㝲&-XMX ΐW>%׷=1 )PjԬ3CzeRAAq| `Hg#1IU 4MtnnKՌHEKmEϪXT>+4SYE*͒I`3+;up 7wTRl'*o=ƝOdy(N۬6 :5ᡙ"{Q0Rz<ܨie /P8Opp r*oSj+Jⱪ;@3RӸFk7$=1޷[ڄN-xzW~30 #ԲK[A6L3?WW_䱿Jvt3 c$ܺWnO#q1 3 ~&+]Ӧs'{QWrM?k -L_+<*RTC4#PY0*PY7^d=o59޷a=<7x.п!ѱ {Jy4dKSe]΄̠p0uһ/\!76nмcឿZv/HBi?Ӝ R@ht KJ^TnU'7ústZVnp!7O4=Q`KdA! ^lxñ`bAxs[Fix`GibMU,=$=.~#jz`nÙNkځ>`M6)l;i۫*/_/x$]`"N,;/ZNLJcЊSy}-}VdրjkEa`!N!+FeQMH)wEɊHg3u,5ūYRY `Ŭ΍)^xwrf<+2dtիM IT Z%#7>IFLhǫDNO]f >( {0ᾤBJQn8_>>[}^NKg#CV4x'j6wM=U~`(5 mѢgHDI/yB3!/̎t}'d`d0r=L!ά.p ,:[l%&3#ѣF5yތ}9~ ˜ZMw0KBeXmr2{Z㘎sY3ZC]8g9s yd>NQo4,㢭 3WGZis>̛֦haTF2OGzmXP.Kʱf˯ԣF5߀O jSdL4|]_kX38:g)JBοqm8lˣK}x, PJ#^k3W Ϯ8s9`p Ǯj[g^+yONmK03)8ݘI(r͕:A5fS~[usPH?>?<~Z^eIe̎?qsmAv1GyIol$9Ϸ^6K.S^ sH~|6s\I*d¸gy6{wd͇OER9ID3M68M@|}\-:?{wUwg`["BhEv }ӦMzӾPJP( b,iΜ99{噤й)bA؛mI1GIA^MbaZ\虣zǭn)2 R\xA8_Tpt/Si){n3jbذΝS'#% 9h9 7Ie1N`ثt2x!㸂ܘ)܍β3J,Ұ9B nݺA>}>^eSф1$J.^{$;hP;vcسe7)6͊ h}G0%^O5>[#d*-yXWVŜn4WWX!gYzĭSrs[Ѱ>\j,0㵪ԗ=i/K*M)LW]gt=9U=1-&{⻬FeV|YW^^sOn(pZUhyO6P&`A|0I5 ov ,d`=j>v mls}竩sDDouլSK Ӗ?ͤ+Y|k9%.Jޜlܻb|ُ^AatSSkXa:|UJ7. 5A$IZM髧νlܒ^LU)y.ۯVZa3'jRDnWEG[]zj&T~݊2juVgp3}SZՊU{GOl>0SF/_yAjxeW> %U6:|ҌeKEF|jW۬ ߤ7zu/4ovːx`WY6nY9xd|ٝEze %Ku6ݪVQk,Ԡ݃]~;btj͸{uHtt|&vv| wn8*p6kL_W%1m}VaaL:di%,]4bXrSa'à4^|nZ`*[yCEZEfn1Q~. 44O~j&ȏV7iAw,$Q֚fVke2666W;2 $GFZ4SQ`өtM[uzMyKG.$IܾaMYThj!n<t *U`ibNMӄ@llLˢ}1Y5^vj àR8mZz-S>M[s[y]8zv&\ʐQo׮ҫ*oZr4:Ktk&59V5iL ]7U ض5eYr?|f!}Uz9tjdP(TYr[.뜷HOmkv֒g24vÖy[wnjLM492dQfͳmg(ˢ6Wq֔ l h0(༴)% ΘHţL匹ӭ[d -ch1`):3aX =MFg鷶2shظս 쩭,Oi|~>{ET1o;*$B?'!"OJ& |/qQ+zuÄ1iĪӁ%C<B \ScYi 5[%`*sJbBV}\5RPE:g2 zakr'.B[(k0 OB!B?}탻wh@crNZ$'B!WGB!B!xcc(P7z5IjWm:C knj4=% !B!B!B"B!B!B!7™BB!B!B!FBB!B!+w#*_ap/>mpM!B!B!B!B#)D!B!B!BowE!B!O &s0U=yEf/6V_ <#WvR4.+ʼݍP]m`Vƽ+30??/K2:a/TQ/܎Gn)\SB!B5/-6\*k&̍52NiXڛ٨fdm?TCBQ aTtOCa>,K"Bqxvh˥F:)D!B! S5֦ݛ9![$vrJ҂55uyvlrfHTN&3?ʠX+_߅"Bh**%I$ɒ2Ϣͺ;</>)X$*N=?wD $=P-F8 CVgnsߠ0?_zncy7MPz^srwsy=vzmxK{g묺~VT~+12t2Ph}3!B!P#a:FLRZ޽eEq>yxޔw\#uBH)rp^NITڅɧWgǝ+gշn6e$HXwiTG9tB1cs>ZS[z@X^U[6E_NnA4q)~iC!B!gd:vjy ,5՛Wuv wvmàR}CEJRu89O7lS=4O(>mi4zn=w/G! %qWs fJ4fB!B\bkwD潾laʉM^l}3W,թJ@՛=Tlfi0~ޤݺO`veg_ BW*ϬH%hپ9QN}(G4FJcw*l:ڨ֯o˨Z8T2j/[j ^m>`oXcM/NrksG9q؊j&m;tFslm䘡2'6W5]a#Ex0P,]NHRhB^5>QaO/,V:y\BHtTj~1К4ث &,޴-?sLcKf{J(O/Qp(Kv7<>65;)6k2Gmԫ,Lu19|GJNmt1}9.o9E=~_SkVbQ_ ͧfE3>y%gӡͪ1\GRbĤbhN+-()#oe셟CXk׹ 9=$`+oQ_(KDY$61Z-톍gg"]ULΓ;8~5()Gkgؘ)-70H/'l%-+M 5C_NdMlz]6\lR~!Ӳm}e{D{իo^Ege][С$yFx8G DW/7Trgkzvg|)ٙ#?9r}kή>dgXs{6t_[GqSEeG*.mr}ͧ.oim}[3G?ɨ6s3@^վnpPBjwO[uřBB!B̧[+KHH90qt ܐmz]W+;2֊[wC>Rq´$q"aK~j‹Ԅw@d4ӢN/6.#EY?tU0]Cvcbļ z ] m%tX\)rGQO4wwׁz&&t||jJlkPY+C]:O0sn{<~0[aѹɪGraN߅X(~QeSFl}tVER} eIE/ ^~nqLJW8Sq׹cݕ'8 _HJQ{ׯ̧G[z9AP$?޼6ӽR+oE@"랻 jO$n|*mRكĒcŽyJ=}UuK :2|iAK.kSld-|G_c@te/Sn<:/8ݧqh:ݿ(71Ub̫S0,Ou0KD99 ރvS숋.<%K?ݳ;6@r@T.4!:,qࢾ*us{)?Qˏ ?cZm,7#"&r]>2Kp$´2(4VꍸOq!B!*=wb j3gPc 8er3K;>O{wlEf=qlWme-xzNLg|Jk=Ovj(]7g7hVvP,a+jZG^ua`\05Ԧw5ѯy"<;I0g | ]Wj54rBґ^)SN=hp}zO+!=74 :.uTڃ~3'Kpykg֜',Lqh{,o/ǨF]Pz1^}O@Pc;& ,!ICn3DG.q_JMk}RK䵌=mm Tib˗ֿt_:Uf\jLҫ ֫k}:ood$Ϧ {8>a+ZYxXA|.:/KI |F@g`H/o{zaKVSj셟/^wb#h+ ޹\RNZ_vbj!{@$Y*nMG._ yb;1%EcWFRzЭejSIytP,QP̍Ooݺ)D!B!RCD Y<+Muh Yq7+_u&caX4%~d紇932 =-)2 x])kpeFJ2Tøe#Uy)~G>љj BC0YV6>IMSJeZ?lzD8Eqs֚rL*ENׯO//3.^drۚ:jIUtd)ﹴ&erߜك4Ւa1(XvP)~QP%Jt*Agsu ;Iqݵ4*)ʪy)&2c oQ2 ]3e[YuP+i1|2*CMͨdM㰇ja,^: l|YT]˸5R)0hҸ"B!BVIJQ݈)_q* 4ǐ]7VU (Mi2)H [ujoQ܅)iuYg)T2= PWjY9w6 Yo\b%:_:?VϦ^o]tSQ ;-OvimXlף6%On{ғWosKD7RK"u jLR@mWTTh6Vݴ ۜWe6ּ|kn$I'GUT"W:O/f+:N?0>F׼gƼJ7SAj|lR4{ᗘ sNu*tIʰ/;n A3:ײncYR_c0M( M!)クNz54[oB4fNVKz|0ޔ"?{Uħ $oI)A+ݿ] GQiR )y HC?B˞t2꽕2wDBK4Ȅ\D [|)+Ӭ!Oq!B!ȍծUB)L1'N$Yzt ^l5ʴ[Vk^iKSˎFo9-t ~{W 0m`K뛟 ;M߼sX*řwlw^gdG?Q:.{v\b4sl ; \SQǟqw~@k]3`ӂJ +T%A-r:.9w2&>*4Dlh'R*YJ*=G7|eTAZyN%>:~k)s)ѬG^^QLPq11*g?RPoҼuk2m95 K,N'f)̆腟԰ÜW9xca 5#*mL }?!]˺e[+r_2Sjᐘ5_ns5-CMf[3d'@+O0}iS2[T%(P<6r;"_T+61_ˏ٤Y[ )t*Δ+N-ZՇ70N*N+N*߯,ZB(kAaKRƭAHJQS)D!B!k!kzMJ5$k( =v~˰WOvUWi':\@1Q<Kk|7ě f?W6qPm:tNݼ.w{ԃ!?U8z ={&Gy-`Bz "9{MhƦ9ӟTɡ'teA}@U5\]gF O*|RTiXH Ns뷟vx~5=|@m=֒N^ysHq1B콰[&4t<|]LY_᫇*>'@؏W6$ UGjx-&gā`_?}]K}]KR4g{庺W9Hʵ嘥z>4eFդ+]++Vm۲t vj`ynbYOMh&^>h:m΂ļ¸0e1_, qm,y;OJ^d7)@ B!B>^K7xZ֣`4^o#D/y$/(C$iжKLwqTR)w3k )7(O~ݍ.}4Nfdeǻۭ䧲!,x_: ;mwuqeyA]]qP;i'#O6aXՙGb^f:MA,κw4FOʮפ&|~P,T^#/DXUdrDH'baOzMȗ[鮕{2uʛZw-G%jG: 97%ÖuTH?w2@jC5rXW;h;Aӽa3T%I#QQtli:6_yN_rњ1(Y !( pWC4 J &)Si g꣈ʢ(st$N$ xm6h9o} ZrC :n< A_1 .G e-̿Oq!B!Pm\Ϻl)[h9X1'vw _fAVR':9xSX]nJ+HDia[g$LnGeZ )Ac SSbYI58EKJJ'Wh`(Ho34DRpy~hRJKt Zs/aM&+ ?qKDa)j 7Q#f89U\t[e[?`2Nƫ]XAQ}mc~.Ll?iݑ׉879Z4Z3_x@R\piO7jKY 8|*_v4K䕌joQ$ړj(5kɢ <ёU9kK}bIs_̤ەDPV(hߣ+yW`5[A^tmj,). y2 s)Y|d:v,_L2ڊՖ +ҋ;'nS"_{D+*Z!z"tҠrG[$ %/^r*?]/ṙ J'U1Sr,(@ҠuSl1PVtiQɇ]_=% )I8qݣ@B2 *q Sgp_||@HԐ[/o~fqL ;͏I%VL؇d ? <QuuxcJ$))I DBR2b#(J/c-YgC>d%~N˻ coV%M'uUď:x7-Oiqg>$5k}{X2Hq\pt/S(B!B!@x/1qrɕ FfIM"e{o?*Q6qnECǍ\mzylR𤛓?:鷔F__պzioW$[x 4.}]H2{S9^?Z&or^J_FY`nu]Ck5,Kus(\jʤ&ο{E4ȫjDnujj?;6鈛8u]\oͮG7w}ɠnq+w+=`v sߟliJyMOLa GcPe?'Rq|,N)jlGr*\=+M[f9-}ObQN= >#yBLwb< ?m[wPp=5e}ˏEp&ETzUqN>^?U/VF]_7s[xЪV,jzEˮ|J^iM%*N6|@SEcB65vL,8kUURVڴvɱRf@/;~U)f*tQa }ު+)D!B!hۭ;2)s̒W]TsrZ24Iρ{kIy lXboceStyUݮNG6kV|{(B7Po%:5[ׄO<]{[k)qUKąTpV0fC9&՚JkUw~zXY2oKRR8Shǃ*V؆Wnf T=J5Uڼc!WR)t݈'_h[ IDAT*w*iiOhmA;,ƈwГaxzn J*лsGj*OjͺoRˤedmllwdVH ΡsiSL-uUf=f_f2\:IAwkX Su7n"ϢE%G>V1!n<t *U`ib:+^olLˢ}1Y5^vj àR8mZz-VzBprܡLt&!D]77oUiU.νht/X59V5i\Mz¹.m dtbYEa0yժ^*2 Uָ:-.a wٺwߎZLPu2oknt&G: sЬyLeY檘X9Κҿ-&tekDSI'(T&GQ׸Lk\G 1=G<s[P)[Nb%(kg΄a-4Y %v!q{%LS[YZӎ| )4}=UWFߘ|F!B֭ӧ;`@ПX~bVDdz?ZC%_yx^^[ 8W.Ox6*q>5UUr)}z_J4ְ[^cz:d]Hk*m*sh'^s̖/KMu:~S4$?mRRL>@5KyڏrF7?}3A60z!BsEฃYNĶB-xTn܆tX^o&D!繻컕Ct ;S/ 'bRt6O'5u8B!B?6/mʩw!C=C[/UCZr!Bo`9a^CVӰB?X̷oxWuX{pNj=B!w!=*Yl#)N B!-^™B/#oѳwؕ͞VFFanlںes-aO]پyryStk,6uj#BRNTaW7di'Gd4QGw_/&{j*7y-U9 uzp74Cà1mL yFv7[]5 +E)ɄЧÍ~xK$͐lC{&cԧS!i>)Hk]XRR!8/l v~)vKXoL&[k??I*:u*⛞UY68ڔV* V[LzϪğz,2Î`?2pqVˮ}B!8ܺu}0}{{ B!Bm jMD\*'F]ZF!^)XAS($Ir1y$1ߖcwh|3$R(4M7*V) v-\!+U^swG:@?O5A wgB$q sW`BJfieO^SvLE4?Uuyߏj)I)eqi b)j=.;\imf K& kB^^QukB-K+5{бN5[mG7BFs()D!BW!&!Sf\O+Rmجnnpחϊt;O5j4Ke#yoMxҺQ g*bU^}NզB!B!B!Tʍ=VIjGΑOvew2uJ` T+P"zt7]|NAXB>J8V2ճisLZvfֺ/OS-I}| rǼV)κ/84秫A;tYJm0\AWyF§k"+qb`զ `KQh VLSTwZtցFv4Sce_2m@X<BJ%qM#B!BA;^]cz ? Nñjӽu>IVa* 5S w58D~ L(O?ԍ-\#/A)>6wo3mnnѩJfjԔݐtP-JPC&tS裓uf} 6*%cD4S YFepLA4TKehׄYWXMF %)T/[m!B!B!B5Laú_MY]==n ){Ya11f w뤩¥ Qj)euරxҽ?~ co26֯Eò<ܙ}Vc<$070FRn%3XhW~m{nAmL\/q#!B!B!BuP3F\pz}!z剂9{ŷ|s¶qm0 Cf;yg¹8ukԶ?bH5_y=WGS>O2FQ<d=ςQ>@&z"z=UcC?;7PKK E$H/+K(& ID@7 u( wB!BESIo+xU{kg^ًW18%z'B̆flܻbXP o5󒌼N U$=jK&?,׳},tZ;7X8nƭ:eۯX2eeP^O YƯ[qM;_-\Ođ[@Xl nHior-osxxS@jHF]`8bDs\12.FR(3v3:ǤkMjʦq.3EjiOc^KR\S>AЧiʖ'i¢7٢%n}@ ?ca]{ԭq u*JW'ziDXثW" B!t$NpA~_Xl>Mo(ˢeuZ' y6a$:,0%Bz=A{xbzZl:]١gIH%B!8<;RLNl]Cjt[ps윃ҧvS4ʋEeF7?znֱ(u}ݍ)OO FWIo@F]FmCTZ0snTXwXl O;{SMq`8~2{jfaծ6PKm^> `swEB6R &ȑb/KB'M Zi*Ú0 ?nc_eidTP "?o3V>moiaaao3+B! )k͜-L;9JDkk ?E8en5\h:*ztb "}l{I"QAvr#Mn '7oj)55]a(~:s=߅7v۟i]kZ0?3kX;+]g[4BSZ烏ui;nԮgjќE߅? ORxSi3?;YO/ ݂O>L56x1׮G[#Ma~34ӸU˳\2ff;Zlơ }vMؙ}3ڏU}f~E@(2\wY~f쨠[|:gؤ_c[ YqM"CȭKkvޣu}u^aom q=RǵS(Os òC8ZV6H6{iͽk`bQ dd– #<.;3,Y\wk{9/o!B|CUq\lw/Fj?jܹl{+^dЬ=)sw8rLx%9ォd|]͔pD}S1| >e۲i[5Ug}|ߣ4 F5p x=8?cz_UI;F4>5\\a!q&<^jd،{|sk5hf6m-ҫ͎Խmݲȕrj:]ƮH:i yyk1iٸkfϭgA`빪1 aAS9lb/}7"e-ƻoˤ}@M\o0<5ؘM-*C֛s\B!g0a}ehv巛`ɷtMFy^X7QNf_2=g7|$i0oԩ~TǾPͺ=k}N<&Ipwww̉ݎTҙ_5{wVEE7RHصkbawڊ]b RJ%/? ^ |>;w339!BGgPz^-j|rxnfPb1~#Q>*ļ2KcP} 94E ƎX4+Jc,=ߩbv!\` B/q4a52bӧ{3XB!By})tUŔQ޺wIsOfW&fذo?aK{tG+7^ xGWmkh:piоCqڜ%,2Pl![VwybfPFwaJ*2ՊL|o|Nۣ5f (0uS;zXuДUvj&;l\=}Zȩ^[.=rD[zKwCRt% ή_,u3@S}"}ʲc||~L»<}1d-<9 'GY +pmǗ軲^FqB6̰Z6ҢY2BV]CYTV6ñzoؚp~łSvIT%@/{q'2mf~`suv5KsSv^x.Vhѣ'wo1:c^=eΨ~-^Kmy298>c/RХט-+#)M}Դ2ebh0v5+_=K6zsЀzU aɫlnN <4`7/ʓDwOަ}q3W(ۏqƽGbK|bt΁>u&$HρUj}o] 2NIx+W,'Ȋ˽^T"6]v^nAq)njSt?~\b2TTQj׾s[sVe%Yw<&S lLN5>{( åKezK ,:qU@X ~lBRAI3nRƽ~G*㒅LCaR2E$fK#D)\cá Ky|/ .c+^?s4]Km1 +;Yn򧭺LKODhV˞'wm1Н!B!7_[&)=wKG+>V<fZBa_1o.y|N_@̔̔GoC̣i&&G[Of05DŽRQBDRAΟrd L[<]>5{Cj:(5v*ϱ!t| Egl%Dr҂zxl-e%nSbs> s>/޻Fۓ'#"us0_Z^C+$fxW.4G#n{:qb-VDcާ^ ΚV},.* 3h J/8$Wӂ肂踷9W) Fq]b++_;e(ɎRbV~Q/_NZEp{e+J@|hc]ݵ@Xd̂G$L|?ٳջ9Nƙ/VL$q'"uQr1/a*MTM/榧I:h~M.;TZ^x7o ƙ +0MXJ\DꐿZk3֮SWh j( Jxo%)@AK'/Trk:aօEyv3)>)D!B!oL"5XufLS-Gy'᩟Ij9ezOjqV-߿޿|NڰfZ k2ԌFϙ[VT%鏮su}-*@.ޕlL{Ч-.Y$rS܎҉;R#G#;*QboO\k |2J-LLpv6Ԥy/_/:]MfUEr|[b3^P~~= :wAԔ^Qы9^}e/n& -wMwS^qbFdt̘S>o?HG IDAT$溰[P zzCJk)r+S];)e^aCGGto^yh; H2 PY[6&aKAaWԑR6].`ٚ"*~x{/}<GvSk/05C tx']u^IbN y1 ]{TIDTע}ªكZ#/zX]JMXIiA֚ &=1tMAyU"d?;ROBc[@\e|nѹ4F8W`P ο/ 8=H*vj͜|h],*kkKMiS }gay]>Ze h, =:S+;@7HV& Nvؼ|K96T*Ӥ~5{Ė;\H~tBUo~cbA򎉜6w0KzT!շL(j@{uDp ) Vvob:Xd ĬGޗRZVgͦ vg.LR#I嫑*K bQU,2t`7yO6s;UL8JN.>XR4Rѥ*L09 fmf髦eH:ЭLRPR׻&+E(>?'ǗvjB'U46uM,*^Qo=ìB⨶p5u;PHe9tͮ-Fm{E*omDMq@{e:n2uT|jw|S$[δڕ;^5"0Hw*vnJX YGA&LvzSfS1(©b*9 Z)d:]޲RJLm:-ecL*z,2SĢ;7L1o#, HtMlCiJ)ܷLPzFNƎbAbԸ-)dnos2kȶ:4t&݌ʫ׎J>\)v4X$2MczfтDf:C2uTK%,&"]|NZ5bBB!BїzP+x7^w֢c˗B3#=(g@aS}l\JRi|qO)dd@IbOT GՊ2ݞT-VB 9e&`/vA3ɭ{N\|:[I7ENQ3-3e*QGKXh٩o뚳j[:榄T2V|*BL}zG$؛ڐLO>>0erv^)_ u]R^n@QRfvC S/MK Fw1wcS?sj< 06@WRFl#!^FOip-踎e\(OhE/j[CZpI~tǷȚf! 2dnB~e^EqOq#Mz>=/yW % H+iݼ%PK4#}v4?(\{Qs5?AVLWr0r@,id˭ *t"B!BQٽ|!$e…r@*%]5]vf:k[4(~YAo;<,杉s#2IS53EefZ0K8ȲϨޔ@Rq5Tk[!{uK* |/t{~]QLP}1r#6h׺c{ zB8\ZzgR7():u!7 zdBko_v?])-gJޖm [wyRWO69̚}m|Z!HP)6ߊʪ0.~Wh½=tt[Z(}U'QՌ>TYf0j]BJ굣2`ԪZO "G$2Urk@7BB!B(>"Һ>K%:ovJťӴ&}xڽO]=wrҥ#Wk<^LeՌjb~<+ӘfڳLOP7Rx6`uc㡽$ufqKu2Tmc;Cemuhvi~CrerSħkMF" PR]蠵<c2^wx ~M&7̮2J& g넘B5IΚ&y*UrFWO#5|ϟJ(|(|Kd֗DMꃼi2[!&nMlFrTujdMZ;YLe97nEedc֦mUXd GלJ,z '.:ݻqB񧋱W5)a(O^gS"6#z bO B!B!ekex F,ָQEB3~s6 0}쎲˟&7 ro;E͆>Ɩ@U'5 sy?QVt4XwI(J ݝx03zQój˰];vzv`Nnrk,5@5EO+AL~ k8~}ylS{U3m lB &}Y=koF@*z;sg-8+Rj7CS^X,h:Lѹƻb?1YyO zѣs.Kg5Egh3VvyqBP C%`%;d4L M޲ ʟ}ѾTrj,P_!$@!B!{HÓo-;(v .AsIB$M1?uXc[s L*˿+JEdSYwG+6ΦV?W+˻{44m'u ezHFY{5wCeIvEf0| T}23 Ь1UgQ5 i2 xiu~v~rt2'<QCml ހ y+$'jwnydȄQ/H* eܲ)75#3(.)(wl(X57H8zY(A{'PZk5]BҸRӦ;de·ܸceѺ1DhoXMaP_7,®ܗA_n$BO}UGyo j4'YjW*6z}/;2hiƝړ6u}2B,x/t,NS"diU 1'!B!vkwb!/5GQS1a}˴όK^I%~'4WUks>}[³ K%QVRĖY" ]z]5P&BoTIf St;jEuTߖZaKz;SbC-i>Dw LU[qh7-82pfp\X"HzykBבUHvGnIJw"1?m\3sD߻뤻|879gBS%d^} om}}i8?GSsqAz=eWk5W9Y"g]b3Iif/ȉw:8LES̨v7cˊ¸)kCjɕtF2 3tvLz~H*sF=xfs8%]TRѲ˅jgg'i;}1+&l+Nŋ3KER~YɳF-S׮W]G2xBTqر"lQ7qb[KuMvYCı; SKļ&sI~N^.loGE䡭S/AۂRT"*ήU>TkwGZsڼ:$ HL"+WgHD <(H4m*X~)+|eIDwL;5]H|6hYQAϿΐ]_k =kخ =z)Sªg7WRh=\5U^c[/WZt|u-WvMaQzhлР5 d3pǛ*8)x]ȽxxSik3}&M}vroXS)5k$Ph5jSYEܪVCJ"~i4>THST,t";Ϲet.N_!cBB!BBKqGX+,ec> ?m_՘LUE+[2ywnίqbpЁu tPdT%M' ;mCi$B U_;vo;^M۪))tVkӾ(W:d{n6,EU`ĜaP?z7_my\a.4Gy)TyvLTlq ucQ98ٴν$S cyqUITU-}g\zzOU "_6DQmax]0W u mh9~vsZyh^瑪qӦ88rTJ#}/WH$2noz楖51v޲W-[(id CGegS#Нkf,e(?H#чΚB $ÀY>Kf= [TDUMOXϲξ}Đ,ٌ@X~DX~vD8%34n 22T\TNWKi{I]k2]ǡ+Iz %w㐉Zvu.\T<+rr [OMPdݖ TEc_#7o^>!B!sDBwܿ_cs g67%gp U=&uB!p+/w3K'}. OJ'!B!^[d-oD\0'Lu~Bȏg‚seĂҘ'~cMs5xov]~>x!Bۉ^ޫ6 7QrM#B!BgtWmhTDTt[7.TĪ#Z+B!%$MX gX!B!B?;U| sZ[Bg0doTIU A!B} B!B!~z1cj~ F{c! Yvk9/[V^!,ke!B!B!BI!B!B!B!B"|RB!B!B!Я)D!B!B}Wb!pJO!B!B!B!B"|RB!B!B!ЯGE!B!>gEҋ'k4Bgnκ,DhHYJ{XQVX^IaΌ>z5 ’P9,.On^RdžC^i+˻a{HG tIئ7 a^* ,oY^ԩ"aBB!BxҖ6C~[es$?7 Yxl19:̽<BTPRF [ԨH[W}r:.Y8&޾!SDb4=O.nX#{?OHv^Xmo@WɟHu^(;D`L?Ӧ gN⢈b3 @UoɵUS ܸ^Qqړ࠘b eh5룓‡@r$ [Tv+ (}vv!B!2k$RQ芏φPXWyK߼)??Ƥw|#/3%43%hɷQa֓%LA 1[n^%bIy !t| Egl%Dr҂zxl㌿>AzH lUFyZo YFn` )#"us0_Z^C+$fxW.4Gj9Jo붸W.6"oJ:}TyΚUOV\T}gиë J/8$W4肂踷9W) Fq]b++_;e(ɎR@Rq +*z2Ei3WvUk(|\ɩ 5><5><1nFUż;VDATM/榧I:h~M.;TZ^<FvLT@rQ KHW_kz_u*@TQEp-? T*<{#O(=o.|`SʭHYsHaǴ|&?WVuPIOMH0Ǜ -)EW-I~tĕffƧi9fNؙ+#/H4={':v[X7O!B!B!TN";|cDjZ׏.xz@PĢ}% ޿gETaޓ&M\`MrU _*Tp2G (ʈzj20{X-Ymޤ!W%CU/u2ra6lj '<,sFvnއ;f0H#tG|eJۯZs*߀LR 5 5)b˗?AEScGVLE桠zwqT4+*z6p+$XNz*+Nl̘S>o?H$溰[P zzCJk)r+S];)e^aCGGto^yh; H2 aܴN=;w/!>-*sx)O(fj6*rs2"SGh=jqEIyl:}_8TJJO_~޺[g{-6i|6o/0l uRf/0">[U]ޫ@XvÙOJ|IVΡdD]=s>/,+^{8J'Hn0ĴI.,?Ӳ;OJ4c tiim<~9HO$4]}z|hǤu42BSluPZ++9yhd CѺT]:Y"*wX{K>EF۩#uT$2O._ iOD;rH Z~F/]j[18Z4 Vܟ׾WJ&N&0( k/BxYRߺKNUcسxPŲ"j:gg;ZbɼnҘ!'Z2ۈYo.E\ՈloLX>G=b -h-SZQevU&ձյ7+($ 暞Z"hl)Ѳf϶.-o$93[(n鶻-QFH ݙ25T] hn@N}[ל5V 57%bh1FCxXe[wDRi hJc^&g% ű'Vڈ565\,eA~lZR`7ziRD%e|żJ*V3UӘQn^`(֥Ոf/2U}eT: ,^j\a(d5* tU*+Tɡ@.%-,5P\Xr.1rĻr,͇RkTen \ԇ.GZ2%Yii|^@P؈7?,Le߄O [۪Nxf @rދ4׮:]~5 &KCҌcW 4ךL}R0OPNHWWX]n:Lgmv֖fo[YaiZ_|YcH$?t+-ZZ$g%Bn-jr\Nɋ %ىL`wMY\ua˿_fXUR@ʹap`eQ)F+GrAV՚jmzQ#>$y/nI%t[C.ٻqv_Iw8t:A?u4ڵnB^ Tu(L-Eړ]s_Q^|+*(0.~Wh½=tt[Z(}UHTZoU),V?9m@TUe5VZ3(*DE HϴHTT\)o5 d 1Ĵ|&)%UR3(Iߥ&EV[n:5Gab2xiS"pԄLaŀ)D$>&D!~)D{,T"T\ZoM{`܇W z4s'{-]z9rU?NQcTf3$kY&I[sG< 2^!t _uyϲ0Tz4WZweR/$BSJqJ(wիJG xzߜ-Hq6̚20,* b e$Q8kΛMW_?>Z- XY΍[QY{i[D@5 jdɯ޽KH*n+78$7A?5G'JZrk س|Bu=˜~3_ΩTRHRjq3dq起VHx>7 E|4iN+K7xh?< tX4Fޣ78y_ܚ 5%#jz6[y(35.1AW3yj¡И- mI}`_^=Q M&e،V rnMiNBy䵳GQنx ᚍV\/'vU{7ఖ|?mH %[Yˀ "}x  }SKJ.ϡ;H,HXkBV3XܷsO"H2w#e o>-zUϷrmOXH+&AuՕ4nmK*7!W,Y-[Val/)Ј䬖q2z/0B5)ekezPc}._zuz."~Z͚v`Ŧӗ&do`^2k<{Y\㦛 dd֪5k2GE^&0a>S "ETq9Rѫ-K%Rł$Hn ȍ-uGIimc{~wjKveQVt4$J H[JP<ZypϮ{,vc{Q".;|S[+s] tZSD M=:[+ɕ׹KaYfܠ.R 9߯K'O m2k)TPFvSZSKDߠWO򹕤;Wc ZaL1SV+{զ[/ҧSmQj/S %d627{.\]T?$F[tI%^fQ׶oX;gw^y6Fέ^uݩO/3,w4q@6y;`nΞ&Lݓ^ofŊM'Dز™aoozi"NSwBXCF׷@ܚG{{w܈/|eT*`K-> ;Qvjw%z (;rmX4PQ~X=e}Pg׎ wyWmA7 X6vvJZ4TNᳺPZV#'mH}%8X 14ѥ$ǾpʉU W/S{9gIŮhy~[si_΃jFvˊR^tߕWεkhϗ[69gQrk\`)ΣmSyշZ6=z/0B56aLϜpo١Gx*znĝz=#hn6)[P#S񇘟:F ,X#bS gS;/)˻{4-: VMU2ft ivUHvק5b㼙'.zzk}wJ5t3XD> G@I?<*4QyO5襁1ΊL *j92C^;{= ?{7 mB5*ɉڝٱ{/ϋxbJ?l2q˾Ԍ,*}ͦw!®eP``۟~5O*HY5'#3( **uhQyvKFgq_NT&4NÆlx}P)$ $R'|+NS"diUcL1K< z$VЛ٨wKH; ɶ<^5Uas{RxoBdܥ+owJx.q+JRylDc*nRl؆)=Wy~ߚDTmnlxM̍VR}JkunҘq6U?o[ h_}_穻! V\4Jy[krRh=f #\(e.zVBf֕_yT>} 8q"gIҀ`eqz䙾 {"b;D9n1vU*=]ȩrd=D7B]ֻZ6=z/0B}vۭ9gntszLS-F̣ C7 B,3 bwn^9-"4n䱗unLJZM\Y$ݠx :t1PbEEQiA tnvc \STG}>K-#j-Lݮ<7͛#M5/[Nx5@L~1-h5PAhg786ڷ>{E<"CU*4 cNPژ5>ɝT ÕP!tvfZt ]x+u; S/쬻)Z5H< +0s1~ IDAT 4yٟVÈ 'KVv2tiSB8|>z@ )75^`&^v `H *a]ނ^!ul7l5-N-}y] tdSZ5%.*kog_aFd{š۠=ǩ_Pt4ap^F ;.CAFLyB*mtR?g%d̠^ZTF #0ؑعaִ̻] mGnd|t}ԎU?6R'stӀ|sg=` po0/y;#{ẖ-lzR$E5d*츾A L?e-WBAν+ozV ӆ& !>U$K)/[~R/sp%ô5B,3[)U>{F̛")wV Kk x*ՂJz+c#*泹ňS `Hh`7,qS+҄[I$æ *:^0>>[ΝIaJr޴{mЅ7)vT^]ZYNӏeTUtl5y2ɸWNwoQqJOΚ|ܽ”WN~ԾrH8xsOݮ:Eh7V[ֺ>YNHuGthO#BՖL=mܼiƍ^),X J"EgBGY rM!̐)\Ǫ:gyH˖_ՙKUq/*1HT%GGKkRضUNvVL:HV46_τrEi8#Cg|($5qMjn G;tTaP(-[~_ત֓ãVNu6QHJj=&ys|V;yٹ?IeFt@h죋!-ږ}܆;k3$:E?s =ZkD2m'υS8lSA3,0K#7,Խ,kJF*Ύ|=nd=f jQҵ"jFk4},{OӳH`(*t^hk ,ӹ"Lݝ _C1i@%c"j`f;b!Fsja MZy2WSR ~V9wlDl6HF!iJCk79edE},GC^SYCNXz@{c=-:L Qյu2eRߢ㗞as}P$:SK1rʄJH0[ShNpw'MMʺgaD]OZ+rA:/Q<McEq78ٞ(y29G.aX") JP<Q@$,k Ɋ*YV OSUӼ8e¯\eNdFsi9SNӾRGˍ|QEMWJp^n2/2x*4#rXz8UL6ۊMn*odE#gV\ZS~uWӊ95'5yDE0g͎9kv༵[R,@$Z7\ßBq3Gfͨ[^ӮM<vYhhI_iu;(lMKr@6\tYڵukr"cĐ# ~8߻f%RԖdEUK%є5'8<g~iL lA7]?Qhaf=G*~>r {ioS=jeVQۦ^C"1 Ǻ`jٻx(*FF@{%x*P67Cb[#ګz*E߳ IW8˪b+z"3, 4 R3QѲP˞CkgJ+@Rlkdaκz*Zɪq08W*Gb8ңGzPFe~xūo^Q ,W:.BɻqX@!6xs;U$+@t!w#@ѺcGC=m: N⳿L{]tߪ/[nx&6/E`b%(|l->R_AHN:ױ[5$%ep\`_JqGtOz ]u- ('!Œ*m?6HKkS"~1l'fAoxwH&iYE\2}}k~fŅrm*0B"^Vki@jvkv!<44$$$*T9 ne@ d]td* #nu7@a$SvЂB MmxA"j !rۼ ~™J"g'Y/'$D,Ǽ[ k:lAO}8e/;KB[$md<^w:C}]71O9hӸj~9ml(hN&bX֫y㑭ݪ_f1Jwa5lV{- %N'!Œ*m?6H?xGLL7zlQŕ[/'TlΤ[tK@i殸TBdJiơ#=15wХ]C[g22tr@ B{GjB2Zr :Fdmn' i@ !s-&L3q+E:Dlذas5&lWBRU:tj @ǯz:[}bc nlV[QVsHlSe;v6o }ycBr1W,vjhW޺-MI { "* Ҧ OlT)K/M:mRR9;0 `BmtXfD?}o6jCyr|AyGʄ"lMu%^`=9ϥ5ت98Htv3&[ڽ̼+>+FyN`M+wQ"KaTfLnM_-+*x9X@t;ƨ@ux#aD:ES7Jd0|pv%#ь'Vh#5h^eK' c:9UQͨ/xŒ*m X TrMyԤS=g9 =ՒÐX}?~i]5AT i,!XԥGy)DpHxZEⱛlu/,HU[&t20[ZКFl\NwiDBPd4/CNU#{ݺwKa,V x\*Mlyѣܹ.NNCA@ o{+aÆ=|xoZ&cM6.B:jPH4ֶwf<%a>Dg = DU7fjYyظ_OmH#ӕ5L;L~ƥ*h )"ϊnCݙ?ީ:DhiyOlfSe`}be_Z* @eRV$?9lgʠUd|r 8gerD3[t:qLQSA, RI/3trj0"E{Kڴ5hbͯU0 Μ/.x:t4bPȪ&SVJ;fMJU$e2uhOmUE"eax6n8&g݋' RՖ|V$MvFhH2U_[J|}uy+# :"aÆU"k @ _V(5@ g5@ 7@ @ @ 2@ @ eI h2@@ @ @ A#@ @ @ }@ @ R+Df,m/]zlULq1 MWlfD .EdٍιКОUyZNAl[|n)2S~MNZ*96n}<'?U>+xd.nuoVyY+R+mev{SDov&*Sմ/JCmyp,D@ @ M:moF%r#3+~5d{ v%9F4wDZkln[r:?/Ev߼<&5%$v1y0Ƈ]EhZxzmĞ^oy]Jf>UUIaS\Ayvܽ}T.o  L͙dopV6f[^X>YEB^Ƽ'0^ |.X1i$5!Ӗ:*@^M/[{o=*,Slo˾k iD(N^lU-+l{GT>v_L,=%'IQiqz)hJv]mOWUx$<-`fb4iham%x,\r-+ĩϧ):.17?M)i4`k[+$(ߋؤ6TUj۱[NDOlT~u¨6uvmJ h&nQ/|QF::U!o":!UF2Ml{:ZJ8R{W$+v'/fzm: rvq~o>S82\>zi&Ukq A|H~\jj&/-N߲&'X~7*yyUaժeHWf@lB3d_3Kyv ȼYsQ@ ْhЭU;)e=IU+U+0f>z|WM)lP\tԠԠO@kן9͢_m#%L)%zJ S<m5x b$:rwo3R_Kw 1}-I{1\F~e_os-'Dw/q|!{K.[<[F ^ys:TZ.2Xha^st 8˩l&[2s IDAT[Ϫ<x@p4Q7wW BG(}͸آچ㳿[/[]Uy&O4rߔim{ i"NR -dVZRtԳck4tdRӢ@Xxo&uTEJ--/ڨ+7|[U;pKJ>~%urRY>y좴h9.$=_>RԘX9i o^Ta Na'66STWUWqjLpjlh僭4~{|_yKNZA$⟹0/||CIf@Qf̭oW-䇐s#26ǚʐ/@Q\zGUH(E| ) * q481׀ sſ_ M2XN% s#N4QU4Z ejx~tEsGIU׷wm 9je񐱾lH[XM[+U^}s?_4iht EU󮼈&zkPH:{;:$~%jnPuBu8cu ab;,0*U1T[껷Iߠ8 ReAViJO7g mL([M[7LpiLch9x[8'Oa yFGDh\"#B? Ø+-Y,8cW6V'[A ZN- Mye^#1) үF]N9J!-8 FMF JQ;_V/>)B ;;^cǚU8aVe=yZW.[QDOwdjFUq ߯CX(4,[i[} * Z5tzϡ #\mR W8'm#+2K Tyd˚y7<4ne9L[/q^R"sg m:X2HsW޸$8)]"᧖ts#v5gK~QG'SP0nQhױZפV?Z1V.Ć%I] /۩MD{pڳeWAs[MWV0u]+FZ/\=L,u0@Xz ? 2L~D 21.== ZKJc:/CL9/Ng/&Fa4ɥB[p7sk]RJt䍳w*MqYq}rFg0"ۀ!zyݒ@9'v{b]A2wj*[aڈ*wQn`2C ۛTeC6|z/.y6B"Eã[|yYW @ "âp:SiXK mGaXtMEJ3~Ѩ]_QۛoĶjVt'i]W~Tdq2llGg-)ϳan;4H4 ܞxN[f|,I3KKVH^ip>*>ҴL-9N{YGNjO^U$Ͱ㺳b|U/de/"qu5^3@˱ΔM}cm̳9 'Ŋsi*A׼D zn)0+*ܞgO;rϳqWw*MjgXHftnw3縙nX__medʖti7hAoL>|?-Ib]*uԮ V. MMh~Y؋+GRՆ 0o\~v  ]$]TMU2W0- bb=p72JJy-*S7bo/Cd=yЎI-wR! mHaFT.$ޣ%l+-y?F%hsx~d -#3y<_"]4*tz%~p~aWO#5oɪF^#"!kb)Ei,pskx^TXK;%!zaWXE(8tnڒy=o9yAص 1 i+xnsq1ެ\irv'٬-©bώr/!':ϲb-h8yFسϿ-(x%WmU#>ÍMY/2أsӹ+7蹳х֋Vo4UKAgAi+3ySq|@$(8|-5 qVS>mA&CC6?2حN.Kyg]l;=8)8c+_p@dz8&2m}ދw"YMTn)J7uwyg$CtЯ%. ׮啼]OWTE DnH!6JU#!BV$ +mj)}G,ʼn cgrzag*G Z3u>֘ $]w 4vwUӋHի6f>vLGVK_8ǼFVʃ\kaML 75P1l+0%._He-Yh!i=[˪InWH*1a^dg!/.1d$4#8Uh>Dɡ/?gfʸBw;BFI7Fm(K9:+-h*t)*曞) U* *b*`Du2T5 T+* –@o79t1/P[|K0L"?FƦ%DMx˘C6n _a*.Zb9'X0(\N6,GjΒU&xִ̻]=mGndqA@Qd@n`oq_(֭   #p]?+lSLH~lp,v` jkZ O+KE*̂<@UWIoq0!`D| ԂFGg+67lTo-aBHj#M(?-ђ\A+ i2N'xڃZ5Eӿ_Ne~S5,&I x}ӫ/Ɲ\:F+5G@ P^!8H,} qH$D"@ Pώۮ} >4ajg;lT>Ai#o`ȡv3RV "1 #% I+JHv%э7v{.yxoax!t݋O rcj]'Yv/,AS 4$Iݷ1!WVGr{ iSVj킃uW]ȏa@r6S7dʦS6tQrC'SW3vf&Lۈ>3GiY%e<+|l8~b; ٭:r֮{# ڇQ2`>aE{EC]go܏LH)f $wH|>H$au{|~o2;;eMVEc%(gHu2`*RΦV9#PP5E v B]CMx4 :Dcd]2.pՉLR?\_z|IPXu21ʼnğ2r#9a VCؑd?)ި`zzJ/qT|!R+ǁi:4ЧHN&G>I.,e "|vx`'Ϯ:Qs €3f[hL(ʟ!4XTA$>vLЀ" $e5R,TUZ'vJ ~- ,:!m\\S21T,T_/)Itݾ_zlykFowj* @ XJXgҴ""Q}?iɫ{ڽk緯wwyD8YJV0;MVMAOܴz()1'2KgiWΆHZT[jW>+S \y'Nb1T3?O: 2b ͍LIZUdp耒*{AAFU2XO"vvDǞLB~ƌSFe~xūo^Q 3(~ŗOTfs˟GXA/2zK;/lEAjQ(/7ES){#r*Mdβvyf_M?4ash;x-J9^[!`:|v7E<ϧͷra W isʭ]lKYOʅuLTRWlr z^5D!ݩǮؖpFD C%PQPO5{/JTjSe} L\: p5=q ^#JoOA,^I+j^9R{:[bs3ѨOWU)NFּG FVMo.8O2 E"AaA۠Э/z,yxFpS.1ԺQ ۍ'ol3}wݯtj@͛7#"n(Qk랧]} E¼ܬgΔDjq5>[ΣթBg;R yBa]#=TB^/&fr+%#W*0 IDAT EDBw2YwSrʅKVQ*rΟU  90"R ab9's9"?')XTo7q"E$`]?:TH3~'E Tߋ"٠(['/^yS抄vavg_f^6Rݴ,յoQi􄚓T,/K=62t$iK"?8ZSnExv3?})+6)ڮ!}'bz) ]t9$7bҸ؈dMs~ȬDR~>Y\.$RtڙYG~,cʵ˰fqYE\2rc K)^QuHP'Ȯru1"_꘸oZ`?%46Y7ZSi͋FjjPGƹn'6ik$M`Dz<~z ǚ6"g][e2+:*.ΘGv(C|n7S:;=|rtԓ"ݾvf/m Fy}+m kiwl+BHrѦ dWǕio/v$UNWXY'1d.HXer͵izW_ .YW-q;aFr腁$b;P 5JoS2xiu듊n{⊆/sq521[&6jsR ]Oדʼ~MNXl;0敟+LmI/ ħb=&~pEاya_-[nȥk۸i x?;k#+.wň.qUYaΥ)J@ؙFy곇EzxR6aS$n:cz*L. 6\igA!{KB3d8ZgܮZڍ/1_21I#XGݜ0IꋮkSSiƨCW Ky~4!}uM*'TW/ @PÁ sB }\zΤ%\9 o=6› ;*t߮_'2]o :T {Of_=S,TSi};"~z̧z*[A!G"xlVI#_z_z}*nӔ ,2yl::=EN+I =nԱ9u7 :zw8I#`=yW să]">PĻ  iDld"eښW.EVF/ rGl-,,z8˥eYyҫ֝I-I߷jlJyfFj1lU E99yW 83V&td@2T lGL_=Ģ1l<*  ٤uxn+s5%"@+鷱1msgl3hьqtidܱ1n'rz-57$6.թ02MYk{#ES:}J.V-uhHUP3CJח'Jx +Zn!rތ,I"#mT6l\C7~'_m;5njkoݖ&$DŽKRT)K/M:mRR9;0 `BmtXfD?}o6jCyr|AyGʄ"lMu%^`=953[GTvYݬ[3e_>PfLbZsVA51@rep/煞>t;U肙6^Ena٣LqnMފ4Z <\, :jcԂnr|=oCsg*?8T٦ /KH[`=zS~DK3#6ݠ's?F:2 "mƒ6y*d܄<0{kEmH6RQZ&KR}NMlLVj)Oδ MzYBsG`1 7l욈,#_8FU]˜o٩)l^/CCWkGiMhǕS% +Y/μ2prK!,>snK4_]}\\q׮uڠ yEj6A<2nBT5ӏF$k|7%M{l_ӆ7^B 셞G' W#v9frxnBTά#vqn)Cn?MP#xn.Ndp&%z>6 $g 'VT142?\*.YW:wU@Rq N+4-c6}.R7ERwB5 )Du]<^Yf Ӹ=J 2B7a<?LEF}p\k, ˉ4~Tѽ1!:NKmVVžBoSc яGʧӾv"b}(Ui/K)x@%n ӯ. N䉱!l^MMu[\e v"B,݃2MD?u{;[p7"1]7z _ǐs`q@BžBT֩OT1+0g/&ϫn}&(N:Y;?aJg\x'Dyj/Y>~ZAF!B%93:~m/9emnp%Gn!j2SYQ@OmA{!6a 6g$v%#DN?~84h_s چo=5!BR &g>c(3%B!=!2urjqhRF0m½!B!B! B!B!B!aO!B!B!B!B"}!B!B!Jv D勷ѱ0w{F$& ){ B:+;!!m7zKs1$ *fZ4V_SN!A4kQWs42-[,B!B!BB=kMĴjf,( oSG {,w1]3f͚5cT4qjB!B!B{pQ$B]?F2OeE:K[Uom ].E^'펻LԘ1q'bE!B],_oYn Ӹ=J r2B7a<l^hv54F(o?tCj)Lη%]@$;&mMZ}<ֻۭTRX8Vo-+(dT.kV-w /TVuOPK prB$B#ϟ?,Omb87AL1DUh݄ >}DcB -B!?D tml. UdiLIMC˷}ȫg >7smit5aSW(if?孢݄ 沋YfOREa.+  (ttN%hII3$<:=ӾJSjc#_B!P]mtsqWN= (CTL{ YDd=7QQe[$nܸyAh>Sw.VUB)jtYyAȪ&d)AVDqP!eJ(;\X3FY.iajev2 )+j͖ڔa=41'-۝X߽6H2hjzW*^ȒXwOPG L.{ؖ5Lj}=NUo;IϛطVu{VO6[UKs tjt~*e3Me%(4nIwqۏKP :ף5oS!Р:mPjd8n0Z{Ы[2NY~@!W3ruՙDI3%GN1s q""leGv.5j̇6[3ַBs'^Ĕuk/耔g>d1ֹ5ȋ Soe2lǃIli{raWAPG9Z5kdVw/_8IBbJ|:kqh* >Ao`P@亡?_?@=p;T=s}bWt_F/1,tҁSʻ >n7r"mƻ94V7ٟ8zڽWrKJ{e >}NP~Qt+ˍK+x#yò:zءxyep0eWHYwF}YøZlDIt.yGdVg7tKVx|pSOχasM\ -+$ow=!MK AyF:L4Ֆl W`kh6T.ryia*4RŻ^f t֓u*dliP( "}ռ֯/'rzG_ l qqh,2U(/n+W0o C!BHj|{㍠\6 S.^81^Q @= ?gHۜy}SepfZP.&'5: :n=3֖'͐5K]^2xfӄn{#卶p\V`%]˷ʨtm׹A!BJi#E"ž_X0Z&ӤR2Yy6>NYzݖf&J|?PK%A>;]MɝIGo([>N00MDMS;1 uSvC4@\} 0 'nRIe]#@W_>Aa`ohƤK38Vü:Z@`kmNbxGpgƃ:$]"4kZq*3!7+.r6:λt1 *:2fm]!.`gϗo6o+f/im=t\AN\![0uڸ"| u?E3 W/BV0FIFa^i_: B!!IC ّE}1"jФe6ͤ|(9h6AIrҊ&ݬgp_4$r19ePXYIbrjEjs j@Ǐdτ_uw4CoXdLŁ.R<|0װyw0bARzr2NoFn%Sr'UOaolME]~$#EJJf*0{a=e :/?5&{zЮue[W]5mZvz릓W5wǫj0w/3J ӎ&&?T+vhiioVe˷J+vX];$WǗʑp(}v/<1.='%!.5O f*R]}kn1M\RKYѦCҋ{'18Wk<ܞQ58YqN&žyMr0$9;tר0be%nDrJ~ ML@Wg`5L/4YR:tCCϞ iHxxeɛ)T0;hٷK,zv'L`T}WC,fqw_}v|oPJ.[Q[ N(J9wwgm7W!!}"adg1y1'ĥј2r:Xw2yyy7~)r]N3ѯf(6ًukGL:\ocMKGeTkԦ.U{ˠ35-n{w2 IDATѷ7ѱ2 YTIjk^G1 s X~n;[^QٕsU+u[TWIa]3+#'/ҲQ2 p>O+*!ŕ5uͻ0֮1~4Ζ]/]֬]oa}4k:h۩Z m]dbkzގRO&f$]Ij&|!_s,DuŢv+mۣv~= ='Խ-2cbMft9۩Kʯ[}$Hm#ZB"&f2@A) Sׁڣ'T#C~y~y#/e%dž&džFЧmշfWč[Z1vV D\=t啠=~|}l,s>p!S~sYICb’ 6[ L5 )[>@iRocs /ϙNs{4(n|IȌPT==] wƶ714:v4n3t)՞g{Z~|aqC~pP;O(81%iM~PO8~[j ԓ$DF9++t=/(*J]O3:%,1WMbs"N&7mח¶b!^Ah/Лo$Da"jD~I!Dw2s˧BN!%q)4󸗳,K,Ŏ{I6"ӟA+L6YGZS`6I d sqh,M! !B 2cu'-SyqÔ-CL,ؚ(YqGxQ\9N4(ye3zLl*Nd(R.R)lpdO PKYAY}SJ@aR8RYELrBZle$?7t3#(o'+"Ш80NXhAM$EY~] ϧۃ)m{ɧ/X}_|l=vkOd?5uǻrj+W'S|kʾA[t֕DsB1VʭK 'ꥫD{n_ʙ* P5"f|kW}/0hNCGֿ.z&LJqAАǟ<6dMWo'y2IS 2PBgd'H:ki6/v]>+u4Pg>yQ'_/eguWM)VvU];iyI{zy$?sb-43`;#_WC:V?’lmb$ Vngw7?{ Zw:e ^nqάwc"awԦ %6}/["/0yÂah aO8^-t'ca93qx@T5q{m],ho3MG,OpaXCڭFapB6m=#@hT_K JFRWޖ9\ (/2E,y *{ef=.BM5NE?Ey!%0Uo/՚rOok(94eʰt;Ds3}j? ӈN&iBƣE8pTC'Ɲι\SYuB'M6yӽ .eOSC'?瓨rw*{,Ѫ:7˞MK_x@f4W2uɫ3U)|K0NyRS ]_@[m~a9)<0C|vZ G@Ԣ`>3jmL7;mDzwpTٿrXY=={Q}B)EMnGۑԢ.M#'dy!(nMm!a|1&]~;|8ovnR MU))YcxnAճ 4- dcxoDMbV=ZLze٬#]\F״W/-dOV 4l* RєRsF$2ɰ_dC i)I*Jczڄxמ$>ZwRDILO;RBnu 6GqNMuI]n{PZA;ha M6x]#!&;6o,͉-Ls8u58fZc8E'Yw{!t!|io jTՃ]_m1J4}N\>T): Y *Bד"dڮ\ں9 nڪoZnR-B!ejOJb lPoA@F5@P]&{Q>mݠ\JP¥@na <1Gu{1@ڝj?`y@rP"ZPeK)Ut>f"=VY0Utfk/C#3r JMUS*F(&jv))D?$ 4;j֡=O`WhIx ]9WŸ@dnR(@magޱ|"WA.X ^>{qYԻ٬R6rQT=2P}umM nϊ)f>rc\qKuhėR/, i#YH)H i є^ jR/YoҠ!=9!_@ ڗ 1~ԇY?ALLȂ<_MDzgqx_SJ]6rL)4\n _<qMu ;h$[<%~G;A0 XjVJF=+#wBsM5mIe.8{$!_ \$ Ď]IH+rn\$ 9f2)9\AjO/4oy@cB/}隇j{fGp!q z4W@09q: ErJ)t?\0",'et [IOJB2j&~nnD.eGJ2>VKq剥SZpx;JeEw8=+ܵ_4 Y0~gW є[` ~% Y㿕|5$VIy_ZX jq(Rp trx D$sd<ӽ)gAٺ;e  kn&,? Wg Uo_/Tx_KQjIσ_daW]z;>عNSQFBnp~r Hi^1KdjǩsCs iiD% қ@3x-E[Q\v5Q3I[z X,Ju7۪1][9IaVdE|OÚ5 Xxuyǝoܪ"(ZL66@)y5eee5-Cs_[]D N _$ZK[Tkf$Z1(z VDRE咨$X2Uظ@ TSҝr04M@U)0n9.8_$l;.UUW0-r˨Z DqЦ"v˞>W}h;ɳ]Tr͉Wb?|ƟiIf}dA~c sGhOgHD3 jJ xSW2mMu*Yw ". ZYplvk] zSP81ѻ*5ܴU߈ӹ(h!/=wdjjj:hk=B!TU#ʇe|?Yz_ >7oуPswϗ"H[;BAk/#o)%9Ag> MTYb+Mqf+ wOU IrW/>E*w)2[)Wow0Ga7mٍo> ϯ,&$\mWʦTp5J6|(vQl6C`\<"L5qN\?]S!Q$.Ӗ.ek(Sv/ɪ]4A}7^J2o݉Fŭ:[~mn#]ۣ)kMҷŽ}vkL )e(˔Aqɥ\Izueu*1{W8YئC7vmI%^}'vZb$uũy~yOS}8cxYzzkGY;DmQbDrЦ9HbW}٬k 5ft7U5*nrȎ.1j{P_E"_XpHK:lg4.Jb`tpm`X5ܞSjٿ’ .[[kxQ.sF'} @,:=8a~L>֘mwM79GMܺ_ѻvaJ M"zk,I9ʍ&Tu{.B^T"s5ے}M[8@AB! DU}{t`(x6ut9s֋:If]/o|z^ :(JvWвiAT p4P1H/e!LH}+'o@%[׫Z)jWiDmzN j4)mdEU`/Y5ƲABztL7CGG^[ғXhk;aezxA: >yei"q=|_t yQ tiuhPY) W(kIK2oz ]7FvڝW!3}|`ZTZg:|ǩN*);$,tӬw&VnݮOy޽E/[8= M@oؼ $%I)%f ~ص/߻ kɿP"g>{϶2 ?_>{/;mވ r5J'l_6YH{L5>l5b @ o 48hSQ oa_,Оh5˳{~y |}tKaX:UZe KZIVU8pWɳrKpA>ta[ޱm֭[,\G?xSIFY}zyW Y[}^{2Jl^+;Eµ^a!-p&.Pf;z:I){!BMKr}ry[;Dپ/ tgUO,B9mG$A4{I]E qyzH/93nT-^y{<3ZUTs/ot@j=}Wg^Y $7`™$sQsݓk4Ē'_*C├z7g|- j<jj )Z^!ڛrNLJ^èR (4"ob>Хjf0)i8gwz B] Y\~3r+m"7 IDATpʪΤ*]nt]' `AK*6 UoRiu>iĔ&[~sonSL[;C!̛$XY/)x+(2G9u*|lԩ0Euv\5?>s~ L7 \tDZk:O> <̌B!W;IsWrNSϟraQagӊTŽԺáG<^~+Z:P=oґYGrKS7^I”.Yc;t%rc-99;* (rNRrw'יI؀T>VDʯД +d y`NMkE镩]}޻dP=uO<'Gw8mzzdw#2;+ťӝ)Y5ǦObቡsnԕM \5aɯ熠R?a=50`|\cC m9;Vaf('FIK }tJf~JՀvvGFzO x~eK;UC̺(ЉܼOFk9>ZAZc%;Aƺ${O-;2JSjI"dD^v=%2=I:))seP}k09| xSCΝ TIwn|T觫Lul;mz׏N#8CmhȤYyiOdXP>nD|V6T4TIҷ4jm%iv~ l,nkҰ!jCUhiGk(NHyACְo$1S ۂs4fR91\ #uJP yblH![⟋su8uSS7^za#B¾MI ;lM2c3ړwp^gZg4caDd-Z}ݳ|\w'yEh:ބ[\us5uwG]J9\YI\˴.PSG]^o'ƴ1>lR*(u^%{}st.qeB^˶(/huzVl=UV_ukUKEV$#z̷ 3-gmR1@p:H.gNXb`gn{ ƣ7ea?-thyF]wGOaIs7>qF#VL@roz1 3t]3ժ_' q)*v-I՛~Xy!B?tECjj;NxN\/nn ڲ +NU[x~'9]˷y|X\V\'.κmi~s>oYr{:pDN?Q-)H$ʓQ&ÇΩi#۞, }G5LI~Rg>ru^4j^|N~jʏEu+;sq5}#WwTIvR"s^qֺ-* ,\M 9s0AUuY- vs .7Cv%=Hbw6[؝Caw*߹3%B!(Hqt8DWUNHʩXڎ;M,2}@ H=#%IVL5nʤP唵OZSH?ef8/&. _prgB`h)AYt*8x[K59 2*=`7^K{'!K ~EN]o]QA{WooS1ENU~ᖐ;:YI^!JIZ3tY˛Qg-NNJB3v½Kʃbbf؀v*Rt SL!:͒&yl],(0d*]]EʼlkO)&iU եl2F7\dm% $Y!w@s6r1ƪJ"%dv}͂rxd6R G$Ml4L0`}MEW TWθ.H[JNhtm|Ӷ]k|v>4$P5fVVr1WGV _&dޔ,\:\WIeHv8ӝ-KHd qs'Xk\c`;7MC]N#S {_uR'ol&.FCZ>bޢ^d%$ĔR42oưӟN;o/]-51: 'd\>nΌz2 /.iٖII$SRI+tRjޤ_0PGAP;1wT#:n v6 N7ddNCΞ=@Lph8 loԼ>B!ho>|fϞak;Z[zƮ0pcT+OnV xyL o4mCߤ3/, {@La0w{F8Oh{n]3-;W&W:Foy jIhRB!B5xģ!+e?39yw)6gpx:`7!B!Լ|7'PX8xHR!B!B-MJ3+U;g-3iNx%=B:>S~?pfB!N^!B!B-{@fcqZz}/؋!j^$R/!B!B!B)D!B!Bt&bPufֿЙl?v +BB!B!B!ESB!B!B!п{ B!B!B!:!B!B?W%*_ DWdDSB!B!B!п{ B!B!B!!B!j^8wt=*gL+73s݄4#8b߽w7OʗLA,? 3m^hv54F(o?tCj)Lη%]@$;&mMZ}<ֻۭTRX8Vo-+(dT.kV-w /TVuOPK prBB!B//xvk] h$A.כ0/mTE1o~hf?孢閟uADB Ȍ6]26/x7Jxtz}?u%&*)~G,#Bn.NbsBB!Bz~[.N\~Ҝ.|p͵=[\ϝ;3ɢ7b_/>wr)lOz K[5.:*sR.\~!뜁ʒVၟ|zc͢%=ꬅG٤Kt0 ͅAoCϞ 1 ,#q͉pu5ƵkCd)Wf;\A]'>^4 O1\74óAN.0Օ+"B!B4>p^Fi{ICr]=zT|=+ [ڲ-xS֭zJs]a!3Z(J=&< R a+2ib.0'58ښC$)x ? SO=~!'M@O=(P;n.ԣAb|SSB!B=;_ ZX%w |ϳ4h= -wV *rѤ?J>xLd-U(Yϭ3omyͩ9qYQkΧt-*ҹ]vB҄1dHSB!B3#8>;Wo;c2EՠIˎmIVeotiEnֳWO2sLμw:*T#8VVҠZE{Iة@*u#(v ̀ܒⴒUk?HxmKP[,%{3X/CٟrY.AFύ;(KϦ&Y7pGlT7| {j*^ '7ɬ^|wfK[>'M'}-fk kV^o>\h*>y4uqʒ(~))5)ldsut6uR_~jLԏd]k Mn]{=m*Am\E|F)ad>& |z%8&:(ZZv}cYā[w;zpy0@)Ir'ƥ3%u>LVJVVҾ"|-Kj)+t7sa Wq]z{9zvzcʗdb:Q慇79j]È|)%411] ^hIK1NV(d-4Y@iHxxeɛ)T0;hٷK,zv'L`T}WC,fqw_}v|oPJ.[Q[ N:;Ի%S{ wIlUư{RPDchʩ`mLY|!4&;mw:Dz]Dt(zݞq?n30>P0 Cޅ4"qμyͮ'^[u8^'osrlY۳;,WN*?c涫+Rڈ!-ʌ )Y*:f, Wׂ'>Oy46W]Cel-ӑGYWJgܪWJKfڤX>#+5kխZِ}IAϓĂ"!5nfյz;Xݭ+wн{O>fH)l.ܪpuۊ7=>ʕ09s:}f*tʭyW$rҨH6)cѾ"B!BU7hiў[gDIZYz/Ἅ80;<ߢd]V pw_&7 9P1;KP(v26,R=0|niqDq&~Wޚ-pjf^.X G'G&@ݎf. g yP,90gC~O=) ^if\aq;~m uYDkMV1xxocCuE(Tnqt/*],`xt/kNYdϷ,8.w~p.a2Ǧ-Vn u ?`a(}gXV)SPMt?̽]k '9ۡ`yIi <[[{WK%֯^ }HH˗Q,pNƕևSBSױ]˼eX^RιAw. rib ߷-YRZEwwt~0#[rSqŶZ!G ,6~d\Ku/*.H M 6}le#喕OK~'w Esʋҕ_7o?By'}q*L~2}i+z˜=}둜jHS^s%r;<(H{lَ [ÑK2 ͦԆ1ŞBB!Bi?h7,ֱ>=0-Q|qsY?;zG9Nbá>54ْZ: Ờ)t=W[eznz/ObL"'G!M/:0jRk%.S} VcTP#ˊ'{&"FthJ\ Y=ZlL&~G/\z,зvRc͓YV}ch\: XSMxA!N=oy۲Q(?XGςV/bO])^w}Iv1?yOun&jM޽187kf;1B+fiޔ{vAa_omk3d.͌Ņi/ ,Cهb.KNocJlk|4SuzWlv3)Ij[ 堥LJ`'͟ϛccXG;g_vt,ֲjI?_$kۏVd&wB!B*L02j0q* (Rv݋{$Rr5cZmWǑ3+yr T_v:2q)KAb6-5;rg4Sj-Oho?֓A`r|n4?g4z-ԲG G;.&jv3TIC}( =4r]o׼#%=ahj1ap_]VEc8\snIxP[_%t+β$(io4s>jrWm⺣mHhZQCMrC(;{n-54eۓ+dUUPLg^0o+=dq:wcA䩓wr 3L/?V*Lݛ!͞ꩻusjĠe&J$);/.-/MTM%*0W-%;[[&ץk.翺-P٧Wt4UgRzsgLʐI" ߞ8l-M54aQWk?ŸB:5=7UbPJn IDATjGԅ$Kê%e>qvjJ4VKWk@LCdy{?N ep;X?.Jg5y#{~2謯ˢ,zKc}3Og49YdrڸfK׍ji8.cZAc\jŤɤ9%?b}z671Tb15R̯h`4&J\=}Ǎ2q*zxZ\Tֲ;*HxB4vڈ4 UIq|ke)݉UDEge4viCz*Q ]';5 )TV+'c`2Vcӕ T(lPu-˭2gi5G;8!B!bJ@'hu^|1*@feP3[oWi3 \s L+>`e*A IdaD#_03&IB_={>f@eL2tV.W`~*:ޜM 8%uX I"iDzEzTLF<=vijm;rfB:}:;Pg9ޫ ?0m~O$'jH)Zn]7vnlx ђ0 :1eTu^GwɡK:mk_?!/%I.O>|[,*gUdϠ$.յ*g՘5nωy\m6V7:UǙUQh:Ը=39ϘYe);c cTI_vf hSye>ވXpVk1 BւԂ$ o\h珞A``5 ʥ4 }# +>[4Z,`'21Uhć"H&h|AET[C*/Q@Z]\j^,5F`CNP:W`Ҽfٓ^]I&qj't P@W+2 r@&7j˭{HdmԼS)D!B!oxU*es#@ua-:v$^(dʤ`{rI KܾwѸ֦œ{wO߁Q}$q <`{v|)X#(h*hʥOiJUń3{N>Z:T^PԲf@gY$K~__IBjƦ+:h#Nŕ;5m!hFKf+NaDGO7ZS34w1}LAΈNi0nAqІo<⊖u믧giաmkͯ2ԝ85? .L׸YZV 4D=*Sߞ[s@ʭ?ނJuRaBJ Z(mMLتCc^>h ]M RYO^2C7لUK|f5/kw#2knҊKж>fpÃ;|zMZY~U5إ0C,T+(S 31M0eѪ (e)Pdjm˭a1nؚ~7j~ۓo,R1c:l^·-w?JT@&JM2H#呟eΦ4jϲC1p8:(Pi8A6_,^xn]R+\VzRVX[Wf}7&-8IkC:5d(p/E\ jL5$5w|+&3$(5ܩn*.-&h( ,*Ui꘾Cڛ)ѩm51J)o\`>o&{Eؑ+,]OԾQ /5syUE^ cd(!;j1I!~ғ"^}zѥiYȚgHiďzgf߾IP9.۵jD3GI;'OKO6飻ùW5үEr J2E*Tn !?bHb>EMr?YL!B!REp=atrt>7>]|.>$V6%$_5նmGaz ٺ cفP6H{!.vQ$}\zL UBgt=?{U2$jJ`RVړ-R< V omc/P (Uyp_PC U]*/K>/ϫB v~-ۍ`so]'IlT{_ 4waY5/լef-[{c)o`_!@!B!P8 HɎ}lZ;5_ce_V$پAX4%04j1BLHkxU JR$?P#{˜6e~K޸w[\6[o*˜N~0+&&5WF?s6?vJSeD^)bJE0GFO HBGOX)XyIMzi֣Dx)ELNlZAH, UIr`rZYq K C*TB,H9T 4[/a"egUs@uIK_8Vۍ48XN6t G^Jѧeњ1he !䗕IG/׻+E`r h*_گ֝I!dOkE)陼s@w/M\<u@Gg-N_}†./TF AğokE%]7[.W)"B!B[c4ϥI",')|ETM> ۔fYbs)o6S#l?H;^gJr~v򵃋F@ hM\;W/ ʥGӋt%S}V\h=W}N)ŦY[ͺ:/$X3&wn94&sd~k/ QC7 tl֊.per)NIei1ު[aVv"\zf2 'ΐʼnN:KQNo[p?RɺG Tn!hZB~̠~ѹL>us|= 3^q^dZPJrNeyu^(htvR}ˠ6z껌b))|r ofjyeK|s9)J?~OF2FHXܦ|,a]{: de 뽟&쌃G]/S5 *k -(ria`ׯ\t.K\ 9O}7,KYAQItXpSNJ>lŢ Ÿ =N(Aկ߯\e)bmL̈a G0?/LhY1')m UnTy]vԧd#Wf 홼ʓ|֌IxЬjѽAF9_h3̮nyӵ3#}ËvrDTYJyFҹ\A6y*uv^ 7{|P,ǯrI[%%zQ!cCJY%t"QW'W۲KNTmF4 \{>D閣ph -utQygA;%+κ=y#*;+ɱO&u0Jr/_R&ϪaEiG>ZZ V8:[go9NT|ɹXKtFv]/12\l~/r``[U bӿrU-_=|㌕[RI\O9{(I/KJ.a㞪9_[oz (JF8|vpw5;tjJ{$zn-2yV/ZL._!BB!BH1ܦc#|L_Ih9:SZ}3GoHm%$ {&Ҿ 5t UIEêc;BgfiҩW#K`AHy]D $=6>eU1nd;oqw~s7ÿ1gg'K bҢuAS]ga:gm L՟$>5,j:AenT ]CukA)p*݅v@s]UabԂ]{*?ͽ=l̔4 }<1 !eJ߬PCг|Ic+)w~OB>o(.Mt*ivqܪOjۏK'I ;-c{-EM]˃5OjՓ6BOMP*\Nv,}F 4n}S#.ǔu0kK5%QVn߶͎eovn(|W\Wή7Ck.Ie(51h]|;:xboC-׬̈́[ѥdu~?f\kS-7I,vk̦T;qF*SW޵:AP9Zv&\Ѧ2 v}wFL4i?9YKGimQ}'%mXhUXBPn5훃(֮.c?oIQm/VC\P(d2&̽mO@KՊeMoL Y?J!` ;B!B!-hm. f,z§}klMHJ}o\p\!E״sKW-956˶~GͰ8α*C#?U^1&=)<>D =˅m:yAЙ#FN}Ssl-!~o\f܊հ4K[GKj|kmj4~f>|SP(&jm;ulǥm!B!9E=x߻_J̞'<;v^ֶΫ*o|6*Ӟ!Úrf95-לy"T_2"=7 KK^ꛝx|jf X֬2QM:VZ~'Gc5L cZBݻ;ש!ߛzHũ/'ĀBj#pR)D!B!~B|^n%tҟJn4G5bH];47dˆ x7quQY{ }ny֚ s`N!dvɖ? (;Rx w^vfv Bo]P1Z|ܒ#T ks܍Ox!w6νm2˜iu{iڊMf-ln ;7B (cA!ݒGSC<}W"ϗ\SF[T*oީ >}SB!Bj IxZث)4 Ӿw|tf՟lXڃ|u3lIΛ:@;J1*n6~xuꀌu/Ob~_ϳ\U x2bjXUx|XbryS 1-~a^- g\/Zz)j˒+U6ћO;^rIm= (˗ZAݯ'LޝT!kl۹RYo9[~u+r" %(XV,wyrzֽ|7IAϓĂ"!5nfյIekEwzTqa5^lab' 3Qs[~nvmu^WJǹqoTi>vB3BVA+9im$B`L?FQ׺||隭}+r5 tٽ}L&eBFeHkҶSfu[mR7&YMǜ| [E;=; (Tjqb ~JЩs)D!B!y1n /Ң=Έ|[6VƁ Soz>}1́-J6eދ|<^9werPZgɀŅ?yO!)ݞTHPTjyL_,' _Mm֔m)[T:,uF*!kBҵ["NaJ0()%q!{݌+, <;Mϴdd#xc 0U(z_T(u`bPG?0;E} .ڟ⏳V;ccbv':7! ekws YU>6-nԷrSo3b43W&8O3hYE =ťQ k}M$t;\ڲ𭭽ګ@QVDߥגz6xu]5( "QĄĄFu>GE_Lwd߱ܲ%4~~Z8X籱û#ǯ:~d!)6:SN_-Zyן0|s~1I_!XEE29[U"#Iݎ:@1ff1Ӏ-5U42^a-;bQ3mAOHz,mi)ָ߅_ȏ\.ruݗng?)ZfX֤͞;ssiƹ;,bMY{gw[;Qh4%6-X2f3i”Wuaٕ?+uib^NvFt4Z tԲ1NWk5s}vR^|+=:+/bҼq5O"g j*.ztqXZa[じjkֻ(d5HVu$]rRe%G{J(R]ys__u]^` uhy򑑎%uVM"\~1BLE*R9 ֹuStʃg7ب0:ǣs,QdI 8`AHj{/qдNVM7_ZΠuH8#ͫεܮ+SB!BUaކlUwPaHEɗ%H*5=;bkƢѵLۮ<4V#g;W,tdⴅ/2S3m6[j4P|o#rBORyIWz.1Nݜ} QƷtq/ybz6J1 &)tT~=orA;UaX*:N#@39?b~|C:ZTUfo?bP"oOHDy vlaИSNst6TգHv"SYZj*Qi ˶'W8Ȫf+L9ԽaxVz:t5ǂ$S'Ktf!_~T7CHg/6d+=SwR_CA%(\U'GMMHRv.bмbh7gS 6`+X63}#_6D.`Ԓ- Ida 3NI&J:`Fy7EUZ! Cw-Gl#6%}K+۬ot5|vciTQc`:@svKW~ ``s{W+ͪ߭@RȮRM*=NxFV`]~r(@$xcOb`m)^ܗyGz]gFN-e."{ uUܬMUggzB!^F|H(d(OU[C*/Q@ZWKŀQ% :>C{>#B>eOzazkHFj)@ej]t6oee@Lnڗ[ ʑی7yu7wвj[:uү|h^‹ X휗o@jF)M{D2Z>o t+]; *d?o\\b`O!B!B!TmՇGT ˞GZꏄt{0}Xg^/JM2eR0g}ʹs6z3}KZ9ox5.z6roKzXs] >lQYO 3,I%J+)~S}Y_yQ"pi@x)BlũWV}_ ?-WY1=cvFt x]MqC =6f|WԷ#G?Ʒ\=}=Kc햦Fm[k2p u'NO S5T2x9 λ5GAZmc=<ÇikФWEB׬r !tumW6WiQB'f cZmU3”E֫DWDP@)Ӣ)Prem˭AE7$Auuo1MLE-+R sV_: D.NUEzd}X;8$% 6]< @0M4S.8!B!/kP:UuQ??zm"ʻ9w#KrxO2gxg *D)T3FYc I;sXtPsR0j|9T 4[/a"egBd@T8_`fΤ2Qbz,Hy_75D!y&hS(5uc̠6Me A!X٦OY$Qu21eZq@٤B5D%d=M~+ASc7r!N=!B!8'ȥy.]'?Md9I&vL/ҵnZ_;6%墙G7yf/6Ac`!AXl%)Oߕ &uzε=k\{4J\b.~kDȋ {{qݜkqMQb, f]}rqnjEy[m%@w4gxZ8M^(łQG78JՒEcdMjc0E7E $) )w.FPwQ'IJbFg'vhVkOӷ :iW("aW/GVaVB{eK|s9)J?~OF2F꟬f67g _a&S.LX4)_,eg,>M"#⢤wNdTB7>MN-IHR^xHNR&JGIRyotLR.8{R|zL._Tb#;9T GR&L9Sj_n}Slpg~O(tcZ1m\~|^G 20k1@P]!,-7;-0W? R e^vBTk3RV ,WQOLHId/351>8(B!B!}Ƴ|#A&mLsU дƙXzn5{{qwE枍k܈5t}NnyJ;5h?u=Tl?zߞ/% ; %PvLvޑT;֍նpg 3ǔ1KE6P._.Kx1ѣ!.dž"8OF3y'$VqYAi3{-sf]k1]7fF͇m4ﴓ5%jjs7xPʰɃ?MVIC l8X㫬XTfy^>~ExNغ,)0ԣ*.1RZ:.B#P1n67]N]ߞͯrݪZ(6G},]ޒ{]a;7XUX& N:p1?=졐*'7[,)ㆍ{_[oz (JF8|vpw5;tjJ{$zn-2yVcf 22ջ8j1ڻuydqDKV_*{mjir1k['4l?k:mr1chUzM+bxcgn[:8!B!R ؈(5dh*znN=|Vћ:R[$I3 Kޙ ;Iƞ^-/r1 [3adן ÿ1gg'K bҢuAS]gaOv?od/SU:[t6mMٵ4Vam;XsڅFp~bz}p2il%.]\܏ɘyF9tiƦSLC=.v;V}M%U~\:IA_Qn#([nDE%(j\]qe|iDzl:BUumc5jLxqqYZk}wDŽ][)1rmv,}vEPwZ]E!(lvk~s d&L˩Y%&Pu mS80bЬiڴP(_qL Yf:oHnY]w!A]R^.^]r !!R/ɥBHB`Smp]dȶzonròsW4 Al zī<~EVR]zmקGpLW0>{=6mzEQrr 󚅨kz^Is&KA$-RϹn_>anK%D)xda SW\a6qsӳ¤"&$"nƒ޸0+k=_=I   \l| wݵv˱B ?nNZuE2gQ.JsbnFC7.MoZ7P>C0Ϭ{+m:c3VP9-:_"ᎆ zW$:\!>    ȅ͢>|?[>~!I荛[={7."\>gܽ<+BxN{帠4ͯ"   raI^ew=E|4o"2zg AAAAAARW AAAAAARW AAAA3ywCEYIAv S w,ӱ7CDp]]ER<" IDAT'N|ˣ 2|p'B&hp,b $c@eAMPe3< ]eoڳ֌1 R     Ͽ:vLk{VMى^"+fO8K  ^ίbUHA$;,!H_'~vޛ5XhCG'EOfZ[q>|u?/?kNsbƍ|Yo3O?ߍL AAAH YYo5W.=-9!G8nyx]okG-3{/V(G%O|}S o<͛KtL^JvhPOim6vqʒjz cD?V^HtqZ\֐+   r z쉋n5([>1$k A{*cͳ c&Mɏ`~ZRX䱶%>.V#nI:T,t6"   H;|c?_XySb?yo:yu\u# ɜ78' ҧ+ ;AER"Hq0VM\,I0v/J<ڈ0ݾ?}_/cz6`Ay|ō?^XU^B挛{7qۜ8 K6?8XXMG.~[o3T[/i:#KNN[zm^~WΜZ ETꁔޜ͵ſy?k't~ٗlWZT7yE9z&Dssj+E>n089aʄtmY¯-O!hMo|]X EݙޣnK$-(ItP^q+eˋc$8[?|ut뎪]]+g֮O|M[s~>ZQ8rgtv֍w]dOfAenٲԎ*c^8Ia=δӚz(B͞znsyo} Cu'HX<G]O9A<– ̚6ճ:z!^T`vRo|Hjmٓ?DY]y6* /:fz1߳ds28|EtJz6'KʴzXEi fg8{LnSORz`&gL[|IG+s$O4a p΁jJ1drEbڔ':pS [m!?|_i vumLb5bh/x5=K!fCQ}+O;߲M΄7/,1^(` {j{R}W+;rt|ݝ>u}́+   ҍ7?+~2O߽%Wg=}o[GE/ϹY&Sih P @ ܦLZ[ )]y۞۶#=]]7}D4^僧-V*.ڃeGPPDƜKղU@8WL?y+ui?]7 Ãd6Gcy#QSL],\L gC?MSۿէo=ӷ|gJ?86SX!_}OK,;>v$B5ڳ9|5Po~=ZWoUek97|{crۡo~͊֬gw Stxr Rvl{VDaWu ]Vsc_v!4M⊪uo?.մskf7`k)Zf}Ie+(<~ĝ-! nC~ok7V !~?yֺueՍYgʆ#t[1cc'ݒҵX՚n ]4?Ч_ڙ=sSAsiU@6(!4a>drǵ˄$,6_˂Ps)ɛ,4\ %!hPcg OTX{ W AAAk;v˫o{ywoR+6}p]4o7ne՜[s︦n"K3hysU#c9+NɇwhZ1;hp/ݝ6> $'f_[Yv=|z:ˣ?7Vv=(,^z`MK_2V muPtX#afe۪H_GyO!z$>euƯ޸?D^`9wxAvҐ=/WO3zs[۾?`9+!M9LI1++Jg7{.Qdʆ[C>GA'>}d-xoa\\.dTiIZ͖5f,j鴫&eFD=96n2x(b5*Dnjjsȝ~g)l Iϡ*:R}%l+NKæl9nɩn:{쎧(wCےRpIPHYTQ|Dӫ(a -C̠d^;5.olF[۵XaƤ.[uI:94A;hrVaW *.̐!q#υ1 Nk=A sngk-Y8og8e[[|_ H[#   H7bl(wL.Omݨ2,C/͊2Y0ϭ}۶M`p_s7>|Dۙz|}<4)Er 0ތϼUc3.+{;e$u׻Ԕ.!R$^૟/ -@U;Q7ظjxҧ'_ϏTl۠phG8O9u}a$T8/x,y'Nz_ƄK$#H1wՃlgVԾSp_{l&Ǎ^s]:_{s77rH 9+N#vĤ 6NXK=o>CY~}j\ lqh׭36" AV#cQ9̘ `~ZjN~Fjz5 Mi90#dpS+Y-求#f 8<@•BAAA}K`ܟ@d7lLʏ;x2Gj~|C׽&EA+c׼e!IV/wݻcy \4 ?37߸ly5EQO9a NT' ws}όsY D34)(tux}\<㵗^?>{/ -BY/P-P|W4My=)3y ž31`xٷa ~>3f)'5aD0[zr5_1M~$F&'6"k;Dݦ=D{C_mAT?i>Ffs,RČ FkA_nڜ/hJ]Mݵ0&KX:UڡLbͦFڈ!do{?wrwUe'_r_NXxXZtHr\Բ3dg.-=ms0:qyz0,P:P8 ]z?m/ o,o,oo#:E"IjH{cR]O$w]9+VQz԰#[c_S~g?O8doxOùKy͓&S<@/z>T8?׋O)hik?dz$C<`a^0\ư^/XB.>cE@Ӂ5QM=&7%`[7@>ay"   gPT \K \yٯ->xⓧiN}ّΡYfҴ+׿{dBgv9'0LQqrL?O8!a)lrjnHu {eرO&/ny>yn}&o"k^e6?jPmAiH wu[Y?r cPeѕ`&}Q6IRX'yo poa¬}{iN\=T7=ۂɖ+*19919߾1"S]3@b+pe#y `qk?bseE,vzSLjHE6 E^Wm1h6IH&_n],6T䱶㣦\S{  gHj|AAAAAk|`;ˮcr Oy^i 7eDs֬\{S ~`4ysnhA u+ A!g+[#.`T1XrcВeh0 ii\)Ȳ&N,!ݞDOq(ozjPe$'$Tdgƽ.߇"PAGmW[kѻ޻I0f["`nGW73i<ږMKb_EѾ@БPa{[Is7tRX{LM|綳M(Ֆ?*Bl~$ G@{]~ė_~ 9{MMhmP\&x-pAAAAcY-oyRtnu yn14n L^D 9o>gmS'S|O.B.xpwXwo_:iʭoڳGoJF({eZ4_d߱9Pnć}ކA%uR if 'ޜ@up_))wO]gd%/o5}U$#表!>iZO=mNKi vR|Q\V~\EOݯ *PWoizלe9UYܲ4.i\ Tߋ=E,)gYoK N/M}މS/~6w YkO/f7_:=;8|V?;{1-Noڴ]NcGoxjӳ~~~~͋0z>_[C] OFơ|5m92)Ъ}Ï1 P/ДO~T6|06l~&OOr'yNTV[p{9,5e'vlmv:z tO2U}sľMkw*B;dLhoB(y2oj;o.% ,&jz5) `qF4.F,~؛~-R5{"H    28jO}dם yO f8yk<Lp׈f}_uˉu=?]~ۼ"7TSU?7PX ;^57>9O:aukny|Û{YGlMħm'n~"}1;>f5gN /^ueSޚG}dD>"UNw_n>|{b0ӆn ~_בIko} 7Dgxm|5k/emIs?^xYٯܳ°7K4oIG"-*xq+*QQ 1AW+DEpD^T]!*  K2/nh?Uh&me{o"+$ k6~LuL2L@"#=Z Un ޘy˧Šz#MԀ!˖Izdw} JC"cAmRό-m-߻§i?HNQQF䬫gűΐ#{\Ӯ:ws}@ZNnSI%λjRh?n9!\532`ԇ6娉9+/%9Ԑs:C< ZA9eV^1=y[G@k:JWČ ҁM9udUikOKOa AAڥ)*k6=4+H c^4R]b|$¢3cn46:^g84j OEh^YTܖU`1}ggm(+S5./0e\JxA@K,.RiMvD1ceX[4j`9},G'%v &=3ėmz q++aN3?5G7{մp|ȁb$mi$ IbS(h[?NtN#L|Q4e(-c$ $!Q I)m;ˬ4KwYUÍL#d,_.!vUfp,GM#Vb"bfeV_e{~-hsw͊0f<4`ܤVi /B"ccDOۊMOZtyht׽U6_d\j:uw+|Yao#}1X*]#a0':Lˇb*G8{b*Pۚ}w tPPbM% _yL V]7S()/S[a*7SB`M0\>h4 "tkii9~8EQbr9‹D/(T%:&Ve6L?=VXkVm4NMMİ(ve2O`u 74!<&@O>RH6_(H4-/>6iTe8o71R6.j8u_7rX6x"T-{Wgdz.BZQ4fGwRy[*3WΏg] D LY!!(HGv1S$W,v]tF:wє@:Tʦ>~P,3(Ң6Zy ހWU@mWqPٕU}䰦eݲi.ؽC<dn76e,*cpEpBnj "iq6ಙM&uMdڦiL(`uLX"ۧ4'FhՔ7kKc4htἲ' @6ES]Z J`rq8mW+)"{ J|lx6`$8!#rMrȦo*+H JMYC[&qSyW耳zQʁ`_2{C3guh*+Et>ګkC Id!!QXNg]@[.#z"A>=cTBc;Y67vUwcI\p4ֻZ韪f ;kQ/N)͜0>1LxckQWTn"%2 O "1]@5X*Tq(3R1I˘G~}^`n\t(-)d{K9{0] kԝL}=oUR9Y%#2-JKJMwL-3Veѐ+% G{rN 1g%+|%6k]t4WƗJe2IPG; ޳ж꼼3͋#=G5#Wdwf2(n aqm9Yj:Xc8Q19=@*-9z> S'NB<6{ර[?-_ bZذߡM۪sj4/f9I}DS{8D>LPGq,!9))!:D"|✜bmsqIUSx`LF\温a#Ջ-m ^+͸1\UJ}ӻs3hk k5>Q8׽-Am¸1R?>i_GV'eU<}|v5vev5kM4;!L !tve q7+OL_ !3CUYRk+`Ƅh蔀 v,FGGϞʦRRɲ" kiW=Ώ"];21Ox%Z _GA~0%8>MOנudufM#$Nݨ6nOaGTḁ>qB1$iIuFKh WPSB1%ً椆O>yK'Eq{$.^ zgj<4>Ns f=bDr5NC۾NC =R$ 6Uj4!L [z N5mw+|U6\juED!Iq^P&MfF;[(6*K+-F C"d>{Jihl[vH/Ցzmrm:֢R54-#1]).QQUGBc3⻕(ikTz qi$]Ǥ,47KCSbECQR~5?gTJl!b)n\թNbff/uhK?̥KK;Tr/co5UuMfby|4,:!%xISQZCEڵX{ UnǍSXD>~?wTZf, ܕcw^mOK2aيtyNi1q1{Y\ƚ|i pÙV Zt1TxSMQeJhhKT_YV]ߤ3;<4, 75}9mE߽[sk\}\ʜXVL #WO +-fɗ'fOUHY O6l+ ͘+`vWkTvstRZrAע(P7YHl8136_]W\jtsqc}<̟uHPtQ}c,4u Y!lLH|v4ZC =mlQYnAĬ N?p6Vj4);i|HriˋO4U; Ml2Cy or|f"2'S%5 zq&f {@V4npB5vm({Oa_֜޷Ti{G/!+:L妣O_L%M CT032;+̥{Sy6TyaڤӝITVcpBixL/S)k*+MZmnN.j2fJVdltɍ4 5@4i E12慦`YShpBh7B5fӹٶ2Q".eש v68tѬTI/,iֵ֕ԫ[f,#4H m|)i :ٞ_.cvu\",n3jiyrfG)^W, 2ܖYDth{_O4ך\߸'w(LLT"rۙ@x|ϡ2JQ"mשRgPVHΑ`%PYMnQ\ض)M^W,SDHII-=`ƌKk (:+dݶw5tB0flxQk.+^NMA’Ⅳښf"$7*>XkQR'3tM!=BR$,Y¸tN*"`9Gm"F[丛 (nq+Xg"J4kԸx|WNK$hjOhDZ $XWgIx~.0>^^oU4N6 *v&gЙ) !T*$&~;mhlr7ɍJ4j Fi E Ѱ]Ǵ0.NtEcN4ը-)m6[}8>a8VLZu-  uyOb<3*XS#~ُԧN}JJL5eTHJ%MQJIąh*L%/S9Tϱקכ) $6z5)%'DrJKmMkכg6iD&b/>30.$}q!m#weG ˦GƤu&hpN+7Nh`8)s#dl*jOńM`[!ZUFZkr"u^)˭?ޑ϶:6VC.+Bm3IV4!KrL(C\,=>sp:;WY~@q̮)"W6$uA]C]wh Z0CgS%m1*{ʫ1%I;pؤ^!ErfR`N.W\194~m5Ђ^1 !iݪœwښ.QPU{n؎A&FĎp"DsTUek_?Ci+.FH!ǔ&s:h|guo 5!i٫&DEDnq)OΞ6N?Q;,-J}?\f"&-H{l}bL& EWp\TKFqF qBv;@A$|99N ec1i cP=ǫ Ofϝ#r]YlJA ~Y%D'59޷A" ["u Q/a}ܨ)K$Kڻ{i)fW}YHܯ{\y .I\KTC={&'q^]YR:s^VdWkr8v~E;vvn-Rȉ= IDAT'˺CmU=9aȠB6 gRUZ AllI B(5zSY` Nqg~Nqen[s;l!"w~,5=JW.E=D$/BʓgeFu 8Ք9zٌh+T!#5z %64ہ+Ԣ@ E(9*WEd-Y~ܽ^0w>s]'JRǵ-XQ<̟5HVߓ,?|R=TseI2nivd2_nMJ1iѬD˩y!w=*M ;ҠQ2uTW(48Tg4ꊒԙٽLmy `w JV~d~TtG}wM%Bt2{3i`0 _Й,@xe/ :~pEA[v5ɑH11p:* 8=INP߽sCbb{4bUj4:2rfM"g ===G?N&XˬTi[N\b=2D hVXnVhV!.uQ"gʺ-Ȏ%sh &G4)AOC"(~8EY &{F@k؇S2kԖ~?ίm=ŧgc>%+{ZP,;<Ҥ::$u(Oγ;d_d \lk|6Ɨ\5ػc.lir֌rswjI-F#}yT9uSI޸}z>'KF 1N%5` C"Bw 2>DJ۞pIa'N@LXU(2t[P-)ҞN g,Jxto9"q;{.}K "ޣC5Ajm$3HfHH+Dkh|% $AT nSAJ/Ts—)f}2skҋ3Xç5qt__-Xu?5,zM<8J`ަ+dV2,-Fɥ34knbh7;+C$-7CU 1hmǻARJYLF}FSit-U垍:|GXee]ҹkX2}+u*˛`Tִ䅟Ե$Iy}'4i$EO$3dR,j?lgR J▣ RYaj[I*WW#%F@TVM*BA!R}irt9:ג`­7Fuݕ!2 qO[VFQRA1J +g 88^f{'w=c/_.\P8g}6Hߵ`Hmс3w#\eO>2$-hMRKݎ$ѨMnQmΩ 5iAx"LdEmQ 䴵|^Ǘ׶̆AP)_`2v@$^Ny776'x%g/i{Oj|HE<.;3S: zQTZrJT^dl.8D:MWWtO_޹_*e W`n@1UHo.Z Ck I/Ote&tH+E.Z] E4xꐺb`$]P)6n+ nFʴp]p5Eo?opNϹU{ӝ%0I[S.&/Y+1a(&L98I"oQ1qyT"vEȒJ9M&jUԜ`HpЙ䴴wqlҩDL^GAfe YT-3/B{x*wG),,$VN*y3|yዔh-f,;ʣ<;'\ |6j96TzKvMux.MFlH0~wV.dr2uT F0/LAm0K[+XYk8Sb@4$ơm} d m!`OzHe5ޮvtYK*,:]%uʂZR,nsS:HQ";!+0vr޲[H%bVXhs‡`0G}׻ii4Z{{K_}\>D^& 72z6:6<b$J4*d\[8jU"Ш3іl1?:@6J`kb)/zrYq"6GwrlHB T"o.‚5 ͏JEqN%RlZ$@F)x2zutޛZ>\.W|NSY|] QFx! h0[B  [m>rQ- ÃWo٫t XtA1eQ8)J-J$ .N{q'{`ZNrלgt`_U40LV1`5ݸtsΓl~Y,y  LPx u´GURi#~HQo<..MBm I$2 1tQp5BSάvݽ>b9+?/^w]^v}|R o=[clpB\J[0ݾlW;1\Jry|8IUwu~Fժ#ANj'0aDJ) FY%+kR|-'UXSM&cgKR֢jD*!X5)Zü5kʕh]&`CnʵA*WdH~{.q*R`iҵWTzK r9D*+Dް¦N{9_◅9팭hgi0WDjtde7_wW7n6Ⱥ昦v!\h0&Ķ™nmLl>,o_]urI%0ċLiJ 5&B dqEH5R}SYnLi~B{p }*nCc\FC [~{+kHȻC !=R]jy޹`jzqӂ#n L]6{U*NZ ƫ5~&d]SL[\|I=nf<^4 q#-&F{Iˣ^bQD&<˓d4C{68d* ɄO$IPIO$pH &}X, id1{ E J : 9m 3,E-5e3Pj3np:.W!H]6[FkNf5ʾ{KapBa(_7!nˆ K32cѲt8Mf?1:WҪi=C75VA` Ec>p`늽s[Hf!-\ư9'T"Vx߳B vyf}S6!n}(Ī=ʕBb^9$ebu*ǛB ǛdLLZK+Md2{xo9[ +hMXj" JU¯?Wz.jy>luuFp?waҁ3'VL#$JkcsH<>w4–p% #R1y0V͟\Ҁף] quQQbH* >xJrnB{޵I%Rd80C}Mj(kpRٸclʤlvc/Hu<ܰYd@dbez838&zPwI@dHg=Fc~NH2Q-]-U=LP5Eߒ.-U4Q@Ŭ_ "8b! 3D C#J 1XLmb,k)rfe݃mK|QRV8ɢND.l>+c1P.ݞp0D.y <VbZ"ȼLKੀeyY;I͑/*NdU"j7q(49x$zu3Nip8^2^H#i ic'Ɵ#foP(%o%N7E̦/|Cun`RW$+}Xɚj>*f[{ 2$2S{J9wH%"!?(M1SJRHe+zJ4m. J 5HHX[v5D-b#U8a+]ow-D; 7#f/o?Ydu2{`-]{.[#m5i  c5CjV_Lb@R/OUy$DB2;|6kz ۬aT' 0&J.$AhaY `ivFodGzy5od+FD:!X&R +"]k]hy HZdTo"Prӏ#$bv,d E@\Y^H$`"HbbMzϾ:XWdIj nX8BX.~n" CDlYqv-3AK$o6{UzIڍ<2Y5?Yڎd xx(vL fnLza5qՈ;mkLv'QMrH$n݅L2\?;bgm)c;Q+-`2:2Ff-DPd"duL]mLX!m~!9$֣A.Tc[hy<®/@j|۬ ]5#:6W^/D33O1y@V~g.F }}6YWY!RV'kl ߜh;3"l_AZes* ʊu` f_urR]`ېTojt*R)hD*3$+׶/Ie8< o l24J*c&"VE=`sf= q#È& hJCAOV!PJV'MU[iVCb cO2:s%vȹ̉lc\JVH@*ut.X~Go 2-}p@R Y)_2u )͛fբjRN9MB ) Q.!mlp5SؓK~0YLp4Zrkh_ IDAT|37)p VH$Kv os*ֈdqd}{1xu@`&:ҮQu}Tj6\W/M?ڻUNkDOY;cStNi'='ܹ}lnm*4s|JGA\,S 2 N^:u^B#+RcLT>m"enw.gPZ:;fpiO,?UҗU_˾3~1H\ϴhh}Ĵ˱s. 2`f{@W3\ L]l`mk{ŤF,u#ݾ6/>[Hy՝de< U`*O7F`"VP{,IԳGpn(9#rk ){KӞ6V~/AjfGzXF .O#83ξPTbRRH הmT#j-? 7&|5>82l QUabpEW VvuPJĊφT/ ,rRf"8beҶ'$ъ^Xf-RSR k{WCR9n 9ܗHՒJk._F*`Ie@jIeobvT^+Ja4 RX!b[ , 0KDWt:m\JQ%=,[{ (JuaLfkDJ vG@ڥk >7cT6äL"q(>}iP&_Y&2@:rR8Y{h_ka an0nMpW}_r>O]C_tC'w*:)pU r[[ŗ2䩇Ԧk(Q*92 R. _z p(D@Eh*W-]~:#QBzoă'&_]2^~:.4R.#h2yK)l.2]ڨ68jߑЅ9苿6e:;1CfZr׆9Tp7rH%\j>s^LMIdđ؛WM/'EP0~i>$:y4y $|sՙBmk_ ˄tW3ү6<Ek 㐮RW´b2gda _̒1CJdgt*a!a;[Ӿ˷]q"Ax:zB+-^^(5a T᳓W5KB=`'qGuZ#ݡs/WBi7Ms̼J#%r YG=/[9b%Q16dv8` ^5>k4ȼC׼<wnzg2O](C!7,@yQ&T-7ٯ>kBʥ~;ti( Hn<^!Љ12bSK7HT&͠bx2ti#jӕWd͠cx$:~fRɐ#~h}B,)T" Rң/f8q9OI,{I8qd/84? uV]$AMvV\#"VHiYF]\}Hz]:|S t<gp(\Uz=Tl m֋6$2Q@f2T R.,^4{۔T͑՘ڽ!ӯ/3#28^b45:W3TbIyu1kIsOJlHD*+D^]]_x|N733bH$ұcǩTڎR&ڕixye$HkյPW:ZV2V}oVTjcu%<$SlRݪ)E=wk-NjƗ6w$]Vo ڔer葇DhI#u~ڣySn\a}LK5{8x` &ɩowR˿5hިgF=LO\~XnVu؟Pcser5^D yTڮ[}~G0KiL&KWbcWcM?ɹvޣuR]H=t96`{ *Ks|O0[/R\AkJBc0cR~nlA1L_Rߝ${D~tvY9\4Я¦-2t8VwRjMY uE?ШX1U9mPh[2PZtF!;*X4{|0}C:٪IĬssuzz[Xe3Q[u3=X-sς#U:>h%QK5Bu~\h]w$HTU޵gO;c [O̘=.sLJEH*Ww2lRی>2'R;0\zah||T+?>_5.sa `$TUڦJ q}Iy%jPuIv|}nzނoih-K3ed}muWEEFBI"ywZ^@7"8Ee#rbQD F+YJ8du ubG톹%p`0mݭmvQ&5BL2:G*xrȕI9?cb^iy!~T2-a<*̐ߟP[! }2Y@ [=hrjZ . AY~v ¶V_?]ޫտ]4`5Z4 S_H#h[+pBb-ǬF[MKkZ1vG:O DiQubFSikuqvBZ# zFYV]m`Ƅk+LEUmeMRo[lBZCI倶Tߜ6]"6&r5voIeThڗ3T*#uw_W{&¶R>8[TvhT"VX=ꩧhd2yƍs9VGP{1RSՅ& ̫/y>1_9}^y}'4x״//ٸo}[+ٷ^UW{u!%yipXguL{#b H| O;I:;*] "Z4xo5B&S~~X!bcL.Xo;Z}"6oxYcqʓ?uji:bMJ w::vD» Sd2دPȃAo)Noii;cHaxSN1chNDҵN"ȗ YtϐTmn>NWߜu~#%G4Lmd`{ LM{T$d3y;S(qt2ܞp':oNz5:2I'8c!/5Dl7 nO VX}em /:B1͠t;zkH{& i& q=H#amHcw*#ە!vD»飱X h]8I 6P7擐): 0mg7Y#D<>hw{CT6O`T&WPuiD44 dkcihD"OEB erf\`&G WT4Xᮍ+Dnv%"D@QX5;}A Q" 0kW8#GGܿDnAB !bȍ#V"]J*+D6ԁXa 0EH"¶VNWAAmAA +DQ bHHH#" VX"Zh!HHHB]M +DBA"V"R v-+$>- bc@nA@5.VDVDnwAB +D@DA/b("E@aױL!B A@@@@@@@@@@@ص@a>v@@@@@@@@@@@@؅B] E j ]QX!.dj]4Sf v#L!n)D@@@@@@@@@@@@@@@@@@@@@@@@@؍@3ha7$Ƴ7.>S=Im=wy>~Mӗ/\Ov϶ٳrH'|׶sUȥ]݇t }oQ.uno3[}ƾD|N8LWqv ^y`)aF|cu_2G{M|x 5ݺf?v\NvVϹ'X!w@@@؅@);I ލhg4a `{D}N<$LX*koRV2o]30d,H4HgryP(T#+2~Mm@źf #H59Ǯ \$ @0K>~\Li#d*' h4:˓;)Gnް&Voxvt!A*\Fp}hOeqKLasm*C{8QG8gSfM~?&b;{etzc,$LD*SGu ~b?R]ǿ' >/D幯}y+|uK;g/q0 fs%2Rʫ޼8UGǏKyGc$db!GT6CId*p"\ʧ-yqimory)+|+mJCFd&$0*Jc09l6_ Y+*W]WwBa0Cر* J|+l/kDqC H9L"؉)GԼFQT'Tʮ}-+WoWU8O7}`;)Ij|9ɥ!Dmlj,岻u+qآec`,={6[ICK7 O̤BT(;iUuU]$< )|Dͥ-_dM O:A-k1 Kɇf¶cLUւ d<{r 7Q x.6;>팤bx,겛:*u]*r_ms <3՗ΝgGtPk_Nd#gs Du8 caqqmp֗/1oCvu Pjxdt=K#\ އ3߾j՞Cx& h98Vec6S]dɻOiܬ L*IEBA$=vOZ39+TD(s8c{V!f]̷T&7z5"Ȼ/|){l*ᶛv =2"A)<~ߟ||f OrTqOd;폯TfCYBCm ׬Tjg4gP'⁉H%FN \ȑd2]eRaB$RaޱʡRf"k}H ú`d@,)_qSyOgX#d[3XgLG 7Qu4Ȁ\p-]i0'F]LaOOueB.Rd,q;վfPX|G9iGOh>}ɞo|.κ?t_~:F}^v>7>`C'~ﯿ~]\mw>4ka z_[>;ICMGq'`surĢ䌄[w'WyY,ϐ5x0q˓ȕdIUc1JƼU\%LN*si,F#!m֨# e c{:1?}AK!qggg{omPlׯy{qzG+`SSU?ƕ7GW$2=xO%rp*'vhF}f 1Obim+m >/Mg£ѫ*5 UCHVIxґԹbyB0E:doV%A.6skf|zwX=pDJ @b hW+]9 IDAT«HӄQ0KSiBQ Kd3lyg4=?+ Z.b-݋r\hx{!#*l+%-DFsQ},`29^&ݧ-W`T^[b~!yO:9^&[lĨ4X&:4%xదL捱ϸO@X ㉗_zG;j uI[>qόdz"-JkVy_>S:,1ʧ>8 Wli^nOo\t"$&s~ үEzu՟xvLdq鷽m彰Qyl|rlzbw\Ҙ\7rcRt/?Cwn|rKj*O_zdry%::G:[= ]9{M$R$K>|cxm9K7+¯gUsnO|櫅/ҷ~g~k X]B+qMɖc^gV-8Jd!ⅻKrՀtT  <(-D̓iBU>Mi֞0pT2| t@>JxœDZNiC63Lf! CJ=ڨdE)s#i@řKSss)xn/ pY9L,/uo1$M̿2%> g9s9SK0h]vg_||lG]T}ծ5W"ڲ={J}a ON~jp_5g?Qµ֍pOXa@wJs7I~ఆKnԔ% Ҍeay/X>2 <9}kV||T4[T;=} >= Ό83Ʃ[ÇZd]1M:oq'`G ŭ0V~whKaudުU;`,_9L 8F]|,T._2hdO6ȧ(oj9tQbl>dzq'`5l$&| %Ωr)ؼe5cTv0m. ٣ޫ7sx@ކC 3yshwJ;ubpU[k9~haO8b\Ҵi%l<0/%1}" 7\t~J4d" /y#h _(jkkR7X8WbS#< |ϥiU!JtaaY4C+=. dS?+Zn-T6v7 .<{oY Cz > H澿U㋅$壟؁OLی ߳O5rZ%[5 +_{:R6wfnHhM՛k8O#ԉ.z]Uq!-Fbnpn<^g9afW|#xfV"sVVA},}\ е0}XSz W2n o[Y7 Z"Hzg(,ƨ}-KNcڂ|N4\} _/?Ͻz)/l2ˠYh`__.#Շ8&_xOK_f[?yx0WJ8/~D\[47Yl] ". I'w ׿Ŀ6 JjIbgT J-&Ȧ{{'ďٿn?L ? sխn{ 9Aɓ 6-̗b_Q\a)JtϗVt ]6kYp4ҧbP0^˄D)s꒑X (s 䡅4!` j,HL6G upVmJ>I1nA]+@8{p"iQ>[UB oWә\ |.f+ b5G0'?xt@Vةp&8'*GHn+?+[[=Zf64SK\Fg~cvhE'?:)DaKͅKN ]^c4gDY>ɣ]r FVtTo9W1a, RTiRv޾XؒhI$$FL7&F{-F  H,ݙV`]XO2ܽssmi sUY6= fG$'`Șo4'6eU"nZMU|Rպyr <Є5_jC.>ɴ9fY~_h]2Y|V;V=$pV!eБ["xeNKGnKeմ"1@ QYz}mG?`uNUe11QW eHs>*m4UQWnXNAvliBqUzpsK'ҹvk Ʊ:(JeG£wy֟&s.Gs*I@<Uxp7V-ͱsWosx+&۲ξ}'jJi 0Q71YHvoqgLЁ+7v,BZ{jSv;ȗ I6okCX.X},ns:oTrz"k|7&ik^ :X*| B~G>&AݿhJl@~M9UP,aB( QR %"fhMkdl ʌKw3DJphlnf AZui 7P-PDPUMDm `BeY{F#=iu38҃;Ґ  28ɉm9::\e,RR .N )e;R=ܞeyÙ /{73(4gV7^ ph `J6+DZoVJDjknZ`Sd ;C7me ّgkf 07#X9"jEiÁ mE܀A91IەEY*uÛ!C?YJil^Cxl`sU iѤ0aO%l Vv5uƙ"кq)P18^U/؝MH2nm 򣢮K,.T$%-S~&-M,V wo^AA^ǾP3fw?u aם~snËm_IЄՋ:4գ&ܬi fn5Eg1//*N UV2J+`镅O0au˪,?ڵ"l5rh߶cw$1&M+ޡ@j2 'NSRRPu v9(郚ӹ,(HL|cO4]qogK.XU%|!tv(iڒ--8ST~N76; Њ2ko}s]{|%݄\ƛ, lSl;OHiVSͲv4nq`EtO\ ľ@9M#:y"V%$d@7DQF3)"'UvO1J hFIh$38.Cܮ?,k]:9O[9Vo PEm `s ?Vb6Q"=>14iK((rJ?b(Z0i"u28dJU OӪKWƩW$rj@)+*Ut`99"MeZ'6g%eD_LmU0.%R ?҅I2]8\)jL.=Bx\LW%)O˗g27)2zv62p 6?4jod ꖟY=3 6à9H I((Eq8 kes 7pT`u_G7F7ipTqTu㐩F$Cy,޶u4lEqL4h?yGEEA:NneLUi$ eoƪ/T6Fa4krld٬87Y}][^X^wׁK_{ދCҴ,C^{uq)0l܀bЬ]u|f4-K.7!VG\h*:u25/v9=g{<}F\{ ͢9NFnezbmxܽ'.};Ze,ۚ.;Q/Sb^R{ VFȹqR Ӧ5HA>jsof /l]EJRj7}$M5DjX-I8ȣtvwZ M)los.8Ƒs/A`4*dllJUH֗N3= O>nB.LQMfQGd4P*OD+ϡdu=$Hg̝g]u$zOtWPH4۸OcSʦN~li#-a=?iXhlZN-oVpmW+5SV]EΦ8 ~L=ueUOn8JNZC:־1RXy+PSˇg|DSe.r3uÄ!VLdܸ#Uٶzk'MPD.>bVkrrΪ&'mZj&9 kShŎ}Hw{+ l;u ͻ4r37)2JZn [ɧ#djOeW xf;@A0Vдa4W6Bu/1j zsD0\\".&=-G[oAv4;Ltc>NzXg9Oyiވ0g|-fB͊sV:pVYb[!&fR-TMkJ13\KMӪn–+Ɗέ];\{a=uzI&Ol*l5"jPovc-ȺeT΢{%\yZ}UR*_۶} &-_Fu/OѯhwVq'8CE 2:4-CoS@!JU^mPg`T8]_̶2KA5a`4].LTM dRNe j~ Q`˯[jJ)%szFM Җ&|B *m.]ڴavmLp:[ Is#4ږL%d ?jT/mhgć,`=s;,b z QڂaY˨(hJ/z ICRlU*/Q4-VOШk&Ҫ;j7l5S謄FQ;HI)Uu&=}44(+ZERaEbjVwѡks*՛WH+n?,ԬaٸيHhJi vީVJYR\ii-?n: `h'W>|PR-hJT]RcnBtɪF%.KxXe!!-%ȕP*D\S]Ndui{<-\ƫR,n`R)*4%M ;NTt?D$WҔJ"-)I̴ǯЄ~m"~+>,P imfnkw&~R35JIF\BJNaiPPR4M%L: iB`  JJd=HɁn(*-MKvoô`M{pLvju}rj J!+/خ|w3W 嵔B 柿Tk+E<=rXwbyt.qJJY˶dc:#s֍dI(~ <*m~vzɄ:uY63u߬~(^j^qP,)eErL]o.A@yuʝ糷R%+JFo+o+Jy j .=RyI?i4|/yhgQGص ^<ۡ&kK&òյ"ʺ6yb+kOUhAE|-ΓCudڹ5{I@q)?SnCзG72DyM;KB)&?;-F|PDr^?mUT*T\iNCV<OCA \>""gV5RqeE8 v'HTVج\ƛL VڭmEQwYv,Hch@mљ'$tj{i"EѵٵGejQO6E{ƭBVL2r\[7K oU.LŽoxP|bPAє$ޝ:%Kg$5ʖS0.6<R˿Q|+gWy9UrGW:[N{bLj^:g:^!Ҽ,U^op/ߑ rtgw9]@E˦о.ͷv h(HI,H`|gȑl>)E4%V߷U*ͱl>ձi% *H}߈҅JV$4T^(AxqoAm-^zc"$;̗w;hZrV Yl, v}zKHSPV/]k'FZRx-Ȝ{1_18vu0?aBN%P*a[Se+P3Qj(0J]=>R~_f1{9j=2f6c`ٝb @RSm\X~a>uų)*-BMR m1e^RhE7:ѻo^utǶ(ɾ;XBvѓ:ku,jcԠzŔ^iZ%+4b5u+_D9z'/`hjYô En檺f=gb3'E^xE#tV7OTɊ »f%%|}*(J;5mQ?9>x?i='S],[h%o8ȈC\&)jSiZPQo+9j߆KeI!ΔhpXOBcճ)YJǜ+Ü2 '%7cɶX7m[\ظ;bD)zn󕵕Jn#a~kn  !ɬ\ƛ, tv^Q5PƔ'hJ_gf~MQt6an–ڵjM Xv@}:dgR9d;:]P_Tʯ$ %E +q+˪r 4l;>y7l^ " s#xJ ;V@2pw %ɭ(J ))dpm\];fdV/L͌ZuG6sAKö+]X.I >l;^gp{zt)yx^(Hљ&&+8Қ[U.*ޥG(E:W E" 6X\a h ĞeJuX pvNNQ@,Io3*[eE%UZ\"Ylk[oOP-ΕyEeD&W( I6εCo7QtDpPGu.ʪjT f2\kg/\}y y w)(Ȕ@l+kGg^ l>"@w3h| Iqfy݇4c#?tNrZvQYP*'I׆/{XD;U1}&Ŀq* kN]"Θu/J3 0Ȉй߹:],ٮ~#&N4zߨ?Yb9sq;)|xø, Bcѷ+% %]W776ӳln=?ݤeVUd*- ѣCַCoD_yanQ@"gr<{{G]:wvmYCҬU2wN|+JŴ >aڰG'ƫ߅ܺtҚZ־{>l5ޖLf(FD~ubSq^)b.f9E-4Ch#-h7J/~>f=}| KBD*Wd2V\i# c;88;X?k F:}dϏf5_W#:k4Y{K.}z\ƛ\;rn~N^zU$Ye_Ǘ.j4Uaۜڱ }^zn[ԧ9Qбb1(EŘ=8 ¡`AFxfERʲמCfn3I|f%?c?dZ"m_?AN|qo~VIqqѦMSoR*+6=PQf͍= [ w6i񖃥  ^V'mƯF JM[EbX6aXy  %[e?ټo]#,>:  "ck/}dֻlq} *D /G}YIieD*T@XV6vv;8BAi:t5c$&DPQGA~[7n%VTUWh׿gD}Cqr )DV ٮޮX    Y=9p OX"@AAAAAAg)DAAAAAAg)DAAAAAAg<AAf>l tZ,AAC AAвBAAAAAAyѬ),..²@A`,A*DAPBAg*Ԍ? AA>Ə2@yjO̙ A4A䙳 qQAAAAAAyBAAAAAAyBAAAAAAyBAAAAAAya7q}ZVX\)nOޡ?]E bV'GzύHTY) {wPxԉ/-ބTݸqa̽*#{;[3   L XBA\.?qhiiR|" `2vv" 1t˧0H!   <i~Ct*$FI={:/}睑-3gU)0,<$$`g߫G@Y)Pn\unRFEU@J;:z?$r@l\{ 4?␈7[1SfGPbn޴k*9cڌE   Έo1e]Jɛ' $iœ'֊VW$\ߡ3qmY˥SdnuPii\e˿n};Ͳb~Yqwl3n&80l}/0 & ޝ搈x!TyiIQakY>zXӴvJiŹ%c~p{ا+1_ۜ4Ha;@&qLomhTt~I&_mzrqG;)_ߜS˗4ќt>j}Eci%E=v9z.W }13>O L-1j閧xzvZS1>3Eۓi˵(^q?E7$Ai&'&Y`ل㗞T&+j$Ɏ]E ~iqچ`AYTW\<C-j/))%uv5U9)׮_?s:*Τo֭өUᗗ^e#GӻDbY2s&`e؉/{N {sdTufq*J%IT.,q_kJ[QY4PN@SS~:p S:5=QCV?w|P+`2;bm"m[9 OR@FZ#";],ޞfA>}K7>~!9X,W]yӞA4i떽c +I+oHqS_X0.hCW1 IDATHTj~pe=ٔf_SVu0v'g}t<;"ْ\ ~*U[#ԇW(J)Jײ GR~^՘+q *kֶ~]GO9.B4c+$I%2%xf([ʺ$Y3g邭wWcRʪ )S !<35>CiEC'n$V IQl&oA}odW1v]#>6`,4R_xd9ukdn=pnJPJxE`Bi3_$6n7 Ym\7>dD"W(5! =0.}okG1eY}L|WhcrAs/Dr|S,OZּmsL|c*)OUBd;yv 5n.!_|jׁSRV]:~B.xun=R Oߵ{Z+;g$hQiѧ8v2rCسQt# L[)>82Kp K/sj 1xygo0ɰ@z?I)N]tuPQnOpٺ_: =Q/ij=)J.|OaM[n_I|v+`5 4^e\%P//?X_.=*O=w|+jνَ2*I3n_36T"GkN|kߞYMx k=j̄qcX3mKG=(֞Tvtwra.lB~cW)RQ*B.`L~@Ul_ j»E}æ}%y[ِI7Sq>JJ&jnG}iYAVYAV-?o1H1gYUHЗpQ^fQ^f\,&t|sT/Ig>N;?y;:GWOlO-~2A˾o\uܹLg_6tnv z S}W{-_lqۧ.SwaQ?-G?|KVԪ7dՅY >U5[WN޾z:=k b%b݇8+qijbƒM55i+p"Cq "JwEo[`p\gvv|iAtH}{=S'OI_N@cFM^~3'FO K1y~⚏PGj7ѴXҔJ`yv|\9lSo;x+ ؐA'j!~|UּrPoҿ?|*oaa /zaN/ӪᄌyA_;1=Co+QNVXM$l;NS:gƨyzz8Z3 b/|9sl3>RA]|Y؈_Vi>\_.}1TO~[,[ ٚe }Șޙ;KU[r[f_U^4l^*;oё]}Wwjo4Y. 򚢘˗/\ak cnjЙKL7cK)E)k^Y;hw67Lk)ruX$g?s-si>79s?v־'~٠^3gֻEi׺[_0|twMdzķ4-*,ϝޏxL-R+xiD.N 1uf-[~̜˟.]򳕵o}]x YC+Yvwu,cg:_RsgE_M>6_g/0liSR%7{ݻv"Bc WK傸I3oʘ=u r3ii5%/]EyH*s_0qUe?XZͯ{.{7f^N6 ~Y|-#9[0r s]60j5%_`C/{_@Cu_Oo'nK~K!r@/>~6?Ҋ%;sY \!L7!@W]%2{Â=iiTK}֩u rQr?^̙aW O62*P G eҤ~} 3:CXxɰl K3ź?GU^rk+)\G/br?f} ?7v 8=ϗlXh4>]盕2Jg黅FFy<{Kǂ/qb+\]6¸,3L!-)G/% +Qs?Vu3PlߺmIP vtpĮE>0k8V_j-̙}Yϙ< V96$zTn ߽ߵ0nCJm/. `b)->ߢ Kuǰ Aӿ^\}Zm@͙ F̒oB^%P1m)wzX2_/ .\~?<&,srV\tH,yޚiv==/UxgN$?ny s˭q6zZK~=lHUf]q|3uдrֺUSr=h&H5`*j;Q & vVĝ?~ڝTүG gNE !JTyݪU?=Ͻdo}Gd$~/wlRj|_ښsz9[$ qU?7fID"~Ҽ3yZPV)%B~E3 ཨ E=Z70\x 盫>4-!Mj͆J  p&7S潫1Ze2;o~9Lٖ^ɣhZ7+TX|Ak1lY$ \Ҕd睊Ar' pt; {B!LjQ=>mU(䯘?߻ǚ 9ξq/G,(9o)YNE̚{\m3i %d F_q}EN_ x]_ i;ݟu_#y E-toS0;:>fȆ(/] ;\]N Kj4&-{˾Q΅s]P_n3(⛗ -^E͌0NÓ>(xk'6FF۷Fjڛs(QMu*\ :5}"UozN- ɲ}{jTӴ+eɕuKE͟3(P/4"%e7Sɝ3I޼9RQgwPտ hg?w r{k(Mw[g1C&^ ?~ -!MlH^2uI淹YK=@Pu4x&oGFgGAmoRj G?d{aDJH!A9u<[0mR=9cavMcFn%߲zʼnU?b:#{ eON#]Bg؞[u=bX952gRaú#I]LmS'*mX*nowؚ.,K&c3ՔSٗWJS;ZL}U?; T4{r%b < y]gtT2UjWmLQOC5v=i0JmNIvR['/ZroO .lE6$9BCeG9l^G * *@#iTFG+dLBS B`$q_ⶖr>d~ `aDxυv dX> ^丙fJ̿')>~[`|rLfBzr `d V[1HX]d-^PiEu?Yx 9YS0` uq_&dsic6qOM+j Α yZ$%wۥ0gy/xW/6Ab13>‚}zݴ ?bA~o}ԾjeC=VpIGB_<nڗ aѴzQ2qyG` Hi,6Oi3/}Չ Z^^[kŝԕŴx䥿SN:Ty/ƙ=Mw0 )g^73'R-4ȹ@O"w4ݭ7͑5zr|LoH uZK^{[eL$&z|׌FjjgMIOz1%oTҹ4>n,e#jee:{3ֺhw|NLfEggE)7?kEJ]=L<{;4uzy̆GЀ޶Hw?]R\Y^͕~a:`g<|ŋq1b. ؘ<u@I+ʊhxZ`Vh96X`PBM:Wg/K_]zђT{hRMB 'HW/izyS"i)Trs2ٚ8/eK*G@.;V.aY-re[%wݿwE{(㯞ۼ/ zF>`anGPFʸ,I߷ץΚ^r OE. #{ p5!> kǯwOiͷ_| u5?{kn&܊{aM&|HQ4~.X}RCqڃM8ߚek ._>B1F2jp5)IMn L>@S2Aʽ #|G/pQx{zLaL'OoWo YqL]Au }wj$sMpY&ʩ?v| -6% -Q w^9#R*=Dd$@׾uk I,ǛFjD~N\iBܠy̳oDBYLj!$}a+~F"Ap~mN_T՛S`zCl_/;zUR3[e|ppuhfeEz:ӫ>ͷQ.ÛEA+ޯ&z%*J5[ u@t|^?bDx%|NwɊތ{Э[/ NVP,*XuTJ^ R@ Kp܆NMȄ Rk E2 |IݭeryuEzWJ|&$hJT/ qp!T J:sWiUIa(Kh%:{Sbtᒆ]F(7KwTIkf6s$QQ#*FLg=~wt朳3À`A# %l"IE@|gk6?7AH; IDATɷongy@+=nZznٰ6S 5@ ?UmTqNXnbh8]*ӣHаW*]}+DǶ#4 Q^VͲ1?zgڎqp,MVޓE/* ,erėdmۿصEd);Яnȯ#jZt^JLݐoR5ԽKz@(II"lmW:jBJffF'/ MRۄyfUYQ 4^qWb#8Ϳ4H ^+_:&\Hf&]̝3\o:>*ZV c )FWɑܜC‹CgWExOZN&`sN˗_N"-5敲ZD1E9j]Y+o{syc-Y1Nt-U5]iCR/0trO\_qv$" 0,.'~]:Ǫ{Z=yf|t/Gtr >wBC.ZTt+q` y0u U8D+3~fu֋ ȯ0Q;:bf4-zH!àpKdUnZP@{!(/ҏܨf,K.IQEr"]^?UHm̐*xrZx~̾n-9$be~;k~]%Qlm:\Fѵ|Ee O!=Gpo&@KP@\nC:W< [۬g[5v4UUM9礢'<zQLyY5ƌ"N-J>"lRtjR%)_j>2'8ooQ\έA meZn0G=}W0FzoSi&HVfuҥmCT,?a!H@"0!T-11`GL޹_mi+ݭ'+>&(6&zyf:.UdiA*ǎK'2gKS؆05ss5pW}/#Bpsvi}Pe.Xe2c>Y2\'}vxdF WbsW݇|3֔_;qǜuz3 v2aTN\Numɫ| !}»EK  4 D4r2~aw [طa(eVjhK>|=v=ʻ^Ŗ% I )nxvԭ;66Vf?`bqY IOY&W&;1~bHGy|6j[J=g/zWU%VyXxy_P%CJc٪"cYk\:sdS'K/9ґŻ@)3%(>`vkP\SHW5tܘSУW,L58D$HK8g\OmAvJح{Ŕ[CMfHI/a mLoNX͹iDäk)59T+~?4F{⿧U֥^@6%mY3jXz̓05gզZPA^koԟg spg^?Q.C%zn#eL_3uh7' =QNJȵM.M&dQgxt[e֙W6,9𹆶fِ|J0rU̲xUeU[{hҊ7s,v+~{ky4ݎ/M-IBXdgZ|-mң酭<p5XWW:kמeӢNKM~|#eKWJH}Tdi|_rЮa{wTAZZ|Vb ?SElR.-}xǓׯּܾ}g.2~-#avOp},Yy]_7!}yR}6bɶ_{kM֗:a#op߼tx~(2iލ>cPHKIM~rCǶw9oO@-ۘqEz]`>Iۤ_^2jS+7Rhlr^2yC 2[հe/c&@z`YY\bj@fJ&H$P꭛Cx\r[M]m[K%-)r]+FG23 H+UoQa$4sc]aD= uۄ{p”qLfmgJ-%fHBz^iЩS;;vN_㉡!NSY{gύt Qou(K*}(~+\?R^hK6+@$.eeoJdSJdo2|]!Z&zADiHޝ4~Ss)#4elQETH`s2#р;c>GL+kVCcڸ>ŶCK("dF]3ˢ1A\Un8\qu1t&oXMH%ﮩ EIDQn.atJv puYLRƦÇ:_뛁`$S]6?q+eW;S.-uo&fs v2}p4LM6p޻%3#c˪6d@1%`ra. 3.(~JRVUYv|o+bҼ"ӸE#, ]qW/Rl*9|-"W"_ҹV]Z4֥K;=/aA_^{e~dВ\d]?} wu/!g\YDE>z.ig's)r9 t:3Ɗ7V u`5 ۖ>_V76ѱ%JV +nϒaj8fEm'InWc)|7j [ҿ0[js\zϟU[L`}pӴ%~7 ­[O@/[DLf=/6[[7=}O0Mo޼u*GhNSL]u7|OC(zO->7'E|-i[mU[J& CRo~iOwD 2^32W(:np;"}rWj4] Ԥt()Sw~>VdowBY~X$귖ߩJ7e-93?/M<ZZuJh%qh qQ`ݻ0Ç?zATB^$G֩~CFtiDv*V(G~r@+O_$gKhJ[[޹q>:yyض JK4uM7i=|pV %:٬йǯ?hk#7:Yn&=V>;CJX4wʝyy歼۷iDesKH=Aϒ2y$Gڡw9G "C z]Եu?7n6Z*LmǶX9dY9 o{'3mЬ)k\w÷-?).rvw8ͲcرS&l[OPy:/$&? &3io9R=KI{S2zpťc|7Z*51[ڸ_P%CubNKx?pHcZ9A~&6!Ax9rܦ.pz &C# -c;7R~e|2RSL봘ҸŤH hB.H!Yt F\>ͦHV"/73w4'9W\KX5[Z!I44,"d[jJm2$ :kb1HPrL$ \z* E)2yoǟ2"i/żlx褹cd3)  L,M+ɇe޾Y hD,%=MPel~^vńD9^K7sYL$2(0=lk]!KX6zuM,!فɉ_>/HdUUYY< crqZrZɷR[$"%1t*/kU{f0 Z.JD/(YgZ.Ldx6{$&"rHI *aw脄3‚Gr^br10\փ-d'"đA_ǣ2/-ܠNU[MX:-??R"[gm%Ow4r\䲫jw?5 '|cJ[wyM!Wߐo97=#(ꃑj[4ݷ^Px'@,~ӌxhZsZ"sp#w\:e̡q?ҤqKv^r ~MxaO[V^uI7BXGdxֵ$L[@ O<`߮v'c"3 Fv.-Wc2w2ˋ`<=7wy@[{FڭjKYlvt8ž04k:Lf;˧MZlU2N g] ;Z>z8{Xд&ݍjkst)Sv[f咓d:3B5}{{i<-UaP*}2\O >fǒA9Mlzt7A:"&vo#唞}U@͢Ü~#PKgKQ(Muk f'YuR?]JTaγ8>Mvo,6Xyzc263pɅaBƷË3“LϿ}`BZ:oDV} VH^_(Y{M9uS0EBy i^-Fv/b;6rN谎s^+$6׫3ŭ&% :ps{{FDr\naÝqfE񏏸ib/OgKC{0ݹ-B JmˬcN?w{QiG\A*:F&S7زLKzwߋљ$Ǥ.T>N^_a߳GJGNf*+3GQJ9*BTB!>$QFrt|A_܏˗۹$P?x3*DϞ='LS/LwBxkVzEm 5vbT4'P*r^d:RImՃ7l.VS ܾig& 2T6Oh@|]۳gL0kWTOֹvvJb(d<7%~AzO=)[(c~1xyfc22r{ztgʜ,D2mEv NpaNAs)}U6ΨضmU^'iӦ]!995?C^P{v@j./ z,X(E]%hyRM BXH5bͺOܵ psD kԨoeW/I9Z0JT*̵lG)lEQ$2L$fe)( Q)"Im^#'4HKQ' ?=mt?ۏ|1GɭI!c{5BpiEf \;>`Xw-ؽ's;&Yzj,ӱwM\qUT>c'Կ¦u}}kR݅. bANTnqqkmdgeY,EB&xYi9mK+oa`em\&?I ٮv}Ǡ*BA)O=Irj?PϚ;B<-: 0;ɻ|L͖ȭ#jAHa}Os#ft~!dQ  7#%=_ARfhoH>&6 'GAA_ ~ +"   OF AA_f UT "   ͖dE*A@.l laad22,99bUXF AAAg*&捱 Am  E,}rppFU R=166~! 9\ȸ srF k<93LUoZ;_ iUhCqһw*>Rzr IDAT$>M ,m\juhՃۿ}[ۦyN(X>1wvt4Rc hMcpon&&F y܌"ѐjRk 6h!Z֤o2%4b5*UN*c'׫hiT;'lOS H888?Q zԪSU Hc.?~ ɪ CCCS[['99@Qq߮-ZL %O*b}9R.Zl/=.O)TK{Ђ d@5mg/&<V=Y[T̔E2 ;kYb)Y^ɣyQe[ s'͌'/t ! æ_ez۷~N5Q([op׹Gv{1ɎE)^ӳgkT  򫡧׵P(Uu7rHaD"ok=z&ϖ?'u,T715c{V.AKwE?[-y̨<:e3bgm֓jeҽ6cxEBub `>yӡܑ&wEj":4gܡSAFtBm    R Qʀ 4缙GZ>ZB~gNQ?ʠkga5ϻ+4]0!0X6ClR2iZS:EśOwŊsٴ3 @Zƃ֋T72I;|4rzc>$ш+AAAA e□q=4P(.S'oN̸>㠳-zކ#noVƙ)``ΩܜUd2=EQ@$}\BW'NKNznv&FU{밅}ɠن7~L~ugI;'*`VJŷήY7e I֫ޔ,: Uie*3")O ;k2='o9qcxw᷏VB kN&˓ don\&'5mX { 6aԡ>&\Ʊ]߉HҰo8b8Q)"\a,nJA/g:gF2\3$2GlVϳ{_/7Nm}ک7Oz[jVPUk g"wMBAAAA#5"e_E'=ܖpmOHn`:WL8ٟ|$\j+,l+A ]Pyn%']}vس˰g-۟vo]oVZ Tp'6MMXW`rmkl{˽Q4_;1ٵw54n}ELD){ew}\ gG{OJ%(=Zn6AD Ozyeٶ]\ߢڗA o( lρ\p_~|r?O@+{ 5?7+-!# 4HOHw'0$UT-U%BU|H5z|2JOSp3A[ ބtoeQġ^'Tp?O W4^_&F 1BrVÄ@PZf냓ak):!m|ySX5CJ70!8^~ϢWkg-V 4h%h H](wvT^vvU\Q#G,&ɳ7PA@iZ9PaRtx=?UӲxӔDGA0)PagJ%3}mxSt<@tm%::غ -+'* K*,{~_"j<^9\2r" Ril*Yȼ̸l@N4-eI^. $1UKodjT4N| S(L-ܔ-[¨bߖ Qy{(o59`͠BP%# I%?UgUPǷoUiD Ʒ|4 &TOϦ!g%&&i`Ϋ$Iw7 5SOZtɛnEo9hʕ(hѲg.כ )eiXBѥ7 I s r\%# I%?UgUPoUiD[!=҄ڛdHk׵c`հ{=1ʚSɡ ; FAR ?28eBeC] nKh% KA)L&cXU$M,["W(?_I 0F5Ҥx-iM\:ܪ1#]O*  Hr#b+WP˕֔+|Escn;vKtK,ZPPWw:ľ@D7bavs'[7Udfې>TAt,[&0t/40rE6r!PhF<T ,&W_%^=p';~a۳lT[6U C1sG~AaP%%`]]| C{ViVg98, ?4]zAˌN^_]=۹6ڨ%!б !SW{V5rk_& H|DӐFP&' ZA $Il(ۆI}ҭ7sCAԝ?iE6^ApGkgb>D(+PɬUjl ViK7P(_o`_41.zS s#+۵oDPZPqhxxEss2Y̺ܪ5iIT9yT7980R,ŗ7U I-[zBի7Hy|&nuU@jDzEbW`Lq/4GԬ[Abh3 O̖p/u[oB+^IsfLJJN<ATC 41<&__,r>>߲j`߽5Q"4X.a0fk3LC-CKr$$K)COs-͑SU  #H!V|~]ƽr{F_z[<ޖ/ShDp1xLY{܏S#Nr#Op$pŠe~3k54Q@$>g&4xp8HCCe}/f[Uki:/ēΛ޿-LT(Ҏ[]#:4-U`Bb17U I-[IzBjVMP/叽jo¿kv=h%'V.ē7(2 Jӎ./2 :n%lzgyN,bW{NW\o~++\c{<Q;O߈|^.(ne)J1nb/|\_:+?q?hF۠Ǿ }},((q'm_3yXGb`F>[ss}#jmbe͖A6[lhƝl:\$) $A ٽf:$@`~%6  Ub5jf7+0X&`QB\N'7:n@|̎%yF)ݚ.hb>Ц^86//j\K}tl٪c{nÁ>M\U}jCWp ԈBEw\#b1YgV7/c޿jen~O~=S|dZ 4}{{i<-*foj1r=tƉ헮5rd˒F|?,jHj7JM&sD[6|TmBcڛpkanݵ&)zqAlc]l*XMKZL=&<,AV}Is8u\s[n{kue/I^: `pAΔΙx ׉ ^ZYXҝb{ez A5$}yo1vk 912M _BW2QԂx=yr[-ٟ43kԼ5 @4$Fm Fm MG) e Z$fuν,(!CA H!(+'q:pgn09H}"Af0cRReD؜ΑO7$mڡN:"&vo#唞}U J- ]Z4|Υʟf263pɅaBƷËL0n;ǣBhm쇩)48tso.D%ɕ38Li>jfǾ ƦKK]ro.XxJ{B I}\g"+)6gyYښ.־Ϩ-l#⟗w>r7m'7U I-[zS*P$VM( 4WMe{O ls:c_d3qeE\|mjwմ`EoC~##-yee{C-40[ѠÀ\/ƥH9[f}si &w0s K;ꢁΕBwyvєONKˏ cx)S ᑨ? 40V}j*&{o_{|'ݼwW7ȷBS| lѸYk~X1_NO`P_Hh_ӹAk34r7vMx.QAp̮,\BW%bxT!  ѳg xT+ӝP;ʃ<`˟v# Q&_6»l˦_LWm~ǠPo5]۳gL0kWo+0[v̏8.3XB1uԒGj[N8hi -__}loU㢿M~֣BO(ZnV+Vތ'CHaQ #}? XS;w۶#Gj>MvdȊ"K{VFB۶pLwݳg9=R3ωkG#"99yOYVC7-)L8k⻠;tseuBe|A%34LR-R=]u9_N^:1?Y`⦏bbSNN&3[hD)2rbq;l\,S()|Unc}&lAAOxN!  Rcx|d5Iضliai "HB+$G!7N夫ͿV$pBUoܼ(ߩ#c-Qڊ_xʍ e8 IDATd %D_Zs<)Q+fϾp5qXz70TȲL!S³B _ jkM?[x-QWO믄 tsj[O7f>6?EZG!I?s?_j5a* B!bBB3%QC(`2hR`炰1{׆dPA5AATAA8׉sX猺bߡ* A*[J,*{`ϦZt̜ ꧈҄ Ngw*hޥ"o_5Qz3j^?t3gD݂h8 ۪mS 6%={F^/i{kr2QT!sI MӹgReMh[w/idЧ],غ-Zq* rrIsNgo?AZ96k~* 仫c2Qs! `Q7 e䛾Py0)M$ \/$,hEM+Q":vs$4l|@AuR<AA'"  5]{s{4fή+vm{]bv(źؔBIRgc`0a9ϷT`fOӊ_>]A6]i:n촖Ş3@?4Ǻ5b|hO3g jy;h19 V$|f:`}#ɣPjc  7H!   R("`Pechԝfi܊ikdMѫŘ{͉ϣeNP [wmتF'SgF1B($d݉f֠ RWWׁU˶Dtn/$ERZNmM(  OȄ   T .fx5{ i?'@KgizDb$)[w|sN_`<&'{owPffFOZ&x4D(V54eGMvk1B}w3Ø`1 `Rc}nm0 _ۂwEA 5   HPg;LxnqG]+8Ln\{]w.ø̜뵤} Yֆ˰/BL*䴶cP?E# jVJQfAzZ6p.0vx%S%qBmQxӯp;--zTݭ'IӔеRbi h.`1nj?w~@P$03sZ u $wEAi55aO )g bm?׉? Ď<~S~~ͻ'VZPsJxw = v$kÛ# +|M*ii㛀 F=7ʄFz4P.$}q_Tv4M/XA6ieΟ4B.IX>ahOp^Ҥ0Oc-&l/yM54|n9oO@-ۘ¾K~V&p&ƒ6TtLF=uӈ=>uN_{MRZD rIܴ;fO~_c'AVXAX'V|B$rZA.E\wT+h}@b{Ie*6  ( )26J\RQZu,0aM{3U۽3N/ 9o2B U @~vר2/:>vA_[SU* <|ô'kN^S+mʗcmB 'OYwaQlm]viA%,TT-ֵZxULDEЫ"X ݵl|t,Ȋfy3Ξ9sֹg{BKc.ip 7MT?艭rvPB$ڼRɞ]KMO|2};rsbmbݬ~d')~r_m=bݢf~a9#g-\ng;`mҥ$-/"RJJ$EA E .sD\!%R 4z%S:FW8Q}lc!BHFSX/Ia˗ iנ.-佹7I]+Wkm&v6dϨŞBs&o.^^ ;`~dIM ~om\9CbSxBY?F$Jl5$ɩ؀VG<Tha/x̾ռ>IT=ۍI e^$.X\jQvL{ڡWmў̃=cl\R_Hul9 Ҵ9OqCO? (3EnꭩGC%?-5qJƇ>Y"r)v)w[.7wF4TީϬ絹rjYRv<>P?PzivLb;a~.E&7&k[o1|Q-˧h8~Dp-O߶fޥbuѸRdIVu7Z{Y+j ivߩ z?$.%N=oDcCMgn7fQvQlM=#>͓y5?t5P`+Y:]'FHָXëf lesE' U4 A.ۖ, uV=>J.[],U9 #I"B_ ZhJVc+, ˕h8n]X#fw2d8fNu\Ք^Z-z-ݻ &XC&3,O n[trP3v3d[*]ؾD>δn\5R-&$Jm1axNoVx?o޴sg{Mŗn|Z{hm2b=OEf;ZǨNue6dҫvVBt{[ݼhj*{ {dBdo!D9lha ~؍TWϞ yvhhb AB!~3SX/drpk]6,[t۶Ǜ=3e=$RQmsȱ#O4_u9g?IiAS"+_sN_tջ77RԘAO5n}WAQjZ iG@SV:s3^t~sM4 :5/ա vc '̠.=h9$ǯhU3N8=9htf\0mbXQ>"O\˛^>I۪[Zwi)O2nL뭧4y5<`vjtVE03h3ԁK3?KF.K99YARoZHs㲯>O1OSB R_\^M?p_z@K3(ި9O˛>ƁJ [+~}h2g]\v[썧K:99բ$F3/CٔaBuOݫH WZEi9ڷ{߿\[Аn3O3*ONwϗ8$fl>ɼX\rC׾YN,}NEf;^ZK(Yw'nʕRc.<5Q&.k]eo!UV֏,YZ!~D^ˀ?39f7Øi jUn'ȼ{;dn uPgc6B!TGgq(1G-e@|дz:ZNM~z; U߲Ka7! t]oV)@bWJj66ES4V& o7X 0"oڬ-}&%|Kv@r>_Ž޺^S#3c-nRHď;q9'9UZX?S1ܻy@dpD5׺H$_STk= ԋ\&=`tz@*_ uF޲>/#R3ߥScu|fuXsΓ|I4-}ufn`UT:#hv/?c#{zX~}ȩÀRQU-S0:BE?]9OrÃrĮlً"NZ*F(4Ǻ lC HxE lirX |>x$38ޛ<>I4% =ԩJKd: 3:9wZU^yY2*[/BUR2y[p## yɂ$ɘzu$srCOk2<̾[IA˨_OwRڗs7p(\HJEm_ŒRo鼲 TiRWH3r YqA.RHE_*T jX|/Sd7 Uխy'xn%*/n^cU!`aq [6m ԫT"s Эy$mh.I(WЫ$ceL:@ߔMý?p3KD5XmW-[oʶye%uz[xvtCQѩCs7Ud¯*%{ "nzݹsRnn`Uԓ*L&SWW7|e&nFҤ8z[]A&WvL!B>uehZ8\@ym;k󭨅F9?wb$< xNa^U^IM>,;)(*Ӡ9Nj?lWwg:V:s O UYCRR"Wj]UruU+42?LI@h>`CyMzNUm޲mB[5/p_{msڹʛeI'MSzu0Sg@IRl96_y8a s/YXyjȪf !P6l$wa]3`!B \;t\TU5> QQoGHILSrsJ_˜]Ǎ ]hެc3{MڴrۊbbI$ﲨĝ&Ty3U+Ԛ ^<%޶u_6яxjؿQz+8մ5wkxA](Na'9"f`XhJLP46CJ)nVS%E w9`XY^Y OB$KŴ͖m %,]N5*BYm!!B!B藅=~S&ɏC2tvCo#qſ=ƥzS^Gexw(sB`hi/V3#|{O|cc3[̌xyW]\-ZJJ_fr'm|d;ĖuaaӚ npin6i L>/c@0?Fu^MU cRU(h!=Çx~z Unjed I W]Cssw* 5~rۛհf6x5h b!?v~ ˚9ȥ>i6^%f&'KuF~g)SvSO?W]h/uwh,]ljxThxb~˻*T~kCo>hѻ=``kqZ4lu3Y叴rPGVu[B:AQԧOQ "PpM7a0`!}DMѺ 7ZctB+%tD-7~B\7os?:62eH߾vBH$"I( B]OF!`O!B!;o;iLsaO_=H0U,9oXdnBIpF!"Bm.8 B!B!d B!B!B!"B!B!1!BBB!B!B!aOa'H_8sN $!i:=^W㩎AkB!!sB!>Z_DR Ĥ+Ⴡ]DO}8fOa ,r ZhJVc̓[8U}+f;cNSu m 'kAꦋkoHvQlM=#>+͂ 9:N$}%~5Bb[9˝ $_J;iY]C3NV:^b],U9 #I"BI B!*|`硯>]r;K>g? {Yн;W^?O[H d/|iͦUKFUy)))))mŖ0Cݽ}w`$s Uiܹtbv E?cj[a "fݒ?)a/og 99)D!P=$Ctth&#J~5L\^9v)t6t1+gbGkҽ2皷}T϶Myt.ZvڵkjӬk=\V8[Z/MQZ֤^bfޣ}vB]mڭ3ż;Gy&U j5kOkE2VAƀdGvy*YN#=Fonxo\e,&c"o1|Ńd.}zmtszy5)B!̺> Y4M{1ԔԔ, `j4akbnkZiX R;99t`g(XLp\EԿ36pBgx|%!B SX/drpk]6,[t۶Ǜ=3e=Tvu'sеw*,K:v~޶TW),c=m:xs*2iu?M6KFrfQ7}Ro+v!  hjDgnko..jVCӛT j ׭x؟u-Sud݉rԘO h}KJmSbM*64tg}|nhsB!TƎJ 4%N< -Gsޚ=1 uh#?#Eť5m[>ZE>nmQ (O0s=21hۢFvh۶p[kdAcG}'g3ms^NDrƽ#hHR*  _2dã7G;)]FdݻrAث >60kӡ먁ԙz~\L Z}:03qGa 9BeU͆v \pAc6pԝ/XXrxKr@Cj؆/6tX᫞g,?5OJIMK)Oh&҄\ed<`(\py,Z#Gz2U)4:n6;[t3!FH.9~::aGdq# N ؤʖ/KNƼ8w5jةPvXKOM}NHHȳ՘E;yħ,.`k9է_SE P-sY|r׏B!K_a#?\3{]6 M[?kk+gF5ۅŋ=ORNovKݛWY%?oK ln]oabTbhmi?P1 O m<t0*VW%סJmTb-iD~7![ aY"BꢤYA"б(\(z9cе?IEo瘵Irzb=/7")9yUF9f7R 7^ꥌ]Q|ɸ5/ŁrKRPBY^<ڳzվ'w3ݡsemf% ^S\~ݬyI -.߁K$e˹/Rg*O+"frIRIxpٞw1I ʬ *6P-ѥ,ݵxhW[dv0WM4xÉQbe qܫQ7-HQJQ'RUcG&홳}-^/N];w*5)YMY"ũq/<ГrCKMǮD$ $$y˜Q΋YsE\ZXJIn\ذQȼ iBӀBzK %|0V˾DdI)H8Vl/P޷ZaG08n*=.G?{s{i\z19?(*"lC$ ĥ|Y2q+v,q|=4[ھO5)B!u(kY"1]!Jndf+fvnHI~}-w>N%`S)Ѯc\/g=IV\s•mҔ˯n *m#ϡkvg}M:soԴaɄ6&$7k݈o^^R, V> :ZU@ö4TcŽysFæ*-:+4yE/g}$Yi"P71[͌ Yil?|MC;mf> u/(0)YI@v1!)q9/"Yv@)=8z]ʹɟޜ|-"ͮj7"Dt?3{UnXyd(i R%M5 ƴ6&󒃯lߩ3Z)0d.p)*/=9,I^@(K9i`9us'[H wԎZv+!f&',IKN1~d,M#VdTG?*-ܸI珷12`s'c5A^p\R(LW H4;~Mqq\FJRiEOO"2a l>^T`<N<͙tוP>?#*jn"R Z[T=6ه(PјBI@H1d>D5?>Y4쯰DS^P$opL!T1Ld.8s}GCux~ݾK?VANd}[Y|?&Z5c4m_Q᜜oNeASw aH~/4}th'[‰G&&GΊd"\GN/diL+PrJ8(+K~&(iɞ 3QF-,m6sn㨣Xp@"A$ܖ',pN<ܭ,-E"qA!P]a`Pλr*qpaWْsoeY-Ky oiRbIﲊ}O >_}TAGdQ{Ys'Zji-@JXzu7MO9~ǫ:)#O!B 5 _pj3MS->I4Td#J\t(-ב c6H7U5k> uaG@K(dM{,e˹kOan1 i* X2+5)))))9W=&Ӛk;~o "#JׅPUhpQ3m(,x@jѦ<̒k VL̊JƜ &(a靑7eڅ! 0iUC^;&Oy4 ҅dTQbq~ga 'nƍ,q4!B!"0eV]*jɈ8gޓ%;ڨ ^mWৢߒ4[ET j4)p(ĩjoݙxK|``]=fyT|-ܸpUjz@n;:[RX4n1f{!8%gxNnrڴsfȟ-LUP-!k4X=dٲe˖<]N ؙ7bI-[eOwca=fx7nܸn@,)6p=|cc-sy)^ĺN@\w0D5\\Saǎަ;2n1Ro$%͝Ҳ XU>}SB!T"{aM'9m_m4khuPbrMN^qA^_sY WLd I/yOއskQoS_=kV, =c;F'$$%%Wɰ$L@vdgWJ 6ZXb`ٗ[\RH6P Y)sg/kQ 2΄ 2XjR4jpx%8e)ϳ(1EHZrRM'dV-'ǯS4GU%lh#/(yfxzVd%HLOKIԷ4P| /\sԨ|b%&D!/{ (8nurؔDR-6/eRaJEHnvZӇvNZ~0UBrԛo_V}ܮʼV{=x47#7Ο\dKyCJlР13]PJW/ܙkiJqoTR6I܌;J.qTQ|1)K[@*CTc;Y-T$rNlFI{}9Rfݝz~gL U&B$DB:o B!߿i?Zz\kB>J ѠM_th BÙiVY~aw׻.X1w{QUl2QE=-eA>:v&unkox 𐿻};|J= U(q+%:4[JcWnMR䔡KzbGL+̄mֽ0#2+^*jvLmN(GXѫf-_7C#) UNچ9ǖ\%+ }{)_Dp!M7un!݉vmU0+xԔʜFxun CA} #===M>Rb.'},ՔSZRosМrCq K~Bzlu:e&C 1`W0t+dW:b{V$[2v؄)E4,vV9^)eZ~3rH+Z9e2S/8-9lѺ߲׷1}[tDݒ1ff9Ga uϓRU5/ܘ׵m_ߒCǏB!{c B?>"؃h2w?1!B1Q-[v+8Z\4210o1m3k*2 42Քd!=#3\4qX{&&z,SIMơE[n3O"@aeN!Brc B[!?cs+S$ˡѹmg]A!\uCס?#C{0VVU77V1WcKrRMjjrl)R*ssrbƦ Gb'tŻ;lQ%f4+"arB,& ̤tD 5`/9f1"anNyTkKgq{<1ŘYQid&G]]MQdEI"~^n_T8sTPPWd+0 R"ryBcS*>>:e,ibb@ո2XleeeEbLID,2J1}BrGs%<ϟ?BBQ@km's.8ie3 #B!Bth.F8Y&6K5fٕvZ*NO)줸2iҏVjIr|legeWR,Ac^>`OSC) j r3)j <R4ݐ%SjD 35i2T*g̩%}o2BJD @݃b囹b)|B!T`O!B~vxB!'QN(no*GaߘT=h;ئryvhڬ<49J5sLB!)D!B!T%x 83cmv3I)SX]MҼ ⧞foCK0qu=s;%'fQBz{ B!BW ۨӔem4).R[ ُT',ǚ$[ !B^J!B!3CkFUb+=tLLtuߨ7.$h- 3D!B ) mx2.T'@!B썤$#::B!jW")'}1fVƨ4 B!B7=!B*aOa$-_2^Y'vX\)a_XJ.caB!B7=!B*aOaLb_8nSׁn4HDGf W_+,$8»JB!Bwfee0k**M4j@!<`OaDˮ3wٰlEmo̔ Sy`h B!B7&ť#!B!T >i(1G-e@|дz:ܷdGN1(`B!B!B!),K.^J(we_[NC!#cB!B!B!ȻPKf .22Y\FT0b!B!B!BS(>Q+欅(A1a !B!B!BoOɵC0uL}jBn B!B!B!!YKt 0!?;IH ي8Pk8Z֭uՉh]:p-nQZ+QԪ";@$?@РHn^$ys~r/C=SDd0S{?P*uA,@f ?g˜w86E4@f ?g.*S B{зoo׎  (3m(?3Ӳeى#\}KB/> e =@YgpQ/f ՗([xOCL \Ӵ X8,ax-+lӞa]JӇ4&I.|aFrܝtM"QP Ԅdgfö'On{"IpqXoc:6E]e6>gΎTAC?9!&ٕv}:>&GDS40dž|(aBDyvŠdrd .\ (sB"F7ig1M-y1Nz|.}0Se0 ^0{>NP:}0B.+{95z֭CۙJjUDDo>QRIW? khk< 3qKZ9\tbl77`P}IXZ&P:-biT>@Df4D'  ("ۤNObفSG<3`#*Y(0?O$)̈;0%9^N8op֛1fn|b 8`aIea9wKߪɃndוGo8om4?č \Ţ5n?ؙqy﹞R{G ha,jY5;gc|XAY-:60taui꘍:hʋG8L-oKDѳW`i8t~)"E1i=s-Msʯeq;Xs9gdG1WJ%딣t"XeJv٤ukC6]_<^Mtj(S7'IKʛ|Q(|O2i[c'N;":G`/W̒j,YUC6Wgɢ-38Xw?yƖzLBwmRnnzXڰm&[aɅ{,%'t1M{9}&rM¶ƟuѦ? pu[Oux&vz|'0%[뤎Yʍ :/KB3օd~`daKn ;HQf  2t7s۸i^f w =zHv`s۔n#7^ n2. ZJZ/ߋ_5O,۬}wuKlOxm2"4STٵUvb[9~!-d[ݲsO'kgOƽJyRWfn_:jh?q7&Uۢ3qc\fnݭgHQ˚)m̒j-YT@,֒o6_RG?};vTs'K.'!-J Y)k.ΖHZuoBXP`00raKvnMW  E18fFҔiZR]{6s fTSXRq˫v@@gܹLԫW_R͜:eWvſ-4LODEw?.yNR4_`Vt_v2%"Xmϊ+= ln-ɍ[Xmv~e~\7<&NdO5RpŢi3[T@kk(t~ rXDvO$un y1]bko z2kS"ʊ;xHU)mΖ[wT3>XVmT7%JFux@IBah9,OQD}A? Chv*̷w"}j1{Y$ &QU+{%_@]UvorguTW㐗SĄo\7yD2TqiE^Wnu;^Ztct#7:nx6$wFJuA+gHgp^ꣵ(5֠iB"b86.==Z`Xתe4!1l݉(fpu8ie-"rKDږ(5(OaXVSeF!8Y6&DPٳq 3EV3 a &ӫ9n '-lcBDNH۲7*%.Kɦ Uk=UmRnN xkK65v tlaDr.ig!qȔ2U_g+-DplQg"e?H~?^Q.-vVĭ$W|I?.)&$"C" $[NJ ~7utNDzmP(g&y>V!WJDrIDCFW=^PV̂害Y y"Z^Ic*NG7ȶa]<^(#m~|"氉6'FOUԅ:2{wEAW>:}[7] }NoS =ODc1_b@~Nv(m@JDcI{"^펷֕GvuڵbBVplk?mnxzS@I[ɷMmeok7E}ەf?>qHAnDi:n- /Jp8rc^Q'{u`ED_zl>M-4o[ T0wԶ]^iYϘEd|a0s:o=>_l /_v(LrcN_uihQ믘vc,qcC1~{. Ҽ;al۪7hffm\k#o8S0xO*ҬMhO7ۜѧ/i8q7ob0͆ wv kϽxA  W?RD"J ¸xI9-u=n3_wo;6Q^?;Dj(n*7w?4ٮSn&LڅZ]:ًUpe釹FZ<3ʹ2ZGxcC4ь~v^f.aR z`L>)̙QUJ [tw^-RQPXdli?}ly\g#VOs%W$J´E-j+*+[WQA?moc;] 7亮u̜gCS-\<iJ6=GɦTޅJFix"5wۨ{o>5;{ŪB i;'7 唳T_@Duu}o6KjϮ&؏l5vyYlGQ,&6>SLXSF/ Ư~mh n$&9x3H/F lQ-}tVT̙;wє)z+W S qBr&gyN03ðй WH/ljnCR},яCEx*@xjJq|۾50cwfql}~Liq4h!k`_OF8#'g}n/@%0Sic|3B+_2+"}Fk^H}%Gz|f A}9; &v\=b%Ͱٸ?Cܔ킪↴3@텙BP_↸}]@Z @ aTKVDZS3bEuu{W邔m\ܴ1t ]@B)rB>UgAi?T|$ hUh3 R A@aqPҢ X8,ax-+lӞa]JӇ4&I.|aFrܝtM"QP Ԅdgfö'OnnM4d6+9٢x2)bI(),π`T8X槎fO`m1{ZdT6Z've]IB@@!Wgv#Rа9 ot, oʽ %p XA%/\G:?z:~R}O>"rWӵ:)&m^u~F^%{~ef_޺uy c5z*"7QQZI%{_0)rl?z}[TǪ1K\0Ok+vá+3{cu3kdbY ,lo+`WCˎJ3ݶk"\Y>N|FM2-X{r$ᐅ'/k1}ZP)zN ؼ"I D$h8hՖ>>QTP?r?Mk?ѩ#kq46zǰ-^o0if< Tjd9_0ϠdDv| jhڊIE'ľE;Aa8"OՁqcؚ6s{nI# S^׿>36qiSZ Y+Bᳫ&Ɲ,Ӡ0')})E1i=s-Ms*l:$md_KSM.ơSʞ p1+PM; ^[TQָ`gni۷zJѸwt܀ ]s6(.:f.j3v%N|=A}!,EzAwA|Sdl{wΤZ5m`fjZ7;8aQZN!0>owj o/x(oŞ ^kk)E]Paj5D$W$ 'R-F?.ؑ-V(dMgƶEI Y9m1sW9&7/рP(84H-ujٴrƓy} E/h\k'ܯgg2d_f;:(7ӬxC=% ev8QOnN˘Ԍ\P'] :2fEWo]-ߒg=\s=zuM+nހ,',(~}Gʮds',/bŸǧ_y>Q] bOĻw .8jSv2b]ݲ얝{v6L4:W_Vn=C{$R~z1\[ֆ5_lY֯y[X᪲m2"4STٵmr_l@Km{ݿikXZY, 3ء闊8N,EHD~}3\f,oT /CgZtҢ9m[IY>߅)]:N(xkt^-6l۽f 7|čÖ\}st=zmQ^Ҕk?~f~:vK*H.(o ͶNT#~vc׼#ǝqzZLǰ5tc^<^)EȊtYR%We˾&7n7.0n5H+)l밯g8zz3aҎoq~`7MO5wr$DG91U0L ~ 4y(gsh9ódHϠI:&FTHv-[ni۳azח^uU?أހKKzhr@|O𚇅dmPk?z%ߤ?a_ݚ'5mʲP|ɞbz;i>wPHDћ}dX_ m&cj4~zQIXV.kT(7zj' ch_ʼ:3Vl- 9PlӧeÒ8kݯ?R.ٳTS<cX9UCiKI.gm6 Zu}0Sv.NXU$s,%$y׎Ty95XEDu>_$k(=b g 6C3Ec]7c md-/iy1]bko z2kS"ʊ;xHKFA":[+{XnQ\Ԃjڸ5D$W< $R0'(g"ʈ>ܠ!Si4;ۻ IҎ>U,JfP(*k߽J~o5^3$1b}Si޵j ~ ?20v1ED; 1?:~pP*?:T$oD' ~r9M{~s~暈;n ~\޾p&åCM+gHgp`P?[kp~O'̦o`14Kü!Gϕ$uaՙVmP;Bn"sO; qHn3iB"4^`齜BVrsj\Ӗ^Oi=Ϧd N^+,9'y""V]751]k%?Z!_jke6&DPٳq 3EV3 a &ӫ9n '-lcBDNH۲7*6V=Um7KFfC!7@D~KQw I:L$gg]KFm "n'H"%uئO4!7r@&y:VSvA|Sdl廴O=)wƭT#=1^HD*3lF[Q[I)HIrRKѶꧪD@9kv`WĭϷjnҮnYs:hZf[OOҒrrI¸7Dt{▝K&oOE 1=lbH(\ >V$-e. d 2kSIZsa|jv0nx)DY)\N?|t腫n^pɝqly^gC)*WYtT]z>U$1YI9F&)IU!.(o "̈́Z%_yDv&z$\ҒUqS;)HL,iUHeslm.s Q(:=yГo= p;OٲU:a4iK'^EqѡϓHH; @c4ґ'Zuc|x]Kz}3P0eOe]x*%)[Zfg uNڅ +wkߑD$L ֣zzy HTP sŠ$ZD!յTjQ=ZT޲Bz>7륒܄*i%| шRF mW &MQYi\OGefcMidjuSCsv3h"hSlڣFtq jrF9kZ$ ͹qO/70ڊ3) +*=}%$:J~ (=g ~x g4I"@muF cž5Qc{\j1!G/ Uxlpμݨ_9QAʹuasw"԰Ev~3՝u5ޭepr{MNandzѻ#^8T$Ed 1B"5ۖn-3ۚ*EVQN5%gAA IDAT? %.u!A" m~@Ǥx)X24ˌ$".LDDJ]Z9r=UucbkQ^rjB9Y3qSUɨ0-L(ja+QfT< ,純#^| ?ztoMD/p8 ~$2?Ҝ iLQrӺ-ݺҌV(6r(GuW JsE,u-zSnK6e~.>.j5iԿ5n㻯8ݮĘ87?g(6ْr0컔a}9>*7ipiQ֡v&>h]>>uBs7IK |DQ[Jy}J{ݟ0ֹnrٌѕubr MZnlwv7L<=muOB.voiJ> YcGW-Z&D볽toxɛERqSav`(u>&MQyOs":loTf߬{o2粓/,xٹQ?r>!-QlI \HR| QpM>L4؉'f/Ɋ;6WIda^A9|`]˛1?dS*IDJ~tҼoO8ϿesW ),455v -ЭK~z3LHP OO%߬hcmBDTU[$hί|d1))_$k`1o O^ˬDvkyO⹽%I9es=QF.sm+ܽW9$?aӮ鿴&"@5ʔIb8 ~uPϯ̴켕a:t. |jܢ;VZJZvԓϰ5:-pk;(I[8|;hUMp~ܔwC1"#V]y1awKqa|W]Z9Zf{+]^233%fw2e=cQի0<>ze\t)u^\]C(&4Ќy^|n>{t1м>DE Ymtrjh;isŭJdK*B.(o " )0oީm4&j} [[Sfq^^dM7py!LWU,1<*}FUB9gpaG856m\k3 ~2m'δu7[nap5&՝5mJu\n6\V3<{O #y/ ~u*hր/͋O 걔%+=y0;R{. , ^M*7?gwݩᘖ,"#U}\G:O~֢|c ș3;w&)S&W)[ܛ!>)BnlZ9qfp) ϼ^ Y1]CR"V^E]}ek"x"5wۨ{o>5;{*քC2qoP_N9K%DT]1鲎w拐S1 ghB1M&$" -i+Wz#:lRe~fg~SܲΛzhWicC-]<(TֳַeѠ?ͷ"x繤_^նnh=zMˊ?+")IL᥋Q,&6KS"Ȥ&gRq֕ajBYxTP$: {ygX6~-W=+*}Vf< -oV/Z6X1R?y `6~.?}tVc Us T_/m޼5StXbbcnCp@?)R2﹛]e:ӄMOT9"ðfOW C炜#_!-o'}} SJ{hiڸﳖ6q8N6ώ+2dž &ZW&L^FDœ #,H<5omޚU~ܱ;O86L A>?m8nkᐵ0H/C'ln]?8aeD$xttQ?m]_u!T bP2PWB]a sQΏG*g1Nz|.6L!|Y=f{!}={֡?c5z*"7QQ}jjT"(Ϗ˘.ߵc!f W0|^ hhAuO QΟ%GxfF@jܧP*OhoC͓_/t0hp,욏1>_\:[|c3(avF\}{o*.:f.j3v%N|=A}QeaU{!n#:Xjrf6w5|3EzAwDighZ\obcĜ||h\&\ƥC_[f|LUf:}s_[ȡ]\tx3v&or vA|+$H\B̍͞_%Ӳ olvAqSFq$"Q<}WwmQ_5pql:G!#n:0.J ^x`pMl1|erF9O3Ɠa<Ώ݆ODCqG:Zlhײ|E9t$)zXy/cRRS3r ӿ)S&mu,)wGDݹ@6DgX߈_󸙃me-SnmyqXڰm&ѷ.% ##[rkǗ궞M:}N`KɥIsEGH}8\L.(ãͫWfI,S5_h/ބĶ;M~Ho7>hͨT@]PaQm9+)lf3Xv=0i^SKUNOO~'!:J5@ڿ rX7VmNQUywب6UG;biRV 9? Q|f7.-|[&f69$m8["mhսf aB -l6*Om7mͨ#3 RWOZ9s&`D4eʤ^?啂|n)B\}T8NADDWBDg-p4$oHYE=9IřݜV\9kͮoQ, 6E% 6[짹 9i!E$`7DMQ(SEFD8G?Z?ɛqm~'ܧ6Rj/iZ+- Z,<#"-Xx؛bNWjU K~}J~յѾx/5!kDZ=-m!mLȩi[&ԠTevu\e94!qyVBͩrM[z>&.=<.-H%>,^4;Rf 6 y"b[-J:L$ggXk3*.ԊU"xׅb>>ӄDpUD}X4!1年Z@2"‰H G E"]ݙӄD0yQL꬙ai$E1y P)$"!#Betp\KqO6|t-C k%[YĜOD|vnQދY_aD$\OCLED<-犕azSv!.::pɹvr㞃B9Ӊu|C]u?s E.oOr lQ*Α/$"GR6#_xԖjq`+o$Rҳ\"Ry@*&ba55P(O?rH$":O (Z3,>5;SX7<\STq7 IaoGVҀ?{δGRVOB?fIP꽻 W>zj୛׮ܾ|rD)[[f\F3h"hSlڣFtq jrF9ꑃRȩiA9kT4IT@D\VS]V|Հo(p˻姝 ih;w(q$6e.i%?W lO+59ENyyPf3ۚ*u˟FsѭCmk[TeeFf}s/NDu#7SU>&)%(T57U RD?ɑ6>_AIи)eFţrNKz<7oQ{.j %D~??$ih8wU>RaűnS"0SLڛQ wX/;yۡ%RqSav3=[v6Y̼uѽcߖ4?u.Ԑ42tK5vpYqԧ!sۥܸSX HS/#+BDW. ùfչ]cƓ9s9\ǣ7}<8I_k֥Zg_摶K9+לsRkeeԿ Rؔo  3s}a? O~m`oug>թB4Llٲ[|-)l8iAL<{=;KQuQ%w&Ѡ[H3O=3hpg3mپfNbh=˕mg;w)S&   ]{ ڈK RyOC P9:AYZpLl:CƳK`tϊ>KGT    . IDATw > &s"[ulъey?& #M[øƗv-jnc$tŽnwSshXMl&*AAAA;3|m[NOϐx-㺢fPouN^]nCkev,ݑwD    |`$_.`vYoczl47tKAAAAA)D4Ipp0*z]@DAAAAC AAAAAA3      #ʡȾF7IUW=ov/M%V.g̫̋n2\K' %o&ͮ'P_ұw yę߬J3:-C КoJ7A3qA#Ct AAAAA;=#~ DRɫ@ťUA ɶj E:>B6Яzg˥o.t:AњHma1բF n*4R喎3|ؘ;}r`Ġ/T*CYSRYҎ>oحUn( F#LW*Ƚ<>N͌vGy-t IM[sK<.hܑAAAAk>D9cD2= va'fm[B_Q,jVC.OӄX' $;*"( C ?yWǥHM[Z'\5>ݹ H    R)F0t9s^kMQ 5$۾DrM>wN)A׏'uy;򘗙9W# 92B 1O_P%)SҔJar7:oCĤ$r7Au<=lj:sM}+۶/rLmDYv7ABBKH9dc l&s~"׭ApĽ?pޢB6]ӆ=N35,ޮ. "r60olAӫSMQYGl,lSHhNMZ@*fֿv#5tf3=Z(M&FCd)7g39>pR|lA}w[c2X;1xjȃ *O^+[  Ȓf{~csPCث"׳M//SPދ    hLu96*K$3TY!y@& y]VyI"&.Vi}WMz"qkjɃAW>^ "sʆ*%׺d#m_ݾC?#J`k]Oιg`߽u<6w;j&#i6!8xҾkWϢsjK}OʹsO+}qRLVݧi?GH:][ɮWI=nF]YI[ Jdz}[ enbf-)ôfI ( 8b"KCDRҔS=ӹNv=HLa즩czUٗ"    ?vJa(uu$x'_zloNJiʛEnfNON F78txyueXo9LF^񡜢1 g뽒mY&VX6ݛiVT ƑE[9;{[8w/F̻D3+|*Sdopnb{;zDPYE) nfмzA^̤ylr9^5[RcsK7$t^C/} ^.͟26^7`4+(J&U  ^͞gʓ*oeI@QN?H(0v6}59$4+ Zq^[[]i6f^>"K{~eAI-77+*rK*⯖^[;Piu4қjȇ_ c^blpdgHu"Rb @EJI*F+Bџw$u^(tM~V[>n  ڵ+W]6AAA~BswrlXgaS-F}Ji}a7ءdf7 S5qĵEˠ1;v}-=J <.6YgڇYWxGgK*%N01W´cg&N3@W-3?;]oV@'J5ߥK32_'rWH"P}U\f_}}EMl6n3?.l*~IM Tt?SҔ[KeTRF\WR=>;fc9bBﵿW u{6VFښ2j m}n)-a6&|<'xdO^(S(MlXmu+k:4C`9bǡZ pVgͿ>+_zQ 㢶97̾⾁"h>}[YXXY[[ZYZZ;XZ8ԳwtruwwhoogYLg`dh`dhhlg113٧k    FRW$+|tOdΚ=ew&灠w]zߙ2u8mg @.ƇGDnҹ[fYɊ~hƜ|{=/=#xK>+1/ !Wj,Dwk k`ۘ?@奶?\S(n9&' 5-x^S8QM}J&Hu7=,VR R*)PR1M?¨e̽C>ˊ@RXДFPߑ4 %9\Ӈ_'M`5Э,@\Kni,4i\Jݠ4a[k~MhJ_j( ^3R#fmrAO'm/ٻ៭?߶Z dҥ6l H( h4erAj\.r\h (RG.b>/*jiiRUT'AaU }|}|?9AAA*F2R_ncz܋\ÔHGAlw2|$ɶhƚ>FfL^\(`~_KKEgDԠwiY2\TAєJR$(۶oL!   HQGtQPޟua3LDdDzN|=mcWΪ( M-!Q46IMagH +wYv:S[r, 7cnM[ \,RFWdը2*[-}:˴ڼ@bI^-MjKմB{J_͑4kN]vӳs*Լ{.AC8xnf$90qJr,;d orKRfH`gVV-3š75i6J JscΩa6nlx.N~m 5y5I T@6 \6bd2C,K[[[r8LV/U@/,Ȥ 8KHQRيo"   B >O%@QG~fM膻T=)6\p%1WB+46vY+<'`N_v܀sBU5+Twdn(s7!}՛].6+1t`Yf)Ϲ{oLoY _id<+8fm ;3RoPd^C܊l2D3iK).UR^e6mmOW_5olRqy+ ^$hh&z cu37:ދ R(,,,=P̓ djii6lذo߾cǎ={۵kgjjJT*HOOD B$q܌ \p8 Fh4U48(Y( "~#bZdAA f ?"ލۉ ]Zf/^;sU[3]}{ϣ I^3뭲೤o~WL_U6Ͷjb>Y.]p 4dtTsﳞˠ]"pDTꭧsAl .@eMjQմBe{J7EʮiБ4kӏ}CGsYʥ/UXV48PeHBqk{z% ;aqO(Y?O"jV ޵Ni{A,#x,5Mb @!~ĭ ɸMVύq dV[ T[dI7Z3ALQƎ$I@`Tmڴ8y¤)>u]v43"QH+r9EQAHR@!R*::<$IAP$dӄA|;|_q"CT- Z9st#GK>i`Юm_kV tʵ\x;*uVm9.acY+S~#J1AjF" |\}s$]wW3'Pĩia @QdQTc^OU#g:U4&+TNҢ=]摰9'|mTm@zq~4\0Wc5X!$㗵:}޺O7.! nܩ9LcyƩ Î6&FןvO/:1-7goӥŝ[wwwtliOp<<׭FIPͯ3i{6mjp1XA7ZlVU8Ǖgy4qs`̧7SrYi]J!;ܵo"z,:8 BGxvd{=4bdOIyHDu_J\d9€xb0o6Mb @Vc;طwF?~A{^VSco->.hvVӑԎ;_67&f]a2B5t\@j|SZd2eή \!) `0AbX&eee+ SS`0d2eT}Gƌʴf Г -;979iB 7r֓)I3zힵبºǏs-Q |MF~Q[oEИ,]# |B ױj;,]ԿD'9?X%{_9m֯VhUMm3~)֋*[cʠv yjAk'_;Oӷq V;579{.ON;mL/Ř\W+T<Opþ@Q)Tӑ4 Z3i.iO 8aE~J 'tֈ;{,v[ID} XZvit^ɲۓxFNױ06ũmS[37&VGw9~˖I6?I T 7ui( wLZqж;ͺvܚkqAsC>w7i]|4MWA%BJAIh4hh4LF(H lP(9y999r$IB$cccUbDP(h4R$ć6|~jӾi<{p4!Ǩ$O? pywr{ fq~|; HxkqƨAA[L5ܩ܎~pդh~p ˍ#gGGAWu yx-Wv uNĤ"ﰞQ&ߜ5zof1 8vD!)o]@rΝ{`ʔz`ͺz%BUnF#h4iذ;I(FQU()J-fzJ b%%/(JTŒdb8??_*rLTEQ JY T)_B٢>) ۾@|+_ܾMdv<5ߗR$gPs^LoY>*|fxx\CӾ4B{mF ;lUt-F.JQpd˗|g,-zFjpjaæ^%`9q刹g@A˩hwL.I.\p럝}E(: [:}ɬ!.Ao^t*(6 ;ֹp8&iJ{xmGIk5ornv#g6gRIslW]5Y!;w^ vd{Ֆ76-ٰmPrl=y?PHVϘt1óM7t;n /h͂w~)yJPVش)9/kS/]3kڱߟ^^EI&xc(91+{8aĉ%_?^ț qӘ&ooEj5w3׹w-^ ŊM~ˢ㍒Q w6 IDATɫAI٣Y '/>$'Vxbpt]۸Y`]s4eR YteS ;p}XQO:ux#AWxdYc ~?,@q×liͤ ﻡ =OLD i}6" fr IJM+,)bY|DZ(Wв ENNNFZ[*% I CPBP(It J%J..E$IJrRIA(AqVԘ^|m:׬^vMyI/<9~,ⓓwWwhHƖ0Cv_<=gSm@8X23[DaԹV&҄ /u֒?EnlfcWROmYzwI֛WN)|>7?~=&mfqzL 4R;vT܆Sm}|@/6>jJ?-*ϱك=?z:v6M-RKwro]υ!+.PxAnM̽mNZG]:+ != Zt=BPcjMڱj5_g!kv:|cOp)deoi -MN#i5rkg܈) yud"1sz  W,VmLNVyti哊<8!ݧUf߱ݮ߽c*.2-l|y\m/# .r)'w(~AA)DM2`T   R+Wdgz\}زv}&yF y } 4'Ğ;vΥMz;a„~- 逾xq{Sl)Ez-riDi&ͷ{wP|jF`^ "uPZ8bseǥ[!{T-2GSےױe7NԙΠƜ"bwڟ6/0/v?.G+4ߟJt#6+77\LQ[yÏ^9[9g{sOV *ƃ@Avmizο'# :;q~랧8l(<5EeGVQqȮ>qXKsOܷoHnaN25>  uS СCAAA_k&jWZp{:xz\ڲg`y_-;+W:jF5erdiq̒f8|Op֋?/]$V՗C\uժc ^vt;+yIc:kPQ&ٹR;rh_kՊ<`*>ڒpO꺦D@L Q*/ȵhQRLտb`魪4!n}JÐǞߟ*qL~uwvKȆ>L]QW2ٕ{8HZ. }&Sɮ. ?Kq<K7oa` JnC%aw\P^,"۸acA#Ͻ[[phLá X1LSzPmlbX3֢@Jq@gJ _){7_$< YqBA"(SW(jERYX,FF1=-RیmF3ai̢FrhL/V;wsZ1~}[sv,Rոcg}zs̙R%YX4dd0|01uS͑+=aUD7A@)K'"%Q[_:h[kpҝJ54+N[ڪy)n\_KO߯Ӷ&+i*`Ħ@TclL/ DطcA)"7M<ӂ# |`Aj%VbM,TELֺ;(,A#E1RیmFD6# v7sk3K rL?I&fjCC2u{ē;w{d}Ӎ]:v¤)53r1fY@֦&FYwkrt8jKAɒv|47/[%D,t  44.&aʾ4$D2@+,) \~)$$APT_z~oŬqӘfkUZħYYchVXPލˈW֮hRy2̘>c'*sq_ļ:uf2NmOd<'oo<ӄ R9@*3yhR"R'.x z9I a5yª_a1GgUR~sfzĴWS\hhs5KYJ$+&fI}&AQTmx!ndeZf4bXgM6#Ej"͈߯E>G W{ԧ'>=Mu{s̼g|o;=W\p2+9< ޘ?f[l}x>;~1 U[_H2Wk-5xb8Ng|s6ω& 6e|/|%u2$oko:7sj[) t0vRsFuf8`xW3uY07++ȭPVs:.l8Ps]T#)EVv{vlne%}sVm*k͚[58=~~> 3z÷;ٶI:89@[.\Gn]" M0SX]w rKǙNY'F rZ^۪/~@>nyQmTćސt()FgPQJ#.C*KIN9b9E7ё6xBA.r”ԬB,v)O¬DA0XZ:6\ ? HWYD!L /]ʡ\;?n|ԌܼB<Cz.܏-Y,oldͨI?jҹwRFťd:gnTɔW\q|IvZ[Ռ ;|RjF K (v&:;rpReK:3?ky ]m>cM8;3#;P,S$걿c? i]%!|};ʹG e닷éz63!Qq<#: igYWoSN5ٚDeK%uu*n%TLڽX^]u J)IJYXښHUS^|-fwGqEˋ c)o_ !lڍhoMmQZ75)/܍R^þCb m}S-4p1:"<(cO@m9pBҪ)CU\\y;ΞCgA679Ab毑櫶YOFM{y2e6N,a_/d)=ȹA{{ cކC2j1`?kWwgu˅f(A.52TaT`u|؉@kQ,j[l340u` jRړsl\AN;[&Rmצ@V}:I(z6& (HQe,Kx]@o$ x>KFl]#HY1䄸z-;76+R%H:K$y9I1nۻ1jR:H3ʔd ;+9ZWU&f_^U  @)L Ut%20/#>7#!&έ]ƥ2+niAvfrtVr|lV]>%]+v~#b5YֻǾ30ܬiI:|8)<[MbDsYħ噔G-Z XE(iNBȻ$H^VCݭ Bߟ]-hSGJ?ʜ7!L6K4S IB`;Yu(Tf;Lzz^ܢ͠׊DEWAo::%J|>]L 1N%̄tvmf!f6ܘPQbTҦ”,%*^H+;K֗ S=M-i[P!L1zLNI "tJLօF]JE#1oMJ?l{ץw} | xӵego1ީLF6U4:54OJ if釥-STpQq^s*uSEYϨY+j;jk5FXyr*g> 5⯭#xofMKu)\AA~ F0yn;C ݪp\Ÿa}F^q7oe:55BU4u5ˌa8xFS#vvzk[rE/?X)(OƵtkە3uJM|jdrmz@gW {8Dҵ)_I43[y.#ԛ hҏ? |ߠM=ۛVAh^:(j3d 'ޞT(Tmzl=^MyM \CU+AA#Ͽ. O/-J%'v] ׶d![ޅ2lkd#<{{nLTԇʜ7dm۶ck*?͉ 1kdHYgWHN(D!Og< 6؈^s?k۩TɸD -)7&2"£6 U)Ίxu o*s߼+nf i\k;<5?0]B8؊G%|70=7wS[}D4`M,ҵtp^_}5b3>h^-{gHBħAS> NLt9,Eœ"kbçUw! !P)l#[k'($IY [c I"`Yk9*g mJ(F;[$֣:cQE#Bݨw2l5&Ta;# ];ƞt%*Ăl a%n`./):ցqmҔ1EpmQQwT[>3GҴ\Q & 9`;;9[i3H09oMQ7N1Y亷 i-A*J۷LqR}5|olˉ,^^{΄- i]zpԩOO@}6AA >!y@& y]NTJNu_wqϩ~?ǿ)u(|jO$ ʠuwKsNF\~<mfmLۤ  Ԧ:q)ssX{A1]> e^olZՎO|ufW+Ve2mFY )mm[SN "'qa'ny]S#n k!U]ý(B0E-쥨'vl!(Zu~v:͚}ijЋ^QEPddQ@׫o+ߪKD a \V]ieLz .?O&g542%kLneJZ/YNzT^GÈȏ -6pi斜" =-2Q-&IO/jMY/3W:>Q%unкxQi5یXWc'qUnFbt7/vO*<&Z&&jYbqƈv:67d W6W10wro"y|g~˓ȗ/Z3*P*7*$^L;3RT@Lh54 (]:[jEn&Unâ?}x{Fä0Ө|%]AnMˣq-[X:9%IC{;ݐAJLޕW^zaBt"uli'תI};{HN8]$# H}˝Pi{vluI0..Y]nCE4vMڀf/w+)1vsG?ɔEקS|{hf :Hor➮jxI[>Ղ  3վ\,񚓦pKwݜ4i nhS*ԩ{&h:w5: [z3ȴ^L"W6<(OEo77,x6nSYm >pphɌ?:Utʮ^n9:=W^iT}r^eږ<約$[n|ےF v)d -_1j a\\wⒷV7 ^ף0`6vjoXv7(Ir*/_[Y\ ݊(YaWH&^UtߊoMfKb%YcK"Y"=(!ס'ʈIT|?'Ԍ.*!=W$ʬQI #324gbMfd&J {e OZhҴOzELJ.8<>#G,'|# @qc IDATiss^|@`x|F^7j!A>69[(#|cle!QYyR3rbC/#ܣx®f")2LbqH_(*RtON]ڴ𐰸4AAT$14uk`'sE)ּiӾ](}=' l΋ /f'U7!qYR3ws0!Fʝy˟JD +mN(xiİAN ?yG{v ݞ}{&/w;=y }rȓ7W₂">H)bY9Ӽ2V:IAiB 5g.7sR* )T餞G }Am-ɲ.>ϘX;wTI O KʡMi op+~RPPXljPFUQ M(i.:_w[evtTfhk%4vLT$&QL[+/A'*iLofdU4K+=..!19CP]ZFnD,7!"$2>%+O(QX\_\qƨ7Ѱ"$(s}[]FMḤEUb˴ѭA(!]h\ _T|]Cc[wO{=YJӇ\qN?#; i OJ !cS|U[ݭ_.1o=C(;*(04.=PNc,zV8ocS`Esޑ ',8QL|f ?|'S׸d- B0X/hElT H;;/&HaЋ8scCTALTfdo--O dP U4:pB1Wsl/7ru^.Ќ >ts޼wBc#7JՀ|¬+o:Ge-B  LaoHC ƺ43DnA_ڶbL2RN}7<'g@01W´Y&N3 VJVQ"nu%iB!ʼEm#6uyEީXҨhznu\tEwbwmUlɖg9;!0 )3!RJ,-?((UvPF $,x[,M˲z<$YeIxߏ?=9꽣sOɺ?>ǐ7FS\* o?=Q>F`3(gBo_#m|ϡ H:6D9T st70.W ҬJs&`S3H'zeraZ|3y!!鷰]^uELa[5UG5W46_ȧ2HP(`i(IKjY9%nw~ΏK1Ysb?}`~oy!K9Ѥ9qprejf'dz JF)p{gšcA?I$dl'gȣ?Wn%s1$>Ek*^b|mpdI 297iO{ *C!΋W0s;fu .JPiytmڂY? ,Qk8yH XD=FA-^5?5S(w_e~.K1pYSMV}LV.^?&t==fh\<1jT E=?Ե UNkx(mN+8QĘ͉ÚS0lj0vk7,0|ƆʛTXZ&]K`WbtA\ )1;:It(N@=6A]6.]9LK^É^Œ3`0n(f+E0`_KY Aya=_rqh6 d#_Am NIJVf(?xL=G(,8AJ<`Oc$dđ1e\:S 7%6, QX}yS;Fg͆:nS#*$ͨWZòU ck ,9Rc!\P&&cAЭ/T9<Y~[ t~L$[MfL" if)sRFQ0h;`}V,=`0t;5}K/Xž`.{q2 >w:)QW/gԷ9|TQ{'#~ڒ[(DC[T@bʳLN0:m#n0(d[w dv_h߉zS xo{Vnq{l3G!<b*HKJ O_!@1+BGtvV}Qrs٧cR~\ڴۤUrFߒE% :c ¸mJҺkV7*8 qO\q<ﶅF ,?~$0Goh؝8{ݪQm{vGkCϤ*e8Cp<$pNw4yplplplSuɟ 7NBo_}H^Z(8f+6UO [V?]xڄG؉Jq>3-}3 "p0R&TMWx 16hwq2GQ8GJ?pxЮ>Hn1#}Șh䇘6|W(ZH>z&NGu9M|.NATaj>n \EnAJģvdU@.+^4+X O8hHa嗂}n[%'khGNY~\9`ˡ}}چE, e**^0a(օ5U?U;wbmusV\VX 4UPqpq)ipq97Dn]uh6IHNL`$V Fw 0ejoE͏Sazk5dQঠ#kz*ՙjOV  ֝8pTY 3qb%#hվ#8FO0Y^"3Du*=3Ǯ$VO2vesWhq/ ~2YV*ݬ]pyV9anjd-K +De5@Ovi`'hGX8__VD9&LYGsyMܥK&ػ)o0zɢ e̍QdnRɋ\7`CS bG:QqE!=d=p A D4Dګ)JEDjXwzg+._5Ƽ}@"I_۵?O$'P=tT5 W,v7uȋ^1NS)D%YHGsyMƥ5t-.oEqDO$˃}tzIRx9P4 `4ȢiʼTjU-]ueu@uHG *"G$w6ݯe5 C^D;Y3ƌ{>|5l1'0 <'~47/|ِ>ޙ"AMv`.I%/*#Qs-R:1# $QޒBYD-$*H%$Jl&{l=NLeȫGRUH\84;yZ'cc,4cS۪u᧳-xAf,X*/\%i) iKUFD>Efd+tVэ Xy @]R8:`T@Rf0”#_R$c!2-uv2&JI +PuS5-PC(PB;@fDQ;}3LQa"aB7ֶ݆ [\89paߟ` Y 7k$Ya ;h ~}mYuMpeCyKJsD4!>ĺ~V+JTwkx mj b'xY;sFGe'yBno%|*%kӋ# Q0Xqxʝl<|.4k8*S:&D"[\\on1g0ZpYE#9=dQvwXnP\& vk $Fuko$nO?&ʲ6wOL7'n[YG^/0["ۧc[nw߆aT) @[H!.~($.sg_kTȕ2omR,c,A?*yQ?S0{R'wǎii+}!wR" E&&+//ћw7]9)_TG6ȧ!5ܠGQBɎ֮~zj8=6 `wHœeQpihon6ZlJJ >Ѳ59n8EpKQ"LIL^Qe1BzغL)TɎOC ; ;ʤ1Yavp{6`1Š:\1,!>-I?*sIo"N@x[ Ej|ˡ;pq'^+""wme0.k_B8>#B*ӓX͎.Uo\ITj;0 SE"UlUuENv++EN&u_kRD+&D™x;|Xp$X8xD @\QlD~"lv;t_N~v1kj5\how\٦ 30<]2[ޭ!+e^7i0tQ@ a8=I!|³yƃ?c6cU4edoqwg&7oŒL5:_x}%θr։ (Rg]g6\T(@C'#T5y$[[&aTBa[]Uh\:*]zTڪS..0`̛Mn2::38UZ}ɨQU5(*'9DzqPlZD7H,6 `6UCi፠(4: ;N"q:8`_|x<17 hocWX$.:AMu{ߏ *.-2k>^R|XLIMPn173r 8Up]N 1;/&dsdEAadlX#qkM}~2*)-6<^u "4A{G;; ؠ+}>dxGn$ Sb ;L'?zZ6cp qؑ"d./JDH( 6ܠWzqd29,&pDD"= 7~El_lNqx<&s Z'3:bˌ JNrщ& lPSUVպ~2wa$6lWAv>}jR2t`gUYu!j<.)6t@[%JeҸeZb*s;\3P8\&6Ӎ#\d$P9~g2- $2?>YZa'_΍~A%7p.1/ؠ=MΈi:kO{WJttp&HD""KO崞R'?=wMu*]yܸ)&c i!4CLېFv @8@D F^}V.U8cQ l*~/MՃǦ2x}+1|>5#'#</~ܸB)RwN~7Frj̩y x 0=8HHjaX qhA9 egyf!fu`}Ѿ vGByًKtO׃qJExV*uAp{gc;ZDM2;c:SB0Kwϐ!=H!けOtZB#JORt'yBBca! ܾseElJi~C1naaecFISԉs.uc̀V8s~aL| V5"1Lx&fApdudZ Y )_缉{NJ^v}#>\zaT2{x Ds8piP,tMVL,+/'7=3/ѭ5bdB>YUӉeMV$k~Q\a(CwX N} +ܡlx`eȄpO~m-Q\jv FاU5׊sW?FrS_Y@$*S2 IDATy¼]ۉOP4,_E5fɊ)z  =] ۃt ijBũ):ͩA礉&fSچsV^ @dN}0N̮?CfoGz3VH @)u<8 jNPY n%쳛 v@qeG=7FaNXr~ِK@C{0DUKp{nDDAD\YFl@Ш#>~4<0N*d:^q2qbQ#4 3Q2nT[1T2g̰P9c8r%gs*UʍB4rxjy&g;qO m._^{9"`2!tpQpM_&y;: o_Cc__=|욺fSpipӰLI d0ɀ{,|D6. ҙh`dqFAdBPL > @_L!OfYBeV֚0D9IaXdfǁ?ΩIb`催0r:\p=αMM1Xl]p'V`bNC%+FdSTq*鲹a)$ֱ t j`1Шskh.0'FGvyp@lD=D]eQiL'Aɫ5[jP=7#>JmOKUzeQd#)i*]PiZ ;mÄA|͢Dl{$ޛYoq۟*! 3o_ly;%@ @)<A,7K=:Pfօ;<#`^#ok ^,3Gw:m䋯~~WL/Xc|ݾwcm+(".kK]o]xӎN,s}kWmv|o*Y}8mOIf 7wb$ &a+"Wߛ;՛h9L%uEz[9D28GD I)YϝYtȣ#D) Л)3l,VH/̦W#܌%F5+c:p4~e/+eݘI ~Dht: Y fjt gPi8<` 8r(?53n(BBpLu&$ԭug@bnM^<5W,R4fu%Hζœ%r)5=x8 Fxt۫L4' Qmj @PHd%IĤ~ƚ5't_WO.(;..q ]ͮ6i"i\\T,e!.1U\S=ennw.5"!8Oae0#59)M$TLVЙad<ک5-ųi$TLfmVe!SgϾsM/!`Ym8Z)䩮.c$Q(&IJxfʙ?^Wк%8Zk蘔W>GǒC]DTEp|*Ib5k:9ڣVIb1j}B8|n,&## +?Hrmt x"tىnc{G֫I tA#FLf#,eߗm/kJHdFx?kq3 !$7 ny,8pѼk)qV[PHx"g`^&~a*))9ؾS?iOW嶲O.񈟙{M˞=I~/}o?8=k/u:6U-Fsʜ;yUB =p+e^3o{ )DYן=Se촂g\Ͼ1o6~Sz8wS󫏾lbgo}Gf&fd^~I+S91=A^P.XEsNaT%㘉D SKg =.Sđ{z'd+KA 4'N˓d1b0 Ӕihl:nf&˅|U')C'e8JOxMyɣk*UN'$h 0sky1@/Fpk޸KoPxÎ#ĬT.:r54vP2?Zy9!(ج6 %2 }UmYB 6VXqfL 0 Z, G/H^Nf*8cR2&$H*j4`/*^4S ! /&a0SupYZ+*:]xڻ!>92^gasd@蚟`+9;T_XdUA|0D4UzqJ\VRoT+)KYߧ֝l/adEs$$afMG/o?Pܣ9ʦi#2#3, l.gh,;+F|˱a>n xV2KYק;Q&Y%kl!N#0R{łŅLS9n΢L$uv)9'XtU(Nh8%>;K,9Dž:0 {W. 'Rr&9aPÀ /eMth ~THdra斲S9`D eA֩Ʋc p΂Id@ݦru_Fg$f7*gX.fee`r3#pWo[7'ɸ!tC841 ܃A <\P$d"$b.JNUk'ʛVqRJ&73mAiosݾ%r^(־~u.fRFBeOgS݋51#؅2/+k'3~Ä+ם0;%JMgt޼me˶I|43|?z~bFH avs˖Ot۬$N @|Sx\sa-*~sLpIw<7Q#Im#W?4~B)¯Mzd=?ʖkɛqOOΔk4嗪bm@ЄB<$!Qf sφpf!f>u˃(E>wed2fzIIqHf1Yi)Ky5; ?uxϩvP^YwjOT&Mm{1&[:/1L"L7gU@ǡ{jyGթQI 21qfөv $wxr_LgtR9hs02JW΍4'`@xEyTdQ}1Yg3ӤT`bcGJD\8A;^d # ~ $."-v:֮>68%' /p h?n*^¡z "HuZOVq"NFqd0|;8'x7!_oi:5N !rS'Nm*J[4~ة Yb[\R8c&iʒҬ=ǿJ'sHNlׇy03GRPݞtA&p rV]0m^rIJ8J'81~1;bhyƞoqBzpƎmG:{*&Dha uhʒ-Uj Ӭ3)6]L._:Xޮ.ۥ=)Cl` 9m TEɒ9ƆwjqB.SY-HeK\ehO %b{vPgN3R8u|s2':ٚ2QB1f!qԝ^*)mQɒK?UKDlJ %Wɀ 2 :{#^¥z *LCnoJZzu0R8v$E˗mSP*dݣ2XTQl;s웯:dR.%0cj=Zs(+ 8t Ma/Q;oi<@A@ys&/cXsAgqa$^ڒd<iIg[6uW}E,^@^jӏ-}n$IRL%B⎰R'5+W<Fۭ@%DI&'34-NZb1UWm 4\Ӯ(Mc͖~˷hyžpZ,x⋇x^]t Ͻ\NXY57 $@? H!IX F_6ŇnlCfGޏ|oDzݯɚ>lrh7 QW ᦮Pnn5X = Qy2=;[ @axpKEc3{4O̱DJٽ:}a|Br<)#3YpV^$P7t-C҅4eFvG 5"Ѹ%AZaIg0Z.dC($$gJ"6 9.aP*SLMM"SIܕK zŏ 0 ׭׷t]VƑ$--HqVj: ƭ9mG9KvMkd*$12r~Ʌy>dG9IMm] 0ӖjU:sOL -fm9a+wVCGL0%?57'EnChtZH ('mirGShq2d 9sd1U褅<\E+Y{Q\K(ԌP~C~Z3y(7m1=W|JK92 jL-/{ZZ=}&&I>܌e͍m^^c +HOO #mZ2^g4ry/_x_o9 ʙA|W*U{ j=]7v<|R=Lξw^{훖k|2f,uմ5tLODKI%<, w Ryg`gy:zPFLζ5`l#l`D?(>6E뮿R6n-,{X y[p7E=?^BrU1mji:s<d~⛅n–?$+bwmz_O\=p[옐Wyt髯Ci-ԍ톹٢]qæmK{瓧nvġg;/a`ݝ9Y{'W򇾷i5w>xxn[ͬzWn5[3Ť}Aͳy\m8' 3'W_}rn6HǤ"&UԤ3X29ްXz :#NHB~UyS55r$|i&Jbzo6mѭqTb&@ "D0nV[,~-N]yeۙ,&^צggs Yx02}e$NҮ3۽ب^H ~|rFvNK9hupS(汙t2 F#qW_Dy~ ˹pctz"ڲX/]?$#$Hnpy_`yG%}[om x` CZ!vtVF Ŀ[*ZX d9{NRE!nnz`aJfjni%n.ދs1&C%;ʫ5TEk&C@GokoTdzEmٶmۥ`R*jR9;E|G﷽=taUQL*bI^ʟ }f^M$;W`;ᛄoN7Ov[o8Gn;6- asؽ{M,ݚ"KRJTDUIlA$uIK#sy&N&( jIѹ=i$m$NĔf,䊫6_q%/Xz /kݸzQG90 5?MFU^)M+Xzŋ#Gt͗đ_O1?˜ɇK5*%|ʹE>'^;yGs՛}ݿX  p 0L&Hqh4N?l?!0?###? R% F6 F6FFGn?Ǟ#KBqzE?7ш>˃}U|/}ĵ\Phq~U#0@C)2@&m$JA!EpKFP̎}z$2Wh4X~OB<>ns> +*̈'jC)$jX)ŏ|-kHG&3޽h 2Ls Dp&QRmǧ݂}7Vtm!h7g|q\9R~z^!?:Fh41ܙ!{Cc <` <`'m$m$m$$ȘO;J$ YO v?Ȩ3Ŕ@fy>/vk|g_r͗,f0S>cf?U˩(`([Kͫã߅H#̿=k{uy3Bu@!j5 ?f!A"/DF"Q;jb=VkƒCBtnMO26nypϑ;}(xf)\ tDѫQ_lGԱq54] o-8bbpz@Ph_S\w[6-r>vی8}epqt.}Tf?UI$|sl߽ϫV2J{z;wk2Կo0!E95UyOwF+~`JQoXB(X,; @ooΖO >xs~sJ)czYw٢NCY rgw8M٘xn{'_eWp]hY0?OOzMw-w6"yGգXOLs:N-bfpz cC\3/~ۯ;>CUAOgP0qXc~}ݎkpK[>?o7{?߷5/@F&ᛱ7Opwqۢ4> @ƙ. ڏ_ygŊ?q?<?\]qM7J @ @QMGvoxbgaBU(UDm۳kɈx^ݤnwaM+$D}=&OIx-6xر#vïoxuyi< vʞi"]!vWấYx6m#7Yx.}U-8No]֛Hϟ_].p~Gxͯl֛.,qԾf;oq..l3އC2Ím񾾺Q̈I fU=K_]/ȴ"Yvk쟪f<]j7 ߜoRϿgu<8Ha ZӥzGy^*Qz^' 0oݡyٖoߛc"d5>B98uYºׂkiuT~r;M(LxN^N[w|Դ;^GOVj{\K|5NlQzM2'NG!Y @ @Νvv"KT]qտ>*~ۭ>Oxe+-[=-_ls~}}Nq)N,w2[p~鱷#هCT .]̈`ΈIϗUI~׿I+.S労@.u+$Z³ŒuM7%X pٸqwrkfޓ9S2z=#7( xp*7yߞYHt5^bޗ;n{4 ^`$'zM(#}S_{Q^hhC颡向䪤|څ{g~iϫw{ GmcCcCyS3=@+΢[H%5aX;*= @ @P̝;E \|so~[wRc{:]c /,%[_2$"{.Njg?r[t}|m_˞Weų"s|Փߵ*xˇߺkt@W{ qw?4S0qqO~yӓ~y?eŗ h si?w_WK$sDOr9ދs^nZ;ΜYy㒸#_v>zr?E_}gѭv4Қ,T;*M @ @p |sѭw%TY+u} 4١sG{'`4]=&@&8 0Hi6X{3{~Gu0KҎWةH'#.^7=<*͆\cҖG wL5gIEh]^vΡrmuh__.t7D߱pwqQlm]vQ,[k^n`(Ͳ,~wvss,< <DU xESu%++ fc}&5hӴN2Ϯ D H5`lbC)3wܽ/Dtm'Gs-yˑM |(e6U,>e).&b%zܴzy\o#ukv vx;|q6ڙgpNVĔ2CwZ 7޵ƥumc]Ce\Sc2vzvkWGO^9RsB}VTL~88T3Vu`, }!̐Z~xϞ}q+"KuJW 6WY e =j!:/pk0j&D$e&#\wo:"guFjQh%!uxVp‘8M=z)K"$]),8&^ äY$;%pFnނɬ?hhLDћ_37K6D$e&"VJʃvks"<똴i/w m"3Q"$]h ֭߬KW7WjPǎ!Ҩ2w0qnqZ/>[\{oDu-Fx1DCk-lT_L93cA:.j>&o]VIy(3xnC7gV~ep:si- _ߴy+BBbc^#Bˍo.&HwT;vȀ׻wڵPwy=?ODŽ:4^3<.^yWlV:ԫqn߃e["2W϶/{}lCikt=&:c{~1lE‡]}H MJ| g{泐sjF\Je13Bڍ>|֬{.0{~/I_|Hn1ĂM}:+.^HS8 8BJe/f|y-3^10Y)P>+hb$/֘}f'51B~QY &J8xosJִ_0Iwؾue;_"ü!I'N70Ǚ!)P<RaGg /l_1I7gX:vk-WȪyQ7&Kik5!ύua+ JFrd Ek0 @f ~#"5_u77UY >%Z#K pu4%nHᇭh _dG.= ^Sa fo"{4l.c6h0#};zO[2|”m=KD4Y?%bGJ^q"'5 %|ۋL; ˓Gڲ+S7OS óמ|4sYua 50R񿯚kz\f/M7ÏC]Ez>m%-bכ8Cnrkk:r[ܜW]&0`/OI.qC)Hy6ֲc/n޼y˶מ|15TCh,x-&/\:YrD-C(> Qk=tː 1)}ܾk6_Ih-A|->[?7H=IdAݮwIﶵ./D!EDtQ4e&ԨQDzWDDaN#rͨ=)*RƧ+tIHyn)Hm~N쮆KfR_SP1~b@:UN[J2.b -C5뻴ĔuYU=|VAX,VjFc7ݮth`|/U g_)Z[X$1}CZ|(y渉(3LK m>Lz.zɅu(-h_0-ԉ([*FHaPU\*,!~laߩ'cjΜYw̚CKw=5~/x ,VשҸ'ovoEe1X8D!4<{R=(/$"Kje5 Kk03r<4H,J˷kG?r=!G~H6B7L+"zui}fc_#,rC.$"&F2 $LzSB c^Ѫ0!\,h`A1.:ZǷTFSޚ=/oD?`[ ݉N]y->֬˕gnD㎩l"Jܶ("zMr[Bv:s=2Y@?c;H/nɤ6[߲:̵s"10 c @**88-)#>^PN^GmޭS8I[k~c5vz$z؟WKQ+A"A&w ]x6q¤ש$,nDh;~҃qZ5XrݚӶy"z+SnFQMEip'A_#r4olj~XL1۶Dt]lY0W0eCIjs &62-s=v =JDmu0 @J3jk`Ujnax7aUz(nٷB{|O]U} q5;"78M}zr[,MVretx#nG8^8J~2 _[0'96ƾ?v[\5YAU^3zX=wdVs&'(Bo}a)(,0qz+gx>D !4pdzիc0V~I5uyK'|Ⱥ.εߓ-WT/222R<(P^6bQ00ccʏBDg,J'MȰhRrCRDtnf\VMb޴?u'nmR/bC崿ǻNft]zo8ܲsGG-xlڅ\sjQ'B7/C8|ώʵۇ!*66+;Pϱw&o>Zϡ~N_O"xIDW%kq4]oSkي{4&=󈀥>B%Ĩ  Q Q>dԡ]&ϬO1=i}LHѶskmצzStq# FutyPkVCqbr\vcXYm<aęN٠yޏ\v׹3̋Cwuwr+F,mZN IOrrγjHe3dor^峊?'-c8l_~o:zjbESIrNȄJ뮵.Y{b֮K[wzDF e=YӤiV^t: ƫbw]L!(JD"J kWZ&TU+BN[q2涝yL;eRCRA \]a{7u=Yf>'{)]J_=~-uXQ2Vs[sv 2uZ8~M䏳CXy(!-G3vtr7s}Yv̀}OyU&qb+mCgXP]Z`O"%"6zr¤tx 3&^Oiq'|MOHzΏ;|\?E)03׏YTס3"ӄDҴr*gl |oT+ӄDdyqM~kgdT3ic -,KM[O|yV{ gWVQ5;D>w\?ȹ*@D'[xKάcv\2Sv*ξ.{7vHq1,TyX{ ݹkgx uY 3#qMI,VmmD%'6q~^o+ba[1ưr9ϡ'D@^’%j HlRnҕ¤?ǥKw, ,|5/E- _588T3Vez 7B J D GV\F=S"\ͬ!"~W 48_#>\زfBDoiIHI?WT"E@0SXh6'ϳI^>:%na1[=^Rj k44&/u*:$L;+06"&1b&΢4 iH#|~doydh奷PRSGK2֊:4x}6nA.?0G[*fٷ xӚ̜,DIaa7o2 *͞~x#Fky0ֈ!RwZW8+ls{j; vSg 8hIu7kay͕8Աc4Li:paz߹wƁ+jX9si o_Hl |^Q{ˏIӞ%IOi1TqM7SbMЪߵSCѧ^YD],l2d'z{'tmsd%uW!ܾ˖tS!zN0)gsFG{/j\$y`p;ndݻ_rhrs9}b=&5E?ӱca|ֽsƹN@ayxx`UVԩS4gBf Jі:cc$jl}E7yd4E\-Jf5Epa+(rأ,W:bH ]0LOolY` f ksU N}w!0"SkVoڱcnjfE>bۓtr2P;v0$-0u׾irX X_TYNk1y+ke_9Q:0ew( rfqbDTTc͍ RTGL*=&ss;E8\]ߪMGf\y7Ixjk _I p91$/]ADI?[b^9eG_o #Ojt\ 2JmKbե[%?1,P`@MPٱi%]sY+S7/y,-caŮjgNDf<0o:y?vJvfnyo%? pQj=Ie Jͬ8t8Z6#w2f9w{"Ly9]\EdwrJz;П\fػNC%7r6ijOOبOKbkO.TE@uaDntW  f^ZSkhY[ AL*ۡK{oom[7>DŒ/ t1jl7U+P0qƁkWqwukͤ %#\,~{o )q$RʶZ\O'ANj9k!Z4A[=MUf~$"/SBY-GKرrSŤHȿ?X?OBAD$^61O]ǩV덗x~(BM~F"n-&m٢ OCR'hqu'ʃNr?1 $(\SPz}CD&_lPFBMiT*w\gP* /ͿlҔ-;Mgӣ->@SM"9ߣ?\[z -Nv߸U^y)0^W5%Ă͇l\P^ǦA,ow޽Mwïha#P`&zMJ7MZ\6ͼRF5Mxj_gB[}UM_O7w7c aۀe>_mhҷgMFg}|#~|_/g Qb\?ЎËմic>)O W_ Qf:wD[j3`TouQ[?$ꨢZ}myL7nz'{V\pvlJȿ?X?Oy-!ozoDݺod[!\(GӦ_mZ WWjHVnUmVk\M "T(2cǎÆ{sc4ѷIIO,/ڨ5s|># yjժ:uJ`FzYOy$Н w;P]Y8nJfJIӶ]i܃kzN}Ubۡ7[yz-\vly5j~+5, 5FE4iX~cLԨZ&}r]; 9 r@I=ġewFZ$a3DXXtjjxnX*Wy 5ZwM?M3l C1ozG |]vѶxaJϮ|rmn/ok:3)o57Sxqp6җIl^x)`hמ{Ă9-=4r9< mH!oi"xtCe[ߝ.-7amKD w;v'64w=R·ifqtF_j|K!l[t' LԫqUyYwڱ{HpL.zMN}B1Gg\ WK9fEg|{TO꓿|0,AQގzDCoՈ/գ l;cui7Uh x͖Z?ܤm9mFؓNkI!˥y:̘xI"?*?ETa~?Z(oY u>ڳXrJ>31Ғ&}zkYq`^ k@z[+'"N"{GD'-n%&?psfk޳{^1MHDks{EfGİȚbSԛVD?!yD4g؝=e7/@|7Q]hݶ^(嚁b4!9F7݂OB9c(J2_BD3 q#HQ}R߫p_VK r)g "#V`jn)lFyX25]]9+6]4/*SkQS:aڸ:fD$-0r6XҦbiFս[[i8ęP"n+]aM*i7PxN8-!TgmN^_ƍghřM4WnGa2LB?5@!&CD`[?ܥަ\ˏ,ۺr.Ca3D;ײX &6¹=?ohnSBrU ݴՔdfR*``WF&];2$"!W+6Bv(PT,enJD&" g_n6fDk A-gO`b}Y/g BMLZ>'ΞiyOk}06TZ>CHFkX6W'HzuyEꓚ:X'6ҷ"DddrY%l?pC3j!"DT&Ѥ^|ܲj4-o;0gqf/Xv|(њ=҉ȂVHln[ԫ ^1ul@zz\CEU/5Fff&ðH,(U$P>C,^fӰfW>2iu( s"[~c jEsǨX:lX˷acPX5yPk"3A)a"d.i'JIOv(m[ ":.Afx{D gY[+]~VG3 ۣBR-g JŏES-1xiP\>YZ;v0)DtsokQ*pI}R"nޖ}z80݌4ңlnRYɱO[͕ڴ6'_}3M˙e׾:{^>Yp-' $!-US}-X?O*_vϚEKzt8] G--._ITCD}6HL% O+rd乙SXH*h)(.?zJ;ke|HDջt~N~- KqLi} YιE[NW솖+%}}q=k& c<"Y拉v)yٺ<7{Եyn'ZVֻ]^^bΒPwhvkyد1(l/]ilT>4pVcHóB߯b_%Ĩ  ԪLRf;'w>PUnS]ں?2U@Fn\?Z}4v-ffӿe&yo$9S]`3Ǡ^]*YzEI/-%<}ZiZTjԺI-kc৻jW^eZUc8p>Y \Uz}hOS&ߞ FsrɃV+[.V87t/4Fof9o4v }znu]s.;Gymާ99ťKa-u9o {+GRX=*cwܽ/Dtm'?˵g +yOkG;81-7lS'6{W\N6.{9i5~}lcū<͸g5KXڦ<ܼp!"UwUwhv#k(؀}OyU&qb+mCgXP]mgo˷skyL<=JC{5Kl %s: i;Wo}2Z0l&\raQFVu{dfʮg_5 9ˣ\t2C ߦj 6 d%>g۞8?͢~džih[zcVGof,IC7zo?wyšBĊ$(2cǎÆ{scSQ:)[9җuG?_i/g@w>HUVԩS$)*2E(z8ǡb*aun٥pI IDAT5<4 *f861d9RY\Sv*ΞP>e).&;j=pŻc2ݛ~u/zHXνbɯ~Ovr e.}UsJVI៟?};_Kݲ!55IRӰSOoEQ1߂=t;xfLQ^غÛ4l7X ;ucébW5u4c}ۯ>SWǸQzUvϽC$ */]_oѽC9/qjf1د;[Yjq(>닗=0 ~N!|!i<>]>#C^%o<laZXQUv%Y,j5>]>kO|*#θ+ny?m!=q#(잿i!ʼnCN.|ShYDT/N8Ƚ+Z;;]v.--=Rӈ<_f/mbܱY^ {'}Ӥ+J5-]'Q%*]XQbPtcJ+:ŜCdW:M2QM5G{/"au /Y3mlw}Wc5rl곷F?'2g8U'UQT, KPu_hL4K+:3)(ϸ^l_ߞm>gpSa8t˻mJ>/dMZnh-,xtL!@gn7LʺmMo9g=2“wG9ROgOTdMwUS\)'|p`@I OhuVyVn|=:S(HvKxs|zπ3?%+F&}Yhɔ@bHJbq)~Qʞ.YxYbAֽŜdz#&)1bBŤ'PJ;O}>.O#"}iuE>dv8Ƚq~ʇ7hiN{A_C ^LLasY {<~ٕGiBGmx/)zKTT*?%!xNOS>p\Kf|la[Wg]Vw0TT, K@E)q¬Ăt%ڥCG5W+H3}^aʒ}\DԩeY}=H}A!%5=cc o&E[#RXQŏIDoNB"וdEQ%AiG+O3C[լdeanT>Q'wJ~}OKʯq/>8 ׼YՌLj=ˍ蔒Zhq a>gX&IKT] b65-GDCf7:';CBKP_A:30S( }K6Hꏴ0d7DD MThEG_~C_~/ fxzYs?}Bd%g1o)!)9Fbh U%"bsɥ8(Y$Sv/Z] :.K_?u}[7l`ݰA>^5{IPWgy>*cM\muPWAȉ]l0̠wqHEe|9F($"ayU2j0K"SBALaj {Q;iY؎)B4]p#v?tғ$rr%78-5ֵz)G)KqʈSg%P8*TEXŞ;5hw> b"p) K\ǙoG.\S(ei/ṷŸq~n])eDD? 2M@DVM,8'o%]6΋ND|C)) HWQQit _c[DX\Vw xb0pHgeaʼJ9.8>-ۺSF\tLK6k^QIZ,)_(42lѹ܅5lԳhfi uzef1ǘ'Rm5;ӭ[^^rivnddS毹xYTbS.cnEJ_nw6c١țn׭2Ǯ;)s| c|?p[s|gd,MݠդĐ{zvފMn<kVΥfal┫0㋴mZ7/QmaU~^/[1V72ȩ˿oKDT.Sb@Sٕ"A _ ^YYSf>a ?q<{rrXj"eօ._ (A JDݏ뫹yZ |oԖU55efcol9=9~ܗ)>ȢAoZ;|6EU}Eqq:GEA@"]T7쉽-5jXb^bņ=bADDAA?0;53;5?Ll"jwq뾋KYMwVzݟiy"+vFe/\ u[ҏw4 rF(Ddh?⑼_udJ%)a؏Dy"Qi^RI5!߯o}w?#.'R4Khj>?_d~G;7V}׷m@iXV҉ O&!_ "̟LψðؼܗsfJ|b>wo|H{gvjzlh6=9KwVۂ2%;-i׾JپZ{֩ 芓kf-S*eS=z8VM\_{atzWS%]_ԴΓ׍j6ѭ4bת)nu{{v˨iϟ?FD>~&/#Nkl_ö#8bڷ{Zf^ӧ{&Vg >~elZ;F\+8n|R*DCnx/m!5$ώ?jJfwf=p9"M4ƛsqOWO ~{Ud%qO\tXlui+wL.<6G ;cn/?".3)g@T[K:5/Eui>g~D4pB;/m/U "i/QBՋSЙĄ"Rlsw"j?v3w_dQ=c`}"RSs]xۏ6Sr=}>ڵ3,}.R!~딫Ӹ餰+V71Ь''U3c7r1Zv 2Q䦹[K_ 2{+]-- ̸?hӈG/֣KuS1wl~8e뿻X)>!X`|ɓyS~ߥy W;;nvVf||'7^={q|юV= C&NB"9!:ՃǶY)O2tݪ_i/?Ͱx <}vY*J>Y{̄m6ð'8yu35=nG5 YIn?JHڲg?tnԩO!νK|'&4b:>qcghY̘Ͽ[,=*Q*C'[ J1bT[7k䄗gOoYo-|Ncvr4L ܀+ܞ?QiJjNpgփʒ'|rҾuO-m;*{n]q߽>p`{4?_d~G;7M#>~X۷kJ#K}מ{Rj IDATfVWo<(= WF 0GX^'U#^qJ>QgP&_Twe9ypbؑ~ɤ}}iyw'1;ӳSic2Ha!NDDAö6ߑ4$lҎq+Cm5lB%O8oya"9*g":jZB~ ȏ&5NL^/ u̺K sݱß'Y\N86 |!aI;j8_ 6M>zסܽ?V={.=>RODOvT(6B w kZ #lD3=>ux_uPٯۏ4{|)ǏG9{T)TH×RIDZrW`4Z&$oȾw AiWS- sҖϹCDv<="ʊ+leƌ_*l 0ϰI3_ M"_0 ~ Aif4iwDǸ NV5bmqD4g\]m{ ![ذLU&"&Dd ׯ ? &>*QBo2NVjL oJ?2LarwE_u8jL #"B/ DdH@xAi'Zg 1n|q\$׶Ai t4hSPiJW-Мͼޒ=ξ/;;Tf)d7oi}wT8JSRBo+Kjc-L*%uqS|Qi3 |Dt_L 쿗!':2?R!_4 Dt?H@.g1JedLUBdq7Sfo))dℸ.paDJka%ٞXQ2 ͌:Jsw"R\][B+;+^@{QѪr2(UխҐ_xs(CZ =M)99k_?XDO ~mnCO;/v^B>#M 1'ڣg{c*c@65Ǭpǀ;l(s/s"zI);N_)3I҃G]+Z{" ^a;҄]b2τaq>f6^A;mw1]Z3l+e@YЯ^}oA};Uw~gV5+ZޡyŇ~б4x\7.VV\y萋=t2M,ZgY#Z BHHHj?4UmW5cW]S|BUBs۷40|aXtcԤbYfujNuTĩzo{z,U0֚??&z,Mdꑆ: xy|Ab,;ɝ}z_s@ ՆR,eJY8[mƷ[@Bvwdd ȚCWߩ6F\WܝJy9[4`sT۷հ~K aN u3M>VnηJ{.):8}=:߹u?#f]Qmw؉{<g|Vh?2 [LcmUڻuU 7/"J͹[&U eGiΚyv37$ %켚w0bgl36P>7 iH"3Ǐ)Rl Nޙ.Y'%9W\9ԵͿ&<;A%lװ Omm {<&sgl&W+ܓ+䔦GKb',_[K~8FKRID sd #6<~k 37qfU[t0 #0l$20vӋVʨ Fͺ'0=sk_HFA.Z2)԰kqDa~-m <ې#4 Hc=ˁg4ڹ }qhn Ώ.&=[VQmS Ϩ \BJ;n"֛Sݗ ݃k:Wv_Yõ޴h@w~y@ܝ6zG)[ ,I7ڶ)Mr)#(,y|]| G>9]?UqkT;[G+ݮ$)74m-Y!3ҙ>Byvl:wMY]-pC6zG /& lؗWsϞ߹_8жѷJ>>ɾe5}ljzvcr :ܐFD>~fn&KMlZM7qm]M/w}S;O^7ٴG҈]6[ %w:]{ϔfbFo9\juibOrΧg9m`gnŬ7WaPeCt:fmSw]۪EKj#Y ~VEk5K;{3#9:inВ7ֳ-1c[sfic1:zj8\y6@b|}}G>ܥ'1^q]v3 nn;(vшݪRd]{gޣ aԠ=6ҢW|A1!"36㲈^7w_`v eQDn+P*2}-Nŋcj\{.39#1ܒ-Ō7gT픉"7:aB ϓt1%c'zP@hr)2|ze E8DTɨ1>) ڹ. |Wwki6: 餰F+[_0{?GDJ,SB YZnD; f<;hUm1lG5)BVY]}b)G8˙,yT`NzZAD^ھIҮ7,W~ TX.gRs9B]Oe"G)ttzb~E {x'Dٝg{;O%&[ mX^{Fk4ɧhRsa A'Q,Zx+MRBGM .ͨ)M pr)J+羔$FѩV hҏW4klJQ3_`plO8Sd F'm~Pe|ϖ_'"_ ?}W۹kRǤw4YMFWDu1Ɨ/6zU޺Ua3"f=g.M"~ Aif4iwD]N%"+LX)>!X ;Gsjf>g8>a]7o߮yKkk3+,C7\{|D@*LRB;n bܶӣgO,>\`b޼OWSoUu)<)FNUM`PZ60b6 H[.JD& L `#}^PI֙BȲ,"3LʼnFJx;/O䮟\a kK*#ˊ۬Q3$)6iPݾK9%l_5g?{wW􈈲.Zrw75Ueć9v:|W.B6}漵8_s y<{tȅ+7nݼqʩۗOpHi{~BVbXeTmOކ:8|)[_BcLq5X:ͺ7ODwvٹa__[b$LX _$j6:Z5ŀ^$ ü䒞 L?DzBBo `6$I4{DTG2Zеkdc]@2N:Pdc֠%JQJyƪtᎲӪ%y[.)5{iytԯCm~6s(CZNZ5UswNJuZYYTX,{0:=2{ߒD:vJyOT/%Iu\dYN.-psԼb7-WY{L͙A^˟J~0gBޛ XLοݩ&Zh^Dtou@65ǬpiΐWCDC60/ y0elSŚ’\^;cZ]%~zܽνvuXS[W;{]WmͦM VzcU+>-j{ qqZmp֎ r [("?m8׀ܒUtMS;ljԦ4=kLsg֡<ñ>۷y?m~X¿v~m\F':Yլho> 辝#( mcM&¯.ܣ,G'#=:}'Op $lm]R$4ʽeyg^ƻtM ;(JMdM8C=wܰϘ*6rCccuR<"&fT@ݱß'bh nU{*Mhۊ+~ҹȢ%#OO#D"P;qJ" --{; GdX ٺJnsd tT1b㉰E0DD YҦV\NOi .R%Zw^U^%~]ꇮ9ZM}H.NrqtN-Eի#*),"R*K8xIVNlQDeHur=͸ɡr2mn IDAT6 16Ȋ7$$?*3 Bz{{=r>]( DYPeIz2La@f̳D %eEŭpTb}cDl2y S 0 k"^ÄȹB̐8 :R,:0\dBGkS_שam⊖TS XGr}- v+c_jm$01c_Ѷ#I0b|j*:Mt#d[2!3~n]r~pܷtX r>g :"f(v}p몪 ם>9\jȸN\"vU%T7۾![\M{n (;#ZZNS7n6RXPECMD<}kÇkV T%,^vR{a6D9J\Üx,RH֌,Uj:J*Mtb3;gݼY,P j *gע_Zt:/P eԴqDy`ΰ3}ML/w}isʚltn]صjן>=TZTʦz6ܻI*/[q%wE\RWxN:]x}RYre^>ͫHSc6rxKTCEШMc;C 8I 6r>ـywP7"tv+*TMi)1U[xH+>g+mi{`)s2"ҵr:lD QOs>+ZKN*صokyj烢n4j YDDl w9+zBm  !(Y7R%U3"b؆m$i{nJP|<jJDDo<**Q̉ȵ-V!AʨY"}4!q&\mOK,\,9ٔ:BCDe_ZTxFy _+&x)vN([ߠljə2ODUs*<$ `ƺD z{51,:p<$ 93`)w-NHqLnBl"|t%t=y/E^V*BAۼ=d5TN岦P! _rpއDb$ hʹ &87ȾlSfGWS[j[2cƍ/6z0fD$|Y=9".k تfQVϬ^w#挫[ ɸ|=X|acN*d?H'ب~@D,gRM̌8O\ ])srEY\atlnw#-+}TH[Lt&Ip,,Eyԗ((*~ru ɕ7ԏ+owlw!tտ"9S"mɌ*9Pj lnZXn1P[@%u<*U*2_]ZGD05$L!C#}=js:0<"R*SEDH./Ҳh,(}OKȮ{T`c@oXzl"ʌ}zB#L/d-f52㰈^](`9+Kغ9BL\7EDYB F|I_qTodaդ]R">ġlQ:6"1,nce}\lgj;aS "ūaXGX(U3@-v>-յ40DHSd/|V!K;lxo{wl\7}ڳg6~,m翭/hԱ_8;'(hŇ3v7vܐT"bf"KV(.%"#Db G6>M&I4 dhK L\)N~uG G~č'ogSRTrGcZgs߰ec;?t"4+qį#>9#hFLvZ  jǢLj^_N`PV =;?Cчaʰ:6_+oGzYhǰz MfT Ҥ@P:pyb],- ,} תGCDӲkJDQ)N:*ii@%[x=-9nsHEOey&zZѯC0cwt7~zf֦|6k[%ka \]۶m`"t; n-=skTpX,a-66+ZaqjD*X1ocw M&Z>5t5aX,=c:MlX5mMzqcQc~?twf!fC?`i2S?յa Z\o2xQt36 Ospl5Q%JmAm=Z4m&ƈՔS[@%=b}K7NOr)c|w ڬț'kU]BVd>H)OcyߺtCc0 SGrY`FvZZOiqkcs3n" cA𢨴9Ueg\]WNQ\UtjXRm~_$I::5,6"|Y!lnOisWt4aoϝUO5TlM\Y ǼyV÷% Ü @yipR,Ξ=Pϡ<ñ>۷y?m~9?]_k:׳ y~d~gV5mOKm:J^j;l6mZXnA6n:f.ib#MwZ<<:;եc ;}S}+Dc^ iB|Lf8F|NLX="Rt?ej3 8̬!,ў=Vl]N^WhЕx:^4\_n#7D6?]{,]Lևw;־˿aX~@d9> Py>MZ[`p __ǹMA|#2PpQ/lO|X@%L!@e~ԩyM{+ *!d Y!!!_pQBBBBsd t(ED*ϑ)""3mVR8*B&[4zݙm@wښm[jK5Iݑ8L/W2ɐ);tUcߨRrxoJN>3,N%Ɗn_||_n]Z\T[Z|imMLzsY~olұdYEd(t-uk۳e?,a O8PϤXlGWC#2"4!QU7_,&բ rp5$Eg<r7yUeD7%GR4EjtxgUWZz½Rįd<}YXH]\`Il0 XTöi8XvA|k\Y1դm"[tXb ,]dWiw[/`S(CoogHDN+S_+`x&:4#uW)Sm+ h=5xC(Ӓ~CWO=HddlVxzW)<ߚ%ۘ+}îwn?~HavǤNfGDxx,vvQo *$ ̞l6<vX`j4~*5 w4_a)my=U kOQ/lPV֣ Fv`1$X1+SUMN,QĉzsfFs~жÌ.[w(M;뢍|~2-Qc QچNQ‚3M{Y4,m@D)!oNy^ژj:4SW0hKZzFc+qɋ۟P}V5JDtdg 딁O 02֍(XL,71t*=4{9e=S={gۨQn#Q oNl>r Sbe޶` ?֥Kzk'%bs4,3ukPa&$"rlk~$XikS—cF;eL㡔a 2W- GDJӶkr%ԫJ)WWgDte_#`$ r&ψe%$ѱj߹ĦNfct{r:KQXo$nڵYVO~c<gsM?H:F( %q<3O";/\[PgIW識x-JNK&:5L:w(xgQ-$(}pe==#-ps-,Qfe8S;X t̸<=, ~%c] aVmх҈ȯ{z\;IDk(XY&nDQ/fayY.-Nn=<&"f([͜(9M02L16qR`4/mDo_f)5t DRAaRb橞%V{a4,mz(~u|*eyWUc_\P yOSϽmئ~YT S7%c?-σ$Dd^OmK;\MUZ j,eBL 1Rl*]ӔD[qrVVnBkvL5`R&]Kx4OZ0+>3ᇵ2'V).(>ȹFjsN& L`fTr7/s3-4t C1HґQvN}|Í{9ox+Q6RC&$"S0{pH&%JI<}bF⥗mF|Kz/*U(ET:H.R$(( Mz%B $\}HI@av>7;,mrBB3Vѫ^mr"ʋO?y6l̅_^F0KN\RzS^>oBYRU~ x~q"ܷ"ٌ[#7<j ;ctv=ܲ~Q\=|.5-XîK5.6K#؉k2OE+=Guڽ2NW-^= Ɵt[z>~R6Lyegwn) cUlסNeʍĹA[V'5nz*~`xE/ͨlк$5˵Vg2"8C誻ʟ=x:MxϹ#YeAQ]Ǐ&Kv[ש]O#SDT_`ڻiaa_T{(g/7^;._ǧ_H6xtrTF*}Lb`NHv^<]cudC6AgW'\'"ƅk;mtl$S:^&|:5>kt=H'^_# k// ).[:X0 Ԣ>XvCix*#4r􆖈5Q&'U.hI+Lj f` 1Vc>S1e*tq j=K \F-~3#O^e9Iro?FFV} D :sW@0cUwW"ʸvsv=gN`儳m^/0{׬.PZP޻T\l֍c ZmZw]؍صaQ0ZOڭ}ں ".nYy|ws=Ԧ̈{GWm}'xhOve!'Mt>_'0kz Klv{2k?^'cxF w;QtCvHۗ|GZ_{UuS'>Tb1 HQ)ig 27CD^BJ65چ(-?JO*Z""[#&6QjRV/O:z?Z.)4RUi``9M$W[93uv*<,TDdUŷbȪ-cH(q,v_MygXr=Q O4}Mʺ -ߚ)'*C[ &M.E  Ӝ gMڐ{?'l}l|}F1l'" ]6?cjŞ̲g.+㵨zbDjew~qG&6vjAsc̄&d9Xh3rʙ1;zf[9%(F m(|6[ʩ[|"oZ▮@nSS‹R+8'waaG`#"[CD@HDiT%oD xNQnOzCTxnBFf9b8@D*Tb'u.R)Ό""F h_lyjlK{1v!~H|.4|"j8MYaIDdYK\,):7)\TXY`dKMq&4[s,=] Əu{.]הSi^JkWxlr2ƫ- ͏8y*XYjse](_0"T0"Y)ٌI=vDOOѓF+`?"rÔ793wj5B D?vpJKD! *+RXNiF2F* {j ORj"ʍNG2Ժ?EzЦ;Xyf*cC"0Aԝ{Q"#O̚^O:W3bUrKS-sHBחϠ_*lƓ{ަ;"kZ-r aB)'fH\S>5nג,{@ rpQ YtYfFHD%'&"ruUSRcq9NֳTMBXٜBz ׼Fcj` M$KD.O&UQ^Q&*,+~'`">Ȫ(Qq<ȧd:Ywrm\0Ev2;]ݞ{DEQOeA|JޠV0QC?-{󴆈Wƺbʤ ^b)76Q=gȖY7˘&zݻ\ݻdr2iLM cZ_0tyzZܖ4l`Wi~x1)wuצ DT3BrThō9]r劖2}(Al0Hlpy4e`#WaoӇ7-ߖ:Ix@Ev̘4ήͦRf\ˢOQ*/K^/:9+@Tv8c$9(kt2Z!=z^<1j4& ןb;&rxxm `]_J;9ZF(8PTKV_d&Cqxr eL"" OR>>2Z6NV۷]/zFyqiI§(]U5J5p[i "btEcf/*?PBuք{CDםQ1k'Sjd-f,4#R#f` Kו^.Xܿmi_7ƴDs8xBe4I"b[{.͋3BV񋑩M`"es/{a^۞ٕr>QUu+"/Vο㳙YD4RRW)T`mϺ;1_H<ѫѽNnDZȹGEUݽ +.A R=}r˕Rt%nZѝYE}HZ]lmlyn*xS*7o{-DxJU}'IW0KYpTm._S8KUDhhCDz,W(6m'vCK,t6zw&b~}Heudp,{߸5g|dD106Ds/Ttѯ{dHhaɣ9ޕTC^:xb_ "rP"`DԲefB"zBmRiF2F&9F1 \vv%W7JD= O3{PZBV]GED[/F^>DVv C.ZYk/ {BrNx,n\lF_7N+]ՙrǢGVRS+N'yYר{mEt&/&5͈/cYL 9{w'rD^K,eLa|uFu2k09z\Wu>~4"c,w_EO".jHuRf/6[}¥+]+Soȳ tSe/cMV{ HحI%ҾWOJS܍Ec =!)9Jv3dw_p 5V{QWMw?{>٥^W_,7Υ E(2~/V$.֣hWꅄb[9/;Ud.)ss2g%նag-y yz/?_2E3<>.^gbS8v0u,c6/=JEsnE2.#K+EόdÑ=lyFԤ3X6ᅌS#fjOIb%ir5D$q7ܺ\? p&7q,aGnb1MʍK3HmU]* _Š:΍l+f5tFuhܡx-eN )mPV+ T"ՔqU_ųU vn^H:k:g.t?f/7ߤ*JYmYQ3~8ˎDD5m`hhhՓ~6pcJ*"qzkso( BY;&_\L'5<*CVҲ}~NWo u&X#;۝l;p, ˦߹|kGY~5w PZ?bf$EZۚ?9zrY=v= ˸8Y J _t߶5!fkkG K8,[ Yvi9=fo^ėH'-?;a8Y׶.w.6$Fa.=whmRWNmQڹ*#u\:+ki]ΥX T+蹬ؼx-I[uz׭n#"ecbJOJ͸g s=yw.RW)/]@UK+.1G`&텃ed15nFiwdGD(R iz],5qŮ`A#y}g` XE|=óv˩̟TV* EڍwFޥGvt6 *$D9vj¿-8)4BYPT}56PYxM))-_xivoG&Û~9u !_GL[)e*u^XGloxvwyyN|V[j6pDAђlW\&~o27eAܤo=EzePIjV?mxrPaUYmUD}U͵MSI+?{q\%杮_^ZwkRv/NhY|Dg#ŕ)tl𷹍s/d '/Z>)\t Y3rTu+Ro׎{,n;xbyy)3Tzq[tou6u~oJ}eoԷO^zZg/w"2cNF`gfm]k[`؇[mffhb%`0ȏM?yGGD,G|eG/O}.S]3-Zd|lN^X7riY{sHycYSn<ܜ'̞㦿Cζܶ҉GuË^?U˚o]m`q#9m֙{?3|Mv:^}+̐"]pC !!2-8z,xW_ j MTly4KB7x 7jimحPkYI܃ri[;--8z"x̩&sA3PY,'迗e1E œjad#WV6ʒu{W6s )/BB":8e4{n#Sua _*{Wj(ߕL\D7Y P !RX}F|Wqo q)"؜'D{;U}*ALˈ< T2EfGmsgu1 cz+r$۫JtI/C忇yF$;z6~JaFbX2ѳGO?/3gڍ{;IE"gOq2hkhcuCDj8H̆VS.PZP޻T\fM;vaq.jy{4h~KЭ{Bɿs\̙S˾ԕYT^?qٱ;"osib/֨ wö=۸r.㑃d՜dX9"}%{80"Ք*m㬝Gw2_{zpJj4jԸM>& ۣТ))D%)|CDGzx2emJPғ\-0m%nJ"|q eֺKN\R7""2`U=>'^8ЋC6y/qB֤0<ƤΗ_w?Uu)dL2fpVSt5JMM' 58`"R_ӭ{s,bqI+0]m=Gŧ\?xJ5>o.^rj ~l"&ub{N/<H|kjUi6t-o֮q- (o=~ᚢrO.t蟦t yfn+N2mΚQX _۵SЦ><"F#~C^w,/r=xFcwժװ[7`D+c/?&Ⱦ>n8OupsE{ϖ)v^8uҥK,y_<1}56y86I\~ka% ^#`0VO(ҤI}9x0V_ j]խn9QieN&xMajͩ&W3hFCD.Dw#Vk #4u5ܼy͛ܶ_Tmc-0AnJ.SL*'N{a/c>~T$[;4i{3eN,8PJ{Hۚş}ثmA%kۂ|^v"W@chI;-mL[1ކ v;%~إkaI՗ h;-phKcծHSuسc W:K÷\ @E0}560U߾}_ʫ&ȜZc ѣW^&M۷?>;SgZ]geVύf]kݏ+H1hld^ N|=7ѓك͝wܥ՟IdZa֍U3|)%i .?gUll++= 6!/˦?{ǣtZܬ7|ݽ(1n; N<:<9oe_rĪK/0:Рn@_W{X׬yt۔6kPB 5yXm20rʤm`%unp,0^=eI+F 9zՖQyu}KD7foPr\:6Z]aB?""":Qiv':[$닫hVk0b7g<EQ9ӧzX1 <̍yM\:M,`x(e%0cf_#[g맴np:-۴ vtTr4f_uWkӲCp$nY1Q@HTN6[.ۮ)ѧ_oy,S]} V;UVPX7nXIܵyVKs̙3gθ<_af\ "Zo${lv.Ml]׫/iߘ=>|ƶGttԄigiy ŋsڰn:utw)D$qO܉H=NcG RX}F1p/0#"<(xM~pʵ[)9)[-j=dܹs".}YQbƥ "mlKDGخDBDDsoLROV^O_-Akx?Ч r]'lLnr:KNDa%A恵/1 A؜'D{;ǻ3FŨ 8*5ugm'(9"z9W_z>]s wJg&=*kV&=~==r,z.{o'ժW.?]΢)j"ۋ9VkNr<"JޘTDtvzѩcooꎓNU]" {߬L(b7W.#U `)duyJeCo&3l#֣\?w22FQ@+6֩3"O\dE/EցDSD Vy@̟7wECH,=C/riY'nRϖ)w|h:?+k{263szחZ 荬#`(#oxbF6"_>QUr3Nclc٫ڹ_T=ީGɅg|J" +jZjž=̺U*ZZ umlKԹb #Y*xa$%?>%޽]j^ui;ab͛_ 3HZ<ݦl1g!RXMҖ9yD[FMKDD'nmxe}W =/Wώ! 3Rw==^:47LhRNÊU&͌i8{^+x\Q}* dn9uDm23o%1u/CMDu8~FL-˿էa0ۗL..eSQ&DF/–亹tI3r2KXzaUЫc-Jr0LO-Ӣu7 VSwˆȪgE z8lƲƄ0!1|;wXZ}ӄLgx*ЉT cڴ吵WV/3 oyo)7|}w!94_=Gz/r`_V:3y+T`)) ?pUP>֔xw- v떁6~u+IQg8 /so*ȥ+dQ'xx$6zL"T}kVsNhp0`ڴ<#O1USkwW:p]w^2~s˿p¡羷3Dtdax5pj(9 3Agз7{gșұs1z{gA'`Hqghƞe1dl|WdEMnu+@.:'> sz\=x;ӢIc5˕J4C{ &"Uq{ABYުTIc11J%]y! ]_>BKD|iKs'ڕJon): S)گ% >9q-YVjS  ^%KwYXEKy-n]{?ڟB?lfe {k<ֳM휨/F e6fNuEvqŇPs%iWuqp_7br]vS4)IlxW ;gy؉Dg׳Q)S~w.!٫mkCD4!ǎmO iߦcgR3FrӇcww{Ȼ~xd@Tɥ/ntu7| =nlEDdP*ʈ/\Nͤ)cvзRēkD1BJ% ^Bysw~5q ;Z%{NXVP ڢ#Xܕ+;9HMݩNq{޼_C -ዩ"D46rur떳yvbjPǪ.]* uC>ht"I3sQo>},3]Q:= ^7&TQ.|aZY:rngʡFSf|?ԌVeNk80s7\͵p19:[PAM5emOWBYQLDs2.Z9d㳙YiWz*%"P*UPg=qW*ElDco#xvܰIΛ^-@u/N9δD Sc3m.-t9V BY)oUYz~qS-pşWTƁjN7"7 *[ %)A׀v^ ލ?KSo+~%.xlQ 1cRD+l2ƬkTu6":NԹ(Ѡҳ|B([}D|1ՓqaT)֑q++q^[ MUzUC{2bSDKf 9Q3~8_i6MKDMph/+?s )0MH?:N?zL]; m#o4r>[l׾m&8jl^^<{$jJϒCڙ ^_De}^)4]m:r9N-vzB8ÞEB"rm?Z9rĶzw?˪[GD.Az.hf.Gom|?9pw3ەgMy2Z|6{DxSaNae[Wo\<)ԫ]ǔSKˁCζܶ҉Gͦfۻ/5ykد^_XbxVv MEo@BZsj\ <*>Z1l|*컜727՟j=yᏼ JՕǵ1Ool}(W2+뽆4W  {Ώl%%"z92 %+z,&e95[-[?})&4#"菟E4ٚOPYfɦ=SϨ;ܻX7 %ʛN_s]PNԙiSӿkꈈ:K\Mq/qת蓴$(_(;@ ~f'Tb{~CD\6:F?yJbܮ <aH/kbQ_B4 C\?/խ#"@I7iF,irE"SGnzLb.څRx^5G%#߿Pk}pKۭm9U, EaBwZ)MH ߀f4!;BeĚoȓIcﯺRDӅ5btXm3ڕn@ACgy&. ޒ!oNTĭ|A/OL).sK:4z2q''F,EJvIdG?&DD"KDum{wd-}EQ*Ph֬Q+y˂.QuY'3m:ABȠ1eޅ'E3;<^efja>`1஼&˰Oe9^Q}Q&.Sl;&Tai #o@3|]dn#nc^iFSGaTIK%?$"K0 RXdpֶ6uCJ G>=>ya_^šhrW&7'gRk2GMP '(,#Ϧ(bxΐ*G~,= wؖ?p ϹR Z81frJo,O\@Da;U;F5p?_dq6{܅ݻ[z0P M=NWmm5UP 4JY]=> y`N:0HQMzAKD^%i)4\_JDSw?6te* aŇ1cۄWŒ~,Tu,kH]3V: IDAT9x T֩N\rct;C473r9 KwqzL_΍K}!WIV-D?8>32v.MX![ɬẍ́RK3/ꐬsXBzצe/}PO<%ljO IG/22<5Y;}0P"64cf` U(rBx5NnC"Z0{fMV}Uâ(1?_/wZJ٣VF}?g_Ѩ4e/m'" OTId:l|WdEM&4{{:/M,He;ڔld?2^LHңgu^5G#T.@DUROa^uL8 x^&>032KDMJԘ3oəy܅\_Q#5ǑVfrݜz:`X2ih34:<òot=CcFV.Q emDı\ܝwu_>!ZevS6ZZjLi3CNr"@DDwc9e1kwvh+q|+Bt+6,74cf`y U( RgQ"5̖klVڙMD$uhw'+H_CҮ09RHgm=9 Q߾}1`DQji>4TV%IZ{#oy)jkل ~]> !><ʯNSe|@1X6A=tzf]NKM*ڨۣKgT>PY?O#wZMyLJS.qBCDn=tTՓXM+2`mmn#Zg+- [ @'͎DMDS$O0ѯW T,rg%߁EQ1"y=odUϟol'4̪(g|&GDMj;Hn+y-54Ubk۴B.hHD,#nxS* zJ5A1rgsIF [pz9GaiSe?Tlޗzwq+꿢7jk>cZ0đ/(wuYȳt|K-hYf 4 u-͗٘uCް}T2C?7XȬ^-YװaCa÷ޮ<=\t3ǒw'@A._6u'>o(㺚k@;, ׏&HDPl`]Q{l5bb{ł EM(@qvw'ٛ۝ygvoofU굦]Zĥס:(3Үkp.)@r&_8SӹӜ`k [4˓7#Wl"`ZՓW [70 ]h6D~UH-\ޕgC2m-O!Ĝ˜}u_|:hKjHi5nmOEV^:a캽F'*Oܾ_v2uES=v.SV?L?[ίtfy|w/^RKŒ&̃?xm f:SDV$.QObBj|ՅMxqnUjxifG$۸hB!Bk{R:`4&7m)>WgHYmȍsxNV]I4czHZI0P2UjDNz49=M]^[P]?yFdz& V/¸SFRND?{O qj[MщMAi#$lm ϵ /hQ*\~>5y>5yNmqv5fZҘ~no )VXs:^ ,}?LV }^qk&cy~wuxX¡aBVO6}>)._ay3v[`8UB=O2YJPwРZ9aq;G@P *B!B!PyÑEذNm<Rse) -yW䊹 {Ub o*vGt8Aynŏ @?2rH.5_q+P}հ h sYffW |+^{{e¨tZSN"@\)p=ϓ!HP|Orz @ZS73DO@K"ryc TMOFWVB2go[,{˲u1%vMRKO\eo(\ .!=OqCO|ô.s= X !B!Y#h 4W5iް^ҎЩ9ټ@{Yx!EWrbICVMijޅaI{R~C3$rH(PW{{s[2S`DV1Фԥ~\=nSZ9h]IT]B|'|F$;?!9#:,^8PHߊGQ[$kY/ {dr]>Iʕ}:iDIٛ'J$-#IJXͼ:'+KO fY}e7mLxu+{,KO'۹z)LW@կe :.Rn4'8yCVm Y;(r/b1ޥa[E!B!dnɒu,<[1E@] خWD "1t!>Eۢ>w;nD0ntͬY:`21o۪IC㟢2_xB|.I VSyת-O?t$52E4c!xTQYjQdڭ4ڥòf*96A%I9xԟyhJσ(Xu R˳:E(fYq3,:MOΟO\Ns\; 7-٨iI:G4u+G(_˲o Kz<oÛ3D7ez9˒:%"\FpvIrW#<Ѝ'Q$$~AY%bY?=uo"/Y=wr<|\r;ÅL=+rGQR}fڀjUY CR+Rzƌe3S )0+{mD!鯮*T U݇:"8]o{3oWLX R,#a|_|:hD7Zoa6eRs+~W=<,MF9oark=v܈>휠ly^"iӠSڬW5!:  D T*,fS&!B!YEGru\\Z%J#W5}Q|ge#j"\LѭLlu 0ny,˭Ո߱" >ȉb s{Z5 |8{3ܐ껏uiOU5i$1lDsa :-%vRzL?z2,pŜEZxgQ͓(a +Ru[szXI, O :,=[PDpؠ̛q@p$]7rUF#ԉwtni.akKo#[Bk%ZT}?\w3F'"+{ MvDIqE˂/{+fDDĆl[`ͳmmd}NGd`eLIܛ S!!y&Qxi%i\1w$ꈻ'e!7{lSHvlQ|L_IPZ¢,= /BѱcaÆzccMu )4TjHi5nmO:Ѫgʵ:睄5z޹<[[j\hzzn9Ë*4tO@K\o(^0N<^R긛N C{Y:M·tu}I->%=DӲS --,{2[2n8ů|{N7OmTyy(PH[$?2#0kнSNw6B!B([5BCC1+)i_n~p!8(|*64'=G e7OD}ƺXϰ4;g_j˸V_a f\]-,e=>edOH6`Z3 ;{q"B!gܸEFsT {>ݰB";v6lȪggAP:u{.!B!P5jbB!PisD.B!B!B!G B!B!B!z!B!B߂ӹdɾ,ۮ8uS[~٘:!ZSxR`-|-ԖTF#:)!I ~@<ᤧ}Gѩ &)jmB0"~=+&k Bf#!B!B K 42m)ɾ[dO"gNf hO͸4_n=܉U*b{B6~P&4;͋?jh\9U~zK_{"H!B!B!з@`@O5R_EU `#` FZGLR Kx\#-7dSН4 mCCҢRVis)04^{BBB!B!za Įl"gn[g Xң Z*t([/YW%qPQQ] !}H!B!B!y"$m(Z^FCͩktR#SYkw#߼9Oy@ NW-Y{/Ǯ?<גvZQ`Iq ,u@*gSrdYYYE!bh TN婫ڄtVlC#i3{UW%3YKa%;¸:'n)C<~g7ң?%"kŋۺ-Ae*w{V3P&l[+4( w&Ώa<7&;61E?[JW/آNPko}y_SųK\,6-B/-DS&vlPM;7NHNgSU%տT;3D0(~87-5D*t߰#;' DRd&z,S`g+KB()D&v (wm7WZggFI =w}OPa^QS[eoj(^0NE!E,]IS7a B!R5e$3o^70vbT΅U+wt*_-XidOUcf*U V7t”n,+KFF1elCBa.PyVz UUlb$8XU 5k'$4,l_4+u/ya~:\cx03i\W$Ӟ zYu$*Trq FNˈU,E@\0K7 /]{ճ !HwZN9fdhUH>5w.nX|ѿWG7v̝FRŞմOfO^[7kSW>5Dׯ~qZrpi~B!B_b 1nza_,f%JZҘaCfCh ъ5y,>50l)W hdd@!T]Z7KUg:3nB{^p0 O7))Z3Y?h9WmDւ`x-ND.|5m,N8L`JZ>f~="9 Cz}Kg 9etJU`Z߂Mm.&<,gm$,6Pӎ5ø>bg2M2+հj^$02 /\{է! 2 >}ڝ'UDk]bZO[~q(1SJ/y̰h矲T8B!BR |Zh.Pi͔Y;e^c H_E"s:ޜpK|qkuXdjT$LS!<'kT,GvϥF*Vj([G݁x/7NM7f€jg\j ,-N+ev5j(g}n} ,>Vi<p6mkHEHLւMUQ0!٣NZ}f4+,$t dqS'pYkD2]-K^ѕe !$F LHY: u`SN;hٜVL㉫)#^:.M3N|FICGc<B!B}L)l]͉0Ձ#Z5OE]uj¸7SND54SL[DJ[Ԥ+76νa][#>'&uN8Sqאi:癄P.xs8l m4RԲ!ٖʙ[gTSGLW29J1οt"y]#{2Zد1:{Ӷ;|x;YgfJBb:mb*3*'ȹbp?BgnWV]W#cihKe`[mzFmQvԓ\j/Kj^0n4U߿dY#pfB!BȼJ+WXķ5WW׫ޫog6覈c3腗TjWD$ %լG3aIxyPyjpj38;Lqjmׂ,f@LU|/mwoXx07{af$q~uj¸7",AizLZH9xdƗ%b)Zě5)n'&Y^"|H`)`91o6UQ)FS>Bwʏcv̖dAW2ʹaJMk ~DPz˻𴧖W/ڳ{K}Z\lr"l_r6H'yYW=u@"?hIfSнm4E*"%: P<mhǺ5H2$Q{[iM.&i,kwvB!BoY"c+, Vh&P\HQ#?Ԓ`iGT04 '/3T3J ghk@3yU]pݳH]qb"ƕhRJaLvFԄq3o )iBʢuejK:[$"۩e]Z0l _+D˧RelK8J}՛ڋ*.:erIʰuE̻]p:v莁:K8ܳv_?\{XpmjQu{ 9~{+c[U̽95R4NVy,{$I/U]j66A˽J_ǿQÆVӓ^<ߑ?j=5r.eowx[I:WZUK.Y' +v \fvV&=:#yi7}Î5ϵ@t/E.rݳSj>vV:ճGsv!Sf[tgg\x]sİVXs uJ'ߠghD.d`QFXpgٱQAVCeG %&<<(N@F_LщMAa:5Q̛r~[[RqyLJ-cր|ٵS):8YR|z=}BFjЪSo5"'ID#+"ZƪAs»x0J܉ӯլsaB:_ hḰ= (65>y(M2TJȿ&pС?u5$<"/E6y={8(:z#tCϲߋgƷTBQz43KDžg㊉ սkǎ x[-6U bY¶?v!?%O [[xsywΛoPTeR¼){wܭǨBvGϭ6өbTdڴ~2=_tԱGk&္M<1B}GXrHHG} ^U$ 5B)+;}DNBo!(ԛe2쑥 pj*J@Uil$%_S~_D]>IbM=YӲ$.!>ܓo>}LOQQ&y3*r / {Cg/sS܎`vͅf.n@,+.=-^RHK3qMu]|ʘM_(@CWYU'kW^2>ȝ )M 2gH˕s,,{iwC9sZ%+Uoo}̲(ȣoۘVΥ-P1v}di`S3Zm u%~$Zd]Sipg 7w|ɒu  7,l(Uq᧎e .6$ GL#gEu۠LJ:Ayi sod˜Q- ͜/Ew/ x{dIJ59~wv.Đ!cB2ܲcq)Sǯe ꢟ܈~rBk__}3zsNZBE&9~W0!kVi_gEN vn#rIuU1썦Jf>9{?9BNjd5*$]/2(A&R,Ix} PjB"מF=4IPO ژlf*Ӂ $h!z,ߨGg[[{u;.-K2zkAc oIijqxZA\WR WkCy:"ֱkY+9WTb[͉:Aƒs8w+3YZzM{E~hR|s:^E$VAR|/> VJ39`W˂=^sdFg:ڌWx m#B]܃3ddHލI?ys! 6sKf]7rgX4k{B2V|cjĎ}LwÏ&S}Ʒ3aL43c ? WO/N %K(ʝ=ka9"JjP ) SD>TUI/Bi s&=-\Gq~[*ސ_gJg2ykS+KB(!(U© @SO˗̥SYUH8,V%G]Ibr$$dh 4toF80j+_$r=Ig("2kkirw/)3IgU K*w*!('2d[o $UI7N߸xӕЪcu俙 ^.نAM|CO%Wo:iupS0yZ}eI..’ʧȹ RO׾K;Xӓ>u1dh*o:Gµ%q򒌱&Q KuYG B!B4P':k*{&˰k ڷ$18o^JN<"_Gݙ!> M[Rۣ}5 { [^nXO'zPCfZnn?nݢ!nMƃG֤i34;^L,5cF+}m1ztŤY6^*1ZrROyOtg͒,W3:ͻ6:J6ad˾ԷsM8xLS˓n8iWT=nUN$UFoal=D)MJh'dYpB!ˏپ;bJ QF0wb)M:pm Q{qĞ~7ڄăֆ'g0:UԭsO{remfq/A4 @kK24'>S.MRKW Β嚴xj/BPg-XANv]ƭE2]B!BЇS%ߴEyibYV!҅#=—ѩu_!H'ꩧer/q)[n 8D-{0¤II3zoxZlPY8o6=XxzmuyVgJu4tJPwAE-p3oѨ^e]Y/cfs:[T5k>m㓤yZOt:)oet$MZ{CG6WTEuQbv̽4djHT"U4÷i#8G ="5]:B%+c-WLʮJPßC|ڌz"Oӄ1)<$ IDATl[YGyFq$0k߲+Z:@ɰQj>9B $n?r%ѯ{N]"JI&`º=Eh(mTPPPPPP1?Fc6THJ2gH?O.I9ME!B!TV&58q g.jV- bdBߒX̳O>j}Utv׎FܵK*ϞO}wξԖq^L,&:(s\=hB_}tf!!U_Սed1* 86j6 XhZٻ'8fͧ]{p6b75fϪ~\o#Zx:*::wڑG|ً'yi4M7{(˨&8X5JUK+u'IJskH,|[ޕd3oNmK?ƭοܸyQF݈ڌ3;VP`yٶekhpbɸ1f$$ $3oD$\IZZ_=b̍QwNNkYw3%9*ꬰؒo,1muXMh0֖S B!Pd+s KZU?7@9֭hE=H4hoEh~jv_NdsvwC^<Ґ~FuRMS<~襒ni bל1UrXPP%}gD7<΅? {3ijI>s$]!S:ƑGY8z-u5Q;troeyvO/eCE;.UNA3Zc:gj}@&|ךaK6U]7_Hz}-}4עUSԍm֜~761>"+%5i9֝}{{ڋ]n Ji0ŁG횰*8zIywؘ~=:ԪRAjMMt|W1j|H!B!B!#">Qh'K!b`)T@}[-㳇$:6QtJ4`r,\ٛqZ6A˗4|jSK>J:cS% #IkeZsHʴ+Sݹ3NijEװ_Fu ZkL`Qۧjm}7c^Oה@mA瑞m֦(ǔU|-yΝ`yl<@uGD\CV\qu \S=&,FK[sH[oW>)ăG`P$>hY.{yc_y>xR0;h!B!Bs Kc9Xjxx3_aGʺ#S׿6W_RJC[VՖ|f}VAE=Y|B*L9c]>e>s$ʗ@`@w[#W7Aշ@Jx{eYwC:ߛ<um*LS2SmҪԨ'vEgsԦ tٖ-sF~.Aʎ_16_-4*8ògZOК2ޒT>I' yqHPe)yu.m{B!B!BpqW_2޾fnqme fe[n-5AߡrheIi/,W"M 9NS;g@xdҽ]˲䣤x@0$vxM=: z;)N?6_huMo«eZLAUI9}h6YJXqJ6MȠH϶dnJ&ڏY(qk|% MT@s0_H~O)^HUN[z,˜LU3zu *`GC~ 2‚xU'G[Nm B!B!#MB?{5R%z?ð !45E<≽[ֶ3?5V׻CrxeL] ./{?k;PmĂ~".y>3Е+3#?UR]I\ǎU",wvR&]]t役B!B!)D蛕{*F]\bEfRa ^~:nv`9^m땵0;HluȄCJ:JLmjI]'A ʵSLr Ip{۹ӘDƃsywdӧugXXX-<};j#*ӴqA=mO{ԒM2<ҿ-6"^xse[ZenIi =ȱ;/+pn4(Ѡ|jOg5KOUڳ?ek[&4k/{C^ mdkf-'¼MXשG]tޟFKϣG'9-i={թOXK"B!B}Q8Rз,u\޵}m-}\ԍK'Agw2~gP&u\,Yuwnx/;d G6OJ\&#&(<da1}:n( t߸+4[Ha3Wvغ%IzsM0B!B!(cǎÆ Y; xct2TN޽q&M}y@A3|BؖPn5oQ˞V1:Ɓ%B}jԨq@!B͉a8(HDgW{,`)Ę B%) "w-aBB!B!L|)c*:Oo^`"!*Iwm ּ4B!B!¢x4J"?J.RBdHܻ} t8!B!B!+BF+SiiК"  aBsqRB<a@!B!B\Jb0f_Z$+}ah[ B߭`%B!B!зSB!B!B!G S B!B!B!зG "@TCB!B!B! fyN!}`q?I192k`R`=a0mmq|á9:SݑVصgؿ\#߳vh iFkovTwmRJgx2ժUvs.ce!$ZՋDӠ][_*l^Snq2s_~,x(ѐ g^y[U¥]϶Οzí$_L-yZRT瑞eW5jejRBO^eqkv]RA?H"3|:kPOP|ׁ?Bkg=JDΉ9#9rIOk_]k{gu^k.4͌,isD9:II @z?}>TWTu)T_\t`gIP)ON*I)WX̍]Xi"ֆҒ 5; 6ߺGOKpeϮr_"/y LOQ,TAŸ{e]ڮ?Vft'gv&n޾4M>UTh(Sz}+Syx"<%ohAAAdBuguz/e_ݵg0G?H EAd7gtT|\U8=Y[S55bnFAd uP:(<69;SS"DtJ%mKn>#P0aYa1!\,UWnY'"Sǥǥc;³֭L b˕Gm hM.S6;DIeO*ƅHH+YL   Zٓ˥2OjbΟB|[!QtYHN'r}Eaj)^Pe8Z *\c"SҡbWR;AË}yHo 󬳟y,xAD^#C"B@5'KRݽݟ6:eZ}eˢ4T~BmYf*8qTF%g/piMzmR{fECAKj}Ph\R S3W X*{.YQDeJlNiR3Gta]jw-I9<Ġ%99[z'H"¡AAAAG*C˹wJ }ks Ash'SkµEaw-z`-2 &ꑇR* bʯiPϓDɝΔxN8;.+ ̜ yS{S n={,*!HrvAJWJ.Aˢ412/AT*Q+X*СށަަqZKXi~,g>hn=re:$>=هDԖ/)Z~PQ*NM0?<!  <򢫰 2g*!zesUjS-'b[,\HǦL I (r}U IY :d)SAaiè0ۑ2ͯvΜ*2ֽa T"IΝ;O=2Wi;on8๏<912߬Xn-y\.ܘ)9,]Hq7Q'2 1cQH 0v oj1)tP҈H^5zjʐ($yuf Sm->h-M&{pPaYHmޔhrqM%9ta"8;xQ6VʰL_YCݙg\)LJOieuwVܯxu&HJ Q8d6u֗\SPk[RSY^^Q3)Oflnt:1nTe_0{ZK \aeϰ 'D6Y7K^   O)D4g_GyEEEyUc+{n^)쳳ĵ)dAˢ'kLeo̊eU 6~Aisڐ7.l]V2vPŧX;xqϨIs r {.8vEꨵ]n/y@ "?ߎqֻz ~'Oa V+җ$:IHNwwwQ'2HX(sT;)"-Os}I9GLhdc2~@v $,'?.[B\haސhqTYA8Lw,vjYDyGl+e-I)ww F.bƍz9˘^QQjb?(,qFk?*C&X5NTi! !.οN!y GY+jjjۻz-6ke\i7_Ky   [+-O%@U#\\t3/0"6!>>.:$-;0uƚo?0k Ε&oKB*Yqj^(I|D{ /ԗ<. ޚ m)?r^.)S5KWyMQ.sB}_B[_M>xdmELKu9*wNv}UsG_ݜR,Xv13(8%;<.7|?kΈV/~ەg1?X@j)lݜ I`67[DO“P}zL-izö&L˿]ѝKC%N뮌$GXLTNg"YW[|6<AAAɀo7B%2ŔHz7nFܕjokvrHPE@s1kJIX2-QMTf5b2\*jr8H6r+c,5r\䏃 ;~nWH(cxi͡ݞ5oE:&;KUܯuiVkϕQ|= %iR, JX9X }c1fS98ˇ*dr/愶N ~ގDO̓3 ֧gϑKmcpE8ڛ/vF,cdYÉ! IDAT>O~ۍǺ0j2+㘂FؾuJC N<ǵ$ĴZ!6 ܫzi y|   d>{5v*'Z1>SLWH2"6..>!:ď$[SVڥzV  vcXYN {N#6\EO%(@;EYKrrJ շ2c`T]-\Ƃ^=:M7>I,0~ pjH5) zI΁}PZ *މȱ+e>}/uSF@ u{[%%[4nh]}K4էVrv +v\1ꏾ3m5֬)5j2:.,Qu! a~ ־`z;|\-GL^ql& p QBj^/yF   |Hnn>~n?QE&a7\_i4SwĚ`:%AAAd;4B^ٶ>;5GF7U_8q`7ʺShKsquLh#E#gjozIAP,kXH+qP.Ӄ8zo6i ozZ +$8܏GL h7F:Mɺ#ehvRĬjcOZ;CLqZ N;9#H B.XSAM..} @*rF_Y `ZwF溫Vե/po]PrI|lRc;L4 dNok'mqѧ#W%%a.9KnAAAdKtb64ɻ{N]QM~Tr#A6??75W%'HBTfdYkI^i@ܪMi21!(#gߘCG!V%mY槔?,qT0\>r~ K eTRB?= ]9w8U J$!#)ç{ KcćDb_pMj w#~lN IL;kH]-^\"Hf&EjR~a1ֽw1}Be/D.0B9yq\)'u s7 IT=s07\hrqGnSE#i՞퀇z+ya#1_!~=Qݷw Bh۶HBBT JXv͘?i@ʹz6x gdžkR 2UDQj6&;:%fncmje𲬄0$IV6gjX7l   2Ms ic>tjtڑBh+{ڋb_壞rӼa-O~|ŝy/&,6[Jq ]X2O=2XdΝ~|~. ӵ~z[[ᑫfEL'XnsΌWh?VݗV9/3_jzOKB%qnP֒]_^{^Jٜ24ϵzыyym6Zou"DV瓵xM?X?qVMjbsɯO50I5q!q)05u\yϹxn[¬`EֲY}usS|  <   w d8s@c􌙉~ iMm 5$ef&D"6J ԏyFcoeQkD%m7WߺKrXc^RLF)"zlEh?=W3"C|Trv{%C| _%)$Km@L>flxPj%+G͚=#.R"8P[vŒ쁽1)iIQz?p͆ҒD2g1]*\8֙wt_{zvJ|G՟lCWF6Y!ZR1fcWCmy*ȦI4OQEfKu=PҚr$0:溮ۈPKh6pTCNJK $dno,y1o>x¢:XHa[S ꬯.-*k\^&p'&Ecjmf5juN|K6BAA[lwQ8~"jAuւ4bͷގo~Xk ~[JI>٢fT L>z@AA'Os AA҃Y^,N AAAAA&>  `y\]ǭ3jAAAA)DA=;wS~yS%?{AAAA}AAAAAAAEBAi JxvGk"    n"      ȳ"      ȳ"      ȳS x+^!"sbe[/~ҞϪlG9-?4HĊw,gOwᗺ޿Kv}+Loe[%v'>Io#Z07-,H'JH`'9]<Hϲ/M} Ri"ֆҒHOrFz\dG)"XPW[Fk%QAAA5C  Hϖm|A|(ѯܲ>O6xE K KǶ{um+T>:.2>%Ȟ/yAAA"y(kINNIo$Nzz}|rngi}~mu[OA)AHoT7+,ZPBR*d \46\QmDjG/fGȷ$yAAAD S L0]f0Qh#3+6qUVʱTCս/l[zjzjJITYJ X:d6T<   ")DB*+-W3Ǧ͘U2KkC՝F R(I2*60ܘ%II:L־֊u[D~au7}%]D1wv|TF. woj6m<#G͗gP֒]_^*Q ~Iv9TbٖQǦL I (ޣ'ErVVBTJ&6U`Nzx^o8H$ } ïs*e'%0VV)Im*),kx2RLK|'H*:ŧvf~Kx1{s^Rt ~UGϯﯼFDi8 {^ftXBBK,vM|HyS'whWyhIhVK^{3M%=~BƲyIgӗ/IκK .w: مeE~7hsA$ ycRV|rdǖG*\={N0j/nA@['|I/y>3͟   N!G~~Ul׏,MH}׼5\5х^Uw')\%+wR8}d-",}DZ?O7&ߌ͑Dĵ/h9fui.ٰ2gH}w۴W3(PۭcVSMTעC:X,>lފMŵ{/OohɝL$cS/-ܸOB@pMvj"H*?/69=!ɓ!%+·n_!Շ/\]~FEҰh &,$ 1>c9kAAAw ic>x2>!>>.6<>-<>Q^QQQ^W?7*?NG/YX}nyg\-zٺe O]1?Uvfae7,c{FE}N*Q4Y$g~Pi爧 WIXխݤ\4{ٜ臧D7+ޱ?uquߘRy7m4.I ^!oK*C&X5NTi! !SUcWfݼRTggukWSȂEO֘0ΖzWp1Q!;GY+jjjۻz-6ke\>ꇏ/uB7IcE=-]ٳ <|tSnl-Wַu9YBIJKw㈿듿'7rZQz.yEy.l[97> Fң9#Hԫ_~1B[\!dO''{o2-ʅbڂUK]r`Qa`e7s\HmyՂ^%4y"[ӵ   C \t#w\Zꀴ/-k%G [w+OEϲA"%Qj:^Mbif-^Xswzrfj+=yqM<&=8jiDkɲ&ŰKϽ+Gr.H"ҀU:/8v96u5_?}d庌XmH_0_.o;LFC]i#'ZVl:X24<8W TkyC+^Qn9Yӹ-/Y@zf$?|$z;|LycYioqW㈿=OA\δO86RFc;^tzP)K]r "g6V]P5rrTJ zqwgdvQB"s)\uЙk,(|3Xꛯ.MZrg,;gp?#  }䊗$⛩(V'l9p‚y1IiI޶;.4gR6iqސ=zކiӻwÖ/5[fJFs`ZInDt?0Nq9:)3!qק~z\K.dIMeZpbE5@sЦERNS"Bm~{ȝ H/;%X5syIi} cXKNƌer .OAW?ͮ_x=: /iePb,V𒱞=M ^A<"S ! MH$1vs}MYA^WUpiYWT>j3O+X7qt߅oכ ukꈍKce>$8jLxҿ[qtv>uN](t0k_|e~]޳KɫRC8{~Ud$ʔ^_mYR3h{ ZEݡaJ(ypdyAsGBY} wjIP%odZWXBl*yD9KLG)]ǥ_OC%(7LNKN8 .Oyb/WLM zmw1ݒXm 6   tчe_on],%6t_=ç/յQ-(H#bdb0vk]} GKF>@J4bw9')g?iG}]űμcW,盰b^jxgw/QFRU@)!<@DJWԙ@"D+ښK;AJ3| 솫K:fᚩX3ވg_1q2}D'!{ :%4H4C%fF;3<ĥE{HŻiyfE4AV\_f&n IDAT68Vi/M t8/{ǰ5@5zrNܿ9i9xx'GJN8OzD YN6/A0 峩^4= (By!Dl[,h*(mmYdY+z)ɱ}ha#͆HEAJqmg(=MT #T Co9}9u&_[Snp]"ΫA-ebERVy`Cjw]0T"W5})B$8XOqY 29U=+S!lke5$QwﶝAuA)rՌѷUS_-gOϕ<`w>0n(6/os"ͿR_-)}xsd g'Az)3stZ͊dBѫUy8*XTc[^13BxǤBM OS0RNӦ^>/i=TI%ŚՓs/,WM' m+4Ҝ_>oۭ$bS/@x78eRo^IYBM,awua/}Ur۹n\d#A=nV-Ί|-p\߼ϫn߬m9drZ  ?y+7ΰ74wvu[)UD%/R@Gا=Ż7iyfE4qVT_Es}G.y6L(t8zmUE]3勶>ǜ+Vҹ޲s5Ū˟ߪqb>j.(>)'K5utYV))Bg/Ce /9<>?A?Y,ĦJR s7ROvy3ĺ6 7e+fg!4Q :v>ߪu׊Bo7rq͑Ŭg?RGDp9,DIV:X,T#*>"W!Κ/{gnh٣?u""yćYkڄ6o,ytvꜧnS''iSz/>\?S"qmtQۍ/C"yFO+gd)K?VFʐZێG4ijKYHyO-#Vc ^_,^,y|QA\ls{~'69⵷b}GS ,<7!^Ujf8gB[ܺ]5sZ6q۫WM'>qo7'v/WCxοqԥ)BWnz: v=XgS-k#=]8}2^=veh铓P9 WI409~,kaX1AG9wȹk meYlho..~t#:µ6r,Eٻ ;s{= s'wl є}]q=mFt;؂[+X!.D'7RL?+ #\!>]"Ϋхצ?iڝ,Kv6:Pie\_ggpA1:}g{hY`: &aYr mE7@uPKN#OzDi +yC) dԹGrHpm–6[O H*{>/Ճ T_>5[rX.UHEi >Y%RI ogӦYl6!~I )/(49x-yFP#afIXj3P yJ*Q7Gehr/˼ SyQA\)hsƴdaX))w=2'r2-rr=- }KNPFPtO_;}dxeZYͯ>9|RHGɥCՈb?u|_I4$ۘ+xz'8xq/6 U볲ɽǙ]\s,DlMbuzI&Ƅ iI^a%Õޥ[XXX- JrK%Ȧ\77BDl_s{{_U/w8gX7ދ<( .;S}ak>BŰonxm:'֝bf:P}p{kj;)0>u`>?{>g?ώ%U~)My}?߾Pwj, ]/SЯAA$2A'CwUu|5-JNl$XH2jxc6r}_o(q .E镅2G@E޶kce C7#ф6}֘P!?rzܒgd H.ep5\m I(D8`}k}*X'b,LGq)rhR~{W'?Y?INI.7R:{%I ;ńc,x}f(Q_u`WNaەI+/.ya̒Pq{I򦵫{#֯ ꛆ߲7euǿ&EBAAF!Q\XWQYiSRo|Y>R6YQ?< M[^@++Te1u WH01uGxF 36Sz20ޚaDxPt*q~vNB= !"cW^3zMIcؔ*+o:,t4@ki 6> <ƓQS M̟bW8;?⺉~u[/hf1},<$-Ҕ]=7޾j}g;~#8rbmad+_JQsg_ti{+J`q (b[ЇAA 4RwϟV ȓLGDlil)816SyR '\W9yk2IAܳpEfnGDH!r1㵪ʵp4T6B =vΟgzM彞ᐝ`599m$%ȦF:fp4,A.{Yt?\a׉a x+t+|8{nQA\C0)?пMXfʽhgo!x(J% + eTaq`fT-_Lt8ЋAAӗ[f+òܑir,dv[FsD`1#L[A$=zH!C>gxEHpv{FY {#m돹,ZU`,T B=IxKIMGWn\,wYl쩮mxNtsA%2,AU hG#c[eځ3] b)#@F+U   L2>b&E×W֠(qL8)#n!gxk }xC+=##ZʩNN cΗ+sMLl&Zetҟv|3qPq%T/!^O?)+$4Q77GI,>2Ĉ$T6IuLOoJS~؛%!{w(i\|pmN?seI*u+pq7`92-XAh1Գ+TKF-ܣV){<dSBd2E6n%+ &ow~C>$v:f,x$ǂgG@e) "+bD{,qBzfo~;_,  AAAy;}w>kV}m(*b n4A+ɶoE^LHq+\A $?O; A"k+ѫ+QTBߪZ2l 1 ;c4ǁ>C:|<ի~}5yFl-DW\-򈣢)V7)WVP]ⳣrWO.~M v 7mgqKVZ}Ӧ^_RLo5?*f.7~APkz􂒃Ym* e˿DD7ic]&CFg($d'j&]Ùy||Fle˖~H'v&]{nZyXW v|[[ qsXu/0r+',p]k߼y!ï/u^/skE77Pϲ~acvIT9_jS 5N7WmKAAz/   2HVVÇQ ކW^i?V62?щQδկ"ȁ&+8f*Eaڭ5eL)c9Cށ݇rG ka\kXt2{e/!pBbU n}Y^rY^訨Ȱz\]lm`A~zE]r]DѺwLŚC{WUr敜d_SYZSYuĭ=7kr,唱FCg?;`/\Sp[9䋩ڀ.c QzDv|HdlɲC;ѹX:6jrM;x @L!mC""#--BvIuٯRW֊j7;@O6j _7 R-wr'e!.<_V&Ԙ:BYWK<]Cu_>mΩ ~qaLO>3W:6n6g(._imN,p.d Ahs?o .'J5PY[j(0I:Ȩp,5%g3 6,=EmXZWZwtR}}Tqn' ""Ѵ*}oPl.Fv{RX.L5 @3x0ۺo֏țѦVo(zK=$?7^g#D?Hj,O4Im#2^l7T߅C~[U9MȺxQ~u&D맟jy7?$PDYoF_.g[dm)[k_H.enp&\[6l}QeJdUΩy_>APiC>`Wm"яU`GK LT|Mmٺjsm͹΅28Y'kǼsŞ]|0&F2oD"snƹmlڼ$^ i-5yQ(FyGx/n^7_ rI'4xW[ȐJ/UFksèh`~FKDGWt\W}ѰW"yڸ (_Zm`NQ3431WX^1̂u.77 AF#Oct{xDA\zY>poMFF,!<ߞuxW9L{ ǵ0V9fYas?(bWmV\oUZ Om?#qEU[msdsp(T-YG{W_;lޢ>ꫯܤuS_{'Μ߰wSY*4!1}GjBTg]%,#W{:F-3Q>ZU 1#0c#= ;KbէE-ZhkWޥ&C\5¢w/ 0]ޑL3#Ti" L\h(|>MHD;>TuiB"bXfDаdNHD]3Lvlii'xM]扈4A:~k,E4a<^ȉ on6O8)G~y[37n&\:rz\GAz QI\-59'J^t\3 ""A0~iĨU^|>b=f1usؖw͈ +'v 9JCjܑ__dѢEM>4r_F^Xm{CT2JC,{PqEw^:gHYAB6vIEQ "-|ey\z+ ؕ=eb};[SE"= OI/;ϠFmd*J3) elC%Oߚ)L+zZS )6EJ,wDs'|`'RvDd5.jkm,p"d &#W誗񯝇NU|;D4m=ذ 0 !W̕uU|ܤڼv70>æb'\93|㽕dKNlz޶hnIhc{y#/'6u\\_xiRiӦ!<.b ksºvT)dA_SUwbņ%wm9KVKuYIsɩ\\'-|G|7++rN&~3xsw'K.6%Ɔ{Vc՛Uٚ\'x2t+W.5#z/{Us{W_&RgbR"P} 9"i#pE4x,vS_ni'Mo'dZ6,LҥlDyRߙL۶HdMvS""UbWm-΅L!MҷT4ScU2훘O𒾣& Ȼzj/l)o)cIu ӫ3;<33@s<7߬{34{ dٿɳG\:ʯlغ2 MÒ>=𑯌{ؤ;#[ew]ub}Z"ZŲʸ'^%-o΁G'132ު7){-drSDsVK&2D¬%"KyzQFP\$ I7uUxK/QU`oO;a(wslS&O\'UItJm΍d]泲+ 6L!ح6A+0t7[{Of N SHܞqE|]ǜ&LDKs^埅D=1Z 9^p߃=tكwrV="9cJO.em`,㷮p,d ]\Swm&=p UkKT1*2(>3QHu۟Ye /R<fOMB .2r_$8)Q hdue(wssJm΍dB /T?\w\{QS%+4|'6aou|$>h}ĒOۺ;7| '1ӞzOi{I"s i{=UD]k+j 0y&5hv:cXxvw5 $%2Q,_Dx ^w_V) dFB WHGn/,UIpԳ5,K U7>>0ϾzzqudӸ %W};bWCPix0`('P$OaD!y>?X>{Ux#:{(ّƩCWWg4w[;?!҅) ut|qnmΝ,p:f 9ӱӧ7c;FNDếnOێ:羽o֜qоK֑'rKw+}7< mMJrKr1bqڅw:%[3osE%I2V+xf(Qh%4t] ;Ep=$$ Ou0=d$d4_R/]cNMHCeg Us#Ĺ9qiӦ=Jic0:Ь^s4dJkSl)_s'x^URŠcWK~ X ~:/ &FbfKy hzcF7sM]3/ozה1>^k}zRRǯ_֭B{^DTecyMȀ@DEGKr x_t`U5֊ϳ)OskFh֮w}nzcg%҉[DB)|2h 795W-Z~},hX\v:?➏8߾jyQ]ڲo֫9kO6,yw,sbO8_kKDg;[2`b&zp[ qw]p {~G{]?Nܰ, Ǎ8c𠁵wlrm|׋t7{' n2?mr~g}y ۇ?5, Zxώ0f5}lo6s=b]oKٔ=on#MD^h>Tk~iBYC/}q O$ _WWJciUf{#P"zvǼ>]=[1xNq#ݢ g XJy{YGbn+ p][s_Mp`Mc+=BK~5o",V7}$Dԋ_~=ڛ[7Bpú=8wEvuVq{k[Յ%j,jRp]R 8o~ ߽6=--=#p-d A ~#};i/[Fo| 6gOKK*2ȴqDX"QQQQ=zZ2*V 2,/,/H_HDtTTdX@~~=.LOO." p{CCŗҋ/i"BB:G6Uf8x#pb1_LMcӚ[JͼD5p;C$?}E-,Ϗfaw/TTsԤYs' QHxSU9\Pp[GA:Q];33bԺٱ?Oxu]q78"::*",@ɲȗOKK]97d Pdn]a~P0&ocM3Õv0OPdTtTdJBD3ii+BpL/-wCw>Ff1y3& s3Υ]̯%S8f7Mq[:=oԺD4֋"z&K{`@w\g?2PN~[vZ󶽇3&kBo+iƪ׾soQ/V=4oe[^=B,<~jxːqUvo8p V FA~M ֶfup݌%ZEѽC;oў?.K{ŷb<)'L}*<<&"zklw>çj{{x>jO>{6s`@z)>{+'"<VL!حi"r޹5TdgYT]˫ygFd۫bXMd2J ۋ9@5-p@V]ND T YEn,#6Vb^xOgsC_O|s/nAxµBS%+4|'6aou|$*Yk*:SED^}_'O6#S&Vz f 9ӱӧ7c;FNDsB]>^p g9wGZO5 f uhü)!Ľ;'=^?Q,!; kl/氁NKEx)wEkVdԸŖNJDzNhc٫OԿh*ߘPeizpW"Dgso3[!{|2hɍ%ߝn])jr?rٺWDyGDܚ##h IDATp@YD_v9z]ʦky^x饗^zeXj%w}紅 zcg.lOޢ#yn d C&GotM2?>iX `~]8yH=ڐ#.x)B[uq#6V#<{|ܐ q)4t_7 8wƹ m7S#޻~Eu>l*YezYu\pJddn3+{_f#`f6-,sE?,x0}dlOSGϛ]d/bڿ|u-=7dȥiK\nW,N,7+>og'q Bpú=8wEvuV1FVk A~CƯK9`8n3~[w2gHY$?I&Abn9l`5p=FGzO- ":#B pj !"|4+ 1ꇯ ?›{E~lRaƲW6WId|$})fOkd~\1!rOֿSzB;ܚu|Y(Q_=BĂ 0R_DKK˳{ 1 ]ضz?Z+ U,P7׹/L?x\.b߻\0[U&5wb[幍k\m1q2WZxRF3Ð]jBSto.)2Dd2/Z2{q|ᱢ;j]4җ?8&;h|KI $/?i?;2VUdZ9҆JDD>;^͢U_XHYj$aljkmu%gV[Α.Pҽ3nݱpפv~zE)^Y$Dd61 p{Bc l[W<`\8vͦ|9,X36]}qkg{-˦?4辤*1lPom_ri|}71 rmNWOet霁srtl0FK7iUc5ȿI.n)EqEJ'>;JϷr?7|3W7[*§&eZ6ϑcnȉ=W;ǣO Hk+ۊDB\Y0IE/hNDwj(0S&0nmm!S1$DDGEEףԌb9>g-EΘ,:iGwA SG)|￧U^ŵk R RٝLËZq,7f۶;#N2CYiV6,TKD6T,#3;]M&l\Vjjaa:":mkj݅l ZqpӮzC;(Zݔ񚲼C{WUr+ښDޟ]X55YNiǢYb!2U Qm؝mu {Lۭs]^Z%v}ktmɶ/̻6mÁSuҼm<L:77c)P{4nS$blvmsAMML{O0bbS G`e3&d-ƍ )[0X^zh/ w$9|am}0ʱqX! BhTY`jy&}M"U [)Gߺz Xayt:_Y+XI\? Ǿ7#\AeW.8ĥʄgU7su#g *}O+MTFZ80 -z/9%5:v St$p]2=tθ_=+@z|*]9~=~K ,_rן9E5!Qwpa"۾9"(XNDCtnعF{iD$Qya'N64"0Le^2ڃ9Sv0I }'"FfEפ H.g)np(Lv.UvF~RT?@vrz+]JDr`gk1>]1vq !6""p6!-Q0ѷ륎Qrњ19qb$۾l:0Ic,>ZeXVM+bs4bc؁!":}lao8Ǩ,<{Jq OJ gl\ '"ț\ŽRm=CIK&Q$"؀8Y9*g|b$LO CD}52*Z$|9 o4G^ݗd1\ә5[3b־%1{7Wm׆ͻ-5"]6xK"h|)}5,X0i->W}ԡdzW^RdɣSrQmo׺m]ƫ&:GWt񽍦j ߼INy?|h/1Q|6@#=>r 5>ߋM>S; - Rp8G3g& Cj+J+!"Q²s$vu[e'E1pԶG~1ukh:4IN꣐s\a'5axlxV(藥eZc데8SU;*F^$"Vi`r\A$"E[wVcr|^KTuKA0:qE"ϐYx:RM$cbf0Qw̋]Vm}Ϗ҆Lf_/_w,U5 {+Dl05=o䉨*}E7kY{f헩|¢y?_M.(b<%2GSsI}U9p.nVƮa[ؾl:0gO2Wqc>h6'R#ExjU{m1qp視3UEi$t-PʒLDʝl;)$2SEy;j^y.АOΑ] f2~ #wo6?cF=$[\~NlC%Oߚ)&Ѕ;" h6EJ,nȋNrD(o9(LiSdXf7qgi [(ӻr3La; FbJqmx7" yG7RvGÓDdm.Xt08~ VG|""=T"ԔIKKO(7E KNLo_[L:[?YLBJDz-j2LneetRw9;#M:Ͻ#΁ ^=R^E(UWG=i@D6Wךҍf)]@tc 00餸bݲO]1vq`sb8G1Hr F0Mɶñsl8GlhʭL }kktltۗM_E 1lRBDUY✵lwsjk{XԦ4>fr5c ,-hN<̒\YM2g7w$&!>Ts˱<">fm ?Uum%e&+yG6L~0Zӣ:o$"V.}jxQi(R# 5V"bU=OiΉ1o!t"{ B^50U7qpsg9rdEkmeZ][Cgkֱ}t`={6܇Q󐲂`:{-qZ6(r tND)NYfYbl19/jm搎ȋ D"*Xm}-DD髚'}կ{u'_{<3]*K}5@^r)CDs}ّf{`Rݦk@%ȋ!"CNӼJݭ#*1,ĔPlT%}s/jLUt dr5: ˨պqٸt8NMȱm#\ivm ?meӁyjbS-gYwPI=Hype.Z✵l:cȻOAQeT;e9rfm#"E-ZhZOu` i߾2c-ODtt/|n7ÛO]77H33{_9*vV\`irp@Zǧ?KD'mEA<]+`{DfEab,TF12C=a!wi.3YEn姻Z}& ׋KE"d] n `krյb\1 c$Dt$ClU);Pf~O|Z`e07vylܞp0r MW}ZԿs77 IDAT@Dc' {GLQ_d>ǩxtVԉ^nwљm2`G/F7;C3y;e5[A}x{̌c.|n]].1kZv)|6N(ۺ+잉N}tܑr}:MR{8sX]AQp$=jPl j.+4Gc̺oOjRҞ]nہʉ]FΏu[Vȿwwp 0^Fy\hQWF.+Y$$r]dD@dcs"xsxڵ7󶏼uq3B/P9XssdaװOAݦ1_$6W!pN yj ٛx͐+X+>dqK8,\d{͕%"u~"OR%}%G/l@4J"KN~g4G&UI1 ŕG)3rmܞpZ{s'>^]X{0 p IHN+1hEZ\u~se{֭ڑpRal<;[ڦ\xA&+5iݪmOyߝ_j/ X+w]Z\XT:sͶ p-/QAS"o߶fsfA{̪i~;X8j1^|s7\GumJHN+ w| ;^TXk4 `2K$ڸWxM&fA8TV?OO;Ή1o!!{-g.՚8*n[s:k[Ñsl8G)=rњu[nƉl_66O*[dx.qݚ?ve#ٗӝbpIzප@DïL-7XG0bueޝEUQwA3WlYi5떙VkiYff432MҲ̭T5E}Cٙ}Μ "1 y|̳|͜/s4I7oT^3?x OrDWV|.u⒜U?M4W]eP2~/G4eD &aXk^oo9SwFLJ'"}-y3ie/ozwy)6w~!0Nº~M9>{_q&?uQ@}`%k}֡ND:]HI[~d16)ݻw2dЌ'V 뵻O/y m؈D$(C>N$1@zOPޘBZ=' 1~YpPZv,pSH۬yX/>O^ .7s{ W ŝ0ȡ7?0>uL/XD-J6mP>p<d3f) ,[ӷk5ۅLp菎1^MTy2V},Yrqܷ_L񉈤Jpm} ""c#zqYVi87itjDʉdEgf]e7;[s|'IO ~odTŊuۙG2fUvfx9^~sֶw7fN2ֲyuY+wunh\;~oUgV\oj{W C<b?Kow*/rm߫9+aa~\d8ݤ-%YsK[sݽtnK;+H{S(]̽{CJ#l.Ccu,]f;ݣ?拨PȀ~k Y3LΟܺ%&ak§6\[|4M*2U31S צ[=~MS)zurc5fperOTIv-נ]SoAΖRQk WEә1?:.gӦO)d?xt;KE뢯7v}Ңiߤj \||ڶחH]m6~;~W,: mۙ;ݒsOi[ CU;fM\T2NR\F/x~umƨ|35'G4 ./cHs`W+̄J4kEMDOMwڦ?etT&!5M-Pmڷ_HOOy_D޳Ů~dWڀYF*%8SƃB't_4Sy!EJ;؋SUmڠRNu ;Oc*),תŎ;8Q״ND4UO]mt֡N9ψSbr2sǯ3^ 2& \~ nfftKD^ck 60%87MXFKe*ƍ/֛qw#u l| ׋1\kS5ll&RP""RzN'J0NUq<jӾ`NCY*zԋ'ӻrJ@%@0^zbVg)K}Ovvi E:RҸWȫխ]oh{.ԏ;U]ʓ:MC˳ܭjtbuf֢ '_շL3n#jOo%¾%4$>= ?[s$e#k2wDX#c# HS߾""'T2 E\ɾ^NusV3/1ffϙDd'%zդQ/De~TSzSRFKwWD V*4M_gPdݟʴfF_>/Xk;w65bDx%2wNP5TY]c{%,ŮM3)~UسuOTc9?r~ś%{|5NwPMNg$M^}, ;ŷp=>ԻakJ ADmt-Z>xoŵ̏[ʱ(h}hEQEGzj*։0oU+,7=Ój3a_"戀W+"9C{̥ib7(ޣޗGS|i[5ZC"[):+"5;ӷ. C,(:e`{+m_풥woKޖ7uc~=%Oz5ѹOYFI1C3>֓al~uDƯ)|b[ԚцD^ؗ3~djJ덷ds԰Ӟ} #3>]S]93ٌ_S1ӝ{io۶{~Ս5ߠݗ;27&탡kƮ~G>Iߓn5qܝ-ߴYdNeJS g9DN{)E'5^gc]l˔)TUD$m_DLźwso>8*7 ]_FKwWD@q+]ESNDYuz2j.Y3H*k凾N#ҳ z9t,S;F=PԴ}[J4흱cN93{W爷]Op4-(oȷo_JD4tU.痏2;u:|s{jӋXg&ol)!nu‡E }3ڊOz=O]) 蕓9캿oǴ[e?OOzsgO3>=KODRxvb{a{w1X)c_5HoΰK7,f;@=pj#-3"ݻ%S3n UDF|#j'@gb|6G/OD$IPdѴZXԸ)O{IoVi 0nsߤJL= v#|ynW*.k@Hig8pYZJ92Trc5MnsN/kL{՛<×+`?tSp~d!n27Z4lilP_ޘX;m/^aT7]64D|6ЕiJQrKDš䤏U-zq%N# 4^;nHgo}"Rod[ޠuStm/Nj[-xͫھxꕮ?s-]bWDTOb^g顢SG*&k܀C8/"VRI;tD{u:9iύx79"jFwo=[̝q/^mm\5[RWwߍtpQ+>Ҩ6?7ISh#KHdW: PLc/KcZsl, "*x""r89y%)u풜.")TWJ}S4V)_͆jd Q33WoԴu >_"7Sy[sgZuG-~w݊Ջv_3g;Ͼ|."GO_?GԬny9SwO e'D= am\6U_7[5+)rVs|Ǐ/f:Yz2|"?Rɠ?m: gŚE5ZrNJMpEҢӚ^tn#"'ˤ'%E U?~kccb2߰]| |z;!ULf﮻ҬhܩqiF?!"T+ڃҤeE)!(y v)DIcUum^ED4_y;ݏawe<셦&?a&e2YÅZ?+1%԰" X+=mJPs˱ӺMS\zv k"*FV)|N~Kϋn&" BE4iz3MQ7_߻^LVI'.?.<S0a} /:""wy -d$_DL&!8EL"yΓ:tj+1ؽi2sU`y^crWǢ?MGrFM6c ׉3)poWEgEQyEa%K" QT2 d`3SE9{Ni4{ "nֽIX-8Nh"R^oۤͅ?SSLVh".YDēPn]Yԕ|zz& L!J"ڠ =?Hz8Z"2Df_ƘPğa,qgv^}j#J8}GUDK}eR'.fUyozDI|{B7*Hřm*K-ӽ)8ADVN'_X(e0w*sJj^gs?~%" ,%QHKJM_Iβij_խ+G9n}$9Ol\HTˀo_gmiSޗdu@kh>r6g/e0{grKhza&"ijɇP9[NrNXs=@VO/y _k{Sw]AK=i5|ugH)NU5fPc󥈬QAc|OƓ0'"_i#&-O]_0ejf%MmtKm#?z|A8KvKXvv1 m:f{UTy2V}~6rw[}N㬿(بytM1pB lrz2U3|6ߦ>B@f4_EOH~Mq{HZ&" g("R9:Wp8Eow /:e;i[ z+fJ6 [[+SJBOu_ȹy/"Kr޺[P y=_;]ZPάg5kuVg qܸBߴިiN5ҥ5jv]qtc)O:W?~f{-$hk&mT:ۑuOqmݣ>51f-hӫ}{HuD з`/~HbBu]JʼnC<qd 8#"-^ !5z3ó4|V1VYP 'tdQK]4FK_4 ʳIDATiÿۼ[|>E ҵܻ9Dj7fWڴݷsoT"#utiSif;ݣ?拨PȀ~e uݘ[yܢęz?lm^x|;?ou|ŷaOӤr+SnC%xbVvx !neГd jt}ȐA3b X5PDIW}?v޷NdN9l3MVS}m=Nbcc/_NTc&jun4bW+ DgoUG7[++f,oc7= FQ7$=,_+&gRBel4&1"xRV;V:g>o/w_,!Un""{g.σ; ̠:6ONN!(Q7tmȋa 2BҥCn^"0;ثCu[舺=K`\AoF>ѣG6:]g4UEeYUM NlՔ bқw5(}z;,^;Usxu<9g.-lsջϼ:{êO9ܚ5uTjD:SYbaVy~~Cj>Fu/ PVݻ2hFBL P=z􈏏'\˗/'(oV^L!p-"S\"2L!p-"S\(Ꭷ_/Sh#? ۡvJ&v Ojy ]?҉-p [w2y`ok1Qvڶzj&U&|@#5iqΈw+v?aP?F:ڥ~0t *2<ڵ?l޾7%ļ{zGvh>=1?Vo{qٹ۾[=kےL`r!]* B\Aܮu|c !3M-CCp{%"?~@%izvxL!cɖ1O ~Q;ϟخ(+_@s5*hzFzĕoΕUɊ2ݗ"2/ertWz_"rlňUG,XuJnZ:ǹ%[2>qZʹI\b1_>[nаɻf7npi3?oin}55 7pWػ[^>#-n=SZ_a3LL:JqudcNH{ M1n^\zyt>h7Oމ>U+Td Q\>gO36yUD2%\er~_{7d=CQ"W:yu]BQ'wM]*fHWDDd= [?K!Bgll-CZNv ˟}' ߩc'u:w:^{ҭռkvPDB|7@C?mHWm{"/,(" ҭrt"r̕h/"Sb :q% T:.&g~PQ)Dq,"͞`ˑ ;}}ރBՀ-ڊ)l:pfǹN@EQO/y WPǎxD$nvJU KJqѦߘwhv9g<~eΩQ'"Ob)>X %Ɲ5.q;Zpl3^ݻWkRkKmHu%1-}OWrݛsfmn[Ң;*j= _%5Iq40t+P,zls?ߚHnm ' m[if۴A2>6;sR*zeeumƨ|Cv'6;pwd&"_D8ߋw@.mNȬړՕ So5= RԳ^D<ޕkkgWȺplpDE[\1d P,}ED2ON07ǒCN~SȐz41E!J:] _3uK UBJ]fkF1QbP,d ֺi}f6W7Kb٧;~?_m?G>O|؇=ַo2f|)Y^yOg3ݟr<~!hڀAI}ɌOovx"#io})f{'kR=>mǦe΅Yt#6Zi24Qbŀ`rg؈S]V[ڍ: b@V[οCjmgwsYG^{y^ݵɽgwЛ*Md،ok#)CD>|1cmhC3D^ͨ>75@i$mrtR+bLxC MZi17;صRY=:ǘn_56C;3η]wڸhCcd ˝vM?&mf9k*z],k?;ڞsԯoޟiZ!=q^[!("ڶ%d?+(D/"sR'g[DDtRk!hDj#gw ޴ߵ,BN*Jl=Z4-v_Jqt7=?(}ܩ4X-3yUbU)c{ (7M("5n dtf/%Ls҄";p#-!2Ym5M% ajEDDDVND,"yDBrӄ"7<|7g:c֚Z nr5bh:T1)W}"RoT_tW뒵VwT.5闃}/Dߙ j(F1]C|K(ݻw2dЌ'V !:W֦q Ϧ{6ӎ }yNZѣ3 fꕷTt_o3\>WJ;ܳy\oeZkgqmTqY:ֱOrGcO-~}^]nD7&ë}MLE=v`| z%")~G6khf 1ԯ!AQ|~!SDN Mm{={l__=~ Eʱ&Z(EԜ][. C"muRD-kͭYXC\ٵμCݼC("ǖk!0 ,YXܷgs:zJ_(UP2fe~_cxݷZOLTt+꬈DDZDDHK\\g8ϪU/d#a.Jj"iZb$ͩ̓Yj>`:otclJ-뜚fҹD0[s.Yw..z`GM,䵉Z ->#"Am*&g$&Y:&& +*ι^Z,oͶEk.6zY8f"{}Vk4o}R$gy5"efY(Wж{KPr8[k ˯oz'm/{VeQQP@llˉʛիWBUK{1gOlwu0_:t%A/ >o@DyrXL RQBkݫrɨ] /Z?Ҩz6bRB[g:gӨmJ),ww&(ud /'"UzBRG߬>z̙_)VTP|CpfUG4kPΚ͛7VXPA |U{?wsIENDB`astroid-0.14/examples/000077500000000000000000000000001335422170400147225ustar00rootroot00000000000000astroid-0.14/examples/astroid000077500000000000000000000007101335422170400163130ustar00rootroot00000000000000#! /bin/bash # # example launch script that sets up the GIR path and launches # astroid from the source root directory, unbuffered, and logging to # ~/.config/astroid/log # # IMPORTANT: This assumes that you build astroid in the 'build' sub-directory. # # Symlink this to somewhere on your path. # ASTROID_DIR=$(readlink -f $0) export ASTROID_DIR=$(dirname $ASTROID_DIR)/.. # GIR export GI_TYPELIB_PATH=$ASTROID_DIR/build $ASTROID_DIR/build/astroid $* astroid-0.14/examples/poll.sh000077500000000000000000000011621335422170400162270ustar00rootroot00000000000000#!/usr/bin/env bash # # poll.sh - An example poll script for astroid. # # Intended to be run by astroid. See the following link for more information: # https://github.com/astroidmail/astroid/wiki/Polling # # In particular, in order for this script to be run by astroid, it needs to be # located at ~/.config/astroid/poll.sh # # Exit as soon as one of the commands fail. set -e # Fetch new mail. offlineimap # Import new mail into the notmuch database. notmuch new # Here you can process the mail in any way you see fit. See the following link # for examples: # https://github.com/astroidmail/astroid/wiki/Processing-mail astroid-0.14/src/000077500000000000000000000000001335422170400136735ustar00rootroot00000000000000astroid-0.14/src/account_manager.cc000066400000000000000000000151251335422170400173340ustar00rootroot00000000000000# include # include # include # include # include # include "astroid.hh" # include "account_manager.hh" # include "config.hh" # include "db.hh" # include "message_thread.hh" # include "utils/ustring_utils.hh" # include "utils/vector_utils.hh" # include "utils/utils.hh" using namespace std; using boost::property_tree::ptree; namespace bfs = boost::filesystem; namespace Astroid { AccountManager::AccountManager () { LOG (info) << "ac: initializing accounts.."; ptree apt = astroid->config ("accounts"); for (const auto &kv : apt) { Account * a = new Account (); a->id = kv.first; boost::optional bv; boost::optional sv; a->name = (sv = kv.second.get_optional ("name"), (sv ? sv.get () : "")); a->email = (sv = kv.second.get_optional ("email"), (sv ? sv.get () : "")); a->sendmail = (sv = kv.second.get_optional ("sendmail"), (sv ? sv.get () : "")); a->isdefault = (bv = kv.second.get_optional ("default"), (bv ? bv.get () : false)); a->save_sent = (bv = kv.second.get_optional ("save_sent"), (bv ? bv.get () : false)); a->save_sent_to = Utils::expand(bfs::path ( (sv = kv.second.get_optional ("save_sent_to"), (sv ? sv.get () : "")) )); ustring sent_tags_s = (sv = kv.second.get_optional ("additional_sent_tags"), (sv ? sv.get () : "")); a->additional_sent_tags = VectorUtils::split_and_trim (sent_tags_s, ","); sort (a->additional_sent_tags.begin (), a->additional_sent_tags.end ()); a->save_drafts_to = Utils::expand(bfs::path ( (sv = kv.second.get_optional ("save_drafts_to"), (sv ? sv.get () : "")) )); a->signature_separate = (bv = kv.second.get_optional ("signature_separate"), (bv ? bv.get () : false)); a->signature_file = Utils::expand(bfs::path ( (sv = kv.second.get_optional ("signature_file"), (sv ? sv.get () : "")) )); a->signature_file_markdown = Utils::expand(bfs::path ( (sv = kv.second.get_optional ("signature_file_markdown"), (sv ? sv.get () : "")) )); a->signature_default_on = (bv = kv.second.get_optional ("signature_default_on"), (bv ? bv.get () : false)); a->signature_attach = (bv = kv.second.get_optional ("signature_attach"), (bv ? bv.get () : false)); if (a->signature_file.string ().size ()) { /* if relative, assume relative to config dir */ if (!a->signature_file.is_absolute ()) { a->signature_file = astroid->standard_paths ().config_dir / a->signature_file; } if (bfs::exists (a->signature_file) && bfs::is_regular_file (a->signature_file)) a->has_signature = true; } if (a->signature_file_markdown.string ().size ()) { /* if relative, assume relative to config dir */ if (!a->signature_file_markdown.is_absolute ()) { a->signature_file_markdown = astroid->standard_paths ().config_dir / a->signature_file_markdown; } if (bfs::exists (a->signature_file_markdown) && bfs::is_regular_file (a->signature_file_markdown)) a->has_signature_markdown = true; // requires text signature } a->gpgkey = (sv = kv.second.get_optional ("gpgkey"), (sv ? sv.get () : "")); if (!a->gpgkey.empty()) { a->has_gpg = true; a->always_gpg_sign = (bv = kv.second.get_optional ("always_gpg_sign"), (bv ? bv.get () : false)); } a->select_query = (sv = kv.second.get_optional ("select_query"), (sv ? sv.get () : "")); LOG (info) << "ac: setup account: " << a->id << " for " << a->name << " (default: " << a->isdefault << ")"; accounts.push_back (*a); } if (accounts.size () == 0) { LOG (error) << "ac: no accounts defined!"; throw runtime_error ("ac: no account defined!"); } default_account = (find_if(accounts.begin(), accounts.end (), [&](Account &a) { return a.isdefault; }) - accounts.begin()); if (default_account >= static_cast(accounts.size())) { LOG (warn) << "ac: no default account set, using first."; default_account = 0; accounts[0].isdefault = true; } } Account * AccountManager::get_account_for_address (ustring address) { Address a = Address (address); return get_account_for_address (a); } Account * AccountManager::get_account_for_address (Address address) { for (auto &a : accounts) { if (a == address) { return &a; } } LOG (error) << "ac: error: could not figure out which account: " << address.full_address() << " belongs to."; return NULL; } AccountManager::~AccountManager () { /* LOG (info) << "ac: deinitializing."; */ } bool AccountManager::is_me (Address &a) { for (Account &ac : accounts) { if (ac == a) return true; } return false; } Account * AccountManager::get_assosciated_account (refptr msg) { /* look for any accounts involved in message */ for (Address &a : msg->all_to_from().addresses) { if (is_me (a)) { LOG (debug) << "ac: found address involved in conversation: " << a.full_address (); return get_account_for_address (a); } } /* look for account with query containing message */ if (msg->in_notmuch) { Db db; for (Account &a : accounts) { if (!a.select_query.empty ()) { if (msg->nmmsg->in_query (&db, a.select_query)) { LOG (debug) << "ac: found address matching query: " << a.full_address (); return &a; } } } } LOG (debug) << "ac: could not find associated address, using default."; /* no matching account found, use default */ return &(accounts[default_account]); } /* -------- * Account * -------- */ ustring Account::full_address () { return name + " <" + email + ">"; } bool Account::operator== (Address &a) { ustring aa = Address (name, email).email ().lowercase (); ustring bb = a.email ().lowercase (); UstringUtils::trim (aa); UstringUtils::trim (bb); return (aa == bb); } } astroid-0.14/src/account_manager.hh000066400000000000000000000024211335422170400173410ustar00rootroot00000000000000# pragma once # include # include # include "astroid.hh" # include "proto.hh" # include "utils/address.hh" namespace bfs = boost::filesystem; namespace Astroid { class Account { public: ustring id; ustring name; ustring email; ustring sendmail; bool isdefault; bool save_sent; bfs::path save_sent_to; std::vector additional_sent_tags; bfs::path save_drafts_to; bool signature_separate = false; bfs::path signature_file; bfs::path signature_file_markdown; bool signature_default_on; bool signature_attach; bool has_signature = false; bool has_signature_markdown = false; ustring select_query = ""; ustring gpgkey; bool has_gpg = false; bool always_gpg_sign = false; ustring full_address (); bool operator== (Address &a); }; class AccountManager { public: AccountManager (); ~AccountManager (); std::vector accounts; int default_account; Account * get_account_for_address (ustring); Account * get_account_for_address (Address); Account * get_assosciated_account (refptr); bool is_me (Address &); }; } astroid-0.14/src/actions/000077500000000000000000000000001335422170400153335ustar00rootroot00000000000000astroid-0.14/src/actions/action.cc000066400000000000000000000003261335422170400171200ustar00rootroot00000000000000# include # include "astroid.hh" # include "db.hh" # include "action_manager.hh" # include "action.hh" using namespace std; namespace Astroid { bool Action::undoable () { return false; } } astroid-0.14/src/actions/action.hh000066400000000000000000000015151335422170400171330ustar00rootroot00000000000000# pragma once # include # include # include "proto.hh" namespace Astroid { class Action : public Glib::Object { friend class ActionManager; public: virtual bool doit (Db *) = 0; virtual bool undo (Db *) = 0; virtual bool undoable (); virtual void emit (Db *) = 0; protected: /* used when undoing, the action_worker will undo the action * without adding it to the doneactions */ bool in_undo = false; /* has the same effect as in_undo, but allows a stanard undoable * action to be queued without keeping putting it in the undo queue */ bool skip_undo = false; /* generally actions need a read-write db */ bool need_db = true; /* only this will give ro-db */ bool need_db_rw = true; /* only this will lock db-rw */ }; } astroid-0.14/src/actions/action_manager.cc000066400000000000000000000133601335422170400206140ustar00rootroot00000000000000 # include # include # include "astroid.hh" # include "action_manager.hh" # include "action.hh" # include "db.hh" using namespace std; namespace Astroid { void ActionManager::doit (refptr action) { std::lock_guard lk (actions_m); actions.push_back (action); actions_cv.notify_one (); } void ActionManager::doit (refptr action, bool undoable) { action->skip_undo = !undoable; doit (action); } void ActionManager::action_worker () { while (run) { std::unique_lock lk (actions_m); actions_cv.wait (lk, [&] { return (!actions.empty () || !run); }); /* lock emitter now, so that it does not start opening a * read-only db while the read-write db is open */ lock_guard elk (toemit_m); while (!actions.empty ()) { refptr a = actions.front (); actions.pop_front (); /* allow new actions to be queued while waiting for db */ lk.unlock (); Db * db; std::unique_lock rw_lock; if (a->need_db) { if (a->need_db_rw) { db = new Db (Db::DbMode::DATABASE_READ_WRITE); } else { db = new Db (Db::DbMode::DATABASE_READ_ONLY); } } else { if (a->need_db_rw) { rw_lock = Db::acquire_rw_lock (); db = NULL; } else { Db::acquire_ro_lock (); db = NULL; } } lk.lock (); if (!a->in_undo) { a->doit (db); } else { a->undo (db); } if (a->need_db) { db->close (); delete db; } else { if (a->need_db_rw) { Db::release_rw_lock (rw_lock); } else { Db::release_ro_lock (); } } if (!a->in_undo && a->undoable () && !a->skip_undo) { doneactions.push_back (a); } if (emit) toemit.push (a); } lk.unlock (); emit_ready (); } } void ActionManager::undo () { LOG (info) << "actions: undo"; std::unique_lock lk (actions_m); if (!actions.empty ()) { LOG (info) << "actions: action still in queue, removing.."; /* get last action queued and remove before it is done */ refptr a = actions.back (); if (!a->in_undo && !a->skip_undo) actions.pop_back (); /* just ignore the undo if the previous undo is not finished yet */ return; } else { if (doneactions.empty ()) { LOG (debug) << "actions: no more actions to undo."; return; } LOG (info) << "actions: undoing already processed actions.."; /* get last action added and undo it */ refptr a = doneactions.back (); doneactions.pop_back (); a->in_undo = true; lk.unlock (); doit (a); // queue for undo } } void ActionManager::emitter () { /* runs on gui thread */ if (emit) { while (!toemit.empty ()) { std::unique_lock lk (toemit_m); refptr a = toemit.front (); toemit.pop (); lk.unlock (); Db db (Db::DATABASE_READ_ONLY); a->emit (&db); } } } ActionManager::ActionManager () { LOG (info) << "global actions: set up."; /* set up GUI thread dispatcher for out-of-thread * signals */ signal_refreshed_dispatcher.connect ( sigc::mem_fun (this, &ActionManager::emit_refreshed)); emit_ready.connect ( sigc::mem_fun (this, &ActionManager::emitter)); run = true; action_worker_t = std::thread (&ActionManager::action_worker, this); } void ActionManager::close () { if (!run) return; LOG (debug) << "actions: cleaning up remaining actions.."; emit = false; std::unique_lock lk (actions_m); /* action worker are now waiting after the while (run) */ run = false; lk.unlock (); actions_cv.notify_one (); action_worker_t.join (); } /* thread signals */ ActionManager::type_signal_thread_updated ActionManager::signal_thread_updated () { return m_signal_thread_updated; } void ActionManager::emit_thread_updated (Db * db, ustring thread_id) { LOG (info) << "actions: emitted updated and changed signal for thread: " << thread_id; m_signal_thread_updated.emit (db, thread_id); m_signal_thread_changed.emit (db, thread_id); } ActionManager::type_signal_thread_changed ActionManager::signal_thread_changed () { return m_signal_thread_changed; } void ActionManager::emit_thread_changed (Db * db, ustring thread_id) { LOG (info) << "actions: emitted changed signal for thread: " << thread_id; m_signal_thread_changed.emit (db, thread_id); } /* message */ ActionManager::type_signal_message_updated ActionManager::signal_message_updated () { return m_signal_message_updated; } void ActionManager::emit_message_updated (Db * db, ustring message_id) { LOG (info) << "actions: emitted updated signal for message: " << message_id; m_signal_message_updated.emit (db, message_id); db->on_message (message_id, [&] (notmuch_message_t * nm_msg) { if (nm_msg != NULL) { const char * tidc = notmuch_message_get_thread_id (nm_msg); ustring tid; if (tidc != NULL) { tid = ustring(tidc); emit_thread_changed (db, tid); } } }); } /* refreshed */ ActionManager::type_signal_refreshed ActionManager::signal_refreshed () { return m_signal_refreshed; } void ActionManager::emit_refreshed () { LOG (info) << "actions: emitted refreshed signal."; m_signal_refreshed.emit (); } } astroid-0.14/src/actions/action_manager.hh000066400000000000000000000100461335422170400206240ustar00rootroot00000000000000# pragma once # include # include # include # include # include # include # include # include "proto.hh" namespace Astroid { class ActionManager { public: ActionManager (); void doit (refptr); void doit (refptr, bool); void undo (); void close (); private: bool run = false; std::thread action_worker_t; void action_worker (); std::mutex actions_m; std::condition_variable actions_cv; std::mutex toemit_m; std::deque> doneactions; std::deque> actions; std::queue> toemit; Glib::Dispatcher emit_ready; void emitter (); /* used when closing: do not emit signals when closing */ bool emit = true; public: /* Overview of signals: * * thread-updated, thread-changed and message-updated are called as * based on user or external actions. * * Db::NotmuchMessage or Db::NotmuchThread will not be respond to these * signals, they must be updated manually be anyone keeping track of them. * * Message and MessageThread do respond to these changes and update themselves * if necessary. Message emits a message-changed signal so that any user of * open Messages can be notified _after_ the message has been updated from * the Db. In the future there might be a 'message-thread-changed' signal * emitted from MessageThread. * * MessageThread updates all its messages if a 'thread-updated' signal is * emitted, if 'thread-changed' is emitted it only updates the generic * thread properties. * * This means that the thread-index which only keeps Notmuch* objects must * updated them manually, while the thread-view which only keeps Message* * objects rely on the signals sent by the Message* objects so that it is * certain that the Message* objects have been refreshed when it gets the * signal. * */ /* thread-updated: emitted from e.g. thread-index and poll, but * not from message changes - so suitable for changes where there * is _not_ a redundant message_updated signal and all messages * _should_ also be updated */ typedef sigc::signal type_signal_thread_updated; type_signal_thread_updated signal_thread_updated (); void emit_thread_updated (Db *, ustring); /* thread-changed: more restrictive than thread-updated. emitted from * message-updated, as well as from thread-updated. so suitable for * thread-index where message-updated events are handled or not needed * and messages contained in the thread _should not_ be updated. */ typedef sigc::signal type_signal_thread_changed; type_signal_thread_changed signal_thread_changed (); void emit_thread_changed (Db *, ustring); /* message-updated signal: * * this signal is only emitted if tags or the like are changed. the * actual content should not be reloaded. the thread view relies on this * since otherwise the order and expanded parts might be changed, and a * HTML part might replace a regular part - and thus be expanded without * the user intending so. * */ typedef sigc::signal type_signal_message_updated; type_signal_message_updated signal_message_updated (); void emit_message_updated (Db *, ustring); /* refresh signal (after polling) */ typedef sigc::signal type_signal_refreshed; type_signal_refreshed signal_refreshed (); void emit_refreshed (); Glib::Dispatcher signal_refreshed_dispatcher; protected: type_signal_thread_updated m_signal_thread_updated; type_signal_thread_changed m_signal_thread_changed; type_signal_message_updated m_signal_message_updated; type_signal_refreshed m_signal_refreshed; }; } astroid-0.14/src/actions/cmdaction.cc000066400000000000000000000024011335422170400176000ustar00rootroot00000000000000# include "astroid.hh" # include "action_manager.hh" # include "cmdaction.hh" namespace Astroid { CmdAction::CmdAction (Cmd _c, ustring _tid, ustring _mid) { cmd = _c; thread_id = _tid; mid = _mid; need_db = false; need_db_rw = true; successful = false; } bool CmdAction::doit (Db *) { successful = cmd.run (); return successful; } bool CmdAction::undo (Db *) { return cmd.undo (); } bool CmdAction::undoable () { return cmd.undoable (); } void CmdAction::emit (Db * db) { /* if there is a thread_id given: we cannot know if only the thread or only * the messages has been modified in the hook. we therefore always have to * emit a full 'thread-update' signal. this _should_ cause all messages in * the thread, including the one passed as mid, to be updated. emitting a * second 'messsage-updated' is therefore redundant in these cases. */ if (successful) { if (thread_id != "") { // will also cause all messages in thread to be updated astroid->actions->emit_thread_updated (db, thread_id); return; } if (mid != "") { // will also emit thread_changed astroid->actions->emit_message_updated (db, mid); } } } } astroid-0.14/src/actions/cmdaction.hh000066400000000000000000000007121335422170400176150ustar00rootroot00000000000000# pragma once # include "action.hh" # include "utils/cmd.hh" namespace Astroid { class CmdAction : public Action { public: CmdAction (Cmd c, ustring thread_id, ustring mid); virtual bool doit (Db *) override; virtual bool undo (Db *) override; virtual bool undoable () override; virtual void emit (Db *) override; private: Cmd cmd; ustring thread_id; ustring mid; bool successful; }; } astroid-0.14/src/actions/difftag_action.cc000066400000000000000000000053141335422170400206060ustar00rootroot00000000000000# include # include # include # include "action.hh" # include "db.hh" # include "utils/vector_utils.hh" # include "tag_action.hh" # include "difftag_action.hh" using namespace std; namespace Astroid { DiffTagAction * DiffTagAction::create (vector> nmts, ustring diff_str) { LOG (debug) << "difftag: parsing: " << diff_str; if (diff_str.find_first_of (",") != ustring::npos) { LOG (error) << "difftag: ',' not allowed, use ' ' to separate tags"; return NULL; } /* parse diff_str */ vector tags = VectorUtils::split_and_trim (diff_str, " "); vector remove; vector add; for (auto &t : tags) { if (t[0] == '-') { t = t.substr (1, ustring::npos); remove.push_back (t); } else if (t[0] == '+') { t = t.substr (1, ustring::npos); add.push_back (t); } else { /* no + or - means + */ add.push_back (t); } } if (remove.empty () && add.empty ()) { LOG (debug) << "difftag: nothing to do."; return NULL; } return (new DiffTagAction (nmts, add, remove)); } DiffTagAction::DiffTagAction ( vector> nmts, vector _add, vector _rem) : TagAction(nmts) { add = _add; remove = _rem; sort (add.begin (), add.end ()); sort (remove.begin (), remove.end ()); for (auto &t : nmts) { TaggableAction ta; ta.taggable = t; /* find tags need to be removed */ set_intersection (remove.begin (), remove.end (), t->tags.begin (), t->tags.end (), std::back_inserter (ta.remove)); /* find tags that should be added */ set_difference (add.begin (), add.end (), t->tags.begin (), t->tags.end (), std::back_inserter (ta.add)); if (!ta.add.empty () || !ta.remove.empty ()) { taggable_actions.push_back (ta); } } } bool DiffTagAction::doit (Db * db) { bool res = true; for (auto &ta : taggable_actions) { for (auto &t : ta.add) { res &= ta.taggable->add_tag (db, t); } for (auto &t : ta.remove) { res &= ta.taggable->remove_tag (db, t); } } return res; } bool DiffTagAction::undo (Db * db) { bool res = true; for (auto &ta : taggable_actions) { for (auto &t : ta.add) { res &= ta.taggable->remove_tag (db, t); } for (auto &t : ta.remove) { res &= ta.taggable->add_tag (db, t); } } return res; } } astroid-0.14/src/actions/difftag_action.hh000066400000000000000000000013241335422170400206150ustar00rootroot00000000000000# pragma once # include # include "proto.hh" # include "action.hh" # include "tag_action.hh" namespace Astroid { class DiffTagAction : public TagAction { public: DiffTagAction (std::vector>, std::vector add, std::vector rem); static DiffTagAction * create (std::vector>, ustring); virtual bool doit (Db *) override; virtual bool undo (Db *) override; private: struct TaggableAction { refptr taggable; std::vector add; std::vector remove; }; std::vector taggable_actions; }; } astroid-0.14/src/actions/onmessage.cc000066400000000000000000000033601335422170400176250ustar00rootroot00000000000000# include # include # include # include "onmessage.hh" # include "db.hh" # include "action_manager.hh" # include "astroid.hh" namespace Astroid { OnMessageAction::OnMessageAction ( ustring _msg_id, ustring _tid, std::function _b) { msg_id = _msg_id; tid = _tid; block = _b; } bool OnMessageAction::doit (Db * db) { db->on_message (msg_id, std::bind (block, db, std::placeholders::_1)); return true; } bool OnMessageAction::undo (Db *) { return false; } bool OnMessageAction::undoable () { return false; } void OnMessageAction::emit (Db * db) { astroid->actions->emit_message_updated (db, msg_id); if (tid != "") astroid->actions->emit_thread_updated (db, tid); } AddDraftMessage::AddDraftMessage (ustring _f) { fname = _f; } bool AddDraftMessage::doit (Db * db) { mid = db->add_draft_message (fname); return true; } bool AddDraftMessage::undo (Db *) { return false; } bool AddDraftMessage::undoable () { return false; } void AddDraftMessage::emit (Db * db) { if (mid != "") astroid->actions->emit_message_updated (db, mid); } AddSentMessage::AddSentMessage (ustring _f, std::vector _additional_sent_tags) { fname = _f; additional_sent_tags = _additional_sent_tags; } bool AddSentMessage::doit (Db * db) { mid = db->add_sent_message (fname, additional_sent_tags); return true; } bool AddSentMessage::undo (Db *) { return false; } bool AddSentMessage::undoable () { return false; } void AddSentMessage::emit (Db * db) { if (mid != "") astroid->actions->emit_message_updated (db, mid); } } astroid-0.14/src/actions/onmessage.hh000066400000000000000000000024451335422170400176420ustar00rootroot00000000000000# pragma once # include # include # include # include "proto.hh" # include "action.hh" namespace Astroid { class OnMessageAction : public Action { public: OnMessageAction (ustring msg_id, ustring tid, std::function ); virtual bool doit (Db *) override; virtual bool undo (Db *) override; virtual bool undoable () override; virtual void emit (Db *) override; private: ustring msg_id; ustring tid; std::function block; }; class AddDraftMessage : public Action { public: AddDraftMessage (ustring fname); virtual bool doit (Db *) override; virtual bool undo (Db *) override; virtual bool undoable () override; virtual void emit (Db *) override; private: ustring fname; ustring mid; }; class AddSentMessage : public Action { public: AddSentMessage (ustring fname, std::vector additional_sent_tags); virtual bool doit (Db *) override; virtual bool undo (Db *) override; virtual bool undoable () override; virtual void emit (Db *) override; private: ustring fname; ustring mid; std::vector additional_sent_tags; }; } astroid-0.14/src/actions/tag_action.cc000066400000000000000000000027251335422170400177600ustar00rootroot00000000000000# include # include # include "action.hh" # include "db.hh" # include "tag_action.hh" using namespace std; namespace Astroid { TagAction::TagAction ( refptr nmt) { taggables.push_back (nmt); } TagAction::TagAction ( refptr nmt, vector _add, vector _remove) : add (_add), remove (_remove) { taggables.push_back (nmt); } TagAction::TagAction ( vector> nmts) : taggables (nmts) { } TagAction::TagAction ( vector> nmts, vector _add, vector _remove) : taggables(nmts), add (_add), remove (_remove) { } bool TagAction::undoable () { return true; } bool TagAction::doit (Db * db) { bool res = true; for (auto &tagged : taggables) { LOG (info) << "tag_action: " << tagged->str (); for_each (add.begin(), add.end(), [&](ustring t) { res &= tagged->add_tag (db, t); }); for_each (remove.begin(), remove.end(), [&](ustring t) { res &= tagged->remove_tag (db, t); }); } return res; } bool TagAction::undo (Db * db) { LOG (info) << "tag_action: undo."; swap (add, remove); return doit (db); } void TagAction::emit (Db * db) { for (auto &t : taggables) { t->emit_updated (db); } } } astroid-0.14/src/actions/tag_action.hh000066400000000000000000000014361335422170400177700ustar00rootroot00000000000000# pragma once # include # include "proto.hh" # include "action.hh" namespace Astroid { class TagAction : public Action { public: TagAction (refptr); TagAction ( refptr, const std::vector, const std::vector); TagAction (std::vector>); TagAction ( std::vector>, const std::vector, const std::vector); std::vector> taggables; std::vector add; std::vector remove; virtual bool doit (Db *) override; virtual bool undo (Db *) override; virtual bool undoable () override; virtual void emit (Db *) override; }; } astroid-0.14/src/actions/toggle_action.cc000066400000000000000000000031351335422170400204620ustar00rootroot00000000000000# include # include # include # include "action.hh" # include "db.hh" # include "tag_action.hh" # include "toggle_action.hh" using namespace std; namespace Astroid { ToggleAction::ToggleAction (refptr nmt, ustring _toggle_tag) : TagAction(nmt) { toggle_tag = _toggle_tag; } ToggleAction::ToggleAction (vector> nmts, ustring _toggle_tag) : TagAction(nmts) { toggle_tag = _toggle_tag; } bool ToggleAction::doit (Db * db) { bool res = true; for (auto &tagged : taggables) { LOG (debug) << "toggle_action: " << tagged->str (); if (find (tagged->tags.begin(), tagged->tags.end(), toggle_tag) != tagged->tags.end ()) { remove.push_back (toggle_tag); } else { add.push_back (toggle_tag); } for_each (add.begin(), add.end(), [&](ustring t) { res &= tagged->add_tag (db, t); }); for_each (remove.begin(), remove.end(), [&](ustring t) { res &= tagged->remove_tag (db, t); }); remove.clear (); add.clear (); } return res; } SpamAction::SpamAction (refptr nmt) : ToggleAction (nmt, "spam") { } SpamAction::SpamAction (vector> nmts) : ToggleAction (nmts, "spam") { } MuteAction::MuteAction (refptr nmt) : ToggleAction (nmt, "muted") { } MuteAction::MuteAction (vector> nmts) : ToggleAction (nmts, "muted") { } } astroid-0.14/src/actions/toggle_action.hh000066400000000000000000000013621335422170400204740ustar00rootroot00000000000000# pragma once # include # include "proto.hh" # include "action.hh" namespace Astroid { class ToggleAction : public TagAction { public: ToggleAction (refptr, ustring); ToggleAction (std::vector>, ustring); ustring toggle_tag; /* for toggleaction undo == doit, which works with * how it is defined in tagaction. */ virtual bool doit (Db *) override; }; class SpamAction : public ToggleAction { public: SpamAction (refptr); SpamAction (std::vector>); }; class MuteAction : public ToggleAction { public: MuteAction (refptr); MuteAction (std::vector>); }; } astroid-0.14/src/astroid.cc000066400000000000000000000371521335422170400156570ustar00rootroot00000000000000# include # include # include # include # include # include /* program options */ # include # include /* log */ # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include "astroid.hh" # include "build_config.hh" # include "db.hh" # include "config.hh" # include "account_manager.hh" # include "actions/action_manager.hh" # include "actions/action.hh" # include "utils/date_utils.hh" # include "utils/utils.hh" # include "utils/resource.hh" # ifndef DISABLE_PLUGINS # include "plugin/manager.hh" # endif # include "poll.hh" /* UI */ # include "main_window.hh" # include "modes/thread_index/thread_index.hh" # include "modes/edit_message.hh" # include "modes/saved_searches.hh" /* gmime */ # include # include using namespace std; using namespace boost::filesystem; namespace logging = boost::log; namespace keywords = boost::log::keywords; namespace expr = boost::log::expressions; /* globally available static instance of the Astroid */ refptr Astroid::astroid; const char* const Astroid::Astroid::version = GIT_DESC; namespace Astroid { // Initialization and creation {{{ refptr Astroid::create () { return refptr (new Astroid ()); } void Astroid::init_console_log () { /* log to console */ logging::formatter format = expr::stream << "[" << expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%H:%M:%S") << "] [" << expr::attr ("ThreadID") << "] [M] [" << logging::trivial::severity << "] " << expr::smessage ; logging::add_console_log ()->set_formatter (format); } void Astroid::init_sys_log () { typedef logging::sinks::synchronous_sink< logging::sinks::syslog_backend > sink_t; // Create a backend boost::shared_ptr< logging::sinks::syslog_backend > backend(new logging::sinks::syslog_backend( keywords::facility = logging::sinks::syslog::user, keywords::use_impl = logging::sinks::syslog::native, keywords::ident = log_ident )); // Set the straightforward level translator for the "Severity" attribute of type int backend->set_severity_mapper( logging::sinks::syslog::direct_severity_mapping< int >("Severity")); // Wrap it into the frontend and register in the core. // The backend requires synchronization in the frontend. logging::core::get()->add_sink(boost::make_shared< sink_t >(backend)); } Astroid::Astroid () : Gtk::Application("org.astroid", Gio::APPLICATION_HANDLES_OPEN | Gio::APPLICATION_HANDLES_COMMAND_LINE) { setlocale (LC_ALL, ""); Glib::init (); /* user agent */ user_agent = ustring::compose ("astroid/%1 (https://github.com/astroidmail/astroid)", Astroid::version); /* gmime settings */ g_mime_init (); /* options */ desc.add_options () ( "help,h", "print this help message") ( "config,c", po::value(), "config file, default: $XDG_CONFIG_HOME/astroid/config") ( "new-config,n", "make new default config, then exit") # ifdef DEBUG ( "test-config,t", "use test config (same as used when tests are run), only makes sense from the source root") # endif ( "mailto,m", po::value(), "compose mail with mailto url or address") ( "no-auto-poll", "do not poll automatically") ( "disable-log", "disable logging") ( "log-stdout", "log to stdout regardless of configuration") ( "log-level", po::value(), "override configured logging level (trace, debug, info, warning, error, fatal)") ( "start-polling", "indicate that external polling (external notmuch db R/W operations) starts") ( "stop-polling", "indicate that external polling stops") ( "refresh", po::value(), "refresh messages changed since lastmod") # ifndef DISABLE_PLUGINS ( "disable-plugins", "disable plugins"); # else ; # endif } // }}} int Astroid::run (int argc, char **argv) { // {{{ LOG (info) << "welcome to astroid! - " << Astroid::version; register_application (); Resource::init (argv[0]); po::variables_map vm; bool show_help = false; try { po::store ( po::parse_command_line (argc, argv, desc), vm ); } catch (po::unknown_option &ex) { LOG (error) << "unknown option" << endl; LOG (error) << ex.what() << endl; show_help = true; } show_help |= vm.count("help"); bool test_config = vm.count("test-config"); if (show_help) { cout << desc << endl; exit (0); } logging::add_common_attributes (); if (vm.count ("log-stdout")) { log_stdout = true; init_console_log (); } if (vm.count ("disable-log")) { logging::core::get()->set_logging_enabled (false); disable_log = true; } /* make new config {{{ */ if (vm.count("new-config")) { if (test_config) { LOG (error) << "--new-config cannot be specified together with --test-config."; exit (1); } LOG (info) << "creating new config.."; ustring cnf; Config ncnf (false, true); if (vm.count("config")) { cnf = vm["config"].as().c_str(); if (exists (path(cnf))) { LOG (error) << "the config file: " << cnf << " already exists."; exit (1); } ncnf.std_paths.config_file = path(cnf); } else { /* use default */ if (exists(ncnf.std_paths.config_file)) { LOG (error) << "the config file: " << ncnf.std_paths.config_file.c_str() << " already exists."; exit (1); } } LOG (info) << "writing default config to: " << ncnf.std_paths.config_file.c_str(); ncnf.load_config (true); ncnf.write_back_config (); exit (0); } // }}} if (!is_remote ()) { /* load config */ if (vm.count("config")) { if (test_config) { LOG (error) << "--config cannot be specified together with --test-config."; exit (1); } LOG (info) << "astroid: loading config: " << vm["config"].as().c_str(); m_config = new Config (vm["config"].as().c_str()); } else { if (test_config) { m_config = new Config (true); } else { m_config = new Config (); } } /* setting up loggers */ if (config ("astroid.log").get("stdout") && !vm.count ("log-stdout")) { init_console_log (); log_stdout = true; LOG (debug) << "log: stdout: yes"; } if (config ("astroid.log").get ("syslog")) { init_sys_log (); log_syslog = true; LOG (debug) << "log: syslog: yes"; } if (vm.count ("log-level")) { log_level = vm["log-level"].as (); } else { log_level = config ("astroid.log").get ("level"); } /* Non existing llevel in map will be silently ignored */ logging::core::get()->set_filter (logging::trivial::severity >= sevmap[log_level]); string charset; Glib::get_charset(charset); LOG (debug) << "utf8: " << Glib::get_charset () << ", " << charset; LOG (info) << "log: level: " << log_level; if (!Glib::get_charset()) { LOG (error) << "astroid needs an UTF-8 locale! this is probably not going to work."; } if (vm.count("start-polling") || vm.count("stop-polling") || vm.count ("refresh")) { LOG (error) << "--start-polling, --stop-polling or --refresh can only be specifed when there is already a running astroid instance."; exit (1); } _hint_level = config ("astroid.hints").get ("level"); /* set up classes */ Date::init (); Utils::init (); /* Initialize Db and check if it has been set up */ try { Db::init (); Db d; d.get_revision (); } catch (database_error &ex) { LOG (error) << "db: failed to open database, please check the manual if everything is set up correctly: " << ex.what (); Gtk::MessageDialog md ("Astroid: Failed to open database", false, Gtk::MESSAGE_ERROR); md.set_secondary_text (ustring::compose ("Please check the documentation if you have set up astroid and notmuch correctly.\n Error: %1", ex.what ()), true); md.run (); on_quit (); return 1; } Keybindings::init (); SavedSearches::init (); /* set up accounts */ accounts = new AccountManager (); # ifndef DISABLE_PLUGINS /* set up plugins */ bool disable_plugins = vm.count ("disable-plugins"); plugin_manager = new PluginManager (disable_plugins, in_test ()); plugin_manager->astroid_extension = new PluginManager::AstroidExtension (this); # endif /* set up global actions */ actions = new ActionManager (); /* set up poller */ bool no_auto_poll = false; if (vm.count ("no-auto-poll")) { LOG (info) << "astroid: automatic polling is off."; no_auto_poll = true; } poll = new Poll (!no_auto_poll); Gtk::Application::run (argc, argv); on_quit (); } else { Gtk::Application::run (argc, argv); } return 0; } // }}} const boost::property_tree::ptree& Astroid::config (const std::string& id) const { return m_config->config.get_child(id); } const boost::property_tree::ptree& Astroid::notmuch_config () const { return m_config->notmuch_config; } const StandardPaths& Astroid::standard_paths() const { return m_config->std_paths; } RuntimePaths& Astroid::runtime_paths() const { return m_config->run_paths; } bool Astroid::has_notmuch_config () { return m_config->has_notmuch_config; } void Astroid::main_test () { // {{{ init_console_log (); m_config = new Config (true); /* set up static classes */ Date::init (); Utils::init (); Db::init (); SavedSearches::init (); /* set up accounts */ accounts = new AccountManager (); # ifndef DISABLE_PLUGINS /* set up plugins */ plugin_manager = new PluginManager (false, true); plugin_manager->astroid_extension = new PluginManager::AstroidExtension (this); # endif /* set up contacts */ //contacts = new Contacts (); /* set up global actions */ actions = new ActionManager (); /* set up poller */ poll = new Poll (false); } // }}} bool Astroid::in_test () { return m_config->test; } void Astroid::on_quit () { LOG (debug) << "astroid: quitting.."; if (poll && poll->get_auto_poll ()) poll->toggle_auto_poll (); if (poll) poll->close (); if (actions) actions->close (); SavedSearches::destruct (); # ifndef DISABLE_PLUGINS if (plugin_manager && plugin_manager->astroid_extension) delete plugin_manager->astroid_extension; if (plugin_manager) delete plugin_manager; # endif LOG (info) << "astroid: goodbye!"; } Astroid::~Astroid () { if (accounts) delete accounts; if (m_config) delete m_config; if (poll) { poll->close (); delete poll; } if (actions) { actions->close (); delete actions; } } int Astroid::on_command_line (const refptr & cmd) { char ** argv; int argc; bool new_window = true; argv = cmd->get_arguments (argc); if (get_windows().empty ()) { activate (); new_window = false; } /* handling command line arguments that may be passed from secondary * instances as well */ if (argc > 0) { po::variables_map vm; try { po::store ( po::parse_command_line (argc, argv, desc), vm ); } catch (po::unknown_option &ex) { LOG (error) << "unknown option" << endl; LOG (error) << ex.what() << endl; return 1; } if (vm.count("mailto")) { ustring mailtourl = vm["mailto"].as(); send_mailto (mailtourl); new_window = false; } if ((vm.count ("start-polling") ? 1:0) + (vm.count ("stop-polling") ? 1:0) + (vm.count("refresh") ? 1:0) > 1) { LOG (error) << "only one of --start-polling, --stop-polling and --refresh should be specified"; return 1; } if (vm.count ("start-polling")) { poll->start_polling (); new_window = false; } else if (vm.count ("stop-polling")) { poll->stop_polling (); new_window = false; } else if (vm.count ("refresh")) { unsigned long last = vm["refresh"].as (); poll->refresh ( last ); new_window = false; } } if (new_window) activate (); return 0; } MainWindow * Astroid::open_new_window (bool open_defaults) { LOG (warn) << "astroid: starting a new window.."; /* set up a new main window */ /* start up default window with default buffers */ MainWindow * mw = new MainWindow (); // is freed / destroyed by application if (open_defaults) { if (config ("saved_searches").get("show_on_startup")) { Mode * s = (Mode *) new SavedSearches (mw); s->invincible = true; mw->add_mode (s); } ptree qpt = config ("startup.queries"); for (const auto &kv : qpt) { ustring name = kv.first; ustring query = kv.second.data(); LOG (info) << "got query: " << name << ": " << query; Mode * ti = new ThreadIndex (mw, query, name); ti->invincible = true; // set startup queries to be invincible mw->add_mode (ti); } mw->set_active (0); } mw->signal_delete_event ().connect ( sigc::bind ( sigc::mem_fun(*this, &Astroid::on_window_close), mw)); add_window (*mw); mw->show_all (); return mw; } bool Astroid::on_window_close (GdkEventAny *, MainWindow * mw) { // application automatically removes window // https://mail.gnome.org/archives/gtkmm-list/2004-March/msg00282.html delete mw; return false; // default Gtk handler destroys window } void Astroid::on_activate () { open_new_window (); } void Astroid::send_mailto (ustring url) { LOG (info) << "astroid: mailto: " << url; MainWindow * mw = (MainWindow*) get_windows ()[0]; ustring scheme = Glib::uri_parse_scheme (url); if (scheme.length () > 0) { /* we got an mailto url */ url = url.substr(scheme.length(), url.length () - scheme.length()); ustring to, cc, bcc, subject, body; ustring::size_type pos = url.find ("?"); /* ustring::size_type next; */ if (pos == ustring::npos) pos = url.length (); to = url.substr (0, pos); /* TODO: need to finish the rest of the fields */ mw->add_mode (new EditMessage (mw, to)); } else { /* we probably just got the address on the cmd line */ mw->add_mode (new EditMessage (mw, url)); } } int Astroid::hint_level () { return _hint_level; } } astroid-0.14/src/astroid.hh000066400000000000000000000053571335422170400156730ustar00rootroot00000000000000# pragma once # include # include # include # include # include # include # include # define LOG(x) BOOST_LOG_TRIVIAL(x) # define warn warning # include # include # include # include "proto.hh" namespace po = boost::program_options; namespace logging = boost::log; namespace Astroid { class Astroid : public Gtk::Application { public: Astroid (); ~Astroid (); static refptr create (); int run (int, char**); void main_test (); void init_console_log (); void init_sys_log (); bool log_stdout = true; bool log_syslog = false; bool disable_log = false; ustring log_level = "debug"; std::map sevmap = { std::pair("trace" , logging::trivial::trace), std::pair("debug" , logging::trivial::debug), std::pair("info" , logging::trivial::info), std::pair("warning", logging::trivial::warning), std::pair("error" , logging::trivial::error), std::pair("fatal" , logging::trivial::fatal), }; const std::string log_ident = "astroid.main"; const boost::property_tree::ptree& config (const std::string& path=std::string()) const; const boost::property_tree::ptree& notmuch_config () const; const StandardPaths& standard_paths() const; RuntimePaths& runtime_paths() const; bool has_notmuch_config (); bool in_test (); static const char* const version; ustring user_agent; /* accounts */ AccountManager * accounts; /* actions */ ActionManager * actions; # ifndef DISABLE_PLUGINS PluginManager * plugin_manager; # endif /* poll */ Poll * poll; MainWindow * open_new_window (bool open_defaults = true); int hint_level (); GdkAtom clipboard_target = GDK_SELECTION_CLIPBOARD; protected: Config * m_config; private: void on_activate () override; bool on_window_close (GdkEventAny *, MainWindow * mw); int on_command_line (const refptr &) override; void on_quit (); void send_mailto (ustring); int _hint_level = 0; po::options_description desc; }; /* globally available instance of our main Astroid-class */ extern refptr astroid; } astroid-0.14/src/build_config.hh.in000066400000000000000000000001111335422170400172360ustar00rootroot00000000000000# pragma once # define GIT_DESC "@GIT_DESC@" # define PREFIX "@PREFIX@" astroid-0.14/src/chunk.cc000066400000000000000000000503331335422170400153160ustar00rootroot00000000000000# include # include # include # include # include # include # include # include "utils/gmime/gmime-compat.h" # include "utils/gmime/gmime-filter-html-bq.h" # include "astroid.hh" # include "message_thread.hh" # include "chunk.hh" # include "utils/utils.hh" # include "utils/ustring_utils.hh" # include "utils/vector_utils.hh" # include "config.hh" # include "crypto.hh" namespace Astroid { std::atomic Chunk::nextid (0); Chunk::Chunk (GMimeObject * mp, bool encrypted, bool _signed, refptr _cr) : mime_object (mp) { id = nextid++; isencrypted = encrypted; issigned = _signed; crypt = _cr; ustring pts = astroid->config().get("thread_view.preferred_type"); if (pts != "plain" && pts != "html") { LOG (error) << "chunk: preferred type not 'html' or 'plain', setting to 'plain'."; pts = "plain"; } preferred_type = viewable_types[pts]; if (mp == NULL) { LOG (error) << "chunk (" << id << "): got NULL mime_object."; viewable = true; attachment = false; } else { g_object_ref (mime_object); } content_type = g_mime_object_get_content_type (mime_object); if (content_type) { LOG (debug) << "chunk (" << id << "): content-type: " << g_mime_content_type_get_mime_type (content_type); } else { LOG (warn) << "chunk (" << id << "): content-type not specified, could be mime-message."; } if (GMIME_IS_PART (mime_object)) { // has no sub-parts std::string disposition = g_mime_object_get_disposition(mime_object) ? : std::string(); viewable = !(disposition == "attachment"); const char * cid = g_mime_part_get_content_id ((GMimePart *) mime_object); if (cid != NULL) { content_id = ustring(cid); LOG (debug) << "chunk: part, id: " << content_id; } if (content_type != NULL) { if (viewable) { /* check if we can show this type */ viewable = false; for (auto &m : viewable_types) { if (g_mime_content_type_is_type (content_type, g_mime_content_type_get_media_type (m.second), g_mime_content_type_get_media_subtype (m.second))) { viewable = true; break; } } } } else { viewable = false; } attachment = !viewable; if (g_mime_content_type_is_type (content_type, g_mime_content_type_get_media_type (preferred_type), g_mime_content_type_get_media_subtype (preferred_type))) { LOG (debug) << "chunk: preferred."; preferred = true; } LOG (debug) << "chunk: is part (viewable: " << viewable << ", attachment: " << attachment << ") "; /* TODO: check for inline PGP encryption, though it may be unsafe: * https://dkg.fifthhorseman.net/notes/inline-pgp-harmful/ * * One way to do this is by converting the inline PGP to PGP/MIME: * * Fetch the encrypted part out of the message, make a multipart and * add the parts of the inline message there, making the encrypted part * a multipartencrypted. Then add this multipart as child, and make this * part unviwable and not attachment. * * That should preserve the information about what parts are encrypted, * and which are not. * */ } else if GMIME_IS_MESSAGE_PART (mime_object) { LOG (debug) << "chunk: message part"; /* contains a GMimeMessage with a potential substructure */ GMimeMessage * msg = g_mime_message_part_get_message ((GMimeMessagePart *) mime_object); kids.push_back (refptr(new Chunk((GMimeObject *) msg))); } else if GMIME_IS_MESSAGE_PARTIAL (mime_object) { LOG (debug) << "chunk: partial"; GMimeMessage * msg = g_mime_message_partial_reconstruct_message ( (GMimeMessagePartial **) &mime_object, g_mime_message_partial_get_total ((GMimeMessagePartial *) mime_object) ); kids.push_back (refptr(new Chunk((GMimeObject *) msg))); } else if GMIME_IS_MULTIPART (mime_object) { LOG (debug) << "chunk: multi part"; int total = g_mime_multipart_get_count ((GMimeMultipart *) mime_object); if (GMIME_IS_MULTIPART_ENCRYPTED (mime_object) || GMIME_IS_MULTIPART_SIGNED (mime_object)) { /* inline PGP is handled in GMIME_IS_PART () above */ ustring protocol = ""; const char * _protocol = g_mime_content_type_get_parameter (content_type, "protocol"); if (_protocol != NULL) protocol = _protocol; crypt = refptr (new Crypto (protocol)); if (!crypt->ready) { LOG (error) << "chunk: no crypto ready."; } } if (GMIME_IS_MULTIPART_ENCRYPTED (mime_object) && crypt->ready) { LOG (warn) << "chunk: is encrypted."; isencrypted = true; if (total != 2) { LOG (error) << "chunk: encrypted message with not exactly 2 parts."; return; } GMimeObject * k = crypt->decrypt_and_verify (mime_object); if (k != NULL) { auto c = refptr(new Chunk(k, true, crypt->verify_tried, crypt)); kids.push_back (c); } else { /* will be displayed as failed decrypted part */ viewable = true; preferred = true; } } else if (GMIME_IS_MULTIPART_SIGNED (mime_object) && crypt->ready) { LOG (warn) << "chunk: is signed."; issigned = true; /* only show first part */ GMimeObject * mo = g_mime_multipart_get_part ( (GMimeMultipart *) mime_object, 0); crypt->verify_signature (mime_object); auto c = refptr(new Chunk(mo, false, true, crypt)); kids.push_back (c); } else { bool alternative = (g_mime_content_type_is_type (content_type, "multipart", "alternative")); LOG (debug) << "chunk: alternative: " << alternative; for (int i = 0; i < total; i++) { GMimeObject * mo = g_mime_multipart_get_part ( (GMimeMultipart *) mime_object, i); auto c = refptr(new Chunk(mo, isencrypted, issigned, crypt)); kids.push_back (c); } if (alternative) { for_each ( kids.begin(), kids.end(), [&] (refptr c) { for_each ( kids.begin(), kids.end(), [&] (refptr cc) { if (c != cc) { LOG (debug) << "chunk: multipart: added sibling"; c->siblings.push_back (cc); } } ); if (g_mime_content_type_is_type (c->content_type, g_mime_content_type_get_media_type (preferred_type), g_mime_content_type_get_media_subtype (preferred_type))) { LOG (debug) << "chunk: multipart: preferred."; c->preferred = true; } } ); } } LOG (debug) << "chunk: multi part end"; } else if GMIME_IS_MESSAGE (mime_object) { LOG (debug) << "chunk: mime message"; mime_message = true; } } ustring Chunk::viewable_text (bool html = true, bool verbose) { if (isencrypted && !crypt->decrypted) { if (verbose) { /* replace newlines */ ustring err = UstringUtils::replace (crypt->decrypt_error, "\n", "
"); return "Failed decryption:

"; } else { return ""; // for reply } } GMimeStream * content_stream = NULL; if (mime_object != NULL && GMIME_IS_PART(mime_object)) { LOG (debug) << "chunk: body: part"; if (g_mime_content_type_is_type (content_type, "text", "plain")) { LOG (debug) << "chunk: plain text (out html: " << html << ")"; GMimeDataWrapper * content = g_mime_part_get_content ( (GMimePart *) mime_object); const char * charset = g_mime_object_get_content_type_parameter(GMIME_OBJECT(mime_object), "charset"); GMimeStream * stream = g_mime_data_wrapper_get_stream (content); GMimeStream * filter_stream = g_mime_stream_filter_new (stream); /* convert to html */ guint32 cite_color = 0x1e1e1e; /* other filters: * * GMIME_FILTER_HTML_PRE || */ guint32 html_filter_flags = GMIME_FILTER_HTML_CONVERT_NL | GMIME_FILTER_HTML_CONVERT_SPACES | GMIME_FILTER_HTML_CONVERT_URLS | GMIME_FILTER_HTML_CONVERT_ADDRESSES | GMIME_FILTER_HTML_BQ_BLOCKQUOTE_CITATION ; /* convert encoding */ GMimeContentEncoding enc = g_mime_data_wrapper_get_encoding (content); if (enc) { LOG (debug) << "enc: " << g_mime_content_encoding_to_string(enc); } GMimeFilter * filter = g_mime_filter_basic_new(enc, false); g_mime_stream_filter_add(GMIME_STREAM_FILTER(filter_stream), filter); g_object_unref(filter); if (charset) { LOG (debug) << "charset: " << charset; if (std::string(charset) == "utf-8") { charset = "UTF-8"; } GMimeFilter * filter = g_mime_filter_charset_new(charset, "UTF-8"); g_mime_stream_filter_add(GMIME_STREAM_FILTER(filter_stream), filter); g_object_unref(filter); } else { LOG (warn) << "charset: not defined."; } if (html) { GMimeFilter * html_filter; html_filter = g_mime_filter_html_bq_new (html_filter_flags, cite_color); g_mime_stream_filter_add (GMIME_STREAM_FILTER(filter_stream), html_filter); g_object_unref (html_filter); } else { /* CRLF to LF */ GMimeFilter * crlf_filter = g_mime_filter_dos2unix_new (false); g_mime_stream_filter_add (GMIME_STREAM_FILTER (filter_stream), crlf_filter); g_object_unref (crlf_filter); } g_mime_stream_reset (stream); content_stream = filter_stream; } else if (g_mime_content_type_is_type (content_type, "text", "html")) { LOG (debug) << "chunk: html text"; GMimeDataWrapper * content = g_mime_part_get_content ( (GMimePart *) mime_object); const char * charset = g_mime_object_get_content_type_parameter(GMIME_OBJECT(mime_object), "charset"); GMimeStream * stream = g_mime_data_wrapper_get_stream (content); GMimeStream * filter_stream = g_mime_stream_filter_new (stream); /* convert encoding */ GMimeContentEncoding enc = g_mime_data_wrapper_get_encoding (content); if (enc) { LOG (debug) << "enc: " << g_mime_content_encoding_to_string(enc); } GMimeFilter * filter = g_mime_filter_basic_new(enc, false); g_mime_stream_filter_add(GMIME_STREAM_FILTER(filter_stream), filter); g_object_unref(filter); if (charset) { LOG (debug) << "charset: " << charset; if (std::string(charset) == "utf-8") { charset = "UTF-8"; } GMimeFilter * filter = g_mime_filter_charset_new(charset, "UTF-8"); g_mime_stream_filter_add(GMIME_STREAM_FILTER(filter_stream), filter); g_object_unref(filter); } else { LOG (warn) << "charset: not defined"; } g_mime_stream_reset (stream); content_stream = filter_stream; } } if (content_stream != NULL) { char buffer[4097]; ssize_t prevn = 1; ssize_t n; std::stringstream sstr; while ((n = g_mime_stream_read (content_stream, buffer, 4096), n) >= 0) { buffer[n] = 0; sstr << buffer; if (n == 0 && prevn == 0) { break; } prevn = n; } g_object_unref (content_stream); ustring b; try { b = sstr.str(); } catch (Glib::ConvertError &ex) { LOG (error) << "could not convert chunk to utf-8, contents: " << sstr.str(); throw ex; } return b; } else { return ustring ("Error: Non-viewable part!"); LOG (error) << "chunk: tried to display non-viewable part."; //throw runtime_error ("chunk: tried to display non-viewable part."); } } ustring Chunk::get_filename () { if (_fname.size () > 0) { return _fname; } if (GMIME_IS_PART (mime_object)) { const char * s = g_mime_part_get_filename (GMIME_PART(mime_object)); if (s != NULL) { ustring fname (s); _fname = fname; return fname; } } else if (GMIME_IS_MESSAGE (mime_object)) { const char * s = g_mime_message_get_subject (GMIME_MESSAGE (mime_object)); if (s != NULL) { ustring fname (s); _fname = fname + ".eml"; return fname; } } // no filename specified return ustring (""); } size_t Chunk::get_file_size () { time_t t0 = clock (); // https://github.com/skx/lumail/blob/master/util/attachments.c refptr cnt = contents (); size_t sz = cnt->size (); LOG (info) << "chunk: file size: " << sz << " (time used to calculate: " << ( (clock () - t0) * 1000.0 / CLOCKS_PER_SEC ) << " s.)"; return sz; } refptr Chunk::contents () { time_t t0 = clock (); // https://github.com/skx/lumail/blob/master/util/attachments.c GMimeStream * mem = g_mime_stream_mem_new (); if (GMIME_IS_PART (mime_object)) { GMimeDataWrapper * content = g_mime_part_get_content (GMIME_PART (mime_object)); g_mime_data_wrapper_write_to_stream (content, mem); } else { g_mime_object_write_to_stream (mime_object, NULL, mem); g_mime_stream_flush (mem); } GByteArray * res = g_mime_stream_mem_get_byte_array (GMIME_STREAM_MEM (mem)); auto data = Glib::ByteArray::create (); if (res != NULL) { data->append (res->data, res->len); } g_object_unref (mem); LOG (info) << "chunk: contents: loaded " << data->size () << " bytes in " << ( (clock () - t0) * 1000.0 / CLOCKS_PER_SEC ) << " ms."; return data; } bool Chunk::save_to (std::string filename, bool overwrite) { /* saves chunk to file name, if filename is dir, own name */ using bfs::path; path to (filename.c_str()); if (is_directory (to)) { ustring fname = Utils::safe_fname (get_filename ()); if (fname.size () == 0) { if (content_id != "") { fname = ustring::compose ("astroid-attachment-%1", content_id); } else { /* make up a name */ path new_to; do { fname = ustring::compose ("astroid-attachment-%1", UstringUtils::random_alphanumeric (5)); new_to = to / path(fname.c_str ()); } while (exists (new_to)); } } to /= path (fname.c_str ()); } LOG (info) << "chunk: saving to: " << to; if (exists (to)) { if (!overwrite) { LOG (error) << "chunk: save: file already exists! not writing."; return false; } else { LOG (warn) << "chunk: save: file already exists: overwriting."; } } if (!exists(to.parent_path ()) || !is_directory (to.parent_path())) { LOG (error) << "chunk: save: parent path does not exist or is not a directory."; return false; } std::ofstream f (to.c_str (), std::ofstream::binary); auto data = contents (); f.write (reinterpret_cast(data->get_data ()), data->size ()); f.close (); return true; } refptr Chunk::get_by_id (int _id, bool check_siblings) { if (check_siblings) { for (auto c : siblings) { if (c->id == _id) { return c; } else { auto kc = c->get_by_id (_id, false); if (kc) return kc; } } } for (auto c : kids) { if (c->id == _id) { return c; } else { auto kc = c->get_by_id (_id, true); if (kc) return kc; } } return refptr(); } void Chunk::open () { using bfs::path; LOG (info) << "chunk: " << get_filename () << ", opening.."; path tf = astroid->standard_paths().cache_dir; ustring tmp_fname = ustring::compose("%1-%2", UstringUtils::random_alphanumeric (10), Utils::safe_fname(get_filename ())); tf /= path (tmp_fname.c_str()); LOG (debug) << "chunk: saving to tmp path: " << tf.c_str(); save_to (tf.c_str()); ustring tf_p (tf.c_str()); Glib::Threads::Thread::create ( sigc::bind ( sigc::mem_fun (this, &Chunk::do_open), tf_p )); } void Chunk::do_open (ustring tf) { ustring external_cmd = astroid->config().get ("attachment.external_open_cmd"); std::vector args = { external_cmd.c_str(), tf.c_str () }; LOG (debug) << "chunk: spawning: " << args[0] << ", " << args[1]; std::string stdout; std::string stderr; int exitcode; try { Glib::spawn_sync ("", args, Glib::SPAWN_DEFAULT | Glib::SPAWN_SEARCH_PATH, sigc::slot (), &stdout, &stderr, &exitcode ); } catch (Glib::SpawnError &ex) { LOG (error) << "chunk: exception while opening attachment: " << ex.what (); LOG (info) << "chunk: deleting tmp file: " << tf; unlink (tf.c_str()); } ustring ustdout = ustring(stdout); for (ustring &l : VectorUtils::split_and_trim (ustdout, ustring("\n"))) { LOG (debug) << l; } ustring ustderr = ustring(stderr); for (ustring &l : VectorUtils::split_and_trim (ustderr, ustring("\n"))) { LOG (debug) << l; } if (exitcode != 0) { LOG (error) << "chunk: chunk script exited with code: " << exitcode; } LOG (info) << "chunk: deleting tmp file: " << tf; unlink (tf.c_str()); } bool Chunk::any_kids_viewable () { if (viewable) return true; for (auto &k : kids) { if (k->any_kids_viewable ()) return true; } return false; } bool Chunk::any_kids_viewable_and_preferred () { if (viewable && preferred) return true; for (auto &k : kids) { if (k->any_kids_viewable_and_preferred ()) return true; } return false; } ustring Chunk::get_content_type () { if (content_type == NULL) return ""; else return ustring (g_mime_content_type_get_mime_type (content_type)); } void Chunk::save () { LOG (info) << "chunk: " << get_filename () << ", saving.."; Gtk::FileChooserDialog dialog ("Save attachment to folder..", Gtk::FILE_CHOOSER_ACTION_SAVE); dialog.add_button ("_Cancel", Gtk::RESPONSE_CANCEL); dialog.add_button ("_Select", Gtk::RESPONSE_OK); dialog.set_do_overwrite_confirmation (true); dialog.set_current_name (Utils::safe_fname (get_filename ())); dialog.set_current_folder (astroid->runtime_paths ().save_dir.c_str ()); int result = dialog.run (); switch (result) { case (Gtk::RESPONSE_OK): { std::string fname = dialog.get_filename (); LOG (info) << "chunk: saving attachment to: " << fname; /* the dialog asks whether to overwrite or not */ save_to (fname, true); astroid->runtime_paths ().save_dir = bfs::path (dialog.get_current_folder ()); break; } default: { LOG (debug) << "chunk: save: cancelled."; } } } refptr Chunk::get_mime_message () { if (!mime_message) { LOG (error) << "chunk: this is not a mime message."; throw std::runtime_error ("chunk: not a mime message"); } refptr m = refptr ( new Message (GMIME_MESSAGE(mime_object)) ); return m; } Chunk::~Chunk () { LOG (debug) << "chunk: deconstruct."; // these should not be unreffed. if (mime_object) g_object_unref (mime_object); // g_object_unref (content_type); } } astroid-0.14/src/chunk.hh000066400000000000000000000034011335422170400153220ustar00rootroot00000000000000# pragma once # include # include # include # include # include # include "astroid.hh" # include "crypto.hh" # include "proto.hh" namespace Astroid { class Chunk : public Glib::Object { friend Crypto; protected: static std::atomic nextid; public: Chunk (GMimeObject *, bool encrypted = false, bool _signed = false, refptr _cr = refptr ()); ~Chunk (); int id; /* Chunk assumes ownership of these */ GMimeObject * mime_object = NULL; GMimeContentType * content_type; ustring content_id; ustring get_content_type (); ustring viewable_text (bool, bool verbose = false); std::vector> kids; std::vector> siblings; refptr get_by_id (int, bool check_siblings = true); bool any_kids_viewable (); bool any_kids_viewable_and_preferred (); bool viewable = false; bool attachment = false; bool preferred = false; bool mime_message = false; bool isencrypted = false; bool issigned = false; refptr get_mime_message (); std::map viewable_types = { { "plain", g_mime_content_type_new ("text", "plain") }, { "html" , g_mime_content_type_new ("text", "html") } }; GMimeContentType * preferred_type; refptr crypt; /* attachment specific stuff */ ustring get_filename (); size_t get_file_size (); refptr contents (); bool save_to (std::string filename, bool overwrite = false); void open (); void save (); private: ustring _fname; void do_open (ustring); }; } astroid-0.14/src/command_bar.cc000066400000000000000000000513251335422170400164520ustar00rootroot00000000000000# include # include # include # include # include # include "command_bar.hh" # include "astroid.hh" # include "main_window.hh" # include "modes/mode.hh" # include "modes/thread_index/thread_index.hh" # include "modes/help_mode.hh" # include "modes/saved_searches.hh" # include "utils/utils.hh" # include "db.hh" using namespace std; namespace Astroid { CommandBar::CommandBar () { set_show_close_button (); connect_entry (entry); hbox.set_orientation (Gtk::ORIENTATION_HORIZONTAL); hbox.pack_start (mode_label, false, false, 5); hbox.pack_start (entry, true, true, 5); entry.set_size_request (600, -1); add(hbox); entry.signal_activate ().connect ( sigc::mem_fun (*this, &CommandBar::on_entry_activated) ); entry.signal_key_press_event ().connect ( sigc::mem_fun (this, &CommandBar::entry_key_press) ); entry.signal_changed ().connect ( sigc::mem_fun (this, &CommandBar::entry_changed)); /* set up tags */ { Db db (Db::DbMode::DATABASE_READ_ONLY); db.load_tags (); } tag_completion = refptr (new TagCompletion()); search_completion = refptr (new SearchCompletion()); text_search_completion = refptr (new SearchTextCompletion ()); difftag_completion = refptr (new DiffTagCompletion ()); } void CommandBar::set_main_window (MainWindow * mw) { main_window = mw; } ustring CommandBar::get_text () { return entry.get_text (); } void CommandBar::set_text (ustring txt) { entry.set_text (txt); } void CommandBar::on_entry_activated () { /* handle input */ ustring cmd = get_text (); LOG (debug) << "cb: cmd (in mode: " << mode << "): " << cmd; switch (mode) { case CommandMode::Search: if (callback == NULL && (cmd.size() > 0)) { Mode * m = new ThreadIndex (main_window, cmd); /* add to saved searches */ SavedSearches::add_query_to_history (cmd); main_window->add_mode (m); } break; case CommandMode::Filter: case CommandMode::SearchText: { text_search_completion->add_query (cmd); } case CommandMode::AttachMids: case CommandMode::DiffTag: case CommandMode::Tag: { } break; } if (callback != NULL) callback (cmd); callback = NULL; set_search_mode (false); // emits changed -> disables search } void CommandBar::enable_command ( CommandMode m, ustring title, ustring cmd, std::function f) { enable_command (m, cmd, f); mode_label.set_text (title); } void CommandBar::enable_command ( CommandMode m, ustring cmd, std::function f) { mode = m; reset_bar (); switch (mode) { case CommandMode::AttachMids: { entry.set_icon_from_icon_name ("mail-attachment-symbolic"); start_generic (cmd); } break; case CommandMode::Search: { mode_label.set_text (""); entry.set_icon_from_icon_name ("edit-find-symbolic"); start_searching (cmd); } break; case CommandMode::Filter: case CommandMode::SearchText: { mode_label.set_text ("Find text"); entry.set_icon_from_icon_name ("edit-find-symbolic"); start_text_searching (cmd); } break; case CommandMode::Tag: { mode_label.set_text ("Change tags"); entry.set_icon_from_icon_name ("system-run-symbolic"); start_tagging (cmd); } break; case CommandMode::DiffTag: { mode_label.set_text ("Change tags (+/-)"); entry.set_icon_from_icon_name ("system-run-symbolic"); start_difftagging (cmd); } break; } callback = f; entry.set_position (-1); set_search_mode (true); } void CommandBar::reset_bar () { entry.set_completion (refptr()); } void CommandBar::start_generic (ustring cmd) { entry.set_text (cmd); entry.set_completion (refptr ()); current_completion.reset (); } void CommandBar::start_searching (ustring searchstring) { entry.set_text (searchstring); /* set up completion */ search_completion->load_tags (Db::tags); search_completion->load_history (); search_completion->orig_text = ""; search_completion->history_pos = 0; entry.set_completion (search_completion); current_completion = search_completion; search_completion->color_tags (); } void CommandBar::start_text_searching (ustring searchstring) { entry.set_text (searchstring); /* set up completion */ search_completion->load_history (); search_completion->orig_text = ""; search_completion->history_pos = 0; entry.set_completion (text_search_completion); current_completion = text_search_completion; } void CommandBar::start_tagging (ustring tagstring) { /* set up completion */ tag_completion->load_tags (Db::tags); entry.set_completion (tag_completion); current_completion = tag_completion; entry.set_text (tagstring); tag_completion->color_tags (); } void CommandBar::start_difftagging (ustring tagstring) { /* set up completion */ difftag_completion->load_tags (Db::tags); entry.set_completion (difftag_completion); current_completion = difftag_completion; entry.set_text (tagstring); difftag_completion->color_tags (); } bool CommandBar::entry_key_press (GdkEventKey * event) { LOG (debug) << "cb: got key: " << event->keyval; switch (event->keyval) { case GDK_KEY_Tab: { /* grab the next completion */ if (entry.get_completion()) { /* if completion is set, then current_completion should be set */ current_completion->match_next (); } return true; } case GDK_KEY_Up: { if (mode == CommandMode::Search) { LOG (debug) << "cb: next history"; if (search_completion->history.empty ()) return true; /* save original */ if (search_completion->orig_text == "") { search_completion->orig_text = entry.get_text (); } if (search_completion->history.size() >= (search_completion->history_pos+1)) { search_completion->history_pos++; entry.set_text (search_completion->history[search_completion->history_pos -1]); } return true; } else { return false; } } break; case GDK_KEY_Down: { if (mode == CommandMode::Search) { LOG (debug) << "cb: previous history"; if (search_completion->history.empty ()) return true; if (search_completion->history_pos > 0) { search_completion->history_pos--; if (search_completion->history_pos == 0) { entry.set_text (search_completion->orig_text); search_completion->orig_text = ""; } else { entry.set_text (search_completion->history[search_completion->history_pos -1]); } } return true; } else { return false; } } break; default: { if (mode == CommandMode::Search) { /* reset history browsing */ refptr s = refptr::cast_dynamic (current_completion); s->orig_text = ""; s->history_pos = 0; } break; } } return false; } void CommandBar::entry_changed () { if (mode == CommandMode::Filter) { /* filter on the fly */ ustring cmd = get_text (); if (callback != NULL) callback (cmd); } else if (mode == CommandMode::Tag || mode == CommandMode::DiffTag || mode == CommandMode::Search) { if (current_completion) refptr::cast_dynamic (current_completion)->color_tags (); } } bool CommandBar::command_handle_event (GdkEventKey * event) { return handle_event (event); } /******************** * Generic Completion ********************/ bool CommandBar::GenericCompletion::match (const ustring&, const Gtk::TreeModel::const_iterator&) { // do not call directly throw std::bad_function_call (); } bool CommandBar::GenericCompletion::on_match_selected(const Gtk::TreeModel::iterator&) { // do not call directly throw std::bad_function_call (); } /* get the next match in the list and use it to complete */ void CommandBar::GenericCompletion::match_next () { /* LOG (debug) << "cb: completion: taking next match"; */ Gtk::TreeIter fwditer = completion_model->get_iter ("0"); Gtk::Entry * e = get_entry (); if (e == NULL) throw logic_error ("no entry associated with completion"); ustring key = e->get_text (); while (fwditer) { if (match (key, fwditer)) { on_match_selected (fwditer); break; } fwditer++; } } /******************** * Tag Completion ********************/ bool CommandBar::TagCompletion::canvas_color_set = false; Gdk::RGBA CommandBar::TagCompletion::canvas_color; CommandBar::TagCompletion::TagCompletion () { completion_model = Gtk::ListStore::create (m_columns); set_model (completion_model); set_text_column (m_columns.m_tag); set_match_func (sigc::mem_fun (*this, &CommandBar::TagCompletion::match)); //set_inline_completion (true); //set_inline_selection (true); set_popup_completion (true); set_popup_single_match (true); set_minimum_key_length (1); } void CommandBar::TagCompletion::load_tags (vector _tags) { tags = _tags; sort (tags.begin(), tags.end()); completion_model->clear (); /* fill model with tags */ for (ustring t : tags) { auto row = *(completion_model->append ()); row[m_columns.m_tag] = t; } } /* searches backwards to the previous ' ' and extracts the * part of the partially entered tag to be matched on. */ ustring CommandBar::TagCompletion::get_partial_tag (ustring_sz &outpos) { Gtk::Entry * e = get_entry (); if (e == NULL) return ""; ustring in = e->get_text (); if (in.size() == 0) { outpos = 0; return in; } int cursor = e->get_position (); if (cursor == -1) cursor = in.size(); outpos = in.find_last_of (break_on, cursor-1); if (outpos == ustring::npos) outpos = 0; ustring_sz endpos = in.find_first_of (break_on, outpos+2); if (endpos == ustring::npos) endpos = in.size(); if (outpos >= endpos) { return ""; } if (break_on.find_first_of (in[outpos]) != ustring::npos) { outpos++; // skip delimiter endpos--; } in = in.substr (outpos, endpos); UstringUtils::trim_left (in); /* LOG (debug) << "cursor: " << cursor << ", outpos: " << outpos << ", in: " << in << ", o: " << c; */ return in; } bool CommandBar::TagCompletion::match ( const ustring&, const Gtk::TreeModel::const_iterator& iter) { if (iter) { ustring_sz pos; ustring key = get_partial_tag (pos); Gtk::TreeModel::Row row = *iter; Glib::ustring::size_type key_length = key.size(); Glib::ustring filter_string = row[m_columns.m_tag]; Glib::ustring filter_string_start = filter_string.substr(0, key_length); // the key is lower-case, even if the user input is not. filter_string_start = filter_string_start.lowercase(); if(key.lowercase () == filter_string_start) return true; // a match was found. } return false; // no match. } bool CommandBar::TagCompletion::on_match_selected ( const Gtk::TreeModel::iterator& iter) { if (iter) { Gtk::Entry * entry = get_entry(); Gtk::TreeModel::Row row = *iter; ustring completion = row[m_columns.m_tag]; ustring t = entry->get_text (); ustring_sz pos; ustring key = get_partial_tag (pos); LOG (debug) << "match selected: " << t << ", key: " << key << ", pos: " << pos; /* pos is positioned at beginning of tag, after delimiter */ if (pos == ustring::npos) pos = 0; /* else if (pos > 0) pos += 1; // now positioned after ',' */ /* find end of key in input string */ ustring_sz n = t.find_first_of (break_on, pos); // break on these if (n == ustring::npos) n = t.size(); ustring newt; newt = t.substr (0, pos); // add space between ',' and tag if this is not the first or there is already a space there /* if (pos > 0 && *(newt.end()) != ' ') newt += " "; */ newt += completion; // add remainder of text field, unless we are at the end of the line if (pos + key.size() < t.size()) { newt += t.substr (pos+key.size() + ((pos > 0) ? 1 : 0), t.size()); } entry->set_text (newt); entry->set_position (pos + completion.size()+((pos > 0) ? 1 : 0)); } return true; } void CommandBar::TagCompletion::color_tags () { Gtk::Entry * entry = get_entry (); if (entry == NULL) return; if (!canvas_color_set) { canvas_color = entry->get_style_context()->get_background_color (); canvas_color_set = true; } ustring txt = entry->get_text (); /* set up attrlist */ Pango::AttrList attrs; /* walk through unfinished tag list and style each tag */ ustring_sz pos = 0; ustring_sz end = pos; ustring_sz len = txt.size (); while (pos < len) { /* find beginning of tag */ pos = txt.find_first_not_of (break_on, pos); if (pos == ustring::npos) break; /* find end of tag */ end = txt.find_first_of (break_on, pos); if (end == ustring::npos) end = txt.length (); ustring tag = txt.substr (pos, (end - pos)); /* grapheme positions */ ustring_sz gstart = txt.substr (0, pos).bytes (); color_tag (tag, gstart, attrs); pos = end+1; } entry->set_attributes (attrs); } void CommandBar::TagCompletion::color_tag (ustring tag, ustring_sz gstart, Pango::AttrList &attrs) { unsigned char cv[3] = { (unsigned char) (canvas_color.get_red_u () * 255 / 65535), (unsigned char) (canvas_color.get_green_u () * 255 / 65535), (unsigned char) (canvas_color.get_blue_u () * 255 / 65535) }; auto colors = Utils::get_tag_color_rgba (tag, cv); auto fg = colors.first; auto bg = colors.second; ustring_sz gend = gstart + tag.bytes (); auto fga = Pango::Attribute::Attribute::create_attr_foreground (fg.get_red_u (), fg.get_green_u (), fg.get_blue_u ()); fga.set_start_index (gstart); fga.set_end_index (gend); auto bga = Pango::Attribute::Attribute::create_attr_background (bg.get_red_u (), bg.get_green_u (), bg.get_blue_u ()); bga.set_start_index (gstart); bga.set_end_index (gend); auto bgalpha = Pango::Attribute::Attribute::create_attr_background_alpha (bg.get_alpha_u ()); bgalpha.set_start_index (gstart); bgalpha.set_end_index (gend); attrs.insert (bga); attrs.insert (bgalpha); attrs.insert (fga); } /******************** * Diff tagging ********************/ CommandBar::DiffTagCompletion::DiffTagCompletion () { break_on = "+- "; } /******************** * Search Completion ********************/ CommandBar::SearchCompletion::SearchCompletion () { set_match_func (sigc::mem_fun (*this, &CommandBar::SearchCompletion::match)); } void CommandBar::SearchCompletion::load_history () { history = SavedSearches::get_history (); std::reverse (history.begin (), history.end ()); } /* searches backwards to the previous ',' and extracts the * part of the partially entered tag to be matched on. */ bool CommandBar::SearchCompletion::get_partial_tag (ustring &out, ustring_sz &outpos) { // example input // (tag:asdf) and tag:asdfb and asdf // Gtk::Entry * e = get_entry (); if (e == NULL) return false; int cursor = e->get_position (); ustring in = e->get_text (); if (cursor == -1) cursor = in.size(); outpos = in.rfind ("tag:", cursor); if (outpos == ustring::npos) return false; /* check if we find any breaks between tag and current position */ ustring_sz endpos = in.find_first_of (") ", outpos); // break completion on these chars if (endpos != ustring::npos) { if (endpos < static_cast(cursor)) { //LOG (debug) << "break between tag and cursor"; return false; } } else { /* if we're at end, use remainder of string */ endpos = in.size(); } in = in.substr (outpos+4, endpos-outpos-4); UstringUtils::trim (in); out = in; // LOG (debug) << "cursor: " << cursor << ", outpos: " << outpos << ", in: " << in << ", o: " << c; return true; } bool CommandBar::SearchCompletion::match ( const ustring&, const Gtk::TreeModel::const_iterator& iter) { ustring key; ustring_sz pos; bool in_tag_search = get_partial_tag (key, pos); if (in_tag_search && iter) { Gtk::TreeModel::Row row = *iter; Glib::ustring::size_type key_length = key.size(); Glib::ustring filter_string = row[m_columns.m_tag]; Glib::ustring filter_string_start = filter_string.substr(0, key_length); // the key is lower-case, even if the user input is not. filter_string_start = filter_string_start.lowercase(); if(key.lowercase () == filter_string_start) return true; // a match was found. } return false; // no match. } bool CommandBar::SearchCompletion::on_match_selected ( const Gtk::TreeModel::iterator& iter) { if (iter) { Gtk::Entry * entry = get_entry(); Gtk::TreeModel::Row row = *iter; ustring completion = row[m_columns.m_tag]; ustring t = entry->get_text (); ustring key; ustring_sz pos; bool in_tag_search = get_partial_tag (key, pos); //LOG (debug) << "match selected: " << t << ", in_tag: " << in_tag_search << ", key: " << key << ", pos: " << pos; if (in_tag_search) { pos += 4; // now positioned after tag: ustring_sz n = t.find_first_of (") "); // break on these if (n == ustring::npos) n = t.size(); ustring newt = t.substr(0, pos); newt += completion; newt += t.substr (pos+key.size(), t.size()); entry->set_text (newt); entry->set_position (pos + completion.size()); } } return true; } void CommandBar::SearchCompletion::color_tags () { Gtk::Entry * entry = get_entry (); if (entry == NULL) return; if (!canvas_color_set) { canvas_color = entry->get_style_context()->get_background_color (); canvas_color_set = true; } ustring txt = entry->get_text (); /* set up attrlist */ Pango::AttrList attrs; /* walk through unfinished tag list and style each tag */ ustring_sz pos = 0; ustring_sz end = pos; ustring_sz len = txt.size (); ustring break_on = " )"; while (pos < len) { /* find beginning of tag */ pos = txt.find ("tag:", pos); if (pos == ustring::npos) break; pos += 4; /* find end of tag */ end = txt.find_first_of (break_on, pos); if (end == ustring::npos) end = txt.length (); ustring tag = txt.substr (pos, (end - pos)); /* grapheme positions */ ustring_sz gstart = txt.substr (0, pos).bytes (); color_tag (tag, gstart, attrs); pos = end+1; } entry->set_attributes (attrs); } /******************** * SearchText Completion ********************/ CommandBar::SearchTextCompletion::SearchTextCompletion () { completion_model = Gtk::ListStore::create (m_columns); set_model (completion_model); set_text_column (m_columns.m_query); //set_inline_completion (true); set_popup_completion (true); set_popup_single_match (true); set_minimum_key_length (0); } void CommandBar::SearchTextCompletion::add_query (ustring c) { if (!c.empty ()) { auto row = *(completion_model->append ()); row[m_columns.m_query] = c; } } bool CommandBar::SearchTextCompletion::on_match_selected ( const Gtk::TreeModel::iterator& iter) { if (iter) { Gtk::Entry * entry = get_entry(); Gtk::TreeModel::Row row = *iter; ustring completion = row[m_columns.m_query]; entry->set_text (completion); entry->set_position (completion.size ()); } return true; } } astroid-0.14/src/command_bar.hh000066400000000000000000000120061335422170400164550ustar00rootroot00000000000000/* command bar * * is sub classed from Gtk::SearchBar, provides a command and search bar * with an entry that takes completions. * * will in different modes accept full searches, buffer searches. * */ # pragma once # include # include # include "astroid.hh" # include "proto.hh" namespace Astroid { class CommandBar : public Gtk::SearchBar { public: enum CommandMode { Search = 0, SearchText, Filter, Tag, /* apply or remove tags */ DiffTag, /* apply or remove tags using + or - */ AttachMids, }; CommandBar (); MainWindow * main_window; CommandMode mode; Gtk::Box hbox; Gtk::Label mode_label; Gtk::SearchEntry entry; void set_main_window (MainWindow *); void on_entry_activated (); std::function callback; void enable_command (CommandMode, ustring cmd, std::function); void enable_command (CommandMode, ustring title, ustring cmd, std::function); ustring get_text (); void set_text (ustring); void start_generic (ustring); /* relay to search bar event handler */ bool command_handle_event (GdkEventKey *); bool entry_key_press (GdkEventKey *); void entry_changed (); private: void reset_bar (); class GenericCompletion : public Gtk::EntryCompletion { public: refptr completion_model; virtual bool match (const ustring&, const Gtk::TreeModel::const_iterator&); virtual bool on_match_selected(const Gtk::TreeModel::iterator& iter); /* get the next match in the list */ virtual void match_next (); }; refptr current_completion; /******************** * Tag editing ********************/ void start_tagging (ustring); class TagCompletion : public GenericCompletion { public: TagCompletion (); void load_tags (std::vector); std::vector tags; // must be sorted // tree model columns, for the EntryCompletion's filter model class ModelColumns : public Gtk::TreeModel::ColumnRecord { public: ModelColumns () { add(m_tag); } Gtk::TreeModelColumn m_tag; }; ModelColumns m_columns; ustring break_on = ", "; ustring get_partial_tag (ustring_sz&); bool match (const ustring&, const Gtk::TreeModel::const_iterator&) override; bool on_match_selected(const Gtk::TreeModel::iterator& iter) override; /* color tags */ static Gdk::RGBA canvas_color; static bool canvas_color_set; virtual void color_tags (); void color_tag (ustring tg, ustring_sz start, Pango::AttrList &attrs); }; refptr tag_completion; /******************** * Completer for diff Tag editing: * * +tag1 -tag2 ******************** */ void start_difftagging (ustring); class DiffTagCompletion : public TagCompletion { public: DiffTagCompletion (); }; refptr difftag_completion; /******************** * Search completion ********************/ void start_searching (ustring); class SearchCompletion : public TagCompletion { public: SearchCompletion (); /* original text when browsing through search history */ void load_history (); ustring orig_text = ""; unsigned int history_pos; std::vector history; bool get_partial_tag (ustring&, ustring_sz&); bool match (const ustring&, const Gtk::TreeModel::const_iterator&) override; bool on_match_selected(const Gtk::TreeModel::iterator& iter) override; void color_tags () override; }; refptr search_completion; /******************** * SearchText completion ********************/ void start_text_searching (ustring); class SearchTextCompletion : public GenericCompletion { public: SearchTextCompletion (); /* the search text completion maintains only the queries that have * been done during this program execution, the state is not saved */ // tree model columns, for the EntryCompletion's filter model class ModelColumns : public Gtk::TreeModel::ColumnRecord { public: ModelColumns () { add(m_query); } Gtk::TreeModelColumn m_query; }; ModelColumns m_columns; void add_query (ustring); bool on_match_selected(const Gtk::TreeModel::iterator& iter) override; }; refptr text_search_completion; }; } astroid-0.14/src/compose_message.cc000066400000000000000000000626551335422170400173710ustar00rootroot00000000000000# include # include # include # include # include # include # include # include # include # include # include # include "utils/gmime/gmime-compat.h" # include "astroid.hh" # include "db.hh" # include "config.hh" # include "compose_message.hh" # include "message_thread.hh" # include "account_manager.hh" # include "chunk.hh" # include "crypto.hh" # include "actions/action_manager.hh" # include "actions/onmessage.hh" # include "utils/address.hh" # include "utils/ustring_utils.hh" # ifndef DISABLE_PLUGINS # include "plugin/manager.hh" # endif using namespace std; namespace bfs = boost::filesystem; namespace Astroid { ComposeMessage::ComposeMessage () { LOG (debug) << "cm: initialize.."; message = g_mime_message_new (true); d_message_sent.connect ( sigc::mem_fun (this, &ComposeMessage::message_sent_event)); d_message_send_status.connect ( sigc::mem_fun (this, &ComposeMessage::message_send_status_event)); } ComposeMessage::~ComposeMessage () { if (send_thread.joinable ()) send_thread.join (); g_object_unref (message); LOG (debug) << "cm: deinitialized."; } void ComposeMessage::set_from (Account *a) { account = a; from = internet_address_mailbox_new (a->name.c_str(), a->email.c_str()); g_mime_message_add_mailbox (message, GMIME_ADDRESS_TYPE_FROM, a->name.c_str (), a->email.c_str ()); } void ComposeMessage::set_to (ustring _to) { to = _to; g_mime_object_set_header (GMIME_OBJECT(message), "To", to.c_str(), NULL); } void ComposeMessage::set_cc (ustring _cc) { cc = _cc; g_mime_object_set_header (GMIME_OBJECT(message), "Cc", cc.c_str(), NULL); } void ComposeMessage::set_bcc (ustring _bcc) { bcc = _bcc; g_mime_object_set_header (GMIME_OBJECT(message), "Bcc", bcc.c_str(), NULL); } void ComposeMessage::set_subject (ustring _subject) { subject = _subject; g_mime_message_set_subject (message, subject.c_str(), NULL); } void ComposeMessage::set_id (ustring _id) { id = _id; } void ComposeMessage::set_references (ustring _refs) { references = _refs; if (references.empty ()) { g_mime_header_list_remove ( g_mime_object_get_header_list (GMIME_OBJECT(message)), "References"); } else { g_mime_object_set_header (GMIME_OBJECT(message), "References", references.c_str(), NULL); } } void ComposeMessage::set_inreplyto (ustring _inreplyto) { inreplyto = _inreplyto; if (inreplyto.empty ()) { g_mime_header_list_remove ( g_mime_object_get_header_list (GMIME_OBJECT(message)), "In-Reply-To"); } else { g_mime_object_set_header (GMIME_OBJECT(message), "In-Reply-To", inreplyto.c_str(), NULL); } } void ComposeMessage::build () { LOG (debug) << "cm: build.."; std::string text_body_content(body.str()); /* attached signatures are handled in ::finalize */ if (include_signature && account && !account->signature_attach) { LOG (debug) << "cm: adding inline signature from: " << account->signature_file.c_str (); std::ifstream s (account->signature_file.c_str ()); std::ostringstream sf; sf << s.rdbuf (); s.close (); if (account->signature_separate) { text_body_content += "-- \n"; } text_body_content += sf.str (); } markdown_success = false; markdown_error = ""; /* create text part */ GMimeStream * contentStream = g_mime_stream_mem_new_with_buffer(text_body_content.c_str(), text_body_content.size()); GMimePart * messagePart = g_mime_part_new_with_type ("text", "plain"); g_mime_object_set_content_type_parameter ((GMimeObject *) messagePart, "charset", astroid->config().get("editor.charset").c_str()); if (astroid->config().get ("mail.format_flowed")) { g_mime_object_set_content_type_parameter ((GMimeObject *) messagePart, "format", "flowed"); } GMimeDataWrapper * contentWrapper = g_mime_data_wrapper_new_with_stream(contentStream, GMIME_CONTENT_ENCODING_DEFAULT); g_mime_part_set_content_encoding (messagePart, GMIME_CONTENT_ENCODING_QUOTEDPRINTABLE); g_mime_part_set_content (messagePart, contentWrapper); g_object_unref(contentWrapper); g_object_unref(contentStream); if (markdown) { std::string md_body_content(body.str()); /* attached signatures are handled in ::finalize */ if (include_signature && account && !account->signature_attach && account->has_signature_markdown) { LOG (debug) << "cm: adding inline signature (markdown) from: " << account->signature_file_markdown.c_str (); std::ifstream s (account->signature_file_markdown.c_str ()); std::ostringstream sf; sf << s.rdbuf (); s.close (); if (account->signature_separate) { md_body_content += "-- \n"; } md_body_content += sf.str (); } GMimePart * text = messagePart; GMimeMultipart * mp = g_mime_multipart_new_with_subtype ("alternative"); /* add text part */ g_mime_multipart_add (mp, GMIME_OBJECT(messagePart)); messagePart = GMIME_PART(mp); /* construct HTML part */ GMimePart * html = g_mime_part_new_with_type ("text", "html"); g_mime_object_set_content_type_parameter ((GMimeObject *) html, "charset", astroid->config().get("editor.charset").c_str()); if (astroid->config().get ("mail.format_flowed")) { g_mime_object_set_content_type_parameter ((GMimeObject *) html, "format", "flowed"); } GMimeStream * contentStream; /* pipe through markdown to html generator */ int pid; int stdin; int stdout; int stderr; markdown_success = true; vector args = Glib::shell_parse_argv (astroid->config().get("editor.markdown_processor")); try { Glib::spawn_async_with_pipes ("", args, Glib::SPAWN_DO_NOT_REAP_CHILD | Glib::SPAWN_SEARCH_PATH, sigc::slot (), &pid, &stdin, &stdout, &stderr ); refptr ch_stdin; refptr ch_stdout; refptr ch_stderr; ch_stdin = Glib::IOChannel::create_from_fd (stdin); ch_stdout = Glib::IOChannel::create_from_fd (stdout); ch_stderr = Glib::IOChannel::create_from_fd (stderr); ch_stdin->write (md_body_content); ch_stdin->close (); ustring _html; ch_stdout->read_to_end (_html); ch_stdout->close (); ustring _err; ch_stderr->read_to_end (_err); ch_stderr->close (); if (!_err.empty ()) { LOG (error) << "cm: md: " << _err; markdown_error = _err; markdown_success = false; } else { LOG (debug) << "cm: md: got html: " << _html; contentStream = g_mime_stream_mem_new_with_buffer(_html.c_str(), _html.size()); } } catch (Glib::SpawnError &ex) { LOG (error) << "cm: md: failed to spawn markdown processor: " << ex.what (); markdown_success = false; markdown_error = "Failed to spawn markdown processor: " + ex.what(); } if (markdown_success) { /* add output to html part */ GMimeDataWrapper * contentWrapper = g_mime_data_wrapper_new_with_stream(contentStream, GMIME_CONTENT_ENCODING_DEFAULT); g_mime_part_set_content_encoding (html, GMIME_CONTENT_ENCODING_QUOTEDPRINTABLE); g_mime_part_set_content (html, contentWrapper); g_object_unref(contentWrapper); g_object_unref(contentStream); /* add html part to message */ g_mime_multipart_add (mp, GMIME_OBJECT (html)); g_object_unref (text); } else { /* revert to only text part */ g_object_unref (messagePart); messagePart = text; } } g_mime_message_set_mime_part(message, GMIME_OBJECT(messagePart)); g_object_unref(messagePart); } void ComposeMessage::load_message (ustring _mid, ustring fname) { set_id (_mid); Message msg (_mid, fname); Account * from = astroid->accounts->get_account_for_address (msg.sender); if (from == NULL) { LOG (warn) << "cm: warning: unknown sending address, using default."; from = &(astroid->accounts->accounts[astroid->accounts->default_account]); } set_from (from); char * cto = internet_address_list_to_string (msg.to(), NULL, false); if (cto) set_to (cto); cto = internet_address_list_to_string (msg.cc(), NULL, false); if (cto) set_cc (cto); cto = internet_address_list_to_string (msg.bcc(), NULL, false); if (cto) set_bcc (cto); set_references (msg.references); set_inreplyto (msg.inreplyto); set_subject (msg.subject); body << msg.viewable_text (false); } void ComposeMessage::finalize () { /* make message ready to be sent */ LOG (debug) << "cm: finalize.."; /* again: ripped more or less from ner */ /* FILE * file = fopen(_messageFile.c_str(), "r"); GMimeStream * stream = g_mime_stream_file_new(file); GMimeParser * parser = g_mime_parser_new_with_stream(stream); GMimeMessage * message = g_mime_parser_construct_message(parser); */ /* set user agent */ ustring ua = ""; # ifndef DISABLE_PLUGINS if (!astroid->plugin_manager->astroid_extension->get_user_agent (ua)) { # endif ua = astroid->config ().get ("mail.user_agent"); UstringUtils::trim (ua); if (ua == "default") ua = astroid->user_agent; # ifndef DISABLE_PLUGINS } # endif if (!ua.empty ()) { g_mime_object_set_header (GMIME_OBJECT(message), "User-Agent", ua.c_str(), NULL); } /* add date to the message */ g_mime_message_set_date_now (message); /* Give the message an ID */ g_mime_message_set_message_id(message, id.c_str()); /* inline signatures are handled in ::build */ if (include_signature && account && account->signature_attach) { shared_ptr sa ( new ComposeMessage::Attachment (account->signature_file)); /* this could be an .vcf, so lets not try to be too smart here */ add_attachment (sa); } /* attachments */ if (attachments.size() > 0) { GMimeMultipart * multipart = g_mime_multipart_new_with_subtype("mixed"); g_mime_multipart_add (multipart, (GMimeObject*) message->mime_part); g_mime_message_set_mime_part (message, (GMimeObject*) multipart); /* not unreffing message->mime_part here since it is reused */ for (shared_ptr &a : attachments) { if (!a->valid) { LOG (error) << "cm: invalid attachment: " << a->name; // in practice this cannot happen since EditMessage will // not add an invalid attachment. In the case that it would // be added, there would be no way for the user to delete it // from the draft. continue; } if (a->is_mime_message) { GMimeMessagePart * mp = g_mime_message_part_new_with_message ("rfc822", (GMimeMessage*) a->message->message); g_mime_multipart_add (multipart, (GMimeObject *) mp); g_object_unref (mp); } else { GMimeStream * file_stream; file_stream = g_mime_stream_mem_new_with_byte_array (a->contents->gobj()); g_mime_stream_mem_set_owner (GMIME_STREAM_MEM (file_stream), false); GMimeDataWrapper * data = g_mime_data_wrapper_new_with_stream (file_stream, GMIME_CONTENT_ENCODING_DEFAULT); GMimeContentType * contentType = g_mime_content_type_parse (g_mime_parser_options_get_default (), a->content_type.c_str ()); GMimePart * part = g_mime_part_new_with_type(g_mime_content_type_get_media_type (contentType), g_mime_content_type_get_media_subtype (contentType)); g_mime_part_set_content (part, data); g_mime_part_set_filename (part, a->name.c_str()); if (a->dispostion_inline) { g_mime_object_set_disposition (GMIME_OBJECT(part), "inline"); } else { g_mime_part_set_content_encoding (part, GMIME_CONTENT_ENCODING_BASE64); } g_mime_multipart_add (multipart, (GMimeObject*) part); g_object_unref (part); g_object_unref (contentType); g_object_unref (file_stream); g_object_unref (data); } } g_object_unref(multipart); } /* encryption */ encryption_success = false; encryption_error = ""; GError * err = NULL; if (encrypt || sign) { GMimeObject * content = g_mime_message_get_mime_part (message); Crypto cy ("application/pgp-encrypted"); if (encrypt) { GMimeMultipartEncrypted * e_content = NULL; encryption_success = cy.encrypt (content, sign, account->gpgkey, from, AddressList (to) + AddressList (cc) + AddressList (bcc), &e_content, &err); g_mime_message_set_mime_part (message, (GMimeObject *) e_content); g_object_unref (e_content); } else { /* only sign */ GMimeMultipartSigned * s_content = NULL; encryption_success = cy.sign (content, account->gpgkey, &s_content, &err); g_mime_message_set_mime_part (message, (GMimeObject *) s_content); g_object_unref (s_content); } /* g_object_unref (content); */ if (!encryption_success) { encryption_error = err->message; LOG (error) << "cm: failed encrypting or signing: " << encryption_error; } } } void ComposeMessage::add_attachment (shared_ptr a) { attachments.push_back (a); } bool ComposeMessage::cancel_sending () { LOG (warn) << "cm: cancel sendmail pid: " << pid; std::lock_guard lk (send_cancel_m); cancel_send_during_delay = true; if (pid > 0) { int r = kill (pid, SIGKILL); if (r == 0) { LOG (warn) << "cm: sendmail killed."; } else { LOG (error) << "cm: could not kill sendmail."; } } send_cancel_cv.notify_one (); if (send_thread.joinable ()) { send_thread.detach (); } return true; } void ComposeMessage::send_threaded () { LOG (info) << "cm: sending (threaded).."; cancel_send_during_delay = false; send_thread = std::thread (&ComposeMessage::send, this); } bool ComposeMessage::send () { dryrun = astroid->config().get("astroid.debug.dryrun_sending"); message_send_status_warn = false; message_send_status_msg = ""; unsigned int delay = astroid->config ().get ("mail.send_delay"); std::unique_lock lk (send_cancel_m); while (delay > 0 && !cancel_send_during_delay) { LOG (debug) << "cm: sending in " << delay << " seconds.."; if (astroid->hint_level () < 1) { /* TODO: replace C-c with the actual keybinding configured by the user */ message_send_status_msg = ustring::compose ("sending message in %1 seconds... Press C-c to cancel!", delay); } else { message_send_status_msg = ustring::compose ("sending message in %1 seconds...", delay); } d_message_send_status (); std::chrono::seconds sec (1); send_cancel_cv.wait_until (lk, std::chrono::system_clock::now () + sec, [&] { return cancel_send_during_delay; }); delay--; } if (cancel_send_during_delay) { LOG (error) << "cm: cancelled sending before message could be sent."; message_send_status_msg = "sending message... cancelled before sending."; message_send_status_warn = true; d_message_send_status (); message_sent_result = false; d_message_sent (); pid = 0; return false; } lk.unlock (); if (astroid->hint_level () < 1) { /* TODO: replace C-c with the actual keybinding configured by the user */ message_send_status_msg = "sending message... Press C-c to cancel!"; } else { message_send_status_msg = "sending message..."; } d_message_send_status (); int stdin; int stdout; int stderr; /* Send the message */ if (!dryrun) { LOG (warn) << "cm: sending message from account: " << account->full_address (); ustring send_command = account->sendmail; LOG (debug) << "cm: sending message using command: " << send_command; vector args = Glib::shell_parse_argv (send_command); try { Glib::spawn_async_with_pipes ("", args, Glib::SPAWN_DO_NOT_REAP_CHILD | Glib::SPAWN_SEARCH_PATH, sigc::slot (), &pid, &stdin, &stdout, &stderr ); } catch (Glib::SpawnError &ex) { LOG (error) << "cm: could not send message!"; message_send_status_msg = "message could not be sent!"; message_send_status_warn = true; d_message_send_status (); message_sent_result = false; d_message_sent (); pid = 0; return false; } /* connect channels */ refptr ch_stdout; refptr ch_stderr; ch_stdout = Glib::IOChannel::create_from_fd (stdout); ch_stderr = Glib::IOChannel::create_from_fd (stderr); /* write message to sendmail */ GMimeStream * stream = g_mime_stream_pipe_new (stdin); g_mime_stream_pipe_set_owner (GMIME_STREAM_PIPE(stream), true); // causes stdin to be closed when stream is closed g_mime_object_write_to_stream (GMIME_OBJECT(message), g_mime_format_options_get_default (), stream); g_mime_stream_flush (stream); g_object_unref (stream); // closes stdin /* wait for sendmail to finish */ int status; pid_t wp = waitpid (pid, &status, 0); if (wp == (pid_t)-1) { LOG (error) << "cm: error when executing sendmail process: " << errno << ", unknown if message was sent."; } g_spawn_close_pid (pid); /* these read_to_end's are necessary to wait for the pipes to be closed, hopefully * ensuring that any child processed forked by the sendmail process * has also finished */ if (ch_stdout) { Glib::ustring buf; ch_stdout->read_to_end(buf); if (*(--buf.end()) == '\n') buf.erase (--buf.end()); if (!buf.empty ()) LOG (debug) << "sendmail: " << buf; ch_stdout->close (); ch_stdout.clear (); } if (ch_stderr) { Glib::ustring buf; ch_stderr->read_to_end(buf); if (*(--buf.end()) == '\n') buf.erase (--buf.end()); if (!buf.empty ()) LOG (warn) << "sendmail: " << buf; ch_stderr->close (); ch_stderr.clear (); } ::close (stdout); ::close (stderr); if (status == 0 && wp != (pid_t)-1) { LOG (warn) << "cm: message sent successfully!"; if (account->save_sent) { using bfs::path; save_to = account->save_sent_to / path(id + ":2,"); LOG (info) << "cm: saving message to: " << save_to; write (save_to.c_str()); } message_send_status_msg = "message sent successfully!"; message_send_status_warn = false; d_message_send_status (); pid = 0; message_sent_result = true; d_message_sent (); return true; } else { LOG (error) << "cm: could not send message: " << status << "!"; message_send_status_msg = "message could not be sent!"; message_send_status_warn = true; d_message_send_status (); message_sent_result = false; d_message_sent (); pid = 0; return false; } } else { ustring fname = "/tmp/" + id; LOG (warn) << "cm: sending disabled in config, message written to: " << fname; message_send_status_msg = "sending disabled, message written to: " + fname; message_send_status_warn = true; d_message_send_status (); write (fname); message_sent_result = false; d_message_sent (); pid = 0; return false; } } /* signals */ ComposeMessage::type_message_sent ComposeMessage::message_sent () { return m_message_sent; } void ComposeMessage::emit_message_sent (bool res) { m_message_sent.emit (res); } void ComposeMessage::message_sent_event () { /* add to notmuch with sent tag (on main GUI thread) */ if (!dryrun && message_sent_result && account->save_sent) { astroid->actions->doit (refptr ( new AddSentMessage (save_to.c_str (), account->additional_sent_tags))); LOG (info) << "cm: sent message added to db."; } emit_message_sent (message_sent_result); } ComposeMessage::type_message_send_status ComposeMessage::message_send_status () { return m_message_send_status; } void ComposeMessage::emit_message_send_status (bool warn, ustring msg) { m_message_send_status.emit (warn, msg); } void ComposeMessage::message_send_status_event () { emit_message_send_status (message_send_status_warn, message_send_status_msg); } ustring ComposeMessage::write_tmp () { char * temporaryFilePath; if (!bfs::is_directory ("/tmp")) { /* this fails if /tmp does not exist, typically in a chroot */ LOG (warn) << "cm: /tmp is not a directory, writing tmp files to current directory."; temporaryFilePath = strdup("tmp-astroid-compose-XXXXXX"); } else { temporaryFilePath = strdup("/tmp/astroid-compose-XXXXXX"); } int fd = mkstemp(temporaryFilePath); message_file = temporaryFilePath; free(temporaryFilePath); GMimeStream * stream = g_mime_stream_fs_new(fd); g_mime_object_write_to_stream (GMIME_OBJECT(message), g_mime_format_options_get_default (), stream); g_mime_stream_flush (stream); g_object_unref(stream); LOG (info) << "cm: wrote tmp file: " << message_file; return message_file; } void ComposeMessage::write (ustring fname) { if (bfs::exists (fname.c_str ())) unlink (fname.c_str ()); FILE * MessageFile = fopen(fname.c_str(), "w"); GMimeStream * stream = g_mime_stream_file_new(MessageFile); g_mime_object_write_to_stream (GMIME_OBJECT(message), g_mime_format_options_get_default (), stream); g_mime_stream_flush (stream); g_object_unref(stream); LOG (debug) << "cm: wrote file: " << fname; } ComposeMessage::Attachment::Attachment () { } ComposeMessage::Attachment::Attachment (bfs::path p) { LOG (debug) << "cm: at: construct from file."; fname = p; std::string filename = fname.c_str (); GError * error = NULL; GFile * file = g_file_new_for_path(filename.c_str()); GFileInfo * file_info = g_file_query_info(file, G_FILE_ATTRIBUTE_STANDARD_TYPE "," G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE, G_FILE_QUERY_INFO_NONE, NULL, &error); if (error) { LOG (error) << "cm: could not query file information."; valid = false; g_object_unref (file); g_object_unref (file_info); return; } if (g_file_info_get_file_type(file_info) != G_FILE_TYPE_REGULAR) { LOG (error) << "cm: attached file is not a regular file."; valid = false; g_object_unref (file); g_object_unref (file_info); return; } content_type = g_file_info_get_content_type (file_info); name = fname.filename().c_str(); valid = true; if (content_type == "message/rfc822") { LOG (debug) << "cm: attachment is mime message."; message = refptr (new Message(fname.c_str ())); is_mime_message = true; name = message->subject; } else { /* load into byte array */ refptr fle = Glib::wrap (file, false); refptr istr = fle->read (); refptr b; contents = Glib::ByteArray::create (); do { b = istr->read_bytes (4096, refptr(NULL)); if (b) { gsize s = b->get_size (); if (s <= 0) break; contents->append ((const guint8 *) b->get_data (s), s); } } while (b); } g_object_unref (file); g_object_unref (file_info); } ComposeMessage::Attachment::Attachment (refptr c) { LOG (debug) << "cm: at: construct from chunk."; name = c->get_filename (); valid = true; /* used by edit message when deleting attachment */ chunk_id = c->id; if (c->mime_message) { content_type = "message/rfc822"; is_mime_message = true; message = refptr (new Message(GMIME_MESSAGE(c->mime_object))); g_object_ref (c->mime_object); // should be cleaned by Message : Glib::Object name = message->subject; } else { contents = c->contents (); const char * ct = g_mime_content_type_get_mime_type (c->content_type); if (ct != NULL) { content_type = std::string (ct); } else { content_type = "application/octet-stream"; } } } ComposeMessage::Attachment::Attachment (refptr msg) { LOG (debug) << "cm: at: construct from message."; name = msg->subject; is_mime_message = true; content_type = "message/rfc822"; message = msg; valid = true; } ComposeMessage::Attachment::~Attachment () { LOG (debug) << "cm: at: deconstruct"; } } astroid-0.14/src/compose_message.hh000066400000000000000000000070121335422170400173650ustar00rootroot00000000000000# pragma once # include # include # include # include # include # include # include # include # include # include # include "astroid.hh" # include "proto.hh" namespace bfs = boost::filesystem; namespace Astroid { struct GLibDeleter { constexpr GLibDeleter() = default; void operator()(void * object) { g_object_unref(object); } }; typedef std::unique_ptr GLibPointer; class ComposeMessage : public sigc::trackable { public: ComposeMessage (); ~ComposeMessage (); GMimeMessage * message = NULL; Account * account = NULL; InternetAddress * from = NULL; ustring to, cc, bcc, id, subject, references, inreplyto; std::ostringstream body; void set_from (Account *); void set_to (ustring); void set_cc (ustring); void set_bcc (ustring); void set_subject (ustring); void set_id (ustring); void set_inreplyto (ustring); void set_references (ustring); bool include_signature = false; bool markdown = false; bool encrypt = false; bool sign = false; bool markdown_success = false; ustring markdown_error = ""; struct Attachment { public: Attachment (); Attachment (bfs::path); Attachment (refptr); Attachment (refptr); ~Attachment (); ustring name; bfs::path fname; bool is_mime_message = false; bool dispostion_inline = false; bool valid; refptr contents; std::string content_type; refptr message; int chunk_id = -1; }; void add_attachment (std::shared_ptr); std::vector> attachments; void load_message (ustring, ustring); // load draft or message as new void build (); // call to build message from content void finalize (); // call before sending bool send (); void send_threaded (); bool cancel_sending (); ustring write_tmp (); // write message to tmpfile void write (ustring); // write message to some file /* encryption */ bool encryption_success = false; ustring encryption_error = ""; private: ustring message_file; bfs::path save_to; bool dryrun; /* sendmail process */ bool cancel_send_during_delay = false; int pid; std::thread send_thread; std::mutex send_cancel_m; std::condition_variable send_cancel_cv; public: /* message sent */ typedef sigc::signal type_message_sent; type_message_sent message_sent (); void emit_message_sent (bool); bool message_sent_result; void message_sent_event (); Glib::Dispatcher d_message_sent; /* message send status update */ typedef sigc::signal type_message_send_status; type_message_send_status message_send_status (); void emit_message_send_status (bool, ustring); bool message_send_status_warn = false; ustring message_send_status_msg = ""; void message_send_status_event (); Glib::Dispatcher d_message_send_status; protected: type_message_sent m_message_sent; type_message_send_status m_message_send_status; }; } astroid-0.14/src/config.cc000066400000000000000000000410471335422170400154550ustar00rootroot00000000000000# include # include # include # include # include # include # include # include # include "config.hh" # include "poll.hh" # include "utils/utils.hh" # include "utils/resource.hh" using namespace std; using namespace boost::filesystem; using boost::property_tree::ptree; namespace Astroid { Config::Config (bool _test, bool no_load) { if (_test) { LOG (info) << "cf: loading test config."; } test = _test; load_dirs (); std_paths.config_file = std_paths.config_dir / path("config"); if (!no_load) load_config (); // re-sets config_dir to parent of fname } Config::Config (const char * fname, bool no_load) { test = false; load_dirs (); std_paths.config_file = path(fname); LOG (info) << "cf: loading config: " << fname; if (!no_load) load_config (); // re-sets config_dir to parent of fname } void Config::load_dirs () { if (test) { /* using $PWD/test/test_home */ path cur_path (current_path() ); std_paths.home = cur_path / path("tests/test_home"); LOG (debug) << "cf: using home and config_dir directory: " << std_paths.home.c_str (); } else { char * home_c = getenv ("HOME"); LOG (debug) << "HOME: " << home_c; if (home_c == NULL) { LOG (error) << "cf: HOME environment variable not set."; exit (1); } std_paths.home = path(home_c); } /* default config */ if (test) { std_paths.config_dir = std_paths.home; } else { char * config_home = getenv ("XDG_CONFIG_HOME"); if (config_home == NULL) { std_paths.config_dir = std_paths.home / path(".config/astroid"); } else { std_paths.config_dir = path(config_home) / path("astroid"); } } /* searches file */ std_paths.searches_file = std_paths.config_dir / path("searches"); /* plugin dir */ std_paths.plugin_dir = std_paths.config_dir / path ("plugins"); /* default data */ char * data = getenv ("XDG_DATA_HOME"); if (data == NULL) { std_paths.data_dir = std_paths.home / path(".local/share/astroid"); } else { std_paths.data_dir = path(data) / path("astroid"); } /* default cache */ char * cache = getenv ("XDG_CACHE_HOME"); if (cache == NULL) { std_paths.cache_dir = std_paths.home / path(".cache/astroid"); } else { std_paths.cache_dir = path(cache) / path("astroid"); } /* default runtime */ char * runtime = getenv ("XDG_RUNTIME_HOME"); if (runtime == NULL) { std_paths.runtime_dir = std_paths.cache_dir; } else { std_paths.runtime_dir = path(runtime) / path("astroid"); } /* save to and attach from directory */ std_paths.save_dir = std_paths.home; std_paths.attach_dir = std_paths.home; } void Config::setup_default_initial_config (ptree &conf, bool accounts, bool startup) { /* initial default options - these are only set when the sections are * completely missing. */ if (accounts) { /* default example account: * * note: AccountManager will complain if there are no accounts defined. * */ conf.put ("accounts.charlie.name", "Charlie Root"); conf.put ("accounts.charlie.email", "root@localhost"); conf.put ("accounts.charlie.gpgkey", ""); conf.put ("accounts.charlie.always_gpg_sign", false); conf.put ("accounts.charlie.sendmail", "msmtp -i -t"); conf.put ("accounts.charlie.default", true); conf.put ("accounts.charlie.save_sent", false); conf.put ("accounts.charlie.save_sent_to", "/home/root/Mail/sent/cur/"); conf.put ("accounts.charlie.additional_sent_tags", ""); conf.put ("accounts.charlie.save_drafts_to", "/home/root/Mail/drafts/"); conf.put ("accounts.charlie.signature_separate", false); conf.put ("accounts.charlie.signature_file", ""); conf.put ("accounts.charlie.signature_file_markdown", ""); conf.put ("accounts.charlie.signature_default_on", true); conf.put ("accounts.charlie.signature_attach", false); conf.put ("accounts.charlie.select_query", ""); } if (startup) { /* default searches, also only set if initial */ conf.put("startup.queries.inbox", "tag:inbox"); } } ptree Config::setup_default_config (bool initial) { ptree default_config; default_config.put ("astroid.config.version", CONFIG_VERSION); std::string nm_cfg = path(std_paths.home / path (".notmuch-config")).string(); default_config.put ("astroid.notmuch_config" , nm_cfg); default_config.put ("astroid.debug.dryrun_sending", false); /* only show hints with a level higher than this */ default_config.put ("astroid.hints.level", 0); default_config.put ("astroid.log.syslog", false); default_config.put ("astroid.log.stdout", true); # if DEBUG default_config.put ("astroid.log.level", "debug"); // (trace, debug, info, warning, error, fatal) # else default_config.put ("astroid.log.level", "info"); // (trace, debug, info, warning, error, fatal) # endif if (initial) { setup_default_initial_config (default_config); } /* terminal */ default_config.put ("terminal.height", 10); default_config.put ("terminal.font_description", "default"); // https://developer.gnome.org/pango/stable/pango-Fonts.html#pango-font-description-from-string /* thread index */ default_config.put ("thread_index.page_jump_rows", 6); default_config.put ("thread_index.sort_order", "newest"); default_config.put ("general.time.clock_format", "local"); // or 24h, 12h default_config.put ("general.time.same_year", "%b %-e"); default_config.put ("general.time.diff_year", "%x"); /* thread index cell theme */ default_config.put ("thread_index.cell.font_description", "default"); default_config.put ("thread_index.cell.line_spacing", 2); default_config.put ("thread_index.cell.date_length", 10); default_config.put ("thread_index.cell.message_count_length", 4); default_config.put ("thread_index.cell.authors_length", 20); default_config.put ("thread_index.cell.subject_color", "#807d74"); default_config.put ("thread_index.cell.subject_color_selected", "#000000"); default_config.put ("thread_index.cell.background_color_selected", ""); default_config.put ("thread_index.cell.background_color_marked", "#fff584"); default_config.put ("thread_index.cell.background_color_marked_selected", "#bcb559"); default_config.put ("thread_index.cell.tags_length", 80); default_config.put ("thread_index.cell.tags_upper_color", "#e5e5e5"); default_config.put ("thread_index.cell.tags_lower_color", "#333333"); default_config.put ("thread_index.cell.tags_alpha", "0.5"); default_config.put ("thread_index.cell.hidden_tags", "attachment,flagged,unread"); /* editor */ // also useful: '+/^\\s*\\n/' '+nohl' # ifndef DISABLE_EMBEDDED default_config.put ("editor.cmd", "gvim -geom 10x10 --servername %2 --socketid %3 -f -c 'set ft=mail' '+set fileencoding=utf-8' '+set ff=unix' '+set enc=utf-8' '+set fo+=w' %1"); default_config.put ("editor.external_editor", false); // should be true on Wayland # else default_config.put ("editor.cmd", "gvim -f -c 'set ft=mail' '+set fileencoding=utf-8' '+set enc=utf-8' '+set ff=unix' '+set fo+=w' %1"); default_config.put ("editor.external_editor", true); // should be true on Wayland # endif default_config.put ("editor.charset", "utf-8"); default_config.put ("editor.save_draft_on_force_quit", true); default_config.put ("editor.attachment_words", "attach"); default_config.put ("editor.attachment_directory", "~"); default_config.put ("editor.markdown_processor", "cmark"); /* mail composition */ default_config.put ("mail.reply.quote_line", "Excerpts from %1's message of %2:"); // %1 = author, %2 = pretty_verbose_date default_config.put ("mail.reply.mailinglist_reply_to_sender", true); default_config.put ("mail.forward.quote_line", "Forwarding %1's message of %2:"); // %1 = author, %2 = pretty_verbose_date default_config.put ("mail.forward.disposition", "inline"); default_config.put ("mail.sent_tags", "sent"); default_config.put ("mail.message_id_fqdn", ""); // custom fqdn for the message id: default: local hostname default_config.put ("mail.message_id_user", ""); // custom user for the message id: default: 'astroid' default_config.put ("mail.user_agent", "default"); default_config.put ("mail.send_delay", 2); // wait seconds before sending, allowing to cancel default_config.put ("mail.close_on_success", false); // close page automatically on succesful sending of message default_config.put ("mail.format_flowed", false); // mail sent with astroid can be reformatted using format_flowed /* polling */ default_config.put ("poll.interval", Poll::DEFAULT_POLL_INTERVAL); // seconds default_config.put ("poll.always_full_refresh", false); // always do full refresh after poll, slow. /* attachments * * a chunk is saved and opened with this command */ default_config.put ("attachment.external_open_cmd", "xdg-open"); /* thread view * * if true; chunks (parts) that are not viewed initially are opened * externally when this is set. the part is opened with * 'attachment.external_open_cmd'. */ default_config.put ("thread_view.open_html_part_external", false); default_config.put ("thread_view.preferred_type", "plain"); default_config.put ("thread_view.preferred_html_only", false); default_config.put ("thread_view.allow_remote_when_encrypted", false); /* if a link is clicked (html, ftp, etc..) it is executed with this * command. */ default_config.put ("thread_view.open_external_link", "xdg-open"); default_config.put ("thread_view.default_save_directory", "~"); default_config.put ("thread_view.indent_messages", false); /* gravatar */ default_config.put ("thread_view.gravatar.enable", true); /* mark unread */ default_config.put ("thread_view.mark_unread_delay", .5); /* expand flagged messages by default */ default_config.put ("thread_view.expand_flagged", true); /* crypto */ default_config.put ("crypto.gpg.path", "gpg2"); default_config.put ("crypto.gpg.always_trust", true); default_config.put ("crypto.gpg.enabled", true); /* saved searches */ default_config.put ("saved_searches.show_on_startup", false); default_config.put ("saved_searches.save_history", true); default_config.put ("saved_searches.history_lines_to_show", 15); /* -1 is all */ default_config.put ("saved_searches.history_lines", 1000); /* number of history lines to store */ return default_config; } void Config::write_back_config () { LOG (warn) << "cf: writing back config to: " << std_paths.config_file; write_json (std_paths.config_file.c_str (), config); } void Config::load_config (bool initial) { if (test) { LOG (info) << "cf: test config, loading defaults."; config = setup_default_config (true); config.put ("poll.interval", 0); config.put ("accounts.charlie.gpgkey", "gaute@astroidmail.bar"); config.put ("mail.send_delay", 0); std::string test_nmcfg_path; if (getenv ("ASTROID_BUILD_DIR")) { test_nmcfg_path = (current_path () / path ("tests/mail/test_config")).string(); } else { test_nmcfg_path = (Resource::get_exe_dir () / path ("tests/mail/test_config")).string(); } boost::property_tree::read_ini (test_nmcfg_path, notmuch_config); has_notmuch_config = true; return; } LOG (info) << "cf: loading: " << std_paths.config_file; std_paths.config_dir = absolute(std_paths.config_file.parent_path()); if (!is_directory(std_paths.config_dir)) { LOG (warn) << "cf: making config dir.."; create_directories (std_paths.config_dir); } if (!is_directory(std_paths.runtime_dir)) { LOG (warn) << "cf: making runtime dir.."; create_directories (std_paths.runtime_dir); } if (!is_regular_file (std_paths.config_file)) { if (!initial) { LOG (warn) << "cf: no config, using defaults."; } config = setup_default_config (true); } else { /* loading config file */ ptree new_config; config = setup_default_config (false); read_json (std_paths.config_file.c_str(), new_config); LOG (info) << "cf: version: " << config.get("astroid.config.version"); merge_ptree (new_config); check_config (new_config); } /* load save_dir */ std_paths.save_dir = Utils::expand(bfs::path (config.get("thread_view.default_save_directory"))); run_paths.save_dir = std_paths.save_dir; /* load attach_dir */ std_paths.attach_dir = Utils::expand(bfs::path (config.get("editor.attachment_directory"))); run_paths.attach_dir = std_paths.attach_dir; /* read notmuch config */ bfs::path notmuch_config_path; char * notmuch_config_env = getenv ("NOTMUCH_CONFIG"); if (notmuch_config_env) { notmuch_config_path = Utils::expand(bfs::path (notmuch_config_env)); } else { notmuch_config_path = Utils::expand(bfs::path (config.get("astroid.notmuch_config"))); } if (is_regular_file (notmuch_config_path)) { boost::property_tree::read_ini ( notmuch_config_path.c_str(), notmuch_config); has_notmuch_config = true; } else { has_notmuch_config = false; } } bool Config::check_config (ptree new_config) { LOG (debug) << "cf: check config.."; bool changed = false; if (new_config != config) { changed = true; } int version = config.get("astroid.config.version"); { bool hasstartup; try { ptree strup = config.get_child ("startup"); hasstartup = strup.count ("queries") > 0; if ( (hasstartup && strup.get_child ("queries").size () == 0) && !config.get ("saved_searches.show_on_startup") ) { LOG (info) << "cf: no startup queries, forcing show saved_searches on startup."; config.put ("saved_searches.show_on_startup", true); } } catch (const boost::property_tree::ptree_bad_path &ex) { hasstartup = false; } bool hasaccounts; try { ptree apt = config.get_child ("accounts"); hasaccounts = apt.size () > 0; } catch (const boost::property_tree::ptree_bad_path &ex) { hasaccounts = false; } if (!hasaccounts || !hasstartup) { LOG (warn) << "cf: missing accounts or startup.queries: using defaults"; setup_default_initial_config (config, !hasaccounts, !hasstartup); } } if (version < CONFIG_VERSION) { LOG (error) << "cf: the config file is an old version (" << version << "), the current version is: " << CONFIG_VERSION; } if (changed) { LOG (warn) << "cf: missing values in config have been updated with defaults (old version: " << version << ", new: " << CONFIG_VERSION << ")"; } return !changed; } /* TODO: split into utils/ somewhere.. */ /* merge of property trees */ // from http://stackoverflow.com/questions/8154107/how-do-i-merge-update-a-boostproperty-treeptree template void Config::traverse_recursive( const boost::property_tree::ptree &parent, const boost::property_tree::ptree::path_type &childPath, const boost::property_tree::ptree &child, T &method) { using boost::property_tree::ptree; method(parent, childPath, child); for(ptree::const_iterator it=child.begin(); it!=child.end(); ++it) { ptree::path_type curPath = childPath / ptree::path_type(it->first); traverse_recursive(parent, curPath, it->second, method); } } void Config::traverse(const ptree &parent, function method) { traverse_recursive(parent, "", parent, method); } void Config::merge(const ptree & /* parent */, const ptree::path_type &childPath, const ptree &child) { // overwrites existing default values config.put(childPath, child.data()); } void Config::merge_ptree(const ptree &pt) { function method = bind (&Config::merge, this, _1, _2, _3); traverse(pt, method); } } astroid-0.14/src/config.hh000066400000000000000000000044251335422170400154660ustar00rootroot00000000000000# pragma once # include # include "astroid.hh" # include # include # include namespace bfs = boost::filesystem; using boost::property_tree::ptree; namespace Astroid { struct StandardPaths { bfs::path home; bfs::path config_dir; bfs::path data_dir; bfs::path cache_dir; bfs::path runtime_dir; bfs::path config_file; bfs::path searches_file; bfs::path plugin_dir; bfs::path save_dir; bfs::path attach_dir; }; struct RuntimePaths { bfs::path save_dir; // last used save to folder bfs::path attach_dir; // last used attach from folder }; class Config { public: Config (bool _test = false, bool no_load = false); Config (const char *, bool no_load = false); /* dir env vars from XDG with defaults: * XDG_CONFIG_HOME : $HOME/.config/ * XDG_DATA_HOME : $HOME/.local/share/ * XDG_CACHE_HOME : $HOME/.cache/ * XDG_RUNTIME_HOME : none */ bool test; StandardPaths std_paths; RuntimePaths run_paths; void load_config (bool initial = false); void load_dirs (); bool check_config (ptree); void write_back_config (); ptree config; ptree notmuch_config; bool has_notmuch_config; const int CONFIG_VERSION = 11; private: ptree setup_default_config (bool); void setup_default_initial_config (ptree &conf, bool accounts = true, bool startup = true); /* merge of property trees */ // from http://stackoverflow.com/questions/8154107/how-do-i-merge-update-a-boostproperty-treeptree template void traverse_recursive( const boost::property_tree::ptree &parent, const boost::property_tree::ptree::path_type &childPath, const boost::property_tree::ptree &child, T &method); void traverse( const boost::property_tree::ptree &parent, std::function method); void merge(const ptree &parent, const ptree::path_type &childPath, const ptree &child); void merge_ptree (const ptree &pt); }; } astroid-0.14/src/crypto.cc000066400000000000000000000241741335422170400155320ustar00rootroot00000000000000# include # include # include "utils/gmime/gmime-compat.h" # include # include # include "astroid.hh" # include "config.hh" # include "crypto.hh" # include "utils/address.hh" # include "chunk.hh" namespace Astroid { Crypto::Crypto (ustring _protocol) { id = Chunk::nextid++; using std::endl; config = astroid->config ("crypto"); gpgpath = ustring (config.get ("gpg.path")); always_trust = config.get ("gpg.always_trust"); gpgenabled = config.get ("gpg.enabled"); LOG (debug) << "crypto: gpg: " << gpgpath; protocol = _protocol.lowercase (); if ((protocol == "application/pgp-encrypted" || protocol == "application/pgp-signature")) { isgpg = true; if (! gpgenabled) { ready = false; return; } create_gpg_context (); } else { LOG (error) << "crypto: unsupported protocol: " << protocol; ready = false; return; } ready = true; } Crypto::~Crypto () { LOG (debug) << "crypto: deconstruct."; /* if (slist) g_object_unref (slist); */ /* if (rlist) g_object_unref (rlist); */ if (decrypt_res) g_object_unref (decrypt_res); if (gpgctx) g_object_unref (gpgctx); } GMimeObject * Crypto::decrypt_and_verify (GMimeObject * part) { using std::endl; LOG (debug) << "crypto: decrypting and verifiying.."; decrypt_tried = true; if (!GMIME_IS_MULTIPART_ENCRYPTED (part)) { LOG (error) << "crypto: part is not encrypted."; return NULL; } GError *err = NULL; GMimeMultipartEncrypted * ep = GMIME_MULTIPART_ENCRYPTED (part); GMimeObject * dp = g_mime_multipart_encrypted_decrypt (ep, GMIME_DECRYPT_NONE, NULL, &decrypt_res, &err); /* GMimeDecryptResult and GMimeCertificates * * Only the certificates of the signature are fully populated, the certificates * listed in GMimeDecryptResult->recipients are only a list of the alleged * key ids of the receivers. These can be spoofed by the sender, or normally set to * 0x0 if the receivers should be anonymous (-R for gpg). * * It is not possible not have a certificate entry for a receiver, so it is always * possible to see how many recipients there are for a message. * * For decrypted messages the certificate only has the key_id field set, the rest * of the information has to be fetched manually (note that the key_id is for the * subkey that supports encryption - E). When the rest of the information is fetched * from an available public key we cannot be sure that this is really the recipient. * * * Encryption and Decryption: * * The option always_trust on the gpg context must be set if the local key is not * trusted (or considered valid). Otherwise it is not used for encryption-target. * * There is some confusion about the term 'trust' here since it normally means whether * you trust the keys signing of other keys, in this case it means 'is the key valid' * 'or is the key really the one from the recipient'. * */ if (decrypt_res) { rlist = g_mime_decrypt_result_get_recipients (decrypt_res); slist = g_mime_decrypt_result_get_signatures (decrypt_res); for (int i = 0; i < g_mime_certificate_list_length (rlist); i++) { GMimeCertificate * ce = g_mime_certificate_list_get_certificate (rlist, i); const char * c = NULL; ustring fp = (c = g_mime_certificate_get_fingerprint (ce), c ? c : ""); ustring nm = (c = g_mime_certificate_get_name (ce), c ? c : ""); ustring em = (c = g_mime_certificate_get_email (ce), c ? c : ""); ustring key = (c = g_mime_certificate_get_key_id (ce), c ? c : ""); LOG (debug) << "cr: encrypted for: " << nm << "(" << em << ") [" << fp << "] [" << key << "]"; } } if (dp == NULL) { LOG (error) << "crypto: failed to decrypt message: " << err->message; decrypted = false; decrypt_error = err->message; } else { LOG (info) << "crypto: successfully decrypted message."; decrypted = true; verify_tried = (slist != NULL); verified = verify_signature_list (slist); } return dp; } GMimeMessage * Crypto::decrypt_message (GMimeMessage * in) { GMimeStream * ins = GMIME_STREAM (g_mime_stream_mem_new ()); g_mime_object_write_to_stream (GMIME_OBJECT(in), NULL, ins); g_mime_stream_seek (ins, 0, GMIME_STREAM_SEEK_SET); GError * err = NULL; GMimeStream * outs = GMIME_STREAM (g_mime_stream_mem_new ()); GMimeDecryptResult * decrypt_res = g_mime_crypto_context_decrypt (gpgctx, GMIME_DECRYPT_NONE, NULL, ins, outs, &err); g_mime_stream_flush (outs); g_mime_stream_seek (outs, 0, GMIME_STREAM_SEEK_SET); g_object_unref (ins); /* check if message */ GMimeParser * parser = g_mime_parser_new_with_stream (outs); GMimeMessage * dp = g_mime_parser_construct_message (parser, NULL); g_object_unref (parser); g_object_unref (outs); if (decrypt_res) { rlist = g_mime_decrypt_result_get_recipients (decrypt_res); slist = g_mime_decrypt_result_get_signatures (decrypt_res); for (int i = 0; i < g_mime_certificate_list_length (rlist); i++) { GMimeCertificate * ce = g_mime_certificate_list_get_certificate (rlist, i); const char * c = NULL; ustring fp = (c = g_mime_certificate_get_fingerprint (ce), c ? c : ""); ustring nm = (c = g_mime_certificate_get_name (ce), c ? c : ""); ustring em = (c = g_mime_certificate_get_email (ce), c ? c : ""); ustring key = (c = g_mime_certificate_get_key_id (ce), c ? c : ""); LOG (debug) << "cr: encrypted for: " << nm << "(" << em << ") [" << fp << "] [" << key << "]"; } } if (dp == NULL) { LOG (error) << "crypto: failed to decrypt message: " << err->message; decrypted = false; decrypt_error = err->message; } else { LOG (info) << "crypto: successfully decrypted message."; decrypted = true; verify_tried = (slist != NULL); verified = verify_signature_list (slist); } return dp; } bool Crypto::verify_signature (GMimeObject * mo) { GError * err = NULL; verify_tried = true; slist = g_mime_multipart_signed_verify (GMIME_MULTIPART_SIGNED(mo), GMIME_VERIFY_NONE, &err); verified = verify_signature_list (slist); return verified; } bool Crypto::verify_signature_list (GMimeSignatureList * list) { if (list == NULL) return false; bool res = g_mime_signature_list_length (list) > 0; for (int i = 0; i < g_mime_signature_list_length (list); i++) { GMimeSignature * s = g_mime_signature_list_get_signature (list, i); res &= g_mime_signature_status_good(g_mime_signature_get_status (s)); } return res; } bool Crypto::encrypt (GMimeObject * mo, bool sign, ustring userid, InternetAddress * from, ustring to, GMimeMultipartEncrypted ** out, GError ** err) { return encrypt (mo, sign, userid, from, AddressList (to), out, err); } bool Crypto::encrypt (GMimeObject * mo, bool sign, ustring userid, InternetAddress * from, AddressList to, GMimeMultipartEncrypted ** out, GError ** err) { /* build receipients */ AddressList recp = to + Address (from); recp.remove_duplicates (); GPtrArray * recpa = g_ptr_array_sized_new (recp.size ()); std::vector ur; for (Address &a : recp.addresses) { ur.push_back (a.email ()); } LOG (debug) << "cr: encrypting for: "; for (ustring &u : ur) { g_ptr_array_add (recpa, (gpointer) u.c_str ()); LOG (debug) << u << " "; } *out = g_mime_multipart_encrypted_encrypt ( gpgctx, mo, sign, userid.c_str (), GMIME_ENCRYPT_NONE, recpa, err); g_ptr_array_free (recpa, true); if (*out != NULL) { LOG (debug) << "crypto: successfully encrypted message."; return true; } else { LOG (debug) << "crypto: failed to encrypt message: " << (*err)->message; return false; } } bool Crypto::sign (GMimeObject * mo, ustring userid, GMimeMultipartSigned ** out, GError ** err) { *out = g_mime_multipart_signed_sign ( gpgctx, mo, userid.c_str (), err); if (*out != NULL) { LOG (debug) << "crypto: successfully signed message."; return true; } else { LOG (debug) << "crypto: failed to sign message: " << (*err)->message; return false; } } bool Crypto::create_gpg_context () { if (!astroid->in_test ()) { # if (GMIME_MAJOR_VERSION < 3) gpgctx = g_mime_gpg_context_new(NULL, gpgpath.length() ? gpgpath.c_str () : "gpg"); g_mime_gpg_context_set_use_agent ((GMimeGpgContext *) gpgctx, TRUE); g_mime_gpg_context_set_always_trust ((GMimeGpgContext *) gpgctx, always_trust); # else gpgctx = g_mime_gpg_context_new (); # endif } else { LOG (debug) << "crypto: in test"; # if (GMIME_MAJOR_VERSION < 3) gpgctx = g_mime_gpg_context_new(NULL, "gpg"); g_mime_gpg_context_set_use_agent ((GMimeGpgContext *) gpgctx, TRUE); g_mime_gpg_context_set_always_trust ((GMimeGpgContext *) gpgctx, TRUE); # else gpgctx = g_mime_gpg_context_new (); # endif } if (! gpgctx) { LOG (error) << "crypto: failed to create gpg context."; return false; } return true; } ustring Crypto::get_md5_digest (ustring str) { std::string cs = Glib::Checksum::compute_checksum (Glib::Checksum::ChecksumType::CHECKSUM_MD5, str); return cs; } gssize Crypto::get_md5_length () { return Glib::Checksum::get_length (Glib::Checksum::ChecksumType::CHECKSUM_MD5); } refptr Crypto::get_md5_digest_b (ustring str) { if (str.empty ()) { guint8 buffer[get_md5_length ()]; return Glib::Bytes::create (buffer, get_md5_length ()); } guint8 buffer[get_md5_length ()]; gsize len = get_md5_length (); Glib::Checksum chk (Glib::Checksum::ChecksumType::CHECKSUM_MD5); chk.update (str); chk.get_digest (buffer, &len); return Glib::Bytes::create (buffer, len); } } astroid-0.14/src/crypto.hh000066400000000000000000000037441335422170400155440ustar00rootroot00000000000000# pragma once # include # include # include "astroid.hh" # include "utils/address.hh" # include "proto.hh" using boost::property_tree::ptree; namespace Astroid { class Crypto : public Glib::Object { public: Crypto (ustring protocol); ~Crypto (); // used as element id int id = 0; bool ready = false; bool isgpg = false; bool gpgenabled = true; GMimeObject * decrypt_and_verify (GMimeObject * mo); GMimeMessage * decrypt_message (GMimeMessage * in); bool verify_signature (GMimeObject * mo); bool encrypt (GMimeObject * mo, bool sign, ustring userid, InternetAddress * from, ustring to, GMimeMultipartEncrypted ** e, GError **); bool encrypt (GMimeObject * mo, bool sign, ustring userid, InternetAddress * from, AddressList to, GMimeMultipartEncrypted ** e, GError **); bool sign (GMimeObject * mo, ustring userid, GMimeMultipartSigned ** s, GError **); bool decrypted = false; bool verified = false; /* signature ok */ bool verify_tried = false; bool decrypt_tried = false; ustring decrypt_error = ""; GMimeDecryptResult * decrypt_res = NULL; GMimeSignatureList * slist = NULL; GMimeCertificateList * rlist = NULL; private: bool create_gpg_context (); GMimeCryptoContext * gpgctx = NULL; ustring protocol; ustring gpgpath; bool always_trust = false; ptree config; bool verify_signature_list (GMimeSignatureList *); public: static ustring get_md5_digest (ustring str); static gssize get_md5_length (); static refptr get_md5_digest_b (ustring str); }; } astroid-0.14/src/db.cc000066400000000000000000000773361335422170400146070ustar00rootroot00000000000000# include # include # include # include # include # include # include # include # include # include # include # include # include "db.hh" # include "astroid.hh" # include "utils/utils.hh" # include "utils/address.hh" # include "actions/action_manager.hh" # include "message_thread.hh" using namespace std; using namespace boost::filesystem; namespace Astroid { std::atomic Db::read_only_dbs_open; std::mutex Db::db_open; std::condition_variable Db::dbs_open; /* static settings */ bool Db::maildir_synchronize_flags = false; std::vector Db::excluded_tags = { "muted", "spam", "deleted" }; std::vector Db::sent_tags = { "sent" }; std::vector Db::draft_tags = { "draft" }; std::vector Db::tags; bfs::path Db::path_db; void Db::init () { const ptree& config = astroid->notmuch_config (); const char * home = getenv ("HOME"); if (home == NULL) { LOG (error) << "db: error: HOME variable not set."; throw invalid_argument ("db: error: HOME environment variable not set."); } if (!astroid->has_notmuch_config ()) { throw database_error ("db: error: no notmuch config file found."); } ustring db_path; try { db_path = ustring (config.get ("database.path")); } catch (const boost::property_tree::ptree_bad_path &ex) { throw database_error ("db: error: no database path specified"); } LOG (info) << "db path: " << db_path; path_db = Utils::expand (path (db_path)); path_db = absolute (path_db); ustring excluded_tags_s; try { excluded_tags_s = config.get ("search.exclude_tags"); } catch (const boost::property_tree::ptree_bad_path &ex) { throw database_error ("db: error: no search.exclude_tags defined in notmuch-config"); } excluded_tags = VectorUtils::split_and_trim (excluded_tags_s, ";"); sort (excluded_tags.begin (), excluded_tags.end ()); // TODO: find a better way to handle sent_tags, probably via AccountManager? ustring sent_tags_s = astroid->config().get ("mail.sent_tags"); sent_tags = VectorUtils::split_and_trim (sent_tags_s, ","); sort (sent_tags.begin (), sent_tags.end ()); try { maildir_synchronize_flags = config.get ("maildir.synchronize_flags"); } catch (const boost::property_tree::ptree_bad_path &ex) { throw database_error ("db: error: no maildir.maildir_synchronize_flags defined in notmuch-config"); } } Db::Db (DbMode _mode) { mode = _mode; time_t start = clock (); nm_db = NULL; if (mode == DATABASE_READ_ONLY) { open_db_read_only (true); } else if (mode == DATABASE_READ_WRITE) { open_db_write (true); } else { throw invalid_argument ("db: mode must be read-only or read-write"); } float diff = (clock () - start) * 1000.0 / CLOCKS_PER_SEC; LOG (debug) << "db: open time: " << diff << " ms."; } bool Db::open_db_write (bool block) { LOG (info) << "db: open db read-write."; /* lock will wait for all read-onlys to close, lk will not be released before * db is closed */ rw_lock = Db::acquire_rw_lock (); notmuch_status_t s; int time = 0; /* in case a long notmuch new or similar operation is running * we won't be able to get read-write access to the db untill * it is done. */ do { s = notmuch_database_open ( path_db.c_str(), notmuch_database_mode_t::NOTMUCH_DATABASE_MODE_READ_WRITE, &nm_db); if (s == NOTMUCH_STATUS_XAPIAN_EXCEPTION) { LOG (error) << "db: error: could not open db r/w, waited " << time << " of maximum " << db_open_timeout << " seconds."; chrono::seconds duration (db_open_delay); this_thread::sleep_for (duration); time += db_open_delay; } } while (block && (s == NOTMUCH_STATUS_XAPIAN_EXCEPTION) && (time <= db_open_timeout)); if (s != NOTMUCH_STATUS_SUCCESS) { LOG (error) << "db: error: failed opening database for writing, have you configured the notmuch database path correctly?"; release_rw_lock (rw_lock); throw database_error ("failed to open database for writing"); return false; } return true; } bool Db::open_db_read_only (bool block) { Db::acquire_ro_lock (); notmuch_status_t s; int time = 0; do { s = notmuch_database_open ( path_db.c_str(), notmuch_database_mode_t::NOTMUCH_DATABASE_MODE_READ_ONLY, &nm_db); if (s == NOTMUCH_STATUS_XAPIAN_EXCEPTION) { LOG (error) << "db: error: could not open db r/o, waited " << time << " of maximum " << db_open_timeout << " seconds."; chrono::seconds duration (db_open_delay); this_thread::sleep_for (duration); time += db_open_delay; } } while (block && (s == NOTMUCH_STATUS_XAPIAN_EXCEPTION) && (time <= db_open_timeout)); if (s != NOTMUCH_STATUS_SUCCESS) { LOG (error) << "db: error: failed opening database for reading, have you configured the notmuch database path correctly?"; release_ro_lock (); throw database_error ("failed to open database (in read-only mode)"); return false; } return true; } std::unique_lock Db::acquire_rw_lock () { /* lock will wait for all read-onlys to close, lk will not be released before * db is closed */ LOG (debug) << "db: rw-s: waiting for rw lock.. (r-o open: " << read_only_dbs_open << ")"; std::unique_lock rwl (db_open); dbs_open.wait (rwl, [] { return (read_only_dbs_open == 0); }); LOG (debug) << "db: rw-s lock acquired."; return rwl; } void Db::release_rw_lock (std::unique_lock &rwl) { LOG (debug) << "db: rw-s: releasing lock."; rwl.unlock (); dbs_open.notify_all (); } void Db::acquire_ro_lock () { LOG (info) << "db: open db read-only, waiting for lock.."; /* will block if there is an read-write db open */ std::lock_guard lk (db_open); read_only_dbs_open++; LOG (debug) << "db: read-only got lock."; } void Db::release_ro_lock () { LOG (debug) << "db: ro: waiting for lock to close.."; std::unique_lock lk (db_open); LOG (debug) << "db: ro: closing.."; read_only_dbs_open--; lk.unlock (); dbs_open.notify_all (); } void Db::close () { if (!closed) { closed = true; if (nm_db != NULL) { LOG (info) << "db: closing db."; notmuch_database_close (nm_db); nm_db = NULL; } if (mode == DATABASE_READ_WRITE) { LOG (debug) << "db: rw: releasing lock."; release_rw_lock (rw_lock); } else { release_ro_lock (); } } } Db::~Db () { close (); } unsigned long Db::get_revision () { const char *uuid; unsigned long revision = notmuch_database_get_revision (nm_db, &uuid); return revision; } void Db::load_tags () { notmuch_tags_t * nm_tags = notmuch_database_get_all_tags (nm_db); const char * tag; tags.clear (); for (; notmuch_tags_valid (nm_tags); notmuch_tags_move_to_next (nm_tags)) { tag = notmuch_tags_get (nm_tags); tags.push_back (ustring(tag)); } notmuch_tags_destroy (nm_tags); LOG (info) << "db: loaded " << tags.size () << " tags."; } bool Db::remove_message (ustring fname) { notmuch_status_t s = notmuch_database_remove_message (nm_db, fname.c_str ()); if ((s != NOTMUCH_STATUS_SUCCESS) && (s != NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID)) { LOG (error) << "db: error removing message: " << s; throw database_error ("db: could not remove message from database."); } return (s != NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID); } ustring Db::add_message_with_tags (ustring fname, vector tags) { notmuch_message_t * msg; notmuch_status_t s = notmuch_database_index_file (nm_db, fname.c_str (), notmuch_database_get_default_indexopts (nm_db), &msg); if ((s != NOTMUCH_STATUS_SUCCESS) && (s != NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID)) { LOG (error) << "db: error adding message: " << s; if (s == NOTMUCH_STATUS_FILE_ERROR) { LOG (error) << "db: file seems to have been moved, ignoring - probably a race condition with some syncing program."; return ""; } else { throw database_error ("db: could not add message to database."); } } /* add tags */ for (ustring &t : tags) { s = notmuch_message_add_tag (msg, t.c_str()); } if ((s == NOTMUCH_STATUS_SUCCESS) && maildir_synchronize_flags) { s = notmuch_message_tags_to_maildir_flags (msg); } /* return mid */ const char * mid = notmuch_message_get_message_id (msg); ustring _mid; if (mid != NULL) { _mid = ustring (mid); } notmuch_message_destroy (msg); return _mid; } ustring Db::add_sent_message (ustring fname, vector additional_sent_tags) { LOG (info) << "db: adding sent message: " << fname; additional_sent_tags.insert (additional_sent_tags.end (), sent_tags.begin (), sent_tags.end ()); additional_sent_tags.erase (unique (additional_sent_tags.begin (), additional_sent_tags.end ()), additional_sent_tags.end ()); return add_message_with_tags (fname, additional_sent_tags); } ustring Db::add_draft_message (ustring fname) { LOG (info) << "db: adding draft message: " << fname; return add_message_with_tags (fname, draft_tags); } bool Db::message_in_query (ustring query_in, ustring mid) { /* check if message is in query */ string query_s; UstringUtils::trim(query_in); if (query_in.length() == 0 || query_in == "*") { query_s = "id:" + mid; } else { query_s = "id:" + mid + " AND (" + query_in + ")"; } time_t t0 = clock (); LOG (debug) << "db: checking if message: " << mid << " matches query: " << query_in; notmuch_query_t * query = notmuch_query_create (nm_db, query_s.c_str()); for (ustring &t : excluded_tags) { notmuch_query_add_tag_exclude (query, t.c_str()); } notmuch_query_set_omit_excluded (query, NOTMUCH_EXCLUDE_TRUE); unsigned int c = 0; notmuch_status_t st = NOTMUCH_STATUS_SUCCESS; st = notmuch_query_count_messages (query, &c); if (st != NOTMUCH_STATUS_SUCCESS) c = 0; if (c > 1) { throw database_error ("db: got more than one message for message id."); } /* free resources */ notmuch_query_destroy (query); LOG (debug) << "db: message in query check: " << ((clock() - t0) * 1000.0 / CLOCKS_PER_SEC) << " ms."; return (st == NOTMUCH_STATUS_SUCCESS) && (c == 1); } bool Db::thread_in_query (ustring query_in, ustring thread_id) { /* check if thread id is in query */ string query_s; UstringUtils::trim(query_in); if (query_in.length() == 0 || query_in == "*") { query_s = "thread:" + thread_id; } else { query_s = "thread:" + thread_id + " AND (" + query_in + ")"; } time_t t0 = clock (); LOG (debug) << "db: checking if thread: " << thread_id << " matches query: " << query_in; notmuch_query_t * query = notmuch_query_create (nm_db, query_s.c_str()); for (ustring &t : excluded_tags) { notmuch_query_add_tag_exclude (query, t.c_str()); } notmuch_query_set_omit_excluded (query, NOTMUCH_EXCLUDE_TRUE); unsigned int c = 0; notmuch_status_t st = NOTMUCH_STATUS_SUCCESS; st = notmuch_query_count_threads (query, &c); if (st != NOTMUCH_STATUS_SUCCESS) c = 0; if (c > 1) { throw database_error ("db: got more than one thread for thread id."); } /* free resources */ notmuch_query_destroy (query); LOG (debug) << "db: thread in query check: " << ((clock() - t0) * 1000.0 / CLOCKS_PER_SEC) << " ms."; return (st == NOTMUCH_STATUS_SUCCESS) && (c == 1); } void Db::on_thread (ustring thread_id, function func) { string query_s = "thread:" + thread_id; notmuch_query_t * query = notmuch_query_create (nm_db, query_s.c_str()); notmuch_thread_t * nm_thread; notmuch_threads_t * nm_threads; notmuch_status_t st = NOTMUCH_STATUS_SUCCESS; st = notmuch_query_search_threads (query, &nm_threads); if ((st != NOTMUCH_STATUS_SUCCESS) || nm_threads == NULL) { notmuch_query_destroy (query); LOG (error) << "db: could not find thread: " << thread_id << ", status: " << notmuch_status_to_string(st); func (NULL); return; } int c = 0; for ( ; notmuch_threads_valid (nm_threads); notmuch_threads_move_to_next (nm_threads)) { if (c > 0) { LOG (error) << "db: got more than one thread for thread id."; throw invalid_argument ("db: got more than one thread for thread id."); } nm_thread = notmuch_threads_get (nm_threads); c++; } if (c < 1) { LOG (error) << "db: could not find thread: " << thread_id; func (NULL); notmuch_query_destroy (query); return; } /* call function */ func (nm_thread); /* free resources */ notmuch_query_destroy (query); } void Db::on_message (ustring mid, function func) { notmuch_message_t * msg; notmuch_status_t s = notmuch_database_find_message (nm_db, mid.c_str(), &msg); if (msg == NULL || s != NOTMUCH_STATUS_SUCCESS) { notmuch_message_destroy (msg); LOG (error) << "db: could not find message: " << mid << ", status: " << s; func (NULL); return; } /* call function */ func (msg); /* free resources */ notmuch_message_destroy (msg); } ustring Db::sanitize_tag (ustring tag) { UstringUtils::trim (tag); return tag; } bool Db::check_tag (ustring tag) { if (tag.empty()) { LOG (error) << "nmt: invalid tag, empty."; return false; } const vector invalid_chars = { "\"" }; for (const ustring &c : invalid_chars) { if (tag.find (c) != ustring::npos) { LOG (error) << "nmt: invalid char in tag: " << c; return false; } } if (tag.size() > NOTMUCH_TAG_MAX) { LOG (error) << "nmt: error: maximum tag length is: " << NOTMUCH_TAG_MAX; return false; } return true; } /* -------------- * notmuch thread * -------------- */ NotmuchThread::NotmuchThread (notmuch_thread_t * t) { const char * ti = notmuch_thread_get_thread_id (t); if (ti == NULL) { LOG (error) << "nmt: got NULL thread id."; throw database_error ("nmt: NULL thread_id"); } thread_id = ti; load (t); } NotmuchThread::~NotmuchThread () { //LOG (debug) << "nmt: deconstruct."; } bool NotmuchThread::refresh (Db * db) { /* do a new db query and update all fields */ bool in_notmuch = true; db->on_thread (thread_id, [&](notmuch_thread_t * nm_thread) { if (nm_thread != NULL) { in_notmuch = true; load (nm_thread); } else { in_notmuch = false; } }); return in_notmuch; } void NotmuchThread::load (notmuch_thread_t * nm_thread) { unread = false; attachment = false; flagged = false; /* update values */ const char * s = notmuch_thread_get_subject (nm_thread); // belongs to thread if (s != NULL) { subject = ustring (s); } newest_date = notmuch_thread_get_newest_date (nm_thread); oldest_date = notmuch_thread_get_oldest_date (nm_thread); total_messages = check_total_messages (nm_thread); tags = get_tags (nm_thread); authors = get_authors (nm_thread); } vector NotmuchThread::get_tags (notmuch_thread_t * nm_thread) { notmuch_tags_t * tags; const char * tag; vector ttags; for (tags = notmuch_thread_get_tags (nm_thread); notmuch_tags_valid (tags); notmuch_tags_move_to_next (tags)) { tag = notmuch_tags_get (tags); // tag belongs to tags if (tag != NULL) { if (string(tag) == "unread") { unread = true; } else if (string(tag) == "attachment") { attachment = true; } else if (string(tag) == "flagged") { flagged = true; } ttags.push_back (ustring(tag)); } } notmuch_tags_destroy (tags); sort (ttags.begin (), ttags.end ()); return ttags; } vector> NotmuchThread::get_authors (notmuch_thread_t * nm_thread) { /* important: this might be called from another thread, we cannot output anything here */ /* returns a vector of authors and whether they are authors of * an unread message in the thread */ vector> aths; /* first check if any messages are unread, if not: just fetch the authors for * the thread without checking each one. * * `get_tags ()` have already been called, so we can safely use `unread` */ if (!unread) { const char * auths = notmuch_thread_get_authors (nm_thread); ustring astr; if (auths != NULL) { astr = auths; } else { /* LOG (error) << "nmt: got NULL for authors!"; */ } std::vector maths = VectorUtils::split_and_trim (astr, ",|\\|"); for (auto & a : maths) { aths.push_back (make_tuple (a, false)); } return aths; } /* get messages from thread */ notmuch_messages_t * qmessages; notmuch_message_t * message; bool _unread; for (qmessages = notmuch_thread_get_messages (nm_thread); notmuch_messages_valid (qmessages); notmuch_messages_move_to_next (qmessages)) { message = notmuch_messages_get (qmessages); ustring a; const char * ac = notmuch_message_get_header (message, "From"); if (ac != NULL) { a = Address(ustring (ac)).fail_safe_name (); } else { /* LOG (error) << "nmt: got NULL for author!"; */ continue; } _unread = false; /* get tags */ notmuch_tags_t *tags; const char *tag; for (tags = notmuch_message_get_tags (message); notmuch_tags_valid (tags); notmuch_tags_move_to_next (tags)) { tag = notmuch_tags_get (tags); if (ustring (tag) == "unread") { _unread = true; break; } } auto fnd = find_if (aths.begin (), aths.end (), [&] (tuple &p) { return get<0>(p) == a; }); if (fnd == aths.end ()) { aths.push_back (make_tuple (a, _unread)); } else { /* check if it is marked unread */ if (_unread && !(get<1> (*fnd))) { get<1> (*fnd) = true; } } notmuch_message_destroy (message); } return aths; } int NotmuchThread::check_total_messages (notmuch_thread_t * nm_thread) { int c = notmuch_thread_get_total_messages (nm_thread); return c; } /* tag actions */ bool NotmuchThread::add_tag (Db * db, ustring tag) { LOG (debug) << "nm (" << thread_id << "): add tag: " << tag; tag = Db::sanitize_tag (tag); if (!Db::check_tag (tag)) { LOG (debug) << "nm (" << thread_id << "): error, invalid tag: " << tag; return false; } bool res = true; db->on_thread (thread_id, [&](notmuch_thread_t * nm_thread) { if (find(tags.begin (), tags.end (), tag) == tags.end ()) { /* get messages from thread */ notmuch_messages_t * qmessages; notmuch_message_t * message; for (qmessages = notmuch_thread_get_messages (nm_thread); notmuch_messages_valid (qmessages); notmuch_messages_move_to_next (qmessages)) { message = notmuch_messages_get (qmessages); notmuch_status_t s = notmuch_message_add_tag (message, tag.c_str ()); if ((s == NOTMUCH_STATUS_SUCCESS) && db->maildir_synchronize_flags) { s = notmuch_message_tags_to_maildir_flags (message); } notmuch_message_destroy (message); if (s == NOTMUCH_STATUS_SUCCESS) { res &= true; } else { LOG (error) << "nm: could not add tag: " << tag << " to thread: " << thread_id; res = false; return; } } if (res) { tags.push_back (tag); // add to global tag list if (find(db->tags.begin (), db->tags.end (), tag) == db->tags.end ()) { db->tags.push_back (tag); } } res = true; } else { res = false; } }); return res; } bool NotmuchThread::remove_tag (Db * db, ustring tag) { LOG (debug) << "nm (" << thread_id << "): remove tag: " << tag; tag = Db::sanitize_tag (tag); if (!Db::check_tag (tag)) { LOG (debug) << "nm (" << thread_id << "): error, invalid tag: " << tag; return false; } bool res = true; db->on_thread (thread_id, [&](notmuch_thread_t * nm_thread) { if (find(tags.begin (), tags.end (), tag) != tags.end ()) { /* get messages from thread */ notmuch_messages_t * qmessages; notmuch_message_t * message; for (qmessages = notmuch_thread_get_messages (nm_thread); notmuch_messages_valid (qmessages); notmuch_messages_move_to_next (qmessages)) { message = notmuch_messages_get (qmessages); notmuch_status_t s = notmuch_message_remove_tag (message, tag.c_str ()); if ((s == NOTMUCH_STATUS_SUCCESS) && db->maildir_synchronize_flags) { s = notmuch_message_tags_to_maildir_flags (message); } notmuch_message_destroy (message); if (s == NOTMUCH_STATUS_SUCCESS) { res &= true; } else { LOG (error) << "nm: could not remove tag: " << tag << " from thread: " << thread_id; res = false; return; } } if (res) { tags.erase (remove (tags.begin (), tags.end (), tag), tags.end ()); } res = true; } else { LOG (warn) << "nm: thread does not have tag."; res = false; } }); return res; } void NotmuchThread::emit_updated (Db * db) { astroid->actions->emit_thread_updated (db, thread_id); } bool NotmuchThread::matches (std::vector &k) { if (index_str.empty ()) { index_str = subject; for (auto &a : authors) index_str += get<0>(a); for (auto &t : tags) index_str += t; index_str += thread_id; index_str = index_str.lowercase (); } /* match all keys (AND) */ return std::all_of (k.begin (), k.end (), [&] (ustring &kk) { return index_str.find (kk) != string::npos; }); } bool NotmuchThread::in_query (Db * db, ustring query) { return db->thread_in_query (query, thread_id); } ustring NotmuchThread::str () { return "threadid:" + thread_id; } std::vector>> NotmuchThread::messages (Db * db) { std::vector>> msgs; db->on_thread (thread_id, [&](notmuch_thread_t * nm_thread) { notmuch_messages_t * qmessages; notmuch_message_t * message; function add_replies = [&] (notmuch_message_t * root, int lvl) { notmuch_messages_t * replies; notmuch_message_t * reply; for (replies = notmuch_message_get_replies (root); notmuch_messages_valid (replies); notmuch_messages_move_to_next (replies)) { reply = notmuch_messages_get (replies); msgs.push_back ( std::make_pair ( lvl, refptr (new NotmuchMessage (reply)))); add_replies (reply, lvl + 1); } }; for (qmessages = notmuch_thread_get_toplevel_messages (nm_thread); notmuch_messages_valid (qmessages); notmuch_messages_move_to_next (qmessages)) { message = notmuch_messages_get (qmessages); msgs.push_back ( std::make_pair ( 0, refptr (new NotmuchMessage (message)))); add_replies (message, 1); } /* check if all messages are shown: #243 * * if at some point notmuch fixes this bug this code should be * removed for those versions of notmuch */ if (msgs.size() != (unsigned int) notmuch_thread_get_total_messages (nm_thread)) { ustring mid; LOG (error) << "db: thread count not met! Brute force!"; for (qmessages = notmuch_thread_get_messages (nm_thread); notmuch_messages_valid (qmessages); notmuch_messages_move_to_next (qmessages)) { bool found; found = false; message = notmuch_messages_get (qmessages); mid = notmuch_message_get_message_id (message); LOG (error) << "mid: " << mid; for (unsigned int i = 0; i < msgs.size(); i ++) { if (msgs[i].second->mid == mid) { found = true; break; } } if ( ! found ) { LOG (error) << "mid: " << mid << " was missing!"; msgs.push_back ( std::make_pair ( 0, refptr (new NotmuchMessage (message)))); } } } }); return msgs; } /**************** * NotmuchMessage ****************/ NotmuchMessage::NotmuchMessage (notmuch_message_t * m) { load (m); } NotmuchMessage::NotmuchMessage (refptr m) { mid = m->mid; tags = m->tags; thread_id = m->tid; subject = m->subject; sender = m->sender; time = m->time; filename = m->fname; unread = false; attachment = false; flagged = false; for (auto &t : tags) { if (t == "unread") unread = true; if (t == "flagged") flagged = true; if (t == "attachment") attachment = true; if (attachment && unread && flagged) break; } } void NotmuchMessage::load (notmuch_message_t * m) { const char * c; c = notmuch_message_get_message_id (m); if (c == NULL) { LOG (error) << "nmm: got NULL for mid."; throw database_error ("nmm: got NULL mid"); } mid = c; c = notmuch_message_get_thread_id (m); if (c == NULL) { LOG (error) << "nmm: got NULL thread id."; throw database_error ("nmm: NULL thread_id"); } thread_id = c; c = notmuch_message_get_header (m, "Subject"); if (c != NULL) subject = c; c = notmuch_message_get_header (m, "From"); if (c != NULL) sender = c; time = notmuch_message_get_date (m); c = notmuch_message_get_filename (m); if (c != NULL) filename = c; unread = false; attachment = false; flagged = false; tags = get_tags (m); // sets up unread, attachment and flagged } vector NotmuchMessage::get_tags (notmuch_message_t * m) { notmuch_tags_t * tags; const char * tag; vector ttags; for (tags = notmuch_message_get_tags (m); notmuch_tags_valid (tags); notmuch_tags_move_to_next (tags)) { tag = notmuch_tags_get (tags); // tag belongs to tags if (tag != NULL) { if (string(tag) == "unread") { unread = true; } else if (string(tag) == "attachment") { attachment = true; } else if (string(tag) == "flagged") { flagged = true; } ttags.push_back (ustring(tag)); } } notmuch_tags_destroy (tags); sort (ttags.begin (), ttags.end ()); return ttags; } bool NotmuchMessage::matches (std::vector &k) { if (index_str.empty ()) { index_str = subject + sender; for (auto &t : tags) index_str += t; index_str += thread_id; index_str += mid; index_str = index_str.lowercase (); } /* match all keys (AND) */ return std::all_of (k.begin (), k.end (), [&] (ustring &kk) { return index_str.find (kk) != string::npos; }); } bool NotmuchMessage::refresh (Db * db) { /* do a new db query and update all fields */ bool in_notmuch = true; db->on_message (mid, [&](notmuch_message_t * m) { if (m != NULL) { in_notmuch = true; refresh (m); } else { in_notmuch = false; } }); return in_notmuch; } void NotmuchMessage::refresh (notmuch_message_t * msg) { load (msg); } /* tag actions */ bool NotmuchMessage::add_tag (Db * db, ustring tag) { LOG (debug) << "nm (" << mid << "): add tag: " << tag; tag = Db::sanitize_tag (tag); if (!Db::check_tag (tag)) { LOG (debug) << "nm (" << mid << "): error, invalid tag: " << tag; return false; } bool res = true; db->on_message (mid, [&](notmuch_message_t * message) { notmuch_status_t s = notmuch_message_add_tag (message, tag.c_str ()); if ((s == NOTMUCH_STATUS_SUCCESS) && db->maildir_synchronize_flags) { s = notmuch_message_tags_to_maildir_flags (message); } if (s == NOTMUCH_STATUS_SUCCESS) { res &= true; } else { LOG (error) << "nm: could not add tag: " << tag << " to message: " << mid; res = false; return; } /* if (res) { tags.push_back (tag); // add to global tag list if (find(db->tags.begin (), db->tags.end (), tag) == db->tags.end ()) { db->tags.push_back (tag); } } */ }); return res; } bool NotmuchMessage::remove_tag (Db * db, ustring tag) { LOG (debug) << "nm (" << mid << "): remove tag: " << tag; tag = Db::sanitize_tag (tag); if (!Db::check_tag (tag)) { LOG (debug) << "nm (" << mid << "): error, invalid tag: " << tag; return false; } bool res = true; db->on_message (mid, [&](notmuch_message_t * message) { notmuch_status_t s = notmuch_message_remove_tag (message, tag.c_str ()); if ((s == NOTMUCH_STATUS_SUCCESS) && db->maildir_synchronize_flags) { s = notmuch_message_tags_to_maildir_flags (message); } if (s == NOTMUCH_STATUS_SUCCESS) { res &= true; } else { LOG (error) << "nm: could not remove tag: " << tag << " from message: " << mid; res = false; return; } /* if (res) { tags.push_back (tag); // add to global tag list if (find(db->tags.begin (), db->tags.end (), tag) == db->tags.end ()) { db->tags.push_back (tag); } } */ }); return res; } void NotmuchMessage::emit_updated (Db * db) { astroid->actions->emit_message_updated (db, mid); } bool NotmuchMessage::in_query (Db * db, ustring query) { return db->message_in_query (query, mid); } ustring NotmuchMessage::str () { return "mid:" + mid; } /*************** * NotmuchItem ***************/ bool NotmuchItem::has_tag (ustring tag) { return (find(tags.begin (), tags.end (), tag) != tags.end ()); } /*************** * Exceptions ***************/ database_error::database_error (const char * w) : runtime_error (w) { } } astroid-0.14/src/db.hh000066400000000000000000000136451335422170400146120ustar00rootroot00000000000000# pragma once # include # include # include # include # include # include # include # include # include "astroid.hh" # include "config.hh" # include "proto.hh" /* there was a bit of a round-dance of with the _st versions of these returning * to the old name, but with different signature */ # if (LIBNOTMUCH_MAJOR_VERSION < 5) # define notmuch_query_search_threads(x,y) notmuch_query_search_threads_st(x,y) # define notmuch_query_count_threads(x,y) notmuch_query_count_threads_st(x,y) # define notmuch_query_search_messages(x,y) notmuch_query_search_messages_st(x,y) # define notmuch_query_count_messages(x,y) notmuch_query_count_messages_st(x,y) # endif # ifndef HAVE_NOTMUCH_INDEX_FILE # define notmuch_database_index_file(d,f,o,m) notmuch_database_add_message(d,f,m) # endif namespace Astroid { class NotmuchItem : public Glib::Object { public: ustring thread_id; ustring subject; bool unread; bool attachment; bool flagged; virtual bool refresh (Db *) = 0; std::vector tags; bool has_tag (ustring); virtual bool remove_tag (Db *, ustring) = 0; virtual bool add_tag (Db *, ustring) = 0; virtual void emit_updated (Db *) = 0; virtual ustring str () = 0; virtual bool matches (std::vector &k) = 0; virtual bool in_query (Db *, ustring) = 0; }; /* the notmuch message object should get by on the db only */ class NotmuchMessage : public NotmuchItem { public: NotmuchMessage (notmuch_message_t *); NotmuchMessage (refptr); ustring mid; ustring sender = ""; time_t time; ustring filename = ""; void load (notmuch_message_t *); bool refresh (Db *) override; void refresh (notmuch_message_t *); bool remove_tag (Db *, ustring) override; bool add_tag (Db *, ustring) override; void emit_updated (Db *) override; ustring str () override; bool matches (std::vector &k) override; bool in_query (Db *, ustring) override; private: std::vector get_tags (notmuch_message_t *); ustring index_str = ""; }; /* the notmuch thread object should get by on the db only */ class NotmuchThread : public NotmuchItem { public: NotmuchThread (notmuch_thread_t *); ~NotmuchThread (); time_t newest_date; time_t oldest_date; int total_messages; std::vector> authors; void load (notmuch_thread_t *); bool refresh (Db *) override; bool remove_tag (Db *, ustring) override; bool add_tag (Db *, ustring) override; void emit_updated (Db *) override; ustring str () override; bool matches (std::vector &k) override; bool in_query (Db *, ustring) override; std::vector>> messages (Db *); private: int check_total_messages (notmuch_thread_t *); std::vector> get_authors (notmuch_thread_t *); std::vector get_tags (notmuch_thread_t *); ustring index_str = ""; }; class Db { public: enum DbMode { DATABASE_READ_ONLY, DATABASE_READ_WRITE, }; Db (DbMode = DATABASE_READ_ONLY); ~Db (); void close (); void on_thread (ustring, std::function ); void on_message (ustring, std::function ); bool thread_in_query (ustring, ustring); bool message_in_query (ustring, ustring); unsigned long get_revision (); notmuch_database_t * nm_db; static std::vector tags; void load_tags (); static std::vector sent_tags; static std::vector draft_tags; static std::vector excluded_tags; ustring add_sent_message (ustring, std::vector); ustring add_draft_message (ustring); ustring add_message_with_tags (ustring fname, std::vector tags); bool remove_message (ustring); static ustring sanitize_tag (ustring); static bool check_tag (ustring); /* lock db: use if you need the db in external program and need * a specific lock */ static std::unique_lock acquire_rw_lock (); static void release_rw_lock (std::unique_lock &); static void acquire_ro_lock (); static void release_ro_lock (); static bool maildir_synchronize_flags; static void init (); static bfs::path path_db; private: /* * + We can have as many read-only db's open as we want. * * + There can only be one read-write db open at the time. * * + It is not possible to have read-only db's open when there is a * read-write db open. * * If you open one read-only db, and try to open a read-write db in the * same thread without closing the read-only db there will be a deadlock. * */ /* number of open read-only dbs, when 0 a read-write can be opened */ static std::atomic read_only_dbs_open; /* synchronizes openings, read-write dbs will lock this for * its entire lifespan. read-only, only locks it while incrementing * the read_only_dbs_open */ static std::mutex db_open; /* notify when read_only_dbs change */ static std::condition_variable dbs_open; std::unique_lock rw_lock; DbMode mode; bool open_db_write (bool); bool open_db_read_only (bool); bool closed = false; const int db_open_timeout = 120; // seconds const int db_open_delay = 1; // seconds }; /* exceptions */ class database_error : public std::runtime_error { public: database_error (const char *); }; } astroid-0.14/src/main.cc000066400000000000000000000002351335422170400151260ustar00rootroot00000000000000# include "astroid.hh" int main (int argc, char **argv) { Astroid::astroid = Astroid::Astroid::create (); return Astroid::astroid->run (argc, argv); } astroid-0.14/src/main_window.cc000066400000000000000000000557651335422170400165370ustar00rootroot00000000000000# include # include # include # include # include # include # ifndef DISABLE_VTE # include # endif # include # include "astroid.hh" # include "poll.hh" # include "main_window.hh" # include "modes/mode.hh" # include "modes/thread_index/thread_index.hh" # include "modes/saved_searches.hh" # include "modes/help_mode.hh" # include "modes/edit_message.hh" # include "modes/log_view.hh" # include "command_bar.hh" # include "actions/action.hh" # include "actions/action_manager.hh" # include "utils/resource.hh" using namespace std; namespace bfs = boost::filesystem; # ifndef DISABLE_VTE extern "C" { void mw_on_terminal_child_exit (VteTerminal * t, gint a, gpointer mw) { ((Astroid::MainWindow *) mw)->on_terminal_child_exit (t, a); } void mw_on_terminal_commit (VteTerminal * t, gchar ** tx, guint sz, gpointer mw) { ((Astroid::MainWindow *) mw)->on_terminal_commit (t, tx, sz); } # if VTE_CHECK_VERSION(0,48,0) void mw_on_terminal_spawn_callback (VteTerminal * t, GPid pid, GError * err, gpointer mw) { ((Astroid::MainWindow *) mw)->on_terminal_spawn_callback (t, pid, err); } # endif } # endif namespace Astroid { atomic MainWindow::nextid (0); int Notebook::icon_size = 42; Notebook::Notebook () { set_scrollable (true); set_action_widget (&icons, Gtk::PACK_END); icons.show_all (); astroid->poll->signal_poll_state ().connect ( sigc::mem_fun (this, &Notebook::poll_state_changed)); signal_size_allocate ().connect ( sigc::mem_fun (this, &Notebook::on_my_size_allocate)); poll_state_changed (astroid->poll->get_poll_state()); } void Notebook::on_my_size_allocate (Gtk::Allocation &) { icon_size = icons.get_height (); } void Notebook::poll_state_changed (bool state) { if (state && !spinner_on) { /* set up spinner for poll */ spinner_on = true; icons.pack_end (poll_spinner, true, true, 5); icons.show_all (); poll_spinner.start (); } else if (!state && spinner_on) { poll_spinner.stop (); icons.remove (poll_spinner); spinner_on = false; } } void Notebook::add_widget (Gtk::Widget * w) { icons.pack_start (*w, true, true, 5); w->show (); icons.show_all (); } void Notebook::remove_widget (Gtk::Widget * w) { icons.remove (*w); } MainWindow::MainWindow () { id = ++nextid; actions = astroid->actions; LOG (debug) << "mw: init, id: " << id; set_title (""); set_default_size (1200, 800); path icon = Resource (false, "ui/icons/icon_color.png").get_path (); try { refptr pixbuf = Gdk::Pixbuf::create_from_file (icon.c_str (), 42, 42, true); set_icon (pixbuf); } catch (Gdk::PixbufError &e) { LOG (error) << "mw: could not set icon: " << e.what (); } vbox.set_orientation (Gtk::ORIENTATION_VERTICAL); command.set_main_window (this); command.property_search_mode_enabled().signal_changed().connect( sigc::mem_fun (*this, &MainWindow::on_command_mode_changed) ); vbox.pack_start (command, false, true, 0); vbox.pack_start (notebook, Gtk::PACK_EXPAND_WIDGET, 0); /* set up yes-no asker */ rev_yes_no = Gtk::manage (new Gtk::Revealer ()); rev_yes_no->set_transition_type (Gtk::REVEALER_TRANSITION_TYPE_SLIDE_UP); Gtk::Box * rh = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); label_yes_no = Gtk::manage (new Gtk::Label ()); rh->pack_start (*label_yes_no, true, true, 5); label_yes_no->set_halign (Gtk::ALIGN_START); /* buttons */ Gtk::Button * yes = Gtk::manage (new Gtk::Button("_Yes")); Gtk::Button * no = Gtk::manage (new Gtk::Button("_No")); yes->set_use_underline (true); no->set_use_underline (true); rh->pack_start (*yes, false, true, 5); rh->pack_start (*no, false, true, 5); rev_yes_no->set_margin_top (0); rh->set_margin_bottom (5); rev_yes_no->add (*rh); rev_yes_no->set_reveal_child (false); vbox.pack_end (*rev_yes_no, false, true, 0); yes->signal_clicked().connect (sigc::mem_fun (this, &MainWindow::on_yes)); no->signal_clicked().connect (sigc::mem_fun (this, &MainWindow::on_no)); /* multi key handler */ rev_multi = Gtk::manage (new Gtk::Revealer ()); rev_multi->set_transition_type (Gtk::REVEALER_TRANSITION_TYPE_SLIDE_UP); Gtk::Box * rh_ = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); label_multi = Gtk::manage (new Gtk::Label ()); rh_->pack_start (*label_multi, true, true, 5); label_multi->set_halign (Gtk::ALIGN_START); rev_multi->set_margin_top (0); rh->set_margin_bottom (5); rev_multi->add (*rh_); rev_multi->set_reveal_child (false); vbox.pack_end (*rev_multi, false, true, 0); /* terminal */ # ifndef DISABLE_VTE rev_terminal = Gtk::manage (new Gtk::Revealer ()); rev_terminal->set_transition_type (Gtk::REVEALER_TRANSITION_TYPE_SLIDE_UP); rev_terminal->set_reveal_child (false); vbox.pack_end (*rev_terminal, false, true, 0); terminal_cwd = bfs::current_path (); # endif add (vbox); show_all_children (); /* connect keys */ add_events (Gdk::KEY_PRESS_MASK); signal_key_press_event ().connect ( sigc::mem_fun(*this, &MainWindow::on_key_press)); /* got focus, grab keys */ signal_focus_in_event ().connect ( sigc::mem_fun (this, &MainWindow::on_my_focus_in_event)); signal_focus_out_event ().connect ( sigc::mem_fun (this, &MainWindow::on_my_focus_out_event)); /* change page */ notebook.signal_switch_page ().connect ( sigc::mem_fun (this, &MainWindow::on_my_switch_page)); /* catch update title events */ update_title_dispatcher.connect ( sigc::mem_fun (this, &MainWindow::on_update_title)); /* catch window close events */ signal_delete_event ().connect ( sigc::mem_fun (this, &MainWindow::on_delete_event)); /* register keys {{{ */ keys.title = "MainWindow"; keys.register_key ("q", "main_window.quit_ask", "Quit astroid", [&] (Key) { if (astroid->get_windows().size () > 1) { /* other windows, just close this one */ quit (); } else { LOG (debug) << "really quit?: " << id; ask_yes_no ("Really quit?", [&](bool yes){ if (yes) quit (); }); } return true; }); keys.register_key ("Q", "main_window.quit", "Quit astroid (without asking)", [&] (Key) { quit (); return true; }); keys.register_key ("l", { "b" }, "main_window.next_page", "Next page", [&] (Key) { if (notebook.get_current_page () == (notebook.get_n_pages () - 1)) set_active (0); else set_active (notebook.get_current_page() + 1); return true; }); keys.register_key ("h", { "B" }, "main_window.previous_page", "Previous page", [&] (Key) { if (notebook.get_current_page() == 0) set_active (notebook.get_n_pages()-1); else set_active (notebook.get_current_page() - 1); return true; }); keys.register_key ("M-1", "main_window.jump_to_page_1", "Jump to page 1", bind (&MainWindow::jump_to_page, this, _1, 1)); keys.register_key ("M-2", "main_window.jump_to_page_2", "Jump to page 2", bind (&MainWindow::jump_to_page, this, _1, 2)); keys.register_key ("M-3", "main_window.jump_to_page_3", "Jump to page 3", bind (&MainWindow::jump_to_page, this, _1, 3)); keys.register_key ("M-4", "main_window.jump_to_page_4", "Jump to page 4", bind (&MainWindow::jump_to_page, this, _1, 4)); keys.register_key ("M-5", "main_window.jump_to_page_5", "Jump to page 5", bind (&MainWindow::jump_to_page, this, _1, 5)); keys.register_key ("M-6", "main_window.jump_to_page_6", "Jump to page 6", bind (&MainWindow::jump_to_page, this, _1, 6)); keys.register_key ("M-7", "main_window.jump_to_page_7", "Jump to page 7", bind (&MainWindow::jump_to_page, this, _1, 7)); keys.register_key ("M-8", "main_window.jump_to_page_8", "Jump to page 8", bind (&MainWindow::jump_to_page, this, _1, 8)); keys.register_key ("M-9", "main_window.jump_to_page_9", "Jump to page 9", bind (&MainWindow::jump_to_page, this, _1, 9)); keys.register_key ("M-0", "main_window.jump_to_page_0", "Jump to page 0", bind (&MainWindow::jump_to_page, this, _1, 0)); keys.register_key ("C-w", "main_window.close_page", "Close mode (or window if other windows are open)", [&] (Key) { close_page (); return true; }); keys.register_key ("C-W", "main_window.close_page_force", "Force close mode (or window if other windows are open)", [&] (Key) { close_page (true); return true; }); keys.register_key ("o", "main_window.search", "Search", [&] (Key) { enable_command (CommandBar::CommandMode::Search, "", NULL); return true; }); keys.register_key ("M-s", "main_window.show_saved_searches", "Show saved searches", [&] (Key) { add_mode (new SavedSearches (this)); return true; }); keys.register_key ("L", "main_window.search_tag", "Search for tag:", [&] (Key) { enable_command (CommandBar::CommandMode::Search, "tag:", NULL); return true; }); keys.register_key (Key (GDK_KEY_question), "main_window.show_help", "Show help", [&] (Key) { HelpMode * h = new HelpMode (this); h->show_help ((Mode*) notebook.get_nth_page (notebook.get_current_page())); add_mode (h); return true; }); keys.register_key ("z", "main_window.show_log", "Show log window", [&] (Key) { add_mode (new LogView (this)); return true; }); keys.register_key ("u", "main_window.undo", "Undo last action", [&] (Key) { actions->undo (); return true; }); keys.register_key ("m", "main_window.new_mail", "Compose new mail", [&] (Key) { add_mode (new EditMessage (this)); return true; }); keys.register_key ("P", "main_window.poll", "Start manual poll", [&] (Key) { astroid->poll->poll (); return true; }); keys.register_key ("M-p", "main_window.toggle_auto_poll", "Toggle auto poll", [&] (Key) { astroid->poll->toggle_auto_poll (); return true; }); keys.register_key ("C-c", "main_window.cancel_poll", "Cancel ongoing poll", [&] (Key) { astroid->poll->cancel_poll (); return true; }); keys.register_key ("C-o", "main_window.open_new_window", "Open new main window", [&] (Key) { astroid->open_new_window (); return true; }); keys.register_key ("\"", "main_window.clipboard", "Set target clipboard", [&] (Key k) { multi_key (clipboard, k); return true; }); clipboard.register_key ("+", "main_window.clipboard.clipboard", "Set target clipboard to CLIPBOARD (default)", [&] (Key) { astroid->clipboard_target = GDK_SELECTION_CLIPBOARD; return true; }); clipboard.register_key ("*", "main_window.clipboard.primary", "Set target clipboard to PRIMARY", [&] (Key) { astroid->clipboard_target = GDK_SELECTION_PRIMARY; return true; }); # ifndef DISABLE_VTE keys.register_key ("|", "main_window.open_terminal", "Open terminal", [&] (Key) { enable_terminal (); return true; }); # endif // }}} } bool MainWindow::jump_to_page (Key, int pg) { if (pg == 0) { pg = notebook.get_n_pages () - 1; } else { pg--; } LOG (debug) << "mw: swapping to page: " << pg; if (notebook.get_current_page () != pg) { set_active (pg); } return true; } bool MainWindow::is_current (Mode * m) { int i = notebook.get_current_page (); return (m == ((Mode *) notebook.get_nth_page (i))); } void MainWindow::set_title (ustring t) { ustring tt = ustring::compose( "Astroid (%1)", Astroid::version); if (t.size() > 0) { tt = t + " - " + tt; } Gtk::Window::set_title (tt); } void MainWindow::on_update_title () { int n = notebook.get_current_page(); if (n >= 0 && n <= notebook.get_n_pages()-1) { set_title (((Mode*) notebook.get_nth_page(n))->get_label()); } else { set_title (""); } } void MainWindow::enable_command (CommandBar::CommandMode m, ustring title, ustring cmd, function f) { ungrab_active (); command.enable_command (m, title, cmd, f); active_mode = Command; command.add_modal_grab (); } void MainWindow::enable_command (CommandBar::CommandMode m, ustring cmd, function f) { ungrab_active (); command.enable_command (m, cmd, f); active_mode = Command; command.add_modal_grab (); } void MainWindow::disable_command () { // hides itself command.remove_modal_grab(); set_active (current); active_mode = Window; } void MainWindow::on_command_mode_changed () { if (!command.get_search_mode()) { disable_command (); } } /* Terminal {{{ */ # ifndef DISABLE_VTE void MainWindow::enable_terminal () { rev_terminal->set_reveal_child (true); ungrab_active (); active_mode = Terminal; vte_term = vte_terminal_new (); gtk_container_add (GTK_CONTAINER(rev_terminal->gobj ()), vte_term); rev_terminal->show_all (); /* load font settings */ ustring font_desc_string = astroid->config("terminal").get ("font_description"); if (font_desc_string == "" || font_desc_string == "default") { auto settings = Gio::Settings::create ("org.gnome.desktop.interface"); font_desc_string = settings->get_string ("monospace-font-name"); } auto font_description = Pango::FontDescription (font_desc_string); /* https://developer.gnome.org/pangomm/stable/classPango_1_1FontDescription.html#details */ if (font_description.get_size () == 0) { LOG (warn) << "terminal.font_description: no size specified, expect weird behaviour."; } vte_terminal_set_font (VTE_TERMINAL(vte_term), font_description.gobj ()); vte_terminal_set_size (VTE_TERMINAL (vte_term), 1, astroid->config("terminal").get ("height")); /* start shell */ char * shell = vte_get_user_shell (); char * args[2] = { shell, NULL }; char * envs[1] = { NULL }; LOG (info) << "mw: starting terminal..: " << shell; if (!bfs::exists (terminal_cwd)) { terminal_cwd = bfs::current_path (); } # if VTE_CHECK_VERSION(0,48,0) vte_terminal_spawn_async (VTE_TERMINAL(vte_term), VTE_PTY_DEFAULT, terminal_cwd.c_str(), args, envs, G_SPAWN_DEFAULT, NULL, NULL, NULL, -1, NULL, mw_on_terminal_spawn_callback, this); # else GError * err = NULL; vte_terminal_spawn_sync (VTE_TERMINAL(vte_term), VTE_PTY_DEFAULT, terminal_cwd.c_str(), args, envs, G_SPAWN_DEFAULT, NULL, NULL, &terminal_pid, NULL, (err = NULL, &err)); on_terminal_spawn_callback (VTE_TERMINAL(vte_term), terminal_pid, err); # endif gtk_widget_grab_focus (vte_term); gtk_grab_add (vte_term); } void MainWindow::on_terminal_spawn_callback (VteTerminal * vte_term, GPid pid, GError * err) { if (err) { LOG (error) << "mw: terminal: " << err->message; disable_terminal (); } else { terminal_pid = pid; LOG (debug) << "mw: terminal started: " << terminal_pid; g_signal_connect (vte_term, "child-exited", G_CALLBACK (mw_on_terminal_child_exit), (gpointer) this); g_signal_connect (vte_term, "commit", G_CALLBACK (mw_on_terminal_commit), (gpointer) this); } } void MainWindow::disable_terminal () { LOG (info) << "mw: disabling terminal.."; rev_terminal->set_reveal_child (false); set_active (current); active_mode = Window; gtk_grab_remove (vte_term); gtk_widget_destroy (vte_term); } void MainWindow::on_terminal_child_exit (VteTerminal *, gint) { LOG (info) << "mw: terminal exited (cwd: " << terminal_cwd.c_str () << ")"; disable_terminal (); } void MainWindow::on_terminal_commit (VteTerminal *, gchar **, guint) { bfs::path pth = bfs::path(ustring::compose ("/proc/%1/cwd", terminal_pid).c_str ()); if (bfs::exists (pth)) { terminal_cwd = bfs::canonical (pth); } } # endif // }}} void MainWindow::quit () { LOG (info) << "mw: quit: " << id; in_quit = true; /* focus out */ ungrab_active (); for (int c = notebook.get_n_pages () -1; c >= 0; c--) { /* ((Mode*) notebook.get_nth_page (c))->pre_close (); */ del_mode (c); } close (); // Gtk::Window::close () } bool MainWindow::on_delete_event (GdkEventAny *) { if (!in_quit) quit (); return false; } void MainWindow::on_yes () { answer_yes_no (true); } void MainWindow::on_no () { answer_yes_no (false); } bool MainWindow::mode_key_handler (GdkEventKey * event) { if (yes_no_waiting) { switch (event->keyval) { case GDK_KEY_Y: case GDK_KEY_y: answer_yes_no (true); return true; case GDK_KEY_Escape: case GDK_KEY_N: case GDK_KEY_n: answer_yes_no (false); return true; } /* swallow all other keys */ return true; } else if (multi_waiting) { bool res = false; switch (event->keyval) { case GDK_KEY_Escape: { res = true; } break; default: { res = multi_keybindings.handle (event); } break; } /* close rev */ multi_waiting = !res; if (res) { rev_multi->set_reveal_child (false); multi_keybindings.clear (); } return true; // swallow all keys # ifndef DISABLE_VTE } else if (active_mode == Terminal) { return true; } # else } # endif return false; } bool MainWindow::on_key_press (GdkEventKey * event) { if (mode_key_handler (event)) return true; if (active_mode == Command) { command.command_handle_event (event); return true; } return keys.handle (event); } void MainWindow::add_mode (Mode * m) { m = Gtk::manage (m); Gtk::Widget * w = m; int n = notebook.insert_page ((*w), m->tab_label, current+1); notebook.show_all (); set_active (n); } void MainWindow::ask_yes_no ( ustring question, std::function closure) { using std::endl; LOG (info) << "mw: " << question; if (yes_no_waiting || multi_waiting) { LOG (warn) << "mw: already waiting for answer to previous question, discarding this one."; return; } yes_no_waiting = true; yes_no_closure = closure; rev_yes_no->set_reveal_child (true); label_yes_no->set_text (question + " [y/n]"); } void MainWindow::answer_yes_no (bool yes) { using std::endl; rev_yes_no->set_reveal_child (false); if (yes) { LOG (info) << "mw: yes-no: got yes!"; } else { LOG (info) << "mw: yes-no: got no :/"; } if (yes_no_waiting) { if (yes_no_closure != NULL) { yes_no_closure (yes); } } yes_no_closure = NULL; yes_no_waiting = false; } bool MainWindow::multi_key (Keybindings & kb, Key /* k */) { using std::endl; LOG (info) << "mw: starting multi key."; if (yes_no_waiting || multi_waiting) { LOG (warn) << "mw: already waiting for answer to previous question, discarding this one."; return true; } multi_waiting = true; multi_keybindings = kb; rev_multi->set_reveal_child (true); label_multi->set_markup (kb.short_help ()); return true; } void MainWindow::del_mode (int c) { // LOG (debug) << "mw: del mode: " << c; if (notebook.get_n_pages() > 1) { if (c >= 0) { if (c == 0) { set_active (c + 1); } else { set_active (c - 1); } ((Mode*) notebook.get_nth_page (c))->pre_close (); notebook.remove_page (c); // this should free the widget (?) } else { LOG (warn) << "mw: attempt to remove negative page"; } } else { if (!in_quit && astroid->get_windows().size () > 1) { LOG (debug) << "mw: other windows available, closing this one."; quit (); } } } void MainWindow::close_page (Mode * m, bool force) { m->close (force); } void MainWindow::close_page (bool force) { int c = notebook.get_current_page (); ((Mode*) notebook.get_nth_page (c))->close (force); } void MainWindow::ungrab_active () { if (current >= 0) { if (notebook.get_n_pages() > current) { //LOG (debug) << "mw: release modal, from: " << current; ((Mode*) notebook.get_nth_page (current))->release_modal(); active = false; } } } void MainWindow::on_my_switch_page (Gtk::Widget * /* w */, guint no) { grab_active (no); } void MainWindow::grab_active (int n) { //LOG (debug) << "mw: set active: " << n << ", current: " << current; ungrab_active (); //LOG (debug) << "mw: grab modal to: " << n; if (_has_focus) { /* we have focus */ ((Mode*) notebook.get_nth_page (n))->grab_modal(); } else { LOG (debug) << "mw: does not have focus, will not grab modal."; } current = n; active = true; on_update_title (); } void MainWindow::set_active (int n) { LOG (debug) << "mw: set active: " << n << ", current: " << current; if (n >= 0 && n <= notebook.get_n_pages()-1) { if (notebook.get_current_page() != n) { notebook.set_current_page (n); } grab_active (n); } else { // LOG (debug) << "mw: set active: page is out of range: " << n; on_update_title (); } } bool MainWindow::on_my_focus_in_event (GdkEventFocus * /* event */) { _has_focus = true; if (!in_quit && active) set_active (current); LOG (debug) << "mw: focus-in: " << id << " active: " << active << ", in_quit: " << in_quit; return false; } bool MainWindow::on_my_focus_out_event (GdkEventFocus * /* event */) { //LOG (debug) << "mw: focus-out: " << id; _has_focus = false; if ((current < notebook.get_n_pages ()) && (current >= 0)) ((Mode*) notebook.get_nth_page (current))->release_modal(); return false; } } astroid-0.14/src/main_window.hh000066400000000000000000000073221335422170400165330ustar00rootroot00000000000000# pragma once # include # include # include # include # include # ifndef DISABLE_VTE # include # endif # include # include "proto.hh" # include "command_bar.hh" # include "modes/mode.hh" # include "modes/keybindings.hh" # include "actions/action_manager.hh" namespace bfs = boost::filesystem; # ifndef DISABLE_VTE extern "C" { void mw_on_terminal_child_exit (VteTerminal *, gint, gpointer); void mw_on_terminal_commit (VteTerminal *, gchar **, guint, gpointer); # if VTE_CHECK_VERSION(0,48,0) void mw_on_terminal_spawn_callback (VteTerminal *, GPid pid, GError *, gpointer); # endif } # endif namespace Astroid { class Notebook : public Gtk::Notebook { public: Notebook (); void add_widget (Gtk::Widget *); void remove_widget (Gtk::Widget *); /* height of action widget */ static int icon_size; private: Gtk::HBox icons; Gtk::Spinner poll_spinner; bool spinner_on = false; void poll_state_changed (bool); void on_my_size_allocate (Gtk::Allocation &); }; class MainWindow : public Gtk::Window { public: MainWindow (); int id; bool on_key_press (GdkEventKey *); bool mode_key_handler (GdkEventKey *); Gtk::Box vbox; Notebook notebook; typedef enum _active { Window, Command, # ifndef DISABLE_VTE Terminal, # endif } Active; /* command bar */ CommandBar command; Active active_mode = Window; void enable_command (CommandBar::CommandMode, ustring, std::function); void enable_command (CommandBar::CommandMode, ustring, ustring, std::function); void disable_command (); void on_command_mode_changed (); /* terminal */ # ifndef DISABLE_VTE GPid terminal_pid; bfs::path terminal_cwd; void enable_terminal (); void disable_terminal (); void on_terminal_child_exit (VteTerminal *, gint); void on_terminal_commit (VteTerminal *, gchar **, guint); void on_terminal_spawn_callback (VteTerminal *, GPid, GError *); private: Gtk::Revealer * rev_terminal; GtkWidget * vte_term; # endif public: /* actions */ ActionManager * actions; int current = -1; bool active = false; void add_mode (Mode *); void del_mode (int); void close_page (bool = false); void close_page (Mode *, bool = false); bool jump_to_page (Key, int); bool is_current (Mode *); void ungrab_active (); void grab_active (int); void set_active (int); void set_title (ustring); void quit (); bool on_delete_event (GdkEventAny *); Glib::Dispatcher update_title_dispatcher; Keybindings keys; Keybindings clipboard; private: bool on_my_focus_in_event (GdkEventFocus *); bool on_my_focus_out_event (GdkEventFocus *); bool _has_focus = false; void on_my_switch_page (Gtk::Widget *, guint); void on_update_title (); static std::atomic nextid; bool in_quit = false; /* YES-NO questions */ Gtk::Revealer * rev_yes_no; Gtk::Label * label_yes_no; bool yes_no_waiting = false; std::function yes_no_closure = NULL; void answer_yes_no (bool); void on_yes (); void on_no (); /* multi key */ Gtk::Revealer * rev_multi; Gtk::Label * label_multi; bool multi_waiting = false; Keybindings multi_keybindings; public: void ask_yes_no (ustring, std::function); bool multi_key (Keybindings &, Key); }; } astroid-0.14/src/message_thread.cc000066400000000000000000000616121335422170400171630ustar00rootroot00000000000000# include # include # include # include # include "utils/gmime/gmime-compat.h" # include # include "astroid.hh" # include "db.hh" # include "message_thread.hh" # include "chunk.hh" # include "utils/utils.hh" # include "utils/date_utils.hh" # include "utils/address.hh" # include "utils/ustring_utils.hh" # include "utils/vector_utils.hh" # include "actions/action_manager.hh" using namespace std; using namespace boost::filesystem; namespace Astroid { /* -------- * Message * -------- */ Message::Message () { in_notmuch = false; has_file = false; missing_content = false; astroid->actions->signal_message_updated ().connect ( sigc::mem_fun (this, &Message::on_message_updated)); } Message::Message (ustring _fname) : Message () { LOG (info) << "msg: loading message from file: " << fname; fname = _fname; has_file = true; load_message_from_file (fname); } Message::Message (ustring _mid, ustring _fname) : Message () { mid = _mid; fname = _fname; LOG (info) << "msg: loading message from file (mid supplied): " << fname; has_file = true; load_message_from_file (fname); } Message::Message (notmuch_message_t *message, int _level) : Message () { /* The caller must make sure the message pointer * is valid and not destroyed while initializing */ mid = notmuch_message_get_message_id (message); tid = notmuch_message_get_thread_id (message); in_notmuch = true; has_file = true; level = _level; nmmsg = refptr (new NotmuchMessage (message)); LOG (info) << "msg: loading mid: " << mid; fname = nmmsg->filename; LOG (info) << "msg: filename: " << fname; load_message_from_file (fname); tags = nmmsg->tags; } Message::Message (refptr _msg, int _level) : Message () { in_notmuch = true; nmmsg = _msg; mid = nmmsg->mid; tid = nmmsg->thread_id; fname = nmmsg->filename; has_file = true; level = _level; LOG (info) << "msg: loading mid: " << mid; LOG (info) << "msg: filename: " << fname; load_message_from_file (fname); tags = nmmsg->tags; } Message::Message (GMimeMessage * _msg) { LOG (info) << "msg: loading message from GMimeMessage."; in_notmuch = false; has_file = false; missing_content = false; load_message (_msg); } Message::~Message () { LOG (debug) << "ms: deconstruct"; if (message) g_object_unref (message); } void Message::on_message_updated (Db * db, ustring _mid) { if (in_notmuch && (mid == _mid)) { /* IMPORTANT: the message source is not re-loaded since this could change * the message structure. See note in action manager. */ refresh (db); emit_message_changed (db, MessageChangedEvent::MESSAGE_TAGS_CHANGED); } } void Message::refresh (Db * db) { db->on_message (mid, [&](notmuch_message_t * msg) { if (msg != NULL) { in_notmuch = true; if (nmmsg) { nmmsg->refresh (msg); } else { nmmsg = refptr (new NotmuchMessage (msg)); } fname = nmmsg->filename; tags = nmmsg->tags; } else { fname = ""; has_file = false; in_notmuch = false; missing_content = true; } }); } /* message changed signal*/ Message::type_signal_message_changed Message::signal_message_changed () { return m_signal_message_changed; } void Message::emit_message_changed (Db * db, Message::MessageChangedEvent me) { LOG (info) << "message: emitted changed signal for message: " << mid << ": " << me; m_signal_message_changed.emit (db, this, me); } void Message::load_message_from_file (ustring _fname) { fname = _fname; if (!exists (fname.c_str())) { LOG (error) << "failed to open file: " << fname << ", it does not exist!"; has_file = false; missing_content = true; if (in_notmuch) { LOG (warn) << "loading cache for missing file from notmuch"; load_notmuch_cache (); } else { LOG (error) << "message is not in database and not on disk."; string error_s = "failed to open file: " + fname; throw message_error (error_s.c_str()); } return; } else { GError *err = NULL; (void) (err); // not used in GMime 2. GMimeStream * stream = g_mime_stream_file_open (fname.c_str(), "r", &err); g_mime_stream_file_set_owner (GMIME_STREAM_FILE(stream), TRUE); if (stream == NULL) { LOG (error) << "failed to open file: " << fname << " (unspecified error)"; has_file = false; missing_content = true; if (in_notmuch) { LOG (warn) << "loading cache for missing file from notmuch"; load_notmuch_cache (); } else { LOG (error) << "tried to open disk file, but failed, message is not in database either."; string error_s = "failed to open file: " + fname; throw message_error (error_s.c_str()); } return; } GMimeParser * parser = g_mime_parser_new_with_stream (stream); GMimeMessage * _message = g_mime_parser_construct_message (parser, g_mime_parser_options_get_default ()); load_message (_message); g_object_unref (_message); // is reffed in load_message g_object_unref (stream); // reffed from parser g_object_unref (parser); // reffed from message } } void Message::load_notmuch_cache () { Db db (Db::DATABASE_READ_ONLY); db.on_message (mid, [&](notmuch_message_t * msg) { /* read header fields */ const char *c; c = notmuch_message_get_header (msg, "From"); if (c != NULL) sender = ustring (c); else sender = ""; c = notmuch_message_get_header (msg, "Subject"); if (c != NULL) subject = ustring (c); else subject = ""; c = notmuch_message_get_header (msg, "In-Reply-To"); if (c != NULL) inreplyto = ustring (c); else inreplyto = ""; c = notmuch_message_get_header (msg, "References"); if (c != NULL) references = ustring (c); else references = ""; c = notmuch_message_get_header (msg, "Reply-To"); if (c != NULL) reply_to = ustring (c); else reply_to = ""; time = notmuch_message_get_date (msg); }); } void Message::load_message (GMimeMessage * _msg) { /* Load message with parts. * * example: * https://git.gnome.org/browse/gmime/tree/examples/basic-example.c * * * Do this a bit like sup: * - build up a tree/list of chunks that are viewable, except siblings. * - show text and html parts * - show a gallery of attachments at the bottom * */ message = _msg; g_object_ref (message); const char *c; if (mid == "") { c = g_mime_message_get_message_id (message); if (c != NULL) { mid = ustring (c); } else { mid = UstringUtils::random_alphanumeric (10); mid = ustring::compose ("%1-astroid-missing-mid", mid); LOG (warn) << "mt: message does not have a message id, inventing one: " << mid; } } /* read header fields */ AddressList _s (g_mime_message_get_from (message)); sender = _s.str (); c = g_mime_message_get_subject (message); if (c != NULL) subject = ustring (c); else subject = ""; c = g_mime_object_get_header (GMIME_OBJECT(message), "In-Reply-To"); if (c != NULL) inreplyto = ustring (c); else inreplyto = ""; c = g_mime_object_get_header (GMIME_OBJECT(message), "References"); if (c != NULL) references = ustring (c); else references = ""; c = g_mime_object_get_header (GMIME_OBJECT(message), "Reply-To"); if (c != NULL) reply_to = ustring (c); else reply_to = ""; GDateTime * dt = g_mime_message_get_date (message); if (dt) { time = g_date_time_to_unix (dt); } else { time = 0; } root = refptr(new Chunk (g_mime_message_get_mime_part (message))); } ustring Message::viewable_text (bool html, bool fallback_html) { /* build message body: * html: output html (using gmimes html filter) * */ if (missing_content) { LOG (warn) << "message: missing content, no text."; return ""; } if (html && fallback_html) { throw logic_error ("message: html implies fallback_html"); } ustring body; function< void (refptr) > app_body = [&] (refptr c) { /* check if we're the preferred sibling */ bool use = false; if (c->siblings.size() >= 1) { if (c->preferred) { use = true; } else { /* check if there are any other preferred */ if (all_of (c->siblings.begin (), c->siblings.end (), [](refptr c) { return (!c->preferred); })) { use = true; } else { use = false; } } } else { use = true; } if (use) { if (c->viewable && (c->preferred || html || fallback_html)) { body += c->viewable_text (html); } for_each (c->kids.begin(), c->kids.end (), app_body); } }; app_body (root); return body; } vector> Message::attachments () { /* return a flat vector of attachments */ vector> attachments; function< void (refptr) > app_attachment = [&] (refptr c) { if (c->attachment) attachments.push_back (c); for_each (c->kids.begin(), c->kids.end (), app_attachment); }; if (root) app_attachment (root); return attachments; } vector> Message::all_parts () { vector> parts; function< void (refptr) > app_part = [&] (refptr c) { parts.push_back (c); for_each (c->kids.begin(), c->kids.end (), app_part); }; if (root) app_part (root); return parts; } ustring Message::safe_mid () { ustring _m; _m = Glib::Markup::escape_text (mid); _m = UstringUtils::replace (_m, ",", "_"); return _m; } refptr Message::get_chunk_by_id (int id) { if (root->id == id) { return root; } else { return root->get_by_id (id); } } vector> Message::mime_messages () { /* return a flat vector of mime messages */ vector> mime_messages; function< void (refptr) > app_mm = [&] (refptr c) { if (c->mime_message) mime_messages.push_back (c); if (!c->mime_message) for_each (c->kids.begin(), c->kids.end (), app_mm); }; if (root) app_mm (root); return mime_messages; } vector> Message::mime_messages_and_attachments () { /* return a flat vector of mime messages and attachments in correct order */ vector> parts; function< void (refptr) > app_part = [&] (refptr c) { if (c->mime_message || c->attachment) parts.push_back (c); /* do not descend for mime messages */ if (!c->mime_message) for_each (c->kids.begin(), c->kids.end (), app_part); }; if (root) app_part (root); return parts; } ustring Message::date () { if (missing_content) { ustring s; Db db (Db::DATABASE_READ_ONLY); db.on_message (mid, [&](notmuch_message_t * msg) { /* read header field */ const char *c; c = notmuch_message_get_header (msg, "Date"); if (c != NULL) s = ustring (c); else s = ""; }); return s; } else { const char * c; ustring date; c = g_mime_object_get_header (GMIME_OBJECT(message), "Date"); if (c != NULL) date = ustring (c); else date = ""; return date; } } ustring Message::date_asctime () { return Date::asctime (time); } ustring Message::pretty_date () { return Date::pretty_print (time); } ustring Message::pretty_verbose_date (bool include_short) { return Date::pretty_print_verbose (time, include_short); } InternetAddressList * Message::to () { if (missing_content) { ustring s; Db db (Db::DATABASE_READ_ONLY); db.on_message (mid, [&](notmuch_message_t * msg) { /* read header field */ const char *c; c = notmuch_message_get_header (msg, "To"); if (c != NULL) s = ustring (c); else s = ""; }); LOG (debug) << "message: cached value: " << s; if (s.empty ()) { return internet_address_list_new (); } else { return internet_address_list_parse (NULL, s.c_str()); } } else { return g_mime_message_get_addresses (message, GMIME_ADDRESS_TYPE_TO); } } InternetAddressList * Message::cc () { if (missing_content) { ustring s; Db db (Db::DATABASE_READ_ONLY); db.on_message (mid, [&](notmuch_message_t * msg) { /* read header field */ const char *c; c = notmuch_message_get_header (msg, "Cc"); if (c != NULL) s = ustring (c); else s = ""; }); LOG (debug) << "message: cached value: " << s; if (s.empty ()) { return internet_address_list_new (); } else { return internet_address_list_parse (NULL, s.c_str()); } } else { return g_mime_message_get_addresses (message, GMIME_ADDRESS_TYPE_CC); } } InternetAddressList * Message::bcc () { if (missing_content) { ustring s; Db db (Db::DATABASE_READ_ONLY); db.on_message (mid, [&](notmuch_message_t * msg) { /* read header field */ const char *c; c = notmuch_message_get_header (msg, "Bcc"); if (c != NULL) s = ustring (c); else s = ""; }); LOG (debug) << "message: cached value: " << s; if (s.empty ()) { return internet_address_list_new (); } else { return internet_address_list_parse (NULL, s.c_str()); } } else { return g_mime_message_get_addresses (message, GMIME_ADDRESS_TYPE_BCC); } } InternetAddressList * Message::other_to () { InternetAddressList * ret = internet_address_list_new (); if (missing_content) { Db db (Db::DATABASE_READ_ONLY); db.on_message (mid, [&](notmuch_message_t * msg) { const char *c; c = notmuch_message_get_header (msg, "Delivered-To"); if (c != NULL && strlen(c)) { ustring s = c; internet_address_list_append(ret, internet_address_list_parse (NULL, s.c_str())); } c = notmuch_message_get_header (msg, "Envelope-To"); if (c != NULL && strlen(c)) { ustring s = c; internet_address_list_append(ret, internet_address_list_parse (NULL, s.c_str())); } c = notmuch_message_get_header (msg, "X-Original-To"); if (c != NULL && strlen(c)) { ustring s = c; internet_address_list_append(ret, internet_address_list_parse (NULL, s.c_str())); } }); } else { const char *c; c = g_mime_object_get_header (GMIME_OBJECT(message), "Delivered-To"); if (c != NULL && strlen(c)) { ustring s = c; internet_address_list_append(ret, internet_address_list_parse (NULL, s.c_str())); } c = g_mime_object_get_header (GMIME_OBJECT(message), "Envelope-To"); if (c != NULL && strlen(c)) { ustring s = c; internet_address_list_append(ret, internet_address_list_parse (NULL, s.c_str())); } c = g_mime_object_get_header (GMIME_OBJECT(message), "X-Original-To"); if (c != NULL && strlen(c)) { ustring s = c; internet_address_list_append(ret, internet_address_list_parse (NULL, s.c_str())); } } return ret; } AddressList Message::list_post () { if (missing_content) { return AddressList (); } else { const char * c = g_mime_object_get_header (GMIME_OBJECT(message), "List-Post"); if (c == NULL) return AddressList (); ustring _list = ustring (c); auto list = VectorUtils::split_and_trim (_list, " "); AddressList al; for (auto &a : list) { while (*a.begin () == '<') a.erase (a.begin()); while (*(--a.end()) == '>') a.erase (--a.end ()); ustring scheme = Glib::uri_parse_scheme (a); if (scheme == "mailto") { a = a.substr (scheme.length ()+1, a.length () - scheme.length()-1); UstringUtils::trim (a); al += Address(a); } } return al; } } AddressList Message::all_to_from () { return ( AddressList(to()) + AddressList(cc()) + AddressList(bcc()) + AddressList(other_to()) + Address(sender) ); } ustring Message::get_filename (ustring appendix) { ustring _f; if (!missing_content) { _f = root->get_filename (); } else { _f = ""; } if (_f.size () == 0) { _f = Utils::safe_fname (subject); if (is_patch ()) { if (_f.substr(0,5).uppercase() == "PATCH") _f.erase (0, 5); // safe_fname will catch any double _ if (appendix.size ()) { _f += "-" + appendix; } _f += ".patch"; } else { if (appendix.size ()) { _f += "-" + appendix; } _f += ".eml"; } } _f = Utils::safe_fname (_f); return _f; } GMimeMessage * Message::decrypt () { Crypto c ("application/pgp-encrypted"); return c.decrypt_message (message); } void Message::save () { if (missing_content) { LOG (error) << "message: missing content, can't save."; return; } Gtk::FileChooserDialog dialog ("Save message..", Gtk::FILE_CHOOSER_ACTION_SAVE); dialog.add_button ("_Cancel", Gtk::RESPONSE_CANCEL); dialog.add_button ("_Select", Gtk::RESPONSE_OK); dialog.set_do_overwrite_confirmation (true); dialog.set_current_folder (astroid->runtime_paths ().save_dir.c_str ()); ustring _f = get_filename (); dialog.set_current_name (_f); int result = dialog.run (); switch (result) { case (Gtk::RESPONSE_OK): { string fname = dialog.get_filename (); save_to (fname); astroid->runtime_paths ().save_dir = bfs::path (dialog.get_current_folder ()); break; } default: { LOG (debug) << "msg: save: cancelled."; } } } void Message::save_to (ustring tofname) { // apparently boost needs to be compiled with -std=c++0x // https://svn.boost.org/trac/boost/ticket/6124 // copy_file ( path (fname), path (tofname) ); if (missing_content) { LOG (error) << "message: missing content, can't save."; return; } path to (tofname.c_str()); if (is_directory (to)) { ustring nfname = get_filename (); path newto = to / path (nfname.c_str()); while (exists (newto)) { nfname = get_filename (UstringUtils::random_alphanumeric (5)); newto = to / path(nfname.c_str ()); } to = newto; } tofname = ustring (to.c_str()); LOG (info) << "msg: saving to: " << tofname; if (has_file) { std::ifstream src (fname, ios::binary); std::ofstream dst (tofname, ios::binary); if (!src.good () || !dst.good ()) { LOG (error) << "msg: failed writing to: " << tofname; return; } dst << src.rdbuf (); } else { /* write GMimeMessage */ FILE * MessageFile = fopen (tofname.c_str(), "w"); GMimeStream * stream = g_mime_stream_file_new(MessageFile); g_mime_object_write_to_stream (GMIME_OBJECT(message), NULL, stream); g_object_unref (stream); } } refptr Message::contents () { if (missing_content) { return Glib::ByteArray::create (); } else { return root->contents (); } } refptr Message::raw_contents () { time_t t0 = clock (); // https://github.com/skx/lumail/blob/master/util/attachments.c GMimeStream * mem = g_mime_stream_mem_new (); g_mime_object_write_to_stream (GMIME_OBJECT(message), NULL, mem); g_mime_stream_flush (mem); GByteArray * res = g_mime_stream_mem_get_byte_array (GMIME_STREAM_MEM (mem)); auto data = Glib::ByteArray::create (); if (res != NULL) { data->append (res->data, res->len); } g_object_unref (mem); LOG (info) << "message: contents: loaded " << data->size () << " bytes in " << ( (clock () - t0) * 1000.0 / CLOCKS_PER_SEC ) << " ms."; return data; } bool Message::is_patch () { return ( (subject.substr(0,3).uppercase() != "RE:") && Glib::Regex::match_simple ("\\[PATCH.*\\]", subject)); } bool Message::is_different_subject () { return subject_is_different; } bool Message::is_list_post () { const char * c = g_mime_object_get_header (GMIME_OBJECT(message), "List-Post"); return (c != NULL); } bool Message::is_encrypted () { return has_tag ("encrypted"); } bool Message::is_signed () { return has_tag ("signed"); } bool Message::has_tag (ustring t) { if (nmmsg) return nmmsg->has_tag (t); else return false; } /************ * exceptions * ********** */ message_error::message_error (const char * w) : runtime_error (w) { } /* -------- * MessageThread * -------- */ MessageThread::MessageThread () { in_notmuch = false; } MessageThread::MessageThread (refptr _nmt) : MessageThread () { thread = _nmt; in_notmuch = true; astroid->actions->signal_thread_updated ().connect ( sigc::mem_fun (this, &MessageThread::on_thread_updated)); astroid->actions->signal_thread_changed ().connect ( sigc::mem_fun (this, &MessageThread::on_thread_changed)); } MessageThread::~MessageThread () { LOG (debug) << "mt: destruct."; } ustring MessageThread::get_subject () { return subject; } void MessageThread::set_first_subject (ustring s) { first_subject = s; first_subject = UstringUtils::replace (first_subject, "Re:", ""); UstringUtils::trim (first_subject); first_subject_set = true; if (messages.size () == 1) { messages[0]->subject_is_different = true; } for (auto &m : messages) { m->subject_is_different = subject_is_different (m->subject); } } bool MessageThread::subject_is_different (ustring s) { s = UstringUtils::replace (s, "Re:", ""); UstringUtils::trim (s); return !(s == first_subject); } void MessageThread::on_thread_updated (Db * db, ustring tid) { if (in_notmuch && tid == thread->thread_id) { in_notmuch = thread->refresh (db); if (in_notmuch) { /* TODO: * * get new message list * * update existing * * add new * * remove old * auto new_messages = thread->messages (db); */ for (auto &m : messages) { m->on_message_updated (db, m->mid); } } } } void MessageThread::on_thread_changed (Db * db, ustring tid) { if (in_notmuch && tid == thread->thread_id) { thread->refresh (db); } } bool MessageThread::has_tag (ustring t) { if (thread) return thread->has_tag (t); else return false; } void MessageThread::load_messages (Db * db) { /* update values */ subject = thread->subject; set_first_subject (thread->subject); for (auto &mm : thread->messages (db)) { auto m = refptr(new Message (mm.second, mm.first)); if (!first_subject_set) set_first_subject(m->subject); m->subject_is_different = subject_is_different (m->subject); messages.push_back (m); } } void MessageThread::add_message (ustring fname) { auto m = refptr(new Message (fname)); if (!first_subject_set) set_first_subject(m->subject); m->subject_is_different = subject_is_different (m->subject); messages.push_back (m); } void MessageThread::add_message (refptr c) { if (!c->mime_message) { LOG (error) << "mt: can only add message chunks that are GMimeMessages."; throw runtime_error ("mt: can only add message chunks that are GMimeMessages"); } messages.push_back (c->get_mime_message ()); if (subject == "") { set_first_subject ((*(--messages.end()))->subject); subject = first_subject; } } std::vector> MessageThread::messages_by_time () { auto f = [&] (refptr a, refptr b) { return a->time < b->time; }; std::vector> sorted_messages = messages; std::sort (sorted_messages.begin (), sorted_messages.end (), f); return sorted_messages; } } astroid-0.14/src/message_thread.hh000066400000000000000000000077411335422170400172000ustar00rootroot00000000000000# pragma once # include # include # include "proto.hh" # include "astroid.hh" # include "utils/address.hh" namespace Astroid { class Message : public Glib::Object { friend MessageThread; public: Message (); Message (ustring _fname); Message (ustring _mid, ustring _fname); Message (notmuch_message_t *, int _level); Message (GMimeMessage *); Message (refptr, int _level = 0); ~Message (); ustring fname; ustring mid; ustring safe_mid (); ustring tid; refptr nmmsg; bool in_notmuch; bool has_file; bool missing_content; // file does not have a gmimeobject nor a file, use // notmuch cache. essentially means that the // db is out of sync. ustring get_filename (ustring appendix = ""); void load_message_from_file (ustring); void load_message (GMimeMessage *); void load_notmuch_cache (); void on_message_updated (Db *, ustring); void refresh (Db *); GMimeMessage * message = NULL; refptr root; int level = 0; ustring sender; ustring subject; InternetAddressList * to (); InternetAddressList * cc (); InternetAddressList * bcc (); InternetAddressList * other_to (); /* address list with all addresses in all headers beginning with to * and ending with from */ AddressList all_to_from (); ustring references; ustring inreplyto; ustring reply_to; AddressList list_post (); time_t time; ustring date (); ustring date_asctime (); ustring pretty_date (); ustring pretty_verbose_date (bool = false); std::vector tags; ustring viewable_text (bool, bool fallback_html = false); std::vector> attachments (); refptr get_chunk_by_id (int id); std::vector> mime_messages (); /* used by editmessage, returns the same as attachments () and * mime_messages (), but in the correct order. */ std::vector> mime_messages_and_attachments (); std::vector> all_parts (); refptr contents (); refptr raw_contents (); bool is_patch (); bool is_different_subject (); bool is_encrypted (); bool is_signed (); bool is_list_post (); bool has_tag (ustring); GMimeMessage * decrypt (); void save (); void save_to (ustring); /* message changed signal */ typedef enum { MESSAGE_TAGS_CHANGED, MESSAGE_REMOVED, } MessageChangedEvent; typedef sigc::signal type_signal_message_changed; type_signal_message_changed signal_message_changed (); protected: void emit_message_changed (Db *, MessageChangedEvent); type_signal_message_changed m_signal_message_changed; bool subject_is_different = true; }; /* exceptions */ class message_error : public std::runtime_error { public: message_error (const char *); }; class MessageThread : public Glib::Object { public: MessageThread (); MessageThread (refptr); ~MessageThread (); bool in_notmuch; ustring get_subject (); bool has_tag (ustring); private: ustring subject = ""; ustring first_subject = ""; void set_first_subject (ustring); bool first_subject_set = false; bool subject_is_different (ustring); void on_thread_updated (Db * db, ustring tid); void on_thread_changed (Db * db, ustring tid); public: refptr thread; std::vector> messages; std::vector> messages_by_time (); void load_messages (Db *); void add_message (ustring); void add_message (refptr); }; } astroid-0.14/src/modes/000077500000000000000000000000001335422170400150025ustar00rootroot00000000000000astroid-0.14/src/modes/edit_message.cc000066400000000000000000001103631335422170400177460ustar00rootroot00000000000000# include # include # include # include # include # include # include # include # include "astroid.hh" # include "config.hh" # include "account_manager.hh" # include "edit_message.hh" # include "compose_message.hh" # include "db.hh" # include "thread_view/thread_view.hh" # include "raw_message.hh" # include "main_window.hh" # include "message_thread.hh" # include "chunk.hh" # include "utils/utils.hh" # include "utils/ustring_utils.hh" # include "utils/resource.hh" # include "utils/gmime/gmime-compat.h" # include "actions/onmessage.hh" # include "editor/plugin.hh" # include "editor/external.hh" using namespace std; using namespace boost::filesystem; namespace Astroid { int EditMessage::edit_id = 0; EditMessage::EditMessage (MainWindow * mw, ustring _to, ustring _from, ustring _cc, ustring _bcc) : EditMessage (mw, false) { // {{{ in_read = false; to = _to; cc = _cc; bcc = _bcc; if (!_from.empty ()) { set_from (Address (_from)); } /* reload message */ prepare_message (); read_edited_message (); edit_when_ready (); } EditMessage::EditMessage (MainWindow * mw, refptr msg) : EditMessage (mw, false) { /* load draft */ LOG (info) << "em: loading draft from: " << msg->fname; /* if this is a previously saved draft: use it, otherwise make new draft * based on original message */ if (any_of (Db::draft_tags.begin (), Db::draft_tags.end (), [&](ustring t) { return has (msg->tags, t); })) { draft_msg = msg; msg_id = msg->mid; } for (auto &c : msg->mime_messages_and_attachments ()) { add_attachment (new ComposeMessage::Attachment (c)); } inreplyto = msg->inreplyto; references = msg->references; /* write msg to new tmpfile */ msg->save_to (tmpfile_path.c_str ()); /* reload message */ read_edited_message (); /* TODO: read encryption / signing / signature state from message properties */ edit_when_ready (); } EditMessage::EditMessage (MainWindow * mw, bool _edit_when_ready) : Mode (mw) { editor_config = astroid->config ("editor"); in_read = false; # ifndef DISABLE_EMBEDDED embed_editor = !editor_config.get ("external_editor"); # endif save_draft_on_force_quit = editor_config.get ("save_draft_on_force_quit"); ustring attachment_words_s = editor_config.get ("attachment_words"); attachment_words = VectorUtils::split_and_trim (attachment_words_s.lowercase (), ","); sort (attachment_words.begin (), attachment_words.end ()); tmpfile_path = astroid->standard_paths ().runtime_dir; gpgenabled = astroid->config ("crypto").get ("gpg.enabled"); set_label ("New message"); path ui = Resource (false, "ui/edit-message.glade").get_path (); Glib::RefPtr builder = Gtk::Builder::create_from_file(ui.c_str(), "box_message"); builder->get_widget ("box_message", box_message); builder->get_widget ("from_combo", from_combo); builder->get_widget ("switch_encrypt", switch_encrypt); builder->get_widget ("switch_sign", switch_sign); builder->get_widget ("reply_mode_combo", reply_mode_combo); builder->get_widget ("fields_revealer", fields_revealer); builder->get_widget ("reply_revealer", reply_revealer); builder->get_widget ("encryption_revealer", encryption_revealer); builder->get_widget ("editor_box", editor_box); builder->get_widget ("switch_signature", switch_signature); builder->get_widget ("switch_markdown", switch_markdown); /* builder->get_widget ("editor_rev", editor_rev); builder->get_widget ("thread_rev", thread_rev); */ pack_start (*box_message, true, 5); /* set up message id and random server name for editor */ id = edit_id++; ustring _mid = ""; msg_time = time(0); # ifndef DISABLE_PLUGINS if (!astroid->plugin_manager->astroid_extension->generate_mid (_mid)) { # endif char _hostname[1024]; _hostname[1023] = 0; gethostname (_hostname, 1023); char _domainname[1024]; _domainname[1023] = 0; if (getdomainname (_domainname, 1023) < 0) { *_domainname = '\0'; } ustring hostname = astroid->config ().get ("mail.message_id_fqdn"); UstringUtils::trim (hostname); if (hostname.empty ()) { if (*_hostname != 0) { hostname = _hostname; if (*_domainname != 0) { ustring d (_domainname); d = UstringUtils::replace (d, "(", ""); // often (none) is returned d = UstringUtils::replace (d, ")", ""); hostname += "."; hostname += d; } if (hostname.find (".", 0) == std::string::npos) { /* add a top level domain */ hostname += ".none"; } } else { hostname = UstringUtils::random_alphanumeric (10) + ".none"; } } ustring user = astroid->config ().get ("mail.message_id_user"); UstringUtils::trim (user); if (user.empty ()) user = "astroid"; _mid = UstringUtils::random_alphanumeric (10); _mid = ustring::compose ("%1.%2.%3@%4", msg_time, _mid, user, hostname); # ifndef DISABLE_PLUGINS } # endif if (msg_id == "") { msg_id = _mid; } LOG (info) << "em: msg id: " << msg_id; make_tmpfile (); # ifndef DISABLE_EMBEDDED if (embed_editor) { editor = new Plugin (this, _mid); //editor_rev->add (*editor_socket); editor_box->pack_start (dynamic_cast (editor)->bin, false, false, 2); } else { # endif editor = new External (this); # ifndef DISABLE_EMBEDDED } # endif thread_view = Gtk::manage(new ThreadView(main_window, true)); //thread_rev->add (*thread_view); editor_box->pack_start (*thread_view, false, false, 2); thread_view->signal_ready().connect ( sigc::mem_fun (this, &EditMessage::on_tv_ready)); thread_view->signal_element_action().connect ( sigc::mem_fun (this, &EditMessage::on_element_action)); /* defaults */ accounts = astroid->accounts; /* from combobox */ from_store = Gtk::ListStore::create (from_columns); from_combo->set_model (from_store); account_no = 0; for (Account &a : accounts->accounts) { auto row = *(from_store->append ()); row[from_columns.name_and_address] = a.full_address(); row[from_columns.account] = &a; if (a.isdefault) { from_combo->set_active (account_no); } account_no++; } from_combo->pack_start (from_columns.name_and_address); /* from_combo->signal_key_press_event ().connect ( sigc::mem_fun (this, &EditMessage::on_from_combo_key_press)); */ show_all_children (); prepare_message (); sending_in_progress.store (false); if (!embed_editor) { thread_view->show (); gtk_box_set_child_packing (editor_box->gobj (), GTK_WIDGET(thread_view->gobj ()), true, true, 5, GTK_PACK_START); grab_modal (); thread_view->grab_focus (); } editor_toggle (false); from_combo->signal_changed().connect ( sigc::mem_fun (this, &EditMessage::on_from_combo_changed)); /* editor->start_editor_when_ready = true; */ switch_signature->property_active().signal_changed ().connect ( sigc::mem_fun (*this, &EditMessage::switch_signature_set)); switch_markdown->property_active().signal_changed ().connect ( sigc::mem_fun (*this, &EditMessage::switch_signature_set)); switch_encrypt->property_active().signal_changed ().connect ( sigc::mem_fun (*this, &EditMessage::switch_signature_set)); switch_sign->property_active().signal_changed ().connect ( sigc::mem_fun (*this, &EditMessage::switch_signature_set)); reset_signature (); /* register keys {{{ */ keys.title = "Edit mode"; keys.register_key (Key (GDK_KEY_Return), { Key (GDK_KEY_KP_Enter) }, "edit_message.edit", "Edit message in editor", [&] (Key) { if (!editor_active && !message_sent && !sending_in_progress.load()) { editor_toggle (true); } return true; }); keys.register_key ("y", "edit_message.send", "Send message", [&] (Key) { if (!message_sent && !sending_in_progress.load()) { if (editor_active) { set_warning ("Cannot send message when editing."); return true; } if (!check_fields ()) { /* warning str is set in check_fields () */ LOG (error) << "em: error problem with some of the input fields.."; return true; } ask_yes_no ("Really send message?", [&](bool yes){ if (yes) send_message (); }); } return true; }); keys.register_key ("C-c", "edit_message.cancel", "Cancel sending message (unreliable)", [&] (Key) { if (!message_sent && sending_in_progress.load ()) { sending_message->cancel_sending (); /* send_message_finished will still be called to clean up sending_message */ } return true; }); keys.register_key ("V", "edit_message.view_raw", "View raw message", [&] (Key) { /* view raw source of to be sent message */ ComposeMessage * c = make_message (); ustring tmpf = c->write_tmp (); main_window->add_mode (new RawMessage (main_window, tmpf.c_str(), true)); /* tmp file deleted by RawMessage */ delete c; return true; }); keys.register_key ("f", "edit_message.cycle_from", "Cycle through From selector", [&] (Key) { if (editor_active) { set_warning ("Cannot change from address when editing."); return true; } /* cycle through from combo box */ if (!message_sent && !sending_in_progress.load()) { if (from_store->children().size() > 1) { int i = from_combo->get_active_row_number (); if (i >= (static_cast(from_store->children().size())-1)) i = 0; else i++; from_combo->set_active (i); reset_signature (); } } return true; }); keys.register_key ("a", "edit_message.attach", "Attach file", [&] (Key) { attach_file (); return true; }); keys.register_key ("A", "edit_messsage.attach_mids", "Attach messages by mids", [&] (Key) { main_window->enable_command (CommandBar::CommandMode::AttachMids, "Attach mids:", "", [&] (ustring mids) { auto midsv = VectorUtils::split_and_trim (mids, ","); if (!midsv.empty ()) { Db db; for (auto mid : midsv) { db.on_message (mid, [&] (notmuch_message_t * msg) { if (msg != NULL) { LOG (debug) << "em: attaching: " << mid; refptr mmsg = refptr (new Message (msg, 0)); add_attachment (new ComposeMessage::Attachment (mmsg)); } else { LOG (warn) << "em: could not find and attach mid: " << mid; } }); } prepare_message (); read_edited_message (); } }); return true; }); keys.register_key ("s", "edit_message.save_draft", "Save draft", [&] (Key) { if (editor_active) { set_warning ("Cannot save draft when editing."); return true; } if (sending_in_progress.load ()) { /* block closing the window while sending */ LOG (error) << "em: message is being sent, it cannot be saved as draft anymore."; } else { bool r; r = save_draft (); if (!r) { on_tv_ready (); } else { close (true); } } return true; }); keys.register_key ("D", "edit_message.delete_draft", "Delete draft", [&] (Key) { if (!draft_msg) { LOG (debug) << "em: not a draft."; return true; } if (sending_in_progress.load ()) { /* block closing the window while sending */ LOG (error) << "em: message is being sent, cannot delete draft now. it will be deleted upon successfully sent message."; } else if (!message_sent) { ask_yes_no ("Do you want to delete this draft and close it? (any changes will be lost)", [&](bool yes) { if (yes) { delete_draft (); close (true); } }); } else { // message has been sent successfully, no need to complain. close (); } return true; }); keys.register_key ("S", "edit_message.toggle_signature", "Toggle signature", [&] (Key) { auto iter = from_combo->get_active (); auto row = *iter; Account * a = row[from_columns.account]; if (a->has_signature) { switch_signature->set_active (!switch_signature->get_active ()); } return true; }); keys.register_key ("M", "edit_message.toggle_markdown", "Toggle markdown", [&] (Key) { switch_markdown->set_active (!switch_markdown->get_active ()); return true; }); keys.register_key ("E", "edit_message.toggle_encrypt", "Toggle encryption and signature", [&] (Key) { auto iter = from_combo->get_active (); if (!iter) { return true; } auto row = *iter; Account * a = row[from_columns.account]; if (gpgenabled && a->has_gpg) { if (!switch_encrypt->get_active () && !switch_sign->get_active ()) { switch_encrypt->set_active (false); switch_sign->set_active (true); } else if (!switch_encrypt->get_active() && switch_sign->get_active ()) { switch_encrypt->set_active (true); switch_sign->set_active (true); } else if (switch_encrypt->get_active () && switch_sign->get_active ()) { switch_encrypt->set_active (true); switch_sign->set_active (false); } else { switch_encrypt->set_active (false); switch_sign->set_active (false); } } return true; }); // }}} if (_edit_when_ready) edit_when_ready (); } // }}} void EditMessage::edit_when_ready () { if (!embed_editor) { editor_toggle (true); } else { if (!editor->ready ()) editor->start_editor_when_ready = true; else editor_toggle (true); } } EditMessage::~EditMessage () { LOG (debug) << "em: deconstruct."; if (status_icon_visible) { main_window->notebook.remove_widget (&message_sending_status_icon); } if (editor->started ()) { editor->stop (); } if (is_regular_file (tmpfile_path)) { boost::filesystem::remove (tmpfile_path); } } void EditMessage::close (bool force) { if (sending_in_progress.load ()) { /* block closing the window while sending */ } else if (!force && !message_sent && !draft_saved) { if (editor->started ()) { set_warning ("Cannot close when editing."); return; } ask_yes_no ("Do you want to close this message? (unsaved changes will be lost)", [&](bool yes){ if (yes) { Mode::close (force); } }); } else if (force && !message_sent && !draft_saved && save_draft_on_force_quit) { LOG (warn) << "em: force quit, trying to save draft.."; bool r = save_draft (); if (!r) { LOG (error) << "em: cannot save draft! check account config. changes will be lost."; } Mode::close (force); } else { // message has been sent successfully, no need to complain. Mode::close (force); } } /* drafts */ bool EditMessage::save_draft () { LOG (info) << "em: saving draft.."; draft_saved = false; ComposeMessage * c = make_draft_message (); ustring fname; bool add_to_notmuch = false; if (!draft_msg) { /* make new message */ path ddir = c->account->save_drafts_to; if (!is_directory(ddir)) { LOG (error) << "em: no draft directory specified!"; set_warning ("draft could not be saved, no suitable draft directory for account specified."); delete c; return false; } else { /* msg_id might come from external client or server */ ddir = ddir / path(Utils::safe_fname (msg_id)); fname = ddir.c_str (); add_to_notmuch = true; } } else { fname = draft_msg->fname; // overwrite } c->write (fname); LOG (info) << "em: saved draft to: " << fname; if (add_to_notmuch) { astroid->actions->doit (refptr ( new AddDraftMessage (fname))); } delete c; draft_saved = true; return true; } void EditMessage::delete_draft () { if (draft_msg) { delete_draft (draft_msg); draft_msg = refptr (); draft_saved = true; /* avoid saving on exit */ } else { LOG (warn) << "em: not a draft, not deleting."; } } void EditMessage::delete_draft (refptr draft_msg) { LOG (info) << "em: deleting draft."; path fname = path(draft_msg->fname.c_str()); if (is_regular_file (fname)) { boost::filesystem::remove (fname); /* first remove tag in case it has been sent */ astroid->actions->doit (refptr( new OnMessageAction (draft_msg->mid, draft_msg->tid, [fname] (Db * db, notmuch_message_t * msg) { for (ustring t : Db::draft_tags) { notmuch_message_remove_tag (msg, t.c_str ()); } bool persists = !db->remove_message (fname.c_str ()); if (persists && db->maildir_synchronize_flags) { /* sync in case there are other copies of the message */ notmuch_message_tags_to_maildir_flags (msg); } }))); } } /* edit / read message cycling {{{ */ void EditMessage::on_from_combo_changed () { /* this will be called when the From: field has been changed * manually in the e-mail as well. this check prevents the * message currently being read from the edited draft to be * overwritten before it is read. */ if (!in_read) { prepare_message (); read_edited_message (); } } void EditMessage::prepare_message () { LOG (debug) << "em: preparing message from fields.."; if (in_read) { LOG (error) << "em: preparing message while in read"; throw std::logic_error ("em: preparing message while in read"); } auto iter = from_combo->get_active (); if (!iter) { LOG (warn) << "em: error: no from account selected."; return; } auto row = *iter; Account * a = row[from_columns.account]; auto from_ia = internet_address_mailbox_new (a->name.c_str(), a->email.c_str()); ustring from = internet_address_to_string (from_ia, NULL, true); tmpfile.open (tmpfile_path.c_str(), std::fstream::out); tmpfile << "From: " << from << endl; tmpfile << "To: " << to << endl; tmpfile << "Cc: " << cc << endl; if (bcc.size() > 0) { tmpfile << "Bcc: " << bcc << endl; } tmpfile << "Subject: " << subject << endl; tmpfile << endl; tmpfile << body.raw(); tmpfile.close (); LOG (debug) << "em: prepare message done."; } bool EditMessage::set_from (Address a) { if (!accounts->is_me (a)) { LOG (error) << "em: from address is not a defined account."; } return set_from (accounts->get_account_for_address (a)); } bool EditMessage::set_from (Account * a) { int rn = from_combo->get_active_row_number (); account_no = 0; for (Gtk::TreeRow row : from_store->children ()) { if (row[from_columns.account] == a) { from_combo->set_active (row); break; } account_no ++; } bool same_account = (rn == from_combo->get_active_row_number ()); LOG (debug) << "same account: " << same_account; if (!same_account) { reset_signature (); } return same_account; } void EditMessage::reset_signature () { /* should not be run unless the account has been changed */ auto it = from_combo->get_active (); Account * a = (*it)[from_columns.account]; switch_signature->set_sensitive (a->has_signature); switch_signature->set_active (a->has_signature && a->signature_default_on); encryption_revealer->set_reveal_child (gpgenabled && a->has_gpg); switch_sign->set_sensitive (gpgenabled && a->has_gpg); switch_encrypt->set_sensitive (gpgenabled && a->has_gpg); switch_encrypt->set_active (false); switch_sign->set_active (gpgenabled && a->has_gpg && a->always_gpg_sign); } void EditMessage::switch_signature_set () { LOG (debug) << "got sig: " << switch_signature->get_active (); if (!in_read) { prepare_message (); read_edited_message (); } } void EditMessage::read_edited_message () { LOG (debug) << "em: reading edited message.."; std::lock_guard lk (message_draft_m); if (in_read) { LOG (error) << "em: read while already reading!"; throw std::logic_error ("read while already reading"); } in_read = true; draft_saved = false; // we expect changes to have been made set_warning (""); if (!editor_active) { if (astroid->hint_level () < 1) { set_info ("Edit message with 'Enter'."); } else { set_info (""); } } /* make message */ ComposeMessage * c = setup_message (); /* set account selector to from address email */ set_from (c->account); /* build message */ finalize_message (c); if (c->markdown && !c->markdown_success) { set_warning ("Failed processing markdown: " + UstringUtils::replace (c->markdown_error, "\n", "
")); } if (c->encrypt || c->sign) { if (!c->encryption_success) { set_warning ("Failed encrypting: " + UstringUtils::replace (c->encryption_error, "\n", "
")); } } to = c->to; cc = c->cc; bcc = c->bcc; references = c->references; inreplyto = c->inreplyto; subject = c->subject; body = ustring(c->body.str()); ustring tmpf = c->write_tmp (); auto msgt = refptr(new MessageThread()); msgt->add_message (tmpf); thread_view->load_message_thread (msgt); delete c; unlink (tmpf.c_str()); in_read = false; } /* }}} */ void EditMessage::set_info (ustring msg) { info_str = msg; LOG (debug) << "em: set info (ready: " << thread_view->ready << "): " << msg; if (thread_view->ready) { if (info_str.length () > 0) { thread_view->set_info (thread_view->focused_message, info_str); } else { thread_view->hide_info (thread_view->focused_message); } } } void EditMessage::set_warning (ustring msg) { warning_str = msg; LOG (debug) << "em: set warning (ready: " << thread_view->ready << "): " << msg; if (thread_view->ready) { if (warning_str.length () > 0) { thread_view->set_warning (thread_view->focused_message, warning_str); } else { thread_view->hide_warning (thread_view->focused_message); } } } void EditMessage::on_tv_ready () { LOG (debug) << "em: got tv ready."; set_info (info_str); set_warning (warning_str); } /* swapping between edit and read mode {{{ */ void EditMessage::fields_hide () { fields_revealer->set_reveal_child (false); } void EditMessage::fields_show () { fields_revealer->set_reveal_child (true); } /* turn on or off the editor or set up for the editor * only run for embedded editor */ void EditMessage::editor_toggle (bool on) { LOG (debug) << "em: editor toggle: " << on; # ifndef DISABLE_EMBEDDED if (embed_editor) { if (on) { prepare_message (); editor_active = true; /* editor_rev->set_reveal_child (true); thread_rev->set_reveal_child (false); */ dynamic_cast (editor)->bin.show (); thread_view->hide (); gtk_box_set_child_packing (editor_box->gobj (), GTK_WIDGET(dynamic_cast (editor)->bin.gobj ()), true, true, 5, GTK_PACK_START); gtk_box_set_child_packing (editor_box->gobj (), GTK_WIDGET(thread_view->gobj ()), false, false, 5, GTK_PACK_START); /* future Gtk editor_box->set_child_packing (editor_rev, true, true, 2); editor_box->set_child_packing (thread_rev, false, false, 2); */ fields_hide (); editor->start (); } else { if (editor->started ()) { editor->stop (); } /* editor_rev->set_reveal_child (false); thread_rev->set_reveal_child (true); */ dynamic_cast (editor)->bin.hide (); thread_view->show (); gtk_box_set_child_packing (editor_box->gobj (), GTK_WIDGET(dynamic_cast(editor)->bin.gobj ()), false, false, 5, GTK_PACK_START); gtk_box_set_child_packing (editor_box->gobj (), GTK_WIDGET(thread_view->gobj ()), true, true, 5, GTK_PACK_START); /* future Gtk editor_box->set_child_packing (editor_rev, false, false, 2); editor_box->set_child_packing (thread_rev, true, true, 2); */ fields_show (); if (editor_active) read_edited_message (); editor_active = false; grab_modal (); thread_view->grab_focus (); } } else { # endif if (on && !editor->started ()) { /* start editor */ editor_active = true; prepare_message (); read_edited_message (); editor->start (); info_str = "Editing.."; } else { /* return from editor */ set_info (""); if (editor_active) { read_edited_message (); } editor_active = false; } # ifndef DISABLE_EMBEDDED } # endif } void EditMessage::activate_editor () { /* used by Plugin */ LOG (debug) << "em: activate editor."; editor_active = true; LOG (debug) << "em: activate editor."; if (!editor->ready ()) { LOG (warn) << "em: activate editor: not ready."; return; } /* * https://bugzilla.gnome.org/show_bug.cgi?id=729248 */ release_modal (); if (editor->ready ()) { editor->focus (); } else { LOG (warn) << "em: activate editor, editor not yet started!"; } } /* }}} */ void EditMessage::on_element_action (int id, ThreadView::ElementAction action) { if (sending_in_progress.load ()) return; if (action == ThreadView::ElementAction::EDelete) { /* delete attachment */ auto e = thread_view->state[thread_view->focused_message].elements[id]; if (e.type == ThreadView::MessageState::ElementType::Attachment || e.type == ThreadView::MessageState::ElementType::MimeMessage ) { LOG (info) << "em: remove attachment: " << id << ", cid: " << e.id; /* find attachment */ unsigned int attachment = 0; for (unsigned int i = 0; i < thread_view->state[thread_view->focused_message].elements.size (); i++) { auto xe = thread_view->state[thread_view->focused_message].elements[i]; if (xe.type == ThreadView::MessageState::ElementType::Attachment || xe.type == ThreadView::MessageState::ElementType::MimeMessage ) { if (i == (unsigned int) id) { attachments.erase (attachments.begin () + attachment); break; } attachment++; } } prepare_message (); read_edited_message (); } } } /* }}} */ /* send message {{{ */ bool EditMessage::check_fields () { if (to.empty () && cc.empty () && bcc.empty ()) { set_warning ("No recipients defined!"); on_tv_ready (); return false; } /* check if attachments are mentioned */ if (attachments.empty () && !attachment_words.empty ()) { ustring bl = body.lowercase (); if (any_of (attachment_words.begin (), attachment_words.end (), [&] (ustring w) { return bl.find (w) != string::npos; })) { set_warning ("Attachments have been mentioned in the message, but none are attached, do you still want to send?"); on_tv_ready (); } } return true; } bool EditMessage::send_message () { LOG (info) << "em: sending message.."; /* load body */ editor_toggle (false); // resets warning and info set_warning (""); set_info ("sending message.."); on_tv_ready (); ComposeMessage * c = make_message (); if (c == NULL) return false; if (c->markdown && !c->markdown_success) { set_warning ("Cannot send, failed processing markdown: " + UstringUtils::replace (c->markdown_error, "\n", "
")); delete c; return false; } if (c->encrypt || c->sign) { if (!c->encryption_success) { set_warning ("Cannot send, failed encrypting: " + UstringUtils::replace (c->encryption_error, "\n", "
")); delete c; return false; } } c->message_sent().connect ( sigc::mem_fun (this, &EditMessage::send_message_finished)); c->message_send_status ().connect ( sigc::mem_fun (this, &EditMessage::update_send_message_status)); fields_hide (); sending_in_progress.store (true); /* set message sending icon */ status_icon_visible = true; Glib::RefPtr theme = Gtk::IconTheme::get_default(); Glib::RefPtr pixbuf = theme->load_icon ( "mail-send", Notebook::icon_size, Gtk::ICON_LOOKUP_USE_BUILTIN | Gtk::ICON_LOOKUP_FORCE_SIZE); message_sending_status_icon.set (pixbuf); main_window->notebook.add_widget (&message_sending_status_icon); c->send_threaded (); sending_message = c; return true; } void EditMessage::update_send_message_status (bool warn, ustring msg) { if (warn) { set_info (""); set_warning (msg); } else { set_info (msg); set_warning (""); } on_tv_ready (); } void EditMessage::send_message_finished (bool result_from_sender) { LOG (info) << "em: message sending done."; status_icon_visible = true; Glib::RefPtr theme = Gtk::IconTheme::get_default(); Glib::RefPtr pixbuf; if (result_from_sender) { lock_message_after_send (); pixbuf = theme->load_icon ( "gtk-apply", Notebook::icon_size, Gtk::ICON_LOOKUP_USE_BUILTIN | Gtk::ICON_LOOKUP_FORCE_SIZE); /* delete draft */ if (draft_msg) { LOG (info) << "em: deleting draft: " << draft_msg->fname; delete_draft (); } } else { fields_show (); pixbuf = theme->load_icon ( "dialog-error", Notebook::icon_size, Gtk::ICON_LOOKUP_USE_BUILTIN | Gtk::ICON_LOOKUP_FORCE_SIZE); } message_sending_status_icon.set (pixbuf); sending_in_progress.store (false); if (result_from_sender && (astroid->config().get ("mail.close_on_success"))) { LOG (info) << "cm: sending successful, auto-closing window"; close (true); } delete sending_message; emit_message_sent_attempt (result_from_sender); } void EditMessage::lock_message_after_send () { message_sent = true; fields_hide (); } ComposeMessage * EditMessage::setup_message () { ComposeMessage * c = new ComposeMessage (); c->load_message (msg_id, tmpfile_path.c_str()); c->set_references (references); c->set_inreplyto (inreplyto); for (shared_ptr a : attachments) { c->add_attachment (a); } return c; } void EditMessage::finalize_message (ComposeMessage * c) { /* these options are not known before setup_message is done, and the * new account information has been applied to the editor */ if (c->account->has_signature && switch_signature->get_active ()) { c->include_signature = true; } else { c->include_signature = false; } c->markdown = switch_markdown->get_active (); if (gpgenabled && c->account->has_gpg) { c->encrypt = switch_encrypt->get_active (); c->sign = switch_sign->get_active (); } c->build (); c->finalize (); } ComposeMessage * EditMessage::make_message () { return make_message (false); } ComposeMessage * EditMessage::make_draft_message () { return make_message (true); } ComposeMessage * EditMessage::make_message (bool draft = false) { ComposeMessage * c = setup_message (); bool sigstate = c->account->has_signature; if (draft) { /* Do not save signature in a draft */ c->account->has_signature = false; } finalize_message (c); c->account->has_signature = sigstate; return c; } /* }}} */ void EditMessage::make_tmpfile () { tmpfile_path = tmpfile_path / path(msg_id); LOG (info) << "em: tmpfile: " << tmpfile_path; if (is_regular_file (tmpfile_path)) { LOG (error) << "em: error: tmpfile already exists!"; throw runtime_error ("em: tmpfile already exists!"); } tmpfile.open (tmpfile_path.c_str(), std::fstream::out); if (tmpfile.fail()) { LOG (error) << "em: error: could not create tmpfile!"; throw runtime_error ("em: coult not create tmpfile!"); } tmpfile.close (); } void EditMessage::attach_file () { LOG (info) << "em: attach file.."; if (message_sent) { LOG (debug) << "em: message already sent."; return; } Gtk::FileChooserDialog dialog ("Choose file to attach..", Gtk::FILE_CHOOSER_ACTION_OPEN); dialog.add_button ("_Cancel", Gtk::RESPONSE_CANCEL); dialog.add_button ("_Attach", Gtk::RESPONSE_OK); dialog.set_select_multiple (true); dialog.set_current_folder (astroid->runtime_paths ().attach_dir.c_str ()); int result = dialog.run (); switch (result) { case (Gtk::RESPONSE_OK): { vector fnames = dialog.get_filenames (); astroid->runtime_paths ().attach_dir = bfs::path (dialog.get_current_folder ()); for (string &fname : fnames) { path p (fname.c_str()); if (!is_regular (p)) { LOG (error) << "em: attach: file is not regular: " << p.c_str(); } else { LOG (info) << "em: attaching file: " << p.c_str(); add_attachment (new ComposeMessage::Attachment (p)); } } prepare_message (); read_edited_message (); break; } default: { LOG (debug) << "em: attach: cancelled."; } } } void EditMessage::add_attachment (ComposeMessage::Attachment * a) { if (a->valid) { attachments.push_back (shared_ptr (a)); } else { LOG (error) << "em: invalid attachment, not adding: " << a->name; delete a; } } void EditMessage::grab_modal () { if (!embed_editor || !editor_active) add_modal_grab (); } void EditMessage::release_modal () { remove_modal_grab (); } /* message sent attempt signal */ EditMessage::type_message_sent_attempt EditMessage::message_sent_attempt () { return m_message_sent_attempt; } void EditMessage::emit_message_sent_attempt (bool res) { m_message_sent_attempt.emit (res); } /* from combo box {{{ */ /* bool EditMessage::on_from_combo_key_press (GdkEventKey * event) { switch (event->keyval) { case GDK_KEY_j: { from_combo->set_active (from_combo->get_active_row_number()+1); return true; } } return false; } */ // }}} } astroid-0.14/src/modes/edit_message.hh000066400000000000000000000116171335422170400177620ustar00rootroot00000000000000# pragma once # include # include # include # include # include # include # include # include # include "proto.hh" # include "astroid.hh" # include "config.hh" # include "mode.hh" # include "editor/editor.hh" # include "editor/plugin.hh" # include "editor/external.hh" # include "compose_message.hh" # include "account_manager.hh" # include "thread_view/thread_view.hh" namespace Astroid { class EditMessage : public Mode { friend Editor; # ifndef DISABLE_EMBEDDED friend Plugin; # endif friend External; public: EditMessage (MainWindow *, bool edit_when_ready = true); EditMessage (MainWindow *, ustring to, ustring from = "", ustring cc = "", ustring bcc = ""); EditMessage (MainWindow *, refptr _msg); ~EditMessage (); protected: void edit_when_ready (); public: Gtk::Box * box_message; Gtk::ComboBox *from_combo, *reply_mode_combo; Gtk::Switch *switch_signature; Gtk::Switch *switch_markdown; Gtk::Switch *switch_encrypt; Gtk::Switch *switch_sign; Gtk::Revealer *fields_revealer; Gtk::Revealer *reply_revealer; Gtk::Revealer *encryption_revealer; bool gpgenabled; # ifndef DISABLE_EMBEDDED bool embed_editor = true; # else const bool embed_editor = false; # endif Editor * editor; bool editor_active = false; void activate_editor (); void switch_signature_set (); void reset_signature (); ustring msg_id; ustring to; ustring cc; ustring bcc; ustring subject; ustring body; ustring references; ustring inreplyto; std::vector> attachments; void add_attachment (ComposeMessage::Attachment *); void attach_file (); /* from combobox */ class FromColumns : public Gtk::TreeModel::ColumnRecord { public: FromColumns () { add (name_and_address); add (account); } Gtk::TreeModelColumn name_and_address; Gtk::TreeModelColumn account; }; FromColumns from_columns; refptr from_store; int account_no; bool set_from (Account *); bool set_from (Address); bool check_fields (); std::vector attachment_words = { "attach" }; // defined in config bool send_message (); ComposeMessage * setup_message (); void finalize_message (ComposeMessage *); ComposeMessage * make_message (); ComposeMessage * make_draft_message (); ComposeMessage * sending_message; std::atomic sending_in_progress; void send_message_finished (bool result); void update_send_message_status (bool warn, ustring msg); /* make a draft message that can be edited */ void prepare_message (); /* draft */ bool save_draft_on_force_quit; bool save_draft (); void delete_draft (); static void delete_draft (refptr draft_msg); refptr draft_msg; bool draft_saved = false; protected: ptree editor_config; Gtk::Box * editor_box; ThreadView * thread_view; Gtk::Revealer *editor_rev, *thread_rev; static int edit_id; // must be incremented each time a new editor is started int id; // id of this instance time_t msg_time; void editor_toggle (bool); // enable or disable editor or thread view void fields_show (); // show fields void fields_hide (); // hide fields void read_edited_message (); // load data from message after // it has been edited. std::mutex message_draft_m; // locks message draft std::atomic in_read; // true if we are already in read void on_tv_ready (); void set_warning (ustring); void set_info (ustring); ustring warning_str = ""; ustring info_str = ""; AccountManager * accounts; boost::filesystem::path tmpfile_path; std::fstream tmpfile; void make_tmpfile (); Gtk::Image message_sending_status_icon; bool status_icon_visible = false; bool message_sent = false; void lock_message_after_send (); ComposeMessage * make_message (bool draft); private: void on_from_combo_changed (); //bool on_from_combo_key_press (GdkEventKey *); void on_element_action (int id, ThreadView::ElementAction action); public: void grab_modal () override; void release_modal () override; void close (bool = false) override; typedef sigc::signal type_message_sent_attempt; type_message_sent_attempt message_sent_attempt (); void emit_message_sent_attempt (bool); protected: type_message_sent_attempt m_message_sent_attempt; }; } astroid-0.14/src/modes/editor/000077500000000000000000000000001335422170400162705ustar00rootroot00000000000000astroid-0.14/src/modes/editor/editor.cc000066400000000000000000000000271335422170400200640ustar00rootroot00000000000000# include "editor.hh" astroid-0.14/src/modes/editor/editor.hh000066400000000000000000000005211335422170400200750ustar00rootroot00000000000000# pragma once # include namespace Astroid { class Editor { public: virtual ~Editor () { }; virtual bool ready () = 0; virtual bool started () = 0; virtual void start () = 0; virtual void stop () = 0; virtual void focus () = 0; bool start_editor_when_ready = false; }; } astroid-0.14/src/modes/editor/external.cc000066400000000000000000000076241335422170400204320ustar00rootroot00000000000000# include # include # include "external.hh" # include "modes/edit_message.hh" using std::endl; namespace Astroid { External::External (EditMessage * _em) { em = _em; /* editor settings */ editor_cmd = em->editor_config.get ("cmd"); } bool External::ready () { return editor_ready; } bool External::started () { /* if the editor is started then the draft should be locked for sending */ return editor_started; } void External::start () { editor_started = true; ustring cmd = ustring::compose (editor_cmd, em->tmpfile_path.c_str ()); LOG (debug) << "em: ex: launching editor: " << cmd; /* std::vector args = {cmd.c_str()}; */ auto args = Glib::shell_parse_argv (cmd); try { Glib::spawn_async_with_pipes ("", args, Glib::SPAWN_SEARCH_PATH | Glib::SPAWN_DO_NOT_REAP_CHILD, sigc::slot (), &pid, &stdin, &stdout, &stderr ); } catch (Glib::SpawnError &ex) { LOG (error) << "em: ex: exception while running external editor: " << ex.what (); on_stop (); return; } /* connect channels */ out_c = Glib::signal_io().connect (sigc::mem_fun (this, &External::log_out), stdout, Glib::IO_IN | Glib::IO_HUP); err_c = Glib::signal_io().connect (sigc::mem_fun (this, &External::log_err), stderr, Glib::IO_IN | Glib::IO_HUP); Glib::signal_child_watch().connect (sigc::mem_fun (this, &External::child_watch), pid); ch_stdout = Glib::IOChannel::create_from_fd (stdout); ch_stderr = Glib::IOChannel::create_from_fd (stderr); /* monitor file */ GFile * f = g_file_new_for_path (em->tmpfile_path.c_str ()); draft_file = Glib::wrap (f, true); draft_watch = draft_file->monitor (); draft_watch->signal_changed ().connect (sigc::mem_fun (this, &External::on_draft_changed)); em->set_info ("Editing.."); } void External::on_draft_changed (const Glib::RefPtr&, const Glib::RefPtr&, Gio::FileMonitorEvent event_type) { if (event_type == Gio::FileMonitorEvent::FILE_MONITOR_EVENT_CHANGES_DONE_HINT || event_type == Gio::FileMonitorEvent::FILE_MONITOR_EVENT_CREATED) { if (bfs::exists (em->tmpfile_path)) { LOG (debug) << "em: ex: file changed, updating preview.."; if (!em->in_read) { em->read_edited_message (); em->set_info ("Editing.."); } } } } bool External::log_out (Glib::IOCondition cond) { if (cond == Glib::IO_HUP) { ch_stdout.clear(); return false; } if ((cond & Glib::IO_IN) == 0) { LOG (error) << "em: ex: invalid fifo response"; } else { Glib::ustring buf; ch_stdout->read_line(buf); if (*(--buf.end()) == '\n') buf.erase (--buf.end()); LOG (debug) << "em: ex: " << buf; } return true; } bool External::log_err (Glib::IOCondition cond) { if (cond == Glib::IO_HUP) { ch_stderr.clear(); return false; } if ((cond & Glib::IO_IN) == 0) { LOG (error) << "em: ex: invalid fifo response"; } else { Glib::ustring buf; ch_stderr->read_line(buf); if (*(--buf.end()) == '\n') buf.erase (--buf.end()); LOG (warn) << "em: ex: " << buf; } return true; } void External::child_watch (GPid pid, int child_status) { if (child_status != 0) { LOG (error) << "em: ex: editor did not exit successfully."; } draft_watch->cancel (); /* close process */ Glib::spawn_close_pid (pid); out_c.disconnect(); err_c.disconnect(); on_stop (); } void External::on_stop () { editor_started = false; em->editor_toggle (false); } void External::stop () { } void External::focus () { /* no-op */ } } astroid-0.14/src/modes/editor/external.hh000066400000000000000000000021721335422170400204350ustar00rootroot00000000000000# pragma once # include "editor.hh" # include "proto.hh" namespace Astroid { class External : public Editor, public sigc::trackable { friend EditMessage; public: External (EditMessage * em); bool ready () override; bool started () override; void start () override; void stop () override; void focus () override; protected: EditMessage * em; /* editor config */ std::string editor_cmd; std::string editor_args; bool editor_ready = false; bool editor_started = false; int pid; int stdin; int stdout; int stderr; refptr ch_stdout; refptr ch_stderr; sigc::connection out_c; sigc::connection err_c; bool log_out (Glib::IOCondition); bool log_err (Glib::IOCondition); void child_watch (GPid, int); void on_stop (); refptr draft_file; refptr draft_watch; void on_draft_changed (const Glib::RefPtr& file, const Glib::RefPtr& other_file, Gio::FileMonitorEvent event_type); }; } astroid-0.14/src/modes/editor/plugin.cc000066400000000000000000000052431335422170400201010ustar00rootroot00000000000000# ifndef DISABLE_EMBEDDED # include # include # include "plugin.hh" # include "modes/edit_message.hh" using std::endl; namespace Astroid { Plugin::Plugin (EditMessage * _em, ustring _server) : server_name (_server) { em = _em; LOG (debug) << "em: editor server name: " << server_name; /* editor settings */ editor_cmd = em->editor_config.get ("cmd"); /* gtk::socket: * http://stackoverflow.com/questions/13359699/pyside-embed-vim * https://developer.gnome.org/gtkmm-tutorial/stable/sec-plugs-sockets-example.html.en * https://mail.gnome.org/archives/gtk-list/2011-January/msg00041.html */ editor_socket = Gtk::manage(new Gtk::Socket ()); editor_socket->set_can_focus (true); editor_socket->signal_plug_added ().connect ( sigc::mem_fun(*this, &Plugin::plug_added) ); editor_socket->signal_plug_removed ().connect ( sigc::mem_fun(*this, &Plugin::plug_removed) ); editor_socket->signal_realize ().connect ( sigc::mem_fun(*this, &Plugin::socket_realized) ); bin.pack_start (*editor_socket); } bool Plugin::ready () { return editor_ready; } bool Plugin::started () { return editor_started; } void Plugin::start () { if (socket_ready) { /* the editor gets the following args: * * %1: file name * %2: server name * %3: socket id (or parent id) * */ ustring cmd = ustring::compose (editor_cmd, em->tmpfile_path.c_str (), server_name, editor_socket->get_id ()); LOG (info) << "em: starting editor: " << cmd; Glib::spawn_command_line_async (cmd.c_str()); editor_started = true; } else { start_editor_when_ready = true; // TODO: not thread-safe LOG (debug) << "em: editor, waiting for socket.."; } } void Plugin::focus () { bin.grab_focus (); if (!editor_focused) { bin.child_focus (Gtk::DIR_TAB_FORWARD); editor_focused = true; } } void Plugin::stop () { LOG (error) << "editor: don't know how to stop editor!"; } void Plugin::socket_realized () { LOG (debug) << "em: socket realized."; socket_ready = true; if (start_editor_when_ready) { em->editor_toggle (true); start_editor_when_ready = false; } } void Plugin::plug_added () { LOG (debug) << "em: editor connected"; editor_ready = true; em->activate_editor (); } bool Plugin::plug_removed () { LOG (debug) << "em: editor disconnected"; editor_ready = false; editor_started = false; editor_focused = false; em->editor_toggle (false); return true; } } # endif astroid-0.14/src/modes/editor/plugin.hh000066400000000000000000000015721335422170400201140ustar00rootroot00000000000000# pragma once # ifndef DISABLE_EMBEDDED # include # include "editor.hh" # include "proto.hh" namespace Astroid { class Plugin : public Editor { friend EditMessage; public: Plugin (EditMessage * em, ustring server); bool ready () override; bool started () override; void start () override; void stop () override; void focus () override; Gtk::Box bin; protected: EditMessage * em; void plug_added (); bool plug_removed (); Gtk::Socket * editor_socket; void socket_realized (); bool socket_ready = false; bool editor_ready = false; bool editor_started = false; bool editor_focused = false; /* socket and server */ ustring server_name; /* editor config */ std::string editor_cmd; std::string editor_args; }; } # endif astroid-0.14/src/modes/forward_message.cc000066400000000000000000000064241335422170400204670ustar00rootroot00000000000000# include # include # include # include "astroid.hh" # include "db.hh" # include "edit_message.hh" # include "forward_message.hh" # include "actions/action_manager.hh" # include "actions/onmessage.hh" # include "message_thread.hh" # include "utils/address.hh" # include "chunk.hh" namespace Astroid { ForwardMessage::ForwardMessage (MainWindow * mw, refptr _msg, FwdDisposition disp) : EditMessage (mw, false) { using std::endl; using std::string; msg = _msg; LOG (info) << "fwd: forwarding message " << msg->mid; /* set subject */ subject = ustring::compose ("Fwd: %1", msg->subject); if (subject.size () > 0) { set_label ("New message: " + subject); } if (disp == FwdDefault) { disp = (astroid->config().get ("mail.forward.disposition") == "attachment") ? FwdAttach : FwdInline; } if (disp == FwdAttach) { add_attachment (new ComposeMessage::Attachment (msg)); } else { /* quote original message */ std::ostringstream quoted; ustring quoting_a = ustring::compose (astroid->config ().get ("mail.forward.quote_line"), boost::replace_all_copy (string(Address(msg->sender.raw()).fail_safe_name()), "%", "%%"), boost::replace_all_copy (string(msg->pretty_verbose_date()), "%", "%%")); /* date format */ Glib::DateTime dt = Glib::DateTime::create_now_local (msg->time); quoting_a = dt.format (quoting_a); quoted << quoting_a.raw () << endl; /* add forward header */ quoted << "From: " << msg->sender << endl; quoted << "Date: " << msg->pretty_verbose_date() << endl; quoted << "Subject: " << msg->subject << endl; quoted << "To: " << AddressList(msg->to()).str () << endl; auto cc = AddressList (msg->cc()); if (cc.addresses.size () > 0) quoted << "Cc: " << AddressList(msg->cc()).str () << endl; quoted << endl; string vt = msg->viewable_text(false); quoted << vt; body = ustring(quoted.str()); for (auto &c : msg->attachments ()) { add_attachment (new ComposeMessage::Attachment (c)); } /* TODO: add non-text parts */ } /* determine which account to use */ set_from (accounts->get_assosciated_account (msg)); /* reload message */ prepare_message (); read_edited_message (); /* sent signal */ message_sent_attempt().connect ( sigc::mem_fun (this, &ForwardMessage::on_message_sent_attempt_received)); keys.title = "Forward mode"; edit_when_ready (); } void ForwardMessage::on_message_sent_attempt_received (bool res) { using std::endl; if (res) { LOG (info) << "fwd: message successfully sent, adding passed tag to original."; if (!msg->in_notmuch) { LOG (warn) << "fwd: message not in notmuch."; return; } astroid->actions->doit (refptr( new OnMessageAction (msg->mid, msg->tid, [] (Db * db, notmuch_message_t * msg) { notmuch_message_add_tag (msg, "passed"); if (db->maildir_synchronize_flags){ notmuch_message_tags_to_maildir_flags (msg); } }))); } } } astroid-0.14/src/modes/forward_message.hh000066400000000000000000000007141335422170400204750ustar00rootroot00000000000000# pragma once # include "astroid.hh" # include "proto.hh" # include "edit_message.hh" namespace Astroid { class ForwardMessage : public EditMessage { public: typedef enum { FwdDefault, FwdInline, FwdAttach, } FwdDisposition; ForwardMessage (MainWindow *, refptr, FwdDisposition disp = FwdDefault); refptr msg; private: void on_message_sent_attempt_received (bool); }; } astroid-0.14/src/modes/help_mode.cc000066400000000000000000000075171335422170400172570ustar00rootroot00000000000000# include # include "main_window.hh" # include "mode.hh" # include "help_mode.hh" # include "astroid.hh" # include # include using namespace std; namespace Astroid { HelpMode::HelpMode (MainWindow * mw) : Mode (mw) { set_label ("Help"); scroll.add (help_text); pack_start (scroll, true, true, 5); scroll.show_all (); /* register keys */ keys.register_key ("j", { Key("C-j"), Key (true, false, (guint) GDK_KEY_Down), Key(GDK_KEY_Down) }, "help.down", "Scroll down", [&] (Key k) { if (k.ctrl) { auto adj = scroll.get_vadjustment (); adj->set_value (adj->get_value() + adj->get_page_increment ()); } else { auto adj = scroll.get_vadjustment (); adj->set_value (adj->get_value() + adj->get_step_increment ()); } return true; }); keys.register_key ("k", { Key ("C-k"), Key (true, false, (guint) GDK_KEY_Up), Key (GDK_KEY_Up) }, "help.up", "Scroll up", [&] (Key k) { if (k.ctrl) { auto adj = scroll.get_vadjustment (); adj->set_value (adj->get_value() - adj->get_page_increment ()); } else { auto adj = scroll.get_vadjustment (); adj->set_value (adj->get_value() - adj->get_step_increment ()); } return true; }); keys.register_key ("K", { Key (GDK_KEY_Page_Up) }, "help.page_up", "Page up", [&] (Key) { auto adj = scroll.get_vadjustment (); adj->set_value (adj->get_value() - adj->get_page_increment ()); return true; }); keys.register_key ("J", { Key (GDK_KEY_Page_Down) }, "help.page_down", "Page down", [&] (Key) { auto adj = scroll.get_vadjustment (); adj->set_value (adj->get_value() + adj->get_page_increment ()); return true; }); keys.register_key ("1", { Key (GDK_KEY_Home) }, "help.page_top", "Scroll to top", [&] (Key) { auto adj = scroll.get_vadjustment (); adj->set_value (adj->get_lower ()); return true; }); keys.register_key ("0", { Key (GDK_KEY_End) }, "help.page_end", "Scroll to end", [&] (Key) { auto adj = scroll.get_vadjustment (); adj->set_value (adj->get_upper ()); return true; }); } HelpMode::HelpMode (MainWindow *mw, Mode * m) : HelpMode (mw) { show_help (m); } void HelpMode::show_help (Mode * m) { set_label ("Help: " + m->get_keys ()->title); ustring header = ustring::compose( "Astroid (%1) \n" "\n" "Gaute Hope <
eg@gaute.vetsj.com> (c) 2014" " (Licenced under the GNU GPL v3)\n" "https://github.com/astroidmail/astroid | astroidmail@googlegroups.com\n" "\n", Astroid::version); ustring help = header + generate_help (m); help_text.set_markup (help); } ustring HelpMode::generate_help (Gtk::Widget * w) { ustring h; MainWindow * mw = dynamic_cast (w); bool is_mw = (mw != NULL); // we stop here Mode * m = dynamic_cast (w); bool is_mode = (m != NULL); if (!is_mw) { h = generate_help (w->get_parent ()); } if (is_mode) { h += "---\n"; h += "" + m->get_keys ()->title + "\n"; h += m->get_keys ()->help (); } if (is_mw) { h += "Main window\n"; h += mw->keys.help (); } return h; } void HelpMode::grab_modal () { add_modal_grab (); grab_focus (); } void HelpMode::release_modal () { remove_modal_grab (); } }; astroid-0.14/src/modes/help_mode.hh000066400000000000000000000010031335422170400172510ustar00rootroot00000000000000# pragma once # include # include "astroid.hh" # include "proto.hh" # include "mode.hh" namespace Astroid { class HelpMode : public Mode { public: HelpMode (MainWindow *); HelpMode (MainWindow *, Mode *); /* show help */ void show_help (Mode * m); ustring generate_help (Gtk::Widget *); Gtk::ScrolledWindow scroll; Gtk::Label help_text; /* mode */ virtual void grab_modal () override; virtual void release_modal () override; }; } astroid-0.14/src/modes/keybindings.cc000066400000000000000000000526331335422170400176300ustar00rootroot00000000000000# include # include # include "astroid.hh" # include "keybindings.hh" # include "config.hh" # include "utils/ustring_utils.hh" # include "utils/vector_utils.hh" using std::function; using std::vector; using std::endl; namespace Astroid { /* Keybindings {{{ */ std::atomic Keybindings::user_bindings_loaded (false); const char * Keybindings::user_bindings_file = "keybindings"; std::vector Keybindings::user_bindings; std::vector>> Keybindings::user_run_bindings; void Keybindings::init () { if (!user_bindings_loaded) { user_bindings_loaded = true; using bfs::path; path bindings_file = astroid->standard_paths ().config_dir / path (user_bindings_file); if (exists(bindings_file)) { LOG (info) << "keybindings: loading user bindings from: " << bindings_file.c_str (); /* the bindings file has the format: * * ``` thread_index.next_thread=j thread_index.next_thread=Down * thread_index.label=C-j * * # thread_ ``` * * blank lines, or lines starting with # are ignored. a keybinding can * be listed several times, in which case they will be interpreted as * aliases for the same target. * * shell hooks follow the format: * * thread_index.run(cmd, undo cmd)=key thread_index.run(cmd)=key * * it will be parsed by searching for: * * 1. prefix.run( 2. then search backwards for = 3. split out key 4. * search backwards for ) 5. split out cmd 6. separate cmd and undo * cmd if both exist * * Any commands containing , (comma) must have them escaped using \ * (backslash). Empty undo cmd or none specified results in the same * behaviour. * * a mode then registers run targets which is a function that gets the * target, runs it and signals update_thread or similar if necessary. * * a helper for running the command should be located here. * */ std::ifstream bf (bindings_file.c_str()); while (!bf.eof()) { std::string sline; std::getline (bf, sline); ustring line (sline); UstringUtils::trim (line); if (line.size () == 0) continue; if (line[0] == '#') continue; std::size_t fnd; /* cut off comments appended to the end of the line */ fnd = line.find ("#"); if (fnd != std::string::npos) { line = line.substr (0, fnd); } /* check if this is a run line */ fnd = line.find (".run"); if (fnd != std::string::npos) { LOG (debug) << "ky: parsing run-hook: " << line; /* get full name */ ustring name = line.substr (0, fnd + 4); /* get target, between () */ fnd = line.find ("(", fnd); if (fnd == std::string::npos) { LOG (error) << "ky: invalid 'run'-specification: no '('"; continue; } std::size_t rfnd = line.rfind ("="); if (rfnd == std::string::npos) { LOG (error) << "ky: invalid 'run'-specification: no '='"; continue; } if (rfnd < fnd) { LOG (error) << "ky: invalid 'run'-specification: '=' before '('"; continue; } ustring keyspec = line.substr (rfnd+1, std::string::npos); UstringUtils::trim (keyspec); rfnd = line.rfind (")", rfnd); if (rfnd == std::string::npos) { LOG (error) << "ky: invalid 'run'-specfication: no ')'"; continue; } if (rfnd < fnd) { LOG (error) << "ky: invalid 'run'-specification: ')' before '('"; continue; } ustring target = line.substr (fnd + 1, rfnd - fnd -1); ustring undo_target = ""; /* splitting cmd and undo cmd */ fnd = 0; std::size_t separator = std::string::npos; bool err = false; while (fnd != std::string::npos && fnd < target.length ()) { fnd = target.find (",", fnd); if (fnd == 0) { LOG (error) << "ky: invalid 'run'-speficiation: command starts with ',', cannot only have undo command."; err = true; break; } else if (fnd != std::string::npos) { if (target[fnd - 1] == '\\') { /* traverse whole input string: escaped separator, * skip '\' and keep looking */ target.erase (fnd -1, 1); /* fnd now points to position after comma - new iteration */ } else if (separator == std::string::npos) { /* found separator */ separator = fnd; fnd++; } else { LOG (error) << "ky: invalid 'run'-speficiation: several ',' separators."; err = true; break; } } } if (err) continue; if (separator != std::string::npos) { undo_target = target.substr (separator + 1, target.size ()); target = target.substr (0, separator); UstringUtils::trim (undo_target); /* undo_target may be empty */ } UstringUtils::trim (target); Key k (keyspec); if (k.key == GDK_KEY_VoidSymbol) { LOG (error) << "ky: user bindings: invalid key name: " << keyspec; continue; } LOG (debug) << "ky: run: " << name << "(" << k.str () << "): " << target; k.name = name; k.allow_duplicate_name = true; k.userdefined = true; user_run_bindings.push_back (std::make_pair (k, std::make_pair(target, undo_target))); continue; } LOG (debug) << "ky: parsing line: " << line; vector parts = VectorUtils::split_and_trim (line, "="); ustring spec; if (parts.size () == 1) { spec = ""; } else if (parts.size () > 2 || parts.empty ()) { LOG (error) << "ky: user bindings: invalid number of parts in: " << line; continue; } else { spec = parts[1]; } UstringUtils::trim (spec); Key k; if (spec.empty ()) { k = UnboundKey (); } else { k = Key (spec); if (k.key == GDK_KEY_VoidSymbol) { LOG (error) << "ky: user bindings: invalid key name: " << spec; continue; } } k.name = parts[0]; user_bindings.push_back (k); } bf.close (); } } } Keybindings::Keybindings () { /* loghandle = true; */ } void Keybindings::set_prefix (ustring t, ustring p) { title = t; prefix = p; } ustring Keybindings::short_help () { ustring h = "" + title + ": "; bool first = true; for (auto &km : keys) { auto k = km.first; if (!first) { h += ", "; } first = false; h += k.str () + ": " + k.help; } return h; } ustring Keybindings::help () { ustring h; for (auto &km : keys) { auto k = km.first; if (k.isalias) continue; h += "" + k.str (); auto aliases = find_if (keys.begin (), keys.end (), [&](KeyBinding kb) { return (kb.first.isalias && (*(kb.first.master_key) == k)); }); while (aliases != keys.end ()) { h += "," + aliases->first.str (); aliases++; aliases = find_if (aliases, keys.end (), [&](KeyBinding kb) { return (kb.first.isalias && (*(kb.first.master_key) == k)); }); } h += ": " + k.help + "\n"; } return h; } void Keybindings::clear () { keys.clear (); } void Keybindings::register_key (ustring spec, ustring name, ustring help, function t) { register_key (spec, vector(), name, help, t); } void Keybindings::register_key (ustring spec, vector aliases, ustring name, ustring help, function t) { register_key (Key (spec), aliases, name, help, t); } void Keybindings::register_key (ustring spec, vector spec_aliases, ustring name, ustring help, function t) { vector aliases; for (auto &s : spec_aliases) aliases.push_back (Key (s)); register_key (Key (spec), aliases, name, help, t); } void Keybindings::register_key (Key k, ustring name, ustring help, function t) { register_key (k, vector (), name, help, t); } void Keybindings::register_key (Key k, vector aliases, ustring name, ustring help, function t) { /* k default key * name name used for configurable keys */ /* LOG (debug) << "key: registering key: " << name << ": " << k.str (); */ /* check if these are user configured */ auto res = find_if (user_bindings.begin (), user_bindings.end (), [&](Key e) { return (e.name == name); }); bool userdefined = k.userdefined; // add aliases if (res != user_bindings.end ()) { userdefined = true; Key uk = (*res); if (uk.unbound) { /* user defined and unbound, key binding is dropped */ LOG (debug) << "ky: key: " << k.str () << " dropped."; return; } k.key = uk.key; k.ctrl = uk.ctrl; k.meta = uk.meta; res++; res = find_if (res, user_bindings.end (), [&](Key e) { return (e.name == name); }); aliases.clear (); // drop any default aliases while (res != user_bindings.end ()) { Key ak = (*res); aliases.push_back (ak); res++; res = find_if (res++, user_bindings.end (), [&](Key e) { return (e.name == name); }); } if (k.unbound) { LOG (info) << "key: binding unbound target: " << k.name; k.unbound = false; } } if (k.unbound) { /* LOG (info) << "key: unbound key: " << name << " does not have a key associated."; */ return; } k.name = name; k.help = help; k.userdefined = userdefined; k.isalias = false; bool has_aliases = false; /* check if key name already exists */ if (!k.allow_duplicate_name) { if (find_if (keys.begin (), keys.end (), [&] (KeyBinding mk) { return mk.first.name == k.name; }) != keys.end ()) { LOG (error) << ustring::compose ( "key: %1, there is a key with name %2 registered already", k.str (), k.name); throw duplicatekey_error (ustring::compose ( "key: %1, there is a key with name %2 registered already", k.str (), k.name).c_str ()); } } bool has_master = true; auto r = keys.insert (KeyBinding (k, t)); if (!r.second) { /* LOG (debug) << "user def: " << k.userdefined; */ if (!r.first->first.userdefined && k.userdefined) { /* default key, removing and replacing with user defined. target of * default key will be unreachable. */ ustring wrr = ustring::compose ( "key: %1 (%2) already exists in map with name: %3, overwriting.", k.str (), k.name, r.first->first.name); LOG (warn) << wrr; keys.erase (r.first); r = keys.insert (KeyBinding (k, t)); } else if (r.first->first.userdefined && k.userdefined) { ustring err = ustring::compose ( "key: %1 (%2) is already user-configured in map with name: %3", k.str (), k.name, r.first->first.name); LOG (error) << err; throw duplicatekey_error (err.c_str()); } else if (r.first->first.userdefined && !k.userdefined) { ustring err = ustring::compose ( "key: %1 (%2) is user-configured in map with name: %3, will try aliases.", k.str (), k.name, r.first->first.name); LOG (warn) << err; has_master = false; } else { /* neither are user-configured, we have a hardcoded conflict */ ustring err = ustring::compose ( "key: %1 (%2) is already mapped with name: %3", k.str (), k.name, r.first->first.name); LOG (error) << err; throw duplicatekey_error (err.c_str()); } } /* get pointer to key in map */ const Key * master; if (has_master) { auto s = keys.find (k); master = &(s->first); } for (auto & ka : aliases) { /* LOG (debug) << "key: alias: " << ka.str () << "(" << ka.key << ")"; */ ka.name = k.name; ka.help = k.help; ka.userdefined = userdefined; if (has_master) { ka.isalias = true; ka.master_key = master; } auto r = keys.insert (KeyBinding (ka, NULL)); if (!r.second) { if (!r.first->first.userdefined && ka.userdefined) { /* default key, removing and replacing with user defined. target of * default key will be unreachable. */ ustring wrr = ustring::compose ( "key alias: %1 (%2) already exists in map with name: %3, overwriting.", k.str (), k.name, r.first->first.name); LOG (warn) << wrr; keys.erase (r.first); r = keys.insert (KeyBinding (k, t)); if (has_master) has_aliases = true; has_master = true; auto s = keys.find (k); master = &(s->first); } else if (r.first->first.userdefined && k.userdefined) { ustring err = ustring::compose ( "key alias: %1 (%2) is already user-configured in map with name: %3", k.str (), k.name, r.first->first.name); LOG (error) << err; throw duplicatekey_error (err.c_str()); } else { ustring err = ustring::compose ( "key alias: %1 (%2) is user-configured in map with name: %3, will try other aliases.", k.str (), k.name, r.first->first.name); LOG (warn) << err; } } else { if (has_master) has_aliases = true; has_master = true; auto s = keys.find (k); master = &(s->first); } } /* we dont know if any of the master key or any of the aliases * got successfully added */ if (has_master) { std::map>::iterator s = keys.find (k); s->first.hasaliases = has_aliases; } } void Keybindings::register_run (ustring name, std::function cb) { /* name will be looked up in user targets, cb will be * called with target and undo-target cmd string */ auto b = user_run_bindings.begin (); while (b = std::find_if (b, user_run_bindings.end (), [&](std::pair> p) { return p.first.name == name; }), b != user_run_bindings.end ()) { /* b is now a matching binding */ LOG (info) << "ky: run, binding: " << name << "(" << b->first.str () << ") (userdefined: " << b->first.userdefined << ") to: " << b->second.first << ", " << b->second.second; register_key (b->first, b->first.name, ustring::compose ("Run hook: %1,%2", b->second.first, b->second.second), bind (cb, _1, b->second.first, b->second.second) ); b++; } } bool Keybindings::handle (GdkEventKey * event) { if (keys.empty ()) return false; Key ek (event); auto s = keys.find (ek); if (s != keys.end ()) { if (loghandle) LOG (debug) << "ky: " << title << ", handling: " << s->first.str () << " (" << s->first.name << ")"; if (s->first.isalias) { auto m = keys.find (*(s->first.master_key)); return m->second (s->first); } else { return s->second (s->first); } } else { if (loghandle) LOG (debug) << "ky: " << title << ", unknown key: " << ek.str (); } return false; } bool Keybindings::handle (ustring name) { if (keys.empty ()) return false; auto s = std::find_if (keys.begin (), keys.end (), [&](std::pair> p) { return p.first.name == name; }); if (s != keys.end ()) { if (!s->first.isalias) { return s->second (s->first); } else { auto m = keys.find (*(s->first.master_key)); return m->second (s->first); } } else { throw keyspec_error (ustring::compose ("tried to handle unknown key name: %1", name).c_str()); } } // }}} /* Key {{{ */ Key::Key () { } guint Key::get_keyval (ustring k) { if (k.size () == 1) { return gdk_unicode_to_keyval (k[0]); } else { /* check if key is in map */ UstringUtils::trim (k); const char * k_str = k.c_str (); guint kk = gdk_keyval_from_name (k_str); return kk; } } Key::Key (ustring spec, ustring _n, ustring _h) { // {{{ /* generate key from spec like: * k : for key 'k' * C-k : for Ctrl-k * M-k : for Alt-k * C-M-K : for Ctrl-Alt-K * K : for Shift-k * */ name = _n; help = _h; vector spec_parts = VectorUtils::split_and_trim (spec, "-"); if (spec_parts.size () > 3) { LOG (error) << "key spec invalid: " << spec; throw keyspec_error ("invalid length of spec"); } if (spec_parts.size () == 1) { ctrl = false; meta = false; key = get_keyval (spec_parts[0]); return; } if (spec_parts.size () >= 2) { /* one modifier */ char M = spec_parts[0][0]; if (!((M == 'C') || (M == 'M'))) { LOG (error) << "key spec invalid: " << spec; throw keyspec_error ("invalid modifier in key spec"); } if (M == 'C') ctrl = true; if (M == 'M') meta = true; if (spec_parts.size () == 2) { key = get_keyval (spec_parts[1]); return; } } if (spec_parts.size () >= 3) { char M = spec_parts[1][0]; if (!((M == 'C') || (M == 'M'))) { LOG (error) << "key spec invalid: " << spec; throw keyspec_error ("invalid modifier in key spec"); } if (M == 'C') { if (ctrl) { LOG (error) << "key spec invalid: " << spec; throw keyspec_error ("modifier already specified"); } ctrl = true; } if (M == 'M') { if (meta) { LOG (error) << "key spec invalid: " << spec; throw keyspec_error ("modifier already specified"); } meta = true; } key = get_keyval (spec_parts[2]); } } // }}} Key::Key (guint k, ustring _n, ustring _h) { ctrl = false; meta = false; key = k; name = _n; help = _h; } Key::Key (bool _c, bool _m, char k, ustring _n, ustring _h) { ctrl = _c; meta = _m; key = gdk_unicode_to_keyval(k); name = _n; help = _h; } Key::Key (bool _c, bool _m, guint k, ustring _n, ustring _h) { ctrl = _c; meta = _m; key = k; name = _n; help = _h; } Key::Key (GdkEventKey *event, ustring _n, ustring _h) { ctrl = (event->state & GDK_CONTROL_MASK); meta = (event->state & GDK_MOD1_MASK); key = event->keyval; name = _n; help = _h; } ustring Key::str () const { ustring s; if (ctrl) s += "C-"; if (meta) s += "M-"; char k = gdk_keyval_to_unicode (key); if (isgraph (k)) { s += k; } else { gchar * c = gdk_keyval_name (key); if (c == NULL) { LOG (error) << "invalid key: " << key << " for: " << name; throw keyspec_error ("invalid key"); } else { s += ustring (c); } } return s; } bool Key::operator== ( const Key & other ) const { return ((other.key == key) && (other.ctrl == ctrl) && (other.meta == meta)); } bool Key::operator< ( const Key & other ) const { if (other.ctrl && !ctrl) return true; else if (ctrl && !other.ctrl) return false; if (other.meta && !meta) return true; else if (meta && !other.meta) return false; return key < other.key; } UnboundKey::UnboundKey () { unbound = true; userdefined = false; } /************ * exceptions * ********** */ keyspec_error::keyspec_error (const char * w) : runtime_error (w) { } duplicatekey_error::duplicatekey_error (const char * w) : runtime_error (w) { } // }}} } astroid-0.14/src/modes/keybindings.hh000066400000000000000000000070731335422170400176400ustar00rootroot00000000000000# pragma once # include # include # include # include # include "proto.hh" namespace Astroid { struct Key { Key (); Key (ustring spec, ustring name = "", ustring help = ""); Key (guint, ustring name = "", ustring help = ""); Key (bool _c, bool _m, guint k, ustring name = "", ustring help = ""); Key (bool _c, bool _m, char k, ustring name = "", ustring help = ""); Key (GdkEventKey *, ustring name = "", ustring help = ""); /* only these three memebers define the logical state of the Key */ bool ctrl = false; bool meta = false; guint key = 0; /* GDK_KEY_* */ mutable ustring name = ""; mutable ustring help = ""; mutable bool unbound = false; mutable bool userdefined = false; mutable bool allow_duplicate_name = false; /* used for run targets */ mutable bool hasaliases = false; /* this is a master key with other aliases */ mutable bool isalias = false; /* this key is an alias for another master key */ mutable const Key * master_key; bool operator== ( const Key & other ) const; bool operator< ( const Key & other ) const; ustring str () const; static Key create (ustring spec); static guint get_keyval (ustring k); }; /* unbound keys are used as targets that are not bound to a key * by default, but may be bound using a custom keybinding */ struct UnboundKey : public Key { UnboundKey (); }; /* exceptions */ class keyspec_error : public std::runtime_error { public: keyspec_error (const char *); }; class duplicatekey_error : public std::runtime_error { public: duplicatekey_error (const char *); }; class Keybindings { public: Keybindings (); static void init (); void set_prefix (ustring title, ustring prefix); ustring title; /* title of keybinding set */ bool loghandle = false; /* log handling */ typedef std::pair> KeyBinding; void register_key (Key, ustring name, ustring help, std::function); void register_key (ustring spec, ustring name, ustring help, std::function); void register_key (Key, std::vector, ustring name, ustring help, std::function); void register_key (ustring spec, std::vector, ustring name, ustring help, std::function); void register_key (Key, std::vector, ustring name, ustring help, std::function); void register_key (ustring spec, std::vector, ustring name, ustring help, std::function); void register_run (ustring name, std::function); bool handle (GdkEventKey *); bool handle (ustring name); void clear (); ustring short_help (); ustring help (); private: std::map> keys; ustring prefix = ""; static std::vector user_bindings; static std::vector>> user_run_bindings; static std::atomic user_bindings_loaded; static const char * user_bindings_file; }; } astroid-0.14/src/modes/log_view.cc000066400000000000000000000125101335422170400171230ustar00rootroot00000000000000# include "astroid.hh" # include # include # include # include # include # include # include # include # include # include "log_view.hh" namespace logging = boost::log; namespace sinks = boost::log::sinks; namespace expr = boost::log::expressions; namespace Astroid { LogView::LogView (MainWindow * mw) : Mode (mw) { set_label ("Log"); scroll.add (tv); pack_start (scroll); store = Gtk::ListStore::create (m_columns); tv.set_model (store); Gtk::CellRendererText * renderer_text = Gtk::manage (new Gtk::CellRendererText); renderer_text->property_family().set_value ("monospace"); int cols_count = tv.append_column ("log entry", *renderer_text); Gtk::TreeViewColumn * pcolumn = tv.get_column (cols_count -1); if (pcolumn) { pcolumn->add_attribute (renderer_text->property_markup(), m_columns.m_col_str); } tv.set_headers_visible (false); tv.set_sensitive (true); set_sensitive (true); set_can_focus (true); show_all_children (); /* register with boost::log */ auto core = logging::core::get (); lv = boost::shared_ptr (new LogViewSink (this)); sink = boost::shared_ptr (new lv_sink_t (lv)); core->add_sink (sink); msgs_d.connect (sigc::mem_fun (this, &LogView::consume)); LOG (debug) << "log window ready."; keys.title = "Log view"; keys.register_key ("j", { Key (GDK_KEY_Down) }, "log.down", "Move cursor down", [&] (Key) { if (store->children().size() < 2) return true; Gtk::TreePath path; Gtk::TreeViewColumn *c; tv.get_cursor (path, c); path.next (); Gtk::TreeIter it = store->get_iter (path); if (it) { tv.set_cursor (path); } return true; }); keys.register_key ("k", { Key (GDK_KEY_Up) }, "log.up", "Move cursor up", [&] (Key) { Gtk::TreePath path; Gtk::TreeViewColumn *c; tv.get_cursor (path, c); path.prev (); if (path) { tv.set_cursor (path); } return true; }); keys.register_key ("J", "log.page_down", "Page down", [&] (Key) { auto adj = tv.get_vadjustment (); adj->set_value (adj->get_value() + adj->get_step_increment ()); return true; }); keys.register_key ("K", "log.page_up", "Page up", [&] (Key) { auto adj = tv.get_vadjustment (); adj->set_value (adj->get_value() - adj->get_step_increment ()); return true; }); keys.register_key ("1", { Key (GDK_KEY_Home) }, "log.home", "Scroll home", [&] (Key) { /* select first */ tv.set_cursor (Gtk::TreePath("0")); return true; }); keys.register_key ("0", { Key (GDK_KEY_End) }, "log.end", "Scroll to end", [&] (Key) { /* select last */ auto it = store->children().end (); auto p = store->get_path (--it); tv.set_cursor (p); return true; }); keys.loghandle = false; } void LogView::pre_close () { auto core = logging::core::get (); core->remove_sink (sink); sink.reset (); lv.reset (); } void LogView::grab_modal () { add_modal_grab (); grab_focus (); } void LogView::release_modal () { remove_modal_grab (); } void LogView::consume () { std::unique_lock lk (msgs_m); while (!msgs.empty ()) { auto p = msgs.front (); msgs.pop_front (); lk.unlock (); auto iter = store->append(); auto row = *iter; row[m_columns.m_col_str] = p; auto path = store->get_path (iter); tv.scroll_to_row (path); tv.set_cursor (path); lk.lock (); // for while } lk.unlock (); // for while } LogViewSink::LogViewSink (LogView * lv) { log_view = lv; } LogViewSink::LogViewSink (const std::shared_ptr &lvs) { log_view = lvs->log_view; } void LogViewSink::consume (logging::record_view const& rec, string_type const& message) { auto lvl = rec[logging::trivial::severity]; auto ts = logging::extract ("TimeStamp",rec); boost::posix_time::time_facet * f = new boost::posix_time::time_facet ("%H:%M:%S.%f"); std::ostringstream s; s.imbue (std::locale (s.getloc (), f)); s << "[" << std::setw (6) << lvl << "] "; s << *ts << ": " << Glib::Markup::escape_text (message); ustring l = s.str (); if (lvl == logging::trivial::error) { l = "" + l + ""; } else if (lvl == logging::trivial::warning) { l = "" + l + ""; } else if (lvl == logging::trivial::info) { l = l; } else { l = "" + l + ""; } std::unique_lock lk (log_view->msgs_m); bool notify = log_view->msgs.empty (); log_view->msgs.push_back (l); lk.unlock (); if (notify) log_view->msgs_d.emit (); } } astroid-0.14/src/modes/log_view.hh000066400000000000000000000031351335422170400171400ustar00rootroot00000000000000# pragma once # include # include # include "proto.hh" # include "astroid.hh" # include # include # include # include namespace logging = boost::log; namespace sinks = boost::log::sinks; # include "mode.hh" namespace Astroid { class LogViewSink : public sinks::basic_formatted_sink_backend < char, sinks::synchronized_feeding> { public: LogViewSink (LogView *); LogViewSink (const std::shared_ptr &lvs); void consume (logging::record_view const& rec, string_type const& message); LogView * log_view; }; typedef sinks::synchronous_sink lv_sink_t; class LogView : public Mode { friend LogViewSink; public: LogView (MainWindow *); void grab_modal () override; void release_modal () override; void pre_close () override; boost::shared_ptr lv; boost::shared_ptr sink; protected: class ModelColumns : public Gtk::TreeModel::ColumnRecord { public: ModelColumns() { add(m_col_str);} Gtk::TreeModelColumn m_col_str; }; ModelColumns m_columns; Gtk::TreeView tv; Gtk::ScrolledWindow scroll; refptr store; /* consume log on GUI thread */ std::deque msgs; std::mutex msgs_m; Glib::Dispatcher msgs_d; void consume (); }; } astroid-0.14/src/modes/mode.cc000066400000000000000000000032661335422170400162440ustar00rootroot00000000000000# include "mode.hh" # include "main_window.hh" # include "keybindings.hh" namespace Astroid { Mode::Mode (MainWindow * mw) : Gtk::Box (Gtk::ORIENTATION_VERTICAL) { set_main_window (mw); invincible = false; tab_label.set_can_focus (false); keys.title = "Mode"; } void Mode::set_main_window (MainWindow *mw) { main_window = mw; } void Mode::set_label (ustring s) { if (static_cast(s.size()) > MAX_TAB_LEN) s = s.substr(0, MAX_TAB_LEN - 3) + "..."; tab_label.set_text (s); label = s; main_window->update_title_dispatcher.emit (); } void Mode::pre_close () { /* allow sub-modes to clean up anything when we are sure that the * mode will be closed */ } void Mode::close (bool force) { /* close current page */ using std::endl; int c = main_window->notebook.page_num (*this); if (((Mode*) main_window->notebook.get_nth_page (c))->invincible && !force) { LOG (debug) << "mode: mode invincible, not closing."; } else { main_window->del_mode (c); } } void Mode::ask_yes_no ( ustring question, std::function closure) { return main_window->ask_yes_no (question, closure); } bool Mode::multi_key (Keybindings & kb, Key k) { return main_window->multi_key (kb, k); } bool Mode::on_key_press_event (GdkEventKey *event) { /* check if there are any dialogs (question-bars) open on the main_window */ if (main_window->mode_key_handler (event)) return true; if (get_keys ()->handle (event)) return true; return false; } ustring Mode::get_label () { return label; } Keybindings * Mode::get_keys () { return &keys; } } astroid-0.14/src/modes/mode.hh000066400000000000000000000016711335422170400162540ustar00rootroot00000000000000# pragma once # include # include # include # include "proto.hh" # include "keybindings.hh" namespace Astroid { class Mode : public Gtk::Box { public: Mode (MainWindow *); Gtk::Label tab_label; void set_main_window (MainWindow *); MainWindow * main_window; std::atomic invincible; virtual void close (bool = false); virtual void pre_close (); private: ustring label; protected: const int MAX_TAB_LEN = 35; void set_label (ustring); public: Keybindings keys; bool on_key_press_event (GdkEventKey *event) override; virtual Keybindings * get_keys (); virtual void grab_modal () = 0; virtual void release_modal () = 0; virtual ustring get_label (); /* wrappers to MainWindow */ void ask_yes_no (ustring, std::function); bool multi_key (Keybindings &, Key); }; } astroid-0.14/src/modes/paned_mode.cc000066400000000000000000000064131335422170400174100ustar00rootroot00000000000000# include # include # include # include # include # include "astroid.hh" # include "mode.hh" # include "paned_mode.hh" using namespace std; namespace Astroid { PanedMode::PanedMode (MainWindow * mw) : Mode (mw) { set_can_focus (true); add_events (Gdk::KEY_PRESS_MASK); paned = Gtk::manage (new Gtk::Paned ()); pack_start (*paned, true, true, 0); paned->show_all (); keys.title = "Paned mode"; keys.register_key (Key (false, true, (guint) GDK_KEY_space), "pane.swap_focus", "Swap focus to other pane if open", [&] (Key) { if (packed == 2) { release_modal (); current = (current == 0 ? 1 : 0); grab_modal (); } return true; }); /* color used for selected pane */ selected_color = Gdk::RGBA ("#4a90d9"); } PanedMode::~PanedMode () { LOG (debug) << "pm: deconstruct"; } void PanedMode::add_pane (int p, Mode * w) { LOG (debug) << "pm: add pane"; if (packed >= 2) { throw out_of_range ("Can only embed two panes."); } if (p == 0) pw1 = w; else pw2 = w; w = Gtk::manage (w); Gtk::EventBox * fb = Gtk::manage (new Gtk::EventBox ()); fb->add (*w); if (p == 0) { fp1 = fb; paned->pack1 (*fb, true, false); } else { fp2 = fb; paned->pack2 (*fb, true, false); } packed++; if (packed > 1) { pw1->set_margin_top (5); pw2->set_margin_top (5); } paned->show_all (); current = p; } void PanedMode::del_pane (int p) { LOG (debug) << "pm: del pane: " << p; if (p == current && has_modal) { release_modal (); current = -1; has_modal = true; } if (p == 0) { paned->remove (*fp1); delete fp1; delete pw1; pw1 = NULL; fp1 = NULL; current = 1; packed--; if (pw2 != NULL) { pw2->set_margin_top (0); } } else { paned->remove (*fp2); if (pw1 != NULL) { pw1->set_margin_top (0); } delete fp2; delete pw2; fp2 = NULL; pw2 = NULL; current = 0; packed--; } if (packed < 1) { current = -1; has_modal = false; } else { if (has_modal) { grab_modal (); } } } void PanedMode::grab_modal () { //LOG (debug) << "pm: grab modal to: " << current; if (current == 0) { pw1->grab_modal (); if (pw2 != NULL) { fp1->override_background_color (selected_color, Gtk::StateFlags::STATE_FLAG_NORMAL); fp2->override_background_color (Gdk::RGBA (), Gtk::StateFlags::STATE_FLAG_NORMAL); } has_modal = true; } else if (current == 1) { pw2->grab_modal (); if (pw1 != NULL) { fp2->override_background_color (selected_color, Gtk::StateFlags::STATE_FLAG_NORMAL); fp1->override_background_color (Gdk::RGBA (), Gtk::StateFlags::STATE_FLAG_NORMAL); } has_modal = true; } } void PanedMode::release_modal () { //LOG (debug) << "pm: release modal: " << current << " (" << has_modal << ")"; if (current == 0) { pw1->release_modal (); } else if (current == 1) { pw2->release_modal (); } has_modal = false; } } astroid-0.14/src/modes/paned_mode.hh000066400000000000000000000013561335422170400174230ustar00rootroot00000000000000# pragma once # include # include # include # include "mode.hh" namespace Astroid { /* a virtual mode class with two panes */ class PanedMode : public Mode { public: PanedMode (MainWindow *); ~PanedMode (); /* hpane: can be split into two horizontal panes */ Gtk::Paned * paned; Gtk::EventBox * fp1 = NULL; Gtk::EventBox * fp2 = NULL; Mode * pw1 = NULL; Mode * pw2 = NULL; int packed = 0; int current = -1; void add_pane (int, Mode * w); void del_pane (int); bool has_modal = false; virtual void grab_modal () override; virtual void release_modal () override; Gdk::RGBA selected_color; }; } astroid-0.14/src/modes/raw_message.cc000066400000000000000000000076051335422170400176160ustar00rootroot00000000000000# include # include # include # include "astroid.hh" # include "raw_message.hh" # include "message_thread.hh" # include "utils/ustring_utils.hh" using namespace std; namespace bfs = boost::filesystem; namespace Astroid { RawMessage::RawMessage (MainWindow * mw) : Mode (mw) { scroll.add (tv); pack_start (scroll, true, true, 5); tv.set_editable (false); tv.set_can_focus (false); tv.set_left_margin (10); tv.set_right_margin (10); tv.set_wrap_mode (Gtk::WRAP_WORD_CHAR); Pango::FontDescription fnt; fnt.set_family ("monospace"); tv.override_font (fnt); show_all_children (); keys.title = "Raw message"; // {{{ keys.register_key ("j", { Key (GDK_KEY_Down) }, "raw.down", "Move down", [&] (Key) { auto adj = tv.get_vadjustment (); adj->set_value (adj->get_value() + adj->get_step_increment ()); return true; }); keys.register_key ("J", "raw.page_down", "Page down", [&] (Key) { auto adj = tv.get_vadjustment (); adj->set_value (adj->get_value() + adj->get_page_increment ()); return true; }); keys.register_key ("k", { Key (GDK_KEY_Up) }, "raw.up", "Move up", [&] (Key) { auto adj = tv.get_vadjustment (); adj->set_value (adj->get_value() - adj->get_step_increment ()); return true; }); keys.register_key ("K", "raw.page_up", "Page up", [&] (Key) { auto adj = tv.get_vadjustment (); adj->set_value (adj->get_value() - adj->get_page_increment ()); return true; }); keys.register_key ("1", { Key (GDK_KEY_Home) }, "raw.home", "Scroll home", [&] (Key) { /* select top */ auto adj = tv.get_vadjustment (); adj->set_value (adj->get_lower()); return true; }); keys.register_key ("0", { Key (GDK_KEY_End) }, "raw.end", "Scroll to end", [&] (Key) { /* select end */ auto adj = tv.get_vadjustment (); adj->set_value (adj->get_upper()); return true; }); // }}} } RawMessage::RawMessage (MainWindow * mw, const char * fname, bool _delete) : RawMessage (mw) { delete_on_close = _delete; this->fname = fname; stringstream l ("Raw message: "); l << fname; set_label (l.str()); /* load message source */ LOG (info) << "rm: loading message from file: " << fname; refptr buf = tv.get_buffer (); stringstream s; /* add filenames */ s << "Filename: " << fname << endl << endl; std::string data = Glib::file_get_contents (fname); auto cnv = UstringUtils::data_to_ustring (data.size (), data.c_str ()); if (cnv.first) { s << cnv.second; } else { s << "Error: Could not convert input to UTF-8."; } buf->set_text ( s.str () ); } RawMessage::RawMessage (MainWindow *mw, refptr _msg) : RawMessage (mw) { msg = _msg; set_label ("Raw message: " + msg->subject); /* load message source */ LOG (info) << "rm: loading message.. "; refptr buf = tv.get_buffer (); stringstream s; /* add filenames */ s << "Filename: " << msg->fname << endl << endl; auto c = msg->raw_contents (); auto cnv = UstringUtils::bytearray_to_ustring (c); if (cnv.first) { s << cnv.second; } else { s << "Error: Could not convert input to UTF-8."; } buf->set_text ( s.str () ); } RawMessage::~RawMessage () { if (delete_on_close) { if (bfs::exists (fname)) { unlink (fname.c_str ()); } } } void RawMessage::grab_modal () { add_modal_grab (); grab_focus (); } void RawMessage::release_modal () { remove_modal_grab (); } } astroid-0.14/src/modes/raw_message.hh000066400000000000000000000011411335422170400176150ustar00rootroot00000000000000# include # include "proto.hh" # include "mode.hh" namespace bfs = boost::filesystem; namespace Astroid { class RawMessage : public Mode { public: RawMessage (MainWindow *); RawMessage (MainWindow *, refptr); RawMessage (MainWindow *, const char *, bool delete_on_close = false); ~RawMessage (); refptr msg; void grab_modal () override; void release_modal () override; private: bool delete_on_close = false; bfs::path fname; Gtk::ScrolledWindow scroll; Gtk::TextView tv; }; } astroid-0.14/src/modes/reply_message.cc000066400000000000000000000177251335422170400201640ustar00rootroot00000000000000# include # include # include "astroid.hh" # include "db.hh" # include "edit_message.hh" # include "reply_message.hh" # include "actions/action_manager.hh" # include "actions/onmessage.hh" # include "message_thread.hh" # include "utils/address.hh" using namespace std; namespace Astroid { ReplyMessage::ReplyMessage (MainWindow * mw, refptr _msg, ReplyMode rmode) : EditMessage (mw, false) { msg = _msg; LOG (info) << "re: reply to: " << msg->mid; mailinglist_reply_to_sender = astroid->config ().get ("mail.reply.mailinglist_reply_to_sender"); /* set subject */ if (!(msg->subject.find_first_of ("Re:") == 0)) { subject = ustring::compose ("Re: %1", msg->subject); } else { subject = msg->subject; } if (subject.size () > 0) { set_label ("New message: " + subject); } /* quote original message */ ostringstream quoted; ustring quoting_a = ustring::compose (astroid->config ().get ("mail.reply.quote_line"), boost::replace_all_copy (string(Address(msg->sender.raw()).fail_safe_name()), "%", "%%"), boost::replace_all_copy (string(msg->pretty_verbose_date()), "%", "%%")); /* quote string can also be formatted using date formats: * https://developer.gnome.org/glibmm/stable/classGlib_1_1DateTime.html#a820ed73fbf469a24f86f417540873339 * * note that the format specifiers in the docs use a leading '\' this should * be a leading '%'. * */ Glib::DateTime dt = Glib::DateTime::create_now_local (msg->time); quoting_a = dt.format (quoting_a); quoted << quoting_a.raw () << endl; string vt = msg->viewable_text(false); stringstream sstr (vt); while (sstr.good()) { string line; getline (sstr, line); quoted << ">"; if (line[0] != '>') quoted << " "; quoted << line << endl; } body = ustring(quoted.str()); references = msg->references + " <" + msg->mid + ">"; inreplyto = "<" + msg->mid + ">"; /* reply mode combobox */ reply_revealer->set_reveal_child (true); reply_store = Gtk::ListStore::create (reply_columns); reply_mode_combo->set_model (reply_store); auto row = *(reply_store->append()); row[reply_columns.reply_string] = "Custom"; row[reply_columns.reply] = Rep_Custom; row = *(reply_store->append()); row[reply_columns.reply_string] = "Default (Reply-to address)"; row[reply_columns.reply] = Rep_Default; row = *(reply_store->append()); row[reply_columns.reply_string] = "Sender"; row[reply_columns.reply] = Rep_Sender; row = *(reply_store->append()); row[reply_columns.reply_string] = "All"; row[reply_columns.reply] = Rep_All; if (msg->is_list_post ()) { row = *(reply_store->append()); row[reply_columns.reply_string] = "Mailinglist"; row[reply_columns.reply] = Rep_MailingList; } else { if (rmode == Rep_MailingList) { LOG (warn) << "re: message is not a list post, using default reply to all."; rmode = Rep_All; } } reply_mode_combo->set_active (rmode); // must match order in ReplyMode reply_mode_combo->pack_start (reply_columns.reply_string); load_receivers (); reply_mode_combo->signal_changed().connect ( sigc::mem_fun (this, &ReplyMessage::on_receiver_combo_changed)); /* determine which account to use */ set_from (accounts->get_assosciated_account (msg)); /* reload message */ prepare_message (); read_edited_message (); /* match encryption / signing to original message if possible */ { Account a = accounts->accounts[account_no]; if (a.has_gpg) { if (msg->is_encrypted ()) { switch_encrypt->set_active (true); switch_sign->set_active (true); } else if (msg->is_signed ()) { switch_sign->set_active (true); } } } editor->start_editor_when_ready = true; /* sent signal */ message_sent_attempt().connect ( sigc::mem_fun (this, &ReplyMessage::on_message_sent_attempt_received)); keys.title = "Reply mode"; keys.register_key ("r", "reply.cycle_reply_to", "Cycle through reply selector", [&] (Key) { if (editor->started ()) { set_warning ("Cannot change reply to when editing."); return true; } /* cycle through reply combo box */ if (!message_sent && !sending_in_progress.load()) { int i = reply_mode_combo->get_active_row_number (); if (i >= (static_cast(reply_store->children().size())-1)) i = 0; else i++; reply_mode_combo->set_active (i); } return true; }); keys.register_key ("R", "reply.open_reply_to", "Open reply selector", [&] (Key) { if (editor->started ()) { set_warning ("Cannot change reply to when editing."); return true; } /* bring up reply combo box */ if (!message_sent && !sending_in_progress.load()) { reply_mode_combo->popup (); } return true; }); edit_when_ready (); } void ReplyMessage::on_receiver_combo_changed () { if (!in_read) { load_receivers (); prepare_message (); read_edited_message (); } } void ReplyMessage::load_receivers () { auto iter = reply_mode_combo->get_active (); auto row = *iter; ReplyMode rmode = row[reply_columns.reply]; if (rmode == Rep_Sender || rmode == Rep_Default) { if (rmode == Rep_Default && msg->reply_to.length () > 0) { to = msg->reply_to; } else { /* no reply-to or Rep_Sender */ to = msg->sender; } auto msg_to = Address(to); if (accounts->is_me(msg_to)) { AddressList al (msg->to()); to = al.str (); } cc = ""; bcc = ""; } else if (rmode == Rep_All) { ustring from; if (msg->reply_to.length () > 0) { from = msg->reply_to; } else { from = msg->sender; } AddressList al; auto msg_from = Address(from); if (!accounts->is_me(msg_from)) { al += msg_from; } al += AddressList (msg->to()); al.remove_me (); al.remove_duplicates (); to = al.str (); AddressList ac (msg->cc ()); ac.remove_me (); ac.remove_duplicates (); ac -= al; cc = ac.str (); AddressList acc (msg->bcc ()); acc.remove_me (); acc.remove_duplicates (); acc -= al; acc -= ac; bcc = acc.str (); } else if (rmode == Rep_MailingList) { AddressList al = msg->list_post (); al += msg->to(); if (mailinglist_reply_to_sender) { ustring from; if (msg->reply_to.length () > 0) { from = msg->reply_to; } else { from = msg->sender; } al += Address(from); } al.remove_me (); al.remove_duplicates (); to = al.str (); AddressList ac (msg->cc ()); ac -= al; ac.remove_me (); ac.remove_duplicates (); cc = ac.str (); AddressList acc (msg->bcc ()); acc -= al; acc -= ac; acc.remove_me (); acc.remove_duplicates (); bcc = acc.str (); } } void ReplyMessage::on_message_sent_attempt_received (bool res) { if (res) { LOG (info) << "re: message successfully sent, adding replied tag to original."; if (!msg->in_notmuch) { LOG (warn) << "re: message not in notmuch."; return; } astroid->actions->doit (refptr( new OnMessageAction (msg->mid, msg->tid, [] (Db * db, notmuch_message_t * msg) { notmuch_message_add_tag (msg, "replied"); if (db->maildir_synchronize_flags){ notmuch_message_tags_to_maildir_flags (msg); } }))); } } } astroid-0.14/src/modes/reply_message.hh000066400000000000000000000017041335422170400201640ustar00rootroot00000000000000# pragma once # include "proto.hh" # include "edit_message.hh" namespace Astroid { class ReplyMessage : public EditMessage { public: /* reply settings */ enum ReplyMode { Rep_Custom, Rep_Default, /* reply-to */ Rep_Sender, Rep_All, Rep_MailingList, }; ReplyMessage (MainWindow *, refptr, ReplyMode rmode = Rep_Default); refptr msg; class ReplyModeColumns : public Gtk::TreeModel::ColumnRecord { public: ReplyModeColumns () { add (reply_string); add (reply); } Gtk::TreeModelColumn reply_string; Gtk::TreeModelColumn reply; }; ReplyModeColumns reply_columns; refptr reply_store; private: void load_receivers (); void on_receiver_combo_changed (); void on_message_sent_attempt_received (bool); bool mailinglist_reply_to_sender; }; } astroid-0.14/src/modes/saved_searches.cc000066400000000000000000000465541335422170400203060ustar00rootroot00000000000000# include "saved_searches.hh" # include "astroid.hh" # include "config.hh" # include "main_window.hh" # include "thread_index/thread_index.hh" # include "db.hh" # include # include using boost::property_tree::ptree; using std::endl; namespace Astroid { Glib::Dispatcher SavedSearches::m_reload; std::vector SavedSearches::history; SavedSearches::SavedSearches (MainWindow * mw) : Mode (mw) { set_label ("Saved searches"); page_jump_rows = astroid->config("thread_index").get("page_jump_rows"); scroll.add (tv); pack_start (scroll); store = Gtk::ListStore::create (m_columns); tv.set_model (store); /* tv.append_column ("Name", m_columns.m_col_name); */ Gtk::CellRendererText * renderer_text = Gtk::manage (new Gtk::CellRendererText); /* renderer_text->property_family().set_value ("monospace"); */ int cols_count = tv.append_column ("Name", *renderer_text); Gtk::TreeViewColumn * pcolumn = tv.get_column (cols_count -1); if (pcolumn) { pcolumn->add_attribute (renderer_text->property_markup(), m_columns.m_col_name); } tv.append_column ("Unread messages", m_columns.m_col_unread_messages_s); tv.append_column ("Total messages ", m_columns.m_col_total_messages); tv.append_column ("Query", m_columns.m_col_query); tv.set_headers_visible (false); tv.set_sensitive (true); set_sensitive (true); set_can_focus (true); show_all_children (); /* register keys {{{ */ keys.title = "Saved searches"; keys.register_key ("j", { Key (GDK_KEY_Down) }, "searches.down", "Move cursor down", [&] (Key) { if (store->children().size() < 2) return true; Gtk::TreePath path; Gtk::TreeViewColumn *c; tv.get_cursor (path, c); path.next (); while (path) { Gtk::TreeIter it = store->get_iter (path); if (!it) return true; if (!(*it)[m_columns.m_col_description]) break; path.next (); } if (path) { tv.set_cursor (path); } return true; }); keys.register_key ("k", { Key (GDK_KEY_Up) }, "searches.up", "Move cursor up", [&] (Key) { Gtk::TreePath path; Gtk::TreeViewColumn *c; tv.get_cursor (path, c); if (!path.prev ()) return true; while (path) { Gtk::TreeIter it = store->get_iter (path); if (!it) return true; if (!(*it)[m_columns.m_col_description]) break; if (!path.prev ()) return true; } if (path) { tv.set_cursor (path); } return true; }); keys.register_key ("s", "searches.save", "Save recent query as saved search", [&] (Key) { Gtk::TreePath path; Gtk::TreeViewColumn *c; tv.get_cursor (path, c); Gtk::TreeIter it = store->get_iter (path); auto row = *it; if (row[m_columns.m_col_history]) { ustring query = row[m_columns.m_col_query]; LOG (info) << "searches: saving query: " << query; save_query (query); } else { LOG (debug) << "searches: entry not a recent search."; return true; } return true; }); keys.register_key ("d", "searches.delete", "Delete saved query", [&] (Key) { Gtk::TreePath path; Gtk::TreeViewColumn *c; tv.get_cursor (path, c); Gtk::TreeIter it = store->get_iter (path); if (it) { auto row = *it; ustring name = row[m_columns.m_col_name]; ustring query = row[m_columns.m_col_query]; bool issaved = row[m_columns.m_col_saved]; bool ishistory = row[m_columns.m_col_history]; ask_yes_no ("Do you want to delete the selected query?", [&, name, query, issaved, ishistory] (bool yes) { LOG (debug) << "yes"; if (yes) { bool changed = false; if (issaved) { ptree sa = load_searches (); ptree s = sa.get_child ("saved"); /* TODO: warning, this will delete the first occurence of the query */ for (auto it = s.begin (); it != s.end ();) { if (it->second.data() == query) { LOG (info) << "searches: deleting: " << name << ":" << query; it = s.erase (it); changed = true; break; } else { it++; } } sa.put_child ("saved", s); if (changed) write_back_searches (sa); } else if (ishistory) { LOG (info) << "searches: deleting " << query; for (auto it = history.rbegin (); it != history.rend (); it++) { if (*it == query) { history.erase (std::next(it).base ()); m_reload (); break; } } } if (changed) { /* select new row */ path.prev (); Gtk::TreeIter it = store->get_iter (path); if (it) { tv.set_cursor (path); } else { tv.set_cursor (Gtk::TreePath ("1")); } } } }); } return true; }); keys.register_key ("C", "searches.clear_history", "Clear search history", [&] (Key) { LOG (info) << "searches: clearing search history.."; ask_yes_no ("Do you want to clear the search history?", [&] (bool yes) { if (yes) { history.clear (); m_reload (); } }); return true; }); keys.register_key ("J", "searches.page_down", "Page down", [&] (Key) { if (store->children().size() >= 2) { Gtk::TreePath path; Gtk::TreeViewColumn *c; tv.get_cursor (path, c); for (int i = 0; i < page_jump_rows; i++) { if (!path) break; path.next (); } /* skip headers */ while (path) { Gtk::TreeIter it = store->get_iter (path); if (!it) break; // we're at the end or something if (!(*it)[m_columns.m_col_description]) break; path.next (); } Gtk::TreeIter it = store->get_iter (path); if (it) { tv.set_cursor (path); } else { /* move to last */ auto it = store->children().end (); auto p = store->get_path (--it); if (p) tv.set_cursor (p); } } return true; }); keys.register_key ("K", "searches.page_up", "Page up", [&] (Key) { Gtk::TreePath path; Gtk::TreeViewColumn *c; tv.get_cursor (path, c); for (int i = 0; i < page_jump_rows; i++) { if (!path) break; path.prev (); } /* skip headers */ bool is_desc = true; while (path) { Gtk::TreeIter it = store->get_iter (path); if (!it) break; // beyond first if (!(*it)[m_columns.m_col_description]) { is_desc = false; break; } if (!path.prev ()) break; // probably at first } if (path && !is_desc) { tv.set_cursor (path); } else { /* move to first */ auto p = Gtk::TreePath("1"); if (p) tv.set_cursor (p); } return true; }); keys.register_key ("1", { Key (GDK_KEY_Home) }, "searches.home", "Scroll home", [&] (Key) { /* select first */ tv.set_cursor (Gtk::TreePath("0")); return true; }); keys.register_key ("0", { Key (GDK_KEY_End) }, "searches.end", "Scroll to end", [&] (Key) { /* select last */ auto it = store->children().end (); auto p = store->get_path (--it); tv.set_cursor (p); return true; }); keys.register_key (Key (GDK_KEY_Tab), "searches.next_unread", "Jump to next unread thread", [&] (Key) { Gtk::TreePath thispath, path; Gtk::TreeIter fwditer; Gtk::TreeViewColumn *c; tv.get_cursor (path, c); path.next (); fwditer = store->get_iter (path); thispath = path; Gtk::ListStore::Row row; bool found = false; while (fwditer) { row = *fwditer; if (row[m_columns.m_col_unread_messages] > 0) { found = true; path = store->get_path (fwditer); tv.set_cursor (path); break; } fwditer++; } /* wrap, and check from start */ if (!found) { fwditer = store->children().begin (); while (fwditer && store->get_path(fwditer) < thispath) { row = *fwditer; if (row[m_columns.m_col_unread_messages] > 0) { found = true; path = store->get_path (fwditer); tv.set_cursor (path); break; } fwditer++; } } return true; }); keys.register_key (Key (false, false, (guint) GDK_KEY_ISO_Left_Tab), "searches.previous_unread", "Jump to previous unread thread", [&] (Key) { Gtk::TreePath thispath, path; Gtk::TreeIter iter; Gtk::TreeViewColumn *c; tv.get_cursor (path, c); path.prev (); iter = store->get_iter (path); thispath = path; Gtk::ListStore::Row row; bool found = false; while (iter) { row = *iter; if (row[m_columns.m_col_unread_messages] > 0) { path = store->get_path (iter); tv.set_cursor (path); found = true; break; } iter--; } /* wrap, and check from end */ if (!found) { iter = store->children().end (); iter--; while (iter && store->get_path(iter) > thispath) { row = *iter; if (row[m_columns.m_col_unread_messages] > 0) { path = store->get_path (iter); tv.set_cursor (path); found = true; break; } iter--; } } return true; }); keys.register_key (Key (GDK_KEY_Return), { Key (GDK_KEY_KP_Enter) }, "searches.open", "Open query", [&] (Key) { Gtk::TreePath path; Gtk::TreeViewColumn *c; tv.get_cursor (path, c); Gtk::TreeIter iter; iter = store->get_iter (path); Gtk::ListStore::Row row = *iter; if (!row[m_columns.m_col_description]) { ustring query = row[m_columns.m_col_query]; ustring name = row[m_columns.m_col_name]; Mode * ti = new ThreadIndex (main_window, query, name); main_window->add_mode (ti); } return true; }); keys.register_key ("!", "searches.show_all_history", "Show all history lines", [&] (Key) { show_all_history = true; reload (); return true; }); /* }}} */ reload (); tv.set_cursor (Gtk::TreePath("1")); tv.signal_row_activated ().connect ( sigc::mem_fun (this, &SavedSearches::on_my_row_activated)); SavedSearches::m_reload.connect ( sigc::mem_fun (this, &SavedSearches::reload)); astroid->actions->signal_thread_changed ().connect ( sigc::mem_fun (this, &SavedSearches::on_thread_changed)); astroid->actions->signal_refreshed ().connect ( sigc::mem_fun (this, &SavedSearches::reload)); } void SavedSearches::on_my_row_activated ( const Gtk::TreeModel::Path &, Gtk::TreeViewColumn *) { Gtk::TreePath path; Gtk::TreeViewColumn *c; tv.get_cursor (path, c); Gtk::TreeIter iter; iter = store->get_iter (path); Gtk::ListStore::Row row = *iter; if (!row[m_columns.m_col_description]) { ustring query = row[m_columns.m_col_query]; ustring name = row[m_columns.m_col_name]; Mode * ti = new ThreadIndex (main_window, query, name); main_window->add_mode (ti); } } void SavedSearches::reload () { Gtk::TreePath path; Gtk::TreeViewColumn *c; tv.get_cursor (path, c); store->clear (); load_startup_queries (); load_saved_searches (); refresh_stats (); tv.set_cursor (path); } void SavedSearches::add_query (ustring name, ustring query, bool saved, bool history) { auto iter = store->append(); auto row = *iter; row[m_columns.m_col_name] = name; row[m_columns.m_col_query] = query; row[m_columns.m_col_saved] = saved; row[m_columns.m_col_history] = history; } void SavedSearches::on_thread_changed (Db * db, ustring) { refresh_stats_db (db); } void SavedSearches::refresh_stats () { Db db; refresh_stats_db (&db); } void SavedSearches::refresh_stats_db (Db *db) { LOG (debug) << "searches: refreshing.."; if (!main_window->is_current (this)) { LOG (debug) << "searches: skipping, not visible."; needs_refresh = true; return; } needs_refresh = false; for (auto row : store->children ()) { if (row[m_columns.m_col_description]) continue; ustring query = row[m_columns.m_col_query]; unsigned int total_messages, unread_messages; notmuch_status_t st = NOTMUCH_STATUS_SUCCESS; /* get stats */ notmuch_query_t * query_t = notmuch_query_create (db->nm_db, query.c_str ()); for (ustring & t : db->excluded_tags) { notmuch_query_add_tag_exclude (query_t, t.c_str()); } notmuch_query_set_omit_excluded (query_t, NOTMUCH_EXCLUDE_TRUE); st = notmuch_query_count_messages (query_t, &total_messages); // destructive if (st != NOTMUCH_STATUS_SUCCESS) total_messages = 0; notmuch_query_destroy (query_t); ustring unread_q_s = "(" + query + ") AND tag:unread"; notmuch_query_t * unread_q = notmuch_query_create (db->nm_db, unread_q_s.c_str()); for (ustring & t : db->excluded_tags) { notmuch_query_add_tag_exclude (unread_q, t.c_str()); } notmuch_query_set_omit_excluded (unread_q, NOTMUCH_EXCLUDE_TRUE); st = notmuch_query_count_messages (unread_q, &unread_messages); // destructive if (st != NOTMUCH_STATUS_SUCCESS) unread_messages = 0; notmuch_query_destroy (unread_q); row[m_columns.m_col_unread_messages] = unread_messages; row[m_columns.m_col_unread_messages_s] = ustring::compose ("(unread: %1)", unread_messages); row[m_columns.m_col_total_messages] = ustring::compose ("(total: %1)", total_messages); } } void SavedSearches::load_startup_queries () { /* add description */ auto iter = store->append(); auto row = *iter; row[m_columns.m_col_name] = "Startup queries"; row[m_columns.m_col_description] = true; /* load start up queries */ ptree qpt = astroid->config ("startup.queries"); for (const auto &kv : qpt) { ustring name = kv.first; ustring query = kv.second.data(); /* LOG (info) << "saved searches: got query: " << name << ": " << query; */ add_query (name, query); } } void SavedSearches::load_saved_searches () { /* add description */ auto iter = store->append(); auto row = *iter; row[m_columns.m_col_name] = "Saved searches"; row[m_columns.m_col_description] = true; ptree searches = load_searches (); /* load saved queries */ for (auto &kv : searches.get_child ("saved")) { ustring name = kv.first; ustring query = kv.second.data(); if (name == "none") name = ""; /* LOG (info) << "saved searches: got query: " << name << ": " << query; */ add_query (name, query, true); } int history_lines = astroid->config ("saved_searches").get ("history_lines_to_show"); if (!show_all_history && history_lines == 0) return; /* load search history */ iter = store->append(); row = *iter; row[m_columns.m_col_name] = "Search history"; row[m_columns.m_col_description] = true; int i = 0; for (auto it = history.rbegin (); it != history.rend (); ++it) { if (!show_all_history && (!((history_lines < 0) || (i < history_lines)))) break; add_query ("", *it, false, true); i++; } } std::vector SavedSearches::get_history () { return history; } ptree SavedSearches::load_searches () { ptree s; if (is_regular_file (astroid->standard_paths().searches_file)) { LOG (info) << "searches: loading saved searches.."; read_json (astroid->standard_paths().searches_file.c_str(), s); } if (s.count ("saved") == 0) { s.put ("saved", ""); } if (s.count ("history") == 0) { s.put ("history", ""); } return s; } void SavedSearches::write_back_searches (ptree s) { LOG (info) << "searches: writing back saved searches.."; write_json (astroid->standard_paths().searches_file.c_str (), s); m_reload (); } void SavedSearches::save_query (ustring q) { LOG (info) << "searches: adding query: " << q; ptree s = load_searches (); s.add ("saved.none", q); write_back_searches (s); } void SavedSearches::add_query_to_history (ustring q) { history.push_back (q); m_reload (); } void SavedSearches::init () { ptree h = load_searches ().get_child ("history"); LOG (debug) << "searches: loading history.."; for (auto &kv : h) { ustring name = kv.first; ustring query = kv.second.data(); if (name == "none") name = ""; /* LOG (debug) << "saved searches, history: got query: " << name << ": " << query; */ history.push_back (query); } } void SavedSearches::destruct () { /* writing search history */ bool save = astroid->config ("saved_searches").get ("save_history"); unsigned int maxh = astroid->config ("saved_searches").get ("history_lines"); if (save) { LOG (debug) << "searches: saving history.."; ptree s = load_searches (); ptree h; if (history.size () > maxh) { history.erase (history.end () - maxh, history.end ()); } for (auto &k : history) { h.add ("none", k); } s.put_child ("history", h); write_back_searches (s); } } void SavedSearches::grab_modal () { if (needs_refresh) refresh_stats (); add_modal_grab (); grab_focus (); } void SavedSearches::release_modal () { remove_modal_grab (); } } astroid-0.14/src/modes/saved_searches.hh000066400000000000000000000044531335422170400203100ustar00rootroot00000000000000# pragma once # include "mode.hh" # include using boost::property_tree::ptree; namespace Astroid { class SavedSearches : public Mode { public: SavedSearches (MainWindow *); void grab_modal () override; void release_modal () override; static void save_query (ustring query); static void add_query_to_history (ustring query); static std::vector get_history (); /* called by astroid destructor to save search history */ static void init (); static void destruct (); private: static ptree load_searches (); static void write_back_searches (ptree); static std::vector history; static Glib::Dispatcher m_reload; void on_thread_changed (Db *, ustring); void load_startup_queries (); void load_saved_searches (); void add_query (ustring, ustring, bool saved = false, bool history = false); void reload (); void refresh_stats (); private: void refresh_stats_db (Db *); bool needs_refresh = false; public: bool show_all_history = false; int page_jump_rows; void on_my_row_activated (const Gtk::TreeModel::Path &, Gtk::TreeViewColumn *); protected: class ModelColumns : public Gtk::TreeModel::ColumnRecord { public: ModelColumns() { add (m_col_description); add (m_col_saved); add (m_col_history); add (m_col_name); add (m_col_query); add (m_col_unread_messages); add (m_col_unread_messages_s); add (m_col_total_messages); } Gtk::TreeModelColumn m_col_description; Gtk::TreeModelColumn m_col_saved; Gtk::TreeModelColumn m_col_history; Gtk::TreeModelColumn m_col_name; Gtk::TreeModelColumn m_col_query; Gtk::TreeModelColumn m_col_unread_messages; Gtk::TreeModelColumn m_col_unread_messages_s; Gtk::TreeModelColumn m_col_total_messages; }; ModelColumns m_columns; Gtk::TreeView tv; Gtk::ScrolledWindow scroll; refptr store; }; } astroid-0.14/src/modes/thread_index/000077500000000000000000000000001335422170400174405ustar00rootroot00000000000000astroid-0.14/src/modes/thread_index/query_loader.cc000066400000000000000000000247171335422170400224550ustar00rootroot00000000000000# include "astroid.hh" # include "db.hh" # include "query_loader.hh" # include "thread_index.hh" # include "thread_index_list_view.hh" # include "config.hh" # include "actions/action_manager.hh" # include # include # include # include # include using std::endl; namespace Astroid { int QueryLoader::nextid = 0; QueryLoader::QueryLoader () { id = nextid++; ustring sort_order = astroid->config ().get ("thread_index.sort_order"); if (sort_order == "newest") { sort = NOTMUCH_SORT_NEWEST_FIRST; } else if (sort_order == "oldest") { sort = NOTMUCH_SORT_OLDEST_FIRST; } else if (sort_order == "messageid") { sort = NOTMUCH_SORT_MESSAGE_ID; } else if (sort_order == "unsorted") { sort = NOTMUCH_SORT_UNSORTED; } else { LOG (error) << "ti: unknown sort order, must be 'newest', 'oldest', 'messageid' or 'unsorted': " << sort_order << ", using 'newest'."; sort = NOTMUCH_SORT_NEWEST_FIRST; } loaded_threads = 0; total_messages = 0; unread_messages = 0; run = false; queue_has_data.connect ( sigc::mem_fun (this, &QueryLoader::to_list_adder)); deferred_threads_d.connect ( sigc::mem_fun (this, &QueryLoader::update_deferred_changed_threads)); astroid->actions->signal_thread_changed ().connect ( sigc::mem_fun (this, &QueryLoader::on_thread_changed)); astroid->actions->signal_refreshed ().connect ( sigc::mem_fun (this, &QueryLoader::on_refreshed)); } QueryLoader::~QueryLoader () { LOG (debug) << "ql: destruct."; stop (true); } void QueryLoader::start (ustring q) { std::lock_guard lk (loader_m); query = q; run = true; loader_thread = std::thread (&QueryLoader::loader, this); } void QueryLoader::stop (bool _in_destructor) { in_destructor = _in_destructor; if (run) { LOG (info) << "ql (" << id << "): stopping loader..."; } run = false; if (loader_thread.joinable ()) loader_thread.join (); } void QueryLoader::reload () { stop (); std::lock_guard lk (to_list_m); list_store->clear (); while (!to_list_store.empty ()) to_list_store.pop (); start (query); } void QueryLoader::refine_query (ustring q) { query = q; reload (); } void QueryLoader::refresh_stats_db (Db * db) { LOG (debug) << "ql: refresh stats.."; notmuch_status_t st = NOTMUCH_STATUS_SUCCESS; notmuch_query_t * query_t = notmuch_query_create (db->nm_db, query.c_str ()); for (ustring & t : db->excluded_tags) { notmuch_query_add_tag_exclude (query_t, t.c_str()); } notmuch_query_set_omit_excluded (query_t, NOTMUCH_EXCLUDE_TRUE); st = notmuch_query_count_messages (query_t, &total_messages); // destructive if (st != NOTMUCH_STATUS_SUCCESS) total_messages = 0; notmuch_query_destroy (query_t); ustring unread_q_s = "(" + query + ") AND tag:unread"; notmuch_query_t * unread_q = notmuch_query_create (db->nm_db, unread_q_s.c_str()); for (ustring & t : db->excluded_tags) { notmuch_query_add_tag_exclude (unread_q, t.c_str()); } notmuch_query_set_omit_excluded (unread_q, NOTMUCH_EXCLUDE_TRUE); st = notmuch_query_count_messages (unread_q, &unread_messages); // destructive if (st != NOTMUCH_STATUS_SUCCESS) unread_messages = 0; notmuch_query_destroy (unread_q); } void QueryLoader::loader () { std::lock_guard loader_lk (loader_m); Db db (Db::DATABASE_READ_ONLY); refresh_stats_db (&db); if (!in_destructor) stats_ready.emit (); /* set up query */ notmuch_query_t * nmquery; notmuch_threads_t * threads; nmquery = notmuch_query_create (db.nm_db, query.c_str ()); for (ustring & t : db.excluded_tags) { notmuch_query_add_tag_exclude (nmquery, t.c_str()); } notmuch_query_set_omit_excluded (nmquery, NOTMUCH_EXCLUDE_TRUE); notmuch_query_set_sort (nmquery, sort); /* slow */ notmuch_status_t st = NOTMUCH_STATUS_SUCCESS; st = notmuch_query_search_threads (nmquery, &threads); if (st != NOTMUCH_STATUS_SUCCESS) { LOG (error) << "ql: could not get threads for query: " << query; run = false; } loaded_threads = 0; // incremented in list_adder int i = 0; for (; run && notmuch_threads_valid (threads); notmuch_threads_move_to_next (threads)) { notmuch_thread_t * thread; thread = notmuch_threads_get (threads); if (thread == NULL) { LOG (error) << "ql: error: could not get thread."; throw database_error ("ql: could not get thread (is NULL)"); } NotmuchThread *t = new NotmuchThread (thread); notmuch_thread_destroy (thread); std::unique_lock lk (to_list_m); to_list_store.push (refptr(t)); lk.unlock (); i++; if ((i % 100) == 0) { if (run && !in_destructor) queue_has_data.emit (); } } /* closing query */ if (st == NOTMUCH_STATUS_SUCCESS) notmuch_threads_destroy (threads); notmuch_query_destroy (nmquery); if (!in_destructor) stats_ready.emit (); // update loading status // catch any remaining entries if (!in_destructor) queue_has_data.emit (); run = false; // on_thread_changed will not check lock if (!in_destructor) deferred_threads_d.emit (); } void QueryLoader::to_list_adder () { std::lock_guard lk (to_list_m); while (!to_list_store.empty ()) { refptr t = to_list_store.front (); to_list_store.pop (); auto iter = list_store->append (); Gtk::ListStore::Row row = *iter; row[list_store->columns.newest_date] = t->newest_date; row[list_store->columns.oldest_date] = t->oldest_date; row[list_store->columns.thread_id] = t->thread_id; row[list_store->columns.thread] = t; if (loaded_threads == 0) { if (!in_destructor) first_thread_ready.emit (); } loaded_threads++; if ((loaded_threads % 100) == 0) { LOG (debug) << "ql: loaded " << loaded_threads << " threads."; if (!in_destructor && !list_view->filter_txt.empty()) stats_ready.emit (); } } } void QueryLoader::update_deferred_changed_threads () { /* lock and check for changed threads */ if (!in_destructor) { Db db (Db::DATABASE_READ_ONLY); while (!changed_threads.empty ()) { ustring tid = changed_threads.front (); changed_threads.pop (); LOG (debug) << "ql: deferred update of: " << tid; on_thread_changed (&db, tid); } } } bool QueryLoader::loading () { return run; } /*************** * signals **************/ void QueryLoader::on_refreshed () { if (in_destructor) return; LOG (warn) << "ql (" << id << "): got refreshed signal."; reload (); } void QueryLoader::on_thread_changed (Db * db, ustring thread_id) { if (in_destructor) return; LOG (info) << "ql (" << id << "): " << query << ", got changed thread signal: " << thread_id; if (loading ()) { LOG (debug) << "ql: still loading, deferring thread_changed to until load is done."; changed_threads.push (thread_id); return; } /* we now have three options: * - a new thread has been added (unlikely) * - a thread has been deleted (kind of likely) * - a thread has been updated (most likely) * * none of them needs to affect the threads that match the query in this * list. * */ time_t t0 = clock (); Gtk::TreePath path; Gtk::TreeIter fwditer; /* forward iterating is much faster than going backwards: * https://developer.gnome.org/gtkmm/3.11/classGtk_1_1TreeIter.html */ bool found = false; bool changed = false; fwditer = list_store->get_iter ("0"); Gtk::ListStore::Row row; while (fwditer) { row = *fwditer; if (row[list_store->columns.thread_id] == thread_id) { found = true; break; } fwditer++; } /* test if thread is in the current query */ bool in_query = db->thread_in_query (query, thread_id); if (found) { /* thread has either been updated or deleted from current query */ LOG (debug) << "ql: updated: found thread in: " << ((clock() - t0) * 1000.0 / CLOCKS_PER_SEC) << " ms."; if (in_query) { /* updated */ LOG (debug) << "ql: updated"; refptr thread = row[list_store->columns.thread]; thread->refresh (db); row[list_store->columns.newest_date] = thread->newest_date; row[list_store->columns.oldest_date] = thread->oldest_date; } else { /* deleted */ LOG (debug) << "ql: deleted"; path = list_store->get_path (fwditer); list_store->erase (fwditer); } changed = true; } else { /* thread has possibly been added to the current query */ LOG (debug) << "ql: updated: did not find thread, time used: " << ((clock() - t0) * 1000.0 / CLOCKS_PER_SEC) << " ms."; if (in_query) { LOG (debug) << "ql: new thread for query, adding.."; /* get current cursor path, if we are at first row and the new addition * is before we should scroll up. */ Gtk::TreePath path; Gtk::TreeViewColumn *c; list_view->get_cursor (path, c); auto iter = list_store->prepend (); Gtk::ListStore::Row newrow = *iter; NotmuchThread * t; db->on_thread (thread_id, [&t](notmuch_thread_t *nmt) { t = new NotmuchThread (nmt); }); newrow[list_store->columns.newest_date] = t->newest_date; newrow[list_store->columns.oldest_date] = t->oldest_date; newrow[list_store->columns.thread_id] = t->thread_id; newrow[list_store->columns.thread] = Glib::RefPtr(t); /* check if we should select it (if this is the only item) */ if (list_store->children().size() == 1) { if (!in_destructor) first_thread_ready.emit (); } else { if (path == Gtk::TreePath ("0")) { Gtk::TreePath addpath = list_store->get_path (iter); if (addpath <= path) { list_view->set_cursor (addpath); } } } changed = true; } } if (changed && !in_destructor) { refresh_stats_db (db); // we should already be running on the gui thread stats_ready.emit (); } } } astroid-0.14/src/modes/thread_index/query_loader.hh000066400000000000000000000030431335422170400224540ustar00rootroot00000000000000# pragma once # include # include # include # include # include "proto.hh" # include "thread_index_list_view.hh" namespace Astroid { class QueryLoader : public sigc::trackable { public: static int nextid; int id; QueryLoader (); ~QueryLoader (); void refine_query (ustring); void start (ustring); void stop (bool in_destructor = false); void reload (); unsigned int loaded_threads; unsigned int total_messages; unsigned int unread_messages; refptr list_store; ThreadIndexListView * list_view; notmuch_sort_t sort; std::vector sort_strings = { "oldest", "newest", "messageid", "unsorted" }; Glib::Dispatcher first_thread_ready; Glib::Dispatcher stats_ready; bool loading (); private: ustring query; void refresh_stats_db (Db *); std::atomic run; bool in_destructor = false; void loader (); std::thread loader_thread; std::mutex loader_m; std::queue> to_list_store; std::mutex to_list_m; void to_list_adder (); Glib::Dispatcher queue_has_data; /* this is a list of threads that got a changed signal * while loading */ Glib::Dispatcher deferred_threads_d; void update_deferred_changed_threads (); std::queue changed_threads; /* signal handlers */ void on_thread_changed (Db *, ustring); void on_refreshed (); }; } astroid-0.14/src/modes/thread_index/thread_index.cc000066400000000000000000000225511335422170400224120ustar00rootroot00000000000000# include # include # include # include # include # include # include "astroid.hh" # include "db.hh" # include "modes/paned_mode.hh" # include "thread_index.hh" # include "thread_index_list_view.hh" # include "thread_index_list_cell_renderer.hh" # include "modes/thread_view/thread_view.hh" # include "modes/saved_searches.hh" # include "main_window.hh" # ifndef DISABLE_PLUGINS # include "plugin/manager.hh" # endif using namespace std; namespace Astroid { ThreadIndex::ThreadIndex (MainWindow *mw, ustring _query, ustring _name) : PanedMode(mw), query_string(_query) { name = _name; set_orientation (Gtk::Orientation::ORIENTATION_VERTICAL); /* set up treeview */ list_store = Glib::RefPtr(new ThreadIndexListStore ()); queryloader.list_store = list_store; list_view = Gtk::manage(new ThreadIndexListView (this, list_store)); queryloader.list_view = list_view; scroll = Gtk::manage(new ThreadIndexScrolled (main_window, list_store, list_view)); list_view->set_sort_type (queryloader.sort); add_pane (0, scroll); show_all (); /* load threads */ queryloader.stats_ready.connect ( sigc::mem_fun (this, &ThreadIndex::on_stats_ready)); queryloader.first_thread_ready.connect ( sigc::mem_fun (this, &ThreadIndex::on_first_thread_ready)); queryloader.start (query_string); # ifndef DISABLE_PLUGINS plugins = new PluginManager::ThreadIndexExtension (this); # endif set_label (get_label ()); /* register keys {{{ */ keys.set_prefix ("Thread Index", "thread_index"); keys.register_key ("C-w", "thread_index.close_pane", "Close thread view pane if open", [&](Key) { if (packed == 2) { /* close thread view */ del_pane (1); return true; } return false; }); keys.register_key (Key((guint) GDK_KEY_dollar), "thread_index.refresh", "Refresh query", [&] (Key) { queryloader.reload (); return true; }); keys.register_key ("O", "thread_index.refine_query", "Refine query", [&] (Key) { if (!invincible) { main_window->enable_command (CommandBar::CommandMode::Search, query_string, [&](ustring new_query) { query_string = new_query; set_label (get_label ()); queryloader.refine_query (query_string); /* add to saved searches */ SavedSearches::add_query_to_history (query_string); /* select first */ list_view->set_cursor (Gtk::TreePath("0")); }); } else { main_window->enable_command (CommandBar::CommandMode::Search, query_string, NULL); } return true; }); keys.register_key ("C-v", "thread_index.duplicate_refine_query", "Duplicate and refine query", [&] (Key) { main_window->enable_command (CommandBar::CommandMode::Search, query_string, NULL); return true; }); keys.register_key ("C-s", "thread_index.cycle_sort", "Cycle through sort options: 'oldest', 'newest', 'messageid', 'unsorted'", [&] (Key) { if (queryloader.sort == NOTMUCH_SORT_UNSORTED) { queryloader.sort = NOTMUCH_SORT_OLDEST_FIRST; } else { int s = static_cast (queryloader.sort); s++; queryloader.sort = static_cast (s); } LOG (info) << "ti: sorting by: " << queryloader.sort_strings[static_cast(queryloader.sort)]; list_view->set_sort_type (queryloader.sort); queryloader.reload (); return true; }); keys.register_key ("C-u", { Key (true, false, (guint) GDK_KEY_Up), Key (GDK_KEY_Page_Up) }, "thread_index.page_up", "Page up", [&] (Key) { if (list_view->filtered_store->children().size () == 0) return true; auto adj = scroll->scroll.get_vadjustment (); adj->set_value (adj->get_value() - adj->get_page_increment ()); /* check if cursor is in view */ Gtk::TreePath path; Gtk::TreeViewColumn *c; list_view->get_cursor (path, c); /* not in view, move cursor to top */ Gtk::TreePath newpath; int cx, cy; list_view->get_path_at_pos (0, 0, newpath, c, cx, cy); if (newpath == path) { newpath = Gtk::TreePath("0"); } if (newpath) list_view->set_cursor (newpath); return true; }); keys.register_key ("C-d", { Key (true, false, (guint) GDK_KEY_Down), Key (GDK_KEY_Page_Down) }, "thread_index.page_down", "Page down", [&] (Key) { if (list_view->filtered_store->children().size () == 0) return true; auto adj = scroll->scroll.get_vadjustment (); adj->set_value (adj->get_value() + adj->get_page_increment ()); /* check if cursor is in view */ Gtk::TreePath path; Gtk::TreeViewColumn *c; list_view->get_cursor (path, c); /* not in view, move cursor to bottom */ Gtk::TreePath newpath; int cx, cy; list_view->get_path_at_pos (0, list_view->get_height (), newpath, c, cx, cy); if (!newpath || newpath == path) { auto it = list_view->filtered_store->children().end (); newpath = list_view->filtered_store->get_path (--it); } if (newpath) list_view->set_cursor (newpath); return true; }); keys.register_key ("C-S", "thread_index.save_query", "Save query", [&] (Key) { SavedSearches::save_query (query_string); return true; }); // }}} } void ThreadIndex::on_stats_ready () { set_label (get_label ()); list_view->update_bg_image (); } void ThreadIndex::on_first_thread_ready () { /* select first */ list_view->set_cursor (Gtk::TreePath("0")); } ustring ThreadIndex::get_label () { ustring f = ""; if (!list_view->filter_txt.empty ()) { f = ustring::compose (" (%1: %2)", list_view->filter_txt, list_view->filtered_store->children ().size ()); } if (name == "") return ustring::compose ("%1 (%2/%3)%4%5", query_string, queryloader.unread_messages, queryloader.total_messages, queryloader.loading() ? " (%)" : "", f); else return ustring::compose ("%1 (%2/%3)%4%5", name, queryloader.unread_messages, queryloader.total_messages, queryloader.loading() ? " (%)" : "", f); } void ThreadIndex::open_thread (refptr thread, bool new_tab, bool new_window) { LOG (debug) << "ti: open thread: " << thread->thread_id << " (" << new_tab << ")"; ThreadView * tv; new_tab = new_tab & !new_window; // only open new tab if not opening new window if (new_window) { MainWindow * nmw = astroid->open_new_window (false); tv = Gtk::manage(new ThreadView (nmw)); nmw->add_mode (tv); } else if (new_tab) { tv = Gtk::manage(new ThreadView (main_window)); main_window->add_mode (tv); } else { LOG (debug) << "ti: init paned tv"; if (packed == 2) { tv = (ThreadView *) pw2; } else { tv = new ThreadView (main_window); add_pane (1, tv); } } tv->load_thread (thread); tv->show (); tv->signal_index_action ().connect (sigc::mem_fun (this, &ThreadIndex::on_index_action)); // grab modal if (!new_tab && !new_window) { current = 1; grab_modal (); } } bool ThreadIndex::on_index_action (ThreadView * tv, ThreadView::IndexAction action) { if (list_view->filtered_store->children().size() < 1) { return true; } switch (action) { case ThreadView::IndexAction::IA_Next: { keys.handle ("thread_index.next_thread"); auto thread = list_view->get_current_thread (); if (thread != tv->thread) { tv->load_thread (thread); tv->show (); } } break; case ThreadView::IndexAction::IA_Previous: { keys.handle ("thread_index.previous_thread"); auto thread = list_view->get_current_thread (); if (thread != tv->thread) { tv->load_thread (thread); tv->show (); } } break; case ThreadView::IndexAction::IA_NextUnread: { keys.handle ("thread_index.next_unread"); auto thread = list_view->get_current_thread (); if (thread != tv->thread) { tv->load_thread (thread); tv->show (); } } break; case ThreadView::IndexAction::IA_PreviousUnread: { keys.handle ("thread_index.previous_unread"); auto thread = list_view->get_current_thread (); if (thread != tv->thread) { tv->load_thread (thread); tv->show (); } } break; } return true; } void ThreadIndex::pre_close () { queryloader.stop (true); if (packed > 1) del_pane (1); # ifndef DISABLE_PLUGINS plugins->deactivate (); delete plugins; # endif } ThreadIndex::~ThreadIndex () { LOG (debug) << "ti: deconstruct."; } } astroid-0.14/src/modes/thread_index/thread_index.hh000066400000000000000000000021631335422170400224210ustar00rootroot00000000000000# pragma once # include # include # include # include # include # include "modes/paned_mode.hh" # include "query_loader.hh" # include "modes/thread_view/thread_view.hh" # ifndef DISABLE_PLUGINS # include "plugin/manager.hh" # endif namespace Astroid { class ThreadIndex : public PanedMode { public: ThreadIndex (MainWindow *, ustring, ustring = ""); ~ThreadIndex (); QueryLoader queryloader; void open_thread (refptr, bool new_tab, bool new_window = false); Glib::RefPtr list_store; ThreadIndexListView * list_view; ThreadIndexScrolled * scroll; ustring name = ""; // used as title for default queries ustring query_string; virtual ustring get_label () override; void pre_close () override; # ifndef DISABLE_PLUGINS PluginManager::ThreadIndexExtension * plugins; # endif void on_stats_ready (); bool on_index_action (ThreadView * tv, ThreadView::IndexAction); private: void on_first_thread_ready (); }; } astroid-0.14/src/modes/thread_index/thread_index_list_cell_renderer.cc000066400000000000000000000447121335422170400263350ustar00rootroot00000000000000/* thread index cell renderer: * * the heart of showing threads in a fancy / sexy way. renders a * nice looking thread entry based on a notmuch thread object - * preferably without loading the message file. * */ # include # include # include # include # include # include "thread_index.hh" # include "thread_index_list_cell_renderer.hh" # include "db.hh" # include "utils/utils.hh" # include "crypto.hh" # ifndef DISABLE_PLUGINS # include "plugin/manager.hh" # endif using namespace std; using boost::property_tree::ptree; namespace Astroid { ThreadIndexListCellRenderer::ThreadIndexListCellRenderer (ThreadIndex * _ti) { ptree ti = astroid->config ("thread_index.cell"); hidden_tags = VectorUtils::split_and_trim (ti.get ("hidden_tags"), ","); std::sort (hidden_tags.begin (), hidden_tags.end ()); thread_index = _ti; /* load font settings */ font_desc_string = ti.get ("font_description"); if (font_desc_string == "" || font_desc_string == "default") { auto settings = Gio::Settings::create ("org.gnome.desktop.interface"); font_desc_string = settings->get_string ("monospace-font-name"); } font_description = Pango::FontDescription (font_desc_string); /* https://developer.gnome.org/pangomm/stable/classPango_1_1FontDescription.html#details */ if (font_description.get_size () == 0) { LOG (warn) << "thread_index.cell.font_description: no size specified, expect weird behaviour."; } line_spacing = ti.get ("line_spacing"); date_len = ti.get ("date_length"); message_count_len = ti.get ("message_count_length"); authors_len = ti.get ("authors_length"); tags_len = ti.get ("tags_length"); subject_color = ti.get ("subject_color"); subject_color_selected = ti.get ("subject_color_selected"); background_color_selected = ti.get ("background_color_selected"); background_color_marked = ti.get ("background_color_marked"); background_color_marked_selected = ti.get ("background_color_marked_selected"); } void ThreadIndexListCellRenderer::render_vfunc ( const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget &widget, const Gdk::Rectangle & background_area, const Gdk::Rectangle &cell_area, Gtk::CellRendererState flags) { // calculate text width, we don't need to do this every time, // but we need access to the context. if (!height_set) { refptr pango_cr = widget.create_pango_context (); font_metrics = pango_cr->get_metrics (font_description); int char_width = font_metrics.get_approximate_char_width () / Pango::SCALE; padding = char_width; content_height = calculate_height (widget); line_height = content_height + line_spacing; height_set = true; left_icons_size = content_height - (2 * left_icons_padding); left_icons_width = left_icons_size; date_start = left_icons_width_n * left_icons_width + (left_icons_width_n-1) * left_icons_padding + padding; date_width = char_width * date_len; message_count_width = char_width * message_count_len; message_count_start = date_start + date_width + padding; authors_width = char_width * authors_len; authors_start = message_count_start + message_count_width + padding; tags_width = char_width * tags_len; tags_start = authors_start + authors_width + padding; subject_start = tags_start + tags_width + padding; height = content_height + line_spacing; } if (thread->unread) { font_description.set_weight (Pango::WEIGHT_BOLD); } else { font_description.set_weight (Pango::WEIGHT_NORMAL); } render_background (cr, widget, background_area, flags); render_date (cr, widget, cell_area); // returns height if (thread->total_messages > 1) render_message_count (cr, widget, cell_area); render_authors (cr, widget, cell_area); tags_width = render_tags (cr, widget, cell_area, flags); // returns width subject_start = tags_start + tags_width / Pango::SCALE + ((tags_width > 0) ? padding : 0); render_subject (cr, widget, cell_area, flags); /* if (!last) render_delimiter (cr, widget, cell_area); */ if (thread->flagged) render_flagged (cr, widget, cell_area); if (thread->attachment) render_attachment (cr, widget, cell_area); /* if (marked) render_marked (cr, widget, cell_area); */ } ThreadIndexListCellRenderer::~ThreadIndexListCellRenderer () { LOG (debug) << "til cr: deconstruct."; } void ThreadIndexListCellRenderer::render_background ( // {{{ const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget & /* widget */, const Gdk::Rectangle &background_area, Gtk::CellRendererState flags) { int y = background_area.get_y (); int x = background_area.get_x (); int w = background_area.get_width (); int h = background_area.get_height (); Gdk::Color bg; bool set = true; if ((flags & Gtk::CELL_RENDERER_SELECTED) != 0) { if (!marked) { if (background_color_selected.length () > 0) { bg = Gdk::Color (background_color_selected); } else { set = false; } } else { bg = Gdk::Color (background_color_marked_selected); } } else { if (!marked) { set = false; } else { bg = Gdk::Color (background_color_marked); } } if (set) { cr->set_source_rgb (bg.get_red_p(), bg.get_green_p(), bg.get_blue_p()); cr->rectangle (x, y, w, h); cr->fill (); } } // }}} /* render icons {{{ */ void ThreadIndexListCellRenderer::render_marked ( const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget & /* widget */, const Gdk::Rectangle &cell_area ) { if (!marked_icon) { Glib::RefPtr theme = Gtk::IconTheme::get_default(); Glib::RefPtr pixbuf = theme->load_icon ( "object-select-symbolic", left_icons_size, Gtk::ICON_LOOKUP_USE_BUILTIN | Gtk::ICON_LOOKUP_FORCE_SIZE); marked_icon = pixbuf->scale_simple (left_icons_size, left_icons_size, Gdk::INTERP_BILINEAR); } int y = cell_area.get_y() + left_icons_padding + line_spacing / 2; int x = cell_area.get_x(); Gdk::Cairo::set_source_pixbuf (cr, marked_icon, x, y); cr->rectangle (x, y, left_icons_size, left_icons_size); cr->fill (); } void ThreadIndexListCellRenderer::render_flagged ( const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget & /* widget */, const Gdk::Rectangle &cell_area ) { if (!flagged_icon) { Glib::RefPtr theme = Gtk::IconTheme::get_default(); Glib::RefPtr pixbuf = theme->load_icon ( "starred-symbolic", left_icons_size, Gtk::ICON_LOOKUP_USE_BUILTIN | Gtk::ICON_LOOKUP_FORCE_SIZE); flagged_icon = pixbuf->scale_simple (left_icons_size, left_icons_size, Gdk::INTERP_BILINEAR); } int y = cell_area.get_y() + left_icons_padding + line_spacing / 2; int x = cell_area.get_x() + 0 * (left_icons_width + left_icons_padding); Gdk::Cairo::set_source_pixbuf (cr, flagged_icon, x, y); cr->rectangle (x, y, left_icons_size,left_icons_size); cr->fill (); } void ThreadIndexListCellRenderer::render_attachment ( const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget & /* widget */, const Gdk::Rectangle &cell_area ) { if (!attachment_icon) { Glib::RefPtr theme = Gtk::IconTheme::get_default(); Glib::RefPtr pixbuf = theme->load_icon ( "mail-attachment-symbolic", left_icons_size, Gtk::ICON_LOOKUP_USE_BUILTIN | Gtk::ICON_LOOKUP_FORCE_SIZE); attachment_icon = pixbuf->scale_simple (left_icons_size, left_icons_size, Gdk::INTERP_BILINEAR); } int y = cell_area.get_y() + left_icons_padding + line_spacing / 2; int x = cell_area.get_x() + (1 * (left_icons_width + left_icons_padding)); Gdk::Cairo::set_source_pixbuf (cr, attachment_icon, x, y); cr->rectangle (x, y, left_icons_size, left_icons_size); cr->fill (); } // }}} void ThreadIndexListCellRenderer::render_delimiter ( // {{{ const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget & /*widget */, const Gdk::Rectangle &cell_area ) { cr->set_line_width(0.5); Gdk::Color gray; gray.set_grey_p (0.1); cr->set_source_rgb (gray.get_red_p(), gray.get_green_p(), gray.get_blue_p()); cr->move_to(cell_area.get_x(), cell_area.get_y() + cell_area.get_height()); cr->line_to(cell_area.get_x() + cell_area.get_width(), cell_area.get_y() + cell_area.get_height()); cr->stroke (); } // }}} void ThreadIndexListCellRenderer::render_subject ( // {{{ const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget &widget, const Gdk::Rectangle &cell_area, Gtk::CellRendererState flags) { Glib::RefPtr pango_layout = widget.create_pango_layout (""); pango_layout->set_font_description (font_description); /* set color */ Glib::RefPtr stylecontext = widget.get_style_context(); Gdk::RGBA color = stylecontext->get_color(Gtk::STATE_FLAG_NORMAL); cr->set_source_rgb (color.get_red(), color.get_green(), color.get_blue()); ustring color_str; if ((flags & Gtk::CELL_RENDERER_SELECTED) != 0) { color_str = subject_color_selected; } else { color_str = subject_color; } pango_layout->set_markup (ustring::compose ("%2", color_str, Glib::Markup::escape_text(thread->subject))); /* align in the middle */ int w, h; pango_layout->get_size (w, h); int y = max(0,(line_height / 2) - ((h / Pango::SCALE) / 2)); cr->move_to (cell_area.get_x() + subject_start, cell_area.get_y() + y); pango_layout->show_in_cairo_context (cr); } // }}} int ThreadIndexListCellRenderer::render_tags ( // {{{ const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget &widget, const Gdk::Rectangle &cell_area, Gtk::CellRendererState flags) { Glib::RefPtr pango_layout = widget.create_pango_layout (""); pango_layout->set_font_description (font_description); /* set color */ Glib::RefPtr stylecontext = widget.get_style_context(); Gdk::RGBA color = stylecontext->get_color(Gtk::STATE_FLAG_NORMAL); cr->set_source_rgb (color.get_red(), color.get_green(), color.get_blue()); /* subtract hidden tags */ vector tags; set_difference (thread->tags.begin(), thread->tags.end(), hidden_tags.begin (), hidden_tags.end (), back_inserter(tags)); ustring tag_string; Gdk::Color bg; if ((flags & Gtk::CELL_RENDERER_SELECTED) != 0) { bg = Gdk::Color (background_color_selected); cr->set_source_rgb (bg.get_red_p(), bg.get_green_p(), bg.get_blue_p()); } else { bg.set_grey_p (1.); } /* first try plugin */ # ifndef DISABLE_PLUGINS if (!thread_index->plugins->format_tags (tags, bg.to_string (), (flags & Gtk::CELL_RENDERER_SELECTED) != 0, tag_string)) { # endif unsigned char cv[3] = { (unsigned char) bg.get_red (), (unsigned char) bg.get_green (), (unsigned char) bg.get_blue () }; tag_string = VectorUtils::concat_tags_color (tags, true, tags_len, cv); # ifndef DISABLE_PLUGINS } # endif pango_layout->set_markup (tag_string); /* align in the middle */ int w, h; pango_layout->get_size (w, h); int y = max(0,(line_height / 2) - ((h / Pango::SCALE) / 2)); cr->move_to (cell_area.get_x() + tags_start, cell_area.get_y() + y); pango_layout->show_in_cairo_context (cr); return w; } // }}} int ThreadIndexListCellRenderer::render_date ( // {{{ const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget &widget, const Gdk::Rectangle &cell_area ) { ustring date = Date::pretty_print (thread->newest_date); Glib::RefPtr pango_layout = widget.create_pango_layout (date); pango_layout->set_font_description (font_description); /* set color */ Glib::RefPtr stylecontext = widget.get_style_context(); Gdk::RGBA color = stylecontext->get_color(Gtk::STATE_FLAG_NORMAL); cr->set_source_rgb (color.get_red(), color.get_green(), color.get_blue()); /* align in the middle */ int w, h; pango_layout->get_size (w, h); int y = max(0,(line_height / 2) - ((h / Pango::SCALE) / 2)); /* update subject start */ //subject_start = date_start + (w / Pango::SCALE) + padding; cr->move_to (cell_area.get_x() + date_start, cell_area.get_y() + y); pango_layout->show_in_cairo_context (cr); return h; // return height! } // }}} void ThreadIndexListCellRenderer::render_message_count ( // {{{ const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget &widget, const Gdk::Rectangle &cell_area ) { # define BUFLEN 24 char buf[BUFLEN]; snprintf (buf, BUFLEN, "(%d)", thread->total_messages); Glib::RefPtr pango_layout = widget.create_pango_layout (buf); pango_layout->set_font_description (font_description); /* set color */ Glib::RefPtr stylecontext = widget.get_style_context(); Gdk::RGBA color = stylecontext->get_color(Gtk::STATE_FLAG_NORMAL); cr->set_source_rgb (color.get_red(), color.get_green(), color.get_blue()); /* align in the middle */ int w, h; pango_layout->get_size (w, h); int y = max(0,(line_height / 2) - ((h / Pango::SCALE) / 2)); /* update subject start */ //subject_start = date_start + (w / Pango::SCALE) + padding; cr->move_to (cell_area.get_x() + message_count_start, cell_area.get_y() + y); pango_layout->show_in_cairo_context (cr); } // }}} void ThreadIndexListCellRenderer::render_authors ( // {{{ const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget &widget, const Gdk::Rectangle &cell_area ) { /* format authors string */ ustring authors; if (thread->authors.size () == 1) { /* if only one, show full name */ ustring an = get<0>(thread->authors[0]); if (static_cast(an.size()) >= authors_len) { an = an.substr (0, authors_len); UstringUtils::trim_right(an); an += "."; } if (get<1>(thread->authors[0])) { authors = ustring::compose ("%1", Glib::Markup::escape_text (an)); } else { authors = Glib::Markup::escape_text (an); } } else { /* show first names separated by comma */ bool first = true; int len = 0; for (auto &a : thread->authors) { if (!first) len += 1; // comma ustring an = get<0>(a); an = an.substr (0, an.find_first_of (", @")); int tlen = static_cast(an.size()); if ((len + tlen) >= authors_len) { an = an.substr (0, authors_len - len); UstringUtils::trim_right (an); an += "."; tlen = authors_len - len; } len += tlen; if (!first) { authors += ","; } else { first = false; } if (get<1>(a)) { authors += ustring::compose ("%1", Glib::Markup::escape_text (an)); } else { authors += Glib::Markup::escape_text (an); } if (len >= authors_len) { break; } } } Glib::RefPtr pango_layout = widget.create_pango_layout (""); pango_layout->set_markup (authors); if (thread->unread) { font_description.set_weight (Pango::WEIGHT_NORMAL); } pango_layout->set_font_description (font_description); if (thread->unread) { font_description.set_weight (Pango::WEIGHT_BOLD); } /* set color */ Glib::RefPtr stylecontext = widget.get_style_context(); Gdk::RGBA color = stylecontext->get_color(Gtk::STATE_FLAG_NORMAL); cr->set_source_rgb (color.get_red(), color.get_green(), color.get_blue()); /* align in the middle */ int w, h; pango_layout->get_size (w, h); int y = max(0,(line_height / 2) - ((h / Pango::SCALE) / 2)); /* update subject start */ //subject_start = date_start + (w / Pango::SCALE) + padding; cr->move_to (cell_area.get_x() + authors_start, cell_area.get_y() + y); pango_layout->show_in_cairo_context (cr); } // }}} /* cellrenderer overloads {{{ */ int ThreadIndexListCellRenderer::get_height () { if (height_set) return line_height; else return 0; } int ThreadIndexListCellRenderer::calculate_height (Gtk::Widget &widget) const { if (height_set) return content_height; /* figure out font height */ Glib::RefPtr pango_layout = widget.create_pango_layout ("TEST HEIGHT STRING"); pango_layout->set_font_description (font_description); int w, h; pango_layout->get_pixel_size (w, h); int content_height = h; return content_height; } Gtk::SizeRequestMode ThreadIndexListCellRenderer::get_request_mode_vfunc () const { return Gtk::SIZE_REQUEST_CONSTANT_SIZE; } void ThreadIndexListCellRenderer::get_preferred_height_vfunc ( Gtk::Widget& widget, int& minimum_height, int& natural_height) const { int height = calculate_height (widget) + line_spacing; minimum_height = height; natural_height = height; } void ThreadIndexListCellRenderer::get_preferred_height_for_width_vfunc ( Gtk::Widget& widget, int /* width */, int& minimum_height, int& natural_height) const { /* wrap non-width dependent */ get_preferred_height_vfunc (widget, minimum_height, natural_height); } void ThreadIndexListCellRenderer::get_preferred_width_vfunc ( Gtk::Widget& /* widget*/, int& minimum_width, int& natural_width) const { minimum_width = 100; natural_width = minimum_width; } bool ThreadIndexListCellRenderer::activate_vfunc( GdkEvent* /* event */, Gtk::Widget& /* widget */, const Glib::ustring& /* path */, const Gdk::Rectangle& /* background_area */, const Gdk::Rectangle& /* cell_area */, Gtk::CellRendererState /* flags */) { return false; } // }}} } astroid-0.14/src/modes/thread_index/thread_index_list_cell_renderer.hh000066400000000000000000000116431335422170400263440ustar00rootroot00000000000000# pragma once # include # include # include # include "proto.hh" # include "db.hh" namespace Astroid { class ThreadIndexListCellRenderer : public Gtk::CellRenderer { public: ThreadIndexListCellRenderer (ThreadIndex * ti); ~ThreadIndexListCellRenderer (); ThreadIndex * thread_index; Glib::RefPtr thread; /* thread that should be rendered now */ bool last; bool marked; /* these tags are displayed otherwisely (or ignored by the user), so they * are not shown explicitly: MUST BE SORTED. default defined in config.cc. */ std::vector hidden_tags; // default: { "attachment", "flagged", "unread" } }; int get_height (); protected: /* best documentation so far from here: * https://git.gnome.org/browse/gtkmm/tree/gtk/src/cellrenderer.hg */ virtual void render_vfunc (const ::Cairo::RefPtr< ::Cairo::Context>&, Gtk::Widget &, const Gdk::Rectangle &, const Gdk::Rectangle &, Gtk::CellRendererState) override; virtual bool activate_vfunc( GdkEvent *, Gtk::Widget &, const Glib::ustring &, const Gdk::Rectangle &, const Gdk::Rectangle &, Gtk::CellRendererState) override; int calculate_height (Gtk::Widget &) const; virtual void get_preferred_height_vfunc ( Gtk::Widget& widget, int& minimum_height, int& natural_height) const override; virtual void get_preferred_height_for_width_vfunc ( Gtk::Widget& widget, int width, int& minimum_height, int& natural_height) const override; virtual void get_preferred_width_vfunc ( Gtk::Widget& widget, int& minimum_width, int& natural_width) const override; virtual Gtk::SizeRequestMode get_request_mode_vfunc () const override; public: int height; bool height_set = false; private: int line_height; // content_height + line_spacing int content_height; int line_spacing = 2; // configurable int left_icons_size; int left_icons_width; const int left_icons_width_n = 2; const int left_icons_padding = 1; int padding; ustring font_desc_string; Pango::FontDescription font_description; Pango::FontMetrics font_metrics; int date_start; int date_len = 10; // chars, configurable int date_width; int message_count_start; int message_count_len = 4; // chars, configurable int message_count_width; int authors_start; int authors_len = 20; // chars, configurable int authors_width; int tags_start; int tags_width; int tags_len = 80; // chars, configurable int subject_start; ustring subject_color; // configurable ustring subject_color_selected; // configurable ustring background_color_selected; // configurable ustring background_color_marked; // configurable ustring background_color_marked_selected; // configurable void render_background ( const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget &widget, const Gdk::Rectangle &background_area, Gtk::CellRendererState flags); void render_subject ( const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget &widget, const Gdk::Rectangle &cell_area, Gtk::CellRendererState flags); int render_tags ( const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget &widget, const Gdk::Rectangle &cell_area, Gtk::CellRendererState flags ); int render_date ( const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget &widget, const Gdk::Rectangle &cell_area ); void render_message_count ( const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget &widget, const Gdk::Rectangle &cell_area ); void render_authors ( const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget &widget, const Gdk::Rectangle &cell_area ); void render_delimiter ( const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget &widget, const Gdk::Rectangle &cell_area ); refptr flagged_icon; void render_flagged ( const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget &widget, const Gdk::Rectangle &cell_area ); refptr attachment_icon; void render_attachment ( const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget &widget, const Gdk::Rectangle &cell_area ); refptr marked_icon; void render_marked ( const ::Cairo::RefPtr< ::Cairo::Context>&cr, Gtk::Widget &widget, const Gdk::Rectangle &cell_area ); }; } astroid-0.14/src/modes/thread_index/thread_index_list_view.cc000066400000000000000000001120321335422170400244710ustar00rootroot00000000000000# include # include # include # include # include "db.hh" # include "modes/paned_mode.hh" # include "main_window.hh" # include "thread_index.hh" # include "query_loader.hh" # include "thread_index_list_view.hh" # include "thread_index_list_cell_renderer.hh" # include "modes/keybindings.hh" # include "modes/thread_view/thread_view.hh" # include "modes/reply_message.hh" # include "modes/forward_message.hh" # include "message_thread.hh" # include "utils/utils.hh" # include "utils/cmd.hh" # include "utils/resource.hh" # include "command_bar.hh" /* actions */ # include "actions/tag_action.hh" # include "actions/toggle_action.hh" # include "actions/difftag_action.hh" # include "actions/cmdaction.hh" using namespace std; namespace Astroid { /* ---------- * scrolled window * ---------- */ ThreadIndexScrolled::ThreadIndexScrolled ( MainWindow *mw, Glib::RefPtr _list_store, ThreadIndexListView * _list_view) : Mode (mw) { list_store = _list_store; list_view = Gtk::manage(_list_view); scroll.add (*list_view); pack_start (scroll, true, true, 0); scroll.show_all (); } ThreadIndexScrolled::~ThreadIndexScrolled () { LOG (debug) << "tis: deconstruct."; } void ThreadIndexScrolled::grab_modal () { list_view->add_modal_grab (); list_view->grab_focus (); } void ThreadIndexScrolled::release_modal () { list_view->remove_modal_grab (); } /* ---------- * list store * ---------- */ ThreadIndexListStore::ThreadIndexListStoreColumnRecord::ThreadIndexListStoreColumnRecord () { add (newest_date); add (oldest_date); add (thread_id); add (thread); add (marked); } ThreadIndexListStore::ThreadIndexListStore () { set_column_types (columns); } ThreadIndexListStore::~ThreadIndexListStore () { LOG (debug) << "tils: deconstuct."; } /* --------- * list view * --------- */ ThreadIndexListView::ThreadIndexListView (ThreadIndex * _thread_index, Glib::RefPtr store) { using bfs::path; set_name ("ThreadIndexListView"); thread_index = _thread_index; main_window = _thread_index->main_window; list_store = store; filtered_store = Gtk::TreeModelFilter::create (list_store); filtered_store->set_visible_func (sigc::mem_fun (this, &ThreadIndexListView::filter_visible_row)); config = astroid->config ("thread_index"); page_jump_rows = config.get("page_jump_rows"); set_model (filtered_store); set_enable_search (false); set_show_expanders (false); set_headers_visible (false); set_grid_lines (Gtk::TreeViewGridLines::TREE_VIEW_GRID_LINES_NONE); //append_column ("Thread IDs", list_store->columns.thread_id); /* add thread column */ renderer = Gtk::manage ( new ThreadIndexListCellRenderer (thread_index) ); int cols_count = append_column ("Thread", *renderer); Gtk::TreeViewColumn * column = get_column (cols_count - 1); column->set_cell_data_func (*renderer, sigc::mem_fun(this, &ThreadIndexListView::set_thread_data) ); /* re-draw every minute (check every second) */ Glib::signal_timeout ().connect ( sigc::mem_fun (this, &ThreadIndexListView::redraw), 1000); /* mouse click */ signal_row_activated ().connect ( sigc::mem_fun (this, &ThreadIndexListView::on_my_row_activated)); /* set up popup menu {{{ */ /* icon list */ Gtk::Image * reply = Gtk::manage (new Gtk::Image ()); reply->set_from_icon_name ("mail-reply-sender", Gtk::ICON_SIZE_LARGE_TOOLBAR); Gtk::MenuItem * reply_i = Gtk::manage (new Gtk::MenuItem (*reply)); reply_i->signal_activate ().connect ( sigc::bind ( sigc::mem_fun (*this, &ThreadIndexListView::popup_activate_generic) , PopupItem::Reply)); reply_i->set_tooltip_text ("Reply to latest message"); Gtk::Image * forward = Gtk::manage (new Gtk::Image ()); forward->set_from_icon_name ("mail-forward", Gtk::ICON_SIZE_LARGE_TOOLBAR); Gtk::MenuItem * forward_i = Gtk::manage (new Gtk::MenuItem (*forward)); forward_i->signal_activate ().connect ( sigc::bind ( sigc::mem_fun (*this, &ThreadIndexListView::popup_activate_generic) , PopupItem::Forward)); forward_i->set_tooltip_text ("Forward latest message"); Gtk::Image * flag = Gtk::manage (new Gtk::Image ()); flag->set_from_icon_name ("starred-symbolic", Gtk::ICON_SIZE_LARGE_TOOLBAR); Gtk::MenuItem * flag_i = Gtk::manage (new Gtk::MenuItem (*flag)); flag_i->signal_activate ().connect ( sigc::bind ( sigc::mem_fun (*this, &ThreadIndexListView::popup_activate_generic) , PopupItem::Flag)); flag_i->set_tooltip_text ("Flag"); Gtk::Image * archive = Gtk::manage (new Gtk::Image ()); archive->set_from_icon_name ("gtk-apply", Gtk::ICON_SIZE_LARGE_TOOLBAR); Gtk::MenuItem * archive_i = Gtk::manage (new Gtk::MenuItem (*archive)); archive_i->signal_activate ().connect ( sigc::bind ( sigc::mem_fun (*this, &ThreadIndexListView::popup_activate_generic) , PopupItem::Archive)); archive_i->set_tooltip_text ("Archive"); item_popup.attach (*reply_i, 0, 1, 0, 1); item_popup.attach (*forward_i, 1, 2, 0, 1); item_popup.attach (*flag_i, 2, 3, 0, 1); item_popup.attach (*archive_i, 3, 4, 0, 1); Gtk::MenuItem * sep = Gtk::manage (new Gtk::SeparatorMenuItem ()); item_popup.append (*sep); Gtk::MenuItem * item = Gtk::manage (new Gtk::MenuItem ("Open")); item->signal_activate ().connect ( sigc::bind ( sigc::mem_fun (*this, &ThreadIndexListView::popup_activate_generic) , PopupItem::Open)); item_popup.append (*item); item = Gtk::manage (new Gtk::MenuItem ("Open in new window")); item->signal_activate ().connect ( sigc::bind ( sigc::mem_fun (*this, &ThreadIndexListView::popup_activate_generic) , PopupItem::OpenNewWindow)); item_popup.append (*item); item_popup.accelerate (*this); item_popup.show_all (); // }}} // background image {{{ auto css = Gtk::CssProvider::create (); auto sc = get_style_context (); path no_mail_img = Resource (true, "ui/no-mail.png").get_path (); string css_data = ustring::compose ( "#ThreadIndexListView { background-image: url(\"%1\");" " background-repeat: no-repeat;" " background-position: 98%% 98%%;" " }\n" "#ThreadIndexListView .hide_bg { background-image: none; }", no_mail_img.c_str ()); # if GTK_VERSION_GE(3,16) try { css->load_from_data (css_data); } catch (Gtk::CssProviderError &e) { LOG (error) << "ti: attempted to set background image: " << no_mail_img.c_str () << ": " << e.what (); } # else bool loaded = css->load_from_data (css_data); if (!loaded) { LOG (error) << "ti: failed to set background image: " << no_mail_img.c_str (); } # endif auto screen = Gdk::Screen::get_default (); sc->add_provider_for_screen (screen, css, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); // }}} /* set up keys */ register_keys (); } ThreadIndexListView::~ThreadIndexListView () { LOG (debug) << "tilv: deconstruct."; } bool ThreadIndexListView::filter_visible_row ( const Gtk::TreeIter & iter) { if (filter.empty ()) return true; if (iter) { Gtk::ListStore::Row row = *iter; refptr t = row[list_store->columns.thread]; if (t) return t->matches (filter); else return false; } return true; } void ThreadIndexListView::on_filter (ustring k) { LOG (info) << "ti: filtering: " << k; if (filter_txt == k) return; filter_txt = k; filter = VectorUtils::split_and_trim (k.lowercase (), " "); filtered_store->refilter (); thread_index->on_stats_ready (); } bool ThreadIndexListView::redraw () { chrono::duration elapsed = chrono::steady_clock::now() - last_redraw; if (elapsed.count () >= 60) { queue_draw (); last_redraw = chrono::steady_clock::now(); } return true; } void ThreadIndexListView::set_thread_data ( Gtk::CellRenderer * renderer, const Gtk::TreeIter &iter) { ThreadIndexListCellRenderer * r = (ThreadIndexListCellRenderer*) renderer; //LOG (debug) << "setting thread.." << r; if (iter) { Gtk::ListStore::Row row = *iter; r->thread = row[list_store->columns.thread]; r->marked = row[list_store->columns.marked]; } } void ThreadIndexListView::set_sort_type (notmuch_sort_t sort) { if (sort == NOTMUCH_SORT_NEWEST_FIRST) { list_store->set_sort_column (0, Gtk::SortType::SORT_DESCENDING); } else if (sort == NOTMUCH_SORT_OLDEST_FIRST) { list_store->set_sort_column (1, Gtk::SortType::SORT_ASCENDING); } else { // TODO: NOTMUCH_SORT_MESSAGE_ID list_store->set_sort_column (Gtk::TreeSortable::DEFAULT_UNSORTED_COLUMN_ID, Gtk::SortType::SORT_ASCENDING); } } void ThreadIndexListView::register_keys () { // {{{ Keybindings * keys = &(thread_index->keys); keys->register_key ("j", { Key(false, false, (guint) GDK_KEY_Down) }, "thread_index.next_thread", "Next thread", [&](Key) { if (filtered_store->children().size() < 2) return true; Gtk::TreePath path; Gtk::TreeViewColumn *c; get_cursor (path, c); path.next (); Gtk::TreeIter it = filtered_store->get_iter (path); if (it) { set_cursor (path); } return true; }); keys->register_key (Key (GDK_KEY_Tab), "thread_index.next_unread", "Jump to next unread thread", [&] (Key) { Gtk::TreePath thispath, path; Gtk::TreeIter fwditer; Gtk::TreeViewColumn *c; get_cursor (path, c); path.next (); fwditer = filtered_store->get_iter (path); thispath = path; Gtk::ListStore::Row row; bool found = false; while (fwditer) { row = *fwditer; Glib::RefPtr thread = row[list_store->columns.thread]; if (thread->unread) { path = filtered_store->get_path (fwditer); set_cursor (path); found = true; break; } fwditer++; } /* wrap, and check from start */ if (!found) { fwditer = filtered_store->children().begin (); while (fwditer && filtered_store->get_path(fwditer) < thispath) { row = *fwditer; Glib::RefPtr thread = row[list_store->columns.thread]; if (thread->unread) { path = filtered_store->get_path (fwditer); set_cursor (path); found = true; break; } fwditer++; } } return true; }); keys->register_key (Key (false, false, (guint) GDK_KEY_ISO_Left_Tab), "thread_index.previous_unread", "Jump to previous unread thread", [&] (Key) { Gtk::TreePath thispath, path; Gtk::TreeIter iter; Gtk::TreeViewColumn *c; get_cursor (path, c); thispath = path; path.prev (); iter = filtered_store->get_iter (path); Gtk::ListStore::Row row; bool found = false; while (iter && filtered_store->get_path(iter) < thispath) { row = *iter; Glib::RefPtr thread = row[list_store->columns.thread]; if (thread->unread) { path = filtered_store->get_path (iter); set_cursor (path); found = true; break; } iter--; } /* wrap, and check from end */ if (!found) { iter = filtered_store->children().end (); iter--; while (iter && filtered_store->get_path(iter) > thispath) { row = *iter; Glib::RefPtr thread = row[list_store->columns.thread]; if (thread->unread) { path = filtered_store->get_path (iter); set_cursor (path); break; } iter--; } } return true; }); keys->register_key ("k", { Key(false, false, (guint) GDK_KEY_Up) }, "thread_index.previous_thread", "Previous thread", [&](Key) { Gtk::TreePath path; Gtk::TreeViewColumn *c; get_cursor (path, c); path.prev (); if (path) { set_cursor (path); } return true; }); keys->register_key ("C-f", "thread_index.filter", "Filter rows", [&] (Key) { main_window->enable_command (CommandBar::CommandMode::Filter, "Filter", filter_txt, sigc::mem_fun (this, &ThreadIndexListView::on_filter)); return true; }); keys->register_key (Key (GDK_KEY_Escape), "thread_index.filter_clear", "Clear filter", [&] (Key) { on_filter (""); return true; }); /* set up for multi key handler */ multi_keys.register_key ("N", "thread_index.multi.mark_unread", "Toggle unread", bind (&ThreadIndexListView::multi_key_handler, this, MUnread, _1)); multi_keys.register_key ("*", "thread_index.multi.flag", "Toggle flagged", bind (&ThreadIndexListView::multi_key_handler, this, MFlag, _1)); multi_keys.register_key ("a", "thread_index.multi.archive", "Toggle archive", bind (&ThreadIndexListView::multi_key_handler, this, MArchive, _1)); multi_keys.register_key ("S", "thread_index.multi.mark_spam", "Toggle spam", bind (&ThreadIndexListView::multi_key_handler, this, MSpam, _1)); multi_keys.register_key ("+", "thread_index.multi.tag", "Tag", bind (&ThreadIndexListView::multi_key_handler, this, MTag, _1)); multi_keys.register_key ("C-m", "thread_index.multi.mute", "Toggle mute", bind (&ThreadIndexListView::multi_key_handler, this, MMute, _1)); multi_keys.register_key ("t", "thread_index.multi.toggle", "Toggle marked", bind (&ThreadIndexListView::multi_key_handler, this, MToggle, _1)); keys->register_key (Key (GDK_KEY_semicolon), "thread_index.multi", "Apply action to marked threads", [&] (Key k) { /* check if anything is marked */ Gtk::TreePath path; Gtk::TreeIter fwditer; fwditer = filtered_store->get_iter ("0"); Gtk::ListStore::Row row; bool found = false; while (fwditer) { row = *fwditer; if (row[list_store->columns.marked]) { found = true; break; } fwditer++; } if (found) { thread_index->multi_key (multi_keys, k); } return true; }); keys->register_key ("J", "thread_index.scroll_down", "Scroll down", [&] (Key) { if (filtered_store->children().size() >= 2) { Gtk::TreePath path; Gtk::TreeViewColumn *c; get_cursor (path, c); for (int i = 0; i < page_jump_rows; i++) { if (!path) break; path.next (); } Gtk::TreeIter it = filtered_store->get_iter (path); if (it) { set_cursor (path); } else { /* move to last */ auto it = filtered_store->children().end (); auto p = filtered_store->get_path (--it); if (p) set_cursor (p); } } return true; }); keys->register_key ("K", "thread_index.scroll_up", "Scroll up", [&] (Key) { Gtk::TreePath path; Gtk::TreeViewColumn *c; get_cursor (path, c); for (int i = 0; i < page_jump_rows; i++) { if (!path) break; path.prev (); } if (path) { set_cursor (path); } else { /* move to first */ auto p = Gtk::TreePath("0"); if (p) set_cursor (p); } return true; }); keys->register_key ("1", { Key(GDK_KEY_Home) }, "thread_index.scroll_home", "Scroll to first line", [&] (Key) { /* select first */ set_cursor (Gtk::TreePath("0")); return true; }); keys->register_key ("0", { Key (GDK_KEY_End) }, "thread_index.scroll_end", "Scroll to last line", [&] (Key) { if (filtered_store->children().size() >= 1) { auto it = filtered_store->children().end (); auto p = filtered_store->get_path (--it); if (p) set_cursor (p); } return true; }); keys->register_key (Key (GDK_KEY_Return), { Key (GDK_KEY_KP_Enter) }, "thread_index.open_thread", "Open thread", [&] (Key) { /* open message in split pane (if so configured) */ auto thread = get_current_thread (); if (thread) thread_index->open_thread (thread, true); return true; }); keys->register_key (Key (false, true, (guint) GDK_KEY_Return), { Key (false, true, (guint) GDK_KEY_KP_Enter) }, "thread_index.open_paned", "Open thread in pane", [&] (Key) { /* open message in split pane (if so configured) */ auto thread = get_current_thread (); if (thread) thread_index->open_thread (thread, false); return true; }); keys->register_key (Key (true, false, (guint) GDK_KEY_Return), { Key (true, false, (guint) GDK_KEY_KP_Enter) }, "thread_index.open_new_window", "Open thread in new window", [&] (Key) { /* open message in split pane (if so configured) */ auto thread = get_current_thread (); if (thread) thread_index->open_thread (thread, false, true); return true; }); keys->register_key ("r", "thread_index.reply", "Reply to last message in thread", [&] (Key) { auto thread = get_current_thread (); if (thread) { MessageThread mthread (thread); Db db (Db::DbMode::DATABASE_READ_ONLY); mthread.load_messages (&db); /* reply to last message */ main_window->add_mode (new ReplyMessage (main_window, *(--mthread.messages.end()))); } return true; }); keys->register_key ("G", "thread_index.reply_all", "Reply all to last message in thread", [&] (Key) { auto thread = get_current_thread (); if (thread) { MessageThread mthread (thread); Db db (Db::DbMode::DATABASE_READ_ONLY); mthread.load_messages (&db); /* reply to last message */ main_window->add_mode (new ReplyMessage (main_window, *(--mthread.messages.end()), ReplyMessage::ReplyMode::Rep_All)); } return true; }); keys->register_key ("R", "thread_index.reply_sender", "Reply to sender of last message in thread", [&] (Key) { auto thread = get_current_thread (); if (thread) { MessageThread mthread (thread); Db db (Db::DbMode::DATABASE_READ_ONLY); mthread.load_messages (&db); /* reply to last message */ main_window->add_mode (new ReplyMessage (main_window, *(--mthread.messages.end()), ReplyMessage::ReplyMode::Rep_Sender)); } return true; }); keys->register_key ("M", "thread_index.reply_mailinglist", "Reply to mailinglist of last message in thread", [&] (Key) { auto thread = get_current_thread (); if (thread) { MessageThread mthread (thread); Db db (Db::DbMode::DATABASE_READ_ONLY); mthread.load_messages (&db); /* reply to last message */ main_window->add_mode (new ReplyMessage (main_window, *(--mthread.messages.end()), ReplyMessage::ReplyMode::Rep_MailingList)); } return true; }); keys->register_key ("f", "thread_index.forward", "Forward last message in thread", [&] (Key) { auto thread = get_current_thread (); if (thread) { MessageThread mthread (thread); Db db (Db::DbMode::DATABASE_READ_ONLY); mthread.load_messages (&db); /* reply to last message */ main_window->add_mode (new ForwardMessage (main_window, *(--mthread.messages.end()))); } return true; }); keys->register_key (UnboundKey (), "thread_index.forward_inline", "Forward last message in thread inlined", [&] (Key) { auto thread = get_current_thread (); if (thread) { MessageThread mthread (thread); Db db (Db::DbMode::DATABASE_READ_ONLY); mthread.load_messages (&db); /* reply to last message */ main_window->add_mode (new ForwardMessage (main_window, *(--mthread.messages.end()), ForwardMessage::FwdDisposition::FwdInline)); } return true; }); keys->register_key (UnboundKey (), "thread_index.forward_attached", "Forward last message in thread attached", [&] (Key) { auto thread = get_current_thread (); if (thread) { MessageThread mthread (thread); Db db (Db::DbMode::DATABASE_READ_ONLY); mthread.load_messages (&db); /* reply to last message */ main_window->add_mode (new ForwardMessage (main_window, *(--mthread.messages.end()), ForwardMessage::FwdDisposition::FwdAttach)); } return true; }); keys->register_key ("t", "thread_index.toggle_marked_next", "Toggle mark thread and move to next", [&] (Key) { if (list_store->children().size() < 1) return true; Gtk::TreePath path; Gtk::TreeViewColumn *c; get_cursor (path, c); Gtk::TreeIter iter; iter = filtered_store->get_iter (path); if (iter) { Gtk::ListStore::Row row = *iter; row[list_store->columns.marked] = !row[list_store->columns.marked]; /* move to next thread */ path.next (); iter = filtered_store->get_iter (path); if (iter) set_cursor (path); } return true; }); keys->register_key (UnboundKey (), "thread_index.toggle_marked", "Toggle mark thread", [&] (Key) { if (list_store->children().size() < 1) return true; Gtk::TreePath path; Gtk::TreeViewColumn *c; get_cursor (path, c); Gtk::TreeIter iter; iter = filtered_store->get_iter (path); if (iter) { Gtk::ListStore::Row row = *iter; row[list_store->columns.marked] = !row[list_store->columns.marked]; } return true; }); keys->register_key (UnboundKey (), "thread_index.toggle_marked_previous", "Toggle mark thread and move to previous", [&] (Key) { if (filtered_store->children().size() < 1) return true; Gtk::TreePath path; Gtk::TreeViewColumn *c; get_cursor (path, c); Gtk::TreeIter iter; iter = filtered_store->get_iter (path); if (iter) { Gtk::ListStore::Row row = *iter; row[list_store->columns.marked] = !row[list_store->columns.marked]; /* move to previous */ path.prev (); if (path) { set_cursor (path); } } return true; }); keys->register_key ("T", "thread_index.toggle_marked_all", "Toggle marked on all loaded threads", [&] (Key) { Gtk::TreePath path; Gtk::TreeIter fwditer; fwditer = filtered_store->get_iter ("0"); Gtk::ListStore::Row row; while (fwditer) { row = *fwditer; row[list_store->columns.marked] = !row[list_store->columns.marked]; fwditer++; } return true; }); keys->register_key ("a", "thread_index.archive", "Toggle 'inbox' tag on thread", [&] (Key) { auto thread = get_current_thread (); if (thread) { main_window->actions->doit (refptr(new ToggleAction(thread, "inbox"))); } return true; }); keys->register_key (Key (GDK_KEY_asterisk), "thread_index.flag", "Toggle 'flagged' tag on thread", [&] (Key) { auto thread = get_current_thread (); if (thread) { main_window->actions->doit (refptr(new ToggleAction(thread, "flagged"))); } return true; }); keys->register_key ("N", "thread_index.unread", "Toggle 'unread' tag on thread", [&] (Key) { auto thread = get_current_thread (); if (thread) { main_window->actions->doit (refptr(new ToggleAction(thread, "unread"))); } return true; }); keys->register_key ("S", "thread_index.spam", "Toggle 'spam' tag on thread", [&] (Key) { auto thread = get_current_thread (); if (thread) { main_window->actions->doit (refptr(new SpamAction(thread))); } return true; }); keys->register_key ("C-m", "thread_index.mute", "Toggle 'muted' tag on thread, it will be excluded from searches", [&] (Key) { auto thread = get_current_thread (); if (thread) { main_window->actions->doit (refptr(new MuteAction(thread))); } return true; }); keys->register_key ("+", "thread_index.tag", "Edit tags for thread", [&] (Key) { auto thread = get_current_thread (); if (thread) { ustring tag_list = VectorUtils::concat_tags (thread->tags) + " "; main_window->enable_command (CommandBar::CommandMode::Tag, tag_list, [&,thread](ustring tgs) { LOG (debug) << "ti: got tags: " << tgs; vector tags = VectorUtils::split_and_trim (tgs, ",| "); /* remove empty */ tags.erase (std::remove (tags.begin (), tags.end (), ""), tags.end ()); sort (tags.begin (), tags.end ()); sort (thread->tags.begin (), thread->tags.end ()); vector rem; vector add; /* find tags that have been removed */ set_difference (thread->tags.begin (), thread->tags.end (), tags.begin (), tags.end (), std::back_inserter (rem)); /* find tags that should be added */ set_difference (tags.begin (), tags.end (), thread->tags.begin (), thread->tags.end (), std::back_inserter (add)); if (add.size () == 0 && rem.size () == 0) { LOG (debug) << "ti: nothing to do."; } else { main_window->actions->doit (refptr(new TagAction (thread, add, rem))); } }); } return true; }); keys->register_key ("E", "thread_index.edit_draft", "Edit first message marked as draft or last message in thread as new", [&] (Key) { auto thread = get_current_thread (); if (thread) { MessageThread mthread (thread); Db db (Db::DbMode::DATABASE_READ_ONLY); mthread.load_messages (&db); bool found = false; /* find first message marked as draft */ for (auto m : mthread.messages) { if (any_of (db.draft_tags.begin (), db.draft_tags.end (), [&](ustring t) { return has (m->tags, t); })) { main_window->add_mode (new EditMessage (main_window, m)); found = true; break; } } if (!found) { /* edit last message as draft */ main_window->add_mode (new EditMessage (main_window, *(--mthread.messages.end()))); } } return true; }); keys->register_run ("thread_index.run", [&] (Key, ustring cmd, ustring undo_cmd) { auto t = get_current_thread (); if (t) { cmd = ustring::compose (cmd, t->thread_id); undo_cmd = ustring::compose (undo_cmd, t->thread_id); astroid->actions->doit (refptr (new CmdAction ( Cmd ("thread_index.run", cmd, undo_cmd), t->thread_id, ""))); } return true; }); } // }}} bool ThreadIndexListView::multi_key_handler ( ThreadIndexListView::multi_key_action maction, Key) { LOG (debug) << "tl: m k h"; Gtk::TreePath path; Gtk::TreeIter fwditer; /* forward iterating is much faster than going backwards: * https://developer.gnome.org/gtkmm/3.11/classGtk_1_1TreeIter.html */ fwditer = filtered_store->get_iter ("0"); Gtk::ListStore::Row row; switch (maction) { case MFlag: case MUnread: case MSpam: case MMute: case MArchive: case MTag: { vector> threads; while (fwditer) { row = *fwditer; if (row[list_store->columns.marked]) { // row[list_store->columns.marked] = false; refptr thread = row[list_store->columns.thread]; threads.push_back (refptr::cast_dynamic(thread)); } fwditer++; } refptr a; switch (maction) { case MArchive: a = refptr(new ToggleAction(threads, "inbox")); break; case MFlag: a = refptr(new ToggleAction(threads, "flagged")); break; case MUnread: a = refptr(new ToggleAction(threads, "unread")); break; case MSpam: a = refptr(new SpamAction(threads)); break; case MMute: a = refptr(new MuteAction(threads)); break; case MTag: { /* ask for tags */ main_window->enable_command (CommandBar::CommandMode::DiffTag, "", [&, threads](ustring tgs) { LOG (debug) << "ti: got difftags: " << tgs; refptr ma = refptr (DiffTagAction::create (threads, tgs)); if (ma) { main_window->actions->doit (ma); } }); return true; } break; default: throw runtime_error ("impossible."); } if ((maction != MTag) && a) { main_window->actions->doit (a); } return true; } break; case MToggle: { while (fwditer) { row = *fwditer; if (row[list_store->columns.marked]) { row[list_store->columns.marked] = false; } fwditer++; } return true; } } return false; } bool ThreadIndexListView::on_key_press_event (GdkEventKey * e) { /* bypass scrolled window */ return thread_index->on_key_press_event (e); } bool ThreadIndexListView::on_button_press_event (GdkEventButton *ev) { /* Open context menu. */ bool return_value = TreeView::on_button_press_event(ev); if ((ev->type == GDK_BUTTON_PRESS) && (ev->button == 3)) { item_popup.popup (ev->button, ev->time); } return return_value; } void ThreadIndexListView::popup_activate_generic (enum PopupItem pi) { auto thread = get_current_thread (); switch (pi) { case Reply: { if (thread) { MessageThread mthread (thread); Db db (Db::DbMode::DATABASE_READ_ONLY); mthread.load_messages (&db); /* reply to last message */ main_window->add_mode (new ReplyMessage (main_window, *(--mthread.messages.end()))); } } break; case Forward: { if (thread) { MessageThread mthread (thread); Db db (Db::DbMode::DATABASE_READ_ONLY); mthread.load_messages (&db); /* reply to last message */ main_window->add_mode (new ForwardMessage (main_window, *(--mthread.messages.end()))); } } break; case Flag: { if (thread) { main_window->actions->doit (refptr(new ToggleAction(thread, "flagged"))); } } break; case Archive: { if (thread) { main_window->actions->doit (refptr(new ToggleAction(thread, "inbox"))); } } break; case Open: { if (thread) { LOG (info) << "ti_list: loading: " << thread->thread_id; thread_index->open_thread (thread, true); } } break; case OpenNewWindow: { if (thread) { LOG (info) << "ti_list: loading: " << thread->thread_id; thread_index->open_thread (thread, true, true); } } break; } } void ThreadIndexListView::on_my_row_activated ( const Gtk::TreeModel::Path &, Gtk::TreeViewColumn *) { auto thread = get_current_thread (); if (thread) { LOG (info) << "ti_list: loading: " << thread->thread_id; /* open message in new tab */ thread_index->open_thread (thread, true); } } void ThreadIndexListView::update_bg_image () { bool hide = (!filter_txt.empty () && filtered_store->children().size () == 0) || (filter_txt.empty () && thread_index->queryloader.total_messages == 0); if (!hide) { auto sc = get_style_context (); if (!sc->has_class ("hide_bg")) sc->add_class ("hide_bg"); } else { auto sc = get_style_context (); if (sc->has_class ("hide_bg")) sc->remove_class ("hide_bg"); } } /* void ThreadIndexListView::update_current_row (Db &db) { Gtk::TreePath path; Gtk::TreeViewColumn *c; get_cursor (path, c); Gtk::TreeIter iter; iter = list_store->get_iter (path); if (iter) { Gtk::ListStore::Row row = *iter; refptr thread = row[list_store->columns.thread]; thread->refresh (&db); list_store->row_changed (path, iter); } } */ refptr ThreadIndexListView::get_current_thread () { if (list_store->children().size() < 1) return refptr(); Gtk::TreePath path; Gtk::TreeViewColumn *c; get_cursor (path, c); Gtk::TreeIter iter; iter = filtered_store->get_iter (path); if (iter) { Gtk::ListStore::Row row = *iter; return row[list_store->columns.thread]; } else { return refptr(); } } ustring ThreadIndexListView::get_current_thread_id () { if (list_store->children().size() < 1) return ""; Gtk::TreePath path; Gtk::TreeViewColumn *c; get_cursor (path, c); Gtk::TreeIter iter; iter = filtered_store->get_iter (path); if (iter) { Gtk::ListStore::Row row = *iter; ustring thread_id = row[list_store->columns.thread_id]; return thread_id; } else { return ""; } } } astroid-0.14/src/modes/thread_index/thread_index_list_view.hh000066400000000000000000000065451335422170400245160ustar00rootroot00000000000000# pragma once # include # include # include # include # include "proto.hh" # include "config.hh" # include "modes/mode.hh" # include "modes/keybindings.hh" # include "notmuch.h" namespace Astroid { /* the list view consists of: * - a scolled window (which may be paned) * - a Treeview * - a ListStore */ /* ---------- * list store * ---------- */ class ThreadIndexListStore : public Gtk::ListStore { public: class ThreadIndexListStoreColumnRecord : public Gtk::TreeModel::ColumnRecord { public: Gtk::TreeModelColumn newest_date; Gtk::TreeModelColumn oldest_date; Gtk::TreeModelColumn thread_id; Gtk::TreeModelColumn> thread; Gtk::TreeModelColumn marked; ThreadIndexListStoreColumnRecord (); }; ThreadIndexListStore (); ~ThreadIndexListStore (); const ThreadIndexListStoreColumnRecord columns; }; /* --------- * list view * --------- */ class ThreadIndexListView : public Gtk::TreeView { public: ThreadIndexListView (ThreadIndex *, Glib::RefPtr); ~ThreadIndexListView (); ptree config; ThreadIndex * thread_index; MainWindow * main_window; refptr list_store; refptr filtered_store; ThreadIndexListCellRenderer * renderer; int page_jump_rows; // rows to jump void set_thread_data (Gtk::CellRenderer *, const Gtk::TreeIter & ); ustring get_current_thread_id (); refptr get_current_thread (); void update_bg_image (); void set_sort_type (notmuch_sort_t sort); bool filter_visible_row ( const Gtk::TreeIter & iter ); ustring filter_txt; std::vector filter; void on_filter (ustring k); protected: Keybindings multi_keys; void register_keys (); typedef enum { MUnread = 0, MFlag, MArchive, MSpam, MMute, MToggle, MTag, } multi_key_action; bool multi_key_handler (multi_key_action, Key); void on_my_row_activated (const Gtk::TreeModel::Path &, Gtk::TreeViewColumn *); virtual bool on_button_press_event (GdkEventButton *) override; Gtk::Menu item_popup; enum PopupItem { Reply, Forward, Flag, Archive, Open, OpenNewWindow, }; void popup_activate_generic (enum PopupItem); // bypass scrolled window virtual bool on_key_press_event (GdkEventKey *) override; private: std::chrono::time_point last_redraw; bool redraw (); }; /* ---------- * scrolled window * ---------- */ class ThreadIndexScrolled : public Mode { public: ThreadIndexScrolled (MainWindow *, Glib::RefPtr list_store, ThreadIndexListView * list_view); ~ThreadIndexScrolled (); Glib::RefPtr list_store; ThreadIndexListView * list_view; Gtk::ScrolledWindow scroll; /* mode */ virtual void grab_modal () override; virtual void release_modal () override; }; } astroid-0.14/src/modes/thread_view/000077500000000000000000000000001335422170400173035ustar00rootroot00000000000000astroid-0.14/src/modes/thread_view/page_client.cc000066400000000000000000001034641335422170400220740ustar00rootroot00000000000000# include "page_client.hh" # include "utils/resource.hh" # include # include # include # include # include # include # include # include # include "utils/gmime/gmime-compat.h" # include # include # include # include # include "astroid.hh" # include "build_config.hh" # include "modes/thread_view/webextension/ae_protocol.hh" # include "modes/thread_view/webextension/dom_utils.hh" # include "messages.pb.h" # include "config.hh" # include "thread_view.hh" # include "message_thread.hh" # include "chunk.hh" # include "utils/utils.hh" # include "utils/address.hh" # include "utils/vector_utils.hh" # include "utils/ustring_utils.hh" # include "utils/gravatar.hh" # ifndef DISABLE_PLUGINS # include "plugin/manager.hh" # endif using namespace boost::filesystem; namespace Astroid { int PageClient::id = 0; PageClient::PageClient (ThreadView * t) { id++; ready = false; thread_view = t; /* load attachment icon */ Glib::RefPtr theme = Gtk::IconTheme::get_default(); attachment_icon = theme->load_icon ( "mail-attachment-symbolic", ATTACHMENT_ICON_WIDTH, Gtk::ICON_LOOKUP_USE_BUILTIN ); extension_connect_id = g_signal_connect (thread_view->context, "initialize-web-extensions", G_CALLBACK (PageClient_init_web_extensions), (gpointer) this); } extern "C" void PageClient_init_web_extensions ( WebKitWebContext * context, gpointer user_data) { ((PageClient *) user_data)->init_web_extensions (context); } PageClient::~PageClient () { LOG (debug) << "pc: destruct"; g_signal_handler_disconnect (thread_view->context, extension_connect_id); LOG (debug) << "pc: closing"; istream.clear (); ostream.clear (); ext->close (); srv->close (); } void PageClient::init_web_extensions (WebKitWebContext * context) { /* add path to Astroid web extension */ # ifdef DEBUG if (exists (path (Resource::get_exe_dir ()) / path("libtvextension.so"))) { LOG (warn) << "pc: DEBUG build - found local extension. adding: " << Resource::get_exe_dir().c_str () << " to web extensions search path."; webkit_web_context_set_web_extensions_directory ( context, Resource::get_exe_dir ().c_str()); } else { LOG (warn) << "pc: DEBUG build. no local extension found. adding installed path."; path wke = path (PREFIX) / path ("lib/astroid/web-extensions"); LOG (info) << "pc: adding " << wke.c_str () << " to web extension search path."; webkit_web_context_set_web_extensions_directory ( context, wke.c_str()); } # else path wke = path (PREFIX) / path ("lib/astroid/web-extensions"); LOG (info) << "pc: adding " << wke.c_str () << " to web extension search path."; webkit_web_context_set_web_extensions_directory ( context, wke.c_str()); # endif /* set up unix socket */ LOG (warn) << "pc: id: " << id; socket_addr = ustring::compose ("%1/sockets/astroid.%2.%3.%4", astroid->standard_paths ().runtime_dir.c_str(), getpid(), id, UstringUtils::random_alphanumeric (30)); refptr addr = Gio::UnixSocketAddress::create (socket_addr, Gio::UNIX_SOCKET_ADDRESS_ABSTRACT); refptr eaddr; LOG (debug) << "pc: socket: " << addr->get_path (); mode_t p = umask (0077); srv = Gio::SocketListener::create (); srv->add_address (addr, Gio::SocketType::SOCKET_TYPE_STREAM, Gio::SocketProtocol::SOCKET_PROTOCOL_DEFAULT, eaddr); /* listen */ srv->accept_async (sigc::mem_fun (this, &PageClient::extension_connect)); umask (p); /* send socket address (TODO: include key) */ GVariant * gaddr = g_variant_new_string (addr->get_path ().c_str ()); webkit_web_context_set_web_extensions_initialization_user_data ( context, gaddr); } void PageClient::extension_connect (refptr &res) { LOG (warn) << "pc: got extension connect"; ext = refptr::cast_dynamic (srv->accept_finish (res)); istream = ext->get_input_stream (); ostream = ext->get_output_stream (); ready = true; if (thread_view->wk_loaded) { Glib::signal_idle().connect_once ( sigc::mem_fun (thread_view, &ThreadView::on_ready_to_render)); } } void PageClient::handle_ack (const AstroidMessages::Ack & ack) { LOG (debug) << "pc: got ack (s: " << ack.success () << ") , focus: " << ack.focus().mid () << ", e: " << ack.focus().element (); if (!ack.focus().mid ().empty () && ack.focus().element () >= 0) { auto it = std::find_if ( thread_view->mthread->messages.begin (), thread_view->mthread->messages.end (), [&] (auto &m) { return ack.focus().mid () == m->safe_mid (); }); if (it != thread_view->mthread->messages.end ()) { thread_view->focused_message = *it; thread_view->state[thread_view->focused_message].current_element = ack.focus().element (); thread_view->unread_check (); } } } void PageClient::load () { /* load style sheet */ LOG (debug) << "pc: sending page.."; AstroidMessages::Page s; s.set_css (thread_view->theme.thread_view_css.c_str ()); s.set_part_css (thread_view->theme.part_css.c_str ()); s.set_html (thread_view->theme.thread_view_html.c_str ()); s.set_use_stdout (astroid->log_stdout); s.set_use_syslog (astroid->log_syslog); s.set_disable_log (astroid->disable_log); s.set_log_level (astroid->log_level); /* send allowed URIs */ s.add_allowed_uris (thread_view->home_uri); if (enable_gravatar) { s.add_allowed_uris ("https://www.gravatar.com/avatar/"); } # ifndef DISABLE_PLUGINS /* get plugin allowed uris */ std::vector puris = thread_view->plugins->get_allowed_uris (); if (puris.size() > 0) { LOG (debug) << "pc: plugin allowed uris: " << VectorUtils::concat_tags (puris); for (auto &p : puris) { s.add_allowed_uris (p); } } # endif AeProtocol::send_message_sync (AeProtocol::MessageTypes::Page, s, ostream, m_ostream, istream, m_istream); } void PageClient::allow_remote_resources () { LOG (debug) << "pc: allow remote resources."; AstroidMessages::AllowRemoteImages msg; msg.set_bogus ("asdfadsf"); msg.set_allow (true); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::AllowRemoteImages, msg, ostream, m_ostream, istream, m_istream) ); } void PageClient::clear_messages () { LOG (debug) << "pc: clear messages.."; AstroidMessages::ClearMessage c; c.set_yes (true); AeProtocol::send_message_sync (AeProtocol::MessageTypes::ClearMessages, c, ostream, m_ostream, istream, m_istream); } void PageClient::update_state () { /* Synchronize state structure between ThreadView and Extension. Only a minimal structure * is sent to the extension. * * This must be called every time the messages in the thread are changed in a way that affects: * * * Order * * Adding / removing * * Changing elements * */ LOG (debug) << "pc: sending state.."; AstroidMessages::State state; state.set_edit_mode (thread_view->edit_mode); for (refptr &ms : thread_view->mthread->messages) { AstroidMessages::State::MessageState * m = state.add_messages (); m->set_mid (ms->safe_mid ()); m->set_level (ms->level); for (auto &e : thread_view->state[ms].elements) { AstroidMessages::State::MessageState::Element * _e = m->add_elements (); auto ref = _e->GetReflection(); ref->SetEnumValue (_e, _e->GetDescriptor()->FindFieldByName("type"), e.type); _e->set_id (e.id); _e->set_sid (e.element_id ()); _e->set_focusable (e.focusable); } } handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::State, state, ostream, m_ostream, istream, m_istream) ); } void PageClient::update_indent_state (bool indent) { LOG (debug) << "pc: sending indent.."; AstroidMessages::Indent msg; msg.set_bogus ("asdfadsf"); msg.set_indent (indent); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Indent, msg, ostream, m_ostream, istream, m_istream) ); } void PageClient::set_marked_state (refptr m, bool marked) { AstroidMessages::Mark msg; msg.set_mid (m->safe_mid ()); msg.set_marked (marked); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Mark, msg, ostream, m_ostream, istream, m_istream) ); } void PageClient::set_hidden_state (refptr m, bool hidden) { LOG (debug) << "pc: set hidden state"; AstroidMessages::Hidden msg; msg.set_mid (m->safe_mid ()); msg.set_hidden (hidden); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Hidden, msg, ostream, m_ostream, istream, m_istream) ); } void PageClient::set_focus (refptr m, unsigned int e) { if (m) { LOG (debug) << "pc: focusing: " << m->safe_mid () << ": " << e; AstroidMessages::Focus msg; msg.set_mid (m->safe_mid ()); msg.set_focus (true); msg.set_element (e); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Focus, msg, ostream, m_ostream, istream, m_istream) ); } else { LOG (warn) << "pc: tried to focus unset message"; } } void PageClient::toggle_part (refptr m, refptr c, ThreadView::MessageState::Element el) { /* hides current sibling part and shows the focused one */ LOG (debug) << "pc: toggling part: " << m->safe_mid () << ", " << c->id; /* update state */ std::find_if ( thread_view->state[m].elements.begin (), thread_view->state[m].elements.end (), [&] (auto e) { return e.id == el.id; })->focusable = false; /* make siblings focusable */ for (auto &c : c->siblings) { std::find_if ( thread_view->state[m].elements.begin (), thread_view->state[m].elements.end (), [&] (auto e) { return e.id == c->id; })->focusable = true; } /* update state */ update_state (); /* send updated message */ update_message (m, AstroidMessages::UpdateMessage_Type_VisibleParts); } void PageClient::remove_message (refptr m) { AstroidMessages::Message msg; msg.set_mid (m->safe_mid()); // just mid. handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::RemoveMessage, msg, ostream, m_ostream, istream, m_istream) ); } void PageClient::add_message (refptr m) { handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::AddMessage, make_message (m), ostream, m_ostream, istream, m_istream) ); } void PageClient::update_message (refptr m, AstroidMessages::UpdateMessage_Type t) { AstroidMessages::UpdateMessage msg; *msg.mutable_m() = make_message (m, true); msg.set_type (t); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::UpdateMessage, msg, ostream, m_ostream, istream, m_istream) ); } AstroidMessages::Message PageClient::make_message (refptr m, bool keep_state) { typedef ThreadView::MessageState MessageState; AstroidMessages::Message msg; msg.set_mid (m->safe_mid()); Address sender (m->sender); msg.mutable_sender()->set_name (sender.fail_safe_name ()); msg.mutable_sender()->set_email (sender.email ()); msg.mutable_sender ()->set_full_address (sender.full_address ()); for (Address &recipient: AddressList(m->to()).addresses) { AstroidMessages::Address * a = msg.mutable_to()->add_addresses(); a->set_name (recipient.fail_safe_name ()); a->set_email (recipient.email ()); a->set_full_address (recipient.full_address ()); } for (Address &recipient: AddressList(m->cc()).addresses) { AstroidMessages::Address * a = msg.mutable_cc()->add_addresses(); a->set_name (recipient.fail_safe_name ()); a->set_email (recipient.email ()); a->set_full_address (recipient.full_address ()); } for (Address &recipient: AddressList(m->bcc()).addresses) { AstroidMessages::Address * a = msg.mutable_bcc()->add_addresses(); a->set_name (recipient.fail_safe_name ()); a->set_email (recipient.email ()); a->set_full_address (recipient.full_address ()); } msg.set_date_pretty (m->pretty_date ()); msg.set_date_verbose (m->pretty_verbose_date (true)); msg.set_subject (m->subject); msg.set_patch (m->is_patch ()); msg.set_missing_content (m->missing_content); /* tags */ { unsigned char cv[] = { 0xff, 0xff, 0xff }; ustring tags_s; # ifndef DISABLE_PLUGINS if (!thread_view->plugins->format_tags (m->tags, "#ffffff", false, tags_s)) { # endif tags_s = VectorUtils::concat_tags_color (m->tags, false, 0, cv); # ifndef DISABLE_PLUGINS } # endif msg.set_tag_string (tags_s); for (ustring &tag : m->tags) { msg.add_tags (tag); } } /* avatar */ { ustring uri = ""; auto se = Address(m->sender); # ifdef DISABLE_PLUGINS if (false) { # else if (thread_view->plugins->get_avatar_uri (se.email (), Gravatar::DefaultStr[Gravatar::Default::RETRO], 48, m, uri)) { # endif ; // all fine, use plugins avatar } else { if (enable_gravatar) { uri = Gravatar::get_image_uri (se.email (),Gravatar::Default::RETRO , 48); } } msg.set_gravatar (uri); } /* set preview */ { ustring bp = m->viewable_text (false, false); if (static_cast(bp.size()) > MAX_PREVIEW_LEN) bp = bp.substr(0, MAX_PREVIEW_LEN - 3) + "..."; while (true) { size_t i = bp.find ("
"); if (i == ustring::npos) break; bp.erase (i, 4); } msg.set_preview (Glib::Markup::escape_text (bp)); } if (astroid->config().get ("thread_view.preferred_type") == "plain" && astroid->config().get ("thread_view.preferred_html_only")) { /* check if we have a preferred part - and open first viewable if not */ bool found_preferred = false; for (auto &c : m->all_parts ()) { if (c->preferred) { found_preferred = true; break; } } /* take first viewable */ if (!found_preferred) { for (auto &c : m->all_parts ()) { if (c->viewable) { c->preferred = true; break; } } } } /* build structure */ if (!m->missing_content) { msg.set_allocated_root (build_mime_tree (m, m->root, true, false, keep_state)); } /* add MIME messages */ for (refptr &c : m->mime_messages ()) { auto _c = msg.add_mime_messages (); auto _n = build_mime_tree (m, c, false, true, keep_state); *_c = *_n; delete _n; if (!keep_state) { // add MIME message to message state MessageState::Element e (MessageState::ElementType::MimeMessage, c->id); thread_view->state[m].elements.push_back (e); } } /* add attachments */ for (refptr &c : m->attachments ()) { auto _c = msg.add_attachments (); auto _n = build_mime_tree (m, c, false, true, keep_state); *_c = *_n; delete _n; _c->set_thumbnail (get_attachment_thumbnail (c)); if (!c->content_id.empty ()) { /* send content if CID is set */ _c->set_content (get_attachment_data (c)); } if (!keep_state) { // add attachment to message state MessageState::Element e (MessageState::ElementType::Attachment, c->id); thread_view->state[m].elements.push_back (e); } } return msg; } AstroidMessages::Message::Chunk * PageClient::build_mime_tree (refptr m, refptr c, bool root, bool shallow, bool keep_state) { typedef ThreadView::MessageState MessageState; ustring mime_type; if (c->content_type) { mime_type = ustring(g_mime_content_type_get_mime_type (c->content_type)); } else { mime_type = "application/octet-stream"; } LOG (debug) << "create message part: " << c->id << " (siblings: " << c->siblings.size() << ") (kids: " << c->kids.size() << ")" << " (attachment: " << c->attachment << ")" << " (viewable: " << c->viewable << ")" << " (mimetype: " << mime_type << ")"; auto part = new AstroidMessages::Message::Chunk (); /* defaults */ part->set_mime_type (mime_type); part->set_content (""); part->set_cid (c->content_id); part->set_id (c->id); part->set_sid (ustring::compose ("%1", c->id)); part->set_sibling (!c->siblings.empty ()); part->set_viewable (c->viewable); part->set_preferred (c->preferred); part->set_attachment (c->attachment); part->set_filename (c->get_filename ()); part->set_size (c->get_file_size ()); part->set_human_size (Utils::format_size (part->size())); part->set_is_signed (c->issigned); part->set_is_encrypted (c->isencrypted); if (c->issigned || c->isencrypted) { LOG (debug) << "tv: added encrypt: " << c->crypt->id << " to chunk: " << c->id; part->set_crypto_id (c->crypt->id); /* add to MessageState */ if (!keep_state) { MessageState::Element e (MessageState::ElementType::Encryption, c->crypt->id); thread_view->state[m].elements.push_back (e); } vector all_sig_errors; if (c->issigned) { refptr cr = c->crypt; part->mutable_signature()->set_verified (cr->verified); for (int i = 0; i < g_mime_signature_list_length (cr->slist); i++) { GMimeSignature * s = g_mime_signature_list_get_signature (cr->slist, i); GMimeCertificate * ce = NULL; if (s) ce = g_mime_signature_get_certificate (s); ustring nm, em, ky; ustring gd = ""; ustring err = ""; vector sig_errors; if (ce) { const char * c = NULL; nm = (c = g_mime_certificate_get_name (ce), c ? c : ""); em = (c = g_mime_certificate_get_email (ce), c ? c : ""); ky = (c = g_mime_certificate_get_key_id (ce), c ? c : ""); # if (GMIME_MAJOR_VERSION < 3) switch (g_mime_signature_get_status (s)) { case GMIME_SIGNATURE_STATUS_GOOD: gd = "Good"; break; case GMIME_SIGNATURE_STATUS_BAD: gd = "Bad"; // fall through case GMIME_SIGNATURE_STATUS_ERROR: if (gd.empty ()) gd = "Erroneous"; GMimeSignatureError e = g_mime_signature_get_errors (s); if (e & GMIME_SIGNATURE_ERROR_EXPSIG) sig_errors.push_back ("expired"); if (e & GMIME_SIGNATURE_ERROR_NO_PUBKEY) sig_errors.push_back ("no-pub-key"); if (e & GMIME_SIGNATURE_ERROR_EXPKEYSIG) sig_errors.push_back ("expired-key-sig"); if (e & GMIME_SIGNATURE_ERROR_REVKEYSIG) sig_errors.push_back ("revoked-key-sig"); if (e & GMIME_SIGNATURE_ERROR_UNSUPP_ALGO) sig_errors.push_back ("unsupported-algo"); if (!sig_errors.empty ()) { err = "[Error: " + VectorUtils::concat (sig_errors, ",") + "]"; } break; # else GMimeSignatureStatus stat = g_mime_signature_get_status (s); if (g_mime_signature_status_good (stat)) { gd = "Good"; } else if (g_mime_signature_status_bad (stat) || g_mime_signature_status_error (stat)) { if (g_mime_signature_status_bad (stat)) gd = "Bad"; else gd = "Erroneous"; if (stat & GMIME_SIGNATURE_STATUS_KEY_REVOKED) sig_errors.push_back ("revoked-key"); if (stat & GMIME_SIGNATURE_STATUS_KEY_EXPIRED) sig_errors.push_back ("expired-key"); if (stat & GMIME_SIGNATURE_STATUS_SIG_EXPIRED) sig_errors.push_back ("expired-sig"); if (stat & GMIME_SIGNATURE_STATUS_KEY_MISSING) sig_errors.push_back ("key-missing"); if (stat & GMIME_SIGNATURE_STATUS_CRL_MISSING) sig_errors.push_back ("crl-missing"); if (stat & GMIME_SIGNATURE_STATUS_CRL_TOO_OLD) sig_errors.push_back ("crl-too-old"); if (stat & GMIME_SIGNATURE_STATUS_BAD_POLICY) sig_errors.push_back ("bad-policy"); if (stat & GMIME_SIGNATURE_STATUS_SYS_ERROR) sig_errors.push_back ("sys-error"); if (stat & GMIME_SIGNATURE_STATUS_TOFU_CONFLICT) sig_errors.push_back ("tofu-conflict"); if (!sig_errors.empty ()) { err = "[Error: " + VectorUtils::concat (sig_errors, ",") + "]"; } # endif } } else { err = "[Error: Could not get certificate]"; } # if (GMIME_MAJOR_VERSION < 3) GMimeCertificateTrust t = g_mime_certificate_get_trust (ce); ustring trust = ""; switch (t) { case GMIME_CERTIFICATE_TRUST_NONE: trust = "none"; break; case GMIME_CERTIFICATE_TRUST_NEVER: trust = "never"; break; case GMIME_CERTIFICATE_TRUST_UNDEFINED: trust = "undefined"; break; case GMIME_CERTIFICATE_TRUST_MARGINAL: trust = "marginal"; break; case GMIME_CERTIFICATE_TRUST_FULLY: trust = "fully"; break; case GMIME_CERTIFICATE_TRUST_ULTIMATE: trust = "ultimate"; break; } # else GMimeTrust t = g_mime_certificate_get_trust (ce); ustring trust = ""; switch (t) { case GMIME_TRUST_UNKNOWN: trust = "unknown"; break; case GMIME_TRUST_UNDEFINED: trust = "undefined"; break; case GMIME_TRUST_NEVER: trust = "never"; break; case GMIME_TRUST_MARGINAL: trust = "marginal"; break; case GMIME_TRUST_FULL: trust = "full"; break; case GMIME_TRUST_ULTIMATE: trust = "ultimate"; break; } # endif part->mutable_signature ()->add_sign_strings ( ustring::compose ( "
%1 signature from: %2 (%3) [0x%4] [trust: %5] %6", gd, nm, em, ky, trust, err)); for (auto &e : sig_errors) { part->mutable_signature ()->add_all_errors (e); } } } if (c->isencrypted) { refptr cr = c->crypt; if (cr->decrypted) { part->mutable_encryption ()->set_decrypted (true); GMimeCertificateList * rlist = cr->rlist; for (int i = 0; i < g_mime_certificate_list_length (rlist); i++) { GMimeCertificate * ce = g_mime_certificate_list_get_certificate (rlist, i); const char * c = NULL; ustring fp = (c = g_mime_certificate_get_fingerprint (ce), c ? c : ""); ustring nm = (c = g_mime_certificate_get_name (ce), c ? c : ""); ustring em = (c = g_mime_certificate_get_email (ce), c ? c : ""); ustring ky = (c = g_mime_certificate_get_key_id (ce), c ? c : ""); part->mutable_encryption ()->add_enc_strings ( ustring::compose ("
Encrypted for: %1 (%2) [0x%3]", nm, em, ky)); } } } } if (shallow) return part; if (root && c->attachment) { /* return empty root part */ return part; } else if (c->attachment) { delete part; return NULL; } if (c->viewable) { # ifndef DISABLE_PLUGINS part->set_content ( thread_view->plugins->filter_part ( c->viewable_text (false, true), c->viewable_text (true, true), mime_type, m->is_patch())); # else part->set_content (c->viewable_text (true, true)); # endif } /* Check if we are preferred part or sibling. * * If not used only a sibling part will be created. * */ bool use = false; if (c->viewable) { if (c->preferred) { use = true; } else { use = false; // create sibling part } } else { /* a part which may contain sub-parts */ use = true; } part->set_use (use); if (use) { if (c->viewable) { /* make state element */ if (!keep_state) { MessageState::Element e (MessageState::ElementType::Part, c->id); if (c->preferred) { // shown e.focusable = false; } else { // hidden by default e.focusable = true; } part->set_focusable (e.focusable); thread_view->state[m].elements.push_back (e); } else { LOG (debug) << "cid: " << c->id; part->set_focusable ( thread_view->state[m].get_element_by_id (c->id)->focusable ); } } /* recurse into children after first part so that we get the correct order * on elements */ for (auto &k : c->kids) { auto ch = build_mime_tree (m, k, false, false, keep_state); if (ch != NULL) { auto nch = part->add_kids (); *nch = *ch; delete ch; } } } else { /* make state element for sibling part (hidden by default) */ if (!keep_state) { MessageState::Element e (MessageState::ElementType::Part, c->id); part->set_focusable (e.focusable); thread_view->state[m].elements.push_back (e); } else { part->set_focusable ( thread_view->state[m].get_element_by_id (c->id)->focusable ); } } return part; } void PageClient::set_warning (refptr m, ustring txt) { AstroidMessages::Info i; i.set_mid (m->safe_mid ()); i.set_warning (true); i.set_set (true); i.set_txt (txt); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Info, i, ostream, m_ostream, istream, m_istream) ); } void PageClient::hide_warning (refptr m) { AstroidMessages::Info i; i.set_mid (m->safe_mid ()); i.set_warning (true); i.set_set (false); i.set_txt (""); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Info, i, ostream, m_ostream, istream, m_istream) ); } void PageClient::set_info (refptr m, ustring txt) { AstroidMessages::Info i; i.set_mid (m->safe_mid ()); i.set_warning (false); i.set_set (true); i.set_txt (txt); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Info, i, ostream, m_ostream, istream, m_istream) ); } void PageClient::hide_info (refptr m) { AstroidMessages::Info i; i.set_mid (m->safe_mid ()); i.set_warning (false); i.set_set (false); i.set_txt (""); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Info, i, ostream, m_ostream, istream, m_istream) ); } ustring PageClient::get_attachment_thumbnail (refptr c) { // {{{ /* set the preview image or icon on the attachment display element */ const char * _mtype = g_mime_content_type_get_media_type (c->content_type); ustring mime_type; if (_mtype == NULL) { mime_type = "application/octet-stream"; } else { mime_type = ustring(g_mime_content_type_get_mime_type (c->content_type)); } LOG (debug) << "tv: set attachment thumbnail, mime_type: " << mime_type << ", mtype: " << _mtype; gchar * content; gsize content_size; ustring image_content_type; if ((_mtype != NULL) && (ustring(_mtype) == "image")) { auto mis = Gio::MemoryInputStream::create (); refptr data = c->contents (); mis->add_data (data->get_data (), data->size ()); try { auto pb = Gdk::Pixbuf::create_from_stream_at_scale (mis, THUMBNAIL_WIDTH, -1, true, refptr()); pb = pb->apply_embedded_orientation (); pb->save_to_buffer (content, content_size, "png"); image_content_type = "image/png"; } catch (Gdk::PixbufError &ex) { LOG (error) << "tv: could not create icon from attachmed image."; attachment_icon->save_to_buffer (content, content_size, "png"); // default type is png image_content_type = "image/png"; } } else { // TODO: guess icon from mime type. Using standard icon for now. attachment_icon->save_to_buffer (content, content_size, "png"); // default type is png image_content_type = "image/png"; } return DomUtils::assemble_data_uri (image_content_type.c_str (), content, content_size); } // }}} ustring PageClient::get_attachment_data (refptr c) { // {{{ /* set the preview image or icon on the attachment display element */ const char * _mtype = g_mime_content_type_get_media_type (c->content_type); ustring mime_type; if (_mtype == NULL) { mime_type = "application/octet-stream"; } else { mime_type = ustring(g_mime_content_type_get_mime_type (c->content_type)); } auto data = c->contents (); LOG (debug) << "tv: set attachment data, mime_type: " << mime_type << ", mtype: " << _mtype; return DomUtils::assemble_data_uri (mime_type.c_str (), (const gchar *) data->get_data (), data->size ()); } // }}} void PageClient::scroll_to_bottom () { AstroidMessages::Navigate n; n.set_direction (AstroidMessages::Navigate_Direction_Down); n.set_type (AstroidMessages::Navigate_Type_Extreme); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Navigate, n, ostream, m_ostream, istream, m_istream) ); } void PageClient::scroll_to_top () { AstroidMessages::Navigate n; n.set_direction (AstroidMessages::Navigate_Direction_Up); n.set_type (AstroidMessages::Navigate_Type_Extreme); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Navigate, n, ostream, m_ostream, istream, m_istream) ); } void PageClient::scroll_down_big () { AstroidMessages::Navigate n; n.set_direction (AstroidMessages::Navigate_Direction_Down); n.set_type (AstroidMessages::Navigate_Type_VisualBig); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Navigate, n, ostream, m_ostream, istream, m_istream) ); } void PageClient::scroll_up_big () { AstroidMessages::Navigate n; n.set_direction (AstroidMessages::Navigate_Direction_Up); n.set_type (AstroidMessages::Navigate_Type_VisualBig); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Navigate, n, ostream, m_ostream, istream, m_istream) ); } void PageClient::scroll_down_page () { AstroidMessages::Navigate n; n.set_direction (AstroidMessages::Navigate_Direction_Down); n.set_type (AstroidMessages::Navigate_Type_VisualPage); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Navigate, n, ostream, m_ostream, istream, m_istream) ); } void PageClient::scroll_up_page () { AstroidMessages::Navigate n; n.set_direction (AstroidMessages::Navigate_Direction_Up); n.set_type (AstroidMessages::Navigate_Type_VisualPage); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Navigate, n, ostream, m_ostream, istream, m_istream) ); } void PageClient::focus_next_element (bool force_change) { AstroidMessages::Navigate n; n.set_direction (AstroidMessages::Navigate_Direction_Down); if (force_change) { n.set_type (AstroidMessages::Navigate_Type_Element); } else { n.set_type (AstroidMessages::Navigate_Type_VisualElement); } handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Navigate, n, ostream, m_ostream, istream, m_istream) ); } void PageClient::focus_previous_element (bool force_change) { AstroidMessages::Navigate n; n.set_direction (AstroidMessages::Navigate_Direction_Up); if (force_change) { n.set_type (AstroidMessages::Navigate_Type_Element); } else { n.set_type (AstroidMessages::Navigate_Type_VisualElement); } handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Navigate, n, ostream, m_ostream, istream, m_istream) ); } void PageClient::focus_next_message () { AstroidMessages::Navigate n; n.set_direction (AstroidMessages::Navigate_Direction_Down); n.set_type (AstroidMessages::Navigate_Type_Message); n.set_focus_top (false); // not relevant handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Navigate, n, ostream, m_ostream, istream, m_istream) ); } void PageClient::focus_previous_message (bool focus_top) { AstroidMessages::Navigate n; n.set_direction (AstroidMessages::Navigate_Direction_Up); n.set_type (AstroidMessages::Navigate_Type_Message); n.set_focus_top (focus_top); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Navigate, n, ostream, m_ostream, istream, m_istream) ); } void PageClient::focus_element (refptr m, unsigned int e) { AstroidMessages::Navigate n; n.set_direction (AstroidMessages::Navigate_Direction_Specific); n.set_type (AstroidMessages::Navigate_Type_Element); n.set_mid (m->safe_mid ()); n.set_element (e); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Navigate, n, ostream, m_ostream, istream, m_istream) ); } void PageClient::update_focus_to_view () { AstroidMessages::Navigate n; n.set_direction (AstroidMessages::Navigate_Direction_Specific); n.set_type (AstroidMessages::Navigate_Type_FocusView); handle_ack ( AeProtocol::send_message_sync (AeProtocol::MessageTypes::Navigate, n, ostream, m_ostream, istream, m_istream) ); } } astroid-0.14/src/modes/thread_view/page_client.hh000066400000000000000000000056521335422170400221060ustar00rootroot00000000000000# pragma once # include # include # include # include # include # include # include # include "astroid.hh" # include "thread_view.hh" # include "messages.pb.h" namespace Astroid { extern "C" void PageClient_init_web_extensions ( WebKitWebContext *, gpointer); class PageClient : public sigc::trackable { public: PageClient (ThreadView *); ~PageClient (); ThreadView * thread_view; void init_web_extensions (WebKitWebContext * context); /* ThreadView interface */ void load (); void add_message (refptr m); void update_message (refptr m, AstroidMessages::UpdateMessage_Type t); void remove_message (refptr m); void update_state (); void clear_messages (); void update_indent_state (bool); void allow_remote_resources (); void toggle_part (refptr m, refptr, ThreadView::MessageState::Element); void set_marked_state (refptr m, bool marked); void set_hidden_state (refptr m, bool hidden); void set_warning (refptr, ustring); void hide_warning (refptr); void set_info (refptr, ustring); void hide_info (refptr); /* focus and scrolling */ void set_focus (refptr m, unsigned int); void scroll_down_big (); void scroll_up_big (); void scroll_down_page (); void scroll_up_page (); void scroll_to_top (); void scroll_to_bottom (); void focus_element (refptr m, unsigned int); void focus_next_element (bool force_change); void focus_previous_element (bool force_change); void focus_next_message (); void focus_previous_message (bool focus_top); void update_focus_to_view (); bool enable_gravatar = false; std::atomic ready; private: AstroidMessages::Message make_message (refptr m, bool keep_state = false); AstroidMessages::Message::Chunk * build_mime_tree (refptr m, refptr c, bool root, bool shallow, bool keep_state = false); ustring get_attachment_thumbnail (refptr); ustring get_attachment_data (refptr); static const int MAX_PREVIEW_LEN = 80; static const int THUMBNAIL_WIDTH = 150; // px static const int ATTACHMENT_ICON_WIDTH = 35; refptr attachment_icon; private: static int id; ustring socket_addr; refptr srv; refptr ext; void extension_connect (refptr &res); gulong extension_connect_id; refptr istream; refptr ostream; std::mutex m_ostream; std::mutex m_istream; void handle_ack (const AstroidMessages::Ack & ack); }; } astroid-0.14/src/modes/thread_view/theme.cc000066400000000000000000000105661335422170400207240ustar00rootroot00000000000000# include "theme.hh" # include # include # include # include # include "astroid.hh" # include "config.hh" # include "utils/resource.hh" # ifndef DISABLE_LIBSASS # ifdef SASSCTX_CONTEXT_H # include # elif SASSCTX_SASS_CONTEXT_H # include # endif # endif using namespace std; using namespace boost::filesystem; namespace Astroid { std::atomic Theme::theme_loaded (false); const char * Theme::thread_view_html_f = "ui/thread-view.html"; # ifndef DISABLE_LIBSASS const char * Theme::thread_view_scss_f = "ui/thread-view.scss"; const char * Theme::part_scss_f = "ui/part.scss"; # else const char * Theme::thread_view_css_f = "ui/thread-view.css"; const char * Theme::part_css_f = "ui/part.css"; # endif ustring Theme::thread_view_html; ustring Theme::thread_view_css; ustring Theme::part_css; Theme::Theme () { load (false); } void Theme::load (bool reload) { using bfs::path; using std::endl; LOG (debug) << "theme: loading.."; /* load html and css (from scss) */ if (reload || !theme_loaded) { path tv_html = Resource (true, thread_view_html_f).get_path (); if (!check_theme_version (tv_html)) { LOG (error) << "tv: html file version does not match!"; } # ifndef DISABLE_LIBSASS path tv_scss = Resource (true, thread_view_scss_f).get_path (); if (!check_theme_version (tv_scss)) { LOG (error) << "tv: scss file version does not match!"; } path part_scss = Resource (true, part_scss_f).get_path (); if (!check_theme_version (part_scss)) { LOG (error) << "tv: part scss file version does not match!"; } # else path part_css = Resource (true, part_css_f).get_path (); if (!check_theme_version (part_css)) { LOG (error) << "tv: part css file version does not match!"; } # endif /* load html */ { std::ifstream tv_html_f (tv_html.c_str()); std::istreambuf_iterator eos; // default is eos std::istreambuf_iterator tv_iit (tv_html_f); thread_view_html.append (tv_iit, eos); tv_html_f.close (); } /* load style sheet */ # ifndef DISABLE_LIBSASS thread_view_css = process_scss (tv_scss.c_str ()); part_css = process_scss (part_scss.c_str ()); # else { std::ifstream tv_css_f (tv_css.c_str()); std::istreambuf_iterator eos; // default is eos std::istreambuf_iterator tv_iit (tv_css_f); thread_view_css.append (tv_iit, eos); tv_css_f.close (); } { std::ifstream part_css_f (part_css.c_str()); std::istreambuf_iterator eos; // default is eos std::istreambuf_iterator tv_iit (tv_css_f); part_css.append (tv_iit, eos); part_css_f.close (); } # endif theme_loaded = true; } } # ifndef DISABLE_LIBSASS ustring Theme::process_scss (const char * scsspath) { /* - https://github.com/sass/libsass/blob/master/docs/api-doc.md * - https://github.com/sass/libsass/blob/master/docs/api-context-example.md */ using std::endl; LOG (info) << "theme: processing: " << scsspath; struct Sass_File_Context* file_ctx = sass_make_file_context(scsspath); struct Sass_Options* options = sass_file_context_get_options(file_ctx); struct Sass_Context* context = sass_file_context_get_context(file_ctx); sass_option_set_precision(options, 1); sass_option_set_source_comments(options, true); int status = sass_compile_file_context (file_ctx); if (status != 0) { const char * err = sass_context_get_error_message (context); ustring erru (err); LOG (error) << "theme: error processing: " << erru; throw runtime_error ( ustring::compose ("theme: could not process scss: %1", erru).c_str ()); } const char * output = sass_context_get_output_string(context); ustring output_str(output); sass_delete_file_context (file_ctx); return output_str; } # endif bool Theme::check_theme_version (bfs::path p) { /* check version found in first line in file */ std::ifstream f (p.c_str ()); ustring vline; int version; f >> vline >> vline >> version; LOG (debug) << "tv: testing version: " << version; f.close (); return (version == THEME_VERSION); } } astroid-0.14/src/modes/thread_view/theme.hh000066400000000000000000000015601335422170400207300ustar00rootroot00000000000000# pragma once # include # include # include "proto.hh" namespace bfs = boost::filesystem; namespace Astroid { class Theme { public: Theme (); void load (bool reload); static std::atomic theme_loaded; static const char * thread_view_html_f; # ifndef DISABLE_LIBSASS static const char * thread_view_scss_f; static const char * part_scss_f; # else static const char * thread_view_css_f; static const char * part_css_f; # endif static ustring thread_view_html; static ustring thread_view_css; static ustring part_css; const char * STYLE_NAME = "STYLE"; const int THEME_VERSION = 5; private: bool check_theme_version (bfs::path); # ifndef DISABLE_LIBSASS ustring process_scss (const char * scsspath); # endif }; } astroid-0.14/src/modes/thread_view/thread_view.cc000066400000000000000000001757611335422170400221340ustar00rootroot00000000000000# include # include # include # include # include # include # include # include # include # include # include # include # include # include "build_config.hh" # include "thread_view.hh" # include "theme.hh" # include "page_client.hh" # include "main_window.hh" # include "message_thread.hh" # include "chunk.hh" # include "crypto.hh" # include "db.hh" # include "utils/utils.hh" # include "utils/address.hh" # include "utils/vector_utils.hh" # include "utils/ustring_utils.hh" # include "utils/gravatar.hh" # include "utils/cmd.hh" # include "utils/gmime/gmime-compat.h" # ifndef DISABLE_PLUGINS # include "plugin/manager.hh" # endif # include "actions/action.hh" # include "actions/cmdaction.hh" # include "actions/tag_action.hh" # include "actions/toggle_action.hh" # include "actions/difftag_action.hh" # include "modes/mode.hh" # include "modes/reply_message.hh" # include "modes/forward_message.hh" # include "modes/raw_message.hh" # include "modes/thread_index/thread_index.hh" # include "theme.hh" using namespace std; using boost::property_tree::ptree; namespace Astroid { ThreadView::ThreadView (MainWindow * mw, bool _edit_mode) : Mode (mw) { // edit_mode = _edit_mode; wk_loaded = false; ready = false; /* home uri used for thread view - request will be relative this * non-existant (hopefully) directory. */ home_uri = ustring::compose ("%1/%2", astroid->standard_paths ().config_dir.c_str(), UstringUtils::random_alphanumeric (120)); /* WebKit: set up webkit web view */ /* create web context */ context = webkit_web_context_new_ephemeral (); /* set up this extension interface */ page_client = new PageClient (this); const ptree& config = astroid->config ("thread_view"); indent_messages = config.get ("indent_messages"); open_html_part_external = config.get ("open_html_part_external"); open_external_link = config.get ("open_external_link"); expand_flagged = config.get ("expand_flagged"); page_client->enable_gravatar = config.get("gravatar.enable"); unread_delay = config.get("mark_unread_delay"); /* one process for each webview so that a new and unique * instance of the webextension is created for each webview * and page */ webkit_web_context_set_process_model (context, WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES); websettings = WEBKIT_SETTINGS (webkit_settings_new_with_settings ( "enable-javascript", FALSE, "enable-java", FALSE, "enable-plugins", FALSE, "auto-load-images", TRUE, "enable-dns-prefetching", FALSE, "enable-fullscreen", FALSE, "enable-html5-database", FALSE, "enable-html5-local-storage", FALSE, "enable-mediasource", FALSE, "enable-offline-web-application-cache", FALSE, "enable-page-cache", FALSE, "enable-xss-auditor", TRUE, "media-playback-requires-user-gesture", TRUE, "zoom-text-only", TRUE, "enable-frame-flattening", TRUE, # if (DEBUG || DEBUG_WEBKIT) "enable-developer-extras", TRUE, # endif NULL)); webview = WEBKIT_WEB_VIEW ( g_object_new (WEBKIT_TYPE_WEB_VIEW, "web-context", context, "settings", websettings, NULL)); gtk_box_pack_start (GTK_BOX (this->gobj ()), GTK_WIDGET (webview), true, true, 0); g_signal_connect (webview, "load-changed", G_CALLBACK(ThreadView_on_load_changed), (gpointer) this ); add_events (Gdk::KEY_PRESS_MASK); g_signal_connect (webview, "decide-policy", G_CALLBACK(ThreadView_decide_policy), (gpointer) this); load_html (); register_keys (); show_all (); show_all_children (); # ifndef DISABLE_PLUGINS /* load plugins */ plugins = new PluginManager::ThreadViewExtension (this); # endif } ThreadView::~ThreadView () { // LOG (debug) << "tv: deconstruct."; g_object_unref (websettings); } void ThreadView::pre_close () { # ifndef DISABLE_PLUGINS plugins->deactivate (); delete plugins; # endif delete page_client; } /* navigation requests */ extern "C" gboolean ThreadView_decide_policy ( WebKitWebView * w, WebKitPolicyDecision * decision, WebKitPolicyDecisionType decision_type, gpointer user_data) { return ((ThreadView *) user_data)->decide_policy (w, decision, decision_type); } gboolean ThreadView::decide_policy ( WebKitWebView * /* w */, WebKitPolicyDecision * decision, WebKitPolicyDecisionType decision_type) { LOG (debug) << "tv: decide policy"; switch (decision_type) { case WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION: // navigate to {{{ { WebKitNavigationPolicyDecision * navigation_decision = WEBKIT_NAVIGATION_POLICY_DECISION (decision); WebKitNavigationAction * nav_action = webkit_navigation_policy_decision_get_navigation_action (navigation_decision); if (webkit_navigation_action_get_navigation_type (nav_action) == WEBKIT_NAVIGATION_TYPE_LINK_CLICKED) { webkit_policy_decision_ignore (decision); const gchar * uri_c = webkit_uri_request_get_uri ( webkit_navigation_action_get_request (nav_action)); ustring uri (uri_c); LOG (info) << "tv: navigating to: " << uri; ustring scheme = Glib::uri_parse_scheme (uri); if (scheme == "mailto") { uri = uri.substr (scheme.length ()+1, uri.length () - scheme.length()-1); UstringUtils::trim(uri); main_window->add_mode (new EditMessage (main_window, uri)); } else if (scheme == "id" || scheme == "mid" ) { main_window->add_mode (new ThreadIndex (main_window, uri)); } else if (scheme == "http" || scheme == "https" || scheme == "ftp") { open_link (uri); } else { LOG (error) << "tv: unknown uri scheme. not opening."; } } } // }}} break; case WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION: webkit_policy_decision_ignore (decision); break; default: webkit_policy_decision_ignore (decision); return true; // stop event } return true; // stop event } void ThreadView::open_link (ustring uri) { LOG (debug) << "tv: opening: " << uri; Glib::Threads::Thread::create ( sigc::bind ( sigc::mem_fun (this, &ThreadView::do_open_link), uri)); } void ThreadView::do_open_link (ustring uri) { vector args = { open_external_link.c_str(), uri.c_str () }; LOG (debug) << "tv: spawning: " << args[0] << ", " << args[1]; string stdout; string stderr; int exitcode; try { Glib::spawn_sync ("", args, Glib::SPAWN_DEFAULT | Glib::SPAWN_SEARCH_PATH, sigc::slot (), &stdout, &stderr, &exitcode ); } catch (Glib::SpawnError &ex) { LOG (error) << "tv: exception while opening uri: " << ex.what (); } ustring ustdout = ustring(stdout); for (ustring &l : VectorUtils::split_and_trim (ustdout, ustring("\n"))) { LOG (debug) << l; } ustring ustderr = ustring(stderr); for (ustring &l : VectorUtils::split_and_trim (ustderr, ustring("\n"))) { LOG (debug) << l; } if (exitcode != 0) { LOG (error) << "tv: open link exited with code: " << exitcode; } } /* end navigation requests  */ /* message loading */ /* * By the C++ standard this callback-setup is not necessarily safe, but it seems * to be for both g++ and clang++. * * http://stackoverflow.com/questions/2068022/in-c-is-it-safe-portable-to-use-static-member-function-pointer-for-c-api-call * * http://gtk.10911.n7.nabble.com/Using-g-signal-connect-in-class-td57137.html * * To be portable we have to use a free function declared extern "C". A * static member function is likely to work at least on gcc/g++, but not * necessarily elsewhere. * */ extern "C" bool ThreadView_on_load_changed ( WebKitWebView * w, WebKitLoadEvent load_event, gpointer user_data) { return ((ThreadView *) user_data)->on_load_changed (w, load_event); } bool ThreadView::on_load_changed ( WebKitWebView * /* w */, WebKitLoadEvent load_event) { LOG (debug) << "tv: on_load_changed: " << load_event; switch (load_event) { case WEBKIT_LOAD_FINISHED: LOG (debug) << "tv: load finished."; { /* render */ wk_loaded = true; // also called in page_client if (page_client->ready) on_ready_to_render (); } default: break; } return true; } void ThreadView::load_thread (refptr _thread) { LOG (info) << "tv: load thread: " << _thread->thread_id; thread = _thread; set_label (thread->thread_id); Db db (Db::DbMode::DATABASE_READ_ONLY); auto _mthread = refptr(new MessageThread (thread)); _mthread->load_messages (&db); if (unread_setup) unread_checker.disconnect (); unread_setup = false; // reset load_message_thread (_mthread); } void ThreadView::load_message_thread (refptr _mthread) { ready = false; mthread.clear (); mthread = _mthread; if (wk_loaded && page_client->ready) { page_client->clear_messages (); render_messages (); // resets the state } ustring s = mthread->get_subject(); set_label (s); } void ThreadView::on_message_changed ( Db * /* db */, Message * m, Message::MessageChangedEvent me) { if (ready) { if (me == Message::MessageChangedEvent::MESSAGE_TAGS_CHANGED) { if (m->in_notmuch && m->tid == thread->thread_id) { LOG (debug) << "tv: got message updated."; // Note that the message has already been refreshed internally refptr _m = refptr (m); _m->reference (); // since m is owned by caller page_client->update_message (_m, AstroidMessages::UpdateMessage_Type_Tags); page_client->update_state (); } } else if (me == Message::MessageChangedEvent::MESSAGE_REMOVED) { LOG (debug) << "tv: got message removed."; refptr _m = refptr (m); _m->reference (); // since m is owned by caller LOG (debug) << "tv: remove message: " << m->mid; state.erase (_m); /* check if message has been removed from messagethread, if not * message state will not be consistent between threads */ for (auto &mm : mthread->messages) { if (m->mid == mm->mid) { LOG (error) << "tv: removed message, but it is still present in the MessageThread."; throw runtime_error ("tv: removed message, but it is still present in the MessageThread: inconsitent state."); } } page_client->remove_message (_m); page_client->update_state (); } } } /* end message loading */ /* rendering */ /* general message adding and rendering */ void ThreadView::load_html () { LOG (info) << "render: loading html.."; wk_loaded = false; ready = false; webkit_web_view_load_html (webview, theme.thread_view_html.c_str (), home_uri.c_str ()); } void ThreadView::on_ready_to_render () { page_client->load (); /* render messages in case we were not ready when first requested */ page_client->clear_messages (); render_messages (); } void ThreadView::render_messages () { LOG (debug) << "render: html loaded, building messages.."; if (!wk_loaded) { LOG (error) << "tv: webkit not loaded."; return; } /* set message state vector */ state.clear (); focused_message.clear (); if (mthread) { for (auto &m : mthread->messages) { add_message (m); } page_client->update_state (); update_all_indent_states (); /* focus oldest unread message */ if (!edit_mode) { for (auto &m : mthread->messages_by_time ()) { if (m->has_tag ("unread")) { focused_message = m; break; } } } if (!focused_message) { LOG (debug) << "tv: no message focused, focusing newest message."; focused_message = *max_element ( mthread->messages.begin (), mthread->messages.end (), [](refptr &a, refptr &b) { return ( a->time < b->time ); }); } expand (focused_message); focus_message (focused_message); ready = true; emit_ready (); if (!edit_mode && !unread_setup) { unread_setup = true; if (unread_delay > 0) { Glib::signal_timeout ().connect ( sigc::mem_fun (this, &ThreadView::unread_check), std::max (80., (unread_delay * 1000.) / 2)); } else { unread_check (); } } } else { LOG (debug) << "tv: no message thread."; } } void ThreadView::update_all_indent_states () { page_client->update_indent_state (indent_messages); } void ThreadView::add_message (refptr m) { LOG (debug) << "tv: adding message: " << m->mid; state.insert (std::pair, MessageState> (m, MessageState ())); m->signal_message_changed ().connect ( sigc::mem_fun (this, &ThreadView::on_message_changed)); page_client->add_message (m); if (!edit_mode) { /* optionally hide / collapse the message */ if (!(m->has_tag("unread") || (expand_flagged && m->has_tag("flagged")))) { collapse (m); } else { expand (m); focused_message = m; } } else { /* edit mode */ focused_message = m; } { if (!edit_mode && any_of (Db::draft_tags.begin (), Db::draft_tags.end (), [&](ustring t) { return m->has_tag (t); })) { /* set warning */ set_warning (m, "This message is a draft, edit it with E or delete with D."); } } } /* info and warning */ void ThreadView::set_warning (refptr m, ustring txt) { LOG (debug) << "tv: set warning: " << txt; page_client->set_warning (m, txt); } void ThreadView::hide_warning (refptr m) { page_client->hide_warning (m); } void ThreadView::set_info (refptr m, ustring txt) { LOG (debug) << "tv: set info: " << txt; page_client->set_info (m, txt); } void ThreadView::hide_info (refptr m) { page_client->hide_info (m); } /* end info and warning */ /* end rendering */ bool ThreadView::on_key_press_event (GdkEventKey * event) { if (!ready.load ()) return true; else return Mode::on_key_press_event (event); } void ThreadView::register_keys () { // {{{ keys.title = "Thread View"; # ifdef DEBUG_WEBKIT keys.register_key ("C-r", "thread_view.reload", "Reload everything", [&] (Key) { LOG (debug) << "tv: reloading.."; theme.load (true); load_message_thread (mthread); return true; }); keys.register_key ("C-I", "thread_view.show_web_inspector", "Show web inspector", [&] (Key) { LOG (debug) << "tv show web inspector"; /* Show the inspector */ WebKitWebInspector *inspector = webkit_web_view_get_inspector (WEBKIT_WEB_VIEW(webview)); webkit_web_inspector_show (WEBKIT_WEB_INSPECTOR(inspector)); return true; }); # endif keys.register_key ("j", "thread_view.down", "Scroll down or move focus to next element", [&] (Key) { page_client->focus_next_element (false); return true; }); keys.register_key ("C-j", "thread_view.next_element", "Move focus to next element", [&] (Key) { /* move focus to next element and scroll to it if necessary */ page_client->focus_next_element (true); return true; }); keys.register_key ("J", { Key (GDK_KEY_Down) }, "thread_view.scroll_down", "Scroll down", [&] (Key) { page_client->scroll_down_big (); return true; }); keys.register_key ("C-d", { Key (true, false, (guint) GDK_KEY_Down), Key (GDK_KEY_Page_Down) }, "thread_view.page_down", "Page down", [&] (Key) { page_client->scroll_down_page (); return true; }); keys.register_key ("k", "thread_view.up", "Scroll up or move focus to previous element", [&] (Key) { page_client->focus_previous_element (false); return true; }); keys.register_key ("C-k", "thread_view.previous_element", "Move focus to previous element", [&] (Key) { page_client->focus_previous_element (true); return true; }); keys.register_key ("K", { Key (GDK_KEY_Up) }, "thread_view.scroll_up", "Scroll up", [&] (Key) { page_client->scroll_up_big (); return true; }); keys.register_key ("C-u", { Key (true, false, (guint) GDK_KEY_Up), Key (GDK_KEY_Page_Up) }, "thread_view.page_up", "Page up", [&] (Key) { page_client->scroll_up_page (); return true; }); keys.register_key ("1", { Key (GDK_KEY_Home) }, "thread_view.home", "Scroll home", [&] (Key) { page_client->scroll_to_top (); return true; }); keys.register_key ("0", { Key (GDK_KEY_End) }, "thread_view.end", "Scroll to end", [&] (Key) { page_client->scroll_to_bottom (); return true; }); keys.register_key (Key (GDK_KEY_Return), { Key (GDK_KEY_KP_Enter), Key (true, false, (guint) GDK_KEY_space) }, "thread_view.activate", "Open/expand/activate focused element", [&] (Key) { return element_action (EEnter); }); keys.register_key ("s", "thread_view.save", "Save attachment or message", [&] (Key) { return element_action (ESave); }); keys.register_key ("d", "thread_view.delete_attachment", "Delete attachment (if editing)", [&] (Key) { if (edit_mode) { /* del attachment */ return element_action (EDelete); } return false; }); keys.register_key ("e", "thread_view.expand", "Toggle expand", [&] (Key) { if (edit_mode) return false; toggle (focused_message); return true; }); keys.register_key ("C-e", "thread_view.toggle_expand_all", "Toggle expand on all messages", [&] (Key) { /* toggle hidden / shown status on all messages */ if (edit_mode) return false; if (all_of (mthread->messages.begin(), mthread->messages.end (), [&](refptr m) { return !state[m].expanded; } )) { /* all are hidden */ for (auto m : mthread->messages) { expand (m); } } else { /* some are shown */ for (auto m : mthread->messages) { collapse (m); } } return true; }); keys.register_key ("t", "thread_view.mark", "Mark or unmark message", [&] (Key) { if (!edit_mode) { state[focused_message].marked = !(state[focused_message].marked); page_client->set_marked_state (focused_message, state[focused_message].marked); return true; } return false; }); keys.register_key ("T", "thread_view.toggle_mark_all", "Toggle mark on all messages", [&] (Key) { if (!edit_mode) { bool any = false; bool all = true; for (auto &s : state) { if (s.second.marked) { any = true; } else { all = false; } if (any && !all) break; } for (auto &s : state) { if (any && !all) { s.second.marked = true; } else { s.second.marked = !s.second.marked; } page_client->set_marked_state (s.first, s.second.marked); } return true; } return false; }); keys.register_key ("C-i", "thread_view.show_remote_images", "Show remote images (warning: approves all requests to remote content for this thread!)", [&] (Key) { /* we only allow remote images / resources when * no encrypted parts are present */ if (!astroid->config("thread_view").get ("allow_remote_when_encrypted")) { for (auto &m : mthread->messages) { for (auto &c : m->all_parts()) { if (c->isencrypted) { LOG (error) << "tv: remote resources are not allowed in encrypted messages. check your configuration if you wish to change this."; return true; } } } } LOG (debug) << "tv: show remote images."; page_client->allow_remote_resources (); return true; }); keys.register_key ("C-+", "thread_view.zoom_in", "Zoom in", [&] (Key) { webkit_web_view_set_zoom_level (webview, webkit_web_view_get_zoom_level (webview) + .1); return true; }); keys.register_key ("C-minus", "thread_view.zoom_out", "Zoom out", [&] (Key) { webkit_web_view_set_zoom_level (webview, std::max ((webkit_web_view_get_zoom_level (webview) - .1), 0.0)); return true; }); keys.register_key ("S", "thread_view.save_all_attachments", "Save all attachments", [&] (Key) { save_all_attachments (); return true; }); keys.register_key ("n", "thread_view.next_message", "Focus next message", [&] (Key) { page_client->focus_next_message (); return true; }); keys.register_key ("C-n", "thread_view.next_message_expand", "Focus next message (and expand if necessary)", [&] (Key) { if (state[focused_message].scroll_expanded) { collapse (focused_message); state[focused_message].scroll_expanded = false; } page_client->focus_next_message (); state[focused_message].scroll_expanded = !expand (focused_message); return true; }); keys.register_key ("p", "thread_view.previous_message", "Focus previous message", [&] (Key) { page_client->focus_previous_message (true); return true; }); keys.register_key ("C-p", "thread_view.previous_message_expand", "Focus previous message (and expand if necessary)", [&] (Key) { if (state[focused_message].scroll_expanded) { collapse (focused_message); state[focused_message].scroll_expanded = false; } page_client->focus_previous_message (false); state[focused_message].scroll_expanded = !expand (focused_message); return true; }); keys.register_key (Key (GDK_KEY_Tab), "thread_view.next_unread", "Focus the next unread message", [&] (Key) { bool foundme = false; for (auto &m : mthread->messages) { if (foundme && m->has_tag ("unread")) { focus_message (m); break; } if (m == focused_message) { foundme = true; } } return true; }); keys.register_key (Key (false, false, (guint) GDK_KEY_ISO_Left_Tab), "thread_view.previous_unread", "Focus the previous unread message", [&] (Key) { bool foundme = false; for (auto mi = mthread->messages.rbegin (); mi != mthread->messages.rend (); mi++) { if (foundme && (*mi)->has_tag ("unread")) { focus_message (*mi); break; } if (*mi == focused_message) { foundme = true; } } return true; }); keys.register_key ("c", "thread_view.compose_to_sender", "Compose a new message to the sender of the message (or all recipients if sender is you)", [&] (Key) { if (!edit_mode) { Address sender = focused_message->sender; Address from; AddressList to, cc, bcc; /* Send to original sender if message is not from own account, otherwise use all recipients as in the original */ if (astroid->accounts->is_me (sender)) { from = sender; to = AddressList(focused_message->to ()); cc = AddressList(focused_message->cc ()); bcc = AddressList(focused_message->bcc ()); } else { /* Not from me, just use orginal sender */ to += sender; /* find the 'first' me */ AddressList tos = focused_message->all_to_from (); for (Address f : tos.addresses) { if (astroid->accounts->is_me (f)) { from = f; break; } } } main_window->add_mode (new EditMessage (main_window, to.str (), from.full_address (), cc.str(), bcc.str())); } return true; }); keys.register_key ("r", "thread_view.reply", "Reply to current message", [&] (Key) { /* reply to currently focused message */ if (!edit_mode) { main_window->add_mode (new ReplyMessage (main_window, focused_message)); return true; } return false; }); keys.register_key ("G", "thread_view.reply_all", "Reply all to current message", [&] (Key) { /* reply to currently focused message */ if (!edit_mode) { main_window->add_mode (new ReplyMessage (main_window, focused_message, ReplyMessage::ReplyMode::Rep_All)); return true; } return false; }); keys.register_key ("R", "thread_view.reply_sender", "Reply to sender of current message", [&] (Key) { /* reply to currently focused message */ if (!edit_mode) { main_window->add_mode (new ReplyMessage (main_window, focused_message, ReplyMessage::ReplyMode::Rep_Sender)); return true; } return false; }); keys.register_key ("M", "thread_view.reply_mailinglist", "Reply to mailinglist of current message", [&] (Key) { /* reply to currently focused message */ if (!edit_mode) { main_window->add_mode (new ReplyMessage (main_window, focused_message, ReplyMessage::ReplyMode::Rep_MailingList)); return true; } return false; }); keys.register_key ("f", "thread_view.forward", "Forward current message", [&] (Key) { /* forward currently focused message */ if (!edit_mode) { main_window->add_mode (new ForwardMessage (main_window, focused_message, ForwardMessage::FwdDisposition::FwdDefault)); return true; } return false; }); keys.register_key (UnboundKey (), "thread_view.forward_inline", "Forward current message inlined", [&] (Key) { /* forward currently focused message */ if (!edit_mode) { main_window->add_mode (new ForwardMessage (main_window, focused_message, ForwardMessage::FwdDisposition::FwdInline)); return true; } return false; }); keys.register_key (UnboundKey (), "thread_view.forward_attached", "Forward current message as attachment", [&] (Key) { /* forward currently focused message */ if (!edit_mode) { main_window->add_mode (new ForwardMessage (main_window, focused_message, ForwardMessage::FwdDisposition::FwdAttach)); return true; } return false; }); keys.register_key ("C-F", "thread_view.flat", "Toggle flat or indented view of messages", [&] (Key) { indent_messages = !indent_messages; update_all_indent_states (); return true; }); keys.register_key ("V", "thread_view.view_raw", "View raw source for current message", [&] (Key) { /* view raw source of currently focused message */ main_window->add_mode (new RawMessage (main_window, focused_message)); return true; }); keys.register_key ("E", "thread_view.edit_draft", "Edit currently focused message as new or draft", [&] (Key) { /* edit currently focused message as new or draft */ if (!edit_mode) { main_window->add_mode (new EditMessage (main_window, focused_message)); return true; } return false; }); keys.register_key ("D", "thread_view.delete_draft", "Delete currently focused draft", [&] (Key) { if (!edit_mode) { if (any_of (Db::draft_tags.begin (), Db::draft_tags.end (), [&](ustring t) { return focused_message->has_tag (t); })) { ask_yes_no ("Do you want to delete this draft? (any changes will be lost)", [&](bool yes) { if (yes) { EditMessage::delete_draft (focused_message); close (); } }); return true; } } return false; }); keys.register_run ("thread_view.run", [&] (Key, ustring cmd, ustring undo_cmd) { if (focused_message) { cmd = ustring::compose (cmd, focused_message->tid, focused_message->mid); undo_cmd = ustring::compose (undo_cmd, focused_message->tid, focused_message->mid); astroid->actions->doit (refptr (new CmdAction ( Cmd ("thread_view.run", cmd, undo_cmd), focused_message->tid, focused_message->mid))); } return true; }); multi_keys.register_key ("t", "thread_view.multi.toggle", "Toggle marked", [&] (Key) { for (auto &ms : state) { refptr m = ms.first; MessageState s = ms.second; if (s.marked) { state[m].marked = false; page_client->set_marked_state (m, state[m].marked); } } return true; }); multi_keys.register_key ("+", "thread_view.multi.tag", "Tag", [&] (Key) { /* TODO: Move this into a function in a similar way as multi_key_handler * for threadindex */ /* ask for tags */ main_window->enable_command (CommandBar::CommandMode::DiffTag, "", [&](ustring tgs) { LOG (debug) << "tv: got difftags: " << tgs; vector> messages; for (auto &ms : state) { refptr m = ms.first; MessageState s = ms.second; if (s.marked) { messages.push_back (m->nmmsg); } } refptr ma = refptr (DiffTagAction::create (messages, tgs)); if (ma) { main_window->actions->doit (ma); } }); return true; }); multi_keys.register_key ("C-y", "thread_view.multi.yank_mids", "Yank message id's", [&] (Key) { ustring ids = ""; for (auto &m : mthread->messages) { MessageState s = state[m]; if (s.marked) { ids += m->mid + ", "; } } ids = ids.substr (0, ids.length () - 2); auto cp = Gtk::Clipboard::get (astroid->clipboard_target); cp->set_text (ids); LOG (info) << "tv: " << ids << " copied to clipboard."; return true; }); multi_keys.register_key ("y", "thread_view.multi.yank", "Yank", [&] (Key) { ustring y = ""; for (auto &m : mthread->messages) { MessageState s = state[m]; if (s.marked) { y += m->viewable_text (false, true); y += "\n"; } } /* remove last newline */ y = y.substr (0, y.size () - 1); auto cp = Gtk::Clipboard::get (astroid->clipboard_target); cp->set_text (y); LOG (info) << "tv: yanked marked messages to clipobard."; return true; }); multi_keys.register_key ("Y", "thread_view.multi.yank_raw", "Yank raw", [&] (Key) { /* tries to export the messages as an mbox file */ ustring y = ""; for (auto &m : mthread->messages) { MessageState s = state[m]; if (s.marked) { auto d = m->raw_contents (); auto cnv = UstringUtils::bytearray_to_ustring (d); if (cnv.first) { y += ustring::compose ("From %1 %2", Address(m->sender).email(), m->date_asctime ()); // asctime adds a \n y += UstringUtils::unixify (cnv.second); y += "\n"; } } } auto cp = Gtk::Clipboard::get (astroid->clipboard_target); cp->set_text (y); LOG (info) << "tv: yanked raw marked messages to clipobard."; return true; }); multi_keys.register_key ("s", "thread_view.multi.save", "Save marked", [&] (Key) { vector> tosave; for (auto &ms : state) { refptr m = ms.first; MessageState s = ms.second; if (s.marked) { tosave.push_back (m); } } if (!tosave.empty()) { LOG (debug) << "tv: saving messages: " << tosave.size(); Gtk::FileChooserDialog dialog ("Save messages to folder..", Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER); dialog.add_button ("_Cancel", Gtk::RESPONSE_CANCEL); dialog.add_button ("_Select", Gtk::RESPONSE_OK); dialog.set_current_folder (astroid->runtime_paths ().save_dir.c_str ()); int result = dialog.run (); switch (result) { case (Gtk::RESPONSE_OK): { string dir = dialog.get_filename (); LOG (info) << "tv: saving messages to: " << dir; astroid->runtime_paths ().save_dir = bfs::path (dialog.get_current_folder ()); for (refptr m : tosave) { m->save_to (dir); } break; } default: { LOG (debug) << "tv: save: cancelled."; } } } return true; }); multi_keys.register_key ("p", "thread_view.multi.print", "Print marked messages", [&] (Key) { vector> toprint; for (auto &m : mthread->messages) { MessageState s = state[m]; if (s.marked) { toprint.push_back (m); } } # if 0 GError * err = NULL; WebKitDOMDocument * d = webkit_web_view_get_dom_document (webview); # endif for (auto &m : toprint) { // TODO: [JS] [REIMPLEMENT] # if 0 ustring mid = "message_" + m->mid; WebKitDOMElement * e = webkit_dom_document_get_element_by_id (d, mid.c_str()); WebKitDOMDOMTokenList * class_list = webkit_dom_element_get_class_list (WEBKIT_DOM_ELEMENT(e)); webkit_dom_dom_token_list_add (class_list, "print", (err = NULL, &err)); # endif /* expand */ state[m].print_expanded = !expand (m); } bool indented = indent_messages; if (indent_messages) { indent_messages = false; update_all_indent_states (); } /* open print window */ // TODO: [W2] Fix print # if 0 WebKitWebFrame * frame = webkit_web_view_get_main_frame (webview); webkit_web_frame_print (frame); # endif if (indented) { indent_messages = true; update_all_indent_states (); } for (auto &m : toprint) { if (state[m].print_expanded) { collapse (m); state[m].print_expanded = false; } # if 0 ustring mid = "message_" + m->mid; WebKitDOMElement * e = webkit_dom_document_get_element_by_id (d, mid.c_str()); WebKitDOMDOMTokenList * class_list = webkit_dom_element_get_class_list (WEBKIT_DOM_ELEMENT(e)); webkit_dom_dom_token_list_remove (class_list, "print", (err = NULL, &err)); g_object_unref (class_list); g_object_unref (e); # endif } # if 0 g_object_unref (d); # endif return true; }); keys.register_key (Key (GDK_KEY_semicolon), "thread_view.multi", "Apply action to marked messages", [&] (Key k) { if (any_of (state.begin(), state.end(), [](std::pair, ThreadView::MessageState> ms) { return ms.second.marked; }) ) { multi_key (multi_keys, k); } return true; }); keys.register_key ("N", "thread_view.toggle_unread", "Toggle the unread tag on the message", [&] (Key) { if (!edit_mode && focused_message) { main_window->actions->doit (refptr(new ToggleAction (refptr(new NotmuchMessage(focused_message)), "unread"))); state[focused_message].unread_checked = true; } return true; }); keys.register_key ("*", "thread_view.flag", "Toggle the 'flagged' tag on the message", [&] (Key) { if (!edit_mode && focused_message) { main_window->actions->doit (refptr(new ToggleAction (refptr(new NotmuchMessage(focused_message)), "flagged"))); } return true; }); keys.register_key ("a", "thread_view.archive_thread", "Toggle 'inbox' tag on the whole thread", [&] (Key) { if (!edit_mode && focused_message) { if (thread) { main_window->actions->doit (refptr(new ToggleAction(thread, "inbox"))); } } return true; }); keys.register_key ("C-P", "thread_view.print", "Print focused message", [&] (Key) { // TODO: [W2] # if 0 GError * err = NULL; WebKitDOMDocument * d = webkit_web_view_get_dom_document (webview); ustring mid = "message_" + focused_message->mid; WebKitDOMElement * e = webkit_dom_document_get_element_by_id (d, mid.c_str()); WebKitDOMDOMTokenList * class_list = webkit_dom_element_get_class_list (WEBKIT_DOM_ELEMENT(e)); webkit_dom_dom_token_list_add (class_list, "print", (err = NULL, &err)); /* expand */ bool wasexpanded = toggle_hidden (focused_message, ToggleShow); bool indented = indent_messages; if (indent_messages) { indent_messages = false; update_all_indent_states (); } /* open print window */ WebKitWebFrame * frame = webkit_web_view_get_main_frame (webview); webkit_web_frame_print (frame); if (indented) { indent_messages = true; update_all_indent_states (); } if (!wasexpanded) { toggle_hidden (focused_message, ToggleHide); } webkit_dom_dom_token_list_remove (class_list, "print", (err = NULL, &err)); g_object_unref (class_list); g_object_unref (e); g_object_unref (d); # endif return true; }); keys.register_key ("+", "thread_view.tag_message", "Tag message", [&] (Key) { if (edit_mode) { return false; } ustring tag_list = VectorUtils::concat_tags (focused_message->tags) + " "; main_window->enable_command (CommandBar::CommandMode::Tag, "Change tags for message:", tag_list, [&](ustring tgs) { LOG (debug) << "ti: got tags: " << tgs; vector tags = VectorUtils::split_and_trim (tgs, ",| "); /* remove empty */ tags.erase (std::remove (tags.begin (), tags.end (), ""), tags.end ()); sort (tags.begin (), tags.end ()); sort (focused_message->tags.begin (), focused_message->tags.end ()); vector rem; vector add; /* find tags that have been removed */ set_difference (focused_message->tags.begin (), focused_message->tags.end (), tags.begin (), tags.end (), std::back_inserter (rem)); /* find tags that should be added */ set_difference (tags.begin (), tags.end (), focused_message->tags.begin (), focused_message->tags.end (), std::back_inserter (add)); if (add.size () == 0 && rem.size () == 0) { LOG (debug) << "ti: nothing to do."; } else { main_window->actions->doit (refptr(new TagAction (refptr(new NotmuchMessage(focused_message)), add, rem))); } /* make sure that the unread tag is not modified after manually editing tags */ state[focused_message].unread_checked = true; }); return true; }); keys.register_key ("C-f", "thread_view.search.search_or_next", "Search for text or go to next match", std::bind (&ThreadView::search, this, std::placeholders::_1, true)); keys.register_key (UnboundKey (), "thread_view.search.search", "Search for text", std::bind (&ThreadView::search, this, std::placeholders::_1, false)); keys.register_key (GDK_KEY_Escape, "thread_view.search.cancel", "Cancel current search", [&] (Key) { reset_search (); return true; }); keys.register_key (UnboundKey (), "thread_view.search.next", "Go to next match", [&] (Key) { next_search_match (); return true; }); keys.register_key ("P", "thread_view.search.previous", "Go to previous match", [&] (Key) { prev_search_match (); return true; }); keys.register_key ("y", "thread_view.yank", "Yank current element or message text to clipboard", [&] (Key) { element_action (EYank); return true; }); keys.register_key ("Y", "thread_view.yank_raw", "Yank raw content of current element or message to clipboard", [&] (Key) { element_action (EYankRaw); return true; }); keys.register_key ("C-y", "thread_view.yank_mid", "Yank the Message-ID of the focused message to clipboard", [&] (Key) { auto cp = Gtk::Clipboard::get (astroid->clipboard_target); cp->set_text (focused_message->mid); LOG (info) << "tv: " << focused_message->mid << " copied to clipboard."; return true; }); keys.register_key (Key (":"), "thread_view.multi_next_thread", "Open next after..", [&] (Key k) { multi_key (next_multi, k); return true; }); next_multi.title = "Thread"; next_multi.register_key (Key ("a"), "thread_view.multi_next_thread.archive", "Archive, goto next", [&] (Key) { keys.handle ("thread_view.archive_thread"); emit_index_action (IA_Next); return true; }); next_multi.register_key (Key ("A"), "thread_view.multi_next_thread.archive_next_unread_thread", "Archive, goto next unread", [&] (Key) { keys.handle ("thread_view.archive_thread"); emit_index_action (IA_NextUnread); return true; }); next_multi.register_key (Key ("x"), "thread_view.multi_next_thread.close", "Archive, close", [&] (Key) { keys.handle ("thread_view.archive_thread"); close (); return true; }); next_multi.register_key (Key ("j"), "thread_view.multi_next_thread.next_thread", "Goto next", [&] (Key) { emit_index_action (IA_Next); return true; }); next_multi.register_key (Key ("k"), "thread_view.multi_next_thread.previous_thread", "Goto previous", [&] (Key) { emit_index_action (IA_Previous); return true; }); next_multi.register_key (Key (GDK_KEY_Tab), "thread_view.multi_next_thread.next_unread", "Goto next unread", [&] (Key) { emit_index_action (IA_NextUnread); return true; }); next_multi.register_key (Key (false, false, (guint) GDK_KEY_ISO_Left_Tab), "thread_view.multi_next_thread.previous_unread", "Goto previous unread", [&] (Key) { emit_index_action (IA_PreviousUnread); return true; }); /* make aliases in main namespace */ keys.register_key (UnboundKey (), "thread_view.archive_then_next", "Alias for thread_view.multi_next_thread.archive", [&] (Key) { return next_multi.handle ("thread_view.multi_next_thread.archive"); }); keys.register_key (UnboundKey (), "thread_view.archive_then_next_unread", "Alias for thread_view.multi_next_thread.archive_next_unread", [&] (Key) { return next_multi.handle ("thread_view.multi_next_thread.archive_next_unread_thread"); }); keys.register_key (UnboundKey (), "thread_view.archive_and_close", "Alias for thread_view.multi_next_thread.close", [&] (Key) { return next_multi.handle ("thread_view.multi_next_thread.close"); }); keys.register_key (UnboundKey (), "thread_view.next_thread", "Alias for thread_view.multi_next_thread.next_thread", [&] (Key) { return next_multi.handle ("thread_view.multi_next_thread.next_thread"); }); keys.register_key (UnboundKey (), "thread_view.previous_thread", "Alias for thread_view.multi_next_thread.previous_thread", [&] (Key) { return next_multi.handle ("thread_view.multi_next_thread.previous_thread"); }); keys.register_key (UnboundKey (), "thread_view.next_unread_thread", "Alias for thread_view.multi_next_thread.next_unread", [&] (Key) { return next_multi.handle ("thread_view.multi_next_thread.next_unread"); }); keys.register_key (UnboundKey (), "thread_view.previous_unread_thread", "Alias for thread_view.multi_next_thread.previous_unread", [&] (Key) { return next_multi.handle ("thread_view.multi_next_thread.previous_unread"); }); } // }}} bool ThreadView::element_action (ElementAction a) { // {{{ LOG (debug) << "tv: activate item."; if (!(focused_message)) { LOG (error) << "tv: no message has focus yet."; return true; } if (!edit_mode && !state[focused_message].expanded) { if (a == EEnter) { toggle (focused_message); } else if (a == ESave) { /* save message to */ focused_message->save (); } else if (a == EYankRaw) { auto cp = Gtk::Clipboard::get (astroid->clipboard_target); ustring t = ""; auto d = focused_message->raw_contents (); auto cnv = UstringUtils::bytearray_to_ustring (d); if (cnv.first) { t = UstringUtils::unixify (cnv.second); } cp->set_text (t); } else if (a == EYank) { auto cp = Gtk::Clipboard::get (astroid->clipboard_target); ustring t; t = focused_message->viewable_text (false, true); cp->set_text (t); } } else { if (state[focused_message].current_element == 0) { if (!edit_mode && a == EEnter) { /* nothing selected, closing message */ toggle (focused_message); } else if (a == ESave) { /* save message to */ focused_message->save (); } else if (a == EYankRaw) { auto cp = Gtk::Clipboard::get (astroid->clipboard_target); ustring t = ""; auto d = focused_message->raw_contents (); auto cnv = UstringUtils::bytearray_to_ustring (d); if (cnv.first) { t = UstringUtils::unixify (cnv.second); } cp->set_text (t); } else if (a == EYank) { auto cp = Gtk::Clipboard::get (astroid->clipboard_target); ustring t; t = focused_message->viewable_text (false, true); cp->set_text (t); } } else { if (a == EYankRaw) { refptr c = focused_message->get_chunk_by_id ( state[focused_message].elements[state[focused_message].current_element].id); auto cp = Gtk::Clipboard::get (astroid->clipboard_target); ustring t = ""; auto d = c->contents (); auto cnv = UstringUtils::bytearray_to_ustring (d); if (cnv.first) { t = cnv.second; } cp->set_text (t); } else if (a == EYank) { refptr c = focused_message->get_chunk_by_id ( state[focused_message].elements[state[focused_message].current_element].id); auto cp = Gtk::Clipboard::get (astroid->clipboard_target); ustring t; if (c->viewable) { t = c->viewable_text (false, false); } else { LOG (error) << "tv: cannot yank text of non-viewable part"; } cp->set_text (t); } else { switch (state[focused_message].elements[state[focused_message].current_element].type) { case MessageState::ElementType::Attachment: { if (a == EEnter) { /* open attachment */ refptr c = focused_message->get_chunk_by_id ( state[focused_message].elements[state[focused_message].current_element].id); if (c) { c->open (); } else { LOG (error) << "tv: could not find chunk for element."; } } else if (a == ESave) { /* save attachment */ refptr c = focused_message->get_chunk_by_id ( state[focused_message].elements[state[focused_message].current_element].id); if (c) { c->save (); } else { LOG (error) << "tv: could not find chunk for element."; } } } break; case MessageState::ElementType::Part: { if (a == EEnter) { /* open part */ refptr c = focused_message->get_chunk_by_id ( state[focused_message].elements[state[focused_message].current_element].id); if (c) { if (c->get_content_type() != "text/plain" && open_html_part_external) { c->open (); } else { /* show part internally */ page_client->toggle_part (focused_message, c, state[focused_message].elements[state[focused_message].current_element]); } } else { LOG (error) << "tv: could not find chunk for element."; } } else if (a == ESave) { /* save part */ refptr c = focused_message->get_chunk_by_id ( state[focused_message].elements[state[focused_message].current_element].id); if (c) { c->save (); } else { LOG (error) << "tv: could not find chunk for element."; } } } break; case MessageState::ElementType::MimeMessage: { if (a == EEnter) { /* open part */ refptr c = focused_message->get_chunk_by_id ( state[focused_message].elements[state[focused_message].current_element].id); refptr mt = refptr (new MessageThread ()); mt->add_message (c); ThreadView * tv = new ThreadView (main_window); tv->load_message_thread (mt); main_window->add_mode (tv); } else if (a == ESave) { /* save part */ refptr c = focused_message->get_chunk_by_id ( state[focused_message].elements[state[focused_message].current_element].id); if (c) { c->save (); } else { LOG (error) << "tv: could not find chunk for element."; } } } break; default: break; } } } } if (state[focused_message].current_element > 0) { emit_element_action (state[focused_message].current_element, a); } return true; } // }}} bool ThreadView::unread_check () { if (!ready) { unread_setup = false; return false; // disconnect } if (!edit_mode && focused_message && focused_message->in_notmuch) { if (!state[focused_message].unread_checked && state[focused_message].expanded) { chrono::duration elapsed = chrono::steady_clock::now() - focus_time; if (unread_delay == 0.0 || elapsed.count () > unread_delay) { if (focused_message->has_tag ("unread")) { main_window->actions->doit (refptr(new TagAction (refptr(new NotmuchMessage(focused_message)), {}, { "unread" })), false); state[focused_message].unread_checked = true; } } } } return true; } void ThreadView::focus_element (refptr m, unsigned int e) { if (m) { LOG (debug) << "tv: focus message: " << m->safe_mid () << ", element: " << e; page_client->focus_element (m, e); } } void ThreadView::focus_message (refptr m) { focus_element (m, 0); } /* end focus handeling */ /* message expanding and collapsing */ bool ThreadView::expand (refptr m) { /* returns true if the message was expanded in the first place */ bool wasexpanded = state[m].expanded; state[m].expanded = true; page_client->set_hidden_state (m, false); if (!wasexpanded) { /* if the message was unexpanded, it would not have been marked as read */ if (unread_delay == 0.0) unread_check (); } return wasexpanded; } bool ThreadView::collapse (refptr m) { /* returns true if the message was expanded in the first place */ bool wasexpanded = state[m].expanded; page_client->set_hidden_state (m, true); state[m].expanded = false; return wasexpanded; } bool ThreadView::toggle (refptr m) { /* returns true if the message was expanded in the first place */ if (state[m].expanded) return collapse (m); else return expand (m); } /* end message expanding and collapsing */ void ThreadView::save_all_attachments () { // /* save all attachments of current focused message */ LOG (info) << "tv: save all attachments.."; if (!focused_message) { LOG (warn) << "tv: no message focused!"; return; } auto attachments = focused_message->attachments (); if (attachments.empty ()) { LOG (warn) << "tv: this message has no attachments to save."; return; } Gtk::FileChooserDialog dialog ("Save attachments to folder..", Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER); dialog.add_button ("_Cancel", Gtk::RESPONSE_CANCEL); dialog.add_button ("_Select", Gtk::RESPONSE_OK); dialog.set_current_folder (astroid->runtime_paths ().save_dir.c_str ()); int result = dialog.run (); switch (result) { case (Gtk::RESPONSE_OK): { string dir = dialog.get_filename (); LOG (info) << "tv: saving attachments to: " << dir; astroid->runtime_paths ().save_dir = bfs::path (dialog.get_current_folder ()); /* TODO: check if the file exists and ask to overwrite. currently * we are failing silently (except an error message in the log) */ for (refptr a : attachments) { a->save_to (dir); } break; } default: { LOG (debug) << "tv: save: cancelled."; } } } // /* general mode stuff */ void ThreadView::grab_focus () { //LOG (debug) << "tv: grab focus"; gtk_widget_grab_focus (GTK_WIDGET (webview)); } void ThreadView::grab_modal () { add_modal_grab (); grab_focus (); //gtk_grab_add (GTK_WIDGET (webview)); //gtk_widget_grab_focus (GTK_WIDGET (webview)); } void ThreadView::release_modal () { remove_modal_grab (); //gtk_grab_remove (GTK_WIDGET (webview)); } /* end general mode stuff */ /* signals */ ThreadView::type_signal_ready ThreadView::signal_ready () { return m_signal_ready; } void ThreadView::emit_ready () { LOG (info) << "tv: ready emitted."; ready = true; m_signal_ready.emit (); } ThreadView::type_element_action ThreadView::signal_element_action () { return m_element_action; } void ThreadView::emit_element_action (unsigned int element, ElementAction action) { LOG (debug) << "tv: element action emitted: " << element << ", action: enter"; m_element_action.emit (element, action); } ThreadView::type_index_action ThreadView::signal_index_action () { return m_index_action; } bool ThreadView::emit_index_action (IndexAction action) { LOG (debug) << "tv: index action: " << action; return m_index_action.emit (this, action); } /* end signals */ /* MessageState  */ ThreadView::MessageState::MessageState () { elements.push_back (Element (Empty, -1)); current_element = 0; } ThreadView::MessageState::Element::Element (ThreadView::MessageState::ElementType t, int i) { type = t; id = i; } bool ThreadView::MessageState::Element::operator== ( const Element & other ) const { return other.id == id; } ustring ThreadView::MessageState::Element::element_id () { return ustring::compose("%1", id); } ThreadView::MessageState::Element * ThreadView::MessageState::get_current_element () { if (current_element == 0) { return NULL; } else { return &(elements[current_element]); } } ThreadView::MessageState::Element * ThreadView::MessageState::get_element_by_id (int id) { for (auto e : elements) { LOG (debug) << "e: " << e.id; } auto e = std::find_if ( elements.begin (), elements .end (), [&] (auto e) { return e.id == id; } ); if (e == elements.end ()) { LOG (error) << "tv: e == NULL"; } return (e != elements.end() ? &(*e) : NULL); } /* end MessageState  */ /* Searching */ bool ThreadView::search (Key, bool next) { if (in_search && next) { next_search_match (); return true; } reset_search (); main_window->enable_command (CommandBar::CommandMode::SearchText, "", sigc::mem_fun (this, &ThreadView::on_search)); return true; } void ThreadView::reset_search () { /* reset */ if (in_search) { /* reset search expanded state */ for (auto m : mthread->messages) { state[m].search_expanded = false; } } in_search = false; search_q = ""; WebKitFindController * f = webkit_web_view_get_find_controller (webview); webkit_find_controller_search_finish (f); } void ThreadView::on_search (ustring k) { if (!k.empty ()) { /* expand all messages, these should be closed - except the focused one * when a search is cancelled */ for (auto m : mthread->messages) { state[m].search_expanded = !expand (m); } LOG (debug) << "tv: searching for: " << k; WebKitFindController * f = webkit_web_view_get_find_controller (webview); webkit_find_controller_search (f, k.c_str (), WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE | WEBKIT_FIND_OPTIONS_WRAP_AROUND, 0); in_search = true; page_client->update_focus_to_view (); } } void ThreadView::next_search_match () { if (!in_search) return; /* there does not seem to be a way to figure out which message currently * contains the selected matched text, but when there is a scroll event * the match is centered. */ WebKitFindController * f = webkit_web_view_get_find_controller (webview); webkit_find_controller_search_next (f); page_client->update_focus_to_view (); } void ThreadView::prev_search_match () { if (!in_search) return; WebKitFindController * f = webkit_web_view_get_find_controller (webview); webkit_find_controller_search_previous (f); page_client->update_focus_to_view (); } /*************** * Exceptions ***************/ webkit_error::webkit_error (const char * w) : std::runtime_error (w) { } } astroid-0.14/src/modes/thread_view/thread_view.hh000066400000000000000000000151551335422170400221340ustar00rootroot00000000000000# pragma once # include # include # include # include # include # include # include # include # include # include # include # include # include "proto.hh" # include "modes/mode.hh" # include "message_thread.hh" # include "theme.hh" # ifndef DISABLE_PLUGINS # include "plugin/manager.hh" # endif using boost::property_tree::ptree; namespace Astroid { extern "C" bool ThreadView_on_load_changed ( WebKitWebView * w, WebKitLoadEvent load_event, gpointer user_data); extern "C" gboolean ThreadView_decide_policy ( WebKitWebView * w, WebKitPolicyDecision * decision, WebKitPolicyDecisionType decision_type, gpointer user_data); class ThreadView : public Mode { friend PageClient; public: ThreadView (MainWindow *, bool _edit_mode = false); ~ThreadView (); void load_thread (refptr); void load_message_thread (refptr); refptr thread; // will be refreshed through mthread refptr mthread; bool indent_messages; protected: bool edit_mode = false; double unread_delay = .5; std::chrono::time_point focus_time; bool unread_check (); bool unread_setup = false; sigc::connection unread_checker; /* resources */ ustring home_uri; // relative url for requests bool expand_flagged; Theme theme; # ifndef DISABLE_PLUGINS PluginManager::ThreadViewExtension * plugins; # endif ustring open_external_link; void open_link (ustring); void do_open_link (ustring); void pre_close () override; /* Web extension */ PageClient * page_client; private: /* focus and message state */ void focus_message (refptr); void focus_element (refptr, unsigned int); bool expand (refptr); bool collapse (refptr); bool toggle (refptr); public: /* message display state * * IMPORTANT: This should match the structure in messages.proto * */ struct MessageState { public: MessageState (); bool expanded = true; /* the message was expanded as part of an * C-n or C-p command */ bool search_expanded = false; bool scroll_expanded = false; bool print_expanded = false; bool marked = false; bool unread_checked = false; enum ElementType { Empty = 0, Address, Part, Attachment, MimeMessage, Encryption, }; struct Element { public: Element (ElementType t, int i); ElementType type; int id; ustring element_id (); bool focusable = true; bool operator== ( const Element & other ) const; }; /* ordered list of elements, must be listed in order of * appearance. * * first element is always empty and represents the message * itself. */ std::vector elements; unsigned int current_element; Element * get_current_element (); Element * get_element_by_id (int id); }; std::map, MessageState> state; refptr focused_message; /* set the warning header of the message */ void set_warning (refptr, ustring); void hide_warning (refptr); /* set the info header of the message */ void set_info (refptr, ustring); void hide_info (refptr); /* activate message or selected element */ typedef enum { EEnter = 0, ESave, EDelete, EYankRaw, EYank, } ElementAction; bool element_action (ElementAction); /* webkit */ WebKitWebView * webview; WebKitSettings * websettings; WebKitWebContext * context; protected: std::atomic wk_loaded; /* rendering */ void on_ready_to_render (); void load_html (); void render_messages (); /* message loading and rendering */ void add_message (refptr); bool open_html_part_external; void update_all_indent_states (); void save_all_attachments (); public: /* event wrappers */ bool on_load_changed ( WebKitWebView * w, WebKitLoadEvent load_event); gboolean decide_policy ( WebKitWebView * w, WebKitPolicyDecision * decision, WebKitPolicyDecisionType decision_type); void grab_focus (); /* mode */ virtual void grab_modal () override; virtual void release_modal () override; bool on_key_press_event (GdkEventKey *event) override; private: Keybindings multi_keys; Keybindings next_multi; void register_keys (); /* changed signals */ void on_message_changed (Db *, Message *, Message::MessageChangedEvent); /* search */ bool search (Key, bool); void on_search (ustring); void reset_search (); void next_search_match (); void prev_search_match (); bool in_search = false; ustring search_q = ""; public: /* the tv is ready */ typedef sigc::signal type_signal_ready; type_signal_ready signal_ready (); void emit_ready (); std::atomic ready; // all messages and elements rendered /* action on element */ typedef sigc::signal type_element_action; type_element_action signal_element_action (); void emit_element_action (unsigned int element, ElementAction action); /* actions for originating thread-index */ typedef enum { IA_Next = 0, IA_Previous, IA_NextUnread, IA_PreviousUnread, } IndexAction; typedef sigc::signal type_index_action; type_index_action signal_index_action (); bool emit_index_action (IndexAction action); protected: type_signal_ready m_signal_ready; type_element_action m_element_action; type_index_action m_index_action; }; /* exceptions */ class webkit_error : public std::runtime_error { public: webkit_error (const char *); }; } astroid-0.14/src/modes/thread_view/webextension/000077500000000000000000000000001335422170400220155ustar00rootroot00000000000000astroid-0.14/src/modes/thread_view/webextension/ae_protocol.cc000066400000000000000000000104041335422170400246310ustar00rootroot00000000000000# include "ae_protocol.hh" # include "messages.pb.h" # include # include # include # include #ifdef ASTROID_WEBEXTENSION # include # include # define LOG(x) BOOST_LOG_TRIVIAL(x) # define warn warning #else # include "astroid.hh" #endif namespace Astroid { const char * AeProtocol::MessageTypeStrings[] = { "Debug", "Ack", "Info", "Page", "State", "Indent", "AllowRemoteImages", "Focus", "Navigate", "Mark", "Hidden", "ClearMessages", "AddMessage", "UpdateMessage", "RemoveMessage", }; void AeProtocol::send_message ( MessageTypes mt, const ::google::protobuf::Message &m, Glib::RefPtr ostream) { std::string o; gsize written = 0; bool s = false; m.SerializeToString (&o); /* send size of message */ gsize sz = o.size (); s = ostream->write_all ((char*) &sz, sizeof(sz), written); /* send message type */ s &= ostream->write_all ((char*) &mt, sizeof (mt), written); /* send message */ s &= ostream->write_all (o, written); ostream->flush (); if (!s) { LOG (error) << "ae: could not write message!"; throw ipc_error ("could not write message."); } else { LOG (debug) << "ae: wrote: " << written << " of " << o.size () << " bytes."; } } void AeProtocol::send_message_async ( MessageTypes mt, const ::google::protobuf::Message &m, Glib::RefPtr ostream, std::mutex &m_ostream) { LOG (debug) << "ae: sending: " << MessageTypeStrings[mt]; LOG (debug) << "ae: send (async) waiting for lock"; std::lock_guard lk (m_ostream); send_message (mt, m, ostream); LOG (debug) << "ae: send (async) message sent."; } AstroidMessages::Ack AeProtocol::send_message_sync ( MessageTypes mt, const ::google::protobuf::Message &m, Glib::RefPtr ostream, std::mutex & m_ostream, Glib::RefPtr istream, std::mutex & m_istream) { LOG (debug) << "ae: sending: " << MessageTypeStrings[mt]; LOG (debug) << "ae: send (sync) waiting for lock.."; std::lock_guard rlk (m_istream); std::lock_guard wlk (m_ostream); LOG (debug) << "ae: send (sync) lock acquired."; /* send message */ send_message (mt, m, ostream); /* read response */ LOG (debug) << "ae: send (sync) waiting for ACK.."; AstroidMessages::Ack a; a.set_success (false); { std::string msg_str; auto mt = read_message ( istream, Glib::RefPtr (NULL), msg_str); /* parse message */ if (mt != AeProtocol::MessageTypes::Ack) { LOG (debug) << "ae: reader: did not get Ack message back!"; return a; } LOG (debug) << "ae: send (sync) ACK received."; a.ParseFromString (msg_str); } return a; } AeProtocol::MessageTypes AeProtocol::read_message ( Glib::RefPtr istream, Glib::RefPtr reader_cancel, std::string & msg_str) { gsize read = 0; bool s = false; /* read message size */ gsize msg_sz = 0; s = istream->read_all ((char *) &msg_sz, sizeof (msg_sz), read, reader_cancel); if (!s || read != sizeof (msg_sz)) { throw ipc_error ("could not read message size"); } if (msg_sz > AeProtocol::MAX_MESSAGE_SZ) { throw ipc_error ("message exceeds maximum size."); } AeProtocol::MessageTypes mt; s = istream->read_all ((char*) &mt, sizeof (mt), read, reader_cancel); if (!s || read != sizeof (mt)) { throw ipc_error ("could not read message type"); } /* read message */ gchar buffer[msg_sz + 1]; buffer[msg_sz] = '\0'; s = istream->read_all (buffer, msg_sz, read, reader_cancel); if (!s || read != msg_sz) { LOG (error) << "reader: error while reading message (size: " << msg_sz << ")"; throw ipc_error ("could not read message"); } msg_str = std::string (buffer, msg_sz); return mt; } /*************** * Exceptions ***************/ AeProtocol::ipc_error::ipc_error (const char * w) : runtime_error (w) { } } astroid-0.14/src/modes/thread_view/webextension/ae_protocol.hh000066400000000000000000000031731335422170400246500ustar00rootroot00000000000000# pragma once # include # include # include "messages.pb.h" namespace Astroid { class AeProtocol { public: typedef enum _MessageTypes { /* * XXX: Add string value to map in MessageTypeStrings */ Debug = 0, Ack, Info, Page, State, Indent, AllowRemoteImages, Focus, Navigate, Mark, Hidden, ClearMessages, AddMessage, UpdateMessage, RemoveMessage, } MessageTypes; static const char* MessageTypeStrings[]; static const gsize MAX_MESSAGE_SZ = 200 * 1024 * 1024; // 200 MB static void send_message_async ( MessageTypes mt, const ::google::protobuf::Message &m, Glib::RefPtr ostream, std::mutex &); static AstroidMessages::Ack send_message_sync ( MessageTypes mt, const ::google::protobuf::Message &m, Glib::RefPtr ostream, std::mutex & m_ostream, Glib::RefPtr istream, std::mutex & m_istream); static MessageTypes read_message ( Glib::RefPtr istream, Glib::RefPtr reader_cancel, std::string &buffer); /* exceptions */ class ipc_error : public std::runtime_error { public: ipc_error (const char *); }; private: static void send_message ( MessageTypes mt, const ::google::protobuf::Message &m, Glib::RefPtr ostream); }; } astroid-0.14/src/modes/thread_view/webextension/dom_utils.cc000066400000000000000000000076051335422170400243330ustar00rootroot00000000000000# include # include # include # include #ifdef ASTROID_WEBEXTENSION # include # else # include # endif # include "dom_utils.hh" # include # include # define LOG(x) BOOST_LOG_TRIVIAL(x) # define warn warning using std::vector; namespace Astroid { std::string DomUtils::assemble_data_uri (const char * mime_type, const gchar * data, gsize len) { return DomUtils::assemble_data_uri (std::string (mime_type), std::string (data, len)); } std::string DomUtils::assemble_data_uri (const std::string mime_type, const std::string data) { std::string base64 = "data:" + mime_type + ";base64," + Glib::Base64::encode (data); return base64; } # ifdef ASTROID_WEBEXTENSION /* clone and create html elements */ WebKitDOMHTMLElement * DomUtils::make_message_div (WebKitDOMDocument * d) { /* clone div from template in html file */ WebKitDOMHTMLElement * e = clone_node (WEBKIT_DOM_NODE(get_by_id (d, "email_template"))); return e; } WebKitDOMHTMLElement * DomUtils::clone_get_by_id ( WebKitDOMDocument * node, ustring id, bool deep) { return clone_node (WEBKIT_DOM_NODE (get_by_id (node, id)), deep); } WebKitDOMHTMLElement * DomUtils::clone_select ( WebKitDOMNode * node, ustring selector, bool deep) { return clone_node (WEBKIT_DOM_NODE(select (node, selector)), deep); } WebKitDOMHTMLElement * DomUtils::clone_node ( WebKitDOMNode * node, bool deep) { GError * gerr = NULL; return WEBKIT_DOM_HTML_ELEMENT(webkit_dom_node_clone_node_with_error (node, deep, &gerr)); } WebKitDOMHTMLElement * DomUtils::select ( WebKitDOMNode * node, ustring selector) { GError * gerr = NULL; WebKitDOMHTMLElement *e; if (WEBKIT_DOM_IS_DOCUMENT(node)) { e = WEBKIT_DOM_HTML_ELEMENT( webkit_dom_document_query_selector (WEBKIT_DOM_DOCUMENT(node), selector.c_str(), &gerr)); } else { /* ..DOMElement */ e = WEBKIT_DOM_HTML_ELEMENT( webkit_dom_element_query_selector (WEBKIT_DOM_ELEMENT(node), selector.c_str(), &gerr)); } if (gerr != NULL) LOG (debug) << "dom: error: " << gerr->message; return e; } WebKitDOMElement * DomUtils::get_by_id (WebKitDOMDocument * d, ustring id) { WebKitDOMElement * en = webkit_dom_document_get_element_by_id (d, id.c_str()); return en; } bool DomUtils::switch_class (WebKitDOMDOMTokenList * list, ustring c, bool v) { GError * err = NULL; bool x = webkit_dom_dom_token_list_contains (list, c.c_str ()); if (v && !x) { webkit_dom_dom_token_list_add (list, &err, c.c_str (), NULL ); } else if (!v && x) { webkit_dom_dom_token_list_remove (list, &err, c.c_str (), NULL ); } return x; } bool DomUtils::in_view (WebKitWebPage * page, ustring eid) { WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); WebKitDOMDOMWindow * w = webkit_dom_document_get_default_view (d); WebKitDOMElement * body = WEBKIT_DOM_ELEMENT(webkit_dom_document_get_body (d)); WebKitDOMElement * e = webkit_dom_document_get_element_by_id (d, eid.c_str()); double scrolled = webkit_dom_dom_window_get_scroll_y (w); double height = webkit_dom_element_get_client_height (body); double clientY = webkit_dom_element_get_offset_top (e); double clientH = webkit_dom_element_get_client_height (e); g_object_unref (e); g_object_unref (body); g_object_unref (w); g_object_unref (d); return ( (clientY >= scrolled) && ( (clientY + clientH) <= (scrolled + height) )); } # endif } astroid-0.14/src/modes/thread_view/webextension/dom_utils.hh000066400000000000000000000025731335422170400243440ustar00rootroot00000000000000# pragma once # include # include # include #ifdef ASTROID_WEBEXTENSION # include # else # include # endif # include "proto.hh" using std::vector; namespace Astroid { class DomUtils { public: static std::string assemble_data_uri (const char *, const gchar *, gsize); static std::string assemble_data_uri (const std::string mime_type, const std::string data); #ifdef ASTROID_WEBEXTENSION static WebKitDOMHTMLElement * make_message_div (WebKitDOMDocument *); /* webkit dom utils */ static WebKitDOMHTMLElement * clone_get_by_id ( WebKitDOMDocument * node, ustring id, bool deep = true); static WebKitDOMHTMLElement * clone_node ( WebKitDOMNode * node, bool deep = true); static WebKitDOMHTMLElement * clone_select ( WebKitDOMNode * node, ustring selector, bool deep = true); static WebKitDOMHTMLElement * select ( WebKitDOMNode * node, ustring selector); static WebKitDOMElement * get_by_id ( WebKitDOMDocument * n, ustring id); static bool switch_class (WebKitDOMDOMTokenList *, ustring, bool); static bool in_view (WebKitWebPage * page, ustring eid); # endif }; } astroid-0.14/src/modes/thread_view/webextension/messages.proto000066400000000000000000000101411335422170400247060ustar00rootroot00000000000000syntax = "proto3"; /* Note: * * Messages with a single field like integer or bool seem to mess up the * reader. I have had to add a bogus string field AND set it to something * arbitrary to have the internal protocol work. * */ package AstroidMessages; message Focus { string mid = 1; bool focus = 2; int32 element = 3; } message Ack { int32 id = 1; bool success = 2; Focus focus = 3; } message Indent { string bogus = 1; bool indent = 2; } message AllowRemoteImages { string bogus = 1; bool allow = 2; } message Navigate { enum Direction { None = 0; Specific = 1; Up = 2; Down = 3; } enum Type { VisualElement = 0; // Move one element, scrolling if necessary (default movement) Visual = 1; // Move one visual step regardless of element, update focus if necessary VisualBig = 2; // Move one visual big step, update focus if necessary VisualPage = 3; // Move one visual big big step, update focus if necessary Element = 4; // Move to specific element, update focus (not directional) Message = 5; // Move one message, update focus FocusView = 6; // Update focus to match view Extreme = 7; // Top or bottom } Direction direction = 1; Type type = 2; /* for Element */ string mid = 3; int32 element = 4; /* for message */ bool focus_top = 5; } message Mark { string mid = 1; bool marked = 2; } message Hidden { string mid = 1; bool hidden = 2; } message Debug { string msg = 1; } message Page { string html = 1; string css = 2; string part_css = 3; repeated string allowed_uris = 4; bool use_stdout = 5; bool use_syslog = 6; bool disable_log = 7; string log_level = 8; } message Info { bool warning = 1; bool set = 2; string mid = 3; string txt = 4; } message Address { string name = 1; string email = 2; string full_address = 3; } message AddressList { repeated Address addresses = 1; }; message Message { string mid = 1; Address sender = 2; AddressList to = 3; AddressList cc = 4; AddressList bcc = 5; Address reply_to = 20; string date_pretty = 6; string date_verbose = 7; string subject = 9; repeated string tags = 10; string tag_string = 21; string gravatar = 11; bool missing_content = 13; bool patch = 14; bool different_subject = 22; int32 level = 15; string in_reply_to = 16; string preview = 17; message Chunk { int32 id = 1; string sid = 13; string mime_type = 6; string cid = 22; bool viewable = 2; bool preferred = 3; bool attachment = 7; bool is_encrypted = 8; bool is_signed = 9; // 'signed' doesn't work int32 crypto_id = 21; message Signature { bool verified = 1; repeated string sign_strings = 2; repeated string all_errors = 3; } message Encryption { bool decrypted = 1; repeated string enc_strings = 2; } Signature signature = 19; Encryption encryption = 20; bool sibling = 11; bool use = 12; bool focusable = 18; string content = 10; string filename = 14; int32 size = 15; string human_size = 16; string thumbnail = 17; // used by attachments repeated Chunk kids = 4; repeated Chunk siblings = 5; } Chunk root = 23; repeated Chunk mime_messages = 18; repeated Chunk attachments = 19; } /* This should match the state structures in thread_view.hh */ message State { message MessageState { string mid = 1; message Element { enum Type { Empty = 0; Address = 1; Part = 2; Attachment = 3; MimeMessage = 4; Encryption = 5; } Type type = 1; int32 id = 2; string sid = 3; bool focusable = 4; } repeated Element elements = 5; int32 level = 6; } repeated MessageState messages = 2; bool edit_mode = 3; } message UpdateMessage { Message m = 1; enum Type { Tags = 0; VisibleParts = 1; } Type type = 2; } message ClearMessage { bool yes = 1; } astroid-0.14/src/modes/thread_view/webextension/tvextension.cc000066400000000000000000002107421335422170400247200ustar00rootroot00000000000000# include # include # include # include "tvextension.hh" # include # include # include # include # include # include # include /* boost::log */ # include # include # include # include # include # include # include # include # include # include # include # include # include # include # define LOG(x) BOOST_LOG_TRIVIAL(x) # define warn warning # include "modes/thread_view/webextension/ae_protocol.hh" # include "modes/thread_view/webextension/dom_utils.hh" # include "utils/ustring_utils.hh" # include "messages.pb.h" namespace logging = boost::log; namespace keywords = boost::log::keywords; namespace expr = boost::log::expressions; using namespace Astroid; extern "C" {/*{{{*/ static void web_page_created_callback (WebKitWebExtension *extension, WebKitWebPage *web_page, gpointer user_data ) { g_signal_connect (web_page, "send-request", G_CALLBACK (web_page_send_request), NULL); ext->page_created (extension, web_page, user_data); } bool web_page_send_request ( WebKitWebPage * web_page, WebKitURIRequest * request, WebKitURIResponse * response, gpointer user_data) { return ext->send_request (web_page, request, response, user_data); } G_MODULE_EXPORT void webkit_web_extension_initialize_with_user_data ( WebKitWebExtension *extension, gpointer pipes) { /* IMPORTANT: We assume that there will only be one extension instance * per web page. That means that there can only be one page in each web view, * and each web view must use its own process. */ ext = new AstroidExtension (extension, pipes); g_signal_connect (extension, "page-created", G_CALLBACK (web_page_created_callback), NULL); } }/*}}}*/ void AstroidExtension::init_console_log () { /* log to console */ logging::formatter format = expr::stream << "[" << expr::format_date_time< boost::posix_time::ptime >("TimeStamp", "%H:%M:%S") << "] [" << expr::attr ("ThreadID") << "] [E] [" << logging::trivial::severity << "] " << expr::smessage ; logging::add_console_log ()->set_formatter (format); } void AstroidExtension::init_sys_log () { typedef logging::sinks::synchronous_sink< logging::sinks::syslog_backend > sink_t; boost::shared_ptr< logging::core > core = logging::core::get(); // Create a backend boost::shared_ptr< logging::sinks::syslog_backend > backend(new logging::sinks::syslog_backend( keywords::facility = logging::sinks::syslog::user, keywords::use_impl = logging::sinks::syslog::native, keywords::ident = log_ident )); // Set the straightforward level translator for the "Severity" attribute of type int backend->set_severity_mapper( logging::sinks::syslog::direct_severity_mapping< int >("Severity")); // Wrap it into the frontend and register in the core. // The backend requires synchronization in the frontend. logging::core::get()->add_sink(boost::make_shared< sink_t >(backend)); } AstroidExtension::AstroidExtension ( WebKitWebExtension * e, gpointer gaddr) { extension = e; Glib::init (); Gtk::Main::init_gtkmm_internals (); Gio::init (); logging::add_common_attributes (); /* load attachment icon */ Glib::RefPtr theme = Gtk::IconTheme::get_default(); attachment_icon = theme->load_icon ( "mail-attachment-symbolic", ATTACHMENT_ICON_WIDTH, Gtk::ICON_LOOKUP_USE_BUILTIN ); /* load marked icon */ marked_icon = theme->load_icon ( "object-select-symbolic", ATTACHMENT_ICON_WIDTH, Gtk::ICON_LOOKUP_USE_BUILTIN ); /* retrieve socket address */ gsize sz; const char * caddr = g_variant_get_string ((GVariant *) gaddr, &sz); refptr addr = Gio::UnixSocketAddress::create (caddr, Gio::UNIX_SOCKET_ADDRESS_ABSTRACT); /* connect to socket */ cli = Gio::SocketClient::create (); try { sock = cli->connect (addr); istream = sock->get_input_stream (); ostream = sock->get_output_stream (); /* setting up reader thread */ reader_t = std::thread (&AstroidExtension::reader, this); } catch (Gio::Error &ex) { LOG (error) << "error: " << ex.what (); } } AstroidExtension::~AstroidExtension () { /* stop reader thread */ run = false; if (reader_cancel) reader_cancel->cancel (); reader_t.join (); /* close connection */ sock->close (); } void AstroidExtension::page_created (WebKitWebExtension * /* extension */, WebKitWebPage * _page, gpointer /* user_data */) { page = _page; LOG (debug) << "page created."; } bool AstroidExtension::send_request ( WebKitWebPage * /* web_page */, WebKitURIRequest * request, WebKitURIResponse * /* response */, gpointer /* user_data */) { const char * curi = webkit_uri_request_get_uri (request); std::string uri (curi != NULL ? curi : ""); LOG (debug) << "request: " << uri.substr (0, std::min (60, (int)uri.size ())) << ".."; /* allow all requests before page has been sent. no user content has been * loaded yet and it seems that sometimes the request for the home uri * is handled here */ if (!page_ready || allow_remote_resources) { LOG (debug) << "request: allow."; return false; // allow } else { if (find_if (allowed_uris.begin (), allowed_uris.end (), [&](std::string &a) { return (uri.substr (0, a.length ()) == a); }) != allowed_uris.end ()) { LOG (debug) << "request: allow."; return false; // allow } else { LOG (debug) << "request: blocked."; return true; // stop } } } void AstroidExtension::ack (bool success) { /* prepare and send acknowledgement message */ AstroidMessages::Ack m; m.set_success (success); /* send back focus */ m.mutable_focus ()->set_mid (focused_message); m.mutable_focus ()->set_element (focused_element); m.mutable_focus ()->set_focus (true); AeProtocol::send_message_async (AeProtocol::MessageTypes::Ack, m, ostream, m_ostream); } void AstroidExtension::reader () {/*{{{*/ LOG (debug) << "reader thread: started."; while (run) { LOG (debug) << "reader waiting.."; std::string buffer; AeProtocol::MessageTypes mt; try { mt = AeProtocol::read_message ( istream, reader_cancel, buffer); } catch (AeProtocol::ipc_error &e) { LOG (warn) << "reader thread: " << e.what (); run = false; break; } /* parse message */ switch (mt) { case AeProtocol::MessageTypes::Debug: { AstroidMessages::Debug m; m.ParseFromString (buffer); LOG (debug) << m.msg (); ack (true); } break; case AeProtocol::MessageTypes::Mark: { AstroidMessages::Mark m; m.ParseFromString (buffer); Glib::signal_idle().connect_once ( sigc::bind ( sigc::mem_fun(*this, &AstroidExtension::handle_mark), m)); } break; case AeProtocol::MessageTypes::Hidden: { AstroidMessages::Hidden m; m.ParseFromString (buffer); Glib::signal_idle().connect_once ( [this,m] () { set_hidden (m.mid (), m.hidden ()); ack (true); }); } break; case AeProtocol::MessageTypes::Focus: { AstroidMessages::Focus m; m.ParseFromString (buffer); Glib::signal_idle().connect_once ( sigc::bind ( sigc::mem_fun(*this, &AstroidExtension::handle_focus), m)); } break; case AeProtocol::MessageTypes::State: { AstroidMessages::State m; m.ParseFromString (buffer); Glib::signal_idle().connect_once ( sigc::bind ( sigc::mem_fun(*this, &AstroidExtension::handle_state), m)); } break; case AeProtocol::MessageTypes::Indent: { AstroidMessages::Indent m; m.ParseFromString (buffer); Glib::signal_idle().connect_once ( [this,m] () { set_indent (m.indent ()); ack (true); }); } break; case AeProtocol::MessageTypes::AllowRemoteImages: { AstroidMessages::AllowRemoteImages m; m.ParseFromString (buffer); Glib::signal_idle().connect_once ( [this,m] () { allow_remote_resources = true; reload_images (); ack (true); }); } break; case AeProtocol::MessageTypes::Page: { AstroidMessages::Page s; s.ParseFromString (buffer); Glib::signal_idle().connect_once ( sigc::bind ( sigc::mem_fun(*this, &AstroidExtension::handle_page), s)); } break; case AeProtocol::MessageTypes::ClearMessages: { AstroidMessages::ClearMessage m; m.ParseFromString (buffer); Glib::signal_idle().connect_once ( sigc::bind ( sigc::mem_fun(*this, &AstroidExtension::clear_messages), m)); } break; case AeProtocol::MessageTypes::AddMessage: { AstroidMessages::Message m; m.ParseFromString (buffer); Glib::signal_idle().connect_once ( sigc::bind ( sigc::mem_fun(*this, &AstroidExtension::add_message), m)); } break; case AeProtocol::MessageTypes::UpdateMessage: { AstroidMessages::UpdateMessage m; m.ParseFromString (buffer); Glib::signal_idle().connect_once ( sigc::bind ( sigc::mem_fun(*this, &AstroidExtension::update_message), m)); } break; case AeProtocol::MessageTypes::RemoveMessage: { AstroidMessages::Message m; m.ParseFromString (buffer); Glib::signal_idle().connect_once ( sigc::bind ( sigc::mem_fun(*this, &AstroidExtension::remove_message), m)); } break; case AeProtocol::MessageTypes::Info: { AstroidMessages::Info m; m.ParseFromString (buffer); if (m.warning ()) { Glib::signal_idle().connect_once ( sigc::bind ( sigc::mem_fun(*this, &AstroidExtension::set_warning), m)); } else { Glib::signal_idle().connect_once ( sigc::bind ( sigc::mem_fun(*this, &AstroidExtension::set_info), m)); } } break; case AeProtocol::MessageTypes::Navigate: { AstroidMessages::Navigate m; m.ParseFromString (buffer); Glib::signal_idle().connect_once ( sigc::bind ( sigc::mem_fun(*this, &AstroidExtension::handle_navigate), m)); } break; default: break; // unknown message } } LOG (debug) << "reader thread exit."; }/*}}}*/ void AstroidExtension::handle_page (AstroidMessages::Page &s) {/*{{{*/ /* set up logging */ if (s.use_stdout ()) { init_console_log (); } if (s.use_syslog ()) { init_sys_log (); } if (s.disable_log ()) { logging::core::get()->set_logging_enabled (false); } logging::core::get()->set_filter (logging::trivial::severity >= sevmap[s.log_level ()]); GError *err = NULL; WebKitDOMDocument *d = webkit_web_page_get_dom_document (page); /* load html */ LOG (debug) << "loading html.."; WebKitDOMElement * he = webkit_dom_document_create_element (d, "HTML", (err = NULL, &err)); webkit_dom_element_set_outer_html (he, s.html ().c_str (), (err = NULL, &err)); webkit_dom_document_set_body (d, WEBKIT_DOM_HTML_ELEMENT(he), (err = NULL, &err)); /* load css style */ LOG (debug) << "loading stylesheet.."; WebKitDOMElement *e = webkit_dom_document_create_element (d, "STYLE", (err = NULL, &err)); WebKitDOMText *t = webkit_dom_document_create_text_node (d, s.css().c_str()); webkit_dom_node_append_child (WEBKIT_DOM_NODE(e), WEBKIT_DOM_NODE(t), (err = NULL, &err)); WebKitDOMHTMLHeadElement * head = webkit_dom_document_get_head (d); webkit_dom_node_append_child (WEBKIT_DOM_NODE(head), WEBKIT_DOM_NODE(e), (err = NULL, &err)); LOG (debug) << "done"; /* store part / iframe css for later */ part_css = s.part_css (); /* store allowed uris */ for (auto &s : s.allowed_uris ()) { allowed_uris.push_back (s); } page_ready = true; g_object_unref (he); g_object_unref (head); g_object_unref (t); g_object_unref (e); g_object_unref (d); ack (true); }/*}}}*/ void AstroidExtension::reload_images () { LOG (debug) << "reload images."; GError * err = NULL; WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); for (auto &m : state.messages()) { ustring div_id = "message_" + m.mid (); WebKitDOMElement * me = webkit_dom_document_get_element_by_id (d, div_id.c_str()); for (auto &c : m.elements()) { if (!c.focusable ()) { WebKitDOMHTMLElement * body_container = WEBKIT_DOM_HTML_ELEMENT(webkit_dom_document_get_element_by_id (d, c.sid ().c_str ())); WebKitDOMHTMLElement * iframe = DomUtils::select (WEBKIT_DOM_NODE(body_container), ".body_iframe"); WebKitDOMDocument * iframe_d = webkit_dom_html_iframe_element_get_content_document (WEBKIT_DOM_HTML_IFRAME_ELEMENT(iframe)); WebKitDOMHTMLElement * b = webkit_dom_document_get_body (iframe_d); WebKitDOMNodeList * imgs = webkit_dom_element_query_selector_all (WEBKIT_DOM_ELEMENT(b), "img", (err = NULL, &err)); gulong l = webkit_dom_node_list_get_length (imgs); for (gulong i = 0; i < l; i++) { WebKitDOMNode * in = webkit_dom_node_list_item (imgs, i); WebKitDOMElement * ine = WEBKIT_DOM_ELEMENT (in); if (ine != NULL) { gchar * src = webkit_dom_element_get_attribute (ine, "src"); if (src != NULL) { ustring usrc (src); /* replace CID images with real image */ if (usrc.substr (0, 4) == "cid:") { ustring cid = usrc.substr (4, std::string::npos); LOG (debug) << "CID: " << cid; auto s = std::find_if ( messages[m.mid()].attachments().begin (), messages[m.mid()].attachments().end (), [&] (auto &a) { return a.cid() == cid; } ); if (s != messages[m.mid()].attachments().end ()) { LOG (debug) << "found matching attachment for CID."; webkit_dom_element_set_attribute (ine, "src", "", (err = NULL, &err)); webkit_dom_element_set_attribute (ine, "src", s->content().c_str (), (err = NULL, &err)); } else { LOG (warn) << "could not find matching attachment for CID."; } } else { /* trigger reload */ webkit_dom_element_set_attribute (ine, "src", "", (err = NULL, &err)); webkit_dom_element_set_attribute (ine, "src", src, (err = NULL, &err)); } } } g_object_unref (in); } g_object_unref (imgs); g_object_unref (b); g_object_unref (iframe_d); g_object_unref (iframe); g_object_unref (body_container); } } g_object_unref (me); } g_object_unref (d); } void AstroidExtension::handle_state (AstroidMessages::State &s) {/*{{{*/ LOG (debug) << "got state."; state = s; edit_mode = state.edit_mode (); ack (true); }/*}}}*/ void AstroidExtension::set_indent (bool indent) { LOG (debug) << "update indent."; indent_messages = indent; WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); for (auto &m : state.messages()) { ustring mid = "message_" + m.mid (); GError * err = NULL; WebKitDOMElement * e = webkit_dom_document_get_element_by_id (d, mid.c_str()); /* set indentation based on level */ if (indent_messages && m.level() > 0) { webkit_dom_element_set_attribute (WEBKIT_DOM_ELEMENT (e), "style", ustring::compose ("margin-left: %1px", int(m.level() * INDENT_PX)).c_str(), (err = NULL, &err)); } else { webkit_dom_element_remove_attribute (WEBKIT_DOM_ELEMENT (e), "style"); } g_object_unref (e); } g_object_unref (d); } void AstroidExtension::clear_messages (AstroidMessages::ClearMessage &) { LOG (debug) << "clearing all messages."; WebKitDOMDocument *d = webkit_web_page_get_dom_document (page); WebKitDOMElement * container = DomUtils::get_by_id (d, "message_container"); GError *err = NULL; webkit_dom_element_set_inner_html (container, "", (err = NULL, &err)); g_object_unref (container); g_object_unref (d); /* reset */ focused_message = ""; focused_element = -1; messages.clear (); state = AstroidMessages::State(); allow_remote_resources = false; indent_messages = false; ack (true); } // Message generation {{{ void AstroidExtension::add_message (AstroidMessages::Message &m) { LOG (debug) << "adding message: " << m.mid (); messages[m.mid()] = m; WebKitDOMDocument *d = webkit_web_page_get_dom_document (page); WebKitDOMElement * container = DomUtils::get_by_id (d, "message_container"); ustring div_id = "message_" + m.mid(); WebKitDOMNode * insert_before = webkit_dom_node_get_last_child ( WEBKIT_DOM_NODE(container)); WebKitDOMHTMLElement * div_message = DomUtils::make_message_div (d); GError * err = NULL; webkit_dom_element_set_id (WEBKIT_DOM_ELEMENT (div_message), div_id.c_str()); /* insert message div */ webkit_dom_node_insert_before (WEBKIT_DOM_NODE(container), WEBKIT_DOM_NODE(div_message), insert_before, (err = NULL, &err)); set_message_html (m, div_message); /* insert mime messages */ if (!m.missing_content()) { insert_mime_messages (m, div_message); } /* insert attachments */ if (!m.missing_content()) { insert_attachments (m, div_message); } /* marked */ load_marked_icon (div_message); g_object_unref (insert_before); g_object_unref (div_message); g_object_unref (container); g_object_unref (d); LOG (debug) << "message added."; apply_focus (focused_message, focused_element); // in case we got focus before message was added. ack (true); } void AstroidExtension::remove_message (AstroidMessages::Message &m) { LOG (debug) << "removing message: " << m.mid (); messages.erase (m.mid()); WebKitDOMDocument *d = webkit_web_page_get_dom_document (page); WebKitDOMElement * container = DomUtils::get_by_id (d, "message_container"); ustring div_id = "message_" + m.mid(); WebKitDOMHTMLElement * div_message = WEBKIT_DOM_HTML_ELEMENT(webkit_dom_document_get_element_by_id (d, div_id.c_str())); GError * err = NULL; webkit_dom_node_remove_child (WEBKIT_DOM_NODE(container), WEBKIT_DOM_NODE (div_message), (err = NULL, &err)); g_object_unref (div_message); g_object_unref (container); g_object_unref (d); LOG (debug) << "message removed."; ack (true); } void AstroidExtension::update_message (AstroidMessages::UpdateMessage &um) { auto m = um.m(); messages[m.mid()] = m; WebKitDOMDocument *d = webkit_web_page_get_dom_document (page); WebKitDOMElement * container = DomUtils::get_by_id (d, "message_container"); ustring div_id = "message_" + m.mid(); WebKitDOMHTMLElement * old_div_message = WEBKIT_DOM_HTML_ELEMENT(webkit_dom_document_get_element_by_id (d, div_id.c_str())); if (um.type () == AstroidMessages::UpdateMessage_Type_VisibleParts) { LOG (debug) << "updating message: " << m.mid () << " (full update)"; /* various states */ bool hidden = is_hidden (m.mid ()); // TODO: info and warning GError * err = NULL; WebKitDOMHTMLElement * div_message = DomUtils::make_message_div (d); webkit_dom_element_set_id (WEBKIT_DOM_ELEMENT (div_message), div_id.c_str()); set_message_html (m, div_message); /* insert mime messages */ if (!m.missing_content()) { insert_mime_messages (m, div_message); } /* insert attachments */ if (!m.missing_content()) { insert_attachments (m, div_message); } /* marked */ load_marked_icon (div_message); webkit_dom_node_replace_child (WEBKIT_DOM_NODE(container), WEBKIT_DOM_NODE (div_message), WEBKIT_DOM_NODE (old_div_message), (err = NULL, &err)); /* set various state */ set_hidden (m.mid (), hidden); set_indent (indent_messages); g_object_unref (div_message); auto ms = std::find_if ( state.messages().begin(), state.messages().end(), [&] (auto m) { return m.mid() == focused_message; }); if (!ms->elements(focused_element).focusable()) { /* find next or previous element */ /* are there any more focusable elements */ auto next_e = std::find_if ( ms->elements().begin () + (focused_element +1), ms->elements().end (), [&] (auto &e) { return e.focusable (); }); if (next_e != ms->elements().end()) { focused_element = std::distance (ms->elements ().begin (), next_e); } else { LOG (debug) << "take previous"; /* take previous element */ auto next_e = std::find_if ( ms->elements().rbegin() + (ms->elements().size() - focused_element), ms->elements().rend (), [&] (auto &e) { return e.focusable (); }); if (next_e != ms->elements().rend ()) { /* previous */ focused_element = std::distance (ms->elements ().begin (), next_e.base() -1); } else { /* message */ focused_element = 0; } } } apply_focus (focused_message, focused_element); } else if (um.type () == AstroidMessages::UpdateMessage_Type_Tags) { LOG (debug) << "updating message: " << m.mid () << " (tags only)"; message_render_tags (m, WEBKIT_DOM_HTML_ELEMENT(old_div_message)); message_update_css_tags (m, WEBKIT_DOM_HTML_ELEMENT(old_div_message)); } g_object_unref (old_div_message); g_object_unref (container); g_object_unref (d); ack (true); } /* main message generation  */ void AstroidExtension::set_message_html ( AstroidMessages::Message m, WebKitDOMHTMLElement * div_message) { GError *err; /* load message into div */ ustring header; WebKitDOMHTMLElement * div_email_container = DomUtils::select (WEBKIT_DOM_NODE(div_message), ".email_container"); /* build header */ insert_header_address (header, "From", m.sender(), true); if (m.reply_to().email().size () > 0) { if (m.reply_to().email() != m.sender().email()) insert_header_address (header, "Reply-To", m.reply_to(), false); } insert_header_address_list (header, "To", m.to(), false); if (m.cc().addresses().size () > 0) { insert_header_address_list (header, "Cc", m.cc(), false); } if (m.bcc().addresses().size () > 0) { insert_header_address_list (header, "Bcc", m.bcc(), false); } insert_header_date (header, m); if (m.subject().size() > 0) { insert_header_row (header, "Subject", m.subject(), false); WebKitDOMHTMLElement * subject = DomUtils::select ( WEBKIT_DOM_NODE (div_message), ".header_container .subject"); ustring s = Glib::Markup::escape_text(m.subject()); if (static_cast(s.size()) > MAX_PREVIEW_LEN) s = s.substr(0, MAX_PREVIEW_LEN - 3) + "..."; webkit_dom_element_set_inner_html (WEBKIT_DOM_ELEMENT (subject), s.c_str(), (err = NULL, &err)); g_object_unref (subject); } /* avatar */ if (!m.gravatar().empty ()) { WebKitDOMHTMLImageElement * av = WEBKIT_DOM_HTML_IMAGE_ELEMENT ( DomUtils::select ( WEBKIT_DOM_NODE (div_message), ".avatar" )); webkit_dom_html_image_element_set_src (av, m.gravatar().c_str()); g_object_unref (av); } /* insert header html*/ WebKitDOMHTMLElement * table_header = DomUtils::select (WEBKIT_DOM_NODE(div_email_container), ".header_container .header" ); header += create_header_row ("Tags", "", false, false, true); webkit_dom_element_set_inner_html ( WEBKIT_DOM_ELEMENT(table_header), header.c_str(), (err = NULL, &err)); if (m.tags().size () > 0) { message_render_tags (m, WEBKIT_DOM_HTML_ELEMENT(div_message)); message_update_css_tags (m, WEBKIT_DOM_HTML_ELEMENT(div_message)); } /* if message is missing body, set warning and don't add any content */ WebKitDOMHTMLElement * span_body = DomUtils::select (WEBKIT_DOM_NODE(div_email_container), ".body" ); WebKitDOMHTMLElement * preview = DomUtils::select (WEBKIT_DOM_NODE(div_email_container), ".header_container .preview" ); if (m.missing_content()) { /* set preview */ webkit_dom_element_set_inner_html (WEBKIT_DOM_ELEMENT(preview), "Message content is missing.", (err = NULL, &err)); /* set warning */ AstroidMessages::Info i; i.set_mid (m.mid()); i.set_set (true); i.set_txt ("The message file is missing, only fields cached in the notmuch database are shown. Most likely your database is out of sync."); set_warning (i); /* add an explanation to the body */ GError *err; WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); WebKitDOMHTMLElement * body_container = DomUtils::clone_get_by_id (d, "body_template"); webkit_dom_element_remove_attribute (WEBKIT_DOM_ELEMENT (body_container), "id"); webkit_dom_element_set_inner_html ( WEBKIT_DOM_ELEMENT(body_container), "Message content is missing.", (err = NULL, &err)); webkit_dom_node_append_child (WEBKIT_DOM_NODE (span_body), WEBKIT_DOM_NODE (body_container), (err = NULL, &err)); g_object_unref (body_container); g_object_unref (d); } else { /* build message body */ create_message_part_html (m, m.root(), span_body); /* preview */ webkit_dom_element_set_inner_html (WEBKIT_DOM_ELEMENT(preview), m.preview().c_str(), (err = NULL, &err)); } g_object_unref (preview); g_object_unref (span_body); g_object_unref (table_header); } // void AstroidExtension::message_render_tags (AstroidMessages::Message &m, WebKitDOMHTMLElement * div_message) { GError *err; WebKitDOMHTMLElement * tags = DomUtils::select ( WEBKIT_DOM_NODE (div_message), ".header_container .tags"); webkit_dom_element_set_inner_html (WEBKIT_DOM_ELEMENT(tags), m.tag_string().c_str (), (err = NULL, &err)); g_object_unref (tags); tags = DomUtils::select ( WEBKIT_DOM_NODE (div_message), ".header_container .header div#Tags .value"); webkit_dom_element_set_inner_html (WEBKIT_DOM_ELEMENT(tags), m.tag_string().c_str (), (err = NULL, &err)); g_object_unref (tags); } void AstroidExtension::message_update_css_tags (AstroidMessages::Message &m, WebKitDOMHTMLElement * div_message) { /* check for tag changes that control display */ WebKitDOMDOMTokenList * class_list = webkit_dom_element_get_class_list (WEBKIT_DOM_ELEMENT(div_message)); /* patches may be rendered somewhat differently */ DomUtils::switch_class (class_list, "patch", m.patch ()); /* message subject deviates from thread subject */ DomUtils::switch_class (class_list, "different_subject", m.different_subject ()); /* reset notmuch tags */ for (unsigned int i = 0; i < webkit_dom_dom_token_list_get_length (class_list); i++) { const char * _t = webkit_dom_dom_token_list_item (class_list, i); ustring t (_t); if (t.find ("nm-", 0) != std::string::npos) { DomUtils::switch_class (class_list, t, false); } } for (ustring t : m.tags()) { t = UstringUtils::replace (t, "/", "-"); t = UstringUtils::replace (t, ".", "-"); t = Glib::Markup::escape_text (t); t = "nm-" + t; DomUtils::switch_class (class_list, t, true); } g_object_unref (class_list); } void AstroidExtension::create_message_part_html ( const AstroidMessages::Message &message, const AstroidMessages::Message::Chunk &c, WebKitDOMHTMLElement * span_body) { ustring mime_type = c.mime_type (); LOG (debug) << "create message part: " << c.id() << " (siblings: " << c.sibling() << ") (kids: " << c.kids().size() << ")" << " (attachment: " << c.attachment() << ")" << " (viewable: " << c.viewable() << ")" << " (focusable: " << c.focusable () << ")" << " (mimetype: " << mime_type << ")"; if (c.use()) { if (!c.focusable () && c.viewable()) { create_body_part (message, c, span_body); } else if (c.viewable()) { create_sibling_part (c, span_body); } /* descend */ for (auto &k: c.kids()) { create_message_part_html (message, k, span_body); } } else { if (!c.focusable ()) { create_body_part (message, c, span_body); } else { create_sibling_part (c, span_body); } } } void AstroidExtension::create_body_part ( const AstroidMessages::Message &message, const AstroidMessages::Message::Chunk &c, WebKitDOMHTMLElement * span_body) { // LOG (debug) << "create body part: " << c.id(); GError *err; WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); WebKitDOMHTMLElement * body_container = DomUtils::clone_select (WEBKIT_DOM_NODE(d), "#body_template"); webkit_dom_element_remove_attribute (WEBKIT_DOM_ELEMENT (body_container), "id"); webkit_dom_element_set_id (WEBKIT_DOM_ELEMENT (body_container), c.sid().c_str ()); ustring body = c.content(); /* check encryption */ // //
//
//
if (c.is_encrypted() || c.is_signed()) { WebKitDOMHTMLElement * encrypt_container = DomUtils::clone_select (WEBKIT_DOM_NODE(d), "#encrypt_template"); webkit_dom_element_remove_attribute (WEBKIT_DOM_ELEMENT (encrypt_container), "id"); webkit_dom_element_set_attribute (WEBKIT_DOM_ELEMENT (encrypt_container), "id", ustring::compose ("%1", c.crypto_id()).c_str (), (err = NULL, &err)); WebKitDOMDOMTokenList * class_list_e = webkit_dom_element_get_class_list (WEBKIT_DOM_ELEMENT(encrypt_container)); ustring content = ""; ustring sign_string = ""; ustring enc_string = ""; vector all_sig_errors; if (c.is_signed ()) { if (c.signature().verified()) { sign_string += "Signature verification succeeded."; } else { sign_string += "Signature verification failed!"; } for (auto &s : c.signature().sign_strings ()) { sign_string += s; } } if (c.is_encrypted ()) { if (c.is_signed ()) enc_string = "Signed and Encrypted."; else enc_string = "Encrypted."; if (c.encryption().decrypted ()) { for (auto &e : c.encryption ().enc_strings ()) { enc_string += e; } if (c.is_signed ()) enc_string += "

"; } else { enc_string += "Encryption: Failed decryption."; } } content = enc_string + sign_string; WebKitDOMHTMLElement * message_cont = DomUtils::select (WEBKIT_DOM_NODE (encrypt_container), ".message"); webkit_dom_element_set_inner_html ( WEBKIT_DOM_ELEMENT(message_cont), content.c_str(), (err = NULL, &err)); webkit_dom_node_append_child (WEBKIT_DOM_NODE (span_body), WEBKIT_DOM_NODE (encrypt_container), (err = NULL, &err)); /* add encryption tag to encrypted part */ WebKitDOMDOMTokenList * class_list = webkit_dom_element_get_class_list (WEBKIT_DOM_ELEMENT(body_container)); if (c.is_encrypted ()) { DomUtils::switch_class (class_list_e, "encrypted", true); DomUtils::switch_class (class_list, "encrypted", true); if (!c.encryption().decrypted()) { DomUtils::switch_class (class_list_e, "decrypt_failed", true); DomUtils::switch_class (class_list, "decrypt_failed", true); } } if (c.is_signed ()) { DomUtils::switch_class (class_list_e, "signed", true); DomUtils::switch_class (class_list, "signed", true); if (!c.signature().verified()) { DomUtils::switch_class (class_list_e, "verify_failed", true); DomUtils::switch_class (class_list, "verify_failed", true); /* add specific errors */ std::sort (all_sig_errors.begin (), all_sig_errors.end ()); all_sig_errors.erase (unique (all_sig_errors.begin (), all_sig_errors.end ()), all_sig_errors.end ()); for (ustring & e : all_sig_errors) { DomUtils::switch_class (class_list_e, e, true); DomUtils::switch_class (class_list, e, true); } } } g_object_unref (class_list); g_object_unref (class_list_e); g_object_unref (encrypt_container); g_object_unref (message_cont); } webkit_dom_node_append_child (WEBKIT_DOM_NODE (span_body), WEBKIT_DOM_NODE (body_container), (err = NULL, &err)); g_object_unref (d); /* * run this later on extension GUI thread in order to make sure that the "body part" has been * added to the document. */ Glib::signal_idle().connect_once ( sigc::bind ( sigc::mem_fun(*this, &AstroidExtension::set_iframe_src), message.mid(), c.sid(), body)); LOG (debug) << "create_body_part done."; } void AstroidExtension::set_iframe_src (ustring mid, ustring cid, ustring body) { LOG (debug) << "set iframe src: " << mid << ", " << cid; WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); GError *err; WebKitDOMHTMLElement * body_container = WEBKIT_DOM_HTML_ELEMENT(webkit_dom_document_get_element_by_id (d, cid.c_str ())); WebKitDOMHTMLElement * iframe = DomUtils::select (WEBKIT_DOM_NODE(body_container), ".body_iframe"); /* by using srcdoc we avoid creating any requests that would have to be * allowed on the main GUI thread. even if we run this function async there * might be other sync calls to the webextension that cause blocking since * most webextension funcs need to run on extension GUI thread in order to * manipulate DOM tree */ /* according to: http://w3c.github.io/html/semantics-embedded-content.html#element-attrdef-iframe-src * we need to escape quotation marks and amperands. it seems that by using * this call webkit does this for us. this is critical since otherwise the * content could break out of the iframe. */ /* it would probably be possible to mess up the style, but it should only affect the current frame content. this would anyway be possible. */ webkit_dom_element_set_attribute (WEBKIT_DOM_ELEMENT (iframe), "srcdoc", ustring::compose ( "%2", part_css, body ).c_str (), (err = NULL, &err)); g_object_unref (iframe); g_object_unref (body_container); g_object_unref (d); } void AstroidExtension::create_sibling_part ( /* const AstroidMessages::Message &message, */ const AstroidMessages::Message::Chunk &sibling, WebKitDOMHTMLElement * span_body) { LOG (debug) << "create sibling part: " << sibling.id (); // //
//
//
GError *err; WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); WebKitDOMHTMLElement * sibling_container = DomUtils::clone_select (WEBKIT_DOM_NODE(d), "#sibling_template"); webkit_dom_element_remove_attribute (WEBKIT_DOM_ELEMENT (sibling_container), "id"); webkit_dom_element_set_attribute (WEBKIT_DOM_ELEMENT (sibling_container), "id", sibling.sid().c_str(), (err = NULL, &err)); ustring content = ustring::compose ("Alternative part (type: %1)%2", Glib::Markup::escape_text(sibling.mime_type ()), (sibling.mime_type() != "text/plain" ? " - potentially sketchy." : "")); WebKitDOMHTMLElement * message_cont = DomUtils::select (WEBKIT_DOM_NODE (sibling_container), ".message"); webkit_dom_element_set_inner_html ( WEBKIT_DOM_ELEMENT(message_cont), content.c_str(), (err = NULL, &err)); webkit_dom_node_append_child (WEBKIT_DOM_NODE (span_body), WEBKIT_DOM_NODE (sibling_container), (err = NULL, &err)); g_object_unref (message_cont); g_object_unref (sibling_container); g_object_unref (d); } // void AstroidExtension::insert_mime_messages ( AstroidMessages::Message &m, WebKitDOMHTMLElement * div_message) { WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); WebKitDOMHTMLElement * div_email_container = DomUtils::select (WEBKIT_DOM_NODE(div_message), "div.email_container"); WebKitDOMHTMLElement * span_body = DomUtils::select (WEBKIT_DOM_NODE(div_email_container), ".body"); for (auto &c : m.mime_messages ()) { LOG (debug) << "create mime message part: " << c.id(); // //
//
//
//
GError *err; WebKitDOMHTMLElement * mime_container = DomUtils::clone_select (WEBKIT_DOM_NODE(d), "#mime_template"); webkit_dom_element_remove_attribute (WEBKIT_DOM_ELEMENT (mime_container), "id"); webkit_dom_element_set_attribute (WEBKIT_DOM_ELEMENT (mime_container), "id", c.sid().c_str(), (err = NULL, &err)); ustring content = ustring::compose ("MIME message (subject: %1, size: %2 B) - potentially sketchy.", Glib::Markup::escape_text(c.filename ()), c.human_size (), c.sid ()); WebKitDOMHTMLElement * message_cont = DomUtils::select (WEBKIT_DOM_NODE (mime_container), ".message"); webkit_dom_element_set_inner_html ( WEBKIT_DOM_ELEMENT(message_cont), content.c_str(), (err = NULL, &err)); webkit_dom_node_append_child (WEBKIT_DOM_NODE (span_body), WEBKIT_DOM_NODE (mime_container), (err = NULL, &err)); g_object_unref (message_cont); g_object_unref (mime_container); } g_object_unref (span_body); g_object_unref (div_email_container); g_object_unref (d); } void AstroidExtension::insert_attachments ( AstroidMessages::Message &m, WebKitDOMHTMLElement * div_message) { //
//
// // // // // //
// // //
//
//
//
GError *err; WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); WebKitDOMHTMLElement * attachment_container = DomUtils::clone_select (WEBKIT_DOM_NODE(d), "#attachment_template"); WebKitDOMHTMLElement * attachment_template = DomUtils::select (WEBKIT_DOM_NODE(attachment_container), ".attachment"); webkit_dom_element_remove_attribute (WEBKIT_DOM_ELEMENT (attachment_container), "id"); webkit_dom_node_remove_child (WEBKIT_DOM_NODE (attachment_container), WEBKIT_DOM_NODE(attachment_template), (err = NULL, &err)); int attachments = 0; /* generate an attachment table for each attachment */ for (auto &c : m.attachments ()) { WebKitDOMHTMLElement * attachment_table = DomUtils::clone_node (WEBKIT_DOM_NODE (attachment_template)); attachments++; WebKitDOMHTMLElement * info_fname = DomUtils::select (WEBKIT_DOM_NODE (attachment_table), ".info .filename"); ustring fname = c.filename (); if (fname.size () == 0) { fname = "Unnamed attachment"; } fname = Glib::Markup::escape_text (fname); webkit_dom_html_element_set_inner_text (info_fname, fname.c_str(), (err = NULL, &err)); WebKitDOMHTMLElement * info_fsize = DomUtils::select (WEBKIT_DOM_NODE (attachment_table), ".info .filesize"); webkit_dom_html_element_set_inner_text (info_fsize, c.human_size().c_str(), (err = NULL, &err)); webkit_dom_element_set_attribute (WEBKIT_DOM_ELEMENT (attachment_table), "data-attachment-id", c.sid().c_str(), (err = NULL, &err)); webkit_dom_element_set_attribute (WEBKIT_DOM_ELEMENT (attachment_table), "id", c.sid().c_str(), (err = NULL, &err)); // set image WebKitDOMHTMLImageElement * img = WEBKIT_DOM_HTML_IMAGE_ELEMENT( DomUtils::select (WEBKIT_DOM_NODE (attachment_table), ".preview img")); webkit_dom_element_set_attribute (WEBKIT_DOM_ELEMENT (img), "src", c.thumbnail().c_str(), &err); // add the attachment table webkit_dom_node_append_child (WEBKIT_DOM_NODE (attachment_container), WEBKIT_DOM_NODE (attachment_table), (err = NULL, &err)); if (c.is_signed () || c.is_encrypted ()) { /* add encryption or signed tag to attachment */ WebKitDOMDOMTokenList * class_list = webkit_dom_element_get_class_list (WEBKIT_DOM_ELEMENT(attachment_table)); if (c.is_encrypted ()) { DomUtils::switch_class (class_list, "encrypted", true); } if (c.is_signed ()) { DomUtils::switch_class (class_list, "signed", true); } g_object_unref (class_list); } g_object_unref (img); g_object_unref (info_fname); g_object_unref (info_fsize); g_object_unref (attachment_table); } if (attachments > 0) { webkit_dom_node_append_child (WEBKIT_DOM_NODE (div_message), WEBKIT_DOM_NODE (attachment_container), (err = NULL, &err)); } g_object_unref (attachment_template); g_object_unref (attachment_container); g_object_unref (d); if (attachments > 0) set_attachment_icon (div_message); } void AstroidExtension::set_attachment_icon ( WebKitDOMHTMLElement * div_message) { GError *err; WebKitDOMHTMLElement * attachment_icon_img = DomUtils::select ( WEBKIT_DOM_NODE (div_message), ".attachment.icon.first"); gchar * content; gsize content_size; attachment_icon->save_to_buffer (content, content_size, "png"); ustring image_content_type = "image/png"; WebKitDOMHTMLImageElement *img = WEBKIT_DOM_HTML_IMAGE_ELEMENT (attachment_icon_img); err = NULL; webkit_dom_element_set_attribute (WEBKIT_DOM_ELEMENT (img), "src", DomUtils::assemble_data_uri (image_content_type.c_str (), content, content_size).c_str(), &err); g_object_unref (attachment_icon_img); attachment_icon_img = DomUtils::select ( WEBKIT_DOM_NODE (div_message), ".attachment.icon.sec"); img = WEBKIT_DOM_HTML_IMAGE_ELEMENT (attachment_icon_img); err = NULL; webkit_dom_element_set_attribute (WEBKIT_DOM_ELEMENT (img), "src", DomUtils::assemble_data_uri (image_content_type.c_str (), content, content_size).c_str(), &err); WebKitDOMDOMTokenList * class_list = webkit_dom_element_get_class_list (WEBKIT_DOM_ELEMENT(div_message)); DomUtils::switch_class (class_list, "attachment", true); g_object_unref (class_list); g_object_unref (attachment_icon_img); } void AstroidExtension::load_marked_icon (WebKitDOMHTMLElement * div_message) { WebKitDOMHTMLElement * marked_icon_img = DomUtils::select ( WEBKIT_DOM_NODE (div_message), ".marked.icon.first"); gchar * content; gsize content_size; marked_icon->save_to_buffer (content, content_size, "png"); ustring image_content_type = "image/png"; WebKitDOMHTMLImageElement *img = WEBKIT_DOM_HTML_IMAGE_ELEMENT (marked_icon_img); webkit_dom_html_image_element_set_src (img, DomUtils::assemble_data_uri (image_content_type.c_str (), content, content_size).c_str()); g_object_unref (marked_icon_img); marked_icon_img = DomUtils::select ( WEBKIT_DOM_NODE (div_message), ".marked.icon.sec"); img = WEBKIT_DOM_HTML_IMAGE_ELEMENT (marked_icon_img); webkit_dom_html_image_element_set_src (img, DomUtils::assemble_data_uri (image_content_type.c_str (), content, content_size).c_str()); g_object_unref (marked_icon_img); } /* headers {{{ */ void AstroidExtension::insert_header_date (ustring & header, AstroidMessages::Message m) { ustring value = ustring::compose ( "%1" "%2", m.date_pretty (), m.date_verbose ()); header += create_header_row ("Date", value, true, false); } void AstroidExtension::insert_header_address ( ustring &header, ustring title, AstroidMessages::Address address, bool important) { AstroidMessages::AddressList al; AstroidMessages::Address * a = al.add_addresses (); a->set_name (address.name()); a->set_full_address (address.full_address ()); a->set_email (address.email ()); insert_header_address_list (header, title, al, important); } void AstroidExtension::insert_header_address_list ( ustring &header, ustring title, AstroidMessages::AddressList addresses, bool important) { ustring value; bool first = true; for (const AstroidMessages::Address address : addresses.addresses()) { if (address.full_address().size() > 0) { if (!first) { value += ", "; } else { first = false; } value += ustring::compose ("%4%1%5 <%2>", Glib::Markup::escape_text (address.name ()), Glib::Markup::escape_text (address.email ()), Glib::Markup::escape_text (address.full_address()), (important ? "" : ""), (important ? "" : "") ); } } header += create_header_row (title, value, important, false, false); } void AstroidExtension::insert_header_row ( ustring &header, ustring title, ustring value, bool important) { header += create_header_row (title, value, important, true, false); } ustring AstroidExtension::create_header_row ( ustring title, ustring value, bool important, bool escape, bool noprint) { return ustring::compose ( "
" "
%3:
" "
%4
" "
", (important ? " important" : ""), (noprint ? " noprint" : ""), Glib::Markup::escape_text (title), (escape ? Glib::Markup::escape_text (value) : value) ); } /* headers end }}} */ // }}} /* warning and info {{{ */ void AstroidExtension::set_warning (AstroidMessages::Info &m) { if (!m.set ()) { hide_warning (m); // ack's return; } LOG (debug) << "set warning: " << m.txt (); ustring mid = "message_" + m.mid(); ustring txt = m.txt(); WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); WebKitDOMElement * e = webkit_dom_document_get_element_by_id (d, mid.c_str()); WebKitDOMHTMLElement * warning = DomUtils::select ( WEBKIT_DOM_NODE (e), ".email_warning"); GError * err; webkit_dom_element_set_inner_html (WEBKIT_DOM_ELEMENT(warning), txt.c_str(), (err = NULL, &err)); WebKitDOMDOMTokenList * class_list = webkit_dom_element_get_class_list (WEBKIT_DOM_ELEMENT(warning)); DomUtils::switch_class (class_list, "show", true); g_object_unref (class_list); g_object_unref (warning); g_object_unref (e); g_object_unref (d); ack (true); } void AstroidExtension::hide_warning (AstroidMessages::Info &m) { LOG (debug) << "hide warning."; ustring mid = "message_" + m.mid(); WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); WebKitDOMElement * e = webkit_dom_document_get_element_by_id (d, mid.c_str()); WebKitDOMHTMLElement * warning = DomUtils::select ( WEBKIT_DOM_NODE (e), ".email_warning"); GError * err; webkit_dom_element_set_inner_html (WEBKIT_DOM_ELEMENT(warning), "", (err = NULL, &err)); WebKitDOMDOMTokenList * class_list = webkit_dom_element_get_class_list (WEBKIT_DOM_ELEMENT(warning)); DomUtils::switch_class (class_list, "show", false); g_object_unref (class_list); g_object_unref (warning); g_object_unref (e); g_object_unref (d); ack (true); } void AstroidExtension::set_info (AstroidMessages::Info &m) { if (!m.set ()) { hide_info (m); // ack's return; } LOG (debug) << "set info: " << m.txt (); ustring mid = "message_" + m.mid(); ustring txt = m.txt(); WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); WebKitDOMElement * e = webkit_dom_document_get_element_by_id (d, mid.c_str()); WebKitDOMHTMLElement * info = DomUtils::select ( WEBKIT_DOM_NODE (e), ".email_info"); GError * err; webkit_dom_element_set_inner_html (WEBKIT_DOM_ELEMENT(info), txt.c_str(), (err = NULL, &err)); WebKitDOMDOMTokenList * class_list = webkit_dom_element_get_class_list (WEBKIT_DOM_ELEMENT(info)); DomUtils::switch_class (class_list, "show", true); g_object_unref (class_list); g_object_unref (info); g_object_unref (e); g_object_unref (d); ack (true); } void AstroidExtension::hide_info (AstroidMessages::Info &m) { LOG (debug) << "hide info."; ustring mid = "message_" + m.mid(); WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); WebKitDOMElement * e = webkit_dom_document_get_element_by_id (d, mid.c_str()); WebKitDOMHTMLElement * info = DomUtils::select ( WEBKIT_DOM_NODE (e), ".email_info"); GError * err; webkit_dom_element_set_inner_html (WEBKIT_DOM_ELEMENT(info), "", (err = NULL, &err)); WebKitDOMDOMTokenList * class_list = webkit_dom_element_get_class_list (WEBKIT_DOM_ELEMENT(info)); DomUtils::switch_class (class_list, "show", false); g_object_unref (class_list); g_object_unref (info); g_object_unref (e); g_object_unref (d); ack (true); } /* }}} */ void AstroidExtension::set_hidden (ustring mid, bool hidden) { /* hide or show message */ LOG (debug) << "set hidden"; ustring div_id = "message_" + mid; GError * err = NULL; WebKitDOMDocument *d = webkit_web_page_get_dom_document (page); WebKitDOMElement * e = webkit_dom_document_get_element_by_id (d, div_id.c_str()); WebKitDOMDOMTokenList * class_list = webkit_dom_element_get_class_list (WEBKIT_DOM_ELEMENT(e)); if (hidden) { LOG (debug) << "hide: " << mid; webkit_dom_dom_token_list_toggle (class_list, "hide", hidden, &err ); } else if (webkit_dom_dom_token_list_contains (class_list, "hide")) { LOG (debug) << "show: " << mid; webkit_dom_dom_token_list_toggle (class_list, "hide", false, &err ); } /* if the message we just hid or showed is not the focused one it may have * caused the focused message to go out of view. scroll to original focused * message in that case. */ if (mid != focused_message && !focused_message.empty()) { if (focused_element > 0) { scroll_to_element ( std::find_if (state.messages().begin (), state.messages().end (), [&] (auto &m) { return m.mid () == focused_message; })->elements(focused_element).sid () ); } else { ustring div = "message_" + focused_message; scroll_to_element (div); } } g_object_unref (class_list); g_object_unref (e); g_object_unref (d); } bool AstroidExtension::is_hidden (ustring mid) { ustring mmid = "message_" + mid; WebKitDOMDocument *d = webkit_web_page_get_dom_document (page); WebKitDOMElement * e = webkit_dom_document_get_element_by_id (d, mmid.c_str()); WebKitDOMDOMTokenList * class_list = webkit_dom_element_get_class_list (e); bool r = webkit_dom_dom_token_list_contains (class_list, "hide"); g_object_unref (class_list); g_object_unref (e); g_object_unref (d); return r; } void AstroidExtension::handle_mark (AstroidMessages::Mark &m) {/*{{{*/ ustring mid = "message_" + m.mid(); WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); WebKitDOMElement * e = webkit_dom_document_get_element_by_id (d, mid.c_str()); WebKitDOMDOMTokenList * class_list = webkit_dom_element_get_class_list (e); /* set class */ DomUtils::switch_class (class_list, "marked", m.marked()); g_object_unref (class_list); g_object_unref (e); g_object_unref (d); ack (true); }/*}}}*/ void AstroidExtension::handle_focus (AstroidMessages::Focus &msg) { apply_focus (msg.mid (), msg.element ()); ack (true); } void AstroidExtension::apply_focus (ustring mid, int element) { LOG (debug) << "focusing: " << mid << ": " << element; focused_message = mid; focused_element = element; if (focused_message.empty() || focused_element == -1) return; WebKitDOMDocument *d = webkit_web_page_get_dom_document (page); for (auto &m : state.messages()) { ustring _mid = "message_" + m.mid (); WebKitDOMElement * me = webkit_dom_document_get_element_by_id (d, _mid.c_str ()); WebKitDOMDOMTokenList * class_list = webkit_dom_element_get_class_list (me); /* set class */ DomUtils::switch_class (class_list, "focused", m.mid () == mid); g_object_unref (class_list); int ei = 0; for (auto &e : m.elements ()) { if ( // all states contain an empty element at first e.type() != AstroidMessages::State_MessageState_Element_Type_Empty // skip elements that cannot be focused && e.focusable() == true ) { WebKitDOMElement * ee = webkit_dom_document_get_element_by_id (d, e.sid().c_str()); WebKitDOMDOMTokenList * e_class_list = webkit_dom_element_get_class_list (ee); DomUtils::switch_class (e_class_list, "focused", (m.mid () == mid && ei == element)); g_object_unref (e_class_list); g_object_unref (ee); } ei++; } g_object_unref (me); } g_object_unref (d); LOG (debug) << "focus done."; } void AstroidExtension::update_focus_to_view () { /* check if currently focused message has gone out of focus * and update focus */ /* loop through elements from the top and test whether the top * of it is within the view */ WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); WebKitDOMDOMWindow * w = webkit_dom_document_get_default_view (d); WebKitDOMElement * body = WEBKIT_DOM_ELEMENT(webkit_dom_document_get_body (d)); double scrolled = webkit_dom_dom_window_get_scroll_y (w); double height = webkit_dom_element_get_client_height (body); //LOG (debug) << "scrolled = " << scrolled << ", height = " << height; /* check currently focused message */ bool take_next = false; /* need to apply_focus afterwards */ bool redo_focus = false; /* take first if none focused */ if (focused_message.empty ()) { focused_message = state.messages(0).mid() ; redo_focus = true; } /* check if focused message is still visible */ ustring mid = "message_" + focused_message; WebKitDOMElement * e = webkit_dom_document_get_element_by_id (d, mid.c_str()); double clientY = webkit_dom_element_get_offset_top (e); double clientH = webkit_dom_element_get_client_height (e); g_object_unref (e); //LOG (debug) << "y = " << clientY; //LOG (debug) << "h = " << clientH; // height = 0 if there is no paging: all messages are in view. if ((height == 0) || ( (clientY <= (scrolled + height)) && ((clientY + clientH) >= scrolled) )) { //LOG (debug) << "message: " << focused_message->date() << " still in view."; } else { //LOG (debug) << "message: " << focused_message->date() << " out of view."; take_next = true; } /* find first message that is in view and update * focused status */ if (take_next) { int focused_position = std::find_if ( state.messages().begin (), state.messages().end (), [&] (auto &m) { return m.mid () == focused_message; }) - state.messages().begin (); int cur_position = 0; bool found = false; for (auto &m : state.messages()) { ustring mid = "message_" + m.mid(); WebKitDOMElement * e = webkit_dom_document_get_element_by_id (d, mid.c_str()); double clientY = webkit_dom_element_get_offset_top (e); double clientH = webkit_dom_element_get_client_height (e); // LOG (debug) << "y = " << clientY; // LOG (debug) << "h = " << clientH; /* search for the last message that is currently in view * if the focused message is now below / beyond the view. * otherwise, take first that is in view now. */ if ((!found || cur_position < focused_position) && ( (height == 0) || ((clientY <= (scrolled + height)) && ((clientY + clientH) >= scrolled)) )) { // LOG (debug) << "message: " << m->date() << " now in view."; if (found) redo_focus = true; found = true; focused_message = m.mid(); focused_element = 0; } else { /* reset class */ redo_focus = true; } g_object_unref (e); cur_position++; } g_object_unref (body); g_object_unref (w); g_object_unref (d); if (redo_focus) apply_focus (focused_message, focused_element); } } void AstroidExtension::focus_next_element (bool force_change) { ustring eid; LOG (debug) << "fne: " << focused_message << ", " << focused_element; WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); WebKitDOMDOMWindow * w = webkit_dom_document_get_default_view (d); WebKitDOMElement * body = WEBKIT_DOM_ELEMENT(webkit_dom_document_get_body (d)); /* force change if we are at maximum scroll */ long scroll_height = webkit_dom_element_get_scroll_height (body); long scroll_top = webkit_dom_element_get_scroll_top (body); long body_height = webkit_dom_element_get_client_height (body); force_change = force_change || (scroll_height - scroll_top == body_height); if (!is_hidden (focused_message)) { /* if the message is expanded, check if we should move focus * to the next element */ auto s = *std::find_if ( state.messages().begin (), state.messages().end (), [&] (auto &m) { return m.mid () == focused_message; }); /* are there any more focusable elements */ auto next_e = std::find_if ( s.elements().begin () + (focused_element +1), s.elements().end (), [&] (auto &e) { return e.focusable (); }); if (next_e != s.elements().end ()) { /* check if the next element is in full view */ eid = next_e->sid (); LOG (debug) << "next_e: " << eid; if (force_change || DomUtils::in_view (page, eid)) { /* move focus to next element and scroll if necessary */ focused_element = std::distance (s.elements ().begin (), next_e); apply_focus (focused_message, focused_element); scroll_to_element (eid); g_object_unref (body); g_object_unref (w); g_object_unref (d); return; } /* fall through to scroll */ } else { /* move focus to next message if in view or force_change */ auto s = std::find_if ( state.messages().begin (), state.messages().end (), [&] (auto &m) { return m.mid () == focused_message; }); s++; if (s < state.messages().end () && (force_change || DomUtils::in_view (page, "message_" + s->mid ()))) { focus_next_message (); g_object_unref (body); g_object_unref (w); g_object_unref (d); return; } /* fall through to scroll */ } } else { /* move focus to next message if in view or force_change */ auto s = std::find_if ( state.messages().begin (), state.messages().end (), [&] (auto &m) { return m.mid () == focused_message; }); s++; if (s < state.messages().end () && (force_change || DomUtils::in_view (page, "message_" + s->mid ()))) { focus_next_message (); g_object_unref (body); g_object_unref (w); g_object_unref (d); return; } /* fall through to scroll */ } /* no focus change, standard behaviour */ webkit_dom_dom_window_scroll_by (w, 0, STEP); if (!force_change) { update_focus_to_view (); } g_object_unref (body); g_object_unref (w); g_object_unref (d); } void AstroidExtension::focus_previous_element (bool force_change) { ustring eid; WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); WebKitDOMDOMWindow * w = webkit_dom_document_get_default_view (d); WebKitDOMElement * body = WEBKIT_DOM_ELEMENT(webkit_dom_document_get_body (d)); /* force change if scrolled to top */ long scroll_top = webkit_dom_element_get_scroll_top (body); force_change = force_change || (scroll_top == 0); if (!is_hidden (focused_message)) { /* if the message is expanded, check if we should move focus * to the previous element */ LOG (debug) << "fpe: prev, not hidden"; auto s = *std::find_if ( state.messages().begin (), state.messages().end (), [&] (auto &m) { return m.mid () == focused_message; }); /* focus previous focusable element */ auto next_e = std::find_if ( s.elements().rbegin() + (s.elements().size() - focused_element), s.elements().rend (), [&] (auto &e) { return e.focusable (); }); if (next_e != s.elements().rend()) { /* check if the prev element is in full view */ eid = next_e->sid (); LOG (debug) << "fpe: more prev items: " << eid; if (force_change || DomUtils::in_view (page, eid)) { focused_element = std::distance (s.elements ().begin (), next_e.base() -1); apply_focus (focused_message, focused_element); if (next_e->id() != -1) { /* if part element (always id == -1), don't scroll to empty part */ scroll_to_element (eid); } g_object_unref (body); g_object_unref (w); g_object_unref (d); return; } /* fall through to scroll */ } else { /* focus previous message if in view */ auto s = std::find_if ( state.messages().begin (), state.messages().end (), [&] (auto &m) { return m.mid () == focused_message; }); s--; if (s >= state.messages().begin () && ( force_change || DomUtils::in_view (page, "message_" + s->mid ()) )) { focus_previous_message (false); g_object_unref (body); g_object_unref (w); g_object_unref (d); return; } /* fall through to scroll */ } } else { /* move focus to previous message if in view or force_change */ auto s = std::find_if ( state.messages().begin (), state.messages().end (), [&] (auto &m) { return m.mid () == focused_message; }); s--; if (s >= state.messages().begin () && ( force_change || DomUtils::in_view (page, "message_" + s->mid ()) )) { focus_previous_message (false); g_object_unref (body); g_object_unref (w); g_object_unref (d); return; } /* fall through to scroll */ } /* standard behaviour */ webkit_dom_dom_window_scroll_by (w, 0, -STEP); if (!force_change) { /* we have scrolled */ update_focus_to_view (); } g_object_unref (body); g_object_unref (w); g_object_unref (d); } void AstroidExtension::focus_next_message () { if (edit_mode) return; auto s = std::find_if ( state.messages().begin (), state.messages().end (), [&] (auto &m) { return m.mid () == focused_message; }); s++; if (s < state.messages().end ()) { focused_message = s->mid (); focused_element = 0; // start at top apply_focus (focused_message, focused_element); scroll_to_element ("message_" + focused_message); } } void AstroidExtension::focus_previous_message (bool focus_top) { if (edit_mode) return; LOG (debug) << "prev message"; auto s = std::find_if ( state.messages().begin (), state.messages().end (), [&] (auto &m) { return m.mid () == focused_message; }); s--; if (s >= state.messages().begin ()) { focused_message = s->mid(); if (!focus_top && !is_hidden (focused_message)) { /* focus last focusable element */ auto next_e = std::find_if ( s->elements().rbegin(), s->elements().rend (), [&] (auto &e) { return e.focusable (); }); if (next_e != s->elements ().rend ()) { focused_element = std::distance (s->elements ().begin (), next_e.base() -1); } else { focused_element = 0; } } else { focused_element = 0; } apply_focus (focused_message, focused_element); scroll_to_element ("message_" + focused_message); } } void AstroidExtension::scroll_to_element (ustring eid) { LOG (debug) << "scrolling to: " << eid; if (eid.empty()) { LOG (debug) << "attempted to scroll to unspecified id."; return; } WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); WebKitDOMElement * e = webkit_dom_document_get_element_by_id (d, eid.c_str()); webkit_dom_element_scroll_into_view_if_needed (e, false); g_object_unref (e); g_object_unref (d); return; } void AstroidExtension::handle_navigate (AstroidMessages::Navigate &n) { std::string _t = AstroidMessages::Navigate_Type_descriptor ()->FindValueByNumber (n.type ())->name (); LOG (debug) << "navigating, type: " << _t; WebKitDOMDocument * d = webkit_web_page_get_dom_document (page); WebKitDOMDOMWindow * w = webkit_dom_document_get_default_view (d); if (n.type () == AstroidMessages::Navigate_Type_VisualBig) { if (n.direction () == AstroidMessages::Navigate_Direction_Down) { webkit_dom_dom_window_scroll_by (w, 0, BIG_JUMP); } else { webkit_dom_dom_window_scroll_by (w, 0, -BIG_JUMP); } update_focus_to_view (); } else if (n.type () == AstroidMessages::Navigate_Type_VisualPage) { if (n.direction () == AstroidMessages::Navigate_Direction_Down) { webkit_dom_dom_window_scroll_by (w, 0, PAGE_JUMP); } else { webkit_dom_dom_window_scroll_by (w, 0, -PAGE_JUMP); } update_focus_to_view (); } else if (n.type () == AstroidMessages::Navigate_Type_VisualElement) { if (n.direction () == AstroidMessages::Navigate_Direction_Down) { focus_next_element (false); } else { focus_previous_element (false); } } else if (n.type () == AstroidMessages::Navigate_Type_Element) { if (n.direction () == AstroidMessages::Navigate_Direction_Specific) { apply_focus (n.mid(), n.element ()); if (n.element () == 0) { scroll_to_element ("message_" + n.mid()); } else { scroll_to_element (ustring::compose ("%1", n.element ())); } } else if (n.direction () == AstroidMessages::Navigate_Direction_Down) { focus_next_element (true); } else { focus_previous_element (true); } } else if (n.type () == AstroidMessages::Navigate_Type_Message) { if (n.direction () == AstroidMessages::Navigate_Direction_Down) { focus_next_message (); } else { focus_previous_message (n.focus_top()); } } else if (n.type () == AstroidMessages::Navigate_Type_FocusView) { update_focus_to_view (); } else if (n.type () == AstroidMessages::Navigate_Type_Extreme) { if (n.direction () == AstroidMessages::Navigate_Direction_Down) { WebKitDOMElement * body = WEBKIT_DOM_ELEMENT(webkit_dom_document_get_body (d)); double scroll_height = webkit_dom_element_get_scroll_height (body); webkit_dom_dom_window_scroll_to (w, 0, scroll_height); /* focus last element of last message */ auto s = --state.messages ().end (); focused_message = s->mid (); if (is_hidden (focused_message)) { focused_element = 0; } else { auto next_e = std::find_if ( s->elements().rbegin(), s->elements().rend (), [&] (auto &e) { return e.focusable (); }); if (next_e != s->elements ().rend ()) { focused_element = std::distance (s->elements ().begin (), next_e.base() -1); } else { focused_element = 0; } } apply_focus (focused_message, focused_element); g_object_unref (body); } else { webkit_dom_dom_window_scroll_to (w, 0, 0); apply_focus (state.messages().begin()->mid (), 0); } } LOG (debug) << "navigation done."; g_object_unref (w); g_object_unref (d); ack (true); } astroid-0.14/src/modes/thread_view/webextension/tvextension.hh000066400000000000000000000142741335422170400247340ustar00rootroot00000000000000# pragma once # include # include # include # include # include # include # include # include # include # include "messages.pb.h" # define refptr Glib::RefPtr typedef Glib::ustring ustring; namespace logging = boost::log; extern "C" { static void web_page_created_callback (WebKitWebExtension *extension, WebKitWebPage *web_page, gpointer user_data); G_MODULE_EXPORT void webkit_web_extension_initialize_with_user_data (WebKitWebExtension *extension, gpointer pipes); bool web_page_send_request ( WebKitWebPage * web_page, WebKitURIRequest * request, WebKitURIResponse * response, gpointer user_data); } class AstroidExtension { public: AstroidExtension (WebKitWebExtension *, gpointer); ~AstroidExtension (); void page_created (WebKitWebExtension *, WebKitWebPage *, gpointer); bool send_request ( WebKitWebPage * web_page, WebKitURIRequest * request, WebKitURIResponse * response, gpointer user_data); const int MAX_PREVIEW_LEN = 80; const int INDENT_PX = 20; private: WebKitWebExtension * extension; WebKitWebPage * page; refptr cli; refptr sock; refptr istream; refptr ostream; std::mutex m_ostream; std::thread reader_t; void reader (); bool run = true; refptr reader_cancel; void ack (bool success); void init_console_log (); void init_sys_log (); const std::string log_ident = "astroid.wext"; std::map sevmap = { std::pair("trace" , logging::trivial::trace), std::pair("debug" , logging::trivial::debug), std::pair("info" , logging::trivial::info), std::pair("warning", logging::trivial::warning), std::pair("error" , logging::trivial::error), std::pair("fatal" , logging::trivial::fatal), }; WebKitDOMNode * container; void handle_page (AstroidMessages::Page &s); ustring part_css; bool page_ready = false; bool allow_remote_resources = false; std::vector allowed_uris = { // prefix of local uris for loading image thumbnails "data:image/png;base64", "data:image/jpeg;base64", }; void reload_images (); /* state */ bool edit_mode = false; AstroidMessages::State state; std::map messages; void handle_state (AstroidMessages::State &m); void clear_messages (AstroidMessages::ClearMessage &c); void set_indent (bool); bool indent_messages; void handle_mark (AstroidMessages::Mark &m); bool is_hidden (ustring); void set_hidden (ustring, bool); void add_message (AstroidMessages::Message &m); void remove_message (AstroidMessages::Message &m); void update_message (AstroidMessages::UpdateMessage &m); void set_message_html (AstroidMessages::Message m, WebKitDOMHTMLElement * div_message); void create_message_part_html ( const AstroidMessages::Message &m, const AstroidMessages::Message::Chunk &c, WebKitDOMHTMLElement * span_body); void create_body_part ( const AstroidMessages::Message &message, const AstroidMessages::Message::Chunk &c, WebKitDOMHTMLElement * span_body); void set_iframe_src (ustring, ustring, ustring); void create_sibling_part ( /* const AstroidMessages::Message &message, */ const AstroidMessages::Message::Chunk &c, WebKitDOMHTMLElement * span_body); void insert_mime_messages (AstroidMessages::Message &m, WebKitDOMHTMLElement * div_message); void insert_attachments (AstroidMessages::Message &m, WebKitDOMHTMLElement * div_message); void message_render_tags (AstroidMessages::Message &m, WebKitDOMHTMLElement * div_message); void message_update_css_tags (AstroidMessages::Message &m, WebKitDOMHTMLElement * div_message); refptr marked_icon; refptr attachment_icon; static const int ATTACHMENT_ICON_WIDTH = 35; void load_marked_icon (WebKitDOMHTMLElement * div_message); void set_attachment_icon (WebKitDOMHTMLElement * div_message); /* headers */ void insert_header_date (ustring &header, AstroidMessages::Message); void insert_header_address (ustring &header, ustring title, AstroidMessages::Address a, bool important); void insert_header_address_list (ustring &header, ustring title, AstroidMessages::AddressList al, bool important); void insert_header_row (ustring &header, ustring title, ustring value, bool important); ustring create_header_row (ustring title, ustring value, bool important, bool escape, bool noprint = false); /* warning and info */ void set_warning (AstroidMessages::Info &); void hide_warning (AstroidMessages::Info &); void set_info (AstroidMessages::Info &); void hide_info (AstroidMessages::Info &); /* focus and scrolling */ ustring focused_message = ""; int focused_element = -1; void handle_focus (AstroidMessages::Focus &m); void apply_focus (ustring mid, int element); void update_focus_to_view (); void scroll_to_element (ustring eid); void focus_next_element (bool force_change); void focus_previous_element (bool force_change); void focus_next_message (); void focus_previous_message (bool focus_top); const int STEP = 35; const int BIG_JUMP = 150; const int PAGE_JUMP = 600; void handle_navigate (AstroidMessages::Navigate &); }; AstroidExtension * ext; astroid-0.14/src/plugin/000077500000000000000000000000001335422170400151715ustar00rootroot00000000000000astroid-0.14/src/plugin/astroid_activatable.c000066400000000000000000000101171335422170400213410ustar00rootroot00000000000000# include "astroid_activatable.h" /** * SECTION: astroid_activatable * @short_description: Interface for activatable extensions on the shell * @see_also: #PeasExtensionSet * * #AstroidActivatable is an interface which should be implemented by * extensions that should be activated on the Liferea main window. **/ G_DEFINE_INTERFACE (AstroidActivatable, astroid_activatable, G_TYPE_OBJECT) void astroid_activatable_default_init (AstroidActivatableInterface *iface) { static gboolean initialized = FALSE; (void)(iface); /* unused */ if (!initialized) { /** * AstroidActivatable:window: * * The window property contains the gtr window for this * #AstroidActivatable instance. */ /* g_object_interface_install_property (iface, g_param_spec_object ("shell", "Shell", "The Liferea shell", ASTROID_TYPE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); */ initialized = TRUE; } } /** * astroid_activatable_activate: * @activatable: A #AstroidActivatable. * * Activates the extension on the shell property. */ void astroid_activatable_activate (AstroidActivatable * activatable) { AstroidActivatableInterface *iface; g_return_if_fail (ASTROID_IS_ACTIVATABLE (activatable)); iface = ASTROID_ACTIVATABLE_GET_IFACE (activatable); if (iface->activate) iface->activate (activatable); } /** * astroid_activatable_deactivate: * @activatable: A #AstroidActivatable. * * Deactivates the extension on the shell property. */ void astroid_activatable_deactivate (AstroidActivatable * activatable) { AstroidActivatableInterface *iface; g_return_if_fail (ASTROID_IS_ACTIVATABLE (activatable)); iface = ASTROID_ACTIVATABLE_GET_IFACE (activatable); if (iface->deactivate) iface->deactivate (activatable); } /** * astroid_activatable_update_state: * @activatable: A #AstroidActivatable. * * Triggers an update of the extension internal state to take into account * state changes in the window, due to some event or user action. */ void astroid_activatable_update_state (AstroidActivatable * activatable) { AstroidActivatableInterface *iface; g_return_if_fail (ASTROID_IS_ACTIVATABLE (activatable)); iface = ASTROID_ACTIVATABLE_GET_IFACE (activatable); if (iface->update_state) iface->update_state (activatable); } /** * astroid_activatable_get_user_agent: * @activatable: A #AstroidActivatable. * * Returns: (transfer none): A #string. */ const char * astroid_activatable_get_user_agent (AstroidActivatable * activatable) { AstroidActivatableInterface *iface; if (!ASTROID_IS_ACTIVATABLE (activatable)) return NULL; iface = ASTROID_ACTIVATABLE_GET_IFACE (activatable); if (iface->get_user_agent) return iface->get_user_agent (activatable); return NULL; } /** * astroid_activatable_generate_mid: * @activatable: A #AstroidActivatable. * * Returns: (transfer none): A #string. */ const char * astroid_activatable_generate_mid (AstroidActivatable * activatable) { AstroidActivatableInterface *iface; if (!ASTROID_IS_ACTIVATABLE (activatable)) return NULL; iface = ASTROID_ACTIVATABLE_GET_IFACE (activatable); if (iface->generate_mid) return iface->generate_mid (activatable); return NULL; } /** * astroid_activatable_get_tag_colors: * @activatable: A #AstroidThreadViewActivatable. * @tag : A #utf8. * @bg : A #utf8. * * Returns: (element-type utf8) (transfer container): List of forground and background color for tag. */ GList * astroid_activatable_get_tag_colors (AstroidActivatable * activatable, const char * tag, const char * bg) { AstroidActivatableInterface *iface; if (!ASTROID_IS_ACTIVATABLE (activatable)) return NULL; iface = ASTROID_ACTIVATABLE_GET_IFACE (activatable); if (iface->get_tag_colors) return iface->get_tag_colors (activatable, tag, bg); return NULL; } astroid-0.14/src/plugin/astroid_activatable.h000066400000000000000000000033761335422170400213570ustar00rootroot00000000000000# pragma once # include G_BEGIN_DECLS #define ASTROID_TYPE_ACTIVATABLE (astroid_activatable_get_type ()) #define ASTROID_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ASTROID_TYPE_ACTIVATABLE, AstroidActivatable)) #define ASTROID_ACTIVATABLE_IFACE(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), ASTROID_TYPE_ACTIVATABLE, AstroidActivatableInterface)) #define ASTROID_IS_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ASTROID_TYPE_ACTIVATABLE)) #define ASTROID_ACTIVATABLE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), ASTROID_TYPE_ACTIVATABLE, AstroidActivatableInterface)) typedef struct _AstroidActivatable AstroidActivatable; typedef struct _AstroidActivatableInterface AstroidActivatableInterface; struct _AstroidActivatableInterface { GTypeInterface g_iface; void (*activate) (AstroidActivatable * activatable); void (*deactivate) (AstroidActivatable * activatable); void (*update_state) (AstroidActivatable * activatable); const char * (*get_user_agent) (AstroidActivatable * activatable); const char * (*generate_mid) (AstroidActivatable * activatable); GList * (*get_tag_colors) (AstroidActivatable * activatable, const char * tag, const char * bg); }; GType astroid_activatable_get_type (void) G_GNUC_CONST; void astroid_activatable_activate (AstroidActivatable *activatable); void astroid_activatable_deactivate (AstroidActivatable *activatable); void astroid_activatable_update_state (AstroidActivatable *activatable); const char * astroid_activatable_get_user_agent (AstroidActivatable * activatable); const char * astroid_activatable_generate_mid (AstroidActivatable * activatable); GList * astroid_activatable_get_tag_colors (AstroidActivatable * activatable, const char * tag, const char * bg); G_END_DECLS astroid-0.14/src/plugin/gir_main.c000066400000000000000000000007651335422170400171320ustar00rootroot00000000000000/* * Dummy C program to hand to g-ir-scanner for finding the * Activatable classes. * */ # include # include "astroid_activatable.h" int main (int argc, char ** argv) { GOptionContext *ctx; GError *error = NULL; ctx = g_option_context_new (NULL); g_option_context_add_group (ctx, g_irepository_get_option_group ()); if (!g_option_context_parse (ctx, &argc, &argv, &error)) { g_print ("astroid girmain: %s\n", error->message); return 1; } return 0; } astroid-0.14/src/plugin/manager.cc000066400000000000000000000320601335422170400171130ustar00rootroot00000000000000# include # include # include # include # include # include "manager.hh" # include "astroid.hh" # include "config.hh" # include "build_config.hh" # include "utils/vector_utils.hh" # include "message_thread.hh" # include "astroid_activatable.h" # include "thread_index_activatable.h" # include "thread_view_activatable.h" # include "modes/thread_index/thread_index.hh" # include "modes/thread_view/thread_view.hh" using std::endl; namespace bfs = boost::filesystem; /* remember to set GI_TYPELIB_PATH=$(pwd) when testing */ namespace Astroid { PluginManager::PluginManager (bool _disabled, bool _test) { LOG (info) << "plugins: starting manager.."; disabled = _disabled; test = _test; if (disabled) { LOG (info) << "plugins: disabled."; return; } engine = peas_engine_get_default (); peas_engine_enable_loader (engine, "python3"); peas_engine_enable_loader (engine, "lua5.1"); bfs::path plugin_dir = astroid->standard_paths().plugin_dir; /* add installed location */ if (!test) { bfs::path prefix_p (PREFIX); prefix_p = prefix_p / bfs::path ("share/astroid/plugins"); LOG (debug) << "plugins: adding path: " << prefix_p.c_str (); peas_engine_prepend_search_path (engine, prefix_p.c_str (), NULL); } else { char * g = getenv ("GI_TYPELIB_PATH"); if (g == NULL) { LOG (warn) << "plugins: setting GI_TYPELIB_PATH: " << bfs::current_path ().c_str (); setenv ("GI_TYPELIB_PATH", bfs::current_path ().c_str (), 1); } else { LOG (error) << "plugins: GI_TYPELIB_PATH already set, not touching.."; } } /* set env ASTROID_CONFIG for plugins */ setenv ("ASTROID_CONFIG", astroid->standard_paths().config_file.c_str (), 1); /* adding local plugins */ LOG (debug) << "plugin: adding path: " << plugin_dir.c_str (); peas_engine_prepend_search_path (engine, plugin_dir.c_str (), NULL); refresh (); } PluginManager::~PluginManager () { } void PluginManager::refresh () { if (disabled) return; LOG (debug) << "plugins: refreshing.."; peas_engine_rescan_plugins (engine); const GList * ps = peas_engine_get_plugin_list (engine); LOG (debug) << "plugins: found " << g_list_length ((GList *) ps) << " plugins."; for (; ps != NULL; ps = ps->next) { auto p = (PeasPluginInfo *) ps->data; LOG (debug) << "plugins: loading: " << peas_plugin_info_get_name (p); bool e = peas_engine_load_plugin (engine, p); if (e) { LOG (debug) << "plugins: loaded: " << peas_plugin_info_get_name (p); bool found = false; /* a plugin might implement more than one extension */ if (peas_engine_provides_extension (engine, p, ASTROID_TYPE_ACTIVATABLE)) { LOG (debug) << "plugins: registering astroid plugin.."; astroid_plugins.push_back (p); found = true; } if (peas_engine_provides_extension (engine, p, ASTROID_THREADINDEX_TYPE_ACTIVATABLE)) { LOG (debug) << "plugins: registering threadindex plugin.."; thread_index_plugins.push_back (p); found = true; } if (peas_engine_provides_extension (engine, p, ASTROID_THREADVIEW_TYPE_ACTIVATABLE)) { LOG (debug) << "plugins: registering threadview plugin.."; thread_view_plugins.push_back (p); found = true; } if (!found) { LOG (error) << "plugin: " << peas_plugin_info_get_name (p) << " does not implement any known extension."; } } else { LOG (error) << "plugins: failed loading: " << peas_plugin_info_get_name (p); } } } /* ******************** * Extension * ********************/ PluginManager::Extension::Extension () { engine = astroid->plugin_manager->engine; } PluginManager::Extension::~Extension () { /* make sure all extensions have been deactivated in subclass destructor */ LOG (debug) << "extension: destruct."; if (extensions) g_object_unref (extensions); } /* ******************** * AstroidExtension * ********************/ PluginManager::AstroidExtension::AstroidExtension (Astroid * a) { astroid = a; if (astroid->plugin_manager->disabled) return; /* loading extensions for each plugin */ extensions = peas_extension_set_new (engine, ASTROID_TYPE_ACTIVATABLE, NULL); for ( PeasPluginInfo *p : astroid->plugin_manager->astroid_plugins) { LOG (debug) << "plugins: activating astroid plugin: " << peas_plugin_info_get_name (p); PeasExtension * pe = peas_extension_set_get_extension (extensions, p); if (ASTROID_IS_ACTIVATABLE( pe)) { astroid_activatable_activate (ASTROID_ACTIVATABLE(pe)); } } active = true; } void PluginManager::AstroidExtension::deactivate () { active = false; for ( PeasPluginInfo *p : astroid->plugin_manager->astroid_plugins) { LOG (debug) << "plugins: deactivating: " << peas_plugin_info_get_name (p); PeasExtension * pe = peas_extension_set_get_extension (extensions, p); if (ASTROID_IS_ACTIVATABLE( pe)) { astroid_activatable_deactivate (ASTROID_ACTIVATABLE(pe)); } } } bool PluginManager::AstroidExtension::get_user_agent (ustring &out) { if (!active || astroid->plugin_manager->disabled) return false; for (PeasPluginInfo * p : astroid->plugin_manager->astroid_plugins) { PeasExtension * pe = peas_extension_set_get_extension (extensions, p); const char * ua = astroid_activatable_get_user_agent (ASTROID_ACTIVATABLE(pe)); if (ua != NULL) { out = ustring (ua); return true; } } return false; } bool PluginManager::AstroidExtension::generate_mid (ustring &out) { if (!active || astroid->plugin_manager->disabled) return false; for (PeasPluginInfo * p : astroid->plugin_manager->astroid_plugins) { PeasExtension * pe = peas_extension_set_get_extension (extensions, p); const char * ua = astroid_activatable_generate_mid (ASTROID_ACTIVATABLE(pe)); if (ua != NULL) { out = ustring (ua); return true; } } return false; } std::pair PluginManager::AstroidExtension::get_tag_colors (ustring tag, ustring bg) { std::pair clrs = { "", "" }; if (!active || astroid->plugin_manager->disabled) return clrs; for (PeasPluginInfo * p : astroid->plugin_manager->astroid_plugins) { PeasExtension * pe = peas_extension_set_get_extension (extensions, p); GList * mclrs = astroid_activatable_get_tag_colors (ASTROID_ACTIVATABLE(pe), tag.c_str (), bg.c_str ()); if (mclrs != NULL) { std::vector _mclrs = Glib::ListHandler::list_to_vector (mclrs, Glib::OWNERSHIP_NONE); if (_mclrs.size () != 2) { LOG (error) << "plugins: AstroidPlugin returend other than two elements for tag color."; continue; } clrs.first = _mclrs[0]; clrs.second = _mclrs[1]; } } return clrs; } /* ******************** * ThreadIndexExtension * ********************/ PluginManager::ThreadIndexExtension::ThreadIndexExtension (ThreadIndex * ti) { thread_index = ti; if (astroid->plugin_manager->disabled) return; /* loading extensions for each plugin */ extensions = peas_extension_set_new (engine, ASTROID_THREADINDEX_TYPE_ACTIVATABLE, "thread_index", ti->gobj (), NULL); for ( PeasPluginInfo *p : astroid->plugin_manager->thread_index_plugins) { LOG (debug) << "plugins: activating threadindex plugin: " << peas_plugin_info_get_name (p); PeasExtension * pe = peas_extension_set_get_extension (extensions, p); if (ASTROID_IS_THREADINDEX_ACTIVATABLE( pe)) { astroid_threadindex_activatable_activate (ASTROID_THREADINDEX_ACTIVATABLE(pe)); } } active = true; } void PluginManager::ThreadIndexExtension::deactivate () { active = false; for ( PeasPluginInfo *p : astroid->plugin_manager->thread_index_plugins) { LOG (debug) << "plugins: deactivating: " << peas_plugin_info_get_name (p); PeasExtension * pe = peas_extension_set_get_extension (extensions, p); if (ASTROID_IS_THREADINDEX_ACTIVATABLE( pe)) { astroid_threadindex_activatable_deactivate (ASTROID_THREADINDEX_ACTIVATABLE(pe)); } } } bool PluginManager::ThreadIndexExtension::format_tags ( std::vector tags, ustring bg, bool selected, ustring &out) { if (!active || astroid->plugin_manager->disabled) return false; for (PeasPluginInfo * p : astroid->plugin_manager->thread_index_plugins) { PeasExtension * pe = peas_extension_set_get_extension (extensions, p); if (pe) { char * tgs = astroid_threadindex_activatable_format_tags (ASTROID_THREADINDEX_ACTIVATABLE(pe), bg.c_str (), Glib::ListHandler::vector_to_list (tags).data (), selected); if (tgs != NULL) { out = ustring (tgs); return true; } } } return false; } /* ************************ * ThreadViewExtension * ************************/ PluginManager::ThreadViewExtension::ThreadViewExtension (ThreadView * tv) { thread_view = tv; if (astroid->plugin_manager->disabled) return; /* loading extensions for each plugin */ extensions = peas_extension_set_new (engine, ASTROID_THREADVIEW_TYPE_ACTIVATABLE, "thread_view", tv->gobj (), "web_view", tv->webview, NULL); for ( PeasPluginInfo *p : astroid->plugin_manager->thread_view_plugins) { LOG (debug) << "plugins: activating threadview plugin: " << peas_plugin_info_get_name (p); PeasExtension * pe = peas_extension_set_get_extension (extensions, p); if (ASTROID_IS_THREADVIEW_ACTIVATABLE( pe)) { astroid_threadview_activatable_activate (ASTROID_THREADVIEW_ACTIVATABLE(pe)); } } active = true; } void PluginManager::ThreadViewExtension::deactivate () { active = false; for ( PeasPluginInfo *p : astroid->plugin_manager->thread_view_plugins) { LOG (debug) << "plugins: deactivating: " << peas_plugin_info_get_name (p); PeasExtension * pe = peas_extension_set_get_extension (extensions, p); if (ASTROID_IS_THREADVIEW_ACTIVATABLE( pe)) { astroid_threadview_activatable_deactivate (ASTROID_THREADVIEW_ACTIVATABLE(pe)); } } } bool PluginManager::ThreadViewExtension::get_avatar_uri (ustring email, ustring type, int size, refptr m, ustring &out) { if (!active || astroid->plugin_manager->disabled) return false; for (PeasPluginInfo * p : astroid->plugin_manager->thread_view_plugins) { PeasExtension * pe = peas_extension_set_get_extension (extensions, p); char * uri = astroid_threadview_activatable_get_avatar_uri (ASTROID_THREADVIEW_ACTIVATABLE(pe), email.c_str (), type.c_str (), size, m->message); if (uri != NULL) { out = ustring (uri); return true; } } return false; } std::vector PluginManager::ThreadViewExtension::get_allowed_uris () { std::vector uris; if (!active || astroid->plugin_manager->disabled) return uris; for (PeasPluginInfo * p : astroid->plugin_manager->thread_view_plugins) { PeasExtension * pe = peas_extension_set_get_extension (extensions, p); GList * muris = astroid_threadview_activatable_get_allowed_uris (ASTROID_THREADVIEW_ACTIVATABLE(pe)); if (muris != NULL) { std::vector _muris = Glib::ListHandler::list_to_vector (muris, Glib::OWNERSHIP_NONE); uris.insert (uris.end (), _muris.begin (), _muris.end ()); } } return uris; } bool PluginManager::ThreadViewExtension::format_tags ( std::vector tags, ustring bg, bool selected, ustring &out) { if (!active || astroid->plugin_manager->disabled) return false; for (PeasPluginInfo * p : astroid->plugin_manager->thread_view_plugins) { PeasExtension * pe = peas_extension_set_get_extension (extensions, p); if (pe) { char * tgs = astroid_threadview_activatable_format_tags (ASTROID_THREADVIEW_ACTIVATABLE(pe), bg.c_str (), Glib::ListHandler::vector_to_list (tags).data (), selected); if (tgs != NULL) { out = ustring (tgs); return true; } } } return false; } std::string PluginManager::ThreadViewExtension::filter_part ( std::string input_text, std::string input_html, std::string mime_type, bool is_patch) { if (!active || astroid->plugin_manager->disabled) return input_html; for (PeasPluginInfo * p : astroid->plugin_manager->thread_view_plugins) { PeasExtension * pe = peas_extension_set_get_extension (extensions, p); if (pe) { char * out = astroid_threadview_activatable_filter_part (ASTROID_THREADVIEW_ACTIVATABLE(pe), input_text.c_str (), input_html.c_str (), mime_type.c_str (), is_patch); if (out != NULL) { input_html = std::string (out); return input_html; } } } return input_html; } } astroid-0.14/src/plugin/manager.hh000066400000000000000000000044161335422170400171310ustar00rootroot00000000000000# pragma once # include # include # include "astroid.hh" # include "proto.hh" namespace Astroid { class PluginManager { public: PluginManager (bool disabled, bool test); ~PluginManager (); void refresh (); PeasEngine * engine; std::vector astroid_plugins; std::vector thread_index_plugins; std::vector thread_view_plugins; class Extension { protected: PeasEngine * engine = NULL; PeasExtensionSet * extensions = NULL; bool active = false; public: Extension (); virtual ~Extension (); virtual void deactivate () = 0; }; class AstroidExtension : public Extension { private: Astroid * astroid; public: AstroidExtension (Astroid * a); void deactivate () override; bool get_user_agent (ustring &); bool generate_mid (ustring &); std::pair get_tag_colors (ustring tag, ustring bg); }; AstroidExtension * astroid_extension; // set up from Astroid class ThreadIndexExtension : public Extension { private: ThreadIndex * thread_index; public: ThreadIndexExtension (ThreadIndex * ti); void deactivate () override; bool format_tags (std::vector tags, ustring bg, bool selected, ustring &out); }; class ThreadViewExtension : public Extension { private: ThreadView * thread_view; public: ThreadViewExtension (ThreadView * ti); void deactivate () override; std::vector get_allowed_uris (); bool get_avatar_uri (ustring email, ustring type, int size, refptr m, ustring &out); bool format_tags (std::vector tags, ustring bg, bool selected, ustring &out); std::string filter_part (std::string input_text, std::string input_html, std::string mime_type, bool is_patch); }; friend class ThreadIndexExtension; friend class ThreadViewExtension; friend class AstroidExtension; friend class Extension; protected: bool disabled, test; }; } astroid-0.14/src/plugin/thread_index_activatable.c000066400000000000000000000065621335422170400223430ustar00rootroot00000000000000# include "thread_index_activatable.h" # include /** * SECTION: astroid_threadindex_activatable * @short_description: Interface for activatable extensions on the shell * @see_also: #PeasExtensionSet * * #AstroidThreadIndexActivatable is an interface which should be implemented by * extensions that should be activated on the Liferea main window. **/ G_DEFINE_INTERFACE (AstroidThreadIndexActivatable, astroid_threadindex_activatable, G_TYPE_OBJECT) void astroid_threadindex_activatable_default_init (AstroidThreadIndexActivatableInterface *iface) { static gboolean initialized = FALSE; if (!initialized) { /** * AstroidThreadIndexActivatable:window: * * The window property contains the gtr window for this * #AstroidActivatable instance. */ g_object_interface_install_property (iface, g_param_spec_object ("thread_index", "thread_index", "The ThreadIndex box", GTK_TYPE_BOX, G_PARAM_READWRITE)); initialized = TRUE; } } /** * astroid_threadindex_activatable_activate: * @activatable: A #AstroidThreadIndexActivatable. * * Activates the extension on the shell property. */ void astroid_threadindex_activatable_activate (AstroidThreadIndexActivatable * activatable) { AstroidThreadIndexActivatableInterface *iface; g_return_if_fail (ASTROID_IS_THREADINDEX_ACTIVATABLE (activatable)); iface = ASTROID_THREADINDEX_ACTIVATABLE_GET_IFACE (activatable); if (iface->activate) iface->activate (activatable); } /** * astroid_threadindex_activatable_deactivate: * @activatable: A #AstroidThreadIndexActivatable. * * Deactivates the extension on the shell property. */ void astroid_threadindex_activatable_deactivate (AstroidThreadIndexActivatable * activatable) { AstroidThreadIndexActivatableInterface *iface; g_return_if_fail (ASTROID_IS_THREADINDEX_ACTIVATABLE (activatable)); iface = ASTROID_THREADINDEX_ACTIVATABLE_GET_IFACE (activatable); if (iface->deactivate) iface->deactivate (activatable); } /** * astroid_threadindex_activatable_update_state: * @activatable: A #AstroidThreadIndexActivatable. * * Triggers an update of the extension internal state to take into account * state changes in the window, due to some event or user action. */ void astroid_threadindex_activatable_update_state (AstroidThreadIndexActivatable * activatable) { AstroidThreadIndexActivatableInterface *iface; g_return_if_fail (ASTROID_IS_THREADINDEX_ACTIVATABLE (activatable)); iface = ASTROID_THREADINDEX_ACTIVATABLE_GET_IFACE (activatable); if (iface->update_state) iface->update_state (activatable); } /** * astroid_threadindex_activatable_format_tags: * @activatable: A #AstroidThreadIndexActivatable. * @bg : A #utf8. * @tags: (element-type utf8) (transfer none): List of #utf8. * @selected: A #bool. * */ char * astroid_threadindex_activatable_format_tags (AstroidThreadIndexActivatable * activatable, const char * bg, GList * tags, bool selected) { AstroidThreadIndexActivatableInterface *iface; if (!ASTROID_IS_THREADINDEX_ACTIVATABLE (activatable)) return NULL; iface = ASTROID_THREADINDEX_ACTIVATABLE_GET_IFACE (activatable); if (iface->format_tags) return iface->format_tags (activatable, bg, tags, selected); return NULL; } astroid-0.14/src/plugin/thread_index_activatable.h000066400000000000000000000035141335422170400223420ustar00rootroot00000000000000# pragma once # include # include G_BEGIN_DECLS #define ASTROID_THREADINDEX_TYPE_ACTIVATABLE (astroid_threadindex_activatable_get_type ()) #define ASTROID_THREADINDEX_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ASTROID_THREADINDEX_TYPE_ACTIVATABLE, AstroidThreadIndexActivatable)) #define ASTROID_THREADINDEX_ACTIVATABLE_IFACE(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), ASTROID_THREADINDEX_TYPE_ACTIVATABLE, AstroidThreadIndexActivatableInterface)) #define ASTROID_IS_THREADINDEX_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ASTROID_THREADINDEX_TYPE_ACTIVATABLE)) #define ASTROID_THREADINDEX_ACTIVATABLE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), ASTROID_THREADINDEX_TYPE_ACTIVATABLE, AstroidThreadIndexActivatableInterface)) typedef struct _AstroidThreadIndexActivatable AstroidThreadIndexActivatable; typedef struct _AstroidThreadIndexActivatableInterface AstroidThreadIndexActivatableInterface; struct _AstroidThreadIndexActivatableInterface { GTypeInterface g_iface; void (*activate) (AstroidThreadIndexActivatable * activatable); void (*deactivate) (AstroidThreadIndexActivatable * activatable); void (*update_state) (AstroidThreadIndexActivatable * activatable); char* (*format_tags) (AstroidThreadIndexActivatable * activatable, const char *bg, GList * tags, bool selected); }; GType astroid_threadindex_activatable_get_type (void) G_GNUC_CONST; void astroid_threadindex_activatable_activate (AstroidThreadIndexActivatable *activatable); void astroid_threadindex_activatable_deactivate (AstroidThreadIndexActivatable *activatable); void astroid_threadindex_activatable_update_state (AstroidThreadIndexActivatable *activatable); char * astroid_threadindex_activatable_format_tags (AstroidThreadIndexActivatable * activatable, const char * bg, GList * tags, bool selected); G_END_DECLS astroid-0.14/src/plugin/thread_view_activatable.c000066400000000000000000000133031335422170400221750ustar00rootroot00000000000000# include "thread_view_activatable.h" # include # include /** * SECTION: astroid_threadview_activatable * @short_description: Interface for activatable extensions on the shell * @see_also: #PeasExtensionSet * * #AstroidthreadviewActivatable is an interface which should be implemented by * extensions that should be activated on the Liferea main window. **/ G_DEFINE_INTERFACE (AstroidThreadViewActivatable, astroid_threadview_activatable, G_TYPE_OBJECT) void astroid_threadview_activatable_default_init (AstroidThreadViewActivatableInterface *iface) { static gboolean initialized = FALSE; if (!initialized) { /** * AstroidthreadviewActivatable:window: * * The window property contains the gtr window for this * #AstroidActivatable instance. */ g_object_interface_install_property (iface, g_param_spec_object ("thread_view", "thread_view", "The threadview box", GTK_TYPE_BOX, G_PARAM_READWRITE)); g_object_interface_install_property (iface, g_param_spec_object ("web_view", "web_view", "The WebKit Webview", WEBKIT_TYPE_WEB_VIEW, G_PARAM_READWRITE)); initialized = TRUE; } } /** * astroid_threadview_activatable_activate: * @activatable: A #AstroidThreadViewActivatable. * * Activates the extension on the shell property. */ void astroid_threadview_activatable_activate (AstroidThreadViewActivatable * activatable) { AstroidThreadViewActivatableInterface *iface; g_return_if_fail (ASTROID_IS_THREADVIEW_ACTIVATABLE (activatable)); iface = ASTROID_THREADVIEW_ACTIVATABLE_GET_IFACE (activatable); if (iface->activate) iface->activate (activatable); } /** * astroid_threadview_activatable_deactivate: * @activatable: A #AstroidThreadViewActivatable. * * Deactivates the extension on the shell property. */ void astroid_threadview_activatable_deactivate (AstroidThreadViewActivatable * activatable) { AstroidThreadViewActivatableInterface *iface; g_return_if_fail (ASTROID_IS_THREADVIEW_ACTIVATABLE (activatable)); iface = ASTROID_THREADVIEW_ACTIVATABLE_GET_IFACE (activatable); if (iface->deactivate) iface->deactivate (activatable); } /** * astroid_threadview_activatable_update_state: * @activatable: A #AstroidThreadViewActivatable. * * Triggers an update of the extension internal state to take into account * state changes in the window, due to some event or user action. */ void astroid_threadview_activatable_update_state (AstroidThreadViewActivatable * activatable) { AstroidThreadViewActivatableInterface *iface; g_return_if_fail (ASTROID_IS_THREADVIEW_ACTIVATABLE (activatable)); iface = ASTROID_THREADVIEW_ACTIVATABLE_GET_IFACE (activatable); if (iface->update_state) iface->update_state (activatable); } /** * astroid_activatable_get_avatar_uri: * @activatable: A #AstroidThreadViewActivatable. * @email: A #utf8. * @type: A #string. * @size: A #int. * @message: A #GMime.Message. * * Returns: (transfer none): A #string. */ char * astroid_threadview_activatable_get_avatar_uri (AstroidThreadViewActivatable * activatable, const char * email, const char * type, int size, GMimeMessage * message) { AstroidThreadViewActivatableInterface *iface; if (!ASTROID_IS_THREADVIEW_ACTIVATABLE (activatable)) return NULL; iface = ASTROID_THREADVIEW_ACTIVATABLE_GET_IFACE (activatable); if (iface->get_avatar_uri) return iface->get_avatar_uri (activatable, email, type, size, message); return NULL; } /** * astroid_threadview_activatable_get_allowed_uris: * @activatable: A #AstroidThreadViewActivatable. * * Returns: (element-type utf8) (transfer container): List of allowed uris. */ GList * astroid_threadview_activatable_get_allowed_uris (AstroidThreadViewActivatable * activatable) { AstroidThreadViewActivatableInterface *iface; if (!ASTROID_IS_THREADVIEW_ACTIVATABLE (activatable)) return NULL; iface = ASTROID_THREADVIEW_ACTIVATABLE_GET_IFACE (activatable); if (iface->get_allowed_uris) return iface->get_allowed_uris (activatable); return NULL; } /** * astroid_threadview_activatable_format_tags: * @activatable: A #AstroidThreadViewActivatable. * @bg : A #utf8. * @tags: (element-type utf8) (transfer none): List of #utf8. * @selected: A #bool. * */ char * astroid_threadview_activatable_format_tags (AstroidThreadViewActivatable * activatable, const char * bg, GList * tags, bool selected) { AstroidThreadViewActivatableInterface *iface; if (!ASTROID_IS_THREADVIEW_ACTIVATABLE (activatable)) return NULL; iface = ASTROID_THREADVIEW_ACTIVATABLE_GET_IFACE (activatable); if (iface->format_tags) return iface->format_tags (activatable, bg, tags, selected); return NULL; } /** * astroid_threadview_activatable_filter_part: * @activatable: A #AstroidThreadViewActivatable. * @input_text : A #utf8. * @input_html : A #utf8. * @mime_type : A #utf8. * @is_patch : A #bool. * */ char * astroid_threadview_activatable_filter_part ( AstroidThreadViewActivatable * activatable, const char * input_text, const char * input_html, const char * mime_type, bool is_patch) { AstroidThreadViewActivatableInterface *iface; if (!ASTROID_IS_THREADVIEW_ACTIVATABLE (activatable)) return NULL; iface = ASTROID_THREADVIEW_ACTIVATABLE_GET_IFACE (activatable); if (iface->filter_part) return iface->filter_part (activatable, input_text, input_html, mime_type, is_patch); return NULL; } astroid-0.14/src/plugin/thread_view_activatable.h000066400000000000000000000052211335422170400222020ustar00rootroot00000000000000# pragma once # include # include # include G_BEGIN_DECLS #define ASTROID_THREADVIEW_TYPE_ACTIVATABLE (astroid_threadview_activatable_get_type ()) #define ASTROID_THREADVIEW_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ASTROID_THREADVIEW_TYPE_ACTIVATABLE, AstroidThreadViewActivatable)) #define ASTROID_THREADVIEW_ACTIVATABLE_IFACE(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), ASTROID_THREADVIEW_TYPE_ACTIVATABLE, AstroidThreadViewctivatableInterface)) #define ASTROID_IS_THREADVIEW_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ASTROID_THREADVIEW_TYPE_ACTIVATABLE)) #define ASTROID_THREADVIEW_ACTIVATABLE_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), ASTROID_THREADVIEW_TYPE_ACTIVATABLE, AstroidThreadViewActivatableInterface)) typedef struct _AstroidThreadViewActivatable AstroidThreadViewActivatable; typedef struct _AstroidThreadViewActivatableInterface AstroidThreadViewActivatableInterface; struct _AstroidThreadViewActivatableInterface { GTypeInterface g_iface; void (*activate) (AstroidThreadViewActivatable * activatable); void (*deactivate) (AstroidThreadViewActivatable * activatable); void (*update_state) (AstroidThreadViewActivatable * activatable); char* (*get_avatar_uri) (AstroidThreadViewActivatable * activatable, const char * email, const char * type, int size, GMimeMessage * message); GList* (*get_allowed_uris) (AstroidThreadViewActivatable * activatable); char* (*format_tags) (AstroidThreadViewActivatable * activatable, const char *bg, GList * tags, bool selected); char* (*filter_part) (AstroidThreadViewActivatable * activatable, const char * input_text, const char * input_html, const char * mime_type, bool is_patch); }; GType astroid_threadview_activatable_get_type (void) G_GNUC_CONST; void astroid_threadview_activatable_activate (AstroidThreadViewActivatable *activatable); void astroid_threadview_activatable_deactivate (AstroidThreadViewActivatable *activatable); void astroid_threadview_activatable_update_state (AstroidThreadViewActivatable *activatable); char * astroid_threadview_activatable_get_avatar_uri (AstroidThreadViewActivatable * activatable, const char *email, const char * type, int size, GMimeMessage * message); GList * astroid_threadview_activatable_get_allowed_uris (AstroidThreadViewActivatable * activatable); char * astroid_threadview_activatable_format_tags (AstroidThreadViewActivatable * activatable, const char * bg, GList * tags, bool selected); char * astroid_threadview_activatable_filter_part (AstroidThreadViewActivatable * activatable, const char * input_text, const char * input_html, const char * mime_type, bool is_patch); G_END_DECLS astroid-0.14/src/poll.cc000066400000000000000000000241031335422170400151500ustar00rootroot00000000000000# include # include # include # include # include # include "astroid.hh" # include "poll.hh" # include "db.hh" # include "config.hh" # include "actions/action_manager.hh" # include "utils/vector_utils.hh" using namespace std; using namespace boost::filesystem; namespace Astroid { const int Poll::DEFAULT_POLL_INTERVAL = 60; Poll::Poll (bool _auto_polling_enabled) { LOG (info) << "poll: setting up."; auto_polling_enabled = _auto_polling_enabled; poll_state = false; poll_interval = astroid->config ().get ("poll.interval"); full_refresh = astroid->config ().get ("poll.always_full_refresh"); LOG (debug) << "poll: interval: " << poll_interval; // check every 1 seconds if periodic poll has changed Glib::signal_timeout ().connect ( sigc::mem_fun (this, &Poll::periodic_polling), 1000); if (poll_interval <= 0) auto_polling_enabled = false; if (auto_polling_enabled) { // do initial poll poll (); } else { LOG (info) << "poll: periodic polling disabled."; } d_poll_state.connect (sigc::mem_fun (this, &Poll::poll_state_dispatch)); if (!full_refresh) { d_refresh.connect (sigc::mem_fun (this, &Poll::refresh_threads)); } else { d_refresh.connect (sigc::mem_fun (this, &Poll::refresh_full)); } } void Poll::close () { } void Poll::start_polling () { /* external polling is started - will eventually be completed * by a call to stop_polling */ if (external_polling) { LOG (error) << "poll: external polling already running!"; return; } LOG (info) << "poll: external polling started.."; if (m_dopoll.try_lock ()) { external_polling = true; set_poll_state (true); Db db (Db::DbMode::DATABASE_READ_ONLY); before_poll_revision = db.get_revision (); LOG (debug) << "poll: revision before poll: " << before_poll_revision; } else { LOG (error) << "poll: uh oh! poll is already running, better disable internal polling if you use external polling - expect hard crashes!"; return; } } void Poll::stop_polling () { /* external polling is now stopped */ if (!external_polling) { LOG (error) << "poll: indicated stopped external polling, but no start external polling was registered!"; return; } LOG (info) << "poll: external polling stopped."; refresh_threads (); external_polling = false; set_poll_state (false); m_dopoll.unlock (); } bool Poll::periodic_polling () { if (auto_polling_enabled) { chrono::duration elapsed = chrono::steady_clock::now() - last_poll; if (elapsed.count () >= poll_interval) { LOG (info) << "poll: periodic poll.."; poll (); } } return true; } void Poll::toggle_auto_poll () { LOG (info) << "poll: toggle auto poll: " << !auto_polling_enabled; if (poll_interval <= 0) { LOG (warn) << "poll: poll_interval = 0, setting to default: " << DEFAULT_POLL_INTERVAL; poll_interval = DEFAULT_POLL_INTERVAL; } auto_polling_enabled = !auto_polling_enabled; } bool Poll::get_auto_poll () { return auto_polling_enabled; } void Poll::cancel_poll () { LOG (warn) << "poll: cancel polling pid: " << pid; std::lock_guard lk (poll_cancel_m); if (pid > 0) { int r = kill (pid, SIGKILL); if (r == 0) { LOG (warn) << "poll: poll script killed."; } else { LOG (error) << "poll: could not kill poll script."; } } } bool Poll::poll () { LOG (debug) << "poll: requested.."; // set this here as well to avoid lots of checks last_poll = chrono::steady_clock::now (); if (m_dopoll.try_lock ()) { { Db db (Db::DbMode::DATABASE_READ_ONLY); before_poll_revision = db.get_revision (); } LOG (debug) << "poll: revision before poll: " << before_poll_revision; do_poll (); return true; } else { LOG (warn) << "poll: already in progress."; return false; } } void Poll::do_poll () { std::unique_lock lk (poll_cancel_m); set_poll_state (true); t0 = chrono::steady_clock::now (); path poll_script_uri = astroid->standard_paths().config_dir / path(poll_script); LOG (info) << "poll: polling: " << poll_script_uri.c_str (); if (!is_regular_file (poll_script_uri)) { LOG (error) << "poll: poll script does not exist or is not a regular file."; m_dopoll.unlock (); set_poll_state (false); return; } vector args = {poll_script_uri.c_str()}; try { Glib::spawn_async_with_pipes ("", args, Glib::SPAWN_DO_NOT_REAP_CHILD, sigc::slot (), &pid, NULL, &stdout, &stderr ); } catch (Glib::SpawnError &ex) { LOG (error) << "poll: exception while running poll script: " << ex.what (); set_poll_state (false); m_dopoll.unlock (); return; } catch (Glib::Error &ex) { LOG (error) << "poll: exception while running poll script: " << ex.what (); set_poll_state (false); m_dopoll.unlock (); return; } lk.unlock (); /* connect channels */ ch_stdout = Glib::IOChannel::create_from_fd (stdout); ch_stderr = Glib::IOChannel::create_from_fd (stderr); c_ch_stdout = Glib::signal_io().connect (sigc::mem_fun (this, &Poll::log_out), stdout, Glib::IO_IN | Glib::IO_HUP); c_ch_stderr = Glib::signal_io().connect (sigc::mem_fun (this, &Poll::log_err), stderr, Glib::IO_IN | Glib::IO_HUP); Glib::signal_child_watch ().connect (sigc::mem_fun (this, &Poll::poll_child_done), pid); } void Poll::poll_child_done (GPid pid, int child_status) { g_spawn_close_pid (pid); c_ch_stderr.disconnect(); c_ch_stdout.disconnect(); if (ch_stdout) { ch_stdout->close (); ch_stdout.clear (); } if (ch_stderr) { ch_stderr->close (); ch_stderr.clear (); } ::close (stdout); ::close (stderr); chrono::duration elapsed = chrono::steady_clock::now() - t0; last_poll = chrono::steady_clock::now (); if (child_status != 0) { LOG (error) << "poll: poll script did not exit successfully."; } LOG (info) << "poll: done (time: " << elapsed.count() << " s) (status: " << child_status << ")"; pid = 0; set_poll_state (false); d_refresh (); /* signal refresh */ m_dopoll.unlock (); } bool Poll::log_out (Glib::IOCondition cond) { if (cond == Glib::IO_HUP) { ch_stdout.clear(); LOG (debug) << "poll: (stdout) got HUP"; return false; } if ((cond & Glib::IO_IN) == 0) { LOG (error) << "poll: invalid fifo response"; } else { Glib::ustring buf; ch_stdout->read_line(buf); if (*(--buf.end()) == '\n') buf.erase (--buf.end()); LOG (debug) << "poll script: " << buf; } return true; } bool Poll::log_err (Glib::IOCondition cond) { if (cond == Glib::IO_HUP) { ch_stderr.clear(); LOG (debug) << "poll: (stderr) got HUP"; return false; } if ((cond & Glib::IO_IN) == 0) { LOG (error) << "poll: invalid fifo response"; } else { Glib::ustring buf; ch_stderr->read_line(buf); if (*(--buf.end()) == '\n') buf.erase (--buf.end()); LOG (warn) << "poll script: " << buf; } return true; } void Poll::refresh (unsigned long before) { if (external_polling) { LOG (error) << "poll: external polling in progress, --refresh should not be used in combination with --start-polling or --stop-polling"; return; } if (m_dopoll.try_lock ()) { LOG (info) << "poll: refreshing threads since: " << before; before_poll_revision = before; if (before_poll_revision == 0) { refresh_full (); } else { refresh_threads (); } m_dopoll.unlock (); } else { LOG (error) << "poll: polling already in progress, cannot refresh."; return; } } void Poll::refresh_full () { LOG (info) << "poll: requesting full refresh.."; astroid->actions->emit_refreshed (); } void Poll::refresh_threads () { /* update all threads that have been changed */ Db db (Db::DbMode::DATABASE_READ_ONLY); unsigned long revnow = db.get_revision (); LOG (debug) << "poll: refreshing.. revision after poll: " << revnow; if (revnow > before_poll_revision) { ustring query = ustring::compose ("lastmod:%1..%2", before_poll_revision, revnow); notmuch_query_t * qry = notmuch_query_create (db.nm_db, query.c_str ()); unsigned int total_threads; notmuch_status_t st = NOTMUCH_STATUS_SUCCESS; st = notmuch_query_count_threads (qry, &total_threads); LOG (info) << "poll: " << total_threads << " threads changed, updating.."; if (st == NOTMUCH_STATUS_SUCCESS && total_threads > 0) { notmuch_threads_t * threads; notmuch_thread_t * thread; st = notmuch_query_search_threads (qry, &threads); for (; (st == NOTMUCH_STATUS_SUCCESS) && notmuch_threads_valid (threads); notmuch_threads_move_to_next (threads)) { thread = notmuch_threads_get (threads); const char * t = notmuch_thread_get_thread_id (thread); ustring tt (t); astroid->actions->emit_thread_updated (&db, tt); } } notmuch_query_destroy (qry); } } void Poll::poll_state_dispatch () { emit_poll_state (poll_state); } Poll::type_signal_poll_state Poll::signal_poll_state () { return m_signal_poll_state; } void Poll::emit_poll_state (bool state) { LOG (info) << "poll: emitted poll state: " << state; m_signal_poll_state.emit (state); } void Poll::set_poll_state (bool state) { if (state != poll_state) { poll_state = state; d_poll_state.emit (); } } bool Poll::get_poll_state () { return poll_state; } } astroid-0.14/src/poll.hh000066400000000000000000000037051335422170400151670ustar00rootroot00000000000000# pragma once # include "astroid.hh" # include # include # include # include # include namespace Astroid { class Poll : public sigc::trackable { public: Poll (bool auto_polling_enabled); void close (); bool poll (); void toggle_auto_poll (); bool get_auto_poll (); const char * poll_script = "poll.sh"; static const int DEFAULT_POLL_INTERVAL; // 60 void start_polling (); void stop_polling (); void refresh (unsigned long before); void cancel_poll (); private: std::mutex m_dopoll; int poll_interval = 0; bool auto_polling_enabled = true; bool external_polling = false; bool full_refresh = false; bool periodic_polling (); std::chrono::time_point t0; // start time of poll std::chrono::time_point last_poll; unsigned long before_poll_revision = 0; void refresh_threads (); void refresh_full (); std::mutex poll_cancel_m; std::condition_variable poll_cancel_cv; void do_poll (); void poll_child_done (GPid pid, int child_status); GPid pid; int stdout; int stderr; refptr ch_stdout; refptr ch_stderr; sigc::connection c_ch_stdout; sigc::connection c_ch_stderr; Glib::Dispatcher d_refresh; bool log_out (Glib::IOCondition); bool log_err (Glib::IOCondition); bool poll_state; void set_poll_state (bool); Glib::Dispatcher d_poll_state; void poll_state_dispatch (); public: bool get_poll_state (); /* poll state change signal */ typedef sigc::signal type_signal_poll_state; type_signal_poll_state signal_poll_state (); void emit_poll_state (bool); protected: type_signal_poll_state m_signal_poll_state; }; } astroid-0.14/src/proto.hh000066400000000000000000000023261335422170400153620ustar00rootroot00000000000000# pragma once # include /* forward declarations of classes and structs 'n stuff */ namespace Astroid { /* aliases for often used types */ typedef Glib::ustring ustring; typedef Glib::ustring::size_type ustring_sz; # define refptr Glib::RefPtr /* core and database */ class Astroid; class Db; class NotmuchItem; class NotmuchMessage; class NotmuchThread; class Config; struct StandardPaths; struct RuntimePaths; class AccountManager; class Account; //class Contacts; class Poll; class PluginManager; /* message and thread */ class Message; class MessageThread; class Chunk; /* composing */ class ComposeMessage; /* actions */ class ActionManager; class Action; class TagAction; class ToggleAction; class SpamAction; class MuteAction; /* user interface */ class MainWindow; class CommandBar; class LogView; /* modes */ class Mode; class PanedMode; class ThreadIndex; class ThreadIndexScrolled; class ThreadIndexListStore; class ThreadIndexListCellRenderer; class ThreadIndexListView; class ThreadView; class PageClient; class HelpMode; class EditMessage; class ReplyMessage; class ForwardMessage; class RawMessage; } astroid-0.14/src/utils/000077500000000000000000000000001335422170400150335ustar00rootroot00000000000000astroid-0.14/src/utils/address.cc000066400000000000000000000154241335422170400167750ustar00rootroot00000000000000# include "address.hh" # include "astroid.hh" # include # include "gmime/gmime-compat.h" # include "ustring_utils.hh" # include "address.hh" # include "account_manager.hh" using namespace std; namespace Astroid { Address::Address () { _valid = false; } Address::Address (const char * full_address) { parse (full_address); } Address::Address (ustring full_address) { parse (full_address.c_str ()); } void Address::parse (const char * str) { if (str == NULL) return; /* parse and split */ InternetAddressList * list = internet_address_list_parse (NULL, str); _valid = true; if (internet_address_list_length (list) > 1) { LOG (error) << "address: more than one address in list!"; _valid = false; _email = str; g_object_unref (list); return; } if (internet_address_list_length (list) < 1) { LOG (error) << "address: no address in string."; _email = str; _valid = false; g_object_unref (list); return; } InternetAddress * address = internet_address_list_get_address ( list, 0); if (address == NULL) { LOG (error) << "address: no address in string."; _email = str; _valid = false; g_object_unref (list); return; } InternetAddressMailbox * mbox = INTERNET_ADDRESS_MAILBOX (address); const char * n = internet_address_get_name (address); if (n != NULL) _name = ustring (g_mime_utils_header_decode_text(NULL, n)); n = internet_address_mailbox_get_addr (mbox); if (n != NULL) _email = ustring (g_mime_utils_header_decode_text(NULL, n)); g_object_unref (list); } Address::Address (InternetAddress * addr) { InternetAddressMailbox * mbox = INTERNET_ADDRESS_MAILBOX (addr); const char * n = internet_address_get_name (addr); if (n != NULL) _name = ustring (g_mime_utils_header_decode_text(NULL, n)); n = internet_address_mailbox_get_addr (mbox); if (n != NULL) _email = ustring (g_mime_utils_header_decode_text(NULL, n)); _valid = true; } Address::Address (ustring __name, ustring __email) : _name (__name), _email (__email), _valid (true) {} bool Address::valid () { return _valid; } ustring Address::email () { return _email; } ustring Address::name () { return _name; } ustring Address::fail_safe_name () { UstringUtils::trim (_name); if (_name.length () == 0) { return _email; } else { return _name; } } ustring Address::full_address () { InternetAddress * mbox = internet_address_mailbox_new (_name.c_str(), _email.c_str()); const char * faddr = internet_address_to_string (mbox, NULL, false); g_object_unref (mbox); return ustring(faddr); } InternetAddress * Address::get_iaddr () { InternetAddress * mbox = internet_address_mailbox_new (_name.c_str(), _email.c_str()); // now owned by caller return mbox; } AddressList::AddressList () { } AddressList::AddressList (InternetAddressList * list) { if (list != NULL) { for (int i = 0; i < internet_address_list_length (list); i++) { InternetAddress * a = internet_address_list_get_address (list, i); addresses.push_back (Address (a)); } } } AddressList::AddressList (const char * str) { if (str != NULL) { InternetAddressList * list = internet_address_list_parse (NULL, str); for (int i = 0; i < internet_address_list_length (list); i++) { InternetAddress * a = internet_address_list_get_address (list, i); addresses.push_back (Address (a)); } } } AddressList::AddressList (ustring _str) { if (!_str.empty ()) { InternetAddressList * list = internet_address_list_parse (NULL, _str.c_str ()); for (int i = 0; i < internet_address_list_length (list); i++) { InternetAddress * a = internet_address_list_get_address (list, i); addresses.push_back (Address (a)); } } } AddressList::AddressList (Address a) { addresses.push_back (a); } ustring AddressList::str () { InternetAddressList * list = internet_address_list_new (); for (Address &a : addresses) { InternetAddress * addr = a.get_iaddr (); internet_address_list_add (list, addr); g_object_unref (addr); } const char * addrs = internet_address_list_to_string (list, NULL, false); ustring r (""); if (addrs != NULL) r = ustring (g_mime_utils_header_decode_text (NULL, addrs)); g_object_unref (list); return r; } AddressList& AddressList::operator+= (const Address & a) { addresses.push_back (a); return *this; } AddressList& AddressList::operator+= (const AddressList & al) { for (const Address &a : al.addresses) { addresses.push_back (a); } return *this; } AddressList AddressList::operator+ (const Address &b) const { AddressList a; a += *this; a.addresses.push_back (b); return a; } AddressList AddressList::operator+ (const AddressList &b) const { AddressList a; a += *this; a += b; return a; } AddressList& AddressList::operator= (const AddressList &b) { addresses.clear (); addresses = b.addresses; return *this; } AddressList AddressList::operator- (const AddressList &b) { AddressList a; AddressList bb = b; std::sort (addresses.begin (), addresses.end (), [](Address i, Address j) { return i.email () < j.email (); }); std::sort (bb.addresses.begin (), bb.addresses.end (), [](Address i, Address j) { return i.email () < j.email (); }); set_difference (addresses.begin (), addresses.end (), bb.addresses.begin (), bb.addresses.end (), std::inserter (a.addresses, a.addresses.begin ()), [](Address i, Address j) { return i.email () < j.email (); }); return a; } AddressList& AddressList::operator-= (const AddressList &b) { AddressList a = *this - b; *this = a; return *this; } int AddressList::size () { return addresses.size (); } bool AddressList::empty () { return addresses.empty (); } void AddressList::remove_me () { vector
::iterator it; while (it = find_if (addresses.begin (), addresses.end (), [&](Address &a) { return astroid->accounts->is_me (a); }), it != addresses.end () ) { addresses.erase (it); } } void AddressList::remove_duplicates () { std::sort (addresses.begin (), addresses.end (), [](Address i, Address j) { return i.email () < j.email (); }); addresses.erase (std::unique (addresses.begin (), addresses.end (), [](Address i, Address j) { return i.email () == j.email (); }), addresses.end ()); } } astroid-0.14/src/utils/address.hh000066400000000000000000000040321335422170400170000ustar00rootroot00000000000000# pragma once # include "astroid.hh" # include "proto.hh" # include # include namespace Astroid { /* Encoding and quoting: * * On construction of Address and AddressLists the full email address (mbox) * gets interpreted (decoded and unquoted) by gmime. It is saved in UTF-8 in * an ustring. * * When returnd from Address::full_address() or AddressList::str() it is not * re-encoded, but it remains quoted. It is therefore suitable for an UTF-8 * editor which saves the draft email with the email addresses in quoted, * unencoded, format. * * ComposeMessage loads the draft email (without decoding the address) and * before displaying, sending or saving it build()'s and finalize()'s the message * encoding the quoted address. * */ class Address { public: Address (); Address (const char * full_address); Address (ustring full_address); Address (ustring name, ustring email); Address (InternetAddress *); ustring email(); ustring name(); ustring fail_safe_name (); bool valid (); ustring full_address (); InternetAddress * get_iaddr (); private: ustring _name = ""; ustring _email = ""; bool _valid = false; void parse (const char * str); }; class AddressList { public: AddressList (); AddressList (const char *); AddressList (ustring); AddressList (InternetAddressList *); AddressList (Address); std::vector
addresses; ustring str (); int size (); bool empty (); AddressList& operator= (const AddressList &); AddressList& operator+= (const Address &); AddressList& operator+= (const AddressList &); AddressList operator+ (const Address &) const; AddressList operator+ (const AddressList &) const; AddressList operator- (const AddressList &); AddressList& operator-= (const AddressList &); void remove_me (); void remove_duplicates (); }; } astroid-0.14/src/utils/cmd.cc000066400000000000000000000036271335422170400161150ustar00rootroot00000000000000# include "cmd.hh" # include "astroid.hh" # include "vector_utils.hh" # include "config.hh" # include # include using std::endl; using std::string; namespace bfs = boost::filesystem; namespace Astroid { Cmd::Cmd (ustring _prefix, ustring _cmd, ustring _undo_cmd) : Cmd (_cmd, _undo_cmd) { prefix = _prefix + ": "; } Cmd::Cmd (ustring _cmd, ustring _undo_cmd) { cmd = substitute (_cmd); undo_cmd = substitute (_undo_cmd); } Cmd::Cmd () { } int Cmd::run () { return execute (false); } bool Cmd::undoable () { return !undo_cmd.empty (); } int Cmd::undo () { if (!undoable ()) { LOG (error) << "cmd: tried to undo non-undoable command: " << cmd; return 1; } return execute (true); } int Cmd::execute (bool undo) { ustring c = (!undo ? cmd : undo_cmd); LOG (info) << "cmd: running: " << c; string _stdout; string _stderr; int exit; string _cmd = c; try { Glib::spawn_command_line_sync (_cmd, &_stdout, &_stderr, &exit); } catch (Glib::SpawnError &ex) { if (exit == 0) exit = -1; LOG (error) << "cmd: " << prefix << "failed to execute: '" << _cmd << "': " << ex.what (); } if (!_stdout.empty ()) { for (auto &l : VectorUtils::split_and_trim (_stdout, "\n")) { if (!l.empty ()) LOG (debug) << "cmd: " << prefix << l; } } if (!_stderr.empty ()) { for (auto &l : VectorUtils::split_and_trim (_stderr, "\n")) { if (!l.empty ()) LOG (error) << "cmd: " << prefix << l; } } return (exit == 0); } ustring Cmd::substitute (const ustring _cmd) { ustring ncmd = _cmd; ustring key = "hooks::"; std::size_t fnd = ncmd.find (key); if (fnd != std::string::npos) { ncmd.replace (fnd, key.length (), (astroid->standard_paths ().config_dir / bfs::path("hooks/")).c_str ()); } return ncmd; } } astroid-0.14/src/utils/cmd.hh000066400000000000000000000010431335422170400161150ustar00rootroot00000000000000# pragma once # include "astroid.hh" # include # include # include # include namespace Astroid { class Cmd { public: Cmd (); Cmd (ustring prefix, ustring cmd, ustring undo_cmd); Cmd (ustring cmd, ustring undo_cmd); int run (); int undo (); bool undoable (); private: ustring prefix; ustring cmd; ustring undo_cmd; int execute (bool undo); /* currently only in sync */ ustring substitute (ustring); }; } astroid-0.14/src/utils/compiler.h000066400000000000000000000013131335422170400170140ustar00rootroot00000000000000# pragma once # if defined (__clang__) # ifndef __has_attribute # define __has_attribute(x) 0 # endif # ifndef __has_cpp_attribute # define __has_cpp_attribute(x) 0 # endif # ifndef __has_builtin # define __has_builtin(x) 0 # endif # ifndef __has_feature # define __has_feature(x) 0 # endif # ifndef __has_extension # define __has_extension(x) 0 # endif # ifndef __has_warning # define __has_warning(x) 0 # endif # if __has_cpp_attribute(clang::fallthrough) # define FALLTHROUGH [[clang::fallthrough]] # else # define FALLTHROUGH # endif # elif defined (__GNUC__) # if __has_attribute(fallthrough) # define FALLTHROUGH __attribute__ ((fallthrough)) # else # define FALLTHROUGH # endif # endif astroid-0.14/src/utils/date_utils.cc000066400000000000000000000142331335422170400175020ustar00rootroot00000000000000# include # include # include # include # include "astroid.hh" # include "config.hh" # include "date_utils.hh" using namespace std; using boost::property_tree::ptree; namespace Astroid { ustring Date::asctime (time_t t) { struct tm * temp_t = localtime (&t); struct tm local_time = *temp_t; char * asc = std::asctime (&local_time); return ustring (asc); } /* * create a pretty string in local time. * * mostly ported from Gearys pretty printing: * https://git.gnome.org/browse/geary/tree/src/client/util/util-date.vala * */ const vector Date::pretty_dates = { "%l:%M %P", // Datetime format for 12-hour time, i.e. 8:31 am "%H:%M", // Datetime format for 24-hour time, i.e. 16:35 "%l:%M %P", // Datetime format for the locale default, i.e. 8:31 am or 16:35, // year format will be covered specially. }; const vector Date::pretty_verbose_dates = { // Verbose datetime format for 12-hour time, i.e. November 8, 2010 8:42 am "%B %-e, %Y %-l:%M %P", // Verbose datetime format for 24-hour time, i.e. November 8, 2010 16:35 "%B %-e, %Y %-H:%M", // Verbose datetime format for the locale default (full month, day and time) "%B %-e, %Y %-l:%M %P", // Verbose datetime format for year, 24-hour time, i.e. November 8, 2010 16:35 "%B %-e, %Y %-H:%M", }; // Date format for dates within the current year, i.e. Nov 8 ustring Date::same_year; // Date format for dates within a different year, i.e. 02/04/10 ustring Date::diff_year; Date::ClockFormat Date::clock_format; ustring Date::pretty_print (time_t t) { struct tm * temp_t = localtime (&t); struct tm local_time = *temp_t; time_t now = time (NULL); time_t diff = now - t; CoarseDate cd = coarse_date (t); ustring fmt; if (clock_format == ClockFormat::YEAR) { switch (cd) { case CoarseDate::YEARS: case CoarseDate::FUTURE: fmt = diff_year; break; default: fmt = same_year; break; } } else { switch (cd) { case CoarseDate::NOW: return "Now"; case CoarseDate::MINUTES: return ustring::compose("%1m ago", (unsigned long) (diff / 60)); case CoarseDate::HOURS: return ustring::compose("%1h ago", (unsigned long) (diff / (60 * 60))); case CoarseDate::TODAY: fmt = pretty_dates[clock_format]; break; case CoarseDate::YESTERDAY: return "Yesterday"; case CoarseDate::THIS_WEEK: // Date format that shows the weekday (Monday, Tuesday, ...) // See http://developer.gnome.org/glib/2.32/glib-GDateTime.html#g-date-time-format fmt = "%A"; break; case CoarseDate::THIS_YEAR: fmt = same_year; break; case CoarseDate::YEARS: case CoarseDate::FUTURE: default: fmt = diff_year; break; } } Glib::DateTime dt = Glib::DateTime::create_local ( local_time.tm_year + 1900, local_time.tm_mon + 1, local_time.tm_mday, local_time.tm_hour, local_time.tm_min, local_time.tm_sec); return dt.format (fmt); } ustring Date::pretty_print_verbose (time_t t, bool include_short) { struct tm * temp_t = localtime (&t); struct tm local_time = *temp_t; Glib::DateTime dt = Glib::DateTime::create_local ( local_time.tm_year + 1900, local_time.tm_mon + 1, local_time.tm_mday, local_time.tm_hour, local_time.tm_min, local_time.tm_sec); ustring v = dt.format (pretty_verbose_dates[clock_format]); CoarseDate cd = coarse_date (t); if (include_short && (cd < CoarseDate::THIS_YEAR)) { v = v + " (" + pretty_print (t) + ")"; } return v; } void Date::init () { LOG (info) << "date: init."; ptree config = astroid->config ("general.time"); string c_f = config.get("clock_format"); if (c_f == "24h") { clock_format = ClockFormat::TWENTY_FOUR_HOURS; } else if (c_f == "12h") { clock_format = ClockFormat::TWELVE_HOURS; } else if (c_f == "year") { clock_format = ClockFormat::YEAR; } else if (c_f == "local") { clock_format = ClockFormat::LOCALE_DEFAULT; } else { LOG (error) << "date: error: unrecognized clock format in config: " << c_f << ", should be either 'local', '24h', '12h' or 'year'."; clock_format = ClockFormat::LOCALE_DEFAULT; } /* same year format */ same_year = config.get("same_year"); /* diff year */ diff_year = config.get("diff_year"); } Date::CoarseDate Date::coarse_date (time_t t) { struct tm * temp_t = localtime (&t); struct tm local_time = *temp_t; time_t now = time (NULL); time_t diff = now - t; struct tm now_time; temp_t = localtime (&now); now_time = *temp_t; return coarse_date (local_time, now_time, diff); } Date::CoarseDate Date::coarse_date (struct tm t, struct tm now, time_t diff) { if (same_day (t, now)) { if (diff < 0) { return CoarseDate::FUTURE; } if (diff < 60) { return CoarseDate::NOW; } if (diff < (60 * 60)) { return CoarseDate::MINUTES; } if (diff < (12 * 60 * 60)) { return CoarseDate::HOURS; } return CoarseDate::TODAY; } else { if (diff < 0) { return CoarseDate::FUTURE; } /* make copy of t */ time_t t_t = mktime (&t); // add one day t_t += 24 * 60 * 60; struct tm * ttemp_t = localtime (&t_t); struct tm ttemp = *ttemp_t; if (same_day (ttemp, now)) { return CoarseDate::YESTERDAY; } // add another five days t_t += 5 * 24 * 60 * 60; ttemp_t = localtime (&t_t); ttemp = *ttemp_t; time_t ndiff = mktime(&ttemp) - mktime(&now); if (same_day (ttemp, now) || ndiff > 0) { return CoarseDate::THIS_WEEK; } if (t.tm_year == now.tm_year) { return CoarseDate::THIS_YEAR; } else { return CoarseDate::YEARS; } } } bool Date::same_day (struct tm t1, struct tm t2) { return (t1.tm_year == t2.tm_year) && (t1.tm_mon == t2.tm_mon) && (t1.tm_mday == t2.tm_mday); } } astroid-0.14/src/utils/date_utils.hh000066400000000000000000000024251335422170400175140ustar00rootroot00000000000000# pragma once # include "astroid.hh" namespace Astroid { class Date { public: enum ClockFormat { TWELVE_HOURS, TWENTY_FOUR_HOURS, LOCALE_DEFAULT, YEAR, }; // TODO: translate, might need initialization on startup, // check out Geary. // // See http://developer.gnome.org/glib/2.32/glib-GDateTime.html#g-date-time-format static const std::vector pretty_dates; static const std::vector pretty_verbose_dates; // Date format for dates within the current year, i.e. Nov 8 static ustring same_year; // Date format for dates within a different year, i.e. 02/04/10 static ustring diff_year; static ClockFormat clock_format; enum CoarseDate { NOW, MINUTES, HOURS, TODAY, YESTERDAY, THIS_WEEK, THIS_YEAR, YEARS, FUTURE, }; static bool same_day (struct tm, struct tm); static CoarseDate coarse_date (struct tm, struct tm, time_t ); static CoarseDate coarse_date (time_t t); static ustring pretty_print (time_t ); static ustring pretty_print_verbose (time_t, bool = false); static ustring asctime (time_t t); static void init (); }; } astroid-0.14/src/utils/gmime/000077500000000000000000000000001335422170400161315ustar00rootroot00000000000000astroid-0.14/src/utils/gmime/gmime-compat.cc000066400000000000000000000066341335422170400210300ustar00rootroot00000000000000# include "gmime-compat.h" # include # include # include # include # include # include # include "utils/date_utils.hh" # if (GMIME_MAJOR_VERSION < 3) void g_mime_message_add_mailbox ( GMimeMessage * msg, GMimeAddressType t, const char * name, const char * addr) { if (t == GMIME_ADDRESS_TYPE_SENDER || t == GMIME_ADDRESS_TYPE_FROM) { InternetAddress * a = internet_address_mailbox_new (name, addr); g_mime_message_set_sender (msg, internet_address_to_string (a, true, 0)); } else { throw std::invalid_argument ("gmime-compat: not implemented addresstype"); } } void g_mime_message_set_date_now (GMimeMessage * msg) { time_t now = time (NULL); struct tm * temp_t = localtime (&now); struct tm local_time = *temp_t; std::string asctime = std::asctime (&local_time); char zstr[50]; std::strftime (zstr, sizeof (zstr), " %z", &local_time); std::string t = asctime + zstr; g_mime_message_set_date_as_string (msg, t.c_str ()); } GDateTime * g_mime_message_get_date (GMimeMessage * msg) { time_t time; g_mime_message_get_date (msg, &time, NULL); return g_date_time_new_from_unix_local (time); } GMimeMultipartEncrypted * g_mime_multipart_encrypted_encrypt ( GMimeCryptoContext * gpgctx, GMimeObject * entity, gboolean sign, const char * userid, void * discard, GPtrArray * recp, GError ** err) { (void) (discard); GMimeMultipartEncrypted * out = g_mime_multipart_encrypted_new (); int r = g_mime_multipart_encrypted_encrypt ( out, entity, gpgctx, sign, userid, GMIME_DIGEST_ALGO_DEFAULT, recp, err); if (r != 0) { g_object_unref (out); return NULL; } return out; } GMimeMultipartSigned * g_mime_multipart_signed_sign ( GMimeCryptoContext * gpgctx, GMimeObject * entity, const char * userid, GError ** err) { GMimeMultipartSigned * out = g_mime_multipart_signed_new (); int r = g_mime_multipart_signed_sign ( out, entity, gpgctx, userid, GMIME_DIGEST_ALGO_DEFAULT, err); if (r != 0) { g_object_unref (out); return NULL; } return out; } gboolean g_mime_signature_status_good (GMimeSignatureStatus status) { return (status == GMIME_SIGNATURE_STATUS_GOOD); } gboolean g_mime_signature_status_bad (GMimeSignatureStatus status) { return (status == GMIME_SIGNATURE_STATUS_BAD); } gboolean g_mime_signature_status_error (GMimeSignatureError error) { return (error != GMIME_SIGNATURE_ERROR_NONE); } # else gboolean g_mime_signature_status_good (GMimeSignatureStatus status) { return ((status & (GMIME_SIGNATURE_STATUS_RED | GMIME_SIGNATURE_STATUS_ERROR_MASK)) == 0); } gboolean g_mime_signature_status_bad (GMimeSignatureStatus status) { return (status & GMIME_SIGNATURE_STATUS_RED); } gboolean g_mime_signature_status_error (GMimeSignatureStatus status) { return (status & GMIME_SIGNATURE_STATUS_ERROR_MASK); } gint64 g_mime_utils_header_decode_date_unix (const char *date) { GDateTime* parsed_date = g_mime_utils_header_decode_date (date); time_t ret; if (parsed_date) { ret = g_date_time_to_unix (parsed_date); g_date_time_unref (parsed_date); } else { ret = 0; } return ret; } void g_mime_message_set_date_now (GMimeMessage * msg) { GDateTime * now = g_date_time_new_now_local (); g_mime_message_set_date (msg, now); } # endif astroid-0.14/src/utils/gmime/gmime-compat.h000066400000000000000000000064611335422170400206700ustar00rootroot00000000000000/* gmime * * This provides a compatability layer between gmime 3 and gmime 2. Large parts likely to be * scavenged from notmuch gmime-extra.h * * */ # include # pragma once # if (GMIME_MAJOR_VERSION < 3) # define g_mime_init() g_mime_init(0) # define g_mime_content_type_get_mime_type(c) g_mime_content_type_to_string(c) # define g_mime_content_type_parse(f,c) g_mime_content_type_new_from_string(c) # define g_mime_part_get_content(p) g_mime_part_get_content_object(p) # define g_mime_part_set_content(p,w) g_mime_part_set_content_object(p,w) # define g_mime_filter_dos2unix_new(f) g_mime_filter_crlf_new(f,false) # define g_mime_object_write_to_stream(o,f,s) g_mime_object_write_to_stream (o,s) # define g_mime_object_to_string(m,f) g_mime_object_to_string(m) # define internet_address_to_string(ia,f,encode) internet_address_to_string(ia,encode) # define internet_address_list_parse(f,str) internet_address_list_parse_string(str) # define internet_address_list_to_string(ia,f,encode) internet_address_list_to_string(ia,encode) # define g_mime_object_set_header(o,h,v,f) g_mime_object_set_header(o,h,v) # define g_mime_utils_header_decode_text(NULL, n) g_mime_utils_header_decode_text(n) # define g_mime_message_set_subject(m,s,f) g_mime_message_set_subject(m,s) GDateTime * g_mime_message_get_date (GMimeMessage * msg); # define GMIME_ADDRESS_TYPE_TO GMIME_RECIPIENT_TYPE_TO # define GMIME_ADDRESS_TYPE_CC GMIME_RECIPIENT_TYPE_CC # define GMIME_ADDRESS_TYPE_BCC GMIME_RECIPIENT_TYPE_BCC # define GMIME_ADDRESS_TYPE_FROM (GMimeRecipientType)((GMIME_RECIPIENT_TYPE_BCC+1)) # define GMIME_ADDRESS_TYPE_SENDER (GMimeRecipientType)((GMIME_ADDRESS_TYPE_FROM+1)) typedef GMimeRecipientType GMimeAddressType; void g_mime_message_add_mailbox (GMimeMessage * msg, GMimeAddressType, const char *, const char *); # define g_mime_message_get_addresses(m,t) g_mime_message_get_recipients(m,t) # define g_mime_message_get_from(m) g_mime_message_get_sender(m) # define g_mime_parser_construct_message(p,f) g_mime_parser_construct_message(p) # define g_mime_stream_file_open(f,m,err) g_mime_stream_file_new_for_path(f,m) /************************ * Crypto ************************/ # define GMIME_DECRYPT_NONE NULL # define g_mime_multipart_encrypted_decrypt(mpe, _de, _f, out, err) g_mime_multipart_encrypted_decrypt(mpe,gpgctx,out,err) # define g_mime_crypto_context_decrypt(g, dopt, skey, is, os, err) g_mime_crypto_context_decrypt(g, is, os, err) # define g_mime_multipart_signed_verify(mps, _e, err) g_mime_multipart_signed_verify(mps,gpgctx,err) GMimeMultipartSigned * g_mime_multipart_signed_sign ( GMimeCryptoContext * gpgctx, GMimeObject * entity, const char * userid, GError ** err); # define GMIME_ENCRYPT_NONE NULL GMimeMultipartEncrypted * g_mime_multipart_encrypted_encrypt ( GMimeCryptoContext * gpgctx, GMimeObject * entity, gboolean sign, const char * userid, void * discard, GPtrArray * recp, GError ** err); # else typedef GMimeSignatureStatus GMimeSignatureError; // needed for status functions # endif gboolean g_mime_signature_status_good (GMimeSignatureStatus status); gboolean g_mime_signature_status_bad (GMimeSignatureStatus status); gboolean g_mime_signature_status_error (GMimeSignatureError status); void g_mime_message_set_date_now (GMimeMessage * msg); astroid-0.14/src/utils/gmime/gmime-filter-html-bq.c000066400000000000000000000371231335422170400222260ustar00rootroot00000000000000/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* GMime * Copyright (C) 2000-2014 Jeffrey Stedfast * Copyright (C) 2016 Gaute Hope * * Modified from gmime-filter-html.c * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free * Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include #endif #include #include # include "url-scanner.h" # include # include "gmime-filter-html-bq.h" # include "utils/compiler.h" #ifdef ENABLE_WARNINGS #define w(x) x #else #define w(x) #endif /* ENABLE_WARNINGS */ #define d(x) /** * SECTION: gmime-filter-html * @title: GMimeFilterHTMLBQ * @short_description: Convert plain text into HTML * @see_also: #GMimeFilter * * A #GMimeFilter used for converting plain text into HTML. **/ #define CONVERT_WEB_URLS GMIME_FILTER_HTML_CONVERT_URLS #define CONVERT_ADDRSPEC GMIME_FILTER_HTML_CONVERT_ADDRESSES static struct { unsigned int mask; urlpattern_t pattern; } patterns[] = { { CONVERT_WEB_URLS, { "file://", "", url_file_start, url_file_end } }, { CONVERT_WEB_URLS, { "ftp://", "", url_web_start, url_web_end } }, { CONVERT_WEB_URLS, { "sftp://", "", url_web_start, url_web_end } }, { CONVERT_WEB_URLS, { "http://", "", url_web_start, url_web_end } }, { CONVERT_WEB_URLS, { "https://", "", url_web_start, url_web_end } }, { CONVERT_WEB_URLS, { "news://", "", url_web_start, url_web_end } }, { CONVERT_WEB_URLS, { "nntp://", "", url_web_start, url_web_end } }, { CONVERT_WEB_URLS, { "telnet://", "", url_web_start, url_web_end } }, { CONVERT_WEB_URLS, { "webcal://", "", url_web_start, url_web_end } }, { CONVERT_WEB_URLS, { "id:", "", url_web_start, url_id_end } }, // custom notmuch Message-ID url { CONVERT_WEB_URLS, { "mailto:", "", url_web_start, url_web_end } }, { CONVERT_WEB_URLS, { "callto:", "", url_web_start, url_web_end } }, { CONVERT_WEB_URLS, { "h323:", "", url_web_start, url_web_end } }, { CONVERT_WEB_URLS, { "sip:", "", url_web_start, url_web_end } }, { CONVERT_WEB_URLS, { "www.", "http://", url_web_start, url_web_end } }, { CONVERT_WEB_URLS, { "ftp.", "ftp://", url_web_start, url_web_end } }, { CONVERT_ADDRSPEC, { "@", "mailto:", url_addrspec_start, url_addrspec_end } }, }; #define NUM_URL_PATTERNS (sizeof (patterns) / sizeof (patterns[0])) static void g_mime_filter_html_bq_class_init (GMimeFilterHTMLBQClass *klass); static void g_mime_filter_html_bq_init (GMimeFilterHTMLBQ *filter, GMimeFilterHTMLBQClass *klass); static void g_mime_filter_html_bq_finalize (GObject *object); static GMimeFilter *filter_copy (GMimeFilter *filter); static void filter_filter (GMimeFilter *filter, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace); static void filter_complete (GMimeFilter *filter, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace); static void filter_reset (GMimeFilter *filter); static GMimeFilterClass *parent_class = NULL; GType g_mime_filter_html_bq_get_type (void) { static GType type = 0; if (!type) { static const GTypeInfo info = { sizeof (GMimeFilterHTMLBQClass), NULL, /* base_class_init */ NULL, /* base_class_finalize */ (GClassInitFunc) g_mime_filter_html_bq_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GMimeFilterHTMLBQ), 0, /* n_preallocs */ (GInstanceInitFunc) g_mime_filter_html_bq_init, NULL, }; type = g_type_register_static (GMIME_TYPE_FILTER, "GMimeFilterHTMLBQ", &info, 0); } return type; } static void g_mime_filter_html_bq_class_init (GMimeFilterHTMLBQClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GMimeFilterClass *filter_class = GMIME_FILTER_CLASS (klass); parent_class = g_type_class_ref (GMIME_TYPE_FILTER); object_class->finalize = g_mime_filter_html_bq_finalize; filter_class->copy = filter_copy; filter_class->filter = filter_filter; filter_class->complete = filter_complete; filter_class->reset = filter_reset; } static void g_mime_filter_html_bq_init (GMimeFilterHTMLBQ *filter, GMimeFilterHTMLBQClass *klass) { (void) (klass); filter->scanner = url_scanner_new (); filter->flags = 0; filter->colour = 0; filter->column = 0; filter->pre_open = FALSE; filter->prev_cit_depth = 0; } static void g_mime_filter_html_bq_finalize (GObject *object) { GMimeFilterHTMLBQ *html = (GMimeFilterHTMLBQ *) object; url_scanner_free (html->scanner); G_OBJECT_CLASS (parent_class)->finalize (object); } static GMimeFilter * filter_copy (GMimeFilter *filter) { GMimeFilterHTMLBQ *html = (GMimeFilterHTMLBQ *) filter; return g_mime_filter_html_bq_new (html->flags, html->colour); } static char * check_size (GMimeFilter *filter, char *outptr, char **outend, size_t len) { size_t outleft = (size_t) (*outend - outptr); size_t offset; if (outleft >= len) return outptr; offset = outptr - filter->outbuf; g_mime_filter_set_size (filter, filter->outsize + len, TRUE); *outend = filter->outbuf + filter->outsize; return filter->outbuf + offset; } static int citation_depth (const char *in, const char *inend) { register const char *inptr = in; int depth = 0; if (in >= inend) return 0; /* check that it isn't an escaped From line */ if (!strncmp (inptr, ">From", 5)) return 0; while (inptr < inend && *inptr != '\n') { /* remove an arbitrary number of spaces between '>' and next '>' */ while (*inptr == ' ' && inptr < inend) inptr++; if (inptr >= inend || *inptr++ != '>') break; depth++; } return depth; } static char * citation_cut (char *in, const char *inend) { register char *inptr = in; register char *start; /* check that it isn't an escaped From line */ if (!strncmp (inptr, ">From", 5)) return inptr; while (inptr < inend && *inptr != '\n') { /* remove an arbitrary number of spaces between '>' and next '>' */ start = inptr; while (*inptr == ' ' && inptr < inend) inptr++; if (inptr >= inend || *inptr != '>') { if (*start == ' ' && start < inend) start++; inptr = start; // not followed by '>', revert. break; } inptr++; } return inptr; } static inline gunichar html_utf8_getc (const unsigned char **in, const unsigned char *inend) { register const unsigned char *inptr = *in; register unsigned char c, r; register gunichar u, m; if (inptr == inend) return 0; while (inptr < inend) { r = *inptr++; loop: if (r < 0x80) { *in = inptr; return r; } else if (r < 0xf8) { /* valid start char? */ u = r; m = 0x7f80; /* used to mask out the length bits */ do { if (inptr >= inend) return 0xffff; c = *inptr++; if ((c & 0xc0) != 0x80) { r = c; goto loop; } u = (u << 6) | (c & 0x3f); r <<= 1; m <<= 5; } while (r & 0x40); *in = inptr; u &= ~m; return u; } } return 0xffff; } static char * writeln (GMimeFilter *filter, const char *in, const char *end, char *outptr, char **outend) { GMimeFilterHTMLBQ *html = (GMimeFilterHTMLBQ *) filter; const unsigned char *instart = (const unsigned char *) in; const unsigned char *inend = (const unsigned char *) end; const unsigned char *inptr = instart; while (inptr < inend) { gunichar u; outptr = check_size (filter, outptr, outend, 16); u = html_utf8_getc (&inptr, inend); switch (u) { case 0xffff: w(g_warning ("Invalid UTF-8 sequence encountered")); return outptr; break; case '<': outptr = g_stpcpy (outptr, "<"); html->column++; break; case '>': outptr = g_stpcpy (outptr, ">"); html->column++; break; case '&': outptr = g_stpcpy (outptr, "&"); html->column++; break; case '"': outptr = g_stpcpy (outptr, """); html->column++; break; case '\t': if (html->flags & (GMIME_FILTER_HTML_CONVERT_SPACES)) { do { outptr = check_size (filter, outptr, outend, 7); outptr = g_stpcpy (outptr, " "); html->column++; } while (html->column % 8); break; } /* otherwise, FALL THROUGH */ FALLTHROUGH; case ' ': if (html->flags & GMIME_FILTER_HTML_CONVERT_SPACES) { if (inptr == (instart + 1) || (inptr < inend && (*inptr == ' ' || *inptr == '\t'))) { outptr = g_stpcpy (outptr, " "); html->column++; break; } } /* otherwise, FALL THROUGH */ FALLTHROUGH; default: if (u >= 0x20 && u < 0x80) { *outptr++ = (char) (u & 0xff); } else { if (html->flags & GMIME_FILTER_HTML_ESCAPE_8BIT) *outptr++ = '?'; else outptr += sprintf (outptr, "&#%u;", u); } html->column++; break; } } return outptr; } static void html_convert (GMimeFilter *filter, char *in, size_t inlen, size_t prespace, char **out, size_t *outlen, size_t *outprespace, gboolean flush) { (void) (prespace); GMimeFilterHTMLBQ *html = (GMimeFilterHTMLBQ *) filter; register char *inptr, *outptr; char *start, *outend; const char *inend; int depth; g_mime_filter_set_size (filter, inlen * 2 + 6, FALSE); start = inptr = in; inend = in + inlen; outptr = filter->outbuf; outend = filter->outbuf + filter->outsize; if (html->flags & GMIME_FILTER_HTML_PRE && !html->pre_open) { outptr = g_stpcpy (outptr, "
");
		html->pre_open = TRUE;
	}

	do {
		while (inptr < inend && *inptr != '\n')
			inptr++;

		if (inptr == inend && !flush)
			break;

		html->column = 0;
		depth = citation_depth (start, inend);

		if (html->flags & GMIME_FILTER_HTML_BQ_BLOCKQUOTE_CITATION) {
			if (html->prev_cit_depth < depth) {
        while (html->prev_cit_depth < depth) {
          html->prev_cit_depth++;

          char bq[33];
          int ldepth = html->prev_cit_depth > 999 ? 999 : html->prev_cit_depth;

          g_snprintf (bq, 31, "
", ldepth); outptr = check_size (filter, outptr, &outend, 31); outptr = g_stpcpy (outptr, bq); } start = citation_cut(start, inptr); } else if (html->prev_cit_depth > depth) { /* close quotes */ while (html->prev_cit_depth > depth) { outptr = check_size (filter, outptr, &outend, 14); outptr = g_stpcpy (outptr, "
"); html->prev_cit_depth--; } start = citation_cut(start, inptr); } else if (depth > 0) { start = citation_cut(start, inptr); } else if (start < inptr && *start == '>') { /* >From line */ start++; } } else if (html->flags & GMIME_FILTER_HTML_MARK_CITATION) { if (depth > 0) { char font[25]; /* FIXME: we could easily support multiple colour depths here */ g_snprintf (font, 25, "", (html->colour & 0xffffff)); outptr = check_size (filter, outptr, &outend, 25); outptr = g_stpcpy (outptr, font); } else if (*start == '>') { /* >From line */ start++; } } else if (html->flags & GMIME_FILTER_HTML_CITE) { outptr = check_size (filter, outptr, &outend, 6); outptr = g_stpcpy (outptr, "> "); html->column += 2; } #define CONVERT_URLS_OR_ADDRESSES (GMIME_FILTER_HTML_CONVERT_URLS | GMIME_FILTER_HTML_CONVERT_ADDRESSES) if (html->flags & CONVERT_URLS_OR_ADDRESSES) { size_t matchlen, buflen, len; urlmatch_t match; len = inptr - start; do { if (url_scanner_scan (html->scanner, start, len, &match)) { /* write out anything before the first regex match */ outptr = writeln (filter, start, start + match.um_so, outptr, &outend); start += match.um_so; len -= match.um_so; matchlen = match.um_eo - match.um_so; buflen = 20 + strlen (match.prefix) + matchlen + matchlen; outptr = check_size (filter, outptr, &outend, buflen); /* write out the href tag */ outptr = g_stpcpy (outptr, ""); /* now write the matched string */ memcpy (outptr, start, matchlen); html->column += matchlen; outptr += matchlen; start += matchlen; len -= matchlen; /* close the href tag */ outptr = g_stpcpy (outptr, ""); } else { /* nothing matched so write out the remainder of this line buffer */ outptr = writeln (filter, start, start + len, outptr, &outend); break; } } while (len > 0); } else { outptr = writeln (filter, start, inptr, outptr, &outend); } if (!(html->flags & GMIME_FILTER_HTML_BQ_BLOCKQUOTE_CITATION) && (html->flags & GMIME_FILTER_HTML_MARK_CITATION) && (depth > 0)) { outptr = check_size (filter, outptr, &outend, 8); outptr = g_stpcpy (outptr, ""); } if (html->flags & GMIME_FILTER_HTML_CONVERT_NL) { outptr = check_size (filter, outptr, &outend, 5); outptr = g_stpcpy (outptr, "
"); } if (inptr < inend) *outptr++ = '\n'; start = ++inptr; } while (inptr < inend); if (flush) { if (html->pre_open) { /* close the pre-tag */ outptr = check_size (filter, outptr, &outend, 10); outptr = g_stpcpy (outptr, "
"); } if ((html->flags & GMIME_FILTER_HTML_BQ_BLOCKQUOTE_CITATION) && (html->prev_cit_depth > 0)) { /* close open blockquotes */ while (html->prev_cit_depth > 0) { outptr = check_size (filter, outptr, &outend, 14); outptr = g_stpcpy (outptr, ""); html->prev_cit_depth--; } } } else if (start < inend) { /* backup */ g_mime_filter_backup (filter, start, (unsigned) (inend - start)); } *out = filter->outbuf; *outlen = outptr - filter->outbuf; *outprespace = filter->outpre; } static void filter_filter (GMimeFilter *filter, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace) { html_convert (filter, in, len, prespace, out, outlen, outprespace, FALSE); } static void filter_complete (GMimeFilter *filter, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace) { html_convert (filter, in, len, prespace, out, outlen, outprespace, TRUE); } static void filter_reset (GMimeFilter *filter) { GMimeFilterHTMLBQ *html = (GMimeFilterHTMLBQ *) filter; html->column = 0; html->pre_open = FALSE; html->prev_cit_depth = 0; } /** * g_mime_filter_html_bq_new: * @flags: html flags * @colour: citation colour * * Creates a new GMimeFilterHTMLBQ filter which can be used to convert a * plain UTF-8 text stream into an html stream. * * Returns: a new html filter. **/ GMimeFilter * g_mime_filter_html_bq_new (guint32 flags, guint32 colour) { GMimeFilterHTMLBQ *filter; guint i; filter = g_object_new (GMIME_TYPE_FILTER_HTML_BQ, NULL); filter->flags = flags; filter->colour = colour; for (i = 0; i < NUM_URL_PATTERNS; i++) { if (patterns[i].mask & flags) url_scanner_add (filter->scanner, &patterns[i].pattern); } return (GMimeFilter *) filter; } astroid-0.14/src/utils/gmime/gmime-filter-html-bq.h000066400000000000000000000055201335422170400222270ustar00rootroot00000000000000/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* GMime * Copyright (C) 2000-2014 Jeffrey Stedfast * Copyright (C) 2016 Gaute Hope * * Modified from gmime-filter-html.h * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free * Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #ifndef __GMIME_FILTER_HTML_BQ_H__ #define __GMIME_FILTER_HTML_BQ_H__ #include G_BEGIN_DECLS #define GMIME_TYPE_FILTER_HTML_BQ (g_mime_filter_html_bq_get_type ()) #define GMIME_FILTER_HTML_BQ(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GMIME_TYPE_FILTER_HTML_BQ, GMimeFilterHTMLBQ)) #define GMIME_FILTER_HTML_BQ_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GMIME_TYPE_FILTER_HTML_BQ, GMimeFilterHTMLBQClass)) #define GMIME_IS_FILTER_HTML_BQ(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GMIME_TYPE_FILTER_HTML_BQ)) #define GMIME_IS_FILTER_HTML_BQ_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GMIME_TYPE_FILTER_HTML_BQ)) #define GMIME_FILTER_HTML_BQ_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GMIME_TYPE_FILTER_HTML_BQ, GMimeFilterHTMLBQClass)) typedef struct _GMimeFilterHTMLBQ GMimeFilterHTMLBQ; typedef struct _GMimeFilterHTMLBQClass GMimeFilterHTMLBQClass; /** * GMIME_filter_html_bq_BQ_MARK_CITATION_BLOCKQUOTE: * * Enclose citation text in blockquotes. **/ #define GMIME_FILTER_HTML_BQ_BLOCKQUOTE_CITATION (1 << 8) /** * GMimeFilterHTMLBQ: * @parent_object: parent #GMimeFilter * @scanner: URL scanner state * @flags: flags specifying HTML conversion rules * @colour: cite colour * @column: current column * @pre_open: currently inside of a 'pre' tag. * @prev_cit_depth: current citation depth level. * * A filter for converting text/plain into text/html. **/ struct _GMimeFilterHTMLBQ { GMimeFilter parent_object; struct _UrlScanner *scanner; guint32 flags; guint32 colour; guint32 column : 31; guint32 pre_open : 1; guint32 prev_cit_depth : 31; }; struct _GMimeFilterHTMLBQClass { GMimeFilterClass parent_class; }; GType g_mime_filter_html_bq_get_type (void); GMimeFilter *g_mime_filter_html_bq_new (guint32 flags, guint32 colour); G_END_DECLS #endif /* __GMIME_filter_html_bq_BQ_H__ */ astroid-0.14/src/utils/gmime/gtrie.c000066400000000000000000000225261335422170400174160ustar00rootroot00000000000000/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* GMime * Copyright (C) 2000-2014 Jeffrey Stedfast * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free * Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "gtrie.h" #ifdef ENABLE_WARNINGS #define w(x) x #else #define w(x) #endif /* ENABLE_WARNINGS */ #define d(x) struct _trie_state { struct _trie_state *next; struct _trie_state *fail; struct _trie_match *match; unsigned int final; int id; }; struct _trie_match { struct _trie_match *next; struct _trie_state *state; gunichar c; }; struct _GTrie { struct _trie_state root; GPtrArray *fail_states; gboolean icase; }; static void trie_match_free (struct _trie_match *match); static void trie_state_free (struct _trie_state *state); static struct _trie_match * trie_match_new (void) { return g_slice_new (struct _trie_match); } static void trie_match_free (struct _trie_match *match) { struct _trie_match *next; while (match) { next = match->next; trie_state_free (match->state); g_slice_free (struct _trie_match, match); match = next; } } static struct _trie_state * trie_state_new (void) { return g_slice_new (struct _trie_state); } static void trie_state_free (struct _trie_state *state) { trie_match_free (state->match); g_slice_free (struct _trie_state, state); } static inline gunichar trie_utf8_getc (const char **in, size_t inlen) { register const unsigned char *inptr = (const unsigned char *) *in; const unsigned char *inend = inptr + inlen; register unsigned char c, r; register gunichar m, u = 0; if (inlen == 0) return 0; r = *inptr++; if (r < 0x80) { *in = (const char *) inptr; u = r; } else if (r < 0xfe) { /* valid start char? */ u = r; m = 0x7f80; /* used to mask out the length bits */ do { if (inptr >= inend) return 0; c = *inptr++; if ((c & 0xc0) != 0x80) goto error; u = (u << 6) | (c & 0x3f); r <<= 1; m <<= 5; } while (r & 0x40); *in = (const char *) inptr; u &= ~m; } else { error: *in = (*in) + 1; u = 0xfffe; } return u; } GTrie * g_trie_new (gboolean icase) { GTrie *trie; trie = g_new (GTrie, 1); trie->root.next = NULL; trie->root.fail = NULL; trie->root.match = NULL; trie->root.final = 0; trie->fail_states = g_ptr_array_new (); trie->icase = icase; return trie; } void g_trie_free (GTrie *trie) { g_ptr_array_free (trie->fail_states, TRUE); trie_match_free (trie->root.match); g_free (trie); } static struct _trie_match * g (struct _trie_state *s, gunichar c) { struct _trie_match *m = s->match; while (m && m->c != c) m = m->next; return m; } static struct _trie_state * trie_insert (GTrie *trie, guint depth, struct _trie_state *q, gunichar c) { struct _trie_match *m; m = trie_match_new (); m->next = q->match; m->c = c; q->match = m; q = m->state = trie_state_new (); q->match = NULL; q->fail = &trie->root; q->final = 0; q->id = 0; if (trie->fail_states->len < depth + 1) { unsigned int size = trie->fail_states->len; size = MAX (size + 64, depth + 1); g_ptr_array_set_size (trie->fail_states, size); } q->next = trie->fail_states->pdata[depth]; trie->fail_states->pdata[depth] = q; return q; } #if d(!)0 static void dump_trie (struct _trie_state *s, int depth) { char *p = g_alloca ((depth * 2) + 1); struct _trie_match *m; memset (p, ' ', depth * 2); p[depth * 2] = '\0'; fprintf (stderr, "%s[state] %p: final=%d; pattern-id=%s; fail=%p\n", p, s, s->final, s->id, s->fail); m = s->match; while (m) { fprintf (stderr, " %s'%c' -> %p\n", p, m->c, m->state); if (m->state) dump_trie (m->state, depth + 1); m = m->next; } } #endif /* * final = empty set * FOR p = 1 TO #pat * q = root * FOR j = 1 TO m[p] * IF g(q, pat[p][j]) == null * insert(q, pat[p][j]) * ENDIF * q = g(q, pat[p][j]) * ENDFOR * final = union(final, q) * ENDFOR */ void g_trie_add (GTrie *trie, const char *pattern, int pattern_id) { const char *inptr = pattern; struct _trie_state *q, *q1, *r; struct _trie_match *m, *n; guint i, depth = 0; gunichar c; /* Step 1: add the pattern to the trie */ q = &trie->root; while ((c = trie_utf8_getc (&inptr, -1))) { if (c == 0xfffe) { w(g_warning ("Invalid UTF-8 sequence in pattern '%s' at %s", pattern, (inptr - 1))); continue; } if (trie->icase) c = g_unichar_tolower (c); m = g (q, c); if (m == NULL) { q = trie_insert (trie, depth, q, c); } else { q = m->state; } depth++; } q->final = depth; q->id = pattern_id; /* Step 2: compute failure graph */ for (i = 0; i < trie->fail_states->len; i++) { q = trie->fail_states->pdata[i]; while (q) { m = q->match; while (m) { c = m->c; q1 = m->state; r = q->fail; while (r && (n = g (r, c)) == NULL) r = r->fail; if (r != NULL) { q1->fail = n->state; if (q1->fail->final > q1->final) q1->final = q1->fail->final; } else { if ((n = g (&trie->root, c))) q1->fail = n->state; else q1->fail = &trie->root; } m = m->next; } q = q->next; } } d(fprintf (stderr, "\nafter adding pattern '%s' to trie %p:\n", pattern, trie)); d(dump_trie (&trie->root, 0)); } /* * Aho-Corasick * * q = root * FOR i = 1 TO n * WHILE q != fail AND g(q, text[i]) == fail * q = h(q) * ENDWHILE * IF q == fail * q = root * ELSE * q = g(q, text[i]) * ENDIF * IF isElement(q, final) * RETURN TRUE * ENDIF * ENDFOR * RETURN FALSE */ const char * g_trie_quick_search (GTrie *trie, const char *buffer, size_t buflen, int *matched_id) { const char *inptr, *inend, *prev, *pat; register size_t inlen = buflen; struct _trie_match *m = NULL; struct _trie_state *q; gunichar c; inend = buffer + buflen; inptr = buffer; q = &trie->root; pat = prev = inptr; while ((c = trie_utf8_getc (&inptr, inlen))) { inlen = (inend - inptr); if (c == 0xfffe) { #ifdef ENABLE_WARNINGS prev = (inptr - 1); pat = buffer + buflen; g_warning ("Invalid UTF-8 in buffer '%.*s' at %.*s", buflen, buffer, pat - prev, prev); #endif pat = prev = inptr; } if (trie->icase) c = g_unichar_tolower (c); while (q != NULL && (m = g (q, c)) == NULL) q = q->fail; if (q == &trie->root) pat = prev; if (q == NULL) { q = &trie->root; pat = inptr; } else if (m != NULL) { q = m->state; if (q->final) { if (matched_id) *matched_id = q->id; return pat; } } prev = inptr; } return NULL; } const char * g_trie_search (GTrie *trie, const char *buffer, size_t buflen, int *matched_id) { const char *inptr, *inend, *prev, *pat; register size_t inlen = buflen; struct _trie_match *m = NULL; struct _trie_state *q; size_t matched = 0; gunichar c; inend = buffer + buflen; inptr = buffer; q = &trie->root; pat = prev = inptr; while ((c = trie_utf8_getc (&inptr, inlen))) { inlen = (inend - inptr); if (c == 0xfffe) { if (matched) return pat; #ifdef ENABLE_WARNINGS prev = (inptr - 1); pat = buffer + buflen; g_warning ("Invalid UTF-8 in buffer '%.*s' at %.*s", buflen, buffer, pat - prev, prev); #endif pat = prev = inptr; } if (trie->icase) c = g_unichar_tolower (c); while (q != NULL && (m = g (q, c)) == NULL && matched == 0) q = q->fail; if (q == &trie->root) { if (matched) return pat; pat = prev; } if (q == NULL) { if (matched) return pat; q = &trie->root; pat = inptr; } else if (m != NULL) { q = m->state; if (q->final > matched) { if (matched_id) *matched_id = q->id; matched = q->final; } } prev = inptr; } return matched ? pat : NULL; } #ifdef TEST static char *patterns[] = { "news://", "nntp://", "telnet://", "file://", "ftp://", "http://", "https://", "www.", "ftp.", "mailto:", "@" }; static char *haystacks[] = { "try this url: http://www.ximian.com", "or, feel free to email me at fejj@ximian.com", "don't forget to check out www.ximian.com", "I've attached a file (file:///cvs/gmime/gmime/gtrie.c)", }; int main (int argc, char **argv) { const char *match; GTrie *trie; guint i; int id; trie = g_trie_new (TRUE); for (i = 0; i < G_N_ELEMENTS (patterns); i++) g_trie_add (trie, patterns[i], i); for (i = 0; i < G_N_ELEMENTS (haystacks); i++) { if ((match = g_trie_search (trie, haystacks[i], -1, &id))) { fprintf (stderr, "matched @ '%s' with pattern '%s'\n", match, patterns[id]); } else { fprintf (stderr, "no match\n"); } } fflush (stdout); g_trie_free (trie); return match == NULL ? 0 : 1; } #endif /* TEST */ astroid-0.14/src/utils/gmime/gtrie.h000066400000000000000000000025301335422170400174140ustar00rootroot00000000000000/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* GMime * Copyright (C) 2000-2014 Jeffrey Stedfast * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free * Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #ifndef __G_TRIE_H__ #define __G_TRIE_H__ #include G_BEGIN_DECLS typedef struct _GTrie GTrie; GTrie *g_trie_new (gboolean icase); void g_trie_free (GTrie *trie); void g_trie_add (GTrie *trie, const char *pattern, int pattern_id); const char *g_trie_quick_search (GTrie *trie, const char *buffer, size_t buflen, int *matched_id); const char *g_trie_search (GTrie *trie, const char *buffer, size_t buflen, int *matched_id); G_END_DECLS #endif /* __G_TRIE_H__ */ astroid-0.14/src/utils/gmime/url-scanner.c000066400000000000000000000313471335422170400205360ustar00rootroot00000000000000/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* GMime * Copyright (C) 2000-2014 Jeffrey Stedfast * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free * Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "gtrie.h" #include "url-scanner.h" # include "utils/compiler.h" struct _UrlScanner { GPtrArray *patterns; GTrie *trie; }; UrlScanner * url_scanner_new (void) { UrlScanner *scanner; scanner = g_new (UrlScanner, 1); scanner->patterns = g_ptr_array_new (); scanner->trie = g_trie_new (TRUE); return scanner; } void url_scanner_free (UrlScanner *scanner) { g_return_if_fail (scanner != NULL); g_ptr_array_free (scanner->patterns, TRUE); g_trie_free (scanner->trie); g_free (scanner); } void url_scanner_add (UrlScanner *scanner, urlpattern_t *pattern) { g_return_if_fail (scanner != NULL); g_trie_add (scanner->trie, pattern->pattern, scanner->patterns->len); g_ptr_array_add (scanner->patterns, pattern); } gboolean url_scanner_scan (UrlScanner *scanner, const char *in, size_t inlen, urlmatch_t *match) { const char *pos, *inend; urlpattern_t *pat; int pattern_id; g_return_val_if_fail (scanner != NULL, FALSE); g_return_val_if_fail (in != NULL, FALSE); if (!(pos = g_trie_search (scanner->trie, in, inlen, &pattern_id))) return FALSE; pat = g_ptr_array_index (scanner->patterns, pattern_id); match->pattern = pat->pattern; match->prefix = pat->prefix; inend = in + inlen; if (!pat->start (in, pos, inend, match)) return FALSE; if (!pat->end (in, pos, inend, match)) return FALSE; return TRUE; } static unsigned char url_scanner_table[256] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 24,128,160,128,128,128,128,128,160,160,128,128,160,192,160,160, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,160,160, 32,128, 32,128, 160, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,160,160,160,128,128, 128, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,128,128,128,128, 1, 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128 }; enum { IS_CTRL = (1 << 0), IS_ALPHA = (1 << 1), IS_DIGIT = (1 << 2), IS_LWSP = (1 << 3), IS_SPACE = (1 << 4), IS_SPECIAL = (1 << 5), IS_DOMAIN = (1 << 6), IS_URLSAFE = (1 << 7), }; #define is_ctrl(x) ((url_scanner_table[(unsigned char)(x)] & IS_CTRL) != 0) #define is_lwsp(x) ((url_scanner_table[(unsigned char)(x)] & IS_LWSP) != 0) #define is_atom(x) ((url_scanner_table[(unsigned char)(x)] & (IS_SPECIAL|IS_SPACE|IS_CTRL)) == 0) #define is_alpha(x) ((url_scanner_table[(unsigned char)(x)] & IS_ALPHA) != 0) #define is_digit(x) ((url_scanner_table[(unsigned char)(x)] & IS_DIGIT) != 0) #define is_domain(x) ((url_scanner_table[(unsigned char)(x)] & IS_DOMAIN) != 0) #define is_urlsafe(x) ((url_scanner_table[(unsigned char)(x)] & (IS_ALPHA|IS_DIGIT|IS_URLSAFE)) != 0) static struct { char open; char close; } url_braces[] = { { '(', ')' }, { '{', '}' }, { '[', ']' }, { '<', '>' }, { '|', '|' }, }; static gboolean is_open_brace (char c) { unsigned int i; for (i = 0; i < G_N_ELEMENTS (url_braces); i++) { if (c == url_braces[i].open) return TRUE; } return FALSE; } static char url_stop_at_brace (const char *in, size_t so) { int i; if (so > 0) { for (i = 0; i < 4; i++) { if (in[so - 1] == url_braces[i].open) return url_braces[i].close; } } return '\0'; } gboolean url_addrspec_start (const char *in, const char *pos, const char *inend, urlmatch_t *match) { (void) (inend); register const char *inptr = pos; g_assert (*inptr == '@'); if (inptr == in) return FALSE; inptr--; while (inptr > in) { if (is_atom (*inptr)) inptr--; else break; while (inptr > in && is_atom (*inptr)) inptr--; if (inptr > in && *inptr == '.') inptr--; } if (!is_atom (*inptr) || is_open_brace (*inptr)) inptr++; if (inptr == pos) return FALSE; match->um_so = (inptr - in); return TRUE; } gboolean url_addrspec_end (const char *in, const char *pos, const char *inend, urlmatch_t *match) { const char *inptr = pos; int parts = 0, digits; gboolean got_dot = FALSE; g_assert (*inptr == '@'); inptr++; if (*inptr == '[') { /* domain literal */ do { inptr++; digits = 0; while (inptr < inend && is_digit (*inptr) && digits < 3) { inptr++; digits++; } parts++; if (*inptr != '.' && parts != 4) return FALSE; } while (parts < 4); if (inptr < inend && *inptr == ']') inptr++; else return FALSE; got_dot = TRUE; } else { while (inptr < inend) { if (is_domain (*inptr)) inptr++; else break; while (inptr < inend && is_domain (*inptr)) inptr++; if (inptr < inend && *inptr == '.' && is_domain (inptr[1])) { if (*inptr == '.') got_dot = TRUE; inptr++; } } } if (inptr == pos + 1 || !got_dot) return FALSE; match->um_eo = (inptr - in); return TRUE; } gboolean url_id_end (const char *in, const char *pos, const char *inend, urlmatch_t *match) { char * alpha = (char*) pos; while (alpha < inend) { if (*alpha == '@') return url_addrspec_end (in, alpha, inend, match); alpha++; } return FALSE; } gboolean url_file_start (const char *in, const char *pos, const char *inend, urlmatch_t *match) { (void) (inend); match->um_so = (pos - in); return TRUE; } gboolean url_file_end (const char *in, const char *pos, const char *inend, urlmatch_t *match) { register const char *inptr = pos; char close_brace; inptr += strlen (match->pattern); if (*inptr == '/') inptr++; close_brace = url_stop_at_brace (in, match->um_so); while (inptr < inend && is_urlsafe (*inptr) && *inptr != close_brace) inptr++; if (inptr == pos) return FALSE; match->um_eo = (inptr - in); return TRUE; } gboolean url_web_start (const char *in, const char *pos, const char *inend, urlmatch_t *match) { (void) (inend); match->um_so = (pos - in); return TRUE; } gboolean url_web_end (const char *in, const char *pos, const char *inend, urlmatch_t *match) { register const char *inptr = pos; gboolean openbracket = FALSE; gboolean passwd = FALSE; const char *save; char close_brace; int port, val, n; char *end; inptr += strlen (match->pattern); close_brace = url_stop_at_brace (in, match->um_so); /* find the end of the domain */ if (is_digit (*inptr)) { goto ip_literal2; } else if (is_atom (*inptr)) { /* might be a domain or user@domain */ save = inptr; while (inptr < inend) { if (!is_atom (*inptr)) break; inptr++; while (inptr < inend && is_atom (*inptr)) inptr++; if ((inptr + 1) < inend && *inptr == '.' && is_atom (inptr[1])) inptr++; } if (*inptr != '@') inptr = save; else inptr++; if (*inptr == '[') { /* IPv6 (or possibly IPv4) address literal */ goto ip_literal; } if (is_domain (*inptr)) { /* domain name or IPv4 address */ goto domain; } } else if (*inptr == '[') { ip_literal: openbracket = TRUE; inptr++; if (is_digit (*inptr)) { ip_literal2: /* could be IPv4 or IPv6 */ if ((val = strtol (inptr, &end, 10)) < 0) return FALSE; } else if ((*inptr >= 'A' && *inptr <= 'F') || (*inptr >= 'a' && *inptr <= 'f')) { /* IPv6 address literals are in hex */ if ((val = strtol (inptr, &end, 16)) < 0 || *end != ':') return FALSE; } else if (*inptr == ':') { /* IPv6 can start with a ':' */ end = (char *) inptr; val = 256; /* invalid value */ } else { return FALSE; } switch (*end) { case '.': /* IPv4 address literal */ n = 1; do { if (val > 255 || *end != '.') return FALSE; inptr = end + 1; if ((val = strtol (inptr, &end, 10)) < 0) return FALSE; n++; } while (n < 4); if (val > 255 || n < 4 || (openbracket && *end != ']')) return FALSE; inptr = end + 1; break; case ':': /* IPv6 address literal */ if (!openbracket) return FALSE; do { if (end[1] != ':') { inptr = end + 1; if ((val = strtol (inptr, &end, 16)) < 0) return FALSE; } else { inptr = end; end++; } } while (end > inptr && *end == ':'); if (*end != ']') return FALSE; inptr = end + 1; break; default: return FALSE; } } else if (is_domain (*inptr)) { domain: while (inptr < inend) { if (!is_domain (*inptr)) break; inptr++; while (inptr < inend && is_domain (*inptr)) inptr++; if ((inptr + 1) < inend && *inptr == '.' && (is_domain (inptr[1]) || inptr[1] == '/')) inptr++; } } else { return FALSE; } if (inptr < inend) { switch (*inptr) { case ':': /* we either have a port or a password */ inptr++; if (is_digit (*inptr) || passwd) { port = (*inptr++ - '0'); while (inptr < inend && is_digit (*inptr) && port < 65536) port = (port * 10) + (*inptr++ - '0'); if (!passwd && (port >= 65536 || *inptr == '@')) { if (inptr < inend) { /* this must be a password? */ goto passwd; } inptr--; } } else { passwd: passwd = TRUE; save = inptr; while (inptr < inend && is_atom (*inptr)) inptr++; if ((inptr + 2) < inend) { if (*inptr == '@') { inptr++; if (is_domain (*inptr)) goto domain; } return FALSE; } } if (inptr >= inend || *inptr != '/') break; /* we have a '/' so there could be a path - fall through */ FALLTHROUGH; case '/': /* we've detected a path component to our url */ inptr++; while (inptr < inend && is_urlsafe (*inptr) && *inptr != close_brace) inptr++; break; default: break; } } /* urls are extremely unlikely to end with any * punctuation, so strip any trailing * punctuation off. Also strip off any closing * braces or quotes. */ while (inptr > pos && strchr (",.:;?!-|)}]'\"", inptr[-1])) inptr--; match->um_eo = (inptr - in); return TRUE; } #ifdef BUILD_TABLE #include /* got these from rfc1738 */ #define CHARS_LWSP " \t\n\r" /* linear whitespace chars */ #define CHARS_SPECIAL "()<>@,;:\\\".[]" /* got these from rfc1738 */ #define CHARS_URLSAFE "$-_.+!*'(),{}|\\^~[]`#%\";/?:@&=" static void table_init_bits (unsigned int mask, const char *vals) { int i; for (i = 0; vals[i] != '\0'; i++) url_scanner_table[(unsigned char) vals[i]] |= mask; } static void url_scanner_table_init (void) { int i; for (i = 0; i < 256; i++) { url_scanner_table[i] = 0; if (i < 32) url_scanner_table[i] |= IS_CTRL; if ((i >= '0' && i <= '9')) url_scanner_table[i] |= IS_DIGIT | IS_DOMAIN; if ((i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z')) url_scanner_table[i] |= IS_ALPHA | IS_DOMAIN; if (i >= 128) url_scaller_table[i] |= IS_URLSAFE; if (i == 127) url_scanner_table[i] |= IS_CTRL; } url_scanner_table[' '] |= IS_SPACE; url_scanner_table['-'] |= IS_DOMAIN; /* not defined to be special in rfc0822, but when scanning backwards to find the beginning of the email address we do not want to include this char if we come accross it - so this is kind of a hack, but it's ok */ url_scanner_table['/'] |= IS_SPECIAL; table_init_bits (IS_LWSP, CHARS_LWSP); table_init_bits (IS_SPECIAL, CHARS_SPECIAL); table_init_bits (IS_URLSAFE, CHARS_URLSAFE); } int main (int argc, char **argv) { int i; url_scanner_table_init (); printf ("static unsigned char url_scanner_table[256] = {"); for (i = 0; i < 256; i++) { printf ("%s%3d%s", (i % 16) ? "" : "\n\t", url_scanner_table[i], i != 255 ? "," : "\n"); } printf ("};\n\n"); return 0; } #endif /* BUILD_TABLE */ astroid-0.14/src/utils/gmime/url-scanner.h000066400000000000000000000047451335422170400205450ustar00rootroot00000000000000/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* GMime * Copyright (C) 2000-2014 Jeffrey Stedfast * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free * Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #ifndef __URL_SCANNER_H__ #define __URL_SCANNER_H__ #include #include G_BEGIN_DECLS typedef struct { const char *pattern; const char *prefix; size_t um_so; size_t um_eo; } urlmatch_t; typedef gboolean (*UrlScanFunc) (const char *in, const char *pos, const char *inend, urlmatch_t *match); /* some default GUrlScanFunc's */ G_GNUC_INTERNAL gboolean url_file_start (const char *in, const char *pos, const char *inend, urlmatch_t *match); G_GNUC_INTERNAL gboolean url_file_end (const char *in, const char *pos, const char *inend, urlmatch_t *match); G_GNUC_INTERNAL gboolean url_web_start (const char *in, const char *pos, const char *inend, urlmatch_t *match); G_GNUC_INTERNAL gboolean url_web_end (const char *in, const char *pos, const char *inend, urlmatch_t *match); G_GNUC_INTERNAL gboolean url_addrspec_start (const char *in, const char *pos, const char *inend, urlmatch_t *match); G_GNUC_INTERNAL gboolean url_addrspec_end (const char *in, const char *pos, const char *inend, urlmatch_t *match); G_GNUC_INTERNAL gboolean url_id_end (const char *in, const char *pos, const char *inend, urlmatch_t *match); typedef struct { char *pattern; char *prefix; UrlScanFunc start; UrlScanFunc end; } urlpattern_t; typedef struct _UrlScanner UrlScanner; G_GNUC_INTERNAL UrlScanner *url_scanner_new (void); G_GNUC_INTERNAL void url_scanner_free (UrlScanner *scanner); G_GNUC_INTERNAL void url_scanner_add (UrlScanner *scanner, urlpattern_t *pattern); G_GNUC_INTERNAL gboolean url_scanner_scan (UrlScanner *scanner, const char *in, size_t inlen, urlmatch_t *match); G_END_DECLS #endif /* __URL_SCANNER_H__ */ astroid-0.14/src/utils/gravatar.cc000066400000000000000000000021231335422170400171470ustar00rootroot00000000000000# include "gravatar.hh" # include "proto.hh" # include "crypto.hh" # include # include using namespace std; namespace Astroid { vector Gravatar::DefaultStr = { "404", "mm", "identicon", "monsterid", "wavatar", "retro", }; /** Ported from Geary: * * Returns a URI for the mailbox address specified. size may be any value from * MIN_SIZE to MAX_SIZE, representing pixels. This function does not attempt * to clamp size to this range or return an error of any kind if it's outside * this range. * * TODO: More parameters are available and could be incorporated. See * https://en.gravatar.com/site/implement/images/ */ ustring Gravatar::get_image_uri ( ustring addr, enum Default def, int size) { ustring hash = Crypto::get_md5_digest (addr.c_str ()); ustring uri = ustring::compose ( "https://www.gravatar.com/avatar/%1?d=%2&s=%3", hash, Gravatar::DefaultStr[def], size); LOG (debug) << "gravatar: for: " << addr << ", uri: " << uri; return uri; } } astroid-0.14/src/utils/gravatar.hh000066400000000000000000000010031335422170400171550ustar00rootroot00000000000000# pragma once # include "proto.hh" # include namespace Astroid { class Gravatar { public: static const int MIN_SIZE = 1; static const int MAX_SIZE = 512; static const int DEFAULT_SIZE = 80; enum Default { NOT_FOUND, MYSTERY_MAN, IDENTICON, MONSTER_ID, WAVATAR, RETRO, }; static std::vector DefaultStr; static ustring get_image_uri (ustring, enum Default, int = Gravatar::DEFAULT_SIZE); }; } astroid-0.14/src/utils/resource.cc000066400000000000000000000044331335422170400171750ustar00rootroot00000000000000# include "resource.hh" # include "build_config.hh" # include "astroid.hh" # include "config.hh" # include using namespace boost::filesystem; using std::endl; namespace Astroid { const char * Resource::argv0; void Resource::init (const char * _a) { argv0 = _a; } Resource::Resource (bool has_user, path def) { path prefix = path(PREFIX) / path ("share/astroid"); path local_p = def; char * adir = getenv ("ASTROID_DIR"); if (adir != NULL) { local_p = path(adir) / def; } path prefix_p = prefix / def; /* if this resource is user-configurable, check there first */ path user_p = astroid->standard_paths ().config_dir / def; if (astroid->in_test ()) { if (!exists (local_p)) { LOG (warn) << "re: could not find local resource: " << local_p.c_str (); exit (1); } finalpath = local_p; return; } if (has_user) { if (exists (user_p)) { LOG (info) << "re: using user configured resource: " << absolute(local_p).c_str (); finalpath = user_p; return; } } # ifdef DEBUG if (exists (local_p)) { LOG (info) << "re: using local resource: " << absolute (local_p).c_str (); finalpath = local_p; } else { if (exists (prefix_p)) { LOG (info) << "re: using installed resource: " << absolute (prefix_p).c_str (); finalpath = prefix_p; } else { LOG (error) << "re: could not find resource: " << local_p.c_str () << " or " << prefix_p.c_str (); exit (1); } } # else /* if not DEBUG, only check for installed resource */ if (exists (prefix_p)) { LOG (info) << "re: using installed resource: " << absolute (prefix_p).c_str (); finalpath = prefix_p; } else { LOG (error) << "re: could not find resource: " << prefix_p.c_str (); exit (1); } # endif } Resource::Resource (bool hu, ustring p) : Resource (hu, path(p)) { } Resource::Resource (bool hu, const char * p) : Resource (hu, path(p)) { } path Resource::get_path () { return finalpath; } path Resource::get_exe_dir () { path full = system_complete ( path (argv0) ); return full.parent_path(); } path Resource::get_cwd () { path full = current_path(); return full; } } astroid-0.14/src/utils/resource.hh000066400000000000000000000007731335422170400172120ustar00rootroot00000000000000# pragma once # include "astroid.hh" # include using namespace boost::filesystem; namespace Astroid { class Resource { public: static void init (const char *); Resource (bool has_user, const char * path); Resource (bool has_user, ustring path); Resource (bool has_user, path path); path get_path (); static path get_exe_dir (); static path get_cwd (); static const char * argv0; private: path finalpath; }; } astroid-0.14/src/utils/ustring_utils.cc000066400000000000000000000055721335422170400202660ustar00rootroot00000000000000# include # include "ustring_utils.hh" # include using namespace std; namespace Astroid { // from https://github.com/markoa/gtkmm-utils/blob/master/glibmm-utils/ustring.cc void UstringUtils::trim_left(Glib::ustring& str) { if (str.empty ()) return; Glib::ustring::iterator it (str.begin()); Glib::ustring::iterator end (str.end()); for ( ; it != end; ++it) if (! g_unichar_isspace(*it)) break; if (it == end) str.clear(); else str.erase(str.begin(), it); } void UstringUtils::trim_right(Glib::ustring& str) { if (str.empty ()) return; Glib::ustring::reverse_iterator rit (str.rbegin()); Glib::ustring::reverse_iterator rend (str.rend()); for ( ; rit != rend; ++rit) if (! g_unichar_isspace (*rit)) break; if (rit == rend) str.clear (); else str.erase (rit.base (), str.end ()); } void UstringUtils::trim(Glib::ustring& str) { trim_left(str); trim_right(str); } Glib::ustring UstringUtils::random_alphanumeric (int length) { Glib::ustring str; const string _chars = "abcdefghijklmnopqrstuvwxyz1234567890"; random_device rd; mt19937 g(rd()); for (int i = 0; i < length; i++) str += _chars[g() % _chars.size()]; return str; } /* http://stackoverflow.com/a/15372760/377927 */ Glib::ustring UstringUtils::replace (Glib::ustring subject, const Glib::ustring& search, const Glib::ustring& replace) { size_t pos = 0; while((pos = subject.find(search, pos)) != std::string::npos) { subject.replace(pos, search.length(), replace); pos += replace.length(); } return subject; } Glib::ustring UstringUtils::unixify (const Glib::ustring subject) { /* replace CRs with newlines */ Glib::ustring s = replace (subject, "\r\n", "\n"); return s; } std::pair UstringUtils::data_to_ustring (unsigned int len, const char * data) { std::string u; bool success; std::string in (data, len); try { /* this assumes that the input is in UTF-8 rather than trying to detect the input encoding. * UTF-16 is a superset of UTF-8 so we convert around UTF-16 to remove any invalid characters. */ u = Glib::convert_with_fallback (in, "UTF-16", "UTF-8"); u = Glib::convert_with_fallback (u, "UTF-8", "UTF-16"); success = true; } catch (Glib::ConvertError &ex) { /* LOG (error) << "ustring: could not convert data: " << ex.what (); */ success = false; } return std::make_pair (success, u); } std::pair UstringUtils::bytearray_to_ustring (Glib::RefPtr & ba) { gchar * in = (gchar *) ba->get_data (); unsigned int len = ba->size (); return data_to_ustring (len, in); } } astroid-0.14/src/utils/ustring_utils.hh000066400000000000000000000013601335422170400202670ustar00rootroot00000000000000# pragma once # include namespace Astroid { class UstringUtils { public: static void trim (Glib::ustring &); static void trim_left (Glib::ustring &); static void trim_right (Glib::ustring &); static Glib::ustring random_alphanumeric (int); static Glib::ustring replace (Glib::ustring subject, const Glib::ustring& search, const Glib::ustring& replace); static Glib::ustring unixify (const Glib::ustring subject); /* converts a byte array to a ustring */ static std::pair data_to_ustring (unsigned int len, const char * data); static std::pair bytearray_to_ustring (Glib::RefPtr &ba); }; } astroid-0.14/src/utils/utils.cc000066400000000000000000000116101335422170400165010ustar00rootroot00000000000000# include "utils.hh" # include "crypto.hh" # include # include # include # include # include # include # include # ifndef DISABLE_PLUGINS # include "plugin/manager.hh" # endif namespace bfs = boost::filesystem; using boost::property_tree::ptree; using std::endl; namespace Astroid { Pango::Color Utils::tags_upper_color; Pango::Color Utils::tags_lower_color; float Utils::tags_alpha; void Utils::init () { ptree ti = astroid->config ("thread_index.cell"); ustring _tags_upper_color = ti.get ("tags_upper_color"); ustring _tags_lower_color = ti.get ("tags_lower_color"); bool r = false; r = tags_upper_color.parse (_tags_upper_color); if (!r) { LOG (error) << "ti: failed parsing tags_upper_color"; tags_upper_color.parse ("#e5e5e5"); } r = tags_lower_color.parse (_tags_lower_color); if (!r) { LOG (error) << "ti: failed parsing tags_lower_color"; tags_lower_color.parse ("#e5e5e5"); } tags_alpha = ti.get ("tags_alpha"); if (tags_alpha > 1) tags_alpha = 1; if (tags_alpha < 0) tags_alpha = 0; } ustring Utils::format_size (int sz) { /* Glib::format_size is not yet likely to be available */ gchar * ch = g_format_size (sz); ustring s (ch); g_free (ch); return s; } ustring Utils::safe_fname (ustring fname) { // allowed chars in file names auto pattern = Glib::Regex::create ("[^0-9A-Za-z.\\- :\\(\\)]"); // double _ auto pattern2 = Glib::Regex::create ("__+"); ustring _f = fname; _f = pattern->replace (_f, 0, "_", static_cast(0)); _f = pattern2->replace (_f, 0, "", static_cast(0)); return _f; } bfs::path Utils::expand (bfs::path in) { ustring s = in.c_str (); if (s.size () < 1) return in; const char * home = getenv ("HOME"); if (home == NULL) { LOG (error) << "error: HOME variable not set."; throw std::invalid_argument ("error: HOME environment variable not set."); } if (s[0] == '~') { s = ustring(home) + s.substr (1, s.size () - 1); return bfs::path (s); } else { return in; } } ustring Utils::rgba_to_hex (Gdk::RGBA c) { std::ostringstream str; str << "#"; str << std::hex << std::setfill('0') << std::setw(2) << ((int) c.get_red_u () * 255 / 65535) ; str << std::hex << std::setfill('0') << std::setw(2) << ((int) c.get_green_u () * 255 / 65535) ; str << std::hex << std::setfill('0') << std::setw(2) << ((int) c.get_blue_u () * 255 / 65535) ; str << std::hex << std::setfill('0') << std::setw(2) << (int) (c.get_alpha () * 255); return str.str (); } std::pair Utils::get_tag_color_rgba (ustring t, unsigned char cv[3]) { # ifndef DISABLE_PLUGINS Gdk::RGBA canvas; canvas.set_red_u ( cv[0] * 65535 / 255 ); canvas.set_green_u ( cv[1] * 65535 / 255 ); canvas.set_blue_u ( cv[2] * 65535 / 255 ); auto clrs = astroid->plugin_manager->astroid_extension->get_tag_colors (t, rgba_to_hex (canvas)); if (!clrs.first.empty () || !clrs.second.empty ()) { return std::make_pair (Gdk::RGBA (clrs.first), Gdk::RGBA (clrs.second)); } # endif auto _tc = Crypto::get_md5_digest_b (t); gsize len; guint8 * tc = (guint8 *) _tc->get_data (len); guint8 upper[3] = { (guint8) tags_upper_color.get_red (), (guint8) tags_upper_color.get_green (), (guint8) tags_upper_color.get_blue (), }; guint8 lower[3] = { (guint8) tags_lower_color.get_red (), (guint8) tags_lower_color.get_green (), (guint8) tags_lower_color.get_blue (), }; /* * normalize the background tag color to be between upper and * lower, then choose light or dark font color depending on * luminocity of background color. */ guint8 bg[3]; for (int k = 0; k < 3; k++) { bg[k] = tc[k] * (upper[k] - lower[k]) + lower[k]; } Gdk::RGBA bc; bc.set_rgba_u ( bg[0] * (65535) / (255), bg[1] * (65535) / (255), bg[2] * (65535) / (255), (unsigned short) (tags_alpha * (65535))); float lum = ((bg[0] * tags_alpha + (1-tags_alpha) * cv[0] ) * .2126 + (bg[1] * tags_alpha + (1-tags_alpha) * cv[1]) * .7152 + (bg[2] * tags_alpha + (1-tags_alpha) * cv[0]) * .0722) / 255.0; /* float avg = (bg[0] + bg[1] + bg[2]) / (3 * 255.0); */ Gdk::RGBA fc; if (lum > 0.5) { fc.set ("#000000"); } else { fc.set ("#f2f2f2"); } return std::make_pair (fc, bc); } std::pair Utils::get_tag_color (ustring t, guint8 cv[3]) { auto clrs = get_tag_color_rgba (t, cv); return std::make_pair (rgba_to_hex (clrs.first), rgba_to_hex (clrs.second)); } } astroid-0.14/src/utils/utils.hh000066400000000000000000000023651335422170400165220ustar00rootroot00000000000000# include "ustring_utils.hh" # include "vector_utils.hh" # include "date_utils.hh" # include # include # pragma once namespace bfs = boost::filesystem; using boost::property_tree::ptree; namespace Astroid { class Utils { public: static void init (); /* return human readable file size */ static ustring format_size (int sz); /* make filename safe */ static ustring safe_fname (ustring fname); /* expand ~ to HOME */ static bfs::path expand (bfs::path); /* get tag color */ static std::pair get_tag_color_rgba (ustring, guint8 canvascolor[3]); static std::pair get_tag_color (ustring, guint8 canvascolor[3]); static ustring rgba_to_hex (Gdk::RGBA); static float tags_alpha; static Pango::Color tags_upper_color; static Pango::Color tags_lower_color; /* property tree */ static void extend_ptree (ptree &p, ptree &v) { p.push_back (std::make_pair ("", v)); } template static void extend_ptree (ptree &p, T v) { ptree a; a.put ("", v); p.push_back (std::make_pair ("", a)); } }; } astroid-0.14/src/utils/vector_utils.cc000066400000000000000000000062531335422170400200720ustar00rootroot00000000000000# include # include # include "astroid.hh" # include "vector_utils.hh" # include "ustring_utils.hh" # include "utils.hh" using namespace std; namespace Astroid { const vector VectorUtils::stop_ons_tags = {" "}; vector VectorUtils::split_and_trim (const ustring &str, const ustring delim) { vector parts = Glib::Regex::split_simple(delim, str); auto it = parts.begin (); while ( it != parts.end () ) { UstringUtils::trim (*it); if ((*it).empty ()) { it = parts.erase (it); } else { it++; } } return parts; } ustring VectorUtils::concat (vector &strs, ustring delim, vector stop_on) { /* stop_on is a list of strings which each element be trunctated * to if it exists in the element */ bool first = true; ustring out; for_each (strs.begin (), strs.end (), [&](ustring a) { if (!first) { out += delim; } else { first = false; } for_each (stop_on.begin (), stop_on.end (), [&](ustring s) { a = a.substr(0,a.find_first_of(s)); }); out += a; }); return out; } ustring VectorUtils::concat_tags (vector tags) { return concat (tags, " ", stop_ons_tags); } ustring VectorUtils::concat_tags_color ( vector tags, bool pango, int maxlen, unsigned char canvascolor[3] ) { ustring tag_string = ""; bool first = true; bool broken = false; int len = 0; for (auto t : tags) { if (!first) { if (pango) { tag_string += " "; } else { tag_string += " "; } } else first = false; auto colors = Utils::get_tag_color (t, canvascolor); if (maxlen > 0) { broken = true; if (len >= maxlen) break; broken = false; if ((len + t.length () + 2) > static_cast(maxlen)) { t = t.substr (0, (len + t.length () + 2 - maxlen)); t += ".."; } len += t.length () + 2; } if (pango) { tag_string += ustring::compose ( " %2 ", colors.first, Glib::Markup::escape_text(t), colors.second ); } else { Gdk::RGBA bg (colors.second.substr (0, 7)); bg.set_alpha (Utils::tags_alpha); tag_string += ustring::compose ( " %2 ", colors.first, Glib::Markup::escape_text(t), bg.get_red () * 255 , bg.get_green () * 255 , bg.get_blue () * 255, bg.get_alpha () ); } } if (broken) { tag_string += ".."; } return tag_string; } } astroid-0.14/src/utils/vector_utils.hh000066400000000000000000000012141335422170400200740ustar00rootroot00000000000000# pragma once # include "astroid.hh" # include namespace Astroid { template bool has (std::vector v, T e) { return (find(v.begin (), v.end (), e) != v.end ()); } class VectorUtils { public: static std::vector split_and_trim (const ustring & str, const ustring delim); static ustring concat (std::vector &, ustring, std::vector = {}); static ustring concat_tags (std::vector); static ustring concat_tags_color (std::vector, bool pango, int maxlen, unsigned char canvascolor[3]); static const std::vector stop_ons_tags; }; } astroid-0.14/tests/000077500000000000000000000000001335422170400142465ustar00rootroot00000000000000astroid-0.14/tests/.gitignore000066400000000000000000000001611335422170400162340ustar00rootroot00000000000000*.passed mail/*.setup mail/test_config mail/test_mail/.notmuch /test_* !test_home !*.c !*.sh !*.h !*.cc !*.hh astroid-0.14/tests/CMakeLists.txt000066400000000000000000000041161335422170400170100ustar00rootroot00000000000000## # Tests find_package ( Boost REQUIRED COMPONENTS unit_test_framework ) get_property ( ASTROID_LIBRARIES TARGET astroid PROPERTY LINK_LIBRARIES ) function (add_astroid_test name target source) add_executable ( ${target} ${source} ) target_link_libraries ( ${target} ${ASTROID_LIBRARIES} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} ) add_test (NAME ${name} COMMAND run_test.sh ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${target}) endfunction() configure_file (run_test.sh run_test.sh COPYONLY) # Add the tests add_astroid_test (generic test_generic test_generic.cc ) add_astroid_test (compose test_composed_message test_composed_message.cc ) add_astroid_test (markdown test_markdown test_markdown.cc ) add_astroid_test (non_existant test_non_existant_file test_non_existant_file.cc ) add_astroid_test (open_db test_open_db test_open_db.cc ) add_astroid_test (convert_error test_convert_error test_convert_error.cc ) add_astroid_test (no_newline test_no_newline_msg test_no_newline_msg.cc ) add_astroid_test (mime_message test_mime_message test_mime_message.cc ) add_astroid_test (theme test_theme test_theme.cc ) add_astroid_test (keybindings test_keybindings test_keybindings.cc ) add_astroid_test (bad_content_id test_bad_content_id test_bad_content_id.cc ) add_astroid_test (notmuch test_notmuch test_notmuch.cc ) add_astroid_test (notmuch_standalone test_notmuch_standalone test_notmuch_standalone.cc ) add_astroid_test (address test_address test_address.cc ) add_astroid_test (dates test_dates test_dates.cc ) add_astroid_test (crypto test_crypto test_crypto.cc ) add_astroid_test (gmime_version test_gmime_version test_gmime_version.cc ) astroid-0.14/tests/foo1.key000066400000000000000000000006521335422170400156270ustar00rootroot00000000000000 %echo Generating a basic OpenPGP key Key-Type: DSA Key-Length: 1024 Subkey-Type: ELG-E Subkey-Length: 1024 Name-Real: Tester1 Name-Comment: First tester Name-Email: gaute@astroidmail.bar Expire-Date: 0 #Passphrase: abc %no-protection %pubring one.pub %secring one.sec # Do a commit here, so that we can later print "done" :-) %commit %echo done astroid-0.14/tests/foo2.key000066400000000000000000000006541335422170400156320ustar00rootroot00000000000000 %echo Generating a basic OpenPGP key Key-Type: DSA Key-Length: 1024 Subkey-Type: ELG-E Subkey-Length: 1024 Name-Real: Tester2 Name-Comment: Second tester Name-Email: astrid@astroidmail.bar Expire-Date: 0 #Passphrase: abc %no-protection %pubring two.pub %secring two.sec # Do a commit here, so that we can later print "done" :-) %commit %echo done astroid-0.14/tests/forktee.sh000077500000000000000000000002321335422170400162410ustar00rootroot00000000000000#! /usr/bin/env bash echo "delivering to: $1" echo "forking forktee2.." exec ./tests/forktee2.sh $1 < /dev/stdin & echo "exiting main process" exit 0 astroid-0.14/tests/forktee2.sh000077500000000000000000000001441335422170400163250ustar00rootroot00000000000000#! /usr/bin/env bash echo "forktee2: $1" sleep 1 echo "forking tee.." exec tee < /dev/stdin > $1 astroid-0.14/tests/mail/000077500000000000000000000000001335422170400151705ustar00rootroot00000000000000astroid-0.14/tests/mail/test_config.template000066400000000000000000000047301335422170400212350ustar00rootroot00000000000000# .notmuch-config - Configuration file for the notmuch mail system # # For more information about notmuch, see http://notmuchmail.org # Database configuration # # The only value supported here is 'path' which should be the top-level # directory where your mail currently exists and to where mail will be # delivered in the future. Files should be individual email messages. # Notmuch will store its database within a sub-directory of the path # configured here named ".notmuch". # [database] path= # User configuration # # Here is where you can let notmuch know how you would like to be # addressed. Valid settings are # # name Your full name. # primary_email Your primary email address. # other_email A list (separated by ';') of other email addresses # at which you receive email. # # Notmuch will use the various email addresses configured here when # formatting replies. It will avoid including your own addresses in the # recipient list of replies, and will set the From address based on the # address to which the original email was addressed. # [user] name=Charlie Root primary_email=root@localhost # Configuration for "notmuch new" # # The following options are supported here: # # tags A list (separated by ';') of the tags that will be # added to all messages incorporated by "notmuch new". # # ignore A list (separated by ';') of file and directory names # that will not be searched for messages by "notmuch new". # # NOTE: *Every* file/directory that goes by one of those # names will be ignored, independent of its depth/location # in the mail store. # [new] tags=unread;inbox; ignore= # Search configuration # # The following option is supported here: # # exclude_tags # A ;-separated list of tags that will be excluded from # search results by default. Using an excluded tag in a # query will override that exclusion. # [search] exclude_tags=deleted;spam; # Maildir compatibility configuration # # The following option is supported here: # # synchronize_flags Valid values are true and false. # # If true, then the following maildir flags (in message filenames) # will be synchronized with the corresponding notmuch tags: # # Flag Tag # ---- ------- # D draft # F flagged # P passed # R replied # S unread (added when 'S' flag is not present) # # The "notmuch new" command will notice flag changes in filenames # and update tags, while the "notmuch tag" and "notmuch restore" # commands will notice tag changes and update flags in filenames # [maildir] synchronize_flags=true astroid-0.14/tests/mail/test_mail/000077500000000000000000000000001335422170400171515ustar00rootroot00000000000000astroid-0.14/tests/mail/test_mail/bad-content-part-id-2.eml000066400000000000000000000652141335422170400235530ustar00rootroot00000000000000Return-path: Envelope-to: mdt@emdete.de Delivery-date: Mon, 22 Feb 2016 13:45:00 +0100 Received: from bendel.debian.org ([82.195.75.100]) by littlun with esmtp (Exim 4.86) (envelope-from ) id 1aXprI-0000qf-FD for mdt@emdete.de; Mon, 22 Feb 2016 13:45:00 +0100 Received: by bendel.debian.org (Postfix, from userid 38) id BFB2CF1; Mon, 22 Feb 2016 12:44:59 +0000 (UTC) From: debian-user-digest-request@lists.debian.org Subject: debian-user-digest Digest V2016 #172 X-Loop: debian-user-digest@lists.debian.org X-Mailing-List: archive/volume2016/172 List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: Precedence: list MIME-Version: 1.0 Content-Type: multipart/digest; boundary="31b46c1ec232c568ccf7093dd50f2af1" To: debian-user-digest@lists.debian.org Reply-To: debian-user@lists.debian.org Message-Id: <20160222124459.BFB2CF1@bendel.debian.org> Date: Mon, 22 Feb 2016 12:44:59 +0000 (UTC) X-Spambayes-Classification: ham; 0.00 --31b46c1ec232c568ccf7093dd50f2af1 Content-Type: text/plain debian-user-digest Digest Volume 2016 : Issue 172 Today's Topics: Re: Help! System crashes and locks u [ Sven Arvidsson ] I Couldn't install geany-plugin-gdb [ EenyMeenyMinyMoa ] Re: rotating screen in debian tablet [ jdd ] Re: Is it possible to fully reinstal [ Dalios ] BIND problem [ Glenn English ] Re: BIND problem [ Reco ] Re: Is it possible to fully reinstal [ arian ] Re: Is it possible to fully reinstal [ Keith Bainbridge ] Enabling of the control grups with i [ Mark Johnson ] --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 08:58:49 +0100 From: Sven Arvidsson To: debian-user@lists.debian.org Subject: Re: Help! System crashes and locks up. Message-ID: <1456127929.8493.29.camel@whiz.se> Content-Type: multipart/signed; micalg="pgp-sha256"; protocol="application/pgp-signature"; boundary="=-M40tIYDCkVX2gxTdShOV" --=-M40tIYDCkVX2gxTdShOV Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, 2016-02-21 at 18:12 -0600, Dennis Wicks wrote: > Greetings; >=20 > I have a system I just put together. New pwr sup, mobo, and=C2=A0 > 1 new SATA disk, 1TB. 2Gig memory. Processor is a Phenom=C2=A0 > 9950 4 core. Running Deb 8.3.0 Jessie, new install. >=20 > Every so often it crashes and locks up, and the monitor=C2=A0 > screen has many narrow horizontal lines, mostly the=C2=A0 > background color. >=20 > When it crashes only reset and power off will work. I have=C2=A0 > looked in every log file I can think of and no luck. >=20 > Does this sound familiar to anybody? Any hints? >=20 > Any help at all greatly appreciated!! https://blog.codinghorror.com/is-your-computer-stable/ --=20 Cheers, Sven Arvidsson http://www.whiz.se PGP Key ID 6FAB5CD5 --=-M40tIYDCkVX2gxTdShOV Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABCAAGBQJWyr+5AAoJEHzNaXRvq1zVg8oQAKNuVE08kKT9GIpWTgX4Q8Nj W3wD5wEbHCYQ6Z5ShGAyoyRNatUoVxJFJfLfBPS32R9lxHlXIfCBWdMDrIQJpBgx DP3wCHSa/psM03qVB4NXcbukai2utIQ+tLMozPZ6Eo8cWvRUHC1EC1+kXX48ZED3 gIfeX05JTvekVR5Nz+vLcKEq5Xj/QXjBDRCxoxSuxZv0+i/DJHlfynnUs6kmoNtV IPOg2muwXfIKdBhFGtCidC2y4XQsiInJnXt3Ab5kcY3Rogy54TuIJnlrOnyaA7B6 lBKW0FseckiqOSNH2eREjvzoSJ4sY0ZpFjNVNAprtfeADUG9XOCmZimbhZA7M9i+ 1jo9mcmlq50z0ZVSPv9bNeh2V84/KoWwKFzmbCDUVLB6wwRv1AV/JOF3ou/8pg04 8kcjPgqEf8bQJ84XcmCq48Exl71HXhBtMjkK8g4e2Yh1A6nU6a/Mrtujo3pxeQHW Jfkue3tLpKO9rTmFTrwZ/CuRPCnSdmE4C1/nCAz+ZmphWtLWRkr1QTGhIzZKRFzr pOe3CUAM3uU2atkb6BhdriVjq7GBjLG1Wi55jsn6UnNrXCMvyuMmHkLyAfoZZ0WK zqwC62EHDD4nvJ5Aaq0x7fqEV46dtvxSkzLU4J9ha3yGYtnxndrMrxNy3nuP/tgN LPwMLbOGoharZmvAPZ+2 =zF3j -----END PGP SIGNATURE----- --=-M40tIYDCkVX2gxTdShOV-- --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 16:21:31 +0800 From: EenyMeenyMinyMoa To: debian-user@lists.debian.org Subject: I Couldn't install geany-plugin-gdb in jessie. Message-ID: Content-Type: text/plain; charset=UTF-8 Hi, refering to https://packages.debian.org/search?lang=en&suite=all&searchon=names&keywords=geany-plugin-gdb I added the line deb http://ftp.jp.debian.org/debian/ wheezy main to /etc/apt/sources.list, and apt-get updated, but I was not able to install geany-plugin-gdb. $ sudo apt-get install geany-plugin-gdb Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: geany-plugin-gdb : Depends: geany-plugins-common (= 0.21.1.dfsg-4) but 1.24+dfsg-5 is to be installed E: Unable to correct problems, you have held broken packages. What should I do? And why isn't geany-plugin-gdb in the jessie repository? EenyMeenyMinyMoa --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 11:38:07 +0300 From: Reco To: debian-user@lists.debian.org Subject: Re: I Couldn't install geany-plugin-gdb in jessie. Message-Id: <20160222113807.000b509eacdfe1e7a6330924@gmail.com> Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi. On Mon, 22 Feb 2016 16:21:31 +0800 EenyMeenyMinyMoa wrote: > Hi, > refering to > > https://packages.debian.org/search?lang=en&suite=all&searchon=names&keywords=geany-plugin-gdb > > I added the line > deb http://ftp.jp.debian.org/debian/ wheezy main > to /etc/apt/sources.list, and apt-get updated, > but I was not able to install geany-plugin-gdb. And you should not be able to as most of geany plugins depend on exact version of geany. This: > geany-plugin-gdb : Depends: geany-plugins-common (= 0.21.1.dfsg-4) but > 1.24+dfsg-5 is to be installed clearly shows us that you have installed geany from jessie, so the only kind of plugins that fit your install are geany plugins from Jessie. > What should I do? Try installing 'geany-plugin-debugger' instead. > And why isn't geany-plugin-gdb in the jessie repository? My guess is that they simply renamed the package. Reco --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 09:57:00 +0100 From: jdd To: debian-user@lists.debian.org Subject: Re: rotating screen in debian tablet Message-ID: <56CACD5C.8030804@dodin.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Le 21/02/2016 19:49, Sven Arvidsson a écrit : > I also suggest that you document your efforts on getting Debian to run > here: https://wiki.debian.org/InstallingDebianOn/ > > Both the stuff that works, and the stuff that doesn't. > I will, after having investigated a bit more :-) I was worried to notice the bug is still there when booting as multi-user, that is with no X, and this was confirmed this morning, there are no X recent logs. so I looked at the kernel logs and noticed a crash: http://dodin.org/owncloud/index.php/s/PzRjuxtZHKbMwzK that seems to be a known issue, with some fixes, but I do not really understand what I have to do to apply the fixes :-( https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1492632 https://bugs.launchpad.net/mesa/+bug/1274315 any way to do this on the grub kernel command line? https://wiki.debian.org/KernelModesetting#Intel_GfxCards thanks jdd --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 11:10:56 +0200 From: Dalios To: debian-user@lists.debian.org Subject: Re: Is it possible to fully reinstall the base system without affecting /home? Message-ID: <56CAD0A0.6010402@eumx.net> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 02/22/2016 06:36 AM, Kynn Jones wrote: > My system is badly damaged, and it looks like the only way to fix it > is to do a full re-install. > > I figure I will have to back everything up to an external drive, > reformat the hard drive, and install everything from scratch. > > But I thought I'd ask if there's anything close to this that would not > require backing up everything and reformatting the hard disk. > Wouldn't it be possible, for example, to boot the system up from a > live CD, and reinstall the base system, leaving /home untouched? (I > should mention that the hard disk in question is just one big > partition, including /home and everything else.) > > Thanks in advance! > > kj > > You can certainly do it but I am not sure you want! First of all you would have to move your /home to a new partition (to the same disk or another) and you would need to start from a Live CD/USB in order to do this step. Of course if you don't have another HD available then you would have to partition the disk which is risky for your data which you would have to backup elsewhere etc Next is the new installation procedure where you will eventually connect the new system with the old /home. However let me note that some of the problems of your current installation may live inside /home which means that you will still have to deal with them. The /home folder contains not only your data but also various settings files for your applications. So, as I said, you can certainly do it but I am not sure you want! Another approach would be to start a new thread (or more!) on this helpful list in order to try to solve your system's problems. Of course you can always re-install and start from scratch but how can you be sure you will not end on the same position after a while. Dalios --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 02:35:52 -0700 From: Glenn English To: debianUsers Subject: BIND problem Message-Id: <242CADDB-10D2-47CE-B9AD-D92D719F3E1B@srv.slsware.net> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable I'm seeing lots of: > Feb 21 23:32:24 log named[20061]: dumping master file: = /var/cache/bind/slaves/tmp-I5cJjYH7fV: open: permission denied > Feb 21 23:36:54 log named[20117]: dumping master file: = /var/cache/bind/slaves/tmp-zsVXbHkEG1: open: permission denied > Feb 21 23:46:00 log named[20061]: dumping master file: = /var/cache/bind/slaves/tmp-ngGrdGrU2a: open: permission denied > Feb 21 23:49:26 log named[20117]: dumping master file: = /var/cache/bind/slaves/tmp-Q0vQCUg5xd: open: permission denied > Feb 21 23:58:36 log named[20061]: zone richeyrentals.com/IN: refresh: = could not set file modification time of = '/var/cache/bind/slaves/db.richeyrentals.com': permission denied > Feb 21 23:59:56 log named[20061]: dumping master file: = /var/cache/bind/slaves/tmp-Ef1P4JJ7WK: open: permission denied > Feb 22 00:02:30 log named[20117]: dumping master file: = /var/cache/bind/slaves/tmp-X7frzE1EHg: open: permission denied > Feb 22 00:14:26 log named[20061]: dumping master file: = /var/cache/bind/slaves/tmp-Mvis5kMjqB: open: permission denied > Feb 22 00:14:54 log named[20117]: dumping master file: = /var/cache/bind/slaves/tmp-5cVqqTAnb6: open: permission denied > Feb 22 00:25:31 log named[20117]: zone richeyrentals.com/IN: refresh: = could not set file modification time of = '/var/cache/bind/slaves/db.richeyrentals.com': permission denied > Feb 22 00:25:48 log named[20061]: dumping master file: = /var/cache/bind/slaves/tmp-5n3f6qn0Cj: open: permission denied > Feb 22 00:29:50 log named[20117]: dumping master file: = /var/cache/bind/slaves/tmp-qbxXuXSlvZ: open: permission denied > Feb 22 00:38:07 log named[20061]: dumping master file: = /var/cache/bind/slaves/tmp-n99ZL1tdSc: open: permission denied > Feb 22 00:43:19 log named[20117]: dumping master file: = /var/cache/bind/slaves/tmp-yhcq7G3STF: open: permission denied > Feb 22 00:51:46 log named[20061]: dumping master file: = /var/cache/bind/slaves/tmp-8m09QHZPqR: open: permission denied > Feb 22 00:53:20 log named[20061]: zone richeyrentals.com/IN: refresh: = could not set file modification time of = '/var/cache/bind/slaves/db.richeyrentals.com': permission denied in my log. I looked on the web, and no suggestion helped. Except one: one of then = said his worked when he ran bind (aka named) as root. I tried that and = sure enough, it 'fixed' the problem. Until monit somehow noticed the DNS = wasn't running and started it from /etc/init.d (I'm still running = Wheezy).=20 It happens only on the master DNS server -- the slaves do their dumps = successfully, or maybe they don't try. I tried su -'ing from root to user bind (after giving bind a shell). No = joy. Everything in /var/cache/bind is owned by bind:bind, it's all owner and = group writable, root manages to write the files, there are no complaints = about the masters directory (there are also no files called tmp-*** in = there), and I'm at a loss as to why there's a problem setting the = modification time (touch does it just fine). Has anyone seen this and fixed it?=20 I'm guessing somebody's just kidding about the directory they're trying = to write into, and their real directory is owned by user nobody... --=20 Glenn English --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 13:14:15 +0300 From: Reco To: debian-user@lists.debian.org Subject: Re: BIND problem Message-Id: <20160222131415.d3a245e004784b44af0abc8a@gmail.com> Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi. On Mon, 22 Feb 2016 02:35:52 -0700 Glenn English wrote: > I'm seeing lots of: > > > Feb 21 23:32:24 log named[20061]: dumping master file: /var/cache/bind/slaves/tmp-I5cJjYH7fV: open: permission denied > > Feb 21 23:36:54 log named[20117]: dumping master file: /var/cache/bind/slaves/tmp-zsVXbHkEG1: open: permission denied > > Feb 21 23:46:00 log named[20061]: dumping master file: /var/cache/bind/slaves/tmp-ngGrdGrU2a: open: permission denied > > Feb 21 23:49:26 log named[20117]: dumping master file: /var/cache/bind/slaves/tmp-Q0vQCUg5xd: open: permission denied > > Feb 21 23:58:36 log named[20061]: zone richeyrentals.com/IN: refresh: could not set file modification time of '/var/cache/bind/slaves/db.richeyrentals.com': permission denied > > Feb 21 23:59:56 log named[20061]: dumping master file: /var/cache/bind/slaves/tmp-Ef1P4JJ7WK: open: permission denied > > Feb 22 00:02:30 log named[20117]: dumping master file: /var/cache/bind/slaves/tmp-X7frzE1EHg: open: permission denied > > Feb 22 00:14:26 log named[20061]: dumping master file: /var/cache/bind/slaves/tmp-Mvis5kMjqB: open: permission denied > > Feb 22 00:14:54 log named[20117]: dumping master file: /var/cache/bind/slaves/tmp-5cVqqTAnb6: open: permission denied > > Feb 22 00:25:31 log named[20117]: zone richeyrentals.com/IN: refresh: could not set file modification time of '/var/cache/bind/slaves/db.richeyrentals.com': permission denied > > Feb 22 00:25:48 log named[20061]: dumping master file: /var/cache/bind/slaves/tmp-5n3f6qn0Cj: open: permission denied > > Feb 22 00:29:50 log named[20117]: dumping master file: /var/cache/bind/slaves/tmp-qbxXuXSlvZ: open: permission denied > > Feb 22 00:38:07 log named[20061]: dumping master file: /var/cache/bind/slaves/tmp-n99ZL1tdSc: open: permission denied > > Feb 22 00:43:19 log named[20117]: dumping master file: /var/cache/bind/slaves/tmp-yhcq7G3STF: open: permission denied > > Feb 22 00:51:46 log named[20061]: dumping master file: /var/cache/bind/slaves/tmp-8m09QHZPqR: open: permission denied > > Feb 22 00:53:20 log named[20061]: zone richeyrentals.com/IN: refresh: could not set file modification time of '/var/cache/bind/slaves/db.richeyrentals.com': permission denied > > in my log. Please post the output of: ls -ald /var/cache/bind/slaves lsattr /var/cache/bind/slaves getfacl /var/cache/bind/slaves Also, do you have SELinux enabled? Reco --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 11:20:24 +0100 From: arian To: debian-user@lists.debian.org Subject: Re: Is it possible to fully reinstall the base system without affecting /home? Message-ID: <56CAE0E8.60300@semioptimal.net> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="vjuNwe4No8IBtSrRxEwtuo27jeXq1Dgac" This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --vjuNwe4No8IBtSrRxEwtuo27jeXq1Dgac Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Just to make sure, your filesystem is OK, right? > But I thought I'd ask if there's anything close to this that would not > require backing up everything and reformatting the hard disk. > Wouldn't it be possible, for example, to boot the system up from a > live CD, and reinstall the base system, leaving /home untouched? (I > should mention that the hard disk in question is just one big > partition, including /home and everything else.) Just do a normal install with manual filesystem configuration, choose the= existing partition with the prior filesystem format and make sure to _no= t_ choose format partition. The installer will warn you, something along = the lines that it will overwrite the old /usr, /etc/, /var, etc - which i= s what you want. optionally you can remove all directories but /home (and may be /root pri= or to installation from a live system (the installer will do). I strongly advise to make the backup before nonetheless - breaking things= is easy, especially in the installer. This procedure will however spare = you restoring thing from the backup, if it works. --vjuNwe4No8IBtSrRxEwtuo27jeXq1Dgac Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQEcBAEBCAAGBQJWyuDoAAoJEAunSsW5SUcV/20H/1lNWw62P6ghP3mRCTfqlsQo Br1EDnZdFfnLbzeEu6BjJ5MsHhkS37mo05Egsp7rEQJcExFegMCTLlf/3FBBm87E +7SG4QFnYWhbPSqTks6Wetvaly8VQxZ6NXY3EafWjf550hCH0UboPRAoi/nvmUEU rEtHfATMR0LMy08hDu+r1oWNtNye5gxipVhq1i2odLTxZvwi5Vvh+9sDPPwxsmPU tScJHFP90BUWbdqDkTjTbEpI674mareueRmjE24u3eblYAjFDAsGINjrjpROuc8M 6/gUIjJUQOKBKUTjUgacucIWfedDvKYpZHu/9B7HAXpy3pSzovEwZNYYZgDn0oQ= =ivj+ -----END PGP SIGNATURE----- --vjuNwe4No8IBtSrRxEwtuo27jeXq1Dgac-- --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 20:58:53 +1100 From: Keith Bainbridge To: Dalios , debian-user@lists.debian.org Subject: Re: Is it possible to fully reinstall the base system without affecting /home? Message-ID: <56CADBDD.4060006@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 22/02/16 20:10, Dalios wrote: > First of all you would have to move your /home to a new partition (to > the same disk or another) and you would need to start from a Live CD/USB > in order to do this step. Or move /home from a terminal as root. But if you have to create a new partition you might as well move /home while you are using the live CD. -- Keith Bainbridge keithrbaugroups@gmail.com +61 (0)447 667 468 --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 11:33:43 +0100 From: To: debian-user@lists.debian.org Subject: Re: Is it possible to fully reinstall the base system without affecting /home? Message-ID: <20160222103343.GA19361@tuxteam.de> Content-Type: text/plain; charset=utf-8; x-action=pgp-signed -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Mon, Feb 22, 2016 at 11:20:24AM +0100, arian wrote: > > Just to make sure, your filesystem is OK, right? > > > But I thought I'd ask if there's anything close to this that would not > > require backing up everything and reformatting the hard disk. > > Wouldn't it be possible, for example, to boot the system up from a > > live CD, and reinstall the base system, leaving /home untouched? (I > > should mention that the hard disk in question is just one big > > partition, including /home and everything else.) > > Just do a normal install with manual filesystem configuration, choose > the existing partition with the prior filesystem format and make sure > to _not_ choose format partition. This was my impression too: installation should not wipe home (actually it should'nt wipe anything, e.g. /usr/local and friends, just overwrite existing packages with their newer versions. That said, and as arian states, it's easy to fat-finger something and format your disks, so a backup is in order; and you might meet some niggles, like new packages stumbling upon older configurations and data in your home (think ~/.config, but also ~/.openffice.org, ~/.gimp and whatever nice things apps put into your home). Some may cope and some not. regards - -- t -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iEYEARECAAYFAlbK5AcACgkQBcgs9XrR2kbIKQCfUlb64LbSE2F5UHgT2hEGiYsI yDkAnjXbOy72G7BsuxPCBfS/qOWI6pyw =wbEI -----END PGP SIGNATURE----- --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 11:01:29 +0000 (UTC) From: Mark Johnson To: "debian-user@lists.debian.org" Subject: Enabling of the control grups with its subsystems and Kernel module "net_cls" on Debian Jessie. Message-ID: <619888766.12428592.1456138889739.JavaMail.yahoo@mail.yahoo.com> Content-Type: multipart/alternative; boundary="----=_Part_12428591_2054080757.1456138889736" ------=_Part_12428591_2054080757.1456138889736 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi all. My name is Mark, and I try since a few days to implement outbound traffic shaping with cgoups and its podsystems (especially - "net_cls", "net_prio") and iptables. The problem is to enable cgroups (subsystems "net_cls" and daemons like "cgrulesengd") Spent many hours looking for education stuff, but everything was time wasting only. In my opinion something must be wrong with Kernel ( set-up?, patching?, upgrade? ) My Kernel - 3.16.If you could explain how-to in a few words, it would be really great news for me. We all belongs to big "Debian Family" are we not? Regards from Dublin Mark ------=_Part_12428591_2054080757.1456138889736 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit
------=_Part_12428591_2054080757.1456138889736-- --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 14:32:40 +0300 From: Reco To: debian-user@lists.debian.org Subject: Re: Enabling of the control grups with its subsystems and Kernel module "net_cls" on Debian Jessie. Message-Id: <20160222143240.e2b452ef2bfff1e83cc6ff6a@gmail.com> Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi. On Mon, 22 Feb 2016 11:01:29 +0000 (UTC) Mark Johnson wrote: > Hi all. > > My name is Mark, and I try since a few days to implement outbound traffic shaping with cgoups and its podsystems (especially - "net_cls", "net_prio") and iptables. The problem is to enable cgroups (subsystems "net_cls" and daemons like "cgrulesengd") Spent many hours looking for education stuff, but everything was time wasting only. In my opinion something must be wrong with Kernel ( set-up?, patching?, upgrade? ) > My Kernel - 3.16.If you could explain how-to in a few words, it would be really great news for me. We all belongs to big "Debian Family" are we not? A case study: 1) Ensure that you're *not* running systemd as PID=1. It *will* screw things up, do not try it. 2) Ensure that you don't have any services in enabled state that try to configure cgroups on their own. libvirtd or cgmanager, for instance. 3) Write a configuration file /etc/cgconfig.conf with the contents like this: mount { cpuset = /sys/fs/cgroup/cpuset; cpu = /sys/fs/cgroup/cpu; cpuacct = /sys/fs/cgroup/cpuacct; devices = /sys/fs/cgroup/devices; freezer = /sys/fs/cgroup/freezer; net_cls = /sys/fs/cgroup/net_cls; blkio = /sys/fs/cgroup/blkio; perf_event = /sys/fs/cgroup/perf_event; } group mynet { net_cls { net_cls.classid="122541"; } } 4) Invoke: mount -t tmpfs cgroup_root /sys/fs/cgroup /usr/sbin/cgconfigparser -l /etc/cgconfig.conf 5) If all goes well you should see a bunch of mounted filesystems of type cgroup, one for each controller. 6) Create a configuration file /etc/cgrules.conf with the contents like this: *:/bin/bash net_cls mynet 7) Start cgrulesengd for debugging: /usr/sbin/cgrulesengd -nv 8) Observe all instances of bash to migrate to mynet cgroup. Double-check it with: cat /sys/fs/cgroup/net_cls/nonet/tasks 9) Clean up: /usr/sbin/cgclear umount /sys/fs/cgroup Reco --31b46c1ec232c568ccf7093dd50f2af1-- End of debian-user-digest Digest V2016 Issue #172 ************************************************* astroid-0.14/tests/mail/test_mail/bad-content-part-id.eml000066400000000000000000000652151335422170400234150ustar00rootroot00000000000000Return-path: Envelope-to: mdt@emdete.de Delivery-date: Mon, 22 Feb 2016 13:45:00 +0100 Received: from bendel.debian.org ([82.195.75.100]) by littlun with esmtp (Exim 4.86) (envelope-from ) id 1aXprI-0000qf-FD for mdt@emdete.de; Mon, 22 Feb 2016 13:45:00 +0100 Received: by bendel.debian.org (Postfix, from userid 38) id BFB2CF1; Mon, 22 Feb 2016 12:44:59 +0000 (UTC) From: debian-user-digest-request@lists.debian.org Subject: debian-user-digest Digest V2016 #172 X-Loop: debian-user-digest@lists.debian.org X-Mailing-List: archive/volume2016/172 List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: Precedence: list MIME-Version: 1.0 Content-Type: multipart/digest; boundary="31b46c1ec232c568ccf7093dd50f2af1" To: debian-user-digest@lists.debian.org Reply-To: debian-user@lists.debian.org Message-Id: <20160222124459.BFB2CF1@bendel.debian.org> Date: Mon, 22 Feb 2016 12:44:59 +0000 (UTC) X-Spambayes-Classification: ham; 0.00 --31b46c1ec232c568ccf7093dd50f2af1 Content-Type: text/plain debian-user-digest Digest Volume 2016 : Issue 172 Today's Topics: Re: Help! System crashes and locks u [ Sven Arvidsson ] I Couldn't install geany-plugin-gdb [ EenyMeenyMinyMoa ] Re: rotating screen in debian tablet [ jdd ] Re: Is it possible to fully reinstal [ Dalios ] BIND problem [ Glenn English ] Re: BIND problem [ Reco ] Re: Is it possible to fully reinstal [ arian ] Re: Is it possible to fully reinstal [ Keith Bainbridge ] Enabling of the control grups with i [ Mark Johnson ] --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 08:58:49 +0100 From: Sven Arvidsson To: debian-user@lists.debian.org Subject: Re: Help! System crashes and locks up. Message-ID: <1456127929.8493.29.camel@whiz.se> Content-Type: multipart/signed; micalg="pgp-sha256"; protocol="application/pgp-signature"; boundary="=-M40tIYDCkVX2gxTdShOV" --=-M40tIYDCkVX2gxTdShOV Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, 2016-02-21 at 18:12 -0600, Dennis Wicks wrote: > Greetings; >=20 > I have a system I just put together. New pwr sup, mobo, and=C2=A0 > 1 new SATA disk, 1TB. 2Gig memory. Processor is a Phenom=C2=A0 > 9950 4 core. Running Deb 8.3.0 Jessie, new install. >=20 > Every so often it crashes and locks up, and the monitor=C2=A0 > screen has many narrow horizontal lines, mostly the=C2=A0 > background color. >=20 > When it crashes only reset and power off will work. I have=C2=A0 > looked in every log file I can think of and no luck. >=20 > Does this sound familiar to anybody? Any hints? >=20 > Any help at all greatly appreciated!! https://blog.codinghorror.com/is-your-computer-stable/ --=20 Cheers, Sven Arvidsson http://www.whiz.se PGP Key ID 6FAB5CD5 --=-M40tIYDCkVX2gxTdShOV Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABCAAGBQJWyr+5AAoJEHzNaXRvq1zVg8oQAKNuVE08kKT9GIpWTgX4Q8Nj W3wD5wEbHCYQ6Z5ShGAyoyRNatUoVxJFJfLfBPS32R9lxHlXIfCBWdMDrIQJpBgx DP3wCHSa/psM03qVB4NXcbukai2utIQ+tLMozPZ6Eo8cWvRUHC1EC1+kXX48ZED3 gIfeX05JTvekVR5Nz+vLcKEq5Xj/QXjBDRCxoxSuxZv0+i/DJHlfynnUs6kmoNtV IPOg2muwXfIKdBhFGtCidC2y4XQsiInJnXt3Ab5kcY3Rogy54TuIJnlrOnyaA7B6 lBKW0FseckiqOSNH2eREjvzoSJ4sY0ZpFjNVNAprtfeADUG9XOCmZimbhZA7M9i+ 1jo9mcmlq50z0ZVSPv9bNeh2V84/KoWwKFzmbCDUVLB6wwRv1AV/JOF3ou/8pg04 8kcjPgqEf8bQJ84XcmCq48Exl71HXhBtMjkK8g4e2Yh1A6nU6a/Mrtujo3pxeQHW Jfkue3tLpKO9rTmFTrwZ/CuRPCnSdmE4C1/nCAz+ZmphWtLWRkr1QTGhIzZKRFzr pOe3CUAM3uU2atkb6BhdriVjq7GBjLG1Wi55jsn6UnNrXCMvyuMmHkLyAfoZZ0WK zqwC62EHDD4nvJ5Aaq0x7fqEV46dtvxSkzLU4J9ha3yGYtnxndrMrxNy3nuP/tgN LPwMLbOGoharZmvAPZ+2 =zF3j -----END PGP SIGNATURE----- --=-M40tIYDCkVX2gxTdShOV-- --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 16:21:31 +0800 From: EenyMeenyMinyMoa To: debian-user@lists.debian.org Subject: I Couldn't install geany-plugin-gdb in jessie. Message-ID: Content-Type: text/plain; charset=UTF-8 Hi, refering to https://packages.debian.org/search?lang=en&suite=all&searchon=names&keywords=geany-plugin-gdb I added the line deb http://ftp.jp.debian.org/debian/ wheezy main to /etc/apt/sources.list, and apt-get updated, but I was not able to install geany-plugin-gdb. $ sudo apt-get install geany-plugin-gdb Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: geany-plugin-gdb : Depends: geany-plugins-common (= 0.21.1.dfsg-4) but 1.24+dfsg-5 is to be installed E: Unable to correct problems, you have held broken packages. What should I do? And why isn't geany-plugin-gdb in the jessie repository? EenyMeenyMinyMoa --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 11:38:07 +0300 From: Reco To: debian-user@lists.debian.org Subject: Re: I Couldn't install geany-plugin-gdb in jessie. Message-Id: <20160222113807.000b509eacdfe1e7a6330924@gmail.com> Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi. On Mon, 22 Feb 2016 16:21:31 +0800 EenyMeenyMinyMoa wrote: > Hi, > refering to > > https://packages.debian.org/search?lang=en&suite=all&searchon=names&keywords=geany-plugin-gdb > > I added the line > deb http://ftp.jp.debian.org/debian/ wheezy main > to /etc/apt/sources.list, and apt-get updated, > but I was not able to install geany-plugin-gdb. And you should not be able to as most of geany plugins depend on exact version of geany. This: > geany-plugin-gdb : Depends: geany-plugins-common (= 0.21.1.dfsg-4) but > 1.24+dfsg-5 is to be installed clearly shows us that you have installed geany from jessie, so the only kind of plugins that fit your install are geany plugins from Jessie. > What should I do? Try installing 'geany-plugin-debugger' instead. > And why isn't geany-plugin-gdb in the jessie repository? My guess is that they simply renamed the package. Reco --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 09:57:00 +0100 From: jdd To: debian-user@lists.debian.org Subject: Re: rotating screen in debian tablet Message-ID: <56CACD5C.8030804@dodin.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Le 21/02/2016 19:49, Sven Arvidsson a écrit : > I also suggest that you document your efforts on getting Debian to run > here: https://wiki.debian.org/InstallingDebianOn/ > > Both the stuff that works, and the stuff that doesn't. > I will, after having investigated a bit more :-) I was worried to notice the bug is still there when booting as multi-user, that is with no X, and this was confirmed this morning, there are no X recent logs. so I looked at the kernel logs and noticed a crash: http://dodin.org/owncloud/index.php/s/PzRjuxtZHKbMwzK that seems to be a known issue, with some fixes, but I do not really understand what I have to do to apply the fixes :-( https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1492632 https://bugs.launchpad.net/mesa/+bug/1274315 any way to do this on the grub kernel command line? https://wiki.debian.org/KernelModesetting#Intel_GfxCards thanks jdd --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 11:10:56 +0200 From: Dalios To: debian-user@lists.debian.org Subject: Re: Is it possible to fully reinstall the base system without affecting /home? Message-ID: <56CAD0A0.6010402@eumx.net> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 02/22/2016 06:36 AM, Kynn Jones wrote: > My system is badly damaged, and it looks like the only way to fix it > is to do a full re-install. > > I figure I will have to back everything up to an external drive, > reformat the hard drive, and install everything from scratch. > > But I thought I'd ask if there's anything close to this that would not > require backing up everything and reformatting the hard disk. > Wouldn't it be possible, for example, to boot the system up from a > live CD, and reinstall the base system, leaving /home untouched? (I > should mention that the hard disk in question is just one big > partition, including /home and everything else.) > > Thanks in advance! > > kj > > You can certainly do it but I am not sure you want! First of all you would have to move your /home to a new partition (to the same disk or another) and you would need to start from a Live CD/USB in order to do this step. Of course if you don't have another HD available then you would have to partition the disk which is risky for your data which you would have to backup elsewhere etc Next is the new installation procedure where you will eventually connect the new system with the old /home. However let me note that some of the problems of your current installation may live inside /home which means that you will still have to deal with them. The /home folder contains not only your data but also various settings files for your applications. So, as I said, you can certainly do it but I am not sure you want! Another approach would be to start a new thread (or more!) on this helpful list in order to try to solve your system's problems. Of course you can always re-install and start from scratch but how can you be sure you will not end on the same position after a while. Dalios --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 02:35:52 -0700 From: Glenn English To: debianUsers Subject: BIND problem Message-Id: <242CADDB-10D2-47CE-B9AD-D92D719F3E1B@srv.slsware.net> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable I'm seeing lots of: > Feb 21 23:32:24 log named[20061]: dumping master file: = /var/cache/bind/slaves/tmp-I5cJjYH7fV: open: permission denied > Feb 21 23:36:54 log named[20117]: dumping master file: = /var/cache/bind/slaves/tmp-zsVXbHkEG1: open: permission denied > Feb 21 23:46:00 log named[20061]: dumping master file: = /var/cache/bind/slaves/tmp-ngGrdGrU2a: open: permission denied > Feb 21 23:49:26 log named[20117]: dumping master file: = /var/cache/bind/slaves/tmp-Q0vQCUg5xd: open: permission denied > Feb 21 23:58:36 log named[20061]: zone richeyrentals.com/IN: refresh: = could not set file modification time of = '/var/cache/bind/slaves/db.richeyrentals.com': permission denied > Feb 21 23:59:56 log named[20061]: dumping master file: = /var/cache/bind/slaves/tmp-Ef1P4JJ7WK: open: permission denied > Feb 22 00:02:30 log named[20117]: dumping master file: = /var/cache/bind/slaves/tmp-X7frzE1EHg: open: permission denied > Feb 22 00:14:26 log named[20061]: dumping master file: = /var/cache/bind/slaves/tmp-Mvis5kMjqB: open: permission denied > Feb 22 00:14:54 log named[20117]: dumping master file: = /var/cache/bind/slaves/tmp-5cVqqTAnb6: open: permission denied > Feb 22 00:25:31 log named[20117]: zone richeyrentals.com/IN: refresh: = could not set file modification time of = '/var/cache/bind/slaves/db.richeyrentals.com': permission denied > Feb 22 00:25:48 log named[20061]: dumping master file: = /var/cache/bind/slaves/tmp-5n3f6qn0Cj: open: permission denied > Feb 22 00:29:50 log named[20117]: dumping master file: = /var/cache/bind/slaves/tmp-qbxXuXSlvZ: open: permission denied > Feb 22 00:38:07 log named[20061]: dumping master file: = /var/cache/bind/slaves/tmp-n99ZL1tdSc: open: permission denied > Feb 22 00:43:19 log named[20117]: dumping master file: = /var/cache/bind/slaves/tmp-yhcq7G3STF: open: permission denied > Feb 22 00:51:46 log named[20061]: dumping master file: = /var/cache/bind/slaves/tmp-8m09QHZPqR: open: permission denied > Feb 22 00:53:20 log named[20061]: zone richeyrentals.com/IN: refresh: = could not set file modification time of = '/var/cache/bind/slaves/db.richeyrentals.com': permission denied in my log. I looked on the web, and no suggestion helped. Except one: one of then = said his worked when he ran bind (aka named) as root. I tried that and = sure enough, it 'fixed' the problem. Until monit somehow noticed the DNS = wasn't running and started it from /etc/init.d (I'm still running = Wheezy).=20 It happens only on the master DNS server -- the slaves do their dumps = successfully, or maybe they don't try. I tried su -'ing from root to user bind (after giving bind a shell). No = joy. Everything in /var/cache/bind is owned by bind:bind, it's all owner and = group writable, root manages to write the files, there are no complaints = about the masters directory (there are also no files called tmp-*** in = there), and I'm at a loss as to why there's a problem setting the = modification time (touch does it just fine). Has anyone seen this and fixed it?=20 I'm guessing somebody's just kidding about the directory they're trying = to write into, and their real directory is owned by user nobody... --=20 Glenn English --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 13:14:15 +0300 From: Reco To: debian-user@lists.debian.org Subject: Re: BIND problem Message-Id: <20160222131415.d3a245e004784b44af0abc8a@gmail.com> Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi. On Mon, 22 Feb 2016 02:35:52 -0700 Glenn English wrote: > I'm seeing lots of: > > > Feb 21 23:32:24 log named[20061]: dumping master file: /var/cache/bind/slaves/tmp-I5cJjYH7fV: open: permission denied > > Feb 21 23:36:54 log named[20117]: dumping master file: /var/cache/bind/slaves/tmp-zsVXbHkEG1: open: permission denied > > Feb 21 23:46:00 log named[20061]: dumping master file: /var/cache/bind/slaves/tmp-ngGrdGrU2a: open: permission denied > > Feb 21 23:49:26 log named[20117]: dumping master file: /var/cache/bind/slaves/tmp-Q0vQCUg5xd: open: permission denied > > Feb 21 23:58:36 log named[20061]: zone richeyrentals.com/IN: refresh: could not set file modification time of '/var/cache/bind/slaves/db.richeyrentals.com': permission denied > > Feb 21 23:59:56 log named[20061]: dumping master file: /var/cache/bind/slaves/tmp-Ef1P4JJ7WK: open: permission denied > > Feb 22 00:02:30 log named[20117]: dumping master file: /var/cache/bind/slaves/tmp-X7frzE1EHg: open: permission denied > > Feb 22 00:14:26 log named[20061]: dumping master file: /var/cache/bind/slaves/tmp-Mvis5kMjqB: open: permission denied > > Feb 22 00:14:54 log named[20117]: dumping master file: /var/cache/bind/slaves/tmp-5cVqqTAnb6: open: permission denied > > Feb 22 00:25:31 log named[20117]: zone richeyrentals.com/IN: refresh: could not set file modification time of '/var/cache/bind/slaves/db.richeyrentals.com': permission denied > > Feb 22 00:25:48 log named[20061]: dumping master file: /var/cache/bind/slaves/tmp-5n3f6qn0Cj: open: permission denied > > Feb 22 00:29:50 log named[20117]: dumping master file: /var/cache/bind/slaves/tmp-qbxXuXSlvZ: open: permission denied > > Feb 22 00:38:07 log named[20061]: dumping master file: /var/cache/bind/slaves/tmp-n99ZL1tdSc: open: permission denied > > Feb 22 00:43:19 log named[20117]: dumping master file: /var/cache/bind/slaves/tmp-yhcq7G3STF: open: permission denied > > Feb 22 00:51:46 log named[20061]: dumping master file: /var/cache/bind/slaves/tmp-8m09QHZPqR: open: permission denied > > Feb 22 00:53:20 log named[20061]: zone richeyrentals.com/IN: refresh: could not set file modification time of '/var/cache/bind/slaves/db.richeyrentals.com': permission denied > > in my log. Please post the output of: ls -ald /var/cache/bind/slaves lsattr /var/cache/bind/slaves getfacl /var/cache/bind/slaves Also, do you have SELinux enabled? Reco --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 11:20:24 +0100 From: arian To: debian-user@lists.debian.org Subject: Re: Is it possible to fully reinstall the base system without affecting /home? Message-ID: <56CAE0E8.60300@semioptimal.net> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="vjuNwe4No8IBtSrRxEwtuo27jeXq1Dgac" This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --vjuNwe4No8IBtSrRxEwtuo27jeXq1Dgac Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Just to make sure, your filesystem is OK, right? > But I thought I'd ask if there's anything close to this that would not > require backing up everything and reformatting the hard disk. > Wouldn't it be possible, for example, to boot the system up from a > live CD, and reinstall the base system, leaving /home untouched? (I > should mention that the hard disk in question is just one big > partition, including /home and everything else.) Just do a normal install with manual filesystem configuration, choose the= existing partition with the prior filesystem format and make sure to _no= t_ choose format partition. The installer will warn you, something along = the lines that it will overwrite the old /usr, /etc/, /var, etc - which i= s what you want. optionally you can remove all directories but /home (and may be /root pri= or to installation from a live system (the installer will do). I strongly advise to make the backup before nonetheless - breaking things= is easy, especially in the installer. This procedure will however spare = you restoring thing from the backup, if it works. --vjuNwe4No8IBtSrRxEwtuo27jeXq1Dgac Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQEcBAEBCAAGBQJWyuDoAAoJEAunSsW5SUcV/20H/1lNWw62P6ghP3mRCTfqlsQo Br1EDnZdFfnLbzeEu6BjJ5MsHhkS37mo05Egsp7rEQJcExFegMCTLlf/3FBBm87E +7SG4QFnYWhbPSqTks6Wetvaly8VQxZ6NXY3EafWjf550hCH0UboPRAoi/nvmUEU rEtHfATMR0LMy08hDu+r1oWNtNye5gxipVhq1i2odLTxZvwi5Vvh+9sDPPwxsmPU tScJHFP90BUWbdqDkTjTbEpI674mareueRmjE24u3eblYAjFDAsGINjrjpROuc8M 6/gUIjJUQOKBKUTjUgacucIWfedDvKYpZHu/9B7HAXpy3pSzovEwZNYYZgDn0oQ= =ivj+ -----END PGP SIGNATURE----- --vjuNwe4No8IBtSrRxEwtuo27jeXq1Dgac-- --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 20:58:53 +1100 From: Keith Bainbridge To: Dalios , debian-user@lists.debian.org Subject: Re: Is it possible to fully reinstall the base system without affecting /home? Message-ID: <56CADBDD.4060006@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 22/02/16 20:10, Dalios wrote: > First of all you would have to move your /home to a new partition (to > the same disk or another) and you would need to start from a Live CD/USB > in order to do this step. Or move /home from a terminal as root. But if you have to create a new partition you might as well move /home while you are using the live CD. -- Keith Bainbridge keithrbaugroups@gmail.com +61 (0)447 667 468 --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 11:33:43 +0100 From: To: debian-user@lists.debian.org Subject: Re: Is it possible to fully reinstall the base system without affecting /home? Message-ID: <20160222103343.GA19361@tuxteam.de> Content-Type: text/plain; charset=utf-8; x-action=pgp-signed -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Mon, Feb 22, 2016 at 11:20:24AM +0100, arian wrote: > > Just to make sure, your filesystem is OK, right? > > > But I thought I'd ask if there's anything close to this that would not > > require backing up everything and reformatting the hard disk. > > Wouldn't it be possible, for example, to boot the system up from a > > live CD, and reinstall the base system, leaving /home untouched? (I > > should mention that the hard disk in question is just one big > > partition, including /home and everything else.) > > Just do a normal install with manual filesystem configuration, choose > the existing partition with the prior filesystem format and make sure > to _not_ choose format partition. This was my impression too: installation should not wipe home (actually it should'nt wipe anything, e.g. /usr/local and friends, just overwrite existing packages with their newer versions. That said, and as arian states, it's easy to fat-finger something and format your disks, so a backup is in order; and you might meet some niggles, like new packages stumbling upon older configurations and data in your home (think ~/.config, but also ~/.openffice.org, ~/.gimp and whatever nice things apps put into your home). Some may cope and some not. regards - -- t -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iEYEARECAAYFAlbK5AcACgkQBcgs9XrR2kbIKQCfUlb64LbSE2F5UHgT2hEGiYsI yDkAnjXbOy72G7BsuxPCBfS/qOWI6pyw =wbEI -----END PGP SIGNATURE----- --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 11:01:29 +0000 (UTC) From: Mark Johnson To: "debian-user@lists.debian.org" Subject: Enabling of the control grups with its subsystems and Kernel module "net_cls" on Debian Jessie. Message-ID: <619888766.12428592.1456138889739.JavaMail.yahoo@mail.yahoo.com> Content-Type: multipart/alternative; boundary="----=_Part_12428591_2054080757.1456138889736" ------=_Part_12428591_2054080757.1456138889736 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi all. My name is Mark, and I try since a few days to implement outbound traffic shaping with cgoups and its podsystems (especially - "net_cls", "net_prio") and iptables. The problem is to enable cgroups (subsystems "net_cls" and daemons like "cgrulesengd") Spent many hours looking for education stuff, but everything was time wasting only. In my opinion something must be wrong with Kernel ( set-up?, patching?, upgrade? ) My Kernel - 3.16.If you could explain how-to in a few words, it would be really great news for me. We all belongs to big "Debian Family" are we not? Regards from Dublin Mark ------=_Part_12428591_2054080757.1456138889736 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit
------=_Part_12428591_2054080757.1456138889736-- --31b46c1ec232c568ccf7093dd50f2af1 Date: Mon, 22 Feb 2016 14:32:40 +0300 From: Reco To: debian-user@lists.debian.org Subject: Re: Enabling of the control grups with its subsystems and Kernel module "net_cls" on Debian Jessie. Message-Id: <20160222143240.e2b452ef2bfff1e83cc6ff6a@gmail.com> Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi. On Mon, 22 Feb 2016 11:01:29 +0000 (UTC) Mark Johnson wrote: > Hi all. > > My name is Mark, and I try since a few days to implement outbound traffic shaping with cgoups and its podsystems (especially - "net_cls", "net_prio") and iptables. The problem is to enable cgroups (subsystems "net_cls" and daemons like "cgrulesengd") Spent many hours looking for education stuff, but everything was time wasting only. In my opinion something must be wrong with Kernel ( set-up?, patching?, upgrade? ) > My Kernel - 3.16.If you could explain how-to in a few words, it would be really great news for me. We all belongs to big "Debian Family" are we not? A case study: 1) Ensure that you're *not* running systemd as PID=1. It *will* screw things up, do not try it. 2) Ensure that you don't have any services in enabled state that try to configure cgroups on their own. libvirtd or cgmanager, for instance. 3) Write a configuration file /etc/cgconfig.conf with the contents like this: mount { cpuset = /sys/fs/cgroup/cpuset; cpu = /sys/fs/cgroup/cpu; cpuacct = /sys/fs/cgroup/cpuacct; devices = /sys/fs/cgroup/devices; freezer = /sys/fs/cgroup/freezer; net_cls = /sys/fs/cgroup/net_cls; blkio = /sys/fs/cgroup/blkio; perf_event = /sys/fs/cgroup/perf_event; } group mynet { net_cls { net_cls.classid="122541"; } } 4) Invoke: mount -t tmpfs cgroup_root /sys/fs/cgroup /usr/sbin/cgconfigparser -l /etc/cgconfig.conf 5) If all goes well you should see a bunch of mounted filesystems of type cgroup, one for each controller. 6) Create a configuration file /etc/cgrules.conf with the contents like this: *:/bin/bash net_cls mynet 7) Start cgrulesengd for debugging: /usr/sbin/cgrulesengd -nv 8) Observe all instances of bash to migrate to mynet cgroup. Double-check it with: cat /sys/fs/cgroup/net_cls/nonet/tasks 9) Clean up: /usr/sbin/cgclear umount /sys/fs/cgroup Reco --31b46c1ec232c568ccf7093dd50f2af1-- End of debian-user-digest Digest V2016 Issue #172 ************************************************* astroid-0.14/tests/mail/test_mail/bad-convert-error.eml000066400000000000000000000003041335422170400232000ustar00rootroot00000000000000Return-path: Envelope-to: asdf@asdf.no From: BASDF To: asdfsadfs@asdf.asdf Subject: asdfsadf Message-Id: <123@test.no> Date: Sun, 12 Apr 2015 07:00:09 +0200 tilhrende astroid-0.14/tests/mail/test_mail/convert_error.eml000066400000000000000000000002551335422170400225430ustar00rootroot00000000000000Delivery-date: Mon, 27 Oct 2014 06:15:16 +0100 From: tst@asfdasas.sdf To: test@gadsdfa.sdf Message-Id: Date: Mon, 27 Oct 2014 06:15:13 +0100 astroid-0.14/tests/mail/test_mail/date1.eml000066400000000000000000000002211335422170400206410ustar00rootroot00000000000000From: Dater To: Dater Date: Thu, 15 Oct 2009 10:23:40 -0700 Message-Id: <1-a@b.org> Subject: Date test 1 asdfasdf asdf asd astroid-0.14/tests/mail/test_mail/date2.eml000066400000000000000000000002221335422170400206430ustar00rootroot00000000000000From: Dater To: Dater Date: Tue, 19 Aug 2014 16:11:44 +0200 Message-Id: <2-a@b.org> Subject: Date test 2 asdfasdf asdf asd astroid-0.14/tests/mail/test_mail/isspace-fail-utf-8.eml000066400000000000000000000036621335422170400231600ustar00rootroot00000000000000Delivered-To: edwards.benj@gmail.com Received: by 10.140.18.206 with SMTP id 72csp2435096qgf; Mon, 1 Aug 2016 15:04:36 -0700 (PDT) X-Received: by 10.98.193.1 with SMTP id i1mr99960315pfg.66.1470089076449; Mon, 01 Aug 2016 15:04:36 -0700 (PDT) Return-Path: Received: from logocanon.createways.net (logocanon.createways.net. [103.251.44.154]) by mx.google.com with ESMTP id 10si37051073pab.31.2016.08.01.15.04.36 for ; Mon, 01 Aug 2016 15:04:36 -0700 (PDT) Received-SPF: fail (google.com: domain of return@goodridge.net does not designate 103.251.44.154 as permitted sender) client-ip=103.251.44.154; Authentication-Results: mx.google.com; spf=fail (google.com: domain of return@goodridge.net does not designate 103.251.44.154 as permitted sender) smtp.mailfrom=return@goodridge.net From: =?UTF-8?B?876UsA==?= C0ngratuLations =?UTF-8?B?876UsA==?= Message-ID: Subject: =?UTF-8?B?876UsA==?= =?UTF-8?B?876TtvO+k7Y=?= RE: Your Bonus Edwards Benj =?UTF-8?B?876UsA==?= =?UTF-8?B?876TtvO+k7Y=?= Date:Mon, 01 Aug 2016 18:04:35 -0400 (EDT) Content-type: text/html; charset=utf-8
☆RE: Your Bonus Edwards Benj☆
RE: Your Bonus Edwards Benj






gmail.com astroid-0.14/tests/mail/test_mail/mime-message-no-content-type.eml000066400000000000000000000240251335422170400252650ustar00rootroot00000000000000Delivered-To: eg@gaute.vetsj.com Received: by 10.28.63.147 with SMTP id m141csp5483751wma; Sun, 3 Jan 2016 14:00:23 -0800 (PST) X-Received: by 10.28.22.199 with SMTP id 190mr53705039wmw.54.1451858423121; Sun, 03 Jan 2016 14:00:23 -0800 (PST) Return-Path: Received: from cavendish.fsfeurope.org (cavendish.fsfeurope.org. [2001:aa8:ffed::3:102]) by mx.google.com with ESMTPS id wl8si3570248wjc.134.2016.01.03.14.00.23 for (version=TLS1 cipher=AES128-SHA bits=128/128); Sun, 03 Jan 2016 14:00:23 -0800 (PST) Received-SPF: neutral (google.com: 2001:aa8:ffed::3:102 is neither permitted nor denied by best guess record for domain of hugo@fsfe.org) client-ip=2001:aa8:ffed::3:102; Authentication-Results: mx.google.com; spf=neutral (google.com: 2001:aa8:ffed::3:102 is neither permitted nor denied by best guess record for domain of hugo@fsfe.org) smtp.mailfrom=hugo@fsfe.org Received: from localhost (localhost [127.0.0.1]) by cavendish.fsfeurope.org (Postfix) with ESMTP id B18BC63B7B3 for ; Sun, 3 Jan 2016 23:00:26 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at cavendish Received: from cavendish.fsfeurope.org ([127.0.0.1]) by localhost (cavendish.fsfeurope.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id q7XxsCXRZ3AJ for ; Sun, 3 Jan 2016 23:00:23 +0100 (CET) Received: from localhost (195-132-30-150.rev.numericable.fr [195.132.30.150]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (Client did not present a certificate) (Authenticated sender: hugo) by cavendish.fsfeurope.org (Postfix) with ESMTPSA id 3783E63B7AA for ; Sun, 3 Jan 2016 23:00:22 +0100 (CET) Date: Sun, 3 Jan 2016 23:00:16 +0100 From: Hugo Roy To: eg@gaute.vetsj.com Subject: [Fwd] Re: [astroid] Keybinding configuration (#21) Message-ID: <20160103220016.GA7757@xps.dartybox.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="jq0ap7NbKX2Kqbes" Content-Disposition: inline User-Agent: Mutt/1.5.23.1 (2014-03-12) X-Keywords: \Important,\Inbox,dev/astroid --jq0ap7NbKX2Kqbes Content-Type: multipart/mixed; boundary="tKW2IUtsqtDRztdT" Content-Disposition: inline --tKW2IUtsqtDRztdT Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi, This is how I forward emails. Trying to open a thread on such an email crashes astroid for me as described in: https://github.com/gauteh/astroid/issues/30 I will test with this very email to see if this reproduces it. Best regards, --=20 Hugo Roy =E2=80=93 Free Software Foundation Europe https://fsfe.org/about/r= oy =20 Please use cryptography for email: see https://emailselfdefense.fsf.org/en/ Merci d=E2=80=99utiliser la cryptographie pour l=E2=80=99email=C2=A0: voir = https://emailselfdefense.fsf.org/fr/ --tKW2IUtsqtDRztdT Content-Type: message/rfc822 Content-Disposition: inline Return-Path: Received: from totosh.ampoliros.net ([unix socket]) by totosh (Cyrus git2.5+0-Debian-2.5~dev2015021301-0~kolab2) with LMTPA; Sun, 03 Jan 2016 20:16:24 +0100 X-Sieve: CMU Sieve 2.4 Received: by totosh.ampoliros.net (Postfix, from userid 116) id E6C3C23C5; Sun, 3 Jan 2016 20:16:23 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on totosh.ampoliros.net Received: from cavendish.fsfeurope.org (cavendish.fsfeurope.org [IPv6:2001:aa8:ffed::3:102]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by totosh.ampoliros.net (Postfix) with ESMTPS id D792423A7 for ; Sun, 3 Jan 2016 20:16:22 +0100 (CET) X-FSFE-Incoming: Origin:github.com, Trust:hi, Action:SkipGreylist (DNSWLId 22159) Received: from github-smtp2b-ext-cp1-prd.iad.github.net (github-smtp2-ext6.iad.github.net [192.30.252.197]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "*.iad.github.net", Issuer "DigiCert SHA2 High Assurance Server CA" (verified OK)) by cavendish.fsfeurope.org (Postfix) with ESMTPS id B0EF363B793 for ; Sun, 3 Jan 2016 20:17:56 +0100 (CET) Date: Sun, 03 Jan 2016 11:17:50 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1451848670; bh=jJEd9vv0sAOuClygsTGaEduhKSu7JUZAhVHRZlFfzwQ=; h=From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=Rz7NDNDVPgwxmhNUDPGx+Ezag7DWskTev8JfRGy5CVVmxJNOZBWngTMb4ayGppDts DdkXjYLLK/UgelZyuze52mc6EGgrVbN82eyGTgpsw4NFjiwqzae7wuK2q8Z4WdOGYb sHHpgi0LtIwuHBZXELtK+ClkQOEX6IZ9OwEbgCQk= From: Gaute Hope Reply-To: gauteh/astroid To: gauteh/astroid Cc: Hugo Roy Message-ID: In-Reply-To: References: Subject: Re: [astroid] Keybinding configuration (#21) Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="--==_mimepart_568973de735b3_31b63f87383d729c15738"; charset=UTF-8 Content-Transfer-Encoding: 7bit Precedence: list X-GitHub-Sender: gauteh X-GitHub-Recipient: hugoroy X-GitHub-Reason: author List-ID: gauteh/astroid List-Archive: https://github.com/gauteh/astroid List-Post: List-Unsubscribe: , X-Auto-Response-Suppress: All X-GitHub-Recipient-Address: hugo@fsfe.org ----==_mimepart_568973de735b3_31b63f87383d729c15738 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hugo Roy writes on January 3, 2016 12:29: > I'm having a hard time to set my own keybindings right now. It doesn't seem possible to override the defaults (i.e. if a key is already set to something then it can't be defined by the user for something else?) > > For instance, this doesn't work: > > `#thread_view.next_message=j` > > ``` > [debug] (12:28:38): key: registering key: thread_view.next_message: n > [ERROR] (12:28:38): key: j already exists in map. First; I updated the error so that it is possible to know which key it is conflicting with. In this case it is conflicting with `thread_view.down`. Secondly, this is a choice, since the other key-target would be unreachable. The current behavior is to not allow targets to be unreachable, and you would have to _also_ define `thread_view.down` in your custom keybindings. I guess, the other way is more logical? To just delete the original one (if it is not user-defined)? > Also, why can't a key be more than once, if the context is different. For instance consider: > > `main_window.close_page=C-w > thread_index.close_pane=C-w` > There was a bug in how I scanned for user-aliases, this should be fixed. --- Reply to this email directly or view it on GitHub: https://github.com/gauteh/astroid/issues/21#issuecomment-168533265 ----==_mimepart_568973de735b3_31b63f87383d729c15738 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit Hugo Roy writes on January 3, 2016 12:29:
> I'm having a hard time to set my own keybindings right now. It doesn't seem possible to override the defaults (i.e. if a key is already set to something then it can't be defined by the user for something else?)
>
> For instance, this doesn't work:
>
> `#thread_view.next_message=j`
>
> ```
> [debug] (12:28:38): key: registering key: thread_view.next_message: n
> [ERROR] (12:28:38): key: j already exists in map.

First; I updated the error so that it is possible to know which key it
is conflicting with.

In this case it is conflicting with `thread_view.down`.

Secondly, this is a choice, since the other key-target would be
unreachable. The current behavior is to not allow targets to be
unreachable, and you would have to _also_ define `thread_view.down` in
your custom keybindings. I guess, the other way is more logical? To just
delete the original one (if it is not user-defined)?


> Also, why can't a key be more than once, if the context is different. For instance consider:
>
> `main_window.close_page=C-w
> thread_index.close_pane=C-w`
>

There was a bug in how I scanned for user-aliases, this should be fixed.


Reply to this email directly or view it on GitHub.

----==_mimepart_568973de735b3_31b63f87383d729c15738-- --tKW2IUtsqtDRztdT-- --jq0ap7NbKX2Kqbes Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQEcBAEBCgAGBQJWiZntAAoJEI0CLJmz17eVyxoIAKD2SjxKdLWm+aqwgXSn9yGp ZLQKLpd9cMoNNcWQTgJbsKePkZCBt2vhHmNMpA/1F9c/truyNuPz8qWp3SZ7zwhA iqTYVTl56NRrhNJIfpdTz7eqO6EceZefl7SgiWmd8+SRPsJSQ3CL1Bn9ygA/2aW+ G0ei/JxQ2YI6sgLDPhwV0fN7O+CMUf5WKsFuU30Ggfzn1kGbUAXUp2P5Vc6YPst0 VkQLS0xcnSvAxob2IWOW1J4TCjpX8Svol0xJYYOh/x+RAGHFqe8H/oZfjUQPihni soaS0h6C2l+Y5IFJNePJN+ro41GJ9UuIeGy2O9m6XZF4ibUt7wHrvdxtL5Sboog= =cjsM -----END PGP SIGNATURE----- --jq0ap7NbKX2Kqbes-- astroid-0.14/tests/mail/test_mail/msg1.eml000066400000000000000000000164371335422170400205320ustar00rootroot00000000000000Delivered-To: eg@gaute.vetsj.com Received: by 10.90.117.16 with SMTP id p16cs629996agc; Thu, 15 Oct 2009 10:27:10 -0700 (PDT) Received: by 10.224.29.136 with SMTP id q8mr319959qac.51.1255627629637; Thu, 15 Oct 2009 10:27:09 -0700 (PDT) Return-Path: Received: from rubyforge.org (rubyforge.org [205.234.109.19]) by mx.google.com with ESMTP id 6si514021qyk.3.2009.10.15.10.27.09; Thu, 15 Oct 2009 10:27:09 -0700 (PDT) Received-SPF: pass (google.com: domain of sup-talk-bounces@rubyforge.org designates 205.234.109.19 as permitted sender) client-ip=205.234.109.19; Authentication-Results: mx.google.com; spf=pass (google.com: domain of sup-talk-bounces@rubyforge.org designates 205.234.109.19 as permitted sender) smtp.mail=sup-talk-bounces@rubyforge.org Received: from rubyforge.org (rubyforge.org [127.0.0.1]) by rubyforge.org (Postfix) with ESMTP id 247A613C896D; Thu, 15 Oct 2009 13:27:09 -0400 (EDT) X-Original-To: sup-talk@rubyforge.org Delivered-To: sup-talk@rubyforge.org Received: from olra.theworths.org (olra.theworths.org [82.165.184.25]) by rubyforge.org (Postfix) with ESMTP id 1D7961858283 for ; Thu, 15 Oct 2009 13:23:42 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id B3D484028BF for ; Thu, 15 Oct 2009 10:23:41 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org Received: from olra.theworths.org ([127.0.0.1]) by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Pmour5ONn-Ny for ; Thu, 15 Oct 2009 10:23:40 -0700 (PDT) Received: from cworth.org (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id 7E3254041FF for ; Thu, 15 Oct 2009 10:23:40 -0700 (PDT) From: Carl Worth To: Sup Talk Date: Thu, 15 Oct 2009 10:23:40 -0700 Message-Id: <1255623468-sup-2284@yoom.home.cworth.org> User-Agent: Sup/git MIME-Version: 1.0 Subject: [sup-talk] Indexing messages without ruby X-BeenThere: sup-talk@rubyforge.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: User & developer discussion of Sup List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============0662559581==" Sender: sup-talk-bounces@rubyforge.org Errors-To: sup-talk-bounces@rubyforge.org --===============0662559581== Content-Transfer-Encoding: 8bit Content-Type: multipart/signed; micalg="pgp-sha1"; boundary="=-1255627427-932920-11779-2946-1-="; protocol="application/pgp-signature" --=-1255627427-932920-11779-2946-1-= Content-Type: text/plain; charset=UTF-8 I've gone forward with an experiment I had mentioned I might try: trying to create a faster sup-sync by using C rather than ruby. My approach was to use Xapian to create a sup-compatible index, and to use libgmime for the mail parsing. That meant that I only had to write a tiny bit of code to glue gmime together with xapian. The code is an unholy mess of C and C++, (so there are as many as three different string types, sometimes all in one function!), but it seems to be working at least. I wrote a little xapian-dump program to make a textual dump of a database, (all data, terms, and values for each document), and I verified that my program, notmuch, could create identical[*] terms and values when indexing about 150 recent messages from the sup-talk mailing list. I've also verified that notmuch can index my own collection of nearly 600,000 email messages without any problems. The big difference in notmuch that makes the resulting index incompatible with sup is that it doesn't generate a serialized ruby data structure for the document data like sup currently expects. Instead it just shoves the mail message's filename into the data field. So if anyone wanted to use notmuch with sup, this would need to be resolved on one side or the other.[**] As for performance, things look pretty good, but perhaps not as good as I had hoped. From a test of importing about 400,000 messages from my mail archive, notmuch starts out between 300 - 400 messages/sec. but after about 40,000 messages slows down to about 100 messages/sec. and stabilizes there. I haven't tested sup recently, but from my recollection indexing the same archive on the same computer, sup started out at about 40 messages/sec. and slowed down to about 20 messages/sec. (for as long as I watched it). So this is preliminary, but it looks like notmuch gives a 5-10x performance improvement over sup, (but likely closer to the 5x end of that range unless you've got a very small index---at which point who cares how fast/slow things are?). A quick glance with a profiler shows xapian dominating the notmuch profile at 62% and gmime hardly appearing at all (near 2%). As contrast, ruby dominates the sup-sync profile with xapian down in the 8% range. (So there's the 10x target there.) One other advantage is that with xapian dominating the profile, notmuch stands to benefit from future performance improvements to xapian itself. If that ruby time is dominated by mail parsing, it's possible that much of the advantage of notmuch could be gained by simply switching from rmail to a non-ruby-based parser like gmime. But that's just a guess as I haven't tried to find where the ruby time is being spent. If anyone is interested in playing along at home, my code is available via git with: git clone git://git.cworth.org/git/notmuch Have fun, -Carl [*] Some minor differences exist in the heuristics for reognizing signatures, and sup sometimes splits numbers into multiple terms (such as "1754" indexed as two terms "17" and "54") which I couldn't explain nor replicate. Finally notmuch doesn't attempt to index encrypted messages. [**] Beyond this incompatibility, notmuch is not even close to being a functional replacement for sup-sync. It currently only knows how to shove new documents into the database and doesn't know how to do any updating. Similarly it doesn't have any code to examine mtimes to identify new or changed messages to be updated. It also doesn't look at maildir filename flags to determine labels, nor does it provide any means for the user to request custom labels to be attached to certain messages. --=-1255627427-932920-11779-2946-1-= Content-Disposition: attachment; filename="signature.asc" Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iD8DBQFK11qc6JDdNq8qSWgRAkPeAKCcNKUO/0LTFQAJTQe/fkOBJLsYrgCfXrlv 3EocQ6wEdGiWMmwmuaVPp34= =7TJz -----END PGP SIGNATURE----- --=-1255627427-932920-11779-2946-1-=-- --===============0662559581== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ sup-talk mailing list sup-talk@rubyforge.org http://rubyforge.org/mailman/listinfo/sup-talk --===============0662559581==-- astroid-0.14/tests/mail/test_mail/msg2.eml000066400000000000000000000157221335422170400205270ustar00rootroot00000000000000Delivered-To: eg@gaute.vetsj.com Received: by 10.90.117.16 with SMTP id p16cs274637agc; Mon, 19 Oct 2009 21:24:40 -0700 (PDT) Received: by 10.224.123.103 with SMTP id o39mr3040284qar.93.1256012679614; Mon, 19 Oct 2009 21:24:39 -0700 (PDT) Return-Path: Received: from rubyforge.org (rubyforge.org [205.234.109.19]) by mx.google.com with ESMTP id 6si4026935qyk.105.2009.10.19.21.24.39; Mon, 19 Oct 2009 21:24:39 -0700 (PDT) Received-SPF: pass (google.com: domain of sup-talk-bounces@rubyforge.org designates 205.234.109.19 as permitted sender) client-ip=205.234.109.19; Authentication-Results: mx.google.com; spf=pass (google.com: domain of sup-talk-bounces@rubyforge.org designates 205.234.109.19 as permitted sender) smtp.mail=sup-talk-bounces@rubyforge.org Received: from rubyforge.org (rubyforge.org [127.0.0.1]) by rubyforge.org (Postfix) with ESMTP id 3FFF21D78853; Tue, 20 Oct 2009 00:24:38 -0400 (EDT) X-Original-To: sup-talk@rubyforge.org Delivered-To: sup-talk@rubyforge.org Received: from olra.theworths.org (olra.theworths.org [82.165.184.25]) by rubyforge.org (Postfix) with ESMTP id A1E64197827D for ; Tue, 20 Oct 2009 00:24:32 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id E33E04028D1 for ; Mon, 19 Oct 2009 21:24:31 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org Received: from olra.theworths.org ([127.0.0.1]) by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id nLJrw9MXJ-nX for ; Mon, 19 Oct 2009 21:24:31 -0700 (PDT) Received: from cworth.org (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id D45D34041FF for ; Mon, 19 Oct 2009 21:24:30 -0700 (PDT) From: Carl Worth To: sup-talk In-reply-to: <1255623468-sup-2284@yoom.home.cworth.org> References: <1255623468-sup-2284@yoom.home.cworth.org> Date: Mon, 19 Oct 2009 21:24:21 -0700 Message-Id: <1256009934-sup-9323@yoom.home.cworth.org> User-Agent: Sup/git MIME-Version: 1.0 Subject: Re: [sup-talk] Indexing messages without ruby X-BeenThere: sup-talk@rubyforge.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: User & developer discussion of Sup List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============1082503660==" Sender: sup-talk-bounces@rubyforge.org Errors-To: sup-talk-bounces@rubyforge.org --===============1082503660== Content-Transfer-Encoding: 8bit Content-Type: multipart/signed; micalg="pgp-sha1"; boundary="=-1256012668-242520-27480-903-1-="; protocol="application/pgp-signature" --=-1256012668-242520-27480-903-1-= Content-Type: text/plain; charset=UTF-8 Excerpts from Carl Worth's message of Thu Oct 15 10:23:40 -0700 2009: > As for performance, things look pretty good, but perhaps not as good > as I had hoped. I know William already said he's not all that concerned with the performance of sup-sync since it's not a common operation, but me, I can't stop working on the problem. And I think that's justified, really. For one thing, the giant sup-sync is one of the first things a new user has to do. And I think that having to wait for an operation that's measured in hours before being able to use the program at all can be very off-putting. I think we could do better to give a good first impression. > So this is preliminary, but it looks like notmuch gives a 5-10x > performance improvement over sup, (but likely closer to the 5x end of > that range unless you've got a very small index---at which point who > cares how fast/slow things are?). Those numbers were off. I now believe that my original code gained only a 3x improvement by switching from ruby/rmail to C/GMime for mail parsing. But I've done a little more coding since. Here are the current results: For a benchmark of ~ 45000 messages, rate in messages/sec.: Rate Commit ID Significant change ----- --------- ------------------ 41 sup (with xapian, from next) 120 5fbdbeb33 Switch from ruby to C (with GMime) 538 9bc4253fa Index headers only, not body 1050 371091139 Use custom header parser, not GMime (Before each run the Linux disk cache was cleared with: sync; echo 3 > /proc/sys/vm/drop_caches ) So beyond the original 3x improvement, I gained a further 4x improvement by simply doing less work. I'm now starting off by only indexing message-id and thread-id data. That's obviously "cheating" in terms of comparing performance, but I think it really makes sense to do this. The idea is that by just computing the thread-ids and indexing those for a collection of email, that initial sup-sync could be performed very quickly. Then, later, (as a background thread while sup is running), the full-text indexing could be performed. Finally, I gained a final 2x improvement by not using GMime at all, (which constructs a data structure for the entire message, even if I only want a few header), and instead just rolling a simple parser for email headers. (Did you know you can hide nested parenthesized comments all over the place in email headers? I didn't.) I'm quite happy with the final result that's 25x faster than sup. I can build a cold-cache index from my half-million message archive in less than 10 minutes, (rather than 4 hours). And performance is fairly IO-bound at this point, (in the 10-minute run, less than 7 minutes of CPU are used). Anyway, there are some ideas to consider for sup. If anyone wants to play with my code, it's here: git clone git://notmuch.org/notmuch I won't bore the list with further developments in notmuch, if any, unless it's on-topic, (such as someone trying to make sup work on top of an index built by notmuch). And I'd be delighted to see that kind of thing happen. Happy hacking, -Carl --=-1256012668-242520-27480-903-1-= Content-Disposition: attachment; filename="signature.asc" Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iD8DBQFK3Tt16JDdNq8qSWgRAtghAKCUVy7gCLoeuODI9/x1HuTxD+Al0ACfVImM gFw31VFGSqNss0h6+73GTSI= =QNEw -----END PGP SIGNATURE----- --=-1256012668-242520-27480-903-1-=-- --===============1082503660== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ sup-talk mailing list sup-talk@rubyforge.org http://rubyforge.org/mailman/listinfo/sup-talk --===============1082503660==-- astroid-0.14/tests/mail/test_mail/multipart.eml000066400000000000000000000105431335422170400216740ustar00rootroot00000000000000Date: Wed, 07 Dec 2016 12:36:13 -0800 From: Hugo Roy Reply-To: astroidmail/astroid To: astroidmail/astroid Cc: Gaute Hope , Comment Message-ID: In-Reply-To: References: Subject: Re: [astroidmail/astroid] Email as attachment (#237) Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="--==_mimepart_584872bdbc081_555e3fd4d9ccf13018989"; charset=UTF-8 Content-Transfer-Encoding: 7bit Precedence: list X-GitHub-Sender: hugoroy X-GitHub-Recipient: gauteh X-GitHub-Reason: comment List-ID: astroidmail/astroid List-Archive: https://github.com/astroidmail/astroid List-Post: List-Unsubscribe: , X-Auto-Response-Suppress: All X-GitHub-Recipient-Address: eg@gaute.vetsj.com X-SG-EID: ZSukC93qdq8bK9Ka8+oNiPoz7qEGBUQTfFlUCp/zfIuHPYw4ucWbbS+g7q7e2datMOWuhg/z32ISN5 uU5+pgAIlvrdURotyKz4w3NOtihxWMbwa6yMKIM26nrTQ1L6ojW21fTTkM16F67Tf31AEebjQ25eP3 PFY48pu/i4uZGHLXXQgMWEEfqNQgz7BE6D7PXSnD2nADR5L1ZSr3XLXg9aqzApvg9PwfcsSTu2KEkf 4= X-Keywords: \Important,\Inbox,dev/astroid ----==_mimepart_584872bdbc081_555e3fd4d9ccf13018989 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit 1. save an email as file.eml 2. write a new email 3. attach file.eml 4. save as draft 4. quit astroid 5. open draft again 6. edit the draft 7. here it is. -- You are receiving this because you commented. Reply to this email directly or view it on GitHub: https://github.com/astroidmail/astroid/issues/237#issuecomment-265565752 ----==_mimepart_584872bdbc081_555e3fd4d9ccf13018989 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit
  1. save an email as file.eml
  2. write a new email
  3. attach file.eml
  4. save as draft
  5. quit astroid
  6. open draft again
  7. edit the draft
  8. here it is.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.

----==_mimepart_584872bdbc081_555e3fd4d9ccf13018989-- astroid-0.14/tests/mail/test_mail/no-nl-link-html.eml000066400000000000000000000005001335422170400225630ustar00rootroot00000000000000Delivery-date: Mon, 27 Oct 2014 06:15:16 +0100 From: tst@asfdasas.sdf To: test@gadsdfa.sdf Message-Id: Date: Mon, 27 Oct 2014 06:15:13 +0100 Mime-Version: 1.0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit http://line-ignored.com astroid-0.14/tests/mail/test_mail/no-nl-link-plain.eml000066400000000000000000000004331335422170400227270ustar00rootroot00000000000000Delivery-date: Mon, 27 Oct 2014 06:15:16 +0100 From: tst@asfdasas.sdf To: test@gadsdfa.sdf Message-Id: Date: Mon, 27 Oct 2014 06:15:13 +0100 Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit http://line-ignored.com astroid-0.14/tests/mail/test_mail/no-nl-link.eml000066400000000000000000000013531335422170400216300ustar00rootroot00000000000000Delivery-date: Mon, 27 Oct 2014 06:15:16 +0100 From: tst@asfdasas.sdf To: test@gadsdfa.sdf Message-Id: Date: Mon, 27 Oct 2014 06:15:13 +0100 Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="--==_mimepart_540ffd23a9176_53cd3ffb4d3fb2bc2852c3"; charset=UTF-8 Content-Transfer-Encoding: 7bit Precedence: list ----==_mimepart_540ffd23a9176_53cd3ffb4d3fb2bc2852c3 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit http://line-ignored.com ----==_mimepart_540ffd23a9176_53cd3ffb4d3fb2bc2852c3 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit http://line-ignored.com ----==_mimepart_540ffd23a9176_53cd3ffb4d3fb2bc2852c3-- astroid-0.14/tests/mail/test_mail/no-nl.eml000066400000000000000000000023031335422170400206710ustar00rootroot00000000000000Delivery-date: Mon, 27 Oct 2014 06:15:16 +0100 From: tst@asfdasas.sdf To: test@gadsdfa.sdf Message-Id: Date: Mon, 27 Oct 2014 06:15:13 +0100 Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="--==_mimepart_540ffd23a9176_53cd3ffb4d3fb2bc2852c3"; charset=UTF-8 Content-Transfer-Encoding: 7bit Precedence: list ----==_mimepart_540ffd23a9176_53cd3ffb4d3fb2bc2852c3 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit messagecontent. --- Reply to this email directly or view it on GitHub: line-ignored ----==_mimepart_540ffd23a9176_53cd3ffb4d3fb2bc2852c3 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit

messagecontent


Reply to this email directly or view it on GitHub.

----==_mimepart_540ffd23a9176_53cd3ffb4d3fb2bc2852c3-- astroid-0.14/tests/mail/test_mail/only-html.eml000066400000000000000000000044771335422170400216070ustar00rootroot00000000000000Date: Wed, 07 Dec 2016 12:36:13 -0800 From: asfasdf To: astroidmail/astroid Message-ID: Subject: Only HTML Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit
  1. save an email as file.eml
  2. write a new email
  3. attach file.eml
  4. save as draft
  5. quit astroid
  6. open draft again
  7. edit the draft
  8. here it is.


You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.

astroid-0.14/tests/mail/test_mail/quote-test.eml000066400000000000000000000003541335422170400217640ustar00rootroot00000000000000From: Charlie Root To: Cc: Subject: quote test Date: Mon, 22 Feb 2016 12:44:59 +0000 (UTC) Message-ID: asdfa@asdfs.fdsd Hey >a >>a > >>a > > > > > b asdf > b >>b >> a > > a > > a > a > b > > a > > b astroid-0.14/tests/mail/test_out_of_sync.eml000066400000000000000000000003711335422170400212560ustar00rootroot00000000000000Delivery-date: Mon, 28 Oct 2014 06:15:16 +0100 From: tst@asfdasas.sdf To: wetest@gadsdfa.sdf Cc: sdf@asd.dds Bcc: asdfdf@asd.asd Message-Id: Envelope-To: ba@adsf.asd Date: Mon, 28 Oct 2014 06:15:13 +0100 asdfasdfa sdfa sdfasdf astroid-0.14/tests/run_test.sh000077500000000000000000000027521335422170400164560ustar00rootroot00000000000000#! /usr/bin/env bash # # Set up environment and run test specified on command line set -ep SRCDIR="${1}" BINDIR="${2}" TEST=${3} echo "Source dir: ${SRCDIR}" echo "Build dir: ${BINDIR}" export NOTMUCH_CONFIG="${BINDIR}/tests/mail/test_config" export GNUPGHOME="${BINDIR}/tests/test_home/gnupg" export ASTROID_BUILD_DIR="${BINDIR}" gpgconf -v --kill all # stop all components if [ ! -e "${NOTMUCH_CONFIG}" ]; then echo "Setting up test suite.." notmuch_db="${BINDIR}/tests/mail/test_mail" echo "setting up notmuch test db..: ${notmuch_db}" mkdir -p "${notmuch_db}" cp "${SRCDIR}/tests/mail/test_config.template" "${NOTMUCH_CONFIG}" notmuch config set database.path "${notmuch_db}" cp "${SRCDIR}/tests/mail/"*.eml "${notmuch_db}/.." cp -r "${SRCDIR}/tests/mail/test_mail/"* "${notmuch_db}/" notmuch new cp "${SRCDIR}/tests/forktee"* "${BINDIR}/tests/" cp -r "${SRCDIR}/tests/test_home" "${BINDIR}/tests/" # setup GPG mkdir -p "${GNUPGHOME}" chmod og-rwx "${GNUPGHOME}" pushd "${GNUPGHOME}" gpg -v --batch --gen-key "${SRCDIR}/tests/foo1.key" gpg -v --batch --gen-key "${SRCDIR}/tests/foo2.key" gpg -v --batch --always-trust --import one.pub gpg -v --batch --always-trust --import two.pub echo "always-trust" > gpg.conf popd # set up theme mkdir -p "${BINDIR}/ui" find "${SRCDIR}/ui/" \( -name "*.scss" -o -name "*.html" -o -name "*.css" \) -exec cp -v "{}" "${BINDIR}/ui/" \; fi echo "Running: ${TEST}.." pushd "${BINDIR}" ./tests/${TEST} popd astroid-0.14/tests/test_address.cc000066400000000000000000000030001335422170400172320ustar00rootroot00000000000000# define BOOST_TEST_DYN_LINK # define BOOST_TEST_MODULE TestAddress # include # include "test_common.hh" # include "utils/address.hh" # include "message_thread.hh" using Astroid::Address; using Astroid::AddressList; using Astroid::Message; BOOST_AUTO_TEST_SUITE(TestAddressA) BOOST_AUTO_TEST_CASE(quoting) { setup (); ustring ar = "A B "; Address a (ar); LOG (test) << "address: " << a.full_address (); BOOST_CHECK (ar == a.full_address ()); ar = "\"B, A\" "; a = Address (ar); LOG (test) << "address: " << a.full_address (); BOOST_CHECK (ar == a.full_address ()); /* string created by: * * =?utf-8?B?[insert string]?= * * echo -n "\"Mütter, A\"" | base64 * * in a UTF-8 terminal. */ ar = "=?utf-8?B?Ik3DvHR0ZXIsIEEi?= "; a = Address (ar); LOG (test) << "address: " << a.full_address (); BOOST_CHECK ("\"Mütter, A\" " == a.full_address ()); AddressList al (a); BOOST_CHECK ("\"Mütter, A\" " == al.str()); teardown (); } BOOST_AUTO_TEST_CASE(utf8_isspace) { setup (); Message m ("tests/mail/test_mail/isspace-fail-utf-8.eml"); LOG (test) << m.sender; Address ma (m.sender); ustring b = ma.fail_safe_name (); LOG (test) << "address: " << b; Address testspace (" Hey", ""); BOOST_CHECK ("Hey" == testspace.fail_safe_name ()); teardown (); } BOOST_AUTO_TEST_SUITE_END() astroid-0.14/tests/test_bad_content_id.cc000066400000000000000000000037171335422170400205600ustar00rootroot00000000000000# define BOOST_TEST_DYN_LINK # define BOOST_TEST_MODULE TestReading # include # include "test_common.hh" # include "db.hh" # include "message_thread.hh" # include "chunk.hh" # include "glibmm.h" using std::endl; using Astroid::Message; using Astroid::MessageThread; using Astroid::Chunk; using Astroid::ustring; BOOST_AUTO_TEST_SUITE(Reading) /* * the Content-Type: .. at line 30: seems to not be captured by gmime, * removing the newline (as in BadContentId2) fixes the issue. * */ BOOST_AUTO_TEST_CASE(BadContentId2) { setup (); ustring fname = "tests/mail/test_mail/bad-content-part-id-2.eml"; Message m (fname); BOOST_CHECK_NO_THROW (m.viewable_text (true)); /* the first part is probablematic */ /* refptr c = m.root->kids[0]; */ for (auto &c : m.mime_messages ()) { LOG (test) << "chunk: " << c->id << ", viewable: " << c->viewable << ", mime_message: " << c->mime_message ; /* std::string content ((char *) c->contents ()->get_data ()); LOG (test) << content; */ refptr mt = refptr (new MessageThread ()); mt->add_message (c); } teardown (); } BOOST_AUTO_TEST_CASE(BadContentId1) { setup (); ustring fname = "tests/mail/test_mail/bad-content-part-id.eml"; Message m (fname); BOOST_CHECK_NO_THROW (m.viewable_text (true)); /* the first part is probablematic */ /* refptr c = m.root->kids[0]; */ for (auto &c : m.mime_messages ()) { LOG (test) << "chunk: " << c->id << ", viewable: " << c->viewable << ", mime_message: " << c->mime_message ; /* std::string content ((char *) c->contents ()->get_data ()); LOG (test) << content; */ refptr mt = refptr (new MessageThread ()); mt->add_message (c); } teardown (); } BOOST_AUTO_TEST_SUITE_END() astroid-0.14/tests/test_common.hh000066400000000000000000000004311335422170400171140ustar00rootroot00000000000000# pragma once # include "astroid.hh" # include "proto.hh" using Astroid::astroid; using Astroid::ustring; // for logging # define test trace void setup () { astroid = Astroid::Astroid::create (); astroid->main_test (); } void teardown () { Astroid::astroid.clear (); } astroid-0.14/tests/test_composed_message.cc000066400000000000000000000071751335422170400211430ustar00rootroot00000000000000# define BOOST_TEST_DYN_LINK # define BOOST_TEST_MODULE TestCompose # include # include "test_common.hh" # include "compose_message.hh" # include "message_thread.hh" # include "account_manager.hh" # include "utils/address.hh" # include "utils/ustring_utils.hh" BOOST_AUTO_TEST_SUITE(Composing) BOOST_AUTO_TEST_CASE(compose_read_test) { using Astroid::ComposeMessage; setup (); ComposeMessage * c = new ComposeMessage (); delete c; teardown (); } BOOST_AUTO_TEST_CASE (compose_test_body) { using Astroid::ComposeMessage; using Astroid::Message; setup (); ComposeMessage * c = new ComposeMessage (); ustring bdy = "This is test: æøå.\n > testing\ntesting\n..."; LOG (trace) << "cm: writing utf-8 text to message body: " << bdy; c->body << bdy; c->build (); c->finalize (); ustring fn = c->write_tmp (); delete c; Message m (fn); ustring rbdy = m.viewable_text (false); BOOST_CHECK_MESSAGE (bdy == rbdy, "message reading produces the same output as compose message input"); unlink (fn.c_str ()); teardown (); } BOOST_AUTO_TEST_CASE (compose_test_references) { using Astroid::ComposeMessage; using Astroid::Message; setup (); ComposeMessage * c = new ComposeMessage (); ustring ref = "test-ref"; c->set_references (ref); BOOST_CHECK_MESSAGE (ref == g_mime_object_get_header (GMIME_OBJECT(c->message), "References"), "message references is set"); c->set_references (""); BOOST_CHECK_MESSAGE (FALSE == g_mime_header_list_contains (g_mime_object_get_header_list (GMIME_OBJECT(c->message)), "References"), "message references is set when empty"); /* try to set empty reference when references are empty already */ c->set_references (""); teardown (); } BOOST_AUTO_TEST_CASE (send_messages) { using Astroid::ComposeMessage; using Astroid::Message; using Astroid::Account; using Astroid::AddressList; using Astroid::UstringUtils; setup (); Account a = astroid->accounts->accounts[0]; a.email = "gaute@astroidmail.bar"; a.signature_file = "tests/test_home/signature.txt"; /* read signature */ std::ifstream s (a.signature_file.c_str ()); std::ostringstream sf; sf << s.rdbuf (); s.close (); ustring signature = sf.str (); LOG (trace) << "cm: account gpg: " << a.gpgkey; LOG (debug) << "cm: signature file: " << a.signature_file; ustring fname = "tests/mail/test_mail/test-output.eml"; /* a.sendmail = "tee " + fname; */ a.sendmail = "tests/forktee.sh " + fname; LOG (debug) << "cm: sendmail: " << a.sendmail; for (int i = 0; i < 1; i++) { ComposeMessage * c = new ComposeMessage (); ustring to = "bar@astroidmail.bar"; ustring subject = "æøå adfasdf asdf"; ustring id = "1@test"; c->set_from (&a); c->set_id (id); c->set_to (to); c->set_subject (subject); /* set body */ ustring body = UstringUtils::random_alphanumeric (1000) + "\n >>" + UstringUtils::random_alphanumeric (1500); c->body << body; c->include_signature = true; c->build (); c->finalize (); if (i % 2 == 0) { c->send_threaded (); } else { c->send (); } delete c; /* read message */ Message m (fname); BOOST_CHECK (m.subject == subject); BOOST_CHECK (AddressList(m.to()).str () == to); BOOST_CHECK (m.mid == id); BOOST_CHECK (m.viewable_text (false) == (body + signature)); unlink (fname.c_str ()); } teardown (); } BOOST_AUTO_TEST_SUITE_END() astroid-0.14/tests/test_convert_error.cc000066400000000000000000000053061335422170400205110ustar00rootroot00000000000000# define BOOST_TEST_DYN_LINK # define BOOST_TEST_MODULE TestConvertError # include # include # include "test_common.hh" # include "db.hh" # include "message_thread.hh" # include "glibmm.h" using std::cout; using std::endl; using std::locale; using Astroid::ustring; BOOST_AUTO_TEST_SUITE(Reading) BOOST_AUTO_TEST_CASE(reading_convert_error) { setup (); ustring fname = "tests/mail/test_mail/convert_error.eml"; Astroid::Message m (fname); BOOST_CHECK_NO_THROW (m.viewable_text (false)); teardown (); } BOOST_AUTO_TEST_CASE(reply_convert_error) { setup (); ustring fname = "tests/mail/test_mail/bad-convert-error.eml"; Astroid::Message msg (fname); /* quote original message */ std::ostringstream quoted; ustring quoting_a = ustring::compose ("Excerpts from %1's message of %2:", Astroid::Address(msg.sender.raw()).fail_safe_name(), msg.pretty_verbose_date()); quoted << quoting_a.raw () << endl; std::string vt = msg.viewable_text(false); std::stringstream sstr (vt); while (sstr.good()) { std::string line; std::getline (sstr, line); quoted << ">"; if (line[0] != '>') quoted << " "; quoted << line << endl; } ustring body = ustring(quoted.str()); /* test writing out */ std::string name = "tests/mail/test_mail/tmp-reply-convert-error"; LOG (test) << "writing to tmp file " << name; std::fstream tmpfile (name, std::fstream::out); tmpfile << "From: test@test.no" << endl; //BOOST_CHECK_THROW ( (tmpfile << body) , std::exception); BOOST_CHECK_NO_THROW ( tmpfile << body.raw() ); tmpfile << endl; tmpfile.close (); LOG (test) << "removing tmp file"; std::remove (name.c_str()); teardown (); } /* this test should be last since it messes up the locale for the other * tests */ BOOST_AUTO_TEST_CASE(glib_convert_error) { cout << "the current user preferred locale is: " << locale("").name() << endl; setlocale (LC_ALL, ""); cout << "the current user preferred locale is: " << locale("").name() << endl; locale::global (locale ("")); cout << "the current user preferred locale is: " << locale("").name() << endl; Glib::init (); BOOST_TEST_MESSAGE ("testing glib conversion of: æøå.."); const char * input = "æøå"; BOOST_WARN_MESSAGE (Glib::get_charset (), "The current locale is not utf8"); std::string current_locale; Glib::get_charset (current_locale); BOOST_TEST_MESSAGE ("locale: " + current_locale); BOOST_CHECK_NO_THROW(ustring out = Glib::locale_to_utf8 (input)); } BOOST_AUTO_TEST_SUITE_END() astroid-0.14/tests/test_crypto.cc000066400000000000000000000233231335422170400171370ustar00rootroot00000000000000# define BOOST_TEST_DYN_LINK # define BOOST_TEST_MODULE TestCrypto # include # include "test_common.hh" # include "compose_message.hh" # include "crypto.hh" # include "message_thread.hh" # include "account_manager.hh" # include "db.hh" # include "utils/gmime/gmime-compat.h" BOOST_AUTO_TEST_SUITE(GPGEncryption) BOOST_AUTO_TEST_CASE(crypto_compose_simple_test) { using Astroid::ComposeMessage; using Astroid::Account; setup (); Account a = astroid->accounts->accounts[0]; LOG (trace) << "cy: account gpg: " << a.gpgkey; ComposeMessage * c = new ComposeMessage (); c->set_from (&a); delete c; teardown (); } BOOST_AUTO_TEST_CASE (crypto_compose_test_encrypt_body) { using Astroid::ComposeMessage; using Astroid::Account; using Astroid::Message; setup (); Account a = astroid->accounts->accounts[0]; LOG (trace) << "cy: account gpg: " << a.gpgkey; a.email = "gaute@astroidmail.bar"; ComposeMessage * c = new ComposeMessage (); c->set_from (&a); c->set_to ("astrid@astroidmail.bar"); c->encrypt = true; c->sign = false; ustring bdy = "This is test: æøå.\n > testing\ntesting\n..."; LOG (trace) << "cm: writing utf-8 text to message body: " << bdy; c->body << bdy; LOG (trace) << "build:"; c->build (); LOG (trace) << "finalize:"; c->finalize (); ustring fn = c->write_tmp (); BOOST_CHECK_MESSAGE (c->encryption_success == true, "encryption should be successful"); LOG (test) << "cm: encryption error: " << c->encryption_error; LOG (test) << "cm: encrypted content: "; LOG (test) << g_mime_object_to_string (GMIME_OBJECT(c->message), NULL); LOG (test) << "cm: deleting ComposeMessage.."; delete c; Message m (fn); ustring rbdy = m.viewable_text (false); BOOST_CHECK_MESSAGE (bdy == rbdy, "message reading produces the same output as compose message input"); unlink (fn.c_str ()); teardown (); } BOOST_AUTO_TEST_CASE (crypto_compose_test_sign_body) { using Astroid::ComposeMessage; using Astroid::Account; using Astroid::Message; setup (); Account a = astroid->accounts->accounts[0]; LOG (test) << "cy: account gpg: " << a.gpgkey; a.email = "gaute@astroidmail.bar"; ComposeMessage * c = new ComposeMessage (); c->set_from (&a); c->set_to ("who@astroidmail.bar"); // no pub key c->encrypt = false; c->sign = true; ustring bdy = "This is test: æøå.\n > testing\ntesting\n..."; LOG (test) << "cm: writing utf-8 text to message body: " << bdy; c->body << bdy; c->build (); c->finalize (); ustring fn = c->write_tmp (); BOOST_CHECK_MESSAGE (c->encryption_success == true, "encryption should be successful"); LOG (test) << "cm: encryption error: " << c->encryption_error; LOG (test) << "cm: encrypted content: "; LOG (test) << g_mime_object_to_string (GMIME_OBJECT(c->message), NULL); LOG (test) << "cm: deleting ComposeMessage.."; delete c; Message m (fn); ustring rbdy = m.viewable_text (false); BOOST_CHECK_MESSAGE (bdy == rbdy, "message reading produces the same output as compose message input"); unlink (fn.c_str ()); teardown (); } BOOST_AUTO_TEST_CASE (crypto_missing_pub) { using Astroid::ComposeMessage; using Astroid::Account; using Astroid::Message; setup (); Account a = astroid->accounts->accounts[0]; LOG (test) << "cy: account gpg: " << a.gpgkey; a.email = "gaute@astroidmail.bar"; ComposeMessage * c = new ComposeMessage (); c->set_from (&a); c->set_to ("err@astroidmail.bar"); // unknown c->encrypt = true; ustring bdy = "This is test: æøå.\n > testing\ntesting\n..."; c->body << bdy; LOG (test) << "build:"; c->build (); LOG (test) << "finalize:"; c->finalize (); BOOST_CHECK_MESSAGE (c->encryption_success == false, "encryption should fail"); LOG (test) << "cm: encryption error: " << c->encryption_error; LOG (test) << "cm: encrypted content: "; LOG (test) << g_mime_object_to_string (GMIME_OBJECT(c->message), NULL); delete c; teardown (); } BOOST_AUTO_TEST_CASE (crypto_too_many_open_files) { using Astroid::ComposeMessage; using Astroid::Account; using Astroid::Message; using Astroid::MessageThread; using Astroid::message_error; using Astroid::Db; using Astroid::NotmuchThread; setup (); Account a = astroid->accounts->accounts[0]; LOG (trace) << "cy: account gpg: " << a.gpgkey; a.email = "gaute@astroidmail.bar"; /* create a test message */ ComposeMessage * c = new ComposeMessage (); c->set_from (&a); c->set_to ("astrid@astroidmail.bar"); c->encrypt = true; c->sign = true; ustring bdy = "This is test: æøå.\n > testing\ntesting\n..."; c->body << bdy; c->set_subject ("test gpg e-mail"); ustring mid = "test-gpg-1@astroid"; c->set_id (mid); c->build (); c->finalize (); ustring fn = "tests/mail/test_mail/gpg-test-1.eml"; c->write (fn); system ("notmuch new; notmuch search \"*\""); BOOST_CHECK_MESSAGE (c->encryption_success == true, "encryption should be successful"); LOG (test) << "cm: deleting ComposeMessage.."; delete c; Message *m; { Db db(Db::DATABASE_READ_ONLY); db.on_message (mid, [&](notmuch_message_t * msg) { LOG (test) << "trying to open encrypted file."; m = new Message (msg, 0); }); } /* check that body matches */ ustring rbdy = m->viewable_text (false); BOOST_CHECK_MESSAGE (bdy == rbdy, "message reading produces the same output as compose message input"); /* notmuch thread id */ ustring tid = m->tid; delete m; refptr nt; LOG (test) << "trying to open thread: " << tid; { Db db(Db::DATABASE_READ_ONLY); db.on_thread (tid, [&](notmuch_thread_t * nmt) { BOOST_CHECK (nmt != NULL); nt = refptr (new NotmuchThread (nmt)); }); } /* Okay, let's see if we can provoke 'Too many open files' in GPG */ int tries = 0; bool failed = false; try { for (int i = 0; i < 100; i ++) { LOG (info) << "loading message thread.."; refptr mthread = refptr(new MessageThread (nt)); Db db (Db::DATABASE_READ_ONLY); mthread->load_messages (&db); BOOST_CHECK_MESSAGE (bdy == mthread->messages[0]->viewable_text (false), "message body matches composed message"); tries++; } } catch (Astroid::message_error &ex) { LOG (error) << "caught too many files error: " << ex.what (); failed = true; } /* let's try without using refptr */ /* LOG (info) << "loading without using refptr.."; try { for (int i = 0; i < 1200; i ++) { LOG (info) << "loading message thread.."; MessageThread mthread (nt); Db db (Db::DATABASE_READ_ONLY); mthread.load_messages (&db); tries++; } } catch (Astroid::message_error &ex) { LOG (error) << "caught too many files error: " << ex.what (); failed = true; } */ LOG (warn) << "opened a GPG e-mail: " << tries << " times."; BOOST_CHECK_MESSAGE (failed == false, "Caught 'Too many open files error'"); /* removing test encrypted file */ unlink (fn.c_str ()); system ("notmuch new"); teardown (); } BOOST_AUTO_TEST_CASE (decrypt_entire_message) { using Astroid::ComposeMessage; using Astroid::Account; using Astroid::Message; setup (); Account a = astroid->accounts->accounts[0]; LOG (trace) << "cy: account gpg: " << a.gpgkey; a.email = "gaute@astroidmail.bar"; ComposeMessage * c = new ComposeMessage (); c->set_from (&a); c->set_to ("astrid@astroidmail.bar"); c->encrypt = true; c->sign = false; ustring bdy = "This is test: æøå.\n > testing\ntesting\n..."; c->body << bdy; c->build (); c->finalize (); ustring fn = c->write_tmp (); BOOST_CHECK_MESSAGE (c->encryption_success == true, "encryption should be successful"); LOG (test) << "cm: encrypted content: "; LOG (test) << g_mime_object_to_string (GMIME_OBJECT(c->message), NULL); delete c; Message m (fn); ustring rbdy = m.viewable_text (false); BOOST_CHECK_MESSAGE (bdy == rbdy, "message reading produces the same output as compose message input"); /* Try to get a decrypted version of the message */ GMimeMessage * _dm = m.decrypt (); BOOST_CHECK (_dm != NULL); Message dm (_dm); LOG (test) << "cm: decrypted content: "; LOG (test) << g_mime_object_to_string (GMIME_OBJECT (_dm), NULL); ustring dec (g_mime_object_to_string (GMIME_OBJECT (_dm), NULL)); BOOST_CHECK (dec.find ("This is test") != std::string::npos); unlink (fn.c_str ()); teardown (); } BOOST_AUTO_TEST_CASE (crypto_md5) { using Astroid::Crypto; ustring data = "12345asdfasdfasdf"; ustring expected = "983443541cfec1e77671d8dd8e0ee33e"; // echo -n ... | md5sum ustring chk; BOOST_CHECK_NO_THROW (chk = Crypto::get_md5_digest (data)); BOOST_CHECK (chk == expected); LOG (test) << "digest: " << chk; /* testing md5_b */ refptr d = Crypto::get_md5_digest_b (data); LOG (test) << "digest, length: " << d->get_size (); gsize len; guint8 * buffer = (guint8 *) d->get_data (len); std::stringstream ss; for (unsigned int i = 0; i < len; i++) ss << std::hex << std::setw(2) << std::setfill ('0') << static_cast(buffer[i]); LOG (test) << "digest, bytes: " << ss.str (); BOOST_CHECK (len == 16); BOOST_CHECK (ss.str () == expected); } BOOST_AUTO_TEST_SUITE_END() astroid-0.14/tests/test_dates.cc000066400000000000000000000062361335422170400167230ustar00rootroot00000000000000# define BOOST_TEST_DYN_LINK # define BOOST_TEST_MODULE TestDates # include # include # include "utils/gmime/gmime-compat.h" # include "test_common.hh" # include "message_thread.hh" # include "compose_message.hh" # include "utils/date_utils.hh" using Astroid::Message; using Astroid::ComposeMessage; BOOST_AUTO_TEST_SUITE(Dates) BOOST_AUTO_TEST_CASE(dates_read_test) { setup (); { Message m ("tests/mail/test_mail/date1.eml"); LOG (warn) << "date1:"; LOG (test) << "pretty_date: " << m.pretty_date (); LOG (test) << "pretty_verbose_date: " << m.pretty_verbose_date (); LOG (test) << "pretty_verbose_date (true): " << m.pretty_verbose_date (true); } { Message m ("tests/mail/test_mail/date2.eml"); LOG (warn) << "date2:"; LOG (test) << "pretty_date: " << m.pretty_date (); LOG (test) << "pretty_verbose_date: " << m.pretty_verbose_date (); LOG (test) << "pretty_verbose_date (true): " << m.pretty_verbose_date (true); } teardown (); } BOOST_AUTO_TEST_CASE(dates_test_dates) { setup (); /* setlocale (LC_ALL, "C"); */ std::vector> dates = { std::make_pair ("Tue, 19 Aug 2014 16:11:44 +0200", "Tue, 19 Aug 2014 16:11:44 +0200"), std::make_pair ("Mon, 9 May 2016 13:26:57 +0000", "Mon, 09 May 2016 13:26:57 +0000"), std::make_pair ("Thu, 1 Sep 2016 14:32:16 +0000", "Thu, 01 Sep 2016 14:32:16 +0000"), }; Message a ("tests/mail/test_mail/date1.eml"); for (auto d : dates) { LOG (warn) << "date: testing: " << d.first; GMimeMessage * m = a.message; g_object_ref (m); # if (GMIME_MAJOR_VERSION < 3) g_mime_message_set_date_as_string (m, d.first.c_str ()); # else GDateTime * dt = g_mime_utils_header_decode_date (d.first.c_str ()); g_mime_message_set_date (m, dt); # endif Message b (m); LOG (test) << "date: " << b.date (); LOG (test) << "date, asctime: " << b.date_asctime (); LOG (test) << "pretty_date: " << b.pretty_date (); LOG (test) << "pretty_verbose_date: " << b.pretty_verbose_date (); LOG (test) << "pretty_verbose_date (true): " << b.pretty_verbose_date (true); BOOST_CHECK (b.date () == d.second); } LOG (test) << "Testing now date.."; /* test compose message date setting */ GMimeMessage * m = a.message; g_object_ref (m); /* hopefully these happen within the same second.. */ GDateTime * now = g_date_time_new_now_local (); g_mime_message_set_date_now (m); Message b (m); LOG (test) << "date: " << b.date (); LOG (test) << "date, asctime: " << b.date_asctime (); LOG (test) << "pretty_date: " << b.pretty_date (); LOG (test) << "pretty_verbose_date: " << b.pretty_verbose_date (); LOG (test) << "pretty_verbose_date (true): " << b.pretty_verbose_date (true); const char * datefmt = "%a, %d %b %Y %T %z"; setlocale (LC_ALL, "C"); gchar * dt = g_date_time_format (now, datefmt); setlocale (LC_ALL, ""); LOG (test) << "formatted date: " << dt; BOOST_CHECK (dt == b.date ()); teardown (); } BOOST_AUTO_TEST_SUITE_END() astroid-0.14/tests/test_generic.cc000066400000000000000000000035441335422170400172360ustar00rootroot00000000000000# define BOOST_TEST_DYN_LINK # define BOOST_TEST_MODULE TestGeneric # include # include "test_common.hh" # include "compose_message.hh" # include "utils/ustring_utils.hh" # include "utils/vector_utils.hh" BOOST_AUTO_TEST_SUITE(Generic) BOOST_AUTO_TEST_CASE(setup_test) { setup (); teardown (); } BOOST_AUTO_TEST_CASE (utils_test) { setup (); using namespace Astroid; ustring a; /* trim_right */ a = " a"; UstringUtils::trim_right (a); BOOST_CHECK (a == " a"); a = " aasdfasdf "; UstringUtils::trim_right (a); BOOST_CHECK (a == " aasdfasdf"); a = " aasdfasdf "; UstringUtils::trim_right (a); BOOST_CHECK (a == " aasdfasdf"); a = " "; UstringUtils::trim_right (a); BOOST_CHECK (a == ""); a = "n"; UstringUtils::trim_right (a); BOOST_CHECK (a == "n"); /* trim */ a = " aasdfasdf "; UstringUtils::trim (a); BOOST_CHECK (a == "aasdfasdf"); a = " aasdfasdf "; UstringUtils::trim (a); BOOST_CHECK (a == "aasdfasdf"); a = " aasdfasdf "; UstringUtils::trim (a); BOOST_CHECK (a == "aasdfasdf"); a = " "; UstringUtils::trim (a); BOOST_CHECK (a.empty ()); a = ""; UstringUtils::trim (a); BOOST_CHECK (a.empty ()); a = "n"; UstringUtils::trim_left (a); BOOST_CHECK (a == "n"); a = "n"; UstringUtils::trim (a); BOOST_CHECK (a == "n"); /* vector */ a = "asd, bgd ,"; auto v = VectorUtils::split_and_trim (a, ","); BOOST_CHECK (v[0] == "asd"); BOOST_CHECK (v[1] == "bgd"); BOOST_CHECK (v.size () == 2); a = "asd, ,bgd ,"; v = VectorUtils::split_and_trim (a, ","); BOOST_CHECK (v[0] == "asd"); BOOST_CHECK (v[1] == "bgd"); BOOST_CHECK (v.size () == 2); teardown (); } BOOST_AUTO_TEST_SUITE_END() astroid-0.14/tests/test_gmime_version.cc000066400000000000000000000012561335422170400204630ustar00rootroot00000000000000# include # include # include /* test if we are linked against the same GMime version as notmuch */ # if (GMIME_MAJOR_VERSION < 3) # define g_mime_init() g_mime_init(0) # define internet_address_list_parse(f,str) internet_address_list_parse_string(str) # define internet_address_list_to_string(ia,f,encode) internet_address_list_to_string(ia,encode) # endif int main () { g_mime_init (); const char * a = "Test "; InternetAddressList * ia = internet_address_list_parse (NULL, a); const char * addrs = internet_address_list_to_string (ia, NULL, false); std::cout << "address: " << addrs << std::endl; return 0; } astroid-0.14/tests/test_home/000077500000000000000000000000001335422170400162355ustar00rootroot00000000000000astroid-0.14/tests/test_home/.gitignore000066400000000000000000000000201335422170400202150ustar00rootroot00000000000000searches gnupg astroid-0.14/tests/test_home/keybindings000066400000000000000000000012461335422170400204710ustar00rootroot00000000000000# comment thread_index.next=J thread_index.next=k # alias and end of line comment thread_index.asdf = j # test test.a = k test.b=j test.b=j # double, should throw exception # unbound test.unbound2=1 test.to_be_unbound= # test some run targets test.run(echo %1)=n test.run(echo %1)=y # reasign a key to a hook test.run(echo %1, echo undo %1)=4 test.run(echo %1, echo undo %1)=5 test.run(echo %1\, no undo)=6 test.run(echo %1\, no undo, echo real undo %1)=7 # these fail test.run(echo %1, echo undo, %1)=5 test.run(,echo %1\, echo undo %1)=5 # replacing an existing non-userdefined binding test.foo=0 test.foo2=2 # test special chars test.spec1=Tab test.spec2=C-Tab astroid-0.14/tests/test_home/plugins/000077500000000000000000000000001335422170400177165ustar00rootroot00000000000000astroid-0.14/tests/test_home/plugins/basic.plugin000066400000000000000000000002151335422170400222150ustar00rootroot00000000000000[Plugin] Module=basic Depends= Loader=python3 Name=basic plugin Description=plugin Authors=Gaute Hope Copyright= Website= Help= Hidden=false astroid-0.14/tests/test_home/plugins/basic.py000066400000000000000000000012121335422170400213450ustar00rootroot00000000000000import gi gi.require_version ('Astroid', '0.2') from gi.repository import GObject, Astroid print ("basic: plugin loading..") class BasicPlugin (GObject.Object, Astroid.Activatable): object = GObject.property (type=GObject.Object) def do_activate (self): print ('basic: activate') def do_deactivate (self): print ('basic: deactivate') def do_get_avatar_uri (self, email, tpe, size): print ("getting avatar uri", email, tpe, size) return "https://assets-cdn.github.com/images/modules/site/infinity-ill-small.png" def do_get_allowed_uris (self): return ["asdf", "https://assets-cdn.github.com/images/modules/site/"] astroid-0.14/tests/test_home/plugins/threadindexplugin.plugin000066400000000000000000000002361335422170400246550ustar00rootroot00000000000000[Plugin] Module=threadindexplugin Depends= Loader=python3 Name=threadindexplugin Description=plugin Authors=Gaute Hope Copyright= Website= Help= Hidden=false astroid-0.14/tests/test_home/plugins/threadindexplugin.py000077500000000000000000000012561335422170400240150ustar00rootroot00000000000000import gi gi.require_version ('Astroid', '0.2') gi.require_version ('Gtk', '3.0') from gi.repository import GObject, Gtk, Astroid print ("threadindexplugin: plugin loading..") class ThreadIndexPlugin (GObject.Object, Astroid.ThreadIndexActivatable): thread_index = GObject.property (type = Gtk.Box) def do_activate (self): print ('tagformat: activate') self.label = Gtk.Label ("Hullu!") self.thread_index.pack_end (self.label, True, True, 5) def do_deactivate (self): print ('tagformat: deactivate') def do_format_tags (self, bg, tags, selected): from IPython import embed # embed () print ("got tags: ", tags) return ", ".join (tags) astroid-0.14/tests/test_home/signature.txt000066400000000000000000000000311335422170400207710ustar00rootroot00000000000000-- :Wq!:wq:q! astroid-0.14/tests/test_keybindings.cc000066400000000000000000000063551335422170400201330ustar00rootroot00000000000000# define BOOST_TEST_DYN_LINK # define BOOST_TEST_MODULE TestKeybindings # include # include # include "test_common.hh" # include "glibmm.h" # include "astroid.hh" # include "modes/keybindings.hh" # include "utils/cmd.hh" BOOST_AUTO_TEST_SUITE(TestTestKeybindings) BOOST_AUTO_TEST_CASE(loading_keybindings) { setup (); using Astroid::Cmd; using Astroid::Key; using Astroid::UnboundKey; using Astroid::duplicatekey_error; using Astroid::keyspec_error; Astroid::Keybindings::init (); Astroid::Keybindings keys; keys.loghandle = true; keys.set_prefix ("Test", "test"); keys.register_key ("a", "test.a", "A", [&] (Key) { return true; }); BOOST_CHECK_THROW ( keys.register_key ("b", "test.b", "B", [&] (Key) { return true; }), duplicatekey_error); keys.register_key (UnboundKey (), "test.unbound", "U1", [&] (Key) { return true; }); keys.register_key (UnboundKey (), "test.unbound2", "U2", [&] (Key) { return true; }); /* test unbinding through keybindings */ keys.register_key ("7", "test.to_be_unbound", "U2", [&] (Key) { throw new std::logic_error ("should not be run, is unbound in keybindings file"); return true; }); Key s ("7"); GdkEventKey e; e.state = 0; e.keyval = s.key; LOG (test) << "handling key: 7"; BOOST_CHECK_NO_THROW ( keys.handle (&e) ); /* check a bad key spec */ BOOST_CHECK_THROW ( keys.register_key ("1-a", "test.k", "bad keyspec", [&] (Key) { return true; }), keyspec_error); /* check for duplicate when defining */ BOOST_CHECK_THROW ( keys.register_key ("a", "test.a", "duplicate keyspec", [&] (Key) { return true; }), duplicatekey_error); /* check if adding a new _user-defined_ key to a different target which * uses an existing _default_ key is allowed to replace the original * * test.foo=0 in keybidnings file. */ keys.register_key ("1", "test.foo", "some dup", [&] (Key) { return true; }); keys.register_key ("0", "test.bar", "some dup", [&] (Key) { return true; }); /* also lets try it the other way around (this worked fine all the time) */ keys.register_key ("2", "test.bar2", "some dup", [&] (Key) { return true; }); keys.register_key ("3", "test.foo2", "some dup", [&] (Key) { return true; }); /* test run hook */ ustring test_thread = "001"; auto f = [&] (Key, ustring cmd, ustring undo) { LOG (test) << "key: run-hook got back: " << cmd << ", undo: " << undo; ustring final_cmd = ustring::compose (cmd, test_thread); ustring final_undo_cmd = ustring::compose (undo, test_thread); LOG (test) << "key: would run: " << final_cmd; LOG (test) << "key: would undo: " << final_undo_cmd; auto c = Cmd("test", final_cmd, final_undo_cmd); c.run (); c.undo (); return true; }; keys.register_key ("4", "test.ru0", "test run foo", [&] (Key) { return true; }); keys.register_run ("test.run", f); keys.register_key ("5", "test.runfoo", "test run foo", [&] (Key) { return true; }); Key n ("n"); e.state = 0; e.keyval = n.key; LOG (test) << "handling key: n"; keys.handle (&e); teardown (); } BOOST_AUTO_TEST_SUITE_END() astroid-0.14/tests/test_markdown.cc000066400000000000000000000032741335422170400174440ustar00rootroot00000000000000# define BOOST_TEST_DYN_LINK # define BOOST_TEST_MODULE TestCompose # include # include "test_common.hh" # include "compose_message.hh" # include "message_thread.hh" # include "chunk.hh" # include "account_manager.hh" # include "utils/address.hh" # include "utils/ustring_utils.hh" BOOST_AUTO_TEST_SUITE(Markdown) BOOST_AUTO_TEST_CASE(compose_read_test) { using Astroid::ComposeMessage; using Astroid::Message; setup (); ComposeMessage * c = new ComposeMessage (); ustring bdy = "# This is a test"; c->body << bdy; c->markdown = true; c->build (); c->finalize (); BOOST_CHECK_MESSAGE (c->markdown_success, c->markdown_error); ustring fn = c->write_tmp (); Message m (fn); /* check plain text part */ ustring pbdy = m.viewable_text (false); BOOST_CHECK_MESSAGE (pbdy == bdy, "plain text matches plain text"); /* check html part */ BOOST_CHECK_MESSAGE (g_mime_content_type_is_type (m.root->content_type, "multipart", "alternative"), "main message part is multipart/alternative"); auto plain = m.root->kids[0]; auto html = m.root->kids[1]; BOOST_CHECK_MESSAGE (g_mime_content_type_is_type(plain->content_type, "text", "plain"), "first part is text/plain"); BOOST_CHECK_MESSAGE (g_mime_content_type_is_type(html->content_type, "text", "html"), "second part is text/html"); ustring _html = html->viewable_text (false); Astroid::UstringUtils::trim(_html); LOG (trace) << "markdown html: '" << _html << "'"; BOOST_CHECK_MESSAGE ("

This is a test

" == _html, "html part is correctly constructed"); unlink (fn.c_str ()); teardown (); } BOOST_AUTO_TEST_SUITE_END() astroid-0.14/tests/test_mime_message.cc000066400000000000000000000030221335422170400202440ustar00rootroot00000000000000# define BOOST_TEST_DYN_LINK # define BOOST_TEST_MODULE TestMimeMessage # include # include # include "test_common.hh" # include "db.hh" # include "message_thread.hh" # include "compose_message.hh" # include "account_manager.hh" # include "glibmm.h" using namespace std; using Astroid::Message; using Astroid::ustring; namespace bfs = boost::filesystem; BOOST_AUTO_TEST_SUITE(Reading) BOOST_AUTO_TEST_CASE(reading_mime_message) { setup (); ustring fname = "tests/mail/test_mail/mime-message-no-content-type.eml"; Message m (fname); BOOST_CHECK_NO_THROW (m.viewable_text (true)); teardown (); } BOOST_AUTO_TEST_CASE (write_mm_attachment_signature) { /* #237 and #239 */ using Astroid::ComposeMessage; using Astroid::Account; setup (); Account a = astroid->accounts->accounts[0]; a.signature_file = bfs::path ("tests/test_home/signature.txt"); a.has_signature = true; a.signature_attach = false; ComposeMessage * c = new ComposeMessage (); std::shared_ptr mm (new ComposeMessage::Attachment ("tests/mail/test_mail/multipart.eml")); c->add_attachment (mm); c->set_from (&a); c->include_signature = true; c->build (); c->finalize (); c->write ("tests/mail/test_mail/out_mm_sig.eml"); ustring fn = c->write_tmp (); delete c; unlink (fn.c_str ()); unlink ("tests/mail/test_mail/out_mm_sig.eml"); teardown (); } BOOST_AUTO_TEST_SUITE_END() astroid-0.14/tests/test_no_newline_msg.cc000066400000000000000000000044751335422170400206310ustar00rootroot00000000000000# define BOOST_TEST_DYN_LINK # define BOOST_TEST_MODULE TestNoNewline # include # include "test_common.hh" # include "db.hh" # include "message_thread.hh" # include "glibmm.h" using namespace std; using Astroid::ustring; using Astroid::Message; BOOST_AUTO_TEST_SUITE(Reading) BOOST_AUTO_TEST_CASE(reading_no_new_line_error) { setup (); ustring fname = "tests/mail/test_mail/no-nl.eml"; Message m (fname); ustring text = m.viewable_text(false); BOOST_CHECK (text.find ("line-ignored") != ustring::npos); ustring html = m.viewable_text(true); BOOST_CHECK (html.find ("line-ignored") != ustring::npos); teardown (); } BOOST_AUTO_TEST_CASE(reading_no_new_line_after_link_multi) { /* test a multi-part (text + html) message with a link at last line with * no other text beforehand. * * this fails if there is a link at the end of a part (plain-text at least) * in a multipart message that does not have any other text before it */ setup (); ustring fname = "tests/mail/test_mail/no-nl-link.eml"; Message m (fname); ustring text = m.viewable_text(false); BOOST_CHECK (text.find ("line-ignored.com") != ustring::npos); ustring html = m.viewable_text(true); BOOST_CHECK (html.find ("line-ignored.com") != ustring::npos); teardown (); } BOOST_AUTO_TEST_CASE(reading_no_new_line_after_link_plain) { /* test a single-part plain/text message with no endline after single link, * with no other text beforehand */ setup (); ustring fname = "tests/mail/test_mail/no-nl-link-plain.eml"; Message m (fname); ustring text = m.viewable_text(false); BOOST_CHECK (text.find ("line-ignored.com") != ustring::npos); ustring html = m.viewable_text(true); BOOST_CHECK (html.find ("line-ignored.com") != ustring::npos); teardown (); } BOOST_AUTO_TEST_CASE(reading_no_new_line_after_link_html) { /* test a single-part html message with no endline after single link, with * no other text beforehand */ setup (); ustring fname = "tests/mail/test_mail/no-nl-link-html.eml"; Message m (fname); ustring text = m.viewable_text(false, true); BOOST_CHECK (text.find ("line-ignored.com") != ustring::npos); teardown (); } BOOST_AUTO_TEST_SUITE_END() astroid-0.14/tests/test_non_existant_file.cc000066400000000000000000000047371335422170400213370ustar00rootroot00000000000000# define BOOST_TEST_DYN_LINK # define BOOST_TEST_MODULE TestOpenError # include # include # include "test_common.hh" # include "db.hh" # include "message_thread.hh" # include "glibmm.h" # include "chunk.hh" using namespace boost::filesystem; BOOST_AUTO_TEST_SUITE(Reading) BOOST_AUTO_TEST_CASE(open_error) { setup (); std::string fname = "tests/mail/test_mail/this-one-should-not-exist.eml"; BOOST_CHECK (!exists(fname)); BOOST_CHECK_THROW(Astroid::Message m (fname), Astroid::message_error); teardown (); } BOOST_AUTO_TEST_CASE(out_of_sync) { using Astroid::Message; using Astroid::Db; using Astroid::AddressList; using Astroid::ustring; setup (); /* open other email and make copy */ Message om ("tests/mail/test_out_of_sync.eml"); om.save_to ("tests/mail/test_mail/oos.eml"); /* update notmuch */ system ("notmuch new"); /* test if file can be read now */ Message * mm; BOOST_CHECK_NO_THROW (mm = new Message ("tests/mail/test_mail/oos.eml")); BOOST_CHECK ((AddressList (mm->other_to ()).str () == "ba@adsf.asd")); LOG (test) << "other: " << AddressList (mm->other_to ()).str (); delete mm; /* remove it without updating notmuch */ unlink ("tests/mail/test_mail/oos.eml"); /* try to open file using notmuch */ Message * oos; ustring mid = "oos@asdf.com"; Db db(Db::DATABASE_READ_ONLY); db.on_message (mid, [&](notmuch_message_t * msg) { LOG (test) << "trying to open deleted file."; oos = new Message (msg, 0); LOG (test) << "deleted file opened."; }); /* testing various methods */ LOG (test) << "message: testing methods on out-of-sync message."; oos->save_to ("tests/mail/test_mail/wont-work.eml"); LOG (test) << "sender: " << oos->sender; LOG (test) << "text: " << oos->viewable_text (false); /* these do not seem to be cached */ LOG (test) << "to: " << AddressList (oos->to()).str(); LOG (test) << "cc: " << AddressList (oos->cc()).str(); LOG (test) << "bcc: " << AddressList (oos->bcc()).str(); LOG (test) << "other: " << AddressList (oos->other_to ()).str (); LOG (test) << "date: " << oos->date (); LOG (test) << "pretty date: " << oos->pretty_verbose_date(); oos->contents (); oos->attachments (); oos->mime_messages (); /* update notmuch */ system ("notmuch new"); teardown (); } BOOST_AUTO_TEST_SUITE_END() astroid-0.14/tests/test_notmuch.cc000066400000000000000000000100561335422170400172730ustar00rootroot00000000000000# define BOOST_TEST_DYN_LINK # define BOOST_TEST_MODULE TestNotmuch # include # include # include # include "test_common.hh" # include # include "db.hh" namespace bfs = boost::filesystem; using std::cout; using std::endl; BOOST_AUTO_TEST_SUITE(Notmuch) BOOST_AUTO_TEST_CASE(read_all_threads) { bfs::path path_db = bfs::absolute (bfs::path("./tests/mail/test_mail")); notmuch_database_t * nm_db; notmuch_status_t s = notmuch_database_open ( path_db.c_str(), notmuch_database_mode_t::NOTMUCH_DATABASE_MODE_READ_ONLY, &nm_db); BOOST_CHECK (s == NOTMUCH_STATUS_SUCCESS); /* read all messages */ cout << "db: running test query.." << endl; notmuch_query_t * q = notmuch_query_create (nm_db, "*"); unsigned int c; notmuch_status_t st = notmuch_query_count_messages (q, &c); // desctrutive notmuch_query_destroy (q); q = notmuch_query_create (nm_db, "*"); BOOST_CHECK (st == NOTMUCH_STATUS_SUCCESS); cout << "query: " << notmuch_query_get_query_string (q) << ", approx: " << c << " messages." << endl; notmuch_messages_t * messages; notmuch_message_t * message; for (st = notmuch_query_search_messages (q, &messages); (st == NOTMUCH_STATUS_SUCCESS) && notmuch_messages_valid (messages); notmuch_messages_move_to_next (messages)) { message = notmuch_messages_get (messages); cout << "thread:" << notmuch_message_get_thread_id (message) << ", message: " << notmuch_message_get_header (message, "Subject") << endl; notmuch_message_destroy (message); } notmuch_database_close (nm_db); } /* BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES (notmuch_threads_move_to_next_fail, 1) */ BOOST_AUTO_TEST_CASE(notmuch_threads_move_to_next_fail) { bfs::path path_db = bfs::absolute (bfs::path("./tests/mail/test_mail")); notmuch_database_t * nm_db; notmuch_status_t s = notmuch_database_open ( path_db.c_str(), notmuch_database_mode_t::NOTMUCH_DATABASE_MODE_READ_ONLY, &nm_db); BOOST_CHECK (s == NOTMUCH_STATUS_SUCCESS); cout << "db: running test query.." << endl; notmuch_query_t * q = notmuch_query_create (nm_db, "*"); unsigned int c; notmuch_status_t st = notmuch_query_count_threads (q, &c); // destructive notmuch_query_destroy (q); q = notmuch_query_create (nm_db, "*"); BOOST_CHECK (st == NOTMUCH_STATUS_SUCCESS); cout << "query: " << notmuch_query_get_query_string (q) << ", approx: " << c << " threads." << endl; notmuch_threads_t * threads; notmuch_thread_t * thread; st = notmuch_query_search_threads (q, &threads); std::string thread_id_of_first; int i = 0; int stop = 3; for (; notmuch_threads_valid (threads); notmuch_threads_move_to_next (threads)) { thread = notmuch_threads_get (threads); thread_id_of_first = notmuch_thread_get_thread_id (thread); notmuch_thread_destroy (thread); i++; if (i == stop) break; } cout << "thread id of first thread: " << thread_id_of_first << endl; notmuch_query_destroy (q); /* restart query */ cout << "restarting query.." << endl; q = notmuch_query_create (nm_db, "*"); st = notmuch_query_search_threads (q, &threads); i = 0; for ( ; notmuch_threads_valid (threads); notmuch_threads_move_to_next (threads)) { i++; cout << "move to next: " << i << endl; if (i == stop) break; } notmuch_threads_move_to_next (threads); for ( ; notmuch_threads_valid (threads); notmuch_threads_move_to_next (threads)) { thread = notmuch_threads_get (threads); std::string thread_id = notmuch_thread_get_thread_id (thread); i++; BOOST_CHECK_MESSAGE (thread_id != thread_id_of_first, "thread id is equal to " << stop << " thread, we are on thread: " << i); notmuch_thread_destroy (thread); } notmuch_database_close (nm_db); } BOOST_AUTO_TEST_SUITE_END() astroid-0.14/tests/test_notmuch_standalone.cc000066400000000000000000000131201335422170400214760ustar00rootroot00000000000000# include # include # include # include // Build with: g++ test_notmuch_standalone.cc -o test_notmuch_standalone -lnotmuch /* there was a bit of a round-dance of with the _st versions of these returning * to the old name, but with different signature */ # if (LIBNOTMUCH_MAJOR_VERSION < 5) # define notmuch_query_search_threads(x,y) notmuch_query_search_threads_st(x,y) # define notmuch_query_count_threads(x,y) notmuch_query_count_threads_st(x,y) # define notmuch_query_search_messages(x,y) notmuch_query_search_messages_st(x,y) # define notmuch_query_count_messages(x,y) notmuch_query_count_messages_st(x,y) # endif using std::cout; using std::endl; int main () { char * path_db = realpath ("./tests/mail/test_mail", NULL); notmuch_database_t * nm_db; notmuch_status_t s = notmuch_database_open ( path_db, notmuch_database_mode_t::NOTMUCH_DATABASE_MODE_READ_ONLY, &nm_db); (void) (s); cout << "db: running test query.." << endl; notmuch_query_t * q = notmuch_query_create (nm_db, "*"); unsigned int c; notmuch_status_t st = notmuch_query_count_threads (q, &c); // destructive (void) (st); notmuch_query_destroy (q); q = notmuch_query_create (nm_db, "*"); cout << "query: " << notmuch_query_get_query_string (q) << ", approx: " << c << " threads." << endl; notmuch_threads_t * threads; notmuch_thread_t * thread; st = notmuch_query_search_threads (q, &threads); std::string thread_id; int i = 0; for (; notmuch_threads_valid (threads); notmuch_threads_move_to_next (threads)) { thread = notmuch_threads_get (threads); i++; if (i == 3) thread_id = notmuch_thread_get_thread_id (thread); notmuch_thread_destroy (thread); if (i == 3) break; } cout << "thread id to change: " << thread_id << ", thread no: " << i << endl; notmuch_query_destroy (q); /* restart query */ cout << "restarting query.." << endl; q = notmuch_query_create (nm_db, "*"); st = notmuch_query_search_threads (q, &threads); i = 0; int stop = 2; cout << "moving to thread: " << stop << endl; for ( ; notmuch_threads_valid (threads); notmuch_threads_move_to_next (threads)) { thread = notmuch_threads_get (threads); notmuch_thread_get_thread_id (thread); i++; cout << "tags: "; /* get tags */ notmuch_tags_t *tags; const char *tag; for (tags = notmuch_thread_get_tags (thread); notmuch_tags_valid (tags); notmuch_tags_move_to_next (tags)) { tag = notmuch_tags_get (tags); cout << tag << " "; } cout << endl; notmuch_thread_destroy (thread); if (i == stop) break; } /* now open a new db instance, modify the already loaded thread and * continue loading the original query */ notmuch_database_t * nm_db2; s = notmuch_database_open ( path_db, notmuch_database_mode_t::NOTMUCH_DATABASE_MODE_READ_WRITE, &nm_db2); char qry_s[256]; sprintf (qry_s, "thread:%s", thread_id.c_str ()); notmuch_query_t * q2 = notmuch_query_create (nm_db2, qry_s); notmuch_threads_t * ts2; notmuch_thread_t * t2; st = notmuch_query_search_threads (q2, &ts2); for ( ; notmuch_threads_valid (ts2); notmuch_threads_move_to_next (ts2)) { t2 = notmuch_threads_get (ts2); std::string thread_id = notmuch_thread_get_thread_id (t2); /* remove unread tag */ notmuch_messages_t * ms = notmuch_thread_get_messages (t2); notmuch_message_t * m; for (; notmuch_messages_valid (ms); notmuch_messages_move_to_next (ms)) { m = notmuch_messages_get (ms); st = notmuch_message_remove_tag (m, "unread"); notmuch_message_destroy (m); } notmuch_messages_destroy (ms); notmuch_thread_destroy (t2); break; } notmuch_query_destroy (q2); notmuch_database_close (nm_db2); /* re-add unread tag */ s = notmuch_database_open ( path_db, notmuch_database_mode_t::NOTMUCH_DATABASE_MODE_READ_WRITE, &nm_db2); q2 = notmuch_query_create (nm_db2, qry_s); st = notmuch_query_search_threads (q2, &ts2); for ( ; notmuch_threads_valid (ts2); notmuch_threads_move_to_next (ts2)) { t2 = notmuch_threads_get (ts2); std::string thread_id = notmuch_thread_get_thread_id (t2); /* remove unread tag */ notmuch_messages_t * ms = notmuch_thread_get_messages (t2); notmuch_message_t * m; for (; notmuch_messages_valid (ms); notmuch_messages_move_to_next (ms)) { m = notmuch_messages_get (ms); st = notmuch_message_add_tag (m, "unread"); notmuch_message_destroy (m); } notmuch_messages_destroy (ms); notmuch_thread_destroy (t2); break; } notmuch_query_destroy (q2); notmuch_database_close (nm_db2); /* continue loading */ cout << "continue loading.." << endl; for ( ; notmuch_threads_valid (threads); notmuch_threads_move_to_next (threads)) { if (threads == NULL) { cout << "threads == NULL" << endl; } else { cout << "threads != NULL" << endl; } thread = notmuch_threads_get (threads); cout << "loading: " << i; std::string tid = notmuch_thread_get_thread_id (thread); cout << ": " << tid << endl; /* get tags */ notmuch_tags_t *tags; const char *tag; cout << "tags: "; for (tags = notmuch_thread_get_tags (thread); notmuch_tags_valid (tags); notmuch_tags_move_to_next (tags)) { tag = notmuch_tags_get (tags); cout << tag << " "; } cout << endl; i++; notmuch_thread_destroy (thread); } notmuch_database_close (nm_db); return 0; } astroid-0.14/tests/test_notmuch_standalone.sh000077500000000000000000000005641335422170400215360ustar00rootroot00000000000000#! /usr/bin/env bash # # wrapper for test nm standalone since we expect failure function die() { echo "error: $1" exit 1 } function warn() { echo "warn: $1" } d=$(dirname $0) # apparently, sometimes it does not fail. echo "testing: test_notmuch_standalone: expecting failure.." $d/test_notmuch_standalone && warn "expected test_nm_standalone to fail!" exit 0 astroid-0.14/tests/test_open_db.cc000066400000000000000000000026371335422170400172320ustar00rootroot00000000000000# define BOOST_TEST_DYN_LINK # define BOOST_TEST_MODULE TestOpenDb # include # include # include "test_common.hh" # include "db.hh" # include "message_thread.hh" # include "glibmm.h" using namespace std; using namespace Astroid; using namespace boost::filesystem; BOOST_AUTO_TEST_SUITE(DbTest) BOOST_AUTO_TEST_CASE(open_confirm) { setup (); const_cast(astroid->notmuch_config()).put ("database.path", "tests/mail/test_mail"); Db * db; BOOST_CHECK_NO_THROW ( db = new Db (Db::DbMode::DATABASE_READ_ONLY) ); LOG (test) << "revision: " << db->get_revision (); delete db; teardown (); } //BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES( open_rw, 1 ) BOOST_AUTO_TEST_CASE(open_rw) { setup (); const_cast(astroid->notmuch_config()).put ("database.path", "tests/mail/test_mail"); Db * db; BOOST_CHECK_NO_THROW ( db = new Db (Db::DbMode::DATABASE_READ_WRITE) ); LOG (test) << "revision: " << db->get_revision (); //this_thread::sleep_for (chrono::milliseconds(5000)); delete db; teardown (); } BOOST_AUTO_TEST_CASE(open_error) { setup (); Db::path_db = path ("tests/mail/test_mail/non_existant"); Db * db; BOOST_CHECK_THROW ( db = new Db (Db::DbMode::DATABASE_READ_ONLY), database_error ); (void) (db); //delete db; teardown (); } BOOST_AUTO_TEST_SUITE_END() astroid-0.14/tests/test_theme.cc000066400000000000000000000010501335422170400167120ustar00rootroot00000000000000# define BOOST_TEST_DYN_LINK # define BOOST_TEST_MODULE TestTheme # include # include "test_common.hh" # include "glibmm.h" # include "modes/thread_view/theme.hh" using namespace std; using Astroid::ustring; BOOST_AUTO_TEST_SUITE(Theme) BOOST_AUTO_TEST_CASE(loading_theme) { setup (); Astroid::Theme * t; BOOST_CHECK_NO_THROW (t = new Astroid::Theme ()); ustring css = t->thread_view_css; ustring html = t->thread_view_html; delete t; teardown (); } BOOST_AUTO_TEST_SUITE_END() astroid-0.14/ui/000077500000000000000000000000001335422170400135215ustar00rootroot00000000000000astroid-0.14/ui/.gitignore000066400000000000000000000000501335422170400155040ustar00rootroot00000000000000.sass-cache* *.css.map thread-view.css astroid-0.14/ui/COPYING.LGPL-2.1+000066400000000000000000000635351335422170400156760ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. (This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.) Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. {description} Copyright (C) {year} {fullname} This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. {signature of Ty Coon}, 1 April 1990 Ty Coon, President of Vice That's all there is to it! astroid-0.14/ui/about.glade000066400000000000000000000036541335422170400156410ustar00rootroot00000000000000 True False True False 84 mail-send-symbolic 3 False True 0 True False 20 20 vertical True False Astroid False True 0 True True 20 1 astroid-0.14/ui/acknowledgement.md000066400000000000000000000007171335422170400172170ustar00rootroot00000000000000# about ui files # thread view the files thread-view.css and thread-view.html have been copied directly from Gearys default theme [0]. changes have been made and more will be made. gearys licence specifies them to be available under the LGPL 2.1. # thread index the background image was fetched from: http://makepixelart.com/artists/anonymous/dinosaur, i have not found any other information on its author. [0] https://git.gnome.org/browse/geary/tree/theming astroid-0.14/ui/astroid.desktop000066400000000000000000000003311335422170400165560ustar00rootroot00000000000000[Desktop Entry] Name=Astroid Mail Comment=Graphical notmuch email client Exec=astroid %u Icon=astroid Terminal=false Type=Application Keywords=Email;E-mail; Categories=Network;Email; MimeType=x-scheme-handler/mailto; astroid-0.14/ui/edit-message.glade000066400000000000000000000363041335422170400170740ustar00rootroot00000000000000 True False 5 5 5 5 vertical 2 True False True True False vertical 5 True False True False 5 From: end 10 0 False True 0 True False 5 True False False True 0 True False True True 1 True False 5 True False Signature: False True 0 True True False True 1 False True 5 end 2 True False 5 True False Markdown: False True 0 True True False True 1 False True 3 True True 1 False True 0 True False none True True False True False 5 Encrypt: end 10 0 False True 0 True True False True 1 True False Sign: False True 5 2 True True False True 5 3 False True 1 True False none True False True False 5 Reply to: end 10 0 False True 0 True False 5 True False False True 0 True True 1 False True 2 False True 0 True False True False vertical True True 1 True True 5 astroid-0.14/ui/icons/000077500000000000000000000000001335422170400146345ustar00rootroot00000000000000astroid-0.14/ui/icons/LICENSE000066400000000000000000000012471335422170400156450ustar00rootroot00000000000000Astroid logos by Ura Design - 2017 This work is licensed as part of the Astroid project. You can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version, or (at your option) under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. Credits: The font is Exo 2, licensed under a SIL Open Font License: https://www.fontsquirrel.com/fonts/exo-2 astroid-0.14/ui/icons/astroid.png000077700000000000000000000000001335422170400216362icon_color.pngustar00rootroot00000000000000astroid-0.14/ui/icons/astroid.svg000077700000000000000000000000001335422170400216642icon_color.svgustar00rootroot00000000000000astroid-0.14/ui/icons/horizontal_color.png000066400000000000000000001332411335422170400207350ustar00rootroot00000000000000PNG  IHDREvsBIT|d pHYsII$tEXtSoftwarewww.inkscape.org<DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/4.0/i] IDATxy\u{NUwVABHf@HwC@6ª(C\Pq8j{ H6HR.( (.;32laI,]u$l~|/_J'::S 7nzbj P/7lk% ĊB7@`\^^0ϒ)^0.1M@pt|\Rdžz 87o:!t4==)ta#K@PGл9 */IkZ?/Inƙ?P?r;P\:8laϐ$g29P;)7.?6c?tD?q ?4mM^y@)P7YM~t?qW?2zr@]`_KQ?*H A/eaHѫ!0"am g= 9v@a~~#WLh n"7 f#%#OU0 k;n@Ź -7X3?*|>vEmT$ ccL0t{cr0(9N J#iߣVigH:vލKP1>OYRzo+c%cCsݷ,1PTD{&!['~F9z^1hC}?%:"ܣq\@bP~=yfa1(E-a5eI={s{>3D9PՂ5)7{>̰$~|%M2߳A0(Ҍ6&;uM'1(UK7Wl^ƿ4Tg}T@}'o?R>&eqԍ$-(QR?&ecLgg2?. )r386~Kjk9bi2\wr=6:pQm=Znjn,yPTTΗ*|с-?JfKWp{Y|W5@aP\Ƕ̞:*8 ;+jdb08:c(\߶͡; JˌigKc\s43o2 ;vӬ4Jsˤ9%͡;þ-?#FnuI iL%Y-:ʍ@ZnZ1Q( gqӧBW@1Wm[ѡ;J>rcPN?v%}- QbíS('d}YRS^}x (eU2[LĢ:ʅ+̿.BK>*sB(ж&0b tB@1xQn"tGcS/ E)o);*-RCw@)1$Nc;*BW@)1$%%CwT_КϾ!t yNHn"w 4,ivWCwd-{ 4ύLL_igƄ=4#WLe;Ĥ>:ȯ42tGج|'Ֆ>UһCwTT'~sf:CwT%ɭ93`w1 B.{]jnWܴbb?@9jU QL`}}_h tStpVK>0T?@yi/5þ:hm=Dχ%&})t -)&$ R>Ҷ:;'t =tJ[v-KC`0unfw_]f4Bg`0u.Ւ QL믙ԱU=gHzw:ѤTSG7T5|v3;>:^ PRI/tG1}˿f?@j[;Kf Q)Wg2!+?@i/%;}cS:v'&/d%RL=džWcHKA7gFcĬo0;iF?PU:`MG**&% Ҁ>2kUP~l$!tG=3>KPfe nJDWi7gFD]')љ[= ?@ +Bw`eG:@ccjT[%]0>s+`xA-7vO5Y$ ݂WS[+4.ƜVVH;t vͤ/ssCwhL?@cN ݁הke:Ԑ ̌KՆ}q\\@Eš NM+& ݂1!oy߿;t ?@-般pɡS04nJ˪Bwh?@ h;bH~j어)=:@c`\ʞc ;L10UluƙjI-Cg{. 1,+SP|o[RޏCw%\߲b!PV̖(=ar-S:+ߘx3IcClطWWU=IƦ~.in]Q7E? 0UuuOCw2\%1}߹n(LfDhG6M%/=%zZ\آߩ#)qT|݁ 3fFϹk͡SJjY%Ia nW&ҢEfɒTjԼT֕٣ٝnA噴Yuf?b%CHz$wwUn8(tfܴ|"Q ? ˥]RٯtciCJa:3 %amuvN=/˾ߥO؅a*_MW+ Ii~cfrݒ͎+tk'N#J`i)铡;PU& 3j9%`Т>Xx:(7 Y!7%YT9/*a893tPn?@͸i,i-Zj[;+tu."aDžnʍL&WKM٣Cw Fljy s(7 cWI:)tj°|f!q~MB7THܧ$_5eRS{\"THaR>ʉYrK"tj[:oH@UF.ӦM#BGQ#"JI;=tAk>Y݁c҄bb7}wlՉ(U싡;PL3/Y`MG*t Q+sȢo[(7iO?>3TJd֍='~ iD4}*t@"iR4焎P==t|>?J}Oa[АLn٣V:@u`|oN١[КGʵMߐ-C Ԫ|Wԭ[6wg]tT3w, 1wx>t@=`vC۪Y؅#Tw}瞻%t 3tU="7o9 oZ;Mߔd[]qirut9h@<1 |w{dʋPΘ*|AG?4*t 0(OD  BͣI7t 04չ/ap՗J*-n$}k֪C@3/Nk"5ߜ}sM-+{)q&tl/ʉG{&~7` [aQr|w{PCT] cS+$%t PBc"n=zUC@}+t<:(7ܭuƴNI >E~Ҷ!~ݒ;LB7J+d0tPFS=J~~cfrP'-$W3imi|L#tP ԏgCqu老£IV>,/*hVJvQC@+FU?nBII9.- TؔށBxq_d.7N%w- T^۪˭G}@:id5!]>):Ks[^b> 3TOP2s/t ؔgI:ԶŋccOݮH˹ }~IsBwu_QqNIwJ^>)xq'/)]XMz/*nиqjbE?7l67#?u0:PGT PGRhe@ P?Py?C' @B' @]0X?8ntt$y`ĥl 07'Gv:=V} [%IqUPFԞL&bq+~<\ {t {u+Uc&ӶhUޱj޼{>F~zAڲq/WK't@wtmq_6;n_Bg@CFkO ^=>AёX(FJXvHFI$m(YK]dKo$DRgv<+S2mldz\O%GGh?kšx^յOS1'm+}uDɷ,F4¶\kL#HW}KrI޲OsJzM͵EoIfYb(IgezƤgd3J%Hz@PLZt`$ݒC5]fh{䚤 Gʚ|~EiRyëX6;O%d7ML=xY4^xƻ|ђFHjz{w| iU$E =% 2=%5D=WGtɇs91%I>\QQJ{d{$!$?-Imy,z䏛}}zBM'jeuic ;p[ P]^P1y$(Lfɩ$eݓ"D7Mi&i&HmޤXJŋ-m]z vd;Sjcd#;GREiƢ:pob˾}('$U83uHTeꏯ7,-i܋ΌU;ȤdG|gvdϘY=#%i1g׳̟DOJ'jѢM{ƒ駟kMcdvdG+YRqW;7(EnUwl[POwt7M7i4(dv⫿RH/$^wu)Dq$+:?L$D/x>]|jD&nC);dGk\S%Mi?Iܷ5Kw﻽v|r)m3I?H v>jlM?ka{ަXJjt`rߚ>wh}Pq`']U\ov&+o1b3{+}ܡb_&yr[IO+INy U#Ҕ)t)&"iOύ{IsuĮ.Zjy]Mғ'[]>Wv5XI[LIL1"}).БɌ=>% IDATY3VI+`/.9+}ܒYҳO$_`lW?hl8q=~@cHwfr;\zLH[[lW&]w-^r4^]%{}=ПR;ϗt*!?);-tTܒ} wde:\t^pdc%%ۇ썒HJ\2q>m+Uꛧq O(?C~QbMAhnוcB7hQ:2tNKTWɲloz97Omzu'udgÊEuv5Ÿ]-^ܷۏjھ P"6$M ݃RT_JݔH4YHK찢ԴiHW[닱Ǘzg+潮j3r6}?.X>_O| sNj-}[QI}DPWK/I}\*[f>K8:bm8ްtmKڛ0G_ [4CV);^]ٿwEjsZp[舝R\OD~F3By8:70]rݡPR'%6^)%tKeq_zy-=~6%«wqʫ>''J+(_N2-LJ:uwn1цgaK$է~"tPJ&;"trQW3r 4Բyqg.O1dwfoir=N&3&e\3cM>[f=:;Ɍ="k*< <*muS{Hh߅nA1_+/lz*tJ-+{n *TcPawqT5o ]RR|-~:q_oC GёJ}Fc/]:*~,2o]]ټ&鸠-xӋ}qgv6Hji8~/ U TI.BuZ/\닊?hLgq]F=>*[ 闡[P7~(ls:$[[Wg?nG%:AMvE❝ טrI9毡3^c.]:*l5\"iRJ9poTgK/יjI:'rɝO|>N-~#U2;^zL}eyC?*i[>V?p{{'9OJw=mi ݂ZϿfX7[d]{|>?W'SzN>gX Q| *r5ƑS IS47H5/W4m2;f^;Ӷm?V9<\UCx54-)N⯉{*&=(Ģ?;)J:05Z//k5~k?6t$t *9asnIwL-[-BX"-Q>H, )~?kwu+.%oEKXq5gTW1)~_ݓBL::8 2W[H3In)Ք:?6\T݂{ZIrͽmM] Ek$eO4ni]s::f82٬xæsB3{Lo u|3fo6dIs3 }[҄DU3߬t53*IA_s`\ё ҋ&NT١;P?x cf~UUSb+mP6:KR_c}[wO3$$LO>-7:hd'A-YEOJFH$A;Hv;WgS#nq/>_J22˹X12|#_>i^jԎ(M/?xYJ-n)AJi_0=tJly)iKC5ώB?J.iJ299je!@ۚb`G~G]tϬqQs9u/n\8o~30o/h$ۺ̥#JXO.}&4wZNfE1E-r/e>3tK$ϯٜ;~$:]s[P"$'q)tJ^/$L"o[2p@8IO@m0*:OҨJLnʭhьTWrW{R-'^}*Ԛ#_eƅKu厗靡;Px :>޺: 3-W#kW~ v,icRl޺υ9*i| I|o !?'N=G߳QR+<(7׎\|BӁ-+KolM_ =n|&ʀ|/$]%ϯڛP$iC_k[4fju'.GFnq3ѓ^dB0er,tOpUzICT&V>:?vɉZi':?nG%gխr+o*G I̙?L..?@p/}f.7̾P4CB-i)/:BYjrӊ-5"7qU]ObO% ݃kε9*.9Ӓ.QL7Z -tPWxaMU\v-E)[eV9vq=L^k'(gԱ*JPlUBZjm ZOAL3̯igI lzpjU IVؓgj;yֳ. |׽ 6A8%:m{ہtHi#=(F$߈)@u1!;XC:#e )A# sSQz[9$=* Q}AcA.MJAy 9*3ih6n1{\jNw) ܩ/F:[XJ:fOG늱_sc1׊.銶&*#0xjTS'K**"MX_RD)9l Rزw!tnDl_ūF@ t(r@ 2\0u&0VsN?1R;mmReJ&JuDs@"*J_QH P!@~ E\j?("P`RuYua ƜPcd?YhloJ/$QQV@5e?cOeRơXOUQy?j`Cgeuً/J]_C߉sV^Ay=`7s@QQq.=8!r Ácwk{`ß<5c|G[]쉔lԧ&Ϯ1{ MR"_'mu{z醫zu1@E_@q1le [@7l6bne+[`l%"#b$63flBD{3[gWw|'9,:"*9^ϙ{v;$!Zhwjj6Pygґ_!ՌkRu 7)H/IoO&=[ak`GG5+V՛ˈuiq];+&{ <ο0߽+E97\GcwL≐+[b_ <f$zy}޿x-EI0Rp%䡑w-83]oG'-ym-ƬQ] 3n?oߍ=VJ:+Ҷ~0uΎT^/*scb}G;lu^ޠA lD !\iYbxᖎMf|i3ۚ&gOfkke ' =xOig{^yޑL՛]ǘ4ydQ,g'AejkSީqLXzk_}1k,p~ۙU:\؁AN!蕮 rl( 2E:S񕊷7tZοrgIO63E{|6L^򉇶\ĐiӮ{ "f!]ѧFkD-yd֗45^T>syoLi<'@6yQ6FQ6AD6fT6 W6PGQB2]"3 G:y+PfC'b½՘AV<>iV0~c>;#X,L͙_":+W:V۫Mp4m*|#h-emhWB 8KUN'OϢO8 .J]-e:mtYE9dܹ.rt툉l:\ZJW4A?vX -yqQM VMu1>W("/_s&"܆%+a^=wV?$1يWIǺJBDs3gTƷR35SWu #V(`|n1(rzAuTW:$kկD @:]\qiQg cw2r]+S3Vfxk5=q^߈r<!LECOϮwGw/%!$`ɴUN:c&Zm WA'[*|W B4W;4k61ٳMkeCyYU։2N;mTW{9?NkW4;ۡ ͨZL}a~<2]x:6I$A.uݰToffLu3$:w0б@U8ebOc#^tF IDAT0OyKJ ж'ʘwT,TB۸*=ydOM_ ϨNv-xAͪ˦c٫_LJzP:'Lmm*g%eĺ?ۙs$ƇCɍ?*Tae 2}JR8u T?QS?[VWo2 zN. eA1Q~x3N35Szfʋt}ۂ#@xS8m`G2j©]`)m)Xƶnu~"Ī˧Z K{R!!]c`W/woc*zwIzTftd1rkpic]d?].4&<'lUMlӘ4+h:^}eͻ+̮*:2h]s^4sCzC$Dҋw٨!N̜G)`Ǖ,Yc!#vCD_F[f=_J;y`T'foF.nu1UUՆ@ <[jm4cZDUuF)S>9!})Qy-;z( ە&&\w[Q{-!$D)࣮{: l]tE4߆tqBHi~uHWHj(4CU~Tzc~tƘde_~@dxu㍷ESfT]MYz]?^';S:ÅA&HN3uq =#ʵ׼ jTSCifhio\nP1}<weyW9s?N銶Fr7~69PQō_6c.p]ܯVI?umfLVь35S]7G}u3LTߓ-wW]wdJ ,sQjkSs-An͆?I*#7^pcV'u|g=(um+p3TdEE#P=@eVĞq>,5dfgǙ}agxN :2,'_t۫]gdKauڟH(3uG$>uB+S;.:h#̾C#K,hG]@TҶ1C"cG`+<뒮hK<#'ӡ cuC7Usx$}[:lq5Afq|ZfFՈ& kwֹvR?EYTTD;̾C#-06 _$vH`zl1'銌Y .nqN14PXuJW?O^D?_kk1MUu]ũ(fK` cgk" 23*9m(DqzA\G$I]a,Z4uD!ijv\$ ]W}gGF65\Ls _]^" ֲK\tE>B ܝW vĮҶ/ h[E'G1 aaHϙH cvxm82QyqTS$![rɾ9T,v{$(vݐy +̾O+%GУ\>$ew)kYIĞsӋR9۫m()-WȬn"sӧ:$uCD9p E) lMwu1uQ2gRGf쬟=QuBb >:#+"N0aȈtÁ%MPwc\1bm7uHW|sht.g-}G=RX;Ѵ(uu’wc) ՛m3CcJ){t)U\\ѰhzeuG]G%U*(: lRUgn(TE~'E;GQ &7E# קT^fawQ[r{H}uKØ9e\tE[o@PP3k,pɏpc) 4gƉq S&fT]Tmۺ]xw]nHTsk0_a8uCb\GܰO/pq44 ucA@ov)}e"@ֺnE7IiLI`UD[ʿ |uI 3%OK/8u1&xr'kWd\>^u1)Q ;uDy7;]G"!jGr`rdž?`lj|L{9uI剽/+^%L}e^P+7*B[$N´X}IS ?;g]c̻lu=mtWW2*5ᓮ;c\m$UؑhQFq@c9uC6~ r贻(YܸPD-0uIm&sK/9h<I-9~YJ:+VHtAր֌Z0u1&gH9蠷o]|E0Dx7 q AnHTHloۏ' و$zutÁ%M tWi-SM׌l([Q2UƬuHWtb>bɮ[7NPȦƶ纎1?b"X 'HC-#c)\7dK]7@$G\7@3'_uar'}1"}R*/wd<$TZ~.r'r|a-=,c]tE¢nEMZ{1y V?V~^rY;^z!1y(9uC4SS7nȒwH}CGlٮu-7*`ZJ{[PMs(_rlp1ݮ[ )]~됮`{A?M`JMpc/&cSTm1u]\{[;|) "Y8D=RǻnȆr`rˆ?Y]__4*`ڀ^Tz`&W.aiىS.|`Cߜ-ݴe>5aw> TIzAd\cO4!ተᮢ%{Lr qF?/ʭ qYaDc9uC6군;tGmm0jqs>GN2yBm):dOdvre ?tݲ |<[銱!`T'"oK ҧt1At\ ӹG2Ic۾㊨gwx!Dǹn($"հ-\7ܲN\xuɉGU4xk>mg:dObIĘSnu҅'CO||AmZLo PdMFd?2Ƙ$/zhwݱD. ;^ ~Ι?]GVオ(zlH,pU|wx5鐌?[ nH6pdn}A!Eks!CDYs>IYKbkأ:Vn1Tߕ-IG'a"BDqװT]-9 &0{v"Ϙ4̶}3ƍyI]ŒW D1 J GN[ltarˆ?2jjM~/t e!!{"Jntݲ+ɘg]tE'lq%@'K[F65\:cF'\7c?3pO0z`ضoƸ1Ϋ:']7dC[ӇyM [JH酇TA1]N ]1v:fO&m-^KiKB/?fT{Jҍh ݹ"re1Ή>2uF/p(B]<`Z̙\^c zu]͸J(nQ:![yuɽ^sʏٴ)_$RĮ@f.(-q4V%ySv:1`@i"uͨt߶2Le}xTg6u O6|+5gjkf|!N^ST3k.`VMU@y ]'+t:pȦƇ0X%5tmLE m+O91R|tv4Amk~̬h븏[ًUY8`Jouc\cfBxu#!0ZTa~-ې̟F}W3q" 8uCVGěϛ0 c޼x*on0:󇅡|F{b|4 e}RƬ=l+ЯERts~Ӷq rbL4(5!bTCɜ~80E9p:f ƨ!N{M2(?&HP&"21Ctn@yᡌDTWphIgcG{.ڝ=.`ޟT:$O;ǯ.0ßSGq0 j`?o򐶕_(c\쉔X+m'%@l%‹tibז Q~Ř &L(iZGLg:̘.E5*\OA50Dza Mע,|k렇nIQF(@ra'U7Dv̨znH0cԟ VY z@׼z-r(*V聱G P^>򿍃B`&idaLw !!mw]=j˸K)9~} &9掶W ܁m)iO RdEJ\沪߸2[ 2.E.[f[$R׸@F) JE(¹o01b]I/q_\wQ"yRVHE!:l4@ދʟ|?ßڠ#s;0u1Fz]&cV:gOd}l3YLmWKʎ<^iK?$_^+ȵ%Mρ."o0$UyQ&ңwV SW<!lG5(}ܛ_Z<97Q?=C\7d# ~ݧMBīm߈կK_)Qt`r/R,$kPC%m㮐1˗)mnq%p>>d)]I\/Жyf1doȦe( dv%Ax؇>L(GW ):VY wPCL븂KlqbltkՀ]JJ9Hԟa[\'rssWGiLA*B.m7PJ/t'Rxy ppfc_'BbwKՖ"rv)< % D=S1;D:]nz('1%"!s G Tĺ4 {-?-~\lw@>)Va놂ĞmzΛψÊO~F jgi)mԶ21{"gxZ//'f)pD&)mN~Z~-$biZS5˯M$T:om&omlh1y5UuJqqXG]3",%fLEEEhs]TW'|msx É h=xDP'uA[-RWd̊-[[\ぃ[(I7>1K~=.uI!a^N7;**wN)KD$ 9 /ĺ4})55]zIUY՘UGc϶|]RuE  S·?x m71IsY"FG__/#~8e$B&cV,Đ@GH=nxȲu'th(k8-I7D4}uuK: aZHqD]êw ;]%6o4[f刊\-v]Liw5L@8?RUr-E5"[>k:Phɻ~+2E,Y^lzNϻn1& S__3VXҍ;ņA!xuZ~]$1%ҎB wRB޽E\܆' :0UD}S_m8Ii(3.Klz;vQ"aT"*1zG/A,Fy,qGJilx,`"˘?w~lzcTJn_w'VYīTL}uɡ Z:Ř6Sa m\peX*kO1uqvd+*Ԇ?f+ ī)> v.o紻 #GH,Fd׉ڹTw2& _8_P!>'r9Mę SDwdL#?Ř|!q ,Z 9AVg+*vkNᆭQ:Řn92ggT }(弐P K̚8Db{;nLS)kE; [H^ o>Ϣ$qH6080EU8V#1yFc sm;s2]\C) 1[1 JJE;_p`kGISA^PQ^yIsvc{&K:]ն4^LYΙ_܆$OR71y)؟qucoٶo}şJ:ԩwyg4]V IDATIb*wCt GrQǘ1JЖҋelm;@4~cLAODQUR@Iz.M7>()ˡ6LmxY[%wT%۰?[Q;¹wr'YLT's׺1?,mDXm7cV,Ş]4;_+'l۷>GĆ?y*5߿~}o}hW0:FTSXS#M1!#v'e\@50:⇀S]c>PD5%D/__RQa/f"o W0f_Eӧ$Ӹ - R54EQ_\;D*1Oo۾^Jϰ϶}#}?_u{۷W׊NN4&I>-OH hأwbyOBeml00){L_֙5^ MJTS@Q]G1V \o oϨ^SxO5.N1GN#fm;wy/cH'[)p x _+5`k" g:fT[tzf\5 TW:wH#ޭ;f|9Cm۷>@7o\V䫜 TnZw+TT f1fN ]1v:&IYrc "TU#+yߐIG7N1W\{[Q:୭.= t Z8|WzIU}(iLP|;.VNHԫV}^BKvt8/くu1IN,''Ytx<ŘXh룻_'<5VǘUQ?h>™LֆQx͟11I9v1}Ϸ^$d|9IGgy`=]Q<<Py#$ '\hu佣XO/gX:%m?8ŘH{ue#۞6fWO~t4xsu"؊7y$5W*vDb_.J/єGl{}նYH?O^=Yl8/L[ jOc%/aD{<:]1~< rbLAE㟯l\ C]wӧ:Wm aN.&P+ϋϿS_rOXmcLߊ!j]s'z3dW:\'>"^=]Kݞܔ[[FLGiD>L xA}SrV1}I[>O\gv!є/|Ũo_^Ïϼڊ <`i'j*_D8u1VvYqޤ-W OIW%*W1 Q_?Dcj\g(NC5̾ƠxdQ:tK >38z똬ű؎N)vIIP = e'@;'y)ϭTYw: eu1m-uHoі1b}Zq:jmc-‰تcl֕[UD >V48:안 r7ω]`mϾ/x'Ql۷|WC rw|ugjH*#]X4/pK:k70W"QNū.uI0+}g** ,2gW\MܨD[9 oD5UK\t[*S#67]cmG),x}O^yvtjz G ;Øl( V>H4:&o0C1-L",^7E,e3JMx{5u!D~{~ګ'?:[~vmfFWTH.ɶ}q]fي+G~-5 3#]w AY˘:Tʾ|u1yda\L8 ȿU AGOo lDŻT T(xoFXDcp~Sy 0 1gǨ:gDb4I6 Btܣ)^,.0#?bkM#[.E LpeTF)=:-BgWTGs=ر'Q9ȣ1㚿sJlß$:Q|T0AXwu1~Zͣ"dN_wºywF3:؁?1 ݧwz4H$>j۾ !('OcUUZ_ta&mE3DHH];M |u1 ׎Ҥc;rT:uGu?qbLUTD_7qmSYU&V-ZWow]ҥ8V|ۍӘSmǗ7_?}AuGnm z7.Rՙ=u1 5A,Zy,c4i-$vQS|n]ǘyTW:Ę}2s ,̟?<<$8\@}]_@.ڙ?-QvG/ԧ+IS__DՙI;]ͮMl֟wyb&UOV/udL2_u`1]HpI@놬(OFr ~L^:fhFh TPFХV$>PK|P] ~cXztᷓ z* YltPDMMm'|eß=%[TTݲyGp/n2&qvvbe2pÈLpbL. )^=_sdO^",[]jk㎚+㚪Sϋ@<ns8[oeR_cZ*ouž"goI/>}=;q7x}g۾}u'F7t I].B-0q1ɡ\EԖҋdl gvhK.;I-;dk\tj5UJoSwg8LwX%!2KW*vX 횮1}jlx@:w 0Y(눬x5Hɫ-W u-{ +;\V(#Nj1ʑQ} _? -Z ~y 75̶ 樦n$FuьۣUWG348j%gSzhg\WImfL_fP >58uC6ڎk~ ي$s{6ڊUSg}&뮛I3t}uK.ubn=6&xu=I~ TġWgEml۷XyqSo&ȿC\wiҬmN12Qm)d싏gLµ0_|+q CсCsa7jk3nd (+:11O00N]:=:$&taLQuA|YެN=\< uɧ]llVt~Я#*u@]8t"is'H/沓y87?1@YA5: =YW~?ט9sۻ M's: :| yTgL_5Tݥ6@E&IDz27&x"?feOcyi@8ľˡg.*Uc ]БA>Q62-bS؞DƯT+lcDeY 䭊zʓͨ (*'Mu'rd (]1QZa#bj3'tQ6lw]*QLlk&UWӀ]3j<-jK!%08Wig*"'Ƞ=S1n20ɣnL{s#)W_=S3eifzՍU'Gj5`^ -ڸu{EmHdL?w#@w}r&vNh|{6Ek&Uݛڔ9YD7]AH}q_DO[oAʍɱAnڹ'2oUbJזɛ\GSjLM|r~X:-8:u{dR61Q!K'NmmJo?x4*s'k+;VULM@&cX?R#mRUD[>Oq 0 Eט\PDHzҔIVAN?$EEE{ff_fT LA :m_ =vut$K;9;z8P:d낂G>\GܲOY[Qa)7aPu1}N ~eeYG6%}XjL"( $Mo0Ti'vC5fն FN݀aS[Cv3%q01Tdl|cZ΍# $iUl @_kk j>Yu >;Roݐ$qzwLn>cfe&TϤ/i*n<| @VU;2We?j]bd P t'nhn0D4TjᏒԎ݀`SeO-<қ/oyIOsuMxmSZ8PD;ttr}GnTo.a{*hO߮U2q?I #'Ʋ[}V;8mɱ*yJsnbSL)^ o[t!=\g{l[;vCŘ3ޯΌ 5'٪$AM*%az Q}+dMc ѻ.{HJ:)m%8ß*{´=S $*Ըuֲ$%n'v s}c7TSiH-pnWζo&Tޤ @ٵ>C?2U(czfU/$I!vCŘ7o2-W육`Sz?YxdWnzͩaSdV7Vzgvv͕' _VѫYLv0HzjC}>v05gcGT9 Vbw Q_i[bG3 t.Ngϛlc ß{MǙY{ moTb͚{%nFec7lKnxA>/eK={w`4!QIϒ,vݢ7ƎgY(ul߭;//S]*qk j/7u ɜ0Zܖ+L.tp  w^1-~'鍱sHlRrU֍Jy%; Y_rIr35;*s*)3=8mIw*y1-5Tu|윑bSz-jU,I{6L\x1@1Ug\.usM:4˴yO= "suJ*h$YmC=fiΜ@}Iո4K;iߒ*<2mHnV}[I}9vXi5tvM2#Wß:J=K0Soz-L.|cfV`YfU?.vhkz{9rBkcnخ[iSYèWgrw*vð&>;#kcw ӥV;ܫq#:1p\缎VI5,ß4ߴtgMx}Wն$T Cw蒩-T2Kf7)hΜ]bguI%c$Ԧ,]>a˦*wV*s#ItcgDյscg oQ)SZ\dAmqkJ;\vqe07Li>ӃTң{<% =SڟTKf\'!9-vFY͚\g9GKNFKSv* Wʟ'b igWK[z%1L`vΜt@ %;extY-jkZ!i"H IDATeaz}گ﫣ff Igw$Gg0X5png[8'_ijlGb' Vw#յGnv׿K_T+]pxS?okb7=`HႹͤ}:>7c)͒NI1L*v^f:6{Z02" ޘoTm- L V䛏q3%  =]zo1@U|qܮ}ҾPϙܬspW$; u&fIzu Jݰ5WG׍;('sa솑pɬ3cwsޗeV1V;;XT^e6-]"utT)욕*Sɒb#ßzdw͓#?vTՒ3E ȁp;aH yM3#Iguvv2 n_ :!3S*jUgWg݅j 5ke1fvW[s7LSFxI1B'~tή~nImnK ؒ)MTwbr%LnmWG楝5k֫ݟOy2c']k:7})v`YЪ [•?v{W}sn.0R&H;~9sjkOt_2" ٮWKLM]/;^ۘ$&z:dvwBO9sL=wOKjKu輋'S|v?9ðN3*롒NҴ߃!}~dI:HvWH_/Mm{B, ?Qk듣a3WjvUr; ^+ \*<7{9ʷ\IbG`B]6T#M:TE>๟Ym=!7G*tl&}{'<&'Cy6ï҆lYu #pҸ?z!@-TU}d{m_Rk2+mk>ґ :Br4BY0m\Kf3GK> Yc߃+v uN)IOks&3I#҇3闣v4 n?['Ӓ}L~n![jo:vю4tv̦g$9vO20x3Ьex2;O5_3փe g|+ܮ=Jpop+aYtlstif-$$J9CvOս=Y".^i?u ȲM~#ў}].I`CMz+,& x% s<;@!Ykk$]?UҿVOJ6ן0فn:BkI]5}Im%'իtMn;]W[ʨQII$u~^0gkҐ-9HGvl:c`kmD2)-ٵM+m䏚\k͕yb>.1wQS=ez5W-zx4x MS tefcIoe'/\1vP̮{5:ϔ4ɤή'S Bn%?f&D)ti4d[n0#Aup>#3e.Li*IRg$|ֺkmmRJM$rmMVgq(Y/V6=U܀fX?/X0ՓON$547xn'H}[>^#Ւj'oKĵӱ;j3wv#iA`$J:W:KWYHg9w>LCT{Ӟ&M$v/{n.k+[$sMilmz<֞ )ͷO.|ǸR-EPg\CfɔI%5%{>޷_޴YR6 i-d.CWZV[EnVڸn-bbimPg|n1#%i?!aRDiRHp-OI珗Ԡ !(S=ǯk:Xi^ N" 0ʸ3s죒V!XI= ];)vP;^:]u5>(oZ`n٤ J?vGڼ-֫yWm!jSrԊ)Tbn֛݁o6 vdv̗d;pEű0uTw]a{췱jH>?v\>/ٿ@ջ? lgJaڢcYDU,>%bg`ʒ{%CcC`7 ݬ+cWlO[qIn@mH6-#Qyܝ?5 0lKsM!InH)9[lffn+2$;&P ݀Kc7 Fp~Zaa CחY2=v/K %k FȒ=pӟc_fMBrDu[Eiz7n݁ay(jkZ!Ir_7'_Tr,wXaP&ζo(s_:}ff2z IwH/#{b˪-aS{Lr@e1G C'G'Vß^.ۼeh;aIQ 3sfBhY $g\DŽa);,V45m|gI {윞;mچ1-k-\bw`\d9փIJtX;#ƺbW]k ԎҌorWGT8׆NAY$K Jff;;%Y^c.?oT 7vPdӛRU5W(k\- I?݁ X;۽ՖRkɮ݁3yYka6IRi\rg즗b[:kKwtG)ݓ/4v ɦg;eTkOHzll*&vB)ͲCff3jAf < 4/^(v/KJGء7 _VkmxY/bɧRߑbd,yOɧ/`h2o8Cҳ;Mf\!o!?:7ZWڹqF,9FӱSPQ% 3]OY{˂WFSڟR\@}ыO0 m=cgE_ڊ3vT_ut$^;ҦöyOWczf:^NtG6T8O˹L;Km-׾=I;P=8jazaL$i܎/t 'Y}~{IjRh皪lz%g;ݑ4xd$e[ժcJZgY.%k%q6WmM+aY:dY$RL#{/j۷~lYW(, 3RgbQ5U@D* :jG7QCZZViVr j}@:5;NdG |F]u4Xy?xe=we8c`ќ9Ŏ@mڋK\Y{c`l17bw7)Szp^d?#sV 8}̚%y:iY[qZ[+45m2=ͪh+/KO)RNYk|Q-Pӯ`_Q\Zez?Uj+tuY:4঳WݐW}JR5 @Ygu; !-a Y]o27c>Ci:_|\UJfI,UK등C̳S~ɤΩ6Ibwf~x#$R7hC>V}̳ 1ݔVґsKi4 66ٵBRE<5LA`B{s^dߒd{j&wjX\utrKL:ULp=)ZkܲBa]\plI{Ω&.3N_wp\GAٝ%jm'HMMHJ\Ωa}.FH7Ckq{v1a7DZuMRYxY *G,\U35k4kkZa&sEd 0VgLI jZIS?1O!tt˂Z{~w9ʁ m9rFbOlzjm/rfb0]pZZ2VJ3 Y%RE`y^>"iE͙'fmKcB? $GKs˕Ϧ?-wU>l e%-U$@7E2j}}c 2hڴ sZiF:s?FDǎ1A4${Α<箳I_K123vmdWNj f:'o~yscRkl 9D5[_Jf Ĩ^#ȵ|TQ ::rYM/t.$I>&-U`οpRԱJӋg%tK ])}[h/|gڴ +?% bT9o)M/.%Fu*'W}dm8kkh[q٘]T[}$3ISjz=s*@k󟲜* [*]CCV; ,ڊ$/2DV8VmM+b ut3:E[< Lgnoڊ5QvT1H PY::J—R%)vNQڋ/\;wyB[Mgf{N+[؆UUGkBJP1+I?Iz0v$nت-݃ꗵ/ɒ䝒nPdYlz3j/劜X7{|].=4QY[}╱B'Nt̊٤ӋU>butJm-fXMMf[c7/߲iN+MxPV::|7ߞ=eI}s*:%فY[q8=<1^QGG͙sE.gnyzub1,bHR)WZ]Z~b-lJӋy=is&*o nbW2J_\aE%5Na$]nZQ լ+Rd:6vR$Bi:g\~); ?|O; +9iJ#v(qnEY.U.vЋ>ήG%&vh *]zC؁2;@[%Vwqd Wj43Mu^T>#i\V]mZ}>1v]f^tΛWҐMtVC즋CHrcpW&Cnvׇuc'M~b/=5LwcW0@5\3AS4;L'.!X.Ryֶ:~ŷܰ˺\v@$b0TI]$ҟ:;洝p&h޼Mm5J˗%7usy4,fIz*lIwt\g6k݄1t٫C-ǃI_5ng IzD=ԛzJַu*yOLs>) >(iR䢗 VJWfyн2j]W>q]̚uˏt~2ҍiV?^1]kS}JK%v+,gתX|*vP߬P/λxbڸ(s!cra^wݜ51>…Zq$2i#I|3&I U|*M$1io~z\Ol0K9=Vu[;[4y%;%W6IzaVK!?\ J{Nx@|(]]Y{n\ot%A ~Lo}>.d.&Ra8mM0%ɇ&]RORnU[3K{jԏk n&}ZI3׾.'Ӯ| q?jJJd@_l(::nJ ƻ'M x7kkW%d`wQx.M2{A~I AO+ a6ʵ,l\IO@8≍ސyFQwIv{'6^]$lIe!֙³JuISJWk?Ba]+>ᤆ-![\zk_gGC>Gm䏙i0ӽ%mtrV:<jfMf>1ݖwݝ |/o@eY`'mܸl]_n7gl/0D zWihHlh!i7MYc"&8W;˴ س[xLdz) z* T?4sfX+5a޼}`k>ɥIi7]NJlgdZ'w73ܟ0jSX=ڟ'裏m"Ɣ|قOαSJgn7.Zx$vƔy}ɏ%T++3IDATvgOcG$v0֖[S$ n*iSԭɅ+UbF5nA;fɺOwWX;ȰugrqΌbޒ?@m`H|L'vݥR|!ʃEOm#v0VL~_tԲ[|8x/Mɿez-P^i<~ϮgLzG`i' x)37!)(xRYn3v3?ݤN9 v\ɧ/`po[1u4#[N):v`;;;Qű[p3᠟\ [rz'+v_7(i-\3pFcm߀AZ6˲1InҞ;VΌ`l/>Jү%lǵ&l8cf0X Qu2;MRl\M1`z͗稠P \>v 8ԛotoe'<;@<{ˊSPֺQSo .V#a~;um,|?@Yms>{͝;TVeέ%o& 2Q&?[;jK_9;0jԽKLEI!vK0So3oa԰͒:cwԈRмu vly_?vG36PzMK-UgK;PzqE;TiS ?@HLIB 7Ďbԉ%jzM;mr  ?@~!U%ܾjّ $1?seزj ͷ<`/51P6`,gKMKP(#^pk@`|\1M|ct- 5&ݒ+͹}. ՒO5=#QLB(_enG 'ko^v#pD MDDс5F$jR&`"z mrD7j7gx֍<w5?&9kix?@'hzDv0ls O\)m{0W۞ P̠Nyiՙ [=ۚ"nk@3󳳫)Z25|YN5yF;ұKtjqq99P7VJ9Snﵲ@sMΑs/|e*'9x:rQ?v;}xTLzѤ#z|<32^|pdD\{9;P-\9[kfh'TJzqd7{e*%Y}wx?@o33qj/86u|C:]BЫۋ?9EJu#:ÞK?!߈?@!O5+F{|b)׋Z&лaO}6';ňiAlNww>=nP("xrrz^PFN_lr^1|jLDmy:"柛 HCz^}YdJ?@9xff.ҙ Y"P̝O.b/E [<6?@Q) >NLNʑǟO?sۢT@J9/煏[+ @<9wWDs)"bE &#EZk.FD4).P image/svg+xml astroid-0.14/ui/icons/horizontal_white.png000066400000000000000000001057651335422170400207510ustar00rootroot00000000000000PNG  IHDREvsBIT|d pHYsII$tEXtSoftwarewww.inkscape.org<DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/4.0/i] IDATxwle}ΡzE!T t,D 6D h4/jhKhDh,`["W#"E?֜9}.3~k>{u+gϬy<HRcI6jA$I$IHE$I$I4-,$$I$I$ 古>X:$I$I$M I}e$I$I4-,$nH$I$IҴ{ I$I$IGRd!$I$I$iXH큭[$I$Ii`#kB$I$I古>i$I$I$-古!I$I$IZ&Iml$I$I$ 古V>nB$I$I古v_$I$I$i,$v=[$I$Iia#JiI$I$I?Zq%$I$Ie~s>]$I$I4%,$5d;`9_$I$I$-古֜s&)$I$I$iXHjk&)$I$I$iXHjig$[4I"I$I$ISGRKk?wiD$I$I古&]_YI$I$IGR+wfA?$I$I ?Z9ds)$I$I$iXHjyG[5$I$I$MIcX !I$I$IzXHjD$I$I古WXH$I$IYHj8$$I$I4e,$U { 8z q$I$I$iXH-3 $I$I4,$۱ $5$$I$I4,$B˟;2$I$I$M#Icd+EKI$I$I"YH+UI$I$IV?ieIvII$I$IR?"Jྋ GG$I$I古q9z ?wsH$I$IT4.K-qIPH$I$I4rI6`,~8I$I$IY?0V+$I$I$M;Iel5$$I$I4,$TCyMXq$I$I4S,$ڽp$I$I`#iԆUd!K$I$I古I)!n%!K$I$I古QC`!x,I$I$IJ?F鏆|&㐏)I$I$ISGH$ pS$I$I古Qy yyT#8$I$I$MICdF7CgG[$I$I&古Q8s-I$I$IG(:$I$I$3$-`Ϥ?/h@$I$I͙?$׀;βHU9CH$I$IҸ8GB=+~NW$I$I4^I6^:@W\I$I$ILOlb^d!$I$I$i,$S-αL:$I$I$古9رu!x~mZ$I$IQ4$;hcH:$I$I$古u9 آu!zV[!I$I$Id#i?wImD$I$I?KrW߀̸wWICH$I$I4l\:xxU:$I$Iod{)?}IvmB$I$Il&TOiC7-I|n$I$IԌJr+mtc䶭H$I%! Hf#)CH#t+IviD$I$MZ QH!^Gl:$I$Io`|ui,$O^:4F$Y:$I$I {QU7!$9xmRdA$I$Idme:4?yINކ]JuI$I4٪B$YUAqpO3->H< xu $I$iU8q_gܛffZU}8uI$I$iTLrX1}tsVc:?$I$Il ll ⩮.~ \\U7 ı$I$I$\U4bnp/I$I$I4E,$I$I$I$I$I$I$I$I$I"?$I$I$ISG$I$I$iXH$I$I$_ZX(I$I$I)b#I$I$I~$I$I$I"?$I$I$I?I$I$Is$I$I$I$I$I$IYH$I$I$ ,$I$I$I]:BYH$I$I$ZX(I$I$Is$I$I$IҴic!,$I$I$If"~$I$I$IZXG$I$I$ia,$I$I$Iu,Ċ$I$[|ikjVʦɕd%j/o l2ۀˁ&I}3絸^׫~0PS(k+iύj"—45~:XHK6sHp]UuIeItFb*U%{W<.p?U5w&IMN.wvK >bk9WѕW{|7 ]j i͏WXXJjiP {6fRm][ѽ>݊Zhfڴ2ηק?s}~uO*k=J#7nDwt[VэnIWnFw5!t=Wx'ȝ,},q@F]J$ftw|\=7<Iz3[ {nHC"迀\h)֜ɽ}W?vcV IЯS2ATՕ#iz%p7n>q.zg0KN>tfc7}uIV_|{t??~Dמw<+zv{v]!#w~/\ңv"?-%8_ Jqt 4)lLff7|WfѳXdCk\HW}xUxf`@=n6qFtk;.\ A4W/Xd<8b8Qg0` t7'LnwͿHc-4G]ޕcY~{~/\fSIIr__8J _U:$E 芛=(V;sl3$*!{t;P7\25tK\:Cb%,݈$98uغhBo0[tϱ4U ;Iv)8]gNfC܇n$omq-52IBƿ4nGW[QI=7y}s_o9I0s/tAkru2+rpΛ"(ˀ?kcXkIvNL7˷jbml <x:݆o2{Yd#ԝWK=PӀ)Ȭh@U%>A4jZ4LeEnK7p}.i"Oxݬ,=,t~ یziOao +,Kn`$;kCǙf/ ʪVLI6i~ݾ =qw-_%k"]hdq, ?&IC| _ѭ?f; ?:8$0},uik`$%y4p!rGUu]%94/-g3 3~@^IE7Vf,~bTIKǃS 5q?3.E?hD<`^M_^ l8zirlyQdR\:@Òy`&n詢ߒĥ44IJ&:τ'6$%j?cٖ tkΜ8f,:]UBZg,Z>FctwާuayEyĥUucҐ5dUgPWέ,C@gg dmG | 8dD'yzn\l>n.RU?! ÇWՕ4t`Md pujjӧax6=X8q?JjAIuq&$KO8n' l0"\w|[$ pXS-ĿR$WY`0;XZg; xЬm'$#i@< IDATq*/N2{$98nG64z\l0{Kmqh'Lr(~7$L-7Oқ}oI+}^c x$/H꿨?klI%5PUlEGUI':Eje t3~n8ᇭH#2?IN4]ۏI2ˁ`Ɩ$kDVt{x:ˌY9z叆"1tzUG[gy&9uI?(w]{[B}ݨI>|8`Tiq$ɭ}6.66ޒIVI?Bwhen,Hr ^$ Ko/vj_Zg8 {WîgQ ̙?Z!l:$=t˴H9GjP%Q:#>t+ ݪuhd}0p dEo?n =x(pf,3깭C' YI}1$oo uuIꓼFÙ?VC$ y잹F xЃp5AO1]KcNL^l|xZ,k$̾.K7MPZSg88u5|8o~|NN!f0ޭi5?IvM~L{?P6#圤5kR_nhl|,񭃨$΢dEKr}heNޕCkZgQ<^:|l|Yq,p~i\7\=Ik$}|![Ѵ5KAQq 꽋Gqz{n3_Fh0y6O,\?Z$Lڣ*UL/[gQ/<:|| 8urǵ"Kz>L 9[WVկ[FhIGLCM s?{+RjBG d$Iw887Io/6xά8z`tMM$93ɦH~ӺxysT.m@E?sf|8x4zoM?k#I:#C'ΡgJi&BH^3Cߋf}'NgGY/$ي,Z!xx |doO'6cj"mDKO${:)L;J} 󩪗OnlEcsp|U}u$U&Zg 8>:|ܖnލ vt3O\LIj˙?Zfp6}Z_=4YY"讹go @Inh}#IVChz8[H*{jlgK@Uջ[g8od> Z:IvlFqBdF~k.Ѵ#&k$>K7Xe碪ZrI6l/:kpKZt |t8:|ܝnZg_LrIWUΡՏVL ~?IaӁpOYv4AgIiD˗`rK$tF;7;{ ~8t3~zEÁO۶2&+I2-{I?Z}niQd;#tK)kU$xՐh u-O^gj,f\/ӭ;>U閩e,Z ëIGFnY8S楱m^zNd+ !1?ɝV 9u[̟ܟT$^N?z{c& ,U45]˪pn(;ܫ~:|<xi, D75IV#gh1,\lZպ]ܐ~sZ^؉4,fP-nŹ%9uTշfvn3A3XO[g遢$FGxu1GHc=,Ԓf$xِhv fc׌?5 S.kD ts.]ySg 6 |+ $٨^:TO|G< ӪA[0w䯀ZAUݘ"`Y:7tZ __7[]E7оϛӽ;`; vl<і?w*_..~\ZUW 6JIV.VGsˤùO~ M_7v"fXV4:.l|2c~L7cdHUq<=+8r#ࣃ˽vuO}I6~؟L;/˟) MneJ @炙VwZUu$x3YI:46>`es"SyiΥk_Or `7I7T;ҽ戎w~xIU]:zwc{x1ߜd𧣉ܧuWU88;&#ݺK`÷-{״uzTCv6oMU[?W=*@Inff YLóK]s*eqIMlgxVUu$Y nOñ$7פ)qg?fqfRUtkjbt#:8:&FHShn5 xeU}uuko|I^In_v"ҧK WUNW>{ҽh-D=3CZgbOHG}se6ɉ3nXUomd>%A,SדRUoFDUFŝ\/ =ݾ?07QU5L@in-X/s瀧VXUy?wnCkcOKZYAKM&Fter+݌τ,G$tjNV&yTU]:̚$ \G7}\%e1=IΥ+a'aWj`NkdX+K?xwšt-n,2XL${>/P`$'֓앪!cǷ3^U[w6d+=gω!IRU:$OU$ɑn$Kb3'aɷŚAYi|mg)iZt'R`Ƒ$[{b$[p :{9t{Ԟ 4+v7Ob3+I%9?dAfp) j z^l| vޟIoF֧,F^#8#8氽k"8G*πUUB .oc.gztcjc&4z;Y(~֦_UO?OoV53>dA֦RU u)qplU}u$ ,^jD?\:2رWy}܏w=:2\IwS2U)qs,ý7|#!x? /-Y8 쥪:x?~~ i`Yt Lr`yI-0)v1~}Ѥo|I3f<Μ=L Nhcb=~ <@?=de_{P|a0KU7Ÿ8:|O7gY4L :I4#s,.#8fg\:&6+|v䥷y wU?ȩwZXZwKeZ˟Jrpp:&m=nU8}ppTU}u$ ZףYw8pAg&Y:$ZXQ̸?W `˹i.Sz_AW̤fI7yL୭Ch,z&6I^|CN$E?m@m,5ݮ΢[m IyZI]U!Zic V17ޣu%xO6˟HRI |o3v'`DX ëA;\ҪJ&JY2"QQ@E0bfѣ PA@AHTbsqOK>uNUg?uun:Uڰxv"ЈX:;G֞q7pZfk{>k7-V.Ith,EĒ3k-/em`RT69.0@D Ł#A"#YZl`IfKDHy@{1Q05"9fy%|Ocݼk2 | PҺk^G{t?coIeq'QD,-؄-B)md,MYZt`GIeKD-^ŀoDīØȻ<;@}`vۋ? gdži8`7`%IH49SL|S_A}X ;ĈZ !l\I;QڝHٹhݴp\D-;X$ lΫi~Ќix75vF(%ØȪbHϙX1;UJcvt3^[gC%oshn<钍DIgsg"b݈88X); żKvH ЯKjވ؛Z>Wv9(஌EߧlئfA7D̉U<"&?6HP΄xnwgjX X/;Gg;&`*"ѣcXxQiH"b8>; |^e(-FYl4O1N/=)M?oR6XFޒ.IfP5i#z6x IvrJU-Lȱ퍧:1wD\| es?OeKӾulvD~Q硠EInv3t ސooWIzۼEj\x?*;@[5s`WGI3;?Ԝs5 EX;fDKvH 2;MqIEWXkl 9"ØYղߝ?Z1UyS:llǖCF>ş"tq}|-"Z/˲ 1`,:s5sO ?DěCX\1U[|Itg9x,;Dc= ;?}Gď X,K ciqeDXt]f1N3nv d괲lD"*9ztrvpvv6~+УXxq->}^D9#9Y&9Cd,1KY/s#b0f)bkGs~瀼ailc&qZ+;iVу[i@\pED,~=0r$a1Wv=pRv zxeK3W.YJN"b0f t uAxpxD̗ĪQYG>׹zTc!v+5l0;?Fć)&Gu[8ptv=& ciƶ 윝Ū-pAS0;Yj)0"^Ī<-_#eH-nFv]şDM``H-o~,2:;8=$ cif?l:e[࢈8""^̬2fѺ"0j.婭ӕsN#9z #f=͆?s4j_E),ɺkGX(;Hz2f'Qf!`{IUQ ?b4+puSZ-;Y%.0|>4"ΌD١u<,Om;/P>;`Vl>;?DĞmuڊr~Af9 w2X8iE"␈X3;Y]<bGr١cRv]2=^uԮOM#m\X0"T; FϦITv2$M="V^FʼFı>l$=I7fM(_>"mzƤ ?f9Z9}j+fdZ%;Y1;@@v/KFM7:kݲpFDdf$ҸRA,soΏ#b勅 IDAT@ff-eIqLD|,"K̺iaqeD׌U5X!"ߦl:{s!*e<q}sܶx\1˱Tvywbj+Umc`W}'"^gQ|L e6GDDkK:xpg} DD|8iFu p[D{F١>Di7)]f!f(gȝ}#b\cr,GwdTmşڊZ";@`We'"k \|X%7Y_DE҅vLnw$=۟Tul検 S8\1OD \I9OnkZk0?e$qt#K6*c6d1;wPbjHvQT`WͅsD,\z0ieGOvHrS$}\Rkw+F~^Qe5q`Dl|ް9#⣔h Fst2xDE{ƶ1Orjgiya#VZ6On\0oDgE)ui"B5+3{5(;EDm-ADlC騬dasS3N#cFnNqն$VLLmw GMş|̂M\Υu)B0ՈXIDĖɔIN5#>ŬKR:S)㻎`j2kXr^ZBҽ!,#b!m͍R:8Yj][8;@M~6ڑtSS: Xo&9Òw/"~/9Ylx tD/l("6`֛RH]D';Zps{.".)gxyմ 0ZCS L*zIvQ(Dz` SXeF'#cm<+GҝDѳ$l9dg1yg#/wA!"G}$6Z> RsRCLw_D p-׺Maf#_zz|ܬUzE\騁> #ba+M)=+ k ,{Iz6;̌$[OK:*5,4gf \xQ3RRI7&>9ob6;7q)mtDAkIw&k̆.i\Gp^6}+4=ڔ<,ǻ#b7I{!`DRPS3w4k̆c~ x X) mš?ޟl$];Sk5o7~.dкif# ܬUMs6[ /j[X,>|f6yojh3cz1\ Sn>=7(M3"O(cȬ})q ppY~|ܬUMe+"oI\Js[m,;pf7;GNjڍ."{Uv3ܔu"rJMocdDŅEē"Pm^`v]DsSWsV.X$=0ݯbD@) ?S:hR3S"MSX2YlR~knS:a= xOvɒx 0_v5)#WJ&9Ӱlj[`ɩY皞փq}8pms;k??fU89"+P ̬=..s9pU9Z."Gv~t|DlM9[f86~{7E%]i\1~Ε6Y:jzZ]ISvמ<"b!`}I[SșY 3#b[IeiXRY5;و tJW5#|^C՚C IDFpoc=҉{D'LofWwONM=7kUSշ4gܾ ؞2B̆kmଦtCv6Sgg1Q7Pϡ"u4|X0; H/" |wطRxGD|j;Jqlj[`c3qG }祤%)ioIk씻syFتifvhv힉 ?f41emI7uS>HcY%؄,\ь̆5/ڨǯfjz!Qc7$]'釒+i9`=KFJd-S%(HZU$!k_a6,.L:4hrUS"1_v> tubrjꜨ#fЃZҋ?3t$mK7!X8="^$K"Q̺y{Zmc4,l.oRtr$g3j᫩-\#̜zLvQOG] R#Ҭ'DA+JIҏ$ݓ|X0;Y6I7KXXr$#b;̆:WQMj?ӓtCu)ܔˬ  ZD83k;o4#ݦcfm"I99\ ն^Sj*ܬUMQU'*I[R)x' 2(Pl2u XI>eWc6Stf;0T65=lj[`xF5/ܬUM?.tTşi$=/f.KeVD[D|2n3fCvQ9>;I:RRM;lx:_$='dI{65;Hc6|-39.،\t\lv,&t5}Ù#b SsUyJvnߗ`r&kXґmf$f {Q^{Mf3! =plj[`xF5=~=7kU&IQ50M={VMeV ߌ%}9;DEbVߓ{nk~EC:IRF oL)/n*Idw _m d\M ?5=e|gIwS"ۀ2Dҫs,fracU&;@ + ܞȬvp;ov5.ޚŬ}֐[Y2;@tGv~tC$ ,lL]HjoD,bK;gǾ 'o*lvVUm\ z iIPƙKbfe~I԰pD 7mRQ>+7d#eU@!鿳v,L^3=-Vhڊf=/kUO3͈igO}\A83"V(Η0C5 m>|ze0ggq^UZHwmp_j\v?şI)"HfΎ+k3֖;H?;8As!j\M;/h]FF}\.!f?f9jlݕ`D,O?&e׵l/)g,?aV43ܘƌz >/;YH^%,l|8x65\̄?f9\ =nhG9Gn7*´٨Z2n~qDlAe[KEua̦@vq<;YWIzN"i+8i#M749Ccra3&C1 $O9+esg$]"ikୀlT-#ufx$o26/;8>lh$=6݈u(#q((3pYڊ?fTM[mݖesg$ C79Y%#}xIDM= ʎ%Jjly_5 I74eK_g?f9nУo愈?5#: IzF!Z# ۼ#S iD("v | XPvF~$;YctKZx5uhavxYzbD&sg# 1ov/D1;Y=Eķ"b'"Q>Gk+YFnf1QZJ>KYH{3pBrX'; ccjv2uKݔ`TX9;\F;DN7lnwD-B ˁpqFߖ]fhv3# lgkGĜ-f9҃gHmşFLM(kCXDұq y_y# r!Z$sf6~> 7ep t0]""ni5emlVj;ciC?YH^\ l.iO~λ*#)$}/;Oڴ YU*Su}vsKvmşt(-ff66t^v336t.eR 0\GeED,P_'JnУX"l--l0֓tP033kf~9iqYڊ?KG!*)uWI~?"IdѦ/6I.%8;_7HIRm?wKCCOgqWdѦ\i)ISZmu`If133灯g6j W}mvJVkvU[x?.g%DB3z]l&iIOe133뀣h?KdN- Kf07I7dNmdѥFԕz?.T@ qllttY#mf! өgfrQv8;Dm,G0j+kdpB!ˁe13:Hcf77]EDìm Iޝ"b)O$ L`IS$=ƴtvӀ}M}fcөe`͈$;DK^j,@vUzYDlm"bWJ'W5q*&nI{ 3.{kØl- "[dg1ĞǾnՈ3;YIzKv tvq9+;mDį#şkJбYFд}~(QZvLPDX<;$y&;8ÈF[`vk^GOdqggFȏnE,OGH x7hr3Q %>e1kZ_ KDl \FV4fHz˦,;ـ`>e> (;D.DvwtN(#<:"V(6\I!`}if6HWt1{DzѦ8."i}NVIc/Kd--X`6 gR߹?CAD xWv a2IWg瘀#bSi9;dAnNcf%| XҟØP-şsn"b'ʨQNUYyyvhMOMcfm1wv~ uZ,~ IDATFv&:mN`@=;İD|\\(IJlBaffs}$ղxb6l5}[vA"tqaѶNƲ$fr\v zgD9;DxCv xmj,|4"61H1_D\HϺq.U=bD,b"b2p#e&w';̦iv03-;@d0/v%ސb^㈘3;dD*K:6mf\1vIcfF| RҍajdܶYY0#_Md6x͎fg;̠Bf]rxvIbDb"߁f瘄=uj84"0FwFş$)$lܐ̬Ev$&=`D?;xECD eԬW=SFnVR;7">8j$]LY|7"@9 _3;$2;)Y5{7pbDd<"b8rQ`HCt!!~3038xU"bҜE(,o##"~kvܚ`5~o}܌Y8:":y܌oY&1b.ݳLDo(gEV׭`q;dz%xFImbV?sӦhDGQml׻Wӣk`jvIz5[88"Qˮc :vo=CDPkv>DzCL&;@, <".]pFā-3ƈwHVI:4".ty%ĬCjc2QIKR.Rr<9̲E”b'L#-Tr9"~"@͗.tQv9ID'Tb"I5M)7Yc/"q`Et x/HĬ$Sx9(1;4cΝNXXml͈"h؈oVx)/|/E)zn,.0K^'ӚjP:GPFP:^TӉ( >@xE` WfNKywA\00/0%)ņ_!.L5c~ ̬On) fw&u"FDKY RT~RYr`s[r& "EG'(cL~of?BQ5YL NHztet,r^x/JX녛[XXX%̜;C\ 1qv.@DrenVXr6 ƛ[g:8YiL ;Ȩq$针ݭF8xW uљC Ȓ-,??_0,)@̴](e3tgZ0;@Ǹcu8۵>pEs6if)",/ܖk~\ xEs[-m5IOgYDDhv6l$;jf'()~V3fRFGJQ_;诇hط3)]f.ؤHz&"?,Ceژcצ0m4SE eCظlo%)1a`WIc6<(ss:ftv] 'ퟕ"b`!;D-J٤lb3Oǔ?ggnsMҩXl.6 f#gdVS :dʹnf֌|v wCXϾ뉤[d3a撮b6ŽlwD,cYo]vcv7f9j9kv.g77C̬M>"iOt?6i7#߬W5ZK9:e3>rdYxQ'I l$lܕ x߹SnS.ʫdY.;U':d ^^=|$;MOO-p&E9s.bf#2`Ie1H#pAv7H,V`Uy8<;8wǾY?_FwÅM̗%9S1I&j!fM[-)gl ۑk[4vֳKaϲ*jF^ۀstǾY4g|gm|.+;.88)9?pBғ^ql40xDzØ٘.av# ݋Qwx=avX>"a!\ziFr>F;U7.ѣ)smr:+CX}޺EosXOikfqN(z`3IGe1t,e4J3CIw7R+,,stj??ܔZa/!l> ify?6:33H2;C!l~JU0?!o6߭odc}'>`G,*ga!fs9l$cyFc#IWd0N١}nfi/;H_u1lvk;/ffj[ĝ?6XO[] GKM?6Pv3aVXtt+{E|qvݹcffff_,#0` Oru~lV>_$݁e"bm|ȯr s]v.I_1^)=ltIed CD@ғj\]AcCTl}M[)}W[3~b=C9q t]{X=;و𢭙M#"bU,# `/I7.?63I7;HIxezy*&pqv>I'Fbyl`NvBkޛ<9Ψ xK&%=SiɦSoafff'iJD< |PvzכHpܦQэ:{nG"b'`|~]FR75Mމ镋?6TKQd{]']Iwik/{>G_cffff$ Mf#W^`/`kI_>l+w4?}WvathvcC')$l LMcseA$=@yo(;K&iIW~q6!.Y:I?-=;K֑tAv#|vKϒXvak @;Rvci$ LKcyrKmr$l vQ^/בtߝ?fffffӓt6e)Y*s2e4#h X:;:} $lO*Y[""aK^M98`]IS$hglHy;?Y*,p0% jt=sZ)^ 87HNC0m`Fy [K6;LH:ؐc֊ÝmIXҫe籙xsz"YICbY{2w=It Xs k?ffff*̿fisJRҩ _?6zn[Gn|r67k IRF})9W֗0V?I?^\wC0;rZ⏙ˀ-$,j`2PI";岳 o(c֤ _ (1MܣIcÒm$={q {ʡJz"9,I dX x7QjnrȡFs݆kֈx02F~ 8Eu(̪ Qf:9N\KY,JDl_%8/Q@kNw[ XX__3ES%="bcG CϛvoICXD.4~p_>cFJVYyٰ?~!< "^\'ffffVXRڃQ.t"\gܚ %ǸMz1bs[ XqگW7n!#Ɇ)-v=A92J/]_$4) RZ!7Q+J`p[JD,,cKd"bcN3QS|tGnY9)Scffff|ޘґ=7ongR NcC͖)Ls[Xq-nnt]FYԣu'"X"5?z2:~gs3ΠQ[O8lϣR4n77&xTI'ΨXوh_r wMՔs$3įojk5m~`skE ̖3ƨ$'%=I~>̞$3v{kC01Jrjn7S`~? H$?tgW!|}Aw,LM؅+ ?<8KhI.KE-IZUCqPU]$~y1$ySw3/s`?~=VՅy,1Ʒ'y_Gw+g'yfUXrUu};ؕX:5)Ⱦ$ϫۻC`$`^^UuG3`1-lIXUwXQUuEWvw9I?KrA'v$9< he7$W%ytw˚;oI^ݱ$yAw@bISݱFm`2MrMnY3]Up&d$ܘU; } M5/ɱ``z^kUuYw &hqt$yXwD]IU;pNUIcKrXVW$`wXUvG۾1zg$?PUwoÄUեI^1Xv&hwzYJKm` 1~2y5S%zw7wwIoV$tRU]Unkd3IX!7%UN3cE$'~U1$6c[)U2cKlOשׁ.}wI^jV?ߟ$Gu,KHUpTU]%? ?*s+\䫺[IU[a578>;$Y?s7$X/3S1I.—'yBUحuF/p"'с$i I2xLGU]x؁1Ʒ'$nguG̃?穪드1'~w8<1W'1ɣ[fUu|w8<ړ53$'vG̓x0Dw<#IcFnKy3 I>1'Vէ#歺7$uwG|WU};`ޜRU=%R.d$tweIPU;`.Lrvw'-cUՓ#`˪$twlt,ڪ|zX+tEsؖ?? yWU=;?m9Aԫ=Uuaw@#UI.xƟu$guGt2/I>q?в,nLrZw@7[oM$݌?Tվ$'5gܙ KI6^uUuOص+ɛ.7]`YyMgnn.R23QUKΆKe5.zTU &R3t^x-Z+LU$oXnKr2?\o\`mΗٟsJ29YUuӜ?U{\3K8p`^<5szog?Lړ9af~TՇfb$~0I`n6I1,0o49{L4Ո0i`j$9mosoAE3jLJ&]U]]nO (;mۧ;)3rܹUuLK&,EIn;}!Sf$y6ؾ$g!`?"_XUϥ`?";}xS?dIr69j*hnuyLX?T՘k E:ou[8XO0>TULta?`B?@ß 1m$KAlv.nǟ$HgnƪZ0M?ggTn}[b}>Z0UUݞ80`| image/svg+xml astroid-0.14/ui/icons/icon_color.png000066400000000000000000000423031335422170400174720ustar00rootroot00000000000000PNG  IHDRxsBIT|d pHYsA*A*etEXtSoftwarewww.inkscape.org<DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/4.0/i] IDATxy|T$aukKEJ6]RLZh6ڪm->fjHTAJ dCH&V֪uðd9"J~>>BΫ"yp`^8 "u^2;" Ճ8T:lddDdO%8A")"rEu!Dd;D>8Yw D>.O"R=D "hOq )("@S=D>ȧz<@W|  9cB "@C'0{(8PTqʇT"ȇ?{qOD8n"R^ ٟk(=u%p83`Eг{1/͹۲;D>pwMk$"gigD8Sgt"gBDvx L8_3}aw,(@#N`X>}/v(}q A'WJa2S"Qhѧw3BDx O|d|/uguD" = @ 7zfz"A D~8DKF @9 wKn{|_8ʼnl!"o@*E]Ro$Js/;\z{_oј+o_j"w]B :zQr89Q\2ߣDwQ{2[]ű旿."46_qƻQSAf/yO#꾆]Q*;ED4T/ "DiK+PN!Q@ȉ×:iʊuc8!PLQED=431 j/ApD.GD4ĮKDwg@4(ݨ~;_I$"SHn>@~ܿbJuyqDdQQV¾Dt(M>P?N{L!z!#N'$Qp{bHъ~}"J"D頪o&0,D1@́I8QI8%t zu%cQ"@75\3>I]qoUnL(@\E׹6#Q ?2 Ocѓ UQp(]1uD' JQ'gz;2J JtWODCv?dj;'!Q :m1]=;=8efd1w[D4@ JA{3#ޞ#h@b|-}>p'lC@bz*8,*(p(L@nϻ]p;C@Bbc\a;RwRDe#%%GZ|3_":8.̞"iT `uAt%:O$>@_E5":8yܔ5ǻQ ˺br"-jBD;DQ!Rg[GѧMOv `2P-h/h 9? P "@Q9_<=={E݅Dt`HUT_C%dڪu}"n3;Lt{oM "8# ֎օm#)TW";y̰.܀Y@Qub]AD;D2a)1q"2[̅H"ڇ;DgHUUCf$򈜆sgݑ({ ;h =ڹ- d:/)}:@{s õ'D"sE5 $L*lBg 2AGݛ#pW\baƺ+#|n;8c[;DF2z >]@HoϬ;;DkgpB/(XeA7ClWߚSԂ}&P?N{ZL*}:(Qh .tXR Qp +:Ϻ#).^Q{uQ:$M4D 5D?ҫuT>eBʸ@4˖H\)Y>-\=:(q /8:o(2Zw2D+BRX[iAx L ׌l0ƺJ#!D;D4~Y1H\`+OxvuQ@4@#:G )7' 뒛#R O @NҹguHWDQ?e(!-t@HɢCRO  i-_k3Q?ޮit2A4~@u%9ZGydO1%\;UiBbN1"@ & -4p ;[`ZuuF0,>0_Dtw\fZw)[3Xw|LQʎ"/@Sjs\A-W-*!  sw\QT˾!D^.ꍮpu %̱ۻr[C踌_mA W0sTup n'@[wPrtan;"@ ;U-Tm/){: )S]6c[.GQ ρR 8Vu Q"q6%\پ{[PJgP!Ds& } -[Ǻ{aB4(圶|X Z 8NX J)3ݫ:ͺO~l_5M)i{sE-D% Ɋ>0~Y-DR¼p8\+-DgyוּU|}];PbBtq5|y!%ϛS\jA_B/Yw* 7mɟqj pJ+$& x@iI[hJq{,)DҖ8ԺR1j)DX%=gxۺRcFU\)]qҞn(:.8ںRMtuQ"qҞhچ( xٺ3HdBB!Jn4/Zw$|y@L@"-=?׷2ZKNUrkD!:zd[s7Icu՟lB' .Fυ^>z7_n 7w.7-4ougI !ܘX{όp8mOQp܆yn@8>Umqĭ=º/sx"P0}1I?.0:[M8Q~*`YGLE[n4;GnD?B_ź$nQ6S KO79>3-_>&'\w~^x 15َ@@u xjY X㔣D9 uddk'tetoU,U<@|-?nxuYn( Mλ)A.v ڋD4S[LwYAJ~yY3/!- ʓnuʺ[PrpHs@Ncݍ =N@Ja]t8&ϔӞx:y,^>TLq\ncv )8iTz%~t_f]|8U RCzϓӟ:+p܇#y*ƺJi*nj4=)/j];H;R`au hKQxb'tɋ{aC 6Vh[`62H_ -i^t;se.Ж!5Oف,oLOȌpxxvc ˺' {R>3! pe.O,.1w" C^ 21"κoC5EN%RpHSugn+i6iSQ) WAe.Ol/S/t7NhC,n @NC.8}-v{[Bq*Z}j1) pN$MZ-&DPࢬhƚ":)lƒskݰ|oRb-zK@9->7yVMU'l@8'skx@js ̷nI96kKDgxۺŇ$!muKav>s148RPnnQU[  <9! 3"[H r_uhx^m3uK 0mnк@ vOaߨj5*:N[fy$Ѵ ;->h[uL|@ab0gτu^;v1nu ;~XNcݍ#übUZtuHBSV떴 ǹ@c9#1fop GӼ@05pcG=˟_huȗ׽Hĺ%ȌukC@=k,Fu=[<* /ꮖhCUU9ku0:'dBֶ! mo͆i4.Dϕ6C<5F5 c9>c׊2{RH:m)*)lyYZ,̒gS@:8z_nI!EpS)L-wY>ekp,նC@fۅxܺ%8״ٺ8z:un:LYYs|NQQ 5ekqvO\d;R(y[Es7u[`3w>"˽_f No Yu]%-EAST?GvܒXwuL S=:v>Bq>4}1)C\ @[K"o2}cu h[et#9U;:&]qYkk]/@u:"IJЧuHY nIۑ|7j[b(~ڏ₀rk&|2jq)Nn{/!ztD{hS'K!ruK$MW{fo)w? l7d51`=Kiu<#=oH%ope.n떄PAMC3+HS6`k9@sWa`ƒWD (Ug[>KЌ5Tx5:FnҶ]Po&,mEWCuJSo9kDbO5?O-> Ѕ!b~a LA@kgKޓ_j^ށzV~O ֢%AbY8WF5i}JEW2L^z" A(0K ԺhN\p+y }R\̶Om??; _T9 "&͡ʍaI&kPAY*z6&()'qSEgye9t `ݵe߼̢m [TnpԹ!v;G!X 60w; I01Q:t8KTuC Vt^+MiK\V@1_ljʭ[l P\ENC蚮̌'=uzDto`U) E >P׶$)hZͳ·>}ۓHAc]@uP,n!J:,RȢިX٤pۃc[6^xO7`b8vž L4r{pr'!PyLۊH^Su[-3RٺtL|^(Zy`* @e7־퀴j!/Qm zz P_?ltaqzܱ GƹpqUXv(d{P-7caWeƺ51^Y@6|9-D@C'pЩ9@_B^qWWN7ىg]μp80:s5d@LuUp=ao@ Fu[x5 #W?`  B$qEED@PE0l!N3+Bi1G $@[ <. ^.͉Y> tTMb/f9cwlb}m+a s'Drȁiw/!G4hka7ecA[1@DSI!ioF`S< ];g/x  #%JQ@괵p7:&(yЉ-DD Fe&` ߮zɿ@`Xٮ9{IE[2%cA[8}/X 'wMy𤟯|Uxx, jkgDЖ @t XyUtŞ{{i5V!mGe^8\)Q:["KCA OGY%9UceݺUQ GmlX6Y]r^!s V43k]/\0 < 3-DID~Vl:@<5|; މC3| E fFP+V4Z:ߐjepշ082 gϺ@is0Zx H/D!PxIoо)WXX \ 8h=OYuo[|mM@oOQzx]XJZ ^\ ub uT:c`*2&m?K Z_ٟ-F8@QyJHC[Co:muet}S!,R)Z]_tlz:CpTתЛ:B必Fk7tO_q⊛Нq^3?<$YfQh̟?V^)./(XJ X`wG/b۬N6kIVl(߱j B->C/()_ֱIDp$>r}h `CQ=JH!"HH +m/X^N"wΜ։ܛB2XH,\Iw9pG *ObDOFCľkRM\wvGqٛCs~B=;;} eDtPP]CDȇ r^AO"P$T>rupXP'ܳw Xqtkgè$|(`n1^ 6(7HP ;)-eҨ-Eq;?y#] i һ*z! ?@?EB ))_8 =D"A\4/-u~U2/t*n{YD? 06/@Qvcͅr3n":Z4 =2{݀ jK\84}DqȵBe[ RGqŪ3 =6Epiˬ~S['jk}Uw`k(+=? XwA>ikj@o%oû%6Php\ E7ȶBUq1w[*&s/Y7G|-EoB8}ȣ\(~ݝ sc8PȶWO{=D@=FSL{"lRW"% xrCewFřůTDD^wFc~1醧dk j]D&"!"}{eovX)$ئP3j >M`^t gGBe-Ui8$P'nP&xҺȃziٛXO$KճrWWOn""pQ_ɺOl"*qq>hCDd O1#+'wl_:6SfDD46q7uOqX{IŊX̝w Q_-c;wgOwnK+d]B򕚑1Q m;1}jvC)@D*zGbu#xTGI2ql[! MQ]*A<}~mVt[).AUܢm!" ŝړ^\jC@(زsO`7o$"y#%;,mC (-(.{.7{ǣL=j]B *\n!"_ ȶW{:\V&T^Q{7 &"M !48He"E])uJtpOm@ lBDim^).Z%[pHCwFBe%P\>3yW:BXP|pH'"))䁧(NZs3mstu 4QR\wFKn!%]1_ s zuљK[(183Wܤ"gx:R4ڕ U))W|bBD~=BFqik!\|칀3yʺL>R\~ņPhu %4ݣwPoBDI9/R\qus}b=DpUlu@PٝξպC=#Tݺq*[ ln!R@nڅCwZǐ7[|6@03Xq{I  ֢D49)h}:|q ""!^Ev?85Du׈uсLgiv ̺hb=[. &Um|:h#ruZcB48< .UȻD2JN!rkrC> O /b׽PgBtPv}KsN!4(%L 3y?X}'G 6B{C=;[>NlӺ?x 4Y'FpTJ9-_>+{ /Y3\Vu@p@8q0պ|`0Z!(~I;K-[%z&JU^z (򕝱[GR*Pˮ8u ^.O͎͡]-bPH:h8PZ*[bQJ[*WFJ*!6:B?:Jr*J(v7R\DNGru}$-x X%Vpu -nhWSJK(7 @u Wo_uQp7ڣ]O8ƺRB(TR!J$^HioUb[b*?򅎒D@̺ջT܋xǺ,o!D^St*_V-4 K:BXGyz_**uq ꇾ'>nASTo?i=KMnUu:J*!J -U){ o.@4+)#G UfAJ8 PǶWc@huQ5D}åw[|7sruQ t]#w A*[huoaA8 Adk?uDouQ*5DC4%\YW->WO̯dBʸ@4DBeb!>}. \QDJS2#8`=[;N'WxQp ]@uK:՛.uQ@G%e)4DQul{F[w?GEYGH':X8WE=iBn@ʗzuG9@ wCѺ#=soDQugf\ uwvY+D ܅>~DG[. JgtZw t/t( 5޲HܲZ;DIow;N9TѺ8%I{ :/8%j[wx A'JDIi~"ĺÃn[#Q+]Pk$@l" qe "_\iA7 t*_PeaO"eZW"#'[r]dAWb\ "X޳ +D6/;N>n "?@d;#}ޱH"W\:uq 2܅8 ItG{I#o{i(*NwFOgq *W\@Zo /]D#痵)duG>#hD^>eA.D*_HE"|U &M+q J[uG?{`AD((-rD=`~ @"ѿXGQp J+B(~bI;;8/:hq;L'oW$-D)dE(ʍKJ߷ @b;{xٺ#>Eo @b6.^ ࿬;>$m/="D)hl`lAD(4noܱ)TW"8D)݁jWnx|"D)jGiin]T7/D44RX]w ݭN 5t.$4FB p" DzPunK(8ů@${8{$T#^h`ZĀE X Z|À Z ivTB6*&{x Mڼsf3s<ǜ=F IDATP+כ̚ @m@LQHEP?W@"J`/@=@".+T[iv4$Z:jgNQ@ !T-\=rruDCJ{VCMqtyN K?zH㥂ޭpz{U0@SB5:, H܋^]HHs $X_=+im%ც0X@/$ X8;:X]G H۵Aٮ| a'wVê08@:cc2;Uߪ etkL$$”gu`0]mߕWtgtVm  cvm.b7ϜQҡGL5±@\~A#+T(S&-GS)S4Zp8k4 p*[_eC9'SyoXb N^9؋xx P?bIENDB`astroid-0.14/ui/icons/icon_color.svg000066400000000000000000000100431335422170400175010ustar00rootroot00000000000000 image/svg+xml astroid-0.14/ui/icons/icon_white.png000066400000000000000000000625421335422170400175030ustar00rootroot00000000000000PNG  IHDRx pHYsIIeIDATx f@TV\E\P"b+FEqWw51bL\ FDv;30}.< 3so:lVQnaWeR[5/`k&e45i_@y@n݂kdo@t1(--H4i$X`A`rpg4k,Z=2: M6:&fR wLom&MaZn f֎3^@|Jlw@2i$k{3տn&59? K.;Z[b^ Ǩ]vb )ڦO 2bL9˵P䪘pI3 rذas<3j~߉ d)~[ߟ)ϔ0oGYNZ>+~6} YGa%δp֬Y@QQQ0{lpUe.3'Nfԩj_fϚw&O\o *^;ZB]2 v|^;{~v~G@U|AAAp~V:!~~W% (,,gy&Z+я7;{|ڵ6g+ ,;wyQXp~wٲe/~(%0΀YGm闔OYq& {@ /@=[Gv[zu#7.hҤ ـVRڵ &LyRc}NUVEã ÑpgGJ)+MT(_v8(k)2( ѿHêM3 ` j];Ӕê3pC2e{{0  [|4+;rHWZZZڵ ElTb i߾}r򶶇3d{= CWWe0a`G3Aԭ[7vZ955}gLh{ Cъ&l@2~VuLN6Žr W{ g>tm?n9/{u!F17wߤ&oe^L do La_V^lg?j_s3YYY]S=;,}&G5Daaa_~h֪oYX .gl!@<_W1+ޅ }V h.9O>WYe[gX~ʕ+&gD)Bxr2dH``ժUoj23)od{}>sk4N?hE.l mǹ'"FGֹPZZV/b.ORg|dM gpGydt=$W}kY< w  (o˖-cFk֬^SΥi0}nK<7.hѢVBJ7)adZ P^(_iiTg>AעkQVN4y=L?LA>u/[d+_ŀw[Dעk}۶m}kharEפk#v>h˽khfF&][Z` wz9s?naJaCפk5ZBɓf?0mTk5Ư6_rN]fv-5uеu <]!%3 ҵ gqFxb_dj)|']UPEL {7|s|IIwtͺv}">n* UXhZk@";cƌ WXjgZkֵ; P| }Nխf0̤; /@hҤIODl5WB]@]CvM?V[m Z[mf=|b2+aڴiQ?S[: 2rC6?':u/vOc'w(.S;CIsn`ֿ)Oo ';l}'}7TRwߍVn|/yYl,39ɾJGMȿ ~̘1ïPwxپK[}3g{3 +⧞z*Ha#]4C0o޼юٳgGVm^#\5WX VʙhѢxuқaaF s 8 }7HG/ÔaZ>E; VʎףGh/h#*v1i>`sΉVīWe&sEa#UPY=9,7e}T}C d>nwߍαMf2M>Tdԧ>|SN9%;wnȔc> xR} QT:thϝ_LŸ-bo|`% :1 3ٴRŻ+9R t"k/Pc:+()))m\R#@mawy hZ^Oskrd V +CK ߗ1΃Vϭ-vFf )'1޳>>@}>W 8r@3fLn#hWCL!CG(Je !wygt?p yǣ42TtsژgΜɡf0aBt_G'=,- G}g@~|xS@5֢kM4 hkYN 6 xhoJ2ԙk E[K0|n f㷕~:p }Dr Lv4Š"?dMex_t=׽X  aMxE`ʡ&ѓ`Ig19O3hР?;mUx)eȜgvϛk h,?ce˖EZZ{ɷƼAh h,hL` ,Y&Ѷ"N̻J|ƀƂƄƆ S @o\2Z;忧)# #~@#n[jm+m`_?D$2Y?=餓~kKPDXxN2 8 R~ꩧƓ45d|dfl1#SN9# WgqFKJJ6Ik ahdMVm{}G:2 ϴR_cFcGc# [#Frw+L>@ 6fjih i,d>Aiii$Nog*F|b;~iLd/** N>H^+6ZM4Y&>4402%mѤܾ}V jm֖`3wu"11F @2q٤&{MV`3Q6:c159rd*_ !~`ˑ[v>QZ|@ )QFmdCwA5Mֶs5ohBV!L~j 6.1i1F|z믿>y6 ]fh $$]@X_<2@c# A|&K/4x&YC馱11PM/8V77QKf>7ۤ ،U& V`ݭ}d jwl 74Fjk&?BA ! cScUcVc6XLlMmrt0%&1X]D|˽Wߡ!.66wX՘a"JsѶ[hr.Lbc6F[ijjj (P[o5W^f-276ﷶh 4lF_:JSRRR&Ӌ*݊ )njcXcWc8> ;rKwҥNl]av6q෿m *T9{gyfpiE-d11%SAlV PI@MRXX}QGRǖ0[mUԶh"AiӦAIIIj*uM H5J#[54 kzd+1&CjLNq@;͚5c&eEku=kY;=2Jmkad ӧOPZZd]&stl&e6~oYVV:bjҤ sSNUVV\wAAA7XdI M$>]bm5kDAΝY@n!M>I,^8&}m2aZTe6^`mիWG޼yAnݢ-FSϴ y^ֻzGqDpiÆ 8x#F1+VN&o`#|k/^zU02l1` a2x`p7G 3F?/**ʚ䍀FN΁KF&ks1Ѥv߻w J(?>馛믿>=߃ @W3O)IO˖-+P;~0dݯ_XWė&LZW٢ĉHc:X%t=ꫯaʕъ^gn?>Yt~c>ƂVYԏ]v0ov/_f`!,'0 fv -Z kZzI5!#78`gF_*oc3#%ٱchdv;ٳ}u7('9s;s_YFi&F4&ahBmݺu$ZtZ E[ɨUr=McAcB#~$5&ƟIu1smqG{C?]tI='h@` ķĕ0]'6צMKwyHC=4Zx'/_WF%o͉ I|@Fu20R&~wdvܹs7k_V Oj@+:4Q]tƅ.]0/&Ir^d{IR_xјw)g%&w[?t@뮉>FVY&[MIl~>}k6:th2IXu5I>}nr&SL_c!1W_~Wj|kiӳ@&3g&iw!RkCnhL :FPȡ =3]^dng;teΡ=>Ƥ+<ǿ/Seg0D9QO>=3Hx^}66[dkhb!-38#Q#93@ڙ # &^'W}&|h‘5dx>q b$7cƌA:@UyfkpNV،F@,ʻПI;`+v=2;s=kؽ-Y|a!!Còc19cmo`LfVgZq O>9՝o#z2O~#546|9_N$1Xlz}U!MwU:;-_~e# T>ܦ]v-FM8+2.L V= ?n.ZgРA~yꩧF+?Ȯe *P{wT۷oZV{~g}qU۔1 K#//|u`-؂cX1_^]S"dRՇQN:YN^2b]uf֢Ӻ_j-RڊXXhQpaEk]8Lncq?uӥ2ᄅ'AXq#FiaPkg$9f;Q^wpI'8N9Q;\e 6Jgٲe﫱~^[@+`3K1[`mxA]`Jҧ$3jԨʥC+7yjč㔭̟6,mFߕq *|I&ͼ7 7n$u5b]D9n@|c}q]׬Y smD *W>=\GY4pJuGVI*Q¾1bk\DRg~,XEᖗ<0\ {;i#9)'CWkڮ6b8W8XҘrʿ+]R _/ rWuYS8u_ o+~=U3Q8љ.I7 $~l|tŃNK䍷VvME}o}U6Cl/ =*UV_Gw co>߷~pi&޽{&m-ɉ7 7(4}ig?YRr+F.TͺkJ3@B?vv:X\5W滫;&Ks@ͅ UӧOJLf@Ly62hƎRRgIN\>[^OմAeeևU"ޕj@(uB vUs0VAsĤj֠nܸqT'ފ+9[XeYl>m qVxI)3Skinj =\}r ;wR2W-^dIpvf3qG2L55{X[ۯwIĕ2UPyiؙg|h}}v|Ds'@VYׯ;6oS Ż<19dD[NV_;^qɡLǁ}~}_b*(uʿB?+Y_iRǾvMstᕽ>xC@sRͩ>TRÐQY*mg@Ұgk3)j<5 m<.LI<.'~&'Nc`w|e|K5Ɵ+ Uf_"弿l[ JLgMyy*ValJ\(&: CʴN'xN9LFtP;Bj^?/i5^vFD~_ P`Pf?:I)~5e$^j" |͋TRu%zv'Y;`t23KAHmc=6S1&ڲjcp]iU:C'MvW_}t;_~Xsr.MjrIC%9x„ ќ\y֭ۦMzg\kg9= huaukzs O~B~oDҷ9uci4N>>[ιX;($sݷzfμ57k^ +8ӦM ԀsvC{}Sri&ݿ4H.hkWWssqm۶]V{{{VJ+Lʈ锺BQY܏)h~t 4ZjL: m&%  }JJ[BམGOA5-UN_5]ϱaZ[Ǯ R[fTâlݚ7ѣG3sB/*3ڜoMޗGdi:^{m"BO O3XύwwLWޅߗΖ[(`Y4jp徸΂Pa+7%;R[5j0?<phkOI$J!Zf;M_dݒV~r= c:ZY{3JB DmotZ;yLX~U!}T^lVDA~}%~$إ^,xgN.ww$'j ӤV-u3 >(;Q$yJ .Lj֧d+4~;qΜ9An }Jx#Mj<&2I}-?U1UY/c2a,o8ڎ6>8;9HIZ~a>G'X;oUco*Lⷳϟt%>IF>Q d`?)wa +$Wymkle1s,\c醍" g-[V!xn@V ,qgS o>Q#O@L]ϻZ~bMǙ_k3?5%>읩hR" !](8EgpНv)U->$KjS s,@"|gcp]ᘔСCWrF'+5 cYIkJZ>WݻwsZ3-Q5JQckXΐy||2t_yQ~c$ &ۙe  M@W4:oc=]V83n69DG0͡~{udGΐUs dC_岼g}vp>ͯX3kYcl L5il}I{UWC5 P3Re?U][y_}ڮd,OcrAx@:EE:&> #4'vm5) nn_ו -[S7[L/LIWx(M&W3]S_u߅B|ǎC1y)N ;0yƷFdv#ozUC+?jߋ{O>|W Q7P01gqnq'Ew=Q#߇x!gtwizɭ gZcTM/=9f.@f35tJ ?BO=TЬYQteՠ4*osV.˻>9}rƏ,oMĠ9%X9D0Vvv{߿ggq]v =ܮeZ! ui_ k[W裏zktyZz'g JOiS|t̲ W 6WZv)Q#o9^r%Su%Tk[s}EX>W9,1{?RI:JtS߹SIYx=ָ]*E 1`6>)s9眳Aݙں䠶O~)ՆbM؃l[ g>D/zqOzk址 u~]_tJ}+|srt`6 MmcAk/{}=W+GHn\ukk~ =ߗX=ir3ØlH}>[mvK+JFΰkZ Ov WV(ꣾQ7ʸ.q?,5h0Ӂ ҕq3$rߐlСC?8>}z~'?pP29:WnkpR 9Ї )݇&uw wǣ's@[[GS>_lr[A2Zw?cfi;X,q*])!ƛf(QӦMVҲe˨ŬX"*6Vt+4f?UR(| |0rU~~Z QF Zq=ēe)\_%ŪY:zW?$?Q}[]("=x?{6isC:Wdɒ4iR[jUAgKomUnݺE|}H%Q.=lmU_=wU5tt_mvU23TqҬ5hi *ehϲgkI;fNW "'L|[Mzdtkp]"dPa`l2ybm+e̘1#e$رc78gI+DIQx߶nR˷9H56kkoդ(vIkN&L2to&|>006Y+;C O⿓ʿW^y'A߅ñ[r(\~[9\_pGZ;&M~#zPUq&Obk4Q1 00^{O6-rM2vґXU6Y3~k-,57T|j2d H(;(v?'@965RhхR`|R>,dIRxgBIc}ߎ<^s#Çl\d^G& L6 00@y:/++kl֤\d#o홐MoSy³|_w!XtiOj_he!s2{?`Z.2ĥN|T(OW^y%ҟU)TٺqŀڃFU~!\ո1gFֶYf%"a׮]g… &&6cW%η,irAx]wUڐJJ!nХ&LwG,bv~@&:wL:5X  OP7Lƚ<ת\X =*ϬuRq8c9; 6,8ha:Pv~ցY;1$ Yi~k[ C M6Q?fcIצk^@lim/a +7#}'W9OlwݬW~/;IUju5  G)q>T04i$-6]c}9 W1.1iSAޑ~kݺza^3Uhl߾}Ю]+H UA?o9`d1%6P#_RA?@n*~ecVy:#=&#=o#z|t e_}Ul1N  ;xO 7<u-Aům YV\IG?>YP߲Ɖ/SVy?W洙Suk9@i'ns kk:8\w Z;ڟŝfΜ~l{O>Y]nGeNl7KD@/|7 >)w/uxGUo-Vd^G}4J ~HHL^ ŝb`d*Jv5D'h\= @_<}-Wq4HHYsǦBe Ϋ@:Na`d+yu-b5!æ`=ڻMc``lJn5mn߿;SҎꇬ瞫`+N!OMi"ί?J{,hmeڵ ڎ&u'DsJ9I`A@j9$a00~DOf BLT["oE3&/YT 10`hQeͻ{[o5a?@B`B]! xt (mflo%$ y茀p^m':b`Đ[6ں^/ ~_sNG'N'k%FC{}|~G ꩧRu]u=]Qy}lm>dܸqϢt/@ ZY*Eu[&_b`l"CX3<?R:'?@ o7ni|eA kyX~K/[o5.@43k֬xŰ0Xfĝֶ-++S`ɒ%?N:rbԩܹsSֶwU 0a5/^3gB2|GUV3Rika`-%;VwnӧW8lH / 6_@׮]<7!x#ɓ0r[m9Aa~#4WT>N,7vu`ʕ+}1Wo1a6  )Hȑr5/ pF@+{}s0r(Mkvk޿`} cFt3{dP ' r }f{v)hڴi788!vߜ9sŋ [Uu1r k-gD>+@JKK[,_G1j縻O?*޽;~|O{lW\Ti1>~$XlYZ ,7o^>Dy?@'A7|spGrM7|0һV0浣~S@6 @z svZ0lذ=#~;@he 2 0cnj֭[GGk֬cmW$',3gwd˰-@6m% Lj!HKl$Pc4o<*SG-gA@nHA*  6 -Z 9+Pm&KI-)Zc*ѨQ4(׮]3L.F,6J4n8RWV&_Y(NVݘ8T(뮻D6et dm>n.n,Gc[c6^lŚט V[uԉ^7&NɃ6Y xޤgX# 7n\4YFNM׸XFTZjEフ+Wz#SPog_|1õk#`֬YPVV& B&=7ߜM@[[n%PWZL:#57mL3)XSc6nzUWŝeoP+wl,¨+㉂ lڿU@QR>яh|\|q#@y3y]i[Lx寱P;^zi8V`2X%: šmIV CO R֒2VH9Զ?' MF_cFȑ#ڄ+kCw<O$Tck( ]]r%AnorVo0LMTܧƔL. c2袋X>ẌmA.o߾}T6 M.2mlƚ=l t'G/Rd2>|x$H⌀6Z**ǑƔ@d F#~&g٘1$%FxDy8$y>Oc(> K38#-چ6_j7:E뿃1 YO=hBwd"t8VŌn#?S*!ҝN:)#M[ ݇ϟNd-o(sUVĮAvp]_/C߾}q՜&vrymf `*5'X11 >~,Y8#`SKQyUb ?@9`ٲeQ@gj A|?pGAXИQ#`РAr K3dVy4Pyw8p`0'Bp]tdä)ڴiX(..'#`ũkrx) ==>ƤH_;}ƂE Oc;JdA`}]s(E&ҥ @>#Es/v\tf8}gP˗?x@t5/|Z&7X̅YtŊ׳gO?|P0)u #kvf :ws(VZ~(--UѬU_XsӃ:9@J!)p̙Qh[54E!4Xhr+S@O#E1+ k&_S&w tLR$W*3gN`RlJҐc&I{J(>I)Vѭϛ&VKnƌAfX@Ր5ǘ0)0sڌӭ%M8f^hEO696Xik?VYc֭ꛢ%܌:/))K/ԯ_A 'NK% Z_^!fBO?t`?ѽ5R3Ɔ=)?+Es`6l<QngQ@RnrIʕ+#l=[DݺunH fM4 P}hU)C`„ ,T_b?]'ǿG}-H<ж3:NZN) b QJSNgfkJ+ts(mwy'93&^:)[]N.DY_G}-0 x@ vW9EGS=:x@Z+LA 4E5 ]HhkxzE~q3gInGLBgW֗=#5|xYgE բKwy) PYOdmS\lWS_ HkQ@ѡC>49fRߢT O<1sJ@Fr)ܹsZR\QR}E@Rі鱎&o7/L>T cйB.M`SfUgeS?Jԧ[ c=Rdv5J[X]"+ԗNs=##Z=MzQ >+Tɩ2ާׯ,\00AgRAV[=hP}kӦ ]ڵkWnc֮Aׯw}(.ޗ$;C0eʔH)L\GQ|?d.@֭I&El\d!e+l}@}Rǭ{vŊj j??f7Q_ uQQQЩS_+gKv(Up_W}RYom&ߔLNc8ޮY׮@?@Q :BALN]:}kZkX^(w~,Ei&2t.Z>߿]643/^*[gI+]U E<ayt$qZ$vZgP)kj Zn״Mרk [ 0yh-EkQNMQvME6]#j >C9sh@LᾘtuM6]ji]+mX{b GDgv-2Fk_+T:So۶!оwdRkҵqq=ڒ[{u-&H9iI7Wkh8$2Į*׵Ui(W?] {׫N,$)i42Z -[ Ǝk֬ih+{MUܶ 7n\d{'^)PXnƥ>W^ D5 F%*--_]f$]? Gy$@UN?H;|ɒwn+)))g^ve!B4lV!C @Lf'tg3Hʹ/n/ r}  'pB0k,җ%KT'|}&%jyK`u{ox ;f #`+"d?k8 OA|DoYoU]VVV3f:w2>2QrS^X̨h,7ި`t@ Uܹs##dGS_W_i5Ф@ v|IIIt P^^ڇdﵓS,Ə)j[6bd hzO7d(Z;-0>wE nݺW\73}{ g>L?({=F#Lmm{D  9C"ڵkpMC2߻wYsWC ^ y睃{/*T^^))`|esVb Q>ѿ9VzڵOb/{7-z{@Z})sW,p=^k.0aB zMϩPj{F@]xڵkߩ"m G ~oz ,ٟwy˕@遏oY@aaas= ҍ(r{@((++;`7šBNo w|w3e2Wl?+|`ҥ~ Y3;97l0)Gg@M*\?C+V@mS' +gGi ,H"U z[`mB/ rXpfK*T M`ԏnw'rW -23u?@T<D^6 j4m-2 image/svg+xml astroid-0.14/ui/icons/vertical_color.png000066400000000000000000001432331335422170400203570ustar00rootroot00000000000000PNG  IHDR uvsBIT|d pHYsII$tEXtSoftwarewww.inkscape.org<DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/4.0/i] IDATx{\u}l6$p[0"`.%[6! @. rSZm}>G+XQd\(H䮢mV$|?Kߜ/39gΑ@5 xQPK;ncpS7T: W@$\*2P$\ :U@¹n@$ޡ.^H8^H:o)t(s& kP: g滦:I@ vu:I@ v5+pcd&i_y_P: o!iw @ o$ t@$l-8 tw] t@m9ݤkfۏ@T~vP$: fn蠀)H t!H{~@BM JJMb` tjUG]A $ 9EIJW_ns@r5_Dc!B@$P$y7`@/zw@B1H gP t zC|{I%@ OxL@ aܜQqeGLZ (: 3%k\ &7.5od`4fo;Oj$ ios#T: R%}ios@ a$7Y8~  @ A *,1$DCO1Y|rb%?:|5$E|D!f=@Ro)u$@ݻ˕?X{$i;^]~\r@0H{@s@0puf:~{|4᧔ Wعnl7{Jʃ@+9]jm{R`PO,Rtʌ@ˮi4qNs1`YͷvO+c2`P\:D5mlCzʏ@:-z,Pz t*ԄWtwC|͌>&(:ʽGթ?&(:iUpQvNsR1@Hgq]zWCܳk9@q7[GvRE`Pa{=Uۋ@q_X8`1 +tZƢ ]ۈ@-cٟr?j t*}zM醾Iz.TU}>i>Y@RDhr_6̘o@X)w}`vzJSO@a{fҥ1y^WSӪA:5KzW/1lHR*}s.l@ :3;/pƴ(UvjwN}BwCr2:!}(t$tp6 @-cܸo7!>tGܴ|T;:e(R;e@> IBwlbT3:e|}%?:j@L&Ru$QBqaPwKBwT?@bP㩺?Wu=$tqCܷWk{á;d2tՈ@ZҎ;Lm#6 tJ9_š;lyCGPmи}ZR}ֿT:%xc;$?7t$IMDτ0(;IٸT :%07+%;&+tՂ@ TR5W- @57Z:>tG(I]]HP wS\茠\MwF @qY.o}vv_$SέƶӴ l:\BwT AWb^]f @R1Q%إ+H":谸@. Qljvb&ܮT:a %;tG3}sMW:tI@`+uJ\WHC{fš#H:[gBw$ۮlgW:tG.c]@R0 iϊ۪m5Ž 쪞&IHE:J@GvT蔤r#ϝJ@ dn=ߤ;̾w @%c:^]CwT O1xQ$j.keCgPfqaRKL_q6:E0\9e焎1xA](L! WhE\s]:J@^Z]BwT;}0. @%"-,QC~ Q'睷1t#Hj{5;M+, @` i|Coe: tG14Ž05g$]FM)UPq*JG9Iu[j[{&@ԴiuxZgܴ|@Ԭτ$iG_ @H t@m4Q葴C޻sg :&5%.u*>o @ t@iw+Bw[*@ԜqOwK1t^L>wZ &Ԕ8wUd:t@hZ]݁DAW`215c"v ݁ckY)^ݡ;~=n'!GUqUlw\l+@TS'ڞX.ϝrcZ>*(wrb֡_}q{sUJk)+\+iF|C3(:*=̬|^}>shʁUiUBQIu[P?t!GU%rB8f ?:RcJT*I ݁23}"- @)q;j4ͿgMC(Bf=ݼ;t&~tBGP* t@6IzKL.؟;+t@$^?3 ;ssBwP,Ho6"iJcvЎ_-l/!f˷Tc8we6+CwP : R->_~j)s̾9a-ǡCV t@dZR%M ݂q۱ɥK7`[p; Q2+WNW*qwDl+: Q~%o}O#.H {6J>킟.`k0pXs:I;nAؿXwcKx3x f>olfӡ+ t@ś~%df7)=Q淈,癨pP];Ϳ.9Dq*tH q<%)6i-&-aO0)믖|^T/?5tS'#;P֧pwϸCx%:4}QI;nAU{jX}CNqTgWj1Q~s6mZ!wV*P:5lD~ك ݁Zc{*@cK7iG@m Lc%5u']!tvq; 97v4j1^v|Ck#ݦnTCB/;+۟h@bƹtZ)]:P:`5{wJJn^Ӟ.i,tp0nykAJsTDtぷ>t0iq}S[7:jW:`rĆtdS7s:`Rd. l PH{Y^ ,j}|yT7(jn9hPҴ-@~uuG=vτT/NqMӪ>G7qmcc;;Lt}C%:i+`J+7S2;=e @ubJ.{ @93BwhJ*ӟ;L+Bwe;]zCՃ(|OąP ~1Q8 (U}]ZsԎS)9r!@m͹=*"i-r5YX~IB(NWW4u]'in w_l@1E$?)t/k{/ ]H6.nC@?3/7t d[. T*Gϼ!aY69RnIG<'Cw䰸@*9zpwfJj& tVk{pCN x3ح#-2܎;%H#mX.* tjQ7H:,t (,t* tsݒ $IfOTT@ekr L tk(y 3 < ti;­F(_|*t0=e^@9xܢ'!UbjgT:@w,);B5bot Y5OӦߔtLbN_ HNql;|vInTӭ8l/O6Ls_'{CX~[80:\ t@<^ҾH-@_STH6NqW8hB7$-aB-kϗK[IeZ/aogWs^/=26~S莤2keS`\i-5IlA6k)t T :H=m&%:qI :{cݦLmC0Դ}}S3ޯUR{^)F:K2!Ud~ܺcbŒ ݂jeT[81tINo-d'ɬ=*t l:DiZgf HL0 d{}t~qwF IDATOtWT69v%ԌwI:&tKe=m@ܱHߕ!R,;|?'/[P5!]i]ZBTzs1[_3#t l-:׹+ݘutI&lG:Xf[H-H+uR3BKQVґ[*K}쪞-5*Zsܽ-w;H>>#:X |$nAbuY'CG [䝊Lsjƛ]+ۿq{DҾfKk|흡CeKoP݂Dq~&tH)ڎ)$#tKm9=AW:^@ř75]-n|= 7KQ4Cm!2[J-H .Bz[$sG{:Bka(/?x$]EQƇ;)kIUq2fBm0:|Y)[+i-UbHv_c>׵$Sc*F?wEqW&tKEVG:)kR[Pq6l pg>In2)>CpO6^ j tu;5sכi{ IhqCJچ?,%( NUqk>^PVCN[{|lS@bMuҙ[j4)k\JJ}Qv:|D߮-v-|8:@mcbI2q+,K)2>!`mu-Y m!#gȣՒn!&:at}P&]㪾?YIu{jTJ>nHR"icLNk~ tH)Ȃ %Nn Dlgx `K&<}dB}Kn'Hz!t &*v7XR[? mdWdM `RdVܳ1 aG:R ֶv#-(3ӏU(,y? R >ұLkTkTxDc{Q}'#.k_:m E't Rڇ#tH)hg$UŇdUhwg+v 1Q^S?*|Kޡ{f>6X:)Z,W[PrkX}?R,ww|An ݂7ᾤ~lƸݡSTĿ PWl۴N&N L%Xk:ӡSeȢIr[P?xxIJ=2ill;r1@I5ww5s]C`)CZ~(jTB׸򉣭߄)?\}^%-f&E6e|OkՇds\T=jCb %Ujmd}bkӌXҒ-( dOwJG*@њeAɜ Ç[w R,kO%=SB˿}t|VO ݂HܯfkZ;+ ks颩X?wl@U}'{qIl4>í Ce'ܱI;I7n$%~2tH)P;!qZ6[og+v  x ͽ˻dsݮ·$ ݃,ueCܬtVnq.ˬu?)l?DQF΄$/"7t @{Dd(t *[Ek|s^b&4|zBԨ γ/)jkVJ't *^~C6ڴ* g=rXR܍EVG:) jY{\Wn1%? ^Ю(O[P\'"={._\da8,K&;!ta[}!2[ILAZ>`oST3z 0H2qta]!ij$4#)kT*Xe~ :|ė-H,ln%; t5ϭ4{e:(tkdyxR+e$R12toR3j&O$9SƟj{/QkҙBtNTL}>!`-I-U ֺ!# .:Iu[l&ݍq@=a5(gf=lnWI1t>cCJZ~MfgKR~!XdÏ)Tn^ %R=箞ssgԐV-۟붨VУ\LHCJZ֮4IB$Ot<:|c\_(˦n2sC\ ttJg㞏ԏ4M%&2i=߬mNR䱧ڭ]R >IU*>fZn흡cL:P򽋟}fwϒv݃Zc_vO덵 .%ݒ& mB]#WS[P[u,D?@y% 6ƾmݒA s]otbYZE~߆nIN/_)KRtyԬ:.*{xC(:PeZbl>wu4Qx\һC$4p~|TEHүCTA6mG?C5iߧWI:?t .]17, ]@h)t\d$WB}W@n8;dcy<:X~4#Be1l>w_vUOS@@&sR/6mf Ç[ |bdLjStܟ/*)[7P={{1@l3h[d: tRG:X6n*P^_Mѩp`cbΝ5c] lHK=ll?:@x ȭ=t>؞+[}?Մ%{|oel[80:X>:WM)|[RK`M|Yڧ~/. @dV3+ RJtٸQ$` 53e[$%k-pkCbY-&tKٙZ?:|u4>$-@r3q1@+g=ҾJv2;޲}>Ԗ R,[8_l e~BܗLu^<:u t 97v=of׈a4#)-aB-CCl׋r;Zt}m;q>#t PAfT*z4 7{jD+l约nU{"Yއ;:Xfr ].[st Hh[ Zߝ3:0$h\7;]mcc?q\ j)|Ce&?[FYhRJv-@Blh?wn皮t 0Ё2VzT}́a]#R :xdBw!/e괖Cv\*yxlfZ3~{.Ǽʈ* 23oE^xTs$3P9"tH)XÒ [^*ڭe!#fU|d=˚j@JۿX߳$ύZT4 !Pj|t?'-k]/io%UŇ:@K+=ln%W~Jz@}/M'~5/tǎUfCHd+ߗO,#h2v|ACUlLR9u/v|պ/ $GЁnMٸ7|7: K4 _әu_V8UpNkq/IiG$.o6ӊ?{ܴ|M@R1ЁmpԵ^=^-%L 4p~|}bYmO$4Ê6..-a}zC5joɗxٸ7~c[!sh6ƺM?wn7n I:Y;/>:?W;%K{R6'9o?^힗$t M|CqvLL>w=&I3Bwx;}u)ŲAyHL³ݦMm o;];p䧄n\쮾 纳q-tP85x]6@RtRGˎwmXC>q\ߖG&αuYS6~K-L.l>=WzݔN=a@%a2qn}-ɿP=>~u *tL1eaoZmu]%m];%69D+lloqm*L\N/}NlS0 4:jAW6u|4w?W1ˁkT_;y? S khWZH:DehoO'I`^+%inmOEN_?-n~î{쎁] tԔwN1R/r) @,Zl{b؂pBYtwpWZ'K,zt`%3SsLvγy?"uu%CE`k1Q iɸ8ׅnPv!n=F S kOȣ]:Rvís% lcDzswrdss~Nwk5)0c}1Ű#~;u}kǬerM&l?DfwK't I+?MwIoUaI~v'udb5oOEр,8Z:ro|M籚R]#r]lCrMjkVdߖ[ELvL>7, 'y :v]/C'kՒ{,י:z,-fnP]Isl{I /!nᆤ`bͽ6Zej9"LnYMcaO6JS_m'6xWR'<45t D{KiG]>by?:x- tTU}&"odnjk}wqgr5E_`C_S kxrKj{e:W r;֮ V >Lĝ7+fInvYW?F|fE.=́X6ŮZQQ]#]ȏ="j9ǧȏr!V)©8ЉRD{^iK/CD^;~ÂxVHj)R3Nw{qm)gqStK-HqGj}jZiVED.%_N,%_v{"JwlM)ڜM9█|StKJc Ji w02r_`6zqGD~Ӿzʂo=Փjs~R#"] r~G,_KΗ1J# ?Zi5959*?_NicwEoe/Z<3G')r礈 jǤ.91){sTiEŪyU-׬X_:cSE"b]D{>Ɓ{UsRFċ">Ș_yy= 7ifq/>/*""]N:ʣ3".-"x>zNyҋSr});^]7|%_ҋtL/|c-@kHyyϻWs[(rlx>/I_#YDQ>Gxyļo{EzJ|vx-Gtt^8dQ tʊ#';"n)U,عdSF0_ӖY/:pטE[fU?/@M>ÈaD|&y^9""UЪs##SJq,YtL'˗Hx\+\"iq(@:|予߽K^:*("v-tݣV8/?߷(Ӊ/~vҹ-@G%"Vϭ*@T') IDATqvsWZ:g!@<9/K/(Ie)n:R+G\TZ11tt߲1"EIJ}䏢V.GF $NKV:՗#[M)foe:SFnɘ|Ͼ/R~kpx;DeyI]zf阒Z+t*G\?<];+RʥJ@WVߨtBDe,#̏HtH)E-9s#I@m顱N8c6j =,?14vʡs9f=~ O)MHkK7E/_{o)__~rcZǍ\hAK th~ƩI㘈t0r9/xν{mΑo/̹91)-geVLLl"WCD~A.` jǤ.nΙ􈁸OEH`N]rש3]3_ՇRzchbHqVDMA#cP:e{5{̏?8;Z/])Ί{KA1Сc9$"W!xyyy.SV>e;.wnjSD,)٨Ҩ_U:MǾMU)plav _*PE;w^g["e[{6Fc/@1hD-"e3Ы%?tȖ/=WE K#OF}>{aVGiGUy='w||W؈ "b-\{K#S{fCZUYըk)^f[~ZZ/yR__T]{nfW"Cc/nw3Сí]ZFP'F4/,>e=-yYDccCg&"Ka|/}//;`ظӕq\DlH^O)c@{'3s"‰tGG UOFJK/c~#[#KX W9>߬nM}1@oIMn.;" /"~*?!#R(ȲVW5JgChy욈8p3N>$EXD[K9'ЇV'G[YdInƩEp}l>25]/8&"n-}jCD>~=8]Jy:=|`No_V+quS t "~}S>[cMîHonG-tdoYh{E)"=cM)2΁.>h,͵xxe&sF}Cآn;4\.]ꞈ||u c9E:𐦆ǗZ՞Ҳ-eLg4OLsࡸ*\uɇH?,쎔qSG|*Rʥc&C_Ok{F"8RipϩI9-lU#wDg≥"xiCnswj>3">W@Ji`ql?'8d➈8~/.9;ժ#⩥`,E~T}J :0+\cZtE8m05154n :0k=K" H)i>!@oq̺C枑㳥[`Vwh7΁hq>*Gn7G}أӀvqVgntU>s tGniGI)MDĆ=;/n 1@s;07RS'ɗN=̧E~`KrĵUrJ :0V6v_w`D>>"/#IqsW.3΁9s4ٌ^zE#ɥ "nEzK :PL>~}gEϕnߥZ+s(mqLD]Ln\/Vcfazx촜9yt }㆜&cr*`c> 0">3 @;})ͯ;=;C~M‎r}}N?œM{s?]?t9A:W[U'".+@oV|T:бV/]JVX۱UUS%@Gɽ8It;s㧗x(NЁ(ϛoD:t ]"ŕ9U@0Ё1ѨyD>>"<-qR3,/Iw'sƒU9φ]R:`[9A9oD\UU=8tlX.@Y)kiܥf.qecDuOYR|<"v,j;Rʥcf :NK_q̭H1546i@zT}danתgCf+:F}͏bk rL ^rͥSfϠWb⧮̵I̊#C :г-x05)Vn`~PKq.i+ko(r|t ܪ+הh'y7=fҫ=l'WzY:|\KV娾(1rzCcxtI+SC#Dn=/r\W-YՁ9o t4AHnARLL/Nf}iM}_N(>W'֖(gЁ^oE,=y:trD"̦88 ̎"W,̉Vtt}kC:@i /r1UrC_,1zi9űWM9ѓK0 t4];%KXfУ'lǬO?_";l m @{qʿG)l4R:2Ai3ND/Q75/M(}/5ZpM})]cnKi9-nm:8o:@kԏi #0rmzي/9XY&WP̽ȇ^=!gӋF#3anlJQ;|jh|y:5GϊG#"n#sJ9 t~K>و;5Gx>[Kw@hchͥ#9q79e0׮_}t@`MNVyQqtF877?9skp8:`zF\:bV>r]|Li"ґ9%554_)oo [fPԵ73".A؇JG@yU)<5c&qt7c."Uϝ/Ip@Yuu9p8گUÍs:@G#N,AoK)ԢdqX^₧Ξ@t:^_SvuD2|m׬Euu>!P tªKr{KweR754}t1}F Jw%R8b3`ktɪլ^NHk7&:]eSË-4ϝm tt})JwЙr]Q@Wu#0$}}>= tM6#U[7 Ms@ך/IDzs:BUKu+`@2jEKwPVxKwLt|SDPb?ru+3Jl猓ˑ[SSUgj C`ƗGNQLJ9@gk#E6UB-:=&y0wnrxM;u M:=ea?)VG<;Kl29S"/=RV _Rf@OE>"~^YӚ;xO h>zkitjcjy}C tzW#gKw0;Rw>rth6Xkut3)?JG@;n{-=%){j@\]ttzt}飥;>)5:}apME}.:bS#`.LܓjqD-l;Ss$R}@oL-Z|q;:)wO}@TGqK;:}e7Zr{gP .mNg;TJoW6*@_zXswDĺqKW:}ʣ1QrO^v@Z5<?~ݏJG@):}UF_ OKW@I:}mS~G>̹6vA!P@ߛ>bHqA鎾ߧG.RN")}'y\::1us8r-ұGtt6wGtGʡKG@0`"#sZJǕNboh.)r[YttdGaWM_nI4:;zT3DLNVC;4S9=ĩTD:.UNhN!76}#S#"c;zF޺Kg@2aΈYn#o /rd:?t쮜];\3r~[t:<͏tG;qzx|ut:<ɪo""NBLn`VXY"r|tG3ZUtGHV4[- tJ\M19Yna6ذ?*rӦ^Y߲JKwt{ʣ`[gFe;:UՋFוncvUz{xrsqKG@72`;L/2r^Z飏P:)GΧnev/IDgNReztt+fjn|_tGq)Κ/>tt3f`k/; kEs0C:{j~~i#]S:3t}9(^`,xZm%9s.nY0C:̂ez?cwN(@Y254vftǜIӯ>3W0[RQ?Θ#޷C`%:̢ط"S~tfY mbJG@1`M />EOﻢ^tڠOo~xZpjE:S Kw̶?;=0MR^{v9ms9߲t* IDAT(W "O]^f@M/4E\Rcr-^t2ڬJ_J7w?]:zm6]ftJÝ t9nNҦO~`xjZAm>>tzszmtO-ŇKG@0`[39[+G>zk:̑"JKG@?1`=|N;Kwl+]s@9tQG.Rsc:̱EDtǖo7W~c/ID|tǖrs(@rUS׭z G:0h҈SdUv#۫t+ T[,"~^7,> #_PȚzȭJG@?3Dt#m  t(hE}bmF鎜PXʵ8GZXpv@FD\_ rY @_3rD>л_S 7 ty%i8>rq'= `G"|\oU%sf@U7=[s!v}ڳ#▹z:& svyj:o#.>^nAG&"@1äϴ-6T&4"m|> m|}`;aVGoS_lk@"4/7.0p_{Ku2]yQwFJߘ׭v3e@ʳO/fj숸{^/G,]Vfe@^7E|s^/l0 t`9Wg~Xp,:t4?3z^5rGds|e6z1ågz]w[hVb1JD77[5@{cnJ_O9`@Wn/l?y]=G\uݫm{g@x7^n;0 t4ٌm{ t:tmO=If]"Uon/շ6@.1h䆈Vj[ 0 t")%[smLf]ҭ7:lmf]k[usv[e@Z4rC~^j/:]&E~@g0^=4~ݜ@.Sj_)9f]f5k;R\5w5l1LNV9bv-e0; tB)NJ-|`VЅR-oihM}9f](WՖ.cwy;t)Pch#x-@nRՖot6T-kc5%Z3KH_R)T-=xu{Х4[=G tR17E_}?Knb@7Kqo| :t1Y?_K3c@ˑn˪j|c`F tb)bٚz1r-~#>:]l jk#"R<0e@?|r@3q[_R:t_R:̤"Jw3\ժ tr:tq[mt03.q."ݶcN9AnMWf@.k r3˥.̜]nwnf@.ל:ܼVe@0q3M*t.y@Z#a-#sGEJwW)5͇+cdz}6:'wUZgoKRo{ӫ&'k(5 t ""?zr-)x-CrĦKglZ'N~cs3yDZO)>c@)Y|,y`-䎥C`.>s-!:oGDDx`50 tcVm$"[)>N;mn:ZzC鄇cׁ7tç>:xf錭_h7G/+f@9Xak=t}y [/Z@~Xa# t[+>ko:@`@0 t:t:@0X:ßep}P: _|^ ^`tq%E:,p;t:@`@JUU:a̟] tW9֗N}# tSUJ,ݰm tS)M^n:֦V5 tW=vsI錭St},G:tVykJG@ǪqW'8:#ť3(Ǖ#w@ :RsK?lQ_悁DHC-Hg6kƛFו.bzּsȫ"#kڳ[o;"&&CQ26vW`|c jr~dUwE)jRZ#FJ5[o]@~7͈sݶ~% t:t:@`@0]f. twqrUu_{nuIM ETpq!3n`H7NqdԯN9?Gtu12.͌::.#((-@BVt=$UUu<c:Wc1cLx.+Ѝ1c1S?+Ѝ1c1t.kq7c1cr63c1cL#@7c1ӹćP/+Ѝ1c1tj# tc1c1W ^Vc1c\SZn1c1wyVc1c1(Q+Ѝ1c1t(fѭ@7c1@7c1cr`4tzXn1c1iU.Hlj2 3PRsHd&3Y8ُ\FY*|u t*6AFݾۀ FA6x lDtCY_ݕƥ6KaZXLwyDUd?NO20 ٨@ +N=إ00.DU͈xAB5*[H*o#Ivumfl߿i_˯M1O=PM:m7IvfKmC|+SNvz! sǞi2ϟyUSv 2 $D$l͎p%_oLgq<}^W/5]*UF` C6h[ %tGlQ={u/Fr(גj]Tc`͚,Wagnk9PD^&p4|TI]?vMHli}&$?k+L͎ȑ*%G!%Q{]io{voXaӀb1Mv:Б ^uDN/ܑw$[ܹG:t3]^ZD^X[)>!=!%*^ L{~z* I-n Ș* Ns"'w3Ms'"ծVĕ*kwT&]ǪcE8Vc=J-y*ٚe.arXL҃T bՀu'D5nihkcj2l׌B"T"3Pf:[ʌ"::d 3?kl9vɮ{e<{uCGeM35D)[sF r6aFH)[124tTDypr81ZB`\:ǾdS!,Z3tr;DX:N|Kf.uCyW*)WYU8VTXDށk:&kCɅ+L Ǵ^sRZZ'^$,Dg Pv`l摟lmn YOw\nrH35FwdIط)ň,dlSHy*Q9 rR8Ed3>o0ii$t}v̞ s=|xܨ~Yr'rT\Ǿr@V8%Q=YEg/"ytvNWx+ ]x`uE:TCCiM.S^Țz&chL4~$p{$Oj͚nGv.»iH>LVw\AO_T9ѩW(vOuGRL,бPX9%{|yw*Deujߢ%7teZ=K:1V~#{;w" gM\hSOWeY;l`SOi.iPC\s^dj3P^w4|Ua pO >_& }aLgλ$Ũi`\7RP.?]3LQ:ٕ*k[vwqhvpwïKJkO`;SB2DUE.nAd1ިnE%r|+X}v=INʽ} ӆ,&_f \4z'UT*Q}s(& ;͘!@OWBBgiBg( E> zVGFyGqԽEBG2[Q9 V*UTW*I Q6{XjԵ;c=Z]M~^T R4W_瓙h031PwNç4aq $x 썠ݜ TuҪ:Ǎ`y <a$^ W^H:w(7@W tsVR\:D(\Uj8+MѶϠ3]iZC͠yλ9*2M/ RӘHI:P$_%gWtAt/>|;`cdc ze''@2P SCg19sN3ܩ\~-&^^.J_}D߼L 'y6- ##5,_> *|kr+Uٵb }ZN͠Lju/HO*s稚+Mo py(^m_׮{ʫOumT + ksiyU撟Cʕ3EQ>Q;M* /Q#saԘo:b1M+vՋgȌΞIJ{َvToHf)ٷA^:*)7h{tٲmb(\:ƾ׉9LԊʙI7iΈD9-C'A*r+ -tkp_C85t9)t}M֡'P䃮T0trk%S;t(ib>4JßS1+'4t 4t tEl'w7ǸQTZQ9Bb&D'tcZ@T%,u OZ+״gsIK%ôGa b2fA5f\﹔Aa+!tӱ|NCCnpWEY0ErMp}) λZLJ9L]f?/QL*k ASBz[Cf0W \Կ qZI}wMx85f7+ӁgaZMGa:C}-[tQLT86)L&ޏn.{!i稵kgըhS̛}g. V>\Ь뙎P_꧅b zliڢBFi$#|An>4da{g,tcZE{dMn.mƅҁ/͸0~NCw&[~lTC0]ĎZ3u7Njb&*vh O{" 2w}ǟkޘ>4ԭ?\tSOa'-,a:KL}T+g*4qMs]OWTYg&FpOILLZ)\_:iOS;Rʹ@MO)l UOn=M tǯC_0|"Aw(hFAgb&II,@O; /Qޅ톙m2QS;bt<ݽ{:X9%z=vSRWMc&ݨ~,t3~SA:Lu55S?MKvCܶDM`L3E\:? IDAT?t3n&##]aKomTxxPĻ-!;o/d*"NE4TMOCE:8X>h@Do#?{YlE- [݂]nm xxCx[t'smkLaWH9gh=V;瘖߿JF-["azKJvCod?:fVwl - ^7' ɲ))3Kd.߬H*"?i}%p 71a}!itjr&|QNNhGh@R=֍FlBleGhQHyH~c[fctɅd+ɛy( m"D8VÈ?l&RMǒ1)I7> Z%t%˩E_?ah/LDycK; + 'QOWD\^_|} O{WwzV:֥"bi?os6hvFkj>J Ak[]Zno2^Υ'?&j5#ij]+V-^vd9=+,O*z1 JO^d `z%UBh;QyWtWc{ݚZ驺SBA썏<,ЎZk5nAxey90$=}fDgءY`'cnEVUϧ%-»tѦ;-UFPБ&N3lI7ӰT_3sQ#ks7c?@UV_Kt3Âfm 8==ru.K*:Nu͕ay7,[t_&2թ@f6?CUu"!$jR[E״A{[֔3¥~I@ R﹖rN [B[<9=MDNW4yD2jzLYu/*tF ouCrNgt D(;Θ} zc)t__=\>*a1[rwBi3շ;U,t-X+NW*Ζ.Sg@MJ94tz rbKX~ϷLvMSFB̘z= cUơTgq[C'?!+kK/a$-#54Y4qtH[\U)NYyw"pZ,!&@υU|b)Jl nZ8S4͖M#Hifr uD.$;4[{Aֿ:jr1a4?-?(Z cWKb]RQD3=55:1;:FR'-Яz*y?.#Hmk3&v=ZwْkV4+:G$K.9tI1NvmtIH#:Ĭ@P/%is޶63w&oEtGŋ7'ÝmD8tq=)4cBhCYR!1{28-Г 9TbZ`c -Ss $Ieo g(US;U֕*߇ < ? er CghV?+#7=;!ߛ$pHSq( y+ 1LzH&OL@յw}b:P0|)ZpQr:VI~:yٴ}T]fZ-#"gj\CeF"tQ_R83tIkdıa yߋ:iAFrƬH4.'`"WY`b2 uY^_n+ΟD*?Ѻ)g]#Ị!&6 ҊZ!@^MF';f3'+MmPYh {__5t*k~9tܺ ? Qo8dzBgh[C0aze} ujFv .ЁS>.t-+M-w9}}y=:F#dV"}}D 91tF|#ttFOBg0cz9*-(%G)f8E iL'`Ioΐ{ܭ/BhJTN134"Cg0czGȢA}J_ڵ3B1ѱݘ@fаzrm Ls5{*:F6ҿ(aS'+;i:C}A] 䶍~ryN,&*nL(Weu3DAn #ug0 =!I_XXnQ;n(WGvl >p aʙac4v-/td**bz>=tFLsYnVvF\ERe CCGcrfЍ >9ہH#^@o#Uz>S;^Xnl6!Y1 NWߺnBP&4'c:zl P>tOP!cTX:C#$nRS4tc&JPjǴλ **jb-t8b1!Q:CLn雫3L&"4WH-U+;&z\'9&O>7vJe^=wgwc$(ˬŵ*rkLWuTcAFo!LsYnD~#'akyswH۵)Yhg舦m:mLD#"zUI3mD0,]P Aޑ@7ѫ?gnÖCgiQNPTvfS@x/fbkkl6nL9Rx>GvsĤGouĵKA#`z2?tz 4mgpa7ChD+Uu78|>ÙkǘoCgNDVzq0<ՎW@6n:$_=?tB9Tydc'=agHL<0-l6J/#s@ opP܎5x&Km 싨i'vp6DAoܘFm3)WʴU9S$N4*I 4T/BMly>tE⚩}\D/j-1 Ծ}``)o}+p]Loվ s)D`v|@1AEID[,ty4,3E4Idj-Ȉsͻ^ |)"tyHr3U|7sp耓T_{+U|]KfO6nL%JWDo<{@CUWBG1 \u+Xz^@-e=OmZcz}3E#mbLmQ2P] @2֬:P 1=OH\:b-UkzXL\Ti'Sc%:9"|nJV$ttcک\.!YEVDT=#t'J:=/nwcB.^j-t3.OSˬ\93t_c-s@벙Zm\ue5 yb^.N賥b1T/J)7v =+tPס1eDۮqB@TO(S\_0wqYZLZW~S,%v1u#4B4t)q}Tz}F:@$ׯ۞f+rI,Dz_gKzi_fc3dT!كVŢ'mm"b+p+[MbxMߩ(ГŽwse1&wjK$}c1"|aSLn"GrS 1mQ6>1Wx^ID36@ױ+UETbL~2ɎTKCG2QHt;ݘ$"H"+0s&%b3O SG <|Q!{}}Wf=$9AOweNt9&˜)bkΝ tUmױ-Uy{ DgɅ7זU#Dn<9>J?1I1Q6> U.ڌV<4 v^ƴ|aL xHT:L b*} ~؏vלT˲׋@OɎ34a(G2ttcNe4÷:=wѿ5~-f]`F 5Rk9*?NT&;NhlJo Ì[38W{99AMvŒ k>:Nݘ6a41:AT:C#hfw%N؍kxϙ WfXlSɉ/ؐc?``$r6ة !>kAS1£ϴ=OLT_ SFzpFыkKz3tc3Xbd 9[D9[OriT|g샍5~Ѵ+j* " VZhj"a:~5&XLQ^:8|cV]#tce¬ 70 rU= $(;XaM5cMHvҼ loV.M]#t@ KLҮxfY4BЏ{?:1Mx vU9s޿а; ] :SRX c:n^Yv$ɬzύxnRؾ}Vw4!Ԋs3 j~WQ ʇsDΘN!"}I\HZhyesT0?t \*1e3, ˜ ^x{wUga6M6/LKCgr~oLR :0bю nDuN 4_*GQ7Gr41h\XzFlఐbp 9f"ɦ6HBԡ$C3LR(8 t_g}; IDAT=_Ø\%{g=gjHT agIFS%)έ\2RsD9[cCG N@VfxuA3(Q9(B &ĥ2QDgu t,].t c:B_ XQ9%9 /Z100KώY3qVժ}DX:d0r>G.2tc:=wdP*IaϝK gfAUcj5Ty%66.Qux->dDs:i:ľ2=EG;ڵ3m!z u"oyƴݜ9aߊة > κnbF8$t:EٷiLXk*zS LJ矿kjߝe8&3tf*/ l8coQ1꧶HFFBh a+tLVӘ(vAQCcrnK_&NFW]MI6nL wЀcѨ; mGSBhDMݺ& @pd(Е3c%oߒ-*y}dݨ)cM@RȒgA7&Y:AfjUTCK[A!tBDb*qxks0QUI`ًUY(UYHEaOb1f ΠF,nCL>tyz (БD"[ ST4B[ݘ't\qi-tcLE,ҡ/& E6nLBr{ zn&IA89t\qƘ(.e@,k `"6nL$*12Ed QcWs3 DZv9LXni޻ :fЍ awƴDGD_5;t\`j߄0̙s'1ոB^Yni겋WDu\Q,z%t!be]A z;-\HL|;Ƙ`Dz 9C<&w9:1&"7!ؾNU\-='JTA_:i+Ѝ1qɅ@1P:£43 sߨ}3G ΐ{##h-vZM34e,_>%tQI_:C 6{e" `_ :ã$]eiD!t\sPy>t A&#I|\0#Mg:i( tyq *@2CG1Y8t}Rt,Kf85ɮ$ğ:DCRb( Y :_:i( tTm-_5ە$ljјs;CA;@Zn:O_f߅m'U^:C+Cx#7g oX)8}M qP^eaCg$:Bn嚃\憎Ө8Z(gRZ3igh\&Bxe,L@+ I^:10dM Ѡn#!$My:G4Q+ʒCg_:D0J ~ D{ XlN3#k& CgI\~6,{w*r!tcn$7v淡\Ecf1]t-СK)'rh7X.0_8M ڦXL%.nm̈́1{rL t/zyYƴׄ(Ƹwf*/:Ǥ&HtP0y1ڦ\.$˜w鈣#*ydX^>uSQ-1{S\GkY~fsn/i_Ɇ'Ђ9B* 1 |=tSX9CZ:X937@?"X}V-34 ׁ>?tcZA%yu f(>ty +*GaLӽk= ?cfS"moN`ƺ̠Iݝg嚃jUq-$G=&, 9@cƭ."i,7 P (C0$Ln:Fi^:8=PׅaOE8LY:GS}jdZ2P%-\weWl ~pg\.I+q^L ɘVrߪ?\n>E't(ow7aLM2~Q)?tq:b ,ub:\ 0t SW~px! 4tqN*u։Q"<Ϙ]&W 5q`)i׋rk4UUU:H; c"D/`rۤ49EU@ @ѵQ/rʿܩGbߘY3eDMU{CgCFX4UNbL3yυ0g Ci4t"Ng?g1^8< Hb1qIyFD9JDn Q\"t}Z|Jꏁ1r3/CGŋ[B)V\r]/DE۩P\r"&/R,B0w cTx鵬XkLuË(IksnK&?ٵhI:Ӑ͊ 8 t$cڮXL\ank{=t?D9!tqzޕ?|{ʘqY;J2@v>D_Ё&lgpI4C$WeC'B8}Ke5F?ҥ7-tg(;ؙHh3ťS>7tFܭ1ϯh "bXArp-]'* 6qlEugVd6T[̙~~3qQ tAuS&/.,"=+~Z$0/tfPվ m P 8#ʕT}[3iap"oW!5J8wT^JJR->M_ߝmo|gL֮}{gu{wFؒPǎNI@ MR窴Bh$rVI 9MV4 ))HRc cld|Öl2cdc˖ZCZI;ϻ~!)J}5"g:NֈRӍ<`_|$ $Kw=C TUΞxwYwP+mR:W|n鉢sۊ T՚zQY;CpxԚDglFG|;rP=E{pQtKϴss{q\E=GIj E.]k\*zҮּQ cnSToo{f!{E4ڀu**q=*'PӀяS!R+ˏ" ;L$,J(,[Ղ>"pl5-;s;1'ag8p3hd"E89ҹ(* ҏh?ȫp/3A C u"2'Cf_7N~)QQ-/CLrSd4C5؝8a*a݃ }fݨc `:7UN@& se)\&rݫ;SX=('U" )rj?>Tn ^#HfpAk[˺@wd‡쟅Vځtɵi{ؓm;KPqQM r;CPaOcGx?[4(.<+RXLDokjQ}k6 /Y;W w5 R5oV(JPmQF1-L|w`b | 0E)GPL}@-CLݾ#Q=( 7k sIU;y*wzT[F [Fs@\jsjaTlA0Q;øZDƄiAXcz}* ϥ#8/7EVW[LOCX)XN1[v|vIvo?=NChLS:Ŕ')n8ѭ{;DPKʗ|:0e~fԮP/ЁE_-)߷ӢTg<~%ą/0!Ԁ jNAqm wsemZ;LuD\ͭCWqx=:v&0^ @.Eo:"ͅ~"AhjAdor>|Y7*Z˟Sv::ƜN58`\}8&6 i&/Aut8k ~R#(%}Qdkg7~l^kNzuXc45DHS'8*e']k=X[s#FЃ#KwcD7F'k>+WT'R﨏 j}AȵE!T-hj:l]+HYT@/D*Lp4ɠy;,8TYQus}g^MCLJ*|w g|T&8Q==bWicP],w Gﶭ##@q ;@0=`[3BMB.m19*Y ܃ɷ-}BKYopC=sGZ3GQN˪QQ to&^\[v&;2ڗl75]PcRo\'sEGΥւRsGŹK {% y/!޿񝣦){I\3d-F*h~+FT,-Z3q4RS4c]K+SU[YgBwmK3p1Y)#絨# 4zQj=׶VLV|k激 amۼݸ%d":wurAYz֛?C^/Q3|GjC>M%(;J *鳪^E͞yדF˦ tK3ȟ:Y|XFR'=8 l\Ls$%l\PSYB5S'YOzryK7} "zlî5ŹDXP?ma1e3}:ͥ r9R,4ٖG:G.LL)FЃ}Tm_oS_4\ lH}j7/L{Vܒw-8w|VK iwL:ͥzDyjM^[o,RF] sUkK~e\;KbB'85LAnj굪JU;d57S[zQ}?)5\zgc.ÖY ձmє#8;Υ|&Fqƅ{,w\{xӲ>wJPd\ZrGطMǺNP[xw g]_qKRJ: tr-ė |2S^a36^LMxךzΒ<羣; {e ΥzB5KX Jͥ?L6w´4E?lS;ۚ3#7oXL\L@fq.}^R'J)&ג>7n]T;NJtrzyUl}KSVrWm[z'gBEGGl[3[7H/a@ƳY%AymI}\U2)VUnnxkM4%::bJ~q(N>*nKbQhM=gCɮ;vC b1Dž?a`PYF+(U&a'kg5OSSxIXha_M^Rwp㨮3W^4e:LW8,T]m1Uԧy&/{`p-e^3Z5nu:߈W䍠A2R,ƲX*?Dn\MλNMHU.:n^9UXmy,f艒czHd[3#([zEv%(‘NaxdOio~IJ;>pq4nK}(y +WYq&ɂW'uVֻF1::0IA.AaUQ(?A5mUnDrڅ (LZG>+jyCp+cOI$d:NV9'Y*fa,`6=x؂"E٠ql L3B roԝ4/#lehckb%&H T]]AR8)z_S E8~ފ ꬺUD3w" 5f 3UiD$L зADEEC8nhMwZ9  ) RI]>=lbInm' {V+9]1,@Y:Gx(*мʲ+Aw+S`0Cms6m$̶aTA Z5=76z rht)oU/Vyy>gu()]]o5q\Dµ,eO6'BT\[-=ӨƄIQ0jpT# ]M CtA!QdzÛ  PyJ9w**'0,Uf!9B!0]`fxQ0j'0#1H9^3A0$9#2zJШ.(l0s_C}8L/ ֠lEd+WET6Zc1kb;ԼjIENDB`astroid-0.14/ui/icons/vertical_color.svg000066400000000000000000000155511335422170400203730ustar00rootroot00000000000000 image/svg+xml astroid-0.14/ui/icons/vertical_white.png000066400000000000000000001164631335422170400203660ustar00rootroot00000000000000PNG  IHDR uvsBIT|d pHYsII$tEXtSoftwarewww.inkscape.org<DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/4.0/i] IDATxyحeYfe'T EјDPp,o9jIYZ&e)*)8%89c?E"2zsk}?[r{u_u$I$t7Hݨ;@$MmI4=tI].Im I.Iy].I9K%I$I%I'5]\ئ;B$M]ؾ;B$M]C$i%I $I.Iy].I҈%)-[$It%I$Iq@$in=]s@$inu_%IH9K4n$-tI;$٪D$M]q.]$iz$V!I.IH%ل~^I4%I]$$Iú]s@$i9vIFqI뚛m;K4Z$מ~e+$IL8K4BIvkn$I.I8.IH9K4N5;K4R$u ;&ժHp@$iJ^V!If]I5׾AU]I4;$= ⮲jHq@$i|nh{VD$͌$Is n$$I#dcn74K9.IҸl.I8K4.:x6$Is]q9ho[WV2D$͖$I#d-T$I=tI`T$I=tIc}d}zI]X+⛰Kf$@no>tIF]q8 {>b!$ie8K4GnCδD$tI\M̪E$tIAvS*D$tIߴ~M$Is@$i5_3ǐ$I+]9dO`<%Is$ͷY IŌK$tIۃf8[0N$i9K4 !3|,I4c$ͯd?$ItI׬xo<`Ə)If]9d+.s$iN9K4B{$ۯcK)8K4gzMcV%I%I?^ >$I@$͟Ǭ+3$Izr@$i$x ?C$'tIq֫s~mr$I$͗^~ϒ$I]9dVwh^$I:p@$i~||VI.IHa@_M[Y)I$I~ ?S$] tIIM?w$4lIt5$5Kr+ྍ '6lI4.IR5?Ik$ tIZ%xls#$IZz$U`I;Be.IR'vL8;Be.IR${uw\$-3tI&0OʏNrI$I xhw5xjw$I]O6뎸Kmw$I]Ud5I$IaN$k#$IZ6$y-#$IZ6$$G{vwguHl%IZ]kѾI鎐$i8KJ iˇ $-tIVؖdI$I n1෻$IZ$f%ٵ;Be07 $JGvwl53#$IZ$gvGLIn!IҢs@$i% xBwǔ6%IZq$g[tGܼ;BE.I I#z~M>l$I+]ت;bN*$I+]0z~RwnjmVw$I][,8N$͘$I3&;VtGH%IXA'%Mw$I]Jr+ Ç$i%I0I$-$iQ$=q`U:;BEtIfXI!IҢ $I3d,߇o##$IZ&Br*z$wGH.IҔ&;;}ا$i̖~If&Ih'I+$M!#XU?$i.IJ 9 I] w2p9!IX9Klɡ$K4[;ȿwvH4.Id /;/k#$I$ ~mw_Iv$i]ظeI 8ȳ%I+蒤d 8w:x|w$I%I7}#ܢ;BN.q$-$>l"TUGuGH+蒤Fp8'OI8KI%I:]t غE5Uu|w$I+蒤et:$ꎐ$iy]TݠowotHZ%IK#-Z'PUn'IZ.q$-p>&Or\w$I+蒤{5. QU_$i9K^]pcuvU=;BwIBKr#MI!IJs@$-wGhj69^wIJr;V-WUC$IZ ^A$-$"7IV$iQ.p ܹ;BwIIp1qwV{VՏC$I%KJ-Wp!IҬ9K _Њ{fC#$I%KFЪpVw$ItIBHrS[/鎐$iV%IݢU$莐$i%I7##毒!IҴ]4j# lݢVQUwH.I$[1pvGH4 tIҘGgI6K%ID௺;4w UU$i}9KF'ɝ[th.ؿ~"Ip$iTl ù۾vGH%Ic{HIևK%I!;4wH.%IdW6-tHtC\.I{I6^ù=tGH.%Ic`$Ow$I7%(l|tp?C$I.ّ$ͭ$>ݢNUuEw$I%d5+$8Ki |I{I펐$ڸ]4w< 8C {ݫ_C$I:tI\I+-ZhVU$*.q$͍$gp$^$ tI\Hr#thi<;B8KGtGh$펐$ ]4ð%u&oU};D|#$Ijd7}6-ZjUU?$-/K$ٚʹùxIw$i9KZLv~9{w4$O펐$-/tIR <;B?IrPw$i9y$i%9 x+E_/uH$iU%5p cwt= TU?$-KVM-pwwIrq@$ɦp/~EZG'&yrw$iy8KVsuGH$GuGHKV\W{~Uuiw$iFI \l"Msݫ!wIҊI35~g%ٴ;D%I+" ͻ[xdCIf]4sInOw4c~;B%I+tGH+$yhw$iDK4SI CZaWC$I]43IWvvbw$i18Kf".{6HCUIy$ijI\gOItH]4ɎnI9K|$'tGH{%I,ď#!qr@$m$GguHs{AUI8K[[vHs+s!qq@$$ۥ~UIxI$i% Υ+pNWH֙$iL:+! xUi$tI J1`id“$I]tp:pDw4ROHIs@$ݐ<;B%yRw$i$:%yiA\<^"IO蒤k(7frప;D4%I ɾ;f?!.I9In\gK+!&q&[p8Vm%ٶ;D4?%ILnkl"I$l "-À3$]]vHK&}$-9_$iM3wHK˒$-1tIZRAC[$XO#$I}%iy !眜w#$I=\F%IK(!:VU;B%i$y2I+UIq@%+'i YU$tIZIei<~[Uo$<tIZIl"i]YUtHV$-$wnQU$tIZ`I.oN4oVՇC$I+]T]w;uHU'C$I.I *xϹ~XUwGH$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I|IJ``i|^!IOuHǁuH }#$I+蒤d7!-҈}8>"I_蒤d!v)}8>"Io7$Ϳp?i|8\.%I뤪hw4/uH]Ϊk{Syw òotH]^[[9u!pIҸ8K[U}Ḩs[9UI8K6HU8xCw4'˻C$I.I`U#x-R`"I/tITCmNxTU;D4nt5Ivnxi8$'I'4;ƪ< iZUO;8'6!4/% Hr2F-cVUgnVP߮*OEIn"I]RKY^iYUu*ZL^UY {OrI.ii%9N1-h2?\-+W՟u,&Y"I%-$.ݲȪ/pHxhU;dmI6鎑蒖NG;u,z)#4V?v,_ޑhIK]H&)u$v7BU 8aБQUYsʽK"I]RH=V`l7Ac#f~EZGSUuBuw&yTw$tI /na-`$ ]U/|8.$b$f3INIVI ':I mr`)&ɯwBU]ܛaW}!0w-V?aDK%i8KZH͟ ت9gn$ovBU8>PUvB'˰Cp_]C$i8KZ8InpsX^0n[O2 2 3zxowHJX'lI"~j |EKUY Zk$g$ټ;Ff]Hr;wI^&UgCjQpPU~5GJ +ݣܦ;Dfeo$)VI^ΰ8 8#-uh\p|!$Y xzw* xvH,8Kj+uwQU_e#-ZWU䃺nifb|4ZI ܹ^̪:p0/)Z|oVMNxTwKb;'1%N&x&H-IVU}a[^[U?V-sc[đܽ;D6QI3pÕꭙ;o_GU}hm-Z8<~2$29exgC$i}9K$>2Λ?jU![0iwȴl0߫eNm 0+l#I]ܛ,i.s`O$7VU8ᪧ4SUuewȴ[w<@=C$i]8KkInŰ9>p>CUUWEܪzVw,L/n_ޓ$%ifWJr,a\Ҿvޑ䗻C58E7y!6 X޾9e6^p1t]%͝$%9 x]wݒa]CUUEpzaw,$Mw=aC$8K+IpӺ[/1\IGw,T \Y+ U!do{wnYO$kc$%͍$ܥemYSg2,aqU &8رeaEPSp@.6Ixew 8'!PUx0]53?8/! WlݲfX~Tw$fIe8a-Kb |WUpϵ82 iexZMc$-7tI-Iw? ld6LYW~ݢ6wtBgu,b$w莑%$0Sƽ5Kk $Oz5[\U$O^ύ]>dm'KZu>HZU.<_7CfɰY UYH$t|m3ܢ;Fr@ҪHr$o`{*G/HrJw,L8 |E+!UYH %9;Dp@ |x@w$vGBU 8erYH<+?'93139>tMͺ{tŋpeU}7[4sVJ[tc~Imo$ͧ$>4p\NHQwȴ {~x?n%eӻ[vIrz-c$-&tI3d$.vmцy$vL>,R%NUi%Gq-ZoG#i8K$wejc4^Jywȴs!Bl& ܯ2_g2,x saő.ijk{thfޒdiUӸ SUwLk,Fs$٧E҂p@4${2 __p$wLWtL+ɶۀû[4swޓ$uH7tI$擳 IDATݣ/p^tLE7诀GWOC5m[b6&9E҈9KZoI`8h-k,.LriUw[tXUWvL+NݚS:vΟ>ۃ$>tI,ɶINcx[sVܮ;dZU}(Sjmw,$5.ܛc\}tHtI$ɑ l= ;.ܩ;dZU#_"<2 I~a8 ILCwqMd$onݣp321-K.ӪOCf!;9S˒<;Ds@t|atu#=CUUW^ݲ[U/${vn\ xMsgCur@ .ɛZ1&9;dZN^ݲd~ <bd[4>$n*8KI6I 8GpN#CUUݲ$~<b$onܻ1ÇKrI]N6kѸlA!PUb9}UYHrpUwFe/$g8KK.Ip!6^1!PUOaؼLmz{w,$y(p~ s#Q'$r@T |́45˓<;d/+[ׁ=! +[4z;$sw>ld!{nb)ϒfw,TKG?nY_tB'3 T,|(iI|}/*ILw~BR 2 Uuc!0LE ֥Yx$Х%0YMV$.=Uu6p,pyw}a8tw,$yfJxE7'I]ZpI>9.jz&IFzSUo|eD>RU_VJB-Z:.KrztHZY$%C7{th]CUUdx82$k'whim̰I&ٴ;Hp@>ӀKwH^o*v̱ {WuL+?nn4q1f]ZI6ieFR YI6VU}8rwz pߪnwȴ&( 8i83I쎑4;Hr4 Ǧmۜ#]#,AUq+飿zodKc[qpI3ܪ;FХKo vH IvVU}؟aʲG!Jrcm-:*MrJ$m8ti&?6#qU}B^<~2$ ܫEZO[k'y"!-#J#INaX0<\'pawLkSG[pRU]2$;wkNqK َK{iDХ~ 9OG4q$VU}~vS)Ui%5.9JrrH+*i$9 ɛbK҆+INcI- Uuiw,$Y ϐ yI6ɶ=Br@f$ɦIKr1p!p$!fmm?^{"cv\ͿWտwBCiIpwiХ)%d/g-odaU l~+pHU};dZI* nf _Ir>ux477RɛÒ6~۱JZ*'Uիc6f|80I/c5_؛>'9%-r@Cm\ K].ɦ!Ӫ7 \/l3duHKf `~:ə.?ti$s𝚓$ "*\Uo |o껫3W䃚W3|p*& ϝ,$uGIc.]G'9(Òڭ$oMuwȴBPVǽa8UY+*ɖ =tH{/gT$wI]${'9j+p7vidiU%7VǼ8:{$7\-i~m +&Gݴ;J7d$KiKp^tL>=Ȫ㧒d{^- G}1Hd$'$xgmΒ4_.\gf < d'{mN6a8u&'tH]K%ɎI~=ۀ1l.aPޮ;dZUYS3xSUu U[n432~6$/Hr$+Z*› Nre w-vaGBU}aS!ITiI6tL1+I 9VHZ]1\4ќK)ggv͚dz7f8ƓmN-tc%i$7guNk ? |j~p}~+t]ÓHr|[fWjX5Ò4&e}>{~0p Wu~~8vUS#䀮RUfx }o_N`$I򤪺[3?Nnk<קyk8kTO~L݁=6 7D`$Hx)IKr` RU*-%t/_d{p_$[%9ލVVMWnTdء_O.Y t͍.p '^eSU1(ɦvHZx?>pEU_Ius@\/|dGPp0`8I~[5]G3dK 4k> ;~Л$;tJU'p$gxwɯ[IZ0'W[fcrțnaY:VmyUi9kԪS'pp æs4}w&93fInʰȯtHZ\=ZZ'&_Jrgh l4jwb~xU};fİ-F B =Ҋp@ªˀˀ?Jrk1,6Is]IOwnj<`Isn^]U_mVak)T괪5 Ye!ݫ(n %+w';UpZ Z:UŪ#<% x{v̻$n"i>UupUt9TеԪU\ ^ |5JҼ)pA{v̫${3+zIsw;Us3QR't TU$`'xA-4n !&- RܪVեMp@~TU|,IgKMI2/ܗ(m[$͝'~%tzT&Kwg&IseS5I-?wHW2\-pc7{ʪ:orU$͇MW%.Il"i.|x ps :p@SU[U=ḶZ!- uHj ͫĪDw46UKj5O$)$Y-I  >9Mh*@U]TU3l*w*๝r*INYiI/bo| NGOnt4%ti`X$I=&$ 7&$X!$]1,cmU=#-tiLj{ oN8¼N>px![-Ve in?Y~ywM4'Uupg#F9I:$@-ுuHZURUgTH+]ZU#dPԥp$vl$g-=r_B4A Di?!**hԣbAQ9TaE%"[Ę;" ^Ic1CdzV|k]{f{ggu埒:#a$;G$L,?>ɧ|!ɗw$Nr$K$7YxZ`#OWGOA QUN~T?Kr$>vf&_4ÆO$Ϗc`t&XUSa(谁zZ{&9vt I$'Ti%98Z<1OrX{VÆ#)i:ɝUu0X :dt}stXsL=Ua堠_ޕLq`\דܵ0: \tTեU'I䕣8&ݫ9Uu0QЁS1IIy`E]&p,/ا:2ӏVr&p6blIUZU$ytG%wVC8:(R$Mr8spU=.(J&{&VnUOlb'9,p*/L [+Q;_$OCaCAVRU6)ǏD&>:PЁUU'%y`pLroLAVZU}I y.8`'t`-TINYXӒ|OU=ztRЁQUd]Gg`FX+UuN(`>^仫AfIAG=$ɩ03%!GJAVU{{'y( ϣ̋QlKYooHUAIA^U]1l%58$3G7{KTG`)旎 :Q굙K,<`t`T INY*dh :$HYo >6lK#I.`uH`tQ`zIw&Fg@&z AHRU&gGg dr#NCGJro\NACU >1:1K@A%P` ]wMG9U!l% IDATF`纻<*ɵFgI^UU=:;s\Uuw'?$8\9zFU2%tt`!.K}րF_<5ɮY$?YU8::"OdX?gG`t5TUFⰪ!=`MU0ɿ'(ޕ仪AX^ :7KrL;+I_UrSؒLJA 9%Uu ,?Ǭ%U$Lr,"I}9[eU$$ttXr$z m'9`\U5:EA`۪I^0:,V_I_0:OA`&5I~utXWz?KSsaU=}tևLu5&CGg9zMTěuIIͣ')EwC&ǯ|pS29Ns~l\TՉIQ`VK907U$#I;+UG`})UUcvצG XuՒ:#Fg$?PUf0W : 7Nr|ۏ$c;0}$Y` Lr lkXh'Ŧq,]I~D9`t^F}xFUnt6),tӸW%YJ,l ) a8lS8FP4pF&}zt65 SUK4.KxtKs^Uof;M7{eUCRnw\;Fy_&]0:(, Ʊ`g)gFttӸƦqeILtJUK?UCLq`t55ޜUu 'ݷJ$7$^UWd;K>3Y+ pi+,+UUoN9XVUwZw_-zzU;:l)> ۓwtʫ<ƺsV&yoR81ݪA`ʪ$9X kFgYS'oUt:=ɯα.Mrr_MA+WIb =7:,#S`/['%sU7:,##U$6:yr{gBw Ǔ|,+žUs(%CU}ytXGF`Np99̏t~@1MMUu U;9̗t$cNMr[|A9'y;G9̟{짳 tX%9at:{t :,@U]Gئ <t :,΋4:6N6 RU$y[tI?6$/UU9Int-FMݷM$We/VU6tXLWq=$oJ|"ɝj iU$Ǐq%D91tg6b;#t$ë!`S)0HU]oGLhI ݷI?rU`A$#ɟNAF㓒fpx :$xUU'A8 7I.pWT2KA%PU_L>|=+XtY>9|O`/tXIlCA%QU&yɂnInA@A ۫jn(DI޹[EsIeIA$VU~P`TiI2[ 'ӼJI4k;r$/p]`tXBUuNҦR`yͺL_k7뽴.R`IUՅI^?KlfLA]Iѵ9P`:,v]tXbUuVR/59R`tI: (^wf\U=;Ĭ6HA˒iAP`5oA?Ni`.tX -)N :VvI9 ):^͏cU]6$)"$'lS8((Z޾yfOA-~U&fJAղ50s ::ۙ ,VV+btX=*%"WA?z!IQ`|,9W/*0; :ڕW!ZT`vtXM;{ V ꌅ&fBAմi즷R`5}"YWKNA4=FWGWytX]}x)P`u} ?0$ c :++QVKA5ǻXj6+LAvİ)Nݕs#;jWC;jIWQS`.柽ʏ+V+Krz._(V|at`gtX}O S`VLJ:tX}P`\U쌂ﳣ;;{t`tX}윂S`)tX} :WU˩62M4gx1}|$qUu +EA[w_7HI9ۓAUqfMuՒptP$Iw?,I%UAXm}$c+6:0^wtf9y2Z^(> c6\wW7eg#IUUj2d9y%3GEP`=9׎?MASl|0o :lY&SW)8ޣ)~tm0o :l 7MAu}!`t\|7 K@A%P` (tX :,K@A%p|>0ɯαo7tt$b .J̀)tX :,k۴jya[t\g UEC<)`NMAup0o :l`V)+6TU3slѣ)zt-85ɫGyS`EsG؇M3W$8:,9ɳGH򸪺xtXHU=3&9ktIrA`Qt IRU/Mr$Iv-8I!=qUuC0:<$䏻IIn&m87R~z%hU +EATU s0K@A%P` (tX :G*uPSXgF` ()]l:ttRXgU :LA%hUI.c+tJ+;ţlpt8`teHr$7^p'ןI>n亙L8oǯKrz3oI>UUg?!jInfI.AInȍ3n&_CN0}=___Nr.Irv]Ids2uYǙIΚnLl8 ܗ9[ }@&?nMq&in3U{\ӏI&?sξmy9(7~$T՗g ˿/^3V}$瓝ɿs|]X9gtؘ7͓bvwL}_ifnݧ'&PU]:xTw_3m|qw?qy7eJwK{?sߟYU+{&ܺI=ɝ2z6$وݷo_䖙Y|N/_L$'&ۓ̦$k;fInfy7yqR'9! KX-ϕZeVA2~P& N/$9nNZtM7}#o_57vNٟOӒ|)o_J+\UWm6Pw_+gu>335L޾5ɷM7k?|+sI?}; \72y-]kg|p \^?$頻QkTwm./޷e.+I?}$II^9}cs6IK7M2vO>/dZoe*~`I;|G6=}Vwu< }2Y%9KrL]U+AII24k߽.(gc[U'/(/}L^|C.cQ?~MW$ybuxH$B.fWwxb&ljI>_w_7'>Aݑc&/h|O&3 <~OIraw{&y]U}jT0؊XMIŎ˵3wtII^5I t^5ߔɓ?{uZ'˪:ate4$O si&OOHL*|vr7 F| oɫnƂU~Lgg>\Ua[t<,gzc%I~utfe2H#dӟ u&9UuݷLrqLf:g\gguyIAg2~M+ɫ~U3:2CUUuÓ-¼DT>sگ$/q0jL$d)2z{7I$Od)s\NUu>xt[pu^wOkI? *}U u3]jۚ>fqLvG&k.V2xLwWꝃ3 1pI~*2Yr zw7O%y\keriU}dp&6Dw-ɳ|o0ywI6%*ǵΜi9gA_dodT0I$OϏ͠n IDAT}Lg9X3v,YAeIBYfgUYC쩻ϧGβALI~jos?gbMM7~v'`\#A$N_H6lLp(盠<>Ǻg{_G%P&]`y:¢t=L,9OhK(T&vK3`&'2(uP&`_-jRIݷfֺ&}d&יެ!F^лa}tweRz'0}a㭙reg}3Ò/o_I27uqMfm #(6ۃoL->8: ˫䟒xn~mwu/tgͪ$;:Ku>Gvy^23NN\ԍ>Lgj; 3o1: ˧oҟu~J{}IAtwVʓ?RYoΰ%XjmU'.&kzwf2<$냱3YN\YЫ$_\@V˓39qu,YW3_dS?8|jU?L_$z6?2:u*}Fg+:)KmӔCjw?etcqx-Ws:jfd|Љ\rak&yqwAH$մɹ`iwct+~s)+gu5>YCI~x[s nZߘuJ%AyI:::;u$7 ~1=G`iYκewp?__3XKo.}Zߔ^>KJKӣsڶZU}?bgR;etmo?ɨgi8 N_(yKXɞgtċ2tfݽ,:CԌζUЧg2 57DosI^6۳!ld#J%I?2+:lлd|>qVAW˽2:sgIn;:aK9ga}SƯصvYSG9gAu&yY6kٕ^Wk{=kߟ!pfu?~^Xnf#1~B $e!TLC3 M9 y# x9CZgq/٨ t3[1pw?38;G(C]jnBB^ffk{iΠ_R;DۿyU@tT{ !zgI+1X͠8$s3 l_}7HMo']CˢjZg-{}``C(_ dmivVqSQigߟ=ؓh RIG༴w3Rqg.ʬn1Ӛ3YYX>^e \eFh3AgЋ!KL.)nWJYǃHCo 'C m;8nFp# a&]v\jRf``&m[+5n3賀WhOc ExŌ,e3[ ؓ-ttu -iw+V >xxD3,VMKwÁ-Hˬ%60"?,JZ^|Kޚz. h>~wq[Dq:.Mek̠ӖEY394v;=_7~p56I}u m!!ESn TV]kf GZ:;n$xw 8EAFH_ =3 ؍TN*s}ԗRaf";fjT b||ռ޸ҕm z\l[`z41qYY(V5}̾ #O%jQӑ^:'B eH .qgRѾD̲yFq#<38+7Fs(Ч<;@-5"9V٤bst^ͧ֗Ѝb3;ik2*vy?RԿ/nCM! EZ*Etvi@Hz;Ov"ZoIz;DN̠A64c2Mxrq{AV"uo\࣒*6W;(Do8;HX&z/n-n_άߓT H&QgD<3{/ AyJږjpU|;DR'DCXIIm:5f}Ta.R5IϚ;IwO3JQρ佼ӒN4I7l29u& HZ`fGojWWJB?b=tճ5Lfu`tw3h0f;(A,Η`w^Eb')%dbwŚ*zIyi.f:\2tHg$}&uzϑ$y?} wP^W^墮W~rwfCX٤%.sέ8/|~VE!vh\ `;>;@V̠L':XSȹS0oЧzhZ1w@ݪw6.uz~@:V&6t+P}`wA9 xHIzorsa.LW894|Ttkp`K@Xqtw"?.9![1j %,^J`w>ۼC8;7Gb"hO}l:dQ2%Tu>&lEjRá9a !IzG}zp[kx(ipw0:Q/.U94j^,5#WWHK9yjؾh(Eosa5!npNz$AKV|uh9b=xZ~$9 3CinW%-"^+oᝣG.*<_}֠A08@MD:mb w mْfxh_{.JJ}!E PǙmE;@V,qMx}I;Ǣ=Er\miч^Q;GIyՈr9c#ޥr'![12K7.n-q!Z<ڿnlSj+XSz7<Gu|е}'FC_p%94tafcoϼs!}֠IwyՈУ::@̶EzҝK{5w@_(}l_zՉھ{ Cwntw) |Fc%] T' nGuSkϪ}0fCr K^_yh;I7{()aW;@IyՉrAc5gՖ78=z~bPfV1aL9Jx{ck9=_ .}ǽCjL]肮afWI-4+fCS>x;DfrA_V4;ȀȩAd̞wP̠.x;D>x.6lk\~1Mpy!2 :5h0;@^!{{hA;Q3;mf/q3!inlHNSqbEBNy[; 0UNy;@^kX҇z7XՉ@D-p)0X;N$`]IZאXBPR̠'0 r= TlOo y`Gfُxgi 3]&icЛAyB? l z3V_J̠wKnf݀ێ;@^fL!u²HZ|;Gnj#-wzclCh3!4/ْx %`@Tw38xYUB?$O:, Û43\DBr*b34;H4>G<zA7-eDq#]ff'tщ%!4/Q/N"GwPQfv(iB5$O*CV"xa󍖥Ay[&9T<*Y慨 t3[~J^K`9,YCfg3+1Br@ϱlIs9JZ;9Jf6PI %fd3bf_5, & z(.G'^ʩ@?U@/^ \O%ii FC>~,!%}ؔzD,"= S裓GN\T =>7Wr i3%lKU9VX٩!KCh^NEP\Nn_N\nx~[2$bV}`_K}|Ay9Aq>:Qrzؽ`f+G8g69K]^ L1B+n3C;s6IxQ!4/ mo8rZ~f{9ܕn4{-p g`lA9B"/_Sl `?`g;\:i r?Uһ%=$H)"IKz9.pp6oNڍn=PB̠/k_ȫxUnqn@BƐ:仒>"Iz\!i>`b{= ͍F4@wP {{Èk:Dr1Br@ofqgr+sz],y-zHrx&G#P+II.0X`#t9t&{(aO-UC teK>;@a$(]fFL};Qcwr+8|=,iw[wP(CKR'gն=cw \tJzwP\ zWt?؃.,b{>% 3=_{0͠ T+=!I{޹ 3!;@I{ȅ-O~Mnr2dk3"T' B$=N+a0B̠c ymVCtw3x;D coUHX(Ct%=XeEI ;s0#,[ bA)Qr:^bifcCPۼc!iDzxa} .wv`9J3Xsqw^gf+xȥ@?;@Uů`%PLB &y(io3[;DEa{qw[>;DF.df'{g GxAFsXQn| ]Ї" u۬]ѭi1lЦϛ\(CH㝣 &;@@q3ҡf5;@rmbf;7oBEgǼs,C \fX/*嶼x?3[;D٫ͼs mZ zn!*m9-Ї$=b88mbf!Sդf.F-;qfp1eU@P0;0mʲ4[y&ЇͬM+ܙQ9{.:H᭘5_`58!%3{;W@,!T4[CvBMnQ:ۼCqU\N~bfc샤:&m?M3m0d:!r}؎<\l6|C b.eO{h-W;W:rtNa y~4miֺM!"i8lCl'C9 s;U!ffFN M}C64ovBMmLel!TM#M9 pw/y_r]w`9)q*7y4܇T&٩]{ɧ~+`rh\ԦlӼi)i]laf~Nxw>M%M7W4Y!df+$Mm_ٗ1!J8X0 p?I`%H!8%mf{z3lwM21 )K'y܇>=f!FNRa~o8<*c{C ,3_f LNVMBlMlF=)iwaЇ{B IדVhEfw&پ׽sҏE?S!QV|9R#r+v%ef L>CC蕙<>T0BJ}AB0 /~gfySQ<<2;DXD[\;NHDH[ .fsч쟼C,`fG51 /J1{ygQK ;GV1ˋ.!t}KHg܆bf\BK_T,-!^gj3kvC3[࿃'!E(F|63H_+}$ ,ƃFa?z3>]C$C{Q!uv?2a`fkٷos}a.P]lkט9c9α\#텞K~3"->\n(Ŀ88X+KlHcq=1J{!͝GIf:,\W/t^W=C|ORv+A7s$)OxxR u |SM(j|'y3Djf_,iJjf[Kzq6f6x#5}J x^mXܼ\C~ |X;Hcf_.492X_kV/ ,vuOIn42H:W]2 [CPQ83 8TR%IlerRQ~W*iw)x%i.`;bcz\IseYvD^=۔bےw"f].3N`ꢝ<3 p#iänV]V'mYH\ |m:zfy`fo~霥p)]Θ>)~L &^\.n=];yCl 5M%}o 3#=)1xEW-ϢKVf`j_#\`q$=bfӍ%m^X='Ӽs= "uҖj1]R]`=c=I^@U{&kdcmKuAPL؏ ʘ*mjf+ԬXAʻ 8;Di,z:OY@4S0zGHQ4 euj㈦V".#dy$-Rֳ7;H#gѥ[%.Zي!BHz 8x|YyCZO4l٤S>*iIumU6Nq{fCY²= F=<B=b44'{`s$LT*X2W4<0,aJZ)8w4WK- JL|] iRBфU#B =,=)"pw2PIב%xs4 ~Ej<`gI(nUe蒞a0j#xP1kV֠C=,g$] l_V&-w5`7ҪVlE&4{AGңą` K3,/ $?NQ∐N75l+$]<%4 8H$wi%fЇH#boES~Be)le`5.%_zKP ;KV=ֆU&`w2xwI3is {u +>4Hܣ{X+C$Rb v* zhL8nZ|J{%|+ekw$`bQOkŕ*$KM%+ ޷8=RNA35U lw08YI3>o[ $ǫ fvTŊ,s/]H!N˥*GIzbIUg zbi@|1JLjFs;D,LQxK) <띥c~Lҗ}UhM tI\5>ΠC08R'YI7! D'BIY^_4Sa$] G Wf`IoH I^I= \(GkP AJw/n^ <%Q7fH:؇h I+);aͶΒ'NW($=AZV%{/nt: J8bmpM&I{&NR?xg@]q^+cmviԛ$M"n`Y2$i֒S4̨ tI$}rP;u pl{D>x<0mR T8X>4=&[#5@ 0p ][CINړqZR TfJ {qzQI>DU \K*I{,iҗKE>8 ܝ؃m;`cI-F2HT q6D!$if} ΑF*@Bv'ͦʑKr5i ؇^y>Dҽl|87𦒎g@t@7_ mP*gKICIQd$b6 \EZ>]:C蛤ْ!iGճux "}%3nJI`&6g>vWz 3 '5 .̔/4P!I5@f<5CoMd}N)LR+u|4Ks=O蹆TS 3;ȡ5FVVMEvO+wyEm@ys:, m.pLb^WC/CH6Oظ8 3ې48i:gƓ nl\6*~nJZ*_"Oߒ1 H]ZGZ54T_W>63{{}Zf7諰twĊvу/`vu?u|ӌ|Ҷ3[w I_({Y_FZl9RsIEo77$=*`fv%}&lhIgA! p[FChRbq?`O֭}4Pw5pɾqB]qMz03>T;](I image/svg+xml astroid-0.14/ui/no-mail.png000066400000000000000000001250261335422170400155710ustar00rootroot00000000000000PNG  IHDR`:2bKGD̿ pHYs  tIME w IDATxO22dd222|2|d2|||g IDAT2|2|d2||d2||2|220TdiM IDAT||d22|222dd||d220T| 0 IDAT20|20||2|0||||2||| *$a IDAT2..<<<<<<4< !<%!0      0 0 #%+< & &1% "" "" & <$  $(( 9  10 - -} kIDAT(BIENDB`astroid-0.14/ui/no-mail.xcf000066400000000000000000000153331335422170400155640ustar00rootroot00000000000000gimp xcf fileBBgimp-image-grid(style solid) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 10.000000) (yspacing 10.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) C no-mail.png2     g?c+7'/7?GOW_gow'/7?GOW_gow ; C K S [ c k s {  #+3;CKS[cks{ #+3;CKS[cks{ 8777++++''''' ' ' ' ############        ''''8777++++''''''''############''''            ''''''''                ////////////++++777777777777////;;;;+3333 3 3 3 + 3 3 3 3 3 3 3 0000 0 0 0 0 00000 0 0 0 0 0 0 0 0  0  0  0  0'0'0'0'  0   0   0   0 0000            ' ' ' '     ////;;;;;;;; ++++7777777777777777 3 3 3 3////++++++++####3 3 3 3 3 3 3 3 ////;;;; ' ' ' '''''''''    0 #0 #0 #0 #+++,;;;; ' ' ' ' ' ' ' '    ''''''''########+++,@xP<(kno mail here.<     x!gimp-text-layer(text "no mail here.") (font "Trebuchet MS") (font-size 18.000000) (font-size-unit pixels) (antialias yes) (language "nn-no") (base-direction ltr) (color (color-rgb 0.000000 0.000000 0.000000)) (justify left) (box-mode dynamic) (box-unit pixels) (hinting yes) 6kNkb^@28==uiߊ!_?ߏ   7 .br zH5- D  ^.7. 52tw ((((B}DDxCCޗp ^2p ^<"" @ b@ bOO5 Utvalsmaske So@@@@eJH%$astroid-0.14/ui/part.scss000066400000000000000000000065611335422170400153740ustar00rootroot00000000000000/* ui-version: 5 (do not change when modifying theme for yourself) */ /* Fonts */ @if not(global-variable-exists(font-base-size)) { $font-base-size: 16px !global; } @if not(global-variable-exists(font-mono)) { $font-mono: monospace !global; } @if not(global-variable-exists(font-sans)) { $font-sans: sans-serif !global; } @if not(global-variable-exists(font-family-default)) { $font-family-default: $font-sans !global; } body { background-color: white !important; overflow-x: auto; overflow-y: hidden; word-break: break-word; word-wrap: break-word; font-size: $font-base-size; font-family: $font-family-default; margin: 0 0 0 0; text-align: left; } .search_coloring *::selection { background-color: #00ddff; } blockquote { margin: 0px 10px 0px 10px; padding-left: 15px; padding-right: 15px; border: 0; /*border-left: 3px #aaa solid;*/ border-left: #5555EE solid 0.2em; color: #5555ee; } blockquote.level_001 { margin-bottom: 0px; margin-top: 0px; } blockquote > blockquote { border-left: #425c78 solid 0.2em; color: #425c78; margin-left: 0; } blockquote > blockquote > blockquote { border-left: #729fcf solid 0.2em; color: #729fcf; } blockquote > blockquote > blockquote > blockquote { border-left: #5555EE solid 0.2em; color: #5555ee; } blockquote > blockquote > blockquote > blockquote > blockquote { border-left: #425c78 solid 0.2em; color: #425c78; } blockquote > blockquote > blockquote > blockquote > blockquote > blockquote { border-left: #729fcf solid 0.2em; color: #729fcf; } blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote { border-left: #5555EE solid 0.2em; color: #5555ee; } blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote { border-left: #425c78 solid 0.2em; color: #425c78; } blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote { border-left: #729fcf solid 0.2em; color: #729fcf; } blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote { border-left: #5555EE solid 0.2em; color: #5555ee; } blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote { border-left: #425c78 solid 0.2em; color: #425c78; } blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote { border-left: #729fcf solid 0.2em; color: #729fcf; } blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote { border-left: #5555EE solid 0.2em; color: #5555ee; } blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote { border-left: #425c78 solid 0.2em; color: #425c78; } blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > blockquote { border-left: #729fcf solid 0.2em; color: #729fcf; } astroid-0.14/ui/thread-view.html000066400000000000000000000042671335422170400166370ustar00rootroot00000000000000 Astroid
astroid-0.14/ui/thread-view.scss000066400000000000000000000512731335422170400166450ustar00rootroot00000000000000/* ui-version: 5 (do not change when modifying theme for yourself) */ /* Variables */ @if not(global-variable-exists(background-color)) { $background-color: #ccc !global; } /* Background colors associated with received emails: */ @if not(global-variable-exists(recv-normal)) { $recv-normal: #ffffff !global; } @if not(global-variable-exists(recv-quoted)) { $recv-quoted: #e8e8e8 !global; } @if not(global-variable-exists(recv-collapsed)) { $recv-collapsed: #f5f5f5 !global; } /* Background colors associated with sent emails: */ @if not(global-variable-exists(sent-normal)) { $sent-normal: #ffffff !global; } @if not(global-variable-exists(sent-quoted)) { $sent-quoted: #e8e8e8 !global; } @if not(global-variable-exists(sent-collapsed)) { $sent-collapsed: #f5f5f5 !global; } /* Fonts */ @if not(global-variable-exists(font-base-size)) { $font-base-size: 16px !global; } @if not(global-variable-exists(font-mono)) { $font-mono: monospace !global; } @if not(global-variable-exists(font-sans)) { $font-sans: sans-serif !global; } @if not(global-variable-exists(font-family-default)) { $font-family-default: $font-sans !global; } /* Colours */ @if not(global-variable-exists(email-solid)) { $email-solid: #d8d8d8 !global; } @if not(global-variable-exists(focused-solid)) { $focused-solid: #4a90d9 !global; } @if not(global-variable-exists(sibling-color)) { $sibling-color: lighten( $focused-solid, 20%) !global; } @if not(global-variable-exists(attachment-color)) { $attachment-color: $sibling-color !global; } @if not(global-variable-exists(mime-color)) { $mime-color: lighten( #FFFF00, 15%) !global; } @if not(global-variable-exists(encrypted)) { $encrypted: #99cc66 !global; } @if not(global-variable-exists(signed)) { $signed: #cccc66 !global; } @media print { body { background-color: white !important; } body, .email { font-size: 11px !important; } .avatar, .button, .starred { display: none !important; } .email { display: none !important; } .email.print { display: block !important; background-color: white !important; clear: both !important; float: left !important; } .email.print .body { display: inline-block !important; background-color: white !important; } .email.print .preview { display: none !important; } .email.print .tags { display: none !important; } .email.print .subject { display: none !important; } .email.print .hidden_only { display: none !important; } .email.print { border-left: 0px !important; } .email .header_container .marked.icon { display: none !important; } .noprint { display: none !important; } } body { margin: 0 !important; padding: 0 !important; font-size: $font-base-size; font-family: $font-family-default; // -webkit-user-select: none; // -webkit-user-drag: none; text-align: center; } a { color: #08c; } td, th { vertical-align: top; } hr { background-color: #999; height: 1px; border: 0; margin-top: 15px; margin-bottom: 15px; } .body, .header, .preview { -webkit-user-select: auto; -webkit-user-drag: auto; } .shower, .hider { -webkit-user-select: none; -webkit-user-drag: none; } .button { border: 1px transparent solid; border-radius: 2.5px; cursor: pointer; padding: 4px; margin-top: 7px; text-align: center; } .button * { pointer-events: none; } .button:hover { border-color: rgba(0,0,0,0.18); box-shadow: inset 0px 0px 1px rgba(255,255,255,0.8); } .button:active { border-color: rgba(0,0,0,0.20); background-color: rgba(0,0,0,0.05);; padding: 5px 3px 3px 5px; box-shadow: inset 0px 0px 1px rgba(0,0,0,0.05); } .email { font-size: $font-base-size; /* border: 1px rgba(0,0,0,1) solid; */ border: 1px solid $email-solid; border-width: 1px 0px; background-color: $recv-normal !important; color: black; /*font-size: small;*/ /* box-shadow: 0 3px 3px rgba(0,0,0,1); display: inline-block; word-wrap: break-word; width: auto; /*margin-left: auto;*/ /*margin-right: auto;*/ width: 100%; /*min-width: 48em;*/ box-sizing:border-box; text-align: left; margin: 3px 0; & + & { margin-right: auto !important; } & > & > & > & > & { font-size: 90%; } .email_container { .header_container, .body { border-left: 6px solid transparent; } .email_warning { padding-left: 6px; } } .attachment_container { border-left: 6px solid transparent; } &.focused { padding-left: 0px; border-left: 0px; /* box-shadow: 0 0 0 transparent !important; */ .email_container, .attachment_container { border-left: 6px solid $focused-solid; .header_container, .body { border-left: 0px; } .email_warning { padding-left: 0px; } } } &.hide { background-color: darken( $recv-normal, 5% ) !important; padding-left: 7px; border-left: 6px solid transparent; .email_container, .header_container, .body { border-left: 0; } } &.focused.hide { border-left: 6px solid $focused-solid; } .body { padding: 15px; max-width: 60em; } } .email.sent { background-color: white;/* sent-normal */ } .email .starred { display: none; } .email .unstarred { display: block; } .email.starred .starred { display: block; } .email.starred .unstarred { display: none; } .email.read, #multiple_messages .email { border-color: rgba(0,0,0,0.4); box-shadow: 0 3px 11px rgba(0,0,0,0.21); } .email.animate { -webkit-transition: border-color 3s ease; -webkit-transition: box-shadow 3s ease; } .email .email_warning { display: none; padding: 1em; background-color: #fcc; text-align: center; } .email .email_info { display: none; padding: 1em; background-color: #8CE7FF; text-align: center; } .email_box { box-sizing: border-box; -webkit-box-sizing: border-box; width: 100% !important; } .email_container { overflow: hidden; } .email_container .header_container { padding: 15px; } .email_container .header_container a:hover * { color: #08c; } .email_container .header_container .button_bar { float: right; margin-top: -6px; } .email_container .header_container .button_bar > .button { float: left; } .email_container .header_container .button_bar > .button > .icon { width: 16px; height: 16px; } .email_container .header_container .preview { /*font-size: 8pt;*/ font-size: 0.8em; color: #777; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; margin-left: 48px; } .email_container .header_container .tags { /*font-size: 8pt;*/ font-size: 0.7em; color: #31587a; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; margin-left: 48px; } .email_container .header_container .subject { /*font-size: 8pt;*/ font-size: 0.7em; color: #000; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; margin-left: 48px; } .focused { /* box-shadow: 0 0 10px rgba(71,71,173,1) !important; */ } .avatar { display: none; image-rendering: optimizeQuality; } .avatar[src^=file], .avatar[src^=http], .avatar[src^=data] { display: inline; width: 48px; height: 48px; float: left; border-radius: 5px; } body:not(.nohide) .email.hide .header_container .avatar { width: 32px; height: 32px; margin-right: 12px; border-radius: 2.5px; } .email .body { border-top: 1px solid $email-solid; margin: 5px; margin-top: 0; padding-top: 25px; overflow-x: auto; overflow-y: hidden; .body_part a[href*="//"] { word-break: break-all; } } iframe { border: none; width: 100%; text-align: left; float: left; display: block; } .email .remote_images { display: none; margin: 0 16px; border: 1px solid #999; border-bottom: none; padding: 1em; background: #ffc; } .email .remote_images .close_show_images { float: right; margin-top: -0.67em; margin-right: -0.67em; } .email .replaced_inline_image { max-width: 100%; display: block; margin-top: 1em; } .email .link_warning { display: inline-block; position: absolute; margin-top: -1em; border: 1px solid #999; padding: 1em; background: #ffc; box-shadow: 0 3px 11px rgba(0,0,0,0.21); /* Reset styles */ font-size: 0.8em; font-family: sans; color: black; } .email .link_warning a { color: #08c; } .email .link_warning span { display: block; padding-left: 1em; } .email .link_warning .close_link_warning { float: right; margin-top: -0.67em; margin-right: -0.67em; } @media screen { body { background-color: $background-color !important; } body:not(.nohide) .email.hide, body:not(.nohide) .email .email.hide { background-color: #f5f5f5;/* recv-collapsed */ box-shadow: 0 2px 5px rgba(0,0,0,0.12); } body:not(.nohide) .email.sent.hide, body:not(.nohide) .email.sent .email.hide { background-color: #f5f5f5;/* sent-collapsed */ } body:not(.nohide) .email.hide .body, body:not(.nohide) .email.hide > .attachment_container, .email:not(.hide) .header_container .preview, body.nohide .email .header_container .preview, body:not(.nohide) .email.hide .email { display: none; } .email:not(.hide) .email_warning.show, .email:not(.hide) .email_info.show, body:not(.nohide) .email.hide .header_container .preview { display: block; } .email:not(.hide) .header_container .tags, body.nohide .email .header_container .tags, body:not(.nohide) .email.hide .email { display: none; } .email:not(.hide) .email_warning.show, .email:not(.hide) .email_info.show, body:not(.nohide) .email.hide .header_container .tags { display: block; } .email:not(.hide) .header_container .subject, body.nohide .email .header_container .subject, body:not(.nohide) .email.hide .email { display: none; } .email:not(.hide) .email_warning.show, .email:not(.hide) .email_info.show, body:not(.nohide) .email.hide .header_container .subject { display: block; } body:not(.nohide) .email:not(:only-of-type) .header_container, body:not(.nohide) .email .email .header_container { cursor: pointer; } .email:not(.hide) .header .field .value, body.nohide .email .header .field .value { cursor: auto; } body:not(.nohide) .email.hide .header { padding: 0; text-align: right; } body:not(.nohide) .email.hide .header .field { display: inline; margin-right: 2px; text-align: left; } body:not(.nohide) .email.hide .header .field:not(:first-child) { display: inline-block; } body:not(.nohide) .email.hide .header .field:not(.important), body:not(.nohide) .email.hide .header .field .title { display: none; } body:not(.nohide) .email.hide .header .field .value { margin-left: 0; } body:not(.nohide) .email.hide .header .field .not_hidden_only, .email:not(.hide) .header .field .hidden_only, body.nohide .email .header .field .hidden_only { display: none; } body:not(.nohide) .email.hide .header .field a { pointer-events: none; } .email:not(.hide) .remote_images.show, body.nohide .email .remote_images.show { display: block; } body:not(.nohide) .email.compressed { margin-top: -1px; height: 10px; } body:not(.nohide) .email.compressed + .email { margin-top: -1px; } body:not(.nohide) .compressed .email_container { overflow: hidden; display: none } body:not(.nohide) .compressed + .compressed + .compressed + .compressed + .compressed + .compressed + .compressed + .compressed + .compressed { display:none; } } .email .compressed_note { text-align: center; height: 0; } .email .compressed_note > span { display: none; padding: 0px 10px; background-color: #f5f5f5;/* recv-collapsed */ position: relative; cursor: hand; } .email.sent .compressed_note > span { background-color: #f5f5f5;/* sent-collapsed */ } body.nohide .email .compressed_note > span { display: none !important; } .email .email { box-shadow: none; margin-top: 0; border: none; border-top: 1px rgba(0,0,0,0.4) solid; background-color: white;/* recv-normal */ } .email.sent .email { background-color: white;/* sent-normal */ } .email .email .email_container .menu, .email .email .email_container .starred, .email .email .email_container .unstarred { display: none; } .email.hide .marked.icon.first { display: none; } .email:not(.hide) .marked.icon.sec { display: none; } .email:not(.marked) .marked.icon { display: none; } .email .header_container .marked.icon { float: right; height: 20px; } .email.hide .attachment.icon.first { display: none; } .email:not(.hide) .attachment.icon.sec { display: none; } .email:not(.attachment) .attachment.icon { display: none; } .email .header_container .attachment.icon { float: right; height: 20px; } .email > .attachment_container { padding-bottom: 10px; } .email > .attachment_container > .top_border { border-bottom: 1px solid #aaa; height: 10px; margin: 0 16px 5px; } .email > .email + .attachment_container .top_border{ height: auto; margin: 0; } .email > .attachment_container > .attachment { margin: 10px 10px 0 10px; padding: 2px; overflow: hidden; /*font-size: 10pt;*/ /*font-size: small;*/ font-size: 0.8em; cursor: pointer; display: inline; background-color: transparent; border-width: 1px; border-style: solid; border-radius: 4px; border-color: transparent; &.focused { background-color: lighten( $attachment-color, 5% ); border-color: darken( $attachment-color, 50% ); box-shadow: inset 0px 0px 1px rgba(255,255,255,0.8); } } .email > .attachment_container > .attachment:hover, .email > .attachment_container > .attachment:active { border-color: rgba(0,0,0,0.18); box-shadow: inset 0px 0px 1px rgba(255,255,255,0.8); } .email > .attachment_container > .attachment:active { padding: 3px 1px 1px 3px; border-color: rgba(0,0,0,0.20); background-color: rgba(0,0,0,0.05); box-shadow: inset 0px 0px 2px rgba(0,0,0,0.05); } .email > .attachment_container > .attachment .preview { width: 52px; height: 52px; text-align: center; vertical-align: middle; } .email > .attachment_container > .attachment .preview img { max-width: 50px; max-height: 50px; } .email > .attachment_container > .attachment .preview .thumbnail { border: 1px solid #999; box-shadow: 0 0 5px #b8b8b8; background-size: 16px 16px; background-position:0 0, 8px 0, 8px -8px, 0px 8px; max-width: 150px; max-height: 150px; } .email > .attachment_container > .attachment:hover .preview .thumbnail { background-image: -webkit-linear-gradient(45deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%, transparent), -webkit-linear-gradient(-45deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%, transparent), -webkit-linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.1) 75%), -webkit-linear-gradient(-45deg, transparent 75%, rgba(0, 0, 0, 0.1) 75%); } .email > .attachment_container > .attachment .info { vertical-align: middle; padding-left: 5px; font-size: 0.7em; } .email > .attachment_container > .attachment .info > :not(.filename) { color: #666; } .attachment .encrypted { border: 1px dashed green !important; } .attachment .signed { border: 1px dashed orange !important; } #encrypt_container { display: none; } .email > .email_container > .body > .encrypt_container { display: block; clear: both; vertical-align: middle; text-align: center; padding-bottom: 5px; padding-top: 5px; margin-top: 5px; margin-bottom: 5px; border: 1px solid black; color: #333333; } .email > .email_container > .body > .encrypt_container > .message > span.header { color: black; font-weight: bold; margin-bottom: 2px; display: block; } .encrypt_container.encrypted, .encrypt_container.encrypted.signed { background-color: $encrypted; } .encrypt_container.signed { background-color: $signed; } .encrypt_container.verify_failed, .encrypt_container.decrypt_failed { background-color: red; } .body_part.encrypted.decrypt_failed { border-left: 0px; } .body_part.encrypted, .body_part.encrypted.signed { display: block; border-left: 5px solid $encrypted; padding: 10px; } .gpg_error { border-left: 5px solid red; padding-left: 5px; margin-left: 5px; } .body_part.signed.verify_failed { border-left: 0px; } .body_part.signed { display: block; border-left: 5px solid $signed; padding: 10px; } #sibling_container { display: none; } .email > .email_container > .body > .sibling_container, .email > .email_container > .body > .mime_container { display: block; clear: both; vertical-align: middle; text-align: center; padding: 0px; margin-top: 15px; margin-bottom: 0; background-color: lighten( $sibling-color, 15% ); border-width: 0 0 1px 0px; border-style: solid; border-color: darken( $sibling-color, 20% ); border-radius: 4px; color: darken( $sibling-color, 80% ); .message { padding-top: 6px; padding-bottom: 6px; font-size: 90%; } &.focused/*, &:hover /* click not supported yet */ { background-color: lighten( $sibling-color, 5% ); .message { border-color: darken( $sibling-color, 50% ); } } } #mime_container { display: none; } .email > .email_container > .body > .mime_container { background-color: lighten( $mime-color, 20% ); border-color: darken( $mime-color, 20% ); color: darken( $mime-color, 80% ); &.focused/*, &:hover /* click not supported yet */ { background-color: lighten( $mime-color, 1% ); .message { border-color: darken( $mime-color, 50% ); } } } .header { overflow: hidden; font-size: 90%; #Tags { .value span { padding: 2px; } } } .header .field { clear: both; overflow: hidden; /*font-size: 9pt;*/ /*font-size: normal;*/ } .header .field .title, .header .field .value { float: left; padding: 2px 0; } .header .field .title { width: 6.0em; text-align: right; padding-right: 7px; color: #777; position: absolute; } .header .field .value { color: black; margin-left: 6.25em; max-height: 5em; overflow-y: auto; } .header .field .value a { color: black; text-decoration: none; } .header .field.important .address_name { font-weight: bold; } .header .field .address_value { color: #777; } .geary_spacer { display: table; box-sizing: border-box; -webkit-box-sizing: border-box; width: 100% !important; } .signature { color: #777; display: inline; } .signature a, .quote_container a { color: #5fb2e7; } .quote_container { margin: 5px 0; padding: 12px; color: #303030; background-color: #e8e8e8;/* recv-quoted */ border-radius: 4px; } .email.sent .quote_container { background-color: #e8e8e8;/* sent-quoted */ } .quote_container > .shower, .quote_container > .hider { color: #777; font-family: sans-serif; /*font-size: 75%;*/ font-size: 0.8em; cursor: pointer; display: none; } body:not(.nohide) .quote_container.controllable > .shower { display: block; } .quote_container.controllable > .hider, body:not(.nohide) .quote_container.controllable > .quote { display: none; } body:not(.nohide) .quote_container.controllable.show > .shower { display: none; } body:not(.nohide) .quote_container.controllable.show > .hider, body:not(.nohide) .quote_container.controllable.show > .quote { display: block; } .quote_container > .shower:hover, .quote_container > .hider:hover { color: black; } #message_container { /*position: absolute;*/ /*left: 0;*/ /*right: 0;*/ /*padding: 0 5px 0px;*/ /*left: 50%;*/ margin: 0 auto; display: inline-block; width: 100%; max-width: 60em; text-align: center; font-family: $font-family-default; } #multiple_messages { display: none; text-align: center; } #multiple_messages > .email { margin: 100px auto; display: inline-block; width: auto; padding: 15px; } #body_template, #email_template, #attachment_template, #link_warning_template { display: none; } .search_coloring *::selection { background-color: #00ddff; } .draft_edit { display: none; margin: 16px; text-align: right; } .draft_edit_button { background-color: #e8e8e8; }

_T贿ML'. thSN]/.Oaq 9d1sWDK+menZ_5Ext2mD,(Q36FmB +*!oWG0a)EH9zeiZN6!3p'LOX|UѪ xa2vIyxL[fHFsɮPt!UHG""Ft{jS!eA1]_?E,e˖-[lٲe˖%1)t]׀Y2pYC;LsGvU{=ã;$$(%@"R[1FDX r";B'h$&SPKZOohĩ@6!=DWb1db͘%j1N &_k*8A<$L0 3f.a5hъQ_Rv(O{-snPcyqݛ =E$݄(ܼcB!eCMS >BKU֪UUzFA)증*]ҩ\.O3f-[lٲe˖-[lW1>^,K.Zu)*9BÉb\̸ 8aUR"fF!b#R8΢\%:HCxɣHԆTWcN S ?UUlEx$CDD \r.((v&@7 "у^=f |ܺI 7-ߙ-[%\?_wd'}W|xΕ}x/??.O~֋o/p]t|rw?'o䎗-[lV0V՚@c.XԈߧmNf: T,ABH_rNbX %k VmⷵėhM 2CaYUc*"?]P".DID{!m]%Hs[1%p_br[-ah/4d9\ZA X2ɯ kb1HXHP1!=0)۾u)j߾`a%Wb/ֽ-3MK)ߴ s{h9 0uVZI] ̶Y.c_?]?| N8ɖ-ۥkw߾ݣ@)6;{{;[[=#ūN<~t|^\JvoϿ_>OzGίn>\^#߻FD_f ߺyo=:+dߘQύ ŋ@llmmmm]ں&:/>}^6s+ԖNO=z&/[lٲena9PQyVa¶%7+IURɷF`PLq^lrĆ\7)jWU,b@!3]skMxNr1UL&2Q$`,!ݥTjUZ""Cz6G(4Q@ ,؏]l)l(Krt%bQu-l>Yu]Kr8zv=jB..s+;!< ?G["b&a1bHaLQ̬-Kkmim֥D0ԥuۄiT/q覮9G0{or_f lY9&"!(nb]I yV rcUn/3Oٲ]E^z.W^|Ƀ4n>[K훽ͭ֍۷φ6^At~zҟ>zzͷ|cKj[7[{_?;干}tEbKCێwn†A6|c/~q]v7/w>xէغqs;~owlٲen5g m2b ,׻j16 ~ߕ!3%KuX W&3ZH%dUةVGا by6GA8/Tz.ϛ 1O1F?r.ٓIU-Yb*)٣IAM]T2wY豺Aȣjx bYq]yIZrD@1 sJp3LBUa&*`U0K2!#^6et.eiC-[ћFeJMk_a4/u\J*qcv%fg ޿;?Q52oxr'lٮ|'C=7o7d7е髳O_{w67?z_~m8=>?׋[r/[lٲZmy: t o8Vt4l9TFZQ~QYԌ))L|s4kTɝ<* r@RL$,Ƙ(:bP`VUݟ)XRM[,è)[F@x̻[JM*5O=NSpf+"ʶ:S_ /vyaLl8T5ھϖ-5v u>`H'޽&e_(6~_Nw~kBDP*[O "ŷ7>y{{=aF4o}x:=%֍=?;`R ڨu߻N?=y>}ʳt֍roy'DgO/ݽÛ|Ï~ʨoakk{xz "._=;{q}{Ӑx~^7>~mSŸcm &fso9Y񓳷wv{7w9{8:~?2[DgO6FvdwgN7z "J;^l^O7^6zg stÖ|rzR٩T3=M.$rS;<1got>ϰR8VlwEUKQI}Hq|Ff#D,l[j_m_6c ;8wKR-Ci#ZlCUU#Dnߧt$XIG[:-_&ٲvo/}prއll;77yޓvںO_Zܻ{v' jyܺ&d|T\yw\W^/ɻ7gw6ʓxrѥ";;DfgwE"*;@C/ϟ[nvw"7$DxODONk7^ ݽ_y_ gꙹᄏK\kwۑ_K˽Xwvއo0]|WJ\lzw~gkf7ʓ'Oi7QD:]ND*|ai˘=I06q}wolQቮe˖-[4'Gs\vh\tي-3J+Zj5 Gt*`CdA b#"3,D$bqq,H PQh&J_DīvK'L5Zs38^d(K` @H̬^!j$8/OOeGd6%2X.rOUam(lkZ|)J!} 8=4{ XSJ+LA̐ȅ\°1֖)fr$n܃xە/\ V,/aBH< /LB!oUE`z>|w~׼q/>?c?ӾQok??)G͟\g; }r ٲ]m+O=wx/oybO=}ugǷz7޼sMwd{BSʗG~Z|kcsn__|}Fwk/x{{"u}!ҧZS&tqs}s]޹N'{铐QQ>9.oڼygi5oՓQ{{QO>]]<Najrƽ-&g>u$<;,#FyztbW5r68:FQH  ,^W7]e˖-[Koøsm-S.QuYn5aɾ®$Etn*p'Z]8qxm;hhM sXKcCYݚA~!BJBRtR(BfQUU%& H+ԓ?cyNfl}GHwfGcr.UpY: nQU#tKEE{P|!Df1qҥfcE08*f$YNMye[D[aSp^T~E?/cN1F7l<=ջM#KTK,rG~/1"lT[Q D')pcA՟k|fX|yD-{L=֓hclkLr%uN0#91{벷k]??7WlOz_ϲeskcg';{ׯ /~wZG>7ggnZqog[cnU/G777{WXSʲfٳ~܂A7v`zCDe "."k\Y۽<;MބxW`;i'-k}!9.Β#==:sps㪨ol†TVE~h,o~pr*-[fb)lrբ:57?Oyl[va 8l9rxGf'qش&MLj2xm^ԅ'Q)FSvhų'C o2fq¼QȸLBp1J`!5U̠`OPXUZVDjiK:fi) ouJf$Iw~[6,Dhz>:͍t(ooT?Y 1_yZ!{[ϟGt5ٲ]5{,UG) ųA*ų ]ޣ>-&ODg^5ڢXjOǷ7{>>=C{~xk?mLۻӓ:}[Jd( ]Ы=<$ǩL(_ܾ')$Wo\}?>:=}vNzQ&Mw8?x~vF74{(Dt~tr>OMossk7n~קxٲe[XCwt6xیNݒW#li1 LSA<õrX SP:C\U.T ;_DYWB 3 IԸy3 >'8e4@ !֠/m-uԨF9oK`)"2G%1s˙Eti r_ܰY~[u.V˪.CZIMKFYU-˲_>e$sH\iH|\k2K|dqRaMI֌)!ƩpSV#ϲ<9qoq?}nGԻM0PV͖튚m!R ]r԰~]hzQp"mEEf}"'ILI,yg~v ~/[|c=;ro %2$FAG>[[qϿ8S)ٻu GǍϟss"`?z7woIӣǏA8pv/ZJ}|N[f9-}=y-D^qlWOO[y,/[l*-= רN"n >jٖu{ѾXv8u@hٖI2S$$Iop@V$$`Jkt5K`T#e EIp1KuKUUR/"ßN+~Lp% ڵaD0Pm&d1r^jimj 3Sd,UbZ?jE왇Gs)]P0 m=1eN{6ٿKqb˜B|aZ/ˋXP73&fk!k%˙ {Ɇ [r]aR5?1Պ7'hx'zJ^5Cɧ8EB8a%7{eo1m?7z{[lR\lxOo/9el44n0V97vw6x}h 3Nw *~_dw3'qrA"2{[˻sxQkOx`ww{g{Zoƭ޹/;V?|9Yo;o<;:ߺۻyPwnMN;W<}1X8i9*_-sG߸5mp9ջ;<}pGD;yҕ/8y7ѓ`U"À#,ilxw@\"ÐlomdXSv‰茌8uWDcc#[}ly ԧL: <-ߏT;Llpr)@J"cȂ94o@ք¼F$M{PrJ|O/V|@Q%Zi#I#TƫCN{#5Ev)R%}лMGE yKh8k\zZ7xG=C"Y6 $FKZߵ~.@^Us*׵+"Jf竂IJH%,2E@ÖG߳ H*LmrhUmGiM?QVjO]Z~~]}dWvUQOmwy.ݠ ÷q%JX9szMlpED[[ 4|JYʼn3[wޙ3"§b7:wg>S?u}77'v_ήTk+Ȍ|O߾xٞG;'ʊH\t";o1]̛/:qoNx6o'S&3gkѬ`6)8yyc:szL16>xsV]xXxSΞęgzQչs'E?y|3r-VCx%J8xVQ]}ϸKޖG #R`y~0Sr;N"cG6 Ja^#'o)ɩPe$CU:@!izr@?fyy3ZFkpabWpW&e`8s*uA5V)Q,]iGg<3)G`} ȢZ6݌i4ծ䥞YY*;ᡪUU9s*P3?f^̓ʅ՗2#5.MCz_SrAcO1VQY h<FvQ 7ꚺ9sՊVjꭸj9ut@?_;[Acf{bs/?zG?.4H,Q8qڹ=jA?+DӼ^m?/3WQ[hԝv4DyvU4|s?_?NtrQO:)ǠFz'z@sWEv׷;N擧OHɓ]t"KN^tͧdiʔ87[l`ۅ zڕo1]5{ ^_;uΉ= IDAT>ڗt򴞿fxWΈ߸h_u "OR]E_;y'"̓x%J(Qb&3lrgŸL3\3yL{# [rbq$ma4=;E,Ϲ׍ܝ8bh UDSVSԋ8:0kt aT]SZW19stQi61(RLږ-،3{1e*KfrVN3Z\}]#0]1ܲXh!ih|mHJ ukoylpZ(CIK6?xcKz{i3aW"< ;&pǴFN9C8ә&tdxʿB#͝ )vmZC)ATQo*I՞bUuͩUjZ _H\sjo?v̬Jnco 򺢟81nmcH.Q0KQ͇^^='͢fnzzSkW>?篽 "|r듄{믿t ޝϽ~ak76~)>yTN!z$h[{~_+7$J3okέ?&xNN\tBDO'dS}Eο޿p}vSD]yI?j [r~ms>LaL:[]~䋟} z.ڍ37jb/8y='>GΕ7zӯ7];W[ z/zVdViNմqU*Ho|΃onnk3jeԹKW_S{z8x^%e G\ ag1GJ>P@ݙ@5}1C҄`"eYI'e1/{ՉOI|LnIt'Jb煉昙2ػhj74} d\<']^Rt,"ϓ$hBEdAeJAS DF0KIj eBӤ!3`hd׊e4! ΄:uXhK `T"xIeTkĈf3㞝)$[[mr%\$"CVSzͩVI)^HwE vk>h}Զ+?'=()VL4+ݺ1ȋu7d>2,#s.hN5 CvsۄEއqסX"o;yi@ C#͚3܊gƯې<ґiCs4jV"*k#^B\(gdGJ*D*CP*UӪrN]_UU`Qj?xO_\?xoDs4_>sĹs[wq""zg>m̛ېʹs'DG#lqJ?|x?VXtqUDw?\zԩs=Z7]9}KEhump̞zfҷ}zS?(?Xk;2mz?깕78՞9~[W^:u26r<NG)䣷?Z{ ̅W9soOm*g_/v!//ǯw]\p+c~z睟כ;J(Qđ%/'9AZD #:73Fvwpv|2|(pʼ4)D j)ѷq,ǞxU ^L$ >i! n&ͮn,elv؋@UQ{3b u !M`[YM<,˜eȐ9l^-w$*_SzEg>.pљ$)%G*Į)G ed;ϒ*Yw0E<,:iz=5xagtK~b\8*Ip<9nк VTr-8a<_J=l6IJCM.v#;?ەdIzHOG k`ꀞꊫV\ӨZU"`SSxH-R{Dڛy[+Uo=WjU#pCw9UKSX?nW(Qb'Ǜׯ^9v?sփQT_v™Sk+Xl=}vݙ_ <|߻{3/\|GOye}N_rv ;J^ i#q…>t'"6Sn9sɵ^rom=xx3i[oɋ.;9j`#{ۗ_|ԉJQo?Yp ҕziz}Zn6/]r;O޻}Ӥ۹OΞ;{zm*UZ=|޽mD%J._ uZUV 0c>w`iGw=Cl#xcngf7*&3-;Wl*A6X  m871X]%76#s \ L{UC>izU?u\OSU2у,3oŹ6(EF%80յWj[UO\[3|?}6+аYOD :U5NfF҂nfE/I޼^Uϛ y=ij'7BX =Jv{}i31I~!3\.r?aV(:̔4Mmޣ\mj֒Nnd$dZ u@bO N:꠪@uګ\UU.QKoa}]f0BգVSuz[֪^\rZC{WmY "}g3%J87om\zkg_1W?wbm,gлxR%O踏ce(QDe2mhCS!n(1yCheX R@ʦA3RTr@&K&$*2_ 􁖷fT&fAt #45B TL-{˖/[ћ76k*_+xkψWp]HvL,Gf"k]B0bU+DUPyi\PD\=0 eځsDղ+?0t,$hex"/j> E&42!UлVfS׃ b,+8qh|*i0 k3Д%⍞6V{$מ^&WX Tl|Bh[ξoF[U(Qw^8{K77Σ۫ܺ9x$TԕkgaOn~ȗsq2J(Q⹍Ctv(Ty OX[3k30Gg.0&qcnF[E94R !ED*q FORaFNL٨ՊĒj!3FI$ڀZNUZIR0phO܂r [ro; yICz6ME ]^֞n^;xO?%+P9@iKGq͐͘짙窕 Ym̓u^ms~~oKOZzΆaQoQ"?6 yihmkxig H[ɦ΄-{P QUZXHzUu*'p:DCD'TT4r:Xa۽ 'PhO2 ƾ 0hjO᪊Bۘ7y`YO߷{X(Q[`g{9<}Rn~^ܘ?6QWDiOG~ vZ0 fϭ<h5ƶ#Tgx?0U]P9Myu hF跜* D d$ڦDE(YLIJrU]U9s.w1Gax|] scbä6iI$ZȎی1YaA6qy%su]- d\N:J`u M¼$̔PhUVU%f}]$ EBH`(1>Ҋ6DݔG5zTJ{{8#6mƖe,-QXH״o@hHd3 W^Hv`J5/A潯zЯޛڛQhMZyPף:QG“Ϛ*dMм *wt%-y2K(̄z#ҖR(D%JcMH Xle{Dnh3p{#1GvHm$UC/&AUC[PJUF-=#ҷEh֜S)}T7ilf &r&-H16o4oV@"” U= j5ة [h;d̦Iݠo\'sӽq?HmoScCq =`& g.]jيvhɎܾ0B%W\98%6?u=SD-{}7d|.$8Y+y,xFM>a"AM]nԌ%CS.'Z۫V"`4|D\wTUN$T55Y-SVESUNH'Ե EibQ0{oޛ&iBJۺ&QTu\^:(pD93=YWY6Ek-XRśwx%J(QD%JmˑvxܳߙekQ6e<ٔ©/QD%J(QD{~;o3\Qy7 #4blNZE8Q%I*Uf?90T@*ޛ7Kj4 '3!$2oy!SJB(A Wu.5̚ڄ˦reZ#ޣk{i o'ry(1W<[;!! bsR0n 6NʆR@b;DՓoI2pA[ì?eXF5NCj0b[ qOBIUd+7,v",/fɓQdFSXjtuЎ븈RP0P[`HJ Ȥ6ܚ@ms+*#zh媪!^8`f^LTO !'͠%g}ʂdX:mM!̴9q7ʌmDJFX*Cr-52dBdkIؙCT$jcehfB-*Ɲi^XT Yj;̠^ZW/nSkDMn^,PR#T#ne.G.%J(QD%J(*U>w?K̇[Hg!Ə D%If_%6 eR\VESDB6UUO16{hԸBF޵W)8 "b1 gQF& wU"ZS'œA|] C*҄`K#GfJ[rYrQ4ûB-sgr.<͹7J5n̤K7&rD=J2EmޛzkPۉ"fvN;>^.ĪYd]`WV]ІgxhK-}n(ZF3˰Db$SW]QЮF+ʸhDT$euXY@:+h4"YoM U]f[؀捵'iAV&I1 n`ҕ +Hm: G \.T6Ըy-_Gz؁r(03bco1p{v69_t.ʐ"ͼ1!%©)F1ڥF,&טi& Y@PRMȖY )R9GՊ$ɁyOk+RZ. Ytf'딳nI9:GEGGB5QvȅVXN8뒺liN͹59šEKvyE* ngzz8wxI ` ###T}1.5ߑtlϹYnD~dݱ0duH6yP ֒)P=P"Ї,I!.^geLʲ(>G,%%Thpϸq2ydQپH&5xQ@(4I,ESrΉV&n`? &_yK Z(R1مw0&GQvD@ry\WŷD%J(QD%Jh>gF`8bb~͛/tvX5״c*4 1{g"/̵!o=ރ%w`d{pLŷ3&.<</W`Cޢ c[jnnEY-|i"ʴ5Y8pEs_0x\pc)ǶM8J6'L-7,%dގC`W4_+RWuşTj2 [L&' A> T "yof޼yͼbP=<$r%!w2U+ iU窪Z X]fu %cшOd5 }"p/>e,K(QD%J(QD;p ;XBfpo4c6A )IY[ph=,! v*cz SHB>)4* 3[DY9v*o-0!TjJUe"Щ ,P"%b{٘4z9}4rf,-},L} TUz`~`ޛQ50p Z%%~sQbǁI.M|#R$NB-"Kd8*<9 NPSe\FwX*j6BIHZK YF{/V#xƮU X;, ӌx*~\O](jOy%Ѻ:b0J]y0@ב& e*%J(QD%J(QIK=fn׍pg8US6ܲkFL 5ڃ IÐ)Q+`4z*4E51tTRW-:sud$&e")$ĶZQJNRTչ^8hioTd#;Quqr`ekЌHjL`r{e-CO /-.9&}ߩ{ EA2D*5c~a+xIQ덣9e= }z]Pl$D4i+j=lܫ$f>0KJc_JAt 3H2>Xe&U jY&,a/I6"UQӪ窕X&5O׬V[x`J Av@,oY(QD%J(QDRG }?R=t.oSs2*Q,o<s-&rOQ1tҸ<)A6֌_u73"ojԘ clT/!R@҅omWjEBEІ ^y#ڱZL_-4z,H KuG ڌU\Ћz$UAN&{~;bEL6[@klG͘%k+h|\媪¹G*"0o%b|1$X蹫AQ6%R,o׵7FTB*QJ_dp)M od AU+WeEԐ9T&!rme*Qy띉jʠu_e)QD%J(QD0s lYeFMzN[cCU'nfsJ0J.64 AU:m@*zAUssglA DLf+KL6VoP^f@b1âhT3 }w36^9IBq#Ҁ<3۩Vι@E FO{]1PJ@(5B F`eؗ,1f[pk`/D}ˆY5$.|Q˵ ކcvBJ[Hab>mÌ,Ⱦ{Y*Ivc(vQ@?Gfh N"pE)F5QSFOR^7IDWcbt {L1"&qese5)QD%J(QD*nd-&X7 lD-Olɽ^3dR5G#odNR!bPZLlL@H*]To ІhUH k:v%"`Zd!c2kfV:$7CN\h TsxX;S9f8ZvUL~h̴/ ߣ'G ގX9R"_[k|+NTra4_["a\t3Jo,GajTV+uB"8ֈhBSfh";L$RFfZlP`fD)ׁ=״|d6PdJHԖ^D+ڮ' uiq˅gs", H i3Iozo~@PFz@DԨ)*lk; T 6jq%cIf["[D%J(QD%ft}wg|0u ,.P!Ízj .bR7ǦP#+P .#AAjZ 4>10̄w2t09)k_[셩وć-)29VY7H827&!!X# r7$Yl]在B nA0TA`*+V_=#1b3*'m¸ %hx}>4"ך顃<\V37mQTfI$X+֕s.)E ٱI[~@b/VCVSER{Oi潏 eU&-ikpt{٬{d߆4Օ&pTs*T=ъoR$h#9Uh$.xK64oK(QD%J(QDcXD2#uCý".U8GQ|q3>d@V-Jz`PCNom؎-0iLYih50^ @B/)H!SEBOdtcsfPu `Ip#,9BX$?Ӎ}1Z8V7`W̭>C?#v*aF(*Ҫ"fFYm5= ף8PCNXFI!_dIo \_i& BnV&.S!Ca* eeWTŸ(,PP!jɁ2q5M@M4Ap6_): "JF2 fɣѼI($Km[iɼfY)KݟQզFEƂQ(0pY /PEĬE{qHz"!m%J(QD%J(q ck#ua2G/Q`ˡ9{H.Ll]T&r JU R}ͤjOO(Ζ::c*BАD54ZsJU4пS&RTAS3Y+ɖ6]+۠NgR$Hd^*:V\y6 Dװ{.1I`ڜ@9ʯS@RU#a&4ZiU9W9Hzf5MZI|Dy-t+HiqzMz7.?<ۈE0Ի.Cx)TǸ0 0^ $ UX""TD:q .TTWV{UB,%=Z|I dP B< vh Iii$F潙<`7vCr#ߦL<0RVPbJVh86O&DFyiFaj?1di.n-QD%J(QD%JL&(ڽEe经}kƴy @I+PM3`TFHf +hQh7 沾Kf4VjZ8:qi.~ɘ1vp(sdb9qLe{<؉sXkx_rJ@ PZ-0w $IT삜#% AP^i>YGg*&uJKgy&B%x`5MVWU%йsᐞ: $Egw452&LSdcyCNq F8 njb~pur^s_rA!.-o٦N@+u=uƴPl 4YHly,*uS9"|g>&4Y_ ߌwg6B3$lFB(YtM(CQ} x]3> L#+t- b"4mW !UDh"H JE0Fouޛ:f lL*sTDnÀ)D5:-%L=2cS3- Ut=je SћXwQ%[mwX ,.}JA.K(QD%J(Qɞq;JuM 'ܧ;5Era?e&/h'|Ҏؑs0Z7;NQMLA1êc+P"] 88$K/"^rRVQE6[[K xr8H@L쮘 hI@ /Z@F UTӞVbNAK\^d82dElyw cuYS?0lks{g{t7TuUv-oϹժ &f>43,0, >BG͓chiEH¬ N9I#,Jh( 9P \n DV30**@sPAN `@ Q!4zmxl_شXp'oW$:+I5'*OLr㳷W[w m+K4?I» ̧TdI $&z<8|qc&>f,͝tQr#>Zro^kn7>;"+wuuy~GH+_z̜DZȵ[to_w_^8㷿w{S/ƏwDN_yRi͟달\z߼~ټ|7#zg敕2l~˯v7^zsz  |O,}xVe(q81W>g3L2wjKtӘ?8\401 rK DhQ)Nlʬn D~Tf2TQHf4ҜkQ+tL*! 84QҍYl#7p &HGָ~ld%{>y[\KGFӳB pUP5ugFěx$'2 0~2uT2a?Ʃ9Atnm do_x1\^;d IDATы `??O?|d+Ͽ7/tR_k_ Xy޵_mWZ$7w{ڋo~{c^𽧢W߼֭3ׯ6'ܼѓ[=y_q~5v>?أ_ "zXYN6o~SՓ/p/r3YF'}=ɷNngrY@:Ӆ}?pc_S{']xƫ/^ZӡÏol <'O_~/YFG߼VϜ7j ?s㭝AMT+'Μ+7t,%Ź2ظ{izl&FPw\6au##4w[8U äv~ |7U}ѡr4cJ8e7|4ߎtD&5")o1f(G fRQk)T@Ģ Ԍ\ȷ ǐ3кt'A/MFjιVi Pg@, bx-j<'/y2To[N 5awpW20ԥE dsUAbqUzZ)4jy#=-7"i߽+(,Ƕ|Z!NϥLoFwCeuE$P*kz`U -U4lwlE$%Gm[bl[&F'D (Cc f2N5hZHRRdLijŴ}؁laɣU;eA%J h/7='}R6ST7UB"V9Sk_?zʟ҅雏EOo_;[O۳qoӷK/^[ڟ<}Lg;_{x;͵7>яEo~򸔴wtͻ Dg_I {6mmܻ{ﳿ /Hs /ӯG{?b/ rew?}~_ԙ}6{6|`íoZ޸2iNygdCJ:}ƕ|rN>s1G.t[Izo=/~6u7ln޷x߼ngܹ~*­?ݶV3<;~Kԋe#ij kܧZII9!'qr jZͼfC^4R4Sk8O %bH -([* BL ,@iBВZrB0 ]:|<<"/;l vi3QhojsF;/Oo+yo{=_95W;O7}wS߻y\z-_7`ę3'+hcˋ[o߾kp'J|߻7_\';7_ݔ˟c9l[?yaT'/^:޻d b7օ93lfY<[&"./kāt,Ѽ>?xOoo 43/U?ަwߺyK/Lhp(X9}~`}p g;ŭ99?~^?3˞G~,?{eYr ~^ʬUU]V;+ 4,,²=s-Á]`9p¬`aVbӲݭUծ\K[37DĽq|.]N5}i`ѮuX#oŗAz~!mt"lfDK/ow8Caغq]Yg+a*/Б E%A>$B^N M$+/c !X@ZiV LN伺`7cDiB^*= )H 8H(b1 @><3=tV~KP&\jnť*F‘ ɓRJ!Z)0 R@¤]qB:֧7U5y~ImǪ|φD̂DALJI#A 2%Qv3Y$v'DCRM5cKRPJbPV*ze-AKôi22ܬ>!swUX+5Lӛ=QďlMGK)3I ҚC"#dRSf?EL7VQ2wy|J)ږ=h[Cq%~O}}?o9@/>[?r@;{J~O>ȋ֟fcwxV]G+jbptUe߉ƕwޙ Q#\2C'=ygͼu+|wCc6Ipv|¨~ޱvPy7f @ͩѶZҦ ?y|AH[&H=٧ͮ8i>rW@rճWW?8zqy F̰ 56=/-bI0uΣ>p/zc+ێ[OG{n\wcfy5Q˾mNtH0J2vN;#ޟe5갥r-KuiZBmRojCmq sr;W,^@+)yFX9W/(„YEv^RH[%!LT=mbUȚCkG L3?WDus^DN&R )75f\?osijw&z:u(SL#xd=)@SL[^ ZM{˶$۹c5up%Ӊ%@C,R V0,J\QGсQSIsUPu.gJʖ>Q1!څ-9BEޓ1cyu3[5X})CpΆhobsJZ`+CJgY 02B .cZ#m+lB*e={M, OG`Xښ5 J%僠ب>Z\NfKtbfhRf + )J"`m<츲սA}㓎HLu[Nc¯~?7<޼>_l<|9S{cϼ o=2앓x—/qi|~%ǙCzC"Ns9_}?g}翧Id6 sχ?r3gù)T$so*G3/V/eqhJx3W]Y\Yd;{Fk}'OtX r@pO7.\K7M/ "mc=C[x1 |@086䟑=ӓl\yyShoz:n]Ћc'vDE1wW/-=' &Vs|ȲG={FىKWo-{@aqGAo:5sS >peŵ\!dd; mg_wƵWp @'9 ޘ[ȅZL[gѣfanX{(s3IgG(ȶ>5l*-I05>~kai5W(dѣ#ݲZr}c&fH#\?7s{\ ywko_XND[%yrjC6 8( edEAA}4@Z9y$XH fY}/'g<44, Yh-N|Zp 󒉉AaL8˭X+UuU2-msK;؞f\ȢƒNiUTaA-)(Ҝ$ޣ" ǞÉ),\bYW0d4RXR؜2IfSLDQVؐҽDxVy@XJǡ1Kuf6A8ܓ aG{_Q Hi'aThbgPʐ*TN OLhRB o?Q kyHiV^h9nFd"C$)H !AAB5!k L$yb-Y_"FLLe)C_/?y??^~Qs8{}ܘ/G" 2{?/Gg3#ۿ-^|_ę=?c#?Uic~Wc᝷wãe}@O>i8'g1SR׮=wq)t_]^]nhgߞ-D٨ K֗fg}`v[ 3E402TN479s,lu3\M-0nrS/;+/W@#Fʫ;2q֦gOɚSXvvq 'xcfg Cd2ي}T-O-ߚ9q{DS[~\[Yȭ,-GǪO;_?;<HYN;Z}6D<_I"iRcqW3vF`-AIRt2aBD'2[YBJ2ΔkejJŖr f `b@DhNB<Fsl5B{NPw Gc*AbA }@ZP=2fXBFQb( qvzGZIGaP~ ^P߸ғvǥGO3TxK_zsQxWf?򑄹;ܹ1^^~>{=)gO ` G,x+/^[}?v?i=C3B ;;UF_}[Yy/>w@|2o瞻zzl88rיNƥK>O\ĺёQXYЍ0uAϡLJd82p}l>C..)?Xt5\ dGG7}yqҍ%[q}a< 3~2@pfե;̲p@GFL̮*0{Щ^Ɨfg۝ Eo SLAt :. +s3+E\|Dw[,E knu;}ס6}_}{H' 4~tЉۆ*l,NM/w玑Y)~L[6?!bXOԒt'?~7otĬ-O1s/. ɐ*זjï_\)O]|m{hm55kk7.,߆sߟxesl#+Uai5V/vg_lj5kDilwmzLƉ*GˍQХ*yK+B1;D$j! TInWunT S0[I+Bjh]CapJgNitf(lZw?,h#Uwɬ _ $c QEMjiK#6sć5mn̗,5H1BF\`F6o͆0_t#w07m$Jko0?XoZXwI|#W0̝={{O ϽY̫_N@O~k==<ʹ9?cU^jbjm~ ȱ~J_pM?EMpbۻ03@z#VeΑ _Ԃ@w)_*zPɩu>YzoehuX~4tJ. w ,Zā\UzA#wlsg's@nvnTo6p;PG{vst'WNt4ڹ\hHVOCȎL^ uNjm=4:8Fd6:_IDCJ2|gh?o?1ޞSut(c}ÿ,37O-\J"]#sc.ά]7SM+ :{{DkMBN~NUDZ7 c3_7gMa5} s@acCJrej/ֈ4؉jZ [nzUyy4BSlnm߰>0%39Q,T@PIw$EhƅI`&nV&/XL?HZRKV-j0 IDAT em\bbuW@VvmATJz Mnc3[]c$QTlT\"VxKJZž=RJf [g G!Li @Rڶ#{0Hlym(󜑤q4K<$K 4C6J0) 1usI&"ϫ02|mڤ-W8 ?YS IB`)@ԚY+3Jie]l#m"jiʄ9a.q;1 ܸ#?m{Z[$Ma__<^瞽Gz85~@WQZ[]݉)w}Ք]TXG㥷KKZzb1dfqjjGGWXjf={ޓ7'/.}[3 <8l䌵9 )AP-A#y]̯/,7^ʋI1k}ٞU\\57勅#%jEj'4] +|VM=[nS;5nE–x%^;z –6pa6bw~)Q"˷;IP xd\ٖRQ Nt-DKi(AY3WuQPimdZEQ݃7&RRt ڲl&S5 J6EG֦NR+󻕀eD3M$Y]خAڠ̛A,FQGcbRRJi>@kRaВN"YXՈT/13RNf{!,a=)#WDdpRHiy$HJNfrނN|p/W]5YWx\L\%o-f'7u aOeʌYV@X&a^ZPe6["ROk]iS[q]I獆Gq}od5-S-GnnVDpJs3{{ٛ:;3q,Ǻ%ᡋ^_G~ ӃfkjYWsxݕ\av^K.ig>xKkzTBSMɛ7nO޲h 5Qr՛[3'$,ЀBsb RZTAN@~F5T i#Wh{"sPKHj:WGIkFL 68U?RZJ) li+ .)ݙ{,#NBir^U}趖O鑸YH$m I!$ $4(h6% ?7]ڒ$#HH#|gEs;ځa[u4Ďvϋ' kſ~[UKNhWN 7G~`U񍯾N=`DZjk'Z[ h ,j[&f>RJ@;=s#"`Cd"T-]z :z;jƴVv򊼳rt]zo'er7}TH6"+-Yw%ڇԭ\µ7^v=~jO.*bEWgg=iSwI)ͼQ|h`7ƖƻەDDB49a.k>#X ΁8qo"1:XC_wvj}lܧJ!盎^7gMb;זdmho.wn5>dNi0P35XK뭻%vWRy9yOя嚕^ш[WnUH KZ:0č ӦWM֎R&hZEkzf;UQ܋H j_ ~#Ĥ N"PAĚtHZˆb Pd( SVZkCDg$$ak4ǷMEm#U^MtԪ15rbn'}r9F*5nMXnuՖfRSbҍd;W )B A&! ࠵.Ţ CBn[쬘B%%s&ʆeMB4(R5Ɠfdլx1!OcT="$[yK_2WGw^#[+X"jN=֌ǬlKs:fXuCp+*|DI2yl'el=dJ%f蒴0fMmjbL< p<%D~2ւq>R 2C2PA!Ci**h4C u3W1ϊ˩yDl3vO~+Z}+/z#G #;|Tι#GzNx+E ;<xs7V(C>9\3ky@? И{sO?֋Əbrb htN} f棖k9] @ml܋nuq:mp~j6ܴtݚC`; \_-4ӷΖY< ?x"`Y\Wf_`vwy}̀;W{IGW~ꦩk+߮.sO^0U6ZKvuf5?56Tah;qx}q!__њ>s5s}n80/kMRtڒzGM%Gv'Cz41ww0>7Y]-_2nft@&,s9֍u] }-{͡Ư/*w[Kޘtŷf6Fre{}Vʊ9zh@g[VRMoWɾgLմ}-ڬ^z&u]C]XOi5{Ń4hƢJ=]n;jԛc丅u[6`-OX%gwbP1fIm2QyUCBTXaUt(XYmu+tg2]3t]YA$/s\*W,n|Xâ C4k L6d +4b& .Dkh| [VH(﬊~Zuv[`M%_[1șZ4D ! 2v}̬*aQE CЂ 0Ƿ*,3P2d'*l,%_-}sHVk7+T.<c4M E\3wD da L&K&v3 K(  &DmRK! d2l'=mmkkomomo?`ue2L.eYAq&:{ba l%01WSfHf&inI$`_Q@""C"#dVȬYd m2L 3Rftb .U>6z~}#o |1_ *jZ`$rl !oP-ٖ+Ml`Cgop^ɪUW>cqTBH! CL#F!WB5'6*%t ,%y2ng{92A_ ' KXA4kaIجCf{LUȡPZ:Ueo Lեbw듖O !'sFk-M @$ifb 5+ \G2م罀%}{ K_W_d~?z̉)se:tuTkk^NnmO5{"ƭ~'<޽Swϟ{V:77qc.zɻ>DH5Fa ѻG2Ξ)hebw}kח67sSCZӦ8lXڛ{K .812l&0S] c2f6&$HXH&RJ#P[5|  N*.{݌'G|慳M-eǣJ jK?q|n@cЇ?- /2q~~^Y_?r&s?zsy6?|a;gy}fo)oˣw?t_ǻ'V6,ۻGTB/<9Vв豣w8Gg\!d dGY*- =>u#fo\9H{lLO/@fdt@4>uhč\QiL{灾#c]ep:{hlDžۆO߷vcbnyۏ w4:?Hs=}#ބT: ҹ~އ&o^_ZL[gرtt}jq-D[ǁv-:x聮+PilgwС#F+wiׯOL/n䋚dб#CmkҦΓfȾʵ"lcG.59|c#xwH =n]OtM^5+* }ÇI#OLܜ_^]/Si:8pxƧV6Efz#Gf·113/ <78vtl#:p/J>;yC٫W&rEδuv,^=uedNi쟂>UWg^$H,h.+'()ƛBS%#k6$! bEpYפ b,0J! XkZeǜ.!8wH.K:23(t */G$ TcgR 옗)֡ CU:?!+1̾a4Qׯҕ5OvR)Lf!ܠ"Fʣ5dmx.XuL +Mxw4aJ[yQwkd_#BϥuZn)d k|Hfh60gg3JlúrPyi%D,i ǟX7?c\矝'j_p}ݧRF#;r׉/.+=zU}ezr :GFv\x@ۡSw <=ruzMl6iώ%RMiڤ@i)ѫO$Ŵ:!j%d1\@L,`.AȢe=J0y-)XG[5E\zȀl`ׄ4" ! bŨ48: WS6 $ NKV*)$'y 1XRyϻ{K¶؊ PH)MjhEJ) #Y#t)rۧ:S<*IeF `k""2_"(`9q""q 6A+}l) }PggK1Lf^Ǻb&ڹ{¶q֍lLNo&[BJA$I+55VJ JQ*fv k\jpO\`(sԞH@ȀdVLF9d G*F!ǻ3Vk?ٕ֯K?~7 Ͼ0chN<ۿC~ǿ[#wݽҕow=t`89]c;szm7ruT|u­Ȕ,882 ӴI'v&hi6vmH&H\,$cMe %ha%eh%iViioF?v6n]3~ _^-t>Y1!Ec됮D"Ɓ^jƖD#%`tQ #̔F3L f𤭛lڿa_AVJNL(L-ư2k:vWrfs*piKo0])$! Bj.4wC*DU~fP3w[X܉{&qF-PQ0' #WBF1;xJL[03s^FTj( sm˿[?/`Ku/,?hS/3E,3ڻ+7Ή?_&g^^lO jeE@oͤi&O:D"i;F6$F[׳6)Qlf@yIefR%VOլjg|8_VJiCgеM@u:fͺ2WsefV")2OD@v]VCUpڴVZ+_HC:|%@@ #0STX 0TCZ A+;i\i\U%MO\ۊSҭVinrņK7pzlȼD A$B8Z@,0T0,P)&bjR!gnn~$u+x~ ;ґ Mɻ@Ğ-'\=so$CbfNRX'U) w!3RfIkI ={dU(Vl˛&7=Xb5zBɒ#qZрoH l cs4 WҬ P(Ru1dKұk87%2MnO ̱?`9r |@y e`ȚLB)3A2` 4Ij*5+mp`+tܷVϲѮR?4H#4H#4H#oȈ,?hhPL&LTfzO¬ddtU%W-Ao޿[Q} ;t-9a_&tw,z,XMUNKhj!$T̊YAlQLfʠN6učfNS3B)$E&g!iT:$YG´nglޡek7/jآZ2wҐQW[۞8삙GB [JQ bX,Ш²EM b*~x`nƷZ*a=T:V)>+aG $ c2d³]KD4WK1Qq*J$9_ %]kXA(#9%crO ^2O24IVf[ ;~ O^8iב7Nӷg(ڼܝ Ge&'l(EPzh;H&d2TJ2]6B^MeMՖz4xZ+ 5%SqjoFiFiFiY#OhK\l 3ިQUQ.mDv|hw8sU[+/nM[X^5 M1ccꆦ8bQ| CDaFCF*" 'R!I0A14BPPS"RLfH;ЕQ@ e5sZVN36xXjkvƚD7 I#7G]и`)70Eo-muAY[l%)#Ȩ.q rJP*L@R؃D5G:17]ٮü-[=%-vJޅ3}d$q3!sXSie EFHr[6īuA$ (֡RI޼Pusy ;k@K.q[JvLCnY2&D Ku{f_5+򅢇Vz%[JeDR ;kPL/1PJղn{ͪM3K=1*MJnBPFWCkqy]j2j3-OGTIZ?䤑FiFiFiFr!6OCjeց4b:1$ѡw;o;Z]+ۊZ~;гVzZXةFU5C0 6kIRHJ&b"MP!kuQbX9C ;@  IC JJ(Rd +W#V㕒Z-5Xb/u~4ƙ-F !P,`PuQi 6ٵT-,q  S C\zRS5۸(s4vkf AD`%ih{DRʌ~G9Ya,%$nbn%.}嬁_˰',ayZ񠌳,25-^ 4plRaJfTVb Z龼km G(݄e^֛eʪVtށu[%N|cs9D )B IiJ+͆z1,V`;A"F4AoO};ؽ?6BiFiFip4/@oBX JMT 5@=J[۳hGnmXwnaboUD&9Eb"y &[%yBOT\.1k+T5 f 5i!H)#XLI( dڌYʴЬ:Ԋ,$I"6$"i=5)lsʍ5 `!Ğ6+s KN60D(k~ X +i?#.V-&C֞peV,wq UC(qKL"ă(#VO-ZHZk$8(I,=%W*D%`;d(ۧ=%<וY"aۉN/ΕB˧6IǎPy f >֑ x 턐h2J*> vmWJ$BBJDP"S*8fboƜJ\`҃OIC.Rq4H#4H#4H#4М g[ b KQw `[–Q#}u&WYVK[u'4VUe٢hZu :V7<mFbHenv `v6E\ڱ= !l0d8-i5 QwJ H DJPPbT51+f H3iPEЌ"@@B2`0KUɖfr+,xCB'yUX "p16Xx¿ ϱHHiRJ ^؝J)"rD>m{vu &+[ZDVf&1"?N9@ƅ3 UdEBZfgQAb:1ܑQ7 3s%+7sǫl#d!=%u-j8nB$!IJ!3$ PCEE[ WXn6M#4H#4H#4HOIpk5N^liluFe\*K.kE+]e=qMDľ U3X !o @ZZPB5CX)" ;"ç BkWJKPbf ˆM[4Ko赿̱G $  mRF}te)f!D [e-H o"43xT;6E&TiҡєL(ѿu{3 1j:q#LGmoE7T:iu  1m 1`>E۪0Oc:rS>;}8mYBe=}Â[bE/ܳm^3ɶYm+,ۚ%r\)XZBP"B+3D`.d>NZG1FXR6hz $SIS>?-R_ X*Zat CecDI_z t_@`sۦNӬ4$~/‡ekEkzUSn1nqKrrկB[JABa$;D"tΪ.9MB2{o4 U 'gPHnY^@.2VV:22G"BfId&2 r)A$$svMuDpl,`0MF(|V,$hn:yY1"Y%Y%Y%Y%Y%Y%Y| 䁑017O* IDATM>w&tx/cv(7:"{d 1jg~l@ڐc=8#6nA&@?I'f1= GO>ko@E9ZSĜv)俿 ǷVVTXBIUz!: Sn#vwļ(X}sUo"NJio<#ad3A1V~bAv5ɼr7@ &HqZfe6iHRk= Cw(JTwF*q@/wHF]$ ct%q!ƾ#lt @ѿUűNh8jKMr=M]ciȑ$D Gf1B@ BXj_gYk!0@G` Ia 䐒4'De(fy,8$$NkBpAJڂ8&=aqh$ u0BUa N.h|qOcPGr9 JID١ 5\:; ':?8tg41gN}}&f5\b=|2NfӎȠkI:1s d d\KB1qtahA"k pYz$QGoFSez_a%Ia%0BֻG?@Qiᚦ $Haڤ^ѿ 6! yh<%B~v.}t5tQF10-90N@H) uuptC"$a%Y%Y-v+-=)$#YE- sη::q< *^S{PS9eClZD+#eB-$lNcPk,RHiKJg+QI ܫ(HH)xql)BR !eȕܲ,nio8)m!m ۶mRJ2T$i W^5TrLR"}$?i:N˶in!pT J[[-7ɹrM.aݺ1ڭHDq~#(ЁP z>FzLc5MJ̣w^CL ԎrR1ˌ3ƕ%g3naACMj4:2v=F726}Y2aX[ 0׹Ԕ1j#OZXVeרJ $пJKDo yC#1t!ԜkbEGt:uVV$$I*Em9nYYLH% B΢镧Ff 7x;~swJ>cŊdJ=VgsJtPSӓ_=dߴ}gMwo:%W]ȑjo}g^:wO4%9%"Ƿ Yd(ܭ ?A8~xryϗ; [K_^{n| >jίdٯ?X/(V^߰{GV<w?zh{)T~п㞟< M8c%N ?:)c69Pܐ*lcrIXmKc kDH P2,$ h1 B"$$1.14'OR" q$ B@AY.k &MRGMC3sU>rc%\F}QDTEt81 IRH– C>RrDzq'}1ݛ̏_a-:AcK22IB$2WCT.@lȔ<rHIəER6zBB"Dw8Cs1MЕa}@<Ե[3]察t E]q%D:Ri\0fʘꟑ$fvu^A1hSg:; x|o 1NHP.Ԅ%0T2 2,BF@JTtg/)V482Y%Y >sp7O.];V'j-oJuK;_>^ޗhx28T/MooA, ]_ݪ#j+?ld9Kų3R:gV~di)^\oy+fn;*2R%FMHĎhwD;Y:LmtelqĊFbCb( ѵ '|[F&`vƳ*N3!11$@ ˆ&ED .ȐDFUwmza2R! 0X̝d/Ij;L('@+ PG#C?I T.ht*[),q9c@T8-쐰m! yM"hhk ÷8!ehfꗽ 3 `1=Դ?#$re!"B$4AJ2DMDf!P*15KxUp!J1~Đ/\d0! zK^cmn.՘Az;˚D2Ze=ZZ*",yzK>W$A^+4j9iAń3r.5[9JR$j*q8RĘ$[J[HXJgX [QO^dgϾǏ{ ϼ'^ZOs]?jP-?z'_Ǘ|*бƗ~wzgw}V5y~L_yI+*V1>PanJ&B|+MPɛ{GrcwjO6Ȉc B}&d Rʏχ쒴ܩ9 ~EYcobٗ.5,#QfH*;]cC̻nSL`z45%ٱ#ZT3댲3Ygk%11/3gZ}'>̞$f9"GG:zY7y’;{WCPXec#$VHIݶKéxdo׬㍲(HܟjbthA)n`}qT$Nn&$&R4 qL#w! P"I.d!`HYL%H*Q M'B / G9cR^sDD$\ylJO^ǜ,cBIKC"srSs8Wv@RJ6S|4 ,sjWz>`+l ]9Jh01MK'RȒ|KC;i0KƑqD!7 s (zAipqU]+RH.hL=9e|M65>@,zH89_ttyU歋75RI9lDgD l5x$y ucYM : =C9N,!|zxdM>b<5c ?[@rŒ|a{$}sS_=r*Ԃd+Nomg0%T÷la\2JSN@ 1z<4"jf>;1Ks8Q <)nTGї ;qGz[A !WߧMĮ1ut+%2w8ȀC"t7S,FI#B,(C:MPc8 S--&%GH$qŕbܰ@Rʐm+& ! 4z+]Lr1w2t|(qs%I(m3BL&-j7GסOöDa;Ⅷ9Z|'qfȢ$8[̒h WJ[:reL8a(_k; HN|j m;$.< }iAˎGv<||qڐ:52 Էx\0K/E[4oeLȐ2岪+/9X'|W%%e"6-]߰ݵC-y*Q=ՐBvdՖ]4h9n)gg_0pᩯl}y׏nraԡv"B$"q)Qۯ\GTKuƱ" D%50^Sr!f6>3vtp |F"k1T^TqH J pԄ4:2ޫ%:8L#&r![CBӆ2W" !l)lG2 $ l q,Չ B!趆RhMۢOG.;ј|1+뀚ztpy#KY 9cƅuT#0J1Hk3A+K%ɣΊ~*FJr0( ;a6G5su`kdCt,)c tg]RRJ+F\@Q;4#Ls; X&K亏c2r@JkZ8%0A`KPzB*a- Bd^ tgWCXfu13"H [:]k_s-)3w̘o̞_@Ouh9x N*[3ͱ";p?ݾ/hYNݿރ_8RKeWSqG rkտ:djPEcxߟho١gӼϪT9@Um='6}Jw4UW+'M**8 N`4fHMo>gת7lfM[ڮӊ.Zqhl|ǑM:Bjܬyy>XhV2x/=vRKeON ;;'_4_>/LJo5 X{boζmק@w[ըo:;mpӿݷ9V,hAZUˋXWm_;jL_uӊJ&Q{k暍!?>ݓXxg\b{_nnmK_^_g[筹tمY)=;# ,kϛ^6(̶#m7W|ڳRR)fqKr IDATgC}r]ϟN}Ξ7%gg֪~h<Ѳcwok \zgTu7j̴_9дOy!",YrK 3olh菲떁gɼ9)cu}]K-UKem#S8}ƾS^dڶ׫]&-{BlFe 3rSDOw4E=’̙^-}Z;ns`oeXb"%S@k_Z{'M^tiy9Yil?z`{C^ c4yH2(n =Z>cG I/87-?ɱdڕQ5ڻ1A\dT{TĈB dNDhDcogsG B hc3n!qBR A,A:(}*Ҥ#M 'Odu,[wC>%㒝7N-->Yg1FJ]LB{jjNɮy浺],8]Ϝ8 RזoXɅ m]`9M*^|n{6*S_z!d[O a,٬ו>z͖#T6WC>=LR0'{ y_GCm4\~יlvo7ۗZ:#zw4jl7E#3]V^`玺5lí-]0<ȾO՞U׿7}⍠a6]]?дyji>8ozZw?*ͣG=}M8trθ ?|s= >8S+>_ UNǾuG_jA)݉i^s t  /0f^:e@'/_t@u*i(ZuY|Zo6h݇f.9W|Ⅵ::sf̊E1S/g9̒+-٥ ^ڿme]9DM9:8aoO"U/.:+R2'dxmrh \x; O+>ꬅ~@`i$XT]Y .>Q\tLUz{o]<ןdF{.),)\>9o>pҡ uϞ]vw?8oVg(,{}OG.Qsr*K:Ft'ed_YҶ?kZ>|O3~_(45?=ziS/իK<UXUX1{9g{Gןӫ2{7^V5X_\=+/ʷdUR1%hM"#8U+j]4ȟ3ҖΙ6pxİ# C1c{Fn2_zs=$lH͟˃-w?S 3m5z]z꜅%Ӭ1oPQĒӼ߶msB42{Adk,xW%]n)uO|ned.\X|s4+%l]je}aiZ͔+iNf!$!P+m튙}ݻYg#'Z7޼4w-;V;JX=M "-'7/?;,iMIy)٫TC;5Ss*_I/~oɸvk{p_Kh .[!P+e-,M&M QzN} 8 sPz@*3t pvl94e{We9տ閷AԒRW&{w-9ݳ]ݮ6{-އ4&%L_oVPnU !-% c"cQ+<.-%Okv<}m޺aBM|zo^N'xΐDO-{ jI!%M⌥Ip2)A(assB L(% 8OyQxUs1BJ)m۶"YJ! aq#H\TOkCxрu }zO|UƝi!1rW)UVd]֔[FzveHPK9^BG4c~V%z8gTF |3kShRZ> WA'IH Rq GTXzrtH&{*XC7bb+37c^ɐq\BlA(Z{!y;z z7W{?>9$5Iq>\0Ӿ;~j7ä8Y)okNK 0`CwtX|K {*Q->½/IKgN.^ThzgIˮD~{_ @'(P{Z5bj\#5<Ÿ̮Hd~f=7^hpT]{ZowpP LNP]_ * ܌Ip'1Kȹo_)5womҰ}ZHf@INKsMGv'GPnnZPɠ.uOת/eM14̦\_3&@δuk9ߞ]y u h hv7(+XSyنutggm+ww19=Հ=mAaFVuMY#5P_uKٰU5 KW\wo={/Uwr~T~j7況OTq)K֬{G`̪w/鐷ks˿cWUs`ڵcȬZYܡ*o=w&oݽo ;xm u pʔi[ ο\ X]_ԴCW|Yck~е$[v>HV_ߞI+Jz||K=? ';ǂaf.<Xc; +`K䦇j)s(㒲|P=5L\a_G6x9IJ>wNEY]zw'@Zٔ[fjhEŷ4R.]='l4%;~=2SOdCJ5SOnț)kʼ*o\!CjiEVD{ %}+Ͼ07?n?#8d,*>D@߬u@Ek{K-LEP[l~;ߺn+ç2/=;3eB jwBCQ}4x;#=NL nʉDV~p,Or/¦ېi5 ly0=ΏpQ2ulR$ Gh"HBA ]_IOFV 005`,S "yJRiZ2Ms! q-%G(A""BQlL1dx%-I2B)lٶmBJ!!U$J ym<4D.j=(b =q(r`Uu?2"5(g3f1ƑYY1DKRV$J.7S$LYrg3 MXᘤ#}2ZiNF/ |SM5ccNϝN6CH4NXb1g%שVI!BGJADRJB hc΀@$^,mR]3&"Î #q/HH-hji3Y=9tA`n,+9'dĘ$ I G`] KO멄6I+ѐ䈗_F&9O}m.4*]5?ZZf՝!=NWPJd ݭ iiӓ: g~\Y7./ZvZu_lfJvxC}e^rɢK.|IV0?ь,yh~J@'4f R5 y?`Do˱n< ³]Ka٬l 80K?OԄ K#"|d_W&p.5X= )E׌lv(XpY7~uɋ+,#'GgS?*gP䭽>W?4pey(ww"?զBͻ~zwܭqvr (78#[v}:Z;K-LtJ\9=@]{^ιkY&@Ze5+f)W5ly;;}uꚏ}Бji<֫9pzzEM}Atk=}Û .,/G[,\8-`H#d@`%Nhj\ȫ:S7ne#=Hlgf-4?)?decؖl0B2R U<~|*jԁy7,sEVio` H e G,ir笍9ǹK>hs.q"8N~@\sfĂ8|2YmT"1afzHL2),> LHD8GL HHhzj4j#b*2@+B`Sai !HJАmΥ?k8岄' ë3pP1@cu\_(g Rk"0r d_)DYdaZ( 2ORcIlİG®zzN~؁ ÎH>CO5ִUoen[Uc\+$w$Acvz` |3|0ā2׉Izj7HWX s8r QD$!f1A$`+0V%Nt~Nr}"oh{i߃?>*PH~.8:Z?\qu^XuԬqTz*ӧ/K 3OASY1LVشOLӦÙ7Z Ry@YΌ<١:&?5&tһ73)¨vmx>$@vyo?47L իHt޳KxGm_(j&Pn[gmoYVƴՅs.\d>FYQR3ӠhO@(ww] I8#@ꫲUt<]w[y3YpSڵ1)k?f.+Zi G3-՘j>!m!@q-d63fc W/3>$ 5iW NjS5|8c 9g+C젒4:@j bDHwْW|mKBfzNacϽre{or1:KJZN%Ce΀aĘ?3E@IRP('$@:Ꜥܯ3ui>*:f`f;*AXxi:=ˡ\5yrdKXJ )KdF!-A{AL8sܴ77m).)5?#TnF{>?v``/6'-heY1FWV)i9%n򎾦C 5nnnhwү5cKm؎w-])Rqii4@nVr`ỿwGCW}֜eYEG۫J$9gL]<7D7ʰ6I;`Ӎ@k_Wy߆[\sg~Q7ܜGFĨGrh`Tn'v'9y'0_5Շ%@sgm3ʍ!a_;?dڌ+g~:O(h9)yW.ag]42,.}vSU/Q}"X޴U몦c /2Ib2c?2dRܫwux6gJIk$DLaItϫvODia]z*ʲST=yzQ */_YrnȪ 2g տžQ>gYFij75pV,dUu~ZH0SޒiIAO=HG58cHf=fEwt`rdΑ;,ux.GV( .OO#PX G06F4Z 81WRs29Le12L ѐR JLI !ɖҖ2 2U1!A>Ɛ+G59ZH!mJŃc S˕ Ec0 cޚ+h0А&{\'UkhcrcYsŽ&4#tix+*HOe`Ti;KVhbp,l D(}J'y*@,hmlLMqDesRU!  Ns|+Uѿ-y[|B-dhѳy, d.1l'Jӄ$]オUQs`PH%قBNα˕<5$rEÏPyy=;EgDgJ1R,;s3}zotRq:tmoo<fd)'n []-x'sck\i٣Uwv)t!ھƇ>U#Xx+5WgVL V]x]̽?(MGl@JPGǪo}^V&` ^@? *2+9c_(,3;P:y=_%/wiJϛ|FyEƔ8I{_˛Nt'%p(@yed\ߪeʩݽj̜rU=>kM߈A̘q7XZcܪ'nӁek S-qUPͅ_kOKhʳ_W>}s)@Vꬅ/׼'U%`h޷W6nқ[iӋs}ˠE@)TT ǻǿs%#5HZHgdYZl9 =d&V;,"3&t9I?\ا9!%̣xI#ӣ,:!9Vٜ]4Rd> -GGph1^wԄ1%4mW:%y\1l# *_I$Gګk$``/ܑnI$hPJi;=WIR]+ !8R ͶM$mX~O9LAθ2gRJ Va8՟%Jrs2VYXz.ȕv<*"ƵBʼ|JdDLhAKW$#/jLDBHzBv޶2 < /Tgt%hL^CC]ӹP/x`JG>B' 4F_0Q0+^%i]DyV 5=R w~F_&ICO3IrFK̑qd\l"[-͠YL.PU~" 부Ɂ7J_m׳zzvzc4.t{SMAWxۻa7wצL qӶ+ mC`œORPY=V|ӹ >Ǘj{>w>sۭڷuG8}Qie,Yڈ*"cO?kdb\v S Cdw JdžJris(oh}[7ְi;jM7֐Wi>L`H꒢T9F>/+]ʓ#ՔN )ˮ)Q#7^jʫ'ǯ-seD|{;zB :>fgd[N%L|K&qR{fUwwnsLXƵ<Ӟe^Q {JiVYS9#BK/V.o-g߰rJ6f.zع3 &ʩV(UddXqգL,(̫<ω~߮큹~K* S']p篹`t2cJ E_2#1ԵMԴH1ե s K2?S)]=eEwv)YgX&]13/A߳x wE{߲|mw_Ͽ7m'qjּyQ8{I┳߻,O+ρ<~֌f显<A}+L=CK.-Wb6swkk/@sQ6$Z K79,>OLþ|TNDhyLgteFcp2ӯu2IN xkBR4K0df1#ZrM92h!gl~?{`WU폯wzz/BHB*i>AQ)O}Dџ >@@4)Bh%idd2s{{ms޹Sɝv=?OYQDB 1' ՌU@441JI~:nO)?4zQR*HH yB*Jb!&<&I&kjj *(Oe.m=%ɤoם+[xaun[i x䗇fmYqS쏪COF֯ykjn?k\P5OG1ʥ3PVu GvO[v,x 1vZ"՝5ǶU|ҟ7FSv7ỳVB̩矗,,s8ٻwn?6Օ1v7 `'קgѳ._ жIrG ~{D@vS9@CO')Ey/|i_)[[nб_}p3Ȅ _?Hhk7j1jvookˀ A!-`4)2M<)i[]˩ ??G:9ywty.vK7Ҹ5ޘ7(!4c=;O1Ϛ>@-z`qoĚZھqy[vpaǏa4|ɬeG([?\R\{Mt6vmwO96h'\h㬫^HHmlߜzL\S׉lWo7?n!#޺f0C<ɝtC7~c+ϾwӫˇOkm͵]wjHyCᮯc1/%v_z޺ 8ia˺|O*$+?`eCPOioS׶~yÿ4cY'"n[iˣSVIGWhEtg/i9vF=@um@z͋VmGXHQ[bGէ}OXI8v3pʧ}siV;wP3&ooڴe漷ڧ63N<(;qU+#Vw0 im]C' O 4diyFsYnmom[#?I׽sS}amع x˫>-L5xjT ,2¯+)Hx>K&f/Vsj[ԃ/ `|n&Ysob7ra @$8$+q'X<^4- UȀˌ FN(r;Y^RWܲ!XĵK.Bڋsw; ai %-sf9NXP:Oc*r"ۿGT'CaW3:A`0e-^[ft`(|k(njtɖٚȆa-!RR*_ɴ})?f]!NDd޵CY0R o1$0RyXH$ M&SbJc5Շ,,賀'9 r(;N>#0+rQ #FVߕQXYWcsHڇR? ahˈqpP +Hʝ·mu2;^j|aCLSږg>iqj?X`.Dj=W! ?T 5}!tCFthjt8u]}_*? 9p#kgڼY {t] ΀͝D&s<1a/u)r2ɒX΄+tbDłs¼;s 02\%S[I11#j3e&)d%' ҇b˞tkH67G%a7)^/j^d%,5RK/?᫏sCoͻ3>} ?5E$njԾcش/ǝ6ԂA.y|{V~egҖ&>aGCu:ᅛ4xSl3G͹sYׯmkM t􉗍_ jƕ 81uEO6Mԏ0a]Ӓw-Ķ 76׌@VNIsW^QJޝ҂?_sM֦pI;#PwlTMF~taG7-}{צ-R0fqn1f~ރ'Yh\}W?t!pw*q1yv}U^ڑ3O~ǞRWUNhqcܳªzS>~䪣߲~1#Nbgy~ɎxlNp~y}mY8Ο?i Z޲rxqӔxϚm#N>a!#6x;7ضqɫ ڝM_eƱw>yk>ycbӊ% <{:Ə=dhٰuӚ5󞙷r{>t_}p 1bРUڲi˪X#Ez_`I6rذjkۚmoy'qȁC8?޼mK㖵ߟ= Kkۖ_Ap@-oرUY'xm#]8ߔ5ඦ֕ۛZyn;s:1o}΍XuIcfh oݻQS;t F _W֦]-Z5%{x{ݵ^U]G?M%=k^mq!F2dPh۹mǶ̝h}i;o[wǏ>6eKޜ./t͠OIw}MV޾ jW0Au4hi785/u-VjuĈc?7jܐ Jcu}w[eM~#:1LMR\3*HB@AZI0^ s]ZQYX"D%NmiŮzz~ss.v~1;]dYϥÔWPܙZFr\T!AP~:}o1|J0b)vMg Q`.B,N s](ڳ˩ !0GU[R/O1|P[4Vt8lerEvP.DӲ:$!vH^ӾRJf0@1psǏH @cɶPZF`!%5ND(HOa["9[uf (.[q!v+f/'›6ʞG;@bT] <-H߁YoܹF:/(J v(J @S /YUS)`$& S9^%or`8Gsf:NBSr=rqvpU/9!@\0,ZB)"PiҒ}2PvIzXfP 旯s ܥȅ6:oOͿej:ҫ ?pjޞNKM{v2 Q.9Po7^ZUG|NvϬM0j7:hT*nGN>kz8=-~*NBg{+59OiԐ|\7p"Uj$7Tͼxf€1&ŹGqѧc39r@w҇NTUUǙgQP@HBfr˙\fAEĒɎe->/ťWk]rլ"S-PMpŠU]E%  n@Cc@Ŭ  ?" @X'T3K|%iҾ2}R,BŁ\X ,}2 8=$bV ǚM ̨EBCDDI0 WWJά>~|fpƈ2f@ý&Tgwm=a}uVy͑g SaTŗ78=rFWCEn8\`H!H!(֕lq V#СjOCyDld~D4ЪQ ! uC$ # ԨZ-I+,0XbG“X@ 'T`ht5 6r&MPd@qntj"jE.ZzKo @*e'R,TRTJ2ۏ(k)10wyÒW^G]ve_98∣?~oI#|yڱXu#2PoR?L*f`Z cag2+$Tf䴐)P#.?oWm/D\_`WE:ca˥I`﹌.Љ*P']jΖX 2B+ %5ȆͅY̺\mmC0%kfu@n6| %P5u%ѹ -4@rIrƔ}?YZJ V*֘4 fsߜ%!؛{,^^ǰ6p|{; ~QT:.;C D/HL&YJ 1F.s\>Z<s1u(1>7w %>y:߭-bHg=G8 HNW]D#&'7i ͩI qiU:שk[q'R98∣Gc'NLFn\h; [=ޑG9`Q1#2rDa,X{+H=Ŵ~tԫmr}2{{ChQ:4KX4,1} fiX̨ȄLRRHd%j>sY2:3@e!Q@}@MS1"hG"!z{HVRJ_*_ʴtggx^ e* ΄Hl 5cR BAB 4 % 1@ Qka*@;}QN`qԧu7(f /X#{l bOG ̎ZH0is mUY&@@D'<"<tԠХT~Z2`zrs0ʀ\q~ CNo,#cKlivknPf ACT(b_BH3^NFuզؐ7>zgLjmܳs{jnTxuC? ꑓ{̵jwC 8iGqı7=5/o~$1Ҽ]Pe]J;d+@@$p\$TNL%\&aQbx_,ʜ4|KzlX|%"7\Dl:}|}7zQe ~W2TEQUȅ )gVA6l̨G pހQ)FTDHfzX'$keZJdFRl ̇3*X2$H$e:4:RQz#j-!r5Hco dH 9~I sT],Ҽ >`LQlZrz:Z=j(нz ?1S@oEABBı@I`89}e?+2 RCP|0 9IX}̲GA!|CRd{G"H I1KRR1/w@n %UFkOUN/cf S !qT;vT]8#8#}2䞦m{yi] \k E<òTE+y>iw+3/>(0l\. %#2^׉ ,:Srulx4..}3)\!UubJTfŠ> ,O!1Y 3F_H4 @5{^"e:-2ced ;G j%P+exXjV # iޖJv q[F TDH3dKKT4D) Ӹ(RJI@XS!759#iWhJރ6o!2* &iު#baAQ@8e.bsr19JX ;Fhp *#1F LFZ C! @i4p| ࿆k}?-*ʿjvJ&aȓlņs¡&!3*DT7D+ !&#ݒ.i8aQwW>FMN$P*H+ц|x>ai F*uR΋ХM,?]\ev<GqGqGqıOO/>',`` )"23*+X W +ϭ&VeN=Qz[fs{T,(=Zszm+Z xNy!dGAٵ ~U ֈD}RJE{:$ 1J(`֌ "H$zRJ)?-R2귞"i$l+-)@\eSCcAq LZI&"f}DHVVePemDA4[5ꬅz<Noybez&{U4ڈZb P_)OtYb}jk)feVTvXW*DH2@%qnv5̞. Y$P*HK%ee {Nt cqD'"qGqGqGqd5زepUq_vG8cN[ʟQXW<6C{-O)1cV[Bz JWVqJǮR%V*+)Y:ȯ%O ܂)RACIe˒DÊ~4F܅qwF.okgvhJ!CHH%9 -ٗXGqUcƎMݺ-5uZpGqGqtOܵzu$GqtjhDn"2&$eVBF?<E+Š–!yʙнrƩ{CM](%[vj-p [bGK+wRع9 hzbþ, 4"DyHx«B)U*~74*I yD !<I"DLDDhz#B C)# Z 2Y3vàV*1z M^"(P,AG,̾9{Q>M,a ' cho =|$r>n*'Qc&Id|  Yxe*@0XiFq>!:a/ͩ4]us+@x3*>v{9vv{ș5[Uyy$` FRIiR ^="ZT.dF "Eoל0+`,1XP#$" ]x6EtɎp̃^t;oXw/Q绽U8^~͵0 сK2 \ B`bb@ &3"%W(D k""$ADB$!HP!& ,fI$S !,bv#0RwZr IDAT7J 1b.Sƀ.yˉdbG"3)Um{\~HˆfiJ:b,M UesV訾nnaYNOeE'qtWWZE`@3%ܶn/O ݉ZS(]RIiP 9dMks 88#8#8#E#tl^1cga r>}FMY]i *jN9{"~F`™+=R3r;/ m$$-3'GauYgK匜$tspgnjQdJ+]Rf]D=IEQـŠRIf1J2+*, ua+jk0LfDDH:S憘"fi!o &4l\q0PBjV AZsNPj"%ZFeܮvdbrdLǔ0 G/][9#ϮeE(Qg*s([h-^+Z4I 6A^Hyi m XƹdڜdLb+](]^QY.Lҏ[`=vqGqGqGq!]X2+DB҆JDjjy'][®;^\*nuHxeջ8|e@e/Bڡ옑Y;2D2 ɌFg%a%ZYTGT kν#2̝ahW De`%}i}*pH*VkZJ%!45F5sp}1:z!(g2d&Nx3c1r%ؖ1&',+1G@MywD ib_42c@f5*]}g%df`b4` [GqGqGqQ8(A@8A" JX}Ň]1lSTod].s [;Ue ĕq".PՋ;&`ԷۢzF2Ueil7y82 F2xV Ay$ "&$KRR*VJ;KSJMSCg2xeϡHjjTQqF&**GD ]QuF4Ǩj(FYC9cud1$gXSVfnQ>`iR,-]V_A*%RDւlAaF % !S2~|߮FB qʒD$^I #_4sbI !"["'@ou䊖`7KJّ9)QHm5šq#8#-0 #8z4d%6FO46N^(owP^R.ICZ= <\Z.$߻S'nTP3SeozC)v&'\d_*;ĥۺrokY,xK;Y(]V 93El%!B27Q`Z@-% ܦa+rB3vX$b'%liG DHcViN!*jɡ)fvaN1d~4J`wKf CҢ㽩Q4C)4^!Md$LUa5J KsVsQ̰dm1\qla= J*mYaVޱd侃WK. 3323 H zoGDB'cʮɥcd;#)ߵa'=1vmkg=JX+PY2_q/||g$.=vUod콤tГo EUqQvȵ] >O|]q-p^qNrN~}kpq!^\∣P^gW맞wg'eox(:>` @ LHQ*DD ʲ)>=+&!_ElhXt9:|ÖF$ )̗2,A =z]Ȉ9/P!r.jJ6+Ē&V9EN0;2yȅ/$G5s~ l p5;+PL[}=׬JA–Ef:~ó`V% IK5 (@+5IäӋ#—ٖ81y469@ssE9Pguqd>!7@ۥlWL jѣK<T I1r*EhU'>%%r(-Rl r=s`LiM -L w)SöJɚ{Ҁ_Ðۇ9D&_޾2wXaKłXks17\l1%N`c!gP}W Hha=L^ (Ki)RI0J\ ݲ*&;)99;b젥`OGy'<ӀH@FG]$z TJ8@qGqW<]Ts4 Jqmk m޼u.YSf{~qr*{sue[=>^|*XbdŠ9zyaeSz ].OMtD,;En=bG.ݮ[ ;v- I"u2c|-D%@#?1lC_pdP "! b)D>I-Dz%!O%OS<,jafs (]Ҏ$ F%Caf :ekh:K3x*"g%",HY˩Z@Ze:RibfBTI2w{q+s}AKМ3P` 4AK z 7h܁ԯ[6,]{ECF=怏^rAb/$q'< |`UsV>M1` l[oPTzӅ7~MOqIzpۦy_{M[nۙ ?ÎwzƹG 7˲v?Ꚇ#G6e`E㷨dKY`UG\fF<*eY+ J+,dҞP@X7Xuw{toXwsՅĽnBy+[AdygHfX{rjj:[ ϥbF֣FbpDv4o0}B:GjQ+veVj(K)XjƛȘ5>/>V-sbb(昋,92-6cxx]csȔH-Zk"r{W@(5riW,˲zX!bŽX9ΠC |sYҒ(<"DHins6_˷jF83z;fw'QJIe, jsF o'S߈a˒JH [BO}1= j,\.ALQ3si\ݡ"i&AإGԢ J$( ?h^pG][^V!1o@T"|̪pMiI H(VJo+@F۹hCcYPz#6h 3jɗ!>̫wl;Opי:'}uEV/llGiqztmQ7lZNܺuWͅWEWQul}'Ͼ%t!z^`wv2_;{z_ѻ0ڹo_3Ec5} Ogr `؉_[A>򄡙k"ѧ >0eÔN;~yƥs_ /سysy9#'tjj;wE7{Sڛ~0l+p~|hߟB]javXi WOX2S G 10(w!,(Gp 2Byf=boagR*S;\<;}S + zsWB0A/9 abZ9ƍ^2!BI$k\!0 +_Su!Y;vM-0f(fǷ|A,4糩FJ-3|3C/HKV@C!93dfb96֞HY$! !2(1 O uҨZ2Uj;6*NHNTWzˆ(/W9H!񒵘qEԫ=D^P0 ŨJ2+ŀdx̗>׾ٵ;^P!NdLfȾoW] ?޿E'u|,[s}5gE8z!zE|I9R^?܂YrɟxI?Ҽ^~ 9Ч/2޿~/?^GSi|qm#8>_6t(@c[펻%K,Y>q>]u:/gS~pQu_zqSHFa!\aOW߿/rmO`J[wILQW+REuꪂ>\q/\w\+.]V|ܷooAk?urN蚚b;}Q䷿811'jƍ<`zI_.&Ϲ7ܴh8@֣Owp%7dX"}K$$,kjk)y˳^[zcSjq %o:gUcMozq]wjna :y6m'wY3F|]Q=5hPl^sظ1z'|dBX^JSVm/z C>s[^YJq^s4-/Y]sfn[߰UE?­z'w 0߮ɝVv{w|Brӻ4{ MA#;O41~չ?Pv)L23$^LDҁlt <%;R :1IqU/ƉǪ_˻ni{Կ,CgIàVhD289TK+i22hKc$aVڥ,( _\-Bj윛Fl`3@[Cm u]0~R1#5 (kDd1KX׼JRtٛŹo~:_FqtuD\R|aaW`vC`@KiTa V/ Oڂ>^4bdK@FŌj}_wl9߼tݷ>^tW&d.K.c+com\ֳ TwuǬo| Ӷvі^-y[ncV;qA466^}VmϚwW ?V>xݻUk~%x˿{Nj:nY}+ҼA}⏍{H#g=&]?/ƀeׯS `ǿ~-~颫%G.}ٿu_?<x$p|'SlUɊG꽷_7}׾aom󗟞pUFRz>o}*ڶk|Uύ_8~`~/LߞY,hh~:񶙃zF2?upe &wz{imW/ؼf >w[|_{|m]%E\n|yO<=_ׅAmqc=pS>m]ui왣jjٱ8^g׎L&`ԎY}]̃ҐCxO=;+v;6ذnżuOJSeN9ջ^ g^VE!i3xݵ̶+]s>vŧMvKuE`͡䲷`ۻo=圱A5P+[k.M<跭_}o=6ζoZsӚU;.ܩ5y'Z `t+YaVV( 2ڀǡ)ȐZNao0lFv`74b6s쑚Yȓ4^>h 5Fh.CZ3*0-M0rwDH$14TK+\] 'PS*K%Yx/eZ@CG{)y QBFBM6bC!dH#%F4k)5рADF\tZ{vfU!'q-{B/䡧K)byt֝ Ŭ$KfX²FbA؁5SE^$`rDН m*JȌz}wI}g^Xz//ӭt跿fƲڻ/9%`G}!I%|틿~Oֹvg쨪Ϲnzl) BA ( A( ?E;EN%PRHH7̝}umr?教ޙ2pܔwq#f1[?~[ &ư^e3QoEۉ[6.^az/TFqϟu]J+'9*glRhh]-slp`f1luǏ~/j~u:?}r yz73W7]` K^?Iv d|so[}fͻKVa<Ğ|ź`ku/'vyً7_w.aJ6lˁ vw :EZDwC4(Jo3iʬ׾-7} Vtb 0" Og19T pNZ]gavZ=n: 0 RUvΩW ۹ȠjZ3֨V?f>R􄚬ҋN l~@0 t1ؐnhH7St!RAJ@PdI!-akK5lLFE]IJ&r["02#C"Db=4?Q{N30 DaY?P%v[5 ^ʄȌ`rMZO)"@ lk;^]fd:{ANө wң[=ѽ[n]4S)!ILˆ ׯ]v͚5֬]vV_fuZַnhmmiʹd2Li*%Pd:@UFRqY2vIw &Pv+B0C*aŐn]F}AJR"C 5$2( PʊZܨsUe㭠)pdw7N 팍Rxnʡ'[/#NGYt?{}i7ߺιSed^o?#uͧZaeo>`18ki:i~\]2kSR1\<{?q?8bO8ﱋ~j+{.cwݡJ=xS@3ul͞xOq;55 \-1}5O?.Xa9>󟍽2d3Ϛ/ó|R}e кr2.5`۲0_\ K?yO^~Ϩ&N#{"g>֎nx̙vm^ +޸ޭ:r&x9/G穹i_GW:uj,$X C?P1=-h5+VŢN ۇ5N3rhS뾘5_otk݃UA~}>uk.z,z輅3^Gj%@/XTŭ_Ǜ!ۊ”K!DZ@̐jJFZC H_BRDDH*Uels#9%'[n0*iSJ}%j^*F^o}Hb Yx$&bɬe60Ů7F7 \Ln2YMQ/MDTqŰVVgkYa9^K'i=aj .9Y8t0v^S׾{l.R-Y9墇x&vdO=?[ r'!?g۷.п.z썏(3OO_tL߷:m1m鷏>uT;;5ѧ򏟔32u*Swד?s/}M{7thbq?Ⱪ7`VKҽΛnN;bgUw \ WhV!o8[WFX[k7焣`Q{%嗎?{+O>F^xh;oגּOO"ns+>q5̓[KXZz5`!L˵׀&{72a!rO^t悥+V|b+m&Za`Cm{J Fᩛ! |s<@W[ӖOݲV8 U۶G/|{k'N@U&Lt 9P6O  @$ DYXjYy ʶ]IheyycY6JWYF[Ptdi5J@U-PND5 [;%aE`15*rr+Zck*1& DNA+ /pT0rvea~H+0 ]t,51.igMy aTZ@o B1Sö rRj'XL+U]+A&אMTi^a)U@ª?u33INU˶O(VӮύ s7P,y }H~- lI4U;Ca8 iw Xngg$@ 0P $H)B=3Y.Mo;mVbNֿ6paT"U`ל=q]pyB^pDC3f0λSI8΂YZ`W 5gz=wqݿrYz*kňKidc.6m$3O=`y[%/_Ryʄ_6Cnw§GwxḴvl c8p]GF1yxa>3lu^xVv2F(yVCOzm) EsOflS˫T?}v yTN^MMu-b1c“xsF,\8|iE?iRx}9@™8\wgϯ"ĦC`߮ut] Igۚ1f˖ZO=#/aX:6noX$%Lbo1yҏ^TKy'V,[fZ͜9=ajp嚊 R _,/װys?EkZ.l1ZnzX|en bcw?h}}Nt=@8v%P+48RذrEVEz//l-Ԭ̬G ;b c6گwڲvLe[jn4ŷ$72UF] v3Bスz_x_:izr̒)m"3BYVK 1g=Fk44[ck[afĪO~yꞷ&m*br1[9NjV-[S25\DYà\ $kHk+EZ7d:Lh) $y(,Y %'YFƨI5syVDrT"XZa3Rю%p~c ]Y.L2ey:X7 %Q=,A_rKE TJ+3D )UXfp%4S/4ϥ8K=ӡ~#AAr C 4@qM&dj+po>xEthſ ,g~ח@8_3F4@`EyYF1ÈѣVӧ/4M)L.twg:]>-lѕdL e٘1`:E2v3>r36;160` KWY ʐ'c\tPFoA5KdJj8\,zғϾ汏ZoԽHo՛TwoޯSKO7}6֪6 *Y aӧ 0hT=_xu>@ 3ȷYۦ:4Y6N;{̵`맯l.vѱ{ @Ұ(f0l Yfnjҽ{_kVZhbn[.ӨSoK 7XYX:/F/}7tH9jԠWT2^X>65~+?\ FMܾO=@B7Nr<:j O ) E -9ٹR?J%ጜn-WZ 6d5miK28-X`$kV'K >鰪.p-m3-PepOΔ\#>t@[qB5&6a<GDLn ,ff "b"P1[$sPQl3ܚΞ BR2DXcv'eOEA (W+X| ]zL}K`.D`ʼW%DD2Vh$"J\LM|3+eT欭̹ CɈM[ڲ'Fj1 W[Y]JvŊNFkJ8?&hQ RT0`@b$3g$g&/<-ѝs:V*q'_V)fW >FUЉͷOն2޹iKboy}'v_x5C)xtvkdGJQF7璘T'W/x}(I._^[wǏX§?]h>{w=|bߢu ?zoN^V>|▿_yO<֌Y-+?9G͆r syk$\;G]m'$۷-hQǥ+VF 0+罿x@|]h}ʅ[ڳ[ [>co.4Z,z=)l7~~~𦻦}uY>x|NkY]QNw ]HUڇ  AhasSGZOtFYR*oGU玽VP5"6 YQ'/V}7cDleD N T:JP< b$%ɐPR[KRt{Zl~&k jtmT+Բ%K&8y?/浜/(Zd/:(l@ D:ҩTC*ՐN5StNTAB fIH20̄a& [30l̈́l e&)CѦ[%;M"4OyMKLfTU j^ڴQE;$ʒo#;e   !AHJF1lN ̞v:3s7n3F8[K_! 60W^p`͛W}̵n5%~2sp|ta3fS{ 1jԨM7ޚC&cy& V=v̙֟v;ѥb-O1zbюNw}7f(5)Ɵ|.;x@o^~h0׷8/uמ3SXOwqZz W)olʷD+tŇ{VG/n֝uit e_^L2塘Iv)/OXۗ/ٮ%ϑ?~mv(kYoK.R msOv4}q·^ j5vÖuv/P^zyN[l5#9n?arcg^8Oݙ޻|yW{uJә˿be+ty_ٲVEOg>{;ݷ>pgm&ͼv#ȴ56f=`ìGs}zw+VnGmR 9̓nldluXWSsef? +j2fselWwՀ O/Y=7uhhLT7KG40wcs @q;lXS狾{T%w}% Nvcb,2h-*5"V̒t`y N YI;?TmFnětz2}v6vTʬ'i"DCH LP[ZqW6VbkWtC̐&{$F!l#3#[ |)*4Y=IѸE)C LKZj:C+ZR\uF#]s@lf,((#B%.= I+1s΍ODN.lqA- 2O1*_~Qfj::e ’@23ĭy )kqUw!!Wp$DjYmQbRo],;\Ѓ>|znчo o~8u?t+G[?K5gck3gC~߅rN 9?фpy~ -<Q+=mBfB~rI?t\=eg|s|gdr_V-aE Gn4ԫs+d"o\uՇiPVr.ޭ_.Y9C KVO oJnح?أ~폶(o)L2%N_HaPs̙Kr!Nz8gASvڡ/CcF85ᢿ=u 3au;F,ϻ˦)N0Z@z<}xyO[չ'`'~3k͟EV䝏[:wkTA4ȃ'hu7؃w}wk6t6S7ul 9ųp?_A2cX.G=JtЉ]m O'jgQ&5*&vb׫rU% HA T" ҩ!4t*HA*AB0"H(#I)[Z[7nhmmimmɄ-U*VCZmɒlRY Wj] ÍCU42NmOgG9{=ӎn22=6)E )PH! ܲ/IypT\pnǶD9Hs,Ā}~v{{oǣoΘ1-}F3vݿ~eQ7|n}W>tl6|؈|Sdr|񽽮ޜ19_`˞{6mZj1JŠz=/_}e=ϸmc/f:Ɯ~}n8n'3O9pK?<|[]w {~P.եw#uCs򉇌ΥMmo/ï x&x?= l{om~0wmc![o(kV)pYqn['wTSMװ7ww/;w>ڧw_t˝dEۓLWE<=c: ~z:ۗ|ͣa뿞MFLg O9O_|U_N<:_{~GgK3.Yl٪KM͛o̵`?k=gL㭏gY|go^MݤΜk_pj9`c&ri?/Xl+A=zmlԈ!@id sYiMv({Fg~Oto6tؘ&EOx%:èƮ= vq~ u;D}3_yf˖-|5u?ywnQrMoIIgPT@ە0(-Gi1X5؏.xA{iNi2/$7oĥMO;Ѫg:V"RdHJ1<6X5xp^_#ݴ˵iW= [5݊8[W\rAAQ;lx̭v/o0S@c[﯈N]Z7ro^s+@ ;wzԟ\'"cds4m 1Pt!;090 m&TG~qbv"9kLDsJ9BVf[ U ik+(>ĜX2dc*j1AgYc9VXW眢ewhmU2"C ^N/Bq 9l U<}9 Ջ9-V)pYF!rbyZ}"0"#*N XEi0QK# u͕>bυ3prEjjQ ;P kC0y[k86n-\YJ@ s.:%//+Xf9<߈LHJ@dHaH!7Y' r?fkfFe?tK"]0ܥl8bXX1 'ʌF_Q6&gpv6030 R+bIXi*"'9 [:JUZCp!bv-z .OqEٮ`՞H.YRewKng0@v"HbA C ֋)DZkG܇ԩl7ehO}ͣ &-uV]zG &%rɧ֨|@'_C{(k^kOqC|xxxxxtF,y֮\ݪ66kq ]hԄ~n{c9>0#ʾ/K7`6ۆʌOjeA (}"_&(m@ #*̾\{K/ɧ[b[0Q\L /s$}K5/ђy*vqǰ$/|J9rl  |V.1,B꣤qY݅Ѹj|V ZZEW@*K$(Ks[*g,U)G#C$M-vvd4͜o qV ,ЮnGNzA1wvg`!f_='6XE贠K M! (6b4"$101_$j?Gdeu!wb<&۳9џ7]lЍ0͈WT c+ f nHfyW.NOJ&{}]VI8vnղ@wQ3H D:uI3 2%AHj`>QPѮLRb0?]H6nݙԻJ.JuE-ч/^yR=r̤N#[ãvtu 遻|_ݱ]|xxxxxtN,7Dc>j}f@FUmDL@L^+,LYlV/)f8kcejI*v5jOAGWj" NE̙1CLƈI;uDң=++D&N,(diyZ}k,ߍJƊW 5|v2Eu(3f̄$Q~Dt+S;y*i#1ܭv|ylº2Rb H+$Ҵe aKB2ٝR?9 Yv[ydc2o8nlUޜmV!J@`bbD 4sZIK헛9K:>,k|3xxxbߣ mщr:6IF%& B: @@X9*jIdITRZzF1הU\Ԫ7ǚs1簆3T%&]ШcT,g>EÍ6pT8DaTj=%j>RQJdzRd?[0wVCԡndqcr#=‘DQ A RsGD?4Y)ݐP*U)r $03QHHJI,%KRZ_Qvd7Rוѳ5;tcބ96S Qi&&I9d%kOj*^CsS( \NUV0@`A XU {f;6 TE( b%X9 Br$΄:&:_cW=le1 o8jM[:5jGҺЖ7NlV}/ ~ڹxڲ95|_Җ.j>{V "NA`ϫZIQi @Ne,Q Tj u*Xk(:gBK#bwcRZ3M8rovks|V"cpcK`ĔJڡtJI$4C2Cd N,C $Xz;ňhbcb+˨ ;y;i|?aNZsaA*bLI B $UKfDnlh'@jbth?R2Z,Q51DF!D` U<X|׉rh"6v Ӣ+^;sUU`1*ɶ|KhbHsir-Wh,F&;ԙͿVR+fVvF:V@9r rI-KZ nɋesvw脔["44z]&FfB`` $Id-3+(Mb2$QQ 绵mңc/yxF[L$'}KvMeeV?9;Qz&"Tl"hG 8$bÇ$l GՖFÈ3':N]w6nHXUl{m9t s1hA+%e&eJ u# seD6C& IJ"&P꠿d&+oT6~7%n-0o$J(/UV\b9:} O)-J "ňB2YMNҖȹg2[7ڜ&r#,|9J_1.>2[P@d @Ȭ2u*U7N,WWV9P|R* VQ^\V ;;D0k:Bw֢!6pi,ϡCوp.U|FGFЧXDT#,EV9ԍk qUo( L!ʔlz_͌Y4_NoVtƓ=pjmbd*LGݡ-zI*O$Y2 \QNLtj K LqF!5_zCz&.@oe7XȒx|-׫L (PIHVɐUiH,wUw\AgU.mZ{ãRdFQ^b^ad @$TB )؜SȺHh3],v-`ȎJF}Yjm "CNILN;\,/FՌƛK3Ў0e,dC1ga$Dk-*i8 $ $$|u]g z5`nN&>Umhʾ>j4+yYUTacgikޝ8 'Dt*bRfB!AG YZnۥ˜*.뎽 𜥇GQLjhl!ZŒ6S \'eB)FPٖ8ظ&W [YNquW}wwCƊD#V\G՞5ƣBdlY*L2i> b&́9\WŅMNCd,wW1䔌y-Vd)5uLh$'$@h4ITIfUD̆6֚J֝Žtz#6X#b]rXP+[l;7xe}竉3E&@ `Fd$K *&YzxxxxxxxxxxxxTY9Ъ.?D>Aƀ꘧V0Dw@0B Xd?od]RO΅woG;IeЩ/ULV-9 %3{[(A 3fR~P)3$.0Fs 0`,[| _Nž띮W#]gz9bbQ-c ~R(QĘcX@H՛%Q/HvpXS@5fZs[f d;*uCʻu;k=F*R4@aJ"2uZL]&a(Xxã8?m: '2c6YZP%0!"MUi61fxޥ[ 'lgK_$fuXt5ReFQ響1R:ᨦgIo䪕~N"hqrp "a@tï!86P˝٥b:1A MXP LʄJ)CIiDۤj־KAӨzc"f6Sj3NjwUcKjQP,a%qH ̀NyP=Mtk*+YzxxxxxxxxxxxxP Ie΄;wt@!tcnJ ؾ,Hu۲iRkOZQuh`mc!$$Ee2dy*Wcb"T hPF䬉\rYuIuU9aP5;yrBӦM\b)AU8fKsI+L(sX%bI8DdS*%1KGCY@cXE6V@lsii. #B\̋_myuUX,0^ P! !AH!"ؑS1mˎ+BlGǕ,=<<<<<<<<<<<<Dx>5i , D%DpQ׀-7 ӖuVrBW+ksO- R&Sea d&l IWPAo]h}ԗH23afhD@=11aUQN j;#vhKl=,@QVPtHb!0#1:TV$kI+1dnfX~M6)m)iv .8blƔ#{ :7 n.:.ZЎ{(k`֥g0VU;dem({= 9"JA,3H Bf@9Θ]tHvR,ش a%*'X Rg]h SZ+1*]f1[A^BGلyV19Sr-Ï5r]m) R"w1jgM DmАXj3:v[z9/砬5]l>݈]\syՐ scr%sSG(~1jJmy6VPF0(fvX䞂ѥ"VЬ#kʟcQJ`A ̀!RT@P7z$M~y'hh'>}%1(ggɍSiFI+Rp:oc -i>r*ȌLP"0H 3ӱVo֯> t,P![VZ .S),,bE-}[9i#"Cnb*ȹ=rJ* Le K˲̎|)@4&aRJ*Ld)IJ%4E.͘0s5>;&q# $dYDNmifhM]_҄%ADPp$$1,CHNmSlmkoLd>> E~ g,ybH{hˊuX̳b4Tr4\vtL,,ڬډA$T*DTE:d!q(9# $hb7Xϖ: cUyw2ٿ\] va=<<<<<<<<<<<<2&1O=a#@d̂4 Y1]o#MŌh˶4)#[JY+ll!>+,ДKm>EE0Pia%I&"bt6'<0l]O&~EȬ$趪CIXfqè"BS&% 6Xd fSWjWOfiŬĝVvޮqJsWJ`$.vǞJZZaJI1IS#6&D-Xo0 O 5<,=<<<<<<<<<<<<8 c$A@!O[q uKIRW2fcsZ=63gF5%4yHA(AXsU񔊤$GLmҍP]NyZ)LGDeHKqT@W¯m j YZ~D@A*iiD2PJil!&4$Q1`2~j4nڑ6btR%ܹΫ^3%O͂D*R( I$ ILĤgGwV)*x%sBuEbЄ rCX5mUOmT]\Ƨl:׹cMqEkfjFiպH0ՠfF CbIJ P-~%o4NT𜥇$NF0fbFvm{ۅ7&'`tJ =Rs,cH9&Ԋ0@,vu5[_TdMW) RJ"&`Ǒк²lX1.4wW m6QLQ=C f%C: :'ڿܟTdie33KIDRa($"R؀``- liz(ZTUQ#U )ՕSj9ϢW2wƳFCE" "DHb@ d\TvtYzxxxxxxxxxxxxTAa5?@*!@(t/PnSR9Tħ.F&mW!y ΋˵mz7%K 2Fo*,yawi~LK 1pBۿJ{ɲ,Mh137YEtnFBl3$_OiJD)̴ V{æ 24%au2p[nMvDRMyOdUpfƫPǍ\CB!(@` YC6a9[;jQE!d$8f :R+Y^zQ?<ˍ4Ulrwg0Ҏi-}(@MDI?hA] r^ԪLJ|98/]\kǥ܄mI IDAT"Nt^&C!@@N[jR$j>uŀs.Y!v[ t Hn\J#TgDTօ7X+bfP.?%*L7dy?P?Rt] 0g2 ix{ nlJwvc2v)D!QDAH6f]AzucDӏY TX}6.#bIkR01 tʠKsu'V. (򌡃wB8Ώ6ƬE̫ Nmbެ^jg-at a4j;X0sR D$oZt[^KK)Y~Ω*+hUV*e֪tMOi=D`E6`XL783YcMC][guBdjY1@^ V]ge&9q*1)2//E[}Y" '2OOn8.M ;G5*O7a1`Xec2w4-WمPF@(Dq-1H[u10m~zpg0t{5ZRd@dbP<@(R"SnGlODw&Y9LꇶgSU{oS]9w{̵ϝ6K-Q !I%"cO{1DDiRZRM̊V.$31XzPJYڒL/;Odmbx;;C=R_Z{{KKP&mykgZ -ֺܢ#N5m),2VJ%J)$Ҝ%1kG,3%҆iPTsaxll%,^ŝ;W<BJԜqB3夷!܂`"nF;>]s  @@91K&23{m3uȖ76L[FJ ^,/.^m*ùZb7Gt?FDQRlUw `Ah;ETSi_pc:O%n҈.u1r|heڐf9A'RG/e*ttGjeD+g3T#}]㴊<=@:fӤ cDd{GtIԟ:5}eJ4c0Zg 0HYȾƶ\Sn#&fp  CKA1{2%`@R8I뙝U`vzLv;sn+?8ˀgTHFB6`@lC L%ɝwPaժh@[I'mj㏪Ӗ.H;j;}fe7%6}<0 ;’S :$z~NZ)&, k/Iaӈt>EV+5%Ո؊Rzn5#ݱNMmmŔm #BeNj0]A^SKE)QhHySR(!V{PK) ULh3. ۧ2%`=W`rܸ[>fLiwSn U\ %[@zkl ,,oFN!D0 yf,(*0JbPuJjD1+ʸsYo$,VX\wD8%l՝8ˀbB"l3 @ʞ aHK,>d9hM'.j]a*%OY-^81`7~J,ZmJs$&dKQ:H{˘'Kť&kUV醴dU̥rRfįpJaϱxNƬ"eMtI)V%t<)sRsaSL9oۜ'zl8L&>C=1+@!Adi, 0=t-j{'pC }>Z;d-;0%d!QedVڥ aGQ"Q7XǦ#qx-V| ,=B CDRjQ)tNJֆyl]LsE^JJK"<Z-> j:!ɜbM*2"W䘐JgH{1{EZ?)15~į˂D&')CcgvuO(75dަWg lLaUaݸ?X\bThxn3Ly%gO!ܜf8e+BP)d$ĨuEu℀QxOʹnWˉYKadφ B#t&6~SݰWxkc?.>BkR nhrt $ Z>RR҄,{DN%BVo [鵠-",1eR;=W@xBH PDSaŰmG-:$#vs;ZtDH&˴ tj@+ =Ċ8k+24NJBrJ8U*7k( 蹵궘Քң-O3J:q2gXʖtC(XQfL9c<-##=`9ûX9W3=slO#X<fMVJEX)RZG'Fv4#[>79#4(mi{OnJOI-S6HfPs,as_S!ۧ8F!z'  2``: d1+7yvy2 nrzKe@@@@@@@@@@@@pNdĜZD1$`V !USBKl vʂK,P.+`jvNAX>G:9Krs=3̍j)ap`p 4ěM뜎)IK()I שbE<ދsJϒaML3zWc[]Ș'tWe_@ә5ɸO$KebR|rɦ$"E_&23HtյyZrF=wQ!MGs&H39>{ cWJm{m8Ďcd*w9z} LE5P'RF(#FA,!a++f224r#>f`)|i H/;ѹΘl쀀iMbyr-%bNP1BaZ"m/wVNѝ\{-~gֹS/L!^ecDZݥ[P -Y#ikcrCbglŸn)<ҢGNS.?Ak4`nn 7Y5C[nR(đڷpl_]Bdf=D :fOI:wVp&{mʸPYjfSNUjHHGH9L-&"t1WRZרl[획~աY?7O>G (sFnn&2v\kj`[Rۋ`Kb~s9n sůӃ+j!=`1 etm[Ӷqzi>ޛ0bzwf#mtSXHFF&,qH$LE#wG{O=ֶN "V{2w8@XtR:)؂ݡ397j"FFda !j!k P:4= y벜Fr;=WUivUX+>zfd4w=Ї[n a7vyD)Mg ̝t؈9/KohAH8("J`f"&b<%Jsܹk}Fm-3 C,c6L^pGftc+ݫe.RE f-utD"(R̊Xr7a7 Y73;\̃//CCƀww$ֿ=kK2qJ65j? 3B(PwL""CZ M/&d|k jJ]6e,0KK13BOfrlMaQJ)bEQ䑿x:}u?\fb0ίθ&42;Z'7Z׺weA!0|;z owBJHo)!NAY[AXř;ɵ" mmO3Vw>_3FcOo2)i*#}M^S~ϲ CDBmJ"$[Ti]6Hv9|D3l=c>v}Bཱི)F*KDdj.vؠ-K<^ .3+tSb#bLG3]u\L<0gy MUW,'.Ic> 3&xֆR bE+ʼn5+>n9CgbxPnfS[]]2p-Klwj}rJؾ8o J2mɣ-mHM6oo#mԚ2;"ѝ WDBH!l)Ie]L>4%`C4i<PgEF߹%zh65e@@@@@@@@@@@@@E.3×dq3%200D{Ы(sY4C8a֢Q[n^l&~r.""pHJѾͰfV[:zU%"RZ0jc1։lu VØl̎\*ϴVs84Q+\<'\"")dž&&&p2Ӕ4.9[XpV#ӕ`Ì/c΄|Y-LaΚ9;WG]PI; _?UGJg<1ì[F^)2ҩ%l-bO0YMҙH0C9]k6!#!Xݠfc^sT͚)oS0cxʬlBSf3Dks-;  d5zTGQRRYMKi]^ mj(贎~*Lu:eFhvBػM>K"`AKq%f8’}0BHm +d( "$ʦ8No^1V=##9{VL4F,آsPet2ljG_Ua€aIp=6B̼ Q=g5>6"d=Ou"FkBnZDHJ SINmvGV{# 3JmZMrlgj[Uj) 4] *$sjK^fJ zf4f3mQ,dQ: @Fw ?Z…Գr:yI옼l#‰ (22b̐0$҇QйxbgQ&_Q,;D:qBqGl|{,WY>{B_>)b "|O\ݛa兹B,Daӟ/~_,?ӭ"Ջ4kޓ%/gMS:TkF};:oȣHx>Aڽ+ m*[Sb|Rz&a&):0c̊X BK"8D @fF$6,A]椧΢9K+d4ZQLʨ+L&ũF|[S-{qnXBGcږs|Adbj{Ʋ2 Z${_\3մnKÏFgojΜK!RJhƉY' bELt[N {y1> <z0-r\.ϕR,կ;\y+PR)%;'%Pb:˫E5JPg%Hͫ3SXeF {ǃ.(+k[˕R!kWG{GW=FBR QGH%7'\4=TP{Ճհ8տmU!hX-Bӹ S]"3'e0HSƙ u P ̢K+&x&K+V !R܌TMDJ%bbV13NLmљB4lff\6'H3־Fñ)gɆ5e q0/*4`cKI?FsCڲ;?K)#@ Ġ8!`EH)mV( g8}~>8˻1P s)?k Bˀip@ֶV"Ͽ:*UrSAmbQYYK>3%53z=ɡr#?TTWKje}1MC{[e㽽nqn㣏.WJ ; +/~uԭ&Ǎ̴'*WˋϿ}s9dwrҽ0B-o {7m0_;j (u.:a8c?`|V>Ů_i0DR(CfyJb-2d&&E [+QF6À3(MN[eG53{p}С㱟QVj=U=ѵQHa$̨*~XnAܣ?h7; FPO~pӾj?w9mu a'~q:Ж2PKx탭^}nnQ'/=R~/g3>Tf8ü_X_-\?/,- }W\ZGm11p/n(.m>|X\{W{ݚU$ dT[ZZʛ/}f^I-H-g)=@)1PF)!Qu%ؒ mhGL_OC眊]tw K2qL+|5,J!"!^0N=T(ۮ:{ n4Q ȺTt WNӖ{)#2bXuj[4{SE 8&Sxf(HꌃV҇ uf %`$EuDA] 1@d͓Z[=3 r:gLAF޽{?l\] '?}8o~s^~G XoG2ǛA_l_w>ttoo2mާn!w❛qP)RpR<=>?e ۟~\X](Hg+OtEX/_Q [[R,(8>xE"sDiyscuyqT~}qvRۯ^50*-.-//-VJqǑnM^c0ml,WJPiڇd w˜C-5\^].E^nů^t+L f GŹX կΎ]wFކˁqemskmR*RIvuq~vzz6ڲ8(U=}4Z<ػ]!:48\^Z]S ׊ +k@{20{盏ڒ8v5RE5aG Hr\=}8Vzn&Y9啟WOi+m`1yU0frM?SDéoAjN9mvF1x(X) U6+I1[SD#r΋|b)7HFDȰlEa Y%JP6Jٽ%b"" eM6C^fFgV$Ueaj0ϵ{)O'( Ɉ12./C3S_AgywsK<]>|PzSIֶe׀ABqsztTON^v . \Tl |WƗ^]Aewles6ek5HmaGOK߼>7_^w=Wѧ[~rsv~Q%eJR\7tXzd\^xPgy!ͯ[ѣYv,ʋkK/}Yb5ѳ-FbqT,?Y#W`R 7o.{꺥XGKB/,/y}[]uq OmPR'bee냥/oX(}%T] P,Uǫ_յ%p~xTɣչwMpcyiZ^3ʋ\7nra |vzڸ0O/a,z2/sr9jͯ&W8W^\v3x㗿/~z1v鲚#: PhKGy!&ZWOmMC]E_[ Ul8 !@!ɗ%/Iz]%I)H~5ΨdziD3VM&zD ܳ)ٸ2QR7GEuE-KJb"b&rTϤNZwzg{mlآhˉ=nYM\{2e (PJAZݟ('l<NM)cVOBnL?zQ2WKE:RF~|} -R$"WW*psT=T7O ԏ_}=vB{/,~ht/'EJ(m>}^~x{|֣G[|57~~|q0+a M͙xG psB|eErbioɉ:DK=Zved\Yy`Ûߥ/{{գӋZ΃+sO~c$?x\@yy'<,8pn)m?}uBzew*JG4ʛjūݓk(Kۏoϗ6>w}WC,hȴrﳫUr} =n=q v/=n'_}g $Z*m!^'K~zp1T}[9~\E=[mWpAejU=Gvqwq<]im@6"%յg~؜ ?p maRp(D@=Oz@BT!g)>k k220#3 "+NA=Ϙ6e ޚr[W bw@RO?)E0?\%V0W "``1ȕx[])`o~WzYV}Z,n>yj |ӁKŕe 绻gY;gشw^x2dA>۽TϏOP[ꀋkkEhoT'bqqS=nOROX/./ :ˎ=LFR$xwATzP}`X=rIvdwPXY3{R ϪCymdĕ;:+kٙ4 A𦞌bm6!P"QQJ!Ǹ]z2*% @V `/~1~^@pܤ_L? c ܕS9 RB } Ff&YYsS R`$D(QŅP0GE}V\\7 %ĬKe&cp6`k~a~<φA5Jv!q qű"!#D%IRo굛zVծjZ$$5jD bVi uXߩ%9wB] Ȭ&âIƥ]($ CBNd-2N 9H-usgO?+P,c޿WWBFɟÂ$z߽+$ t\=V+rieY9b2Wuo:~W{/ߞ a:̕W'/a\6^_\4C$#PT$gϚC#b2.HW(-o,. q}}6wP=99;\X[+#&ϪGڒ8Tml| oEhY|nvݯe\,ַv6}듼$FQT 2;:D4_0mRbw}v~l[mih{Q3ҐMjcKib4YBzM䔔C)ˤJP۠2 h}bVi,ǼGn.l8@K @/7)Hq='d'KF͑kk\Mu1kݭ8zETr9g|käѱ܉TlbV~jVj+Z$@ERQH1$vs [(y po66$'12G2߻b_);#.sP XNGju]..>f޼>\pM.BGVˣ:@ Q2)U @$40Mu,V-2X\}Jkg\)J8K%rMZ ~KMI^EՓn Y[zf q=U/߽x;{T:?9?L5ۋ۟~~_<9QCZƋviy}E: IDAT̡6y >7PvwoĊy(7Ȫ~}yrӟ<^|wϫ9&& BY і ̚bk8b}v#NcmT7337d2q@D CK,S͙4'j1Ce""DDZk'Й})[9̦ʹGlmsh0NtY?IiPQX "kJ%?q?:~wj^R.=$nٍxga+C`<qJSVP}YBoSpRH)#!@(b(QJ3hcd<52!SϰD!tNXZh럏ʨ䟍y *N.R߼DZoK+A"gڒ>|afOokvu8}O;Lƫ.U^-x y!C7y{$(V.Qeeeya2_)zyq}ksίƇ#ileG3z{'Et% @ qCq Ƹppzoy3^\%KhUO `4m, XNu9f+  yBd冬ÊɌpK%iL-8=9KqSZ0/$"$V7!qzuǮ#pԌLwE )~B^R8D]Pld%TR7e#Srvh+Y3%>lUTЋCm?D-($̘)EX1 0Ml!ùǃiQ vs'tSzqfИ?iHT/WbY ea:Vk[` k> ʲrpsuϕ<:zwp$I$}Ukd69uUP*t9KzjC.S#kqx/LSh9p]Sq Ф|6\P.jpQKk;;s'N| cf_~!3o݌MD)G A\_]JmҜuu3]R)GQ$@%*| $ j)2 2=,eg g* vFۇl'`xʾm;a5}@g%Vphn9(I2#2qJ9ВUe ͩj`Z R "3D Ii<_IkF3)6r^X 56V鈼 dGonw7DȻ8ϭ9j} \Tn+N_{ō%○V>Å;_p `(R!Br#JR~{ѩM4cFѫK"QVz4ꊡ|pLSTuz$횅_7Fox(S*,V65(- @}xW{o/{klSx7GW5X,DBˤ]n˸ 3@ggN*O[,̊nFJbG%re&9_*{.yCF_?s ߔ(zJm)a ƤT$t'ldfh:k긹̓!=9w6WG*:=>%Y:ٻ ZZ#)6޿8.isUUpx6Q;:<_[㽔[ NOat[;+y,sP;? 􀀀t}_7/^kZjBF%}9G[f ƌUhjm%V ߉V7hRMG` 5opP] i6(OW"8i|mMTh.%20%$q-{ֶlLDSNJ ̿LbvzsYȶOM> }%[j0`!&#IHxВ>_6o:ޙx[C8"o':':m}2H# #*fET'V&)s̞.^o3C]BTvޯ /x?yR~)N^,߯6?x?{|GE>d5, KK{'}8uuB޾?:Q".Vח^@~TxۣAv=X(k IG{+;s{~H^?1`\Y+9K]zzQ'vEPRLOG*\{,廣k(K;9ˏ?ãӋb@YZ|SiJէ?{p/w=nv|ܒ֭_<īkKo.N;{Ûz|~~ QR67m+?|J^H6<, Dgeן}rS]^^"QTYZZ. #+2 hVN8N45z-?eR2!6Cs=Mi$}}Ysx0"kORQdᝫ*zA I.f8:NnHM Uӫ4Q¸I8EKKCI3mDjE ^[| մtLW!j5!~a6&54(=t o\}^JRHD1#3+DɬHpjaf7~j>\B_G  ˥ryU>`^{P)U[Pf9Ň?Cы_8G}[s4#\ëW O |>X+o}&)b!$"׃G?]URa!LN~|pTxl+S r~壍RigkI)@P?8Zx`ʗ/^?~TX~l>%WO6#|MÅʣO$G[O6 D<-]<q{}hg"Թ^~P}5Da~yg~m)ILݗ.ta"Ԏۤ_Ao)={X\yʣyJ9||{7Y^̉sr⻽hV#uT= wWq:hQl[aK<1EÖ3ʒRnCS*3qγwA#&ekӨ01"$IR,Z&dfMu[$ˢucNQ{f:~e50xG1茾n' -ޥP0#1(V ݫGt?ߙ. J!3? , u%ݛzjDxTÂ\xdP?zZ˼N^|?FaѣGqW_ol,TJ98?4½եJ d×;=\\[^(Ԯkg'G'u:}W;;KXԮNώwOB^n^|y\&սݽSyst~y4?KQ9;=-=!\^,BYunP}y0_.8Ȫvuuqzt6.P?>:o_ܯT<| m%WWW {6~.׶7חJD\]jB|]}iqiqT 2)\]_ Vq~epsxpF0=wD9`e V(*ylrG`)1+K &). lJ@Scڂ4[^MS~{I]e܈W7~LL Y$1ެ,"aiMaQ4QG%StRJV_yWIV5jx НI-DK , &CY$eےD$J G#P"!mQ7aߎ"wt@nm zG3sC7[ҲdF|wzmV;_he%O]H|;4000(}j`n g*}Z}xtZ!{Jp㖃 G V_%qM@_lSH.7;"ZCץT$CT+7ɕ, .R\8 Wst*%%@+bCf+{H ØO R_1,AQbKHB!Bf$LzG$|T_MNsӭ45%}Tߊaiai&4a)?,\~N$R]$)+8̈SZCA_Mp KJ9(2dE$)H\RLme0E7YZ c;$]Yʽ>B),!%QI|Oe@\.q6y b:C*tl"´TCC]M8dHN*[LO%=ɑ;ٱYȒ3ln(o.¼AO7$Z-uN->"Jf~l( )+#;(*Βd$T h1f[Ř$@BM(k@*ƚ_)BzPT@Mw4gQŖdYdUm]vܕ<"!<NEU B˩UzA@K ]=6ҵͻBBhmk%D#P'.7L>,299B8%H9kjuw#̻#,WzJ)K:Xh"Њ]w$0F 6"RjU[f|C#Ͳ{ /25ʿ5N$ZQk+bQ\UDy.'۸H3*iwNbJ@[rx*|*הQ9) B*o Uv[dX* Lz#)Hk'mL~zϧOF̲ld̲YH$ $Ws_0R15000000000000(ƍ׬mȟ#,vI.ur Q+RgkF)*C\R)%K `鹦1ag/f!ԤzL*JQ4ԟ %`]Z՗_*?[T+J+*HXA2Hj.Ɔ;=pEUeu{ȦLC,˶mdH\etbiD"Z h~pwS>Sc^*B21%;t31f.G@T2d>4ZUR&J\8B8:7&)2 ̹؆ IDATfU7fXeJpVTm㙹Or8<Ċti,xoք4HGkqp ߳W)!fh NĉQ]=e`fo2mB0E(krIqe7C/c$-O[#Wi\U(2vTJuϩ$p R\,[^rOu< "xh8O̬i3C>Tdm3U)C}o xzaw w Xyeg/ٳWB}iwp"J*{x˲%g)  J rp8p̸wW߭SjS [଼ʔ:(JRW #q]Ġv3#.+R0[?meˢ i.,2SWU<*إ~4]9UX2FBR VӇԛ*-"֬ͺ|؅tG F000000000000~xφy蓟/ϕ/r٩qm+#X#'2A!X"_\".KH۸:e1"CK` 3{%Ị(ݫk(aYc^ХS\! Bp:!"Sm1ܬoIћc%7\MFףg_r p)"[ƸZ\V[/`ޓRڟ$V *3kEXz*R(;ٻ}3bBA\#Åk$K.'|` J$HPw=Жw$_~t͋OO0rI UWZ ZdPNL2tBJ^)Hߍ|^K;P8Ai([h]OiJ9.8%$$o) yxzʟ3V뒬mbyY粇}WrZVU<\yeU|-s=ٽ vCg1fK%2 ₸ GhM&.-C5LfXvi}"]2LZ2"~2˓T9w8JԐ3S kTQ(m_ulYM6%lV3_^BDUogXI!L%uRL"V\ W6+ ^%e1,A (y.@sC?'YgSJ_M@ˌ>A @HU*~1?KA4tU %'*W9RK*@+tibE}RƘlY4VT rGCFV45K׀|AVӌd;q/dP΅HxV{L]2/NܙŘa lJA d w)uv h`````````````仼Viu"DUS`,'v˔'#L ɘ,d҃D"O(*qMwi2 2xzѺCdȐoZ4Q)R*W!+ę(Q W$Hi; >W`!yYJrw ӻ/.},P+x4Iz:j-*1 U+Wf?SXZe3Ff!cPpp89\8BpAͿ/ kr.VuA )E,VJu tiq+X1e\|2",c 2 ̕BppGj]pW/流VJ',hcB(R۱ -Dŗ IR SA>̚+pZh4=<іԫ'$TIo ٢ae6`E4Z vU`ÎIz'#i ȴ+NcɀTKGrfݭɵuFm*oX;owr%mK+!0楈TJr|$8 M!@'X&&Nf)HN]%h"!n2pR)z2IEY!LE{WcuZ~U$dP^FI*\`Y"}8*T Cx CfxÀdzm6FYeYsrGcqj{ی|;@35 gi`````````````> 8i7JY3oZ0l+sK-dt| $!Bp q)0CJqVu@$y41LTDB'E8 %2E| 2@$DUQϽՋǂARҒw $$CXWTM1kLu0r$l&sXrA)S\pA"cȵ|;m!oTS8ތ6"o9w)2*tC,Hi$ PKP 72k3篆YY2 J7IJR @B҂BJ]W Pt>=%rK-Q^\VTI.NI!RJF?OaYTc6|'w]0TⰌIs!$2 { RQU XQfYbPQqJ$WhLV",3.]Vl\ WmKLzfuSM%)6MzOr70d -˲,fـ'$" $G{wy̼**|ܹ@Z(0=+?)s KtK]͊pap3;9 V(Sq:i-o@$ouNq4Kle[yG_H4U i8/A87'eVj+6I͂4be tP$ADxT="PӀ@֤iY?$iAR"]^]W JDwJH͡K#x#E5=eY;IhJvN\N M7HXB\}g  Dמ#W2,cӳ?.IVI 1@K.i;NY{LR O[\atL-":-ӈXјkQ(yH獬#6WӔCHSa$O,,\Vwc  `6ZvY6ll. Ł  *50I=$y p|׽qʊYe$ {\B,\%0/ΒUi8\tl(kAAZr }_P#Qy)@PƹLu0ҩ }d]6Af<%cYSl:(J!TUr.E*3/Wd1cʁ\J( e !@h2U]5Wgm ՀTpDdd@fzRQ"Te) YeEJs*s7.MlTnJ:>*kq]Ĕ_KEhW TuVc., @`e+?gÚ Ĭ5^A Y6!d61Kp"%8G}KnWdX26 "[YS.|kYF]%ap,\|o|zX8tx[C2>xkQ>ā5~9n{Zå.˯Ln9ж`gN^L߷RW;5o;rt{VUZAV0LC嚒ku&$|KEUCOģԷF7lo2US[}z{0 WB_{6Ǫub[)CTy9rqBd~WI;-G6IN̊K(aTF0tJ Dp ?$@UC_Y?}JV/]%C ^ZL!sI" @+ ILJYmB&t?"ke {jd/f;a,nVUZJBx*='tu82fY6̲={ &JIW7YLdщ䶆uXȅ78`uC{ZCTtx`d42;HBU-=lj <=:hⶅjvN1pF͑&b2O샜/N%Rihn۲.ʟums`I ڕh t~ގj!'IXc޶jo}uBO~pуND}IM\55y~`:yqn.y/=Y raҹX b7N^}۶Y*+4Bcԛ+4#ie\T4$Iw]5CDWFB䙤zM鈊 mdb1A~j>!)+,2/HF ɗ1K)|-ZJi* f^*})3~kw@lme+_nja+Mm6!!z@/*$|psBv(TȀYPDrW Aj+L{Vs)YnLWwmYNص+:tGbC.M&X{U؉rzw2sZe816hU74T[.CWooj۞Z:' @!&'SbqՖG,\ᾓgy ~puRBtrhx2P _%40EBL]KnlmcL4!]?]:nO_=>[y&G{?agrKY_+X܉bek3A[܀k1plz.ijڔc T]ڷuKo _{߮GNjKWX۞'u-I^986PUm}K{z;_w&iCVYUmpce˾&pU5 <'aSRUյEwkE"|sUtZU-\6˞S5rxќ@ IDAT4`kמmm୛SqaUնܳQjǎ>YdsFTޜFoDfI,;\Sݷ!55??<6=mٱsG[;%5b×/'jn2(bWp "*HH:7pIi [tC {o]SՆ?;P?s[xsB'p%|]֭g/+o{ =~4ɏM _?za` zwrUμ(z;_)TԳ{##3}ϝ9~#6U^}}ُY}}Kia~S ؽw[X /?vշmu6-vf/o~S 1u͝w|[P_oNŁt>|NFOJgW~_+"=o|ro>o|sNMKg?;zs> tDN^RP|ۻ/^-[=w=y-R HW^t{}˛뫩neЖ䅲r}});⇅vc^䅲4n2:짳`J)gVTI\Qq|覫TzGL&A)\WUD9Qթ\W!= |ίS?gkW6aT +B6^ S[ bdZM4ޙY'<$,۶Cl(pH HU~a@wӲ<%``8ˍWX&.valQ} WO{G.u)8=x}]2ŇΝ4t1G#CG50uǾCqH]yo^ ۾o{s-MOۺ:B+,jF1b3vVyf`  c۷VSWN#Gbh_S&`26Mgkn|4<22`q̩:T\܈,%c 8;8;99s}κ[ GHNOvz%'.vγ5Nr1YFƢ{9h ^<69)uD, 9J'g^`MA</,p5޴-M\6J ckqMb ߜVcsRC;zI]8un,IsSQqį[>j$vd|~9C}R$q ܾ_oC&{]r }tՃ .ZDE(-q_o0;\[ѻikW]l--KԴѢNPU]`VX,P] ȶ}{:|8v@އSR?b|3 O u撊T~]ط'h~{_gqzs\*&'>{z5s7Ͻxo|/m˘&}çNF趮߾pnZOD~BZZcWO= _'^Dtr7huI= Bj p"2jLWTcq|Rp>ϜUULN N \<%/s=n~걯}i,ct-8 btg_񞏾hTJ-'PyržZyČL1JHH3(YfISVJE͹J| @H@@dU,mtKRR21#9iVW؈^bJyJLXYB䔒B8$A(RY lmASRJD$\'^Mi.IvFWZ"Uz[91);f^e6V۳}KgXv]]|>䰦t99 m;.5~$,Yu[wGKMR  [ݓFE"[:[H@̌'6"z­Y՛Gi,})+`\\hkX_anU ljkf ~ٶTba6&6\Ƕ~?ut#a{5w|3p=޶<qFsg}odQk>op[x+b|ꅿ~.Vu~k=vw_GcUj_׆S[_ko`/$,aCG ^?xqjC; 3R^=1}K- KlÇ'N\̛6HG崡7U;{gCjO ƁfO|]w},zyz±+rH}[%sآՖe1-h<Lg]R8A勔9#A& ? )tJ N܌$ZOIzܡD0ƒJ%lf,]֒آ:^/ыi*fviQfCb,Ms*!,Wt![Gq͘h`hUoe "ZȐYe!'pJq9Wn -[Ii]v:P0۞z_^+λ`KM w:a~1HFݽ*>ıᱹ qM7 qd6ϱj RnuvVg0?2P\y`FKWB5 2lĪƆ^qwps284[LN9e=mV)\y ټe|95>.Y{$m9ҥ)Sciס݊hjNF/B"29 ]F'ygYpgWvQ`zh]fݳ9PONUmܵ5 <3J䪼b IQ_Jϓ0E?ߎ^L՚\nBYz^1w:j SܘɤS33>,[.lۙPo5LWsb8@)L^4@q- [4Y`W/mM("qi B5a \F\io}][OܜU̪ڏ8đ`׮49zyj;;qZԴm޾dݽ}VR,=Qx[}))PެB3{B g~Ǣ>0_ؖ3~[vgJ]3YnG7wnvLӧT)掽z!lO|l]{g~19wj 8_>;];g_9x.ɵe|-ѷ?ϝInOO<[o~ߧOq4@;[:ez G[@imq=G?7#SNm)v{O ? xow ´nc312Fʟ7%aDrߕQ*=#]W LҖőrC'UJJAric LgԔ^=IHѢr m*n+l&*RgR%B%d\nS}=r=O}h 0 CM0㦕 hM{ED"$P5HA e[vȲlf̲ C MeWL*(벁j1dawɕ&,7تb8 U-;w[~jڦɪs@ [d4j=Vӿ/8`nݿ-r%q޽&#H*;e1?tY Ծgh 8T<&x:S7yKn6Uԇ쥗YD"]]-ף$&&ygWj|b Ռ%֫?r:x]4_xPJvSgϦH%g撉K Pq$f{~MvT|䰻m{o ގ6p;X9>߯D"[r9:~̳NOOl gO:w}hdbrj:-+ŻCʡowljk >i!c'g (^mBN%yEL=ԟJ 0{C@o>ZDJȃ|L/o ^.+Ok!.P\{ Nʤ ,d%ZV*J#ILzLU"2Gr+Gf,7V_mKPH :mtSP(0e[wITwo _<:p@U, bDߗ+Ι?yn`6@:)nUNdT?\0B,H-ק#BD&SM(@MWoV%@]ǣĢhdh]uݵbKs mU o-bao H h' )xX(@*^#' _Sp]3Vor<|.,{D-םn锌<p}y{iRE\=Pv_VEZ/NœUEւն׶on UݹG}ҹT/=vv5]K mhъXLr z1P嚴nX*YnZ\KEIŮ~{,J54Y+Qyin`G{* sA !d>媏ȏ#Dlgk6=#=!XkCX2Ű0Tő<ePz\:# 09+O!,t@ YqeK"ah$_vDPrI7%A*sP̨ȼp26$U%Cm4woB:i,!YTZ`}QN  JXۭ7tJ3"c6よxRgڭ}RLjҗ )l*am53ҙ%po{T 2Xe`Hحm Cc{源m@rr襦=38ۼ])"2<h)<"X,ܺ?k˖ƺ.O"T[>hYr ݓ;z92)PbzTw:85:2:1=];77obyzx",..“y>΂9@͞w~^ʰRN Ļf?k PSO>gs'0@`a~nEA!$|:"HSSrmZaۃ{;ν˧.\64_iSG޺~,õ ,?rS2EY* ѥ"2a1K4H"Q@2͔/ݤ:æeBpIqΕ]0 [I \GX2HWRltggM ϖSC'F/4b*Ϛ({ Onf9e'eq>@U:<[;e[VȲllBI' ]_YR|fpչuV.۳JԉV^<-`#x[FgjbTBn:)7Kɘ׹C1FThw>s/ ެ Y_ ϝ<58m}A4ɱ ϣ 7֭r7w|_\9U655V F&>LFRщѩ9%,Uwx褓V{g q@T/9Lz?|c=t"wC9۪Av>T[ZVA<kmmwK xc[UlZBѳXRWǜGEF' S20&+kJT$?{м7 kĀp}mŠšgh!ۭYpk@[ 7ޒn| ̗;o?H;; u?`qӥoDܱs Mĵp"\ԧʙor|3Gڔi'%>ϐ6/ӷYvϟ5rGֆ>D&1ʿ)v|歸ܗ x?虷l@]8cyY VrȦ\]_g/DPYcc,lY-˶$8I8B#2y$ Ne۶mۡm۶lY$0%UH*%q!Sr$SNq)'wHq8!bIҖDFI]=A IDAT4n*hZKj4s (H|xYc̘40cr K',D,˲-۶CȘr8'rR G$CE!}O^b fNܰnat+ok cbvtLbCW{-@Zt 9tD%&GU찧K!Dڅy`5:Gb͖slhj a~zoCgO]Rat ؕcOKF"X[O< 3$@}sjϽpHnON lꮊMVKQbzhJgƆF&>YQmn=u6X4Xn;~mX CuGGg `|z̳Zt 5rD6<={,0knFJ'ʼ^@O;ZkBL$)!;3hyZ9xD 甬nԷt`:sZzZᢦIR @"IS6 굺ͽMB6ֆX&kںӪD"tj(}?Q׷>/=Xry7_pvȯ<|T+>m-5|/޸a?osݿŚ<~hR҆&Y7+;Z&޸?HCx㚀g~`Owv?0jhjȅVH s/N;O}0Vz AO<.6x|;6o{-b˯\wmY/'f.g|i9>kO T,ƤWZ]cIq\rWS*;Z@.&EJ[ ņJg +H鬏?P41ҥgJ!UKT=B">H?ԢM&`krZNh*^Ϻ |& L;h``1PY}[rcr%@ ̲lYvزCrSO:ELt~~+2FƑ=a, V"7߽I9U{H Dl(q]ۤK`ܳƆ]"ƒ4z}a:bjl2 b1O\f*R;;EnGcnlbv{Ariz4֌ƈ \83uwm;ӿ @,N ޒ},xZ,KȵS$I0@}gbsPݷӗ#)`{gI~ͪ{Y{wgxt8)*K];unEGo͚khy9x΂mtZG8H.N'}V?'XӮ[g(05;{P7k'WP ϲں:q9 U5{v>?{xۮs\ܼsB1` J(P)Q,%XЅ~|4Q@7> E-SǦ}` "@ ! In½g9~ǜsٯg}r9g?֚51=ۿi;%Ͼڳ/qW_9Mfg_wUgw)ē'j;z\3Z<|߽}+F,\@ʆwA+n<>U羴~yŕ7N[^U<+}>[ķ_5JpExܽm U9Ͽ|b/gn5yࣿ揊ix/xw|LJ7> {o?}~ ~U5~EԧͿcs|?]w*'d咯__x}ٽgcv#lj;n/i_ y;3wx>)2 lcnqC-;W[j"刯Zd%ZȵLBX Y5.5)iLKȉ9tQ$!(b&:@<7޵jTH ˕&|lv6GwS߉p,crCJj2 fY׻ZCДd )en[zy`owmIaI83m,s7<{n?)ycuI5˞xىS}v8E]~gO?wT=N]pO\6zG񮻾 "һG,!rO蹗\sg</i<+/3 >o8[?s8[U9v9=+.9izcwɅ9`3K~̓xwu~q&a猳}%_yY:&3}<1>V#.x_SgsKuA>ufTuSgn_<7:\y#;sqA\;fgƹ0,Hu_(>k?+xv]'yǭOޱ3~ą^y9/ ?w3MVr|3U_yϽ<|MB39K/3 {?;>syj_xW^4rk^@ySv]Hg8oxUgNg>yKr⃿oyouD'Oȯ~[_\;cC\Knyp;g{<_5O7O.yK{-xoo:~U7^w֋~w|1>G?~W>'"~wϟY_tO}_Ӯ}owOĝs/ _W_r\?C[:O;koʿ{ͯɒ@:b6lշ-wޏSK8t><|_-vSoEQo~o>pIcW<)לdyO=$"=+nc)vǚpb~6ǟ}&w_y}o+Dkۭ O0@DP.9'.w T=&MV䥘 +A5jD1%yA|dd-46]M)ZM)a<&OJ҆pAbGtT9¤1\s)2T&$lclyƴ "/ן蠋EXz;rA.ߴ FJVуYLWqK/ؼ4PzU/*T=vxH("eЄnȎMy;a8.]d>Gwk΂S,knt$Ӄgjv.wp͟>~gc=xqEmGo;)".1[g=y?p=3T?y;s3?5'sx9kZ@#Ƚ׽/s<=sGolo#J `O)QȞE0'~ƞG1dwװZٚڠm:BHxDRH("AhT91h 4+fFOdd)ӒQSkq@irLQz 59?ʱ0Hc=7 . X.xCV}G{mܰYFi=AɅڙNbSpH1|(nFq9W>KQ|mrє\ Gjq w=Vy߭~gQ_^-tTWE)DNh2`8'.T=XцH2DRVJHPT]:ȦE+HaEC*Crw$b%3e~BrKѦEt{Xgi%e(CI 6s6FtL} SBRM8I/p) Grug&ٙs[r>HSa1v g+9FhI팩 M`B0ubbӈS{sͣEdg#uZZ5m_xDSRZ1$f"ۤX'RW#0 UvB Ыu~~Œk#ӁY ײ cG*R@XpёyZdLbuiq`Q,}ӷvc~Ρ=~#/wfpq)9]l`";_wUǷ&J=G_8qrD;̳Ͻ.;4wKA.|r9jJi1ƺJ,fXZ50S1ڶ6~,TfÉ*ʌ[qs2Uy7~4a# q{5Ȅ\ƗGS].= qZw9%:hrйw3:b5~8y)";3 ќb&)& BBPm:MB;^3i6:.FoL69q:cwLbދ/W3h#'S{+7,Z|tqq94,7[P'w6"؀D>MTqش5dhDE  dl(WCA$w[)^KJ`*;&$tD[ҦNP"Ce)R ZLØjum?Arg03){qM%EkZF#'lj,[{e+ul <8fWSk4͒.׭(|TYfjuβv!x٢tQ6T,c ZU D nSuGEHNξEdLUZؑGbN?K`8ɋqqqg)1!*hN(ECsL8`H ƒ尤ݐ9B)W #qv2JE[14;CfMBUA6(hh#1($ LRp,&ټ'RRV,1]0k6$Ρt9Pz㬯z8|<޻nN "H{|+_jfA:B9FQFH&Ҧ%YUvdžuqqq$$@hLE(A;滁禳.|~ VbZqjB2"c%W,BP-Bc[ hz=T&)6~T6_TkNhf ,2Wj8 X M3Ѯ`01]Itا 69Sz0/nq)i.2\!N:fMjڤ[\K;%tGcTj&urqqǙgXi@E( U( U,`NMvb1I PYDqo̲es OJPޜT8x PUѱM7U %H,ElrREZ | L&\lGg+W.l嶂{X|QйJ ‡v Ĵ/.9OU(,CJ:%"FcLoNzUoUh}:ZL"i%kw?8xZ[l8888FrP) @ɐEJ>!i97%uX̲"E cܫuq0%K˒3ǀJN ),yL?w=)% $( V|(;_Ŋ2YRWJ翢mh[Du9ti&*7vZs&40ʹF_DB#aFUaBUBCDEgV`6hOw88<֛q_m8hPRFRAT6+7lk?i slxNJ3FF )ے*R"; P,fOdPDSЄbͤLbv,eY(l$MkY>>6$= ̺L=[dyĘELjݨN9~haR9 E .i?5׼_һK=]O~˛OpW_~NCi?}W/7x+ZϟDDw~i;鏿3o~u_^|Q|y7O~+o%׌w'wo^g{^gO~}_O<>L'7~?~ͧksW>7>7>/?D_~n~kǿmGuo/k;Ч7y}{i;o+O~}犈|W󆏾9\zN[Oҳco?''?>ޒy7KIugկ~z?q#ZcNG>R=ʳ*7<2e896p?ǎdF @2gTMB K0q9L&97$I5̀I1XeaРT"B(fb/鍒2kf,Zq4F2R,U)8A끈蠹2dXfW5p&ՅUkm[6}jbGn0,[f+X>F(ɚG| ;hy*τ9$%Ȗ=*1 Ka>ĕ]&",QZNPMy,{;QЯd]huhFp%wڡ4 :"-Oy+ NtM/۞\" IDATyz3{7uW7|& "rM7˿۞ w`9Oe}NfWg/o~O}w%1KO{Kn3w_t|3?g~g_/u~|՝.zM_{yk^v5\s5_3;p+og>֒8G/'/|yy-޿j)]dO.Ք0Ǎj.&ݎ8 1ET$@ɱ$kS*&0 K|1e$ z V ;;S?ǪjvB Z)*JS! &iYnLS͟/Z<~ױo41ӟ+bѯt۶8bqi%40xسyC)cġ /6/ oJvҳ2+5PAQ~~ݏi֟iLn^E6pyq͈?z"""W=yn\W]Cjg<g~?헟wʒ=:zKƿοknl!3/YG}<{k88,? _AqD* "OF2t_4`%QJf'Y8Q@wTA }oRus_RZoH+1y0Я4H*/f7y8KL3Ѵhۏ)WA(&e:6,w׿"f\Z`@`ӻPϘ @B4\s_p#kw4CsuA=7>׍e\|r K?}T6`H9&z* U p[:G H42]t0 E;\O}Z01yN!=68{8y~9u^^|?_<[qqB&!(@%H|߲:ykbF蠦WTE6jHC BUI (j%#|`X:Z$X+HV969I,7=Zm %Ash5-`dK\WZbQRGa^c6U}#FIJa nw_CaJϑyg)5Iٶ..@*k8G9zoG]z:sqX Q@@b(^{@v.f9&Ce^DK)eNݔ:K+!RJEKqnii$cjX6qv ^YɆ]|f.,RK,zn6mzmV\<*DY*}HK.>v^m,#j2aϧrϤ}ONQ@zH:TR&GeCe"e5<1UpDμ_{)l|$ݽuq''_ӟ/qqg밎E "QB`~H GcXsS54L1_4$Kzګr(bR~V )YmfHicȜdVZv3HjSmҺ8GV׾Lvzg(b +82aC{ԻXS/ f 5ReɖlՊC^j4N YFLՠUR(&ufY f.6p$ΌEwV`X`/uf8888CEAerT$@ ( +E4)T~2~Я U %I%!h?!ZATJIRĒ$-L4_1522Mmz9@. mNj(k$tKWvPkeQ.a6v\uC1SƦl x gY ȟ7.;R ZBUjhG9J>%lw҈cw$l%?p eU [PG: U/zکq_֑~ljhv$m@*%TUzZU*hUS~wk1ߢt4>rl?V ӞHyvcb{~J;eҥ0XE2sE,qqqg;KQTSh&X J6&mdwק"If,)*,kdػO6E$<~xӌ<&nQ`bF\|GXǹ?4Ү<8D7r(g8;I-lr>j3v;8A;X$pj6YN-ۈ[lf.I'j:.<&FA"ACi5XvFGKJ:8fdIq95=n]W@%31Zɺ w,f8888C?|%Aۤ*@vdV)Hƺ&cr$D]ed z/;GZ.69ia4QKu󥹼ږ[ {)Q3pafN6)%Ӷ:6d:@jJ+ HZُVbrZCO>}:pqqqq:U*4$`&RWM nCERK4 1IvWJ F4/%6eK0|uJWki1/֜3p{#?&Jw`ŷ8lJ A2g.T9n /"&fEzjkud-o\/K>f8888nErجY !;hAP &6Iٔ"%XA9bS&EL(iBā` mMl?aIUT ۵![t ϯ%IU4TZUјuho6 ҞI0ߘ]W}y:.qqqqqqH=1} G EP AP * R!Zv!"* $-]ƚ1i X8Q !9+Wh]:Z G|\uքLΈIrKc;׫s=$bʲ!BHuudm4 *Ynsf;Xh.#ԿY:888vU4 &KPY®J>OȈ(:N A ! @ZYXPK6&qpyL*ĀF9+ga9:zk)DŘ1o8gfn\aOV!#-!u˴oxŗ2+oK,tyEXG'btU,!zFv뺮ccmMXB]ol袙?Kzh0slǡ_,qqqgK0RdNpaL?gK#OJ3 P"{r И~d랇5䱳If<\kC06j<{ܤ 6Ơ0Xv[ *T5 PR1%bS8j7:ׁkكmƏ`boO>㚥888l 9RL6;bh]Jql/@2F;IٍU`ONJC/T(1ZmoZP˳_#IkN)jJrfQ)cB}v &Řݤjr[ZwdXP~rŁRvh6I36ٛeKNXaDPD@S:~:~dQ0s;0z0z`qpȭ+p5KqqqF%>Z6H0٩F(BDDH:FՠA4iX%֊UeRVkjVsmn[C>Ⳕscb*X ѠB%ҢY#h"Zvt4 9xg&ree.rI1Y:88864 M\LD D2[T31#(J % |."}cmq7^AscWZ`42&L3Q D02$&Z,hcrC^vf}LnKg-IjGQ2V`Bcc]ǚ(YD}M;7]WvSW~<[wrEf8888DD7-6h=2P^nK K%&͒MhBB$"1< P!DǛ] M;N ; ,ۜ=s^}D(˿;SotheP\ʼn-Z8N@٧l1qFr&H1bPVԪE,z,Q$JDZY5}% [88wɦt[q30Ǚk_=;{ ʀ7fJ5B 226XѬdLfJe_̽5ֽG2\tqqq-lM$Kw[w1I3*ѴP0 AQ) B-)3|[lB6 /\P$-Rye-bS 'Ә|h؎v8YwL\mz=,}Y޲ R#+ DDZzh*BcVǚVGǺc):9+;1x>GbKmgl5KqqqB(qbKv~I,*% JP(D|O"nM|Y"RhTI~p%aNٔ8 #0dL , 4\dVUUA+ʠQ,9Yfu& ʅ`I丧^3'Y:888!Gr-2ްhhc-MH?c, j5VAU*T;AA!)F,T6R5m;gC's86TC*sp_#mrr̓ye\c#pNe=5n`TGTzFcuc߬N^\9>'ہ鄚7ڊg ۙ!f8888A' ¥\WId2 >MlL#+ȭM(6EMT=*U@YcmVьHJЦ ,1cQqXEVY C5W*nyZْG[:PHu X䡛%RnB% AzUMvc}ku(m6AI MT4ƃ%Ӵ:Y}+s;d,qqqg[L.9(h ÷V( A#!bD#BA+TBYBǂ%ZR[2]f;`:#rLWֲv̔5 nX}LlkѤktshKڬH:$JPA@$humd4Kmt2vK h)1Y:888v0hbl9ʻFWT! ^m,جPh/v"幬(u @V !} TX #4#H[ؗ:tַ}6iN}9.H^+W^bKqq\$E%jyfø}t5A2BPQfYWPiQ2Eۭn]ֱIh}_E-خMiVj]ta>y#888pݘg. 9ZE#H64[ųIJ[iX*`*VGZ-)ek*̶Brnچ ڶpɣٖ6\j!.7X۝M\WLi2QB*KxZUUZdcuc^!CY?9Н7s3ゥdLp?KY'NFpqqgs/%p(CJ,Q8Fl+kk4"(1cEDvQG UH!$!9|EtGp71rIŘcHRٍ2xͩ V?gEf0&. G-tI^rH;<„pM_&ˍM0,g:qqqfs+n` yF j%9(hv}uD橍l3>cVWu?zU=K.i,E!E c d,͇/[Nw{LjO-r]zuM6>fvDqTDU^PAh~u~~43ZھcY1,x$m$z"h]r>6iQ]XW9pq?pfqqqFXc|%epjC0:]1aB$Y ̇DR0Zm/Ph Ѫ^UTU P"$(1xWʜz) qqqqqY*[TL~YЄv6r"UYHd˜$($TF&B Q(!h`V73Mzې#;`ζt-c`f; hU5"F-hh+S{i/"ŧ)fW¥ۛqf8888&T. urJ&?;,F-W % (MH1DfQZ ګ4b5n0b2䇷]6R J&baxg}>&}mh_%IHREfvT+cͺNi,-,X*+\>#!-U-$&"*9l>(G\#e9o"_-G_ͲǓ888(S=&Ĵ H n(1\c,`wkp,1hs kь5B+@TBw2j#Œ$w͡`JT*8gBaZn:H!uЊ 9cn}к &΄E |r!J|i,K/Jb(`A!h/^%$lFK܅>(Ornaw[κ7R\nq:T.)u _uE]WfqnȆ⒥888(;2dg&l}cE㼦//b@דFEiLYК4'3}$Q$ jZ?"!jP)NvzӢY$Y4HRۦ")ҔFZY"XG )$0<$4i]va BݞLIWV_.3~v/ ۅ[t~6yׅj;+˹z I >D.V*NlL=? 9Y\ӵj{ۃk 1;@Ph U PQ@+v44I`ia,;2ԕy [fe"i+G|ա+jF&Ӯ7a1l6{8l}5/&3cE Vo/J8888yM6~584/_cnC![te4$JSULjHmV & ^ ,ƖوPC(S fd`C hуi*ϤMg _*DʼJss7XXϐ\רӥ\򂼒gݭ7N)I@YFGRzR UTV!hDE#muܭ"f`î-V3 >ޕK|oZ0k9FPyșl#Q54aSH9qpqqqu3:WEs1v|,㰀 "Zp_E D%G|Sd0 ,* 3ng ,9āk\M5ɽiG ۊ!hq cV5-HI **D3u1)hK [9ZƹZz;oo6'P|Qc db-#qqqqXٲ j\/[DLwDZkѸAdIY%)"f`ү@U^*JiJf(b4+nbѠPKZ_K(r6-r,84jqu ;8] =tZM#gEmBU*1KgbH t,TX:UUz1DcdkK!e9lV-#cdU+ ލ&Nq*ݪӯ|d888828ʖŚ7Mb$Xf +E** *Q@fDQ B$Fr>m3kgmȴΒǫ 7>&7 lsílIDLr䤀 C̘2`ב}:2\r ;!qlYbjV G'DfƜO%?qqq &11a8{l8 V.Qlv"֍=;ft"mHV)1`)<5_]*z(B5ZE2RL!%Sf5GPr eTr9ꭟa\VIsmK~%1`+Xh)w@D4*STXKDwwZUU#j:Z:A!$J& [,cr\ӣ3hFo˜풁pvqqqg̿e]m0tގd̷9ʉ!gleK}mj&uIQdg$lĀP@ÝY;E="*ǡ)bB1 0!"3]UGuI;[ߛϹtWxz+%يB802"T."RM|_o.qY\D'd;k ؠdetDi%UY!"ü"P䥱ۈ,+ϒIB*!PрE0UVD5`ՎJ[q~+;wc#]d`````````````PJPߔ kqLZgL iӵ@ԴT7~"7P d1?ș3D H rhΪ@Ɂq~O6SyA-%T:i6`Q4T†h3ymFVH}s"c1cqC$ABH)cp|[#&yi:YڍX<)R040U-?ܘrU(qPXX>5)%H 1DܬvE̲, 1"!EXL DJ7͵O39@0jcgMŕJ4a@?){)\~ ԡ50@jVDRx'IY JpTv~d1GI.RF63b%E׈jWrMIi_!Ӕq8"rH)whr9b[)ntKYek6o,K͡dU9c]N'rM><1/5T)]o%yb>x ]%589'-Kw0沎,Qʊ$:`)*|[*(9x4 {_o cMH{o7NcHq%iebۍ>g br|^Ӽ*PR!JPv3r,e!ۈH*)IBH]#j;?LvvLaђ!,vJn LScM5OU{1}RvJܯšJ'kiшn%uzQe,4+d "i/$2ƹm81f3f GD Kb2i( 1NtY;X$Ćf->V mK–G# 3/Ixy}%G'p A@'dg-?j.3RD܆xf]g"*wp" P(AS2Ch,DmTJ J T #gdil$\.,Z h{,ò:P5e9I*rkQk/jo>9S362$Ɉ!%.,\| 0#2%Tr*ǧ2t\ ^v͋ 2`, b̙sέګ??x̘1gyzlF $5 iKo K$Q̏ۖ73YE; "/ g K mD-VYٌ[D@q) R`Y7L.L&XwJ$2smd&qcRѷ4'`̝J cs[62tʈ#)>;j/ idWB-Qj{HN'^?g<B*u.[Ȁ1@h| Xxq-:,3gN޽h!@G0Ds7r"ɿ0@&3IsR(\ǤRK@s,"qιŐ1R))$RD3Θ&R  fme"CDd)PJJ2;,K˴]30bFʸWXޖF疮qK6!)a̲eYȸT8ґ2"$%5e3rO^!!_|wfuCXs>ҤNKPG$佉ŗJ"⧖gcGX2Jc޼ye4000000000}38/C%%E С*r?B 9еa(T2"RJyG 0@"b,6"g!1$H)7H;f)$~%bn+Vʃ IDAT0(EqX_ Aف4E&SB>K\JXn3n3nT2"T$lm@,4R?SZq] JVThm!SVڍ +a*1Tvm- 8W 6Z|_)"bq'y-{LYiD; r[pٖ6})cӥu&lw_{Ay5000000(܏kH$dqH1XS]f%"$J^N;H#t;鐢.XSF>"CƁ@J)##H"#Ѳe1RR*!$I:RvŽt 8Ffsb<ę͘=s (R☿#7hƀ}G9Sb6nYS'exAgN4gZb鲶rm˪<ĘhI GD8T;c ZISkI/r S52-(FfJhX Tʢ.{0fm!lB`]v, cP!(3 PUUU>ٺukySWJC3p#ve֝vѓxGQ≶ U٬Cm1*':m>v[S9z='>um㝇z̃Eg].|;ⲿ|Pl`````ЀAqh৆%f2-%g| 2TJI%R "HȀq!""ir#'AJrsJ $",DK;,1mJNG>e֪:8bÒ0OŔK3&QMsfYesn#ҬBDp/KHqGER @e!2ɡH Q젏 (Em RA W7m9/1)ko>^4wc=`ꠦ˔eUW(@ʽ ު{N#_~#$k|$"C!<ۦ~_ڥe^0;+Nd]Ǎzq퐶u g~ӧp_-uhZ8 7׊ 4M+!1dYیYH%"pJ r #Id\OғoQ֭WִJ3fbVܮ dJ+%rL8R;N p$Rm懁Ah޾CPެ+λ믾ܴozkng΢oVf]V?\}Ý~'Gl\]{ 5̗l=m--K_aU^ľ}kߪI5k'0; " 9C<qF5f‹ޏ9f@禕;=6d8<+?]Ӈ]&Yx_ydvSWZ ܢҮl#.YrJDĦ=p=Z7j~Q:e@M~ُ};~4nm|WXR- ̼r:o敍:vlעev%إ=/,\upL#M,-S=y5j"\m̏G1 "(ER)AJ) bQ{"=%"JEGHUU:D"RE -lۮ!˲eqƒʭcaYbB 1XᏭzU񜉌[V(TCbhIIv#$B`#c@H^fk TJY1uedJ5bCS+p.+I IJJHHQґʑ*Pq_$2- H֭;_/+vq׿^~K~#Ͻ3uu#z|}N> i=:fG{W~ov/=z33Mv"bFdb!ěh)";@b]>%eB?Sh#"R%#RS-r Bh3^aFW2!俢hzsLT0S|TאIӘ=av [ot>zBυˊŷe[}kݐrs-oZg*3Ʃ4@8$Z3Y#!5,8&EHN`Lw{>d+)?D vos!Yrfr}(^K -^7"5uBOg]d| e?%s7\wa`+xmX;wq^MQ6}sW:+Gگ)t8xw8ލ~rkc;~~iٌ4_ؔM }ݑ?xVǘߥ9n޻ w?bިm@.﮷|_4ᾃ ^zr[jg{b͓vKS>o"4;9kW_=|UTl[zo\VRNgګcE1gw١mYg[y]ӻ@c ?9/;lDou̼J%~qZ+>>a,.={7↩ja>P`X9σyF9Fw~wLz|ů| Xأ5B"1}@6/UlQ'/}4iŽ:qWY j⬀Gz{bljh+j]HjY N4 `K$JcAbH,F !sK$gn0k"f6b$R!q,8CY:ѥ[ 5h+Rrkz#giŀ=+_c f0S~J%$`.,4. BLLRӐ܆13:XS3H#_RwҍR`, Ve9vі`l5=<Jx'u2 *[$.SMOM٧dRrdYܲʑNDȈDP@ IbDAݤ81tՂiTBDI!V2ݩULZEgX'scM5G[vp~`ըIJRJl*RM+@?'}6oşsu!#F1b 2n324k߾ͯ6mvvݻ7~eÆ0t;{5o ZvȽYf--<;g2T`#3ϸfއ~Yw7_'.>hw%,+W|c=g2yy=:5n _|ڝ{uqu9WXE ~{6xR }3_rZw Wϖ֯'t`ءO>v`Q%rm76eWQm,[+hlZ6$ENcb8]5((濔@^#& ZSI$+-meٖY2[ äR" QE}' Vb\Jb4Vk-i$lJkآt =E"Y(Y,N9WT- :,һ1eD-Վ (U.)kZ%QnMn34+tDef"Lk,f[<dQvDDzu&jǎ`$FEm ~/KNsLYJ鰬YV!#־PK"j"C*T 40( ~P(q=};찜>*ԩI׶e%}O baGNN{_w`'d| Fbӳ?g5 tAS?7@Z6B ϲ剏q wߝvw{?[ Gm׸U ۶ZoZ7"쳪(ضX:G+}G;"> 68 P'Y2q/:kGܲ)vT >_r#nj'ycΛJQ ԟ䦭ZibKlGXR vfJ#"(EYRYnZ!ZK5o[߾̜S~n=䫯^f600000(G qO~̲CO_ i;%ۀ ="RP*DnI.aHIm?rȸ*A)EJ*)AIDqt3QRJJ P,P'GJHc![ϳH ؜2>֭eRJ飂Oko``Pd,\&֗͛7Yf\`k>ěo#z:f֨6]{7W~]4{8|p_7ԃLU̝یwd# N뛴&L:z7#1Q>}ܮC˖(h?b>)/N {9.?%xP VQe']9]گz茽^4:sZ=yolT@,W{jߣG_}j/M>d̉-^č=68M<~u\ԭ۽4Ou,?_navm{ ^q檊coMǞOyKϼ$W]6NSH ệO<˾q ڼv}粦ç-nׯ=4u55en}*ᱳ%έSڢ(r-ucwN)JouҬ~C|ct[駟~{}?ᆪZ3rDŽCܴXw8)ֶЃR*:u¥_O_Keww['QqDaff1F (ͦ@y.T9(I!@}RJI%)©vȖ?TG"5ljpM$: yK5Ȣ?;#ƓeIAjatC^NzleLަG\b}=m۲B-@. "RF!˒<[P&вڞ彅RQ2G҇=ge yp?ҌtC=۵hQlL}Y7/L9ۇ sԩS->|x/ZȌAJlxku՗:lmB[ZwpldK!e.6" ~HY\8-iOq$UP)ʻeVMkBW:C{;sl C̪Y!!sJ:J:BFK)X n%"hK Eo*b< ɖ_Iřb|d5sB΂/\XDe`hEv#8'YVV1~@E[И&pn=*Q(%!J*> IDATܫX(T U0nr'q!t%(}EOEݣX5%/|sɢ5o/UϢa=4D(h; Y=_K|!@0EFnK430( Ou۝Sr:v0I/}qX!ҼI% c*%TKJARZ&seIcX5u{( *Q%6RFTG("aq!1DdecTJ)9]%y7|Jx衇N?t;a>ۍ$ AI :>-xXetܢb$=|mFTP$hb$mK$ps-C6gql!)PII IG;+h XHAPFn˒岪"OkðFE2Фi+q~#2BR_줔B3;])qnq˶,[a BʈPB*+yG~%yD ǭJ5pL~9O s۰V vb4@X5vؘ)5ooq*ZQ^FWՕPϽV;0TR\*jct*D@YY " g<(IIb^~JRDRuzV\ $qnBPD,sEwyP_u_' ̠ݣ(9Fͱ XaɹIIB*GRN`I>wCz;'e'l:鏩9u)\ŌDؔ ='XJQ200-8 jK01TuwJ$MQ^+b (>WF" &:1JIIYg; QVy-M/}(! )"Z,nqf1fZ@HBJI$#cE7.]ób'59l (BJ0N2s Na6T֡aUJ9,#"%ygx,;dY6cWRD2") M S?F`K1ix^{(fXKhZ<ָ? S?'rmEfQh(!g+O3_7000FI  p" 6yҧ Jʚ$chQ(ebBܟ)(ȳ) H)X+e, lf"2bDA:NCq&y=n$ H/so^ -\Xr֓r Q!7-6к_j07pt2ƹeLD&9B:B:r;`3JEW3[p][\ļeUzea7BIڼMw_" $c``KÇϹi`````````p᧬i &@0y3Օr@e_cr.r`z(!%u"N@MݢA! 0BϫXRHE 1"rfR̳*"nGQ, @YWZ ePqb܄Y bn᡹ֆfF56Iev}:$ҹ' 1kVXRQq)SF[E"ZUBfJˆ58Yn jk姁1$40( l۾Y^gi`````````N܈= Jxh!foI%RɋL@bbq[Ƶމ[j%x@v/d׍ж(i[CDDR I %8-۲,۲*BR I RJ)"%"R:r ȺUBqjH '}&.cG\y(z@ o2 `B9#^NLH"D4#!2)UD#TBJIpCzL9OQ;,K-hԊeM'5{&誁pչ%BĀj( D"P(۽˖-c4`= $8˘ ,N@G Lrah m ͦ".Fe!l%ОGB@P[%i@rdR @IR:{}%D{Tr*f@ bTt95рRGXrqK*R9BFq"P/}#> UI4O%% y-,2%P7܃Dfj ,7x8,/68wtMs؃tiݸ6:W^ﺙĿ罞QB:PPz8N0KR_I(*ݽqc@ldE!fJWQ^q-C6OPE)% PR*%T@ A! NxK֭aGHF-dc66g6c6c!ӵCLf"L⭋Z ,7ViOjY'w{T=g6YV@҈8e[Bd("DqŽ;B(c1s\$є/MoM=Y/Zl]'' Փn AjݡF ?2D[і)PuVmWb n$ KIL)/EhOkRPS* @A#c@DP*@rG>:22E1.'wN(9BFpR1d,蔦h j\ﰑ$0UJ%,3""JRIg`P 6lY>d{suӳjz_I1򫻎G?!m=Qffbx*KDr5?]Z%4JX%}V܈asfVHǿkIbSהg{b1_UHf^\.KM8F@F@ 2θ 92$bJRTJu?s:HgG `.)8ל[sRIGF#T |Xf/e2^$ yYzUJL{78, J'J)3o~)6)[wrѾy`V?[/Ξ~Փ'_s=s}G>:vlעe_`[䛧.;O&-8_f ]!"b<`ҧMCFMuϲU[6i^<>_WIV3=N`ع]F-;=d|.4n_\r tWw9na u =sȁ;whѨI8Ɏ3(67qkӤal+f>km{1y1>W޷[~b(aإ=/l9ry.^:6pAJ3b )b0,E@ g#gI܄\BEr"N:*\U8)$e۶m,+Mc T=e KYcGݙLD'MJ %84\擝4:"rCvQqn#DU88J rBrhaISc36ӣroӭ$T;ߠUqXn2|C9$C;_m /?N^tú+ޟ\w?zNޓ.~7}{S?[OO<?#ķh|s;][:k?;w?tS7}OúYݍ>WvZrUguC?W?kͺ:KpP1q~lyf R+Y_ #}W~g[~?D^t_^i}~f|'}Vpe'm'߱[?mF N~;Gr=;wmąӟY>b  )X6'_;P:)E e6&mb.) $%t'"pŽH(ͬeUY3BRu&\w"Y_]C%B(Pұ4bBKzo+MB17А@ɖs-;A8 OlHN @>g\A{,I98qL(p$E H%5ŀ.0>Db/QF[z'w(OUFi~* a`[@mbٲfP(J"f%sAI1z+W'5V6lܹs\OxgN#ګ)9jԦox}AGulvmMS$|}c4=l_^ zϛSG׋zzȫWۅvS򵓏i}uY}ti>9+HV8gIϼXhn8~ҷ\;d#ݬI}L-l~üϮ';$ Gk5O8%lw?xq9Is?缰z uo>{^+%,Vvge_>yqc=vޠIvc bݛzlae;_‘ѹG6޶mK;_{>=Eأgǎroرlذ!C裪횼=Y٥6n شiv|ॵ_9u.͚v<1kE8jԨw&V}:ܮ]Cl2yf͚U((:鳍w_|eスt^{|\y#/sqqǏ%'sX%4JX4%:₿?.㙓F~;f0000 '6OeBM!]c(41,}012|/X B"Z1$HES-H*T;", TȁY q mKn%D: #A@uӨO&u-2xA*[ard¶׮y2ԛa zk4qP6+HX۳эܵ=}ƨk/t)eO1EМ,I˾0z!y%CeY6cSa!#R9JI" Nޞ t綛IJ?T4lBs闬ױu7=7|-[no6Kjc0T!@ҋTJC2ʒQ(jM"e۟ѠAz7L>|/%gN#H~*2l:Go8ߺˁNߤQBSByym_pճt/Y4gtSRH6dLkW"%\5HD #dH:\Gt./E̲ Y98ZqRJJRJ)Rn CdI"PS6OQM*F-◨kPa5҇sc )՘syb5cs˲l˶1"J9RF#R*4: OP1 h VP:Y|}Dl׮ݜ9s[ 3gNvtYWRV҆իh߾"իboۋ7uի 慶k6nULw=أW |[?nٲnɭ7?}>>Snf)ҿ{6}j/3{yP灧LyU[xaqR8ᒻhc(aPK3=[aws_Ǯ?k```Ѐ_=WOL*`H &Dܖ+YciĵYRH:G#snvEEҲl,, 8B%Ib1@(BIH i^1sޠҨP="3 GV^k&H)B) %rWrfK dDpĉ8R)E@6&o6Q6٠6t40(5ڷov)B:uto߾}-W-?o减?nM(z&Vsn/_59OA& |彅W߸qsU )M>wmU GŹ۵>h_rOWN'ݳWʺ9pϭ ~|<% IDATfC=۵hQlL};;g!CR$>}z ?.E1WG괫/=u؀ۄ'gf(vߚ(QBK.5B(ay_r~O򒞝&e'#[7 zS0U1hHݑ$>ʀk. cr@1''Cd -m˲-sfY<ĭJ۲8a!B*MÀ A)H*"FMGJ_,q.l̀V]{[,l )S/|̵EϮh T,9gHX@#Һ%#aV<I 'q "wYO\3+$%IJB@ƐBȸT!"!t$DE0 O2g+T{wmhN kq8r.ON|nbM(E "Dp^=b5 ᘁAM1`:,4^ O!^z]Z4igŎ^|,+*.ϻwqݏ_=3['t6Jh(AE7R¬JoH>kxJ _&1D1^&Q2)`hJ6EsR657%?BNVfaA 9>a„|?>߈(A NMy2Ŵ7ۻ 2TnB'oJB@(' cH9CŊH)&Kp cN5hYp]BuB8FkVETkëd, 1-nٜ[[Jʑ""S{?Mcɟ83K]d.njzB쪩k{5]+x21r), 6O !R‡ 6sLDl`````````P$2`Hz:e(aŞ,`5&F)Kh&'؋dumFW[NVRhә7ČK"KkFRJ8NX 13RR:R8JI!˙osR>J6R1ro;|Leat#=uP$p_f` J].-jprνdU~iRX[!C R 0θm8ۀLJ))EHO1p$#.}O1RNt+AU, 9v39;@I[i@lݺuoݺuǎ׮]kܖ ]>58Nt _o,+h>fKI֋~k* R8z Q Q\Vh= 8lfqΐ1wqR]r\@I" zFPD1z'~ f1c83DL) (% ("IP0UGٝe|pgի#($3 ,h5Yq`zdz( /+#b[{Z*լTՑh,T_&P.t%"GDu%B3y5 0845@F]C  eeqC2@`#XâW _-F愙N  GQǶ45 p井7|NRVPPPPPPPPP5@},EUJFb,y'dʖ(Q_%7pY5}5I`Rhk9CZsN$$)DLKvOc.̼uELe*R%{ǟ8yIIDDc3q- ABJr69͈ˮæP#%dw8W+mKcYA!hٲe4Ԯ]u)+(((((((((pO^cߒo%wWц-"X-W"ǯ1m )K2IH@@ۈɭ#'T,m @4RDBHFyAH kZXB!4H aa$#LxPS^/*!>50Xk:*3lѪ mJLNiƊe*`LEnԅ@31m(+i z(RJG֑gs, #ZCV94u*(T,JKKݟnݺrn֬YgYV-5" 5-|7/%dL!J0]IR95̪~'$T,/P'3&@=]bD XC% 4)H"I54ǪUoV|K|3<+ZZ*'8`ljjD2x1M!#FK"i򤖃1!1veR#%;2xݖS疂B⠃$ UNӚF!`_(E[_;$O\`TYC;R BeEQ7HUYZ/W@+W` i\qRW=ӕg7ѿJE_^ȅ-!0D !ٙ̈H"I @($QYRWIYi^.H2jZ(ycc!G`59GŴ<X{VrGXlr{q{ xRJWIVr4^iaB\H22=Rn膔"( qI$ $ &5 QF~v7cOAB1h []/izذaH矟oY9QF5;Os_  'zhƯY :x3+[<{lXV=pÃH:qeYP'wlRTPy~X/4Y=GiRn^x߬y<^rڑ)n{T[Za^vW'ChuD>u\}׷=OAAAAAA{&eW" u)@Ыfʠ_%z)Uق4;6 K@d0߶ э,RR)EDHA<ĴIXr",-|(N5C2eHBY~ Y}zZ=ED8cc!D.|F膡 aH! nֵI)|4JL mG( K5UBŢ{_|6 o߾rnݺu8v^r%{l>)tӍ_;lǵ5|j=?F}o~O>y0.Nip97?;GEׇ#z R׾g~)N}.^;z:ʢ6}F>̯;O>nmO[7u~YX)O*tɹpC6"z^~'OZmz $&NGLQUIb< RTQ" nL +aIIR%$i&BDf `R)@D) QPBkii1ƘIY4E栂>ubO41MBM 1Ɖ@7HD !4I^!edAjnkD@ߧgBcС;wc^]IO̼d mvu<=бo<3lb |탋zE֣~83@aN7Z{nvO{sV:£u|v 5?l׸^ 4=MV~֯FM쳏1?nIz D͑|yyTeuB;ziv|}eѾ5Ĵ4AJCHB:D+Pl+@2쮓Ԩ$ϴ>&IH.'[Bh0ĂV  &@$BvVD9561Ȯf6eW)ET!pYH L.ԥ$dLc܌rn$-}X+ێgwR7:ʵҸeTnsF 焂7;;ϫ'Vyb}^A G4{W33h]5ɄK>AŅe1uԂ.:6_뭲w_٭v5`؀.8^9ytwMr^^NZ5S1 rF'yW}뻶,G${{{\бߞ_ϣ= ^Kv=틫|.˷[Z:]AhK>~x֞zF|_疵k ,Z]/{GEA{YCg4fs1CS6~~z俧-:{?|t䭮кkf7}vDy s}~S nA*@ 1E)@KI$3Pҋ06Q.%*&o&% Fmkο'IҤ4搹& cQR:Ξ·$cn>+.c)tCI Se؋)ŔŌQ{K\ITgMMo| ʮ5Is,lIL`L&9t<)z;H8n qBi\HI̪|b4aLYkA^JBdtN',C'C4O`gLGsxiIhL)(((dp↰aN͏8k^ktkf.W~#.@Ш9[V<`v-M߿j5Ϛ8y9ClzcM.w[]!ז-{YbbزeKJX~6deտTcl|7eZruW3w w+_)EC4{+?tͰ]nt_sgW۹Kj!7?ő \J'?6nrzj#[~'e%>9~{I/<}f_{Lu=,*Ѿ`}L4ՄauFp?)!4/dgڠd/_gIt]VZ\9t?ɥ1qX%;iZЕ&d" i[8kqtєR CJ! V>$WZ3&:9K.!"م5k0n*OSb*յ/ξi0;tZ:#uҭC%{ޱu%sA\_{?R(,~Ky폾;o{tp-tieŊv=wR6nժAwj]eQQT~g(o}d"!* d}K!J<9Ԁ|9Tz,Jt3z1UR'HB14- 8j8ЁHJ+clrrdFmcf$yo xekK2g)FPJJԏR|t-?=r9|ׁiA(J>:`ԥ nyY {s kk< % 2,.! fhk:SbN^}z)DbnilQ%Mc;7~JWƐ0I!r4y0Gkrc̈tBwAÆ6|۫<ᝊي0nܚ^2n@=j?}d+k3iG^5p }tiN>/&_~`(kxVy2?غu+4;!f?r{ܵ [z+?8qK9< R pO`;D}-5~ZYqq&sNwC>:}gvj٠~AH$А%p Ø C#vΝдiSI]~:g Ӳ,?+ 2^\D 4Ja @vCq5I#s-s!H2H"fZDxsuhX $iPrF3npӝ攮2=k;+*Pr"fNJH%xs0b"HI n!RJخi>8g,@#y09aC;?7U|IGjX+̑lMD+Α4Tܲeh۲87a۵WD1嗞~'_qi;"r+{/\1kKڰkcw~zO~߽{Xc 1KY^&}e55|Y|C7}Kn6-[;䐂5Kٷ~K\FhwϷl,Xطe~w"VPPPPPP/ &\I #9!HӾ,,rO!3d?5e%rފ{eh ~ 60U,2;,[LD_B $ARFDEK#a`sip(TZ(̴"Gq I$$IȬ8$fY)"4C+aKUtsLDf@p4i\1$) +ҷ)$!CP8TP.(FaG"nіB}3Q2e}Щ7\~Zr7~]g{[5=znqy R IDATy ~6kθ.W7ZѲ 5hXھ*ܻw%_}g:uj?ȝ~,!_{rkѿGMS7QkaM̛t͓d>w'rsç=%OH;zTu,c61Xar7GťZ +$S(Cչ eZR[/=baR'%#5521Ɛ1dVb2"쬖D$)>)[-)uPM*]UIQJlku+&i>foƸC t! !t!tCD+‱Pu?:RH̹ҖTUkKSDAAqsL m| qLz&;% |)os]8Ǿ,ћ~ zU>v 3Kn=;}GB4s0^ӹxoQQ>|Ӏ\+?s{}p[krxc?|e{^Ⱦ;q'Կ]@d #F΅AkO& `q?k>(;roC/џwu}Z^eGL~ޠʭ+5Gl4;'QYCz+7hU_^7NI3+u:_3훆d H+DDҤ5rCZ1u)u!" CH eES0N%8VB`Y*^[5yvQ:AȢ٤; &ˮ7όo~j~;sqq \9u>9R˾??MM+y)?O@=e]>f;tx_!y#6~=e7^9 '}MԪRPPPPXpRBuoozwv}D 36IPR7FJoGD;wUtDz @NUO2(>եa3@X "!c دq44g2#%0O )&w !x$R:tf4t5Uͮȥ7ITY66٨+ܫv+]W{2)I9L*WIA8佦$p {{O{Nv0T+I: I"\ dH1nG٧,s Kbn#̅)^,扪M3LJK]eN΅R.;?r'Wz=;[=~y{Vh>}YqM<ꯓ7o-I'?Ƕwxӟ(_: #a'4`2DSB+!z<<Y%`Jr5}K'JQ}uW ՆO;5lG4C@RI!I D!L88cYH kL#3I$ !#DǗttiE$w '%jQ供 #,HuHJ)$c1έI u!"B00dg"c  = "熨H!_a{c:!!b|2 y梦\ܞ?Xqݺ= xC %~l) 7kDǿz :䮮jE)((((((T:b~'1aJKO?HJ&<-'%YhS_Зi Ж5fӖ1h;YH`:Ԁ$"g5-DhdC`G$ Ɍ-)19tބ$֌FJAu :9Qi y)վa5ӻ}0X")DtN39I8xka !"QjB !wC&z@Dh'3hϐ0nd5Jq,3/LVTEn/NVAAa_ӿ'6Jw5x@y*0g`@y D&3#eNVS\>1@)*&(7V ( $R8G5d 2$nDfuENME(3TQ׃R2^kq61i!55Ƹ0..!%ISR#XL%ځP8ϛ@!Νl8%<C`̬=(n4$X]Ph<{& rbKzT K]U ӑl8#ŰabRJHs}#d_IUvыDJ/L=Z#A& i!H ALp-9CƸƸH$BHvXN%\<>BcEMsQɾH>2!TT` ا*b])_~rMͳր5 Ӹ 9!rR.ABZY!eϦ?Ye~PCNȀJ`N='&m3]/Lws I,nGo>@SΔ L h|3%+a-SR#e:_ gM3B)!2㭒6j㳙EIfWV&kݚqCufE(ȌKdL>zFzz>yTWJ&FR)|wu DAŨ>w ?edgik!r&%RF CBϟP,yJJOϫ6՝K²u+UߌRyhF7j|94BF_G #=emNfWJXa26@*@=/!%IARIi*1!CB(!e0"%e%%{KJJKuCHƴE"DLJd""0;ة.5#$$G˷eb W]$,kz}쐭&#k& qx0FĄnGrC  't@ddf1kwpmݐQfs J7-c箻翞kfsԸQk]7ˍF=4׀zx Ѽ[?abNG }26ǷJ}rk/L+TTvg 9mP΋bjFz$`BW C@@H4FYD/DJ#n!Úi!3 #0dm۠7 3"*^VJX&WlArVtFʺQrc! 5& A! ! ! )$Y)-ah*;*ǩM-ʟj2_M /'LֶlZ$ו.Ss׷^@k/<3˿ZXWQ+o`us ;fO ~ڤЦ~ѻpMwa>Uw=sʅZ&Et4̊?>q)C{ wc/|޷Md =ǯkwݤ*NFDPNkK?f   wj)((((?2[M >b,+X(E/P.3G̣Bԍjbm~4A@@IIdRh6lʒ%J҅.4!4  V$CJ][hvDyT^ϹP%`394B$ ÐR18 JsF%1  6ɝYTIc+,mt򗂂BMnŚҎ^гK5oO9笣Oz?Ks詫׊0޻щmm#aiﺯ~_u׽=6~GԽLy=>aʽ+'?y9wܨQFz|4SYN:zL+_|&ktK3xK}K,IYv[ܲ`ö.zsзϟìӫ{Yi<#U{'5Kտҏ^W:s0gs١Fּ~m6evOxnHMjm_=zYM|M/wnx\j7i{٣[a([WXgoms=2;ZLzk\/p١~qLJQii׏gZE Zzڭ[_'M45vy'oXTa<|k׳] I+m]ӦGܼEx5tn$ 1cƌᔦ`,~uԨժUeeft?Lx ~eN,HgxcƟqY bMM6.m׬8jݢiw$ D]vڰqΜYon}w-v_8'~6?/{}I{_1_{vO;nyO~㊅퇛N6źrOi^^x?{)YnѢ:) ]8<|:"Z;𤂥 ˜'<]?:7wkCo˗ϝT7igBˑ_Ѳ:%0n_|5;|y߼uuW}q9o? &iOg>suF)bl8YCg: əDi]|qkk?mvӴE@&|ʛޤ,ns$SYQ*((2GѴUڶo]Z ꍏ=oи<7N8+&*vqrFٲ=k⋯4hܨO>豧ıAݺ,}<8@;c~w!lFxްz^|ϡEmFLzL^qo.qo9 \5{6KWm۞K<>^pP2m̿WgЮqFZ.(;8}G=n =;izj|uOf~~'xGb}L}./)WS@n։o@:X#d3)0ƃY9=FD%L(`'ȥHѨf@J<&&+\qS wv7yR0Le nV"3:l4+W[˜a.n֤њxPtz{Ly/I2! L@YkZ(*4I)BB Dh&hm,i]"XK6aδc Vڌ873AxRE^)5iOҡ$(s5Z\hWdW5L}үB*DU^sۧf6i-$981Xѩ4N1Ĺ5+$ARB7D0t!"d!+0a[\'JBOn^uwvfb)$"f|k>291'!m߉%yND'"Rw#m'BnǾW~ kgߞ1l -RyjA֭&P[ˡuĶM/ݹ}Y;ۺy R;;@BZ=u`vf[z-shi{Ԩ'\Òbx}ZZ^>omVڛ미6O;!;γߦcMXO8{6* IDAT]DBW-\Xpoy[i.XQM=z d\ RLږ:oڴͿ j/?5Q.dRyd-#EdV>}mgS{?죛 eŊ/>e8}+V =y@r&g|;֭Z9nԺv=Hkk2q|Fg((((((Dn/8;F*DsVDaݿƤ6tL%1f 3\`1LQlbL4k-¸qSOYp2ܤkXXh dLzK'2C쀩Lm#̉PfCF[3=#+3J\F$T>M^S082Iuk(m H.$Iȑ0̸yAKQn df qD``=PĐ Vo*fPH_U0`U_8eẋ)H;UfޛĤdOLލP `EMt>>]qðj+qW'2{k11~~ѣXݽ{On ?#[k& /UU:v$+Se]T,pm٭iVY\i>iVڿom,o;ٲ~?yhfh۶M(,,RA.s8м;Q'/X\xP$q ߡpm.JU-$ .dZ eω{+6CYO_vxxū#eO]LAr&gЖ An$Z!qƸ=$im GZ%q24 aeneúVfIh۪sCZתKCޛ>{8eg|׳^ɷxȨ'mZ壦.~0L=FLwzsӳ^o{O}ЬSk?S98 o{%_=j$e\2ѫvA9pKyݪfQovm?۷*-HX6^U6ogeTQ<;.ūWc%^֑g1LZGk2}Ԑf\fޤko'q[jXuNUܵ詛ǭH5\7}ǪIAAA!!2BF ?N'\VDhYݟɨu.Iؔ$b[LnZ,.2x)JBB }arMÈFD#B!ik4-c"'=Z-bYV"V$X-jv TC s#0@t5ޖCΙ0g!d%.! ]aBN]k7srL}h}9ۦN˿9\;1_=Aۮأ^CNyaf mܢݡ'^~|Ӈ]Q4xvZ$TI#tq+}Y7=Nee菴{KSĀXtĨMtL~w[ xᡱ/ɍiM8ӆ@Կsƴ9k+-Pv x싇Ft-̪CX#9l:˭+5XRGџ}Y|^q;^9>c޾iSxתYuNxxSïܡQɁ}圯˼d> nAݮ)),>I{|w?DOnCgVSzK\7zXsFPyvaׇdʅOzds{z=Go5+kdZ4IX/_5{̼?W ~V'BMcgdEq#}fvF+3'`,5@@`ftG@vHW`|Wg0hL;LaVsO Qp\lDoR N0r޴%=|"ڒ'TI5[z5 cL@HKC.839g 2ŒhRJ)!! [i+1(ØQIFd%sV V+F4iΑ|ӾKT>L4+R(U1q;9Ȋ fl;%p45dd=Y C7. :*ηP!!˜Ī E<'ys~q'Q7όo~j;sqq \9Q gԒcDx-ҷU[s4N9o:T[]y_^qSáM>5i I!y#6~=RBp,\P)!غ c:$"qfpĸH@wұxAg|MZuxLm4.Hzۭ3ј'ҖvGvzJǰfu r!״ikq, C7 ]kv'7#CI#]  |IJ8 +[@GFN{ zL+YBzk0slztFUVFjtK"35!2dkq-( )uÈRd6se,v>;5fًۣjQY|$OqÐT,bRd|j 2OAA!vêZf+5RXMT_5{O8)qƟLfsATPPPP_1"@ Iv)4-f(MDCf@"0;e!\Q$1GT6 z>媌ȗ+d&ʫkL.BJ*e0L0$nG1!$Ƙ ZP9&gCd2J+jT9Ȭ`Tq<*64QD'aO΁"IafFN0g7Ҍ`EQ 2ƹBa3$hHх.4 )S8̢+;BVLeYSŤS&,v[]Zkп0Fo JQqI.uP^*(((d_' D)AAAAAAAAQ.HMRXɬ FZԌ%l'´A !0-S!ۜQ.!Y7X.I1F )5҈$'B qΑ fRPZB!g̴",HI"c24_3'w9˚z2Dk&7YALgp!$RFt]B½g\HX+lMb궥)uU"48i9XUZ}BAAAAAAAAAAAAA!`Dt@3$,,h'Q+]algM|R@SGl+3{C˦[GIxPםg)<0͘)PަDϨ/k8\lu|2 VpAu1DBJ !%BLx3+j!r'̜$LHR܄t n'5X΅bŲR6:5g2zbPɺsڍZ/dșq5C\H$ aRܾmإNcI>{_/-YB#ԋ;L~5y4'.I3 1+cUM}RTPPPPPPPPPPPPP 9gqθaaK!,?L3oKD2ZD3&&:FKry3qOdIL'K QB_W /e_9E$g1o!y\YJhŪ5}pl]2|oOg]% "#0@X qN"MCcf[ᎅ09݃+O < Em&uτe;Y\TlIJs@i\3 Ib !EX K]:a>ުVvimc{l0CB!@H % y>I <@Y 0w{<}F3꽻QխԒZjk}dMwuս瞺Uu}Ωa.VW@ře;ƒj+f ڄDށVA(AUkf)[^u$& `עwnEΉS;iJ#"T,$GBGD]׊yh-d=S F?7v9Zǎyɿ-Rט&m+m+e+bJk]P,[kќ~-e:^1\L]wn[i]e:-o&b2 Ko3kN쁾>dexaav*i(PJt~I(ȖJ+RUR+"EkOu^ @hlS;7qfX߂j7 %J!.+@ EZ(0~t VjU5qV/ƖrliYm]7AQܐŒ _ZX"w*i۶RҐ4%Qj mԄ51 VfC}?;:'|f>n0;cp-nU|L0Ha HSDIZmm[ʶM X,@)߱~n^nyhJm,nU6\| \xջߝ 0C偿|?i׾ŇB`8ʶ8t660 0L=_d#0 >~}/m'Ovck,R Ik,Rm4 B D@Ky^}Νp|I=4ǚ%0yýo~s G+So laaaa&֎YC4FRJ) ) )LD~wRZJZk7nH|Ȗa5{}̙uHDefx"m6W/ Y2 i?>w^cu'tYzFOW(kׯ?:^0cc}Qʜg 9G{g_zsl 1iWDʧ?Ry+̑O~S魕_.|#C{=p%۞DsgO_7z oG C?2?~C}=>7#_~i^wȠ`Cǟ~+ï~W$W}=\ [v:?SS22 0 0 0 t77)DRJ)aҔ#I&[iVmZ٤]%4?ܸդ<<{\`r!j媕5Fs]iFwY//>ug> o@]_7-]}INcw{^+x̕$>;Pz;^wG`êם>އ<}Ͼo_ovOo%v4 IDAT|}UwdC\kMՐ?{?}{k~O_쁟x퟽7WIo㧞3??o䟽8VOO?vwbb>>?|n®7O^2 0 0 0 Y?)k[t "qNoiʺ1_R=!P ai+R 剑k-WjftîeX4prԨ0a{[;~J'l>M ;J ^wj<-WxoOkA+8߭XSafcwHGz=Gyl'݇{#K z#HO?@Ͼ}AQ+|?Ru7}k~9fu畇Ks?7en&K?Z߹O[| s8(?WT֩փg|聁CwϿzf6G~/}w?/#?{_83֚}WOc7=|뫞}fiO~ew޾o;^Jn aaa<}TU7>NDDZXMymGG_xwt D~@!!Lg@@(TE[eUeA(j YدW"_K  !!i -4jִ2y tEgsk{SV;?MR@×jl[-Yu;8=6fE?J[ ,5#eUXw%0LʗĕL@ 9=znn' C߱wο{Nȡna8$@}6wԙkg4~=qJp |Ͻw|' 3`(@*QrYF ~pZot52QL`@ˉOT_vCmFT; 3 @;2 0 0 0̦c"ʨQW 6HV-7ږLh-;@04W)ADHZ[I )@ jjWb,vߗ7Z`lb֜B8,66q k*7n6K`Cqsp]=Za%0Wy+t}o#N|RkMyUo;ێ7<bѿ5-q?-'vgyE"U;֪a,j毪0 0 0 0 v@(ΊTը,p@4a\֖֖mʶZW+Q6N֥GlIpc'Uٽ>Nb~+x\d\N|#&'Txo+UoƮ^wϿM?7G=CGVӫؓת==4x5O{x^^/yЉV:4 TA*['L]Zԑo?9wIaaaa6L{UeQ B :&  !00 iBJTJ[]*eYm+[iͺR:(…[pG6l32 =v͝;=cP}\6<~O>?ghz4큳Wgҙs3z{~ܩRK?§{9*=Y;o=屳_OWk3#ؗgy?5O?×/NG9Giy_waaa:,E$ąt ARalleʶm[iZ\M, []%#~O|Io|滟/7w_xB@˗KYԁ3o7(hM?NY?Gȃ/22r{~tfͿrbqzˋ!} zOW_ {'ʟϧ*5mgL|w~O;^ړIu% ?o;_\#vj29>aaaf+uDBZPn?N(C 0LDIRJK)K->Y++$ĥȖ- %: o/nvVXdZ*_yꟿm] ٚЉ;5:;ZrͲ.w׾?roz?z?k~VM}mŀ< 0 0 0v 7#~7jתЊnNU>zЍc~c5;PW4 ihkle)۲l[ٶVRΏ@@'\kDp4K \ο.1$4MXSnD:kgJñ[A]n#{&ŭ$t,Mk,툕8˝Ta]c5~$̝ݟ=7*L3BydTtIٯ–k?oڧ6-S]hC:z&DB!00*M˖$uR’\)+[b DDLFafm2#nZW,xVafLi}٬e׽Ͽ%KD랻k@=w(9faf9ᑛtKSWˢ͞#'}+iY}`ϝyr5.?+;3wY{L(MM,Q}р4P[b.5;5*#Aw~)`#M±H(|4 ZBn>=33n^HJg'm>#aP]m٪~Ŷmot2B &ZH# @@!g) HRbJYJv$P/(kdvlIKU<可Ű^3αyqv, f`fv=px-/~0jxCݓ+l fCt}W;2M\!(P%JTչ2>*Ѝ]= bX<|)ɽ7{=0|šxoWT󓓅Pdp szamF*'e-(" !44Z)K)K)EHjHIٛhYi Ӟ_mE^1r/vv݂%m >k 0n]0~s:+g9~aْaUKMM43kuwL'gǞHwM TI]4>/+{JS&c%Tp1nl9˶Hu t<7<0 0pXވ|{,[smؖZXKBԒ"hBBH4 iP M`ʲm[+""@:nHj%ziqeM:vߜ֝ Nf\;1y 6>NYdfկb#̓ǽwDS^XDCxme=8a2f8b{'lMD$3ɩk7 Gcfrf twT*i/Л"Pai|U  MM_z8]{G<7uaqh˪.#5REK+ "q39c0 2 Xkvk`[$jI\<@锱@ؖ6ڕ#bY+߸X.4vHgusNm!XVx,k 0.DO̔b0 s MhoO<XnCsƑZ3gsA驙E_0tw$(ÉH'E7bI@2y@4v: $߇0 0+SԮ :2v#[ )R4QM5Z[mk&jJZu+LvNݡTN:yidW̥[,a]u]w85uӨ DI׷VJxx|ٱb}=D lPb( _+5@zҊ'" 7@*9?1k r6tT%_XK282:\D@D>7 Dό-I8:`P(z.a%¤ Cf,,md*%C!?P6Y>[" Ar~&PKv.Wp?2&K6O l)L6;_t]A|GDt`$b.Ύ]O, (%VM:jr3V>95Le劭 o810<=0y(v1ʩ+ƒyK>?5@H(;\ZEx"0$~sQvLVy$gVEevt:_RhvPnry2]R/72u8X~TiѮQB%}ҕٜc%<H;= Eh,<_Oo<@r*YS:}]]V<`*K\C)MOW(;0+9nY*tI(3i⩖afsɓxgo!nL$J I i[i[)Vm+49+hTe _Ją`ZuKr_bvE|ýuaf\1q+PYJm |?cǍ}sid5wm/ W+g 'LPcgr'| ) :+@4 <' ? gF(LX,PSOw% r86Op.&\XxBGASW ookUɧuIY /.ԥx ⽱k5XF(YW`#0w,GK$:3W3s);'B՜?g/ϻSAD@ykUKklyH'?Z%Y 0q[:.\>}[@t\tX"L.H5eY O5K8tbS٫f2_,D O 0a ?ۚlY; Te6 gBҔƒB&m],KٶRRD-JIv @5v翥!u%ŗ=ņ6<[m#z >gaB\ws/z Lx^~aſ[y/GѯZaK=.4 ǻ^SZ $0UI|N$vjjnYQK"XL;IeKptw ͕-LN.Y+fN/j\9--uD)1Wcܥrz@#±%vrjjs6"s+kʦRKņk y{)bQ %LL@Fc՞'1 =?980*3st* }H'@EPJ.P"֍Dg*ܼyCfM&K+ڶ 9aո=ił%.9bQ!!@5YJWlbٖm֤6ńK'7*M51 FkKʹaay9]#dw +j4{5}>XP-%0~yh5/G&?@3+l^T!6Fg.FM :rd!LHP+i q.Cn1KK:[.(,@0rY6U)?V0*Ul/Rwɔt&糹bE-ir3how,wyLc7HՅeA  &HxT*U&TMD|]|̵&lnIaߏPd V6[~?V[wL\zM?~`%t:VĢ2?B2YNӄ;4^ogxcb?ɶ5D1 _Kn wJ[˖R,flJaRRR4iRֶ-e+4iBtNr) t"6?n(+%oYº6,)]5KafcMln Ƿ Ho|m $(0Kyz|pJ7M B$7 SpY|.G@ː72(@[y&oYvu%K&.\:4C݃@*瓳3sui7h̋rPRx%0 jPŲ̶*yKk t L-)˘Kz}Lͩu9X&:JQTb0VHtoUFW9Pi>RnGeҵP @nn>X"\as7A$e +FOO6& AH%0 Y^9ْ١*vD52 iHTzeŶml5FJN %U.TtO,,L0EBۥB>fjZgyaa2Pk!s1<9ONHw` ?yjnH<,Jӗƒ$V$m@a6H٨d ZFyŠ%"kI`O;3Un-< ̳Lj=iK7ɶ(P9W6y9;mA(Pvd b瓐_x%@N0([s40KY%G[n!}u wѫ[\ʹ*ZS -8Y 9\%J) Sz*MR%۲lR @D I+r2"UI@)X'au"fkE%6EFN8|t˧BҊEhZztq]j;66Cp}b.6;BW2-=n[$f݀:|f6DT.0 M/}S^w%Un:g2TOǶu٭P~j|@;ؓJ-}>DckO%-P*uur6k? =!r(f>"#Y䥒yJoq҄b`gҋx jO<BkY tuwgUOo y/v" @j6* ^Cb:?\G[tT\I4Lx3=G K/JU6[CᐘK/j@gs͝3|NqmEz=בyref)U\EPW?օZm=1/9YSM_z RIjXC$7 Ӄ>!DC#&TEٖmi R:%"&иĘL^~he6ʢkLD-FzV8"m:vQ[.FM%}7ܹ6c4j!p%0 H&`SXdfU@xP2ssD۳oTH! ݒ>!ҹ\;x2(mz:0[r4XNӛ}]~HB#:_6ugho~Tw#ޗ0'PI%&P ' u Ji8Nx\zsW3Po|2|:c1JMknZSto\t0XK|xWz~.ܖ\nѾ_zjA+}UT$4H mv@%xje ,&k%JmU/"R[= R!B&ri@@D!IWiMD-vaZ>7BNn.JT0 \; %<ƣr^,Y=@,X2 @qZP܈D2KF=G=׮Me(L?uwGeܒ^r:(Q<H(js;DG\*ɗ*/һof5Y%) |ޞ…kM {:t@_6h t~r|)NמxrrѡQR8DB^im뚱#|P(UlA_ ON6?\,ZGv..p3#ñ8/Jt"b-s2C)L)L!VVvV ( rbRs._QFv>wK']a z6@)9v1l4dƞ^a4}/wXVKs.LִDaeш':|$:mERJD;;6VmҩP+1'W9,'v*98V箞;2FFP|~t£7/ּnywƒMlcXo; Y3 *-0 [c" EUaPP(P!& DEd+e)Re+ nKD"wg ` '7DlkP#ھk/ؓafSc$OGsw~W2 f{xKsNe{P(Rt*=4C[,X,*݊0f;?{) ~4 *b>VjOMn2cg* D^STljzr:C}Jg, '".S KNMLf|  t*E*"j\噳ga? <).jTI_>D; <].٩rSq<{Rb`;2ڥ\:959C벒=7ǂgzj$Eӫ䭥̹SDow43%R\ȥf&SEݩ a9+>鑆m\,2ta*c1@yn6yNeav{jaMTj$ʎDIsiRCUEٖh6 x@@ZbXg߭knSm.gָR;] {Qԗ߿BoJq{翐}s:qcFy緖}-GSOfx^gzOX ç_ߤ3 6}ǎuAʣggl6ǶC#71hݵt(zr0 4{I1uY6V۱-#! ZC 9-j(PJi))MIRT*JŲ-'Cl5S@BkMd% B'?zxj[Ahk A$'u}c66hjzGuQ܊fh;o:@zd3: AzHt&_#,X2 :D 2NLf½˙xh,an/t [V "'ytA !0% JlR)|҉j.Xi+;bJ+v܉m+i4-i y 2x; }a٭tߢr,o\m0 `<aÇxlMCfM'<0ga^.XRUM=Hk](ҐZR\ RŶl+P !:an/P`Edܮ^HQ'05܌-{p͒-aav"]ֳiDPg/ 0̎@0e+ȗ0uJ,wWt$SBewKyNNuafKڕnڕ=""ʕ2{ڝ3 Ґ YjlK j1e}3:aZ?I}$bqk`nn'6;0 J!!fk0 I+ tyL VϤgg~pYD~/t2?510 lRjP]I s!6_\DN [fR @ 49i^ )a@hB۶-˶l,[+t(/KSMj:KgmnƌbAg4EQdEaԴ@4Vk q%0 3b0 &Jfz<3͆`aitԆ.͎ZݒTYo@$'@R Q)+e)&꓍It~Ԙv\8K7Iv[jF 0 890 0 0 tG7PQn\U% TJkMdkYmkHk.?{q[{hK΅_5S]{>Iu"Û@>ea}%0 0 0 0Cno!c54 @DRBH!$ lMV-[YJ@(Q] ^ު2Sa h X3[cRv o0 0 0 0 0 0k■Z)"!MQmٶ&)w&Y:,m8’\E2 S;AvkXdaaaaa:k@ ! ) )M@AVTؖm,S8=QbUFLv}e]_cQ""AV^lՆ#aaaaaf XIDDB(Q@h Җ,[YʶHR5ه+-,B؅͛eo( ,aaaaams"BR C Ӑ&Ԛ&GmvS P(MNtjVo5YbvCwB?Ydaaaaa xu4SiHS RXll[J+hB SNiI@սCp9IڴAv`FG &+j\9 0 0 0 0 0_ʃo-,w:SygY eml՛ܢ/᚞%zJjHmҲN߲/q0 0̆0 0 0 J[Z^Ӹj u _GXjNi (Ph#hAVɲ,ll)AkM]SEHk (bZwUBZÝE̤ʛk̆֙힪-x65sSg\5qӍ\rVMmF-R|ssFmµNLZe 0 aaa]xfV_q _Vt\UZ~4R#4bfZ-#@!iJ (4֪첪J)MH("[IkTc _O*owL[aLOD:)PgHj锥gBjcةM֏܎h~&`0 0 0 0 0 έx}jiX 7QCHCHR6i[+'!":UIj*%2m=`i;;d'~vaaaaaf‘fpuN4 XZZYZJZ)Қ4Uk`:/W"B ;^ #~ɶk3l/ݙZaaaaav ,qmդNKrK@D%B 4*+]*SQ i!,V0wbSsi+: "iڙKd|i! 0 0 0 0 0۝=VqtWq9fsu*DB)!PBHIZض*Wb 8!B-#lX=Ӓ/vm n(me] aaaaai ZP=h}x D$t+M+Z8! RH@DdWl۲mKfnQT+`"r'kVOM:C0v;,;6+5Xml60 0 0 0 0prcmUwQܼ%i RBnUKDH!@!!&m[*+l[RBAD$rpZODiڐ픦\MqAb^%܉-omf4Kaaaaafh]񛶾R6& U D( @Vd)U*eD@J DNٚMIoaٹֲOE "tv,X2Lke6l-<9U'nZ%4egKzbVV42OX?;.L>Й 'q.)gt'5_o4}|nk'u?ozU|T:S@‰no7hw=6yLdt6b4֬ɓfCv m MUR ) &MVdR& Ht X:j^餙mpG܌M ޱ#Z٨{.kgT])E!:z;W\vD 0 cɧ[dfR!Ae 7xuq}ʌ_LizgJMNB} kGOl?Teԣn?|{~'{o7 Ğ!vufgы߻1pӏ^WޙLý7liTEgSyؾnKɱSLlk4`t' 65G'ۨKZK~_0s~Oߧ>wһȅVyoM'o}GvbޡS @D8\$ po͝=?jvb{׽A/&ΝO-2Gi0;gtf[\z<>YijoT.91HxO_qw_u7Fr?{]Fß:+к0YYY砻yJłݣ7Ew#c{iW=w+X Ow7 =Ś c\ xvA vKc}QJfe Fc&K,];{5%ɓVVyj=~VpMᕈQ RHA44bYU-KY48e-Q6 r#/qэ:V~wPds3iIY'%8Βa:mWg<ov~ozA ?[X8jO}~WtQwryVP]줌+?{gFu-sdɶcgqg}/@iKKkkҲӅPBGYZ)e-k( ! gsb;w˶,˒fnjdy4,)>/fΙsν3sϜs6U-mkvlhE9zzм|C89mǻO.K#kz3n\ȉԣGzCj-Nv99!ު Cz}tn#wUKJL=GqHm]=nxwytAё:RrGB4һQÍVVe p}Mvήފ E6h-\lQFIq١$Gנ:6*F;ݳ+:$mUctUmnu0Pݻ̈́[R$"ج})b!,B"II TAR*R*P*qYanYdYa"PBDž!{)kVX`cƩ(Ѭae[Ngm`AbKˮX o)W\qQE-1;^6e]?NX˾}[mPdÒT57wYN&ӳJ͛il%tom9; ܃m-=!ӭiYesOk:Rx\[>dcV͛bfmr͙5{b.S"d-v.+1$_ 12;;%s9?_'벥>wvm.^r^w޼t}{ ?^{{! ݸԬoynۇ[vnh1-l3.8wmGQm[zesvAIʍ>J#/{/+-pa=M=vĩ1ՒU87 bպ9`kܹ u0:[=`J)-]bE GAdR&Sx}@mD;. )sygO_`olﵹ!sړJL:g-5] @U*B2+k23rg-=k}=VM_y{\Y3yoUکj~g/(+]\ٷn4LϿ=wTi'𙱚?(˒UWpbm?mzeׂA("ωAĄ޺jrH S#C=h[wݞM=IaLC=-5{t{gqg{Gz.qiv߳iX\:g"5\>\? w?bc$m΢9YS$}=|CЋq Xit  h|3Hwce\r_?g4c}?{d؞p}7 K\GhXwm;@:}Mk0g@s'};p/n95$@K[O<+v.[oӶOZ{lek={쟝ڼP-;z[yiyZi޷wsШ[a.@wC[x9U[ݎ޶CsǺ =:jS7n8uS=FSs[E>[>۷=mt@]s>Sѡ}Lh{:c`78G`\w=;v$s&Kၞ۱>*)sEv;lCwCsȈY'wLmxmty`'8Z93޸#ƽGh 8gv-뻺88RG6utM ?0vSFGՁ)H|z@۠9~pq;1w~YAchH{ H35>䃏~mޣn?/YLqۭ GFhfYiV%w+GkGݲ3=jv2,mBMy81|5@#ࢣ$Ϟ) #@DQ hE(\Kr\n( SkRs` SEQϥh ijՔLBP~Şx^$Ǔ;xZVD$Y"HB|x̓_cפ~ֻ oV=yٙ߯wÝZl|;U:?)#tW>2zm/r=54냷_r٧Tyw^C7=ܶ'MU2'7t?:p=xZ16n:Pmߴ[os=Ҟ^t36=-zEoQu_n9 <'V2oDd@GŁ w:g6e18/MFzzlX298?D=(Us@șlG W9>h܅s-S;}pHd]eMo^ &i0ځ\MM}(8|aǗ-9wr'/>W3RO5ilekܰ ,Zdض[޺P нc{[u^.@Ǒ%27MRK֜?xIuBoZ9jjUˈhׇ}6 /pmqtOe!e5?gHC\l;6f[{"ոgO݄vꮎ!uJАQToQ[_hXUϫ(0ppƮaq$w~aSz4;<_9P_5Y2 2ʹPsƕzw;9PSnQ~HoHjy}Gz$SQղYdG79 Ҩ궥-_h F  )q]1%%@IBq=Iy\ |ƍ4Ӧ:{59u9 'NbL ÒNeWGJĦI2shp|6m1Er ٴ,b V,G;%Gױ]ǴĴ׌h Zz?"]# ~UUyb{RsO~Թ[*{`2Ԓ4QPC] #Lnj kJ4 yIu7I{ 0,HG;@F@]SPD@QIL٭nEf^.C @`W3'ĥ+WbiLWN*P*IX6L 0jAqcu֙H0 qGg.=edkM}y{u1_O W֯/8{=\^u9F9B $s$ |EyNdf߈<'&Ps¥%i6>:F.qYbŜ4W np+3, uwYXxŒs! hU߹,UUyzkK݇94sԵm{W >¡cG{rMCߺ 'PvWX߽vE/+M!'Yx##jqꬕkO>)SSN?Aw0䯺U>?,[OQ«~p˹5^棟8Cgmd4giU[@-$sY^fmܔH;S- K fkxhةa^ oPGZ^zuaU9-5ક:z^s =-/]TwL%ٰ#sd,X~/]YQ5LN=ws]w}VTR-#ω̱p)$;bJppeNONӌ|S[9``a5$M񓌂\s(}Dm#QYw9`YX]b" , hhSdmvufDҎ*8ndz;S~!gE?c~NcǶ>2qĮ)=ZwykΙ7~wy~_m0{{x^I/cS!0?}fgqC|RzHZ{pf5[2rrrLB7 0gZ9c M`B?igdqh2 83lӲΫ#%{mӸX'Ι^rUjSS{ϠᖁLjk:}լ 5bg@9%)mCn[GgE'/`֜iWb5 ´lfaWf"fr1v}G\t٘zwKQ%HHou:]IJdܻhMwH!]3EV66N7 m0~#:[%;58x/O2jz©Ѯ=Ȃ:U $ebAcFF̜Q57( |&KKIFf ZSl-6 J) .)6M Eθx0.袹_lTX㻯p5tqH ]xNp9\|y9kwz~ڸPpߧ„OgZweU44~+YkktxɷGX7ZFNh.}I1IZ` BYvj}$sά}@uR{V̧KHsxp=.ڬ6k{KVpIeQ* m F$k-r\kHnO!4.Σsv`O,&mrdbl))#l:!>ɦ]Uݶ6UTh1-`=(,?V.둣yˋm-xrA=J-YLJtrTO#wb ͫWUn ;`-CR$N̻Iȴgf4xjȞyuOWq*=룩FJ!( 8pYQd$&YeY !T=w!GMdC8\oF0zl%$0BnN&̺7n^4wKh U{i|(u; 1⸫'O6(6{ۗXwߊH^‡def9` ##2GnXyNɜL8K ){WkMioloh)9<=Z ISOL꯯jW@H+[dATQ$f 3K1\)+nzKK]C%YovBϡuk+LO21ڿl@W/2DWr]5nݶБ~'m۟~2'Ӡ;t#RW--Ͷ}0m ! @Yu.AbޒSr)=Z7Q> 3EM GjרJ7` epѸԍTl]FWgWm)sG̱n@ IDATcJK`X6r]>yA7F8ҲΫ#%{D8X'֧,fAщN@bȝS~l ڠ(OSSկ? c߅z-)}m:>`oU0T<$`)=0#l278&; ӍV2 aKD]Ԏ{JZ,{JzjX"A( I$YrKK\pJP|̜470CɀOS})hIdVoܘޱ0̯G^{Oveؼ|Y\Vw3c2ۯ[gfd][͇+WYw\wCYPX.k]Q<'62x0g2K}Ot4 ceǪ9=͆km @0S 7j}ri)>yػծSnՊ$^H^Qo;SSdâ /?FɬRptAkũ@ɩkg[Cӣ,NyKθ7y쎛-uԱx7}?uYeEQN:aťjAfW5+M]rxs:%/6:Od|(nNutkekW(6Btj\o}L.k}bƄn[Wӂ ap@vyLLi)75Y|ize 18 mrrw9gWK+{ZڵGA&yR)q:H{qFeWGJ:!MG9׶zGuخ*bNQ0n`N7|V! hk!''SmjeP4ۧIKMAk>;39b﷎-GÚKff𤺛$ ',EAUgLX_~ۅg-#W>~}]\y{W5uzYhZ-O,,sVTJ_Uڿۯ FF= `p47 l#]ϭ_\#lyɽgߴ.j} -3/=skBZQL UyW̲φ-;Qh:SnexO6B@2GlAWL MZzٓf$n" m{%)=٣|zՙP/65rdzY:Ғ)SRV\h@V.,Tg&; hnqdߎA =+3~9g}n>ﵱ>kgVC6^I3+VifN=58{蒘֦.7cN{^IVI$= Ч֖4#(.mTKO7櫟D- FoFh*HaN`w{gcn2}LTmx–ԕ- PB "* w$Kܲ$3q%jP%p -3̼%Dm$kNI5'-ؿ7 #u7$)GI.Z}'prg-X]0O7<%3OlC˿tmW>guӟh`>Ws2k~ouՓQߺ?z Um?VT[G/4+N䗯K_xC^ou7dWS~x3{i.]~Oxpbs%_yw5߸熕O=w^km (sEyNdb䅹m6M4l,-o*\طU6ⳗ1gAHyUef/vs{s]Cʩb$'/_YwTPcitt,mM`ZB+`xu \` G'&:n|0΁-|[z `j>эc`sQ2nSJ0 w:ZU'EsoV9m=NoSĔ_`f:# s;>5hꬅsrԞsdUUZbjpˡ-!\w WD Xհ% Xz(PJ DHHܲe"LQ8S#j=Xoj:眩b@8Ethԭ0@N 0f E 9':o6&i Ͻzʫ'q7 2t;/<"ROŧx*=?{kXT]Կk/sd{EyNdlH<'Nov1KWFKLkok$T4Z Kg奪{I}v8@̞Hj7UUYIh9ܐ2{-+6u:6{kvw r'5u8fĹxSsn`}[mT)fKvwX-m 8@矲:;SnuUW] xWmAq6┉RPVs/\WfCPy߷ێyzNai33dy_ڇ{){Ug^^~g黔N}Y5-ãLiYyC+يy V@CǘKN~YyYG=Z#eVZ:ZzCv[D)eeZ!MEGGSsɒUY}]V)) )5#+dVIAP}rYHkGBJZvat]=43qxɊζn )܂ ZlR58Rh9#?huv[mãnYa S3gOmЀn#fUZ=`uIFszN~q|ҷѽGx`𾩣eW'GJ[qN˖Mli9BD9=xVy1\khp"LiٹelmȚjufks{K`VGbuy]=}Q$sԌ1]{ڝ)e+VWe'F;,o$>)WZ7'uw}[mPdÒH>P?X^;یns8$ED868D:;;疻.S`ʞ7d"1H#P,93pRJ BH@0nIrHQklQLBYdlKc82%D T"QY?.7I88&c&d ^c"j"a碹D .wp#aug  pᜮdžYSCwwF> jw@Jq|!Jv[?wvafFYml %ZPCأݩgz8X{MLF# :?HѴNtߠnx/2! !PJ P9(+ EV3,hUfհ'Sk7Jܴ(ŴphT%'o7ixu|R2sY~~ݨIz̳V9' 58vruΊ|g (=BHC]NZ2G@$9;>=4XqaMDQdbvan΃8GT]6h P]Ss0ע6\ WRJ) AD1P&I[Q9!Z*j w)cxE L"$$#'z#0Q4.:a)ؿAdZH)ZdEp:{\@2 "]dc΢epR!arV~N@ 2f-\qLQ8,)"!T0gU-_Xd@Ag: #։Ad&ѼB T* HH)B8EᲬ%YV9OUXOb%c1إ'aP3sN']֟3qO$]"9z$h[y+g9z %$;%   r];^qcI%8's Z%@( ¸,+e- rN]'JY Om͓Hp≎05;Y1@5Ɓ, qpOTsxlֳ䞏bQZrIM,=%𹮱Ο%     C&6-GsRhTTDP8Ee,K,)2'@B_H%_8x#Y@03x@@"YCiM<߈woʚܧwNgg8"xic     I i*c 5jV @ZVa"0€d:OX5Z9tٕږX,cX4}'];V] 5yg# nW:*a&3AA :aOj5ZIS$K]B) ) (c9d-˲"K"sT='\=Vj)ZpP'O'ػQ ㆞)S=K&W`y     Mf pPs+V#D XQ"!.Ld2Sd0Ot%ъzr-;V;§'9%g@~M0ٴ! Ap"UAAAO"IKЕmpB 1KA"eYdERdYQΘ*" 0 ܛZI-–^*X[L9ջVN)L[UUm߇ԡ2(Hz/ L=|LY rDb 3=bȁ{ǓqNTL4 >Q  ~9ȍ`BES(BD\ ) ;& VAAAA$!'D41aK>s-ƵēD}/*P %@q&+$.-+ c N@QO'yP7CAΑ$'`RFB8x ֆŔKwQspeGk+    rbo,DX+*7F%" R 9Sd)YRdxS]2wgB&lD-?3X ܷh6vPĀ%DJ7O2'fYA$ ?t\$T 3PQ1g A͛_ӗ`X2rsQO:i%:\3i&wIB|`  T(AB"%IRd5f8SkJxTKP >uh\9( i/ja4m*=qÖ "%DE~I@S$&1#1  i#1 |?t9t9xT<+XGBP*@H@j,Ɋ8DK@lMY0£0k=r"a-p2B8@rp+>y⎂{D j& HrbAAA@AA!jUXOh╄sS IDAT(JD e+ %K.9gqB!Zg Xj!ÜVa+/b@[ss@s?%dj]%\D`#ɤ$pgp)dІʱ     Hxo[RBPB) R*P*1(L(Ȋ-.KB8%`as6Ĝێrh ;--b]%Pp(䌄76FBYA{ X"     b 8ъªN'B@AE[(+ eE"KLVB@ c    $3OL2u#~GB( R**1dXʒLjZB݄ Qa9ɏԊ?j!%qҩ88@X A"<\jݮzQk}kL7Lwki{T:WA?vUgTe6?mwg&so{P  ™!]D7 0צ9"*PA `TYᒤ%-nYE O\όkf=YSµxfhl @]t⯉!mh";N?x   X8%(81Ea$K,3i14!hՅ-%'|sw=?' EaKd oHOvC"A5jϩ.,>?8:U#֗7퇆_1-]V[qOgU_$/5 23rf[_o|[^VQW`y^TefZz<·^XUM5hR;~KW-̛d~n 輱=z.FWRA $ixs.Ў|k.O .7 Q pJ(( H(2ܲ[]n,+ 13%zVR%5ԩOh!2ò8@Y3gp* \[G-3:09x`pM5Snfރ}K.W>*p}Ko|6w];t6 z%"UF}Y=ѻ曷=L[Î}fيD]=t+ӜomSn2_wOVG[rJFNkϸ'[=go4<~$WohD;ey^t~?y^ճQcHشj'3MQW'H:NH jd"K,)d ҞeiAɔ։HeӌG\yBH?#;?_-l<絛ȲHQ-̨6Kʫ&h*IG'SΧ~?KqR:R>pX,{w7wQx3@SK菏݆Rp+1qtֿ}4wK䍪QI.ం· H#dA݄hT6<Ç0_??#u^]}b[l-gE4힭V2ٺ}}ksvttSSkOـ..06u S+($5%Uזd3ι&?тkjV@jy\ ( PRʁ(+Lr˒SԀB%jts5^`ؿ [ k>}RQ0 a6Zmm/xf!>#JGͽ ܯ"y0G'3oPI ErO<**pryC6T:on=eLyGO1n( nvjaDQԵ:wܕ]vS7mP4Ȏ7{:P Ouׯ~y̏~?sϧ[^MRuwu+LQTk<;^߬:I)ɿ9 (CD$0SGG>w]ft\ͩ脅91yͮU .Hٺ5X9{ cquiT/Zyֺ/.x>UHba$|M-)5 cЋNzUHLF=~@ e?Z)$^fؒİw uM)T- NN!H1d%eegCoof??|O(>eAtMv6mJ+uUq<ٻ{G`TDDf[,ĒD{7n,{P b(x<^u> w{;73O:{תbנw+.Txg '%ݧo>w׈jVw`aaEP DRB[J%)(k~$٦ϐzB9ro^&ĸĄdjo?5q5s eӇ".̎=->ccw:u}JL؞LL@QA Y÷ :R_,l:'/}-3[Υ0._]2x gwS!w7:RH ~a2x:v߈K`L{4GבicYUwfR" ) 1Ƃ x,zT؟Ae5`1!0J F `yZRTj  B ˲bb,@1!.-\ҤyjʇMPO*`*,ƃE0 A%\@1[&%&mvieZ,S,W$~b|׍+gY5Bꫛ8s֡K< / ={~餡2A[?ckc7͟ITs++cc,]JQH8ǡrwbWY4Ʊv}^y?{ |޳dklSo#{\ޛdk㶣7(M=wsۯR5?eMۨCߏZ66tԋ,> `վkQ`)iku\$Uv\@o~֮ܲk )c?6)D2nx7v>9w_9ϙԨ߼^\j8)9*Eč.UZVujݷO&Yy`̤o|]sr ro[Az[X K@m)c:}B@ ]G B(Mȟ_8ѩG~e~4%ݬ4Ow99~DԔ~{4:̫?s7ʾߊu:̝d9&SV*Y-ut;y(1u6+΂Ɉy雡RyjM .IΒܬ{ AfǥcY [ݒ-6x\xҫ{3!!ලg_KmwsXFVANt_QvYc<;t(#vµݧ*v?]G|mgNov˘ 844x)`L[.ܴ&<5' +66_y -XȘ&7 %}樣~W6{͕>=Q0)HR࡭.WqnqOVP+{@V &Xa,cdhĘ`A!F"aǂW<x^XjQB3uCZ~1'("%'7ˆ%Ԓ> \!u_sܦu! Eiaai !1a|r^u+j27ōUݺOV/炭JI ߑwATlrL,եtB:xz6]|-2.]PxT%=8|40ʫow7,&-Z{1'kV%Ie.k2Gx]3ljaM;; XmaJmLя.[v꣕g<~hRUEϮ57 z-ƱŋKfX=6 YHJ O6mxxݥ['%d_ v V64oЬC"EY%u aE;TЪ`V/;%~J[kn\WOifV6V<=gKfLT1OOnw̥cL^{;fanj oCCX4nƲ1 \ˀZp3Gg2fN-N۳QF/r'>ҳ%<-#bo<uGOh5K~57D`,}`? ϝ 8ڃ)F+PH8Nm-߹#oJ;t1wnFө.͞'X4$oCn<^@5^R  G=6ѸmeWg?9Gnc.̝ajj䫻.YcsmQB*ޕ;k߁'Olʞ;vʣ7]~3d6݈}Np :xEwlw|*9wfDQ͠fҽ$zi"ʢEsUԟwϫ}W,ge[H;cg 3;wIgtWMYV{`vtcpA:TYuPNmK.nٵ(4$laJV 6,A@xwy鸉GOәi:)N_>n6jդ!-W\^7~dZ)fv6};x3h _vRQ%59% ll,EQgMjuk2l'rLV] \["W'dJ碉[Q^/?:};tణq߶_A1NSM:䯿 >غ*+9+gvx8&)G -<:qP#cĒ[q]g9v)Y6.=srpvmݨ=[622 PL߸5⁕1~[/9T3}q2ZǶ~鍌X <3ۢ0nԼƭ k ($DضAZҼn|m%)Jҙ0Q5LJgoH";8؆*ni"$›==kaBmDh\oW]K\'rEh"p տ^r82Hߧ_GOt;2LGb?L\,. 65LdjɊJumpnZ7oE[)J !9!I\#V)rۊWwD`( 2p]?Uj\%?XԆ@j܋R4qr6-.>تfʌTebmNiϑN9pKﶩײSn>R.a `IAQzwwƄokk {:uo+=0,H!́.tyke$^=HAȊ` Fv?=(n) WR) WZONtwG&$$[y: ku}4kSO ,>!s_~ :{y[2X8L|7˂dVA^)F~]y]O{.]k9+׎Cnjc߻saj9)CK&+Wb@aPGn٥%925 iYeBa0J8yx FadCQ~FpjCEyY\'DED|!ӹʿܜ|Y@`IDG!kvENW_:U3[2=_=Mzqb*8LKq:y6\g}%Ro΅^: ]7txNEJݚmxהYR§ոAY{f6.[S*嬧k yXg]466T Vcӓj*e==@RfKPGUvOgF?eD䔔tP6'11>+K YN<+ۿ~F& YzhAv+a$v1Ītev\>Ӻf-^} P>;8{dd`™Vb23 2GFE:f YrUN'$fi SPB**eȊJZ{Ok`ؾC0)nK&E5jе~:٩7_ֲe<)$rk*ХŪV"Hcv[!ԝ؁;k^Wt5Gg/<V/"6^{BKI-u·LtwS?W413ӽoS=?}3ސ*/)2rs8" z+H\ڳXϞc/ݻ}!'w?jMzFxߠs2ER"^ 禷<7=)T^>@OmD @ DsM4XX$^JW`#imK :Bʆ|cZѹ{OwM4Wh'[0KBXHt@1c1°hŧGҟ*SI/х6ٗ&Ey!3CNr9W24@yk`b N<1m1asgK-ߎ2kξV"=jթ͕w^ͫ<.y_2*75tEH{{P(3 QdPr&1@R-”Z;>ta%6iݪUkZy e&07R쑎, Td`sS}].hP XTP!QYl[k?老ikqVuo톱 Y:$G.Yt_ȵ!׎H,k7>`PW))lBXrKpnf z/]N4h޾α/Lv#Pӻ`Vŏ ɝ`chx$y~m'pNnDOGMzc?zrLVy7r `ieY2 #CN~S+WXRiT5ɐ"!eY 'jW *WjDWL Y;:hd*Y*Чa$@Ȧ)d4&?)٨qM+\r'ŵ'8g<\T208e F|vhoRe-'^6.CBQ^70@rynGt004,hrt4i!OaOѻg&g:jfԦ }-dd;wwyNuF'dyK<= :iƚ %ָv) đcgۨjæ-۴nh.)6C{232 YL@(0}}V>PPB[B[qy;)mܼ _BSx^`=[w]۶8\lY_"*@,s-I/^xf92ެOSzt)RU9 M`IAAPmvw!lkKRu]aZG;x1aףZw[ /WլRO&-Šq#.m*ֶ}k/^ o<˚Y ;~E}+ubNR'"^V߸ϧ7pφWyk*b,2i ZLf4"DӚ!a11 0,r b0!xA /&lV?Ea=RINXb? 5,P J@QL{c_N;<V1PA!y)@#>@@1ХLlk((>K=\y tBxe<y`RъmQ禭NO|ziy*NY؄$ZxHci Թp E&&Yڳ:c-I6= ju}V bHMKjTע=ȕ} WY//D60DjۅR%Ep˿Op )cv+>U3` b$~C0`òtDAAA Οw'kkW hcYywrEV{FI.;z T֗Φ%kYkZL-,jL!8͍<CIS%!dDvz!ѿ?s>u[eB켚Ypl$A^U{R)\KQ`Q(N+FH[.e~6 oouu/OzQwΜ׭*3#-%1]B&0o|&5ka|dwYPv7Ŕ[k 丒33~iχ44eR6!9-S-`򩂾((f @\xϭ-E9Z60aεEKk'ם ,\"T~{ߴhphצz/~A$`]۽2qlWԏoe<\m4W540-SQj=~g~?gp|V*h¢%X6i\'']5g_&=}rjkk:*&e K{"/-5׀Liڮۺue}5ٗT\* 7J:ָKj"ð'H, LTjy^것3"e#61H,BMuYZT`foF>~Z->_&x^c\ֵS8:ٛH>@FZ{nCjW}8|=;x""Ybkk oo]nf@Y9kT!ytpʋ`za^q+wnPjJ eH -2xƍ{ZMYK'OU~7g]*qaUHc@)|ߩ2m ^ _uAH˓QkE~~K%&iR;SĒTg;ea1ofLoK3dE> zl`*nYjx~6.ڷm׆jUo•ϊ">50ie;O_R$5X.3$Fe{ivS?xvVz71)J]?wz3م7NO5}fbeZ^Rmռ&LJzA웶Q&,Q.`QYOL>(}Z~6_12n}%{V_c]!! D"?dtoDAAAA)CM{bs"}l>Y*TLgdK&T(0G S!Mx[}&۳mq'} 4q/=rESW՜-Οڣ~UULsSSgm r EMJeMߪaʫ[Pŀ_WGU<0U*3wh:F/n{~=iӆ\:5cFiaAFξ$z畘ڼ. bFΝG]9N1PXp`s''7?gNΜr3+_J6ڙ}eƄQWm;j+giP "]WȼUxpJ\V*T]TgYVǹh#Zm(sHC'=gَus5{t'n]Ǭ8LOgnl;!1LmY5IZLө:W.<66!9]t*%ŇYfSE>sک݇+q}M&=5X`i?Gk* 5>`?P۶^EGI~ʧ Q504:w+VVV20tnGtv4' a_0.{]|- xҶMˆt6N'൤EYbGk ^d`JA'Qjo3{7f:մѐ{Moe]acl9~ܓ;n2{P++}V.ُhlUo, B rD*IReLj^ *^P  !ahĄ1,FC a,X,v}uBaG%!IG-OQ╖~ K>Z'!1NhTh:>?%^!IX7(?YS Db"E,˰ò "=f]6sntT~ptlcSr1q+'.qmJdݔb>K>}ѱYXLO1 ƂZ)OOKW w1C33})V2SR3IIoަ,Fbhnn/ Vf%mM̄xq `^U7Vjdbb'DRfSRո=Ⱥ ǽIT*YYBftc#D Z)OMIWi=59 IDATy擎Ljijl("#-%%CK,>F@S3c=)Rf%?=0~ʿNq7a 2}umm 0ɩjE yjr!$2q7j!CꔘTu'=ʤ,J)OOM"[]Ŷ@&&REjefzJ\g [iJyhheoNԬ y/^տ4죓gώ-Z\bb?"bW7u{Uw}*rTe.kCXD׊ ! e$,I8b*Zj^PcA4P!͑< eu8Y_Vd-tqp#ʒƨ Mr>^87ߖ7lrɨtė çw-jYJ!ŀ9ذXBa80,', PPP WxMf5@Iħ c [:?zMTУK$;هb֋ߚ[|8ek8XBdY*hVFaJ#gntTdnby֐uKDu#>3-)3Uz»bpUz\7%GG&GZN-ʴĸb3]d>dGFyr<033 \-6Qdߍ.ʽeѲw-r`Sf&Td*1odz_:V[BN{b!]dz'=DSё`fbR>)IqyrʃqLL#G׾(]prsէ"Giɒ,0,&`y^B BٖHR%?s!̗'=퓞L "4'F^:9z,& eX`9JX8`Xİ`ǂ )GAQ:Eojk5)M7[Mo82KCEh((|霌}X7FT[7xG~Vt%5(w(>k\"A,˲1, ၲ,ݛgB\lMM+q̼*IܷZfgt0AApҡΕ̌ͪi9|ō8ryjL&۫:oM#s6y{mw`Jj\z V;Se5.̉wWMSS+{{3)6i!hvomRĬk >˹=Z.},l.YWdUuaHK/P]}LM,[\$Nq155xxKƫ@_|.EI`7`Kg64j5iڭ;~Nܹf2ꌴ1QQc߾KQ2j勆 \p3{Vg*ʓ l!;p;w[7._:mA>, gB0Tq0cJT* 1 D,!eÀRtDAaݪqN% e +]ƨ P~.;C %8q'>eB'E,cALcRP7: ] I4^gf~םuxEy}r츹Nd7}'pjqXK-yܥ3fw}} W< GT^;}U}Km/2fZc;eܼcكvjޒ+K.k|\4ŝS=ӡZV7k|?dy4ԃwvI[G+y6npgĒ˪KHa`ѣ_g.cF.*b:U EJi,:oʖN/TL( I_}B )qϤBFBtFվ((U4/EXf|sQ({ aX p1&X *yq r$$WYCL2^0O6\Σ9GTQ)<"`*7l QKKfY \a^4oA"IJ#v4MqKA, /8 Db!eXa"!Ek%++0S.HwvwhW#?bn~e̞nƹŶC-^Tsr k>1p.(ƠUko[;XX"Uupm *]F l] ifUB# n3>>Ţ1u~x<٭ݛȯW( ioWڵ6`=y~=}MtPWihDѦ`ڣ_DZ8 .jLz7 ;v_fBaL?< I}6hЕ_"%̤B)]|xU ( 0,p!E b4`yy,?X{]FAAq!07afnqq1Wݯ:j?˼54Fke&;`jJ YXHw[XJYJc0:|Q&%$T@MLo9˕ -VFלrʌMӚCYժ9t0rdt_)!SxgDž ܦn%) ]ۭߞ"BOH}f/ گqΫMk4o۽cj0o.kDg2= A(EPaOk-B:QsDlȒLg% h⸊$Ŧ T0,r+A E7, Nx,j1~b|׍+3xyه]LAAAAAAAAQ~`&+R"P-yi#璄4Ad5[+b)dK][ƘaBeDR)+J!` <xW Zͫ^QmP K ~+,rb@cL c`B0&!Z>(,,-$$&vsO>!@ˉz *T+f=2u3H={6ΑĤ_uack ج ֭Ek/]ӖdDjDRڍ:_|y _T&çߩ_7>J;Ȳ璶rL,LƪK'/dx>nh'PsԤXyfT\TJ tzU2+D"0_ק|WLLtJ*c<FOOa!g *rKHr$GS߬d,CimUOBBeU01X  V0*d,NgJjg@@~?Iea!bqxAcL@4)zI6r95YRPdM[H~Y7}ko뙰5<\9Ĩwi )QHL*W12)}ſ |^ۿe=.GdL/ӻZf.uH`Osu%j|a%jE0@ZkM޴L_ dO`]0ױtYճ]ƴ1#ے0eeN8>ܴBw]aE-|dv7ױ~o&:(>P{I>sgoٹKmXGOT ^'YcaOfy{j1/ZjXPuȖi?uKC5BCZZZd2 / "66ՕƦRHH\.X;_zaee Brr5*rSBeN[.5n=FH4iBibx4E-[BGϛgGys;Kk3zlfZy*Ԝr"O5Y%-Og4==Kg_qj% G5Q:u*~X>^No?ۡ+6y~-RU͊Puoo ~p-}! y\wsmYxlbz 2baeK2h5XV(}woկLCՓw2|c]8ɹ?ykVO':CbYgy|7b3$vN5u/jNH$$55rˁKZjSVPPP|`tٓjG!$2~LLbq xRy"WAEv$h},u5Y \des%4n, Bac9b BahA 3P|aW˜_r?'o ؇1Ƃ^!1^y<߷ uN>;n]RKe(D)Q9%<,胱+n_)g"/X[AyW)'O0d&Q. [ dHAEbZW,hf$Dhs["`̖%6!@`FW!1%rNʰ,p^VjW Z1!` D i !LH>3/e$;('ϼݻJ $PCt)*vE)vφXW Mz=W.˥|Fд)ao70 0fڴɧN%RbP!G@U&MM٦ 0 0 H' D>3:I 9'h<(s|WyHdd (( .ݮiv]RDz`$t4 bݱ sla|J*e2478:fWˢ8(ATQD $rtnz%0 0gڴɈ8hi@VV֜93m6[5KjOްamئϦ 0 0DUT"҉@!!9B!Ysr>GsRdtTUÒ4]vMi]iĨuƐCtDtD5K&!`1ɖR)he˫`YFg en(\,d$@8Ð _YO0 0LYԩ3XJQ" @Į]{L6-!Dttɓ'٦lSaaX,t-6v4/kw"DT"b($Iݮ]t)%RGJW1g?%@@/J)IO[ĪBj%fQm̝ߧ̂o[Z?}c}/H<8՗>3v.§K_njNSﺿ]ti3SWxئlSaaqzVJRJ)g ed-%1""4XF>1vݮ6M3<1 $:']Փ)ˡcɷe֯t^Ce ; }:,SP"(#; e>1nIՃow {)>f!qxtշ=нX7{HX}#u# uNk?^2$1*|ZS0 0 0 0GRBNRJ]u]t]<Me!Cº $" PEQU!"uMu]xۗD#,;阡f<2Uy+HeÒV M!?9QaD*':4ޖ0ep6%fKlִ6Љ%3]ppppsMFWsl?fo[ygZzr]Sk&FGUӺc?OݢVBTT\~uϯWZq1ƋfV)"+TmwuмFl}!kv[1*bF>~{ić֫Xڧ=_=Lӷ4ۧg*utjpfTUc#c*i;r~|lX72Ѹ9W43aaaa(KU(V5((($$$((jZ,EQA`򤇇%9BN`xv"jYT Vw~$A t%b#N3~-4*' Íʶ{Y ˇji h)i(W_>@ t$IF9LvD Sd[Q͚'u3?U>KKKKKKN7>LKKK[1eۡ}ԧӠo4L|_tz}]{׻Νțk:p<>._nOLGSg.yu/xu`O5=9m}㶻V߸Im;xG?:W߱i^'In[@1˼ozx3N8}ڈg#z t' ۔aaaJv[fivCCDE(bZ,A jQ-P"/ Oϧڮnёyx bUT]mݦiv]ӥ$ б"j :>MWyp?yܜ}rI,F{4%Gc"Wʩ`ʏݮ;"~>Lvݸ]7k?jⓩjΫn`OccнHirf->;{##}׫ᐵ]:%2 `ss+kn8_Ql7!ר`s|2eja2 0 0 aDMjXTU!!@QH5Mt]tMu)wP%Aq$%"ΒDPZ`UXNu4fkI]4: @tɖHćF:Kt缅@?e摿ӟ":b<S ZBϽs1!w͔̽K0POBݰlzH>Q)&DX?Ȁ*դT@x712hA /g^SS# J3ɖxҒۑBy -4/^ِ]gbt*a~}q~Jp[`n*u옜pG;:NzvDzk٤^H5-X#p{K.j[kȲSV =v_yk[>yF R9/rXwuY :Vu7n7m`֩g}54&"<2&Blhr+kn8i׿圳s}kn sLٹc@Z3}sWlw\KQC;n15N87ӓ{OVg2 0 0LYƦ HUTCJTUUP"TDDEST(p4;cb"rDC@s'@ ŪY ]JMJ]jvMk]ײ5NRD(i<46B"Pf?Kw'D95 /aAv/NKsO Tc|ވlI? hȳJJ`Xۖ{yFRy$c`n5QD,}efF0Li }}?JtcS)>36'Tw✌W_Ę7<٧O 쳧O$&V} kdTUU^^k_E#6-?zhZ,߅} 6X\6c9=1}|;i5!M-iwf@t:&oG0;7,PuG~yQKX"+UI^8mk#J@BlT0q=GTrR"G?Q;Gx;,cv; P!M1ym3u3׾*`ٙΞW$&t(p9y9_N;wpľݵk(Mk_U"w=7cLI/S ߍ5rUΨ̗6hoXnm\`Ф}ק@dzU V].=Cm|;* |[s}wkOyeXynbkVez2 0 0Lvݮ5ESŪZTŢ(BQ,BX,RjfluBK EB(QII$LFKILxB( EG@jIKFt&]$@M0"QQ) sa^f'6,=6phޛH9i,1?@sJCT3"rnuUK7^TrYߤXaܘẅ́?dy+x3L ^?>rW[3g9P;Ńʑ+Wu;‘Cjع5Uv2ȮWmoez͛Xf̅ WzM]`WQEc̔EfȮ[Y3 vCJ].a߀FDEFŌ|3eBq [Vn9+4jT g׭;z ^dKۼju@;Fc "Sn`Aq5F*loSaaUQUkj YUU"@R$RdU,jE RUA@AJ@@($$i$B(Z,jBvnhR'"#6C#@" R:s g p~ҭ"x.(\FCC$%ߢ%!ΉCE5m\3.|!Zoi<+r+g0%Kǯ7yK}kq`ּOB뗗:qA=y %RkvZYsԼAqUz*D xy'^R7OغbY.x@᭾qcb >m|l^7}e>u3ۗ>=Qykdmܣ/0vFw оb¨{៵֤cr Gp~IoZ_;ǼxSF]H,2?57nj|֕BU6Ѷor_O{uڱmom =Cfc?vt=(jv=| G9_jgMs=㣺>1{p}&?Sձo'iy97;qB+;A׈v~ۀ/ G[Pk̟\"7xd(~~{  m{|C˗@U. B(,vLȂegw5K)YN]}@}޹a:i}=6~m71/xdSR@o+>O|}$Rji/InF|K8y)8f^~@kWw{Wo~N?o~Ya?8iܫ]B׾y̍HO>6[:LQO͵5+c \רV-s{LKہ5k݄aLe ڲmA^ˇo~y'\ݯzn U+fv;g,nc߹x@x&kǶoG7݋m# :w]no_*F;ٹ-<P52s)w^[mLهhk a'}u~lӚ}zذ87l\?5IIs6MFӃ{&C'уCݕШet?=5`B>۔aaa I !K]t@?KCuTH.4H)@1DD!IF$TPUUj#I]tnt]5p$#x "P+v%=WKъ_Bu0_$.Mjnfp,P 7u2xy9ysȇlڗ5K)Y[\a*kD=>=i;[{+|㧁oܩZmpʿ]iw_#bP~Y/7k‚&_^mX!{罷طh!zCRn}o[?˾~ ^;;?λ[_/r碎o{ x)=}mXA N{k-^G]:8.wڤ]ٱ _?7z[8a~n74w7ߘ43f"m/\cjC>=O1˦ӆksSm۵7-}F=j΍!wژ$5o`Цy9ض-dk M%MٱS^LkcOx5kPpy+{i?2FZnsu͓c/8zҮ6#{S5+@?>y)|l籐6eaar) Bp([@Bdb8J ሌ  *..tҙsp$2W*B ]']f8W$ VA@P=#.-!v@ 9d{ҴUR<]D d^:]bY@-XKە@)2,1Xd c6VڪnŠf&~ѡJO_h}3%@("ZR+jH-юl΢RVWNgzs_%H0!X@H}]Wa?|~_uO)o&_י[ o(҂;tptk{hۥfV6~cra2s.XhYAk*yMWt&Ws_-l8uSRkݡNiOSi祭5w=ݭrF{]ЀjΩZ{OmMέ:;ئ 0 0 S`.eSRDEQUbQEQTE(FV$@D* *THTb&PV)(EH]t]u^ ks \;t$̱$']KȽU7I/6Q+, uHr2Ғϯ<%3/A+Rbw Y a͒a+a9ɯN 5_ܷEVz佳2A.qB; mUt!!`={4nXzNoz†ſO_PöV8׌EtM{z)*:x @ +eL[ۦ_㘴X :Rgqp S.eNHW095TqoIv(&g&psco ) 5g5S,1 v,#v8ŅR)w|Kt IDATYdaBBC ++߻ҜϜ{[)-=I_lRvYkņt,ΥͿ~>Pb*sw5Q㈢rzb҂J0 PA[1%>aK#.';E*؀l3t0 0n]Gu"/7ys_ucf m_)>^Z?eGUޙzZ ;tsGyv_f3\\8yq۪_'VNMI 3*55Lp\]դIT \i C_i {'*mS7=o 9f~j׿PsMaa ¤]lRj@R $@]J~)+;ҥ 2333gfgf_~)bL-;ZC¢"#cb*DGFEDYCBCB#"""##CƒCÂBÂBB!֐Kj YC¬a0Kp%8D VVbUa1>BUQU"P@B!  4LЁ$ @B$@!IΏ$K?Kƾ?@T )O>Jn"(+cs)Ys} ;,ޫ<"~g0 Ô2}nfDy=gn}+7#o0a?D}si۷L(F=[6wAF4{>,qW_ަχ?uymZyJk>/!~sjT\K3Ͻ{%4/Q޼FFX%JϿI*so=rjk|W ;vlKޣRrSiyzy'(9^ۼqׅȸPolSaa)-qIM$P:IR H@DDMvEX뚎@"TՂ"PDh-bE@j%E'V)% ^p$ǝqsq`d|nMsc  r5KfGO0 ';eN{ a~T@+]]3͂;9|^N u(υʍ:(3G˚%0 S^vf*UJh'>eҗ3YvVMΛrCK[2sM*\n~˗ ש߽ףr< 6Ι%7L=eJX^uZ/9}9ƅZyj%!ᐏo9X~߱252^{}{$$y3o+nu_x[kpK<η)0 0 ňkȂBLH "!" axH څЄbץKj RUE IҤ$%bQ-VWJ"ЩECECt4ȱDH$ vէ,͚3,t˚AQtY{S5%[tIV b9Ԭs( zbuQr8\{`1X?A29,X1,aOhOVc!⽰WߜcP>1oynlTӐ:-Z'?IυorM|vE *43Ia5{3-)ﱐ6eaaB#! #-9$4rwDCHJ Ib%@ M4" EꝂ"H(PKZ4k H"I 'M ,{=+%RJgH.RKco K^J(MOӕgt"r]F;uyOmWNFGY"2?PraNX,\2LiS*Kf͒aa})hgsSV9HAF Cئ 0 0 SZAR5%IC=4:#![TUAEQŊBuҲ.eeg4tI TNHU ܍^#XCt|#Fe8?(@D hFhYO%9};??TfBLDb;߶K m0 0 0ŝ6H:ß$I) E Z,ANvMٲm6ݦ6]$$ D PFZJEb/" !@ FxZE!D s)y w~2hO"1_!,J @wX'$#fNi)I$5u)' +dSgmO+AtC |[.gNi0f5Ka)ɬLe3?{b9zHŊ,K4@Ӵ#Gt]W"w1vLƞK6^ȼaPTBv{V1lӲiSaa G8UWKt>tvg%B(Ut]uzMt캔DQ"!Y:F!;&fI.1Q!Cthȵ +IDBE*=dN P¹7  ;0\IpfI3&I2G2g zu L^i]+"sǗj/$AނnmBXIĢ5PaOZT,.{ZMIu˜Ys0 0Lڷyng.+[l()uGӴ}ŗ ~"mmw۴<ٔaaR0(]j+*!@TP!T!,PUUN23۞eI)5]꺮iI]JDCr}u>uJd$! })iDwT[bּJ )jhgVM'M1gr)xeg`9M S^qBυh3%1==7h`1}ܙril{Ӷ`% A~=p~g> !WDFU1c~c.1 e5+ܶ#ÝKX5Kaa.+=z\矿mذnHTr葒UU4i6e2 0 0 t>5,aT@BPŢAB1K(n2ll"u-?:͂I"sd[|3+MTD;tďZ"Ku/7 * Ν U(`Ux5:® P*`Skjck;cͩ,ZiZHa˿LmK4u:H͡Y7_hҁtM{^=6c'4|^},byxYYwшX0'K$D>% Ւr TDGU\ג}IZ乸P g>'NGzs JL$OY,@ t/ aDDDtӭ<lSaaa\4:+,(U!ZPQBhӥtM']6]5"R3)^{~n`.$ ~`KqB{##B".>nOjeQM. Kv Ղi@jgM6F3V/yij%\ƒH'spzqiX TSuznCK)uGPfZe)SsRb!.O;SdCG4 s,z]CNelv6v!y϶980H^(P$> 1; G\w=^ !ox # 4K~Sx%t 3D:ƬY2 0 0 0NR*OfaߌaB@%.5Kaaaaaaa?Gaaaaaaa,aaaaaa)vd͒aaaaaaabrW-Ydaaaaaa-%f0 0 0 0 0 0 0s[̚%0 0 0 Sf RP0 0 0 Ô=05Y2 0 0 0eP< 0 0 0e,aaaAvix 0L ]YXdc?6F$ ݾ$|?;Aco|pӒKkbDO'=ҹG·ʏܹyv) 9p\?>{Ppڶn} V:t<+SUiP':cPΚJW  S '>{C7kA{=+wťbYA>f Y-.!'?#C޲VxԧT5['6o sYd\WBG+ve(d,#BC}r۔y%Rr7n=||;}YEhkV,`9G^ci3eǒ0J.ϟkm:bL͍b{k%+&~;NB*79衛'^Ȉu80ՒlGݻw"<շ߭NXw=rܹ 4*Z7a{yg酒x 0L d `ʚ%7ٳLj'&-˳(*u*Ҏgr&\m[-iբa_->qG5 ^uAh= Hm[%מ8j$^-U5Nİ'9Γʲ4|NƷdzý?MΩJ_[@?3ƉO/5<8E?,6J_0 0 f 5Cmn_a &wZʥv;sȞ=91mtIX62hpl.Kߨy1K<[ԼS(}|>KfG-F.s#$tDcvHdY;Cƾѻr[oť Z]c-|̷VgN޷m햌1o޲s눥](ɉ0 ÔR5Kdb/e@n[^_}4o=kak/z{W>o= mU^[lgC}xTvǀ_&f53%ta}#Oך4|@+]X5π!*/³3~=JDsr0餐k%jߤvؓ㗻 ,zlMlk~Rv |]m}3F`[W=<۞8`boZ*h֯Zc߂y?~]lzpB횷a]2 0 zzd>Wѥ,)kXK8<&w.pܝ ;}Ф׀>4Me?s_Ӧ+=WwjWw}ۆ+mڌe2~&"M[%b;|sfZ# sO'҃_mi^lHCqQC*w\ZCi! BwlbiL=0/.bc.caJ /5K)fؤ@=׈3e}_:zO) W51Q*oՂdVKzdTŔv}SZ?/{ޟC^ޭ%Xy;wQ_:#@7nݻRp;[Su_` W5n wnOˇtƷlQܚջ UmBjZMR#9^֌jߥmަNkΞזj m.AUcnl߰rA8mi5R*A{NtC޽־Շvu,~ P @3ҵ ܙںI5,͍.roԘv~}wsbu/,]3C5J}FoY{AmKF`uI O?Ua+'Lp#\RQW2s[ v[6z˖ıaعhb@*+r{0rﬧ>c+;:#Vũw{^Km +̌~zE]}Ŋ'ƊL-Xg.N[/ͼx0> Sna z5b^w[0V,Qaa @$w kr#Al;M^llI?ukiiXd+*7>z7+т㓯{Wsh/e>Cҡ_h×lC[~⍅g\ޭ.n3Wʐ"Z~CI¯IGfaI7w 4zVp~ #qwezjؿχ~բE5kvPʁ#vg@ͰЊњ ;7m\,@֚E2tzM?ۣ֖kC>Uٰ5u/C(L}io=^fX#8G/M?[U{KIT,"j{iKf3 .1gD5+As}5yZ~]߂\VRB\vAAUX6ߔH~k^Z`h ~A]}̾2oSq  TO^zRcNTV/i/ZZit@xP/6B҉e vpu'#*566yP:i-=Cv왵?mdʗwM`¯1[<ž_- /?*fea饜&##,,۳;`6mX>wrvP>>vg#x8ģb|R,|&g4ae C$r6`$fIUݦCs@u%xR^$(UleyN dIޫY$@jf ڶbVxvZ>| SɌg!3 {?, d=]#Mʞ ^5ZHcѽ'9ݣgoHr#r1h]:}Z09NyU-XQs灭sn&nNߘ{nU*  tm7H@b-JdO6n!T+xח 3.AqG[[ F I)<9,ED,Vƭ>c4YkQ k/g>Nݾg >ͷ Kܜ¤ᘩih|I4t79< * gա3 pMy/],[w.SUXkkrc{nU;-}ł|_er: k֧Xw޶/V"J9VTϽ|Տp5Qc#n͚7GTa˷x)4UA%*fV{`?Ӷ9l}Yx[CyۉڼW$r8vGxSJ _,5fP{GY>pQ~pXϭcgy;g1J~˪hLYu [CdgS62d+X#iޡ,슺p۷p5b\߾sqo)QQ%&}PRuwwب;/.n4ߵV.5UvmɃ ^ mZ;˗K/Wͅ/+wmԥOΟ/h? wBq{U=F-D%k.%-)ǧQ՘.-`o/Rߍ4ϢڸL&''?Ӿ`f]-(UY/}@*e*}El9*&WSƢC~}s[7} oޙ$0۵豸OY n? N UjN_7Ɣao~-~A ZƪEOoS6FyZm,:IXR+r[RU߭dWzeizP +JA!+Jod.z^73;/O/Рh 4 nINjm:Q)(gZLs fffEnZܼ?U䟛/J|{bp,+kf !yvd4 z|WD\ᔦv}P{rJ\w@˷U{s@ҬCK[fAdSӐ.Yg5.9u:@i9p g缵u98{m^PCT6~srJo4jf!֨U+U:q7\{L ;A+h֠r::z=OYD36yۨɅ\ዴj\TQ~U"2eb '-*Ekk/}Ӛ6lDU/64^Kuy=}Sk_Z~gݜ9+ߋ'{^ྚƧgs#fi.ߟ~ضc;*X姖WW`2oHS Ϡ^+  *瑣Dc'L-Yִq ^D%bjH\Nqn+*կ`tt!L K YZZɥn &0K{[[[)Gl;'-]ꏜѝه+Iy{kfȆfȍzRv6edc9 ڳ9~3>\E4! 6&21b׏fywx|9Tij < My| +UltGMt3Vۭc{׃ŕ>W=.lU1FJ?6ATKZ2u}l+KAIj=qܱm+s@ҵ1UUdC4ImPRl" vtZxA[Oo[WL["`"k[IRo+@bA;xj -HAQu(yHQԡ±f`X$t.mzruYþkH|`>dko|e?.:Wn.MCo<{| ky8HJ6qjޓB*ͷ ~0Cuv`{yBWA~ɩSyV?%JVpUKi>b'eA6R ]лg՟;4ta)_-ʥ!5Z|zQG^4 tX+,`i^{yY^|TwGA°k(ZPڌ$fIAAA1H^yFy@AE}]{iSӾd #~фpG7}#Aӊ-|6!okPE1 e_rh[7F*.uof-D&O|d 4jX&65-1*U*uwiZ H -9 )TˣJ +ۻH yPׂcGxzXhk-h9am7܅+7ǧx¹釣> +m>{+VB(+pu0snSwt`-<:|2aD=AL\ٲ7 <|I.n'AţSu|;UnTԱq(sx_N< cҌNHM)-l25fP [uU;rJjjѴ-ŀK\ GV(rp7, B9‹ 1K   ]F %}PriϺ*.(RKA_uyyZ`xv5犍._8NN|k/JgerO8ң ОЩ\hؼLj-(ʆuM=mgy[_[ar_ݠOSNJ+޺ H\^ۧla%z| >ަ@ՠ Zסe;ԷC?nhU(T!@_饳{yvʜ"6Opl('7c9͆hTDy?CJQ9}Krtw|f@1[8-k9|q##xoڲ7^et+ X"1ww/cXr˵Y xW>N [YA:vڵkoݺjE"7q"AXLӴ <8HDyiax'˵ qrENNT,S)s?5zEq'dMN8G! .4R)IA^IWQM{װrS^=pRK3F^]Z5p2a y)¯9|",9KyO'uwyeKW}:ٷ7f+,#kmspk_ES@^ zl Cݡ%k+pjHp'M;4 wy5_TdP=~wӋL:p.7o&ͬ4Ujce:@K'tׯS3O's1KGe:j2}#嘡C.!/wӳc:V&>+%nș]ٕ 26jܰ\dPe$?yOK;Ax㟁¹r^|RQ |dNkݟTtթٰ쪑ڨjsJ.1plkL̡ HrMGRQz|KF*l̝;wŊ78q,M`0xθ TM4E NJF{ER"QŤ/hH*]fETq  '\]ucKj̻178Z.rmJ]e%ˬ pnԩre͆ۆ͏Wb!u;4XecԦ6]/PC19b"/V D*y8~ʕ+=P42 IDATH$d2L$`އ7ƷmyzƜ8r( I:~bNUL֍~[["ɿ&n:85-qgyr|$Qږw?~1Vθxtq:V!8Y?۷ЩC4~ugm5LuH=]Ef 0iG5ur`QۙSހ82]SH-' C4MK$LV51SH$cyH D"bU*UȻwSyŌ/]ukwF Y3A@SABzfV _gw뱸O~xa}~mw#aj8{xGBQP8@AYϒ 9][EGOvlߎ?1U|n!lwfgf6܃=>~ku*{'~5/`&~ʂ:hǞ=d竗ĩ!ßj.jsj77Թ~#& 0ηu*r&ߎ[iN-pc=qwڵx 0y2g_ ֤qCzDH<:侊u>dNׅ}-lܪA49<Ss/%-}_O[Z*YÂH~@`YhݺU-rB!s2224qBW(R222R3y777U4@ ߡJqjy߆0&6//8a]Ie$ҬR~R}@q6='_ wf—v-hl=no>鿾"VϚ,^o_Ò! S2Ē   Ň;厳KTA-<ٺeٻpWԅO/9n𓌯";pE1/A:ĝW92$z10d)*`ޥc-(>m=_e1~So ʌIyO<ݵ`_bO/s\nCײYU϶N,k,Q?}dg5(@Ya[qR XQDVV$X0!W9H&d" |ʚx2>2=:T 篓N9ڙzVĥ{jw筿8|03dOT}_K[F*A&/K^ϲT*]vݺu%I^^^ÇiiiZVk40NSw܉ |ZV(eYK,];7P_4s7-qT[V,?fg܂S_4s#̛5{ʿ& i7ްd?Rq;>7ң,Zd?c0/)?lR!fŦv|}qEQտbk EQϢ8.hLuِ6(|ag]̥Ԣz^_RQ5r.ձn5S +5w2KCbzQE Ynmecd^0\Vɍi8ze#jd;M#0O+OsƭG3?.\"+vAc岸L ::f1$چ(ZSn lڏ |ѱ4zm)_:xrn5ccv?`ћrx.\"pje9tMHk4ETiti)S6J{v ?]X;OWH5uS!OE   }D ԋ1)$+F, 6sa 7K4=DD؏bI34i^䘻qSPON鹧gσ˯ÞE!s T޵P 9A[)efNy4-ga:\sq)AL/sz޾뿴)з4m2i=mD s.&ߎ[jv~cqh zC@-oƙV %R_*_gޝs*ķG忏t:GF͖ v}+6jczY=eUCckh^ݡ7>y}Q[c>ln~=v_wl g>t?0Ha%](@qTr H:}12w 2Aڬ?OEG8JEw+S%4 pgVr݀av-Vyd߆1+Kyďhn ޵ck5*ψƜNn0cwݻWԧcõY=lU X~Vw%mw/tw'ר]_|u8?=?{a@{F5urlk7u@dbX   3]чP!"C8ME``jT e3@{{Eտ wj͒t'[*]Zw'~}SNONt}Ы'9.v&tA̓@m upP?xQK\~M1n5G5v1yV|rBom-Fjnrö<ss)*Yf]{՛=SEHZbf Ϳ~K3?[0Sꊷо-# R8pvVOh6dŌNcF׫*Mdra222Œ E3`iii8N. cn<:<Nݾ8[pkۧ#!,^:3`s`t5g7kC\]}j}2^-@)lWך<f]nSphqh->V}lLթIiZݭEmJ|{ZaZm!llHȝ! cW}~#ZA^ٺeƓ7} Tz @n3>Y.w@OTp)Ol[p]^TjI15{}CKW=Ҝ^<XoAV4c; ~*5{v.i& ԩ-N_~|'Vׁ#F޻ܿ   t$fI0[-Mv6` @Yt=L bF~Zz;~Mdg׈k̚۷IPE͚"HՕ{Q&c@p(^`GX*15ShujǤsbeeUfMNSkZ-M,r3p 4%+\R%bF)8=,EQ"`0Y\]RlV1bnZ\]gSRp5%̜ La g \@M6y{qO/ OLC@haIϞΏt7ddC z=֭gވ=0?բ`KQT~17=N-ƙf0j2r2ww}!m>7j1Uv0wUX]:}ЫG>l٥uK1SEEi=/x]km=/**~בS&viժUwTj˓mkr^?;p'?8I`ښMAAA#;ݦCs@u%xrTm$^q {t*]OR`;aA'+wfi479A1ham74Z:/d_6on |_KFpO2ԄM8nQYڳ^;u2Nv?^ _w=4?_{Vu548`p2*coDZQc7q)*հ^_2NZşnw?ޟߧ.މ4bPdC;;; )梵IʁCW-ˁt(h5ok^}g _f q0 O}vTO" HҎW}FLBaNj5|C۷n]>hDwÆ ێPIْc~S2~^xkp7뷀nYr}ںw?څ'1h/osM$\;> D çHy4w"Sr_۰>;Myav/~"97E_0sYEºM~9w.~vC-Փ J-AWҝ;3}S3{wl߱jںPMAAA", iBC22@HL[L Fh}_r > ncmMiU  /خu1eڈO]-y^ޒ}N vFyGyGOddb_ec4`/I-~;ƒϺjV=+qiiYjI_š槖]mȰVtE_D|5oИgOq:VRn߽87_־}G<|su'>wCu?)y;cJW>4IE'Ǟ윤$E[z%I!SSBqIRPMRƪT*h4_ǡ3]oŧ"35<Ϗ3%'Y {t2y/,oS7Ncַ7n lASK<ˬ<0M'hc93׫P|ѩkO53|BaJK~ԭCu^wplj6jϳ>pU cﻙ&q8vYK=_ww'~lmQ,o`D"Q3I:Ø)nd1rsszas5s}4?<9aOUuGߙUߙ`e3Y:K_zu眈{/zsSV/9v/!3qq+fHvf9&i_tBʅeӾ_SΣw,&q~&а۸ū@@Ζ|n.25MZWmS;s{.hqtirU(%2?AAAe](u;Eb{g%A#H̒laim%P6 ,3)0 #2L&H$"(J$b̼ͳҒSlml|dffJXa^3ibH$/&''gdfk1KƘeR3Ҧ1#y[ޙ7|tOI M9GC,G̞IflĪ;&Vd&7&?7* 4ʇv   o(e,Aֳ$ }$))}DEYFT"Ӡ)27745533Xfb\nbkemin!hVSkLK   x/%AA!M EQU,E*hF"8Ww233pD рДD̚(32tZ'xZ+IY f)8c8Shfi4IwBAO:z{;;繫Ig%      MSJAx/8r\.8N149gѠS' 4''+O'%XZZbN#aen E=tauFNػ&6DĮXPzzٻ{SԳ+ػ4Ej!m7@@dgwfvf y33UeBU,:Ga!Py0d8/:BUD}.hAY m7ELL?Bj̲]j(~ɝ3ww> [2S<6nr,Wg[KJ FfNܕZnaM٫coG(h]VϷ稸ٜ !*F,g>iu>J->^x<5vVe`S%[𗼒Vz-{;/cnYT~b7.i Epx\CCC$(`h$% jItJ%ÑU4MkT*Z0$ `yf]G{aoQIʭVmH?ٰvmZw~7^2G yop|qУeY}b;em?|̸*5fnxڵ}݇d H*]œδ^5zV潆QmRBc+kQ!7HPG!ɳR5A$V8rdr $ _ LIsm0 $Xi^$Dr?0 {V={̹7&-Gѧtk`+2l"׭~u__ͱ#1?hy[ی pYśc /[#V (ߜ\Vo{j>T{Xkȸv546kE=-ބǷlx?E =U!{e&u@2ec6ׇn 6īn%cIdXⷦFBsѻ^dC:Bws\OgԖW35t߹OjzH _gO2ڤ}fs{s=';3[!B!%q}\%pDeBsIkql%4ZDm;>Zx>tkmj8E8@rpuRYNXkܤͳp M_%zT(_:.= K}*h{شO;ZJuDKr"S3aY`$pH 4DH$).a,Y32\[$&qYBU ՉyI07JbYVff|w̲~wi'=F1f;sz^}ʻPl-W٫ӹ$@17(Q[v{RvX5} @̶%77{P)`V{-mݷQ#:3ֶmtߡk-9uڕcfSARΎ\:wテgl߃ݚUS2e`Yl3f@=xX9<6uQ[;*I ĮW&~^O5 ,kl~nfju4P9SJN*!B5YW rIW$=vZzݾu }Y8yOLTYf֟Yl kD;߹eIZda>ٕ!B!PWJ,Fx2B52Sڇ.ԯ1n,ϙIà 7{b _rmŐ +|y\'z<}''\M2A@,0)tPw{Z {Vs3_adϱS[j{Vi:Q<7 /fYfJHLfʽk (M(Q>r<a.0 IqEZ\ǭ*Kr CESs35ЌJWW7333<t`j;#cDz۟*Rٻ֩CmdίZ_!B!`oȦ׻䎕XjWbj"~L~P%a %_+%lܰe"&(X!OD=Thy^-IAӱ &3_ \fؠRۊ425ɥUixFFNE'G,AK$I <H $P(iUzZ:˲$KR,!(/bT&(JWiiiEj DP(i򦊅ܙiYț$ǔD0]MJR r0ڡd/Ϝȸl BX㺭|m۴ڳK3n9|E*j,פּݴLhZhP@e8M6bc!kzw;ҸӯtΫB!B!,& 4UTbj8Fy3eW9bR׬JeIY $8ץn$_n Ғ= Z: StGJG﮿w9 #mX_ ~-=iNUڳwwG .y+C L+RʕO 6/RyeYCCC.#d2Yrr2IpuB6Q(:::*%VI)))!!!Ji$|>Ñ2LL&SaencW̎.N80&U̩\RcfЩȨsUcyy2Q|x!H.W|՝F޷w~εZrDS5O!=~E >h?} 3_37aKWʖAxx]6lOĎC!>,Q&=*ekYi'^xk0v,(ܻw'{(y 111Ҙw 9@N4&F#K+0O|S\e9vo[sgZtȣ]ٵi/G'&\g3 M; KK- O,\sw7.|$_+G|_Es}cZkֽp!?ZT~nj,˨L^Ȑ YVDBbHhd`hchb`jg :$G_ S(Hɑ˔Ad24'MEWӹ[*4kXGL؆601᤼}36]SS~Gݿ[{41lȳ~o!l7r.r~SMpQhj89#oNΫF;K''bv{AdB',jdBEOVu6jk%) Bǎ\6,<\P(а=q[!BU:lI!m+s:2M+ȮMUZ5̫Kۮ*Z Tdy0sg\Pt]oK' ,޸ طoz=qm*q *G!{YwM@;O:s\M{zkS~='?йjܳC_surm|_Pe17",X8))$m7`!%B?.o`%+b`[,uKςg]>l5ߒwKNw:ik7|*X;ݕkևwl{S:GWcGXSKi+ r?dhkVγ:gDXrIE'ƲlYa51KL(RTRrrraՄJR(r\R4 @REH$*J3lNN[I$MRT ,p|$5eifs" E}dC]Ęy֧c >KM:2JM4 IDAT[wά'&i<}ez?@q=y$qAOsx,p7oXi |Z[n֍ޘ53sj9KY^S*)UUNW_![wIKNpر -_!R.^Rl2[OWw?x\.(Ug,;kG`C/$>M#3*LcU-wJX(8$I\N44MJX#I$\ `F.$IQMy\X$U*FS\~Gg5|'[)CN];?%u{=9^eGفgs+E3lgB;ݙ|*߿hɶ3/cSXEmwSw" ;1VkqE%pvOw^bxzGvjcC]yTVgŵ = cNMq:K@(33V͚FfMm[rSfJ}σZσƎ땈1K*@gl.Va"((XphaJ0LQ٢T*5j6j$MffF XbqIe`!gakxfJX;wֶÍOCOeMX̽  ;`Gە*mzh#ݸeҥ˼h\hѺ|Qb>$E mgf7p1Yѯn8~taV͞>^'Fi_}+cЭ.a{yT8XTBkGW_C^[G>rnu᷵䈭͍=417A\FHEzl=]^켢S%_(-qN>^ ?>أg+"C{|v.:sN8jƽtۙf%Vɍ#Drrx.nmux#GR/KvDd999KV|y&:EPPuN*r:B_ok7<~ 긹N4N3OW1KB} E)ˡEbahV(**JeD.Z.%if%(tAU"H_Ő NBb:?u 5iw8u5({svW?ȡzCV\JϭumfXc EGmv{k^m4V\B~˃Ȏ82s*_4|ɭ癗ȱvN]6jIoٌGD˰>.'viwFJ^<o{!Laļ"?k,@пW[ R_$67B!;DM2#˲**;;;===11155U*rRT*5,KQ\.WԬ^IfKT*T*U*1pJX]QAմ& H#} ^!*^ݺ~]|i>|بG1g6pc``pjvpHrpG. &V]M43tH y^pH6n83+\<=E K;vtvt&U۴z^fUs7҄f"xn9dkf_]H6.Y1O/K3"xe̫!@שr=oɼmjsHC&V1Wuie% v~xcLڜ,5P58_~]z;>.x7o?خ@tj"S:X}=.? ^uP)MEQ X@Ύja+!*ҕk<{"(duJ땈,B!QA%jO5FMT&=-h5^jB Ð$ ,˒$Ia@38Bb ("h֬pf%A(f8&8KTUzB& B&$ ͂BBYDGs866==;h':v̬>ϭ'/#'$&&&Gb@49׏=MKOLɔ-ȓ;˰E|ULD:f(x`G/9|.@6Ґ`ntzhYkWr1QU$ <`Ԭce^_c"b#:ؕ[t|,{eӕO:ceg}>__ >~*M]"5_ٹqS(Y.B ߴEI`uσo2yدT",B!#5)5k^jM֪(C4,II|>$IIr\.W,K6?BJT<:)tW^W-B^ݽ;[ۿ/^|1c׫Xs-,;׭LcTU.{Tejmo+J~7DPvR0ԩr},s'\;t+eo~,gY n%N1iV%,c9 ~dO:Ec8tj\{KZ~ ]oVKKk DDF۴)++;,<<88k_ ri陞f ˩ƭߴ5-+c"^6vv9'[/0$YLL֤t;plf1;Y?N唋B]E@–ѓ, ,ɡ(( EI盙Qò, O*JͬQVaxε $+IW=x+B/dee9k,^"Jl0vF T$v^]p„5 ƓD"HҊ֎ ==I5u5ɍ$_ey oDiQoϷ בrBܠ`GeY`ُqDaR\.|V0fW p8چ<O$BlftZ((M խ=Y~٘N,?w]vbsי$lBI njY^7ohdbBągiaǦXБ ;u2Xߍ+-[m/N?O}C$玞cex1allRJy+:D\X0%oÃmݖ:a ?}u?mɡ>+YISDvZ iUݝps>_c\1@ե3͸{׶91NQ_m ]f>^$x`Ӹǯkԗ$48~u~o >}_pnXC_yyɮSK}7ŁG2A Vt# fM2) %ws~~utp{s)S{ZOvEqlrd@4O&G$5Mϫ?WqʔuӃv\͈MSM8^gm_sC\Jgq\g<Աh+I!:?UYR,kj{z9DLE5bĈ{UX?I~)x.I$&" =$P(T*& Sr8M>$Ñ+Ja`>O9{( INh_=΁Gʕx%zuv7_*\m}yud"Z >~T?wxM' 7 B 3 Znj6%"㔖-Yviъ}sCٓ{Q**]U)G6&_00aŬkAK :=cȰ֢|P|5Ϋ)|XNf}>5g}[Wn4u5`+};~qyn9?锦O<(mGQ]KfNw/)Z;fc? j\ ^B@d^%ߍԝs6,ߡCglͯέMḺ59Nt~~g禐IRi r6/:_Ug~jYEGlT'8_"`^Zi}ְ^٧%}s?!.3C}w/kyEY~~oib=_,4~/Owl$;頟fdlGsSE1HP!"Q"'[]<'xU;-pkK͂qeժtuLw |Va^4H 85*-ɓ'x›Ƶk׶o "r˲" rEUj(jIQ'p8 B"dgдhZ0 M$I,+VfjY@Vΰ߇nݺ 6o9{|f_iu1- 5tmlɀhi[I <.X:7́Y^^ӿ)6}9CwS,o$lhŴjvx羽c6_ˏdhlK0D4,?Pn-ަ;D/_cә] |x'ы.42aMS.d9ݝDGPuՂ:ZƮiJ\Y0zԡM廎Bp5Ԋ; WB}7;sjۯ $$^%8}KOF@x¿yy#:̾0D\\}o[Am~S-{翹m/=Jim$Ʀ@[Wػ;/P9|kuA!M-B4/g{h%*ޣiD~Vi`czN+?\mhsA \-PI]OҮKoʅ͛kwe߳V^E:np,Y}-$+.Q, hžMuUbhURe&]:̴iX2C"M6mڴv(y& h\@طmSD\?sp?w8oSjKZpnX&ʎ] D 'ql߬n{zF}Mm׹w}v)Ǩ VdiqKFs| E5(}Bo4۶mfKGlAl>+ՄV*JG?eX,o@S?7G{X5jf IDATERvՅmLJ:0 @sCd`pk.7U=9#󞼡ruv+1$#;pcc BAņ-q=K2[ P0εiUχdEe%> 6r5=H[H`icc`tޫ5\ m)+вhB_- sw-- k"i:Gdn|MLR_p HȋYYR)$, ?'!*gjfuۘnj$oOLÙ4IJEUFľ}wO>H F/e":>xlvt4%Z:&!KCY|ܲ`jjlbb e5j䐴ڰ‹gYKOeӯx.#M,>4eZ5Y-!ש&ю2!,ގVd20Gn=9#}zZuI]m7*Ol%B*"u_q.j[isQ.]|VH'lB!"X1K2SKS'ݗlmjW9塖/T |!-߿F% ⾬jchK 5 c7 lftMywY+N8Dls搓On嚚"-C*U]ZFoD^SBXȻ_\7elrfa+N4fI9a @5ʡJIfؠjefϮ@Ak MgݷZ(YӤ>lجĮӊACr+GBo쫽G{fOgG;v1YCA~VQs_z}ZNB1uE<}-b9!m~1{$$$ 8C,B*E&C(+ֹ;YR!4tlǟfkmC!Wfeqsbۃ b7|w%G8kߐI3bf_Tn 2ڟj*ck,C޽cQfTJ0jj7lM ]rn$>XNoµV G>(oPJrɲSB頯ol"kuGu;eY08%Bw-a__?t]{_ٳE?N4@ m{^% Hpï^,.7m331D%&U%%%i)gg,[氋 <șP~INHTt[[~W!S W1л ;nۑGҌ+"56żQY9W0o U-BU-cv@x!B?'1fЏҧ=5I9hЖIK_tڻ9F-|M gB֠1 SKRR&%VCpxJ)=\fo2 d֎|B"}y u| yZz9 "隍Tvֽ]fS/<8fwYq< pQl@R寕 # .vu 󦧍G`Lk?#]tr@gP~%5/j%F4^1a.@+otXY#/4$IP8*%2je&۳$VGɒS9u(s(_KHtOCfiFD |n3@D(yܴ1{40ЕFI31Qwv=516_VYP܌~2诎/5QԁIKj1Ɵ>u o3ؠy6^]:]Bۿ{h<>is..ƹe;k7syscˬANn3Z5j V ȒûOqKr& {O7ėLBĖ"^=l\J6Jq|m$6˲~Pe0:$,j+?X9С3cV_&&_ۜEu)xg=N}g(RE5q wmc ||eN }y 6lQŽD  ̬jz6mXC'ox+'>z/'mrN',Hr؅9*v'6ΉwXI k6i}ʻ!.ZW]cOThR=O@Neف];ߩ8sC7tʫAo(+]5=>]ES/gn oGtkh.ֹwu^ۭbgX7I m &}/ݽ''|nRǤz5{X$?7G~اs%dU\J]njT\bARwUIYD!046bS u+t4}cY~K?EU}cu 3F~FOVIk=J~mě-nmnc0ڙ]+x`VĬoAU^mLm2+&U#~F23:Ap]T\A,^迂1K7o^c# ic# -ĹaB,OurۿhPԢťD]1ym{WE/Yqi Xܸ fӴ?Gdsdۏ1`B :BŋU5DPM5Bkރ&mŸ"=xS}G&֪XO{uq0K>/#R)>U= aB!B!Ta!BU/+~lJBz.YeU!/0`B!B g7D!BGClSuTy!B!`!BZs6P*mVmB!BQAs"B!c @uJ:A-I0KT%y!BGS~f[vY"m7S[ uEO_?:Z ~ݧvqsUHl((SS;wHMUgݶ=l^0=QtjW̊ZCwt-U!*ɨeI[!B!BU~G?}ig"o57|k#˱OFɊnV?gN{m2so%ʋY~:{s|fEZ41\BO!j17P!~.EUOM4B_"jsd&C;hjĤ^??kw䗑Z 2]u\DUp;Qur5DXs*؍7e`P ?/% ,ӢL}V˵Tk޷OvyշlBFVQX{!*H`1S;X~~oyᳺfDg  Τ)na{B!Bc}]{wehoIݲ_3 XT// bX6\]Z8״Q]1UoNVMK@ ;T9)73o3ԙ 21H jS?A[^Gڸ/;N@̃=n$=r͒', UmEcSӁodOڮ:ZR LDteaISqLZ:6ֲ<~KgZ'64u\ع]oQ߹$mH-6i7@{%YJJc`^ݥyV͎0_GO̺d8bM}$#fKX$!B!B %B_׻}Ae[}(UsuRYF*|a/F݈Q@oӽ;'IR@XeNV=#OUdFpkt=(;rHWdNӂ>]HlY M[Px]5CM6rw3,Ih<>jH-HRbֲ~6ZVF91aqbٺĹ}yGUtq5[flzICEzQAP@l 6,إH5!RIlf|lzM읹gΝ;wsf( Ym ^K}_p;q5P_]VZg]bժOn߻r}d2ڜyFea-ђWFL}US|lHBϣMRz3,V:rVruS_^{Pfʄ_yƷv|GZmCmHa;rvmk[?sfAϽۗ;޴a[?TZ=v]۽~?:_˨E\GxXs>W3|n+p _]ZSL-泹"~SU输Zcq&ns`ٟV\`Ow ܷIu 1cƱl_~[:/fws-i&giӋNA.&e(h^h0o[4LIv\33s˚L@ NP"v @ 'F @t􏬳$*ubFYPsV㦼ї+ @ejP$畕69Ǩ]E i 2%уV}B^rK..:"A9u}^oYʙOXgvc=L%ohICOK J?w$w0ao/6n! KFD=!QO0ИGTP@ ZT 0_@/ 8wIBoC`#nzupKF/;SCi~|!V~mOβaJn8󃸀__O?ݒZ/)YϪoViϲo^_."?qyQŭO/ yg+-}3[uj˳7Ph.2i~$WNh1$[{o_Z6)}3Ex~g7\SJ2nD(_Kᡢ@QAӴT7Aj(__0')`0;޹cxIlD'I곫pzP&k@WYl,Cչ8# zܙ+&O?ya_ī$^]Ųyڬw\ؽ&]J|㩠1i7 F 07o\(jngNzQs']<:ZEhj슬W **6ڐpԏb 7Ӧ^R2~cavOµvrRӺGwOo϶O冷+0@9;za! @ЂcBݛY}0us@ 8c}q;N G;ގGVa/SN9̧,&wN!DQXh gƽMwL}cg~E+A~<c>c?>ǃH&'fO N~pD֒"@ gI SWv]4llej޻vގ_`_v+h8tƆŌQө n<>xb׳D霠5o"\O.zΑ^|0~7}:N/H8>8V*Vں89 ' 'Z}WT'+}tqU8T̯zu7igr ښs%0,>pqqByaMGܹ !*[ r :z??}!m*Bic:^z9ʶgYHP4 `0c>;A`N;65KiaV>lW*ÙQOq/ goТODz6i ټ/ɤtjkwL@K@ ž@ zJ Yt/桌xo-aiU U+ɥZ]>\J_;svxHε~j'rIeQ*|gvmޏt&Ly;y<3XPRXpbiӗl݊̀9#'t;MqH@wRpP:9uAgzӠRh[,b΢G8Ţ+T=ϒ@h# Ы:innE}=`ZXY!5±9k}AA%r1|L*vVqLI%c~XEmoK`嬖4㋹[u-<%=p7fUڥ8ʔXS׾-}Y[O j/I=y|;jqL뀁c}xշ>mL66ymiyʙۿ$6`D-%z_fs ]+v,֛;\yeؕC =u|׸ k_Q/ιk6l5Y+|@o<5j8xܫv>ځdߜ<Bȓ~yJVOrĪ_ڟ`]+נ;cjG?ja\l Ɏ=;I[v$Ɍ~EҨ}]v:=\ }'12 9b}e2i/IO}+r N8;Sd[*2 DZA~8:[F#ϨSwV|PLh#zXMgCg4gXozst:̚K8lഎ6w:١[N{&tݤݠ`YU?=7&76EPlM[8n{lLF}fJyrfuymʚ;vvo/uAkq'g=@2ʜI^cjPC7;,u\M[X%+Ls{@dԸ>ζקk&er/Vo ov0ˌ42KSAa;QDȫ.hp@eej6je%eUrFaƱsrvQY]pFC}FYT8.!>ZSz;.7uzWMKw"[ѣ`^b@eZhȚ+]^>%r<;pՒeBؿ68NtEϯ,neO¥u$؟fD7<N6S0"⥏S>to:UE Ēơ2NȌ0TR-Su ݌cni-vqzi@T %HZzR.,go3}ftF7}^o'zUmyrz ݶտR?tέ{l׈UfcC,_:1uŒ> KeΩvU<;B)Nx3aᚗv%Fߒz èˊ7~]]z}~`u(ӥw u8uRW_R#a2޶ߦ$ΫնQʤJBӷ=mQ/j_,Q+R}{)h.%ӳҤR)` h{[?"]H,/ uI}.ݺSTZ&Hʫݝ;}il]Z慇XBJJ F8zؤI;?gƜcG9=&w,@  & \hcnW 2ȝw%tfkn%ȚC"iuʺ겲>!^V̞!= ^K=C|@x 8e_g#d36&ϾKN b(;ΚwʔL[q]~ W* Ͻ2ߪO3k9lWW[Z[2bVD#J@󍈰>s ~ꯇ#7bu/h$5z*p t0uZ^&-.-H^ZZ@7,++&%8tVVfeKlŦqZe*pZPZf<kKԪһvåu55zwVk6Mig}lP$ߟ˥ 'v#xfܯ]@ bCU\Lflll:Q_WgHӑ^^Xԛ/OCU[!t,@  TJh"@7+j*bJm2RJZ(Mɲ hUFHD10EGϒ@ să@ sq)b{ 69ӿ'x6#9f>ׇ-`xI*@vo$iF39fӧ斲 $ z/v5qS*z%M[^.5֍#4[~:3$fHuZiF2#ԧIz[UTEe~6l K%O]fHW|, +fyzПWi*?5ߣ^qlK%ܜ( 4eچɭpnϷx/]_1?1Wk UE ޥ=LgFNZ\bAK gQhckmEQZd#Z.!d½A|@ @PuvKs XkEG:$Ԃ*-K3ḻ^Ӽ%Gp+=O/l mZ|e:{nqU\|F0J嵏T5o-b79vĆM;$Rw5)FNmZO\E2ȱ"N`܏sr& =~t6aS-4(kjȿ-kh,'66_НB"}>κXCs60jkK %UrF*e:8nB TBGg*iʪ"{%R̄.-xLHu|Kj2K6eц.rgW( 5f.@~,Dyu.qqUYnFp\pXQe@ߧ^orXc%IF`7e`sayll``\& Rg|ifw좾cަH4;gn 1U%h5n*[{R@ <.]ͷu᷵TWx3KW4k2hˊ+k*Vgfls֜"ZRYC@UMqbd^8Ip6c@7$PR)St*a1D!ՕՆWiW[eUz';ZO^ja`(8}D@ @ T:z#KR֪jKc}řvK~ܲd\FYZSKo{62H/unf(4zVU'Mzӭ~3dxj5@MރJ{Oyu4ܐ_4yS&1e#K^20øg9T0[(Un>?1v~yR7 :Z|;[voT)nf(:hkES-X--XZwp}F 4bCd6jU ƈFƴ,'܅g/\>%&&!=["u ·f@l==svԕ]|wBOw?|۴F!OD 4yˌn{jo\/|q|{$Ɔ 7o5hV5 KLWoqտ@s|_>S٘7O`7gPӈ-9] ;08K*R]=lEMUheMCvv^7;{R@ 9եc/bA]8v넨=Gh&GG݇8sOIQx. ~H]]kdXmTR&-QE,+C1tè+)ӫJ2 <(J^SвÛ@5@ bZZocl ۢ4ryMEY_m:0/Q3W!wdg~"ӁBeޭ19t%_=?sSFkN+2=}'[bo&\y~Vʼ '۴n~kǿ=ir0;NtVS'ec!vR5%]{jR:*G;8SñpL^S[-7kn}…%ST+&& *NH/,O#XE;7g.UQ֔IdO#wnh5 3fVsV3#^D5Z|"tF.YgI z#,1{{$Pt!.<6]rMb,֬_u60E!nl-ؤ٫fp*dWΛ4YK71eKL,T-p#&0W^oҫ1 R֏Oc;֗U^u Nf'f6CE9`,<[)/1U$݋4 r|#URCeW>e `u< Դr P^Mo)4,a.Y y:5*K33aNWtdɗ\ͦ|طCf=/O1/uL>ޘkh5s8 Zw'2cۅ96foV޽;ꠧi7wuq,9H7ީ݃iz92YάOgFm}eEeLPTjFӸ(`4izho_b,J$:ӅO4Zh@ҩ!е_I t>f K -=d=s7<[@d#Ҭ4jǕ 0]q@u sr|22 9byN2(n'dJ5*_ F>w\.PWtRZ J46ĩ/~~"EdNVW9uvʐ/~qŠ>P}J!CN6&uOҚ3ؔ' 4^ш+*v $dh7(ЎMn4+U[O ۭ+SWRP}PMU.(Wa)eUŲ:7K̡a0 V6VmdFόފ[lK۳f4IlX?JH=ߜEhiI-VJϿhX[ZEӫ>bUM> ADi \n= IDAT`{+בo;&Q(mUr[wƙ>廲Cm|soUJ؝:йZ+w~}ez Bk'ZMs٨`W[_=`w{{bӓ}D| +Ǡ'w\JQb@0n/Y[ҵV_j<4ݣak66lܫV]v}Ǽu. 5U UTkm4Nn}@pR++Έ|깋W/^M[XX]VfmvXv'q95Gz+>ԳK.oit|վl*5BaYL N6^ƒ 7. krRt)Xw{LF3Ͻ`qnW흫7P"CNc'!7߰aCkKj; #A+zHLt hu1Jʵ w<1B[y7aI: d4`7Hj{G, ޾2kFƳu >`!>5ϓed'4g^ںzɝ:c!Q&k9jnP\gFH/E10 @ tB!>K?'~z9㫖~֔)o^G~ywٙM{/#Ď䌌ϧ0 jɧb}j=.ȈVsZurƒ7ueˆ;33#IuB;gktD xu*J5F)d$J,Qv22TI(^ɡ;ۚFEQJVo CդI?-W+q&礃i*%6E\q & ѱi:[E.c*! -82{HiIPGRߨa2(Um.DRiT%imurMtUeN(5T. t K%zئB|uBR+ON],oVu†\vd)@ ^:}OWLPC߂cƤQztzM\**-O pQ5!Ba*+(n\)/(nfga%镨%pOo7`-(æ>^||F?;?>,7ooM`b^6Oϯ"]k.LK[?~.% GI[ytWNo 1е4'nۿi8<& |cƾS `T(5gͶk-:ǥ#,j)h1$6䨟j{=_~u036`Ss]Nk&qD.." Ym4U-@ <(}TǺ<3P8-CVjt9P]>@NuwmӒVWt%(A&&:kΪz67OspCgOO*gGFP}ߥ1iy͐DXFt3hpA=HIf =IݳEl$h" AQ]!QcX %MUS&i؄-mxڒàjʌ`EӠC^]wk$UT+;891KaPdI+.ז)/IH[:z2N5UNRVWk+M34@%3J^#).\& hMEA._l5c9ٕL!njA5hUZȬY;سE*@W~V˥RyGY^jk` DjEeǟ75,{;Kėv2oݬ 87ztތ(ȵX,`aC^ߓ(Ko7k7[Elcn?uΟM?f7tۄt,`֯uZ192ETCE7 hi`.i1:&pGMCiԊ@ 9|VS#8+WFRsN}w4a~U6|뺨6+ L ~ظ_5mIAV/x9&p/S'uՒ 0V n7F[^.5֌{Cz[UTEe.!˪UCÖqhkf7`8}|ov|RgHΟJhe6y$GS[T{\<ʚC=o@2C ~mGh!!h6Fb}X˾S.hڳPW]LU@w&N&XN@ ghAR4B(.$֚VY4aWrLʨ *)jN)HHЇ{RT)Ț.)*%R-jD]^Re@hPT6i(dmzp-| Ыժ,ϵNR_SksBQ_WzWlyz#4٩hvb?[Ĕ|ȓM5wxZTWF,] è7p^֌!&6!>K? mzPTh +e0 ZxB+2kk{&4OJKIJ#lmLŴh:߇Vzie Y%@]԰k/?Eb;q͗_8CT}SǾ]97[0)MKC]$R3B*}jԊ@ qȨ^2rvTQεz3yN(Ja^^]_԰nµvrRHQ&^+ hWW\V%Whls3v`[W_[X\^-SAe m\ݝ-{}MMqQAyU\уJgryG'gLR3ېp+:qd!hߐ Ue*Ty(fB~–y<&L; ʤ)+2[}F]jϮ(PjJKnmmMډKS:_ji˺w*Tgㆸr)@ƾW̆`ͩ;cFO^4T׿X7J%;VGΪ_ڟ`/[^腛9*9'ϝ8v9)Bô >sSa;vRqZ-go،)C\f U\Y09|Oѣ4 ~-&Y4ߝ/Fo}}o{"#h`Q_gsVL#ހA Eнd~!A܂:Hcq"[W.*"wJGx4+!3EVyv/l>z _]puz\uCZUuӁ*C/zF@ JNyNAL05-PU^uj\bOurt4,-\?{>^A~<IQVdH(=D%%<ę*$#mPՖ$(mMVQU.4ZLVUQʣ4Cu| jI]_KQ^ 3#ϷZZ@7j0)\vK-/1}[ۈ,·f(Q/)W>R%3p_ gO {2/vMm2'2IV$+1!u+N,@+TݼesC9!3+nA]]4nU6ꂤSՌ8Vg:Ȼ~Spslz6Qk8MپgJg#fve }i%;,isXX^&]>YU/!j0fm5K/!N#cGL"| L+pmy:foz'f^*)pp8w=8Qm;XfTyY%{v'}:s +Je Їm1gq{iȩ9 U99-3;( @ YF ՈVkSߨޫ3qQWʲ jrgZػ[>B׮tk\T-Bt$=Cyƫjt'NehX(=[[hJc-$n)bPj־bǴZþް#K {vnCܸ %wZ__ Uͅg[hg?h+\p^z8(׺¨C UXpzLA _mn[L;]hAR,/ZSBj%vNnBVm:Iݷ6.nN6&F/3M Òʶrppu1@/oiBO_'4n.?=P?I5z -]̫-4ml9 8S,RC-M/uy?6 @; `U{j eWoZy]X'3 z3"#4Jr#&4޽c:V{@AW eߪbۇ2kZU)gَ!:1tLelTX8A}~+G<^/oMl?#}E;1{fpbUE8 uv~PV*es<`Vpƺ_DϚ`C  ~9ZTdž>ƆvP! E@. S@S@D˟oTBmeϥpf/JRZMXņ}H RZI)H]/Pd$fè(ԹjXuꢴxFehNN> 8n0yAjZ(\W/vSze ` G6 / o1r3ؘT-׬ FdmCBxyRn*Ӵ1;dڬr :d$~s/ RrCCENC_5T?kkUu1PlF.]ĺGv}gʓ}x=;ѐy=tO%t%>sxĊd"vOjksRҹ!~G5֔+k/~DA ŷST%$ @ F10,D#O4T~`^;_ h±]cͳӧSe=m_-f_߫ϴʗ!w{|4w/\yʄz~/\/-:W>آ\ێYdu}ˢ_{űw\;zEE{/D%Q4FMl'-Q#Ƃ` (pp\p ,oge MU+Zյ0k <\]]]]m'OvT=z|yr3!&Xqy*,5Ђ!30҉\I~3#+*9iz^8'33!^޵\͢r3* }'lT=kj n4 +ѶT-Ep͌meum= I݂U+J4eD?L*VL\=hY]`$q[677T/:֕Pr܋M-3RGCf~wCeLM$!ޝLuM{!LH|lkǷjKPij~?`ڬ o{tIVR'ܾ_Vm^q\i_vek1^*<#:"^h "+mZS8P@z8"B!VWBD|瀍z)qCI݃v^ Y;tm`9|v7W-5R ]flkƶ繡m,W`1cc~su[7rzFW}bzN>i9 k\2:v4:CvLr9NzHYNJDVP!Ш5Jh5JpmOL)M #45QRae|a/Ȃ Ȱr䓯(ѽ q=$_9gTkﲲ mF {zx򸄔DuX.t}yhTxEnDܼ]ET^*Rgh7jQwӮim@7@u._y8v tlZ߽[WM BE Vָ[AצO#}Č3+z;{_w,P|6N'ݿs;4sѳGqq@=|wֶb~ jEvUQJ3Rs*g$Z^ 1*2M $3W YH֎U|}zPYqI`tqw}`ſU1**.혢_Vs @qrmL:6F!Bw^1K!^ "1x[6__:?^F6YQRK?8}nsGo. 3FPvQ]+-r`V4%)QR b$)&UVoE!*ő4ɣi254vZOQDlFS lt8h:0e'`H|T ht0i|L{[W=B!BHYvw3]v@Egn-zK?{BuĒBf IDAT %J#c a3wĐ%ȍw?X`H'*s .E$(2*,Ly $?+W3qth1)2 Γ<<"[)IyL_Б r5 f5+2BI_m&> ׏m.H/.)t\i$˲aFzjNAB,MڥO3` dL\M$J(KM2,i93;MOK<'&Ae@[ޣ"5,¦KLoη7/-WS,@do@wD'PvT0:wd\3rMWYB.xͽ?|!BXA5 Y3bYc!zb! zLk~֍L0 mWbSC-ͦV{3fdgck_*{4SނUW.=%\Hst4g>Pm}cAkT km?ذF$P=oW98g_ٞ0<|o/\Ba!*kZK B!BMD')ed-*`DVT$da{(B!B 5a;KP şYsjI0Mܣ]-JX vȏl\4Zyn\pq|>x!{''qMhM[,-02ҌȘl9vR B!VPJ^9f# Bxov?v!ŸG:T xE%5Ѳu%Qau2B = ψ(Y[W$fjI*ǑKл)w/ lL“(LB׮VJJ%lgBm?f1nsȖ` Ij5旽v7@J=:Ŋ-,<B1бyw?|n=-n(ƃB!B mJmwT҆&oG "DkN*sn=l ɫjvq d2?:R2(ҥ4o]gO?)U۹3߆ޖIɽ_`xJWyo<7"/d>v">ҥ/%6iW0g{zdސvVBܥқJS㘕FQ51gubA coHj#PZ[jͺ`}7oznS;/wuSB!B!z˼’JR(Y"S[bwbC97wت9W&w̦#X;quj3{o1^VQ6l˶Iơ?^2׃ -pQ٤< %caV<֭1\&-?}:v؈#v9T!;±puw0ebYWȐ1d22dYwАV;ERPHZ#4ABqqՎKPR+,( A$7g.QAu#|X !p:y)/-YBau!r^šoxf!t2F.X+~XMc ~}7W]2/dt5oME~M=tFY6]{1GfqC(=D9N@4Zcg>į\) >oSr\zp2/K|=f{yvJ 1n-1p]{X[VQL?/W''ZVþV,pr'GJ#x"zgP|ςdYܙNFC=oȣ~_w9 @j*H$HY"^@&(tIJ$JxOF3$>`?Ƣnwt j;'VI{ǯЌTjB$U %f xD~Dx"PBx뻸׎?GEtϒ i|_pIΑQ:y`f$m"Tk ;dG04a77*nne#ƭl@4fL{3ر(` ] ǿ[o6HQ%o57տ{l^hkQGFhZEP8'9,h݃\f^=9j+Bw/vj@^!&ѨjZѨIĘ%BE.~9Wƿ^ :6?"(%Bp{HtEk+ߢU*4vʵ>mɄHKSCjk{EAo5+ 1|CJ㕗$B!O#-M8/jp_=X,o9Ij;õ_fWա=dD|iJ}"NU1m8:w`1Ǵ$~ÊKD\gL-\ޥ XإSwo أ3gRs<ӜN>֕;w)0auWL.?v,#F]\I;nMҟb0l))%-!W޿ĉQ=!XOk*x}gtҲ=*h %rԔ*kn!h//ᘯ,9hI^4'˟p7&{rMK+֯B!!S}xxQZbx(FHGv>Ћǿn?2χH**K$ө?а~SR9VFg^Iԏ?0ݭTqqI 0/??ǻ[}LbaF'\yѳ7D'geBQa~@`ԵW#7`^e J!z&Ġ<38lM蹢+N6~z}gR5BQT$h4jZS$I !T'z.aoYkϚ1-č|zId]ٗ4#;F||~M&>v^oauW[5\kc.9wBwpᔼr{?_1֏IVu8Y躌kS^z)*`ʆef 5'QJ*2~b܄\h!BoX g*LF}kjвё -|pmݘʔ5ٞCfcз)BsAv!H1ݚdIQ  מg`VgЄv^?z2wgfQǎł`jPf}ؽe۩{WQmWRͶL*%̚yZ:B!z|jc,械 &T%RuDEbob{EyPIҕo@Q22YIUv,zG9.#_9`c|7eſ_PtWvN.]۪-Xξ.]uW`–7.35c[ [md:Hw$RΕΑnq93='n]!ycJܼ^^c^Yjmi4VB!Ytz?]ڴ vߦx/M@uգe験ה@ko"=Jmr_jP?Z|99*ǧz%t|G˫}CY5q a@` އMa3ǎǀ٧AFw;N񎺽|)1KC## O=B-h^OnǻT<Ϲ8э'I OkjP&xB+TT$H0fBSG1gVwX,!Boc_;q+n'KnHUg_H|8;)A0b[ü5m3yɲBcmhjS./[skJd,/U^BuRAT$ݹQ'+ȍkͦ_1!$עFCKfYWTހœZH}pd~jk"Jw/{y#q]^HhgF[4s-@JXS\bt77{8,,,6Eo;y9xX}ԳQf~*`t4OOg8a&ZB&:OAqyDz!6Q~7onhFeK;LHWcH^wTCK/ߎ>f.$eĄG9zycǃ~.: \ ٣CW۳ --vL:$޽r.  R.2c#jhG?*4)qe\V=cR.Mu><%3^" , YWhWqyUn < |dRX!9¤6E 4+'1{߷شE9:7Zs#Gltǯ~TwCUw ܵr{DqAw'Ii`n'&/(#|&ffp)= T侣G; }D<:&svf*!r4kcnO{#m|ZVH!cj>UHv`+;_9d S{r,&,ҋpLl8&6~n}Nf Ǫ于>ԝӜf~C:rCrD6Vkd:p^N\Oy:*_J\e1LmKߌ0crJHyim?s煿}QJ>SU4WU Y^&ʪgtXa‡F5S7=ϯ>*#Nޝ7kF٨ bD 잾+y 8+pљ[3{-gB'kO# 2/3%œ͒uO TCE!Q*O4_8ȣT_ [Ȭ-f"+0=*-Q)QY'00>}`z@CdgC@qt0GleEǏ#vk}Ldap\cyZY@]'͘r2Gd)icyvfӇyj.5ia! 8&,Q|3==.-.H,ax? }_MA}/ўb Mу\#{tPK$O#U-,e PfֳL ⱇo3\pW,z9jF,7j,&NkrwiB 8530hW}xw0a:z[U.8j?? t6֕$S9t_69}~~{N߼q:\AZw}/Buzⱱ@K_w*\4g}$w{#zjN6~p?3JڳofkWYJ2]oH'n$kW|GQ]%̰q~;;)#@9ג IDATYOչ8ߛaq2UQ=ʚm^>ÇҘ+GF+H7P{;v+p?{^Rɱr7bu;,gM=>Ofյ`X]\ j>т͔lRwNFwX8wEE Ve TW~Bw䤞X[:XdLQ&KyB_lm6jP(:2II%B!B!f1yC,]W4d(EwYl^g和2IFya h[*u3.K.4PLØ2/a8n14ݧ?<ԗN>yqǸE4 0 G lh{$h4< BoYTEwP! yQSb NXUcڿe?}K;\'|y%MqmI~ɹ#gC<߉kO\S:WqpBE1 0OV9izQ;[MR߀ˤRցOH~gIb"]կH`!ׁpm˘;xնx^x^^KIV.ծ]PZ@la1"{dӷ iQqY-fYxӵ'R?sfճ`:vڦ+H?x!P)J,P$<; X'\tOdnHy$A k1aVV^Ćf,((,*AePQnhf8/&H_OCt!g{|-Ph_'L.^ !PmƆZi%5qlyyڮPIbtvT }E~+17XYٸz WZ&T) $I]xO y?"廞/PEI*)P `h*2t/l]{(U9t $9G3b`-ȿ˻\8 Yn̪-IWBeϮ]sH1Uha#OV{w c>kҞxlfC^ס x9~Ȕ5ɢK[>Ix%W}:j{nMNn * WB!TGo"a{WQO~7:[2RƔk'oB`jic{9 hq!u64r޲|^ 8f˦Ϳڲs{ވ,oM1i@M?&ma_y5gQ4-sei*۸2YqYpJT.ɯdn@[#]WZ] ֈ̋[X~?,dEؽ_<B% APnsI!̾cfHɢGX%kֆX0!lCٙk7TRUů\_zefOH5hcVtJ6AQB]O-4'@%01dz|ӮKhXh&(6]J'Ԋ"KEw[ w?7ȴ'RhJxv3`P Tjecֿj?ӟ$B!U Fd @ȿ'+;f6Oց=Fփ\(ʊ #cXY,EISi4H̓Itq[^z f{ $EjCP`D>:$1( :wzk4[ ein%q9 IaVv'C/E=\'́mDW2sTSWؕIۏcL rYM(4HdӅ˄6\<]]?ZH]wT҆&oG "D ^;[1${d~t.uej >PKן5ix c>+Ϟ`%-R)sg a}-{3=iŕ?mN`RGuz_;gbyؗGZѫ|3==2oH;+!W`uM/ȩqJWóy|L17$55\iC]Mx\c+~6̩[D|MܰsrW.kc Mܾ eU?.yGs;gy㮛?֛+NB!Gʕ ݿ"uUL-S&^~b,ʧRyNB 4K9u<>5@1[][qqŹt|`Ȟe5ס2~Bne2Z?Y.+t!+A=: ,a Xw+!WTW|=Cj۸$h~ JҶd/ ^k TO/ -Yػ8YR|ܖ%)*r0uʜoy~7o_̝;u^Zu]fd,)tNY,6`)xxKNT d^Iuifi^RM~AJUӀ7pǡ uGѿ:sS'+*,BFI6F!5$H퐖&D%˸zdol͟؜q~=t² g6xJo-3d[owvI]~ Hӗh) \awV-ssەw`Ƹ3uj7eUy߯:Ylncͨ'W? ^!Bmbg?4ɑe 7>вxSaēK%vs;=o~isIPZQ8\N=uϋKs(3^&%"WuMMwyFq,@X#a}EJ2e %ǩeVv OQ69B<ʆK!WRH˒%ҋ12;[>(KGh_We5l:~TA̗eD^=bھؘg2PIbIzLTXDJi煞 s $0`<ء[9-j}YrܞV~>B!*/*(,͈{Qi=zyYLʼԸ{w|-/%ip޺)I.˘vVT5~JdYγ ejgh':֤f`}IO&JU Sg#{;6٨  H쐭Ybe8h< ˥_S~^=[Wkg\s9tͱú޶QD-h(?>'}6GZ3N׎ѡOt  -gM2?0=~˹OBǟ,\Uo>yC](=Oct&Uw]tq.?lt}ݹy)LB!f8M]iiK_L=ĿDC֚:ޫ4G!eJRS"Q*ՠ.SkH(/9W_oO)x&{v?z#!箊&oJV<)fȤpytӌ<׿j AA!jgD=s*?:St2%.nhܛdYf\Hf\Hs ٹ ^ynBb1Ո422r4[9PF^Q4%aÚS$S 5=<+c=6oIEt2fܤ׷&^j6trKR?DFxxx` K*N%B?&pdMUz#8\x~_TD\sc\||]zְNV|)jr}Pn6na>DNm5y?]wړgy2I`שc2: ˮG<~/siV G>7fY,Q3doe>;e%nzS7wJi"'[ ,/Be<`Y=;)T#!ˬOK/ XZq{ C _CB23ca>ĒB-VEd8%B0aջ Jozr4(*.nWARKդaz H ˭zlb``Pƈ'k0 da;fӽfRؖ^|9_ :j^ fߙjU097<.侲Souq\5ÊBKS\z0;1XVHnMx:bQ5^'\J$n$'RXLi?7B!D@n'20 h,ʥ}`/o]T,*`!".2D [H Z4f$YDii\ YmSQ;ٝ+fthF T*sdf!iQD6Iǟ:p™?}?(HyAA[ LL_&Tw՚K9O|)Bm zXTH2%ܻrZbYaHZ3/Xv:D1n?g bdW|Iר|k<9_9ʡaB!D!PSϟɼ:w4Qw*^B.~9W*vI/_AN5ƣqMUHlcrD~ ;R=|_ohR٦;Gwdd{ ~~kQeׯkKKKkb\Z^xryR]E?KX|VV5r"jsq| cA  V3Gw[1Agp-l{r*lPkxtQ"mk7 ݂YBݿ &/;oTo\ooxcvtkfcg0?/+9Gel }`:xؘؤ4'3=9ˏ-:P}vpp%= v!$ټ%i& Rd#dY'oe6B$'媹b+Kf}3< #vf4VP|gi2ˋ$R)dDL}2͝_ϖ6?B!,I =Jeq\E'e%RYIiAmQ?&kb ^D3-?`9˲ݠ_Y3&q׃/~Q<+Ҕud1yވOOO|6.woPk{b%.](.;W4}+&Ꞵe{tkqF\Ĭkt]F5)gZ=a0e2Gs-ړ[_m=3"#׭5cɔTSl[չ9O([xU3WP#j/LÂA(iho֞֞|&!_nX2y-nVB+g}3EkM"mJ]0`Сy,%!htkY>^0maȶ0Ă@!z'˥R,2Ę%B(w >lLoLJjץk[峫`yc|jLRJeƶflk~6vѱ,Siy./ss[\Lωۃ'n~H: t)gnO]o|EћGon @YJ\yt K5C&MsG;\bM4i%5Z*e*9 #5G'A)ǯD]T$ʹvN<iOD/R)!C4-Y>ٌMPE&Oz9쥦%)cgjؐ;rcڛhvf [ؚ#":Ӈz !B5Nys2s? zĘ%B>Z!&fǜYcc rzMHaF_>@O,nf֥^b?nS"5>hŒV@ur_PqpA+f5pF>̐[n#@f_Y@t U{gɗf3nS7&]([ l]Ng6{ph~༕![ IDAT#]LQEGfjn駖.8I8{op/?G >C!͉9wsp˂>>hcmQ槥<}pF ׭ml,xAx1"B!z1l1Kz}(􊄓+ΐv=n!P[={)84dWJH N,O1z+5`EBC{ǒRQ9Ƣ2=88f[{Hji~].ξq 32?_V:S dQ[JmȀ's/y,X0֛&ؚcPڒόZ0*'X \}:t`&L`{( UZBA0p?KAA~T/*_F[[E>Eʍ@U "pson{@Z^8uX "xW SYunVFct133T5lQOn9]@DjKFku-{R >~1@*ΫHY{}"[W{Jj?$n|ֺ$ָkV'lEm#L*ZJJJtemX))Y`!: y=z@A0f  /烇ɪ Bd '' c@DQF % u&QLvd~u @Vrl+F\%;SX K^v]r6βrsgC5^`,[;O)߻#{Ԍ9Cu%A`ܬa=̨;;"$6LQePy IB*G=6dfgV&2Q  % ѩ{w*#(WǑ}6624>h_O  HG#u|'v{31GBĨ2&&򝵨@qzhf=:Hh-Ⱦt@dk-~>e -d$G &OuP\eE'U]( 24A=)~v"ۂkJ8Cb+ے:7<qhH k i+ zсq"$GhUӭ5>)#]Of#'Z h⪎t/'7GxD+Z$k ѓmak3Y9J7Sp`AHQW  HD$&3OgDarɝQ- @"HR XK9KBHbBi֗&8TUtX ҩ9RgͶW$R2CUYVaE? *Utm882?3 4I** Xg .K3;HQH7g&un'QNHgvȸqu% @ÏՋ;"V ˝DEv||V r:;KD} TiTEyΫ*!$֨M{4hE?oZb4aq٥|i57+W^u>P@v.1dF /nrWT6KVz?4}D%VNS,~@u迥#/<%W{Ona>,Vi0{}1<%O4uTj0Ǯp~Ǹ-O`Uͮfң7 s3B瞂u+Z#a,hbo Oj#Opj7xamNϕI>Vbq\y7RMIVm4J[%s?%TZ潘=?[A}W364tՎRt=I=%?RHitѮ5勵؋ JcCw"^cd>xDz]m2CS.:ly._*YB!;տ7,^8[2*VN.g/=n)U 8νS'. HܺtatuUeno}KId>5N\!lrjZJ8 i! ޢ:t; 륜`PM<߫co5dhskFzSҞ4} Tr iD >!euz+o8`icuD>?fO5Vn~'e9k\O{[@v2bc׮]v9v442α i~W(do3e[@ .4ZBA-Μ7<3qoWa[] Xq$ux1wFc8/Tn|:=._2mkEvTe\'-3.*:f ݖG#/o~ۢ; oe$GޱWܽuap = yJ=Wlr,iU!ؠNۤTi˽1wp)*JV[( H ts]z@V&rR򼬌XgE3Edy]@!/C¼ܬ_%p;4uApح[cߌU! 9d}7m$$7'/#.ayoJ3ї|}yj`e'Wv̽-Y&3VW䘤r @U/o{yyuU5e9>3733=9"\cFEKKE7?xb}/nPyox.Hap;@uw%t3G޸/9*+=$FMHk`1wUAqN8-ŏ>{,B~{IT~۵05YR2xn=thi=9/}sf_,R> %8i {BiI۠%A䧆_5-''/ɕWR1AW^Nv2!)%"AZ#XȬWHȉːgXv' =]cI`=9Ivgs8ٓRt^JE @&MP".]?^S&þS3]>Bhzt @fE*;GLKKk`~KwWeq/5ׇ1tx*ך͑$ѽ+ u@y)6dbs[tٕ~Xj_bݩ)UMJh ѱp_vL~A=\7aK[~On=i>$0w stO&-N]ey{ۛgkBKSBpw!K?9C3a2֗OW}jZ¨WZˌ|y=^3q9Xuԧ/r1ٽ4W@u sAuj,ל@uc//$eҚ ]ΰ_ӧ\T M{dk{sSݿԸcLZbIϙgHzLHN.`Xd-r }q!ܣ`oHos:塻ڠ%A煓7e5[؅UyUjtEy0 2Z+ڊq}-ƣ $AUT1PIɈ9n +0Xџ* ͐\=u{װꂿVy3P>)UEʪ~FKJ]*l0 ?eɒ@N rdY%%Os &X̧ ko ea!rR?sK_vZSϑA A`TzuRɷ6CGU:iٱ@A?-VASE^>H@^ydŋ/^xƔ` ! 5Pyk4AW'J9cߺprc;7>*9meF5BKC8r2]`Ɔ^gn:;R0,,-ZBA~eK"YZA^ZJ]-K Ke-cNUEI^FlЧ?r}BI_sZcLTym۱C6K,6A P :$_8@QmUjlbҵKf L6ȈSkd*1z 'D  ĺI19DV̾ܿlgčOsr#:֪.uIj{ꙟSTZT"dwFѷ6:Ԥ݁  ͺO.|UN>yi`3'? ۸ξ0\()*7@wZv5Fx,wz͙#=NAi,ǿ9,'Hv3׷2"+o4r#<@1YnbJۡ *@E¤ $A.?rd(efKvA>!#IuKsE*J U^p;BTVZ~r'z{*־ *9Q.6D:T_ 2oSiPv PĹhA9[htpukڮם5?)0%jGjNg`s zm a`  N]FF8?Tv>}y+ 4VL@TzPP@[k MmȌnCf[վb + b{ a_ ժ=] hj-! % >^QY% nþn7bUX5ߝŤ3LgXUUjsg&ā9Vs75FBI[tSWXFQ*zT%}r^<*-Dʜ0Oe MyFr|32r r ee5mKG;#X{[LBV٬tu/99޾得Mj>=3i%txYQޟCss J eu;n[^QZnưhV/*O|oʤ/x֨ųx~Y̖hُUf׷z5nC%AC.1L>SAh]֥uF[JUd5[0pCX{6ⅣIO(*.Rj/Kcpax'j& du|9OlŧiؙJQ9bȫ,+娂py)ebdxVDd9;CSόwbG~ uLTcf0m^AA [f|!p|]+g 7WPׁ?ٵ=/+W]ݻ2XiV5UdԈ{nv2살VI1jL=%)U>kkBg+O#>Pc| )'&v;}ǗLճ6<9ї{8ާU}~WiL4Xѣ :didd?o`=Ǎ:x]k, I5)j\czwA|*ho޷v>*/PRc) "@zTT t~q+~M< W>7NCPҒb )Y3|~-'M6ܽ՗G^e .YC IDATI{fJP@hA쌀7^f>V੣mEZ=¢έ`h:?M!9\`|c+b w"Еngz(,/Lt3^%%;q3̯H#&Ҽc&.T$&f ^>z%7^~jB~jBx@`ˬ*u-Πb8F"5׽G\)G{%_hN*NN,tY?XY=zk(RRB%tۇWn*NĆЋ?STzӺ5eC V:ɡ=Ӓ~O Y:GQKiE.K[{-mWy<͢-ܥkU n=Y3稄>כ<^z=WQ/39d'f*jŤ{E/ <> 쏏{@Ru6~/  φ䠍km.oD_,6Qngìz dj%EٴG7-”*>Tp5LFJ]8O,w1PWДN1D(de8Ij~Y0` @.,- zB%IN(-m_v+yegH~>Å+ǭ{%R]p!f[SܛaR/K F|z1gxJ$̃ vNPeҴ+߽NM?[*߹#|In~uKSrj/L>hL@ĥ$:lDuO5/ +t/bù7xojER'&Iw?ۦ%A䇧2姡571p9<VNKkִ$* nyanCRe, (Ĥ* ʋrJ)1iEȗE`dH"Pt`:Y& O eBS,%MbV O~[ހղ"ay:-.:";p $ty2.BW֚Ҏ TՔ+悦%zJ ʸ-3q^9es@WomqGkytm(?ō4VL^bH@dm*珿9/ v0v5bK@%t1Ti"~(hT]*4xuOʬsYW =* kBHsuv=$r.4 eK7 ɮn=SLuO=!ه#ѭk{]>*ڪfi˽ H xx&*a{[&u "H-K K=;kR9ߗXI7f?^E8ãH*UAܛ NTDsЅ'{-ub9qZzhԘhY?lyW=f+eX;k[^Ϻʼ:Pq;b oGOu+mҼrk^\{uYv-*YC`|޻#>dKomYn&LJEkwK{WoJϛ5xW2_]W,Ion~*?%CD|y=wŮ.r]mm3YD/K~ݧR!a:j?fCoAvBӑiBi[OEAv3l-0}z ӗ fB=/n{6 v MALqA=?=S`K`)P1hBZ)cI:t);?s_:74W+K i bT4jELOv&9Ӊ3Z ܢn7^$گ$ }db9zH+5So Z]fqRj1^ƚU C JLD3zIEMu hD;4DEƈ",~gdp7sAA 5H&hђ/x-z=+]>U9,dTKoIuMM{p>}`moAVQ>۞?Gh/-*Iwn@V ,$+'^$ H^\ Ť)gn|z&)p^:o&y}Ű" R5DZ0ڲT-b:r3 EJM)HO/bIU 5yOTl#UTV4dwPcV5 ݏj Hqa!4ϨTVPTߡdk dՄV7ۈmQ[j]1={ke|-K @ِddj0gY٦,6KA~hYi.V?b}6:xn?gAA; վw$T欙B& Q;F@\0ֱ#WR* {W..FFV Q̇ hšfX&kGHHi;0w}-{󦝍kū޷\qfs 4">ďP{vObJT\d2󲲘:z]ȩ)iEJetRNxy_!mlaNgGܾ״]pO 4Б"-ݞ%vZjn1]ES3<2nݶZt@~)_KzDETԻ[AmZ16KA~z,szFA!(lted|{"C6`@l뿓]]o߸Dyub%  H!FUN<K0黧6:\iiϭ;}Sgϛ  B! PMyⴔ!N!0t%peQaDv6Eت̌$ tUOU`T.Mm6V K`s}=EJGw2HW L_6} R]_G})HeF:jBϟ?iׄ/&AAA5aZ_)+Ŗ̯f>S'xUǬ=2dŮ},|JGJ/P0S$#);h9bV-C=<ϽN;n trppNLQU+~såFSpZd).XAinB_\nYG)sm̒(t]ܭˠ|N|zwrQ*Mu=ܤu֪䰷Ed^f2X5&!~AAAA~|~[`@ Ϋ1(9q%/c6|G{lWODp fu*I9_}^?~6 @Tϣ$@4Y}⏞11)E,>T}x1Z[9ߚ@I#첯>-IJ+EgIfM$zN=j `BA$5ܔQ[k:"Mn(J4E|Nya~~Q%TaK"|:C @NfЫ'a ЮWUSIko6V(4'3PҼ䤬<&eqUm8 8sJ,k]gNX+Um*QܝP@ڪHZJ3/6禟a/_K|lBgt=f?=H}xʛpR'~ApYeE9elyFv5hʙ:J|3R*sk;ޮ ŕzHRR$12Y& \(4g+%?pW_bҫt _xr//QtG^po<" *%44LXlNcR;}qY/z%dkh-*#}tص<SWn_mr^=ȧX7Rljm{ЌUK.v+CW/6# + AA![O^cW—URUV7noE]d˗x/*"CCO[@)+!O8QU!Y)M^ӓ"*\)Odr.-T4mE!IHHNyq*!7>3'//CQ+={iȶOHUP5aӘ*ޙݪ dO[n!8!#//''MSf0ԴmI;֑zӃ^ ӺhuņxڑF 7Æ[Ţ@ *j%[ӕ[UUϪGs'Eo^RDedTB{Y/_nbX-ڮOL`` 1li{N*#,8Ed ~'y" jYVGy f3L,A~>ڲ$Ŧ))L>4 ԁٕONGמm!+b6P rzWIvTPrǓi,AA_ 3]"4]GfA~QQg{c|mݬBDT/ݾ* jFέl0"#',tS_NNu ->v"%|N.Jc7-&f%/^;hYC6YVܺSt22Y)|fRhq?W IV/[n :zA*}36wvoh1#Q\Q.uw5Iͩ}9h}:"rY#"ѥބ+I<[]GˠbAA_v{ĵ7qnL>T5ʧ듉V=Ys%v||Kv>zplPhtttQ`]j)w>z|&w%W.͢zYˬmepZ}a[n^5@Pw[Vz,=zZۢ27GSRqO?RFܽyK Gn w[4f'uϟ::Q//96⦯&|%ǖ9`tŪ_αpe><R3Rǣ}]T-&h˽VI?@'􄄬RBҚqJC@AA~RRӘ%,0>Qb^X@A<<w;]W =2-ƪz~D˽;;KLԣ߭?$ IҦ(I@\A][] Նϝhm2t9G|28(:K"%DϗI'Z8{]8.R[T#s4!U۽ݞCؓinӨ>%s7n7}qCǚ?NʱO^ 1SonN6!E֦ Ŧrl7A[ETޝqoߍ~~% K}|k3"ʩ՚,+=g''ew=f<7)A\ǫٚX^JX,r1G&Z>2H,}C /X}M;%ڲ$4 HZG$f:. ώz/1Hr3.M^L7uH_V3,1+c?pUך)/#P4,7'ZH2*:݇-۶i,jAAHM%dh45#&J? I8A~]wEMU2T &0g0Ap;? [,ʁ,@iYK~C IDATx3ϼ]%WMBI]Ҳ*ƃ=NPz|VRB}IN'\; fJ3m%r3 V* 6կL%3џl#{͑ u5XօdVU%BOqY)Ez#"Yf$K$:Lb47K z[V8 %&^kmT2&{D(LВ)*.,L=j[VozI Eq~AAA&3|<.;()g|ۣ&IuL+ubvhTyJ:eU-DO]Ow._yݛ}f7~*|&VOTfXTXkT#ζ ?0eϗp5wwnY950i`sGB׳{eϺnrT{jD%Ko *"B's_:j+}fÄՏMT:;Vtq}+_Ն=4á*}'J.Ό |T6F54@eSF,se]&qПywYz &MX*X&*|VVca%}4DK{RJqDoek_jӒKsS\ﳥ]0\W Je9Z>MTM~- )7W$))Eί"Ŭ&EdbXnwpEObq d 8e:c7<6SoN[R!   6KAŠGOYʧ(~'HI^N_Ea(++3 U49Ǟn6ddr:vt%6vMLN~ޖioLMBwfVey<}#b5уϻ`P@R5F#@~A[Mo . 0B/ӳɛo{yv?oߝ' 0pkOvU%55K[pK-綝Mq{!`s)g]I^ G>5tB@@V/67Jt:`ip]ۉ Şp^%^Kg/]Z|VVc+ʈ?:w4:}9tUCM Der&.a7=N];bS^ D4ms L! dI@REQx-]T׳YnYW$/k4Mm^us i<94!+$z ԤbDAAA: ȷ]İqEB^^ëEY=o2cVs{pX+;~uaמt[k*ǫl&m8z_\۱mk xM]5~l?^yԼDOwMlemIzsºcaY:l,XI 8ҩ:m%SSH X) RSS[jjl6$"i?by ,]hwqQe}3L3tt"X݅kwwں.bc+؊0@T¹{/w=nho5Ud RԲ'ܔWV#jI+ſYU_72)^vZ4)?naQ^uf^*D|QE+9번 :MgOj,F Νuxڠ^g]|,ңV:nn`A_:!_ö=wjyF\z6eUW/K_ 5yUFN5^_~WM_2B{׆E;]\{۹ۈ'ӻGlJߍ㖵1թ2J_z8s\954+~$*,X;è*b[pQ zIJO&7f,ZrG%&K>'FQDEUTr=-JJ:J%Hޖ~!9 ˪%y0!T!o|+X'e:hZϮk#EkK|foٕ%zkktOפ8DCp-n1C6J!pM/seTloOFP |Z;.:<\fR@RɅco~lm=^>F/*8ߓM_$@OKJ7>>v∊ʼnI(ʑˠ(sOQdӧ ֥ҬB3V+ʛT*+##W>oLj~CI2QMRC'㕣6: : xsͬ; S,ɽŒ|E5-uDv ONаdi^y:5e~-/ҢKbsv73[U.`Y ~~~j1KJ*oLֆ "*IUpb(jPF¾跣)> H|B vS}DVq%͋>&m"ėj,k. mJĒ?8Nfx-۷~[#0\}7ׂdA_~5o<}K ;?<+vn.GzYCK\$+d=U9)ZOWulml8Tӱv0M9%Z=s<iXNRʵ`)N,)/=>Z2fIib/#}3FJ +^\ %6fA߸$ύ59Z]l~5ptcxe%_蠋wx&FCuCKG5cmxܞ5; n=Ʃ*T:VG?w61R6K՚u8sᅩǩHLQ\/vnc>r NKZZpf3OA_yPo?wO?.S24oԺx/E_%Gm]V^Яfy w!e|ܿ 4##uG >gn{6rF*Vy_BȰrpmHS6py;ܧ׎h7<_ܭbG`I)DRqŏ }|֭UU8W^i8y䶏Q8Z}l}d=*'_PM;ʙ*J{-&nᓎ@qu*.7 ֟ߦ~[}{>z;FoVwn+p2;"({ue9q\\}@~cG&BhE:tFkSvCkԴ7Ul9;ShROcZ%& mmO[QK}f?ʜ% rr#@msI ?EAD4Wϊ`%g˺r#=φ4wW X@.xogc)3ߝ\6Om~{{.hFQƓ=;70VW*i[4BD^9dNle^|:((Me_F8aK VmqftN\%KgK-2py:9r8O1އJsR'G ؂`B'>g xOܞv@3|.l1A6G˶i;Kԧ'?U*,&=w66635Ƀ ^z_:DlO>_96tzQW>֫nMvIuh:{uxnլH--ۇ;v׏ԕIu+~ܪ@F큡w9r@1K! :66|wPT !!!!~jc?|}ͬ.ߺ{(3|^zx(p.bވ=>q"x]&OmbNzv"1\ KK>NJ-C||R'ꕕ#Sܵ ?ṗP(̙ի3b9@QT*KSK26`l&O໔3"MwwJI_ #|}IIIDZDh4xժeW|'E6ЫJd֠ ~JXҧO7`Wg [?WTc^K¢^N& 3ס;JFOqdk::|M&]~ -؀UKYVV|u]NQr*~=gcSmةo%%v>7.cnɈ/ZWWvUWU׷j>|DY閬̕շ>xޅ Z6lUOScK#M~%"8, #3--W,+3SF9yh]kP}^;@DA>>۫eRQQ!ɩ-^VFF.ແyPɩekn{ /x>0k]+3XM]9OdVzeGfuO½^{[ͽ-zrk)AXnzsj~e~OV4b^yKǜ{Excו)ͧHyIޜiͬU׷b&Sl1T6)EcL 4dϏ۹{;3,)UKDDѧZv*8X~JJ~dei}TY pk>Gx~AڣTwYjj:B2%F|70f (jY[5عzDDL3r""rmupCMMRlʡu{&7فA֍#rul[^m. "j݈l9u4A3tjo 6̐:NIBMU;"yDai[=*5I9P211N[=ٲ볭~6cGŵ0!x5yWceUN?xAި:  _o^ͫC;DM3p2dD}Z/t ͍"?fzWڃp~ 9ߟ;xz[2H4#g +jD|\a`WAQH=s/ S lպ(evm]PC xhSg6m\(P9,G}kHAݝSz9hۓ(!>ARӿsDLp@u'zi!r䚻5Ә?vd;<̥z 7WLz1Kܳ<8ORށ]?"iwOXz!߽z;(D7 7<4ܩ6ߟӏG6˜%T.>U0$^wfMGup67r^\i'$@QA]C34:4@_y * d,NFCS 2IE @Ȧ,O}kD~~?2k牫w߿p!Irs ֥c̜tںQoepKc6ڔ}- ڶ{5T2o+AaODs=:eܲʁdò4|0IL[B%I F. DDq]l*GS)svv6i Ny^RUҿY7~ D9{uz8"/ bxjiGz,-ll` ak}G*9!r|b -|)[X_*IQnN;Knr\*[Q8_]b˳qDG/>I{6cM{ZhD3CF>{A\mk<R4.!(5ED@V M_^ÅKIn^t o>C)#ZYi2#=Tok/.a:}˦~+gJ%ϵEc-fZ8'YwEÝv1ݼ5wqa;`Db.Oc)?Q׽zfc9Mbq=V)tc Ck=VCC~m©eQ kI˻XLj:t9škQv]8}SQB""NNp/3mAϬf+3ʬwd6橚 Xc܂>[-U^۷D-ZPHb߼Lc|INVz»#[[[2]:|<^kX 5-e/ǥv 4UY7.X<P 12ns\m^Ch͚cTzh6fNb1o6Yx!fKs*U:7~78{ -_sD"\E/"jn,'y,U2pp0T b?++'<6ϟaIMy?|-a( =L[+<?EtX@DCz( J+ڟu[7妿8'wY2nx3S|~,<2MY019<=#=9_A+_gǿ0u֩hg^Ԑ{E,W.Їy3Y_.^ֱi>mwV*a #R|<,p$<97m4CFհJ̨߅&nԟ[N7eeхtP@|0f _b'g(|7r2WI aoc9;Q*;D]lvQ C~1Pd))uۀפد^%)02OU!'onj9iPϣ&Y|0f ψ ) -eĶQfZ:u$TN,\ޫAw|0f 咤 tj~@0') ,>ڣ0$ILC0f K {:Yl`aܡ0 DD c@Dsa!fޣ2ύj|#}_.Qggwi`)?U-y[ 8V?ĊxHWHvK~aM>4g-vӣİGWGɑk˵A! ety76 "Rls' a7x셿0k]uHS[>ҵŔ w,f9j~2'+ui)$d%rY#J'"8-.j&ib/#}3FJ ׫YK{/e4{Zׂp_:f+quV-5d^u{9޹'V_>e?u+oӭu2zR'";isjcGwT$"OwȺ7l:mg_@EoDž=Rl'G_ׄO$UCYĤ:rɖ=u^m}(к=f jyUwq߽i8b^NDD7WEHKAur,uZ3Kc/]kWeH[>:h-vCun g yf*ih0mbZ+ >@,Mmٟ:QY\+smӄGK""R6Tj%#:>, *a&YO;T۴q#gY|={|v(HU< NʓɤyP/#v6HU&t$C\ 3hmE_pvm]iX"*\sQy=z5Szݏ_ Wm? -1f 3_Y!`__aE!m7]=<>N6#=TNUMKb;nIrvU0B6wX I$h|I%,u;xGmbhXuc&_h5yY,I$R9\sQy'%Q֡G?\u("Oa'w`dU7LwT)+%%efJj]Y򧝇Pt߷D8x'SG[noHKM)(6qD}d? Y2dEÚJ5R.>wfMzJgdV >+fjHUvŜ3.\KMNA))e6gggh69Z;9^ z1ڵ{姮V(ݻjFYYիJe+ܲJ`2,E_ w,i{ 6FsyЊ`>vf7Wӳ%*]oLRjɯ~xz©3{8qB˯4ڢ1Y{.߹~pNڶ{h穢GOTIopWy xU^ .3K0<{7{ⲟ.1u[rp`>v'/BBB Tyk< Z0l9{ʹûLdXȹ)"""""ޥr"#"pXdØ%Oֵgݦr-8wbGiz }\vSlV&v!ӫo'޿FSsqژq{JwɎq%'r=V9Xx{YߎA/4wqa?on#ORuu6Nu,CHUSzYW^æ?۽kCRܧ7C8``৤aO k. mJĒ?8NfB6,@gJZxtxSmpTƓ=;70VW*i[4BD^9dNle^|:((Me_7T-ud0XͷUS:k(r. }y:9r8O1އJsR'G ؂`$g |or'=U'UWP3}]Jjf.x.AC4+rڦ^ےrMޞF0*fv_%-?h6mgGJe٤pvtf_?ypAKO <:@Gw>'҆Q/p zխ8)N1N-[G=}7Mɽ5@aV]➔_ ĜlYV*9u}pԆqN?~w(_KV]6{L! "M?hgO{mg ;oܰŠ7Wcʻs<8VOq;xVR,%ו~o>߱~,ԵO[V4m {ȑSWBwT滴8rTs}<b{<~yٌG 5Q w?8(=][9ZRٳ,R?y 9}*hP:'"e$[N&Do'uЀ$sh-))u^Y :.92][|ت BϜyY<* q+Fs+H/sfjT**E92߸ϸE5<"#?f~˰]x_~QnIy&g|C"U/_Uf } 1 hE+> 79Ժ{uQV4P!zubI> &Rnހi-adfƭv;w֡=mZ '19_S)yv&66nlMYLe%)= -ayg_MO Y|x&y#E2|~23eDg+OU迶^/wo/c||IcW'^5ˤBO w"]]/2rUY_'57!}-uDDٙpKfffEWޒMΞ ! Rk`͘$O*g~ވ Hشwzx,"&8=;h$0w+Q/_N-4Ӥ[Y禆mbT. DS5}ƿ$^n3t<:^H@F_r-eyr}{N[ L_h6ս3)Xd29JZF*LO_zƵg/=8]( p=HYEAQ&Vzz:~ZKS69{+p!/Kg哦t? WvROɋ{+Z='3l˃W䫨 b9R# Q2| 雄пNıFﵔy؂G=_KD 쌴oe5=}}O\޿% K%"ܔ缓9Z>0,.6g|k諍Y'{`592IvFZBDjR'-?~wGLBKY|e"ČcB_(x=&D&Oq"ݤr膏/7ս=}'}qQFV.qȮEKܘ(XjE2qu vl7x.}{\{K" ?܌?Ϻ?HVZRٳҗ% Д\NOpG秛9`ŭbgaOѯӜjhN-^nݺ4h@i5L|aP`#G"}Xu7;J5?fw~2ҥ^_v=͏vo%_Uk25ִ穖mpiwm?Ԣ??¡_^d>ֺ)Q֛aDF_nKﶝrlOjRqމ2$"1ZRnat[ݒWih^ةjkKʔbod~O=&)Q`;bpmBܤ`hn=ȹ=YNؼЩ!X]) >u8zl_. =$YUSH\2g>KC.{nfrퟤ,X2AݾZMz]4Yr.>k IDATqڿ:MdNZvtۯceoo)eD ?LKl޳ͭM.ZiGX>rPsra%/ifxxĹˏw+0MBZ|#rT]6~;RʫBNc8L9ddž5Դ moYu5Ү%9{[*,̐vd2G쓋`!|YS?MS0lԌqc{lgTԾR!~ Dӳ-,KE<"7DU.𴀈pW9L#m[`~%R(l"~:NSR^ o)ZS"j$ |\~ޗoii̊~2avDDGO##";#=[w1T($= !+xBmiwz, eb-|ܨ<ﲟ*n73tR]I_o܍R4:nwyŪݧn\x~-з6ey)W NJolP{Ⱦ]u^lMv&.[2ʩEp]Wxbzڼ;lEpCמ^j`jcRGwdVYrTYeO/}РȵN8eZ ꆶ]'=wLcͪ%9{U*8#OrsRHCY 0jD3ۯ]Pt"RPmb繺u0ZHED,=oq2Sww5&Q(-ZyKaU_]ӾyZ?;lxkG$;+8GFc멐W766[C:6\a MoxYeCDrOjvBSS;'&R6ԯHmNA^'q u:ny5Ajܤoʆr)&BKF,vǴiOgDR.gyWgepM{,=cimecc\;rmUɩ 9;&N(nK^WIJv#vYrPҏY_}[-#"uu|Ũ~9:JDծRK+ܯMٯhICΞF0fT>R&C 2I*%ܽC-w]#MgeUW.9AobjNu4)`VSϣתuEES\Ȗ%j= X7ZhWT?*bE >_DDDzÆ:TCn51QRb*0 PNrK#Ǽ>NMVyPu~WDeqMmn=/Q*ʑ(JEm ԈHǾT U>AA^/(_SsDD|:gvRt圣lq:pHU!ʒL:N$u/ ".W|@Fn?ԘQ;zJ osPd2"""a`= JͩR%dU_RrSDDDu,|Rb3L\g~*ښ5ާeE׉\K M%jR%YsFEGRr\mHS]%J|xl:~QJJg瑡GwnJ7ȘHҽ5 Ct-󔩂Ɍ.&3Hpu"Cqd [XaO]Ô(d8""2ʩczCDD^uvvI5cxލ͍KzD9cJ M%%'}xe5z/v_P7 JDYMEDED$TTD߯]jpT_iEHDo38=fIRqNFjRbXJg2*( (/\x''LGR__U438}+=3[PZ3}Ziuj#Y(MmG]|'oÛn=[Ep.ҽr3m IRQ$RdqDa:{<]qO_-T*""dIԳ2ّ."[X);m‰vJgavq Mv*(j!+.X lߜԨ $Z&ʊYGpn'ƍǩ NDu=UQa֑1 :-{Q»?_6mw Z4HDC$lT 7"MB{qw뷬u%Iڕ'16 pmLpyJjm^E*7˯,-]K U("+uDc5K7Y4a:κK@)9'rDy0kN@ڎl /" kՑSeṇSw~F,׿k&S ac*hHMIˮ˯5Jڄݱ3T g=%UE4;υ&Q͚6پgjz\]U +-eV{kPU,:rEˮFDF&Fe~ԱrS[-e$\gauge $5Q\Ҳ;%I/>|SW"snKVkQyl]u|㹃8sBP29jm^H[[ښ6fىtg'Y|rjbXr㩠WLicuvfz̥*[esrR:a=_#5A{+qv- V5WGW]74;&edohIKHDIuQ8 -WO+4ЬQanO.)0h۴{Q$yoVݎM=vQDD =aaɥo5|Cϟ! 9~SQ [#$,0tg;}fYawM{kGҴ2`YS5 W#_UqIKxa3 r332X} ,ʪܸ_')!1%5#3-SZ`sy*Z:zϹs`v7$|WYAlp}JRE3x9QLC%6 ;yry^kz&# "TEQBPmֺ[⨨XhmTORqnq7`# s9瞜{I^nQlts}έdP7z!\hr4tdf*֫U3B~t ״5\ C̲ FYg)"` 3B>',sBZlʎ8єl6[n9cϻFDDYiBm<%Oj([r*|h1})9duF%Tld;W[4,IOVٲیjq}s.-J9~jJ7 H~bOZ*C$ l{$ps#1/ZQEXÂOzZ3M, A, ""s^`ɩ^ʞtwg`_Qj _5˂Aԧ\뾲̵J;"Ƭ=oϞkxl1VI\_HCAr*f)XCȹsEgνjMD'7l:IzuS~inù{T?Δ?'jY_Mk6"Hv%#)n|O_gmKCc^EvƅybTdfXBp!"Gs;:,moowvJ엻z0^|fISEIfHWCߒL iѷnimQ%GǎUD$L/W9hT1=i G/ljɍ[Uˇ]g⇪-[һw%y#ѥw/޽;Qڍ돫`7tVj{Duζw.d64wy>QpjMPϳ*gX֤xR)@T|2 HNUOga Eſtu,g+'m~P50gUKJJ[wIJ_mf#f{dU*UQ3t]Z[ED7_q9W. r32ʲ9lZ[Ur\|EWV KJ e>_,'Ƣ،uuuRCSRzRv;ݬ eddd0ˋ=y{ ?՗C|e2dg?{hdJɨy7lױfsKSL6uFg-6sؕ1;Ԟs ҘC{Wry_~B:]JM+ې*CZO =71[ϰRW{O`8Aϑ:wd*"K90(;5;ӬԔBRՆ %iaH~⸖X D"Q" 8oш.[o%v{; "z~avSk߁jK?4mh88(MCL$Gd<+!u55''jVbo=wٷ%" JԢ[Uhfgw߳yZ6.V^_pɭ"M--*x.OD4n5ҕugleJ(8mru$.,qʣByuFY<@$~eܙxt|'Kz߷~cȴo̰ ] }vFա  Y@uӏGnX?s\ˤdNvHzhnG*YRB/ g-aKNY8|Sٮˏl+t*ΈoUUk=~ !!VF}ayW7_;Gpg#2 Nz.9'cuy [9\K j'r6v01r[\rb]+}{vي4'{NTgϟaǾֳ[TX2G?N+l%Cҙꊍ6!! Kz#a޹ '!~fK=:XLpAg E6\ז!Ǎ-pE>n#3@574&tm@ f)-1,jDD?r#iyʳ(=dn:j}ps$r- -m'OkU}*y]7=wj r6qaOo1;y3u{Ojl<vk_-8dwBϯ=hGNގ˖JDDΟ%k`SϬ(Y ٷ>g"RDD ?m݂S,*PPeض3u[[VVYSW{2+11_ڼ IX9{0H#ٓ S_Qw6*DD1 Xi۟:~|⟞ƭi9gƨK,dF5߲ߐc=J>E#AnQu+vۭnإhC1K!^ 儯5g<tG̚n^6We4ۜ /_N"K "ݘkW 91ODr QO%l\2>!AF%|Ir-{Pka}3̘owM&YPGQFTDDDkVJ ""y|}x׌k?-̊.^ z0>}u^醗ѩ/o_:a3V}0[gϻ.\[FH[AyT*]}p/ \ݵjE$OH,Ү yV/ܱyig+_斦 Rlx^ۼVO)OSx'ongײC~vDWg\PdVhRQU$){++=]H$gk_ivX.ޟ潐hR6]Jr<h g)dzEAC=No⨄-*L}.ON˴\g)=`]P׊ Jfe*St~ݜ҉(I]kuKDz~~5G*g.^IDBXȾgbC,Z 'N9"*L:u%n5~@Dt; B"&$) nvW)&"Y-}иd$D4s3GOXx[d핾6,& f A:Eo԰f;ϥ3Gt6-NgD]ĤGoߖ!)5rb?%oNL,ymimlRӷѳO6  Ctkü,]?"+g:9ѕ?fn.]ѺUN=fήQw[vđ[/~NZPOkJo!] er )fsswUic=~x{DDnlj;TͣQo Kf%%ņn bQ:VSg}'.%hTSL vpm'Kmѫp+o C.`Mk]wWO%Nb׊ Fq~̫dM9#f+PG u9ԘI ` _C˗}9I %z]O)y;m`Ǯ7il:=xȘ~n+X5o2 -ve"稬3?߬ ga-O=~=JMo(cg1IAq󜣤=/%;ZN/)gbr_%"0[aI-ə̖gԲo=;&UN"#g?Nx DODEY%dQno>joV̅ ʞ6#=K/>+deKI߿/+*(IYKoJj2䡎˺A?V-دܖT.Y˜qKWNKh|Q,J-3vxڒU:mzq<BwD^Z٥ʺj߹c[ۊۛ.mVU]MmӁ'y5_%|b-uSi:%|[uEɏ^ǥU,<ځNO ᰪ@Kֈ2Z`T)q\+K>RͽhьED=K$b_{dЫ'a۝*OTK{!e{QT"յ,O{+$U֊2Dd$՛`,q"='wN$E" w]̠ b"0fpR-ӻ0VwwfX*bLƵAa׊^KЦyy^P=꯻ZΣ:k^>xdU7lY|K5>((C9/.lzὤғbSd}܁*6ѭk3;u9JDoN;CŒy8'izJMGιsYDTpk`i-Te(Qؼ/C54҉^]uq5.gjF{#$J[ 0L cѐ,?jO8#Vsz.iTf#ꫪ16@B̲zX|CgqIEAC=NVv˥o[cxǀ==~LT|?kkf׭#˚ S%S|V}K0ӫw[D{XCdne^K.˄ ED]ڷzᯈH6S$`hh1Şcg2; §%CeƏ=Kv2]LXeI|:5@(+ҀZSh~LSU8mt3]8sw+;g$0*IzYBfdd2eT)Zm~p.Ju[1oFW~UʱoħY6ݐHL b>Mϓ\uƪE>jQꏻwYu8$47V3?˫k}n݂-%x˼ |A'Oxo"`ɩϣv)S  tYS1yD_v3HhX-@X'nǏ&\f?r/}2V#_{!a\K3juրa#SC(&"*iowꠃ{ɟv"Z$UQ:ߋ4H>Slp.) $pEai vgT{gI,^me45BaE3U&""қ!i+kOI\NZX]&CO,β7b%<Č`}L!Q7a{t~TF XtNmm1Q # K`;oC-5UdTZ>l<:TWDGs %9yqǑ.vu49f٪D19}ƽ췉Lf5ؼtsvyyf3Ou+fUl=dͿMpM36zXG 8tl.[僄iA:<"_lOk !0jWa$!VǨGOB㏈A Ұe~!&"~U|:NF;ؘHeuGb^.pfFY2w>у+YzfEDd8ȽbS;=K+xz!;^NkOWX}ekkwDY{vߞ=׎ 9cxwW=L"ge:":SbX@YG""*8ac4gԁN DԫKuK/{Qf-(XX^[XsDU]Hn({FK^ 8{w+,[cRQvAk7C]b^ ZaS6KuM[R][7#"U.= 2ED-t-""JIS{3/$@o[c"B'B6þDDqgHMD͈VHEkDd(ґ^*H,}G}ҽ*ZXys,e0pKhWF+TTTDDtV8^TK]rڻr Usnݱ4 &)UxoK%)}}|9 rG-*l_aڃ*I*"ڒĵsR 7====#},.9ܲ[h-pBgfF)re8|5fTUM%KsD5[&8,+,yj^_ַ5:)vˡB(Qѳ6 UiB10Hfw^?c'vaZ1~RRKr\agdt|Pg&2iN—DJn*PM% ~uڗ]{S:Z]?;YE!,Υl!1~?P/@\{-Ţ/>3ti f XMGzvnVi;G4(:mSi$|vyi3]C1n*9~%Wg)e34RjZنTQZEzJAŏz彾z{Ɖ z8ֹfy0}JJnD))Q_d=ǣeVjJ!xTkQNsyn;yc=6بW>o\,{*LH@DT4TꈺE>WtqId\<.O^߶üu,:X"ڤc/t˼Ÿ) 㽅c+OGE&#rw󾔜Bll]|W?<ضwao~]o _>' q[/ bd0H,qpPs; H